./PaxHeaders.8617/eric4-4.5.180000644000175000001440000000013212262730777013664 xustar000000000000000030 mtime=1389081087.711724292 30 atime=1389081086.305724332 30 ctime=1389081087.711724292 eric4-4.5.18/0000755000175000001440000000000012262730777013336 5ustar00detlevusers00000000000000eric4-4.5.18/PaxHeaders.8617/patch_modpython.py0000644000175000001440000000013012262730776017353 xustar000000000000000029 mtime=1389081086.00472434 29 atime=1389081086.00472434 30 ctime=1389081086.307724332 eric4-4.5.18/patch_modpython.py0000644000175000001440000001027512262730776017114 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003-2014 Detlev Offenbach # # This is a script to patch mod_python for eric4. """ Script to patch mod_python for usage with the eric4 IDE. """ import sys import os import shutil import py_compile import distutils.sysconfig # Define the globals. progName = None modDir = None def usage(rcode = 2): """ Display a usage message and exit. rcode is the return code passed back to the calling process. """ global progName, modDir print "Usage:" print " %s [-h] [-d dir]" % (progName) print "where:" print " -h display this help message" print " -d dir where Mod_python files are installed [default %s]" % \ (modDir) print print "This script patches the file apache.py of the Mod_python distribution" print "so that it will work with the eric4 debugger instead of pdb." print "Please see mod_python.html for more details." print sys.exit(rcode) def initGlobals(): """ Sets the values of globals that need more than a simple assignment. """ global modDir modDir = os.path.join(distutils.sysconfig.get_python_lib(True), "mod_python") def main(argv): """The main function of the script. argv is the list of command line arguments. """ import getopt # Parse the command line. global progName, modDir progName = os.path.basename(argv[0]) initGlobals() try: optlist, args = getopt.getopt(argv[1:],"hd:") except getopt.GetoptError: usage() for opt, arg in optlist: if opt == "-h": usage(0) elif opt == "-d": global modDir modDir = arg try: filename = os.path.join(modDir, "apache.py") f = open(filename, "r") except EnvironmentError: print "The file %s does not exist. Aborting." % filename sys.exit(1) lines = f.readlines() f.close() pdbFound = False ericFound = False sn = "apache.py" s = open(sn, "w") for line in lines: if not pdbFound and line.startswith("import pdb"): s.write("import eric4.DebugClients.Python.eric4dbgstub as pdb\n") pdbFound = True else: s.write(line) if line.startswith("import eric4"): ericFound = True if not ericFound: s.write("\n") s.write('def initDebugger(name):\n') s.write(' """\n') s.write(' Initialize the debugger and set the script name to be reported \n') s.write(' by the debugger. This is a patch for eric4.\n') s.write(' """\n') s.write(' if not pdb.initDebugger("standard"):\n') s.write(' raise ImportError("Could not initialize debugger")\n') s.write(' pdb.setScriptname(name)\n') s.write("\n") s.close() if ericFound: print "Mod_python is already patched for eric4." os.remove(sn) else: try: py_compile.compile(sn) except py_compile.PyCompileError, e: print "Error compiling %s. Aborting" % sn print e os.remove(sn) sys.exit(1) except SyntaxError, e: print "Error compiling %s. Aborting" % sn print e os.remove(sn) sys.exit(1) shutil.copy(os.path.join(modDir, "apache.py"), os.path.join(modDir, "apache.py.orig")) shutil.copy(sn, modDir) os.remove(sn) if os.path.exists("%sc" % sn): shutil.copy("%sc" % sn, modDir) os.remove("%sc" % sn) if os.path.exists("%so" % sn): shutil.copy("%so" % sn, modDir) os.remove("%so" % sn) print "Mod_python patched successfully." print "Unpatched file copied to %s." % os.path.join(modDir, "apache.py.orig") if __name__ == "__main__": try: main(sys.argv) except SystemExit: raise except: print \ """An internal error occured. Please report all the output of the program, including the following traceback, to eric-bugs@die-offenbachs.de. """ raise eric4-4.5.18/PaxHeaders.8617/eric0000644000175000001440000000013212262730776014450 xustar000000000000000030 mtime=1389081086.289724333 30 atime=1389081086.290724332 30 ctime=1389081086.315724332 eric4-4.5.18/eric/0000755000175000001440000000000012262730776014257 5ustar00detlevusers00000000000000eric4-4.5.18/eric/PaxHeaders.8617/ViewManager0000644000175000001440000000013212262730776016655 xustar000000000000000030 mtime=1389081086.300724332 30 atime=1389081086.305724332 30 ctime=1389081086.315724332 eric4-4.5.18/eric/ViewManager/0000755000175000001440000000000012262730776016464 5ustar00detlevusers00000000000000eric4-4.5.18/eric/ViewManager/PaxHeaders.8617/BookmarkedFilesDialog.py0000644000175000001440000000013212261012647023452 xustar000000000000000030 mtime=1388582311.748073872 30 atime=1389081057.399723464 30 ctime=1389081086.307724332 eric4-4.5.18/eric/ViewManager/BookmarkedFilesDialog.py0000644000175000001440000001402012261012647023201 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2004 - 2014 Detlev Offenbach # """ Module implementing a configuration dialog for the bookmarked files menu. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQFileDialog from E4Gui.E4Completers import E4FileCompleter from Ui_BookmarkedFilesDialog import Ui_BookmarkedFilesDialog import Utilities class BookmarkedFilesDialog(QDialog, Ui_BookmarkedFilesDialog): """ Class implementing a configuration dialog for the bookmarked files menu. """ def __init__(self, bookmarks, parent = None): """ Constructor @param bookmarks list of bookmarked files (QStringList) @param parent parent widget (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.fileCompleter = E4FileCompleter(self.fileEdit) self.bookmarks = QStringList(bookmarks) for bookmark in self.bookmarks: itm = QListWidgetItem(bookmark, self.filesList) if not QFileInfo(bookmark).exists(): itm.setBackgroundColor(QColor(Qt.red)) if len(self.bookmarks): self.filesList.setCurrentRow(0) def on_fileEdit_textChanged(self, txt): """ Private slot to handle the textChanged signal of the file edit. @param txt the text of the file edit (QString) """ self.addButton.setEnabled(not txt.isEmpty()) self.changeButton.setEnabled(not txt.isEmpty() and \ self.filesList.currentRow() != -1) def on_filesList_currentRowChanged(self, row): """ Private slot to set the lineedit depending on the selected entry. @param row the current row (integer) """ if row == -1: self.fileEdit.clear() self.downButton.setEnabled(False) self.upButton.setEnabled(False) self.deleteButton.setEnabled(False) self.changeButton.setEnabled(False) else: maxIndex = len(self.bookmarks) - 1 self.upButton.setEnabled(row != 0) self.downButton.setEnabled(row != maxIndex) self.deleteButton.setEnabled(True) self.changeButton.setEnabled(True) bookmark = self.bookmarks[row] self.fileEdit.setText(bookmark) @pyqtSignature("") def on_addButton_clicked(self): """ Private slot to add a new entry. """ bookmark = self.fileEdit.text() if not bookmark.isEmpty(): bookmark = Utilities.toNativeSeparators(bookmark) itm = QListWidgetItem(bookmark, self.filesList) if not QFileInfo(bookmark).exists(): itm.setBackgroundColor(QColor(Qt.red)) self.fileEdit.clear() self.bookmarks.append(bookmark) row = self.filesList.currentRow() self.on_filesList_currentRowChanged(row) @pyqtSignature("") def on_changeButton_clicked(self): """ Private slot to change an entry. """ row = self.filesList.currentRow() bookmark = self.fileEdit.text() bookmark = Utilities.toNativeSeparators(bookmark) self.bookmarks[row] = bookmark itm = self.filesList.item(row) itm.setText(bookmark) if not QFileInfo(bookmark).exists(): itm.setBackgroundColor(QColor(Qt.red)) else: itm.setBackgroundColor(QColor()) @pyqtSignature("") def on_deleteButton_clicked(self): """ Private slot to delete the selected entry. """ row = self.filesList.currentRow() itm = self.filesList.takeItem(row) del itm del self.bookmarks[row] row = self.filesList.currentRow() self.on_filesList_currentRowChanged(row) @pyqtSignature("") def on_downButton_clicked(self): """ Private slot to move an entry down in the list. """ rows = self.filesList.count() row = self.filesList.currentRow() if row == rows - 1: # we're already at the end return self.__swap(row, row + 1) itm = self.filesList.takeItem(row) self.filesList.insertItem(row + 1, itm) self.filesList.setCurrentItem(itm) self.upButton.setEnabled(True) if row == rows - 2: self.downButton.setEnabled(False) else: self.downButton.setEnabled(True) @pyqtSignature("") def on_upButton_clicked(self): """ Private slot to move an entry up in the list. """ row = self.filesList.currentRow() if row == 0: # we're already at the top return self.__swap(row - 1, row) itm = self.filesList.takeItem(row) self.filesList.insertItem(row - 1, itm) self.filesList.setCurrentItem(itm) if row == 1: self.upButton.setEnabled(False) else: self.upButton.setEnabled(True) self.downButton.setEnabled(True) @pyqtSignature("") def on_fileButton_clicked(self): """ Private slot to handle the file selection via a file selection dialog. """ bookmark = KQFileDialog.getOpenFileName() if not bookmark.isEmpty(): bookmark = Utilities.toNativeSeparators(bookmark) self.fileEdit.setText(bookmark) def getBookmarkedFiles(self): """ Public method to retrieve the tools list. @return a list of filenames (QStringList) """ return self.bookmarks def __swap(self, itm1, itm2): """ Private method used two swap two list entries given by their index. @param itm1 index of first entry (int) @param itm2 index of second entry (int) """ tmp = self.bookmarks[itm1] self.bookmarks[itm1] = self.bookmarks[itm2] self.bookmarks[itm2] = tmp eric4-4.5.18/eric/ViewManager/PaxHeaders.8617/ViewManager.py0000644000175000001440000000013212261012647021476 xustar000000000000000030 mtime=1388582311.762074049 30 atime=1389081057.399723464 30 ctime=1389081086.307724332 eric4-4.5.18/eric/ViewManager/ViewManager.py0000644000175000001440000071447312261012647021250 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2002 - 2014 Detlev Offenbach # """ Module implementing the viewmanager base class. """ import os from PyQt4.QtCore import * from PyQt4.QtGui import * from PyQt4.Qsci import QsciScintilla from KdeQt import KQFileDialog, KQMessageBox from KdeQt.KQApplication import e4App from Globals import recentNameFiles, isMacPlatform import Preferences from BookmarkedFilesDialog import BookmarkedFilesDialog from QScintilla.QsciScintillaCompat import QSCINTILLA_VERSION from QScintilla.Editor import Editor from QScintilla.GotoDialog import GotoDialog from QScintilla.SearchReplaceWidget import SearchReplaceWidget from QScintilla.ZoomDialog import ZoomDialog from QScintilla.APIsManager import APIsManager from QScintilla.SpellChecker import SpellChecker import QScintilla.Lexers import QScintilla.Exporters from QScintilla.Shell import Shell import Utilities import UI.PixmapCache import UI.Config from E4Gui.E4Action import E4Action, createActionGroup class QuickSearchLineEdit(QLineEdit): """ Class implementing a line edit that reacts to newline and cancel commands. @signal escPressed() emitted after the cancel command was activated @signal returnPressed() emitted after a newline command was activated @signal gotFocus() emitted when the focus is changed to this widget """ def editorCommand(self, cmd): """ Public method to perform an editor command. @param cmd the scintilla command to be performed """ if cmd == QsciScintilla.SCI_NEWLINE: cb = self.parent() hasEntry = cb.findText(self.text()) != -1 if not hasEntry: if cb.insertPolicy() == QComboBox.InsertAtTop: cb.insertItem(0, self.text()) else: cb.addItem(self.text()) self.emit(SIGNAL("returnPressed()")) elif cmd == QsciScintilla.SCI_CANCEL: self.emit(SIGNAL("escPressed()")) def keyPressEvent(self, evt): """ Re-implemented to handle the press of the ESC key. @param evt key event (QKeyPressEvent) """ if evt.key() == Qt.Key_Escape: self.emit(SIGNAL("escPressed()")) else: QLineEdit.keyPressEvent(self, evt) # pass it on def focusInEvent(self, evt): """ Re-implemented to record the current editor widget. @param evt focus event (QFocusEvent) """ self.emit(SIGNAL("gotFocus()")) QLineEdit.focusInEvent(self, evt) # pass it on class ViewManager(QObject): """ Base class inherited by all specific viewmanager classes. It defines the interface to be implemented by specific viewmanager classes and all common methods. @signal lastEditorClosed emitted after the last editor window was closed @signal editorOpened(string) emitted after an editor window was opened @signal editorOpenedEd(editor) emitted after an editor window was opened @signal editorClosed(string) emitted just before an editor window gets closed @signal editorClosedEd(editor) emitted just before an editor window gets closed @signal editorSaved(string) emitted after an editor window was saved @signal checkActions(editor) emitted when some actions should be checked for their status @signal cursorChanged(editor) emitted after the cursor position of the active window has changed @signal breakpointToggled(editor) emitted when a breakpoint is toggled. @signal bookmarkToggled(editor) emitted when a bookmark is toggled. """ def __init__(self): """ Constructor @param ui reference to the main user interface @param dbs reference to the debug server object """ QObject.__init__(self) # initialize the instance variables self.editors = [] self.currentEditor = None self.untitledCount = 0 self.srHistory = { "search" : QStringList(), "replace" : QStringList() } self.editorsCheckFocusIn = True self.recent = QStringList() self.__loadRecent() self.bookmarked = QStringList() bs = Preferences.Prefs.settings.value("Bookmarked/Sources") if bs.isValid(): self.bookmarked = bs.toStringList() # initialize the autosave timer self.autosaveInterval = Preferences.getEditor("AutosaveInterval") self.autosaveTimer = QTimer(self) self.autosaveTimer.setObjectName("AutosaveTimer") self.autosaveTimer.setSingleShot(True) self.connect(self.autosaveTimer, SIGNAL('timeout()'), self.__autosave) # initialize the APIs manager self.apisManager = APIsManager(parent = self) def setReferences(self, ui, dbs): """ Public method to set some references needed later on. @param ui reference to the main user interface @param dbs reference to the debug server object """ self.ui = ui self.dbs = dbs self.searchDlg = SearchReplaceWidget(False, self, ui) self.replaceDlg = SearchReplaceWidget(True, self, ui) self.connect(self, SIGNAL("checkActions"), self.searchDlg.updateSelectionCheckBox) self.connect(self, SIGNAL("checkActions"), self.replaceDlg.updateSelectionCheckBox) def __loadRecent(self): """ Private method to load the recently opened filenames. """ self.recent.clear() Preferences.Prefs.rsettings.sync() rs = Preferences.Prefs.rsettings.value(recentNameFiles) if rs.isValid(): for f in rs.toStringList(): if QFileInfo(f).exists(): self.recent.append(f) def __saveRecent(self): """ Private method to save the list of recently opened filenames. """ Preferences.Prefs.rsettings.setValue(recentNameFiles, QVariant(self.recent)) Preferences.Prefs.rsettings.sync() def getMostRecent(self): """ Public method to get the most recently opened file. @return path of the most recently opened file (string) """ if len(self.recent): return unicode(self.recent[0]) else: return None def setSbInfo(self, sbFile, sbLine, sbPos, sbWritable, sbEncoding, sbLanguage, sbEol): """ Public method to transfer statusbar info from the user interface to viewmanager. @param sbFile reference to the file part of the statusbar (E4SqueezeLabelPath) @param sbLine reference to the line number part of the statusbar (QLabel) @param sbPos reference to the character position part of the statusbar (QLabel) @param sbWritable reference to the writability indicator part of the statusbar (QLabel) @param sbEncoding reference to the encoding indicator part of the statusbar (QLabel) @param sbLanguage reference to the language indicator part of the statusbar (QLabel) @param sbEol reference to the eol indicator part of the statusbar (QLabel) """ self.sbFile = sbFile self.sbLine = sbLine self.sbPos = sbPos self.sbWritable = sbWritable self.sbEnc = sbEncoding self.sbLang = sbLanguage self.sbEol = sbEol self.__setSbFile() ############################################################################ ## methods below need to be implemented by a subclass ############################################################################ def canCascade(self): """ Public method to signal if cascading of managed windows is available. @return flag indicating cascading of windows is available @exception RuntimeError Not implemented """ raise RuntimeError('Not implemented') def canTile(self): """ Public method to signal if tiling of managed windows is available. @return flag indicating tiling of windows is available @exception RuntimeError Not implemented """ raise RuntimeError('Not implemented') def tile(self): """ Public method to tile the managed windows. @exception RuntimeError Not implemented """ raise RuntimeError('Not implemented') def cascade(self): """ Public method to cascade the managed windows. @exception RuntimeError Not implemented """ raise RuntimeError('Not implemented') def activeWindow(self): """ Public method to return the active (i.e. current) window. @return reference to the active editor @exception RuntimeError Not implemented """ raise RuntimeError('Not implemented') def _removeAllViews(self): """ Protected method to remove all views (i.e. windows) @exception RuntimeError Not implemented """ raise RuntimeError('Not implemented') def _removeView(self, win): """ Protected method to remove a view (i.e. window) @param win editor window to be removed @exception RuntimeError Not implemented """ raise RuntimeError('Not implemented') def _addView(self, win, fn=None, noName=""): """ Protected method to add a view (i.e. window) @param win editor window to be added @param fn filename of this editor @param noName name to be used for an unnamed editor (string or QString) @exception RuntimeError Not implemented """ raise RuntimeError('Not implemented') def _showView(self, win, fn=None): """ Protected method to show a view (i.e. window) @param win editor window to be shown @param fn filename of this editor @exception RuntimeError Not implemented """ raise RuntimeError('Not implemented') def showWindowMenu(self, windowMenu): """ Public method to set up the viewmanager part of the Window menu. @param windowMenu reference to the window menu @exception RuntimeError Not implemented """ raise RuntimeError('Not implemented') def _initWindowActions(self): """ Protected method to define the user interface actions for window handling. @exception RuntimeError Not implemented """ raise RuntimeError('Not implemented') def setEditorName(self, editor, newName): """ Public method to change the displayed name of the editor. @param editor editor window to be changed @param newName new name to be shown (string or QString) @exception RuntimeError Not implemented """ raise RuntimeError('Not implemented') def _modificationStatusChanged(self, m, editor): """ Protected slot to handle the modificationStatusChanged signal. @param m flag indicating the modification status (boolean) @param editor editor window changed @exception RuntimeError Not implemented """ raise RuntimeError('Not implemented') ##################################################################### ## methods above need to be implemented by a subclass ##################################################################### def canSplit(self): """ Public method to signal if splitting of the view is available. @return flag indicating splitting of the view is available. """ return False def addSplit(self): """ Public method used to split the current view. """ pass def removeSplit(self): """ Public method used to remove the current split view. @return Flag indicating successful deletion """ return False def setSplitOrientation(self, orientation): """ Public method used to set the orientation of the split view. @param orientation orientation of the split (Qt.Horizontal or Qt.Vertical) """ pass def nextSplit(self): """ Public slot used to move to the next split. """ pass def prevSplit(self): """ Public slot used to move to the previous split. """ pass def eventFilter(self, object, event): """ Public method called to filter an event. @param object object, that generated the event (QObject) @param event the event, that was generated by object (QEvent) @return flag indicating if event was filtered out """ return False ##################################################################### ## methods above need to be implemented by a subclass, that supports ## splitting of the viewmanager area. ##################################################################### def initActions(self): """ Public method defining the user interface actions. """ # list containing all edit actions self.editActions = [] # list containing all file actions self.fileActions = [] # list containing all search actions self.searchActions = [] # list containing all view actions self.viewActions = [] # list containing all window actions self.windowActions = [] # list containing all macro actions self.macroActions = [] # list containing all bookmark actions self.bookmarkActions = [] # list containing all spell checking actions self.spellingActions = [] self._initWindowActions() self.__initFileActions() self.__initEditActions() self.__initSearchActions() self.__initViewActions() self.__initMacroActions() self.__initBookmarkActions() self.__initSpellingActions() ################################################################## ## Initialize the file related actions, file menu and toolbar ################################################################## def __initFileActions(self): """ Private method defining the user interface actions for file handling. """ self.newAct = E4Action(QApplication.translate('ViewManager', 'New'), UI.PixmapCache.getIcon("new.png"), QApplication.translate('ViewManager', '&New'), QKeySequence(QApplication.translate('ViewManager', "Ctrl+N", "File|New")), 0, self, 'vm_file_new') self.newAct.setStatusTip(\ QApplication.translate('ViewManager', 'Open an empty editor window')) self.newAct.setWhatsThis(QApplication.translate('ViewManager', """New""" """

An empty editor window will be created.

""" )) self.connect(self.newAct, SIGNAL('triggered()'), self.newEditor) self.fileActions.append(self.newAct) self.openAct = E4Action(QApplication.translate('ViewManager', 'Open'), UI.PixmapCache.getIcon("open.png"), QApplication.translate('ViewManager', '&Open...'), QKeySequence(\ QApplication.translate('ViewManager', "Ctrl+O", "File|Open")), 0, self, 'vm_file_open') self.openAct.setStatusTip(QApplication.translate('ViewManager', 'Open a file')) self.openAct.setWhatsThis(QApplication.translate('ViewManager', """Open a file""" """

You will be asked for the name of a file to be opened""" """ in an editor window.

""" )) self.connect(self.openAct, SIGNAL('triggered()'), self.openFiles) self.fileActions.append(self.openAct) self.closeActGrp = createActionGroup(self) self.closeAct = E4Action(QApplication.translate('ViewManager', 'Close'), UI.PixmapCache.getIcon("close.png"), QApplication.translate('ViewManager', '&Close'), QKeySequence(\ QApplication.translate('ViewManager', "Ctrl+W", "File|Close")), 0, self.closeActGrp, 'vm_file_close') self.closeAct.setStatusTip(\ QApplication.translate('ViewManager', 'Close the current window')) self.closeAct.setWhatsThis(QApplication.translate('ViewManager', """Close Window""" """

Close the current window.

""" )) self.connect(self.closeAct, SIGNAL('triggered()'), self.closeCurrentWindow) self.fileActions.append(self.closeAct) self.closeAllAct = E4Action(QApplication.translate('ViewManager', 'Close All'), QApplication.translate('ViewManager', 'Clos&e All'), 0, 0, self.closeActGrp, 'vm_file_close_all') self.closeAllAct.setStatusTip(\ QApplication.translate('ViewManager', 'Close all editor windows')) self.closeAllAct.setWhatsThis(QApplication.translate('ViewManager', """Close All Windows""" """

Close all editor windows.

""" )) self.connect(self.closeAllAct, SIGNAL('triggered()'), self.closeAllWindows) self.fileActions.append(self.closeAllAct) self.closeActGrp.setEnabled(False) self.saveActGrp = createActionGroup(self) self.saveAct = E4Action(QApplication.translate('ViewManager', 'Save'), UI.PixmapCache.getIcon("fileSave.png"), QApplication.translate('ViewManager', '&Save'), QKeySequence(\ QApplication.translate('ViewManager', "Ctrl+S", "File|Save")), 0, self.saveActGrp, 'vm_file_save') self.saveAct.setStatusTip(\ QApplication.translate('ViewManager', 'Save the current file')) self.saveAct.setWhatsThis(QApplication.translate('ViewManager', """Save File""" """

Save the contents of current editor window.

""" )) self.connect(self.saveAct, SIGNAL('triggered()'), self.saveCurrentEditor) self.fileActions.append(self.saveAct) self.saveAsAct = E4Action(QApplication.translate('ViewManager', 'Save as'), UI.PixmapCache.getIcon("fileSaveAs.png"), QApplication.translate('ViewManager', 'Save &as...'), QKeySequence(QApplication.translate('ViewManager', "Shift+Ctrl+S", "File|Save As")), 0, self.saveActGrp, 'vm_file_save_as') self.saveAsAct.setStatusTip(QApplication.translate('ViewManager', 'Save the current file to a new one')) self.saveAsAct.setWhatsThis(QApplication.translate('ViewManager', """Save File as""" """

Save the contents of current editor window to a new file.""" """ The file can be entered in a file selection dialog.

""" )) self.connect(self.saveAsAct, SIGNAL('triggered()'), self.saveAsCurrentEditor) self.fileActions.append(self.saveAsAct) self.saveAllAct = E4Action(QApplication.translate('ViewManager', 'Save all'), UI.PixmapCache.getIcon("fileSaveAll.png"), QApplication.translate('ViewManager', 'Save a&ll'), 0, 0, self.saveActGrp, 'vm_file_save_all') self.saveAllAct.setStatusTip(QApplication.translate('ViewManager', 'Save all files')) self.saveAllAct.setWhatsThis(QApplication.translate('ViewManager', """Save All Files""" """

Save the contents of all editor windows.

""" )) self.connect(self.saveAllAct, SIGNAL('triggered()'), self.saveAllEditors) self.fileActions.append(self.saveAllAct) self.saveActGrp.setEnabled(False) self.printAct = E4Action(QApplication.translate('ViewManager', 'Print'), UI.PixmapCache.getIcon("print.png"), QApplication.translate('ViewManager', '&Print'), QKeySequence(QApplication.translate('ViewManager', "Ctrl+P", "File|Print")), 0, self, 'vm_file_print') self.printAct.setStatusTip(QApplication.translate('ViewManager', 'Print the current file')) self.printAct.setWhatsThis(QApplication.translate('ViewManager', """Print File""" """

Print the contents of current editor window.

""" )) self.connect(self.printAct, SIGNAL('triggered()'), self.printCurrentEditor) self.printAct.setEnabled(False) self.fileActions.append(self.printAct) self.printPreviewAct = \ E4Action(QApplication.translate('ViewManager', 'Print Preview'), UI.PixmapCache.getIcon("printPreview.png"), QApplication.translate('ViewManager', 'Print Preview'), 0, 0, self, 'vm_file_print_preview') self.printPreviewAct.setStatusTip(QApplication.translate('ViewManager', 'Print preview of the current file')) self.printPreviewAct.setWhatsThis(QApplication.translate('ViewManager', """Print Preview""" """

Print preview of the current editor window.

""" )) self.connect(self.printPreviewAct, SIGNAL('triggered()'), self.printPreviewCurrentEditor) self.printPreviewAct.setEnabled(False) self.fileActions.append(self.printPreviewAct) self.findFileNameAct = E4Action(QApplication.translate('ViewManager', 'Search File'), QApplication.translate('ViewManager', 'Search &File...'), QKeySequence(QApplication.translate('ViewManager', "Alt+Ctrl+F", "File|Search File")), 0, self, 'vm_file_search_file') self.findFileNameAct.setStatusTip(QApplication.translate('ViewManager', 'Search for a file')) self.findFileNameAct.setWhatsThis(QApplication.translate('ViewManager', """Search File""" """

Search for a file.

""" )) self.connect(self.findFileNameAct, SIGNAL('triggered()'), self.__findFileName) self.fileActions.append(self.findFileNameAct) def initFileMenu(self): """ Public method to create the File menu. @return the generated menu """ menu = QMenu(QApplication.translate('ViewManager', '&File'), self.ui) self.recentMenu = QMenu(QApplication.translate('ViewManager', 'Open &Recent Files'), menu) self.bookmarkedMenu = QMenu(QApplication.translate('ViewManager', 'Open &Bookmarked Files'), menu) self.exportersMenu = self.__initContextMenuExporters() menu.setTearOffEnabled(True) menu.addAction(self.newAct) menu.addAction(self.openAct) self.menuRecentAct = menu.addMenu(self.recentMenu) menu.addMenu(self.bookmarkedMenu) menu.addSeparator() menu.addAction(self.closeAct) menu.addAction(self.closeAllAct) menu.addSeparator() menu.addAction(self.findFileNameAct) menu.addSeparator() menu.addAction(self.saveAct) menu.addAction(self.saveAsAct) menu.addAction(self.saveAllAct) self.exportersMenuAct = menu.addMenu(self.exportersMenu) menu.addSeparator() menu.addAction(self.printPreviewAct) menu.addAction(self.printAct) self.connect(self.recentMenu, SIGNAL('aboutToShow()'), self.__showRecentMenu) self.connect(self.recentMenu, SIGNAL('triggered(QAction *)'), self.__openSourceFile) self.connect(self.bookmarkedMenu, SIGNAL('aboutToShow()'), self.__showBookmarkedMenu) self.connect(self.bookmarkedMenu, SIGNAL('triggered(QAction *)'), self.__openSourceFile) self.connect(menu, SIGNAL('aboutToShow()'), self.__showFileMenu) self.exportersMenuAct.setEnabled(False) return menu def initFileToolbar(self, toolbarManager): """ Public method to create the File toolbar. @param toolbarManager reference to a toolbar manager object (E4ToolBarManager) @return the generated toolbar """ tb = QToolBar(QApplication.translate('ViewManager', 'File'), self.ui) tb.setIconSize(UI.Config.ToolBarIconSize) tb.setObjectName("FileToolbar") tb.setToolTip(QApplication.translate('ViewManager', 'File')) tb.addAction(self.newAct) tb.addAction(self.openAct) tb.addAction(self.closeAct) tb.addSeparator() tb.addAction(self.saveAct) tb.addAction(self.saveAsAct) tb.addAction(self.saveAllAct) toolbarManager.addToolBar(tb, tb.windowTitle()) toolbarManager.addAction(self.printPreviewAct, tb.windowTitle()) toolbarManager.addAction(self.printAct, tb.windowTitle()) return tb def __initContextMenuExporters(self): """ Private method used to setup the Exporters sub menu. """ menu = QMenu(QApplication.translate('ViewManager', "Export as")) supportedExporters = QScintilla.Exporters.getSupportedFormats() exporters = supportedExporters.keys() exporters.sort() for exporter in exporters: act = menu.addAction(supportedExporters[exporter]) act.setData(QVariant(exporter)) self.connect(menu, SIGNAL('triggered(QAction *)'), self.__exportMenuTriggered) return menu ################################################################## ## Initialize the edit related actions, edit menu and toolbar ################################################################## def __initEditActions(self): """ Private method defining the user interface actions for the edit commands. """ self.editActGrp = createActionGroup(self) self.undoAct = E4Action(QApplication.translate('ViewManager', 'Undo'), UI.PixmapCache.getIcon("editUndo.png"), QApplication.translate('ViewManager', '&Undo'), QKeySequence(QApplication.translate('ViewManager', "Ctrl+Z", "Edit|Undo")), QKeySequence(QApplication.translate('ViewManager', "Alt+Backspace", "Edit|Undo")), self.editActGrp, 'vm_edit_undo') self.undoAct.setStatusTip(QApplication.translate('ViewManager', 'Undo the last change')) self.undoAct.setWhatsThis(QApplication.translate('ViewManager', """Undo""" """

Undo the last change done in the current editor.

""" )) self.connect(self.undoAct, SIGNAL('triggered()'), self.__editUndo) self.editActions.append(self.undoAct) self.redoAct = E4Action(QApplication.translate('ViewManager', 'Redo'), UI.PixmapCache.getIcon("editRedo.png"), QApplication.translate('ViewManager', '&Redo'), QKeySequence(QApplication.translate('ViewManager', "Ctrl+Shift+Z", "Edit|Redo")), 0, self.editActGrp, 'vm_edit_redo') self.redoAct.setStatusTip(QApplication.translate('ViewManager', 'Redo the last change')) self.redoAct.setWhatsThis(QApplication.translate('ViewManager', """Redo""" """

Redo the last change done in the current editor.

""" )) self.connect(self.redoAct, SIGNAL('triggered()'), self.__editRedo) self.editActions.append(self.redoAct) self.revertAct = E4Action(QApplication.translate('ViewManager', 'Revert to last saved state'), QApplication.translate('ViewManager', 'Re&vert to last saved state'), QKeySequence(QApplication.translate('ViewManager', "Ctrl+Y", "Edit|Revert")), 0, self.editActGrp, 'vm_edit_revert') self.revertAct.setStatusTip(QApplication.translate('ViewManager', 'Revert to last saved state')) self.revertAct.setWhatsThis(QApplication.translate('ViewManager', """Revert to last saved state""" """

Undo all changes up to the last saved state""" """ of the current editor.

""" )) self.connect(self.revertAct, SIGNAL('triggered()'), self.__editRevert) self.editActions.append(self.revertAct) self.copyActGrp = createActionGroup(self.editActGrp) self.cutAct = E4Action(QApplication.translate('ViewManager', 'Cut'), UI.PixmapCache.getIcon("editCut.png"), QApplication.translate('ViewManager', 'Cu&t'), QKeySequence(QApplication.translate('ViewManager', "Ctrl+X", "Edit|Cut")), QKeySequence(QApplication.translate('ViewManager', "Shift+Del", "Edit|Cut")), self.copyActGrp, 'vm_edit_cut') self.cutAct.setStatusTip(QApplication.translate('ViewManager', 'Cut the selection')) self.cutAct.setWhatsThis(QApplication.translate('ViewManager', """Cut""" """

Cut the selected text of the current editor to the clipboard.

""" )) self.connect(self.cutAct, SIGNAL('triggered()'), self.__editCut) self.editActions.append(self.cutAct) self.copyAct = E4Action(QApplication.translate('ViewManager', 'Copy'), UI.PixmapCache.getIcon("editCopy.png"), QApplication.translate('ViewManager', '&Copy'), QKeySequence(QApplication.translate('ViewManager', "Ctrl+C", "Edit|Copy")), QKeySequence(QApplication.translate('ViewManager', "Ctrl+Ins", "Edit|Copy")), self.copyActGrp, 'vm_edit_copy') self.copyAct.setStatusTip(QApplication.translate('ViewManager', 'Copy the selection')) self.copyAct.setWhatsThis(QApplication.translate('ViewManager', """Copy""" """

Copy the selected text of the current editor to the clipboard.

""" )) self.connect(self.copyAct, SIGNAL('triggered()'), self.__editCopy) self.editActions.append(self.copyAct) self.pasteAct = E4Action(QApplication.translate('ViewManager', 'Paste'), UI.PixmapCache.getIcon("editPaste.png"), QApplication.translate('ViewManager', '&Paste'), QKeySequence(QApplication.translate('ViewManager', "Ctrl+V", "Edit|Paste")), QKeySequence(QApplication.translate('ViewManager', "Shift+Ins", "Edit|Paste")), self.copyActGrp, 'vm_edit_paste') self.pasteAct.setStatusTip(QApplication.translate('ViewManager', 'Paste the last cut/copied text')) self.pasteAct.setWhatsThis(QApplication.translate('ViewManager', """Paste""" """

Paste the last cut/copied text from the clipboard to""" """ the current editor.

""" )) self.connect(self.pasteAct, SIGNAL('triggered()'), self.__editPaste) self.editActions.append(self.pasteAct) self.deleteAct = E4Action(QApplication.translate('ViewManager', 'Clear'), UI.PixmapCache.getIcon("editDelete.png"), QApplication.translate('ViewManager', 'Cl&ear'), QKeySequence(QApplication.translate('ViewManager', "Alt+Shift+C", "Edit|Clear")), 0, self.copyActGrp, 'vm_edit_clear') self.deleteAct.setStatusTip(QApplication.translate('ViewManager', 'Clear all text')) self.deleteAct.setWhatsThis(QApplication.translate('ViewManager', """Clear""" """

Delete all text of the current editor.

""" )) self.connect(self.deleteAct, SIGNAL('triggered()'), self.__editDelete) self.editActions.append(self.deleteAct) self.indentAct = E4Action(QApplication.translate('ViewManager', 'Indent'), UI.PixmapCache.getIcon("editIndent.png"), QApplication.translate('ViewManager', '&Indent'), QKeySequence(QApplication.translate('ViewManager', "Ctrl+I", "Edit|Indent")), 0, self.editActGrp, 'vm_edit_indent') self.indentAct.setStatusTip(QApplication.translate('ViewManager', 'Indent line')) self.indentAct.setWhatsThis(QApplication.translate('ViewManager', """Indent""" """

Indents the current line or the lines of the""" """ selection by one level.

""" )) self.connect(self.indentAct, SIGNAL('triggered()'), self.__editIndent) self.editActions.append(self.indentAct) self.unindentAct = E4Action(QApplication.translate('ViewManager', 'Unindent'), UI.PixmapCache.getIcon("editUnindent.png"), QApplication.translate('ViewManager', 'U&nindent'), QKeySequence(QApplication.translate('ViewManager', "Ctrl+Shift+I", "Edit|Unindent")), 0, self.editActGrp, 'vm_edit_unindent') self.unindentAct.setStatusTip(QApplication.translate('ViewManager', 'Unindent line')) self.unindentAct.setWhatsThis(QApplication.translate('ViewManager', """Unindent""" """

Unindents the current line or the lines of the""" """ selection by one level.

""" )) self.connect(self.unindentAct, SIGNAL('triggered()'), self.__editUnindent) self.editActions.append(self.unindentAct) self.smartIndentAct = E4Action(QApplication.translate('ViewManager', 'Smart indent'), UI.PixmapCache.getIcon("editSmartIndent.png"), QApplication.translate('ViewManager', 'Smart indent'), QKeySequence(QApplication.translate('ViewManager', "Ctrl+Alt+I", "Edit|Smart indent")), 0, self.editActGrp, 'vm_edit_smart_indent') self.smartIndentAct.setStatusTip(QApplication.translate('ViewManager', 'Smart indent Line or Selection')) self.smartIndentAct.setWhatsThis(QApplication.translate('ViewManager', """Smart indent""" """

Indents the current line or the lines of the""" """ current selection smartly.

""" )) self.connect(self.smartIndentAct, SIGNAL('triggered()'), self.__editSmartIndent) self.editActions.append(self.smartIndentAct) self.commentAct = E4Action(QApplication.translate('ViewManager', 'Comment'), UI.PixmapCache.getIcon("editComment.png"), QApplication.translate('ViewManager', 'C&omment'), QKeySequence(QApplication.translate('ViewManager', "Ctrl+M", "Edit|Comment")), 0, self.editActGrp, 'vm_edit_comment') self.commentAct.setStatusTip(QApplication.translate('ViewManager', 'Comment Line or Selection')) self.commentAct.setWhatsThis(QApplication.translate('ViewManager', """Comment""" """

Comments the current line or the lines of the""" """ current selection.

""" )) self.connect(self.commentAct, SIGNAL('triggered()'), self.__editComment) self.editActions.append(self.commentAct) self.uncommentAct = E4Action(QApplication.translate('ViewManager', 'Uncomment'), UI.PixmapCache.getIcon("editUncomment.png"), QApplication.translate('ViewManager', 'Unco&mment'), QKeySequence(QApplication.translate('ViewManager', "Alt+Ctrl+M", "Edit|Uncomment")), 0, self.editActGrp, 'vm_edit_uncomment') self.uncommentAct.setStatusTip(QApplication.translate('ViewManager', 'Uncomment Line or Selection')) self.uncommentAct.setWhatsThis(QApplication.translate('ViewManager', """Uncomment""" """

Uncomments the current line or the lines of the""" """ current selection.

""" )) self.connect(self.uncommentAct, SIGNAL('triggered()'), self.__editUncomment) self.editActions.append(self.uncommentAct) self.streamCommentAct = E4Action(QApplication.translate('ViewManager', 'Stream Comment'), QApplication.translate('ViewManager', 'Stream Comment'), 0, 0, self.editActGrp, 'vm_edit_stream_comment') self.streamCommentAct.setStatusTip(QApplication.translate('ViewManager', 'Stream Comment Line or Selection')) self.streamCommentAct.setWhatsThis(QApplication.translate('ViewManager', """Stream Comment""" """

Stream comments the current line or the current selection.

""" )) self.connect(self.streamCommentAct, SIGNAL('triggered()'), self.__editStreamComment) self.editActions.append(self.streamCommentAct) self.boxCommentAct = E4Action(QApplication.translate('ViewManager', 'Box Comment'), QApplication.translate('ViewManager', 'Box Comment'), 0, 0, self.editActGrp, 'vm_edit_box_comment') self.boxCommentAct.setStatusTip(QApplication.translate('ViewManager', 'Box Comment Line or Selection')) self.boxCommentAct.setWhatsThis(QApplication.translate('ViewManager', """Box Comment""" """

Box comments the current line or the lines of the""" """ current selection.

""" )) self.connect(self.boxCommentAct, SIGNAL('triggered()'), self.__editBoxComment) self.editActions.append(self.boxCommentAct) self.selectBraceAct = E4Action(QApplication.translate('ViewManager', 'Select to brace'), QApplication.translate('ViewManager', 'Select to &brace'), QKeySequence(QApplication.translate('ViewManager', "Ctrl+E", "Edit|Select to brace")), 0, self.editActGrp, 'vm_edit_select_to_brace') self.selectBraceAct.setStatusTip(QApplication.translate('ViewManager', 'Select text to the matching brace')) self.selectBraceAct.setWhatsThis(QApplication.translate('ViewManager', """Select to brace""" """

Select text of the current editor to the matching brace.

""" )) self.connect(self.selectBraceAct, SIGNAL('triggered()'), self.__editSelectBrace) self.editActions.append(self.selectBraceAct) self.selectAllAct = E4Action(QApplication.translate('ViewManager', 'Select all'), QApplication.translate('ViewManager', '&Select all'), QKeySequence(QApplication.translate('ViewManager', "Ctrl+A", "Edit|Select all")), 0, self.editActGrp, 'vm_edit_select_all') self.selectAllAct.setStatusTip(QApplication.translate('ViewManager', 'Select all text')) self.selectAllAct.setWhatsThis(QApplication.translate('ViewManager', """Select All""" """

Select all text of the current editor.

""" )) self.connect(self.selectAllAct, SIGNAL('triggered()'), self.__editSelectAll) self.editActions.append(self.selectAllAct) self.deselectAllAct = E4Action(QApplication.translate('ViewManager', 'Deselect all'), QApplication.translate('ViewManager', '&Deselect all'), QKeySequence(QApplication.translate('ViewManager', "Alt+Ctrl+A", "Edit|Deselect all")), 0, self.editActGrp, 'vm_edit_deselect_all') self.deselectAllAct.setStatusTip(QApplication.translate('ViewManager', 'Deselect all text')) self.deselectAllAct.setWhatsThis(QApplication.translate('ViewManager', """Deselect All""" """

Deselect all text of the current editor.

""" )) self.connect(self.deselectAllAct, SIGNAL('triggered()'), self.__editDeselectAll) self.editActions.append(self.deselectAllAct) self.convertEOLAct = E4Action(QApplication.translate('ViewManager', 'Convert Line End Characters'), QApplication.translate('ViewManager', 'Convert &Line End Characters'), 0, 0, self.editActGrp, 'vm_edit_convert_eol') self.convertEOLAct.setStatusTip(QApplication.translate('ViewManager', 'Convert Line End Characters')) self.convertEOLAct.setWhatsThis(QApplication.translate('ViewManager', """Convert Line End Characters""" """

Convert the line end characters to the currently set type.

""" )) self.connect(self.convertEOLAct, SIGNAL('triggered()'), self.__convertEOL) self.editActions.append(self.convertEOLAct) self.shortenEmptyAct = E4Action(QApplication.translate('ViewManager', 'Shorten empty lines'), QApplication.translate('ViewManager', 'Shorten empty lines'), 0, 0, self.editActGrp, 'vm_edit_shorten_empty_lines') self.shortenEmptyAct.setStatusTip(QApplication.translate('ViewManager', 'Shorten empty lines')) self.shortenEmptyAct.setWhatsThis(QApplication.translate('ViewManager', """Shorten empty lines""" """

Shorten lines consisting solely of whitespace characters.

""" )) self.connect(self.shortenEmptyAct, SIGNAL('triggered()'), self.__shortenEmptyLines) self.editActions.append(self.shortenEmptyAct) self.autoCompleteAct = E4Action(QApplication.translate('ViewManager', 'Autocomplete'), QApplication.translate('ViewManager', '&Autocomplete'), QKeySequence(QApplication.translate('ViewManager', "Ctrl+Space", "Edit|Autocomplete")), 0, self.editActGrp, 'vm_edit_autocomplete') self.autoCompleteAct.setStatusTip(QApplication.translate('ViewManager', 'Autocomplete current word')) self.autoCompleteAct.setWhatsThis(QApplication.translate('ViewManager', """Autocomplete""" """

Performs an autocompletion of the word containing the cursor.

""" )) self.connect(self.autoCompleteAct, SIGNAL('triggered()'), self.__editAutoComplete) self.editActions.append(self.autoCompleteAct) self.autoCompleteFromDocAct = E4Action(QApplication.translate('ViewManager', 'Autocomplete from Document'), QApplication.translate('ViewManager', 'Autocomplete from Document'), QKeySequence(QApplication.translate('ViewManager', "Ctrl+Shift+Space", "Edit|Autocomplete from Document")), 0, self.editActGrp, 'vm_edit_autocomplete_from_document') self.autoCompleteFromDocAct.setStatusTip(QApplication.translate('ViewManager', 'Autocomplete current word from Document')) self.autoCompleteFromDocAct.setWhatsThis(QApplication.translate('ViewManager', """Autocomplete from Document""" """

Performs an autocompletion from document of the word""" """ containing the cursor.

""" )) self.connect(self.autoCompleteFromDocAct, SIGNAL('triggered()'), self.__editAutoCompleteFromDoc) self.editActions.append(self.autoCompleteFromDocAct) self.autoCompleteFromAPIsAct = E4Action(QApplication.translate('ViewManager', 'Autocomplete from APIs'), QApplication.translate('ViewManager', 'Autocomplete from APIs'), QKeySequence(QApplication.translate('ViewManager', "Ctrl+Alt+Space", "Edit|Autocomplete from APIs")), 0, self.editActGrp, 'vm_edit_autocomplete_from_api') self.autoCompleteFromAPIsAct.setStatusTip(QApplication.translate('ViewManager', 'Autocomplete current word from APIs')) self.autoCompleteFromAPIsAct.setWhatsThis(QApplication.translate('ViewManager', """Autocomplete from APIs""" """

Performs an autocompletion from APIs of the word containing""" """ the cursor.

""" )) self.connect(self.autoCompleteFromAPIsAct, SIGNAL('triggered()'), self.__editAutoCompleteFromAPIs) self.editActions.append(self.autoCompleteFromAPIsAct) self.autoCompleteFromAllAct = E4Action(\ QApplication.translate('ViewManager', 'Autocomplete from Document and APIs'), QApplication.translate('ViewManager', 'Autocomplete from Document and APIs'), QKeySequence(QApplication.translate('ViewManager', "Alt+Shift+Space", "Edit|Autocomplete from Document and APIs")), 0, self.editActGrp, 'vm_edit_autocomplete_from_all') self.autoCompleteFromAllAct.setStatusTip(QApplication.translate('ViewManager', 'Autocomplete current word from Document and APIs')) self.autoCompleteFromAllAct.setWhatsThis(QApplication.translate('ViewManager', """Autocomplete from Document and APIs""" """

Performs an autocompletion from document and APIs""" """ of the word containing the cursor.

""" )) self.connect(self.autoCompleteFromAllAct, SIGNAL('triggered()'), self.__editAutoCompleteFromAll) self.editActions.append(self.autoCompleteFromAllAct) self.calltipsAct = E4Action(QApplication.translate('ViewManager', 'Calltip'), QApplication.translate('ViewManager', '&Calltip'), QKeySequence(QApplication.translate('ViewManager', "Alt+Space", "Edit|Calltip")), 0, self.editActGrp, 'vm_edit_calltip') self.calltipsAct.setStatusTip(QApplication.translate('ViewManager', 'Show Calltips')) self.calltipsAct.setWhatsThis(QApplication.translate('ViewManager', """Calltip""" """

Show calltips based on the characters immediately to the""" """ left of the cursor.

""" )) self.connect(self.calltipsAct, SIGNAL('triggered()'), self.__editShowCallTips) self.editActions.append(self.calltipsAct) self.editActGrp.setEnabled(False) self.copyActGrp.setEnabled(False) #################################################################### ## Below follow the actions for QScintilla standard commands. #################################################################### self.esm = QSignalMapper(self) self.connect(self.esm, SIGNAL('mapped(int)'), self.__editorCommand) self.editorActGrp = createActionGroup(self.editActGrp) act = E4Action(QApplication.translate('ViewManager', 'Move left one character'), QApplication.translate('ViewManager', 'Move left one character'), QKeySequence(QApplication.translate('ViewManager', 'Left')), 0, self.editorActGrp, 'vm_edit_move_left_char') if isMacPlatform(): act.setAlternateShortcut(QKeySequence( QApplication.translate('ViewManager', 'Meta+B'))) self.esm.setMapping(act, QsciScintilla.SCI_CHARLEFT) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Move right one character'), QApplication.translate('ViewManager', 'Move right one character'), QKeySequence(QApplication.translate('ViewManager', 'Right')), 0, self.editorActGrp, 'vm_edit_move_right_char') if isMacPlatform(): act.setAlternateShortcut(QKeySequence( QApplication.translate('ViewManager', 'Meta+F'))) self.esm.setMapping(act, QsciScintilla.SCI_CHARRIGHT) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Move up one line'), QApplication.translate('ViewManager', 'Move up one line'), QKeySequence(QApplication.translate('ViewManager', 'Up')), 0, self.editorActGrp, 'vm_edit_move_up_line') if isMacPlatform(): act.setAlternateShortcut(QKeySequence( QApplication.translate('ViewManager', 'Meta+P'))) self.esm.setMapping(act, QsciScintilla.SCI_LINEUP) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Move down one line'), QApplication.translate('ViewManager', 'Move down one line'), QKeySequence(QApplication.translate('ViewManager', 'Down')), 0, self.editorActGrp, 'vm_edit_move_down_line') if isMacPlatform(): act.setAlternateShortcut(QKeySequence( QApplication.translate('ViewManager', 'Meta+N'))) self.esm.setMapping(act, QsciScintilla.SCI_LINEDOWN) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Move left one word part'), QApplication.translate('ViewManager', 'Move left one word part'), 0, 0, self.editorActGrp, 'vm_edit_move_left_word_part') if not isMacPlatform(): act.setShortcut(QKeySequence( QApplication.translate('ViewManager', 'Alt+Left'))) self.esm.setMapping(act, QsciScintilla.SCI_WORDPARTLEFT) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Move right one word part'), QApplication.translate('ViewManager', 'Move right one word part'), 0, 0, self.editorActGrp, 'vm_edit_move_right_word_part') if not isMacPlatform(): act.setShortcut(QKeySequence( QApplication.translate('ViewManager', 'Alt+Right'))) self.esm.setMapping(act, QsciScintilla.SCI_WORDPARTRIGHT) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Move left one word'), QApplication.translate('ViewManager', 'Move left one word'), 0, 0, self.editorActGrp, 'vm_edit_move_left_word') if isMacPlatform(): act.setShortcut(QKeySequence( QApplication.translate('ViewManager', 'Alt+Left'))) else: act.setShortcut(QKeySequence( QApplication.translate('ViewManager', 'Ctrl+Left'))) self.esm.setMapping(act, QsciScintilla.SCI_WORDLEFT) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Move right one word'), QApplication.translate('ViewManager', 'Move right one word'), 0, 0, self.editorActGrp, 'vm_edit_move_right_word') if not isMacPlatform(): act.setShortcut(QKeySequence( QApplication.translate('ViewManager', 'Ctrl+Right'))) self.esm.setMapping(act, QsciScintilla.SCI_WORDRIGHT) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Move to first visible character in document line'), QApplication.translate('ViewManager', 'Move to first visible character in document line'), 0, 0, self.editorActGrp, 'vm_edit_move_first_visible_char') if not isMacPlatform(): act.setShortcut(QKeySequence( QApplication.translate('ViewManager', 'Home'))) self.esm.setMapping(act, QsciScintilla.SCI_VCHOME) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Move to start of display line'), QApplication.translate('ViewManager', 'Move to start of display line'), 0, 0, self.editorActGrp, 'vm_edit_move_start_line') if isMacPlatform(): act.setShortcut(QKeySequence( QApplication.translate('ViewManager', 'Ctrl+Left'))) else: act.setShortcut(QKeySequence( QApplication.translate('ViewManager', 'Alt+Home'))) self.esm.setMapping(act, QsciScintilla.SCI_HOMEDISPLAY) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Move to end of document line'), QApplication.translate('ViewManager', 'Move to end of document line'), 0, 0, self.editorActGrp, 'vm_edit_move_end_line') if isMacPlatform(): act.setShortcut(QKeySequence( QApplication.translate('ViewManager', 'Meta+E'))) else: act.setShortcut(QKeySequence( QApplication.translate('ViewManager', 'End'))) self.esm.setMapping(act, QsciScintilla.SCI_LINEEND) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Scroll view down one line'), QApplication.translate('ViewManager', 'Scroll view down one line'), QKeySequence(QApplication.translate('ViewManager', 'Ctrl+Down')), 0, self.editorActGrp, 'vm_edit_scroll_down_line') self.esm.setMapping(act, QsciScintilla.SCI_LINESCROLLDOWN) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Scroll view up one line'), QApplication.translate('ViewManager', 'Scroll view up one line'), QKeySequence(QApplication.translate('ViewManager', 'Ctrl+Up')), 0, self.editorActGrp, 'vm_edit_scroll_up_line') self.esm.setMapping(act, QsciScintilla.SCI_LINESCROLLUP) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Move up one paragraph'), QApplication.translate('ViewManager', 'Move up one paragraph'), QKeySequence(QApplication.translate('ViewManager', 'Alt+Up')), 0, self.editorActGrp, 'vm_edit_move_up_para') self.esm.setMapping(act, QsciScintilla.SCI_PARAUP) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Move down one paragraph'), QApplication.translate('ViewManager', 'Move down one paragraph'), QKeySequence(QApplication.translate('ViewManager', 'Alt+Down')), 0, self.editorActGrp, 'vm_edit_move_down_para') self.esm.setMapping(act, QsciScintilla.SCI_PARADOWN) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Move up one page'), QApplication.translate('ViewManager', 'Move up one page'), QKeySequence(QApplication.translate('ViewManager', 'PgUp')), 0, self.editorActGrp, 'vm_edit_move_up_page') self.esm.setMapping(act, QsciScintilla.SCI_PAGEUP) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Move down one page'), QApplication.translate('ViewManager', 'Move down one page'), QKeySequence(QApplication.translate('ViewManager', 'PgDown')), 0, self.editorActGrp, 'vm_edit_move_down_page') if isMacPlatform(): act.setAlternateShortcut(QKeySequence( QApplication.translate('ViewManager', 'Meta+V'))) self.esm.setMapping(act, QsciScintilla.SCI_PAGEDOWN) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Move to start of document'), QApplication.translate('ViewManager', 'Move to start of document'), 0, 0, self.editorActGrp, 'vm_edit_move_start_text') if isMacPlatform(): act.setShortcut(QKeySequence( QApplication.translate('ViewManager', 'Ctrl+Up'))) else: act.setShortcut(QKeySequence( QApplication.translate('ViewManager', 'Ctrl+Home'))) self.esm.setMapping(act, QsciScintilla.SCI_DOCUMENTSTART) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Move to end of document'), QApplication.translate('ViewManager', 'Move to end of document'), 0, 0, self.editorActGrp, 'vm_edit_move_end_text') if isMacPlatform(): act.setShortcut(QKeySequence( QApplication.translate('ViewManager', 'Ctrl+Down'))) else: act.setShortcut(QKeySequence( QApplication.translate('ViewManager', 'Ctrl+End'))) self.esm.setMapping(act, QsciScintilla.SCI_DOCUMENTEND) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Indent one level'), QApplication.translate('ViewManager', 'Indent one level'), QKeySequence(QApplication.translate('ViewManager', 'Tab')), 0, self.editorActGrp, 'vm_edit_indent_one_level') self.esm.setMapping(act, QsciScintilla.SCI_TAB) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Unindent one level'), QApplication.translate('ViewManager', 'Unindent one level'), QKeySequence(QApplication.translate('ViewManager', 'Shift+Tab')), 0, self.editorActGrp, 'vm_edit_unindent_one_level') self.esm.setMapping(act, QsciScintilla.SCI_BACKTAB) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Extend selection left one character'), QApplication.translate('ViewManager', 'Extend selection left one character'), QKeySequence(QApplication.translate('ViewManager', 'Shift+Left')), 0, self.editorActGrp, 'vm_edit_extend_selection_left_char') if isMacPlatform(): act.setAlternateShortcut(QKeySequence( QApplication.translate('ViewManager', 'Meta+Shift+B'))) self.esm.setMapping(act, QsciScintilla.SCI_CHARLEFTEXTEND) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Extend selection right one character'), QApplication.translate('ViewManager', 'Extend selection right one character'), QKeySequence(QApplication.translate('ViewManager', 'Shift+Right')), 0, self.editorActGrp, 'vm_edit_extend_selection_right_char') if isMacPlatform(): act.setAlternateShortcut(QKeySequence( QApplication.translate('ViewManager', 'Meta+Shift+F'))) self.esm.setMapping(act, QsciScintilla.SCI_CHARRIGHTEXTEND) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Extend selection up one line'), QApplication.translate('ViewManager', 'Extend selection up one line'), QKeySequence(QApplication.translate('ViewManager', 'Shift+Up')), 0, self.editorActGrp, 'vm_edit_extend_selection_up_line') if isMacPlatform(): act.setAlternateShortcut(QKeySequence( QApplication.translate('ViewManager', 'Meta+Shift+P'))) self.esm.setMapping(act, QsciScintilla.SCI_LINEUPEXTEND) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Extend selection down one line'), QApplication.translate('ViewManager', 'Extend selection down one line'), QKeySequence(QApplication.translate('ViewManager', 'Shift+Down')), 0, self.editorActGrp, 'vm_edit_extend_selection_down_line') if isMacPlatform(): act.setAlternateShortcut(QKeySequence( QApplication.translate('ViewManager', 'Meta+Shift+N'))) self.esm.setMapping(act, QsciScintilla.SCI_LINEDOWNEXTEND) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Extend selection left one word part'), QApplication.translate('ViewManager', 'Extend selection left one word part'), 0, 0, self.editorActGrp, 'vm_edit_extend_selection_left_word_part') if not isMacPlatform(): act.setShortcut(QKeySequence( QApplication.translate('ViewManager', 'Alt+Shift+Left'))) self.esm.setMapping(act, QsciScintilla.SCI_WORDPARTLEFTEXTEND) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Extend selection right one word part'), QApplication.translate('ViewManager', 'Extend selection right one word part'), 0, 0, self.editorActGrp, 'vm_edit_extend_selection_right_word_part') if not isMacPlatform(): act.setShortcut(QKeySequence( QApplication.translate('ViewManager', 'Alt+Shift+Right'))) self.esm.setMapping(act, QsciScintilla.SCI_WORDPARTRIGHTEXTEND) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Extend selection left one word'), QApplication.translate('ViewManager', 'Extend selection left one word'), 0, 0, self.editorActGrp, 'vm_edit_extend_selection_left_word') if isMacPlatform(): act.setShortcut(QKeySequence( QApplication.translate('ViewManager', 'Alt+Shift+Left'))) else: act.setShortcut(QKeySequence( QApplication.translate('ViewManager', 'Ctrl+Shift+Left'))) self.esm.setMapping(act, QsciScintilla.SCI_WORDLEFTEXTEND) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Extend selection right one word'), QApplication.translate('ViewManager', 'Extend selection right one word'), 0, 0, self.editorActGrp, 'vm_edit_extend_selection_right_word') if isMacPlatform(): act.setShortcut(QKeySequence( QApplication.translate('ViewManager', 'Alt+Shift+Right'))) else: act.setShortcut(QKeySequence( QApplication.translate('ViewManager', 'Ctrl+Shift+Right'))) self.esm.setMapping(act, QsciScintilla.SCI_WORDRIGHTEXTEND) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Extend selection to first visible character in document line'), QApplication.translate('ViewManager', 'Extend selection to first visible character in document line'), 0, 0, self.editorActGrp, 'vm_edit_extend_selection_first_visible_char') if not isMacPlatform(): act.setShortcut(QKeySequence( QApplication.translate('ViewManager', 'Shift+Home'))) self.esm.setMapping(act, QsciScintilla.SCI_VCHOMEEXTEND) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Extend selection to end of document line'), QApplication.translate('ViewManager', 'Extend selection to end of document line'), 0, 0, self.editorActGrp, 'vm_edit_extend_selection_end_line') if isMacPlatform(): act.setShortcut(QKeySequence( QApplication.translate('ViewManager', 'Meta+Shift+E'))) else: act.setShortcut(QKeySequence( QApplication.translate('ViewManager', 'Shift+End'))) self.esm.setMapping(act, QsciScintilla.SCI_LINEENDEXTEND) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Extend selection up one paragraph'), QApplication.translate('ViewManager', 'Extend selection up one paragraph'), QKeySequence(QApplication.translate('ViewManager', 'Alt+Shift+Up')), 0, self.editorActGrp, 'vm_edit_extend_selection_up_para') self.esm.setMapping(act, QsciScintilla.SCI_PARAUPEXTEND) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Extend selection down one paragraph'), QApplication.translate('ViewManager', 'Extend selection down one paragraph'), QKeySequence(QApplication.translate('ViewManager', 'Alt+Shift+Down')), 0, self.editorActGrp, 'vm_edit_extend_selection_down_para') self.esm.setMapping(act, QsciScintilla.SCI_PARADOWNEXTEND) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Extend selection up one page'), QApplication.translate('ViewManager', 'Extend selection up one page'), QKeySequence(QApplication.translate('ViewManager', 'Shift+PgUp')), 0, self.editorActGrp, 'vm_edit_extend_selection_up_page') self.esm.setMapping(act, QsciScintilla.SCI_PAGEUPEXTEND) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Extend selection down one page'), QApplication.translate('ViewManager', 'Extend selection down one page'), QKeySequence(QApplication.translate('ViewManager', 'Shift+PgDown')), 0, self.editorActGrp, 'vm_edit_extend_selection_down_page') if isMacPlatform(): act.setAlternateShortcut(QKeySequence( QApplication.translate('ViewManager', 'Meta+Shift+V'))) self.esm.setMapping(act, QsciScintilla.SCI_PAGEDOWNEXTEND) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Extend selection to start of document'), QApplication.translate('ViewManager', 'Extend selection to start of document'), 0, 0, self.editorActGrp, 'vm_edit_extend_selection_start_text') if isMacPlatform(): act.setShortcut(QKeySequence( QApplication.translate('ViewManager', 'Ctrl+Shift+Up'))) else: act.setShortcut(QKeySequence( QApplication.translate('ViewManager', 'Ctrl+Shift+Home'))) self.esm.setMapping(act, QsciScintilla.SCI_DOCUMENTSTARTEXTEND) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Extend selection to end of document'), QApplication.translate('ViewManager', 'Extend selection to end of document'), 0, 0, self.editorActGrp, 'vm_edit_extend_selection_end_text') if isMacPlatform(): act.setShortcut(QKeySequence( QApplication.translate('ViewManager', 'Ctrl+Shift+Down'))) else: act.setShortcut(QKeySequence( QApplication.translate('ViewManager', 'Ctrl+Shift+End'))) self.esm.setMapping(act, QsciScintilla.SCI_DOCUMENTENDEXTEND) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Delete previous character'), QApplication.translate('ViewManager', 'Delete previous character'), QKeySequence(QApplication.translate('ViewManager', 'Backspace')), 0, self.editorActGrp, 'vm_edit_delete_previous_char') if isMacPlatform(): act.setAlternateShortcut(QKeySequence( QApplication.translate('ViewManager', 'Meta+H'))) else: act.setAlternateShortcut(QKeySequence( QApplication.translate('ViewManager', 'Shift+Backspace'))) self.esm.setMapping(act, QsciScintilla.SCI_DELETEBACK) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Delete previous character if not at start of line'), QApplication.translate('ViewManager', 'Delete previous character if not at start of line'), 0, 0, self.editorActGrp, 'vm_edit_delet_previous_char_not_line_start') self.esm.setMapping(act, QsciScintilla.SCI_DELETEBACKNOTLINE) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Delete current character'), QApplication.translate('ViewManager', 'Delete current character'), QKeySequence(QApplication.translate('ViewManager', 'Del')), 0, self.editorActGrp, 'vm_edit_delete_current_char') if isMacPlatform(): act.setAlternateShortcut(QKeySequence( QApplication.translate('ViewManager', 'Meta+D'))) self.esm.setMapping(act, QsciScintilla.SCI_CLEAR) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Delete word to left'), QApplication.translate('ViewManager', 'Delete word to left'), QKeySequence(QApplication.translate('ViewManager', 'Ctrl+Backspace')), 0, self.editorActGrp, 'vm_edit_delete_word_left') self.esm.setMapping(act, QsciScintilla.SCI_DELWORDLEFT) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Delete word to right'), QApplication.translate('ViewManager', 'Delete word to right'), QKeySequence(QApplication.translate('ViewManager', 'Ctrl+Del')), 0, self.editorActGrp, 'vm_edit_delete_word_right') self.esm.setMapping(act, QsciScintilla.SCI_DELWORDRIGHT) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Delete line to left'), QApplication.translate('ViewManager', 'Delete line to left'), QKeySequence(QApplication.translate('ViewManager', 'Ctrl+Shift+Backspace')), 0, self.editorActGrp, 'vm_edit_delete_line_left') self.esm.setMapping(act, QsciScintilla.SCI_DELLINELEFT) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Delete line to right'), QApplication.translate('ViewManager', 'Delete line to right'), 0, 0, self.editorActGrp, 'vm_edit_delete_line_right') if isMacPlatform(): act.setShortcut(QKeySequence( QApplication.translate('ViewManager', 'Meta+K'))) else: act.setShortcut(QKeySequence( QApplication.translate('ViewManager', 'Ctrl+Shift+Del'))) self.esm.setMapping(act, QsciScintilla.SCI_DELLINERIGHT) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Insert new line'), QApplication.translate('ViewManager', 'Insert new line'), QKeySequence(QApplication.translate('ViewManager', 'Return')), QKeySequence(QApplication.translate('ViewManager', 'Enter')), self.editorActGrp, 'vm_edit_insert_line') self.esm.setMapping(act, QsciScintilla.SCI_NEWLINE) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Insert new line below current line'), QApplication.translate('ViewManager', 'Insert new line below current line'), QKeySequence(QApplication.translate('ViewManager', 'Shift+Return')), QKeySequence(QApplication.translate('ViewManager', 'Shift+Enter')), self.editorActGrp, 'vm_edit_insert_line_below') self.connect(act, SIGNAL('triggered()'), self.__newLineBelow) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Delete current line'), QApplication.translate('ViewManager', 'Delete current line'), QKeySequence(QApplication.translate('ViewManager', 'Ctrl+Shift+L')), 0, self.editorActGrp, 'vm_edit_delete_current_line') self.esm.setMapping(act, QsciScintilla.SCI_LINEDELETE) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Duplicate current line'), QApplication.translate('ViewManager', 'Duplicate current line'), QKeySequence(QApplication.translate('ViewManager', 'Ctrl+D')), 0, self.editorActGrp, 'vm_edit_duplicate_current_line') self.esm.setMapping(act, QsciScintilla.SCI_LINEDUPLICATE) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Swap current and previous lines'), QApplication.translate('ViewManager', 'Swap current and previous lines'), QKeySequence(QApplication.translate('ViewManager', 'Ctrl+T')), 0, self.editorActGrp, 'vm_edit_swap_current_previous_line') self.esm.setMapping(act, QsciScintilla.SCI_LINETRANSPOSE) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Cut current line'), QApplication.translate('ViewManager', 'Cut current line'), QKeySequence(QApplication.translate('ViewManager', 'Alt+Shift+L')), 0, self.editorActGrp, 'vm_edit_cut_current_line') self.esm.setMapping(act, QsciScintilla.SCI_LINECUT) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Copy current line'), QApplication.translate('ViewManager', 'Copy current line'), QKeySequence(QApplication.translate('ViewManager', 'Ctrl+Shift+T')), 0, self.editorActGrp, 'vm_edit_copy_current_line') self.esm.setMapping(act, QsciScintilla.SCI_LINECOPY) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Toggle insert/overtype'), QApplication.translate('ViewManager', 'Toggle insert/overtype'), QKeySequence(QApplication.translate('ViewManager', 'Ins')), 0, self.editorActGrp, 'vm_edit_toggle_insert_overtype') self.esm.setMapping(act, QsciScintilla.SCI_EDITTOGGLEOVERTYPE) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Convert selection to lower case'), QApplication.translate('ViewManager', 'Convert selection to lower case'), QKeySequence(QApplication.translate('ViewManager', 'Alt+Shift+U')), 0, self.editorActGrp, 'vm_edit_convert_selection_lower') self.esm.setMapping(act, QsciScintilla.SCI_LOWERCASE) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Convert selection to upper case'), QApplication.translate('ViewManager', 'Convert selection to upper case'), QKeySequence(QApplication.translate('ViewManager', 'Ctrl+Shift+U')), 0, self.editorActGrp, 'vm_edit_convert_selection_upper') self.esm.setMapping(act, QsciScintilla.SCI_UPPERCASE) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Move to end of display line'), QApplication.translate('ViewManager', 'Move to end of display line'), 0, 0, self.editorActGrp, 'vm_edit_move_end_displayed_line') if isMacPlatform(): act.setShortcut(QKeySequence( QApplication.translate('ViewManager', 'Ctrl+Right'))) else: act.setShortcut(QKeySequence( QApplication.translate('ViewManager', 'Alt+End'))) self.esm.setMapping(act, QsciScintilla.SCI_LINEENDDISPLAY) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Extend selection to end of display line'), QApplication.translate('ViewManager', 'Extend selection to end of display line'), 0, 0, self.editorActGrp, 'vm_edit_extend_selection_end_displayed_line') if isMacPlatform(): act.setShortcut(QKeySequence( QApplication.translate('ViewManager', 'Ctrl+Shift+Right'))) self.esm.setMapping(act, QsciScintilla.SCI_LINEENDDISPLAYEXTEND) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Formfeed'), QApplication.translate('ViewManager', 'Formfeed'), 0, 0, self.editorActGrp, 'vm_edit_formfeed') self.esm.setMapping(act, QsciScintilla.SCI_FORMFEED) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Escape'), QApplication.translate('ViewManager', 'Escape'), QKeySequence(QApplication.translate('ViewManager', 'Esc')), 0, self.editorActGrp, 'vm_edit_escape') self.esm.setMapping(act, QsciScintilla.SCI_CANCEL) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Extend rectangular selection down one line'), QApplication.translate('ViewManager', 'Extend rectangular selection down one line'), QKeySequence(QApplication.translate('ViewManager', 'Alt+Ctrl+Down')), 0, self.editorActGrp, 'vm_edit_extend_rect_selection_down_line') if isMacPlatform(): act.setAlternateShortcut(QKeySequence( QApplication.translate('ViewManager', 'Meta+Alt+Shift+N'))) self.esm.setMapping(act, QsciScintilla.SCI_LINEDOWNRECTEXTEND) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Extend rectangular selection up one line'), QApplication.translate('ViewManager', 'Extend rectangular selection up one line'), QKeySequence(QApplication.translate('ViewManager', 'Alt+Ctrl+Up')), 0, self.editorActGrp, 'vm_edit_extend_rect_selection_up_line') if isMacPlatform(): act.setAlternateShortcut(QKeySequence( QApplication.translate('ViewManager', 'Meta+Alt+Shift+P'))) self.esm.setMapping(act, QsciScintilla.SCI_LINEUPRECTEXTEND) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Extend rectangular selection left one character'), QApplication.translate('ViewManager', 'Extend rectangular selection left one character'), QKeySequence(QApplication.translate('ViewManager', 'Alt+Ctrl+Left')), 0, self.editorActGrp, 'vm_edit_extend_rect_selection_left_char') if isMacPlatform(): act.setAlternateShortcut(QKeySequence( QApplication.translate('ViewManager', 'Meta+Alt+Shift+B'))) self.esm.setMapping(act, QsciScintilla.SCI_CHARLEFTRECTEXTEND) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Extend rectangular selection right one character'), QApplication.translate('ViewManager', 'Extend rectangular selection right one character'), QKeySequence(QApplication.translate('ViewManager', 'Alt+Ctrl+Right')), 0, self.editorActGrp, 'vm_edit_extend_rect_selection_right_char') if isMacPlatform(): act.setAlternateShortcut(QKeySequence( QApplication.translate('ViewManager', 'Meta+Alt+Shift+F'))) self.esm.setMapping(act, QsciScintilla.SCI_CHARRIGHTRECTEXTEND) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Extend rectangular selection to first' ' visible character in document line'), QApplication.translate('ViewManager', 'Extend rectangular selection to first' ' visible character in document line'), 0, 0, self.editorActGrp, 'vm_edit_extend_rect_selection_first_visible_char') if not isMacPlatform(): act.setShortcut(QKeySequence( QApplication.translate('ViewManager', 'Alt+Shift+Home'))) self.esm.setMapping(act, QsciScintilla.SCI_VCHOMERECTEXTEND) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Extend rectangular selection to end of document line'), QApplication.translate('ViewManager', 'Extend rectangular selection to end of document line'), 0, 0, self.editorActGrp, 'vm_edit_extend_rect_selection_end_line') if isMacPlatform(): act.setShortcut(QKeySequence( QApplication.translate('ViewManager', 'Meta+Alt+Shift+E'))) else: act.setShortcut(QKeySequence( QApplication.translate('ViewManager', 'Alt+Shift+End'))) self.esm.setMapping(act, QsciScintilla.SCI_LINEENDRECTEXTEND) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Extend rectangular selection up one page'), QApplication.translate('ViewManager', 'Extend rectangular selection up one page'), QKeySequence(QApplication.translate('ViewManager', 'Alt+Shift+PgUp')), 0, self.editorActGrp, 'vm_edit_extend_rect_selection_up_page') self.esm.setMapping(act, QsciScintilla.SCI_PAGEUPRECTEXTEND) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Extend rectangular selection down one page'), QApplication.translate('ViewManager', 'Extend rectangular selection down one page'), QKeySequence(QApplication.translate('ViewManager', 'Alt+Shift+PgDown')), 0, self.editorActGrp, 'vm_edit_extend_rect_selection_down_page') if isMacPlatform(): act.setAlternateShortcut(QKeySequence( QApplication.translate('ViewManager', 'Meta+Alt+Shift+V'))) self.esm.setMapping(act, QsciScintilla.SCI_PAGEDOWNRECTEXTEND) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) act = E4Action(QApplication.translate('ViewManager', 'Duplicate current selection'), QApplication.translate('ViewManager', 'Duplicate current selection'), QKeySequence(QApplication.translate('ViewManager', 'Ctrl+Shift+D')), 0, self.editorActGrp, 'vm_edit_duplicate_current_selection') self.esm.setMapping(act, QsciScintilla.SCI_SELECTIONDUPLICATE) self.connect(act, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.editActions.append(act) if hasattr(QsciScintilla, "SCI_SCROLLTOSTART"): act = E4Action(QApplication.translate('ViewManager', 'Scroll to start of document'), QApplication.translate('ViewManager', 'Scroll to start of document'), 0, 0, self.editorActGrp, 'vm_edit_scroll_start_text') if isMacPlatform(): act.setShortcut(QKeySequence( QApplication.translate('ViewManager', 'Home'))) self.esm.setMapping(act, QsciScintilla.SCI_SCROLLTOSTART) act.triggered[()].connect(self.esm.map) self.editActions.append(act) if hasattr(QsciScintilla, "SCI_SCROLLTOEND"): act = E4Action(QApplication.translate('ViewManager', 'Scroll to end of document'), QApplication.translate('ViewManager', 'Scroll to end of document'), 0, 0, self.editorActGrp, 'vm_edit_scroll_end_text') if isMacPlatform(): act.setShortcut(QKeySequence( QApplication.translate('ViewManager', 'End'))) self.esm.setMapping(act, QsciScintilla.SCI_SCROLLTOEND) act.triggered[()].connect(self.esm.map) self.editActions.append(act) if hasattr(QsciScintilla, "SCI_VERTICALCENTRECARET"): act = E4Action(QApplication.translate('ViewManager', 'Scroll vertically to center current line'), QApplication.translate('ViewManager', 'Scroll vertically to center current line'), 0, 0, self.editorActGrp, 'vm_edit_scroll_vertically_center') if isMacPlatform(): act.setShortcut(QKeySequence( QApplication.translate('ViewManager', 'Meta+L'))) self.esm.setMapping(act, QsciScintilla.SCI_VERTICALCENTRECARET) act.triggered[()].connect(self.esm.map) self.editActions.append(act) if hasattr(QsciScintilla, "SCI_WORDRIGHTEND"): act = E4Action(QApplication.translate('ViewManager', 'Move to end of next word'), QApplication.translate('ViewManager', 'Move to end of next word'), 0, 0, self.editorActGrp, 'vm_edit_move_end_next_word') if isMacPlatform(): act.setShortcut(QKeySequence( QApplication.translate('ViewManager', 'Alt+Right'))) self.esm.setMapping(act, QsciScintilla.SCI_WORDRIGHTEND) act.triggered[()].connect(self.esm.map) self.editActions.append(act) if hasattr(QsciScintilla, "SCI_WORDRIGHTENDEXTEND"): act = E4Action(QApplication.translate('ViewManager', 'Extend selection to end of next word'), QApplication.translate('ViewManager', 'Extend selection to end of next word'), 0, 0, self.editorActGrp, 'vm_edit_select_end_next_word') if isMacPlatform(): act.setShortcut(QKeySequence( QApplication.translate('ViewManager', 'Alt+Shift+Right'))) self.esm.setMapping(act, QsciScintilla.SCI_WORDRIGHTENDEXTEND) act.triggered[()].connect(self.esm.map) self.editActions.append(act) if hasattr(QsciScintilla, "SCI_WORDLEFTEND"): act = E4Action(QApplication.translate('ViewManager', 'Move to end of previous word'), QApplication.translate('ViewManager', 'Move to end of previous word'), 0, 0, self.editorActGrp, 'vm_edit_move_end_previous_word') self.esm.setMapping(act, QsciScintilla.SCI_WORDLEFTEND) act.triggered[()].connect(self.esm.map) self.editActions.append(act) if hasattr(QsciScintilla, "SCI_WORDLEFTENDEXTEND"): act = E4Action(QApplication.translate('ViewManager', 'Extend selection to end of previous word'), QApplication.translate('ViewManager', 'Extend selection to end of previous word'), 0, 0, self.editorActGrp, 'vm_edit_select_end_previous_word') self.esm.setMapping(act, QsciScintilla.SCI_WORDLEFTENDEXTEND) act.triggered[()].connect(self.esm.map) self.editActions.append(act) if hasattr(QsciScintilla, "SCI_HOME"): act = E4Action(QApplication.translate('ViewManager', 'Move to start of document line'), QApplication.translate('ViewManager', 'Move to start of document line'), 0, 0, self.editorActGrp, 'vm_edit_move_start_document_line') if isMacPlatform(): act.setShortcut(QKeySequence( QApplication.translate('ViewManager', 'Meta+A'))) self.esm.setMapping(act, QsciScintilla.SCI_HOME) act.triggered[()].connect(self.esm.map) self.editActions.append(act) if hasattr(QsciScintilla, "SCI_HOMEEXTEND"): act = E4Action(QApplication.translate('ViewManager', 'Extend selection to start of document line'), QApplication.translate('ViewManager', 'Extend selection to start of document line'), 0, 0, self.editorActGrp, 'vm_edit_extend_selection_start_document_line') if isMacPlatform(): act.setShortcut(QKeySequence( QApplication.translate('ViewManager', 'Meta+Shift+A'))) self.esm.setMapping(act, QsciScintilla.SCI_HOME) act.triggered[()].connect(self.esm.map) self.editActions.append(act) if hasattr(QsciScintilla, "SCI_HOMERECTEXTEND"): act = E4Action(QApplication.translate('ViewManager', 'Extend rectangular selection to start of document line'), QApplication.translate('ViewManager', 'Extend rectangular selection to start of document line'), 0, 0, self.editorActGrp, 'vm_edit_select_rect_start_line') if isMacPlatform(): act.setShortcut(QKeySequence( QApplication.translate('ViewManager', 'Meta+Alt+Shift+A'))) self.esm.setMapping(act, QsciScintilla.SCI_HOMERECTEXTEND) act.triggered[()].connect(self.esm.map) self.editActions.append(act) if hasattr(QsciScintilla, "SCI_HOMEDISPLAYEXTEND"): act = E4Action(QApplication.translate('ViewManager', 'Extend selection to start of display line'), QApplication.translate('ViewManager', 'Extend selection to start of display line'), 0, 0, self.editorActGrp, 'vm_edit_extend_selection_start_display_line') if isMacPlatform(): act.setShortcut(QKeySequence( QApplication.translate('ViewManager', 'Ctrl+Shift+Left'))) self.esm.setMapping(act, QsciScintilla.SCI_HOMEDISPLAYEXTEND) act.triggered[()].connect(self.esm.map) self.editActions.append(act) if hasattr(QsciScintilla, "SCI_HOMEWRAP"): act = E4Action(QApplication.translate('ViewManager', 'Move to start of display or document line'), QApplication.translate('ViewManager', 'Move to start of display or document line'), 0, 0, self.editorActGrp, 'vm_edit_move_start_display_document_line') self.esm.setMapping(act, QsciScintilla.SCI_HOMEWRAP) act.triggered[()].connect(self.esm.map) self.editActions.append(act) if hasattr(QsciScintilla, "SCI_HOMEWRAPEXTEND"): act = E4Action(QApplication.translate('ViewManager', 'Extend selection to start of display or document line'), QApplication.translate('ViewManager', 'Extend selection to start of display or document line'), 0, 0, self.editorActGrp, 'vm_edit_extend_selection_start_display_document_line') self.esm.setMapping(act, QsciScintilla.SCI_HOMEWRAPEXTEND) act.triggered[()].connect(self.esm.map) self.editActions.append(act) if hasattr(QsciScintilla, "SCI_VCHOMEWRAP"): act = E4Action(QApplication.translate('ViewManager', 'Move to first visible character in display' ' or document line'), QApplication.translate('ViewManager', 'Move to first visible character in display' ' or document line'), 0, 0, self.editorActGrp, 'vm_edit_move_first_visible_char_document_line') self.esm.setMapping(act, QsciScintilla.SCI_VCHOMEWRAP) act.triggered[()].connect(self.esm.map) self.editActions.append(act) if hasattr(QsciScintilla, "SCI_VCHOMEWRAPEXTEND"): act = E4Action(QApplication.translate('ViewManager', 'Extend selection to first visible character in' ' display or document line'), QApplication.translate('ViewManager', 'Extend selection to first visible character in' ' display or document line'), 0, 0, self.editorActGrp, 'vm_edit_extend_selection_first_visible_char_document_line') self.esm.setMapping(act, QsciScintilla.SCI_VCHOMEWRAPEXTEND) act.triggered[()].connect(self.esm.map) self.editActions.append(act) if hasattr(QsciScintilla, "SCI_LINEENDWRAP"): act = E4Action(QApplication.translate('ViewManager', 'Move to end of display or document line'), QApplication.translate('ViewManager', 'Move to end of display or document line'), 0, 0, self.editorActGrp, 'vm_edit_end_start_display_document_line') self.esm.setMapping(act, QsciScintilla.SCI_LINEENDWRAP) act.triggered[()].connect(self.esm.map) self.editActions.append(act) if hasattr(QsciScintilla, "SCI_LINEENDWRAPEXTEND"): act = E4Action(QApplication.translate('ViewManager', 'Extend selection to end of display or document line'), QApplication.translate('ViewManager', 'Extend selection to end of display or document line'), 0, 0, self.editorActGrp, 'vm_edit_extend_selection_end_display_document_line') self.esm.setMapping(act, QsciScintilla.SCI_LINEENDWRAPEXTEND) act.triggered[()].connect(self.esm.map) self.editActions.append(act) if hasattr(QsciScintilla, "SCI_STUTTEREDPAGEUP"): act = E4Action(QApplication.translate('ViewManager', 'Stuttered move up one page'), QApplication.translate('ViewManager', 'Stuttered move up one page'), 0, 0, self.editorActGrp, 'vm_edit_stuttered_move_up_page') self.esm.setMapping(act, QsciScintilla.SCI_STUTTEREDPAGEUP) act.triggered[()].connect(self.esm.map) self.editActions.append(act) if hasattr(QsciScintilla, "SCI_STUTTEREDPAGEUPEXTEND"): act = E4Action(QApplication.translate('ViewManager', 'Stuttered extend selection up one page'), QApplication.translate('ViewManager', 'Stuttered extend selection up one page'), 0, 0, self.editorActGrp, 'vm_edit_stuttered_extend_selection_up_page') self.esm.setMapping(act, QsciScintilla.SCI_STUTTEREDPAGEUPEXTEND) act.triggered[()].connect(self.esm.map) self.editActions.append(act) if hasattr(QsciScintilla, "SCI_STUTTEREDPAGEDOWN"): act = E4Action(QApplication.translate('ViewManager', 'Stuttered move down one page'), QApplication.translate('ViewManager', 'Stuttered move down one page'), 0, 0, self.editorActGrp, 'vm_edit_stuttered_move_down_page') self.esm.setMapping(act, QsciScintilla.SCI_STUTTEREDPAGEDOWN) act.triggered[()].connect(self.esm.map) self.editActions.append(act) if hasattr(QsciScintilla, "SCI_STUTTEREDPAGEDOWNEXTEND"): act = E4Action(QApplication.translate('ViewManager', 'Stuttered extend selection down one page'), QApplication.translate('ViewManager', 'Stuttered extend selection down one page'), 0, 0, self.editorActGrp, 'vm_edit_stuttered_extend_selection_down_page') self.esm.setMapping(act, QsciScintilla.SCI_STUTTEREDPAGEDOWNEXTEND) act.triggered[()].connect(self.esm.map) self.editActions.append(act) if hasattr(QsciScintilla, "SCI_DELWORDRIGHTEND"): act = E4Action(QApplication.translate('ViewManager', 'Delete right to end of next word'), QApplication.translate('ViewManager', 'Delete right to end of next word'), 0, 0, self.editorActGrp, 'vm_edit_delete_right_end_next_word') if isMacPlatform(): act.setShortcut(QKeySequence( QApplication.translate('ViewManager', 'Alt+Del'))) self.esm.setMapping(act, QsciScintilla.SCI_DELWORDRIGHTEND) act.triggered[()].connect(self.esm.map) self.editActions.append(act) if hasattr(QsciScintilla, "SCI_MOVESELECTEDLINESUP"): act = E4Action(QApplication.translate('ViewManager', 'Move selected lines up one line'), QApplication.translate('ViewManager', 'Move selected lines up one line'), 0, 0, self.editorActGrp, 'vm_edit_move_selection_up_one_line') self.esm.setMapping(act, QsciScintilla.SCI_MOVESELECTEDLINESUP) act.triggered[()].connect(self.esm.map) self.editActions.append(act) if hasattr(QsciScintilla, "SCI_MOVESELECTEDLINESDOWN"): act = E4Action(QApplication.translate('ViewManager', 'Move selected lines down one line'), QApplication.translate('ViewManager', 'Move selected lines down one line'), 0, 0, self.editorActGrp, 'vm_edit_move_selection_down_one_line') self.esm.setMapping(act, QsciScintilla.SCI_MOVESELECTEDLINESDOWN) act.triggered[()].connect(self.esm.map) self.editActions.append(act) self.editorActGrp.setEnabled(False) def initEditMenu(self): """ Public method to create the Edit menu @return the generated menu """ autocompletionMenu = \ QMenu(QApplication.translate('ViewManager', '&Autocomplete'), self.ui) autocompletionMenu.setTearOffEnabled(True) autocompletionMenu.addAction(self.autoCompleteAct) autocompletionMenu.addAction(self.autoCompleteFromDocAct) autocompletionMenu.addAction(self.autoCompleteFromAPIsAct) autocompletionMenu.addAction(self.autoCompleteFromAllAct) autocompletionMenu.addSeparator() autocompletionMenu.addAction(self.calltipsAct) searchMenu = \ QMenu(QApplication.translate('ViewManager', '&Search'), self.ui) searchMenu.setTearOffEnabled(True) searchMenu.addAction(self.quickSearchAct) searchMenu.addAction(self.quickSearchBackAct) searchMenu.addAction(self.searchAct) searchMenu.addAction(self.searchNextAct) searchMenu.addAction(self.searchPrevAct) searchMenu.addAction(self.replaceAct) searchMenu.addSeparator() searchMenu.addAction(self.searchClearMarkersAct) searchMenu.addSeparator() searchMenu.addAction(self.searchFilesAct) searchMenu.addAction(self.replaceFilesAct) menu = QMenu(QApplication.translate('ViewManager', '&Edit'), self.ui) menu.setTearOffEnabled(True) menu.addAction(self.undoAct) menu.addAction(self.redoAct) menu.addAction(self.revertAct) menu.addSeparator() menu.addAction(self.cutAct) menu.addAction(self.copyAct) menu.addAction(self.pasteAct) menu.addAction(self.deleteAct) menu.addSeparator() menu.addAction(self.indentAct) menu.addAction(self.unindentAct) menu.addAction(self.smartIndentAct) menu.addSeparator() menu.addAction(self.commentAct) menu.addAction(self.uncommentAct) menu.addAction(self.streamCommentAct) menu.addAction(self.boxCommentAct) menu.addSeparator() menu.addMenu(autocompletionMenu) menu.addSeparator() menu.addMenu(searchMenu) menu.addSeparator() menu.addAction(self.gotoAct) menu.addAction(self.gotoBraceAct) menu.addSeparator() menu.addAction(self.selectBraceAct) menu.addAction(self.selectAllAct) menu.addAction(self.deselectAllAct) menu.addSeparator() menu.addAction(self.shortenEmptyAct) menu.addAction(self.convertEOLAct) return menu def initEditToolbar(self, toolbarManager): """ Public method to create the Edit toolbar @param toolbarManager reference to a toolbar manager object (E4ToolBarManager) @return the generated toolbar """ tb = QToolBar(QApplication.translate('ViewManager', 'Edit'), self.ui) tb.setIconSize(UI.Config.ToolBarIconSize) tb.setObjectName("EditToolbar") tb.setToolTip(QApplication.translate('ViewManager', 'Edit')) tb.addAction(self.undoAct) tb.addAction(self.redoAct) tb.addSeparator() tb.addAction(self.cutAct) tb.addAction(self.copyAct) tb.addAction(self.pasteAct) tb.addAction(self.deleteAct) tb.addSeparator() tb.addAction(self.indentAct) tb.addAction(self.unindentAct) tb.addSeparator() tb.addAction(self.commentAct) tb.addAction(self.uncommentAct) toolbarManager.addToolBar(tb, tb.windowTitle()) toolbarManager.addAction(self.smartIndentAct, tb.windowTitle()) return tb ################################################################## ## Initialize the search related actions and the search toolbar ################################################################## def __initSearchActions(self): """ Private method defining the user interface actions for the search commands. """ self.searchActGrp = createActionGroup(self) self.searchAct = E4Action(QApplication.translate('ViewManager', 'Search'), UI.PixmapCache.getIcon("find.png"), QApplication.translate('ViewManager', '&Search...'), QKeySequence(QApplication.translate('ViewManager', "Ctrl+F", "Search|Search")), 0, self.searchActGrp, 'vm_search') self.searchAct.setStatusTip(QApplication.translate('ViewManager', 'Search for a text')) self.searchAct.setWhatsThis(QApplication.translate('ViewManager', """Search""" """

Search for some text in the current editor. A""" """ dialog is shown to enter the searchtext and options""" """ for the search.

""" )) self.connect(self.searchAct, SIGNAL('triggered()'), self.__search) self.searchActions.append(self.searchAct) self.searchNextAct = E4Action(QApplication.translate('ViewManager', 'Search next'), UI.PixmapCache.getIcon("findNext.png"), QApplication.translate('ViewManager', 'Search &next'), QKeySequence(QApplication.translate('ViewManager', "F3", "Search|Search next")), 0, self.searchActGrp, 'vm_search_next') self.searchNextAct.setStatusTip(QApplication.translate('ViewManager', 'Search next occurrence of text')) self.searchNextAct.setWhatsThis(QApplication.translate('ViewManager', """Search next""" """

Search the next occurrence of some text in the current editor.""" """ The previously entered searchtext and options are reused.

""" )) self.connect(self.searchNextAct, SIGNAL('triggered()'), self.searchDlg.findNext) self.searchActions.append(self.searchNextAct) self.searchPrevAct = E4Action(QApplication.translate('ViewManager', 'Search previous'), UI.PixmapCache.getIcon("findPrev.png"), QApplication.translate('ViewManager', 'Search &previous'), QKeySequence(QApplication.translate('ViewManager', "Shift+F3", "Search|Search previous")), 0, self.searchActGrp, 'vm_search_previous') self.searchPrevAct.setStatusTip(QApplication.translate('ViewManager', 'Search previous occurrence of text')) self.searchPrevAct.setWhatsThis(QApplication.translate('ViewManager', """Search previous""" """

Search the previous occurrence of some text in the current editor.""" """ The previously entered searchtext and options are reused.

""" )) self.connect(self.searchPrevAct, SIGNAL('triggered()'), self.searchDlg.findPrev) self.searchActions.append(self.searchPrevAct) self.searchClearMarkersAct = E4Action(QApplication.translate('ViewManager', 'Clear search markers'), UI.PixmapCache.getIcon("findClear.png"), QApplication.translate('ViewManager', 'Clear search markers'), QKeySequence(QApplication.translate('ViewManager', "Ctrl+3", "Search|Clear search markers")), 0, self.searchActGrp, 'vm_clear_search_markers') self.searchClearMarkersAct.setStatusTip(QApplication.translate('ViewManager', 'Clear all displayed search markers')) self.searchClearMarkersAct.setWhatsThis(QApplication.translate('ViewManager', """Clear search markers""" """

Clear all displayed search markers.

""" )) self.connect(self.searchClearMarkersAct, SIGNAL('triggered()'), self.__searchClearMarkers) self.searchActions.append(self.searchClearMarkersAct) self.replaceAct = E4Action(QApplication.translate('ViewManager', 'Replace'), QApplication.translate('ViewManager', '&Replace...'), QKeySequence(QApplication.translate('ViewManager', "Ctrl+R", "Search|Replace")), 0, self.searchActGrp, 'vm_search_replace') self.replaceAct.setStatusTip(QApplication.translate('ViewManager', 'Replace some text')) self.replaceAct.setWhatsThis(QApplication.translate('ViewManager', """Replace""" """

Search for some text in the current editor and replace it. A""" """ dialog is shown to enter the searchtext, the replacement text""" """ and options for the search and replace.

""" )) self.connect(self.replaceAct, SIGNAL('triggered()'), self.__replace) self.searchActions.append(self.replaceAct) self.quickSearchAct = E4Action(QApplication.translate('ViewManager', 'Quicksearch'), UI.PixmapCache.getIcon("quickFindNext.png"), QApplication.translate('ViewManager', '&Quicksearch'), QKeySequence(QApplication.translate('ViewManager', "Ctrl+Shift+K", "Search|Quicksearch")), 0, self.searchActGrp, 'vm_quicksearch') self.quickSearchAct.setStatusTip(QApplication.translate('ViewManager', 'Perform a quicksearch')) self.quickSearchAct.setWhatsThis(QApplication.translate('ViewManager', """Quicksearch""" """

This activates the quicksearch function of the IDE by""" """ giving focus to the quicksearch entry field. If this field""" """ is already active and contains text, it searches for the""" """ next occurrence of this text.

""" )) self.connect(self.quickSearchAct, SIGNAL('triggered()'), self.__quickSearch) self.searchActions.append(self.quickSearchAct) self.quickSearchBackAct = E4Action(QApplication.translate('ViewManager', 'Quicksearch backwards'), UI.PixmapCache.getIcon("quickFindPrev.png"), QApplication.translate('ViewManager', 'Quicksearch &backwards'), QKeySequence(QApplication.translate('ViewManager', "Ctrl+Shift+J", "Search|Quicksearch backwards")), 0, self.searchActGrp, 'vm_quicksearch_backwards') self.quickSearchBackAct.setStatusTip(QApplication.translate('ViewManager', 'Perform a quicksearch backwards')) self.quickSearchBackAct.setWhatsThis(QApplication.translate('ViewManager', """Quicksearch backwards""" """

This searches the previous occurrence of the quicksearch text.

""" )) self.connect(self.quickSearchBackAct, SIGNAL('triggered()'), self.__quickSearchPrev) self.searchActions.append(self.quickSearchBackAct) self.quickSearchExtendAct = E4Action(QApplication.translate('ViewManager', 'Quicksearch extend'), UI.PixmapCache.getIcon("quickFindExtend.png"), QApplication.translate('ViewManager', 'Quicksearch e&xtend'), QKeySequence(QApplication.translate('ViewManager', "Ctrl+Shift+H", "Search|Quicksearch extend")), 0, self.searchActGrp, 'vm_quicksearch_extend') self.quickSearchExtendAct.setStatusTip(QApplication.translate('ViewManager', \ 'Extend the quicksearch to the end of the current word')) self.quickSearchExtendAct.setWhatsThis(QApplication.translate('ViewManager', """Quicksearch extend""" """

This extends the quicksearch text to the end of the word""" """ currently found.

""" )) self.connect(self.quickSearchExtendAct, SIGNAL('triggered()'), self.__quickSearchExtend) self.searchActions.append(self.quickSearchExtendAct) self.gotoAct = E4Action(QApplication.translate('ViewManager', 'Goto Line'), UI.PixmapCache.getIcon("goto.png"), QApplication.translate('ViewManager', '&Goto Line...'), QKeySequence(QApplication.translate('ViewManager', "Ctrl+G", "Search|Goto Line")), 0, self.searchActGrp, 'vm_search_goto_line') self.gotoAct.setStatusTip(QApplication.translate('ViewManager', 'Goto Line')) self.gotoAct.setWhatsThis(QApplication.translate('ViewManager', """Goto Line""" """

Go to a specific line of text in the current editor.""" """ A dialog is shown to enter the linenumber.

""" )) self.connect(self.gotoAct, SIGNAL('triggered()'), self.__goto) self.searchActions.append(self.gotoAct) self.gotoBraceAct = E4Action(QApplication.translate('ViewManager', 'Goto Brace'), UI.PixmapCache.getIcon("gotoBrace.png"), QApplication.translate('ViewManager', 'Goto &Brace'), QKeySequence(QApplication.translate('ViewManager', "Ctrl+L", "Search|Goto Brace")), 0, self.searchActGrp, 'vm_search_goto_brace') self.gotoBraceAct.setStatusTip(QApplication.translate('ViewManager', 'Goto Brace')) self.gotoBraceAct.setWhatsThis(QApplication.translate('ViewManager', """Goto Brace""" """

Go to the matching brace in the current editor.

""" )) self.connect(self.gotoBraceAct, SIGNAL('triggered()'), self.__gotoBrace) self.searchActions.append(self.gotoBraceAct) self.searchActGrp.setEnabled(False) self.searchFilesAct = E4Action(QApplication.translate('ViewManager', 'Search in Files'), UI.PixmapCache.getIcon("projectFind.png"), QApplication.translate('ViewManager', 'Search in &Files...'), QKeySequence(QApplication.translate('ViewManager', "Shift+Ctrl+F", "Search|Search Files")), 0, self, 'vm_search_in_files') self.searchFilesAct.setStatusTip(QApplication.translate('ViewManager', 'Search for a text in files')) self.searchFilesAct.setWhatsThis(QApplication.translate('ViewManager', """Search in Files""" """

Search for some text in the files of a directory tree""" """ or the project. A dialog is shown to enter the searchtext""" """ and options for the search and to display the result.

""" )) self.connect(self.searchFilesAct, SIGNAL('triggered()'), self.__searchFiles) self.searchActions.append(self.searchFilesAct) self.replaceFilesAct = E4Action(QApplication.translate('ViewManager', 'Replace in Files'), QApplication.translate('ViewManager', 'Replace in F&iles...'), QKeySequence(QApplication.translate('ViewManager', "Shift+Ctrl+R", "Search|Replace in Files")), 0, self, 'vm_replace_in_files') self.replaceFilesAct.setStatusTip(QApplication.translate('ViewManager', 'Search for a text in files and replace it')) self.replaceFilesAct.setWhatsThis(QApplication.translate('ViewManager', """Replace in Files""" """

Search for some text in the files of a directory tree""" """ or the project and replace it. A dialog is shown to enter""" """ the searchtext, the replacement text and options for the""" """ search and to display the result.

""" )) self.connect(self.replaceFilesAct, SIGNAL('triggered()'), self.__replaceFiles) self.searchActions.append(self.replaceFilesAct) def initSearchToolbars(self, toolbarManager): """ Public method to create the Search toolbars @param toolbarManager reference to a toolbar manager object (E4ToolBarManager) @return a tuple of the generated toolbar (search, quicksearch) """ qtb = QToolBar(QApplication.translate('ViewManager', 'Quicksearch'), self.ui) qtb.setIconSize(UI.Config.ToolBarIconSize) qtb.setObjectName("QuicksearchToolbar") qtb.setToolTip(QApplication.translate('ViewManager', 'Quicksearch')) self.quickFindLineEdit = QuickSearchLineEdit(self) self.quickFindtextCombo = QComboBox(self) self.quickFindtextCombo.setEditable(True) self.quickFindtextCombo.setLineEdit(self.quickFindLineEdit) self.quickFindtextCombo.setDuplicatesEnabled(False) self.quickFindtextCombo.setInsertPolicy(QComboBox.InsertAtTop) self.quickFindtextCombo.lastActive = None self.quickFindtextCombo.lastCursorPos = None self.quickFindtextCombo.leForegroundColor = \ self.quickFindtextCombo.lineEdit().palette().color(QPalette.Text) self.quickFindtextCombo.leBackgroundColor = \ self.quickFindtextCombo.lineEdit().palette().color(QPalette.Base) self.quickFindtextCombo.lastSearchText = QString() self.quickFindtextCombo._editor = self.quickFindtextCombo.lineEdit() # this allows us not to jump across searched text # just because of autocompletion enabled self.quickFindtextCombo.setAutoCompletion(False) self.quickFindtextCombo.setMinimumWidth(250) self.quickFindtextCombo.addItem("") self.quickFindtextCombo.setWhatsThis(QApplication.translate('ViewManager', """

Enter the searchtext directly into this field.""" """ The search will be performed case insensitive.""" """ The quicksearch function is activated upon activation""" """ of the quicksearch next action (default key Ctrl+Shift+K),""" """ if this entry field does not have the input focus.""" """ Otherwise it searches for the next occurrence of the""" """ text entered. The quicksearch backwards action""" """ (default key Ctrl+Shift+J) searches backward.""" """ Activating the 'quicksearch extend' action""" """ (default key Ctrl+Shift+H) extends the current""" """ searchtext to the end of the currently found word.""" """ The quicksearch can be ended by pressing the Return key""" """ while the quicksearch entry has the the input focus.

""" )) self.connect(self.quickFindtextCombo._editor, SIGNAL('returnPressed()'), self.__quickSearchEnter) self.connect(self.quickFindtextCombo._editor, SIGNAL('textChanged(const QString&)'), self.__quickSearchText) self.connect(self.quickFindtextCombo._editor, SIGNAL('escPressed()'), self.__quickSearchEscape) self.connect(self.quickFindtextCombo._editor, SIGNAL('gotFocus()'), self.__quickSearchFocusIn) self.quickFindtextAction = QWidgetAction(self) self.quickFindtextAction.setDefaultWidget(self.quickFindtextCombo) self.quickFindtextAction.setObjectName("vm_quickfindtext_action") self.quickFindtextAction.setText(self.trUtf8("Quicksearch Textedit")) qtb.addAction(self.quickFindtextAction) qtb.addAction(self.quickSearchAct) qtb.addAction(self.quickSearchBackAct) qtb.addAction(self.quickSearchExtendAct) self.quickFindtextCombo.setEnabled(False) self.__quickSearchToolbar = qtb self.__quickSearchToolbarVisibility = None tb = QToolBar(QApplication.translate('ViewManager', 'Search'), self.ui) tb.setIconSize(UI.Config.ToolBarIconSize) tb.setObjectName("SearchToolbar") tb.setToolTip(QApplication.translate('ViewManager', 'Search')) tb.addAction(self.searchAct) tb.addAction(self.searchNextAct) tb.addAction(self.searchPrevAct) tb.addSeparator() tb.addAction(self.searchClearMarkersAct) tb.addSeparator() tb.addAction(self.searchFilesAct) tb.setAllowedAreas(Qt.ToolBarAreas(Qt.TopToolBarArea | Qt.BottomToolBarArea)) toolbarManager.addToolBar(qtb, qtb.windowTitle()) toolbarManager.addToolBar(tb, tb.windowTitle()) toolbarManager.addAction(self.gotoAct, tb.windowTitle()) toolbarManager.addAction(self.gotoBraceAct, tb.windowTitle()) return tb, qtb ################################################################## ## Initialize the view related actions, view menu and toolbar ################################################################## def __initViewActions(self): """ Private method defining the user interface actions for the view commands. """ self.viewActGrp = createActionGroup(self) self.viewFoldActGrp = createActionGroup(self) self.zoomInAct = E4Action(QApplication.translate('ViewManager', 'Zoom in'), UI.PixmapCache.getIcon("zoomIn.png"), QApplication.translate('ViewManager', 'Zoom &in'), QKeySequence(QApplication.translate('ViewManager', "Ctrl++", "View|Zoom in")), QKeySequence(QApplication.translate('ViewManager', "Zoom In", "View|Zoom in")), self.viewActGrp, 'vm_view_zoom_in') self.zoomInAct.setStatusTip(QApplication.translate('ViewManager', 'Zoom in on the text')) self.zoomInAct.setWhatsThis(QApplication.translate('ViewManager', """Zoom in""" """

Zoom in on the text. This makes the text bigger.

""" )) self.connect(self.zoomInAct, SIGNAL('triggered()'), self.__zoomIn) self.viewActions.append(self.zoomInAct) self.zoomOutAct = E4Action(QApplication.translate('ViewManager', 'Zoom out'), UI.PixmapCache.getIcon("zoomOut.png"), QApplication.translate('ViewManager', 'Zoom &out'), QKeySequence(QApplication.translate('ViewManager', "Ctrl+-", "View|Zoom out")), QKeySequence(QApplication.translate('ViewManager', "Zoom Out", "View|Zoom out")), self.viewActGrp, 'vm_view_zoom_out') self.zoomOutAct.setStatusTip(QApplication.translate('ViewManager', 'Zoom out on the text')) self.zoomOutAct.setWhatsThis(QApplication.translate('ViewManager', """Zoom out""" """

Zoom out on the text. This makes the text smaller.

""" )) self.connect(self.zoomOutAct, SIGNAL('triggered()'), self.__zoomOut) self.viewActions.append(self.zoomOutAct) self.zoomResetAct = E4Action(QApplication.translate('ViewManager', 'Zoom reset'), UI.PixmapCache.getIcon("zoomReset.png"), QApplication.translate('ViewManager', 'Zoom &reset'), QKeySequence(QApplication.translate('ViewManager', "Ctrl+0", "View|Zoom reset")), 0, self.viewActGrp, 'vm_view_zoom_reset') self.zoomResetAct.setStatusTip(QApplication.translate('ViewManager', 'Reset the zoom of the text')) self.zoomResetAct.setWhatsThis(QApplication.translate('ViewManager', """Zoom reset""" """

Reset the zoom of the text. """ """This sets the zoom factor to 100%.

""" )) self.connect(self.zoomResetAct, SIGNAL('triggered()'), self.__zoomReset) self.viewActions.append(self.zoomResetAct) self.zoomToAct = E4Action(QApplication.translate('ViewManager', 'Zoom'), UI.PixmapCache.getIcon("zoomTo.png"), QApplication.translate('ViewManager', '&Zoom'), QKeySequence(QApplication.translate('ViewManager', "Ctrl+#", "View|Zoom")), 0, self.viewActGrp, 'vm_view_zoom') self.zoomToAct.setStatusTip(QApplication.translate('ViewManager', 'Zoom the text')) self.zoomToAct.setWhatsThis(QApplication.translate('ViewManager', """Zoom""" """

Zoom the text. This opens a dialog where the""" """ desired size can be entered.

""" )) self.connect(self.zoomToAct, SIGNAL('triggered()'), self.__zoom) self.viewActions.append(self.zoomToAct) self.toggleAllAct = E4Action(QApplication.translate('ViewManager', 'Toggle all folds'), QApplication.translate('ViewManager', 'Toggle &all folds'), 0, 0, self.viewFoldActGrp, 'vm_view_toggle_all_folds') self.toggleAllAct.setStatusTip(QApplication.translate('ViewManager', 'Toggle all folds')) self.toggleAllAct.setWhatsThis(QApplication.translate('ViewManager', """Toggle all folds""" """

Toggle all folds of the current editor.

""" )) self.connect(self.toggleAllAct, SIGNAL('triggered()'), self.__toggleAll) self.viewActions.append(self.toggleAllAct) self.toggleAllChildrenAct = \ E4Action(QApplication.translate('ViewManager', 'Toggle all folds (including children)'), QApplication.translate('ViewManager', 'Toggle all &folds (including children)'), 0, 0, self.viewFoldActGrp, 'vm_view_toggle_all_folds_children') self.toggleAllChildrenAct.setStatusTip(QApplication.translate('ViewManager', 'Toggle all folds (including children)')) self.toggleAllChildrenAct.setWhatsThis(QApplication.translate('ViewManager', """Toggle all folds (including children)""" """

Toggle all folds of the current editor including""" """ all children.

""" )) self.connect(self.toggleAllChildrenAct, SIGNAL('triggered()'), self.__toggleAllChildren) self.viewActions.append(self.toggleAllChildrenAct) self.toggleCurrentAct = E4Action(QApplication.translate('ViewManager', 'Toggle current fold'), QApplication.translate('ViewManager', 'Toggle ¤t fold'), 0, 0, self.viewFoldActGrp, 'vm_view_toggle_current_fold') self.toggleCurrentAct.setStatusTip(QApplication.translate('ViewManager', 'Toggle current fold')) self.toggleCurrentAct.setWhatsThis(QApplication.translate('ViewManager', """Toggle current fold""" """

Toggle the folds of the current line of the current editor.

""" )) self.connect(self.toggleCurrentAct, SIGNAL('triggered()'), self.__toggleCurrent) self.viewActions.append(self.toggleCurrentAct) self.unhighlightAct = E4Action(QApplication.translate('ViewManager', 'Remove all highlights'), UI.PixmapCache.getIcon("unhighlight.png"), QApplication.translate('ViewManager', 'Remove all highlights'), 0, 0, self, 'vm_view_unhighlight') self.unhighlightAct.setStatusTip(QApplication.translate('ViewManager', 'Remove all highlights')) self.unhighlightAct.setWhatsThis(QApplication.translate('ViewManager', """Remove all highlights""" """

Remove the highlights of all editors.

""" )) self.connect(self.unhighlightAct, SIGNAL('triggered()'), self.unhighlight) self.viewActions.append(self.unhighlightAct) self.splitViewAct = E4Action(QApplication.translate('ViewManager', 'Split view'), UI.PixmapCache.getIcon("splitVertical.png"), QApplication.translate('ViewManager', '&Split view'), 0, 0, self, 'vm_view_split_view') self.splitViewAct.setStatusTip(QApplication.translate('ViewManager', 'Add a split to the view')) self.splitViewAct.setWhatsThis(QApplication.translate('ViewManager', """Split view""" """

Add a split to the view.

""" )) self.connect(self.splitViewAct, SIGNAL('triggered()'), self.__splitView) self.viewActions.append(self.splitViewAct) self.splitOrientationAct = E4Action(QApplication.translate('ViewManager', 'Arrange horizontally'), QApplication.translate('ViewManager', 'Arrange &horizontally'), 0, 0, self, 'vm_view_arrange_horizontally', True) self.splitOrientationAct.setStatusTip(QApplication.translate('ViewManager', 'Arrange the splitted views horizontally')) self.splitOrientationAct.setWhatsThis(QApplication.translate('ViewManager', """Arrange horizontally""" """

Arrange the splitted views horizontally.

""" )) self.splitOrientationAct.setChecked(False) self.connect(self.splitOrientationAct, SIGNAL('toggled(bool)'), self.__splitOrientation) self.viewActions.append(self.splitOrientationAct) self.splitRemoveAct = E4Action(QApplication.translate('ViewManager', 'Remove split'), UI.PixmapCache.getIcon("remsplitVertical.png"), QApplication.translate('ViewManager', '&Remove split'), 0, 0, self, 'vm_view_remove_split') self.splitRemoveAct.setStatusTip(QApplication.translate('ViewManager', 'Remove the current split')) self.splitRemoveAct.setWhatsThis(QApplication.translate('ViewManager', """Remove split""" """

Remove the current split.

""" )) self.connect(self.splitRemoveAct, SIGNAL('triggered()'), self.removeSplit) self.viewActions.append(self.splitRemoveAct) self.nextSplitAct = E4Action(QApplication.translate('ViewManager', 'Next split'), QApplication.translate('ViewManager', '&Next split'), QKeySequence(QApplication.translate('ViewManager', "Ctrl+Alt+N", "View|Next split")), 0, self, 'vm_next_split') self.nextSplitAct.setStatusTip(QApplication.translate('ViewManager', 'Move to the next split')) self.nextSplitAct.setWhatsThis(QApplication.translate('ViewManager', """Next split""" """

Move to the next split.

""" )) self.connect(self.nextSplitAct, SIGNAL('triggered()'), self.nextSplit) self.viewActions.append(self.nextSplitAct) self.prevSplitAct = E4Action(QApplication.translate('ViewManager', 'Previous split'), QApplication.translate('ViewManager', '&Previous split'), QKeySequence(QApplication.translate('ViewManager', "Ctrl+Alt+P", "View|Previous split")), 0, self, 'vm_previous_split') self.prevSplitAct.setStatusTip(QApplication.translate('ViewManager', 'Move to the previous split')) self.prevSplitAct.setWhatsThis(QApplication.translate('ViewManager', """Previous split""" """

Move to the previous split.

""" )) self.connect(self.prevSplitAct, SIGNAL('triggered()'), self.prevSplit) self.viewActions.append(self.prevSplitAct) self.viewActGrp.setEnabled(False) self.viewFoldActGrp.setEnabled(False) self.unhighlightAct.setEnabled(False) self.splitViewAct.setEnabled(False) self.splitOrientationAct.setEnabled(False) self.splitRemoveAct.setEnabled(False) self.nextSplitAct.setEnabled(False) self.prevSplitAct.setEnabled(False) def initViewMenu(self): """ Public method to create the View menu @return the generated menu """ menu = QMenu(QApplication.translate('ViewManager', '&View'), self.ui) menu.setTearOffEnabled(True) menu.addActions(self.viewActGrp.actions()) menu.addSeparator() menu.addActions(self.viewFoldActGrp.actions()) menu.addSeparator() menu.addAction(self.unhighlightAct) if self.canSplit(): menu.addSeparator() menu.addAction(self.splitViewAct) menu.addAction(self.splitOrientationAct) menu.addAction(self.splitRemoveAct) menu.addAction(self.nextSplitAct) menu.addAction(self.prevSplitAct) return menu def initViewToolbar(self, toolbarManager): """ Public method to create the View toolbar @param toolbarManager reference to a toolbar manager object (E4ToolBarManager) @return the generated toolbar """ tb = QToolBar(QApplication.translate('ViewManager', 'View'), self.ui) tb.setIconSize(UI.Config.ToolBarIconSize) tb.setObjectName("ViewToolbar") tb.setToolTip(QApplication.translate('ViewManager', 'View')) tb.addActions(self.viewActGrp.actions()) toolbarManager.addToolBar(tb, tb.windowTitle()) toolbarManager.addAction(self.unhighlightAct, tb.windowTitle()) toolbarManager.addAction(self.splitViewAct, tb.windowTitle()) toolbarManager.addAction(self.splitRemoveAct, tb.windowTitle()) return tb ################################################################## ## Initialize the macro related actions and macro menu ################################################################## def __initMacroActions(self): """ Private method defining the user interface actions for the macro commands. """ self.macroActGrp = createActionGroup(self) self.macroStartRecAct = E4Action(QApplication.translate('ViewManager', 'Start Macro Recording'), QApplication.translate('ViewManager', 'S&tart Macro Recording'), 0, 0, self.macroActGrp, 'vm_macro_start_recording') self.macroStartRecAct.setStatusTip(QApplication.translate('ViewManager', 'Start Macro Recording')) self.macroStartRecAct.setWhatsThis(QApplication.translate('ViewManager', """Start Macro Recording""" """

Start recording editor commands into a new macro.

""" )) self.connect(self.macroStartRecAct, SIGNAL('triggered()'), self.__macroStartRecording) self.macroActions.append(self.macroStartRecAct) self.macroStopRecAct = E4Action(QApplication.translate('ViewManager', 'Stop Macro Recording'), QApplication.translate('ViewManager', 'Sto&p Macro Recording'), 0, 0, self.macroActGrp, 'vm_macro_stop_recording') self.macroStopRecAct.setStatusTip(QApplication.translate('ViewManager', 'Stop Macro Recording')) self.macroStopRecAct.setWhatsThis(QApplication.translate('ViewManager', """Stop Macro Recording""" """

Stop recording editor commands into a new macro.

""" )) self.connect(self.macroStopRecAct, SIGNAL('triggered()'), self.__macroStopRecording) self.macroActions.append(self.macroStopRecAct) self.macroRunAct = E4Action(QApplication.translate('ViewManager', 'Run Macro'), QApplication.translate('ViewManager', '&Run Macro'), 0, 0, self.macroActGrp, 'vm_macro_run') self.macroRunAct.setStatusTip(QApplication.translate('ViewManager', 'Run Macro')) self.macroRunAct.setWhatsThis(QApplication.translate('ViewManager', """Run Macro""" """

Run a previously recorded editor macro.

""" )) self.connect(self.macroRunAct, SIGNAL('triggered()'), self.__macroRun) self.macroActions.append(self.macroRunAct) self.macroDeleteAct = E4Action(QApplication.translate('ViewManager', 'Delete Macro'), QApplication.translate('ViewManager', '&Delete Macro'), 0, 0, self.macroActGrp, 'vm_macro_delete') self.macroDeleteAct.setStatusTip(QApplication.translate('ViewManager', 'Delete Macro')) self.macroDeleteAct.setWhatsThis(QApplication.translate('ViewManager', """Delete Macro""" """

Delete a previously recorded editor macro.

""" )) self.connect(self.macroDeleteAct, SIGNAL('triggered()'), self.__macroDelete) self.macroActions.append(self.macroDeleteAct) self.macroLoadAct = E4Action(QApplication.translate('ViewManager', 'Load Macro'), QApplication.translate('ViewManager', '&Load Macro'), 0, 0, self.macroActGrp, 'vm_macro_load') self.macroLoadAct.setStatusTip(QApplication.translate('ViewManager', 'Load Macro')) self.macroLoadAct.setWhatsThis(QApplication.translate('ViewManager', """Load Macro""" """

Load an editor macro from a file.

""" )) self.connect(self.macroLoadAct, SIGNAL('triggered()'), self.__macroLoad) self.macroActions.append(self.macroLoadAct) self.macroSaveAct = E4Action(QApplication.translate('ViewManager', 'Save Macro'), QApplication.translate('ViewManager', '&Save Macro'), 0, 0, self.macroActGrp, 'vm_macro_save') self.macroSaveAct.setStatusTip(QApplication.translate('ViewManager', 'Save Macro')) self.macroSaveAct.setWhatsThis(QApplication.translate('ViewManager', """Save Macro""" """

Save a previously recorded editor macro to a file.

""" )) self.connect(self.macroSaveAct, SIGNAL('triggered()'), self.__macroSave) self.macroActions.append(self.macroSaveAct) self.macroActGrp.setEnabled(False) def initMacroMenu(self): """ Public method to create the Macro menu @return the generated menu """ menu = QMenu(QApplication.translate('ViewManager', "&Macros"), self.ui) menu.setTearOffEnabled(True) menu.addActions(self.macroActGrp.actions()) return menu ##################################################################### ## Initialize the bookmark related actions, bookmark menu and toolbar ##################################################################### def __initBookmarkActions(self): """ Private method defining the user interface actions for the bookmarks commands. """ self.bookmarkActGrp = createActionGroup(self) self.bookmarkToggleAct = E4Action(QApplication.translate('ViewManager', 'Toggle Bookmark'), UI.PixmapCache.getIcon("bookmarkToggle.png"), QApplication.translate('ViewManager', '&Toggle Bookmark'), QKeySequence(QApplication.translate('ViewManager', "Alt+Ctrl+T", "Bookmark|Toggle")), 0, self.bookmarkActGrp, 'vm_bookmark_toggle') self.bookmarkToggleAct.setStatusTip(QApplication.translate('ViewManager', 'Toggle Bookmark')) self.bookmarkToggleAct.setWhatsThis(QApplication.translate('ViewManager', """Toggle Bookmark""" """

Toggle a bookmark at the current line of the current editor.

""" )) self.connect(self.bookmarkToggleAct, SIGNAL('triggered()'), self.__toggleBookmark) self.bookmarkActions.append(self.bookmarkToggleAct) self.bookmarkNextAct = E4Action(QApplication.translate('ViewManager', 'Next Bookmark'), UI.PixmapCache.getIcon("bookmarkNext.png"), QApplication.translate('ViewManager', '&Next Bookmark'), QKeySequence(QApplication.translate('ViewManager', "Ctrl+PgDown", "Bookmark|Next")), 0, self.bookmarkActGrp, 'vm_bookmark_next') self.bookmarkNextAct.setStatusTip(QApplication.translate('ViewManager', 'Next Bookmark')) self.bookmarkNextAct.setWhatsThis(QApplication.translate('ViewManager', """Next Bookmark""" """

Go to next bookmark of the current editor.

""" )) self.connect(self.bookmarkNextAct, SIGNAL('triggered()'), self.__nextBookmark) self.bookmarkActions.append(self.bookmarkNextAct) self.bookmarkPreviousAct = E4Action(QApplication.translate('ViewManager', 'Previous Bookmark'), UI.PixmapCache.getIcon("bookmarkPrevious.png"), QApplication.translate('ViewManager', '&Previous Bookmark'), QKeySequence(QApplication.translate('ViewManager', "Ctrl+PgUp", "Bookmark|Previous")), 0, self.bookmarkActGrp, 'vm_bookmark_previous') self.bookmarkPreviousAct.setStatusTip(QApplication.translate('ViewManager', 'Previous Bookmark')) self.bookmarkPreviousAct.setWhatsThis(QApplication.translate('ViewManager', """Previous Bookmark""" """

Go to previous bookmark of the current editor.

""" )) self.connect(self.bookmarkPreviousAct, SIGNAL('triggered()'), self.__previousBookmark) self.bookmarkActions.append(self.bookmarkPreviousAct) self.bookmarkClearAct = E4Action(QApplication.translate('ViewManager', 'Clear Bookmarks'), QApplication.translate('ViewManager', '&Clear Bookmarks'), QKeySequence(QApplication.translate('ViewManager', "Alt+Ctrl+C", "Bookmark|Clear")), 0, self.bookmarkActGrp, 'vm_bookmark_clear') self.bookmarkClearAct.setStatusTip(QApplication.translate('ViewManager', 'Clear Bookmarks')) self.bookmarkClearAct.setWhatsThis(QApplication.translate('ViewManager', """Clear Bookmarks""" """

Clear bookmarks of all editors.

""" )) self.connect(self.bookmarkClearAct, SIGNAL('triggered()'), self.__clearAllBookmarks) self.bookmarkActions.append(self.bookmarkClearAct) self.syntaxErrorGotoAct = E4Action(QApplication.translate('ViewManager', 'Goto Syntax Error'), UI.PixmapCache.getIcon("syntaxErrorGoto.png"), QApplication.translate('ViewManager', '&Goto Syntax Error'), 0, 0, self.bookmarkActGrp, 'vm_syntaxerror_goto') self.syntaxErrorGotoAct.setStatusTip(QApplication.translate('ViewManager', 'Goto Syntax Error')) self.syntaxErrorGotoAct.setWhatsThis(QApplication.translate('ViewManager', """Goto Syntax Error""" """

Go to next syntax error of the current editor.

""" )) self.connect(self.syntaxErrorGotoAct, SIGNAL('triggered()'), self.__gotoSyntaxError) self.bookmarkActions.append(self.syntaxErrorGotoAct) self.syntaxErrorClearAct = E4Action(QApplication.translate('ViewManager', 'Clear Syntax Errors'), QApplication.translate('ViewManager', 'Clear &Syntax Errors'), 0, 0, self.bookmarkActGrp, 'vm_syntaxerror_clear') self.syntaxErrorClearAct.setStatusTip(QApplication.translate('ViewManager', 'Clear Syntax Errors')) self.syntaxErrorClearAct.setWhatsThis(QApplication.translate('ViewManager', """Clear Syntax Errors""" """

Clear syntax errors of all editors.

""" )) self.connect(self.syntaxErrorClearAct, SIGNAL('triggered()'), self.__clearAllSyntaxErrors) self.bookmarkActions.append(self.syntaxErrorClearAct) self.notcoveredNextAct = E4Action(QApplication.translate('ViewManager', 'Next uncovered line'), UI.PixmapCache.getIcon("notcoveredNext.png"), QApplication.translate('ViewManager', '&Next uncovered line'), 0, 0, self.bookmarkActGrp, 'vm_uncovered_next') self.notcoveredNextAct.setStatusTip(QApplication.translate('ViewManager', 'Next uncovered line')) self.notcoveredNextAct.setWhatsThis(QApplication.translate('ViewManager', """Next uncovered line""" """

Go to next line of the current editor marked as not covered.

""" )) self.connect(self.notcoveredNextAct, SIGNAL('triggered()'), self.__nextUncovered) self.bookmarkActions.append(self.notcoveredNextAct) self.notcoveredPreviousAct = E4Action(QApplication.translate('ViewManager', 'Previous uncovered line'), UI.PixmapCache.getIcon("notcoveredPrev.png"), QApplication.translate('ViewManager', '&Previous uncovered line'), 0, 0, self.bookmarkActGrp, 'vm_uncovered_previous') self.notcoveredPreviousAct.setStatusTip(QApplication.translate('ViewManager', 'Previous uncovered line')) self.notcoveredPreviousAct.setWhatsThis(QApplication.translate('ViewManager', """Previous uncovered line""" """

Go to previous line of the current editor marked""" """ as not covered.

""" )) self.connect(self.notcoveredPreviousAct, SIGNAL('triggered()'), self.__previousUncovered) self.bookmarkActions.append(self.notcoveredPreviousAct) self.taskNextAct = E4Action(QApplication.translate('ViewManager', 'Next Task'), UI.PixmapCache.getIcon("taskNext.png"), QApplication.translate('ViewManager', '&Next Task'), 0, 0, self.bookmarkActGrp, 'vm_task_next') self.taskNextAct.setStatusTip(QApplication.translate('ViewManager', 'Next Task')) self.taskNextAct.setWhatsThis(QApplication.translate('ViewManager', """Next Task""" """

Go to next line of the current editor having a task.

""" )) self.connect(self.taskNextAct, SIGNAL('triggered()'), self.__nextTask) self.bookmarkActions.append(self.taskNextAct) self.taskPreviousAct = E4Action(QApplication.translate('ViewManager', 'Previous Task'), UI.PixmapCache.getIcon("taskPrev.png"), QApplication.translate('ViewManager', '&Previous Task'), 0, 0, self.bookmarkActGrp, 'vm_task_previous') self.taskPreviousAct.setStatusTip(QApplication.translate('ViewManager', 'Previous Task')) self.taskPreviousAct.setWhatsThis(QApplication.translate('ViewManager', """Previous Task""" """

Go to previous line of the current editor having a task.

""" )) self.connect(self.taskPreviousAct, SIGNAL('triggered()'), self.__previousTask) self.bookmarkActions.append(self.taskPreviousAct) self.bookmarkActGrp.setEnabled(False) def initBookmarkMenu(self): """ Public method to create the Bookmark menu @return the generated menu """ menu = QMenu(QApplication.translate('ViewManager', '&Bookmarks'), self.ui) self.bookmarksMenu = QMenu(QApplication.translate('ViewManager', '&Bookmarks'), menu) menu.setTearOffEnabled(True) menu.addAction(self.bookmarkToggleAct) menu.addAction(self.bookmarkNextAct) menu.addAction(self.bookmarkPreviousAct) menu.addAction(self.bookmarkClearAct) menu.addSeparator() self.menuBookmarksAct = menu.addMenu(self.bookmarksMenu) menu.addSeparator() menu.addAction(self.syntaxErrorGotoAct) menu.addAction(self.syntaxErrorClearAct) menu.addSeparator() menu.addAction(self.notcoveredNextAct) menu.addAction(self.notcoveredPreviousAct) menu.addSeparator() menu.addAction(self.taskNextAct) menu.addAction(self.taskPreviousAct) self.connect(self.bookmarksMenu, SIGNAL('aboutToShow()'), self.__showBookmarksMenu) self.connect(self.bookmarksMenu, SIGNAL('triggered(QAction *)'), self.__bookmarkSelected) self.connect(menu, SIGNAL('aboutToShow()'), self.__showBookmarkMenu) return menu def initBookmarkToolbar(self, toolbarManager): """ Public method to create the Bookmark toolbar @param toolbarManager reference to a toolbar manager object (E4ToolBarManager) @return the generated toolbar """ tb = QToolBar(QApplication.translate('ViewManager', 'Bookmarks'), self.ui) tb.setIconSize(UI.Config.ToolBarIconSize) tb.setObjectName("BookmarksToolbar") tb.setToolTip(QApplication.translate('ViewManager', 'Bookmarks')) tb.addAction(self.bookmarkToggleAct) tb.addAction(self.bookmarkNextAct) tb.addAction(self.bookmarkPreviousAct) tb.addSeparator() tb.addAction(self.syntaxErrorGotoAct) tb.addSeparator() tb.addAction(self.taskNextAct) tb.addAction(self.taskPreviousAct) toolbarManager.addToolBar(tb, tb.windowTitle()) toolbarManager.addAction(self.notcoveredNextAct, tb.windowTitle()) toolbarManager.addAction(self.notcoveredPreviousAct, tb.windowTitle()) return tb ################################################################## ## Initialize the spell checking related actions ################################################################## def __initSpellingActions(self): """ Private method to initialize the spell checking actions. """ self.spellingActGrp = createActionGroup(self) self.spellCheckAct = E4Action(QApplication.translate('ViewManager', 'Spell check'), UI.PixmapCache.getIcon("spellchecking.png"), QApplication.translate('ViewManager', '&Spell Check...'), QKeySequence(QApplication.translate('ViewManager', "Shift+F7", "Spelling|Spell Check")), 0, self.spellingActGrp, 'vm_spelling_spellcheck') self.spellCheckAct.setStatusTip(QApplication.translate('ViewManager', 'Perform spell check of current editor')) self.spellCheckAct.setWhatsThis(QApplication.translate('ViewManager', """Spell check""" """

Perform a spell check of the current editor.

""" )) self.connect(self.spellCheckAct, SIGNAL('triggered()'), self.__spellCheck) self.spellingActions.append(self.spellCheckAct) self.autoSpellCheckAct = E4Action(QApplication.translate('ViewManager', 'Automatic spell checking'), UI.PixmapCache.getIcon("autospellchecking.png"), QApplication.translate('ViewManager', '&Automatic spell checking'), 0, 0, self.spellingActGrp, 'vm_spelling_autospellcheck') self.autoSpellCheckAct.setStatusTip(QApplication.translate('ViewManager', '(De-)Activate automatic spell checking')) self.autoSpellCheckAct.setWhatsThis(QApplication.translate('ViewManager', """Automatic spell checking""" """

Activate or deactivate the automatic spell checking function of""" """ all editors.

""" )) self.autoSpellCheckAct.setCheckable(True) self.autoSpellCheckAct.setChecked( Preferences.getEditor("AutoSpellCheckingEnabled")) self.connect(self.autoSpellCheckAct, SIGNAL('triggered()'), self.__setAutoSpellChecking) self.spellingActions.append(self.autoSpellCheckAct) self.__enableSpellingActions() def __enableSpellingActions(self): """ Private method to set the enabled state of the spelling actions. """ spellingAvailable = SpellChecker.isAvailable() self.spellCheckAct.setEnabled(len(self.editors) != 0 and spellingAvailable) self.autoSpellCheckAct.setEnabled(spellingAvailable) def addToExtrasMenu(self, menu): """ Public method to add some actions to the extras menu. """ menu.addAction(self.spellCheckAct) menu.addAction(self.autoSpellCheckAct) menu.addSeparator() def initSpellingToolbar(self, toolbarManager): """ Public method to create the Spelling toolbar @param toolbarManager reference to a toolbar manager object (E4ToolBarManager) @return the generated toolbar """ tb = QToolBar(QApplication.translate('ViewManager', 'Spelling'), self.ui) tb.setIconSize(UI.Config.ToolBarIconSize) tb.setObjectName("SpellingToolbar") tb.setToolTip(QApplication.translate('ViewManager', 'Spelling')) tb.addAction(self.spellCheckAct) tb.addAction(self.autoSpellCheckAct) toolbarManager.addToolBar(tb, tb.windowTitle()) return tb ################################################################## ## Methods and slots that deal with file and window handling ################################################################## def openFiles(self, prog = None): """ Public slot to open some files. @param prog name of file to be opened (string or QString) """ # Get the file name if one wasn't specified. if prog is None: # set the cwd of the dialog based on the following search criteria: # 1: Directory of currently active editor # 2: Directory of currently active project # 3: CWD filter = self._getOpenFileFilter() progs = KQFileDialog.getOpenFileNames(\ self.ui, QApplication.translate('ViewManager', "Open files"), self._getOpenStartDir(), QScintilla.Lexers.getOpenFileFiltersList(True, True), filter) else: progs = [prog] for prog in progs: prog = Utilities.normabspath(unicode(prog)) # Open up the new files. self.openSourceFile(prog) def checkDirty(self, editor, autosave = False): """ Public method to check dirty status and open a message window. @param editor editor window to check @param autosave flag indicating that the file should be saved automatically (boolean) @return flag indicating successful reset of the dirty flag (boolean) """ if editor.isModified(): fn = editor.getFileName() # ignore the dirty status, if there is more than one open editor # for the same file if fn and self.getOpenEditorCount(fn) > 1: return True if fn is None: fn = editor.getNoName() autosave = False if autosave: res = QMessageBox.Save else: res = KQMessageBox.warning(self.ui, QApplication.translate('ViewManager', "File Modified"), QApplication.translate('ViewManager', """

The file %1 has unsaved changes.

""") .arg(fn), QMessageBox.StandardButtons(\ QMessageBox.Abort | \ QMessageBox.Discard | \ QMessageBox.Save), QMessageBox.Save) if res == QMessageBox.Save: ok, newName = editor.saveFile() if ok: self.setEditorName(editor, newName) return ok elif res == QMessageBox.Abort or res == QMessageBox.Cancel: return False return True def checkAllDirty(self): """ Public method to check the dirty status of all editors. @return flag indicating successful reset of all dirty flags (boolean) """ for editor in self.editors: if not self.checkDirty(editor): return False return True def closeEditor(self, editor): """ Public method to close an editor window. @param editor editor window to be closed @return flag indicating success (boolean) """ # save file if necessary if not self.checkDirty(editor): return False # get the filename of the editor for later use fn = editor.getFileName() # remove the window self._removeView(editor) self.editors.remove(editor) # send a signal, if it was the last editor for this filename if fn and self.getOpenEditor(fn) is None: self.emit(SIGNAL('editorClosed'), fn) self.emit(SIGNAL('editorClosedEd'), editor) # send a signal, if it was the very last editor if not len(self.editors): self.__lastEditorClosed() self.emit(SIGNAL('lastEditorClosed')) return True def closeCurrentWindow(self): """ Public method to close the current window. @return flag indicating success (boolean) """ aw = self.activeWindow() if aw is None: return False res = self.closeEditor(aw) if res and aw == self.currentEditor: self.currentEditor = None return res def closeAllWindows(self): """ Private method to close all editor windows via file menu. """ savedEditors = self.editors[:] for editor in savedEditors: self.closeEditor(editor) def closeWindow(self, fn): """ Public method to close an arbitrary source editor. @param fn filename of editor to be closed @return flag indicating success (boolean) """ for editor in self.editors: if Utilities.samepath(fn, editor.getFileName()): break else: return True res = self.closeEditor(editor) if res and editor == self.currentEditor: self.currentEditor = None return res def closeEditorWindow(self, editor): """ Public method to close an arbitrary source editor. @param editor editor to be closed """ if editor is None: return res = self.closeEditor(editor) if res and editor == self.currentEditor: self.currentEditor = None def exit(self): """ Public method to handle the debugged program terminating. """ if self.currentEditor is not None: self.currentEditor.highlight() self.currentEditor = None self.__setSbFile() def openSourceFile(self, fn, lineno = -1, filetype = "", selection = None): """ Public slot to display a file in an editor. @param fn name of file to be opened @param lineno line number to place the cursor at @param filetype type of the source file (string) @param selection tuple (start, end) of an area to be selected """ try: newWin, editor = self.getEditor(fn, filetype = filetype) except IOError: return if newWin: self._modificationStatusChanged(editor.isModified(), editor) self._checkActions(editor) if lineno >= 0: editor.ensureVisibleTop(lineno) editor.gotoLine(lineno) if selection is not None: editor.setSelection(lineno - 1, selection[0], lineno - 1, selection[1]) # insert filename into list of recently opened files self.addToRecentList(fn) def __connectEditor(self, editor): """ Private method to establish all editor connections. @param editor reference to the editor object to be connected """ self.connect(editor, SIGNAL('modificationStatusChanged'), self._modificationStatusChanged) self.connect(editor, SIGNAL('cursorChanged'), self.__cursorChanged) self.connect(editor, SIGNAL('editorSaved'), self.__editorSaved) self.connect(editor, SIGNAL('breakpointToggled'), self.__breakpointToggled) self.connect(editor, SIGNAL('bookmarkToggled'), self.__bookmarkToggled) self.connect(editor, SIGNAL('syntaxerrorToggled'), self._syntaxErrorToggled) self.connect(editor, SIGNAL('coverageMarkersShown'), self.__coverageMarkersShown) self.connect(editor, SIGNAL('autoCompletionAPIsAvailable'), self.__editorAutoCompletionAPIsAvailable) self.connect(editor, SIGNAL('undoAvailable'), self.undoAct.setEnabled) self.connect(editor, SIGNAL('redoAvailable'), self.redoAct.setEnabled) self.connect(editor, SIGNAL('taskMarkersUpdated'), self.__taskMarkersUpdated) self.connect(editor, SIGNAL('languageChanged'), self.__editorConfigChanged) self.connect(editor, SIGNAL('eolChanged'), self.__editorConfigChanged) self.connect(editor, SIGNAL('encodingChanged'), self.__editorConfigChanged) self.connect(editor, SIGNAL("selectionChanged()"), self.searchDlg.selectionChanged) self.connect(editor, SIGNAL("selectionChanged()"), self.replaceDlg.selectionChanged) def newEditorView(self, fn, caller, filetype = ""): """ Public method to create a new editor displaying the given document. @param fn filename of this view @param caller reference to the editor calling this method @param filetype type of the source file (string) """ editor = self.cloneEditor(caller, filetype, fn) self._addView(editor, fn, caller.getNoName()) self._modificationStatusChanged(editor.isModified(), editor) self._checkActions(editor) def cloneEditor(self, caller, filetype, fn): """ Public method to clone an editor displaying the given document. @param caller reference to the editor calling this method @param filetype type of the source file (string) @param fn filename of this view @return reference to the new editor object (Editor.Editor) """ editor = Editor(self.dbs, fn, self, filetype = filetype, editor = caller, tv = e4App().getObject("TaskViewer")) self.editors.append(editor) self.__connectEditor(editor) self.__editorOpened() self.emit(SIGNAL('editorOpened'), fn) self.emit(SIGNAL('editorOpenedEd'), editor) return editor def addToRecentList(self, fn): """ Public slot to add a filename to the list of recently opened files. @param fn name of the file to be added """ self.recent.removeAll(fn) self.recent.prepend(fn) maxRecent = Preferences.getUI("RecentNumber") if len(self.recent) > maxRecent: self.recent = self.recent[:maxRecent] self.__saveRecent() def showDebugSource(self, fn, line): """ Public method to open the given file and highlight the given line in it. @param fn filename of editor to update (string) @param line line number to highlight (int) """ self.openSourceFile(fn, line) self.setFileLine(fn, line) def setFileLine(self, fn, line, error = False, syntaxError = False): """ Public method to update the user interface when the current program or line changes. @param fn filename of editor to update (string) @param line line number to highlight (int) @param error flag indicating an error highlight (boolean) @param syntaxError flag indicating a syntax error """ try: newWin, self.currentEditor = self.getEditor(fn) except IOError: return enc = self.currentEditor.getEncoding() lang = self.currentEditor.getLanguage() eol = self.currentEditor.getEolIndicator() self.__setSbFile(fn, line, encoding = enc, language = lang, eol = eol) # Change the highlighted line. self.currentEditor.highlight(line, error, syntaxError) self.currentEditor.highlightVisible() self._checkActions(self.currentEditor, False) def __setSbFile(self, fn = None, line = None, pos = None, encoding = None, language = None, eol = None): """ Private method to set the file info in the status bar. @param fn filename to display (string) @param line line number to display (int) @param pos character position to display (int) @param encoding encoding name to display (string) @param language language to display (string) @param eol eol indicator to display (string) """ if fn is None: fn = '' writ = ' ' else: if QFileInfo(fn).isWritable(): writ = ' rw' else: writ = ' ro' self.sbWritable.setText(writ) self.sbFile.setTextPath(QApplication.translate('ViewManager', 'File: %1'), fn) if line is None: line = '' self.sbLine.setText(QApplication.translate('ViewManager', 'Line: %1').arg(line, 5)) if pos is None: pos = '' self.sbPos.setText(QApplication.translate('ViewManager', 'Pos: %1').arg(pos, 5)) if encoding is None: encoding = '' self.sbEnc.setText(encoding) if language is None: language = '' self.sbLang.setText(language) if eol is None: eol = '' self.sbEol.setText(eol) def unhighlight(self, current = False): """ Public method to switch off all highlights. @param current flag indicating only the current editor should be unhighlighted (boolean) """ if current: if self.currentEditor is not None: self.currentEditor.highlight() else: for editor in self.editors: editor.highlight() def getOpenFilenames(self): """ Public method returning a list of the filenames of all editors. @return list of all opened filenames (list of strings) """ filenames = [] for editor in self.editors: fn = editor.getFileName() if fn is not None and fn not in filenames: filenames.append(fn) return filenames def getEditor(self, fn, filetype = ""): """ Public method to return the editor displaying the given file. If there is no editor with the given file, a new editor window is created. @param fn filename to look for @param filetype type of the source file (string) @return tuple of two values giving a flag indicating a new window creation and a reference to the editor displaying this file """ newWin = False editor = self.activeWindow() if editor is None or not Utilities.samepath(fn, editor.getFileName()): for editor in self.editors: if Utilities.samepath(fn, editor.getFileName()): break else: editor = Editor(self.dbs, fn, self, filetype = filetype, tv = e4App().getObject("TaskViewer")) self.editors.append(editor) self.__connectEditor(editor) self.__editorOpened() self.emit(SIGNAL('editorOpened'), fn) self.emit(SIGNAL('editorOpenedEd'), editor) newWin = True if newWin: self._addView(editor, fn) else: self._showView(editor, fn) return (newWin, editor) def getOpenEditors(self): """ Public method to get references to all open editors. @return list of references to all open editors (list of QScintilla.editor) """ return self.editors def getOpenEditorsCount(self): """ Public method to get the number of open editors. @return number of open editors (integer) """ return len(self.editors) def getOpenEditor(self, fn): """ Public method to return the editor displaying the given file. @param fn filename to look for @return a reference to the editor displaying this file or None, if no editor was found """ for editor in self.editors: if Utilities.samepath(fn, editor.getFileName()): return editor return None def getOpenEditorCount(self, fn): """ Public method to return the count of editors displaying the given file. @param fn filename to look for @return count of editors displaying this file (integer) """ count = 0 for editor in self.editors: if Utilities.samepath(fn, editor.getFileName()): count += 1 return count def getActiveName(self): """ Public method to retrieve the filename of the active window. @return filename of active window (string) """ aw = self.activeWindow() if aw: return aw.getFileName() else: return None def saveEditor(self, fn): """ Public method to save a named editor file. @param fn filename of editor to be saved (string) @return flag indicating success (boolean) """ for editor in self.editors: if Utilities.samepath(fn, editor.getFileName()): break else: return True if not editor.isModified(): return True else: ok = editor.saveFile()[0] return ok def saveEditorEd(self, ed): """ Public slot to save the contents of an editor. @param ed editor to be saved @return flag indicating success (boolean) """ if ed: if not ed.isModified(): return True else: ok, newName = ed.saveFile() if ok: self.setEditorName(ed, newName) return ok else: return False def saveCurrentEditor(self): """ Public slot to save the contents of the current editor. """ aw = self.activeWindow() self.saveEditorEd(aw) def saveAsEditorEd(self, ed): """ Public slot to save the contents of an editor to a new file. @param ed editor to be saved """ if ed: ok, newName = ed.saveFileAs() if ok: self.setEditorName(ed, newName) else: return def saveAsCurrentEditor(self): """ Public slot to save the contents of the current editor to a new file. """ aw = self.activeWindow() self.saveAsEditorEd(aw) def saveEditorsList(self, editors): """ Public slot to save a list of editors. @param editors list of editors to be saved """ for editor in editors: ok, newName = editor.saveFile() if ok: self.setEditorName(editor, newName) def saveAllEditors(self): """ Public slot to save the contents of all editors. """ for editor in self.editors: ok, newName = editor.saveFile() if ok: self.setEditorName(editor, newName) # restart autosave timer if self.autosaveInterval > 0: self.autosaveTimer.start(self.autosaveInterval * 60000) def __exportMenuTriggered(self, act): """ Private method to handle the selection of an export format. @param act reference to the action that was triggered (QAction) """ aw = self.activeWindow() if aw: exporterFormat = unicode(act.data().toString()) aw.exportFile(exporterFormat) def newEditor(self): """ Public slot to generate a new empty editor. """ editor = Editor(self.dbs, None, self, tv = e4App().getObject("TaskViewer")) self.editors.append(editor) self.__connectEditor(editor) self._addView(editor, None) self.__editorOpened() self._checkActions(editor) self.emit(SIGNAL('editorOpened'), "") self.emit(SIGNAL('editorOpenedEd'), editor) def printEditor(self, editor): """ Public slot to print an editor. @param editor editor to be printed """ if editor: editor.printFile() else: return def printCurrentEditor(self): """ Public slot to print the contents of the current editor. """ aw = self.activeWindow() self.printEditor(aw) def printPreviewCurrentEditor(self): """ Public slot to show a print preview of the current editor. """ aw = self.activeWindow() if aw: aw.printPreviewFile() def __showFileMenu(self): """ Private method to set up the file menu. """ self.menuRecentAct.setEnabled(len(self.recent) > 0) def __showRecentMenu(self): """ Private method to set up recent files menu. """ self.__loadRecent() self.recentMenu.clear() idx = 1 for rs in self.recent: if idx < 10: formatStr = '&%d. %s' else: formatStr = '%d. %s' act = self.recentMenu.addAction(\ formatStr % (idx, Utilities.compactPath(unicode(rs), self.ui.maxMenuFilePathLen))) act.setData(QVariant(rs)) act.setEnabled(QFileInfo(rs).exists()) idx += 1 self.recentMenu.addSeparator() self.recentMenu.addAction(\ QApplication.translate('ViewManager', '&Clear'), self.__clearRecent) def __openSourceFile(self, act): """ Private method to open a file from the list of rencently opened files. @param act reference to the action that triggered (QAction) """ file = unicode(act.data().toString()) if file: self.openSourceFile(file) def __clearRecent(self): """ Private method to clear the recent files menu. """ self.recent.clear() def __showBookmarkedMenu(self): """ Private method to set up bookmarked files menu. """ self.bookmarkedMenu.clear() for rp in self.bookmarked: act = self.bookmarkedMenu.addAction(\ Utilities.compactPath(unicode(rp), self.ui.maxMenuFilePathLen)) act.setData(QVariant(rp)) act.setEnabled(QFileInfo(rp).exists()) if len(self.bookmarked): self.bookmarkedMenu.addSeparator() self.bookmarkedMenu.addAction(\ QApplication.translate('ViewManager', '&Add'), self.__addBookmarked) self.bookmarkedMenu.addAction(\ QApplication.translate('ViewManager', '&Edit...'), self.__editBookmarked) self.bookmarkedMenu.addAction(\ QApplication.translate('ViewManager', '&Clear'), self.__clearBookmarked) def __addBookmarked(self): """ Private method to add the current file to the list of bookmarked files. """ an = self.getActiveName() if an is not None and self.bookmarked.indexOf(QString(an)) == -1: self.bookmarked.append(an) def __editBookmarked(self): """ Private method to edit the list of bookmarked files. """ dlg = BookmarkedFilesDialog(self.bookmarked, self.ui) if dlg.exec_() == QDialog.Accepted: self.bookmarked = QStringList(dlg.getBookmarkedFiles()) def __clearBookmarked(self): """ Private method to clear the bookmarked files menu. """ self.bookmarked = QStringList() def projectOpened(self): """ Public slot to handle the projectOpened signal. """ for editor in self.editors: editor.projectOpened() def projectClosed(self): """ Public slot to handle the projectClosed signal. """ for editor in self.editors: editor.projectClosed() def projectFileRenamed(self, oldfn, newfn): """ Public slot to handle the projectFileRenamed signal. @param oldfn old filename of the file (string) @param newfn new filename of the file (string) """ editor = self.getOpenEditor(oldfn) if editor: editor.fileRenamed(newfn) def projectLexerAssociationsChanged(self): """ Public slot to handle changes of the project lexer associations. """ for editor in self.editors: editor.projectLexerAssociationsChanged() def enableEditorsCheckFocusIn(self, enabled): """ Public method to set a flag enabling the editors to perform focus in checks. @param enabled flag indicating focus in checks should be performed (boolean) """ self.editorsCheckFocusIn = enabled def editorsCheckFocusInEnabled(self): """ Public method returning the flag indicating editors should perform focus in checks. @return flag indicating focus in checks should be performed (boolean) """ return self.editorsCheckFocusIn def __findFileName(self): """ Private method to handle the search for file action. """ self.ui.findFileNameDialog.show() self.ui.findFileNameDialog.raise_() self.ui.findFileNameDialog.activateWindow() def appFocusChanged(self, old, now): """ Public method to handle the global change of focus. @param old reference to the widget loosing focus (QWidget) @param now reference to the widget gaining focus (QWidget) """ if not isinstance(now, (Editor, Shell)): self.editActGrp.setEnabled(False) self.copyActGrp.setEnabled(False) self.viewActGrp.setEnabled(False) ################################################################## ## Below are the action methods for the edit menu ################################################################## def __editUndo(self): """ Private method to handle the undo action. """ self.activeWindow().undo() def __editRedo(self): """ Private method to handle the redo action. """ self.activeWindow().redo() def __editRevert(self): """ Private method to handle the revert action. """ self.activeWindow().revertToUnmodified() def __editCut(self): """ Private method to handle the cut action. """ if QApplication.focusWidget() == e4App().getObject("Shell"): e4App().getObject("Shell").cut() else: self.activeWindow().cut() def __editCopy(self): """ Private method to handle the copy action. """ if QApplication.focusWidget() == e4App().getObject("Shell"): e4App().getObject("Shell").copy() else: self.activeWindow().copy() def __editPaste(self): """ Private method to handle the paste action. """ if QApplication.focusWidget() == e4App().getObject("Shell"): e4App().getObject("Shell").paste() else: self.activeWindow().paste() def __editDelete(self): """ Private method to handle the delete action. """ if QApplication.focusWidget() == e4App().getObject("Shell"): e4App().getObject("Shell").clear() else: self.activeWindow().clear() def __editIndent(self): """ Private method to handle the indent action. """ self.activeWindow().indentLineOrSelection() def __editUnindent(self): """ Private method to handle the unindent action. """ self.activeWindow().unindentLineOrSelection() def __editSmartIndent(self): """ Private method to handle the smart indent action """ self.activeWindow().smartIndentLineOrSelection() def __editComment(self): """ Private method to handle the comment action. """ self.activeWindow().commentLineOrSelection() def __editUncomment(self): """ Private method to handle the uncomment action. """ self.activeWindow().uncommentLineOrSelection() def __editStreamComment(self): """ Private method to handle the stream comment action. """ self.activeWindow().streamCommentLineOrSelection() def __editBoxComment(self): """ Private method to handle the box comment action. """ self.activeWindow().boxCommentLineOrSelection() def __editSelectBrace(self): """ Private method to handle the select to brace action. """ self.activeWindow().selectToMatchingBrace() def __editSelectAll(self): """ Private method to handle the select all action. """ self.activeWindow().selectAll(True) def __editDeselectAll(self): """ Private method to handle the select all action. """ self.activeWindow().selectAll(False) def __convertEOL(self): """ Private method to handle the convert line end characters action. """ aw = self.activeWindow() aw.convertEols(aw.eolMode()) def __shortenEmptyLines(self): """ Private method to handle the shorten empty lines action. """ self.activeWindow().shortenEmptyLines() def __editAutoComplete(self): """ Private method to handle the autocomplete action. """ self.activeWindow().autoComplete() def __editAutoCompleteFromDoc(self): """ Private method to handle the autocomplete from document action. """ self.activeWindow().autoCompleteFromDocument() def __editAutoCompleteFromAPIs(self): """ Private method to handle the autocomplete from APIs action. """ self.activeWindow().autoCompleteFromAPIs() def __editAutoCompleteFromAll(self): """ Private method to handle the autocomplete from All action. """ self.activeWindow().autoCompleteFromAll() def __editorAutoCompletionAPIsAvailable(self, available): """ Private method to handle the availability of API autocompletion signal. """ self.autoCompleteFromAPIsAct.setEnabled(available) def __editShowCallTips(self): """ Private method to handle the calltips action. """ self.activeWindow().callTip() ################################################################## ## Below are the action and utility methods for the search menu ################################################################## def textForFind(self, getCurrentWord = True): """ Public method to determine the selection or the current word for the next find operation. @param getCurrentWord flag indicating to return the current word, if no selected text was found (boolean) @return selection or current word (QString) """ aw = self.activeWindow() if aw is None: return QString('') return aw.getSearchText(not getCurrentWord) def getSRHistory(self, key): """ Public method to get the search or replace history list. @param key list to return (must be 'search' or 'replace') @return the requested history list (QStringList) """ return self.srHistory[key] def __quickSearch(self): """ Private slot to handle the incremental quick search. """ # first we have to check if quick search is active # and try to activate it if not if self.__quickSearchToolbarVisibility is None: self.__quickSearchToolbarVisibility = self.__quickSearchToolbar.isVisible() if not self.__quickSearchToolbar.isVisible(): self.__quickSearchToolbar.show() if not self.quickFindtextCombo.lineEdit().hasFocus(): aw = self.activeWindow() self.quickFindtextCombo.lastActive = aw if aw: self.quickFindtextCombo.lastCursorPos = aw.getCursorPosition() else: self.quickFindtextCombo.lastCursorPos = None tff = self.textForFind(False) if not tff.isEmpty(): self.quickFindtextCombo.lineEdit().setText(tff) self.quickFindtextCombo.lineEdit().setFocus() self.quickFindtextCombo.lineEdit().selectAll() self.__quickSearchSetEditColors(False) else: self.__quickSearchInEditor(True, False) def __quickSearchFocusIn(self): """ Private method to handle a focus in signal of the quicksearch lineedit. """ self.quickFindtextCombo.lastActive = self.activeWindow() def __quickSearchEnter(self): """ Private slot to handle the incremental quick search return pressed (jump back to text) """ if self.quickFindtextCombo.lastActive: self.quickFindtextCombo.lastActive.setFocus() if self.__quickSearchToolbarVisibility is not None: self.__quickSearchToolbar.setVisible(self.__quickSearchToolbarVisibility) self.__quickSearchToolbarVisibility = None def __quickSearchEscape(self): """ Private slot to handle the incremental quick search escape pressed (jump back to text) """ if self.quickFindtextCombo.lastActive: self.quickFindtextCombo.lastActive.setFocus() aw = self.activeWindow() if aw and self.quickFindtextCombo.lastCursorPos: aw.setCursorPosition(self.quickFindtextCombo.lastCursorPos[0], self.quickFindtextCombo.lastCursorPos[1]) if self.__quickSearchToolbarVisibility is not None: self.__quickSearchToolbar.setVisible(self.__quickSearchToolbarVisibility) self.__quickSearchToolbarVisibility = None def __quickSearchText(self): """ Private slot to handle the textChanged signal of the quicksearch edit. """ self.__quickSearchInEditor(False, False) def __quickSearchPrev(self): """ Private slot to handle the quickFindPrev toolbutton action. """ # first we have to check if quick search is active # and try to activate it if not if self.__quickSearchToolbarVisibility is None: self.__quickSearchToolbarVisibility = self.__quickSearchToolbar.isVisible() if not self.__quickSearchToolbar.isVisible(): self.__quickSearchToolbar.show() if not self.quickFindtextCombo.lineEdit().hasFocus(): aw = self.activeWindow() self.quickFindtextCombo.lastActive = aw if aw: self.quickFindtextCombo.lastCursorPos = aw.getCursorPosition() else: self.quickFindtextCombo.lastCursorPos = None tff = self.textForFind(False) if not tff.isEmpty(): self.quickFindtextCombo.lineEdit().setText(tff) self.quickFindtextCombo.lineEdit().setFocus() self.quickFindtextCombo.lineEdit().selectAll() self.__quickSearchSetEditColors(False) else: self.__quickSearchInEditor(True, True) def __quickSearchMarkOccurrences(self, txt): """ Private method to mark all occurrences of the search text. @param txt text to search for (QString) """ aw = self.activeWindow() lineFrom = 0 indexFrom = 0 lineTo = -1 indexTo = -1 aw.clearSearchIndicators() ok = aw.findFirstTarget(txt, False, False, False, lineFrom, indexFrom, lineTo, indexTo) while ok: tgtPos, tgtLen = aw.getFoundTarget() aw.setSearchIndicator(tgtPos, tgtLen) ok = aw.findNextTarget() def __quickSearchInEditor(self, again, back): """ Private slot to perform a quick search. @param again flag indicating a repeat of the last search (boolean) @param back flag indicating a backwards search operation (boolean) @author Maciek Fijalkowski, 2005-07-23 """ aw = self.activeWindow() if not aw: return text = self.quickFindtextCombo.lineEdit().text() if text.isEmpty() and again: text = self.quickFindtextCombo.lastSearchText if text.isEmpty(): if Preferences.getEditor("QuickSearchMarkersEnabled"): aw.clearSearchIndicators() return else: self.quickFindtextCombo.lastSearchText = text if Preferences.getEditor("QuickSearchMarkersEnabled"): self.__quickSearchMarkOccurrences(text) lineFrom, indexFrom, lineTo, indexTo = aw.getSelection() cline, cindex = aw.getCursorPosition () if again: if back: if indexFrom != 0: index = indexFrom - 1 line = lineFrom elif lineFrom == 0: return else: line = lineFrom - 1 index = aw.lineLength(line) ok = aw.findFirst(text, False, False, False, True, False, line, index) else: ok = aw.findFirst(text, False, False, False, True, not back, cline, cindex) else: ok = aw.findFirst(text, False, False, False, True, not back, lineFrom, indexFrom) self.__quickSearchSetEditColors(not ok) def __quickSearchSetEditColors(self, error): """ Private method to set the quick search edit colors. @param error flag indicating an error (boolean) """ if error: palette = self.quickFindtextCombo.lineEdit().palette() palette.setColor(QPalette.Base, QColor("red")) palette.setColor(QPalette.Text, QColor("white")) self.quickFindtextCombo.lineEdit().setPalette(palette) else: palette = self.quickFindtextCombo.lineEdit().palette() palette.setColor(QPalette.Base, self.quickFindtextCombo.palette().color(QPalette.Base)) palette.setColor(QPalette.Text, self.quickFindtextCombo.palette().color(QPalette.Text)) self.quickFindtextCombo.lineEdit().setPalette(palette) def __quickSearchExtend(self): """ Private method to handle the quicksearch extend action. """ aw = self.activeWindow() if aw is None: return txt = self.quickFindtextCombo.lineEdit().text() if txt.isEmpty(): return line, index = aw.getCursorPosition() text = aw.text(line) re = QRegExp('[^\w_]') end = text.indexOf(re, index) if end > index: ext = text.mid(index, end - index) txt.append(ext) self.quickFindtextCombo.lineEdit().setText(txt) def __search(self): """ Private method to handle the search action. """ self.replaceDlg.close() self.searchDlg.show(self.textForFind()) def __replace(self): """ Private method to handle the replace action. """ self.searchDlg.close() self.replaceDlg.show(self.textForFind()) def __searchClearMarkers(self): """ Private method to clear the search markers of the active window. """ self.activeWindow().clearSearchIndicators() def __goto(self): """ Private method to handle the goto action. """ aw = self.activeWindow() lines = aw.lines() curLine = aw.getCursorPosition()[0] + 1 dlg = GotoDialog(lines, curLine, self.ui, None, True) if dlg.exec_() == QDialog.Accepted: aw.gotoLine(dlg.getLinenumber()) def __gotoBrace(self): """ Private method to handle the goto brace action. """ self.activeWindow().moveToMatchingBrace() def __searchFiles(self): """ Private method to handle the search in files action. """ self.ui.findFilesDialog.show(self.textForFind()) self.ui.findFilesDialog.raise_() self.ui.findFilesDialog.activateWindow() def __replaceFiles(self): """ Private method to handle the replace in files action. """ self.ui.replaceFilesDialog.show(self.textForFind()) self.ui.replaceFilesDialog.raise_() self.ui.replaceFilesDialog.activateWindow() ################################################################## ## Below are the action methods for the view menu ################################################################## def __zoomIn(self): """ Private method to handle the zoom in action. """ if QApplication.focusWidget() == e4App().getObject("Shell"): e4App().getObject("Shell").zoomIn() else: aw = self.activeWindow() if aw: aw.zoomIn() def __zoomOut(self): """ Private method to handle the zoom out action. """ if QApplication.focusWidget() == e4App().getObject("Shell"): e4App().getObject("Shell").zoomOut() else: aw = self.activeWindow() if aw: aw.zoomOut() def __zoomReset(self): """ Private method to reset the zoom factor. """ if QApplication.focusWidget() == e4App().getObject("Shell"): e4App().getObject("Shell").zoomTo(0) else: aw = self.activeWindow() if aw: aw.zoomTo(0) def __zoom(self): """ Private method to handle the zoom action. """ if QApplication.focusWidget() == e4App().getObject("Shell"): aw = e4App().getObject("Shell") else: aw = self.activeWindow() if aw: dlg = ZoomDialog(aw.getZoom(), self.ui, None, True) if dlg.exec_() == QDialog.Accepted: aw.zoomTo(dlg.getZoomSize()) def __toggleAll(self): """ Private method to handle the toggle all folds action. """ aw = self.activeWindow() if aw: aw.foldAll() def __toggleAllChildren(self): """ Private method to handle the toggle all folds (including children) action. """ aw = self.activeWindow() if aw: aw.foldAll(True) def __toggleCurrent(self): """ Private method to handle the toggle current fold action. """ aw = self.activeWindow() if aw: line, index = aw.getCursorPosition() aw.foldLine(line) def __splitView(self): """ Private method to handle the split view action. """ self.addSplit() def __splitOrientation(self, checked): """ Private method to handle the split orientation action. """ if checked: self.setSplitOrientation(Qt.Horizontal) self.splitViewAct.setIcon(\ UI.PixmapCache.getIcon("splitHorizontal.png")) self.splitRemoveAct.setIcon(\ UI.PixmapCache.getIcon("remsplitHorizontal.png")) else: self.setSplitOrientation(Qt.Vertical) self.splitViewAct.setIcon(\ UI.PixmapCache.getIcon("splitVertical.png")) self.splitRemoveAct.setIcon(\ UI.PixmapCache.getIcon("remsplitVertical.png")) ################################################################## ## Below are the action methods for the macro menu ################################################################## def __macroStartRecording(self): """ Private method to handle the start macro recording action. """ self.activeWindow().macroRecordingStart() def __macroStopRecording(self): """ Private method to handle the stop macro recording action. """ self.activeWindow().macroRecordingStop() def __macroRun(self): """ Private method to handle the run macro action. """ self.activeWindow().macroRun() def __macroDelete(self): """ Private method to handle the delete macro action. """ self.activeWindow().macroDelete() def __macroLoad(self): """ Private method to handle the load macro action. """ self.activeWindow().macroLoad() def __macroSave(self): """ Private method to handle the save macro action. """ self.activeWindow().macroSave() ################################################################## ## Below are the action methods for the bookmarks menu ################################################################## def __toggleBookmark(self): """ Private method to handle the toggle bookmark action. """ self.activeWindow().menuToggleBookmark() def __nextBookmark(self): """ Private method to handle the next bookmark action. """ self.activeWindow().nextBookmark() def __previousBookmark(self): """ Private method to handle the previous bookmark action. """ self.activeWindow().previousBookmark() def __clearAllBookmarks(self): """ Private method to handle the clear all bookmarks action. """ for editor in self.editors: editor.clearBookmarks() self.bookmarkNextAct.setEnabled(False) self.bookmarkPreviousAct.setEnabled(False) self.bookmarkClearAct.setEnabled(False) def __showBookmarkMenu(self): """ Private method to set up the bookmark menu. """ bookmarksFound = 0 filenames = self.getOpenFilenames() for filename in filenames: editor = self.getOpenEditor(filename) bookmarksFound = len(editor.getBookmarks()) > 0 if bookmarksFound: self.menuBookmarksAct.setEnabled(True) return self.menuBookmarksAct.setEnabled(False) def __showBookmarksMenu(self): """ Private method to handle the show bookmarks menu signal. """ self.bookmarksMenu.clear() filenames = self.getOpenFilenames() filenames.sort() for filename in filenames: editor = self.getOpenEditor(filename) for bookmark in editor.getBookmarks(): bmSuffix = " : %d" % bookmark act = self.bookmarksMenu.addAction(\ "%s%s" % (\ Utilities.compactPath(\ filename, self.ui.maxMenuFilePathLen - len(bmSuffix)), bmSuffix)) act.setData(QVariant([QVariant(filename), QVariant(bookmark)])) def __bookmarkSelected(self, act): """ Private method to handle the bookmark selected signal. @param act reference to the action that triggered (QAction) """ try: qvList = act.data().toPyObject() filename = unicode(qvList[0]) line = qvList[1] except AttributeError: qvList = act.data().toList() filename = unicode(qvList[0].toString()) line = qvList[1].toInt()[0] self.openSourceFile(filename, line) def __bookmarkToggled(self, editor): """ Private slot to handle the bookmarkToggled signal. It checks some bookmark actions and reemits the signal. @param editor editor that sent the signal """ if editor.hasBookmarks(): self.bookmarkNextAct.setEnabled(True) self.bookmarkPreviousAct.setEnabled(True) self.bookmarkClearAct.setEnabled(True) else: self.bookmarkNextAct.setEnabled(False) self.bookmarkPreviousAct.setEnabled(False) self.bookmarkClearAct.setEnabled(False) self.emit(SIGNAL('bookmarkToggled'), editor) def __gotoSyntaxError(self): """ Private method to handle the goto syntax error action. """ self.activeWindow().gotoSyntaxError() def __clearAllSyntaxErrors(self): """ Private method to handle the clear all syntax errors action. """ for editor in self.editors: editor.clearSyntaxError() def _syntaxErrorToggled(self, editor): """ Protected slot to handle the syntaxerrorToggled signal. It checks some syntax error actions and reemits the signal. @param editor editor that sent the signal """ if editor.hasSyntaxErrors(): self.syntaxErrorGotoAct.setEnabled(True) self.syntaxErrorClearAct.setEnabled(True) else: self.syntaxErrorGotoAct.setEnabled(False) self.syntaxErrorClearAct.setEnabled(False) self.emit(SIGNAL('syntaxerrorToggled'), editor) def __nextUncovered(self): """ Private method to handle the next uncovered action. """ self.activeWindow().nextUncovered() def __previousUncovered(self): """ Private method to handle the previous uncovered action. """ self.activeWindow().previousUncovered() def __coverageMarkersShown(self, shown): """ Private slot to handle the coverageMarkersShown signal. @param shown flag indicating whether the markers were shown or cleared """ if shown: self.notcoveredNextAct.setEnabled(True) self.notcoveredPreviousAct.setEnabled(True) else: self.notcoveredNextAct.setEnabled(False) self.notcoveredPreviousAct.setEnabled(False) def __taskMarkersUpdated(self, editor): """ Protected slot to handle the syntaxerrorToggled signal. It checks some syntax error actions and reemits the signal. @param editor editor that sent the signal """ if editor.hasTaskMarkers(): self.taskNextAct.setEnabled(True) self.taskPreviousAct.setEnabled(True) else: self.taskNextAct.setEnabled(False) self.taskPreviousAct.setEnabled(False) def __nextTask(self): """ Private method to handle the next task action. """ self.activeWindow().nextTask() def __previousTask(self): """ Private method to handle the previous task action. """ self.activeWindow().previousTask() ################################################################## ## Below are the action methods for the spell checking functions ################################################################## def __setAutoSpellChecking(self): """ Private slot to set the automatic spell checking of all editors. """ enabled = self.autoSpellCheckAct.isChecked() Preferences.setEditor("AutoSpellCheckingEnabled", int(enabled)) for editor in self.editors: editor.setAutoSpellChecking() def __spellCheck(self): """ Private slot to perform a spell check of the current editor. """ aw = self.activeWindow() if aw: aw.checkSpelling() ################################################################## ## Below are general utility methods ################################################################## def handleResetUI(self): """ Public slot to handle the resetUI signal. """ editor = self.activeWindow() if editor is None: self.__setSbFile() else: line, pos = editor.getCursorPosition() enc = editor.getEncoding() lang = editor.getLanguage() eol = editor.getEolIndicator() self.__setSbFile(editor.getFileName(), line + 1, pos, enc, lang, eol) def closeViewManager(self): """ Public method to shutdown the viewmanager. If it cannot close all editor windows, it aborts the shutdown process. @return flag indicating success (boolean) """ self.disconnect(e4App(), SIGNAL("focusChanged(QWidget*, QWidget*)"), self.appFocusChanged) self.closeAllWindows() # save the list of recently opened projects self.__saveRecent() # save the list of recently opened projects Preferences.Prefs.settings.setValue('Bookmarked/Sources', QVariant(self.bookmarked)) if len(self.editors): res = False else: res = True if not res: self.connect(e4App(), SIGNAL("focusChanged(QWidget*, QWidget*)"), elf.appFocusChanged) return res def __lastEditorClosed(self): """ Private slot to handle the lastEditorClosed signal. """ self.closeActGrp.setEnabled(False) self.saveActGrp.setEnabled(False) self.exportersMenuAct.setEnabled(False) self.printAct.setEnabled(False) if self.printPreviewAct: self.printPreviewAct.setEnabled(False) self.editActGrp.setEnabled(False) self.searchActGrp.setEnabled(False) self.quickFindtextCombo.setEnabled(False) self.viewActGrp.setEnabled(False) self.viewFoldActGrp.setEnabled(False) self.unhighlightAct.setEnabled(False) self.splitViewAct.setEnabled(False) self.splitOrientationAct.setEnabled(False) self.macroActGrp.setEnabled(False) self.bookmarkActGrp.setEnabled(False) self.__enableSpellingActions() self.__setSbFile() # remove all split views, if this is supported if self.canSplit(): while self.removeSplit(): pass # stop the autosave timer if self.autosaveTimer.isActive(): self.autosaveTimer.stop() # close the search and replace forms self.searchDlg.close() self.replaceDlg.close() def __editorOpened(self): """ Private slot to handle the editorOpened signal. """ self.closeActGrp.setEnabled(True) self.saveActGrp.setEnabled(True) self.exportersMenuAct.setEnabled(True) self.printAct.setEnabled(True) if self.printPreviewAct: self.printPreviewAct.setEnabled(True) self.editActGrp.setEnabled(True) self.searchActGrp.setEnabled(True) self.quickFindtextCombo.setEnabled(True) self.viewActGrp.setEnabled(True) self.viewFoldActGrp.setEnabled(True) self.unhighlightAct.setEnabled(True) if self.canSplit(): self.splitViewAct.setEnabled(True) self.splitOrientationAct.setEnabled(True) self.macroActGrp.setEnabled(True) self.bookmarkActGrp.setEnabled(True) self.__enableSpellingActions() # activate the autosave timer if not self.autosaveTimer.isActive() and \ self.autosaveInterval > 0: self.autosaveTimer.start(self.autosaveInterval * 60000) def __autosave(self): """ Private slot to save the contents of all editors automatically. Only named editors will be saved by the autosave timer. """ for editor in self.editors: if editor.shouldAutosave(): ok, newName = editor.saveFile() if ok: self.setEditorName(editor, newName) # restart autosave timer if self.autosaveInterval > 0: self.autosaveTimer.start(self.autosaveInterval * 60000) def _checkActions(self, editor, setSb = True): """ Protected slot to check some actions for their enable/disable status and set the statusbar info. @param editor editor window @param setSb flag indicating an update of the status bar is wanted (boolean) """ if editor is not None: self.saveAct.setEnabled(editor.isModified()) self.revertAct.setEnabled(editor.isModified()) self.undoAct.setEnabled(editor.isUndoAvailable()) self.redoAct.setEnabled(editor.isRedoAvailable()) lex = editor.getLexer() if lex is not None: self.commentAct.setEnabled(lex.canBlockComment()) self.uncommentAct.setEnabled(lex.canBlockComment()) self.streamCommentAct.setEnabled(lex.canStreamComment()) self.boxCommentAct.setEnabled(lex.canBoxComment()) else: self.commentAct.setEnabled(False) self.uncommentAct.setEnabled(False) self.streamCommentAct.setEnabled(False) self.boxCommentAct.setEnabled(False) if editor.hasBookmarks(): self.bookmarkNextAct.setEnabled(True) self.bookmarkPreviousAct.setEnabled(True) self.bookmarkClearAct.setEnabled(True) else: self.bookmarkNextAct.setEnabled(False) self.bookmarkPreviousAct.setEnabled(False) self.bookmarkClearAct.setEnabled(False) if editor.hasSyntaxErrors(): self.syntaxErrorGotoAct.setEnabled(True) self.syntaxErrorClearAct.setEnabled(True) else: self.syntaxErrorGotoAct.setEnabled(False) self.syntaxErrorClearAct.setEnabled(False) if editor.hasCoverageMarkers(): self.notcoveredNextAct.setEnabled(True) self.notcoveredPreviousAct.setEnabled(True) else: self.notcoveredNextAct.setEnabled(False) self.notcoveredPreviousAct.setEnabled(False) if editor.hasTaskMarkers(): self.taskNextAct.setEnabled(True) self.taskPreviousAct.setEnabled(True) else: self.taskNextAct.setEnabled(False) self.taskPreviousAct.setEnabled(False) if editor.canAutoCompleteFromAPIs(): self.autoCompleteFromAPIsAct.setEnabled(True) else: self.autoCompleteFromAPIsAct.setEnabled(False) if setSb: line, pos = editor.getCursorPosition() enc = editor.getEncoding() lang = editor.getLanguage() eol = editor.getEolIndicator() self.__setSbFile(editor.getFileName(), line + 1, pos, enc, lang, eol) self.emit(SIGNAL('checkActions'), editor) def preferencesChanged(self): """ Public slot to handle the preferencesChanged signal. This method performs the following actions
  • reread the colours for the syntax highlighting
  • reloads the already created API objetcs
  • starts or stops the autosave timer
  • Note: changes in viewmanager type are activated on an application restart.
""" # reload the APIs self.apisManager.reloadAPIs() # reload editor settings for editor in self.editors: editor.readSettings() # reload the autosave timer setting self.autosaveInterval = Preferences.getEditor("AutosaveInterval") if len(self.editors): if self.autosaveTimer.isActive() and \ self.autosaveInterval == 0: self.autosaveTimer.stop() elif not self.autosaveTimer.isActive() and \ self.autosaveInterval > 0: self.autosaveTimer.start(self.autosaveInterval * 60000) self.__enableSpellingActions() def __editorSaved(self, fn): """ Private slot to handle the editorSaved signal. It simply reemits the signal. @param fn filename of the saved editor """ self.emit(SIGNAL('editorSaved'), fn) def __cursorChanged(self, fn, line, pos): """ Private slot to handle the cursorChanged signal. It emits the signal cursorChanged with parameter editor. @param fn filename (string) @param line line number of the cursor (int) @param pos position in line of the cursor (int) """ editor = self.getOpenEditor(fn) if editor is None: editor = self.sender() if editor is not None: enc = editor.getEncoding() lang = editor.getLanguage() eol = editor.getEolIndicator() else: enc = None lang = None eol = None self.__setSbFile(fn, line, pos, enc, lang, eol) self.emit(SIGNAL('cursorChanged'), editor) def __breakpointToggled(self, editor): """ Private slot to handle the breakpointToggled signal. It simply reemits the signal. @param editor editor that sent the signal """ self.emit(SIGNAL('breakpointToggled'), editor) def getActions(self, type): """ Public method to get a list of all actions. @param type string denoting the action set to get. It must be one of "edit", "file", "search", "view", "window", "macro" or "bookmark" @return list of all actions (list of E4Action) """ try: exec 'actionList = self.%sActions[:]' % type except AttributeError: actionList = [] return actionList def __editorCommand(self, cmd): """ Private method to send an editor command to the active window. @param cmd the scintilla command to be sent """ focusWidget = QApplication.focusWidget() if focusWidget == e4App().getObject("Shell"): e4App().getObject("Shell").editorCommand(cmd) elif focusWidget == self.quickFindtextCombo: self.quickFindtextCombo._editor.editorCommand(cmd) else: aw = self.activeWindow() if aw: aw.editorCommand(cmd) def __newLineBelow(self): """ Private method to insert a new line below the current one even if cursor is not at the end of the line. """ focusWidget = QApplication.focusWidget() if focusWidget == e4App().getObject("Shell") or \ focusWidget == self.quickFindtextCombo: return else: aw = self.activeWindow() if aw: aw.newLineBelow() def __editorConfigChanged(self): """ Private method to handle changes of an editors configuration (e.g. language). """ editor = self.sender() fn = editor.getFileName() line, pos = editor.getCursorPosition() enc = editor.getEncoding() lang = editor.getLanguage() eol = editor.getEolIndicator() self.__setSbFile(fn, line + 1, pos, encoding = enc, language = lang, eol = eol) ################################################################## ## Below are protected utility methods ################################################################## def _getOpenStartDir(self): """ Protected method to return the starting directory for a file open dialog. The appropriate starting directory is calculated using the following search order, until a match is found:
1: Directory of currently active editor
2: Directory of currently active Project
3: CWD @return name of directory to start (string) or None """ # if we have an active source, return its path if self.activeWindow() is not None and \ self.activeWindow().getFileName(): return os.path.dirname(self.activeWindow().getFileName()) # check, if there is an active project and return its path elif e4App().getObject("Project").isOpen(): return e4App().getObject("Project").ppath else: return Preferences.getMultiProject("Workspace") or Utilities.getHomeDir() def _getOpenFileFilter(self): """ Protected method to return the active filename filter for a file open dialog. The appropriate filename filter is determined by file extension of the currently active editor. @return name of the filename filter (QString) or None """ if self.activeWindow() is not None and \ self.activeWindow().getFileName(): ext = os.path.splitext(self.activeWindow().getFileName())[1] rx = QRegExp(".*\*\.%s[ )].*" % ext[1:]) filters = QScintilla.Lexers.getOpenFileFiltersList() index = filters.indexOf(rx) if index == -1: return QString(Preferences.getEditor("DefaultOpenFilter")) else: return filters[index] else: return QString(Preferences.getEditor("DefaultOpenFilter")) ################################################################## ## Below are API handling methods ################################################################## def getAPIsManager(self): """ Public method to get a reference to the APIs manager. @return the APIs manager object (eric4.QScintilla.APIsManager) """ return self.apisManager eric4-4.5.18/eric/ViewManager/PaxHeaders.8617/__init__.py0000644000175000001440000000013012261012647021026 xustar000000000000000028 mtime=1388582311.7660741 30 atime=1389081057.416723465 30 ctime=1389081086.307724332 eric4-4.5.18/eric/ViewManager/__init__.py0000644000175000001440000000327512261012647020571 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2005 - 2014 Detlev Offenbach # """ Package implementing the viewmanager of the eric4 IDE. The viewmanager is responsible for the layout of the editor windows. This is the central part of the IDE. In additon to this, the viewmanager provides all editor related actions, menus and toolbars. View managers are provided as plugins and loaded via the factory function. If the requested view manager type is not available, tabview will be used by default. """ import Preferences ###################################################################### ## Below is the factory function to instantiate the appropriate ## viewmanager depending on the configuration settings ###################################################################### def factory(parent, ui, dbs, pluginManager): """ Modul factory function to generate the right viewmanager type. The viewmanager is instantiated depending on the data set in the current preferences. @param parent parent widget (QWidget) @param ui reference to the main UI object @param dbs reference to the debug server object @param pluginManager reference to the plugin manager object @return the instantiated viewmanager """ viewManagerStr = Preferences.getViewManager() vm = pluginManager.getPluginObject("viewmanager", viewManagerStr) if vm is None: # load tabview view manager as default vm = pluginManager.getPluginObject("viewmanager", "tabview") if vm is None: raise RuntimeError("Could not create a viemanager object.") Preferences.setViewManager("tabview") vm.setReferences(ui, dbs) return vm eric4-4.5.18/eric/ViewManager/PaxHeaders.8617/BookmarkedFilesDialog.ui0000644000175000001440000000007411072435335023446 xustar000000000000000030 atime=1389081057.416723465 30 ctime=1389081086.307724332 eric4-4.5.18/eric/ViewManager/BookmarkedFilesDialog.ui0000644000175000001440000001524511072435335023202 0ustar00detlevusers00000000000000 BookmarkedFilesDialog 0 0 475 391 Configure Bookmarked Files Menu true true false Delete the selected entry <b>Delete</b> <p>Delete the selected entry.</p> &Delete Alt+D Qt::Vertical QSizePolicy::Expanding 87 130 false Move up <b>Move Up</b> <p>Move the selected entry up.</p> &Up Alt+U Select the file via a file selection dialog <b>File</b> <p>Select the file to be bookmarked via a file selection dialog.</p> ... false Move down <b>Move Down</b> <p>Move the selected entry down.</p> &Down Alt+D false Add a new bookmarked file <b>Add</b> <p>Add a new bookmarked file with the value entered below.</p> &Add Alt+A &File: fileEdit false Change the value of the selected entry <b>Change</b> <p>Change the value of the selected entry.</p> C&hange Alt+H Enter the filename of the file <b>File</b> <p>Enter the filename of the bookmarked file.</p> Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok qPixmapFromMimeSource filesList addButton changeButton deleteButton upButton downButton fileEdit fileButton buttonBox accepted() BookmarkedFilesDialog accept() 25 373 25 388 buttonBox rejected() BookmarkedFilesDialog reject() 105 370 105 389 eric4-4.5.18/eric/PaxHeaders.8617/Templates0000644000175000001440000000013212262730776016406 xustar000000000000000030 mtime=1389081086.300724332 30 atime=1389081086.305724332 30 ctime=1389081086.315724332 eric4-4.5.18/eric/Templates/0000755000175000001440000000000012262730776016215 5ustar00detlevusers00000000000000eric4-4.5.18/eric/Templates/PaxHeaders.8617/TemplateSingleVariableDialog.ui0000644000175000001440000000007311072435344024520 xustar000000000000000029 atime=1389081057.46272347 30 ctime=1389081086.307724332 eric4-4.5.18/eric/Templates/TemplateSingleVariableDialog.ui0000644000175000001440000000447511072435344024260 0ustar00detlevusers00000000000000 TemplateSingleVariableDialog 0 0 403 218 Enter Template Variable true Enter the value for the variable. QTextEdit::NoWrap false Variable: Qt::AlignTop Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok qPixmapFromMimeSource variableEdit buttonBox accepted() TemplateSingleVariableDialog accept() 40 195 40 217 buttonBox rejected() TemplateSingleVariableDialog reject() 96 197 96 217 eric4-4.5.18/eric/Templates/PaxHeaders.8617/TemplateSingleVariableDialog.py0000644000175000001440000000013212261012647024525 xustar000000000000000030 mtime=1388582311.773074189 30 atime=1389081057.483723474 30 ctime=1389081086.307724332 eric4-4.5.18/eric/Templates/TemplateSingleVariableDialog.py0000644000175000001440000000200312261012647024252 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2005 - 2014 Detlev Offenbach # """ Module implementing a dialog for entering a single template variable. """ from PyQt4.QtGui import QDialog from Ui_TemplateSingleVariableDialog import Ui_TemplateSingleVariableDialog class TemplateSingleVariableDialog(QDialog, Ui_TemplateSingleVariableDialog): """ Class implementing a dialog for entering a single template variable. """ def __init__(self, variable, parent = None): """ Constructor @param variable template variable name (string) @param parent parent widget of this dialog (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.variableLabel.setText(variable) def getVariable(self): """ Public method to get the value for the variable. @return value for the template variable (string) """ return unicode(self.variableEdit.toPlainText()) eric4-4.5.18/eric/Templates/PaxHeaders.8617/__init__.py0000644000175000001440000000013212261012647020561 xustar000000000000000030 mtime=1388582311.776074227 30 atime=1389081057.483723474 30 ctime=1389081086.307724332 eric4-4.5.18/eric/Templates/__init__.py0000644000175000001440000000024212261012647020311 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Package containing modules for the templating system. """ eric4-4.5.18/eric/Templates/PaxHeaders.8617/TemplatePropertiesDialog.py0000644000175000001440000000013212261012647023772 xustar000000000000000030 mtime=1388582311.785074342 30 atime=1389081057.483723474 30 ctime=1389081086.307724332 eric4-4.5.18/eric/Templates/TemplatePropertiesDialog.py0000644000175000001440000002001512261012647023522 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2005 - 2014 Detlev Offenbach # """ Module implementing the templates properties dialog. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQMessageBox import QScintilla.Lexers from Ui_TemplatePropertiesDialog import Ui_TemplatePropertiesDialog class TemplatePropertiesDialog(QDialog, Ui_TemplatePropertiesDialog): """ Class implementing the templates properties dialog. """ def __init__(self, parent, groupMode = False, itm = None): """ Constructor @param parent the parent widget (QWidget) @param groupMode flag indicating group mode (boolean) @param itm item (TemplateEntry or TemplateGroup) to read the data from """ QDialog.__init__(self, parent) self.setupUi(self) if not groupMode: self.nameEdit.setWhatsThis(self.trUtf8( """Template name

Enter the name of the template.""" """ Templates may be autocompleted upon this name.""" """ In order to support autocompletion. the template name""" """ must only consist of letters (a-z and A-Z),""" """ digits (0-9) and underscores (_).

""" )) self.__nameValidator = QRegExpValidator(QRegExp("[a-zA-Z0-9_]+"), self.nameEdit) self.nameEdit.setValidator(self.__nameValidator) self.languages = [("All", self.trUtf8("All"))] supportedLanguages = QScintilla.Lexers.getSupportedLanguages() languages = supportedLanguages.keys() languages.sort() for language in languages: self.languages.append((language, supportedLanguages[language][0])) self.groupMode = groupMode if groupMode: langList = QStringList() for lang, langDisp in self.languages: langList.append(langDisp) self.groupLabel.setText(self.trUtf8("Language:")) self.groupCombo.addItems(langList) self.templateLabel.setEnabled(False) self.templateEdit.setEnabled(False) self.templateEdit.setPlainText(self.trUtf8("GROUP")) self.helpButton.setEnabled(False) self.descriptionLabel.hide() self.descriptionEdit.hide() else: groups = QStringList() for group in parent.getGroupNames(): groups.append(group) self.groupCombo.addItems(groups) if itm is not None: self.nameEdit.setText(itm.getName()) if groupMode: lang = itm.getLanguage() for l, d in self.languages: if l == lang: self.setSelectedGroup(d) break else: self.setSelectedGroup(itm.getGroupName()) self.templateEdit.setPlainText(itm.getTemplateText()) self.descriptionEdit.setText(itm.getDescription()) self.nameEdit.selectAll() def keyPressEvent(self, ev): """ Re-implemented to handle the user pressing the escape key. @param ev key event (QKeyEvent) """ if ev.key() == Qt.Key_Escape: res = KQMessageBox.question(self, self.trUtf8("Close dialog"), self.trUtf8("""Do you really want to close the dialog?"""), QMessageBox.StandardButtons(\ QMessageBox.No | \ QMessageBox.Yes), QMessageBox.No) if res == QMessageBox.Yes: self.reject() @pyqtSignature("") def on_helpButton_clicked(self): """ Public slot to show some help. """ KQMessageBox.information(self, self.trUtf8("Template Help"), self.trUtf8(\ """

To use variables in a template, you just have to enclose""" """ the variablename with $-characters. When you use the template,""" """ you will then be asked for a value for this variable.

""" """

Example template: This is a $VAR$

""" """

When you use this template you will be prompted for a value""" """ for the variable $VAR$. Any occurrences of $VAR$ will then be""" """ replaced with whatever you've entered.

""" """

If you need a single $-character in a template, which is not""" """ used to enclose a variable, type $$(two dollar characters)""" """ instead. They will automatically be replaced with a single""" """ $-character when you use the template.

""" """

If you want a variables contents to be treated specially,""" """ the variablename must be followed by a ':' and one formatting""" """ specifier (e.g. $VAR:ml$). The supported specifiers are:""" """""" """""" """""" """
mlSpecifies a multiline formatting.""" """ The first line of the variable contents is prefixed with the string""" """ occuring before the variable on the same line of the template.""" """ All other lines are prefixed by the same amount of whitespace""" """ as the line containing the variable.""" """
rlSpecifies a repeated line formatting.""" """ Each line of the variable contents is prefixed with the string""" """ occuring before the variable on the same line of the template.""" """

""" """

The following predefined variables may be used in a template:""" """""" """""" """""" """""" """""" """""" """""" """""" """""" """""" """""" """""" """""" """""" """""" """""" """""" """
datetoday's date in ISO format (YYYY-MM-DD)
yearthe current year
project_namethe name of the project (if any)
path_namefull path of the current file
dir_namefull path of the parent directory
file_namethe current file name (without directory)
base_namelike file_name, but without extension
extthe extension of the current file

""" """

If you want to change the default delimiter to anything""" """ different, please use the configuration dialog to do so.

""")) def setSelectedGroup(self, name): """ Public method to select a group. @param name name of the group to be selected (string or QString) """ index = self.groupCombo.findText(name) self.groupCombo.setCurrentIndex(index) def getData(self): """ Public method to get the data entered into the dialog. @return a tuple of two strings (name, language), if the dialog is in group mode, and a tuple of four strings (name, description,group name, template) otherwise. """ if self.groupMode: return (unicode(self.nameEdit.text()), self.languages[self.groupCombo.currentIndex()][0] ) else: return (unicode(self.nameEdit.text()), unicode(self.descriptionEdit.text()), unicode(self.groupCombo.currentText()), unicode(self.templateEdit.toPlainText()) ) eric4-4.5.18/eric/Templates/PaxHeaders.8617/TemplatePropertiesDialog.ui0000644000175000001440000000007411114310101023742 xustar000000000000000030 atime=1389081057.483723474 30 ctime=1389081086.307724332 eric4-4.5.18/eric/Templates/TemplatePropertiesDialog.ui0000644000175000001440000001166711114310101023502 0ustar00detlevusers00000000000000 TemplatePropertiesDialog 0 0 448 323 Template Properties true Name: Enter the name of the template/group. Templates are autocompleted upon this name. Description: Enter a description for the template Group: Template: Qt::AlignTop Enter the text of the template <b>Template Text</b> <p>Enter the template text in this area. Every occurrence of $VAR$ will be replaced by the associated text when the template is applied. Predefined variables may be used in the template. The separator character might be changed via the preferences dialog.</p> <p>Press the help button for more information.</p> QTextEdit::NoWrap false &Help Alt+H Qt::Vertical QSizePolicy::Expanding 84 98 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok qPixmapFromMimeSource nameEdit descriptionEdit groupCombo templateEdit helpButton buttonBox buttonBox rejected() TemplatePropertiesDialog reject() 80 307 80 319 buttonBox accepted() TemplatePropertiesDialog accept() 45 300 41 324 eric4-4.5.18/eric/Templates/PaxHeaders.8617/TemplateMultipleVariablesDialog.py0000644000175000001440000000013112261012647025261 xustar000000000000000029 mtime=1388582311.78807438 30 atime=1389081057.484723474 30 ctime=1389081086.307724332 eric4-4.5.18/eric/Templates/TemplateMultipleVariablesDialog.py0000644000175000001440000001037312261012647025020 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2005 - 2014 Detlev Offenbach # """ Module implementing a dialog for entering multiple template variables. """ from PyQt4.QtCore import * from PyQt4.QtGui import * class TemplateMultipleVariablesDialog(QDialog): """ Class implementing a dialog for entering multiple template variables. """ def __init__(self, variables, parent = None): """ Constructor @param variables list of template variable names (list of strings) @param parent parent widget of this dialog (QWidget) """ QDialog.__init__(self, parent) self.TemplateMultipleVariablesDialogLayout = QVBoxLayout(self) self.TemplateMultipleVariablesDialogLayout.setMargin(6) self.TemplateMultipleVariablesDialogLayout.setSpacing(6) self.TemplateMultipleVariablesDialogLayout.setObjectName(\ "TemplateMultipleVariablesDialogLayout") self.setLayout(self.TemplateMultipleVariablesDialogLayout) # generate the scrollarea self.variablesView = QScrollArea(self) self.variablesView.setObjectName("variablesView") self.TemplateMultipleVariablesDialogLayout.addWidget(self.variablesView) self.variablesView.setWidgetResizable(True) self.variablesView.setFrameStyle(QFrame.NoFrame) self.top = QWidget(self) self.variablesView.setWidget(self.top) self.grid = QGridLayout(self.top) self.grid.setMargin(0) self.grid.setSpacing(6) self.top.setLayout(self.grid) # populate the scrollarea with labels and text edits self.variablesEntries = {} row = 0 for var in variables: l = QLabel("%s:" % var, self.top) self.grid.addWidget(l, row, 0, Qt.Alignment(Qt.AlignTop)) if var.find(":") >= 0: formatStr = var[1:-1].split(":")[1] if formatStr in ["ml", "rl"]: t = QTextEdit(self.top) t.setTabChangesFocus(True) else: t = QLineEdit(self.top) else: t = QLineEdit(self.top) self.grid.addWidget(t, row, 1) self.variablesEntries[var] = t row += 1 # add a spacer to make the entries aligned at the top spacer = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) self.grid.addItem(spacer, row, 1) self.variablesEntries[variables[0]].setFocus() self.top.adjustSize() # generate the buttons layout1 = QHBoxLayout() layout1.setMargin(0) layout1.setSpacing(6) layout1.setObjectName("layout1") spacer1 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) layout1.addItem(spacer1) self.okButton = QPushButton(self) self.okButton.setObjectName("okButton") self.okButton.setDefault(True) layout1.addWidget(self.okButton) self.cancelButton = QPushButton(self) self.cancelButton.setObjectName("cancelButton") layout1.addWidget(self.cancelButton) spacer2 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) layout1.addItem(spacer2) self.TemplateMultipleVariablesDialogLayout.addLayout(layout1) # set the texts of the standard widgets self.setWindowTitle(self.trUtf8("Enter Template Variables")) self.okButton.setText(self.trUtf8("&OK")) self.cancelButton.setText(self.trUtf8("&Cancel")) # polish up the dialog self.resize(QSize(400, 480).expandedTo(self.minimumSizeHint())) self.connect(self.okButton, SIGNAL("clicked()"), self.accept) self.connect(self.cancelButton, SIGNAL("clicked()"), self.reject) def getVariables(self): """ Public method to get the values for all variables. @return dictionary with the variable as a key and its value (string) """ values = {} for var, textEdit in self.variablesEntries.items(): try: values[var] = unicode(textEdit.text()) except AttributeError: values[var] = unicode(textEdit.toPlainText()) return values eric4-4.5.18/eric/Templates/PaxHeaders.8617/TemplateViewer.py0000644000175000001440000000013212261012647021757 xustar000000000000000030 mtime=1388582311.791074418 30 atime=1389081057.484723474 30 ctime=1389081086.307724332 eric4-4.5.18/eric/Templates/TemplateViewer.py0000644000175000001440000010262312261012647021515 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2005 - 2014 Detlev Offenbach # """ Module implementing a template viewer and associated classes. """ import datetime import os import sys import re import cStringIO from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt.KQApplication import e4App from TemplatePropertiesDialog import TemplatePropertiesDialog from TemplateMultipleVariablesDialog import TemplateMultipleVariablesDialog from TemplateSingleVariableDialog import TemplateSingleVariableDialog import Preferences from E4XML.XMLUtilities import make_parser from E4XML.XMLErrorHandler import XMLErrorHandler, XMLFatalParseError from E4XML.XMLEntityResolver import XMLEntityResolver from E4XML.TemplatesHandler import TemplatesHandler from E4XML.TemplatesWriter import TemplatesWriter import UI.PixmapCache import Utilities from KdeQt import KQMessageBox, KQFileDialog from KdeQt.KQApplication import e4App class TemplateGroup(QTreeWidgetItem): """ Class implementing a template group. """ def __init__(self, parent, name, language = "All"): """ Constructor @param parent parent widget of the template group (QWidget) @param name name of the group (string or QString) @param language programming language for the group (string or QString) """ self.name = unicode(name) self.language = unicode(language) self.entries = {} QTreeWidgetItem.__init__(self, parent, QStringList(name)) if Preferences.getTemplates("ShowTooltip"): self.setToolTip(0, language) def setName(self, name): """ Public method to update the name of the group. @param name name of the group (string or QString) """ self.name = unicode(name) self.setText(0, name) def getName(self): """ Public method to get the name of the group. @return name of the group (string) """ return self.name def setLanguage(self, language): """ Public method to update the name of the group. @param language programming language for the group (string or QString) """ self.language = unicode(language) if Preferences.getTemplates("ShowTooltip"): self.setToolTip(0, language) def getLanguage(self): """ Public method to get the name of the group. @return language of the group (string) """ return self.language def addEntry(self, name, description, template, quiet = False): """ Public method to add a template entry to this group. @param name name of the entry (string or QString) @param description description of the entry to add (string or QString) @param template template text of the entry (string or QString) @param quiet flag indicating quiet operation (boolean) """ name = unicode(name) if self.entries.has_key(name): if not quiet: KQMessageBox.critical(None, QApplication.translate("TemplateGroup", "Add Template"), QApplication.translate("TemplateGroup", """

The group %1 already contains a""" """ template named %2.

""")\ .arg(self.name).arg(name)) return self.entries[name] = TemplateEntry(self, name, description, template) if Preferences.getTemplates("AutoOpenGroups") and not self.isExpanded(): self.setExpanded(True) def removeEntry(self, name): """ Public method to remove a template entry from this group. @param name name of the entry to be removed (string or QString) """ name = unicode(name) if not self.entries.has_key(name): return index = self.indexOfChild(self.entries[name]) self.takeChild(index) del self.entries[name] if len(self.entries) == 0: if Preferences.getTemplates("AutoOpenGroups") and self.isExpanded(): self.setExpanded(False) def removeAllEntries(self): """ Public method to remove all template entries of this group. """ for name in self.entries.keys()[:]: self.removeEntry(name) def hasEntry(self, name): """ Public method to check, if the group has an entry with the given name. @param name name of the entry to check for (string or QString) @return flag indicating existence (boolean) """ return unicode(name) in self.entries def getEntry(self, name): """ Public method to get an entry. @param name name of the entry to retrieve (string or QString) @return reference to the entry (TemplateEntry) """ try: return self.entries[unicode(name)] except KeyError: return None def getEntryNames(self, beginning): """ Public method to get the names of all entries, who's name starts with the given string. @param beginning string denoting the beginning of the template name (string or QString) @return list of entry names found (list of strings) """ beginning = unicode(beginning) names = [] for name in self.entries: if name.startswith(beginning): names.append(name) return names def getAllEntries(self): """ Public method to retrieve all entries. @return list of all entries (list of TemplateEntry) """ return self.entries.values() class TemplateEntry(QTreeWidgetItem): """ Class immplementing a template entry. """ def __init__(self, parent, name, description, templateText): """ Constructor @param parent parent widget of the template entry (QWidget) @param name name of the entry (string or QString) @param description descriptive text for the template (string or QString) @param templateText text of the template entry (string or QString) """ self.name = unicode(name) self.description = unicode(description) self.template = unicode(templateText) self.__extractVariables() QTreeWidgetItem.__init__(self, parent, QStringList(self.__displayText())) if Preferences.getTemplates("ShowTooltip"): self.setToolTip(0, self.template) def __displayText(self): """ Private method to generate the display text. @return display text (QString) """ if self.description: txt = QString("%1 - %2").arg(self.name).arg(self.description) else: txt = QString(self.name) return txt def setName(self, name): """ Public method to update the name of the entry. @param name name of the entry (string or QString) """ self.name = unicode(name) self.setText(0, self.__displayText()) def getName(self): """ Public method to get the name of the entry. @return name of the entry (string) """ return self.name def setDescription(self, description): """ Public method to update the description of the entry. @param description description of the entry (string or QString) """ self.description = unicode(description) self.setText(0, self.__displayText()) def getDescription(self): """ Public method to get the description of the entry. @return description of the entry (string) """ return self.description def getGroupName(self): """ Public method to get the name of the group this entry belongs to. @return name of the group containing this entry (string) """ return self.parent().getName() def setTemplateText(self, templateText): """ Public method to update the template text. @param templateText text of the template entry (string or QString) """ self.template = unicode(templateText) self.__extractVariables() if Preferences.getTemplates("ShowTooltip"): self.setToolTip(0, self.template) def getTemplateText(self): """ Public method to get the template text. @return the template text (string) """ return self.template def getExpandedText(self, varDict, indent): """ Public method to get the template text with all variables expanded. @param varDict dictionary containing the texts of each variable with the variable name as key. @param indent indentation of the line receiving he expanded template text (string) @return a tuple of the expanded template text (string), the number of lines (integer) and the length of the last line (integer) """ txt = self.template for var, val in varDict.items(): if var in self.formatedVariables: txt = self.__expandFormattedVariable(var, val, txt) else: txt = txt.replace(var, val) sepchar = str(Preferences.getTemplates("SeparatorChar")) txt = txt.replace("%s%s" % (sepchar, sepchar), sepchar) prefix = "%s%s" % (os.linesep, indent) trailingEol = txt.endswith(os.linesep) lines = txt.splitlines() lineCount = len(lines) lineLen = len(lines[-1]) txt = prefix.join(lines).lstrip() if trailingEol: txt = "%s%s" % (txt, os.linesep) lineCount += 1 lineLen = 0 return txt, lineCount, lineLen def __expandFormattedVariable(self, var, val, txt): """ Private method to expand a template variable with special formatting. @param var template variable name (string) @param val value of the template variable (string) @param txt template text (string) """ t = "" for line in txt.splitlines(): ind = line.find(var) if ind >= 0: format = var[1:-1].split(':', 1)[1] if format == 'rl': prefix = line[:ind] postfix = line [ind+len(var):] for v in val.splitlines(): t = "%s%s%s%s%s" % (t, os.linesep, prefix, v, postfix) elif format == 'ml': indent = line.replace(line.lstrip(), "") prefix = line[:ind] postfix = line[ind + len(var):] count = 0 for v in val.splitlines(): if count: t = "%s%s%s%s" % (t, os.linesep, indent, v) else: t = "%s%s%s%s" % (t, os.linesep, prefix, v) count += 1 t = "%s%s" % (t, postfix) else: t = "%s%s%s" % (t, os.linesep, line) else: t = "%s%s%s" % (t, os.linesep, line) return "".join(t.splitlines(1)[1:]) def getVariables(self): """ Public method to get the list of variables. @return list of variables (list of strings) """ return self.variables def __extractVariables(self): """ Private method to retrieve the list of variables. """ sepchar = str(Preferences.getTemplates("SeparatorChar")) variablesPattern = \ re.compile(r"""\%s[a-zA-Z][a-zA-Z0-9_]*(?::(?:ml|rl))?\%s""" % \ (sepchar, sepchar)) variables = variablesPattern.findall(self.template) self.variables = [] self.formatedVariables = [] for var in variables: if not var in self.variables: self.variables.append(var) if var.find(':') >= 0 and not var in self.formatedVariables: self.formatedVariables.append(var) class TemplateViewer(QTreeWidget): """ Class implementing the template viewer. """ def __init__(self, parent, viewmanager): """ Constructor @param parent the parent (QWidget) @param viewmanager reference to the viewmanager object """ QTreeWidget.__init__(self, parent) self.viewmanager = viewmanager self.groups = {} self.setHeaderLabels(QStringList("Template")) self.header().hide() self.header().setSortIndicator(0, Qt.AscendingOrder) self.setRootIsDecorated(True) self.setAlternatingRowColors(True) self.__menu = QMenu(self) self.applyAct = \ self.__menu.addAction(self.trUtf8("Apply"), self.__templateItemActivated) self.__menu.addSeparator() self.__menu.addAction(self.trUtf8("Add entry..."), self.__addEntry) self.__menu.addAction(self.trUtf8("Add group..."), self.__addGroup) self.__menu.addAction(self.trUtf8("Edit..."), self.__edit) self.__menu.addAction(self.trUtf8("Remove"), self.__remove) self.__menu.addSeparator() self.__menu.addAction(self.trUtf8("Save"), self.__save) self.__menu.addAction(self.trUtf8("Import..."), self.__import) self.__menu.addAction(self.trUtf8("Export..."), self.__export) self.__menu.addSeparator() self.__menu.addAction(self.trUtf8("Help about Templates..."), self.__showHelp) self.__menu.addSeparator() self.__menu.addAction(self.trUtf8("Configure..."), self.__configure) self.__backMenu = QMenu(self) self.__backMenu.addAction(self.trUtf8("Add group..."), self.__addGroup) self.__backMenu.addSeparator() self.__backMenu.addAction(self.trUtf8("Save"), self.__save) self.__backMenu.addAction(self.trUtf8("Import..."), self.__import) self.__backMenu.addAction(self.trUtf8("Export..."), self.__export) self.__backMenu.addSeparator() self.__backMenu.addAction(self.trUtf8("Help about Templates..."), self.__showHelp) self.__backMenu.addSeparator() self.__backMenu.addAction(self.trUtf8("Configure..."), self.__configure) self.setContextMenuPolicy(Qt.CustomContextMenu) self.connect(self, SIGNAL("customContextMenuRequested(const QPoint &)"), self.__showContextMenu) self.connect(self, SIGNAL("itemActivated(QTreeWidgetItem *, int)"), self.__templateItemActivated) self.setWindowIcon(UI.PixmapCache.getIcon("eric.png")) def __resort(self): """ Private method to resort the tree. """ self.sortItems(self.sortColumn(), self.header().sortIndicatorOrder()) def __templateItemActivated(self, itm = None, col = 0): """ Private slot to handle the activation of an item. @param itm reference to the activated item (QTreeWidgetItem) @param col column the item was activated in (integer) """ itm = self.currentItem() if isinstance(itm, TemplateEntry): self.applyTemplate(itm) def __showContextMenu(self, coord): """ Private slot to show the context menu of the list. @param coord the position of the mouse pointer (QPoint) """ itm = self.itemAt(coord) coord = self.mapToGlobal(coord) if itm is None: self.__backMenu.popup(coord) else: self.applyAct.setEnabled(self.viewmanager.activeWindow() is not None) self.__menu.popup(coord) def __addEntry(self): """ Private slot to handle the Add Entry context menu action. """ itm = self.currentItem() if isinstance(itm, TemplateGroup): groupName = itm.getName() else: groupName = itm.getGroupName() dlg = TemplatePropertiesDialog(self) dlg.setSelectedGroup(groupName) if dlg.exec_() == QDialog.Accepted: name, description, groupName, template = dlg.getData() self.addEntry(groupName, name, description, template) def __addGroup(self): """ Private slot to handle the Add Group context menu action. """ dlg = TemplatePropertiesDialog(self, True) if dlg.exec_() == QDialog.Accepted: name, language = dlg.getData() self.addGroup(name, language) def __edit(self): """ Private slot to handle the Edit context menu action. """ itm = self.currentItem() if isinstance(itm, TemplateEntry): editGroup = False else: editGroup = True dlg = TemplatePropertiesDialog(self, editGroup, itm) if dlg.exec_() == QDialog.Accepted: if editGroup: name, language = dlg.getData() self.changeGroup(itm.getName(), name, language) else: name, description, groupName, template = dlg.getData() self.changeEntry(itm, name, groupName, description, template) def __remove(self): """ Private slot to handle the Remove context menu action. """ itm = self.currentItem() res = KQMessageBox.question(self, self.trUtf8("Remove Template"), self.trUtf8("""

Do you really want to remove %1?

""")\ .arg(itm.getName()), QMessageBox.StandardButtons(\ QMessageBox.No | \ QMessageBox.Yes), QMessageBox.No) if res != QMessageBox.Yes: return if isinstance(itm, TemplateGroup): self.removeGroup(itm) else: self.removeEntry(itm) def __save(self): """ Private slot to handle the Save context menu action. """ self.writeTemplates() def __import(self): """ Private slot to handle the Import context menu action. """ fn = KQFileDialog.getOpenFileName(\ self, self.trUtf8("Import Templates"), QString(), self.trUtf8("Templates Files (*.e3c *.e4c);; All Files (*)")) if not fn.isEmpty(): self.readTemplates(fn) def __export(self): """ Private slot to handle the Export context menu action. """ selectedFilter = QString("") fn = KQFileDialog.getSaveFileName(\ self, self.trUtf8("Export Templates"), QString(), self.trUtf8("Templates Files (*.e4c);; All Files (*)"), selectedFilter, QFileDialog.Options(QFileDialog.DontConfirmOverwrite)) if not fn.isEmpty(): ext = QFileInfo(fn).suffix() if ext.isEmpty(): ex = selectedFilter.section('(*', 1, 1).section(')', 0, 0) if not ex.isEmpty(): fn.append(ex) self.writeTemplates(fn) def __showHelp(self): """ Private method to show some help. """ KQMessageBox.information(self, self.trUtf8("Template Help"), self.trUtf8("""

Template groups are a means of grouping individual""" """ templates. Groups have an attribute that specifies,""" """ which programming language they apply for.""" """ In order to add template entries, at least one group""" """ has to be defined.

""" """

Template entries are the actual templates.""" """ They are grouped by the template groups. Help about""" """ how to define them is available in the template edit""" """ dialog.

""")) def __getPredefinedVars(self): """ Private method to return predefined variables. @return dictionary of predefined variables and their values """ project = e4App().getObject("Project") editor = self.viewmanager.activeWindow() today = datetime.datetime.now().date() sepchar = str(Preferences.getTemplates("SeparatorChar")) if sepchar == '%': sepchar = '%%' keyfmt = sepchar + "%s" + sepchar varValues = {keyfmt % 'date': today.isoformat(), keyfmt % 'year': str(today.year)} if project.name: varValues[keyfmt % 'project_name'] = project.name path_name = editor.getFileName() if path_name: dir_name, file_name = os.path.split(path_name) base_name, ext = os.path.splitext(file_name) if ext: ext = ext[1:] varValues.update({ keyfmt % 'path_name': path_name, keyfmt % 'dir_name': dir_name, keyfmt % 'file_name': file_name, keyfmt % 'base_name': base_name, keyfmt % 'ext': ext }) return varValues def applyTemplate(self, itm): """ Public method to apply the template. @param itm reference to the template item to apply (TemplateEntry) """ editor = self.viewmanager.activeWindow() if editor is None: return ok = False vars = itm.getVariables() varValues = self.__getPredefinedVars() # Remove predefined variables from list so user doesn't have to fill # these values out in the dialog. for v in varValues.keys(): if v in vars: vars.remove(v) if vars: if Preferences.getTemplates("SingleDialog"): dlg = TemplateMultipleVariablesDialog(vars, self) if dlg.exec_() == QDialog.Accepted: varValues.update(dlg.getVariables()) ok = True else: for var in vars: dlg = TemplateSingleVariableDialog(var, self) if dlg.exec_() == QDialog.Accepted: varValues[var] = dlg.getVariable() else: return del dlg ok = True else: ok = True if ok: line = unicode(editor.text(editor.getCursorPosition()[0]))\ .replace(os.linesep, "") indent = line.replace(line.lstrip(), "") txt, lines, count = itm.getExpandedText(varValues, indent) # It should be done on this way to allow undo editor.beginUndoAction() if editor.hasSelectedText(): editor.removeSelectedText() line, index = editor.getCursorPosition() editor.insert(txt) editor.setCursorPosition(line + lines - 1, count and index + count or 0) editor.endUndoAction() editor.setFocus() def applyNamedTemplate(self, templateName, groupName=""): """ Public method to apply a template given a template name. @param templateName name of the template item to apply (string or QString) @param groupName name of the group to get the entry from (string or QString). Empty means to apply the first template found with the given name. """ groupName = unicode(groupName) if groupName: if self.hasGroup(groupName): groups = [self.groups[groupName]] else: return else: groups = self.groups.values() for group in groups: template = group.getEntry(templateName) if template is not None: self.applyTemplate(template) break def addEntry(self, groupName, name, description, template, quiet = False): """ Public method to add a template entry. @param groupName name of the group to add to (string or QString) @param name name of the entry to add (string or QString) @param description description of the entry to add (string or QString) @param template template text of the entry (string or QString) @param quiet flag indicating quiet operation (boolean) """ self.groups[unicode(groupName)].addEntry(unicode(name), unicode(description), unicode(template), quiet = quiet) self.__resort() def hasGroup(self, name): """ Public method to check, if a group with the given name exists. @param name name of the group to be checked for (string or QString) @return flag indicating an existing group (boolean) """ return unicode(name) in self.groups def addGroup(self, name, language = "All"): """ Public method to add a group. @param name name of the group to be added (string or QString) @param language programming language for the group (string or QString) """ name = unicode(name) if not self.groups.has_key(name): self.groups[name] = TemplateGroup(self, name, language) self.__resort() def changeGroup(self, oldname, newname, language = "All"): """ Public method to rename a group. @param oldname old name of the group (string or QString) @param newname new name of the group (string or QString) @param language programming language for the group (string or QString) """ if oldname != newname: if self.groups.has_key(newname): KQMessageBox.warning(self, self.trUtf8("Edit Template Group"), self.trUtf8("""

A template group with the name""" """ %1 already exists.

""")\ .arg(newname)) return self.groups[newname] = self.groups[oldname] del self.groups[oldname] self.groups[newname].setName(newname) self.groups[newname].setLanguage(language) self.__resort() def getAllGroups(self): """ Public method to get all groups. @return list of all groups (list of TemplateGroup) """ return self.groups.values() def getGroupNames(self): """ Public method to get all group names. @return list of all group names (list of strings) """ groups = self.groups.keys()[:] groups.sort() return groups def removeGroup(self, itm): """ Public method to remove a group. @param itm template group to be removed (TemplateGroup) """ name = itm.getName() itm.removeAllEntries() index = self.indexOfTopLevelItem(itm) self.takeTopLevelItem(index) del self.groups[name] def removeEntry(self, itm): """ Public method to remove a template entry. @param itm template entry to be removed (TemplateEntry) """ groupName = itm.getGroupName() self.groups[groupName].removeEntry(itm.getName()) def changeEntry(self, itm, name, groupName, description, template): """ Public method to change a template entry. @param itm template entry to be changed (TemplateEntry) @param name new name for the entry (string or QString) @param groupName name of the group the entry should belong to (string or QString) @param description description of the entry (string or QString) @param template template text of the entry (string or QString) """ if itm.getGroupName() != groupName: # move entry to another group self.groups[itm.getGroupName()].removeEntry(itm.getName()) self.groups[groupName].addEntry(name, description, template) return if itm.getName() != name: # entry was renamed self.groups[groupName].removeEntry(itm.getName()) self.groups[groupName].addEntry(name, description, template) return tmpl = self.groups[groupName].getEntry(name) tmpl.setDescription(description) tmpl.setTemplateText(template) self.__resort() def writeTemplates(self, filename = None): """ Public method to write the templates data to an XML file (.e4c). @param filename name of a templates file to read (string or QString) """ try: if filename is None: fn = os.path.join(Utilities.getConfigDir(), "eric4templates.e4c") else: fn = unicode(filename) f = open(fn, "wb") TemplatesWriter(f, self).writeXML() f.close() except IOError: KQMessageBox.critical(None, self.trUtf8("Save templates"), self.trUtf8("

The templates file %1 could not be written.

") .arg(fn)) def readTemplates(self, filename = None): """ Public method to read in the templates file (.e4c) @param filename name of a templates file to read (string or QString) """ try: if filename is None: fn = os.path.join(Utilities.getConfigDir(), "eric4templates.e4c") if not os.path.exists(fn): return else: fn = unicode(filename) f = open(fn, "rb") line = f.readline() dtdLine = f.readline() f.close() except IOError: KQMessageBox.critical(None, self.trUtf8("Read templates"), self.trUtf8("

The templates file %1 could not be read.

") .arg(fn)) return # now read the file if line.startswith('The templates file %1 could not be read.

") .arg(fn)) return except XMLFatalParseError: pass eh.showParseMessages() else: KQMessageBox.critical(None, self.trUtf8("Read templates"), self.trUtf8("

The templates file %1 has an" " unsupported format.

") .arg(fn)) def __configure(self): """ Private method to open the configuration dialog. """ e4App().getObject("UserInterface").showPreferences("templatesPage") def hasTemplate(self, entryName, groupName=""): """ Public method to check, if an entry of the given name exists. @param entryName name of the entry to check for (string or QString) @param groupName name of the group to check the entry (string or QString). Empty means to check all groups. @return flag indicating the existence (boolean) """ groupName = unicode(groupName) if groupName: if self.hasGroup(groupName): groups = [self.groups[groupName]] else: groups = [] else: groups = self.groups.values() for group in groups: if group.hasEntry(entryName): return True return False def getTemplateNames(self, start, groupName=""): """ Public method to get the names of templates starting with the given string. @param start start string of the name (string or QString) @param groupName name of the group to get the entry from (string or QString). Empty means to look in all groups. @return sorted list of matching template names (list of strings) """ names = [] groupName = unicode(groupName) if groupName: if self.hasGroup(groupName): groups = [self.groups[groupName]] else: groups = [] else: groups = self.groups.values() for group in groups: names.extend(group.getEntryNames(start)) return sorted(names) eric4-4.5.18/eric/PaxHeaders.8617/pylint.rc0000644000175000001440000000007411172323754016370 xustar000000000000000030 atime=1389081057.485723473 30 ctime=1389081086.307724332 eric4-4.5.18/eric/pylint.rc0000644000175000001440000004113411172323754016120 0ustar00detlevusers00000000000000# lint Python modules using external checkers. # # This is the main checker controling the other ones and the reports # generation. It is itself both a raw checker and an astng checker in order # to: # * handle message activation / deactivation at the module level # * handle some basic but necessary stats'data (number of classes, methods...) # # This checker also defines the following reports: # * R0001: Total errors / warnings # * R0002: % errors / warnings by module # * R0003: Messages # * R0004: Global evaluation # [MASTER] # Add to the black list. It should be a base name, not a # path. You may set this option multiple times. ignore=CVS, .svn, .hg, .ropeproject, .eric4project, ThirdParty, Examples, Ruby, # ignore autogenerated files for Qt designer forms # Checks Ui_PyLintConfigDialog.py, Ui_PyLintExecDialog.py, Ui_SyntaxCheckerDialog.py, Ui_TabnannyDialog.py, Tabnanny.py, # DataViews Ui_CodeMetricsDialog.py, Ui_PyCoverageDialog.py, Ui_PyProfileDialog.py, # Debugger Ui_EditBreakpointDialog.py, Ui_EditWatchpointDialog.py, Ui_ExceptionsFilterDialog.py, Ui_StartCoverageDialog.py, Ui_StartDebugDialog.py, Ui_StartProfileDialog.py, Ui_StartRunDialog.py, Ui_VariableDetailDialog.py, Ui_VariablesFilterDialog.py, # DocumentationTools Ui_DocGeneratorExecDialog.py, Ui_EricapiConfigDialog.py, Ui_EricdocConfigDialog.py, # Graphics Ui_UMLSceneSizeDialog.py, Ui_ZoomDialog, # Helpviewer Ui_BookmarkDialog.py, Ui_SearchDialog.py, # Packagers Ui_CxfreezeConfigDialog.py, Ui_PackagersExecDialog.py, # Preferences Ui_ConfigurationDialog.py, Ui_ShortcutDialog.py, Ui_ShortcutsDialog.py, Ui_ToolConfigurationDialog.py, Ui_ToolGroupConfigurationDialog.py, Ui_ViewProfileDialog.py, # Preferences - ConfigurationPages Ui_ApplicationPage.py, Ui_CorbaPage.py, Ui_DebuggerGeneral1Page.py, Ui_DebuggerGeneral2Page.py, Ui_DebuggerPythonPage.py, Ui_DebuggerRubyPage.py, Ui_EditorAPIsPage.py, Ui_EditorAutocompletionPage.py, Ui_EditorCalltipsPage.py, Ui_EditorColoursPage.py, Ui_EditorGeneralPage.py, Ui_EditorHighlightersPage.py, Ui_EditorHighlightingStylesPage.py, Ui_EditorProperties1Page.py, Ui_EditorProperties2Page.py, Ui_EditorStylesPage.py, Ui_EmailPage.py, Ui_GraphicsPage.py, Ui_HelpDocumentationPage.py, Ui_HelpViewersPage.py, Ui_IconsPage.py, Ui_IconsPreviewDialog.py, Ui_InterfacePage.py, Ui_PrinterPage.py, Ui_ProgramsPage.py, Ui_ProjectPage.py, Ui_ProjectBrowserPage.py, Ui_PythonPage.py, Ui_QtPage.py, Ui_RefactoringPage.py, Ui_ShellPage.py, Ui_TasksPage.py, Ui_TemplatesPage.py, Ui_VcsPage.py, Ui_ViewmanagerPage.py, # Project Ui_AddDirectoryDialog.py, Ui_AddFileDialog.py, Ui_AddFoundFilesDialog.py, Ui_AddLanguageDialog.py, Ui_DebuggerPropertiesDialog.py, Ui_FiletypeAssociationsDialog.py, Ui_PropertiesDialog.py, Ui_TranslationPropertiesDialog.py, Ui_UserPropertiesDialog.py, # PyUnit Ui_UnittestDialog.py, Ui_UnittestStacktraceDialog.py, # QScintilla Ui_GotoDialog.py, Ui_ReplaceDialog.py, Ui_SearchDialog.py, Ui_ZoomDialog.py, # Refactoring Ui_MatchesDialog.py, # Scripting Ui_LoadScriptDialog.py, # Tasks Ui_TaskFilterConfigDialog.py, Ui_TaskPropertiesDialog.py, # Templates Ui_TemplatePropertiesDialog.py, Ui_TemplateSingleVariableDialog.py, # UI Ui_AboutDialog.py, Ui_CompareDialog.py, Ui_DeleteFilesConfirmationDialog.py, Ui_DiffDialog.py, Ui_EmailDialog.py, Ui_FindFileDialog.py, Ui_FindFileNameDialog.py, # VCS Ui_CommandOptionsDialog.py, Ui_RepositoryInfoDialog.py, # VCS - vcsCVS Ui_CvsCommandDialog.py, Ui_CvsCommitDialog.py, Ui_CvsDialog.py, Ui_CvsHistoryDialog.py, Ui_CvsLogDialog.py, Ui_CvsLoginDialog.py, Ui_CvsLogoutDialog.py, Ui_CvsMergeDialog.py, Ui_CvsNewProjectOptionsDialog.py, Ui_CvsOptionsDialog.py, Ui_CvsSwitchDialog.py, Ui_CvsTagDialog.py, # VCS - vcsPySvn, vcsSubversion Ui_SvnBlameDialog.py, Ui_SvnCommandDialog.py, Ui_SvnCommitDialog.py, Ui_SvnCopyDialog.py, Ui_SvnDialog.py, Ui_SvnDiffDialog.py, Ui_SvnLogDialog.py, Ui_SvnLoginDialog.py, Ui_SvnMergeDialog.py, Ui_SvnNewProjectOptionsDialog.py, Ui_SvnOptionsDialog.py, Ui_SvnPropDelDialog.py, Ui_SvnPropListDialog.py, Ui_SvnPropSetDialog.py, Ui_SvnRelocateDialog.py, Ui_SvnRevisionSelectionDialog.py, Ui_SvnStatusDialog.py, Ui_SvnSwitchDialog.py, Ui_SvnTagBranchListDialog.py, Ui_SvnTagDialog.py, Ui_SvnUrlSelectionDialog.py, # ViewManager Ui_BookmarkedFilesDialog.py, # Wizards Ui_ColorDialogWizardDialog.py, Ui_FileDialogWizardDialog.py, Ui_FontDialogWizardDialog.py, Ui_InputDialogWizardDialog.py, Ui_MessageBoxWizardDialog.py, Ui_PyRegExpWizardCharactersDialog.py, Ui_PyRegExpWizardDialog.py, Ui_PyRegExpWizardRepeatDialog.py, Ui_QRegExpWizardCharactersDialog.py, Ui_QRegExpWizardDialog.py, Ui_QRegExpWizardRepeatDialog.py, # XML Ui_XMLMessageDialog.py # Pickle collected data for later comparisons. persistent=yes # Set the cache size for astng objects. cache-size=500 [REPORTS] # Tells wether to display a full report or only the messages reports=yes # Use HTML as output format instead of text html=no # Use a parseable text output format, so your favorite text editor will be able # to jump to the line corresponding to a message. parseable=no # Colorizes text output using ansi escape codes color=no # Put messages in a separate file for each module / package specified on the # command line instead of printing them on stdout. Reports (if any) will be # written in a file name "pylint_global.[txt|html]". files-output=no # Python expression which should return a note less than 10 (10 is the highest # note).You have access to the variables errors warning, statement which # respectivly contain the number of errors / warnings messages and the total # number of statements analyzed. This is used by the global evaluation report # (R0004). evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10) # Add a comment according to your evaluation note. This is used by the global # evaluation report (R0004). comment=no # Include message's id in output include-ids=no # checks for # * unused variables / imports # * undefined variables # * redefinition of variable from builtins or from an outer scope # * use of variable before assigment # [VARIABLES] # Enable / disable this checker enable-variables=yes # Tells wether we should check for unused import in __init__ files. init-import=no # List of variable names used for dummy variables (i.e. not used). dummy-variables=_,dummy # List of additional names supposed to be defined in builtins. Remember that you # should avoid to define new builtins when possible. additional-builtins= # checks for : # * doc strings # * modules / classes / functions / methods / arguments / variables name # * number of arguments, local variables, branchs, returns and statements in # functions, methods # * required module attributes # * dangerous default values as arguments # * redefinition of function / method / class # * uses of the global statement # # This checker also defines the following reports: # * R0101: Statistics by type # [BASIC] # Enable / disable this checker enable-basic=yes # Required attributes for module, separated by a comma #required-attributes=__revision__ required-attributes= # Regular expression which should only match functions or classes name which do # not require a docstring no-docstring-rgx=__.*__ # Minimal length for module / class / function / method / argument / variable # names min-name-length=2 # Regular expression which should only match correct module names module-rgx=(([a-z_][a-z0-9_\-]*)|([A-Z][a-zA-Z0-9_\-]+))$ # Regular expression which should only match correct module level names const-rgx=(([a-z_][a-zA-Z0-9_]*)|(__.*__))$ # Regular expression which should only match correct class names class-rgx=(([A-Z_][a-zA-Z0-9]+)|(__qt[A-Z][a-zA-Z0-9]+)|(__kde[A-Z][a-zA-Z0-9]+))$ # Regular expression which should only match correct function names function-rgx=[a-z_][a-zA-Z0-9_]*$ # Regular expression which should only match correct method names method-rgx=[a-z_][a-zA-Z0-9_]*$ # Regular expression which should only match correct instance attribute names attr-rgx=[a-z_][a-zA-Z0-9_]*$ # Regular expression which should only match correct argument names argument-rgx=[a-z_][a-zA-Z0-9_]*$ # Regular expression which should only match correct variable names variable-rgx=[a-z_][a-zA-Z0-9_]*$ # Regular expression which should only match correct list comprehension / # generator expression variable names inlinevar-rgx=[A-Za-z_][A-Za-z0-9_]*$ # Good variable names which should always be accepted, separated by a comma good-names=i,j,k,_,s,f # Bad variable names which should always be refused, separated by a comma bad-names=foo,bar,baz,toto,tutu,tata # List of builtins function names that should not be used, separated by a comma bad-functions=map,filter,apply,input # checks for sign of poor/misdesign: # * number of methods, attributes, local variables... # * size, complexity of functions, methods # [DESIGN] # Enable / disable this checker enable-design=yes # Maximum number of arguments for function / method max-args=5 # Maximum number of locals for function / method body max-locals=15 # Maximum number of return / yield for function / method body max-returns=6 # Maximum number of branch for function / method body max-branchs=12 # Maximum number of statements in function / method body max-statements=100 # Maximum number of parents for a class (see R0901). max-parents=7 # Maximum number of attributes for a class (see R0902). max-attributes=20 # Minimum number of public methods for a class (see R0903). min-public-methods=2 # Maximum number of public methods for a class (see R0904). max-public-methods=20 # checks for # * external modules dependencies # * relative / wildcard imports # * cyclic imports # * uses of deprecated modules # # This checker also defines the following reports: # * R0401: External dependencies # * R0402: Modules dependencies graph # [IMPORTS] # Enable / disable this checker enable-imports=yes # Deprecated modules which should not be used, separated by a comma deprecated-modules=regsub,string,TERMIOS,Bastion,rexec # Create a graph of every (i.e. internal and external) dependencies in the given # file (report R0402 must not be disabled) import-graph= # Create a graph of external dependencies in the given file (report R0402 must # not be disabled) ext-import-graph= # Create a graph of internal dependencies in the given file (report R0402 must # not be disabled) int-import-graph= # checks for : # * methods without self as first argument # * overriden methods signature # * access only to existant members via self # * attributes not defined in the __init__ method # * supported interfaces implementation # * unreachable code # [CLASSES] # Enable / disable this checker enable-classes=yes # List of interface methods to ignore, separated by a comma. This is used for # instance to not check methods defines in Zope's Interface base class. ignore-iface-methods=isImplementedBy,deferred,extends,names,namesAndDescriptions,queryDescriptionFor,getBases,getDescriptionFor,getDoc,getName,getTaggedValue,getTaggedValueTags,isEqualOrExtendedBy,setTaggedValue,isImplementedByInstancesOf,adaptWith,is_implemented_by # Tells wether missing members accessed in mixin class should be ignored. A # mixin class is detected if its name ends with "mixin" (case insensitive). ignore-mixin-members=yes # checks for # * excepts without exception filter # * string exceptions # [EXCEPTIONS] # Enable / disable this checker enable-exceptions=yes # does not check anything but gives some raw metrics : # * total number of lines # * total number of code lines # * total number of docstring lines # * total number of comments lines # * total number of empty lines # # This checker also defines the following reports: # * R0701: Raw metrics # [METRICS] # Enable / disable this checker enable-metrics=yes # checks for similarities and duplicated code. This computation may be # memory / CPU intensive, so you should disable it if you experiments some # problems. # # This checker also defines the following reports: # * R0801: Duplication # [SIMILARITIES] # Enable / disable this checker enable-similarities=yes # Minimum lines number of a similarity. min-similarity-lines=4 # Ignore comments when computing similarities. ignore-comments=yes # checks for: # * warning notes in the code like FIXME, XXX # * PEP 263: source code with non ascii character but no encoding declaration # [MISCELLANEOUS] # Enable / disable this checker enable-miscellaneous=yes # List of note tags to take in consideration, separated by a comma. Default to # FIXME, XXX, TODO notes=FIXME,XXX,TODO # checks for : # * unauthorized constructions # * strict indentation # * line length # * use of <> instead of != # [FORMAT] # Enable / disable this checker enable-format=yes # Maximum number of characters on a single line. max-line-length=90 # Maximum number of lines in a module max-module-lines=1000 # String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 tab). indent-string=' ' eric4-4.5.18/eric/PaxHeaders.8617/pixmaps0000644000175000001440000000013212262730776016131 xustar000000000000000030 mtime=1389081086.289724333 30 atime=1389081086.290724332 30 ctime=1389081086.315724332 eric4-4.5.18/eric/pixmaps/0000755000175000001440000000000012262730776015740 5ustar00detlevusers00000000000000eric4-4.5.18/eric/pixmaps/PaxHeaders.8617/ericSplash.png0000644000175000001440000000013212170217300020766 xustar000000000000000030 mtime=1373707968.932653286 30 atime=1389081057.526723475 30 ctime=1389081086.307724332 eric4-4.5.18/eric/pixmaps/ericSplash.png0000644000175000001440000041736612170217300020541 0ustar00detlevusers00000000000000PNG  IHDR0 pHYs.#.#x?vtIME " gM4tEXtCommentCreated with The GIMPd%nbKGDZIDATx˒,ɑ%v{Df[j`Ơ1ӂp( e?ܒO?2 "40ho"Ty -\qHɌsjPgPm[W궟`]YN %燗rٿ/_U?opoÇ3/&;r+.pXRi*:,a \wT =| == > !Xncg?c3O~FYCr?)wL:HHp54 3xfwTo3`#CBh tڑ~{\݌@Dsy\HɄcd@E! NL0Eu $)JIdH2A 0D$Q; 2T̀Q9ش& D Ikꬋ}P+$ɲ&,#ꂒ:P+sdlA 4)C~xA 戶]_3wz3&H݊ FV1-D{^~1Uom=E0l؂2<ഃ//P.7>1~7~ރ8/oŮVIAW.X @4XWX"Puْ fQdX9O~P0LVXv{ $DG,yF&+R(L |n`@`+4v ^Ͷl&L=zAЀ -e)D pC:z'o#Rd&ǏKliXZJ}3H#Nم(PDt2N3Ba!,Ӯ@}KBm+ng@u~^z,Dv$( vHΝ:X,eN_H9NGB y&&-\v}e:iyZL}ك+b`*;tpVȂy/s\ ~P/M\0<G`&5iG@e afD7?F?jVH ip 3VhntCLȲ%8 Hh@33f9g"HYR /BR XӫvmtE#t @,8P %HCIk%xCr; Ҁ0(@MxڂpIDJdC!Ʋq<23$a !JccGq$Ɣt)BUj$ Q 0}4I2h\ p@EN$O5$}$I q 4U#CaA&dT)D''(V70;)P'A vXAn<~/hl\ @3@~UfS nkڃGo^cG֤ H|f4LDᆺO YY&ՙ.鏑+`PzζrةaTJR[Ŧ@ 0vpN8`Xf0Xs-v %)GA%)7E΅à" fYv{u8` i@cfh>@3`#CT * > o0G&@W4u~80_f$3f(̱T3xUҵ$p-/ \I`p sd n!*Ӗt'?F?# %3]ݬG#HR(h :SQܲ0#W$|*"kܳ:aZ$b)D:b%KX&CC8<j{Suo$V:C` Sjwbf@@& H!e8 `IkV " Hw5efd"vILaI/0.qH DnВ&J F0Q&y[tGh8TdIDD[1H'X=YyH@)a'y*Zg-&)[=!,a O9@CŖ5G\P }&؊ `϶Bђ8`:ؑ?w`qY&ai90YZΰ/7 '=AY 7H5 cPz=|&S ҡ(ѲuM8,Q}рLfڨB'/ʤe@ ۾CgQXPZeFNhhP3V +h % мP*Mh@̎ }E? X\b0kP`yO)fBoK F*OhvM#m+<@_&cإv2-#fgP3IYeF*dt$IhJᄏ-5IA'\ 7 4e 8? fFgH1%"OpXSͱ+$8CY$I i-FX,X:000|pt;ޭtL h d@&>БTxa K\gIJ+y\ԾA"x!z29 eUtŠ#AۙeZL~<ݶpb!%!h1`=m8FDBK9i D ,ЮQ߂ert V`6JQQ&M&I tD\R3*3iI0 8S4x&IHh 8UEZP lI2 IfSWIdZs@O``S`G!o=A(wo+4ʕLMZ'N` Durޡa]6F$Hp@b%=kUfnQg˫LNRJ9 ,BAUUΆUa <Cۣ/ O\D $ɴMPGQ6mcZi[1jmL5=3,_w%n9ʹjAlb_A;_i 6I$]ldM,@+*r3y ($X_эQ$YRR̝=eI a xC2 j@@KF@.9 <(4_gРD[@ ' a=3+Αݽ@AoJ` K pC.+ Xi5ݟF!:TlOԄR}aMd"u~9Bd-tWMzy8̃fLLfd1罍 ""Ԯo6-eH@\ TDZ+YD_1~iR>GoAWT{ŷ 3o~7w>4ޚ'NQ0ri%kfN2="2)&c)r*e<@QXې0pʕp.3hHp pUtnL@ZukB*[OC鈂Luw&0qAZ\gi}ƪ=,g}j=RJ=2uRzS8-mt7DhX4K8 ȄB7LfӅ_fu4@y]t6~[AA $Zeia`HL{s+J  )+gL\B Va PC$qF2ь{d] +<s`L (r#hA 4ZI0kt "CVT0RwoY|?Ы@ThS]RoӌBG3z$DK謥F2b$D3N'2X3eF.-^gNLEvVM$iLa;rt",*Vv.\X`Ɵ~?<9+ 8u\2/T7 ZyCJN3|rʊQxSW`Zhe~~{5?;Ow7ޜ HIFrYݴ.Oi4VxD^>RMXoo//|}ׯ^]>z?z$.u9Tih}W{$5UJ&ASzqGThwqK mdPzB67ҁ6#z&Kd){*j: : ^vE"8r,30[@2+VωshwDcG 9pfĄHaء0oOCSIJA2*Q5"i!PƒF0+IO*bp&Y)c LƉ*FeQ-)%e%$McU#-L)0fYEcta"1):nI\j |a6<0h-(cZ-F9^l]B1.ɜC/ `DLJVDmY8F'sn)")#Q7@"2%30D'fE'Zjd〣'%X}p T@#Ƴ^uWnlj~=J=O^$񗟉6W;;{W/z8dxⅲR"b9~/~\_ߜ_~󝷞>ŋ^Z?j˗˲ݿ)z8͍OI:ygo_~Ͼq~{by}x~vv>ݢ Hn#@6H)^ĝIri+Og5J MyI&sF=Mp `c hxaβ2A'pBSG5( c9HDހdIUX~r;X58AmFA!i!Hns`PnocWS۩Gh{C"-ӾNnVAiSwK{<qڮFwԿ] REB[cJqȺXD飲hRm0$?O:iHf].6#Uyޟ^v< #~"OЉ:1U^̿GsEfG̞z_~`&,GDbWW׵N{IWNy IS'~kmWW/_}O7x/=㧿ͯ^|o{___~G??|7חWny..oow;-J}7D7 p*IFo0qʔvGjM7`&-ۜD!IRe6Ʃ嶓,>X/?8-n͂Sxs LlYHJeO7h:b3eV|rNC=m2րrj&"6'HffvImCC{&PG MbffY%Lv{R"SsJȻya;%4IfsC kpIbwϐDB* SD"()5c#G+pY4#Ly@f(yuQDkH1@&Q6ZBBQ\_ 7kpd((e{@95}Mqױu:gck,vup{;2M;&uq:.˲,f>/.d_G|j}ŗ_|_}ǿmf_4MW/_?7;w+'[m+I!2LVN]HЇ&!2}iFm{Ddr|5dͧV[Ρ ѡx2l#l3ۆ>B+9 b9cP^3ژDu ϶ͫoa"B[)m`)t:Me]WqaewD@MM`ΉcÍ@/H&\nT2?mE3aM1Pyԓ I"Ppd$YYd:L$#Qx{$b P'l" ɼOnCNLAcnȰ>yv4@`xnSm7`*0ۜwT0, ]/ia )䝡gqV2׿ַ?xx˷yx뫫RZk벼|*{dtIɧ??}/?.no_y/Oӏ~??8?xG|_?y-/|Ǐ_^^~Y2s]ngf~Lg5i$M-AHZ1HT9& SI )3VOI|:Lr_VxS(DN}*D>ČȲ T]o7:G7džK[NF6Q"a7 ~ H!fYԌtWDwHRwg &Ylc?*4am IcF*s{[ߜ.qmmKsu}Fywrًͻnwyyy曉~uy8sv<^__}?p}^_??/^^:|__>G|?hV*׷_]>85g?)_Ń/}ɧ7{w=_[Xu&⭈$rgIktIjB&RDx|((He2YV%6~ PNoHfDK(M`щmHmz$fdlmv@"`/9 L`dǗG|t"l/Me2h6܀)+ B^a`5 d+)hwxSHqSK8Wީ.&9@iv@ ѵ)-8 r@gd);'!DkmȵؠԒt7TRhkwiI=Z2N*Ͱ&odxȚQsrmՆL#3q AMĠA+N9iPTwŨaTӊx}~먼h_ =%-=9 1(dLfX qm'^ dWy[Ɵ|70_zՋǟ٧|BѥMjWG8ϗimrmJ)o<{/}"/;eYv])U@4X9RRע",ߟI nRnk},CGw3+eL"2H֩/v(Ï=eڠ@=[TkUc>&aheK n͠jr[y5vv E={«MvQ.LluNm)-Naq ]Dh2B~FR4x:P#aF$6!:=L:2œǵԡ4/..$֯]FDj_!ts\/%6ĺ *V~՗ys^k&4RdD96`}u"~1:ؖ238Rd)aE;oxa~n6IH܉J]Z}i~ibbr~qiŵzt:l-i On:qjfh0b;5QtueV,Dr\=;,^iknf HD+i﹌z3l"A+Do5(FF$q @P̍TݴV3Ϡ7#hg}@ 0JzF~ C=%,(7gom"@srRo6$X}=P,:.O'nڲoY#T8Ͷy rvrʚ& M@D%Db/X7ԁ8Tqnl-P hԁ'"Rx7񆛮l|2lI)k+3?>90 % ``&dAip G^B> @jwCȂKp}=\K60j >i`5w@7!u)'!ͣl-gq Г9^5g)e_뼱WPX^^ j ?eV#E'>^(N+ cǎ=މV#aEaܕ%&]EXk ":cfjHu619yYT\x[cjnq:VVVRrY B.7d>y*gYEbdPH*A!6BD$=w 5PEPL"bP6р9@I/o&sdAy>Py71hp. ߆ ܤA/{vX #:wߓ0CT=M1 rHzC,IXНDA'_ Ban]*6sMvK~ O.䈅0+~W~20p8D_H0-7۝dá>)s/ {Ǔ~sRʿҳ  H#thS@۵3Io!!FDdgS?x{u?E;pws!pSB'āhhC[Pl{͎8DA4yOrqㆈ8q II2\扳gOj(gntgfg/_^ZZ^^[;q+I'i/n奕V-J)D*qb.fc-h$cm#BzL}w-K 0p "}vnӄ~:*F###zT,.*?|7N;ϿaB{ [)e8=(8c;ZMA̺UiAy.(`Aa^"#Dd=%j֬J?&"gie(8eYP|AwJ@B 42;nݜdfWD 8׮#T$"Rӗ6OM-<."}4 <3X%k8!ΎLQgoN{X0`oSi؏B}P\ݎT*6l?#l5:W.'' ZugNӤngΟo51+c#WMDUR&q$ũILZ `YjԢ9Nc Hb085^xm۶ojR{}m|lOm6tsNkoҙ" Ko'P8/"?u^*gzgu\8D)vüP/1FݻFڒ oAKWLfPex*$Vmq$: 'raם{ߏ7~!{>[0cYiցcE@ Ku= 倲΅U l3e!@3p_~[& #0ZkbiGs>S(5 4_eDp.i"'ĀDD@X#9@hH)q6.}#C;^2`%BH@(@"@ BBOaƇC-DH1}~RgA@ }%<*T7"bbn[k=ݷl$y_RMlݼibFk# z9ulՉ7O93Jrݨ7ם6MmbӨq^ٱ&Jmtqg!XjX;߮X<1ר+V>0iF4kví]IJ0vamjLrqbvU+=z!CR`iySN[iQztɳkcRA;t:TOot ]aZc6mtK3]'6OMMivgg4T$;D^Q[6vYY3 wQe[.=Rm6P#@Jtg *@ySmruW8(č0 bج֡]Z}w(?|ٹi=u>ZW@f:[uw_>;<4z7/fٷK.TIh|+[qnЈVN_?1e-_:=}tq~eߺQ:y+GFZ|ΤlMmY\oϻ_<:?o/K{fۿÅ=ނ ʅ0D͕'ܹu^:bOϝ/ڛNgʅV+?O|ѳo=tTzjo{Sj'isj[>zg~u#O=nkr9 >޶Zs>q?k'j.^pQ:ы~R'v8I7y=//͓>v-[Fۍ7wl6<zHG/s}?}׮oT+ڦw̓Oax{~k}=2.+(̲}{Cjj_ "^mRkۦ/>~h22:ty=tr7qQэ&>s{fPiyAof/ DEjyx\^DVʵjW>x੡Zǿo/RAo.|uߙ_+!2A{_+wZuh|t Cٰq Ήu=r"~hMG!AXu}O~_x9m:u…'O9{jt ۷m7KKK~/h48O$ꩯl#sh3a3|q0Џ9CED!t 9 DECa䣆EHBR 1t3l߽!bR(:@h3QœLD؊KAVp*;->/mо@i~4nnxۦJl#ŷ9}rqX9qq }ʭϛں{ s *-^w_zX{7;q[ ?xo0ƾ7~?zpaه_{C'/-$ sjA'q (?׮;L>>[cr~W_ pw*#N?pz#g?oxr`~WlN~f:ԅkK3DgaWT8Ĉebxy{̕;ʤ>ԅ{^2/?Aܰ򎟳Igǖ3f-Pmb};ވ[7:} 3o0 ί=u..f*'/*Um~M?i4BR UliOS`Hb-M{q2@`<`cd-RB@Ƣ>G Erh4֪GYl$k+LmkknjԬRAP.vXvǧAej}ʥlj׍Q(씎0V;.L $,}02G"@Wx>JF !$UrS'Q|L2iXȒ<LIdLup }(;ĭnl;kwrѓq[BLLfoQs  Rpn{jauϞyLֆ +kL}likxJOIRXi#Gxu]HGurXTn $*97Z_3^Ym|3}4I_R DoFM@\]wnvBٵÏ 6̢5~/ZR_dsskmܺi̮mc3˫V=[v5ږё(9P4RVQ7RYc #W7$"Rxy&[R.0{AV@cXӛ-fL)j$;)'@K</#57U@=|y*=f!VB@Dq@UkSvFu/|qfc,8 Jzn5ȈQN>]ιBm 鶄AVib8NvK0D"ĩI'KGGKQZsĉ l|ؑ7eϵ{r9hAFW@e&Vg ,EH(?4 F$C3! H|deq yahOkhs<<(sWdP I2b]u}26c:K1õ۷.`v꙳oֹS/v9#Ғ[72/_jCM7&aqvjjXR\i^VvZZXj-ҷI9p"P.+ΦZ7gKdWL*j>Fto+zdrH ccf.m\Ըq۵V]M@xjlsP;Njb4x4FY$Sg͞4%xYFaPZgՋo$XoCJK2'}E{S6i`eUL1Ԃڠ2*(.>'(I PP# 6mv\I3N=|xyPO<ÄBcm(k4S1=(fPʨz33+km1h["  Kj+04r4<\ttԙcG)Kʎ]*Rhp6M$0**1gu]]x^ᑾ 8sO4BA(`ND|$ы= ;*l-9A*)k|0s8 = FPW{tX7S`rj䬓}..Gn^y+qlKu|1;uyW'[Wn͓Wٲu|qq&M+M!@l܀/)@BXc  سDDlӷ~74zc(RVk2 +}U7DzkJ UP*+E}'onD:;c{:!t0ke!j@S 5^N\ R?W)Wl~C) 9Q#B#.ߕqAHQk%@v@4|r  .a$@D5T# 1!zC'"qqn델|G.]B&># Il4N P(xwz_7{oK :Ӝm);Mb̐ 䞑9uLt$v WW j{2y֭[닋6I¨44>ZT(C˥guekS("!do],W@ҀOea A*{U$l6@r|@0;cN7$q7I;8Im7W6@>޷o߅ f֗W/;inl & c+ +?!*oI@ E+ҁҊd$@fb:-b ι"@,y/ b䑸 bTAYTJ )!:UUn輀8 r .gA P8U-^NK;_J^[Kzw"Vj [TZ5PSA9%􁷽zԲo}/{ ?H/C'>7>'}'xk_}]=v;u۵wѕ7}>8GW(\w G݋n?#Lֺw᥉fs_~X8A6YS•b%h,]o~R,w#ֱ:xFD+=[bO-WAP(>k6O<lU:׭ϵb;/ZMDFŊhbFhX詣]S}bd9A:[o'}9"!Gr+@dR [&2(@TH(Hs {C")A'Pl ώBR uZvqh4Ln{hlD\17Zm! +v(Mi?&OƘ<멏Tx>A`0+P HXfApP*!5[NRQ\޶cob<22\B! à4p~W:' !ItVDaM(!*&sB̊i`ff9 s" Ք,*P |1eKCUa {5\}nlo7>QvnzyJUORkO>{jC4k(C?H_3G.ͷz?ķ.DZ|k^xԥ-7o~~Cˋ띕zX]czit0Ts [H7{lzÇ?-jAQmU靿{^s}@(p.csˀGIvBBdC8y++`ct߈@f`oMzҖAEd-B:@Q>V$N3B$"NqSJ;t1[UB:ɼ)FԨC@ۅy i~E>ځE2ߐ%,DwU[Jޏ=n5o=qZR.ʥ 6;v3sX:QT`B vm%M-3Akhԣ4}ūW4}st@@bpF ./t!D4%bTKu*V4 JnVKI/]FXvU*}7C=e–Q* [f&ؙ(TWOVP '5 [3@q }QtU&Gq`.>!2"2Xd1A 3Դ_8`1*͘/1*c&=#_˫A='}7ERGBP* 8Gp̠ʙ(`)OB_+U6adOBYS)QVkyPi^T?4ipu22(@t@#LYuȖ=<+kfQep8&[F$OfȢ_9(s]a_I;sm3p fy>jDD0 J5e?NnAu쳛Av/+fo >ID0t @Y&b$>!@rB7DP2ZA`e뫄g(̂xna$i ^䐧%1#A@"E( @!q8b?>< D1w2޶bv1z%2 8E7d!`;ܛC܉{\E.˨sO!|̌i4E$+;G;&I&lZ81VIPZ牢ٗHwJd 4OZkMABdž!ȖYnniB;vKf7I(P Yp(-}Hl5*Qr05߽\*D^\\424T bP,DaDJgZ@eX iR hx`*HDnFq?=F7'<h As+l5dA S6Bjd;{1d y(EM 54s9 uvszZ73O4y҃"z!cp`R(@+MH-d3M Sn 3kxfv̎%>'q"@~l%Qh &w-EPDX|)1}2e@|b> "z*GNu=o| |,D ;dkP@p{n}>Z,krɰ",iHSlbkB؍cA&"8fN.@Qd!VLU۶[KǪc2ZzR TZ`"p:*ժ%LܝRֶn2<\TGFBMNS48"@BVIpږ,w:̓\)cf}@]5mj1)i2v $1첏UABm5frN P['Η4'y?M*gU{OhzN =|V(wkYmw<7x[^*y7 "Ge]2n~ '6  12\Az0eEYU*DI|9yhPSҝ}L4͹+QᡡR\a񶳈`ǙnX(BBAR_,#c#%Af#@2q #9Qa+^ٺnW"pPtYvxS@\*Y"gӍ:qcu%t&7RDC#{{MK8Mb vGAR.q7IF%1kwUMh DAb.K`vigcR}n9Hm$3izauS5$GδSܒ uZffB`*i$."U0<{ev+`|||jSScZREbgX7㠲_z!;AOlG$I0B =YVL2PЁս=Hc\ k87^בM }r> SŦ",UK\{9? Rq R}(:ld*P@ <˕]Ag)BQkoD+gy׌k۴r'b|QhS`ʀ&sx_]{+V!p'˥}nQZʼJl߰wEj3^U85|d[jVY٘#>7T(:5+Fgs(:n+ ?K!yae] a|(* 8f _Ͱp YȳmZvj㏞.CCChei9IZ}eeVQ:4[Dh6\[qNJ88H!"$gl?+Ab(TjX*E$a5֣RixdƝZI:!H\jw:Ifaxex2^vZ\m7˕pm9@)uhC"܎cdnۓcc/Il6jkC#ָ$mZb%/m2X 5zuxXʤAX!0h&ʬ0"f|侌T=j?#dBkP_omN m4 7d 'D}h"nò F~A!d~˙!fkd-E `DV*$f֗Yg+g#iꊺZSzK{ !B^EAғAR>xҧ8Fgw>y@5˘,! CvJrP|xmRo3fl̽h5DPwQ4$O͂qJSY$"JY0w]A*q>`"btXPzPvzAjMT(kijp'saA@Dz_L3O8ۉƦ@itՙٙ(T6o4T*R+͵=ƦqJj#J.϶s1q D!ZaY7jՊDih6Tu K|sT,[f.uYoG9i_yk5;"*`Ayq3T67rz1YRR3|upӈ@BD"&=qWQ @=ǜ  )yeu޷Lwo~=h4 "%*b\TiL$,)LE`(+ǕTr)IȎ"Q$RM 4 _;{{;nz}sY{}89,.pQ4m?O0,Oϗ3." 8iiK=?nL@b1~&ĝ-Xg c^CAh%vv8ײplB!  oFQWʿя窣yaS !R[PM6 @81]O~&a`8 WPLI4<莟y£Ls!Aa|R,3X;= HCWx7\(ҥRlˠ,Z "@4")[@9JpzF7#XM(bp h6jϝP }MT8J2 YɊ,)\-Qw<;V{cZ7.mheʋ/^C" UshQh2l69X]"㚪ۭ͵H;1Q%rq1{ܱ̤VS8!d= fUrDܳ+tzF#%2ЖDO?2+Qf9'\F{?Gy NMOUG:/J54\ "NNeYtn:9'6i^wTw_T_(q}pjj!0'kOLaj""FfE "Vv(ZF`dtCF$PA f3_srR7T4Dwos0~K+Ҋ,+D"E0n .W3[cP,Y|}d Y\hYn49E:a-`P;K"#&X|+euf?|6766Vã/}k[nGa$LNgZcR4!`.RDQ> 4M(EjHW"AJ286֚xENb.%yƭf"A -n޹9 (n^# Ψ-" Ll i`""ɊU 14;R[(|pxqcWW$ͪ(q}6 ^`wSIԨНIݽ(^=jdQcw$+j,9ݬJUh.G$tj+kfSp8~6"nmRԫ5|{V%roN%^[YvXаu т`_t+.I. o^菆a&JR&q,,9i#Mya,MazRn~$RjZIC1M#*L!ZIZk($B8LFYaT0UfL0,`xf<{ HD #ZU82ìQRM <%TQ%%ٳWVVWVVۭVkur7bB ҢOJ \Ύ'yR4βDc3̿ݪza݈>ܥ/\ݣgàkj2 "V<}©kHZ-%Ηxm C 0F-̠? hr|`>^^j7jm*c| ) !iw0 =P>{\}Ν.  `t_! x(JuUNY$8.~*8lgfMDmPQx qsCr>Rdn˯@LTDѹ9\&М ]usPT,v^X$G}غ#O oia$R&bIkEP_Zұ]?+6ݭї_i}j_uǿ-Bd6Z0fpk>9wIY w^:|߇޾TQwlF|๟Wg7w:7~9Q}py5>og~0nmz+ls`qor"5oE֒2ίu0^N 1 @)2Ŋ_QH+0yk72HݿwV4l0v{CPZ, B5y`"pbp8x¢qn\0FQ'~jji6#a+KKtp70 LhSkO]8]Ὀq{Ƶy:hY5덏}_>IbAӪT &K6~ǿ_}WnJ%q^YV+nծNjU'E@Dk'ķt1+@cӦF+'pcS APd V+KZ((P +!wTDnXB~.fGr#L_*թ<ڢ$3$LaO~6%OMy~HVיe^URmy}lqY|WgN3W]+%V|r| KNF tzz52Ɯ^/߆_|{tT p3gjnk~?]DF?R/ ʝx8t`% !F:I9EI5yדlш˵7<jd̝ѹD2WN\B\LDf V?{{ X@YN;Zklw{߿޽-cp<Q&FD0V*y.ƊPJ$ػdx9 J=((4 LqRFݟdPAl6/9jo=]?+/WjZqxTX*/7{;˭0*9`FqOaQs䃺AYir4/[5(Ie2UL;;c>wvsua%9wt>QO^< 7Wւ XZmj5n4֖WZ+F- hK\2"!8y28~+PR!J9t2ER™l4ӫϒ2Xx?$ q1"y[OYKU~`gv)KՉB79# 8x߂/"Pd m_@,%P0%'~r2 A+`pY^U<\RDž i@47n4]0;Årc0 V E^w'͜! ̔sH#c`eVQ2 # )Y+zr)e9|% 1 X2D^ U F[~(6fH4ϻp4J$dHȭZj-qap-44,4Uq""lT#Zk6XB >v1+rca?-7z-( BL*"N1ZR1c3eRTWVPmSɌ[]DX,9Dj-XӤե{}zm#?c& ڲnJ ^'k_~m6[:Ҝ])\ |zLUJqduev c峓ޝbq|~Hp1sڂ?';CՌM",#!Dp$4u2/aD<*t> r ʠno7j`k5Ԓ(})PbGpw>H$yW^yāݭ`-,ED Ͳ4˨l(ѽ8S&8y?OlY JF[At2$Ssk_y}֏.g9z5 4g[ik.mO~e]vJUzXo_If~|~ΝOԿJf~{( ^/ݘǙԩh7jyc{i6C呅k%\ L@dP![iebW`-*;3~&a09_TF?|h?w:~`;Nla,ia5JH'AH x2\<?gGG6*2.ɖjIѸ}"c" jj3("ZyO󉻴VWv $IڭF4oKgμɫɨ_[]xۮV̈֎/!JR)ѡ;GG\ԡr,٢. "1 &RM~ kڪ,JHCxv@ȻYiPoG^{{;4$K'E*2 Ihs^i|'~j .2eDdcMFkՕpn՚K49ZW`,QƝÐC>ܩխݝɤ QYT01$\[}#J/`uv5Hupu΋w|Ԯeiڬ0:88Zj6TU_ڵq7Ο9}s!Dz2Z7bFr?f&0GEE@I\͌I#(,9 J6 q}*WgnEHP/0\b>SVs߻c3x8GnN[/<˂f  #;)`=X$V xੵ:CJcB&7czK/mIl P dmڨ|;d')hʂh=rn}fE;+e<V0T}92I(dF&^jȞ0Bi~pe22*"K+K7xc{gGD0*5l+q\kMG*B^mk_sf4Z/@FlVDvsڵkEAksYj5lghHQVq[m4I&XYnlݿ{w}s \ENW%[ _Zي+`l./P(@Zd5k!NTqv4֕+O?3KZR)1DfPPVbo{:k"C"PeQRtdACN~ wJ[j.̑UGGTT|9)kDOqeE#bPIQhO 5D"섌"`p#ѻ,O|}N`sC\ZH-FY7rG̲AǂA(JL} jRk~gk, X(hĹG+!0B6}sgNKEoEjEɲvʂAPgv8^>=떳%KAHi?@SO <~R w^dv8 xo:]j~ǟ_ܾ+jT e<{yQeuhV{T*M!ZYJIRIαe.E1%q5@jqa}]>l>ZH:1m߿d;H^nǓ( jy:Kig@E^85lm]=a7h믴O]}w;RQaA4V"_Eg-pX$a"l9Mtb>n~H`NA 8\p3ID#^{0T:F(tZQn5wj}ׇst[#`ZSkĆ~KǏj鴳{Sg>w~q_[nA~p<<4/5 %r]idYnWY&IQ9% fFKڳO]jԒho{+& ?T8^լVB\nL'!K͆pL@ZSKPePh=<:ãhwSSO]z58ߜiv%E#(bN@rFϚW5;C#]\d·XХ(9wWpT n"E*/f .wE{>1?gkW?>ew5[k)tTIq&RFIH19L d N?ep$  0kHģA4n< ̖fY (*bXH!0i_;x&!ˬ\$3 tP'ͣx(ϲ+%sRb, ^xfV*JQZ `ٺOoW@9XA%os^ JMLk)ϑ Е:`-/%g\F ~qX:ߴ tww믯,9sf4 W^yo$u)Zj.6ZYojڴhc޸ql% nMǃww!nEx#᤽~ҥdf[4G3zwEdy- 8"e.9e3=)X/g=X+Bd=vasjKeQ2aKb3Z  8]YeoK `7OJb",+A|j$dqrH]\;>6I60_XDTJ))OK-"My G,*1@ fCp^pȜ kȥ6x>1%ApYcXm>C>tZر BXFZ,R(Ӓ4-%Q:wX2=)v:H $.{ۛ4P# J!qǹdA-2BrىL,,fA`.fC$$fpο2e2{TMAUe'-P#NuV,JI,'',paَ8?0( ]=6 T{Ѡۏ8i\Ub{sxx8\]]kĪ[{vDK>i^e*I- ǩhJtrju HZ_o՚+瞼O}F43_y׊j B·QaҨUvku^6I!FjUEQl-{j%uU1{:UkM]]ڃ&[`ǵ(ܨj2*l?;y&8wNPUV0pt)->el~ak- sL< ѢJ0@ l9FA%|K7g%7 Y@eVUeq|=LftdکѼ,TB$GJLXo2zNjM9RL .0\fqr8-Sj IwUrLqhLI#4@!^D'G+B!rHQ~ g5nƊƅz䳃˦LP;1O',b@"Ul"ZLւe`1,LˮOM'F.;:k!VQ H>Z #?H"`>M/EZyQQ^{wo[c.xyP~jcjk7\[_9_O*ig?=aR4ϝ #,7v>4 M8p+,7g8\`<)0f3fb"vc2lomݝ|šP:ɓ:YEQahcI14v.ǟgdsk;w߽{}rgk^}ǏiUcJj8nYuĥ nlӢ1.Wr]ڽ}ϗo~_qxt=j.pxrv;ۛIᶳ#@4|;?r80"X9zU9,BURKtE`j,挦ħƌP-[,)L^C8|Fi %bbIfZRQ@ N A| ;K96@5 qb) p$:"} ˭>2OM52"DMG9"!z"b5@Zʠ=`C8={[6-M"%t V8qBKڪo~ C|zsX'B,q]WȠ2zfL'Ɣ*DUcIj_w,Qj1P>(JW2:/ F`88TcGqā 6UU/sDeQ91D D* 5RO \ ])me!I|EbSjJ*l=jzɈ+0#+B =Ohi0T*:gdgy_w]|I0N_yj0h͛"n߾jժ(\5e3L|Z,ώ޸ssyM,A1tog\rvyI7FÃ݋trmkokqOgty~6ou0H+[ɝW:('Oxٲ><:i(ʶmV)ճJYi[PnM9ޘ쎪֭VyVOO߸;ܮu-O92xC`r>;hV=XbJڤ&1dYw`F G$rS֨bPxs $  !N"3!)4z3PP6ІT"K9 ίq1t| r90 erܳE6Dbu6 8Gf%M){L%FZ@Dus\(j2/! ARiMs^պbe*G{ZwaP}ք9,P*K8T}ZE 5-#TLE- [e@̆g,bv][LU5qm|#3CǩcJe̸mEu+uJA&i.98W.ʋ¯l-!`YfP%3YKc0?xuS" JWJ&b\=[f?׊v޻ÇO~=?*i4mmm~ Ii_U8ߵ_}{¡& q7_dON0|uؽ:h4Xgڭ$JgOQ݉HƍSdjI;*DI`Dn- v^q[k<؃qNG.98r M?9O>N:@'@ (p8H ;h Kp嚄^S\Nn>B`+l֒rؽZHIZk)A͙+dҙ1'32j(]ɐŲ$UX+….H XMoܔ G`rtu|B+MD`l&"9V<H@,C/sFI:Gfv!VzZ$kJعP:rw5sQgv(b0ҳ'ػbB=/rUUբ]]?}铧۷痗LJE(F7zi]],@]v͠,)vnmk{c_|zvr$Q5岨aX o߼6G?dզӋy'rpm;wn,}z||O?ۼ7o޾}[;{o=z0vTUId-K7;v6.U5ŵt8/_˧G)ۏ>ퟞ_t`8>~|h@8?J$*> Vk: s,Ep`  3E"OlZT$@@Q/ N<]\1wAɑJw0a*؀\ sA%E$28v(pIΆμjfJ 9cG>^{<n0e쮎kLsQ#\4@9#$_ALDXM`JX`mGV H: `@Y3cU*86ZS+-GԌ3zF`Q] v9SgMimY+<%2\/*cbyD$sۨfRH1O)`=Vlq2򀣢Glu5њVѦODM~''{ۻ( w?Ǐv{?񣽽~ :=?xt}TMfw I9Ĝ"$IfPa-X!r= .uF;c&WRqĎٹRUTUgD(p80URFd80zpk/*e+L \ j5"$:;Ɓr"i%H RdV[jXa0֔DFdT, BV@u7!vgldQD^e)/sP1i$zLWEJROwYpj"N=\ә(Ƙ8p]T>+#ڤJI!b"`G bgJsgDb22$BDߊf ,-+Jc4XjFU}Z?Q//lV~{oN67~rIwɓGd4m-g\;ӭ;oVpi-Li1x0۰HUpl\OONޞ@wNwk_d:ed˚b0r @)1exYEA2Hq?gFi26Jd,f`Dž3r0&. "NjIl؈=o2r&Picmɇ">`rD3cbe4TzSfv ELbr&F # %vڤ#fm_H)a1H~yH.SR2s3"DRUx"],w­)*Uᢒ%bMb*J#PӜ$J]+SBJ1^ ^(QR2,X@$k,&#"We.PĤJ7GÇO?t,~~\ܼq}k:o-}~o?y|6BR 7'v77S~9Q^,'Wd\.T`wiMKh1=>gMqTqHU{$h (W9"vԳ멗t4 Qr"<{(kjyu58+)8;<(1yM"űvyUS־rl 먴($0% )qCH|'j]G*t, 0YԊ1L,v) ǔ,3C$0G^m$ă"$Q2R#d75ZTR+ĎD ȇUY`.╬)9c 6$v/3DtEYH<fW ?ە6olK=lLc]5D uYAĴ],NKՎ x KWCمA5xW777FIݵO>z:1jUˋ_[/t. >ℙ&]9Om6;9jau|~rj#ιMUNj''g*?r|cϋx5;9:,Ug<:_,b9k;^z嚲_4pgl18|Rwn{k5,g30wxP K\?z?F9D fcvh6#QjcbrBL&]"]X24)ŁSF{33'h$μ{AUA "풶bUf{5Ozމ]~9a̬B)])Qg81#[Q@MzW*|UJ}%йjGYeiF$c4F/+f 0P@`#`:v8"Da& 3KIS@#]#(#Cy眕e`& X`LmdXɀQi$%M&|/c Q@(uaL=&ɀ3I`g ڕ]ID%DPPΌiV^-W=b~seeYl= 7;9@$z #$WMlZwˏKi%\{nI*d0r`mA)pWr'@`lcc*]ι4=}ɣã>o?tӇlFt=yʢMakPvCZb-'jPtIEݍzc\]۹bJO_xzuj<|?b$2%SQߒ5lݕFuτHJ;Ѽ7ZG$f23J ޙc(,FqEUrNep2y=z3CH|"Dž&yXP͘Dе*R.@!p~wp&-2:$&Sx`Ȑ*3321@2VKFcα0dfBIDc/c-28 DcHELR"bbrl8 b:.IV'34AM9dDQL CJW0%S5!s T6BƯ'1t013>6ԁ#`dg@[~9"u`647 k7 qkQE}Co(0XE3 "g֑ng|shBI$CuńCQ[o;@;檪8D۷o?=>:N{zJڨeYj my2S-agsZ-]xRiۤռu2'GFQTubxxuW_~w?e0(~{&2A޹n_߿GVڵ[o^{6Z\\v惣'jkvyr"u+ U孠=23G`Dԡ@mK 爈\ȟŎ$A5ĐtתwPIHT2ȘLD$X35#s=+x,T2?ecҧ fNR2eqOӾ B֜oC3R Ϗ<1 F )Yj($"”!#D$J[[rL>v}Ks{f;7w'_`­[7>_W 2~{ɬY v]QYbks;$f{:9"'2:Bu/i\횦ݜ q1 Ux|SrGܵPwGO~W_b$7M>|?xïN "*GicGӤOmcYa5U]8;>>=y#76֣ǧlk,9AO'W {ۛeL{lPQ1OϏW˃,jTU,x_{k2mm=+Y`MGoz+ne45$k$L{nN9HTk v Qr9T1(@Iz}ؑ%lqBΐ- @l$ OE͔D FD4" ݥYČXՙ3t\ <,XSRF@qPtyW/]WߑU٪/7WOU5(4b_~d4\$}w s*{&O ^.V:R/VO.O0Vu-evsm_?3;vvof|u'2vePήݾGQ|5d%mb{r0ݨ.w_Yɉ:# ޿q>1jZe)v]7F4 ĵZ#h}|ɰ,iʠWԿs1Hų9CH)}<6{N6c}iGPsDL~ dC:2[J3%L<}' `\C*hЎb(``OMZ'A!+Q{I)'7 qʸ|(!WcKf.9M24vfcbS%&P縫jB-)Z\'G 2ώ1 9Ju3UT)D,=o?d[w=~:j(AM{alp`aܱy7|v"xC8.- v&Vqy9Obqqz;PlmU:՛|p4.;T $bx'gwoߘb~a[728:= /ϛʱzm~?84;c#Y7lv-䥷_366:=~||pj/OO-\߳Ԟ]ѭk?t-͋Z"Dj*0釔g4D8OxdLbFIl LDE5)ΫAFlp?h mS&Z!`bz,Q>yXԬ&x%f`aRkYdF1.8KV%@" Zp.aZXiCU.$Uc%?HLgz2y2S&2q|YV]id3Uf]2"$LYԤI/ JۨTʼnI^є9)K&J,A"YGn5 k&%S#D,\G4{T_@B}?ˀ3xB Yf()u\y^Qb"QTN2&2_B+EFA(1!V-1G|VR6iQKL?~V :)I]p'Oɿ??<>O̱ѽۯܼ8=nۮ,=]3_E//gw!%Q94ʰU(.t9*Xc]ǍpFQ\o?7 zŌժ==>ݙ*/)=?GfZ6qJi4g66&u?:9~{k'j\ð ʏ*(}'=%ruA閫[3ޞ{f6>7%18zGp=K0xOC`mddfUoFaMRܾ A &;SH \SYjq}༪Lfj7 |d5lH5*%%W$P"NAARG+Θ9)<)E[ s9ZEdžBjW1sUnr7*k G I$]^^޻w޽{:<*?>|~8Ϛzv[B|-d懟|\.j *anڭhk; rŃLJ'݃]_zY͡]Y$x1kxc>G;_^C{9V\}AWU#i9$#Aq}'9[S8*8%`B ީi:Dd`8pWcu A{PYPd@>{o2Y&86#Sxp\D(IF4B%Ӽzಁz]3%-3/FQnH}|~D<3N!x6&Kbꐼ3F>,Vr=AiM%çȨ5d` #1E'2$qxõкJ+R>.!?zz0,d[sӉ҄  !C fE)_=R䰾$wVR9J -.:3<˘K^57p6 +Wu6 ])&N1IBJ"I[Ň/?soӠTa`fӴbj2 B>O~7SHUYBGb1[˥whlxcc1鄖uS>x9n]ۗz޶{Ǐrmgk:؜Ti8\O˦ԥ?w?v&/_꭭HOo a|wcYۛ4)*)6&ua֫lgggU/6PD>[_r7 \),:Bybw0(R!E͗~s`)j9uDȺ` E K* Jt BZ[8 'ALI14AȦdVDK@IDƁs72^„'1}~Gy7huS홼*$jװUډ5]b3EI) Qlɼֺ. cӞ>}tr||F\ߝVn^dbN/''e7͖e9&0f7vvq./.n㯾:9t%s0[XI#oϗr~><>xs忴iAU<e"Q^$fiֆs3fyL` ̙ 3aF}M92 gMtsȩ|Eo]*i=&M r^X),!ъT@$ "BaJ$ DTTja _|o7@Kh3WHD1@"CZKj;:FL^3 nD){q>8jp;6f?I mD.k@fN>2jAgj;G) K@Ldh՘5kB{Lj+#|8#>REBA9Ub\Bck(?P}zߪ14` FY#Xb㢋B]rkҼY:騉1!"Z̗7o^~g;{׮lon^nMƫCWEmVMW_}7dIUvMcM|V[2ak{'LJ_>}zB{;|q'Ua୺uMY>IݤᰪƣdplGG[{Ӎݴlmť-xXfg|٘?WmU,M`rr9?Y{^I,M;crsa&EVՍL{@?@-0Cl_Dڈc`0+ A@&89Wg o5%((R2SPLnӬĬ(̑0ԻUO; fbv,eT9:9O/bQl`%2B4RBTE#STWDmK 53Z@D2u!ٽ+B4tS,l×\mM̝>jQoIoQ7)Rkgkt6e~9g]*$V ERUdMC%Ff0F&M(Bn5yu|w۷o_tr=Y,df'g;ޝpqNjBO~@Q ̙1(Wj7rV/e̔nG_ (lzcjZ'[o)".i`z) p*Ԗ9؈caNOɽwޥwuT"}x=w}pv/>䣽o~뽱zIy{7\,::<ߟ,..'0roϒx>9Nˏew{_gZK׹8=}z9W;+R__Glm r.գ=YWG<l+xr2ܺ]51x(̴I0BLW܂ YJ9Ysaf(IQGc.&5J:سx49HTjX8H(A %СUwt TL Ԑhr{" 5Q &I3@ZLl}y&J@b5vs/,hBf.'2tPc_\ ;>s^Wd+߱_qw*JeY~޸׻;F His{q/fNSvvrN놋YwW4 ;5~pN///fO}ݛ_s`0]^^]m KQW+q/.s;23"prѿH&Jíj~ vSM\D!Y#b<̎@inv`&DΠ]yRYǮG  Ԣ(x%>aM%"H8@*<A#T t ,)X.h+{0o&NTY*P2*HpL.cCI,j<%2g[&eS"İ\HOi)TSUA9a@&|B)uaV^{ٙóE]]Cã黓 C\mYw^lT5lzyAYG0QĆU%DXd51}JyO 1G|{U?k#z> ,jļ4߽^lmmm{wg˟7x ?IUsJEjɃ{?oj&ٛo=6zc%tEQW9cks4o~ď?yV7Uhf$$abⒶ;_D-ojRzҗY媭())H3ļjU-9Rn}jB oNE8sӊu*Wd킭-}(sҽH*LIsPD ٿvl s@R@ uD΋@U,rps~:[gŤhA(i LoHZۈ6 Lvq}7B2xb2(H.9 9&_sDU3 !LeFh3f_5pSHu7&omк\PR76~}G~853~:%4 &;@FH,PV5dY?h}'h<[np{O,fAyuz\JêJ|r^վ(h0۫g3ȅ/"d0޵;;;ũ{|ww4r;?dqvGM4]Vneg)=Gֻ[{ao:ln",e-g?M/+ /-5Ve, %5xylh[Uc3smB2 d ,XgA^p 9U{ @@`l,Js@<5Ic[M @,WغZLġfLJP&Q-EhQ\ׂy*!Vhj,.ffZPGI:+MjbaDAؓ!((Lb8YsUdlYusqaZ /d d$b]qyaU߻.L#mUD$4/.O[孓[ģjZAޅT yȹje,i2204RX)dDX $10!J RNXT; J@@UaHPdkl 6\z̔< HL ulS p=`dpj%)Udkw ! U}HQ֌J*cu-YJu%EęgvFIJ]~5-f7ժ/u&SŧO\eLZ` ~/8櫳 ˤU4ǵwg/?x4" y %(PU{3+b+3Do=,(h <#bhO eB?+bB2QK,85Z֖j9sϱ~۱R]Y]pq, ""BMNaj`A7&m̞Dh-q|?u#UuTӶd*&ЄH#9i0(ͅyA|TMш JjDjak `Xt@D]:ϛ7ȡ,\U+)($\af)"-ࠔz)g;SZW̲S$8iڃDFa rبČ|PI0mIfJ2o"7WbrpS]r)֩<(!'Se`b,Tz3 UM%RٚdD5U]-<6Wͫnnvr1GM\N߼X^ Mqqqo4AWSAS8<,^eUK[zh<<;8U۝̫qZ{gӣO>~R] {tw@o`p 2=KsBtKHQmiDɜ [3:|ZL3 fNefVPI"re Sg0S̐ L1n ?nnx3AkvnSG1N?1 lPldk hy&[f hFH7*5!# vluƝlď55z^}^o%o&o>po\LYa"&RaJĢ -(THݼ7b6ƴ:㣓'~Ign٭bLFY|GW[WH}x'b/ʳe?|z/`1EW͗afv7_x;DB/dQl@!)N#mmmM^w~GY?}poիQggk[(ɛȇ?!i( 4t9MG4,o#"x4LZ\{Y6 3"NV#,f0(l?R6S.[z0)G* 9#g`*?=P>wpB$|̠@s fi4Rkh9r)b7{|4qZ*9GA\zkL;&"MouJdػZS)6cdJPSCX4ͲшMٷRAʹkݸ}?_|ۧ?OnL.~9>;8m\]^J(ц꧔g)BG׳ʦiϦw}X/f5_ͻPES>NG[Ѓ+F[=AF'hTRSP<y7"0FW %T0 f"3 jMFf "W v/{4[TbSҘy ( `Adx<|.p(ătJ*dI qAesP8`J;-!, If3fV~kjFTK, i?=0[& <bUlro~jrQC[F1fِ5r{LkFg Q? $[\DUSʛ$֤r"^#r>-:u?MpJ&ToˍN.Aiخ/=D߳:oRm{몸9&Sˎw![ê /-6r7cCOXɲ3X2}%kϑQ75F75^Gr\t*we#^іJu$umY%SfC Q-9QV3kG3~*Os 1/5}yu}om :T]/vؿ>˽n,˳'Ow^dǣ~4nol _|MԽ;>G}X:rr,6Mғ[bׇg ~hԭݍ>>~]WWe::OlQ-b{/ vDž7_/ON?A;C;}{}ʡg.ӣ:jMrceyɠD)MW61Z}>!\1346 mu\`Bx{ݽdb7ꄒw[x0ɴFϞ=R{r8eog{\EO?|xLH8K8mʩ~H%MyA̒NFWJ53)=[( .IO\N"# Op!<.;fCpP`wI9C$ $ f&.BDb)n $&EQ" mqddpILF j$`A`g!چҷCZT9C3mIGT]Df,*ml+R[#Eg0gl"b4X;#S 32ƦjFJKߓ.D6bPfnFXysj^\aCkW ~S`ʚ,Fo_פq{1no<$-.-ΪL%BO~qlY*tv~yyz _ Ͽonm$PtNwJTT~_hȆ\NO?yP:(xǧ'vכ akޢ3dދ_ݽm}TJԬQn_6>?~5Uz:Χ+aWsً+γ_|1zy=x?ww~ gLtz11e:'8;=,n{pp `7⫷([{/̫xv.w61uF l A~fvp[ޗjU=9C [O|K LquzfNPol3"{BsXVP~p;] FL %J(ƈ*x@\,E"6+y8QS]bG>rLj怔Hi$(c@&~@rhNu,F)(sE2I3DsfesZs`7A3d7 HjĭL"rpe 9 }V2 XS}`\GQ$"\dfMlnfiL ׳ڋf}o1 _0$[La2BHNvXS|oPGt,qhg|tr`W*){ڑ-sOI}`ZG\'ד+.߼~'!`1_O2_~>dV%bxwx2c3BT^\ь ۱r1{`>\tw/_̖wzzx^S^\w}orqnU~g2/^g:%y^N.^ߢefwd SVS#4Arl 7:J72slBDJٖ^pAjDМzY03 \W50iLl*""ᘕ`5$XRCE)w 5x%u{`e'P`RIB\ qjJ6NRNzlݺ"V댣CKTkeePYfj1BRgf"i])!|^ 9Puo۴:w A7Y\f3CKo/MYNaSm rnA (f?7_1YK+asA)XSY @Ucvrٺ"5;+)gn-`ڡwF ty ^m?Od1(PI1'<l[r7aDM&x({[ۻwZMO/O~Ig2i 'E- !D.E18??i8ܚ^Mz`SNbQh/G`^Ϯ'v{qFx0wvOT .CS$CiYM;wݿ{=9u{bjG^ntD$mG.}FZ2/ +l"]5ʮЊNZFu56zom LrOqtg3a&n:J"vDBޘu` OjlIZbT*t=HAH}= %\r% ijF&sRE\F.܋ dUIM8G"&0(DJIt4nARͬQ4ݲ+iL&k]x'R#Vkm? $S\5xd9jF 1KD>jĒݢFY##55egs0ћ(֔lc=*ogNfV~- _ۦ:1v[|Fd#Y\!fa󃪑0 rq~Pj󗗧O}PTvO>4w{9tCaF<= вߗU-EIx{|n`/;r1Ieo<.i]7v'gg0_|v0>x8©,%˹q+Utۃ/ߜ92[Mq8ǻ;Dtxpt~=߻3Wǿ͋Wouƃ1S߁f|=9n,Ma2D(f#2". 厎DE_ss=ǚ桲fm3Q![8"a&1 ͑j5f"MS9%\>A ĪDSdk$fhB|pn*NYkTSy8v @S".Sdә0S`sdFl\GMuVMR](PB1$5Demʺ*&y @ltsf$)5c6595ffɒeQrMcC`pHj2q4QJ9(Rzdԓ[[>oO-8@{LG WHo?t'&GFN% )N.wvͯ&P{uDI\Afo|xc(Ӻ? p̬-)F `k+U|r}c6FwyjfA635v'g m ҀԪ&&h&3cx܎ f3T*6F` Jkfvu.͚k¦&m=14!`eǗ*<5yL5b#mW2b^a#,Wںy=4-挧bFUUU]]#ذĽٓeu>N9VefU *b"@EQRK%YZ-V?Cx'8~'GȒ[RHjDS%bFY9{}nfV% g*u:k7?}릥p֝杻W!gwIF6sۺ~x;_"x6p~v,g&4bO67/4 ?s WVgo^/*x:8ށWVWVǓȢk+K++ԗ+.$Ptz {1QRgG/7;; ]#ygtJ]2{A. \&Xk֯W9 z;ji&M2d Qz=(H ZW<'epCP 4lC3}ʌky q[$+jJә#df!ex6BdO TF;#HB κtX׳Us(T*QTE1 3s7w205jQ,%qk܊u5nEOﳴwd2yL~{&L߿ >u!t>´PNFٴDo&P7C .<,̳⤗pE.y'|++G 4[j+`U=@ۦY[Xb׿jO@b|0Mg^^[xg~a0+Wofy6oů_tas,Uu͜ڝlMWՕww|V 'Qwo>hzjvg}n۷wǿ>ͥxx4wdrֆklYJ+*fwoR~mV@* gDD^PQ.AwK_\0" An53bYDDrkV1sE%0ڼe*zQ Gf`[jG~5lus޸S?z敟^|\QΝ;ի;$^]OR7;zRO f~ohog4E Hc?&4Z-i&x=ݷ/^?/I[_\2MG7=2oh~|t*fѨ7~jyh`y͹ Dd!5d#g#ؑFDE8dD,ͻ=;%c J)wE.:C5(S%F}Bi 9Rh+!f 3(A3 3U#pXeF=t3BGpewaɛ2rMTSJ0e'r'k0oRPIL 6U; 3˜g6|ᴾ9.xHD n%rr /ԳoÊw2ZajVċٵUSGLmPL,$ 9wL&5 #[Ȟӣq/p<1A}BL_Th'iK٥iٳ..zل9܅IN~&f;. !}xM,w{M3cXҜs~kpޝ~=lj9iEhZ'ƣ)|7g^ H>Ga/}뿨||8>~cM3O!D!SqLMZ іF+k+9<7wV7zX[Ykm'e ?[_/G/߻T}27~[ׯ:;a0fcc[[bUO<$C5>;}M]3+Ww"x-=péf:5BzBG3˷>.5=M=!x}hyu8޽C3?ܛ U8{_q0/Sv.PGѝgu/nm?n}meΧRN8Ϊ*xF%AvrSpݝRڜ9ĚZWMsko+w'_̓O?_?ػ҃ٷ^{]@/0FMGj WHɡ4!` „8%j6<uU C]U 07و"3]>2J.2 h!p8p센'޵O*IRtljKW7u[2r7+|vsdXΏi۶i ԯGUCxR B!rP E}o $NnKÖSCGSkZma<z 9{d("v.3&/Id WznT-H)v#ų}|)(˜Sd,K6o|m0>7:`;?uOV/PJ xܶYBz qy  2mӼmD+{wnnl..e|,$h]>ͯ ^=y;Z:3Ͼ~rFyM=«b"F g2"0fHP6bDJ"gAR%!DT5$ d: BS}F-`@tҖgJ2b C!z0C/%ejrl.:GLk ZV@ ^irꩅ;rHBMݩm<>XU%{˫9b9 rx4LAHe*^fN\Qޣ'}"0g/Tbӓpb8ղzes3S33MfMSY:2{ 0ShEoYuUW ZQWܬݿ,}Քb?~7zE󷿟㐏DM,#l\صg^O_BM湦kgz/A0IBPdӇ>1 x:!$"!Y7icw{ \hSut#SwWUgSU-?R˫?LJ{_WI~=\kQ%"vu^>șݹs :>Hzx4&ps(1isߧ2hXFu h8H}?TGٟbf FМO?%߽u'q<77k/dϽR y.=+{{d6ќz8 ( ( A@ WX(0Au# s{V*Ua5i  Hhrt'KDuSc0Gl"w Ee UP8Hq$ MD$eN9kNRrZNٚ9:奚,, щ)<["#P(sD ZeJ7""8esEaz[Oo pQѲ&l|q82S75˦fZy5=_~<`3W{2z9LlP❚R"'vEL/jLL/n,T؅ ;N:Lw{&z%@D1?i?8J׏ˡOͷ;w[\ߺf!18I 6 l@X8ˬI }~f&#d(UMbӯ-R `q))n⑅A8JDu.7/l~d8{r6n*weN5d-jfnYUͲeT54nƃ_fMs"` G_g4O\ܘ0"!q¨ ~/Kgu#YH Pʋ*px+GdV~ ?2J8k\>?{W|sCHBtԊXY5v9?~/<V{?}ν}4[A޽jƗ/]yFtGc gs"iVb"U1[E'vǶcۗ܎Gh\v\iO^xXOt |}PsNVNt A(sH%e؋O )qI`R DW<# &gfm r(rDIヶΦՕۮk|)_ݦ6u%KEDp<^4ϳ|^ͺWjW}{{/Ȅ݃u#◾|^mߝ朳LJyo|n'VCO,e|]jOh1 !ZyPU$zbvWbG,nGXN1T{z7+\΢0 4VU3:onAS' D@a'p5G$+S90x[C@-#;L`e̮'pb)䌤FZK @%̴r0"3h*F('\vnֱ)źd~ul mjY7ͳj6jIӸwsΣ_߾睯/r)[ݱ6Q!@^_ܼI hG?HWr=ˮŋ5uaSdaX *rCZ5s'xP'ʳq/B$F i<-|.>~{,&޽{w$ڹa_zo|6/^>~湧0۳YWƓiݝtP847oAw wإÝyo`i2C.yfF{7^?WOXٍ 0 0*4 '2?1Wїdu6ee=ZnYI? $PKL*PFA"N֩!lFvIs@G>O+%3l`jC@T$B aPPG>v4;gާyiƀ<J HѲ90)|l HTQif6fWs1eg2f-Q%Zs!J^M5lNX( )w~6W-"erYg ufJUafhr ?m6zXA.e ?R7Kɧ@HE?j 3pKSzԡT 2194| 8vBB"&ysaFM!;>\YY|ik>:[on)`ZB<7.㣋7{7}cO?8>ܽRLV\'6k"F^-10gwFC^ us/j&̐ACDkrO 'HF ٠br`0ʐ^ӌڌ" sDd +\(10(@jHU>sa'ch|)P[#&l͒i%lDPEO̜ݍ4q[^)%p6MJU͍S֕{JY/{لѸ"'sǻu&@rEjf4(U<.hͥRpLKjWCkan^ճ)fsS7/?к?=>XXG%` 8Nq>)z2r,GխozױR$ GlVbn}=ڸC=vBE ;:wS>*5'tow -2KD>Mg(AfvX=V&&54oƽ^ԕ/_ڨu9p`^{ zw~Kxn{ށ٠HyF酋|u}SWS|[o7 HhBݺyOi3կ+q!B]Zu6dL5$4 )硰RnK2oaNgX3h ܒn H!V @wӳ38}GD^RA*tmvL6G)yVΑ&r33q$EsS,ylT<"jتȪLڂ@A-p@pfCЬSn' b5Ċȵ/JnKDNX5_<`#"us*zX߹LMM͑4qĽA4Խ[όab"a&ffav"vӔfr%NQ|nF_+cŤ%bJD P)zBA\vq+ _y-SuP?nL4Q^[]&ssyӐ˵dr<ek{瞿1A?ZB޹rsP~SQ{Ǜ緶4YNv¥OҿyՕ^$>ؿ{sׯ_MT5CЯj&=>^N\jyM~+w{'/}{nm^{ߚ¯ Cya6 TQ81 h[HI,fPxee$H" @S+|08TPnGDԥHnJ [eDwWMdSS0KGǒA<!cH65R0 #| {N;)3ݍ9&3RztlUвo rZ3MA JAv^.wjj`aR㬰BM=H  nC|@гͲy6?w˫H/V|ُ^U W",AD1 14TT RH:=9#Ԡ 4כtA(29D)Ip{ȞP PQ.SZiD rȰ~Z3Rkd"ϧM+س´wxy;w޹sx|lV7 ֻ;]r 7֦M|yv(9{յa]?^QǞ,1پޠ'ǫj}]ZZ*0iv|xD$p׶h|4p>4 o4pܹ߽6_صA77?OP_xIy[l=o}w`ii%Vaow7SXvjfw}/V2ʅ{wgKˣQdo>O52=;Z8v-cI-tN8I ?`F͢ 1wvO6v$v0pŠ$a2]"K%`dU5$^}dS/\Ul9zZI{Yi9!Hwl>u"4cs?[_=y|$xy~{6hcc|/jh=z oO'V/ܾwS7F|;vϭ=Y_YUu W{߼Wy~cm5~[ˏ}_KhQA"A2:E'̮2^ JfB;4YJ,?Foh#I-;"BHl0IY 1lNE9G[yKVd92yY1C6@"]kMfI D3Rj̓vˤM2Sr'ڜmnsѨD`쮉ܔrlͨT3۔eg'V M5.nHmnl'-% &@ Ki;0WRCU5NV7/g溮?HX, L!q!f. F("[ı[ٔ"Juiw/\&p@eyڢԅd'4,X'd;*IwW+)0Ack[ObV,*Yt<` "Ddqw+ ټ9Lϟ_Ko߾m[^]Z6;|`c,8{'hrt4ExF}c76k׮^;:>nf͝[wwv}ѐvx~]WW.?Qx/>{$ nmGp=Nͽۯ]؀ӃnHgW.\t׿~k#oHqܳa\1qKgluP:~"wcYd9晒Pb*P+(,!\~c=i\zg*Mfڽvw9G 8~ʭ]SwvU=lJ6'" kCFBgG~"=ᡚmn[_Y}wnZ]Zn'mƓ۫W.ݾlg^׾z…7yᅥ*9.-E}ûonoյ`U{/zC5"7onN^-OW/֚s]PSֹ`tWWU]Ϧ;w7}UBpObL~Bm"BʘNsO5J$DpyoDfBmF(L(@+rDlu=DQf\(r5OfYl)>^xh-ƃt׮_]SpVNM;{ϝy._ WH1Nj8 HD4H-^$MɒhY21fFMI(*zǔCbJJx,e#Suh, T7*@LaT1Tf!QJjjJFr=`43X Д #q'w65IH MS#:TDo l*aյ;zD|zxf .33ybODLc@ba![&:v'ڍL%\0ujSC8zHgT_yS M2 #JQ'P"NSmPޅ@yo9@O׹c>syH#oK/_ΐtЕ+_rK??v,m8|[wB:ǘFI{sۻ{ '+)"m{4X-%@@zWzjʥH}FkRTwXK.7u BڳncOpYa?wؠSt{"tSQ$r !;ڛ QLL  L*[Qust|.c-:w693q=8!)%$@duL.FTh:23p ;eCާ~0Fx5/{^趇I!'v~Otxt-_'"kwWB}eۜvq-3r2Lƫa{_4dc.\GtLY~_vȱk7((w7Ο;#)vGKx3\|sTkc`Ba`!ܽ=O?yr{geg[lM|/MU* CdMl,f `f 8.F d:10d̋9V(b 0%hUT$1i(SZ |Zͤ0w`dd @ Fb"<8N 2 (iQXHAF *FTRD$$bI$)"$ET#቙T3LYC:r8B}GXVB )Q揕c'@XY˄ @lfTܟ1'y*FTrjiRݻsoEɓg-,ZmEKUoÝNμL!:fFQ$2&"I i I-35M,ܭŜ X:ɌVq>F-$T4CFTF6`LHJFFdLLBDd&Ȕ3@Hm"1¬㈼zZcRScz{`^iTfwB~BhϟޅPZpo8>|Ι^YV}jm;Qj="8R47}w{.v}8}o3v{KW-apT//v6Z퇯\]6F>ybKWʫ(6wll:˗ܺuFݚήo曷f;uo#3y{`ky_r|pSOFF[&eB,n~֞g #1և#ޡXBp@m`p4] ` R|(QrL(U$BJ)L!RҐ$EH4 ьM&5+Dԩ$5IC$ukX!Ώ9382SRy,\))dQ:M HmSb*5譒BN˺ Ils$i^fCz 4K]4ZoM4OD@dDpdbBܚgLUL@O @ a]ȼ8Ե}:/;{^Lpƍ?tF'O4pX!oX{-8owܳ8VV,O֍bpZJY^A678 #giUQ@"m6|n;5="Zs%  J`h4FK57Kbp"Euɼ&(&qY8K%YfQS*IK$Q)Xj 0{:Y} ˫FPM{s¸E9P#ذ2XĘ\y ƩRRPy)(#D3 AbJ\[\=_|-"(Z筨\x,ZqRhVۺ!S $@$uLFޫ"O|p}/ϲ;w6T5DqYlɌ8R/q_E.^9.L&l'+F|7yꩇBܙ;;m{g)ϰk5VVcW^~:coޫxqxTVjj/5wn/ֽJ4RrlGRT \`eLZMoBsa,V@ 'XL LիqBH$"Qѥ)jREHU22XI(r6Q _b @EynpABRj'LSQ#&b| п|/7;]`WZkz]{Y!bkqs'۷}GT2!d\盘֙2s>el<3?SfMc9j0Ǯe"2s}ED\{䳟H|p2)eK5-c5xa֝bٕ~o:)R_MhsnLhг9"WV;o]|s{ӫϞ^\hn*.Ŭ 缑)8ΊtRVU)3]^]upww8S. gvዬ錆l-}խ)̃ 3LCIZMtt 0EbTh[I"$YѢp2J\*UUUR%UF(8lZk/[Y>UM[DNP- fw=fc=N}xý{/^͌  "i1pZ(ZU|vάEe>1&XAHP? H)$PD~HfY󖀭\HlE29I^ߌ/8^oP@b$$ LHJvDA_MB,w.]=s|Yؽ{!':OUj}ITKj*jduT@/^GαMDR,c~_E &?w=Hl k}։VR8L aL杆(MoZ3@lx6z<'b.ͦLfg?b!ȸ4l6Sέ;o.[SS}&&G{xck./|"w5^,tzK&f'Ϝl*-{{b)cnd8P K ̞%ÃQhIioqٯ jH)jA6AH# %$= ό<`KHP$e袺@bJ,!X90IHI9h]gN]j=̪#T$|oxI Xb!xҨSR?fCYJF=3/esZjJ~eTc305E W4 nŋrl1{;ZՆ])ڽ߿yI h25j$Qe4N"Yvs.^VWB"R ȈXdnIEUSMoR*@LMSRK,ĠAɳy~7s*,TC̋{?߳@`fG!9WD@(ئ9F :р u>,8ʖцV؂(%fN):" G*ȓ?l~c8tηfUHJvpx=Е޼9& V4[{f<WVO8qg}h!ƀw|8v;w{?Cw۷E~¥`k, 'Wv#k ț}7$Y^9Yǒ1aF3B qy@ J90f冹af(XD0BE$RQE' BEePi5rqGÁw\EL "^x饕oED Д owypp7ʿ>J]# wUE[XX)ј2yIPVf5*kWdu墁N?eY9ůl0DsޓcK]nO'~͞>}ޭYE<m꺩Riū=!$TFy9~տḰ@I21%.ְ&T[D1UI "AtV}3_<{Ec}"oAV3cvfP$j€@G|(Pt'>_F@O'LDYD\UU,ge$ٴI]dSkF+WWf44Zl2:}T;wn>wpbeUaUzwogEqtʅ]O||{0;cpp拯svщKPwN'CLk'V Lg)ÉfY48r׍1(`@`*d8*p (N@PlZ̠&U I de)VVV)+'*c9gUe]s "&A/6yLW" BDյ2I9|X3+cx/moݛ 2H(@+?.>rA;dS&SJjIULcJIA4&5M1*L!zS^~ WUU@zv#cjv>AIgL?կqV|ifYOzia  .WoU2PfhJLJΥHFݷ_n4=2ON yiI*5T$N$3_lf*  V9bYȮ6믗e MjR{mZ^}s8w K{z E"! 2yHU(˲*$ eY 76߻=T4Te9t6"yjӘK.>U5k4v7-j4흝fY]3ڍdZV/*Y=.NO8ljuq}cs`eDfY5z(B0I~<ݸά;|sfmBNb\tSIQ3RsfrnZ 4"@WdP % 4 Q2׈>$TA8%L1SXiUjlfۍzS}>x4I>*/?ޝ{^ P gtp7_ʿ,/WDŽi-鹿HHDZB/8qZ6@rޥX_<מx6|vw?*%S13 ̵#j@Ls~'f@5P!}0#sHQ`qDZkٖ5AiupH9̎-Tl6KAB vɵՕwnnl53B"1)Xn8-h4o߾ L̛;[ÕFnopf鳧ʅsgNf gB f\L]~wʉơܸgV/.N WW`Rln!bכ&+KN`0'YY66ln.QG}pSJ!]-$>{|*$W)cfN 2IUF@Td;+Kn>&UԪ9cIN˽K7|cggϢ1bU4ZyT b>\'@r@ ]фbdsAPDUR1EJ&a?a[x?P efpg홐@/]rg>SU'/~mv 9c<(-+7蹿\<}ccҏbfOPYGլݽv =T-xԹ[>IXAM|Ϯ'?q5M"!jTԒTrygfΝ/-VT ,3j:\XxڹoYz{o/4Ld䱶G M|Ï&jOsfC>TùI2UɒhR_cc),gBo6 ϼ=IJ`x8-ɤ|s7sbU9K,gͭr6;8;[)/|pAfv[li`Fy/~Bp08l[Vc{kŰZ[;i;wh\ݹ5L&Ӵ=5d2i62$IY*feYV.]Λm9aze 3*r+|rH ǬcAUp d$H R0Fe9U8&3Oej!G.bMZ"srFfՅ."ƴ晳,O8oĥ^72GT۰##g@HHJ|̹˾h|rԇ~<ý qs7|(Z+H4"6ݷEúQe$03M`D\U+WIk _)9Dcǀ@ETEjBP'/f'&&D"f"ﲂs[o_e}Nlw! 1[43e;&"&HT%"1yOdڽl@:Z?=w:_""EWMbC%"IET)"Z md_eYͦn7JzC2 O?~`{?Nn|z ddRn5̝;R v۝V3[]^s 30bnlA780܈0UVpTC5 Z ^kMϙC1;yĵ>v={@o\[/|ה@whuA!ͭ{WhTnow+vώ [~F+ǑuYQ4RNȱ)S-0 .^|]Of.ǣwz7`̈R˦TD%Wյ#Yam7:yGݛ5ّ%gbw=VjjRnp(͌"Od&3d7l8CEC6\յP}Dww=H"Qh5,޸m)I<;&2!"byYe7ѭnݼlemnDDWT6N s,Ή0()~ gؐr@HTr22J:\e'il ԊhUE~N{$+4MUUl6uaGLݢrwO޿qf)/t+K~w fg:B]7pT#TiǻMe]3I[,ټTprOӕ NQU#P"VVkԳz}"8q12lP#Lh2?unEu兗ѿ4nȻ\tˬpFkʆ謐u84s~!}TB2ֵ֓|ZU/FEQ<ng.c"/YX#GD3&v\T+_^YSn|Ҕ1RNזֿ$N/8wEyq,"b'ιb^]K?_O{٧גjQHKp&9 |Q]کsÇwop16Ic謚}_.=ȲOPMa&.s,LHF♙@,DL͝g>Cn]un OQn U{Zd4Uu~}\t2i#‡p0N0kFE۹sc-+/>\.;iGw;uoH(h>X Z FklTvҕdr:l6=<:3V7N/R/6Ͼ;aOuG qF55e@B`p3V0FPU5ԪA(C352N˦ |囿V7Ksnۍaq漈g8gMc M!KQaU}><y!Yو !g0LT4s\~g?޾Rg(9n % 1X 1 IODBNbO 1Pj6 4,'=!a,D5E`} ϲ*\͔눾teq[ddb>BGyׯ,w\9UY[A/-E7>y㍯g?xW9gC DkƤ$ QMuTM.CUբ*_+qϿݕa!.2QKVf"(3,:1aP o˯.{~MUVV(@jMHXTuƓ~>~4??Ka1YbИBD_lzx/mwscN;1̭B@D Fj| 6b [{PCc%\- #RFV[c W^.^`ha6_uCw16M|ttЄν;;lż\_{^xe~0\zs݇;nye5~;[ae=N_x_HC]>w{2߼~>^Z]9f{~ qnCfeÇY9ftth/DhU3ZD[X5G dFEVΕrW+B&YTZPYXE/\xW4<aHR1p$ 3Vw>$Nq132:&򦀎.W$]a:EBru߇>Gus.ejf3L\!;es! gY~5s.5 )=A8RJQ7߻yig_" YSu3f?+o-n0nKDUyΆ;oG:ż5MѭE:\vz|o-/lg.t{x4Lg[._Yp\s"GixU(o޺e~0'"nqP*-W˱6֝/|ͳn9&x\|՗.--xVWrh D~.A!'(jdxVDeJB\âFIPj2Zz:oʪx4n_MYxܹ|rr!2oDBl#J} X89pF.?~oz:1%r(i4&LS%s듯_w?^Ofy|L|-3 -a xSS-/- ñfQaDNQFGS,K}C MlMV_{g,;zKa>c '2oj2,™8֠ȔFhQ<2 $e v" jo r"Ȏs/I)O7vGFO hz ??OX ('=;J !*{<893 ѢG5(g3[Ƈbn,K 0%yYI~$$wr8+~e||pw❈xD , )g@ڐjmkID'i$FDʌO?sXFW3BL0_-P=Y'Tdy| <&fOL8JPMAZ_,F##RƤP1 g"$X D fJ!rIlzEP q^3+Y$$:J9f./TUx{;G;yo~̙3q7]28_|ic}k>zKv?i3oh<_.}tܹwNQf uYNt:wn<YYMeE>ۻGY]oբdW.{bmbip=z{P%ƭN}:,h^֪5'\Tf{pA$P1 FSs\heՔUujMd:W~ zgțJ Œj!ԉr1%q,)$qS =83A8FN)mG_}(3#?5f.s,t<:$&FDBl#TIb)6f&S'd0'`6a7X;{ryVcy]03ZDD$BREXਪʬj\fD,zrM3q,vGDHRdMAF-K4go$-] [)ALzMz->3ؓ;1O>dȑ(˼s~oڵO޾=N.^~vs2RϻvgחWg|c+>}w{o(IM}_D7 2JA"9H0H0Q)ƦfMUZ4U2֡CcBS;_]T=s]sG :) kB?W3RhJ2:/Q 6% !(ΥWxƵO=?-u_%$)&7o'7bjg1ވ8c鸓j}ZNF3e*x- fQU7YYhD~68I6CXEvDcH pJڰS`Rj[sr7W'4`2戚wP,x3B16|lm6{# 1@ļ{=yD޾u/~F`ymW4WsV.>.ۏX;sͷt>#8A)^S~;_{vnv7~1~xxx8^^]Daow9ꪚ.JE)̯-ס^ܿYu+aXT)ELp`3; |b[Y0Q56bӄ:6ZGMkxL2 PIO&E}E F$*"L5y hJK ,jo`d aY޳7D䄛إJay -!ggff#a { Jf'. nCa#/Z msLʼn3ZW.IS GRkpgx߻S2CIv$D-==|<)A& Z@ch d*QH[Rd&#eJ Q&J@DD'm1n?͌>fijg'3~ḉ&I D|d32p&SS":|^͠\7[huu[˃~!訚uu<~a/?~?|?\Xs}{^!,#xpzkd?-rhPhzY7^7S{gwlp,dzV [u9.a8:uס>r_|'mo|;,Qs8rsZƁ r$JRڬJhU,MafW/sN{^ԋ&*V!j1e `}O„'Q`2fQU a)C@fyN,޽Q͎!$Sbk kӀU) !jyin9%J*%"198Uh0Su<-Ҵn/>kY$O>x/#$cqr3{C8!Le0xiAff9(8Q"Fofb2p;֣'yt񤳱~$f`J'5r@smԓ708#Q#s==xEDE7;YVת*^Ѣ"(άop%gqv7s晭!;rb^[]߿ukg:_ys[y}/4oG;:8ڿx3G/]8Yݣd7@;*5<[>,{yByo}n:K228aXo>zXWwzwn~u76_8儙_8”2sqٛ e} ` bKVMD1ukkTB5s>2C  'Y7/I&KQt:ye:,Ib ˈ&#`M#k, }#'{v|L]Sdb!!{Y?hӀjFК-Um5rNA|kNrbz1 }jB#! DlȄPNf Mr%*H3[AXR*!-E<MwӨDHӗ>C 9M$#QM*GP/s>ާ2ll,-jq /qvj4͍lp?;Zd;{.n>sgumm>-C}'1BW; 6ṱ{^-z;q B獒gz4:ClHQ 1ԒwJi17 ~6]qv}3u̱I讬{j{SUvKcb2#"pvC !5ĨZcYӉUiUjbUig+o֙ ۿ/Nv,N>yD qz|KrG7︶l6@Sg|v"2LFٰe9p.hPS6cؾBbU;>^D#\[h'eAɭ \}*y7 σ˨?ԫQWyqb ӾQ0rɤ0 J#N R)ALjB,Q)}54E{(ڥ}"<&ӌ|"R'!?ؙ8fFsdC i;B uܱoYX)[^yR'bqtxg{緶;;+d|4&^}Pfלs뛽`ZF,&G颌& *&􆽢s|<μz養q4.|8<-n߻xh5=Ko߾[fy7O/_8ɒi3; EH [T:rFBVP^RN C=b<z,D^,ӭ`ө(|9KobIwb 1P"JU-vL˦a=Ys']DP#$t,)hskNQ`f-].nx{W6<{;]fv,|2v3<,q=[~eu<Y Q[;}8Rc`a 1Xc]WWް7wwo~|K[W.ƌ~Wo~|poc2$yGy¥3g'sxO:{vsgʅsGU_/œ5;:٢y {N6 &,΃16kjW^/@SU٣{w3ԯ^1za3} CeK 9E /\NH#^#ZXкjE/*F(b,.$f5TTt9H5MkYd=nܻ]d}"c"#j5RDchpM Qno};ϑPwneHorԛ%&Q'#zP/nu*#MwVن 2&.\ f@0E6k-ȱө qT#7"1D*"N"j0E f!D"NwHSnSC: U"1)B0X0xQ6cO7 YTu2zgggmuyU3[,fGۛK+1ٍbnZ?zî{y77Ν*h$e9_[Yz{{rU"=ػ'ɝ;wWWqU7M̮^Ǩj ]_[|eq{g_yb|.xN<ٳIwwE KFJΛd oDCb;z9jeSr,nXNMݽ%AHFCi`3EM=ǩh/Pfй'uT&?3ըjP o?JD|[fBJHpM"x}!-Q-D (.^싈Lܽ7e-1P""Z&flpFь;j c@!sqfeT0UP6/ D7M`)=d2v|AR Aq\z!IL5VERel< :=! Э,RLJa/]}WX&2v-/pӛ2ۿ¥ "|<;U]}vLg jhp7׾-\Y/Y<+´Z,n;djrnQbTUUdX_Pf= !w,QX,1\g {N9NEnGI/#90\R]U,,8-E ub`pN߿}[@ Sp效""Z#2RSF A5tmEKPYH|4ը@*ZWշ]^WW>}oO*Zx[_- q꺪u xp09r^^/|6"H\:TP3f|6,p?y&ưgqe' Ν1;у;7>poe#gQs .2b0 nS/f:> $m$m-AjSNy5~BOߊw !HMCiGBSO|We4|*^ll)KS$%R"b "h!Dvb큊8zvu))]ejaAi6MNRz#6"0 "C " qj URJeLiu- 4%E~~WN(YDD'սò" nl?O'Eg7˩ӑ 縪2粬s}@/]~3wx0yp|^C9ݻNE 4*"+޼Ԏdvv<Ѡ(bUŦAV.W_9LJ.u/vkDU ލZmh̭xB%L-IX]䆖HH$@޴,姎*2(OcD&Ehtry",pṿmh褉ff1ZhX&$&G7%vD`gƨĊƴM4Nq̫_sDd1ݹA#`r3gC8x }N~Jz.^ʝ`f;d옝9J#Kx37FX` F E0FafdpD)Tۭ4i1[*982QbJ1wLL OwVljܥ$.b u,U&Uߞ(Y"4\Z)2~x{hGArVtf KV`}} o{4_ă ~;R 4}?^,kbaU׿p<g1.Krzr%ivv)hupr0wVV^y_W+kA2(hS(GakقM:T䨧XoH+# Њ$\r8F=|zDEB'H&;tp목냃arZ "|uڙ-a?XZ,#44+L3qQ"h#u##j)ڐjZX~wROJR9sf8#J9Ҏ3W-y82E"6`8Ϝ?r23)@` a 5,)q0`P`AcT1(_5 `"A4 DFSS}QJR%؃R m+3:Qv[4hţ$GHmS Q_^>W &;^X83VWn|zgl6tΞNTIh$>A:l<_s"|?)S޽7^^\BdUU8fDqYm:Y UB=OSg1V Gdzhn)V/(:!#ŧa5jH*@jhՂ 0hf6k./|N]bs~.NSuO_G81 ,nIK3m9Ug];j6d9A-Ę h̑Q4fJvLye:UY򄙴kQ"anBP`!ѐ&4jQ<:Ysog|(,H2""BdI <1Oi9 HIS wFO1i'剱|S퉭\6@2ְ1McO5Ea2i3fEd]%h$9ԑHВAڶ^ .ZPJ@&+L lLN%O c&Ǽc*/{ᑙcLa㴞Tؔ{ݮt:zuu%/rwZ0(\XLpO#eceCib0?MG??Λ_w1qDX\efu=t;{ʆåA)͠G| V )ԢщڏՍ2u`Zr X`!lF!TLi[ʻy'pg|bBh2U=u4]*1IjfFje & Afi/ Dd-uND" r-c0y:>ji7龍GY\MUb"<)Tu,uscwLJwsZPIH8;[))&'ՆMOO\5)9Iz%G~;j<"`]7mshP ##% bjQ M`ĨJDY,2IȈ!<)DXI7))4M'HƞmØ@4;]{^wQ*bk(`g7   _ßܾuIl2ygw."^c(Syhٝɿn9՚;jԄs{T ]'<|17Mhlr(ז:哽G^gSBJv—xQk++C:PkF5Ŋll~:B 22@ĉ"NS6kHD@X,PPr-=TI5,yTxNIkjLZxB !rC Bb$6H@OE6?>j%BLIkjM)i5#ojUU i(v;!Dm8 @x^ԹǧIJ!?#TA%b&{fH FFhI@*H- 44*BlfQ+T!Z jMvbS Fb $jO&hؒ+A#SRvvӛᒫ߱"8R B[MKTҿ )DMFw"ԡ\^doR4UYtիW/$a3Y!CLJG0+lsmNᴩGN4MÕ?t"dǣ^S eU v>w=9tYY-Vh4Ʋ YZ=iVu/]5gQ?{@jQR{܎JJknuE2wHpukuCeg˰EOMEUJ5?D"c5D;B`$BgfD%I#t8jҵ&k&jH ;KкxED8->n1= IXD6j4]`aV]~;w{|S 0O"1a"2s~V_Z3dPm'<ƱC罟NU3C&^Z\]]^>\D#uU+}u4u84jֶ TR0_b;FPDArVWTh4rM4ϥn\{/ӕWoLu=(dOEHYJPU! r>kA8׃)9̼BvuP1PI T ?^U LTA-ƔD%40ʫ1o 107Au=f}u)& 3I 4ee=I@ h~kb(.\|@OƓئQ;U 1NVdtpye~myp޸mƽN v}i {pbwߝ G+5CNOOsRT.݇_65~8o7!Lެ@|(Bgm8"TcE"D!y˧ygd9e Bɟym@dYhfbRY`1qLG򙧞}տ;&:1)aTfIդ'wiRHR1!4 )ic^zWzM YHzxxWeLH>C4!3D @Q@u  $ȱa ) )a%A r2Mȝ| f(j T ,Wj&"YaDu܎Z}#P'k4͚w| 6;L"QJjǣ\CYY,"y`Dj"z@DUU31Q.Du???׽x[oUw\o~q~}uөh޹=O}i3Alf.,,νt}UEUTuULԨph;w 0#߭:( w|]KmlݹskV`/48k߻seUɌa ˳Ê3"2R !>yUeT(DAEF+l~yCD=Ñgyh!:&R(b,HL! ! aԤIlWoŅKٍAƍ[\Ư~ayi歛b;5v:n9\[?qw&P:nL ִ*p Ұu[nӃN'xzc𰳻߸qS9 Q,Ѭ 86|s* Acy+XR PeCV@ f f%B :F9H1`y# !+8N X{5` OJq5D 9!J5DIX9% _7 x 8*p $ÙSU#Uv'H"`tʙs F'9@|?o;~wY̘Lꀀ:"D 峘JV=t)!OF>ɖ;1ĀYyQ( g;:E52045dj,[y T1a]ͯngnmNYF"%DKyń9 ʔIކ1g,534; * "kcJ9B`f;<7i"Q1X* =uj.`weiKjƫk4]y_R)b:POoo ;emChv2;! Gy IlV-*XUUJ3 ֽ*LǯpuyفznUU0mCr{{L7?Opf}331/M?%x0 `,a{|XTC"B@#4kxO0U]Xڸ}W%36u*IL8>d3%jRj,pD@L$ IM"=L\oK_]1;TRC@`L$ @r<-"i}ئK_ڼyVV@b'Zx !|_?ڻ׫DHfREH#sĈ3=a3'?(%+&v2pAh{"-:HR.Dj.rz6ώ[6L5U@3Qe"*I$/::4 "0v]%\ vGYpGYATf=nhbDW$ fY4aՇ!ޡ94%KJ$c1<00bp8@gU}7o߾}g~ͭygeq3[US5.|V Tz2U_蘛w{H@bچ0m{Nih}y[pF1Q0?~ܠjf_xꉍã]X'>rYs( "̌j3}/d?dP/ LAH-d0j ILSrNU3wRڣ哎G6.|w>zh&'"3U"!/|BLuAD%%MbZEQAIc0hBݪOG&9Ox΁1c9SJ݅W7'2|A>eM #GqGObEBH$Ar-"x#@$BH._~7UP~ j`@3k&IʓOSR;MR2P b0n5>«vRޜ10z>hS;UMAʪ5ϔ*U3fɷeifVw8L8T%&}K8j>T5ƘTU$i 5!3J\3$w勝*+_ucEvw  iMƏ~]pZNp{{w}J滓4Ae,ʢ&uQ;x}47M7oԌ{iC \w6F[?}_YZ;[^uURUEMCa 5Ԭ͖";~'%h}_8l!* !ćKkD&㣓6Zw4U*@@"CԄUSj%q**5&M"&,1Dk$Y4NO[?1 mntRlzNy,fGZ)ɔOx ȉ*G|^O/heC9}OU"@”G̔pog~u#U݁Dup !u@2f&L4[MLrGoD'PoI<9y#2Ts (ss@ AbacB&(yϢJyn<đ7RL94ux35 QLbclS1@*bji7 `*Qf4'Ui2$4ATɢH1a5M-}+0EQ\ǘZ_TO^Qleh"(q9wNCJ1 94S̞Vʣ9E`Vf*ƇwKxX "3ݾuceLzd:rw~Z`PRV`3ASU@BL$Rr)X$"*IMR$N}嫿yҿN 84<EĬA ;pE`*f7\v #`F AsE<:CD*'$]QAL'PD=t|Y\DJ i)B$._~JWCbY¹g~өø}z]W~z_5ݢeM4؎;UW{uuf:ݿ4 c{x&WH`I9N64dL&s̮dPkDzpfuw iZ]N#~k<7ι W+j(rH7>x;;#U"R]]&IS&씅ǪYoݽ^SfL,9OQ@,fI$O{f @>.Epv jw{D=JOkf Kfd9TȒjțA/TT4i~ԪvL4L<̫Ͽ/J0C,uH3"C32cU!T SNT,B'> 95*">'RI;13T׾m>ړq8<Ҙs1޼(B{wx47crD;u&j1=p2{3W7O)MN5dT%R2B3sA0 y? hhRb+vChfG+w⓷<@@1P`"2#$RSA 044|p$dbjBmj_Oc?3=rq2 #f2aA?v)z3 aJ>TJJF3PDU&Ik$N M*Ϸ]J1ueUƶmSDe\~ Ƶ3snyƍёgA(jA}póvSg{7pԶE݃ hҩK{ӃXؠ|]UcH]J39W{ECb׭dgw?FYX{9ժ89LeVGxvkݽ} Ͼ Pћ )iyC~ǘld*HAyH; u^zG-,fI.RJ}w~\mԚ$GD\~j0Mh6EHFQ)\畯w卶H*_'KOޡ'-+ 6BCT5Q2fSz:@B[%S?|Ed͕g][[7>;U0f 蔌3!%&`L O@xo2{rw,e׎?Dwn\?jbxsv{mRDeR2FC6#CDbNM2Ɏl3F$j&LW<զp#KC`t!Qn3eԙCL (0LN N3ʔTfoE?5}6/Yޑ/+{f&I̓jH8󄙀ٗ6V%LB: \yҹ(m[zp/5MP;c>fr'0ԝÃn`To muU1HUSUn=Kf14nЩicc~aim{uo"h): 7ln-sQ ߩ:{N}h 0È#<KDP4@2c(c2l%X Q=OpV.=WO^xG%k SB&$"( 9V RJ RIR 1MbR=+=JTw 5tse#f S2D !{Խ3"Nz>싾>uMMwq_ݪW䀝 0  "9Ƀ/j\xdCUu=mJ,+Oh e+_};K4q D H`f́t9@UJԄ <|# ꪇY0_9@tZagS$ J\P3BTE2SOX9ɝ>fETA|c:\YS"R6/)&&4[̹ج~Jʽnu6ΝQq랉$SkDn܄,e@ZY;wxt}g7N—ER,]'q]$4`tض!V[_YvΗuYt|=U9sѸqyeuʩLLC ~wvq4%겨q\3J Zhw\|Ҟ|jAy(X*#QDARccY$K"r.!\|szks=*JL 0&4%0I^RTK/= _AHg?>Ԏ A 5L8YJ6 L AFѫѲ(­wt-s_-)>QթmߺzNA;L 90DU3PdbHjfflKE%r tH 3s_! Wze[AJ`)،f3'(a&6ijDΞ}ɕUA GW,9|V #5;GDf@ɰ(D##Dbr"  ]Ijr3"j db%gpt ɉc80L+8MGcµy++KKAD쏎wzʱ4GݢEWT. ֌IQcw`_E]WLF hteEzt|wnV鳚{+ +L`_no09@jU}ɟ;gA/ba냟Ͻ(yGhGe}/f <@GRKPщ$#d*wDCBs=@"֝*|+0M>ԫ~ïӤ:SB$V@D (i"I$:6x '^>y`BpM{G;Ω0e['jE F|(BoF[84Y_׾Iߩ3"vYz젟&ϲ+vb IXDɏ/f[ZXґ/:!2fw (Y:BU Iq/}eж4t7^:&bf6dS3Pl#_  0s(b3Ő ѩ&fy{ $=Dv, %Rd04tq ?Cå۶Wsf 9Q}YJ  & !LJt:Fs/o.Jxۭ{ۃnVʄ&}ԃu`D5[5!Oba\0GQu9((M{_0M[Հy7PIh<Mi{d*)f"APD+\Yg߻qB J" ݢoռaQ$_T8_A dShSʫҼw*s%EuNg9=n΂$7j|7FOzb(VE{ea|2mCIT"b-*XD*0SػXO7dM݂tr?O=yj}o/&ucp c$9`6B32OHi^R38_ 3nѻu<ɑ_+fo,={"Bs "|83RԶm;[_z&_:esq^.)ΠjhfPYn9qϛ"Ę1#eqGP#jtN?ɘy&KcJI\M)9W&K-&qfPBb ^p颪"Z Qlw ?RUp8<]_{=R-yeZ-m1~]k;z$(T2gNHmL $Ri+R\\X Ednaiܴ j:iow=D]ۄ=V;:bW0+K0qӯwAƷU駟%iJ>'sʋ #PC2*1E@1N0EȈ!9FAĦ\2W/tꕯ~R׮u1Mm|P?񋗞B|tgz?{$`ЄQ $C՜(${#.Uи[qȥ~m?5M~V^Ag;{c&##`d\ h=,jP9 (yX8koDinwv~kwn]#Jǥ|V"*MX4ͯW_];uM'*sW1;"$D&D#tH!⌾4QM{@#C6Apszt_o(ye)%&%:??LEjhh!IC&h<=|B],ӝ_Ms"7Iö[N=:wgJpoW>I3)%ғWMC_ʲK\F&F^IDp2s_W˫^H uff3-T &# yPT1P1O/+;Ԯ4Kf;:0|1t痾'!ݼ۹cHA Ο9{Ͼҟe;dC>U-?sj8rϫP5t!FvP 䴬}>@8b'>H6b>ْ=/c'&"rr Z A4WT1bQ`en}7z۷n,/ͥ4u˕"wz'/_/.\e9}wwg7wo,,t&v4mʊ'櫯|ntowݻ;;æ(M'6۶xŸ8?mm6mD_ t2]{{u0n}tIG{^U\u<=tvtt%Q!? ~iFbPL D  ԆvdJ6%/(bP3D}noWC Km?ɔ>Q!~0ۯ;L FBUlfB`m'@g(ڨQPh9GZSY~O=Ͽ>i]r̩?SX" 'E"2uq+> tFU5A#vzժ51|gCJ ^|blLJûwo[_?՟[0'C=:V=?LD9x"Ec c$0>ɥbCxc(J,<:SSdAgȆ LbI\Ҹi^Wסa;_3,D# QbJJnܻsvikgOX=ug~~ng/dڭʟ񳍕奕Aj/ +-:h^|Źݭ;UKvSg\Ya<AbZ=zcO>Fi2u/hʈnݯѸi[EM K vujDIv :L 3cJuYzb$wI0gcPCW{(.9?|E#:K"]3E2ɂ*4e4Fʮ6ll\N)_/~e]p|ltүe )DATD@x_k!M"Dh!Rrm|gU?OHO1SY_{?ؼy0isZB3mAUWOSHVd#mp]B#N@hv %%_uU$ЦT<EP_cWV|p @1)0y  ccd b$$`_n`ag>AO_̼ä{3J]UPQVb$x$X }O\a4V_)3JBdDq1՟ϼ /meu&ˁ0"s^o,ioYQ,#"#9dL4<_~1nSdx7|gͤI<C4Lm@9I$Na9S.AD& 3#o聼D$ tߊh>#b7OMcR`1hxG6W^w_[9sK;Y@;y3_ŅpWٹb*`imHҼѨ_ [wo61,=v> =Z}YՎ˪VWO?{w*Iݺ_s`n. ǽFOkK1SI6Nu+wg7v}yrٚp|p47w{77`~i{}iB= <꣕f{otu\;|Sͅ@JtjI,YjGѯ~zխdu$J$͙@7{L?s* p4ƍP;;skX=]D0R}$c L74*1 Yߧ T+v7~פRoJ%Ԭt5YL>(<(X,4}@BbDo56}hUz7?\\Rwx+ۿ'g}v #]`82֋I_ذ.&RDR`P=\<_r<;WFGP2iKG#7!Ɇw(jNgobXX!|S(A"2}6?_$o]ǫׯ@Ha(P$<x;?;/Ͽ+By^G_?wO}yy1,TԱfxxWk2՛"KmN"!͢.Oӯ/ë]}UD{2Nd CR 3TgZ`jf\sm09j "Z2T*mk1*yH)ǯ oT3czELg# c\pon<8X?y^|y?w_~ţ+Wnp֕<9Ʒ_fWof.SP黅j=fgϿʫ}~'?xG? k_Xc=V)]=d%FnL5:y8exf`tDε6ń6z%B\B"k t:JexO~aW~/{-@g0Na UF7vDm;[G&@$0:VڴŐvM5 6~f1_5o)gxmy)bQR?y?8{r:}^^Ƀ}ᲳXj\r2<գ^n\ya[Ͽ뷮|tv6l>zbmKDt|Iɚnߺя,pq8>䋇'T"' Xv51׫ԇOpz|jfo*yj%UPOnBO9IGKu:P#=3{}҅G=)P86P53GP+Gw·}L?Cgjfy+EiL4MC{5@㺅jl 9;8dWiVË2B "k:;X_tvxo/?ӗ^~>OJsg"/vź/Q_қȔ@f1*p~r1<gߟʆQUU,u[luBT~] ֋ZA4}QLX-#DHSMK9Duc[7>6'э ,٣Q~3T[U)~ǀD,}ѫ>xn޺`zߺ~ܵk{/N_\ ^^I=<:y׋->u믽o}w/whqY慝DxFi{$׎~z?{wz~wG@Wdx?+eU?4$b/vX^~q/nڕ__uRYd+2hZ&NXGov@8^.Ce{pok5rpw/s/8"b)񓱯$ZX6~A#T>x{'}oMH)Lؕȡay:5~hGi[ԑ ҊФND#!eJEB 8]+D~z?׿s/1oZdٓ?uS@WT ~2G'WxT u6rc`Dk%?ֻ׾qtr,ƶPk#6mɰxrzv:u\e:Y+WDăa=~O}zo-O޽{N;r(((Sǣ .Xo? GI|Ǵ-VJÇZ'c}ۏ~ׯ^9Z\<8}ܵwr֛$,j]qu<*"Qu}~޷\?zrѓ?.sK_=fg.Sq{oz++/BELC$n@~d^"wJu G6IMTwaPBS VDR)IM$8Xwf0J80ܹ{p_–Pb{e֗g|WNN^酣7k[ 1sv ]t"hL@lb躃nqKW^x˳G?zѯ.;/..߼o~sf"ٙ@>0r!UI#b=XDH)BfB70"=Z.c?H|()5X:(!GdPQ%EDn5vGU!<)D @y!UkfC;/_AL}D0jQQվ3]_R2MMkRvT20Xߦ@ XP.532-Pv*J 8sծHEF*ҫKD"ƨO>~w%ڝgXd¬pZOjci!d3X7$^ڇ͵yǸD;wh|69" &!f\مoa2Zql 8va (H"AUi*zFVb~xrs/Ye/buRk7C9U@K3$RHqfϸ}ddV"IkcU"A(:GYd ( ):Sbm~QV~% \#Kf8u*^j I tSdrydhr@:J1h1<{@TH'MeK5¡p2" )}Nmd"("ҙP)5&ED*;MkUU4͑' ԍua !P.n Ք)ӱqiڡD K۔ofi#kԨ5tA0!@ dZ8g#Ewu pOZptTKL^F1ZC Tب7?$81!zA`Ts1!b%B\MxݚңrR⽎'_|b"ID@ "JCUR/WO/λNn%c=,n~w\s;8=_{a\](]89ZO./F,˱`1uS 1B1̤M (4:)k0ERHH I6NTyyDT󞽡t$l$29xuVOob%r@0QQf6dDCDK[ӑDs#KKN(DDL@4uq &)HIECh,N;3-EՔdBފH{=]fL,9.:"Z"GuiEP-km Ccm -[j%.@/PU fDfP10VY%%z$#RLYgYWЙ<JBQL` C9ܤ_Ô)bzB@f=%%!fIZhq"&&V#J&RdL[j5i魈mvᵾRy^eQ­jmg4mCɜ!F9+ʷi&K--E(^y[FjNPh [%Sƾ5G6+1_-S]M3i٬CVӘ. ,R Xa&`} eei,@(A,M+?Orlcrqˮz3{,3Gw2BZ{/]9,}twh K|n}GUCLhe]zDW$)jvz'7v?*m8ԊqOmΙ#. ft#/tz6Kd@PY$(Ͻ"bV3mt`6qD)c&051L̨`DJ A3TiLEP\̔&0TUSk{gu%!щaL"H1I߇_ͺapS00~+M ܡ ME'EbK Ѳ) D$mg:ldsh~UUfsRhnԶlAxjRЂ~&Knȡ/!MXN%D)9}rYZcl)JɬJddDh6 QEG7͢ -YL 'BJuqQ@nJ(PvYSe{&-!?;0Z6h$Ʉ"4N/!G( dvÍY{A.N&6C _t͔Vx-V7_ҫwݻڭO/BиԴN#sY쭯棋uU֡WufLa=v-K-1>Q(g~2},zRTUDUPj>K<"hk`[\{Gu7Xud Si+Ӓx(]1CQ+hј`(dXa2fT´5a2XA*pѽ7DpN@<ӝH2jРUUIzve)t,F&Ո$Xrr&A7f1z,j CHJ4q0fֈ@AR]ٚB*ҬGP,"HDԘw6Mñr0HAŒPѾSoHV ̔жL*H* ؁Ƕ%)Li@@#rqZ^Wn6$,u+dO)1YDʤ$@A _ %"lQʙlFc-%1vQ .ENa% tKb@;Kah#I{1% te(e2Nd&rq|[u}y'?X٬z{tv:[]+E.fo ,=z\=X hwэo>wcޗGpT5F+(۷x?`N|2EEY|ŤƧNR?H3e9n̈VPQZk zB"HI7E:2B<01 2za3t H/N%ELHO6IdINJF fD)'BRZ:j͐A,qMo"0,GEx/ ,Yb$5HFpZS! n9SȊjxHKbT8J"i: H2%3o2;^}H!HZ[*SKIA}[6E&PNc65P @4^qLi6#c ai{Sb 6>4Ceme 4ӝ)D] ڡHL$YIM &`Lc$Uh!"R>c#[HdZ{ ͨV2#tiAB4" LɄmyGtGu7Uh)CFpHTtL̊0*r0$DD*:0eGL D2M.7¶˧P$vIZiHJdn u+^ ؎M@7]"$tE&yIfJJi)Y(%W0.-mY&.kZS{T"?ݜcR D%tt/$n@̎kFlF%X#"Bv"H7K]' dii K#`u$4@ $RPnytp=BpB92VaD b =sA3 -"@mvm &!n)k;Bw's_0 c^! JYkԔAL:$8,(NԬ3'!"Ż5LfUG}4; B%[¥Fͨ)@!26d1Bd[O%>f#ERNH`vꞪ01Dg)ɔy)ViBLМI0֜)*H`C6,)ED4+ 4A3 !<ʦ fw@ȴ=i^(PHDFӰ3B4C3T3`wqǪv p$f,` =)޶l\&itē'"7z Z#'E=ފ{T&`۠OJ֦~+oeQ!}$hDO rͺn"mB8uݭh)?HD2!սLҹ<cG'Vׁ͚hBIj3iay~yɟU"!3)mC}ͭ~I-z7P4f91Au9fL2*c>1$+3U(ֈ(Pp0 :-`=ޒ At Pچ8$ԄDFZg,j`1SȨ"[dMG2U*P w]5R0(@h<3,LN1:2kXEL F"d!ȴ5ܰM<$㶖mxV"ffSaޮ۴Veno45k[ qXfhe ʤo jV[Գ45m[)@يcpZܩ[ 8m/-I@xjc0 MߙLvQ0 >G~i{\mh̲D8r;Fm4o//‡,;xOv~Y_&~gQDѼdOۗe&ՂLAbm`52dHV@u)*7(Aʑfpd25ii% n[Pp`ʆ #Fp2(=UM15=k42T#jFYEDMdluatILG9dHH;V/*Lx DI!ײ1 -8ӆ4M<=64nQ RL(1NR0`JU%m푙lbCNO/Yz>#$È/rL|nAVYCId]qF ÅiDDfi2MQO: -kWIm5Nz01IQ!YT&6QgNQRT1 e5" IJp4{MbZw-s֘jPQT\)j׉hPUG֟Tc<7,VL~3Z"=G CB24KZ::d}:ƀh~3]_z)FN2s}1"smD&@IfLVlpƶp$($g[6Af;!lWE"RQ 'Vɴ` ~̢6zldv()ۉWOψ!zi/hcДN[=D:?YFEX i\ %;x(Z$#cڼkhRfSE&ńpDnUL̶{]N:- Jk] ]ts+"shk"@T:K#BbcAӰ E:tv M.AdP)"3IM8Qf32ٌ1Lʴ;;zb߱+hk:%k$1Su :L!Bd(ST+1^,,;hPbD|JJ'Ke=D- P78&)b0>Mں)๱@R8Dp"$Q|S}HzpSUO4 D#x^mo>–SS8?dO!MjK&!(U9͡*E\^hcZ뵟I7#D"u>dD)MRLҳ8Bs e:%!Om4!붶&Jè APjD7lk?ə=jNt ^й5] Qy1خ3[jf}n?IruQyS#YWǚ$"լtm;ל5I %6|FCP@LzlQ${Ѥ_I|Œo#h] OʐU-a:rm`S3mBBRb<?ɔ֤rrtwR OQ#Q;Id]`]ґ]]RE/Cj,dE|c5c^ *$n" p( &^UxkF B( zǔY [wSWٷ Ycv3Yn(jHHI$2䜚M^msux`XLǞ"UbE*Yuv ِ(̄J*iP*TC/M$}ylZ|{ wuP82IsFT:ќߊU>V Om0IENDB`eric4-4.5.18/eric/pixmaps/PaxHeaders.8617/eric_3.ico0000644000175000001440000000007411676063752020054 xustar000000000000000030 atime=1389081057.555723478 30 ctime=1389081086.307724332 eric4-4.5.18/eric/pixmaps/eric_3.ico0000644000175000001440000030034611676063752017607 0ustar00detlevusers00000000000000 (F@@ (Bn00 %J  >p( #L#L#L"#L[#Ll#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Lj#Ll#L_#L*#L#L#L #LW#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#Ln#L#Lg#L#L#L#L#L#L#L#L#Le:bHoJpJpKqJr#L#L#L#L\}Fk8`AjKtR{T}T}U~VT~MvJsh#L#L#L#L|jhNf_vcf]\wn=b6]@hJsS}Z_bcbcca^^_\q#L#L#L#L~\j{e|Xnzng/H{b~toc_]}Im3ZCkRzZ_bddddddddddcddp#L#L#L#Lz]pb|dz}o@Wkmkh^Vio-TfVbddddddca^_bddddddddc]Qz`#L#L#L#Lqwj}s`rmkz`zxojLagtwzn_Y}`lp/V=eVbda^^bddaWNxR{]`^adddddd`QzNv#L#L#L#L|st[nc{bnQlTmnSsSm_|xÿeov^iy\k_oxp_{Wsgc{vEj5]T~bc]T~NwS}b^a^JsMslz\g`dbacddcT~Mup#L#L#L#L|k}V]xxbnUyabwz}RUZBIZT_vhyauYlxr~exwncwi^yf~Wmf{3ZFn_cZLuCjLs{^Y]EnNt|f^^cddXEmRz#L#L#L#L}lOxObm[PzYtY^g@FP7>J;AOBH[JToHXvRdWgcqqltmarapi}oj|buh{m]0VR|dZJs@hRwjSvNw]EmOveT~]cdYClT{#L#L#L#LzCf^ryhFqDjiyglqJNP*0:.6G9CX=G]8CX4>R;DZAMgTcZdaiUc|asp^smg{l}lzl|m}j|=c>e\[Js:bQurCfGp^EmPw]R{_dZBkU{#L#L#L#LwTu=_Rkd~m`CzKmGRf,18!&/$)3,3F8B^;Fd?LhIWsIXvMXq;F`@NlSa|]iQd_tq_|azlizon[xcy/UGobMufht,RNv\EmPv=e\Q{@id#L#L#L#Ltm\zUpFavAbw>f~CiAh7]FkFo8f1^-V'Eg#3B%*3%,%-9.6J5>T3=W5B^DWsI\w1@X7He?RpPcRf_v`{\~Y|Yy[yNm^sp}\}1XWQz=eoi.VT}[EmPvy4[YPyClj#L#L#L#LlzoBm|3a9i8f.X&T)S}-St&Jm(B_/?I%)1!$.2,8E.7H1Ro9Mh-=S2Da?Sq?RoAVvLhTxV=e:WCZWpVv\z]~9`[R{Dlro3ZV[EmPvt1YWR|Hpk#L#L#L#LqulhubST;o4c:i+Rv"Gc*Ji3E^*2<!" -3(1=4?N9H^^AZ]s@e?g^WNwtq3[V[EmQvs1YVVJqc#L#L#L#Luwk]Td\G|DvAm4^x8d7[u+9M&!).&0<0@Q/FZ.H\*@T6Ol7Pn'AY@a~=d4^1W7X@[y:_En`^S|ar4[V[EnPvn4\XYDmOv#L#L#L#Lph{|o_vg7ht&S`'O_(N_-Uk1Rm'5K  ! ,1(26E-FV0HY;Wm2OcA]l2Sf4\{9e9h%LThfXcddddc`^^`dS}mvApy9erMy:[mdjj  $)(6?*AM/T`?cm>co9_p:dzM{>jg\^XR|Ir;cMs#L#L#L#Lcldd_JyMs]U]U@s~;fvUDoslrq "(&5?,EP2Va3S[)GM0RZ=huCsLy:i~EuHl~V~^`cdddddddYGpLsRu7_\VMvHqLuKtW~o#L#L#L#LPw}bzsFtcaHuR}RRUW2az*I%+",-&$ 079Qb>bvL{cUGx@my=cqwfjhhhdRykkyPxqZl#L#L#L#LkTyerqWQx|mdU>fj.RW*QX.R\;Ua-4%:>1OT;bk1Wf2Vi:^o0HT'$($7>-GR2Tb=ftT`M|0V^ChvKg~#L#L#L#L|x}zu}enad_ZlbNtzAjpcfEik1TZ*HQ$?H)DL*FN1S^/Wg2Vk.Rf=_m()?M:WeBguHtUNz%KUCmNr#L#L#L#L{RLX@=GRQWrykNx}kav\Qx6[`@bhKrx2[a7\b,NQ-IL'@G"?L'HV4O\&:H-M[8bsGlAau7Te1L[Ccs4N^%;L1K[0U`1`kFxCnDjzEyKwh#L#L#L#L|_Xf86A%#,*3=|xRszSx|BjpdKtWDgpFhq4Yb:ck7[d*FK)>C!5@3N^-O^'AQ5HYFfu=hw-Oa=Zm/M^+K[7^o>^o2I["s_o7Uc:Yc)KS2X`9dp?hv@l8f|On}^}Ajd#L#L#L#Lgbl<3:65?i}jeiYJpyJnxAgq:]hHitFlv6^g.S\;\dPxJ{NFq|:ckI-/7l~fzk^JlsB]f0IS0LS5SX0QU5Z`1[a;hn9fm6en5bl4]eeuFx3dL{Kx;g|BjGhYzq5es@jyWIuEpyLwT=fs8_n?m/_vIzSJvAm7`y0VDm^dddddddcccccccccccccddddcQ{@i_#L#L#L#LNPW518,%(!K[^~ofwr\gNvzbJu~^WZ][ZLz;ivRLy6]g4Yg4[i-VbVN@tTBs9i}3ZLubddddddddddddddddddddddddbPzFnk#L#L#L#La`hHHQDAIFAF(',P_gYj{nhfpJp|]FkvIlt_fJzTK}JyN_R|FnyExP6arAg{\5hxKEx9hi0WS}cddddddddddddddddddddddddcT}Ksl#L#L#L#Lyuuq~XT`dalhfn/.5\epwkggYIzU]t_fz`>lxMyY^OPFn{OvZN?t*XpOC{Bx.ax@knBj^dbdddddddddca^[Z]bcc^[[]]`U~DlV|#L#L#L#Lzva]g2.8LNWuq[Zrudf^mbX_WjV8duAm|Vb6cklhPF>~A;r6d}.\ynW\bdddddb_[VS}OxNwS{^g^aOzGoKuR}\aS{EKYtWymjgff_T{rT_`nt=_mRveIG6oSLFH@wc>cHq_dc^U~LvFoJrW}nx6\]Py^#L#L#L#LvtDFS./;ZmtwpnxmbYkchkijjDqn^Nu:`jAtHLWDqF}JD}@yva.UOxac[NwEmBiRxs4ZVXR{#L#L#L#LMMW&&0R`efkfofjluhPPfKbV]`\P0XsHyNE9m8]=e[c[Lu=eMrjh3[V^T}f#L#L#L#LZXe45A)39Wim}i^xIktkt]SxRzYOPWnYQJ~?iPQH|TQy7]Gpb[Lvf[bXQz#L#L#L#L}}PO\.0<6?I|vjr{W~Qp}|ehUyVyOwJxgap^9r*\r0^r;lx:bp0WlCsev/UPz]LufYcdddc]W~#L#L#L#Lsbxv=Yt7Xyc9aOx^cdddddddc[S}x#L#L#L#LrNJ{?u6j0Q*@zaw{?Uw;V|XzCeOt``]`UKJ{SgCo!Be&Ks+TQrdo'>k3It>WOlVtSrWxZk8]Bj^dc_bn~Jl8^;cEmT~_dcaacddddd`UZ#L#L#L#L~h]F},b)P%F"E.HvTb{?Tx@XYwMnTuY~cdX9u:tFzdfCp/\*a']{9pq4Da?TzLcA^CcHgX~zojYJW`K8p4p5q5ie~GNW"5\0O;[S}V}fkZ~>ZTqdw:^Iraddddd`\ZY]acddd\JsIo\Y\cddd]LvV|#L#L#L#LbbG8n;fJq;a!F/MfvCLb,<\DYI_MiStRuku|{fSVPJ+q.uE?u#I}*R2L0NDiSRzT}dUu7L|Plgh:^Ir`ddddddddddddddaQz>gW}pQz^cdd_Px@h#L#L#L#L~hggO>wExGu3\)N2R$@y$5[/CiB\LeMj[~mwcccNYxT4|2w8yJ7k7bAw1O>b9^TTRZ@]@U`|fgNoFo^dddddddddddddaVCl:`iU{S}_dd`Ox@gt#L#L#L#Lu}|zyXfq#L#L#L#Lg|m>nCia][WR]WAgZ~a]hfinhSDy-c?tG3g7wOLPH(L?f`bcb+I@UBY_n}Xadcdddc`\UMuEn?g\~~Mv\_Kt;bt#L#L#L#LeO3TUwiS]=tWUBn[JzQoZSxiR~5\#IuGw1YHsO<{:@~:yCBrJzQS^6],D|Hb=[htbc_]_\VQ{MvHpIqW|iPvR{^FoJp{#L#L#L#L~el3Q4U[f^VLUEuCsEtdbLrT~Dm1Sx'Iq(It>d=c4_BsE{V5h&Y;sLXVH|Cp/J6J6X;e_fj^T}MvPxS{bsLscAiZ~#L#L#L#L~l]7`A3Z[Cr?tCrClCpDqZTy5_lSuSsAc7g'6b2J{EjGwISam]Y{#L#L#L#Lliv<8J71A//9~bZSPa[M2kCtMvVvHdB]0MBeV5ZQueFiNffgrSL~ErEkBfXz3Lw0]5P5_Bw?w[a_\}6\x#L#L#L#L|xebq!-,2>e]Wd^[Y;t/[CeAZBU7L|4NDeEeNnn`6LLdmiRf=R*C*D2T*G5UUv[y-Bz:U5c=r=p\YIyrk2VUn#L#L#L#LUSa`^m*-6 \fsv`X`SR`Av,Q2Gy1@h2@m7KFeQs6RntJl,B]yxf;XVzQmBX`}Qp1JF]_xt[n7?twoVs,<#`6G&={RlPp*KBf@g/X=d6Y`gDh4\Mv[V}2WNvbcda\T}JsEnDnEnEnEnDnEnDnEnEnDnDnEnEmDmFoJrOw]LuV|#L#L#L#Lqtz5cNx1R+Bm3FsUrea}Mb_z_yGZDWmlGV$-w38gmsy[`9?6C7D X1?{*>v=Pf7X/N@cLtDh:Q;[>bBf4[Mu^YKtt2WLvbdddda^\\\\\\\\\\\\\\\[^a[CkZ#L#L#L#Lsz`T@m2M3R9U9P8RB^HcY{El1N~7JyRotxPfZtpXh1Bp}uRe-9cee$-~EZ1I-:nBQ&5h2E^Ou+K;Z6R:S+;sBXXzd~Ru0VLu^d[IrPv4ZLubddddddddddddddddddddddddYDkZ#L#L#L#LlE|(W7U2O2M6OC_+Cw1Hz7QJmC\7HwHdqoIdgqw#N8PRyGo,L8K~*8h+:i8Es/Ajk\|a0WGo]ccVAiLs7^KtbddddddddddddddddddddddddYDkZ#L#L#L#LuoMH`GE[{wi1_/R3O:U+D9W.Ep3W$7c.Eq.?d+:5@MJWSQ_mEp-L)C5e,?l,Du(9\$2N%2M,:W5C_'=^A_srjRhDWHiEkF`"3h,Ey/Ap.9b1b2L0=s6K1Fz,9h(3d@NK]cKg9Y?^Hcj_HhQo4KCVe}unf_{SoPlNhRnF]4K(B3IFRETI_HZ-6^;Ip=OHS]}KtaHqY2K6PF`FaWsEX2=YR^{u{pbWqF];OI_Kb5C+4BJSc=M#'=*-@28YfiEnZTIcLdAQ#*L$*,5*'50/;UXYuVEllz]~hiiiilj#L#L#L#LcesVXeOOY-/3 "(}YuYuULzQq+6b%+I1=g8Al1 )*)!.$&2 &0 !#,'-9DOdm|woVp;S:PB[LgKe=S;OEX0 "'?>Ljn{jsSsDi:aAjGpLuNwOxOxNwNwPzQzOwi#L#L#L#LqsOOa<=L./8+./  "! ]jcUUu1>r;.:c4Ap!)E  %"!)$  &+(1gJsT~Z^``````a``_\k#L#L#L#Ltw``q55C *# $ Wappoay'3Y!3!-D".F     $+.8?FN.38!"")0MWhcqn{kyzxmt]wZv]yE_KWddul9^8`JrX_bdddddddddddcdfo#L#L#L#L[]k44A*)6$#" )#!)!! !)5+7O2?_+3O     (+7)1@-:C!),  #,19fPz^cddddddddddddddca_h#L#L#L#Lkmz<=I&%1' $!!&'#$      '"! $  $'/$#(2(0F;Jp^vquett{5E148(&+ &$)   '&-"#+!%-*+7//<<=I25<" )/7AMgTrc^A]%2+0?!)!21QDJjMWzR[BFg /#%078FQQ`}{Ej5\S|adb^VNwKtKsT|WWWW[fbdaacddaU~T|#L#L#L#Lryio|HMW57A73>0-6")&$,$$$  "()+#%/#'/ "",@:Sx__8T9#&3)/A     !",*,9;=IVWc|zj+QHq_c^VMvFoEm_dd\_cdcXGpY~#L#L#L#LmrPRcUUdWRaE@M1-90.7208 %%% !))*6!#/'# #0D(Ae@cHoMt5Kv-/"';    "'+.8EFXOM_]^kCf9aXcZMvEmBkNtmfV^cdYDlY#L#L#L#L|yrlVOa<7F63>:8A#"(  &++#$*,3A2Ab8WGm@aRrZ}4C^'.>  #$/-/9;:G86@97=.-0!! #  &#$/%'/-1805G)6[>[MnEZ;OwLh0=W   )+*5HITegt^/WS}]Ir;dV|tRwR|aYDkZ#L#L#L#Lmjy`]nFBTGDS?=I54<(%-'%.,)31/5   #&(6-5P5Eg8Hg&:!"  "#&/24>\_jWy:a_NwgRw#L#L#L#LjhvURcebsfcqUQaIER64?))-       &&-BCKgiu1WR{Kt>egFjOyS}Bic#L#L#L#Lwvml{HFS44<!        $%$--,756B^_k5[XDlUzr;^LvQ|Dlk#L#L#L#LtvttppGEW98E./<        " (" *)*6>?KQQ^twe/V]Goa<^KtR|Dlj#L#L#L#LqrXXgcbuKI^>=O*)1          #&$/,,888DFGTEGUTVeqtMo9a_Ox_@dKuQzBjj#L#L#L#Lop|~~==H! )        $%()8@BQOR_VYey}8]Ck`WQzm-TU~Nw:bh#L#L#L#LRP^85C('3##,"    --3*,458ABEOLL[MO]rt=aIra^T}X~@d:baHqAhm#L#L#L#LOM]JGXRQ_>=H10;&)1 % # # (.18[^iy{{2YNwbaVOvi,TKt_EnV|~#L#L#L#LPQ`~giuMN[@BM;=F% ) )  %(+17:C9Hsvw{o5]WddcYNwp}4ZAi\c[EmQv#L#L#L#LHKV12@33B\]mPQ^FEP66A66@?>I33?IJTjnyGJVjnxn5]Wdc_S}DmBiWz2YR|bdYClNt#L#L#L#LOP`MM`\\negtgivIKW[^jNP]@CNlq|n5]Wc\OyEn>eRvs5ZEm^`\Oy>fLq#L#L#L#Llm|rs}x}sw[_kpvo5]YZJsCjFmg1W?g_YS{MwEnfX^d;eq1ap3aj3\f2\h9[l%%% #16,CK*IY.Uq'KloO|fc]]cFp>f^YDmDD|VVIuKxLAq}GpKOO(;F5Xb3Va?k~=jIlaYdeeeJuMrItQ{GrTzDD|ji__SO6d|MYb666 #)+$583JRAluCq}hznGrS{o}DD|mywed[=fk3Wd.7040NZ-L[ /4(+6ScRQ5^lv|DD|¾gbjs]p]QtzElr5Z^/LQ&CO+EQ5[j^g9X`6[b9`gBow=jt@goHow>ej3W`7[i:^g=ag+Rc1ViBmj|DD|53=Zqr]{\x@\c4VY@_bTHtIt}CotR|Hqv;cpIx@i}Dl|;XlEoab{gdkglDD|0*1HRUeLmrGnuMu{LswQURItHr}Lx;cqsiMqP{gddeffeddfeeVYDD|pl{b^hGHR~khcbdcUQQO|]BwB}0e~lgaded^VP{[g[S|ZQ|GoDD|?HPlllhkX^O}RRGxBk@gWYBjaUwLxf|DD|14?bv}oqjs[PwReR9i@n_T|RHuDt=uBo4Qf1DjRc_yEkVWr=eZfddaV}DD|T0g$G_uXjEbPr`_E{SS K|W|?Sz2PStPrX{@h`bjkIoIr^bX^deWfDD|mJ2b&LA\;LmHaNnksVY@3tDm.@b0SS|cLhRsAiaebXV_eeIsgTe`IrED|uaDy@k-Q!;o3JvSodqbZ[/sE?l(H>`UZ@ZSz\~TedeffeQ{=fmWcDmED|uEsWP|Hu@fX}dqiQ0h/bJT8bIogOy;SZ_Zbcb[KuAj[YBmED|zFnPt`QM}M{_W~Kr,P{-T@oE8tC{RO3P<\tdXNxPxfNyHpED|tCv&KDpGuKvJt@i*Ms(AcDcWFpM{7n0[5W,Bx,Cu=bJsDD|q`F}2c+WDoCu6]!gv}DD|019`jvJxM{PN2M&2VIhNj]|@ZnVfisZs$2s4JJj:`Fn@iX{>gXCj]_tvoppppppY|OwPyED|zk9a9X:VEfFj2Ix_`|[tJ]mO_DLJP;J/>~+8oJd>a:[6ODc9`XNyCkbd^XXXXXXXX]YLtED|wth0X1K6P-Cr6P5Iv\yy_xVk\ppe~C_9^)C"/jEf<_+9e0=j?Vcx=dT~dAkAibbaaaadeeddf[NuDD|?;P.+8:6B{7]#:p)X3L9G:K3?jHWQxR~AjnDD|uw32<88Aw6Q.Dy&5Y")C$*?0Cl.Cm2Em5Hl*5MbmpUpAY=RARGY #;44Fbck?ju}DD|PRa34:5;G}nV(2Z/;d+$!'#NZnxYuKeGb@Y2?g639{{gJoIrNyQ|Q|R}Xz|DD|@AQ$*-1ReF[!7+  ",3>2:Fanz|oRgmm|ChDn\efeeec]`|DD|`ao"#.!  ''%*/=Yt`LWwiuFQkHHW?eLwgc[XXX\ad`U}DD||BGR--4$!("  $"%/*+7#%*1@V_7U"0!"#4/7L%):'CDRWyDneVHrT{oy|qZeW^DD|{~fbtC;H-+1! &!  !&,4L;R}/=\)3G  &'1cerxDnKvPw]SLsDD|\YjQM\C?M-,3   CDMbCmHqpFrOvDD|ihy<;J   "'&2VWdWzDoooAl[DD|nn}HHU   )*7GHVfiwCiQ}sY|CmW|DD|86D)*2')0PS^stBi^S|>fMwbDD|tvOQ\#%- '!$),2ADMquAjeTPrKvOyrDD|_bj+,9FGS01;/.889BKOYx|EnfXKs;dbJtnDD|^_py{wzdhu]anEoXClZ~FlP{T;fzDD|DnClvY~FqS|d|DD|eve|DDDH(Gi|||||||||||||||||||||||||||||||||||||||||}񀗸~||||||}~}|||GiH3#LHDoDqDoDoDoDoDoDoDoDoDoDoDoDoDoDoDoDoDoDoDoDoDoDoDoDoDoDoDoDoDoDoDoDoDoDoDoDoDoDoDoDoDoEoDoDoDoDoDoDoDoDoDoEoDoDoDoDoDqDqH$#L(0` %#L )Q_*Ry*Rw*Rw*Rw*Rw*Rw*Rw*Rw*Rw*Rw*Rw*Rw*Rw*Rw*Rw*Rw*Rw*Rw*Rw*Rw*Rw*Rw*Rw*Rw*Rw*Rw*Rw*Rw*Rw*Rw*Rw*Rw*Rw*Rw+Rw-Tw.Uw0Ww0Ww0Vw-Tw+Rw*Rw*Ry)Qb#L%No%N~%NbV~[cy%N%NymmTmbSFmNy]eec^Y&N%N~pf{kVsm@iZ^c][\^dP}'O%Nydj\|movR\nYitrcyZqz[}Q|KuwrIs]Ym)Q%NblFdADL08K9F`AMhLYt_oymi~yIpItpcDo{O{e*R%NmeSwPx?j'7M$/4=WCSp?OjL^|\vh\~xBkRzJpHrAlu)Q%NvdE{/]|+Nl '1*5B4I`2Hc9Ts9a=\Do_LsHs@kv)Q%Nc_ZR5du,Rk%$'(= #3;3S\5[k5`|uUbcbLvQvIuIto*Q%NlfaU@p>R^+/0"((+$59?cmEuNwcYULuLvt&N%Nmo\Mvz4X]!;E&@I7\o,ER$6?=apM}?fw%N%N84>heWImw7]f/KQ1Q]3P^6Zi4Vf6Td.MX8dq;i~f%N%NQKVWionKkt7U]9]cBls>jsCksGot6[e;aq>cj*Q``|Vz\&O%N_\eDOR]z~Iho>bfIorSO|Hs{Mx?htDsAmRoUy[^dcaa`T|XQ{o*Q%NLIP;?Boc\U|XRL{Ly>ivAnBvdAkcdbbb^^dcSs)Q%NnjwKKUwok`d]USWD|8s^`dcWOz^pW`Zl)Q%Nb^k]pxveflaYPKB}ZNw]HrgGr'O%N9?IypoocQ{[U?q;lbKvDmPuRu%N%N_[h|_RpeP}LwQ)Rf)WmW{FpFpeW%N%Nl>dVN|H~@tHm9JwGoTCk`f_f%N%Ni8n;^A_X\EzR)R|\wAYFfKnHsabKs]\^fU(P%N^5j$K\nFTsHc_oZN5v?d*CsJt\GeHsg_V[gQ}gX__,S%N~vMHq4Z4SY{ojV6tCEv4V]OxBcgYcebQ}DnnVW},S%NO|T{XL|S`Sy1Z2]F?{HzU7UNsaSPydU~Z,S%NvJ*SDqIwCm/S|+FjNoOwDr8k4Z+Cx/I{[{r)Q%NjQ>u:gIv1R|-NOs_iTGvCd(=h@gR&N%NEAN@FU~Z\>o\9SdeUjf{[oDU6P'6q>X=^/Cv;SRuP{LwuUc\\\]^]`Yg*R%N<9KQMWS&?{*>h"/K+;Z^|zRgKcD^>V1L(=A`0G~3>i9G|Wj@k^JrX}NzV_`c]YZ[O{c*R%N"!*w&A{);d",F"(?Fd[{QmDZd~]wSlD]7ONKpR}bUVX\]aT'O%N`fvB@L,(2 #%'3#%4JT}1Ei &""/VWdzFqVKt{]Xn)Q%N}xB>O+)0 "  "*4Fk9Ow&0C (*2z}TyHsY~Lxg*R%N_\kGDR  ![]gFnMuAlp*Q%Nrr==K   ".-9VWd@ko\z\z\z\z^|acdd_}]{\{\{\{\{\{\z\z\z\z\z\z]{c_}Wv[yc`}\z0VDUuyUtSszl_xY~KuU]UUrXwSsyibqyvn[uFpXp\wO}[ySsvbHh7;I7C]@Mi\moa{@k\OyYxSsqO6b!2D")5F]9Oj@aVuS{q\Mu[ySsNzGw1_r"4A#2;-IU%MhT`gBoYxSsClw=ly9hvn*)'"%/MX.Xo[USpZ~CqZxSsjdN};Vb(5:/7,BJApwnsUtSsxr{eu~iRx9\b*HQ2Sb5Wg0KW3_lcRsSsJT\_:Za>dkDozGov>fo=ev5YhOzVuSs=@FbTU}TLzDp{>o]P}]YSTWDt[ySs\ZeorcbYRA}Vf\S~j|]{YxSsP`iumiYUw@vN};_^VifwVvSsS5bIy8_3R}RsLz>n.I~4UWwSsyt}\ieL<\;XOsn\|<^9TBqkTtTtfGsHp7QUpWpau]i8I9Q>cFiPyT}jlijjU~WwUurnw-O)K   ''0KsY~ZySsDDO   ?@Ky{xYEm\zSs68A$$-"#*ILVoJyx>l\zSsoNwGqeZxTtTt.T3SsSsSsSsSsSsTtSsTtUuTtTtSsSsSsSsSsSsSsSsSsWvXwSsSsSsVvZyVuSs-T8eric4-4.5.18/eric/pixmaps/PaxHeaders.8617/eric_1.icns0000644000175000001440000000007411650746163020230 xustar000000000000000030 atime=1389081057.555723478 30 ctime=1389081086.307724332 eric4-4.5.18/eric/pixmaps/eric_1.icns0000644000175000001440000114455211650746163017771 0ustar00detlevusers00000000000000icnsjTOC hics#Hics8is32Bs8mkICN#icl8il32Dl8mkit32Vt8mk@ic08ic093ics#Hics8+V+V+]^++]^]9^^29^9^3,]]]^3+W]]++WWWV++WWV]32+is32B֣̀ , - v6=a UXK ](I ٚuWd Лŀ &' n #S ;,!>gK j;U]?> OF[@g S[QFm hQ^ km\Y TJGC pJ./ i< / ۆYNWl s8mkssssssuuxxwxttsttssssssssssvstssICN#icl8V+VV]V^333]V3d^]]^^+V9]39]^d^]+3^^^999]d^^,33^^]93^^^3+3^:^^9:^d2+39993]^:9^3,3^]^333^^]]332]]W^VW2VVWWW]W+WWWWW]]+WWWWW]^W]^+WWW^WWW]V+WWWWW^^]2+2W3W92+22392V23222332il32D㴸 ǵs=7O ݋2C v+ $L&#cT 9 (#QXtZ U?#PVŃIdwdus_صpΈڀ dڰɰ β ๶ צʹ ⒩y o i uz߂ an|}ւ asbqroph uUQgSk 䡛{L,=t rr}OJeʒ}Z2Tf¤u-Sjʰvae}ͷĸߪ j2.E * :y h$  y>! B9{.;iB[E}E_%AZJK,@]Mx|]M:wh|>:fibNGR?yl^]tslZEc^ XlVjcWc݀ ЛkpmSgysWJ Ȧxvwsm{vl `i`lZy{ ᗇp~s\ 훒|\ _y jst؂ Zk~v|smpт V}j[hig`[ xnOEVF^p 㜑nG&8f} }efmNBQˎkD+DOÚpT#=N]sȡ]OLa}ƙ~䪙 ܩ h1.C * 8w j$  xޘB" 2,y- /Q=S@|>K;~|nMGv6%3I>fgH>2rlY,,QqWN95=3qq`KCI]`aM5G@ Xq^G?MdoF@C_Ѐ wDJI7LWI;3 |TOUhNBLOKs bK }h\K>'D[ f??NJ.0i]C+!00j~gL82>IWʕqcQJBTsiċmerៈvpl8mk7777777777777777777777777777777777777777777777777777777777777777it32V 缪ʾŴ%ɉx$njim|yf|c_"سμފUIXuc]LMPHih$㩷ĝX=7IZ>60=5;UKV.~k6*/9-$$+.*36:Zdl/q}\`=&))!" ##.?ONr*\wcO<8&&# $.2KwҿىPH;2&!  /?Zqxu2w=* $.%)1E]n|/辀reR$  )9GTap1ά}xfUH5   !',4;C\ؽ͈jJ4!   !'5?Kw5Ċ~}lU:#    %0In8§cZ[G@=3    %Ci<԰i_UK8-470  ,>I2  ,@nzkZRI?3*%)$  "(7Ih_ZW, '0Bm<ǯxYC@8*  )0/0=QmP% &9H`ή{vraF;B. # (+'  =hr=8 )1Iiv;輨jPME7.-! !  #/0.-'!7cO'45 $0AJZx<㿧YSD9.%'   '(,06;*(JЙU:>(9DK1 (7Ol<貄R=.'     !.%,474.$Ge.KOri37Nj;ԛd>-" %   #%! ! -* 9\Öz|C]<M9)"$'( #-' !#5.#+A]ٳ[];~P6&%&![a,22 "=B[)DrƵvx;ҌpN5& 1˙?C^K  (*-*J½km<ڞs[N<'!2̘JYr]%&#")4))9`¼4/M=ڡyc;';⥻²uCQ]J&-336=67-&%-=hýY!'ETy}uvfdgiOGuƻ¼v.-Bea^r>˜rR8/⽇rhOs_*,;zr~OdqAYA.+яnjztF*FԺtc>{V@2!=Կ}RieO70=L|ٰknzr}oao}?jKD75?v˓}jQeQIFGXWq贝}~usxvnvȭn~giur>ȊcQNbvpĚsy[T[`]xʰ¿Ɍ}`bm{=౓vyڱafn~ۮޤƹ[fҚ~jWjon=ͥȰ˶|۴֭yucݧ~yzn;ɤhϡtɳأ߾u}qtp۝y:εw2Þniǟ͖ջpb}=s0!Ž\Wwǖݵwr–<ŁL@!kڬ}b[pޖުuiǼ8ܟvE0ڮ|syᤑ֜yipw}Խ8輙D0*ѳ}ɜνt8֙fXHtշ~ԥ̷Yj8ǡomʹyg7زǿn[sVo2پ}{fsvèʲ~oSdy6շohalĽʴwon4ⷆÿwf˶{4ުмé}qwʰʴy6љŻӴûĿ|̵Փ6ͥ½±Ӧȃ6βĴ}лŭŐyѣ~9ɿ;{gļٲĺzй9οjW{ɺ´p8Ӿ\pżdZ7ârrĺýXf߀1ɶxz޼kp}7˺·ևu}fp~ڐtw}3Ͼİ⋁~dI=oŐrmy5ɢ݁~`.H{Щ2۱uy{U=j{/ǎXˉ~jQd0ٹzM`~vg~rdd},`>\{{yqqfij1궐eG<}u{p2޼vI8gů×2٩m>Fȩz2ͳϕa?cqu2̧vLC÷j2عR>d˦v0簘~KBvx2ޝ|i\nHJxpv~2ԈZHC3B|yz|wkz0~E/!?uihct1ϳc0"Uylowotuz|l}~{2Þh<*ru_vtnmpolnrx}}jz3ǰ\68z]{qeggjk||zv~~wxnjzlugp3̯c6KugNSUVkljnkjuzfgqq|dho3˹Z6fzk_T\W`]jortlkm{ob`dngjlngclf4Ѹ}J4oyxjtsq^_ltijibjfZVfa_d\_allq3ԾtU@.{zimc_TVamfbY\d\_agrhb[Wdryy3ƴuM80~|z~~mncjUDBLbUS_zmijXbqgRQhgxv2̳jOXtvcvka]OKKM[RKex{n^bjTOb`x|}2ضyjfecVNGMUbjgk[CI?VjxZ2²ߤ~èz~Y^UcG3EZheie<%.GXmy~fy0׫lrl[3+8GRN:++(Di{w{/͔|}vW4:" %%'('+.4Zm}ku.׏X.!'*>IC=Zmq~x*ٜyr00EW^XNfy)ۍ}lsxys|}.!1ESbmmqr+xqlvxxvvnubmjr_'7HRWdfkt|l3sobmvollkggle`cmD'.;BADXgrm`3ooad`\\dfilqgp_5".89GHCPbh}zj8𱜅sjjpq|sughL%%/8LJJL^NY`]b9鉆v{u~ytiZ3'1GVHNWW\ndm5蚍jabbsZ:(28OUahfhn~{=ڟʪ~v\@%3CT[W^ndc>⾏jjbR&)6CTcnd\idmt7ōɴxxreX:*#=DLQbo_Uhqp~=ܬxuV:0.@MUYexiZjw?բlA12AKUbtqifs|wʹپ?˰P298DQ`puowthz{sж@ãðijȿL52=@  '7b<Ͷ{cG550& $$*2:CbnUqe9 .=Rl̿uge`Q7/8' #,FWjm|L)& '=Ud<屙[B?9,$% !  $$"" %@mzi)#$  &3;Nn<ේxLH=1'!  !"$*1%#7]d;,1'00+A_jiWjwZ1Lqr@,&  & %  %4Chu@Kr;݌nB)Lfjj=&$ 18U&8\vw{gPf;}_?)"!$u[(8,  $%=htpp_ej]Gb<ՏbLB8&'~|zW%4A8 (#.Lole``fZQ^Y)G=ӕ}lV2"0ũj{ykE'17,##)#'#/TubZWZbeVO3,L@׷kP0#)]LR8+,(')14LOKK=?CI71^qWVibHDY\@-WVXn?eF.%{·xH<=*DR;#M]UUQzpsmHZxljbTTHIF*)WfawooWThtvumpjilehXKNPNNPA6PR^?إjF2'1PDG+D?/"!%0RfzdQ_^I6:ET`_XRSOZh?=F@4=RTF`'X63*)2hʱU<6->,-/0<=J~fOLfiNDIAF;10Jqgb8IzL9=VjcUOJ@NH;27?AC{e=ƛêkVNPPTWM`lhOSgz^O\E7GZ^9G=0[`QHBE>aՇ>Ơa]WZXGd^tpNHX{gyMfe8+;9+/W6;H6[YRbcVA]m=ǭo,~]ieh]mfo`@APt_lsgMhqE;quVQ-&E>pmO[cl`]q~߈=ߵh&mvzyvM44GkyZooKliNi08JOzU\oi]diވ8u?5``A:6@`{_lMeaIZ`_cQ55VsmPgoxsЈ8ܘir:'`ULFHV^e`UMP1"#3<7JkrOYfnw҈8鴎}4"wdei_UKWwczwTy|jZb\Xd|[@Xipx8ڷ̎WH>blsxzwg[Kof[bv~}mkld.9Rhy8۽}p~[\rirr^_EASfu}xvp{tvum{lUG;Qkr|5ϞxkjTP]fqp^\G/AZabzuXbklusgieU1EZamor4٦xW`agyw|zg[PM5EL`ekOr]FIN>)8HW^l~2̪tJBTbgrjswskc_F@@Kaytg|n\bFHPA;;[kq1䯦wGW{swixwhm_TD[zpcosteetxrkaLENeq؀2ʢçkOzuyxsmUFI^gxbj{tBXWn2礵\ouw~~}_RIRgqwvexWK[e5ͷe}eidK_wiIxLWb6쳵ks_oa\GPgzjjyUAlxjM`7۶syfS[XE5JUl|kRw6׭yWWXB=stOYdano|mmhpK6]ut}o.ٷrE1ZȼlotrrkmÀ0讎vxsB8weswxx{q]o/ݓp]QeB@~je_iqudx2ςR@=/=}ros{s~qlzzY~~lpo2x=)=rwl]YWd~wnj.ˬ[) Tugjpfzpxyrgr}ns{^lgd|qhk̀2ɾ_3&qqZpnefmmhglmwtzt^lqk}lemk3ŪyQ,3xYvj^`dhgw~pusrvuqsg^fwo]dxRb3ƦV+F}m^GOTRfc`ddfnu`]vyjaizoSU`3Ƴ|O,_rbUKTR[Xchijbch}|vi\WV^W_eg]SXR4˰rB+dxpn_hihUWdwzxi``a[b^QJ\VW]VXT\Y`3϶hJ7&nv|zn_cYVNMT_XUKPWPSVYbXUQO[file3h@.(rwt}suce[bOA:?RFDPk]VXGQ_VAE`^jevm|2Ǭ_DQm{o]of[XNFA@MF=Wdf\OSZC?STkvjmv2԰{ztebb^ND>ELVXRYN8?3I\j{nOv~2ƾܠuuzUXLW>.AS\TWW1*=K^ln\f0ի~|fiYG+&.;DA2',':Wi{wjk/Γ}|u|p`A+:! %&+-.Pbsai|uu.׌}uD~.#%9D>9Tcgrpme*ؘs}zlna/ ):KTQI\ivrjq~*ڊ|quyvagoohmj|, *:GXc__kudb[+ulfmlggmfkZdbfQ{&0@KLSORUVLy3pi\ekb`db\\_WMN]E',3987EQVMM3kiZYTPTZXXWZP[N/)21?DXGNRKF9ꊆqty|gme^Q@" $+=H=@IMU_QQT^5Ꝏ~]QQNY@)%*-?FNRTXV\f_L?ݢŧyme[eC0$+5AFCGPJJba[YUj@Ó~eh^IMDA %.6AKRKCIEPRQNYjYc@ˑbjk^VTQQCD2#!45:஌{ndmfjcboia\N<.''08=>I[O@LXbkv{yxupA՛}xytfG-&$,4;DVVNLW^ZlefB˨k3'+)29CRZS[[L]^TqCělcyu^@+(/9DHRVZRGVceh~|yy=ֺ_~nm|q\@2?EFACGSeeifyy~z}y}{:̲Z}qqOD@FFWXifvz}qt{v~>Ұj{dMPjtnu{yzx}j8ϱ{x{h{f}zzfqk}xvx9Բy|uvqpͽ~9וzpoZyĨ8֯{sqzɹ8÷orjkжofd] ³~nc¼ ƿܱŴ%{~j'~Y\xmjXmTP'ϨƲ~E9FdVQ@BC<\vX.۞ƷN1+>N4.'6-3K?I.{o`,%0#$'#,.0OX^ob{|oNT3 %5DBc*qMhVD1. %(@h1ι{C<0*  '4Mcie2ƻl3   &%5M_n2u|aTF      ,9GR`r1̥ohUD8*    #*/5Mtд~~]>*  !,4?k6sro_J4    (>`8作TLP>75-   9^<ԮZQHA1'-1,   "'  !5a( j~pbK-#  4^i~}vnZ[JNSJAc<ԍaKA7% owlhSXF -81 %!(BdwvUNLKPG?IH*G=ғ{kV3!,S_WO6!+.($ -Lu~|n_MFDFKNDB-.J@ֶiO1$)E9?)#!$-):=98-24;.,W||un\DBSN;9KM6!-UYVl?cE-(u}R/,33@/ >B@=AM/032+4HH6Oy?]:6-+4gsa9(% 0"&*5.3eqvTD@PT:194426) "8VKM'606AD<8FO>~R=@[neW774.94,$*1.5\xkjNUKObeU\V=:?./+*6PX64,0HE4BFQ=ܩfgtA55:689'&6<59eypRfrHeamux{`UI7,1IW954%272cQۆ>Ȟéy[@:78;?A9KPL>Af~wSdtP@yirN8*7EA$<3%EbB95262Mim=ŝ]kYA>@B3JEXP35DpsgUkiAWzrW0'97*+H,3:)Ig>8EH@1DR=Ȭl(oU=IGK@MFLA.1PH=CFnxӈ=wA4YvdX^`Wa]=-/,2G_FTxm8QtS>JMLK<($?ZS2CL_WRXW`8ܚlt9"|pajcbcZ:<;8;BDLJtn@FXaT[hdÈ8鸓7$i}\f_ficP;EMKB7>XE\nYCdlpfO=D?=G`G/=BELgaZx8ۼΐZKA[aaVgfXAIT[[LA2OC?]cH_fru]SKNPK+:DMRelhf8ܽkqxiS`bW7:NGNMYP@GLMX<9IPKIB317FNi3wkM6`hh_S`SOQPobS_K5*+>FRVTP7=MW_YWP.E;On8ᕝ{a=-)?ESidjqqcXPomB7@PPDJ'6AIY`h_8Ocf8󻞦zmmaMGNG4120*=NOZ`|upwiYmpUB=HO=4"?>I]U[^BHek7םqpYC=IA-0l::LJRNXs~vbYX^H8CJ@'%4FNGRSrwrcSSffOA>:LE)5AXZnlVIcj9t`V>7)/=H@SXOWddfREFTnb;/2FG.1?VbcWVit9齃zaLN@B@oZ>ORX`cw8ߗ~edTGAMxaGTX`g\XQMDA?CK?4'2]nF9?[cj8虀vHCR^YFFLUUJLHBLSM:EYG:$8U羏|3ګޭ|KC;PQbfWe]T_XBDddD144cÈO|ϿmSVUpkwz_pkUFR \kY7(/AB3ҮrFSvV\RXjqctn`Z]K=OgGC5//?L\,￙tV3I~p`bSSPx~`bVKXNMV]J/2/88JP3X:,fsvt_aofZ\N[gorX>7AJ=EL3ܶl=*Uq\~xlZun^T[^\Rijd[SFXQYTs2Ԣb5:~|qlg|ymts|iV_c\fSeacO;PTFU/̱ɍS2Qx{plwtqajoborjo_YwZFENPXTOSPPL/Šn?2j~tmiheflt]gjyh?laUFFZQNOF/۹uK4T|hbdkctflhe[skETp_BFO@GCG1鰐y{vE8~|kaptmbnjlff_cjMAH`RQrbQFLIE6M0ޕsaTgD<rnqbV\\piatxUCY_f[[E`UR8@XCH;W2ԃSCB36|nf{xnv[]QNSj^X\PKRaNGNO8ZS@XEM2v?0$4rw}njybh`]]Xe]_^[_KMXG<84@WRKXDI3ͫ^0"IyhXIHLDV]NSYZUNGANWIOWU3:5;6>CAA9@EF>453p3ϳwH0XoqmkUON@KJF38FQPPF>BA89@89394E3ҺpN;'^xvaQWYQAA79748?;=758216:C=<609@FF@q3İoC0&_aWSZdPSFG9?2+(+7+0.4B>,+=7BCPA_ڍ2ʯfGSk{[ieumZM?PB992/+%31*6BG@8;@0+92BMGHKjލ/׳okseu^co[PAAC?1+(-2574:8(."3@ITZJ.Rf/Ye|rnRin_T57,<+-7<59<#+3>Fb_GBTDGAHGh& +/9D?=GOAA=*kUHKE?=B>C7CCAKWVL/2/3% #/+*,>,-2-&9yiM]MRa\mXUAG@;1) .5'*/39?100C5pswjnyS5.0-9,")089GY]`Xofglkomomq<ЮkzC~g\RsmK>:@@MKZZkltwmcgnqkfnu@լ{p{N}opf]fqbIJ_e]dxy{i{ghkcjXr7Ҫ~|kfkfkQemMees]e]oxna_kf~8Ԫ}}xhmeseouq[^lͺxzpbaix<׌{xmk_`qneHdԿ~pin8եzum}|{^cnhg`gų8ߺ`{_}UYsqolaa˯cy|Uv{uNIuumhdn һrjXPiljef  t8mk@ic08ȉPNG  IHDR\rfiCCPICC ProfilexTkPe:g >hndStCkWZ6!Hm\$~ًo:w> كo{ a"L"4M'S9'^qZ/USO^C+hMJ&G@Ӳylto߫c՚  5"Yi\t։15LsX g8ocግ#f45@ B:K@8i ΁'&.)@ry[:Vͦ#wQ?HBd(B acĪL"JitTy8;(Gx_^[%׎ŷQ麲uan7m QH^eOQu6Su 2%vX ^*l O—ޭˀq,>S%LdB1CZ$M9P 'w\/].r#E|!3>_oa۾d1Zӑz'=~V+cjJtO%mN |-bWO+ o ^ IH.;S]i_s9*p.7U^s.3u |^,<;c=ma>Vt.[՟Ϫ x# ¡_2 IDATxg\Ww O$˱[=Zi4H?H;EdzͨHMyv `(֪B\ 3ܸ'̶|qK˟m-o_\q)?U,)R)~kk^4K 0SS֖׼h a#8K-y9?,4,GOq O[[^r~X*h Y/̜㹏76_M&I* K[k:qF^Zwwy>^|&\,9ϵ8W''u_ɞ0cK}Ell> Tbr>r~)!kTK! 8R\](p_,FP8׌ǣ8K`si4<*TeO|51FGY\6zTP܁ Wx'^#3i+ҡ@(X)J^+r1 _.˷ ™ ?/pHNkS>;g:M(h5S9;\Vs5678) SSⵅr.~^w2s C廬ZG 7OE_Ho͑)x4|!4k\jݕb>k[2<>xχ1U7rEz4MR+(J*iP0JRaU^Ja\{o0ZkJ82s@K ^jbk# ~YncK,ŠrZB#VdB(JiCy(]uY_HP*ӣô5ϥ>I~zݫ4J+j5 'sʥׯk+9O*!t2KR9 *.C;c=X*?y"׿\\qe^]&Z.Pxx<}]Ki}s3m"3ڿT!lqb 0(pAi9@}q{7 #Ta hC 3OpqqP>!J +/!:ٗhm9wv7P7}W 8^P}嗸ǩQyjF0|-i.!pЭ䘉cDRYOH?~,`& n'3E ご9^cm/F`߸pzaӧzbA*X}}{/ꍈz @{BkqvzN~2LfPD)V6@txthu.Z]L9M >a tt`} R#-FZXW,O%ŸuWX"yt3 A,^RQT5bzRxb 8qK#O!y,\q&> p8x{'dp,N;*v.:a?=~erizsy: /1:։PCo8P:(@32p|T5A~-dX|̲G?}!z v^?Gx#( i C&1G@A2y*=~8}/)8>%49Ogr+ߊ0k=&xw% s ڽ VZ"JdJx ~`\R aÌ sL!76iK &Xs|F+rHs_'L]z(}tG\}wg;]"@^BwSw0C .Ih0NNO,)OQwu y YOU-8xu:z(*5Bt0gFκgU9oN(加Xz*J!4^ <%,g$r t&>9%^וn btxpP& zRaCMgq^nRXsC@ N QH`Le\Kq]Œ^Fk Zƾ(02/j/7cܾ,w㫓SA4R]NXq.g[8hĜ9{_ ^{[Z׷gU,nm .X](;^O?TAMfZS42AGXm= HaqV<%EX=%>.wvI:2)*ʠ\I}@AVHw:V.򌁯,$g[6K%w~ֽÍEݜY $~1q1i_e>,ȓg Aн.Z :(,XxwS j* aǃJ{Q\{Ckt#ېtQ$Cҁy.lEJo0T8 1lk0@r=N16F%!Y+bdnl  }^o?܌tG(TKYxP҅[^Tz36*pWj_!5sV#ݼq L&ؒ2cc)gYvش&8kۅS"-X5/Pbw?> o4am++xqlÊ@䋴է Mx: E@**Dݘ]WBÑA+8Ƶki3h[Ite0y,p&8aa<\ko[-xh~c{ֶjm,5{-_`i:3#bI3JqP_d8XaZHC4VW% *4Wsz(hsACWROSw8丿P 1y((!x.i@c)r;hEʳ{3΀œY[7T:&<R}믥o:ݴd0k=@@ ]P_/cn@]9S>kP6{ۭ*II}ͻ0v'W~Xl6T77 xD1JCIJz?cX{Zd)Kelom> \~%8[ V{n :eE-|, }K˓MB'ɉ`9a{{Zr3zj"+*G0&"'[>egyPa;@H#Q2ڔއI(f>4Dx +8hI8sy:#oP̹}MҗFE7ȥ',jX|Ga^7MxcBޤycus5x2g,Uq>sP^I\<{#T.xANr-ԗ.xx|A^^f`M{6_ך?ŏ<}}tA},D|o,sPB]t_l Gbu $OE$?@^@rl3B E7=Ug_x@1rPhiC(\_OB/l`lTDQ + ~6KᏡx㯥x|722u2Pl=6GZ.Ge7EhF񺻏|cE5mhz%Ed!6'5G#_ ~qJi pu} ATMgdžx&GBؽ#gb #>3eLACS\Ixpr)XpIN`) ^V M/•xG`}|~w('.ѿS̟W)ꙎuѼb㣃Tɪ^0搞td^< =e+ƞ7r ObYTK?7a7RW1)(fk ӄZ>,s#Sr%³D(}k:n{ǩ'E{04eL)J G`mWX"T$d@1e!9f IL, Ra`Nr D ZKmN> ސ8O>~:Lw}H<C&~5ظX9ǝ7/VFPjŵNzGKknGeN8JXK! ~>Q\^d= E`KiY>M!'2>~Ɵ8tނ@+n*T>UjlSn:GpmpLJUba9e gwa =9-lHg8_\AԔ=0DQǨ̮gF`~kH` O+k A6n2۰ 5ߏ[[XQziNH3?&PH{!_« KYpEwں>՚EP"UX#~{ Af^Pm2R P*0QT=֩hARڻx;]u3moHI-HolT:e-s = AbR9OHeeIDɏ~;b QA0rWrA_/8`|͵e>ֲg|&\ګ7&3@A"Ŧ@-|q/xp > 2^.G1dtwRH\ H u_M;'OArs*ęEײ_WEJXl;($S}oayKsSC@4 EY8ijV* Ge&jB#pl˘YmˠP9KXI,,>aI Mʔ*ui{{8 !8/h:>#pT"Ѻ\%" `8|^obgP⯫ V4] 1O0_. TCrBC׾0PAuHx %@>3en'_|I;R/9G^޽֯Ks<i(Xr\״Xi>-lR<úx;&|vgڕ=Ks @iᓑ(CϏ=چ"rе7WɅP@G܍oXdJ A#_ǵ Eg h5 (ER8Aޚ]~_W dqs\_K-_7g1qܝ|D>z峌]QG^pn?''m]| xL^W^`˓ sMl_gy`a~װ5,vF}־ڇbx@ӔRY84\wTsI?T@bޤÛǯc@oݸ`V{4XiH]c'Հ'`qߐ&}uk;a(3č f>ӧ}&~36 R< ,͉W2`[y? (eY񱮿^W{}s򫜼cLyC˺oinwjSנgerEQONYC0Pa\\W Ztĸűh=JRO4![P _kP~w(Y~)ڢJ a+(QlxPeb IDAT8zRf|%LEN}QRbBw;u+NZa"q㶢cPLZ)Nɔ\=OT]2s&'𻒯Up nխugěz9+׌ S^\B]L]u 8k%8 k7VV:/_z% EU q'җPk+!+޻+!QF%,?O#F(Z52 pƄ$b2׋$ = z?d^ӗF`^Wc В[2j;ZP/ [&){whf0m9_C]yh Aۢ'ިF 0s:PVF|)O!bkQêr> o Vk(tR`jja/`TJXRZ{K>!B6o2u3`->x7y|@'0Ǔ`xfX{(24Xt%X÷h F[i"uHXjϩbJEXeYn |sZibwLއ?v 2 ݺs"I<ַ+J2،] {`=#O@]K0"!" /2F6=&h'MZe[g#PHom!}cehcJH:m:B)#4ew5*/ l6X1`a{A[J8 pag#⸊ccPE3: HwcT 7pQ͸vXtLJ"&C~r/+&ϗm{TocjEwhY}@N ;k 0gjE]*zA-v)aIWte\{Ih9HBL^'l&pǁ_Ml+*UPpg(XPdMQ~P{]6Ն}gc߿/tYoO c']W XӍ{Cͮ0Ȫd5LpìrۯwX&  JWc]Ʋŵlr][b" c:?ϔ@v [t^+@ti!k^LSzvՀ6\cbe'-]*;/ރ%VhuAź{ޗ'V'k{YK2dW `p /0%j6c ! Clji %(>IS#%ˊ9ݏ0ZVjd5<8$(g`QI# I( # T?U[y](&)alB51T1`1 Q8]t!oXJ`Q)"nd|Lfтs.}&W^nvkT#0d&hä+~ ..jmJx\ O%9$ .pR>CޯO$p3B'OsP\! OC ?-൨@#00tbdńHo*U\/ڋxjy[1忱[k;9ZbDucK}cg+T):xEL!X&nWuy݌Ogb++{ZB&^i8čcGkp't: ]V/ĸL9F fڔ32}P nA0l*znrJW!w5=w| 5 w\XÎA:.dkzy.ŀ "BܞWظ~{ j |ojPzC{-b ƩM'e:8 㬄AxbsB{:fsѫG0V英Up%#ISb,6 2$Y//d:\UoF O6KAK Z6Fiy#U~z|?Vqs+҄% # Wo onNIzIôf.DiL%j9| +pW2_(6Hݖ [{'->&^^'ҌA@G4Tx?bj>$4p:L !f? wUҀz*E3[N1$!f QWí&#81ŵqBu@OzPҗm_n𘫮rFq+5PUNτ0)X@Uq~`qOA(FG w-BIųg72Pe&5z;Iڬ6| R.2#>So-fYxNKd%ڦh9?&uCE򍳝ZQ)uclq5m:QzwPi21/c|-X[L).]ɗgHA%%5Ӱ.sX-0y50JTWROFRX@)nq=0sґ8xjk6[@$%D׃:?S_[`ke߽8 ^RO?6_^{T}3b?H:!NFk.iς,Hv oAAb 4ܖ[ _SYqn>+7|sva CD\@YyxAPj&i6{ڎ{4 nWRn 9!mh˳vb&:KZ_4J% BG&nIǯ>ge!A. G+0pZ6,W[J x7\-+Snm)-v.~k1 AGêTuPuA5y?dȈ,_''A -ґؙszMY{,F->pkUB]1 @.V>8>F%pn  9 F(1Iuҙk)8Fxr jB)Y#kW#q9j@u@cf)(V%铇OS1Zbs֤RBT8?Vb_K/''/cz@U~.WT+3&('@Xv+S,\z5XiKm b#'x|Pie`f^LˎG 1׫BW;BpE#P_F sDm:D}v/@ \ XDӈÜz-}wo/Z@C;oWh[u * \Z#hA!fpKn%G1!lՊB&:%p#i oFp\p-*mp C*=S*7L? _VN>60{{+dř `C8;i_ l.[G`}jv7O{']Gnj(1?@¼|*28w}C 2HRBAGM3t %UA&`]K==@pFP@p;q-XT瞨I66"@V5 -,Jp NNgPqT 秤]iN"ƟQpd5\3I ," 30r Ei5 @S0kV%SKKY2kJLVxՄsZ iiirs:TQۿI?{T !*1l:`_()<,*"Q@ ͮ@u4:qn!v@̭7 J87Je=k8xE9 6YF@H0/MK ERl0v7u⻷09DIu^O1ӶIkb[XY:}~Aè?b dQ*`tjPLzc#= +kPg,]cP؍Q dY.ޖ _>M> 2Xf,Wh=bzmcſQ3mg3uۿ(فOJ&#X #Ek| k;PŲp7pki%r Y"th"28= 10G@!F)_7'@xe!(xA}V*$4Ԃ +T9v?qm{kADb͛4K(q_}(ĆYԦfWPi3#|" 7AuVISVxP/hTK/` _cuqF0׎KdN Lb h}d|chB!\m~T܍t۝vn .q{h,pTVYǂP+K%ڋv#G JH c(P V%s+rx;ot(+j*.Tu+v %=aPOI^"RAzPLI^gcMUK(z1Gwg)ve\G>$&HEZͶŊA\R0kG@:1Fl˥\-Ijtس?(?`oa//~մcf69'_N ǩHטt -;hυRr!;v PKhlc-)Ja 7Ff`j,ULb.)5 IaBO!;Enl] r0 <MC&tL泋rVbTD2j{iNg'y4s29\M&'^mpC%=@*PcbK,J$D10M9}Ȃm* l;z_2L)Ԓi_A޺F6ݛ7eX^R$16|GWbjHtFV PTO^\(p=tW|zZ db|ưlL qʘ\>z(5%ࣿ=%"ضZXl2`zE|l%2 B0 ӈQ2mJ1 m(Zƃ `Aq 8 O*~ J+'q-ci ^E._Oz,⑮%6޾};n4}Pf4fߦ{,IGOn f DPjW]O Na8^|\mЊ܏1}JFq: P6&1Ҁr>0ScRÒjfX*!VQ  Gp b7y}΅dgh~gP1iQP{5?4 p?bo˶T/icALGLE=yu<) sg(yڊt7%9UXC3&>sqL`l貃U}'r̹%f^W肚gbq(p\M` 7Imo67җ*V&R +-9BT$gj.ژ xKJAjF!ؔ^S)m r5M軩"jT]N+W=-$DY-ND)pѪgNs@'`4` nzX9 iNb&GW eR`D({ rUjBxFz~ yzZ~:6u]['o8Dt߬mBRti'(WP"X9SbyԯW!(WX A\4 Ud*Al s:-d_[ui.dm8 Gϟgz΋ Q@dP&R|7p2\K˥K2>#{[Fd!b)s7cW6[˽6*YG l0zp@ DuB i2%<_޲'k; v[z_2֝tޝw| EȞ- o:?jBl9I_< VFX,;e}s6`;1r{zN`D>{Z)LX9VB9P h .bj7<`~*ַP0̖|\@~l5IXt5]e0[g={]B+8|ջXBgPp%6""]=]̅D`>kS@ P3,8`DrxEPXSRy} |{4 GI=><{ȂPh[3p#^wrHH}FHsJ{K ,^N9^4 H:{SͱUv6i.64DO3-f 2҃@\uLyc,4:Z?ZI e@sbImY"^ 6 jdMAebrQ_D眴מ@q#FGFSM|^w=q]rK_x0OU?p /<} ɵ XP"O+.>[^8Ur'_9j7 d_ޤK3̏A.o 1xkD۟p'ǁZۻ*(}jBq-p됌d?x[p~ Kg \'՗c_tzXJNDNCE3GQt[ \⥔ x6t=!9=X[Uy]H%B^S%y}~FNDz_G]bXW8H = <2C`@:aH`nn1WιW0\z.%\{Ҩ"8, {^d'fk+LQM85{Fiױ^N(/oC,bZu-;r⸞e{5{Z('o޸Ec?F4CV¢D@%&=s!DI(<.AɣdܹYXywF@z %֮cmaUM<\ ٍ{D6QgOڿE7-Rr pc:X)@JwG/ut]ەMJSV *5J-7K {^AV`q( sۤC &݂,BT egmWphFP뀃kWfHq zp4AijN 3 Eώ@kU]]"^UG.mP5 O\n ~d!ہS N,.(㥐Qhk9_EXew" (q5Aki's]^[/,%Ծ8#BϡwV(n%ASy%H]DxW̡He^0MiӒ5ʋ͚[h Rv\v<Cs_+T ga(2>;NSZ_I>Gܛ|/}-׏[^ENoj#GXZPjP򟞜N_WO~κL\  ˃Uøcp n8{jW/(|$$ࠔXDp䩬Cٺنs,Q!^9pC@{)= 9,GBsnpS|Bv9V_e޹qR6r##8Co{svϣ>R/6–I 4P>ckGXy(U3DPT4I{"&6(H7On˛3]B cZ7yBO;ncՇV6P@6 +Kl[T]ҏL]ěL>%X0XXb`WtF0͇m=xu]lJU ˤ"o^K0݄ptUv7wSks50+n4Hk'tQjZF*Wq0(* R{[tJ.C9Fx4R%aWv\'~ X7FoGxAIw?r#V);g#d>^GSM5*,>'#?SF䮋SL'v/Ni!8Iw;4z6\kV ui~]!] ט37XcK/(ዮu"H`UQFøuMS @vA쥈=ݠP\>y] zjΊ ȶrmA3A/`DC+22+fWN/:,( EJl早#g`M( i?)|B mʯ#G("^tzpLz} !& ud檵wZ^%8gRv?3ϭ\l-^?VobnҒKu0*PfòPܹd,1xu];$vIqQ8 \;,E k\ UijVWDX>XS:^:x4Vh. -pmH2`KX~P ^R`bgS1۰ I PO* 3L)[SOл(b/"8&l:3m$I>y i9=C3H0gX)(5yݴG"@awvM+R¾3CL#8Y!J`PA. gOp[ ml]=g*W߸s^w+h%C>O'1JaW#VN@m\|)ҋ>畎|ifԽ-άqՊB5QpFcB(`-VM~C8z?0ߢgOҧD<@Mc]1kWLT:!!&ˏ'(sG(s}<'Bi IDATR~+Kʠ(|NR~-3ɛc{zĻv6p!B`Es.aղVzenZ _Z @H<?&pA]zw}v;.!b?" $P\A!s]}=OLYI Qk@`h`iRa&AMy]mL9W@bjY<;חFuZQ'>_bJ=ӰDLO!W! O#Хb Us-DTiA mb؂A+Հ"*tE(Y:L7<]* T`[Yku7z֧۞ F#}XN[lUdrګ}a`;X?gg4/@r,!X~ xev ΰЮ.\`pT@k;(%gsI*ڔY+& JCE½/ yf\}p z )N{|Ψ64Gy+3زIjF+d`2HQ$ p`Ϻ26nܤĪ%iڗ anrWW(`۬wx u$dg{3=}<`tUjv}U,%]we(Fa=a o#6}k lごt5vqӄ5<JF1c)݇Ɠ6q.MvpW;HMj-lR}(' = @>0] e^xPzQj6ZڌPb"CbU]b*'(X>݅HЄR}XP\EL4#.f`6Z H>ij^k+,+[.kG\Xke9gob^g:siVx~;a]zLU1ʋ/,%?~ RAjse>%=vJ=@.X(k`[0!HH~%a~`Bӎ9@vUy PQ l Xx^ `@0^Qv_Qc> N@NJqƠFL}(T(vF| z`3B5 p""zIO?R{4my^ Ti,6Kq 6r XPS $ *mUG(6ɣH "PѦMoH1Iqamk B9p". :ܜ,>Ӑ} ܶۺZtaѭbeMaE2ᣊna>Ô%? *mzrSY,h'(SIPEX%J] xފE\R|DZ ~حUʮ.btývinB DmJI޼C~[.#8;aM;L]oz .mG#,(&y[$|YPĖf}pi+ p NSHj,G {cւ4}6jڡG Ci»B#\$fU#\yDMn@'%Y P(Mw`҅.1!:c%K-(?1_/jRTnK]:ezY¼WdRF`vӌU}뤴仫.Mp3 >#HV T-v O,-JԘָk-:6_a@%~;#\~Sq$' g.SsI^EG{X6AXe`q# 8 TcF/AÒx ECpvbQ5˗l,r;IJ %0 Ç%3*=wnN-j-:/`|m@eapp/6&}duaڄ!T*Bs-G 0T gdywgVʪ{fz pAqXnhoC B"d@ p 03Ju]4{>,鮪'y<~gEbu —BugKܞvkYXm28T!3%%Q&InF ن<|iGh!`?&Ŋ#Xa?s:lG* El5 ȣsLq9; I( %TwpܔGa.Q9ZU9#(!'B)ubh iĊ^q xyy^bxU ]\96~䗄6ě ,m}8h6),o2=;НVK$bcnsdP 2JZe H,i<a*J<k|H9o ׿QAtx >-JO295J yT!{k]#z0Jfl rWZGMա @bm%)&s񫊅[v:^c+(]kV%~W~fA\z*%V"q&~tʰdqGhU(++`x ~ҀG/C/>bs<|2YJ( \ޅ$XK3B N~ҵ(t_gL˨aX!&ŽEC)kL?GȱKFaP*2X$77k 0*g#ĦJA㰔(Hjk>@Z֧@bMhut\dC|v ok$7@-Wo+2ãq)t'WtEi6`dPaڡN%l.fsN<ľW#7ǐ  [eFKQ*V .~,ރ#T$eP}rLEbCGIj2PY={G uۏpI/Ⰼb3ycS+A؅6} i u(+(Z(95PWx8j& <O"Ǿ Ur*Ou5܏20Kϯ3Z~ɽW@^(_y%YĥKl?FR JI/qe( H*rg 6(;#Y8%ol.Ag?,f_+bhlи g^^F-(x20h)Wq+3< Lf-WC8(|սB%>H@9@ٷVJD.J>$1v3!MF0œb=8DLAE$*;4Yj\ A5= +YІAAsD*_bY%Ƶh@+?`\Ϝ,0MIj덫Kb̮:]n 4YӇ쨱Uzm.܂w3FdW 밢PAh,g0,pJ}q|d\1O?YezX$CH.a)sdȀb\_g.JI.&9ILpm[5gI,>^[0]']Gޗx tY V޶>y($ D!(~2v)sv|:`|NC)Q UvlW_<&Ñ,у[(_r}Gb@qe*XBgP0o+Y|[o3+(]/YUCI,o`/pL…gH9ӂZ Os C @- ĺtirG%8:k1_C Ҋ,dNR1O]L-<,@J_.^7íP(ӡTds! @8ԄU,'3U†5(T9}(&U%J Qagڌhz~pEa>U\{(}K(uϞS1kZ|w_~ɍW@^,>w6XK#ypoo1Q+(Rx'{Ϣ װugnvWU.k j$ ǐK[]Mzl/qK,qs$%y+64mkg p*"ZQ^Fx.OϵΘ`D$BEC0ЕAsQ(|ވG;({3Z( NGPw+$-SAX @i>>#F5r ?°1K4ρo_הJ/)޸xΑsbpp!Xq@Xftd 5n>̮wCgα(@E &#hH +X㸰2H@ꇔe=}Oس2u MVF9 KoNW`z4qF $p5h 1ۘʖ|=B/@X.2)Bwsn? DNK CN}u:AB%ЛA$k;~2Q_HyJ;;'N\JM-Ĥ3qfn@.%Βm_ ^il5E)3fdSCh/hi3A' J=5heY&fV=]YD ړQ25[o<7َ ^:OGpc = ˬrur;lJRQ. am_&`1TA.4 <*OauYbBw#E*J?T׀yv8}k+(kMluZyy~Uə'-FޑZ <̆P:.lA^@X1A17`"-*@m#8C5+d#cDWP.vrbs:spTT^ Kh ?{rgʛDq fL]RX@VP/q/}w+(Y㚎E-_ S%.Y{҈ ;8/XȾ;{0IX0>'O/ KɯU$dZ1,AGKx !٢+J}9(KyABX#an~aHk&~l/5d`\.CUט@`zl >^ IBZAq?XlQr&lbvp2 =E }iWb;K#1/_(SUĮEM,1Kdzp^ᒼTEv.yi1IN`ySH`Ϛe7$`c>d!&GDDgH egSI.1lУq52ġmoj1шSh{X-ZhiF3seb S{`p$qF]\44O4[SM?-n4rA˭u-N XOIBr*5B#SKeq:L &; !i nDVnx 9<;V)BBROtcˎ||g)1E)O0RDY97l]$}}p}5^w۠-k_sqH~<\:k z( *V <5=Ǣu@ Wƻ6he"4.0wWr $"SyǓg6n݋lFWD7dMʑfX?Ǫkiw>n!JWePH܁; +5jfdM,!zrxX Z'Gqjx 9*GTHX)1{$3T+TtC mB9osB8!EAD0? S&E8Ƕa2wx (@ 85HW@^,c7`׌p\J$Sy(ccNX%pĖA C\*]0p\DE2᱑@?rD4 Ro3ڹu;:{8Qj&XApb>@˱Ma(|+ IDATDHNiIzȮ)"J(=,/fL]=dv\дByئk~H͝5ڍK4g8C`ơ:HUQF!.G X}D)5# `f3 (sV\z$Ҝī2u 7XG5ƵgIf5[sR7^x V_V Eֶ Ǟ@[aRJXܔL7nu@lD,9Z qV͋S0/#X y,{gXE״5 -Eh< t$x9IAsvaě]dދN(\ G0C` 1;GuAa=@FB?]4ߢ0٧*! '0xb??/dJMObHI:ëi8j,5EESފ()!C%;P="\ln}~y %B 2S2țuםN2HQ%| ZgH\G),\;(GW~BGzy~[ߎvyU!u )+}h1^sD)yApl.b(#Mf36HF $ #\*xQlKcu̜aů FJ~d}vD'O {pntwk7DWs*(4H c(%KiC+??ll^Dz]fc?*F0$qa3vbF@tXg߾ƻ%~T3H:>gQM H<$O|l ظ49 {eO 80D ~^GFF Z4[r4n됦-` `=7oA|"ѱyZ1xsYD(c(ѣ=_,:Rh+%3/pa@+8 ɼ+9h \Zo홡 P߅!  UCk(S G~atwNO=4]2dT#?%ZJ5Ο os~GI5y%kW Q]> Ϯ9uw,1n9qG/Qcd2d[۸\ 9~ύ;ݻQ}k4_%4,/T=^A[QڹK (PfuX%g)ܯPRb˱#'=P* *>BxpNY[ߢN!I %RŸ±(NA3Vmsf BJ~=E Q}aT=%n<>xFit9eB2[A%ĚD!Sc;ھs;ܹ9Bذ!5m?~i҂,Ƽ;b䵍͐y}|W[ &IBj@TGm,q<-![QmnTmDU{%sd)H g ]ގSXzBy~DŽɫo]=qJ(͇dOQ QV(כs\X+ X}:pepL1^r?`|\wBC# 7hhEK)`FҐ$ QŊ9.nm1?Dq%% zBƞFc44v ̗عGAXs8u?/׽VGi6\c6MvHz*]Y,/A]ߙHIxk28j/E6m$>6Ry5 TA 3.R'yB AfK7^|oFϗNjl,q]3,Ή?Lc E9$n_RU<%_=eZkdڇPCD/cƘ2!vE 2a(9݌Bq4VR&{E|kʑxL5s x]R"QR{$߽ߊkqokE6_l7xJj4>yP T`k6[1 QӸ2蚪L5\n\vpts%՛rd7k2 B/~=![>#\xJ\KYCF5,2˔!f p0v:qh|u&Kk>9aDt|~F¤ H3N,|WpC i JMuߢ`|`MQ6"梂#wBzC?;h}ė6VY;x)Z`>oY*Ew@#`j 8 5)ǣA]ӏnkX]#>LBe3N/j#9+hús {EL !X%i{zp=iҩDϛ`$ou*Mװa3G}]D\ @Mb3 |+V.j $ 54/6inּEj ~x*~|^%`@ %aW-jM9_`owf31sh"ħTj:d*ɺǃPF0` bEh՟Q`(KAՂ`! '̈pWPc_99S#5% |)/D PTiEa<}Lq'8=(6I>˥Ճ/tX%$ $ 5+_>U0{9zViDh[=[s}yBoZ0d-pT*tE(a-aCΎ9r|u|e$BSVZRT3)RyMBruMkB&=cxK|[ <,U xV!T Uu*Ufǫ$8] B“WH"ZRdk} Ag0BuUs^>o>l7 _*L1ue{XYPCȏQFȊI @-cY/?C3;W/ˎ^* >0%* 8eh^.h-J)B{|ߥ1Q*x -I6 J2"Ҏ+H5aJ~s/٘ l_q}4$3^m.]G'&3Ih\fZuasrQ\]#?@|~ Ǔ7x2K3:`X@ۻHe2puB{.x܃#h!|M&J<0!}K-CzDCp<$syR=|p,:'?VP"E,%!} 매2 s:$Z&Oe :LϣZֶ\>Gzg(Yz._64"P+ihT韠t kӕ\>ؗ3臜7UhA $ k3/agX8-x^>qg|kDZ; Z`)JG=}tZ? Ju{@}ݻkT)L1kM@8+ XW29C>p4OPjsL9AF5BqfQ8w@d6h@K$3^e68*<ɒqE ,/S/F{\ %הy'Zx:Au^ߖæÊAGx{oS .&Є q""8lValT IȭH< wy 7m,NM;hcyGx ۍ593*L!8#/pFr-Pzg7@J@|'`5p cr~w߽lC%D8INH`in6>痿Y|tPd^AAMNry8- YOA.a^?̾z HAL& Xe[;kI"|%p @QXcpg&OQ@X[ %y KQ7$ (O|'MV QoX| "5u|>dkff˒qBN\GF[G[<$ [ -C3p OѨAD`Jm&/NωI~~/硤[o^#a%x.6Gf% 駈ⓈSqI DtjK>K1Ze%_7p` r T4).@b6s2UC*hU52*P1% ^(XDEA*)\^c 4]\s]x+L-Z;휆DY6VGfd z6C5owBx9 v)#bgzY~x6 "__g&f{g>ՌS=|w|(4GϞATuNNو/3ӫdLI bn]|ȵtbMEҡ%ÒS yib V?|7JBJ^{@f^@Hᛆ9z(0(iYѦB|qTIک<*"cQ(jV&3ʀH0 E A%?hlցbAe@j%FLBj=Fot 98e;؏V?"Z6Ldg3x%+0 H>{:.pY%\cwOpB rYw|xKzTYK- >|n9~B;}?=$f"љ20ˑ)(/sgTϰYBex %>s!DT. ,4-Y6$uuHݻ{/]Ԥ s+&̐;F %8A/JHcF25L$t_Lox%Dx.M=ђxRu +-*_ L!noӨP.Q5alBAE}{zΝ-؉w9wnIk$)lf+dG::hP,qȀMK=zf<?9"TTQUaY"בgI4OǀhUzwbs*ABY'## =r'#@BuZר^$7W/W Qoºzq =}(qnʝ> c 6?`%P^?K6ܿ wgn-!*c#C|N+.f> ]Xh$:/ҫU< <ЄsRuHDS# hc(lѼgTGǷ^g.6_ۛ;>L14=HC,Kkx!pT U$n~5kjj6*v!\D0 afX|p&Tq&IfȎI/ L$/™rC"8^l@<} ٧:3:> n2SɸNO-^.F4MB -FTAmQ4q3<Q:Ǡ $:Y KC2Zxz@#.mIL[0вa_+(7BRx߿rqi6BwxtHo릲m9;/n)OP.zc}5qÑ?w Ȣg_L<#qy%CK} oC0K$ s(Gj9T=:%{AP B ?X+Wx /Nbp2%Gg dPn4g0c@iÄZ֚1|D#h >6f֋a0@PWA>kL*ъW7Nm&|ɽk& y{CVXmz$-dltHkچۯL IDATP9@ԱI~zC$t%0m,&9a>t:>Ic:Vo3-hwvp(%19}nJ=Ho1Uc{9ã,*MW C=Xy8GaR 8!F5sC2%ځ*A~Z=2 *Yi+ B(Oox jݴJixaj3ۯ~h#ZyQ~A"_3,ud[ r}jL>9% !_8$0k.C<H:z74_ K\KPd5߾ExX0M~tyS@$ 8?mq6lehavk QVTPDX:/)}}'yV QoUI~#pXV~xxWS )BH8LKb|%D??oO%c] (& D #0q ׳g{xXoj-rV=žb2 ˩|n0d[E 5 ;$TNaU 0[](WD/1V* _f]E@'I<y kSs{0B+XZ.D 6McfAǏVQc\SnH"*dQe R^~eK3$*1`UJ៓NȕV1/ W QYEϧ-'< S)9aA+Ϻ…^/ BthrމSحp:+g(T+@d)0jg_RyZLԵȄi@Ru#|A,dA"'&gco8rcIB_ = A EE`KTz& g(Bk̺+fh$B MO9* S? D"XyQ0Rg}\AC{@tD2e<7h@! B4c:;! }o }L6X"Iy=gLT#Ws@ ‡+ Q@1w,/6=nn𚵴Fe). +Ӌ-r!-0dcayϟA@ ms8tǛeXfoGSt@XuIB^E:XxvS$.zO!ɴ)(I=3>{e%dNdc zJs*e<ބ @*09M qb"<2`xvC: x05N}ɄbXgU"h*EO@,lx2.7/'^:,V!R8-(= 8WW-\hP;_,Y/@ZF˒=S!&4]~Ĕ`Tz@d56C8j\\CBU!bg't >ك+n8P& ďʏz ΢jZ_CnŨ]7$5Tl3":OC[kߍJ% @^ nmSu{$x_p!Rv};ռ,! XRts<Քl[ x?ZL#O&22ɦjHs:]iiFm ?S T@~#J. QvM,̗H8o}W迂zq^!DXl7xZx_ WYobpbNOi knMA6\aY%vNPW^O5ݥ",@1Mxݾ;MYқ=!VePEC9a@kpx&!.@ ;Upprg8\#G3@!P,_m sP +n| 11 3x8ߍn R-ĮSQ ohϧ҂ivOKmc)켛xxqa/n]?rJ*H(| #%b։JgDԒ-x>G`AF!h9pۦ{DӔ#r.E%HUhutIQA6xc>Hဥ ̜e@VR KeHBYҜP25-B0 dWPү0 R1$z'я=~@y!Ym:pԯDf%u=J D0xD*S\+X|v,F~5=7U8pCgIM+VqXQP8cl<|Ta|"mRtJC0b[ȳkPl)dy#ГUz_+Bb N2-Y=C!\\5X2l?ը a*/)وeBѿ&O~" ᄓײz` ',@pK Rؼ6E v ? ^Fws2خ=ZUg6 I:<`U ; ( uqޥo$UɔϦʃ^`9 ? ͝!}(e@gچ:q`1ʢ4tZj2 obPbPxe<$+H`fjE/~N)ܺrY HIC8Yv&V QXŅWy_XMzhLj91.W2P-6hq`|䉿:-&@"pLQ V؆z=={t2$MBK,$JHsp%[*äH_HmES3NY7A `HBADPShpȫ$:;z{Qg<V{| uc}g%ߘېc%gQVVgf]Q 'Wxʰ;rKaV`,BPݤ9N 14e(qBeQyqT"ni- >\z@2';HL&'&mX(V<(Q@<=~Gj>C $ 5k|s|&E Wkeiŏ.oWZjkOox)Wp0 y~rwD.~؀|d$rѡozh,.4(Sk 6t_j^[ծBީ`iLn,$眄J™&!Q (@ԛ*d)@V QoX \qk|l2ˋG>ĭ 8~D8OF㐬B`>'KCI Ȫ4>^U,r}+= V&;9avt¸o:`^ΜJ0I  }~ވPwSIt9 piC4[o0a"GB_SO Sz][ɵxq]0<'Qfv3+(7¡iF߸_ikT]\3{xgazdMGOP*yr2a&YrN9M9N\}9+J0 tHGTT\3VPcbοyX*,I!Ώ !8cN=0Ob?' IDT) pO PGPDyf4p8$7!{ Bo$"D鮵X CIG=I2)nl5KOa.^/`ոxDX: -[ R0e#{ZVToX!5g''A?{lw`?%S.<4C_LAa q:I)< QxSd!6O|pN&u$ a.-p?OFui*K@rĥg4 ,@Sf#b 4r<8C%ʡ &#Б/ayN[Da-ycWZrt p%|..zYL 51[3.CXcH5zL y2ZӷP5Xa< @H߉I7`eArx-sc!1 w9b&ICXx!|_H"F/P\ {LHGX~oR2c C8q&B^YIhT)(k٠vc+(z <(>J(o 5`!X^oZs7tPt+[ YrvvZW;C~ )Y_i}y5 e'7۾h/t 9?R *^@Ud\Q A>>qITsK~1#`Q)b(AA@FLC&a8:]ųS@D-&8%x ])]: ItDaUq?"o)?@«*6 u^TLY%nw\`Soݱ<~dVv-Dt[UlYY_^Dw,O Z0МB0[ǐe9f{I`6FH"9ʼ&G!&X}|AXh9({Pb?OXq! .p";C陘d?X= ǿ>l b̴Lr-|s/@ h\bVksyp {30V܌xJmL';N/N,Ex5,cZLJJC8ö*|'9l>489ذ0Z"p" =LVHgbZqu!M|&$'pFҳ9e[hQSz Jz9(Vch*@RQ}C6ϩeUKor}Py5'.,.c)8bM՗!w,Z58]~3kS9 qXz"a\mR9 x&N͎))"`sY1yG(%e8 V2$$1$r-bO/fJ[^ϫ69PdVk~N2S BsiB [0Q#WEy_ D-s)cHo5 *\p $蘬%- NԭȪLУuӜ3vsvˋV!a:zEC #=]2e2K|?$ήAn|n!k֌*(BZejʀsx%)+r|LK"%-zJY-QQ@[,M B ੫Bx3ϘХ| z Ct e5nde^X mq 8BFOzy9@.V̘?I=t Op{b:0b,"cBi!1s N?' I Cڻ_nAzi'OWz –VLa]f dAp8Td-vIbXrHWDoB:,K'S%!S+%"zlnܯXTN8/[t5GI 6"q6zv:`wN &؋MBu,2V\>@6T 52; :{RXzBwpC /tKߪV"W e *KŤl5VFʔ%FSrk")BQi+CIPYh<\*/G ֨F%#x-dH[.B,.2,![w Dx vBynZ Ŷ3|S ƏG(4uK m0C~ |#*uU-3  VAVC,J_M~xrB[P̐ܳP2&gAfz\" , HZ %MbV8J_j#r+N1[N߮f|˵Mo=P%09gdn |@{€MC4|u(mNk8ÁB 3'p y~1%9,s`#f4W,*´BN ՍHQ~}JCɜ\z3m5?_E$ Ή?{+9bm;$"ҧ:Kf!=KVF&Xefx@$g,ixfDCI!H@( #7D\ntKA0x"/n<n\ @wML/ \DŽꆱ[5,)(E1c` V/aSI@ByoD Jі>cE#Kx-J9vA+p6ߍ?z?wo}ރȿh=Yf6$R !*jD|`T4 {TBLZJ1!ߤsЁ#*(cMB|f%xE=h;}pz:CYdHZ "A؍ܴ6ۈ֫VJJaXYxG}UIrGT^a8k`E$=V.w)DeG)obrrXR0ޯ1$[=k9/J BRBItRL)) TmLY"Bax3a^^,eA% @ nKn|2W~Z.[9'19>";.^D?>7 l#{+ZM!ޮRfG)ܐ8TdZ0 hSwlJFOqѢ{r*.}ѽ@k`[!p8S0(cvAP8 Yh('ߥKjTI, R~(..x]8?q{"oو bNJvS+(ZIhgX RYtZ +4gV8|l1S+rt(-O Ƹ B'`:{Z+n&UJs܆bD+j9l΁1ina1FX~Յ!BN0ʤRB|RSa\#'(¤Je%ORG`Ħ%V&j''>8c뛯@T h8{"Do0b_[!""(. ;{UIXD|U_b7XYeD%n&l(2iI!˴:HV B{R;7NȮh=XuݷyԝXMcz Җ7/e4<=|q)??8c,R5 ?nމ &ʶC7!1ރl2;9*h܉/<ں&-|"9.u6꫟Eȵ fA~O3A7@9`P*IdFaǪ7T4xD8.6M|#Sw0񃊡lPBiՁ%hLrAIGC; HaI=Uyx\3 (>FQ߯ZDjU=,^ a2Q\_4O_OV؂ )@RIFh397Gl9V %Q!Th&>694fepxO7i}0."{᲋/pXd$E9q 5&Yß Lpb{tcJ|@'#& KdILpxI&|N4:xEt;+ ?J=_U["aѯD]7]tfuiCBYO;8x=~)zgb4R#zYȶYh_ty^`` *B=?DDc-54gQ)JYnLY@U6uo@\Æ<* ض9i9itc2!LY/aopLSs:EyV*eF7,\}8% -Xo]B~ UjQFaSŴ. ?-^x,HW̢ח|- -5 .?,m8֙Ga C@eHA+Yag{#HyJjx)IA fFh)9"j6ꌠcLj㶹Ȳbc ALı+{ ݸzK*}^T1RtNPf*>٦QČkKQ:E3xL]<D6a@u2yȦ%Ϲ,د^W\/@n"[6 >-|s4% v7p WH5p {wn[%«d#/qRn5|F2n%FT%6'‹ESЙH0ŧ=EC[d9{ٿU %C#Σub5 3_ZL9/!9F *VH,f& ]ʠL+Ã/Z|W.o?xŲp_(ǵn{[HCXMAg/Oo6C,y)ȋqKa{5X <' T@hsƄ7 4j+( XZI A+W`m=.b1}il҈z ޼د*J{K#xG3NX" r6IjA"xxI3+"g9>gʇI@6< Qtrz.oB>ؒ,ϸ`)40Wh|V OΉ,T!4&}ΐpp L f"hN"19-920iYؔs~!Ostq=uTŠ'մ3͖9IKs*:O o@D ^]~1J+/W@ŏwx8ޠM -׌$r?ʚqf*OARWW2pR5"sޤE2|DbyvegU$Xr}J!!_Rn֚ؖ$KIy!lYKmKLppv{w9>4̢{N9*yI h7~ 3*I0&tCǀ_@4[x["1R /TC v!گ٠¡3?&e@'cAs#~BiLh+k @3gُOe`? 84.C$`l>!y_۪kUkH`d@,qƕ a0gZ%z/xj :Ό`GٟPm|f`WBZ+ ipMуc΄ 71 # SB.Cs!I9eڱIV5+ 0'dA6%$W~ehs Ğ0 z4C4 qEhz| .+3U11hh,(Z |1Cx)b:QsOF;KQ =2'̆U{xO(J@,]N) I[|u/H> S_es#y9CP $s[BG#AĪ !v[Z+J|sqŷމRX *-7m:נAΎ&@elP*"|*]9~']=WE*/C06k: D Gpo` KUkxY~V0gly14I.ӊ.90 4>Ukq!N! XsJ c~2m4j ^e[T>#dA"+!lR0;o;-!L`~PM@+kEb&1Ή8ڡ >+UwwDV9IAgD0Wj2;lrSjͱi4D0'>BVP `&` 35+tY|Y pςn(0JxA\ F}µԗeVWUR_g5#1MvI OkYK0k1?u28`(q߉C3q61wb\ oPlUZ `ʹ5?//"^BޕuXўdy{ư9L`=0￶%csH0Іvh F- Aۘ`FO#pgNn~YA{q9{s jd xAOc;h{`mwQxDsŗK 6J ݀xRzj!T📃!sL_ncVhEYb"zl,GC ow&8"/!ùB3,Yi[<N}uK1=:F m41>]N/jjbH)L;ҁw@.<w1ou"[AYp"f޺8FYJlAd!u{L~ĘSC}#;yU 3, ~R{lrl7݌0\C%$6ߍrDiAcXa0O*E[ R:iR{'nXsbEHIT.o*qT CYx5,HGB$X6N]($dXHxl.($ɉNaPQRkP&`LQV,y.:gMv dLff,|z:$Cv&REuJk  t'1Ho.ij|#B0k.|yvKi,}z0T6'ܜAV1%"PKt~w`%;<ǔ'7ݑĊ.PehwuI]|u&v9Y<L)M{-l3W1*2Ċ?{K` 7+JB"w)*D"=`DcA4@ZL\ Y|,˄Aa̔Jk`,68e^5-c57 C8rA`@#5 LgREL a O D/ j|&9blӠ(*{p`?!{UgK uc!LJ=a*L' `B2'$nsF#>=q pr%`84ªG  NЌyCfY~l_yv>q~W%5,3ȪToUiJ@/;uY0gR̖*h ߟ)ĠsXV $ 1hJ_ko5&TaHw%vP\d \}W^#!Ǘ/ÿS Ay&Dmqm:Ns} E{ 37/A3j bK5,#$Kq, k6DZ@oG6--|caC0/"B75 &1(,4 ]fK.Ja2zXc0V@K$ ]_s BGH ܙnk=8?!A` W#xls&vɶ1*3/@} n\E z"07o% {x!C3 9 Q8' |06d*qefB` `Pi ! ⵹^mea1s (fBFs1FT[X2CmhVG0QX:R&xpnq=1#5PcM_/%]!4(=gѩ꣚$-Y }CP ׾$f;`@JC N{mweA LαQn}TIJ;{XyhagkXt6مK~&գ9"*iyBc[KrPjpLa'0G% A*i! x5OWx0)pЅ8 /v>p| X6fA_{TYQB1v DE`38XV-}z:'v Pa~pV۵jPk(x`*}bD2%a6W? =zu0#/Fv6!NL–u_FlH\%:PF?K<}xEL5 MXÝ3qLDWV˸6+VAa: [{CDD?2`dHh6(O_8> y?qH ?fHȠT81jLvjCL9|hS45"0.;RH6{/|d'Йy ]7Y/:=$xA 5CiR>LƝԤ!?0#K_u}w?;4#xy6 C=LcVpj"M `\DF3h8z}iGSD5ВFIkg/V3KZ\""pl߂C_q(T;"PES %fR}Ǚ|ױw)@J^|]@ \s E? v ڝq2SBlga^C]& 8ػh:k v@DMFƺ8|JL<,?,xƘ,z6c`AF` zNb\Cʗsz`3at^]E+0$ @8Taӣ.j ֛)¿uXl ?5wȨJ@h}:%RR͡gҌ|Lsj1i]o|o 7/"[AȖk30柁d#T{ 4$J)M/H2ib rtѭb6!T|_CU5c됮&99:29%ι({Iq_̀3sP!LDs٨1)lsU>7Uuoy=F=;}YP& S_:M.^Fbp:1zmCl⋯Ü=F6w< GiP U4^8Ai 1/Z!:8<ʾw0!xӧO{$c$ `r+&W`,HwwaӬTf0T0R'¤s8d5 ݅*&E C)6ߟ$_|gsto7C#?Hj-DA(ve+жOOGe_1;s$z[պw#Zmzϑm4"4 @+2fy6a"#)*$ FI0"jj[b "!UJy\AvcE!*) FJ O YmGXהIzwSE C2AH /0q]T#Bg LDT `vfhPļ>f| m&W$j,@DdK@kw(})gmj!O9.foo5_"LGD] gA=g ;$Ҍz=|a{ G36Fz-FU#Q'23B;(b0:~P|#uS?s#4S`{t@)@t sX.-†I),[;$I L *ߕLD8mV,@v9K~廾K9)Œ(k۟qTAhQ n>} pk {AE-FA$(E Di~!J_3-Qŧ- L&0%[_^s`a;$CeFFGFd7 kUv$)_3@(ri"m`Ȧ)imJH"}eb,N+vw,!z$uXr6aU0xw@~Dga(!Vl)aΗ[ 2$鬈p. wF{ZXho0>kzQpUpք3L.nQx 3!GBlxP.~a/&#-L tLQKRt1 jgK;.B* 53ڐ>bnhܣqUm@=zKyv^͠n6`FV?{;`NidJUMF8|k-3,DEBW9ژjMp:iU:Ç1g 6'6ul7#ZXQo)Ʒ uB=U@LBwNNZC{H 4MaO۲CE&$ş9<*Gk052@%|!Eq-͘dC}'M%[0{g*vH  n{CTڂPU^\Pݖ MӝDٖ2jψ8_.qPwv(9żprј့>U^fA@|Tq8MܧilkOQK`-|ћ--PBf9'Q\[ZKE7aR[/ÌL)>-jQUb;ڊ9L:bK(!Ӄ~q%lv',)G;eZ7nZ>QѧM 8++ۖi\R[1˺{JSQL +vPxA^I!K4.XF(  LrBqMuZg%޸B=_s=Oй֋ &0)Gzp@U0C5*B0W i;|f0$Mľ{ * ֎+M`?/Rìo-?sc8^Ɓi`٭L#-e|EFPTe.-,?݇ 0%:~@$ ji CtMR;crI~KZ'wIjj"z__ (]coHNZMj.v@"-1C׽w?b!z̰Ïx"Hj%;:#6 ؙ|LUB]ЈE@-,2gDU!jT)gd6B&XWȩ7F-SwC#%||Q w{M/W x15Ov\$'kib:Ғ3kϿso]0Ӏ(PHzs ?#h r;C0==k.$3JJsVBX]Mv+Nܸءl\"1G90/Ϟ}>˕yE2l (d^ 3mEC^e>_׿Lr\$T{x%fQ?>y|D4{`{Y%^m O66 :p`ɉpv"XhndStCkWZ6!Hm\$~ًo:w> كo{ a"L"4M'S9'^qZ/USO^C+hMJ&G@Ӳylto߫c՚  5"Yi\t։15LsX g8ocግ#f45@ B:K@8i ΁'&.)@ry[:Vͦ#wQ?HBd(B acĪL"JitTy8;(Gx_^[%׎ŷQ麲uan7m QH^eOQu6Su 2%vX ^*l O—ޭˀq,>S%LdB1CZ$M9P 'w\/].r#E|!3>_oa۾d1Zӑz'=~V+cjJtO%mN |-bWO+ o ^ IH.;S]i_s9*p.7U^s.3u |^,<;c=ma>Vt.[՟Ϫ x# ¡_2 IDATxY{9+Wuꋾ:hK3 ^NNNNNG|>Z::::: :pgWSSSSSQ3ֽNNNNN;Cܙ| u/SSSSSP3w+zE:::::>:hK3 ^NNNNNG|>Z::::: :pgWSSSSSQ3ֽNNNNN;Cܙ|}zIwu*6~w4Z7zT1y%H3nʿ{oϛ.a6ߌhq[PT-J m%MFӂq޷(:uU^ 2lYůxUbly֞2MZ }l%-˭SK@g|+&7hu"߶[]n^Ud4^]X) kb$ RtHYFƣ[5ydz!պ.W\yd1W -O&\@&@L%Z{ҿ׭yQljѹ }+:ի~)EQ3_Tw~,U1Y 9F<'R Vb Ht]mKW|Wnw6_bvSwO7C(0@8Wрr3G"' h 5F6|4 @'S@M}k>\z\"O`6-A>4k޺...RVp~~>raw/(8Mg2OF磭055hP|Q |:0 0CCykuRy7T4dA6y^ʸ$mLoƼީ5ar5q{){@g~=i(DT `5` $h$8o?Y!ZLFʦ//E42U/(#b7eH NzY$i+䘏pC/Wtz#)@g~!(9R F' BxJ$wxSxWג{(1`略@_Mwmq*YtqI_,l/~S|TO9(uim8;=vwGwm*;gciӅqHdy\jaA7L8^3hhhS"t5> A_I eSK@g/),183:Hh5q&ZaS.i{6kLzboZFN Nx>Z޷'q[|5q} 7?i0:p7K[jVII#ᤤ)o0TƑQHJHH!BwoR3oҤ|atb ?Gv 9ۏ\t|xtJ+B^zk%ަFLPkD;`> Fggi,2fdj?8ph6oӞ %vyq/Ggıh fh{hCX-Ïa&h{{kF-&P\P̊lmp6^%n٢9NB*ܤM(/{{?3/Dc4 t5ڽ-շy5y6o|e|23N ad,GeVt){24STh(v':S"*yʠjK'#0 +U''<|p|a$3.hKtj\ >L``E}بC2Hmmu | DSɪ3qbIhG?в~Uj+X,W&j R^I[ t~|qhoo뮘 L=- O8mT+pô>H>&XCC,] R~lSm420_$e!y000*.=ÔY~lNcXɘ Ȍ8%#bݝb= mȥN/{( `8?=^rYs%1`xR;jŅ@ %sk9l,qcUϭ,KF$=qe ;;EPz`@r0T6R0vd?%hS~G̔S9L?ZMueT<{ J Һ:wsT ^3RT%0|<{0RD+a%;W@ Պvk„Mh*;]L|ɽ( &x ^(Pђ};A-) c.|Q OzQUEz⎛Rl` abZv։?['c2GRni7|Ieʱbja."Րn ;090 /k%sb`~\N`OXmp L $XQѣ- NWek+Hk`07WR DH)9Gu{ϑOGl|;e޶>'8Jѻcz4 {vhӌ8 Orlc/"YN5Yj+Œx6Fs%(KWD!9m7B򯾂mp3PR*"ױﰯ7w~ ?q t7ށ @`8 x9/4m.y@hTN@$Q|tqv WHLٍy=.1<ؚLK4)g#['y]-3%Rd h?LK~5R\ qq/`z'kx/S3򉦂./Llm':ۺbEN2Kw"8'U2]1 R 4&K-w tý}o?-64LJp)*ϧ:y%y-+X1W(e Ub]N ,| P"=*wAҹq7⩍Z{AUe ?p˗/Kμ)@`+%7i HՆXZAaZ'dgO{{; NȌg -“ǏC9d:F$Q&_R7ԕv[+2.^]ϰ]t4u1"h29cYߕq=SsQ3ҽ;K _`.g`{< &ibt]|6P~xn~UJ 7ⱬ^m@ߕ^7;m "Dexϳ *vAPջr^g 42>c vwFgOO!; O=fB.ss#vxAWs1z06t3V ]t́~"msDCL/?; z[%!+ \1Zvww tý}@hLa@RO%P$2MPgZU-ZÿdϏ7u G޵T-#7Yݛ?ť:!àPWs{ mN>FYm1`e֡1hb>lmL|dNh E>2-GՏqBM/j2M;M`8ehdm$4NlAAj4ӫϕ-V;~ o{ n~ׂț +@Q+GTJ|@ [U<`c٪兌Hܸ^;TϾͺ@6a ŒFMm/OuA`[1ύռ5Y)vX`' \?ݥ|IsFBW'`6tclK>I-fW~㮖8!«5{ #/KGۧh6=~4znr8g:θiY}ͷ,NbfX2;{ٸ[dj :؞Rמ0Xk t7G溬WAAKWþpGpc֋qYZGȟtc6.?~9Hd!>>V.`"HeDZFM0snm֢I݈Gվw"Z#i aḤJ.@\gbOfsa]Zj@C@FIK!B+/@dS ppԣP Zk{U tsEm:x:SMu 4S4aTo!i8N]NŻ>t|0HeeWrgPe:ݍp2 Q/)6})!?G*wr # pv̒;ʤ@D:x'} 5{iR5hT*xd@0pS!~Y,Q"7_%߿~]DgJy.%BG%mSufȲAC ޫɈ倩v0$}#cL|g4۴Y Ez}'1>{o{]:0:p;WnP@;Ɨ}ޕӏ$ .`E&ςF$d%Q/rq)՗Oa2H1 Ƀp2H棥~O@<%|/KxD,#!#A b CB~D ~ey*8zX7x& )ݧ<8&qecWԍy*|U Nluמ_m8_N &M<ۘ>7POa^ZEۧ@g~}[ )$] @nB} E`` t4|@)ϱpC&LC#:cUPW7oP js, bRJ@\G>j؋eՏX ;?1k럲j^kG`˔P}@, jd&^p@>x0i\˔Pd_r I@ FgC"isD{XcϐHI:thi͑d0~h蜿+he`g%n:j d{/}]g nR?u tP?L%~q6W:MKwtIý >Õ䑧7fI7KiZK{5Fx2@L]$v-hkj ,&g6AuZ\Vr>hβ=Gڨ׿j&FEB$,j6y)Ѽ,i/2S$qeSKۺ+ Z],+/n/+ h`tU$quM#[v{] k-m^N;N0 m^{_cQwY^8.a ".#պAM歑xƤ E 8, O%$D!{mTGqMiMqVp]@lh*,?ٔyE|5ݯ58PW͂Td+`$f aQz8"nƗE yd`*L훳.9"AO؃`av2Dg ʑVhc8PZ\p@{(z+`id7wʋ_SQ3wCzuˀt4$IQOH/N!8M=ݮW&A 给.UOmvn2@QyZ %+r5zC} le^[?s7s'os;-m tcY `ڞ_j ($>}'X$GD.#2]Φ HG%=ep2S ~a^[6%Pu^Ja:'QO@[t@FcýձD!rY.|Piz$ P( ҼNh4 <8xҭ(YζXp}5B*t@\xV0t@-B%sals4 }vBnŕ1.n]oe 뿝wҫ&n6]fuȀwh>V?ZE2(B%O%a=x(*󓀕r'  Z_8FѢ3- \@8Aݸ` R6jp.VxϟORH\S MRyO{3y$J<~P{t>׼ l] BzJ_NqqjHfj@N#Ɉ!'>D8H1J Q9~ӍW/8Yy>y 0B+fZWmT`vXL ARP!NRmz.Cݾ{ni߈:>1: ڳR`Qq4ϐotGKV\j9` <=h) |ȥDMhd2TR%("k IDATVςsj*, 'Lc;J]A]~߹vytT-&ON=RGN@i`j9A&U5R^բ UҔS;:u 9 tuIл( t [MIK 23^Uh%R2q{{ݜn1GOrF4n|6.e>9v==[< a}3^?VHN#Zb"5ןc=Нp^۝0u<1P>xɆ;ټLgXf`^H/C3JeJ,$@_ςci~ ,C0N)U^m}H{#Zk S`jbSW1Loʆ>D 1@VW_;{h<|-lg(i_D(FNx1[nw |* \}*ÞOAmc omuhy.ae8үE5_mHSꝀX֍F_04)NNdz+0 d9򿦻ԑn2'9V6kbGƩ  |%}Iԟw\ky KQ4FSQ3w3zUMMP)54w/,Cx`{AE.*{FxE;8ffWH F\)Rcd%9@]N|Hn_;||=퀏|.`X/pg=kg U *Qq˥m<>-AM']H!ʟLrW@ȒĊoM_ pDAW8q񚥈P'OVH\o 8|!Y> 6Xףk8,GV G#:Fxe^V>+du(rY:z5 JR@g' yɓLy`7PdD1kHџ:5$l"͙?J>~>|QS/)dlό2nSU$zoIM 9оbLbQ"wƘnv |R tg9(QxpoD[uBL)GA9IuB@ Iq~^pHwp>s3@Ϲ7q@} c](#g;;aܑRV5*o3țZ;~qQ_ ͔'u*MOaixN]ܑ@&qΠaB`X| }{Qs`8- d0'xS|d)  o텁0B]evdvUj3d ՚~}gڻv=u)R3*y{K÷9 RJp}ۜiT+Lk̂`X~g$M5%?$Wstm@`c{EMtꜾҪRH–y_Һppl3ɣHvtp9:@ vB`RrJ:N` ә_=p/:U2] Pm!@\aD1th-ڐ\cc@+5zՋy?=zx͡@2?im@#Tu &-5B\M}Rm ݬklƔLM֑rR6}ǵwyy[F~)N t$6<,@۠)y[w߼ oq"eyrIގ$/@Z -rEz$}l~ZWl)Fe;M#=Z]'#pu2'λ;x.T(ֲ>+prhQG d=Nխ |+(dr^O)zfƑ<ڃog)ǒ>^~r3*U+)&!+ m=hiZC<7.fr98@ˀ2+٢8 '74K2}agA:/3v$dhgw6:kS(EL86lSoJ]mo.<,lLY!}6 Ks M-@ ,02NoQ?.:ҷ+S@or@-wi|l{gutZ;+ֺ{ey@@4r斯[TU:}@Vi8J@h B~I|Ӵ%{]ghĈ-S-<]A!tdLW{.ð$HV0i,MaH3dSqLL\,>$MeBpJfC?ԲHW)=yL^d){ikߥYAMqmo@ʟ^d>=ӟN7`)Po~s\RkBKP 3Nwu |* tSQO@H4\7]Hvf?FZ5J5SĿ $'Z!7-0-@$EOdLFUat.2X{fC!ΖҶmCN=Bu\NwP3 P})[686F@0}}3.c/N K$@4)d0v2yi1VDMy0W(jnzˍL4oZ8JeNJynaYЩ9T[D^ft7pgF -qtN r?'4L^7Sjә4ԯ>DD v&b,FVƴ~ۧ{n!3tBW Ƒ08ӻmD2}#]pUGYN? q̿js ~ATy~2 Q=[ϾW35wwVAx@R@@QDR$K L >T}|FAc??`_ c,Hn # 8p,ސq3@a (j*BfB/,H+wF!e7'5 :xXRT JlS՞HԑUEb*Tc>մ3P[?Wm )*9 Mﮌ |:Jd+e-nCfCzv;Ez?1DK>ZG뀭;0~~c)mbw6=Th6}:}iK k?oZwS}(Rsg(ps}lgHk-ñkh٤ȫCZ%m-Pp/'ШnvޞkPcwmHs @њ2q#HcOsɵLt#D\&AżʗRůRyj RLOz/OUgasiLa)!v@z/ı܊G/^_^ N?5ɹYbvc$ M4C6g2^2 k~:A t$`Oy(఩DXs頭cx;1A5-đUEC@[RX"ူ1]߿[F࿿;#ѻ#\&ʕtDφB D+6$@. [Һ|E{QLm?N| 7(ea 48}%k{Mu9‰T-ۮ0" l/GJ+X*)7~j]̖u["㛘!jqaDmλ3tAx Nl0 Sc R9Õ9|Q-/IUГ!_E7IӺ҄#nMߘ*״) G'5)+< T%;`\(Q1L2k0 o" Y?ύ~c*k߾=/^d)%XV}+00 :w3 [E|ë *vmSvoTY&0"T0TP#•~U,wHԬHy[ꆙmc.&/ӓh։cz OL$ ZF[8jD\Ьe$\FQ;{;Wټ496o0] ]t+KI=qma$k@:a͈晖_nV AJfz>op7Whx7:nw7Qb(QR "r ecMiCVg>׍b^|&@; rbtAg~.#}$V| /x8k\W )8c}yR#M ҥ6ȧk$Į֧ i}z3Ճ; >FoZ̴x`b#Z $mi%/pbbb`pЙx -(ܜ4bR>d狄=LxhjEҘy0Miq{==@#) -~ IDAT-) HjMw70 _f~)~ ѩ+F%0c ʚ 􃟈M`0i7Ees،B~Z!4}1<؍ޢq/0,Px)֝+PKFJ搷fJt'1݃_M̄6YΟ$@e`O#@SI}M&?y %12{ٞXK=.-#^VkirZ+[?V$O4u)1 PȰ8\Wr͠N)́Tmga8Iy#֌q0SosZp gZ& F~l.0،g=dH66m֗?I_@ ?-m[(/nMX+CK+2ɋP-Htx5ٸo]dg6Y[2e4Ɗk (kP# WwWAƶWsF|u@u*8 \橑"R_cD`Wja`e(wU)(OZ a@z|@}g?Uk4 p0kgJE*{tN UN@g>`=?5[ct`7QS:w.ϳi tϾL|z36y k8y^=͍{`A| ҸOcp+΋3Jx/hYLBsۤ7jq۽Mg>r5M׷os5Šh)!odnՔ:ҵy~=ț03)F_WsaCx ’}>#EM&6$HV%p*3n^r(tiJ#p=α N ~[",5BvC_Gy]P3CS@`svS3'`8 lh4k$|io1XWZm}|3zI p*[m?aI#s X[F}vZA]ZE&Aml3,1v-Mgۀٌna Z>!iq[sZwFJgwxsXڗωHovUezq 'cjg>%/4i[5 (?!K>bǗGFy̲PWL `c9;`ɾNxߧS6>hS&((3@5 tc)@+( n#pH@hbA=}p"L>2>:}wem! #30ڛR#` 5P3ֻW=4 nn>Cَ;{[޾oqV1ezCuL@fvUjF~1R,Մ/*@}`զLWFZ%.=<]&'vE}kJml*S4 Y@^*tcRNDQS [FT|mԪ.RX̎)<᧨547l^?G?// o4zjDȠ6!,z93FŰoz:3 i/umK<ߘv>qnĦ hq & ܂*Z&w&ZE%Xkc :8QDF,+,;״ Iaݚgy;K!GlI1Slo(_3N4&nt,+}1;<:4{LY9P - gvTSD}^u : "UTnݫ7Ҷ5;%oM v nCKerOe揓-qF0g0F=f?34Dl;ژTB[Io ^z}_VwzVPd}یڋEQ3_Tw@ R.}VHϱ?Z79=g5W~P-Ih/3!}ֈO\&6d%#?ʷX󭥀ĉ`1Xk Io{)lLgZo֣Q\ofzTPb/6ۄ ?DL|k{Ue o5L &pGS%+;FS4Rڤru*CJ05Sn)̄}Ox~[?P:> rJ6{m^y=oXԪb#Xb4ur|4z䭴t|Sa9=d$wyWs?9Pʟ>@I˗ԑV  `շ22fC_2-#톩 ra}񭋇XXӖ&ti@cxnQ_ŭ_5FsrZo@uKUBIH du4MIJ¡,k}=̑;aNsG C[gޓ_B0/ܤD,G 5CG=I2c\ Κn֙\IG>U7Bg Hx_Wy~@_n `2%lwg{rUC[]geq;i}Y ֶA#q55(gawV(# Ns:`OQ ghɎk햾L DM<-u6|dV"( t@01 nos>A hw{/q-k3\^V+I;W;We y t?Kg#4I*E¿gؐ}tVzWw~e]  wet*~½22?F͏S[a+ ꞶVIv5^@(!| 87Pkk(GKXjѼJ|OUN S\ gN˓2;+@H{LxH}ijX kxuZA݂!vDtlI z[8-mf~>W>eʋVūvޖO5\TO vqT;(3YiwPo4W!dg?H~~덏G~<0hw!TGC )߉ VqNP=Jcd=рI#+2[#IHUhx7:ntS2~oXJ2ϞayS~PkZ·@5fizt,Uns[W/|ILa0^FD͕wʔhtFPxUw ,$l7butIs3~{n6{x-{a>-~@!ڝo iaQVAvOUw2c}**^cd*K_:\͍'/mH8JIkNʈJj|%yM{MTop"20#)|>lVMzVF6ʻr2 kTښ"lЗSX0^ꤸp e~ݷe`o6-Z:` U֖Xׯ&Fv݆o궾l֞Z/2jW 3m*Yg[NID5j>9h5 AgA|O3@8bVjAQܔI9e|'[ iMmI$\Tmut]4fm*F37 m k}զ"]n6gl] ϝJ5{+M<I&.p d>~g[7sMa -u|W֡x~ tʥZ76،뽀:Σ?,~3Z đ{sOClwM^(b^x2R⢤t p]n&_%Fdwb'Md S[y|im7844p3m!,%Lfy;ࣟ=v8M*`0eS-hY?gN#kfuCb)/ p_i߹dCT ss?NcD -/9,$3pR69tb`Q}hK ̷i/Ź-ݧ V,y IPC]! j_h.iI0YEk2 tr_s1vxצ>,aSK151&tv94M|P56$5z{:pJ}οb#/^ _C?G!+6˩>{IhFSʇRe`WƶYϲ@xa'f'T%mhhI/И6@K0$U6g'1~K{ͣ0VN+[ŵu 2e5[T}*E |5N#ͽmVd Bѥs$)PkyuĞ F_><0wڅ6$}"8@aa}7UkK_Hf@K.iD2/JsOv-GUR\ H2m܆n`FW&6t S@dXڴJ@fA_0PM~3μ)/;\$m%8+g~ŗ4˖2+gMwM~3JRUk#! N;/D(}V\YVQ#,<}cޭV&ߜu-4z>jem. WcBPyX3 u2"=TswUOik3ә\f,7Oj(67g1xg4}H>yF2P mu)A˗pze}j~5 2dFکLh 04(#W@ i[Ʒ.qou~kcҶw ܠ@gn? LZ+su] BZoKj\=M \iMI@\5mQ<2Z+Q×9P43_'  |͂'ȸ1fh`CfH;6$szߧg4Z[ ;_$_K\i=.{ۗp-E\H$&hP+H>s0;dǣs~bB`ex&Х~s$e[0| 3wrR9JpU[o^s>~ F-ui!CdN.EA[劍<'9rU aF@- _Z,H7k5.-5\1}QHgZ0n]|6m~R3_npMsAkpco3;&0q7qPTs| `(ձ;/h:+]!+ %d Q9WcjNJR 8Jf;0fSRa3ƄJ=I{iTMpZI佗2$S1} Gc4pM8 IDAT契͌6.jn=65Գ4=<'O(wj\zw7ԁbrskk:R4C\ӚЄ]MDpX%qzj'2A7[kTi4S+ptA<(V4{bM4( LcmO s8OnIlFC;$mgT(,u؅Y]Kڰ` LDaBk%+RC׮l{u7 o@gN5Faգ>alp092F ֎0X h{(.rc,ة|ث?sg`]2g< N )䈬&)ӲNQך b_e*^YKh2eJcЭ`el9L|6 I_鮴7Ơ8~bL^ ؤ0"dom`d~O^Dž謹R888^44C.6k&7ڻu+/$s2=Fg3#-cƽT3b#Gˢ$=N)UoM[sDp 9E&͌H}4YM*p<5mȅ3RڊZ9s5+8%if"-揝}P"+ʗ#<b?}Z~w,iRIąև[iiV:2jbd v'Ur}sd^$Ekv9p)I#?En t4cMb8 E"Adv /Te{g2RPWw` ՟Zg/R A17:c~Fu[[ql˻u28ISC5`0_FKxs½H8m'{ 0ԁq?PK^&|n~Kތ C7eO/D0q 4 mTҌ}b ,{G+~ھ Fɓe!wPO̩mޥhx6}>pi` E5NnDva^rol&T9t2lM$]|CdJjvXr)l&Fװ-hQB; 퇭-7)o") gMf@g~ Tb,^295p!i6G<('C.%*;ǪY)IAhjs_Pm8k0 /X ҢqhJ2kj[J&Z ⚺8ʋ_57^|:Q=|Iџ`a2ӦNk$pN.>WcGޏtn ฿O_1S+ՒtƏ{oy W[tϯ+>) *WEPlH|v!zbq4j fD\_0F5>%L=O-2oaOݕ ,Nm1%4/[l߬Ϻ~K|]a  <}tE{k$D}ǥCTvsj|O/20j| {vTH kʸ.ppMS ps'^MZUiϨZ^L[gX(x-1 -{N!xQD~!X +xZWJ(&AҥĵK*vQ4qڏ $(Wc-q)*Rd B;ye(e<`2wYo`|i 6}hxO0w5s=AOn̄!K*Xoxhg ?}%3#=cQ6;;b*-nd[h64!51tPml.$ F5^jRqkRhmH[mFx ~@g71`.R^wꋪWZqKgMϑ?;`9r !`P3DWI a>R ^JsPi2Ж8X|R>Lyߞm6;d3'!p)C-$Z x<T3V@7" W0 0^btJ_cU3`f2\#d&#a3 6y7[xtjc$3w$JWpZ^^8?sh_U[}7 5"<#Փ-)LIf|lY?A!c$Ш&<f 3&%%~If+s-N \E&~r k&p׾ǫ拦@g;8-r%>7dw0rfj{bA.Hx{*80 2[ `^1 H퀆e+{ r/ڒ#)_ *?7hhڰN>ᚇ]:} JdJi?mZ+l?ϙ'}"xG{V-Q,Ks 2Ma UY?GMϑȿ~x?ֳg=6npJ(G>=>}W?}?dtA/Pe6ooEP~t_S& ns1Uwpg.qLC?|vԯC /؇`"ybǰ >7z3w5Mj`h ̈aB}-0MSLJG~ؚ*bk$o|׾ԟ2oxRR3_lxï M%R'kor$G~fTfUwah.Iգz]3K}ԝyDlfEᇹ0c5zk@ H&=! j $Lˤ^̪PCQ1`-9S#?dL~"{aַX*LA,|2˦a5=52U{asrCz bg֔ `oZ[E} 0r\b* d-:>ӉҰs2pD8ηк\4*#U&ly8mTC:ї>=+Ɓ.mڑ  [XJLZ* Aaze\P2IB桀@6&}N\B(KL; u13C?-2k)CHEhVHk!X[Fq4r-i?[ MVxw(0[Dgar.;}:;= 3Y9b4-hB:iUj7͉?&X[̻Gka|LAxM;} `5 9 N0LA{ϻTzF᪹XѢ (tN#La@Oh~ Q4;{]{ӝI :a~=Ϟ eHK(Z~ElU|X-Y85xԡO QG?Z8#ju_qC?5br(v`>]?s(<O,7ߝ1'S2¦ ]xC`@=&gpt D.epLGHTReX OEj51/ c+ƓCcg\|uaL/;rK ^?u/o9S]zWǕ׻5?ڏ{KV].㐇pFag⧧)^&wo&XԶ$YƒЀ^ՠ  UM(jh1 2>.5ks@Ҍ\Gwk!x6miMCMTh`KCnwIgӈaIZq?ZhqE>@~sߛ<]83t* QDpdY%] o,AFa@9Ȫꙉgoͤ+hJ\]<e ^[PnRm$ߍ1,jжXXh?m"k ?6pvVVDH{\h) {] XŒ&S- oz Ϟ8fޘ.f@|~հT&( d%V؈@Ch ;Z!v-6@B)͝[:g5w|~ӛoͳ6̻3uhL]A4H'~Dio5|fD+UiQ6\4^ @ьoH}):`CMtaL}ݺ_rOvr^c<W+GW$!qsS fpU?4!nsO8QLwa&DNnҍqCh>\z8EKsThTKb3np-In¿hR4޷~}J/6,L <~$ߣWi- @C8Y.6 3>&L qN2Ge]9iG8|HF6 }/aRavtKmrk-W܆iʔ ً4zrS"I]*8)Lث2H /sL֭>GS:>k-Y C469 6XP(ҥ.()қy gxOT(@0 Zl\oǿBM4yrq$(`$),;/ZaH3Dh6 KB͑>!3{X{N=Cٵ 5s _6Ɗ&]U (JMdlo3uEV7ԋ r?D83aG>nN .CM5ip kjC|%=6"?`yF:gNg7hY3Msz6g{ie չK7DK 6MG6%u5r>O>uP_^ַ@jPhPqɟS)k4({xf^prEbs=,2,"ƃTAVvsG3dN0h!ӴAdF!uI?L]um/usH뙈tDͽf@1硂IL\XLv"Z8'(O[0]wzĪ n&4T'{ܻ(h}m8lX7+lCh{Xݿ _Yhd "͆?3L q̰ GEW1ך:x+aޮ;wA@iyep{<̋Y䩣{s`z >P!7yYwɱfg_:18LxVGҜ47íZRI*le Ͱ`S>~~ҋh1W'2@A]Ь8;RWoGKߗRꞧ?`9_u?4or<4볳k KK4kp)&y)OAJP^k _e *^8eRhIT3¯32) /СfG,oגtwϻ=;湪E+xti1788ywWk84fpۡ]zÙ`4.}ĩܴGa+k 9hG H0m}YH{hAݝiۯ ] RQ$$ 4O=e`]1qX&(r> IDAT퍹ә*K-\Ub::%SnO-ˎ *7LyW,a⛗q^'ULpPr8mx+Ph .蔠R)KP u쿷O|GbߍUAݣ^M_hʘ>\nՊV367Q+ړ O 椆9m_ 0PM2M;?,H6Pm:'DP &R$'elj[WQ0xz"k4vv.1`2v'3B(33ktQdee~aq~sv0{YN k2~}]}uz)L!m#-h?9GҡOX=ճGCmN'9&c*:0h0GKKi}C>PzK}o*P}qRLÎkȮ_ӷcaeS),֮%y{}\G3f<˃^Re.tSsY&*lTX>đ0QIϰ=3mN{Ϲ[\ jy<](ij"ܨNߖTCJ ,ʧmhgn?i}@TAiW\lZ.cD~~9e{_JV`p:eYrTc!g{M Lʩ_ceŕ>͸lSQ+AEc} ʓ~s?ugp=D(qy]Ke*dZeJ)$H'''w \\v/y4:ȓR^N¿#iwqJۿfxkh?Z |´?LF 87_9yBU⚟zU&Nj$([9K =˼:aQeg3H{{f=beŽ2L0N!ny.iwFzl4NJ᷵\/ˬd>ҫY)C(͝2:M/#j$婅+9l:zMg62fx{ƛŷ>)Z}T:Xo-Ns欵P\-pP.}RNhqB2׿yt?#@i2>d;`L#bpXh\ǝzz߃# 8'B/+9ASJ2; f}uVb8Y nӎK-XPC~? [{!㗿}__׬P^IaZM!}]gcʑ=в) LILsߑc%:[,޾lNo{N?jm(c̰:Nqiwh1Gxj~@2\@%Tˁsƽݼw<9Uam4G݆; ;%_4RP'<?cԲ9ľQI?`qe޶pQP:h왠J!3ߛ>״SED}гZ#b Bz$W^dZlw~PS C!KcF~SK-j } AL IZ7Z. n^=2VvH 4s_V+K/#42e1LPR&ΓY "ҕӈ[}}.u.F] :7lGs͏Rma d}uζ0+<]4v ~P5)ک!{àd`+ 5g+TAm4nEm=lc ([ZgQ(qu9 - e֬L\ XI&fhij#BG4jj&[0>>oR7BMz $zP7Ҿb%0LHM^3'ۺNd'4)–NfYGu^葞m*m_``XCkL</坝]'<Oá%yz/X^TKΨ V#1oqS8a NGh|/%p 8sPi׽wU!Ƹآ~ :m 2E!*^uHc>hWlh;nc>CJֻ߈2Vw܌:, ]W#J!Ό kGKPC?C81Kv:bct#5( Nٻ ]'4$P V͖d2Qx7u}~lj}ɓo-|7\{sPkTh2% nlkնyup{ 8- DapBgbj")Ӗu=ԟWj`{N óNfq^/4hP5a<ВGb"8bj%Wv٫黴꣭La% li>B#p/+bmr\}PP j2NCO.tY.fN~ ҕgKߡ@+IK3`\~ՅW7nyWPY{ qM`0| ~jVtU^Ggnɧ*  -`yDD\ߔ[NI+9`ml7O2sd~gIm3S)K =" 4)򾀹&3cWmy67#S1#OE(0C:eJTLH64~2֮I@S"4VPbPiRqB[>X=vW AIICw=uF( F*}J/X Gk M$l3t/F]BЙ ȠB(n#|&BRx3QY {o3]3c/7ڏP!H Kf3 ق9VM:i&OF'XTtp)8"━|% M(Pۗ͛ &( LVdH@‰|so:%pکk9#DS oyT]N]4-M ֖"\Yaζޜn6GVzgR@{HyO$pIe)xװ̏s% R!g$c=V+oiA[mTɖ%}{yiL},JSjfVLYG['/9/~~,U\Hqqxv QESm{_O}*0a-[}uAxj)-gX rI;BEL#DLP'k!ҽ1LIJ`2OؙrZK2)BQ@azRf8cR-N-~g@Bs;Xx靣b޴q) pe1=j2~,TF̩N}*7eaoxs "@O< MhYk!PtN>Gb$=+\/_Ztr-g# *@$?/Bw)'qo:hP0N:@Rfp%Ҝ ̢=Z  V&'2Xw̅^dzW\M,jn,-@PA aL1Xeö[t,5, zɸj0^8󼔥9ZMoXczq!0/rP%sKҨ)'hY6stty"iPL|I>EPE +UHV:8𳜖&-[(lԗ-? dr= (̑ Wh)NE6|cũT)rסOiݡ ;.I$dzb`ΰvE2c_iu<\2)>7> q%=V.`p/>{QNO?iF hmǜ*#MSs4ϛ~Sw 2?%8Kzʫ,PפsU @9N@{InܗyarK7`9ÌI(o0 ]]ӮGHME@'3,{NG6lI 5IRejjviZdGB,Է M *PH0CZ&MW 8Y!Дt/ 4h=|dz\ѫ<%1Ј^#eud:) ؏< OH^*JG2l^!M09s`R;"MhMRM?OE 3 b--yf'I 6 b^ݹ9PM|ݨǫ} > TYeiק210ʖ,)d@< ZV !0wEEcAok+cl#]58Ugà`Ӣti]ai?ߦ@+MP@v&un9rAhFm0wdj+5aVs5m'ǿ _~ ~~=SA F ) EF Mӣaug!XELІ0`x'@SuuIhЮ"P<]M{\Z^af?K #F2øWHgxE4p<ԹP2ck0`6v(|ifи~8rk׼ĉv!t(NY +sxRY,@Sݘh3T {vi5J'qIAV@մo;/v֦zIa_LOjws:1)EK3BQ ׋r`bػIT_L;u7r݋l'L:{>AbZ@%~L19~D]S/  +\.UxXVgs4ߛksO Q3' SІ CU 8z]X*Sʬbs'02e8qo i|q]R2~7Q}4ۏ?z70gֵA4MSwvԘoa-K ְW֬h:r)l A $t1Twy/7$?ES̪jË !G+A #nз/Ȃqk *Xn| 2<[np7^C;"A4'?y8H@@h.yRCҜ `ݷa05N&,Un)#XX v? ;Pl)`cq% SphwX5v`C51m0DɃy\wǃ{rOO_CW,Ւ-eJ 7 k@@᧷ltmԂ@iX7O+m"oP-5%k61B”-8< (уv%.L?zo{?ZG+iÔg2.c~ZGAMr*({%Gm#YFPA^K4Y}bn=lS>_JƜM}R&Mҕ4Ig=q NBc|!e-Fpt mejH](ghY\{Fc:!`dZB-3t)9Aʋ)Ե8`Y9vŒ}j[{&+Ƹp|HLPt|ȓ6/, IDAT7}M?4C˨R- [h|կMY:GM1D/!0WeƝDX `+skPSJCvn[&7%U=&;G Trʒ i֘ o[ںK0m, jlSK3alL@Gž?o C]"]Ns\G%u9 r\#;4$ ]@!E\t+^1kC]r\咖rayg;K(|GyO M|ƴAZ6Ms7пkMC;ƛ=&6k&B00׃Auȩ֮y=8,}yD·G OS`|.!y7?#Ftf3#fS!?E?j͸深t'@7Fe]^erX~oЎD0/͛hzȀt{M;W|jeI`D'Ur7|zf?:蜺|. ;}4:GU3ꥮIZê!p{bZ4| taZ 4aSwRF?/yЬRϽ4ҔB4R:\W']yW-T$^}kVg(uھ "9F zd;lYpk$]鿲TwG\J5SE?JugiK"B+4Γ>Bu,n!ABSjSHtqL(>:U.liUCe1ɗq_׍<^>tuܹZF5 Dsh]ͶFRV! !JIRhӥ `O13if /a:CL7'@Cy.0x:n(a"UǪя Ͽ`v_ "tz߉%Og/3 z-xzǤ3`a$&u%\CVB};W^_&8*Xj5El}FeRMm&] M~5@3;djǐzc@XHшHotϵ:^d'Arѣ@Uk&U<+׹c?lPEhTB~0QW!&u6`;lC䃿mU^ `W pX!8? `>oa\ӿb;OBM_e%]glMм;UB&µdA;jy7/kV|C0b9Y}_Cp䳟qD߂'HZ`Hwͽw{hg2h7f=Wm\ T`V +a.j n:)\TkGr?`懦?TKt D]s`'pNS` 8,6zr xR[R%x:9`704q]UIY3ex5Pa<s7_| ~.HM^GBC{ji>9&tfs,|7ț%M)*6jOMpmeT:&6&H8Q]md;&.AU_ڟ%exZ oStmGb|ȑv ' bq@Rߥ1#0G ]Uy9:NIuةbE4m=NF֟WP_+RHrXGpyoA@MVhZȔ{qHf<_Xm1^u<+0M@M/:?\̰j^zf, j``uW W"mc,'G]]`iX/Նvs%` Y)d"##@b]=怆Ntr”I@'KW =:Z X%ݮ^[@!aLԜ)j@CUjE\bdAl@\/zk\μ;G/ =tto06՘u}杻.GMGS}AC; Li0Pnd=w{!/K%?#|SDkAő|W7`N%VK%դNvh̼qŠpfؗҪ4N?? a>O`A s48VҦk]qD%)gJ!a`$}B٣Gi# 9н\-~=w֣mߵGKP~/dW` t~~Tg\&UFwj2MY)ȒJBXde>MLٚlWnUq0mj)<8X`1_Uc̭&?Ĝ*(d~Ds>q(Wm \'9RF˶w# pʻmF]ƀ*0(ګCW l̳p 8,rz%hHbfn7_ShujLE8먿@@B=mV'@!|{lanyh:isGQ ZWe!'b+|1%CrO2֦)=묖t~,DD&u3Mi(2P'eԥakgI5o`&j}a"d9 ,f!o+\y\ X+AZw_Tp2Ljp*hN~+`wW1dO a/~{@kЎߋ2A4f_P0XX 3wi1 ) QK Ta@' `hcV.E\[Nю:9z.:,d`DL'/4wːի][ƩVO.u0k= ^`=UVn+A6A8<8>S=%3$ [ > Ї$ԫkrKK$, 6bDzzfkn5Z}Am=Aui m`v!i&/6\24T1>eN7yp&OMfM?xU(0m[#q`< Ƅ祉bDs^R$f%q-Y*wEzUNb* nNbXM# stX ͌#+xG{HV4Y6CS ˞t%Ndɫׯ#;4$T&s0-A眥c4ˋjͽԆ0RZSS4ƪ-n pdKT7Gq Dty*U$<{"Z6Mኴ)c#ʔ%o6mR>t. 8Q䶷V.cM0W-~V0784:B SSxNR~4voD( <'2SG',όƏ.|Z"\R*h 2 K,sL~3l/Sj77LpLi5}ERӿ^i@Vn2o>H o`hH 0@H"0MC=a҃:"Z. 4&Czw;(h}B U[V97dEeϞʴw ,djEk}h) Zdq@wЎY;lշ"]@ܓ  `"PR(} h%$+*+9iZ׉%iݰ i4h~Z0tDOs@|VXˉu@O6 h:J f2.RGS~.[2&hiAP:'yv؊С _+G!V0#oSP2D!={8кhILnjW&VLIPNGȢ e:ч1f(X]~Zp  2x39McO `LʃwT"}{OKR$2"R\lP Mȅ^qpN'< Sw6u=dH)3_0yEdϖ1OYGϫ>:d@vaya*:|e}@sLV@\=YyTpMԿ$9`@ի1S_:n-`G~KTR-S Y*0fa#zA@mo+A Rl[Ї`HB5߉S 9F9k^JИ:hZև= tnڟ'Zs=ĺ:ͣpK #ֶ{ZhB֍lY~aԻۥy<7Md+دC;xSØiB' 1+*' 6B m+`?LaBO@[:Ng +$|22=%}^|MK`#SJi~eu~XSK?!tu-M;Wu5=Z ܥ@+ܥFy??gU`O@AmPf2A[4:wz8 yuTfgٔ,ԏh*mg MfG3r4̸?wonv5ZKc&ӻ_3_@#aa*A6pU;eݶυFaC-UAS)06 :LVyeZ9L݊ cKM^㾧eD M̠N ?jj.D^"88AbyX S2o+c{rX:pbVF`-w==F%,a1ލ+Z]D`?;u6;xS P&N  AYvnOpls0ckpLl_LO댦tm6j9Zdp'CKTA VL 86Z[[Z6f5B#}՞unK&-yǺkLpEߟq5hj;>t4,CGvk9~[oZd.C5 2>6fFA WS\ꜵ20g3=5q>\ˀۀ_lJwy'8B2/qd1˘|_yݰūڢ_^.*I'=tMr/vτsN{cf)#XixU|4ѷ:eZùkAN)Kq6vGFJkMS ADsy 1S/ s1Nɠ #MV)眵?N= 1Gä+Qv wVlĩC2 ?{z] eDVR8 C_ Pkꬉ{59ײÁcR.hMԿryp1.Pl-k7@xy+< Qt]xFaD@~t#O]9?g]HWb+ !&t3Qœ) ߻1uBoXK: S wc|3V"yPhi iI1B@ɩ 4  Lg<ThuTY ]/@$'ho6ٟی>n(W\;pJK`zD!cJ+ =7pLBGX $ .Yls!+.¢ ]QE3M.- :`a2xuB-*2PN*vyGIrI{S~ĝg_)kFV<-@-ݭ R3# "s9H jJN 0zyL,Y ?uOJU=ƶNucF(Lxmt?p rUO7\~RAF?89͇_9AT6fBOZizu69L`L=@ TRZ c~^ RzՆryi9ёy a%p9V˲ T^'k5WoY9;/B#3:o]eN\uG~M1ļ2txҾc >dWŃQ]" rh-zE_OoK4cnJÇ8BP "odHƐMq@b 2N! nb > A姙:7n7S?|ITU?:tm[s/.BvЯZFX/ʔ8IVc@}O?>O28:^_7uMHF3 Te46=шݻ)&ENV2i`)nÚ4{:MӀS/3% bdTWk ɣ'YGNV02/WwcV] %B+W#ihRu1ܼt4wW0*˜G IDAT֣~N{H 58y),l MzHJݰ}5SZ/wlePKFjv(Ѳ)ӷ-kr#--Zr b4amqN@rwÃ!&{t4ڈ%#mJ8A[wK3Uͩ̕@в4#m Hm4 m5ph V#-y/r} {}NOpb!T W;pS݅a+K ]0 pj.r8d~ЊgФAVhe}5g%t3YnRR/Oq( mu3N~:}@me_CRS L,d sf&Z7 z?VDz57@ *0zy^ 5|r91;M1c7a5I剽󻔭3*?[ f5ш`2hI8e]GX}1}q6AoCESWZ+UXƏpz?(qn(.62“MH;Tg\?5>zVkįg l/.99& 1 RG}!1+,X p%gO;>~e,4T\"11FU;qP|-K6L:\Qo9ZA9XxgM}3tP`#6r?Bбt/XNJ}+ҺS? $OUg,f&N& m\ju"}yye.="\FhuF?L~թ;'QxǩM% f0za8gfemFM`{35'L\MЦ5XUwՒܦ߀}yC]5,AE@3`7yG]쥹YVmo$5A3$ƅaM> fZ JyZh?9%ܐ<> JfMYM.^6D[/ X̾rWAAhͪ\4 O,x~!;Q(H햻ZH W4DԊg-E=eq%McV:r]JB 4}\-C&#)1QHя 'i;L- @CSUL\Sm#c! fgDCDcWGS5(fT:NE}(RuXϫٓLjנ$C\P x[{dѹXx+hzфGkYX7mYKzF7m="°tmƬh^uyi~ 8n%m29^{8o=di!Kvd&`{^МJPrE4[Dw)]vu(x#H~b?ǿA K0Ah;Vz/BACkUAmKg  1Hnv*~,0F*ʱT\iEIv@ VrNPpxdX7:u~-Es2vXpȍ˭9P{CR!3A'LPV4; +ƽw&ΡꪐtOP- i8d䐠>]4c#,g?5t5CD?w ~hD8R~'-7pqۮ0? TpPhqlWK4{:r ]jhC ZQh(u51&g|O}-6&e.Ϛ~ߑS$V#?VΞ.WtuD^6{%f) fO|sUPPDy|d2 F?@<}yZ]I+tg<,SL4G2PPLu`*7`[Fk} .خhc<aHt.b~zCA,nlm{`8@ yWةџG+ sl5ge >Nee^WMlfxY?.a33D"OWm8.'׹{WhЍ s6 uәc\o.6hK؟uHhWXS1I5# Fm1e!m[*ˡyP`GX@,cfa#+MH`/J ,q9@dfŬ#tUqtyxXF]6ZƊ$KTX,SIL:@jqz%m"\MԑL:vM;oNpgEptXhYt'G0뿰X|ߑfA{ώ͟]1l5 GV`jjqa}fnTHj'3nNDajnh#X%lR #08E0Kf[X@NbjL9yȜM{>op d?ဠ_90|ͬim \'X7_Ü/M2sۭ‰ OFOHڿ%E5Nq Sy&բis| N^3|{4~ڢ8Nޕm4}DyC&<}4cIK!)ӫZm2>B@/ʴ;Az药 FwBRL0ɗb>ƺXDKXf a]H;ʳnF,< M멯#vP~FApT~8lP5B{=m/=[qR*}ߐ}J}6ŏ?ra?&`Tz jKjPN<T+2P'X`eŀwqhR¬tykO0q'-rezoV37@7P.39iř.;4w kcl9fKt5wF+vEꜲfՌmc 7W2!`=e)pW,k_.O<;rG+[?R6' 9Cmij4tY1VH]:wutZDAku˥ Q;(l&CjPP]n$.,C^GS׳Q? 7$rcyZ/N0R0f{hv Dz.iF,8Go"a貿~?5_7LL9 d<4XQRë2(69;i9P~ׇe{N6)bD@Ȳ%v~B[`?zUm!|Y{T(d6Li!uE(i_?* /xԴ%X Djt9foA@ jL8//A2q@=O5[ K xdg,2p,טAN[mqn\@5n|EL_:x*Txj"W" h,հ]`U>"A1g,e[} E; ÇS7j` Twn^Q^j^#NioIAhm~ ] -G uB Ly ۚizMr_18~kڜ::H?>-L*byw-֋dult,i' Wiz˺4Lw_BZyw =2m}c+fut[ cYNb Kv6uhbm>q[X-ZKO8L\]A0+v3_:@MpWhN8߯-k ..Z_ LHBN!u!e'Wo3G ]4sl7Vhvm0B BuBQ5 Dƀ͜,~(]3n"}欝vN;1w_겮S< 1ܤevvZX`rMK-h%>= DZd+ɠFb %+ #Uu%@AFJ\0rٰт) -$~;H h.`d [geCeFN(tUAo8ZA~!v k^]̱԰_i!-H%Љw摰_ d#_u݃ڶǟ!ZϰS&)x3,2;UbeM?々=M hrspET@1 f)~O:~<'r#0/tWے-y%?>sMө #]k'2T&23S 䃏bIlezԗX#J23"LFtJ| ,D#6\8t5gVOC7:I)0Z(ӪڱZf5; 7rh>P4Sr+=nPBcNI\yq!)'"8REhEXEfNܰv*v-}- ּ@_Y:-GVxU=D`4Nz˅;xʻJF 5{28JFFMᯮ9C6аl֘`2Q@; i(x<|Ι V5v5ю ev:t@תka7ŨzzoW`TG^B9b 2!LͪoYFO  >, {!@׫78>y{(dhr47/^U_}ˮIkLȀJAy8QӤ'suKgb|W]JYKXbs`&)hǀ VC_2ܱ}Lyش~Wdrƪ \ N;q, +$܄0`h>yuPU6r_bs $#Z lHOֱ`9*aNXBh^q,=mÝ.- s>( Ek,kXZa>7Dc{T,>PW ioi!2Qrr( ^OƪYOu315k7B {nD.1c[D'UVa6ER/*Ib5a#@ ,7GrZ#Qxɽg$743fzmOi& j "/'pB}H4'"Fߑ&||R9pF%/q5ݶ8',<\;/"H 6kHO#9SY}2O;:cO==~$F&5OC [+ ?,ͳ?<+LSLDGTqX_w}_":~+"A9.YMdP$Wkah1y"Rr2 xh!~N/i}=SHa+lCQEةsᘩkb Y1E"m@GV\a]#6.F_VC ‰cC7icOSB;p2xR]KOaul]#Pۥ _[N3=!6SߍASaydnKoXS4Fv`E`)B 0EA⻀f ^;Ns-C)'j )]%8wOT VbpkPGI$.ygyXQwc %NwMfl㊓.+3'pau!1>b|g@ @?cOҎ XqkK |dئo#S^wEKWhCYDʿeK(#O9#G`{w =w59 h&5xX㘠6Wӿ&*4K6QIdrmM2|GsL1̞t=4,AqD jL;˛F86id. e {˲}+ @hKZ#tNR)lVMvuQy7Ac7(j IDATp9wAB& ̙J+ !-ݧn*uyKvY 9)6FSOANOKm 8믿n!caS! i|73n]$ϜSK+0 #iBA'%3u!hMfFc$hny3ﳣ jr H\ray332}osY|h\5NI V}g(Hk>};%! U{=7V`]lmX3//Ϣ%>x/ոYgGӶA,+C\U]= y{.-v>3ӿLS⺿8v{O3W||qEZtwOG郧jNՐu6G&[Y ~z,d 2/h>{+7-旀0~i. YZ>`LyloM31cNa45cJ[~׻f=j1ΐ(c|nX81a]'u M8VŬs!f&JN|-UdBh~~wZ~G%:ruà w[Fn}&X苻Iq%P]^mŇ{vz0 RZ@+a94Dhp37NKVOBt*@mH/uJ\P˄V30:sYjګM]>XFPZdQ?k}))0}~Vb^6b ]@+fFim//3; F\Lt13DŽСM B+XO>??Mn6tW_U\f|JQnm*s#OaU7n'Mq$/Tv%kv6fnc@ ǔ]୐$P.EBmr6S805_ |116.{l?n}0֎..FCcE=c,X>-R˄vu|G_Tz]I5T9 X}gOg=,x6%IleKn_QeǏy_?4r 2U(1@@: 䀿1V:󂧀2+Mtj]i(LToĔiu4@uM7<1p>K"G)X"̍I3S&qEOkrjư`~d&4|?MO??cM.yuu9=&m@%;`,KiXӳ6G{Roc";'5[{j4oO lH/vBɬr=k*gf}<6Ɔ~Ѹa}v=ʇ@ɺs׺QCZ6"\]$m7Hܲ-tWWxhۊ5v4 GԄPYr_Υ!qkhBx &J5-3Fm٥R\-[Ƙ04!5 ' ;)Nnx>D"OCLs]ۙwK-0gc1OlGk0d6T&p-+c / c7ge1ķM_ͧj\O9pT976aZ`n;)^!F'F!6͛ϖ2Y 5+kg6jkwLc؊Fةq=5}L|w{Uͬ&ƹ;4#}, a9Sk3^DO2do+JϿ\?{_K̊Ɲ}}ǚ?Gi R&=/rРƟ"')O㿻ˏhcBO'Ÿ0(MӘvc޶N4FG@K^éqο{F!{j ̏QN1@Bŝh[՚Yt^yTSTcmNϩ8hͲ:ƍYQhߴ} #3qϫb2^ڹ㮥6YfG$z1^rPt}h&w ێJ J^;:MCi˫+y.h4~ܩ uGgW#Ka (,}YsƆ^(D%~DIM#,,Vyt3kBqN$3z?"`'p#2EJ.Vl}))0}~V>y$M.fi uh+Cê8Pq0JEΟUgvQ{@P8s%ϯWo^Vu/"`Y+23qdqL"'GUohDIhF w*w!/5-L_<2X>fc+M9SA;=ҙcG2s>( ɜƸ^\|~ƒrN 4{R|ߣk6k@O۩Y@6aqkϣӻT(=ifVsY xJ/Ӹڎ09o³8PF@ۣ,!۹Ԋ/,.J yr6y} \&\nWg]Я=cGOFh/ȯ'j쯎-BvN\k X ~R5LSs1XТQ hjl9|LA*Ҵjo)\91dh F9c./ ^o$@`| )c] ^p '/??}S]ᄍdbYfmh  +(>jQПa<\d#? y4,chd%`YM`@/rX}סCs"4ƅl2Z$LH88 ƞ9^3}mqR&r߼e^wgҮYy^6XƊyQ9\cF>LǴp [5LOo?g;[Իw-~\}ݷYeHԵg Syۯ..Wf) ލ˛"<`K}\B4Iia0:OLEB+;`]Vzfl`Ʀ\PMc<>ǘfFiInG)hԾ!nq= GBSwdb B"bW\Qis~`_ PF> H|տoVEgex|4z&S?: leɹZ163}\&kR֚?'dDh4A/ѕı'c9NC!!/Hˠ kbTQ+ q'e^#6% 6.{sIp?)њV0>1=Gn7FDo.^XJmKv["+UOc8PaB6W7 Ae(<ՓO>_}jT[GkcM?k0HNyVM&;eSF@B[x ~qyckt,vBtW+镵-Uk`i2 ,m.&vpv-=Ϲj߸FX\mΪ@K$H%,I&@ì*EcW3M\[Chbl ֟w{i-I,U}Bѡf#e:6kಸ|iE*A2:\pSφ$ 4ro B&GXy0՚,}N@'ӧ=] "<筩n`H䎲 A/~5X r#II1c1Z @yi04;Om[1,@ݧH\[,)T1ki;UK[%j? ~| h EzvwKval F/MKtk/zsU@b &ic`6Pr}N_=_Ck_~DT{A&~0ii}FcFxƞEѾSco7ۅǍy?˒5_z*L毸5xj9wMk…R3iE_1g4Beg+S%mQ;Ayц42GCh@m%~ '`н+ Lv`-U=N y[@*`5a1\;mvmX42B`Mn~y֗~-1 Ӵi%{ 8 hͯĝЃuUBkמ`{`}5lӮF󭑁h}FkzKm,5щvLH5MHL`ßx/KL{C]Bh V6 φNqUFnzXne Svy"P}~y֍c"Bk@+@sHH'eѨpWocU0Nێظ"Yc-^@׽tל֞NM!:HK,Vje>wV;a={8~[SZǨ3?7ڮ9a@xMlRnb\S &0Y/ԩcJ{ n_ xy6͉aV]&m<\ IDAT%E?M}rPDtmfzߪ -{q@f{R*h[)\U;&ex5n9^qs0qUtɏ5ȯTOc7}}dwoww)Bss^]\ 7z59)pv aDCzX0= P,V!XS_Kܟ} ;9c v>u ;dx=@w}3Z 29Ҳo{7u;WpT-W~s#TPo3G<ŏ)ߵjXWa8f})OXXF vuB\>i jҾGcҧo^ _Gm_FD&3e;Ad++IVzw'?/\~ژnV(~u "7of'C{;pY[WFW1?h^rY 2<"0=kFL??Ϳ@guы':pXD5%X j\7`/Lʣyu]EKY ݵ=he?1kYK#t,=w>ڿꟾ}wiK'WqTA0Xr!og\&۽@i{}| 6]r%ֈWCs>,%3%tz^4P+Z1+mt-Qh*4l0!<é;oo9MBjxk!^)O!L\ILrs\\&!YY7Xk4o>kyKkLC ߢg\̩g:a}BP, W=^ M@tC[ rt3Y^VB1WD_[ük\ \ѻʅ#mzǚkϭ|ƴ ?1*( dZ@*Kc4w/(xn=LNf~i?v4޷`8a1%-_l[}< xlmڣvj Tl8l4w02 jYދCj}~d5T84`r?}mlh?71MreV 9\]gѸ*fo0_@6 ~d`)//߶Ն4Ew37&/}Pyfkt|իs<w*]o>o2+VThۙdxk4;~hE7A44ˆzr3t^a&K'O.,WF~zVk2u(_SQ`nk˂5 P C{]+E/{|%|]pb]%.@7zeB8,?=W|D B?=6:s P WR. pl6V/`(~if0֧g>X ?6:&ASG*`L--` rEwaIZ~~^ZzU018G? C ?L[jaDQ kk}z }˅nmާdpUލYЯ4D3]߮ w>GEsYƌ-4˽_44C\AϦD:|f:ALF@G@QvA>ڱqR%p.L(Д 3KOt_7tБ{r=U2WjZ^v ˺"0^R2%m`,VtX?}F)h{]]{ 8h= Sz&ͰL34XІpQz?]5D ?ηǀy?﯍9Z>]GExߤ bJ}m ?|&sdAҬh_@?m/u~81VTo ?[ j?P'?\1 G}@ -$gna"4jxHI;Ņ~.Ь~hߖ>*-%d2MyY|t֌^Vb/ƒV9D 1]gm}kQ9_ v/Kvxrؗɿ9.>}6db`qHS-m Gx4Z(xE7~:*Pv/冱,-vp5i<6:Xͤ~=/\(vqa%m\d3,&YFlJ=aUϳo*>,6bGe h\=Sg3>X m?~t @w1mR^~6r v- Sm t--^- M$Mz_h. ;ݿ}h4 z7exݯ@!hـ1֦Wf@,ZXpqK@*(F—h:5 x /5֎:Ad'{)}ۙs *(ќM7{i߄X4X,pa=t\W_ڔa K;aoT?`J ܻ/ _wc|WQ+2kl !oIPhnZi]mIȢ!0@456~#zvXXJ`XBLk., v&Ә=Cϓ CCC5EcMDh *:OGbgb>'? ; Tl_e 8 K xHoM)9L.XN}('i}iKDQYY&Kx9qC_V);CW3gF0r.N`4Ll볜v ?(yfP&Z1spDS4ʹ˰&\| K ( t8lVqjLx|1Ur̪OYiM4V,ɚ0񍳜8FP>V͠`~m^UC 8ʿ^{.nRuxc˲!_~yECk-je]!@"Mio5 <aq EJdx=#U Hh%+*ىPof,t?@إfi+IolG=b{XB9 YSOZ{r #B:0#FC[~R_o2:*\/M6pJ;t@,0:M7ͫW4uf_M=N27cVΘON(} ސ?\\7P$2f@fR.d5aFlw9# R sd'а{Ђ`Plv`?ڑ:Y2P tOOc ?2Kzfm4 z< SU™| dG HY H֨L1LL^tI0qWޕ}^'[%Engr_RYmq9tc ܨ`Η>1C%~׹~5OVǚ2L4iL0L,>8)Qk̯q$UF ^o.-:Mf44NvtX]oGopzv WJ-{~镐pߵQQq"= 8ҟmw Ce3Ҳ"P w02!cUèD31@Oo+Mp.,\tEp@Ӎ@ԉ @k:H{ ^< Ŝ9TwhSanҖb@\ rWY,E[CJ"yp}~pu)B?:~+ww_`w=D/7|e7n;ĻkoUKcgw?ps6юwu+on<,P)= Z%*GHy^g6θBfG:ɲptۘ{Fkmѳe^,Gxv{^=O(6m9@ByOVGJ.& КnQp-D(>%*aF̌N+@(mbCn{|o0r<c ffL6]@8\6`i þ7^pE%1G0~B?&]j~E; n>&-y|̙Y>sۆ&kL1ƊNAu#x@d:${M$jD?PxŽ=Tf3~7Duƥ;s,+!H8愮qk&]:q anwi'LI싅!15:Uk'{Mcև`U`Z{\N2 k£P,gfm*tB}垥ޛQ= n:3#bo&Z!3[k |h M?j cy]|Py4u%3t=\ O}Mp%T~wҼyM޸>qD|]>z2&ٱ&LdFO7J9:qewS P~p?@PcV໸vnlSk/Ld2P%AGT~[dMet/ ܌blK Bca>~]HS &Tg~?QkhsD<)^5gt~e}kvF,k DqBvӮ8Xoש%dGR܎*J[q,# F˼OP( =lNgNNJ uJ}QBH ,=/W@x-Riq #%twTp:Voܰڈ#pIߞbQ05&WC7 œX14>~t&& _>+4o ^DAmr7 H5sM \? 27 >qI]#`LL8_(ǭ@֊_́OY!ZLNinMY%c0q +&3Z9w癳z9gl )I+Fq_Uph^|ɐs \wUZup~̪h<B 0؇.`Yiy*ͿoܙyF愂ͯ!a#38L[7ޮ~W!WY{ IDAT*M[ tu_*V{w'Qz7{d]:4r*{ `A hSL#QIBrNR6@m_NWP|l:P[MsqmTȼl(>nh8F6V* M#励-@;9lW~ +EoiU#lgo(8k'PL|B@[}޼n$8 [ p/noK2Z~i,'x?8Px'Z6>rn7nqQL譴U1?π>hoUMZ@#Q?K̈́H!CjL Y;*1=B˷QZLCi5Ϳ==vcuH;t1Czv!}o, 1Lw2 >;xD0sZЎ)W o׵O{sp52C닶ŀ]JsWLuE+XG:_{:/Yu:̔_~1^E׋q55A/b/ߙ(5ئ>B?MAYˮ]\VۼiUmhd =UAwyr=AG9'Atnh[rγE4?v. ?{ׂxMT.=>h߻w_Ù~M nzƎr}ּ{YXT>)OӾa !<f"t?7!EcdEV[e(E!nb8wDz#:}3;ce2?]=_Z*Qw>Fn#Xx$,sc}[]@4a'mCY9ᆰ!BF۹ 9 _ƀw?[4gƑvֹ'ذwyM'E] h4 q:n5Xgg}=LcbA0 ;)?L@T>A[ysZ"ÅF>)t[xd#ǀ3bau^[|}w};ŀnvcl;i;i;[|0i Y? oNzիg8*=v5c/mr,Ob; ڻXvXB:_:`sh4 DllO?C1 Eoru|Δ]IZIkrg#W{.r pu$EFl^SB>YhmANͬY޵eVW-o<6:- _B@.m-4=K]R>tg׿ٷK_`WHY`l4Ǥ_ @0 zrАaF8@']׫h7E0_足^nZWJ7Fr×>&Fpd ~]A {&U[m' ۪u>Q:1.xQa99>ؑJu׮$#J]4޽jqnF{w&(ܷ@{siq.Va}l4Yf6F&c26?~+p*0f0\͓OCSğGb4z|_#Γ-dP__qTɽy[v@͟Pr+ӏ?N]}ë,PVX :6<X6p5 mhڞEIi,3J $t$V{8e߀jQd$~ kOWO?Y}˿SYnYk |( Eɿvhx#bԏڿsmV1D0c@y4'w<<6 32܍jU*5Ð{Qr,rwCW9C⧉E;pz^4;>Zq46}n ~]Ӿhݥe@_4fA'Jm"uxhm;;ݥuhiy7Y^3ymBL/u/k*`u$ \BkMҷ ;9 a JKhaX&$,ehx'K:w&ظ͚B'e^n~˘byysm&͞ ndIg,s3k۹C_k | Cǟm+c 7fcWE5W~V^ IgEsG1]#G^{> 3]o[ hn` ؋;1v['0-Ccŧns1i[=`)f @5'>Xb6R+3WBYJB@Hj snf/20M1g-!N0Wy@~I;emQNYRFXiX|}4$74E⭔@Kx3 Ep;K`_Ƿ/ߌ.k {YlY'Ģu]J`߯f vcE)Lt-޼m>]sZvS=:|ǫhY$>PX `ңkx hk{Ek[v;/ێp`6*S(w&T Nz2-H3T"V|`Zͯ+&8۝üybƒkV{` ޭS횷$X K<.QuFmI}Sa/m}2^svgC&[DskNi4f%]=3Ifv1j4DŽ>: 'jsBH20i^orH80}f4Fzj0ÈIl NYPC(֐Căfn@ŪaM3g̖'>]ccMKak 90c}73HZ??:?bEw'{@wv<[V ;`9Z*߻Hj)&QepO嫟1 1aSj B[;W:D?$A [e/ޤ *Jٓg]z}=m~|r tݘohu8Nw΢y1mV~~u3.U>睘I}fZfT2xVȄ?}slAB9-h,PbzN˨Lj=>;)8 Ę@ <;\ xWZ̴"bU9K+ htvs8v&c?X>py`8'<.+f@E@!W #0m(aV40NB(.:6pۍeUt>/ []0PxS\A o+<\ݘΪw7:<@t9io"Gք ǚkg0ceoӞ1(iz3uaaDQO|aȃX1zn㍫E< |TD~^J Dn.&ܴ]93 h@6u;=@ǴlK^9J Ru@HyA(n.E mgڙ@y10׀hFi@,m_:aV&7?smgЩ9.W @3ϚccލOMNnB-]'׆EPP7Uڽ8}W;jjy 1'@?9:&j,L\v b8—bG0>|ck0Dx6F+!xx8fV5?o\sOy(j,GZũT.ޟJ̪hZ4Yy9?-T5f}eEKbc]*fd?=\uX۔ȝ~2~y@̮kc)4&~jWdo[;=А1%u`bNBl( \(H`SlA{;08淿a4; 0ǼGH$+,V<hx}MEX.~z{e dENj% , >Ju:_=?iãb(^Y>&~W/hhhl{/!1y4ݷߤ%07l xk%Yl]ȂY3{_#rs;%އ#nHcf߀KZy A/O5H{:~WXv%*-p!W$@~L g +7Rdv,}>\=վ࿄B ]\XSS`-|x,[$<  < Lcc ܽER1n; h^ z/@굘I3=c&u8|O#8FcK_1^uAy=!ENWP{s6\-s-7}6A}1U? c4I99Y* '`*wT 'NoN[\.h͹%d=S7W;+`3fc|fIG$88jx#7Y0߼a(*CXA3fLMwU3p1\p 77MfR\dhm"zn/,r3xfl 0 ]Cp~|벤 .olYVtpm%/&HdHPLggoM`zJ .0v;9CQTu{})a)>,=֭-L&2K1h cjeeOKٺ7L4ާ6WI.M> VT0SOOߍ"76JTcM'f~٦:4Y `1kovh1%DߖRx[7d$Ќ 3|D=Hx Zc+as';$LmVVtag,1ArzBHHL;2|}o>8 }?w=X %̹TK53gH3ko<Qrxpzj㡚+vtǃ6?~: E4XSS`-|``avs`E=2,%*spK}KMX*V?O[(P-)иxpg.*O)J=Z 8zIrG;ݿJE]O~/CDiҴeVʼnY[/A\(yrs) IDATb^qMvr_m N@us puab6nwN&w.׍Qg!ZjsKbק|tt9ABy;&h`{h`À.x 0QѵKx9b -L\.Uq7`Ő2$xXf>ЀaKWt#<- {h#HyNkX\b㜿cTޯ} YGNj]?XS߈k߈>Z 3 Q$fF1Y^bx8 PZ2FVë́܆4RcJf)Н z*I;U2O$gޝw=yZ݀7z\YcBOyxtzv;Az8p8d R kW1oYlŻ])`|a&hkVihɢ(ǻG`&@~>HmԆp@wvPLϳvl[>mL>>x6,7nş֟C4A6iMWoDD`AYE. ?nYH~ >W \E WP]}<7 d_nY >6vVN{e xWiFZ`QwԐ^H#+s)рSA㮰 Uzuj!qpDccMs sev0̾3 z?a?!f~p0EMUd4}6 ǣE6ޭi4L]{X`v3 #麥&ab, #ܤ"wfho1l!:~![LC "~MG^_ xVn83 :欔YbI!1Y1ۍneH.'8xӸ.[w58-.jQ`_%L 7ߌ`\ehƊ` h&Sލ"=8ؐLC2v8Tg}8o\Gpm|>ic+ʲR%U\.z0A=SS-m[=׫/V%([NouZ]7Pc1G$1[0"(ʁ([wI+gfΤ+?b?jvv2Mp&P|igwActZCa\CiٛYnͦjpY|bͭws M`23 j@Pds_Tj~ZZ-`N8âeW)Ό֜!6kEx{̱ǂk˼Y#h6Dn^Qy Ae&eho:w%v?3ڏPnT=k&"_b0C_6Q7YlyMMN͈GqE:vJZƧ+It\( A" %$Zc=Hey,4`lTQ+Em>i. VZ[O5>4V`U/J;wS1wK+MP"͓c[K{.%ZћQΗ='LSsAf֘tEt jIY`zϺPڥ٤A=7*aO!:ԾL~S€zZ:' ȄJXC:BNjIAĻ̢#cs.<ǟ{fYB7;zeZp\/ALiGcj(c  ;Ds]N  (ĸ(]4 ]߽@}K09@!-0fn#=?`OVI璈'o]^suX_Wql~6^p=F?By߽ C64k63qokPS7s@E Fl|^yrۓAcHvEe#۸Ils̪e"#g=n6)~4ĭzYg/KA Ait:Xo<<Y*̃ʛRSڔwaso*Z=b - YζKJ\F7 uaa9+ rEp<{׆I?=1dӫ֟(8:S)ͧ>m-mseSr߆ #\S vX1Wa֓2\җ}>hps>i~4:b %NJAK s8yy噠,8LV` ~h%ޘ .#olu/";~Z_Vd _omqCaDɪHo|,1 P4IC_GNBnYb=ns?߀r4PJ&a-`-)]r % D@kL焂rtXek%(=8NSh֣6~oK/Ӛ  (h9&7񘟳Hb19s]E;)*O~c͚%9};RU&nYzl$]՘u/IZ-Mo oZu׼' z<'D@p) bԞ9w&W 7Iaf"t_z`̾Z\+5?ಪr =.&&Ʉ^)Nps0@86w|s~:=6#oX]s& 1MP̋o11r@&AO5!fL$#jI(%s 04QהrxaQSPf]Z{F`'ř7ev!W"S"] wٕ0[e- Y_[#+%`P5NR-0T7*$d tJ;ֈ ƀ/u 5Z@jfْd$V  l>; &>m d^ IzJJ+bջh%Mp_-7.:q]hiQ*|]mDɵUhW]ߢoDZ3٥4@- 9j5ҀxwuaM ;, ̉ 7[Ħhۖs[jrCIKj)&#NFwf́/#?53j=X=o Σ,Y˅7 _^XYyg0pެ-nʔ?[eVLϛV0h y(̉w&jA#VH~tzŏ%I =:/$(Jf@ 3TRcIaɐvnoB  ׶L;9ޝ<>:%M4IÝ hX 6vk2+ĮCыϐ)$&7:8Preo4-4;f}T!}>!@;OZ7Mִ6o#ω¡HIdD3@K! M+ Akw14qrK #` \m#o10<<̜E<fNn[{Q4Ik[O_<{&#^d0!q6dKE!bRxr7=ԹA!߈j=T(ya^?Grx=w믚ߞ5iV?)pJ5W#?ڜ$׬JW.7J%H\ms.+ E7s/hp/8E+.yΌ[h=u~Y@_& `0ΗQ񃾀+0)Rg>&)}C ̑qK6`J Q~u0k€] h|~ s>r n$SL&r|[K#eBghbluJޥLymwum=Pk~x&1( uNL('[t>8c@=jYHEJ|anOy33ecLQSj(mfrI|C`mWÙ,؅_>-6K%87/ul3vX=YٲSȠC0 pL?8_ގI|F)F,iTuPzL| IJ?2"f}3޵sW=TBpD4Y2,k9 C|xÞWVo @xՏ~`4tL.҅up1#DȁiU̮Q $/o,nT$ag9F6u]/x3~.l)+U eS!B33%oe08@̾jI1C0N,&k:xpR4:`"ӈݷwB)Kg$*YbajMx9\*<MȾ,m AV{SoqTqoA]Pg W*vSTdɸ(OPH/jm{9a.2]tO˽v5)IJ  OMIx"X7Wݵ7/Zl~gAwsU'9{Y)m蟎vy7=KiU:q\Hƭ,,=Ҁ)r4u(..f<&z?;?OB[6(ApўwW{/~ltn(em7L+r'x3ݺ{Փ'D pmjH٭h'L##8 +FkaP+x-u8R6tC<6wnooRy4fZ7 sU:K L8)8Ǘ09a%RP3Cǥ=^{ >t&~ `Fz2i(zR'm d RB+_}hюjt|T] ,H%>G$2l*q iVwԿ<&{kh4,k"(_+9GѠ=-KQSA}PnwSE=.ҿRFٸsxQZd@VLVtn vY@YL AOj]XhAm:9:&'OQ)S&LK(fmzCg=w^V :,~;ɖ*=C:)i[NPJf9sz) ':sJ::Fɏt( u B&fuEwL:Y=P3t s7[l׏\y9> &c~7/>f_xx̙-D^O;BwƏ27F4a,I\4e s9ASݙ?wLj#dqf]6iG|;ͭh AD4PG!n9xL~Yq.#>?>5_}A}$ˑijYHSMUT/귒UQ&#.n7?>]\nܸ&9B3:٠|$@xHp%mx7h njSo|X|"] P3Cmgd$d *S;a:=mmHi IDAT0ܰ9}f@Spc} J? )ڍ@ԾFӭ ݥ9b343F ); 'c00)- CW| 3P޲s20Ȗ&D h923/>&RJq8@::sZ6Ae#_d{}I1mj:X4qu_[f'ac)ok~Uu).w{4:B., ;x32 lA@FEV"5gSƻ&y<ߑA"Yh=K9Np&˽g~~@H4CJl+N̷O{w2Uuzv@ Ih, z8E_̴kTӶy$]= :!iK@zHH}P̴V j~SN5gP>47t$V_R&Npl&!},"󡉎L#; t[P愕?Θk2d63 }o 4ô!c0Ff8?l@D$) C @ 3YnKdt<m'g4_ J}`L!Z@A7駑 1LBw0M'f4-qdI?.qTs|y"~꣦Sfޝu oKֲgvacUl P 5iߔ%Qsf@ۅ؏K@%x ^dEY2W HQ!۞NwnU骓YX fƖ%Y؜+Opc@XW@gjKh l^u0NuMe {r@RnrTj@4f} @uؘm 0*``KqF]2 s >~IBza`bf/șs H2MjfBJȬ82%҅G2~X:^'D|8`LF iie.$លy;iƊFd>&~+h&G$J҉4xʭ!3 ! *㫮VBM@BoRe7h0o!wuB>U/?Q^>Ƣy68XKH%O10RAp]AxNfXt*uʜAXNúcpsR Hr`F{iO$-!mݎ~_z"I2=_V5 @pvI8Zjesp3Q>`$*)Av *mŌdI&>6Q@LZc~ 5P1ɄA߹6XX@{4Hs,d =OCM8U  eWD55U@6 ueP;R *#fDդ2gY4@͊10tL vlf2 qIfc]=@CUX{Y5? G˺oCVƄRz 2鼦B:^8򌋹YpZAsk0@la:1\ŪjYIs5NSsVpxC;b/ң)+a JEβ3@ *h^(%Zf [oR. å$` \:i!jss@վuh(ӆ)S+@!:x'ۦH+>pis?lOzpծدH}J]( J5ι:t6-4!-#i.sU3#t3;7`<}>8y'4im$g]В@hZu0bd7>GMMxRQ<:ScCܳ~(Gh@flQ+-!&gcY4a&k& >-eqm+b &s|LB9cQ*7)F.qQ9,?J=`JĀ4W&͆ 'PB '4]pLS=DȐdu L}tB?hk -OfŰ35P&>i@SC@slS69h_jU8g<Ր175b3kK)UTDI~ }/Ȇᣓs btc}#8-7l3`c}-3+yo70 Yڐ]/d{c::`p/ N F8$q7&AI|@Ǔiҟ›aBY7 71TC- c3 Ǐ>/r2$VL@ Mr*oMH`R@]8/IQN,.z#@X)tP .(`0C_.+TЃ]f9{)Rf@)Z"{AgU8l :T![>һ 1]VBM}.%TK7cǶ.k/o%?=xbB)NP2)ieDPNJ2} ),vKPA@ID*إw;D7!]0٠-]ܩQh1O eLII9aL9e TCic ##w$gj/a~¹Qi4;FyUi/ޓz[~Lc&,J?ι㮆!zPƼ|`',iGkJbLy_RP s^15Ӂ))P3?]Ⱦ{h/HmX~`LO=IolHsd)pOOzߪI ۷;ZV0W}-JQvA;0-nj[\"V(0^Ɓw .-0lbhr`jm R JH ~=IeU=7±DL`>6A{A@&G-~.q‹#a @8:B;_Lt #€:] |`)5jFEs{>}t^l5L uZo ⑯}zMD8lɫȄLjL`NxN2x^- qi݆X ;8G[Pe `̂ ӨǼs7(MqW^yMf_YFE&Fm }xQ-ahvD#Z~Ӛ߅5]V?X\ODdVҙ#4ir[HY. 1Jϟ?Q@3ĸ+]f'ѡao˜6;\ϗxg7:$Q11oMA88?Gؠj$AChtR*Pg8iZ|jhۛj\콗1q<.bz=p\Hm`QƵvg<42:H2#'8zKB{ p vәROdIG*rw{9W7@-y͍G+庻֜"x\Ň-LSq5%y}H3bnq0B a9B7, M-ySFJqb^wKzxq1+B%e,d?:C%Ҁp$47m1|%ρy|_L j< {Χp^)]([]5~`%y5&A&b=S2/4+͉gW/0輥~^]IҺ+(\.kd57f1垒Xd (U{Yε? tHz3XM7,X8O_WWT XS> 䐘e.+u`hj, ["K |ֶele,52Rze30RR_*҆Tt,LO7oQCJFIݷ(p. pHn$#ܓфp!:=&z$}=n5m15ymyDȔI#jqyZ1nDDёI2r#kd?W`[6C"s !0HGM5󏪶2srEoAO+VEs: @kKAٳg 3GH[$Ȕ~q:B6bAkqȒ%P)>+CI}  rnb@{+KY0I'.[/8P#"Hi^YfBa-VCkPH_{xOyvnqll؄Bw &)ґSÈ{ yԸnWh OL`h.QW%)K,ol̦̕7tƂ)9VҜ@ g3Fh[V(P_Lut@_ kW6pYs?[0`?Դ;83;(x0 /|")l '5ULnb0KlP2YBVkipmt}Q.pWJlgZckØ2$[&%@4 8Ѯv{oi? )_\>\5=A5HΨ-s~zatsl~~b?$ا >|\gDh"~R bgر룈`v %>awjvzjXo:>d 6kV5#>~g>$L&)x`i׷aD뿑PFJbggH7CJ1]tG/0ɜ؅ms$=|R e1ˢ[AOcǔ%t(ݡ}08m159>m1?w emѷD|\a²}5&ͱrtoAx "E  ;Llq.c. m:V5d¹D0BzqeU$y9Rs_qV\J\鯟HH. =E6bV:Ub{`n_k',']'}.ǠTE1{+ DGKQ40-9$v='Jjb"*Owem0;s1_b%7{d~۞wʇQ-q܂DC #fS6z[43LLu1"MtpyqGaZ')s{AxטlT&?*E=;j{'i]WQ{YDH$9A _-gsv[.=Ao-I&aBn=/E;BZ[$VHfVp@7Wj/o=YmS'%xs CRƤ+1˼EԷ@i$NN{,`tF6<HZ;uPOݱ1.996 &bG/~lp7IԜ0<#qɁi^lV'tMEqlO*hgz6$JyƒR+^x$]4mHt3)[ȸuso4iD8x/Ջ=QΉIDs~@F&DvZU3/|Q4t;ɐ N7[l ͸8>8]k ~uR=>%soP3#cIb1ɋ-IH$iN^5>j  ԵdV_N#1@=U_@`mP! Q/2U>5S\Fx)"s`13f]Myξxb..2(QSleIKZ`(X`Q5G7 ec @wdFxnʘNsC,-z1: jR,L6 )12j?hk[PT0lK&~! zq4Tpqah lͶ=qFbח~oWZR<̋z2֡BL98g >}Ʃ űP[ƭt- 퓦&/(ׄfC;hI[֯l sr22K-%Qz9.Lmn ~<`}nD"8_: Η?j |jTf רCӔĦ]< b+od<5.RGXQh+ m _sMկ@VS y 8YHom񔧃FxXSN]l^=΁o%rڢ^3exu 8[~/5oPIب3ԭR>M{+f#h)ouA ܪf0iUS|Zt'cgg2w)&G<)d OԆnrN7ocd@ܛTc L }o ~Q9*g9 gNbD % heUavy,$`j) =H9 !ۄARQ2ɠ0ֳk{o" ^K1ۆ?a-fOiGx<. Kh}@ߦZ\=\Ե/Op [>,4ASCvsݮ$|ϞV7/n`X) (1E +. wl>:u4݆v c8e "@ves퀋9+~e׹Op5ϼ{CLXQ*1:H}@`(0HN$-OU2(IJ%]6r!N9JIPCOCB(lx]F&$7FKePs8΃%3ϊ*ww &"}qÏ0<f10?ac|?2Gٿ{;' 5mjn>#`)weU0DԩToR!i8[R(ȂI2j_d 5jV,_R0$1gjiC\s!I iJY-!dAcCs &]T׻ճ_ aiMz|ܱQ _I^y~ |=3OyW, #B;۾& v ̓=iQSt_9'b]K~GU<.nsu+j{pfknPoYhng$$`GkSܲ .,8 :!6^k{ҳs}BʔGU5=`װ7enV@~,`! {8oY~,쨏¯dfJ[\38,2{D1!|.if s-iJ: `+W]$Nq!Nn:`vE&|^KF"g@,}CW\C./mI--91p VfMn t8)](P3߅j3oM"+HQI P_@WgWk,̶jbLK )e8t9v꡽ap N{V%_,+e$s}͇sK e z&AR^"6xh.6)OzΰĔԝq !ZsbJYp x Am<1SOrBw.\I },ܘHo:a;֩[maB{8іKdD6s/h'QK't䦿̹}H^Dgr>)5=>4X{6_SE0#Ңys5 㳭8@|cmT^hĽПsɟOPK'v%믚5hGT39Gbj" Ve5zt$!yvg0imخ̮K鮎fs6P i}mV-RNp#m>IH1D¬4W4L@s _e6΢ d<`g;\~+A Y ~'|o?Ewaf6Q%QlGMOЂ>+tT["!M {3Ʈ}?ggWlLLOX:^Esg4h)XIWSuLmr'Tq($135t3  @M XGb rAiu&t!3BHo8/L058#S6yvqo4Q4yLC&2]&)y_*|$ OpRdx4ƵܪV9mXt}AaJm5R&qtrA/yèLIeHJ22LӞ>j |umAtR XW ƳJΑ0](iCQͅrS˳ 0Q-myoZRb,'"J9V*bK_\v(D됞p]vJ0=@՝FG',x6rd8el?7}e%դ-n~2sNǖK hi ʂ-_9ٌ,?SB CC}.+/R^&#h2SZf Q}k\:,D}LMܦ9Gqn4 $oN?З-焎}):|^]dP(oYiw֌nqIyQPMRw݇rQSRf/}gddUW&4(U0lJ|Kv[ga7Q=Ac{mPs$Ss,a7`z\P>^yo8Vˇ) `j^y:DXIx8^Cg翭l.4<:C#,OϕR>}Fn]@)=ޒH\;~=} _?&O%W(/ i*'C"Ų )D#*߫9a\[?s",iԡNᡒf׻^6i @cqzL1S6?gƁ:S*Rj;`akکfQCKK>H/h#% }N]'$:%&rrk{"ڃ%,2%W$@E)ڼ7"N2J&Q2'A1M5GU톙[Y#Qg}x P~(jbaF"p4~{T(Zj^~|) 69y8΀~ wHH~5޴ a ¨.LL@wqb΄3d:&L c.@MB?8c0<:zcQT'gSyq*tXX"]űLɫS_B }8<>@QK7 lJPF c!/s< Hޡ)= MKw22 ^s'π#ᎂYRZPԯe5A6kKYC5ah3F]`RWd!fZL֓9xmo x+%83q 3 w|I-U'ţQL9Ih;u33%D/j24$0` 4KVM5<ҪJ7!Bڶ ُ*ۧD2[ )9U:*JHH^jj:2Ÿh*rcBC(نmV|~9)_.R)%O})ՈeR: YgUV0BRPj/VTKe*Fj *Y@)IY@xHJn{WA|Xo* 7@\\Y;HM$30:N.wM 036}5^rE9gqƣ;{3-ЦM*](rY=QI@AGKC'=1[$x}'H,! 4X⯉t}D$;_Q^RBa[M } f ! ߆>o:j/קjUc4kW8]HϔUSb0\>2%]䆜 D@9OKdd,h(Rb}'mP~Uy+_3 5$"221yQ>fys YJR5ޝ54!0ޭIG9e. nXV̲WvcMD=,.-i+ }6%Bp m4y`wgO_^S$yoWꔡ$]f o%[̈́/qɭ؅$3R G? =# hQ pwcu1O`i4cH->I6^㣨&Q|8[4Fk45LmXBI@.%ati M&9 =d #hJJ5aHZ85I35T]fP6NASwwxK7nhC82c>ycOHuW_U ohn$Wqc >asß:8Q&wsI :&m־=4IfAC;8Qg8X2A;r1SLQLh84 ԥ.>%bO.x1Ha٣)ߚoAx "E%>HXDPS %Xfny?bYS s`n}-l|v?͉$f:| :ӹ-*A' #?E,T`y77CE AؾRr< "m_yYysj*̮ ):_ Ge2VMS[u-j|wb^)%7~}̘_5ˁ1J3T6CrXN}QSQfm5ǃ5/? =~,>c 3e÷\uc\ $g_Ɔ*xLz8o! r>`<2bOjJ;|@dK^ߑw\\X=j|_T| MW.Mj:t6 QDNRI0H9"2HPG_?c1o+%.ѐ4xWk!h:D$2{( .7<_5 jP~ 7.4@P2%2P;6. d,c%SE ₭T'@b:OJ;-]uu 68 ꦼ-+Gi"3kUyJ: zhyQ`H2!TEbMs9m3m-Vkes&#\X"לvªo^HL``|0|G|?84rOKhӈT Ij"=h>{.& Bvtґ9o2h|)NS>f'AЗ22j~GMDxO!WCdjYLwF3i΂ݻHa;]z2|"q)%@fzgEsۮq78+|lQz3^)OG$[q5@OOebUK #{ Pq3%)fЏtOT-I!K͎o ʤhj79>F7l@1-jS!vyve`2l팴~"땾>Ev^Sל/娺D"w?>li5 <ϦS53]4񏠫I HSn%gn8@y7a!?:Exeq >bw޺:1@مтv/#ЮW 7E2βF@<1"XLĔ\쵹N #$<@(@)nâ*n uuzL@j]]Fpr),Am_$'B}@(O<.JAG̓ \0պscrn QzgNzG@ SfHH4's ю T"s}@o'7N"s:߾PIh4BIG8GF-/HG~rcCr >, ږ=Xh1 2WϾ`2BL OϞTmMmy)^>1db?{ M}Ops@[u i}ђJF844>@:m32g[6LD#P(>Rʶ& ^Hp7j*"J 얾©0HAZػ4pn0jx}L< } d$vewB:o>奥7p{2$7˪pi=RBt.$zLF; y.BE'wDc;Ba9'&ۛjrW]}AF6AMu|"3U+j`ߣ&錓u 2FU &Ef#́-/d,_$:?pZ~}o R@| bE%F`{|1fu Wk[qV"3$[_ 0ܮfԱbvLxJV.ScXE4&,Ш~w^I:iwȢTxC @о?<9FZ}?~ Vlsey%`ӚҽK1K:̊d<<7* IDAT\ w1eLn@؋.E mq3 Q g%0ct?O?bMJH-tI"_'8\Sb.hv[gt1~Qsf;=@FLs%Ipd@d=tIkя7d뮫>{kM̔iW&y~/~V}ӟDgeՊ1 yeruV0&S9laCFe8S9*8u?Hhz0qWAnwEE5!"}4̠W׉ė,s—U5j;~k( 4_BtCJ7s嬀Wз\  S/g<̹53sEbjЉHm$;eJ?:-)Gv{zcXfHP~%&e^)U.#\(rWl"p2=Ga4i} |,`ʦ{;4RA n.mW&<@$\͉2l%Zh(#`LE9g\RݾA "3!'H> M^K C O \S۝DŽ: |PcGǺ{g|g@Y"ulUІtj2)gwXkג(ϿG1d w}=Qf~O!5(Br)X(IwI= 0] .1, r=r=La63pvbçݙNqؑ]3m3$L(uo$/N}#[w~ǘPc7 4va*vYp?JjT5{H,56|M8agǶor A̦CJX~n~?oԄ, 4 Hz顦CG:s$;Ei ah5 :oCL% Q+@BY s tFɀ GDu ڄ dWdlq<|Q~qW\S#@v>v16stv&p˿oE:>&H8OG8_VnxY]/fo ,((00k't[ܤ?{myuJ(\͆ΎfmXQ^cMdH\@7ofODN~wN:0\B>8},SN}VS)qQS{k+:oġ*m,]sCʚUN3`  En9ꊊ$U$Tj&jղ:OLj@%"\@^_BAcvnEW97Xz^:V4 J{EQEz^ ([V+ـ#M_CBkR9m` #<PBan7djVwK /Gc$|5 7_ 5!z,D#$ Cs'.L'ԥGӌLKIZ6%Ѷ?1e7CTJFJV CU71Hϗkk5~ìݕwY\#I!O}𿹛ɿ6ޔ@0PDž#RN_^,P>VZ)(k@lj{3./VlyppRx|8I8~Ǐ>J^xaG⧼ϸx Du;e"Y`nF-ϙ9'O]]VQИ21+ e g4 - m1pSNtâqsNΔ"dܟoǤ:iCcMT9) l7m4'= ˄ϷZ8+LLw$%8]ڶt#4,xO.an w312UVk3eVGr9O,{\<$α&Ox՟_?{|U]u{KUSKdI&?.ŋ_êCKol- SVM4iTP[ 9SϪC2?D9-2xL_ufwk55D/}; ).E$`T$KU,ja<Og훽<X6CUm`耂jv0Cu6 KʞU4v{X? |?8IXc oJ+LTːfR] }~uG ΈS~=+ ze3AT4DH(g}^I=`79OzЦY.~S6fL 2t2*.I]4<ϼ:GLX'2\ސ0ܵIW&"WM|=(i}>"hDH#L(_ کScc<~7Hژ_pcq +:N瓪sLSt4Eyg:1tq&{"1JaY=C\8ghQv\$@Lj R(t"͚oAx "E%IPWC)O2܎ Żo!VA ,qK #~7gw=m#d^8ˀ)?d>8GK ЫIP d2N&7;Ƚ J{1 áAQ3>\ ?u-뢡ISޱ XyaTARL#0y#dPvE;XV 8W E~>r3"@m=CzhS"iFO;vmEЦ_n =ygԪiOz%.B?>+-);/nK m?^rklV̇g3QH˞3d߀%vLZ}YL-Xm{li (%٠0Zo7YC2U>y8ķڜ6:O4N0NT;Qfމ|R@b"4~ZHvF*ܵ"7vl- ~t@SXͫ UR\G'Se)Yt  ~x&a~Сu \T/ 07L0*7:0jr8Fڌ,༏p3 ڜ3:8+2* ȌD9@7Nf&2,89'{^'ٮ:%}a)UlG;kx.ԯvLn}7ڄQ Bbz͇ 3e4P:|0a$)Gdc M|~8lD?vζ^j8:=?C`f=HRц̘/Adx i >| 8%@s}/ =Z$Irx[yT)w$` nE%˂GXΑƱ纩N ` 3<~<"Ҧݐh`{@>>N}}HŎN&>.*ƃwGe=8>M0ςk.C\7‚UUp+n~Ð sMw/XDQhVVD9vuxmd@J\ӗSv/]m 8x*0߀}^%yf8p_ts70VH>̑Jlpև!)5ZV9U# <"w}:6;L9C? v#hn@u^v`$h>{_ Yi>s j9R0.&? qM%tb[ڕnl# bw<E+ wWK p2 T~cUi7>F `P$F D8HħEk21q@i ʦ>CMh8ٯj5_`XPY$Ɍ}5k}".a@ !)Q#q,yŰ XC7H-Ck/K n'''$!}-&"C p1Px}84Lna`pz8~ҁL ͖q'lQDsW{f>餽uw KǶ (}/O?_ 8bKv (R`<V7Iptv ӤpKdӳ-߫Qu۴cRѶC2{0,?1ڠe '෠C 6v{~;V+P&%̪7sʃvϘ7N}wBۢ!qn҉}1?fn;^+;Q|Nו)˜Pӛ? j{!c]ɗ)Bsg Xȅv]vg:wy^XG&R|pnZ! { jgJ4*BggbuY*Kr$I>7 0"jwu} y+$%TqyPh/Q5k2G*Ȕ^! j C+4C*IDl1cDluw@W&vCC%rDˠ[CwLԧ@&Ц(F)kitTOPnHF ga~wt\@֒[?̊@˫8>_M=!t7_R걏uxIrhث˯/5囏hKx/Bv,`]U~b1-jzS߮g#]* 'SG  5۬I:\At5nLvv͇qK^3N4[o۾L7l2jw\k4?WAWfJGI0v=Ҹ m\)pܨGmI3{'3Vжt0hMB+q$ /szdd3(j ӟCijN|Җ N}؀59S z19`LT?^? wM j8{Hq-'idE@VlEb.@yxr2?vYk>u#-Zo9˳^dQ6Ag<ɑ7?"qDpLF P"m?'CzA>I I|\z77WQAC6]E.>J~HDI^z QS]YZ,\F6M6yRa:/xsl{IslEO}L*+^5O{ZF)ềH&Qm$o2 Jnl^A*DNN&E4E\/S3DyyOd||;hf) ?ɤy4l,H'8:@[\vGh#_pdcWg]Sjdvus/ ;!_- P9{7N|6rqٷI@p~?aRr2~O58ə ׈͍ p ^`bԩfEL)jW4xr韓eRmM gD+ĄL8/һZ_ B8%?&N:͙+Q[Mz? U`4?{oGiH&̩~#"]]Օ?K5aҗh#Pbq,Wk.!n4/-1Ym^k&g"@{>ʸڽ=zNZ a !C0AzE H],-0:vt#Sj+hyUCg LfqS`Љ.Gs/^q.^L œjRrwMx]7&jLjGѱdW:|]tSE!|3#[t&o!N|(al#ȰC|:sz⎅/&G7ić@4 :$atzr| 3L^  QѶ{}֮C1iw̕Ա^+ЮL͞5 iwN{ge{SڻOsv2M$I 8I4GYwCS@_i[u !4v#?L{l/ÿŧnspϳp`G - ׼9BF}M~y/&]ڳ򟚵4ft4]OLd ǾIsO>omo0i/G: i>e+VN-%txOa pԔ}N i41r̭jAAqѾK};?)R;7+6~׫^Zd,%Q>hٰ/(^Fn5pS, 宥}f5/?64Kg{xh<:_z`@S4;3s'8TY!ZmzǮ8o.S yk gVv.X RAhd5mO98ŬE0X]GMJ*4`}RC wM߶F]Џk61>ɐ9eaQ`蠼Ŋq6Fy_H?-[AM2g3JSA^_~./̶<Љx/5|J4{$a0@~+AM]9 ki݁MK,FjTAJqTPt~v,$K|VR%ٛj;9l@M~xawԻj-:Zࡏ/I/'!uNݒO]le9& KLF0k뀻@SoiOm8PÈ0w+ƿp]'-tQĝCb-?QAbxMFC=`ӹMrV )%d)t#&݈։`@b+U#>֩Kax ;\aXu-ɒ=R+ Hcc fZhttΏY"t.Y03>nKE=;ѼWphF O?4WzC@+<z5ff_͏Rgl]':J&L0fFDpBZxo+@2DjUW9m #? %еuCzdQ;.?AI&|pM˒Zs7)ĂMz77jAg#ٿd?{ 7pUڭu+Yp~0Q, "j _]_A)Ob't>d{۝ ]r1_a"Αk#򍥄H3*8l [Im5X] <4rKh> ߥJk>2Δ[hP(ywk:7yp:ʭXUf_ǧrqޘ<>?ѼnVs-4[ }*n氊Y I] @ dRk:y`Oteh8)y5 {@ M.Mǡ#^4ȋN<':˟*KD,r Zd'eBw|@{r |E9G;/qrR=!v]W Of?N'A8^x XbgCsSoHC:g&X34E+8$>B#O+!"7oT܍Pas C/0yYk,8ljalf< |{3"yʫka%+6dI:'gS%"~l{xLh4ZVT]wY29ֿnlVUN2.Q _ZTMk[vKnxnNV =ד?hjk' T}i{7R0YkV'cPKMhS:e?账uR$AI-W':K uicCV|X>hє':PsϏV)+mu&/h7v*/zhڼ$ж.Q28|&i6%~$XGsO?B$O '? 54ƺkFQo1j^}5%\񣙼"Β @J`HSWih97V/E'3 y0B#dx' =ӱ 8 bB6:p+HSy_3E; 8; ı>GQW߳^~AlzV+CS?߾{Mob]_,kٛ{΂곛 mgNIGmҗ&t7o<< {obGhs:{DX&?wZTqkcc9`;#4}A|b4ӛ7&Yľ xo '`_3Sav)<:o$_⼷wzl0Q "61m|p4BGh99 }-}@ý'3󫠣?Ӹah a>(qgybeͣŪ37Tؐri,ig :: i?5QA;G r ,C0kwu {T"•uj# l+۔K,(\H 3FǼ/F3pi_B0^k`9a@r/ jIC'3[gGˁVx L6oMBSs)_(6erF矚`55sGoo'5`rV}W-鯴5!a+@ ܧNf~@MwfH ftGxCCm}Ǽ~ Hs5[4׃ + THͻ#4Ӥ3MF3/gꂗMܩku:KQWhACZb2[M k#>@Lav hg5T}L4Qp-05k?`jF?tgA,ô dxcNx ZV& G2.")/BD _ȒZ7X*l̖yW>׃DʚBԽoێmðD:Ycw\hY 8+[L ÿ6.V;87m%0o:ÿD8PKNy4|I_ 3J )\#}sks,pR!(7{S2ADɉj$҈R3NL;$*u}-CGz.}8~:RgzPIh}YDo`/-^;ŷ\?;^\sS{xhh6"OQOiϣ`Ŭ t:(9}_SףS 9Ы,6&*E Zx>:7@\&5jnoWn-K"36qFEAaLGAhOosگMX sjZ|q=\ hĂaJ[쀤aX5_ kSZHyn=>e@ACi4mc[|A7\2~XPiKyq仵W!u\K[>:-AHZ2&] ҡM".ig9ǡާ4i9D9 Ot`??2F{Ly$e> V&|7?'h|d(( hr8IߺDsn@{ k~dC\::@`Pfֹȡ֟cMͮ 4SԄhK xu32(l0ԻGLAd~h>>IkNhR=M h`;jh#HQT>s-"&1R$ΐ/g3M 7Nÿs M4c%5-W[f?bPf/9$9~J"@% -DXnf /~UX҉0ڿ|(eh״G7x(q(ˁtK{U@ W;+Z"VǍ۲U6}g)@{:eگ^K+<þA12fCA߇u,( l#S𬐹~4կV +Q\*QX-1 \mqJH78:ڡ^=Z<5S/Cpҭ/u ,0+w-;i \`;n d]ӷ\\(\K6+.X;ofvDӼBtGh7IZ>!dйO`azgvXGjxcB|^t)֝a7rL=|I҇o<,!/? 8֚:VZ9½΋g?-!>EAȤIGAB!Kئ#YQT ;&&N?> nQPI(=RӼSn<㈇Ϋjrx3A l &`;iox0rkY-)G'}ϳu+ ((߱G!wwM^3~>kzOpS#^wq5Ocόտ_aɸ&4~ F"l&Owr: @t5Ώ wԧs>Nn>rY uSݺc>Ma F"-g74i.՜M$ӛӚ1 x0ߢ3a耽 &Bck$ x~"E#{7+dgܦ, qϒ:y5+N[cLZ| ?BC8d)y>$n:ΰ0vp$=Z<S؇- Ng{~.:`Ӭ@Ixg"W+DK vj|7loɗ~y734fqЖɅn#-j&9bcBOcc-cHI{j7e u3rAcAGQ@rA~R |ICqG@ r%԰ [ޘEp@NФ$(}xf{`(8KG6ێ@l kJڨ[{''`0ڬ?,k6)GˁVx*#un~^oiV= !E Ro߼m=s ԧrjKLwj+&oo5; (:ݹnbش>ZPa|9&4hf;ghu׌4JMbHdzS@ckhGyF@ Fd!݊ 4?wV|K]<~O@wNL?8`=6<}  9:U-&~+gP@O h-3Lλw,з L7/N y_D(@/㸢 ,PHThY=Q>w毐^OK-gЍ'Ny.!g}% ֕. 7{d_h98 Oj8\gL&Ia Y{(zyWYOSjZ0O6)8V6~c.Xc ?e]-OO9:ڠšꊹ\`\B4$d (=džCLPu"T`=>c)QӍqvsnrȟhбL]LZFLCCyy~z؎p.9ԺwmY<2FxkN߮k0cP&J*D;[@`H~`u6X`00h{~`*`BIt8a!/C{3 gXgEx= euy;T~̡.7(h-~1(W=Z<5S/'Ԛ'ٵٳY#6O55S˨1a;jGhjj[@h/H#80\g{k 11'AR}k0doи#L'ItK˟kLr tN:$ 9yp4juI$3Aќ?f~Mg9>>;ƚLYTa et,4xS= %d%t]3||q"RgO n}#8ҹ/@kqc1c=: fc lΘOqLSN:]9x**p?s!$Z ~ ]PÈ7xv:"[kybh'6;`A³b!(?($03)W> .0$G͍:nu4CW؟ 4 庶 ` jIתCiXN`#ܳNo&: Βc0ꤷ3d/#= $ZAm .ȧma8S2cSXrW ־mPqdG*TKVCV|i)z g1>  5/ﱣm c lwAͼ-QH:ZuH9˻(bWw:֢"]fvOˁVxE{4Z|3l,iXԺ8'1 0ټd0vú/H7ӟ_hΗyΰxݻ~~~&1?OsC"r0tCSXp;`cb1m#h?e%DgX'X׾@Mo6M{B9upXp%uהc.WkM[<%==,hx4Ӟ/~6Jx4C$k)y;pw&@-43:N OKŘ]60iҌm3Z*zcΈ R&>"~>jq{B۱(@9]I>=o|MD/-4+@,zhh%H~6*h;Jmq1BwMY H n܏%smN"$iVh8ў7Zq߃6ߜ+%^׶9 Ny19 4]bj!* ds nb xGS@#>Lg1 :Xuuuh,m e` qY{w TPAQHzzIJK}O?fzFMH8,RWh@BQk5pG>CH#!z{d;ۜ&ͻY> i8ZaYg_4B .BqrF -Z3)CLw:M;$l>Yڒvۆ@>aGˁɁVxU@W-dZsna9ƇӛgZ<7oZ !sMX[N%U+?w`7ІA0oszz!`h%`o\7ꈬ@Qy ;;3n#ШDZ.Բu > àk!~:(xٵZ݀j}c4n;?6&|Y,X)jlg(sOhtF!XN0֤/897iBw $3%XOXn8"|ij]R@(*Ƚ}$i8<eiHuBa|7s2~s`} Awwſ XaA|ȕ%hz5垹P8`qʬW gJ[59 MnmcR N~? h~rZj hAm' VB(g=fr?8N|`&q|х!-‚ޭh_Xx6rX8sύi~,ߞ[#}?)+qv-E0-֊Di[Y> ,;]в3vؾiOG/ԷL,٧k|hwiO)399 h;%.e)6ɳ8 Y~E}>ibGh8/lY_o֢ A~25i{Y-Ѿ@[N7w^V}, ns}sгۋ;ߐtJ:xоn_FTv?֬?]tYºb[,n8O䓉WpV ͷ:;M'Sbǧ#i>h l_k}rOh ZPY-O7L!E,5hsk\4NMrCՊN ~3M\RT},!Xg+ IҸcv}- .ęz#\"S%f8.?/  Z0ԝȱ0pZhtZ(&׼kT/d,!# ޲vOYE|mR ?R O]ǵ>70t]OѨhQAk>~}/ť2",ba_|6hw):;.e1mCBl aV@wc2:`C_A~l?>< m۶ tSNX=P4Scqݲ[k50â "䪽]]W_]nxh>@<5K;sfeY0@=g'j'~ts ۺdɚ]aBS.G<{)vyX (翀=Z=!8sIn\^c) ѐA䧘7# ԾM;ה/ {:f# =3b0юe.+T4@ 8ǧgb )H#]K莔hw^P>Т OogwCԪ0>>m8`\ZL傱чclzɐ?l?0N`6(8ǝ"u49=~ %ؐL :'B#,RY~_7aer?)XCcFcr@U`~y-#Z1#9.w &hxUS+rMͯr!s<"ڜl=Is3M2gBly4r#q`W[|U,hWUsRu2A g݂ {hffQ|ELMXk8^@'|'ҠuV]sA߀תhHjtTU9,+ u4ofwg}L T;v^woF7?|s=M7XаRɌHA"&1{hΦ>>ѱ>qW]T_ױN7,7!eIJ]&O_|C$tVD@'hr''9B޺ 1wW${b=-}/̦EKV-tK{&B$H"2c7a~GPȘ]Xe,ȶM9G>!G~ n}chxh1OflfFzK̨j̿KMѿ'MAE1₉^zж; `ei8ڴL.:lO![-v)fz6BԂE}o|j %:ӥ0 Dc ٮxZ,gpo@=sk^xj( p?/P"7l[(HU,+,w lMv?sV#Цz)A0S, Ja3!p:e)cYXYn!/χy?>6W sFڣ@+<KvGp6ՌL&^A 3߁ݳ"92By9uat rJ/*N~j#_un1M S jx--1DVx{O0;Xw`PGDEC<<>\zU _{ffn$8MPQ EhJ" YwI`&8HhZ[wp?asaI',nptF&~w;*p?{$Q m)P0J[E Z"l}²Ç#L: ܇ 'A򇇓XT%A7Īy6B@+Gsj#Rm'm3֍5Tp@Tcoi|8\aWq ƦK9wCیo)H4 r{,>U>lxh1 9u82.ŗp.rtW0%|6]jN҆aWY昨~S4N˪ݎSʋ֣3` f;-9?jҦ Y0gl(jv)4IܺBiMuiWowB645۶l3\ Bcn{KB k:|(yB8fSӟP>+$qOA@=FD>{@+Vj |_>aJ?^#tSбQ+ (9k19rp}&tP43}8h6-+[({ 4'm%  T)=c?OiOFԇ)/::=J>{ek.ebhc0'XX}_` l6!wh::~& s~~ꌃ7w$s7'2O&QxL}h4m>!\$vhQК@d݅<`!? s=]z|s?֋҂,h6CSv'3R/nS Mt8tAC,Vb]a[s9,?PG=XI.T~)[=V .uOig&ޝWXhFk(<`x~kȸ6WhЎz|H!׾J#@-[7@=glr2>F.`5;8~`1tz^`-ퟖۀ{sPܘQ0stEA? 󜓿U`R60? 5+BO٦sI^y9y[\_m]i +ΤUevhѪm|7?,o95sQm@8B0CڄJyG'̭FRG_BWF@jjxK u N% #\} P|Sˆ+Q!MODjN e<đPMoncvwiU| s$LDDo@Ld?}:Y[o ݰ唨!Pe<3/H/kuq}ξB G8 HgG[ז0؉o|/,,YK`?BúݓGSgMOQô^~yA3{su1=ez5MDoas5c(-3 :05zSWG`tv4GN竀ϯЯ/>DHfB}:IvC"t@]`b&q-5nnIC[<n"`A1S1)mX;+0_0ve6v 7}C,.OzoMP~(,SZ! 9;6;E.@e3+?ЬueʞONn\FAbA1ֵn7;s3Q 4xI'}y?y3-ZQ ח'#3S7ߥ*gt] k" 5'biݧh?jiӌ: `6=S*5POm;4S\Fҥ޽VS#g5l5d 23k-Xz۴mk@ROp+z\<`@7 Bԥ #Ϭ[+qjY>|)9$Nf\^߆W`Q+| zɱ@]F1A3~ԃ5C߳O[:)BbgP*:=?rPB'D}ֳ3B iC"t\͏YOˉQyjw)4@ mne]F a-|E% (;FgޑAdF 'иa+ $ju[Bm 0Ge.x|:}mKv,4!yQ5(B^`@+|x7@3)zc>W$KѤ.).XВ?_HzaH`uӟILc3Y$Gr‡o N=B)@O3;\v\nEs-I{kG qEaCzH0@ƗKs5pO_צ"&|Bb y 윱 vn$DyqQx丕yIVBP & .q?.p$mH!蔕 9l>\trpXNNNs;N2rQp j+LKQ֓-f2 oq(f;b7?1bvztyaӹ!~ i{ۏg;_zO OZw)v/pP9+T8Pv+ރ#YXL>S4GQ\@\IĐIQrL\j) &ăGX|4qzN[awgs8 =i- +t wLhq)Kߛ\Q(qII!@aQOcH~ ,#j{wfg/^v{v ~7\6R0R'ٝ/RnPGϑ}:J,a^3>0 #8^)~a"V^S̙b6|)02zjg45BA_?lZlzMPcݳƗiP =w 詇UR|./`P<vҔ!N\zʹQ'ET'ժ 3H#\GZ];`1c9L H - MPؐ>~觖D1/>mXv9taa*ש[7>W)_q.5}\rpTt |& 3UqC"w=X|ܜib.;o߾7gkf0diVJR{^o<]/ras<85q2,<,Nolńx9e n HF`+p_~@C^w>@ l]. xLYsƴ,4u/^ =|BN߼z9ҩ%6㞖p0T~uBg|}h@KEswmzMD37(8;NIv#@Qwex9 7}7f3ϱGwGc,ǣ}]AE H:.yGr!O_gjtr '_%h<'cdcn1: )'_=l&ԧ@||P5j}CK֓-'6[^2 ۾Bɧ՜n!wŸ#qƭ~,!˿`O?H vɥC 1ޏ>+opݏ,ösq)2G]c;eecGsXKxHG:|v7s suigAУHqMwL~Z<#/I~s8{8a{47-f0澦 `9NNc8#vhy&꒐4zMؤ*P7wm?Nx7Ĝ/ ƥyu* ~Hz% \swFh{s}&i Kz4K{іǘ "NuW@a Sm: O>r͉ƝC R+Xa!)Ь-(#<  1yFAƱ  3a5wەGsh >;~FFh ШDh 'e:JWUl;p|Bm{W A } RȯOx ~1+c/5IL{xh:0,'@ NrL&I̗NLY[V[^ʼn\"iZ =o6岆LFxM@hҿ00Ijf OE7@k֜1:mc Vεɲ\ `D_X/.c=~͏0N!H5 4 HgG۽b[gD #h{훍\}<| uggLbPۯeݞa~yBp#.LYNxn=s0yxXL~M}}k }\+Nz&zͷ%勼UڣC@+MOynKkh)wB^Ϟe6榻]ї}'/w@ao̮@/WhW5G%[AtA~oITS5aɾ {;a%&v#%zay(](io֙{,է£ca‚nG iRY!@'DyQ!4L0//Z:Λ2o qZSr 蒈-2U<};ټ~CS۰qaЗehr Trt quOe5"C CsQPBDGˁGVxPHl@&{&7?G`%jFWl̾ a8q̿vB~rAw>!~m#bBv r3'lwIƘ]<`g$K |ish 6Z*&;4W.(z.:2/7":u5ˆX#r&ZXߵ7^X+3JOtSc`,z0PCPʱWϸܢ39.xH皾 ܆H37,?8 >9~G1BO(F9 ^nwA3:@(_Hl׾>$I%(\Ht5BA𐱶'i֐CݹDcc5\(-Z C&1LtO!^'Y]; p@rXR`I|@>{}cEPCL XMR(3ړ>5RTvz4S,Wg<4@՘K_KJK euY҄*TV'S! hCb}ʥ h8Q-zQԏ'X\Z첉PB5雷|}C)ԇE\>%hHz7jFDBú!plFmJB3׵2|F;?@0}xD(dܐ,4&,MqsKˁȁVxI4U!@2AklRU0p*`zu{ H `c21҂tŖLk:#:`Y0+4" @/>`*dYivA,9jp G(QCZwSH??f02OxMwX"J yv~qt3"lp-9ƙQ ^X6lc|׺aEp/egU}[Md}K<#.~JsV^sw@]Uo\Y鍍&`Ғb~4LȻbXT^QY!wF $X^8Ɔ*0k7Z{ t/3!ŵPFrrءd#Y+&hwj>)$QVu}-ugD9T' V.{1!yg6ѐ8}ګbj⬧z`W]+z["I۳M;I*B蕓';U2ce}|)>ȧʏ`weP~ gC<- -+9YÙ9<ƒPg߶X50@A+3m7ZBִ!iw#D*xWK^t> UunnL=H+ퟖ8APYI<= 6勦װY9ߍ[y*|,Ҍ{psgBj| ]MuĮǚ%Vja5~U ^$̐MV1T o蛀ĉM3fy5^OЙ $"o`~ɋ#%:\e*฽= NM ^$0C5y\h&`ЖPL#OjK8e}k3f%-=|OB  "p |'rBږa[K"vcmӺ L?A b)R@J7r/wQ,s?of? ӵs?Pcrp۟ZNujvӠ@ȬɤomͶЫYJLy OH׺I~ Rs?.=5x[H~IkӜw ti<L7+ wÅf{\67aؐk= zo xjwVizotI@g-@B`fH!xxohHڤ͙"P9йC5Z޹鮊F0zk|F 7kQїgl>#y` tBc[WrĂ}c1>ߵfWAt sIƱ#">2,Q4DGȀIA4i9`9 vh.aVP輜9?1r!̠ (g? 3 njh  zc1lä#!en\㖽3SbMm _I@˽."(8ΚbL'iZPVt\Y=O뛰d nf?}S u6ԽfICZ6ʬ6 OArDiW9kB7#ΚX@:4ie#ٞV=,+H u)${(C$Ch< cD?BSWެv_Y,}42 q p~SP~"dLeQ-K(4ZujaYoq;U&zVPrV`)!A:j>@PD(2={&`:9gE(dZ<0H@nxhj:Qך9 5c=n*: [4?a5hs;雊VQ3w1x!? jNNjeҜKBDO{'=-? ֆ!Bt(4ҒԽp| 9%z&C@?LhXW@?!N =M1N(P)0u B?D IrWR*_@Lǀ?ӱR뿡+@@^>MfC ??P1cϓfz]>C57k2*X<)1~-^BՊBlh<+R Ip!ywÂ\?+hf,~-0-*Zࡎ#ѐ͟y3!0 (hq<̑e.>ZyC2s֖MeLp?{&9+/򬬻5Ùvv6If2]5^sb};@5&2@gEd?7^6;劣F[grc'z5jwPQ;T{#B|CZ@:kӎ m@LRen #*(l_-uepc A{"\WA|>ȟKӍ}ra)ta-W@ dQSSzPVD~-Y@PF =.cw0Xd+Z>4ghrE >)FƗVb:13|T0AzFҮ?o_D~q}]*R ߑ ef`V* *"T@/vGǁ@'؀|HTZL^o 漱yg3Kd{g+5$@6!l6@i#03hp/+ =nooHCh<?c X糓Ӝ0k~* \5CI]KDO10)١Fc6a~? zn $,鞨{y0a+l񅏥Cx \R kΨ63\(O.'>1M 䛢Y[f8^>N #kG@D  _+hc_Q?@?\2T o}??'Ag!f'ŋO#DZ(>Gֺ?v;cRSP i ACK,3s&r$@{@-NŎop .~s?u"PnwQPIAJƬ,4RƍzU xxʹ-<,lC36 +(LDn[?Il"ܡ_Er[?K @'!:ɸ7o>T"[Æ[jh4p䷟}J7~SXR)PgrS~oɊ4uțX7t%"Z Yo~q`g9 ;;4OZ+VH3K# ~sb^1Q m\q.3뗯^b[,/~`*#^+0Aўט-'p,*@zs~o_7f<V8~;:0Y̐% 86~AP 4~~Pm 7k5э&=͇ͮ=L5yO OCtB9]EaQW[uhzn$N\P@ UB: $CrK>}Kc״XVA=A%.'QEx+moʷ > /QQ HY*7S |'Gqz@ -UᗜMB넜-x߅u Tp`] ?',nzgH<;G0&XO/{lA(@wBE\}bې))>! ]M)^W8 .,32S 5otR/ oܨƵNgt+Fj91< n=]9. - ?kELQ2dZNn\(_@_B޻бP@`d$W]ӿ70%o[p\a*foiAv[HS ;b,4W%J08?Wno=,'aywy  8VaIѹ՝D_`Œ[h` r* V5o۔l0|Uw) |.}c!ElDk$ev<>T|nF fnxأ ̲=PNɓoRWچسju*Ǜ MWXe)iDrpQRex7E{_kwpH%:Wq%褨c$GCo ,t駿>rNݟ;ŁNةq+ 7;Ȥʌ4J3ژ%]{Nu bbܴ5 ĵWXT6gM4eYmN@Bt#%>|hXW뫫5T@ha>d׽޶6TI, 4{5["Ž +fmh_=@ C@Eօ7h[oe_#a\?D3wՀ+@LMUYxV@nq;>G X xe03T=#VhCJͻ{v,+ . 4߃XJɔ># ˷hɚzS0;#Qg \Ǖ aq&|%yF,;! 쫿8]M`~hEj^*-Hyh=,_ `|\h&Qtrw&VF4IAՏ H&]?-gurVn}W:m"l 23 i)`|@ۙ&N G产7l8@[.aԤai^D^Kڠ<I@߲KI`ڛe ^% BpPV5ԵD# N @B@Gc9D3\9hK=|Cb%<締`'}'*M" ptGA>,e206! H,Bnl7 Z]n1~AO+d[뎎́NqhuQu5,TQ4':7ڜ T-W̭c | MTZsXQ{ biɉֹސnG; NG-j1cKoA\FL|j`,eWs$P~.vo }X/`hZg>\,A O7l7FГ(&@aqDLLG(/=EK|ߒ<\PW\a@XV~UQ4Gzsxlݺt?*UxY#\l5H xu@&m~ρ?}2?`B ҭGmGc|$͇8? +{Iή~LOęd0΢4z4os.(]L+KO O:|Or |KL?4l';=E;Dk#0Qnd"ph=GԶK2@srG@$4 ~353O0ߥ>DNҟe䔄B.6טxa^>QRЄĢ8b<aƬ@&c=fd̓vǐn޳ Tw#>QV i<^ǘNHm#az*[A_5C 25-]"ʿPޗKmH_OKȪ1-ـM"Lrh0x:Z~Vwt9t ɇCP4 #~P1=ɻ4+On^tWl \h]IUk3߯ :cfmZw:HM1p"ۉs5&6AK;ѨM"QOuih eʘ/@J>( ŕAcEw90/NIj{кq)oRXn&xzҢ oIL 9|zleK@AsOGPdxUEWOb9 ~ S1RtRaG` tA)#]ODsna'1G-g+ўݩqvh0>4R*^hۣf'Gk&e~9,uKWַ%>ך}~(ࢯX <@?F< V$`o3&hgOM? ٿ^kb*ݜ%6<@c X4?|,"u#$:?TxKoc˧{豴P-_M~C^cNݬ D#+1 na<4opCc? >hx߼/V\Y ݊;2C|ۻoZowƻNZ"XB z`P RoJHc ]6w<|*Pb2\k UB}+[rvud>J*bN{@l9kVӲLiQ@e&7uSIߏZ̾, z ^| YHo-`@`J=u@i-Nr@~QBŘ<7jnc\銶I*:0S=ֆ7WQə{$瘰4@&q5^uA?y\nz7m@dsmF;E55RX#(D|cS7m*8,PD=17K]Fv}hsTBפ.JT cjGh,VLT9 xs^tI<1n 6d:ZJ_[^/ҥ0XyV0@ P .5A(P/ڲbrU5Lp1FQ,KD[0$gm=V'H4`Ownn{Э% Q tt ŇCIׯcpIV=M_gG?ޚrW3<Dix@D4Ƙ֧% Q {ڜڮCNؚz7>~I`KRNԣyJKٮnQ \~VgCn1AhEQ08ŒЌ@A #Zۖ}@+?5sVX ҏ;@쳾A}[=L>[нf6nzJ>p0U P0q؋ GOj]AU4oE/"K M3`i_GAk ‡%쬳O{[!chJ%CFй` |en buǤtKf`<Dʟ(8k] =ġـ2]/JsӬE~AO`rͤemAvd`g=-4S۴t5{)$ ξ>I=Tn4K4e5`qM3dE#>YBjhop\n F N'8*ّL퀕VAL,G5pݢ7n9+:K3c8K`>yVRgwa9kWB U^(hI|ѱO|~!֔x!- t:XPa+ .n.ap0`iۍ%*"kQDhW߈ 6#8am#iP9'.94.2~?~i ;:(:`GC$91G+8! hg:'icveS?=5Io5v&ZmfV&\IsJ,[(zqH5o#`Džcq=Q\?u֗bnKG?#(4K ?N]*1k>3Ok+ jtTcPK\x ^[B}& [R /򝗹.eH=T03C\ Y*)+s$7I#mc#ߨᝂB߱IOLPd|b!OOwr~AM6xu8+]hBh{e&`>l+pN&NEmYTOP5>g=u2 8jkv&r| W0ҡOuݼm[𐥊Q‰w4G?Gߧ]AU Vl0ͯKjZo.0 z`+%RIAt|C `ܾҾ~W¡1&7 \O(zC07|ʵ<e,V--%-7xv|Ӂ-d|yo/ZjՖm)W wadE<nRGE:S(. ;e *JWb: 莎ˁNݱY2yB]{LXMfh2IVPe"g}@bw5e>,|M-gm'tͰη픛$X k4ۤ  npX\w?*<(h\ "=ɀbN_}U2Ai"Il]/~7F\aB?<̔x}-(V7i3+͉Jk<>>> 4pY}`ax?Sh 6•ZG 6h^0g/$or 0 N> - X v/!`tk5na(r@Ja!\bS VWA0i#vӬ /R^}_~Q? ԇgfC@E2ԝ#&}U[0uLTn`\92b !мoUQDn +OzQg/<]Vw@A8]V8(J8 ьPt0É3ڜ ЙЉ0x ɶ:5@5̬g6enj  Ѻd5,'u5l%q@?b4A헟e~'8FT :Gy, ?x/Z>sknbc$zAܡgJ| =?7tSf@hnZa[^m1a%Ж]SSHqgÙ}ApA@;N@!.|(Y,V"D_IEV0ʄ:#.0}~{=6RJ5hSmg$'xA@t뎎;ˁN١ k'K{ ~|hM/;Bs7(NsA}nDXں0:_hR>^#5 S焿FJ9™qw4_\ ` X-Xa0cHs4n QX q yF~}%6B=$h_aɨe9 ukS9qFM1 s+-"moS$ }X9rbi@_'wC\%b8oyʄ!Z[k ܟ0~iwi!3N*>$elҌ數d9^#{VXNt G=~qƄF K;:|a> 3B~y[=w&iwԪȍ/ XPn*`NƝ;&fGrֻz ,4@a7[ 2}١c |AK{GhKO A_=-=iKCol&.K,TD@&@7&i5XG ~HDBhǀpe$߁0K)#-'H ξ+n;xQ~9\:>`؆8g~^acjFwnIcdtJ9z8#aޓ:>~}Ž^Rt L! ۸X X[IB=j[4d)$9jD?%eT$MvŁt^!-׎u8T1i jX4[x38urhNT>[BAm%X{y_^{d_ؚz8Sex#-3Y(0tO4h\ }i-rR#YFz?h5>^bL@e}n"lXn(SR*^/L-q-ifd,nT)D]=/u:(:`GC# .zg?ks)X - ?#-oonvv{cQQwl=hԘY= dkԺ#y.} 0Ky1O-O+%{hz4;͜偳k;d1M3$Nw=/8橷^' PF(oz}̀5ϡv=]W.NM=X1,tIևZ,yrz4h}bϟA+.m&S(踜Oi??X1o쓚HKxX@X<N܀5T>,<ӕj~^RJ= f;cx:yKW<0ҷ/S$~gIu&2Z95횎yLIpy+X骉ʌ[dJ1>ֽGC_[7H")ˁNݱPYkVxJ(VoLL%W6(Ѐi^V+Lk^%n  הGoL/.+DJWCpdh|\倍 Mɂz'rץgY4?oDzY߽OD=i>x|v)tRyO}uTO"Z(ԫOiOg)F4|<$ۢm. Zgok>ZG[Z>Y(HFlܷXMʼc1Բul-%ރγJƀ:;:|Hi>Zۉ=;{.o6䱚fc<}iɩq ,1P{Vk]_@xơ߲R报{h;,(ئ(S)k`v?}VF2/:t4 ##5_¯ 7BN@٢89,K =Bu RSSXчA|\:yj{f("d?GxzJ T_~;:*:`WG#)׿& j;Vc,yHh3s6G#@-^dx5^5@"F'e/&0A{o ڼuwutN@1#]ʹ_@AE hȲr(Vu Amj«$M~h!Fϻ_֚`rgϟBԩe hSد0q.LN$?}(7 kTԤ5Fܔ~l ڶ}-lw /)頇 ]v \ce'!|nN{T7j ܍O-%pJ_`wtatJZ O{>o` %}V؝(d.j?a>AenGƯR-xd~5uG00yi0UlywMܣR̭!?d- #HqB1!O[F+O]1 77{sRkv}s-gF-qW -IrN\>|wD숧ouS8R?A\' YA9'>ݙ: m/f-f`L _6 |NQұhx0{^k>քQ e:h8LmkWcAk}%!a?"q'GPt@E뎎́NhǜŜ5kcJ I Nkme4kݲ^22D';9$lpAz0֔Lryz8gl`= F9x٘5g 1j>oMP%o3ԼXᰇݼ%Yq>`{'GUM$9f3g/^1Qm&."q FۨCCi|Ṷ?e蓑: jj<$VaM vw @~3U f.tB>fx1M6ˁUN7”4;"dq?b!KL+f)&YS/utGǁ]@'tjݾyM=Eǔ'rM}~(Ϟag !BӘe 1G={)56޴ ,.8 )B/Expm?= ۷j{H{dό)XD-~CX3@'*'.M!CPJ(걂Jex 9a%ih(~qW͐pvcQVwK(`W-@Xk'|@Am.4h^k`^e6sc{@-o/LP^@X\dN5W.`@NMLO <1/@kk?FGX"%Yb'JRwe2N|-D6g,qN^v_\K, S^iּ,vB*}xs@g鞕0%Wt&~Mu7J`Sq-#O8& dEPu뮱Oh`ZQ.9֦ / br<Y9c5_*8pG00@4Y ( 8׿*f@f~mJݞk\|Gf,pP_>%|A Ni6\F*HE ѽ C.W|OA~5jE 7=㜢xh|}]'~R1*FgrvGFKufB/0Cwłb7@Wʫ, !<ݟ;ˁN١&Yp -Z={Ǫrx_#ЄhZ=S:/3?[4e',p{`-&A-wr1h(XvEzX @;tO-@,\fX< 6/lGun3Q Leh{a^# nuEpwؤBAMl}cE%-0:Nդv[V}Қu2, "m1ѕ[g lL2`/}8jC=xbHIUUPQߎ;Nؑx*9|K׳rQh:1e>M쒀1AH?;fyQ^r~5IZ@[찧#ifMTIU+)Z@@oj_)fC2 Q ^R* g!P + ~usGy'Gh&A `|Q>8(:/cafJ8 {X}!} ?^!аq)PGerd7G^{@l&Ek /ChV8곷~ G~؍9(=;G?toGx}D7-q`8*wmD:z~wdfOMNN5%s8  )S\e nU+j5WY(e⧶hiD!PFia['gACs`h"J3siKj d Ҭ IX6ЀC`0eTˇ X෎mIWMm)=3ֿ֒O^R7`WtR'"͠>\-f4L`U6Aǿy7_svח׽/_oK 1WPV8>j)V ppO1HEoZN%㣰Ƣv?v|fХXJ]##K+mV9i#oV1!5ޔ$I\ v;̞ ;@`Z Vh4y)o>o|iot>Ft8?>9LⅦ21|1 TT-ANڮ] 67Zջ\blB Pt=2eixH 5@Ƨ@Mk@GeVp8 ku)XWkQ b|HШQXK5n^겴73e;s/tU-~}q4]x#\PAChcN_}uw>0t6`Jn&>M>}=Unhvnۗۥl&xL~_=ǗxG [g3"]v>WՕ P@Z=$@,[Ǣ΀^)оŁD&0쏂A1I -[, ''qoJcy0} K뗽ow잍F{߿5 ԋRP`lRVٛCvP9"<7WXs=ib1eOv0@#lĘ& ⾂Vn Qڗ^ tVpG$pG=1OXAT?x"O/쳿[+ +RdYǾwGǁ?$:-04ߋ̝5_>47~7/!7||R2GU.Е6ǩ;SP@0\P%(S+ t۴-^EztA^WKwwLWu}D֜S4g1] Q0HJޢ/[m޸ `/ߵY= 1EYvێ50^a+E@|@.gãld JsED:(puH0U;nN(Xnd|sC'1KAs'0]0fLó#)CtVS ISh+o,x7_cY?ہ.npZ++ўoVs8@'1Nvl{0E?)L½]]}K_b_}Пy\qZZGbFEk聆Ж`<_>`0"8jUp{O|{[<RTHRD(-!>qp`4Aش¸~}n^_Bk*c o,/τ} S]j{ >PCmvT4u!) k +-%X ,xqV  Lؤ0=5vݱ6c IDAT$_fq^W ˵ 'Ewt>%~aVd gfJ\ٶ; ݱ ]_@ߙ>l*fWa?۔9krk׬V]TWCsW`F=m\ |b~3IcYp˿e c-{o>; rZAu1CPbLsjF /_+BaA n72:WjЍ,% Xd:ۖzd?NP'{q,ޔ=n%coX{Vw&B+0} ԟhœ%S>B }#rŇ>TLfA ZZd>4_n{97{YGܖwrDִԚ|0d2/k4nI"&kBB%qec<F).>nFMg_V/x=5?%{gltz?(dcej#ƭt9x_D lOqNcpk5֔59:DJkkA|F; <.$(_-OiW0m<[Q[sg{.FI ()x8V~s6KB&-!mԺLzdur~-D`S[@P 9QJ6,ݏ 0:+.{7pN5w_jN Q4j'4' (Z'$BAP(Z>uCcR@WRhxsҖ)`L&%`@/<b; k~QI;g8[ 턠j925VZ P0i;Bf@ݪ׿`gKb3ii\iNnRn8>tk4R34IM&H<l~M*sYiV{]#s>gYAOӿ@Q^恌|K=#mnN?\w>G(71aDqܼ^J?^Tٯ &(ǥwSz K:d5 FA)4t:>?]n<6e㞸,j#>E$\_ᗂqvH >r=&!Ea<ǀ`ăcFp{vq;=?`.6g4Vaw<@ryeT*vs&581ҢXSJ_ oT~<oosɺ&LN|, C{ZOYU)wO>u Vb+8sBt];Mi]@&w[-<]@{SjB%$%yqϪӣ7_?wis 绚㹦O 6+A1l5 vk77in*ҏmI@%xi1t(ܸ*Ï>8poy.Ë43]GbE{MtGǁ@'||D}X-Yˁrзo/nVZXf8-rN{hs$ZKfz}`+\\N?pp;pj6@\?`HkQ𤊅x.xo WARi@g`o]Z]]CGJ8 uB͂4oW0]V;h9x}-1׷-H{u@ЮDž.--Xz^-֣+)뒾 âu}7ӻ=}}H< 1Ѐ&P-p%\AzX݀>n7uAĦw&cϿ 'LZڢw%#k./_cn'wqm" 4mO2-Pп/BzVۛ|F?hcBP"Dc=Pu ~G@.Yx.*@jj+R7+c7RoѪQUNb(jjۥ|9U-uJPmۭxl R; >Hi;as fٸN{E6ظɸV{KcуMh%n /0-6l |'?}1qbI;l_}]u.:8tz;8ס&JCjoA=`E&y /hԘn9`I(6G^!L'9†3 J6'k =]ω?$׳g3@A_&l9+n|Ҽ4Dƛ&VHs.t\Զ *@MX!B /]4k0ޠb7i~<5p^$O>hܦRl g$yrr^=^FZ"8 l&<*^K!zux,i!JC&:AXAz֘wI ڀ*$c) ȗ?;~[#\<?#ܛNO"Z}*Qzkx<jz8{p~uwoۉ&Ug _{ݹ`viY|{.&f@K3q1%xREJiP *.\ؖflp0e#̓Z7+H$f>柂|ٳ. zPAG |d%i!>Y֦Ueq@@'JV B9UeO&A_A@@_ΏJT!4 K0WwNK-̼վiy؏P-fH>ɕ5HMY-3 i71U1œ`=aZ"( OY~*d`1p+e<'.`;,oވg {﻽\Oj}‹Og[28#C&˴U{ns[s3Dw.1ESd~e/mv=k. &lAr'Pt|Xf0Q7&oNM %8(tO_B\DU%|3g^bׂ9 >rAx+ m2Y2D, At$+x qy;hgV_(?9_ %`>qm7]zAD< h2>nП`,`Tjԫ08ph )1u\]b9ctO?G+7@ q~G 8KVo uyOfwb4gLc6N23RHo,+%{g/>f+,8S_ OjDԀzng;[{+{n{;w7Sx35`Mvre Ҽ ^wz-G3YO}ZԖ!Z$ $n]N\ЖGMwY,ּnfc΀ gq j@`0P-^;Ct BD7VbX Dpg݂s5G0ҎYÏj M~w[P3~3} 3r Q5s$2N+Eo ZK<_*2X2NhSyc4H}ޗ/>c䨲oխoǁ@'؀9?DyJRi4K!f2::'4Q6Vqf.5C{OPsFhFZuT[PƮAyX4hq|CWY 9L9v (JK-&BE"Z%d Į\ szv0aPht}{%!6jkE`əlRwTy.`?Ю;%GL@:`'>jZR k+ u:W1T3om]!ê\2h`erptxߐ q>y‘m(֡0V|FЁPK?uho|޿sw}?ߡ菌#Hwߝl~$S@$,O߽oؙU bMB`di sM|Z--e{: „ M4c,|(|#]Gכ: 3=jJФcD"=̌_.Asȅ/FjC5! 3]ݠB}{ :ȃ-sy,'43a7XFa\39v|{* ?'ЮAC-k\2dn }{M ̱]q"T$v\tڒOy}Ͻ^~{n!ewρNÀ 2e^K^[I98%Bkj P:Y'+vr,d ٛ? XAvW>0ӌ{{ 8r}hԷO0A! UoE۶ذAxZ9'i9+,($ ^^~KdڻӽCW~p)+9KEN\-+Zog}a_u~8\aSS8974׏ #O?2Nڗf4Pzi 4-VdmWdž5{۾c#mx"c,7Q) *"K1bE@u^`C L5ߋki'et((o<0U\ }Y A߳'{D/?biA 3o7Ig.|*|P޴rݵcŲ毴GAƀ^T,af]4;׌ʵe~C﫣ap>q(|3ЛNvמoi9UF/Y22=2I f[ (4,':+YOrZ{'abq|ph^WWST#6Sp3Z۾nqA7/"CIYQZKc a;UiO8(-Br6rv}|u˻'m)$j)] ,5~˴~(Uy$ )o5njkyC^XE7Hkr)`ŷgڎVNib_a%MdD2Iн0qQ[.Ѝ9/Z9,o^>}}}9 u) 9Nb-X= r"lY\A}(d21|?}yv~O5(F]/c_󮚹W$Qn$t{?H6ϱ}}vӾ},^|Y ?0@꙳Sz4%-n$YP>Հ)]`X,O}A8꟰ 7>gM=7l 2nDw+힆 I"kE@HSieA)7A3;Hs`L}W8ـL ?XB?gpQe3O-fܼc[X`8&@K&FCds>|T?g(Ez\"%։OuBp< IDATώA'gӋ!JIȸw| >A=\O,WxMC:Arԯ B;+2 Z ]Ρ=3ܭ_WP3eRlʷ:y҈_)É~\ ʿzICI'iGK=ʘ7>n5q[O&x> pҧBZBWm+=r1KkW;Ve#'%O ҋV Z!xҚ|^ 8GSZX냴C+XO^x ]2'/*VZۺ,>۾aj|}ƈJ[2R|1=FtusQ!RbW#&ŵ&8;n~xL{ɥG*'\ДO5ay7wo<]{iƁN_'vu'=$gDr@g4#᯻Gз^_1@?f!ߖiK%{\}6|ew_|Ο='v c~p 2:*(q"5Hv,a4!ևGI^xD>d[HRhkښ,HxT?cLѾ7ȲtTLp; /<7ڧ+FJakOVMN,  c.SpLrg[33+YuRfT഼xēRCup3o X*puցnBZLGs3{OS,Cn;AE+S%}f("ܖ0^`)O>P[ Q}N;|| ;os R(T,q-P7Yҗ.2d\ mC;p&z'')}94w4fV[ FFEw2aq)}H%r,x9T8bO"̻\ynnȞ_K%:Lo>|ϽɄ{0>8N^{oX0`xEp,47>K 40vcsÐ#ȀOf ).BgɎu1Oolɔ<5x퓟ƢQ/'8rF&//0_oqHF+ꑅWVSEw [V[f'(&l7i@h`$@iݳs֏*Ef%H_s+R)Y! Y` vlPc-O9ph@v}mJ.l(GwY8'?2Ľ~B e Nk 3\z!P^3]&F> Q C>_"H WI) ~[xI9risxJߜk8@^W3F%$ٟr(T)x:`jszmP<# J[3 }(ةM({]/`K`޹f|NۢbYprVO~!5ղ֡L&qm(3tbӀH4uP  8Y0}blPK5Rh"M;S'd&t;g<-oڵ}cY> 9|)FA#,0;qWE,t iڤפ?J,_.]803}.4!8,]?d%"|a$,=53 6X֔9u)[;p4D }QR-/b# Y"0s@/|=W̽2ijޅz]Ls|Ea xàA>̫nW)O[ E8l .5[vfpYg:8)Zc0z0fzpYӺcV8Ŵ@p_MO_1Y4ٓ)&)ӿ⨷Ӭ?Xrvhi 瘮Q ݻLKT p }uB슀1kKFʴkƧ7 hEa4 "I?-r5t+z_Fb=g?`2r#u\3ACxqa(&F&kNz.\\EsD8>wl9 )^3-}smR-< (~lZB/nWDP *,\8 Ц=ps*{ǯ w93pvE}m} nCqkoAc#<mׅr*%Whq D 9[(0tXsfD,)ҦT: u [Yb`z;BYC$[gOk5Y\X8~:X7 \SԤɓ"Gkn3")o#?{/5p2R~ ʰKwuY> ғvtS;:ʿ8y.="q{;k=>Pa"B@Qu) p@#`.\&HfW=GD?)`jASUu v xJjXge+i*Fd4Z?= P DsʍTؓɐǩ);yQhy&iʢ;Z@*k}S5{h*K/BC 5KVu-_<~ Y*J3YZGV?vf@kD2C.idgbM1ý%!) *_/)05R'TK+j'Ee>< c埩}<0zܺ ̯vyg9b;:V2|G%HxOo0uo/ F#kbMCxac51Z_ٿ`مHY5=G=dAC)WMv$ױϾz-Z;!}.].>q,Bn31SQ@U6i%xO`Gtԭ`]8/҅V/ZO됶W]cA?f!a =pB_ApKgʏ[fImFP~q<`Udh^yh#@/<Ҏٍ}޻㦘LoV1-phwW0jd¯ 7U,-s6*Sy ߒqڛkf lb=~Y ]2[!ό}àO/.X2=?g-WyjZ, kB/ MqD+4}<%ݘ:R'۱:lwAEVģ H7TP9>)r`xz '&Bt,[Jf!y5g)mipT$@p#n`2̧LJ/5N閕 sW+yP'hЦ{'9ڧ>q3)s'SF@Vwh>u~nsg\K2svE*P~ _.쮨ppG_Xil_.;$!K[q=;L#u,7 f@3$hphZdX6zg}=ڌ>GGF,xlEau㴂WD76nZ?,ΎMimA(\1i]0ҜEk^/{Q/_^dG3AN̓:o]b*C`^^j:\+dN4ZL2H6$fMƀ\"Sa%eXl%P wp#f*Bcoqz320( ^!؊\)X^=[f/E /Ije/X=|,N56wZ9 m LE[4jLsW)y V lΨsۈ7?!$+ P:pD0kuCZkv P!ߗIBU&Oz]#(Ԑk[a ?a"&~LPݏ4l'e:}Xρ9І AԞ$2}ӪίXWʑwYy*jC{굱ZLADg=q^j_܌f@0x  l}-uL@rڣqb]ȚJ0dBu7hFƄ)Gf>gʠDY]+lYg<> %C;4A&?YѲY/Ƥc|~Pw=ؓ*uI+K3pN::g@ڥjZ6ZGM˧~ʶ8B~c0ΘTvH{-s5 ]0Z&OB%,upb(g-CBPT1;UBu1xJ{i}) 7?6=`g YihIn xy ƕLqy>J*ؙ!Sœ’`<73}XX4-ylq5D\F;ڣc7w9b5Jr:d 8 Sf~ iqӗ 3[F;z L_3:J qcwv9W5 n =G"̞*h!@Ly]#9yo,#O=vNZ:cQ6i5~:_) 2[gQkwb9 "ݗa3_?_+BN1 ?!;¤&$Myo fԚ?Y/^τt rxrt$J?d?Ys2Ijԁ5Rf%2\$ ?.OA")HJZ:UR.& qM4Jil]3cY6kQj^dX2b\(-V}e=\˷̀ 2&`S/3GP28iuK#06&z΁ᕘ ^S5u%Z .!t MyݵzQw-#6@ IDATi2vf]/"#._Ppl^>Ӓ⸿/~ (c"ubQhz#4}b!7Ԗd4]'` nl'])9 tBuwvS"9gX~!}-Z'x`Ȼ=zQ?GƸ&U-#!dq̹dҒN2g y> ryY x6E=4碑ў*7b|=` :g~٢f,|e`ڡvR+s`i+㻖 ˶R=ݯh0jһ\wZnIi h̗C\VDA ޮ1@\ZAQPw#AA:lYcw2||pV=ƜP(նL~v$5ZLSu@ 0tfC2+ VC3r8G!jRggmg~$Q:GްX? azfQ\}Sߙu#]rS-Kv&M!֝|Hl''|oOp"Uxs8+3Zh5*2̤_c, G6uőa:Jcp@kMfRC^|mI0 -ZO/u{yo‘7i_ yz3}pi|- Ggw5 Rpf٩&sbI:R.jC}<MẆ@HڌEw|:.wByJ$׵Z68B܉&m4##ϱZGD V9rnW֭(lP@%1̂P$zg fVsHIQ}e/ZXuZ"aWF(FNu2JcDuXcL?̌18Co$ni҆zX:L0L}h;fQߓk>>+l>0ażo=r״v [ji8^_.Μ>Ys O AQmUbJWoF|I`5}c0?f30SA11_뻛g\hPϩ**([uV8X :LUyC#iNX I<nieU#1U+; 艈$lo=[p5=wNېO}u/CZ7,LN;sZk1T W65Gu9 OY4}.$٨EhlEzGp·¥.˻%Xꀈ ߃L mj JX`x,.nl}O1޺n8ۿc~/_:PuA0::{ee8zNs:z~- '. ?} f!w3nył42/_w HYh(P} @hs\N9rS}r_D^sXG-ԃ&S5f,;8ȱac3 [Д8^Ҙ@GC˚Џ*`K^~ 䭖,0hXiSWȳT2- 8]~w:ݱAߣevЩ{淧f=r-:W+o\aWa"Or\P Cԛ~c{_X!oZ#ΔdP"]V/\nΜ7s|c aד8zj_' ODOH=m"p`() Z M&Нȴ8ڸ_$N]LEUM4d2vjMfqq@ *^1C, }j1( O5UXjUϮT4P V{@̅t-^"(@8_m[*(LXP_8vż Mf۠l1N1ݶYK!x(̸`BZeFs"揸YGNO.ROVIAZ22hnjQd[Z"FdI ?$uӂa"B!(=h j80/)Y-#=\_Ci!xF}ȘRfr[g; 79#H w4S1tpʹiӟyFB4hk „aVq(B)-^a{.@Tg"/B[5`3/DuVHoAAB'Z?a$.Ԥa克s {9&*0Fs e p/'*B|OLe>yYB,BuTPǬu h}! w`7 xʐ蘩ͻZPBO~'gϰGC,&UxA G] G{qP1ữbzSO0Ir]W \‡Cky&9!ACfPz̓#ht aܮWv82-!yp ^X@MSt ;ʂKNT 9\|DhERW0D ^-\0ͪr)#d@!}lUVЈ}e|ۡ59Ť,МNtscpEpJ/K>|]sx'HS V \OF9W(o{KtkhU28~Z*4&5 f9DI5Ί%ZKڞc#Iqs5934'wTBGAFu?A~Β;9'1m\˗˜w'"~\aľdǿ,zD7h3\-D]s:ut ԋ6޾!u,z dv, Sy_3CC9V8aЉ{A9J3 kЎ7L;[cMyn; ~jљȘ߁6)1ٺh+,pGiQo>:|)GzDnK,?;hFsoQpԼ&xd Nӳ0lBK j >W6AY|ڑsgzLL5`W uÞc* 1^maƶCrf`Za1ԍdֶ3>@LX<{w*^.8fM͍'͋aKg*NMrl5 %%:;=.tpq 9 Q,*tڸ^MMFuA"X^v*<|au#\sL 8qۅZ;Z[VP) f)O+QD5A!6k1/WG kZv[@C %)`ے ʌu3)tڟ=nu^.5ϸl1} g/*t@ՂzTTM?o*kɋJE:0aZX{'1ږE 7g{[}߻ܳ 6 `ZJxϸ&y"uHZyV^Wn\1ͼk턥[3x9F`X3s1suf<\<{tjWK7ʑԜs p3 Md ѹe:Іz/Pk,' ;0rФm==c=yhҩYw~ʦNTu 2 Cl 0;^]99K'͛Ey=|q4KLzh"-lc?h>O.Ka߼!%C#oy^ҍ:A XjWvM1½4> ~'uZ=LUW2{݁?,dKpl$Ea:dqsEQ{O(ʨLB {NQ})( 14@?>qL $ޫ7Pq|^Gd2. W3=S!OM10i6+Jc^ro-iNQđ:lƮ@"qhۛ3hIu1oT;ӂ3ekF\W^un_gc!Hkϊv吇!eH{WCOgۮg'@ok>Z_kp=/MeSaܿ@ˏC):?j#q8;dS8q +\H~pJwƷ)rWЫgu,~Ow c ~Iʯ]仙2bQՁFx?֢O e:L绫'u`èo?=d)Q@!;[= Sε.^BڠK3L O3k1zΔ0l2ۮB(x`sa.qiWqOрGG|߾2k 1=0e%_~M{ :B $`j88N1iϨڝn.(ܻиMA=[| M78?f\wAtڢ~U<,# ]myOy:!t;(͝P 7ly N{RȞon2Ya k«:cR6 1ո7Пk1K4ӶcǷ, lY' 8@A.ppr LKNZLњNp(ӦmV-Լ"Q<;`ͰP/4ԏsU|%8Y?.c0! O>SשPv<)Z&u/ڎhfE1gSꤶKIdWa_ˊF-VBC. _mgjlɝ6W jTk+Ld$)PN3a}H6ѧZk'?N6NJ~A}lb"SNeoS{) KM0, iI5<8AM=RN&'(lq`Y > [w2ׯ_ ~:|??<#lٰ嘝L{ @ ۅCq@c[=] fbMbT~mj0v5C,f>C'ؕ 8^O4wKB7 IDAT5V7r ?clئi9a_fa6aꊱ@km^8H0? a{Hߐ 1et[;m0E>Z ǯ046qzV.qy8t 9  Xw[\;ə5,L.qt 1}o t8 .WX$:z؏!)HPf6-NsEꯣ! F& F+wͩ`YqX%(0d%@Cg|||+T>VXgvo7CGuo53.78IS}1#O :A>B 2`Y##H# gVxrEbO^zOf9NБk/#G^aɾ1*rxor_aWr>|*4p5f>`i΀cN7hO4u2M|2.e g0K>ȤBu`:g_/Y!!8Kz٬~ڮ4|e@2O/v  BEA8Mƛ5Z,Rsݔ > 70/]2j=p#"MYpiV3e p|>QkIR\LXx3p. $RA+ FqÔIg\ci2D? X\Ob֦6>c{x_?5g_K?8/ی],JO%'p[D0Vxp!!LA9=tNܐI`!Bǘ# [>ߙ]b'#kϻړSo=~v |?V@9S`@"F.r=n}-C]b[r?6kI5"s̓=gͷG;T[,,*$_zLih3@u ᷀{ʫ^;C֧FX1 n67bv28wW6񢽺@)G"ϽP&q iͫ w\]@O4`c}{%;r5U~)1gw 2!& D# G%4\ʡ7X5@Xx ;h fv{-=OY@ ~N~7=dbHnJ ~Gm@{|u}Qs"~@K1;. _ x#PߝJ2hp,':p>8&Hލ^#BԴR$]aQ( 6)<<{ '*g_L..򐵹Ϣ5GeΚle%Sj*W3S3sرC 8jN_{PZ +8}@jCL ⒠gY 5ĵuNSP62[mmdmgpha|| u}>>nk59[{.yRe$7cE e@X* 3^IDjD5.z wkctK[ҏ/kʇh-G`Aw&ג~7`ubmTpSIb%%GZ:|, ={HVMQW#Ώ\9cmڇ:Ӷ-vl SE5l[cQ[[⿐$a.2ʜ0N8k|6 5{/"/\-؜cV1MS5% N={rqF T@8k (ׁo_`Vppjjz0qkpNm.l![.ꆠ& Ġ Ԋ}!]q4z'pG]2A.ԩ/B饲}eK_,o$g;g?)l~@4Js5+J[ayS9 sx]BKTxM*ji 35z |Qt(Çe<0.xST28G=eV'n#xDia uC0C3SNf8 o2! ϳxΖ}`(QZtS;v5T aq&1R d4k'sf >P |_1ġ)nhXK:g.b8 !7~fj_%`7fj)[1-3|2R5Av/ ;NtcH$[k19U@xXROnlq }!S7hX?/E/&?#El)x5Ρu@wpZC^|jC9ˢڹ뮴z׽fu- d7(4Z ,0pt٘& +gwWnᲸPH%ՠyG#)I fLe[SSDub2B @NkTr~Y%nv/04jۺRÏ,GUU]9*:mZ iLutGAuA$+b)0Ъ[7Y@mM 2cܴ|-ևE~+PMII( EYQZ @9olХ#KH<7 wTQoO( Q^XA}\,f Xhevh;` fc2PZLe?wc.qAl5[_29]3A+6kIҮk4P L{9n134l{f>6j;_QO47/YZmX ?ㇰ8.DRpl[i|>}ݻxY3O.?hlW_=G# ?du|@v@]4R c`#`=zjRKA]~lҐGcfEo;v.FK/cXh[B f?()~Y*̧6 \( S ?qBK։ъ|sqm -P;wE8VG-;S Zj/bǠ3cbgƃR:CNBз{؝ZJoߴ4z_gJi䯭ck ;hxLQ”PLhlgUSR,Ǹ8ߵe\`sL ..c 0aj\6_9e*@\S>qݍn=Zf7hv/!gp@T@fbg= 10%M|ν 垶fvI\>lil|(ApߑdDs69Ҭ3 JK%BRO+C*֏UI,YނgVr/ 8,󦲏ܚz9dk|MvF{,GiC)ض#>$!%H(xFYٱh~GH|oJ+AQMgLݿFցvUgұ#'J+ZgEtz }) y qy} N|h2[Xz<. dxfy,rg;+47,zN KV}E}hlXhs@v؝{.&%Ic/Xb-|vguwrlР>28 r:0>!+v|J;J#Sʎ4c+f/Kk% X@Z$d',f iQ3CJNVKCCz>< _u+`Vfӏ' Um ~% 8 ٨eջw8@7lS䀺%)Sa]~Ý2:.gRkic[w̔A 򼟒V/w5A'Fr;e\P+(׀08Ervy'8޲0 d&GG -5?|ApVtk]!W?sP&5F8y\KgCiIãli{c} ]IAodd``~&۹@k(' ۦ0Fi{B:`bZHD|(LSx,$WUzS3D}*Cl0GǴWxQ]W1'SjW?a=lxqDteBGg5f@! M?hOŔWuS4P( \ xvF`:>U,gYCLT{h(@n6m5F\ BG}aEru\N3; :Z:>Etxhrfif XЎ*N~3zlm+]ѥ M ~[6ri %Mc#` p[є)Tp[ ~L /"V]G}xGƇQv iŸdY? ցjt jYqbZ1Lw*/^ 6,sfx^pES\ d ku[5{ghaXz4Ek婡.5?aXؐg˘]mO\?abOOq0f nj;AqH@YO vqPX1yQ==?ӣ,^ʶiI9EmSY?MDRŜ7eYoa/u7*/s^J'MMF4 Rc$ iw'/ܽ3FVރ^ 4v94@)Հʜ_𴻗O\7)ܶ,ګ# y-6C M }0G&!}L\Ӿ߈u q“c ~)oy\}y ߸ʟ~kB g( +K{+̵mo==z~Q yn·h OOpY Nx{@W csLׂ_`&σ3 Ƭg8^mд\}N}Wg[4\uj?5r / ,%l3驏ڠ`C>?a\km9So_c; ><~jE~֟ucۛw^?) qhg.Ҝ4RA9, M-8L@95 )' c>鎴ߠ\ FyP1лMϔbm%#,gApv^:?ۗ8@@ԳIhYjr -hb`7'H Zcf8_R @"@_`qf.llYXn"` y(<֘}|*Mj0rY% d?|yy H ;ȭ8Hõ}wM\~<ѿ5S~ͽ [x2qdR2H9'-NQ=c0[GDa)I<[r`ИWх 9[0 39u4< g. 4ah$IOY%*yF!ci| q9}6LgkzM 2U*b) <g}.E=p4RSs>9nd9IE#}KG8.M-5`۝5 ^;#b,fNULZTU?eqlߺAIQm@ ϟF71Ǩ4]7Nv}~G 32˧@Tʀ9;\xF&0M)`G7<ͽ}h֦Ws2O-_lyh6x,ØK; fVl6ڬ.Xy@%n3Щd:ŐoybIDAT!i9gMF 4|>h㯮oFߒea`sς7hɘ)(+GG@z: IC4 Αϼx+Μ#L0ym@5;+];잷u<[#]O) 54 %sլE4dxlL>ڼ8@4+ D1w+qp8֫v'(:+ BrRv⭻ >0Jsx횀wT dCNc 'iMoʓ Z%`NBs.Gp@:[O4ae2s@@S0*apXTZjr;{ҋv r{1k ut|cLHJ38$m6K6Цi>$;T3NH"U4!K@<#X#K2Z !A9S|rA6"~-XNEs!cPF*jSW Maכ@r׏IS drB9G%F_ 6}nbojmP\ya O$f)Êhhm34ރu u]AuoʧVAȦO;W恴ٿ뢴MH ]ZvyOTթ?@UOL^$3%)a0V45AMon1mkR ˇXModr; ׀)xL\&{e _,\7H { _A#Wwh`bNm@}^@6!uyQ*BPw 9BOR<"TN=Kώ?3FɎZw$%a h>N2JxE[a^?b$OnAFuB򔜺8LPؿ;H.'# pc)ጷ*SQ>1_?ۦ??E8@/(\!Ь.unhb+9/u๗iBsqV㽫Q1wH[|a+M6"t>[rB@s5+~z HFNᮣN;P,ft1B'{[j͏^S]z4☶KO;*pƳlݍ` K4{#B?c>̡K c\><}ZS@/( :?eec^6G+٧p2cߒ\[\u͆0.fh,<tÓ ր-pgdͨSviV q/gh '.Ce\C'EZM(~i]XSި!- % 0fA̟@L׀a .d`Ħ M @[6@C4=yO)FrM4K|A qv qC0wC)9CKEH$W{$\xz4;C#T~ҕBlBD ܥX?C+rOO_ @caRz;`̝9 f<^gi=G' WW@Xn 9PWIo'u:[eV@'8^8u6zZE磖Bş<@6xWtEM'X%u-zJ! _XD\&+Eii:l?8K0EƋ[8Ix9·(iC6*窠"NwR͏7boU?}ϸsM>wXߚNd!cE '~qo PDd׻s~>aMw=]'"; ny Y߫WߒYәׯ yw#A޹U3u/X_zXuE}A/21&~ .r ֌5φIr{7q#*|֦XncM߱'Mj|  _Fgperaԩ㵂X~|e7;hz$a}vuzSU<Y7o voyKbo|vg1ϫG_<$VA˞?H^A/5蘝=rw" ;^v$Ff߀ Wpv M[v X ï "I! [2W@!@(lla:5J^(Y$M/>Ը *bڂq h:[1z>h1_?B[qA2s>{5,hZ t@!At|p 1oY_p;oCpWZe.|7ShK XoNݦv3/ ޭ C 7kJFu[Z~Ǟ.xtp~4~v/aOcvDT PtT~öOi P ~(@JY e&.=caJ;Phfʾ}m]6 Akc{䞾"Yׁs42JGǏC4}P> HQG1]Y/38,1;MxG+9.y P5]:$z7/ /q{#Nw,TتWkŖl@@P.vHnXc^o5hsVgX)?9ƪ`0b<!R*Ȋ~PMlN)ŇN> y6C#}&kasi>Yz ) x7-=M#D{蒹܄6!+jPh-+mv]6:r 5BE!+'$1Ww5iuC[')ӟ*\[)5Jdyj!3l`}xD=e8TH`Smlܮkf|ΥkE5x857u;S"!̣=8Y&ܼ'ga|'k4o],;{o\o mk"R-QNڕI χmiV P>N(]~~xxp$l<,O$?n4YOAp86^c7?ty"p&yhOMqcDg sGLs$]hMœ3)XH0y]^f Dyڹպ=X)ķO6mY?r흋n0 Eu6KR6]'@X㡑EJtn]<6zޞ8j-};qtͫZ]}!XNDT>VC?z]" g+Ʉ!suiڝ*v(r2H裼~PWtυ+ͷdֳH}_S/tn0#ϫ?Qw1ӇKF4uؤƤO_}G`݃a[nxDӖBGdsP)=Vp/݉kҹFm{+QZ\J&]dؔIxTsYFwT} U/yd'Օ[i*\}!zA׳ӑVRq]<>ISG{i<\8q0٨Dr: vvK!RUm\/Eta^QC6~Ϊ4Ϩ~}nE)[fDժgxؚ#u[H86;|8ˎF`{c!v8˷^ɦkk^%FB{Q^>ZmTW1F\ \"ٮ[a0ؚͅy0x@f @&r -l1  0 L @[ b$ @` LʶѠ](J˓ޛv]iÝ͔ˣsnۯ77{}Z}Ђ|;*-Izվú؃}yrq}4#Rkʃʷ髯ŋ}zK>Yp۩ĭNj}޼j/]l׭ˇ}ŲueiĨ˴ʱƋ}ȸĵ ⪴҇ ޷ ſ|9?<BB< MB<Յ ɺضA>ӁC@wHClyrJ@:!aN@u'1zN@E&  : .r|R@6  TR0EMȂv~N@m=JNZ|~A@tKM+>MG~[M<˴E@[p:6qg_LOHDsR@뾅xeWirrhNL_d쌃R@UcVp~\VoJ@irdSqznLXɷN@Ġuw}jrvxa棊V@`ah~det{V@ؓhkhzâ}J@痘}zTz}A@^xtᄝA@d~}N@Ot|xzpo{R@Se]ijdaYE@}jIISFdA@ۗk;'AkE@rfdo4 HT}y}R@f84IRw{R@༖oL$DOfyx{N@aSPmwsR@󼖌~| wN?Ӏ 給ʌCB؂ق ɧ޹CHHJOJOZ_ZOHF ,!!,!́ˀ̅ ˾ѩʁyz#¿tGBicTNi): _eqa-v'1u|Y-H(  ,-OY16 @@.?KȂTYxlk-l7;F}|pR|][\^q uGp9$0=;qjG>6pؿ׷%`P**ZkTJ7;78Nk_t{yrnc1xUG?S]b]@;CJqaZkhhie_5Qo\D@SkfC?In˱ε%mAKC8UVG5=)uRPYaEFIRD߇gc]5]>OPpcJDGS}`b`Wy^5reO]SDS}doi[cd|)益\iUR1YYf Wyrp`]JeQke ggyig^XLYfc]ton}-P\XUYRKGZ]feaa_^1QfH?EGB@9uƷ%xqbI/071@g ufWN4.Embt%W?7>7>7>7>7>7>7>7>7>7>7>7>7>7>7>7>7>7>7>7>7>7>7>7>7>8@*1#1000000000000000000000000001$it32|xm {  ăѿ „ٺӾ„ ¨„װƻø ڲҶ„&ᭊ ̬֯„&xis|lpr^հä„%ʻǿݾtMKfo_RHOJSyszհټ„+Ҭ͵K6;VH;1896HPNw հΫ„)ߡS0,36)$&-+-44Ibkv ծ޼„0uo\S1&(&! "#'8FMc ժа„1relYF:/##!&/=c װƣ„*uJ@5+$ ,6K^nr ޼״„©a4!  & /?Rgv 㿙Ƣ„2٦~l`@  !0>JVcw ŝճ„2ʠyePA*  "'/6?Ph ͧ߹„̵ɹ]A,   $.;Kq ض㺘„޺~ypaJ5   -Ef ߽俟„5۸{`YPA?;,  $>g 㽖ຠ„7׭g]QD4-25&  (=QP2 )9_ ơ۳„䴆oYKC<1&$& ! &*2AYyfmL )9Y~ͧӭ„<׻kPCA3# !),(,?\g8  /?Ssײ޸„;vliXA89(!0/)#'FiD31$+;Xfx⼱„㼨cMG>0-& #',-.-!(ExA2; !'5BQn+Φ¶„<˫[I=1&"'  "*+17?9%4dȽ}<:* =S`gV2$1F`+ݽ¿„;yL7)$    ')%*.)$)"+ZИLOdvX7MlѰ„;͓^<,!#$   %#!"% (#-Jvż۫YRsȦ„;zN6( &'!#?ME% -88% !5P|ϻxb ĥ„;ךuP2##!!Kb48;! $8H8 2^ľu Ŧ„;ѕnS<-" [ɃFTfE  *.%&:hÿkRx θ„<۠yeV;&%oɽzL^kC'*'*.,!&7Z¿A%6_ Ų „<׬|\;'&pܦXCOP@7AMLQMD>:41ɞwX:,_Ќ{s]^_I98Ip|}uYnξG:Pr̭߀„?˜kI28ե}faz}E%*U}^fy޳„@֨wP9$A޽}coq]3'2Zɯpg| ȤµʀT„ѕdJ:/&eҽiX`WG:>I[ܽwmqx}§twqemy٪ƤZ„ڞdJBBLU޿mgo_OKS[_ʭzwyď{ndwsРʤR„輍i]q߷v[]kggٷǿƿtsϬ~lYm}l׳֬O„弘ɬux׳ʸt\ϼzhjqsʨ⽙L„ˤо{Ǻ̠xyulxâ„9Yáusɳоfxy˩ؼ„7ʖI4̸ɾaeʬ̐fxԺO„םY/*ĺΨsX\ݷׯ͍n~ռƀŀ„9xcA[Ф~ij|Ĕާ|~nѿƹ„8ǗB 8̭~פұ志„7ߺȑU?=ٻǽg„7׭qr}ϲvðɺtcz ȼ„7ټcijh„4߼Ѻtnt{±\^y շ„6Ӱyhep| ~lel۷„6٭~qhn²w޾„4ݤǺ|s{ʽɰ„3˝̽ʴ°z|ϟ!Ѯ„1½ǿþʏŷ ຮ„3Ƶ¥̲ӯ⼰⼮„8ȼxt¼׿ŲyĊĦͭ„8df˼Ͷ}ӥϱ„8u`z^xŚ߸„8¨yַrtƺka|Ʈ›#ƶ„4˶ޑwxm|„7~}qrΙxuͷ„3²Ćn\Jc仑uuyȣű„4Ŧ}j==n¢ϩӹ„6ĸݲ{z^;Yxڸӵ„1ÅfȇyTVx ȧѴ„2ֽqN}tv~e^s Ϊȥ„-XAlsy{qkhi ѩ „-㱌eCGxsyuv ײ Ѯ „2ޮsH?h߾ݹ „1Ԣf;V˶˜ʧ „1ȻŏZBlt+Ϊڱ„1ŪtGU~|+ġ껠„1ؾzSArͺ{ڹƮ„0߱sEPz~Ǿ„1ћ}gegB]zٲ„,ƅYID1V}zxv~֭„$uD,"P}qk ܹ„ϣY-'`|nw}z}}uo}}⿘„2˽a55wmitqknqpl{u~ss|ɦ„2ƲX3Kyfofeifp||xx{ztkqwpwi ϫ„3ħY5Z~p^OVS`sjqmknpdvyozlenѪȻ„2̹S;myk]U[\_alrsslkwvhb`nkijokdggx Ѩ„2̲sE=wxtnprj^as|zmjjgfgaXac`c_^bimn Ч„3ѾsT8:tkkaXRYijc^[d_`^cmnc]X`mu~} Ч „3DZlH6D{smihdQDCV]UViskka]lkZQ^hsyЫ „2ɫhXcrnuhcXRLMSVMYmyrgZfZOZdqv ־ „/׷vjcd\UHIP^gkjfHEALarbx „2ӝq_]^Z96I_dfeN/(;Rfxiq Ԁ „0ҥxqogI&!.=IKB/*&4Xr|x̼õ„/pGJ< !#'&)13HbwsoӺ„-̑e %*7JGAMiszzŻͰ„.Ιx 'KOXafpwn~˦ͬ„,xkflojgjgehjfbek$#.7BBCRcqsf۲#ã„5΍{naca^gmsopoilJ%(39BIELZ`puk-ϣԲ„(ᩏqnrxzxpg\6 +5FMILW a]děͺ⿛„9֒rtqlgL)",8NOMYZ^glpœήϫ„<מnjgnoQ(#09HUYhgfm~›Ү„>ƛzwqW1"/?Q]_YgjawԮ̪„>޳{ki`D$%4>M[jj\bhjrŞԮҫ„>zrcJ4'1CKPYlmY`nt{̧ӫҬ„4ٱrL6.7HRYbqr_fr}ڀѪөVԯ„ǫd919DNZkuniqvwDZٸرWհ„»L549IXgqruvio|wɿམXΨ„Ӻ´ƹ~XC:?S_djkicq|㾖ĝ弩„!ɻ¶ϨǷpXPRU_j},ĜТͰ„;ĻϽ׵ƼjZQYn~,Ыڭδ„@ʹ¡ʦöɾzms,ݼʶŻ„;;ųĽƽȡ„;Ӵµ͹Żظ„:ҳþʵªƱ¹Ӹ„5ĢҼϪij Ӹ„0ϷԼƖô Ӹ„"ԿùͿ ª„%Ѽ „ʺ „ͽ „ ằӆ ҮUf||uHCGBCBFCC$CDEGEDB?BE G=FF GEFF IGFF ڰ ἥ IFFF {޸IGFF џuwnȜsx~IGFFΦ ćjlnܶrw~vx}IGFF%٠|~꾃f{mo~հ~bxzutpzIGFF&iWbyo_cdR|齃e}rms̡sd|}niIGFF*ò·׹k>;V`RG>D=Hnhp齃euix–ghxkIGFF+ˡìA,0L?1)/1-@IEm齃e~v۰}^w|mIGFF)ږw}K($+." %$%..@Y`k 鼂dʖde|oIGFF0f{cOH* !1>CX }`}හbr|pIGFF1߷cT]M;1(!'4Y `{~~Ѥqb~~qIGFF2g;3+$  %.ATadz ɗdv|律`snyIGFF2ؾT*   $0BXj ӜcrզqfnoIGFF2ӜtoZN5   $1>JVi ؤik|漈fxrrIGFFɘvhR?3"    $*2C[ xdu̓evuuIGFFūzqO7%  %0?f e{pҕexvvIGFFܲ~orkaS>.   %85-"" " "+17QaPCN5 !/Mqxc~mn|~ypIGFF<̮rX@66+  &1=TicisI( %4Fa|꾉_w{lpˍ}zpIGFFðd\YI4.0"" $!!1D`lqZ*"  /GUkϜdj|qptДzqIGFF;߲tWA:3%$ ! "#0RyV$"+ )3Dc+x[wyqpyzrIGFF<ĞwOA7*!!   "&*31"*KqR+,!%9EH:#%9R{+Șdfytvz|IGFF;١j@-"      !!$Dib26FTs|v|{B(=]ߵ]m~IGFF;ÆQ/!"   %5Qw~gn}?AdҨw_qIGFF;lA*  !-4,  "*/" -?^r~RNp ɣv^nIGFF;ьdA&At~o; && ,>2 ,Nlx{{|iVa ɤxbhxIGFF;˅\C0)!H{J%0<( " "0Tq}ol`[daCEr ͱgcoxIGFF<ӓiVK6"^|}rE*7?'!!,Hpt`Z]daUSS&1Sў&qlkruyz{{z{~~IGFF*ϢoO1 `àhljR2(/1*'+./62+('&$,Yr_WWa_O3)/@m ԟy&³IGFF?㾒kL1$SMD@168+$%/FUQLMTU^P=RsaT^_I>O_M+&4[|7ܭ{{kIGFF?鿏_>(/øcEG;7IO,5Z]]aw{lmURpvojh[OIGJQ\S8AKa7ɆvnlǿǾIGFF>˚hC-5¦}KGF6DF89]bqzcT`e\WXafgebc]QWMCKJ?7KWT| ڨp~|krįTxIGFFŅR:-$X}NC83<4,()0=XzoQXbU:7=ENUPGAF_h[;B@9=KMDRp{ixkvq~~{}[umIGFFѐQ416@H}SC8:@:106=>Xz]NVjpZ[TICHC82:WijME?9QUEDO^ma}siyrm~RxpIGFF|SFa|qSMMFNG76BB>Yjsm[n{~}xfbYH<01YpbE=1@K>ZWf]lnjȽ_~OypIGFFⴊdSPNMXKDM_YI]pwbd|hbibJ=8)MsmOG8:AGzyիx_szjїcxLypIGFFɟrUPRPRX]nmVKfunqOtmL4.-9SIQx`Q`jbQ[ngcxy؞`yM{qIGFFÍB.wenqqvwqnM:>Vur_utTXvnEcjB(>CcmT_f`b^}ݻidx֝`xxuOttsu}~uIGFFВM%#|}|`?36Nos\~eV{f[sB2EYt_Zmunkrܽmm՝_yuuzIGFF9lV6Q~ZG@?Jao\tMo[<55;F98RpiU`myuç՝`|ۈſIGFF8Žs5-|`_YSNQbeoWabMABNIQmrNQbnt՜aIGFF8ޱE01ttnrrg[Q^tctoez~umffrU8Masy֝kIGFF7ХzdgjkjqrzqdVHYWjtsu|prqdB6Idt} ٧IGFF6ֶ~ziNWeine\W;:TijvwlmoissqoaY??Zfpv~IGFF2Ѣsbe\bms}yl^J@AHRamrWf{upXUZO24KXbir鼍IGFFΪlMMXerzxk`_M==LVpbiaUGEI;4:O`k{ĈxIGFF3乪lHTsvusopqywh`ZMHLoypwvs|wckkb^[HAKeoª̕{nIGFF6ΦfRuvsvuvmXKO`cer{o_q~zlOJZg~y}ߩ~nIGFF4粫akt}}}|aNLUhz||w|szcIYa+ਕ~zusw}m}IGFFд}h}kxveKOgy~XfUR]֞ |snq̏zkrIGFF5뿶~prrsmdTXn}qaprG_zsP[{ђ~yloӕ{osIGFF7ܸ|sydX`WCFWe{ko{su\BYh|XZuףszklzotIGFF5ι|ttbQPH9@Vbl{uxp`EK\czaXwusyhmpuIGFF3廯qhl`INp]AR_fpwvt~rR5EQe{|rUlۥeutl̋}pzIGFF5ױx[\XFBw˰ZO^bei}tnoly\|{}vxzwa_kfar`{rgr ඁ^y IGFF1ۦg<7a~zov}|̙atsfsɔen~ IGFF.Ι[0Oeuw+ןciqiwܫyfIGFF2ǷȽN6d~wixw}~y+{_zunoćeIGFF2ɾg9Gqq~u~u,Ӥnu}urvޗk{IGFFٻnE4ir}qtqi,ď}~wvuv{w|IGFF1ஏy~i;Fsspy~~sddݹ }yyyt{siIGFF.ϑq[[_;Swywttc{wglÈqwpIGFF/~QA=-O{~tr{|~nr{ekr|vn꽂`~wyIGFF$p<'!M}z|p}zg] u~ytkǒ`wtvIGFF3˜Q'$^vhrooyt|{qoyurx}jajfwvkfљaquoIGFF3ȹX-1vhcnkbhnmgsxmrtvzicqlwtgijڪuk~|{||pIGFF3ìwL*Fvbx~h^_fcjv}q}}srxttna`q{wdarbZ|hwqwxyx{IGFF3ͽzM+TwgVJSR\oyageghy|k\iwpebqsZQ]{h̓ìIGFF2dzuI2grcSNUVY[ekjicdq{ypbZU_[\bibVUSkziIGFF2Ūh=3lwokcfh`UYjswnca`^]_YLUXW[WUWZ[\ ylIGFF3̶hH/1ww{ujaaWQMO[[UQNXRSQU]^UQPXbgkgw {s IGFF3©^<-:{w}{jda`[LA9FMFFZeYYPN][ICT_fioqt  IGFF2£^N\{zlhnc\UPFAEJ@L]d^VMXK?KXdvpgr} 鿚 IGFF/ӱ|pd_`VK>AGTXWWX=;6?SetwVfv IGFF2Ƚї{~mYURM22EVUTVC'$3GVjz_dx÷ܱ IGFF0ѥtkbS:" )3?FQS_\Rz-rtvr~up㺆_u{nIGFF6㪍kfinpy|}n`XOF*#,:A>AOQNTMIm-٣etupwnЛfg{nIGFF4ؓtcd_WN4 (0BC@HMT[YTWU֠gu۱gzj}_x{nIGFF<٠x`WTXU;!+/9DGQQTX^baRj՟fu㷁f}mʛlm{nIGFF?ʞ~rk^ZWA' *3@HJCLLGX\XU[^~՞dr|軁e~nۮ{g{pIGFF?ดqb`UKIE7#.2DUWFJT_gqt|{|a}un|_~~nV漃jtuIGFFǢxhA(&(.7>LXSNVY[dce{Ïbywmˆ_xnW潃rtpIGFFܿ}[5+'*5=IUWX[OR_Zf~̘`vltϜhvn>v}vmIGFFظgk|l_L;20;DJPJS`het{|~|z}Қ_suithunU֖uynIGFFͶxlzoumOA@BABGP`ejlwuy|~{z|~,٣jhshumwnzoIGFF9Dzm|z{bQFFTbhjv~xs}|t{,_{umt{}nЯzoIGFF>̬|}|zubbopp}}y|t,Ȗamwoyo|zsIGFF8̭wu}sv}lyxt~w|}+کp_y|uyy~IGFF8Ϡ|u|irƱ~fd{~xIGFF8̜irpɷ ܹge{IGFF8Ըj| ٹfcwIGFF4ijsu^u ٹjeo~IGFF!ɭ}}Zn ~hgo{IGFF%Ļ'ͷ}rmms|~IGFF#&uolttuu}IGFF  ¯ HHGG HHFFܾFFEDFHGFFD*3DECDCED:$%$%$$!$ "#%##$!!kΓ h$&$# %%'%ɸ׼ '$'%ϙ} ٪ '$'% ڰqZh֥zlhr'$'% ƉTTMg⹅TU\_n'$'%̦Ǽ nI\KMiңrRT[TW]jy'$'%%՟{}|}hE_XLO^ɚbAU]XSPNY'$'%&ܤhWbvl]abOwhD^dZOKSr羉UCXcaYKGn'$'%&˾Ӵh>;U_RF>E=GlemhD^if^RGYޱ|IF`hdUIf'$'%+ɠ?*/J=1)/1.@GCjiD^iif[TsМa>TfgYLg'$'%)ؕu{J%"),$$%.,>V]f gC]iie[fFD^fXNj'$'%0ezaNG) .;AT b?\ih_Zw֣jBObYOk'$'%1ݶcV^N;/&%2V} l?XhfZ]ōS@[[Og'$'%2¿h>4+$ %,?R`by ETfcYi߭p?P^LY'$'%2ؾU+ !$0AWg ńEPd]^ȏSD[KN'$'%қtoZO5    $1=HTf ΍KJ`YjޫoFUOQ'$'%ǗvhTA2"    !&+1BZ ٛ[C\Tn{FSRT'$'%Ŭ{sQ8$  &0>e uEXOcEUQU'$'%۲rtmcVA/  &J@6=+  /MoכZB\[KLh\[dWOr'$'%ɩw^E98,  ! ",1=KIQX:" $3E`{n>TdXJOeqZdfWOr'$'%¬{c\]N812#" #!&0CMRC$  .FVj+ÅFHaeYONSgx]cifWOs'$'%߰oS?=7)'  #! "B8 $8R}+~EE]hhd^VRUYdijjkqxtneghiicYc'$'%;٠h>+!#    !"=VjfF&1>Ljqkrp;'>]բh=K`hihd`\Z[]_cghig``'$'%;ÅP0!$    !.C`oj[er~s:Cb ŒZ=N`hiihgfgfgie_q'$'%;kA*!!%+&   $%(7Seoz~qHOo事Z>K[figfu'$'%;ыdA& :hje[0  *8- &E`mp~}y|kfdRLa ߹]BGVafhihk'$'%;˅\B/(! ?uuf_<(2!  (Ie~vkgYVMGNL9Ds ߿xKCLV]aefgfeeh'$'%<ӑhUJ5#RxeaXU8%.6#'?d|s^JFGMLABC"0TƄ&ΰpULIOSVXYYXYZ\a'$'%?ϠmO1![PQN;% ')&!#%%*'$" +S}}zl\IJJDDLLA,(0@j Ȇ]X Ʊocjkllz'$'%?俑jL1$Oj622$(,##(5==79ABJ@4J~|tj]MBKL<5ERA'&2Yz7ҙ[XIb'$'%?^=(0oA.4-(7>#,FDCJ_`STBB_|wlg_XTRH<68@FMF18>Y7kT`LKiַɻ'$'%@ΝjC-5Y.01%35*-IJWpslcP@KPE@AKQSPLNK;=97;94/?IFm ДO[fYIQxూmg}VotyiW|'$'%ȉV>/$XmX4-&&-& !&)-Abtvxv\DDKA(%-8@D=4.4FLE-0103AD7B]`G_hcTIW~ِQ][\Z[horsr\sxsc_``abdhfa`_RLs'$'%ӓU849BIvW7/',/*&'-3.@lxsgMCFVYCGC926/%$-BOR9022EJ<;BMP?ZhhaPHZחTM`_\Z\]^bedba`RacfgfcUNr'$'%䴁XIdvJ668383&'03/Cju{uX`]L\cfel_KF:0.&$BTG02)5?0HGXn>Jaih^LIte>[hgfeghiihifWOr'$'%ⵍ]<79*A618FD:Hmv[bnPSvlvthSKMB/-.;UM47..67`bɔ\?QdifWHa~BUhiLfWOr'$'%Ɲ||^J;8;<>AGTN<:Pr|a[mbAc~u^A.'%/B60;+8\R6<;:3B\u滉R?Udh\Od·CUhiKfWOr'$'%ӺMnSBCEA=8&20A`F7CLG=ARܯ|IBUc\WΈAVhihebaMbeeXOn'$'%Ì?*lPCKOPRROM7,/@XZL^\AGbs_?aqV5"21NT9BF@CBZnԨyJBU^cʇAWhiheb^WSNRRT[[Sjߓ'$'%ҔN$ {wcTUZ\Z^UA/++;TYGeoLBey|YQq~nZ3&2CZB;KTMKM^lѪ~OMe{ɇAVhl}jXVXao'$'%9nW5Izi`d`\dS84339HSDewW:YzL0)*,1(&(6>IL`hehɆM'$'%7ӧ{fie|zdY^fYADLPYQF;1=7K\]Y[]m}s^QKTUH-)5FMQ]inp Γ|'$'%7ֵnp`RSQA+5AEE;9:(&7KLZgjg_QMLAJOTSA=--@GPU]n'$'%4ǎpmk[G;<46#'9@HO\o'$'%辏yu_C.+6BMOOWSG><0&&8@S^DF^O65.,4.)+9DNciW'$'%ݦxhG,5TQL MWXF?:035QYMPTK7BF@@A2-3INaͼ~~zXMs'$'%7wmG8Thd[VXPLOacTSK;03ACAKOWE5CRZYQH66?Fdݭvtg\W\bo֔][Ml'$'%ᢓ,w]BOhcbSZ^OXUZmc\fY?.*4EPIJIEKKQZ]_C4DGg+׍qkedd`ZVSRVezߤ]\\L_ݓ'$'%3Ƣ~xTG]d`^X]ZKYcclmmqlZK9$*>FTVXO7E`hka;@Ibu˅cfh"ihfc_XQLPltVc^JSٓ'$'%6氟txSL]PPQJC7=T_ely}ri_a^A7DU]X^M-DXgigT:F[iy[bhihe`VJNk{Yah`LRؓ'$'%7Ԥ~kMKSB:B;,.>M`ifoxr_U^oS8>JUNR<*=I[`gc?CYcy̎Q]gihdXIJkښY^giaMRؓ'$'%7¢xqqaLKOA252).ANS_kwqnk[_uaE>CPE<(2@DW[\^HE^ivXPcicVFNa\fii`NUٓ'$'%6۩qkWDBJA,5`S5ALOUZky}}m^b^R?=KG307GXY\fXBThwѐFSfihibQKinZeiih`O[ݓ'$'%8ʝzjgJ4:9*+gĪN>KJJO]wwpaT[eYD>?A`R.0@S[hm^GWhɈESgigc^]^bfhiig\PVsacig]Sm'$'%8ĞsdV>1,.;wqDCURU^jkcNGOejN939\00>Q`h\SanȆDQfihhd[TOOT[bgie]YahfhifZY'$'%8뵛}`RJ@;8@NVW[`qɆEMdihelxWJIN[eihfgihb\o'$'%7ܡugSGAMmVFWXcd_YWRHDFMI50",VצmH>;R`dxѓTF`hccϽjIFXeif]e'$'%7ޞqLKQZvTEKRZUOMHBLJC:PG=$4Sݯkqz۠^>Yf]a¦xGDXeihba}'$'%5Țu}ఖL>CMU[XV[TX[L=WeP6+3ZuAPdXfͦtEF[gid_s'$'%1]ټhRIWfhwjemaORPKTeaC,)5@| ȐXLaQdΣpCJaig`i'$'%.γjFouXWV^pmsyphaWVHI_[L?/,6GR ם^H_OX{ȓY>Teiiha`'$'%+辕xN6Y|j`ZTPaxuh_RTUIL\V:1047EK ߤ^A\SIX}布OF_iie]k '$'%2氀Y67l{ovze]sui\WVRadpeG77BB=Kpn?W_PFS~ ֢e=Vgg_^ '$'%2ܩi<1S|}h~alvj]X\YX`ndZRHNSPU_BQe^PES~zELce[g '$'%.ϛ\/Fqqnqpmrun]Vf[a\^caWALTNK+ˈEGag^OHXtҕ\E^`^'$'%ǸM3W}ysjdnjiosnjVkhTGNRVXMNRNK}+ٝ_?Xgg^SLN_|mE\[f'$'%2ʿk:Bkz}slhkfar|ederuOPdXNDTTNNIq,ƎPTeihbZSOUcr~ՁJ^Ym¯'$'%2۽qK6_~|gaghkqpke^goXKhhNBMKDHBu[ei!fa[USSU^gYaVct|e^'$'%%ᰒ}k?Eyxjfswlihmjfe]g`LL[^JfkWJD.$CsuwkppchZ^V\^]]ZZSHSRD<;9OTMVJEy@TgibQU'$'%3͜T-$RveZJOLL[VRT\ZVOHISPNQVE>C=MVOGFāBOdihghidQMx'$'%!ͺ[0-evPJRMCFLMGOXW^gbRHNREAICPNBHMДXIaihea^[X\_ XMp'$'%3ɲzQ*=n]I_dOD?FGOU]VKWWLKQOOH@?HSSA=QED ٠`G`iigeffmlfeaVQWYZY[_^'$'%3¢S+Ilrih\P@076?L^R@LWSMA;7><=BHB831Rݣ^Hahv'$'%ɮmD6^spqgUOJEIH>5==709:9>:7675; ݢ^Jds'$'%3ϺnK4/e|wl]RVVMA?7766==;;693527>A<827=BFA[ ޢ^Qv'$'%3ŬeA/6l}`\Tc[XKFA>;2-'01/3@B9>62=?4,58>DKFP ޢbi '$'%2ƧcQ^wt_ffugYKJM?<65.)+2,1;DB=5>5+39=LKCIZ ⭁ '$'%/ִllos~n`eg[LB>A71'+06678<++%,:DO\Q5DZ '$'%2ӊ_jzwcZki[H:446 "/9779.$1:G\bR5(!&++%!7CQ]UOHH} nljc^hi͈ejep'$'%/tjumaifgf_SPSF6$?9$"/@JCBMNJ٤tkd`^\WNGjߧwY\W]i'$'%-qcwwX]fWXYUUYBA  ..*1?AJIFCʆjfiigfbUKhțfJ[UPWds'$'%.}igc`VOVY]XKCTM|%.5946BKMCEXy`dgifYNl羊TF\[TSSR]'$'%/x\TLIPF?IJEDAHEu %-3>?<=HC>>v|UahifVS~ޭtCI_c_XLEm'$'%"mLIIC==>@:<=<78M *0452SԜTYgi hhieSOΚb>QdidTIj'$'%0cOED?7597577305cf%  #+'"*0530loL`i#hf`]_eeRL龈RD^igWKj'$'%5y_aL:731:<=31319*$%*.*/61;;1b۠TQdi$hecaVQ[cRNۧk?SfgWKj'$'%-ߙqb_JDFJJRTTB510,",/)*66/3/)R-ύFRfigfq{XN_TMtFEagXKj'$'%9Ѐa]e]aefk^L>>;50"#/.*13:=7326uɊGSghcgћcG]VHc֝`=UdXKj'$'%<щo}ufrmL84266+ $.2;9;<<><3WȈFSfe^nۤeD]YKa黂LJ`WJl'$'%>yxtbecPFE:881""*2451681=>76>GnɇDOd`[zfC]ZMcЙ^E^XNt'$'%>|xwdTSE::2,.1,#*29>=3479=;;=FBF_ΎMJ`YXfC]ZLdܢ`C[VV'$'%>Èy|shM?@>;643.+,'#,024?@36?EIS[[LGMV]j֚ZF]TQbB]ZLcߦbD\SW'$'%?⮁ue^XVVUQKPTJ@:1'&!$-46;FG9=EPV^_bigf^cw{ߤ`AZRM`>ZZLcTߪhH]PT'$'%ʙpwztnhoi^TH0#"$+28BKDAJLLTTUg|nxxuBVTLmn?V[LcT߫gP`QNy'$'%r`irrfXB,%"&/6@IJLPDERNUj}}wlzvrAS[KSuGT\LcڝWYdTJp'$'%<ݵmJTnukRMQG8.+2;?EEGAGV]Wcveimmpoemŀ?PbSGTw׍IR\Lc{RbfVLo'$'%<бYXqWOc}{iK;:;::@ERZ``g}sdjlonlmp,΍KF_aQGVuOU\Lc]_gfWLo'$'%7ʭscVsb[ax]LBAMTX[irtrqhekmkcix,۠b>Wg`RKUv\Z\La™d_fifWLq'$'%<ͧx|{fdmfn`_ft\Xb`_x|vztkhbgan,|BKch`UNY}dc]M]|hdgiieVQ}'$'%;̥~shdin_aocWbxƿzmh~}se^fiΒQ>Vehd]Y_gfg`SXlpehgihhicU]'$'%:Θ{zo}pkgjzsmV^uĬqeapwGBWeigffhiif_Y_effhih`Vj'$'%;˓srnYr~mkZYnİӧvHBWeigfghif_`'$'%5Үvpo|~vWmwmkdcl ϧwG@Ubgigei'$'%5ὧdmcy~qI`srnf`r ϧwKDL[dgihgp'$'%1ĥujvqgDWmngbh ЮbJFNX_dgihfes'$'%λ 'ٿbTLKOX_cdcdc^Z\k'$'% {gWNIQR[ps~'$'%²t~ '&%% &%&$tܱp$!#$&%'%$"*%#$#%"t8mk@1DEDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEE5O\ \o!EXZo[pZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZoZo[qRf(6!{ʿ- )>@??????????????????????????????????????????????????????????????????????????????????????????????????????????????????@>- ic08S PNG  IHDR\rfiCCPICC ProfilexTkPe:g >hndStCkWZ6!Hm\$~ًo:w> كo{ a"L"4M'S9'^qZ/USO^C+hMJ&G@Ӳylto߫c՚  5"Yi\t։15LsX g8ocግ#f45@ B:K@8i ΁'&.)@ry[:Vͦ#wQ?HBd(B acĪL"JitTy8;(Gx_^[%׎ŷQ麲uan7m QH^eOQu6Su 2%vX ^*l O—ޭˀq,>S%LdB1CZ$M9P 'w\/].r#E|!3>_oa۾d1Zӑz'=~V+cjJtO%mN |-bWO+ o ^ IH.;S]i_s9*p.7U^s.3u |^,<;c=ma>Vt.[՟Ϫ x# ¡_2 IDATxɒdɕwm6=@I?\p p鱪*L9䳛_zx"2#@h5^գg>GU}y@M=j]U5~Ukj>zox{,~[-ZZ{ß7fF{ZƲXP!NBUX.jQ g泪1:7_گEqUI^EU]4nh5M~/!$"zXVsQE>N7_Uw?_۽mQǿXv:?n.ER}!z@Yo'f?`i?>=Z5klj杝fOF`sβِ}yx YcEcb-z1ibUuxu5!Fˏ-gս6~?>ꮯL{}k^!{ƩoMnzMƳpxuz_ߍgX.zOӿL ]5^jXUlwrqnz(r 5뛟nOAS]څ=iKݾ7WuLF1Mg'P/Wha7>j5 T?/? 6vv|Xm6}yw KPaA%ٴF? BuNޢ$୴v4NJnҞY5_T鴚O8׮ڴٶ]=M'úͶMFêUO i˼5o6'欻h4҂}ڱ]uk}y!cB7K9Wٸ#m4!L3pT--i V|j>fӋjL -jV 7{;+vZlx\u6%|D YTx߼n9O3\.ӤA@)t], 9R|YVs  uzkҶ|{-k {@bv@:Ű־8=&ó^ʨ !N7ǼV0+M"A¸s6+) _p6Z > 2E4`c!у<=&z_? 2ܢ'B&C;cuH~χ@JCrXG2GRO:g''G%iY5pyqaYmlnG'hjn鴫+[}+_KF@hK60hf8ڔWՒUmm|\v`:vp|q'^ :1EA*SO:$.8܄0n6aL 3G,Ph- xDi ިhuO׫z} !&Lk9jse}'!ߝ a380v[D$Dվ!t-5xV ո:9:Ϊg? `Aͭ-^/iU Bm !mC''?xPm2J?4g@&ZI鬤 /߹?㦶- ?烳m[pkz,)AKlW8$'6͵LYPV3Eж2hKl???N!ڳc<͗p^"iਙ0  -[g @,aJ]saڴ:JN E[E?∖C{ܓYB42= a>@ ac0Y1  W=GPiZ҆QaTP} +$H]4&+mO|7/"m]öTǤ@3#c;~&7{whJ|VNSM'*t iHšQMq^!;!v^&4KQVFUowCM_Tgm{M/CFFdhavߓ  ޏSWh(}ޘ?v}ޮo.;(YV㏑ ں&bG:πXȉh2!IuyuxpP]/BAޤNA16~*|'aN5Af20fEGO2HovLZAf'RPp']v!wE$LE[Bz::ޚF4 h`MhGu/׃k h/qt) [;Օ@hW#ۢBT/1H*q)E/p̾Ƿ G /Ry@-cݗ@~؄jrK8|$}Uǝ2%1D Ṫ=.FH?y կ~U^Ѣq"s(4)NAq`4x~8Ϫ؟}8 ÇvSDVTvQIC9.~ ]̄JawIA]qfV"qж: xM32g=|7㬊TM}=$#/3jaD7E"5gO--""v|tLvp`ln^;h ,]܄gukB *^"G[2ǩE PNA/Ɖ$aytAO<Yu\ >CεW)dІH:^Cc#P̱N(HvcDcQ-W⛱7Ź]>wab`OvJ cKϟ=⇄; mY+<@T,(o3E%sTDxUe4Nsjv!!q>!6=Ah|'Ǐ寢>fcN7뽕[@ϱu yGc;W>3}]42DstN@bg&рMءgć2%-; ~ o~k"6 [p?Hd}A{&"QbܢJ]0D$~iS|w0C\i׃1I%Ά1\ƿy08_/|A AȄajP| )*0{8Ҵ u(2T]h5iVS!?jv3(M✔>]9ăO+B3% -1?g&0w8=,kUtXFH9aAoL.bȈx_$<})p1e1eWA\8u\T`&s F72#X'9 9/IvqFf@m)}s[eyglƱI7Ρ ^v^qsc3=NMʸ cs. =g#j4a9oU`O?.Y*".2^ @#2]k"ĉ{j6K":iY߻ HRASAf_WF)|S_}e ̍iLzk;Gպ`1?6"C»5_@Hp"7%dDߓbd4[^JPm;^ׁW wyyWB$J!c𛨅<P; NB%s$Z=h|8Bo"q8jT ,CACMt0zM%hql!4+܃tQ!82 #0`VӴ24GY!C@@:T7񷓔[ge6aaY| 0f_GI><`ϔ8ihWc+pP#gO H`TH쪜Qi9yj;[P끀#4!v`?|a#HP5[a| ZDA<XQ*PҺRYݫy#N/ܫwUw&}Sy%)Pf#ǘkۻ4BS`"7{w uw^ ~YKMs\皷`gz:ڸI&=<As:o"J pf*/%h77#׉DT64*=O'][ QH2|8؜lSCejAJpVa8}N.j̤IZ}R A #i[L ö܄SyM ]V`//!ژpɱ;`>>m⿆v4 yt :x,ń(\+)_Z_;g5RփgsvNX䕈%nK _*ug7NXG]J[:$ ܟ:A%} >m{5jwhZZR6} vr/xFl {ư,BoMjh7z{d)mK:6ZUfzWr!ͻpR`y:SkwJ? W-TpKXzi 9DE;#ː#c1:PG$9KqԳijK}:'Ѽ(aF롮kw^m-@^-y䆛 @NEv ҿ0$<##qa4KQ2.'1t-u`kݓ @Q/֒9*/ 9 ] & nFٮ.!nO~iJ>'z#+n}1GB 4QR4`H!!<*hD $PХƨC2LWxVTsiv&0^FDyhu'ԨCf9 DXۺ 6G]H |򙃓Ta$ #fy'MF/- [Z#Ujk\]l.$v2 Z. p@Ы-L>%짭orkb^ﻂe @UNvdʇyv6\| hEH>-$;o C2J|N2u90hL3M7]j }an DBɬ4w:t&hg|폃30p=梌Jr"7_J2%9-p.s; I۫QIA.b·m5_`*e<9ZafGm;pnwo^>b_?:AiIrEՎZ&d7E&@ a6spd}֋TOb35h3\b$el=Q2Q2tVh#I=v >D,ERտ2)j:X[R 4Y 6mT>D3cyw(p-T3{jNUVʊl26D{J)Q*B4W{0UIU9Heìl:ey]I`CLo%8V2KnŒG`GYx `5x>D_65W{ۉ;:ycUVr{4G$ {K؁BR/H%>B?Jx+ 3ZuI?QJB0! r7!)sR R)է u+v p]q\_cHOF&A0'(Yy:r7R؆ @Кg?]\=~>Z~'qB /875_r4ȷ[8>Q9Ȥ IDATι:{+Ff #@3#>wH'Lœ}>@sQx\%$Hmz}!RˉyMԄ N˷B^9N' 腪?-1J=y<FY8BϹhҊ> }sF`|گPs<Þwd $3=k XWAb 6FhBE+)-{w q`#Ϛj ]kخb!qvܭַQw7!(="D#aj#V:NCF] M *}-f~Yy@px$3$nYQ.&{B򌩸cT%'f_ 3 lNJ uD$0/ːۗTrl_8|y%rHܞMN ^鷑aфT1a@A?1{\/dV"k1F1EF/& = ' y2/Rb%y"N=}95JLQ?LǷq! BKDȄ~ עmC̵< 藟ꘛ!a 6Q'_E ї _={4y\V[/sTʥΐgLq_$\0#q߸&LcӃ%1U'(+đW4 p mz4 V 9 awMa&Aۜux0ta}ƤØ?#5aK&US֞]29%cia.lGa.G'lk6l(~VA6$-LWĵJGeq ~$Sre,>KsA1#Č+Q'L2XN R1 ='o PgM}k_=[Oam^Z%Z$J\j^nRN;3mp|7\F2@FyV$IkĮi&=!a\ ӑA0=uR3;K잃Sy٧f XjR@\p@7H:,'7Mt3qv0MqkECc o ! ~}L7Dw?C/2cQY'p%H<&\P''S?C0532_5^!P?Rp:2jE}ޟg|wZ;G%F)<I&1x4XU$7oF4:~@v0b`/G%WI;_&;Ē _s;kMxʂSb&4XtxZ80P}5疛|dCkܼy߿5PWM@uC$|KhŹZ.Dn:fsm__ 1R̎i)`BB? fA0++J}bDȗݼk Ñ/)v\QWMZq0W{o@=)e Cg3<_^yc/{nu> lAm͕?$Ԗ0qdƙGN Re aLF&6G˜ W9)Ia*vVvn37l*jHsOQ$ y'B z|k nGM0"rHAyC:\yjj2 } {-A2 3 g@`U ~[6pT-$Y!zݾo:ȠnG0Dz롭Eտ2>(5Īp 7p/~"8+I5Oa -ɬF۷}HC;9ojnj3x%O&~ Ҡфke@M(t#먑O{]gSGa}p /g=$%s^_C`YS&w[6D$_fu߷&u+I-ɝt\wS_1nҨ\w`kr XP's?@IYݻd$&{:P2`&>M/]c5<w&\^@Toj48񕈔фasB:C>'V8+pC`NB)yNGm[84_gJXe@m6'` RO:UyimKq`}.tplדּb.^ s '#|Rz˹o"m|oB7idz]{UMAҋ!c"tMroU~ A:K徣&~NF/l=`Biۛl! lT`Ys2H5ܗlUn>}}3Z3㔌N +M@7F|yrH5F]| q.ѡ-J&v`$:Ѿ#fČO&94?"XS %EЩy%l#|yiI=c-~{qg#=^<ϘpfU > &^w6,2~y@/6by^dsM6om@x>6&ovC {I*'R3dRn.!G ՌD 6~CV;w:kߑ ;`\ EQ,7ww]*oMyC0'ݕ"1p|\ҾLfPhRvamV]<"GmxN| >o_?/| R>HR2e.gsKZ>? q`nǡI>yAm6'gL&BkhmkWi?:c}>|=Op w0ʌAI+xSN_\QRO)f[2EhDN\_޲x}tH+0c;yJ! J‚ qAQHPF 9a!PTZ"K/uNس_[V07 V_ Et:T;H ď!G^"Q8v D;wMn0!)H|01وF3vs#Nj/n{ր ͢\v3O%byU `dflhP0CКoYL$I's4 4"`GPYhsrΪJv"~Rp98M[ic 3#}&.2j$r]|}*aAt?Xk =ɮ;ǬoUMhQ͎_bϫ$:a=$q}Ub?`f|45"QT&󵤗)$*,8į֢j|pC zH^BJ-tkm907z;ԿCNL@myUm}OAW6-!E'Qm}ysjČMkX)G|ΑXCg"7hxԤm5˭2%I$ĉ$ҳf#8a=0/Z4/DL"ĭ_Tx%Z2]֛wp*.p*ZL[,"tZjUE88:J{Y_&gkV>ᯈ{z0 SIE]AUm_ 8~~O@KR/c& |w?c&7jQ3{ i;Ϙ(,lƗmH@ʔ|]Ä}(;> Ї „.4N:2Y;cPMT!@5riu>TB s Ka8S>+2"!BC.FSM ٚ[J|V2Z{vdTHl,ͬ4%ψU}!va>"Lu^rVZuP%P cj=7eP%5f%2`jt00"~ F+A끈P6a`HLq6XUUv g'ϫ!K3v O, \/aܐ"7 ?~T,21F`h؂9Cڢf q&#MD`cjDvd}YxC5:M 52mq)h9~tvDNxv˯2} q {HR.hȓdL={iSǏvld/U =H9^}k~"(Ȣ$WA:Xl#Ȩn^UUտ$֨RK\,y7Nf]xQG#%`iE®<>ym RnL@D 3P IxU4/i]3dY^o tB*fpK,#Srq^!FI&jhIH2=3J/aDKRYZl)=Q _4tj.fdY`[7XX3^5]%G۲;Za4~aZ6gYSl5#>\van+C/J#sZd}'E aJpC1cE%NO- HoxaG"tsE)cv5tLGh9P:xRe}%ڀH]{@X@bx]Z]ӒVCR +ERr|I~" )%&B ~^eeao]!0l9H*xR:V}$  f;vKHR|ܰFעS df|%b-v&$O`gY lT00D ľ]+Ol[;Dkڏoc_#؀1443r_'DIp )R-$lVcmga_Mq_D[1eAJ6ήY /3 셨` L[kR8Pjn0k a.;c"PBt3Z$h_Oǵ=A5_ gl'5K&X1H,`0+}.>`/_fHV&; mߩ?Z @:rk ȁ6P+H짬H d%L@uf`;aG3(id;0"L%g-jvKJnU!_@aU*8N?`cI"jKr"r ( m%x4Xѯ.Yx;AWG~4C5c]>GO8+ hڋA8 /\U/{7PK6B>f6bjc> %j!SE"q>qDSY:$ST)ªh ki8FjbW-2^ yzXD-Gȉ9QJDfJE3 |h}7S|c8]ׇ; ݽmU03+SW#AC؅,h%|>$g &: u8 /!zv>N<&^/-K<MYz# !Yg+[ ^͍߳ef9 scy$( {ȓu|hw斿e+*8frL4 n.Ka{ (y#^c26kViF@o]}?~W/[cv^rWDf5刄GMHw~.5d:[m6nCpwB >%~-WyHu$K$NG׌eA(!|?A$&ú*%^t5 IDATL/n@%D*ZO86tޏw:GFcJWӀ ᩁn3D\\S%Wi_q&|.G޺d7FB [PVW|]]V?,_N\BX$9&qp{a2 x}uxsT~&o g}GVwʕDP7Bg&:!% gurk H҂8L?aL";4/H0* *YAS8 BC@ \(95 FOI}g}U_w,|ٙ$ d~*Hʆ}24ܶtw oNp 5n1[o B`o3'~Pn2LH=>oR@"t ;ˑL7Qu"Sa_JfW+ 2_ xa0s eigm!c.i[CH1¥`N ̩Zb#FOhYGJY Z|q){&I}8=Lu^_nwQ傞ϞdO?3{Op3%+KI2xgqlE)#'";*Cu1K;y5+k@)IonT7'E@糲T0| B@X[i!pBXzLɺ.px-И> 6/_"mo6{՝8q(m> E."$E #y%Y? -M^q2A|JHɚIrYlxm€MWr~@MX0AdT~{;5ڬvH9`MY&$a1|֔\J0:l9~$H\rLg2GqdUjXđ)nT6O/KS'b>j=mTprr\(a }襗 m7V-E%yp#L?Hv*b͝3q-B]ҿZ0=B3ÍR m5I:~f`hvaML D4`pz8̧Ǜzl|ozLR//1O$8OgXcpoo[%Y~h -9PK!Dc˫J=o}MO|8灱걋pK}d|{_[er('hb@Q͋}˿+jI]' %6u˦67|DxcKb 9.EՆUs} T؏oah zUmΘZ7 sd]Dg'Q4Wx.KN]* ,g?a2*N?,+VxwZDžG5?ML#8F 8L&"~\ݿW?lgl[ggg_T#q 3PeKR9ˊ_2c̖l(YWh7kcgQ `?MXbffLY]kQᇾ:x>:+vmy^ǿ@[&__f~ ujd|w! Fޭ١FplLg¹:*񲇇l-<囨2tb@fdU;žsV(.8h~m) v j2%cY a^=DfY.&i{j@;ఛ2(q$įP`_ueA$Uʞt: ZxqDW WL#7Q?zpՏòV1;R(g$ N8c#U|vMA]$Τ0Ƙ'wW {.9&Ik$6~HsAfnqπ_ޝD Z/AߝM^&в05PJ}""'` c4EHm}%o<$#M~nG>;2#'btmpN5EbB:!3g "Z*IhJͅ9 KP~X̙U0Q )\: Jf#2 ԓ@ځΘ"LQ:&L`nk.L摙hZ <)}PHn:۶HPqNѩoL⎈*9|qT#ܧ U #%6_'R=N,9ΝK6:F<^9"`]|嶘: nmVsݬn݀pErUCK*muРV4΃GՐ'd ^Mj3t8PØˁxSTn'Ky YX\`ԌA\o>!|U Qv6DҹZ :rxQs]WXLMi Rxr>~Gɔc[Л,c8MG r $=ѦCy wgU^_ k~WlH;Pg r&vbѶvh3ض֋yJ,&IE_A}Gξˋmpn V`ƥ|aMY25w]B]FP(=WXhzah~8A9MLԂ@$M L$kX*oϪrN}<>pPmnߺA#4ɭB497HiBP57 MMVX@\%L}NgYYZd/Sph/Iz6 `;.?W'~_yk %gms%f#2`z']bD jC"&7oӏ>qv'<*jX ^sN J5]Cu*!-cnrQ5)qܻEa,A@[M'CPqA uwqwguٙg.}6@ʚ䣄v旔 9 ^]"j,2 M "j:+ b,5pӂ,s|WYo0ˇ?gU]j}𣏫m>(9¯ֈV|?3 9>StQ] ̺0c݁KuCp WC@.cG u+mŰǘ.RND4\j G$Weay DZC5j *y5,~-Hyx7[:UhDVQ=F&w7RƣO]iԩ%,(:W:Sf?G՟Cߍos%@:ϾK>0t`.& Y`zrzMuܣDW Riȑ j.KWwN j;$#0/"З/->la.iQds2')v4 0C]`" NW {5+ n0dx朄 Pҋnm_7fgL} 2$%檪->|CAsL%<|Klısp/1:eHzË"hP{v\R}ݟa+K,閃ZL#Uq< վ$BښPt#RlI&^Uqݥ$~n"S2r>sI:Z$m3д^eʽǬc|zӹ0 xp~Hb߁4"|y),&<7O]dΡatA h8>0\)9~jS */ Apj6D Sq6gt0Ȳl׭:iGijgǨG[YͰgXϝ"`^71m7n a0RSgud1sZ dXl.HAf⷗bxۺjXD7_;,C#uU<J\0~c~q@T >V`2mR\drvSgO?IG՟0᥁u~tVu'+?~:88?xG5czS_]/pNBC$'hT(a d`gB’Y=A~D.S5=`? LJgh5tm{H/Rݿw'>s I8QtDt0 ǛIm~UPۊ}j0:sYPׂ%fGw#xf&%a^b_?Zߦ>#ӧaZ6A j#5MS)j~'G>2&KuױՕ~48ÈbH J;jXF~e,~U{5uhgVԉ3A諈" 5RVp js ^\\״y;/PN?+I$\ ,Z:/ 2 |r*AbMU SĢw"cˇjޯ>jPvhE6Ed fxdتcImMu -l 3]2L:gQNd@{A85AV!]q5aHYire߾nbgVroF |H>jgƙUD.|'D@bi(qnT-M jQA\* ɿ)sQ_q t"}{h)[%>e#O[uxnȅjM9@' 2 J h|# A$[E %85$h[h1BS_eE*k Z4CrA!Ϥ2/4|,̄V*yBAFXgu!ɳk.|$pX6ԭOBq&[ B]D[cΦXSŗs!Izsޝ/ħ]bBO>EJnmH)(~sT0s }P l9~{Bh*<{H9Ͽ5@sVu;LK#Uw]G 0=z&x}6i1۝0@eTG7kOmŨj'#@}ÆZzJ3nl#(=D7{Tw*Yoo`~ nRFg|z}& 8ػq)4Y.ۈ+`2:7f\_'dv߃Gȼ@́[_c6\&tןv'kՄ e*'Om8XƢECFPJk^Cok[>Poʹ< H<1|k.ۈghՒ0 \avu)!4 F4`dmǰIM2Cظpf}w7GΕFu @:]qhf*>Z!I᪶:NYsL1clV2 d+ zjV ԋbd\8 N"3& q8jw|0"dԡTh[svA\ J- ;)+k%ZBAf3mÑkI B*(9' ~24Tǧ6e:X7iI qL9dABg DuJ[M,se/Ys/x?n1a95JƔHV s&yN7KE#@`y$hSP`I~v֫ e(D$8+^xGhIClIS5WOQWڝ _՞ C|ON*\@`JjhUp&n1Fj]yP4 /.7ppA~ 3U$!3"#- 6!zbfĹs+ 8?Fje;qh9Oru@0%5f͹v 3z'8䷝> Ƹ2J[DFzlh.O,܍6}GTuԄb~1PԷQ%;.P*z*J~"LE/:v.uV|dvk0|^uMӍ ;*H}+ Y"&"B;  r> pz V֨JX4 c@;TN;0?u*,PG`f7$)y%JLZH{VTd0K4-++ Ze  &: šI.EY 7Up>&dGCw#uLƘVEK" |[H+k9ޫV%ť܄%5!S$jI:ңE0TY]qGUٓ'!z?- ,*kemV?cSزpW8H6B<_g$Z ,^;&D1]LC}/=^DUU։tI{%䀃TlۄFrD1T7Yi/%L2 1g\W]zؒ*PcD/)>>7@IwLkG2$Up4( {YV<ҌHT5,2?[y Y9W}Ș: AM6r n} #EVB z笱G1x~tu>LeiX ٍY.4ToP Lf|)G!|4:$4c+xh5g_Õ>+)Tٚ )b"ϻb.=_F Y ?c`?$zօRJn%-UڬreU*hCG#@EK~V⾁=15cJ].?@qd ś6eduO2Q2ШA;nP=g/`EDk_#_%b&3Q DxZIF" @3c$AKcp7'(9rR/__JjWi+jN:+ ՜TR*&_='7//a<w 71.{ ޗ%yM>1w|&&#u=}0 ,pEH+|ɊRS[2?;>,әWuܗ] @h0 )ϫO?+3p{0hMw AtӹkG?!+df $8a|%*d^` Tws=;: :d5TkGYL4P=tm7 ͥwCNCp92-$&#wm#Edvk:#‘j>.g 퓙wYUo|Izծ }S~闤8)O 8F%8Ч Ղ.&(rG?G4{N.mjhBDkYٙb dƕȉIR5s^Bb/ Bǖ:p+.2I9wyoT:ʏj]P!bFHL/W|_*@%XNDw^!d&/JzU{;n>S/uçz0-h7uD@.RzO0xnm;gIq,/ee;.qihP%$춊hW(Q<I!Rmʼ:|'">̩ rWi>k)֠Iy u2SSlRݭ lM#8R'goyzw >0|nTU~u=j=Pؤpk_')[;Lo"0sܓ!(vYTuꥪ9(BwP]4@zyYm!uI$Qo {YMAIafa(` H?K0)TD& nʐt(Ѷ|\LέYGippC^,)&/)dBM P"wр9@1` D㓀n#1jc6 wـlWUoJnhv#jӥk512ӱoEeaxJ1韞 f]Aӣ?>Eա7R)uJ3R_X=ε?q:1YBY =&l2UךvsPNozj+ =e(P uQWWvs b2k : 28^q5Duy[7G 8L7QE͒p}spc[$['<TK(dǮ*{:Sk?)tRjDq av F+#0qeF=c+Na>YW ƒ:@ܔR't$C׻['}}f`ep=~_s]÷WƩu^Ctw>įsƚzjs`oIIfΈG_=fu#BEBo}|!H.-0(%{Zr'cEif7˔c -$k:^g@5981ܥGw<.iW2FC" 1ʹ-MHQ7H1!qL5* 6g|UIE;[`*0mzڦ,.?jr,]fmj,C8xs(vGL!GC(%DFUUF@$5 +_F> Do['Цʺ+.5&9_l'qH5pMAo6z6ZvtH|:,݈J0K`,+lc;XE+YQy&҉@ pK'ݪ;HDYm),O^ ioXhX=E s FZ0ՊYrxg_"k2Wc$[`-FfEԷ <:;>m# ;2NT4D ZU<1/8 Zij3DptbPR:`8*,jgÁZlݽF-8?HC .OJ#mCR$'TTu)VbGmvM[v807ȯZ:gcBer,6 EfUkh 1xҊ{(Z_Bܖ_߯O}/j?)EzPV /%./M' >cf͗vӟʞ]L@&gBIXӐ,/.9K}Tx _UuJ[{p1С30#NuᎳ "BdTP6gpF)鮉 ]ٝ5T}p rM O++}.6+ 0.s#6 1f Qf{ \"ա 6Ncw^ pZIEɳ5t~ۜIc 9Ey!AXtX6ܘ*lPUV=!v-B5@pV+`'D7?oD b6n?m"Zcm`&]z՗HDHO,'fU0ot4CIKD-F gUW&s 4YdZ{8+2]X"swKf^]v?*gK(%X.c˓{ȋ/&/RBVT^vSi!Sfc. S˥K=(  ׀Zrxc}: /ىLF;]̲+/qIr9Oۘ{mbX\ROƙ:MiF>\Ʀ6.',TuoCki.օ[e~M-kjb"n#cC9T~ռ>?PCt0 1kaHg ɓ#(e%HŌO s]U} cB hyn5\ٹIm@'U%> h 3>٧(>u ۡӺQoEf>h0p'$ =>:*"d 5z)FA7A\Sͱb2m a0\ zA>c3}rNH?|Y7Xd*s<A`W&|p\Dv X'܆s%b6ago; ax|}jAA q0TQ/q z- TcӍ3? #" A I wB=ȢZc|wQX-O<-ktS.}# Bla:lrjq vo? rs~5U ž@_ $ZyG KyW}ՃUYF5b (<}s=KXT6m~6DP[0lTjL7 ;鯹p:ͩ6;ܩ#MߵkIYP7 _'O:"/fqR4RK{H9@Pn;1s112!,H Ez4X_dj<=F:G#+w &mO 5I }qX,Pޥ@Z#ƽ A^{dk\jP^[pGK1ROjَ9s\5l M.8bXzKw|yB|B `т<_~9ܟ]%C ~ߟD&0e3,nnIqQҸ.DR' x3 nRT{b-rQ=MimҢ1BQL^_LvU3 AFEJ [5.}!xhC/psAx3D Zc@yvAR%O`^˻ˮk;shT]tYEHb#璸Dr,7٪98Z }ڥN7Hшο8/5ϖK̴*۠-bhqt;:^ s wfKY$t㷈㬥VrXGOm8n`ϓ![*j;I4,kd0f4|v1<Nl|U'fDt,PfJ @`%"9PPT)ѩ؁5!jGVkUee XZfvM=x7A"~}@6Ē>ZDA(&rk^ۄ+҃SR䈳oܢy"xQ g"dn./BmB pvl U_PF]h !ёٓsky 5l}]vO h;{TB%`2j9 IDAT3pG4 K |.xׯEP#-RD( :s*ϔBlx OjM72IKwaݎs5|.^XvOl?s<ԅ PYSzݽV/x4Pd~ޔD 8ml7׫O Nz/UN0 Ss㫜 J@;g%UE H^r.!,b:\p ?+Fo>kPGRb,C_#5VNp PڈrTfL8ɫ3,:t8qxՉNo|VH?X=@;lK,XFp|ߟrT'5"q1x"Zc6KM>WQ{=b@>bG& Rc;MUVJPbQo5˹ey~12hGf`&KE0L[IDgp۔(%R]|3Ta@/iT ) uDl5 A{ɔF亚>`r CWՔ#DEʢ25Ro^uJ.e:]4&VUrZ)ȷy߭+3܉E#g%Y7~3}ԓEP v "20Հ[v 61oxֿ@7`םtGNdQm5[ XvH,ןNлo_ζgJ<aZ4räec\YGč@C7K`>ש ֔BU DzԘ_AGA 1PxXF$FS 9 PZD:hPȸ =V`:G)ɐ^3d3|>*ܭIȳ:VPm!Pc#u#Qajlsv[#tTrN 71lEpq:k!oSb0LgØ]`TӋ0 eVwuZ"*r>19َ#L0mnj`d\*p@ B(U$PVhF:FBB 8y+{HOMKn3ɍ;^`A8Btap҄DÁÐ]FH& 2r|ZO'E". 0utYuXA&Aghr3WƱ6χ wo"[yvn!E2臌>]ψ8[`at@l؆,6IԊ 5xOwȆ#*?5D kx'`f0T1ҹxNkE; ǐ(md]hg=98~N\^6E>nScAɇ;gM0.4H,t3G4/P@GB(C#t,p ٭}TyG "N]G gIC [2~Zmܪר`!Pd{*+rvҟ{=tQ0z3 0'Xh@㻿^0S;xQG)ԥ5Glgmpyl@P{縆r[?cdFoe wQ$H,:aͼ{(5DpݐX8¯c?W ";l͹@CRQZ/YȽ8X Bk,I]ޠՃiy^0)8?- A8D1jh=?P[u%TĬŸ b ۸ryD.ؖ@KjIhCXVQ_a5/y5Wz=V}J8pYiXlZ\xGieF Q+A-h1Tw&7 3?zÛkIr+fb:ƆkFoE"_+eM5NkxbЂ{A-N''p6$o W'l!頪ۧZe6P0Fm+'hGG:AR;+8D`(2?8d58}7D',@coB ^G3ZA y[V7?n UHz_~}ބHR+dך FRwԓ_hKv)⫲&9 u>#p.Z]L'Dn3*[=eO"FM`w58@qK#=„6 sa X|BQݻEH+bՇ=XF Y=b)h DEH",e @CbRnl78f#*[F<5y.9$D*aL4O=&FpM$=#hD 9HIU`!O4v`Yor 9&CZQØhjNگX4 J=^1B1&՘wF-^d0! |;9eE\9L@A"Af Ar#dF(脝T6! \K4%h~Qt+r^ \ Ӥ[q'@᳆~58UA HA3#S?\V)*&җ1~5|>1>psTI`̬4 sz4,5qʵFX뉮PdGj =MJ1@E?dJ#}sRàO(/w*\n6ƑybQxK1_&02nQAY8-ճjQ?4^m]pu O,B\j*AߣIxE 75*ѝ?gCjf2:s an6 JGwA0++^Bxy'Q^"k` D+& @<=8i>u{-Jk 8n:3~'")yF+07~B29?soP$doB2EO.Zm^Ͻ s>~Iv=l;n^[t9_AY%V;VuMV,5 s< (!Hkco!8j3QnX$*@ѕ(B.z; t6",ND, :9P\hs6Ϩ33Aϻ|': IGRL&(!Hz)@6ؾN>1NuiHo DCMB+vj)I(5mrTrm]>H;=] bTIRr /HD񄜃cQp>%sPE7"K> /jd T pP1:{ +J .Db=RuxNU2t/.u7иB@ Bdx&C$ARcQ:Y K*`1 vb~% S }uEB} QB9bOB!uɍ\W>]r]/HXi2[_Iޗ8jC5B^3՗_%DkpݫN'&‡R=qK$dνQ9|E \RBkk!YDqGMS:(AGxk uxi-=6[9-$ZCvҼz%b=%8 >XNB0$aS]1n%BȬ<@kP(% P.0! =yuXSq~k'## W$= /M7'k qx#ԛ}ӇBGn [<`<܍G.FE,]>ȳ{}-Nc)^zpG2mY65Ǭx Z"<THb6YH.hݽ]n5i\ =2#c" `~BSp j2֧w։kcP[Lד;/!8)tFo76 ]y'̨7'vO ӁF [^Îa!ʁ$ %@BW GZkpD!1P U1cTa9tyd7&9w=EpΑH?w?@"3A̕_]zA8uL`4 "Q-!"12 YU-mCVྊOV A i A%TJ;p!(DH.)} %eb_x|#Tm%`x a, V2;'sUjyWW-hY"l;$@iA(WoVsǘ- + ؇PC0p5G.6G?ƦQ/|`?!vMYF}|0=%y< y ĕaյP~!~|x0Fz9;_{5(9?A`7>Σ#&pp,5&8d0' VPx掸>FH>ԼThG IDATz2S{2L;*2I?{_RQ~`|M9[OA6 ,Bg*CllހuԂ3w)ǍQ d7XI}0y|RDiC"1e|c\n@=r7cpS9 ưoz?\T x !( BSla}}QĬr\Vr?@td?}pzrA.Ljdc#t]Zǚ SO%C8?WcFCU݌5h&'A1&"k+cQzye\VN^7E4aFMi~@HW7q''-26\5 ?r7-W$ a` &:Ug>μ-sh Nq ,+N8kȿ+m>n9"Y#%?+Fh"~Z2D/t::L8y;N  #H]( t84Lc-{7)RA1s7>;dKzY(?Q1?:2H|n Y[f7=ǐf/[oCMM_`O@(3G#O$eؗP1q=~y/ 8>ݎ6ԦnQu%'>p 5ku.C}EnsǔFʡOIJj! 'sxLW= †l,-칋d \ 5E'abgU0cT@%ҙv G`sD$Zt=xѠ6L&; ^쯈[ثXW8`(h/2ܚx6H%5&>% d~J zAMyn\Ո:!kf` OH/#U}ETWhO9'g|'Hfƒ l 1FR.)Y&8;1}.4ϔaQtP Xn1fST';'F?rzsSf4a7Sε/u`Y`,͋gyyWq^0EF~rc<Ā Ɛ'|k-*q0vLOlfHǧ$ob훟T>˿7TJ^⟪ީ~!F"L{Axn.>x )RǪˤ=0K?+qL }UR%q`f9i(eI1"Lo~)Q!Ւ4%v=>a׭) (W ҳ"y&tx U FF,[#Apm攧=% ,hǨQxZ5hj Y{ޢUuGBSʢ&gGeEʽDyHL(彋<8,]F N)Ws] | +|Ih6AX'bK|ֽf7K'/?B)iwWgH%w0yi% 9,ZH :Qn-8}VqxB`ׯk 2Azv V2̫$.E3!::OLBwB_1A48;8MKXW0׿|G`!4ob ow}Jz2$ â#&"* wy3~*/.Oy| | R%'gԹ{]p{<9HmXdZ&}(@"+d]^O-s1`!7 UM[ pB>9)P+B{P՗A* " @4ޏZA:wqmo6aIɩjBeuO_~s jT?Hq,; Ụ݆zb5Vw਺xIq_Kz}8ɘ{*k ݋I__#R=Fܧ:I>=>ת?Q= 0nE,\:{p]Xf?/`w M2ٌ5Cm6BZ HqJ(:w@= DH'1=r!9|Z^@2L/H $mXI%t]Iy}e>͜װWp_ﯽ@lOlۗ}ȫ4UA1h/ϊ"nޯ9~ITjd,-qHg9\| ^.D fj؟oE:D}p֙Xg7D{`P^[gـJٳ(ϳqW> 0sts$N6(fUhꗿO:\|RW}Sl3NF-#zχf n[jRMr܇fv-vKp P  ˸ʨf@?!yc䐮ZWt.<⚈ؓӿWm3#7AZd)x-y~x}*Xk gZ-B6>f%xs.>W!mg!5@T %uk[yء.H.jN&`*]NADIQ7E/9\w "9f7w;懤> 6ڭɵtݎEr~acU5>$28oq,}b@(7jJ-=%Hep#ܔc |;7?%hdzOB!Z}FM3\\iaB@(~luOF a|{ǚKV֐O"RII~n4aQ&y:X}# xmWK0Hfz9&dpC@#qE*~ o{ej ~5֩n6ds/<c^{MѶӔ1C]/>\  %o&{ u?Ob~YYe홆$skoڹW=C VwL[F;C#21~< ,Jn@9qqN .I q ؃U8;-w`~׈]Y|PͿ]u^uߦ~ A#sݔcCTM~}Z'B&F * H3nS!xݰPm_F=kH  -\ "l  \ hA&_`$tV;eT FB4` \vX7>3֔kg<37dɘ5ђFVJп_NaXvwMeBݛr+.T&P5@w`O rL9卓 PB&Q4i]Oh'p ~q-ne6oC8\dH07}5!(:<B=GyGsm$LG&KwLqqMVg3\S5!*Ea|d›؞w;B{[׏T}:}jb4s^@.z)agܽk- p9o[`_ՍO~~p9^FR1 j @PyXe X kR N0֘]DZ6 ƿ?4 T}{ w?g1uh~H|vutCtY:$\'Qg{lE_U^YyuO_V?e GEW_BW% :b;MpCHpkZuӟKG&+嬽;MD5^=5Wbn%ƒ96_93~cp$gm!nn|uE-EUNG.v)p3"}KT"YM1l?1p_Gxݫ[uALؼ~+5 9;x^}+"P,"ix%9ø2'BDpQT5T%tePګp?6un,X!H!BZB `5P_xDRFA}/0Xz׉cH("0{;applNz2MWuH p"黜kXL\ji3!MܷQmo*Xcz=ĽT[7٪E:9Wb޻AzfAEX1d Dǟ1~|q@!}ǃϫkxtM$}L3Xj 27l@0%Ic> m,56 rׯtm=@Aa=Dtwt|/ C3ۗ(<8z\5 Nu~peĝ]D[T>n.T XpcH% L˾tM=INbDc+mj˯?7k@|Sle ØsYA86Pm|s$##<[ʁ3 "*6ܸڱ1Fc=`^%ޏ5CT+^!xqK/FiW@Se p5j|s>GbD'A)J ]}A pqw-u$}UIwgoznuW Xd54՝VMT}ҸAbCbޱ 2ǔ1gJ 8rZ?1^l [@]&l~zvX}?$X?i~vAt'\䷭M2^7uҟb'qX^Gd^fŕ\c0"=B¢YK3L Lx0N`uS)0kwtX=ҧS<(>H*}Q~ ];0`TiBzܑh%x<{ "A#Z$ь<4귊hri~M_5PAtf(ipaL*J+p/A3 n=he8 Ყ;a."!s8Vܢk:n%eF{L` άN!GK_uq؄MB}d8.qB89s >~*ybaěVnlnM$x A?9GՂ@ίh JzfeN iJqxÔ4ڄc2%?˴lZ4#BxphLVD`D QU$"$E!vp<ίG_Yg/ .>mFـ2iӜ3fDY8ߌ?eL+6{j`t!!r u*@{N8hLvW_:VbH}$P&DBmt <6wpD ɉ;皻@yL@H DRbpXQwo ~C L̟Vw @k?—Tڿ~;RC"3aLG2 @d"n29 Yrw?kɟ 0vtuf6Hׇܺj҄gG 8hK׀b>ޚc/UrsK_jX 1QY$p[G $;1=K'%ubPE(2{8# H&19|[d}0c=l#'`&n!k0["eu5^\@qB) xv8S<`dz^iDIE:"9ף!brj,!@c^ IDATT2(@Sj ~a7R!i"D0>7 ԓ0tMdƗ{$B"j9B:>S$ p$9zWp|^o ׾fhaWF8n@bMeXSqյ"]j '',g.9ոҶgQ?@"c,/k\!8M& ɀ$k)>eÊYPBl`'~A? PQ_ѽ;*9bBH .>͹ç/){f;ԥ^Gr8XDpx+݇8 .cRna|1Օ ղε\;&_@UpNa Sp! ~0k\8 jm1YKxS|gF1+ɠ% ytwbĒ7'd3DUCnlK`M~nbqFsf 8&]rM#):,jRU%5җ(X^ }13bvz|A"h`N#c&Oz ӅkVXdjb OrNbOf'#s-R1 )q9Le7%MuOP/5xQh"hYQ"Upo#oh·|/PoM8,h5:$\P- J̌In6V=ipW5BKlIlm_9oM~c$0Ux r{ūӱHB&`)(::5.Dy7 7x%[ޙKr_.~y$2n=(Iy܆nQQO m,(1;z"U.Lc V2mE+3qNMY)""-$c6FF1.jjnUTf=C~ )H'v`GGq& D+N񏦲/` bBʨ$SD2P!RM݄;KJ,F-rp'߳}չ!go"xn!X&5鏈kbr*8ˠ >innH:Rɜb*=/8/V)-&r{ K񘬨Z3y̻_ %H0fkMVBɐ|eջE 7&΋nP?Y>=Y&ȱMW|A54+j@csD_m䙗N2t`0"ǚd RcP"g"+foކjw IA7BOH?OoEIKd{QXNvR)ɖ^P-݄ Gd|E$:rzk-6cr99Y":+%.=<J ]عۂk',9#voO@f!N]rl ٣U`Sf%ܶz̗ۊ/_owj-DQ;S` 3jzcn9 B4FYU΂9>>{7\|KG?",yDa iJ%nU}B֏S?^2 %|0J7@x}|x%)7v7&_*^:xO%H|ZZkD'dr6U] ! */<8o%w}`/u4Du*'!T,WmЂ+%75h|pR<o-1s} jrL w3zVP6O}i;(aUJ$Wŷ"(͙cl̥vWKv|` q#)0k$sE7s|7lBNډ@˻\[|HRh~p0`THHu]w>иL\X#x"k}}͏♟ʁ|~ӟK'&m "6F5TDw &Hl-S8t{TbĵQ~nuX'rBFNL} NYiBui.[]Cۂ#.A!PL}fZu zɭ#I՝5@ [Tj6j$:֠bL6п ܁-qY9¡%e`X,?b o9v1m {׵FDYq"unެzO|77 yH,q焥 U0vi Qvt(%[Ь%@ХB280iώ]8#HTx0a1{?@ B'Iϕ :+}HB!@Oq ~uϲ3CtU@MpAwσC.4>)7nD5rnvrZ_ۈ[2YI҂.2&zS)KjC gc`hcҁba,ioDX܊aJ D>Wz Ȉ"-}ep Qn\?WFO_Jw(D+!z\CLT[Z^d~%, ^5C;J@yS[2bdb3atymؿb(T9KL5 ΋KD`5@^߾QEyC}Iq kpޔ zKϛʤ vD*~+5jۤŌ|࿃p I!:kMKXxq3JHi[A6)W(H1ڕ%]N$oIF9Q٥~juKVaFOMi߭oQ!d)Vgs\JC/ 7-nbM<,r03@Ue`ʂØTS z,%9>]7_I@w ƽ<7yXM+ڏbk|=Ӆw'yg 3W*3/Y Q"p8unRc`]WQBFڷx}d|$ h  .Q cy$TE6 [w@ 7UP$8ͩH~/K'AlSV#v1D*2"VÉ VqW%k8Km"vvk7S(CcYt8z (SKb :i#RUK,PČɷԳK{1 ^O92.׈R,ސ15%l, R0ԢऀuPH(B ,JI^N%6RFm/2חD}BdžjVփںyG؇8#U.rl$~w߅4> Ce BdtWR s(h1%I%/)DiEh%m3±RY^yЫ^:xc#Jle|nn*~Za-2b$/_Δ8Das,@ᕈat6cwA׽bO` |Q QLpᘋfͣe:#n+n/ c{,ZHNh82* CqM)5/]7jd\ɀ5a0mjNr!K(<kgƁ0Q pó#C/"|fg!n`FǢ: }$ȔL8εOkIY&^MBSy5u@=]qCDNOq'߭Z`h.RQ(8 蝹FOf\}Ddx\Ad/XGc` T%~:\ip`)C zPWDVgFb@o)uXo^VAnԊlfOA廪6~*kzx +t>#.'r D0B 4'4d%xoI- /?7N ҋЖҧo"  YUn}"fNw/nor`#p`OE^3Lb3ǔ '5 x\_m}u<>踸]DL'gdR4&!$R{hyHm(SeÔPpˢ3S:`_h/ ^Wo R&J  5+T8Qf3J9.p(Ņ9|a2-ᘨ V=D9Hٽ/mq6)[#fuP]~Y|!i@ꇈ+4@A KF "M~p~8&‚P1u0~ͩxi/I%ҝ.Rs`6%Q%"kE(eRS,6pql@ƨcNELR e[ 9>P#@>{i0މmrVl p׹a\5AG`\#inh@~L/`.+iXeG`%%8كjɎ_/ h1 j R#jaSr!õhBE!!B}m=kVl8(nyn:k(8ڄuoq!nIc}Q Q<\xȞ'VC>'΅K>kco5\;$[4g➗TXbS3cp{݅Yu΂SLq<VOph.iO2p@(VNr#ȵG+9hȩr>yVlRÓ#q>=["+s />㜹N-S"e^qw0#pXAlO û4 |_ݶ9[ybT)@=T!#@f9<벛0s\|z?9bac.I蜅EJz(D)L58<'nWcטqkcz=֪kT*R-8%f 6?y®uJVaΨFu#Cl%ܮ· x5r%(ʺgI1W"(M -s];p4V`@vE 貰g ;~_#c z7Pi$w&ۘJ]a"yD^N-4, Q P/VwDV-~Hg˝ U3v/?(Y"%Kה0C%NejG2cV!" @ws\S ` b$Lu}bL9C{*hiugAPfsU!gg=0tjPW u&P2q@+0(LVF0)$YbWVQ5d,@Ma I SqU'1HʲuNH1!DB&siֶ9AQP$Dpy`;JeFdY<[|hL7$Tr?|ʬG + OzZ ~B6I4ч}$>nIՅ=s؆Qj+hO˂}Ӎ/s[t1#IVt䯌1s `]|&ϐ_"&4n3Scg3[30 9y gԡoBb0/)k!}ŗ͵WM44uqgo߾RhLN08= \$$'<8 3:9_ _&!/r/eRbűESMdj 87HU8yV]x6G;qNm60Q6Boe<4N`8g\iL H )e=NfBu6@)\E5 UMiԤoėЮF]H [GTy_nS$~ܘB``#{}^.|,gDؾƔ(L@s*e6x:=￈'V(W25)bk:\B}G P8XP^qġHm 8Ɯ^QP`s 0Ä$vְ\xIm2P+sŽȕhlFv3:f`݃@4X?]'k]C)`Fw#e6} Ô|7Xyw-Z1"(>bcP6P8ry(:,j O""ai!1{J3@I o1fAv %~MtLFT63. cׅM| k0!܄*LjOՂi38Aw!~~G?e_#5Mh@^s43O43b\Nj%w͛vkDfN]$LU 9~aVm zL'vr֤ 7g5Q Q@jwg.r+8Х|u.3l}8!!ЬB dSAozًh<ܣ݈cz` O9LTO3ýicp.` vAEt<>gA2EE|; MH68?J|*Judv|{sӿʂ"8xϣ/zGnKw@s$FRwA>{!WG2:;]4VB ?h1RkOLe0$!2L~N2Prr[ F09ơB\^6r-E3͔]gkg !eh{@EsYDfb-%ZXhi84 *oSpﻦp[pQ/b63s*|V ?iY ?a|nU Sq\>KTF3/x6NǞEjZqכӇ͟~q~L;ߊ(mOx) V>qOo]P d p ̿<XR}n̚~$5!yo?}4^1}Sࠥ:b@Q-3"Ύهgukg]lV#(8PQd)픆Fac%aS6v>POԙ`u9OrdjNM '_xQZSt! sV>dH >nvq(@M`4j+*"I>Z%>IsY>!fDSn+",Kß L<hiSnsY~&Tdg<*SQcǃj]f0%Pc =Zw  ?5O0Yz,NХ+g-eRtQɱ} 1Xt@? ~J^߈GJ뗾Wː{ (F·t.''Gβ<8a' P5: |p`;} D3~}+,cDP7ߔy)S0;a=>EtiF>. D@44 `͗>6*!n?$2+cWėٸD6 ڵ[{MTg*K:,26)DPۇPK0~QwU&%L'cq9 ZEqསr|vBpID4NYd+q)K{hL4uJ G8QB*n~noȆC}gN lxS`vNGƑ*V JbL,Sz# M9s}<7x k,Y)ˊ.>H~8+ ^zvuWi{Qux7 wUq|?j;2xO4DL"߫,HL Hө?IgMc4@@QymWwo`QD>B3z\>YEӐ[ͧI(+g/~{% m%H :ĴkNK&T~Uq3{.D:@?1jcL$:^z[M:@/`QPw NIIԅ#1 >%p3hA*2 0 c𝏚GyMME(2*O3 'Qu1G4!sݙg^24Ƚc(@k&{"|>,!m5S֕b1GHi#n߅`pi96O$ >l@{dQxGߞ/ڨ;eY>d 4E Bfzu}Jf}Zk 1  p T) #  *څfExmI}TYʳ2ۿCzAwL{oUpOܕ1hi1؅;h"*TC\P>iN "jo0˫.r%b$"NŎ?<% sP >"ٍsFASB-A3&Zr0DxN]v6,!c1 +=ۿ^~*aqx Mv'\Ycmfvf4N2rЖMk)"o/xu| 8xdT FK*p)Qb"v>$?>s$N *!t)@_ Z6gʎGC\ʖ<+c߲D<僄u,T 1fus'?@-AGb9JA B95YDJ@8`sv׽۲Q$\@|J[|o? mK՚e!ZU?NKRqϸ 'a1>yW$&k WO4&Ӑ.lt*)Nou=uk5|پy;;疹sJ~(SLn}Ǣ ,G0yY$s BZj b$Fbg @oPP]c՝2ݸ꾵fu="t )c6Em˳>:Dz y 3lxTcOV4.Tvn_5M)f"Ȱ܁JL/*ɍ!tMF$>Uɮ 撼Li!x,`H{F Էϐ`Y>uf 3vqf^oY;D˚tM89!_[4k9C S0DØejŬKxbZN5C[M/m&ÞF%_~0W˔t__[ Z޳WY< a+dGUgXfp_S^\g{of$`NTsݷ;A xWN8OZx:`}~>`C vctkW@H'RztsdovBC9d^#e\AxMc/t gn=eHZv?#nhHU|*ى*co=3Qvyd.UC@+Wh[ۑ[: tl .Ց9)uX4!:`tAL?^Մ!@oq *v %Kq ѨgY(E/ mG_Ʀ-yRD УjK첤4jù-/:TރAр@e2|[HJJ)xm;0Sahɳ02#*Fmmq+SS80!xBG3sJԫWڈu iP5YrM?\9J [OG]B^~9A8ZSR`2#®K|]g4m4Z)p[/!KAuoI>D#؏Tte.F*k `.Pv2x? ;D^կ8LP/&uf 6G".o"`A)='ҁO'WỴTV`[%=~+y2+ 7T c|ҷ3,yN8&w[q<4WػNqN 671I vuFJQ12CPMtتNHfC"= 3qp D2$_'~ hCtxC>==$Yqs̪]`qL*)\~4&A )P3dSM q^䊌iν pjnCO%Fo>D;Uܸ&uαmv;í(v@9D}ƧGÐ2GR?Lsu@"M۳1'trGsƍxD~ ^I*@`I&#Ct fgyΐj-_n=99ئj5*]0F0M<;1i̻w1t)WaqpDm,)8ֿb1&G{d0Q3՟A "€xHwxuWxϦDMEp1yLDG3Eu7GLEu3ָP@0" Ex\;öw=+nNaKNfV60h'a 1q`4h qr-1:K3H4dX|%YCdCΈB3 lxٯG7SII-WߢO/%Bʗ x ;z~ ,4n7|gͽ{wȨCĐ 8=!,✡s?{Zl1¨341#" wf`,r }z4pDD߫&eou!['.Y9Sv58-S̓J-&cp6Ld:]}f8 LO# r+"! 0n$d\߱FXh)]fg #r`QW &lcǟcZ~FO2A?f?SbB[ Xmc-*q[$s \pC3%puRU P2XIh.B< T&ƭtTafR_ꉷ(dnO=>'?|4Gf&cNbb:[- ZEwqt{ $KU8lσߢ =f&V<1g pqE3B#f:o1q0}Oʼ.7I%Pv gafa%i@@M'0耏$y)3֌P_5"ytMh<894%t'1iI%C,o0TFuwpNsHt4~w%/C+b􂧑2[SOfW18b&~6PS}sԴp8{<'Y1,L#3*/7Hio9T ,q1QBj⫴WҚS_مUdT|`ErD) [sL To!axxD9ۋ1w1_ߏ=.T(bCI FA`C. dWQ쮚 7CrȴH9O3= ӯ6٧6<0HP_Wm*GRwqFiPUuN3{ J<*op(sLηZ tj07P:g2{?H~ҍU\Nd %GGh!g3 )I'e @z:bvN7ξUGB1JfʾJ8zS.LDɳEghw;`}ԴL踿pf5k|<~IQim焩.o̓8Q}e|ep}Y+װK`NxK + zD1s": 0b `Y RZ:|",xS.HqIJ\h"X.*Ҍu->3/55ehm|{K1%xܚ ?17T`s̱f/$9b!/A: Jˤ[7R#qb lM2j'9 uX_7?ѽx'mu@,Erqlt= ?9)Kx P}qB=2o\N乢Y+y)t ks\G٩|<0;+<*]lñLcBxScV3PQ{+dX/u9Q_D2p&Ci_e?đΞjtsMʩw %P2΁QI־<ϵp 9Հ%dwp0m?nc1X5npL praT8=;DmQcI"L¿&wd)z|lRSk0M]lSwZ~qj+N1¹xB!!5gT̢Kr HojZkͻ`%߸KLM Sԕ L2s_+cI° ( "2ۯ]7_rH^?9#9:!g5`Q G0ODzfDN}ovY݅ L4;lwL UKASaA4U5)s \^c Nv}J8L֖saLĘ dJjvY7OwHdT6gY\+Dې2x|y5l"zڀ2ue(t5 TQ,Q(Y Ս}{m(q MߵnB88<$.ϧ0$iawX^ <eˋ_o xR Jcɨ^c59NeSz<+3DTr?P4%16K躚N_]y " mZF9 r}Ca;.$btJIHU·y݅ͮ dE.PCA?=sĔf_3BAO8Jc_"=H6b54l)!ڏAi /25הYh0E3']9 Qx aSq똤s??!`KsO3`m`uupuc!(x~j6\_)㇦Bc'"(;3c'0x!NYhduʼn 8+Sb]+oxý$v1e!S<!Q.8gO^r ppEeZq*r#T$xN hFTI4PPy^HE!ICLU-@QHl>؅=2f?p~,ם!.{D_}ϵe;hI eJyaAׁIѵ&~nN;\/ p@&4|MH$Bz|޿oo~m b#!vRC/V n3&لc_e6X2WX gauj"tsVY ÃYީL%?[Xox# 4Tpbdig׮2 q[7^XQ5k}HG,xH(7A pzˌ.n{U>I<ïdtT$@}4LJzSaaN!+|pH1Y=03 2t$.qVN52AE߶l09dA{r(9 ObP&؄q^dJR`M_7?E}vV5e8`>̹U=.xH|OfY)+;?2b[??x}|fZ.DMxawV4f1Y}a)CtL:Js1=}<OapAj% vu#kCZbU\^2p! h;H.=T6| 'TMR@ :JM9`2xFFqha.:`m9o 1wxh JG}7mBamI:2*XKS9 @D6W \ASOM(m&J{t~|nz/M g 0aJtRoKvWI= x@^d:/ɩe;3?dk2' ۳͛kF B̅<$@ )Y>ZV2{ƯW*UzQ{kFIZzn}cud?A޵5\$4`OJ~s^af~3ڹ ё\ D {0Q  my^y@?Q|)o#۶:w8cmF#9GR4)t )rE+ioKT0e%A3'qH./a88LуTGhl%%n0ԇҩ6u63rkdiexDP(֟]n+#1d "uIothRq9O^^jr=c :,C`ǩ %6iûc[ڢ^@^t.:TޛcV/ґ 'CgJ^\bg Q>%:9%1t f:sgt, 7IθLc ɻxm)9[2ޘ|,QC끇=jM^x/][oUK<'_Χ\~q'(A.gdnS ,6 Gjw0/GA7 )6Gn⒊Dp2ee˟4Xx&}):Ez%2vs'aMr)5meE!= L$㳾8Kn }h"ʼnb~Y? VށG|}UvͽY"01-p@0␁^w^@3\50,u"EcBCݻ̈́5/6'`}{y?K2JGW :B' Ak-⸽R.c 1WqQZslq9wJЍ[ 6n pGΞZ@#k/hh0tpE#c s[XPIG14k2畫gO_avIce¶ wcڎ&SȲ q}$B1{8MMo HNT#kc=i?/C`Q2JX kpi+ɏRBgeDŞ_~Z?dIjn _xbA?TLé Rɢfřa"8.Q#e4Bbq)O>ȃ c f)3).옚:caw^iTU/S$ pܚ% _HXæ A7ENc:%UE/"hJxgwV&MqxU4DHnypkLk"-H/dm.cXqDW3XT_ AbJxmGiѺ6ej&8/C@ :#Ee"!:#ۢӋy=pܱLg.';M܉ @_&ym2^&߹p;$cXzXaQK gjd1~&:.8ak9Gwy1>;|;| &:EE8%lH#q@boKa7ezBU/rUq0S}Pe,z"K_xDo^ZJ||lbq T^wrtgVE7!cajc'?= TEp[_F_9Sƈ(ĕC٥W!88ZAV3G<{K B!rŦ?ę.JY6EuJT//ذc4bK!-8D'28CPQ9 jw_;f)ԑlӣBcUg`o=fRUEWᕈn s ɬsSf :S h >A.%Ex އNH$dCyWM!{n~tU:EvP3)ɩB7 IDAT6$xq82;wW6DP z5Ĭ5WZ>J𕱡9 nsqiMboer0&5R`cre mѠ"'@ފGV dAMZYyLH<鯝*8>8! 0eBOLa!{l2%LC0s($n) >[)$ m?Ȍ}=gQE̊pcAN )${l9 ?MvNJڤLAZ fFS%ijj#uLBPLM͉{OYƱ`Y* `mۡzJ* 4EWUB "(\FNa(< |U\e a,QFP&_X#}:;35g@%ZoͲi"% Pžˊr;ome r>󚷐P j ?s:p8O׵[OL | 5 `5X"t_Qė{֡fP7ya@A_ AAs_?fLE:4hI&2H/Hg Z(>2)^ż? uC5ovW; ;> Um13#<VX -B ɑeKL$9W,/O/1z:H&l]`Z]dn4&غFbOaJ"(Z iyF/f~ dfKmGFDmjS>"M(V3xV^\,/JPŽ:TT_Ǝ͉2@rZ 5'n;jB+s!5 /K]:t;Nґpv>ۇQP&Y_⣍8)})3m)ۋ_3x-*7q 'AZpf1 N[@^ tί SFL^fa$87h$p-*V%8yD,+Bw#ޅxG?eY0sqpꭕ`C4#WRvYpI[ B&yqDж\| h#5'4{3%J| 0arAC"˽3v*`xeZUfڃ_sR]vPmCugAwH[?pGfq7gH?HD;`u~`V#xc{fȝg=,;x3W9Unx4إ3r9Zd;@fi|vL)̈́L'ޡl(#Է!À1AB0D؄7?%X~|6;7_ F-^d§@8 /%c*&˜D=8fa"`4Z/,"9' A~\K$8*0g5;] 7pZʃq79Ugv/(反( )RK$lG@FB #Z$\@@u'*;_gtT2UAfGRR6NL[Aݖ/\EBu^a&tcSs"!4ݾ^ wc$w=gIBi %$\xU qtv,,!SUL o 4d2072ǹ #x)OF*d&FDGS0iq٤eK|.p.6"p_W(ӄNsΔ?ddxW kl&dLxI\Ѩ"ᐾF{ٰ3p$^Xe bl:$ jk"hrexF$&3 h⟲?Iތ@,n&κ{H )K҆v5 :/IEgdb=zx~pœ`y8\  Qp62@& s_o&(yoa#Lf~#7 `8 [r3~BEd+}l胿kn,!!<M/ KH ^"O~`Uqf ^iGR!o955f5M3PjeRjD|.S.Jjs.~`051'l&^sRSi/tn &e7x׿=+D0 xVׅV{-[4c/g{eV J >:϶UدxΟVyǸ6-t,]OkjTM\mŹ28 5.8)!y.}XlgHЖZi(hF9;w4b H_A@]P dq"ԷM[5M܎lSBrQ3um{ϱ`ۜJBMd0 iЫ'Ҧ-)= peW Ca<')EQMt]A`TNaf{J#-n\_-//tj1^W90Fie\d!4 2qFN2SKسछmE &G3 sx,<!jۙh[u({^57We1 .>G'9.u.?s@8}c~} ks}xi&koO2Sl5-wyAwwpnUMqHNAF2WLfYC;' @u#IS^u`=kVXpc%K߽yy5G@!(TDIb!#EHk'_0RcXgDB)`dg~[4L__ĔՏ'pd$ e=eA?ڜzDh75`e܂Z#|eI![XQb♳0`IŔn<Ѵ`u^Q蒃/,f!}~3F>ܸ֬_Y"L?f 4+EP ^yиCʹUɕ5rg/cH,4c_{+K&PfS{ *s&q@:qιYfe6dt($O'JqщzPMtjBW@2:;t9J 9sKabO䟚>F"GFTVbft#r ׃ׂ0H}*dplX՞2܌LOҺH<7$)ہS6NJ0p^2Y~,$x,3໦nj:A eW۸&GͿDQcy><2 -A@Q9i~S& έWC@y xNʀnR%醑м澸+ $`E/w,USgl( n0knAT2Ḵ5dR=Ls!2_>:l ~%ݺ};RzU{h|=cP|kاH?m6cψm6䔝kD]ҥ;cG4^T_@*Rj>d? wAs[ A CBB~ Fh7C9O 1Wt*hkG16_ػu #1]6Ê@B㯑N|?ersPrNF16>>:w}Pdds8^xXKtFQJgOsD^?vT\yJv#kV Av[owG31?0a2fƤhz' D@NgV~˝K Z@0dRRwմ1dcԐŮQ+UIS?HX NxhwHۢAQ)Ri+Sx q~Y{470Vs-@@bkO'eOHqO&L\PA[vءddaN꩷<#8y6ӔqT\jzkC V2V,?2 הثW>`gfP$`#wX#gd𑴪`uDwo;+@& y-b"0aA~Pڦفv`"7=vhe!S`v{D:wərX thTt,Qg:8RD l"pp} 4gAG8p4ۊo@_Ld2L`Ҝly%h ^;[uC}=1izlPF[WD0.1/?_F(C_i@LQ|zc8ս~{f?M5đ !p85'+~&S ”2o ]Fzo}T^uZ_M*c% NQ]/sf%(UNyD@D͕~)69*;qϦ* }TBoDaO_|ZzŹ)ݼT%C;`䝎 :1 MA/ٔq@t+* 80F5|8vE[np SGLCiDD'Q%5"$M!GEy-w;_ 0B;T&+p_dj:3Q'ed_ RH|ˉ2zDt}Js@^)G W+hhs nL#1_j6<8g6.fhĄEWWzc "kO>*}d8ZѪ=/s%g=yw^unYN @c\T@j 3 )7!6e)&Kl]gB)M*?ɒoHT>CNd0!G/1Cf$D#&0,ً?3f"r))K1C0͈llIrsJ|HF"kTCiA˯|N?i2B~g<yOYS"U|9jy}_L}&aY!)5Xyz/(qfm5Ae0Lfxx) K(2N c-U}LBGg: *wzѩ.U;1hYI'|5 3,U/HeʓYq-> !" % hE_'`gZB}J }(6e!{G1s'LR_G3R  uJaHƍ0F:X5;怄:D( ͔e.U+a`xu.59h5/r,)[*E7Ur90u͞ttވvo @tbj~D*₺JTŵ*jvA=@3Yzl`Z]CЃh]a݀}D j sTJ|')PaO]R;аstgH!Cf/ P!BF5e3P^D=';aZpx6h3$Fp&j G7 ~^hs`,;v 42|K벻"iO m2M+?wiuYtxM}!;qPFtٽ ~gD{؅8!ğ ):eήƫ;>)<1Kخr$LNUJV/`3>:D|#tUU|p]髌v ;;9N(TA@vARơj/ߩ!e<&H~Wf0@ `C3ZEɪ@jUN jמM6HE7 TQ!%w #xVX9 S)>t&~OZ)H攚@o@Ȣ&7r2R{+R&IDAT}[" +5d(aI}I_q qr p翾g@=Tl?& N)w3W&,6) j7JҮ7LO})@8%7'TwG9fu~D8l1|Яu tcAS Hif$HMa s Gv~|/2iaW f]4/Xß p=Fy.틿dD)ﳞ@ sic댵FTmlLမoejPRl9_MOM/ׂu tTdO_4ᰝ0`0m'k3{w^ALU0 j%W[xU]o+|ω;VL`5-]1`JSiBfH**OAMf88ƋKP΃D<>RB⼚aEImr\i|5> eǫ!Vo&Vc M9&x #lR?@:xcbW ] LKl~~8oz T U&?Eڻ9h y]rK_\= #`aaRC0c#ga:ӱn.(p.Nx ΝfvIC?ܗ` ,.J[Mc~B/V#-)Oq+ѥRO{{i,Py}eˊw^lKO]7O62rg1 AyBAʠ!5RwפI ~Q+,Lכ!p6>0=+mGg6':+رt99Uev }64Ug߈p]C4W9ͦ@in4@> ʰa=ag@0•ݦ̸m0`>mY9X- {-{=K)7ե|ɟ;0k1A|V{. 5bFǴOY*ɉ%8grF)Ūsa8=a#!N{Ln%?A^@L~%0 <ƪ2jq=&>iCbMVs~S]!YfT#GKΡQlsJo"q; 0s \aN L';`[|%v{O;OӫʟyȣyDԹdW:3ȡ ND%%Z>pU,H kos(򹧴+"a\XGh<0 N],#1WL|{q3q % "Zn)З/yt<9 帔\ ei/̩O>"6h> 6 .^if_|q3g5IM$l)SO5ڈ>58꾻xy_4N jZqk7 ,uUaєcq `ٸ~"f˭;hKUP%S0% kYY^c?iA_^XEP/,Dnd:<\gD'-aJMcA4'(I#*fL Ӄf<<-ԩwT@)l}N+ ;>Z@hdJ ~ŶY}uA9SaPlCP*-cy^_·}$ӂJڮOH@de̔Q=qt'2ŌOwɴfCdX @S(n8pQ7YװooH~ Ϳ(Ďx&.f%O[BPڛ.|'*T @@7 c0K.B N J)H-L#>qبd,B5%n3Ocq@H=h|Miooɷ=ɡ!/p}Q+!T=zEC徧?_?}d]aatc'ߎˉ 1΍IJMӃ%SO\&c"P4LĐyl}Lh5̑[Ǵl;'kTvkcq)Y\\@[<W8Kx v$fiEƐr%?}s)== ' ^OyV{> ˓KP•k?U@sHna8} .$9&)k4Eٿ{'>ܽ4Pu5aWw֛~06 S\٢$)]7q}04McX+(PTSߥ_GzQˎ{Q"J#uo/w{ѣ|TWQT7 |A2M>:wT`wF%jn~fF\"uA;xECYto.9U7ʰ;^ui^Uo,И>}8}]wW}w:z65Hg13Mܟ4/qNIU@SO{tr:)(r2[T _+zVhǣ1aoS}H>/qDƭK"ewA sѨL檍.C:%~qe;nZu$CԮe 89_gmZB\O59-SĮ!.sT5cV?o~GAvK=w~lU0G|y`})Fk*d愲Cy}#u漸q2Pq3׻gwկ/e76659\OxIa2v~w;0%X=JBO,O9{_3 3(𿣶DsտK5fxpX5Kfvr j[2D @@>6ȍ5w.D|1ov. zon ?q%ϱcX_ hE@,wc;³Ńs?\d?=b<jv;[[o-N~/*A^1Yaޛ1(k:[w&yv|RF8 >x!v;iht?,>$5ܑf8`?&1w7IENDB`ic09PNG  IHDRxiCCPICC ProfilexTkPe:g >hndStCkWZ6!Hm\$~ًo:w> كo{ a"L"4M'S9'^qZ/USO^C+hMJ&G@Ӳylto߫c՚  5"Yi\t։15LsX g8ocግ#f45@ B:K@8i ΁'&.)@ry[:Vͦ#wQ?HBd(B acĪL"JitTy8;(Gx_^[%׎ŷQ麲uan7m QH^eOQu6Su 2%vX ^*l O—ޭˀq,>S%LdB1CZ$M9P 'w\/].r#E|!3>_oa۾d1Zӑz'=~V+cjJtO%mN |-bWO+ o ^ IH.;S]i_s9*p.7U^s.3u |^,<;c=ma>Vt.[՟Ϫ x# ¡_2 IDATxˎ%Iw~KfVUVz3W \40 Do ~r%!fCP]]ٙszgDdDgFd1Sӫ&э10b`#F 10b`mz28;Lۿ~{59տ}]=#F 10b1gwC>z6vdr'm&/Wz7}|O>t9t}r:=W q G7b`#F ▷˳zO/jWWb?jnF xc |춋vy6/d't>fter[G 10b`7t?i:m~mwzb;Ygd>_5J@\~NVtݯv|:IdNd){*0 -+_10b`εcϟ֜;wFyz{dx3=q]o$t؟Mvd{[O׻9N7ĻN  =]Η/5ƀQB DB?#F 10b@טE|\5&FX϶gB~쯑 ?Lb-LOf'X#3<'}v$NJ):aeJ>10b`BkTflgὊfxycz:z/'W'߳bcg9Vl}2n~vz<?O|',OC0=% b@kHF 10b`b1M\+Z+|M0@26or~ŋd=mÿ:(l϶g-+1/?;9_GO?Vb9[+`QPtaF7b`#F -Hli|o7Z]__|_%|fd6g//O'_?ޡ\v{[Ovl(&Ǔ_5g d50.Z3b`#F <8`]/d{{_\qv1[{>~p>Atvjϙnf' Ox8a3 #폅~ -NV'|(#{Ɍ10b`} ;z} N; =;FwzOvYNsK/./N89j=NWtpx@W:O7G t?ۧ( 3v0ڟ/8yr'N<CX#F |`+ʾK$usPfg @,y#Aw Q̡08 QV?A^}^=|ӳ^+g'ˣʴS6߂YϹ>N|g|Xf'Ss_IbgN=Ϛ0Zzp߅N5JUbdUAjaCXfp[n5Sȱ,K?e(~;5iHZp M3V| ڷ j5o 59[6ӫj=x&So,B-T݈#F ZBM^ =o=V0Mݮ<X*UQ)PZAzEɉ w 6QνQs0"aĉET:- Umvϩ̪m[P[Iԣ(R?pP;(yPlHKX!m`g' &14#F Ur5cƶx?ccW@"f^k7ѿX~¼yőq]* Z sPP8"-ԯa d܇ꎲWYe[sVPYrg>Ku]@')%(ɑ +!cZ݈#F )BԔ5/"7Wo@øzqv9k}i>pb \pX +"~DLp;鄱&`}^D}ߟRp^#h(Sue^nK#7\K;+>'_ڌCY<-s}V>B 9YTT`m}.thэ10b`c@ݮ0疿,l[ aÄ`7_}AexG ֣ @ /o cBHQW]@鶿nJA! Vhma8B!ʀ`5e5'Qi̙AbTtTSOPE9nG#;[aޏ=bm*ݧ3&p/tww?On/_^_€Bje̍wd˪W2JH3/m&k "Q-&%S}lRW}Q8 T@owFmonj$˂:Ome8T/S. L8pcMS]e>r tB .1*Ю_@sʬi ga[r*#c!%,#-.?5]vۘWÙ%wO=|f ~Uro)n\_&gO4 #BA//p x\ŘL >b@4(xo)WN6`0`CHL7q=E& tΫ?Kxh* vd a&u( a ){սx'̼zYN8}-jQEm*?mK{H+ βzhxb9tZ໐u V-rPZ7Q(]+ ٢DVwLxJy#xb?OPf QT@-Nl7ד漧L V2G nqҶ?!R֢p},`1oZBE s(89?t7 |_M+a]Sػ΀xS_$rm _Bq#q(8-e>ﰛ;P2O[>*cjoxbKƖZŸ(p 3؄)9WgYƻV^1gpG&{axʔ@×5{f Wע`1hObC@p(B9-9V`͈^k}o 2l$N#(YynyF=`B.zZkZ\z?[' .[9JY(ιjcq_+k8 %@J<')ZvP; H;#}hkF@)`D =/ B Epsk>ӯZz!PPu<_W:')@ˁSa >#A]&hߠq uKڌչQŚfHxq9؁7͌ZI~Bi.P*:>T&62aˏyx#>8qyGA89tk`c k(ڤo@盍׵江gW͋ҟ/}ElKxyo7BX 8>5T98;.pY&Yp Sz307Γ46\ ōkn}|¹<; ūB)@ȚU bM\QZ%y[cwT< D'RhE(@ $F]VxjmJ4]u4O c%j+\ucI+?ҫܡ8{l *#T^̹ #.ιqh,9)#GGeZ]baZ\:Pgk[7@,>L^j wH;}ƛ.NZSry糙pa7[. B!Т} GKָ`pB@?LCɽ{"5,ea%S+FzG.o8twG ]vPˉBgP5e ^Ql'|X3vwiwGt#"So*p/NPTP@"4\9onCXˣG9@"37sʑ:#$M+j^:kͷ,$G@)4[W̟4U6|Og5} SѪ4+ݕw5iP4ZFKz=i?#0K6~ގ`s@ҥWdrҾK3m*)*GpI t ƓJp6 ]iy@EiB qvY0H͊7ǹvu"Ams|͡B]Wϰjpz@P_Sa@2ŒXݾf` ;0.ݏFC(s 3=OD_qnJ ^ϤrKEbI.T \Aй38Bq6qar=n"9a<ꓰc+KyJF#Wk)n郅S!^@̄7ۖZKؚ< 09eY]P)8UߏiG:JoPiTk7{4@U @MG !0 i)c3wUeo"}_1M@2*;`sRAN5QWSCꔧ#wq#z cG?Zma5>@,|_Sr{GاԳ 2#&<Ͱ6RMEMs45x؟QxX|~gj% 7a.4 x$rC&R ` e;1Dy@mQ`dҶH|0I @5aI_.cK{paNϟOn5gCIͧ5nUs4ۓYLg>9cSh[_07w\4>I'U"BG%]طx`׊GE4w~+i_W^B>C\9`FM7Ρ2ݒ?d}0 +33=Ŀ8pt2[ 5( @6_)yM }YVwsFn7ɼ2uoHRNx}"0 d|EБ ʅ+Ϟ\KG)DpK8xdcWc!?VζNTyx|݊)e(\[ h眦%y#Ldc00ꐾ8KgE+$"$)oP46=$2KiM)*[q:Ck .yB2nPn'p;4F D忖BW9n Eӧ틡`q<)H΁+yADF,x0i=ڿ= (ʅfiO£%ȈiY Sm=u^}yE&{q5Ek꤂EKTxPya IDATVmE!e)Dxe>7^11h_A/oyj LY6"b3 \p.rWwToZ,hx$fKNީSi:6yQږY F-89¬= `<__~" לFOsM SY f-l*гt>MZ"%(҅fCJ{[\4BB|)?y`/ Rp}XL[[w\x{[ȫ#p״ M +J9H i: E><ЎU~rq*{+ ^O{fU x^?s`3YKQ-,S%xQxg~2С5LS~ Z^q9<5T,^~!zGjBiLe*x\Mަ4G7Undp N;fYN'uȱM!YܰYh,L1%02+$l Ds7-E(Oa _b0Y>90mGʐ*Uɋrj4 h7nBK.QFѿhMf3-'#MhB)Z I'S9s oy@Q 1)*+f:s;*TG ݦ7ߪh0Eq6ƭ{8^2y&<6\FbץRֶ%, T\xd%` ]wu1O2q2lu,^n ^NP;dm%c<}eBF5@ Zl>roKf9U:u\X D zL S2kH~e aŋ>B;mDBHGpޅvN[ MƧL:RѬ{E֤QWGqɜ34ua~PG:);s@,/q+"Ӛ˳QsX/N8 ps]+`qzq5<~VϼIx%)^AIhGٴ⡥BX||>E$֩Š+v= ]j2(~ #!O%V$KxCpe!&q! 0/Um|"@v:Gh}y5ҤŤykԶvt* ^s&ViN#I- ? y؍/utJ]BmYC>,='a1mlݚ 0(@2¡ذWɰ-NJo%X)z(%1T5cJ<,'+%Ghy֔%@<˴ąJ¯7'0\ޚQx D*뎃8.RL@IC8S#$4 jjB]-D@MUN&/Q{LB2%j˞ 渗 !+%h.E?S8x}/.&o'@;眭-Tg|]='& r40f~Wnβix>~aU<'VA=ހ sK HqX@҆2yYk;z/C\a;/oh0vX7&DŽ]e$֮U&z9w HKKKvthw 46/H:]U L]ғ3sDik_py0&h[Ȗ@M. \sldV[hK)<8};b2Ǚ~\s3MG(G3PQq ;Q(NY_Eih [ρb[ u2aL(\]z3\ zSgy er'CbxT:5Ж aJM!&NнD6%5F=ғV{GjYV;c21W I?oW|_sk\^BQ#*iΧ(@vLPFv[ pׁOƴbY{fedL&s$np>2Y*dTb2*o8#W.4 @q?#Eh9\Xskج7yäO4(M ( bAknO*Br ]NX3rqm]G Sط Ge>ԤYlUJo'pD{RBWAZ=w]ɂX$^[MCZx \ !a) 4=&D$(|)Ȅ҆ bb!L"PX nZiȼw+hCf`x;F;~;w[/ۥB@,$huoف$\k{Sw]uQCZZtZ,u,NKxY%a|\he$ X@k`F?[f#JxJoʏ2ߌ#À$u߽~D&40ɥ+}SMI2r V12,fsBjV@iuhA5DK;}P|r~HhW9Qaa>:(Hb@:gX'GS =& ~jx{!.|R#O2hpnC6 lDK'=Ϩ<","I=}}0-`$,.K D[ 1ˀ$Vә9BUyqH8(M3bJ*M|=1aI>v*\v+ 6i/mPu@ jBGeBh7[/.sAN^\/djNpך4dDBa%̃oKhx[0;? mN_vެ:T2Cj>yhw~=?^ 4 {/8A OЦ}TzƤM7y˽orh)ʶ9_hêEQG5n$4Gbi=vNGAS{ >H.Bݶs.ܓx=H>HG棐wVܻ\}ZɃ^ܦ lpvpkP^wT j0o[6+$ ﹢+I[_Ҽ0NJKC[ b PKD"K RH I4V;OCvMϞM~/Pa{"%x5^aL!XL-_,8:KHr)O8[j_Bg/XTyz3zA_3'En_|eix/%&RG '(Wv|2#ɲ&;&@G[ztF0i+̂lw? ; w?8∕˹C]J3ĶO#@nZ@}|sС_@|Gus%s+<4t}Ku?,oϔ^`u"#ǀ/C:t1"F'j Fhx60챂ZTt)-o9+(pgS*AAV9Mg **Bey t6ڰ> bLHz/ֿͭBt5//p5;j_>n-WwTāx ;j j ?d hd!;pC|rP҂IS䡀 Bԍ{'27r']Z2Tb2-B=FM9+IDĽe ֩emjla_0qR>x=? HEwk*I:}K-K|W- NK9X$^f欳5vnQ"gwƇ6,*T i]9<,< >dY& :ϸ;+ww ~J bn;Bz\aFQ G!y3_CMt4pj=5KbGABM'<-wO5&,sŋ̻;ք~BNdtҦUXNs毀Ɨ4$ Js Ȝ&Dzr+] 8ۭgi}TF<)m X+Z(Ev+6ψZ`3-8m}>W g8[ɸa֟bG\7z% $TK9~F}=HL>b`c&/wlN5ʇ-xx /ȯ*#G]O\/F_ȠC.П!DN7b )d$)HW@C" VsB Ss┄ Rhxe* 8Q. |ds{ML/3@gMk ,n4'W|O#Ǵ,do)ūp!- syB[ƃҼ0OO:u^>p|_\2fu`sb-Xp4T^l)^[߻::<ɈCh~^SZq;)dHp`*Dx0`WLJ4iF}%ar_ǩn 9 =ݢp;CV2?8iן/Ծ"?MК9 [.z ϛkC`u|s7JC # ݒ~,55LuLl4iR28ȵW' ,dP lK#=ħLa|iWetߴ6<{.(1 gOHWbJ.%uwDQ~ˤլ9*E0)Y0ˋ:/*GpQftq2Bګb✼2jP!&a€ۡ'e,|jXb2ǁʧĉEEcn2Z|^*.O&Dž"\)AB?SJc5!ΰ?f Z B+1fo319<Ϩ< 0E_ #0DNEYЋ 0_vkx;y-lmBਸ਼4hRM K.<>,*6$29MA*٘ {Qig@rbEgW$:6>dc9P=aυk,QxP7">Qpd Ox8PF2&{N&CiW"a{3݈A)0M@$˅c=w78DIfJΥ#ZDMuQb`(c®K)nˈř$ 6lNۖZJg'~0Вp/<72ptdL=+W'#?K0+Æ#"t$*H<~?;Z?RW'o?YiƢ5MC}ZC( YSd{`XU"CKcj't̴×E}{xߨ[K>j%xvsW~c@xJY\f Sh]O@\16][NO1k2oLwdѿg,Cf%#}]-dsh@`*b(QI%D;,{ f}mRldW1}5 QOBusc! Au#)*ED>3apWF] ZoCkB^8ٻ,l,P70K d ie@ybX?O ̓p,R~RG S\exֱ)]O6Ghr!,=ZxL ~"ћ(/=ajsiOF9pr HG Ǻ(Oos?"}x}+{@5 %z r'D[{Ղ2$&\JVeLjxZ-+񞩵\ޱX_0uё:sh %3s=^w?Q|vo=n <;J}1sr1y錛Ga)dt>x0TJ3bL\0q-$i\1)B}-R;vCPqu0P o`%nݎ[*HW%ð*qI>>0[B==Lh{X.?3%ûzRPt!"]% ߼y4VSH4R3J@ђS >y A** ^<7Ŵo[Y~-ly;q{/Ϧ E~ \vuSV#tFtB`5 PiuK*sB- UZ܆wı2BE)X ZD #yA*CF@+Qa.d2ޙu,{*n[|xJA*γTl-:{ Z%osSpSE7-p,ڜfXѨiMwt0lVv0XxTۻC~󲴇hzVyG VB?#ۡǤ~ wUĝ&NkuYtk.< 4P[yV-;~J ΟoL|pzdC(Su uA |u4,&H$6*oTтk"4?4"=GV[Ai??a>@KWi,`Ϣ<:p b.Ȩ_ x`=0$JŠ{:T*0j1 ^+eihy&#u{y#rƎNާ4).1ɧuL{򳍜SԌ#Qanhp!@l8>O 鈧9 Hwt"zoeЪ4گc7ZNъZ&le!B2#.l]֡WJ:}Of gv%Z[Mgw,J)Sry=|w£"wwƿy:|3G|'C {;Fwkq/hPʡPlu!KVwG'gJb/yh>;ayqm|K_a [RD@.{B|b{G1DKWiǏ4|E^ ?`oQծbcHSy[fAq^ʹ>z໰d4^x2adϧ /T e"+ ZHM ;%Az(Nޭz.1<2ր, :w% ބYJ3 K jFڔ-OYtEM=h rv"S1(Z& =^U1[W #(x3]p3#I{"[B.OKjqa)ޮ?4I% mu#ԗ?3č Î]Cʤ_eot <mz:26IKoґ\Ȫ2+߈_e2#,sɀb|8D/mHaϠN ?2Kޖ0·gcg 4g,#mқ<<;QxW c1i{uaoi  NR@x s~E}ng1 t0w g1 -<n,5t$O9#>> ef3.:8q$lL G{L:%e|I;uE(9SܺgN>Rx&.q.0Yʖ.4x.%]s)iY*&.dTkJFR>( Cm/8jqM1{?-$ +%2EPB[<2`@~QG%DyW)F JRpSU֬0YmDZY0"wbë?=bG;0YRM؅EFU`Tǰk؟;f؍a+*IX1BXwLW-ͻbʳ ޖ<T5'"ŀ,Zrqf|4NdfUPz`O;F`QH]ِL+BC5~  d)ڜ;x1o>P0ӘÈiEƻ%N-EhNf?퇴uZS]͟]{d[9_ L\@y xc5_]-yi_f{3-;;hp^nFg]h 3|c!A%KJ ?zGO*`>}?oh!'LzA=W /hZVӽkuPX8} 2 ]YgGrJVr%i2% y7%wň:m2.([AxO'xW!~%|jg)$">e QY L @F2 d*݂ɔE2g_F8˲ƚ gUmC۝].5IrC0#30O:#j{^L+#ZVCW:|3}/ >%8ڠwك>wZYqG'w+-o%ii܏0Murdr a@ = V{ydsQxp.'3VL菥OyϷPo :۠PҰsAxl)J{<A(O\ҵ*DPzҐXN_"nnTC} ~ߙ~ hGb;x,楆qM#Z9U6<$ Ah|G eAk B F`_< DaZ;&=r^ !]S^p{G\RK} ٟǖGw~ a}iN2S?˶=ҵM 9JCF\y >ʼnHMΈċrb|epsL̩d'mO"L[,1D%S'^'ޒ/5]??ZFbm1Sz~< %SJwv>'\BQFe'se; Sh2 $f658Zĩ=s5[vx1wQ0|5 "t/ iywCm# s)b=[;f ;-~:O,UzedSӄ6nW-o {.V ʂ>#qޛG~ѹv i7ivc^/xb=B,«=! sfT2*tgN# Q,Sx/cGad/m-|`(\@ nK (AťeI[U"~BG0 ݧ6iԮZ{߫EB&َ-; >H5냋Ũ }!ԑ YjsD6WiW8gxw XV[KӉNZ0*߁ă`!\i=c+""23߆!WM작/%)8V,|^ {H- M˟w(Y֌P%xY} ‰iI{^u߃W0u[o8/j >*+R4twuƩW| OP}l';е mB.s:c%~`V9,sX,gpG j>i/mM|Y,YEf5@=ɦRhJ;{,D"!̧7g@Wj֏[0x2 6;¨]Pv/a[_zҪmE" n0~1~ҤdE=Ѥ"+"HVVIFwLԃ}-]`N#Z?ri>~@s^$XڶzĶ5"l3pE( c&9QڞomXs&m]qnۊ-X ] 2e¼:]aT{C7dF+X ٓO۝DP&sݫM@ ZaB016 aFך*KnnįUNTI}^KMaO޶R\u& }'=p\\_ b>eDž~w/{|:M2޴=kH-sXћ 0tA Ax>)s*o~Z8E{6J a ݪo!'x/E[}` ш iY!2v;t{[lx!tȕ7:R0@G",$?7 lGڨjrޟ}WnX_ tDYLsٗ /Y9\)9P5'?iĪmF>}F`m'R?=~zFoάзyb96ɂ>H<]#<qw4?lٺ5 ;aUn爕Z־0˒r [i'Hc@ {ą {"t#W ]BL2:Hj_w,<<wɤil=6gB<+ص@3' ^7\x!f~G 2$ ) $RVߕWI }Fxg6=XCźF?%<$~)c4azpun ZtqE ?NVZ! zW7*Še:K{ū=qh<;Qھ-?Ms[4Z}؎=)К}/*t q׬m GeJhw}Kz` "-,Lzߣ?BpݟLMG! HˡXo*DE9͓| }fJIhΨ_:*u;#Bv`;4&pf50v_#P85|M9%IG9fFWK+0&|bU\KL^8\ Fձжۂ漫,HtZ#s)XxvX2:6ieת@gp|DZx}U|:׮pyjT"aҀ)(h!n:`+1{ޠd~77  FBv,+s( a&@Ptxi~ޒ(RPҰ ]^2FHKtGDmh=1pEI Rk5:?e#LkiꛃSh1_#Y7 {x~BZ#[lەbu"/ҋ"tCAX|RV2j AƟw@#dݻNQBی9lOEQ&:犯5tޙfVa<.^LC{^(>jWVL#\eMp.`Jp4N6Gkd 볍szixx_?QwT`M̋ц`#!6xGGհcSn3§#؋`"-TO;Oh6EBsg`V k PxAQ((_FAta )+4*w !>uSe;E:C/}K%.HhC/au;ԅgA[`Glzy6W嚳qqdsB,b1oe2 ׵!7Wg yZ#9]G3@٣nٳs̃82$yL~&]uۋzPKZ=陦$be#w)EyJ'hǓsblĺ*(<,!{a\6+dMJdr'gͻYS # WxR{lCᯠ^KOL_!28c v |F!/WCޙ^Hͫ˶ڴ ۼ+饐Dॿt+zy&Mv?^q _M)]rGT9›Ku_64K*<%I<ר[TRl Y;:!ᛟaT*~-}/.#cSBH$$7_M_Ss5EPI*2yhȭݽ꾿}gگs u0Dz$%(Xw} V.٫{G C}O #L=}@+i&_ Ԣ׭? sen،[Ҳn`\+!BGDDw)^C͋J&x5%33|3"Sc$Gp(Th&}4 M4XQfﳍXk1Ѐ)Әpŷb;b>k?WG`,3\%/T*ҹiU^]51YzzQ!~X0\G_Ҹ cb/..'ߎo~wk&Rw0e$a*s ,Oh|/{QţD@; #^ԥ‘.h6ԣiXy:^0Cb3{x3ޡ:9 U ce27qE5 =ہ~G5 1=e 9g/7oCE%t kMt3͜K(<^1uτ\5, ~.}L6m`Vc-S`),"4*t -fWj~AEHŏE ƍ k`m s]hʘa&dr$GԂMrtI?d2t!4spk}g%ޛI呑{{,yRfEdիLGqML^>B=3}7 *!0H換}ǰԃ4>y  ^?6OZ 81 s&U4FK&A7),~?(-J3ogܙ觼_Ѝi{1~M t]^}jA&!tϦ0z"|#ƿ>ftog~汽ܹay.CQ;\˯'';G@ctp:#m:ceQPP82;:gSI:}*¹W8{q(R*]7 |ox/m\c^)"S\aF=;Yꔌ)܍)_CA0fZK po vQhڎslN<}?4mhySwKK.wt @Ԉ`^nlakGD ٺf^1 R<8FG*ru(/U3P{zRX_? 兤(_H'-FI[@,HRʳ7L%C;M"ֺU|uDw'm7XD }WK=Urw\35C%܏N=dA'G~pX!V3U'lT迄S_5sdyq-yaG>N D~tp蚵e ^?8PQ$ =rWxODzo>lywTi7ӆ -0'6O kҌ@K#kuBEdo+2>~=tP3Q^>/gD 0 0h/bYygZޙ1 "qLA큺,+VLk-H eI]B">1&yvat` B V+H_N.0heLeWhFvEvI;G~6EiD^n3GG!!7ui}Y],q^9Ҫ w\7*- UG(Ȑ5Hr@g(B ̖Lmq,,뎝\gE1)(D@b}.KnЮhNȠRϳJLT> Vtse+i|Mbg)vwOË9]VytL {cVr?܍ ~Ok-vP3Ҙ. Y ~ᅣ穿1yϙ氰!*-sTb7eT VrףqOȺHGRFhܼsC9p{(|J3]uǽSplڔ:4tG+~h%lp9};~𡃴׻r-:G*$| Tv\R{ds5+p %@{%qvk`fuѨ ޼ng4T;`L\.k!J״u@rBG?ts<2{3hh4n: + ;wNSx.]H ܮ?^s?]qc`-A IDAT}ѯ^b+>r9Tgg?u^KP"(=[m: ~rkys ϋ󦀌R9'&i\qaI?WCYTPuS<ʟQMG#/p3'eV#8KYӪ񮂫)cRfMY>TVlh1@L @`|8d= [%efl*ͨ|)W4qNUʷ(ZF##ω'\fJ)d` 6Ve@ldحY*j32? ;T Xv3ĭ&(m_Z\Wdc3 ,ESSS5pD/3bT&`Lԥ7Z;un3J֮n&BKٶdD! 2lӌ%J*6 x:Xi+z2EH- V]Y㧽HQO?J=ȕʾ~0D#f @U{c@a`GȆ!=Usd3#WޒJ$RȤ }e)|p>ÓƐ8j 3t;uTQ)dzÆ(&RƳ g4C IOEJTdI?8 JoB,-o(@*S(ޱ4~} $v+4._N`3_Kߓi%]|*4 2OV7ATPA%?~J^O hە L}Nv*S*Jvqd5UYґz[w_FaU7~AI/,o).=tŭy)荒»qpv^ iڈ6S3g* kL{WԯPC X'i5&#DcayN{6߸G%1.(GO;ӳ_@yH{_ZH%I6f&T~& 2ٷazoG(y5оڿ8W}-_&Ęz~(߿$^~N=OMˋCu7-h&J᜞%OC;?=K4M_9 GdHK+?^ǃx~y29~* k|?]h|߼zk8F40E ::`B;yaFAX Ʉ!gȧ6ցw}NtBVvW W5:@kʿa!l7qy CXNF+]dla\˴OA%-U^cw=jgt3GhEw/ۿ|`fD@y]a} NyHL%> 6LY(۩WN>[m>=п{?J%+~n|s=\`>'gU[ʭsB'ڔ{N#L\$m4uNi>:@ilC(%;_Kӡr/0е`_ѻxtr {<?‚ 19 N4 ,12L͡q ߌ ?AHѻߑd_M~y+@C!W6Ptw@(d pT#m| {2g+NdW9){,369Ȕ=F'+d#>1~\W(37-V50`qS?\k8n`>4*CCvtεVIz(DO:[1_qe'AJ拺?33j>t +.L皔)0TW;SɨP[JѵGEdd;|>O}/>9x Tie*UP^[L٩.J];Bi oU _q{zVL;SGaѹBG.LҘr>'(@5lhKX.|Q<"@^tTW B}l u5R~dug̳3ͯ4:s`@JGEC䓼@xK<^@& #O YBʸUř>Ĵ o4~pTp2fMQk-C{TXG"0.7Ë?B=tPWD_hAdK.80>w _AҴuX^Jhg:.Lh,cqTFkEWP`8iTj!~6X~ąhvs?Ce|\K#).CJz}>qiiR~ `ot}sS.3"H1 y]1n2RAz]ReSM0 |(o3'{ON 䒊Z8 Iu&/afpG4{_h]DNA<J4^k5ӦQN|{pf+cii3NKM戸D@ +>iߨ~qm`@1 giƎ0X^7EA0g)&鞽v Xix070=ʃ[(\[nn؟B]x C u#+Bo>Di6 ٫!uC̉v%tJyy1Ao#A/3bKKL`|:ƀ:h[|ge/l :t]:lE1)w)ȣl#$ߤMG g0z+nn>t(_@k$aTyvj(!JTjTTeh(CvIG*T!>KFRn2K1bkG4靦?b32Bҩw=TnW%鉙0+UH pWK=l[y֯KzqMyckq9qhRn,#DGXl>=5~tC3rc%'3\+&>\+_ ==.𔗊]wqa[~3}S,'iYIF]ɋ2ՀYV:iL6/h[*hW{הk 0=H/% ssjc0W t5 3~"K!ȡD'a[jZGI{ˮYpB| h1DIH''rt:?A{NpXtΊ8 &nο;RJ^ȅh%i@ J;k*+xёT@ c%z% kr؁9Dr_수g &5D|߶03b8:բyI{Y'Z 8JV%`gK2 og"o ~t @xf=w FwWLrU&,k@n`hUY4qǃ xsɀ Qo4DLK{%'.| KSy~KuG?,}1 /<:F9y皓Q}eFM >#%&_E4o%,i[2d{xzxmf38 ׿AY@ۑrRT3oծw Q(YL+2򆳭]2bC+fjP&@S20C·LِlWt4/1fIa~5zYF%ѳ - u6D:\i,a@jO1T-l\8_skv&n-/'Lş]}8v_ssMӮ2?Hp (ǂgF7@/SJ̑1SQI= CZG@T_[s={rkW%z7[`ӔI1SWڨ8-Ug`&pgƜI=xæK)a `fm00(4gW]5ŋw@vU)RGOM#m >ay ^h)=śʨ'@wpS V4i*]<1c/>{ /+ J咲U{^0>u ː9^{/^>:y"gj`>y3K; w>ʳ]OwEGs|'cH(QڹKԍ~oﳛ˗c.(ٗr˨e<gTPF)(&F x r/9ǣ{ڌ'C(e7nsM}t;]hMT;:aG'rc< N0qT=PϪ:%ΪOPL5}wn] NFޭNX(\5ҷPB_@3͹[!d3 $2Z%il~F)qL^Y~A6AVUW>548eI&KS_˨d/ag;W%s)r*0:bRc5ҩ3%o*5b5b昑 {6I)7SB0E¯i֑QdTnvy}:w#~57bs+-K`l0m o7_KDh[ro1C0+lGꤣsGKRw[U#^*WCkQcFa(3qaC85xFfXŀ!p?S %? <Ѹ~foN0 jAH}S Bx{^r8[kўdoWg^52붥_;?鵯V{,y^v*Q?}Tp K%_#t25{a |\f,wKRb$La)xw*s^╯R TP y,e{2rzȆw| A6a`w7ƃȻl&māWgt| uYz_E*3@hZe5g˕:!)lH"o`RY3U km'YTAB`~="N -.'e_o.9e fT?m ܘ ,-ڼu뉅WNJѵ|6m{!в(op#u.k_:ϕziLq6-5%uE^|Lly !2e55?̪I(}YȨYfn3+{|[/־3xqUↆunn [GM!q'o9UTx IDATdmfdr. LcfFY҇3c+؏ǑSiBu=zDԱْr>[pִ~)x~/_H4]+Y,L@dEe=vs`CqI{ }~gH!laNV(^]6ixKA醪 /4>G^vvs]G0cPPKhX*V)Q c@X&׵\Sx_{LJzENi_Jۨ8݉M&P.r6]S.<*^\N Hh),zrϨxf^\NO|x]W =gqGyT\8C_ \W)|e>D|x _:?1P4^{9㞀k6R"kG6r4~<1(o'3"_Y:y VU},n{C]cWW?B jOeC3ax::5w{6x0Ț%8w:y+N>{^<К5u_E,ܭ ~vX n)=wO hoaXgä =ލ1!}FI%H$/Kv0g@1#Ňv%Z&8>5EM^2Wҍaw6az?υhA̘ څUĥ|%m|)|&ndRlˈߺ@]/F AרF#)s s r/ ES q}p yΨe!E Mmm6&T GvFKx+xI;<rτ6RL"}O#_a`9tf7^\Nr. d4vmؔ&_?u~ٔA\y͏>~PQQ,6~:G9Hx~}* ]Rk3l20Kcɏpy;@OOFR> [9esL>anAmmtPByj3GUNHzA8$ ަ D(65rg, 8Kb U(RzWg |y_^;m!Ch?~f`7&\`*C&O@r̟d\HZW GFD VtQ|2V׼8r BDI8W } Kw4 |O},SI@N} ύ[3i xv:ww?<}u+xQOS@0@⇘<ι&k'RF\Z#`,cvԼ[7KI; XZ>Wf)hCFM֗ {cف>5II)}3Y.B4NO9@6[oeAK8 \,N‹h,+kkxAJ=4uuSn]3wI S< s7hBY^%;U^Z' _(Q0t2^bey]D2{N쏇{̵y2> mҁfrfǛ2*Q,c`ōh2oe\- !z uH)(W}nT38k?˟u߾,lW5n{X Fy=P;Q0y uڌPEr~U)i89 锽#+k{*gpPfj5@e4X &vٲ?um 23ݸbteGy^יas8_FHY f|lf[Ze[gZ-9^l]POU[N+ 85KxJ{5LKL>A!g'^'T. +znޡ椼 5}^`!ҩQF tcƼ?-j)I8z/*FOL -5QB:xE^k`{TQ{0k|^5c^)<5 pu}=OaE8bGaa"a@[T2u _S]5s[yw:[& s.X/:5gbh d4ѫF1ߓ?U*i#Y*wÉs9"W~8X&5uSw<@;sI1u8S*)$zSW_ @T_PL o~"~k&PlVB`#2["!=g.Y:I<Ӧbb%>/C`|Pca ^W1# ? RvAMk_bxUhX,aG\;m| MY3羘ÌKsN:q>Ey꟟)oogt"M6;dw=(曧)Ë6ɚ dd)`XQ(wp}]u3#?q:Z򠕼Ͻ3m]HEUfną|`J@#!z,$m4Lk W#7^ GklڲUoFPkg4"gԅX @> }G6l{ǀ33$klO'rp@SɃd 78;}"&ɿC(F1;V7k9no)iNi7+ԗU.;'AoLP53nʴr5oשCf}fzf(if_jR?Ovu7_0O->xiv[kKN_蠲f>ig"Sy}ǏavC]!]L. v#8|R,ϝ}R}vKk==QeT46\0 e:YMЪ.O3u?@ @QYdOZ˷ 6h53Ko\ke;&.M5:Qq1 -q5|Pb$Jq}dCĺk>yWʢ8y?B̚9!Nݳ1 -CHr{=0A+=`3mT:*T.9SL N""KOet|7+&{RLg*88h\mf$j\~W9dOȘ  g & ?yczƀ"Vc|H)4R!-e*cy>7PKatUz)s5 5i_v]N{PMiȰ~O~ *jݩʍ02nqS\a fF!kN+ K""o"=7EW=Sj5ij\3YV~nhv͆ن}g'ngk3]',әHP pѭrYwm ŏ %Ųf2sb9\*ӿBXpT)r?DeJ2nFԷy#FL &r!ҸYC #BRHMd_/g# B"i !¹#-f}ݺFB! OeLMBFQn`?w B~j~ť<+*3"d=8ei{_<̘@u*O}P@—Ժ=95RqS֮إ8T\Tu}_)+=tѽ aTIJ\g,g;@h's )H.2iSFC' h@-zgdiNo u/7S>1.9zMm o Ԑ gZe[5`4&3Vř+ Kx|BMU[C-'!L/S <OO\_<<0mwBZyI/;,x"}_#w?ӧ0 Uqҗ^~p25W^UW!w<_iPyT:X6-K\Pr~ @hW< oя2n&sJӥO.q#cUjvb4>L4T2wqU{S{{F/MS9ro}5ԁ䇕Ξ-d.V@|ݭјMy_z BVIYǁe6TaH*皦#+^izPγя42[(=V*;l{|<3RH0Nh=G}x7UO;p5~ͥcpܖY,pLBt@? /(z2+T4֬y8# 69mE~+Q5ySm7L@F@pl=?3K5<[sS*Rpj )C&oGA`UǧO@V1j jYqq>wG8QL-0He-x!ioShApb_˨ekMf1wj2A?kga ʟz~?m T"7 nxCV9&S?gW3uuo&{a+XIuR! ò632oWFRb5g uڱy`(-J#Gm >-w`q Hƒ{FI9Ո(swl1DO~|B'>C;btsxof P98vVp N,%x *S6i-t%Ftv֛|``] gPm[W&ۦb&@C@9}fß  @Q?j3Q1g[xo~˅3+_y$?#@ -y+j)̬,(܁U]P][<>I:cb"zo'W2EX_,m{rC hzs; ʋ ̪_jPH>_)Y2k\:y6Gy.9)>skVpi5?>a)4Nqu UJt ӹKYɫ/-[ZeK0Vq ( W_$]ZqWDАӨb!]Oid!Pе'23M> BC#r\%QiDLaiua u0uO(`W@vg_잧wcjĩ.A;g9jg# ި+;r|h0Zd/4sTଐ>2{NYj0tx (QBXyW uGqa8PWNwf}9թ%:dRGH*n.ó)t23u*`^~8_$ģn*y(^[zPFéti'{e$ß3:xorm#团p5|LƀqD4o7(5~R^ͣQ1ul-Sˍ x.(4.)4kc3ͩr7y>C>Cf\YǧӉC (#%ө^ՃcoKgϿ t}`9 +`6b ! j^]>J+::lDy Ԓ$K+Xa 򉲄*,U&3@y.ek `an N0ʸ  f ue,M3 o?KG8˚I%C݈iKո=AKHT;G L䟓-[9q4ji3P7Jy9C}b Iz0$J~@ï^p IDATZ| (C#SgLtu~Q@o_ "f]jωoCbX6uЂ*gϞ*%OO3e+zGaQv]b~|uP|K" @SՕR\G1Dž_ÈkZr 3fGl'‡R=GnWt^wA2!%;xQ8NrԭKڑӡ5ቿxoD0OC?ȟW4Yr19'U7 av{;T^ct4ݫhdvE r+ C˸-4HWc`y WsLWT;8‡ۻUk5SђndTH\+p2Œpҟl)/E# GiR^r+#"[TsSt8O$UVqV]PpF9r~)lSyb>H^7"9f}&?@m ?B'J@j6PAc`՚0gʹgFLcG M,#|F^_G]kWs(+aFbCyY~h*4$M&_]z BL%#s? |k#׾xɔӞNyjG H?Vpa2cdy4RWhuG3Q1*"Vf03.˰ހ{|;}+ 3`Do-[zeB:W*[w\%t"L\}GX`iG M7l\'_堘$}OeH6G8c%d|^%{{7W/2c S~YpnYzG:B+ ܪZ/d&}=c h.ySas~lËgg| ?8' *U,iuSPIqYG`@Nø`l#t5a/׍ _sٽSy`!;_9=mɿn=.g8s{k{*O~1ꑐD'yl켾\7sk'/ۏ|KAׂk9"9@U "w5 ߇k\x}pɏ?{%ׯ~K@Y}^E4B[IӍ ϝ.jC*7df4TDTT %ZeyYwa:,tj_DT.3wF"U;> C[dʶ/$ԕ㌎:kI0qu0O!T@uZx/ʥCQ|DП' _m73sý.Rs_hP>WN+xx\A-W__ Q$*6✹h~W1kvGW ЏWyJqJ;PW|z8>20xwC>}^7z \k;Vm.x剄lkL9zNyk+k#!)]G7Z>~&7i<?8}ƚ>WBABd}g߰GO/7O|#}x '\Ұ -`[{/G| q#[;T;tUTd. iG\=P\3l9y9bpq2j&@¬Fr}~]RzE ?tdcRa&F~03-ZF)]WF7r^3(j3 18[tCw3NƅVv)ͽF:+G»PV|(eH؝.Ô[uKQ~K:mۛ)sw4MpA1$H 1GG~,PW.Q(?GվDK ה\\JTQ k8[ |rXX굶3UcS²?:0)5=qZ h{juyOIw,R{/!4P>c_ 1?UUOf|.4< _x/'ǟi$@/EFR=֒=+7QS(  !Xʱ?)…>?̎yt~~ժ)cr}9wݶ5{<yo\~ѳAX9RxY˹kDdF޽T H1TSe?\/nåWo?~q`UW:ٛC /] 1y Z'W(tt(# yȟ[(fum]j~ar'_ް|OD0 :?S3%~5o㪒ef h@5& '>P<JmKt#h f*vZ>``s/5[lr lnH CF^d>}nҿt~{yA3AgvPeqMgNiYFD_,Z3y.kXNU|&X F*Y809DV4Q!pGD ;?]#r9KOEZ;!["a3[40 !JOPtyBG9>S5(}Ξx(7Ζ' oF^q:En_9>U䄝HގxM }8]0Ϗ8ةLŻ$}9` p{_rgz5]8y^g_8C8tz{c*诗r뻂14Y:rr瞫pԩxu:%P?GD aS*t1hp;{ 68\yUn4~ddns.#G2>F۸Wӄ g1^ל/yggC &MN_EEp}q]ؓϿ l%w8wst#꫹xo]=yr&+O|1 (J-T1T8}*s_nz(V(_m/hͺW{S46?|e;V{>yu){Q,bia>8Xb*o uvX v-@q<~y:1P綧O* Zү!Wk?kˠOqTʷt8t-pFZcPRN֤Ato=Owf;k7BvW$~O6ҚO9p}`C%>τ49T-;: vDJ;N!59s!>JK@[˨aaъp}nq{UL,˩yJM㑅3xyk Uf x2"+JBs4HZ")͕~F:Zje[vs/sbppZ8ڨ`<6PP⸤ڻ-/ L<٢Ąq!+ S~;M FC !>'̚>(NRR_ O[/󫟥niuTR^\,L;Y*g^´w\ tj/o%3~_kxwcU!JW]^(.kIuC8|Doȸ%_!;dg-Zc1 ]×s8tshg>Q Y"W fа?ǡ:xќDJpsLG> .*UfVje `(KέpԤtAX j x5W"T`y*>~c|xa\9〶lP[i}_|]#zPٓyR,u*?c+A$ٚzxieue]e;s94.n8eG,4.f:VVz}}eqYAG {4+XѮzL|cg]5UFN-<e.5 ڿgEs yn]"g>m#_;~/9oehxO}x&<;K__UvΜVQ<0wBZbK!F\y_܍ȟD49&{Wc*7iTD x $G|)דL?ú׿} tw׌$H%>h(50nXBpg]U :7ēo 7gHSU{ J37ƢnRG]x.n s JlsS<kdZT1~!UͳOYУ Ml ga҉VAS.5TM<[m(TY_,1;q/19=(F}< 愑V\8 <ꚷ\HA^#P>te6Vg0eBuA(׎,A)2}C'UauLSm}F`֥.%bpa#7Wqk:Cvy0:4DnZ{x~&i/^i&YmUCdaD,#^|4j-O;w epP :b\!wPs_=X. ᒩT~6#1{t YR6pڛGD,W=I<-O옶;qkĹ'( jO8egq㟯-8^VPUoPő1̴ mg UԸ`wێ)[XSKvjYn;w25HN!2 h1 pm{_S2>WݐB51Kie8fFg/Qòc)a|*Uشr3,M;.[49&rӪF˟^ڎMhW)jȓ~{,>|GWP<3i祂n,݆lOq2 y@Z :-pF2^kĥ ,+siU),ͬȺҾ!3ҭGD;xCnO|v;loq&:ƀ#t7{* kdRM$ u@k[k 1JN7jX[6D@O|Չ{3eYHw6yЫYF&V($ &FlҊtzJg;6kfiw6M~( ož;Qx ([i(>>#eLŃ#xԽwa&ooUN ʼntr%7sZ MjJ#c5M -ꆵ~ <qYJיڛPv;>$`tC)3m8suUWs If2_+! >n=YՃ̠ |ʤ)l~!B`\=30!pEKW3V![:.J('f26ש{: *("i맜=a<* s(E^^=_w(/à&uzRzJ_@3P-}.A`^I;^ðjV+ 1"sq1+d5vOcZ,6hiY>$W f>gLm" IDAT ͗BgֿT(lԨQi9`FjFY㤠O5^G# (!#j*qdg@TEB_$94Z0-+eLCn)> V1pzdϠq1.saxĘB^84@yRO 8i\/7O1T>;7Iq ?T3YAK&HA/NVɂזk`] ` 9%0,iaUTwQlՊgKlt7}…-q\\2g,ŅwWnt tSu oΫ{UPqGAh?^%hŨrGo P9GzYtж:kׁ ʹBFu3w=OCCZǵOđŹt)sxfuX9U ^} uȧt]YZd Ź7A^n%E 乩աçrkЌM!G`=O+=j)ʙRAy_31?cMT;h$ЄX16, DF>-ޫD5װhV4LzFюֿ ASQ8V.J%_^^χdBWM DEbԭPpo9"y%P=͉Jn*^O<,a{%spW ȔF5E (#}J5(J.)7Vr"XjVQ$>y%ut:]DRG|xDzhė!/d:?>efi{N CJ/ȕW.+J0&V'L{+`4W!QVEGP~ꇂQE~߈XO{xp.qTC/C;{ ޼;\2+1f{`ǩ7ooqƭ5΂םv|2ysL∨+xF r ?tv9h4^ {;^ :M#7z>rh0u6\WS!Eׇ|9$IN a5i#JYP9e˥F"UP;ѓ5ML84w1{'왧%uݞřZ!TrZ]-NUŤ(,eyKɑЅ5iۃ>K㬜:x '$%_VoJU1ƭ P3$L5' #ӳ̴rȋ^GGaU]hQ,WMB',)'DŖSxiINB;"m ^!}vt_iRBȑ00{CH5S/E?+8^eH]șש?.Tjx&.g5aWcz+)ȷ ?~VXq kxIh jȍ~ JP”=.^zTMwq>GcQ3ho>Ζ>|QXDg~@pp{GBpgJ8hyH'G ](Z3 q4 pg8,|v1ų@T5vo.iuH(Y<^.L7"'rOra xY#E.RᲫ ](Fz*Ӓ+vg ah鐃~$9p j9,3 lR> !RnmF[C^fYP0tyB̮8iNi3lqaohxSud25lgT^¨6v? 9 fĴ 5fݙJ 9! Fz9"&~LW F,3faW V_i3>ON Id*~ @9QԏZ$q!hfUS-Y&w{e߸.. a0'd})z>c~ u@7+f=*'nv V# r="^H=-YX M ~ NDB(B8?.̩>IW|g|_ozz1,yv KҊRN3];Gyr@ut^_V C೴l6E '/FW㒖7|W_}5()XJ[,sYi ̩tރr5(a*01|QX΃In@=tĨ"|F!4U'!'L_5"4#FW9bHO܊8w/ݣxrpxcq&pҨ+ f'"$1` "Slw*ҍ|"*9B8 LeXl nkO } %Ry2Wwџꆭ - a&c ط*Pzj?0WE`QlJ10E7[ 䆟Rpa@ާyXkC]M V@7ߎ^?nLҀm[j 'lԃ 8 YOW8hiKdj2u2(p,:P>b~!Na7: {!ܾ~h|inCH~ }=q⩿TY4ed`h"aIjk@_VF(o;uӐ"Al%>8cuj/>m C#iݣg=O!0]p_?œs@VݢTZ;/L^f_v s}A3LV.4j |(&Rnt-LO_>cmr|9|~|CO0bB_AJdO {t<ƽsZ>.A.@kWƍFQIogacbg*^G5`V`Ӌ7{jA08yZ9 / w德Uե@Kj8֐Q1u4~(KI`?RF/,)4S䕷gE7lULxP7V=?P!pJǹ1 f{O/W's <^.T*ƏCCL}_N܁pN\]7WЗqpy\rW<}Z/FBzx|p iG`|c}쇽y:-c|j|bk%<I}I=JMd٠cReZ2 m}kz> h&b~9&|a=%|ۑx(]|s6pKzpUp_sČ0脍}IcVb)4\~uZٻ A;P rdٰEgd =φOh%%~ZXx]>g( !_*hKxGރ6{Qw'Hz\y U!TK9s@zRF!}fzL]}4L\vs/~a`dez}~#}3@ eR'rJ2 ܳ#F<$Xx-c7m}ZEQ8@`>:*&{>L{$">iK q+IRYTusM3-ř|?4FK8^ :?E|FPG!;&~w~ӐhCޥq–wQE5-&cʏR:Y6੼a~SGLUEKZ[~!`K{,2O[R<}FnceddqN@6`l+3y{BP~:xt9L@7W'#u12 =P筓$xR᧮E>9a4F`ͧvu8n7錝@ZDnMgbC˜(:2Mt2YU+M9[<$$bBOhko^SV7J')4 aT=roÍe5Р S7y5l_< L?qg|}@a Iz>>-RFw8CN cLi7+ęAt+cΪ ``nZsn/lxI-V&t:6QtT!Jo+wwCKSGcL*ibߝIs$ rD ";*Y ]RP:tϖ]TzXtۤil^|.83,@vp:/CgI(L"&(,ũ3a fH*<,a/Uz\nZdgGEz$CɒJ0"x]C_egQ&t Q}|S'C%땫>9]pe >k to-ӳw/dq2C$?8ISr֣Nߚ ?YNhroa)hx´uaOҎoқuN!7-u2?(>9[]jڏ@&q7WtGZˑ>QȦ,Iet\95a3GLZKobyʐh =Ot2pk45d|E"2=NiCWŽg-uwZ2aAz~C ,)/Gǵ-Riie Utk񘱋_-Gg`L C?kgCr*P8Q!ʓYG朓;u` lu<)UNqg|,XJ }|sDк jYeDUJCDLkt(B- 46f/oUSgQɗkjipna IDATWߌ.}@:1~b`[a'U2 n- xp [- _#.mE]=(e7pmK<\>Xiw¼LD*n߫ ̏ BtkׅNX1Й4l%~|{I XjX TT1R&b,P1Yrjѩ-_{83ᙴO7:Я5f$ :С+y0Dv$$H!gDfӚh"%k^,<&09tΠ0N%|JT'F*k. C/;rve qQ%<*RZ[CP"ǂԴ7 q叻A}C `W㯱Ohv0Mq EJq+r7ףmse;&Jsǒu]ӭ{ʹw=zĈmt|9[|\RII:ۯ-۪sC ~ C4|ʰdCH37F>HfyV4v)-K#x4&=zlwƳ)S'Oyz#qH R<<:hςXh(QHm+vid#&28:F#A ݢ9),anIi mdNT'"ѮoYBn:[9cx#$2g?D¬ʼn~^ىeG5>"0z`a7;4" TaH+cDNcУfN !b2/Vާ08F&a4,>Jdń}BJp | NmP.%Mihxpu8A9c< }xh^O7teV++7>YgaʧK!$w],@qKSeC?I9xf]1CJ8Ф(!%*'"X" $|1d\ ݥ.U,Sۃ **tFmUl"")@@SJW~ ȩ3c.t,xZi88 }$[.OzLTdFZj)a5d<$TwY§u(,-iUy\&[4!sm~cc%~O9*1hmBLFUA,rQ8nG^2N4!rxhM.=͆hpn;oNGᦂ^# YG HWxh܏FIEIJ Z_Ne"aduFZw\AKoH0Nx$?IE$㽐w !<2yuN@xH0\k&a9AJ$acP"+φ!8Hpd"~Q h9! d1zM mhʋ $F<&Py2n ;f~C-N^)ϐ5@tE4L?OO?b0 Xw[<9 Q/^Aۥ8.s7cz-t 'X {5PG Av9IO^ї_~Z 1ww˓+U! ~W_ \n"Ua-o7B;º A`tXJVY}18^/7ZVv{0\ckqu|@[Q*W IM#/]?(IA+rBB`^2B7UPGɉ~/Ւ? i5*= sl$Z1FĊ>Q8T.+@$\`&ޓ_6UH˜7LJ+2CZt '8vn-:U -YK=<8~߄XwYq5Mq5sʕIPC]қ2e<%R`R%߶1\ X[Q'd@JH'qCX/izTorO ͏2_hZϵr~cK;G|}-3 {2@Ą3Qa~wi/zYqz+!GCFv78fMEntr@zԐG>Bfd!&y|V<9oBZe=(XD>˘ޭQZYdޕ@q,IePMՀo{"h':-t`"RY<$%nQliMgW9I,Ch=-wwLܩ]P-ء1Ԉ w֩77[4?M-x]Vg#c#'I=,\FX/|V):).KoSyќk8cW!'U1ZXQa3g2!X]FFZLlρ+ʙ@ˬET=$eLQ")䭴;[VG^Y't M[Nzo\.y(\҇>YPV :b&My_rD|SJUR:+(@h>I#sNhVXX2"Y ܎Or| Z,#GQsZwu=Eeb,>e/gD)_8d$*GH88TVaI<ByWE͊4dF0DByinM L֋>AI)ky‹R M+mD;iZ+ݔN\[m Ni NH y>z[/akq*,(덾ԯ{]1J zG'[B~(u|&saI:pQ+C&+7{EoOMsy;~HD=k[gv UΪwױ9Ļg]. RՇ(0&?|xS!0b/OG6F؜gaށ3ch[`B IWJlWY@xJSbnLK疕32<%t)R6!iua$Iw(SH#f }Є;q-fhH|pJᜍfm֜: B~@-zYiqHʼ7*u-s ix xpKRůmNh35Q3Q~'%bJG{8D(a489A5hby Jt|zϗܽPñ7gPzh ٕEbTHMɘŏGhGI]ƀvB؍)|rϜs~Ca/ҙW n]Ls 8o%=( iiP"spt0޽-Cu_ l~:\3 -Y _<jtvg1IaRY{z3ˋpYa+4s a|미wuhPu\chiSfC^Ooa`2ӔI1[H^:w+iG9ׁG4Zb .ne\;А^?D."sٜ0L|c`Goi!Ԃ_]j]{΁*L9 ҆xNvP%=]m;k N5kϗӮ9 h=UJڀ K&Vѝ1u$Fw: ;esw88n,4oBu]?,ڭ}>Ւ7BeV]0Hs6F; K&I sNct)TCvq~wJxctuq h^TP ]zf3<1VyM\qSH;(ۣK.SqI:Px]K}fPNƮxYgvCpaSE6 rZHdm ?;#c'v|OqnОWZx̦?s_|hHȄOA`ٽ)3woK73~!JV+9Wo9cWֿK\B3>]ؠ'4͘c1AW$mh$u_UgKws.v ݑٿ{x6nNqH?Lݷ_:} C3|̩xEO%iL~)4 |+ʐ!wos~U@|P4]wyDؽ滖WmeY}kiN> r+D|cnO+Oǽ1{T '8-wO8 Pv]MKV= TW 89 0rfRSBŕPu(N_&*Z%o@`|gGi f~mϏ􍀖0Hg52tSq" RArƨAXxYԐ\e8<{]}h?Oox'Og;V.s LpPx7xy] y& ! ~ `; >Y0篮H%6Α@9K$K S@*'뽍_ x 0gB6$J5ѐ}k+,W2_'g ^1D%| mҦ`l8' syn}oOXbg#O_<qnt,mqq!Wtugsˀa7 ; ɛIcʍυy&|LgD?ʗ:oWʜ+\Sq>Ud|GGw~ 0[4E_`Z1_"#=C@?ʐ7JwI׫}#p2]rYV UBa=t[bX_=I ]As||7,t>e݉42hkڧ^O'hQqEF_rIWPf t4RǖWVuܺ;N{zBVYoD͛1v?5=t><.G s~<(/[ *`-_#/ǃa!ޤGz-MQ ӛA<>ipxՆЯId : x _`0C.u0a18v rl,ƢPwL_[2 ‘ȔQR A;#5o&PIDQ O|UfTTa*e|0su?l*0T8i)|`fE>CI(T0:'i) IDATM&nԤlfQǠf/I ] sЫd9a]ѻΙ۪,]:e̯95Ipڢ{AL+Sy='b 1:)t#ऺ ^Vơ +K0ݟ8I%܀ NjD*\ @:#d,U#kSIB%DÊb E #7nd"~q@1) c1+0:զ73$>B#7tT UUh ԔPE=do[% u|&nAxQ-Dn5s5-Xg*ﳽ-dfOeó`2<3Ar%r޿yۻL4S>]econ0([n_GlYDkoz=Qu9Sg 1b2.nj5xܶj]7u -+!s(i+b10DQTM^&G#Z#JŔ~]'& OC Nt~B<:A[IxBQ ATAe=dZ~VSU8ЅUzDbz#Wǁ{yɯ]_w&q.FoUn? ?鏁y h4-f0iEq\+Z9~7_si~>XϞ0TEg1S`3xy8ZVm:zD<4p 94ᚽ*v[+p N=݁ϡt02NֻǼ1^~uUPk{mh.0> ~%]YQng8@[*"=|atֽk}nk9)^҃D0.FJl8|YZ+#ƻa`dF͔~7l/JѴOm3y#(MR*%S *+|WL0Հ, 54{iv BT9+_B KʃBzkVdKӕa4 >.EJC,ǒQ \Ş8@_Is<}#I2t+_{qkZ9?~9nVG_@'i"슽}Ǵ9lLiH%{,8?=cP{Wt't{[gB8'ώ_& Z#'^s߂̴Zc(?'k`gC]m$); {o) ez=PIr?mNP_2y[pZ1ԣU5X VjG!ѱWWF aO |Y퇺Bڛ'BP|ƃ|jyM=eae wq^Gu,P#%r!A*O㈂p-Wlsz$?͊PyEKZ0нVb V-JwJ߳vJVb0v`yJ?aH4"ΖVhZQz40FX1w_ZvFІ05_*'z׍yB#$NjTXE\sH_ okx!)B|g*\cq Ὓـ cW{F5~*"c6ȋF O_>XH3Yvc]{nnZ7r9scMĺ3'o >auFgT>o(qL4ʀΒL`~ % @\ڇN 3 /Sط4$N(LOZ pQhlGNn=bM@WZ<%X1ޥl2Wa2OZv #HL)}DdTnSb(^RB5XgUI+E'p蚒- '׾wZ)ziܙ)u"f)rS~!ou%R !2*qd^≣"|YvϒWazT~HK2mν?|屜dy?$lKVȋFR 7tGA"B/sǬhuH=s cNZ;^hQOaN_^SפU33߇0Q EMV*ֳ0i:N|0:Y5uc xȩ+Yǘn}#8 zix`\6e)Ah[ ҈rX|n\O9zܖ?2SxC7e i?ɘ-ɽz{ {Mɺ*{ЊC%V[hro 4,Rjtckr.%E>̗Sى!3Sց PӠkN+EM*pczvQW" g9<*_ՠ8{t̩"'I$,!خgP5'_E8I<=Mh(_*\oUC:G mx,];­T)iQsK*A坯m1E{ԝ(Ue˴'y ^F5)&BhT2qaX͇-I0Ç@ɫCzQrJmMA>:0\rRiXyO̽ψf)GǕ9ll;X_2ȿ2aCa-HrZ}=ߕZ*PV3S !:('W4jֱ5Z#/G_Q(F&tMK:6썡~ӡYs3RTc7)=$i6c¿rH ޲2Գ Q{^蓫S R4Rg!p)AvG/pMNHʯto맂Tڋ$] rP Q[F^H >`A*7B9 7{_p ;v_TF+CBg+ //><2lq6*܈uLqr uΞ|_r{̸^SCĶDT?(댁K@:+3 .\B`ZO *׆ S+92t-=E.̣6@촨|)&;g@@r{S6K1)uf_,xמUN ɠ g]BYlY"SeJ#ݴD$ KÃN|CފqtZ.T.PյPgGDÖ`btNϽW:) 2Dc犂:*K@0F`C/W!iڙ\ cl Y5Pټ1~aI3 ch=&?`K cȲh~VcUr+zo=k!U4I 'r= S:"4!H`4rOz((x/ n֝'6v+f.I wTݕ6nػэOLz>?(;L/Ew,M2Gq` U/|3!vkR)rE|zLYQ<OH>t,ܠ-Я;| da&NE<9La _5#s>-lYRrB(b)k[Ks5N@S;,uS3zCśʷ>3cktuKhp(nrWύ;[RLj?+ ^p[3>zz"L67J"M#O3,SE)AB׸k r-/ANC6yjD-KGUnZKFy/zH÷1aw lτ.n_p`^IR)m"}V,Zmc: Y1KA&fHȴ|3\3XLV+cXSZM*άmRJ &? nI8-2q'S+Pd MTs|uUVb|^y!^+Ո9(IO:5^!?}">T|lKY-uD6CbΧ))LiK?7A_!6:C+yDvR,&=l |@~Vn֤2C-)na sU* kƭ\yo:% sW3'_ekW0 Ҋ⽽L~w+{˅RDZ樱S㰴,įMnE?0ĺНOr.MCL F=΢C86@,<JpꠚPݗBާ!xed1JSrtD,Qo}rH 2?R8G2f3OYX8HyYYw ct̄-/-{t_uP~a{`z@=Qq+ =08]ێ+ë7 s4jnlO)ָ h,Ct1pߐ%bqa:G/x/O;qe-k,4vo~ؕ o}2YQi˳]\ߙy}.Nw[|E\1p[lsRJ/^ms]J(XRY@T 7\;I֜3YUO(XJ3er(絊!<OUزx5~' '1sۣv9[]]IT$Â&' JCRP۽ŗ(0(%9Ic"Ӂ&ujˣbsan{g/ 9s:gfW#GNF'axgN?`+9[gf^eI*ed)2zC"~MqP4NDOi̺9W 7jNL`nE' gHEnpCFzudZ'Lvq(򢣥ZxY)R:$<>]V=|Hty)!.˟7<{2@k0: A/ '%[ޑgol HBn@YTu"^p` n;g%ό8ˎEݿ~}\2)2ET8–OghYI`Kk18B+-¨;VD6N)(CCCitخ$!Rtz3aynboop┮Jj4LӰ(YYØƞL#\I/i@@G0g{Px?ztNN⶚à4#Q,.D o_I S)}Y7,䝭n?T";ʞc8I ciC!NWX]:G -oQ0&!ЈW=c"̠ǠdlȦLIg,=aWHSF+K:y]T$4BhB_f2G W7;::vPP' <şSz7q<)SL>Q*{V:C>#@y4H:-ƶŊ`؋Ohk,أaȑ޺U:)*K{R'>;ZswС=vgFW/s`-xDYh\2ٽ+pQv7ƍQ @Lζ(G ډ IDATff05-{A F!)t[EK_4B$ Ɖ\gl9<Znս$?f)*TR16]vC3{e-4/e΃N!eJ˚r^Ь?n;t7yR`ĐUU8͌ԡ QÛw͞F@ ٕ":a "_|bd jܒ>2 7\>-tX9ȶxIt?[I[qdaeM3^7ƞod0VtiRrfs~҂vƁBay vг f,ː R9 |$+|ٯE=#9#nZ \P^u8՜f3iC4a=C038PGSDG?Ugi5ӧwTTg[%Qc7.P)_op|p2:G YϜdXs|,P[fa+C''"eƒnLiv*P)P|L瘖P:a+pT"QL =9/uB{NH/X3{Z1!we`?S'$9{A⠣[[eZ]VyyV1nkdr=I%t|ntJF/|'j(N=.th#!ˆ.c{ aO$- !g?{y1zv~̑`ҢP>bŗo}e,!~OY7_ sGTl2ߎf'yޱxS8brPoLhCx)RĄP x;gp"!ϟ '}BK8eh<0oĹP/|KrGx̷ւ<>wQRVz©%ƨM4|iuS ~Bs"; fS22:7@,[!s6&ZƓ68*U@-VP+oQ6݈z! ae ڲk t7P(t=8@ֿԢͽ<4=2I1:ktz7qsLFx#R ^?IBLlY=.[hOH2a1_qawrbg?xg]㬃Q#Goj=|"Jz^NCO~g"݀?FsĜ79Y8x2<{VtdlZ|4$@{ 2av[Wʸ*+ОurY[AL< OF}yj m9:7pBP.I.vy2 "q@Yt`t΃L=ઙQV (q+ S_?clž3UNYXh o,8D/w1M gK֓ hM?3POS$qߵ'g޶<[UZ!!Lh'Ԃ, {tw'emnb8 2g>cO r~~&aʢqUaq2.zFRwxYеʭxÇs|:A aY"$a=M4UBg/ ptYSrMb@zml ;[JʃXf":|ual>38GA≚O·LHX!CI O|8""΃:lA+[^XǦjv8'Kca'> g+c'd^#ūzZ祗2u!9 ;Or'ψ&J+yߞv^C'LZIwO_]P@zxO,w`-pepJUo?J)hWCœ1OEh AQfki;AP.j;_VU# Z[l21ݽ(s[1B!+*7\p3x'BK}-='Cgbk|#Kz`Sp-ce){L{ -5ȃÌqd!PKgVҌ iRFoGֽƹ.)tN t tݭw`y^gNDL5W☰e=J4qLrAw75~nm7"$!9dfs- ^8$OX׈;?']wBi0 XB^l'.gD {G0.۳x*eYw8G{Yh0cxK[-a6Lj# ltoG'>}t?މC~{96;yw:;A,)i|Mw8kd{1CNgu9hshK:L||KW`zTޛ#$G~/ڄY]oPB['x~ƌ" +\K9VDRG ,$尴(f?;t3d"}b?Za|Gf JVjڠjBѽ:: m}ڼv ZM>d{p7ݖJDޯW 6[0~7[ް}W !I}M圜CbNEPV4=:(eu(`cwl.F>nr[[.8~XHi/#["_M|vH9}a-C}&ur4:sc2r =q}9 )^Fd8 i {f5/a S0]3tɈE|M EcOk0]G UAU]_q 8Wp{&L4^; Uغ,=ɑN9pi?E^ 1J\CuChR?3 UB-Ba$ ;# 9 NWhgzeYdtpcsBʆ'0)}6WkT3uiA_uHGO4”cڟ;lΧ]c[9Ss:$M"; ~'vUֻCK$}ߺ_'@9h#}) 9\=}`atP+S{5;01z'yNZ[~jCoT7t{E+v?p}o hI^wi>۟89a>nK'l=Fp՘nibiRrž]`.Ly/Gz Kj??vw~J 3l^+&+3|"s΢<9@ÆX /b$P_G~ O9#iq@"x쭫@X?@}_sg;1痫R[7Kgi6fP]8 (6nw/fAa~8pEڎ֗lj5pe",]az 747>!o![-sˏ끙lв`8gPF}k2v@FiT{xqK_ݵk'P0ٛo=9F v~<P2Zd;V>-.tV-`G}F!zP ] )&Yg GEd$#jG#P>$84.q-i-Ҕ#^& 5I,J>CsqjB$ZG>\$Bzgs>ǩ% E@S9 9aĎԕ촧mq!r C ?!=[LQs4'Nė7Xz4]d fIvY𜑼 K橰֒,\?aXTQ!S,T/ -8M6yY+PCxn~$ #2ouo>AG5s%"-"3 Q'z=sDf4$W# 9' FTƪ{/v ?.C,-M˖+9*ʐmuڵ񠒭~gBk+UNdW7W|Z zWU,R:|*;A ~GW1 vt}ޡ pjWL/BF 㐝ǯ _[LV0Y1%Å!p<˳_ i8]))8Zt8Q9?!pD҃7\|emEZ rgIט)[|[lM8 {LM`1*po"-N('-ѹ@ jp!YZTѝ8=lk*{uxאּ祃k*ִ\&PYb^^rkϚ=QKw#]DvԛwbA eʪx BNa26 qsEy,ڠ[!+C^ZDfL2Nl gNV5{l?NrD\e",Zf hYG=%TBU_^ʂd"N—a] G0̕Q6 ~DMߝ BJȄ6p)p C \XpN9V?d!27{6eSlQB2j_?|ABv\҇W-Rf?誄+#vqhd+82 *TE0r>e m+Fd/s!-ZHGO[<P A z~.E\e1.OKGF@xFtLP]A#PS)_`#(iųUPd=ȅNiNGovq -OIM^(LYɠ&/\1Qk?{ױ,)gkmc/im\Ҟp-.4}<:qP W0bn{o f̰R窨:P=X¾>}G.Kxr/z~Ƥm+,uպ^h/}̑gC |=% Ĭ,vL # qe"4@rZuZ)4=< ]F~`E_O/Plm5!42CvZVEńCc Fܻr1#91Eii/6?)Q~º[|+S# \տ|m'~^}Nwt;( pi*áxI`9}zFofq*AS487cy46=xYKeU yħdo?;!:1-b@! ڑ8Z4DzHM)^]w~vjK,XTBp1S !j^&1t/@ēy @ְ uT傁^fZ5}/_pB Mx!WZ&% ꒀ ݑ>Ga5UN1nptM™kvt:IYhڮ g ۙ{ށLskiJabA9sDkREvHsPBڞ-  dOGOGZ"^%.Ϯ P^WX U Xd,a a;kB%%Hf "ЌPE*WԷ P(E{)-ux=xu(tww1-E@2zs yOzw_w* y<,Q:$ ]CV-)]-alAdCufLWgkFg_ZjB2dG`4;2/- 1i4 ں> 1.J2`]!C>= Ԅz]?lS̾H:W+Iν9G]!. D 3N*crJ?< KEh,>7/ɛX$큡].'\cJR*]@v$j9vFخx>ûKCtQN1Bz"]\zEjO^Ya}1?4.KSJF-Dp5mM)[EoRi F&~] iߵ$$T7?G5}g>[CcQ=1hW! ?h6vp{buEQ۳tf.%HkwwRO|i/M]YFB'C;ne.:T\yҨ+ rmpO*{o@C TjBVA$ǿԎ`%g˻{񏁎_ ڌQ bK`.Tq( ƹ.|d=:Ϲ"{_P+*p1:e)ad +fꔚt؎D8W咹%[B@g;cf+&H;!2b!$L$,2lB~@`bVIL'hMi3M@ / |_@\܀/OLݫ r3>=i|*f󣫣pEf4g3LQ<tF1_2 xʊ~QkťP̹ 7*xu-Ɍ\qa]] @"d+qc'I:>%uE2&eCئPgƇ`r$Jn&ܷXs.o9Ƅ0TRA?Yͯob X,BB#DZp&`?G<Ĕ>gC( ÓgEIsv{^BC69*4_FK[|yj CJd?<,N|1QFu}$T{oY -r_ o:pt1gEm/<E_b{17/v 45ttHح'7@*k3UbkP!u[ҍɝҒL0Xep+F@v}FA>s,P8?G8ˈ_Bt81cKaȎ4a]P_a:"@8,XNy]VjBc:,`C섥8:3p!KYr)3@ѓN&o&!p˞cYiWrK Rjud*{z Z@e%ďuL=,eњu!d6օD 8(&%$qcF;Fx[yF4yFijޛmAjN ^{œg-sd"tE{BD)L vy O HOh20`g/A0KR4BZW{֝hzs2\:|+-$LP&[4#[~~ɸiOi[etXxbQ 0#=e$m_);J D{>wB爫} LeJUa+AmO`}oEn{]lįu,mm -O4E~ |:NIq>xwR_SA"Wa99\?(",vI 8K[i\yB:OІ '@OSiY^ Sy5ڠ!L\,=~ -gJT)pD41/!b2I{t< QuIФY$ iW 9NAh`g4.pkqIL)CB>g_int*EB1pdt -_l4?vۃRd ܡ=+Z-% NSн7"4 ΀0n`#H(AfPaԔ0yݯI[i6Az9ηv*= +^Dґ/uIqAW0.K%D%cZ>ӫ Q>|J 5uygYU\ҟcU^%wwݼ!d]<+tQXΰp!X*|E^ zF)QZTya6$th<+*ǺP'Fd>Ox3fC)uf vM[8ewΛ 0~WXөb9 Ź1֎c'iwb "mȏ]'&E [SŁBT@PfKo1ҔoLM~.My)Z-ཧ ZT^hR~57_25G8փ֏o}@|G[2e/X>i;lkN|+|O*wra|󶮴m/4--,B*H]-́(AƢt͹FA_' LvRҩEPh4g"FgP>!?c2eɇ(&߲8HR8᷄riV\ ;CL9ZQmO[5&Ӵ$gLLJ9bӟaEIE!@G1?YnKXSH!)( &xcQxF"طǼp !Or2^ uw} {wg]ʿѶنF /ʓb!)T衯~^(]4]ǥͰ>3ť21` ʦJnQW]:Ehɪ)djOWϋ?_|M`}f3z)Uw}04ѿ_ha?qV:3p3a@F LԀeSPz˞'"1yv{g s*݋mZ6<\ٽ s'WO8(":t ˰P(SkLN=xf&J5Dܲ,ˉw BqE. -6~zsPpLW(pX)yhZ̒O#_w`޹"s|Pr>;טҢG妨՟Xq+T*̵XI_p\s H#9_S~dt WKEz< ҺMLcFhg?3AOAބ@)8U0 &2#)wt i8ܺsdzaHt.lY)4ЩhbttHYHaD@ib9 )(uGK qowOg ,#MJÅbF[}J?: @NZ U#d2l buº-|+iQ6IXHy/ L'`,w.uBS2C3OҋqAZ9(Exuh_9욪_n@:8CrC+9W`y z  8 q@|C휑 ˽70Xr3L.~,5 ffGns;%ǥ"<-7B xtp!ZoxZd&&hq:J|:j?:R;=$/iߚ% t†|N9X?> LvjYWkUP]Wʛ% ѐR/M Kaw9۟NyΆk@[AN}8XHLqeI˔#F#0zfQJ$Mϰ̻!/ f:tm#@RA;ޑ܂|-g JI}䋯3Oi頎uR9J ۿvFC1hx0oJl#,us@ m~gw[֔H[~2 i(l)eSެL'@(T%Z@f;INQp9GhBCL)\#/:Ay<;\ȵb@T\_AR`"dg[)M{/S۲uyꏏ(k4+qګԑ88jϡ>xVP<}‘4n~ɖN0KȥW*L vڄUtiY|+nT>;P+PXj{bQ ٢m΁kUS>bXfpyVy\MHAjF9C"De=2SM L\5BXB dcVe>î($X.&s*BK# t S{aQEݮ3FҞ_k3)<ÏKw3V#~\Lmߞ ufkQ(ʆ|a)BxV>ϢN@sʈh-% 8 Sp髩`2M#Aݸ}J|C]GlS}K[Nq `z9IU?y ~iА(R5ggV1LuQCkGxh) Vh4VҢ+øCP~$-Ǿb{_3ŹE0[؅F¶rabU pd*Khx&-- L|B\A+D%&u *fЯ "$ ~][LN  1C 0Wo0DHp̞"nU1\WUPr~S9YͳiifL|qn|N+OE 2GVnV|rQ/8>v/:.~ @mwAu9P69:O"KІ Dyײ0#M@{PV@%_3dZ$i$Aߚ0x\K!UR4(*=ŵCR^0p/F!xi2G)BGlsۗ 3򃊙sϼ#q$m(AJ'8o,v¢>mm>2IGq._ Ɏ>G:!М*thX`JN.Cˇҟ(5a^ygbp4}4^Goo 0(^FU!%G*c3&FiSo\CʱcN; A8dT dw|d!P_1=%Эg6d9 Svm.tR} ^N8߽}>rzB =#l+;`VkĶui)AQ2Z;<F?(L\>j ^%q4#{\@_; T!m^EX& |q8f]\8" Y3QIaLl1t]) Tˇ]=[fzk̑FQfKS;*䧌gs (;B #G̭NOcv)ۖ ݃2Sj~nS:QM~Pi3c 4hYHAkLLAqNaJ✳*H? FQ2^O|xzyu%Sܒ??/~,hgc",zcn@DkxmGLcMӇ&ʟ̭/մ< mgsѹ,/gd;.S^\'owJ\e;}9?v man(&n3/:Xk4]sp>~a݁cвSb-?*\s%] klSxu,.7HWH=1 /uս4SSE((nV1K=88 ]ӗ <," " IDAT7#tݶdG0G,A2",GF4vN΃ulH,txG8ad.Sؐ0 @]E3Rڀds%r+K4޺yZ\$Lxf )?$JEn\ߴt<8N`[29~a;٥l'hQYSCB~"ZMQ<0 ir‡l2 -sVЃ#1wPG-.R `ÐV3 Z"*PKit+wObA!lQ m:,u.XO2 ,lBA"+J* 9aO^G"6,Q.9V+aJܑ _LJ|gdZ?BJHB+upڇ\ kʏpO,Zg{t~i\7-1Ї+؃vlqR/hCp6G:1\#%\B%h9Tq  ۟2X 89))U: d$ nvnEn9A/*zbYAcwJ0635(7 sʀqIvE9ݽ /HwUn j#P hݍ^F:U s*Ht[M̿5rpEYv, 2&i$W "аmh`p I@Q'PhΗn93ڻ,G ƒ-PUk-r!H$#O*go߰aLE$W4^l il{7&n#Ѧ sP̒ާQl+wΡ e}]e&,Q|Җ4zhFYpe3Ϗꔃ&e'~.Y L-\o00t:׾"~7k _ 쐶"(1PB \TPHs-eݔm'/!ѧ]l]NЇ1?@e0:T|A?|9N'>kpÊ ;1LSEvܼÓTb&GN*mlbfd\)a-l'+M53˞JŽ ٫T$CUtʄk;GXDJ Bcl~7csDVy)Wjz*Q2ʖPo,3"\@Kc0\*JIV˴oGNAJdNzsLvکAaNt &KѪJqrcs,Ag+_hLIzYR^vm9IWomR]̏5gZ ~N ćlBe%Ƥ(a@(ys\~3t`(-jkx X75#`3jo)> D_L;$ ײyw\G|M7~spuR5@!wXl=fw7D#~?]a ypB΂ƒ/G|#EEPyM[ 0+[ZG B&L ar~1~oEg3)vJ1Swa',tѼQ!Bȸ+Y#>cNЏX|vJ#$҈(4k^,t'g: L:*TT]THa+w)B,5CrToRE1 'GnX]!9Ȅ{X "ONO:5S03}1:%}ʼv[FL+Ke_0g3ͩO!;{ 5|aQ`SxE[M:eJeͺ ЖLXVr3semK!kvx&f["JY4G5d<(.+mcAyZI2#2_\nj;WS NI#xKi-mI8; EabʥYAN-; }^<槀WU;9v1`-GyQ1%.J2pQLPAIHNeZBP|۔! TF|~@t%ɳx Yp(YMy;B"iKD^d͠,Ah0VL+ig;5IGP=z/zR`L|e("P3Ķ>=# aȚtfZƾe{(Nܣ<:͔_ByR%LXo$_uH sCz-9-ǣ9'͏9?fs|ohu #P4'\Qz^vi=4 #OrxLyP'*R`xlHv< yX [AcjHPKHlrfU~3As ) WÁx}:5bR A]rטp3bT*$yV^n}w&[2:\kd,毰jyŜx9@| 3"j(P`yn @ʁe0FaB'y9{:K3G32&*e? $ͱۘk=VC$nj9CN8BExR:`Mx+%~ T4UBXLC\P4R4 D1Hn}ˈBd" 9cx%)X&_r&>@I:( y1 ^bW*mxR6\ڏƑn{2=@p ;2Bs/ >Ӳh?ĵ#<[g;ye 15f(BEtR q iHK2bv՘%l}nE%\cME"9ÕsYZ.0qj^Wk@Ӿf^^!X5 Dwq 2;S(^̺ˈ(\]ɑL P6 6*c:"B^?!j#?KE~w>)ke\LY)-G7G ap*pÄk?E@ D{ߋ o[@};.U٘P뜜ڴOϙ"s3:X早/U<Ӳ<0S_RD?!oc)t} @LIy'\5bqCFa)5jGY>'jKr_滀"w)~ݗѻuiobs,p\ 4_a0e~VdCVǣg ԳQ(-鈉.%G8FTDK[^'JLPswpMH~hz_  λ |J!ALB nCwXñQWhɴLvq[y};߂;->.$R)r͂'ZE;o -f> 0$O|4qb).o9SONi2unKt$tף!|_wOY?`z&q?$>@˙|y3KZ&܉%D̚ w3DE žm+ҍ$ 6ex*A3/Sp =Q51 }w0P'OGS?u}to@XMj,E<"v+<4 Rls(1#9aW&䫯GL\XT z@_ƥq/uGxMqq'SN"j\sRd(}t"/mGO-=RDP[Y.@]e[,9h T`'lI)Jv\dݔ<^֖1IrԬΌ0Ƣ8{.J2!u07<˸reGIcr˩uP&j3`ў :"0d@3--% uv0%kwJpo Y*h =^Nl) / $A⚶utVusJ !S& oDOhk4TYA{gL!HdS) eT)·ͱr5ӎLE Oҵ)W|k D=^glG,y($MpCڽME'8UXH 崭fږ0Q- a]2FO9>ӲGEj)w0c~jގ|aBtҶ&@Eps_<}E,KxLwJP/=ppۣ0k;7H0[SJ[[~stJx.@w @a6T@g 3ⅰac(<#ĤToAsALӪS^~0Ь"a.Z6؝e.%Q؜/MgruQN(U>\ha_٤:aɫCҒF0x_y77  S>Y*1)J U$VI&%aSpQHxx>S^Ib4%-+3o;̹W/_R|'cx@Xzi;L}lSDt5l2 %V .gZč󬟲'PJ@ . %ܹ'U~_i|\m'dʋJ +윉iB攐JP?Syt}|q/=h@(ǩҞj|B?wThlo `vȇiqSUB6a:TںK^,SR)/d KTc,&c)$pVBϧWhvPZgn S PO2m(F*6paп&L"ltIwK*~V[l-gNOaO K,Uu fp*t պICCӵzQWdM1K1MSfq"o8eiNTX'hoiǢAxwvBUyRBK|GtE:&d /ymFxNGW܈@2eE" jaKRAӡ}PH7JDy`(Nx)&KT)krhJ?l8'aw;Z,ҖS(_@毒 nW[S]_(&Xv>Q洡SP觑ё} 9(|v@Bx`E+eכ@|t{;CLCS?*:y./`FϢ >(@&ƅ@hDfZH#V09xC`<s>`?$:Vڄ\p,Pluy1z' P{80_η|pf9AĬ'4< u]PTv  c9kN+/W"``||=AU}#Σ 5%# |PwpK5LC(~!P˧c5Q!#܌<%5P x# ?'_K<dʂ= x8O05OچJ oUh0 D=FbJ{0R_Y6BtBAiO {tџ^\\^(x sY?ae])I_Otkx;LØ>y6z?f{B〳,]©*``ߤ ߉NHOa`40Ϻ%0=z- h_۔H.ʤsXY(]KI-z)ϜO jy9ϜsQI$:2J NDGӨዉkȁQ¬:GkL1Qr9 ]@j#D^FtAZ @ |k}"pA;|lh>Vç)l:Mϖ's"oGQDѼI_3BZ^W;jre k@ v!PtbYjoK@8efOW٬1odڠĈ2ʇdAeZ yW3C N(h,Oc)e>y*,\3dĝTr|+`>8agNz@Z-xy*f &/~ߊ,cip<:"MkyO|*HďIֺJx%?1@ Q}gyEq,ɉ?ʲ&OSw:fQǬrmWcG0`ӞQ^K7҃ '0k) LЮκ0L_0<ݏ&Aﴫ@پ>^|P{x 9rQ4ƶ#ܪSD@L"BQG;mTȢc}#_mu|#X:jWGĊ[阖7 T8 R'%%\XO8¾׻z؅;Q/P(Ϩ,Yt' +VWJ* :% +5mo~tOeMD\Vm䓇yzx@6R@Xu7Izu41'/ mm:O?wW{"4(!zQ0 K9vRv )8@;fnxȟ˂dI=1m )3V&&0hX \/_ڢT,DI(d5?Bٙp?w]3MG@[8fmk?{ 5@h5޿HS>; sJڄ{ʁ:U7b_=lǑQf4:'ܻ~! B@$2*@Lkqdܧ_7׮dL#_ˠ xE +*^QeT l7c[گ8r0Y!Ī*^UƑ"I}dȁi‰Z'9Xr"S{?{Ba=#iMKkax/*Ba+k¡t,tD*+ܨi#8X<^"ղ.g! IDATYwEjg őW乁Qd'#\S%߾ [x >\ ύ8aJr,;2,i"/Y`{8rЀ;Ο+򯘲59; Z<`*f>5!pYCQֆ)E!}[3$._TB,P@$h+Vc f9~F}BZT'3͠=?e"i7Q_5~^ m%ԢQZH2M]LӴt=l /e2t1e'[uz]~o(WwWA܃'x)50h͙5/6%PKg,d6ar, U-)qW ZQ"Ҟ> O8 |p;}e0PtK17 x6I~ھf& Xoo-) i%u)ޟ>:O.v>@xk\V_`16/GW/_sh8MWwl=&ȿQ "v QgV|3P0L3x)_IJ҈@E\(  _XZ%B}qJҰ. G]աꦀͻ]= uH<+Qbk\ؖ1^H?c\ESơ [-? HSg+`z"vb_cwTc栀>{B>]&ne>< s!g?̂2 !s|M[hf0Lzb0NXP/sڎV4]$q< ri1a{\#/_<#}_"Æ[p#e^m̓ȹ֐(D(>Kao9.sڃfmuAs֮YqEIo<\1z{ |&s7 OsS)Lx \2:i>#B=dtΕ =H6yrߎ=,!V d$" (,Ihv:u,V=k 8J#X~ESOۥ4xύeNs@SVBC-4)0&ܥn¹]h"(t4c)?WT~6 J oVHͽڧJ*y[6 DV)Hz`h8e-w"Jq MJ_a<6SYGDV Ǥ-]v4ϡW&Zujk\/Άg㸪=qAe{ÔWnhvM_*̀AyA!X915*5l#2瞴-4l L8Owap9B3G'֐S?yisRKNgN)ge祵pdjCmyb-@UyX|lW[kRH3A!mV`@+wqC.~6 wmi9Q><ZX1,]C+X ;Qg:q$]_8X2t/җa打Bl[}<|ͅп 7)W*nkmt&s ,y|u\XpNycasp<{=N蛫 PNJ^1pt<-;B7sDGj[AidgDyh~tg/~*lRG/nޥ 8v]٢gbhN սA(|jEK):ZsƎڡ=IL C.r549[;P:`Gk5'?fMYNGي0&غRmT u}Ъ`Y);OE%b/(|G9#yW:z;렠ww { 4A!HG]N' iL=%s RI zk14`* @w[yx"L|[aVa5!42P֚m0T?i @6d-iU:~Q@ lhg4Z 4Ep i"!*Gw(ټg:\!hq/"~WzniZ Y?/]%АYvo9ĥ򧳖;Df< Ep?lgt-O3騍Oza>Sq3( XKhJDVőLᥦcG+@koڽF,:C09=@Gt8‹SllۇHo> "@\iA$]cRh(?ʈ.DLp&نBafM)eLڥWgPІoǡ-0#f;'.838LU3 lЄ/MESj)Ղ D(y>f ZwwړW<ʼns0'4S:8+>:eNP(gV>@cD<:8aUJ&`|iv0)sx=f.U8^ 7ַk& RјG=gij^>9fg ,__hGO06a(^9rX% 9?.e^f&-{-& rCM{;K-& I8&j`k"+5Nu5O9~TNYB>T'7h) 4JOޗ5@E p`_vt\se' x0Vʙ‰{ GAp!(q: i?' r,FwBn$jbt!Zn.yz'e:M ){! Din`puV } b@ AIV^dD'=5R'-.ȝꗃ ֚v  d3} wƪwa=mOA@AH.(BgYk,(p)sj^Mn6K;S*#v8p@: QJa!L4ivw^^+M+#`t⺧z eCl9m[G .Ht~,gL:\][W/ 3CyƖ'E8¶"BhFl$A~dVˀ݌[yo\O-O.׺R.x$℆x#O|] y?qQu92:ʩ8SBgp!OO!q2 cp~ڏ'8%Q!8e<͖ 3 am<_!mI?>Apw|P_A +xGq1 gK+ܚ()}f9 ]gDi7h.V`R9Ǿ87-jS`}auY5?,K0NDqP:PBsr!LPW&9 dd":p,0hMǯojI|eWJȚ50Nz1՛jEHHޫdAܤ9U[ge(Iwxq9 JuQ<.Hs\ާ0-\.6D9d/T!+ڮKˢY_pXx!X*X 1Br(73h?{ SYA6)!?Oow#o`RPf`߭%{S =jO/pÿmOZF 4hbj ֜\:P<겘ً!qKPCh@ /}eҀ^ȩwhr~Kc&*ծ#kʳ]V509'o\f5%HV?Jmֻ|8+ȬE fЅD"A%YEv>&LɌzKUm-Eg4AXڶM;mvl&jTQuM; kC>Dz-.>2 hM o呧"vײo*Eӽ( @`znǾ5v–"] 8,lqL;3/ V2 quTYw!ptш[=o&nW|_^or| ޏ`:)A88Ut#F%I./`Ŕ ;K8s }h B5Ik,n~9Ă aYk67C7w, P^h),T/xWۜX'\y[5a*SIF={FfCהGL\f`pw_h@6.&#M@DsQzYϙ =w&xŌ 6v{+|8: B?Z&"I~E4+a\W٣G1= PK,~_ӳ/./#l϶qg3i#N>4Ͱ&e2oknL+P@͐&6)|i*A.4 (ey\_o5U `6Df_c5Fqݒ95/62b{ضzM__ڈ5N1ɚ⚻{M\sGLɸo7:^pk~#° Ė qE)z `I߾Slv0qYѬW|+ʄ~O 8W)0ٌn@Vǃ8waWIŬ}͇f:ki ]3HO/~7~w='Wx\ęsu24C\XTó>&8wyYhZC3>i'ຂ'}6S,)]ӧY-xQ^wq/ܪu{M rÙ1*wD=STӇm_SA>"FeM>Q+S==P";T ߛCCZqD8 lV(.1(5Y#@0UzuUbO>o~ a~//oXGCL $H˺ו0뻘+H,>gG~d P<$dJ#e0y],N6XNi?'Z%L>~%vqO80GF\nW՟ZO}5v*= @xȼoX٪%QhNlLD2lh3ٯ«#hN'i ,JV+SJ<̿WV`ڹ̧ fIXp[4ik ћT(v/A .U_ wT,DXm-O"ڸ>"X`n6˓梹B{g"r3i pq*N;+e,/9HQS>Clo%iĒT{QɏJ:/Y7XGLTƶd)R"eOUVouP?Xx^ C޷>N1l!(K>9%an,i%%oe䖈/zN40L(<ۻd Eut~hC|=§AZūPm6;A`-?Nӗ 9ż.A7+|EZs?9˱9VTKq/S&\߻&wg9}26Fŧ%W([YLosZ!dn^o^JE>U>^_O=P; &f+}9cM|ly ⮙W%yM:d _Xsu"HGg9"@x +AjXo U)j; 2M?RD03#fra@bh lVG"6:3!hngڥo"lДS{CB3WsSZ0%|39Ge*ƭo+.[h[} 2#WÕ$nh,dYSYRKoƳ痣kB9 uN}NgLdS됩r1lO=Kmm K# @vSKxc@Ƭ^-ߜ>y͡(iT oë[CxKWu b܇ v:ӳvkYCyi֡HRu3µzo5qL8R? 7{QxVwdtR.V*:S&e>H:N[^XJ~-c0 V%ÅU'=P޾QRC/@u 5231!;XO\1\c)EAt 7;t=H'fc-(֚P ל&i?{Y$sG} S ܔԤHeKKBN?䓃|ͳ>ִS)v P Y1uQ ı =BsCNZ -Azy3D(3R1FC@VRvC Ro9ؿ*Q:͛~ xGX(Z3g|݌ VPn+)D X@qQc#I0$_Bz3:\}NZ4 T2bP@cf5B?={p?*3%7zxXFWϟ9HSvC u/^իb#|!۬~^ǘF!}idҗi[/w hr& &ĕ'ꓻp& ߚ ±+ep3tYUج/?4`m?}~x0a[xd~ j}768X Q"}gQX"t^\.a'FkN3AF"]aP@a֖K`du:X ۪]{R K)v2~H1>ttrvFy, ?>Jz+:nja9n#;*-R W)V01:BanE!D&~#ف1աr._vEn !rN b~7ynJf"DMBe2_\,q( %fVM S\pC&~ri\'\B=C;6|Ǘ >GC!z2~Dao~BlFU짫 w[x(ԣKT;J#sO%ScQliW;AHhٮj0!, 4)HԇΫbi֊iħwfѢ -b*(/y> &eo%-ʹޠ \3@>s1lu?|+0K;\ґ=Cʧ;l+n}a# :xʻ̱Њk(ob(8e p$.[-;}/˔#x2z -Z"/Ӕu"}Z )8..MW{]LΤMA@jg(E@:]FZE@1d4tiyeK7,f|n[P7:|Zj;Qxm"dEdV0Pt7'{YDJUSW:v.,4oX04 fRާ4L_qi`E[tr0y!jNax: >6%s42rPy-Gezuan@kWCgr- xR\k2hat7 Fmk*u0=* ĮF;Axۣ2W[Yy਽;3Ei~CXS",ɃtJʌ䩇V)iYt7oC 7̲d?17pre(j -#Y1wG.kE^㘶*|a)3 p)Gؗ\>OV$4di&;.4egJ>e:Ǿ?/H6AAc,C UV=tA(^uA^ìsΔ+=i>P*/QZm"v-V=q[#Kv- { ׉8a6j-3ƚt-cv(]B'y_؇"{\ 2@Ng WYqݡ2{qUɽiԞ5eG!t->SBp~;.6;q-;<;e 7__t9 : Lwn>Jej k|aKoĀ09 gXoʑa /܅'^ IDAT,XǙRI@YeҵMv8xP_O ?ͺ. 2 \x)S(N A=쭈\x 1z:~?Wx?!x'd} >.}pe~zTC\IV"})@DuǏg焹|r=?.5RZ'MS9Sx'ҷ򠽡W"~ğ;,DVa]9H<R1Dh'ӹ0j|+9ROcxO" E_k@bd`aΤ#O_BR% /dN ED_5nGLDt%5 ,.nM ~QXotOe[Oih.LvOhGF_P1vw`= 49(P]s@:eP ,h[/ 7T(K k6uFDҦM/c[sWm|hd͡ibz-gB\\MTŤ4pg5d[2G" xIZڜ˂8hX_4&913ڌ_ӿܠxtvRјXv~UH.Nre SW}\x "G^m wSZP#so\k#Gر 4LzQo{UJh\#!œ^,: OM#t9tVC8et *Zp'QIL5w܉Ik|.;t %yĹ)- rqo~G17$ 5}k/YgWqYW{݅x&jWD*Ծ2`!ԝwZ.Fʖ:1bF i Uv8mŘ.L4ךVa'njgJ)OkF6D6^8_űD-%L}/0!{po)|-J׊RsYjkxQ ܠwT el2tj+ߗGep>WG }u6ڤ@ƃd0ps$J.PvҀ=bHE`O{}cALA E\knϏ|J!;xS@.6ѩ!;t#,Ɉ``ArPxL=ٷ9pTA|tD(b4$r~e̳(ɰv%< R!2QVZx`_ڞ|fҺDPXY*w~pG@˂[bv@EB(U:0!_1#TM:Ä$'_ڑD!c_Ǔ w$i>Pۣy|k>#\fGX%l!OO)wʴZ _7AS|a{GuQxLe7P ]fG<.YX/z&Bh:gW8fmgT@rҜo`x(g' }!o~ 9xcMv (1-e<:s>DN톧A'7кVL]e_)"^CAbʡ>@usdRwźw @65\ɳ@ƶC([==i0|1 @r=DhHPi|iP dM|n8U~+4LBUPjVw*cYQYYb߮'?.(T`pj ˌzQ(|灝bQg[^ԡ~K5 lU鄋봧;DLml޳c%@g"XkS_ZH>y!7Gb'U!0#քTX,,́2}l}'߶Ɂ6gxAK 6ǯ:" 4\FaD iXߠ8BR9yժ sCa)ȈQ=̯#|e ~i8y|~'EQ}AݸXO~1y%yC#ɣҾڰOKDW 0_:6U[ᝋw wTAC ,"Xp.=IojOJXpdR$A5P79F`)% ˠA\#o1 r>G)%sߗn1bfNb B3$-_Ap`SVmh%i~;3)ϖH4恡%Fx  '( ,AmGdZȰ\5ِttI[]UVd/-7%v{m)XBZ @B'nX9oHd뇛mCѺdWeABsA fk_N&稢[L3Ijg*ƣx]]-]=}G@s-h9nP(c»ĕ\"--3FtJO%!VoX$ݸw?Q}[Raax?wTLž<' uLoo~kޯ~B @qx` {] HcX_R) o3UFD!(4D|KÚ3YTUeHI='!GICd^qɻSa}na*7$4P OT{cߴb^}W)ǿ04"郔!D`YxR0.[hAC ˃fM#fFPU;LYueY%T)Y$ P009HwRb6xRmuBn;B[L ]J<}mыS4o3]kΖd8o*2`PYuܣ$&\dpG7;Pb=v7iI,eS<ePֽS rάN5#hFMbAl9/Lu OD (Um9f#P(!-CĵUՋ6.ƒAc#}=q&x&7ˠUt)ga$@o錯qeV'y1q»aiÌ[~X*oJ0PgXh&& t,:{_x+:g*ǽq [!jlɮuџ)sm>ͩz-jG驻; 5Zԝu:]M|bZ< P63džWycC5 (UMk@3w'' dS98,Ҧ6pP1G0l]b^[~c ~gH@c\{A:?qszxkn:p%^رx8L|L 3]ilJz~d}u|[: B@I8O:Ldw8_b) ~Vu8ː >?f`G>=#TV BQw ,D^2MwG׷ S3 =兎aN#,Q[Y[` XEy*4yɒdmMQ$K&-#4)?9?ȗʅ" 3PZog*bN^*r;U8 yLX*ȳh؅Rկ DcJ:PP׻ju$l@"W jW߻;LsaxRH(ea$}?v"Vg޲\\un1iy/_P)"l:C&uM1GMjXV8;+.EԆ+e\ugo|ǡ>1WG i-8(vxW:(y?)+ 1x£06/u9"y`dCRw@I9*3\rh0OXԋu2FS AX]Uu'_:`2% leM1!ޒzG(F$WϿ=B d dC/7J#}~rw & ݇0?!H`(nмr SQ<p_E\c5BX,R-'M~,cXa]m,}(+E>!hybjZ`:җLfy2iWg$11W\CGVCęeq6le:- 9l i5;⮽6ڠGZI>%Ol#bhV*ҫKc-kcxH D##M#Y˜Jobκ+ðXk{J Ay+=X8|}Ssg_g->1z׿dg߀1{QX$d\HWxBmwL#$KVL8_=L)߫!Vڐ9}n:C׺B;Z"ԁ TYqIt/BY@ioz3_<ƤVҗAp6gn`c~5}w5o;z]Ds\g$f0pmthAN'Qlճ>Y;GA7]ϠqۗA*I~ #pBaQ8HHck֚ )S.>(Oiyyp CQxQs  wҫFfW /iUQ?oկ3t@] ;}q<ֱ??-LJopT<78B s/&Ȋ/o79[`8e~?x4O, o~3)Xw)[ew7 T}Wwn`0} &ZQjL ħ!`0EbE\XXXI^2m*#^ ҜOTpe!VA"W}+>(> 1L28OF<+"f|/1K>gI;v$LRjц%+Hlg>kmk`/ Z`gmu9~G}ԯ-KYMKE8 F%I9W_gwaʃ>7;C7`ea:F<&>8 Bk`a**8 "9Ȼ@O%2C'rP ?F,ʾ!:L!UUG=Kԝ|ƾ cڿkqQcnw=AU p&=l^C\D/fTL^Y8Elu5CēZ\$  L.̔@=FHᦟ{dG;^K,y ~_+6L Xr:3I1 u#GH (*|jM2 >ւAGZHџe'Ք yG(^\H99Dq xa(.sGGY>~ѾltI>o9aZaz1[kt^ȸ hVERj'NM!g LyOT"i_w)}حQ zd-iZ16GYӮ^gp q:+@6VD;yp8eP aHDqũ#'(C1/h?@%y^yz{y~ 9Ye'E3 <.gCW|U湜"`q,L^ie{Ԓy^acR_"ML|ÆMNμ,A͖^̷shq_ܶڷПR: OhY-C:oꓨ={=XmpˌlҨ~', =y+~lq.`07GD&■0o/tt @m$ub.%hWb#N?>z2p6zӬ9 "}?#\4Ks\̹.Q}( =hA/N3b rOA\2|p!NLn +[=K}TS@QĈ0X=JƼa2?`C,]o-)cĵe'ǣL;ΞƿFqssx2M@ܕȴs1a:bѳ`wep>]EU KV\A//0Cԁ{0#XK\{U.!{CYx GqF׈_Z~ytq#%G$׋1a*m?YS⺈{ Py  z&b\l~ C1YʗeҫxtݧBtѿ'M mW j#\-K875L6yzߑ2$!wD{|~R̙R6=qCP  3L|s>?G/XMk 9@7qL& ::4nC̫G/47y'xMAA#x;Vٖx!,(EDၞBTɚFꡤr_p=Z; W`rH c2]a"22/kpRY?!*1ԺI~_'Rsb{],v|**a2`0"5āĊBf ]L}3K[$ ~2S(I,[wWY|ek(~|)<]8A[E/O "a2GLL^~[L}gIʊal~Ȟ #~ΓjCC)RO ^.eIG\e@ @h=Tm~ǻ罫Ty]}c=Û7AN+dz'u⤗=,/N<\5bOotD 'l;D|9^Y+,^)-펅u):K`7K$o pv[^oixGaN)8"O(؛S'XC0 vʛ{r<=m1s@uC+Lsޡ^=ɝW"C{m& d~o[~6:.wL@5OLg%N5N_fץBHa@XޣvՆEx7025akz(H+½IV^\r1s7cd:^z.e908h%՗8WΨ-/.GGh2Ų`gS,.0}z>?^_pփ\t+Qr(;S3&UYaچŘT髂 %'_6jVZC$w,%2bԅV B'] 4r䌲GoqU~=>- ܓ\Iv(&G-߮_CFİܶc!Ay97t5>2NxHsPaԏΜ~Le)e8`#ky޳Gx]@#WϾ~Ml6WiCJgгhs0VT LW^E*PipPr+tʍХ- e:+ Bx[?~)ًbz&},>4x$Ϯ9r`` fuMFosokE+@XGpTQ6 ,o\Q쉩w.#3fQ\mu4ʃD Doh`5\kkNw zeG'Կ8d?ߴ|LK@ + @5 !l=I}% !(CQgs!$ddL$^Tr'N=e8j )>P|DE>𭉑ũ0%όEbTZ?J%+41M,o'-~z?oQƓԜ >] 1z+p T3vW CAFx"8@z/GR3C.#w7a@>W=m{i~)75lǭ=h/2/2&U租p=dJyI,.w.}Q @V6i%R`}q{k\>fc)MZXzoA7F饻%yUmPd9ݽv^)[ϲ3-/?SR0Uرpiu=ʁ__OfKwJyXUȡI@IUa<spm;#L-z3ߎmL- 01y̨وtr#vW3(50P"|~wB1 6$N4uiK}/U="cep4<,k##|C .{F3HÄ1%.;'k|ѵ݆cҳyg_d7?!NO['XdV0]ݾsu2[aF|pwvF"_XQCiG#O~XzrR:<: +d!Ϭ5va_H9DY77w H)QɈ_tWY]Vwa0)y#eiN;T/[f⚄,b4U{l ǜ^):JfT lĸEQ Ne.S-QDy}]i\1VFyQl@Qk:S]Jj6P fvb9&M{x|y{l X1]t86ԠʴR5P:Ißڶך GM|+RG}QE Z'CWJhÀg^wJ{(GhJ5cmF gl;;fJQz7g^P.ޓ_jj\e=OcN)jM3FU)yOQ>i*m #zmS9&bt aYo| Ӛ8 9oW^o-WDFLחa.p,gM+? A BR@Ր:WӢHWBF_"q/};TrT9WUx䋿`TlA׏Lf"Co@A- _0B9VǏc^$2paXrE1 ,&Bםrƀ? jB_^Zg$CcXQ_) 8}{HTSP>˹raȜ9Q*Q㼡L^qWnUY#Ozg/b_0s^Q_ܣGKJnF/3?C|{Xa=1=xVяN+\>AjBFkUǟ?2]0C0dpN'g(H GGrǰ\LQq¿;3k^ w@e:~;FnB,Cj* %I h2Jꇶ#|k}C 1?/+jLW囙'I'U)XgxK?-pxYy?sNgBaN7> ~pCn_ `+^=3Sé:?}z`"=;($}_ {my6zP 2GSuA[WF&s"r:%itE YQ|K]ᑾ~E|G^cm|md.ɪɄW|yÉ%RGgN a54eќ%i'h>G!)W?Ǹ-Ue~*.z &^?J.~+Șke/̙ -`?fK83%KW9;'gᓡ7|J\yHMvtBp^p ƒF&-'Ўqc>Jtc!ܷk#d<ŶNP 4uF;犰Ҍ~<^W-J Sxti_cpF (T&BGDžƌ^SX,j=e'M4rpk|"_ [xVSD[41K %m/ ؆ VQ7i"Wfo>2uERO=Pү΂$y8n`Z*xP$@ e2(̝w$[mK,HsD&-';Cn@]ҩO.<&^yō L$˜C`K"Uz P܏4{\7']dpa+2fu5t#wk1'gᠩcObˬySŽſ 4^θmnQx3HԼ]YP$qEټmU^mys)f|<~"`LPֵ-E$Upa'#_t9s&SL#̳n۶owl!ͮO+ {{#!s| >|9#H~|^qM= Y6do^hcyqbU7 #,SKiAOuaW ghhna=K3b峯5U\B!ӟSsL,ϳT{}GQ܎x"k? b)0D{]U#JSO:qsg2Cori/o<;>>Th\_#0A%^ cg!Cj(z 6W8[c#>Y&ʡIW u7vv[FRuJr eQoLY#}In'-ۙk&ŕsm¿l,_5ԣ3!eO?_|^X{Yi׆U}߾"Dqߔ/L+ي{BIޟ:6d6,R(07c<vnsD쫯Y*sv\ NB[ya|k_0^?|f8:Ld~3L0$GS 8>O$^"< 1_qAI{4OI\ ՗xdHΓ_}P""xyϿ-W NoGNX;8/[JQk.j LA뛿 OXe?egr#KwG/./ѣX!0Vmʾ􅱣5}qV)z%!@NN],^a:ga G3%Y_ /u|5Y-u_TfF.;70%uלa0~QPzOJ`f۝ &hعW)H"C[@q)eiǯgR>C['bNfJ0rϚ.gfͶȿuOSQ.ų,>VG.*AOS:3|?AA> X<,~hխ>|(y+ě(?AvvF {dib"`Yv j<傕]%V{@"11[=la3btR34q{g_ X ':Kh(!1ԯ;u"E<\. P[F 6#PښCFRG/~//+CR ~O2o SvS=9H/ O=>SRQ#)}ރB_ \K%WF$Lȶ>2t"xo18Ż xa,"Tji WA 67BDZ: "ít?4GczJʜE--7|4Kw9G.#o7I;a{$G0 ug[;B{˺r|b1_E6p}6;mtfz{ѫHH\8F(Jpa`iF(Q"lGN|}-ajD'td5"t[dg#z@Z$HgU~n8/9>Z1mS NaE!?gIN[>upF1e!Sm.~)2Zϖ|̃3ŋ?b4{L?pg[ _4<6tigR%..gS \_kP~A:mvd]seĢ@v%*AXONR> #΁W]+, bԁB?yKGOwZ|z;{aWŸ;!^V8ϕp|?&{y|hw̷`xۍ0O ^,_1#D3 b^&w !tEX3) d!s>ΣʈSh2(Eb5)_})# P=|ZkC5pIO] 23\{f0DS2s~,\3G@@ aD!nAYF`I8Q"Uq'pU{tZbhÃd(Sz|qE%d$ȉFUfF"xTDQy,^G(t8t6Sy7*`/Zh(cS/sKb_jo \s'sʂ3kk`-ʢ Px4+=;ټ.ʯPFQ3u7*27&4uNގ*<öyOՂ}nZ9`C'с~7+{Hn OeNmbP:0 vf+5 E8X"XIP  v|Yapq<w' `ODQ >BWR a 杣cF e1x^-|N${'9PJ,_+Č)'K1 qj ]|dh܊poäs1 uw<5W:. R"ƢJqA!~Ki||G^qA>Yc en_vϑu)(O(WXEaA*};{ܮzCL$Z< L8 F" 7laa"z0tKU)Ucno/ YM;zdΟ_.$,2od9+3ze 幸#\-Pϱ[+lհK"<2;W A>+Q{G*5"dAR+iE?Yo  sb<r7J'~VY#+<>xʼO5E^+ }˖4U_0X[X,Y`˃cZ^GJ S oµFG0%ZmXiRvT`2(L=;E>>$/c. W1>tbE\q Q?DP4 ^Csʇব)J{zlɽSv)BU".muRZ<~\,Q<3`9|N*:3^ވPP5j9C87+(\Gd wrmVi~5ႈ `WxNHC\*EGe%Jx0b%k#3]\d f˗|W̞q|˷NKQ)DQBC=KT*VmMx<#Y; GN'ZE2JP'8ϓJWgGzP1sY@toψ gqtp൸EpM_#j|LUryݐ/I,D{| ݎXeu17jq+ӹ;:oX{SntѮ픁1V%>sr'l{ʵrIXmHWb)~L,stB@6L`'p;t u*֯_v|pT6|98f_"lw+Wu~%~-,dML4e_g# [݃Oz{1|: +Fߞf?<3Ss@4@8L"[>Wg @;)xK؃`:|hρԤF.6f*)8S:D$r$`N( Q"n ;RaQ]Nns\>=t^siEu=Adj3zSѮJ"4~#GQ6BboΖ )M?pw}4T@&Ɂ05h.KxB!@ "YaBf~(lTnP,bt`C[uĿ|=Z:9Upn9<@˂+Y# N8ReA ~??' nЖuFzRx̶Sә.ݷi斃[Dpǿrse gvLA#)t.綾<`ly֫;|E sT{5qE9hl d:@J^ԙi>g*?pА>_ )*1cGʖOdWS3NM{˽ .mJ|[?+%"A {:=j@QK^4j\haIБs `h 5Hp"oڻ5r8BWoV w7/uY) t/I̽UW)> n <߄)~&.v擼Y;#*~sO>q. |K;a|--30TT M@rX(;dLqUZO)I@?_'3V3c;8TH*tTǞQCF' DĽWWwɸC@:?so 0 r>՝a.B|-(|F|cvN\S·{ Ywn!4S_tZ,dQ UP*m jC`A^ޑo9LZGsπ)&#kg3 p{ fܬ3i9qeF\M/W#j}B0CވVx+TBKry4G!pK@hۛX bXBp׃%p>PZm3o({5P)IUT,߶ڶ?pN!;"wEl^CiPwwDwDܺyzA|hrT*e"`ŠOk͍U"I0m ?<ʈ 5ǧC5%ϵZ_t7lt8ee]Z9oxtGBpVAOa?*/˜Ӄ.J)ubR Urhr_:QTm헁UyO^{Ѓz A"p~J¼Xr2tQ 0+$L" RESt8KGC\sK8w{3~uU.paeo5c)c =9S9#A&g0q0 J4_~ uNf杅Q&h7Iо\`OoI3fH' |,)󅞕|++p4IZĽ^VE+s T=Ђt֧ vX4i-YA4`gѫdr.-7T}s^wɫ6bg@_qm-k܅V?\?DN.9%؋@& CkA| HXVa4иY_q oE< 퉥@ErO^x &BC(=2f{'hrߒKF e7Đ AF $ | 5_{ܯ<N_ӱ#|GBxx/M 0 v8$Hܱp2; ,- ;A$H߅ü`C% >/bMqz%!Cϯӗxv 5V_): X1"Tn O9p!$NdMVrtA-^C๐GBADc]!5౲eqPUF䐚S֜4aى)1<<"}rkὰ߷fQ !{k~4aNaDnZT2s%OҤ_ N@*fq^zL)RP%\=/^}fIվg.PudsDu|BH7~ "db/x>CM^@*N\0La~Ѕ=KN9c5*E$s{,(Ҍnʁm AHI"dƻCI XD }"^Һ.B|2L^]T;6ut_y[u 05FlQi "&YQu~# s}׬YKo<3a--,7U ?͛KC6{M(1iI[h PbqvO>fM$'5% Do=K Er$q)*6ۦ~-{Sknk@ >rw+SwLwlzOɊV9A,) j@lLTLlTȖ;+3G`u6wZgg\E?9Gs!~}պ6?DrR%ָ|*%6-s}F]Ws<] ʒgPʺ]5;_=B[Z>^c}tƳuW>tcAµc۝[ [3s|y x%f'%k*KW~߿4k]]?wb=`KrwBdy9+nAebc~{E_At\q銨ῲpGx*s178_Brps&?DQtbgXD2W(FK:FQ3 T>m )~@4kʦ2Y6✕ @JT6hIڲNA* wX O~ <y_u~G"[ʲO,2|c h15 26Z0PÈ? 'aJ7Btb'2.oѿ`&qgi Ƚ4 iуt)7#1@riAl{us-Ng"tۚD3 0b{2(X_^i[NvOku#pѮAt*$?+!/Z"zrWtJS DM_X2QIhN[~:>/eq r'&5@sK½G>JBŒc|Z9UЌRaM:-K K \j~\԰IE5FEgҠ(3 # x .&EN̈́fѺUަ\Dޙ7I#EzSkz(WPkzji , _ۦq,FWA[|ɍ@DYM:$9y_'q:!9e>+@;B`@k!H4<#App Sнi|~ܐ$[ectY>\~e |0{/&mMYYR:gԼ"ggpˠ·]^hɇ3Z^4[05(W@㪾Cݻ0Bݢ&f4Jß1a `&#<ylt3_F"}4Pp8ï+bM=@Oz9o#z5QONUbJ'b S_[D+q+Od~aۉAfkጭxͻF]_b%"Dc6C݆Q+!\dc]l,xjyKtc鷌AZo5aJ eNip S 7GSRϩc*`ˈQBj[pU͆:{~˰x(qSߑZە[`4Safo;B`|C]@G*|ly_$O-˱Qҍ4mѰi3ߢdxZb`72588üp9v|#=9+#,BMC0gH8~OCJvMAlK^dƏf8Ϥ +]60} ?{[_Cp@[̶ 99vb5yn&*v{)p 9VMxC+= k08fKp. TR>Yzr\;[o1g局Tm;k*nM U}/~knuq✣>A`}zIlnT)elSbLySUYɹ _FB?*b|l3#="&K<51X+t)">Tnv$=#oq}/}!,,[G* CgIIGx"ZlhBט7k0>qbFXNZk?&aM1![F)9 EﮠQ<8kpuwU~ȔӺ;pzp>BC՘@*a y.Cdyi LnA8-_ǯE.2QFmNρfE/S9)Jp-n=X=! 3BX>gј"s45@{O..[F[pq`@.d"aA~ #C-j"PC|, _dHO*[Zux W!cw yLkĊ'*H=Cpŷ$0 *74cFS7gO=B7R `ѭ\j50+x![ `&쒄7b_ — sD,,|W uX8T>\g $O9TaOR}+@& XGXHx. WS#jsɀu7+=# DvG T.; 6}S錿h~ K)q\ް~hrs@U̫kD圲&XHgu$ 'i Ϲ:*0'~ouy Pr9H ީLРY2]m2f'(LZveO*c]:gNv@e,!:!U@1/0̑8A)P 6^ '㋣?x[[}b$۽aBdd:[-ywp 0t<{xؔzH+]i;@C)_B)[~(S}T`y-b] (L B$EPx3uNAP)@ NgA΃=EŖܒ6l 2TE& 紝wp T ^Ej*N .@ & }ZMn$( ޗ|{On(QH6[#0̴rX0&B2WQX4҇E!0$k.!O#2<'fS[Z~y?9srs8 ~'lV).ˌ*==?{:|]ZaNŮZnWh5zVʆk KtwE~l_z (/puy2:Ҋ_⽲ϿTyߌtCFҺGʪ3-|WA[v HӜ`}fDl(2SVv2zSDFFv',59&m 'L0ALàM.}퍺T0>.*kLeoϾ|'Re= Q⭝KY*"T ")*x|D yRR 8Y3 Nȓ#q0c2G5޽ߺYg>[&^qfo Βs?Z]3N>\s>? &Dє W;xqy~oWEBf1c>?jh3&B}۴moq@8圀[[ɼbmg_7r}tX VZي :QxV!j$޹ϗ+` 'kG:|`Dd?L5Ƨ뛟t iXb7=4c'3=P ,oa@Q_ dc.e<DqsFw'TU#h"Jn.ܛś⨋'7ŌS`ypCM`čR* A-ɇ[VG3Zb=Jy_-SmҨSV(x?}⍝eweTX;qN'^'7Y/u\jYDǪ + `x'/Lk|HXk}k}iv6W,p8%^=Õ K#@J3T+:pߕB.Q'l\ x+@YQ TyUy;'CZN2|!&fTTB odԔ[0& Ͱ|"YN"A( @~eH`)u"]#~+u2)%!=Ϙf|_u S3ٖtfޭv^Ӄß̮6GQs`q ?c}hOZR0lk'i`ַd g]}6c 28P ]H\Thkpt]p z:5m'zM"%k7PK Dޡ p@,Y`|XL1pY@7 kT4\/Z5> ê{i5*'eƼs_"4kx0ES E2adj{$^\I4yi-1[fuJQe : jխ?>Se8x4$?u(^Yn!_z$#D"F:oi{ }Oz;w2xT?+cxr?Fp Nb@ `ELDW P4oDPy+u{B˺XƖ+%F[F r?n8%T.twP֗;@xҍyBEC%B3 L̟>}sE(dsEϚs{,*G(slBZ/̷[!hg8EЃRz=!5+|. `-$ɕS(!.[ӣyJ]o2h{!EU ^RsWBߎs.Yy<4O;ѨoFu+ܺ0c#et=E ~7g;"?gN?#=\+xk>i7n?4fMjr1yml|W/vf%.,[Z"+ζ%B4~}$|ks BjwE}G0?ڦo$S ?޼z59 /z$K>1yqww|[ߺ(|n>,R5jr y<ᥠP Q~r͹ BgK^\ZF/)~è&`ÔPD!ӏ2H>*-<Ɖq>_T*bU5/,s5?QA 8-K< 'Mxhu7~πr\6m}Ј8J-C.- 3Qwk08ʺ͗)ϭw C"ȜϘO_~.fx*^ ǗLӾSƋh,x~<٣mNEV콗{l87e[:s?;'Og9('hQ)9+ڳ`_]}]@&m$➼I@ G:/< Iӄ#"G@P"&JKB$!9ߔL P @}OS/H"2r9/n]b) ^p! 'U8u; HwQwir>P t#sÒJ,(,_ aXyy _ˌ@VhQ?G?dk"_JK&HٿyY 몓X]/u.|sOpv%.% T[0#M_ gpƂi +m~_8dA8WB+Gr:jVD-)*ݷ HD7`GkW|6x`,X =}]^@З ]# }!qJs=q*+#aEX1sG(sy&4,u`x_!N9AYɠ~_Zo5'SC"?"HRBg[vP1( pB򝼱.>ͽ˴°կe1V6߫:ɸP/{ ~p{@LHPE+}ѳ\AL\ lBH&LJg=#0ayuFPoيѝ;B`čvР)S2&DleZMKrW/ wS3;F;S{B(K [{nmYvF \FtD4J&{~+T$u#sd!"q2ϺLb+Wl BGwGCX/wLZ*is%ϏՅlF!NPEݢTxYt {Qu7 iv0Y?g˔iT]IX tBp/W W\Mi1?̃iF![ʗ-~U[.M?>Q8?os.8^6pDˠ|:D4 Y,!8)D` @aX`4rS0}1,*o= IDATe (@m1S9E89o~azWYԚ[yۓ<#XвCxDE 4`&3'dppQX'dtWN8Z9;Iw6jK<5us #2N2.'@Nh[ V8Ҏ\tIxXE+dcm\eϩD28zZʎ5 e&/ӷ6GS(ns~@RzٶRvL;A o < |+6uPo0yI{<^FjfL^'t<qK]mietGyb B-QE0D*s G pg<Ʌx/y335K$jR{~Fa2st-/btbh<|f$A`R.}L=gbZFk 1sP76Aky N(?!&;[(Z؇>A==0 *;X/f|cܘ۷s"RBC6\:fΟuSFi_)摇E,Oe˷? CK㊽Nd?tNk-ߺt=3"ZB3p|Q73*.{C"#oy,aRb jPϏx)IC t, ;|1-/`ps#?E޲/~s1,Sp|eM+Q Zš8 !F +ki Xx #+X`ܢ)Gi ;ʏ!Ol˂3V/>=g|A h30jdJ:~ SFή%RO6 1 `wo .ID3 4' '@ +a}Y0O5, :(j!}y&(]$J)[җ<떇f/T` H6^ C$ hY@Wi"(m"arTQh݄sCCw1)ik6ZA,USl? @_!a"2M OYM`:Uj\ay"xz` m=M0:) !!rt2@U!h=kIwЀH3=7|˃].S䷒N}#HW; BմEN?9 u.8OQNg"Ϯ ! twK9Z |dA]C˂ۏ(Xl~ MAO!SˢGUyw =dV2BѾ 4xϽv7s2'W^yzOK t/WE1 IgѠA D炿<іQ ]@ E-7B@ M͚U%hPY"z_凮5[G?|Q⵨L ӬlBhbMWJ ;ʌzb HQцye"l2/L1$wc0z* /q CPv(&%8-Ͼ+,n7MuW϶A}e ;|&c0~-5M:}jy@MMY0?] Kܫ/q)z'9v:7H "YŇu10I:w=[i$T߼ۿnD)Ȩ8H[+ a 2 澢6zm
  • šCIx?&M./<#0'+kɸ!5T%+2"g ق3En^d |5&CeDPYJ 95Ly .4Yc6Ygy_ -\ΩRn{˨>^/+} qoG-z,c;lbhP4Eauz2}v]K|x;~`(v~a$-ڳqA1~dCg$=Ϡ"_g J@x KvqT8GQ87_DçZUSƯyv 6 \!ЀX3m#?7icY G2P\Q~ZF1yNBpWk(ho m}Cw lO2e5i?mE8LYfomj)>D>4Naa+3_|[>ɫ}mPyh# KDV䍻hgjlZ8^䕴?qSeBlM=1ݣ$?@Q(!1l]"r:%Q|\a}B#nU=hi!?xi]) 舤,O`m;B@\w Xܶ“8HGD yByh2n89"(w_ʼHZH?xh0q@uV %?Q|N<-G@Sa `<ώ5%3oԇw* G {&~ʎEw YjJF1 mҕFО8čiU1'C}L##KsIyhW3zOXPhr p=s.ƗژG8ҹ7ѩH?hoyKa&:d>rEF~2-1Yoe⻂U#R!_SF$ HPp2OW[`$<k* ݍ+^G0hs=/}/KlRY0omLa,JP|k.{V⪇x>o&p\Nh1lcܛɱ{i ;zG?"^O o_'q:P#}{",#>W-R\Z b, vUCnNjVyZIo~* (лe"yoڀEHH] >*H2RJ_mx5 woDk-& N ':.o[vwD _F}JmJmUAsBÂ1;@32(JTvqWeeYAV:=T$_2?,_L ?b<{VG?T#5G)Jj?xJGDHGZU%J-jU@ Hja5vVS32ӕq"za{DpʷQ|j]nŠ,JqYUjyԓ:+I0]mo{(']@>n,_)Ϣzqݦ뗀@t-:oU נJ`] ّ{5jpDt2!7q"8`~_ݘ(ow_&sVճhEhN*2fCETi/ #KO}~+YbȆ|fNb?BvLyZf-{ &qVkT## NzytVI%~]p鼯g7ԟۨEy~%5cp^7gZÑ!W8w;t0 R;Gҹ σt0O揠LoCH8Nmwvf[:k|PE-Ds~=XEkB9g~ɷh,0 }byĥT3=0FLv P> =['/0.O? ad ̷|J_N?_=T0ś1g] ={GiQJ\_; y0LX#W Ae0z7_{*]Z -9ަ313nMh.3Hm8埓灝k% 3UN=g.vT 6᫋eU^0[/3do|N#!N3E!̘/LSF+ 6Geg "rk^iڨ9,<ؑA-g)NhUّeT)‚^2v Ż"t,q @ V`II ,0C{u9t?SM[`^$byB!:_7wΰdK;mkd@2Q)=?׆Ѧi(0ŌKN"w'R0xqEs E)l?U?hS7<&D#3uD*ϮBA*m M ]#y'edyU Mz'~c7ַT2֜p`a>*73/򴎞 <7X1,Xs~K*SB#jHǎziż ;-DTCb9n.rp[LiŜvX'ynj9,lX?K"LvPGAJ ^$S :֫W.^&Ö.<։۸ekO$1'oVQ“U0@J2ŨĥXIUHja*>T?ӧQR>az龜Cc)\XWsi\20}gxN,^E:AÂQ&h+.{5q!v<nxMF Fʴ4  OB=R̍lsn{Sl6"DԖõhv*sIE֞ʨ~C%ıS 3u{-Ɩa} >wݚr#;>4XM޴oK}N($/0];`p9bǬ/)@^AЧBe8KT"egQc?~9OĺE :N V)# ܶ牵9,"I:mLz96X H%$PːyE('3<_:朂 X2`/kZTls_+/+"_'[p+C%VMg6'1D|-Sdԁ-ٓwrkχxg#j_GC9uC@ܔpI߰C$H Hp[͚-[LԱb6AdWw'8xL=54j4}4|$:#r:C=j^'Liɦ}9*SX,}.,/ kϾuZ_fx!O$~ֵo=+.ARWdHԮ<*5$ŗ,|`BdwM{wS$ }w/^q6}(k975PynUշU[$3oA(hĝo* @HOFMV@^?Q+> [S22į=@w=}kk>ROE8{"f+%(y~#t{PPl̠B2}enM/"zXsԺ #Ye^iVtYPT82 7` Wq@Q"z9;KB.Nt iQѿV8 5)01s-MI(;,xEu[ mc-)q#(,"af,%LC]'Xl1AF{ wnBM^Ρi#yP`}),- ڪx$EhH5,ƪ'678WO+1&qpE321mJ[oHW.-DE"3R#_}GGfIV5CU IDAT_2;|;%@|h ʹZ7חBkN{!ݰ _r{w|%Ռ^ u*ҊSNUCb<1&[V8l/׎gmPi>trgZcBNw )0r]판&oK/:0﬛sD^`^m:eay|gk^HʺOe}|CPvp"."ǸHUwk+$(0Dx/\ 9 xruA뒰(*7uKhDhIwrNQ[Gyř.n=<89hLc>8)5W>՞&!Qwb}~Y/K-S:~ BA P5oKV-Ñkn|w{63y@zy-ǖ+DlDdOYUh ; xʪ "m0=_T3hӨ<9X# (bEd4Ber "TG嬱h Z'-SU{ Vt̚v{[pd q*;0NEazN>" sp ۿ|qG5i`ʣETؓ[*,wJc&ept,~ f})%mYu c]ӉWs!?~7 ng,P?< Ll0RLc1+}/wQ *R(H;LfLDVQbP ⸊b8H2GI/yᬛу޴pC"UK's@d1!*0٦"<+H*=aPY2-Sz哥?]Y.i!yep57Yk{ʹg?#,>!>Uu$#`b6eŵ:x.\#QRu;!!($e`=.X\܇E1p߹%LgLHƇzq O!EtRüH \PI8qfm8n^F;q{_EW~ɑVj Dc~aЛ}50{<#7%3xaB0+ҕKB {Ɨx%<2&m@DX"* ~Z6SbL}ٯ$LX*}nKElLb?lsd`\ #ͪmB9,(1kV"$ u>%kJ ԎIŏ'fa l0/|5JU6W}2`j7S<@Wq19| n9(L5?2Nآ$ ,QE0W) qgJ-amҊw'+T(; ȣø>~'_> 8""P.U)ķX K+su៍l0WuE_9|ȸьMvpDg͊3Y>JmnpQwׅ/ym-\9Q~ Z^0TԄI5S:2ʨ: "X@#ֈ_7!P']>eתU( m#"?2X)F|nyu-֩#-?oZ 5e3 -Y+&Ů5R ~ 1LLXt@p{cŢ75-=@pjn_[7+kQ@eK0wZJW~+,TJj4[MFɕ,ky4n* LM_V !cT #<{H ym]iZGvN_ hJTr&a=H@#boSdF7/dtſ5CΓ'uT~B(i_RLgl E]QmZ #SW%"Ro?E?OZX^Eg&E{*^ D&3eO ) VSE}c~qثau 7م[EFXmRmpt6:"u:U.$ʣ§ ƀQ*BW` ˺{+%x`0? v)SnN+ .+Nr#U+VN3"6oM Q6(3 ]C0cZZ[**0gvE+  +JTʫ|Ӿ,tem4G1>xO̜*TQxg%\֒&Y~n[9P?a-|V{oUkQG@ # q[R,̿eôގ#[B72p eC\p5=VÐo qðyȓS:#m0yFA%%ALD1}>˧?˿t|/\fmq?{&ss1CKk) 0/\TRfaM({|ʾq!2LSS޴C@QryN2Y49V7&|`9~6sO6"(Ǔ ti4*${.p-R惕drqCr}}F EnB-w}5F槯;b554 kGj2me{0pWf8C<(n4g?w7$èK,+6"][r4 *də Rp~X>W$ YiiVrG nZiMҞ3|.-xm[*J\G|@W<%Qӿȣ3L w~t,tEAGKܓSƍpٰFj!PywGpN%Dƽ@0s>CwY 1+DT2Cx(@vH7+QBM8&ùCPMo B[:!cT3%[B3" KgaJ-\wd\}AY?`[zY\T^Qp\7$2k ]k|2o$]@B^yEv^*fu%wJUN0o$$`x 5W]T(n=2^/  NۅE pQo{eIqtO[smcGC޴<%<~&O1 } I+ю*W6^R`@Fp,!k\1%Wѱ 鞫ټpˑߚT5hҨћf ᛍ+on~5'ߣj3wZY ΁or Uss8N,as$920f֯ƕOjݻS_T%z?{Czȝ0r1#{%܂Hoʹ/@72c/؃yȌh>'-, 0VB->϶?btpwT!03aj]S 7lN Btg,x5pu04 5\@'@Kk׭9&}<ȅi_Ҳ'|6nlA󈋎?[):nf#¬_xY+|y:c ?L<cMpt-tBFG.!䜅WPhx`ʀk_ߎwzE|q#A%ryH(G1aW+HmA{]1 ,Tk;u a)Oq˜y`Zzyr~9T\A?H w'6It=F^an?|s},|IYq0q~Y2sY}Z %}>k4͇A#/,O}C6npbiG}$uY 3Bx?9A"^Y @H+ wq.65g,3JOtzgn}-BGa`V`D {o9D-l՛, B1Tn) +1q{cWJ:ʐB9,m*\G@-[zA,'ER,<q@ϯB!@=mB`]A:= } X&ky/Y| 4ki_E}t{knGKp&@@qzܳSv@Bx! S2&"damQhe]hv(1"?z|%>  4.SYkr8"#L6,jC)7]$JFHgB ޳mMb7\uԣr/GqW!I|?U q'f0t0MCgK;S4)!𝲰 ЪatT12l}=,ǟ t+?AoaMySH|, =.K"D8obsEtnFڝ]#=ޣ:x^qe:mkв">)(jcE3.;9|o瀪DV-HLA~g璢hguRGƎF~ 9a(]z#R37 h< 1ΪA)d%{4l.%!q6ǘ7M#\z2|OFqG/Y (P_1x0Xe ,N)L@ނ5<^`(IrmlۯCX]+ܓi|B GGPb̀ nNx~+S?DQT{kr@*Ղ[\bVa JF2ׅIMO];f~$ux\}%EUx ^ܖ!tPj%b7Tny_~q뇟ϛmȐ<}:QZpEՇnMo۬~ WŵO:#!sоV|.FZC>⒀88D*3dVmH"'/d+K  җפ Ko7V,JZ(maPP^*~ HT-kg(u+q󱂅a~ҷƏpxa!)(wPh(h=(@Inzy81^sW,MG-By-=4|..ȣLAOP0~/HK ~҂yt%&#~ցV?x!M%?BwŃO!s r&-ᡥ؆S>|9ÅQN ɚJ$L٣rJx(t$l*Ծ=ٗxIp<?} txʚ ޜM/6ߖ{qp{Ζ#2\q*w 8Bǿb{=lņbi\ac9$M ?S\ ;M4~,K9Q,XRZhd*]c`GO(eXi'I%~.B/"|wM 4߼PiDzTSF;D~(&lOsԦ B+ <FDA' kϭys gS ͧ`.~zs \Lrr~i|)\O/.R;=aN|vtw6~TI` >K Z^oZk\Kϙt&R{e  ;W.Ylr9q/漀4IL_q#O~Y~s  _om#q3R W,$Q'Ik%.rm5V 3#- ==g@R,/C;q!D? /T8k{9{~ߑ]lX@|;`̙g%)B@w䭼|bF[hUê^%͆~QCٻ[ywAP6TsiNzh0epֻdr L! ?Vf9` ^aɏэL2A&IBC2I _&p_ŌQ02",;;  e$ׂvc-e` /_ʳO9oA޾u偟{?? P6qeqFl\ۖvw Ou{o\ړ^ϲ^P_fFry+?Neo oq5MK+LZ[LGͺo'ruӏ$V僟 OIY12~MR";9^*|ӽxE 8vD &5%_O ϽCBQV>'iT6E)yE^,U(n+?VVEjga9HYOcZ_'Te嫠)+~+/kd@#4LlD-5̄ooF(ӛ3JC揖ktFߛz:2Q) ? > 2Pd0wwT `mvp'>1MZL3mI/P>/ß(/ 6m PZ#\.jLP~ml2~+۷[$7/fy)c* ,9ßok|)keJFYeɃlFDV9r~M8P#e8rT9]O he;\XY\GEF,}jWEVۮ m[x;N1 *eE=hy]x_v V%8 MJvjX,LP;`Y5 38Y³6'^ "v|4<2Ԅ;ct?˙)]2³<t7;yܜȶ8⚯#%Si(`Qz%ฯa{Ku&̄7Mgd'S BS,,OF=ϲ=HB#veQFhRӤs5bv^<'ѥgϾԁF?o^UL;)@=C}~ek|%Teۤh+ګ U~O|Xw䇆$Al`er(˝K~}VkJX >x5~/!iMSH;,ql] p͐?*ߓ} 9ݡ"!4g±Re>ju[a'h =i }Ο$}ӺE,;iI([H ̣j6**<xX\e:d8>ꛯk|Q:~8*`2sJ%Ta^_;XybAgguL=vI}*D s(VD$H{~wM%sh a ip}AZJlC.`ԛeK}+Ғw}]{q~6*`1B3S-A/Ccc{{o>Qx5W0 by@93mS_2ns<ΚϾXӣOg|cVo[<~\W|Z42B pui+%8lA(?o>YuM" |mCtҖx\lw;/~]<}0<]9KEo'r:WAʭu|sNf=J]@X?~%r5AO7HVkdwR:AG6<*f"Z֛=,Žx2.8ю \m_75tϞ[w ܀wR JW0g`wp' D=pFLxL嶬( iT8§ L*J8C(0vWMgN~))l㋫y4pWI7Aޑ4 UT k/9Q= 퓟+I'0B-*]Kp =X:}HM/B TzMP/;ֈF3qi#(I3~ 2# F9|Wi_ju%ʹ K~ B= 8P Ug܏߿ei-hio,VU8 #<`HxgU[~+k2rA@? -^8 %6rpԋ|N2Y~e5p<7l3i) ]':1O . O''mH9oOC~(顎T*{nl]lf*61X}俶C o^Z I [з [MFuG:K`ٛM05> WS2'..yΆeZ r8 #w銘[g |ȉLрn&פ)gC'ဲT5J@o\#ʲq'/Q=WWGo:ݰ8ѨL`wʃ@?r`q[Ƀv;R?7ܧNYCB׹Tm ?r,jYh#r 0'^2}Fa7mli_"\# PiW1:=*g!oڤ('I5zU dXvJ;sFGRΟ&4XjCh #,aĢ^~C۷ awyg>L);(vվ*?u7 N8{GS@bgxxF?{FrVH;1d ,2X}2޼-'ڧ,e~=xZ"YƗghd" \O9ĆUYB Kfj?V4,'@ c^%"?fs`0x願$'*4 -luz;i7ׯ6gKʴa__Ȝш(~9 z[r șwx(FALbʘ0_t 7GGz9k9YrxWY2ypomw93G!Qi*eܟлO/sfo!^S3RaPPl7i?5M|ځg445ʫ ʺmot(Sk7F2/MPRK* ]iC: \tԇi ^u<.X4sLujvP+ŧVT]J$yg NPOɩ|<ςAg1_-ܸ7a^|x2 XoF~B8ĭ(!I-py Jz $&A4ς-Ü };du!@4#3pB F1-9w駺PNt7E[Ј4*Bl͟m !=t*g>*%-qoxZG į`rSC06\q<5*, P9%\W=ëǏzqS(8Ǜ43<+`D-)h~#>M<(4m,HB*@l pg4N'Pt)/ɑ[!Go8&y`L狡`p@k۷o6]o()h)}JmBԁ5ZqywmBɜg,CLhx|/ft*uTNs'{s>]kWˠ/qڗVk ߮eI=ww /lQVNޕ_>E7pRP2/^ߡ}2={. ݮ^s|ys טk1p V ;ǃpR W@Bk4Q.q' VwsQ2 ]\Ij|p{'D!+rcǪ=J2~\NS5H I.8' w)n߯0( %Kead%!dϫ'=HfI=\i#TپW.m?wժ ~|x\m]^Z)2.p2 B]`Lb7~S`b=4=|W΢?wzEhK%$ ;C֡8QvD{+ȱh1@퀷g~PNŢvJg( g!\\O*Q=f zg!X1,  -AwG_̕L)AU"FY{갭FوC+r` e>47-I+Q)9̀Z|u-J?~`ʹTIn/ǽ\1H` ]^;b>kb/[wVio os+ B,Bfd ߎAA:| fG<x?@8!Ro>7W)>/IJJF 4U?U w߳rL)ZICGGg1 qfAGD9T2ިa!R>sQڤP;t#VdS<^XStj`tppɢp1ᱜ||^~6'S!$]c|}WuB3@7FH/:[ se^_lJt$IX>}d#*y">]엳Ȁ#}6@:$lzp0m;VVM;Drch^EͷBݱ3Ǐum@ЙJ ˑ l٣y[qE޸MF 3?<^emv3|V5>|)MqPsݟpApT& (g5+G.!;2yP2qm峼mr bLhP TQzbDR n`O xS4G(P9'dyap.-8\O@0@, L6'O[ D e=ѽgj_C~11 2mHq `Qjə~Z O}[ԚswZV&*#K=WZ+=yë1^uNl%`99\e T\B޳gQO{rIQ  1Ɋgd>B]}: %P(˦,pSB@`O~y10ҏ))5@2Iv~}_mJ2eN1p'DM&ObtJZ`AiQ[ SaֻJ\J5(5&ˀ8BPK!5*g?t1c:ש¨#.*N|sTF vNt1SXc *u{.X.8!K̀ \qhVtu:ȩO23K <_X^p-vH;"3nvw屾,hnS'"W K+2<{ACf!-ό89u;>3F{>Mߎ j# LΫ| j9@f, صE!%s/ZAU3KWFȑyŊ?+]'`|zQ/DOc74@SGlb *FРMshG .ι_Ɨ+DHpʚA**}'w]Ja]fEk%mgӔ WRܫ @yրrg6&QD \Ч*5IJlP9W@nҺFUN.<iWJ/HNgRֹ /h\ĕ zPE0&?/ 6z. `]F@~_lgyu.H5E`xyG5|bX8)m\- KMaX0ePs5OI=v3F/~~G༈R(~1$|g4 =լhi;:Ȧ8n?F+(2R CsrmH4"9ߡN WcxTP$4nNs t~q|fLF&TnY Oڔ4/OA4+x=8Q$/ Xs(Զ\"k2bcWȟ%5 Ɛ Aڛ[f*~037I}pؔh4ŵsŦlʙw yyv?; y]ޜú-+wnec819ӟa_$6[UI,H+3׷hy?z_'Ow-ŠJi m:?+zQ?aD|@2DPT($GzF( nˉFM$lO81*" 8߫-戮N4-=xGر+!eR( ^"+-"4QLT) c1\oC6C2=~sgyr䑦nO|)nz_eq9ܧSLLΩW7Fdk{-)}JCêlBnay\aE|3^R AogY; 6S,n} E9%|,Q.ŹfC2^>'q)F)!{[2ɶҁ#ЦiG^[;m@s5g.WnVpG+Uf=nˈ`.FSõ5@{.A]טa[dP@a'q| BzhX<pZO >TyP^qp?~;1H>|c \Ezh 0חW؄~/!L);<~ RҠ3D2_xfʛ >4# pŖ৿wy~׵h^=9 Әǣۅ}l cV{zޏ8N?Ǡ.MjC5B1ށ3HC1\g{ׁh7A8)ov񥰣#L+Bh@^=*Nqmo>>Oxxwx2HzCn9 s(Bp*G5F#Zay?h,s$0ێydК\: ly8#ꥠ BEHorw ΅;[`> È7o ɰ4i ܬ@l㐻jw@'h oV@O9 0G\ 8)7;?3©J#&}vz/gTDG7Wo:t`|yjGeP4.@qWysRaFp=Kw=\\zbU@44 \A-d_zpŅ=moK:k~}Ξ}85)~=OE¯^hO {̶Qytp/o*16}an]yH&c'_!v_מ[M(8P -잶{(LFz7,?;RY Yy}sѸdl!jTx7E0|se$\I? ŀH:2xk "t8?<Ak[J,-M8l_^.p|pbg+xԉm1ZـuҦL? :y\jsu{6v-47Qw3 !Q݁#]yٶOk(0BΣLD@>#a<^ Uv IDAT.!_G~?+fCer]5cNj9WG;q2 P9 "UKjҎ[2Ě'pEkjVp8d(3 To}ư<;fێl+|0ej8#Q+Q8)S=L{^ݫ hޡzŨh5pT.jYDcr0lNF@gCF?iU!4O4nXS1|& ~&zpթԃ=|z[N u(BB$u"uǍrЋOY$yڧ 0iYY&4YA.K{880HM`_07 Pš`ܞB*7 ;8\ܿF{'ʸa 3x|ay^z @9J<2m:2+_a7YW9+£4 ۮ)Ny^ G*| AFz;~2#k[̄S)/nϦmďqp{;/%-8+?{@AS3S*ܩsN9%s:{k֔9`:=>Xε쳕iu6]WQWWۣW//wI.8\5(㧏2|yt\W/k|e5o5 _%<%rRU]/ӞPN:q؀8w=M,$űpFFy{]lެe1\^AEl9l]C?qQn!u\B\$p  S[߾|?5S2oϳqS U{ S Oa8="O}k<+Ax%p$i!Ζ+[ivk7B۾z=c0^y"ᶟ[7~Y_?JL>o/qV)@8 ޺ٸfg({d׵ )C/ygsw0~[]^a(G_ZeUץ|ms?轧MіN=6YlqɫmYt4m7@}Kbe~Y_`.7v'FdT!Q~ 8񧺸=|YTn(ofP*ЋiܧD2g} Z،}jբh̓^6O!!G |jab.‰(@4P3JO^Ï]]^d@O c`2%'9(sZ~kb :a4Y/BO^TiByU' , CV?Db@ջ)S.Y&ʴʤ  @ixp B_(l_aLBSt[t8$eh( y!Pp~s9J֍cR<|5*2!cwz\BY &Hᥭ9WLr܎J~;N}` }-Q$&`1·2gI&U"KvǧMڰoupFˏ@bf lX)`ho kN0ox1JE%=7Vƾ_W5-S2̤NdJOFWskX>EA˔А\%kbp]6D!qK70QDޞ^lcA S6 l  Uxi W`W~i' /RBKPdÈbm/9}Geu>@323y;lA[ã$;[/C/1μn҈K^N2'J\eH} 5;y1 t=4zm/ʗ0h"'HnZ\r# UQ}{U5R{ b,g{[j",#ަ 1$oEpDe'}nY3_ $lҺ!o__&G Q/-tscC6ŔaFm|e+L j5Lk^aV7.sg5#{54 s6pG~,ѿ)$S^ֵ܅{ח_5+0/ڮ~~k?8X'oLd)%5Q8-tTsk/sǽ۽ްo]ߞpJRlcgDm:_,@yO-Cl,8\Q#y,SGd8 ?dqPa: k>oXO<>щGlKt"x#_ Rqv~Wte7O;(ƉFTl+YL2QeFY=4@n^K27{Ǘ6B ^auc݆.L4)%ѕbP(eB|u@(顋Wx JqͰ%4N[$Yp}C25t%/{ *tu`i9팏G`pL40@ >G_G_l==e퉂(Q)~2Dž= $f߼iV%?QLJ&v+T(Wk#~`Â)cx.CM'Nd.y_pQL+")pJfՆE*cɍ+cQR FT WFnz/јpB=~4Nt-ʣ|Q|; Hl{lpo}si;=Bvu d/d{*W@9k@`+;(J6s#5cݽ|}J1ukXz֜i1|VsTo(:gfNȐ*Fà^ R,'({zKJ/@m7w ^ {$w^}gql:JJ_a`i_.qՎ`ໝ#4qw SƂ:?/ i.we-!SJ5J#\<:ʡpKDҚҸQ\" HqpaZ^|ōWi"LM%2Iܤ+PFeF=] )Q‰p}644z#?$ѓeh">GBǩ Q ȏTA"3=2ҹCfMOX$\\C$foC@ &i`V7/=>X7ۯ69:># ls2F#R=7`϶4@*ի^'[ :( [N%~rWcl,P+dբ i!S)*KgCנpmEƲs|.S驫ƪ!Ώ9l'!8`iz5 rMG1*IB>q:68*dFxPc+ :O#rI7_[2c}.9a=CW q,mGc  k~H\v-K_P t(ٮ4<6Gz_߸&-rlD~#6\4mMw)IҚ;"'ٱqM x2eQBcN^y⛯L1v#? :5V8˰fNކ{17?GϘ=e!.;-[ֈ+z O/;BL'^/2LS+2$z0֨発w:!Z0LF E=+"eygg >7ɺ4t+VlUCx_gnU# g%!_UpsT(2̃ TLI }V sP*"dp 6(6 8)K]dH@ !nDMF p$CnH(\2dz7$+P9Q][ ·H%H/oʳE~MCʺ#0G;HɋFn#0+31u7t&;0E~) TF>(s#ˊxtiH])d.F8g#[PU< KZrw|dml(~Gc` 9NtC03H3&BRCTy¹y|ò dza)e 0 kɟ X"JNЅ!'.+)?#?^> 7xlOI`o)Ӥgm>~㦑ws~?ۉK({[61CF.O|. Yg?=yԫ,!ߢa+ m-]Lq[+= ki`-9 $#;˚E/is65 i KD#wpCNCd2}R͕o.S0" Majkj;07--Ưr)y) Id ޕxr!lE3u`(y(hK;Aê|:TJ^(;\Jvd K|p0*SvhfIKʿ͙p)2 X`,(XβdNK%GzGT>cz }-=R{Z2d^Kp]'j6mPgK[Z3ʖp{e sfk[%Cura/Xn ?|pGRS(""U6I\/0~x#IۛUMt +m\R.CX3\ܷ˸xɛߕTh|nƔPӆp!2+!\0> F@ ΀>竍5ȀNQG\#Y2l'075M?7GA(0L)MH*a{0&g%/S8TQ }*f+г-Įhǂ֧(G{z=s> ӊdغ|e5a篘gqp{mH)i(_b=Tb@5M5X1ge42xvw6ոg|w_&{K8߲=b|.ԂFKR;/tE(]zbA21͂ggB+yP_ yp8%5"ů#>+rַ[J@Cш4K}x^: 9dZ!QKT9Mϐʔc]33 `m}?.`[#KѾ8׵/lEjer"ղNuReR.;^hƱ}8' m rkx3l0\ຈYGO-A$Hoʀ'0h ^.FnK+t;K:H5-{eh"r(\VjVW8DdhYu_aEgk J<[c qr@}gDa^(4hUA&ɹ+2X|VyeT|u)<%FŊr?8~?e\=}^EOkYLY _5ɓr2&BLFVi;bN(kMHO|1rN-2rqXq.lЃF"Q IDAT{{*4"# ø#^I/g RIug /! ͫ&tZQTЌ<%dVtxJye~W䥬SV{5 &1T~-T|DOcȨ+TgUy@0Q9XQ;dZ&{Ӡw]n)y`Tbۻ7,W0s4|HَYPX.ap ;Cj쵗}X&Ayyd]y* WsEyf-)ovbTXp2'BGTf{Pp,a{*UC|0XX,=S9'O–V0^/z3.z )V JbLE㚒J^Ldj:ZS!w0֔??sxf5}B.j% i-9-#bdDCr( tG.QCm:ܿ~b:z.s{oxis2?0{ٵ|^ [5(wI[E,Unh3ܟۮ{/=ʧ+_EOݮO\GIwP♞&2P 愯n7~G'Ps(|iȈS9'q#B17>FBlY r0UKʶr{! p 0?=y8VZS( 1i_Wq*Q|''tpPHPk]JM{@fw.Gr6)[qis<9d;G7 ,f4dlVy9GDǰw2]>|cD=KG{_(0Ȟ}0iL_1}цaip'@`eK:V|vߛnOe~p `u?r @߃w)יk2mNOd߲:Q /XӬe`Zh%t}Gwʃw:p8Qae}_j_*Baa鳣oӯ=yQW1ϙ\^N,ŗYVaPa;%~ggux?v.I:U֧ICGDHaU;b!4Ldz@xW.. fV86//HK藯\^0*(f@?=` 9*:} >| ,BP<.<. ~+6 z'P4NHh|S.q]B6VO:Z@r6(!@ BDTJ0Ss:,Q5N QI , ~CƏ>ގ^~.f}d,:NsLR8hrc S@.A̽`TG.νW5F<ޏjX1Mi’Mh/C_LWg x=0'"Viȫ=?b}%եU"O]t'YJLL0Z 4a,MSIEgR{* ?#.5l@+#K$YQ oggmEӾb;T sŜ>+pQI ݯG,o]6JzU*EeW;V`Q:#<)l-saQ6UV7\ $GXqۉ~yMW2W$6w&;Ե[Hga ^Kg9nu gǘc,[?}ȵqz`!(C*ɺ֎CLr΀WoP3?e## Y H.9ȃc* /ሿyx0@VeCy9.ghx`* A V MFRoMCR0c.}g6!X'I$vLtG\(BӂTpçE(RֈUC|T>ߡ ko|_ůϴRB)3㑼K_'ƋIweQ1ƯӉ|[cEW{|= M+71n:YdD2-9ǎ9Ϻ+K!r{@vq]\Tbѥ=0cۦɃ)V hdK`7-MI^u^| |zNIrƊD`?{Ǔ0ӆssQK_XqS>. )rtzQov L9'S!hSn5C+QqE&S8Lg{/2[氀+`.Lv3m$Gs$YG_vW1OLlW6ݙ>ɤuxd$bݬjp8*7l 麉T^ذaPq:GZ ۳ U-:Qd=] {{](PX-[8yMi +C u>.3hWS;~)FSz*8W2+"|c"q)̗D esTY'4AYgQ#ve6;R(s&&,#uxiwEol$D'm0M!I0| !HO3!Qg4*'Z˾K0ĄyDO+5{b,5׸2D[p aطx>P{&(WlE1w1H,882m @.xr! (P22H;Y#DBmTcXvZY䚄Lk,M_%?8َN KfܲsؕtyPH!Cts##8S^r/)I0yl+^K{& w &.&o4P/ 8ی~O78O|@3hIHnalO  bDZeNF[^K ~GdjLFqiՎs>{'7/r@A!G#6.(%^UUT^, f*ĭρ ̀`niQPr7|TAcgpD;B'Q_t*yI-.q:i"W5yÒwDUAWm C9fD⤳@Mo>%Wι;)'..)`\ݰĩ}`:}Y|rf-[qξ# P%#KUZzuǠJ']X7'*+➸8@;쑩Ӓ?37qSl,eoy7|~yzb}t<͊ʒ6_\?hM )+JmMfG4/[uM\^yfϡn*0E@ʇ>C9ɡE/^@e6㎘͈cNf&hqgY@ MemAc~mM!9X Mʱ@ 48 Q\.K`gN$(q /ɳS(~m z7`j;9We9_3pPNP]ط՟O1'W!@7.LY1ᇠSCe  &94׺ /ړ$>4zGA3Cy@ M>ބ-@HX 9 i?ςa ~ǎGGn0I;`deY Ƀ@Sא,YчUMTϬэCLX̽&ky+nsVfխgMv@ p"cJw,T=A{R7pѤ>;#ཉYVw$F#ɼ3fÓqD|%p'qF9ޝ' Svq]r&3\ _&C^'<̞majkCEYt]^ w3W)zrq{?သ$aH!KNaJ|u2;L'fer˙6d}(g??9\D;gkͲ۟G^ڡ!a+@4"cБ[A!Iێw` s|6+HjS_K)3@kO>3@_gp:Cx- AOx=CX;loNoGh-oVFcmA|]Lyiwo?: *[g܉~z_{? ]=# rɄ}-ΓkQ%8ޛOXo2l1ȬsQ 7Q cK䡫,#pukÿ.K򸬯~ WЉ 7R{=*X<-!WǬ + ,9?tY/O6B>9 'F=^RTRC>IfkőOzNjL{{|zL o.O"v{!14y`/юu.h[ﴤe[ t0k[ࡲ 0I]xLiTcBX1[cQJ\槓V8𲩾K*Y<K`}ƁHmBOpV].rLh$*g)RdJo󕏲Ә@Zm=D} yUA 0M W '<]s"(*N O;?Ƕ@f i!ɀ<|=+%)Fˁox6 &6)2|oF?pN Sk`#J+R,LV IDATo{!}h9"2g04;_TFr 0j F~D~/Z$ tee-#W?u }`j+q}x1$>d6a3_)7m>:p'1p-]sVUpo{#-=hϮMiFH*sJC4;)Ke>M۷#Fv7k<9¡3qfe(Ȅ ; v",(o tF e;ىU|QZӑфV='<: H'4Bp+#*6 xtPC1r A;h޾$:%@fZOb;g@ǖ>ޚ]Z I馱utw?U#Ff ԱĽOm<"-MR!Ⱦ)`\@  olnL:TiɅeus?(\*oQ}aJa0؊L! >y>jXaxU%0~t3 2& MW\Oթ[!O|8"0w^`r@M~8Ԗ3.op,5|/޺'<0.M81䕉46+D}2rƵP`.й` u`!H0@ ?0A%¡%0xH&?ўeW :pSt`~}lU(.J 3*Bg$@S/;r-iAȶi54d-k&+ヲxN9M.Cΰp#rPUw ӌJOlķWYq Lgd֔px{'+nƊ4qIQ'-W'%'\>Q/oߤ ͟H F3s G-A<*9DW ApiѝTWģ-KI!pUU(cE]{23ao)׃@GOrA2=29C䕿//&o3˓q5mN$ԫ??X:,P'c9 RˏAW,yMAQ%wo oo+'@tMs .t2rĜ'>2H|D5~& MݶyG> }+ٳ;^tlR oWFǃ,rEv*=!1Y۶v k)?;ҝm٦`2l81:+(^ dЇ9.9ȣ 8 Zkdg#DD&HL:}gx~6+Idc[+ Ԯ[?p͘+.olgk4AI8-nQЇO:aJ܎z )l3tۦ́hc{n~lm1(UI*wE'}sZ;R~B` փUX+hr?8> ?)b;QP\pwi**2Lxqd?#œΊSq91!:(+*"(.𪊮[}*:eK5|z:Vfz7d*I;orE&@/+هUzne@)`) l}}S;Ƽ `{g wJY+w{&]mn aZr%oNe>T/ФI*2Q`PZz C.pj`l; 3Sf UnF52crw(Y,G3V{S|Ahkmqi$l!U}J % >E3CR'7Jiy)jeGQiSV"2Ӈ;m4\.|)/|jiہo\ZN8dPo@S Ymw"g?:}ӀIg^蔄F;WcNf mV^( Q zHINtmdXSHPiF:3;e] C .][gjfCVvR\>?[f0>@ULe@!P=+Z,¥+$ALm4-Ǒ$ #%HȐ3 ҏ@U;%|yMU"VI7̍n IES1A]1L5~) 26l D2syuwO+HxLTX;-|\%<=<*d .' O][ ⽑VXJEALkntB1tSਜ$h{u|wVdR&ԻIN?#*`ljɓ2%z{/JiK}(" + G`i~v զ vn0[7v=4|kS+jl?/yg?-ϼ;y=lQvO\.Sp׿jѾ:2rKϏv@K"ϏS5YweLt0k꡴(qߍ?9)b2{:r•[~ K{gSOquXg4K l;pm?mE)fnd/Kw҇:l:#0Ͻ'eٷ8,C'P|,`D!X`w{t,T [k^o[<_P.~0WKV&)P -~06c=hr_2S=z6[Wq5%ma̟ i[wjc W':zo!vE=~-qf[S[9:__b \lw\Lgձ'䂻H Lْհ|8Z$g[c^5 1nuqj5>PgW\ѭR }rM߆v g -@3@-i r gߴ?O3$(]{ø"S vV)oB,N=g \ftH\ƶ. c8)ur}فUJ1QˢMiWI`15] pYxa,.{=qM2g7[Ȣ݊]uSnSQNp~ճۥNbyH@d@m"rsanC>+"0^d_h=^ܬ߉+ϟ/NhMI}&M ̤r­=w[ XwO% |֒0g܁ݙpf;}a'T_?(s5xEes"jNbSܩ )k5ZɌ&SPkkbC IyP`gwg03CfS5d&.'_XE -XmC-h #Ꚏ⒠0M O'NތS%Dy' n3?a.%PiFe-6y?-62j J$JGT',:m*צ7Sȥ-].<qI/}߼x?KI ܬ( 0583^D~A`{]zܤfm Clym T˚ny~{YgOr-L"k "Jjfߠ~(^.^xt~S yg2I~Y7³l?Ew7EG*Cȴ-}{,9w9cCPvk74R FS&ssN :u׏:$[kAC-)oj /71hy͞gA#.a#4mB6Io/lQK Rlyzpʌ^E!Q<3|t7R !> $sɎeCyr { "V6v[089`A@b֯0M_fh-*[o#j a$qYQ.I7tON7G XP-,ӕz#2[f,Ne|j\;Xx@06>FrVXxVըe!7k.#+6 KݬkM;|nVJsp9?_IUצ୲<{`RrQە: n v"G=+``[BI: i 8<__ g'׺*b7P2doEqnP??w!Hc"vX+8@qNS e! 4GBIY3KOqgVQp0 v5C&t plwx1 t"?HU]8@[P}5H3 ӯPzʝvJ$/[gvWHo\?8vބ_<Œ NVgZfr0:7,n{LieKe̜-OFß.Wݯ񣈚dP! {Oƣdpa5­: [c3hR ŝzSG)`@JFXjj qq__V*L s@$jOi6y,.4c=}XAy}I gT~eYcw G͕,\ؖ8aO-?&=Hy7cDJh$WXrU/7WN۶" R>+~8YЁqb75>OV=g<;Jq`( G~綍 "h~”x=J_h"Le6#q rѕ/Mmw *c"KG0nqkVPoۄ%WX;gThr1x$_!@Zȹm[* j .!:`H0k=za+` #84 m)|]虾G"d@^)A(VhQ8me'm }Q6#Z]pg LQ*βȖ#[D)((sx _Zx{ʤ h]*ȩ\W*9|kqf]I M‹ܙSnYzC@R$H?M!!xݙ`NMc\?tX°W3o¯pow8U@ L&>gHp!G%q!Q8PB䠤J5?`^x<4̨ By i\~pgǽV\2DmH#Q: L r_hjvSG4;z~h4"I>5 Vbbɿ2<ZTN\ϡ?}iL`u(4Q7m OF,%Dm[orOu%_I9@FG&X8J`Bp͟nӸ_wƯRRe'i F=3:&+eدkRfvK=|`f1N]#oY;f{Wy?Ʋz0_&+ھ{VC cgP{?1>~=}'Y%P+ qoixU0ehB6dO;nmʳZg ^+Q:i@̸眿6B\íН9`'4S/xdԵĦ #oX3DQ()4<8>ʟ V13%40O- >7@X%" 3 `@g%K4 6P`4zneCAA\|eW2;"z$M *C?r 8>_h⹼Qޙia)-)G ,8L.bSxB<*ʘ ӘpPТ2hik!dy»+2f;{3PݰkRRعxt"tkÄ6Ȼ鯼}a uK"w']r|P0+4 r  3 WW+)Y/.):uM UڭogUG[&-S_v7x%-c n$pηg)2'Ԕ;d&ͻL{ 䡎۲} :;UϹ8?WWҙ2-}ŋ_\Xw<\|ƀ! y#|]Zw%C+XW4uҧ Q# 2XJZNY=a7b+HR/]<"*ǠWo58=Qh{qYKe}>>ںiY>nImw,ﻯ1wͻqs" 'N?gi»kofids+G2nԗ{"%À1oC-[r.\(QP;vkb+yl9^F'.KI0Z%vŀ6]ԍaQA(8}KA1":]zp3x`ʯ^2A_:kp("uW}[Fqd,3<PBFive2}Q>]χ'2C=-uHD[r"L)9/\k`<.Ph#l̀#}Wƹ'6ŕ$!i=PI JAf-Ixg~a?r5Os@Moe(CwL<β#S @ ; 9ȓAcvj [rK=<@zx&C[^+\Hr\$?:ة])N C%uWzSjʖ`QHuN|܇7"~#֎r%m!ve5 >g_[r3`fWj]'}ʔMZ|,L.&lGuҡq%K~@뭊_ܦ歓(f(e8Ko83UԖsJMRS/~ dz /yAʵ[ve+m9%>]S6U8-Ҥ}GZ04"F7k7A _ m(oM @8`„`=%Jj/9fCqXUxĝr~A!#MnyWnY|e1`g;`H([sνC\D𧻓MRt0E,qg !% 6rq:gNkΦ˧h \MG>P_}$Y[2вJE$N{ ~bm=FhZ)gNC|cl.*}RE!PL%(gT%熔aHCu9ޔ|YvfףJ.!2<<.4!W@npa-g@nT?2m${ͷv j.LOq'ʔ$[AR$>cG&8JwT,dk!Fb؆|*gƃGk2F Z! ժ{=jƓv k)ڍ c߹@}|+s 9C>R%$'6,B)S›?`9UB%a`5Æm= :!}~yR0l- x$t]i$y1( 6*iBЊ3"[:^,GQ ǍD wv~4M/fֹX8`N7~aiHR"κ5“%VEhkHS:kL`Tm_ύxi=IaZ\V? ! cËu?p(9|̷8~M wPCys#Tm,Mn{WCrҰ ="+6o7-¹0Ҩ٦vO] DD(Mv_mr)J1+Ϳg*y{^[v y:uIRw;|$I;Y%EVTSg{S~*}ͪmK_ަs;2Viltc' l;$KQ "2]h`6YR8Ta>;kd"Ktp9~{ Hlc;Xiޠ1ŌrM2]nS@"D]>{M7e,dh Of_%$l AjU+%ƨgsfh tgjgIk~og>qA}]FH^J1T8Q(?1I'["C#MI|g^Qq*[@'˕:heP3eb"Dж-۪F۸ G< q' Fm1V *_JĤLrOAV\b%h1Q8{޺xv#.Yuu]ƘP%uuBԗ(v#ׅ1qq6募x&mqۻ;YEIe;d 1tZsɼ-Mypogⶍvhhe%},KtQjף)2lah͏r'L^b/ƔLP._0"Baw^5ӮD?@a63vW&o˨C$!" ;"<Jɬ<9wSwT>EPvE x,ȳ20: K2{QU 3N#WJ!Q~WI ;\-t.9HnWuD\< .S[n@+γ n\C:Lt6ttD>"emw:q#e]SQUˤMn|= (Cs;f,!_Kж v#2vY`7W|sꇁ \.9pG27g@8 0ߗ%Wj[1 Wl~%~v>pTFBcwA3AQ2,t)waOlaXKЖ_a!U2505QygGIM 9V`dRY̛?2`_o"I0GӫM8qu!QӶH|@l/R#{Bd$P3 pG2qȥ a˒!S$=<3\gP&Fgʵ&-n DG1r9J ٭ sI@[2vw x/|0V` 3粹z~B0 <3;!f@IG2֞y̝'6ɪ{bj6NI(VUgsho"0͛`\-]\o"mqm=mo5ODnu @{gg8ލp)p |FF[k^!PgjH4 *DTlna)|t[MjQ2f=e:m3kk[}r-A!Y5G)r+pv0sҖuSuj8CE&bӱ+> n+HPD^u0eZmMl~lQIV-RФc٦Oho3oZo 8Lj! iNLKؑG^y `BkQ("Z9 j)0;/qk>tu8sٖ;Œi},JJ nUl)MH8ٱa )<~!=N} gTȁĻedu0#5w ybRꠟ8S?䊈fř痔"kR$_xE 4nfiμi`^`~/Ǽ?U zU#\-s? 84/OMQDa&4[m?u cIԃ=(C[qF@۳䛯bG"_0}orz8Rz%3C}0C1a@iVŏ//ٶ@ӯ.|} RAw`GJG(SDgA<]vŻ< {} =*9 ?+OhyFw-:ly4M&[x^ [Xs$-n;iʤq7е; H9<䶨)cķ#l@<=À~jKBAPzmPQ׼MWΎ5^]EuQKǭEi-U冴mt[.s!@Wd fw4 b:Z]ťZd@j%Y^8.y{Y2XDruzJĶ<7m C" "m"e򔶤`8q^2(i; UHdp6AE%] GR g*B*W W'UE+Js8ϏK`8YKK $z³:i#C)d*/6d?"mCx+chO۶[~>3u:ЈEyAyОt8vS #h K3<`F젮3a|Tpvjc gj=õ\y-;/208/#P'eiӁ`gLLi|2L`=DS_JuG BDx4Txq:#R`ŽT+<;eIC"t䪄 YVHHb ̨^= LGzU}q%Y #oTtw?zDl)E1POI &dK'. 8xk,ѰqD ?TVhnl r@{EVT4w~FbE .d^MrBCa FC:B8:H3!OeʄbI7}zW3WKFMچ(6,"#ow+݆_Ui:;r672ُ֞.&ldu6 \:z) tT; HluBROW4KMLwl6Vf }ӻ<ـDh|ٟЀ;zM'\\*ֶQPqx.H-6 xi[)u&(cΰgy܁6?<\󋦺2[ ҟ”ғW39֠VTE* Mwp.4trBa~;5 ZpS޽@iՒ]Y*ZWҖqA,{ ~l[HW3{(|U~gaŁSFsI|c$fS|kC!,~"ijb<{!!9xP XiĬLs_TvS@ސATr&ȌyP`dVٶ+ꗬ)X(-A`f,/SqǥB~IW7*䊦 33˶m.pʭ  <ݿ R QڧDLS(Y1L>f>iƷgEzCiVSgf*1ଳ>aRJoAܠ3f`*{¶d7+~\\C0*S&sʥ3{Kؼ^3MN[N} ް̆,K[9s #ǤǎP 'jEԉ"sSpqqow>;`EApVx9q32!},_a3%:OkIz^ŚA 63>%b?蓎', czO~97 ",I=l y|>uLoVZ Qi"TYNX}>IAdL=u[B*5KΖ{eȳⴡb-=tuse&o}<_13ӱ A~S\aCK_Z[-0w<~8SBϢ 4Em71UWL @la#۲ڼ? ,pb?A>ʙ.=HM mKZY$||u wqwE9ACCr|WG\rFƐ=NXW9N1{L`y]}?` 8qUJTJ Wzv^T@@uYqьYn"~*gaRS].ĸxߡCT Hitr@dIyðusз>'~0{ *f@:A~@Zeژw&h)/dәNTBi`X0N#C"OھQ)@ |6 +>Ui53еܔe<d^2]2FXħp*^VXm9?Ja>%4GPQP˗ h6t@Rqbgכy{[iv~lfUi"J!W237M6 YnX##CN; ܷh^PY ʀ+s+A4W>wM%bIӗL&\ ߖ + \6:fR%KbiDY?}&W΄=&AsNVR@5#eQà7N=)/`H>1U#B8)}(C`$n[Ao?M)8ɋN[Li^l4\(uˀjHrW@!=IaRbڞ!@zU8bPton!|,QD,)C& ̖h(``]e_>[|ҝ& 8zI:'Q "a/ON:AfVPj!?z2Fhs;#FځV VKqIh]sZu8S(DdE+ay$$Ac٥,r1FN-O@#alB؄kV@YYRbm_@ EË9wWx_yB{ 0|T.e ÿ}S4=_ d_ ?|a\hRx$)7ז*"O<0!-vXdp;vڂ;E^dUk{zʻ'\]<䋣G/i)SvMK3E9 g}Co0rXzژB}>T癠l/o37te'tW:{L?_9;s /y~A@W6WLvT5РdeZ'M?X\Ti M>Xm(5pa+;7sij+\m7)W}e{aíxbBT:: z9WI57\LjF+i<cj o?{@v&߆٩BC4x <td ~F*T$'YsG[>#3#<ϛDYxUDg$0[F18 'G.#=;IG>5ö8(DE**"$Qі*V@= jP_ӛ'zMR'I@fR^ ~dZ pWaA)Ņ0f}"mgQ*@)@Y [˃C:8 eJ(c €#ʙ+5sxaV!oPu u<{}4i-I$'@~i%F< 1}U u5`+_e-YG.pK`AOcy a!ߪcn(m =4vQi =Ooh>qo@AFrFȶmCkodDz$I3M>ĐYd] ^T&&\rghK%W`ݕȨ!Ec=Ç?jvATUTTDt>xDv<~:Jqy~Uڮ0m&s,MrNKeI*ɺ68u~7LSFv9r'ŤMx-m]d"\T{X4M*(mZM 5MV Mb}SLR* Hkllk __ ?xM(r Mn(px: zY@)mU F;3c_t&ȥ1az}L%|gvFg`=;;_Ae) e-2#v.p<A=pƝ&Cm/3W%w\?&l.&ήo ։nlk Sn><ߢǁ6-HGy)i7oz?:M藺?-O:VP1u#J `C?<)Q],8yPcU1kؔШ{]3%M_"އFPLJVjYIAۮff2~;_uERvfi4'Q"-q(b#`BNXhgz5Q#$!XL%33g&!Kˠ?nӦrVPzQK!^pqȑuJ bv[aFs3+ʽ Q۵7rP kx` ,a`k,G8 u7u 'p?x|HF}7f3 vIzs(g|S?/&_(T~Pʥ3, mFݴ I8Ǚ^**E<-O]G϶m{EB0Ё0w;&K5:@ x&ay {P0~~1PTȱ˘\LODzZ)yTJ^<K4ή/2#wu y r\!+V%B3 h4O'ޗ𥕩)ҙđƎIxC#nN.$5"ibrۍa<;}*DZ12mUpk"/'ML ,ߊ] !+!꽰Lb ȖQHFu 3r RaoYwtgM&$nk4Mθ-SbȩJ8aȺ+uv0 xa` -'u4bx/2jt?XddxR+&p#apS4MV*(Iʚd&SJȬTbMa@|? %^hF~T4e!C) >iЌWץ9CS7b}.=QʢєMN+Zj})=q㌀;f. l~Z~Ń_˃;{ ܄4gK|>dJi:S NÜHS'-+5Pii]E;vqTtfJLA\f⇠ʮmȿFUv:t| dxzEÏuVXTgp;yfZ&~Ŗ8k^/| ˺B;UjL,jt_x4_gS*3}5+iGc)7ɻ/عn8][vDqXXǺS<~J0hˊ1ce@fE)\Fh/VbAcY G@iMU,z-:+d8['N~PI |1&7+H٬+`s aWq"wݡomz8;n?SJ*Hwݜ<`mi{&o/H `Jg4~L('} !fiߎ%=O 1J O^ 3ʷĊǰ()KǞ=#g}bcbs @Jٱ}"ѵ%%+3(-.˚I['{7bl~mlN/봻w n~; L߻6o{]wT ;7ʂ,&xtzqrz\F2C@6EBq wOba7-31O`LR)9KvprS DGE*| 9<ө;9`eڰbZQZ>-0\mTr6̸R@ gF\34a]uZI JEo,|Mčl҉"7 X .-d39NƪQpӢyNnݚɒL>Lyb"ELϫdvi9y6Ku$|ܗSϗLGӆgз3}7gMe_7Ϣ9)}gzQX-ٿD&~-\Ğ/Z?{ή_ceR҉T^V{J6lDT4DۂjC"J|,Uo6^O)48% < / 7a?bo\_?ه,ǮSNs B^#{I=i'i}l7c_Fo "nLA'µUAc_؃ B7m0:s&FaOO7LUwIA 7Дl؀ H:6F.AAra[N\g ] }ZNc},<CXX0`8e}"<3vFcd@IԈ#lHbKxeiaFv:%_ŻVb;Rv9ѳa|:B f ])=Y) O(5MOG6[_6P*_´sK7b*ʋ8Z+l.zvSxɖwղ7K/҇Z>ZW$P.eB/e"~/"76=Ls7*nR7/B/="G@qW(va1ؙ۠59im#w+A-ς9' |5x6"(*Pr&c aSR=r@I'+ə^^u7bk!^gTwج/ '>*X'/x~DAu/D4ܸ[&GEmğGƑ~&8]iM/~'t$52 #5x$Q0‚ O庼Gw=)WӐTX37)yX&Γ?hށ!Y]X*L)q)0Zv'*BVeeH0aHaBD\$Gk3hk:p^8iHTeZ Wef`80HQ.d35h[g?`1gM&?$p,|*"N}84^[=HEBCS<(}6jMWOP_yg Gܷ.3mApԹgnK_1I6۶mϖ!&~= :Slxt%F 8*1:LYy:1uS\y ")0 : ?슍o>#XzOؙqc_zmq̊0+ĈS${B^/ta7v=i"Dzθ-uDAaT*Mm#&ͯڟ `K~kInF`{ P дY9f輊$R~=6 M!3'3`;Zw}ieD @l`x G OȌS4[:GՀe0aP 1G6Y=+,MOYBT]^SJ,a|苓[FpYikP6t zeƤm̼o1,y'HPq/Dډ:ola(۠qt?^SiTd*6{*J"L/!2-!N ~Št$5UI޾"ϫuI~MUiCn,d҈tKG:A;${9wD w]Ff`&^=`cCR( f90 9G\%4}0Ii-ިkv3`x6B_ރ 2(yf˕ ]aU.%>_U<ꗑ> 26% N.NT cp_e:_!OПW{S`hRM3Az5z3CQdUmdkH,@a΀ ;K:'eSγ4nn)hlROVS h;kn֑ cDp--T61U#9u,9p a+S w(ڿjؒs6"̈́YJ.gvDw)\K7Ķ2U5Lq3س^@=.Wwc+SݏzOUvjCnR!_ Ʀ9B\Ƹ$߇8]( S T>j$#I]-%⨥2A8qd6]Ʒ\&-"B{ڇ)vi,;ҢZኁm,,6.@Cʴa$)B<*Ts%Pz{Y=U6T*Y0)YkN16܋<:s}]^SOCQ {9y7-~xg"syN'G-:SxFѧ(ܲ'@? e;o N鞟@'{bCgAWHN̜Xf +=xS_l!]rwS_c4QLqI˱m@#l~ Ku:2Dʹcky~MyƳֽc^Me6}~9jRgȰ4C4=^m4`AG_ÿ% hawVB!KWSvIK$>QSmjΧq #TQ3wvr:x*#Kt w,1F:"Ի`Y~q#ٳ3᭿ֻ齨Gc̨4sn:]ڪݓFtdW *(U8zN* 7*$Ԁ동 Pyc{nҳa}ӳ(P\|O Gx@. $%D;uȡʝh|YN^3K*)Svm|YQiD/CUye% 3P!H΁o琋uSo: +XH}gT2X)ޝ#FZkL_+,mJw3IsՀa«3hҷ@Ơ"Q3/le gK_4so6g~ZHΪ9 PiQpA_  ]ArUxWŋBU)eq/6ew9K Rn3_R\ yt#j_azݴ{.zMy <V #B͠[(;a~I k=7lhs m#CoQŇМ2z^+,19Ǵ11>7i!q7X;2BM!VWN݌oS(P|oSOPYjMg?;Piŋ:zaQDNpwW䈳jc]\:Ug͌E:+eoʴs{˩ԉ|8'3eF&ܼf|V1כ1.K9W,HJ)Udm273,,a0n{CDɐ(o|Smzpϐ TdIy?mR%*=ҌF:}ҥRZOB,^sVvм3U3/o||[r!ZdS+W!(ҹD(Wy!zu.iF2%m @|sGH/ \6u֍Ƕ_f:F`Q$hu{|I+!}\0j5sjgtNrL@a6vGjh'] iѩs t]u*}N^N#2Ul|d0{6|f߭^xw~]tE-#OlQ;%E:7vJ-pmoÚu\v2g!pQ@ȗ ހ ۋI-$g>k΃ǽxpnwe%kV}B/n7\b҃1>=!stI x*< =m](b/9NV[Ϟ|N=Ѓd gdJYZ¿S%$h'&P@nVE^_ s9o^<9:k@ضzJ-v:hzF<'nh*d4i4]^.Tg!m+kF6 r|Ѭq~h|_RfkBAH IDATw (gf+Je`g ۥL=gNJOY-; \ Wl}CS%%Sun rhZBIIS%ɀi;4X#` `pGM) ^͏iX36ial?|Ct0qi[2IS',L|*G>˨P^n aР|rBg)tM;~q꣔2YO<ŽQ¤6g $)n3d@D =tڙ,ҟh oVX ϯ&$#dubzӜ| d8`wh 6^p<'ŎwZ*o~OhgmW0'J1PQV~|< p0Xҭ鱴{CGHKTjzɐZBcV@#h ޤmOS=_S)aK&FP]e5?o$J&i0Hw[Pҽ!* )FcBB|ƨy n_a5f e?ı,O\:2I;Um/5g h'BSILwUGK7BHyyxq;}FO0oq]  b !̴^}vҘW%W^D*8orr#6\&BBg/g֎IT~뎖-!mSۙIq.1<8\v2qi=kY]BAkTh`$I^ģ  %< =KG}@"eI0jcD>CypuE0$:wǻ *FNa Gkl{dm_}+fL9VlsKKDy7mjhF˒P.i85^@;&鉋],עwT7Ϭh3fH?uh&Zq߂&',io9I~/rw{Q{9>[$(}M#4F|>"O=~O7v4bj_0ۜG0ub;i/'rw05(Үֵ]QQ 7O!fs S ,jGS`:)q]uiYzΚ3'7W{)e7E`ۙ+|@LltŒpC-#ćbgl54kh5zOXzfl:(WH(#yy N4-qUrt͜"亡'_}%`1pqŚvGEgk{ nٳ^<լ*-n|<"7eX~][l% Χx‘FOMZʅVQA;Ihĵ?ؾ-(}^7#wGE sΕ+=cdW; %k6Јǻ#|V?z5O0VΘyY]AN ;;ȶ<_CS}uKynqca)3Z9j?ZC8R!Pa O:VCKccLtO י=3!~]}ϺG pРXAiUxi}C}'C }^[Q8{Zm CWGRUÏ΍g fm{"  g~r} l* -DR$=T$@9]F6j`Hvd{6e@J"3)²E`C!0(aM|"ڟw$.,@@H~2 'P;Jy#BZF@dt!p(3&7^mh#DqD}BxA -`q"ҚQذiM{8ϑRNZ¼0FGm 8?UTSIe?\he@a@qsY`p.a:Y S *1&OYSt۷O֫1 at#݃s7ڪ~F3-Ι" ]K>  ~+D1`Is EdD2$ q+ qBk\w7~[gis@E@bN6#-'^m xdv{#8.k6lw?<_vsCT <%}Vw73UWF Kg%J$N"u5F!>),M`)& A]6"e6*zcw`K~-`/_Ě? W aax:QR[F#Vr#3yfk.B_MTTy ߞbUsQvGsUѫJg\s`@4-0BqNYa6 YD070S ӱy_/j?bsw{\N2҆FN믈7`tڙ萛-v*`6 ě)+:eK>?end5NLv!%PmkvhT@{p Yrdyȧ|~c#!)¥ ±1"PF(!4KLj]X $tRn&jә)S0j _ĩNمaZK-N;N;yR ʖ4II;XnQm=&j_W4de ϊ:J9sT&AD*b,ޱfFGT@hY1#FxQł)G'\ mӏQغ2JtΣpX!ľ !3ngWod2s9K:w@[[㠍" .ͲE}FXikoQ&;eR>hB2$ԕ^0OhY 1LkY2u.m6Z9d/_7vMRjTjּ_mB%6Q>Z`͜2Lښ .d ֧:u?ܜ )aܽ`9GQg4WcK娗_B5]ലi*㻶5?m鱾kξF>0{l;EeNX^=;W_<>LyKG?^P.(k2 _~[MԑҍGd0 2Ra0m`r#*„WBNioK&/;DFLgO:5`S & >-5$ /0{ ܲ#3> cY NLhlC{iKcf.V h`'U<"X]RS;w5 .AoMYx+F5şϷ~59޴8aN20)ΟK(NqϰcsCF5 i1G랜K5swq3>x+. mv+hٷmÓl `1/LSٹWHy3Ja!WC`l\N^CD oR裸@7TIչ N*%XuyZN7A8'zė^X+\r6:gYx"`(<P&̟ O-$JB$n1Ivfh io{mgܬš*QCfQBLȆZZǾ43> f0XHa457I:){e/Ɛ`Dd'O:lNbЎ˦Lh&tLLgT+%Q8@dê@zɞ\wl1?|╉ uz3'zV0^F Y-7yh0sc|v ED^x qPG-n=H'P 3`ڞۤ_@tfH[Uxb1W!A@`g2MqhKׯHvi2 H) )P{ i*}eT{ԝN@T {XH$ݻT C> 8QS Vax5ь}ܖ6O;uI6j}#JT?Pma0^f13~,U6մf=(|e4* w2uGߴG`qrCc7<70Mg7٪e@sĽ'7?Be{t/ldk??:؜UZVUԌgfhR/oVWgΎ_0 !\PՎy\ OFxf4H<6ѩ57~{Ƿa-'Nv/G|]#IdݙOVw1m ;*5YX<U.Rn|sx 2ptS!aF*g! By0 g:f삙-kF wN;Z/r'/#RYE2j'2Jg9B v9GT;6=ll)mޮؙb̶8c㕼3?˴*h7Bw&mev8?s'TI q3_rS% )ʫ͘ Zf[͊g~Mk:mTe>"Ykj)A #MҔҏBwwxC\9C,fDc=^qYr/}Ns}K!`y6ȉQA_z/;OmMx)D1n DẢY%=xG,aLH/OW'\7^Ǐ.c8= z OA`9(ڙ&͆=בLdDgOA%@i;6xQbs|2G:ƙ/0Ӆba*//{wrey˾уiGN_ڼ.}8a^GeI9I1.x*o珿^%փs{v T:ah3&Yl4WBAe29{уxnZ;w(mӺ1%GW `vOfdM3SslPpo$B]AwM0 !M ET9iXw8qTb+qjGYf ,/J_Q)ȓFJe?q%ݕlnUuyLǹ.XJ=W^, vl9#t 3 yZ]#CqT0mF6"bH{XPAHzK.=(V2(J?+&Gb6Rfst~\xA @U-ϜPx0^M X!O jg6t8 }/S⍙>T}GV }hoP>._(.x~(>*.g 2"߳+Ni4[KW1v3w8g#0k;'LRC: -F% 4O?1p,2:ɟ$ѧ…7fՀ| sAW1|Z:u0 #&Q:LLXaxIAp|-r^/_ wLW/i?p=075H[bԴ\m}ӎTڶQLE3 Ԋʝv3uI,~Y*~Ό@ZDu}?kҞ ƒDQOvI-h 5Q @q2"6i,wţigM6yipAaf' p!@`*(ؾB}QTY0a`g+OfWw_w;B{ij|>;)w7a{R3+ w]+ahH{KF8Khjߎ|0{(jfjyZm{ZB lF8SP:|U 1<@{([>)Kz2w2-`=V_A#j*ZSkwa/LҥOF`kOb؁)D] zHkߑS1_;[컱mE1MK\11s;38xϸs2{> tH @5i˂\)!.>\wP;8'3c2"j[0V1|, Ndb& ;HD7m2YB_{j"U=X84n_:#V~w x؃ 7u֓6+}iF|ؔK6{KBYJ_*{4B `ۚnF eHcD}σ^xx|`)Y*p8aJc5 N\g9q2Ξ}OŃg){.aJwڙn/ HN_зtv3rv_n9e IDAT)nr}~zW3;ŗ~xݥڹS>ի{n WV0~WY.2F{ lcԌgpUX+#Q"vV;XFGf˧\v_7&bnLl*) =| (&*-ӯ੿Pwڵ_ C r@4y"Ɉͨuc1h(>)s+ZSH1ةk{OVu 6f i0`Io1E+- %3hc;y;l+*LU8NQa_pS4m9+^>Ռu7r{mU>c{ٿ3ݯ@b1Gݿ䢟|K?K65KRg~~ [УmWNduFK3_ǽtZG-S xraoPrڡJ^ u-մv8Bb 3f:T%5gѕCZYe.㶌X{gH.K/s@o\mhZÍrU{W=;Fq9rAuarK* v.(ʀE"ũV7W,d=?Rres!e<W6m|?e= ,9y6>!$cjRIQQ%EqS]z̋Цj L {N pn(%UP"!J'o1hC^2R>CW =ܖB:lIfT "0)H-AWRd>9 l)R 8Ka򐋇_˄GX:g0 t{Us~&n (!zc dؗ1?ыr/vᑾ+W:g`{( !?gTC;g- /vln3R lN`#@wsƖ8Q>v:++-Uuw_ rZ%S(Ÿ;.|YdEjgNr&Km6v:(~):c:-j4 gBὧGgp} H2 ygϪ+-aEpCWh{ŀi6{\Q^pYeH_<.vcnlHڥDp93"3=-+f 'f^fTn#Xv%d^|xoޔq_Ǯ'WD:ٛ% @ܩ 45.r 2WԻ+ M78mcc#ҙǸ`0{j7 # u*/}4~^|Cɛ8 >m/lR dr y)E"}? XZ?~ q]̧DeR֍ѤTEFKiΠJш)00Hkt FY0qK+W 08N'@~*Y5/q݂}8Vwkw-CS2ΐ.3}*t#htۘ#wE~? n}6+mJ[jO@֒Чhq~x. ZsG5ʿ|A˔w#0__[Ez˒`K_:Ҏ߻I]*<+x'?L?@x~ p +0+3&-d%J8>0V6TEth~ E)" ;,o%qp㖀[ 4nQ7Ϧ&)CUNVIɬ\;uBRxe=%6,xA$ K2w s)O,V‡x۸x,XV~cDÆ«⏢,A%p BnaOtFICe6 :bn $g cmAKFr]2\>M#z9dj~&#°Okk쓺{짗= +#g$_sӟ%;ƸY aaH/qͤ8 M[c] 䋟k92]dgt^^:zuk׫t%wo!w\3vG2"'t&;u<ո$);-{rP!#}Ϛ?ɅdILp7p&A)  9eA,ݖۯ6U)ψOZxUpήASLUQ( mB 靰wW=i%$(aJXKek7qZ/jXC-1rUcW× KŬBt`|_ *$8u/?i="cFS&#1|eMg`;hp=8<™% ayUp@cykfw%`ӽWws>uݍNWϮx݋~|Xfdg?WF>_n-~+]|$n.̈́ 5mg~O6N%“'N"tO8&ԕ#~-N8o. [Ⱦ-OsD]=zm {mRV'/=J}:͔  }U܉2gh73;7.=f޼"/S~ކ^w5`mALeN)C=F ot@ 4^'aA;BK4E?oU\c_tPՋ5{W|蘤!]#X={(S皔35s3@4!\U)MP dNYU T.2Kl¨{̼"RHI ]u{52x0d _FIj? g~K i<5gq3҇?K y8J=üO ;uLcDX 9hB4g4vf ģ,z펩95DGpN[=A' Kr>tQ3%3k*C<;'E!^2nx( #9A΂Wà|20 CYoO0 .@rVJ罔*#1*1dg䟋ջUj~.1 F:!h>-oKg9/x:t_UquY?y}SDxǟM2qVmzgM]1.a 0x`?AjD`0f~/@<<.ayqiȉS>)nK#;MO_hKc?1LE/0b/W'6Ky(gs6͹w7Ђ띧.Er hLaJ40OދɓI[,tZqCʂH t=Mt4ę?)4Dڶ =dL+\f5cȖI(r|} bfĻy31 %5eqa%pg@7T 5="Ru!_{9|+ɲjĝ|8ckj n_.&n߮wn'ZQ|v Ibu9e! LY7$LAL(Peݵ7ukK;MX4y_E?u=.~~̎ml{Ä R3[ ;OBAha "v:A$d )GƷ%chw T5?)wNmm?exn6vXZ7-٫`Ӳ69i zX{mE8x.:~b*aSeAwJ|xC0`r~ %-3.E!-9lGϞ%nӖOW`3P77|=eO<6W_f%,IC㭯B9~24|/>.`Wm>Rq ;4N d0Ȉp)sF/x<[Fi>7BoqLlf ѷ"HqK}jB,DČK)Ə_OIM(Oƽڠv`< A80?" ZU^j[W%0kaz͚#u<>=R 6Աħͯ^gg{M3**7L uko  H+$]/eb booP.r Y+lb(%Mي3Ge[L)M~`Uonw7Ngx7gFP$+p1rߧS\(ߵ- dك!Q-[q1 hƚw'q~x)V^R;ESm*.eL@k` T$baPm&A4&s+}GMa;ΑNS1̔X1zea{;q` %A ,t(\c,#{l M?!ɥ+0:r#ǨwW6;?>fDYDQ1 eGi7.SЯWl7G(WfxPv(^[]㻄l{ޱs{y;tyFEN 0ChpUtg_cZo(MG0@lf?\Wm͟Ζ_qћ&. P }LxtHY\e: 7b}7˄$($3#SFu(NMq0c7G"M(o81ޖAdC01ÑPR^(!ʁ)@mZc׹Ǫ 1ËoϺE9ze{\o/ȃDhvKMڛyeFC0*a10NWse]]2$J?{Pc7nJ%z' * Nk[fG/XϥB ! NY& Lϱd8:Z2w{~C#~ԭ'<&>_Cgx[}kn|_wGQq [ N|§@ҍ AY|7xð3OcHGؼ->?u!nrjN!G:M>>\& +ISXQدI&I@@>Ϝy x tPf䘾g`M39, dR"vרP(hv_=vPw=_fFlANDH`= MVr#2@bODϘac5y6Ď97N00a`/%[Pfsw/ *\P gFxݶW*@ O]*q+w~ʊ2X irLx[FU\R5h {twcRux϶^,&Y_[ۇiArI pd%usvƔ2|}jUxi >J 0o4G^ׄp/2/Eq/Bڸ(~n,%IrkQz(PӶ%6qo)-ѦzmȹkUNiPD!LB9-1A/xe)uSߢ=!7zCpvwߢ{q 92Cs&Du00a`3Pc*7KJޗB ȒC{SF0bwòd]elR@";S [g /ɸURaj2ffNPNv/8yо]q ̿W5nD_]| pT=n8YL00a`g lm睵Wm?=Y _sLIr*Kʵ,mԛvkv'b{K]GGKN/s] S>& L0a »m$[Żv0PFG!`iO3#@]#z7 )!OCn:$P$;$lr%\?yJٷ^!6kG"O&Na9':Kv z3?_n_]̖\|'?j</ G?cq^7BҔτ & | t@ |g23GvRG`tI0}3`AY=?oGJQ-Z_~msf;}NE#߹[4MB '+,vO|05bɞ\MS6& L03Ā>RPWC"AY s")[̿Oh]O!zrKO^Om" Kv|nyb 4sxx9e[9[VQ"زU & L0`c_T\4/0?=yTSU2*ơgzJlmv/jc×'~4;ٲ/ ?"9Sxz:O^ vIy?18-__<\/}xWQf|gV?[^/n֛nvuNfˇ e )J~6GI vVL00a`b}#]%7&*ObiC-e"t-<\M$'?>?9=r2.v'_fgOj_~@!3[!NXcYM!& L00a`€@8+]^J.q1}S7y߽¾']^v cYC >'_rf^.֛ſZ^ppD[徾?4' L00a`Wci3p|' \Oz>[pS/WߑՐ!K]={o6k. rx}Ϲ=pXp~#^M>& L00a`}P/n:fY׫3ٲ Ng7/vyV'96lӓg|շfNgfO0koQ)ꄁ & L1pUq|w1_8w|])߯t/AP)hO'{M & L0n5æO;c6J200a` & L00a` ~>,ѦIENDB`eric4-4.5.18/eric/pixmaps/PaxHeaders.8617/eric_2.icns0000644000175000001440000000007411650755673020237 xustar000000000000000030 atime=1389081057.566723479 30 ctime=1389081086.307724332 eric4-4.5.18/eric/pixmaps/eric_2.icns0000644000175000001440000113315611650755673017776 0ustar00detlevusers00000000000000icnsnTOC hics#Hics8is32s8mkICN#icl8il32l8mkit32Gt8mk@ic08ic09ics#Hics8]]W^]9^^W9^9^]3^]]^]]]WWWW]WW2]]3]]is32܅:9h 6>dƅcWgWs;U]?DxSF[DUOYQJ^ȅbUOvԅrn]QYJHGanJ,:_f<6aԕ^Ubz̓uÞs8mkE&4Dk~W- nT xYsa=ϼ}o$ICN# ???? ????icl8V]^333]3d^]]^^V9]39]^d^]3^^^999]d^^33^^]93^^^33^:^^9:^^]W9993]^:9]],3^^^333^^9W2]]]W^]]]WW]WWWWWWWWWWWW]]VW]]+WW]VWW]WW+WW^^]W+2W3W32+223922323W32il32ֱԒ¼y?;U Ў3D ݮ|, %̜T&#cT A (#QXt]y#U?#PߍXŃIdwe͌{s_صsοlڰɰՎղ 繸 ۩ʹӏ ڼzߏ ᛏs̐ k ~z gn|} bsbqropl~Đ ~uVRfSk եzC-=u ˅sszIJl 󵗏}Z2TkÐ Ǥu-Sj؏Ѱvae} ѽŵ Чo43K ̂+ : ݤn%  ڎF! B9~6;iB[HlE_%A[ߍzLK,@]Mx|]M;zʌn|>:fibNGRBr֍Ⱥl^]tslZEch`lVjcWc꿡kpmSgysWP xwwsm{vnӏ ɷb_`l\} }ks]{qԏ ůܓ|`r̐ ` ss} `k~v|smy X}j[hig`_pĐ vnOFVF^u ՟l>'8g{ ~ffkHBXs 󷓇kD+DTh ȚpT#=N]wϢ]OLaԏ ɟ ʡΦm32I ʂ+ 9 ץp%  ڎI" 2,|6 /Q=SBk>K;~|nOߍzIv6%3I>fgH>3uʌrY,,QqWN95=6c̍Ȼx`KCI]`aM5GJy_q^G?MdoF@Ch}DJI7LWI;8p TQUhNBLONg f>MLliNGC[e ZUZTJDl\zɏ ٙy]kYTP Ձh\I5'EY f@?LC.7W n]C+!05M ~gL82>I[{ѕqcQJBUsoϏ Ǒnfu Ôsol8mk% cσ()-cs 0%R/ i 9;hcJ_%K\hD9=N,E,*i 6C,yrVkI*3$ it32Ĝ迪ɺ͉x Îim|yf|c_!θμދTIXuc]LMPHih ֲĝX=7IZ>60=5;UKV'賊~k6*/9-$$+.*36:Zdl+s}\`=&))!" ##.?ONr-׀\wcO<8&&# $.2KwوPH;2&!  /?Zqxu,w=* $.%)1E]n|-ໂreR$  )9GTap/ѴxfUH5   !',4;C\͈jJ4!   !'5?Kw0Ƌ~}lU:#    %0In4ĦcZ[G@=3    %Ci4ίi_UK8-470  ,>I2  ,@nzkZRI?3*%)$  "(7Ih_ZW, '0Bm8įxYC@8*  )0/0=QmP% &9H`ү|vraF;B. ! (+'  =hr=8 )1Iiv:̨jPME7.-! !  #/0.-'!7cO'45 $0AJZx:ŨYSD9.%'   '(,06;*(JЙU:>(9DK1 (7Ol:׺R=.'     !.%,474.$Ge.KOri37Nj:ʟd>-" %   #%! ! -* 9\Öz|C]9M9)"$'( #-' !#5.#+A]ٳ[];̤~P6&%&![a,22 "=B[)DrƵvx;pN5& 1˙?C^K  (*-*J½km:s[N<'!2̘JYr]%&#")4))9`¼4/M<̪yc;';⥻²uCQ]J&-336=67-&%-=hýY!'ETy}uvfdgiOGuƻ¼v.-Bea^r<՜rR8/⽇rhOs_*,;zr~Odq<đYA.+яnjztF*FԺtc<{V@2!=Կ}RieO70=L|ٰknzr}oao}>kKD75?v˓}jQeQIFGXWq贝}~usxvnvȭn~giur>ҊcQNbvpĚsy[T[`]xʰ¿Ɍ}`bm{>ܷx}ڱafn~ۮޤƹ[fҚ~jWjon=ɮȰ˶|۴֭yucݧ~yzn:ʤhϡtɳأ߾u}qtp۝y9ҵw2Þniǟ͖ջpb}8s0!Ž\Wwǖݵwr–8ƂL@!kڬ}b[pޖުuiǼ8ۣvE0ڮ|syᤑ֜yipw}Խ8šD0*ѳ}ɜνt8֙fXHtշ~ԥ̷Yj6̢ǡomʹyg6ٲǿn[sVo1پ}{fsvèʲ~oSdy0շohalĽʴwon0ⷆÿwf˶{0ުмé}qwʰʴy2ܿљŻӴûĿ|̵Փ2ͥ½±Ӧȃ2βĴ}лŭŐyѣ~3ɿ;{gļٲĺzй3οjW{ɺ´p4Ӿ\pżdZ3âv߉rĺýXg4ɶyz޽pr}4˺·Ȏu}fp~ˉ{x}3Ͼİؒ~dI=o浑zoy3ɢ҈~`.H{տ1ͺٷ{y{U=j|!ʎXË~jQd&ٻzM`~vg~rdd}'ĥ`>\{{yqqfij&篓eG<}u{p+ܷxI8gů×+׭m>Fȩz,˳Еa?cqu,̧vLC÷j+ٻR>d˦v+ۯ~KBvx+ؠ|i\nHJxpv~+وZHC3B|yz|wkz)~E/!?uihct,гc0"Uylowotuz|l}~{ǿ/Þh<*ru_vtnmpolnrx}}jz0Ȱ\68z]{qeggjk||zv~~wxnjzlugw.̯c6KugNSUVkljnkjuzfgqq|dhx.˹Z6fzk_T\W`]jortlkm{ob`dngjlngclg0Ѹ}J4oyxjtsq^_ltijibjfZVfa_d\_allv0ԾtU@.{zimc_TVamfbY\d\_agrhb[Wdryy1ƴuM80~|z~~mncjUDBLbUS_zmijXbqgRQhgxv/ͳjOXtvcvka]OKKM[RKex{n^bjTOb`x|}/׸yjfecVNGMUbjgk[CI?VjxZ/õޥ~èz~Y^UcG3EZheie<%.GXmy~fz/ӱlrl[3+8GRN:++(Di{w{-ɖ|}vV6>" %%'('+.4Zm}ku-͖[s3!'*>IC=Zmq~})ܜyw90EW^XNfy'㍅}lsxys|}2!1ESbmmqt(urlvxxvvnubmjr_'7HRWdfkt|l%uobmvollkggle`cmE'.;BADXgrmd&Ԗpoad`\\dfilqgp_5".89GHCPbh}zn'߱sjjpq|sughL%%/8LJJL^NY`]d)ڐv{u~ytiZ3'1GVHNWW\ndm+ޠjabbsZ:(28OUahfhn~|0ؠʪ~v\@%3CT[W^ndc5jjbR&)6CTcnd\idmt5ōɴxxreX:*#=DLQbo_Uhqp~5ܬxuV:0.@MUYexiZjw5բlA12AKUbtqifs|wʹپ9˰P298DQ`puowthz{sж9ãðijȿL52=@  '7b8۵{cG550& $$*2:CbnUqe9 .=RlÜxhe`Q7/8' !,FWjm|L)& '=Ud:[B?9,$% !  $$"" %@mzi)#$  &3;Nn:˼xLH=1'!  !"$*1%#7]d;,1'00+A_:άuE4)#    %"(+*' 9_~?34NnrryzR%)?[:翑V1#"     $!+>jiWjwZ1Lq٭r@,&  # %  %4Chu@Kr;×nB)Lfjj=&$ 18U&8\vw{gPf;_?)"!$u[(8,  $%=htpp_ej]Gb:bLB8&'~|zW%4A8 (#.Lole``fZQ^Y)G<}lV2"0ũj{ykE'17,##)#'#/TubZWZbeVO3,L=˽kP0#)]LR8+,(')14LOKK=?CI71^qWVibHDY\@-WVXn<ȏeF.%{·xH<=*DR;#M]UUQzpsmHZxljbTTHIF*)WfawooWThtvumpjilehXKNPNNPA6PR^<٩jF2'1PDG+D?/"!%0RfzdQ_^I6:ET`_XRSOZh?=F@4=RTF`'ۦY63*)2hʱU<6->,-/0<=J~fOLfiNDIAF;10Jqgb8IzL9=VjcUOJ@NH;27?׭chjUMPKOO98KQCLf|XuuztjYB<%-cvWI<->AC{f=äêkVNPPTWM`lhOSgz^O\E7GZ^9G=0[`QHBE>a:Ǡa]WZXGd^tpNHX{gyMfe8+;9+/W6;H6[YRbcVA]p9̭o,~]ieh]mfo`@APt_lsgMhqE;quVQ-&E>pmO[cl`]r8ٻh&mvzyvM44GkyZooKliNi08JOzU\oi]di8w?5``A:6@`{_lMeaIZ`_cQ55VsmPgoxs8ڜir:'`ULFHV^e`UMP1"#3<7JkrOYfnw8޺}4"wdei_UKWwczwTy|jZb\Xd|[@Xipx8̎WH>blsxzwg[Kof[bv~}mkld.9Rhy6Ǚ}p~[\rirr^_EASfu}xvp{tvum{lUG;Qkr|6ОxkjTP]fqp^\G/AZabzuXbklusgieU1EZamos1קxW`agyw|zg[PM5EL`ekOr]FIN>)8HW^l0ѪtJBTbgrjswskc_F@@Kaytg|n\bFHPA;;[kq0۶wGW{swixwhm_TD[zpcosteetxrkaLENeq0æçkOzuyxsmUFI^gxbj{tBXWn2ի\ouw~~}_RIRgqwvexWK[e2Ⱥe}eidK_wiIxLWb2߷ks_oa\GPgzjjyUAlxjM`3ξsyfS[XE5JUl|kRw3ʹyWWXBAowOYdano|mmhpK6]ut}t+ںrE1Zȼlotrrks+ۮvxsB8weswxx{q]u+֖p]QeB@~je_iqud}+ӂR@=/=}ros{s~qlzzY~~lpu)x=)=rwl]YWd~wnp,ͬ[) Tugjpfzpxyrgr}ns{^lgd|qhq/˾_3&qqZpnefmmhglmwtzt^lqk}lemo0ŪyQ,3xYvj^`dhgw~pusrvuqsg^fwo]dxRh.ƦV+F}m^GOTRfc`ddfnu`]vyjaizoSUi.Ƴ|O,_rbUKTR[Xchijbch}|vi\WV^W_eg]SXS0˰rB+dxpn_hihUWdwzxi``a[b^QJ\VW]VXT\Yf0϶hJ7&nv|zn_cYVNMT_XUKPWPSVYbXUQO[file1h@.(rwt}suce[bOA:?RFDPk]VXGQ_VAE`^jevm/Ȭ_DQm{o]of[XNFA@MF=Wdf\OSZC?STkvjmw/Ӳ{ztebb^ND>ELVXRYN8?3I\j{nOw/žۡuuzUXLW>.AS\TWW1*=K^ln\f/ұ~|fiYG+&.;DA2',':Wi{wjl-ʕ}|u|p`A-=! %&+-.Pbsai|uu-͒}uGj4#%9D>9Tcgrpmj)ۙs}zlnf8 ):KTQI\ivrjq'ኀ|quyvagoohmj0 *:GXc__kudb](rmfmlggmfkZdbfQ{&0@KLSORUVL{%rj\ekb`db\\_WMN]F',3987EQVMQ&ԓmiZYTPTZXXWZP[N/)21?DXGNRKH)ݒqty|gme^Q@" $+=H=@IMU_QQTc+࣎~]QQNY@)%*-?FNRTXV\f_N0ڣŧyme[eC0$+5AFCGPJJba[YUk5œ~eh^IMDA %.6AKRKCIEPRQNYjYf5ˑbjk^VTQQCD2#!45:I[O@LXbkv{yxup5՛}xytfG-&$,4;DVVNLW^Zlef9˨k3'+)29CRZS[[L]^Tq9ělcyu^@+(/9DHRVZRGVceh~|yy9ֺ_~nm|q\@2?EFACGSeeifyy~z}y}{7̲Z}qqOD@FFWXifvz}qt{v~7Ұj{dMPjtnu{yzx}j4ϱ{x{h{f}zzfqk}xvx4Բy|uvqpͽ~1ؕzpoZyŨ2ٯ{sqzλ$ɷorjkͻtgd]ηrgʿü̂ݳȹ{~j 鹀Y\xmjXmTP!ŭƲE9FdVQ@BC<\vX ͧƷN1+>N4.'6-3K?I'|o`,%0#$'#,.0OX^od{|oNT3 %5DBc-qMhVD1. %(@h,Ϻ{C<0*  '4Mcie,ͻl3   &%5M_n-ڲv|aTF      ,9GR`r/ήqhUD8*    #*/5Mt˾~~]>*  !,4?k0῀sro_J4    (>`4TLP>75-   9^4έZQHA1'-1,   "'  !5a6޲m\MG@9/&!%#   ),3KE323 &6`8رjN:82( #$'.32FQ@VM/ /( j~pbK-#  4^i~}vnZ[JNSJAc:aKA7% owlhSXF -81 %!(BdwvUNLKPG?IH*G<{kV3!,S_WO6!+.($ -Lu~|n_MFDFKNDB-.J=˼iO1$)E9?)#!$-):=98-24;.,W||un\DBSN;9KM6!-UYVl<̐cE-(u}R/,33@/ >B@=AM/032+4HH6O}>ܩ]:6-+4gsa9(% 0"&*5.3eqvTD@PT:194426) "8VKM'606AD<8FP>~R=@[neW774.94,$*1.5\xkjNUKObeU\V=:?./+*6PX64,0HE4BFS>دhktA55:689'&6<59eypRfrHeamux{`UI7,1IW954%272cQ=Ŧéy[@:78;?A9KPL>Af~wSdtP@yirN8*7EA$<3%EbB95262Miv:ŝ]kYA>@B3JEXP35DpsgUkiAWzrW0'97*+H,3:)Ig>8EH@1DV9̬l(oU=IGK@MFLA.1PH=CFn}8yA4YvdX^`Wa]=-/,2G_FTxm8QtS>JMLK<($?ZS2CL_WRXWe8ڝkt9"|pajcbcZ:<;8;BDLJtn@FXaT[hi9ྒྷ7$i}\f_ficP;EMKB7>XE\nYCdlpfO=D?=G`G/=BELgaZx8ϑZKA[aaVgfXAIT[[LA2OC?]cH_fru]SKNPK+:DMRelhj6ȚkqxiS`bW7:NGNMYP@GLMX<9IPKIB317FNn0wkM6`hh_S`SOQPobS_K5*+>FRVTP7=MW_YWP.E;Op2͛{a=-)?ESidjqqcXPomB7@PPDJ'6AIY`h_8Ocg3޺zmmaMGNG4120*=NOZ`|upwiYmpUB=HO=4"?>I]U[^BHek4̣qpYC=IA-1s::LJRNXs~vbYX^H8CJ@'%4FNGRSrwrcSSffOA>:LE)5AXZnlVIck4t`V>7)0BI@SXOWddfREFTnb;/2FL/1?VbcWViv4ٲzaLN@CGtaORX`c3~edTGASyhGTX`g\XQMDA?CK?4'2\ڞpN;@[co3ɦvHFXdaFFLUUJLHBLSM:EYG:$8_ƪ1ɣڳ}PC;PQbfWe]T_XBDddD144hƈOʶoSVUpkwz_pkUFR \kY7(/AF&ҰrFRzV\RXjqctn`Z]K=OgGC5//?La'ÙtV3I~p`bSSPx~`bVKXNMV]J/2/88JW&밉X:,fsvt_aofZ\N[gorX>7AJ=EM+ڱm=*Uq\~xlZun^T[^\Rijd[SFXQYTv+ҥb5:~|qlg|ymts|iV_c\fSeacO;PTFZ,˱ʍS2Qx{plwtqajoborjo_YwZFENPXTOSPPQ,Ơn?2j~tmiheflt]gjyh?laUFFZQNOL+ܼuK4T|hbdkctflhe[skETp_BFO@GCM+ݰy{vE8~|kaptmbnjlff_cjMAH`RQrbQFLIE6S+ؙsaTgD<rnqbV\\piatxUCY_f[[E`UR8@XCH;\+؃SCB36|nf{xnv[]QNSj^X\PKRaNGNO8ZS@XER)v?0$4rw}njybh`]]Xe]_^[_KMXG<84@WRKXDO,ϫ^0"IyhXIHLDV]NSYZUNGANWIOWU3:5;6>CAA9@EF>454t0ϳwH0XoqmkUON@KJF38FQPPF>BA89@89394J0ҺpN;'^xvaQWYQAA79748?;=758216:C=<609@FFAw1İoC0&_aWSZdPSFG9?2+(+7+0.4B>,+=7BCPAc/˯fGSk{[ieumZM?PB992/+%31*6BG@8;@0+92BMGHKk/ֶokseu^co[PAAC?1+(-2574:8(."3@ITZJ.Sg/Ye|rnRin_T57,<+-7<59<#+3>Fb_GBTDGAHGj* +/9D?=GOAA?(hVHKE?=B>C7CCAKWVL/2/3% #/+*,>,-2-()ցiM]MRa\mXUAG@;1) .5'*/39?100I+֎pswjnyS5.0-9,")089GY]`Xofglkomomq7ЮkzC~g\RsmK>:@@MKZZkltwmcgnqkfnu6լ{p{N}opf]fqbIJ_e]dxy{i{ghkcjXr4Ҫ~|kfkfkQemMees]e]oxna_kf~4Ԫ}}xhmeseouq[^lͺxzpbaix$׌{xmk_`qneHd ~qlq2٥zum}|{^cnhg`gʵ$`{_}UYsqolaa)ɴh}|Uv{uNIuumhdnȮvo\Smolhjü t8mk@ -DCa߽% 96]O*,8ս֗âD\5Nʟ :1P2xGSnXVҒ2 #$)5ע3X WX$.EPd 0 ,-Dfr!RHArJ T6%-6 |r,b[) PWCC, * x dʳ6  gj ( f4omVa>woz45{=aFy:pT4Y/[_,q-̊[m2$UΦ-ȓAn~.@?@+]]E-Cnn1uΈC#>vS?M P,&M254nx VHU;@1B!<=BY>mD$rܻ L009' AC>xs}G D "d]jjh˼ֈ`VQ& ?0ic08܉PNG  IHDR\rfiCCPICC ProfilexTkPe:g >hndStCkWZ6!Hm\$~ًo:w> كo{ a"L"4M'S9'^qZ/USO^C+hMJ&G@Ӳylto߫c՚  5"Yi\t։15LsX g8ocግ#f45@ B:K@8i ΁'&.)@ry[:Vͦ#wQ?HBd(B acĪL"JitTy8;(Gx_^[%׎ŷQ麲uan7m QH^eOQu6Su 2%vX ^*l O—ޭˀq,>S%LdB1CZ$M9P 'w\/].r#E|!3>_oa۾d1Zӑz'=~V+cjJtO%mN |-bWO+ o ^ IH.;S]i_s9*p.7U^s.3u |^,<;c=ma>Vt.[՟Ϫ x# ¡_2 IDATx y}?޾OϢь֑d˖d`2;!BRR\.PTI [ )`0&=r~+fْsg{g?yCmlf30 f`6lf30 f`6lf30 f`6lf30 f`6lf30 f`63p̳! @}otz?'aTMGOӉl趻s=wWt|@pL!17n%+tɕl1y29I2j5SOΤMoI& h:u8B1'!Jս?|i'm^N$v>076woy8׍Ad/B2Q'?3?NT&+TӵZ'߿_8s(}{ b!xv:a4P.2 !IsөLe2z$Mɕj$As~R999L{ƻx|l_y_~gǽAo8L/dRsxt. [׻B_w|3)[^9hZ 'vNw惐J'z#nBH$à L&n0p<F B\]i_+&5~b2΍&S݆*fՏ?>>Wwf Ww싿K^>G\m>{9Ixzz9}a'Ndf!@!wBr2 0{qL!JQ3wn $̗Khw?{Ԭ/3QV*KQB2.M˦EC\ËotϾ~30S_~g*r -nUU*粙lQJ?>>iWA'/N&rH$ʍVk>L'e+#8n߹67Z ^aZ a?4P7Bl`nnc}iyGagg7^|1dqD7~*K7it_)_g.`Ah;\6n6dgp L909&4'D8W粿n/-.O?yg8}7_jpJbh\CX fsn? { \88 d@З Ǹn޺A(g(!E=0DMB*dbnݹO>3?'cdf k2_A1dr~ >4CtC&d*]µ> `'dâptpZxGPͣ{BAi( ϳ43uq$unr,e7_(^#,jJ @PP1Gq ZkOKYqz}F8@NtX|TB_MNqfLpL d8::FÄeCT!$H =ށY90 k& &0t.2s"^@{}$ ۘٮ_ W9q_ß%FFb~J"1o(*׏!BO`|W@FoZ8:8 &= X,p|իݻ>kXtWWAS} EwrR}Cx܉o,nKŐ춛lӏX;Qo'& @)N'md[[ag{0"-:E2zisae55cL?$C8^k/7c~f4^Y. i@$ň+;3Jx@wwb^ҐZ;-O̐f O 7Zrz4ɯWCpSPZS!xMVT" <$z-ZfS}n' @{yV=qЪ{}?7!/ ZwXGn {A%X]{-z++(lkΗ+2%d!a'|rBHiaY)}Ͱ-% 2IOP3J3/H⁒f }S3瘤,,C`" A jPA`'pl2~ a9:<,2( tZv7^}5C*=L| mV2+žoAH{~i8= Ri2ZNRMK䆪)A~^M u`-zu\ x r|L37+ rB{?_ D0 *|_?L=1cPbD *DÇÃP_7o4_=۫//}O?~30S9|# s"! ^B`KYsiSenߛERa7^E&6h:lƓkF=RZ\~ET!a\KBP8*_π|6g`愽vR?BN[-'ğb>o?B9x:z#Ii_r2a p @ZyMۭ0`{> IvG!<DW~H)~ " N6< HRQ*Dk/0]ł aRxbbɀUny؎ a ՑɗPDڂy8ۜxvw7FqF+^1쯳lO$'m;(| ,pu-uuˡ N8{gIpRE%$=ڔ)jp=oC~ ( =)Z@8 xS?* U^nBOiYـ(|_bL@!5*r-΅#N_68o1o/3%jۚx[L,-˟wޭh4X'F^E l=o Q m by߷@[]"]A.t]{5b eGepI!T2Xl6w,@C0VWMOju)MG@R\"K@.'ovT:xN34J h @(4LyWj_+$ON@d(.nn> ãڭ7}XChzҤgL.PO^ؖՇ@'>z > `S! $uxV꾰/9g5?aj.IM2{vazMK1[o@/E-JA@[UcOcmÐ%0{8N2e .>,E$d/4 ?CÅQ9.}B(Ћ9 q W G|bءP !*!1y5I5Nc;)[B&*6 a}zx$P,RO el ,+!̻bD\>Cn l"ZC%ryu58-<~ =T;^B# $B~N?s#1e @xMq l~`oVDl7_)="` I JL[ ,KOsa'@Yh؏x/hn_* 짂*^g_˼;tņ<6"-qlQ6'@M!^x'\:p?~ ?N'F^y1Ǘwב&ȢDM e%0ݻs/4<#"W@]Ab~np!ט5'mo:3S% /jÕ˗  tPa'h]v.<%M;'OA20-h\!>ǕEH >E@VaهA8vZ~1 eX҉ ,\!5?A1 apBJJ Zp3q [΃=OY%$#ܜ*c78V۝WF⦥Rٲ]u* @ߩ8w. >'<r? XN9Dԟfbl>6ǯ>qT"=SQˈ`/pDŒϮ6Ti."D Opup(ڙ%0^ݻxt741rSvgYoɔc!%(stkZ48FIHu% +Kb:ѧ`p(H +|[ZiTO?{x%;ߋKsA!HbOstUrjǖx$xWc鰎 {~4dD d%: Gz08j)J(x[W/9y˟`LEkC!nC|JnזXYʮq\weŸ ^`۩G!Wp}Ds q)0Io 74ސٙXzjbMo+q%c lHѝfX͉2cZU cXeV@ }(8> >110/N~ݮ[&_گD1<~%(]XPGlWQ IDAT)~PaH]RF'E_Q$ "~o}@>Z~Q<:"ŗ 4ӳ9Q[i*6 u՟\=q&6S_a|Yη"4F<ҩ̅\]qH)t QZ+XAs I%BG܎ݷh[V)S=B; 4)>NyKR8+VAɧ.V)pr( 2dX.B#V,(45O:Uʱ㰵$x7Q,zGAM)(CO?^a\٨(£?W|.6PCBאI>/{:㻟f݁xf f{˹l/#Ava$^ %78WK"}\2i8̗cM9GmWa,AV7(OaD/i>bBYC?\EV1^:GK L[/@>J| 4ψcH"9C%#4O|~A ʙP^0fތqw0OUVdfX|BQ1@)}6 "+/-Essi*\>\X9;wd"f30So63?Éh>F}khUˆY͗#`} 6ci)H߿E>}D@PbN_ $ܴn t۩k-/%72,1v]~: pK Ed cԆ ؝ B?A B9,/J1Z =<x +lܘ>T ~c$ȷqةy235c.7E3V#TPMU's熃j>{;6+~xL<6!',G۬Bޒ\jVaFPˮخF/=4zyޣ I3 D\9GP{Sߩ,NmPEĕ~N2 LQY^v؟1g`ߙv_AXI:̗1JKS\Jln>zǭx-S2 009Ye_Ĺ0M:JAF??k11\-z0fԧ9(ޡL^74{O77ZLJ}ͧjZtXtI@ixFT6\Cbeoj [ZT >KvFO0[]Mi}(0q~T9xaei:DќS!Wh>O$ ; bs ha8+ IV# -^r(>%’ Q00kR1:_}TlQT&'vC1+ۘ;ݏ}htp%QWq[Uc5}WP%u 1vq3y:gxxHcQ K8 (,UTHo*UO%[̆ڋx\e4%~dD@zmR=?  dfl\`wDEU /,E>o4ψ)0ഴ5 9{D]-u3ATS((SW. #sz=#>8yE<%bEWyƃ]aUQ$`S0`} {CzS'F`tf(- V2.ɱɉGiŠW5B4H(L&RG. G`y^uT*>`[`|f)7`}+I{k)tY,toq[u kSS*J(@@KONjO-} B ' }׀JZ'AC-11D5HzH*lߞQ5x]-7q;*B IpH'f=;1~Y $9Q$H 8" (2G*`$ U\2s`9\HҔGs(dzvj<\R pw3`Nog x%8;Q(ݰF|+ZT߸Tx_L z*ba `<| ‹IuE^nO=XTZ)A= ֍ULC]_DX$Cmك rXͅE ]󞛭a!5"NF9$ySQHp{y:r@qIƒ}"zyi9hJUh5H!ciP@1xt6yz+/~j;wB}A'oE]FC&J)LZ0sHq<,<d-geLWhv_a>CߊAh$Gy=63؄e. wϖ71@>a}G'/P\xS+ܤ{Cx*ĦOZiѝ?E U<uΤ8Qp%!tu1j2aآIBy@zPҗGqoƑ瘥R(a@RT:ٚίK@YJJ>u􆜛)=ήŵug _ ?kQYAS T@oǵ42zqT)nܘMw)/^ѕ\71;4|3c x.|a<GRXe-EFAoC%PCQ $K?JBxC?F &Ձvx)qJtR@iʵRuA*vVt!}Ԧy P~x[pgo3?* cr6/so6O͗+xEV }XhL,K|Ϲq š.95(t<?@fO4ܖ['^l-0,=d CuheE%X8y#1q'(ʁ\-|2EQנ4w^伮;ԫK}Zh 5;k㰊ծ`QPHr9d"MSKg J!(ˤ2`Ig.uVD5u!kFXʬ©0O?ӧg`8{5O#r,–60qYnۇ9;F pj9n"yTHQqDij!}眎I\@/Jne~v C+ȓ C=>G-1k-#HbI@(1 Eҙ5wf9hRRU@"/D)ꛢdⲈ5h참Ja \:^˨U*6G*ql‚\0C3<|O%~fۛ^t_'@eq"!Xr!=.c,\zV渼ٸlRe::z,>SM[-J km.]ZVi0)Al̏U| O<]@Wk'.3Ѵ 3{-w?ka<*sN!>&'k(_bC @SH#KƧ2 H%e{E:BFp'{P@P+I[52t@{"$kXXXل'nj"-GA0=BE&89P@Ƒ3hX,u+λs[!ƟPpd5\m3 MdzL& db,~K|s^xfLc)M z XM8Z&֪&]d Vѝ>4nDQK>g! AaKX7qCIx6lYp""$sK,0=81ހ(Q .Xk {);Pp,s9jάib2a7}p uTA@|̲PbR1fڅM( dV(<؁ ǀ aT1cՈG ҩY\d#%Bl0.qŠ2a K<M*͋/ῥ}NO׮]'wnv2"Vk,w,W2@"fX j+5k+c@{VVSg#X4V‹n,7-q @yK.~B5$}9|X@QϬBw:h"Y8= 10E@ t)_~)== il-Gv\1Phcm{'1L1z$k^H!S ՅBl!A)RMh oT5|`]~84-,| t*`$</oO%n^4z?BϢ~%0f M  ql\k/Msc{,W A]CaM c̟m&Sa}YaN?Pc["%΁vewnEpF'h(݂ccHSNKq=bnźMv5$Οij.ʿ Aã߭@ Z~+@h`oɣfY842KB*z5N6f`6BҮcp}.M*}!Uس?(?,y^'>BxOQM^&611X'_N )fHlnVaB{.sXSPKhl|f-#~FuMD#Ppr)5¤!' P5,tߎQ~)s+`k#(!hbtͱ GprQ,%ZLz=hXY~?r8aDnwc$vأkQtr3,oн|)Gqeq=[}`to'G~o~?dnvΆ%k·uV^\$ֿIYog}Zd?* l=;z]2L),0^E/[#|Kٍ2K\/6/E 6|)(>c2b5de`CE%kRF^C Koz k- jò!q̜4Oܣ}?̻=G w|'>O0`ݻd{HѵEqKSoB ֚iMk6ƤbXO}"Z2t6~Xϝ ;T"mfN#,A|ݐ+>kJH5ޟY[݈ Xp$*$l)ኴr^<Gh-9ec9 v)*1{.FHSA!@?%dJ*Xl2`zE|l%2K%B0 ӈd /iC,D !YV;ۡGV_48Hk\K1\L尟{?O|?7)7'O( q!qӍΝq_-Dױ| 4Du7sO| \Wh\bǽF\Gxw@a n nThtŊY/ѥ$.*5.p L¥;^F`uYTp:BeyqHsq؅vx`[@gcG]ޞL)? v IDAT}nء4cW2KQPa@QtېHIZlބ8G\9W-gԱHmX@n3..@ZWY]\ 5bz!OXo"٘F\RiArIJ%oaes*YHA"^'[4;Z`* nH6x_xg]pjG"-tq^o6& %#PfשM-X~,Y7T<>~,Αw&3v- +yvN>q[h4mm AkLeSsl+Xe\u͆[.#`/-2@$=<Na 5R@ lzm'@qژpJʕHR::L K Kzh'3:i*Cb^_C]PuX;e# v,)ER}n?̑믕0 G`*DzzBbQ\옚mQ\4JJ brJnMI5E0P69M ;a @nUȀU#yxveIZĉS"ZQTvh!aJXUKRψ͎A~]g)gvo~.r}oo7l=xj"EMY1J8Mv +-7k[T:x-i&qͳ9VNt~Q `1OYƚ5]pHr uM=ڊ+ tZ_si.dm8s g: 'YuhYx:v܇Jxd#tY*9HPsXlzN-ZK9ڬ#6 UyH)DWZǠKKIE bGz3aˡRV?鍮1SuS}3pB^zKO&*yfy&]b}zcvhZcXv+8X^ru`D~XKza?VՆPZ# _7BRߔr0 ?VǸ=2 s[UcBfϞ^H\X t% W܂c걉By0 SVY Gu} q -&DpHN֘Tރp. }BtQCRzzLJcYJCCxlGi} ݭppee& 3zronSpm,?-YB;ZbGզ PϾ+̃6|DP<@wMUI=@#BPCC70zH4˰_1/~N.,Y8@=A#ŕyfM ,^9^ H:{7Uv6ֿi.64DO3f 2Ѓ213 wgrp>!8} pMH sPA,Gb;`Q`Hȵ ( e[/v_zw_g?={z8x+T ^u_/׮f5񃡭HVX3w=c`qW#5N:`t-n|%&@ _"o|y2D7:`Lq)8O^ W<;K`S]EUzp /n@Br-C*Hp,(^ͧMs-R*d9ړ6#a$eZ#bAP>Gdr ERhp9hH5$\(#Cۮo`s2+(&)t3?-xyh4`%3V{{{H?3kݝ흰X)E$ g^xYHn& E^\&%i/./tIZ|[,`[ˌscudt ]eb*idFy/Ě%c>[AتjQ-x2*xpP7ZAn_+zr+cY;[^|R*(I5 P&^/% PZȣdz}RX4&8UןKa"!MM7"fVlH"ɕ^[o%ڃa9۾t 🦢Kvij )\P,qtt\ZfZ%A ݮ*2riAZ\tmh P%Bl2 Z3JIt`7Jo4.-'Vy2t>Ϋ}"bEZCm BNՀSP1,JFffۗ;Z/& A~eʌ"kiIˤΞ g? (dD '#-}%0JGi5N!K+g}@\BܺZ8$#Y9i?#/Q2\A2!Avfg(ikG(@idRx6tݧ!;=SyǪP\! h "׏"İz:78w ^Ⳬap+uLY'\µ'z rsDG7 ;vPnz1 ǂ8S38w'kNv3X-t9⸞Y3g+W¿ur:5]{6`wPՃ1),2dtw8~ MϽ$ Pz%$Q2\\cXywFpA:Lj%J<5-Xaђ ~&oQTWݣh|HQdK^\m._lۯ6t]ەuM'JcV ʔ2-7Kqrl#uT(d' $"rkRL\$3 (&isΥ"mótJQ݋u5Յſ1Ic-3V:-~͡>-wn%9$ӍKX{~%;w.,B9)Zs Y6L@>I.7~9 #L} m{×[woZMjj<3_^EFy\@% >"IQ)1.ڡ"E#7;C,} ]\2uL [!Y.i UOb}Xe3 1JB. Է5 Rp* t! ѥwJ ,"\Sir^q+ܡh`٭-=,R%߰޹?B*,LP!!(;4dtw}7_έ·/eY$DHlOG`S{ l&I'sEpѲ$Vj4>ƲX(D+x)KKsezbw0\eopP`͐'6X#܉;jlPZ,Œx[{aFV" ~2_1#`r6i;sȊPfJ谱SwC#>ƺ,( $6oZy,n gí[7Bri)W[`[Fӝ=\ ~M4_˛<[bo4B.o?)kn{Mb ZP V㣼Qh@ fTA`9~X؂˜e4Jvl>CZee dEb7>庆(%< d p FN#= JZ!HI>W8* zLO6F)$;v ` ~b=8!\$\ ٠Dҙ`x\ j͹gm&Wo43F3m"7ar:W_y%cE8qј Kkn.NN߯!`'|Pmu]Ջ%iIkXٰա,㹂1{C Y}0' ~j(O!GXMA PT]~O ?+ _POHR|| NLe8H\t_τkšt$V{rx1͂.R0q B8"d0rRbs=Š1Iǟ\Y5g3x#2*K'NA\' [5=vBYh B?M*Nl,U-ޥ \$c2iξ/;{)E<{I8JKv#O nL>)XPXs&Jv1OrX *0f!dF&P8{Ν*dӓ{4"=&mh@c !8ဤӢv r5#=%rdSJ( XhJwHgfWxs<.SCrZwR{-姟&Fυ^y9v|17o[w%:ۦK]wc`Ip[ oc=@ %cY t Z;FX<tnnkwj 0.z*8e-f7>Ί VjnkK8 У |`|>ͬEe%#"C`%,VpT%lv*qEr Hpi~[t/ fTP*Vx<JOkNBl]}JmZ؀ y]]Rn]:[Yk-m؅-˛ka\(aq;G \K:N; f2,RqNtc#eaFθ$ٗor=zN+@Kۥ=RXN?1omTݗIO;oCaFJ!%i#Ƹ<3~3a8 B!= ,(Nhn 0٧l9Iu1xE}1aY ! IDAT^- <,;9΀wl{lh rmህ(]jK/uROpg,7WЂ}g~p/&Bn9\.M<sr9 Px]Y9c O kiE鼹ZFg:Iq)eRx VH/"W:r{ Y] (vұKe! (8VM~C8gyqD˟]PBmkqDlL2K_* SyŔ) "_$!DYcXpD1Άώ#Y}Fog fE?' Z <-W_X n 'i  L@CN$%pF neF"bUp=FxlGA]zw}v;.!b?" $@WAOW"+E8-{ dR&  D-^j;CL W@bjIA`'u&}kPPbQ K\كk_x E33Aa]1^}Z𪡸2{HS)1a ~QT=R(ʰP[A hf f aBWh~QL^;pp/E{d@:_Amsrb+p%+N7]k/| ~.-VooAAS\. _Ri' Xf) Y ,X|΂ R]~rqH*I6m,rЅ1CEb"xI3A!fp5<,޺Kmgz6i3 !!`8;9+'ñ/ICd0!D,Ji6MtwU^w|>fefj.nKSͿVW9P|ۆ;2 0$4cw`9#ESR s8>aj "Y|lo+%fUNissׯT6-|Il6M9>]'s}t['K$m@9Hrts3:ܾh-] ;x_HDuWfK1 v)f$ Hg+X!I9hrۄ8'Ė !ƨguc1 dU~\WMlZ}*8/,7`uc< PB&+0s4` @d>4;ڌQ(v(吭,ϝɻ122]D MpJs$w/ UXJ30kC"e*QT>w>*m}8'^W:kS)7 #ޭvpp00,%l\ޠVU+1LϪc0FJV>+|du1.ܡ=vF1D@2 N@HKqƠ[b\D (?ER2X BkK6Pt,&6~&,dAH(Bt)zd+Q܃1Qs[_-\Y޺̝_9k  ~חo/cRȒZ_^(/}FL}@ f5O2ΊM%ohAEtV W%CxH".E@QAa#w݋+m-`hDp"q-zwH1ExGܦ@e155!ȈP]ὐPx?]ۑ,HG kࣺ/$ H{& ex#xMj8M5@\~#(7d :Jw(^.<`i/W~˿_f W r}ʃ9ښlT(RuPC^4I8.: 㴒q_4;d/dԗG @F8sprKOCM!A7nܘ5~[+x 'a?M G S) d 9څDގd Ɏ@Sn(62 )GNÀKd iTPuL٢x,`H?0  C:YC{ ʁe#ZЧ>w]_9<~QO8*Q.$&Lb:b6D"2R+7oIvdcve꭬&u9 78vRioG3qJ0,q"!{a?#9v&'Q$|v9*x$'Ey;хK dU4J  MTPsk܏@AqǡOtn*t14O|@ ]1v!:e;Շ{%K,3H VlM>~~~Bo5;Й_? q@ƾ1`<>|b2,JR3wH]pKYqCrr0%aw p,6I)H\evhnDI~?t#pEG7n*!U8G:G@ZhN!A.ZAsV.̉>DLD\=@CF #v9G 6`0qҫ B` JP`| 1SuYyˤ*BR^]:(~9.xiM|߸(R0+3% &مd)FmP(!R W}uxMEG ȓ9$vwmT7{'0soj\q>Gꠗϧ4Ԫi?q&:h N..gْ5`NEga5>k$) C>[ps Cor8 Cre 鼛3(*g@2(u_cfMj%[0 Gq^C)J9R&#SpDkM(J8 Hm{jLBlLDIRr>x;d/ǩr#^8-׏}bpfe墤,`MBu@1}6u8a3h6aL/Q"\btKB|Z+j=8F.[5 !?ޅ,#)ΣEꛔ;,=8O[N|r)5q:[;Dgtb#Tqn2df#/rM *PRФ/! |^yi:4I@3˰)d8,}~Qzb)+]SxqmW:f98׺$ONI`4r$ ^qyP3Pe){tOPBsv"4@/ N~X!G~Dy7 Z7̋+,,0Nt30WH 3<Db8(|Lm9@t9PynB15-IjzT>@lّ̄B qs +}#J*{]63Tw(Q"8-)X*xXplEe3Z;^.œW9>4_Y0IuƜ3g%3)~qQF^@Fva,%n-yW 5!_ExQ>G8Ymx˅)ia~5:0u4:`#@ $PSYZ Y Ë.Ey04HSqIhu6yi|f?{9W?;nugo^ySY"wKJ .7'?Bg;@|WKTIԨe9D3 ΄Tځ]XzԨǛbK{f}*+8\4Pe.+;a5Aw/ 1F Pm'{P),mOhXJB'a8CR@;V5uy4&ˑ$K[8ŧ> #](uYZ3δKiwuOztݝy{}bҋyh>]d- BL/8u8gI TI:Rס,@ ymC{P/9&XbYʬ%b LRau[,$c~߄KMSaDsK q8$CkD eKqn$s R&r:ktA%sIi:Ճ0ZQ}9Zn%1PL:e$s$Y9*\l O`^!|tkX7$Vt}o|I;]vfD14k *itN* <~aKG]=)LC=;4sp{!l!U.cHƁl$I+6C~"QןCtth#݄,^QC DECq]X]& CڃDftr8~sB{dlD "@`{2览~Õ$4ted,1!ږ=PL:arcx_>F SCp&kή@䶤yP !ʣ,YJ kܮ׶6W|a_;޸]Gf_[]}h٧]?\X\AJmw^eiY3~K)atr=@`AV`O -/jsк_pa} 1c0΁ڏF1)Q&8zSglBc 3w䗗ZZ{N,vOP\SNuSt4)4.DXUV] -lSXa,J0{kӒ ] ;y>T̈.O`|Iz¶h r]u|EU'.g(vl A^u E"ҡ "DZgVZ`j`8oe$r ٨!3zӄajpCA }e:AH^Ex?=iw_1ix )5tFN(8^Ma8ȄDCx?kgCy*N(.}o^grjB1 f>+N`m2$=XE6)!w>O ϥiB= H:m Hy[@ߩ]m Clc [9tCpXqA;SjIWT&{9s\A2wK˃20 084 aysIF+Ac6]#ˍ,d9rt 2ywZ5Vy04-r*/ȰfC"(,O;s,۝,ӓ5W=%%q{:L~H/R1 ރwF Ţ$ :a-dkN0 8|KBR85[\mקQ< J%A ;<ۉ&3{ cZ&_b΁AQYΗy2ZIRu \Z*r`@Do%8ۣ.Bb؂}Z@: U$TCIJij[MzLF,pCw9 a#pԘtLV=F \"X 1h n:\ @dv (v( @jShv I#EH(]DEP,Bw9ĩpv|q^x rKl??u=ss8i46ccwD%He '-hGa0(ɇ5lŀ] "#IqeQN9Iг#ŀ# 0rkxV!RzK$* wx3t#iv"JCn͟㰬)gj 2L/@7V4n@a6C2 v7!K1۴k,39xS!@D'eOtC@GWuUG>`IE-B@\?G ͕#ΕmW?xsyR_Ƿ~v2l-fI=HYI]I!XsD7xDZ>X*!4B.1 j R`>[ݺ]ZیK׮ Y'{f)QHkE}%yZ9suPgcHށAt8 z?#vX6(?ڏA(af "}jh`cd5PPT`;p12&)(F ؍ :*RO=θ#`=#U@?19"}T>@n~Z;L3Ub?sF'$ LR }ՇIK[ a@2V]IB,ƈV [\[ @_00 ]JJ%S`=7COuwbet '9yx{aWCbh6v"ز?>9f-]ቊfhϧ;}cɈ Ds=='wϜ,\UV)셋o߈&fÝP+d4Mgԕ# Z=KpLCNBw Ib28 Qd1ۇƫ.!=ezoµ( 'V$E_d#&9?k$¨rՕ1xQ"n "#;)8nO`/wvv*[ni T[c0rn7@aiT޿q(Ї;]}{ ?omD&<)g_xƳ娊A/D1עm)3^+qfI,^"͐?&bH?!}8+rߧEy9rD=h=Ƒ:3x\d2b-s/FGX#sxӿj dM2F Pr23S81)G:tAX-H%8e(-Ax$(\N6 Xj霱5dѭ`>7F}xl9EVfKԻ7&:q.:;~qym,(>~Q1uY{gӅŧD NE!@~&7|k?=xN!'sp):!p%J0#IoOYcJ$iv#@~N9scjoV3`sGޔWt]6FvUW4CibѯjDg/N|Iaeʤ?TZ[Y$Xlj~ _paۭ `w`ROfPX4DvJ))$SRNvT`q!ia3 1.8Cȟ ڟovme/^7o~;.>t95L0c㣽;^Y^8\=:sVq)RWCN&e1 @5|TC*NLs# Wql 9 &t{D_{J_\_6.\._R,oٍ7^eth~=YtG~7?}$?wX砎s7=2~laO}\!N~ى"q# XW0`vOx?+Q~:A_dĸ㨓Qf14*5UlLυ);\|+[_,?osyj` ?AȄN.RD>绶9w6Z<Gw̬.9;<83I#ElK#$ՖF[^>EﰉQOҢ؊^\r D_tfqAz՜N.vg[V+G'O`̛/*22+/t~d!!i#CVBk>i@Ql7 ukD~`vqY -;oq :^У]`ylGnù*aJ2*G %:vӔ'x:l~.=votbbqnyeW?,'YG6Um7?QZ._-nr3p?]( > Cp 4)!ߵ 2M}<7O_{N(S7 WΗD~"־mԪDmʉ"4zG"wuJmG'{gnٖK_$iqE=Xz[%K=v>h ><IOXSdGC P@tiF`\?J1۹? ´ UL,b7qLJ#O=pjOjv^z!z6$>1k|Vo=GcG퓽ʍZ[Pu[0L*;b醑IT@ #[ؒw]0,Xu(_w^9/sIQ*ˡ駴vn{.XZY 3A}@g3A-/DX-R~ؗwznAV,I٢@Iw㥛:Ng5t(-ow +Ҥ kX_ފ^dWsئ|38PB /;wN` ˧g]/ڹ@9ғOO's K>O^b6G xG݈kWeWaVy4 H7Gz/%9+RO{/Zfx0jtp`yjCOҚcFMP'j_hU+I]@q\ץTtC< Ze|φ F$u- lm6]'A4U^W>k?[=Xyr=zZq.wA<ԿZ,ӛ*58@a>ssg/lF.N=[Vbýg]z J}I]q|؎g%{K#Sa51 _O,iB d Mhq ""K8/BErעcxg[96{,Lme8~V,0sg+OB\O=c -/| ޿że84h |M3g`$v"n~ VO=6UD'Fet`:DI2>he=cdkkF@.x6rȂZ47ɓm0Hz/P ׇGBIJ` ׃mhPbǂ]VE'FB5Ӫ |3pD t\hjg<8tFXbX+}ɱGwnmb D~v#Pakpa#kXm'.]0O*晚2G ƀ͝]ڴh0Ю HeQw@Vdڠ=Iv!gpHg/C)A)R% `|8Es+tpPU{8N~% =vYoGϏ{OdgaT1Fq}+`c'K> 3^gyO~j  p;yySӞz t ;hyf"2O9tcM< ۀ~88ݸ+ j1A1Xz|Nѷ/H4iz9 sPҔ 5C_aB2  :4g6֣V1S f#I F86א9N{rw'0sww^'|$8"zRX`j%:oħGY 3ؘ}@-8҅.Fg6VC]&J[.pvgE,S00j ̼T)-zydhjjCC$?_?+Qf7pb "<kh*rVT[?Ao Y6!ƷoV7K p臓яHA(Z|GPo"LP~|H+=W)5?qO )b(L^%2 {Gt@ާxxɖi{.cdD D&aX<ǠJV,ġ,B:*ct#rK<ӏv>5L}Q:Ðut7Gӏ21m'0sxy WW"tf_t4%ۀ{lM|bq1?&;-6}@(tC4l G{&5{ҁ]}xxD{oڙ^joU~Ӵd!+fD9n_'Z,7lL&8#u<91^U@8#u .DnAXuP J׆[d b( 9ʻQ9JgX guhP|,Kj'۹D˼{v7'0swsZ_q^t=1FZMI,[wȼjArY:Jc151Z sc*vEyx nݍ? Uq2T_ ZB랠#>zv:Zt4|2"6 39WĴ"u!Gym" E 7kѨ2&$DL)At:ࠓ/u&{;:ffzo{}{4_ä1W9:~bLZ-?G }@sC ~H}'j/Y"sg>-k:d磳㰄 @}7D قx (+S8Ctzh}yeT]}ha(ۦ+1G{{L&Reu[i(IPQGUDg`0M_Y?f=V90)bb:IBI7ca kgKchv{N`W>{x&54@GU@ui4ğm@A O*Pi(.^Cx|"qtPNS?po#UEDaE=Dm%6Q"Bc]йw{(T$ #M8(5PtNyJv)l1R3Q9j%^#N'#H۷Y]7+9ޤCb-w[6Yw QuCfO<2}Y*l*Xf0AP3CfCo+'f/~$3@ mp~#@yEGn>g}<] uyN{ ;-/PעX}@vcJ hشxM.) |)b&,'HFk˴OנLz 1 L>f# D}Λ>Lw05<)5@NO- 샔/)+L6!3Dۆ[^Y~!RtH -/uc; cˁ ="9 daIߙ. 3-DG^D GQԐc;P. Ĝ B~\"볘$`! J<gգ{c}Fd(@MZIQ IDAT IEc#78::?7|J v0PKW{aH{Kl\c>2Md\8mM) D$L-¿XFA5]p@sDU'5*'X4;P"{i{D96-af h` 6b0NDynHvPhYA~q`JH. p<̵N_u3p' F= ~1#W{)moe[g\ߪ.``,m1r}j0.A]Ը ݷ f1t֪6}2D::'Do|%24$o"eesDߒ@!ŋg giVò)勺MjCDF7񧂀 `ԀP=m=X%(1/@agq*юC jC6A]I'?p:jן}i5YJjXt f7 Z9oE>` 3mWoJv!p(v?Z__ uPa`?Gk%;pX~:&-;t0Y~T}MڑήRFhS+C (tŦq"v\ߍ<ɇɇqC.\SET$@OQgqfy]R sqs` mL TՃ rCfˏU3Qe3h,+=yrF3w ;>y8{IQa1_ ؏ҋo|F:u8XT7$BSɡ@$H{#q- ( Ƚ}!7C@mJ\ע-sB&#HM $ˍ`bdJj7"NHLb~pgy[N`ބcnl3d&.ɟxᇩ!ˮQؗuwW0 H='@zMa|uaw[${_{u|@ 0cEbB:QpLbyx*L0H[dpqTJ>%jDiH@H7DtdH/VI@G`}%$d)k,{ IU%oodwz3p':tRZdL2{!zC(dap7^$'o3hDqI"W K{Dfl`1'1n<b!N).6Oބ6bj~Tg(2Otǡ ?mS*J?wʗd4IDt,q2 %[A&`DIdtG'ꌣDGt2γ(ev{N`1V+|hMoz#|B}[_ r vwNԫk߼Pl /#Š ő*pZ-T-? o]x1ZWX("?CHb ,p(wyiy9x&)_x{_\@p8h PeeI$L\^ o=ur-ڡ#<eZyڤ+.?uc~G0M9qp?G=5'06N@c;h$9*,Ï)F/_ y52lكWVt1lJ*pN!HhNEmb{٦$㚢Hsfdڋ,zjAڕb: m4ل @:GS}]FIbD~ itG'+Jt .ot' m:x?Amx7J}#8Z֦0:l06KV tۇ6{3$4BwF Ĉ/#G}Dl`l? |I3F IA Wk :/`{0_*D3´4 y@9Mn~4[Z_Q$Na:--&'FbىL-AS:6׀'<8@Z̛no \Ǐ_v퓨|O*&&&sΒR%Ҙl;ڪd~)N-59 [jn'0㈚f!ѴHپjp֎c(U'ʀd*B.< ߀hpsIa6MH'_{&*k4#} wn ߣ^Vwyy a{ smW,iQU,/m>#,"DU:@"v:mjeymNgPksӑb"qNLٰ4Yѩ@`~O+~haaK$_ۛ|3p~6~̙A$|Qt%θ|/CPn< `P41(7 M!/umۂuقm5مyZxuiPF0Z]Y%Ѝ qs E;lq^mRxe,|Nu dZ Rی 4GӐ1OH3`JB:8\`☳jBn>JCD05 a'mtr^[Xr6v"-<$Qz )S~xC#".a i.:J꿿O\# iIrM f1mf a Bpz:1N$Gf@mt 8F 85HsUv0^Ղ)s);C i8Ө 1W.߬6 uשd4 rf >7q)<,2wqv|OѬ06[/E纛&a|` +|ˢY~حeIٹ޾mǀ._jƙ(18Nڮ?^KvL`N0 @BKDI9@1vJu)Hܡ lb: T|^0?CJaʓ2&|<^?QtC<[xޒeYÈsS<CBnภB_j Xzu\"\kFgݔO>pfg~K02?TXq2Zijtc{匬s NN!5|Hk8s%nIEX\bla[~ ZkY+d=95Grd(S'HƄZf$١d #5H^{? #E[Z8Ј[Ϟ"xöe ]ǡo\:_}fh2ϟ݈6V8 _ö!;M2C' H#m|7o Svtp: إ?{&iZ @:ݕgIIn1}GOpjۛu3p'SO5-b4p$i13jpnå Z INeӣGD `v( #LScߞ&/ 7\:rBc8g2F :3 )AH&Ġ>N+g@n `2"z|pKA.X 4oþ]uċ*]ܶ&It&9\X<&Hq+ŧ?vjt++{QFӅ24U}G"N_}\YB@j @2X9w>Y)z] It[~d0ZSuu c G$!n$ * (CP}8l':4!ko˅@^R=3$"Q'+M"( $T:˓ ݓ C ~^4DKdx25X /Qg2b6m d8'_C/`I>wU(NjiZGyGl类tNx}; #n*JDTs%h/,Bȟ@U굣@Co^>CmM@%( kD:CHn"R+dHUV a$^(Qꐅ#sNVq NE8 )',>sotBs`&j5~6wtD=$J2NjMͻӹwY!kN^(6-2G=\ S} R{ζM41f K ].(Eй%&38KJ}?Qsdۛ3pgڨ7RF#^⿾y&Z# 7ndDS[[@W71o\H33跘hV{3:;N ӄh/`TӉKeyT;L`W!{=Bi' 2^6cyYb"0I)~^.紫v)/0HUHf(UY'eY# W@`k\R8 b(fF{t!#ͨ_ G.{Cf#܌ G+T9_s Kv)@5P{~757 :|F+>O4 >Ǵ? U^[ۆ%Qd--0yX| k(`?}RtUsmHCcJd04]D[>EVw]Y C  dXg@'+@,@Q g0E$ jhKtHxjp.kOqހ6È^، C7fpiam9e@M?7R3 29N "Fp.A="%YC9r=J6f!R`%ODe)t tCfNU~^\.>ͷ{#9L:ǝ;C؞EUh9'퉯LS,鹫ut[|ww0QCGglz]Ϭڔwa*-}ZFDfׂl4za; @D!LsRty--@E Eä")O& ^F= ][u%etN(;Ԙ`LM6+t.- :$^$|LJHdg"W7?pϡLB;@FP &ue,HeZC bxS֡>XJSBpZ\1'0sy'>#|(?x'Gpێ1z=ٮ x`l޽C0R,2K8:5aCZrDfgX_˜qBTZHHd]v"9:zWa󾯯5۝{?߾u3<ʀ9i |} (q,dfPt3b7?ۓH$3ZTSR0EdCr )[E[5 (&~#AzმNC^%u޹|a9 ;58((tY|9z%['_~:nZ[h s$pF}Z?HvQ_5 WNу#z=Oڃ=? & KKdʚS`fTK$(*>URöa< *2;dYT.-T 5Jt┰A/!s jg<kGwftdv0S/|dVt2r;upVa)(] T^1U  ="j;Pk+0lNOxSlo4 gnB*u=\hJ2|A~NAx==ӱكn$>%R{}Xp"rE mOM@zRvojA] =X!7:.ѳ7ʊIKbI4~ pL}w e!l퍍_~#a`s`xlI)?|,If♍/ZBI tbi). 6`T,8;dC@+ťhqyPVw[N`^tgx ­V&{O t\h ( L=lYL#A֜c.8_X] L ?+ǏdŢG|(tJo=b0Ku:Kc8/á\~~?Ò6 R'Hph*0Zʋ$ta*f* '&_ʓ'~g'0soMr'GX[f ДJ YoKchaau6Z0rC8𻜣aQNA8r8[|D0$5.˜po=L-Bߕe7eDB .=O'?i\B瑻/0%;`@37%.- (R҆A9G(O&L'ڠ5aŹW/+}s}N`DEF駩*k7颉7TFi!fU:B 0G&!vG]MMmV|޻㸻l"nB,C1BZ\b!NDړH1VkqDɼX"A ";1ҟf\5Hw^ n!g(Cs12 5RH}H'q@*r 'RDC&pfa-s.1<NHToxг; =۝?)f8+ |7ւlaHUF+)G}>s$s}ʐyҝ<5HU(c}q0'̜c|橘@tW`Bح_K> ~ ξڤ ݇Y,u:9 H!d4jh&Q G!!ˡ)E>/~;no [t_z|OpkBS{:/GLeۻWô^]Ag8wn_^'k@Iwݴ;pvVV{}f`|?&NOˢVS~Z{T/Ym~ǩ m5:.6TBM&|ccw1C2!rt2!] }RKIxycO<'0soscO~?y곿?>zzZiē(SAJF;ߣ]+sXѣu6QOaT 7j1|OMa%Ɠݎ~ci#I 1WRvS+ޙXziwԩS[ovY)(0EdE\pn a*Rh dēq;i{ZNmξc;v[|tj;뿾w{}@2 ?L{?f҉A0)-Bx4bh?5L?H;~/?7Fn߾zpK !FHS*Fׯh{%Xm HjnlRB̈~aP=ED`A3oGX^T0 4ݻwoV^%~cvhl` z;|˸1&jJk}v&)%4vAA4'KqOb$K}V@PRcKzO uG2u Fέa,@vaC0ч1?#z^<"|zl vƫX|c(YH'b1lsњ![B+VT@ޱaҎ ه`e 7/<*|jxd=#lW;uޡ}a(l,fvnɻZ|ZL;c­:| eI˵gtzg~N u,_HDTFO(u:S""~qݹ}+:J][jO9[gww03pX>FYIor74PSU~kT 5Fka~P#t;х(:ՂJh@df|m?ڂY~,f1> BL؋qDBĹٹQ7a˗Myh':v~ók}׹U3ڏ!JeƬZn YxɦWPYT$n»#)򡋊Є֚%ÒZ\a4'"%HȔR/6yȝ_.QptGC@d/`zl>B y~kItl/! p/;1H2aRXC^Ʒ f$Dww_kgxxоKC;W?Pf>$}cq_Dص`F@fGCj^v0ĭwF\@Cj ℠Ƙ\ z ѾM]?i(uop4 Z-Ncm,= 2d"MNw{OaAy9HD|"uu*=PnJ4uDCqF\d@%ǰcOL 3ϙ"G!t'(C3.ZH < +%1z6O\#CϋGa^^Y><"g$? =JUc}.S "m·F,79NYWX kmlY;sgF{T(,k@^\^ | $/`M~"F uzP7FZ[gX$pjtfq laxXa"Ѓ]yT"yڦ`8P2^Nsh : |laJKN֟u,'e PiXc{n` )#wIef8l;踔<)@12Dc1$<@вIC;``OtTBd/WA/yxޫTo/rO7/4S1ї5>5~?C7EdC"Jxɰ3yW>~dj.?'l戨4>ik0WejTġA' G7'K2[tIghHc( ʓa`ʈyVysZ zLH\fkoTrdv |b V< Ny4XCc%N MD? [n#^rHTQWYy l?K?(T[Yd%ӫ.^}i>_Rw^>B  MB Qv6zV26f$pפОFwk;}ӈ0b>"iǜ Q!Quך>V(' LANB9(D"~{3ԄbOz~B2.~3iʶc֟YIpH![,M :4d4 REMO2Bj KlZ6e|NX;vKQD">B#ZkTm~uw?{?׾N~na': S!_'%cFz3#pSj]|sx@\_n)+d3c@GvI lFcaH6$am> x% i A!C'/O oqM%ZbY~vqހ-d)z>ߟ)m@3Js3O]΂bDցA-Iv}Q<穒0ӈTMnb⺰JE>B.`c8=t&*W\&Ø,Qpv֥N}uB]v?rFҏ;R&8s\le-Dlsb'OER_Zѕ~(LdDL١&W0D9F[?&K(PV`ǐ> &y sdQ|3MAy͂nR^W<ԗ]wYSQ_ǧCQEh$If2cB)!%XFL\ cBI LNq#qV.Gph;l\ȣxYySO_/$u/ś(Ue Qߡڱ5]nwB/m|ta@wΌ"ZnϩY;pD6[!Hy&Y -ڻ~z 9p <ʋ/xig<АީY2 8}AAwg_.SVT `_gl *+8`.!-tڭhӊV>BfbYY a֩رV0w Vu;ճZuyI?_3N u?`^D71 LTg^ڲ@\@*A#6Xb ܼqmwgJYP~;mܫ11voa:<%i6)=FFh^~ 3 d3I:X0TAJvÞކϓg:o-BFbre~gLm]ﱹQZBIHAPgIjB%%b!Ux 9!B݉<*H\0ĔK㣄y_R.6xuN us8;E*hOH{̫_pp0dxZ@Nq-j~4Pڡ F15VYilH]9U.//{d#Zp ,+QLA m@I@0t^78>n<*QtRc/C ]@KS d9/<1OY_!19HY!(eaE3j!ϒ0;@4Upp:o^\7^Y]p ৎ@9<<fn1Rr"g? F 䌧DbnĀ;.D. R? CU Cr琸`< `YzҲzǼtlQ48jXNམcf'SK"g!FD? 5t݀AUE@!taR2UxAa"X?6;v:X %qemmrNo#uo`'!*~ /,ex,#lJk與֖XHehhSO' ˮEι fS,u@S&)2Ē (?Ʊ:}DBLT_y Q&D]01[D"BtOi.n&)+|W`XtOB1k&@P;-X|IC쁬E lbV`fOy/}T|6^L.Q, ڂW5q ė6Xa)T_.kk#@p /b|Uf~t 0nONLoTGi^D= ,6 fJ?@1F(q(cF9_^9@dd>NʨaLg' Ta RSʯ'3`xh"[)QCFAb2o0b[vCdAD1 N?7*¥| 2wT0 "a,UeAKuR^FzGG/Can'A!يq' myJ0 fi wxH0A, t}JH$Ȉ ,S6 2 A3*NW0Hx~!mDZs6# Ðџb ꠑmdUb ֤QB!0f`H# $@M6ȼ4'\h Z3݄:X0(Um Nϩx% 5GO?3N1_ $E^` tLoMi\^'W쀚WTu& n2S7~pK3 AޙE""#oځ %hS& " U rɧihD^:w.R87Gl@ u<|}Y朞=c1o x8}',(0Q 3@%` /EZnGTZ|>9nF: 2)u`Tt)]eWWǸZE\OԄ9DžX-;IcPZy1Xl8<3G}zr@IceZ1P]+ێis.@UNYn;`tocd*66 I =fP@>D#^U$˜ Ra0hc! y2ʄC1g Vqhyn@9#V8PG0QM9[N7xh72ۭ6ry#i{?wMC3Uuj ?EK> u 6 *}C@jL{e6wڈ::d>) SKp8G)0uۤ e߁+` 7.u67|@yeA3hn_7wԹhE[gR!htF}GNQXj6F А"u [ 4),t ::>$yJv> %mC{Rik_rZp!8A}F>fEO+Ј :{^D ƶXQPg.1\ÐRr1>xLsgd ReOIL@rpVdP >ٜp{0J٣.YQ[L u6c.|ݶ/h|P$毴;fwov$Y7a~D;7ށ؄3qLx^hoΈoLKQQQR#tN/u DwG긵 Ɔ'|8fܷf*)e:Nm|ґ@~qLO,"rrΉˣ7mvR<h{R&360af[s8U@rDtu bLRcYdvAaV_gDX뫐V-J0ZoAn o0#go|/6`&R\PX$q^4z+؍Y p :#8Oy:Sϒc51|-2Yl1)5WW:ǝr el}My,Y2q 6!:=tj 41Qz'7>džs-7 2`s=21ʂ۷qT(Sv0dv Z:*ҖmWcU <IcPcA?[Elţu&#Xl)7hns!x 6`d5'R_hQhC3ַ" k'qͨL8CzjED/CV?g GPdjg4$tPܝ(^W!CF8 J+}FEұv9B{ CkNhk}+zu9lADwM bN OxE$aDd,ǎI ZC@6I_M8?R<4[;;_#p}*ߵ_Cl]i3_y_"ۗp,@{zi&rO`,q~`.c ur+gƞ[xdyp}Gfh 2r N>&UDށ?>[cNcCM#pdR) G%wըnM;QH/=Xc_b,HM3a(e` LuqPzN *"_v!%"}& Jc_r`J,o;(D-I=$?o` d'%!X65|k9&$~Y< (xqCgNc^X Kmēyk@^X7NR_a#eɵ C:Knq`z-f 9]u%^QF(){hXcUڊ XxsW8!Ie:Dr#;af`-2#MK: 0xnG 3b?ch'V :}J<$A_p2_ \a]bcѧd٤@h,3g3?A!xH[ŋ^o짐JLk8KzȖ3"z ClۀXt=2Μ9s`]9؇|?Q@H=o\1^˴s! Us9iZ봌̓ %5J o^{do˰:#EħȁӢ_ʔSp=ƈPDM7E/?[lg';Pӏsx;ݬvHF25َsү`MLnA.(`3D"NS9rL mJk"9w%N V=EǑ @ɭ`LD]@Rn\ } >|~ 'g*VE&p1Iqcosᇼn9FB&Y;S"fm+tLfwN@] E&띭:'GAzWEEɵ|)SUbo dLv3Ón63'eʹS6̉YJ2Jh )=Y" . SxxʊFT휋+QaXF}@}P',#G/ D/S.|cVy|x1cf ӗ^`O uHYNGa<ƋX~j=17> D=<)mĉ!>]ÒyJddv!V_3\V6km "% ^%ԫ̹EVo"9nWE7[)8)#<Hצpe<>Y ,cczo:[h=F~i?[Zd$Ճ7n @I9~I*-'r/أy4?N ܻf/̇ 0zDܡ&_"D 'g < hndStCkWZ6!Hm\$~ًo:w> كo{ a"L"4M'S9'^qZ/USO^C+hMJ&G@Ӳylto߫c՚  5"Yi\t։15LsX g8ocግ#f45@ B:K@8i ΁'&.)@ry[:Vͦ#wQ?HBd(B acĪL"JitTy8;(Gx_^[%׎ŷQ麲uan7m QH^eOQu6Su 2%vX ^*l O—ޭˀq,>S%LdB1CZ$M9P 'w\/].r#E|!3>_oa۾d1Zӑz'=~V+cjJtO%mN |-bWO+ o ^ IH.;S]i_s9*p.7U^s.3u |^,<;c=ma>Vt.[՟Ϫ x# ¡_2 IDATxy%}Wu{{f(rDIQeIMs$a)H 82"#Ā 8((VCCc!-Rp~|>sMOxӳSNWwENV ցqg d ;^nWOY{;EQ-OYY677e==nV+:;a1{O=Gkf d HW#}g d

    a@}@f s# |_l~ӟ^j6 QVUwxx8sf;uP@e9ίN_җ|3>^]ܼysVe2NQ6FQUj^jArϳbu>0͋9Oޞ:u旿1 _Sr~'.:A&mS0n>sgyfv”-www9O&ٳgRЭC>g (M亮Sfi?*_7Gɟ+g{岜Շ90C J߹xF竲7?g\d q s3[[[ pV(Ôҧb88.avF=vl>9۫zƍ|Wo(|~V#Rpiu_+=Lwsϭ[k?Kwp9S S{RLNoEF(kUB8Fn49$լqv6Ndzʯ+mryy9lxv0(Qs~SVͦ Hga7.fe4m%l ؖ3Hx<.\!1_0Cnw}撚r:ݚfg=6g={{m++1ڼP5E1ߜ\_z/-Uh#<{q+v>ڄ/.?-s^@@+Dx} \vvlx:+ȶkvwd8|z<<|a2`rQne98l9͊7~?.}^U<*Qi)vj1բZ0碿\Ƹnh7eVgj:悵h|֏L| OtFӭVxʵfSv:^K mΪxaSƉm@+k?SkfY2CX(syl.m~yN:LLNFj6k4]>ZйDmnnw^*$7A1te6mrYp DdbuB۳~?*1WX 54sq99vZyg'RM?Foj446}S@)W$d &Tn| `s *R*̦ 3_kw:n2@]~Fk6:L"8gc}h EOziy€^:OGc$QH/E[Zh)f0 ŜY"X"' 9l> Zp ʢ n,~VxQ2#żݢlZ0dO}v]@Sxĕ+Wzx>]ctF9,gr)S S is2^g]׿;W1X"oȲ= Uc3'M@mp8p0s?/|2 G~b^>3ƑH0N`VEAɁݐ1!:%fG&9$ML9m:tUtO`$@*}ؕ$u8 N[@4'0N۴ZOaZ0,=(u'8m$mhzqai{Tڶs|tuarX.sJ9!]^2C0?=7"Q׃Ei`ȋ1'S}NyF sSm_mu1piq;7Mԧ>CI| '@u@p3RMlܦv(G|)KHAM><*&û?yq (o8s&-VEoi`} 6m8>BuOQhT(X *~`/_z1؅ (:a\Fx?@!#aL2jh_`_1|*gq)4fӪA ˈ)SNyL:1PtQ <6sCpZvwʊavZ߽O&Rtݤih׼1U }&K/nƩj>yp{l#EOWڷ:&b8FbPU)<:#mKռ p)be@0rE)/St C0oI0N8ɟ?*2(v, R``UmY«T}C e A))2@UI6Cz?HSm&"WrD|h2<{oPNϷz}MSnA8ȹe___:st4ڜ&KӍbAs"Q/}xWq:&IK!~biyXfO7^Yxw{b `_ 8 V 70yn2D C;L}}:2.W@Sn 398yeh&'8'f/(S@@P 3)p|D*Mq^#.wj>N!#M?s蹀}l=W/G?:ASV oЁKSj,Zӓp=an^B^|_ X10;8&dW?>> Q4 ]7@_: dǢ~?$Nϋe0$`@/(t:88qH i'T5wti%`r}& hhX08&R2>u526S{xϽ<E]! h!NTu%@k2.zvUejۗW]<.[? *>ھQgev=I"yuf4A z:q\O}zC TIݎ~34ȸ~M훵j k?ib(I`路_'V@` 5,A3c&J 7np}9bBR?b@ #կ~7b#L2zy6d.DW&,+Zx·̟ClEM[1Oo"Ո_Pâ'3GH}ֈ6;pTϕY5@'@r`߿bTU `淮q3R`qvh։(8_ގ%.o}4@`ov&WAhn?L`=,qV\ iI %fŹn4 mq]f4ɧ2yyHc_ ,MzF*T?^ HѢ*kQ<*jh=q$aIdeKCI Fu3@Q5:}VR^I >^e\j}G}o]ܗo5EmQkeHDAY@oQ6R_#2J~h"-ڱ]a6j4'b,qUXM5ߧp*dkFkj} @P1ejF`Z)S}E^wP~:dv|Ѐ}j8؝?6z.Y\B 5:'?*zԬ0⛣WU-}p8b=}ơb_ Q`"^&ڭQ7?7 H1~ܻcRvЕ4 2Ux>yoHK~Fգ?F;agAcJ? |[qإ̃DQp 6^9Ƿ>V ؟ ř3g`tc U" @i&CҲ[+@NG $8?~j/x<\:(C!̌RdX~U{8h٦& GAy Ύ^HPaL %.>R޵ѼիWT)SKx/61(3pDjt8<88 mU :R\LƠe)廑WC.ME[촦 F>Ǭ~q1[$'DN` dr80ns4IG&#;6CU9  p! QHX;Jn(z&},1 ؔƑ6R;4l a(ǓibL ҿv=.sI@ "@'j𾷽 xFZmK)^uA~\>s ԱhW-D "pbT*!7Xh`MOsL:u*/\3; {]晼EacR>jd2}ev>Bf]p\/6uzsZ "`((6_ƣIc+8FN"n˫^23V^5^uelM?8/|\a-;jvw#_c1޿QV+SF/~B!3{S -֣woF?׷oĘ14HrL{HA} l@} ,.$6X_Q is:MDi1f@s#C \!F+!:K07#h1'RbBJ8xoP 3gVRdJڅAz.K.O%yiK:dz)܆| ֺ>1ɶ< 3c [N&y8fg{!LulV:騐q?NHjzUm%vsV54* x3#9|4 ԅmL5L' ʇ>M߁ڇکgҷ,cZ/ |X6ؖXȞm o߅+ < Q~HFYHPB-z (6Z^N d&A:# 4,1M@pB~UmL xW(&մ<8<|P|N%8/ƉE&×v `(.\I89SDVF @ZikVո pXFR5UJ悐DC;d:Q FZwٜ,]Ru^sA_YhF )T+Y==L`%nU ӝ3 1:ѦcQC*Wӡ;%hQjg sZhd**4..D%b:"N,ccq Z({r%:M 0'UX_/ud-sL`{hă(}c.~/|))@fޕ-_z=[S$wS-/pM6Үj}d=QIƄv[_H]g h@CMKUF3 kS7)Da0e@1 &v#ٽ.چJSSA@(3ab 1&C⩇"G Բhր*(Q }kZYP6QC[aX:4氞31/ Ɓ"Jxf1yYZ|~/ovZ-\fZĨLw#2n|kyRI1뭣: Z[Gey%O%aMknBC@ҦGJetSKy һHݐXYa y!puT?}5qzj_Jjx@432%,T 8ذxBG ByCz6pfA ׌=PG8J*8d^8Rv/)XGgEh&N G1 IDATٳM00`{{;삸Obd 0BIA)hl5>V7cxS8Ĕ9D:d4bjxt]pi9AgEw%]$@6GcHޗ`bՍo]v=HEz:i'9X*`"֐vw+Ń&,O*_ v+W w _p`!ʳ40ܻD/)\ylM̋2A!&)P٢9k:&g>% `>c~@s @ı:`E֣rAS|I+AY~ `-i2ipS>"* 2o:WѪnќ-@٬Btd (KSxk)`]&PY$ Mfryj`CTO )DM}5Mvy@QWLͳt툧\ !{8@,`[ Wd. ǿ@cc  3#Ў并|Mɺ;1S=g.3~}S?Gh`K&L\ 5-j(b<t%ǿUy6ck9ئZHm dz5=,߼ !A)@fU+Wg>E(ncxRwiOw[ݣY5\*'8p[܋/2d%8aAAk2, o:O˴Rwx#9k"D=y?0Im69@j~YOsi3ir1e]e02Di\Gt)r B_ )eP93p|)$?L @-o"Z+`%_Yt2ĊЂ\KMZSyb zpka0W5Z11ƣa9F#%(2GN* d]` |sSʻK!hjvl J}(Al=C4k6Qƽ\$gyIMv&Bz msw@UhZ>MT`MUjTf f i~"6Y&]k٬g_E!2/t2`Cj3Sg@vttd^^ C3BU%~m겭ΙԿ.#G F>]:7:U]n4\ث 2Lw2yWyo/&uc^g>DM'TeL 9~u~Mw`3Ut.gJLر HS '4M᱒omF(1~o 8> G} YPrhwN8@@ p ӝw8cӧ=6܋6*B!/#T l|(ؼ \*@#6<1tc0`v`cjC]OX^zK?Eq͌<>22NO/dL^{lvGtS;x罓<icOـ0L6xz\o h{(0aPMR:v}O#K0Tb׷@? dnt;O2:Y7$i\W`4zѾ2{@ %yǥл,u`ʑ|n9iPCO@Z H- Yb ;=9 ? ӀO[8BYtrDjc|p#V$syаj<`;J0߬qoDApLi۱}t.v`ȋDM^D"CZ|z UW i72` 96}5 }4j`@@oܑE67B5aOO(kiKbltӚ췲jҩ6}UP%w"/+-z z{ۄҿrYxa^#LQe)[\Fut('`Alq/:n; tcLQW&o+(Mg | Q'@J1'/4)"<>/v(p9&`5k?PŦN77w{pH[%x#2%MMtAP e1@I^MB늍: G֏$Lw 2yy H>{IJ-ExDhN{~衇>m)q w<uhL5{" n g"V]VP"U? )+F(]FPz~YKn?1 i[ؼɘ5ڨh+_ f**Y{&/H&_PuXQXoE;BHH,d c hbHla5Kt"8(qsM`R`Ld4 7=Gٱ;o x2GZ߾58+'!4( dVNPye{ y6itL)9e } G׾cL_F |*}_/s~tOJ98lvzn,;HYp /|6zw+>|qG,VS+ 6vw;g$З_tC ]٨GY?AlI@"ph|:#j(ϵ|,W@>T WU}K~ASA B^ICS(%3-s2a=ӱv%R4IMVhH`1Tw %QQA7kZh bL?vv}>enl]6 A&ڀF18loeQjm\;ִ@9;MTgOwٯ2sQ4Lx[Ȟ;}Xx_}mw戵_خeyo|cݭ34ewm2<ׯHn8uHO\|ՅI@Aup ЩCa(Gڙ]'#ʺsHdW:D7*{ !x 1`8Dtfz(VЖ,%vǧqLul_ +g87\8(ː|nJwJu$GyjeW88A J4-Bki6/# Xƍi9f{r:C;H (;cy`xCjPZhwQ48=&\F׮]/pf{XrjC9e  [N[I`}hmJx/ҫ+ ?f4[k HOɨ*X=9Z?lʲy2M=|3e$d߀q@Ʒo@Bð~UF &V10U#{ `4  ̊<6ζ) k I4f!QekI"W2!̒dq0Kf/McK=cQ(0,/Ca 'parv%]/wELfxU?tzrdضi ٶuX3mK ̆L|t@4,],--* b ݞz % _)SP 3̹7nܘ;w9>.z'uOw+nw006h<mku;?$$5<x@l+ R`s8._5AEIkLJ!Z9(I Ž ~*|2&@;4X,bx(^20H`A;@B >'Kj@x[gUp$drN296,Vى#D;@ "E5U~`RJtA K]Y8ep(Y}Wl=##߃KxlKfM-UdN7$: on \λaΏtӌӜan@ 2`{y(я~t=U$&2[KW.Rw)07SGNٯFϦt/HwN4H,}řQUŇZ_I4@+;Lr1N b8q2^JD pͳNEd5u22ǿ}Yvve$OHkĥpQ dZB-¾DM`0ZcZ|0ώCȨ`0AMmW͑&A 1zw߅ҽK99u:(Ô\0ᝎFhbA+,2:>KM^Nm=p D]} 籁WNz-]Oo|N0?́Fimׂ[4:U:Mǯ8Q)/4Jj}qA%!& Uu[^7F٣)s !2v&UҷTU/y;OV'C:G<А19yxava}v=K,D%R9m3fb*#Cen`؇pA-Kvx;@#t1PX tsjݯ_mJ 3><ѧyo@ʟ1p_s+z|z=/9{.yP@QW571/t22y(44.cӀQ#bdg[f>c\րC l~288xٍ@P 0E ^7q3@B<Rqi@28ȓF`T&Aں msg& ӧi{P"k-B{nӲg}|Yc/[ߏ~HҀ:%b [ؕN`c6r%E/.+֡cþ/Mqς`xdU֩tMT']:y9}3Іm3hXNH..?8,(4y/8>8LB<2NPM7JR3 Ǭu>o/6 'D3[.͏,˭h0&`9@?* .{'kGuRR)GjER2ȅ"տMs K:zԧ |I9+5 Zvnl'osj+ Gx @Fw;u/Lcڟ8I<zIJRzb ad}ؓeQy. q~> , !cۘ)5y(PGS^<׫bv3NjG6m;lGV>WJd1V4t ~2n$Whvt4A:bюuc%΃:j:p~17wo;G^XWl0^M>3U%]9LKyZDMȓׯ__Ak'Qܰ? c_|8bC*}$z#E^[i2o+b} D:  {60A <Pu#D)/ـ$}Zdxɳ̂|APJ|O-E[ $|,KP@Dcީ)c|`wu)!-KXELHYG Dnv+4"8/\2tk"6{R ܯB.۾Q̙݉ʂK@ 4˼73F<0Rx=h1xH"G]Ҽ.yϟA_?><ݾv5@kӧNHwwvb shy m&%|4g懃^ IDATwr:⹅9b8/2$˙qn'u9d,!/42Q.i5 6ڸL'&pRRжXa4'I=vbCw\wBKppb HGU#jk0@v T#3ǜ2H;zPC}gGdhA&&{4Y?~g>s vYnHLj& }x҇JOgv_˺Z@-R.`q8A-a~8 >}x8{q2yg;:'ϴmӭ3'T]R,&i5 !I;@28BbAdE٢)tcKcgs}>JL>1fo.bzu=JLf5X6q ʍ|HXn֪^~čY'LHGbY * /7}AůCkeMcppU!_z)+'Yn\%$CA@isakk v{!4zZ\snvj:'\г]uQwTv 1ڈs\dySI2UzGH"#UUXdxѸ'0Tk2}U8 }ohS#S)ٹ>uRTguRRD51 5YjΟ}m;. :l\s7AZ nmt:oOFA60e{05fes~(%Thm s inmؿxqllzhXUß{vb=ق/ܴۀ䇬?dcM蠧F&\Uh32G9f3f9C5I 6Fv@`ljNd˺^}[Qy[ D4@xLs}$Θ;Љ?uĒHtu!}qlw[}ʔ !; AU ǒAі+>~ zr.1 &xIKѧ]|='Ī7PG*7)SMS 3owv_xaXe81͇gI[nD|3[ wtNK/}+op&l^3`X', BD6y0 2G\x'eb˞̳sLu=ϼ6:bXd+yhOݺrS)ܶ]qG~\uRS/چ̝ےC9`8 Apa°@( ,ACyяڼ; 2[ 14G7HRSZSaM2!tbmRݪh>*'-x:t/9e i dM07vSﭯ Ѫll9zW3~C*WP*>†;Gվwf12(ミ y<Z@e1A^ս /ALhQ0N$Y\}ՠ(ФiЕ}+.Xdh}b9ư)SP 3Fc{lb/?d>}ra9^+7o<|;m4foo7z/ #o1Pm X=pdBT $x}AγG]xk߁'-̼6v}gRxls$nm$>YkWWWAEJZm@! \́䟹3 "D{~H(6 Jv|@w˦DҒȔhZ6fndЖq։^mSW_ǝSR 3J\Aοjq3> |9Nuҋ;?BeTYY)>̽bkkr?ċ_1Yҥj #W{m}EHP+655p ,&' tu^RIG[munRuvj.m !7ٻ+-\ *&k& r̩yH`92c&h?68MڡN-K/uBnD}g]."fK7-7c)q%T7(giv,b1pUN242Ix;(suO=U 7 pw! P:ͳf@׍]Z ޷!kkpl{3VI0'fCg( u_ t`]̷q?<^;-h[)eRF՘ꝬfE>D(ދQzkʉ\aaX(@&]u98&ο! pCL {Pp@{`'ڲ= $K/̂H;ڏ*kS $LVOΣڝrs}Gzl8 U$|$O D+&HW <:$_ OsA<;W?eKmle* *+ɇd1`" x# e=ZN^3 ~z7Zq;ՉsFE5^1E[strQ<҂@BsB;F\ިħ\~X0DzAWK4P;6$rh"&8c-㍿`H0 P2O sUly XKVWG~(6r@CG%i (e?e/S@fso9cO[l mJJ 3i|w5?(w=C]Kz*{RfwU~ʮ|䅓v8 Q曖RFH $_}jjQmq9zNzgY9eh{Q0E2ϿӂUQ~L %uG-T᭚%W<,/$D#O)WF4`l )I@C7 p60h*5<\^jQte7KY ++ݏfM=S958eXľ}Z\k,<͔Ph Wq0ԇ[F`LyHc%I?!Zb,`Z.{G ~Ϻgk7qEEJJB!:w;vd3lmsos2\Ƀ?KjxoR=ϩ9i0O]GpA9;TT eH11&vJ06' t =@^ϝ#Ra mn _`@9Ɩz`&GZP|~ &an୤t5ܳ^ ڿn~w9Uu?Ŷ P;YUԬ͍!nAْ?gY@FB6@I 8T~hx$xL nI08nu%׫[9yZ+@M깮rY)?\-$;X-֠ ?a85)A$&{V"cQqws[〰2]屺=5G'#0 -ʜ$86&}he}@f)sCVvvvV>ZkweUJTxk|L]s- aTOޠ=1 +o q Y&$O},S<:2U˥yޭ[ (M&MATAڲyIHx&z>1~nU i>bҶDWVhX% pA-~wrЫ`JeXNZ0 VȐc;W zwi'|2-ǰÜ232p 8s Oc>8<8Gfo TOGHRV*,Ro.vYk ?8O!QݦĊO=!p ~|kNpDÁ0&1 wc:Y2w,Wl>y;cL}/:nw }dyeGiB fko;^*&vħZhf\m,w4 @4RdжpnI롓eԣ5o`W_C2zz$Q0W[`#]Q* CGO<rxK){ŋ?z5+⋻n40߷Kun|sz>87{~e]g{AE~j@VPk.Q= $:Am},kM }(A'ʚUE8yZV5},_!8O"K0 /إy%qS7gh|&W\,H$͋Ejga8[D-*$&AG5h1Vy ~o~ok# >76g@K[U)02:%kbz_|} RRe~3q<&ܹs)S){]Qϟk_`%iv]7t{񥗊kG'2L+9\K)m|v>.^ m_̺3 1CMqW* I_^b0FU24e'u]>[u}yJVbn8d&Z[ŀ=/b.K2Q~hC& ,2Xȳҽ疘xMY6EzA&Rvbh)QU#0)Y p@ m༇Xf85D>O;<[0=6 0bzgߛP:c p;`iʑo0+ӽQ 3F\MRq^8 aM~&ǖ[Mf*YS  ̃} pJf.h֪#P )f=cNב`ġN LLc_V#~GcAU&GxQ I:I[7ꂞ>JiM*O< Gn'z')Ϣ}N׷+DE~;9ǕL F%1u5+MDd>#؏KbSPk1|,z&u Of |38=j>e 2pOd˕,^~凑 IdTנs<>_i#eu5v-kZu,GC|Ǔ$3@ǽ!WѮ8.7 #6D 1ut,D ɳ[멦I}~#uN6TkNu/y{f-(jU5,QE^8Oy4Ym Ut³5W gqJ"uBѼ-1o9&/ӿ$ *1l3Q Rv,8k6GCm^ka濹~$s٩ͤdNHxjW]`+8Bx]6O6 )(7G\)05|ע,P-Gި}mö.y/fx4K0t =&,_Hz8S -5g/$צ>7^y2ܭs 5R#"Iu$pliRU @". HMt[q94N%4 A/L9O&xh7չ1Ym \x}ts-62 sBALfpfSשt)##ЅNPh;o/+xKȚWQ@KpV70sT@|8Q, WگZժw{5d g}B /$QTVVÏg;hnzjmp u'-'6zo>Nֽ7@j_1#d+Wyzy2PAc x9h0dv4q;0xoQ*m\5)]7fQDvy]֦E}<~~&Am˗мҋ}KGU(@cJHYp,Q%sx rU@-JQ]q]}iѭy>bTc@?~=9qTpƗ5lĀ< zUelWoWi IDATȏB盦 lV¤)ڡ=0pQnZkP`L֩y,uf@ҼH;{XAO}eQ`w;752 QʸE毢AisۢRH=dbAF[7@eL< e|m$eg27 0|98[zgur; ~ukІp2uQ:ovЎy:#ļe\BB#ߢ K*aH~ڕ~,ߙ;җ}sTNMq lnvgAzr +.Ϭ`|x'/x4Ji]Act u@&>~|=l/TΪoIٕYAdz6nD krL w~KfN2 ^[V[J I;^3`H ,c F@ޤcWsTmuK4b͌>` 57dun@:ɡhWt AO:]8Qv{fD5h6gŝa\`AqNi3ݦ57: K 2!Db1Ə+Me؁2~sjF;o.4yq'V+i:1SX& 4KJ2fT:D)C Șʧx?ƞ?6GI̼,SPpძjYGGRҫwrJۮ; zWrG+HkPM`}=G[Xi^ɐ|R-oT `)P0Cxkd~rť -o`Rx!s>ڼui96ik{ F]H4llܨɰ;hx.`j6}")/!Z, f:L[I4 =] nrq?Bp=:hB8嵐c*N'&kYkE s#Qj^lHB'3[9hqdBiSjQ?ĝ2$BphUBlWÏOӧ7W|Gw_V> dྐ|2 4S|.7[ϱ; l=nߜ}'3r|T)TW5qI`Hq$0fhH3C>Hn PZ'-Ĵ_S?`?<\Ɨ2ʔWn bi!)oyQ3^0 k*{˘q2 J|Ʈ# y -x3/9 f ֯ˎCex$ni[@S@iה!^71 /w1@ײKqz )W:nm͵eC0 f?;¹^9F@FFRvLθk߸S! YNvmL9YoR"J- _]]п}ιUl> N}v \^`hvtWkIpe22pHmT7shBRZ?ґR6V1UhTNE|sÞQ/J~!sg dI+&6> Au+PC(6MP4pJTZ{_?Mʧ=p~z@jc?& #XL-@%{s˲+79g֤OM@A` A ,#y80 kQJ5w̯J%E{{Zkv~U޳0'iPgs/ɞ/{`!NoT+Am֦"E{X?zc;Y@+~Z̦@2q *ٳ`}F ljj .mZH܎gSm{15N0{C:){d&6DoswlZ 2lK W?ɔ?پrʃ5A]~}RPg|..F*9`7@1j̩al42 V}40aWL_1ΣX*UeI,,% ;k\p M4% L['v$60 2h0R}V/hv>?O7oŶX5qRS7Sf~3m'/Lnw< 6MHR204&YAOigJ~/vr+Z_llM;5=Zڶy&-i.";g (̅;`+pV'yn~7͗twVU\/zmbڪNƅRs4}6,eE46/}짠3 ܡ'ݤU#٤fkM\1;؏K<gX]3eUCR@fdRV Զ뾓!@gm-MQY&vޖ6Ssn!ܞe0=vSFCtJ!Z`]m\o4'䜳tك^@˶u o^4xw_[nu1=;{<{o[GMWQf^ERG>͠j\v߹qAd?T`\ ؉Q#(C' #0)*x S/+3`VAc-]L{  p媡eڈ1W!='l'XUz2ò=6n-ޯxZ6YtiDIm+z:i@/l!)gQk3JG\ĥ㥅 U6ܟVŽ yր' ,9֛Qw(AC`Y\:QMϪ̍qy:(m駝vOpiPeq@Mq%)ߞ'V{̑;6"HYiWfV^{,d:7tn, C#Ҩdcw[%z~λ4fJD:QEU=Pdg#n3,X:n:CSn6tl.+9yGgH,=S` 3A2WR!РH):If h|~~$=, <^,zg.{nA3KCX08e;LN y+Egqy5j\1BR9+]|Z.\?oX?}2.3QP#wA;gNC?]͒Z d@ HEݰ!wtWPpą{MOMWSf^M:5 y4[P*GUWl] Ds}t'?߳O:DCkR1P| YlBwoW0[K g} ~Q@mb?,ONF"u~Y-pG9< Q.Q=Mqh~xz1n,9cMG{r{>N`GnscB3O!)uq,C?/ ʀJqZ+ d\Vwk1%}QӤ F Btn&t>0S6.e.Nnvλ;.믿>bCW@|UJBٜ7LԇNlNnѻzR 8:ɡ!kE0`I`)L0̧z9,WtmWv}5|(9IKiwH)0IIzRuV`-`L'V髴V>v '7*Vy ."⁑6܅[\46]א5e "F1ӈҰs2peD8:NG Qh]7"F|/Q3elR!. /%/1KuGLD{*NU};Tg3)l[y氼vsMҴAe0>\hs .d5O{!,{j`RaelCH-Bh\'?~ 룦K)P3/%OE pt2ѣ' ? :GJ{IH#Fc7db`׳ޝ6F]qOIK1'6P< #Q]!P&XUIMN`нubp܂ VI[t^%mOU?{D4OI[ϖ!\I і϶h{:{6.h^\ S%x^2U[F8%&h-5 HBF 7Nxuum !yvDL %`gԾ!4Ə ?h3HWlgccĕnA0i-4ݣ~7bπɓS@-5.4G-gR*úp<e9}4U.p<ig[ Y^߈vT[1o6{b;Bw>L?5^Bx qG̣N~ʜNJJ׳0F+ DTiɸ-K'N%pR){KBzU $BU?Z$yAE&}_!P9%@A_S4]߫]zTz8*AF>gnA,Of2t6#~mւeIcn~%Gμ3I `;|,T/k}mӺaddd*-E<~z_zH_ܵx5u;X Kڕ} 1&5= d{hC̢m) jB;:ר68\ׇX^`@xG%.<)/K}7P@wQ$}B޿{P? `=f_{cUU8զ%%n2Na>x* p26YXaG :*L\ihr~qWΤ"ӉOn¤2}2)+E*/uq$3X >qpR6Rc/h->)2$%puާcrU Ua۶H{1 UA£gruTgt!@URąC.KX҉?5E=Pi45>flL#hca=.MƨK[u"n]O)hM$O .5]]kO7k1  5nt4X"mЉ,aCo ^S&~ {՚)C闍ԴȚwW tk5QHtXA͸W+wY3#(["E3f{gu6>j |57^F)^ER#DM6O ^5gӈ˵LNNƂJmM׋ 8d$}@ {OI נ,Q۹aUt _\# .扴Q!@P_"8@U6-p }C;j5AȳmAZ=<.I&r0hdp$ƃA{GCi?5ӥ +!! XӇ!SE*ys8zǪpaaƊ-'V^hO/Rh-LGTv\.XeLJaS/m,Z&&'$m@ю [+k0]wzWWi7/^PPjK8:?3Q55do& `i|s"in}:Q( #@AbV`:YC5FeS:yƴjա' NG1LOEĮQ`ha^qP' eqH+qg Z =lükPwVfj]㻐g,1).崝~*} ,aZhg~=!񾡏qx#}6+RGMPf^B)}otuq1##\>#$ϷXnvVt4Og-a]֕MRRB['O3p8QI4!YE eL 5LL3 )|׎j/ ɖNWײ%鮟ן4y,s53GlRQZi-eTGb>)?dy@ T亃јmpp]48LtI#E2cW8s-e!%E HPm}qW$=b΀ǟpig(jG~ 7oܿOǍǧ獏|Ă =\A1x:Vv);u.t8- X5J\nI]v,r X,k NЫ0KYh ]BmEeFd# #9~XQSWӨNqLnXaW!!F`,2(c/:E@h,0Nw}+6iḁܶfoBOKAeOWڟ*Otm xֆ^l *_z]cWyaUJU/IĒڏSƏ4i`Z~}Ycg[IN4Jj@(D;ڛ9Ui@M.R^,C*k~,{%xbڇr2j_`U<䓁7LF4HEչ8p؍=Ll]ew+s<?n~mPx5ئr!}w”a+⧏7>䓆A~}r{"RT᏷ CflFMau;8<Kz͔vSy \?=99y)J +IT'Nל{14zoF ϵf\ X#D&=3is/ث~Ε猪kΘ E)V-߽~5gnlNa xRCJÙa~۵t_n; ^N%vC^ R[O9q;LQS KaRIU|-zdem2 .weUMCKB70"&Ozx[ .T>eeCTCDىL-E[ebJ+RHO=ʤ. O#L:t'ol.d0F#iyPOaiV%A.}ݲ6cQS%~(pvvi'gz2EG%(`d2M7\׍O5fI (sB:@m$1ycݾmy'ԦÍ!`4KE劉e 2=Rm]d>s-*| ndGFeQ% :ԘК#SOZXE׺M_Moƚ1\ba#c z0mַuj(/whk1$*n2.~w}S]x/6G$xj<@;`?7d&&wC -B jN12[ ]˃ q'<*[E Qq"Fu;TWIJXfAp=p-y4:t#mQ *JڞRy%,M~(|,CᲁNT+5mg8Qӎ<^MoA?u| LZʖqAM5 3ꧠH& KHc%ɴ5~R ؄m^{jk,P\ߥ?Ym9mk#77Uʔi_7n8SM$l3tq,F]љeȠt|BҦX3Rze8[C L, an󴸀)2 ˨S?{)ڠٌp‚lmTjD@%ДkgXI5T_y)@ҾӼɘ/%w\"nEHpr]y?NL-t!.p) L.O #@pԂuFv.Xez@<#O85@I~D$fGq% tH`5D6^zg]245lJnF ə/Fɶժ%}ZPG74M!e., `],=7fѬe ?NY.~*~*. $;p8m<h"K5>DLaڰվ:'j 5J Sdu{^[#-w"]lg,1Qzu8PWp"V8kqmSy~aD 5U'PSP_'~O3B}RNn@gG`PHU%G<20zVnK*_uqU'1 }s3\#%ԝ=eh9iR;9]-TKy(U^L5JyTZ-cPM!hca`&#]C[=Wڕqu)>^]&;4$ZJ18L$e. :)'yЄۼۡ-̧k9#L/s忼G|[oMkA<iP"qɰ ݥ)4jH:-tvW42WaicadT꣦oG}GvZ޿DgwN8`^ÿըh.F (LԲr ZHםM=̌*BJJ|!38Lw[ɑ3e'ȩ!3H?lE%og\Կ_QHo4ҷ|W\JyXN LEp*"'jЧ클nQF-])Y5y1gh࠙q: N.xi)>7;{r_`pJ*?tnAsW-"*a? >Zt?gԔXd{ 8St'5lzg鋳9ƈy+2ӧTIv!{$+]&;T bN?LUQy.51屦n>~57sKf]Ә2N}YqLPr]gvAiViؾG}s5ҺLL"#^ iK$j%kjd.tGl>MYM1XO V: P^5T Ya;Tѻe;%EՑ iFg+( Cf XFp>x yu0n S2$Bᐱ7. ZHKՐfbEkq<"T%Fg4>j 5J S`?X/kJRef'Nc @OD5X'I#ӹ[/?]LN"JЙ9d@jZLJO{Hvv(!i‰V7HX Dś`ڬ3 [ݤEsEFbnr&Rd'+iK{ ۥM&`2O3xE M@Z1v}%!Дt̵#nh@{͙HVϑDP i-s3 }ҚԴxAGZ^L(L # >\fn]<7sCOM? b}&Ȉ;`>*BO(2lksPMNsu E(NmƓ'+ƀv|sŲKXb(krK |'@J9Z 9.1'*u&LYw8-GMWRf^I:pDh3F̄섿T䯅ҕၝPԝ {Թ&7A<'A'YdIJ)Lt܈fH[l_>ްq5cɸjk,vL?v ,1:@ ΫSRh9rU XքI2RELҫ0BdHozAFt:i($2/@  {,d-e|Ӓzj9J Ul[-šR- ʉ!jb3#Z2bͷ(rM.ĈJ! ӳ[w=VKD_ [VЄwg]v/҅P%_(n"==Iy29p6<ɀ F"LVV1F ]XPwZeTy|u֭+[>j \@\#F0*Pdڕ 37wdtJ $f]T,)ILSN_MT.N'b%CwA IDATm;wn{#9u8&恒}DcwÂ{r+?y0Ӏ/_R,)]D|~t$tc[HoAM,yN^zoa9,2 SPR F stv #2VbW z>2dω(3bڌw x#\'π:vlRgOSTdjd<p`,0~7NRigp1570[-ڧ F4C1k]Uv^qȩ@-}Ghe,00e?A yIzjTf3#FB['Gy@n}Ɛ4w~Ck{uc6 Lh~ɸ\1&?F>?>j <@{̠Jť{A "+scϮdbs*(UhtM]C>]Q+ͳV\?<`f~ $52 M׶ 5f0IIXM*l%'o]Qw9ZwhV{6[Q|QHNJ'K3"yIEm{M۶Jm[P1H5:}0h5_qU4}f',KJ2eiJ0ugma@`\ZitwLlrd[&T, Xj%EqJ;ѣE}4d]l/ Wc\.J۶QG a}ks^X:֥i;h_+# !T s-̡'"D@|WQ1 H%R .r?jRJ2'6N|LvZ~{Y,u8O %섈iU JDŽ^u}WϺn l\W2'Ћ{՛M4:iaEz `nt,xvG3>k`fOlL @Pc`9T-&jo6-AnHe6jWǐ¤MP4 e: Uӧ3J`ظˠݓp07aׂs]T}CO4Ο-} $mۏ>SYrd]I<g22 a`񅤽KcFCH> o 'I[KŊe@?#0_WJFhTR|wGfW_^{f%~E Ed3' ! Uób9Τ &uOUKq'bt%*maczuݜo0XU,D{7{ 0aTFP$9O.RȴC2>,[i$ `)}8 t Aoyo.o~?>~`UQS /2 mωI9OΙ'S$մYQ2Q#)[dI%`c!4 NYf쬒Ty(xAW-%[7~ظuL|cԭڦ|57Q J;Y&Q`G?'O  զl+Lt㲯E;:<Qfe L\:t#LPdʕ9z34'R, EVو+< tc *&x1퐁R m/_SwYP $yjH#c srCMK5=}n)ju?={7XK_pೈf{9x8&yצ)uVKڈ]rd fMyo-3P&.U?v{TvgDc;0Y߆QO,Ye<.k%=H2NYN }8GK9G mjq]Xjr$t5e0ayw4_>&IHj $oZḠ'3{ X] %bSLfNZ.@*R -(2Vpj3Po+iu~u;wnl<_KCEc&Qm9vӉQ܄:. 0R'pg:R__t~OS̕ Ms˶OT  Tu '@pbCa!F—VGDU˴oьWS?ˀ5\J~^q4?]8O1K Jv`CD+&~8 x qDc#V IvK ZHqQCO涿bEop ˛^iu,+f BU;ƏJFM$X}/=3?wStO-HvxWp=_3yϰ,a#eTRk`~چRտV2.ddwx]O߃DQqqa~Kh'S7L#a)! \\iL,0bMp;@EZnHXNGзUx anuM7V6b_ !׿J˺{ +pԲTo  v.)ΊA1]K2LiU0^^ m6,=YKMuoXU.],>NJ_=8R IXp6 1~۞2e@#;q -պCxga"b(F{Lw0BŨ~lӡOzz0s0"ݓCW:XyX9Fܗ# #5yy&sFW5LVj4ԣׁ$ej`n;w؜L&C8S<=յ~_C`Tc^_C_DǏn^n.8F)#hhTUN^H|^un`$d, pb,k+R;j[Gc7^xpFe qy(@v(׎fd5P573Ixj^c!cDUvZƙ2u."Y'|@S)>7ARuGipw5uq]<T= zи@HeqQ'a"Z l>@V`Of!\'6:Z -O hgor@ RVX͉m}@wF62H:L':/x7.%N9] Kq|MdbՏƨi$ZTIPw|o1❑^BCCA2aݻ˽Mo4p%~Fj l)P5^AO?I-7Kzg#HL~[s&sݧ 'tڬ;Wnϔ*|2.rzvt>1ҷYkoZ㐍{v] 5/e+}`@KLV@\9Y{<*&_@U1^n-͒ sֺ [̥Cxi`L`2! Umo+A RVlWi7"*N\q #F9iԾ^JИ6Rڇ=tmگ'jsY?Ķ̣K #|=5W&@F6聎Ҭ3ѐzgy<7Md+د)C;c,ia]A1K$jy`B :Ǒd2V"}Brr <1>2d`eϷxB `#)緲kyŻʸXa4E%|s0e` DA<9=i &CksscK}js䨿& \=}zu;g!(( :YLE#>=TuS';02Օ?(alv7nߺv{f2n*r[(^tTK_^@"mG,%\JsOV\hHTbce (2 i%B&AIjp;ugR]Culi*Z>Po> լkg 2lxVK3&4shiۀDpt1D,2A_9a #܎WuQ{pKhB3cyCA=%WT# da?;m69~;X PiѠ LPƑ~LE:w$U*).c8Gwq 4tM .9hN|wdp'CKT߃6c>1X$໱P{9[3jd6y M6%/ޟ'5mv `eNȰQ<~MZh b)5Pk"U^ݏM7>'܂뱬CF$;}O4v" j[m5W\Q,clۿĐ8w-^~LUcG]$|NhӜ 9ES.8u4<(d=YVYpZӨlʩ>f|X#իX#I{ʱ HҟH\Y,Ũٺh\e^#{V.7\~RAMh~ \ ;Ao-d4[$NAL,=0;'P K3J Cʈ,˘MdrR4ԗA)70ep:hܯF&0fDcPҏ.a}^?S;te_y]a\u`d̆h/ʒ,IZc@}=,%8g^˒Y M:ҋuhg;`n|)Z;:h{#%rAFATHTZCH\JG|ad&P`_ְR0PS 3`Hcrx0@ekHSjPںs^\btNBc@r,зhgF—} ||RJ>2%9V<>n >Ic@dϔݤs6] p'Qn0Eu4 h9teUf@W@{~8g´4,Y}_no/ zFdLM)P(Pk7ᷦOU/1Ӹ\ܾH'Kܙ.pcXɠAJ) (J3N`hE-yƿo5~B ֬;\) $(3º@ ds4cv`ƮJ33iK Χ+A57oEs܉׵07 /a:NGw@qD cёIy݂i@iKFUsY%ξnUXeYs똀2?k)&МCG]Xh p&gO;>ĎW.1q p`k^fv7/9]}N< hjZgl 4T G,mL32r'|B"e 0恲#4׽s@k{ ) zuY#1./6Pj.N1zl?9 %nHm2RyB_{$Ϊ ɐs/tj"I^ ,yXiX:v2y2>r+= #+.Cg|(Ofȓ[ DžSyH#Sr)-w !e̩ X>ZzϦq\v 8fO&Q@ 6.G|mVs H>mLL  nT\:\>j @pTڈ@0 |H(H1ԸdXH] VQj8iXˉ*հN㝯ٸ*SG]6`x!.[bFy(7\e2`IϠ>{H=k}iR_ZW۴u{ C˄8S軓oꀶWM[,KikFNЀbcU[7q 9 G0.qɳ1?#-TSch ]hXb66cT`)@w#sI_giP1s @(Ǻ"~2Ne|qAy :d> < Q6B;v}-Ervdzލf?4ڇȤ@;B,g9AXv`.⽗QA;i2ɫ,W{MUBfoWp7mZn?VJ4rm9PY:YK-Ol(Jx ѢHS`JqU6+/dpH ;Ĩ,;ńvvvJ22rz% 4G$Ȭ8ByK9W=AXAgAQ{0Cޡ Ѥ?$hC lm3^V ψy}7dKlCL}`C2v.`bf6c6vL/  AE1 4v EgjcLOmh쟄:C 4[lLC_M);uf6 %zEws}"j4l)?[ſ a9 0o9oSl' AkTʛ r=*LNd 1Ae:>z.&WrFY+SڄbIwſZfY&wۍtGtMȟ0J|6@в:ncM”ð@:q!<[Q, ȳJ>?;6]9 `[# +vl/L6Jqq\@!-3mzm.'չ{We Dvx_֧ƛ{K,CE}a&D4f&AO 5})(x-6 75-^f!QY=mLdh_^4 4%62ɮ}FP.t58Oi&[͡ e*5Z!alv_$9 \2'5K^[4KW4];Py[-(>j @x x5tLڎַ1OP̜' 6v5su?}YTJJ8ɬ6Fz hL%2+F 5kMP0ࡺY Ι)LAO垆^Jw.1TX, 5UA܋tOmHY z$3œ)dwF˛a&xDLM1Dm'K?@ R@76$J5~R>f00[&HپC@}2{j\Fo6a 2KXN~ #+MH`}_Xr`*z{t1}Xł6ҿOxAAw8 hR1jFq] E0)Q9\:r @'خ .nEҧnw=N]NOaj T|=sJW:lv77;U*% e5+ݨ$ԐS<*Q&D%7b=&-gh&n3E1oZғ2 @ +ӑNe7SZks&m#GFd3AO&R,ډV&@ 'wh2胾J~~/ne;Ђ:H߱]0'j$<- JJjd4N】Iq)q0i3Ц=W6vj?jp:"OyGwhQ}dUphC $J~D3%+sB&A&wIM&IM*'3(i}NIʺӞ`l2b 8c#-;|!s3F#`ļK4eLN}Hˣ=~ sSQF= 9KɣGđd}!i^a)^/կJ꣦(P3#GE |Nw_ȤѲY4N0T uYj f2Ns2-D1PQ¬4`dV<=DeYN:[!:j<~fzUJtuWoiޱ>{Yߝ_4N $єcv1~rBK 9GÔX`W+FuX݁k,NZ{uMX3۪Fwۘ p)5Ir="nW4u Pw ]y )v=䴏pWFHd|; ljODҶӛI5 c|J]] pT u#!-w%}2Z EOHl%Z ʒ.g m4d+vnH|,YVXkʼn=J >]^K%f58,`0x7`MK;,3LD+ J'd5,{xڤOPV!|+ڷFR (7Bjna]qߧ)G..r9էg=yǍ~?Y~,?V{wwEJa T.o2O*ٙF} scqHP"5|}9?-8(ĖkLP%; ]&!px v,gsI5&k6&Ymq j|E 2Vc ȕHH'@ [Mlǯ%oާ{~}'>~髵*`Gε&qcj?f\F;wIQ%|?P4ǥ 4Ͻ* 1P2md= nR@EKS8SRI[AL3.k1 q}ڙq%GDPImWwDL'z 8!s%Ѳ>t#Cs\|r/Qw4\K>fyo'}y ׆ݤ+  ֟tKILp8^ '_ZuTK7GvbBc*/ ],? пDS%Znj2&yra"X`V 820L^C:oj>Bm'3BWF&͉^[e8yK~v8e@1G\0@+3ЬIʠ.,B 8mD%>)/>   PX`?Ų.> "ui\qizKy^3Y>A{ڣ8o+b#O*@K$Gu E9!6l \Z t ϳ _Z{2f`vlyon>t؁<P ruץ;9b'9Ѝ&=K1jaZ`YRH]֍c)T$n6%J%[RM5V؍Z KHArِhǑ _e̟g>۝l~U2-Otcʠ \k› zp`Aֱ20zFvQ7Gt{/ύdro8ϥ@%\Y?ngRC!F*1 hdd7M^!%pĀrѨV% ESՠA\ 2St!M^(_/Ex3b? !\[}6d[Y^? <7XU~"#_U|#" 0ڠ.cbخـ)i" > h;2/ǡv%Xqif/yO,!Sf8t)Ѥ._nfq!Oc)q$l#Z̝ܰy,[`) DT@0uq8{dpʳPBtP*c>>4{c'"@ -7F>qlL|> [t'f7یcR !WQ௦@%մy~|?@mѫ1[q,m DdD *&{\hMdԻ\A$m"7Fk_K-ڰr &@WQuӜf;hX̘b2QVC{t6iS~˞q+^`q jR/KN'qP_6w2|&F+pn#PbhJر0¥M >4Jw|d*V4Bng!{(dh2MqɓhL՚l@8Qd ŦdT9ߛJYjr' tc =}0!Ň,w,G~Sp>ozPK gd(L~2d ɝ  69`~pXOP]P&: w֌g/Ή ^e)?Yt1'-mHOyc-rUµ0v s!Khh ʆCfcqeK+lYinQjؘϦgQ>$zs. ~G~g^?D84l5ᯙ_s| d~@Ø ? /zQF5`}@|,,i IDAT!a2W]Lm3'_;~\хՀ |b_\n5ہ712{h*m/1; cBiK27 sEܢ oɲa%^ 9PD#9.AibG u܏g79qjZn.Gg4EkeM _Gpb:x#zDT5CzH0\,A^_ߴ\xD^wBq۵) Q ؀ȣУ0e1+b:z]"ZqmB{Vްm[\>PY6BA s]mUU 7xz3Yاtr~^eK݁7WKlkSZWQ௦@W^R~tt `-|j2߮7]]d#M;;='z,7Z!(08+n5,yVS4ԧʆ*(X{>ķ%R)s^}%kMҴhhZf@"@84`\&+3#@¨ B @R)PXΉ]<, ;y7 \˟jyV $$\K]gtq06Hv-[wpXkp 2uM􌍘nStvc1 h{v^0J!=W<X&Q0,HoAF*|ml ` )\Цt4K&иS>+pZ­KB%y&%8%FZ 7jMflcǏ)kn#gAg P<}CjC- ړ#;^X!(;.^[2P3ZE0")>R5M?E\ [> *P56nD-"0ԻVvWWMWq^QL ^N|0u_O}}raNј``^FTS\&,N0Tc`鳣fOlה-R[[:`F[!@i%2M3@ Wfy-(4ՍGUR4[70(Ёg%Vyb -kugpnLWGP뛢ms))|"N"OFI>`wgg7 WB;߹:.ߒB>1;kz. dV3(JAY!f}n݃9oO(fC#l6Ҧ(ngĹPMmik JgUasv/I$, IwkŝYӿ-LA R59]@F䟄 ~OM+Ղ{\{?xSc.j++i%2g`uT,B|;/^|&৯|V-ޒ4?4ah /FÇ b|:QNjh'4h`51%s`W:j26&3+uӣ- :emwH'B[] :2ol .J>ma&]y HsoF&/"h;36`-HPɵI:"BCmUG ZSߔK)h Th*ǚ ҬgN..ژ:ՠC`SLb_d3i1xP (j_K/Wh}L5eT| 6XSۀ<#LpMfa8+@[nNz[PтKgTGǩϺ3ژ j"<\xJ<&IC^`L{ǝbgο#^ts>#>i[c(tPg?((P H%?Q1`>]_^jg/)rvv8eZ'Տ4LwM[f: y?4,&ҟ!|[hmL[hP{d|h>5a#ڥC꺶[-[p))`g#A ؠ5B1'qv/K-W00QJ@pB@M?cS@s:5W%<}aJ#7`hepFg^o%eV|jsO# bzuDp"eb1ioQ"HSӜh1D lhY S m/1 xX*rHs䷶D]jxZj=-y $HUwVmg X'@ k<;4FʌgbRx^rZc3>)zm&.ߘj|`NٜF֬~'OĶk0 2*|lRMo0o:5!*)`pMgLp/ah#i 3 (Sp)_kR55Ů0]zdn;?Xkhu4h Dpl tU!=<9c+?\$~Dѕ"(+Ti5#HN`0qp}, |?vf|wE`f.lb 53.}#ѿאƥ)$ūYXzly"d#ЏŸIGhࢰ C?8X$5Nc|U@9AtCo?y;1dlhIubuCëVb `ܖD^7Chj<cN|;~־J{t}Ë.Zc>>+ u)ːRQQP> ^kNNNfw`._7{z6F[)3im5;&#`įI&lIVs^jrLZ =yBqe|ݺ@?˸j('ATS TZGʈr:%XsQhx{[ EBl2,i Bce\I /~\ƃ ..[( `%A=z_.i.`7%O\P9dO)MQ@GT93,ëŢOh {Yq'd|ۤCz0T1.w_͘=3#[ a f;!V?͵[cs? >&Bma{ж4/ :Ō|WK 8k.}sdoI>[B{L3:%1œW/٢8UE eiO!aWBq9h-3BAZ |5/3xl X}vs 04+, c _:51ʶZx;ۛθ=oCCUuTT T_˧pR022O&V? 3J5J. PЗq s܉>h֞7xJZ5[Vөcf5 jZ5ڦ70y0 &Aޛ&@_vX"&}I\Ʃ.zE CqfL`,Wks Mbn{78GQ./`|&&mo%84c`/K:=f;殕Hpq"Y @p1,@G7oh%YrYنv v"MC[ѸM Zqz+:kмO` Sk! ̚pWkmdDo_jDIx;;죝 l(ih~vvͯ?,Bj s }+ [f#žgrBy[9TF-[T PM0Vg3xSӺs cX:d9KR弞vrc3LKk!%+!R @!2'%g,$`z,'xqD;׺(0 ^J:1>v~zq]hJec&Dg='uoqe)@7=KKuR0@O>-;ft Xh Ab®%!"< ضqYŬ*y6Cm2+֊ Jt CZ])DS\q`մd3 gb3!CMjꂐ%}ȫBZK(X+a~ZTH9ݒcȫBx{"ޡm'ݽ;_ (~¥QQS)P JRMi&_d2;tI4oXtEΨ?ļ 3ځ/g}L .HS_Uh-D2WOd>Еe,-R[ܟ`̸'g)b*@ft.tCuSǞ> "S` BcEVh|ϘR\x<,Fܣ֗mA[&N78*p +<-殏;:i 3B0Ҥ[C75NO*T9%rJ!@N`'@9%sBi} b&HPݢրQ5σ} hVln{ىq'\ts{h#໇L܆pW} |mHOdu31cpK5tݍ0F!,~#):ϡe] Vqx:0 R`Nu0grMW;w1+n#4ˣ S1vUۯF@бz(iOxf%=P?&'ƿ^w>LhK%ۦSL0ode4&jZZѭcMs˚ts`Ր=5 f~e ?>U =-mUi|//WA{wN <'Ӫl B |>lv(jXXadC&A[额{{+{ۦo8=xǘiPB(Bi'7@}unm+F=.ykŰ4l4_.@{5~٦ݡ @S2n%o"Ɨ(5e2֥5~!>^QhP>nTZj8"G?u-ę!`ꡧ@_961R> kb.J#Z"\glך3/Ě@B^<xPE_8>:gܝ~ڟ0'Y]?AuTLBܪeR@E жx%)#O*|: Qa}rYWd^^OOXwW{KXgGoh;J3xVJو*wajq`lMh)TH N~/ooQH;>f2iS˩C_z 4?h) 4ۡ|_~# .զ˾ .;i[(['뚲S/0 "C=BmOKA">={Ŏ~1Gv,)ww3w0΀+ç_qEA)V#;rLE g>.mЗ9:>;E% ׵u׏5k?vMEtŬ>a}Xz%1C!8% uh<Ňq!4sd{@ǿ 1,Yt|rJ(97APY߸Lq*XP` چ4( Ŧ^ƜI/~ޗCsgMY{vqHbQş+oR'}r^ˈs,+kĭЇ_ő^ RÚd7H~ʫ:oC G>kf`aC6is/*'iWGE*CZ._~v <`zjɰ.Woqk _-V5dh СL>{axng6uy_:x+@ĵOԵb֦gS LYp'f7cӿ }!5If`tE2na0vuA+4cO+ fm"rylh.pm b̭8[rJ(1us{K__{w WO-z~Ŝ//lyYf#kL4Qz~ڙXXǹGRȧo,ğQuĒ3ŭK֑@LVFIŇZ-[{D#OZ&Vht{jy5Zc Q3T`xrŷht; T 6,j9Y&Q %`YFsdx)`'(0.!'{ך[͹)} & $jR2x!]8ZZsXm!$d;ZA,o`vNi5kjM7-7Zd=D w% x̲|;6 VL!V^iZE4X?+#tnBP֏w{b \Ts% G%)26>tYG_RKV*R4)`y&԰\K=O>Isٽ]Zߜ--ag>'ϹVTH>uန IDATa"h!,B9k nАdt4V?;xKmuTSƤ{}nEۃ Lms=5;#`.aӒ ܝlu@2OQ  scvwTC[lFeyS({4V ?Ez:(n)u`h|hZFNhfزhe(жc d?;_0u͹gDԥPl1[ |F8ϰ,w7*s ;3#@m} tq7+{kd _ ίʣ "K]ᙒIg  *P jNj@+^A΀A)yJƹ `،o]i[<&~}^!mzrIA1EpcwMk!3 `aߜYhh!5 ;q]\H: q6EC_؃ځ^Ιgg0X5 t7>6k[|i{} :Y9h) @'8\DKX;OprB'nK*$Зqqp6t99%!)e,@˖{\1k+' G"BgXNk`n,I+)k/A`a\Ќf w|WN^8|6uIx{89BBV%5`Luh\t:!g˘!5|&#>Hm7ؾm ϹN(P ~|k,)e3&0>z~E0urq⒵[e_+ 7kkpӮaK-%.4]4۝>Ѵޤʠ-{gf{#حcp¦>){[R_qXɇ5OT3B_M?S dwR-s>c4 >Ad"8w קjHCb*_. d~ƪL\aFB4Iǫ3H@׋KTI?I4ϗS43_s3Ţfr~tzn$*\Fd[PI:g<۫@%|.^7KxnۺhJI8o 0i oT/}Sa^C&pFJ.4ZLYǀ;ZoQ.ڮa?xL,`O H}|h7i [X\ nȴv!}ਙ_Vm"lE(łlKy{{5+E`<{ISSoa!5dZ*F"ƶzfasc'g''1)z[C0o!n@#=R+g@AA&`PSO}#ZRȴ h1BV @RR&5E|ʭw + ?f19P27yeAxVڌ wn,@q\7e0}֌ t:.c/|S4hj;|*3?ܾ!\9 :ގ9S+*v0?(p&u@ f+q 7Nxv2À'(j/_] )&pR Cm`|*&`\7h^ggbABUU?h|L1miS y *I b i9`LbQ˸o"E.(k"NS6Ӌ/h+ankXMZ \>'34PK=M <5rCڸe_V5ZHOAD~8G]jMw-dφvK4{->whkYq%4H[+IJsuR>(THs@G-AWaG ӱת{>3w==s^aťGE-9X{vVX!ܧA.Щ?1BQQv(P Cתy;zNdvF1 ZAF&M2-L/R6勦AdQ-K*c>;;}G3v 8 :$χ!ӫEsRfyM~Wha k%Fo-vhxb CC06X,LCuI3Qj }u>hrH~tbʈ;Фq[zi+%wӲvttхe78Y*sƵNaε(Jc W>Aw/_rX 0kbHkcG'n 'Şi= uT[kC{ nM`S"-y='%1X)RP:0ދvcDNN"HFg])qK"ue9k,5YvW%;T48nWXC r]öBHsQ\0/*-r }y{e`{v FSoxd/'Q/]juT Tj o ^/Wcٿ|5տoN}Tt6f8pâm|Zyfq+>n2|o^iX ר~5IAZLl t+ʻo_k`ϭs5vaU:rת%j9_.=7'|-3ߖ#=6B3.1S Μ^AoD-yGE~v~o[,b& Yo45{ ڜMԭ! {M셇r{Ҏt=ɵ_*Z;g\9KVL} cJ6zS 仴Ϻ4ѯ8|YXNJ;^|d YŠ:ױO.._rջ[@%_&}ʜf2dfW?f{F'Gg^D >@*[gD.iobIzEmru@Gi Ti0umHڝ{I&凛l"67fWt9Y}6G-jFyi[K@@Nc/o7'`CaP`̬s%%̈z-sb>|KVhG.ؔ]=`=QU6䄍qF5o/ _: ;t63XAd0Ό;$8~7AsCýwp7C6Q?܃?oރ{X i3 0Dዧ!P|i?)X)~z&ho<b谶# Z a˵vGv϶=~\g0,-&&@T ˏN.`S~!^PQϊgb:qC,AyL-_0咝MpS/5ɹtb\aj9Y&Q`j\VNY~B((:[Ő=&́Z {g;^I:@W硐`PWW= {SfS6iio}tѸ3ϦDvA i4+GUa{B-hf|DUhAwaKg5ȀxrP;_wBhYsU$Ղ5oZ ~%PuT`=M^> ׏Kh#V=}/iL kInyhƎRipjA@shZ"H R&;zI !dc0o _\;3 Tߌn]0hMtO}"G8%IOݟ'{6qy0^9F?7(4kv4b1jn~1`bZ?T/ ]Vj=װ;fw4TX/DRhsjN3bkW5y _o>'࠼,߼eBYz)TU$2b<d&rvJ&_j4\an#֪N9_A~_8#c; F8vpC( |4Mhmc\$i|f5{֪a}\[ nsnqj%;vZKctlю Y (fR;Jc](hF{4Xr؍ KˈR]U2yt}_Apc`G\"@wpi>@J"Mkgp|_Yow&d)C=?&R铧G?0'Nۢ)  N` w7n2D[-Fg5Hx ^*Q˜!rrذSjLF!ɧ, YM9au*u9f{#piw1 1oDzf̵FY0wf2̑(9X 6.B 拯aJ30b6c5`q A^QJt H}.;[,IAHJd/&#B`3H`m)`Nu`9Yt_Q P//qƴƲaT5@rBCڨy]DS͈04Daiu\#H)Vc?؏]5ʅ"*d8TCysa,rk ~+ )KW@U RI4)Fn/)FctYiM0 sfGV@%|^ ];y P5r->`9MJfSf&@"1ME3:AvM6 \tr^a5]ȢI֬ GF¾aR`e2s2b񳫕9.3 %r*m]q2"΁oEctX;[A90`fjy!qADlp8F`ZXB(ihS_9,4X}-D`fWt]q֙2Rq*P:MpM JDk5 NV gSa@ڴ4[(VfJ%s6b` q)Ye !"D'JCEBӔ=+EV03?? #Bc-:DgȠQ-X W+tz=z3BJ2uiW_G&ڬU-5{E5}_>8k-Jq=OZ&+` ʒ!R|ZMPXjžo=Pk>o-`!}k)lD+T. '[uGVȬ0 P7qPI 8☄ uk%u,/ wh;1ihG41󊖬 ~b5<.^߀S| c@2Zjm nw2G놂 VԄ1=8GIϤmDI ~}j #Y-5;Z ֈ͌P0>:rt^}.“+H")rMng6%6g.nD8a0NgkobAnÖ ( VGEۡ@%V( ?Og}K`v#04܏ ,R`|@\~@0'盤_:%d)b٘2# l*ǩq O wx' pղbZ`hBgaԚDkbO@og 眱 Δy_bp x<&] _ k @ {3r ,Tj_pnb@ cX,m~+Y/r Z?*i6~$ >z>y,B#v PKJy1/Z6vG?qxT-Aq]&L[#io2]+z84F䐠;K &(Tn#>|`x>[|!0tdGC:]bYX<%8F-Ȣ>>GWb+MBpI P 嫗9Sg`^0pAgϟמrֺwvb%`0UZYfWъgcZhop\YM +sfk^#ۧ}5wK!`:]ow$:Bsޭ/CS!h!^,;Ʋڭ-8N?&@oGv94 `B,l:)QmZ^v\YDp.#lFEwǥ+v펃8ez-gAKQ7a>X ~!f]h%@IX$@gE%{ >ϒt1tJzt؂XnGbZ|+Ţx hg+?wGL. ^̹]j8]1,M;P9cp&i  ]ZҵSTGEۢ@%%ߠvo7á¹~3f|!Sӗo5e2w *^,ej3=~+CʁS/*w]-Qar}{zCH[M3t(ctv@F #UqN~L@09~.֫y;j! DЦ@Aw7 $E3d6i"‚nH l裎K6րq=LÝ&~Me_XXGPb~}ɀ݋3栠9ZuS Z5[q;0 -=χc㛌=t>|HEOy>3}\J7r :Vr6Ɲds74+A(p;ۡʷ){ pmg4 #E)?[ߢk>ظ)k7W(|, =2|8i>O/j<wA ٤"B3 Mz2>Kߝ6@c]&< w H 9 0ڢ EC3 -L[&o[4{}Ag0ֆg09zX 4@}E!i Q; cUS0>!sX=o.4`Jj Wp|ԔV'-$& cw'.I\M"Qg4yߘq=[ 'cR!{wKgw i< cr|-->r:W|6:4@9uw-]͝uR V!)jJ WgJsăjZfjdWd50V.5e ,﫼~Uc\N3NB AVWjwzBDJ%B)טʯ-5@@@8=ja41u)P:^R Pfx@qͪ߃)ap>7`m@ԞO()ʫehNfAN#c?m6,*Mײ mLd0.dؚzq+ѝW'rzR[O^rF+]r+'qi/| 4Um):o0,@B)c?8#P\ Bn+1ڱpt͛g# +BrWDE\F5p20UzDќ gAkxLH)4]"-\>-xT=tH1p|P?>+PPBpү߬hK9~7@Om֜{!~MA)mLn[`NuegEh(zI| #D۠@%ߠ6Nce8!uq-@}u v?VW+ ȡ5&  Q4 2 b #qNh6rGmӔ?7tѴNh_3xpu;[sE8ִlұC w7 ԚK5T60g#D<2;Ǫߍ_}R PVynfYYExP%f /䮖T@iAvQI")ܔ zX8i= mcР‡oƀj߈~]>M4Sc/;יlk, N!V" @kEJu|iXgl-5> Zd\*J2bs- gR, WwrkuT Ti{X{4G3ҽqt0_o: .wt`)ByѺh;MTk>/׾|2[0MJAq[]W }ME/Of<{@JMd4y&,0ޟT߂%v ﬉^NKihv@īQIQېbXg]4-j [ xf'8 `Oc0&)DԷdא{CƋCAa`twz`;==M0_V-#Վ[X3.X vwKn؀4%A{ KˎStsZm9mgwI2E=}~묶=!~Ț,ko݋0~.Y9~ f/5uSd)Q۞,@2aLiϓu n\xo@0Ey"1Ԙe> Ogyϗ]H`.^,G}*\=|K^'=ӱ*X;iQ >(7.Zt<_quuT5 Tnw~w~m4_7\FKٽ{ş{٥t0MG,lhS1)kPkDzPCdZyx=y }=͗2,EEKGhKcmg32/=&w /)xE {lSbdrpZ)?sB>hܼ1+uAnϟ>{9}Dco5`ѽ ;Kl3Vڌ@/=JΝ%YƋV9(s=8P0[Nڶ}8&01Jg @]mi(sFB#Ah2L`I(2oi%xW"hݮ9YGXܸȵr' qswWO~2SN_>y϶% ˞ }n̒`hXo+0VRnocggg`y,es|F5+QWCY޹C5[=o?HSQKny+X&?~nw";|g&-Upb5Kc0A=boVT[d-JơF{U~>twqY  FjPlFe&L]rƔDqB3Zx٩O >`&fN`c 4.郩Bi`j S-E {M̀)-,bp}89m]qu_f: =cvnM=J6opItJMt&A: ?uZmRӌ{f싫}B2YY'L9Tk%3U>~\2he6iŲ-a,d5>3>'+aL] ¶E..y>Hq`>\sEvZ=b9ٟv8(p{ۣk} ֮ږW6IW̮YOZ[ ,; Dk@W߳LW UNzuZg$M}n`JiS KgP<m:gXs'1:.5Xf^QhPSih{5lĺH9eW`p@H_`n /s8o|:Aхpi V=sk #ѹ浠SC,NkWOc?ZѶLl⾐ 3; 4C[scNh՘Ty{ yLk<;ޱXЧm|]K+fBO eʳg( v=A@1* g]4m9ڡ&ņ.-v|D& 11ņ|>,xܜ7Hbp4І{U&[>+XcjV "ǃQQ)P L׵9C_: ]# Tۘф7v'2b!J!tT4F-ـeT}FVa26j{;[DYý:_ɓg__e@xjz!L׃0s@Ͷ,@s$wǠP`Ж Dz@6pqAԹ)N{ Zufu|@pݤFt5քt }YN7<`ehqNA8Ԗ+,52n( ®3XThEYUI W4#NT"0J<{#p\ { _N Rh9ӟcQ^pbsAOtJ^ji AmCeRئ:* .*vڶ'?Ph?KS=-CYZrn "w+p T3:Q 9֋v o/l< ajxVk0`54nBH -&\3‹;)fJ<;@i-y /Pz r3H<}-w&5`$P.f~wG@{ݺho:+7zE~4!k(-΅ gBqތϚ jm: 5VU1{ ~SLB.TЫohw3M 6A%WA pRMsi@LܛE>h.1VG٘!Dײca(Am//@3<) }7-@Zƭ-`?&VV4pg&DK`ka 7ؑP1m@)d5ri ^;8.c(7.٬y0($/ MuF( [gj*'kony{ČK-KB:M \HwoQCq_w|@G?QQMJES5kFGwi}]sxB]%s{ᥔ78 "P34cԴT2lw0A[7-tC+mO*lKs@*: 3RH2b@ \h s7]g̱з *X,Gc *\tH,ACDZ@(1gMm'Rb7PK4L6ZDwP5]߾H`+=BE; Yԇ5#[IC2Z=֍?;6? khJ&w.Rw'fIVħNV4::n)0mo}3h?v0儋8- Uˋ}ii Ÿ Z@|}̊p,\s pt,S8Ĵ|FSY\?G波aoL4jwQq`5ق;`πUןۏ!ɉ㨎h T/op'0m2逋`Z,Pt{_zwݪIeޛږ}o늬*(&)ɶh6'@22s $ P#O P P` <4 g#A"NJBW]~(`_{{|k"Ș Md-O260g*y_gzȸhW<<}0[!\}w3{#PL3iO_hyd|wDʥN2nm޹D} QK=_ab&uh9F,pt:o*6j~C<|3czoyTP(pۥ+])R"Aݹ@o(EX XZ ^wSl6R23J}ԟ?,zAMVeWw@aS0ƛNDR#:7;VЗPȦXvt .sDrf m|(Me$LQ YCAe tg]% vOxCWH@GN-5mt2!j10j26nBni|H= mAD\yW#a=2{[ /F(\[w%vֽ\P;爐OE;@&ƤǡEq"*($[',,@R}VS;/,n8;@c4;$%mޡ$ֽmleֵT cX]a"jHq' j3[]v3&zo][ [6E 5:ZF#oUynY0( 8y9́pIrߛ)m '3fK+M8W=\ a.P|4_1U^e}TK mا9`0(m o+ ;oՎ>N3 :* *(](Ccdgv!T+B/aMub~.=A aiڛW5B 9)Od~Wـ=Ib0+> p7wtHSbDeN^2I% <[RxMBU kч13QRpz &H?ïbY^=*6Z`|wČgdLI2B⒳5Ɍv`dr>$S-FoFݛy`ӯ9 %y &edvh3"iL$3 y=L%N"8{84$銙/_2̋ቂ3d OqC,y Ɣ~7@[HN`9<|쌪YRSe"X ]Φ0N T`wKֲލ_kG0&!_svIWTGE;@$swwﲨĂnLc\XUͪ,3 ig6ُ9vVmWjs0pynwWoE3~#Ny`ZtųPejlhM@z :qDo{7GN0 t/J`+ {!x+iUS%I@> zyT3׬ PCnU ] kqt9lb̡`%nx[+#qj#esIGUHn*AS3cП>ʕp7isG-胑0+q_%eZ"7}/2$zIѓC0(Δ[g>ZշP*r1&K mGSLeC6"$ ;0u(f`A1DB]֯?ł^M+O`Jb3I:2^r8X!7G_GnhEvHi}f7_՟wLcW AX{ֳJNTnx6*po:[ jweQXKY]\5fut(tᦐ5p# +?#7g>6 >( &uרsH-Ĥk`W m/ 8Y]U?qFe@8vx86( cz`-LE: \qNedӑ z|F] M%J?xISS:J}TL8Է]2JHOHh=(k4f}J>CԓqI#s*= &hgA@ }ȌMaVBٞ 5WD(hU XBO42Wv6v93@n@b( 4쥅5o4Rp?Za@S x՛'c~9 av-+gF/&񞒦t]IBB/^0@L#7Nolule@6ȑe.G{>81ecKvU5>+c㷇7]n 3 |7u$낦xEI0R·dt20"v`9xm ){w/L!vdQ[9?.+_.XWԼ,v} }5 >WfvΑ5w@3,g=i$knI&q$B@6 I=eh$;$#pueX v;cD|wga)urPPb26d68P1'%2`|mGh_\(}׵1\|#-qi_uj&Akens=B~N.JbJjHI pmrp` (g}8W{˳(X7IN&EZ5\ixiY{[5 e潘=P_8kcWr%m ;mveP[v-:avǾQk6>1z>@U'>ЅR:aB0iҘLxu8- {uCІ c?}y;'跪) |O|)N G 8hN`0TKlJ@Mʇ{Cäs3#y}5&F$`0Ld(CB_-##c.>̍%mXQuP>> T Gfbwul<{mvqu7ev!)P"Mb|}'Dtg^>J]L[B VhMJ1 pS Z ITFR%RjEn>/s+{xZw5T.4!R'Bev>w̲%HH:=P3᳤[.m d^ȅoy%z% <0GT'ao\th!.;h10U/2`j#JFdBۿzx#"КO>"d:ՃBm1ҀxwuaM 17Q& F|t֯ ǵMю.ΩB־․%5s'#@"+Yw/?|}zWVGE@-~V'd1cŭ6$"5E%/U'2fU `PGĿHM\BhżM{` ЏQC=ߋQ !@Q6kZ81i,7@|m˴}/ݙou8nS2H $iĽh19uFpicvDf;z z9;e&!DrNyh2hLwܦ?\'JT[oh_Pр uI)J0кa)|yN }r.vC'$<2:A@ٙՖ>& c~qï9`{ _d!$q݋AHFO_Kozz(}~E{pڐ- ›34p>>]B$}x|t)(p;%w؏vC%c\C@{kүFB8\hs>"$,J =CT} ceE-"7 68l1(#sv*%D\">_'pJY<<Ӈb5w伺C]Q.)P1wIMռwy}wyu΂I $FX\%87/ul3vX]f#!!}z`硺;;i{Glx]Ŭ xv.t ߪKzAp)QQC01]z_g6, &b.$*>= tH_u]E֋p2LV>% ;7}f}WNA]ĽvqfC3ϩWKz]Ud4k<{Y}l'(%!}\}t~ؕ 1wHlPS j'qCq)JGSù4_H&cC3G{0_[pL/Ǥ@@M#Z?f4:rBh=&WtF IDATB%ޟwPBƴ^RwמMN>$qbtj )&ESbU?HTđ~ZSr.W\.{&Ut2eU̮Q %˟leْ|HJ%[NvmhtjS]Ppϥ0#atp &L03]PVP8]}K (0C%]C^$W:xpR4:`"ӈi/4YRop&{cิǫ"pHGh⧘z0Ƹ[t@?*'um`V(J\_Фtݫ vk$?W1>;$2$$Zc$hr`|oMeMF5U'UGE1jQ7xS 4s\U+,ۂ AOj]XAm:~sab~H2e"86suBh0 ^0^V :,~ג-}U~vu^SҶr^#':$*RqNoG:ؾ1Az<M;&AP-"?upn%Rk s6ҁ:g"GG.}Q M]LL `=/>f_`,Sj!zdFꖎ3~픹1c)="_32Л) akޝ9|w[\ c%43첎 >y c"H̻ .hhs$EuTK T ]Rj(tϟWqWg/F΁u{jx4צh7ISJ N.tиDQ&kFJ_w"t&YCd &`89%!c@OՐ!2~[yַb74T0KakM0;sdf׾4J)}ʧN\2hg_GO3W=̉D>s>ئ%LLP7jrf atՌ0~>^>I>8tSQ(P1w@䪉NoGN/~2h%k[}; Ȩ[pDjvc79y<ߑA"Y+=8?H9Np&˽k~~@K0paWbSuYpb}B=e(O_MBcYUŁp*ٛikTӶc*aq]z**R|´% =HD  >M(fs] 5~M3C( F$j +Qq'8AuƐ#|h#H623GrhiNX)㌹F Cf`3はgѨPtw"F>t2v+ :΋`dLJh{I`Q#C< <f2 s `9njaFoLB% B"nO#c&anO.8S^Xpĩ'GǟD3_OVen\OpUQ)P1N⪁DJVmٷz2ݛcN&6 5iߔ8PEJ5I BGy{X"Ұ-zM`&eVw\C0#Gl{rK;Uhz|3c탌,&'Op~.vΪ%XuKh l^rԭs:cY6eꪣ {r@?7Q*5JPHUk&[KA@g:"J#5tQLHuϺ~7E.sFاY4r{1:nS!%dVK#@,|/TwAm Qr!-/̅t'0x$7fG)!AikWNX!@$FO>8;ȇuV6>xܤD>ȳd6S$22Y`gwT$._+F $TpL!?A2awd<8oj6hO_pPҬwtɟGdI&ph¡PI+6PvETSMP?qlPPi4)q{pqd|Sz0d2)~3y1EON& Z3?> K4+cfжj;&Be6A&4q %[@*yoVjtO`ߐIO5,z̅| " ` ղ^SrXU- =v4 q9ijF9oh'VR?EzT2}%l@HiXi%3Gc✨C[jei}`PV(}N \:i!jss=U"#ԞQL LLMhMlz#1Chqwa[~:SMv~ewD ޤԵ2 ڰT뛡C-kB]>ܲj;fkeE(eJܷ9xI B71 sF D @F9əo QGk8=`Oby[v)PVmQŋᠱVWG㋓H F+شWZB"Ѿ.XvX rڴeâbˢ}5zQ5 +XEO1 Y8lH DʀinKQ9D rOUJ}8JĀ4W"͆ 'PB '4]pLS=DȐdu w|ԈzӴ̖'bؙ;Bu ԡ hДtrt>3-Z4CrQ2j5dx:ħM䔰Œg&DGU 62ɏ]0|t{Qnހr&TFpYF;nfP4[\f'W"o'@5O"涋~ 0HloLGUռӖASo|͎ v 5q-Ҡ?7}Äo"&4 ob6yCgfop/1OBOuTU T Q`D;?obkfV!JopA+a»Bݿ,FP^NO.cYCjkNp6OF-[8PBd~g\Jn ǎm]L6\}~J+~dz̝eT{tr4DP2)A9HA9UnsVLHv=f[ˆ$TqA8PQvh %vݎ< hn( ;5*hKwj4{5) )50'8,aj(4m,adLU>YE3̏QY879f(* e;?{2 QSoCFJYFCQwհS8yC՘Vu'pv[$6ɔe u; >3MWGE[@:~ܘf +/w4Cĺ,3 q $͘ i.0W:%nQ[Is=/ow `Z2@6v`4[jն< Eu7a]s[``A6mq0&^) 'p v§yE]'`CF8H DŽMGYx]3R=Y{K< uxI[aLHnrHq#~A]N !{WRu ooQs^ e<0'M:Ejϰ$R7ID@=;!  - vvg|./1 Δ}"K%f˿{ϱj)ohn< X)*r: )}cg\S砎4?#l. *t#D8|*fi39Lb?E$ө x( "%ǡOǘ:N^LT.?^cp 47sWA_GXy}G]PbUQ`y{qvUSɼҬ7']R =]Xls.>/x,,g$::%Y5JqD^dV@D|0scmL.x 3$yZT:x\R]`qI9,(RtCbp_u` j, ["K |ֶ idY%Kj᷌qL3µ`"iU CDO7oQCJFIo7Q./}\@6 IF˹'- BAz1!#wǭ>M?^P{#V~>0|t<32id?B-N2/\+& h<8>5:2I_c"c4bd͞ /Flˆ9$20:Q^ \pT'#ZxxnuxSY)oRP~yz.IsDo0.H]`gFIo1 ̠~8q dID6njNN1^A@0fH`L' ڧ6kx3*i^K~-QPX"krgǹ@zCӯĊGx1W7q1HJ v%ॉ脐I&L#?ὃRDUԈ40@WbuЖwj [2D:.(mY9Y!cVIw &)ґSEL{vaRHjǾęQ'Hc5eZx0$rM@@S"@쇄 )ý{|\gHh"~} }>h|&h7.y P3S3Ƃx 0'mHtJfw+g?@)@S$o9>==#B-HJbggHgCJ1]t;_a9 # Hz3 ɥ9fU roz|вeyrZ̭ςz-'vpq͔%t`7]8{08m159?(mKF.CY[|-FZ(p[%oUp]Z2vlЍ6QE 7ZmuݨʭkJw)pP :BtL^wRJ~"5:GJo$uͶ؅N0:=0%gJ+E"dS5ɪGqun9bڱ":a&9? NXNlO.]I"T{}Ε\"(爓|T#`"~;^3uuYNEw56]!Ozx'ZOǾqXex&ZK-8@h>nl?eE3elנAC=B2g>YH;zƼHdgJ:3=_C!OT* x)P1?^zV]E\cwﱈ֑HVd)]͂)&qn̛鿹$, D}\,e@`dx[o 8n)\P͑f<X i4%xs RƤ+1˼\]DԷ@i$NN{;eЍl$xT{I&#* 6x z'ɰՏ9ϩ50Q0rxcYL*Df0TWut4/Q6k}+@~8J6'4ͳ =KhH3 391sPsHC+A٘Rh4SAMqdkhƭhve$_a.=Iuo/LBmCkB͌Y`S $]105F%}70pqQQOO{vvֻxdYktH,%dfuX8T-tx IDATd"XLqYEv )U]kWu1-}6\]ePA)ʒ~G#PjױL VsD]ք L n,}h2E?2#<7e28_oY-?7X jR,l7|2CmL-V5NJbz'6j u+O){,p-= CЅ+aiR v,S|Zt'cgg@SL@]y@S) > nXJ%&psw ~Q9*g9 gNbD % #2Ѫ0E%f[X&cQGs_mh02.౏Sf 2!kusNp1geV2Yu\3?`nKG?R{,>3)#- ` `+_*h$^"À@+Qi2G> Jsi_he{` $\];N-CF{H8v/r0^QaT} h4k0}0)D&㌨ォҵThAݭ{h Ɛ̌xH3wwV2gqP*<HqC;Ὴ>+jq0f%^YI ?lQ Qݕ~QQ(P1w@ b.[,Q{:~:Cr64EZ{}VHe=%V55Ӓi%emZA9dJ&Uĺ:u,*-f_H>s3֒C[=g|@pwl#!x >\O(8cP't,Ѧ.zM*8`gK}- }9/Y|_aXc<T½C>q;ҔJ[B @jB&`w~֧ޭLKk¬#~ e#{:w0I0Bp,c̿kby0B2'-2j Mk?LqPn;v:* *VZUBU"M߲*8qd+֦[,YquRCl$g˄)I!0juJv5cҴ -Yo9;S~,쨏¯_ \\38,2 ҉` MicB\-+SA̝[kg+UܲthAEBI=3+`vE}&|^KF"g@,}CW\C/m.I--915T< @ 1zSVPՁS>@NlHA(iCS4W7{\ӱPm Wd_|GKca&LQ\|A ={Q|&g&p&ShCs<2##eFaB MLTfTPսCbU{ _7M@CЎHEAK1x64&x6 ~y(@)Zw4ɳN𷀸j}A@A3,*Kb'!GC.~ ~27&;B2َudc[О#~]Oy%qgQQ[7ጜ^f sn2ܩOJdxFMO!1m cA/PAڑJiсI0-%BWfHڧaת q5=]zm,BVq0pb-o%(0 $V_=<W{-Γko>> Kي:-8|T˵!sHތkߏLHsVʄI˄Unk{h-+*`jE*u~WBe30&}Ƃ{yF26!BĤ!l 4:/Gf t Ik"ѿ0n¤IK hf%ZƱ3ڧh>zÄ1h`X3YWqDODtF/|0 OpR!|7Uˣo0j=dDU7,dk`To𾠍0K)8W:9ʠiaL&TǤ2 1h;(qSra;QQV(P1B֪R)pt^}>Bh&XW GsI yF|]8YT$g`Z 4OKZX eZ JJG&e"ލJKғ/ F wYl:ȈqL?{ޗJF2H|s+:tl&i`,h1/tЮ|UӇ0zg\i'#C2ID2]FAuSa!{VrBz@# Aͱ)ޕ9pN݀qAQUwq\:wy5YLM"o'.qi9iP>=XMzJGI%W$@E)Z7"N2JFQiAe&!1U/L:np;tj|/ۣQ%1Қy *ب98R*uPL$1+Z5޴ a ¨.LL@wqb΄3d:L c.@MDc0ݫu{XtV?< u 7o?*a`v@l2M&>%%tW='@QKw_"ِ4 CUV`2"z;= M9, d4dNz7>z|uV:T*Ap` RV3ݭu3 =]~uj{˩Wï&!oҊtvA(f#؀V.oڐɻy% "GoYsuTM T mRUy=@쮅z˻FruG>E@Mk[WDz1`U fW1ժ`$3MA x+%83d`)@lǯfmmrЯ~G}<'^fY zI:%Þ}ܥ-ws!$'yRˇU;'n^Dj<|GXen џ>(X VaRxֈU.9[Q(|lJgDH8jaLu`cڧ.};f=* zlN X*2g0/㖌@?&1 tf 6!>aОY z.9Llu*hvc6i+o`]v8`zuT T ]Pm^i\ׄxE=e\) d6JtH[d څ0$E8 =Kx Ůߑ0 -y4{N{͊B.&jf>_ߋZ7yaj}wwC;c<F/(/`=Zl7M0eu|:t":*ijiXV̲WvLf"'q TvA7$w͝;6bw^^xTa ߪQgN$4PJ:VǮn??V;ud_GFgijq%~ud,-%`Fo/(A`UaiM MsN4Fk45LmXBd$ڨ0#]i`7,`2IP0$fdMfv`$˙.3('#x%ݩ2/{vƫ])pd|>9x&I.j=yv΀Cs3&kLkQzQ̙bй)Pay1)AGTf{D+ dYPّ xB{w˔2K2E1Yh\kT* 2* *VϺn:ono#`0 (?]7]~s- +έGit.]P# l[F8h-c̝~SڮX }F@iⷋo;;9d9{hZMw+K+0>@)CZQ].$pBҩsjP ڢeL *]!񑱈s`nB_ 53b<Es"I߱C/K"s`K߈wFa׎K'&>TSavtnJ<*1O.j=BL;]lt\h0=.$ dbXa\$i6$k=vy0Ii_g2jY1yu[_gϞd9ۣidh-n6E<{}q:Дa_x!`:9?C_zw"kI7D P_epp\B#jJhehhQFF N瘗&eme= }] d.Mz8o!Lrg<2bOjJ |@>$Aɖv0i7H;\X{g~ PCm#|d{6-fT@6?XMA;өZ 4 hW&6 ~6Ԋ")CA:̛FВ@hH꼫[޵^w>8TrRbnh_h75{m,h2Ez+ f2R"յ ₭T'@b:OJ;-]uu /ٶ~>Yu:ltZ+Kh^XY;gskhX{7d9>gÞzd  R^FwVz4(&mGʸI',gxAhʖh/`P|vhqv&!@o9 Q=딦e$hyAZ zhyVeBP |sg5&v<[&y K;sNXmB䑘^] 0ܼlG}"4rO #f4"D{cA]mO.:& BvtOD}tެ+>,e\+MD;i8OA_λfW$lД(pۧ+7¢h\/ZfeeaTau} m1!#x'R-imwDg؞]r,`z0r\/Joz+鈦d k}$l{Y \wJj4/{unwB~ᾶ%)z'Z `J Ӝ1Btx-2lXp+MV/"˄LIepFQ;hKRҫd㛂zkhho Oh}E 6x0.Ю Z] vFX̐땾>Ev^Sל_ԾO1,U0#2k?=z\{>8:`&g&l?z0 ]4Z IDAT&M M-M ݡGx里&dA`2ui Sc ;oC[kVuTm T mSկƖo(-pHv((9ksdT]  K{raQyΏ?a>脺Uo&A 5..`#$/5,Av@@=>Dm_ v\_?Ax&Wa uS#L|D0alIL|ƓtcUhs=@ZR s#EmE!Hṫ8R夣S#/HG~.9s^>f!ӿ.nӟEsA2KqX}0>S8#l%--WI..1P&R5uwd>Ze࿋1ϳΧ:vF1Nz7tmCtf~m'Zf<{u؇?v3= 5Y\Q*GRnC>y2߻8A퓟y;{A||Rߌ^^e~xJWW0_/[w%zv3mƎJq"~!**Iǟ}t@pB<494y+!(eSO"Cdt%;%邆aޠZA7`l~QLN.9K{1)MC/OJjeȀ8Kȗv絣mȦYz0.1( 4 ,>_~O}'t'˟^wj+48{:OB?,2W2%:+//0e'S`6k~y0>̡N2)ׇh$4_]ȸ̫D;۫qaZ7d٥(p[$ZI=/ @DžC;ĪBDB( +jP$43\Jb9EbjЉL[7VHvʔ~t[RF*>jdGdLwvWntg^{֗s:dxp_7_\L!!lpPV: _eZ r$e(\h|cg΃`ixۺf2Qk;+td"V-|b8~R)ٯyCmb}@DfB:.} *~P_N#h\ =0Y| wPg4P(XYG gHwX4#b+CB_TEy=ZvNa`G~YwC:RLggߵkeM = !x[pc/ &UpԻBmdЫ]^p0d,.3#` fpgH.P&sl2Abq7DzgTw~{,ȍw &ާȨ''2 +< 4y=mBT(RMߨ )|( T"̥T7ђPfHpgx~[֌z*( m[+VnhOet?™Y5*nɀ GG%|[ dWd^[- ) O_\Nu|H,?d{{HzvYoi`ȝߜ,&݃㿶{u?<~ڋ>`<o"%1UuF9ĴFKsf]?%喴Gwl~> kH\@7of=/HԀ:* )*N4L? /HW`JMXT5dco "+!bauE hTZV'>)4-h5Z5"{ 'd>v => ۃу!ot]NOO88?]Yg@{;&?%Iwy aih EBo~F `7lP)}8o6ݿɀ,{$jW=?7< Oo}lxc^t:s&@㘕H23bc&B q\nX5n`[ܟoVBa̬Ggq}̮I,@lW)$,@n0nM&Ί2#?kClҶo4,HlSM^HݎȺ\Id>y'pd\$ng>wOvzǏɝ3L#,>{̋g~rFsy$K2IJ~Av袥A7_{)+c:ҽ;%΋ zՆ{|vdHK[(p';!+RF"hDHo6˾L`6OO_ex+ؓ?w^vMNZ8h&fSuu5/47ȟ鲒_Hn*If8 sᜡ]!Or.ML dRbدJS!5O)Oղ~TFpYƂ6%h6 ^a/YP)UPYRfڻ[pWmbwXhwimq'v<'~4f//~}@x plnBTsem :ݟ}P?x+_\h;9h{T(7Th& Cq$Ȩ>*r8"Q;00y%dPvE;XV@HAp, ԽfD<9L{PYDfh6o@߱wl(rS f`gwmjM{2p31LޒMyy`TE۰AC3ySE_fom6 6q{OojS@:˿p;c!ŧxт^Me&`k LOxd^_0 V* *WyJY[|$kmJ`Ёt! `kj&`~t@S N *tjQꟕ'/鼾D7x$E6Up~YƧG\cYߩϮ~}ݷwJҡ}_27CR8l_<&f!a Z, @wSf^shߡ?{olYzy3TYJRFnz8ZDXtnA4"\ ?`a$ بCmTdMYÝ3~WeUFV1VZ2ГeupF|wF #JAc4c)D0`.- sҲqBZxk{/ku4mx ﷿?^ɷQ [/.v4a*RO>$s] DA*t+c~]/aOt)oQ?mQ41VͭG΁rh#-kTИT0T܁l~Q7[lBQ}yԷP gVjUM䒛^mma?[SoD'QXWnJ7~d꛷ڦehW-ی+8Kܹg;*'$m` 肔z.y @ ܣ֯Сfx $A| v|>/爉XB@iZ#91':[=A̫U(ua`2|7%U"|/vCc.?Ts/Sּ$G{ǴoA^G |Ynm\u6n2>^0_*47&kheLyS蠶29@.|B̶~:>hl~X?[W] ebM&R4oQذ&~*Tk;;hIQ/UTķ£QZԚnC`ݣM6zy1߲ћWMKhc0mp? i5~bߛd{&F &h} ..{C/06Ԗ0^>Z˚k*@i\! ̈\'VMԂJ0Eׁ|L~][P܌pD7#.gMsO_!H;C9[޵hỾN 0j_01xN;=jIe=9R@3.5 xx'83EϨw==5ُ{ 6} qW߿kJ0H{wn[;~X[˜C.z%O!(֛k.|zѣ ,Zm>RH r|8 &hS @F\J fЕ#hno$DO6hQK5=O􌢶hOQ,kT*&%`?;T&ZkZfݍwhys(af.m$!htZX>V * bkz~1]F6 Zӷ:ؽ{ "2Ox1u8F`׀&iP@}¥OFК&Tg_kw:cgX28wHՆ1386Mq0x)pD2hZS=>F9@.`(ںxptWjƭ|Og'G| vUeo hh.;5Ew+yä<!@;h`Ďoβq$ݽ;! ݦ`rBܗZSEdӘ-;كo`i:kի ?|?'X0-srx@3%dM-(<\U2c/0|ӂ| 7K&iN0?N Nm"CS4 c ʖ hYf _VXaXα`Xh:.ܓl4*8"VkI~w}ॽ(6`@;*RU.)0_Q;:w>ʿ{g /@w?SU)UGxxjVhN52(ߘ$]-P WdK>s@.$1?k~ʤĭc@n$q M~tgMS ޛM r7u.t1spP|ϞfAS>ymKqD{WEǦ%m X-`B|s G0*dRqc{,^FfL:qڐK^auPo6@SQ`tW+ xu df.0p$ 19_ʄ %\$(< z`_M]ˉs eǿιuxмkyZ|g?j G΁럾opF7[ne b9(n+饉) >k?XK-eNmꫯRxD׼9:?#k~h6@5(ϺS|FfO-/M* uvz]"߉z/Ztا>-[?S_l#Όϸ&.ndf9RբZ:t_A` Aw>\*Z}X4ֈ5X9kjE0jjɋZ1c]3Nγ$=QBzŀ($(? E81b;&29-kν>9f%hBE>c1&١@5ZDHPH&պ'PG,GO땏k?,_hs`9 Ț.-B`QX(PG;$ڶVHږP(gY*[k.~P&V! IDAT̾ΈC^-)m)nkWt`KH !ҟo O,EW>a滅Ru(xJSsΠuWP][u6&}ϚiL =+aX"D^hS0ׅA-ݴHjX>M 5#~x A3L}]/W6ZRpL SX)\>]$K<K`@s͠%FL#ci.u -f;!^qg ˁXJq9Պǂ9^  RѪcZ"OV2P?MQ1 d_%L etrl$G A} ׬?ԇhY lNw^M/0R/`JPkg'_f3 F ϶ Ǻ&& S4yTp@Wca MԡYZް0C$?\| yS9{\ j ÑEŜ O\A~@p-ZCDiPD:qN5„_9 {vܤ1u z0n-f,0,1ʂ z`FCZeR&N>)1a 8ͽre/Gկq1_9bq ^sQ;(,k2@P8A ,$43=7@^ߙϋ.g!/Wyhx&^.0٢,0aba''/.N>O,1k<8j#`,[kf78PB<q^=XvN&/2εZ*4dB  11]G(…2,mɂ ݰ{̽# #ywaOec(J7|ޣn ["] ղG΁sb?R^?.MoI('G0yl9H;uA~ Fȫb~ 5V\5 Oclk}.ujh qڣZCaZ8Vx0O7bT[ S"P ӗTf9~q`:}IY2`D#̘*=0!4lP:YRxEErj.@v &Ϣ=ޗr|dXV5_ģoh:hk4 4 1e}h p `| Ah9c=hמs?8|9=dr#\|9r ^Mcbh8L _ؿWUjEmָtCcp%JԄY`|)g/i7 ܢ0&nu6pP01q3R?v 7^Z^wZZxsjjI`5~4LnfЮ/yuB -p AH3?JPT]!৖+gS J0;kz 6c*ߣub c@ nH+-3ol_-4q5} T Sq2kSd1[[ۍq#4[C`b4 jI5Ě'ΈnϚda<^AÔA5jp0mwhtWw S!V]>,`b7AB? ?Z41`oHA{~*/6bڻO9֢9 H;9:> ƌ8Uti8Ve 'kgѱ=df1 0ђsxpvo3Z9Z3\B>>0h@'uQ5)} NsUIo l5PvF{6ֱf6M5^ag^`8D5Fi? X_& +n0ڽ~p{S@ o!~Z<0`|bיy'"|Si^5Ic_ѥd\Oaέ jtccK.Yu-ř6nf­QƲP~p! <-X|=NC9"p#@jk. k/[(~ԿˣO3h)`SxYh@V퇶;ڹ`) aAv(+o{ |Cs1 dQ,jNshyfhcicο:egDj#Ӳ.g+9mtw2L |eM`'B3̧aO=t/ FtkN xψ%`vtD+hkṖ~`up$H\Tĸ~N>aF ?\_Kg/L`\ZV7&fH'# Á\xa^h}|ӯ3W[̪.AS~^M]ڢI _S@1}F Bт*~a]/`73.z[ܭ/ >t=a^ Weѥ5w(biпp.~ n@#ڰӠ۶) {X8FR>*lhl",p_*w3R;&,m>1Byp]pL~Ib?iS\ ,{ge=>[$Lfo 2R[aJVaO%m"ɲS\Q}?rcU.Ջr ~Q)wzh\f9顱V?W677 ۚm RHY-WphSݗPP8_J]ZĜ4HkA-6| v}L_\Rߠ 0/4i~OłԄc2.@/² PfhQQ*f‡ho{)Hl@H| c,ʃn>|RXaeByEaKodũ8"<0TC%4>]~kP70;%~#:)4s q{qA|6:믐 qww9UZ?~RLiT.՗Z8tW|Oiǧ{FY~w8] 4PL}S'Z&KI^ LaMjT4@ s^vf9aqMFJLq3̩-"o}:YT"W~XiJo,3_ .t!z^ϰu'dϳ5>_FI E/Fb PTD(_-`KT{<7qjf][mXdZ3> &X;7EPpSMW(}#`.Z.xfRt?ANS. H4Rj#`fZ7$r<'Z4Gc9]=^iK@)LvmV/ [TᛗvK'? 20:_'bC܄4ͽ6&EuD-1h璦69EN y`9P >PO!?r>r`xVئpxd4k-37-\/`](Y@\ @ L'6`065N3$[ٝow 4W[MRTaV|19އ>?'ˁ7|;ɽ{oBPEj9o <5qjdJ& -گ&|nwNFoF9Ԅ$ljIP@4`g葪 )\S;W=XՐD"\+q IYkh=8k7p02#0ۧ%EqޗB| >_ʺFō̧D-Ω@?o_K_Q#k9,|%2RrfgQ!>*bG΁@.?+{iwy`'~ɟɣ7Y__dR,xQk*f`sI0"'rXo6Op X-/tqUު 0c>F#bB?_~Bns9L<%_nSV0n!>=`jwe3s5G7A 쵛], bqKׄnZ?jM]9 ɓh/c*,Ԉ4" IР`#Ըc֩-͉h@{9 Nt"TpQb"vn%iQiP>bwBY M_oo %7mk {z Z4o].|9 kf/N@a@ȏ/rEg`IJ>?[ŻFo|fç, }N5C/H&͔ u)z$(6k|d^! fe]V )j09j {hZ *I"#@ԭK\ uAp^p4MOMJ^J#P ˗芌=FOFs}I.=`Vlט'JFu 1C\R_A0|&D yw\ q-|q)`Rd/䛁?flGCʊ5nW 0ٴ)(X$clV9]/+ŀԗ?`Er[;G~x8 /.? k\-vХKӋydݾw7~l2FFnβ7>>җTsΏ;dg6mQuo_ܾ^Obl#)樢=.ė7ILE<.5M {ݪY 5GV̭]KovֈUJW@3>S#y} ǔZ. ȲC@9kY s.phPfA XjUм#FHt M\aQdq̆Ƿ3 - 8F4b u).$ݮ)bbևCzt'])Rvج]c?hpDR%)$W̵."@VDhBl;C|ˏ/rEg`y\*|ֵ7yH#wڬPڝ /vͿ e nm`:_Ǭ]$,84ɋjU k<EgD-x]Qn5a&{Y쇶w2Wh+c80 ,˯3|: DPbB^Foڵ/AP0UT2mY )>L ΡϽEӿؚbA ~Ɉ V(h/fBK-[7e%FeXh_ :t$k ys %l_wW"Ce(+ .h\TMH0oBpA. ֦GaLO܁ C yiP__{_/Ms`8 +z޽o-&O?n?XLP FϊWGQc\':@iַ߸[3%qsMWDIGmˏ$!]Om n:}lk\Ogm ܼyn|P:A|:Is-ƫ99¤,Y~:hn/(~aZrqL,tұZL@?<B  Dlmmqf>cZ?<8w\c%"ät4 lEKWq31阗S.0Oo- 'J~z '\#JamX[z E~6@q\J k.ݮ9% IDATcy@0*)3]J$cڵhɩPZ|#{  9VZ̮e@hnt[^&eGzfETa|B(AUl!lBRЩT*PBb+{ WVA>R@~ưh6IC~8>VH|& E@![DYb j)@;Ι%9\گ5NsѾesjZpF,S|Su@Jcjґ\ Hڵ5±n޵ (hF,,= A.H6FCj\ Z%~FitHAZdzi6-Ҋ:8^P/¹!yk<O,d9V.ku>om{`G?Ѐm@uX,LGt,~g4+^ 0qi?#Ֆ_b87 Okkct,DE1 $ר_E /&LE@)@4?Έs@2EeTz7$wN)Z!ח)Z ]_7޶+ܕW FQOk:7c>io\2;!@Pa'|3:]e б<WFhE;b3$rwyI3M ñM} 3:9+)[2U2]dgǽ+k`WHũՃOAhS9;]0n%w?MBpqQJCuP8oTmzlL:8ɂVN5C~{|DRK+mY FZ=1F;O ΧJϠ\HDzšլM菎t p1i!XzE-Qy_&.B2g_~@pX3Ƙjij &s,m2/ d$)H(doG`$QTG9gsaa Խ;@ cN~s{\HUm‚^8/FF& h>wV 0@yD)x#+XK4bA@*- vʸjFZP#έ5jw7;D좮??V`$F:6֩KOj j9OKWԴ9] b < *j]0 l~7B+R$Gm 9omnDKA @?7=>ZFqCA>^71$HqWp{i3R0'!.vI]؉tJw|wGיZm $qO~XU3Gw|glbvgz 𿎖fjtVCOlhW\c64A]-OX c7ZѭTФ" Qt>TLϑng Vɽt pГ>TwfzI 8a!xo&:>>W)a!a@`Bti?Y7ޣS<`KMw.κ:6?r*r`Uw[r8 DO ? Y?#\0U+P*@ܧӝ}c蜱~nfoP(G}|(Қ^隃G񯭡A:i$8 [){ LmR:׺(4a OR4n|v$X!t7Z U+ 7F  =z>569՞f7ְf!sߡsXߣ=Z|KvPR!FN(wwBG1eE7A@.M4xZC~a(C&}p{~{#P{J" ucq40v"T*c> ؏hX )̈8@6o -p8F!#19Ug{Mu7}.': @^KCY=U+z[9NOCP -@xiNi6AhڂLs-T#H꫾>$r~cN`#Yo[Nqf&e>6`~l3 2HKDw|pNC|0w #| d]YB}^16S[(55!+dxu|iIHc9GhU%R 1 ::nfy NqyXx՝ܗ Urhr Ic*4 5} Sw ^R|L{JԽ>MكoG @B:jih 67]-VSƍhNVkW)ņlb}vW͡r\ \lkI`M !U}MZ!yhL8h14a|! )Mv'f FJ¼/̭u,[Q z6X<9-Z1.S>gt~~(4e@m`Ѥ>mCGRQ#x 7G"K~Y#;h9j(@<$_) dp>&cX B Q!8gN 2J81B]SH$[!ÒC֖de s`U9Wugu|I})d gpQ9$_9O\'o|1yhtr3QlY>FK*؝nnZTnDPj*A|~u93Ʋ1 ǯi:ijn R,E [ \t4qH_vTMaAP&@ Y C,f_,gܧu  iX!NV:kSRX&Ad= .İ]FȔR|VӾY:Vk) I/ER6qQZX*,HFSŠG(-X>)s`%9 +;r.f;h nH od(FO>)ѤxNB=4]|f̸ϵ8`@ wֻ1GL e\-h xyD~A|(Q _Sui){5_0{QG[g@lK`ApNnhD\jS2fcx@x8gecm4L{~1YKP("..>ZBOC@$!?r(r`E7Y]f{}'+N>Dݍ0pMk=#aP``2:ZOnb5g^W+z jB\@$BgE%;}R*Ie@`Rs_ǰPơn#Иڿ8P>.FnA?ގ ( jbٓtcG8[FM/YpLU4|P^ LZA#hE#)zm#q ggHk!4u#) lN_4B w"19x>1nCzР eh@B[[;"뜐h`bS@+2527jO! y@6g~U*TE T+R+Gf&~  -ș27^DZ+Xl?`?敷(sh>:=![ݼu#[__#h)`o\V 5tN~O <|H˅Z1JZ\ALPaP?&@4=E/xת+X<Ƞʬ Мn=zJט&E!V5&2t5K <4=M#;|J iJֱn萾\_E%8QpU;8$xs4!u xS.Y쓫e4̗549p<印 "| R6!j%` 8g"b:_n %2!s`9 z޼^o<,!1aœ< -ھ 'p{ jW;AP!E ^^"1 ' `9A] c Ō_ʰ0p}/2ڭ/o9gc)i{P*r$fQc =] -K{(xp=iqRK-#`]fy7wk/5,s#E$ɮ%鍼qFƍ z9^!},(cߴXH;gA49#f}!tAX3) /IΓ6m9zbE߿of[kݵW&Rkwg$\ 9|n9]5dirć }W=23 ϟFB&m,B#4m9n[ 6uxAaT%ڣݭ0av p 0֔90 R=dfZyZ'0O`5՟- ׅ{!m/H 6 h!"XTڑy/vYuOsrr(}~o@֒A>(Jd&jU~4@krءiZ=Y b|$=kŊ$Jo. &Cn߹A-_C) (DS옔>3C(rߑ1,\1m( \sā\3-+pTI?})8FS5S6m͂C9ƮZv<H j~nXh@ȩ6*zWVupnS"ipDH5 @7EW& Ѵ6}tu *Ҧ05w!OވЭ. >U^ ЕZ:tĞ(EQAp=OX= ^x<\֛y97'>+.qv !^`H֖kKG[|.cM"Mw١ DV Y#r Vugu}_3OWG>|9wz zƣ;<Lᗦs[ڪ{jݍ@݉:GG Z"_C'P|q`6]BQ325)e{Y3 @-q{)sF'+C˂t/.zĹA sXWHYy(#B,h&^*Bn j' m8O䓅B1uoj+ /ݸs {مX'^!$Hp :G3,暑qVv:{דS|kXxCdQ HM- h豖 hZ"[u"=` 4CDJ1|/\G*ϔs{@.| /'ˁ~ZP_xN?o в_0Ԙ{PQIsjj5R&IwFjj *Ik|?s>1$ IDAT-Jί5B ܞуjceBAfL-%JꀮX;'ao֜l~2aA?FBBdqծ1G>ա3;< M  (^3"BY Zut 1 }G}#W `3Z{=ps;6E*^ +~ RcF _Tl A0'WE_ 9V,(>F eX? BڵF4F{b 㖥aC~"l7D lW'36m!',郓HB)jپ8¢Ed+F ~ 9DWkKsUƹ{ 0y>_7ϢGhD }2஀X$B#5DLM>|O?ptt\ͽV 6mKlZ /諎@3@zyЊ_= IןYZzzHY )ҳx?4^7a>)2sր4gKw 샏U87NP1A)#a7hQn0X yVB SgAvxF'OA^lFӢ 9kU!$uk} w4 26ѡ /kOHJm~X9m}s ^ݵH.U'B\01݈~ØRI 4{軡Mys L_t`F`dj嚵GXhڨ^Z QfVR$ )zKxmϸ U:ud(rB=kk{;TsCCJ4i+D+HuBdpV 9j5^=QȈ"(>B.zr+l X)J2Z+XM1H./Bc>y,  C]  .bM~qh>nǛx$j3]\&3*( &q5P^ůpUdšCc(h5RLP̮q@NV Nq+Aƍ\1;߄4 RKk:w ,)CW槦 .֬9ːE2 ,dt:i\<&{=SRrciHLBw 6j" ͂0Mw^SFC,{3a-'?mZCirw{ =IVqn.pM{ta3q VoOU"m~ĩh pr<6`y&C!ڤ@>M򞴽!'t2k4RzMh4m^)()4[_D,SKOA M (`/4e;mRx</Elcn(m,qEb]a#͍%[ Z~u<]L~3c,8p޴ppCMXhfk(<:an&I+c1?%k_g?t";6@{npK"4 $!`cZN9qYfE:W ]G j-yh6씺j} $C?Cێw:Vg(Q5 KU,5hOy|W?1ާft}  tJ@mL0C "j p mgQ6e"]#pԥoAtIm~ IS$ʘ @5 çEj`vր:T~<Z6X\* U+ n q63KIsT6w1 a|X1'yl. ؎3b=\'9Dn qf89#}ҨZ5})jFBQ=`5u H\~S5nY0%/-"k 7 =OJ,pdl^Zb@o:=REd*T~XUs7׎ݻ;zY.42nzݽlgk &_^h=׫i&@ |<dCCw+ .>DgP ^Y8hzY`~9 QA4A>ҤAMxhe<Paa!t@o4I}5[7A״/$ߌnGCy[ǕY `=1, <]4o#XI' {_0V//sb :`1=NWCq oPXSAZ! %:10&{2暩/hVѺҤ4}~-/1',(&0 fpg|Rj;QF,As`E9 +ʲТJ_ :i8k76ngjԡ|O3~^As_ ms-饦WmGj0e~XMj3*l#QwS4Bpas0Z@ Z6 -\p;wP(视5Wɳx)qm4p| d U~ 4y0@PI)r`(N 1\34OAA \@PPo<P PGGhMljwAU+V K`|<6`HVaAn i^B !kMR q.>A/1F[^ S۹ziR5.+6Hkcmm'CS&T,\`- ˭8 dj '8b} t$AVMI\u!Rn{bݸ~cOg8-s`8 +rx//l.W7A@r05(ek^%WQ 2u?Qp-Z|IB;n-ϹlԨIPJ6K y5ҥKAhIf;ku؏4'Ox u.c"/i/b@b|3]#Jr Vr[EY!E:?L'f^@368jF&pj~k5s+(WkOSHvG^jXt=5NMUQjԦ`^Fo{C=p&|Fo @шwW"P s MC[Tpd=^ޜ~.ZhC>&nP9޵K((4IXSBKA|Z IS0yzx..:Ѹ=VDԿoE]clx6%_y%!"GEt> Y ]GN5NrP L*xc@ qp^dVsx64iV5NO9gfU_'}'5|IK#p tþBW>OA zLn9 yhu*Sďql [6Y_ZgI:^EIsGPpH]4; s 3_/nTTH  u:=4c2O2Q] 鋺oHࢳ@J W{=䓚Dki(F:7:MGl"^ L%we pN?K#ᘃs4-~9#t?( `a@>} jہh (@4 N֭~XPO~}f'u k/B)[~ X)Xp̠6SfvLBn#kǺZ9 < frEaz]Z$@1O9;"g)bhRˇ,/@/Qř`g#'ɇ$[h7I[?]+ ?C̥%y |מNe| 0У?zar5V`B"?Ũj ;;ݟ%+M}e݌㼦8#N.!48ϕP².;!WRIc9B{wLX@p&I>Q(BVKa1{6)L?B:d\*"nlm>ױ5CLȏ@.^~_W{43Z- U!i( >uR-H8OFθa)MӠ55QeK} 4H Z mi X4kGn|2[7AH=0#d(hTg"CW~%Ȁ\QW:2 ̥'7h eݵ )p4CTJV?vy&u,'SSR^c4B{C4h'sjڟt+hq LR%03֐V~&-,񪼯.AMX;*iASBڐ5nyőSaLp'Q^fOJaW6KWO s -,@ݽ{w3;88ėw'o-ֶZk9Uu\U>/q.NNB+)@HH< DD#^@[i$Z B㎣U\}o~VU9N+y^9ϙ{5c|KG}yWys HF`+p__/jd<`o{׬ xs m֋Wxח;@!p0NkZ,;$P'9 5>R+Z* Mqg4inК+?x v4w ico,stU=4Vݣ.݂d9|M+'qG Cˁ5n\ iqђF=Q<Ǿ }5&X&(vq*δf"ИN IDAT0kAy<#荵+DU]io ~gP2Qjh߈\دY_*40%G Oe0Vq`9P ;&-ǂG:GzNX6 Aȶ}s@zh֮_ Fw'7VD~ b)|7TAOb€5j-I@K<4P4,Zvױ՚Bit:v/^4tW@PjQaL?2K= !-x)^x@K Y{wЄÜ?Hѡ)[Åi~_:OSW7{&p^mvn/|~M7@/~U].(KnWY_ŤlT-MvH(^Ăta/6ЕR5Cuo(tjA#VlQ("v܅$p9q1 #?XOtH?:z,b)6ZƵ,دsU1ePK`j) 1AҋubEvey61D׵SN, 4_'?CpUnds, "\aQʣ4|Oju 02BkF &q͐p@Un3R86v3<k+ ]c6;)Wx;/c,-f-R* Lmj6/>dj~Bz4W LjV mS|`BAMAA5CLOi&xǡ%msa!y b(:g+8ipf#~j$ݚK`^pPdz`8/Q0F3oN[ΊacS?x{Ѭv+FWPc/.S@ȎÐڲ$Cj 6b?;|Nd|n,?iLkSvYb5ioM);V7곧C*ΚM~LVq`9P ;vo_<@p|ysu:fiW|x xegjHPfZEq%/}ܸG>;=6GїHVSX P%Rٵl5 6f+2$r.hB51U(: 9wao#p4)d \*9'ASKd ӌNnf!H|/^c*J`,,SX1|~)KR! A9/ldlLcfu8_7}*-B*qLAj5Q8Z'na'n5œ-qA9AS0۫3^W鐉ijnԎ)#r}tsyG7)K#Y5?āJإô x2QhUG=A2_A/lME3۸J78mJw>)~ǘ] m0խAen`hf}֚ǧ,@ajԬG1?^c֎_Fv iI3. .D.3udu_.\qb))Ф@FKu=F\{Zb_@ޚ(=[9X&i)i"XO72Rzi`:kttE`9!D((Pnpb5hd ň ۏ&ɤ[B)TW4D>)d+vnɜ2Gv hv+O2ؔC`:b1iQqva|_xSO,֋S^K.x-$Le? €/]_shM[Z 1%`}U$c#p<  ʾ,๰P8Zj 2jD/ ܙ4KCԱ s7>kZh !۴@9cK p`".PvȭfxG?Chqs>~c&X:X n!U<pC"/m|ĝCЧVʣ(XH=y>Iu : ͜џizOiB4PI!cx}]|H>;zOV$?J؅4WH^u^?λ3dd5jf*80_ R,`6KwLgx1= }Ft`-xaC4" f@/1`|* 5YAV1 =GKtԨp)\5 ~h>#K)R8 au0Я+x{K0"l>̨߬/ Zi,w\bk݈"8'9 68A0j$[Eu! FFZ],v^|&]}nHU͕~$̷BEyiIZ'GMK T&bZk4]X/ByF`y36Ps݌Sx Ԯ}[ZOO;a?btj8 ]xJ;L#H}.îr$6C-TA2{Xo1XNՖL Q8yt\/)y7c>}MܨuM$5mx=J 4_j/dzhz'z V@|Zҧrc:!'¡=Z܊$݀Ex' J}.v^aО@*/vG%sXyͰ> ̕gιjI9lfV2g9.xn;tfL~KnDbU<<2_% ~))AL6E:-DU+]Jr .p:G?Oᙅ&<ۭNpv1j}k_kar,Qד% MEc}OgAjcup!{hv'H<\/' ,dAQ7hN;@YO$|p y_cMw0jg|L_VkZ Pk5 zos ?[4X7cPp( C p[v03%XWO( VZ/)2$˭`l1wsh5(Zetp .^ۥs%yh Q~"yq6P(eu3HR7xuХi2[!h랠{@kAn ;ͶTQۇoX>l':Z.!փb%Ә _)瘬4*8vht?|>k ?:ޯUcÕ~-~W@ТO>)FPƗK21b33|P(@K_xZ/"B88.LiH R2\t+T,%J؅4&Oz @PЎ\O>(@z)!Hqe9Zߟ<~Z{J>qFM޲x3h8eJ (PuxWcp4@ckFeS02 )ã'5qQ`#f4k)q"mh.f&0%iYx .ʘO(蹀X{ zz6|N0a+l^,%R R C}yB:gw\@= !8gC{+lc"Z<>V篐"%(Ҫ0W]*tX~ cj'4W*qT@JIo4Eyk@j=/v|| ,B#eΧO }ӎM \Aj#GA%Us_T,!ץ4ƅzy jMѝ6nh[um 16 +(L :]獙c}wrZiFS 3 @'!:K+#U*-Tz/5=Z|ɓhv@t(բYfT^X[*0  h%B@g'x 192+_vZ)˼rWV(/1ckpv45&_fD|tx˂ʢڥn:[U+uuÃ#Xh0jߕ|1!ϢPW:"dЯ>w(#xtC#f X4- XR)Glg(qE±hZbx 윛-~e~ѿ+j3Whs:on2>̡Ma\G8*ҨvԲ`ւ<3Vǟw~9Na pRt8 G\S cAPGVS0mm{Û}cGj8p8P wq|K_}g~fß}SzL5 jڼ/\-~VCj켍=L5ӗs]  䇫+y\ŧnGy+%AQc(h*!c}$ȃj9 J3vuC_~ꢱkZV,VA=A% =='mݜ՘;%/OUSƅjM]OK@. k&?8Z`m \t*!4Č$[,x*5kOڷ6G<"-.k  IA h{~7n]`h95Hmd.988KV 菁x IDATV۲6?Xf d4_QSF1 C0AaHMzM8)%t{qm?X}o\,Xtz|OdWMBˇ€1 ͉Z,1 .P|Ϟ@_67g: >sZx:2`yt!?kVsއ_PM/,4%J:93DK'cD tNA'u/k;Lnj8pw8P wYLX]cz~~>ASM0፟f/S4(1j~vET?mo]\F㍬F]j96m D˃icTݴ=k&q 2jϢZ‰} _ Zh̀.iv`c?hDI6MqJ|NF fEOe `rGhd|W mʽ=ɷ(W:؝Rv|< 4оlP<`߸&B ¡):pBM1/P?e~K~gxwPt0J9,9O]l$ձ@%ܩr6ZOb[DRKxj)^SnѦMs.&zPec=j~w.+a6h&{򲖩lA/~ÃWGK>}ĺ)=^]^7FJGA u@?07%u }faԞFرs0C@-yx{U[*|hƸN`]xv'8`mO T]8F 'MX*ne8`ST $K((Eli~`-"ߗI3Tha]XM4ԼCʶZ!!LsGoe%{ՎX>#ПL5Cq|()F~퐘 jI,[ 7jW[Ł;ʁJe ÇfYSMs9|\q ZFmҗ{4p(عЏ )h|krX{}R{C?v A DfeA5O'g<=*-:`:4wj]S Cp%d5ߌ0uosPYpfX0jw3 4ЄR6(O?8n([,Znjk:h!'x `'(y _"AWԪ27c:qZj9Z="p%ǸkN#M;H}y0oAN:y}x_'JC-?=֊节,&`C }@E]tAK,>,7Y t.KHxOnF%S;ɁJ%!b}k  1c&Ubi]|P> w ՘kftM|) \ڛmxciᡠ˟s{6ݎ *.oT 3~3 C:^Wk* ط 0^ѴN>XBc}abD*?B D;5YNI`l E_4n~W5ϨcG_|S?3 !m\F4}h__3W~Z?t1YN|k2vZJ|Ep ` F(+xk(]Qt0cl9º फ@%rUK̬zS8S Ʒ(K=l̋]pūnʟ[[KgZ86^'`p~ _GJ)4Rа1ص08:B;Dk0$0vk qN%BUZP6X&hB?fm@1|$2>T8}=3F;ަ>"'rOײqxDA!wA@kL 1xϾ`t(h)hhBhA(vXO+@V.Yd<\04j U )|4>!H1!1KcɪN'hY)zooþFh%^bgoN̶y3@['p?qAqn lwa˜k7b|ꋵ=`苪wp7KC/$Ŀ㏼}՜xiZWW2K_ms'`S+Eq}jr[pkAg1;j$3ɲO[%u%\q! 1qAM@̎vCg@;2z溴( :ji[mtL }毠nUa( @dK;k8 &C Ckww+}rs~{v|`MVl\yiёfcaAټ~ݶ%sNGPq‹bb9 ]SUPRip 'K't؏?K I2h-wscE_V[Ł;́Jӏ!N,//]J* u 5AE_@G{Dz /H~  >˟]10OJO,Dt+֯ןN րxM46E rз>)ykP aP c,ϟ=cND3O kO7CRH-TWf+"? e}s йDy f v ʄ?ӟ;mk[f ZܟlVY)MsТp5 } wޱ`C: :*?B"灒^krԀ4JnuSԗZ̺P+.@ހ[A8zq~TUغHM :D FtEI*:I;N˂7V3k$8瘰4&~ח0p1/T@p/a1sׇ)Iun61I.#T\h!FU'Ź`l>bMX05i,X;ubm_xGƠY*X@!ŕ%tx>jf,8o,@䏓J>'{@`Ayh+-f5!C!@zQ6y1CFT[Ł@%CzH̄ />QKݤ%ȏh{U?-Moʟ@jQ_u;eQVMM}Uń^*iMXeE~5K{cBO`7V6}5mU@0]. 5@2ҿ]j4}i֟<Ö^^!)D+.vs)}d[7}[~zv@ف7ӽk}OH'va$.V*LBZ3L5t\MG@!ShK4 ;`1X&(&oGh6GzZ:ibLI=]sc /؋cʢ )>Ǒ 梻$Á5nᭁ)tk j8 ]xJ/|W.Vi/[&cK < iՏVwpb"WbZ#pNm7ͩ t/lMUhF =!Џ:~}6g? ",!4)~VJp 0MF 3 B#u'h.KXQ$^|Qa`y*J?ך lcK܂9|py1U<ʜM)(@Xπ8؋%[ tHZWĿ%2Ó)Ϙ B|d#|0X~[ܳ{5X14iђp:jk-TPRI_&UTn'פ**`@H{kˋ˺Z^0KUmgKs'K;9}hoޗt5aQ|cApXIY5L͔u=wM~C RPk@ o|UT>QBjhop\n F N'8J#:2It 7p]7n1j|YǑ1 _jmߘvDs68ijZ[9 ΉO Mmh./& g t__ k=0X`aNf` ӎK] `ɟK c_7# rn hBh.prgce=D(@V#fNe >BBnbdJdH{F``@ !A1Hm|&9ߩv}TO@ 13}׬uϬ̏jaھAl T#XP!@pV}N|wU ~즤YepOp䰨5(ۅtzlǓIf T4BM?X/q//oKpmc( p?xvǕt{D"P0PaFgt!0wA cp`B痐} !VqszI o+^yhܗGͪ׊} W D{;h vsԠm }Q U9'F&-`iuM =>夭ivh5Bk!Ҽi lݼq\b6ІGPh #hE#s!/;fmk>gAzE`ESs`u?ۗBs K梑%1?;7 ,pwx}*Ypo{JG c ,2n G:%2~g;2u)C/G vC+3{`R4q8XJuXf JU;^NNOe._8:9)^}M#؝Re߼ޗev=jh:;k=M)jf|e)[_`1@!`L@x!)ezk BWYq4{ԇ-^ӏiC1 m40rFѠW_Mo[zsXJH֦Rs2AAU G8vi5}}x%kBbRPN` @+,4Yg nJtMLo ׀g^oC.@]q*5.H?w;5bdK%1n6fkϔX0b~CgO_]gQx+/f{$z\1m<9l:NY;:eE=E۔S+c*'ܬݿ/w԰beϢEӅXfiN*uT]B/ }O/F^g#ܨ43i}9u/ @4-U_-{\2:y:@Sq+ M݀!&dM_p4^Z'CR35n$ѯ‰{4F]cU5XA24@<4M5|o>nWߤ 7B<.#}N[5yߍ=hcqz4o }Hu13n-}l8sǒkk^Z_6St%ChW,=,Zx^嫆yA//PE҅ þ?%Q{l n?A>iJh5 ~KTlYm>*?b7ڻ7CɆ:zxa|?XK GCVxEEhZ H?~?5§{uy~2-4%knYgi* /usSNpLGT,9]k?.:,y~vzH~c/xQ{Y49&d3{v-Z(tQ̯1]3f2ʼnJ]pC.~AVhizS!}`a+@lZG h~aΞ$oq 0 AKS * Yp`m 3RLb.W/myTs\io`o v׬=gs-Ь@HD!l@I1+k”)0PD1sBA^CTax zP7oq'S`C:>޻O@sU^ Yqɓ'y^jy駭O Źؕhwc;Vc܈DMsSU0n>;Zo:I R:6+g%5AluW+Mt5lp11CG ]pQ7%a&.P_**0R'$ה o:_L>/&:33Z.5w:bC0 kKGҰĭ.#Y 0MqO9)1#`A@;#pg"_:!BEyO S)zh[@`fBeTNpv1DƂ`]hlh-/AK$' M«Ր{Jx_]L5l^3ܜB;WyMüE_ h87;/lʃdXgDk{_c LgIl2Q-A(ly&9X4gW\Z,3&ڮ"B(`k(gs-"l=*H((\(@3)y~dN7/Λeʻ>giXS7M?r>7qdE\g\c;ꀵ'RD6iEJ\!m>`R~784T/c9WKA"qNC ),ɿj8 ]xJ/1 hnc,ΈAhUFF7NOO$ާCL&fElT>Eo`` DZXL3@Ou; /wUmQ~O A_}Z@,=ЎP2x] ͵s+I<:!~S y} IDATRS}bX)O)a[Mvͳ]a x 2uhdz}XO8|Eo*N痜N(,e-6>}iIahC79+M J *?`iI:O^?>*?B^ub}&z XGU6}A?#_~F?lYPO?ouG p| mjG4V5…&f:T#Of@dJT4Aڌυh .Wկ7)>Si@@lН:CA1 3LEV#X~`Pu  B׼%_(/却hj: F?Z8 _AλЋvcGŎf42Zaj}>_x@3.+--¶E8@`>%ѭ) 55Bb%&Bݔn:TlAo[,0Xp)S^B㫫Tߟx=?MÏkv.g|9{q{Nj M|&Pn<71ZBX8__]PƤRXm󐲿{i `&Z<إO)%N˃s Z.^h=;@ɉؽn!t|wc? ct^㋯#XhN6 S}q7lE;;4'd0eaaǏF@Y"ÛCk\>'3e .pv)4>|M `Ϣl@cS.߿eoo <~}7@0h__>C9u;((h#_ D"Z|/Msڼ&c<ÀnP!9 0P W7|&ZԐUPS ˊY`j܂mL%ݢNpw90 MTcQ5~)߂k4)XxUͬP余G6璣l_.f3&=ptsvx P,sŀN9R~w<*(ګ+ݩ|X=q@*Ef.WƂ4z`yJ)m@YØM 0_H7FOF Z@3h#606l]{ vǵO~kchP7ߤTqYf dhv.鳀?8I[+3V l6FL@$pu̽'N\-hAqmXIAED!A'$0;[x|؀vvzN# X驋rh=q ;  EN3Vz̉#cgq{.sj-d,og/hsW֯o-dg\׈y0V2،cj[l sDuUɉb0/*yTD?(ϟI? q%*? f{o[7}憕߮/I[!w>8܏XPT/ʃ ,\_0kO]HCGCFp0j1/+scQz#Wũ1OgZA}Qw^SSv3A|L<%AAM^6!aaH`X+??Q{嵏ݒ?!UO*g #/b bAZu30; ķ4`\x 뀴[(q%Z`r{[>~0-=ba?biF#v8g%BQj%C ]>{͚QpgO>Ila!Sqs90x/u1!.ԿJx7h MFR/7c x5^)7 zA ӊ6ATk50sFV{fZ ,^@hںj!FR{B篋@mTڭA#c *BhjM٠>NXd_o|_wKS8S+ .gD3grR+%& Zej8ʁJ e5,&TkSzݐh 5"PM{GKQ%}Q;o0+Zc984SFydycm+RٟMD|)lh|# x2g|m;yNջ` ?si 7"|\P`+8LjZin#49k1Pc`7K w]rӏ}[o6,Yk8cp(.qogXl'^G -.?">SNAddDp|imТ,<.l'@?oۤ8R9 LM/}hYpkmTl᱖ hShEJ)E?vPJ#<,/M&I"Pe7T[Ł@%cx.(J3* 0U.j5cs[ B. "hyR@@{_# ?;J5klMB%PTUZ~#>5kVH. ,)#XT,iQRԿq1=S ٽ^ZXZ#}ٴ\9r9 5ƒZãd?݄:0/;[].YB}f@f~=zm< 綃'3G5{h(5+*o[f̑ҿ[iM"KJ|C,[ mXa)n.k6l ȫ;J؁Tgz틋PV=M'<@ KZZ-pMFPńDI c`t\f4[X8jhb 釸ԎJ) )P;;bA0sW7CH+ d1&ߎY32]ߘFH ~.)'?D k6 W~|޻]K?=`xraQv+Xl*8q(`]/m#]aM--%;T>tUY{YqkRVp!, I3dN kO*80p1O?aA/-0'#i&@LU8K]zZ?Вq"&o[du2'h.;#`LA7<ڨ֯&;`2+4v> e={34+ᯧ; v&ۢTXVɋ2 l֦ijV JGǮ!P@V&1m[ 3G(yjCHWWkM_O/vJ-ewLt+>Umć쎠 cY V }蓗H}@&yb /]6ŠK4+5YA_?Y#G~8 GRz6E5t;xP'up3Vq`8P *oz:Ăo o#L'r#ۂ)J0@¥~e= lEK5@< V+V33 3Ֆ_0WO7" o %g!Lˁ@>Rx4{g(,jBjA̭VzН#=OؤE* ձCz56.kEPERKM:i++ ߕ3"Pцײ.5>N?Ŭ:gQ,-WO*#|FFED}@G 80 E`"%tB? 3m7뛀HzAZ0h L)[ˋMF#Btxnnǀ;ŁV1 m4ؔ06@mx㜂A ~4.tn"y#]4t}Xpk- LMd "9Z]|_%^Yxs,p+شWR8`*ڳcj. FG_s9_)…k(m+(HR@4`۵Z 7[ǔ3c;RiR}m͇-iW梫 {s)l·]a 1\+VΨCy*Ͽ眔P6JXhd}fsyN5E" o aߊǁJؽgVQK//Vǫ-/>m-~sGr|Y^, kW_ =)wnVg}49# @]Lc7=ՒҿOnR`>OD R 6mf4*xxSYAo k{KGYۏ^Jն}v/op䭷>(zӂX7Oxl4 IƍV)Ș.Vb,p.^` 6dP6Aj鋱t`GnQW/ *g.BYp@qG\ .\# ":g`K6AE4cv餏3~܆)}nڶp< YVExd eby\:C;kAxF5Gac>lnO獀 ҩ) Y{wū飽W+*`WE쟗oO?GS??^Q8eG بakL|AѬMS[w@J hbv S(2 JB IDAT=WhbCn'\_5 qcҴt7Ρx15y7@ORpu7~vYm4dN?S،T4ahR8JN ^`S0\9:(̗^oZ nlǂA2ig@~ t˲\Lt(8I5 /}(M[qق6Vf0|oOPxqѫ__)Vq`g9P ;*p-ϓ*q LԮM]]7G1?\R@01$l]ىH}%2(tyA_-ŀlN#$]_[0=Qac Bi#DLR72p,c^_dG,0?wc7?S(7m[oP]xaF! B?x +Us{!!/u_aD9x%dj*q: lE<6 5Ң+šLҬOPW*>*`a5/}燯/D?y^U  }#V|MznsV{q_|1.pJX~XqA}mk+tDVtѶ# b0wѪGƀx4}6>o٤U{;)؈mA җ76B: e Ԝ""4/,+ƻ39ڐ: <4?qr ZNCW?\ä+ fZ :>>m@Zb}Pޚ2O;q9V*<*`a5D<`R1}߰ݓ? dKD@2x\|=@ PI0hf>sA XG h *~x07rhפ41m@DCS.EXomB7]kYaE`T7~zWƵ_>F(%[<~f>B{W.|^ >PC;*5sKoߣNBtc3/Mu?{s]?qXt/t/tYO '`(] I=P t5Tm^TK i|?ӧ~=zo=M1 _: 0 t< #, `FpbGO V\ U; 9=t,֬iVMV|sy]^.ZQj׊PЦ={2Ԗ֝p4:3 ԂՠmS(tn~ޞu,Uq:/BA,&NcM1Mqb6,91rݛI \g%t b&i}MB>d #|ꦙe[BšuFJE²İmٗm- m"ѷ:IJun6cH~zu1 -r)Aoֺݵ+ /\-hE3H զs) =ZÌpR$H#(xokZcx ]= *N¿pS,)JLq0J!QϹ \>6w[ 6 PJxYd580?~nT;B;*Zfp^ @0^jyL盀&oVbQ!@hxC[w@1+Am:`MFל?O^{O qI54s`@ 9pZ6,]?|{{>xU@:! e\lO߮3Clk2/oNƲr=ɐ|o0 ObAWZsIa͝DTNJ;ρJGXMs@@e4ΙstHkv< SrB;@:`hwO@!0z)Rp،#%g&ZJ̓OXF6AhXR%)A+N7> )mvt t a+:ЬJ1)JD(N;7(lGo[H*h"zWse Ӄf cEfcA06 6(^O۾/׭bg?t窽2RǧiIZ$Ч\wvvj;2@$ ,^. =ϕVU \GOmnD藥mB@gjz蚻+=HWaq)N|m$Ov* HP-@6'+\9H/f #o0-?Cf8閷3v×}ӷT\ޖڛ#y^('=J9 @M #mh;4_:zgF'6¡ٌ0KԻ.h:p_CLrC#V yG8hӯ?F~rX{utRb>Kj6i}_v7?!s.5/GڟO6kO <tn݆<4ef@qC6|wD (`8c6LB)gV; lzx@c@ZYW1O@g>:KyKAZ{ $ҭ D;#Don|3#1)dh@J Bsa$*.9p7Sp(?{2)F0P2(`tY1`}zR(i'X}2ҪJ4D2nNF#ðME 0PZBawXZ4ؗL,ؿ?'v=Y+Fv_٠ʯ\0GEO*S4XUSk~vwl5soHAvjw9Q#_Ns'v@m4̖=J9 N& dhCFcwDU0-mV [<><@e [An8߰4/xϺ&VtV`hN{FZ T6St6WKFMoRX%pGFb_K jHKuζsw,_bwfq'дhOLn(WTDC2.Z;[0yzu m G&E 'IƘ{26V+W_&9m׾|kt{gfT @F4Qb>MU mf}Yhrϰ_-7 $zҲؖ dj-ıC亽*JJ2Nj*.S]$ C/ @F2x'nVO|N͟uYP؝ج%1 d%ԀMM)AB CW"VTVA%N)V巪r6x^[%N`*YoccΩ[ x73JM~s}HSwg4M>þyf6mM5XqG1̜e?VfH42-ʳ _2h JY:Oƣ.]lKMkEO*4ZU[k~VsQg~~ }$l{jtG.uZU5.(8gATĐO|sb^Iªh4AC WiT^IVB_^\FᇠV%|Cg^2*yнRh#r6 #:MX2DCCh]|o6u3{@4B?!—Cޜ!qap$@T>n8X``, /L1NjB~.^|5~5}%|٠k&/q6, e#^Fe0!S_̐ҋUpg} i$KuTTQb>UU5 YG ({8#Y=oNg%x3S ŗ]l=@[M[` ^)8 $ ܲ 8񅺔m&_زfi 3`A! _BZ@]ΦEZJ![~Iz7pP~3F*Wmg"{3ަP9֟jc]}ʹCi}A:E&1q2nnӛiZ6kǺω8YA'_ H5ѢhY6Ki3_RQQSH7gOa&QX׻?@Tc(@|痳q7=@YCm/:!`dT67zܽif6&-'n=gX@k๝CW<88`׾=`4z_2&>2:En% >H2g zJbsQӎ ҬҩKw` @^P_lK:Ns`@ZJi=`sY!2UӘ"oW pY:v6XF&Li:XԧA5|v ig7=2PEOLXgdoDr=yԅV"3''8A== &ma%LڌWa43rD&xD~L,kS{Gw2Bҁ`NO Pl T '{|EnUZO<g P su/nX8bggVEE~ T2<>[odf\܋PK&t4h )>T+w C: K`Cƪ7jA4|7`rtY7yl|hh0z_;_!jWC7m&)웷Jx\ \̈́m  oQJ^)`< \d)ߓlC:T&Q1uu a.N:@[ Gt<$ 7$І0^2<Ff\e o3^zb2>g;w0(:* |2(P1qk;>ˤ, LsՓ#.k_-/`X {yvўLHWYƧnE&HӉ]P9;<@;{@N|LOcEXM7=4Ns@1`us@mc=LޠIL`Y.wR@S`;JQ\\' `]$KW.[& k5;:~f3R|WK%|g-3 >87x5V>jbI#`sv q q9c&>k-V98ђѐ~.YLVqQDiZAv ^^twG'?n:۰5[kt}1DuTx(P1jŖG >h< Fm&mgV<#BҶGf:UFJN3l[ҋPBh֕<DM@(q&7>$q*$k?l8g} k;དྷin=rQK4$#^6)$3NRڪB߅k˖nSa,zX'[9:g{8Dw¿O^h ]2[?i%sSlbçM_E+ 3T {$xGjOX(ͣGZ;D(oޟM_n!IδgU,+=ڄW͓Gt;Nzc35{۷uX}+3{kHܩH/»~n:* <*We`&{lD ̈́+&[= ˩P; lfjt/>W:!X~N>U;b7k.ӑˈIPX*{GЅ:-t'1(1_ wbNO#鎐0#=$΁y:]b ЋZ E0&7-NHڻW!7)'cZLXఈ}; هn;7i^G 8VH(WpiQ,]5 )iIǢZpTM|KShplyX #+~<]>W9!V5luo4/^;sx?ycU6\!iU* |P T T(aqsO8)$iUFk("r#j\uA0̹\|`$ C؍9XUaPҾnܢǒ<3H-+h36ꓱe4pZ_<ɩ]\u3C㺴nO 86@צ9hyzOҶ-Ap~2(j} ~JLlI!|1.Bah]4Mj? \) ._D5+/e4'y蟦:5Mo@8a_R|,4G,C 1c`#\7iwҗCFc&k>Fٯ~F`#J*|t'mKuzçZmc"3.w'p0uC06Ӷ'(JZ=(A(P1JUJ f3bab<'89ɯkԶKpr *m?8{{k6ˀ)y_TIOs/>Kif 3m](DK?f=5c`4HQ >`Įz4?&y^h) dR<.\]L=N^QK&APA4Rycc x1v',Gz!0M=9D/Rڑ+bL;K a. nߍ ` >oMu' 21+>7erEZ,0xnR;2W @y_-W?~#f}{/xU'v>먂<oAեG@|dUߏD/ᐔzق5Z 1^y;²6kAĵo={>LwI#B{ odEk/Z3=`)Y9QPT)J9.'tU0C F@#<&l#NS k.S|ǨϹ&?3u逆rd+=$IE0 ݦ V'&,Щ:ЅmφFYP'-*A*sR|e"h }0H 8K6(ұfC@/J#3@Om$ BGяM|xxo 50O4CrV-hL[4a C_5m5@| zPBaXOX`6&0j8uOѣ'Y'<_ZZeJz[#'2wc2y 0l-h7 húSx?'H1BWGEG@<G Q2 ?]VT[}r:Zy fDꖯe 4" h]D=,˖J 3b))*q 8 SCRŃsbzK` uts]Wod-PPX:+S5 0&S P)/"&W+R#mi&:ј@;tII=Aq0rBB&a h[ Ta0O<:&2Xj,JI#0ۊkƱ_w;4Fvl{-s Jho sׂЦlUl:=Rv˜Wd } Iغ_%3KBxOLòlDXDi\4-rjwvN5Vu˫YOs\4JXcklofQ#gL^!<|_:(M_lR[{)@38Զ$( Q@(Z &j][z@eU^A[|;Y5⨷T?h6QiAN=.3D%c8*_]]fYT][H:q5"ESlQkKF3sjQFTI0f0 'H&p,WWj2tȌ!c{tmP:(kXe0IJ|Xh67`g0vÕ'2t%.&95e`IpcHVgOz2r 2MfM:xYkvv>ibR{U@qVgȒWB`##vjNxۏn{_kzyNjVSG7(G`])7;{ep(Z=uf|@@<~d|) ȔEjdw_?)B.-`d;M\e>H 㝌)L)DO~]R8lt:&jq5HT](. 6>HR t́ eU.-9LNsP $ȯ }XWM+a:I @ݔ)R#K~R%J~B:'qI#YJl*ykv)HyI7c# 1uФ Y@zS0 rdJu7 L2_ao^ M) ]uDvQ`AyHoF`CFF7hgnwMwȻFmˠZw7/%VGEOͻsV9* ﷟zE!~ !*3{P@d^ic>s$8Ӗy=s#_-Xvr ԑzx))e8N1lR?2& 6 cЀ%Ҵv3π@<@2`XAXZv} !Z-SaÖaбP _y,9ETE^ lWPxDiGhDF,57opt.-Y!K/\)vRU [zu\4).LerU;('6etܡ2r%ۥzkZ!E[8[&#BE'-mB+ɭsJlFfp$4Ҵ"d,}8Z{wpoSm` VepێI`+HCK)+cC^ƪ&C{p~hǏeVjѭq>uW,:* |T TJ*Rx-w@92e"/A/R1RV҆90(IL.S٦jTb1|:) Y>B.X}zLU:uv^ =zjRQ W::X:q QӶ.o?/a 82J<= UM"я2$CJ:9:` Ѐgt&Ml$ ҭݳln`o<ϳ0Jzm_SV@p-y6OiMڔɻ$%yqS#"MK6-J̓L@Fv7slL:@0y?cM'C$רc2{2KͶ }ZLe8ik.nwT+| r<^<ԫΝ'\gO)iz\ekc2fչH}۬h%2]֥70qI[0WWLR]OĐФC{:jPބY f)%`ju{d?ؾoтB+guTL*㇢f$C xxgے5˺ͭE=&O1黜<@2pFZ]ӃPiDnj/d,@"1FmL1^5t)\:rtFs j THdz]fA竀=> |wjM愺 ꙰] ~ ~[Z'mkYɕľ+m [m4WrG@ @T iiAG`pvj\ RLM  fz6UdS̓.fHv@]䵝!}e컌ǘqCMW黊*v^_%nW,mYmF)E~)ĨQQ(P1D*{Q?Ν;ϓ5ofd2qvͷL9Q)$(I"}a Nf'?3+C@O\묧M;6j6xfN~NXwqA}G`@bggۚ.SxuJ؝Xq kj2 R.1`HoѦ-$pkKQ "aWm&Cj.vX$ EPA&?(e@tAoj ݦj KJ2`ZH*.!*anhraL% r0/OȄyV*yG9|o#A 1Cv zQס14 "N6`|HYi@dcE*ʒ'Cq|yIc5kx2&pt B[7,*;LM5lXu_(HG"_(ۿ _֭;wEȓ$Z 3js^U0_tɿLQ'1e ˺``1Ky6qyﱥON.. kj]*Ǿ`^,Ͷ2ӱ>72dP]I^!31bF%z``Rb@HFu}fS,m08:&䧟}$/ĕiX7LmQ Ea^_RzHmrNp sTv e$Èd*Ef,'!Nyb h((:Z0|`6ډ$h0ϡtj;ƌvH&W5=upy5Ɣ:e4IJ]%B~ePA0 A |Xg,%b2hǣPbzU׿^˜}1DJ'` ~! R盷#DڤDtS^\Jnu3TMlj& 6cA>wr"M$Hwo"(GovA, bEQoG P4-A}#%g ~'!A_!q邌ȊȲ"\Qnu;Qm,_30 ϤAArGru3Eq8(p!ؓ+KE'M/38tqc fIgQWQ۝lC ]jrh+i/Z@F@Џr<̯3&%#~O_? j!1&$V3ayjddACkJP"jc  7vAb{&y/n?C%U%ut>_#Q#|U'81qV@)̉utn̺tϳ´ĕ0[mbr΍w#f]׏s*ۛ6DK`8 Bt?d~ 'QH<XlП3|f`t4[ڤ8˵,+C8'@jϠ W#Y@ȍYh%t*'^Hc%eINj6i# ps`CB0ޒA M<ʒE9:0x$qg䜱LcDG[dmz?>KV2$0+-a IDAT~I΁c8yB]c޹fS+pA72c@ߕ"mL̫v|#g=)X̟H/z5ԯkc=731#!w_t%_u:v{ko}1QQQ.OQ~yLjssȗr. t&A ߜ |Z7ʏL2RʘUq_^b+)Hٜ\Yq2 (7"(FuuΙ]n\,f2-!ilɟ2h-t|%S5)A'RE=.%):ҿswNF RhOɻP0KW|~E͟,#\dM S{WON LGA 3'm) co%KZVhSz}`vL$Oi}uQDa,|s]M6>tIu7}F:022D2206CVsǨ+Zt4/)vto&@K?H*MEHՏ~9{/ܹ]^H}{ʄ,R߿7g-!y 8 gmvI3ju Yeaz 0rS>o<)KN^;?oO4@- <"zҡJ}n-}5L"#?_kOۄ 0ݻww Nm]2GV+\_$dw?rgjw>Zw>&TGEBATPnsg (_~N*rvvW?Gbּ)8'N /̂>ȱ1ߦw:`@F*i6 ! ϶>X0 ~,(XtSVjsu-w0HJ-T!JsAl$DJM־E2%qE6>moU-o|osut%kVıFPwR\EQJH_I9eEg s ;tn cT&}]{LGT #櫐'WѾIVScZK쐲epC99?n+{8S/ZZ8PVRh¡/b FMe]ѡu1,5 U:4ȯCꐝ*;ހx_nVFjǫ! vjU7T>[uE T _G/Hq=&ܯ# ȓݾǤ Ax0dPbZ52#x%`oKǔɁD`$oxd,&@ 1J0|>v'eۤIRgl(@{tvj5SxjMZEDw$vx̆89=wi&4sa&'cԾlg\Mg {e2 WlЬc\Nh& > }Z"K+sfGqb [tzu$dc٭vFӓtxf9Bl&cHZ㪁mWp`̱8m\A[^=\a6y߱I1j:c $|󤡫=| xЉUe}+hYKA}AIߥOPt5K絓W_uY:>&K}`lhd0;oƤEGE)OoPNsߩp8>8xMD`B{5Y)XQϢuǓ5k'adߙɧu.b'0Pݎdr@@U5 a.׆fԭCuH#w=W'65 ø6|`hQ|<)iONpF:4c DBs|'7(u{PK:zfo|mkNH8( .qh\A kht~]r1lAWbӭ*|iR5o0@!%S9ZSD/s,yD)RRZ)$c϶0hId3R:ʈB4yIb\qCҾeEqvzIӪ?1A,U\Z?mVbv3n}1 NK&w Z푼/XD/cҙo7=Fg''sp{x3;GUVk P__@tW:'ߦb BuIxշ$ 0 cm\Pܢ3{ӫ1:33"uLzN\ g>ޔ4o?:9+Ur6vx8JyEs0B(% ^/Z,\ב TPIO@#q@`_^"(@YG j__JP_8v 8D -.s\l5N1ݶUc,aZ$#h>FoO {2=j?nrD/a}g Ļg֠];ի=!p\{{ϐaF-+ LFSS"RDt&2>/mwl-fHvʖsjRC0L{$滱kW;DាV( u+ԦH0-yɅE7 ZoS w62>l6m0}fv4s˟& &2Ⱥ:#ȮD_IҔ\i Q32t1 ;V FIj( _ IuQ){{ַGf'%=\vzLjObL_cJf6%SzIuycS8[֟aRC-.jTHBiز'Ha.I!6&Jw_}-*eJ=le lu?AG_Ɲ⢎EIJg FB?9yh-kppfr켾ǎ̓|u k{q=$j:`Dv9΢)г9bL;g98즿(IK=} ;ؚY~_ᨈ6 dq_R~ }; u1zch&,[Z ৪hkvOoE˥= حkM8$Ұ00p%WلFnCmپ(H_ (LMh iq DFHО~V3 -IœyMXaU29昢q%N#ҸZ$Z= u2+sU5]|vP*씩L+`}B۳.SYX"1LD!EzRGZEj7=? +Q1^]MGڣvAK1JΥjDW ݼU9rhYA5g"RjLhOl13x({#1#([pezpu (sZ Hiۗ,Ϟe3( M:wڭXހ.#Sq=]+I F^gj{ l`1u ^l8J꣢(P1o#Hw=J:@jC& &vg@f $5TɤOLgM6 @@ZGrϔ'#-Klݬlՠ;J `+v05u8 ^?U$N+@f'6qS!m1G{HMיi lуfc_ءmu;@eb [ۃxRLJlڤ[?uNgwL`ڼg]6GԎ<"pcr:qql%|͑2?=%e]QzT1Xֶ"hY5FFfouRP  wY.tS!mz)HSxʲ:)6hdݠi lgQXO&DZdžep(gw6_zV>/8W5/2 B %W6&Aen6t4>T e7CO,yrK[e5/;06w`XTC+L&u&7f^! 7ea8*["R7'5Xݳ=?byf79$)㑍}1QM[eoM(/ҫQzAލ2r +]&/?.{̬)AZL#OpU%g<-Xf 1wzZIIZr6*[80N*Ҩylnlж"`5 mòNiU#𥐝v p][kls? 4i $J;zl_lJs%\ o~P2>^R ok9j_5eA2J/hҎ>dM$B3j{}1&ISa^NhdetŁzMBsnj q! }TIRj`*;w}hFK(W!dpROJYuw*55=} Ѐ&bnk}_uyJ?7YC&XWp/  7O>8hT<0eې'茶#TaJH(#*v3.1kt 2,+OMAf0= | .]dc<w٢2;D+@D i91VԧLǒnU Is9t> ͐]h`N/tƤn17031![>q;UsP \CM?e,Bb+|lBf(_Wt}ɮ1&.te > CaFDcskF NҮHK Ϋ/|&'> .@Z4qZjcO=?W ^ax:8u2#:)4Ԗ ^)^'$:AvԵHideX<°X9J5=u*ԫ] a!"ǢV:G(&hOՁ!g\e~/NvG x?^H*]h& (W{T%;7uG& Ϡ/a}֟~rIrj(FGH2$s4`\)/Ҽ5s)奍{ܢ+9Ô46=&XBWZ4 D+GE*I=UGE@qG`2w W{J+73i6&2Ht`栨:Z JLggWYPhw_xHucsrm.Dµ]H΂N.ۓq!L]Q{qQ}qu4NJ]e\,D0 ;8ɡ^k n$fylO?dMbD_&r07\^byN}=I[LLy4ġ+c@Po{{ Ro٩oƅ%%Q=4$f::ڧNPʱ3cuhQ5cJZvB5{8JnKOyr% 5dF:eA$L$#9lZD',ݴ_GA;& ҆&2FS{ͩFKJ-aH$@"p7@5Sp+4>ZM 3Kڷ"•'~ԉDmek~Z@T'˄C- LbN3\&\] W DIxe>ڂ Ezי+!!ҚҥoNJ@e][(X8A-mʘ(9p0o=Pd( eXo4}8(uʐ, jWun];TMHJ]%W!R~2G:MalŮ~$ ߥ/fI*HzЦۅт)p)^^Uk&/_@j1Y47nj8alPO42ne<5ćC)=:U0qdV/LɵZ)Up̓&>EE: ]yJ[[` 㧑~sR0\MC ߤ?4&f2yһZmmkzT7)P1oҢS9Cpz##fV{B91PTˉU0,pOr3NHF#T_5yH؍c ᪉p䳡4 bgMI@@=.һloi׉ΥRh%4,Ӌ]d=mUnC,S`;0u&~9Y0΋ܷ?n^*! h3.oQqɨT)4pJ ԡ*i;ْWpZM$? Sixax8Yes(0Y2k4- L4n#id>aB`l kf6sl/G`^~51jP>>Q' SG:۶$:FgnЄy)mFE~>LΉs4k]0-792608nlgQQ(R>sɽ{(,:y 399y]Os [p,t؛`IZو1O\UtX2h Qz3m24l3/aWRdNwLg0+]&z8v?Ĵ@@HH7К2Q[1B%8Ә;/ XfK](]ӡjܪ++ Mȿ!>1*}n 3`bbn =$hQeޮj\bY7fh8 7)!V|:\a݄5_ڍyh!-t">dh{|(W:V&rq)j`.Rvh_xKlPRI Z&cP40Y&4㨁et2+m`^#B͈VjZYTޑdn~@z PyIl0ՀKv qu$T&:'LE"OoqU6{#NΪl,StPUd,`"Zny0[|f|q'kM/`2{2)pH#[$.}H6tئ]|-LnHMi;iA@H ftYgロ4s1PWO-eQ =k~,)E@g>Y*4I\/x$c"C5~F"ӖzذfŘ.KQpC6jm7N4@O0oxD M@2Ǝ>p?u,_r[H+|rz~䝢jH+*f P~نZΪ\ޕ𮤩|\x'.^}AIpw{~ 1ܭж]Y&ZO H=fHoj'&x&(lLwzqbF$IHw7@&]5P WBIMOnFf`vJ!@4:Ζ7&6eif)3w~`5}\LX[:ʼ4k@\Pg({8( FKh"m@s ԀPv~D 87Rf^ev+ =(.w!Luc+׬ouW@[` qHDS'b'7 w=# F`!0ҳ*wsS` YUrp,݄oJ+β쇟 6oKհ5/%I]eXGJt1_~.Ȅd{&~T,FeT\8g}-ewˑ9<]i]\Zz,{Ǔ|@ <LuI/?ofϘ*C:a4ScԝgiY|C#3 ig\Rov!+`BL=G2sG{I~{Ҙ;L!9";*Q5jookw4.]ޑdn~D/sop|_vVٿ` &;JNNvV&N1yrM&<6f7Nw;',-Um$m6>`Pb ,~uY@rgw'>A  g шlc)~ynyπ5ֵG e2T]0ٷ1Ÿ`wPJ]F{ޣ۷j=RNsÑf vC B{n.uo:Z·,3 `_hHTDhMje$_S3#TYfI5x&1}1C 0 _w4 vt2_C:y=M1vvQaBalҾE=G۝p´Rзp4 ux $ĻbonDjhP<ɂjv,mGcB;^o$f'B'}CG3ptT1_؏Z"|~L/~:ޑdn~xKm믿+H@s+ﴼ9 8Fv uZ]I?A5JI]:GP:/T4T$5o6ڕ; IliX\ (P5借> jf 4Q S7Msc[ Ьؒ-{_lW/M}A[Jt T\_nR~.%(Q>]yq#5W5!9RߒmA:HRVέ<\N=2t 4? ~*G}dHM6ݶ9ԮtukӒ·i7*XX)g:yMBu(,E+CU`=Q4HO2SQ$_߱&L/Sρ7|\Ww_*ϊNxwTO>A) &/M;dL֮Nv{HK`6اkH: bܝ hn@l&x3OX} o0v!ee۬џl#ak=udތ4j?  в{A4߽8&jW8pXO_Pg :`fy ~{v||Ps4KBO m>(&:h&liK9_&Ju=ggr<tiI>2_NyB;eƘTl-L7 Ik]k_& %;eGΛ>skbju*3ZE5A ci;O"!/ ]}aAi*}8+6tyUptH Ihgz@0p$ d\) S'[f`5<+ dWl<3F ̺rܸۿsCp4,E&}W 8ZH=@{]/v%EDm*㟠 d3Av1!7wg7AZMZmSWAo}\ỲK9A`>-.^YBg6q\1]U*_4RZBԧ*0/" .KڀI@6=Y,;\CY/-OS9ˤ.kL9@jE-AѰ$nwKD\lb&h#!pIq}vD̀T3r`NzY"InLѵ>MPtnE=i9}彜ZR ch~~i@>-C3pW*l\т4;^:* ?*iTP੧2ݻw$ τ-L g!')wW8롶>>8`@},=̷Xڧ h.#2au|]J>fW=+#bI0=_P%ayMe-pw}X4@C7v ( hZ2 @ 0&eS ^U`guwH`"Ar2&—ਚ\, OIVNuphǎoedlK$da0'܏6٣yέG*õ\}tnI$"Bɹ.D"/p"(?+#Ai30'q>Ww7ϳv =]û]k}k{h\an㭬"+@IAH6~%C?8c8<ꘛh}ԉ)Ǧ0AZ.=Lez,@SK:: CцV"Lq%,<]_6UP= ?>CzBv_|J% >NY 0*F}hMBy$y f)hG ģ#ܗt}>yjW?aFZn5e yHW43yVj~brkxNTs4ڹ}Sv@a"gf2n H@訛@|6Cy], Z{98RC1F/8q / s]e}G'QoU`!c : \S}sS=c  =}`|GQ`|1) :=4""fR^1A]nj{k HDЫ_]cX ^v;&ߑ5>,qX,#W ?;缯_N Ol5Hs s8Uۖui|mLr>fzɽ^gAX$YeObb-hAL-ԙ+HB"GɷC{jhأc,3a*i9-]=C@ sI)g‚{LuH~/'{e"kw(+Q96̣}..nHE5; 5tk3ͮ/d !NkH9P'i+B$f88bBeI\%\Gb!{?zjQzchM\`A횽 6WG"O8 !T (?VfCRעbS>!D"|ڏYF>^93i_fRi}R"lw^[`?!.Xȣj"r&ȷDHW^y~zǪK<P@Vϫ&7oձٵۇptz}[ܗǢ%NUy(>ƎlOx-6u M1J!Oa83MEcZo>䜾_ &k9o+tclU/R%5{MJ>>;d ҇G4O"'Ee*F׮]%>^Y!~w%4*O䫝F5LJ*$}ƃ6L|-oe.Z:%h˸Ts|W.B5Mq#<\PkXגCB%FaA`&8G\4Qm r2qhaIzq(H86!G9fBM^FLqh'Eipt. l[-g 04nΐ9?z{m׀Ew1Zm͔u 7<%A-|~Ac2hV JǗ^\r׋#W9V$.KAcd[f%9,zǼ|2nIDATK@-cf.FD,l[XnBjCQ=+zˀt_6w9>m=~>wn~Ș%փokkk0if-TOO]^+Rz)qv;޹>=`_f.72CLiKx֢Y{\=BȠ-<<+"V?89eS; !FVZbLhf}n9M򔂁)njh(ٖ!;*qeh^*!ۀ@mAh #424lJ8 %P16 c!q#e*%)S@S`|u yLiD: fusAH %@!`|"}ꌊ)Ξ&dcpHl`*N*uG}z.]F>Kc"Ƈ7&Ν>_^I8嘢ag4JzޛJRB%E ǥүw|TN" 68!&6b޻֫Vt*>;lgy{wn>W%4+y(9>у+J{\N\QdA7?$T5| |P1 횀(s>ꀄꬕpBS6kNޕ[cBBs4h_ڮGUYDyI䀄fےz1881 l_Y.<8lZ)~;sbtC9ㅨXbB We\lM}M b*쬇BhB7D5(x uO4:BOꉨ+ptocuq8s05'`al#AAifDR֒lے,P#KvjC;v%PiXÔr!$V#Яxvet $׀ T9( _gk}_)ui>ҖXN1I͜ur|իBddwl+DB 8̕.ZY֔Fڴp&}]9,]q"on]`.GDCϺ|' ٱjtrX0x~m!{-7o7k78D  =}Z]6@39_?kϟ1k(ªkՑTBuI5 ~B;]c8(Bq@UpNq 5)0FW- T p>o|V8FA |^X!`pl;B8@r F? /U0 yEh_yAaBDh&؁ *RgW+!*(FGsߣ-*;CKQF@x|ͯ3jZW'aѤG$EڞĸݼjcG9C Z;MQo#hPb @ls6w#y" P^ܩaҿq~ݸq)8RxqgOf!BhkkkNY 1W| #)3tKA,LjG%I|Ɠ[OqHhN>-p'6惦f۱Ud* /˜&8d7ǣ}[ɟ>Tr;(+ĸ-TȘɯc S 59/V`iÎV C@'11@ym |l" 7m} _ާ\w pxPo2?|?,뻍zsH_97!CZlp>a*aE:ZmMpA@ĭ<+;ݯ~uXukIs??Tu~I^'{gS"W9uw_-3AwGm*5z$H#.zÓw(r< \"OtZH~ uPN +3-B(p-3JQ dB;2Jh%hK0;L {< }HOZAL`Z$KFBٙRx#"j^kA_: '%-xq gE.g+jA! -vPw&}L"c~T?Bz!v\χ^oք}MA?8U6F |vxx8}@ַI KF [Cش#}`XgHED͂h&_0]s̳*"NB'T@nASӣH")Sܗ~fwn c{Ra;Zn)1YGĈTZwYkN1 PŖpېehA^a)6/םh괧b<+E:I3-a&}-Jꯎð'/+0* C5;_K_Bg/Wnn%޹ky9\J"ԏCL'ﯬA]A޳ jI>T 9>9j5 0_m]k5̸' Xt&%#UD4 p^_XZ9d?+D'kci^G,c ^Eu"0¯-񼇬8&E{{U= ~.C2B&9*m"WIQST?1BɕW„fHCB`Ξ_EΆ_k.{}kw9` ԏ ?Z>~xpS ԫ+ 꿶/ɋ{pcp,ey>Ee^xНL^s8>{Nwww?7+F/n3el;UV ѨC%~Ngr?["pHTݎ̳@E͇n߾ݾ|2!`q*^hf 8YM {Hl:909y%BU_PgJ?;4:,u"W>uk缙 0 ·!N6|+Ws/[aL >r!8ЏWBt Z嗆!j`X&2E,Ҟ+Dן]-ȿ:'ۑ/yqlw?k7w߼vcgWX>Lsس`wwwڵLQ)E Szc[Ok6x;Ϙ+o:h5ϭ^6R0G,ڃ`P/#2X S5aF5YB Mq&yfD= 8_~<<]Ou~"VǴ.H,JrL=yR$D?AhF88O/R4!(G/pzC H~Ms$RпTMU {xi `;d/oZG$11Ώbۓb0<&폗 GJ ^>@e EأC#ARB .uIҵ 3@jM!Yc@BW1jwd_bzVNLF:ZMTVvdGo☾nc*1ƭ} ' /2g/#kdLĒZD8c_ EnJ2F6RDW_7iq}%G -Ӭs ~e1&pT>ft): $Fws7L17_LGtX-IJ0o}]p ԅ 'LaPk# hsXK,BDs DJmqL'aE6YQ@k@h?2$<΁) tjg8Ctmm >-?`ݽ֦7nx-HixN@g3 HIsj;ݥD42wȥȍȯiDP 7`pN_eBޫEHLC7kr!a!p j;@s oE*FI( E@Y57ov>ͷDsφD9!Ppul}jWX9COcƔtE\F'Hm̎|t)ː3m+]~ռ Fy€t;a.dO*' cBcBBQug8][[#qB[.D #e_@;ݝ3KF97F]b٧6jwq8,Iq;< x~XX"|v%axkg}@"$@"$@"$@"$@"$@"$@"$@"$@"$@"$@"$@"$@"$@"$@"$@"$@"$@"$@"$@"$@"$@"$@"$@"$@"$@"$@"$@"$@"$@"$@"$@"$@"$@"$@"$@"$@"$@"$ %@'IENDB`eric4-4.5.18/eric/pixmaps/PaxHeaders.8617/aboutEric_2.png0000644000175000001440000000013212170217300021027 xustar000000000000000030 mtime=1373707968.127652713 30 atime=1389081057.578723479 30 ctime=1389081086.307724332 eric4-4.5.18/eric/pixmaps/aboutEric_2.png0000644000175000001440000014420012170217300020562 0ustar00detlevusers00000000000000PNG  IHDRvpsRGB pHYs.#.#x?vtIME "<!iTXtCommentCreated with The GIMPmbKGDIDATxُy&~;S+wvs%KL1G6\L`$"p.A T&H&EY,ɢnwy:bXb'{>[ gτgB3P|L(>{|&=>%F2Qrd3d_7 Կy6Mn=l9ad8јK[v۔kLp=F# M?MKǥLR,6 A2/n[& ]݀p(NG7|v`^;'þtfb.?W+IYM (NSTw}~&9FGg7}J|@vF^Vkns!6z&gy|lM_j$+̉IZ`zSG z-iJV:sFCf5,^CaU23.q.!2_bߞ 'ch׻x>%|a qPR6&NkӬެ&|fckh&?՝Qr8Q5kAg9LS-Ƨ=!6bS*R*&>G5/{z"dZty!|I0f> BFXyݛ%[XB(?D#Aԍ`]Д;6i4FH=i7l~> 7Ƹ*6aS)$MX&4fmz&[[dnBV .rx/lx<woܔD"!{xyuڒߖQvYo e{oW݌&jNʕ_f%I~w#N?[Etդ\n5A,8v0Fn07w$\R ^, pVvK.MK ׿,Bou;Kz=jE~zt%&6 o4#HBAk5eFSиgCl`*,Ư cw<6HEp\nw!Tf|ɉloown n7۠= AX7굦4 $+7dVʵ*6wB!'޺%{Up9[֥a}h|yr`@NJI%Mޒa5&O}pCN@X`' kpu~,-X~ (pg;:V!:7[B+ԘA{۰zUnn :ȍ(:`eЕnA)`2M#9(B۩b>0^q \G669` ^m}]pq#لи&} *p_<t".}mw 23^!0$k7^5dKE5+ZߖE4tLD?Z 1[!\|q>ʒNb{``a(bV;zTރ 8?"6k4;Kp@x]jkoG9=˩[k^bæ=ym-pin6 zo߹-6tznQq ܇ĖNntC\XLPLeА9sհB/xޛ0v; ФŅyld3'ذ鶻bmy5ݦ-LJGRTA `iMT$5vm {cl֌F@4vuԃ;ꅇKE);xfB|oK^E9͟Jc!PTfWeB 7Ssn1Ms@`Mcs#c!_->[jQX|5 ?׍wn&4(&a%@/۷έ;[h6*HNHӭ G:6ev!9 4*8F7'PPlrs}>dO2pa{8+ukCreYZX\c=wĽNC_`'QRncJ,} yb %J^a_JXD*1ίuZmclDu1S~:e9gD<86!HX=y=8< v?"0)"BC!i6N'.eQ4VhA(:Ȉt ].Π; Օj&96\8Db$`9uzci>ȤȠ.pckh))7xuFpg~u4&SygtmK% `!Mce J -nI ,fmlnJX{>iRM&-JYW`L}L $]` քw& ~9/x]n|_AqCѨ<|p_!}XvèlnHwZC6"nl6u:Մ% 8|b4i4O Uu: 2f EVre 2nkw_x\ݡ4X2-qVqNmFd`Ox0T(`-ޠs#zb ~oZ7+[(7&,ğ$WN<7unFj(}&`r0rI#`+AtUl6ʨ/@ * 3/;V呐ncX[M^'i J\Ԝ9k407$h#h.ϴt.K b́aхb}&N ;6,7ʄT9I)_#gC7x" ch6aR;š AXt`50,X?i*6<2S=К+6*|^d ӳ kPi]ZHCW@tp]t];;`4G%z85ӟTe~imP. CW.]9}F?t!xJd&Ѹ7@;G.*[G{rퟨ.-JPP4OG_vLSj6?6qúXiAKt-}j>Sw};vfTôP:M|۫5fs Xy=-AWnڛ,0E.A/svV)jh_nKޮ",Pil*7$IiON&'^0{ONvweE|9=nƲ`S,kk fCق ~XTv$ 4>@NlH4:`gj P163lg~ExhY8LTn\lAp8(.X7!y~Y\Y - {2h;Lkp#-2h&|lch s~(@a9d~Ok#8Tj1>lݴ肞 Saxd9_v XBc_"2ߝ kUIT8N )D`NWBh`#c@M. [ 7UYS0}ddq~InUWtTz𻚳9m4N,ruxdrτ`,wLڋح?6υlZS ̮L45gYև Ar]Hȏ{`(ƭ,.Kz&-.Js6ZznVylS(wQ`g)g|7 vCwۚ4˛͎T`]/N?*8XɇY~Yy1Ml?q@pޙ%L\gkY GºSv̰7u.- 6&iʘZh-֚2 +Zj!0ӶƧL(~gan:Gd6=/?#Ē a]XJMk(3luvt=igX+u{\@֦a91?P)|'V&9]ef >vnz=@7ԭ%dD⌚7\c /.Ҫ\zUc2Hï8!8 ) M/ڦ.nD޾}Ko9w,P 0x1螥oYY\XB6|9TK<n8sS(+b*H#a?|_.[ ((KA:>>l$;ǔtwuVtlg`q$UYY poh0I){MbPMd[7{x-KTreiYym퀂`ݒH.9x=zvs Ncz=ƇYѹZ#}7PH]U4kdX V3ܚݴ L0-j1Y *j} c/6(HNGc8r!#Uh?n4qCίV11t"!۲%A h4Q4Ԃ6jW؝v +k!-SPw醞9wyt>_;$}Y2hn9a{6eE wH q(.g2YwH o!aXM2+ V]}.jta%&@WWzߠ >^;['j)`*&tj1$F#TSJEF61h7,6Y(U'tQt<, %ve&AKCb)@MgY|-/=}/@A&B@8`cTPz Ln J:n h6  KUxVĄb6y~lVzC_ cTt mTS( {=Y%۬iLbZ3dj /)f^'wwO2KQ I_L"'9iuGR6,!u`Wi,iB3hgjB5>[ffft5 [edDB  6dϰV^gaL>#>qLq3,E13bwXakO?}-5ZoYxH3pYv=trH:Mqsg2y>3V0_*næ}u0Ppa`@5|m2J*x,(>c A&'‘_B"aVO  T`|+aK'{r*@PdqX+㑈b ^h߰o.vXcl50wkAv}mmK.\L: S6{V5:+;Zk 84myf݃ޠ jV4H]C@0t7r@Uh | ,(I`k nK96%0q,1`篬0!97=N_ߓ73R:A #@ Rb02f1 }Z1-gR33+DڰObY ᣉ9g ͒F[HׇPGBMdDJUK^e֭3JMuF]Fձ4!hDdtIU49 /LT?E;֞ڸ\d v =V?z , 7 :L^[] ؀9Ju)O%KYb*cS{wkgngs vc?t,&.-u & Ed8`tx+ pO qe.ܤw{titw4Q[=eZ ,%C/\p,?>9R-@{]kbZiƯSJ1}.ކVRX=tơV>ښJJ2'.xŦvը| X`LJ`Di(v/(ZA7CZ,z VG*26o(AhF[z֧0Gï*[ӔR|b@/&G `<3haXbjk_W:Fݨ5=19f O-`,gMzAϧI }›3bj 톬)xu rR.eqCy%qhP8ކ#]`y•:.]vMp2{Kש:P~ӯQ˙dTة,r]tQ3rEs&d$~S62O44,B1T?kx?񏀚2 *"\|Q߹4nϊ5s [hYN3p.okfzKX>z|Ls d 0.*,7Ղe#Ekm"ww%_J*wHT(_lބ>$,vHJ棳'IC^Hז#qPdbZ0&./))pP ܿWyF.,/JX%}` 1?FV6TR b}<_6NqƇAL݅RNzr0 ;QCB]ghM0#pD`ۊI`╫& {+h7UX… ߿-uhevсL$iɸ9"pZ&FaȜ[L#g1!]|^0o#K-`gp evu8x E1 $WP=>  N1`͡bq=ZTK72PƘvӇ e~4rd}\ZNI$/*W䝃!_RD|rXVfS!YKjKpbE޹-@ٝjPCӊm`m97"^R K%jcGV/,>,}_`;+9! V#\J.&}.'"S ~c?'20DԙUYL_uX=@V*x` 48EBArͺVxSxΡɘ\]N˜.a]N!6ܐL.[9XHp?'ŀ0w%mUiϟ(_۟-UpIX3 =+:,N7=~)S~Cc s1lz6s*R,D('aeMsd!w0FW߳_m:y49|ԴsVk4\2!l\vH[r{zȳ|XJlL N6cEmk]k Zm.=ݾΛ zcv0I!٬;Mŗz#+٩4Oqxe%?yVNAwS yв̭e% VՁ)6tjJ4 pޞ8,ks`\Y%Oj4v&h" > %/o0Q xHV&]h;KѴްamF2d-A$v-qix4 x̀KF8}Poibo:PZ"9dBGLb;m ˥X_ǹԻk]5&\S'ߛc5֞m5>i7pH>H; _XzVn2 0f܊Qt}&ZTd̨pK>K38:d:.Ih`?[43-߀ǥ%tlb\X]e}.. -@ CS`Ux|K0_Xp ÒCli⽂Ҭ`'PE`A?^$Hk낰j[cqSYaͶ P<;8~h`CM]#W3|V?Dvm5 lemqE^rQ&"y3oݓ;;'wjLY9m,mY- "4MS.f۪o{DJ`eh;r)i& &eb`LցvY;8<>efaQl*q,0HHZme@ER jb"&+k7ڒ=PA+`g}Yre(4 F1Si֗/]Ҟl. r5jh%K !L)_xsg_0ې8$jpe7/-\7g0<:/Rn&Jqa9Gb6H./%0ej2Q s0dkX2a$)(+XLR'A`p~%qj^%TX#679`T7m. 2[cqA(ְ}|xZ uw}On޸ r]WL@&NVt7nGNA-+3g|{T׀&S5#r3.A%00 ]29U)UKERУp:ܞ?}#?{熲 &j㺺%._]q մvDy#wѩ c|lma~#9 }KJ^"@{hc=oԺFpaQ}mNvc=lzoE_ O4xiK/#}XY1B R0V^ V܍:cm M=?\<(͟'2 _.M,78^V~:mVA 7ak d Tf#aR|}l#@#)!a])sl3o5-&8{!Ng= eqVasmY\asL2].nUl|f ^R1`w6nĵrTӯ!`'P(I‡{|Y2Xݻ4 s,XD&.D~-[hâ(y^NR;+ȫY{tr5.*d8/ 4?j"|[K Ĕh |6ɬl<ΰgZwE!+x}<*FU5Gʀ: Ǵs aau*0rUJ7O7491@^Hȫ_鿩#w1dn&ڟ[ J+NJ5EWhU5 WtB~6=̜U([k 3efi^pc O|dZ|}|I6D?ׂS|p*Ht@eyqI  m2y3ՋOFxY :e ԋӌ=X]HZ_dk+K,*:SuqBRlvLLΥf 1 p갣'`FYsΰJb9Du7GuA IFC`sWŵX#qc#fܡ8xLyQEQE JTv Z)=XPvJRs)[~s+u[Úrzi{)P/o_lx:9^['?Cl&?_RI66e{w ~wGG\Y_d}6,QCGۗG.H2^(742aA6Nbs5Ù5rntx DdSeހѤN(dJ''XZT%np8L9V! K/<%fJ(vu|\>ծ/:,G'uqpI,hDUVD?UCH̉ &W#i%X,M>8#lvήwn5wlol }Բ&tX7ײK<20쟃ރYޱ԰ldawjK2Ѭj V"K*p 4n `7 aaG}u> :א㢴_np !`LOX縡XH֖`h pvSLHfNeq>]0Xa*Y_ŪZ<0b肥IFWfA`B'oC Z5R<Uhy[cIeLtq` I4"`1X(.]6ȤݨĩwX|F6ܹCYlKiuX&+K3R<ٖ@v$SԻ@`BZ\Q xti` .^wܒPݒf@ c|:ᱺCb,ٯGrT(KRKןIOzmr=iaX-_8"BDj pKg{ҵFaAhMiRԺ]VV天BVЭS `)%v+)?Cq'|jEMS596s]yi\ȊOQfrrp,[NB1,S|~_$x+'@2huj '>QѮ*6 A_@O0Ayt sZOzZ$Sk"4nx).TLIz&%&2p`{xJ KUs9ZS4>A=`8}&Z]*8 XE`d ! nrIAhKտקe6Fb3ckS ?v>O~>F|$ 50^xA2·Oz@5X j??E}V ,{X* YPÑ)9e24)e旒?fsOZXiװq]˴ΦRX|~H^rInKI2;ݦ4]J}d@)KG&meZ!̝tdB5lJ3I3:y჎5=c`}Qa=EiE5v$!Pv.'QAM[CM'%V@Qs6ZmbcZ4 FK>u~o髫rah&L2q!eqm҇*@[pyX4F}!//w! De2 ('><=җ`B\[^<\ F 4 ! tSP$SqYg{6~`^#y_.;=ިL>Xd|TJ#8ykܻ{W`jﰱՊ 0,l35Q/~wԌ1[_/- pr8&QƂDT3԰1htYN$Go-w!g5D>ٖW~J^~Eܿ矗uP67۰3$Is"^4'Acv(0ͥh0h` Dz?/\}zEpYyx綌`Y[p$~>W Y5{Cl<4NxV~Syr3'Si>8,Ww>ޑ6hw_rGVa+V@xoPVj&7m0#f i7mhZ }ؔV9/椕J7>rx^ew{MvZ&bak%i$K%*L:CY~$Ϭ_k{% 2X<мr$Ք< ߁x&r <S:Q۪I9pLYf)8a >%(ϼ mP\\_+ µ ):<͉`9Kșތx(c)EZKƓa _7qz|c#T%mQ@#&y=p\41uD H ~ 28v2vkvoJl м f>YaВ/K3i7zrw֥$Z\{@]#\x,w7ʕu]P>}Y6e>Lhq | XF%kۆ ߔW//h4+ GBɮUjt2l$uwqp+XJB܃Ц6_w:ov[p6*r ege+ ͟L/\<^KK4@*p與`=D{MؽdokW-uCHp<*h`:hFPz_K ҁz礎MlÇVy*٤,ac @glV3z8}4Y<1gotHԔ`%fgۊ✻H+a^޽}O63p<.L"%OQPw呹K--@ +yp({߰n8Y/ haS{pu`V)`ٙbN)wӵ1h!&10=fv[SG7 f_cxNUX ԠMw?IhFH[Z9;3^jvAf(2dFȵhT`o-TrZ,$5 &_4}%M" x^Y|VN 2jM.^XӴ\hZPG@aiXDe>д>& Y=)2B0Sz[Nܖ)^zzU Җd xaA(bt*N0dX׃<d& RcƉGN3.8 Kꔕ_W34Ɔ5mp؟eS:=VH- oJu(57߽ XnXSV~H\{Κ>JDar,Lr0 Sڞzii\M!źė7Z b8}:V7Fl}/rC n_6cS݀0p4Ã7'ʍ JKZ*zZ|1IOs mI n0shO}Op^_܆p=1A)I!+3BEʹ_2*WS <o:*WVdnqF7(|SʹtlG T+d,ׯ_% I?#mJ(>jh͢ Ap'[$iLll__ΞYM^0Xx98.\:#Y& K`Wu*m5ЍJyhͮ^@Mxە>A}t1X& %PY*+Z;2T)00R:(.|{)A_X2$҆ߏ3xu$ hZ4.}V -&ga{x6YŹu5zNVXާ!]uy_j)8 v0<*œ[72G#?ۿSk5po(ag7 A:ʘ#v>'܈9˰vBpC}@ px>4P'vu"cV4L,`_&X|V+:`D̰ 0+ll ԫ'S ÖpQj+xH?^j.()iCA3ǦutVm<&1i)NKN< @ oӾ Ň CUpnIf,·xtjFbnl>7K AKRVN3 ,NW|IΫ퀎A Mߓywn?blL:R6 u~]mQ,kM NAaMs3b؂nv[O ;Ш/H"ݺ+o~pO{<6hC5 liS1?=m7re rP*e`}RazR+DDSN@|zFvŠ{T;֨''a)J8>\ %cxPtXvaps09Z'pƃ y!/_YQ3P\α%F[Y97 e?d7pԆla0YXկ Ԧ`]X8F &Οk.=StZ-5 Y- `,!O 터ljc ;4o͜J: Ayai&otu alJj8Ie-r@geuu% 4NM@sgfF|ܧ7%;Lb"mk_Hgrةnٷ .W)0 4 OP'^Kq^|xzs? ʭ[$ iN.rzb=yUi `MCgs3,-J6-,WR0t,.BІ`6 %K>ݩJ fz<? _$kϭ[rR,Hl l99BZkЇ9l:,Wά_gu5e|Hx1 `1ɖU2vY~s;k1 ~[ ÍC|6-N7Ӏ͟/򸞨ݬT*;Xr\{pwd.+kflЃi5, <+!y4h'dq_Xmwܖ{xͥz:Xu2TFZX7F02mq9E%^yh .gw 뒄{$walB9:pبk/|N2Fחp睿 ɐs e&^+JYZ1^qgp(+HZ\X1Yt`%:d&vY]}{PUh)Ki\XJprGjCf3B8v:2L|9gդm<xxcy߅uzRea~ZZ9 X#H{d~y 'y,p;^Ix Z{`8NennVo>nK_j 0=L@`ĆS7mdieF 6 `j OJZnw{if5 `4aexu*CՎ1Yg❃LVM}RD_b&f#\{Z94-JP)' XMj{fdne]m9AS b|R| E0oE7vdОYށZ="Ε鴪:̬vGb&6`v RcGv_[A䨬E'pV$ 47KpFTiդͧ9-s{rtxa,:uknYrZBp-.E!VEL`hz{-=Aq;pY ǹy(۸/hRYTPzˌs 902:MCs`U ӈHp^b yX^{ ljVSᰎTٜӑqo :ڗ3x (MԵm7e)t8XN([A|3=K 8(g(/(Ќē_ޔBQ"H\ʡa/EV?FÑPa[v-g|/#tY%d73?,n6]WwSo:KoO8n#ڞIIaPs[z"1hluZ|.®E7?h(" < Ky!g7n {1QOkq Z(#Zw$'t\u٪Tӌ˧= jMϨdy EdK+ن!n+y /uCnLTⱨ2w"(COMet%W3矁1XI H}ӸͭoeyeYJJG'me;_8 IԩͿдм!FQ'Η{{q彫:Oqx;;zB9qEBY"6x}Sx],Qup^VWgtȅgOlFm-ڪfd:=lh48q`ܭ4DD5_J,9bk8/!O (ZV3I~{ kL?aaP*}m$%6kwu'/fX5H|>rm/p0qeGۜ$aP'HV&S:=92sK9{/vqƲ8V̝JGfS$SqUps/} yIO lcgDlcfG#9o;2SI{;oèVFvȞTH o.`\!k; dD!@KAx!b`|tt9kK!ᨚc#K}H|6v*(7&`+м̐N .ay?\){&psY^T ޼uW0p5=H |Ẳ>==-Q;+r='Nz\GX (]έ,Cm"VR‰95+n)au"̽R/NS sd%'A6N~S|Ys(ԐeSVaQ 4KAy9i6ZSAѾɸ%d(y.R@ 0QRd|HbjEՂƑ)ݻEdU}:BCXb$,m iQ" 7`D DK\YEs ˲H}uyEg8U?~aױJ! O.y"ΑܸuU2s>jS)C@}{ pMnǔNpjUR\hC.K)ֱV;wDY $.ȍ]9g"I1,.;5d%e3kB 0#`Co#91438عIB ZSRh1&qB)"YDȁ36Y;P2J"/d\~[g&;<~%Y=P)JQ?`mCLն,\t&n|.-S(]?[lANvt@DžkQрTN#80u" a@'52S ]!XWsAēqM*C/Z/gDyAv{ 5[fjK'_~Y&H6n]Zq r.AWpƒEbmOMeD͊NkR3#PlyBW3QC Q Qhdp `k1ߙ?1@s7`ڭiӿж<VܳݓMZw;kH?¦N]HKy铇ٚ)RuB2Wal>4%Ҳ/P~09לlpr@&IM3I$6/}OăqtK37&},|7$ !$dCp9%"40q ^wJ)s,Snxzװ19ڞ xb°t[,9S<ա GG$Iړ]d;g oL9Xd5R"3c(-;N3/ ߯rhsR;q^t$JPjqh驔(BdkMCSSiXVuϐ|s$}dC[ަ}3Od_xwn wOJC.0qQR S]fY:žK)i$QlzNLzkz: 5$aHj)cuu9 'pk5.k@)!o2B&,_ W|Ԕ9;(}2OFY^y:.y`OTZ|ܻb2 f$ީKn_D)`WDvō4PCvpHpY)dr?.S e]KH"58 dIPBM^w?1av/k}Ȧ=ãʦ* Мh8~b$(1:."u,f% ɜ`Q]SKGmb)#w%9*ioi :9E)oɦ b=X(?JAuF$ZtE hDxЋ"tMs,R!2I[kHpK2sl_s q k ܓ-k@рi4r봉 i"r@ϚipJ?RG5n3^~GBFj I8Xmyoq! z(T(ZXy󥖔'06Bܹg7!_ܗ<̯qg ^W^âr֫4gip$G*cN:R.o.,Uv*H)g8aIַѯ=jqM>_XݹsK'N E镛GKw V.EmZ) \|*0-!`?Rhf71b4&ۜGdc}|m'V`<ͭUq+z#NC{ U&}rdNeHwS$%ğ@FX;!}泲tYq 8MlӠc3L4r;RPdEI‰Q)mK겛~*`(먮x)IlNIJJ3Sޯ 6@}Uqѧ~7~Ʌ_?OR#x>͵{܉5]?V98KJ(=gXlaWG:rcS"@ynNc+5c4H'/Hl~da_7f8P-lVĪnP@JC@I EYi KZ9^jߒaJHF* 5K {؝-wT!h1@ #T޺JY7tFVν(+An~{wF6u{;pRٕsG#` 5=0 xND&*дkxm!ӚYm'> Ұh̯G*:t;|Z/I0V'l]D7y X]+;!jo*RpM^O^F$zGb>P;D5T*Ub0L@+\ Y 1#=]eye^fWͿ_~?3?bD33w~W#+B5PIj͞8Q$OtK\ ٞ> Ԗt"!{#%?sb Nf';N%lo!UIY<$'aHL Y!YuBti2<ӯ;|8[/@%B3&Hq$ My~ YZk(;-O5C0E ɨےe[_Y>[Y;-)\YXhHw7(. YHTϾv||)W~MN>sgw8W {"}3$sKv$ *a?.OltI %oTB (/Ke]Z)3gޮܣޘ9%^>t/=}ˎx0^6\4 CiwF@~)z%wK5@^c(Wa=_j$x%yԦ?kUڭ#vslX[8t{bU94\|;Y96c7 caw.;sfwu75lf̅K_U*oݶx|N  i<&얮Bi KҏpfܺsS{[c:feNf$:B|I7ǦSqhWj4 n>+oi?ipc C>q=_GdmO]6)附9b̬.٫@("#t207òJsOͤTÑ|S/ɕ+W"*kkwRnHza ຯ+e;L斟e5jcm!C{I}msZ(a3|җΫXQfz?P/6盖gkl" ~&Zd2KZYv)FH"7z7o9;xO,G=_qErzAu]Wgn˔dD1 B)'=u\wFBlj &iMNpGΞX\ULΎ"[K? L)7}y+6䑂auP C~HA+bâ!K#+#z~ot:tq?7"l7rn}spXPrC;[r|Z[zA߽ Ib;wSIBIt"AJ <(KARC̢o @vwA& OXolȬ,VE Ԕ\Y+Wox`j3nt+W~-c l?[XX='0'w7>`$7 b@POɑP}Ѩ6 `W# y9,`f:.ZQL*=iϑG}x`!v /LE$lr tFnY[#3.H:0VbYS<+wHX)atNשR $|+Uk"'N]pTOi{_0LM4G$ Reb~i2>MFi}ɑpZ70.ܒ̼jr =Sē~e> gR(ʵ]?HVgV;d}}KsCK"E-~[f4!' X^@">x$aۻ*tF;#ݪpdc9s朴ݒo~k0gMc-$e)>>l q;DL^kx9Nf=2,gMƦF"RYK,[Uuu{9@XTD2)Y>DղK4ezy~azi`O+` zUj%1 |B+>͇j&B";g8^1<.+͆dI\/Rڽ9w>sDMk00H{dj˗;4Ӕf1y|tiw1F/T[iqr,=[eL*WKŃJ"@IqkrGee{#,tH|WeXZ5>l3t&.I_N- *wFoHFފX]-[8 )4%[{{H[Wume<:ƣ{ja<4cr7CMd uۯ/2lڭB*$f=ިKidy9svMu~oJ<H(+1#yŗgo}K `D4piyayakQ[`3 Mã쿽aOELR"[ۺN$Қ dX]j-/SHݐNqI'~rl;cOEl2[ǃ2Oo/SL%c*r N^MP*Zn 17 IԺ~O0G:LjRY]"1u(([pu>۲ώ% }/,h]b}cgkqFgnOL!;i{2C:ex|€/s/ 3A&*k K,Ҵ\<B(:D1hY'lBqj#qz􆏉q-ͦ|aMN pz*`0~e3tK xî3Cmi7Z xH2ũu,Ý}stZ9ړ%L:JN^єk k咒RX~Ħ u=ɨ ͥS;8p*IkM /^\qK`.$nE/H ,Mp}IIG:VJex`_ׇ+|˩(n~!<8j6~ _(5ftB؟5I(& C8L^zXݞ1*LX^$uQx^`}nv7G!+^H >HN8 "%n.KBwOj.{Y庤1+LO#ކÈDq܅+v1gno׃fj6r0”1"c 95 HVvצ759# N2T9&9_%ʼn+UلbG^|\ n~Z6 tʆ9slnxilHuFKU2K RۭU%YG<~\,2:=$bYGF!00TT Qb\_;A!a\vJrxrBZ&.+5ymO(uɿSl~ݝ- Woޖ~u̟o`'e/uY9?s _SH-FcW:l2=~E;R؀o7+reqOƯ')XwYzA 쒶ƕڜC2A\5LkN<$c PkاFbʻ+O4UzfFҩ)\GÉ!L}k0O|$IO 04=Ⱦ/G[BךRհppOh6Krm<E^K֮t]-&y|.᤟8{F$])Bԕ}xmCB022 c9eC/q_}W^*N9}J![@D`( T=P(Ϯ%`$V)G; 6p%c{Z1E=2%%)B{)1KnU~eWD¯w'r{z3J1:| #x^wQ{c6&‡/E@z$ela?֊_ i;' )8>^V.]rIEN˧AGBfۀe ;"JJbڧT~pfԅeZJ.O3 UJ1׿AԔ{@҈וjI"p?C#i݃ !X8pjHJU\Ek'pc9Kxx++ O`Ics n~.ܘ~Hl:gw |Z`hNg@GfUZ!$$@G:~ <{^^}]#^#ێGᬶ>qS)I^d-QTmxq_TʻW~6 v4 :^W(tM) ;̶GpC./NjR8(rJzOpC㲾)ab-gNJH C9P:y ƺ<k?t ۻ:s?i-'ci& ~ ؁ 5%!M9<ؑk'tmb!0EjΙ؏M~̃WO^ځdg8ة7u=p[&B;KPٯpt=D5)OQs,|0PHgŃs_ywSYm=ћ{{e[rrlRu eC)dApݡ4*Qoh$os= ? BGc>2qI4_a]`)ZY, Eh\=܏H$* G.5̰s|ʍOX>iu 5Z3HIO{%71 "F3 0"6|X>G iB NpGb U]Y^^A=I1+ղN~qd/qP,.P` ?S1޽yvlDN`(;Y7{2\.82=8BqZVGavd4>G2㒶<4 AiQ7_|j]KJQ-A|pCOc#cF4@GA6}5$unY gEgΞDJ8BE´ fwU-$['&Sʉe`S29rSI B&)H9ۍ@$Ep_>aV _^5LJ].|?cnρB& 1/ >JS  RԏZ{ʿ%վn"n̠ujSs ~AmRCGǦWYut~Z={ye&3g(7-V@vK9UmYHFT* C s 5ۧ78:e<%2 GD!c<^ٝ[aB'Lv&vCI=s^H%[~sΝɨ'yA)%b]j-^x$7t8rQ ^@;\Ձ7F]1zw\A-,۷tI&A([:2(G/H%9ObV]^S ϩS/|U[x1ߟϴ'>tasl^Aǣ 4>6>ػmv8ammwUn~ooWɔ2O%p"^SX nXB".ﱈԳ]9&Sbp3Yw؁ԸX*daaEJޫ)S8d_'| .+R tʔtFUo+ )|LZ1 /%1-G#6ty z2ľx^C2Uz]N_G-0˼v5uw߅kyi#( ɻ/K =K/"4+rݦ̶;qꄺJ"Iҥ'u}IW+uϑT~=e%#ҺYֺ~.Nq\$XQrXM8R3z+h 7ץ71CѤ1+1wb'1= Q@8r.,.Q yVYٕVrJ쵺UO8#S/'״i5dgsCaH'/"ԐE`X vz,HD|x*x6k[jfc7nԙs$ %Ǟ L)=KH5A'gs*ZOX@IPv`.qwM)x=,`R=rq7wurzp^)fa4':SQbY6~7=ef:\9PfC2%q %aJB8j+1aLDi&9utyU<\I^|n@Ejy]=x;/ )Fx tO~\+k*tU&8jy!%rGޑzpɓ+MS=Oq\ ! o%+lGk"}k-p Zu)Ti_U0Qd[͞bhا늜JExD1.!3)Rl@kt#Ksk{[t92t,%dpW+DB$r (h暃ލ{{!>Wz&TT>D(I~SOP~#36'>v@8`MxH1da̬h[|CBgI"J(j1/Ϝ; nPLَvy!;i12*I,F:Ed>ک>F] LD.+Z8M;Hm>V\|.$JOU n+J-9>%XG|K2Gܺ}S)iNk& ڷ;&n>s]*븑GV9d7>L;^R.6s|N=yCy9y`ȔܻD!Tmwtjd`` D$pŒ=aZ-fʉ>Y UI&jȘGU>CYO]JnAG@a3j! ivb rnڜ6x2N]>pXL9ipAG ;[* I}ՕmFvLXemf4d*{Xgp|-[I5nXk4H,<Ƹоʰo T$ Ztnl2~~~o {AΜ ħ(8oOl6haC*IvwOc1T$3usg 'mss]姹S8X`깲*..fMF*Oom8HC6D>\7nP= T XE2s>¯ݑXE_yZbcls}K.޾hs[;( r-\HuKZ%"OzWJk sG|R %oB#2f ] <*SM18OғTjZM|pQU!´Pn<2"& 8/kR9!ݒ|LIr;͛NN  р3AX5d*hwFEM$b[0qWg`Yu$̹T"23=-H@\RvWl`JQP)\ChbC[prOÒvCahUDdY)U[^8_׮:6jե[nT32N1\fn cXDcl5 ӄhtRA]rK0Sr'L/G}.ps!w'>{?A9'z Hv_#S19wžu2O]3^olm{t@/L)xvw` W56þ*5 MJħx G6\6f-|`@)* 94U8[RW*qrL.ҹxZ*p?i>aOTg(D9UA9D:L`7t̋[*:8pD:L-h(!8w>Hw26=R].z pш>`ceף>ib-G84faDPJ%TRB+ q6f@ }GI=4TH6ߓ4 N$) CSCx#Lֺy#Y9<<ڡ=*C´ckC~Y}Y\Z240GO7e`=e B&5;3J"_gf:F7$1(\ )HPg^뫺6 uiw/SHPĩK1w nZ>'W]SyJA\ 0-{ 6rڇSҲ|:]=x`aᐰ߅fSBSډ  clk8:gIODإ*dexj$drbe)ܻyGrns/z+|<>Ju f$NV~7tl fwfw͡DT7wv6e*@uj:ɵ}겾gd:3 2o2:}NܸzY򹬂\g"da^K)msYj{a{jFt|[eM= $p{>%t5VSsځqBx߱?sJ|!MΉ£v[*͞l>TϖD|g$(HlOa9XJ&l`/n! Op"5U dh8lx,"YCݿqrƎΥ$6,eUL1VOǧ`ؔ/1 #[/p1I*ke6Y!Yk)fSYPiE!  PNQ\Nd(v*P-VޞX@zLfK=9Nʫ2 B |x\:#$@=J4tw,_@v7r.z~>#K'yD3W.$ل6,ϳ`2?;Rڧ\,K4;-!9"Kŋ/o'T {SXKWst0@gI/aWV$"`1 M;&ïc~9&}cGݶ*/:<1ҫ(O|(D-6ȸ2,ABwG 54BO &bkrmmt70 .}P'R𞧸RKKⰍT3[Pɫ[d!(7Y ; KC[Qs1a8 OLYR>gٓN!!;{Iz-?24ds:9ٶLdr&_lToQIOͨrcU T W`޾pS;<]wKfganq/ͨi8%&P @Q+$ ! Y>&^zA=[oUoƴS:8,`y&SP6 RNps\7sx pMZo8)Fbsx6 OQx471Vb~Fͪ_Jt/$ Pq$#B"PvO*%NU[#'4Ƅ$N(O[czlI:^;=i`l`Hu(rreNVq֓)QFH5 9kuc4uJ-[DJ~T#ⅨQa,{=s^6w&;<2A/a1~z0ŏ +*bZ L2 g0Qi F|@d:@Tl }|;f5q=w+H*1 ╽}} m"32SƵ넸5v8C/Ѐ%Ց:C*o8Mu@)L<녓v̂ m('c UPL|~j}i6HNepU<bl.HHړd*?^M:^O$ZaރtǺAȆT¸ve#w6Y|r+xEb'~(ϟTMDx"]iOyڃ0jXrnOi(a(a$%(ml;JCaJhTVOߕh,npZ1h}*?K*,nsfWѬs`%s=e`9/3ixfDn d5\;]:b"3,z#~N#rSzzXR Crr-{ޚ^clDUj6 KQrRL /{3ST8zrt HV.Ln]xgJ;bIh4EC+Nѭ*i#R4& G\"D*:C,8^hUsbה y8Qg~͢rlwhC8;%~6, \=Ra6^9MJSիD%Ԍ8Zk] cFbdelS¦'a$0OH6ܦW+%%GrMra5X-\'cUE!#[piuRk7e()5Dz<ԾX [mt;ZM7n%H*WVԚ5 1ELuքYklŁ1w?_HUvUTJO_JլhHϹNHzݪyui5Kzdub_w= =P"s> cMţفEh^% h]qyіRU+2"*YA{W'<'7;1@%$ &CleԒgLOYY~k^bRX tQI;-xhm{'4>hq ${vu}9R¡xU y,H֔Qd}.8Dd*P9̑$^}N8j2wEYGX$ii#*OЀ,É :aãxo0[uMU赸8DJZU-;;[uj= ʽ]ֺHT8WsgOIP=!_ X ?5 WGGfEd5g:ARI=Z4cՔDHFtJ[6\xa/x\C3󒂡d)]N+s~3'ns)('¬I#1 6ÜY\Z-OLGD NP;\!;*|pt"ՁaHwR~ ԈN_ 'Ҽ鉧V ^Aُ0gxp#̨Mޯd0^KH+2N.x` ڲe "A~{E,d}GIȨChYNQn-hUowMw:2{Ho'_(˔-gUe`/~(Jo vAp✀HNZqdk-(` g H`^ ?k7% Ȩg1A-IEb9 lݽ!>9 $R ^fmsL "8cf1َM󇓫}dLa? S3 ,nS=aZDO% 8Adz*9/]]q=C9&?wrX jKSHDn]VvCx/C8ph&yȲíQ^b7#t~0ĂX)&ij1)!^7M>Rvc{;JHt,=ߒ6^#S9rK#& kƄMuGd~<}6z#V8ԏN 2d2jY9S -{@݈++eo^Zv9`r3g5ӨA=m]ٻ.]j6#1;N0G8bMz6maÄñp(U@tu$H"T֌TWSyڇq**:5]Rj$K %~GבaA_$QU"3P)Df3|# ~ed5H?cC?8>Q<a4!c|F3dŐO2 xߑI&.X8.:<@\$-]$O^ x,zer l6kzmaWNx /uL UZP)ѧB(J̆Ғ=v0H)lgÍ0>-gX"%1'ÎB>m1%:!1dC)i6N@n|OJ/^bnl6-w9RxEyr!O[c G_{opQx<)&Vt&̍kߗ[׿|PtaOvwvTDRV0:[FMuZR7T M 0Ө[[EIՇq}&~b1qMTBRz޵q&t}E4IɲWz ,xqlH0,'] _[U e6v٭$3O3Fg*5iC~y+J͓`JG3*&{ALĉY`έr.cL"U3K)*=z-r̘Qg#- Й}&XۗvgAiTc%40W\2Y#TU +8.M6\G[bI vgWe[ B9Y⫄bQCJzLo֨VhK,% L$1P!wBJ| ,:eikyOVEa=U>#d^},0=+IËOxUaiH:P{J bCqRZUNj9''ұaؾFI;=Aj Ʌ,`gbdFӸ\*Zܔޞl&/M`,ݼ)z)᫯vy]%(jA3cT Lp_*.CGXD DEo8Yd]u=}w˗.I ##|hH3n{{:lIxjxQrfeoW`@"0T2nX{6j؆>'-bL3@KHV{Y¿ xOqT9eV}|቙ Y\(_8[g!LMFp=ȠRŔf*e֥qpd# (w# g*PZ`6&|.I٤̄q ]Rs9< L#Q.uQ&U&cOր3:eNw$RI'<ݽޑF'łl?*b ONflVqLb%Ռb#U - ZfdŠg`7r{zɎBUxD yH 0jo>y(^#M23;-Tw8 RYޥ\JԘֲ)d"UoBm; sy禿ph!k`> (\?n2^@;flRݏu#;؉F,ܐ23=PQC1X03vݑKssr0%֤كcd>zԐ?ݸ-ovoWNHru(]](Nk{pXRܙ tI7ה] /R=: 9D!{E-aYjs=!Nzf$Yx`#Q ~IN䔌ó𒘸^TIUY[3WSX'Hv0tn0g}΁1m3?1gJUS+J!rC!vjbp]%,`45$\Ʀlmn䥋<4YGqmת1 3Y{-?C!(A{qgY^k$(pYxɢ^M[ܥqfyI4 pA5 \&'d^x0fL.+ gHYXizچITC^ku=x))MN oEaߍqrTn i;ݴ’rO)ymCiT)rN󮐅=kwdbt,+g$1Bv2?Bg,gy R,5TpyiENV<ܶgLt`\ɮv2-YbJƲc(͟7^JYë~Tz#180uN+9JM(f= 74_oJ? ?KR<ÛHy5OM6z}bYUƗ_OKnpi(V,QZQy_XXRQW7`9:sr(!ƒ# Ȃojkz:w%G_04Dn;!H`$md"j/ jF`ٮ^|'2C+;2 O HB1xU jX"O] FWZH9Rᢠn-!|~VdGM@+6Bb]ȑp\WxmJ a"xf`_;[8Twǝ4\?ޞTnbaܱIE^bQ2o C v_Io w"24{i FT}[9j*~FTF/-=Q^7Bu8egs~_ YrZyfa[$t t#mf~guFZWIKa±ŏ#qmxJ_v,ޔ~m0vCql*2:jau"^*?޾ȫ!YsNJ;z{mU$; ً'[0U)E`ݩ [z tܕ=Fj?~qhaT~^i)G`=jg Qo.Ύi?0ӌݡL꾪*ި"w9GB- F62'` Ta-.5t:̜ )y O48m>?~FqbcV`P]0Fev۱wQ*.q>>gO$=3*&bq6r >޸‡hgQRYe9#y#PT/'O L%:Oi*?e'jt#u>J<)c0o(Fq87ǹQ?΍qns8H 9IENDB`eric4-4.5.18/eric/pixmaps/PaxHeaders.8617/eric_1.ico0000644000175000001440000000007411650745542020046 xustar000000000000000030 atime=1389081057.578723479 30 ctime=1389081086.307724332 eric4-4.5.18/eric/pixmaps/eric_1.ico0000644000175000001440000036254611650745542017613 0ustar00detlevusers00000000000000 P( {pmjgfnynqyzwvh]xUnTn`{;Ty@Uubz\wakibabOvmvbm}u~}g~`ttplme&@q:R{opswsfehbizkyKZw{{}>QM`xxsrf$=p=Stssnfb_\\akZnM_u6M~Yn{{uqi0I}Wnucnmi^daW\Y|^oSet~vXrxz~~h*@xVmviqjkon_U~aQulmzftz|`yuqxr|o?Ti|skeqdOp]~l]|mzXkl}NYqnunBS^os`vdXyTxdeUoles}vsyofuWcsv|q{Xcq\wt=L]o|{d~jimJd.CWrc|s}}mke[zkiuzyrbuw`shwSiVjzL[`skrb{yno:Q;Nkazxu}svoec`egr|~j}ylXjTjpetSg{q{g{SnypqdiAUsyd|hn{\cspzpog`XzY{`h^vh}n{qYln~M_]peuQh}QfdzC`Vqbwd~jcE_E]t]yWoüþ`grQ\iOZmSat_k{yvjeUpVr_|okj{Zev`tfy_scw\{xDGL\MTjV]w]iarGWt\p^rSd}atz{ht{t]qYnswUiVij}hmb}UkbyoMa_sr{~grXqPe|e0Q>QsutoiKq_=ac}{|Zai@EO9?I=CM=CO6;IMSfDI^AJbKWsXg7HfXiXk]n[j~^lm{hxyvk~cwh}]odsaqbwnpg{i{g{_tjf|tsb{f8SAPrl}MpeZGr?b]rw{IMT06@-3>6H`MZv9HcXgTbMYu[d{V^rkwXi}cupydsdsbpiwk}j|s}qbqhxoizoqtuzMsCC*/3#*6+3A9BS;GZ:E[:DZ?I^4?U.9N09N;DZ4=SMZrHUqXgguT_{enckZeL[vYks|e}Lcppsjh{h{iyjyhvo~ql}gyxumaJo+O@aMeyeellL5j?mGiYot~SWa88B)*6 &-!'/%+7+2D3Ke>LjFSqVc~?G_0:Q0;UAOlQ`MYuju]f\mUfXinmkNke`|^x]vdwexgufvsqi[pq|ytqXuUvFi3S{KiDRlUc~GVsDSpWdP\tJUnBOl3@^P`}GTpiv_kM^ZpUknm`}f`y[pn|n~jyx{`Nn\y_wn~l~uobz~xdY[Jw:W"3R&5%.5&.:"+9#(6!'3.3D3:N29R5?]=Ge@MlIVrQ_{N]wN]zL[xJWpHSmDPj@Mh7EbbsCRo@Lg8D`CUwVm[su{x{rVloprrk~yZlr~|r{~qlY}_kurfgQO}XHl$:^*B$0&*6.2?$*9$*;#):38L28O,4M3>Z=HgERpP^{KZu@Qi1@\DSpZhZi?Mf:Hc@PnYkVg]l?MkM^qj~oZsg}sxzYj}nw}nkncgdjbIqFsGpIpCmEi6Ry"2N06K&(3&'2$'3#3/2G*/E+1G27P9@Z8B`MhCQlJZtP^{[lMf*8P6E_>Om@RpPbauM`~EYv]rH[{Xj@SyTkfxsoihoUyLkvukzi~xpQoDbwGe|D_vAZo?Zp3Rh<_s:bx7_zTyY~Mt?e8^DgKq=d=j.\&U{)V{&Sz-U{0Qv'?Z#4D)3$*3"&0!)0&.8(0>,4I4;P3W2@\7Ea:KgFZwI]y>Ni2@Z;Kf8Kh7Ih4DcK]{bvPddz]ulcZ{QtVyVxUvi`OnHf^rvvxlr|ybtwmZz6Xi[It)Vp-W|)R|JzDs(Ox6^Dk,W)W,Y7`,V{*Sx'Lq=^%>T.?K!/5,0:#(/ !,/,6C)4C/7H7@S6@W2=V-8O1@[=NlTiJ^{6G\-m!Lr&QzJu&R)R|%ImQoFZwc+Ge-@ZS3Gb6Nn:Qs2Ki&=X@[x-Ig/Ov"Dn.T#H{Cu5[RwY{?`9TG_Ukwysk|fJv~ehAtvSo]Pf=rTSHvKv3]x.Ws,Us5b~Dm&D^,?T]3P|=UyUfkyhONpqh?tTAs._r>mItCm;f~0\wPy"=V.D,3C"%$""'*)19$.9!0=%7I(=N%>R-G[.GX 6IG`x0Jf6Rl7Qk2E+F[+Me:]f/W%Cu#@jKbp~ohnp\aSH{}nj=ny*\h&Tb(Rb&N]!IZ@RDV-VmIo"#  "#!&$"%,0&-*20GS0HT)AN7C.GV,DW,J\#@Q,IV[zSs}8[i2Xk1Zr-Wv;e:k:j3\?^EVu^plXrrmDjl7af[Mz~?kq8cjP}`bM{N|okCpz;frcFo~.[iKvQ|IsGsIu'Of3Xq&D^3K,( $ %%!# *,".3#073EMGYd0FU*AK5?$?K&AQ+HU5S`0MX(EK1QW@cmMu'O`AS*Oh(Qv(T&Mw:UxiwjzyX:^bTz}V|a9^b?gn>gq0Yb.W`?jt>it9gq:foO~VBo{K|_LRgQh2e~DZ=c{*Kc#@V'7$!"', '",6".9.:5HVkuZaSN~_KTiWo-f)[t%Le#I_&JaFi5Qc-7%)   %')1&2 .91BO.@M 4@/CO,EO#?G&CIOlqKhm&GN@J*R_)R_ BN)K[-Ri!G_=[qbvySnpKgkjr9UZEfl-PU1V`8]h4\f%MY5]j%LT%MV0Zd;fr5_m9gv3bt!Pe(Xo8i,ZsAhAV&McBj~-L\$9D %#%  "(,"(0*29)3;&3<,5"3>+f6].Ws5[o@\kyNdgfD_eJgl;]b6YaOx:fq:ht7frBq~0_i7fn:hq9fp.\f.Yd1[f$7@#:A094@9G(G[!E[1]s2by.Wv2Ww%H`+KYYpxv|K[^l3MS(GL@aiJnvRzBnz>l{1`q1ap,aiAv~:js:hrBowDs}6]h.T^Div5]g1]f.Ub"IZ*N_;Zm3GX220   #"**+.%49(9@,=D"7@#mz;kz3bu/^o;q{I|0_f-YbFs}0^h*S\3V_Eis2Zc;hpFs}7cn.Xe0L[GZeZ]Y %&&* ,40=F0DK1KR2MT*HQ1Q_7Wj.Re.Og,Me,Qj*Lj)Nr<`/Ou%Ac6RlkPbejaOt{U{\oezRjm^~hGovFoxMvYO=oc]-Vc7]g0Xe,WbZ[@t|0`jDr|ApzIx#LZKwOxCi|=Ve067   "'-#4hUR=j;g#KfPy5[vBfzSkx\w|Xkn^Gq}@my[Aq\Lv?dtgfMzI{VZVDvBsDs5]mZTc'DU,44    "")&5=0AM+BN.O]/Ub*LV2U]7Y`+LU2Wa0Zg0[k,[mGyGvCp9fAnEr@jFfukjmpZmxxQAqKv@hv\O{d[]ibAs~=p}4eq7`r>kLd&GZBT_289   ! +1'5="6?'=G1R[7Zc2QZ0MS)CI9=.MR@enEpyGtHwR~O{?l,_uULyPtg}HkqMzh{sHxGrlsHxa@nyBlxO~EvT_QTjfIz(N`-=366   &*!% %',&:@&>C4MR3JQ6LQ3JM3536Hio@hs2_i-ZeIr{KtO},]nFyfmW}kuNW@mwbkcIx3_hQ{iXL~M~eQHzH}/b{"DZ&6HNV!$"  ),!#  *--=@03+. 05/BG*?D2RX.R\9dkMx1X`DjvIwBrU$Sh.XnGix}qrfkZ`Iu}9ipj{T~nqcknX~Ky5dl9hpO|N|.^l%Vk)Ul"DY)9% ',,! !  %),0./*)(*,,*77+,,/%6>I]fIdlHjsOu;gq(T[AKNtApzCr`BpMx_zSprom~] PUip7bhMWjXVCmr@pv]N{Lt|Dmu:es:evEl1Nb 2@!.6 $%-"*2 *2$3='7A%8C)3%-!(!$),)64'&*('* /6*;G;RcDdu:\lXd]5_jKsO~SGuFqXc~Jfjys~YWuOv{Bnrvy`^WDuw_Blq2W[V{?hs>ew.Pd.F['9G&,')"! ),$+*4"/<%7D0CS4KZ2KZ0GV"9A$)!&+67&.- ,*,0!3<>Tc5SgCg{@i|T_dXQ}EwDvJ8Sc:P^*2"&)+$58(:>.EM=\e<\h2Sb.M]4Wh6WfDbq,CM%",&*2;?Vc2N]5Yj=ev,Zh9htfrWO9gv9cmY/R`7YkTk|cPu~IpzQxh|{}i;dkI+3&=C0HM5SX0V[;dk9eo/Xh6\m6[n/Th2Wf>Zg#4@'!+/&5=&:C.GO&BM*HSIm|CivDm{S{]Ly]Do~@G7[cNs\=Wo}z{as|~mnn{ylidvo[HosGrw:bg;cj7[a5[]bqPyj`pDfn@ekVLw}.UZ>diJnt;^`QsuMor1QW+IQ"AJ8DI=T`!8C/fl2V\.OT2V\hAjo,UZ+RW6\`Hkq(JK2RS/KN!:@)DM6B"@L1S_<[i>Yc.EQ&:I1M\*O^2[kBj~Os>`uDdx<[kIeu.IX;XfEev3N]0GX!6G"8H(AR1Q_&JV@K NYJ{GzLxMtGl|EpGz?rMsÿyr}mfrE@L75@;:C75>02;;ENm{Qxhv7bsN@]k@en-YbDr|L~3btIv2[jGn~M|Q>tR{qixMJU>iw(N_,K]9WiDat0O_#@QJ2WaLv~&SZR]7htJu*QaEmT/cy.byDj~{v~ngsrjvQKXGFR75@2.6&#,$-7zqmJkpsY~Fov]PzDp{Jvm_Aeo9Ye/QZ&JSIpz3[d5]f>clMmu:TZ*BG#;B6B#;H1Q_7Xf3Ve2P]2KZ9O]CYg9Ra+O]@hv0Tc%FV.M]4Wf+O]AfsGhw DU8^o@cu5Se5Qc0GX5Q^#BM(LT6\e KQ9fr9frKuBk{MxGt;mIu9Yj¾xpz`XcMGSOLU@cm^j<[i:Uc,BN)AN&GP?an&GS1S_,R\-Wa LTEO@cp1Ve?dtLn}7Xf7Vd9WbEen9Zc#FM(LT;`igx@k~?n9e{@ewNhurmxXU_HBJE>E3,3$(3xjqqotn]Jr{GnwNwFmvFmv+PZCgqUtKnxDhrIpy;cl-U^!FO0S\7U]DdlHnvIs~Mz]Fr~:bm:`j9_hDhr0PY,IT0S\@dn3T]Aeoirnw3_h/Xa2[b*SXFpuYEnvMyNz~XAhm;_d7[aMqy;Zb&CN,Q^8\k)K[*M]7Zh`m,O`.Vh*Sg*Uk,Na=Wfpmy_XeKER..6!'/[fjUyxyrk{cWyQpwMho;R\$:C,CJ+EM3QV:Y\/NO1QT:]`5]aez@fy=aq:^hGovPyMw>gq;^k.Rb2Zn-XlCh9Ug_s}kfsJDO0.:!'/3=@vjf{u^{hi^~Spwa}QksD^f'BH#CG6V[8Z[3ST&DG:Z`9_c,X[ggN{Bmu6`i2ZeClv,V_/X`Grw@lo.Z\dv=fq?ipXQ|W~>bq+K]2Vi6Zm-I]6MYzwliu`YeDrL|`fS~:ex:du*Rb=dy\Sv0Mb.EWDUb»Ŀ]ZdNIT>:B,,3%'FQRhr>X\5OU7TXWu{lPotEflMkt@bj?bjHos;dg[OqtAbfNrv0TZ]dHs}al=s9i/]yBpU9cx7bu,Wk?h}KrY|Wtfi5Z^=bdNtx9_c5\cUJzM|`K{imjnsdLt|&PV=itCl{TzhU{Hs{[M}Iv?hsBiyUGyGx0`|CtZO{IwDo:czDkGj?^u|z>8@-&.+&,#!#%'rzb}A^aMlrQpvGjp6Z`Ipt7^d3X`0U_AhoQ{fT|3Z^MtyGqyCr{^XFuHz;kx=oh>h?bztOLU71:5-3/*/)#&!"HWYYnqniUvyvVy}>bh3[_XaNwMvP{Ym`Hmq]cDs|VWQ~]WEx?s@t)Zj2`oOyOzJwIwIvN}8cjHu~W[Js*O\.TcIt7dv5cy-[p:j~O]9ixUHtEp9hGmH_oVZ`A?H;6>0)/)"#&!C=9="$*6BI|pJvwZprom|rlxeC))0HMYyyvh`xhTmU8huN~RItq^psxybIz4cm:ftCq]hjgKwDw>q~To_¿kgstq}NIUNIW)*7#(4^gsetStUdRDrlw}p~WSK{fVdsm^6`k.WaqjZOVBu*ax(]sIUPD@yTGx:l9kMrOLWges46D%)707CmtLycsahkatEta[sqbPvs}lArco_qknze@cp<\hxtaGNZ7q?v]KLCD=vIM;nEj}_]j<>L67F(*8r{zBnsClt=hrAnvl~o]yZi|O|Ip6]jBhv]hsT__eSJumzmIq<[i"@MU}]6nzX:s@={3i~GzYGDO?|JKNEmecpUXf:;G&&1@GQOdkWw}mae`mpuyKuItQ{_cmqk\ighCsFqrxX>jvW|8\f*V_Z4a@sG{9n;qIiwevDiyiFfzYR}egkdRrmeZ9p&Wp8i;j-\mOZBp{iS~Vp~e_lOGV<8D>;HFJVup;_ilW|:^v4YpMr7bs[{VONw{uepKwZPyOw_d@io&NR'OU0YbOyfsDr&Rh*Tr&Mk*Vm*Xh4co.\g,Wi*UkWY-Vjl|leqE@LONZWYejz`xKhtTyWadgkawse_ghwM~nhT]]GtzEnvJr{Js}U~gY*Vf>i~_Gm.Wm*Sc'O_CU2_x._xZ-\u)M_¿[VaDANRQ[~axNnQz]HtJueiknirr^HukghcZ0_p*[gHvHvWTMwcjWbyS|'Kc FY@O:I*Ma:gKBu;i~\}_\eYUaihrmx?VgOt[3^v.WqNvsj@kk|v@k~_ph\OX9nRDzDuBq7ey7cx:fzV}k/YoCi|=bl,JR&AQ,Mc3]{'[{3fJr~txr¼¿}}z|{~LYjAZoPp.Rp,Om7\{KwfErEo@f9^>gGrOy:fIwGvK|NLMIMD~*_yNdUy\^CnJp~#>C&((.&?SDg,V{;e`zr@g(M>^PxHr?hIj^vvQiGa>\@bJnNtMtSx^TGs;hO;h@l>i1];i[OCAG,\u"Nc[Z,MeBc{Pt.KS(*!.0!2@)Ic3^-VyKjck]d[d^m`wj`<^=cKsVM`NuV|\^]UJ}NJxMzFp.Y*U;j9o4m,g:r4b2`yNy?e-Li&D[/M^.8)0+80JLpCiGf}[fyQbxWg8JiZ[zg]Il^fZQVTJz=jR}VMz7f4e6j3iAtAqBuO|Vy"<`#On>TxDY}DZTnEa/O9XGgLk@bp{svrb`TELXkgUF2eD{.e}+J9S_q3>T3Dd5JpE[NcNg:VEcMmKkAbJndy`jjcUSFWST_E6r\BcClhYZkbbcSv=Y6N|Gb_cnc}]nfMC}:r7j3^?f@fKqBg'M C.O7Par=EX&3K2De9MuMaI^DZB\cPqGgGjm[pwytkWO^8sLYF4vf.w:}A{M9l9g Bq$J"7`=U6Q"=wDfPx5_ZU}NvRz\meYx3KzBUOi\}kj\y{sQ]eLR:t>s?nBoWFm9_2Y=z6X3Q2K}(8b%2P%3P?Quz8S+<_.Q1Go9SE_[vNiD`WvX{_siaQUjeQH|VjpX/y9-s9|0p@J?x9k(UOw+R3h+JPq>d7]<^HsYcXTNVZ|0M}/GxVm^vhl]gihc}u`QB~IDyM}JywB{%Y@t@x&R>pG~;xKZT?vZSY;l&J%CzGlZb\jeeh^.L!9mSi>R@ZV~np{|jwu]m2],S^Tx`YbL|OQ5iBv[YhOz@i`lClbYUohWaklinZ@n0\:jK{ =o :p=v>{K#YZ.t?SMG@IAx*R:^7dK{ieQ_Zc+Q0i7NYq2IFbarxq{ub`=k,NCcHkmfT@qid6lH`ZS.YDoIveGuFwKyly^aKpGkkkS>i5Y1UGuGu,U3ZEoLyTR7t2v0v@@}}EH:iGv;kZ;k^RSeJr ,b,D{Un?[/JKkdiuzeW`f7W%CzIkicn\hYCzCyF|`M}DqZKyaBrFwP~q]Z~@cOvmfCk,Tw'Ow*Jv:e"Gu/X3YBjXZif]YF@|5k1f.f;vGH}]RdGvLJT[?u5iI^[w:Y-OQuooxvjksDd0l-MImQ{`]\[hUNiUY5d5bL3cLzmtgSxDk[W-Vy6Z5W}.Pw/Pz#Dl#Fs:_Dk9^F~B-]2c.c@x]Z%WK,_>vDyDyKMWdPJ~Q2X5Q7M&:p8U,R+VIt\ayefch?h&G3V+QGqhiUIRF|3e5d9dZ,[p*\+a)_6kAsTPFvdQ{>kCnSV|^EiCl,[:d/Sy7[6Z@c:Rr,h\9[rB`Lm?bNsSyQtukZP|qiLH_FbIe`ye^~hx^Z|a]}De*J2T]?rD|7l,[OUGk4SSsIn:bHs=b*Bl(I 4Y3Ku=W@\B`FeFeIhLlRoNgYks}c|gq]M7ml0c'^*_GwFsEj>` `?_XwYyiqpnvbIe:\/T>cMu$O"SGyNK}Dn@fbQs9a+WiNtl\|Di%J5WFc!5a/Bk,@l7TNpKrGpJyDsK|Rcm{fndboeetfbnUSZz{AGY`otuVNH~U`hPMDx1`9iNDtGpSy\icJoDfCd4T*Gt9d=]Do>x.QTxV~Zc`Gi=[Ife]y^wt~roR@x;l@lMpKlLjWyTw:n*W"/\0?l/Ev8TKpDpCsMKP`PdnZZ}_]jDAQTQcC=L84<@BM`i~dErYdD|PRh_SRA{,a2jMO|V~QtVvQqC`LjHf1Q*I|+L[]!K9\>^MveX2W.Ijujck~o_M[Q:fKpHl@a<^fpBlEpDkTsJd3NzId3N~/I|B`HlbV1WMpNrbe[\y;Qb{azMij{}rcZH{4cLyKxDn=dPw>dHnGko?X,Z*?o9T?`-XIz@r6kS&]wmisiMgiWoDc@c+J3T8\;` @:Y-PCfW{Zzg+@y)>q6Q;\,WDx>r>q7jQdXZFxO~|`heodbp;;H +!DN]w]j^XZlhQjRTiC}6k9e<]B]=T(W)>u=UAc,Y7kZHf^|Xu7R3O9\/\=m=lBpUjTBhCkeHvJvK}Lirq|A?L42?;;G@BK$7>E{tdKMXXaUERSg\3b(O&A(9j2?d,:],8_&5`5I|:WHibhhQyfPzFkQ|aEuM{H{XkZYe:8D"$/#&0%%hoYXL}H{M~SGx[UND{`S?nHt=d#?{,:i-6\%1R".O&5^=U@^W{Np\|D_&@vPrptKj.EF]d}yp{zpAP4ATcw||qi[}#7-<(6q+>s2J0J:V[zcBd"F6\?hFoQ{\W~>gJoHr?mThbmUT^23># &zguQ|LyAnFqN}Q~O~O~PXWcK}My^S}9X&5d(3X.:[$3U.@kB[>^hTxKfG_,CVu`Xx,H,DI`ZshnuxVg29X\||ob/G*7~"a1A|BX0F'@:UjVx"C8]?dGmOu?h+S)PIq8_%NNzmmiSV`%'0# &XZUAn&O1YJw?jCjIqPyKuQ{MxAm@j@jGp_Fj:a.V3[Aj5Y<\:[ds^hlr*.4$+`J}R2W>bJo@g8ZIiAb!@+QIpDk7\=fHrGp-K,Dt.Cl3El0Es;UmLopTnEX>SoDaOkg}@T0DYmQdg}ySe=K(5!)o.4zQUqxzsyZcMY_Kq8UA\E`.J.MZ|Fi3SX|S{Nx*N*Gz,Dp8Mx7L}PktqVzvbxH^ipb}rOa3D_5Q;VB[(@{*BSsC_5OVtMn]Ag.S*Er9Mz2FxD]fykh@UF]p[vm`q=M->g{{g~|`vQax(V7W6O'C};[0M4L@X,DyIdD`(A}=WZtKeUxJqGk7SYvszZr9N-@nzWm^y{vpUpD`QnYyRvGp*T3[ ,q!6x;K7D O*T(:xHdGlR{Z?:YC[4Gy.x$@B`1K#8b 6\/[#7h.Gy9V3L~4Gs0=h.@o0K[{ynopD[@X]xnwTm-@SgYnNhrkc~sZ~Z~Eo=g;g+X2Y9*=2A'`J L*@FgKpHnZ6s'G|DX8Ao&,V *S*T3CnYf$1[*SSopXuCZevvqlf{]WnFB[<:QLJ\nivd`lyxv_1^+R-P,I;X:VGa%e6Z,N7Q2F*7%1u!/l&b2LNpGkPtYz @}:o6I{.7d%K-7`%3^&6e9E\Wbkhtfdq]\iss~sY:e2WA`@\,F2M":k*>pKf5Q3Kz3De0@_"3S!0Q#2P$7X0A`0?\&7V,Dm0MKhLicJfzOe?STh3DUfCQ2DVmehkFeRohB[`{?Y+D}*E0H>W:W-J3t6J#3}$3*;&7%:DbRuA`c@Z%@y3Q7M0Q63@,(4,)30,9NLZWUbNM[zoTNz0R9u!=2p&;lE/U:N{*W0W'5T*E)E+6Q+5L)4Q@Nl;Ic(:U-Eh3P~htQsl_w6K\p0@.97FXpNje`|C^*EQkH`7J6J~%8l,>q$7j 3o(:x&Oq0Dh/@d)7V .K(@!&7!#.')A&*E#,D%4O0GiMi:WIey`}HcjpQhEW5G5M6QDbF^:P)>}!9r*^2e.@v,>s6I{8GxATI]Og8LEZ;SC[6M4H.@0F*F?dHmZu#5s._6H|-G}.Dx.>m-9e(3_5Bs@LLYMYN[:J&8n:OXoayj}{pn}IIW87C34@+,8"",%!34@qZGo(M4p.I0L6Q'V$K3Iq9P{8Mx!2W'6Y;&%12!9 -H2GnB]Sq6R8UdcHgg~fbxF[=V=XVrMgHaB\2M!=o(Cu'Au0L@YKcSlMgYtI^Qj:T@XKe]vPh@X:VAcJl;UV*]L\5N/G}2Fx:Hv*Y".^2SAUObqbcnJKW??I57B++5&$++6xIw"K5t,G3N.K"=q3`+Am6N}5M&;j6Iu"0R "*+3*2P?N{D][xRoKiQq\|kDeGd\w`z@WIb.GOfQjRmZxQqKk\|GeIhMlRoB^NjNhMg^{SoMi;VKcH^9O/N&H)M:[RhNW2>*<:R2Hz6Gy5Cv)W0Z;GkCQ{@GqbfhitOQ]mo|bdp87C'&0%$-('0"&1sylY$?~1m&:p->p)7e(V#L+R$2V"0W'M&B%;'.A&9"528L&D3IsGbMkQmOiKc/I{@[/I{3J{=S>UOgMgJ_GUx5@[&/J9B]lx|j~i}i{jkgb}c{>S4H6JG^Ib]zOjBX8C/8+059JUK[7G*U!$;(&&767O*.KHKfrpx^aeu{~x{y{ilxDET:9F76A54&>%-E!<"+G'D5*.F9>S2:M%0I*K,;f1Bo.@l+=c+=^CY6Lr"0W+L$.O'E(D/;U,6N*>#*=-0D),<@DYj~r^xQl]v>T?VS4H6JF]C\HcQnGbE^9N0Bx6I{8Gz>Lz # "*31>@?OQTbgnsijzPQ`OP_OP_EFT66@99@>?B*,,!#&' '6vVkIago[>oAsTNoI^#,Z"(H.6W8DnIZHTnR`}kx}rZs/J|?YIc?VVsttuSTc'(5$&0& &!"$%$$IQ`glrg`wGT=2&.=$8".G*4I )     !')&#,EGR;?I`ipbio !" $%,55>M\fzbpftr}ermz|pi}i{zdxogej`{Qi12?'&1!!&$") (!&&$)!!! (1=NZo>OnAVzZoXkTb)3R %$0#,5(4%.:     ! ))325B-5@(3BNUjuy   $&&+0/4>:@NEPdUbn|gt\ldul|}pi}n|hlJgIhIV@B[cbunm~xyvxuwOQ]35A..:,+8#",$ & " "#&''"!$.-,  ('6#:90*         !& +:?N+3D&1&    (.2&-6;@P?H`Ubtgvdsk{tkxxi6AfCCY[Xjgfw`bpFGT<^M\Tgbvl{nuermz{w}s-6R?@L#)2 "&+6(.?'2M7GlD\blezqYkhwn~xm{cqkxw}|;Gl),BDCQQN_jj|zdds>?M;;I/1;#&."! #('*       $%#"+%"'&&3 !. "37D",  "&0)/>8DaSi]|up^Q{,Hx6&(;,+H;BjYfiyammz{szm{cqkxan$':$&6./=JIZRRcddsZ]kHKX:=G36=&)0#&*! $.-/     ,*0-,5$#%( ++,923@02j#@m 2%1.59Q&;1LTjwsmz\jgtjzammz{iu1[IlAi8a+T:\#6`2'$*37M&*;       ' *&(203A::KGGXIHVMQ]jlxv{kn`dwef{hixhgxb]ohcsRN[E?N0,83/;,*4=;D64=" &%%%  !*"$/)%"" *2@ZEZ} >e5VHmFm[dcAY!@!6.$7#+?     " $.* $.,/:EGR[]pa`wROcddslnzvzlpnpvvkl|dargbtjcwIDTE@R73B;7D63>>;FDAJ'&. $$$&&&  $$&" )0<5?R3Bb6Nw=\AeOw8[=]Vv[d=Rt2>T5;K)0@!   !&))*,7/1;56ADDWYYohhyyr}iav[TfHAS62>51=63?.,5,)2"!&! "  )$'3#&2,-912?"$.,.5\7\W{Ih*Aq6Q[~Ps?LZ[hmnuuyyvpph}UMaYSb95DA>K73@<9CA@GGEJ536,+.!    %)%'2%'0"%.&,0&+6(.;9@Z'4X'=kHfKlFfUnCWW!2  %(*+7==GHIVKKXeftehxy|c]pQK_ZUhD?SNJ\MHWOKXDAN;:C54<,*1**/(&-"#($%#('&+0/3('*     !  %./9*.=&?,7X5GpBZRm?U~4Eg6@`"*E.Me2>Q .    '*3/07&(2)*677Acfq~utyhftgesliySPaEASB>QFCSA>K:8D;:B/.6(&-% (.,5*'01.80.6,+00.3   #!!),0<+0B;D\+7U,;H>=F007               # %"(&%.*(2,.934@>?Lefqghspo~zzRR`SSa<76C<!               !%# *%$.! *$#-02>ACO<=G;;H[]hsvwyWYfYXgPPbDCSCCVCAT;:I54D..< %                "("*! *&%/'&1-,722>/0=/0==>Lhjx~``o\YjsqZWmXUk=:N>LSVeHMZHKXY[iz~|~MJXEBN32=+)5* '#%+            !--2;;@')1!*9;D/2:/1;,,:=>L@@OTUd~KHXMIZ>;JDAO64@**5,,3(*0#"&*    %+,2,.569ABENX\fehryzrtcdrWYffhvMK\B>Q?K>$%.&)1**2 " &#  ! " %&& "*LOXWYe`bnyztvJIXGEVrqccp\[hHGTAAM::D*,669A (& &&(.%    "" #$ "')+045>,.5.3:?L9:F\_h55@$#,&$*(2$#,#!" !"& &-0602;9F36A/1;+,702<==Gnqz25>23<@@G,,3#"+))365>54<+*2+,3..6DCKSU_=@H8:D<>H`cow{loxVXd67D02?67D34@<=KprUVc;:FDBN>>H'(2))4;:DCDM98D33?22<>=IZ]ekoyDGSDHSKOXjnxDGU<>L78I78KTUi``rcet[\iDFRcdoRR_66B@BMIISFHS@ANHIVCDNnrSWc^bnoq}cdrUVeJIZWWkKJ[ffxbcqbdpyzQS^EGSJKVoq}CER=@K@DOLOZjmypqTUdpq\]l]^mptaeqZ]kuyOR`RUcPSaGKVefutufgu}qufjvrv`cqZ^heiu}rtxz~w|eric4-4.5.18/eric/pixmaps/PaxHeaders.8617/loading.gif0000644000175000001440000000007411176545422020312 xustar000000000000000030 atime=1389081057.590723481 30 ctime=1389081086.307724332 eric4-4.5.18/eric/pixmaps/loading.gif0000644000175000001440000000151711176545422020043 0ustar00detlevusers00000000000000GIF89a@@@iiiDDD\\\ཽPPP걱uuu! NETSCAPE2.0!Created with ajaxload.info! ,P di0l!*`Ƒ5و[<iP),IZ$bH85&x5k <yB! ,h GҌh*ਨ@$E}eh @ LcQGBP5 <5UdQ+"g0Ak#A nI0$K7 H,-t*E-``1@C7h/1f\)&!;eric4-4.5.18/eric/pixmaps/PaxHeaders.8617/eric_small.png0000644000175000001440000000013212170217300021003 xustar000000000000000030 mtime=1373707968.589653042 30 atime=1389081057.590723481 30 ctime=1389081086.307724332 eric4-4.5.18/eric/pixmaps/eric_small.png0000644000175000001440000007665512170217300020560 0ustar00detlevusers00000000000000PNG  IHDRdL\ pHYs.#.#x?vtIME 8}LIDATۯyywwf?!)EXVdm-7HBnIA@ZHOzZAѓHN(q%KmIN7kfYw<}]]CKmٰtG<8РJSeBG>?77eޞ[Z`mƱ[NVh{R!b4$in 8՛f+WaTѵTHP$j.$ϔN횾ɒک/1DU躘M]W LEIx0E! Q!! FDa0ːGXX\a+˞G1hg4QG e&3bAp0)!# RB(RK @&r "KD yeoP5-8jBA!& :Wc4jTCMЌhc|/G˺h"\VHt[uf3 k&a)rTx:D, I,G 2C&{ĉQ]J)hFd':.1ii O[i5#OinoFwc-Q NeFSH p'}TSQUM%Gڑ+D*}.%:#'MdpAqځ̐\RxNLq $V0 Im+5',J(P`N` N2 +U#FmBXP?@{2mfԒ@Xɘɮu3^gѨ.ɽGfӻnOd:yҥڗpxggd2^ZY-5F9冟Ir $CS$l@25*3&~`Q<+Ԟ2xG~Uirx%%Ud!*yJ.fC6A [BDx` r)ꬣY4$Dnșd0! p+MY{;rSkSz" )b1*7\Mg` I( UDŏEFy@MCs;%?p7ɏպkn6-vҴ?k?8<< o7i4?gtt2YY]˹H`tԼz# )PKXuJɛ6DJjZrQ[牬Vu$Jo [JHJ%, U̡\AE" '"Pd[U(XF JȎn2iQDPku |yrxptt47?7_|o}Kf vJ)e2[o.[oqbc:F\H;hH)I"ƒp'x`x@QEudxD#WdaK@ cA. scKH #£L[R vg.,+  QC2ՐQ!̃w f@!t\ "j A$R <. D9!ųN #3 jМ^7O\+_WVVZ;{SKLR|$1q7M>?RQc rx>{=sXJxp0{N9h0טE(%df΃SO_~-YW*"jwRqywo\6N[sgWO 8ujXW]'OOf:"- .l.=~vcZ;?%խsKjZÁ xhcmի[k7^5!dfk+ﻸN@'B"4hW9ayp5@m8_ !JH|J‰܉5j=8ws l|L}ֽwƇߺso潻xZkDH2Zk"<"pN刐徺[JM'6֟y3}}gΜG[Y{ŹaJd)RfЪ͞,@ q)d'4=m5!5X#kD 2CIIdv}~~x헯~\?.~̈Ũ)-!!dx/+,5$sZ^{,m,Ȧ컗xgkVd)*PJ#dMGD $G9>Fx%0\sϿpLۇܶwo-,,}wf3ef,5M3j`'V+}o 斖_x&n߹9Sm>-5RJ?OaeIx8&$ U,H='9V $D%H0ÌHBI@KF@2)a wp"h>J8wp=Z)-!R3JI2GG/y}2^3eSbܕ>ufw@Io߹w)д5p'PDA!. "gjTh*2%*?a6\~pڭYtK'&GGdRϓȉ ÒR9{;qk*g8N'k" (kc!QgZcCϊԎ:9&OtjT0(Goݼbu/58Yk{m 5kX_A_Gno꭭Y_f0hǓ_Km;wWoy?yfDLP*B .KUr sL OIi{LirL-stNYjEMoܸ1eB7v9zbugOXϟ?Ã__Wozu}umu}eh2,(il`PB)c sH@3PQ@`FjH J(!C rQ&Ȑk12!$,@+^!8&AS; wQ;ra0?q`*[~+W6Fw8{8ਯ0޴99ˣi7K=u?B2릥?ؽwgkz4`ԌFkG|;WG_'>hğ%@dBRuEa #X F& T{#5p@CIWb2yCjcJT "=eJ?!jDHFps7 $Xp@ĨM!(I"7oRWVoRJ <8AXG@r@'R(+rTIE𾧟988yÜ?zwG_`~7֌:Svڗ맕a7{s<پ{ޠ۷ߪ+vNno]_=#{fRSO榙BB B^"@IN$ A1+ȉ2LxNJa 2ܰ2$c B h 7{)eJQ) AAHRO^a s,jzWr\ p!P ATŹ7ymqCS %¡A ~L#sLC@P(\˃l_}ƕo;=;.ܙ{jttrjagG*{WN?uanr{<lmy~޵ RUhaՓ˃??܇Z8mğ J$EKHE1%0BԂr=,eRed9A'a @@rǧU0C ǻj{)P5Q35a1U(E"DFPD7B@;Bqz}Cz Kp$"xbؘ^-(Dj#Gg; _xayoܾu+Wnnn{{)5R97'Ϭ{䛿z3n?7?|{woguW;ͪGiX~'n/;Wn޽t9膧,E=I}}g_o~p\lƫUS)+e$5, ک6Ɲ,7ZY (lG8w%'rץZ`aURE(HnR"lbFA93F1h,v`sHR<)\pPdch wfI*"98쒕̴楪.QJEZ.F4Zcܚ)Y I`b B ld,$.%JlșR.(!QGOLNw>9)?{W׾w<},BC;|aNx.r8bz3&bJC23MK:%:+R_x.J/-'*iاuX&:13V1 DaB$ nmDlVmwIzNNPr:)APyd.٭Ha%Z%LJ ml %x% XɀO{@QsQ;.:ja7AZN -)J0?7~m2*{/]_0#ﭻ'çq7>s_{η;{W{啗o}w8q|.)+wodM IR$FE` M&YJsSi^'Zfԩ%p)TK5p.3(Rj g0 trhr61s~_Q KO8aq,hEʹ0/FmɡI2q29vnI6u1YB`RCPAlrEI4Q`Fa$ՉK@"ŧ}.}1vqqڷʴtޞ{Y1} 'ۿ}䅛;?:ݘy3:})wOG+}dqzvzͯ^\q9_•馺o68{{kݗ|dued}B&,sAgK+ 0Ӛj˒iPEpCf-t8F[h[I \ݣXA%jf6QR[]֘R&ajkuk UCP!%h #bA4xfX4Ih ##D93,6R0{\ywmef;)Ic9q{o_ћWuJ4nu({{zQwۋO^w7W|^sH|dw!K$Ya|1J]UJ.)M]?t%GwPEb&&ɀ\5Eh QW=@h\v#Zehт,e<4(eyg  . Zp @D0! C fa,I(#c , J&ĥ @978ZBhmʿIҕkWo|\~>[7\.wݙʓ)Vs+bާ_>ӓދTJj/mҷn]yO+LXVַaw|BH'l;0SRk^9 Z8;+t=Kq,C=i(|ܭz5uks^;_GMqARʴh&-&$E;4%5i3Q@p -&%E`BdB6N( B#~!#p6uBL 0zR+/޻_矼]ܸy{ͣUrYŵ˳'Ãjڶ} /i}+#==U>|K}3_Q. ( *K:+'苔,r(lTRjtfypBk;מz\72gͅ0nX&F '901QY41OB 2;AoѤb'0x.r 1JZ`C0H 'B\` !~B ӊlH4 T@NI%7n0^N'p[vO4m/^u1\<8><(\9<<{.d=n S NNO=~|rK/} J 0O $H\csZ׿s7N4i?|zpgڦMl_wg޹ym>W\?k?ʽ#Mڭ+:u_&<7bASgNHM,Y<` LJ:rJ%"IAn(ȕd WIF:BZ Λ;/!0HdZ4zYydȐ!t&CFI$@{X1qNgJ[4@ah"*b-Acn)XH\$$$PT3 T4cr}C98-y+nm]q3n|WOww<\Jnܾ6~}gG}~Mw?8|{O?{_!GOv7oma׮Eޜ/r;o}a]Vbul7tr|~l7=;t'_4YIXUT$1RFdIa/T %" An8 K CVGt+edۧN=K\ZsmjvhRKTTqs34H ,ٖpf20j"CƘ*U!e%.D2B 'BXI K*#``d gOzƋ^gvgO{.nO|lm\żJ/p𣘖?||ٳ"W.{nag'XAJjql7 $atXˎ;e|شL+6.8nd4$)4& a[ PCȤ !؎QRFH 8AX\l. 'HFrBgE6 .H%d HTƭOxvz֭F}Ŵf۫8}fyWn&ɳgiڿuwi>wN?nqhonI$ 2dGX4"$ɐMow-$JK+)s2Dw5o3M0>_i?=[mNYjD4ٺ6Hh``jr!لqvk-Z[J5.Re)  7$Y cɦb dg $~Хb. S!䆐)6mmO9dsr^Z{ɣGw,ݕً_OOR[uwg˴+Wg_zNq惣u^ #7o)e2?.#y0X `B,tvND/$JIKcuİc=5wux6œ}̣KIO$ B8zYcIa'D l5YP2\.p8h66j3tesVKʲSJrRfY\DXX $%J6"bV"erjd.Ob'{dY['nmIL|og~k?s?4qt|bin?ӧ|Xw+Zףw]}ևGo~{뻟׺z~ZY=d#zιÊ4#e,8!M=H䠯(A%%r#W>f}M>xc6tlƎuh %D)44E)H$egS 0]Zm˼Ա3N՞ڷͪ\DV]\v阛j \p dDʊ8 I j[e˥yL?՛$=}{0 }WJ)g) C! 8ay.lHM$:^ጐPRAX`1A%t ϻNt~t{q7>۞+W~G/?y_Ʒk چtp^}ճ⥛ÍɓnI\?KZ<{RH.9W3hRo~ϩLj%hAg'YrZiYi4S4m ]&MG8 SA|;OatCWJrJK մťX#98LE$r*]NCJ=F9r.DæD %AF),c>Q'P|0o/o}*yv?^=;=JrG(bs˯yz+$06 Q*YR&A(p7wPYN2fZ8Vk]hT֘'V]Z~2-ۼݲM-4O,YznnvI%#*1LJi5L&@HɃ޸y^$M/ӻ`K)])"5Z /vFp8\B쬚4-QZȝbE%S$1 RJ]Wiz{''ܺuk3}Qw>:7̻al[|׎7OGfs_]dZfy`& ~4nڼ9kv֦ͱ̵."D>硔U+y_*㨋)znivŭ>T?G6vErشf<%Gt%㾓w^̵_ywVtj+ҕ\R8XZ[Z["s4B[$;a| BE)_Z^ʐ> }:JG6, >+GN=xݳinW6ay|{%ZZ瘧6<[/58k<|?ko3fGQdQ%V;v:]J*G4?䴫:};I`Z ϝ PRr]CGDy4u7B7@{,,hEp&KOZZ.Slb.Oi^Ӳ-R'Ѧܩ@ e^Jêm9]ˮ)Iks<92Hgg9ˢTALs 3(`\y,PI ϕIR !y\"2*R.Z A$2yss9{v:uLϮ!Ģ,SX,%B ))뼈J D1"/BQ&*H-o}{{V]n"t9Mdi,.g/(yU{_+wǣa]S6d4jrԅVe^#}I]jM\4a^y׋9=mg9cb*'GwLMӷ:Էɬ;^C]rFd;Q)z͏HdN5 G+H$<{?oRJ@&e3!"ZUtk3hBc:.?2KisS9.{F++k[VV0V"@sNhgLcҠ_!!B@!<`Gg݃SG=8Ӎss=o'um^wnLͫ皺?^n8^98<<|¹iӡ(co,OOpF\Άs 4J2nYF)ګE[tʓttz86^fG7jPۉTFHXA/KY0yxL"Og'˃ǯ^U9x'+_}seuJݨ* Y׾d'vW'k(;I9:]Gm"ʕ˛Eaw>?qgSH&-ShW^ztxN>z?OPU4ݾs{WEQ`!+"C$ \@&*xD!*Q`x13)=ʪ\[]^z1;Ջ$yggrJ}jc}Ât9.5.f X1`bWxD 0Hi5-r|uq E?X; )X ʕՋWm\ZC'xrfٿwgέAmꝽiGzlwvIf?/Ow;`HjT B*c\u0h1j1}Յox /~xQ('`RE%//xƸµ뺔(zoÜw?e֝>&k{v`1g7)aY rX폯|vo,Y43U6M;B7&ɂEQ/@00"KcYbðid1;8φUoO[|~}XVEДnfwTXOPVP%\j;*/"G^Y jPTý]<pLB-jB}i9u@yٵ/Virq󽟏(EbXQE1*IYNj7(|٠W!V!fLTMD\BD BT*A##pL BP3[}/jxuAK΢|W&ln[p3-BfEw{.L6W&kեŢ}OkmBЫ0ؔB1`g.xqtRfݛoMOPcAȬ3:Nk*&*4* 0Z7r>+z}s{6GUÃr\wr3?>i Ǿ`ZFfr8:[ۘܿ 1nem99?75wv\ i0UY/o4WU/~==g-Kvnzҝup iH/̧PD-"j2Xh(- s=Wa5"*UhGP2d,p_C<.,¤o:JhP) %yRMQDt8'LW "*E(p(25\"gSղ,{Swhz ag'Y̏+Bo_:uK?Ԫyikmk˦W(Q==-˯yXjtܴBBB(F9<( ӠBMK9ܶݵ%j$4ݺB Q. @bY:'MjhMqC%   *9sI?^YU  !" 4RqF .7rw$E(yxin"ZH捵B%]pZm^<|rbb{N,#%ǃihj]`g{o$VJ5P39=S=Hx @N]\ee1(ɡ‚~%tVtOmboTiRSvzk$4ٻUTf';^Mj?frCtgVw~qYwxQky} F _o}P'@ LsT/5rBI5"?{y N. xm2ȴPVE^}z<*@<3"2t]ܤ\w-?(]G!J3! @!j E$; DTU*A)R"`@[aD\\wiB! :A(!M8sw$t'EDÝ{|φ>}c# S&2yw_{wB= *#]@&Uit"xI?j`FfubmseB? "_"0SMt7^|j$~㣪,AMT@B A&"vMfrq̶y 6v<>8mݙ7 WVb:Uÿ/^y;rdcx81,\ƀ(rwq3TP 㕭[WjBQiSZ4>Tsq )x]E,7_v7$w?seQə D]׊I,CQePMU|*" m xZ,ʢٝN:E f?)Irnsvk,M6G,FH1CQK)LVJ]p!,Y$X,kV vke[^t nqzvkӅN&W`9 ESsoo详G.EDTwAgh]S*Ԑ=<4يlEIp,_4Xgvp?o^:9x͏&^"Hۉ!b!i~嵷 C`/3jA-*D\p@~&e)iWw?~6]YYZ+!MOGzKʬE%6 _Z1P7";e-W_Oˬvme'?8y["FBX bQ7"b/QY/><}X4FCРBښ:# _zO6ݝd{~43MT yں|UcA_Շ훥Wݝ%I'd5uׄDk5xhuc녫wﴊsTBںz&4B^}_{".M˺Xn{խ+N;fi$w֤&q 9U O}_pբ'/W'{Ab3褅 jO YEZE;nڛjOp򵷿; =R7W6Ytwxl=!jADUP )p0*T(TijАE3$1k%x<`۶1FBBO,]fuWR}~p<\n??n^\M|:rٔEl^UG3ٲzAyOCprg8Ѵ2s EToi=?ؽaw?GG{wjrqZ5X!?3ocKNL=#'H8]Oׇ<9/|dLFEx4˯}uܹA'j/aT]QT9֥T2@_ KR7~:MEDYJv1}a_?׾S V݉R[';UU+W);,$*4`*rRE0:b圚"eY͝9*FUjl^{띕 אmMOE(*{ "yPw"δx嫯osjz1ҽ^Ηb1#٥VH8ٴUQH0+TT!8T ]ԁr.!%X bFtH% ųD$B0G_a(6xګW yT WÇᨈV"zbD89y\.f;XXDIn]ITcX(Ăx c FV!vN$ T@H.!YA8e^aiTB _}wxHяU`fʤ=Qi3=ǿ~QFȺۺNm-كZ-i41S@0HP]~Ch(D@]N D"&J* 1 fAT-B!$DA X#ѣ@\"@UIe$߫_qykW_Bؚ@ib_vTwmRUwEcjLV]x1{M,Z%A!3"D JIa&x;&, YlA+R?MN84 @(ʔHwJG^ ԪX6ANN ̶sD/ceDIDUTլiis"PXSfQ }D" sn"Ƣ1cfj!Ĝg'$"@@!T(8#Q gLψ +59 P*)1He(~3XQV!TAxx0;9ih:ˮw&yNzgvzJӂ˦r5GPTbJR $hB@TΨyO !"f#b.TE *RH"e^CLH gqBr dƮܩUb* Q%QGP-iIBK Ѐ` "*hPT] .R QDL5#)gH!RYf,v*Zhn͓B<9`i0 fAUD(p(@KJX ,B#rfRS7" a4Yy[8?>ݿ׵1va=tI/e)} m9xq4PX,bP@IwHG"xE1*DDB)@& ˝^\g2eO x AT<@ŃRr0tǠDvՂ&PB+RSL-Up 9DTDUE` " ई,ESQ$@`SBDDEgT$@!!`" R4<'a"QUa^ziNHg.M5uf8bb fDGDp8A% @H1t M.HwAj:Zk,R0z!]gͳoupyQ*-0 sE'F 5Ԣky<}Nr{_Ja-3@9D^DQlDQkTb~oqmoxfUzKqBm1Rv#*4,3E9E`=NiDUsSi_~_kZBt1[z.F]&+/>O2G_3Jf9Y~7]h}`UWFt-Yn&AV,4+BO3P\/Td6\Vnr=cl0]h3_j1[l5VhGMN$&&7>'CM/VlHf}nTHtJz@ozNr !$,FP4V`?i~?gmkc[L{7^r=DH"&'-./.DMDnyFtfw_\>ej2T[&?G0Q\6Xj':D+DQGqBm~md_jCHRpbQyAen3W_-HQ2Q_6Uc4Wg5Wf4P_3Zd@k|iCCLm]?^g8Y`9ah@lu_`I~3bCo?k+Hs8\Uv`VzCuHn5U2KzIpn65BodZM?f@XAbU{Li~f:[6WEb4UH|X36?O}ON3O2GsKi`Nghguj2F9PAcEmFny;a:W=[DeC\i`ySgbwFS:H0E.>wKm7U6MdZVjd`m~7\,Cx(=g+;_8Ozqe}MaVqRkREX'+EDDSHIX##'#S`wb3Cp%/M #$)2?I[wsb|RkCS}YZg!!(     '08Jc~[kuP[ytuADO,*2$"$.(*45IeMs$-C#&*:).@+.:kkwXRd85@! ''.?@]F`#3 8:E~WTc?FHQkny{|eric4-4.5.18/eric/pixmaps/PaxHeaders.8617/eric.png0000644000175000001440000000013212170217300017613 xustar000000000000000030 mtime=1373707968.538653006 30 atime=1389081057.590723481 30 ctime=1389081086.307724332 eric4-4.5.18/eric/pixmaps/eric.png0000644000175000001440000041700212170217300017351 0ustar00detlevusers00000000000000PNG  IHDR5"> pHYs.#.#x?vtIME N@IDATx˒,ɑ%v{Df[j`Ơ1ӂp( e?ܒO?2 "40ho"Ty -\qHɌsjPgPm[W궟`]YN %燗rٿ/_U?opoÇ3/&;r+.pXRi*:,a \wT =| == > !Xncg?c3O~FYCr?)wL:HHp54 3xfwTo3`#CBh tڑ~{\݌@Dsy\HɄcd@E! NL0Eu $)JIdH2A 0D$Q; 2T̀Q9ش& D Ikꬋ}P+$ɲ&,#ꂒ:P+sdlA 4)C~xA 戶]_3wz3&H݊ FV1-D{^~1Uom=E0l؂2<ഃ//P.7>1~7~ރ8/oŮVIAW.X @4XWX"Puْ fQdX9O~P0LVXv{ $DG,yF&+R(L |n`@`+4v ^Ͷl&L=zAЀ -e)D pC:z'o#Rd&ǏKliXZJ}3H#Nم(PDt2N3Ba!,Ӯ@}KBm+ng@u~^z,Dv$( vHΝ:X,eN_H9NGB y&&-\v}e:iyZL}ك+b`*;tpVȂy/s\ ~P/M\0<G`&5iG@e afD7?F?jVH ip 3VhntCLȲ%8 Hh@33f9g"HYR /BR XӫvmtE#t @,8P %HCIk%xCr; Ҁ0(@MxڂpIDJdC!Ʋq<23$a !JccGq$Ɣt)BUj$ Q 0}4I2h\ p@EN$O5$}$I q 4U#CaA&dT)D''(V70;)P'A vXAn<~/hl\ @3@~UfS nkڃGo^cG֤ H|f4LDᆺO YY&ՙ.鏑+`PzζrةaTJR[Ŧ@ 0vpN8`Xf0Xs-v %)GA%)7E΅à" fYv{u8` i@cfh>@3`#CT * > o0G&@W4u~80_f$3f(̱T3xUҵ$p-/ \I`p sd n!*Ӗt'?F?# %3]ݬG#HR(h :SQܲ0#W$|*"kܳ:aZ$b)D:b%KX&CC8<j{Suo$V:C` Sjwbf@@& H!e8 `IkV " Hw5efd"vILaI/0.qH DnВ&J F0Q&y[tGh8TdIDD[1H'X=YyH@)a'y*Zg-&)[=!,a O9@CŖ5G\P }&؊ `϶Bђ8`:ؑ?w`qY&ai90YZΰ/7 '=AY 7H5 cPz=|&S ҡ(ѲuM8,Q}рLfڨB'/ʤe@ ۾CgQXPZeFNhhP3V +h % мP*Mh@̎ }E? X\b0kP`yO)fBoK F*OhvM#m+<@_&cإv2-#fgP3IYeF*dt$IhJᄏ-5IA'\ 7 4e 8? fFgH1%"OpXSͱ+$8CY$I i-FX,X:000|pt;ޭtL h d@&>БTxa K\gIJ+y\ԾA"x!z29 eUtŠ#AۙeZL~<ݶpb!%!h1`=m8FDBK9i D ,ЮQ߂ert V`6JQQ&M&I tD\R3*3iI0 8S4x&IHh 8UEZP lI2 IfSWIdZs@O``S`G!o=A(wo+4ʕLMZ'N` Durޡa]6F$Hp@b%=kUfnQg˫LNRJ9 ,BAUUΆUa <Cۣ/ O\D $ɴMPGQ6mcZi[1jmL5=3,_w%n9ʹjAlb_A;_i 6I$]ldM,@+*r3y ($X_эQ$YRR̝=eI a xC2 j@@KF@.9 <(4_gРD[@ ' a=3+Αݽ@AoJ` K pC.+ Xi5ݟF!:TlOԄR}aMd"u~9Bd-tWMzy8̃fLLfd1罍 ""Ԯo6-eH@\ TDZ+YD_1~iR>GoAWT{ŷ 3o~7w>4ޚ'NQ0ri%kfN2="2)&c)r*e<@QXې0pʕp.3hHp pUtnL@ZukB*[OC鈂Luw&0qAZ\gi}ƪ=,g}j=RJ=2uRzS8-mt7DhX4K8 ȄB7LfӅ_fu4@y]t6~[AA $Zeia`HL{s+J  )+gL\B Va PC$qF2ь{d] +<s`L (r#hA 4ZI0kt "CVT0RwoY|?Ы@ThS]RoӌBG3z$DK謥F2b$D3N'2X3eF.-^gNLEvVM$iLa;rt",*Vv.\X`Ɵ~?<9+ 8u\2/T7 ZyCJN3|rʊQxSW`Zhe~~{5?;Ow7ޜ HIFrYݴ.Oi4VxD^>RMXoo//|}ׯ^]>z?z$.u9Tih}W{$5UJ&ASzqGThwqK mdPzB67ҁ6#z&Kd){*j: : ^vE"8r,30[@2+VωshwDcG 9pfĄHaء0oOCSIJA2*Q5"i!PƒF0+IO*bp&Y)c LƉ*FeQ-)%e%$McU#-L)0fYEcta"1):nI\j |a6<0h-(cZ-F9^l]B1.ɜC/ `DLJVDmY8F'sn)")#Q7@"2%30D'fE'Zjd〣'%X}p T@#Ƴ^uWnlj~=J=O^$񗟉6W;;{W/z8dxⅲR"b9~/~\_ߜ_~󝷞>ŋ^Z?j˗˲ݿ)z8͍OI:ygo_~Ͼq~{by}x~vv>ݢ Hn#@6H)^ĝIri+Og5J MyI&sF=Mp `c hxaβ2A'pBSG5( c9HDހdIUX~r;X58AmFA!i!Hns`PnocWS۩Gh{C"-ӾNnVAiSwK{<qڮFwԿ] REB[cJqȺXD飲hRm0$?O:iHf].6#Uyޟ^v< #~"OЉ:1U^̿GsEfG̞z_~`&,GDbWW׵N{IWNy IS'~kmWW/_}O7x/=㧿ͯ^|o{___~G??|7חWny..oow;-J}7D7 p*IFo0qʔvGjM7`&-ۜD!IRe6Ʃ嶓,>X/?8-n͂Sxs LlYHJeO7h:b3eV|rNC=m2րrj&"6'HffvImCC{&PG MbffY%Lv{R"SsJȻya;%4IfsC kpIbwϐDB* SD"()5c#G+pY4#Ly@f(yuQDkH1@&Q6ZBBQ\_ 7kpd((e{@95}Mqױu:gck,vup{;2M;&uq:.˲,f>/.d_G|j}ŗ_|_}ǿmf_4MW/_?7;w+'[m+I!2LVN]HЇ&!2}iFm{Ddr|5dͧV[Ρ ѡx2l#l3ۆ>B+9 b9cP^3ژDu ϶ͫoa"B[)m`)t:Me]WqaewD@MM`ΉcÍ@/H&\nT2?mE3aM1Pyԓ I"Ppd$YYd:L$#Qx{$b P'l" ɼOnCNLAcnȰ>yv4@`xnSm7`*0ۜwT0, ]/ia )䝡gqV2׿ַ?xx˷yx뫫RZk벼|*{dtIɧ??}/?.no_y/Oӏ~??8?xG|_?y-/|Ǐ_^^~Y2s]ngf~Lg5i$M-AHZ1HT9& SI )3VOI|:Lr_VxS(DN}*D>ČȲ T]o7:G7džK[NF6Q"a7 ~ H!fYԌtWDwHRwg &Ylc?*4am IcF*s{[ߜ.qmmKsu}Fywrًͻnwyyy曉~uy8sv<^__}?p}^_??/^^:|__>G|?hV*׷_]>85g?)_Ń/}ɧ7{w=_[Xu&⭈$rgIktIjB&RDx|((He2YV%6~ PNoHfDK(M`щmHmz$fdlmv@"`/9 L`dǗG|t"l/Me2h6܀)+ B^a`5 d+)hwxSHqSK8Wީ.&9@iv@ ѵ)-8 r@gd);'!DkmȵؠԒt7TRhkwiI=Z2N*Ͱ&odxȚQsrmՆL#3q AMĠA+N9iPTwŨaTӊx}~먼h_ =%-=9 1(dLfX qm'^ dWy[Ɵ|70_zՋǟ٧|BѥMjWG8ϗimrmJ)o<{/}"/;eYv])U@4X9RRע",ߟI nRnk},CGw3+eL"2H֩/v(Ï=eڠ@=[TkUc>&aheK n͠jr[y5vv E={«MvQ.LluNm)-Naq ]Dh2B~FR4x:P#aF$6!:=L:2œǵԡ4/..$֯]FDj_!ts\/%6ĺ *V~՗ys^k&4RdD96`}u"~1:ؖ238Rd)aE;oxa~n6IH܉J]Z}i~ibbr~qiŵzt:l-i On:qjfh0b;5QtueV,Dr\=;,^iknf HD+i﹌z3l"A+Do5(FF$q @P̍TݴV3Ϡ7#hg}@ 0JzF~ C=%,(7gom"@srRo6$X}=P,:.O'nڲoY#T8Ͷy rvrʚ& M@D%Db/X7ԁ8Tqnl-P hԁ'"Rx7񆛮l|2lI)k+3?>90 % ``&dAip G^B> @jwCȂKp}=\K60j >i`5w@7!u)'!ͣl-gq Г9^5g)e_뼱WPX^^ j ?eV#E'>^(N+ cǎ=މV#aEaܕ%&]EXk ":cfjHu619yYT\x[cjnq:VVVRrY B.7d>y*gYEbdPH*A!6BD$=w 5PEPL"bP6р9@I/o&sdAy>Py71hp. ߆ ܤA/{vX #:wߓ0CT=M1 rHzC,IXНDA'_ Ban]*6sMvK~ O.䈅0+~W~20p8D_H0-7۝dá>)s/ {Ǔ~sRʿҳ  H#thS@۵3Io!!FDdgS?x{u?E;pws!pSB'āhhC[Pl{͎8DA4yOrqㆈ8q II2\扳gOj(gntgfg/_^ZZ^^[;q+I'i/n奕V-J)D*qb.fc-h$cm#BzL}w-K 0p "}vnӄ~:*F###zT,.*?|7N;ϿaB{ [)e8=(8c;ZMA̺UiAy.(`Aa^"#Dd=%j֬J?&"gie(8eYP|AwJ@B 42;nݜdfWD 8׮#T$"Rӗ6OM-<."}4 <3X%k8!ΎLQgoN{X0`oSi؏B}P\ݎT*6l?#l5:W.'' ZugNӤngΟo51+c#WMDUR&q$ũILZ `YjԢ9Nc Hb085^xm۶ojR{}m|lOm6tsNkoҙ" Ko'P8/"?u^*gzgu\8D)vüP/1FݻFڒ oAKWLfPex*$Vmq$: 'raם{ߏ7~!{>[0cYiցcE@ Ku= 倲΅U l3e!@3p_~[& #0ZkbiGs>S(5 4_eDp.i"'ĀDD@X#9@hH)q6.}#C;^2`%BH@(@"@ BBOaƇC-DH1}~RgA@ }%<*T7"bbn[k=ݷl$y_RMlݼibFk# z9ulՉ7O93Jrݨ7ם6MmbӨq^ٱ&Jmtqg!XjX;߮X<1ר+V>0iF4kví]IJ0vamjLrqbvU+=z!CR`iySN[iQztɳkcRA;t:TOot ]aZc6mtK3]'6OMMivgg4T$;D^Q[6vYY3 wQe[.=Rm6P#@Jtg *@ySmruW8(č0 bج֡]Z}w(?|ٹi=u>ZW@f:[uw_>;<4z7/fٷK.TIh|+[qnЈVN_?1e-_:=}tq~eߺQ:y+GFZ|ΤlMmY\oϻ_<:?o/K{fۿÅ=ނ ʅ0D͕'ܹu^:bOϝ/ڛNgʅV+?O|ѳo=tTzjo{Sj'isj[>zg~u#O=nkr9 >޶Zs>q?k'j.^pQ:ы~R'v8I7y=//͓>v-[Fۍ7wl6<zHG/s}?}׮oT+ڦw̓Oax{~k}=2.+(̲}{Cjj_ "^mRkۦ/>~h22:ty=tr7qQэ&>s{fPiyAof/ DEjyx\^DVʵjW>x੡Zǿo/RAo.|uߙ_+!2A{_+wZuh|t Cٰq Ήu=r"~hMG!AXu}O~_x9m:u…'O9{jt ۷m7KKK~/h48O$ꩯl#sh3a3|q0Џ9CED!t 9 DECa䣆EHBR 1t3l߽!bR(:@h3QœLD؊KAVp*;->/mо@i~4nnxۦJl#ŷ9}rqX9qq }ʭϛں{ s *-^w_zX{7;q[ ?xo0ƾ7~?zpaه_{C'/-$ sjA'q (?׮;L>>[cr~W_ pw*#N?pz#g?oxr`~WlN~f:ԅkK3DgaWT8Ĉebxy{̕;ʤ>ԅ{^2/?Aܰ򎟳Igǖ3f-Pmb};ވ[7:} 3o0 ί=u..f*'/*Um~M?i4BR UliOS`Hb-M{q2@`<`cd-RB@Ƣ>G Erh4֪GYl$k+LmkknjԬRAP.vXvǧAej}ʥlj׍Q(씎0V;.L $,}02G"@Wx>JF !$UrS'Q|L2iXȒ<LIdLup }(;ĭnl;kwrѓq[BLLfoQs  Rpn{jauϞyLֆ +kL}likxJOIRXi#Gxu]HGurXTn $*97Z_3^Ym|3}4I_R DoFM@\]wnvBٵÏ 6̢5~/ZR_dsskmܺi̮mc3˫V=[v5ږё(9P4RVQ7RYc #W7$"Rxy&[R.0{AV@cXӛ-fL)j$;)'@K</#57U@=|y*=f!VB@Dq@UkSvFu/|qfc,8 Jzn5ȈQN>]ιBm 鶄AVib8NvK0D"ĩI'KGGKQZsĉ l|ؑ7eϵ{r9hAFW@e&Vg ,EH(?4 F$C3! H|deq yahOkhs<<(sWdP I2b]u}26c:K1õ۷.`v꙳oֹS/v9#Ғ[72/_jCM7&aqvjjXR\i^VvZZXj-ҷI9p"P.+ΦZ7gKdWL*j>Fto+zdrH ccf.m\Ըq۵V]M@xjlsP;Njb4x4FY$Sg͞4%xYFaPZgՋo$XoCJK2'}E{S6i`eUL1Ԃڠ2*(.>'(I PP# 6mv\I3N=|xyPO<ÄBcm(k4S1=(fPʨz33+km1h["  Kj+04r4<\ttԙcG)Kʎ]*Rhp6M$0**1gu]]x^ᑾ 8sO4BA(`ND|$ы= ;*l-9A*)k|0s8 = FPW{tX7S`rj䬓}..Gn^y+qlKu|1;uyW'[Wn͓Wٲu|qq&M+M!@l܀/)@BXc  سDDlӷ~74zc(RVk2 +}U7DzkJ UP*+E}'onD:;c{:!t0ke!j@S 5^N\ R?W)Wl~C) 9Q#B#.ߕqAHQk%@v@4|r  .a$@D5T# 1!zC'"qqn델|G.]B&># Il4N P(xwz_7{oK :Ӝm);Mb̐ 䞑9uLt$v WW j{2y֭[닋6I¨44>ZT(C˥guekS("!do],W@ҀOea A*{U$l6@r|@0;cN7$q7I;8Im7W6@>޷o߅ f֗W/;inl & c+ +?!*oI@ E+ҁҊd$@fb:-b ι"@,y/ b䑸 bTAYTJ )!:UUn輀8 r .gA P8U-^NK;_J^[Kzw"Vj [TZ5PSA9%􁷽zԲo}/{ ?H/C'>7>'}'xk_}]=v;u۵wѕ7}>8GW(\w G݋n?#Lֺw᥉fs_~X8A6YS•b%h,]o~R,w#ֱ:xFD+=[bO-WAP(>k6O<lU:׭ϵb;/ZMDFŊhbFhX詣]S}bd9A:[o'}9"!Gr+@dR [&2(@TH(Hs {C")A'Pl ώBR uZvqh4Ln{hlD\17Zm! +v(Mi?&OƘ<멏Tx>A`0+P HXfApP*!5[NRQ\޶cob<22\B! à4p~W:' !ItVDaM(!*&sB̊i`ff9 s" Ք,*P |1eKCUa {5\}nlo7>QvnzyJUORkO>{jC4k(C?H_3G.ͷz?ķ.DZ|k^xԥ-7o~~Cˋ띕zX]czit0Ts [H7{lzÇ?-jAQmU靿{^s}@(p.csˀGIvBBdC8y++`ct߈@f`oMzҖAEd-B:@Q>V$N3B$"NqSJ;t1[UB:ɼ)FԨC@ۅy i~E>ځE2ߐ%,DwU[Jޏ=n5o=qZR.ʥ 6;v3sX:QT`B vm%M-3Akhԣ4}ūW4}st@@bpF ./t!D4%bTKu*V4 JnVKI/]FXvU*}7C=e–Q* [f&ؙ(TWOVP '5 [3@q }QtU&Gq`.>!2"2Xd1A 3Դ_8`1*͘/1*c&=#_˫A='}7ERGBP* 8Gp̠ʙ(`)OB_+U6adOBYS)QVkyPi^T?4ipu22(@t@#LYuȖ=<+kfQep8&[F$OfȢ_9(s]a_I;sm3p fy>jDD0 J5e?NnAu쳛Av/+fo >ID0t @Y&b$>!@rB7DP2ZA`e뫄g(̂xna$i ^䐧%1#A@"E( @!q8b?>< D1w2޶bv1z%2 8E7d!`;ܛC܉{\E.˨sO!|̌i4E$+;G;&I&lZ81VIPZ牢ٗHwJd 4OZkMABdž!ȖYnniB;vKf7I(P Yp(-}Hl5*Qr05߽\*D^\\424T bP,DaDJgZ@eX iR hx`*HDnFq?=F7'<h As+l5dA S6Bjd;{1d y(EM 54s9 uvszZ73O4y҃"z!cp`R(@+MH-d3M Sn 3kxfv̎%>'q"@~l%Qh &w-EPDX|)1}2e@|b> "z*GNu=o| |,D ;dkP@p{n}>Z,krɰ",iHSlbkB؍cA&"8fN.@Qd!VLU۶[KǪc2ZzR TZ`"p:*ժ%LܝRֶn2<\TGFBMNS48"@BVIpږ,w:̓\)cf}@]5mj1)i2v $1첏UABm5frN P['Η4'y?M*gU{OhzN =|V(wkYmw<7x[^*y7 "Ge]2n~ '6  12\Az0eEYU*DI|9yhPSҝ}L4͹+QᡡR\a񶳈`ǙnX(BBAR_,#c#%Af#@2q #9Qa+^ٺnW"pPtYvxS@\*Y"gӍ:qcu%t&7RDC#{{MK8Mb vGAR.q7IF%1kwUMh DAb.K`vigcR}n9Hm$3izauS5$GδSܒ uZffB`*i$."U0<{ev+`|||jSScZREbgX7㠲_z!;AOlG$I0B =YVL2PЁս=Hc\ k87^בM }r> SŦ",UK\{9? Rq R}(:ld*P@ <˕]Ag)BQkoD+gy׌k۴r'b|QhS`ʀ&sx_]{+V!p'˥}nQZʼJl߰wEj3^U85|d[jVY٘#>7T(:5+Fgs(:n+ ?K!yae] a|(* 8f _Ͱp YȳmZvj㏞.CCChei9IZ}eeVQ:4[Dh6\[qNJ88H!"$gl?+Ab(TjX*E$a5֣RixdƝZI:!H\jw:Ifaxex2^vZ\m7˕pm9@)uhC"܎cdnۓcc/Il6jkC#ָ$mZb%/m2X 5zuxXʤAX!0h&ʬ0"f|侌T=j?#dBkP_omN m4 7d 'D}h"nò F~A!d~˙!fkd-E `DV*$f֗Yg+g#iꊺZSzK{ !B^EAғAR>xҧ8Fgw>y@5˘,! CvJrP|xmRo3fl̽h5DPwQ4$O͂qJSY$"JY0w]A*q>`"btXPzPvzAjMT(kijp'saA@Dz_L3O8ۉƦ@itՙٙ(T6o4T*R+͵=ƦqJj#J.϶s1q D!ZaY7jՊDih6Tu K|sT,[f.uYoG9i_yk5;"*`Ayq3T67rz1YRR3|upӈ@BD"&=qWQ @=ǜ  )yeu޷Lwo~=h4 "%*b\TiL$,)LE`(+ǕTr)IȎ"Q$RM 4 _;{{;nz}sY{}89,.pQ4m?O0,Oϗ3." 8iiK=?nL@b1~&ĝ-Xg c^CAh%vv8ײplB!  oFQWʿя窣yaS !R[PM6 @81]O~&a`8 WPLI4<莟y£Ls!Aa|R,3X;= HCWx7\(ҥRlˠ,Z "@4")[@9JpzF7#XM(bp h6jϝP }MT8J2 YɊ,)\-Qw<;V{cZ7.mheʋ/^C" UshQh2l69X]"㚪ۭ͵H;1Q%rq1{ܱ̤VS8!d= fUrDܳ+tzF#%2ЖDO?2+Qf9'\F{?Gy NMOUG:/J54\ "NNeYtn:9'6i^wTw_T_(q}pjj!0'kOLaj""FfE "Vv(ZF`dtCF$PA f3_srR7T4Dwos0~K+Ҋ,+D"E0n .W3[cP,Y|}d Y\hYn49E:a-`P;K"#&X|+euf?|6766Vã/}k[nGa$LNgZcR4!`.RDQ> 4M(EjHW"AJ286֚xENb.%yƭf"A -n޹9 (n^# Ψ-" Ll i`""ɊU 14;R[(|pxqcWW$ͪ(q}6 ^`wSIԨНIݽ(^=jdQcw$+j,9ݬJUh.G$tj+kfSp8~6"nmRԫ5|{V%roN%^[YvXаu т`_t+.I. o^菆a&JR&q,,9i#Mya,MazRn~$RjZIC1M#*L!ZIZk($B8LFYaT0UfL0,`xf<{ HD #ZU82ìQRM <%TQ%%ٳWVVWVVۭVkur7bB ҢOJ \Ύ'yR4βDc3̿ݪza݈>ܥ/\ݣgàkj2 "V<}©kHZ-%Ηxm C 0F-̠? hr|`>^^j7jm*c| ) !iw0 =P>{\}Ν.  `t_! x(JuUNY$8.~*8lgfMDmPQx qsCr>Rdn˯@LTDѹ9\&М ]usPT,v^X$G}غ#O oia$R&bIkEP_Zұ]?+6ݭї_i}j_uǿ-Bd6Z0fpk>9wIY w^:|߇޾TQwlF|๟Wg7w:7~9Q}py5>og~0nmz+ls`qor"5oE֒2ίu0^N 1 @)2Ŋ_QH+0yk72HݿwV4l0v{CPZ, B5y`"pbp8x¢qn\0FQ'~jji6#a+KKtp70 LhSkO]8]Ὀq{Ƶy:hY5덏}_>IbAӪT &K6~ǿ_}WnJ%q^YV+nծNjU'E@Dk'ķt1+@cӦF+'pcS APd V+KZ((P +!wTDnXB~.fGr#L_*թ<ڢ$3$LaO~6%OMy~HVיe^URmy}lqY|WgN3W]+%V|r| KNF tzz52Ɯ^/߆_|{tT p3gjnk~?]DF?R/ ʝx8t`% !F:I9EI5yדlш˵7<jd̝ѹD2WN\B\LDf V?{{ X@YN;Zklw{߿޽-cp<Q&FD0V*y.ƊPJ$ػdx9 J=((4 LqRFݟdPAl6/9jo=]?+/WjZqxTX*/7{;˭0*9`FqOaQs䃺AYir4/[5(Ie2UL;;c>wvsua%9wt>QO^< 7Wւ XZmj5n4֖WZ+F- hK\2"!8y28~+PR!J9t2ER™l4ӫϒ2Xx?$ q1"y[OYKU~`gv)KՉB79# 8x߂/"Pd m_@,%P0%'~r2 A+`pY^U<\RDž i@47n4]0;Årc0 V E^w'͜! ̔sH#c`eVQ2 # )Y+zr)e9|% 1 X2D^ U F[~(6fH4ϻp4J$dHȭZj-qap-44,4Uq""lT#Zk6XB >v1+rca?-7z-( BL*"N1ZR1c3eRTWVPmSɌ[]DX,9Dj-XӤե{}zm#?c& ڲnJ ^'k_~m6[:Ҝ])\ |zLUJqduev c峓ޝbq|~Hp1sڂ?';CՌM",#!Dp$4u2/aD<*t> r ʠno7j`k5Ԓ(})PbGpw>H$yW^yāݭ`-,ED Ͳ4˨l(ѽ8S&8y?OlY JF[At2$Ssk_y}֏.g9z5 4g[ik.mO~e]vJUzXo_If~|~ΝOԿJf~{( ^/ݘǙԩh7jyc{i6C呅k%\ L@dP![iebW`-*;3~&a09_TF?|h?w:~`;Nla,ia5JH'AH x2\<?gGG6*2.ɖjIѸ}"c" jj3("ZyO󉻴VWv $IڭF4oKgμɫɨ_[]xۮV̈֎/!JR)ѡ;GG\ԡr,٢. "1 &RM~ kڪ,JHCxv@ȻYiPoG^{{;4$K'E*2 Ihs^i|'~j .2eDdcMFkՕpn՚K49ZW`,QƝÐC>ܩխݝɤ QYT01$\[}#J/`uv5Hupu΋w|Ԯeiڬ0:88Zj6TU_ڵq7Ο9}s!Dz2Z7bFr?f&0GEE@I\͌I#(,9 J6 q}*WgnEHP/0\b>SVs߻c3x8GnN[/<˂f  #;)`=X$V xੵ:CJcB&7czK/mIl P dmڨ|;d')hʂh=rn}fE;+e<V0T}92I(dF&^jȞ0Bi~pe22*"K+K7xc{gGD0*5l+q\kMG*B^mk_sf4Z/@FlVDvsڵkEAksYj5lghHQVq[m4I&XYnlݿ{w}s \ENW%[ _Zي+`l./P(@Zd5k!NTqv4֕+O?3KZR)1DfPPVbo{:k"C"PeQRtdACN~ wJ[j.̑UGGTT|9)kDOqeE#bPIQhO 5D"섌"`p#ѻ,O|}N`sC\ZH-FY7rG̲AǂA(JL} jRk~gk, X(hĹG+!0B6}sgNKEoEjEɲvʂAPgv8^>=떳%KAHi?@SO <~R w^dv8 xo:]j~ǟ_ܾ+jT e<{yQeuhV{T*M!ZYJIRIαe.E1%q5@jqa}]>l>ZH:1m߿d;H^nǓ( jy:Kig@E^85lm]=a7h믴O]}w;RQaA4V"_Eg-pX$a"l9Mtb>n~H`NA 8\p3ID#^{0T:F(tZQn5wj}ׇst[#`ZSkĆ~KǏj鴳{Sg>w~q_[nA~p<<4/5 %r]idYnWY&IQ9% fFKڳO]jԒho{+& ?T8^լVB\nL'!K͆pL@ZSKPePh=<:ãhwSSO]z58ߜiv%E#(bN@rFϚW5;C#]\d·XХ(9wWpT n"E*/f .wE{>1?gkW?>ew5[k)tTIq&RFIH19L d N?ep$  0kHģA4n< ̖fY (*bXH!0i_;x&!ˬ\$3 tP'ͣx(ϲ+%sRb, ^xfV*JQZ `ٺOoW@9XA%os^ JMLk)ϑ Е:`-/%g\F ~qX:ߴ tww믯,9sf4 W^yo$u)Zj.6ZYojڴhc޸ql% nMǃww!nEx#᤽~ҥdf[4G3zwEdy- 8"e.9e3=)X/g=X+Bd=vasjKeQ2aKb3Z  8]YeoK `7OJb",+A|j$dqrH]\;>6I60_XDTJ))OK-"My G,*1@ fCp^pȜ kȥ6x>1%ApYcXm>C>tZر BXFZ,R(Ӓ4-%Q:wX2=)v:H $.{ۛ4P# J!qǹdA-2BrىL,,fA`.fC$$fpο2e2{TMAUe'-P#NuV,JI,'',paَ8?0( ]=6 T{Ѡۏ8i\Ub{sxx8\]]kĪ[{vDK>i^e*I- ǩhJtrju HZ_o՚+瞼O}F43_y׊j B·QaҨUvku^6I!FjUEQl-{j%uU1{:UkM]]ڃ&[`ǵ(ܨj2*l?;y&8wNPUV0pt)->el~ak- sL< ѢJ0@ l9FA%|K7g%7 Y@eVUeq|=LftdکѼ,TB$GJLXo2zNjM9RL .0\fqr8-Sj IwUrLqhLI#4@!^D'G+B!rHQ~ g5nƊƅz䳃˦LP;1O',b@"Ul"ZLւe`1,LˮOM'F.;:k!VQ H>Z #?H"`>M/EZyQQ^{wo[c.xyP~jcjk7\[_9_O*ig?=aR4ϝ #,7v>4 M8p+,7g8\`<)0f3fb"vc2lomݝ|šP:ɓ:YEQahcI14v.ǟgdsk;w߽{}rgk^}ǏiUcJj8nYuĥ nlӢ1.Wr]ڽ}ϗo~_qxt=j.pxrv;ۛIᶳ#@4|;?r80"X9zU9,BURKtE`j,挦ħƌP-[,)L^C8|Fi %bbIfZRQ@ N A| ;K96@5 qb) p$:"} ˭>2OM52"DMG9"!z"b5@Zʠ=`C8={[6-M"%t V8qBKڪo~ C|zsX'B,q]WȠ2zfL'Ɣ*DUcIj_w,Qj1P>(JW2:/ F`88TcGqā 6UU/sDeQ91D D* 5RO \ ])me!I|EbSjJ*l=jzɈ+0#+B =Ohi0T*:gdgy_w]|I0N_yj0h͛"n߾jժ(\5e3L|Z,ώ޸ssyM,A1tog\rvyI7FÃ݋trmkokqOgty~6ou0H+[ɝW:('Oxٲ><:i(ʶmV)ճJYi[PnM9ޘ쎪֭VyVOO߸;ܮu-O92xC`r>;hV=XbJڤ&1dYw`F G$rS֨bPxs $  !N"3!)4z3PP6ІT"K9 ίq1t| r90 erܳE6Dbu6 8Gf%M){L%FZ@Dus\(j2/! ARiMs^պbe*G{ZwaP}ք9,P*K8T}ZE 5-#TLE- [e@̆g,bv][LU5qm|#3CǩcJe̸mEu+uJA&i.98W.ʋ¯l-!`YfP%3YKc0?xuS" JWJ&b\=[f?׊v޻ÇO~=?*i4mmm~ Ii_U8ߵ_}{¡& q7_dON0|uؽ:h4Xgڭ$JgOQ݉HƍSdjI;*DI`Dn- v^q[k<؃qNG.98r M?9O>N:@'@ (p8H ;h Kp嚄^S\Nn>B`+l֒rؽZHIZk)A͙+dҙ1'32j(]ɐŲ$UX+….H XMoܔ G`rtu|B+MD`l&"9V<H@,C/sFI:Gfv!VzZ$kJعP:rw5sQgv(b0ҳ'ػbB=/rUUբ]]?}铧۷痗LJE(F7zi]],@]v͠,)vnmk{c_|zvr$Q5岨aX o߼6G?dզӋy'rpm;wn,}z||O?ۼ7o޾}[;{o=z0vTUId-K7;v6.U5ŵt8/_˧G)ۏ>ퟞ_t`8>~|h@8?J$*> Vk: s,Ep`  3E"OlZT$@@Q/ N<]\1wAɑJw0a*؀\ sA%E$28v(pIΆμjfJ 9cG>^{<n0e쮎kLsQ#\4@9#$_ALDXM`JX`mGV H: `@Y3cU*86ZS+-GԌ3zF`Q] v9SgMimY+<%2\/*cbyD$sۨfRH1O)`=Vlq2򀣢Glu5њVѦODM~''{ۻ( w?Ǐv{?񣽽~ :=?xt}TMfw I9Ĝ"$IfPa-X!r= .uF;c&WRqĎٹRUTUgD(p80URFd80zpk/*e+L \ j5"$:;Ɓr"i%H RdV[jXa0֔DFdT, BV@u7!vgldQD^e)/sP1i$zLWEJROwYpj"N=\ә(Ƙ8p]T>+#ڤJI!b"`G bgJsgDb22$BDߊf ,-+Jc4XjFU}Z?Q//lV~{oN67~rIwɓGd4m-g\;ӭ;oVpi-Li1x0۰HUpl\OONޞ@wNwk_d:ed˚b0r @)1exYEA2Hq?gFi26Jd,f`Dž3r0&. "NjIl؈=o2r&Picmɇ">`rD3cbe4TzSfv ELbr&F # %vڤ#fm_H)a1H~yH.SR2s3"DRUx"],w­)*Uᢒ%bMb*J#PӜ$J]+SBJ1^ ^(QR2,X@$k,&#"We.PĤJ7GÇO?t,~~\ܼq}k:o-}~o?y|6BR 7'v77S~9Q^,'Wd\.T`wiMKh1=>gMqTqHU{$h (W9"vԳ멗t4 Qr"<{(kjyu58+)8;<(1yM"űvyUS־rl 먴($0% )qCH|'j]G*t, 0YԊ1L,v) ǔ,3C$0G^m$ă"$Q2R#d75ZTR+ĎD ȇUY`.╬)9c 6$v/3DtEYH<fW ?ە6olK=lLc]5D uYAĴ],NKՎ x KWCمA5xW777FIݵO>z:1jUˋ_[/t. >ℙ&]9Om6;9jau|~rj#ιMUNj''g*?r|cϋx5;9:,Ug<:_,b9k;^z嚲_4pgl18|Rwn{k5,g30wxP K\?z?F9D fcvh6#QjcbrBL&]"]X24)ŁSF{33'h$μ{AUA "풶bUf{5Ozމ]~9a̬B)])Qg81#[Q@MzW*|UJ}%йjGYeiF$c4F/+f 0P@`#`:v8"Da& 3KIS@#]#(#Cy眕e`& X`LmdXɀQi$%M&|/c Q@(uaL=&ɀ3I`g ڕ]ID%DPPΌiV^-W=b~seeYl= 7;9@$z #$WMlZwˏKi%\{nI*d0r`mA)pWr'@`lcc*]ι4=}ɣã>o?tӇlFt=yʢMakPvCZb-'jPtIEݍzc\]۹bJO_xzuj<|?b$2%SQߒ5lݕFuτHJ;Ѽ7ZG$f23J ޙc(,FqEUrNep2y=z3CH|"Dž&yXP͘Dе*R.@!p~wp&-2:$&Sx`Ȑ*3321@2VKFcα0dfBIDc/c-28 DcHELR"bbrl8 b:.IV'34AM9dDQL CJW0%S5!s T6BƯ'1t013>6ԁ#`dg@[~9"u`647 k7 qkQE}Co(0XE3 "g֑ng|shBI$CuńCQ[o;@;檪8D۷o?=>:N{zJڨeYj my2S-agsZ-]xRiۤռu2'GFQTubxxuW_~w?e0(~{&2A޹n_߿GVڵ[o^{6Z\\v惣'jkvyr"u+ U孠=23G`Dԡ@mK 爈\ȟŎ$A5ĐtתwPIHT2ȘLD$X35#s=+x,T2?ecҧ fNR2eqOӾ B֜oC3R Ϗ<1 F )Yj($"”!#D$J[[rL>v}Ks{f;7w'_`­[7>_W 2~{ɬY v]QYbks;$f{:9"'2:Bu/i\횦ݜ q1 Ux|SrGܵPwGO~W_b$7M>|?xïN "*GicGӤOmcYa5U]8;>>=y#76֣ǧlk,9AO'W {ۛeL{lPQ1OϏW˃,jTU,x_{k2mm=+Y`MGoz+ne45$k$L{nN9HTk v Qr9T1(@Iz}ؑ%lqBΐ- @l$ OE͔D FD4" ݥYČXՙ3t\ <,XSRF@qPtyW/]WߑU٪/7WOU5(4b_~d4\$}w s*{&O ^.V:R/VO.O0Vu-evsm_?3;vvof|u'2vePήݾGQ|5d%mb{r0ݨ.w_Yɉ:# ޿q>1jZe)v]7F4 ĵZ#h}|ɰ,iʠWԿs1Hų9CH)}<6{N6c}iGPsDL~ dC:2[J3%L<}' `\C*hЎb(``OMZ'A!+Q{I)'7 qʸ|(!WcKf.9M24vfcbS%&P縫jB-)Z\'G 2ώ1 9Ju3UT)D,=o?d[w=~:j(AM{alp`aܱy7|v"xC8.- v&Vqy9Obqqz;PlmU:՛|p4.;T $bx'gwoߘb~a[728:= /ϛʱzm~?84;c#Y7lv-䥷_366:=~||pj/OO-\߳Ԟ]ѭk?t-͋Z"Dj*0釔g4D8OxdLbFIl LDE5)ΫAFlp?h mS&Z!`bz,Q>yXԬ&x%f`aRkYdF1.8KV%@" Zp.aZXiCU.$Uc%?HLgz2y2S&2q|YV]id3Uf]2"$LYԤI/ JۨTʼnI^є9)K&J,A"YGn5 k&%S#D,\G4{T_@B}?ˀ3xB Yf()u\y^Qb"QTN2&2_B+EFA(1!V-1G|VR6iQKL?~V :)I]p'Oɿ??<>O̱ѽۯܼ8=nۮ,=]3_E//gw!%Q94ʰU(.t9*Xc]ǍpFQ\o?7 zŌժ==>ݙ*/)=?GfZ6qJi4g66&u?:9~{k'j\ð ʏ*(}'=%ruA閫[3ޞ{f6>7%18zGp=K0xOC`mddfUoFaMRܾ A &;SH \SYjq}༪Lfj7 |d5lH5*%%W$P"NAARG+Θ9)<)E[ s9ZEdžBjW1sUnr7*k G I$]^^޻w޽{:<*?>|~8Ϛzv[B|-d懟|\.j *anڭhk; rŃLJ'݃]_zY͡]Y$x1kxc>G;_^C{9V\}AWU#i9$#Aq}'9[S8*8%`B ީi:Dd`8pWcu A{PYPd@>{o2Y&86#Sxp\D(IF4B%Ӽzಁz]3%-3/FQnH}|~D<3N!x6&Kbꐼ3F>,Vr=AiM%çȨ5d` #1E'2$qxõкJ+R>.!?zz0,d[sӉ҄  !C fE)_=R䰾$wVR9J -.:3<˘K^57p6 +Wu6 ])&N1IBJ"I[Ň/?soӠTa`fӴbj2 B>O~7SHUYBGb1[˥whlxcc1鄖uS>x9n]ۗz޶{Ǐrmgk:؜Ti8\O˦ԥ?w?v&/_꭭HOo a|wcYۛ4)*)6&ua֫lgggU/6PD>[_r7 \),:Bybw0(R!E͗~s`)j9uDȺ` E K* Jt BZ[8 'ALI14AȦdVDK@IDƁs72^„'1}~Gy7huS홼*$jװUډ5]b3EI) Qlɼֺ. cӞ>}tr||F\ߝVn^dbN/''e7͖e9&0f7vvq./.n㯾:9t%s0[XI#oϗr~><>xs忴iAU<e"Q^$fiֆs3fyL` ̙ 3aF}M92 gMtsȩ|Eo]*i=&M r^X),!ъT@$ "BaJ$ DTTja _|o7@Kh3WHD1@"CZKj;:FL^3 nD){q>8jp;6f?I mD.k@fN>2jAgj;G) K@Ldh՘5kB{Lj+#|8#>REBA9Ub\Bck(?P}zߪ14` FY#Xb㢋B]rkҼY:騉1!"Z̗7o^~g;{׮lon^nMƫCWEmVMW_}7dIUvMcM|V[2ak{'LJ_>}zB{;|q'Ua୺uMY>IݤᰪƣdplGG[{Ӎݴlmť-xXfg|٘?WmU,M`rr9?Y{^I,M;crsa&EVՍL{@?@-0Cl_Dڈc`0+ A@&89Wg o5%((R2SPLnӬĬ(̑0ԻUO; fbv,eT9:9O/bQl`%2B4RBTE#STWDmK 53Z@D2u!ٽ+B4tS,l×\mM̝>jQoIoQ7)Rkgkt6e~9g]*$V ERUdMC%Ff0F&M(Bn5yu|w۷o_tr=Y,df'g;ޝpqNjBO~@Q ̙1(Wj7rV/e̔nG_ (lzcjZ'[o)".i`z) p*Ԗ9؈caNOɽwޥwuT"}x=w}pv/>䣽o~뽱zIy{7\,::<ߟ,..'0roϒx>9Nˏew{_gZK׹8=}z9W;+R__Glm r.գ=YWG<l+xr2ܺ]51x(̴I0BLW܂ YJ9Ysaf(IQGc.&5J:سx49HTjX8H(A %СUwt TL Ԑhr{" 5Q &I3@ZLl}y&J@b5vs/,hBf.'2tPc_\ ;>s^Wd+߱_qw*JeY~޸׻;F His{q/fNSvvrN놋YwW4 ;5~pN///fO}ݛ_s`0]^^]m KQW+q/.s;23"prѿH&Jíj~ vSM\D!Y#b<̎@inv`&DΠ]yRYǮG  Ԣ(x%>aM%"H8@*<A#T t ,)X.h+{0o&NTY*P2*HpL.cCI,j<%2g[&eS"İ\HOi)TSUA9a@&|B)uaV^{ٙóE]]Cã黓 C\mYw^lT5lzyAYG0QĆU%DXd51}JyO 1G|{U?k#z> ,jļ4߽^lmmm{wg˟7x ?IUsJEjɃ{?oj&ٛo=6zc%tEQW9cks4o~ď?yV7Uhf$$abⒶ;_D-ojRzҗY媭())H3ļjU-9Rn}jB oNE8sӊu*Wd킭-}(sҽH*LIsPD ٿvl s@R@ uD΋@U,rps~:[gŤhA(i LoHZۈ6 Lvq}7B2xb2(H.9 9&_sDU3 !LeFh3f_5pSHu7&omк\PR76~}G~853~:%4 &;@FH,PV5dY?h}'h<[np{O,fAyuz\JêJ|r^վ(h0۫g3ȅ/"d0޵;;;ũ{|ww4r;?dqvGM4]Vneg)=Gֻ[{ao:ln",e-g?M/+ /-5Ve, %5xylh[Uc3smB2 d ,XgA^p 9U{ @@`l,Js@<5Ic[M @,WغZLġfLJP&Q-EhQ\ׂy*!Vhj,.ffZPGI:+MjbaDAؓ!((Lb8YsUdlYusqaZ /d d$b]qyaU߻.L#mUD$4/.O[孓[ģjZAޅT yȹje,i2204RX)dDX $10!J RNXT; J@@UaHPdkl 6\z̔< HL ulS p=`dpj%)Udkw ! U}HQ֌J*cu-YJu%EęgvFIJ]~5-f7ժ/u&SŧO\eLZ` ~/8櫳 ˤU4ǵwg/?x4" y %(PU{3+b+3Do=,(h <#bhO eB?+bB2QK,85Z֖j9sϱ~۱R]Y]pq, ""BMNaj`A7&m̞Dh-q|?u#UuTӶd*&ЄH#9i0(ͅyA|TMш JjDjak `Xt@D]:ϛ7ȡ,\U+)($\af)"-ࠔz)g;SZW̲S$8iڃDFa rبČ|PI0mIfJ2o"7WbrpS]r)֩<(!'Se`b,Tz3 UM%RٚdD5U]-<6Wͫnnvr1GM\N߼X^ Mqqqo4AWSAS8<,^eUK[zh<<;8U۝̫qZ{gӣO>~R] {tw@o`p 2=KsBtKHQmiDɜ [3:|ZL3 fNefVPI"re Sg0S̐ L1n ?nnx3AkvnSG1N?1 lPldk hy&[f hFH7*5!# vluƝlď55z^}^o%o&o>po\LYa"&RaJĢ -(THݼ7b6ƴ:㣓'~Ign٭bLFY|GW[WH}x'b/ʳe?|z/`1EW͗afv7_x;DB/dQl@!)N#mmmM^w~GY?}poիQggk[(ɛȇ?!i( 4t9MG4,o#"x4LZ\{Y6 3"NV#,f0(l?R6S.[z0)G* 9#g`*?=P>wpB$|̠@s fi4Rkh9r)b7{|4qZ*9GA\zkL;&"MouJdػZS)6cdJPSCX4ͲшMٷRAʹkݸ}?_|ۧ?OnL.~9>;8m\]^J(ц꧔g)BG׳ʦiϦw}X/f5_ͻPES>NG[Ѓ+F[=AF'hTRSP<y7"0FW %T0 f"3 jMFf "W v/{4[TbSҘy ( `Adx<|.p(ătJ*dI qAesP8`J;-!, If3fV~kjFTK, i?=0[& <bUlro~jrQC[F1fِ5r{LkFg Q? $[\DUSʛ$֤r"^#r>-:u?MpJ&ToˍN.Aiخ/=D߳:oRm{몸9&Sˎw![ê /-6r7cCOXɲ3X2}%kϑQ75F75^Gr\t*we#^іJu$umY%SfC Q-9QV3kG3~*Os 1/5}yu}om :T]/vؿ>˽n,˳'Ow^dǣ~4nol _|MԽ;>G}X:rr,6Mғ[bׇg ~hԭݍ>>~]WWe::OlQ-b{/ vDž7_/ON?A;C;}{}ʡg.ӣ:jMrceyɠD)MW61Z}>!\1346 mu\`Bx{ݽdb7ꄒw[x0ɴFϞ=R{r8eog{\EO?|xLH8K8mʩ~H%MyA̒NFWJ53)=[( .IO\N"# Op!<.;fCpP`wI9C$ $ f&.BDb)n $&EQ" mqddpILF j$`A`g!چҷCZT9C3mIGT]Df,*ml+R[#Eg0gl"b4X;#S 32ƦjFJKߓ.D6bPfnFXysj^\aCkW ~S`ʚ,Fo_פq{1no<$-.-ΪL%BO~qlY*tv~yyz _ Ͽonm$PtNwJTT~_hȆ\NO?yP:(xǧ'vכ akޢ3dދ_ݽm}TJԬQn_6>?~5Uz:Χ+aWsً+γ_|1zy=x?ww~ gLtz11e:'8;=,n{pp `7⫷([{/̫xv.w61uF l A~fvp[ޗjU=9C [O|K LquzfNPol3"{BsXVP~p;] FL %J(ƈ*x@\,E"6+y8QS]bG>rLj怔Hi$(c@&~@rhNu,F)(sE2I3DsfesZs`7A3d7 HjĭL"rpe 9 }V2 XS}`\GQ$"\dfMlnfiL ׳ڋf}o1 _0$[La2BHNvXS|oPGt,qhg|tr`W*){ڑ-sOI}`ZG\'ד+.߼~'!`1_O2_~>dV%bxwx2c3BT^\ь ۱r1{`>\tw/_̖wzzx^S^\w}orqnU~g2/^g:%y^N.^ߢefwd SVS#4Arl 7:J72slBDJٖ^pAjDМzY03 \W50iLl*""ᘕ`5$XRCE)w 5x%u{`e'P`RIB\ qjJ6NRNzlݺ"V댣CKTkeePYfj1BRgf"i])!|^ 9Puo۴:w A7Y\f3CKo/MYNaSm rnA (f?7_1YK+asA)XSY @Ucvrٺ"5;+)gn-`ڡwF ty ^m?Od1(PI1'<l[r7aDM&x({[ۻwZMO/O~Ig2i 'E- !D.E18??i8ܚ^Mz`SNbQh/G`^Ϯ'v{qFx0wvOT .CS$CiYM;wݿ{=9u{bjG^ntD$mG.}FZ2/ +l"]5ʮЊNZFu56zom LrOqtg3a&n:J"vDBޘu` OjlIZbT*t=HAH}= %\r% ijF&sRE\F.܋ dUIM8G"&0(DJIt4nARͬQ4ݲ+iL&k]x'R#Vkm? $S\5xd9jF 1KD>jĒݢFY##55egs0ћ(֔lc=*ogNfV~- _ۦ:1v[|Fd#Y\!fa󃪑0 rq~Pj󗗧O}PTvO>4w{9tCaF<= вߗU-EIx{|n`/;r1Ieo<.i]7v'gg0_|v0>x8©,%˹q+Utۃ/ߜ92[Mq8ǻ;Dtxpt~=߻3Wǿ͋Wouƃ1S߁f|=9n,Ma2D(f#2". 厎DE_ss=ǚ桲fm3Q![8"a&1 ͑j5f"MS9%\>A ĪDSdk$fhB|pn*NYkTSy8v @S".Sdә0S`sdFl\GMuVMR](PB1$5Demʺ*&y @ltsf$)5c6595ffɒeQrMcC`pHj2q4QJ9(Rzdԓ[[>oO-8@{LG WHo?t'&GFN% )N.wvͯ&P{uDI\Afo|xc(Ӻ? p̬-)F `k+U|r}c6FwyjfA635v'g m ҀԪ&&h&3cx܎ f3T*6F` Jkfvu.͚k¦&m=14!`eǗ*<5yL5b#mW2b^a#,Wںy=4-挧bFUUU]]#ذĽٓeu>N9VefU *b"@EQRK%YZ-V?Cx'8~'GȒ[RHjDS%bFY9{}nfV% g*u:k7?}릥p֝杻W!gwIF6sۺ~x;_"x6p~v,g&4bO67/4 ?s WVgo^/*x:8ށWVWVǓȢk+K++ԗ+.$Ptz {1QRgG/7;; ]#ygtJ]2{A. \&Xk֯W9 z;ji&M2d Qz=(H ZW<'epCP 4lC3}ʌky q[$+jJә#df!ex6BdO TF;#HB κtX׳Us(T*QTE1 3s7w205jQ,%qk܊u5nEOﳴwd2yL~{&L߿ >u!t>´PNFٴDo&P7C .<,̳⤗pE.y'|++G 4[j+`U=@ۦY[Xb׿jO@b|0Mg^^[xg~a0+Wofy6oů_tas,Uu͜ڝlMWՕww|V 'Qwo>hzjvg}n۷wǿ>ͥxx4wdrֆklYJ+*fwoR~mV@* gDD^PQ.AwK_\0" An53bYDDrkV1sE%0ڼe*zQ Gf`[jG~5lus޸S?z敟^|\QΝ;ի;$^]OR7;zRO f~ohog4E Hc?&4Z-i&x=ݷ/^?/I[_\2MG7=2oh~|t*fѨ7~jyh`y͹ Dd!5d#g#ؑFDE8dD,ͻ=;%c J)wE.:C5(S%F}Bi 9Rh+!f 3(A3 3U#pXeF=t3BGpewaɛ2rMTSJ0e'r'k0oRPIL 6U; 3˜g6|ᴾ9.xHD n%rr /ԳoÊw2ZajVċٵUSGLmPL,$ 9wL&5 #[Ȟӣq/p<1A}BL_Th'iK٥iٳ..zل9܅IN~&f;. !}xM,w{M3cXҜs~kpޝ~=lj9iEhZ'ƣ)|7g^ H>Ga/}뿨||8>~cM3O!D!SqLMZ іF+k+9<7wV7zX[Ykm'e ?[_/G/߻T}27~[ׯ:;a0fcc[[bUO<$C5>;}M]3+Ww"x-=péf:5BzBG3˷>.5=M=!x}hyu8޽C3?ܛ U8{_q0/Sv.PGѝgu/nm?n}meΧRN8Ϊ*xF%AvrSpݝRڜ9ĚZWMsko+w'_̓O?_?ػ҃ٷ^{]@/0FMGj WHɡ4!` „8%j6<uU C]U 07و"3]>2J.2 h!p8p센'޵O*IRtljKW7u[2r7+|vsdXΏi۶i ԯGUCxR B!rP E}o $NnKÖSCGSkZma<z 9{d("v.3&/Id WznT-H)v#ų}|)(˜Sd,K6o|m0>7:`;?uOV/PJ xܶYBz qy  2mӼmD+{wnnl..e|,$h]>ͯ ^=y;Z:3Ͼ~rFyM=«b"F g2"0fHP6bDJ"gAR%!DT5$ d: BS}F-`@tҖgJ2b C!z0C/%ejrl.:GLk ZV@ ^irꩅ;rHBMݩm<>XU%{˫9b9 rx4LAHe*^fN\Qޣ'}"0g/Tbӓpb8ղzes3S33MfMSY:2{ 0ShEoYuUW ZQWܬݿ,}Քb?~7zE󷿟㐏DM,#l\صg^O_BM湦kgz/A0IBPdӇ>1 x:!$"!Y7icw{ \hSut#SwWUgSU-?R˫?LJ{_WI~=\kQ%"vu^>șݹs :>Hzx4&ps(1isߧ2hXFu h8H}?TGٟbf FМO?%߽u'q<77k/dϽR y.=+{{d6ќz8 ( ( A@ WX(0Au# s{V*Ua5i  Hhrt'KDuSc0Gl"w Ee UP8Hq$ MD$eN9kNRrZNٚ9:奚,, щ)<["#P(sD ZeJ7""8esEaz[Oo pQѲ&l|q82S75˦fZy5=_~<`3W{2z9LlP❚R"'vEL/jLL/n,T؅ ;N:Lw{&z%@D1?i?8J׏ˡOͷ;w[\ߺf!18I 6 l@X8ˬI }~f&#d(UMbӯ-R `q))n⑅A8JDu.7/l~d8{r6n*weN5d-jfnYUͲeT54nƃ_fMs"` G_g4O\ܘ0"!q¨ ~/Kgu#YH Pʋ*px+GdV~ ?2J8k\>?{W|sCHBtԊXY5v9?~/<V{?}ν}4[A޽jƗ/]yFtGc gs"iVb"U1[E'vǶcۗ܎Gh\v\iO^xXOt |}PsNVNt A(sH%e؋O )qI`R DW<# &gfm r(rDIヶΦՕۮk|)_ݦ6u%KEDp<^4ϳ|^ͺWjW}{{/Ȅ݃u#◾|^mߝ朳LJyo|n'VCO,e|]jOh1 !ZyPU$zbvWbG,nGXN1T{z7+\΢0 4VU3:onAS' D@a'p5G$+S90x[C@-#;L`e̮'pb)䌤FZK @%̴r0"3h*F('\vnֱ)źd~ul mjY7ͳj6jIӸwsΣ_߾睯/r)[ݱ6Q!@^_ܼI hG?HWr=ˮŋ5uaSdaX *rCZ5s'xP'ʳq/B$F i<-|.>~{,&޽{w$ڹa_zo|6/^>~湧0۳YWƓiݝtP847oAw wإÝyo`i2C.yfF{7^?WOXٍ 0 0*4 '2?1Wїdu6ee=ZnYI? $PKL*PFA"N֩!lFvIs@G>O+%3l`jC@T$B aPPG>v4;gާyiƀ<J HѲ90)|l HTQif6fWs1eg2f-Q%Zs!J^M5lNX( )w~6W-"erYg ufJUafhr ?m6zXA.e ?R7Kɧ@HE?j 3pKSzԡT 2194| 8vBB"&ysaFM!;>\YY|ik>:[on)`ZB<7.㣋7{7}cO?8>ܽRLV\'6k"F^-10gwFC^ us/j&̐ACDkrO 'HF ٠br`0ʐ^ӌڌ" sDd +\(10(@jHU>sa'ch|)P[#&l͒i%lDPEO̜ݍ4q[^)%p6MJU͍S֕{JY/{لѸ"'sǻu&@rEjf4(U<.hͥRpLKjWCkan^ճ)fsS7/?к?=>XXG%` 8Nq>)z2r,GխozױR$ GlVbn}=ڸC=vBE ;:wS>*5'tow -2KD>Mg(AfvX=V&&54oƽ^ԕ/_ڨu9p`^{ zw~Kxn{ށ٠HyF酋|u}SWS|[o7 HhBݺyOi3կ+q!B]Zu6dL5$4 )硰RnK2oaNgX3h ܒn H!V @wӳ38}GD^RA*tmvL6G)yVΑ&r33q$EsS,ylT<"jتȪLڂ@A-p@pfCЬSn' b5Ċȵ/JnKDNX5_<`#"us*zX߹LMM͑4qĽA4Խ[όab"a&ffav"vӔfr%NQ|nF_+cŤ%bJD P)zBA\vq+ _y-SuP?nL4Q^[]&ssyӐ˵dr<ek{瞿1A?ZB޹rsP~SQ{Ǜ緶4YNv¥OҿyՕ^$>ؿ{sׯ_MT5CЯj&=>^N\jyM~+w{'/}{nm^{ߚ¯ Cya6 TQ81 h[HI,fPxee$H" @S+|08TPnGDԥHnJ [eDwWMdSS0KGǒA<!cH65R0 #| {N;)3ݍ9&3RztlUвo rZ3MA JAv^.wjj`aR㬰BM=H  nC|@гͲy6?w˫H/V|ُ^U W",AD1 14TT RH:=9#Ԡ 4כtA(29D)Ip{ȞP PQ.SZiD rȰ~Z3Rkd"ϧM+س´wxy;w޹sx|lV7 ֻ;]r 7֦M|yv(9{յa]?^QǞ,1پޠ'ǫj}]ZZ*0iv|xD$p׶h|4p>4 o4pܹ߽6_صA77?OP_xIy[l=o}w`ii%Vaow7SXvjfw}/V2ʅ{wgKˣQdo>O52=;Z8v-cI-tN8I ?`F͢ 1wvO6v$v0pŠ$a2]"K%`dU5$^}dS/\Ul9zZI{Yi9!Hwl>u"4cs?[_=y|$xy~{6hcc|/jh=z oO'V/ܾwS7F|;vϭ=Y_YUu W{߼Wy~cm5~[ˏ}_KhQA"A2:E'̮2^ JfB;4YJ,?Foh#I-;"BHl0IY 1lNE9G[yKVd92yY1C6@"]kMfI D3Rj̓vˤM2Sr'ڜmnsѨD`쮉ܔrlͨT3۔eg'V M5.nHmnl'-% &@ Ki;0WRCU5NV7/g溮?HX, L!q!f. F("[ı[ٔ"Juiw/\&p@eyڢԅd'4,X'd;*IwW+)0Ack[ObV,*Yt<` "Ddqw+ ټ9Lϟ_Ko߾m[^]Z6;|`c,8{'hrt4ExF}c76k׮^;:>nf͝[wwv}ѐvx~]WW.?Qx/>{$ nmGp=Nͽۯ]؀ӃnHgW.\t׿~k#oHqܳa\1qKgluP:~"wcYd9晒Pb*P+(,!\~c=i\zg*Mfڽvw9G 8~ʭ]SwvU=lJ6'" kCFBgG~"=ᡚmn[_Y}wnZ]Zn'mƓ۫W.ݾlg^׾z…7yᅥ*9.-E}ûonoյ`U{/zC5"7onN^-OW/֚s]PSֹ`tWWU]Ϧ;w7}UBpObL~Bm"BʘNsO5J$DpyoDfBmF(L(@+rDlu=DQf\(r5OfYl)>^xh-ƃt׮_]SpVNM;{ϝy._ WH1Nj8 HD4H-^$MɒhY21fFMI(*zǔCbJJx,e#Suh, T7*@LaT1Tf!QJjjJFr=`43X Д #q'w65IH MS#:TDo l*aյ;zD|zxf .33ybODLc@ba![&:v'ڍL%\0ujSC8zHgT_yS M2 #JQ'P"NSmPޅ@yo9@O׹c>syH#oK/_ΐtЕ+_rK??v,m8|[wB:ǘFI{sۻ{ '+)"m{4X-%@@zWzjʥH}FkRTwXK.7u BڳncOpYa?wؠSt{"tSQ$r !;ڛ QLL  L*[Qust|.c-:w693q=8!)%$@duL.FTh:23p ;eCާ~0Fx5/{^趇I!'v~Otxt-_'"kwWB}eۜvq-3r2Lƫa{_4dc.\GtLY~_vȱk7((w7Ο;#)vGKx3\|sTkc`Ba`!ܽ=O?yr{geg[lM|/MU* CdMl,f `f 8.F d:10d̋9V(b 0%hUT$1i(SZ |Zͤ0w`dd @ Fb"<8N 2 (iQXHAF *FTRD$$bI$)"$ET#቙T3LYC:r8B}GXVB )Q揕c'@XY˄ @lfTܟ1'y*FTrjiRݻsoEɓg-,ZmEKUoÝNμL!:fFQ$2&"I i I-35M,ܭŜ X:ɌVq>F-$T4CFTF6`LHJFFdLLBDd&Ȕ3@Hm"1¬㈼zZcRScz{`^iTfwB~BhϟޅPZpo8>|Ι^YV}jm;Qj="8R47}w{.v}8}o3v{KW-apT//v6Z퇯\]6F>ybKWʫ(6wll:˗ܺuFݚήo曷f;uo#3y{`ky_r|pSOFF[&eB,n~֞g #1և#ޡXBp@m`p4] ` R|(QrL(U$BJ)L!RҐ$EH4 ьM&5+Dԩ$5IC$ukX!Ώ9382SRy,\))dQ:M HmSb*5譒BN˺ Ils$i^fCz 4K]4ZoM4OD@dDpdbBܚgLUL@O @ a]ȼ8Ե}:/;{^Lpƍ?tF'O4pX!oX{-8owܳ8VV,O֍bpZJY^A678 #giUQ@"m6|n;5="Zs%  J`h4FK57Kbp"Euɼ&(&qY8K%YfQS*IK$Q)Xj 0{:Y} ˫FPM{s¸E9P#ذ2XĘ\y ƩRRPy)(#D3 AbJ\[\=_|-"(Z筨\x,ZqRhVۺ!S $@$uLFޫ"O|p}/ϲ;w6T5DqYlɌ8R/q_E.^9.L&l'+F|7yꩇBܙ;;m{g)ϰk5VVcW^~:coޫxqxTVjj/5wn/ֽJ4RrlGRT \`eLZMoBsa,V@ 'XL LիqBH$"Qѥ)jREHU22XI(r6Q _b @EynpABRj'LSQ#&b| п|/7;]`WZkz]{Y!bkqs'۷}GT2!d\盘֙2s>el<3?SfMc9j0Ǯe"2s}ED\{䳟H|p2)eK5-c5xa֝bٕ~o:)R_MhsnLhг9"WV;o]|s{ӫϞ^\hn*.Ŭ 缑)8ΊtRVU)3]^]upww8S. gvዬ錆l-}խ)̃ 3LCIZMtt 0EbTh[I"$YѢp2J\*UUUR%UF(8lZk/[Y>UM[DNP- fw=fc=N}xý{/^͌  "i1pZ(ZU|vάEe>1&XAHP? H)$PD~HfY󖀭\HlE29I^ߌ/8^oP@b$$ LHJvDA_MB,w.]=s|Yؽ{!':OUj}ITKj*jduT@/^GαMDR,c~_E &?w=Hl k}։VR8L aL杆(MoZ3@lx6z<'b.ͦLfg?b!ȸ4l6Sέ;o.[SS}&&G{xck./|"w5^,tzK&f'Ϝl*-{{b)cnd8P K ̞%ÃQhIioqٯ jH)jA6AH# %$= ό<`KHP$e袺@bJ,!X90IHI9h]gN]j=̪#T$|oxI Xb!xҨSR?fCYJF=3/esZjJ~eTc305E W4 nŋrl1{;ZՆ])ڽ߿yI h25j$Qe4N"Yvs.^VWB"R ȈXdnIEUSMoR*@LMSRK,ĠAɳy~7s*,TC̋{?߳@`fG!9WD@(ئ9F :р u>,8ʖцV؂(%fN):" G*ȓ?l~c8tηfUHJvpx=Е޼9& V4[{f<WVO8qg}h!ƀw|8v;w{?Cw۷E~¥`k, 'Wv#k ț}7$Y^9Yǒ1aF3B qy@ J90f冹af(XD0BE$RQE' BEePi5rqGÁw\EL "^x饕oED Д owypp7ʿ>J]# wUE[XX)ј2yIPVf5*kWdu墁N?eY9ůl0DsޓcK]nO'~͞>}ޭYE<m꺩Riū=!$TFy9~տḰ@I21%.ְ&T[D1UI "AtV}3_<{Ec}"oAV3cvfP$j€@G|(Pt'>_F@O'LDYD\UU,ge$ٴI]dSkF+WWf44Zl2:}T;wn>wpbeUaUzwogEqtʅ]O||{0;cpp拯svщKPwN'CLk'V Lg)ÉfY48r׍1(`@`*d8*p (N@PlZ̠&U I de)VVV)+'*c9gUe]s "&A/6yLW" BDյ2I9|X3+cx/moݛ 2H(@+?.>rA;dS&SJjIULcJIA4&5M1*L!zS^~ WUU@zv#cjv>AIgL?կqV|ifYOzia  .WoU2PfhJLJΥHFݷ_n4=2ON yiI*5T$N$3_lf*  V9bYȮ6믗e MjR{mZ^}s8w K{z E"! 2yHU(˲*$ eY 76߻=T4Te9t6"yjӘK.>U5k4v7-j4흝fY]3ڍdZV/*Y=.NO8ljuq}cs`eDfY5z(B0I~<ݸά;|sfmBNb\tSIQ3RsfrnZ 4"@WdP % 4 Q2׈>$TA8%L1SXiUjlfۍzS}>x4I>*/?ޝ{^ P gtp7_ʿ,/WDŽi-鹿HHDZB/8qZ6@rޥX_<מx6|vw?*%S13 ̵#j@Ls~'f@5P!}0#sHQ`qDZkٖ5AiupH9̎-Tl6KAB vɵՕwnnl53B"1)Xn8-h4o߾ L̛;[ÕFnopf鳧ʅsgNf gB f\L]~wʉơܸgV/.N WW`Rln!bכ&+KN`0'YY66ln.QG}pSJ!]-$>{|*$W)cfN 2IUF@Td;+Kn>&UԪ9cIN˽K7|cggϢ1bU4ZyT b>\'@r@ ]фbdsAPDUR1EJ&a?a[x?P efpg홐@/]rg>SU'/~mv 9c<(-+7蹿\<}ccҏbfOPYGլݽv =T-xԹ[>IXAM|Ϯ'?q5M"!jTԒTrygfΝ/-VT ,3j:\XxڹoYz{o/4Ld䱶G M|Ï&jOsfC>TùI2UɒhR_cc),gBo6 ϼ=IJ`x8-ɤ|s7sbU9K,gͭr6;8;[)/|pAfv[li`Fy/~Bp08l[Vc{kŰZ[;i;wh\ݹ5L&Ӵ=5d2i62$IY*feYV.]Λm9aze 3*r+|rH ǬcAUp d$H R0Fe9U8&3Oej!G.bMZ"srFfՅ."ƴ晳,O8oĥ^72GT۰##g@HHJ|̹˾h|rԇ~<ý qs7|(Z+H4"6ݷEúQe$03M`D\U+WIk _)9Dcǀ@ETEjBP'/f'&&D"f"ﲂs[o_e}Nlw! 1[43e;&"&HT%"1yOdڽl@:Z?=w:_""EWMbC%"IET)"Z md_eYͦn7JzC2 O?~`{?Nn|z ddRn5̝;R v۝V3[]^s 30bnlA780܈0UVpTC5 Z ^kMϙC1;yĵ>v={@o\[/|ה@whuA!ͭ{WhTnow+vώ [~F+ǑuYQ4RNȱ)S-0 .^|]Of.ǣwz7`̈R˦TD%Wյ#Yam7:yGݛ5ّ%gbw=VjjRnp(͌"Od&3d7l8CEC6\յP}Dww=H"Qh5,޸m)I<;&2!"byYe7ѭnݼlemnDDWT6N s,Ή0()~ gؐr@HTr22J:\e'il ԊhUE~N{$+4MUUl6uaGLݢrwO޿qf)/t+K~w fg:B]7pT#TiǻMe]3I[,ټTprOӕ NQU#P"VVkԳz}"8q12lP#Lh2?unEu兗ѿ4nȻ\tˬpFkʆ謐u84s~!}TB2ֵ֓|ZU/FEQ<ng.c"/YX#GD3&v\T+_^YSn|Ҕ1RNזֿ$N/8wEyq,"b'ιb^]K?_O{٧גjQHKp&9 |Q]کsÇwop16Ic謚}_.=ȲOPMa&.s,LHF♙@,DL͝g>Cn]un OQn U{Zd4Uu~}\t2i#‡p0N0kFE۹sc-+/>\.;iGw;uoH(h>X Z FklTvҕdr:l6=<:3V7N/R/6Ͼ;aOuG qF55e@B`p3V0FPU5ԪA(C352N˦ |囿V7Ksnۍaq漈g8gMc M!KQaU}><y!Yو !g0LT4s\~g?޾Rg(9n % 1X 1 IODBNbO 1Pj6 4,'=!a,D5E`} ϲ*\͔눾teq[ddb>BGyׯ,w\9UY[A/-E7>y㍯g?xW9gC DkƤ$ QMuTM.CUբ*_+qϿݕa!.2QKVf"(3,:1aP o˯.{~MUVV(@jMHXTuƓ~>~4??Ka1YbИBD_lzx/mwscN;1̭B@D Fj| 6b [{PCc%\- #RFV[c W^.^`ha6_uCw16M|ttЄν;;lż\_{^xe~0\zs݇;nye5~;[ae=N_x_HC]>w{2߼~>^Z]9f{~ qnCfeÇY9ftth/DhU3ZD[X5G dFEVΕrW+B&YTZPYXE/\xW4<aHR1p$ 3Vw>$Nq132:&򦀎.W$]a:EBru߇>Gus.ejf3L\!;es! gY~5s.5 )=A8RJQ7߻yig_" YSu3f?+o-n0nKDUyΆ;oG:ż5MѭE:\vz|o-/lg.t{x4Lg[._Yp\s"GixU(o޺e~0'"nqP*-W˱6֝/|ͳn9&x\|՗.--xVWrh D~.A!'(jdxVDeJB\âFIPj2Zz:oʪx4n_MYxܹ|rr!2oDBl#J} X89pF.?~oz:1%r(i4&LS%s듯_w?^Ofy|L|-3 -a xSS-/- ñfQaDNQFGS,K}C MlMV_{g,;zKa>c '2oj2,™8֠ȔFhQ<2 $e v" jo r"Ȏs/I)O7vGFO hz ??OX ('=;J !*{<893 ѢG5(g3[Ƈbn,K 0%yYI~$$wr8+~e||pw❈xD , )g@ڐjmkID'i$FDʌO?sXFW3BL0_-P=Y'Tdy| <&fOL8JPMAZ_,F##RƤP1 g"$X D fJ!rIlzEP q^3+Y$$:J9f./TUx{;G;yo~̙3q7]28_|ic}k>zKv?i3oh<_.}tܹwNQf uYNt:wn<YYMeE>ۻGY]oբdW.{bmbip=z{P%ƭN}:,h^֪5'\Tf{pA$P1 FSs\heՔUujMd:W~ zgțJ Œj!ԉr1%q,)$qS =83A8FN)mG_}(3#?5f.s,t<:$&FDBl#TIb)6f&S'd0'`6a7X;{ryVcy]03ZDD$BREXਪʬj\fD,zrM3q,vGDHRdMAF-K4go$-] [)ALzMz->3ؓ;1O>dȑ(˼s~oڵO޾=N.^~vs2RϻvgחWg|c+>}w{o(IM}_D7 2JA"9H0H0Q)ƦfMUZ4U2֡CcBS;_]T=s]sG :) kB?W3RhJ2:/Q 6% !(ΥWxƵO=?-u_%$)&7o'7bjg1ވ8c鸓j}ZNF3e*x- fQU7YYhD~68I6CXEvDcH pJڰS`Rj[sr7W'4`2戚wP,x3B16|lm6{# 1@ļ{=yD޾u/~F`ymW4WsV.>.ۏX;sͷt>#8A)^S~;_{vnv7~1~xxx8^^]Daow9ꪚ.JE)̯-ס^ܿYu+aXT)ELp`3; |b[Y0Q56bӄ:6ZGMkxL2 PIO&E}E F$*"L5y hJK ,jo`d aY޳7D䄛إJay -!ggff#a { Jf'. nCa#/Z msLʼn3ZW.IS GRkpgx߻S2CIv$D-==|<)A& Z@ch d*QH[Rd&#eJ Q&J@DD'm1n?͌>fijg'3~ḉ&I D|d32p&SS":|^͠\7[huu[˃~!訚uu<~a/?~?|?\Xs}{^!,#xpzkd?-rhPhzY7^7S{gwlp,dzV [u9.a8:uס>r_|'mo|;,Qs8rsZƁ r$JRڬJhU,MafW/sN{^ԋ&*V!j1e `}O„'Q`2fQU a)C@fyN,޽Q͎!$Sbk kӀU) !jyin9%J*%"198Uh0Su<-Ҵn/>kY$O>x/#$cqr3{C8!Le0xiAff9(8Q"Fofb2p;֣'yt񤳱~$f`J'5r@smԓ708#Q#s==xEDE7;YVת*^Ѣ"(άop%gqv7s晭!;rb^[]߿ukg:_ys[y}/4oG;:8ڿx3G/]8Yݣd7@;*5<[>,{yByo}n:K228aXo>zXWwzwn~u76_8儙_8”2sqٛ e} ` bKVMD1ukkTB5s>2C  'Y7/I&KQt:ye:,Ib ˈ&#`M#k, }#'{v|L]Sdb!!{Y?hӀjFК-Um5rNA|kNrbz1 }jB#! DlȄPNf Mr%*H3[AXR*!-E<MwӨDHӗ>C 9M$#QM*GP/s>ާ2ll,-jq /qvj4͍lp?;Zd;{.n>sgumm>-C}'1BW; 6ṱ{^-z;q B獒gz4:ClHQ 1ԒwJi17 ~6]qv}3u̱I讬{j{SUvKcb2#"pvC !5ĨZcYӉUiUjbUig+o֙ ۿ/Nv,N>yD qz|KrG7︶l6@Sg|v"2LFٰe9p.hPS6cؾBbU;>^D#\[h'eAɭ \}*y7 σ˨?ԫQWyqb ӾQ0rɤ0 J#N R)ALjB,Q)}54E{(ڥ}"<&ӌ|"R'!?ؙ8fFsdC i;B uܱoYX)[^yR'bqtxg{緶;;+d|4&^}Pfלs뛽`ZF,&G颌& *&􆽢s|<μz養q4.|8<-n߻xh5=Ko߾[fy7O/_8ɒi3; EH [T:rFBVP^RN C=b<z,D^,ӭ`ө(|9KobIwb 1P"JU-vL˦a=Ys']DP#$t,)hskNQ`f-].nx{W6<{;]fv,|2v3<,q=[~eu<Y Q[;}8Rc`a 1Xc]WWް7wwo~|K[W.ƌ~Wo~|poc2$yGy¥3g'sxO:{vsgʅsGU_/œ5;:٢y {N6 &,΃16kjW^/@SU٣{w3ԯ^1za3} CeK 9E /\NH#^#ZXкjE/*F(b,.$f5TTt9H5MkYd=nܻ]d}"c"#j5RDchpM Qno};ϑPwneHorԛ%&Q'#zP/nu*#MwVن 2&.\ f@0E6k-ȱө qT#7"1D*"N"j0E f!D"NwHSnSC: U"1)B0X0xQ6cO7 YTu2zgggmuyU3[,fGۛK+1ٍbnZ?zî{y77Ν*h$e9_[Yz{{rU"=ػ'ɝ;wWWqU7M̮^Ǩj ]_[|eq{g_yb|.xN<ٳIwwE KFJΛd oDCb;z9jeSr,nXNMݽ%AHFCi`3EM=ǩh/Pfй'uT&?3ըjP o?JD|[fBJHpM"x}!-Q-D (.^싈Lܽ7e-1P""Z&flpFь;j c@!sqfeT0UP6/ D7M`)=d2v|AR Aq\z!IL5VERel< :=! Э,RLJa/]}WX&2v-/pӛ2ۿ¥ "|<;U]}vLg jhp7׾-\Y/Y<+´Z,n;djrnQbTUUdX_Pf= !w,QX,1\g {N9NEnGI/#90\R]U,,8-E ub`pN߿}[@ Sp效""Z#2RSF A5tmEKPYH|4ը@*ZWշ]^WW>}oO*Zx[_- q꺪u xp09r^^/|6"H\:TP3f|6,p?y&ưgqe' Ν1;у;7>poe#gQs .2b0 nS/f:> $m$m-AjSNy5~BOߊw !HMCiGBSO|We4|*^ll)KS$%R"b "h!Dvb큊8zvu))]ejaAi6MNRz#6"0 "C " qj URJeLiu- 4%E~~WN(YDD'սò" nl?O'Eg7˩ӑ 縪2粬s}@/]~3wx0yp|^C9ݻNE 4*"+޼Ԏdvv<Ѡ(bUŦAV.W_9LJ.u/vkDU ލZmh̭xB%L-IX]䆖HH$@޴,姎*2(OcD&Ehtry",pṿmh褉ff1ZhX&$&G7%vD`gƨĊƴM4Nq̫_sDd1ݹA#`r3gC8x }N~Jz.^ʝ`f;d옝9J#Kx37FX` F E0FafdpD)Tۭ4i1[*982QbJ1wLL OwVljܥ$.b u,U&Uߞ(Y"4\Z)2~x{hGArVtf KV`}} o{4_ă ~;R 4}?^,kbaU׿p<g1.Krzr%ivv)hupr0wVV^y_W+kA2(hS(GakقM:T䨧XoH+# Њ$\r8F=|zDEB'H&;tp목냃arZ "|uڙ-a?XZ,#44+L3qQ"h#u##j)ڐjZX~wROJR9sf8#J9Ҏ3W-y82E"6`8Ϝ?r23)@` a 5,)q0`P`AcT1(_5 `"A4 DFSS}QJR%؃R m+3:Qv[4hţ$GHmS Q_^>W &;^X83VWn|zgl6tΞNTIh$>A:l<_s"|?)S޽7^^\BdUU8fDqYm:Y UB=OSg1V Gdzhn)V/(:!#ŧa5jH*@jhՂ 0hf6k./|N]bs~.NSuO_G81 ,nIK3m9Ug];j6d9A-Ę h̑Q4fJvLye:UY򄙴kQ"anBP`!ѐ&4jQ<:Ysog|(,H2""BdI <1Oi9 HIS wFO1i'剱|S퉭\6@2ְ1McO5Ea2i3fEd]%h$9ԑHВAڶ^ .ZPJ@&+L lLN%O c&Ǽc*/{ᑙcLa㴞Tؔ{ݮt:zuu%/rwZ0(\XLpO#eceCib0?MG??Λ_w1qDX\efu=t;{ʆåA)͠G| V )ԢщڏՍ2u`Zr X`!lF!TLi[ʻy'pg|bBh2U=u4]*1IjfFje & Afi/ Dd-uND" r-c0y:>ji7龍GY\MUb"<)Tu,uscwLJwsZPIH8;[))&'ՆMOO\5)9Iz%G~;j<"`]7mshP ##% bjQ M`ĨJDY,2IȈ!<)DXI7))4M'HƞmØ@4;]{^wQ*bk(`g7   _ßܾuIl2ygw."^c(Syhٝɿn9՚;jԄs{T ]'<|17Mhlr(ז:哽G^gSBJv—xQk++C:PkF5Ŋll~:B 22@ĉ"NS6kHD@X,PPr-=TI5,yTxNIkjLZxB !rC Bb$6H@OE6?>j%BLIkjM)i5#ojUU i(v;!Dm8 @x^ԹǧIJ!?#TA%b&{fH FFhI@*H- 44*BlfQ+T!Z jMvbS Fb $jO&hؒ+A#SRvvӛᒫ߱"8R B[MKTҿ )DMFw"ԡ\^doR4UYtիW/$a3Y!CLJG0+lsmNᴩGN4MÕ?t"dǣ^S eU v>w=9tYY-Vh4Ʋ YZ=iVu/]5gQ?{@jQR{܎JJknuE2wHpukuCeg˰EOMEUJ5?D"c5D;B`$BgfD%I#t8jҵ&k&jH ;KкxED8->n1= IXD6j4]`aV]~;w{|S 0O"1a"2s~V_Z3dPm'<ƱC罟NU3C&^Z\]]^>\D#uU+}u4u84jֶ TR0_b;FPDArVWTh4rM4ϥn\{/ӕWoLu=(dOEHYJPU! r>kA8׃)9̼BvuP1PI T ?^U LTA-ƔD%40ʫ1o 107Au=f}u)& 3I 4ee=I@ h~kb(.\|@OƓئQ;U 1NVdtpye~myp޸mƽN v}i {pbwߝ G+5CNOOsRT.݇_65~8o7!Lެ@|(Bgm8"TcE"D!y˧ygd9e Bɟym@dYhfbRY`1qLG򙧞}տ;&:1)aTfIդ'wiRHR1!4 )ic^zWzM YHzxxWeLH>C4!3D @Q@u  $ȱa ) )a%A r2Mȝ| f(j T ,Wj&"YaDu܎Z}#P'k4͚w| 6;L"QJjǣ\CYY,"y`Dj"z@DUU31Q.Du???׽x[oUw\o~q~}uөh޹=O}i3Alf.,,νt}UEUTuULԨph;w 0#߭:( w|]KmlݹskV`/48k߻seUɌa ˳Ê3"2R !>yUeT(DAEF+l~yCD=Ñgyh!:&R(b,HL! ! aԤIlWoŅKٍAƍ[\Ư~ayi歛b;5v:n9\[?qw&P:nL ִ*p Ұu[nӃN'xzc𰳻߸qS9 Q,Ѭ 86|s* Acy+XR PeCV@ f f%B :F9H1`y# !+8N X{5` OJq5D 9!J5DIX9% _7 x 8*p $ÙSU#Uv'H"`tʙs F'9@|?o;~wY̘Lꀀ:"D 峘JV=t)!OF>ɖ;1ĀYyQ( g;:E52045dj,[y T1a]ͯngnmNYF"%DKyń9 ʔIކ1g,534; * "kcJ9B`f;<7i"Q1X* =uj.`weiKjƫk4]y_R)b:POoo ;emChv2;! Gy IlV-*XUUJ3 ֽ*LǯpuyفznUU0mCr{{L7?Opf}331/M?%x0 `,a{|XTC"B@#4kxO0U]Xڸ}W%36u*IL8>d3%jRj,pD@L$ IM"=L\oK_]1;TRC@`L$ @r<-"i}ئK_ڼyVV@b'Zx !|_?ڻ׫DHfREH#sĈ3=a3'?(%+&v2pAh{"-:HR.Dj.rz6ώ[6L5U@3Qe"*I$/::4 "0v]%\ vGYpGYATf=nhbDW$ fY4aՇ!ޡ94%KJ$c1<00bp8@gU}7o߾}g~ͭygeq3[US5.|V Tz2U_蘛w{H@bچ0m{Nih}y[pF1Q0?~ܠjf_xꉍã]X'>rYs( "̌j3}/d?dP/ LAH-d0j ILSrNU3wRڣ哎G6.|w>zh&'"3U"!/|BLuAD%%MbZEQAIc0hBݪOG&9Ox΁1c9SJ݅W7'2|A>eM #GqGObEBH$Ar-"x#@$BH._~7UP~ j`@3k&IʓOSR;MR2P b0n5>«vRޜ10z>hS;UMAʪ5ϔ*U3fɷeifVw8L8T%&}K8j>T5ƘTU$i 5!3J\3$w勝*+_ucEvw  iMƏ~]pZNp{{w}J滓4Ae,ʢ&uQ;x}47M7oԌ{iC \w6F[?}_YZ;[^uURUEMCa 5Ԭ͖";~'%h}_8l!* !ćKkD&㣓6Zw4U*@@"CԄUSj%q**5&M"&,1Dk$Y4NO[?1 mntRlzNy,fGZ)ɔOx ȉ*G|^O/heC9}OU"@”G̔pog~u#U݁Dup !u@2f&L4[MLrGoD'PoI<9y#2Ts (ss@ AbacB&(yϢJyn<đ7RL94ux35 QLbclS1@*bji7 `*Qf4'Ui2$4ATɢH1a5M-}+0EQ\ǘZ_TO^Qleh"(q9wNCJ1 94S̞Vʣ9E`Vf*ƇwKxX "3ݾuceLzd:rw~Z`PRV`3ASU@BL$Rr)X$"*IMR$N}嫿yҿN 84<EĬA ;pE`*f7\v #`F AsE<:CD*'$]QAL'PD=t|Y\DJ i)B$._~JWCbY¹g~өø}z]W~z_5ݢeM4؎;UW{uuf:ݿ4 c{x&WH`I9N64dL&s̮dPkDzpfuw iZ]N#~k<7ι W+j(rH7>x;;#U"R]]&IS&씅ǪYoݽ^SfL,9OQ@,fI$O{f @>.Epv jw{D=JOkf Kfd9TȒjțA/TT4i~ԪvL4L<̫Ͽ/J0C,uH3"C32cU!T SNT,B'> 95*">'RI;13T׾m>ړq8<Ҙs1޼(B{wx47crD;u&j1=p2{3W7O)MN5dT%R2B3sA0 y? hhRb+vChfG+w⓷<@@1P`"2#$RSA 044|p$dbjBmj_Oc?3=rq2 #f2aA?v)z3 aJ>TJJF3PDU&Ik$N M*Ϸ]J1ueUƶmSDe\~ Ƶ3snyƍёgA(jA}póvSg{7pԶE݃ hҩK{ӃXؠ|]UcH]J39W{ECb׭dgw?FYX{9ժ89LeVGxvkݽ} Ͼ Pћ )iyC~ǘld*HAyH; u^zG-,fI.RJ}w~\mԚ$GD\~j0Mh6EHFQ)\畯w卶H*_'KOޡ'-+ 6BCT5Q2fSz:@B[%S?|Ed͕g][[7>;U0f 蔌3!%&`L O@xo2{rw,e׎?Dwn\?jbxsv{mRDeR2FC6#CDbNM2Ɏl3F$j&LW<զp#KC`t!Qn3eԙCL (0LN N3ʔTfoE?5}6/Yޑ/+{f&I̓jH8󄙀ٗ6V%LB: \yҹ(m[zp/5MP;c>fr'0ԝÃn`To muU1HUSUn=Kf14nЩicc~aim{uo"h): 7ln-sQ ߩ:{N}h 0È#<KDP4@2c(c2l%X Q=OpV.=WO^xG%k SB&$"( 9V RJ RIR 1MbR=+=JTw 5tse#f S2D !{Խ3"Nz>싾>uMMwq_ݪW䀝 0  "9Ƀ/j\xdCUu=mJ,+Oh e+_};K4q D H`f́t9@UJԄ <|# ꪇY0_9@tZagS$ J\P3BTE2SOX9ɝ>fETA|c:\YS"R6/)&&4[̹ج~Jʽnu6ΝQq랉$SkDn܄,e@ZY;wxt}g7N—ER,]'q]$4`tض!V[_YvΗuYt|=U9sѸqyeuʩLLC ~wvq4%겨q\3J Zhw\|Ҟ|jAy(X*#QDARccY$K"r.!\|szks=*JL 0&4%0I^RTK/= _AHg?>Ԏ A 5L8YJ6 L AFѫѲ(­wt-s_-)>QթmߺzNA;L 90DU3PdbHjfflKE%r tH 3s_! Wze[AJ`)،f3'(a&6ijDΞ}ɕUA GW,9|V #5;GDf@ɰ(D##Dbr"  ]Ijr3"j db%gpt ɉc80L+8MGcµy++KKAD쏎wzʱ4GݢEWT. ֌IQcw`_E]WLF hteEzt|wnV鳚{+ +L`_no09@jU}ɟ;gA/ba냟Ͻ(yGhGe}/f <@GRKPщ$#d*wDCBs=@"֝*|+0M>ԫ~ïӤ:SB$V@D (i"I$:6x '^>y`BpM{G;Ω0e['jE F|(BoF[84Y_׾Iߩ3"vYz젟&ϲ+vb IXDɏ/f[ZXґ/:!2fw (Y:BU Iq/}eж4t7^:&bf6dS3Pl#_  0s(b3Ő ѩ&fy{ $=Dv, %Rd04tq ?Cå۶Wsf 9Q}YJ  & !LJt:Fs/o.Jxۭ{ۃnVʄ&}ԃu`D5[5!Oba\0GQu9((M{_0M[Հy7PIh<Mi{d*)f"APD+\Yg߻qB J" ݢoռaQ$_T8_A dShSʫҼw*s%EuNg9=n΂$7j|7FOzb(VE{ea|2mCIT"b-*XD*0SػXO7dM݂tr?O=yj}o/&ucp c$9`6B32OHi^R38_ 3nѻu<ɑ_+fo,={"Bs "|83RԶm;[_z&_:esq^.)ΠjhfPYn9qϛ"Ę1#eqGP#jtN?ɘy&KcJI\M)9W&K-&qfPBb ^p颪"Z Qlw ?RUp8<]_{=R-yeZ-m1~]k;z$(T2gNHmL $Ri+R\\X Ednaiܴ j:iow=D]ۄ=V;:bW0+K0qӯwAƷU駟%iJ>'sʋ #PC2*1E@1N0EȈ!9FAĦ\2W/tꕯ~R׮u1Mm|P?񋗞B|tgz?{$`ЄQ $C՜(${#.Uи[qȥ~m?5M~V^Ag;{c&##`d\ h=,jP9 (yX8koDinwv~kwn]#Jǥ|V"*MX4ͯW_];uM'*sW1;"$D&D#tH!⌾4QM{@#C6Apszt_o(ye)%&%:??LEjhh!IC&h<=|B],ӝ_Ms"7Iö[N=:wgJpoW>I3)%ғWMC_ʲK\F&F^IDp2s_W˫^H uff3-T &# yPT1P1O/+;Ԯ4Kf;:0|1t痾'!ݼ۹cHA Ο9{Ͼҟe;dC>U-?sj8rϫP5t!FvP 䴬}>@8b'>H6b>ْ=/c'&"rr Z A4WT1bQ`en}7z۷n,/ͥ4u˕"wz'/_/.\e9}wwg7wo,,t&v4mʊ'櫯|ntowݻ;;æ(M'6۶xŸ8?mm6mD_ t2]{{u0n}tIG{^U\u<=tvtt%Q!? ~iFbPL D  ԆvdJ6%/(bP3D}noWC Km?ɔ>Q!~0ۯ;L FBUlfB`m'@g(ڨQPh9GZSY~O=Ͽ>i]r̩?SX" 'E"2uq+> tFU5A#vzժ51|gCJ ^|blLJûwo[_?՟[0'C=:V=?LD9x"Ec c$0>ɥbCxc(J,<:SSdAgȆ LbI\Ҹi^Wסa;_3,D# QbJJnܻsvikgOX=ug~~ng/dڭʟ񳍕奕Aj/ +-:h^|Źݭ;UKvSg\Ya<AbZ=zcO>Fi2u/hʈnݯѸi[EM K vujDIv :L 3cJuYzb$wI0gcPCW{(.9?|E#:K"]3E2ɂ*4e4Fʮ6ll\N)_/~e]p|ltүe )DATD@x_k!M"Dh!Rrm|gU?OHO1SY_{?ؼy0isZB3mAUWOSHVd#mp]B#N@hv %%_uU$ЦT<EP_cWV|p @1)0y  ccd b$$`_n`ag>AO_̼ä{3J]UPQVb$x$X }O\a4V_)3JBdDq1՟ϼ /meu&ˁ0"s^o,ioYQ,#"#9dL4<_~1nSdx7|gͤI<C4Lm@9I$Na9S.AD& 3#o聼D$ tߊh>#b7OMcR`1hxG6W^w_[9sK;Y@;y3_ŅpWٹb*`imHҼѨ_ [wo61,=v> =Z}YՎ˪VWO?{w*Iݺ_s`n. ǽFOkK1SI6Nu+wg7v}yrٚp|p47w{77`~i{}iB= <꣕f{oly\gS( RPKڒ%[vˡ9ZjIVwKDҜI  @w]^acη0/;"cVz5(fCѕ:eGmEAb!?;/s>2#zXEDG7U_nyş=~8Q*tF8LfX/O^ cúS#KIQQCpyr/M/V?}l,Dۆ6IaMbj$<9|oY:x@  H`#R'2<%2]R#! )*i/"} 1J"ryq__J0Wnߺ㟸{Vj梟u=K}|d];8REpϊo+yzyqo7N}Cxqx?}Oy^J?8Z.߼s6_.ፓ‹ϟ?9"̼kj}vqvx,Yt WlIgLDzWcLϺu#IxM,'K>WFGP2iKG~#lC }QD;4 ]ֱCPNEdl~?Oߺow QhIx&PY50gYwq~ʛ=J? /yez?;?+XRUPǚٲZA^|^o/,9͋7:z|W_\h3cݸqnő.u8> k_Xc=V)];lo%FnL5:{8exf`tDε6ń6z%B\B"k t:JUxŏaW~/#@g0Na UF7vDm;[G&@$0:VڴŐvM5 6~f ʟ5o)gxmy)bQR<}潏>|8<5>ܭ=o}oI$_:<9YlIJ^>:=+r>?\\U-|2nV[E&+DtdT53Y{Q*]xd#"U+@8cU3{|~7o_x~ tfR$ITi:WS 0[?1Cvi5)J**!8ş|OfǿR?yg4z&"z7_/Ldj@M'_p`;ꖥnN€^^\ zZ#5 U%zhxJI1v8nl&3&cBdP9\ޠ'{t#WCy*5bޏ "/zn+k'Xݼ]jxƍO.R.x׮.פŖ:73|饗r~t8Xʬk~ND"SxG7xqqzGzq+G@Wdx?+eU<2$b/v\^~q/{k/<;vVde  L1V"E"Y9sYqZ#s]: B30kΡjuo|_|_|cqxMSFc_-I"|l"?Cr|wOJ*R:+CX%Gt:j2=lюmkӶ#lImk=FBʔ"JqV" <"o|埿ۿ_` 2F>uS@WU ~2G'xT u6rc`Dk%{?{׿[qtr,ƶPk#6mlX]^]^^^q]DZL'>66]+DG#B4_NdPOpgFs3Sb^oЏeVp"e CVD lǑEđq1$ӳvZDwѭ;/N=\:yuWs_\^.g7뻃EzVz"PU1+&*[y{_wq|t[̗T.!y*l0 XAW*PȈƗr|o~o~^x57L];6 Ǐ./|;߹84 WǮ,R7kˇʗh*$`}vSw^|D[OJq K)Y{~{__z7o?wg6?(}:6|ݻwV=q)´Rg١iRDh`ȦR-ЛWWlZ_X sv(Mq5Yzbԩ`#ǤG^c>~ck+Jѱw|>|s>/\qqyc~ ׇq5~< Wj=fkߕҖZd j4j>Ly/.y}=__v>^^^q9}g'(3D433!$%|`C>FzYRTBD o:a@Ez\~2PR`#9jtPB8lA ":JDuj,j*DBySQ4(B" 9v^paԢ}Ag:뻾P{+e:$2TeaS Mg' @5]kfd61Zh/T:p.2]HT0(W&HEQO>yw%ڝgXd¬pZOjci!d3X7; HLkkq5<w єLmsEDhMB4, n9Dez;xJ{^qD?d6Im(QUNcHZgD B ͈\$ O$!2V2ל 2B %(_@ ݆-7PLq]9tQ׿E Q/5w`5k_]#VOꠓ~8-=/E_sY_9TA^=r58?9xO-rΆjC0˄ip$H 4f=#UKJ+~1?p / ٝh6Pi]/^YTtɣ8̆1k<8>7ONPNO3stG #xxnf飻Ce-/o_Z?s;R4j&fFSU-mQПoáV8K9gfl\0<2zB"f,f-2\,12->bhBe bY ϴuQOE$J3T!a2gFu#RJf T:Hc*"bf4 ^;+ N cedzxuAAH>j 9[?\ij$m/:)[J0U86WLL %$'pwh;Щg#C2B3pk5Ud\DT3]rC~ lr*.A$2M*McCt HITJf%U"3%$#BI",:Dieh2ebW?9*P6@#upSBr˒TJ-3i فѲAFc&I&IAuz 9BV@%[n JTLu1uR49jO|kcm_tuK/vOܻinǮv|%3rx>?얇e4LM"b"UmVyZ.opO0E[=%߽azŬ#S*LL[LCz̨ZA4G9&rs1 YuĪV@!jtsDBHDPuԨHҳs.KEd16F$–[c 5 4#)CXdQTBRG666Fh ڎ7&bRȔfF@~|Ї\?X hѭWn?cޗGpT5F+(۷x?`N|2EEY|ŤgNR?H3e9n̈VPQZk zB"HI7E:2B<01 2za3t H/N%ELHO6IdINJF fD)'BRZ:j͐A,qMo"0,GEx/ ,Yb$5HFpZS! n9SȊjxHKbT8J"i: H2%3o2;^}H!HZ[*SKIA}[6E&PNc65P @4^qLi6#c ai{Sb 6>4Ceme 4ӝ)D] ڡHL$YIM &`Lc$Uh!"R>c#[HdZ{ ͨV2#tiAB4" LɄmyGtGu7Uh)CFpHTtL̊0*r0$DD*:0eGL D2M.7¶˧P$vIZiHJdn u+^ ؎M@7]"$tE&yIfJJi)Y(%W0.-mY&.kZS{T"?ݜcR D%tt/$n@̎FlF%X#"Bv"H7K]' dii K#`u$4@ $RPnytp3bpB92VaD b =sA3 -"@mvm &!n)k;Bwçq_0 c^ ! JYkԔAL:$8,(NԬ3'!"Ż5LfUG}4; B%[¥Fͨ)@!26d1Bd[O%>f#ERNH`vꞪ01Dg)ɔy)ViBLМI0֜)*H`C6,)ED4+ 4A3 !<ʦ fw@ȴ=i^(PHDFӰ3B4C3T3`wqǪv p$f,` =)޶l\&itē'"7z Z#'E=ފ{T&`۠OJ֦~+oeQ!}$hD rͺn"mB8uݭh)?HD2!սLҹ<cG'Vׁ͚hBIj3iay~yɟW"!3)mC}ͭ~I-z7Pg4f91Au9fL2*c>1$+3U(ֈ(Pp0 :-`=ޒ At Pچ8$ԄDFZg,j`1SȨ"[dMG2U*P w]5R0(@h<3,LN1:2kXEL F"d!ȴ5ܰM<$㶖mxV"ffSaޮ۴Veno45k[ qXfhe ʤo jV[Գ45m[)@يcpZܩ[ 8m/-I@xjc0 MߙLvQ0 @~i{\mh̲D8r;Fm4o//‡,;xOv~q~J,g 1ie1=1r4/5sӶEdZ :H lCFt Z  2=2E%F=`Puz_9,NQ:Z&&-9^mR LPU_p:Ԩu9Nv1gMFxD6"t5̜=8.IՒ # )}ETV $a!b()Z6ƽZ[gڰ&ɐ'\ݦI%$QI'37J&N6&-VDnz7~#S]$4zm>RLUl, "RZ$d 6,5! -mNUNt@0Ҹݳ}29Jj0DuOWP ؂D"3r (jIS"( W+3Bi pKbHI+JmK;D5H `j= 3*i"^qVT2CE&anR%l%*ޞ[yLK>4nQ RL(1NR0`JU%m푙lbCNOYz>#$È/rL|nAVYCId]qF ÅiDDfi2MQO: -וW2=j(a cC$##3".%L6mϜ c$1@Vj"D 'Z%C h,57M2[1>%,RxծIѠ?^33xVoY6f7D{VdDu7E1iN%/C2!tFuң!u^SgS)d*3cEڈM_, )M͘§mHDQHj϶>lvBd3 V /D8JNFi%"EmPV7;QR6!<5/3eC?5q7Q hJNrNbOQC4H N)Om<Њ6>6Ș6~+&̦L2 @^ݪL3Ùm1tZHAֺ0@*-WD֢E`tN<% kG X&ag)tP!6I\ɠd?SDfq::'fez)&bЙiwv/ڥžcW*ѰtEKHcLmu62BPVJcXJ;<Yv6"&mk&'3lNbKsʞ{Zn5npMR&t_=a|!uSscvpD@IS Ns֑~O TiF%0$۔ޙ}-q~*ɞ:=&BB3*7LC56QJIbsCUrjib~&݌LIHJAjJ6{JH1I"I3Ȗ|5}56i75 D"*LΩ)d 6]]uE+RE,f]ĨQGo7)PL(ː BLԡ"Mée< 2GU}/9ƖMM-\5zj|ֈg4pO>sDnaS|NxOWd<5%lq`ھ}4!=߳=3rk 6k~HmldƵeL;E|>*#릛6YfLͯuR@CLS=%]~վ.Est"Ȉ"sEXWW>[ n#a# 8sEEbbDq#y)E66g3;JE&"o% Ph8@|9Ԑ$ 8 {FUWBDT 0zMkX|g"CښGQ2]gS@l@zf+03Zid>޼=@D$bږ[ S|"Ql]悟?fFd"{w징-M'rHG:kb[pqLԿqb96v $#TmMM[Hu 'T!2fJ7]*l$a$F&JQ)r1ՙ"ktdPɫu6u5 635AnYu\'| e HD9 P]!U쐂,%G$".9 Zp*#V=va# !]2E3+|Lyu!A!D я 2F4 }ԸloD0=C i?+ntkHHAQZ}pD ⪕am'6mdr9$LA[vGؐ-?%Nj]_roӭ)&ƉzN*V@e[e1ABdӫؔͅ]'u g!b[s}{Ԡ6MDmr6.ޛ;(0Hyq`pz]~zK)(FjǔJF"4s<9#D ȔȉEJ)mAr0 gPrlSvUEpzځ@U7 X860 {A}@ 8Ze"UIXwoV^gH3#F#eMd9T"QC%eS\(.Q+>-"whjQ׫bKD5bI-#`9HŎpA cxdTOwWch*[CVǭ! ~2_aO;&i|>-pU:WRNu`\e{7TEsP"ihshx4bqH"~FOkA37a D\IENDB`eric4-4.5.18/eric/pixmaps/PaxHeaders.8617/aboutEric.png0000644000175000001440000000013212170217300020606 xustar000000000000000030 mtime=1373707968.183652753 30 atime=1389081057.590723481 30 ctime=1389081086.307724332 eric4-4.5.18/eric/pixmaps/aboutEric.png0000644000175000001440000012674312170217300020355 0ustar00detlevusers00000000000000PNG  IHDRi' pHYs.#.#x?vtIME  4…rtEXtCommentCreated with The GIMPd%nbKGDGIDATxYlu&x81yUbU)T釆0F76O p?^K oFanI-R,Uwʛsę쇸$EVItC"d #rg[;sZ1 _ j}Wx|+GƂs` Z)L"Y,J| @^Zum5e,$!9kE !8!s: h),M g fJ H)3UU1}N Fƺ($q*pLv@3,Kb<: tiZfopyvF&G'l|> Gui%l2N\+%H3Ud? !1cXDq) 3Fk0BH*x<{jFh0'۔2@eEV WUYR=OZ+|HOOOvvv6﷥BsJ<,X b0RrdHZY͖V=9g2ZE4ڲ,5BIY梨0J_\zv] O8甒x27O)ܹsG)0Au=NfDŽ0c2y\ؿ"T?3j9;\FCcd:u=`$˪c1YD1.>0ϋ(n{enZҹ_ eAcSmH-Jʪ,94M=?yB!*= E|pxy> gYE}!BH ||p5;?E]}}y6wݽy.& !4h/1KRcC|,Y,dkmm'Q0;~]<(9bXXmιgϟ?{$K2/,,+,u<+P6?$$(Gq\Lg^8iFF VJ>Ƙrʗpzu-q@β|2)8RT,[.\\VU51&ݷ>>:<==&GGIH)}ǧ''ONϥRƺGkm r@޾O~Xl20n$Vr*Bk=RJkECbC1U*<#{~ye䋴0a:ϴ1Gwvvy~z|zyq5gT)Ɯ\]}[o]~p8c*/EڈXS@Počlrqv[{7ׄX{8aD R Bhɋc˧9^‰bv֧ |!|:][[/xaĀ!bX̆$ t<gsuQ04 ᾵8OBjRz.˲D&sY>XKE)u?y2L*6wYuwo!|ߧ9m-l1B?|x,1 u(ZRgës!fҮ˚X|q>Mg'l>kWl1ϋ,K5X ɓd˲JJE5XrUx:׈(I~÷|2:}Jyc)c BgC7Z%aIR6c1=H»[ij^ ~CEZ.h?aYWye͹q_Iyqq9sa"V!,l5Im%$«흍O>8Irc{26L(!Q_i_ _*Zf%G4uL\K 8g,BBxy$۷oUEYE8?=ѣG'TԵ"+(A$/ Bǘ㴨s*LV@<ʲEzyq6_d`XpfGsn{{gmmuɧzntc4cZOKƘ(g1kʫrV7D+cZ4}~pTjm/Jm!MZ%i4`J(r!*i5`09xۭDHQ+Ϟ]`QV`aHF%ưRJiθǙ! `"Cof*qo{Q?yȏbNPYTe^^Ow`0iK)%4P!%ᱴK03ƬՕ21X,...Zf4ͳӺOY~zv6/&9!tVV8lRbL  0c~%䢪haB9Zy&JJ{crJ髯GVd0~L``,DQ䜫#%֏%Aca.+6+{3g2b.CٹA9QJic(b6eUX]ԵX# mm%FHkm1:KQ^iMZ-y c %{!c5g*kf`48^[]yJOE^f{=4=*Uc׾H)11>[j1V9'HӴAhmčKJyQe1BEYy]gUQO'E Ѣ ARk5@5vjiP  )-`VPB X5g%cj%IWA>y9pt:mI\?8<\ۯr?H,EE1N4"b."AEQl6kZBxbbQ`xo6WD%&IRbZ|U"Z[J[c el(ca`j1ND9SP;kΘt\Cn`Q8B?noܾ9[̤R_]tdYyX)e405`@T@1ƔHl-Ҭ X9XeAXZ*^ N'ɣGwov?zn߹͢(]~ @9m0lee%ʢ(...BB=y(CDۧY&U9VRJY)u[kmyqcbb}``0*-PF`1ƈ1Nj<>fc)mVQɓg14l;7oq1 FKD]s/ e|^}xX1B9li]5Bh:_F??>:BZd9g-VRR 0z$IB1 XFrFk1Y_?"o|1S();Fsqf+v;n66{8,]E? ߈Z@ Q̫RhUWj{]lޚf~ƘeٟRuO>z:/?yb |>(d2+-+%/yJR1JbY$Q90-B*0` 3Y5AZkF.1|٢0)J`P=cunڽuswwmscc}SuNp?rsZ1眐ŧ>I7oNFa6__[?<|qQbN'+,>(2/([0"l"ͽn,c׌Z_z/^@زb(3i@JJ,(+X!q`Q3rNPR0J^zj%Tκ[70\,x-*WQ?sn4a ~SB' LHYUUj=68XJ_?7Ks\)W1&pzU]<X043vYBa#`)a }㌳F=Jnlo!DvlF^CڢsWㅰ E°:=:8;Si]]^K%y^BIӈ$!6Kai^-R9//[RJ1cg#)6#nٜ1vb4;8ͳJ̈h0 l9Z'Q误oܿwv_k̈́=LC T:%χ5FG1f zv/`:N0Hg u`eHJ3ʵ4V`?0NJe_OeØ{6 #SŜԅf+\6z$B*H(|>;q/k1Z[1 FH2j$ʶk9N(+%81%QL%%K֏|vEu=[cRD gRQ߿0y i6ٲ5ژZB4ˊXրkF+ϼQ9g 9c^Yq@1b#nF7hQy}nuY38@j-kja}//ϯ4;<\^E^Uke^rNxI!%":(ȫ%Q;k}}:T3bj =V˘vk}e#|x9Z{=|:3bD~ w5'?Z+;}pv~qNyP  c44/KLpYsP-j54 CRu?s5 B0LC5BYWjctQi[ v GW@8?ϲ g4 ݝ-?ØVkLb18s-TaOkM-l< hdgPkh_L(:6{+ykk~ QE~t{n/Lksϋb2]'S@uX BaD)!f.JkG)QJ!FhҚRs qJu;]3Y}sw+iFFXV9T-&F~)mDhE0IRRa}YVgW 0 !7wܻsyq޹ Mh}Wՙ]@fޡ/[s? 7n6; z |~gȹl6NP/Zwc0%) FeQq)Z^i5ȣ8+bQ+P zLY0ֵĘalQN Pewldeoɫ\\(xYZ͍niiu2 ;2 ϝg!!dpXw"#ZUE3B|1tEAi{kۻ{z1)E%%ύl6H 06c3DP\~s3E!dBwn~{Z_ڦ~OGӚs~|6XdU2 !j!pGyx6mߺwW y~pYc -@Uڂy;ZIEw~ffO׵`ut>] O0r;qyiV^]^1լ,WbF;/յE:ڽrJYS҂3bLsh@`vBL; ?DB<ˊy*͝hXH凾UomLK+" ֚J0  ^ZkY!@ޝAlny-j ,EKQ3Fd5CM]N*Aג_w-յQ._!ҢZj6]i:BEWgӏ׏QJƳatXKuXx~EqRf9 . ?w=?=8w;N}HANXVFvsrud1: Օ΋ZاgXZ\Yu͸hv&S`L99:>8a*]SZQ&+2y猓ŁkE(Yʽټ{k< {b2B..겨74,8qK,>;?==Nq3i.(<`-/^o:xwqyShkBߏp2RzC*~/͕cYf7wvM8?O(4ӼҤl&q/ Bv#,PJgYHN[)*h9ޠh6(I 65vi0Owzxu}u}Y@ȷlaXfi!0vvR'yQJkݻ}[8^^K>;GfK㌱յU`8l[;76'GEskr 9-jUѸsщ6`~Ww7{Z\o>I0#U]Q:(p:K̹RDc4˕AZLj79؄]& Cy H†td20f_wjw%N z("zlQ-*3g\Uz-.Љͤx cMefٸP(¶o]<PEn?ۻ*:q@BRTEuqyQQjvt<' nE1=6UUe4E){͆ /9G81#ݭѣGn{kk\?MRz+]f|)%QO޼>>ًH0N8:;?y1Ki+^,Fz>PB8w{Y]ΊՕ*o^ދ1U /ζ;4Q~mt4+o͝Z/%~ѧlꜳnXƓ! 43F[γ'{UQ";feӘFDQs/[s7tzI$ьµvKW?{~4Y7V9UWU `@_hO/ΏϞ={ eD<]f,_t:HAұ*秧ҋz?N\cçGFY]՝8ڎgF<5%Qr&_{n^ɣǷ79/G^,;7w6Wzk]XH!j9K(/2+28ƀ2y |"뼨%8wv'iYbV藥ܸGտtaTL|w׷vQsq;U9K(a7߼8? 2QD|j?"@d~v9~CN2t1ш j2{qDj3 fBF0X]m~ OrZh8ҤCVbS8ڭ|1ODr!:r4A%JnȢ9QU/I`WMu¸@k l]wlgPNsF Ͼցy)Z)M0x?zFg*ʲX֡ Fʉ\ZI5Y,ήFa]]y^^ai`dqEVk5"pfHެ"y7_uw{;(=BٹmL1ѵf !eF`N%lv[u^`[w'ĸxQiL?{nFe59%zIȬ`V BrīZEQh0j'md҈Gy:.Fyluڝ*͜E~ſ?\7iQXG,#5'^"{?ܼq7+n(`s_z U ϏI;K2֍F| |:!WӁe19wol]AԵx8O+ OgR<5:LuXl]kBUH?|O?pp~)Ƙ~-k„QhčN]Ϧ3nJ̸n2W\VN:Xoi>uAqYȄj&ZWhݓ~k7qa?w>^_Yn;;vU:$*e#FBB!;LHL[ [^zÏMopĀl0.h Ҧ6XH7 $ٳo} aؾ~+4M9w|0 NNAT80Mc4N2D1M\HYE b:wc$1,X%8(sߍ+奋ն|6m$vw{[{"\A46hFvq֪4 8޿w~ZT,trŸ'D]j]Ŷu],qy.ryu1警'7dN{KX\rp5w惛>EU ' nq2, LIJxh!)%"=;;<;f8gIUltMU]W;[P)ʋf:C=& 7ߵ]ǵǝdԿ֎ɭLڑ( ,{ \[@21ǧ}ÇL<;hȳtkNoݻ{9>٫+#;vwwqfbAϲldV72U'{yƍnj4k wᔮJ4k^H0E!tVf/+$["0|8y{|7% g(n|ϵ향WejtL"Қ^;ܼ(eLe;-pLh,wb{ǎn4w=2)FN@,~ _u<ϳx_{iLtcW|_gOՒtv6C"6Or:M{ARRI f۸EuVZe+t0u]ׄBl^jd;!X)zJ=|zȷn|q6_>{bɫHmV,׷YLr&/!Hz%PV V Eeq4uE U'y.$7B/,a] u\9fUi"tK_W@wT=!%c5ƸZ$N!$pf-֫wn&[$x @ l6QtM#{fc:pJ@R<: H$PTX|]C,NGMQA[$ ,g=&q>lhYͦ`v3XZv(M4@HZZ4r&^Ow^s9T 쒗k/Gבc %?QMB !JR*<G?G?spUK]eMZ%E i8ya אUD *H&YGcR1P\u &E~{~vNV5-;tDΰ6g"^o{7]`n Iq\t!dE/ m1Z͐Zd1;N&i XU }VAgY:j7wގ㿞cK/c k)r6<0)x{O>,Sb\sg&"=],25jV0u߼kk\RmEi ¡6-}Z]X PӠhBF/6;G 4v*9=stc7>048)=g?x+| 2t*M0TN ݲ 6XgrM=3tJ%{nQlk=_*(xzNO4euaZe;T7zϟm{H15k5fR<1JƑ4I.SɱB~bceXhWŪ;H-­V8+@$ tXxMm&Gz<Y[mozmj8 mͤbgAeaJbZ1ܿYۣkEX u14MuFQum+ˡj|{gyA71u$'P eioax'iiٲ6L攚ü(IVVLld:p|9-S0%d'?dBBQ8Sll\u^mЄ\(B@UuܦZA/-%4o漺Z.%BI`vzDI6u]f+ VM~M(*6/'O&IX':}QR?ov7u \utZLF04+x4(M:e?rQiAP4- ut;pVel;>֩FjI)6I#I~n ?? <`@m&!+nQDEnoXZxޝ6 PVWji+^r^`Bei}Qk'&jEQRt2|0[~+yOq;EU1]a#V&i(MRaB" kSP+Z`4d]YiN/GudU9B`m%(ϫbjzP͠AGrڄ=v>RJjDC %MZ [wyVE0|-jә/WO^ @ak5~Ar<Wo"NoԼ l:ݿuSU]#*VڶER{b ! ænX Jpq˺^GV+j4vm5j0FҶLr6yvSϳyH;,M{{}3%kwmkYQvvFeziT9 k7Hc[Wk/y{4^ud}z!6 dލ;ag/N g@` T[ [ӎw4 2j4-ѩ k^L36YlVHlfP`Emhe2hv۱gϤBUQ$\au'IV8iiQee8X!i[caFI@N[fȋ?gcu B@).yk8-àJ9Y;-uכpwfBӯ^aekƍǝV R2M4BJBczaڻo:Os7nmW:@iY.d2[e9_.dv_EVJZVZgcb,682~pg°F8-[u*s&jQ9DDVszZ|I2* 5ͼ?{R(i (BǶ JmB!ۄMbno > :Wj~Q;nۆʫr[fU^i:>&/IQTiRZ^djrNw 1e0h՟<<+>vo[ɭB_o\u*x j2Mž!"dSH5†k;IOF"i1Ljme%ىm Rrnjzz~~cs?*J^ 33qn*-AY[?+z{X+ʗOByL$e{OXMǟ׳OG*F˹EEQK&kYͦi3%l4ۦ$&/.ģ+rt|7Ϋ/.[!mgC(͖H)8!~+ L,IRDq|=|M]K)Q):DiǍ >['9n:AcZM6NgB 7o<2׸a ~iDah8T1EU&-(EW(z| t15Z"Ͳ,akwښkxR748e2I&؀T0ʹ(al4QVzI)oنq<͖a;i)< ,}7-t3ZM=W:&$ʤ` .hy!G^ϫˍ @)l&WW|!tЈUv[AC eiNڭ05jPaTq.CӢɪ3EZƚ|{w;n3)4ϳ{u[Tz3NW1>ОLgtȐ@@R4κPRIak5rľ@uMt@fmF rZns1\7塥k,%z[+K"B-s/TuDTjUQWrhzOr)(N*VϗkY2!!N'Ӎ?|;'yv5MZx.! a:厦Ok{h>0rlZ^-kv $( oQB`BBϧ:g:0:njEu=ZNRPBĖVgy6Cwyň/x=\{tXa=Lig(M~m6.8alhY8~[MfV˰f19v vfoYа-6XV<-+4tG ɔ@ӝ/HvV%ak-k4l6*$~dOڑ$8'-k|tYC$B8A%IUJf9vL]y"/vz?dv06{H3$ff;^o^]p2כ;]oXfm78N7vjOO:TSux tltl^qrgy׿}rrŠ)^Uk*^ !(i2/K0 (~&y^_^3kw:4"(݌7V`M΋h<Ba;;!u^efqzryl $K/XM{%v 'c)ɔkBrr]#y-|˶lj͆lTVU^ʔ&)1IrQok.5PHv #6\V^MOzƀ@n^צw@(\`B勇gF$/S0I= Hk"d=?[<~nXޮ嘆IjYQml6H϶{P ZG cql lu;0h^R NpLB!MFW)%`WWWيjAWmӃ>çqitBqA BO?b1L8BǨMU~[M o)!"BJ¹ R JBuDE2lqx牭jSıU]I5ãQ]g8W<?@C/h<q\A!-Jy J Qί΢h^Ti`q=tLd_6c@ '{0  ԋrbruq EYy^Ygc*-XYՂV}pQD ~~Yi`ߴt; 53;:>z{xcgt~6A!GsM%dF j$[6t *Mˊř}thNJ0@wH3N#@Ui<={ Aߵ(/??t,AFh]fNvl;NbuEUڝNB$ddx7v@5"ie3h<{2/j@:: cN]er6tz]5M"]mAn8Zijf^Dli:y!5| avT H 0λmSAӫ4ڴ#5|4_B dʲt^V<{Z?O%bg0&E]+!qFQrt')<_;vGD|6o_a6.~`v$Q| hPG;y,8ޣӌZo6E]uD,R@b{ƽdzQeHUiFiP%qVR"C uc(KnYɓ^361RbUCiDwYͳ+v\] Bp0 F*Љ\!1$j粢P>Yb>|mGP5U`6Q &mYiVp@~Q!pVd BֱN]I2˳2^7|`7Ӣ`a)Rj5 o+)_ ~=$_%q#4wf>~qvG~U)K4Ox)UU^N9@T`Q+~t h _^MGLJnWek&=WBkXLJV˩NaN&S@8:E9O 8phF^׌cSÀג`Gd6A{e)il?=^'? E;P)6r]/]KS5P2'P(v@<Zbc&$:)㬢pl?}(!*)gb^tzf;4Eu2m7~ʶ4m[muexzzqk;}065g2٬hfq„ޡehvkBU+XHIs$IIBNY/|]0[!VNEVYb.RMs+6( vN'zVWFc5C:,II6-gXyAw|eێK?p8n5- 楦R$ͺ׎5!;ˍb R)yj;n`pKs)")@].+^ށCpoRXxq:TjJA *AʶgbRmAmfyB &hV8zY5U;=׷L;vB&X h&ۄjX!+sB 6EU;M/RaHj݂N'u5wJho˫Ӌp0d&w|$_9kW ^*]m'z-@XfYͪV+htvv U$$H*ڦ!4"Z}ݰqǥQڶ9 dd ˲`J - RU ֈK@RH! jT_z%%HY:Xuڡa#P1 ѩ0]k8P(<)A!~46RbM%,ɣ'[w-Ͻ(D5 T @H0 I(ڶܱ,J5 D/ (]-˫O$+ kQ "˜Weh:֪t/?~6SP!\˚!g$)q,SRZgٚئa`L Ӓ͘ȋjL5Esʲ3IVmفڶm!!ҁz1մ߼֭?}|6-<{<zrm_uJodٖ໿vwg*Ȋ3K[I-Lͻwڃ=T_ߔ!%׀ &hquzaEOC U Vкq[ACC q"@NcMW/27=b " AJyZn k1ʱuyQ.֫I)j&Ptu7ED]5Rl %sv1H͝m5͜4êz??wePQg8:KҬ :zMu!R1XAR?R@BnGi̫ҍ;ݝQ? pхD Pg1ltE1WJ@5_OcJ`Ӿ8BznGF{v)\,f7o$ZWfA!p2[m8l4t:r957nHYW&-/f5? ݣ$ )0݆6/T/O  "R nsG߭˜%@ʲmlBLJxqe-X 9 Vtۿ[B${A#gkZWu{=yG!>:GE]I&Fr 2K2Jvwݿƽ[F Ts|{kP~,) !*"y|+RQ `esc:c*m m:y|ɧOY|;}ŋӢZ%i2ffUUdy-nXYV]B2}p-WgbYURQɐe%޽}z-JbD)H(%课[ͫ%Bu /#F Bk/N ۚE'x^/WjVn6+DYATi]]N1m/ [Zh4ƄZ|6zGamnl>`2lt&|\S|IAssYJԾo\7Hx^V tIo..vkͣ԰P M?K"JH (%F:U/yRLpQ2[7L˜P0,Ȟ>}VՕuYAwWQcggm;նo >?'7\6b6_)-]㇘hoօ^yFIYWTu]u]Vy7|1U=Ӌ{7YW?_R/ )Urd) 9/|H^FJɊU@JHsJɧ~.jfR|uunxٮjQy{6lKS m-ˌ@(=zb2w]1U-{{Bfijhf1_r^7~ %E- d,ˊtn h6ú=Ko^^;27 'R!` _nH dUP%mBQW #).Fpm;f;f'OS$+Q].OK߁qiVEŃݝ^[Jhü;;,GoR9u|ߩfg'T3^ں>B6 w0%|6Zvޞ5㗷sVrr wO-[Ħ/G}UC/[+Aq8D` "\,U @ hICB^׌8|4/~۵|6BI|~~xyfY~﹊q$..ֱ\`8g/O(Z:Au]zoQE,tGGgO^ʺF!Ԡe,-ֽw!Y׍\.R )>V(Rͦ4 h\.ey(!bh9//:Io\ێ裏>gE^p{kg'g*(6 Ryػg}[/wvCrF%l@bǐ?dQ,7$ȟ _ @ȆĖ-2p8dw߭nUg?]P5DjaΧ[o}ra!BLf,JX4 F ~Ӳ̄.'(txQ7 etbQ`4 ]ekc-u#R}J*Xcud!fw[a;zZ7wy/v B[méU3t[1yy!vxlgw^yX.fc FL/+n:Fc.0XJ=̯h%Uݾnjz| hZ@0\Ikr挆v=`|$+ EJ!nr{Z!̊g^yjIP(QAX` _^2;hD 'S[1@4Bx09{b2l,˂ 8?x^0x'Ãvln޺$=vM}?{4z"|p0:y^K}9[]L&~:==N&~ivt8ruvx^/~>;^;Ni=;n׻nk:qU.^֣<]y~:0NU J#8k-Woi5) lDo[Jb\yVTU^7on3di8,R߾s{-k7Gb7*nuFyE~^ wW.b86|h^nuԵYVno_9l7G㋋xUR(qMNE^N޾SLX & 1~ǃ7%,`L+QBJ)Dp絇lYL etwBP.ي:C4;x<t|R//to'B>>={g`r8eQR&iyBgOw{`'Ea=GQ)_m>sڭO[pd6 jl!ĖD1jZC ?wb *x0RcZ%ٟ8cǗ lw11 c[e-ls@0sϫ]QU]W4~t;]%zw27ARa&i^iu[2 > y JO<3२;Z i ,<|GZ묮ReYjcFQzBǏ?^?kB1{J+w'c(RhdBZ?h;Zm`Yv܈Z5`MǗ mwxNcRs|LQdzw~c!B?RcU 04ABfZ?ie-A~q24@n6;n89]gec`]ZBqz`0< Qj.Bv+"+) 2wth!Z`x趛^O nϟ~f'eUEp8a2w͌,4Jw{C!@PYR~x@ !W.K)ua EXkP`\]'A?|rFA |A4g٪.*BUU͖nsZ7;Vezt87A뺎.έ*wq ږgÃ׮ч2o4q0Fé |3wǴN^ǩQ Zս{9::藳/ įϵ!"R׵Z,aS_|Giq֭r`2ON..ΧŰ_^wIZvk\83_,@[/+r|W)%JitƳ?`Zp̮];v:S!b4(87Z+ʲX,UhFR* 2k _>~u]U8eYjR8IRݎ FyoqƔҢ7ڝ/w/]ΡnQ,/wm&tzsuV|ܵp!_ܼyWun3l,*9[].6Z{^\n=ϫjDmp?zzB8OӼ?ผrj~0 VVM^B ǓfuV+ʲttw"5@X\JZ,->}^V8 ABg%/JYJIlE]eRh[ӋdjEZ bw ,*K,ϧ@ǽrqוƢ ٬wN8:2Bxw t6޿w`eo0x=vnI9 v(6d *Y;jUUu<Ư|CDS~g9.P0F2q8w0hJ(p'BFygqeLt_{A]'~ȻnղZ3%I!Tܿɽ۷eZ6n3%krZ/69wa" C``jocdG՚s?Z_X]a%j2]"kQXʥ0-2p:jyYQZ(M9S޼֟O? gCh)gŠV)Z~D؂fsqqAƵUYc 5piV*Fj͕Rqdi (!QZ-Zv3`U@BijXQVqsONO`:|@rz9/Kߟ7|2mF,6Fa9pN.%ʪv)7֫|?it-@Bh,W;Ns;JUq ٭]z]iEH!vˋ"$1&!Є,^};vW !@IYnRe{xV{N~l }o@S#fNq^yq( };hÈOKwx" $x<Fs!AH:I*ϥTjr~'uYt<(T]{54c{C8/^AlzZiEQ+{ՌfɍYeQF@V9b?z뀲}|յSpF0PU(o:n]~pxVEYZ+h-(,FbZ;gBp}|.,wA8_ aԸϧ9DCD0ВZ^΀E];CI[8kFJVX5@nP2ʮein=ǏaC6Y%6I*>d /pl5_ΦFa]LMVcBk&ЪLi6i2_JV]X8! y iy^3~l6-9JYn\ʺ8FJC*KmM'JlҤ;ן|;.h0 BeLc 8㲆Aw0@#L)AJ*>;{1 [$~SB+B\$^g!n}?!];8{LUZ 1uZA+qp#Ò(>=1[n ~+Oc=[Q~SQR^iuzѫpD0B_Cć!B(u]>̀` Zw犺2ZYv͉C6F^EQO\ e.sߍzVoeۮ˭vl>Ư2spK ]"!O?zBvMⅭnˢbYy,++] &Y?YRE0J|ϳֺQ ]\^\,:FqPny=^%_s~cB:|)0Jk BԥQ/_nA [?~gFѠ?L @)|u``:lkwX?Of!@V%@i^ %])Tgֲq@5[qYQYe~yqΨF@MelGRr#`6@BNaU˼,\\F {vY5G=(8TUi5|߬V7n oG}vvm< DDB{^4v|yVEP\FΦ'0I%޷]J # .F#XUdFAk8ؿvw,8Krnw C~0( jQ?{~b,/ĻբߏF7֛!TȊ`T3q˲hF^EJa9.KY+aZU1vĐpjlwv@qB ٮsZ&"XWEQWQ#b_-Q~!Oo\_ovQSzKUƙV_/ށ֢X*FPjJ94*cA(VVJJu RxwP7E+Fo%,{t ZFcD?,[)-!0Z TO?y8y(nOZ[8dڵ]cvIb|3v(q(1BX[y65Q V@\| ,xы CLÿxM |ݿуikV kx%j*(JJR$N>y" #¡bEBP-GfY1^L#Mt5(9fQG((6q!l 2.A>f90t]ZBIp|'m6^lQۋ:`c}CKPFP(Fah:\<(UMy"?dtGE7뭖@+X``tV%ŽDjMMRj嚚J+XTc w("c ,ƘrUukOowe'EިoUjmFO /' TJ#j5Zjy{c/}IUYrpx10<[ Xk#FjJV#Oy^4jw(tzJC- %$BhEp]-J+Z*0UmbRIUr (G Rgg{BCkkI%`.m{tF` 63/v_})«Wc`1-e7p9m׽NkZUi} P5nvl6K2xLɄ=X֛պ5=׵uUq A6(ղVauC8(*56>gs0;?~`6㸎&Z(.Gmo :C^k}?>/^꣟LꁔHRWHF ,F @ NId@ Ƙx<.0t^}x`:[i:1VAcI!1~Yply4bZ@ee-DY`$%h.a"B[m8E8d΍MζYtiiwGqZ7{?'wmӇ@rOCc!W:p$aS_e^ YrTJI)JiZkZ Ώ:H7|nKMmD]~vrvxtDQǪx2(3u-(;dEVs*)BBH0JðǸCyS%' 2 Ce4\w=9gعvGGJTO?y\~ GA-ZKQF$\bEc灀`n#h%0w)HUweU  vWk#㝁5J[ P* hm<+!w:|OA!FAkQ;3d !=+t%ޡȳ*PUUeRILka9>q(0B yvy5sYoyڨ\rU\ֹun_rL Ya}pA( B Xe JH4ʡ.ZTZBYm!+M:eQ# 3RVr!f \#ŏ(H6GG epLFhEϲ`? /2{JZkT*!B 'o],[f9Pz2=?y'[o7.gy7Z (FS#%(BJJ  &pi@0SX q uZqkmfჃhs((e㺛]8XS5U$s]F"" u/Om Zk!+)eZ+u 5D !oy}ޏ 4 k!0UKAZ; (l'Y]37=^ e I⪮VkTx) @:2|B8wBERn6.$ | RG`ٌ]#~!eYR%[uYUۢu !.Wk_:mvň 4A"h6P_9ںaJV+ ct٭҇/U("89?y$u,]QU% nbun?|y^ׯ)%)F*rxWu]AiER X-KwK# e8 w2k D1NkXVuը|Yr6 Qom%RJ stOզbFzgjX0* hZ{%d\3a4WKJꫲZVA&8},׷o^FF/N܏ܹ,Q5ڭ`CD:^%LH-0 "% wiUc9c@ 5JI g K0rC(LC1vu\\g/,v* C[v"D @8븬nyU@CNQJ0Ƽ;5,Z 5}oWU$iAH0#WڣX$a%~zn"{{ok :=L(&n} dR̛Q|iA[FpnR{.F*) BPW%a DŽRƛ]9lX.GЂ3r:w]cD>( =?"9j_V @e`v:jwaX,Ak"䥃/ï>k\Jɺak-ZKPεPZ`2 $(De.,rW=Ѩb۬}7ȳ8n{ T$[Q{0:QH[3 9g,U+Ujk*)=N)e"cju"[AdYowZ)0KqOO*bz9A6{S0"%Zka1ap1gR.37~X)1?srqJ}F?R*4𪡆0BTVB!V*Qy'7 HhUd]',kaGo:.8IғOPgi'|{ |e }8}:Yf0%6\Q-a"d)kJ[ m[$~7.g4M{qpow1}|YkݔO/O^8;?O&˲t`%B"P^<EVUkLJ4A龸U,ˢȋ~/Z'a"/:+=X$( @#2Kk9S.VyԱ֫xf:4Ƣ67ȟ>W6:d.@HdO=*5^L^'Oom/+F^w2k~ovFíNSk׵O?|A7:qڲw :˲,AvZxݽi<ϊ 0DVN6aX؉4 Y[<Һ(C.nj6iil!"qvE fƶ $CvZV+ƚ~q{NRv~39l9b|hV47_$sM=[,v/g{iv{-3Yk:O=?R:1#Ө "B$a4pӋ(emFQfԋtY`%C]9m1TmkLp۵Y%Aql);abN4p0o։v7=z~'[w4uU>uweG{mZÝuagjNYYd(5yxuy=$b `{{ϞV *NaMlNZ%D,uvw,U3ljw~dZh(YbWN'gg(9I]Y#޻[~sj/`fׂ H3WDgw}L9iE"<=ꣃ;/^OJYJ+G{;g'_|1]gߧN_OQ62G @36ݎ?`gv9>wt0(狹wiǃxRqt3@{Ŋ5HQ[/ntҢV*(N xaeT@D ~j_AM*"^D?;cӓx6N :;xޛxr~j.Jr5܎VJV[Hsw¤߻st1Og(8X)SWu7'eh!PFyWEjml 8׸mZ׺ q@;Gk'p(숶ʆ-2iDx-&&@lƹo2AC#$R2^nGgUVq?|뎺il/ӳQW-kzJlbv̳nǗ^j/v^aA8f뚝0FVv{{6|'=彵*w2^Ch۪PuMJL덆FRx\i04*ʶ;D&ΎBmBV#k\DB_{G`6My=cy09;_Lw0Lv=(˓&iwg6UQ{0M~7b;.gY!+DN;kfcM+wܩ,N'Jb ̦Gh{gX!!iagx8I\^>䓓NgGGѤw6qlt@El0/2omԳa6l{ۈJ(B!=m;a\M?x~ソOTsWz' ɋj^^^÷Q<9X~xǟ}~K6Z/rm[ӟ~< I" Nt딶43Rڹ;&Iokg^UWo~ߏOPE: pdKB{kt:sz[;]%fl:oXoR@kHo!u?Yvw/H, ꦬ/'푯ƺX,Ko|`f7=}|:Q⥉I5+ci6X+!ֻp\~YLׅ1VUJK*`,ki=['g;^ |SJks:o58+0T 3{)ŬP13UtiT>$HB5\pYb‰e>(y%$Bl-kcb<\66ÝeS12Ebyy^Iݒkۺ6PDWW1 c־Y10\j@n&NudQW%3_G"53k/Pl2wzIŖxsF9oo B/1}b+N lYemUOfP̴8D̳:/$N_I@(R^JԂOϧPw>LJ)VFDYᆘo@}:U~|G FEo!ON%v!8BQ`+^zWM bi7˺+P&y\1+yw\ F;w_{$`̵6Ey.80yh_09"WbArމlz$E W55֥Gh ]b$h-qd"Ϛ݈e±JƗ`:mV ~+6x|՝ܯwB^E!i` B@D9_3V(yCdu۲B(M $0d<'DTUnW6׽}=9cM5Y r+QH"j}W Wx^ WxJk:T@ )IENDB`eric4-4.5.18/eric/pixmaps/PaxHeaders.8617/eric_2.ico0000644000175000001440000000007411650745247020051 xustar000000000000000030 atime=1389081057.591723482 30 ctime=1389081086.307724332 eric4-4.5.18/eric/pixmaps/eric_2.ico0000644000175000001440000036254611650745247017616 0ustar00detlevusers00000000000000 P( "ffD"fD"{pmjgfnfDynqyzwvh]xUnTn`{;Ty@Uubz\wakibabOvm"fvbm}u~}g~`ttplme&@q:R{opswsfehbiz"DkyKZw{{}>QM`xxsrf$=p=Stssnfb_\\akD"""DDfD"ZnM_u6M~Yn{{uqi0I}Wnucnmi^daW\Y|DDD""DfffD^oSet~vXrxz~~h*@xVmviqjkon_U~aQulD"""mzftz|`yuqxr|o?Ti|skeqdOp]~l]|m"DzXkl}NYqnunBS^os`vdXyTxdeUoles}vsyofuf"DWcsv|q{Xcq\wt=L]o|{d~jimJd.CWrc|s}}mke[zkDDiuzyrbuw`shwSiVjzL[`skrb{yno:Q;Nkazxu}svoec`egr"|~j}ylXjTjpetSg{q{g{SnypqdiAUsyd|hn{\cspzpog`XzY{`h^vh}"n{qYln~M_]peuQh}QfdzC`Vqbwd~jcE_E]t]yWoüþ`grQ\iOZmSat_k{yvjeUpVr_|okj{Zev`tfy_scw\{xDGL\MTjV]w]iarGWt\p^rSd}atz{ht{t]qYnswUiVij}hmb}UkbyoMa_sr{D"~grXqPe|e0Q>QsutoiKq_=ac}{|Zai@EO9?I=CM=CO6;IMSfDI^AJbKWsXg7HfXiXk]n[j~^lm{hxyvk~cwh}]odsaqbwnpg{i{g{_tjf|ts"Dffb{f8SAPrl}MpeZGr?b]rw{IMT06@-3>6H`MZv9HcXgTbMYu[d{V^rkwXi}cupydsdsbpiwk}j|s}qbqhxoizoq"tuzMsCC*/3#*6+3A9BS;GZ:E[:DZ?I^4?U.9N09N;DZ4=SMZrHUqXgguT_{enckZeL[vYks|e}Lcppsjh{h{iyjyhvo~ql}gyxuDDmaJo+O@aMeyeellL5j?mGiYot~SWa88B)*6 &-!'/%+7+2D3Ke>LjFSqVc~?G_0:Q0;UAOlQ`MYuju]f\mUfXinmkNke`|^x]vdwexgufvsqi[pq|DDytqXuUvFi3S{KiDRlUc~GVsDSpWdP\tJUnBOl3@^P`}GTpiv_kM^ZpUknm`}f`y[pn|n~jyx{`Nn\y_wn~fDDl~uobz~xdY[Jw:W"3R&5%.5&.:"+9#(6!'3.3D3:N29R5?]=Ge@MlIVrQ_{N]wN]zL[xJWpHSmDPj@Mh7EbbsCRo@Lg8D`CUwVm[su{x{rVloprrk~DDyZlr~|r{~qlY}_kurfgQO}XHl$:^*B$0&*6.2?$*9$*;#):38L28O,4M3>Z=HgERpP^{KZu@Qi1@\DSpZhZi?Mf:Hc@PnYkVg]l?MkM^qj~oZsg}sxzYj}nw}nkncgdjbIqFsGpIpCmEi6Ry"2N06K&(3&'2$'3#3/2G*/E+1G27P9@Z8B`MhCQlJZtP^{[lMf*8P6E_>Om@RpPbauM`~EYv]rH[{Xj@SyTkfxsoihoUyLkvukfzi~xpQoDbwGe|D_vAZo?Zp3Rh<_s:bx7_zTyY~Mt?e8^DgKq=d=j.\&U{)V{&Sz-U{0Qv'?Z#4D)3$*3"&0!)0&.8(0>,4I4;P3W2@\7Ea:KgFZwI]y>Ni2@Z;Kf8Kh7Ih4DcK]{bvPddz]ulcZ{QtVyVxUvi`OnHf^rvvxl""r|ybtwmZz6Xi[It)Vp-W|)R|JzDs(Ox6^Dk,W)W,Y7`,V{*Sx'Lq=^%>T.?K!/5,0:#(/ !,/,6C)4C/7H7@S6@W2=V-8O1@[=NlTiJ^{6G\-m!Lr&QzJu&R)R|%ImQoFZwc+Ge-@ZS3Gb6Nn:Qs2Ki&=X@[x-Ig/Ov"Dn.T#H{Cu5[RwY{?`9TG_Ukw"ysk|fJv~ehAtvSo]Pf=rTSHvKv3]x.Ws,Us5b~Dm&D^,?T]3P|=UyUf""fkyhONpqh?tTAs._r>mItCm;f~0\wPy"=V.D,3C"%$""'*)19$.9!0=%7I(=N%>R-G[.GX 6IG`x0Jf6Rl7Qk2E+F[+Me:]f/W%Cu#@jKbDDp~ohnp\aSH{}nj=ny*\h&Tb(Rb&N]!IZ@RDV-VmIo"#  "#!&$"%,0&-*20GS0HT)AN7C.GV,DW,J\#@Q,IV[zSs}8[i2Xk1Zr-Wv;e:k:j3\?^EVu"^plXrrmDjl7af[Mz~?kq8cjP}`bM{N|okCpz;frcFo~.[iKvQ|IsGsIu'Of3Xq&D^3K,( $ %%!# *,".3#073EMGYd0FU*AK5?$?K&AQ+HU5S`0MX(EK1QW@cmMu'O`AS*Oh(Qv(T&Mw:UxiwjzyX:^bTz}V|a9^b?gn>gq0Yb.W`?jt>it9gq:foO~VBo{K|_LRgQh2e~DZ=c{*Kc#@V'7$!"', '",6".9.:5HVkuZaSN~_KTiWo-f)[t%Le#I_&JaFi5Qc-7%)   %')1&2 .91BO.@M 4@/CO,EO#?G&CIOlqKhm&GN@J*R_)R_ BN)K[-Ri!G_=[qbvySnpKgkjr9UZEfl-PU1V`8]h4\f%MY5]j%LT%MV0Zd;fr5_m9gv3bt!Pe(Xo8i,ZsAhAV&McBj~-L\$9D %#%  "(,"(0*29)3;&3<,5"3>+f6].Ws5[o@\kyNdgfD_eJgl;]b6YaOx:fq:ht7frBq~0_i7fn:hq9fp.\f.Yd1[f$7@#:A094@9G(G[!E[1]s2by.Wv2Ww%H`+KYYpxv|K[^l3MS(GL@aiJnvRzBnz>l{1`q1ap,aiAv~:js:hrBowDs}6]h.T^Div5]g1]f.Ub"IZ*N_;Zm3GX220   #"**+.%49(9@,=D"7@#mz;kz3bu/^o;q{I|0_f-YbFs}0^h*S\3V_Eis2Zc;hpFs}7cn.Xe0L[GZeZ]Y %&&* ,40=F0DK1KR2MT*HQ1Q_7Wj.Re.Og,Me,Qj*Lj)Nr<`/Ou%Ac6RlkPbejaOt{U{\oezDRjm^~hGovFoxMvYO=oc]-Vc7]g0Xe,WbZ[@t|0`jDr|ApzIx#LZKwOxCi|=Ve067   "'-#4hUR=j;g#KfPy5[vBfzSkx\w|Xkn^Gq}@my[Aq\Lv?dtgfMzI{VZVDvBsDs5]mZTc'DU,44    "")&5=0AM+BN.O]/Ub*LV2U]7Y`+LU2Wa0Zg0[k,[mGyGvCp9fAnEr@jFfuffkjmpZmxxQAqKv@hv\O{d[]ibAs~=p}4eq7`r>kLd&GZBT_289   ! +1'5="6?'=G1R[7Zc2QZ0MS)CI9=.MR@enEpyGtHwR~O{?l,_uULyPtg}DHkqMzh{sHxGrlsHxa@nyBlxO~EvT_QTjfIz(N`-=366   &*!% %',&:@&>C4MR3JQ6LQ3JM3536Hio@hs2_i-ZeIr{KtO},]nFyfmW}kuNW@mwbkcIx3_hQ{iXL~M~eQHzH}/b{"DZ&6HNV!$"  ),!#  *--=@03+. 05/BG*?D2RX.R\9dkMx1X`DjvIwBrU$Sh.XnGix}fqrfkZ`Iu}9ipj{T~nqcknX~Ky5dl9hpO|N|.^l%Vk)Ul"DY)9% ',,! !  %),0./*)(*,,*77+,,/%6>I]fIdlHjsOu;gq(T[AKNtApzCr`BpMx_zSprom~] PUip7bhMWjXVCmr@pv]N{Lt|Dmu:es:evEl1Nb 2@!.6 $%-"*2 *2$3='7A%8C)3%-!(!$),)64'&*('* /6*;G;RcDdu:\lXd]5_jKsO~SGuFqXcD~Jfjys~YWuOv{Bnrvy`^WDuw_Blq2W[V{?hs>ew.Pd.F['9G&,')"! ),$+*4"/<%7D0CS4KZ2KZ0GV"9A$)!&+67&.- ,*,0!3<>Tc5SgCg{@i|T_dXQ}EwDvJ8Sc:P^*2"&)+$58(:>.EM=\e<\h2Sb.M]4Wh6WfDbq,CM%",&*2;?Vc2N]5Yj=ev,Zh9htfrWO9gv9cmY/R`7YkTk|cPu~IpzQxh|{}i;dkI+3&=C0HM5SX0V[;dk9eo/Xh6\m6[n/Th2Wf>Zg#4@'!+/&5=&:C.GO&BM*HSIm|CivDm{S{]Ly]Do~@G7[cNs\=Wo}z{as|~mnn{ylidvo[HosGrw:bg;cj7[a5[]bqPyj`pDfn@ekVLw}.UZ>diJnt;^`QsuMor1QW+IQ"AJ8DI=T`!8C/fl2V\.OT2V\hAjo,UZ+RW6\`Hkq(JK2RS/KN!:@)DM6B"@L1S_<[i>Yc.EQ&:I1M\*O^2[kBj~Os>`uDdx<[kIeu.IX;XfEev3N]0GX!6G"8H(AR1Q_&JV@K NYJ{GzLxMtGl|EpGz?rMsDÿyr}mfrE@L75@;:C75>02;;ENm{Qxhv7bsN@]k@en-YbDr|L~3btIv2[jGn~M|Q>tR{fqixMJU>iw(N_,K]9WiDat0O_#@QJ2WaLv~&SZR]7htJu*QaEmT/cy.byDj~"{v~ngsrjvQKXGFR75@2.6&#,$-7zqmJkpsY~Fov]PzDp{Jvm_Aeo9Ye/QZ&JSIpz3[d5]f>clMmu:TZ*BG#;B6B#;H1Q_7Xf3Ve2P]2KZ9O]CYg9Ra+O]@hv0Tc%FV.M]4Wf+O]AfsGhw DU8^o@cu5Se5Qc0GX5Q^#BM(LT6\e KQ9fr9frKuBk{MxGt;mIu9YjDD¾xpz`XcMGSOLU@cm^j<[i:Uc,BN)AN&GP?an&GS1S_,R\-Wa LTEO@cp1Ve?dtLn}7Xf7Vd9WbEen9Zc#FM(LT;`igx@k~?n9e{@ewNhuDrmxXU_HBJE>E3,3$(3xjqqotn]Jr{GnwNwFmvFmv+PZCgqUtKnxDhrIpy;cl-U^!FO0S\7U]DdlHnvIs~Mz]Fr~:bm:`j9_hDhr0PY,IT0S\@dn3T]Aeoirnw3_h/Xa2[b*SXFpuYEnvMyNz~XAhm;_d7[aMqy;Zb&CN,Q^8\k)K[*M]7Zh`m,O`.Vh*Sg*Uk,Na=Wfpmy_XeKER..6!'/[fjUyxyrk{cWyQpwMho;R\$:C,CJ+EM3QV:Y\/NO1QT:]`5]aez@fy=aq:^hGovPyMw>gq;^k.Rb2Zn-XlCh9Ug_s}DkfsJDO0.:!'/3=@vjf{u^{hi^~Spwa}QksD^f'BH#CG6V[8Z[3ST&DG:Z`9_c,X[ggN{Bmu6`i2ZeClv,V_/X`Grw@lo.Z\dv=fq?ipXQ|W~>bq+K]2Vi6Zm-I]6MYDzwliu`YeDrL|`fS~:ex:du*Rb=dy\Sv0Mb.EWDUb»Ŀ]ZdNIT>:B,,3%'FQRhr>X\5OU7TXWu{lPotEflMkt@bj?bjHos;dg[OqtAbfNrv0TZ]dHs}al=s9i/]yBpU9cx7bu,Wk?h}KrY|Wtfi5Z^=bdNtx9_c5\cUJzM|`K{imjnsdLt|&PV=itCl{TzhU{Hs{[M}Iv?hsBiyUGyGx0`|CtZO{IwDo:czDkGj?^u"|z>8@-&.+&,#!#%'rzb}A^aMlrQpvGjp6Z`Ipt7^d3X`0U_AhoQ{fT|3Z^MtyGqyCr{^XFuHz;kx=oh>h?bztfOLU71:5-3/*/)#&!"HWYYnqniUvyvVy}>bh3[_XaNwMvP{Ym`Hmq]cDs|VWQ~]WEx?s@t)Zj2`oOyOzJwIwIvN}8cjHu~W[Js*O\.TcIt7dv5cy-[p:j~O]9ixUHtEp9hGmH_ofVZ`A?H;6>0)/)"#&!C=9="$*6BI|pJvwZprom|rlxeC))0HMYyyvh`xhTmU8huN~RItq^psxybIz4cm:ftCq]hjgKwDw>q~To_¿kgstq}NIUNIW)*7#(4^gsetStUdRDrlw}p~WSK{fVdsm^6`k.WaqjZOVBu*ax(]sIUPD@yTGx:l9kMr"OLWges46D%)707CmtLycsahkatEta[sqbPvs}lArco_qknze@cp<\hxtaGNZ7q?v]KLCD=vIM;nEj}_]j<>L67F(*8r{zBnsClt=hrAnvl~o]yZi|O|Ip6]jBhv]hsT__eSJumzmIq<[i"@MU}]6nzX:s@={3i~GzYGDO?|JKNEm"DecpUXf:;G&&1@GQOdkWw}mae`mpuyKuItQ{_cmqk\ighCsFqrxX>jvW|8\f*V_Z4a@sG{9n;qIiwevDiyiFfzYR}egkdRrmeZ9p&Wp8i;j-\mOZBp{iS~Vp~e_lOGV<8D>;HFJVup;_ilW|:^v4YpMr7bs[{VONw{uepKwZPyOw_d@io&NR'OU0YbOyfsDr&Rh*Tr&Mk*Vm*Xh4co.\g,Wi*UkWY-Vjl|leqE@LONZWYejz`xKhtTyWadgkawse_ghwM~nhT]]GtzEnvJr{Js}U~gY*Vf>i~_Gm.Wm*Sc'O_CU2_x._xZ-\u)M_"¿[VaDANRQ[~axNnQz]HtJueiknirr^HukghcZ0_p*[gHvHvWTMwcjWbyS|'Kc FY@O:I*Ma:gKBu;i~\}f_\eYUaihrDfmx?VgOt[3^v.WqNvsj@kk|v@k~_ph\OX9nRDzDuBq7ey7cx:fzV}k/YoCi|=bl,JR&AQ,Mc3]{'[{3fJrD~txrf¼¿}}z|{~LYjAZoPp.Rp,Om7\{KwfErEo@f9^>gGrOy:fIwGvK|NLMIMD~*_yNdUy\^CnJp~#>C&((.&?SDg,V{;e`fzr@g(M>^PxHr?hIj^vDvQiGa>\@bJnNtMtSx^TGs;hO;h@l>i1];i[OCAG,\u"Nc[Z,MeBc{Pt.KS(*!.0!2@)Ic3^-VyKjck]d[d^m`wj`<^=cKsVM`NuV|\^]UJ}NJxMzFp.Y*U;j9o4m,g:r4b2`yNy?e-Li&D[/M^.8)0+80JLpCiGf}D[fyQbxWg8JiZ[zg]Il^fZQVTJz=jR}VMz7f4e6j3iAtAqBuO|Vy"<`#On>TxDY}DZTnEa/O9XGgLk@bp{svrb`TELXkgUF2eD{.e}+J9S_q3>T3Dd5JpE[NcNg:VEcMmKkAbJndy`jjcUSFWST_E6r\BcClhYZkbbcSv=Y6N|Gb_cnc}]nfMC}:r7j3^?f@fKqBg'M C.O7Par=EX&3K2De9MuMaI^DZB\cPqGgGjm[pwytkWO^8sLYF4vf.w:}A{M9l9g Bq$J"7`=U6Q"=wDfPx5_ZU}NvRz\meYx3KzBUOi\}kj\y{sQ]eLR:t>s?nBoWFm9_2Y=z6X3Q2K}(8b%2P%3P?Quz8S+<_.Q1Go9SE_[vNiD`WvX{_siaQUjeQH|VjpX/y9-s9|0p@J?x9k(UOw+R3h+JPq>d7]<^HsYcXTNVZ|0M}/GxVm^vhl]gfihc}u`QB~IDyM}JywB{%Y@t@x&R>pG~;xKZT?vZSY;l&J%CzGlZb\jeeh^.L!9mSi>R@ZV~np{"|jwu]m2],S^Tx`YbL|OQ5iBv[YhOz@i`lClbYUohWaklinZ@n0\:jK{ =o :p=v>{K#YZ.t?SMG@IAx*R:^7dK{ieQ_Zc+Q0i7NYq2IFbarxq"{ub`=k,NCcHkmfT@qid6lH`ZS.YDoIveGuFwKyly^aKpGkkkS>i5Y1UGuGu,U3ZEoLyTR7t2v0v@@}}EH:iGv;kZ;k^RSeJr ,b,D{Un?[/JKkdiuzeW`f7W%CzIkicn\hYCzCyF|`M}DqZKyaBrFwP~q]Z~@cOvmfCk,Tw'Ow*Jv:e"Gu/X3YBjXZif]YF@|5k1f.f;vGH}]RdGvLJT[?u5iI^[w:Y-OQuooxvjksDd0l-MImQ{`]\[hUNiUY5d5bL3cLzmtgSxDk[W-Vy6Z5W}.Pw/Pz#Dl#Fs:_Dk9^F~B-]2c.c@x]Z%WK,_>vDyDyKMWdPJ~Q2X5Q7M&:p8U,R+VIt\ayefch?h&G3V+QGqhiUIRF|3e5d9dZ,[p*\+a)_6kAsTPFvdQ{>kCnSV|^EiCl,[:d/Sy7[6Z@c:Rr,h\9[rB`Lm?bNsSyQtukZP|qiLH_FbIe`ye^~hx^Z|a]}De*J2T]?rD|7l,[OUGk4SSsIn:bHs=b*Bl(I 4Y3Ku=W@\B`FeFeIhLlRoNgYks}c|gq]M7ml0c'^*_GwFsEj>` `?_XwYyiqpnvbIe:\/T>cMu$O"SGyNK}Dn@fbQs9a+WiNtl\|Di%J5WFc!5a/Bk,@l7TNpKrGpJyDsK|Rcm{fndboeetfbnUSZz{AGY`otuVNH~U`hPMDx1`9iNDtGpSy\icJoDfCd4T*Gt9d=]Do>x.QTxV~Zc`Gi=[Ife]y^wt~roR@x;l@lMpKlLjWyTw:n*W"/\0?l/Ev8TKpDpCsMKP`PdnZZ}_]jDAQTQcC=L84<@BM`i~dErYdD|PRh_SRA{,a2jMO|V~QtVvQqC`LjHf1Q*I|+L[]!K9\>^MveX2W.Ijujck~o_M[Q:fKpHl@a<^fpBlEpDkTsJd3NzId3N~/I|B`HlbV1WMpNrbe[\y;Qb{azMij{}rcZH{4cLyKxDn=dPw>dHnGko?X,Z*?o9T?`-XIz@r6kS&]wmisiMgiWoDc@c+J3T8\;` @:Y-PCfW{Zzg+@y)>q6Q;\,WDx>r>q7jQdXZFxO~|`"heodbp;;H +!DN]w]j^XZlhQjRTiC}6k9e<]B]=T(W)>u=UAc,Y7kZHf^|Xu7R3O9\/\=m=lBpUjTBhCkeHvJvK}Lirq|A?L42?;;G@BK$7>E{tdKMXXaUERSg\3b(O&A(9j2?d,:],8_&5`5I|:WHibhhQyfPzFkQ|aEuM{H{Xk"ZYe:8D"$/#&0%%hoYXL}H{M~SGx[UND{`S?nHt=d#?{,:i-6\%1R".O&5^=U@^W{Np\|D_&@vPrptKj.EF]d}yp{zpAP4ATcw||qi[}#7-<(6q+>s2J0J:V[zcBd"F6\?hFoQ{\W~>gJoHr?mThbmDUT^23># &zguQ|LyAnFqN}Q~O~O~PXWcK}My^S}9X&5d(3X.:[$3U.@kB[>^hTxKfG_,CVu`Xx,H,DI`ZshnuxVg29X\||ob/G*7~"a1A|BX0F'@:UjVx"C8]?dGmOu?h+S)PIq8_%NNzmmif"SV`%'0# &XZUAn&O1YJw?jCjIqPyKuQ{MxAm@j@jGp_Fj:a.V3[Aj5Y<\:[ds^fhlr*.4$+`J}R2W>bJo@g8ZIiAb!@+QIpDk7\=fHrGp-K,Dt.Cl3El0Es;UmLopTnEX>SoDaOkg}@T0DYmQdg}ySe=K(5!)o.4zQUqxzsyZcMY_Kq8UA\E`.J.MZ|Fi3SX|S{Nx*N*Gz,Dp8Mx7L}PktqVzvbxH^ipb}rOa3D_5Q;VB[(@{*BSsC_5OVtMn]Ag.S*Er9Mz2FxD]fykh@UF]p[vm`q=M->g{{g~|`vQax(V7W6O'C};[0M4L@X,DyIdD`(A}=WZtKeUxJqGk7SYvszZr9N-@nzWm^y{vpUpD`QnYyRvGp*T3[ ,q!6x;K7D O*T(:xHdGlR{Z?:YC[4Gy.x$@B`1K#8b 6\/[#7h.Gy9V3L~4Gs0=h.@o0K[{ynopD[@X]xnwTm-@SgYnNhrkc~sZ~Z~Eo=g;g+X2Y9*=2A'`J L*@FgKpHnZ6s'G|DX8Ao&,V *S*T3CnYf$1[*SSopXuCZevDvqlf{]WnFB[<:QLJ\nivd`lyxv_1^+R-P,I;X:VGa%e6Z,N7Q2F*7%1u!/l&b2LNpGkPtYz @}:o6I{.7d%K-7`%3^&6e9E\Wbkhtfdq]\iss~sY:e2WA`@\,F2M":k*>pKf5Q3Kz3De0@_"3S!0Q#2P$7X0A`0?\&7V,Dm0MKhLicJfzOe?STh3DUfCQ2DVmehkFeRohB[`{?Y+D}*E0H>W:W-J3t6J#3}$3*;&7%:DbRuA`c@Z%@y3Q7M0Q63@,(4,)30,9NLZWUbNM[zoTNz0R9u!=2p&;lE/U:N{*W0W'5T*E)E+6Q+5L)4Q@Nl;Ic(:U-Eh3P~htQsl_w6K\p0@.97FXpNje`|C^*EQkH`7J6J~%8l,>q$7j 3o(:x&Oq0Dh/@d)7V .K(@!&7!#.')A&*E#,D%4O0GiMi:WIey`}HcjpQhEW5G5M6QDbF^:P)>}!9r*^2e.@v,>s6I{8GxATI]Og8LEZ;SC[6M4H.@0F*F?dHmZu#5s._6H|-G}.Dx.>m-9e(3_5Bs@LLYMYN[:J&8n:OXoayj}{pn}IIW87C34@+,8"",%!34@qZGo(M4p.I0L6Q'V$K3Iq9P{8Mx!2W'6Y;&%12!9 -H2GnB]Sq6R8UdcHgg~fbxF[=V=XVrMgHaB\2M!=o(Cu'Au0L@YKcSlMgYtI^Qj:T@XKe]vPh@X:VAcJl;UV*]L\5N/G}2Fx:Hv*Y".^2SAUObq"bcnJKW??I57B++5&$++6xIw"K5t,G3N.K"=q3`+Am6N}5M&;j6Iu"0R "*+3*2P?N{D][xRoKiQq\|kDeGd\w`z@WIb.GOfQjRmZxQqKk\|GeIhMlRoB^NjNhMg^{SoMi;VKcH^9O/N&H)M:[RhNW2>*<:R2Hz6Gy5Cv)W0Z;GkCQ{@GqbfhitOQ]mo|bdp87C'&0%$-('0"&1sylY$?~1m&:p->p)7e(V#L+R$2V"0W'M&B%;'.A&9"528L&D3IsGbMkQmOiKc/I{@[/I{3J{=S>UOgMgJ_GUx5@[&/J9B]lx|j~i}i{jkgb}c{>S4H6JG^Ib]zOjBX8C/8+059JUK[7G*U!$;(&&767O*.KHKfrpx^aeu{~x{y{ilxDET:9F76A54&>%-E!<"+G'D5*.F9>S2:M%0I*K,;f1Bo.@l+=c+=^CY6Lr"0W+L$.O'E(D/;U,6N*>#*=-0D),<@DYj~r^xQl]v>T?VS4H6JF]C\HcQnGbE^9N0Bx6I{8Gz>Lz # "*31>@?OQTbgns"ijzPQ`OP_OP_EFT66@99@>?B*,,!#&' '6vVkIago[>oAsTNoI^#,Z"(H.6W8DnIZHTnR`}kx}rZs/J|?YIc?VVstftuSTc'(5$&0& &!"$%$$IQ`glrg`wGT=2&.=$8".G*4I )     !')&#,EGR;?I`ipbio !" $%,55>M\fzbpftr}ermz|pi}i{zdxogej`{Qi12?'&1!!&$") (!&&$)!!! (1=NZo>OnAVzZoXkTb)3R %$0#,5(4%.:     ! ))325B-5@(3BNUjuy   $&&+0/4>:@NEPdUbn|gt\ldul|}pi}n|hlJgIhIV@B[cbunm~xyfvxuwOQ]35A..:,+8#",$ & " "#&''"!$.-,  ('6#:90*         !& +:?N+3D&1&    (.2&-6;@P?H`Ubtgvdsk{tkxxi6AfCCY[Xjgfw"`bpFGT<^M\Tgbvl{nuermz{w}s-6R?@L#)2 "&+6(.?'2M7GlD\blezqYkhwn~xm{cqkxw}|;Gl),BDCQQN_jj|z"dds>?M;;I/1;#&."! #('*       $%#"+%"'&&3 !. "37D",  "&0)/>8DaSi]|up^Q{,Hx6&(;,+H;BjYfiyammz{szm{cqkxan$':$&6./=JIZRRcddsZ]kHKX:=G36=&)0#&*! $.-/     ,*0-,5$#%( ++,923@02j#@m 2%1.59Q&;1LTjwsmz\jgtjzammz{iu1[IlAi8a+T:\#6`2'$*37M&*;       ' *&(203A::KGGXIHVMQ]jlxv{kn`dwef{hixhgxb]ohcsRN[E?N0,83/;,*4=;D64=" &%%%  !*"$/)%"" *2@ZEZ} >e5VHmFm[dcAY!@!6.$7#+?     " $.* $.,/:EGR[]pa`wROcddslnz"vzlpnpvvkl|dargbtjcwIDTE@R73B;7D63>>;FDAJ'&. $$$&&&  $$&" )0<5?R3Bb6Nw=\AeOw8[=]Vv[d=Rt2>T5;K)0@!   !&))*,7/1;56ADDWYYohhyfyr}iav[TfHAS62>51=63?.,5,)2"!&! "  )$'3#&2,-912?"$.,.5\7\W{Ih*Aq6Q[~Ps?LZ[hmnuuyyfvpph}UMaYSb95DA>K73@<9CA@GGEJ536,+.!    %)%'2%'0"%.&,0&+6(.;9@Z'4X'=kHfKlFfUnCWW!2  %(*+7==GHIVKKXeftehxy|c]pQK_ZUhD?SNJ\MHWOKXDAN;:C54<,*1**/(&-"#($%#('&+0/3('*     !  %./9*.=&?,7X5GpBZRm?U~4Eg6@`"*E.Me2>Q .    '*3/07&(2)*677Acfq~futyhftgesliySPaEASB>QFCSA>K:8D;:B/.6(&-% (.,5*'01.80.6,+00.3   #!!),0<+0B;D\+7U,;H>=F007               # %"(&%.*(2,.934@>?LefqDghspo~zzRR`SSa<76C<!               !%# *%$.! *$#-02>ACO<=G;;H[]hsvwyWYfYXgPPbDCSCCVCAT;:I54D..< %                "("*! *&%/'&1-,722>/0=/0==>Lhjx~``o\YjsqZWmXUk=:N>LSVeHMZHKXY[iz~"|~MJXEBN32=+)5* '#%+            !--2;;@')1!*9;D/2:/1;,,:=>L@@OTUd~DKHXMIZ>;JDAO64@**5,,3(*0#"&*    %+,2,.569ABENX\fehryzrtcdrWYffhvfDMK\B>Q?K>$%.&)1**2 " &#  ! " %&& "*LOXWYe`bnyzf""tvJIXGEVrqccp\[hHGTAAM::D*,669A (& &&(.%    "" #$ "')+045>,.5.3:?L9:F\_h55@$#,&$*(2$#,#!" !"& &-0602;9F36A/1;+,702<==Gnqz25>23<@@G,,3#"+))365>54<+*2+,3..6DCKSU_=@H8:D<>H`cow{"DloxVXd67D02?67D34@<=KprUVc;:FDBN>>H'(2))4;:DCDM98D33?22<>=IZ]ekoyDGSDHSKOX"jnxDGU<>L78I78KTUi``rcet[\iDFRcdoRR_66B@BMIISFHS@ANHIVCDNnrSWc^bnoq}f󈵷cdrUVeJIZWWkKJ[ffxbcqbdpyzQS^EGSJKVoq}CER=@K@DOLOZjmyDfD"pqTUdpq\]l]^mptaeqZ]kuyOR`RUcPSaGKVfffefutufgu}qufjvrv`cqZ^heiu""}rtxz~w|ffDDDf"D"DffDf"""??@p?????? ?????????? ?H@?  x????@?` ????À  ? ??;eric4-4.5.18/eric/PaxHeaders.8617/eric4_configure.pyw0000644000175000001440000000013212261012652020316 xustar000000000000000030 mtime=1388582314.984114875 30 atime=1389081057.637723484 30 ctime=1389081086.307724332 eric4-4.5.18/eric/eric4_configure.pyw0000644000175000001440000000021512261012652020046 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2010 - 2014 Detlev Offenbach # from eric4_configure import main main() eric4-4.5.18/eric/PaxHeaders.8617/E4Gui0000644000175000001440000000013212262730776015365 xustar000000000000000030 mtime=1389081086.300724332 30 atime=1389081086.305724332 30 ctime=1389081086.315724332 eric4-4.5.18/eric/E4Gui/0000755000175000001440000000000012262730776015174 5ustar00detlevusers00000000000000eric4-4.5.18/eric/E4Gui/PaxHeaders.8617/E4LineEdit.py0000644000175000001440000000013212261012647017667 xustar000000000000000030 mtime=1388582311.795074469 30 atime=1389081057.661723488 30 ctime=1389081086.307724332 eric4-4.5.18/eric/E4Gui/E4LineEdit.py0000644000175000001440000000375312261012647017431 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing specialized line edits. """ from PyQt4.QtCore import QString, Qt from PyQt4.QtGui import QLineEdit, QStyleOptionFrameV2, QStyle, QPainter, QPalette class E4LineEdit(QLineEdit): """ Class implementing a line edit widget showing some inactive text. """ def __init__(self, parent = None, inactiveText = QString()): """ Constructor @param parent reference to the parent widget (QWidget) @param inactiveText text to be shown on inactivity (string or QString) """ QLineEdit.__init__(self, parent) self.__inactiveText = QString(inactiveText) def inactiveText(self): """ Public method to get the inactive text. return inactive text (QString) """ return QString(self.__inactiveText) def setInactiveText(self, inactiveText): """ Public method to set the inactive text. @param inactiveText text to be shown on inactivity (string or QString) """ self.__inactiveText = QString(inactiveText) self.update() def paintEvent(self, evt): """ Protected method handling a paint event. @param evt reference to the paint event (QPaintEvent) """ QLineEdit.paintEvent(self, evt) if self.text().isEmpty() and \ not self.__inactiveText.isEmpty() and \ not self.hasFocus(): panel = QStyleOptionFrameV2() self.initStyleOption(panel) textRect = \ self.style().subElementRect(QStyle.SE_LineEditContents, panel, self) textRect.adjust(2, 0, 0, 0) painter = QPainter(self) painter.setPen(self.palette().brush(QPalette.Disabled, QPalette.Text).color()) painter.drawText(textRect, Qt.AlignLeft | Qt.AlignVCenter, self.__inactiveText) eric4-4.5.18/eric/E4Gui/PaxHeaders.8617/E4Led.py0000644000175000001440000000013212261012647016676 xustar000000000000000030 mtime=1388582311.800074533 30 atime=1389081057.661723488 30 ctime=1389081086.307724332 eric4-4.5.18/eric/E4Gui/E4Led.py0000644000175000001440000001742412261012647016440 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing a LED widget. It was inspired by KLed. """ from PyQt4.QtGui import * from PyQt4.QtCore import * E4LedRectangular = 0 E4LedCircular = 1 class E4Led(QWidget): """ Class implementing a LED widget. """ def __init__(self, parent = None, color = None, shape = E4LedCircular, rectRatio = 1): """ Constructor @param parent reference to parent widget (QWidget) @param color color of the LED (QColor) @param shape shape of the LED (E4LedCircular, E4LedRectangular) @param rectRation ratio width to height, if shape is rectangular (float) """ QWidget.__init__(self, parent) if color is None: color = QColor("green") self.__led_on = True self.__dark_factor = 300 self.__offcolor = color.dark(self.__dark_factor) self.__led_color = color self.__framedLed = True self.__shape = shape self.__rectRatio = rectRatio self.setColor(color) def paintEvent(self, evt): """ Protected slot handling the paint event. @param evt paint event object (QPaintEvent) @exception TypeError The E4Led has an unsupported shape type. """ if self.__shape == E4LedCircular: self.__paintRound() elif self.__shape == E4LedRectangular: self.__paintRectangular() else: raise TypeError("Unsupported shape type for E4Led.") def __getBestRoundSize(self): """ Private method to calculate the width of the LED. @return new width of the LED (integer) """ width = min(self.width(), self.height()) width -= 2 # leave one pixel border return width > -1 and width or 0 def __paintRound(self): """ Private method to paint a round raised LED. """ # Initialize coordinates, width and height of the LED width = self.__getBestRoundSize() # Calculate the gradient for the LED wh = width / 2 color = self.__led_on and self.__led_color or self.__offcolor gradient = QRadialGradient(wh, wh, wh, 0.8 * wh, 0.8 * wh) gradient.setColorAt(0.0, color.light(200)) gradient.setColorAt(0.6, color) if self.__framedLed: gradient.setColorAt(0.9, color.dark()) gradient.setColorAt(1.0, self.palette().color(QPalette.Dark)) else: gradient.setColorAt(1.0, color.dark()) # now do the drawing paint = QPainter(self) paint.setRenderHint(QPainter.Antialiasing, True) paint.setBrush(QBrush(gradient)) paint.setPen(Qt.NoPen) paint.drawEllipse(1, 1, width, width) paint.end() def __paintRectangular(self): """ Private method to paint a rectangular raised LED. """ # Initialize coordinates, width and height of the LED width = self.height() * self.__rectRatio left = max(0, int((self.width() - width) / 2) - 1) right = min(int((self.width() + width) / 2), self.width()) height = self.height() # now do the drawing painter = QPainter(self) painter.setRenderHint(QPainter.Antialiasing, True) color = self.__led_on and self.__led_color or self.__offcolor painter.setPen(color.light(200)) painter.drawLine(left, 0, left, height - 1) painter.drawLine(left + 1, 0, right - 1, 0) if self.__framedLed: painter.setPen(self.palette().color(QPalette.Dark)) else: painter.setPen(color.dark()) painter.drawLine(left + 1, height - 1, right - 1, height - 1) painter.drawLine(right - 1, 1, right - 1, height - 1) painter.fillRect(left + 1, 1, right - 2, height - 2, QBrush(color)) painter.end() def isOn(self): """ Public method to return the LED state. @return flag indicating the light state (boolean) """ return self.__led_on def shape(self): """ Public method to return the LED shape. @return LED shape (E4LedCircular, E4LedRectangular) """ return self.__shape def ratio(self): """ Public method to return the LED rectangular ratio (width / height). @return LED rectangular ratio (float) """ return self.__rectRatio def color(self): """ Public method to return the LED color. @return color of the LED (QColor) """ return self.__led_color def setOn(self, state): """ Public method to set the LED to on. @param state new state of the LED (boolean) """ if self.__led_on != state: self.__led_on = state self.update() def setShape(self, shape): """ Public method to set the LED shape. @param shape new LED shape (E4LedCircular, E4LedRectangular) """ if self.__shape != shape: self.__shape = shape self.update() def setRatio(self, ratio): """ Public method to set the LED rectangular ratio (width / height). @param ratio new LED rectangular ratio (float) """ if self.__rectRatio != ratio: self.__rectRatio = ratio self.update() def setColor(self, color): """ Public method to set the LED color. @param color color for the LED (QColor) """ if self.__led_color != color: self.__led_color = color self.__offcolor = color.dark(self.__dark_factor) self.update() def setDarkFactor(self, darkfactor): """ Public method to set the dark factor. @param darkfactor value to set for the dark factor (integer) """ if self.__dark_factor != darkfactor: self.__dark_factor = darkfactor self.__offcolor = self.__led_color.dark(darkfactor) self.update() def darkFactor(self): """ Public method to return the dark factor. @return the current dark factor (integer) """ return self.__dark_factor def toggle(self): """ Public slot to toggle the LED state. """ self.setOn(not self.__led_on) def on(self): """ Public slot to set the LED to on. """ self.setOn(True) def off(self): """ Public slot to set the LED to off. """ self.setOn(False) def setFramed(self, framed): """ Public slot to set the __framedLed attribute. @param framed flag indicating the framed state (boolean) """ if self.__framedLed != framed: self.__framedLed = framed self.__off_map = None self.__on_map = None self.update() def isFramed(self): """ Public method to return the framed state. @return flag indicating the current framed state (boolean) """ return self.__framedLed def sizeHint(self): """ Public method to give a hint about our desired size. @return size hint (QSize) """ return QSize(18, 18) def minimumSizeHint(self): """ Public method to give a hint about our minimum size. @return size hint (QSize) """ return QSize(18, 18) eric4-4.5.18/eric/E4Gui/PaxHeaders.8617/E4ListView.py0000644000175000001440000000013112261012647017737 xustar000000000000000029 mtime=1388582311.80307457 30 atime=1389081057.669723488 30 ctime=1389081086.307724332 eric4-4.5.18/eric/E4Gui/E4ListView.py0000644000175000001440000000341512261012647017475 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing specialized list views. """ from PyQt4.QtCore import Qt from PyQt4.QtGui import QListView, QItemSelectionModel class E4ListView(QListView): """ Class implementing a list view supporting removal of entries. """ def keyPressEvent(self, evt): """ Protected method implementing special key handling. @param evt reference to the event (QKeyEvent) """ if evt.key() in [Qt.Key_Delete, Qt.Key_Backspace] and \ self.model() is not None: self.removeSelected() evt.setAccepted(True) else: QListView.keyPressEvent(self, evt) def removeSelected(self): """ Public method to remove the selected entries. """ if self.model() is None or self.selectionModel() is None: # no models available return row = 0 selectedRows = self.selectionModel().selectedRows() for selectedRow in reversed(selectedRows): row = selectedRow.row() self.model().removeRow(row, self.rootIndex()) idx = self.model().index(row, 0, self.rootIndex()) if not idx.isValid(): idx = self.model().index(row - 1, 0, self.rootIndex()) self.selectionModel().select(idx, QItemSelectionModel.SelectCurrent | QItemSelectionModel.Rows) self.setCurrentIndex(idx) def removeAll(self): """ Public method to clear the view. """ if self.model() is not None: self.model().removeRows(0, self.model().rowCount(self.rootIndex()), self.rootIndex()) eric4-4.5.18/eric/E4Gui/PaxHeaders.8617/E4TabWidget.py0000644000175000001440000000013212261012647020044 xustar000000000000000030 mtime=1388582311.806074609 30 atime=1389081057.669723488 30 ctime=1389081086.307724332 eric4-4.5.18/eric/E4Gui/E4TabWidget.py0000644000175000001440000002526112261012647017604 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2005 - 2014 Detlev Offenbach # """ Module implementing a TabWidget class substituting QTabWidget. """ from PyQt4.QtGui import QTabWidget, QTabBar, QApplication, QDrag, QStyle, QLabel, QMovie from PyQt4.QtCore import Qt, SIGNAL, QPoint, QMimeData, QByteArray class E4WheelTabBar(QTabBar): """ Class implementing a tab bar class substituting QTabBar to support wheel events. """ def __init__(self, parent = None): """ Constructor @param parent reference to the parent widget (QWidget) """ QTabBar.__init__(self, parent) self._tabWidget = parent def wheelEvent(self, event): """ Protected slot to support wheel events. @param reference to the wheel event (QWheelEvent) """ try: if event.delta() > 0: self._tabWidget.prevTab() else: self._tabWidget.nextTab() event.accept() except AttributeError: pass class E4DnDTabBar(E4WheelTabBar): """ Class implementing a tab bar class substituting QTabBar. @signal tabMoveRequested(int, int) emitted to signal a tab move request giving the old and new index position """ def __init__(self, parent = None): """ Constructor @param parent reference to the parent widget (QWidget) """ E4WheelTabBar.__init__(self, parent) self.setAcceptDrops(True) self.__dragStartPos = QPoint() def mousePressEvent(self, event): """ Protected method to handle mouse press events. @param event reference to the mouse press event (QMouseEvent) """ if event.button() == Qt.LeftButton: self.__dragStartPos = QPoint(event.pos()) E4WheelTabBar.mousePressEvent(self, event) def mouseMoveEvent(self, event): """ Protected method to handle mouse move events. @param event reference to the mouse move event (QMouseEvent) """ if event.buttons() == Qt.MouseButtons(Qt.LeftButton) and \ (event.pos() - self.__dragStartPos).manhattanLength() > \ QApplication.startDragDistance(): drag = QDrag(self) mimeData = QMimeData() index = self.tabAt(event.pos()) mimeData.setText(self.tabText(index)) mimeData.setData("action", "tab-reordering") mimeData.setData("tabbar-id", str(id(self))) drag.setMimeData(mimeData) drag.exec_() E4WheelTabBar.mouseMoveEvent(self, event) def dragEnterEvent(self, event): """ Protected method to handle drag enter events. @param event reference to the drag enter event (QDragEnterEvent) """ mimeData = event.mimeData() formats = mimeData.formats() if formats.contains("action") and \ mimeData.data("action") == "tab-reordering" and \ formats.contains("tabbar-id") and \ long(mimeData.data("tabbar-id")) == id(self): event.acceptProposedAction() E4WheelTabBar.dragEnterEvent(self, event) def dropEvent(self, event): """ Protected method to handle drop events. @param event reference to the drop event (QDropEvent) """ fromIndex = self.tabAt(self.__dragStartPos) toIndex = self.tabAt(event.pos()) if fromIndex != toIndex: self.emit(SIGNAL("tabMoveRequested(int, int)"), fromIndex, toIndex) event.acceptProposedAction() E4WheelTabBar.dropEvent(self, event) class E4TabWidget(QTabWidget): """ Class implementing a tab widget class substituting QTabWidget. It provides slots to show the previous and next tab and give them the input focus and it allows to have a context menu for the tabs. @signal customTabContextMenuRequested(const QPoint & point, int index) emitted when a context menu for a tab is requested """ def __init__(self, parent = None, dnd = False): """ Constructor @param parent reference to the parent widget (QWidget) @keyparam dnd flag indicating the support for Drag & Drop (boolean) """ QTabWidget.__init__(self, parent) if dnd: if not hasattr(self, 'setMovable'): self.__tabBar = E4DnDTabBar(self) self.connect(self.__tabBar, SIGNAL("tabMoveRequested(int, int)"), self.moveTab) self.setTabBar(self.__tabBar) else: self.__tabBar = E4WheelTabBar(self) self.setTabBar(self.__tabBar) self.setMovable(True) else: self.__tabBar = E4WheelTabBar(self) self.setTabBar(self.__tabBar) self.__lastCurrentIndex = -1 self.__currentIndex = -1 self.connect(self, SIGNAL("currentChanged(int)"), self.__currentChanged) def __currentChanged(self, index): """ Private slot to handle the currentChanged signal. @param index index of the current tab """ if index == -1: self.__lastCurrentIndex = -1 else: self.__lastCurrentIndex = self.__currentIndex self.__currentIndex = index def switchTab(self): """ Public slot used to switch between the current and the previous current tab. """ if self.__lastCurrentIndex == -1 or self.__currentIndex == -1: return self.setCurrentIndex(self.__lastCurrentIndex) self.currentWidget().setFocus() def nextTab(self): """ Public slot used to show the next tab. """ ind = self.currentIndex() + 1 if ind == self.count(): ind = 0 self.setCurrentIndex(ind) self.currentWidget().setFocus() def prevTab(self): """ Public slot used to show the previous tab. """ ind = self.currentIndex() - 1 if ind == -1: ind = self.count() - 1 self.setCurrentIndex(ind) self.currentWidget().setFocus() def setTabContextMenuPolicy(self, policy): """ Public method to set the context menu policy of the tab. @param policy context menu policy to set (Qt.ContextMenuPolicy) """ self.tabBar().setContextMenuPolicy(policy) if policy == Qt.CustomContextMenu: self.connect(self.tabBar(), SIGNAL("customContextMenuRequested(const QPoint &)"), self.__handleTabCustomContextMenuRequested) else: self.disconnect(self.tabBar(), SIGNAL("customContextMenuRequested(const QPoint &)"), self.__handleTabCustomContextMenuRequested) def __handleTabCustomContextMenuRequested(self, point): """ Private slot to handle the context menu request for the tabbar. @param point point the context menu was requested (QPoint) """ _tabbar = self.tabBar() for index in range(_tabbar.count()): rect = _tabbar.tabRect(index) if rect.contains(point): self.emit(SIGNAL("customTabContextMenuRequested(const QPoint &, int)"), _tabbar.mapToParent(point), index) break def selectTab(self, pos): """ Public method to get the index of a tab given a position. @param pos position determining the tab index (QPoint) @return index of the tab (integer) """ _tabbar = self.tabBar() for index in range(_tabbar.count()): rect = _tabbar.tabRect(index) if rect.contains(pos): return index return -1 def moveTab(self, curIndex, newIndex): """ Public method to move a tab to a new index. @param curIndex index of tab to be moved (integer) @param newIndex index the tab should be moved to (integer) """ # step 1: save the tab data of tab to be moved toolTip = self.tabToolTip(curIndex) text = self.tabText(curIndex) icon = self.tabIcon(curIndex) whatsThis = self.tabWhatsThis(curIndex) widget = self.widget(curIndex) curWidget = self.currentWidget() # step 2: move the tab self.removeTab(curIndex) self.insertTab(newIndex, widget, icon, text) # step 3: set the tab data again self.setTabToolTip(newIndex, toolTip) self.setTabWhatsThis(newIndex, whatsThis) # step 4: set current widget self.setCurrentWidget(curWidget) def __freeSide(self): """ Private method to determine the free side of a tab. @return free side (QTabBar.ButtonPosition) """ side = self.__tabBar.style().styleHint(QStyle.SH_TabBar_CloseButtonPosition, None, None, None) if side == QTabBar.LeftSide: side = QTabBar.RightSide else: side = QTabBar.LeftSide return side def animationLabel(self, index, animationFile): """ Public slot to set an animated icon. @param index tab index (integer) @param animationFile name of the file containing the animation (string) @return reference to the created label (QLabel) """ if index == -1: return None if hasattr(self.__tabBar, 'setTabButton'): side = self.__freeSide() animation = QLabel(self) if animationFile and not animation.movie(): movie = QMovie(animationFile, QByteArray(), animation) movie.setSpeed(50) animation.setMovie(movie) movie.start() self.__tabBar.setTabButton(index, side, None) self.__tabBar.setTabButton(index, side, animation) return animation else: return None def resetAnimation(self, index): """ Public slot to reset an animated icon. @param index tab index (integer) """ if index == -1: return None if hasattr(self.__tabBar, 'tabButton'): side = self.__freeSide() animation = self.__tabBar.tabButton(index, side) if animation is not None: animation.movie().stop() self.__tabBar.setTabButton(index, side, None) del animation eric4-4.5.18/eric/E4Gui/PaxHeaders.8617/E4SqueezeLabels.py0000644000175000001440000000013212261012647020736 xustar000000000000000030 mtime=1388582311.814074711 30 atime=1389081057.669723488 30 ctime=1389081086.307724332 eric4-4.5.18/eric/E4Gui/E4SqueezeLabels.py0000644000175000001440000000751012261012647020473 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2008 - 2014 Detlev Offenbach # """ Module implementing labels that squeeze their contents to fit the size of the label. """ from PyQt4.QtCore import Qt, QString from PyQt4.QtGui import QLabel from Utilities import compactPath class E4SqueezeLabel(QLabel): """ Class implementing a label that squeezes its contents to fit its size. """ def __init__(self, parent = None): """ Constructor @param parent reference to the parent Widget (QWidget) """ QLabel.__init__(self, parent) self.__text = '' self.__elided = '' def paintEvent(self, event): """ Protected method called when some painting is required. @param event reference to the paint event (QPaintEvent) """ fm = self.fontMetrics() if fm.width(self.__text) > self.contentsRect().width(): self.__elided = fm.elidedText(self.text(), Qt.ElideMiddle, self.width()) QLabel.setText(self, self.__elided) else: QLabel.setText(self, self.__text) QLabel.paintEvent(self, event) def setText(self, txt): """ Public method to set the label's text. @param txt the text to be shown (string or QString) """ self.__text = txt QLabel.setText(self, self.__text) class E4SqueezeLabelPath(QLabel): """ Class implementing a label showing a file path compacted to fit its size. """ def __init__(self, parent = None): """ Constructor @param parent reference to the parent Widget (QWidget) """ QLabel.__init__(self, parent) self.__path = '' self.__surrounding = QString("%1") def setSurrounding(self, surrounding): """ Public method to set the surrounding of the path string. @param surrounding the a string containg placeholders for the path (QString) """ self.__surrounding = surrounding QLabel.setText(self, self.__surrounding.arg(self.__path)) def setPath(self, path): """ Public method to set the path of the label. @param path path to be shown (string or QString) """ self.__path = path QLabel.setText(self, self.__surrounding.arg(self.__path)) def setTextPath(self, surrounding, path): """ Public method to set the surrounding and the path of the label. @param surrounding the a string containg placeholders for the path (QString) @param path path to be shown (string or QString) """ self.__surrounding = surrounding self.__path = path QLabel.setText(self, self.__surrounding.arg(self.__path)) def paintEvent(self, event): """ Protected method called when some painting is required. @param event reference to the paint event (QPaintEvent) """ fm = self.fontMetrics() if fm.width(self.__surrounding.arg(self.__path)) > self.contentsRect().width(): QLabel.setText(self, self.__surrounding.arg(compactPath(unicode(self.__path), self.contentsRect().width(), self.length)) ) else: QLabel.setText(self, self.__surrounding.arg(self.__path)) QLabel.paintEvent(self, event) def length(self, txt): """ Public method to return the length of a text in pixels. @param txt text to calculate the length for after wrapped (string or QString) @return length of the wrapped text in pixels (integer) """ return self.fontMetrics().width(self.__surrounding.arg(txt)) eric4-4.5.18/eric/E4Gui/PaxHeaders.8617/E4SideBar.py0000644000175000001440000000013212261012647017503 xustar000000000000000030 mtime=1388582311.828074889 30 atime=1389081057.669723488 30 ctime=1389081086.307724332 eric4-4.5.18/eric/E4Gui/E4SideBar.py0000644000175000001440000005622612261012647017250 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2008 - 2014 Detlev Offenbach # """ Module implementing a sidebar class. """ from PyQt4.QtCore import SIGNAL, SLOT, QEvent, QSize, Qt, QByteArray, \ QDataStream, QIODevice, QTimer from PyQt4.QtGui import QTabBar, QWidget, QStackedWidget, QBoxLayout, QToolButton, \ QSizePolicy from KdeQt.KQApplication import e4App import UI.PixmapCache class E4SideBar(QWidget): """ Class implementing a sidebar with a widget area, that is hidden or shown, if the current tab is clicked again. """ Version = 1 North = 0 East = 1 South = 2 West = 3 def __init__(self, orientation = None, delay = 200, parent = None): """ Constructor @param orientation orientation of the sidebar widget (North, East, South, West) @param delay value for the expand/shrink delay in milliseconds (integer) @param parent parent widget (QWidget) """ QWidget.__init__(self, parent) self.__tabBar = QTabBar() self.__tabBar.setDrawBase(True) self.__tabBar.setShape(QTabBar.RoundedNorth) self.__tabBar.setUsesScrollButtons(True) self.__tabBar.setDrawBase(False) self.__stackedWidget = QStackedWidget(self) self.__stackedWidget.setContentsMargins(0, 0, 0, 0) self.__autoHideButton = QToolButton() self.__autoHideButton.setCheckable(True) self.__autoHideButton.setIcon(UI.PixmapCache.getIcon("autoHideOff.png")) self.__autoHideButton.setChecked(True) self.__autoHideButton.setToolTip( self.trUtf8("Deselect to activate automatic collapsing")) self.barLayout = QBoxLayout(QBoxLayout.LeftToRight) self.barLayout.setMargin(0) self.layout = QBoxLayout(QBoxLayout.TopToBottom) self.layout.setMargin(0) self.layout.setSpacing(0) self.barLayout.addWidget(self.__autoHideButton) self.barLayout.addWidget(self.__tabBar) self.layout.addLayout(self.barLayout) self.layout.addWidget(self.__stackedWidget) self.setLayout(self.layout) # initialize the delay timer self.__actionMethod = None self.__delayTimer = QTimer(self) self.__delayTimer.setSingleShot(True) self.__delayTimer.setInterval(delay) self.connect(self.__delayTimer, SIGNAL("timeout()"), self.__delayedAction) self.__minimized = False self.__minSize = 0 self.__maxSize = 0 self.__bigSize = QSize() self.splitter = None self.splitterSizes = [] self.__hasFocus = False # flag storing if this widget or any child has the focus self.__autoHide = False self.__tabBar.installEventFilter(self) self.__orientation = E4SideBar.North if orientation is None: orientation = E4SideBar.North self.setOrientation(orientation) self.connect(self.__tabBar, SIGNAL("currentChanged(int)"), self.__stackedWidget, SLOT("setCurrentIndex(int)")) self.connect(e4App(), SIGNAL("focusChanged(QWidget*, QWidget*)"), self.__appFocusChanged) self.connect(self.__autoHideButton, SIGNAL("toggled(bool)"), self.__autoHideToggled) def setSplitter(self, splitter): """ Public method to set the splitter managing the sidebar. @param splitter reference to the splitter (QSplitter) """ self.splitter = splitter self.connect(self.splitter, SIGNAL("splitterMoved(int, int)"), self.__splitterMoved) self.splitter.setChildrenCollapsible(False) index = self.splitter.indexOf(self) self.splitter.setCollapsible(index, False) def __splitterMoved(self, pos, index): """ Private slot to react on splitter moves. @param pos new position of the splitter handle (integer) @param index index of the splitter handle (integer) """ if self.splitter: self.splitterSizes = self.splitter.sizes() def __delayedAction(self): """ Private slot to handle the firing of the delay timer. """ if self.__actionMethod is not None: self.__actionMethod() def setDelay(self, delay): """ Public method to set the delay value for the expand/shrink delay in milliseconds. @param delay value for the expand/shrink delay in milliseconds (integer) """ self.__delayTimer.setInterval(delay) def delay(self): """ Public method to get the delay value for the expand/shrink delay in milliseconds. @return value for the expand/shrink delay in milliseconds (integer) """ return self.__delayTimer.interval() def __cancelDelayTimer(self): """ Private method to cancel the current delay timer. """ self.__delayTimer.stop() self.__actionMethod = None def shrink(self): """ Public method to record a shrink request. """ self.__delayTimer.stop() self.__actionMethod = self.__shrinkIt self.__delayTimer.start() def __shrinkIt(self): """ Private method to shrink the sidebar. """ self.__minimized = True self.__bigSize = self.size() if self.__orientation in [E4SideBar.North, E4SideBar.South]: self.__minSize = self.minimumSizeHint().height() self.__maxSize = self.maximumHeight() else: self.__minSize = self.minimumSizeHint().width() self.__maxSize = self.maximumWidth() if self.splitter: self.splitterSizes = self.splitter.sizes() self.__stackedWidget.hide() if self.__orientation in [E4SideBar.North, E4SideBar.South]: self.setFixedHeight(self.__tabBar.minimumSizeHint().height()) else: self.setFixedWidth(self.__tabBar.minimumSizeHint().width()) self.__actionMethod = None def expand(self): """ Private method to record a expand request. """ self.__delayTimer.stop() self.__actionMethod = self.__expandIt self.__delayTimer.start() def __expandIt(self): """ Public method to expand the sidebar. """ self.__minimized = False self.__stackedWidget.show() self.resize(self.__bigSize) if self.__orientation in [E4SideBar.North, E4SideBar.South]: minSize = max(self.__minSize, self.minimumSizeHint().height()) self.setMinimumHeight(minSize) self.setMaximumHeight(self.__maxSize) else: minSize = max(self.__minSize, self.minimumSizeHint().width()) self.setMinimumWidth(minSize) self.setMaximumWidth(self.__maxSize) if self.splitter: self.splitter.setSizes(self.splitterSizes) self.__actionMethod = None def isMinimized(self): """ Public method to check the minimized state. @return flag indicating the minimized state (boolean) """ return self.__minimized def isAutoHiding(self): """ Public method to check, if the auto hide function is active. @return flag indicating the state of auto hiding (boolean) """ return self.__autoHide def eventFilter(self, obj, evt): """ Protected method to handle some events for the tabbar. @param obj reference to the object (QObject) @param evt reference to the event object (QEvent) @return flag indicating, if the event was handled (boolean) """ if obj == self.__tabBar: if evt.type() == QEvent.MouseButtonPress: pos = evt.pos() for i in range(self.__tabBar.count()): if self.__tabBar.tabRect(i).contains(pos): break if i == self.__tabBar.currentIndex(): if self.isMinimized(): self.expand() else: self.shrink() return True elif self.isMinimized(): self.expand() elif evt.type() == QEvent.Wheel and not self.__stackedWidget.isHidden(): if evt.delta() > 0: self.prevTab() else: self.nextTab() return True return QWidget.eventFilter(self, obj, evt) def addTab(self, widget, iconOrLabel, label = None): """ Public method to add a tab to the sidebar. @param widget reference to the widget to add (QWidget) @param iconOrLabel reference to the icon or the labeltext of the tab (QIcon, string or QString) @param label the labeltext of the tab (string or QString) (only to be used, if the second parameter is a QIcon) """ if label: index = self.__tabBar.addTab(iconOrLabel, label) self.__tabBar.setTabToolTip(index, label) else: index = self.__tabBar.addTab(iconOrLabel) self.__tabBar.setTabToolTip(index, iconOrLabel) self.__stackedWidget.addWidget(widget) if self.__orientation in [E4SideBar.North, E4SideBar.South]: self.__minSize = self.minimumSizeHint().height() else: self.__minSize = self.minimumSizeHint().width() def insertTab(self, index, widget, iconOrLabel, label = None): """ Public method to insert a tab into the sidebar. @param index the index to insert the tab at (integer) @param widget reference to the widget to insert (QWidget) @param iconOrLabel reference to the icon or the labeltext of the tab (QIcon, string or QString) @param label the labeltext of the tab (string or QString) (only to be used, if the second parameter is a QIcon) """ if label: index = self.__tabBar.insertTab(index, iconOrLabel, label) self.__tabBar.setTabToolTip(index, label) else: index = self.__tabBar.insertTab(index, iconOrLabel) self.__tabBar.setTabToolTip(index, iconOrLabel) self.__stackedWidget.insertWidget(index, widget) if self.__orientation in [E4SideBar.North, E4SideBar.South]: self.__minSize = self.minimumSizeHint().height() else: self.__minSize = self.minimumSizeHint().width() def removeTab(self, index): """ Public method to remove a tab. @param index the index of the tab to remove (integer) """ self.__stackedWidget.removeWidget(self.__stackedWidget.widget(index)) self.__tabBar.removeTab(index) if self.__orientation in [E4SideBar.North, E4SideBar.South]: self.__minSize = self.minimumSizeHint().height() else: self.__minSize = self.minimumSizeHint().width() def clear(self): """ Public method to remove all tabs. """ while self.count() > 0: self.removeTab(0) def prevTab(self): """ Public slot used to show the previous tab. """ ind = self.currentIndex() - 1 if ind == -1: ind = self.count() - 1 self.setCurrentIndex(ind) self.currentWidget().setFocus() def nextTab(self): """ Public slot used to show the next tab. """ ind = self.currentIndex() + 1 if ind == self.count(): ind = 0 self.setCurrentIndex(ind) self.currentWidget().setFocus() def count(self): """ Public method to get the number of tabs. @return number of tabs in the sidebar (integer) """ return self.__tabBar.count() def currentIndex(self): """ Public method to get the index of the current tab. @return index of the current tab (integer) """ return self.__stackedWidget.currentIndex() def setCurrentIndex(self, index): """ Public slot to set the current index. @param index the index to set as the current index (integer) """ self.__tabBar.setCurrentIndex(index) self.__stackedWidget.setCurrentIndex(index) if self.isMinimized(): self.expand() def currentWidget(self): """ Public method to get a reference to the current widget. @return reference to the current widget (QWidget) """ return self.__stackedWidget.currentWidget() def setCurrentWidget(self, widget): """ Public slot to set the current widget. @param widget reference to the widget to become the current widget (QWidget) """ self.__stackedWidget.setCurrentWidget(widget) self.__tabBar.setCurrentIndex(self.__stackedWidget.currentIndex()) if self.isMinimized(): self.expand() def indexOf(self, widget): """ Public method to get the index of the given widget. @param widget reference to the widget to get the index of (QWidget) @return index of the given widget (integer) """ return self.__stackedWidget.indexOf(widget) def isTabEnabled(self, index): """ Public method to check, if a tab is enabled. @param index index of the tab to check (integer) @return flag indicating the enabled state (boolean) """ return self.__tabBar.isTabEnabled(index) def setTabEnabled(self, index, enabled): """ Public method to set the enabled state of a tab. @param index index of the tab to set (integer) @param enabled enabled state to set (boolean) """ self.__tabBar.setTabEnabled(index, enabled) def orientation(self): """ Public method to get the orientation of the sidebar. @return orientation of the sidebar (North, East, South, West) """ return self.__orientation def setOrientation(self, orient): """ Public method to set the orientation of the sidebar. @param orient orientation of the sidebar (North, East, South, West) """ if orient == E4SideBar.North: self.__tabBar.setShape(QTabBar.RoundedNorth) self.__tabBar.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) self.barLayout.setDirection(QBoxLayout.LeftToRight) self.layout.setDirection(QBoxLayout.TopToBottom) self.layout.setAlignment(self.barLayout, Qt.AlignLeft) elif orient == E4SideBar.East: self.__tabBar.setShape(QTabBar.RoundedEast) self.__tabBar.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Expanding) self.barLayout.setDirection(QBoxLayout.TopToBottom) self.layout.setDirection(QBoxLayout.RightToLeft) self.layout.setAlignment(self.barLayout, Qt.AlignTop) elif orient == E4SideBar.South: self.__tabBar.setShape(QTabBar.RoundedSouth) self.__tabBar.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) self.barLayout.setDirection(QBoxLayout.LeftToRight) self.layout.setDirection(QBoxLayout.BottomToTop) self.layout.setAlignment(self.barLayout, Qt.AlignLeft) elif orient == E4SideBar.West: self.__tabBar.setShape(QTabBar.RoundedWest) self.__tabBar.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Expanding) self.barLayout.setDirection(QBoxLayout.TopToBottom) self.layout.setDirection(QBoxLayout.LeftToRight) self.layout.setAlignment(self.barLayout, Qt.AlignTop) self.__orientation = orient def tabIcon(self, index): """ Public method to get the icon of a tab. @param index index of the tab (integer) @return icon of the tab (QIcon) """ return self.__tabBar.tabIcon(index) def setTabIcon(self, index, icon): """ Public method to set the icon of a tab. @param index index of the tab (integer) @param icon icon to be set (QIcon) """ self.__tabBar.setTabIcon(index, icon) def tabText(self, index): """ Public method to get the text of a tab. @param index index of the tab (integer) @return text of the tab (QString) """ return self.__tabBar.tabText(index) def setTabText(self, index, text): """ Public method to set the text of a tab. @param index index of the tab (integer) @param text text to set (QString) """ self.__tabBar.setTabText(index, text) def tabToolTip(self, index): """ Public method to get the tooltip text of a tab. @param index index of the tab (integer) @return tooltip text of the tab (QString) """ return self.__tabBar.tabToolTip(index) def setTabToolTip(self, index, tip): """ Public method to set the tooltip text of a tab. @param index index of the tab (integer) @param tooltip text text to set (QString) """ self.__tabBar.setTabToolTip(index, tip) def tabWhatsThis(self, index): """ Public method to get the WhatsThis text of a tab. @param index index of the tab (integer) @return WhatsThis text of the tab (QString) """ return self.__tabBar.tabWhatsThis(index) def setTabWhatsThis(self, index, text): """ Public method to set the WhatsThis text of a tab. @param index index of the tab (integer) @param WhatsThis text text to set (QString) """ self.__tabBar.setTabWhatsThis(index, text) def widget(self, index): """ Public method to get a reference to the widget associated with a tab. @param index index of the tab (integer) @return reference to the widget (QWidget) """ return self.__stackedWidget.widget(index) def saveState(self): """ Public method to save the state of the sidebar. @return saved state as a byte array (QByteArray) """ if len(self.splitterSizes) == 0: if self.splitter: self.splitterSizes = self.splitter.sizes() self.__bigSize = self.size() if self.__orientation in [E4SideBar.North, E4SideBar.South]: self.__minSize = self.minimumSizeHint().height() self.__maxSize = self.maximumHeight() else: self.__minSize = self.minimumSizeHint().width() self.__maxSize = self.maximumWidth() data = QByteArray() stream = QDataStream(data, QIODevice.WriteOnly) stream.writeUInt16(self.Version) stream.writeBool(self.__minimized) stream << self.__bigSize stream.writeUInt16(self.__minSize) stream.writeUInt16(self.__maxSize) stream.writeUInt16(len(self.splitterSizes)) for size in self.splitterSizes: stream.writeUInt16(size) stream.writeBool(self.__autoHide) return data def restoreState(self, state): """ Public method to restore the state of the sidebar. @param state byte array containing the saved state (QByteArray) @return flag indicating success (boolean) """ if state.isEmpty(): return False if self.__orientation in [E4SideBar.North, E4SideBar.South]: minSize = self.layout.minimumSize().height() maxSize = self.maximumHeight() else: minSize = self.layout.minimumSize().width() maxSize = self.maximumWidth() data = QByteArray(state) stream = QDataStream(data, QIODevice.ReadOnly) stream.readUInt16() # version minimized = stream.readBool() if minimized: self.shrink() stream >> self.__bigSize self.__minSize = max(stream.readUInt16(), minSize) self.__maxSize = max(stream.readUInt16(), maxSize) count = stream.readUInt16() self.splitterSizes = [] for i in range(count): self.splitterSizes.append(stream.readUInt16()) self.__autoHide = stream.readBool() self.__autoHideButton.setChecked(not self.__autoHide) if not minimized: self.expand() return True ####################################################################### ## methods below implement the autohide functionality ####################################################################### def __autoHideToggled(self, checked): """ Private slot to handle the toggling of the autohide button. @param checked flag indicating the checked state of the button (boolean) """ self.__autoHide = not checked if self.__autoHide: self.__autoHideButton.setIcon(UI.PixmapCache.getIcon("autoHideOn.png")) else: self.__autoHideButton.setIcon(UI.PixmapCache.getIcon("autoHideOff.png")) def __appFocusChanged(self, old, now): """ Private slot to handle a change of the focus. @param old reference to the widget, that lost focus (QWidget or None) @param now reference to the widget having the focus (QWidget or None) """ self.__hasFocus = self.isAncestorOf(now) if self.__autoHide and not self.__hasFocus and not self.isMinimized(): self.shrink() elif self.__autoHide and self.__hasFocus and self.isMinimized(): self.expand() def enterEvent(self, event): """ Protected method to handle the mouse entering this widget. @param event reference to the event (QEvent) """ if self.__autoHide and self.isMinimized(): self.expand() else: self.__cancelDelayTimer() def leaveEvent(self, event): """ Protected method to handle the mouse leaving this widget. @param event reference to the event (QEvent) """ if self.__autoHide and not self.__hasFocus and not self.isMinimized(): self.shrink() else: self.__cancelDelayTimer() def shutdown(self): """ Public method to shut down the object. This method does some preparations so the object can be deleted properly. It disconnects from the focusChanged signal in order to avoid trouble later on. """ self.disconnect(e4App(), SIGNAL("focusChanged(QWidget*, QWidget*)"), self.__appFocusChanged) eric4-4.5.18/eric/E4Gui/PaxHeaders.8617/E4ToolBox.py0000644000175000001440000000013212261012647017560 xustar000000000000000030 mtime=1388582311.831074927 30 atime=1389081057.669723488 30 ctime=1389081086.307724332 eric4-4.5.18/eric/E4Gui/E4ToolBox.py0000644000175000001440000000512012261012647017310 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2008 - 2014 Detlev Offenbach # """ Module implementing a horizontal and a vertical toolbox class. """ from PyQt4.QtCore import QString from PyQt4.QtGui import QToolBox, QTabWidget from E4TabWidget import E4TabWidget class E4VerticalToolBox(QToolBox): """ Class implementing a ToolBox class substituting QToolBox to support wheel events. """ def __init__(self, parent = None): """ Constructor @param parent reference to the parent widget (QWidget) """ QToolBox.__init__(self, parent) class E4HorizontalToolBox(E4TabWidget): """ Class implementing a vertical QToolBox like widget. """ def __init__(self, parent = None): """ Constructor @param parent reference to the parent widget (QWidget) """ E4TabWidget.__init__(self, parent) self.setTabPosition(QTabWidget.West) self.setUsesScrollButtons(True) def addItem(self, widget, icon, text): """ Public method to add a widget to the toolbox. @param widget reference to the widget to be added (QWidget) @param icon the icon to be shown (QIcon) @param text the text to be shown (QString) @return index of the added widget (integer) """ index = self.addTab(widget, icon, QString()) self.setTabToolTip(index, text) return index def insertItem(self, index, widget, icon, text): """ Public method to add a widget to the toolbox. @param index position at which the widget should be inserted (integer) @param widget reference to the widget to be added (QWidget) @param icon the icon to be shown (QIcon) @param text the text to be shown (QString) @return index of the added widget (integer) """ index = self.insertTab(index, widget, icon, QString()) self.setTabToolTip(index, text) return index def setItemToolTip(self, index, toolTip): """ Public method to set the tooltip of an item. @param index index of the item (integer) @param toolTip tooltip text to be set (QString) """ self.setTabToolTip(index, toolTip) def setItemEnabled(self, index, enabled): """ Public method to set the enabled state of an item. @param index index of the item (integer) @param enabled flag indicating the enabled state (boolean) """ self.setTabEnabled(index, enabled) eric4-4.5.18/eric/E4Gui/PaxHeaders.8617/__init__.py0000644000175000001440000000013212261012647017540 xustar000000000000000030 mtime=1388582311.833074952 30 atime=1389081057.669723488 30 ctime=1389081086.307724332 eric4-4.5.18/eric/E4Gui/__init__.py0000644000175000001440000000033412261012647017272 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Package implementing some special GUI elements. They extend or ammend the standard elements as found in QtGui. """ eric4-4.5.18/eric/E4Gui/PaxHeaders.8617/E4TreeSortFilterProxyModel.py0000644000175000001440000000013112261012647023131 xustar000000000000000029 mtime=1388582311.83607499 30 atime=1389081057.670723489 30 ctime=1389081086.307724332 eric4-4.5.18/eric/E4Gui/E4TreeSortFilterProxyModel.py0000644000175000001440000000326412261012647022671 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a modified QSortFilterProxyModel. """ from PyQt4.QtCore import Qt, QModelIndex from PyQt4.QtGui import QSortFilterProxyModel class E4TreeSortFilterProxyModel(QSortFilterProxyModel): """ Class implementing a modified QSortFilterProxyModel. It always accepts the root nodes in the tree so filtering is only done on the children. """ def __init__(self, parent = None): """ Constructor @param parent reference to the parent object (QObject) """ QSortFilterProxyModel.__init__(self, parent) self.setFilterCaseSensitivity(Qt.CaseInsensitive) def filterAcceptsRow(self, sourceRow, sourceParent): """ Protected method to determine, if the row is acceptable. @param sourceRow row number in the source model (integer) @param sourceParent index of the source item (QModelIndex) @return flag indicating acceptance (boolean) """ idx = self.sourceModel().index(sourceRow, 0, sourceParent) if self.sourceModel().hasChildren(idx): return True return QSortFilterProxyModel.filterAcceptsRow(self, sourceRow, sourceParent) def hasChildren(self, parent = QModelIndex()): """ Public method to check, if a parent node has some children. @param parent index of the parent node (QModelIndex) @return flag indicating the presence of children (boolean) """ sindex = self.mapToSource(parent) return self.sourceModel().hasChildren(sindex) eric4-4.5.18/eric/E4Gui/PaxHeaders.8617/E4ToolBarDialog.ui0000644000175000001440000000007411072435401020642 xustar000000000000000030 atime=1389081057.670723489 30 ctime=1389081086.307724332 eric4-4.5.18/eric/E4Gui/E4ToolBarDialog.ui0000644000175000001440000001525111072435401020373 0ustar00detlevusers00000000000000 E4ToolBarDialog 0 0 600 500 Configure Toolbars true &Toolbar: toolbarComboBox 0 0 Select the toolbar to configure Press to create a new toolbar &New Press to remove the selected toolbar &Remove Press to rename the selected toolbar R&ename Qt::Horizontal Actions: Current Toolbar Actions: Select the action to add to the current toolbar true false Qt::Vertical 20 40 Select the action to work on <b>Current Toolbar Actions</b><p>This list shows the actions of the selected toolbar. Select an action and use the up or down button to change the order of actions or the left button to delete it. To add an action to the toolbar, select it in the list of available actions and press the right button.</p> 0 Press to move the selected action up. Press to delete the selected action from the toolbar Press to add the selected action to the toolbar Press to move the selected action down. Qt::Vertical 20 40 Qt::Horizontal QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Ok|QDialogButtonBox::Reset|QDialogButtonBox::RestoreDefaults toolbarComboBox newButton removeButton renameButton actionsTree toolbarActionsList upButton downButton rightButton leftButton buttonBox eric4-4.5.18/eric/E4Gui/PaxHeaders.8617/E4ModelMenu.py0000644000175000001440000000013212261012647020057 xustar000000000000000030 mtime=1388582311.839075028 30 atime=1389081057.670723489 30 ctime=1389081086.307724332 eric4-4.5.18/eric/E4Gui/E4ModelMenu.py0000644000175000001440000003152712261012647017621 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a menu populated from a QAbstractItemModel. """ from PyQt4.QtCore import * from PyQt4.QtGui import * import UI.PixmapCache class E4ModelMenu(QMenu): """ Class implementing a menu populated from a QAbstractItemModel. @signal activated(const QModelIndex&) emitted when an action has been triggered """ def __init__(self, parent = None): """ Constructor @param parent reference to the parent widget (QWidget) """ QMenu.__init__(self, parent) self.__maxRows = -1 self.__firstSeparator = -1 self.__maxWidth = -1 self.__statusBarTextRole = 0 self.__separatorRole = 0 self.__model = None self.__root = QModelIndex() self.__dragStartPosition = QPoint() self.setAcceptDrops(True) self._mouseButton = Qt.NoButton self._keyboardModifiers = Qt.KeyboardModifiers(Qt.NoModifier) self.__dropRow = -1 self.__dropIndex = None self.connect(self, SIGNAL("aboutToShow()"), self.__aboutToShow) self.connect(self, SIGNAL("triggered(QAction*)"), self.__actionTriggered) def prePopulated(self): """ Public method to add any actions before the tree. @return flag indicating if any actions were added """ return False def postPopulated(self): """ Public method to add any actions after the tree. """ pass def setModel(self, model): """ Public method to set the model for the menu. @param model reference to the model (QAbstractItemModel) """ self.__model = model def model(self): """ Public method to get a reference to the model. @return reference to the model (QAbstractItemModel) """ return self.__model def setMaxRows(self, rows): """ Public method to set the maximum number of entries to show. @param rows maximum number of entries to show (integer) """ self.__maxRows = rows def maxRows(self): """ Public method to get the maximum number of entries to show. @return maximum number of entries to show (integer) """ return self.__maxRows def setFirstSeparator(self, offset): """ Public method to set the first separator. @param offset row number of the first separator (integer) """ self.__firstSeparator = offset def firstSeparator(self): """ Public method to get the first separator. @return row number of the first separator (integer) """ return self.__firstSeparator def setRootIndex(self, index): """ Public method to set the index of the root item. @param index index of the root item (QModelIndex) """ self.__root = index def rootIndex(self): """ Public method to get the index of the root item. @return index of the root item (QModelIndex) """ return self.__root def setStatusBarTextRole(self, role): """ Public method to set the role of the status bar text. @param role role of the status bar text (integer) """ self.__statusBarTextRole = role def statusBarTextRole(self): """ Public method to get the role of the status bar text. @return role of the status bar text (integer) """ return self.__statusBarTextRole def setSeparatorRole(self, role): """ Public method to set the role of the separator. @param role role of the separator (integer) """ self.__separatorRole = role def separatorRole(self): """ Public method to get the role of the separator. @return role of the separator (integer) """ return self.__separatorRole def __aboutToShow(self): """ Private slot to show the menu. """ self.clear() if self.prePopulated(): self.addSeparator() max_ = self.__maxRows if max_ != -1: max_ += self.__firstSeparator self.createMenu(self.__root, max_, self, self) self.postPopulated() def createBaseMenu(self): """ Public method to get the menu that is used to populate sub menu's. @return reference to the menu (E4ModelMenu) """ return E4ModelMenu(self) def createMenu(self, parent, max_, parentMenu = None, menu = None): """ Public method to put all the children of a parent into a menu of a given length. @param parent index of the parent item (QModelIndex) @param max_ maximum number of entries (integer) @param parentMenu reference to the parent menu (QMenu) @param menu reference to the menu to be populated (QMenu) """ if menu is None: v = QVariant(parent) title = parent.data().toString() modelMenu = self.createBaseMenu() # triggered goes all the way up the menu structure self.disconnect(modelMenu, SIGNAL("triggered(QAction*)"), modelMenu.__actionTriggered) modelMenu.setTitle(title) icon = parent.data(Qt.DecorationRole).toPyObject() if icon == NotImplemented or icon is None: icon = UI.PixmapCache.getIcon("defaultIcon.png") modelMenu.setIcon(icon) if parentMenu is not None: parentMenu.addMenu(modelMenu).setData(v) modelMenu.setRootIndex(parent) modelMenu.setModel(self.__model) return if self.__model is None: return end = self.__model.rowCount(parent) if max_ != -1: end = min(max_, end) for i in range(end): idx = self.__model.index(i, 0, parent) if self.__model.hasChildren(idx): self.createMenu(idx, -1, menu) else: if self.__separatorRole != 0 and idx.data(self.__separatorRole).toBool(): self.addSeparator() else: menu.addAction(self.__makeAction(idx)) if menu == self and i == self.__firstSeparator - 1: self.addSeparator() def __makeAction(self, idx): """ Private method to create an action. @param idx index of the item to create an action for (QModelIndex) @return reference to the created action (QAction) """ icon = idx.data(Qt.DecorationRole).toPyObject() if icon == NotImplemented or icon is None: icon = UI.PixmapCache.getIcon("defaultIcon.png") action = self.makeAction(icon, idx.data().toString(), self) action.setStatusTip(idx.data(self.__statusBarTextRole).toString()) v = QVariant(idx) action.setData(v) return action def makeAction(self, icon, text, parent): """ Public method to create an action. @param icon icon of the action (QIcon) @param text text of the action (QString) @param reference to the parent object (QObject) @return reference to the created action (QAction) """ fm = QFontMetrics(self.font()) if self.__maxWidth == -1: self.__maxWidth = fm.width('m') * 30 smallText = fm.elidedText(text, Qt.ElideMiddle, self.__maxWidth) return QAction(icon, smallText, parent) def __actionTriggered(self, action): """ Private slot to handle the triggering of an action. @param action reference to the action that was triggered (QAction) """ idx = self.index(action) if idx.isValid(): self.emit(SIGNAL("activated(const QModelIndex&)"), idx) def index(self, action): """ Public method to get the index of an action. @param action reference to the action to get the index for (QAction) @return index of the action (QModelIndex) """ if action is None: return QModelIndex() v = action.data() if not v.isValid(): return QModelIndex() idx = v.toPyObject() if not isinstance(idx, QModelIndex): return QModelIndex() return idx def dragEnterEvent(self, evt): """ Protected method to handle drag enter events. @param evt reference to the event (QDragEnterEvent) """ if self.__model is not None: mimeTypes = self.__model.mimeTypes() for mimeType in mimeTypes: if evt.mimeData().hasFormat(mimeType): evt.acceptProposedAction() QMenu.dragEnterEvent(self, evt) def dropEvent(self, evt): """ Protected method to handle drop events. @param evt reference to the event (QDropEvent) """ if self.__model is not None: act = self.actionAt(evt.pos()) parentIndex = self.__root if act is None: row = self.__model.rowCount(self.__root) else: idx = self.index(act) if not idx.isValid(): QMenu.dropEvent(self, evt) return row = idx.row() if self.__model.hasChildren(idx): parentIndex = idx row = self.__model.rowCount(idx) self.__dropRow = row self.__dropIndex = parentIndex evt.acceptProposedAction() self.__model.dropMimeData(evt.mimeData(), evt.dropAction(), row, 0, parentIndex) self.close() QMenu.dropEvent(self, evt) def mousePressEvent(self, evt): """ Protected method handling mouse press events. @param evt reference to the event object (QMouseEvent) """ if evt.button() == Qt.LeftButton: self.__dragStartPosition = evt.pos() QMenu.mousePressEvent(self, evt) def mouseMoveEvent(self, evt): """ Protected method to handle mouse move events. @param evt reference to the event (QMouseEvent) """ if self.__model is None: QMenu.mouseMoveEvent(self, evt) return if not (evt.buttons() & Qt.LeftButton): QMenu.mouseMoveEvent(self, evt) return manhattanLength = (evt.pos() - self.__dragStartPosition).manhattanLength() if manhattanLength <= QApplication.startDragDistance(): QMenu.mouseMoveEvent(self, evt) return act = self.actionAt(self.__dragStartPosition) if act is None: QMenu.mouseMoveEvent(self, evt) return idx = self.index(act) if not idx.isValid(): QMenu.mouseMoveEvent(self, evt) return drag = QDrag(self) drag.setMimeData(self.__model.mimeData([idx])) actionRect = self.actionGeometry(act) drag.setPixmap(QPixmap.grabWidget(self, actionRect)) if drag.exec_() == Qt.MoveAction: row = idx.row() if self.__dropIndex == idx.parent() and self.__dropRow <= row: row += 1 self.__model.removeRow(row, self.__root) if not self.isAncestorOf(drag.target()): self.close() else: self.emit(SIGNAL("aboutToShow()")) def mouseReleaseEvent(self, evt): """ Protected method handling mouse release events. @param evt reference to the event object (QMouseEvent) """ self._mouseButton = evt.button() self._keyboardModifiers = evt.modifiers() QMenu.mouseReleaseEvent(self, evt) def resetFlags(self): """ Public method to reset the saved internal state. """ self._mouseButton = Qt.NoButton self._keyboardModifiers = Qt.KeyboardModifiers(Qt.NoModifier) def removeEntry(self, idx): """ Public method to remove a menu entry. @param idx index of the entry to be removed (QModelIndex) """ row = idx.row() self.__model.removeRow(row, self.__root) self.emit(SIGNAL("aboutToShow()")) eric4-4.5.18/eric/E4Gui/PaxHeaders.8617/E4ToolBarManager.py0000644000175000001440000000013212261012647021027 xustar000000000000000030 mtime=1388582311.852075194 30 atime=1389081057.670723489 30 ctime=1389081086.307724332 eric4-4.5.18/eric/E4Gui/E4ToolBarManager.py0000644000175000001440000005730612261012647020574 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2008 - 2014 Detlev Offenbach # """ Module implementing a toolbar manager class. """ from PyQt4.QtCore import * from PyQt4.QtGui import * class E4ToolBarManager(QObject): """ Class implementing a toolbar manager. """ VersionMarker = 0xffff ToolBarMarker = 0xfefe CustomToolBarMarker = 0xfdfd def __init__(self, ui = None, parent = None): """ Constructor @param ui reference to the user interface object (UI.UserInterface) @param parent reference to the parent object (QObject) """ QObject.__init__(self, parent) self.__mainWindow = None self.__ui = ui self.__toolBars = {} # maps toolbar IDs to actions self.__toolBarsWithSeparators = {} # maps toolbar IDs to actions incl. separators self.__defaultToolBars = {} # maps default toolbar IDs to actions self.__customToolBars = [] # list of custom toolbars self.__allToolBars = {} # maps toolbar IDs to toolbars self.__categoryToActions = {} # maps categories to actions self.__actionToCategory = {} # maps action IDs to categories self.__allActions = {} # maps action IDs to actions self.__actionToToolBars = {} # maps action IDs to toolbars self.__widgetActions = {} # maps widget action IDs to toolbars self.__allWidgetActions = {} # maps widget action IDs to widget actions ###################################################### ## Private methods ###################################################### def __toolBarByName(self, name): """ Private slot to get a toolbar by its object name. @param name object name of the toolbar (string or QString) @return reference to the toolbar (QToolBar) """ for toolBar in self.__allToolBars.values(): if toolBar.objectName() == name: return toolBar return None def __findAction(self, name): """ Private method to find an action by name. @param name name of the action to search for (string or QString) @return reference to the action (QAction) """ # check objectName() first for action in self.__allActions.values(): if action.objectName() == name: return action # check text() next for action in self.__allActions.values(): if action.text() == name: return action return None def __findDefaultToolBar(self, name): """ Private method to find a default toolbar by name. @param name name of the default toolbar to search for (string or QString) @return reference to the default toolbar (QToolBar) """ # check objectName() first for tbID in self.__defaultToolBars: tb = self.__allToolBars[tbID] if tb.objectName() == name: return tb # check windowTitle() next for tbID in self.__defaultToolBars: tb = self.__allToolBars[tbID] if tb.windowTitle() == name: return tb return None ###################################################### ## Public methods ###################################################### def setMainWindow(self, mainWindow): """ Public method to set the reference to the main window. @param mainWindow reference to the main window (QMainWindow) """ self.__mainWindow = mainWindow def mainWindow(self): """ Public method to get the reference to the main window. @return reference to the main window (QMainWindow) """ return self.__mainWindow def addToolBar(self, toolBar, category): """ Public method to add a toolbar to be managed. @param toolBar reference to the toolbar to be managed (QToolBar) @param category category for the toolbar (QString) """ if toolBar is None: return if toolBar in self.__toolBars: return category = unicode(category) newActions = [] newActionsWithSeparators = [] actions = toolBar.actions() for action in actions: actID = id(action) self.addAction(action, category) if actID in self.__widgetActions: self.__widgetActions[actID] = toolBar newActionsWithSeparators.append(action) if action.isSeparator(): action = None else: if toolBar not in self.__actionToToolBars[actID]: self.__actionToToolBars[actID].append(toolBar) newActions.append(action) tbID = id(toolBar) self.__defaultToolBars[tbID] = newActions self.__toolBars[tbID] = newActions self.__toolBarsWithSeparators[tbID] = newActionsWithSeparators self.__allToolBars[tbID] = toolBar def removeToolBar(self, toolBar): """ Public method to remove a toolbar added with addToolBar(). @param toolBar reference to the toolbar to be removed (QToolBar) """ if toolBar is None: return tbID = id(toolBar) if tbID not in self.__defaultToolBars: return defaultActions = self.__defaultToolBars[tbID][:] self.setToolBar(toolBar, []) for action in defaultActions: self.removeAction(action) del self.__defaultToolBars[tbID] del self.__toolBars[tbID] del self.__toolBarsWithSeparators[tbID] del self.__allToolBars[tbID] for action in defaultActions: if action is None: toolBar.addSeparator() else: toolBar.addAction(action) def setToolBars(self, toolBars): """ Public method to set the actions of several toolbars. @param toolBars dictionary with toolbar id as key and a list of actions as value """ for key, actions in toolBars.items(): tb = self.__allToolBars[key] self.setToolBar(tb, actions) def setToolBar(self, toolBar, actions): """ Public method to set the actions of a toolbar. @param toolBar reference to the toolbar to configure (QToolBar) @param actions list of actions to be set (list of QAction) """ if toolBar is None: return tbID = id(toolBar) if tbID not in self.__toolBars: return if self.__toolBars[tbID] == actions: return # step 1: check list of actions toRemove = {} newActions = [] for action in actions: if action is None or \ (action not in newActions and id(action) in self.__allActions): newActions.append(action) oldTB = self.toolBarWidgetAction(action) if oldTB is not None and oldTB != toolBar: if id(oldTB) not in toRemove: toRemove[id(oldTB)] = [] toRemove[id(oldTB)].append(action) self.removeWidgetActions(toRemove) # step 2: remove all toolbar actions for action in self.__toolBarsWithSeparators[tbID]: if self.toolBarWidgetAction(action) == tbID: self.__widgetActions[id(action)] = None toolBar.removeAction(action) if action.isSeparator(): del action else: self.__actionToToolBars[id(action)].remove(toolBar) # step 3: set the actions as requested newActionsWithSeparators = [] for action in newActions: newAction = None if action is None: newAction = toolBar.addSeparator() elif id(action) in self.__allActions: toolBar.addAction(action) newAction = action self.__actionToToolBars[id(action)].append(toolBar) if id(action) in self.__widgetActions: self.__widgetActions[id(action)] = toolBar else: continue newActionsWithSeparators.append(newAction) if toolBar.isVisible(): toolBar.hide() toolBar.show() self.__toolBars[tbID] = newActions self.__toolBarsWithSeparators[tbID] = newActionsWithSeparators def resetToolBar(self, toolBar): """ Public method to reset a toolbar to its default state. @param toolBar reference to the toolbar to configure (QToolBar) """ if not self.isDefaultToolBar(): return self.setToolBar(toolBar, self.__defaultToolBars[id(toolBar)]) def resetAllToolBars(self): """ Public method to reset all toolbars to their default state. """ self.setToolBars(self.__defaultToolBars) for toolBar in self.__customToolBars[:]: self.deleteToolBar(toolBar) def defaultToolBars(self): """ Public method to get all toolbars added with addToolBar(). @return list of all default toolbars (list of QToolBar) """ return self.__defaultToolBars.values() def isDefaultToolBar(self, toolBar): """ Public method to check, if a toolbar was added with addToolBar(). @param toolBar reference to the toolbar to be checked (QToolBar) """ return toolBar is not None and \ id(toolBar) in self.__defaultToolBars def createToolBar(self, title, name=None): """ Public method to create a custom toolbar. @param title title to be used for the toolbar (QString) @param name optional name for the new toolbar (QString) @return reference to the created toolbar (QToolBar) """ if self.__mainWindow is None: return None toolBar = QToolBar(title, self.__mainWindow) toolBar.setToolTip(title) if name is None: index = 1 customPrefix = "__CustomPrefix__" name = "%s%d" % (customPrefix, index) while self.__toolBarByName(name) is not None: index += 1 name = "%s%d" % (customPrefix, index) toolBar.setObjectName(name) self.__mainWindow.addToolBar(toolBar) tbID = id(toolBar) self.__customToolBars.append(toolBar) self.__allToolBars[tbID] = toolBar self.__toolBars[tbID] = [] self.__toolBarsWithSeparators[tbID] = [] if self.__ui is not None: toolBar.setIconSize(self.__ui.getToolBarIconSize()) self.__ui.registerToolbar(name, title, toolBar) return toolBar def deleteToolBar(self, toolBar): """ Public method to remove a custom toolbar created with createToolBar(). @param toolBar reference to the toolbar to be managed (QToolBar) """ if toolBar is None: return tbID = id(toolBar) if tbID not in self.__toolBars: return if tbID in self.__defaultToolBars: return if self.__ui is not None: self.__ui.unregisterToolbar(unicode(toolBar.objectName())) self.setToolBar(toolBar, []) del self.__allToolBars[tbID] del self.__toolBars[tbID] del self.__toolBarsWithSeparators[tbID] self.__customToolBars.remove(toolBar) self.__mainWindow.removeToolBar(toolBar) del toolBar def renameToolBar(self, toolBar, title): """ Public method to give a toolbar a new title. @param toolBar reference to the toolbar to be managed (QToolBar) @param title title to be used for the toolbar (QString) """ if toolBar is None: return toolBar.setWindowTitle(title) if self.__ui is not None: self.__ui.reregisterToolbar(unicode(toolBar.objectName()), title) def toolBars(self): """ Public method to get all toolbars. @return list of all toolbars (list of QToolBar) """ return self.__allToolBars.values() def addAction(self, action, category): """ Public method to add an action to be managed. @param action reference to the action to be managed (QAction) @param category category for the toolbar (QString) """ if action is None: return if action.isSeparator(): return if id(action) in self.__allActions: return if action.metaObject().className() == "QWidgetAction": self.__widgetActions[id(action)] = None self.__allWidgetActions[id(action)] = action self.__allActions[id(action)] = action category = unicode(category) if category not in self.__categoryToActions: self.__categoryToActions[category] = [] self.__categoryToActions[category].append(action) self.__actionToCategory[id(action)] = category self.__actionToToolBars[id(action)] = [] def removeAction(self, action): """ Public method to remove an action from the manager. @param action reference to the action to be removed (QAction) """ aID = id(action) if aID not in self.__allActions: return toolBars = self.__actionToToolBars[aID] for toolBar in toolBars: tbID = id(toolBar) self.__toolBars[tbID].remove(action) self.__toolBarsWithSeparators[tbID].remove(action) toolBar.removeAction(action) if toolBar.isVisible(): toolBar.hide() toolBar.show() for tbID in self.__defaultToolBars: if action in self.__defaultToolBars[tbID]: self.__defaultToolBars[tbID].remove(action) del self.__allActions[aID] if aID in self.__widgetActions: del self.__widgetActions[aID] del self.__allWidgetActions[aID] del self.__actionToCategory[aID] del self.__actionToToolBars[aID] for category in self.__categoryToActions: if action in self.__categoryToActions[category]: self.__categoryToActions[category].remove(action) def saveState(self, version = 0): """ Public method to save the state of the toolbar manager. @param version version number stored with the data (integer) @return saved state as a byte array (QByteArray) """ data = QByteArray() stream = QDataStream(data, QIODevice.WriteOnly) stream.writeUInt16(E4ToolBarManager.VersionMarker) stream.writeUInt16(version) # save default toolbars stream.writeUInt16(E4ToolBarManager.ToolBarMarker) stream.writeUInt16(len(self.__defaultToolBars)) for tbID in self.__defaultToolBars: tb = self.__allToolBars[tbID] if tb.objectName().isEmpty(): stream << tb.windowTitle() else: stream << tb.objectName() stream.writeUInt16(len(self.__toolBars[tbID])) for action in self.__toolBars[tbID]: if action is not None: if action.objectName().isEmpty(): stream << action.text() else: stream << action.objectName() else: stream << QString() # save the custom toolbars stream.writeUInt16(E4ToolBarManager.CustomToolBarMarker) stream.writeUInt16(len(self.__toolBars) - len(self.__defaultToolBars)) for tbID in self.__toolBars: if tbID not in self.__defaultToolBars: tb = self.__allToolBars[tbID] stream << tb.objectName() stream << tb.windowTitle() stream.writeUInt16(len(self.__toolBars[tbID])) for action in self.__toolBars[tbID]: if action is not None: if action.objectName().isEmpty(): stream << action.text() else: stream << action.objectName() else: stream << QString() return data def restoreState(self, state, version = 0): """ Public method to restore the state of the toolbar manager. @param state byte array containing the saved state (QByteArray) @param version version number stored with the data (integer) @return flag indicating success (boolean) """ if state.isEmpty(): return False data = QByteArray(state) stream = QDataStream(data, QIODevice.ReadOnly) marker = stream.readUInt16() vers = stream.readUInt16() if marker != E4ToolBarManager.VersionMarker or vers != version: return False tmarker = stream.readUInt16() if tmarker != E4ToolBarManager.ToolBarMarker: return False toolBarCount = stream.readUInt16() for i in range(toolBarCount): objectName = QString() stream >> objectName actionCount = stream.readUInt16() actions = [] for j in range(actionCount): actionName = QString() stream >> actionName if actionName.isEmpty(): actions.append(None) else: action = self.__findAction(actionName) if action is not None: actions.append(action) toolBar = self.__findDefaultToolBar(objectName) if toolBar is not None: self.setToolBar(toolBar, actions) cmarker = stream.readUInt16() if cmarker != E4ToolBarManager.CustomToolBarMarker: return False oldCustomToolBars = self.__customToolBars[:] toolBarCount = stream.readUInt16() for i in range(toolBarCount): objectName = QString() toolBarTitle = QString() stream >> objectName stream >> toolBarTitle actionCount = stream.readUInt16() actions = [] for j in range(actionCount): actionName = QString() stream >> actionName if actionName.isEmpty(): actions.append(None) else: action = self.__findAction(actionName) if action is not None: actions.append(action) toolBar = self.__toolBarByName(objectName) if toolBar is not None: toolBar.setWindowTitle(toolBarTitle) oldCustomToolBars.remove(toolBar) else: toolBar = self.createToolBar(toolBarTitle, objectName) if toolBar is not None: toolBar.setObjectName(objectName) self.setToolBar(toolBar, actions) for tb in oldCustomToolBars: self.deleteToolBar(tb) return True def toolBarWidgetAction(self, action): """ Public method to get the toolbar for a widget action. @param action widget action to check for (QAction) @return reference to the toolbar containing action (QToolBar) """ aID = id(action) if aID in self.__widgetActions: return self.__widgetActions[aID] return None def removeWidgetActions(self, actions): """ Public method to remove widget actions. @param actions dictionary with toolbar id as key and a list of widget actions as value """ for tbID in actions.keys()[:]: toolBar = self.__allToolBars[tbID] newActions = self.__toolBars[tbID][:] newActionsWithSeparators = self.__toolBarsWithSeparators[tbID][:] removedActions = [] for action in actions[tbID]: if action in newActions and self.toolBarWidgetAction(action) == toolBar: newActions.remove(action) newActionsWithSeparators.remove(action) removedActions.append(action) self.__toolBars[tbID] = newActions self.__toolBarsWithSeparators[tbID] = newActionsWithSeparators for action in removedActions: self.__widgetActions[id(action)] = None self.__actionToToolBars[id(action)].remove(toolBar) toolBar.removeAction(action) def isWidgetAction(self, action): """ Public method to check, if action is a widget action. @param action reference to the action to be checked (QAction) @return flag indicating a widget action (boolean) """ return id(action) in self.__allWidgetActions def categories(self): """ Public method to get the list of categories. @return list of categories (list of string) """ return self.__categoryToActions.keys() def categoryActions(self, category): """ Public method to get the actions belonging to a category. @param category category for the toolbar (string or QString) @return list of actions (list of QAction) """ category = unicode(category) if category not in self.__categoryToActions: return [] return self.__categoryToActions[category][:] def actionById(self, aID): """ Public method to get an action given its id. @param aID id of the action object (integer) @return reference to the action (QAction) """ if aID not in self.__allActions: return None return self.__allActions[aID] def toolBarById(self, tbID): """ Public method to get a toolbar given its id. @param tbID id of the toolbar object (integer) @return reference to the toolbar (QToolBar) """ if tbID not in self.__allToolBars: return None return self.__allToolBars[tbID] def toolBarActions(self, tbID): """ Public method to get a toolbar's actions given its id. @param tbID id of the toolbar object (integer) @return list of actions (list of QAction) """ if tbID not in self.__toolBars: return [] return self.__toolBars[tbID][:] def toolBarsActions(self): """ Public method to get all toolbars and their actions. @return reference to dictionary of toolbar IDs as key and list of actions as values """ return self.__toolBars def defaultToolBarActions(self, tbID): """ Public method to get a default toolbar's actions given its id. @param tbID id of the default toolbar object (integer) @return list of actions (list of QAction) """ if tbID not in self.__defaultToolBars: return [] return self.__defaultToolBars[tbID][:] eric4-4.5.18/eric/E4Gui/PaxHeaders.8617/E4Completers.py0000644000175000001440000000013212261012647020307 xustar000000000000000030 mtime=1388582311.862075321 30 atime=1389081057.670723489 30 ctime=1389081086.307724332 eric4-4.5.18/eric/E4Gui/E4Completers.py0000644000175000001440000000650412261012647020046 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing various kinds of completers. """ from PyQt4.QtCore import QDir, QStringList, Qt from PyQt4.QtGui import QCompleter, QFileSystemModel, QStringListModel from Globals import isWindowsPlatform class E4FileCompleter(QCompleter): """ Class implementing a completer for file names. """ def __init__(self, parent = None, completionMode = QCompleter.PopupCompletion, showHidden = False): """ Constructor @param parent parent widget of the completer (QWidget) @keyparam completionMode completion mode of the completer (QCompleter.CompletionMode) @keyparam showHidden flag indicating to show hidden entries as well (boolean) """ QCompleter.__init__(self, parent) self.__model = QFileSystemModel(self) if showHidden: self.__model.setFilter(\ QDir.Filters(QDir.Dirs | QDir.Files | QDir.Drives | \ QDir.AllDirs | QDir.Hidden)) else: self.__model.setFilter(\ QDir.Filters(QDir.Dirs | QDir.Files | QDir.Drives | QDir.AllDirs)) self.setModel(self.__model) self.setCompletionMode(completionMode) if isWindowsPlatform(): self.setCaseSensitivity(Qt.CaseInsensitive) if parent: parent.setCompleter(self) class E4DirCompleter(QCompleter): """ Class implementing a completer for directory names. """ def __init__(self, parent = None, completionMode = QCompleter.PopupCompletion, showHidden = False): """ Constructor @param parent parent widget of the completer (QWidget) @keyparam completionMode completion mode of the completer (QCompleter.CompletionMode) @keyparam showHidden flag indicating to show hidden entries as well (boolean) """ QCompleter.__init__(self, parent) self.__model = QFileSystemModel(self) if showHidden: self.__model.setFilter(\ QDir.Filters(QDir.Drives | QDir.AllDirs | QDir.Hidden)) else: self.__model.setFilter(\ QDir.Filters(QDir.Drives | QDir.AllDirs)) self.setModel(self.__model) self.setCompletionMode(completionMode) if isWindowsPlatform(): self.setCaseSensitivity(Qt.CaseInsensitive) if parent: parent.setCompleter(self) class E4StringListCompleter(QCompleter): """ Class implementing a completer for string lists. """ def __init__(self, parent = None, strings = QStringList(), completionMode = QCompleter.PopupCompletion): """ Constructor @param parent parent widget of the completer (QWidget) @param strings list of string to load into the completer (QStringList) @keyparam completionMode completion mode of the completer (QCompleter.CompletionMode) """ QCompleter.__init__(self, parent) self.__model = QStringListModel(strings, parent) self.setModel(self.__model) self.setCompletionMode(completionMode) if parent: parent.setCompleter(self) eric4-4.5.18/eric/E4Gui/PaxHeaders.8617/E4ModelToolBar.py0000644000175000001440000000013212261012647020515 xustar000000000000000030 mtime=1388582311.865075359 30 atime=1389081057.670723489 30 ctime=1389081086.307724332 eric4-4.5.18/eric/E4Gui/E4ModelToolBar.py0000644000175000001440000002236712261012647020261 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a tool bar populated from a QAbstractItemModel. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from E4ModelMenu import E4ModelMenu class E4ModelToolBar(QToolBar): """ Class implementing a tool bar populated from a QAbstractItemModel. """ def __init__(self, title = None, parent = None): """ Constructor @param title title for the tool bar (QString) @param parent reference to the parent widget (QWidget) """ if title is not None: QToolBar.__init__(self, title, parent) else: QToolBar.__init__(self, parent) self.__model = None self.__root = QModelIndex() self.__dragStartPosition = QPoint() if self.isVisible(): self._build() self.setAcceptDrops(True) self._mouseButton = Qt.NoButton self._keyboardModifiers = Qt.KeyboardModifiers(Qt.NoModifier) self.__dropRow = -1 self.__dropIndex = None def setModel(self, model): """ Public method to set the model for the tool bar. @param model reference to the model (QAbstractItemModel) """ if self.__model is not None: self.disconnect(self.__model, SIGNAL("modelReset()"), self._build) self.disconnect(self.__model, SIGNAL("rowsInserted(const QModelIndex&, int, int)"), self._build) self.disconnect(self.__model, SIGNAL("rowsRemoved(const QModelIndex&, int, int)"), self._build) self.disconnect(self.__model, SIGNAL("dataChanged(const QModelIndex&, const QModelIndex&)"), self._build) self.__model = model if self.__model is not None: self.connect(self.__model, SIGNAL("modelReset()"), self._build) self.connect(self.__model, SIGNAL("rowsInserted(const QModelIndex&, int, int)"), self._build) self.connect(self.__model, SIGNAL("rowsRemoved(const QModelIndex&, int, int)"), self._build) self.connect(self.__model, SIGNAL("dataChanged(const QModelIndex&, const QModelIndex&)"), self._build) def model(self): """ Public method to get a reference to the model. @return reference to the model (QAbstractItemModel) """ return self.__model def setRootIndex(self, idx): """ Public method to set the root index. @param idx index to be set as the root index (QModelIndex) """ self.__root = idx def rootIndex(self): """ Public method to get the root index. @return root index (QModelIndex) """ return self.__root def _build(self): """ Protected slot to build the tool bar. """ assert self.__model is not None self.clear() for i in range(self.__model.rowCount(self.__root)): idx = self.__model.index(i, 0, self.__root) v = QVariant(idx) title = idx.data(Qt.DisplayRole).toString() icon = idx.data(Qt.DecorationRole).toPyObject() if icon == NotImplemented or icon is None: icon = QIcon() folder = self.__model.hasChildren(idx) act = self.addAction(icon, title) act.setData(v) button = self.widgetForAction(act) button.installEventFilter(self) if folder: menu = self._createMenu() menu.setModel(self.__model) menu.setRootIndex(idx) act.setMenu(menu) button.setPopupMode(QToolButton.InstantPopup) button.setToolButtonStyle(Qt.ToolButtonTextBesideIcon) def index(self, action): """ Public method to get the index of an action. @param action reference to the action to get the index for (QAction) @return index of the action (QModelIndex) """ if action is None: return QModelIndex() v = action.data() if not v.isValid(): return QModelIndex() idx = v.toPyObject() if not isinstance(idx, QModelIndex): return QModelIndex() return idx def _createMenu(self): """ Protected method to create the menu for a tool bar action. @return menu for a tool bar action (E4ModelMenu) """ return E4ModelMenu(self) def eventFilter(self, obj, evt): """ Public method to handle event for other objects. @param obj reference to the object (QObject) @param evt reference to the event (QEvent) @return flag indicating that the event should be filtered out (boolean) """ if evt.type() == QEvent.MouseButtonRelease: self._mouseButton = evt.button() self._keyboardModifiers = evt.modifiers() act = obj.defaultAction() idx = self.index(act) if idx.isValid(): self.emit(SIGNAL("activated(const QModelIndex&)"), idx) elif evt.type() == QEvent.MouseButtonPress: if evt.buttons() & Qt.LeftButton: self.__dragStartPosition = self.mapFromGlobal(evt.globalPos()) return False def dragEnterEvent(self, evt): """ Protected method to handle drag enter events. @param evt reference to the event (QDragEnterEvent) """ if self.__model is not None: mimeTypes = self.__model.mimeTypes() for mimeType in mimeTypes: if evt.mimeData().hasFormat(mimeType): evt.acceptProposedAction() QToolBar.dragEnterEvent(self, evt) def dropEvent(self, evt): """ Protected method to handle drop events. @param evt reference to the event (QDropEvent) """ if self.__model is not None: act = self.actionAt(evt.pos()) parentIndex = self.__root if act is None: row = self.__model.rowCount(self.__root) else: idx = self.index(act) assert idx.isValid() row = idx.row() if self.__model.hasChildren(idx): parentIndex = idx row = self.__model.rowCount(idx) self.__dropRow = row self.__dropIndex = parentIndex evt.acceptProposedAction() self.__model.dropMimeData(evt.mimeData(), evt.dropAction(), row, 0, parentIndex) QToolBar.dropEvent(self, evt) def mouseMoveEvent(self, evt): """ Protected method to handle mouse move events. @param evt reference to the event (QMouseEvent) """ if self.__model is None: QToolBar.mouseMoveEvent(self, evt) return if not (evt.buttons() & Qt.LeftButton): QToolBar.mouseMoveEvent(self, evt) return manhattanLength = (evt.pos() - self.__dragStartPosition).manhattanLength() if manhattanLength <= QApplication.startDragDistance(): QToolBar.mouseMoveEvent(self, evt) return act = self.actionAt(self.__dragStartPosition) if act is None: QToolBar.mouseMoveEvent(self, evt) return idx = self.index(act) assert idx.isValid() drag = QDrag(self) drag.setMimeData(self.__model.mimeData([idx])) actionRect = self.actionGeometry(act) drag.setPixmap(QPixmap.grabWidget(self, actionRect)) if drag.exec_() == Qt.MoveAction: row = idx.row() if self.__dropIndex == idx.parent() and self.__dropRow <= row: row += 1 self.__model.removeRow(row, self.__root) def hideEvent(self, evt): """ Protected method to handle hide events. @param evt reference to the hide event (QHideEvent) """ self.clear() QToolBar.hideEvent(self, evt) def showEvent(self, evt): """ Protected method to handle show events. @param evt reference to the hide event (QHideEvent) """ if len(self.actions()) == 0: self._build() QToolBar.showEvent(self, evt) def resetFlags(self): """ Public method to reset the saved internal state. """ self._mouseButton = Qt.NoButton self._keyboardModifiers = Qt.KeyboardModifiers(Qt.NoModifier) eric4-4.5.18/eric/E4Gui/PaxHeaders.8617/E4ToolBarDialog.py0000644000175000001440000000013212261012647020654 xustar000000000000000030 mtime=1388582311.868075397 30 atime=1389081057.670723489 30 ctime=1389081086.307724332 eric4-4.5.18/eric/E4Gui/E4ToolBarDialog.py0000644000175000001440000004736712261012647020427 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2008 - 2014 Detlev Offenbach # """ Module implementing a toolbar configuration dialog. """ from PyQt4.QtGui import * from PyQt4.QtCore import * from KdeQt import KQMessageBox, KQInputDialog from Ui_E4ToolBarDialog import Ui_E4ToolBarDialog import UI.PixmapCache class E4ToolBarItem(object): """ Class storing data belonging to a toolbar entry of the toolbar dialog. """ def __init__(self, toolBarId, actionIDs, default): """ Constructor @param toolBarId id of the toolbar object (integer) @param actionIDs list of action IDs belonging to the toolbar (list of integer) @param default flag indicating a default toolbar (boolean) """ self.toolBarId = toolBarId self.actionIDs = actionIDs[:] self.isDefault = default self.title = QString() self.isChanged = False class E4ToolBarDialog(QDialog, Ui_E4ToolBarDialog): """ Class implementing a toolbar configuration dialog. """ ActionIdRole = Qt.UserRole WidgetActionRole = Qt.UserRole + 1 def __init__(self, toolBarManager, parent = None): """ Constructor @param toolBarManager reference to a toolbar manager object (E4ToolBarManager) @param parent reference to the parent widget (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.__manager = toolBarManager self.__toolbarItems = {} # maps toolbar item IDs to toolbar items self.__currentToolBarItem = None self.__removedToolBarIDs = [] # remember custom toolbars to be deleted self.__widgetActionToToolBarItemID = {} # maps widget action IDs to toolbar item IDs self.__toolBarItemToWidgetActionID = {} # maps toolbar item IDs to widget action IDs self.upButton.setIcon(UI.PixmapCache.getIcon("1uparrow.png")) self.downButton.setIcon(UI.PixmapCache.getIcon("1downarrow.png")) self.leftButton.setIcon(UI.PixmapCache.getIcon("1leftarrow.png")) self.rightButton.setIcon(UI.PixmapCache.getIcon("1rightarrow.png")) self.__restoreDefaultsButton = \ self.buttonBox.button(QDialogButtonBox.RestoreDefaults) self.__resetButton = self.buttonBox.button(QDialogButtonBox.Reset) self.actionsTree.header().hide() self.__separatorText = self.trUtf8("--Separator--") itm = QTreeWidgetItem(self.actionsTree, [self.__separatorText]) self.actionsTree.setCurrentItem(itm) for category in sorted(self.__manager.categories()): categoryItem = QTreeWidgetItem(self.actionsTree, [category]) for action in self.__manager.categoryActions(category): item = QTreeWidgetItem(categoryItem) item.setText(0, action.text()) item.setIcon(0, action.icon()) item.setTextAlignment(0, Qt.AlignLeft | Qt.AlignVCenter) item.setData(0, E4ToolBarDialog.ActionIdRole, QVariant(long(id(action)))) item.setData(0, E4ToolBarDialog.WidgetActionRole, QVariant(False)) if self.__manager.isWidgetAction(action): item.setData(0, E4ToolBarDialog.WidgetActionRole, QVariant(True)) item.setData(0, Qt.TextColorRole, QVariant(QColor(Qt.blue))) self.__widgetActionToToolBarItemID[id(action)] = None categoryItem.setExpanded(True) for tbID, actions in self.__manager.toolBarsActions().items(): tb = self.__manager.toolBarById(tbID) default = self.__manager.isDefaultToolBar(tb) tbItem = E4ToolBarItem(tbID, [], default) self.__toolbarItems[id(tbItem)] = tbItem self.__toolBarItemToWidgetActionID[id(tbItem)] = [] actionIDs = [] for action in actions: if action is None: actionIDs.append(None) else: aID = id(action) actionIDs.append(aID) if aID in self.__widgetActionToToolBarItemID: self.__widgetActionToToolBarItemID[aID] = id(tbItem) self.__toolBarItemToWidgetActionID[id(tbItem)].append(aID) tbItem.actionIDs = actionIDs self.toolbarComboBox.addItem(tb.windowTitle(), QVariant(long(id(tbItem)))) if default: self.toolbarComboBox.setItemData(self.toolbarComboBox.count() - 1, QVariant(QColor(Qt.darkGreen)), Qt.ForegroundRole) self.toolbarComboBox.model().sort(0) self.connect(self.toolbarComboBox, SIGNAL("currentIndexChanged(int)"), self.__toolbarComboBox_currentIndexChanged) self.toolbarComboBox.setCurrentIndex(0) @pyqtSignature("") def on_newButton_clicked(self): """ Private slot to create a new toolbar. """ name, ok = KQInputDialog.getText(\ self, self.trUtf8("New Toolbar"), self.trUtf8("Toolbar Name:"), QLineEdit.Normal) if ok and not name.isEmpty(): if self.toolbarComboBox.findText(name) != -1: # toolbar with this name already exists KQMessageBox.critical(self, self.trUtf8("New Toolbar"), self.trUtf8("""A toolbar with the name %1 already exists.""")\ .arg(name), QMessageBox.StandardButtons(\ QMessageBox.Abort)) return tbItem = E4ToolBarItem(None, [], False) tbItem.title = name tbItem.isChanged = True self.__toolbarItems[id(tbItem)] = tbItem self.__toolBarItemToWidgetActionID[id(tbItem)] = [] self.toolbarComboBox.addItem(name, QVariant(long(id(tbItem)))) self.toolbarComboBox.model().sort(0) self.toolbarComboBox.setCurrentIndex(self.toolbarComboBox.findText(name)) @pyqtSignature("") def on_removeButton_clicked(self): """ Private slot to remove a custom toolbar """ name = self.toolbarComboBox.currentText() res = KQMessageBox.question(self, self.trUtf8("Remove Toolbar"), self.trUtf8("""Should the toolbar %1 really be removed?""")\ .arg(name), QMessageBox.StandardButtons(\ QMessageBox.No | \ QMessageBox.Yes), QMessageBox.No) if res == QMessageBox.Yes: index = self.toolbarComboBox.currentIndex() tbItemID = self.toolbarComboBox.itemData(index).toULongLong()[0] tbItem = self.__toolbarItems[tbItemID] if tbItem.toolBarId is not None and \ tbItem.toolBarId not in self.__removedToolBarIDs: self.__removedToolBarIDs.append(tbItem.toolBarId) del self.__toolbarItems[tbItemID] for widgetActionID in self.__toolBarItemToWidgetActionID[tbItemID]: self.__widgetActionToToolBarItemID[widgetActionID] = None del self.__toolBarItemToWidgetActionID[tbItemID] self.toolbarComboBox.removeItem(index) @pyqtSignature("") def on_renameButton_clicked(self): """ Private slot to rename a custom toolbar. """ oldName = self.toolbarComboBox.currentText() newName, ok = KQInputDialog.getText(\ self, self.trUtf8("Rename Toolbar"), self.trUtf8("New Toolbar Name:"), QLineEdit.Normal, oldName) if ok and not newName.isEmpty(): if oldName == newName: return if self.toolbarComboBox.findText(newName) != -1: # toolbar with this name already exists KQMessageBox.critical(self, self.trUtf8("Rename Toolbar"), self.trUtf8("""A toolbar with the name %1 already exists.""")\ .arg(newName), QMessageBox.StandardButtons(\ QMessageBox.Abort)) return index = self.toolbarComboBox.currentIndex() self.toolbarComboBox.setItemText(index, newName) tbItem = \ self.__toolbarItems[self.toolbarComboBox.itemData(index).toULongLong()[0]] tbItem.title = newName tbItem.isChanged = True def __setupButtons(self): """ Private slot to set the buttons state. """ index = self.toolbarComboBox.currentIndex() if index > -1: itemID = self.toolbarComboBox.itemData(index).toULongLong()[0] self.__currentToolBarItem = self.__toolbarItems[itemID] self.renameButton.setEnabled(not self.__currentToolBarItem.isDefault) self.removeButton.setEnabled(not self.__currentToolBarItem.isDefault) self.__restoreDefaultsButton.setEnabled(self.__currentToolBarItem.isDefault) self.__resetButton.setEnabled(self.__currentToolBarItem.toolBarId is not None) row = self.toolbarActionsList.currentRow() self.upButton.setEnabled(row > 0) self.downButton.setEnabled(row < self.toolbarActionsList.count() - 1) self.leftButton.setEnabled(self.toolbarActionsList.count() > 0) rightEnable = self.actionsTree.currentItem().parent() is not None or \ self.actionsTree.currentItem().text(0) == self.__separatorText self.rightButton.setEnabled(rightEnable) @pyqtSignature("int") def __toolbarComboBox_currentIndexChanged(self, index): """ Private slot called upon a selection of the current toolbar. @param index index of the new current toolbar (integer) """ itemID = self.toolbarComboBox.itemData(index).toULongLong()[0] self.__currentToolBarItem = self.__toolbarItems[itemID] self.toolbarActionsList.clear() for actionID in self.__currentToolBarItem.actionIDs: item = QListWidgetItem(self.toolbarActionsList) if actionID is None: item.setText(self.__separatorText) else: action = self.__manager.actionById(actionID) item.setText(action.text()) item.setIcon(action.icon()) item.setTextAlignment(Qt.AlignLeft | Qt.AlignVCenter) item.setData(E4ToolBarDialog.ActionIdRole, QVariant(long(id(action)))) item.setData(E4ToolBarDialog.WidgetActionRole, QVariant(False)) if self.__manager.isWidgetAction(action): item.setData(E4ToolBarDialog.WidgetActionRole, QVariant(True)) item.setData(Qt.TextColorRole, QVariant(QColor(Qt.blue))) self.toolbarActionsList.setCurrentRow(0) self.__setupButtons() @pyqtSignature("QTreeWidgetItem*, QTreeWidgetItem*") def on_actionsTree_currentItemChanged(self, current, previous): """ Private slot called, when the currently selected action changes. """ self.__setupButtons() @pyqtSignature("QListWidgetItem*, QListWidgetItem*") def on_toolbarActionsList_currentItemChanged(self, current, previous): """ Slot documentation goes here. """ self.__setupButtons() @pyqtSignature("") def on_upButton_clicked(self): """ Private slot used to move an action up in the list. """ row = self.toolbarActionsList.currentRow() if row == 0: # we're already at the top return actionID = self.__currentToolBarItem.actionIDs.pop(row) self.__currentToolBarItem.actionIDs.insert(row - 1, actionID) self.__currentToolBarItem.isChanged = True itm = self.toolbarActionsList.takeItem(row) self.toolbarActionsList.insertItem(row - 1, itm) self.toolbarActionsList.setCurrentItem(itm) self.__setupButtons() @pyqtSignature("") def on_downButton_clicked(self): """ Private slot used to move an action down in the list. """ row = self.toolbarActionsList.currentRow() if row == self.toolbarActionsList.count() - 1: # we're already at the end return actionID = self.__currentToolBarItem.actionIDs.pop(row) self.__currentToolBarItem.actionIDs.insert(row + 1, actionID) self.__currentToolBarItem.isChanged = True itm = self.toolbarActionsList.takeItem(row) self.toolbarActionsList.insertItem(row + 1, itm) self.toolbarActionsList.setCurrentItem(itm) self.__setupButtons() @pyqtSignature("") def on_leftButton_clicked(self): """ Private slot to delete an action from the list. """ row = self.toolbarActionsList.currentRow() actionID = self.__currentToolBarItem.actionIDs.pop(row) self.__currentToolBarItem.isChanged = True if actionID in self.__widgetActionToToolBarItemID: self.__widgetActionToToolBarItemID[actionID] = None self.__toolBarItemToWidgetActionID[id(self.__currentToolBarItem)]\ .remove(actionID) itm = self.toolbarActionsList.takeItem(row) del itm self.toolbarActionsList.setCurrentRow(row) self.__setupButtons() @pyqtSignature("") def on_rightButton_clicked(self): """ Private slot to add an action to the list. """ row = self.toolbarActionsList.currentRow() + 1 item = QListWidgetItem() if self.actionsTree.currentItem().text(0) == self.__separatorText: item.setText(self.__separatorText) actionID = None else: actionID = self.actionsTree.currentItem()\ .data(0, E4ToolBarDialog.ActionIdRole).toULongLong()[0] action = self.__manager.actionById(actionID) item.setText(action.text()) item.setIcon(action.icon()) item.setTextAlignment(Qt.AlignLeft | Qt.AlignVCenter) item.setData(E4ToolBarDialog.ActionIdRole, QVariant(long(id(action)))) item.setData(E4ToolBarDialog.WidgetActionRole, QVariant(False)) if self.__manager.isWidgetAction(action): item.setData(E4ToolBarDialog.WidgetActionRole, QVariant(True)) item.setData(Qt.TextColorRole, QVariant(QColor(Qt.blue))) oldTbItemID = self.__widgetActionToToolBarItemID[actionID] if oldTbItemID is not None: self.__toolbarItems[oldTbItemID].actionIDs.remove(actionID) self.__toolbarItems[oldTbItemID].isChanged = True self.__toolBarItemToWidgetActionID[oldTbItemID].remove(actionID) self.__widgetActionToToolBarItemID[actionID] = \ id(self.__currentToolBarItem) self.__toolBarItemToWidgetActionID[id(self.__currentToolBarItem)]\ .append(actionID) self.toolbarActionsList.insertItem(row, item) self.__currentToolBarItem.actionIDs.insert(row, actionID) self.__currentToolBarItem.isChanged = True self.toolbarActionsList.setCurrentRow(row) self.__setupButtons() @pyqtSignature("QAbstractButton*") def on_buttonBox_clicked(self, button): """ Private slot called, when a button of the button box was clicked. """ if button == self.buttonBox.button(QDialogButtonBox.Cancel): self.reject() elif button == self.buttonBox.button(QDialogButtonBox.Apply): self.__saveToolBars() self.__setupButtons() elif button == self.buttonBox.button(QDialogButtonBox.Ok): self.__saveToolBars() self.accept() elif button == self.buttonBox.button(QDialogButtonBox.Reset): self.__resetCurrentToolbar() self.__setupButtons() elif button == self.buttonBox.button(QDialogButtonBox.RestoreDefaults): self.__restoreCurrentToolbarToDefault() self.__setupButtons() def __saveToolBars(self): """ Private method to save the configured toolbars. """ # step 1: remove toolbars marked for deletion for tbID in self.__removedToolBarIDs: tb = self.__manager.toolBarById(tbID) self.__manager.deleteToolBar(tb) self.__removedToolBarIDs = [] # step 2: save configured toolbars for tbItem in self.__toolbarItems.values(): if not tbItem.isChanged: continue if tbItem.toolBarId is None: # new custom toolbar tb = self.__manager.createToolBar(tbItem.title) tbItem.toolBarId = id(tb) else: tb = self.__manager.toolBarById(tbItem.toolBarId) if not tbItem.isDefault and not tbItem.title.isEmpty(): self.__manager.renameToolBar(tb, tbItem.title) actions = [] for actionID in tbItem.actionIDs: if actionID is None: actions.append(None) else: action = self.__manager.actionById(actionID) if action is None: raise RuntimeError("No such action, id: 0x%x" % actionID) actions.append(action) self.__manager.setToolBar(tb, actions) tbItem.isChanged = False def __restoreCurrentToolbar(self, actions): """ Private methdo to restore the current toolbar to the given list of actions. @param actions list of actions to set for the current toolbar (list of QAction) """ tbItemID = id(self.__currentToolBarItem) for widgetActionID in self.__toolBarItemToWidgetActionID[tbItemID]: self.__widgetActionToToolBarItemID[widgetActionID] = None self.__toolBarItemToWidgetActionID[tbItemID] = [] self.__currentToolBarItem.actionIDs = [] for action in actions: if action is None: self.__currentToolBarItem.actionIDs.append(None) else: actionID = id(action) self.__currentToolBarItem.actionIDs.append(actionID) if actionID in self.__widgetActionToToolBarItemID: oldTbItemID = self.__widgetActionToToolBarItemID[actionID] if oldTbItemID is not None: self.__toolbarItems[oldTbItemID].actionIDs.remove(actionID) self.__toolbarItems[oldTbItemID].isChanged = True self.__toolBarItemToWidgetActionID[oldTbItemID].remove(actionID) self.__widgetActionToToolBarItemID[actionID] = tbItemID self.__toolBarItemToWidgetActionID[tbItemID].append(actionID) self.__toolbarComboBox_currentIndexChanged(self.toolbarComboBox.currentIndex()) def __resetCurrentToolbar(self): """ Private method to revert all changes made to the current toolbar. """ tbID = self.__currentToolBarItem.toolBarId actions = self.__manager.toolBarActions(tbID) self.__restoreCurrentToolbar(actions) self.__currentToolBarItem.isChanged = False def __restoreCurrentToolbarToDefault(self): """ Private method to set the current toolbar to its default configuration. """ if not self.__currentToolBarItem.isDefault: return tbID = self.__currentToolBarItem.toolBarId actions = self.__manager.defaultToolBarActions(tbID) self.__restoreCurrentToolbar(actions) self.__currentToolBarItem.isChanged = True eric4-4.5.18/eric/E4Gui/PaxHeaders.8617/E4TableView.py0000644000175000001440000000013212261012647020054 xustar000000000000000030 mtime=1388582311.885075614 30 atime=1389081057.671723489 30 ctime=1389081086.307724332 eric4-4.5.18/eric/E4Gui/E4TableView.py0000644000175000001440000000342312261012647017610 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing specialized table views. """ from PyQt4.QtCore import Qt from PyQt4.QtGui import QTableView, QItemSelectionModel class E4TableView(QTableView): """ Class implementing a table view supporting removal of entries. """ def keyPressEvent(self, evt): """ Protected method implementing special key handling. @param evt reference to the event (QKeyEvent) """ if evt.key() in [Qt.Key_Delete, Qt.Key_Backspace] and \ self.model() is not None: self.removeSelected() evt.setAccepted(True) else: QTableView.keyPressEvent(self, evt) def removeSelected(self): """ Public method to remove the selected entries. """ if self.model() is None or self.selectionModel() is None: # no models available return row = 0 selectedRows = self.selectionModel().selectedRows() for selectedRow in reversed(selectedRows): row = selectedRow.row() self.model().removeRow(row, self.rootIndex()) idx = self.model().index(row, 0, self.rootIndex()) if not idx.isValid(): idx = self.model().index(row - 1, 0, self.rootIndex()) self.selectionModel().select(idx, QItemSelectionModel.SelectCurrent | QItemSelectionModel.Rows) self.setCurrentIndex(idx) def removeAll(self): """ Public method to clear the view. """ if self.model() is not None: self.model().removeRows(0, self.model().rowCount(self.rootIndex()), self.rootIndex()) eric4-4.5.18/eric/E4Gui/PaxHeaders.8617/E4Action.py0000644000175000001440000000013212261012647017407 xustar000000000000000030 mtime=1388582311.888075651 30 atime=1389081057.671723489 30 ctime=1389081086.307724332 eric4-4.5.18/eric/E4Gui/E4Action.py0000644000175000001440000001554712261012647017155 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing an Action class extending QAction. This extension is necessary in order to support alternate keyboard shortcuts. """ from PyQt4.QtGui import QAction, QActionGroup, QIcon, QKeySequence, qApp from PyQt4.QtCore import QObject, QString class ArgumentsError(RuntimeError): """ Class implementing an exception, which is raised, if the wrong number of arguments are given. """ def __init__(self, error): """ Constructor """ self.errorMessage = unicode(error) def __repr__(self): """ Private method returning a representation of the exception. @return string representing the error message """ return unicode(self.errorMessage) def __str__(self): """ Private method returning a string representation of the exception. @return string representing the error message """ return str(self.errorMessage) class E4Action(QAction): """ Class implementing an Action class extending QAction. """ def __init__(self, *args): """ Constructor @param args argument list of the constructor. This list is one of

    • text (string or QString), icon (QIcon), menu text (string or QString), accelarator (QKeySequence), alternative accelerator (QKeySequence), parent (QObject), name (string or QString), toggle (boolean)
    • text (string or QString), icon (QIcon), menu text (string or QString), accelarator (QKeySequence), alternative accelerator (QKeySequence), parent (QObject), name (string or QString)
    • text (string or QString), menu text (string or QString), accelarator (QKeySequence), alternative accelerator (QKeySequence), parent (QObject), name (string or QString), toggle (boolean)
    • text (string or QString), menu text (string or QString), accelarator (QKeySequence), alternative accelerator (QKeySequence), parent (QObject), name (string or QString)
    """ if isinstance(args[1], QIcon): icon = args[1] incr = 1 else: icon = None incr = 0 if len(args) < 6+incr: raise ArgumentsError("Not enough arguments, %d expected, got %d" % \ (6+incr, len(args))) elif len(args) > 7+incr: raise ArgumentsError("Too many arguments, max. %d expected, got %d" % \ (7+incr, len(args))) parent = args[4+incr] QAction.__init__(self, parent) name = args[5+incr] if name: self.setObjectName(name) if args[1+incr]: self.setText(args[1+incr]) if args[0]: self.setIconText(args[0]) if args[2+incr]: self.setShortcut(QKeySequence(args[2+incr])) if args[3+incr]: self.setAlternateShortcut(QKeySequence(args[3+incr])) if icon: self.setIcon(icon) if len(args) == 7+incr: self.setCheckable(args[6+incr]) def setAlternateShortcut(self, shortcut, removeEmpty=False): """ Public slot to set the alternative keyboard shortcut. @param shortcut the alternative accelerator (QKeySequence) @param removeEmpty flag indicating to remove the alternate shortcut, if it is empty (boolean) """ if not shortcut.isEmpty(): shortcuts = self.shortcuts() if len(shortcuts) > 0: if len(shortcuts) == 1: shortcuts.append(shortcut) else: shortcuts[1] = shortcut self.setShortcuts(shortcuts) elif removeEmpty: shortcuts = self.shortcuts() if len(shortcuts) == 2: del shortcuts[1] self.setShortcuts(shortcuts) def alternateShortcut(self): """ Public method to retrieve the alternative keyboard shortcut. @return the alternative accelerator (QKeySequence) """ shortcuts = self.shortcuts() if len(shortcuts) < 2: return QKeySequence() else: return shortcuts[1] def setShortcut(self, shortcut): """ Public slot to set the keyboard shortcut. @param shortcut the accelerator (QKeySequence) """ QAction.setShortcut(self, shortcut) self.__ammendToolTip() def setShortcuts(self, shortcuts): """ Public slot to set the list of keyboard shortcuts. @param shortcuts list of keyboard accelerators (list of QKeySequence) or key for a platform dependent list of accelerators (QKeySequence.StandardKey) """ QAction.setShortcuts(self, shortcuts) self.__ammendToolTip() def setIconText(self, text): """ Public slot to set the icon text of the action. @param text new tool tip (string or QString) """ QAction.setIconText(self, text) self.__ammendToolTip() def __ammendToolTip(self): """ Private slot to add the primary keyboard accelerator to the tooltip. """ shortcut = self.shortcut().toString(QKeySequence.NativeText) if not shortcut.isEmpty(): if qApp.isLeftToRight(): fmt = QString("%1 (%2)") else: fmt = QString("(%2) %1") self.setToolTip(fmt.arg(self.iconText()).arg(shortcut)) def addActions(target, actions): """ Module function to add a list of actions to a widget. @param target reference to the target widget (QWidget) @param actions list of actions to be added to the target. A None indicates a separator (list of QActions) """ if target is None: return for action in actions: if action is None: target.addSeparator() else: target.addAction(action) def createActionGroup(parent, name = None, exclusive = False): """ Module function to create an action group. @param parent parent object of the action group (QObject) @param name name of the action group object (string or QString) @param exclusive flag indicating an exclusive action group (boolean) @return reference to the created action group (QActionGroup) """ actGrp = QActionGroup(parent) if name: actGrp.setObjectName(name) actGrp.setExclusive(exclusive) return actGrp eric4-4.5.18/eric/E4Gui/PaxHeaders.8617/E4TreeView.py0000644000175000001440000000013112261012647017723 xustar000000000000000029 mtime=1388582311.89107569 30 atime=1389081057.671723489 30 ctime=1389081086.307724332 eric4-4.5.18/eric/E4Gui/E4TreeView.py0000644000175000001440000000277112261012647017465 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing specialized tree views. """ from PyQt4.QtCore import Qt from PyQt4.QtGui import QTreeView, QItemSelectionModel class E4TreeView(QTreeView): """ Class implementing a tree view supporting removal of entries. """ def keyPressEvent(self, evt): """ Protected method implementing special key handling. @param evt reference to the event (QKeyEvent) """ if evt.key() in [Qt.Key_Delete, Qt.Key_Backspace] and \ self.model() is not None: self.removeSelected() evt.setAccepted(True) else: QTreeView.keyPressEvent(self, evt) def removeSelected(self): """ Public method to remove the selected entries. """ if self.model() is None or \ self.selectionModel() is None or \ not self.selectionModel().hasSelection(): # no models available or nothing selected return selectedRows = self.selectionModel().selectedRows() for idx in reversed(sorted(selectedRows)): self.model().removeRow(idx.row(), idx.parent()) def removeAll(self): """ Public method to clear the view. """ if self.model() is not None: self.model().removeRows(0, self.model().rowCount(self.rootIndex()), self.rootIndex()) eric4-4.5.18/eric/E4Gui/PaxHeaders.8617/E4SingleApplication.py0000644000175000001440000000013212261012647021577 xustar000000000000000030 mtime=1388582311.893075715 30 atime=1389081057.671723489 30 ctime=1389081086.307724332 eric4-4.5.18/eric/E4Gui/E4SingleApplication.py0000644000175000001440000001122512261012647021332 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2004 - 2014 Detlev Offenbach # """ Module implementing the single application server and client. """ import sys import os from KdeQt.KQApplication import e4App from Utilities.SingleApplication import SingleApplicationClient, SingleApplicationServer import Utilities ########################################################################### # define some module global stuff ########################################################################### SAFile = "eric4.lck" # define the protocol tokens SAOpenFile = '>OpenFile<' SAOpenProject = '>OpenProject<' SAArguments = '>Arguments<' class E4SingleApplicationServer(SingleApplicationServer): """ Class implementing the single application server embedded within the IDE. """ def __init__(self): """ Constructor """ SingleApplicationServer.__init__(self, SAFile) def handleCommand(self, cmd, params): """ Public slot to handle the command sent by the client. @param cmd commandstring (string) @param params parameterstring (string) """ if cmd == SAOpenFile: self.__saOpenFile(params) return if cmd == SAOpenProject: self.__saOpenProject(params) return if cmd == SAArguments: self.__saArguments(params) return def __saOpenFile(self, fname): """ Private method used to handle the "Open File" command. @param fname filename to be opened (string) """ e4App().getObject("ViewManager").openSourceFile(fname) def __saOpenProject(self, pfname): """ Private method used to handle the "Open Project" command. @param pfname filename of the project to be opened (string) """ e4App().getObject("Project").openProject(pfname) def __saArguments(self, argsStr): """ Private method used to handle the "Arguments" command. @param argsStr space delimited list of command args(string) """ e4App().getObject("DebugUI").setArgvHistory(argsStr) class E4SingleApplicationClient(SingleApplicationClient): """ Class implementing the single application client of the IDE. """ def __init__(self): """ Constructor """ SingleApplicationClient.__init__(self, SAFile) def processArgs(self, args): """ Public method to process the command line args passed to the UI. @param args list of files to open """ # no args, return if args is None: return # holds space delimited list of command args, if any argsStr = None # flag indicating '--' options was found ddseen = False if Utilities.isWindowsPlatform(): argChars = ['-', '/'] else: argChars = ['-'] for arg in args: if arg == '--' and not ddseen: ddseen = True continue if arg[0] in argChars or ddseen: if argsStr is None: argsStr = arg else: argsStr = "%s %s" % (argsStr, arg) continue ext = os.path.splitext(arg)[1] ext = os.path.normcase(ext) if ext in ['.e3p', '.e3pz', '.e4p', '.e4pz']: self.__openProject(arg) else: self.__openFile(arg) # send any args we had if argsStr is not None: self.__sendArguments(argsStr) self.disconnect() def __openFile(self, fname): """ Private method to open a file in the application server. @param fname name of file to be opened (string) """ cmd = "%s%s\n" % (SAOpenFile, Utilities.normabspath(fname)) self.sendCommand(cmd) def __openProject(self, pfname): """ Private method to open a project in the application server. @param pfname name of the projectfile to be opened (string) """ cmd = "%s%s\n" % (SAOpenProject, Utilities.normabspath(pfname)) self.sendCommand(cmd) def __sendArguments(self, argsStr): """ Private method to set the command arguments in the application server. @param argsStr space delimited list of command args (string) """ cmd = "%s%s\n" % (SAArguments, argsStr) self.sendCommand(cmd)eric4-4.5.18/eric/PaxHeaders.8617/patch_modpython.py0000644000175000001440000000013112261012647020263 xustar000000000000000030 mtime=1388582311.896075753 29 atime=1389081086.00472434 30 ctime=1389081086.307724332 eric4-4.5.18/eric/patch_modpython.py0000644000175000001440000001027512261012647020023 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003-2014 Detlev Offenbach # # This is a script to patch mod_python for eric4. """ Script to patch mod_python for usage with the eric4 IDE. """ import sys import os import shutil import py_compile import distutils.sysconfig # Define the globals. progName = None modDir = None def usage(rcode = 2): """ Display a usage message and exit. rcode is the return code passed back to the calling process. """ global progName, modDir print "Usage:" print " %s [-h] [-d dir]" % (progName) print "where:" print " -h display this help message" print " -d dir where Mod_python files are installed [default %s]" % \ (modDir) print print "This script patches the file apache.py of the Mod_python distribution" print "so that it will work with the eric4 debugger instead of pdb." print "Please see mod_python.html for more details." print sys.exit(rcode) def initGlobals(): """ Sets the values of globals that need more than a simple assignment. """ global modDir modDir = os.path.join(distutils.sysconfig.get_python_lib(True), "mod_python") def main(argv): """The main function of the script. argv is the list of command line arguments. """ import getopt # Parse the command line. global progName, modDir progName = os.path.basename(argv[0]) initGlobals() try: optlist, args = getopt.getopt(argv[1:],"hd:") except getopt.GetoptError: usage() for opt, arg in optlist: if opt == "-h": usage(0) elif opt == "-d": global modDir modDir = arg try: filename = os.path.join(modDir, "apache.py") f = open(filename, "r") except EnvironmentError: print "The file %s does not exist. Aborting." % filename sys.exit(1) lines = f.readlines() f.close() pdbFound = False ericFound = False sn = "apache.py" s = open(sn, "w") for line in lines: if not pdbFound and line.startswith("import pdb"): s.write("import eric4.DebugClients.Python.eric4dbgstub as pdb\n") pdbFound = True else: s.write(line) if line.startswith("import eric4"): ericFound = True if not ericFound: s.write("\n") s.write('def initDebugger(name):\n') s.write(' """\n') s.write(' Initialize the debugger and set the script name to be reported \n') s.write(' by the debugger. This is a patch for eric4.\n') s.write(' """\n') s.write(' if not pdb.initDebugger("standard"):\n') s.write(' raise ImportError("Could not initialize debugger")\n') s.write(' pdb.setScriptname(name)\n') s.write("\n") s.close() if ericFound: print "Mod_python is already patched for eric4." os.remove(sn) else: try: py_compile.compile(sn) except py_compile.PyCompileError, e: print "Error compiling %s. Aborting" % sn print e os.remove(sn) sys.exit(1) except SyntaxError, e: print "Error compiling %s. Aborting" % sn print e os.remove(sn) sys.exit(1) shutil.copy(os.path.join(modDir, "apache.py"), os.path.join(modDir, "apache.py.orig")) shutil.copy(sn, modDir) os.remove(sn) if os.path.exists("%sc" % sn): shutil.copy("%sc" % sn, modDir) os.remove("%sc" % sn) if os.path.exists("%so" % sn): shutil.copy("%so" % sn, modDir) os.remove("%so" % sn) print "Mod_python patched successfully." print "Unpatched file copied to %s." % os.path.join(modDir, "apache.py.orig") if __name__ == "__main__": try: main(sys.argv) except SystemExit: raise except: print \ """An internal error occured. Please report all the output of the program, including the following traceback, to eric-bugs@die-offenbachs.de. """ raise eric4-4.5.18/eric/PaxHeaders.8617/Plugins0000644000175000001440000000013112261012660016050 xustar000000000000000030 mtime=1388582320.483183967 29 atime=1389081086.01372434 30 ctime=1389081086.315724332 eric4-4.5.18/eric/Plugins/0000755000175000001440000000000012261012660015660 5ustar00detlevusers00000000000000eric4-4.5.18/eric/Plugins/PaxHeaders.8617/PluginWizardQMessageBox.py0000644000175000001440000000013012261012647023221 xustar000000000000000030 mtime=1388582311.899075791 28 atime=1389081082.7687244 30 ctime=1389081086.307724332 eric4-4.5.18/eric/Plugins/PluginWizardQMessageBox.py0000644000175000001440000000776412261012647022773 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing the QMessageBox wizard plugin. """ from PyQt4.QtCore import QObject, SIGNAL, QString from PyQt4.QtGui import QDialog from KdeQt.KQApplication import e4App from KdeQt import KQMessageBox from E4Gui.E4Action import E4Action from WizardPlugins.MessageBoxWizard.MessageBoxWizardDialog import \ MessageBoxWizardDialog # Start-Of-Header name = "QMessageBox Wizard Plugin" author = "Detlev Offenbach " autoactivate = True deactivateable = True version = "4.4.0" className = "MessageBoxWizard" packageName = "__core__" shortDescription = "Show the QMessageBox wizard." longDescription = """This plugin shows the QMessageBox wizard.""" # End-Of-Header error = QString("") class MessageBoxWizard(QObject): """ Class implementing the QMessageBox wizard plugin. """ def __init__(self, ui): """ Constructor @param ui reference to the user interface object (UI.UserInterface) """ QObject.__init__(self, ui) self.__ui = ui def activate(self): """ Public method to activate this plugin. @return tuple of None and activation status (boolean) """ self.__initAction() self.__initMenu() return None, True def deactivate(self): """ Public method to deactivate this plugin. """ menu = self.__ui.getMenu("wizards") if menu: menu.removeAction(self.action) self.__ui.removeE4Actions([self.action], 'wizards') def __initAction(self): """ Private method to initialize the action. """ self.action = E4Action(self.trUtf8('QMessageBox Wizard'), self.trUtf8('Q&MessageBox Wizard...'), 0, 0, self, 'wizards_qmessagebox') self.action.setStatusTip(self.trUtf8('QMessageBox Wizard')) self.action.setWhatsThis(self.trUtf8( """QMessageBox Wizard""" """

    This wizard opens a dialog for entering all the parameters""" """ needed to create a QMessageBox. The generated code is inserted""" """ at the current cursor position.

    """ )) self.connect(self.action, SIGNAL('triggered()'), self.__handle) self.__ui.addE4Actions([self.action], 'wizards') def __initMenu(self): """ Private method to add the actions to the right menu. """ menu = self.__ui.getMenu("wizards") if menu: menu.addAction(self.action) def __callForm(self, editor): """ Private method to display a dialog and get the code. @param editor reference to the current editor @return the generated code (string) """ dlg = MessageBoxWizardDialog(None) if dlg.exec_() == QDialog.Accepted: line, index = editor.getCursorPosition() indLevel = editor.indentation(line)/editor.indentationWidth() if editor.indentationsUseTabs(): indString = '\t' else: indString = editor.indentationWidth() * ' ' return (dlg.getCode(indLevel, indString), True) else: return (None, False) def __handle(self): """ Private method to handle the wizards action """ editor = e4App().getObject("ViewManager").activeWindow() if editor == None: KQMessageBox.critical(None, self.trUtf8('No current editor'), self.trUtf8('Please open or create a file first.')) else: code, ok = self.__callForm(editor) if ok: line, index = editor.getCursorPosition() # It should be done on this way to allow undo editor.beginUndoAction() editor.insertAt(code, line, index) editor.endUndoAction() eric4-4.5.18/eric/Plugins/PaxHeaders.8617/PluginVmMdiArea.py0000644000175000001440000000013012261012647021467 xustar000000000000000030 mtime=1388582311.901075817 28 atime=1389081082.7687244 30 ctime=1389081086.307724332 eric4-4.5.18/eric/Plugins/PluginVmMdiArea.py0000644000175000001440000000346212261012647021230 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2008 - 2014 Detlev Offenbach # """ Module implementing the mdi area view manager plugin. """ import os from PyQt4.QtCore import QT_TRANSLATE_NOOP, QString, qVersion from PyQt4.QtGui import QPixmap # Start-Of-Header name = "Workspace Plugin" author = "Detlev Offenbach " autoactivate = False deactivateable = False version = "4.4.0" pluginType = "viewmanager" pluginTypename = "mdiarea" displayString = QT_TRANSLATE_NOOP('VmMdiAreaPlugin', 'MDI Area') className = "VmMdiAreaPlugin" packageName = "__core__" shortDescription = "Implements the MDI Area view manager." longDescription = """This plugin provides the mdi area view manager.""" # End-Of-Header error = QString("") def previewPix(): """ Module function to return a preview pixmap. @return preview pixmap (QPixmap) """ fname = os.path.join(os.path.dirname(__file__), "ViewManagerPlugins", "MdiArea", "preview.png") return QPixmap(fname) class VmMdiAreaPlugin(object): """ Class implementing the Workspace view manager plugin. """ def __init__(self, ui): """ Constructor @param ui reference to the user interface object (UI.UserInterface) """ self.__ui = ui def activate(self): """ Public method to activate this plugin. @return tuple of reference to instantiated viewmanager and activation status (boolean) """ from ViewManagerPlugins.MdiArea.MdiArea import MdiArea self.__object = MdiArea(self.__ui) return self.__object, True def deactivate(self): """ Public method to deactivate this plugin. """ # do nothing for the moment pass eric4-4.5.18/eric/Plugins/PaxHeaders.8617/CheckerPlugins0000644000175000001440000000013112261012660020756 xustar000000000000000030 mtime=1388582320.078178905 29 atime=1389081086.01372434 30 ctime=1389081086.315724332 eric4-4.5.18/eric/Plugins/CheckerPlugins/0000755000175000001440000000000012261012660020566 5ustar00detlevusers00000000000000eric4-4.5.18/eric/Plugins/CheckerPlugins/PaxHeaders.8617/SyntaxChecker0000644000175000001440000000013212262730776023552 xustar000000000000000030 mtime=1389081086.300724332 30 atime=1389081086.305724332 30 ctime=1389081086.315724332 eric4-4.5.18/eric/Plugins/CheckerPlugins/SyntaxChecker/0000755000175000001440000000000012262730776023361 5ustar00detlevusers00000000000000eric4-4.5.18/eric/Plugins/CheckerPlugins/SyntaxChecker/PaxHeaders.8617/__init__.py0000644000175000001440000000013012261012647025723 xustar000000000000000030 mtime=1388582311.904075855 28 atime=1389081082.7687244 30 ctime=1389081086.307724332 eric4-4.5.18/eric/Plugins/CheckerPlugins/SyntaxChecker/__init__.py0000644000175000001440000000023212261012647025454 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Package containing the Syntax Checker plugin. """ eric4-4.5.18/eric/Plugins/CheckerPlugins/SyntaxChecker/PaxHeaders.8617/SyntaxCheckerDialog.ui0000644000175000001440000000007411072705623030055 xustar000000000000000030 atime=1389081082.784724399 30 ctime=1389081086.307724332 eric4-4.5.18/eric/Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.ui0000644000175000001440000000523111072705623027603 0ustar00detlevusers00000000000000 SyntaxCheckerDialog 0 0 572 424 Syntax Check Result <b>Syntax Check Results</b> <p>This dialog shows the results of the syntax check. Double clicking an entry will open an editor window and position the cursor at the respective line.</p> true <b>Result List</b> <p>This list shows the results of the syntax check. Double clicking an entry will open this entry in an editor window and position the cursor at the respective line.</p> true false false true Filename # Syntax Error Source Shows the progress of the syntax check action 0 Qt::Horizontal Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Close qPixmapFromMimeSource resultList eric4-4.5.18/eric/Plugins/CheckerPlugins/SyntaxChecker/PaxHeaders.8617/SyntaxCheckerDialog.py0000644000175000001440000000013212261012647030061 xustar000000000000000030 mtime=1388582311.909075919 30 atime=1389081082.784724399 30 ctime=1389081086.307724332 eric4-4.5.18/eric/Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py0000644000175000001440000001636212261012647027623 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Module implementing a simple Python syntax checker. """ import sys import os import types from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt.KQApplication import e4App from Ui_SyntaxCheckerDialog import Ui_SyntaxCheckerDialog import Utilities class SyntaxCheckerDialog(QDialog, Ui_SyntaxCheckerDialog): """ Class implementing a dialog to display the results of a syntax check run. """ def __init__(self, parent = None): """ Constructor @param parent The parent widget. (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.showButton = self.buttonBox.addButton(\ self.trUtf8("Show"), QDialogButtonBox.ActionRole) self.showButton.setToolTip(\ self.trUtf8("Press to show all files containing a syntax error")) self.buttonBox.button(QDialogButtonBox.Close).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Cancel).setDefault(True) self.resultList.headerItem().setText(self.resultList.columnCount(), "") self.resultList.header().setSortIndicator(0, Qt.AscendingOrder) self.noResults = True self.cancelled = False def __resort(self): """ Private method to resort the tree. """ self.resultList.sortItems(self.resultList.sortColumn(), self.resultList.header().sortIndicatorOrder()) def __createResultItem(self, file, line, index, error, sourcecode): """ Private method to create an entry in the result list. @param file file name of file (string or QString) @param line line number of faulty source (integer or string) @param index index number of fault (integer) @param error error text (string or QString) @param sourcecode faulty line of code (string) """ itm = QTreeWidgetItem(self.resultList) itm.setTextAlignment(1, Qt.AlignRight) itm.setData(0, Qt.DisplayRole, file) itm.setData(1, Qt.DisplayRole, line) itm.setData(2, Qt.DisplayRole, error) itm.setData(3, Qt.DisplayRole, sourcecode) itm.setData(0, Qt.UserRole, QVariant(int(index))) def start(self, fn, codestring = ""): """ Public slot to start the syntax check. @param fn file or list of files or directory to be checked (string or list of strings) @param codestring string containing the code to be checked (string). If this is given, file must be a single file name. """ if type(fn) is types.ListType: files = fn elif os.path.isdir(fn): files = Utilities.direntries(fn, 1, '*.py', 0) files += Utilities.direntries(fn, 1, '*.pyw', 0) files += Utilities.direntries(fn, 1, '*.ptl', 0) else: files = [fn] files = [f for f in files \ if f.endswith(".py") or f.endswith(".pyw") or f.endswith(".ptl")] if (codestring and len(files) == 1) or \ (not codestring and len(files) > 0): self.checkProgress.setMaximum(len(files)) QApplication.processEvents() # now go through all the files progress = 0 for file in files: if self.cancelled: return nok, fname, line, index, code, error = Utilities.compile(file, codestring) if nok: self.noResults = False self.__createResultItem(fname, line, index, error, code) progress += 1 self.checkProgress.setValue(progress) QApplication.processEvents() self.__resort() else: self.checkProgress.setMaximum(1) self.checkProgress.setValue(1) self.__finish() def __finish(self): """ Private slot called when the syntax check finished or the user pressed the button. """ self.cancelled = True self.buttonBox.button(QDialogButtonBox.Close).setEnabled(True) self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Close).setDefault(True) if self.noResults: self.__createResultItem(self.trUtf8('No syntax errors found.'), "", 0, "", "") QApplication.processEvents() self.showButton.setEnabled(False) self.__clearErrors() else: self.showButton.setEnabled(True) self.resultList.header().resizeSections(QHeaderView.ResizeToContents) self.resultList.header().setStretchLastSection(True) def on_buttonBox_clicked(self, button): """ Private slot called by a button of the button box clicked. @param button button that was clicked (QAbstractButton) """ if button == self.buttonBox.button(QDialogButtonBox.Close): self.close() elif button == self.buttonBox.button(QDialogButtonBox.Cancel): self.__finish() elif button == self.showButton: self.on_showButton_clicked() def on_resultList_itemActivated(self, itm, col): """ Private slot to handle the activation of an item. @param itm reference to the activated item (QTreeWidgetItem) @param col column the item was activated in (integer) """ if self.noResults: return fn = Utilities.normabspath(unicode(itm.text(0))) lineno = int(str(itm.text(1))) error = unicode(itm.text(2)) index = itm.data(0, Qt.UserRole).toInt()[0] vm = e4App().getObject("ViewManager") vm.openSourceFile(fn, lineno) editor = vm.getOpenEditor(fn) editor.toggleSyntaxError(lineno, index, True, error, show = True) @pyqtSignature("") def on_showButton_clicked(self): """ Private slot to handle the "Show" button press. """ for index in range(self.resultList.topLevelItemCount()): itm = self.resultList.topLevelItem(index) self.on_resultList_itemActivated(itm, 0) # go through the list again to clear syntax error markers # for files, that are ok vm = e4App().getObject("ViewManager") openFiles = vm.getOpenFilenames() errorFiles = [] for index in range(self.resultList.topLevelItemCount()): itm = self.resultList.topLevelItem(index) errorFiles.append(Utilities.normabspath(unicode(itm.text(0)))) for file in openFiles: if not file in errorFiles: editor = vm.getOpenEditor(file) editor.clearSyntaxError() def __clearErrors(self): """ Private method to clear all error markers of open editors. """ vm = e4App().getObject("ViewManager") openFiles = vm.getOpenFilenames() for file in openFiles: editor = vm.getOpenEditor(file) editor.clearSyntaxError() eric4-4.5.18/eric/Plugins/CheckerPlugins/PaxHeaders.8617/Tabnanny0000644000175000001440000000013212262730776022551 xustar000000000000000030 mtime=1389081086.300724332 30 atime=1389081086.305724332 30 ctime=1389081086.315724332 eric4-4.5.18/eric/Plugins/CheckerPlugins/Tabnanny/0000755000175000001440000000000012262730776022360 5ustar00detlevusers00000000000000eric4-4.5.18/eric/Plugins/CheckerPlugins/Tabnanny/PaxHeaders.8617/__init__.py0000644000175000001440000000013212261012647024724 xustar000000000000000030 mtime=1388582311.912075957 30 atime=1389081082.784724399 30 ctime=1389081086.307724332 eric4-4.5.18/eric/Plugins/CheckerPlugins/Tabnanny/__init__.py0000644000175000001440000000022412261012647024454 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Package containing the Tabnanny plugin. """ eric4-4.5.18/eric/Plugins/CheckerPlugins/Tabnanny/PaxHeaders.8617/TabnannyDialog.py0000644000175000001440000000013212261012647026057 xustar000000000000000030 mtime=1388582311.914075982 30 atime=1389081082.784724399 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/CheckerPlugins/Tabnanny/TabnannyDialog.py0000644000175000001440000001167212261012647025620 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Module implementing a dialog to show the output of the tabnanny command process. """ import sys import os import types from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt.KQApplication import e4App from Ui_TabnannyDialog import Ui_TabnannyDialog import Tabnanny import Utilities class TabnannyDialog(QDialog, Ui_TabnannyDialog): """ Class implementing a dialog to show the results of the tabnanny check run. """ def __init__(self, parent = None): """ Constructor @param parent The parent widget (QWidget). """ QDialog.__init__(self, parent) self.setupUi(self) self.buttonBox.button(QDialogButtonBox.Close).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Cancel).setDefault(True) self.resultList.headerItem().setText(self.resultList.columnCount(), "") self.resultList.header().setSortIndicator(0, Qt.AscendingOrder) self.noResults = True self.cancelled = False def __resort(self): """ Private method to resort the tree. """ self.resultList.sortItems(self.resultList.sortColumn(), self.resultList.header().sortIndicatorOrder()) def __createResultItem(self, file, line, sourcecode): """ Private method to create an entry in the result list. @param file filename of file (string or QString) @param line linenumber of faulty source (integer or string) @param sourcecode faulty line of code (string) """ itm = QTreeWidgetItem(self.resultList) itm.setData(0, Qt.DisplayRole, file) itm.setData(1, Qt.DisplayRole, line) itm.setData(2, Qt.DisplayRole, sourcecode) itm.setTextAlignment(1, Qt.AlignRight) def start(self, fn): """ Public slot to start the tabnanny check. @param fn File or list of files or directory to be checked (string or list of strings) """ if type(fn) is types.ListType: files = fn elif os.path.isdir(fn): files = Utilities.direntries(fn, 1, '*.py', 0) files += Utilities.direntries(fn, 1, '*.pyw', 0) files += Utilities.direntries(fn, 1, '*.ptl', 0) else: files = [fn] files = [f for f in files \ if f.endswith(".py") or f.endswith(".pyw") or f.endswith(".ptl")] if len(files) > 0: self.checkProgress.setMaximum(len(files)) QApplication.processEvents() # now go through all the files progress = 0 for file in files: if self.cancelled: return nok, fname, line, error = Tabnanny.check(file) if nok: self.noResults = False self.__createResultItem(fname, line, `error.rstrip()`[1:-1]) progress += 1 self.checkProgress.setValue(progress) QApplication.processEvents() self.__resort() else: self.checkProgress.setMaximum(1) self.checkProgress.setValue(1) self.__finish() def __finish(self): """ Private slot called when the action or the user pressed the button. """ self.cancelled = True self.buttonBox.button(QDialogButtonBox.Close).setEnabled(True) self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Close).setDefault(True) if self.noResults: self.__createResultItem(self.trUtf8('No indentation errors found.'), "", "") QApplication.processEvents() self.resultList.header().resizeSections(QHeaderView.ResizeToContents) self.resultList.header().setStretchLastSection(True) def on_buttonBox_clicked(self, button): """ Private slot called by a button of the button box clicked. @param button button that was clicked (QAbstractButton) """ if button == self.buttonBox.button(QDialogButtonBox.Close): self.close() elif button == self.buttonBox.button(QDialogButtonBox.Cancel): self.__finish() def on_resultList_itemActivated(self, itm, col): """ Private slot to handle the activation of an item. @param itm reference to the activated item (QTreeWidgetItem) @param col column the item was activated in (integer) """ if self.noResults: return fn = Utilities.normabspath(unicode(itm.text(0))) lineno = int(str(itm.text(1))) e4App().getObject("ViewManager").openSourceFile(fn, lineno) eric4-4.5.18/eric/Plugins/CheckerPlugins/Tabnanny/PaxHeaders.8617/Tabnanny.py0000644000175000001440000000013212261012647024737 xustar000000000000000030 mtime=1388582311.916076008 30 atime=1389081082.784724399 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/CheckerPlugins/Tabnanny/Tabnanny.py0000644000175000001440000003316212261012647024476 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- """ The Tab Nanny despises ambiguous indentation. She knows no mercy. tabnanny -- Detection of ambiguous indentation For the time being this module is intended to be called as a script. However it is possible to import it into an IDE and use the function check() described below. Warning: The API provided by this module is likely to change in future releases; such changes may not be backward compatible. This is a modified version to make the original tabnanny better suitable for being called from within the eric4 IDE. @exception ValueError The tokenize module is too old. """ # Released to the public domain, by Tim Peters, 15 April 1998. # XXX Note: this is now a standard library module. # XXX The API needs to undergo changes however; the current code is too # XXX script-like. This will be addressed later. # # This is a modified version to make the original tabnanny better suitable # for being called from within the eric4 IDE. The modifications are as # follows: # # - there is no main function anymore # - check function has been modified to only accept a filename and return # a tuple indicating status (1 = an error was found), the filename, the # linenumber and the error message (boolean, string, string, string). The # values are only valid, if the status equals 1. # # Modifications copyright (c) 2003 Detlev Offenbach # __version__ = "6_eric" import os import sys import tokenize import cStringIO import Utilities if not hasattr(tokenize, 'NL'): raise ValueError("tokenize.NL doesn't exist -- tokenize module too old") __all__ = ["check", "NannyNag", "process_tokens"] class NannyNag(Exception): """ Raised by tokeneater() if detecting an ambiguous indent. Captured and handled in check(). """ def __init__(self, lineno, msg, line): """ Constructor @param lineno Line number of the ambiguous indent. @param msg Descriptive message assigned to this problem. @param line The offending source line. """ self.lineno, self.msg, self.line = lineno, msg, line def get_lineno(self): """ Method to retrieve the line number. @return The line number (integer) """ return self.lineno def get_msg(self): """ Method to retrieve the message. @return The error message (string) """ return self.msg def get_line(self): """ Method to retrieve the offending line. @return The line of code (string) """ return self.line def check(file): """ Private function to check one Python source file for whitespace related problems. @param file source filename (string) @return A tuple indicating status (True = an error was found), the filename, the linenumber and the error message (boolean, string, string, string). The values are only valid, if the status is True. """ global indents, check_equal indents = [Whitespace("")] check_equal = 0 try: f = open(file) except IOError, msg: return (True, file, "1", "I/O Error: %s" % str(msg)) try: text = Utilities.decode(f.read())[0].encode('utf-8') finally: f.close() # convert eols text = Utilities.convertLineEnds(text, os.linesep) source = cStringIO.StringIO(text) try: process_tokens(tokenize.generate_tokens(source.readline)) except tokenize.TokenError, msg: f.close() return (True, file, "1", "Token Error: %s" % str(msg)) except IndentationError, err: f.close() return (True, file, err.lineno, "Indentation Error: %s" % str(err.msg)) except NannyNag, nag: badline = nag.get_lineno() line = nag.get_line() f.close() return (True, file, str(badline), line) except Exception, err: f.close() return (True, file, "1", "Unspecific Error: %s" % str(err)) f.close() return (False, None, None, None) class Whitespace(object): """ Class implementing the whitespace checker. """ # the characters used for space and tab S, T = ' \t' # members: # raw # the original string # n # the number of leading whitespace characters in raw # nt # the number of tabs in raw[:n] # norm # the normal form as a pair (count, trailing), where: # count # a tuple such that raw[:n] contains count[i] # instances of S * i + T # trailing # the number of trailing spaces in raw[:n] # It's A Theorem that m.indent_level(t) == # n.indent_level(t) for all t >= 1 iff m.norm == n.norm. # is_simple # true iff raw[:n] is of the form (T*)(S*) def __init__(self, ws): """ Constructor @param ws The string to be checked. """ self.raw = ws S, T = Whitespace.S, Whitespace.T count = [] b = n = nt = 0 for ch in self.raw: if ch == S: n = n + 1 b = b + 1 elif ch == T: n = n + 1 nt = nt + 1 if b >= len(count): count = count + [0] * (b - len(count) + 1) count[b] = count[b] + 1 b = 0 else: break self.n = n self.nt = nt self.norm = tuple(count), b self.is_simple = len(count) <= 1 # return length of longest contiguous run of spaces (whether or not # preceding a tab) def longest_run_of_spaces(self): """ Method to calculate the length of longest contiguous run of spaces. @return The length of longest contiguous run of spaces (whether or not preceding a tab) """ count, trailing = self.norm return max(len(count)-1, trailing) def indent_level(self, tabsize): """ Method to determine the indentation level. @param tabsize The length of a tab stop. (integer) @return indentation level (integer) """ # count, il = self.norm # for i in range(len(count)): # if count[i]: # il = il + (i/tabsize + 1)*tabsize * count[i] # return il # quicker: # il = trailing + sum (i/ts + 1)*ts*count[i] = # trailing + ts * sum (i/ts + 1)*count[i] = # trailing + ts * sum i/ts*count[i] + count[i] = # trailing + ts * [(sum i/ts*count[i]) + (sum count[i])] = # trailing + ts * [(sum i/ts*count[i]) + num_tabs] # and note that i/ts*count[i] is 0 when i < ts count, trailing = self.norm il = 0 for i in range(tabsize, len(count)): il = il + i/tabsize * count[i] return trailing + tabsize * (il + self.nt) # return true iff self.indent_level(t) == other.indent_level(t) # for all t >= 1 def equal(self, other): """ Method to compare the indentation levels of two Whitespace objects for equality. @param other Whitespace object to compare against. @return True, if we compare equal against the other Whitespace object. """ return self.norm == other.norm # return a list of tuples (ts, i1, i2) such that # i1 == self.indent_level(ts) != other.indent_level(ts) == i2. # Intended to be used after not self.equal(other) is known, in which # case it will return at least one witnessing tab size. def not_equal_witness(self, other): """ Method to calculate a tuple of witnessing tab size. Intended to be used after not self.equal(other) is known, in which case it will return at least one witnessing tab size. @param other Whitespace object to calculate against. @return A list of tuples (ts, i1, i2) such that i1 == self.indent_level(ts) != other.indent_level(ts) == i2. """ n = max(self.longest_run_of_spaces(), other.longest_run_of_spaces()) + 1 a = [] for ts in range(1, n+1): if self.indent_level(ts) != other.indent_level(ts): a.append( (ts, self.indent_level(ts), other.indent_level(ts)) ) return a # Return True iff self.indent_level(t) < other.indent_level(t) # for all t >= 1. # The algorithm is due to Vincent Broman. # Easy to prove it's correct. # XXXpost that. # Trivial to prove n is sharp (consider T vs ST). # Unknown whether there's a faster general way. I suspected so at # first, but no longer. # For the special (but common!) case where M and N are both of the # form (T*)(S*), M.less(N) iff M.len() < N.len() and # M.num_tabs() <= N.num_tabs(). Proof is easy but kinda long-winded. # XXXwrite that up. # Note that M is of the form (T*)(S*) iff len(M.norm[0]) <= 1. def less(self, other): """ Method to compare the indentation level against another Whitespace objects to be smaller. @param other Whitespace object to compare against. @return True, if we compare less against the other Whitespace object. """ if self.n >= other.n: return False if self.is_simple and other.is_simple: return self.nt <= other.nt n = max(self.longest_run_of_spaces(), other.longest_run_of_spaces()) + 1 # the self.n >= other.n test already did it for ts=1 for ts in range(2, n+1): if self.indent_level(ts) >= other.indent_level(ts): return False return True # return a list of tuples (ts, i1, i2) such that # i1 == self.indent_level(ts) >= other.indent_level(ts) == i2. # Intended to be used after not self.less(other) is known, in which # case it will return at least one witnessing tab size. def not_less_witness(self, other): """ Method to calculate a tuple of witnessing tab size. Intended to be used after not self.less(other is known, in which case it will return at least one witnessing tab size. @param other Whitespace object to calculate against. @return A list of tuples (ts, i1, i2) such that i1 == self.indent_level(ts) >= other.indent_level(ts) == i2. """ n = max(self.longest_run_of_spaces(), other.longest_run_of_spaces()) + 1 a = [] for ts in range(1, n+1): if self.indent_level(ts) >= other.indent_level(ts): a.append( (ts, self.indent_level(ts), other.indent_level(ts)) ) return a def format_witnesses(w): """ Function to format the witnesses as a readable string. @param w A list of witnesses @return A formated string of the witnesses. """ firsts = map(lambda tup: str(tup[0]), w) prefix = "at tab size" if len(w) > 1: prefix = prefix + "s" return prefix + " " + ', '.join(firsts) def process_tokens(tokens): """ Function processing all tokens generated by a tokenizer run. @param tokens list of tokens """ INDENT = tokenize.INDENT DEDENT = tokenize.DEDENT NEWLINE = tokenize.NEWLINE JUNK = tokenize.COMMENT, tokenize.NL indents = [Whitespace("")] check_equal = 0 for (type, token, start, end, line) in tokens: if type == NEWLINE: # a program statement, or ENDMARKER, will eventually follow, # after some (possibly empty) run of tokens of the form # (NL | COMMENT)* (INDENT | DEDENT+)? # If an INDENT appears, setting check_equal is wrong, and will # be undone when we see the INDENT. check_equal = 1 elif type == INDENT: check_equal = 0 thisguy = Whitespace(token) if not indents[-1].less(thisguy): witness = indents[-1].not_less_witness(thisguy) msg = "indent not greater e.g. " + format_witnesses(witness) raise NannyNag(start[0], msg, line) indents.append(thisguy) elif type == DEDENT: # there's nothing we need to check here! what's important is # that when the run of DEDENTs ends, the indentation of the # program statement (or ENDMARKER) that triggered the run is # equal to what's left at the top of the indents stack # Ouch! This assert triggers if the last line of the source # is indented *and* lacks a newline -- then DEDENTs pop out # of thin air. # assert check_equal # else no earlier NEWLINE, or an earlier INDENT check_equal = 1 del indents[-1] elif check_equal and type not in JUNK: # this is the first "real token" following a NEWLINE, so it # must be the first token of the next program statement, or an # ENDMARKER; the "line" argument exposes the leading whitespace # for this statement; in the case of ENDMARKER, line is an empty # string, so will properly match the empty string with which the # "indents" stack was seeded check_equal = 0 thisguy = Whitespace(line) if not indents[-1].equal(thisguy): witness = indents[-1].not_equal_witness(thisguy) msg = "indent not equal e.g. " + format_witnesses(witness) raise NannyNag(start[0], msg, line) eric4-4.5.18/eric/Plugins/CheckerPlugins/Tabnanny/PaxHeaders.8617/TabnannyDialog.ui0000644000175000001440000000007411072705623026053 xustar000000000000000030 atime=1389081082.784724399 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/CheckerPlugins/Tabnanny/TabnannyDialog.ui0000644000175000001440000000503111072705623025577 0ustar00detlevusers00000000000000 TabnannyDialog 0 0 572 339 Tabnanny Result <b>Tabnanny Results</b> <p>This dialog shows the results of the tabnanny command. Double clicking an entry will open an editor window and position the cursor at the respective line.</p> true <b>Result List</b> <p>This list shows the results of the tabnanny command. Double clicking an entry will open this entry in an editor window and position the cursor at the respective line.</p> true false false true Filename # Source Shows the progress of the tabnanny action 0 Qt::Horizontal Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Close qPixmapFromMimeSource resultList eric4-4.5.18/eric/Plugins/CheckerPlugins/PaxHeaders.8617/__init__.py0000644000175000001440000000013212261012647023152 xustar000000000000000030 mtime=1388582311.921076071 30 atime=1389081082.784724399 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/CheckerPlugins/__init__.py0000644000175000001440000000024112261012647022701 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Package containing the various core checker plugins. """ eric4-4.5.18/eric/Plugins/PaxHeaders.8617/PluginTabnanny.py0000644000175000001440000000013212261012647021436 xustar000000000000000030 mtime=1388582311.923076096 30 atime=1389081082.784724399 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/PluginTabnanny.py0000644000175000001440000002272112261012647021174 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing the Tabnanny plugin. """ import os from PyQt4.QtCore import QObject, SIGNAL, QString from KdeQt.KQApplication import e4App from E4Gui.E4Action import E4Action from CheckerPlugins.Tabnanny.TabnannyDialog import TabnannyDialog # Start-Of-Header name = "Tabnanny Plugin" author = "Detlev Offenbach " autoactivate = True deactivateable = True version = "4.4.0" className = "TabnannyPlugin" packageName = "__core__" shortDescription = "Show the Tabnanny dialog." longDescription = """This plugin implements the Tabnanny dialog.""" \ """ Tabnanny is used to check Python source files for correct indentations.""" # End-Of-Header error = QString("") class TabnannyPlugin(QObject): """ Class implementing the Tabnanny plugin. """ def __init__(self, ui): """ Constructor @param ui reference to the user interface object (UI.UserInterface) """ QObject.__init__(self, ui) self.__ui = ui self.__initialize() def __initialize(self): """ Private slot to (re)initialize the plugin. """ self.__projectAct = None self.__projectTabnannyDialog = None self.__projectBrowserAct = None self.__projectBrowserMenu = None self.__projectBrowserTabnannyDialog = None self.__editors = [] self.__editorAct = None self.__editorTabnannyDialog = None def activate(self): """ Public method to activate this plugin. @return tuple of None and activation status (boolean) """ menu = e4App().getObject("Project").getMenu("Checks") if menu: self.__projectAct = E4Action(self.trUtf8('Check Indentations'), self.trUtf8('&Indentations...'), 0, 0, self,'project_check_indentations') self.__projectAct.setStatusTip(\ self.trUtf8('Check indentations using tabnanny.')) self.__projectAct.setWhatsThis(self.trUtf8( """Check Indentations...""" """

    This checks Python files""" """ for bad indentations using tabnanny.

    """ )) self.connect(self.__projectAct, SIGNAL('triggered()'), self.__projectTabnanny) e4App().getObject("Project").addE4Actions([self.__projectAct]) menu.addAction(self.__projectAct) self.__editorAct = E4Action(self.trUtf8('Check Indentations'), self.trUtf8('&Indentations...'), 0, 0, self, "") self.__editorAct.setWhatsThis(self.trUtf8( """Check Indentations...""" """

    This checks Python files""" """ for bad indentations using tabnanny.

    """ )) self.connect(self.__editorAct, SIGNAL('triggered()'), self.__editorTabnanny) self.connect(e4App().getObject("Project"), SIGNAL("showMenu"), self.__projectShowMenu) self.connect(e4App().getObject("ProjectBrowser").getProjectBrowser("sources"), SIGNAL("showMenu"), self.__projectBrowserShowMenu) self.connect(e4App().getObject("ViewManager"), SIGNAL("editorOpenedEd"), self.__editorOpened) self.connect(e4App().getObject("ViewManager"), SIGNAL("editorClosedEd"), self.__editorClosed) for editor in e4App().getObject("ViewManager").getOpenEditors(): self.__editorOpened(editor) return None, True def deactivate(self): """ Public method to deactivate this plugin. """ self.disconnect(e4App().getObject("Project"), SIGNAL("showMenu"), self.__projectShowMenu) self.disconnect(e4App().getObject("ProjectBrowser").getProjectBrowser("sources"), SIGNAL("showMenu"), self.__projectBrowserShowMenu) self.disconnect(e4App().getObject("ViewManager"), SIGNAL("editorOpenedEd"), self.__editorOpened) self.disconnect(e4App().getObject("ViewManager"), SIGNAL("editorClosedEd"), self.__editorClosed) menu = e4App().getObject("Project").getMenu("Checks") if menu: menu.removeAction(self.__projectAct) if self.__projectBrowserMenu: if self.__projectBrowserAct: self.__projectBrowserMenu.removeAction(self.__projectBrowserAct) for editor in self.__editors: self.disconnect(editor, SIGNAL("showMenu"), self.__editorShowMenu) menu = editor.getMenu("Checks") if menu is not None: menu.removeAction(self.__editorAct) self.__initialize() def __projectShowMenu(self, menuName, menu): """ Private slot called, when the the project menu or a submenu is about to be shown. @param menuName name of the menu to be shown (string) @param menu reference to the menu (QMenu) """ if menuName == "Checks" and self.__projectAct is not None: self.__projectAct.setEnabled(\ e4App().getObject("Project").getProjectLanguage() == "Python") def __projectBrowserShowMenu(self, menuName, menu): """ Private slot called, when the the project browser context menu or a submenu is about to be shown. @param menuName name of the menu to be shown (string) @param menu reference to the menu (QMenu) """ if menuName == "Checks" and \ e4App().getObject("Project").getProjectLanguage() == "Python": self.__projectBrowserMenu = menu if self.__projectBrowserAct is None: self.__projectBrowserAct = E4Action(self.trUtf8('Check Indentations'), self.trUtf8('&Indentations...'), 0, 0, self, "") self.__projectBrowserAct.setWhatsThis(self.trUtf8( """Check Indentations...""" """

    This checks Python files""" """ for bad indentations using tabnanny.

    """ )) self.connect(self.__projectBrowserAct, SIGNAL('triggered()'), self.__projectBrowserTabnanny) if not self.__projectBrowserAct in menu.actions(): menu.addAction(self.__projectBrowserAct) def __projectTabnanny(self): """ Public slot used to check the project files for bad indentations. """ project = e4App().getObject("Project") project.saveAllScripts() files = [os.path.join(project.ppath, file) \ for file in project.pdata["SOURCES"] \ if file.endswith(".py") or \ file.endswith(".pyw") or \ file.endswith(".ptl")] self.__projectTabnannyDialog = TabnannyDialog() self.__projectTabnannyDialog.show() self.__projectTabnannyDialog.start(files) def __projectBrowserTabnanny(self): """ Private method to handle the tabnanny context menu action of the project sources browser. """ browser = e4App().getObject("ProjectBrowser").getProjectBrowser("sources") itm = browser.model().item(browser.currentIndex()) try: fn = itm.fileName() except AttributeError: fn = itm.dirName() self.__projectBrowserTabnannyDialog = TabnannyDialog() self.__projectBrowserTabnannyDialog.show() self.__projectBrowserTabnannyDialog.start(fn) def __editorOpened(self, editor): """ Private slot called, when a new editor was opened. @param editor reference to the new editor (QScintilla.Editor) """ menu = editor.getMenu("Checks") if menu is not None: menu.addAction(self.__editorAct) self.connect(editor, SIGNAL("showMenu"), self.__editorShowMenu) self.__editors.append(editor) def __editorClosed(self, editor): """ Private slot called, when an editor was closed. @param editor reference to the editor (QScintilla.Editor) """ try: self.__editors.remove(editor) except ValueError: pass def __editorShowMenu(self, menuName, menu, editor): """ Private slot called, when the the editor context menu or a submenu is about to be shown. @param menuName name of the menu to be shown (string) @param menu reference to the menu (QMenu) @param editor reference to the editor """ if menuName == "Checks": if not self.__editorAct in menu.actions(): menu.addAction(self.__editorAct) self.__editorAct.setEnabled(editor.isPyFile()) def __editorTabnanny(self): """ Private slot to handle the tabnanny context menu action of the editors. """ editor = e4App().getObject("ViewManager").activeWindow() if editor is not None: if not editor.checkDirty(): return self.__editorTabnannyDialog = TabnannyDialog() self.__editorTabnannyDialog.show() self.__editorTabnannyDialog.start(editor.getFileName()) eric4-4.5.18/eric/Plugins/PaxHeaders.8617/PluginVcsSubversion.py0000644000175000001440000000013212261012647022477 xustar000000000000000030 mtime=1388582311.925076122 30 atime=1389081082.784724399 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/PluginVcsSubversion.py0000644000175000001440000001555312261012647022242 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing the Subversion version control plugin. """ import os import sys from PyQt4.QtCore import QString, QVariant from PyQt4.QtGui import QApplication from KdeQt.KQApplication import e4App import Preferences from Preferences.Shortcuts import readShortcuts from VcsPlugins.vcsSubversion.SvnUtilities import getConfigPath, getServersPath import Utilities # Start-Of-Header name = "Subversion Plugin" author = "Detlev Offenbach " autoactivate = False deactivateable = True version = "4.4.0" pluginType = "version_control" pluginTypename = "Subversion" className = "VcsSubversionPlugin" packageName = "__core__" shortDescription = "Implements the Subversion version control interface." longDescription = """This plugin provides the Subversion version control interface.""" # End-Of-Header error = QString("") def exeDisplayData(): """ Public method to support the display of some executable info. @return dictionary containing the data to query the presence of the executable """ exe = 'svn' if Utilities.isWindowsPlatform(): exe += '.exe' data = { "programEntry" : True, "header" : QApplication.translate("VcsSubversionPlugin", "Version Control - Subversion (svn)"), "exe" : exe, "versionCommand" : '--version', "versionStartsWith" : 'svn', "versionPosition" : 2, "version" : "", "versionCleanup" : None, } return data def getVcsSystemIndicator(): """ Public function to get the indicators for this version control system. @return dictionary with indicator as key and a tuple with the vcs name (string) and vcs display string (QString) """ global pluginTypename data = {} exe = 'svn' if Utilities.isWindowsPlatform(): exe += '.exe' if Utilities.isinpath(exe): data[".svn"] = (pluginTypename, displayString()) data["_svn"] = (pluginTypename, displayString()) return data def displayString(): """ Public function to get the display string. @return display string (QString) """ exe = 'svn' if Utilities.isWindowsPlatform(): exe += '.exe' if Utilities.isinpath(exe): return QApplication.translate('VcsSubversionPlugin', 'Subversion (svn)') else: return QString() subversionCfgPluginObject = None def createConfigurationPage(configDlg): """ Module function to create the configuration page. @return reference to the configuration page """ global subversionCfgPluginObject from VcsPlugins.vcsSubversion.ConfigurationPage.SubversionPage import SubversionPage if subversionCfgPluginObject is None: subversionCfgPluginObject = VcsSubversionPlugin(None) page = SubversionPage(subversionCfgPluginObject) return page def getConfigData(): """ Module function returning data as required by the configuration dialog. @return dictionary with key "zzz_subversionPage" containing the relevant data """ return { "zzz_subversionPage" : \ [QApplication.translate("VcsSubversionPlugin", "Subversion"), os.path.join("VcsPlugins", "vcsSubversion", "icons", "preferences-subversion.png"), createConfigurationPage, "vcsPage", None], } def prepareUninstall(): """ Module function to prepare for an uninstallation. """ if not e4App().getObject("PluginManager").isPluginLoaded("PluginVcsSubversion"): Preferences.Prefs.settings.remove("Subversion") class VcsSubversionPlugin(object): """ Class implementing the Subversion version control plugin. """ def __init__(self, ui): """ Constructor @param ui reference to the user interface object (UI.UserInterface) """ self.__ui = ui self.__subversionDefaults = { "StopLogOnCopy" : 1, "LogLimit" : 100, "CommitMessages" : 20, } from VcsPlugins.vcsSubversion.ProjectHelper import SvnProjectHelper self.__projectHelperObject = SvnProjectHelper(None, None) try: e4App().registerPluginObject(pluginTypename, self.__projectHelperObject, pluginType) except KeyError: pass # ignore duplicate registration readShortcuts(pluginName = pluginTypename) def getProjectHelper(self): """ Public method to get a reference to the project helper object. @return reference to the project helper object """ return self.__projectHelperObject def activate(self): """ Public method to activate this plugin. @return tuple of reference to instantiated viewmanager and activation status (boolean) """ from VcsPlugins.vcsSubversion.subversion import Subversion self.__object = Subversion(self, self.__ui) return self.__object, True def deactivate(self): """ Public method to deactivate this plugin. """ self.__object = None def getPreferences(self, key): """ Public method to retrieve the various refactoring settings. @param key the key of the value to get @param prefClass preferences class used as the storage area @return the requested refactoring setting """ if key in ["Commits"]: return Preferences.Prefs.settings.value("Subversion/" + key).toStringList() else: return Preferences.Prefs.settings.value("Subversion/" + key, QVariant(self.__subversionDefaults[key])).toInt()[0] def setPreferences(self, key, value): """ Public method to store the various refactoring settings. @param key the key of the setting to be set @param value the value to be set @param prefClass preferences class used as the storage area """ Preferences.Prefs.settings.setValue("Subversion/" + key, QVariant(value)) def getServersPath(self): """ Public method to get the filename of the servers file. @return filename of the servers file (string) """ return getServersPath() def getConfigPath(self): """ Public method to get the filename of the config file. @return filename of the config file (string) """ return getConfigPath() def prepareUninstall(self): """ Public method to prepare for an uninstallation. """ e4App().unregisterPluginObject(pluginTypename) eric4-4.5.18/eric/Plugins/PaxHeaders.8617/PluginWizardQFileDialog.py0000644000175000001440000000013112261012647023164 xustar000000000000000029 mtime=1388582311.92807616 30 atime=1389081082.785724399 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/PluginWizardQFileDialog.py0000644000175000001440000000775512261012647022735 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing the QFileDialog wizard plugin. """ from PyQt4.QtCore import QObject, SIGNAL, QString from PyQt4.QtGui import QDialog from KdeQt.KQApplication import e4App from KdeQt import KQMessageBox from E4Gui.E4Action import E4Action from WizardPlugins.FileDialogWizard.FileDialogWizardDialog import \ FileDialogWizardDialog # Start-Of-Header name = "QFileDialog Wizard Plugin" author = "Detlev Offenbach " autoactivate = True deactivateable = True version = "4.4.0" className = "FileDialogWizard" packageName = "__core__" shortDescription = "Show the QFileDialog wizard." longDescription = """This plugin shows the QFileDialog wizard.""" # End-Of-Header error = QString("") class FileDialogWizard(QObject): """ Class implementing the QFileDialog wizard plugin. """ def __init__(self, ui): """ Constructor @param ui reference to the user interface object (UI.UserInterface) """ QObject.__init__(self, ui) self.__ui = ui def activate(self): """ Public method to activate this plugin. @return tuple of None and activation status (boolean) """ self.__initAction() self.__initMenu() return None, True def deactivate(self): """ Public method to deactivate this plugin. """ menu = self.__ui.getMenu("wizards") if menu: menu.removeAction(self.action) self.__ui.removeE4Actions([self.action], 'wizards') def __initAction(self): """ Private method to initialize the action. """ self.action = E4Action(self.trUtf8('QFileDialog Wizard'), self.trUtf8('Q&FileDialog Wizard...'), 0, 0, self, 'wizards_qfiledialog') self.action.setStatusTip(self.trUtf8('QFileDialog Wizard')) self.action.setWhatsThis(self.trUtf8( """QFileDialog Wizard""" """

    This wizard opens a dialog for entering all the parameters""" """ needed to create a QFileDialog. The generated code is inserted""" """ at the current cursor position.

    """ )) self.connect(self.action, SIGNAL('triggered()'), self.__handle) self.__ui.addE4Actions([self.action], 'wizards') def __initMenu(self): """ Private method to add the actions to the right menu. """ menu = self.__ui.getMenu("wizards") if menu: menu.addAction(self.action) def __callForm(self, editor): """ Private method to display a dialog and get the code. @param editor reference to the current editor @return the generated code (string) """ dlg = FileDialogWizardDialog(None) if dlg.exec_() == QDialog.Accepted: line, index = editor.getCursorPosition() indLevel = editor.indentation(line)/editor.indentationWidth() if editor.indentationsUseTabs(): indString = '\t' else: indString = editor.indentationWidth() * ' ' return (dlg.getCode(indLevel, indString), 1) else: return (None, 0) def __handle(self): """ Private method to handle the wizards action """ editor = e4App().getObject("ViewManager").activeWindow() if editor == None: KQMessageBox.critical(None, self.trUtf8('No current editor'), self.trUtf8('Please open or create a file first.')) else: code, ok = self.__callForm(editor) if ok: line, index = editor.getCursorPosition() # It should be done on this way to allow undo editor.beginUndoAction() editor.insertAt(code, line, index) editor.endUndoAction() eric4-4.5.18/eric/Plugins/PaxHeaders.8617/__init__.py0000644000175000001440000000013212261012647020244 xustar000000000000000030 mtime=1388582311.930076186 30 atime=1389081082.785724399 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/__init__.py0000644000175000001440000000022112261012647017771 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Package containing all core plugins. """ eric4-4.5.18/eric/Plugins/PaxHeaders.8617/PluginVmTabview.py0000644000175000001440000000013212261012647021570 xustar000000000000000030 mtime=1388582311.932076211 30 atime=1389081082.785724399 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/PluginVmTabview.py0000644000175000001440000000345012261012647021324 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing the Tabview view manager plugin. """ import os from PyQt4.QtCore import QT_TRANSLATE_NOOP, QString from PyQt4.QtGui import QPixmap # Start-Of-Header name = "Tabview Plugin" author = "Detlev Offenbach " autoactivate = False deactivateable = False version = "4.4.0" pluginType = "viewmanager" pluginTypename = "tabview" displayString = QT_TRANSLATE_NOOP('VmTabviewPlugin', 'Tabbed View') className = "VmTabviewPlugin" packageName = "__core__" shortDescription = "Implements the Tabview view manager." longDescription = """This plugin provides the tabbed view view manager.""" # End-Of-Header error = QString("") def previewPix(): """ Module function to return a preview pixmap. @return preview pixmap (QPixmap) """ fname = os.path.join(os.path.dirname(__file__), "ViewManagerPlugins", "Tabview", "preview.png") return QPixmap(fname) class VmTabviewPlugin(object): """ Class implementing the Tabview view manager plugin. """ def __init__(self, ui): """ Constructor @param ui reference to the user interface object (UI.UserInterface) """ self.__ui = ui def activate(self): """ Public method to activate this plugin. @return tuple of reference to instantiated viewmanager and activation status (boolean) """ from ViewManagerPlugins.Tabview.Tabview import Tabview self.__object = Tabview(self.__ui) return self.__object, True def deactivate(self): """ Public method to deactivate this plugin. """ # do nothing for the moment pass eric4-4.5.18/eric/Plugins/PaxHeaders.8617/PluginWizardQRegExp.py0000644000175000001440000000013212261012647022360 xustar000000000000000030 mtime=1388582311.934076237 30 atime=1389081082.785724399 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/PluginWizardQRegExp.py0000644000175000001440000000767112261012647022125 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing the QRegExp wizard plugin. """ from PyQt4.QtCore import QObject, SIGNAL, QString from PyQt4.QtGui import QDialog from KdeQt.KQApplication import e4App from KdeQt import KQMessageBox from E4Gui.E4Action import E4Action from WizardPlugins.QRegExpWizard.QRegExpWizardDialog import \ QRegExpWizardDialog # Start-Of-Header name = "QRegExp Wizard Plugin" author = "Detlev Offenbach " autoactivate = True deactivateable = True version = "4.4.0" className = "QRegExpWizard" packageName = "__core__" shortDescription = "Show the QRegExp wizard." longDescription = """This plugin shows the QRegExp wizard.""" # End-Of-Header error = QString("") class QRegExpWizard(QObject): """ Class implementing the QRegExp wizard plugin. """ def __init__(self, ui): """ Constructor @param ui reference to the user interface object (UI.UserInterface) """ QObject.__init__(self, ui) self.__ui = ui def activate(self): """ Public method to activate this plugin. @return tuple of None and activation status (boolean) """ self.__initAction() self.__initMenu() return None, True def deactivate(self): """ Public method to deactivate this plugin. """ menu = self.__ui.getMenu("wizards") if menu: menu.removeAction(self.action) self.__ui.removeE4Actions([self.action], 'wizards') def __initAction(self): """ Private method to initialize the action. """ self.action = E4Action(self.trUtf8('QRegExp Wizard'), self.trUtf8('Q&RegExp Wizard...'), 0, 0, self, 'wizards_qregexp') self.action.setStatusTip(self.trUtf8('QRegExp Wizard')) self.action.setWhatsThis(self.trUtf8( """QRegExp Wizard""" """

    This wizard opens a dialog for entering all the parameters""" """ needed to create a QRegExp. The generated code is inserted""" """ at the current cursor position.

    """ )) self.connect(self.action, SIGNAL('triggered()'), self.__handle) self.__ui.addE4Actions([self.action], 'wizards') def __initMenu(self): """ Private method to add the actions to the right menu. """ menu = self.__ui.getMenu("wizards") if menu: menu.addAction(self.action) def __callForm(self, editor): """ Private method to display a dialog and get the code. @param editor reference to the current editor @return the generated code (string) """ dlg = QRegExpWizardDialog(None, True) if dlg.exec_() == QDialog.Accepted: line, index = editor.getCursorPosition() indLevel = editor.indentation(line)/editor.indentationWidth() if editor.indentationsUseTabs(): indString = '\t' else: indString = editor.indentationWidth() * ' ' return (dlg.getCode(indLevel, indString), 1) else: return (None, False) def __handle(self): """ Private method to handle the wizards action """ editor = e4App().getObject("ViewManager").activeWindow() if editor == None: KQMessageBox.critical(None, self.trUtf8('No current editor'), self.trUtf8('Please open or create a file first.')) else: code, ok = self.__callForm(editor) if ok: line, index = editor.getCursorPosition() # It should be done on this way to allow undo editor.beginUndoAction() editor.insertAt(code, line, index) editor.endUndoAction() eric4-4.5.18/eric/Plugins/PaxHeaders.8617/DocumentationPlugins0000644000175000001440000000013112261012660022223 xustar000000000000000030 mtime=1388582320.089179042 29 atime=1389081086.01372434 30 ctime=1389081086.315724332 eric4-4.5.18/eric/Plugins/DocumentationPlugins/0000755000175000001440000000000012261012660022033 5ustar00detlevusers00000000000000eric4-4.5.18/eric/Plugins/DocumentationPlugins/PaxHeaders.8617/__init__.py0000644000175000001440000000013212261012647024417 xustar000000000000000030 mtime=1388582311.937076274 30 atime=1389081082.791724398 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/DocumentationPlugins/__init__.py0000644000175000001440000000025412261012647024152 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Package containing the various core documentation tool plugins. """ eric4-4.5.18/eric/Plugins/DocumentationPlugins/PaxHeaders.8617/Ericdoc0000644000175000001440000000013212262730776023614 xustar000000000000000030 mtime=1389081086.300724332 30 atime=1389081086.305724332 30 ctime=1389081086.315724332 eric4-4.5.18/eric/Plugins/DocumentationPlugins/Ericdoc/0000755000175000001440000000000012262730776023423 5ustar00detlevusers00000000000000eric4-4.5.18/eric/Plugins/DocumentationPlugins/Ericdoc/PaxHeaders.8617/EricdocConfigDialog.ui0000644000175000001440000000007411152264372030042 xustar000000000000000030 atime=1389081082.791724398 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/DocumentationPlugins/Ericdoc/EricdocConfigDialog.ui0000644000175000001440000004666511152264372027610 0ustar00detlevusers00000000000000 EricdocConfigDialog 0 0 542 550 Ericdoc Configuration true 0 General Output Directory: Enter an output directory Qt::NoFocus Press to open a directory selection dialog ... Additional source extensions: Enter additional source extensions separated by a comma Select to recurse into subdirectories Recurse into subdirectories Select, if no index files should be generated Don't generate index files Qt::Horizontal QSizePolicy::Expanding 145 20 Select to exclude empty modules Don't include empty modules Qt::Horizontal QSizePolicy::Expanding 40 20 Exclude Files: Enter filename patterns of files to be excluded separated by a comma Exclude Directories Enter a directory basename to be ignored Press to add the entered directory to the list Add Press to delete the selected directory from the list Delete Qt::NoFocus Press to open a directory selection dialog ... List of directory basenames to be ignored Style Style Sheet Enter the filename of a CSS style sheet. Leave empty to use the colours defined below. Qt::NoFocus Press to open a file selection dialog ... Colours Press to select the class and function header background colour. Class/Function Header Background Press to select the class and function header foreground colour. Class/Function Header Foreground Press to select the level 2 header background colour. Level 2 Header Background Press to select the level 2 header foreground colour. Level 2 Header Foreground Press to select the level 1 header background colour. Level 1 Header Background Press to select the level 1 header foreground colour. Level 1 Header Foreground Press to select the body background colour. Body Background Press to select the body foreground colour. Body Foreground Press to select the foreground colour of links. Links This shows an example of the selected colours. true QtHelp Generate QtHelp Files true false Output Directory: Enter an output directory Qt::NoFocus Press to open a directory selection dialog ... Namespace: Enter the namespace Virtual Folder: Enter the name of the virtual folder (must not contain '/') Filter Name: Enter the name of the custom filter Filter Attributes: Enter the filter attributes separated by ':' Title: Enter a short title for the top entry Select to generate the QtHelp collection files Generate QtHelp collection files Qt::Vertical 20 271 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok qPixmapFromMimeSource tabWidget outputDirEdit sourceExtEdit recursionCheckBox noindexCheckBox noemptyCheckBox excludeFilesEdit ignoreDirsList ignoreDirEdit addButton deleteButton cssEdit bodyFgButton bodyBgButton l1FgButton l1BgButton l2FgButton l2BgButton cfFgButton cfBgButton linkFgButton sample qtHelpGroup qtHelpDirEdit qtHelpNamespaceEdit qtHelpFolderEdit qtHelpFilterNameEdit qtHelpFilterAttributesEdit qtHelpTitleEdit qtHelpGenerateCollectionCheckBox buttonBox buttonBox accepted() EricdocConfigDialog accept() 31 480 31 498 buttonBox rejected() EricdocConfigDialog reject() 125 482 125 499 eric4-4.5.18/eric/Plugins/DocumentationPlugins/Ericdoc/PaxHeaders.8617/__init__.py0000644000175000001440000000013212261012647025767 xustar000000000000000030 mtime=1388582311.942076338 30 atime=1389081082.791724398 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/DocumentationPlugins/Ericdoc/__init__.py0000644000175000001440000000022312261012647025516 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Package containing the Ericdoc plugin. """ eric4-4.5.18/eric/Plugins/DocumentationPlugins/Ericdoc/PaxHeaders.8617/EricdocConfigDialog.py0000644000175000001440000000013212261012647030046 xustar000000000000000030 mtime=1388582311.947076402 30 atime=1389081082.791724398 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/DocumentationPlugins/Ericdoc/EricdocConfigDialog.py0000644000175000001440000005056612261012647027614 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Module implementing a dialog to enter the parameters for eric4_doc. """ import sys import os import copy from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQFileDialog from E4Gui.E4Completers import E4DirCompleter from Ui_EricdocConfigDialog import Ui_EricdocConfigDialog from DocumentationTools.Config import eric4docDefaultColors, eric4docColorParameterNames import Utilities from eric4config import getConfig class EricdocConfigDialog(QDialog, Ui_EricdocConfigDialog): """ Class implementing a dialog to enter the parameters for eric4_doc. """ def __init__(self, project, parms = None, parent = None): """ Constructor @param project reference to the project object (Project.Project) @param parms parameters to set in the dialog @param parent parent widget of this dialog """ QDialog.__init__(self,parent) self.setupUi(self) self.__okButton = self.buttonBox.button(QDialogButtonBox.Ok) self.__initializeDefaults() self.sampleText = unicode(self.trUtf8(\ '''''' '''''' '''''' '''%%(Title)s''' '''''' '''''' '''

    ''' '''Level 1 Header

    ''' '''

    ''' '''Level 2 Header

    ''' '''

    ''' '''Class and Function Header

    ''' '''Standard body text with ''' '''some links embedded.''' '''''' )) # get a copy of the defaults to store the user settings self.parameters = copy.deepcopy(self.defaults) self.colors = eric4docDefaultColors.copy() # combine it with the values of parms if parms is not None: for key, value in parms.items(): if key.endswith("Color"): self.colors[key] = parms[key] else: self.parameters[key] = parms[key] self.ppath = project.getProjectPath() self.project = project self.outputDirCompleter = E4DirCompleter(self.outputDirEdit) self.ignoreDirCompleter = E4DirCompleter(self.ignoreDirEdit) self.qtHelpDirCompleter = E4DirCompleter(self.qtHelpDirEdit) self.recursionCheckBox.setChecked(self.parameters['useRecursion']) self.noindexCheckBox.setChecked(self.parameters['noindex']) self.noemptyCheckBox.setChecked(self.parameters['noempty']) self.outputDirEdit.setText(self.parameters['outputDirectory']) self.ignoreDirsList.clear() for d in self.parameters['ignoreDirectories']: self.ignoreDirsList.addItem(d) self.cssEdit.setText(self.parameters['cssFile']) self.sourceExtEdit.setText(", ".join(self.parameters['sourceExtensions'])) self.excludeFilesEdit.setText(", ".join(self.parameters['ignoreFilePatterns'])) self.sample.setHtml(self.sampleText % self.colors) self.qtHelpGroup.setChecked(self.parameters['qtHelpEnabled']) self.qtHelpDirEdit.setText(self.parameters['qtHelpOutputDirectory']) self.qtHelpNamespaceEdit.setText(self.parameters['qtHelpNamespace']) self.qtHelpFolderEdit.setText(self.parameters['qtHelpVirtualFolder']) self.qtHelpFilterNameEdit.setText(self.parameters['qtHelpFilterName']) self.qtHelpFilterAttributesEdit.setText(self.parameters['qtHelpFilterAttributes']) self.qtHelpTitleEdit.setText(self.parameters['qtHelpTitle']) self.qtHelpGenerateCollectionCheckBox.setChecked( self.parameters['qtHelpCreateCollection']) def __initializeDefaults(self): """ Private method to set the default values. These are needed later on to generate the commandline parameters. """ self.defaults = { 'useRecursion' : 0, 'noindex' : 0, 'noempty' : 0, 'outputDirectory' : '', 'ignoreDirectories' : [], 'ignoreFilePatterns' : [], 'cssFile' : '', 'sourceExtensions' : [], 'qtHelpEnabled' : False, 'qtHelpOutputDirectory' : '', 'qtHelpNamespace' : '', 'qtHelpVirtualFolder' : 'source', 'qtHelpFilterName' : 'unknown', 'qtHelpFilterAttributes' : '', 'qtHelpTitle' : '', 'qtHelpCreateCollection' : False, } def generateParameters(self): """ Public method that generates the commandline parameters. It generates a QStringList to be used to set the QProcess arguments for the ericdoc call and a list containing the non default parameters. The second list can be passed back upon object generation to overwrite the default settings. @return a tuple of the commandline parameters and non default parameters (QStringList, dictionary) """ parms = {} args = QStringList() # 1. the program name args.append(sys.executable) args.append(Utilities.normabsjoinpath(getConfig('ericDir'), "eric4_doc.py")) # 2. the commandline options # 2a. general commandline options if self.parameters['outputDirectory'] != self.defaults['outputDirectory']: parms['outputDirectory'] = self.parameters['outputDirectory'] args.append('-o') if os.path.isabs(self.parameters['outputDirectory']): args.append(self.parameters['outputDirectory']) else: args.append(os.path.join(self.ppath, self.parameters['outputDirectory'])) if self.parameters['ignoreDirectories'] != self.defaults['ignoreDirectories']: parms['ignoreDirectories'] = self.parameters['ignoreDirectories'][:] for d in self.parameters['ignoreDirectories']: args.append('-x') args.append(d) if self.parameters['ignoreFilePatterns'] != self.defaults['ignoreFilePatterns']: parms['ignoreFilePatterns'] = self.parameters['ignoreFilePatterns'][:] for pattern in self.parameters['ignoreFilePatterns']: args.append("--exclude-file=%s" % pattern) if self.parameters['useRecursion'] != self.defaults['useRecursion']: parms['useRecursion'] = self.parameters['useRecursion'] args.append('-r') if self.parameters['noindex'] != self.defaults['noindex']: parms['noindex'] = self.parameters['noindex'] args.append('-i') if self.parameters['noempty'] != self.defaults['noempty']: parms['noempty'] = self.parameters['noempty'] args.append('-e') if self.parameters['sourceExtensions'] != self.defaults['sourceExtensions']: parms['sourceExtensions'] = self.parameters['sourceExtensions'][:] for ext in self.parameters['sourceExtensions']: args.append('-t') args.append(ext) # 2b. style commandline options if self.parameters['cssFile'] != self.defaults['cssFile']: parms['cssFile'] = self.parameters['cssFile'] args.append('-c') if os.path.isabs(self.parameters['cssFile']): args.append(self.parameters['cssFile']) else: args.append(os.path.join(self.ppath, self.parameters['cssFile'])) for key, value in self.colors.items(): if self.colors[key] != eric4docDefaultColors[key]: parms[key] = self.colors[key] args.append("--%s=%s" % \ (eric4docColorParameterNames[key], self.colors[key])) # 2c. QtHelp commandline options parms['qtHelpEnabled'] = self.parameters['qtHelpEnabled'] if self.parameters['qtHelpEnabled']: args.append('--create-qhp') if self.parameters['qtHelpOutputDirectory'] != \ self.defaults['qtHelpOutputDirectory']: parms['qtHelpOutputDirectory'] = self.parameters['qtHelpOutputDirectory'] if os.path.isabs(self.parameters['outputDirectory']): args.append("--qhp-outdir=%s" % self.parameters['qtHelpOutputDirectory']) else: args.append("--qhp-outdir=%s" % \ os.path.join(self.ppath, self.parameters['qtHelpOutputDirectory'])) if self.parameters['qtHelpNamespace'] != self.defaults['qtHelpNamespace']: parms['qtHelpNamespace'] = self.parameters['qtHelpNamespace'] args.append("--qhp-namespace=%s" % self.parameters['qtHelpNamespace']) if self.parameters['qtHelpVirtualFolder'] != self.defaults['qtHelpVirtualFolder']: parms['qtHelpVirtualFolder'] = self.parameters['qtHelpVirtualFolder'] args.append("--qhp-virtualfolder=%s" % self.parameters['qtHelpVirtualFolder']) if self.parameters['qtHelpFilterName'] != self.defaults['qtHelpFilterName']: parms['qtHelpFilterName'] = self.parameters['qtHelpFilterName'] args.append("--qhp-filtername=%s" % self.parameters['qtHelpFilterName']) if self.parameters['qtHelpFilterAttributes'] != \ self.defaults['qtHelpFilterAttributes']: parms['qtHelpFilterAttributes'] = self.parameters['qtHelpFilterAttributes'] args.append("--qhp-filterattribs=%s" % \ self.parameters['qtHelpFilterAttributes']) if self.parameters['qtHelpTitle'] != self.defaults['qtHelpTitle']: parms['qtHelpTitle'] = self.parameters['qtHelpTitle'] args.append("--qhp-title=%s" % self.parameters['qtHelpTitle']) if self.parameters['qtHelpCreateCollection'] != \ self.defaults['qtHelpCreateCollection']: parms['qtHelpCreateCollection'] = self.parameters['qtHelpCreateCollection'] args.append('--create-qhc') return (args, parms) @pyqtSignature("") def on_outputDirButton_clicked(self): """ Private slot to select the output directory. It displays a directory selection dialog to select the directory the documentations is written to. """ directory = KQFileDialog.getExistingDirectory(\ self, self.trUtf8("Select output directory"), self.outputDirEdit.text(), QFileDialog.Options(QFileDialog.ShowDirsOnly)) if not directory.isNull(): # make it relative, if it is a subdirectory of the project path dn = unicode(Utilities.toNativeSeparators(directory)) dn = self.project.getRelativePath(dn) while dn.endswith(os.sep): dn = dn[:-1] self.outputDirEdit.setText(dn) @pyqtSignature("") def on_ignoreDirButton_clicked(self): """ Private slot to select a directory to be ignored. It displays a directory selection dialog to select a directory to be ignored. """ startDir = self.ignoreDirEdit.text() if startDir.isEmpty(): startDir = self.ppath directory = KQFileDialog.getExistingDirectory(\ self, self.trUtf8("Select directory to exclude"), startDir, QFileDialog.Options(QFileDialog.ShowDirsOnly)) if not directory.isNull(): # make it relative, if it is a subdirectory of the project path dn = unicode(Utilities.toNativeSeparators(directory)) dn = self.project.getRelativePath(dn) while dn.endswith(os.sep): dn = dn[:-1] self.ignoreDirEdit.setText(dn) @pyqtSignature("") def on_addButton_clicked(self): """ Private slot to add the directory displayed to the listview. The directory in the ignore directories line edit is moved to the listbox above and the edit is cleared. """ basename = os.path.basename(unicode(self.ignoreDirEdit.text())) if basename: self.ignoreDirsList.addItem(basename) self.ignoreDirEdit.clear() @pyqtSignature("") def on_deleteButton_clicked(self): """ Private slot to delete the currently selected directory of the listbox. """ itm = self.ignoreDirsList.takeItem(self.ignoreDirsList.currentRow()) del itm @pyqtSignature("") def on_cssButton_clicked(self): """ Private slot to select a css style sheet. """ cssFile = KQFileDialog.getOpenFileName(\ self, self.trUtf8("Select CSS style sheet"), getConfig('ericCSSDir'), self.trUtf8("Style sheet (*.css);;All files (*)")) if not cssFile.isEmpty(): # make it relative, if it is in a subdirectory of the project path cf = unicode(Utilities.toNativeSeparators(cssFile)) cf = self.project.getRelativePath(cf) self.cssEdit.setText(cf) def __selectColor(self, colorKey): """ Private method to select a color. @param colorKey key of the color to select (string) """ color = QColorDialog.getColor(QColor(self.colors[colorKey])) if color.isValid(): self.colors[colorKey] = unicode(color.name()) self.sample.setHtml(self.sampleText % self.colors) @pyqtSignature("") def on_bodyFgButton_clicked(self): """ Private slot to select the body foreground color. """ self.__selectColor('BodyColor') @pyqtSignature("") def on_bodyBgButton_clicked(self): """ Private slot to select the body background color. """ self.__selectColor('BodyBgColor') @pyqtSignature("") def on_l1FgButton_clicked(self): """ Private slot to select the level 1 header foreground color. """ self.__selectColor('Level1HeaderColor') @pyqtSignature("") def on_l1BgButton_clicked(self): """ Private slot to select the level 1 header background color. """ self.__selectColor('Level1HeaderBgColor') @pyqtSignature("") def on_l2FgButton_clicked(self): """ Private slot to select the level 2 header foreground color. """ self.__selectColor('Level2HeaderColor') @pyqtSignature("") def on_l2BgButton_clicked(self): """ Private slot to select the level 2 header background color. """ self.__selectColor('Level2HeaderBgColor') @pyqtSignature("") def on_cfFgButton_clicked(self): """ Private slot to select the class/function header foreground color. """ self.__selectColor('CFColor') @pyqtSignature("") def on_cfBgButton_clicked(self): """ Private slot to select the class/function header background color. """ self.__selectColor('CFBgColor') @pyqtSignature("") def on_linkFgButton_clicked(self): """ Private slot to select the foreground color of links. """ self.__selectColor('LinkColor') def __checkQtHelpOptions(self): """ Private slot to check the QtHelp options and set the ok button accordingly. """ setOn = True if self.qtHelpGroup.isChecked(): if self.qtHelpNamespaceEdit.text().isEmpty(): setOn = False if self.qtHelpFolderEdit.text().isEmpty(): setOn = False else: if '/' in self.qtHelpFolderEdit.text(): setOn = False if self.qtHelpTitleEdit.text().isEmpty(): setOn = False self.__okButton.setEnabled(setOn) @pyqtSignature("bool") def on_qtHelpGroup_toggled(self, enabled): """ Private slot to toggle the generation of QtHelp files. @param enabled flag indicating the state (boolean) """ self.__checkQtHelpOptions() @pyqtSignature("QString") def on_qtHelpNamespaceEdit_textChanged(self, txt): """ Private slot to check the namespace. @param txt text of the line edit (QString) """ self.__checkQtHelpOptions() @pyqtSignature("QString") def on_qtHelpFolderEdit_textChanged(self, txt): """ Private slot to check the virtual folder. @param txt text of the line edit (QString) """ self.__checkQtHelpOptions() @pyqtSignature("QString") def on_qtHelpTitleEdit_textChanged(self, p0): """ Private slot to check the title. @param txt text of the line edit (QString) """ self.__checkQtHelpOptions() @pyqtSignature("") def on_qtHelpDirButton_clicked(self): """ Private slot to select the output directory for the QtHelp files. It displays a directory selection dialog to select the directory the QtHelp files are written to. """ directory = KQFileDialog.getExistingDirectory(\ self, self.trUtf8("Select output directory for QtHelp files"), self.qtHelpDirEdit.text(), QFileDialog.Options(QFileDialog.ShowDirsOnly)) if not directory.isNull(): # make it relative, if it is a subdirectory of the project path dn = unicode(Utilities.toNativeSeparators(directory)) dn = self.project.getRelativePath(dn) while dn.endswith(os.sep): dn = dn[:-1] self.qtHelpDirEdit.setText(dn) def accept(self): """ Protected slot called by the Ok button. It saves the values in the parameters dictionary. """ self.parameters['useRecursion'] = self.recursionCheckBox.isChecked() self.parameters['noindex'] = self.noindexCheckBox.isChecked() self.parameters['noempty'] = self.noemptyCheckBox.isChecked() outdir = unicode(self.outputDirEdit.text()) if outdir != '': outdir = os.path.normpath(outdir) if outdir.endswith(os.sep): outdir = outdir[:-1] self.parameters['outputDirectory'] = outdir self.parameters['ignoreDirectories'] = [] for row in range(0, self.ignoreDirsList.count()): itm = self.ignoreDirsList.item(row) self.parameters['ignoreDirectories'].append(\ os.path.normpath(unicode(itm.text()))) cssFile = unicode(self.cssEdit.text()) if cssFile != '': cssFile = os.path.normpath(cssFile) self.parameters['cssFile'] = cssFile extensions = unicode(self.sourceExtEdit.text()).split(',') self.parameters['sourceExtensions'] = \ [ext.strip() for ext in extensions] patterns = unicode(self.excludeFilesEdit.text()).split(',') self.parameters['ignoreFilePatterns'] = \ [pattern.strip() for pattern in patterns] self.parameters['qtHelpEnabled'] = self.qtHelpGroup.isChecked() self.parameters['qtHelpOutputDirectory'] = unicode(self.qtHelpDirEdit.text()) self.parameters['qtHelpNamespace'] = unicode(self.qtHelpNamespaceEdit.text()) self.parameters['qtHelpVirtualFolder'] = unicode(self.qtHelpFolderEdit.text()) self.parameters['qtHelpFilterName'] = unicode(self.qtHelpFilterNameEdit.text()) self.parameters['qtHelpFilterAttributes'] = \ unicode(self.qtHelpFilterAttributesEdit.text()) self.parameters['qtHelpTitle'] = unicode(self.qtHelpTitleEdit.text()) self.parameters['qtHelpCreateCollection'] = \ self.qtHelpGenerateCollectionCheckBox.isChecked() # call the accept slot of the base class QDialog.accept(self) eric4-4.5.18/eric/Plugins/DocumentationPlugins/Ericdoc/PaxHeaders.8617/EricdocExecDialog.ui0000644000175000001440000000007411071671175027524 xustar000000000000000030 atime=1389081082.792724399 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/DocumentationPlugins/Ericdoc/EricdocExecDialog.ui0000644000175000001440000000553411071671175027260 0ustar00detlevusers00000000000000 EricdocExecDialog 0 0 753 602 Ericdoc true 0 3 Messages 0 3 <b>Ericdoc Execution</b> <p>This shows the output of the Ericdoc generator command.</p> 0 1 Errors 0 1 <b>Ericdoc Execution</b> <p>This shows the errors of the Ericdoc generator command.</p> Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Close qPixmapFromMimeSource contents errors buttonBox eric4-4.5.18/eric/Plugins/DocumentationPlugins/Ericdoc/PaxHeaders.8617/EricdocExecDialog.py0000644000175000001440000000013212261012647027525 xustar000000000000000030 mtime=1388582311.949076427 30 atime=1389081082.793724399 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/DocumentationPlugins/Ericdoc/EricdocExecDialog.py0000644000175000001440000001232712261012647027264 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Module implementing a dialog to show the output of the ericdoc process. """ import os.path from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQMessageBox from Ui_EricdocExecDialog import Ui_EricdocExecDialog class EricdocExecDialog(QDialog, Ui_EricdocExecDialog): """ Class implementing a dialog to show the output of the ericdoc process. This class starts a QProcess and displays a dialog that shows the output of the documentation command process. """ def __init__(self, cmdname, parent = None): """ Constructor @param cmdname name of the documentation generator (string) @param parent parent widget of this dialog (QWidget) """ QDialog.__init__(self, parent) self.setModal(True) self.setupUi(self) self.buttonBox.button(QDialogButtonBox.Close).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Cancel).setDefault(True) self.process = None self.cmdname = cmdname def start(self, args, fn): """ Public slot to start the ericdoc command. @param args commandline arguments for ericdoc program (QStringList) @param fn filename or dirname to be processed by ericdoc program @return flag indicating the successful start of the process """ self.errorGroup.hide() self.filename = unicode(fn) if os.path.isdir(self.filename): dname = os.path.abspath(self.filename) fname = "." if os.path.exists(os.path.join(dname, "__init__.py")): fname = os.path.basename(dname) dname = os.path.dirname(dname) else: dname = os.path.dirname(self.filename) fname = os.path.basename(self.filename) self.contents.clear() self.errors.clear() program = args[0] del args[0] args.append(fname) self.process = QProcess() self.process.setWorkingDirectory(dname) self.connect(self.process, SIGNAL('readyReadStandardOutput()'), self.__readStdout) self.connect(self.process, SIGNAL('readyReadStandardError()'), self.__readStderr) self.connect(self.process, SIGNAL('finished(int, QProcess::ExitStatus)'), self.__finish) self.setWindowTitle(self.trUtf8('%1 - %2').arg(self.cmdname).arg(self.filename)) self.process.start(program, args) procStarted = self.process.waitForStarted() if not procStarted: KQMessageBox.critical(None, self.trUtf8('Process Generation Error'), self.trUtf8( 'The process %1 could not be started. ' 'Ensure, that it is in the search path.' ).arg(program)) return procStarted def on_buttonBox_clicked(self, button): """ Private slot called by a button of the button box clicked. @param button button that was clicked (QAbstractButton) """ if button == self.buttonBox.button(QDialogButtonBox.Close): self.accept() elif button == self.buttonBox.button(QDialogButtonBox.Cancel): self.__finish() def __finish(self): """ Private slot called when the process finished. It is called when the process finished or the user pressed the button. """ if self.process is not None and \ self.process.state() != QProcess.NotRunning: self.process.terminate() QTimer.singleShot(2000, self.process, SLOT('kill()')) self.process.waitForFinished(3000) self.buttonBox.button(QDialogButtonBox.Close).setEnabled(True) self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Close).setDefault(True) self.process = None self.contents.insertPlainText(self.trUtf8('\n%1 finished.\n').arg(self.cmdname)) self.contents.ensureCursorVisible() def __readStdout(self): """ Private slot to handle the readyReadStandardOutput signal. It reads the output of the process, formats it and inserts it into the contents pane. """ self.process.setReadChannel(QProcess.StandardOutput) while self.process.canReadLine(): s = QString(self.process.readLine()) self.contents.insertPlainText(s) self.contents.ensureCursorVisible() def __readStderr(self): """ Private slot to handle the readyReadStandardError signal. It reads the error output of the process and inserts it into the error pane. """ self.process.setReadChannel(QProcess.StandardError) while self.process.canReadLine(): self.errorGroup.show() s = QString(self.process.readLine()) self.errors.insertPlainText(s) self.errors.ensureCursorVisible() eric4-4.5.18/eric/Plugins/DocumentationPlugins/PaxHeaders.8617/Ericapi0000644000175000001440000000013212262730776023620 xustar000000000000000030 mtime=1389081086.300724332 30 atime=1389081086.305724332 30 ctime=1389081086.315724332 eric4-4.5.18/eric/Plugins/DocumentationPlugins/Ericapi/0000755000175000001440000000000012262730776023427 5ustar00detlevusers00000000000000eric4-4.5.18/eric/Plugins/DocumentationPlugins/Ericapi/PaxHeaders.8617/EricapiConfigDialog.py0000644000175000001440000000013212261012647030056 xustar000000000000000030 mtime=1388582311.952076465 30 atime=1389081082.793724399 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/DocumentationPlugins/Ericapi/EricapiConfigDialog.py0000644000175000001440000002464612261012647027624 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2004 - 2014 Detlev Offenbach # """ Module implementing a dialog to enter the parameters for eric4_api. """ import sys import os import copy from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQFileDialog from E4Gui.E4Completers import E4FileCompleter, E4DirCompleter from Ui_EricapiConfigDialog import Ui_EricapiConfigDialog import Utilities import DocumentationTools from eric4config import getConfig class EricapiConfigDialog(QDialog, Ui_EricapiConfigDialog): """ Class implementing a dialog to enter the parameters for eric4_api. """ def __init__(self, project, parms = None, parent = None): """ Constructor @param project reference to the project object (Project.Project) @param parms parameters to set in the dialog @param parent parent widget of this dialog """ QDialog.__init__(self,parent) self.setupUi(self) self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(False) for language in sorted(DocumentationTools.supportedExtensionsDictForApis.keys()): self.languagesList.addItem(language) self.ppath = project.getProjectPath() self.project = project self.__initializeDefaults() # get a copy of the defaults to store the user settings self.parameters = copy.deepcopy(self.defaults) # combine it with the values of parms if parms is not None: for key, value in parms.items(): self.parameters[key] = parms[key] self.outputFileCompleter = E4FileCompleter(self.outputFileEdit) self.ignoreDirCompleter = E4DirCompleter(self.ignoreDirEdit) self.recursionCheckBox.setChecked(self.parameters['useRecursion']) self.oldStyleCheckBox.setChecked(not self.parameters['newStyle']) self.includePrivateCheckBox.setChecked(self.parameters['includePrivate']) self.outputFileEdit.setText(self.parameters['outputFile']) self.baseEdit.setText(self.parameters['basePackage']) self.ignoreDirsList.clear() for d in self.parameters['ignoreDirectories']: self.ignoreDirsList.addItem(d) self.sourceExtEdit.setText(", ".join(self.parameters['sourceExtensions'])) self.excludeFilesEdit.setText(", ".join(self.parameters['ignoreFilePatterns'])) for language in self.parameters['languages']: items = self.languagesList.findItems(language, Qt.MatchFlags(Qt.MatchExactly)) items[0].setSelected(True) def __initializeDefaults(self): """ Private method to set the default values. These are needed later on to generate the commandline parameters. """ self.defaults = { 'useRecursion' : False, 'newStyle' : True, 'includePrivate' : False, 'outputFile' : '', 'basePackage' : '', 'ignoreDirectories' : [], 'ignoreFilePatterns' : [], 'sourceExtensions' : [], } lang = self.project.getProjectLanguage() if lang in DocumentationTools.supportedExtensionsDictForApis.keys(): self.defaults['languages'] = [lang] else: self.defaults['languages'] = ["Python"] def generateParameters(self): """ Public method that generates the commandline parameters. It generates a QStringList to be used to set the QProcess arguments for the ericapi call and a list containing the non default parameters. The second list can be passed back upon object generation to overwrite the default settings. @return a tuple of the commandline parameters and non default parameters (QStringList, dictionary) """ parms = {} args = QStringList() # 1. the program name args.append(sys.executable) args.append(Utilities.normabsjoinpath(getConfig('ericDir'), "eric4_api.py")) # 2. the commandline options if self.parameters['outputFile'] != self.defaults['outputFile']: parms['outputFile'] = self.parameters['outputFile'] args.append('-o') if os.path.isabs(self.parameters['outputFile']): args.append(self.parameters['outputFile']) else: args.append(os.path.join(self.ppath, self.parameters['outputFile'])) if self.parameters['basePackage'] != self.defaults['basePackage']: parms['basePackage'] = self.parameters['basePackage'] args.append('-b') args.append(self.parameters['basePackage']) if self.parameters['ignoreDirectories'] != self.defaults['ignoreDirectories']: parms['ignoreDirectories'] = self.parameters['ignoreDirectories'][:] for d in self.parameters['ignoreDirectories']: args.append('-x') args.append(d) if self.parameters['ignoreFilePatterns'] != self.defaults['ignoreFilePatterns']: parms['ignoreFilePatterns'] = self.parameters['ignoreFilePatterns'][:] for pattern in self.parameters['ignoreFilePatterns']: args.append("--exclude-file=%s" % pattern) if self.parameters['useRecursion'] != self.defaults['useRecursion']: parms['useRecursion'] = self.parameters['useRecursion'] args.append('-r') if self.parameters['sourceExtensions'] != self.defaults['sourceExtensions']: parms['sourceExtensions'] = self.parameters['sourceExtensions'][:] for ext in self.parameters['sourceExtensions']: args.append('-t') args.append(ext) if self.parameters['newStyle'] != self.defaults['newStyle']: parms['newStyle'] = self.parameters['newStyle'] args.append('--oldstyle') if self.parameters['includePrivate'] != self.defaults['includePrivate']: parms['includePrivate'] = self.parameters['includePrivate'] args.append('-p') parms['languages'] = self.parameters['languages'][:] for lang in self.parameters['languages']: args.append('--language=%s' % lang) return (args, parms) @pyqtSignature("") def on_outputFileButton_clicked(self): """ Private slot to select the output file. It displays a file selection dialog to select the file the api is written to. """ filename = KQFileDialog.getSaveFileName(\ self, self.trUtf8("Select output file"), self.outputFileEdit.text(), self.trUtf8("API files (*.api);;All files (*)")) if not filename.isNull(): # make it relative, if it is in a subdirectory of the project path fn = unicode(Utilities.toNativeSeparators(filename)) fn = self.project.getRelativePath(fn) self.outputFileEdit.setText(fn) def on_outputFileEdit_textChanged(self, filename): """ Private slot to enable/disable the "OK" button. @param filename name of the file (QString) """ self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(not filename.isEmpty()) @pyqtSignature("") def on_ignoreDirButton_clicked(self): """ Private slot to select a directory to be ignored. It displays a directory selection dialog to select a directory to be ignored. """ startDir = self.ignoreDirEdit.text() if startDir.isEmpty(): startDir = self.ppath directory = KQFileDialog.getExistingDirectory(\ self, self.trUtf8("Select directory to exclude"), startDir, QFileDialog.Options(QFileDialog.ShowDirsOnly)) if not directory.isNull(): # make it relative, if it is a subdirectory of the project path dn = unicode(Utilities.toNativeSeparators(directory)) dn = self.project.getRelativePath(dn) while dn.endswith(os.sep): dn = dn[:-1] self.ignoreDirEdit.setText(dn) @pyqtSignature("") def on_addButton_clicked(self): """ Private slot to add the directory displayed to the listview. The directory in the ignore directories line edit is moved to the listbox above and the edit is cleared. """ basename = os.path.basename(unicode(self.ignoreDirEdit.text())) if basename: self.ignoreDirsList.addItem(basename) self.ignoreDirEdit.clear() @pyqtSignature("") def on_deleteButton_clicked(self): """ Private slot to delete the currently selected directory of the listbox. """ itm = self.ignoreDirsList.takeItem(self.ignoreDirsList.currentRow()) del itm def accept(self): """ Protected slot called by the Ok button. It saves the values in the parameters dictionary. """ self.parameters['useRecursion'] = self.recursionCheckBox.isChecked() self.parameters['newStyle'] = not self.oldStyleCheckBox.isChecked() self.parameters['includePrivate'] = self.includePrivateCheckBox.isChecked() outfile = unicode(self.outputFileEdit.text()) if outfile != '': outfile = os.path.normpath(outfile) self.parameters['outputFile'] = outfile self.parameters['basePackage'] = unicode(self.baseEdit.text()) self.parameters['ignoreDirectories'] = [] for row in range(0, self.ignoreDirsList.count()): itm = self.ignoreDirsList.item(row) self.parameters['ignoreDirectories'].append(\ os.path.normpath(unicode(itm.text()))) extensions = unicode(self.sourceExtEdit.text()).split(',') self.parameters['sourceExtensions'] = \ [ext.strip() for ext in extensions if len(ext) > 0] patterns = unicode(self.excludeFilesEdit.text()).split(',') self.parameters['ignoreFilePatterns'] = \ [pattern.strip() for pattern in patterns] self.parameters['languages'] = [] for itm in self.languagesList.selectedItems(): self.parameters['languages'].append(unicode(itm.text())) # call the accept slot of the base class QDialog.accept(self) eric4-4.5.18/eric/Plugins/DocumentationPlugins/Ericapi/PaxHeaders.8617/EricapiExecDialog.ui0000644000175000001440000000007411071670667027541 xustar000000000000000030 atime=1389081082.793724399 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/DocumentationPlugins/Ericapi/EricapiExecDialog.ui0000644000175000001440000000553411071670667027275 0ustar00detlevusers00000000000000 EricapiExecDialog 0 0 753 602 Ericapi true 0 3 Messages 0 3 <b>Ericapi Execution</b> <p>This shows the output of the Ericapi generator command.</p> 0 1 Errors 0 1 <b>Ericapi Execution</b> <p>This shows the errors of the Ericapi generator command.</p> Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Close qPixmapFromMimeSource contents errors buttonBox eric4-4.5.18/eric/Plugins/DocumentationPlugins/Ericapi/PaxHeaders.8617/EricapiConfigDialog.ui0000644000175000001440000000007411072705623030052 xustar000000000000000030 atime=1389081082.793724399 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/DocumentationPlugins/Ericapi/EricapiConfigDialog.ui0000644000175000001440000002302311072705623027577 0ustar00detlevusers00000000000000 EricapiConfigDialog 0 0 500 600 Ericapi Configuration true Enter an output filename <b>Output Filename</b><p>Enter the filename of the output file. A '%L' placeholder is replaced by the language of the API file.</p> Qt::NoFocus Press to open a file selection dialog ... Output File: 0 1 Languages Select the languages of the APIs to generate QAbstractItemView::ExtendedSelection Additional source extensions: Enter additional source extensions separated by a comma Qt::Horizontal QSizePolicy::Expanding 31 20 Select to generate API files for QScintilla prior to 1.7 Generate old style API files Select to recurse into subdirectories Recurse into subdirectories Select to include private classes, methods and functions in the API file Include private classes, methods and functions Base package name: Enter the name of the base package Exclude Files: Enter filename patterns of files to be excluded separated by a comma 0 2 Exclude Directories Enter a directory basename to be ignored Press to add the entered directory to the list Add Press to delete the selected directory from the list Delete Qt::NoFocus Press to open a directory selection dialog ... List of directory basenames to be ignored Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok qPixmapFromMimeSource outputFileEdit languagesList sourceExtEdit recursionCheckBox oldStyleCheckBox includePrivateCheckBox baseEdit excludeFilesEdit ignoreDirEdit addButton ignoreDirsList deleteButton buttonBox oldStyleCheckBox toggled(bool) label setDisabled(bool) 195 80 84 108 oldStyleCheckBox toggled(bool) baseEdit setDisabled(bool) 266 83 266 109 buttonBox accepted() EricapiConfigDialog accept() 41 477 41 497 buttonBox rejected() EricapiConfigDialog reject() 113 480 113 501 eric4-4.5.18/eric/Plugins/DocumentationPlugins/Ericapi/PaxHeaders.8617/__init__.py0000644000175000001440000000013212261012647025773 xustar000000000000000030 mtime=1388582311.954076491 30 atime=1389081082.793724399 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/DocumentationPlugins/Ericapi/__init__.py0000644000175000001440000000022312261012647025522 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Package containing the Ericapi plugin. """ eric4-4.5.18/eric/Plugins/DocumentationPlugins/Ericapi/PaxHeaders.8617/EricapiExecDialog.py0000644000175000001440000000013212261012647027535 xustar000000000000000030 mtime=1388582311.959076554 30 atime=1389081082.794724399 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/DocumentationPlugins/Ericapi/EricapiExecDialog.py0000644000175000001440000001232112261012647027266 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Module implementing a dialog to show the output of the ericapi process. """ import os.path from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQMessageBox from Ui_EricapiExecDialog import Ui_EricapiExecDialog class EricapiExecDialog(QDialog, Ui_EricapiExecDialog): """ Class implementing a dialog to show the output of the ericapi process. This class starts a QProcess and displays a dialog that shows the output of the documentation command process. """ def __init__(self, cmdname, parent = None): """ Constructor @param cmdname name of the ericapi generator (string) @param parent parent widget of this dialog (QWidget) """ QDialog.__init__(self, parent) self.setModal(True) self.setupUi(self) self.buttonBox.button(QDialogButtonBox.Close).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Cancel).setDefault(True) self.process = None self.cmdname = cmdname def start(self, args, fn): """ Public slot to start the ericapi command. @param args commandline arguments for ericapi program (QStringList) @param fn filename or dirname to be processed by ericapi program @return flag indicating the successful start of the process """ self.errorGroup.hide() self.filename = unicode(fn) if os.path.isdir(self.filename): dname = os.path.abspath(self.filename) fname = "." if os.path.exists(os.path.join(dname, "__init__.py")): fname = os.path.basename(dname) dname = os.path.dirname(dname) else: dname = os.path.dirname(self.filename) fname = os.path.basename(self.filename) self.contents.clear() self.errors.clear() program = args[0] del args[0] args.append(fname) self.process = QProcess() self.process.setWorkingDirectory(dname) self.connect(self.process, SIGNAL('readyReadStandardOutput()'), self.__readStdout) self.connect(self.process, SIGNAL('readyReadStandardError()'), self.__readStderr) self.connect(self.process, SIGNAL('finished(int, QProcess::ExitStatus)'), self.__finish) self.setWindowTitle(self.trUtf8('%1 - %2').arg(self.cmdname).arg(self.filename)) self.process.start(program, args) procStarted = self.process.waitForStarted() if not procStarted: KQMessageBox.critical(None, self.trUtf8('Process Generation Error'), self.trUtf8( 'The process %1 could not be started. ' 'Ensure, that it is in the search path.' ).arg(program)) return procStarted def on_buttonBox_clicked(self, button): """ Private slot called by a button of the button box clicked. @param button button that was clicked (QAbstractButton) """ if button == self.buttonBox.button(QDialogButtonBox.Close): self.accept() elif button == self.buttonBox.button(QDialogButtonBox.Cancel): self.__finish() def __finish(self): """ Private slot called when the process finished. It is called when the process finished or the user pressed the button. """ if self.process is not None and \ self.process.state() != QProcess.NotRunning: self.process.terminate() QTimer.singleShot(2000, self.process, SLOT('kill()')) self.process.waitForFinished(3000) self.buttonBox.button(QDialogButtonBox.Close).setEnabled(True) self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Close).setDefault(True) self.process = None self.contents.insertPlainText(self.trUtf8('\n%1 finished.\n').arg(self.cmdname)) self.contents.ensureCursorVisible() def __readStdout(self): """ Private slot to handle the readyReadStandardOutput signal. It reads the output of the process, formats it and inserts it into the contents pane. """ self.process.setReadChannel(QProcess.StandardOutput) while self.process.canReadLine(): s = QString(self.process.readLine()) self.contents.insertPlainText(s) self.contents.ensureCursorVisible() def __readStderr(self): """ Private slot to handle the readyReadStandardError signal. It reads the error output of the process and inserts it into the error pane. """ self.process.setReadChannel(QProcess.StandardError) while self.process.canReadLine(): self.errorGroup.show() s = QString(self.process.readLine()) self.errors.insertPlainText(s) self.errors.ensureCursorVisible() eric4-4.5.18/eric/Plugins/PaxHeaders.8617/PluginWizardQFontDialog.py0000644000175000001440000000013212261012647023214 xustar000000000000000030 mtime=1388582311.963076605 30 atime=1389081082.794724399 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/PluginWizardQFontDialog.py0000644000175000001440000000776412261012647022764 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing the QFontDialog wizard plugin. """ from PyQt4.QtCore import QObject, SIGNAL, QString from PyQt4.QtGui import QDialog from KdeQt.KQApplication import e4App from KdeQt import KQMessageBox from E4Gui.E4Action import E4Action from WizardPlugins.FontDialogWizard.FontDialogWizardDialog import \ FontDialogWizardDialog # Start-Of-Header name = "QFontDialog Wizard Plugin" author = "Detlev Offenbach " autoactivate = True deactivateable = True version = "4.4.0" className = "FontDialogWizard" packageName = "__core__" shortDescription = "Show the QFontDialog wizard." longDescription = """This plugin shows the QFontDialog wizard.""" # End-Of-Header error = QString("") class FontDialogWizard(QObject): """ Class implementing the QFontDialog wizard plugin. """ def __init__(self, ui): """ Constructor @param ui reference to the user interface object (UI.UserInterface) """ QObject.__init__(self, ui) self.__ui = ui def activate(self): """ Public method to activate this plugin. @return tuple of None and activation status (boolean) """ self.__initAction() self.__initMenu() return None, True def deactivate(self): """ Public method to deactivate this plugin. """ menu = self.__ui.getMenu("wizards") if menu: menu.removeAction(self.action) self.__ui.removeE4Actions([self.action], 'wizards') def __initAction(self): """ Private method to initialize the action. """ self.action = E4Action(self.trUtf8('QFontDialog Wizard'), self.trUtf8('Q&FontDialog Wizard...'), 0, 0, self, 'wizards_qfontdialog') self.action.setStatusTip(self.trUtf8('QFontDialog Wizard')) self.action.setWhatsThis(self.trUtf8( """QFontDialog Wizard""" """

    This wizard opens a dialog for entering all the parameters""" """ needed to create a QFontDialog. The generated code is inserted""" """ at the current cursor position.

    """ )) self.connect(self.action, SIGNAL('triggered()'), self.__handle) self.__ui.addE4Actions([self.action], 'wizards') def __initMenu(self): """ Private method to add the actions to the right menu. """ menu = self.__ui.getMenu("wizards") if menu: menu.addAction(self.action) def __callForm(self, editor): """ Private method to display a dialog and get the code. @param editor reference to the current editor @return the generated code (string) """ dlg = FontDialogWizardDialog(None) if dlg.exec_() == QDialog.Accepted: line, index = editor.getCursorPosition() indLevel = editor.indentation(line)/editor.indentationWidth() if editor.indentationsUseTabs(): indString = '\t' else: indString = editor.indentationWidth() * ' ' return (dlg.getCode(indLevel, indString), True) else: return (None, False) def __handle(self): """ Private method to handle the wizards action """ editor = e4App().getObject("ViewManager").activeWindow() if editor == None: KQMessageBox.critical(None, self.trUtf8('No current editor'), self.trUtf8('Please open or create a file first.')) else: code, ok = self.__callForm(editor) if ok: line, index = editor.getCursorPosition() # It should be done on this way to allow undo editor.beginUndoAction() editor.insertAt(code, line, index) editor.endUndoAction() eric4-4.5.18/eric/Plugins/PaxHeaders.8617/PluginSyntaxChecker.py0000644000175000001440000000013212261012647022437 xustar000000000000000030 mtime=1388582311.965076631 30 atime=1389081082.794724399 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/PluginSyntaxChecker.py0000644000175000001440000002266612261012647022205 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing the Tabnanny plugin. """ import os from PyQt4.QtCore import QObject, SIGNAL, QString from KdeQt.KQApplication import e4App from E4Gui.E4Action import E4Action from CheckerPlugins.SyntaxChecker.SyntaxCheckerDialog import SyntaxCheckerDialog # Start-Of-Header name = "Syntax Checker Plugin" author = "Detlev Offenbach " autoactivate = True deactivateable = True version = "4.4.0" className = "SyntaxCheckerPlugin" packageName = "__core__" shortDescription = "Show the Syntax Checker dialog." longDescription = """This plugin implements the Syntax Checker dialog.""" \ """ Syntax Checker is used to check Python source files for correct syntax.""" # End-Of-Header error = QString("") class SyntaxCheckerPlugin(QObject): """ Class implementing the Syntax Checker plugin. """ def __init__(self, ui): """ Constructor @param ui reference to the user interface object (UI.UserInterface) """ QObject.__init__(self, ui) self.__ui = ui self.__initialize() def __initialize(self): """ Private slot to (re)initialize the plugin. """ self.__projectAct = None self.__projectSyntaxCheckerDialog = None self.__projectBrowserAct = None self.__projectBrowserMenu = None self.__projectBrowserSyntaxCheckerDialog = None self.__editors = [] self.__editorAct = None self.__editorSyntaxCheckerDialog = None def activate(self): """ Public method to activate this plugin. @return tuple of None and activation status (boolean) """ menu = e4App().getObject("Project").getMenu("Checks") if menu: self.__projectAct = E4Action(self.trUtf8('Check Syntax'), self.trUtf8('&Syntax...'), 0, 0, self, 'project_check_syntax') self.__projectAct.setStatusTip(\ self.trUtf8('Check syntax.')) self.__projectAct.setWhatsThis(self.trUtf8( """Check Syntax...""" """

    This checks Python files for syntax errors.

    """ )) self.connect(self.__projectAct, SIGNAL('triggered()'), self.__projectSyntaxCheck) e4App().getObject("Project").addE4Actions([self.__projectAct]) menu.addAction(self.__projectAct) self.__editorAct = E4Action(self.trUtf8('Check Syntax'), self.trUtf8('&Syntax...'), 0, 0, self, "") self.__editorAct.setWhatsThis(self.trUtf8( """Check Syntax...""" """

    This checks Python files for syntax errors.

    """ )) self.connect(self.__editorAct, SIGNAL('triggered()'), self.__editorSyntaxCheck) self.connect(e4App().getObject("Project"), SIGNAL("showMenu"), self.__projectShowMenu) self.connect(e4App().getObject("ProjectBrowser").getProjectBrowser("sources"), SIGNAL("showMenu"), self.__projectBrowserShowMenu) self.connect(e4App().getObject("ViewManager"), SIGNAL("editorOpenedEd"), self.__editorOpened) self.connect(e4App().getObject("ViewManager"), SIGNAL("editorClosedEd"), self.__editorClosed) for editor in e4App().getObject("ViewManager").getOpenEditors(): self.__editorOpened(editor) return None, True def deactivate(self): """ Public method to deactivate this plugin. """ self.disconnect(e4App().getObject("Project"), SIGNAL("showMenu"), self.__projectShowMenu) self.disconnect(e4App().getObject("ProjectBrowser").getProjectBrowser("sources"), SIGNAL("showMenu"), self.__projectBrowserShowMenu) self.disconnect(e4App().getObject("ViewManager"), SIGNAL("editorOpenedEd"), self.__editorOpened) self.disconnect(e4App().getObject("ViewManager"), SIGNAL("editorClosedEd"), self.__editorClosed) menu = e4App().getObject("Project").getMenu("Checks") if menu: menu.removeAction(self.__projectAct) if self.__projectBrowserMenu: if self.__projectBrowserAct: self.__projectBrowserMenu.removeAction(self.__projectBrowserAct) for editor in self.__editors: self.disconnect(editor, SIGNAL("showMenu"), self.__editorShowMenu) menu = editor.getMenu("Checks") if menu is not None: menu.removeAction(self.__editorAct) self.__initialize() def __projectShowMenu(self, menuName, menu): """ Private slot called, when the the project menu or a submenu is about to be shown. @param menuName name of the menu to be shown (string) @param menu reference to the menu (QMenu) """ if menuName == "Checks" and self.__projectAct is not None: self.__projectAct.setEnabled(\ e4App().getObject("Project").getProjectLanguage() == "Python") def __projectBrowserShowMenu(self, menuName, menu): """ Private slot called, when the the project browser menu or a submenu is about to be shown. @param menuName name of the menu to be shown (string) @param menu reference to the menu (QMenu) """ if menuName == "Checks" and \ e4App().getObject("Project").getProjectLanguage() == "Python": self.__projectBrowserMenu = menu if self.__projectBrowserAct is None: self.__projectBrowserAct = E4Action(self.trUtf8('Check Syntax'), self.trUtf8('&Syntax...'), 0, 0, self, "") self.__projectBrowserAct.setWhatsThis(self.trUtf8( """Check Syntax...""" """

    This checks Python files for syntax errors.

    """ )) self.connect(self.__projectBrowserAct, SIGNAL('triggered()'), self.__projectBrowserSyntaxCheck) if not self.__projectBrowserAct in menu.actions(): menu.addAction(self.__projectBrowserAct) def __projectSyntaxCheck(self): """ Public slot used to check the project files for bad indentations. """ project = e4App().getObject("Project") project.saveAllScripts() files = [os.path.join(project.ppath, file) \ for file in project.pdata["SOURCES"] \ if file.endswith(".py") or \ file.endswith(".pyw") or \ file.endswith(".ptl")] self.__projectSyntaxCheckerDialog = SyntaxCheckerDialog() self.__projectSyntaxCheckerDialog.show() self.__projectSyntaxCheckerDialog.start(files) def __projectBrowserSyntaxCheck(self): """ Private method to handle the syntax check context menu action of the project sources browser. """ browser = e4App().getObject("ProjectBrowser").getProjectBrowser("sources") itm = browser.model().item(browser.currentIndex()) try: fn = itm.fileName() except AttributeError: fn = itm.dirName() self.__projectBrowserSyntaxCheckerDialog = SyntaxCheckerDialog() self.__projectBrowserSyntaxCheckerDialog.show() self.__projectBrowserSyntaxCheckerDialog.start(fn) def __editorOpened(self, editor): """ Private slot called, when a new editor was opened. @param editor reference to the new editor (QScintilla.Editor) """ menu = editor.getMenu("Checks") if menu is not None: menu.addAction(self.__editorAct) self.connect(editor, SIGNAL("showMenu"), self.__editorShowMenu) self.__editors.append(editor) def __editorClosed(self, editor): """ Private slot called, when an editor was closed. @param editor reference to the editor (QScintilla.Editor) """ try: self.__editors.remove(editor) except ValueError: pass def __editorShowMenu(self, menuName, menu, editor): """ Private slot called, when the the editor context menu or a submenu is about to be shown. @param menuName name of the menu to be shown (string) @param menu reference to the menu (QMenu) @param editor reference to the editor """ if menuName == "Checks": if not self.__editorAct in menu.actions(): menu.addAction(self.__editorAct) self.__editorAct.setEnabled(editor.isPyFile()) def __editorSyntaxCheck(self): """ Private slot to handle the syntax check context menu action of the editors. """ editor = e4App().getObject("ViewManager").activeWindow() if editor is not None: self.__editorSyntaxCheckerDialog = SyntaxCheckerDialog() self.__editorSyntaxCheckerDialog.show() self.__editorSyntaxCheckerDialog.start(editor.getFileName(), unicode(editor.text())) eric4-4.5.18/eric/Plugins/PaxHeaders.8617/PluginWizardQInputDialog.py0000644000175000001440000000013212261012647023405 xustar000000000000000030 mtime=1388582311.967076656 30 atime=1389081082.794724399 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/PluginWizardQInputDialog.py0000644000175000001440000001000512261012647023133 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing the QInputDialog wizard plugin. """ from PyQt4.QtCore import QObject, SIGNAL, QString from PyQt4.QtGui import QDialog from KdeQt.KQApplication import e4App from KdeQt import KQMessageBox from E4Gui.E4Action import E4Action from WizardPlugins.InputDialogWizard.InputDialogWizardDialog import \ InputDialogWizardDialog # Start-Of-Header name = "QInputDialog Wizard Plugin" author = "Detlev Offenbach " autoactivate = True deactivateable = True version = "4.4.0" className = "InputDialogWizard" packageName = "__core__" shortDescription = "Show the QInputDialog wizard." longDescription = """This plugin shows the QInputDialog wizard.""" # End-Of-Header error = QString("") class InputDialogWizard(QObject): """ Class implementing the QInputDialog wizard plugin. """ def __init__(self, ui): """ Constructor @param ui reference to the user interface object (UI.UserInterface) """ QObject.__init__(self, ui) self.__ui = ui def activate(self): """ Public method to activate this plugin. @return tuple of None and activation status (boolean) """ self.__initAction() self.__initMenu() return None, True def deactivate(self): """ Public method to deactivate this plugin. """ menu = self.__ui.getMenu("wizards") if menu: menu.removeAction(self.action) self.__ui.removeE4Actions([self.action], 'wizards') def __initAction(self): """ Private method to initialize the action. """ self.action = E4Action(self.trUtf8('QInputDialog Wizard'), self.trUtf8('Q&InputDialog Wizard...'), 0, 0, self, 'wizards_qinputdialog') self.action.setStatusTip(self.trUtf8('QInputDialog Wizard')) self.action.setWhatsThis(self.trUtf8( """QInputDialog Wizard""" """

    This wizard opens a dialog for entering all the parameters""" """ needed to create a QInputDialog. The generated code is inserted""" """ at the current cursor position.

    """ )) self.connect(self.action, SIGNAL('triggered()'), self.__handle) self.__ui.addE4Actions([self.action], 'wizards') def __initMenu(self): """ Private method to add the actions to the right menu. """ menu = self.__ui.getMenu("wizards") if menu: menu.addAction(self.action) def __callForm(self, editor): """ Private method to display a dialog and get the code. @param editor reference to the current editor @return the generated code (string) """ dlg = InputDialogWizardDialog(None) if dlg.exec_() == QDialog.Accepted: line, index = editor.getCursorPosition() indLevel = editor.indentation(line)/editor.indentationWidth() if editor.indentationsUseTabs(): indString = '\t' else: indString = editor.indentationWidth() * ' ' return (dlg.getCode(indLevel, indString), True) else: return (None, False) def __handle(self): """ Private method to handle the wizards action """ editor = e4App().getObject("ViewManager").activeWindow() if editor == None: KQMessageBox.critical(None, self.trUtf8('No current editor'), self.trUtf8('Please open or create a file first.')) else: code, ok = self.__callForm(editor) if ok: line, index = editor.getCursorPosition() # It should be done on this way to allow undo editor.beginUndoAction() editor.insertAt(code, line, index) editor.endUndoAction() eric4-4.5.18/eric/Plugins/PaxHeaders.8617/PluginVmListspace.py0000644000175000001440000000013212261012647022116 xustar000000000000000030 mtime=1388582311.969076681 30 atime=1389081082.794724399 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/PluginVmListspace.py0000644000175000001440000000347412261012647021660 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing the Tabview view manager plugin. """ import os from PyQt4.QtCore import QT_TRANSLATE_NOOP, QString from PyQt4.QtGui import QPixmap # Start-Of-Header name = "Listspace Plugin" author = "Detlev Offenbach " autoactivate = False deactivateable = False version = "4.4.0" pluginType = "viewmanager" pluginTypename = "listspace" displayString = QT_TRANSLATE_NOOP('VmListspacePlugin', 'Listspace') className = "VmListspacePlugin" packageName = "__core__" shortDescription = "Implements the Listspace view manager." longDescription = """This plugin provides the listspace view manager.""" # End-Of-Header error = QString("") def previewPix(): """ Module function to return a preview pixmap. @return preview pixmap (QPixmap) """ fname = os.path.join(os.path.dirname(__file__), "ViewManagerPlugins", "Listspace", "preview.png") return QPixmap(fname) class VmListspacePlugin(object): """ Class implementing the Listspace view manager plugin. """ def __init__(self, ui): """ Constructor @param ui reference to the user interface object (UI.UserInterface) """ self.__ui = ui def activate(self): """ Public method to activate this plugin. @return tuple of reference to instantiated viewmanager and activation status (boolean) """ from ViewManagerPlugins.Listspace.Listspace import Listspace self.__object = Listspace(self.__ui) return self.__object, True def deactivate(self): """ Public method to deactivate this plugin. """ # do nothing for the moment pass eric4-4.5.18/eric/Plugins/PaxHeaders.8617/PluginAbout.py0000644000175000001440000000013212261012647020736 xustar000000000000000030 mtime=1388582311.971076707 30 atime=1389081082.795724399 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/PluginAbout.py0000644000175000001440000001214112261012647020467 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing the About plugin. """ from PyQt4.QtCore import QObject, SIGNAL, QString from PyQt4.QtGui import QMessageBox, QAction import KdeQt from UI.Info import * import UI.PixmapCache from E4Gui.E4Action import E4Action from AboutPlugin.AboutDialog import AboutDialog # Start-Of-Header name = "About Plugin" author = "Detlev Offenbach " autoactivate = True deactivateable = True version = "4.4.0" className = "AboutPlugin" packageName = "__core__" shortDescription = "Show the About dialogs." longDescription = """This plugin shows the About dialogs.""" # End-Of-Header error = QString("") class AboutPlugin(QObject): """ Class implementing the About plugin. """ def __init__(self, ui): """ Constructor @param ui reference to the user interface object (UI.UserInterface) """ QObject.__init__(self, ui) self.__ui = ui def activate(self): """ Public method to activate this plugin. @return tuple of None and activation status (boolean) """ self.__initActions() self.__initMenu() return None, True def deactivate(self): """ Public method to deactivate this plugin. """ menu = self.__ui.getMenu("help") if menu: menu.removeAction(self.aboutAct) menu.removeAction(self.aboutQtAct) if self.aboutKdeAct is not None: menu.removeAction(self.aboutKdeAct) acts = [self.aboutAct, self.aboutQtAct] if self.aboutKdeAct is not None: acts.append(self.aboutKdeAct) self.__ui.removeE4Actions(acts, 'ui') def __initActions(self): """ Private method to initialize the actions. """ acts = [] self.aboutAct = E4Action(self.trUtf8('About %1').arg(Program), UI.PixmapCache.getIcon("helpAbout.png"), self.trUtf8('&About %1').arg(Program), 0, 0, self, 'about_eric') self.aboutAct.setStatusTip(self.trUtf8('Display information about this software')) self.aboutAct.setWhatsThis(self.trUtf8( """About %1""" """

    Display some information about this software.

    """ ).arg(Program)) self.connect(self.aboutAct, SIGNAL('triggered()'), self.__about) self.aboutAct.setMenuRole(QAction.AboutRole) acts.append(self.aboutAct) self.aboutQtAct = E4Action(self.trUtf8('About Qt'), UI.PixmapCache.getIcon("helpAboutQt.png"), self.trUtf8('About &Qt'), 0, 0, self, 'about_qt') self.aboutQtAct.setStatusTip(\ self.trUtf8('Display information about the Qt toolkit')) self.aboutQtAct.setWhatsThis(self.trUtf8( """About Qt""" """

    Display some information about the Qt toolkit.

    """ )) self.connect(self.aboutQtAct, SIGNAL('triggered()'), self.__aboutQt) self.aboutQtAct.setMenuRole(QAction.AboutQtRole) acts.append(self.aboutQtAct) if KdeQt.isKDE(): self.aboutKdeAct = E4Action(self.trUtf8('About KDE'), UI.PixmapCache.getIcon("helpAboutKde.png"), self.trUtf8('About &KDE'), 0, 0, self, 'about_kde') self.aboutKdeAct.setStatusTip(self.trUtf8('Display information about KDE')) self.aboutKdeAct.setWhatsThis(self.trUtf8( """About KDE""" """

    Display some information about KDE.

    """ )) self.connect(self.aboutKdeAct, SIGNAL('triggered()'), self.__aboutKde) acts.append(self.aboutKdeAct) else: self.aboutKdeAct = None self.__ui.addE4Actions(acts, 'ui') def __initMenu(self): """ Private method to add the actions to the right menu. """ menu = self.__ui.getMenu("help") if menu: act = self.__ui.getMenuAction("help", "show_versions") if act: menu.insertAction(act, self.aboutAct) menu.insertAction(act, self.aboutQtAct) if self.aboutKdeAct is not None: menu.insertAction(act, self.aboutKdeAct) else: menu.addAction(self.aboutAct) menu.addAction(self.aboutQtAct) if self.aboutKdeAct is not None: menu.addAction(self.aboutKdeAct) def __about(self): """ Private slot to handle the About dialog. """ dlg = AboutDialog(self.__ui) dlg.exec_() def __aboutQt(self): """ Private slot to handle the About Qt dialog. """ QMessageBox.aboutQt(self.__ui, Program) def __aboutKde(self): """ Private slot to handle the About KDE dialog. """ from PyKDE4.kdeui import KHelpMenu menu = KHelpMenu(self.__ui) menu.aboutKDE() eric4-4.5.18/eric/Plugins/PaxHeaders.8617/PluginWizardQColorDialog.py0000644000175000001440000000013212261012647023364 xustar000000000000000030 mtime=1388582311.974076745 30 atime=1389081082.795724399 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/PluginWizardQColorDialog.py0000644000175000001440000001004212261012647023113 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing the QColorDialog wizard plugin. """ from PyQt4.QtCore import QObject, SIGNAL, QString from PyQt4.QtGui import QDialog from KdeQt.KQApplication import e4App from KdeQt import KQMessageBox from E4Gui.E4Action import E4Action from WizardPlugins.ColorDialogWizard.ColorDialogWizardDialog import \ ColorDialogWizardDialog # Start-Of-Header name = "QColorDialog Wizard Plugin" author = "Detlev Offenbach " autoactivate = True deactivateable = True version = "4.4.0" className = "ColorDialogWizard" packageName = "__core__" shortDescription = "Show the QColorDialog wizard." longDescription = """This plugin shows the QColorDialog wizard.""" # End-Of-Header error = QString("") class ColorDialogWizard(QObject): """ Class implementing the QColorDialog wizard plugin. """ def __init__(self, ui): """ Constructor @param ui reference to the user interface object (UI.UserInterface) """ QObject.__init__(self, ui) self.__ui = ui def activate(self): """ Public method to activate this plugin. @return tuple of None and activation status (boolean) """ self.__initAction() self.__initMenu() return None, True def deactivate(self): """ Public method to deactivate this plugin. """ menu = self.__ui.getMenu("wizards") if menu: menu.removeAction(self.action) self.__ui.removeE4Actions([self.action], 'wizards') def __initAction(self): """ Private method to initialize the action. """ self.action = E4Action(self.trUtf8('QColorDialog Wizard'), self.trUtf8('Q&ColorDialog Wizard...'), 0, 0, self, 'wizards_qcolordialog') self.action.setStatusTip(self.trUtf8('QColorDialog Wizard')) self.action.setWhatsThis(self.trUtf8( """QColorDialog Wizard""" """

    This wizard opens a dialog for entering all the parameters""" """ needed to create a QColorDialog. The generated code is inserted""" """ at the current cursor position.

    """ )) self.connect(self.action, SIGNAL('triggered()'), self.__handle) self.__ui.addE4Actions([self.action], 'wizards') def __initMenu(self): """ Private method to add the actions to the right menu. """ menu = self.__ui.getMenu("wizards") if menu: menu.addAction(self.action) def __callForm(self, editor): """ Private method to display a dialog and get the code. @param editor reference to the current editor @return the generated code (string) and a success flag (boolean) """ dlg = ColorDialogWizardDialog(None) if dlg.exec_() == QDialog.Accepted: line, index = editor.getCursorPosition() indLevel = editor.indentation(line)/editor.indentationWidth() if editor.indentationsUseTabs(): indString = '\t' else: indString = editor.indentationWidth() * ' ' return (dlg.getCode(indLevel, indString), True) else: return (None, False) def __handle(self): """ Private method to handle the wizards action """ editor = e4App().getObject("ViewManager").activeWindow() if editor == None: KQMessageBox.critical(None, self.trUtf8('No current editor'), self.trUtf8('Please open or create a file first.')) else: code, ok = self.__callForm(editor) if ok: line, index = editor.getCursorPosition() # It should be done on this way to allow undo editor.beginUndoAction() editor.insertAt(code, line, index) editor.endUndoAction() eric4-4.5.18/eric/Plugins/PaxHeaders.8617/ViewManagerPlugins0000644000175000001440000000013112261012660021617 xustar000000000000000030 mtime=1388582320.151179817 29 atime=1389081086.01372434 30 ctime=1389081086.315724332 eric4-4.5.18/eric/Plugins/ViewManagerPlugins/0000755000175000001440000000000012261012660021427 5ustar00detlevusers00000000000000eric4-4.5.18/eric/Plugins/ViewManagerPlugins/PaxHeaders.8617/Workspace0000644000175000001440000000013112261012660023555 xustar000000000000000030 mtime=1388582320.118179405 29 atime=1389081086.01372434 30 ctime=1389081086.315724332 eric4-4.5.18/eric/Plugins/ViewManagerPlugins/Workspace/0000755000175000001440000000000012261012660023365 5ustar00detlevusers00000000000000eric4-4.5.18/eric/Plugins/ViewManagerPlugins/Workspace/PaxHeaders.8617/Workspace.py0000644000175000001440000000013212261012647026150 xustar000000000000000030 mtime=1388582311.977076783 30 atime=1389081082.795724399 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/ViewManagerPlugins/Workspace/Workspace.py0000644000175000001440000003010112261012647025675 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2002 - 2014 Detlev Offenbach # """ Module implementing the workspace viewmanager class. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from ViewManager.ViewManager import ViewManager import QScintilla.Editor import UI.PixmapCache from E4Gui.E4Action import E4Action, addActions import Utilities class Workspace(QWorkspace, ViewManager): """ Class implementing the workspace viewmanager class. @signal editorChanged(string) emitted when the current editor has changed """ def __init__(self, parent): """ Constructor @param parent parent widget (QWidget) @param ui reference to the main user interface @param dbs reference to the debug server object """ QWorkspace.__init__(self, parent) ViewManager.__init__(self) self.setScrollBarsEnabled(True) self.lastFN = '' self.__windowMapper = QSignalMapper(self) self.connect(self.__windowMapper, SIGNAL('mapped(QWidget*)'), self.setActiveWindow) self.connect(self, SIGNAL('windowActivated(QWidget*)'), self.__windowActivated) def canCascade(self): """ Public method to signal if cascading of managed windows is available. @return flag indicating cascading of windows is available """ return True def canTile(self): """ Public method to signal if tiling of managed windows is available. @return flag indicating tiling of windows is available """ return True def canSplit(self): """ public method to signal if splitting of the view is available. @return flag indicating splitting of the view is available. """ return False def tile(self): """ Public method to tile the managed windows. """ QWorkspace.tile(self) def cascade(self): """ Public method to cascade the managed windows. """ QWorkspace.cascade(self) def _removeAllViews(self): """ Protected method to remove all views (i.e. windows) """ for win in self.editors: self._removeView(win) def _removeView(self, win): """ Protected method to remove a view (i.e. window) @param win editor window to be removed """ self.lastFN = '' win.removeEventFilter(self) win.closeIt() def _addView(self, win, fn = None, noName = ""): """ Protected method to add a view (i.e. window) @param win editor window to be added @param fn filename of this editor @param noName name to be used for an unnamed editor (string or QString) """ self.addWindow(win) if fn is None: if not unicode(noName): self.untitledCount += 1 noName = self.trUtf8("Untitled %1").arg(self.untitledCount) win.setWindowTitle(noName) win.setNoName(noName) else: if self.lastFN != fn: self.lastFN = fn # QWorkspace is a little bit tricky win.hide() win.show() # Make the editor window a little bit smaller to make the whole # window with all decorations visible. This is not the most elegant # solution but more of a workaround for another QWorkspace strangeness. # 25 points are subtracted to give space for the scrollbars pw = win.parentWidget() sz = QSize(self.width() - 25, self.height() - 25) pw.resize(sz) win.setFocus() win.installEventFilter(self) def _showView(self, win, fn = None): """ Private method to show a view (i.e. window) @param win editor window to be shown @param fn filename of this editor """ if fn is not None and self.lastFN != fn: self.lastFN = fn # QWorkspace is a little bit tricky win.hide() win.show() win.setFocus() def activeWindow(self): """ Private method to return the active (i.e. current) window. @return reference to the active editor """ return QWorkspace.activeWindow(self) def showWindowMenu(self, windowMenu): """ Public method to set up the viewmanager part of the Window menu. @param windowMenu reference to the window menu """ self.windowsMenu = QMenu(self.trUtf8('&Windows')) menu = self.windowsMenu idx = 1 for sv in self.editors: if idx == 10: menu.addSeparator() menu = menu.addMenu(self.trUtf8("&More")) fn = sv.fileName if fn: txt = Utilities.compactPath(unicode(fn), self.ui.maxMenuFilePathLen) else: txt = sv.windowTitle() accel = "" if idx < 10: accel = "&%d. " % idx elif idx < 36: accel = "&%c. " % chr(idx - 9 + ord("@")) act = menu.addAction("%s%s" % (accel, txt)) self.connect(act, SIGNAL("triggered()"), self.__windowMapper, SLOT("map()")) self.__windowMapper.setMapping(act, sv) idx += 1 addActions(windowMenu, [None, self.nextChildAct, self.prevChildAct, self.tileAct, self.cascadeAct, self.restoreAllAct, self.iconizeAllAct, self.arrangeIconsAct, None]) act = windowMenu.addMenu(self.windowsMenu) if len(self.editors) == 0: act.setEnabled(False) def _initWindowActions(self): """ Protected method to define the user interface actions for window handling. """ self.tileAct = E4Action(self.trUtf8('Tile'), self.trUtf8('&Tile'), 0, 0, self, 'vm_window_tile') self.tileAct.setStatusTip(self.trUtf8('Tile the windows')) self.tileAct.setWhatsThis(self.trUtf8( """Tile the windows""" """

    Rearrange and resize the windows so that they are tiled.

    """ )) self.connect(self.tileAct, SIGNAL('triggered()'), self.tile) self.windowActions.append(self.tileAct) self.cascadeAct = E4Action(self.trUtf8('Cascade'), self.trUtf8('&Cascade'), 0, 0, self, 'vm_window_cascade') self.cascadeAct.setStatusTip(self.trUtf8('Cascade the windows')) self.cascadeAct.setWhatsThis(self.trUtf8( """Cascade the windows""" """

    Rearrange and resize the windows so that they are cascaded.

    """ )) self.connect(self.cascadeAct, SIGNAL('triggered()'), self.cascade) self.windowActions.append(self.cascadeAct) self.nextChildAct = E4Action(self.trUtf8('Next'), self.trUtf8('&Next'), 0, 0, self, 'vm_window_next') self.nextChildAct.setStatusTip(self.trUtf8('Activate next window')) self.nextChildAct.setWhatsThis(self.trUtf8( """Next""" """

    Activate the next window of the list of open windows.

    """ )) self.connect(self.nextChildAct, SIGNAL('triggered()'), self.activateNextWindow) self.windowActions.append(self.nextChildAct) self.prevChildAct = E4Action(self.trUtf8('Previous'), self.trUtf8('&Previous'), 0, 0, self, 'vm_window_previous') self.prevChildAct.setStatusTip(self.trUtf8('Activate previous window')) self.prevChildAct.setWhatsThis(self.trUtf8( """Previous""" """

    Activate the previous window of the list of open windows.

    """ )) self.connect(self.prevChildAct, SIGNAL('triggered()'), self.activatePreviousWindow) self.windowActions.append(self.prevChildAct) self.restoreAllAct = E4Action(self.trUtf8('Restore All'), self.trUtf8('&Restore All'), 0, 0, self, 'vm_window_restore_all') self.restoreAllAct.setStatusTip(self.trUtf8('Restore all windows')) self.restoreAllAct.setWhatsThis(self.trUtf8( """Restore All""" """

    Restores all windows to their original size.

    """ )) self.connect(self.restoreAllAct, SIGNAL('triggered()'), self.__restoreAllWindows) self.windowActions.append(self.restoreAllAct) self.iconizeAllAct = E4Action(self.trUtf8('Iconize All'), self.trUtf8('&Iconize All'), 0, 0, self, 'vm_window_iconize_all') self.iconizeAllAct.setStatusTip(self.trUtf8('Iconize all windows')) self.iconizeAllAct.setWhatsThis(self.trUtf8( """Iconize All""" """

    Iconizes all windows.

    """ )) self.connect(self.iconizeAllAct, SIGNAL('triggered()'), self.__iconizeAllWindows) self.windowActions.append(self.iconizeAllAct) self.arrangeIconsAct = E4Action(self.trUtf8('Arrange Icons'), self.trUtf8('&Arrange Icons'), 0, 0, self, 'vm_window_iconize_all') self.arrangeIconsAct.setStatusTip(self.trUtf8('Arrange all icons')) self.arrangeIconsAct.setWhatsThis(self.trUtf8( """Arrange Icons""" """

    Arranges all icons.

    """ )) self.connect(self.arrangeIconsAct, SIGNAL('triggered()'), self.arrangeIcons) self.windowActions.append(self.arrangeIconsAct) def setEditorName(self, editor, newName): """ Public method to change the displayed name of the editor. @param editor editor window to be changed @param newName new name to be shown (string or QString) """ pass def _modificationStatusChanged(self, m, editor): """ Protected slot to handle the modificationStatusChanged signal. @param m flag indicating the modification status (boolean) @param editor editor window changed """ if m: editor.setWindowIcon(UI.PixmapCache.getIcon("fileModified.png")) elif editor.hasSyntaxErrors(): editor.setWindowIcon(UI.PixmapCache.getIcon("syntaxError.png")) else: editor.setWindowIcon(UI.PixmapCache.getIcon("empty.png")) self._checkActions(editor) def _syntaxErrorToggled(self, editor): """ Protected slot to handle the syntaxerrorToggled signal. @param editor editor that sent the signal """ if editor.hasSyntaxErrors(): editor.setWindowIcon(UI.PixmapCache.getIcon("syntaxError.png")) else: editor.setWindowIcon(UI.PixmapCache.getIcon("empty.png")) ViewManager._syntaxErrorToggled(self, editor) def __windowActivated(self, editor): """ Private slot to handle the windowActivated signal. @param editor the activated editor window """ self._checkActions(editor) if editor is not None: fn = editor.getFileName() self.emit(SIGNAL('editorChanged'), unicode(fn)) def eventFilter(self, watched, event): """ Public method called to filter the event queue. @param watched the QObject being watched @param event the event that occurred @return always False """ if event.type() == QEvent.Close and isinstance(watched, QScintilla.Editor.Editor): watched.close() return False def __restoreAllWindows(self): """ Private slot to restore all windows. """ for win in self.windowList(): win.showNormal() def __iconizeAllWindows(self): """ Private slot to iconize all windows. """ for win in self.windowList(): win.showMinimized() self.arrangeIcons() eric4-4.5.18/eric/Plugins/ViewManagerPlugins/Workspace/PaxHeaders.8617/__init__.py0000644000175000001440000000013212261012647025751 xustar000000000000000030 mtime=1388582311.979076809 30 atime=1389081082.798724398 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/ViewManagerPlugins/Workspace/__init__.py0000644000175000001440000000024712261012647025506 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Package containing the workspace view manager plugin. """ eric4-4.5.18/eric/Plugins/ViewManagerPlugins/Workspace/PaxHeaders.8617/preview.png0000644000175000001440000000007410650203476026036 xustar000000000000000030 atime=1389081082.798724398 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/ViewManagerPlugins/Workspace/preview.png0000644000175000001440000010275010650203476025570 0ustar00detlevusers00000000000000PNG  IHDRśbKGD pHYs  tIME 1:5 IDATxyp\u'|z7,hB @%R-QfKvLH&II)ēّ[VDSEq'$}n b"W,{{{{ιIF*`yyAЃðgy[ƿۿE`0pWy=˲(% (LAGi;zҪc. EaFQCQVAoo__~'0 illD$% ^( 8a nbjZ"ABv)qn( k׮YVM\jafyvvb Bh$q\gϞmkk $p8% D": QILG|FinnF---6իR$I566fkkkɤN/^ljj**p?$I!8IPH-EQT*HDRdIatt>"d29T*h:v8b$ɥ%Ϝ9|>_(,dqFWWԔ(2L&^,ŢN+ r`0ZVAX}G_y啚ŒA E:B$= D©A#-K  3 k$EQbT0|/v`H349uTPn.@d65L*P(0 ܬP(RZ6 VU.0NM&jb :n||ɓJRTbd2yI RVM&$I޸qh4r pGd1 R|>_ssbYXXv8ҪY*=ZFX,&qNTz**ɄBb 0. U*U2F|^T499gϞP($*j~~t\.GD< :D"KRTtΝ۳g͛71 #" J!TWW;wj*rlbѣGaX,WӥRNRiZGGG MOO744Pv155P(6z Tud2jðH,U0 ӪP{BP.Ȯ2RcEiiu ͭ0ӟP,U XaZCP"@$666T* ~2AH`0h4Yi%`0q\KK B!&jjjN:566J(8~x__0T\.rq\{{T (JdP(D"ft6%E(Vbt\syyb,<˲pxvvVjֶo߾e:99933fۗL&,ae3??D:::xD"BeAR̩SDQ8駟vѨBz " _~9 4,b&&FPgragVCApx3V3̺W3BPݞ\ n'٦'!Ȭ%i; pN p@ Aȋa1;&5@ M?xkm~n]gW56כ,ٹW^EXL$R$-Py@QtP6 *C6D>aT׽P.8Ӓt1Sr 1J( HNpg]*ʅ>:[؇;+!2|g~EQ20$Np=;.dp[pv̆g!tuFugj8MxmyԗҡgGbdEP ؖzgx<͎f^6p8>W\f`mZ#XΎ"SZ}Hqම2elonQ49W_% E>$6yynN]6`O( ]nB1 lXc%6ݼ%"( b+|q3@_P6auc~D@۹p7J" +`hX! >;@ ~&2oF&z7oO:77@>A,FΌ'o 7-@*;bz;,Bt![ʆҡ`*(bt9ϔ2Rf?q}z)y;>o(O9*W! AM&hZnCtuu%ͭ,'1᷂rTNP AV3W۝|b1xs^YCD> B@a4[ʾxEoZ*98 Hq/w2s(R vifx`-/qhDU_=l((x%P 2[nv4o>f+2 "]P̔)ЅH6BMkpL-@9%|z^}SRSR6OO1T+RUB u>`NX$O,P(~x%:mPmr4|18x$YH& k@w}= O#E'q\k;̖zQhP:TKN\ 0C1_gXJtis[ЌJr_·Ϲ3Ӹm\e5 v-\u[LNNWz I@俵G5ru0̕r-U-s7B,$bdq!F|#5ƚӗ#bj!̇#L.iLAϠMk8yQ˲,sV1#8{ޅB."gkmtJݠgP-WGbJYiR`.1D.]-Azg Alt3,et0 X4zf{\&lx5H Z 2s%Ro D.-ŖKAbzly̟{ ^όAmqǍj4GRBMxld10˳C/+eJL \>&)O'JӢ(, DQr\~mW~ |cfC0+Ң!tha-D"Z:. PFGGP!0 9rLHY.Eh Y_4MK'l$VtPA(4b0 {b΄k 5\ʅHp&-ecXYеմq> BaR}ےX eU(8+; O}џ}4'w*խL_I 8>JnSTeWG|#(xGtJݺʨ-(bFlijs'@&x Y4ɊxXkGFFf;(@רX?W} ׿+ת~?ßW& k\ (,e 4ͱ,TPhzY| Ofuuua |J;*R! h8E /^f7nrjB|,A</  :;;gff61WS䨜NWDeeEAdٝ[+z@h4JӴJR-n *DPb@0L_T6 ɓ[Ym|uWyoYe/yLe29Dz;f^GS3<+*29J ;xW1EwQyw<^ϝ;ꫯ&MJAs§l PUU& R97[v$rM۠+)E[?|(r\Z]iD;@v) ECCrV}D#T n_lm"_x__7VDAۛ'K…H 'bf2"*l6i4Je*Da0o MjV= Smfu[0FAaZo4pݟz_DJX VW()AhheD`X\p庶))_P' B:bu+QP&]J`08::zILfySRU$48hٽqB] ( w]|ᑑn6HLOB.^8pwӹcg?;K8ŊK`^-a^ne#2 A4H7V]]]*;SQJ 69?7)*Zw&Dm`tq9 A0a9A$]ey!T"0;Ҙ9t~*1,7OiVz氾C͍U'\ZJe%aAE`Eo 8" Wr<#'  [4F5OqjF "/jþ&m߰_.W1,GZ%Ïf0io Oܽ8?)C0D`((c(( K7(,'`8ToeJY_Jhu|.vZQd}pq#7FT|l6~Pݙ˳Gǭ9CxA!aH "bӨ}}LyA"Uݯ}_8^#T,c("5@Qa8CO&ϲ<S-?ŧ{l4DYV@H&wɯ A9 A yiQ,#("0 nU׽RRhi(7j5GQD"40^<{UA(rWҠپ8?qt_j%@@xyK}O<~H`ssT48a!u}|dT;{Λ1jDkvɿ|G4^ԩr8"I`G]z.(s#RT*Oϴ=걆R7[Hw~Oe!Y#$rTPx#{H?\ȄUb%~5h\*lͥKAa}|ahu<:r«R.G6:u5?~a>#n'T)XRaB2VW~;zZu\ѹӟtމIt횙lm'³MKzll$W<9&3ݺ֡m7%t,'pL5bW)[dϝ;Tao Wo,55&ʼn'N,;{G.?rn&4tVMO tw2CYZPZu"-pk??vÓOzgǺH:.^Cۺӭk:ζ6a{ Ou;~ܸk\tUuwvۭ`X[[8/;` ssKv%_ ! IDATRd'jt_)'/T^Hjݢhh)K3 7XB0$X-FQLvi9u{Xs:n /'^rjVOIʓ!i"LN /)('@WIBSlRD5}L&= *E5?nPȑQm ѽFEy̥zRL.*uRnRpЇH`F+ :W5xyQ)j Jʤ S>mF6{U0b2>d͕Ě*ك:՛Ƒ75񩥼Id8\/?{mw+)GfggNtXx= Ab$H2% ^Et)3??LDX?8ǿܿᡮXUr*S箌>KBޖrrU0,2TL&Ag뜵> e|Rg__ǻj՚OG u3MzêbD< Z$䴧 !D!E,Y ȪabbnׁeߒŨC-,zvҡp i3zkK|&a }[1{SERd(`"pځ hy/\J:\\&P` Fd:wZbѨт>ኜ6BRdo`b$f l<`sސL:5AᅥVՙjBO]|lgF7?73`\q1hrX0TdJ 7<392+ ū̪Ԝٰ?T Z."j=2f 7诶4Dr\VrM$eJ'PD,2Û#Q1H/$WFsuEFVeFd7Sh<-h( C%[[w'1t!yLYs/8 g 2tk6(J|l65RYQ0 &|F CTL/J+kp *@F#vq30D3޶$ En?ۀ+JgC /k`k74 {;}B;y@ PhP1 "0XQ:}vWT\.f7b aZAwM5֎8p>+ T@`M>:uiL HoIQ ;D !>dl@l[4NZ5/|q J AJj<Dp[{A`hk#k79C`i7m]@XJCMXjq.2/FUaV*#K3Q FTI</ťPKS.M_E1UH-Ŗly!)fJtd)f{CL1ǥ_?{_??q^o3lyY={k^y7<<,p3 ϯ:#YHt `C[sqő#x\/;3z9@\\_O?bA`$[ y՜@Eet ʹi:xqAk)Y, YEPގ@]g4uXRg:AI9tමO}Zh10 2Q)GyESNyo~۲!x)TpXos&fgWfKϖJ`օ\.ꩧ6Y0vr|Mn7wU \0p;ߙX'NTX_ iph4vuuu8c@iwrY[[VLJu>s(˟q+I257ҋHWblz$|)Ul6IpőK/>}Zt*]jV}`3~wξ{?+fl+K%PV p7qK.ݻw;K,2Rv7vJxZ-e[n֥R.]L+eʕm8cMgݟor58`X  Z6Oj8vP.\v//sκ΁f{7ՒZin&4ƺ뻥L)C$1SFann ֙ B.6ٛVY.YnPߵ4E1YH 7)bpL.jI-P9*\a}d8Qej?Շl9UHuysqQ%|.kպ~T`yyYRaF7)x[ʶWlrRa2)fc$4W.og $Iӳ.7(wE N.wϩIu)bƨ6S`*Xe"PBb)OUa_ܗ,$-ˡC(.k*0. Uq,u|$ C0 hk\.2CIᲽ{G}C1л BqƗ5ٚn,^bJ:Hm :ά6gJi,jՆG>ZZZ67!Fٹllj>|aGWGlrrNsvڵAu GH۪ Ȣp<7pu"ﶺk 5 ,X]gimNs28+jRtQM"[JQhH!2w7;js ("]u][*t8nnջaJW06J&6LcM֚j,ǚԦx.Zժ!55m[v*ImHHK5ƢHRcRZZCy*/ݯITrESFۏ!P 'zbtLifԪ꯶}u.<'eEYTr\~ J47bٵ ]g+j:KT Ul ۴6֊#P?]{7W۝Rp#-p;I*Sx<ZZZ6U@Q4rZbn]<{)Yxx8 Y)ӉT:ϒɍn6i7 FI:Wzg|u#DQQ9+616T( vgCA]B)E#a߇:EB؎s_V` BwWlp1ct:m20Y=BUplQi0 CQ{8N8Qx,+p]˧Of2[~7ި &=hC6|0~҂`ӧgy'13scoMMbvvvrr2N,ZL˱+fܟ}t:!jooD"m8% a_;:SNn6TCjV|UPƚgD?O6?`Osn0 ob^ RY_____YWɾ}ە\}{ð^xygߖ}@]dBe@*I^w6 h@#m 3@YN-0ߞ?~s}Vm΢uG?bY?2̃& n;TX7Hdh(l.KR0eRiϞ=\nsS>.P3ͤBYSlIxKe@ '*joo=xx |>AKlf"RlnX*6^͊U)e) vBITͤ`PT<ϿE-//oiJZʞ=l&C0<.X;3>cX6^r:Zi6`P($ HPnZr0 ˿˾m0xz0:TTɓ~1/! S#GTL  6cC`7hwvfxWᆲgRh]5|%D;E6կ~[om}O/-oԶ)rl{{mpr.H|R2)  ab<HosɭJ|o8D|\bo$K O?sl1L&~_x<%ZzN0:!fzFfl6 ]luZdݻw+ p_mGF׮&&PlG>xh,FlG W*!X|ҹsE˞=AF3{47lS;C?1ϲcCC+p [%}%9>13dKgϒf4n4}W`^X\*O2b_νR]xZK`F/_zˮnܸյ]Eۭr833^9zxRaɇBGUNKFɹ9Q\p)lvy.g26Ywvjr6 _J$O®Hޮwq1l㏡UƧ 7\cL>y|f|^i{{o8p@VdR-PngKEQd {R9`g@?J&s@dd{RͱcKRh45<UNywvJ+d!8ngo*hZ`/꿶Nц]SSccccZnw)$4Mu(0IRPF#CC:|‚FcSS|jJeUJDS] AP L cSL͇BZ-|!Erhd GwիǏ[A xȑ‚u߾|($jEg)gY  Y zc55l6OjɴZeUlPNESX,RYdP 0罗/;}F$h:E׾Gyr^RIѝ988438z&i4իn^?8ַZov}/uT*j6P*载ؘeݟbT>|_ʭɈxoN0QOboEQ(&ɓ6V_GǦ,OQB<'OnY]x1UU_l_{lk) GdVԙd~ .} |-lxuc^7”J0B`Y 0% *x@ӻq~Џ^<{vȿkVMl( <oϟz/h܎Rt_%%AIJsF0|uB]VPzgU͓0N cccr<#sa a!+ܻ4XY髪$ ஡ROtYU)*x@lObqQyXƨEwj k>9[kmʻRK)(^d{>+) 6)zYx⫯:ie!?z6KQ_yͧU.EQD" [7 .+ئ>tǃL&i>qD$٨4XS'?׃??ޛSp/^F# $rH8p_RmG)THǥ(g6QN}]AA8tЖzôfbQ.\8wS5- IDATN ??e2K.|p8|9&ocj5q: Cccԏ'B,z"e,+ݻw^iL&S]] xFFFlO7bEH[\L+x2Yq#X_<7ۭ=vKEl`Sft:ljjfdPLhR4ZL$JJ%XXX06mmm5 $I LMI@ǎسz홿XQ&$VZַ,`pݹ\O=‚\.?㦧O8g-ˣ_{\0 AO?=11RMlv6AQ\GfS$667Vh g{gY2 f 6K¼zC`WW׺*Jr:Edh2Iwn̛$LRz@TnS$h{{;$uf v^oFR~*QizdtҴJM&j|3OѱcGݒV;LLa?CkW<ثwI+촡pSt DQE7iNO>rl˲BP(?Es(d2(& .4-)Zr9z;jClM .6 $IX,h"G"/+Wtww{`ޛGq]y¯} ྉ(R%Y^hVbLډt'_&=IKzҝ3̤ݎ8Ӊݱ#o%YDR%q$ vb_ (f(~GGjy{w_l9g**##b%"HzV^Pxۿlv\~ĉ'xbpp'izxx$ݻws\tmx^ZZ+gvՂD\Z tÇG  o~ 7泸N2aNwGj/^W*d~Z-V?WѬ K&㭮Fy!?88pl6jMMMHd`` (lݺunnf``pvv6Lqb1; cdWR2I٨Pr(rp8WR)q]Ww: k L"...f01d2x<  CFINhǎvc/oݺUTz\>==hVVV[BW^ye۶mo***D"pQQ aZ,+W0״XOJJee [4! Ҽog0 ?#LFʻ֭}\[AI`YJ-1apð2?l .e5X,O?t__܋/7پY^j0;;;88 nwKK LLoV<+5bt  U#x$W~$fKKK.URg,{)*))(v?ccc fy5J]6]v\t|> —f.TTE7,Jeee(*:yⲸ$\' JxX5hd,~Z"?Ls-[= Ayyy<GWVV2MOQih*W AAa4&Lwd `00i[Bl5 Oj8K%R]iߎS١b"A|a{(s*?>䓓'Ocǎ}ᇙ+K/)&IIRg{zzLJ~8:: ((fY^^~뭷^zx<ΰ$I4ɜOkd 0]iۢQ$)ddNS }zu1<22¸[qCڗ39"V[ f-[h^\\|$kA8[6TsXf1ۢ'XP%NWvwÇK$0007X裹:ǚsOaщ Wcg?AL&M&Ǐ~饗<Ouu-[;(s.\:th˖-Xnz<V;22<77WRRCõRSt쫯}1+w1R}YJe1wLtxB@  [=GWόq'OH(O\-yChzzx0w wy­CY,}^0|K]83y鏌D ư=x0 ۔2 ȸ\i&#SNKKY] HR\;G^Tw#E8B ާ;o 1܂Pޑ\x~-?Ut],2 3Z@ l6[[[Li&եD2qkdٓ4MONNfŝ_ D"QEE\p_Lg;|0z=AVuvvvz&):;;n Z aZ,+aVVVd9eqR >cժj?.VWWT\S^/ro= 0l֭}]UVn9j 57,\6.ܔAfP(d)a2 h>wnaΦ I188v_dc&/D"SSS4MQwwdds:H$uZ>Hv5H$HD(q2O{iO,C0I$E00t733399կ~u`` s$ _BQA{mμqB'rq/qzkg?{`N8p<nbEQ/ ;$11AJ8pN7YiljWR}v2$ȶlz,5m[j(ן8qn&Hd2y2 RtEEEAv6E_M3c/E|ݳiH3sQ蟚rwt,tB^LtW}F#EE2xY Jcxxx|||ffq\.l\0d333Jf~rq\*ŋ$Id.Jc4srr,]M)joolmmu\+++۷oߴ$z$HlMK|qꜢݻwX,FӴL'I@"0(ՕU$0DBX*jhsN9HLcG^&Y+e4<jaS|(UY`60|'l2E_'|rСD"K/}ٸd7)|j0;;{ȑ˗/:ţ6{0t:!|Gޭ%%%MMMp3톾ËS@,p;Òl6;i_Ϋ`]]rTbٳg[):x {駟|,o)]x<. ?{hp<&f*MU7r 2-/////g>!`*vjݦhpPΆIt]?+www{_,:;-pԺP?޲3gL'k&ɓ'?LNNްm||ȑ#^wSSSLR]%!2<<\__?77ٓJ@ţӎR])Ź644bxϞ=E^ow&t_4M?LM[|ssȈSQ m^/fvWVV EIIInnn^6^^^>22t:>X, yK.MMMx@ XW^|:u`0?SY|999LRϜo[OݽFqCX~$IDl ᵵT`=dnFܜa2x Z 0 hTVT%@PWWvq*,,Z$Iڵ }gN~gEqw޽,k~~k޽7 hymBP̻6xMMM4MY6.WTyh# {&'] H0^kMhhhDeǓ]n7 eeeUUUD"//O$1䍝~?sVkKK )))AQ瞛p?GHZwRUUŜN7-9@ׅ *cz;H%gy1 kdY<1Ӝˀ/ҥeX 7(HEQ@&޽gusIxiw u@GF: R7Z~… l6)jD17;把 tyy97`; +WFD03 h6gD"}}}0 oYܣH "7LAd8+_Dd_?p\-i@İ=+h4.rwE R-[|>֭[;;;SΞ=޾((z vʮR?RL&Hy Mt{Lzqy>Y#ԩS&I.WVVvuu(![ZZ bz}D蟨̂u:drПrLw+_JZ''keqNrj99 @(M?N|g8&,vͳjM)BF֝>bLj*4Wv\SSSX,|`0VڢMNNBD"wYֵeFm8e`!g@Y,9$WWWL C-EʦOkӀ1fYfIܴ@OO^'''ߎaxNGq'{{Wrr'O0t%N>h4gΜV(\.[3g1WITΝ6 ~bFpQQQgg'EQezzh4ѣ6ĄeBcu5tOzFlqkb?9%rNx"MӯjqqZ-IO (@ds8qr)Lf[[[kkk$ksABx[9ٓfrI\YY BR􆾁R+-Ke?/}ȑ YF CAL&Phnb^/7aL&N766 ;;; :{nNWVVV__dOB!i6דx,OF"Olo|qNf{䗔z^u VEQ3??O84]^^P(pt^`$+w1RT\\\QQ!JwܙMС~ΦsQfd !$\T*TT(KK.,VUd2ZJ4MD۷s\>?;;+W\OOO0|W6j0 ߿y<]v4}yFR/_<333>>F\P(\k,ggΘBLƥ(oFH*Rc>H$*++KJJpEEEx?N$cyyyrrGVwww+ Tz !Yl>)f8szm7m`tYT$s7w36dFOP0 SEyyy@VgX|C|5OL$b'_H97+ Q9E$C$s߀A&];oŝo0MGl68pرcl6瞻ْ,Lp8cǎa۷`03)|˪AwE l>/dn=z`jj 7aM&sssu:I:Y([]/-pX& :Ή]v᧞z*C.+U='V"x{>#2g f}-44*ڟ|CD"Il`0899>8pi(m`7>"TjG>)q<ׯL faw[,H@!H^#zM}To=~b:˭?9b,Cϯ~iii%歙6m×H;35$x##[l|aa!ᱱ`̥\ ܾ}rj#sγgAXrrr29j wW~]O8N>p8'iAittM&Saaa"`X&&&v[n8w\UU@~~ngǃ% n|M^pZ[[z=3e8 Z IDATx<.ַ_Ji-[twwSSS/`y9xLnH65z@ɇNi|B!["tvZ~VZx뭷4NpǛ A0b555SSS gΜ,//  A\~p<_xM0S3i@V\xٳi{Gr\ӥټ>Z46w_>I^Ԕ{N +++CQ d2ܬP(J%EQ^h4IDrRtNsiiiF8aXlǎ}ƖH$e2STMMMRpm~h$h$tFjk5mm󅅲q' C{--zj"`4ݽ{JSSӞsiL'TTTTVV677SUWW7??H$L&Syy9kϞ=ڿ`:[#K)IpŽ;| k̾fa^3N2Ifi5]]]`0''My 0lQa R%SOUre~d-\BVN())333 Eѕ&SVK+Wzټk.FKKKVkEEZχaxdddϞ=>pjjbjjJtttd2@аP(x<Ê! CUU*==WrE~XR3;,5-,, ޽[H$o H$|ɾ}Bhlhh`V<#ɘa|H$EE%ɔuKKK0F `3Tu畜t.XT֣nj7crsEvӿ+͍b|!WH$d3H&"EYw0frp)IuS:((P܈f}ՀfogEQ}}}xٳӷdMMpgvv6HB!ɔ䆀i<wx<DR];;w^p!ifqD) t8:tر#;vw/v{g9x8x |yRl:H$BdnnԖ-[o.0e/d!M %%^[X(>{vnpĮ+BqX,f6O=D D8FI@( Id^74oG8$D_3 BcbdbO|+bzng .Bp,{ 2'{zu:ŋK0 9on8stuLOtwr .@`l DEK@x Oh4sssl6{xxp9>L&CQtttLLLH$nF>=55ֶd4=8EQbxzzW^˛je6= <odd0Vlll\^^FQ4934LJ)7QtabtH$jcQ`0 i6 SS /Pؘ4di%H*G6LOFF׿Ni >|1B@i)hmg?eehz'M&Ӷmx R0ma& ?<&ĉJG&=Ǐx?59popJ%Ųl(X,Ǥ񍌌,--1YCuuu_Gdff&L>CJraaf3K06o`UUU1[nMMMg)E,[^^^YY!t)~n3t gi)P(GL[y<ZյeL4@"R)H@^R)yy`vp .p,,IӁNfTWPD"Q[[ێ;x<vl۶m||O>iz|||uuv Jǎ[L˗u:]^^ޞ={.^HDccc]]˗l6 ၁\T* 555\.Wד$ɬ6-6!*l6G}3$ A0\2dX$IňIL&L4n_xq  .l67773Fw nL $:@kk=5fSRlt56\j2\o-7Aq1k.Чk4FKZkF/K7<[l]{̇, |f1 zT*&ct)&kX{ə3SXf))L $yܹ7xL{$gϚN`رJY%nb5we&T*cc躎?GFFR7h4 h;ʚNn.l``tnݺi͖a[^ +Wlzߨ9p:#\ Pu)ZDBSO=~tEY@lhR bؾ}L&S,۶m[] ᇋf?L֡PB.0j'IR*FQxpld,nY67H fyݱXlee%[цR9 C,"j~ss@%d2mz)>[wmM(,RE,T*@;a裏NQdqkrNJ0 ]EQ/^mmonnp\Vټg}}&"3#, 4ʲ2sGGɁ< lam'=9r=fTmm򒒅\-,>kijkWz{ɊCCdEEx8?e%%r_C!x+$9B.g۶G%%g t͕ɸ2{jᇱ ?.UKut^^(//_YYYYYIʬ>{饞_?+"f_7d2x<^(UV]"h'ڮ\)~f(\+sH"tFQyqqnׇr8T"AS^G$??hrn2tD,Fb<ˑH55Rϗ.`|>ym:\'q\VR5XNɣkb-,Vf6ż޹Sr$~~&8ƒ8.+,$q|0`Ϟ*\I G"0왝[,΢V5`z<O=ŕJx"I}K D44TSSsG~|NSG<W&C!RWW PȹF䞜ăAak̙ۭkl\ٶm%FmiP(/-\('D".e^\(7wuzZ^ZxB |JUUtbnss"h92YjBܖۭwG׽WMMPG^"+.6wa%ABAbRB@ m}ɓBV^Z 99kxzO};DYQ('iD ɜ[mFԺ~\UUz[[[77k|܇ 0z<~nMQ4 goHot0 RL'\۵AZ?ޔ+d jbn'ՀgȲD0$qȥT^McccEϏfdYd(`TH$t:$  f0i+M&V-*#GXـiYe)nG'?\~+'\ٳ…ŶyX~qqرF$cgZ3쯑U,2%SG*p8,҅#Mr9k_27Zh3LRQ-TVEm-//O,bTlgYܲQt=oi?3g8J 6@"( RHC!gD`O&5ws9CkI MAcccCC# i E׏^SD?_lY7)vB!6=g8ojijd&|#H$֗&ɕjC1J&ⰌQ$M) 0dMdBQ] M7̀j>CpC{N[K$XNR^#ɇuP(#+1<2VӝٙUWcy\It]$Ivww={V"n#kؔ+o]x1pqUeef .-a|{bp|f3M33!&χJ&_yEYYxKK\5>ocBoF\.QNԔD'']bo&[- kص }&[,vML`BbD8kBvIE1=1a XpAVPc a+ḱX-,8C0̕ɘ-ÓiUee,-a9J& ^)ppr$,.@D+y;wƼހł X1 yo(+[_iL&8h9@4֖ ;vpjTG샃4MW*10GEs|51dWۭ(*-*l';udiɕ>H ɀ1J$/\`8y;vx˿eL( ٓ'!z!A&y-s$3@ 띣>xQ$E|o%Qn.&%&8nXx1w۶] Qg2M~O.gxFAB_pe䥥Ӊht56ù4E|Vi/r8*D`XawFnټ:=]3cs Q@`:}rd"ankia2E?c8R)梇?{F=gKJX\X~HD=i N)0E& >EcW_uՖ-w!IϘIH$~_1:277`eUq3;Kt0,5C6 1XZ" D瞚rrdRQ0Rr8aJ&c^$_|4E(M;:"n7(*zq^@1!8/1>-%"x2Yh0Yaans3H׬PfSHJ%OA|}lcx BKK׺(Z ΝhQf8=hfDg6˅XazZ?_p~\UYhpK/a@ Z}w%Qly;v>\Sx0AҥKEn߯l@Q s ;y &y-M/.BV+XX/_;u'LO<đ#}~cxG|;ӓ_C'Nsro΅sa=v "HL.?ٓ'8O&HGRi"69#1K"VVV4uu WX)*oTc(;s™l'#l6Aܲ!Irw`p qޕ>fDemccjYEt oS X,"qeޯMMӗ.]b?KJJֱ'[r8MQ| pBVh) aYa!Mƽ{z`e#QT߾12gx\A4:s[[mQGS[mmpGo>zp})<PS8`FS(žy^Ֆ-ΒGqOO97?(-aMMSWkh{ʼkK̦vEIDATgvVX䥥k;_!8(+sozM}=W&C0 p8^3rr8ݻL hZ[_O4[$ 1'w6ȡC|qL*U/zEYwnO"LbMD4jܷg1%!GSS}}}wI(*.)F%%%vBZ[[V\}H$].Waa!AZ`0lja>`fSN8˕aW?O.၀Bj4NFXDŽ8TUUQ[F=Aa!=5eص+pe2Eyyt2:3Sx0$\M]TnsspeEVPF{rRV\,5e! eEE@d՚䛟/ؿ1<\$b1uU_dl37š's ",V֊rrDLm1s_m}}tuU`P^TB!G$H$rLv j͖-$FS(z=&Bɢ-[xJ%UՊҘǣ)#KF`)JVWDg=&8/Oшrs555>ʪ{Ad{++H&X4`/|ҥ{M=>Ɉ)WU$jQD4 XH6fuÈM ,g z֕ct1i~}e]Nr7whjT*!TȽaAPh )Fl!XJ ';l2($Ko8 P8^WtOHXׯoЈ FAer {a8q\$~cA033w90TL*pcY\ᡁxz;v#%yxxxν1z/_Gk P^$IRT7  jt4M " 'u~6J_Jr2i_߽"82;>:9:2q`$I&,j0=o,t:dhb|L$!s#= ԩ#ßJr2L/ut=ȁTwg /рq9$ɻ_ H$R\.AHRHD$>?J$?%2L&?&j@$X~dZ \,6$xEQBL$jQǯD"A7?Q\f]KI%Kfʖ5ǯZ:lW{X٭Kr#= hpP2dbDAk\eRe+IuŲ^%bM?*lNOIENDB`eric4-4.5.18/eric/Plugins/ViewManagerPlugins/PaxHeaders.8617/Tabview0000644000175000001440000000013112261012660023220 xustar000000000000000030 mtime=1388582320.149179792 29 atime=1389081086.01372434 30 ctime=1389081086.315724332 eric4-4.5.18/eric/Plugins/ViewManagerPlugins/Tabview/0000755000175000001440000000000012261012660023030 5ustar00detlevusers00000000000000eric4-4.5.18/eric/Plugins/ViewManagerPlugins/Tabview/PaxHeaders.8617/Tabview.py0000644000175000001440000000013212261012647025256 xustar000000000000000030 mtime=1388582311.996077025 30 atime=1389081082.798724398 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/ViewManagerPlugins/Tabview/Tabview.py0000644000175000001440000011770612261012647025024 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2002 - 2014 Detlev Offenbach # """ Module implementing a tabbed viewmanager class. """ import os from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt.KQApplication import e4App from ViewManager.ViewManager import ViewManager import QScintilla.Editor import UI.PixmapCache from E4Gui.E4TabWidget import E4TabWidget, E4WheelTabBar from E4Gui.E4Led import E4Led import Preferences from Globals import isMacPlatform from eric4config import getConfig class TabBar(E4WheelTabBar): """ Class implementing a customized tab bar supporting drag & drop. @signal tabMoveRequested(int, int) emitted to signal a tab move request giving the old and new index position @signal tabRelocateRequested(long, int, int) emitted to signal a tab relocation request giving the id of the old tab widget, the index in the old tab widget and the new index position @signal tabCopyRequested(long, int, int) emitted to signal a clone request giving the id of the source tab widget, the index in the source tab widget and the new index position @signal tabCopyRequested(int, int) emitted to signal a clone request giving the old and new index position """ def __init__(self, parent = None): """ Constructor @param parent reference to the parent widget (QWidget) """ E4WheelTabBar.__init__(self, parent) self.setAcceptDrops(True) self.__dragStartPos = QPoint() def mousePressEvent(self, event): """ Protected method to handle mouse press events. @param event reference to the mouse press event (QMouseEvent) """ if event.button() == Qt.LeftButton: self.__dragStartPos = QPoint(event.pos()) E4WheelTabBar.mousePressEvent(self, event) def mouseMoveEvent(self, event): """ Protected method to handle mouse move events. @param event reference to the mouse move event (QMouseEvent) """ if event.buttons() == Qt.MouseButtons(Qt.LeftButton) and \ (event.pos() - self.__dragStartPos).manhattanLength() > \ QApplication.startDragDistance(): drag = QDrag(self) mimeData = QMimeData() index = self.tabAt(event.pos()) mimeData.setText(self.tabText(index)) mimeData.setData("action", "tab-reordering") mimeData.setData("tabbar-id", str(id(self))) mimeData.setData("source-index", QByteArray.number(self.tabAt(self.__dragStartPos))) mimeData.setData("tabwidget-id", str(id(self.parentWidget()))) drag.setMimeData(mimeData) if event.modifiers() == Qt.KeyboardModifiers(Qt.ShiftModifier): drag.exec_(Qt.DropActions(Qt.CopyAction)) elif event.modifiers() == Qt.KeyboardModifiers(Qt.NoModifier): drag.exec_(Qt.DropActions(Qt.MoveAction)) E4WheelTabBar.mouseMoveEvent(self, event) def dragEnterEvent(self, event): """ Protected method to handle drag enter events. @param event reference to the drag enter event (QDragEnterEvent) """ mimeData = event.mimeData() formats = mimeData.formats() if formats.contains("action") and \ mimeData.data("action") == "tab-reordering" and \ formats.contains("tabbar-id") and \ formats.contains("source-index") and \ formats.contains("tabwidget-id"): event.acceptProposedAction() E4WheelTabBar.dragEnterEvent(self, event) def dropEvent(self, event): """ Protected method to handle drop events. @param event reference to the drop event (QDropEvent) """ mimeData = event.mimeData() oldID = long(mimeData.data("tabbar-id")) fromIndex = mimeData.data("source-index").toInt()[0] toIndex = self.tabAt(event.pos()) if oldID != id(self): parentID = long(mimeData.data("tabwidget-id")) if event.proposedAction() == Qt.MoveAction: self.emit(SIGNAL("tabRelocateRequested(long, int, int)"), parentID, fromIndex, toIndex) event.acceptProposedAction() elif event.proposedAction() == Qt.CopyAction: self.emit(SIGNAL("tabCopyRequested(long, int, int)"), parentID, fromIndex, toIndex) event.acceptProposedAction() else: if fromIndex != toIndex: if event.proposedAction() == Qt.MoveAction: self.emit(SIGNAL("tabMoveRequested(int, int)"), fromIndex, toIndex) event.acceptProposedAction() elif event.proposedAction() == Qt.CopyAction: self.emit(SIGNAL("tabCopyRequested(int, int)"), fromIndex, toIndex) event.acceptProposedAction() E4WheelTabBar.dropEvent(self, event) class TabWidget(E4TabWidget): """ Class implementing a custimized tab widget. """ def __init__(self, vm): """ Constructor @param vm view manager widget (Tabview) """ E4TabWidget.__init__(self) self.setAttribute(Qt.WA_DeleteOnClose, True) self.__tabBar = TabBar(self) self.setTabBar(self.__tabBar) self.setUsesScrollButtons(True) self.setElideMode(Qt.ElideNone) if isMacPlatform(): self.setDocumentMode(True) self.connect(self.__tabBar, SIGNAL("tabMoveRequested(int, int)"), self.moveTab) self.connect(self.__tabBar, SIGNAL("tabRelocateRequested(long, int, int)"), self.relocateTab) self.connect(self.__tabBar, SIGNAL("tabCopyRequested(long, int, int)"), self.copyTabOther) self.connect(self.__tabBar, SIGNAL("tabCopyRequested(int, int)"), self.copyTab) self.vm = vm self.editors = [] self.indicator = E4Led(self) self.setCornerWidget(self.indicator, Qt.TopLeftCorner) self.rightCornerWidget = QWidget(self) self.rightCornerWidgetLayout = QHBoxLayout(self.rightCornerWidget) self.rightCornerWidgetLayout.setMargin(0) self.rightCornerWidgetLayout.setSpacing(0) self.__navigationMenu = QMenu(self) self.connect(self.__navigationMenu, SIGNAL("aboutToShow()"), self.__showNavigationMenu) self.connect(self.__navigationMenu, SIGNAL("triggered(QAction*)"), self.__navigationMenuTriggered) self.navigationButton = QToolButton(self) self.navigationButton.setIcon(UI.PixmapCache.getIcon("1downarrow.png")) self.navigationButton.setToolTip(self.trUtf8("Show a navigation menu")) self.navigationButton.setPopupMode(QToolButton.InstantPopup) self.navigationButton.setMenu(self.__navigationMenu) self.navigationButton.setEnabled(False) self.rightCornerWidgetLayout.addWidget(self.navigationButton) if Preferences.getUI("SingleCloseButton") or \ not hasattr(self, 'setTabsClosable'): self.closeButton = QToolButton(self) self.closeButton.setIcon(UI.PixmapCache.getIcon("close.png")) self.closeButton.setToolTip(self.trUtf8("Close the current editor")) self.closeButton.setEnabled(False) self.connect(self.closeButton, SIGNAL("clicked(bool)"), self.__closeButtonClicked) self.rightCornerWidgetLayout.addWidget(self.closeButton) else: self.connect(self, SIGNAL("tabCloseRequested(int)"), self.__closeRequested) self.closeButton = None self.setCornerWidget(self.rightCornerWidget, Qt.TopRightCorner) self.__initMenu() self.contextMenuEditor = None self.contextMenuIndex = -1 self.setTabContextMenuPolicy(Qt.CustomContextMenu) self.connect(self, SIGNAL('customTabContextMenuRequested(const QPoint &, int)'), self.__showContextMenu) ericPic = QPixmap(os.path.join(getConfig('ericPixDir'), 'eric_small.png')) self.emptyLabel = QLabel() self.emptyLabel.setPixmap(ericPic) self.emptyLabel.setAlignment(Qt.AlignVCenter | Qt.AlignHCenter) E4TabWidget.addTab(self, self.emptyLabel, UI.PixmapCache.getIcon("empty.png"), "") def __initMenu(self): """ Private method to initialize the tab context menu. """ self.__menu = QMenu(self) self.leftMenuAct = \ self.__menu.addAction(UI.PixmapCache.getIcon("1leftarrow.png"), self.trUtf8('Move Left'), self.__contextMenuMoveLeft) self.rightMenuAct = \ self.__menu.addAction(UI.PixmapCache.getIcon("1rightarrow.png"), self.trUtf8('Move Right'), self.__contextMenuMoveRight) self.firstMenuAct = \ self.__menu.addAction(UI.PixmapCache.getIcon("2leftarrow.png"), self.trUtf8('Move First'), self.__contextMenuMoveFirst) self.lastMenuAct = \ self.__menu.addAction(UI.PixmapCache.getIcon("2rightarrow.png"), self.trUtf8('Move Last'), self.__contextMenuMoveLast) self.__menu.addSeparator() self.__menu.addAction(UI.PixmapCache.getIcon("close.png"), self.trUtf8('Close'), self.__contextMenuClose) self.closeOthersMenuAct = self.__menu.addAction(self.trUtf8("Close Others"), self.__contextMenuCloseOthers) self.__menu.addAction(self.trUtf8('Close All'), self.__contextMenuCloseAll) self.__menu.addSeparator() self.saveMenuAct = \ self.__menu.addAction(UI.PixmapCache.getIcon("fileSave.png"), self.trUtf8('Save'), self.__contextMenuSave) self.__menu.addAction(UI.PixmapCache.getIcon("fileSaveAs.png"), self.trUtf8('Save As...'), self.__contextMenuSaveAs) self.__menu.addAction(UI.PixmapCache.getIcon("fileSaveAll.png"), self.trUtf8('Save All'), self.__contextMenuSaveAll) self.__menu.addSeparator() self.__menu.addAction(UI.PixmapCache.getIcon("print.png"), self.trUtf8('Print'), self.__contextMenuPrintFile) self.__menu.addSeparator() self.copyPathAct = self.__menu.addAction(self.trUtf8("Copy Path to Clipboard"), self.__contextMenuCopyPathToClipboard) def __showContextMenu(self, coord, index): """ Private slot to show the tab context menu. @param coord the position of the mouse pointer (QPoint) @param index index of the tab the menu is requested for (integer) """ if self.editors: self.contextMenuEditor = self.widget(index) if self.contextMenuEditor: self.saveMenuAct.setEnabled(self.contextMenuEditor.isModified()) self.copyPathAct.setEnabled(bool(self.contextMenuEditor.getFileName())) self.contextMenuIndex = index self.leftMenuAct.setEnabled(index > 0) self.rightMenuAct.setEnabled(index < self.count() - 1) self.firstMenuAct.setEnabled(index > 0) self.lastMenuAct.setEnabled(index < self.count() - 1) self.closeOthersMenuAct.setEnabled(self.count() > 1) coord = self.mapToGlobal(coord) self.__menu.popup(coord) def __showNavigationMenu(self): """ Private slot to show the navigation button menu. """ self.__navigationMenu.clear() for index in range(self.count()): act = self.__navigationMenu.addAction(self.tabIcon(index), self.tabText(index)) act.setData(QVariant(index)) def __navigationMenuTriggered(self, act): """ Private slot called to handle the navigation button menu selection. @param act reference to the selected action (QAction) """ index, ok = act.data().toInt() if ok: self.setCurrentIndex(index) def showIndicator(self, on): """ Public slot to set the indicator on or off. @param on flag indicating the dtate of the indicator (boolean) """ if on: self.indicator.setColor(QColor("green")) else: self.indicator.setColor(QColor("red")) def addTab(self, editor, title): """ Overwritten method to add a new tab. @param editor the editor object to be added (QScintilla.Editor.Editor) @param title title for the new tab (string or QString) """ E4TabWidget.addTab(self, editor, UI.PixmapCache.getIcon("empty.png"), title) if self.closeButton: self.closeButton.setEnabled(True) else: self.setTabsClosable(True) self.navigationButton.setEnabled(True) if not editor in self.editors: self.editors.append(editor) self.connect(editor, SIGNAL('captionChanged'), self.__captionChange) emptyIndex = self.indexOf(self.emptyLabel) if emptyIndex > -1: self.removeTab(emptyIndex) def insertWidget(self, index, editor, title): """ Overwritten method to insert a new tab. @param index index position for the new tab (integer) @param editor the editor object to be added (QScintilla.Editor.Editor) @param title title for the new tab (string or QString) @return index of the inserted tab (integer) """ newIndex = E4TabWidget.insertTab(self, index, editor, UI.PixmapCache.getIcon("empty.png"), title) if self.closeButton: self.closeButton.setEnabled(True) else: self.setTabsClosable(True) self.navigationButton.setEnabled(True) if not editor in self.editors: self.editors.append(editor) self.connect(editor, SIGNAL('captionChanged'), self.__captionChange) emptyIndex = self.indexOf(self.emptyLabel) if emptyIndex > -1: self.removeTab(emptyIndex) return newIndex def __captionChange(self, cap, editor): """ Private method to handle Caption change signals from the editor. Updates the listview text to reflect the new caption information. @param cap Caption for the editor @param editor Editor to update the caption for """ fn = editor.getFileName() if fn: if Preferences.getUI("TabViewManagerFilenameOnly"): txt = os.path.basename(fn) else: txt = e4App().getObject("Project").getRelativePath(fn) maxFileNameChars = Preferences.getUI("TabViewManagerFilenameLength") if len(txt) > maxFileNameChars: txt = "...%s" % txt[-maxFileNameChars:] if editor.isReadOnly(): txt = self.trUtf8("%1 (ro)").arg(txt) index = self.indexOf(editor) if index > -1: self.setTabText(index, txt) self.setTabToolTip(index, fn) def removeWidget(self, object): """ Public method to remove a widget. @param object object to be removed (QWidget) """ index = self.indexOf(object) if index > -1: self.removeTab(index) if isinstance(object, QScintilla.Editor.Editor): self.disconnect(object, SIGNAL('captionChanged'), self.__captionChange) self.editors.remove(object) if not self.editors: E4TabWidget.addTab(self, self.emptyLabel, UI.PixmapCache.getIcon("empty.png"), "") self.emptyLabel.show() if self.closeButton: self.closeButton.setEnabled(False) else: self.setTabsClosable(False) self.navigationButton.setEnabled(False) def relocateTab(self, sourceId, sourceIndex, targetIndex): """ Public method to relocate an editor from another TabWidget. @param sourceId id of the TabWidget to get the editor from (long) @param sourceIndex index of the tab in the old tab widget (integer) @param targetIndex index position to place it to (integer) """ tw = self.vm.getTabWidgetById(sourceId) if tw is not None: # step 1: get data of the tab of the source toolTip = tw.tabToolTip(sourceIndex) text = tw.tabText(sourceIndex) icon = tw.tabIcon(sourceIndex) whatsThis = tw.tabWhatsThis(sourceIndex) editor = tw.widget(sourceIndex) # step 2: relocate the tab tw.removeWidget(editor) self.insertWidget(targetIndex, editor, text) # step 3: set the tab data again self.setTabIcon(targetIndex, icon) self.setTabToolTip(targetIndex, toolTip) self.setTabWhatsThis(targetIndex, whatsThis) # step 4: set current widget self.setCurrentIndex(targetIndex) def copyTabOther(self, sourceId, sourceIndex, targetIndex): """ Public method to copy an editor from another TabWidget. @param sourceId id of the TabWidget to get the editor from (long) @param sourceIndex index of the tab in the old tab widget (integer) @param targetIndex index position to place it to (integer) """ tw = self.vm.getTabWidgetById(sourceId) if tw is not None: editor = tw.widget(sourceIndex) newEditor = self.vm.cloneEditor(editor, editor.getFileType(), editor.getFileName()) self.vm.insertView(newEditor, self, targetIndex, editor.getFileName(), editor.getNoName()) def copyTab(self, sourceIndex, targetIndex): """ Public method to copy an editor. @param sourceIndex index of the tab (integer) @param targetIndex index position to place it to (integer) """ editor = self.widget(sourceIndex) newEditor = self.vm.cloneEditor(editor, editor.getFileType(), editor.getFileName()) self.vm.insertView(newEditor, self, targetIndex, editor.getFileName(), editor.getNoName()) def currentWidget(self): """ Overridden method to return a reference to the current page. @return reference to the current page (QWidget) """ if not self.editors: return None else: return E4TabWidget.currentWidget(self) def hasEditor(self, editor): """ Public method to check for an editor. @param editor editor object to check for @return flag indicating, whether the editor to be checked belongs to the list of editors managed by this tab widget. """ return editor in self.editors def hasEditors(self): """ Public method to test, if any editor is managed. @return flag indicating editors are managed """ return len(self.editors) > 0 def __contextMenuClose(self): """ Private method to close the selected tab. """ if self.contextMenuEditor: self.vm.closeEditorWindow(self.contextMenuEditor) def __contextMenuCloseOthers(self): """ Private method to close the other tabs. """ index = self.contextMenuIndex for i in range(self.count() - 1, index, -1) + range(index - 1, -1, -1): editor = self.widget(i) self.vm.closeEditorWindow(editor) def __contextMenuCloseAll(self): """ Private method to close all tabs. """ savedEditors = self.editors[:] for editor in savedEditors: self.vm.closeEditorWindow(editor) def __contextMenuSave(self): """ Private method to save the selected tab. """ if self.contextMenuEditor: self.vm.saveEditorEd(self.contextMenuEditor) def __contextMenuSaveAs(self): """ Private method to save the selected tab to a new file. """ if self.contextMenuEditor: self.vm.saveAsEditorEd(self.contextMenuEditor) def __contextMenuSaveAll(self): """ Private method to save all tabs. """ self.vm.saveEditorsList(self.editors) def __contextMenuPrintFile(self): """ Private method to print the selected tab. """ if self.contextMenuEditor: self.vm.printEditor(self.contextMenuEditor) def __contextMenuCopyPathToClipboard(self): """ Private method to copy the file name of the editor to the clipboard. """ if self.contextMenuEditor: fn = self.contextMenuEditor.getFileName() if fn: cb = QApplication.clipboard() cb.setText(fn) def __contextMenuMoveLeft(self): """ Private method to move a tab one position to the left. """ self.moveTab(self.contextMenuIndex, self.contextMenuIndex - 1) def __contextMenuMoveRight(self): """ Private method to move a tab one position to the right. """ self.moveTab(self.contextMenuIndex, self.contextMenuIndex + 1) def __contextMenuMoveFirst(self): """ Private method to move a tab to the first position. """ self.moveTab(self.contextMenuIndex, 0) def __contextMenuMoveLast(self): """ Private method to move a tab to the last position. """ self.moveTab(self.contextMenuIndex, self.count() - 1) def __closeButtonClicked(self): """ Private method to handle the press of the close button. """ self.vm.closeEditorWindow(self.currentWidget()) def __closeRequested(self, index): """ Private method to handle the press of the individual tab close button. @param index index of the tab (integer) """ if index >= 0: self.vm.closeEditorWindow(self.widget(index)) def mouseDoubleClickEvent(self, event): """ Protected method handling double click events. @param event reference to the event object (QMouseEvent) """ self.vm.newEditor() class Tabview(QSplitter, ViewManager): """ Class implementing a tabbed viewmanager class embedded in a splitter. @signal changeCaption(string) emitted if a change of the caption is necessary @signal editorChanged(string) emitted when the current editor has changed """ def __init__(self, parent): """ Constructor @param parent parent widget (QWidget) @param ui reference to the main user interface @param dbs reference to the debug server object """ self.tabWidgets = [] QSplitter.__init__(self, parent) ViewManager.__init__(self) tw = TabWidget(self) self.addWidget(tw) self.tabWidgets.append(tw) self.currentTabWidget = tw self.currentTabWidget.showIndicator(True) self.connect(tw, SIGNAL('currentChanged(int)'), self.__currentChanged) tw.installEventFilter(self) tw.tabBar().installEventFilter(self) self.setOrientation(Qt.Vertical) self.__inRemoveView = False self.maxFileNameChars = Preferences.getUI("TabViewManagerFilenameLength") self.filenameOnly = Preferences.getUI("TabViewManagerFilenameOnly") def canCascade(self): """ Public method to signal if cascading of managed windows is available. @return flag indicating cascading of windows is available """ return False def canTile(self): """ Public method to signal if tiling of managed windows is available. @return flag indicating tiling of windows is available """ return False def canSplit(self): """ public method to signal if splitting of the view is available. @return flag indicating splitting of the view is available. """ return True def tile(self): """ Public method to tile the managed windows. """ pass def cascade(self): """ Public method to cascade the managed windows. """ pass def _removeAllViews(self): """ Protected method to remove all views (i.e. windows) """ for win in self.editors: self._removeView(win) def _removeView(self, win): """ Protected method to remove a view (i.e. window) @param win editor window to be removed """ self.__inRemoveView = True for tw in self.tabWidgets: if tw.hasEditor(win): tw.removeWidget(win) break win.closeIt() self.__inRemoveView = False # if this was the last editor in this view, switch to the next, that # still has open editors for i in range(self.tabWidgets.index(tw), -1, -1) + \ range(self.tabWidgets.index(tw) + 1, len(self.tabWidgets)): if self.tabWidgets[i].hasEditors(): self.currentTabWidget.showIndicator(False) self.currentTabWidget = self.tabWidgets[i] self.currentTabWidget.showIndicator(True) self.activeWindow().setFocus() break aw = self.activeWindow() fn = aw and aw.getFileName() or None if fn: self.emit(SIGNAL('changeCaption'), unicode(fn)) self.emit(SIGNAL('editorChanged'), unicode(fn)) else: self.emit(SIGNAL('changeCaption'), "") def _addView(self, win, fn = None, noName = ""): """ Protected method to add a view (i.e. window) @param win editor window to be added @param fn filename of this editor @param noName name to be used for an unnamed editor (string or QString) """ if fn is None: if not unicode(noName): self.untitledCount += 1 noName = self.trUtf8("Untitled %1").arg(self.untitledCount) self.currentTabWidget.addTab(win, noName) win.setNoName(noName) else: if self.filenameOnly: txt = os.path.basename(fn) else: txt = e4App().getObject("Project").getRelativePath(fn) if len(txt) > self.maxFileNameChars: txt = "...%s" % txt[-self.maxFileNameChars:] if not QFileInfo(fn).isWritable(): txt = self.trUtf8("%1 (ro)").arg(txt) self.currentTabWidget.addTab(win, txt) index = self.currentTabWidget.indexOf(win) self.currentTabWidget.setTabToolTip(index, fn) self.currentTabWidget.setCurrentWidget(win) win.show() win.setFocus() if fn: self.emit(SIGNAL('changeCaption'), unicode(fn)) self.emit(SIGNAL('editorChanged'), unicode(fn)) else: self.emit(SIGNAL('changeCaption'), "") def insertView(self, win, tabWidget, index, fn = None, noName = ""): """ Protected method to add a view (i.e. window) @param win editor window to be added @param tabWidget reference to the tab widget to insert the editor into (TabWidget) @param index index position to insert at (integer) @param fn filename of this editor @param noName name to be used for an unnamed editor (string or QString) """ if fn is None: if not unicode(noName): self.untitledCount += 1 noName = self.trUtf8("Untitled %1").arg(self.untitledCount) tabWidget.insertWidget(index, win, noName) win.setNoName(noName) else: if self.filenameOnly: txt = os.path.basename(fn) else: txt = e4App().getObject("Project").getRelativePath(fn) if len(txt) > self.maxFileNameChars: txt = "...%s" % txt[-self.maxFileNameChars:] if not QFileInfo(fn).isWritable(): txt = self.trUtf8("%1 (ro)").arg(txt) nindex = tabWidget.insertWidget(index, win, txt) tabWidget.setTabToolTip(nindex, fn) tabWidget.setCurrentWidget(win) win.show() win.setFocus() if fn: self.emit(SIGNAL('changeCaption'), unicode(fn)) self.emit(SIGNAL('editorChanged'), unicode(fn)) else: self.emit(SIGNAL('changeCaption'), "") self._modificationStatusChanged(win.isModified(), win) self._checkActions(win) def _showView(self, win, fn = None): """ Protected method to show a view (i.e. window) @param win editor window to be shown @param fn filename of this editor """ win.show() for tw in self.tabWidgets: if tw.hasEditor(win): tw.setCurrentWidget(win) self.currentTabWidget.showIndicator(False) self.currentTabWidget = tw self.currentTabWidget.showIndicator(True) break win.setFocus() def activeWindow(self): """ Public method to return the active (i.e. current) window. @return reference to the active editor """ return self.currentTabWidget.currentWidget() def showWindowMenu(self, windowMenu): """ Public method to set up the viewmanager part of the Window menu. @param windowMenu reference to the window menu """ pass def _initWindowActions(self): """ Protected method to define the user interface actions for window handling. """ pass def setEditorName(self, editor, newName): """ Public method to change the displayed name of the editor. @param editor editor window to be changed @param newName new name to be shown (string or QString) """ if self.filenameOnly: tabName = os.path.basename(unicode(newName)) else: tabName = e4App().getObject("Project").getRelativePath(newName) if len(tabName) > self.maxFileNameChars: tabName = "...%s" % tabName[-self.maxFileNameChars:] index = self.currentTabWidget.indexOf(editor) self.currentTabWidget.setTabText(index, tabName) self.currentTabWidget.setTabToolTip(index, newName) self.emit(SIGNAL('changeCaption'), unicode(newName)) def _modificationStatusChanged(self, m, editor): """ Protected slot to handle the modificationStatusChanged signal. @param m flag indicating the modification status (boolean) @param editor editor window changed """ for tw in self.tabWidgets: if tw.hasEditor(editor): break index = tw.indexOf(editor) if m: tw.setTabIcon(index, UI.PixmapCache.getIcon("fileModified.png")) elif editor.hasSyntaxErrors(): tw.setTabIcon(index, UI.PixmapCache.getIcon("syntaxError.png")) else: tw.setTabIcon(index, UI.PixmapCache.getIcon("empty.png")) self._checkActions(editor) def _syntaxErrorToggled(self, editor): """ Protected slot to handle the syntaxerrorToggled signal. @param editor editor that sent the signal """ for tw in self.tabWidgets: if tw.hasEditor(editor): break index = tw.indexOf(editor) if editor.hasSyntaxErrors(): tw.setTabIcon(index, UI.PixmapCache.getIcon("syntaxError.png")) else: tw.setTabIcon(index, UI.PixmapCache.getIcon("empty.png")) ViewManager._syntaxErrorToggled(self, editor) def addSplit(self): """ Public method used to split the current view. """ tw = TabWidget(self) tw.show() self.addWidget(tw) self.tabWidgets.append(tw) self.currentTabWidget.showIndicator(False) self.currentTabWidget = self.tabWidgets[-1] self.currentTabWidget.showIndicator(True) self.connect(tw, SIGNAL('currentChanged(int)'), self.__currentChanged) tw.installEventFilter(self) tw.tabBar().installEventFilter(self) if self.orientation() == Qt.Horizontal: size = self.width() else: size = self.height() self.setSizes([int(size/len(self.tabWidgets))] * len(self.tabWidgets)) self.splitRemoveAct.setEnabled(True) self.nextSplitAct.setEnabled(True) self.prevSplitAct.setEnabled(True) def removeSplit(self): """ Public method used to remove the current split view. @return flag indicating successfull removal """ if len(self.tabWidgets) > 1: tw = self.currentTabWidget res = True savedEditors = tw.editors[:] for editor in savedEditors: res &= self.closeEditor(editor) if res: try: i = self.tabWidgets.index(tw) except ValueError: return True if i == len(self.tabWidgets) - 1: i -= 1 self.tabWidgets.remove(tw) tw.close() self.currentTabWidget = self.tabWidgets[i] self.currentTabWidget.showIndicator(True) if len(self.tabWidgets) == 1: self.splitRemoveAct.setEnabled(False) self.nextSplitAct.setEnabled(False) self.prevSplitAct.setEnabled(False) return True return False def setSplitOrientation(self, orientation): """ Public method used to set the orientation of the split view. @param orientation orientation of the split (Qt.Horizontal or Qt.Vertical) """ self.setOrientation(orientation) def nextSplit(self): """ Public slot used to move to the next split. """ aw = self.activeWindow() _hasFocus = aw and aw.hasFocus() ind = self.tabWidgets.index(self.currentTabWidget) + 1 if ind == len(self.tabWidgets): ind = 0 self.currentTabWidget.showIndicator(False) self.currentTabWidget = self.tabWidgets[ind] self.currentTabWidget.showIndicator(True) if _hasFocus: aw = self.activeWindow() if aw: aw.setFocus() def prevSplit(self): """ Public slot used to move to the previous split. """ aw = self.activeWindow() _hasFocus = aw and aw.hasFocus() ind = self.tabWidgets.index(self.currentTabWidget) - 1 if ind == -1: ind = len(self.tabWidgets) - 1 self.currentTabWidget.showIndicator(False) self.currentTabWidget = self.tabWidgets[ind] self.currentTabWidget.showIndicator(True) if _hasFocus: aw = self.activeWindow() if aw: aw.setFocus() def __currentChanged(self, index): """ Private slot to handle the currentChanged signal. @param index index of the current tab """ if index == -1 or not self.editors: return editor = self.activeWindow() if editor is None: return self._checkActions(editor) editor.setFocus() fn = editor.getFileName() if fn: self.emit(SIGNAL('changeCaption'), unicode(fn)) if not self.__inRemoveView: self.emit(SIGNAL('editorChanged'), unicode(fn)) else: self.emit(SIGNAL('changeCaption'), "") def eventFilter(self, watched, event): """ Public method called to filter the event queue. @param watched the QObject being watched @param event the event that occurred @return always False """ if event.type() == QEvent.MouseButtonPress and \ not event.button() == Qt.RightButton: self.currentTabWidget.showIndicator(False) if isinstance(watched, E4TabWidget): switched = watched is not self.currentTabWidget self.currentTabWidget = watched elif isinstance(watched, QTabBar): switched = watched.parent() is not self.currentTabWidget self.currentTabWidget = watched.parent() if switched: index = self.currentTabWidget.selectTab(event.pos()) switched = self.currentTabWidget.widget(index) is self.activeWindow() elif isinstance(watched, QScintilla.Editor.Editor): for tw in self.tabWidgets: if tw.hasEditor(watched): switched = tw is not self.currentTabWidget self.currentTabWidget = tw break self.currentTabWidget.showIndicator(True) aw = self.activeWindow() if aw is not None: self._checkActions(aw) aw.setFocus() fn = aw.getFileName() if fn: self.emit(SIGNAL('changeCaption'), unicode(fn)) if switched: self.emit(SIGNAL('editorChanged'), unicode(fn)) else: self.emit(SIGNAL('changeCaption'), "") return False def preferencesChanged(self): """ Public slot to handle the preferencesChanged signal. """ ViewManager.preferencesChanged(self) self.maxFileNameChars = Preferences.getUI("TabViewManagerFilenameLength") self.filenameOnly = Preferences.getUI("TabViewManagerFilenameOnly") for tabWidget in self.tabWidgets: for index in range(tabWidget.count()): editor = tabWidget.widget(index) if isinstance(editor, QScintilla.Editor.Editor): fn = editor.getFileName() if fn: if self.filenameOnly: txt = os.path.basename(fn) else: txt = e4App().getObject("Project").getRelativePath(fn) if len(txt) > self.maxFileNameChars: txt = "...%s" % txt[-self.maxFileNameChars:] if not QFileInfo(fn).isWritable(): txt = self.trUtf8("%1 (ro)").arg(txt) tabWidget.setTabText(index, txt) def getTabWidgetById(self, id_): """ Public method to get a reference to a tab widget knowing its ID. @param id_ id of the tab widget (long) @return reference to the tab widget (TabWidget) """ for tw in self.tabWidgets: if id(tw) == id_: return tw return None eric4-4.5.18/eric/Plugins/ViewManagerPlugins/Tabview/PaxHeaders.8617/__init__.py0000644000175000001440000000013112261012647025413 xustar000000000000000029 mtime=1388582311.99807705 30 atime=1389081082.806724399 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/ViewManagerPlugins/Tabview/__init__.py0000644000175000001440000000024512261012647025147 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Package containing the tabview view manager plugin. """ eric4-4.5.18/eric/Plugins/ViewManagerPlugins/Tabview/PaxHeaders.8617/preview.png0000644000175000001440000000007410650203475025500 xustar000000000000000030 atime=1389081082.806724399 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/ViewManagerPlugins/Tabview/preview.png0000644000175000001440000007267710650203475025250 0ustar00detlevusers00000000000000PNG  IHDRnbKGD pHYs  tIME 1'e3p IDATxy[u'|[h\]Rر;N&c(%_T%?3'UvF,ٲ-ɲ$%n\d @cw}<jƖHM޻wsυ _T8GFqϫF0,+J{^u:l[{(q4V!<+Jy BBo^oee'ޭ,ɢRmU⊮t٤N[.ۉ <\ka=q pqP(t:1 ^Sݽ^ahxJ%NW.ZahT* H5áT{ܝ{굚FB!o0[ 77I69qx{uJu0(X1A \<gðёŅye!ժ$IX(6o5DGǙ?Z\XY 0::P(DQ('xbzz\.S0 AmmmΝI o\yX_ádE\.L$\T(z}mF+$I.-E^N ~ r?p|޻nwkώ7f ƅ3O)*Nk37z(R=Wfg^okkԄ Fc_JWy^&bSOEQF~k׮uuuc=6??d ?n4% R[[*9Eaq\|1 Dᡇxerbp@tl6x\rcOͶ6[=yd2A }yNgqx<8?#r9NS/= jU : tmrzQE1\;w6 \.75 9ٷgC |۶닋 >_&n ׯs=;v |@`C7 <=|Ewtw|4 <%f󿱞&s_znjjXnJP.)7֓Zeh|r8q  Ys^/@s A۲|xA0ΦUS/6JD @%E  mKOElV[~HQ 0۪\avՃ$.A$IJ:Q!J҃A#tgnBULkkE T6"aŻo*c,s ]Ct$"*=;v7&8nfffk 4饸I 7n.b00Z*ld{|j^Ň?<qjW^QldposUz ƴ^vv[k}>ttz)1{*hxmfʙ7n[Ť];w3 Fh.J0 k4qQq0$%sMH (BY EVskQ)KZQ\5Wn{*([cKKs97XT/y-:]s\5uW0aw"وNd#9&M(r?7ß~+ˢT8Wyv_zI#hۥ~@jl!NOO6"0j4333nb[Gus HZ@T,/YiTV\Y|5oTwJ 0Hު( gm6 % l,_@x}OoL~u&7,{キⱝ(&~~Ӌ]}FUsWfP,547ʄFã'nLysܠ |2KKW7[7nfb3oI<dH`YvNB( ;wR_d+YA<&OR9ڤ1:TtcI5`,4v0su> Ȩ6tɥI@iA)Za-DQ&It;[# JC8Qܡwh? 9ͻE׼~ 0;;W*,4Wt;ZfТUhwwaPemz P+hZ^KR4bF٨6jcŤ |Cp0iLic3aZ1Ebhh,z~{Z.O/ D$A}>KH^{U!<h~!L{ "{[SbC@DR#+=A xdlq؀t]]BxB`͸vJ቉5C?NΜ,76 pqb4uK0J8xc  gg"  XufPN4`LTABɏ jXxlbiEЋ)f֘,9|5_g3[[mά1K} FFE AF(0sIDQQ!OJF>YQ<˳Z> UF! LFHy(~ 0!qP+ >AH1phXE /\'14HX EP@NA>qYk T^2,Hap<+A/ws(@b Z+/髆&`?7F01*빃H&Da5ﮎcK|zsUަ!5("RG'nP@itGƽIm0SkB|<ǀf#]GㅸFQJT//5JUk5Mfit*9E14K {O/Ԩ6Yg꽞މBjyԄآUh#jၮl%K#r}]oX Z$Dwonku*Dd" >VK+`G?`M>W.߶? mwnN9BL{=0zzg3CU6k[0 guJ y$ =xxh߁M$lvvvvM5W"-fT)EUgXJb2bTh;`TN PJ{= L;'VUg]q1S$ Lb$zr)g *TFskg/L_ܮ$&*L>GBkpai8v`s@pH,֋9էW饀?ɽ׷I+UgMZR,/N:S%0zmVsEk!fJaպmr/Hd8FEΊNPNwsɹU^TVsQmt\.KCj~KzF"4KK0 yRs(]k1Hus HZ~1֌ p8vڵm۶56fZ; 잉<@w>OMy@4_4 z^"0Bb$t)uW(pEVpݒ D r]V-!XM(!/8{Qֲ@^oPy^d* QJ}_VЫZV+uJvapH2$(v9ԤZԑiP,Z $FMnjPA iljήUh-ZWLSmr7FH%tܥzI$VArNSMkt푞G> w4*fB`YcV*bPBk֚Qpzޠ6IuMҵZ{\=rƠ6& ѐcڭz4:!Y}v+a/Lh,>ie%7 'M>xe(g!Iz=U0f ^ǩ 3H-жu 565yo(3.r{ÛASѩVueOLO֮/gɓ(E"(IWFF#[ chkz&_WKO~F2B؝EQ5s1a"A0N?T*"@;!Rx}EzFQʱ09 ZMLt0 _WAq_k;8lVVF|JqjD",xh^~wk6!^X4<2 v+ "b‚ZIlMiǏ=,,2&ZZZ0 L$6Ɗ/[D2&gÕm31ĺ0<<<99IQ]aEdM@=r+mLQ(X 2_3ꊋ33l.aaa S1`\N˱ur4=:-Giigj2YSw㟛m4_Z*ۨү ^E%T*EQq|nn{$k{{zjakJ,)T*tEp0 ՖK͋Fp.;ٳMn[oMՆ/^JؘLܼ9l&z@Uɴxl}׺cGĉD1p?8)Ǐ+-_"v?s%}}ͦ_ºkoaΜ(;]00сj"t S*'_VtMSWo7[\>s'Oj{ҢzFL.M_V×.sDiiCϣ EĉF,{EQG2Wy=j޴P> je ˳``jSG ,0r}ײo ?}!7p*92" BjlLv GW}٬TJ*}?v:d߳GphNL-{==6[%߼}ݎ)4kmy<$u ( P(5>nlow?i0(L&R S*kcF>4 nú@Egff|>\S( IRy) bRdR-۷HiN "AŅENX{o&VZ-S(G;VFqS*u! &n4Y[zh5Ʉ)j==9YF.ɓ=4٬TFhDIRiQDWDf##\J:(Bx7n> Ѩv6fg2֞L${ǣq8MOLt<Io"u:Q+8jt1Һ\taLM<_ fsnv4JEcN ZmT*Bե4qZ WR4(v ER\ J"d|RW" [nk/ ri%x쑇ZnֿX=oܸ& S}&ښ4ȳ $Yw`(y~bbb7A+Xj| hp $I(j歷23SF7oNXMܪ_J % T|766&M@cER8nS*\nfyjXt^NL&/_x>#۽f(hPiٿ䥗Rg+?/k4k)JTl"W{ᖃ)Z, IDAT/\8NҒtٓa~s/ps TXX|Soq~?~-..w1uvj]b8SBQfKѨ2/0eϞ%u:Enw%/͹_d>y<(h cc_(dR$Qɓ~Q].7ySWȑ̆T;KWfL&tgj֖6o߾܌ViVӹjmNk4KKr4z 6HY@rYa4*f{ӧqRAs(%ZULJj!Yz=hA8&ZKmjB(F>/}iJi2^:t.~Ӻ\>իM+յty۶\ `߳'=9iٱ4  Aob Iry,нeDAh|/;b&Mz{ɷP*p!»Wd=#ݕyyٿqIdz>랧guM^V,.--UסeVQH E1c{>o< M"u[+(/^pEQt7 ̌ `g?K/93b5 Gox+Wh4^֬w5 سGJ~/ yel5HEI'( ]F$?6g6䱖$EQ:+eu5&@N%pE]zw ݻA׿/@2 h+@ kj}Ql^OKO}֠AouF7Z^3-sʸO/"ZCף85? EQG$ i:: *iP& 0)թUFq[ Ѡ<ϯ,S~E7`4ɿߖ4(@9IG]~=~a=Mis?ӥC\lPh|+]χ~㥗Ow8ر_ƔJ dJ>Q=5VѠa^'^ s\0\_ttaLKFvrilO[5#GC)\Q2d|Np3@$ItRu\bkiND>}Ç]ǎ=ssyW#h޻wo(:rEQfy$\2d|fA9h4TsJff٬^G 2>T*, /(YWlҷؘXl6˿Xjz穩)_,_vm=j *WF7B\_EojҠj@hBZ.JuR~OLxo(TgW_{a;wI5'?qEt N!^ MV*u7ŷl6wݓ'Onl5@w9rFDxhT93O׿#ާhgZ6j4E9@+H4V7pp=OP8}Mo~=  c7\qh+@>IHhEVS<^NT>'hd${ A@QMlh;}}vyeֱ!P,C&I&(NOO@>)^}' BLNN޼y3>}, J>([Z4pKr;w 4Mo޷!c+ @ZH :;;ѨV] N!c`-Bh4iY;<2kgt:?9yxVG204M3 d [_\.r9IlDQ,6TeY:jZyo,姸퓀c0|R!1 Ns e(ue(ڰb>(*˕e BV8(Y[4-uFjX,4fl[֤AaH2s뿎K+Eɓ 6mrr׿#GV׋a ˏI)~;rr jHkR~|>o]JN>aJ'xA_|ʼnl6a>sdT*pXʼn Z=44Id& Hӑ/G,r2Fŋ'A bvvV x<ӟl6GZfݼySRMOO{Nsvvd2]zٺsƗ_~l69seǏ<X,600jMkj5H4]O81??/]{h4+"g9)MFxG h4"@MWX#tJ% ^ovܹS,RŲӧ/\Of2zO>mX EQFzc|>߅ JիW>#fM5<>K#o5{vv6S?ɘZ(zkzaagfw>|kvʕl6Hr*c=f /JAx/\{LSfL&òAfHdMy"m"ؿ^?p޽{Zje||ӂ d2E}>t~kOOT@tx8F(zdj]]ժ4vt}>`T*m۶^Wzt:G(BdnnN׿@ `XBPTr:.kpp\.;Hi:p8<99944a Z6LT*Q#/Bajڇ~XT.^(ϑE@^fggck5׹spI$b^/" C_ ]~^<\.Wn(M^Uyڽ{VR8ۯfo9Nx饑?( Rh4Jl^VCǿٳg;e盷V hE7n 877k@'Nbg?߽{zQܺJiyQK%R0DڈpppP g N??99Zb&eYeRL&,Z,R)ǣVaf4Mt:anG&(R6A@ p#_sWTt:FڲzGJI--H2z&S3fNVk<?uw˗/FY(|>&d̓O>977 m6qb`0$ɮ.Bp!M]Žy`ZB ln.RZ .=zTZ:~csaL$Iv{(r: m۶-,,J rf-v=pBҠWx5w]\[+ fFd\pAtttH > GʸiЍH&XLOMMbO<2 X Z@4Z,XФA= P(zzzA( _dK 12GI2 0 yyeAdlӣ@ +6 8%H"@(yE\|p4c76ˠ<"1ҦP: y-X>4~b!]Jk+Ur&) {̞CsC;;Tb\%WJNjlתDZfoc՜ImZgռMgTe+֋RH65{e{ERS"eA\TI(#?7rJ Ax9I#K%q-xME$g`<2>(47np\L/&I?k*p QH~>:Y}4Kf\&@p@R3$ËFQx7W 1Bz![ͺnD YH/F]xɏZDd@" ܹsuUh, bp,C"3O@$^0 $i4-˚+͊VdUr 4YCK(Vu)xzřsɹ["#z-j^g>ocۭ;Ϝ>1ӫ,NE|V]P0m;];roib^Q5F* P|TinPbYa0JB)Qbp;l~iMz Gq}V_Q5;߉d#$Fc44nkhH6L]& U򬽇X#Tkڋ/XV9S*K>!p|Rv:0k3rl=ik2ricۙ3fY+[x̞j|k@<zGŬ6OF'Y%q( Ae3h>dbUj5&0T+5ʐ)gQJ6UJMGqO,JT 7zCtӋ!X^ \mLZl(*q? Bap YVpa"28'pzY;qM bg `,jwHF@c2t(?Wy(T cobҮ,=z;{-]+@qbFuvڞ=k<8WG W_Urw&e;87ݺʄOQ5)HIWH4KCΆuJ$~b\/(^X-)gԐ6N^ U$>g$H&24?T.L_EQ( %d1Y[-K%@QNR$N3a\K3Q1|442(3.Uj',Uу”=&ǏÇsbٳgz, T/,݌laJUoRʄ ͰX>6WznIxx`pC0Κ)gzUr]NR*B|T7Ƶ5F=O"0a4<*B]O\ H 5m0]Ku?dZRs Bj^uf ^D1qIԡ0p 'pBܠ62Ae(4JEc&&/OZMϨV:$OѬ%h?3 Ë?я &ix!pMk+֖3LWʦjn0}2Iuwՙz, mrR$Ke+Y#%RRKIRnficIcUsRR*ٰZg4K:ʔg[ͭJkEt]ES) IDAT}ɥIB!`(TrK #t*Ԕ%&is/z6kTMZ3 b( JRg(*p3vAV(*F ExF$I.gdBHH8ݷ DG`Ĥ6ߌA`8@C0H$EC1.Am?#,*pseagIZlRIq%WDP:dފӖGs4sJB)Jf:]G`@P,E`p6/!APQ&1EP9HgvdlkeGXqGNӠA&1)907orħA9P(eΜ9sUNw…p8ѱf+ңJ"/{N[M2j_(t)}n꜒e7׮Ƌ|$S&Iy$ԂQm\~9V`YQYB$g9)`N2',f5 0Lsd#IzNs onu (8K"yFBِQmDAEAXm 30OԐɧ\Ԭ5\9X]s]*gi$ :o7% 0幾"=)qղvztE|_W6l6b|K#[G ֨Z0h-DШ6NǦ]FEQ3>c#Hs'qmr{ۡ&畋|mפ\5Lf_ }p61/?~~?UJ={ҤN˔3=癓c'Hhrr|j7Χ؞B1{Nܾ|նNCِɥz787xH p]RԡC KJ÷< E`JUAPcPP $(+0E xaoﻃۺ|EED#)QQd,[8؞lvμYN&3fSٱ-[ljzh"E[GieE .=;|w)xz=UV"OR<@QW/x\G"{A!^,):{ΦUbH4Leq `NE5hK9&KdK^3x*nPr}^.JG1N߳gɓ'~۷tzkk뽜^RWRw?n *XS(Jr>cvV4yLҐoRY٠mcb1YF/|oLUL:3 YIf0-BYqkwH&mӈyD+Ӟ<2PxT :;^sN/כ<mCpcF8\gQb1Xp}S)Jd|g-W>)O c4t2ݢg-?_ s^(ZW}xxznn. ϯ9*#$" BST$EJT&5P5 0AQ^e9e+XM/TV )@[uB̻K(EP]$,bNf~ՕE@,KJY"x]qB`ҙp_B-VgE 84Z$(ʱ|4*4(F?$EE&'IfZ\ 4 zU"wlcVڝt)Rgn' j^dhj?_h##7od555۷oǓv2AGNvKy4wίJ(0d:|Q_I%Vk :7nBnFQ_'⊸,nl5rkⳔHKE5sXBR2b)ZMmh5Ǥ3݋&yb&$#\WƗEQEZ`l1WlY4mk@_4 zf/GѶnj6m6[6-++Guæn"0yL˓#K#&uO3n(jxiywƃި[|9\.y1;잰Nl.ی8bIύ[ p]X*wqE}c4$Ir:Yy-[f`qVS$EgT^JD> *Øy~``:9jOfgYg`_ v:uԽ?3x>/16n$#o:xKB9GG E@*Zڷ%&D*{3rY@x"HC1:]U ŲDrApŘX:ƃ æa5n |$+DLd8.F@#˾[GI ?ϝ;hNXuu=bu{u{]qt')G|+油t"Z|,d2a|Q'PV$`VW\ l-kNHK|Q_mq-eP*Kdˊ^'Z.)_Y  aLl5ߠmkeZT HѾ $#3P,.ʤ6cm83hu~Au|X þ8(j'J|̛$`Hg&eEe3kb򵁨XFw>7~D"+ \$ywp۳q$ë,uWrW%6U}"_R< DQje2*ph4Ju/.(?x2+FF#dL<-hw3Hb @ & Jآ֖ |hPg?|$=ύ7\S|~IIIJytu^x 7mRܓnc.Vt[x F#x=7KfIg-Z-d J=;idEz1u/^0R)300PRR`0H~z(J$<ƍ$Ia-rΝȣ/وT2L*ꙙֵeHd2CCCT766?/c'[)LݪVqLI .YBK6 CASf)\^#_|/Z@2DҥyRRccd($IATٳuuu;wv4-<3X`Gpw"yj,jvb卙*XPPumn?=J16{"(0 I1&YVEyhQ]%,MV-JZrfshjsY+\0 [\\,--eXjzaa!k^wvvA%***pW*($^w_{/ VH$}%Wյi&Ll6Тhgggsss^yH>YD[\>)X h$An:z@BQ ?4,׮];}]>bWɣ筥adرr…nmwTnw SJ,[^^5oD"b& BP(H$~o۶-atz,X,, A{<)phJ˗KJJ0lvvfT*E$㯽ZccEW^ %ghtZ{9?CcQ=t8_]ڮ_ٹe˖i~9H$sF,طo_8h4NX._^il]wxr{fy/W6ɓ>uԳ>{P(f\nQQT*cǎp8L;~|j=us:th``zX .\aصk***NѣGBC{>bD D6e X@bF|P#Lny%l #W$-4:MPK*|JR㳳uuu-&ů&Hd|֎%r9gfyߺukwwwkk7o\WW788899yD"QQQhpO۷o¯_~… CCCTJRe2t:o߾{O?~<9Eu:F uttANc X,+Dl ER<4:- t(h fY'yJ^Ł -R K|U4h~ CBd2'okcBz q8L T*H06$zvbHfXL.ÒgϞ|/B H$O}:?_B1 6`0( B</NfY,t>^6T(4qFg.8?#G޽{ _,۳kBPW@ x] iPǯ\rqo9sKSgΜv}>w~!nMEf}ak7_7/][9zh3d 9<`C_Eu,У>׿5L:P(zIl ַ{7!H$6o,J^Hmm{NP(FFFvoCI1;6 eٙ3p҅ RQID#B<:y O8; =*ɞyFG隭&).YR\..WҠ0>h6.]bpEOdJ%A{1LAtww\m۶555{YVg2\~С`0rCK%[tRG}FBCT0%֋$hHdT+bΘJ* ZHtebYOy/aAsH(.//ݻ7ڵkʆ} rݻr---===(ܹPTTt.T*V+}۷om<`ddd2KlǭEg` A^qEQ8v2;;;ſ/^[Ȏ#"}aYu[OA+!6A?/$IQԽW)a4}@+MK +d4RÂ?11qΝx<+aNrP(Dѣ L.--iړ'O竪nwRS#ՁreQ"De^j:uʸgEG-//yf6 ]f6АV}vMMͩSZZZFGG'''Qb0JqqbI&0uuuy҂~Af+ f,^&՗hLXX,&HP[F`- ٮ]ڒ쬯]w1\89qt:}tt֭[HdiiNh4^}v G!Cfw\ZҥK0)Y*f2H$x___SSAz>\l\ pwyhqC_y6|睉!GGGy[fD$R+l6f8~ƍ`0`0nݺuV8 >~ FPZZ +++(闋 |dD"IL&NgtNm 4[ٌ2qY~++h4j0~۹s^ry(R]]]=IV5Iҹl6h Bڟ "( ᑑ[nUUUq\K~^5aANeOX)pZ&~֭(JO&annN(NLLhڃafkkks:,k||AEa2~(FY,Yd2s]*@2\?o3}s0/JW0pknnP$^5ܩ)@ . BWp82$ɳF}4z? ʇFKϋfj<)dU6~P>zhPrC$I ) kY ZCP?qt@^D"HuwMOEQx Np Ѡpxbb7F+w_WBw],J|+7\|fתp x7f+AX^8Y9 5X'8L^zƍ?}X$/2/xQLfI$)7^ob04'''\oٲ CCCv(oqXaLA&Ctv.I\hwxb]]]MMͅ (BQk4RY^^~qD299YSSӟ4w!\.71>>}˗/9rw0 [^^7np8f?.ڃ:! nH$p,˟G/- 2c0SEӸ\ZO$ST lDŋ`tfQWWGQTIIJ}2g2H0$I!$IdٲEܖZ~饗4ݻ9l*޽{gff#X, tӹ{ T*}'E"QSSSqq_NQd2t:$IF# v@E}.6lfu:vQp8+\~ 9.W\`0),Dlf^Rp8P(IeYʖH$4 I!B#g7TRxQ07E, b#GDD"aX$ EQ,+LNNN>9/|l6r\.HDvR s ,J$7g ^7ȣ#hx<[0o2TܘMRgΜgΜG4?zlrʕ+WL&ӯk?hرckMQŋϟ?iF)panc\Yd:H7ޘ߾}{mO~7 վ~&e~\:իWb;6`ߟvA6UUUΝ;pT*]^^^Z|󦵯7pЉ}>?6z饶r:::JeZ^^6 6 t:/KKK۶m3LG9}B d{>bJdۿW_}u۶m|eld~{];=ѐ͛##Cj^ys5FE"o~Do{ddn8qebbb&illlΝxNOjii1(>T*i4{WN7BaOO`SթT* 8p +..ޱcG(;}}]v龾{ t:믷xڪtoܸ(++v~~aff*{ܻwĄhh4Pjellj>l6{ff`~$k׮=SCCCXoo^?yO?f-Z>qD}} ~aveeb=?xIéSƽ{K{{Zl@ᑑ\L&%ɱc*++ϟ?v tR8mhh8wRԁVkkk_YYye:^^^>88XUU?'?NK&׮]۾}˗,? )+++O>xEEPmmӧ_z%VͤAi= @  y=UIE56*viB yɚ[E"+ݥ!"8NŢjaq\VWWL&s{OVgY___َ;`0^o #Zɾ}fgga B Ih48pr8>99PYYH &pny^/:vlH$s{WSU.))Zzܹsp=D v;<$y6ftصk cf*j555tT*ǕT*L胱pp8Ԕd%碃@DՏ=XSSWy' mVTHIɤvLƩj4D>,Ja*Pzy<ܜ^STSSS!Jݕ'hZDRZZۋ HkktCCC4?8ZXX mPT*eX"Hee%.H2djnnߴi@ H$0iz;3pEEj(?lq)))-HȈEO.WedUl^h4DFs@VƮ.EGFF~Ju…2A`:_86ݶnI 6GFDV ۼk-q0Ӊjkd:P hvvFF322b٦cX<x<0WRi4Z F.9KRכ(/LNzrneZZV&v|e% ,_800bp/))(L&>ڵ x!re]0%A:@A4JAP43p,㹖WO|e0=\$>q<{$IRA^}ZX,: $?:;$( .wuAl" )x2koo/TpeGeN^Ϲ;bnF O7khgf}Jum.KY\4,N1L&{|33?Oht+xmq/_^)Р<,@VO`*h4  Lvww{<i x@:ޱNqGW(555e *tҶlLZ(h`gX]]@ `2ykMU*z<hllf?҇hI;ǟJϣ0Fgo(܂  y` # """ Package containing the various view manager plugins. """ eric4-4.5.18/eric/Plugins/ViewManagerPlugins/PaxHeaders.8617/Listspace0000644000175000001440000000013112261012660023546 xustar000000000000000030 mtime=1388582320.154179855 29 atime=1389081086.01372434 30 ctime=1389081086.315724332 eric4-4.5.18/eric/Plugins/ViewManagerPlugins/Listspace/0000755000175000001440000000000012261012660023356 5ustar00detlevusers00000000000000eric4-4.5.18/eric/Plugins/ViewManagerPlugins/Listspace/PaxHeaders.8617/__init__.py0000644000175000001440000000013212261012650025734 xustar000000000000000030 mtime=1388582312.003077114 30 atime=1389081082.806724399 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/ViewManagerPlugins/Listspace/__init__.py0000644000175000001440000000024712261012650025471 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Package containing the listspace view manager plugin. """ eric4-4.5.18/eric/Plugins/ViewManagerPlugins/Listspace/PaxHeaders.8617/Listspace.py0000644000175000001440000000013212261012650026124 xustar000000000000000030 mtime=1388582312.016077279 30 atime=1389081082.806724399 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/ViewManagerPlugins/Listspace/Listspace.py0000644000175000001440000005177012261012650025670 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2002 - 2014 Detlev Offenbach # """ Module implementing the listspace viewmanager class. """ import os from PyQt4.QtCore import * from PyQt4.QtGui import * from ViewManager.ViewManager import ViewManager import QScintilla.Editor import UI.PixmapCache class StackedWidget(QStackedWidget): """ Class implementing a custimized StackedWidget. """ def __init__(self, parent): """ Constructor @param parent parent widget (QWidget) """ QStackedWidget.__init__(self, parent) self.setAttribute(Qt.WA_DeleteOnClose, True) self.editors = [] def addWidget(self, editor): """ Overwritten method to add a new widget. @param editor the editor object to be added (QScintilla.Editor.Editor) """ QStackedWidget.addWidget(self, editor) if not editor in self.editors: self.editors.append(editor) def removeWidget(self, widget): """ Overwritten method to remove a widget. @param widget widget to be removed (QWidget) """ QStackedWidget.removeWidget(self, widget) if isinstance(widget, QScintilla.Editor.Editor): self.editors.remove(widget) def setCurrentWidget(self, widget): """ Overwritten method to set the current widget. @param widget widget to be made current (QWidget) """ if isinstance(widget, QScintilla.Editor.Editor): self.editors.remove(widget) self.editors.insert(0, widget) QStackedWidget.setCurrentWidget(self, widget) def setCurrentIndex(self, index): """ Overwritten method to set the current widget by its index. @param index index of widget to be made current (integer) """ widget = self.widget(index) if widget is not None: self.setCurrentWidget(widget) def nextTab(self): """ Public slot used to show the next tab. """ ind = self.currentIndex() + 1 if ind == self.count(): ind = 0 self.setCurrentIndex(ind) self.currentWidget().setFocus() def prevTab(self): """ Public slot used to show the previous tab. """ ind = self.currentIndex() - 1 if ind == -1: ind = self.count() - 1 self.setCurrentIndex(ind) self.currentWidget().setFocus() def hasEditor(self, editor): """ Public method to check for an editor. @param editor editor object to check for @return flag indicating, whether the editor to be checked belongs to the list of editors managed by this stacked widget. """ return editor in self.editors def firstEditor(self): """ Public method to retrieve the first editor in the list of managed editors. @return first editor in list (QScintilla.Editor.Editor) """ return len(self.editors) and self.editors[0] or None class Listspace(QSplitter, ViewManager): """ Class implementing the listspace viewmanager class. @signal changeCaption(string) emitted if a change of the caption is necessary @signal editorChanged(string) emitted when the current editor has changed """ def __init__(self, parent): """ Constructor @param parent parent widget (QWidget) @param ui reference to the main user interface @param dbs reference to the debug server object """ self.stacks = [] QSplitter.__init__(self, parent) ViewManager.__init__(self) self.viewlist = QListWidget(self) policy = self.viewlist.sizePolicy() policy.setHorizontalPolicy(QSizePolicy.Ignored) self.viewlist.setSizePolicy(policy) self.addWidget(self.viewlist) self.viewlist.setContextMenuPolicy(Qt.CustomContextMenu) self.connect(self.viewlist, SIGNAL("itemActivated(QListWidgetItem*)"), self.__showSelectedView) self.connect(self.viewlist, SIGNAL("itemClicked(QListWidgetItem*)"), self.__showSelectedView) self.connect(self.viewlist, SIGNAL("customContextMenuRequested(const QPoint &)"), self.__showMenu) self.stackArea = QSplitter(self) self.addWidget(self.stackArea) self.stackArea.setOrientation(Qt.Vertical) stack = StackedWidget(self.stackArea) self.stackArea.addWidget(stack) self.stacks.append(stack) self.currentStack = stack self.connect(stack, SIGNAL('currentChanged(int)'), self.__currentChanged) stack.installEventFilter(self) self.setSizes([int(self.width() * 0.2), int(self.width() * 0.8)]) # 20% for viewlist self.__inRemoveView = False self.__initMenu() self.contextMenuEditor = None def __initMenu(self): """ Private method to initialize the viewlist context menu. """ self.__menu = QMenu(self) self.__menu.addAction(UI.PixmapCache.getIcon("close.png"), self.trUtf8('Close'), self.__contextMenuClose) self.__menu.addAction(self.trUtf8('Close All'), self.__contextMenuCloseAll) self.__menu.addSeparator() self.saveMenuAct = \ self.__menu.addAction(UI.PixmapCache.getIcon("fileSave.png"), self.trUtf8('Save'), self.__contextMenuSave) self.__menu.addAction(UI.PixmapCache.getIcon("fileSaveAs.png"), self.trUtf8('Save As...'), self.__contextMenuSaveAs) self.__menu.addAction(UI.PixmapCache.getIcon("fileSaveAll.png"), self.trUtf8('Save All'), self.__contextMenuSaveAll) self.__menu.addSeparator() self.__menu.addAction(UI.PixmapCache.getIcon("print.png"), self.trUtf8('Print'), self.__contextMenuPrintFile) def __showMenu(self, point): """ Private slot to handle the customContextMenuRequested signal of the viewlist. """ if self.editors: itm = self.viewlist.itemAt(point) if itm is not None: row = self.viewlist.row(itm) self.contextMenuEditor = self.editors[row] if self.contextMenuEditor: self.saveMenuAct.setEnabled(self.contextMenuEditor.isModified()) self.__menu.popup(self.viewlist.mapToGlobal(point)) def canCascade(self): """ Public method to signal if cascading of managed windows is available. @return flag indicating cascading of windows is available """ return False def canTile(self): """ Public method to signal if tiling of managed windows is available. @return flag indicating tiling of windows is available """ return False def canSplit(self): """ public method to signal if splitting of the view is available. @return flag indicating splitting of the view is available. """ return True def tile(self): """ Public method to tile the managed windows. """ pass def cascade(self): """ Public method to cascade the managed windows. """ pass def _removeAllViews(self): """ Protected method to remove all views (i.e. windows) """ self.viewlist.clear() for win in self.editors: for stack in self.stacks: if stack.hasEditor(win): stack.removeWidget(win) break win.closeIt() def _removeView(self, win): """ Protected method to remove a view (i.e. window) @param win editor window to be removed """ self.__inRemoveView = True ind = self.editors.index(win) itm = self.viewlist.takeItem(ind) if itm: del itm for stack in self.stacks: if stack.hasEditor(win): stack.removeWidget(win) break win.closeIt() self.__inRemoveView = False if ind > 0: ind -= 1 else: if len(self.editors) > 1: ind = 1 else: return stack.setCurrentWidget(stack.firstEditor()) self._showView(self.editors[ind]) aw = self.activeWindow() fn = aw and aw.getFileName() or None if fn: self.emit(SIGNAL('changeCaption'), unicode(fn)) self.emit(SIGNAL('editorChanged'), unicode(fn)) else: self.emit(SIGNAL('changeCaption'), "") def _addView(self, win, fn = None, noName = ""): """ Protected method to add a view (i.e. window) @param win editor window to be added @param fn filename of this editor @param noName name to be used for an unnamed editor (string or QString) """ if fn is None: if not unicode(noName): self.untitledCount += 1 noName = self.trUtf8("Untitled %1").arg(self.untitledCount) self.viewlist.addItem(noName) win.setNoName(noName) else: txt = os.path.basename(fn) if not QFileInfo(fn).isWritable(): txt = self.trUtf8("%1 (ro)").arg(txt) itm = QListWidgetItem(txt) itm.setToolTip(fn) self.viewlist.addItem(itm) self.currentStack.addWidget(win) self.currentStack.setCurrentWidget(win) self.connect(win, SIGNAL('captionChanged'), self.__captionChange) index = self.editors.index(win) self.viewlist.setCurrentRow(index) win.setFocus() if fn: self.emit(SIGNAL('changeCaption'), unicode(fn)) self.emit(SIGNAL('editorChanged'), unicode(fn)) else: self.emit(SIGNAL('changeCaption'), "") def __captionChange(self, cap, editor): """ Private method to handle caption change signals from the editor. Updates the listwidget text to reflect the new caption information. @param cap Caption for the editor @param editor Editor to update the caption for """ fn = editor.getFileName() if fn: self.setEditorName(editor, fn) def _showView(self, win, fn = None): """ Protected method to show a view (i.e. window) @param win editor window to be shown @param fn filename of this editor """ for stack in self.stacks: if stack.hasEditor(win): stack.setCurrentWidget(win) self.currentStack = stack break index = self.editors.index(win) self.viewlist.setCurrentRow(index) win.setFocus() fn = win.getFileName() if fn: self.emit(SIGNAL('changeCaption'), unicode(fn)) self.emit(SIGNAL('editorChanged'), unicode(fn)) else: self.emit(SIGNAL('changeCaption'), "") def __showSelectedView(self, itm): """ Private slot called to show a view selected in the list by a mouse click. @param itm item clicked on (QListWidgetItem) """ if itm: row = self.viewlist.row(itm) self._showView(self.editors[row]) self._checkActions(self.editors[row]) def activeWindow(self): """ Public method to return the active (i.e. current) window. @return reference to the active editor """ return self.currentStack.currentWidget() def showWindowMenu(self, windowMenu): """ Public method to set up the viewmanager part of the Window menu. @param windowMenu reference to the window menu """ pass def _initWindowActions(self): """ Protected method to define the user interface actions for window handling. """ pass def setEditorName(self, editor, newName): """ Change the displayed name of the editor. @param editor editor window to be changed @param newName new name to be shown (string or QString) """ currentRow = self.viewlist.currentRow() index = self.editors.index(editor) txt = os.path.basename(unicode(newName)) if not QFileInfo(newName).isWritable(): txt = self.trUtf8("%1 (ro)").arg(txt) itm = self.viewlist.item(index) itm.setText(txt) itm.setToolTip(newName) self.viewlist.setCurrentRow(currentRow) self.emit(SIGNAL('changeCaption'), unicode(newName)) def _modificationStatusChanged(self, m, editor): """ Protected slot to handle the modificationStatusChanged signal. @param m flag indicating the modification status (boolean) @param editor editor window changed """ currentRow = self.viewlist.currentRow() index = self.editors.index(editor) if m: self.viewlist.item(index).setIcon(UI.PixmapCache.getIcon("fileModified.png")) elif editor.hasSyntaxErrors(): self.viewlist.item(index).setIcon(UI.PixmapCache.getIcon("syntaxError.png")) else: self.viewlist.item(index).setIcon(UI.PixmapCache.getIcon("empty.png")) self.viewlist.setCurrentRow(currentRow) self._checkActions(editor) def _syntaxErrorToggled(self, editor): """ Protected slot to handle the syntaxerrorToggled signal. @param editor editor that sent the signal """ currentRow = self.viewlist.currentRow() index = self.editors.index(editor) if editor.hasSyntaxErrors(): self.viewlist.item(index).setIcon(UI.PixmapCache.getIcon("syntaxError.png")) else: self.viewlist.item(index).setIcon(UI.PixmapCache.getIcon("empty.png")) self.viewlist.setCurrentRow(currentRow) ViewManager._syntaxErrorToggled(self, editor) def addSplit(self): """ Public method used to split the current view. """ stack = StackedWidget(self.stackArea) stack.show() self.stackArea.addWidget(stack) self.stacks.append(stack) self.currentStack = stack self.connect(stack, SIGNAL('currentChanged(int)'), self.__currentChanged) stack.installEventFilter(self) if self.stackArea.orientation() == Qt.Horizontal: size = self.stackArea.width() else: size = self.stackArea.height() self.stackArea.setSizes([int(size/len(self.stacks))] * len(self.stacks)) self.splitRemoveAct.setEnabled(True) self.nextSplitAct.setEnabled(True) self.prevSplitAct.setEnabled(True) def removeSplit(self): """ Public method used to remove the current split view. @return flag indicating successfull removal """ if len(self.stacks) > 1: stack = self.currentStack res = True savedEditors = stack.editors[:] for editor in savedEditors: res &= self.closeEditor(editor) if res: try: i = self.stacks.index(stack) except ValueError: return True if i == len(self.stacks) - 1: i -= 1 self.stacks.remove(stack) stack.close() self.currentStack = self.stacks[i] if len(self.stacks) == 1: self.splitRemoveAct.setEnabled(False) self.nextSplitAct.setEnabled(False) self.prevSplitAct.setEnabled(False) return True return False def setSplitOrientation(self, orientation): """ Public method used to set the orientation of the split view. @param orientation orientation of the split (Qt.Horizontal or Qt.Vertical) """ self.stackArea.setOrientation(orientation) def nextSplit(self): """ Public slot used to move to the next split. """ aw = self.activeWindow() _hasFocus = aw and aw.hasFocus() ind = self.stacks.index(self.currentStack) + 1 if ind == len(self.stacks): ind = 0 self.currentStack = self.stacks[ind] if _hasFocus: aw = self.activeWindow() if aw: aw.setFocus() index = self.editors.index(self.currentStack.currentWidget()) self.viewlist.setCurrentRow(index) def prevSplit(self): """ Public slot used to move to the previous split. """ aw = self.activeWindow() _hasFocus = aw and aw.hasFocus() ind = self.stacks.index(self.currentStack) - 1 if ind == -1: ind = len(self.stacks) - 1 self.currentStack = self.stacks[ind] if _hasFocus: aw = self.activeWindow() if aw: aw.setFocus() index = self.editors.index(self.currentStack.currentWidget()) self.viewlist.setCurrentRow(index) def __contextMenuClose(self): """ Private method to close the selected tab. """ if self.contextMenuEditor: self.closeEditorWindow(self.contextMenuEditor) def __contextMenuCloseAll(self): """ Private method to close all tabs. """ savedEditors = self.editors[:] for editor in savedEditors: self.closeEditorWindow(editor) def __contextMenuSave(self): """ Private method to save the selected tab. """ if self.contextMenuEditor: self.saveEditorEd(self.contextMenuEditor) def __contextMenuSaveAs(self): """ Private method to save the selected tab to a new file. """ if self.contextMenuEditor: self.saveAsEditorEd(self.contextMenuEditor) def __contextMenuSaveAll(self): """ Private method to save all tabs. """ self.saveEditorsList(self.editors) def __contextMenuPrintFile(self): """ Private method to print the selected tab. """ if self.contextMenuEditor: self.printEditor(self.contextMenuEditor) def __currentChanged(self, index): """ Private slot to handle the currentChanged signal. @param index index of the current editor """ if index == -1 or not self.editors: return editor = self.activeWindow() if editor is None: return self._checkActions(editor) editor.setFocus() fn = editor.getFileName() if fn: self.emit(SIGNAL('changeCaption'), unicode(fn)) if not self.__inRemoveView: self.emit(SIGNAL('editorChanged'), unicode(fn)) else: self.emit(SIGNAL('changeCaption'), "") cindex = self.editors.index(editor) self.viewlist.setCurrentRow(cindex) def eventFilter(self, watched, event): """ Method called to filter the event queue. @param watched the QObject being watched @param event the event that occurred @return flag indicating, if we handled the event """ if event.type() == QEvent.MouseButtonPress and \ not event.button() == Qt.RightButton: if isinstance(watched, QStackedWidget): switched = watched is not self.currentStack self.currentStack = watched elif isinstance(watched, QScintilla.Editor.Editor): for stack in self.stacks: if stack.hasEditor(watched): switched = stack is not self.currentStack self.currentStack = stack break currentWidget = self.currentStack.currentWidget() if currentWidget: index = self.editors.index(currentWidget) self.viewlist.setCurrentRow(index) aw = self.activeWindow() if aw is not None: self._checkActions(aw) aw.setFocus() fn = aw.getFileName() if fn: self.emit(SIGNAL('changeCaption'), unicode(fn)) if switched: self.emit(SIGNAL('editorChanged'), unicode(fn)) else: self.emit(SIGNAL('changeCaption'), "") return False eric4-4.5.18/eric/Plugins/ViewManagerPlugins/Listspace/PaxHeaders.8617/preview.png0000644000175000001440000000007410650203475026026 xustar000000000000000030 atime=1389081082.808724399 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/ViewManagerPlugins/Listspace/preview.png0000644000175000001440000005754010650203475025566 0ustar00detlevusers00000000000000PNG  IHDR1F_bKGD pHYs  tIME 2 _e IDATxwt\u.~nzA$I()Q͒KV;߁PAPh."( A @0D(`V5A2L Je}m%wޭhn `&Ͳ侾>aPvW{E!(y睵\"GCusWxOr, yCW@ l,3;:KJ|ޞm󍌌$H$ݝdd2绺nw  ܳ&e2ϻ ADXE̻ߝ-9}&<N N499?rEATpbgNh:z;Nd~u>~ Ox;$M.QLcI6Yq8hu p' ڵ ðd2988#:ul6gY/\ad8YT*Վ;nxDT|-slL*d #nDaIg5 ̄g6nhoE_eiU۪&I<5%ap5S,S(0N>El3I~͛rʧzJR0 sZ6JH$"nGAi)zB$*|gJzlcV4y-,I%TEd&)é0˱)213k2TN9cyVLE'SdJEQ(42T!iRYO,u^H::>>]v7ΈtنL&CFAQaRl( Al6{'|O?bSjU*g az2͢(EaJãXߨcED`I\EPg,#!0ϭuVG'Ȕfi\g_{Z&K1N[R=I:aaK<k ^?wUTq'BP*LC/V?XLy o+1H ?mj)DM )8  drQOA򻭩la="dz;WXW]_x `#Ig'd .PE첕J[TQf(&˰ a]R3?Eѧz*O."H p<΢򊪅-33ysWZE79[jEf `bm9M45XxިQ]SEqAIḁwIz'xax!B.*H(48nI oL`YvsLE` J:0Pc6NJY8!)Ī:n -v͙JJA0{#w=Xa%c!y>$|R.Wf:8]aXr z#^ށ"( 1.NjE(>Er5 ްWJR%S}^Ooh:x-?[ՠ Cc2"+yN /++koo?zjM$of<뛛sW^F33366Zaش?DA燔d tttl޼9o勣e$^m{n)8rQ)S:''G|#4K @$DL4I1Td[ɶOLjP` z*/XuwOB7\:{L||S Ue= "_ԇ+`"#b\ZzݽUA/s܁DV=9?YejlO0̸̰ܡw.^Da:g&NfL΃wOw~f9&N:bsþTd^ P!l&"x#dob~'cIcF^(0g*}s_ڢGTX*q\}j G.ƈX:RWƯTscscVQAΏ꺪Qjz=Fp^#+8ɲl0@ XyXn`^B(//jSSS<@:ab<4M;h4o^s;(--eY6.q,dD&RoqF),% TY\|d3[CɐUge8Td%i*ĔS5;`69&I&uJ`CQ ,A)* `28\NW箺]'3Ie2L*d鞅\Idz=Y6)[ZXG`V+5bcqd}w MY4@"Uje]S] 2qqbipjGJ!:\lNLaXq^l,ub$9J7:7j<OFcbSI</5: N&I).rUg]wJ*miS͍m.,G*\>l ĈAmP^;>?nv"Hג i2tF3Sj.xN-W33/ӡi@aTt6o(ِΦiNd[*Dґ kP4Kq> [UrSd٬7n(0ӫ 2kl5i*]n-/+0EFґEk3tƦY¦ @@ ip.P (0 Û6 z@WUI2Yl,uRK7/_\TT n p<p6K2 3&A4v+**Ξ=\䠯9NL!S {eL< W?Q$2ʆtYAdBL,cH=+b=4;TcQ?M&T-$G8Xe4xgd2cNV?@VIk36NUtVfn$UoÆ k֬aYvjj$>Ctɓeeea}ǜ ׯ_p8N&_Y=rJ?Vu˖-T ð6qb /pkM陟(jaZbܺ/WkABI^{y ^?7ސ奥CCCP[[[\\aFQVT*A s8~%=zF"6JaXee-7|ǎjz/f!C"Sd  -s;AL ^n^^o]]M\o5W#ݨNS CA e߿0|wl6{)r@ DdK}%"]Lɭ'$,*`_niiɻ7[' H(4T%s\.4JªDs z>_a MD0(ko'cKc)*=?dcph(齎L;:q{c= 4P0,|d t pph1J SO < AdaA͛۷JJ縄ǓY ޶qydȁ@bSפ.apa*'#CUU"ry&&)ϺnI:ma8~<@Ȉ.N;|xwL̄yu;Gt:P7 jk5k*~FQLNϝ 2c)*!m}tav8%Kj) ʇ֕f*{/_k4d8.jlx~BÑ1Z*1&ggD(d[i}y۝۷ `fNN&ggPHt,TT6d*yAa%%.D&#L덌+z:uvdi2|Ym $Qi. uǹnEJƍsP tSV'If~>]_oyɊ =ʕ+=PkkO>i6%Kpg>ɲ2< 9rzJ \;X^qٷXiNXeee<i:K>)"[ZBd2YIIIyyhqq |qzz{V 0H[jrŻnF#GQX&m۶ j4Z-ِ;[O퉼o?Pq, q|hjUcV§Sq]Y#% 2]0 ^^FXI(Y:t(߿?HՈ8]M&Rܰa ɺĭP%eOy!v\.G2Z+q$CouM֥UBhn QhDϗlQrV A[N?pzzb477m޼9 (+1,4ַ<iMM z, pշ~{ll7W\t/_.++zjssmo &˝EEEPd2rtbR|)A00 y< Q_)*ҘL*K/T^^n2$/e" /w h޽---z~޽7x"Ms_o.56]uhܰKCе"ѣG!bYpD"p8B000 />|8H4zo4;8ǛΝ;xzFL" .\46  ldoad$55IegG*]kV__w89`2**Q/0DvGke_|jaB2p8<99d{rSN9N!V$Bh>hmmǹ+38 DKĚJ֬,eee?O$۽_WnU]9d2|>\^^^7w廆Bͦ3ey;n6HAQfSH H&|gAطoܜjU(XLRUUx6^4t:z=I>D, "4l8 $= b"]TdIS8U^G.ߕG'%HI ۤ$,}5,RY(aO֭J<{իWCZZZn 7\pW_}ܹs'Nx|jj 099Х_顡!绻8JĽE93S+ܗs '&&}RZ3jkk{{{V]t^ x<7wJšJ񊊊 xxav=.=88ȲcǮ^\b +[Wqr~~>^r-)o' ^"^07g!fqW^ft$CO:0@ oqT"Bafn9֓H(42ݺkq2+$d8]oV Y FɕytaL& BȲy~s:8.NGQK4KD2\| ֎Ms+B6nb d24[˭+\Vk0\hlj'zÇfbɽ xj42VY7 C>bV5ZN2͓cccHE\]wu$I9sfpp;c=vya~ؘRlnn^v7mvGFFPrV}WNjmiij`PpF'֯;瞛K47T>D_dmۜj 0999===#zAzirfn;Td0̍ڵK`ҒWj [)t?\gY}2ޅaHuᥗB !FE~_8Vcǎl4Mwuu BcccCCC3334Moܸq~~^&a&>ӧ{@ 077Gn/--D"}}}4M=z B!* M/~ѡ7o0t4 C4aO A^{qD" cX8~=Q"9CԓupAדVud2)ķP(PVu:֭RիsZN .bGGGRTQQQMM͚5kxzA /~!˟}ٶ6CL}}r\E^^hS]i566ՅVj ۺ\  S0Ն٤^/h۶933P(#RTTT__~zgggZ-H`0 Iuuen7d] ˲A*6F$浳:00 Caq]y_(D[LMML&q H"jhhhƍbG='NxG\0\.oq@/ q{C>XZ\y [!,|#nnn~GĎ;$,L&3PtJu%iHLdAF[~K: UƭCQ`0֓ .j.OOO#C;vկ~p8~/_޶mh4pٳg```׮]}Q}}?,9jxY[8}r;WDcG] mmHPnh!?B[O0Vr9qrhrh8%\1Z6=gY>%>_77m+(^kmmU7 t t:W\\,RyQbl6g?{_kZAF{@[[H}}i6L*j~~>L&4? `Yvq\8n,hT*u޽---#FxHz{x{;-#=V=7a("кuj|z(q BwFQq9D(<77j!Zvf9x޽{ķ 'OEQ y>w͛+XV]X,֭+++Sy%d" 3:\,JeU*9q\Suu&Yn"~M6$IQg ɔJR,A<򉉉WVWWRC-FA8˲Trb1SN@,廚L&:]\+E)`0jE%@Qq ApTe<*-QgJFO $Ν;wB!՚Nqt:mSQM&6-ςC{1w-he٬R r^\p_Aj.4g Hrd>XBUA^˲gΜI$>G}|ɼ ~u >Y}<<ϋ  h||*NSTe^su$/PhXBy^e4sMA.^qF,:ݛ,A]M{'hnld2Hfa(r֓NB!'yuj!wlvZ0}Ni%g(h-H$r5!4WKByu ZKl6ǝ;wav n7J+ͲO|#n}ʷb>p(,RB8A'pnlaxΝF+pXWpFDw,imWyTG\[?z@{{hܽ{7A╻~Ç#RUU".z788X]]r,A>,A9lNڽ{v풬3\n'-Kn hffbX%[z Hxx8TQ{i|;>yuō%%"Iae;::z) D IA2L?Mӭx|ƍ2,Hd2VQ=ݻw>/JvO_s#gIe`nLǏw:lb(']hru=0/cǎE"xj ]0 WTTLMMmٲ `0qƼ>)1 aA<~t0|MpF֬1뿶ԶmNǁAq1n7Pw o ptw`+ (-?!.]- x=@Q_9Poo^w8.KקiZ}պG:u V__# z^BqȑL& ZnmmxR5A(ʧzjcccR$aFżܺHR-Y  խjI(4nAQTVd\$jdOrGdnp8$Λ*C\ ^:<]1rŗmZ@6xo容gY UK% zn ^AHxyF­Փy$ L&KJuJ511iӦr\B9ߕ?B>{TS3LlA^?qn]ᑑǤӮ' z5<:jZfE}y0M?@rڢ>c)JV::,k׎|f q 3u4 JJL&3v\\y0:g\ ϟk4g:l O67+ ɓJ}LKKIS 21s W~cHþvY:q&#QflV#XgYl1 /ixHoƜp}r \eٶ_^W^przrСуCí/ x3g$pW2w|u xPݱcG(evvY9rV?ư{FJlbA0Lnpd2?Oe2(jn[O.+S0 0q@Vˬ'A-ЖdAIqIַA0 ?< gj/I}~W$`9 'E\_BdA禆p$Ph[W  bs7{k>2 CI=nòlss~;{_w**eefIDAT g}'s<i|2M&}Tk?vZ[[o᛹z*9 IrOBX(>0 ۷ow\+d ܥB‡Obۏ|eϞS/j?rKk BO M4M;v_⒋?bq8/⫯Ϟ8qB.[rןRwDQt޽ccc k׮ ;w|>׻uVl6V|P(TVVf2t:ݞ={͛J%qg566 mG^n]A+3SKto8… 0 755]pA7̌CJ X'\WW]щ  Hy%&Vn޵kw|rMqD7& ϦR $pG\\}q ey BE)rܺhd%f&Ӻ!;`r#ꋓtܹsZ$IzGV Qs$H7%/nI/Rg]!Y)XJpW%c!έxiJ FNP:+.kffF#/ߔ@0\.Sp2 Xp #吗[Ȧ?wܦM׿ۏr+\PnuuAqdN͛{~'TLqd$`I2JQX:\.tyIIM _-FQ;~GQTH֭PO&}}djlɘcc9gCeZǏ7mR 'f׾WTR~lzuH)a.IVe=Ni 4MmmzT%c~WƍweIdz  s݈LX 4AiiQ sar^~4 aSo7|ҥ}sH+AIs|Sk`+AY6W%vg'%VnIϟ}>T*O$[7ŭK(A]}­S*k֬!Irnnn۶mJ$ۿrkHptA$I8R\.W*RGY:$Y{r MW_*0 {'vRTwdD %VObVSS#]VVBbpSd(Zfdez=W 8w'VOR|q ~?^| ruV' òw!:>Q{WyѾKhC;8=vm34{;sɴwI&K4kǮ`l9`l "2оb@bR#9{ϻ~KS(\blgNܾmom% bAd{V+9%BkugX,^аk.tI U &x|`b Β8ΕɄ99Kɑ#?!q,`K ! g={>L3x03׮e۷+^]VRAP|p8/a0P%4?/՛7Ϛ$IE"$ /p p!j<e MM@m71s~vu ^ @h9 uDo0%'b~nGF䥥S;wnQ"r͙yz0V+HPMCڞ;YFcp8,H;ExVLYEEQk3D4LkjjƛYBftolҢ"vBAMG,arÁE- ')IAK(dDZXm]{d˷۹f0v-!PJJ r& @&ItIĢQ4T<X"877t(b PȖH*** nVI9R@V߸Qod2x=&Hrss (%?kO:gZaxO(L@ 0;;KL&lhÇ|>I$*Lߏaػᄏ|###6M pܩ)Z2I^oiidb`0x6 OS4l6#F%JRTZVd2Bb0 X.̫w%I2!p<g2IXW˹ٹuTnhh(;;f0`0 \.gP(\YCeKtIOLD\riE!qq֭[$I;wnD 1@quvva ?aX[[]]]@!|28(s}'gΜNx _|yo{`F"wy ǁFq?xE3g\rb444qp"%Ϥ׿ݻw!8^'_|rRٜsݩl/R}}T*=v׃`WWW"CpՙpEdXP(rΝ;W\innrڵknllp82L(K$۷o;cǎ溺:>p=vQ`NɤP(F#Aj: ]t ۷EѾxl B(--5yyy< ÑHFNA VVVF^NDVg-((PՑHNL&x)--t= F#AEEEdd)D %N, )P(AБ#Gz``XZG?A^ԀЫa8FQRx]]j h4]]];80<77777gϞ:a%uh&f^zhyZ-Y,V[= ڮFv`0t:Er\.DH$d21 LNS.MOOՉbLaX~~n0 X,Bhx<333:nffdb;wvRt:]uuuQQQ]]D"~v=77\vF"R)`6LI$Nta2FB!NWSS355w5ɔȋμD$egg{tj4YfoX,$(8h_t:T ,UAQd}!Tֵ,((P*k7yZɑ CI70GzX? l' $JN°+rK4)o]d4mmmeX&ŋ:.iB(3d|>ǣP(RPvbD&!(e$IZ-Hx<ޱcRl<ir!( @8nmmU((^zq9$ dR 8p|>rH˸: ?4ںb<ij)P>ӓY,@k(LF\vv.+>|Hі IrlUm>4-Ptcymfd655l>>~eeaaɓPҥKn… ~܋fZ -]__p|~JueL2  lQQH֑ fuccc8Dٳg].׉' J ù[n%Iv iT(`%J Ld8xݼy p8qƫWr8!kkko޼a%˅B!xhtnnN*0ӟ4'jA:u[Z@3z{{\. >/)dBk2S?V~Ùȹ\^^N-L&\Hhjk(j6 D&LD{ゥs7IeS=|((''vK$^x֭[O>OkZjg0hr4}1ϛ2FH$pD"|`p8+i H5мXVvgj`|pCpD.WpXfoU(|Ѩ34*nwZ ,JeEvv Wxp+߾}`lٲx$I&i6F#x8۷ٳΝ;* BLFV <綾^h@8Sf ݐ'[[[KJJFc[[[YYYRKO=EӘ0L{.WСb:..eeqyy WfgOx*Ͷy۴Z5 %1.//B`0Ɲ;wvuu(z2pazzo۶mmmmF,oڴ NC!bjMUEi2 V)wb{~\0w@=i"a<YYY)=Hd~x?D'X,VUY0 =DRTLLL|Di뒳%ӛid~s6رxjIQ.AYXP2DBc *&2!9$Ia HR-oHšj_\c0\(Px@$ LR@I (@·], # """ Module implementing the mdi area viewmanager class. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from ViewManager.ViewManager import ViewManager import QScintilla.Editor import UI.PixmapCache from E4Gui.E4Action import E4Action, addActions import Utilities class MdiArea(QMdiArea, ViewManager): """ Class implementing the mdi area viewmanager class. @signal editorChanged(string) emitted when the current editor has changed """ def __init__(self, parent): """ Constructor @param parent parent widget (QWidget) @param ui reference to the main user interface @param dbs reference to the debug server object """ QMdiArea.__init__(self, parent) ViewManager.__init__(self) self.lastFN = '' self.__removingView = False self.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded) self.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded) self.__windowMapper = QSignalMapper(self) self.connect(self.__windowMapper, SIGNAL('mapped(QWidget*)'), self.setActiveSubWindow) self.connect(self, SIGNAL('subWindowActivated(QMdiSubWindow*)'), self.__subWindowActivated) def canCascade(self): """ Public method to signal if cascading of managed windows is available. @return flag indicating cascading of windows is available """ return True def canTile(self): """ Public method to signal if tiling of managed windows is available. @return flag indicating tiling of windows is available """ return True def canSplit(self): """ public method to signal if splitting of the view is available. @return flag indicating splitting of the view is available. """ return False def tile(self): """ Public method to tile the managed windows. """ self.tileSubWindows() def cascade(self): """ Public method to cascade the managed windows. """ self.cascadeSubWindows() def _removeAllViews(self): """ Protected method to remove all views (i.e. windows) """ for win in self.editors: self._removeView(win) def _removeView(self, win): """ Protected method to remove a view (i.e. window) @param win editor window to be removed """ self.__removingView = True self.lastFN = '' win.removeEventFilter(self) self.closeActiveSubWindow() win.closeIt() self.__removingView = False def _addView(self, win, fn = None, noName = ""): """ Protected method to add a view (i.e. window) @param win editor window to be added @param fn filename of this editor @param noName name to be used for an unnamed editor (string or QString) """ self.addSubWindow(win) if fn is None: if not unicode(noName): self.untitledCount += 1 noName = self.trUtf8("Untitled %1").arg(self.untitledCount) win.setWindowTitle(noName) win.setNoName(noName) else: if self.lastFN != fn: self.lastFN = fn win.show() if win.hasSyntaxErrors(): self.__setSubWindowIcon(win, UI.PixmapCache.getIcon("syntaxError.png")) else: self.__setSubWindowIcon(win, UI.PixmapCache.getIcon("empty.png")) # Make the editor window a little bit smaller to make the whole # window with all decorations visible. This is not the most elegant # solution but more of a workaround for another QWorkspace strangeness. # 25 points are subtracted to give space for the scrollbars pw = win.parentWidget() sz = QSize(self.width() - 25, self.height() - 25) pw.resize(sz) win.setFocus() win.installEventFilter(self) def _showView(self, win, fn = None): """ Private method to show a view (i.e. window) @param win editor window to be shown @param fn filename of this editor """ if fn is not None and self.lastFN != fn: self.lastFN = fn win.show() win.setFocus() def activeWindow(self): """ Private method to return the active (i.e. current) window. @return reference to the active editor """ subWindow = self.activeSubWindow() if subWindow is None: return None else: return subWindow.widget() def showWindowMenu(self, windowMenu): """ Public method to set up the viewmanager part of the Window menu. @param windowMenu reference to the window menu """ self.windowsMenu = QMenu(self.trUtf8('&Windows')) menu = self.windowsMenu idx = 1 for subWindow in self.subWindowList(): sv = subWindow.widget() if idx == 10: menu.addSeparator() menu = menu.addMenu(self.trUtf8("&More")) fn = sv.fileName if fn: txt = Utilities.compactPath(unicode(fn), self.ui.maxMenuFilePathLen) else: txt = sv.windowTitle() accel = "" if idx < 10: accel = "&%d. " % idx elif idx < 36: accel = "&%c. " % chr(idx - 9 + ord("@")) act = menu.addAction("%s%s" % (accel, txt)) self.connect(act, SIGNAL("triggered()"), self.__windowMapper, SLOT("map()")) self.__windowMapper.setMapping(act, subWindow) idx += 1 addActions(windowMenu, [None, self.nextChildAct, self.prevChildAct, self.tileAct, self.cascadeAct, self.restoreAllAct, self.iconizeAllAct, None]) for act in [self.restoreAllAct, self.iconizeAllAct]: act.setEnabled(len(self.editors) != 0) for act in [self.nextChildAct, self.prevChildAct, self.tileAct, self.cascadeAct]: act.setEnabled(len(self.editors) > 1) act = windowMenu.addMenu(self.windowsMenu) if len(self.editors) == 0: act.setEnabled(False) def _initWindowActions(self): """ Protected method to define the user interface actions for window handling. """ self.tileAct = E4Action(self.trUtf8('Tile'), self.trUtf8('&Tile'), 0, 0, self, 'vm_window_tile') self.tileAct.setStatusTip(self.trUtf8('Tile the windows')) self.tileAct.setWhatsThis(self.trUtf8( """Tile the windows""" """

    Rearrange and resize the windows so that they are tiled.

    """ )) self.connect(self.tileAct, SIGNAL('triggered()'), self.tile) self.windowActions.append(self.tileAct) self.cascadeAct = E4Action(self.trUtf8('Cascade'), self.trUtf8('&Cascade'), 0, 0, self, 'vm_window_cascade') self.cascadeAct.setStatusTip(self.trUtf8('Cascade the windows')) self.cascadeAct.setWhatsThis(self.trUtf8( """Cascade the windows""" """

    Rearrange and resize the windows so that they are cascaded.

    """ )) self.connect(self.cascadeAct, SIGNAL('triggered()'), self.cascade) self.windowActions.append(self.cascadeAct) self.nextChildAct = E4Action(self.trUtf8('Next'), self.trUtf8('&Next'), 0, 0, self, 'vm_window_next') self.nextChildAct.setStatusTip(self.trUtf8('Activate next window')) self.nextChildAct.setWhatsThis(self.trUtf8( """Next""" """

    Activate the next window of the list of open windows.

    """ )) self.connect(self.nextChildAct, SIGNAL('triggered()'), self.activateNextSubWindow) self.windowActions.append(self.nextChildAct) self.prevChildAct = E4Action(self.trUtf8('Previous'), self.trUtf8('&Previous'), 0, 0, self, 'vm_window_previous') self.prevChildAct.setStatusTip(self.trUtf8('Activate previous window')) self.prevChildAct.setWhatsThis(self.trUtf8( """Previous""" """

    Activate the previous window of the list of open windows.

    """ )) self.connect(self.prevChildAct, SIGNAL('triggered()'), self.activatePreviousSubWindow) self.windowActions.append(self.prevChildAct) self.restoreAllAct = E4Action(self.trUtf8('Restore All'), self.trUtf8('&Restore All'), 0, 0, self, 'vm_window_restore_all') self.restoreAllAct.setStatusTip(self.trUtf8('Restore all windows')) self.restoreAllAct.setWhatsThis(self.trUtf8( """Restore All""" """

    Restores all windows to their original size.

    """ )) self.connect(self.restoreAllAct, SIGNAL('triggered()'), self.__restoreAllWindows) self.windowActions.append(self.restoreAllAct) self.iconizeAllAct = E4Action(self.trUtf8('Iconize All'), self.trUtf8('&Iconize All'), 0, 0, self, 'vm_window_iconize_all') self.iconizeAllAct.setStatusTip(self.trUtf8('Iconize all windows')) self.iconizeAllAct.setWhatsThis(self.trUtf8( """Iconize All""" """

    Iconizes all windows.

    """ )) self.connect(self.iconizeAllAct, SIGNAL('triggered()'), self.__iconizeAllWindows) self.windowActions.append(self.iconizeAllAct) def setEditorName(self, editor, newName): """ Public method to change the displayed name of the editor. @param editor editor window to be changed @param newName new name to be shown (string or QString) """ pass def __setSubWindowIcon(self, widget, icon): """ Private method to set the icon of a subwindow given its internal widget. @param widget reference to the internal widget (QWidget) @param icon reference to the icon (QIcon) """ for subWindow in self.subWindowList(): if subWindow.widget() == widget: subWindow.setWindowIcon(icon) return def _modificationStatusChanged(self, m, editor): """ Protected slot to handle the modificationStatusChanged signal. @param m flag indicating the modification status (boolean) @param editor editor window changed """ if m: self.__setSubWindowIcon(editor, UI.PixmapCache.getIcon("fileModified.png")) elif editor.hasSyntaxErrors(): self.__setSubWindowIcon(editor, UI.PixmapCache.getIcon("syntaxError.png")) else: self.__setSubWindowIcon(editor, UI.PixmapCache.getIcon("empty.png")) self._checkActions(editor) def _syntaxErrorToggled(self, editor): """ Protected slot to handle the syntaxerrorToggled signal. @param editor editor that sent the signal """ if editor.hasSyntaxErrors(): self.__setSubWindowIcon(editor, UI.PixmapCache.getIcon("syntaxError.png")) else: self.__setSubWindowIcon(editor, UI.PixmapCache.getIcon("empty.png")) ViewManager._syntaxErrorToggled(self, editor) def __subWindowActivated(self, subWindow): """ Private slot to handle the windowActivated signal. @param subWindow the activated subwindow (QMdiSubWindow) """ if subWindow is not None: editor = subWindow.widget() self._checkActions(editor) if editor is not None: fn = editor.getFileName() self.emit(SIGNAL('editorChanged'), unicode(fn)) def eventFilter(self, watched, event): """ Public method called to filter the event queue. @param watched the QObject being watched @param event the event that occurred @return flag indicating, whether the event was handled (boolean) """ if event.type() == QEvent.Close and \ not self.__removingView and \ isinstance(watched, QScintilla.Editor.Editor): watched.close() return True return QMdiArea.eventFilter(self, watched, event) def __restoreAllWindows(self): """ Private slot to restore all windows. """ for win in self.subWindowList(): win.showNormal() def __iconizeAllWindows(self): """ Private slot to iconize all windows. """ for win in self.subWindowList(): win.showMinimized() eric4-4.5.18/eric/Plugins/ViewManagerPlugins/MdiArea/PaxHeaders.8617/__init__.py0000644000175000001440000000013212261012650025307 xustar000000000000000030 mtime=1388582312.032077482 30 atime=1389081082.809724399 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/ViewManagerPlugins/MdiArea/__init__.py0000644000175000001440000000024612261012650025043 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2008 - 2014 Detlev Offenbach # """ Package containing the mdi area view manager plugin. """ eric4-4.5.18/eric/Plugins/ViewManagerPlugins/MdiArea/PaxHeaders.8617/preview.png0000644000175000001440000000007410760031775025405 xustar000000000000000030 atime=1389081082.809724399 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/ViewManagerPlugins/MdiArea/preview.png0000644000175000001440000010275010760031775025137 0ustar00detlevusers00000000000000PNG  IHDRśbKGD pHYs  tIME 1:5 IDATxyp\u'|z7,hB @%R-QfKvLH&II)ēّ[VDSEq'$}n b"W,{{{{ιIF*`yyAЃðgy[ƿۿE`0pWy=˲(% (LAGi;zҪc. EaFQCQVAoo__~'0 illD$% ^( 8a nbjZ"ABv)qn( k׮YVM\jafyvvb Bh$q\gϞmkk $p8% D": QILG|FinnF---6իR$I566fkkkɤN/^ljj**p?$I!8IPH-EQT*HDRdIatt>"d29T*h:v8b$ɥ%Ϝ9|>_(,dqFWWԔ(2L&^,ŢN+ r`0ZVAX}G_y啚ŒA E:B$= D©A#-K  3 k$EQbT0|/v`H349uTPn.@d65L*P(0 ܬP(RZ6 VU.0NM&jb :n||ɓJRTbd2yI RVM&$I޸qh4r pGd1 R|>_ssbYXXv8ҪY*=ZFX,&qNTz**ɄBb 0. U*U2F|^T499gϞP($*j~~t\.GD< :D"KRTtΝ۳g͛71 #" J!TWW;wj*rlbѣGaX,WӥRNRiZGGG MOO744Pv155P(6z Tud2jðH,U0 ӪP{BP.Ȯ2RcEiiu ͭ0ӟP,U XaZCP"@$666T* ~2AH`0h4Yi%`0q\KK B!&jjjN:566J(8~x__0T\.rq\{{T (JdP(D"ft6%E(Vbt\syyb,<˲pxvvVjֶo߾e:99933fۗL&,ae3??D:::xD"BeAR̩SDQ8駟vѨBz " _~9 4,b&&FPgragVCApx3V3̺W3BPݞ\ n'٦'!Ȭ%i; pN p@ Aȋa1;&5@ M?xkm~n]gW56כ,ٹW^EXL$R$-Py@QtP6 *C6D>aT׽P.8Ӓt1Sr 1J( HNpg]*ʅ>:[؇;+!2|g~EQ20$Np=;.dp[pv̆g!tuFugj8MxmyԗҡgGbdEP ؖzgx<͎f^6p8>W\f`mZ#XΎ"SZ}Hqම2elonQ49W_% E>$6yynN]6`O( ]nB1 lXc%6ݼ%"( b+|q3@_P6auc~D@۹p7J" +`hX! >;@ ~&2oF&z7oO:77@>A,FΌ'o 7-@*;bz;,Bt![ʆҡ`*(bt9ϔ2Rf?q}z)y;>o(O9*W! AM&hZnCtuu%ͭ,'1᷂rTNP AV3W۝|b1xs^YCD> B@a4[ʾxEoZ*98 Hq/w2s(R vifx`-/qhDU_=l((x%P 2[nv4o>f+2 "]P̔)ЅH6BMkpL-@9%|z^}SRSR6OO1T+RUB u>`NX$O,P(~x%:mPmr4|18x$YH& k@w}= O#E'q\k;̖zQhP:TKN\ 0C1_gXJtis[ЌJr_·Ϲ3Ӹm\e5 v-\u[LNNWz I@俵G5ru0̕r-U-s7B,$bdq!F|#5ƚӗ#bj!̇#L.iLAϠMk8yQ˲,sV1#8{ޅB."gkmtJݠgP-WGbJYiR`.1D.]-Azg Alt3,et0 X4zf{\&lx5H Z 2s%Ro D.-ŖKAbzly̟{ ^όAmqǍj4GRBMxld10˳C/+eJL \>&)O'JӢ(, DQr\~mW~ |cfC0+Ң!tha-D"Z:. PFGGP!0 9rLHY.Eh Y_4MK'l$VtPA(4b0 {b΄k 5\ʅHp&-ecXYеմq> BaR}ےX eU(8+; O}џ}4'w*խL_I 8>JnSTeWG|#(xGtJݺʨ-(bFlijs'@&x Y4ɊxXkGFFf;(@רX?W} ׿+ת~?ßW& k\ (,e 4ͱ,TPhzY| Ofuuua |J;*R! h8E /^f7nrjB|,A</  :;;gff61WS䨜NWDeeEAdٝ[+z@h4JӴJR-n *DPb@0L_T6 ɓ[Ym|uWyoYe/yLe29Dz;f^GS3<+*29J ;xW1EwQyw<^ϝ;ꫯ&MJAs§l PUU& R97[v$rM۠+)E[?|(r\Z]iD;@v) ECCrV}D#T n_lm"_x__7VDAۛ'K…H 'bf2"*l6i4Je*Da0o MjV= Smfu[0FAaZo4pݟz_DJX VW()AhheD`X\p庶))_P' B:bu+QP&]J`08::zILfySRU$48hٽqB] ( w]|ᑑn6HLOB.^8pwӹcg?;K8ŊK`^-a^ne#2 A4H7V]]]*;SQJ 69?7)*Zw&Dm`tq9 A0a9A$]ey!T"0;Ҙ9t~*1,7OiVz氾C͍U'\ZJe%aAE`Eo 8" Wr<#'  [4F5OqjF "/jþ&m߰_.W1,GZ%Ïf0io Oܽ8?)C0D`((c(( K7(,'`8ToeJY_Jhu|.vZQd}pq#7FT|l6~Pݙ˳Gǭ9CxA!aH "bӨ}}LyA"Uݯ}_8^#T,c("5@Qa8CO&ϲ<S-?ŧ{l4DYV@H&wɯ A9 A yiQ,#("0 nU׽RRhi(7j5GQD"40^<{UA(rWҠپ8?qt_j%@@xyK}O<~H`ssT48a!u}|dT;{Λ1jDkvɿ|G4^ԩr8"I`G]z.(s#RT*Oϴ=걆R7[Hw~Oe!Y#$rTPx#{H?\ȄUb%~5h\*lͥKAa}|ahu<:r«R.G6:u5?~a>#n'T)XRaB2VW~;zZu\ѹӟtމIt횙lm'³MKzll$W<9&3ݺ֡m7%t,'pL5bW)[dϝ;Tao Wo,55&ʼn'N,;{G.?rn&4tVMO tw2CYZPZu"-pk??vÓOzgǺH:.^Cۺӭk:ζ6a{ Ou;~ܸk\tUuwvۭ`X[[8/;` ssKv%_ ! IDATRd'jt_)'/T^Hjݢhh)K3 7XB0$X-FQLvi9u{Xs:n /'^rjVOIʓ!i"LN /)('@WIBSlRD5}L&= *E5?nPȑQm ѽFEy̥zRL.*uRnRpЇH`F+ :W5xyQ)j Jʤ S>mF6{U0b2>d͕Ě*ك:՛Ƒ75񩥼Id8\/?{mw+)GfggNtXx= Ab$H2% ^Et)3??LDX?8ǿܿᡮXUr*S箌>KBޖrrU0,2TL&Ag뜵> e|Rg__ǻj՚OG u3MzêbD< Z$䴧 !D!E,Y ȪabbnׁeߒŨC-,zvҡp i3zkK|&a }[1{SERd(`"pځ hy/\J:\\&P` Fd:wZbѨт>ኜ6BRdo`b$f l<`sސL:5AᅥVՙjBO]|lgF7?73`\q1hrX0TdJ 7<392+ ū̪Ԝٰ?T Z."j=2f 7诶4Dr\VrM$eJ'PD,2Û#Q1H/$WFsuEFVeFd7Sh<-h( C%[[w'1t!yLYs/8 g 2tk6(J|l65RYQ0 &|F CTL/J+kp *@F#vq30D3޶$ En?ۀ+JgC /k`k74 {;}B;y@ PhP1 "0XQ:}vWT\.f7b aZAwM5֎8p>+ T@`M>:uiL HoIQ ;D !>dl@l[4NZ5/|q J AJj<Dp[{A`hk#k79C`i7m]@XJCMXjq.2/FUaV*#K3Q FTI</ťPKS.M_E1UH-Ŗly!)fJtd)f{CL1ǥ_?{_??q^o3lyY={k^y7<<,p3 ϯ:#YHt `C[sqő#x\/;3z9@\\_O?bA`$[ y՜@Eet ʹi:xqAk)Y, YEPގ@]g4uXRg:AI9tමO}Zh10 2Q)GyESNyo~۲!x)TpXos&fgWfKϖJ`օ\.ꩧ6Y0vr|Mn7wU \0p;ߙX'NTX_ iph4vuuu8c@iwrY[[VLJu>s(˟q+I257ҋHWblz$|)Ul6IpőK/>}Zt*]jV}`3~wξ{?+fl+K%PV p7qK.ݻw;K,2Rv7vJxZ-e[n֥R.]L+eʕm8cMgݟor58`X  Z6Oj8vP.\v//sκ΁f{7ՒZin&4ƺ뻥L)C$1SFann ֙ B.6ٛVY.YnPߵ4E1YH 7)bpL.jI-P9*\a}d8Qej?Շl9UHuysqQ%|.kպ~T`yyYRaF7)x[ʶWlrRa2)fc$4W.og $Iӳ.7(wE N.wϩIu)bƨ6S`*Xe"PBb)OUa_ܗ,$-ˡC(.k*0. Uq,u|$ C0 hk\.2CIᲽ{G}C1л BqƗ5ٚn,^bJ:Hm :ά6gJi,jՆG>ZZZ67!Fٹllj>|aGWGlrrNsvڵAu GH۪ Ȣp<7pu"ﶺk 5 ,X]gimNs28+jRtQM"[JQhH!2w7;js ("]u][*t8nnջaJW06J&6LcM֚j,ǚԦx.Zժ!55m[v*ImHHK5ƢHRcRZZCy*/ݯITrESFۏ!P 'zbtLifԪ꯶}u.<'eEYTr\~ J47bٵ ]g+j:KT Ul ۴6֊#P?]{7W۝Rp#-p;I*Sx<ZZZ6U@Q4rZbn]<{)Yxx8 Y)ӉT:ϒɍn6i7 FI:Wzg|u#DQQ9+616T( vgCA]B)E#a߇:EB؎s_V` BwWlp1ct:m20Y=BUplQi0 CQ{8N8Qx,+p]˧Of2[~7ި &=hC6|0~҂`ӧgy'13scoMMbvvvrr2N,ZL˱+fܟ}t:!jooD"m8% a_;:SNn6TCjV|UPƚgD?O6?`Osn0 ob^ RY_____YWɾ}ە\}{ð^xygߖ}@]dBe@*I^w6 h@#m 3@YN-0ߞ?~s}Vm΢uG?bY?2̃& n;TX7Hdh(l.KR0eRiϞ=\nsS>.P3ͤBYSlIxKe@ '*joo=xx |>AKlf"RlnX*6^͊U)e) vBITͤ`PT<ϿE-//oiJZʞ=l&C0<.X;3>cX6^r:Zi6`P($ HPnZr0 ˿˾m0xz0:TTɓ~1/! S#GTL  6cC`7hwvfxWᆲgRh]5|%D;E6կ~[om}O/-oԶ)rl{{mpr.H|R2)  ab<HosɭJ|o8D|\bo$K O?sl1L&~_x<%ZzN0:!fzFfl6 ]luZdݻw+ p_mGF׮&&PlG>xh,FlG W*!X|ҹsE˞=AF3{47lS;C?1ϲcCC+p [%}%9>13dKgϒf4n4}W`^X\*O2b_νR]xZK`F/_zˮnܸյ]Eۭr833^9zxRaɇBGUNKFɹ9Q\p)lvy.g26Ywvjr6 _J$O®Hޮwq1l㏡UƧ 7\cL>y|f|^i{{o8p@VdR-PngKEQd {R9`g@?J&s@dd{RͱcKRh45<UNywvJ+d!8ngo*hZ`/꿶Nц]SSccccZnw)$4Mu(0IRPF#CC:|‚FcSS|jJeUJDS] AP L cSL͇BZ-|!Erhd GwիǏ[A xȑ‚u߾|($jEg)gY  Y zc55l6OjɴZeUlPNESX,RYdP 0罗/;}F$h:E׾Gyr^RIѝ988438z&i4իn^?8ַZov}/uT*j6P*载ؘeݟbT>|_ʭɈxoN0QOboEQ(&ɓ6V_GǦ,OQB<'OnY]x1UU_l_{lk) GdVԙd~ .} |-lxuc^7”J0B`Y 0% *x@ӻq~Џ^<{vȿkVMl( <oϟz/h܎Rt_%%AIJsF0|uB]VPzgU͓0N cccr<#sa a!+ܻ4XY髪$ ஡ROtYU)*x@lObqQyXƨEwj k>9[kmʻRK)(^d{>+) 6)zYx⫯:ie!?z6KQ_yͧU.EQD" [7 .+ئ>tǃL&i>qD$٨4XS'?׃??ޛSp/^F# $rH8p_RmG)THǥ(g6QN}]AA8tЖzôfbQ.\8wS5- IDATN ??e2K.|p8|9&ocj5q: Cccԏ'B,z"e,+ݻw^iL&S]] xFFFlO7bEH[\L+x2Yq#X_<7ۭ=vKEl`Sft:ljjfdPLhR4ZL$JJ%XXX06mmm5 $I LMI@ǎسz홿XQ&$VZַ,`pݹ\O=‚\.?㦧O8g-ˣ_{\0 AO?=11RMlv6AQ\GfS$667Vh g{gY2 f 6K¼zC`WW׺*Jr:Edh2Iwn̛$LRz@TnS$h{{;$uf v^oFR~*QizdtҴJM&j|3OѱcGݒV;LLa?CkW<ثwI+촡pSt DQE7iNO>rl˲BP(?Es(d2(& .4-)Zr9z;jClM .6 $IX,h"G"/+Wtww{`ޛGq]y¯} ྉ(R%Y^hVbLډt'_&=IKzҝ3̤ݎ8Ӊݱ#o%YDR%q$ vb_ (f(~GGjy{w_l9g**##b%"HzV^Pxۿlv\~ĉ'xbpp'izxx$ݻws\tmx^ZZ+gvՂD\Z tÇG  o~ 7泸N2aNwGj/^W*d~Z-V?WѬ K&㭮Fy!?88pl6jMMMHd`` (lݺunnf``pvv6Lqb1; cdWR2I٨Pr(rp8WR)q]Ww: k L"...f01d2x<  CFINhǎvc/oݺUTz\>==hVVV[BW^ye۶mo***D"pQQ aZ,+W0״XOJJee [4! Ҽog0 ?#LFʻ֭}\[AI`YJ-1apð2?l .e5X,O?t__܋/7پY^j0;;;88 nwKK LLoV<+5bt  U#x$W~$fKKK.URg,{)*))(v?ccc fy5J]6]v\t|> —f.TTE7,Jeee(*:yⲸ$\' JxX5hd,~Z"?Ls-[= Ayyy<GWVV2MOQih*W AAa4&Lwd `00i[Bl5 Oj8K%R]iߎS١b"A|a{(s*?>䓓'Ocǎ}ᇙ+K/)&IIRg{zzLJ~8:: ((fY^^~뭷^zx<ΰ$I4ɜOkd 0]iۢQ$)ddNS }zu1<22¸[qCڗ39"V[ f-[h^\\|$kA8[6TsXf1ۢ'XP%NWvwÇK$0007X裹:ǚsOaщ Wcg?AL&M&Ǐ~饗<Ouu-[;(s.\:th˖-Xnz<V;22<77WRRCõRSt쫯}1+w1R}YJe1wLtxB@  [=GWόq'OH(O\-yChzzx0w wy­CY,}^0|K]83y鏌D ư=x0 ۔2 ȸ\i&#SNKKY] HR\;G^Tw#E8B ާ;o 1܂Pޑ\x~-?Ut],2 3Z@ l6[[[Li&եD2qkdٓ4MONNfŝ_ D"QEE\p_Lg;|0z=AVuvvvz&):;;n Z aZ,+aVVVd9eqR >cժj?.VWWT\S^/ro= 0l֭}]UVn9j 57,\6.ܔAfP(d)a2 h>wnaΦ I188v_dc&/D"SSS4MQwwdds:H$uZ>Hv5H$HD(q2O{iO,C0I$E00t733399կ~u`` s$ _BQA{mμqB'rq/qzkg?{`N8p<nbEQ/ ;$11AJ8pN7YiljWR}v2$ȶlz,5m[j(ן8qn&Hd2y2 RtEEEAv6E_M3c/E|ݳiH3sQ蟚rwt,tB^LtW}F#EE2xY Jcxxx|||ffq\.l\0d333Jf~rq\*ŋ$Id.Jc4srr,]M)joolmmu\+++۷oߴ$z$HlMK|qꜢݻwX,FӴL'I@"0(ՕU$0DBX*jhsN9HLcG^&Y+e4<jaS|(UY`60|'l2E_'|rСD"K/}ٸd7)|j0;;{ȑ˗/:ţ6{0t:!|Gޭ%%%MMMp3톾ËS@,p;Òl6;i_Ϋ`]]rTbٳg[):x {駟|,o)]x<. ?{hp<&f*MU7r 2-/////g>!`*vjݦhpPΆIt]?+www{_,:;-pԺP?޲3gL'k&ɓ'?LNNްm||ȑ#^wSSSLR]%!2<<\__?77ٓJ@ţӎR])Ź644bxϞ=E^ow&t_4M?LM[|ssȈSQ m^/fvWVV EIIInnn^6^^^>22t:>X, yK.MMMx@ XW^|:u`0?SY|999LRϜo[OݽFqCX~$IDl ᵵT`=dnFܜa2x Z 0 hTVT%@PWWvq*,,Z$Iڵ }gN~gEqw޽,k~~k޽7 hymBP̻6xMMM4MY6.WTyh# {&'] H0^kMhhhDeǓ]n7 eeeUUUD"//O$1䍝~?sVkKK )))AQ瞛p?GHZwRUUŜN7-9@ׅ *cz;H%gy1 kdY<1Ӝˀ/ҥeX 7(HEQ@&޽gusIxiw u@GF: R7Z~… l6)jD17;把 tyy97`; +WFD03 h6gD"}}}0 oYܣH "7LAd8+_Dd_?p\-i@İ=+h4.rwE R-[|>֭[;;;SΞ=޾((z vʮR?RL&Hy Mt{Lzqy>Y#ԩS&I.WVVvuu(![ZZ bz}D蟨̂u:drПrLw+_JZ''keqNrj99 @(M?N|g8&,vͳjM)BF֝>bLj*4Wv\SSSX,|`0VڢMNNBD"wYֵeFm8e`!g@Y,9$WWWL C-EʦOkӀ1fYfIܴ@OO^'''ߎaxNGq'{{Wrr'O0t%N>h4gΜV(\.[3g1WITΝ6 ~bFpQQQgg'EQezzh4ѣ6ĄeBcu5tOzFlqkb?9%rNx"MӯjqqZ-IO (@ds8qr)Lf[[[kkk$ksABx[9ٓfrI\YY BR􆾁R+-Ke?/}ȑ YF CAL&Phnb^/7aL&N766 ;;; :{nNWVVV__dOB!i6דx,OF"Olo|qNf{䗔z^u VEQ3??O84]^^P(pt^`$+w1RT\\\QQ!JwܙMС~ΦsQfd !$\T*TT(KK.,VUd2ZJ4MD۷s\>?;;+W\OOO0|W6j0 ߿y<]v4}yFR/_<333>>F\P(\k,ggΘBLƥ(oFH*Rc>H$*++KJJpEEEx?N$cyyyrrGVwww+ Tz !Yl>)f8szm7m`tYT$s7w36dFOP0 SEyyy@VgX|C|5OL$b'_H97+ Q9E$C$s߀A&];oŝo0MGl68pرcl6瞻ْ,Lp8cǎa۷`03)|˪AwE l>/dn=z`jj 7aM&sssu:I:Y([]/-pX& :Ή]v᧞z*C.+U='V"x{>#2g f}-44*ڟ|CD"Il`0899>8pi(m`7>"TjG>)q<ׯL faw[,H@!H^#zM}To=~b:˭?9b,Cϯ~iii%歙6m×H;35$x##[l|aa!ᱱ`̥\ ܾ}rj#sγgAXrrr29j wW~]O8N>p8'iAittM&Saaa"`X&&&v[n8w\UU@~~ngǃ% n|M^pZ[[z=3e8 Z IDATx<.ַ_Ji-[twwSSS/`y9xLnH65z@ɇNi|B!["tvZ~VZx뭷4NpǛ A0b555SSS gΜ,//  A\~p<_xM0S3i@V\xٳi{Gr\ӥټ>Z46w_>I^Ԕ{N +++CQ d2ܬP(J%EQ^h4IDrRtNsiiiF8aXlǎ}ƖH$e2STMMMRpm~h$h$tFjk5mm󅅲q' C{--zj"`4ݽ{JSSӞsiL'TTTTVV677SUWW7??H$L&Syy9kϞ=ڿ`:[#K)IpŽ;| k̾fa^3N2Ifi5]]]`0''My 0lQa R%SOUre~d-\BVN())333 Eѕ&SVK+Wzټk.FKKKVkEEZχaxdddϞ=>pjjbjjJtttd2@аP(x<Ê! CUU*==WrE~XR3;,5-,, ޽[H$o H$|ɾ}Bhlhh`V<#ɘa|H$EE%ɔuKKK0F `3Tu畜t.XT֣nj7crsEvӿ+͍b|!WH$d3H&"EYw0frp)IuS:((P܈f}ՀfogEQ}}}xٳӷdMMpgvv6HB!ɔ䆀i<wx<DR];;w^p!ifqD) t8:tر#;vw/v{g9x8x |yRl:H$BdnnԖ-[o.0e/d!M %%^[X(>{vnpĮ+BqX,f6O=D D8FI@( Id^74oG8$D_3 BcbdbO|+bzng .Bp,{ 2'{zu:ŋK0 9on8stuLOtwr .@`l DEK@x Oh4sssl6{xxp9>L&CQtttLLLH$nF>=55ֶd4=8EQbxzzW^˛je6= <odd0Vlll\^^FQ4934LJ)7QtabtH$jcQ`0 i6 SS /Pؘ4di%H*G6LOFF׿Ni >|1B@i)hmg?eehz'M&Ӷmx R0ma& ?<&ĉJG&=Ǐx?59popJ%Ųl(X,Ǥ񍌌,--1YCuuu_Gdff&L>CJraaf3K06o`UUU1[nMMMg)E,[^^^YY!t)~n3t gi)P(GL[y<ZյeL4@"R)H@^R)yy`vp .p,,IӁNfTWPD"Q[[ێ;x<vl۶m||O>iz|||uuv Jǎ[L˗u:]^^ޞ={.^HDccc]]˗l6 ၁\T* 555\.Wד$ɬ6-6!*l6G}3$ A0\2dX$IňIL&L4n_xq  .l67773Fw nL $:@kk=5fSRlt56\j2\o-7Aq1k.Чk4FKZkF/K7<[l]{̇, |f1 zT*&ct)&kX{ə3SXf))L $yܹ7xL{$gϚN`رJY%nb5we&T*cc躎?GFFR7h4 h;ʚNn.l``tnݺi͖a[^ +Wlzߨ9p:#\ Pu)ZDBSO=~tEY@lhR bؾ}L&S,۶m[] ᇋf?L֡PB.0j'IR*FQxpld,nY67H fyݱXlee%[цR9 C,"j~ss@%d2mz)>[wmM(,RE,T*@;a裏NQdqkrNJ0 ]EQ/^mmonnp\Vټg}}&"3#, 4ʲ2sGGɁ< lam'=9r=fTmm򒒅\-,>kijkWz{ɊCCdEEx8?e%%r_C!x+$9B.g۶G%%g t͕ɸ2{jᇱ ?.UKut^^(//_YYYYYIʬ>{饞_?+"f_7d2x<^(UV]"h'ڮ\)~f(\+sH"tFQyqqnׇr8T"AS^G$??hrn2tD,Fb<ˑH55Rϗ.`|>ym:\'q\VR5XNɣkb-,Vf6ż޹Sr$~~&8ƒ8.+,$q|0`Ϟ*\I G"0왝[,΢V5`z<O=ŕJx"I}K D44TSSsG~|NSG<W&C!RWW PȹF䞜ăAak̙ۭkl\ٶm%FmiP(/-\('D".e^\(7wuzZ^ZxB |JUUtbnss"h92YjBܖۭwG׽WMMPG^"+.6wa%ABAbRB@ m}ɓBV^Z 99kxzO};DYQ('iD ɜ[mFԺ~\UUz[[[77k|܇ 0z<~nMQ4 goHot0 RL'\۵AZ?ޔ+d jbn'ՀgȲD0$qȥT^McccEϏfdYd(`TH$t:$  f0i+M&V-*#GXـiYe)nG'?\~+'\ٳ…ŶyX~qqرF$cgZ3쯑U,2%SG*p8,҅#Mr9k_27Zh3LRQ-TVEm-//O,bTlgYܲQt=oi?3g8J 6@"( RHC!gD`O&5ws9CkI MAcccCC# i E׏^SD?_lY7)vB!6=g8ojijd&|#H$֗&ɕjC1J&ⰌQ$M) 0dMdBQ] M7̀j>CpC{N[K$XNR^#ɇuP(#+1<2VӝٙUWcy\It]$Ivww={V"n#kؔ+o]x1pqUeef .-a|{bp|f3M33!&χJ&_yEYYxKK\5>ocBoF\.QNԔD'']bo&[- kص }&[,vML`BbD8kBvIE1=1a XpAVPc a+ḱX-,8C0̕ɘ-ÓiUee,-a9J& ^)ppr$,.@D+y;wƼހł X1 yo(+[_iL&8h9@4֖ ;vpjTG샃4MW*10GEs|51dWۭ(*-*l';udiɕ>H ɀ1J$/\`8y;vx˿eL( ٓ'!z!A&y-s$3@ 띣>xQ$E|o%Qn.&%&8nXx1w۶] Qg2M~O.gxFAB_pe䥥Ӊht56ù4E|Vi/r8*D`XawFnټ:=]3cs Q@`:}rd"ankia2E?c8R)梇?{F=gKJX\X~HD=i N)0E& >EcW_uՖ-w!IϘIH$~_1:277`eUq3;Kt0,5C6 1XZ" D瞚rrdRQ0Rr8aJ&c^$_|4E(M;:"n7(*zq^@1!8/1>-%"x2Yh0Yaans3H׬PfSHJ%OA|}lcx BKK׺(Z ΝhQf8=hfDg6˅XazZ?_p~\UYhpK/a@ Z}w%Qly;v>\Sx0AҥKEn߯l@Q s ;y &y-M/.BV+XX/_;u'LO<đ#}~cxG|;ӓ_C'Nsro΅sa=v "HL.?ٓ'8O&HGRi"69#1K"VVV4uu WX)*oTc(;s™l'#l6Aܲ!Irw`p qޕ>fDemccjYEt oS X,"qeޯMMӗ.]b?KJJֱ'[r8MQ| pBVh) aYa!Mƽ{z`e#QT߾12gx\A4:s[[mQGS[mmpGo>zp})<PS8`FS(žy^Ֆ-ΒGqOO97?(-aMMSWkh{ʼkK̦vEIDATgvVX䥥k;_!8(+sozM}=W&C0 p8^3rr8ݻL hZ[_O4[$ 1'w6ȡC|qL*U/zEYwnO"LbMD4jܷg1%!GSS}}}wI(*.)F%%%vBZ[[V\}H$].Waa!AZ`0lja>`fSN8˕aW?O.၀Bj4NFXDŽ8TUUQ[F=Aa!=5eص+pe2Eyyt2:3Sx0$\M]TnsspeEVPF{rRV\,5e! eEE@d՚䛟/ؿ1<\$b1uU_dl37š's ",V֊rrDLm1s_m}}tuU`P^TB!G$H$rLv j͖-$FS(z=&Bɢ-[xJ%UՊҘǣ)#KF`)JVWDg=&8/Oшrs555>ʪ{Ad{++H&X4`/|ҥ{M=>Ɉ)WU$jQD4 XH6fuÈM ,g z֕ct1i~}e]Nr7whjT*!TȽaAPh )Fl!XJ ';l2($Ko8 P8^WtOHXׯoЈ FAer {a8q\$~cA033w90TL*pcY\ᡁxz;v#%yxxxν1z/_Gk P^$IRT7  jt4M " 'u~6J_Jr2i_߽"82;>:9:2q`$I&,j0=o,t:dhb|L$!s#= ԩ#ßJr2L/ut=ȁTwg /рq9$ɻ_ H$R\.AHRHD$>?J$?%2L&?&j@$X~dZ \,6$xEQBL$jQǯD"A7?Q\f]KI%Kfʖ5ǯZ:lW{X٭Kr#= hpP2dbDAk\eRe+IuŲ^%bM?*lNOIENDB`eric4-4.5.18/eric/Plugins/PaxHeaders.8617/PluginWizardPyRegExp.py0000644000175000001440000000013112261012650022541 xustar000000000000000029 mtime=1388582312.03507752 30 atime=1389081082.810724399 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/PluginWizardPyRegExp.py0000644000175000001440000000773412261012650022307 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing the Python re wizard plugin. """ from PyQt4.QtCore import QObject, SIGNAL, QString from PyQt4.QtGui import QDialog from KdeQt.KQApplication import e4App from KdeQt import KQMessageBox from E4Gui.E4Action import E4Action from WizardPlugins.PyRegExpWizard.PyRegExpWizardDialog import \ PyRegExpWizardDialog # Start-Of-Header name = "Python re Wizard Plugin" author = "Detlev Offenbach " autoactivate = True deactivateable = True version = "4.4.0" className = "PyRegExpWizard" packageName = "__core__" shortDescription = "Show the Python re wizard." longDescription = """This plugin shows the Python re wizard.""" # End-Of-Header error = QString("") class PyRegExpWizard(QObject): """ Class implementing the Python re wizard plugin. """ def __init__(self, ui): """ Constructor @param ui reference to the user interface object (UI.UserInterface) """ QObject.__init__(self, ui) self.__ui = ui def activate(self): """ Public method to activate this plugin. @return tuple of None and activation status (boolean) """ self.__initAction() self.__initMenu() return None, True def deactivate(self): """ Public method to deactivate this plugin. """ menu = self.__ui.getMenu("wizards") if menu: menu.removeAction(self.action) self.__ui.removeE4Actions([self.action], 'wizards') def __initAction(self): """ Private method to initialize the action. """ self.action = E4Action(self.trUtf8('Python re Wizard'), self.trUtf8('&Python re Wizard...'), 0, 0, self, 'wizards_python_re') self.action.setStatusTip(self.trUtf8('Python re Wizard')) self.action.setWhatsThis(self.trUtf8( """Python re Wizard""" """

    This wizard opens a dialog for entering all the parameters""" """ needed to create a Python re string. The generated code is inserted""" """ at the current cursor position.

    """ )) self.connect(self.action, SIGNAL('triggered()'), self.__handle) self.__ui.addE4Actions([self.action], 'wizards') def __initMenu(self): """ Private method to add the actions to the right menu. """ menu = self.__ui.getMenu("wizards") if menu: menu.addAction(self.action) def __callForm(self, editor): """ Private method to display a dialog and get the code. @param editor reference to the current editor @return the generated code (string) """ dlg = PyRegExpWizardDialog(None, True) if dlg.exec_() == QDialog.Accepted: line, index = editor.getCursorPosition() indLevel = editor.indentation(line)/editor.indentationWidth() if editor.indentationsUseTabs(): indString = '\t' else: indString = editor.indentationWidth() * ' ' return (dlg.getCode(indLevel, indString), 1) else: return (None, False) def __handle(self): """ Private method to handle the wizards action """ editor = e4App().getObject("ViewManager").activeWindow() if editor == None: KQMessageBox.critical(None, self.trUtf8('No current editor'), self.trUtf8('Please open or create a file first.')) else: code, ok = self.__callForm(editor) if ok: line, index = editor.getCursorPosition() # It should be done on this way to allow undo editor.beginUndoAction() editor.insertAt(code, line, index) editor.endUndoAction() eric4-4.5.18/eric/Plugins/PaxHeaders.8617/PluginEricapi.py0000644000175000001440000000013212261012650021232 xustar000000000000000030 mtime=1388582312.038077558 30 atime=1389081082.810724399 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/PluginEricapi.py0000644000175000001440000001347012261012650020771 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing the Ericapi plugin. """ import os import sys import copy from PyQt4.QtCore import QObject, SIGNAL, QString from PyQt4.QtGui import QDialog, QApplication from KdeQt.KQApplication import e4App from E4Gui.E4Action import E4Action from DocumentationPlugins.Ericapi.EricapiConfigDialog import EricapiConfigDialog from DocumentationPlugins.Ericapi.EricapiExecDialog import EricapiExecDialog import Utilities from eric4config import getConfig # Start-Of-Header name = "Ericapi Plugin" author = "Detlev Offenbach " autoactivate = True deactivateable = True version = "4.4.0" className = "EricapiPlugin" packageName = "__core__" shortDescription = "Show the Ericapi dialogs." longDescription = """This plugin implements the Ericapi dialogs.""" \ """ Ericapi is used to generate a QScintilla API file for Python and Ruby projects.""" # End-Of-Header error = QString("") def exeDisplayData(): """ Public method to support the display of some executable info. @return dictionary containing the data to query the presence of the executable """ exe = 'eric4_api' if Utilities.isWindowsPlatform(): exe = os.path.join(getConfig("bindir"), exe +'.bat') data = { "programEntry" : True, "header" : QApplication.translate("EricapiPlugin", "Eric4 API File Generator"), "exe" : exe, "versionCommand" : '--version', "versionStartsWith" : 'eric4_', "versionPosition" : -2, "version" : "", "versionCleanup" : None, } return data class EricapiPlugin(QObject): """ Class implementing the Ericapi plugin. """ def __init__(self, ui): """ Constructor @param ui reference to the user interface object (UI.UserInterface) """ QObject.__init__(self, ui) self.__ui = ui self.__initialize() def __initialize(self): """ Private slot to (re)initialize the plugin. """ self.__projectAct = None def activate(self): """ Public method to activate this plugin. @return tuple of None and activation status (boolean) """ menu = e4App().getObject("Project").getMenu("Apidoc") if menu: self.__projectAct = E4Action(self.trUtf8('Generate API file (eric4_api)'), self.trUtf8('Generate &API file (eric4_api)'), 0, 0, self, 'doc_eric4_api') self.__projectAct.setStatusTip(\ self.trUtf8('Generate an API file using eric4_api')) self.__projectAct.setWhatsThis(self.trUtf8( """Generate API file""" """

    Generate an API file using eric4_api.

    """ )) self.connect(self.__projectAct, SIGNAL('triggered()'), self.__doEricapi) e4App().getObject("Project").addE4Actions([self.__projectAct]) menu.addAction(self.__projectAct) self.connect(e4App().getObject("Project"), SIGNAL("showMenu"), self.__projectShowMenu) return None, True def deactivate(self): """ Public method to deactivate this plugin. """ self.disconnect(e4App().getObject("Project"), SIGNAL("showMenu"), self.__projectShowMenu) menu = e4App().getObject("Project").getMenu("Apidoc") if menu: menu.removeAction(self.__projectAct) e4App().getObject("Project").removeE4Actions([self.__projectAct]) self.__initialize() def __projectShowMenu(self, menuName, menu): """ Private slot called, when the the project menu or a submenu is about to be shown. @param menuName name of the menu to be shown (string) @param menu reference to the menu (QMenu) """ if menuName == "Apidoc": if self.__projectAct is not None: self.__projectAct.setEnabled(\ e4App().getObject("Project").getProjectLanguage() in \ ["Python", "Python3", "Ruby"]) def __doEricapi(self): """ Private slot to perform the eric4_api api generation. """ project = e4App().getObject("Project") parms = project.getData('DOCUMENTATIONPARMS', "ERIC4API") dlg = EricapiConfigDialog(project, parms) if dlg.exec_() == QDialog.Accepted: args, parms = dlg.generateParameters() project.setData('DOCUMENTATIONPARMS', "ERIC4API", parms) # now do the call dia = EricapiExecDialog("Ericapi") res = dia.start(args, project.ppath) if res: dia.exec_() outputFileName = parms['outputFile'] # add output files to the project data, if they aren't in already for progLanguage in parms['languages']: if "%L" in outputFileName: outfile = outputFileName.replace("%L", progLanguage) else: if len(parms['languages']) == 1: outfile = outputFileName else: root, ext = os.path.splitext(outputFileName) outfile = "%s-%s%s" % (root, progLanguage.lower(), ext) outfile = project.getRelativePath(outfile) if outfile not in project.pdata['OTHERS']: project.pdata['OTHERS'].append(outfile) project.setDirty(True) project.othersAdded(outfile) eric4-4.5.18/eric/Plugins/PaxHeaders.8617/PluginVcsPySvn.py0000644000175000001440000000013112261012650021410 xustar000000000000000029 mtime=1388582312.05007771 30 atime=1389081082.810724399 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/PluginVcsPySvn.py0000644000175000001440000001511712261012650021150 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing the PySvn version control plugin. """ import os import sys from PyQt4.QtCore import QString, QVariant from PyQt4.QtGui import QApplication from KdeQt.KQApplication import e4App import Preferences from Preferences.Shortcuts import readShortcuts from VcsPlugins.vcsPySvn.SvnUtilities import getConfigPath, getServersPath # Start-Of-Header name = "PySvn Plugin" author = "Detlev Offenbach " autoactivate = False deactivateable = True version = "4.4.0" pluginType = "version_control" pluginTypename = "PySvn" className = "VcsPySvnPlugin" packageName = "__core__" shortDescription = "Implements the PySvn version control interface." longDescription = """This plugin provides the PySvn version control interface.""" # End-Of-Header error = QString("") def exeDisplayData(): """ Public method to support the display of some executable info. @return dictionary containing the data to be shown """ try: import pysvn try: text = os.path.dirname(pysvn.__file__) except AttributeError: text = "PySvn" version = ".".join([str(v) for v in pysvn.version]) except ImportError: text = "PySvn" version = "" data = { "programEntry" : False, "header" : QApplication.translate("VcsPySvnPlugin", "Version Control - Subversion (pysvn)"), "text" : text, "version" : version, } return data def getVcsSystemIndicator(): """ Public function to get the indicators for this version control system. @return dictionary with indicator as key and a tuple with the vcs name (string) and vcs display string (QString) """ global pluginTypename data = {} data[".svn"] = (pluginTypename, displayString()) data["_svn"] = (pluginTypename, displayString()) return data def displayString(): """ Public function to get the display string. @return display string (QString) """ try: import pysvn return QApplication.translate('VcsPySvnPlugin', 'Subversion (pysvn)') except ImportError: return QString() subversionCfgPluginObject = None def createConfigurationPage(configDlg): """ Module function to create the configuration page. @return reference to the configuration page """ global subversionCfgPluginObject from VcsPlugins.vcsPySvn.ConfigurationPage.SubversionPage import SubversionPage if subversionCfgPluginObject is None: subversionCfgPluginObject = VcsPySvnPlugin(None) page = SubversionPage(subversionCfgPluginObject) return page def getConfigData(): """ Module function returning data as required by the configuration dialog. @return dictionary with key "zzz_subversionPage" containing the relevant data """ return { "zzz_subversionPage" : \ [QApplication.translate("VcsPySvnPlugin", "Subversion"), os.path.join("VcsPlugins", "vcsPySvn", "icons", "preferences-subversion.png"), createConfigurationPage, "vcsPage", None], } def prepareUninstall(): """ Module function to prepare for an uninstallation. """ if not e4App().getObject("PluginManager").isPluginLoaded("PluginVcsSubversion"): Preferences.Prefs.settings.remove("Subversion") class VcsPySvnPlugin(object): """ Class implementing the PySvn version control plugin. """ def __init__(self, ui): """ Constructor @param ui reference to the user interface object (UI.UserInterface) """ self.__ui = ui self.__subversionDefaults = { "StopLogOnCopy" : 1, "LogLimit" : 100, "CommitMessages" : 20, } from VcsPlugins.vcsPySvn.ProjectHelper import SvnProjectHelper self.__projectHelperObject = SvnProjectHelper(None, None) try: e4App().registerPluginObject(pluginTypename, self.__projectHelperObject, pluginType) except KeyError: pass # ignore duplicate registration readShortcuts(pluginName = pluginTypename) def getProjectHelper(self): """ Public method to get a reference to the project helper object. @return reference to the project helper object """ return self.__projectHelperObject def activate(self): """ Public method to activate this plugin. @return tuple of reference to instantiated viewmanager and activation status (boolean) """ from VcsPlugins.vcsPySvn.subversion import Subversion self.__object = Subversion(self, self.__ui) return self.__object, True def deactivate(self): """ Public method to deactivate this plugin. """ self.__object = None def getPreferences(self, key): """ Public method to retrieve the various refactoring settings. @param key the key of the value to get @param prefClass preferences class used as the storage area @return the requested refactoring setting """ if key in ["Commits"]: return Preferences.Prefs.settings.value("Subversion/" + key).toStringList() else: return Preferences.Prefs.settings.value("Subversion/" + key, QVariant(self.__subversionDefaults[key])).toInt()[0] def setPreferences(self, key, value): """ Public method to store the various refactoring settings. @param key the key of the setting to be set @param value the value to be set @param prefClass preferences class used as the storage area """ Preferences.Prefs.settings.setValue("Subversion/" + key, QVariant(value)) def getServersPath(self): """ Public method to get the filename of the servers file. @return filename of the servers file (string) """ return getServersPath() def getConfigPath(self): """ Public method to get the filename of the config file. @return filename of the config file (string) """ return getConfigPath() def prepareUninstall(self): """ Public method to prepare for an uninstallation. """ e4App().unregisterPluginObject(pluginTypename) eric4-4.5.18/eric/Plugins/PaxHeaders.8617/PluginVmWorkspace.py0000644000175000001440000000013212261012650022117 xustar000000000000000030 mtime=1388582312.053077748 30 atime=1389081082.810724399 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/PluginVmWorkspace.py0000644000175000001440000000347412261012650021661 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing the Tabview view manager plugin. """ import os from PyQt4.QtCore import QT_TRANSLATE_NOOP, QString from PyQt4.QtGui import QPixmap # Start-Of-Header name = "Workspace Plugin" author = "Detlev Offenbach " autoactivate = False deactivateable = False version = "4.4.0" pluginType = "viewmanager" pluginTypename = "workspace" displayString = QT_TRANSLATE_NOOP('VmWorkspacePlugin', 'Workspace') className = "VmWorkspacePlugin" packageName = "__core__" shortDescription = "Implements the Workspace view manager." longDescription = """This plugin provides the workspace view manager.""" # End-Of-Header error = QString("") def previewPix(): """ Module function to return a preview pixmap. @return preview pixmap (QPixmap) """ fname = os.path.join(os.path.dirname(__file__), "ViewManagerPlugins", "Workspace", "preview.png") return QPixmap(fname) class VmWorkspacePlugin(object): """ Class implementing the Workspace view manager plugin. """ def __init__(self, ui): """ Constructor @param ui reference to the user interface object (UI.UserInterface) """ self.__ui = ui def activate(self): """ Public method to activate this plugin. @return tuple of reference to instantiated viewmanager and activation status (boolean) """ from ViewManagerPlugins.Workspace.Workspace import Workspace self.__object = Workspace(self.__ui) return self.__object, True def deactivate(self): """ Public method to deactivate this plugin. """ # do nothing for the moment pass eric4-4.5.18/eric/Plugins/PaxHeaders.8617/VcsPlugins0000644000175000001440000000013112261012660020145 xustar000000000000000030 mtime=1388582320.481183942 29 atime=1389081086.01372434 30 ctime=1389081086.315724332 eric4-4.5.18/eric/Plugins/VcsPlugins/0000755000175000001440000000000012261012660017755 5ustar00detlevusers00000000000000eric4-4.5.18/eric/Plugins/VcsPlugins/PaxHeaders.8617/vcsSubversion0000644000175000001440000000013212262730776023041 xustar000000000000000030 mtime=1389081086.300724332 30 atime=1389081086.305724332 30 ctime=1389081086.315724332 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/0000755000175000001440000000000012262730776022650 5ustar00detlevusers00000000000000eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/SvnTagBranchListDialog.py0000644000175000001440000000013212261012650027743 xustar000000000000000030 mtime=1388582312.056077786 30 atime=1389081082.810724399 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/SvnTagBranchListDialog.py0000644000175000001440000002632012261012650027500 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Module implementing a dialog to show a list of tags or branches. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQMessageBox, KQInputDialog from Ui_SvnTagBranchListDialog import Ui_SvnTagBranchListDialog class SvnTagBranchListDialog(QDialog, Ui_SvnTagBranchListDialog): """ Class implementing a dialog to show a list of tags or branches. """ def __init__(self, vcs, parent = None): """ Constructor @param vcs reference to the vcs object @param parent parent widget (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.buttonBox.button(QDialogButtonBox.Close).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Cancel).setDefault(True) self.process = QProcess() self.vcs = vcs self.tagsList = None self.allTagsList = None self.tagList.headerItem().setText(self.tagList.columnCount(), "") self.tagList.header().setSortIndicator(3, Qt.AscendingOrder) self.connect(self.process, SIGNAL('finished(int, QProcess::ExitStatus)'), self.__procFinished) self.connect(self.process, SIGNAL('readyReadStandardOutput()'), self.__readStdout) self.connect(self.process, SIGNAL('readyReadStandardError()'), self.__readStderr) self.rx_list = \ QRegExp(r"""\w*\s*(\d+)\s+(\w+)\s+\d*\s*((?:\w+\s+\d+|[0-9.]+\s+\w+)\s+[0-9:]+)\s+(.+)/\s*""") def closeEvent(self, e): """ Private slot implementing a close event handler. @param e close event (QCloseEvent) """ if self.process is not None and \ self.process.state() != QProcess.NotRunning: self.process.terminate() QTimer.singleShot(2000, self.process, SLOT('kill()')) self.process.waitForFinished(3000) e.accept() def start(self, path, tags, tagsList, allTagsList): """ Public slot to start the svn status command. @param path name of directory to be listed (string) @param tags flag indicating a list of tags is requested (False = branches, True = tags) @param tagsList reference to string list receiving the tags (QStringList) @param allsTagsLisr reference to string list all tags (QStringList) """ self.errorGroup.hide() self.intercept = False if not tags: self.setWindowTitle(self.trUtf8("Subversion Branches List")) self.activateWindow() self.tagsList = tagsList self.allTagsList = allTagsList dname, fname = self.vcs.splitPath(path) self.process.kill() reposURL = self.vcs.svnGetReposName(dname) if reposURL is None: KQMessageBox.critical(None, self.trUtf8("Subversion Error"), self.trUtf8("""The URL of the project repository could not be""" """ retrieved from the working copy. The list operation will""" """ be aborted""")) self.close() return args = QStringList() args.append('list') self.vcs.addArguments(args, self.vcs.options['global']) args.append('--verbose') if self.vcs.otherData["standardLayout"]: # determine the base path of the project in the repository rx_base = QRegExp('(.+)/(trunk|tags|branches).*') if not rx_base.exactMatch(reposURL): KQMessageBox.critical(None, self.trUtf8("Subversion Error"), self.trUtf8("""The URL of the project repository has an""" """ invalid format. The list operation will""" """ be aborted""")) return reposRoot = unicode(rx_base.cap(1)) if tags: args.append("%s/tags" % reposRoot) else: args.append("%s/branches" % reposRoot) self.path = None else: reposPath, ok = KQInputDialog.getText(\ self, self.trUtf8("Subversion List"), self.trUtf8("Enter the repository URL containing the tags or branches"), QLineEdit.Normal, self.vcs.svnNormalizeURL(reposURL)) if not ok: self.close() return if reposPath.isEmpty(): KQMessageBox.critical(None, self.trUtf8("Subversion List"), self.trUtf8("""The repository URL is empty. Aborting...""")) self.close() return args.append(reposPath) self.path = unicode(reposPath) self.process.setWorkingDirectory(dname) self.process.start('svn', args) procStarted = self.process.waitForStarted() if not procStarted: self.inputGroup.setEnabled(False) self.inputGroup.hide() KQMessageBox.critical(None, self.trUtf8('Process Generation Error'), self.trUtf8( 'The process %1 could not be started. ' 'Ensure, that it is in the search path.' ).arg('svn')) else: self.inputGroup.setEnabled(True) self.inputGroup.show() def __finish(self): """ Private slot called when the process finished or the user pressed the button. """ if self.process is not None and \ self.process.state() != QProcess.NotRunning: self.process.terminate() QTimer.singleShot(2000, self.process, SLOT('kill()')) self.process.waitForFinished(3000) self.buttonBox.button(QDialogButtonBox.Close).setEnabled(True) self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Close).setDefault(True) self.buttonBox.button(QDialogButtonBox.Close).setFocus(Qt.OtherFocusReason) self.inputGroup.setEnabled(False) self.inputGroup.hide() self.process = None self.__resizeColumns() self.__resort() def on_buttonBox_clicked(self, button): """ Private slot called by a button of the button box clicked. @param button button that was clicked (QAbstractButton) """ if button == self.buttonBox.button(QDialogButtonBox.Close): self.close() elif button == self.buttonBox.button(QDialogButtonBox.Cancel): self.__finish() def __procFinished(self, exitCode, exitStatus): """ Private slot connected to the finished signal. @param exitCode exit code of the process (integer) @param exitStatus exit status of the process (QProcess.ExitStatus) """ self.__finish() def __resort(self): """ Private method to resort the tree. """ self.tagList.sortItems(self.tagList.sortColumn(), self.tagList.header().sortIndicatorOrder()) def __resizeColumns(self): """ Private method to resize the list columns. """ self.tagList.header().resizeSections(QHeaderView.ResizeToContents) self.tagList.header().setStretchLastSection(True) def __generateItem(self, revision, author, date, name): """ Private method to generate a tag item in the taglist. @param revision revision string (string or QString) @param author author of the tag (string or QString) @param date date of the tag (string or QString) @param name name (path) of the tag (string or QString) """ itm = QTreeWidgetItem(self.tagList) itm.setData(0, Qt.DisplayRole, int(revision)) itm.setData(1, Qt.DisplayRole, author) itm.setData(2, Qt.DisplayRole, date) itm.setData(3, Qt.DisplayRole, name) itm.setTextAlignment(0, Qt.AlignRight) def __readStdout(self): """ Private slot to handle the readyReadStdout signal. It reads the output of the process, formats it and inserts it into the contents pane. """ self.process.setReadChannel(QProcess.StandardOutput) while self.process.canReadLine(): s = QString(self.process.readLine()) if self.rx_list.exactMatch(s): rev = "%6s" % unicode(self.rx_list.cap(1)) author = self.rx_list.cap(2) date = self.rx_list.cap(3) path = self.rx_list.cap(4) if path == ".": continue self.__generateItem(rev, author, date, path) if not self.vcs.otherData["standardLayout"]: path = self.path + '/' + path if self.tagsList is not None: self.tagsList.append(path) if self.allTagsList is not None: self.allTagsList.append(path) def __readStderr(self): """ Private slot to handle the readyReadStderr signal. It reads the error output of the process and inserts it into the error pane. """ if self.process is not None: self.errorGroup.show() s = QString(self.process.readAllStandardError()) self.errors.insertPlainText(s) self.errors.ensureCursorVisible() def on_passwordCheckBox_toggled(self, isOn): """ Private slot to handle the password checkbox toggled. @param isOn flag indicating the status of the check box (boolean) """ if isOn: self.input.setEchoMode(QLineEdit.Password) else: self.input.setEchoMode(QLineEdit.Normal) @pyqtSignature("") def on_sendButton_clicked(self): """ Private slot to send the input to the subversion process. """ input = self.input.text() input.append(os.linesep) if self.passwordCheckBox.isChecked(): self.errors.insertPlainText(os.linesep) self.errors.ensureCursorVisible() else: self.errors.insertPlainText(input) self.errors.ensureCursorVisible() self.process.write(input.toLocal8Bit()) self.passwordCheckBox.setChecked(False) self.input.clear() def on_input_returnPressed(self): """ Private slot to handle the press of the return key in the input field. """ self.intercept = True self.on_sendButton_clicked() def keyPressEvent(self, evt): """ Protected slot to handle a key press event. @param evt the key press event (QKeyEvent) """ if self.intercept: self.intercept = False evt.accept() return QDialog.keyPressEvent(self, evt) eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/SvnBlameDialog.ui0000644000175000001440000000007411744565410026304 xustar000000000000000030 atime=1389081082.832724399 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/SvnBlameDialog.ui0000644000175000001440000001046711744565410026041 0ustar00detlevusers00000000000000 SvnBlameDialog 0 0 690 750 Subversion Blame true 0 6 true QAbstractItemView::NoSelection false false Revision Author Line 0 1 Errors true false Input Qt::Horizontal QSizePolicy::Expanding 327 29 Press to send the input to the subversion process &Send Alt+S Enter data to be sent to the subversion process Select to switch the input field to password mode &Password Mode Alt+P Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Close blameList errors input passwordCheckBox sendButton buttonBox eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/SvnUtilities.py0000644000175000001440000000013212261012650026111 xustar000000000000000030 mtime=1388582312.059077825 30 atime=1389081082.832724399 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/SvnUtilities.py0000644000175000001440000000555112261012650025651 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing some common utility functions for the subversion package. """ import sys import os from PyQt4.QtCore import QDateTime, Qt import Utilities from Config import DefaultConfig, DefaultIgnores def getServersPath(): """ Module function to get the filename of the servers file. @return filename of the servers file (string) """ if Utilities.isWindowsPlatform(): appdata = os.environ["APPDATA"] return os.path.join(appdata, "Subversion", "servers") else: homedir = Utilities.getHomeDir() return os.path.join(homedir, ".subversion", "servers") def getConfigPath(): """ Module function to get the filename of the config file. @return filename of the config file (string) """ if Utilities.isWindowsPlatform(): appdata = os.environ["APPDATA"] return os.path.join(appdata, "Subversion", "config") else: homedir = Utilities.getHomeDir() return os.path.join(homedir, ".subversion", "config") def createDefaultConfig(): """ Module function to create a default config file suitable for eric. """ config = getConfigPath() try: os.makedirs(os.path.dirname(config)) except OSError: pass try: f = open(config, "w") f.write(DefaultConfig) f.close() except IOError: pass def amendConfig(): """ Module function to amend the config file. """ config = getConfigPath() try: f = open(config, "r") configList = f.read().splitlines() f.close() except IOError: return newConfig = [] ignoresFound = False amendList = [] for line in configList: if line.find("global-ignores") in [0, 2]: ignoresFound = True if line.startswith("# "): line = line[2:] newConfig.append(line) for amend in DefaultIgnores: if amend not in line: amendList.append(amend) elif ignoresFound: if line.startswith("##"): ignoresFound = False if amendList: newConfig.append(" " + " ".join(amendList)) newConfig.append(line) continue elif line.startswith("# "): line = line[2:] newConfig.append(line) oldAmends = amendList[:] amendList = [] for amend in oldAmends: if amend not in line: amendList.append(amend) else: newConfig.append(line) if newConfig != configList: try: f = open(config, "w") f.write("\n".join(newConfig)) f.close() except IOError: pass eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/SvnRepoBrowserDialog.ui0000644000175000001440000000007411744566236027544 xustar000000000000000030 atime=1389081082.837724397 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/SvnRepoBrowserDialog.ui0000644000175000001440000001432411744566236027275 0ustar00detlevusers00000000000000 SvnRepoBrowserDialog 0 0 650 667 Subversion Repository Browser URL: 0 0 Enter the URL of the repository true QComboBox::InsertAtTop 0 4 true true true 5 File Revision Author Size Date 0 1 Errors <b>Subversion errors</b><p>This shows possible error messages of the svn list and svn info commands.</p> true false Input Qt::Horizontal QSizePolicy::Expanding 327 29 Press to send the input to the subversion process &Send Alt+S Enter data to be sent to the subversion process Select to switch the input field to password mode &Password Mode Alt+P Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Close|QDialogButtonBox::Ok urlCombo repoTree errors input passwordCheckBox sendButton buttonBox buttonBox rejected() SvnRepoBrowserDialog reject() 359 660 286 274 buttonBox accepted() SvnRepoBrowserDialog accept() 146 660 8 472 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/SvnPropSetDialog.py0000644000175000001440000000013112261012650026651 xustar000000000000000029 mtime=1388582312.06107785 30 atime=1389081082.837724397 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/SvnPropSetDialog.py0000644000175000001440000000343012261012650026404 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Module implementing a dialog to enter the data for a new property. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQFileDialog from E4Gui.E4Completers import E4FileCompleter from Ui_SvnPropSetDialog import Ui_SvnPropSetDialog import Utilities class SvnPropSetDialog(QDialog, Ui_SvnPropSetDialog): """ Class implementing a dialog to enter the data for a new property. """ def __init__(self, parent = None): """ Constructor @param parent parent widget (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.propFileCompleter = E4FileCompleter(self.propFileEdit) @pyqtSignature("") def on_fileButton_clicked(self): """ Private slot called by pressing the file selection button. """ fn = KQFileDialog.getOpenFileName(\ self, self.trUtf8("Select file for property"), self.propFileEdit.text(), QString()) if not fn.isEmpty(): self.propFileEdit.setText(Utilities.toNativeSeparators(fn)) def getData(self): """ Public slot used to retrieve the data entered into the dialog. @return tuple of three values giving the property name, a flag indicating a file was selected and the text of the property or the selected filename. (QString, boolean, QString) """ if self.fileRadioButton.isChecked(): return (self.propNameEdit.text(), True, self.propFileEdit.text()) else: return (self.propNameEdit.text(), False, self.propTextEdit.toPlainText()) eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/ProjectBrowserHelper.py0000644000175000001440000000013212261012650027561 xustar000000000000000030 mtime=1388582312.071077977 30 atime=1389081082.837724397 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/ProjectBrowserHelper.py0000644000175000001440000011224412261012650027317 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2005 - 2014 Detlev Offenbach # """ Module implementing the VCS project browser helper for subversion. """ import os from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt.KQApplication import e4App from VCS.ProjectBrowserHelper import VcsProjectBrowserHelper from Project.ProjectBrowserModel import ProjectBrowserFileItem import UI.PixmapCache class SvnProjectBrowserHelper(VcsProjectBrowserHelper): """ Class implementing the VCS project browser helper for subversion. """ def __init__(self, vcsObject, browserObject, projectObject, isTranslationsBrowser, parent = None, name = None): """ Constructor @param vcsObject reference to the vcs object @param browserObject reference to the project browser object @param projectObject reference to the project object @param isTranslationsBrowser flag indicating, the helper is requested for the translations browser (this needs some special treatment) @param parent parent widget (QWidget) @param name name of this object (string or QString) """ VcsProjectBrowserHelper.__init__(self, vcsObject, browserObject, projectObject, isTranslationsBrowser, parent, name) def showContextMenu(self, menu, standardItems): """ Slot called before the context menu is shown. It enables/disables the VCS menu entries depending on the overall VCS status and the file status. @param menu reference to the menu to be shown @param standardItems array of standard items that need activation/deactivation depending on the overall VCS status """ if unicode(self.browser.currentItem().data(1)) == self.vcs.vcsName(): for act in self.vcsMenuActions: act.setEnabled(True) for act in self.vcsAddMenuActions: act.setEnabled(False) for act in standardItems: act.setEnabled(False) if not hasattr(self.browser.currentItem(), 'fileName'): self.blameAct.setEnabled(False) else: for act in self.vcsMenuActions: act.setEnabled(False) for act in self.vcsAddMenuActions: act.setEnabled(True) if 1 in self.browser.specialMenuEntries: try: name = unicode(self.browser.currentItem().fileName()) except AttributeError: name = unicode(self.browser.currentItem().dirName()) if not os.path.isdir(name): self.vcsMenuAddTree.setEnabled(False) for act in standardItems: act.setEnabled(True) def showContextMenuMulti(self, menu, standardItems): """ Slot called before the context menu (multiple selections) is shown. It enables/disables the VCS menu entries depending on the overall VCS status and the files status. @param menu reference to the menu to be shown @param standardItems array of standard items that need activation/deactivation depending on the overall VCS status """ vcsName = self.vcs.vcsName() items = self.browser.getSelectedItems() vcsItems = 0 # determine number of selected items under VCS control for itm in items: if unicode(itm.data(1)) == vcsName: vcsItems += 1 if vcsItems > 0: if vcsItems != len(items): for act in self.vcsMultiMenuActions: act.setEnabled(False) else: for act in self.vcsMultiMenuActions: act.setEnabled(True) for act in self.vcsAddMultiMenuActions: act.setEnabled(False) for act in standardItems: act.setEnabled(False) else: for act in self.vcsMultiMenuActions: act.setEnabled(False) for act in self.vcsAddMultiMenuActions: act.setEnabled(True) if 1 in self.browser.specialMenuEntries and \ self.__itemsHaveFiles(items): self.vcsMultiMenuAddTree.setEnabled(False) for act in standardItems: act.setEnabled(True) def showContextMenuDir(self, menu, standardItems): """ Slot called before the context menu is shown. It enables/disables the VCS menu entries depending on the overall VCS status and the directory status. @param menu reference to the menu to be shown @param standardItems array of standard items that need activation/deactivation depending on the overall VCS status """ if unicode(self.browser.currentItem().data(1)) == self.vcs.vcsName(): for act in self.vcsDirMenuActions: act.setEnabled(True) for act in self.vcsAddDirMenuActions: act.setEnabled(False) for act in standardItems: act.setEnabled(False) else: for act in self.vcsDirMenuActions: act.setEnabled(False) for act in self.vcsAddDirMenuActions: act.setEnabled(True) for act in standardItems: act.setEnabled(True) def showContextMenuDirMulti(self, menu, standardItems): """ Slot called before the context menu is shown. It enables/disables the VCS menu entries depending on the overall VCS status and the directory status. @param menu reference to the menu to be shown @param standardItems array of standard items that need activation/deactivation depending on the overall VCS status """ vcsName = self.vcs.vcsName() items = self.browser.getSelectedItems() vcsItems = 0 # determine number of selected items under VCS control for itm in items: if unicode(itm.data(1)) == vcsName: vcsItems += 1 if vcsItems > 0: if vcsItems != len(items): for act in self.vcsDirMultiMenuActions: act.setEnabled(False) else: for act in self.vcsDirMultiMenuActions: act.setEnabled(True) for act in self.vcsAddDirMultiMenuActions: act.setEnabled(False) for act in standardItems: act.setEnabled(False) else: for act in self.vcsDirMultiMenuActions: act.setEnabled(False) for act in self.vcsAddDirMultiMenuActions: act.setEnabled(True) for act in standardItems: act.setEnabled(True) ############################################################################ # Protected menu generation methods below ############################################################################ def _addVCSMenu(self, mainMenu): """ Protected method used to add the VCS menu to all project browsers. @param mainMenu reference to the menu to be amended """ self.vcsMenuActions = [] self.vcsAddMenuActions = [] menu = QMenu(self.trUtf8("Version Control")) act = menu.addAction( UI.PixmapCache.getIcon( os.path.join("VcsPlugins", "vcsSubversion", "icons", "subversion.png")), self.vcs.vcsName(), self._VCSInfoDisplay) font = act.font() font.setBold(True) act.setFont(font) menu.addSeparator() act = menu.addAction(UI.PixmapCache.getIcon("vcsUpdate.png"), self.trUtf8('Update from repository'), self._VCSUpdate) self.vcsMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsCommit.png"), self.trUtf8('Commit changes to repository...'), self._VCSCommit) self.vcsMenuActions.append(act) menu.addSeparator() act = menu.addAction(UI.PixmapCache.getIcon("vcsAdd.png"), self.trUtf8('Add to repository'), self._VCSAdd) self.vcsAddMenuActions.append(act) if 1 in self.browser.specialMenuEntries: self.vcsMenuAddTree = menu.addAction(UI.PixmapCache.getIcon("vcsAdd.png"), self.trUtf8('Add tree to repository'), self._VCSAddTree) self.vcsAddMenuActions.append(self.vcsMenuAddTree) act = menu.addAction(UI.PixmapCache.getIcon("vcsRemove.png"), self.trUtf8('Remove from repository (and disk)'), self._VCSRemove) self.vcsMenuActions.append(act) menu.addSeparator() act = menu.addAction(self.trUtf8('Copy'), self.__SVNCopy) self.vcsMenuActions.append(act) act = menu.addAction(self.trUtf8('Move'), self.__SVNMove) self.vcsMenuActions.append(act) if self.vcs.versionStr >= '1.5.0': menu.addSeparator() act = menu.addAction(self.trUtf8("Add to Changelist"), self.__SVNAddToChangelist) self.vcsMenuActions.append(act) act = menu.addAction(self.trUtf8("Remove from Changelist"), self.__SVNRemoveFromChangelist) self.vcsMenuActions.append(act) menu.addSeparator() act = menu.addAction(UI.PixmapCache.getIcon("vcsLog.png"), self.trUtf8('Show log'), self._VCSLog) self.vcsMenuActions.append(act) if self.vcs.versionStr >= '1.2.0': act = menu.addAction(UI.PixmapCache.getIcon("vcsLog.png"), self.trUtf8('Show limited log'), self.__SVNLogLimited) self.vcsMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsLog.png"), self.trUtf8('Show log browser'), self.__SVNLogBrowser) self.vcsMenuActions.append(act) menu.addSeparator() act = menu.addAction(UI.PixmapCache.getIcon("vcsStatus.png"), self.trUtf8('Show status'), self._VCSStatus) self.vcsMenuActions.append(act) menu.addSeparator() act = menu.addAction(UI.PixmapCache.getIcon("vcsDiff.png"), self.trUtf8('Show difference'), self._VCSDiff) self.vcsMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsDiff.png"), self.trUtf8('Show difference (extended)'), self.__SVNExtendedDiff) self.vcsMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsDiff.png"), self.trUtf8('Show difference (URLs)'), self.__SVNUrlDiff) self.vcsMenuActions.append(act) self.blameAct = menu.addAction(self.trUtf8('Show annotated file'), self.__SVNBlame) self.vcsMenuActions.append(self.blameAct) menu.addSeparator() act = menu.addAction(UI.PixmapCache.getIcon("vcsRevert.png"), self.trUtf8('Revert changes'), self._VCSRevert) self.vcsMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsMerge.png"), self.trUtf8('Merge changes'), self._VCSMerge) self.vcsMenuActions.append(act) act = menu.addAction(self.trUtf8('Conflict resolved'), self.__SVNResolve) self.vcsMenuActions.append(act) if self.vcs.versionStr >= '1.2.0': menu.addSeparator() act = menu.addAction(UI.PixmapCache.getIcon("vcsLock.png"), self.trUtf8('Lock'), self.__SVNLock) self.vcsMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsUnlock.png"), self.trUtf8('Unlock'), self.__SVNUnlock) self.vcsMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsUnlock.png"), self.trUtf8('Break Lock'), self.__SVNBreakLock) self.vcsMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsUnlock.png"), self.trUtf8('Steal Lock'), self.__SVNStealLock) self.vcsMenuActions.append(act) menu.addSeparator() act = menu.addAction(self.trUtf8('Set Property'), self.__SVNSetProp) self.vcsMenuActions.append(act) act = menu.addAction(self.trUtf8('List Properties'), self.__SVNListProps) self.vcsMenuActions.append(act) act = menu.addAction(self.trUtf8('Delete Property'), self.__SVNDelProp) self.vcsMenuActions.append(act) menu.addSeparator() menu.addAction(self.trUtf8('Select all local file entries'), self.browser.selectLocalEntries) menu.addAction(self.trUtf8('Select all versioned file entries'), self.browser.selectVCSEntries) menu.addAction(self.trUtf8('Select all local directory entries'), self.browser.selectLocalDirEntries) menu.addAction(self.trUtf8('Select all versioned directory entries'), self.browser.selectVCSDirEntries) menu.addSeparator() menu.addAction(self.trUtf8("Configure..."), self.__SVNConfigure) mainMenu.addSeparator() mainMenu.addMenu(menu) self.menu = menu def _addVCSMenuMulti(self, mainMenu): """ Protected method used to add the VCS menu for multi selection to all project browsers. @param mainMenu reference to the menu to be amended """ self.vcsMultiMenuActions = [] self.vcsAddMultiMenuActions = [] menu = QMenu(self.trUtf8("Version Control")) act = menu.addAction( UI.PixmapCache.getIcon( os.path.join("VcsPlugins", "vcsSubversion", "icons", "subversion.png")), self.vcs.vcsName(), self._VCSInfoDisplay) font = act.font() font.setBold(True) act.setFont(font) menu.addSeparator() act = menu.addAction(UI.PixmapCache.getIcon("vcsUpdate.png"), self.trUtf8('Update from repository'), self._VCSUpdate) self.vcsMultiMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsCommit.png"), self.trUtf8('Commit changes to repository...'), self._VCSCommit) self.vcsMultiMenuActions.append(act) menu.addSeparator() act = menu.addAction(UI.PixmapCache.getIcon("vcsAdd.png"), self.trUtf8('Add to repository'), self._VCSAdd) self.vcsAddMultiMenuActions.append(act) if 1 in self.browser.specialMenuEntries: self.vcsMultiMenuAddTree = \ menu.addAction(UI.PixmapCache.getIcon("vcsAdd.png"), self.trUtf8('Add tree to repository'), self._VCSAddTree) self.vcsAddMultiMenuActions.append(self.vcsMultiMenuAddTree) act = menu.addAction(UI.PixmapCache.getIcon("vcsRemove.png"), self.trUtf8('Remove from repository (and disk)'), self._VCSRemove) self.vcsMultiMenuActions.append(act) self.vcsRemoveMultiMenuItem = act if self.vcs.versionStr >= '1.5.0': menu.addSeparator() act = menu.addAction(self.trUtf8("Add to Changelist"), self.__SVNAddToChangelist) self.vcsMenuActions.append(act) act = menu.addAction(self.trUtf8("Remove from Changelist"), self.__SVNRemoveFromChangelist) self.vcsMenuActions.append(act) menu.addSeparator() act = menu.addAction(UI.PixmapCache.getIcon("vcsStatus.png"), self.trUtf8('Show status'), self._VCSStatus) self.vcsMultiMenuActions.append(act) menu.addSeparator() act = menu.addAction(UI.PixmapCache.getIcon("vcsDiff.png"), self.trUtf8('Show difference'), self._VCSDiff) self.vcsMultiMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsDiff.png"), self.trUtf8('Show difference (extended)'), self.__SVNExtendedDiff) self.vcsMultiMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsDiff.png"), self.trUtf8('Show difference (URLs)'), self.__SVNUrlDiff) self.vcsMultiMenuActions.append(act) menu.addSeparator() act = menu.addAction(UI.PixmapCache.getIcon("vcsRevert.png"), self.trUtf8('Revert changes'), self._VCSRevert) self.vcsMultiMenuActions.append(act) act = menu.addAction(self.trUtf8('Conflict resolved'), self.__SVNResolve) self.vcsMultiMenuActions.append(act) if self.vcs.versionStr >= '1.2.0': menu.addSeparator() act = menu.addAction(UI.PixmapCache.getIcon("vcsLock.png"), self.trUtf8('Lock'), self.__SVNLock) self.vcsMultiMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsUnlock.png"), self.trUtf8('Unlock'), self.__SVNUnlock) self.vcsMultiMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsUnlock.png"), self.trUtf8('Break Lock'), self.__SVNBreakLock) self.vcsMultiMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsUnlock.png"), self.trUtf8('Steal Lock'), self.__SVNStealLock) self.vcsMultiMenuActions.append(act) menu.addSeparator() act = menu.addAction(self.trUtf8('Set Property'), self.__SVNSetProp) self.vcsMultiMenuActions.append(act) act = menu.addAction(self.trUtf8('List Properties'), self.__SVNListProps) self.vcsMultiMenuActions.append(act) act = menu.addAction(self.trUtf8('Delete Property'), self.__SVNDelProp) self.vcsMultiMenuActions.append(act) menu.addSeparator() menu.addAction(self.trUtf8('Select all local file entries'), self.browser.selectLocalEntries) menu.addAction(self.trUtf8('Select all versioned file entries'), self.browser.selectVCSEntries) menu.addAction(self.trUtf8('Select all local directory entries'), self.browser.selectLocalDirEntries) menu.addAction(self.trUtf8('Select all versioned directory entries'), self.browser.selectVCSDirEntries) menu.addSeparator() menu.addAction(self.trUtf8("Configure..."), self.__SVNConfigure) mainMenu.addSeparator() mainMenu.addMenu(menu) self.menuMulti = menu def _addVCSMenuBack(self, mainMenu): """ Protected method used to add the VCS menu to all project browsers. @param mainMenu reference to the menu to be amended """ menu = QMenu(self.trUtf8("Version Control")) act = menu.addAction( UI.PixmapCache.getIcon( os.path.join("VcsPlugins", "vcsSubversion", "icons", "subversion.png")), self.vcs.vcsName(), self._VCSInfoDisplay) font = act.font() font.setBold(True) act.setFont(font) menu.addSeparator() menu.addAction(self.trUtf8('Select all local file entries'), self.browser.selectLocalEntries) menu.addAction(self.trUtf8('Select all versioned file entries'), self.browser.selectVCSEntries) menu.addAction(self.trUtf8('Select all local directory entries'), self.browser.selectLocalDirEntries) menu.addAction(self.trUtf8('Select all versioned directory entries'), self.browser.selectVCSDirEntries) menu.addSeparator() menu.addAction(self.trUtf8("Configure..."), self.__SVNConfigure) mainMenu.addSeparator() mainMenu.addMenu(menu) self.menuBack = menu def _addVCSMenuDir(self, mainMenu): """ Protected method used to add the VCS menu to all project browsers. @param mainMenu reference to the menu to be amended """ if mainMenu is None: return self.vcsDirMenuActions = [] self.vcsAddDirMenuActions = [] menu = QMenu(self.trUtf8("Version Control")) act = menu.addAction( UI.PixmapCache.getIcon( os.path.join("VcsPlugins", "vcsSubversion", "icons", "subversion.png")), self.vcs.vcsName(), self._VCSInfoDisplay) font = act.font() font.setBold(True) act.setFont(font) menu.addSeparator() act = menu.addAction(UI.PixmapCache.getIcon("vcsUpdate.png"), self.trUtf8('Update from repository'), self._VCSUpdate) self.vcsDirMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsCommit.png"), self.trUtf8('Commit changes to repository...'), self._VCSCommit) self.vcsDirMenuActions.append(act) menu.addSeparator() act = menu.addAction(UI.PixmapCache.getIcon("vcsAdd.png"), self.trUtf8('Add to repository'), self._VCSAdd) self.vcsAddDirMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsRemove.png"), self.trUtf8('Remove from repository (and disk)'), self._VCSRemove) self.vcsDirMenuActions.append(act) menu.addSeparator() act = menu.addAction(self.trUtf8('Copy'), self.__SVNCopy) self.vcsDirMenuActions.append(act) act = menu.addAction(self.trUtf8('Move'), self.__SVNMove) self.vcsDirMenuActions.append(act) if self.vcs.versionStr >= '1.5.0': menu.addSeparator() act = menu.addAction(self.trUtf8("Add to Changelist"), self.__SVNAddToChangelist) self.vcsMenuActions.append(act) act = menu.addAction(self.trUtf8("Remove from Changelist"), self.__SVNRemoveFromChangelist) self.vcsMenuActions.append(act) menu.addSeparator() act = menu.addAction(UI.PixmapCache.getIcon("vcsLog.png"), self.trUtf8('Show log'), self._VCSLog) self.vcsDirMenuActions.append(act) if self.vcs.versionStr >= '1.2.0': act = menu.addAction(UI.PixmapCache.getIcon("vcsLog.png"), self.trUtf8('Show limited log'), self.__SVNLogLimited) self.vcsDirMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsLog.png"), self.trUtf8('Show log browser'), self.__SVNLogBrowser) self.vcsDirMenuActions.append(act) menu.addSeparator() act = menu.addAction(UI.PixmapCache.getIcon("vcsStatus.png"), self.trUtf8('Show status'), self._VCSStatus) self.vcsDirMenuActions.append(act) menu.addSeparator() act = menu.addAction(UI.PixmapCache.getIcon("vcsDiff.png"), self.trUtf8('Show difference'), self._VCSDiff) self.vcsDirMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsDiff.png"), self.trUtf8('Show difference (extended)'), self.__SVNExtendedDiff) self.vcsDirMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsDiff.png"), self.trUtf8('Show difference (URLs)'), self.__SVNUrlDiff) self.vcsDirMenuActions.append(act) menu.addSeparator() act = menu.addAction(UI.PixmapCache.getIcon("vcsRevert.png"), self.trUtf8('Revert changes'), self._VCSRevert) self.vcsDirMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsMerge.png"), self.trUtf8('Merge changes'), self._VCSMerge) self.vcsDirMenuActions.append(act) act = menu.addAction(self.trUtf8('Conflict resolved'), self.__SVNResolve) self.vcsDirMenuActions.append(act) menu.addSeparator() act = menu.addAction(self.trUtf8('Set Property'), self.__SVNSetProp) self.vcsDirMenuActions.append(act) act = menu.addAction(self.trUtf8('List Properties'), self.__SVNListProps) self.vcsDirMenuActions.append(act) act = menu.addAction(self.trUtf8('Delete Property'), self.__SVNDelProp) self.vcsDirMenuActions.append(act) menu.addSeparator() menu.addAction(self.trUtf8('Select all local file entries'), self.browser.selectLocalEntries) menu.addAction(self.trUtf8('Select all versioned file entries'), self.browser.selectVCSEntries) menu.addAction(self.trUtf8('Select all local directory entries'), self.browser.selectLocalDirEntries) menu.addAction(self.trUtf8('Select all versioned directory entries'), self.browser.selectVCSDirEntries) menu.addSeparator() menu.addAction(self.trUtf8("Configure..."), self.__SVNConfigure) mainMenu.addSeparator() mainMenu.addMenu(menu) self.menuDir = menu def _addVCSMenuDirMulti(self, mainMenu): """ Protected method used to add the VCS menu to all project browsers. @param mainMenu reference to the menu to be amended """ if mainMenu is None: return self.vcsDirMultiMenuActions = [] self.vcsAddDirMultiMenuActions = [] menu = QMenu(self.trUtf8("Version Control")) act = menu.addAction( UI.PixmapCache.getIcon( os.path.join("VcsPlugins", "vcsSubversion", "icons", "subversion.png")), self.vcs.vcsName(), self._VCSInfoDisplay) font = act.font() font.setBold(True) act.setFont(font) menu.addSeparator() act = menu.addAction(UI.PixmapCache.getIcon("vcsUpdate.png"), self.trUtf8('Update from repository'), self._VCSUpdate) self.vcsDirMultiMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsCommit.png"), self.trUtf8('Commit changes to repository...'), self._VCSCommit) self.vcsDirMultiMenuActions.append(act) menu.addSeparator() act = menu.addAction(UI.PixmapCache.getIcon("vcsAdd.png"), self.trUtf8('Add to repository'), self._VCSAdd) self.vcsAddDirMultiMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsRemove.png"), self.trUtf8('Remove from repository (and disk)'), self._VCSRemove) self.vcsDirMultiMenuActions.append(act) if self.vcs.versionStr >= '1.5.0': menu.addSeparator() act = menu.addAction(self.trUtf8("Add to Changelist"), self.__SVNAddToChangelist) self.vcsMenuActions.append(act) act = menu.addAction(self.trUtf8("Remove from Changelist"), self.__SVNRemoveFromChangelist) self.vcsMenuActions.append(act) menu.addSeparator() act = menu.addAction(UI.PixmapCache.getIcon("vcsStatus.png"), self.trUtf8('Show status'), self._VCSStatus) self.vcsDirMultiMenuActions.append(act) menu.addSeparator() act = menu.addAction(UI.PixmapCache.getIcon("vcsDiff.png"), self.trUtf8('Show difference'), self._VCSDiff) self.vcsDirMultiMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsDiff.png"), self.trUtf8('Show difference (extended)'), self.__SVNExtendedDiff) self.vcsDirMultiMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsDiff.png"), self.trUtf8('Show difference (URLs)'), self.__SVNUrlDiff) self.vcsDirMultiMenuActions.append(act) menu.addSeparator() act = menu.addAction(UI.PixmapCache.getIcon("vcsRevert.png"), self.trUtf8('Revert changes'), self._VCSRevert) self.vcsDirMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsMerge.png"), self.trUtf8('Merge changes'), self._VCSMerge) self.vcsDirMenuActions.append(act) act = menu.addAction(self.trUtf8('Conflict resolved'), self.__SVNResolve) self.vcsDirMultiMenuActions.append(act) menu.addSeparator() act = menu.addAction(self.trUtf8('Set Property'), self.__SVNSetProp) self.vcsDirMultiMenuActions.append(act) act = menu.addAction(self.trUtf8('List Properties'), self.__SVNListProps) self.vcsDirMultiMenuActions.append(act) act = menu.addAction(self.trUtf8('Delete Property'), self.__SVNDelProp) self.vcsDirMultiMenuActions.append(act) menu.addSeparator() menu.addAction(self.trUtf8('Select all local file entries'), self.browser.selectLocalEntries) menu.addAction(self.trUtf8('Select all versioned file entries'), self.browser.selectVCSEntries) menu.addAction(self.trUtf8('Select all local directory entries'), self.browser.selectLocalDirEntries) menu.addAction(self.trUtf8('Select all versioned directory entries'), self.browser.selectVCSDirEntries) menu.addSeparator() menu.addAction(self.trUtf8("Configure..."), self.__SVNConfigure) mainMenu.addSeparator() mainMenu.addMenu(menu) self.menuDirMulti = menu ############################################################################ # Menu handling methods below ############################################################################ def __SVNCopy(self): """ Private slot called by the context menu to copy the selected file. """ itm = self.browser.currentItem() try: fn = unicode(itm.fileName()) except AttributeError: fn = unicode(itm.dirName()) self.vcs.svnCopy(fn, self.project) def __SVNMove(self): """ Private slot called by the context menu to move the selected file. """ itm = self.browser.currentItem() try: fn = unicode(itm.fileName()) except AttributeError: fn = unicode(itm.dirName()) isFile = os.path.isfile(fn) movefiles = self.browser.project.getFiles(fn) if self.vcs.vcsMove(fn, self.project): if isFile: self.browser.emit(SIGNAL('closeSourceWindow'), fn) else: for mf in movefiles: self.browser.emit(SIGNAL('closeSourceWindow'), mf) def __SVNResolve(self): """ Private slot called by the context menu to resolve conflicts of a file. """ names = [] for itm in self.browser.getSelectedItems(): try: names.append(unicode(itm.fileName())) except AttributeError: names.append(unicode(itm.dirName())) self.vcs.svnResolve(names) def __SVNListProps(self): """ Private slot called by the context menu to list the subversion properties of a file. """ names = [] for itm in self.browser.getSelectedItems(): try: names.append(unicode(itm.fileName())) except AttributeError: names.append(unicode(itm.dirName())) self.vcs.svnListProps(names) def __SVNSetProp(self): """ Private slot called by the context menu to set a subversion property of a file. """ names = [] for itm in self.browser.getSelectedItems(): try: names.append(unicode(itm.fileName())) except AttributeError: names.append(unicode(itm.dirName())) self.vcs.svnSetProp(names) def __SVNDelProp(self): """ Private slot called by the context menu to delete a subversion property of a file. """ names = [] for itm in self.browser.getSelectedItems(): try: names.append(unicode(itm.fileName())) except AttributeError: names.append(unicode(itm.dirName())) self.vcs.svnDelProp(names) def __SVNExtendedDiff(self): """ Private slot called by the context menu to show the difference of a file to the repository. This gives the chance to enter the revisions to compare. """ names = [] for itm in self.browser.getSelectedItems(): try: names.append(unicode(itm.fileName())) except AttributeError: names.append(unicode(itm.dirName())) self.vcs.svnExtendedDiff(names) def __SVNUrlDiff(self): """ Private slot called by the context menu to show the difference of a file of two repository URLs. This gives the chance to enter the repository URLs to compare. """ names = [] for itm in self.browser.getSelectedItems(): try: names.append(unicode(itm.fileName())) except AttributeError: names.append(unicode(itm.dirName())) self.vcs.svnUrlDiff(names) def __SVNLogLimited(self): """ Private slot called by the context menu to show the limited log of a file. """ itm = self.browser.currentItem() try: fn = unicode(itm.fileName()) except AttributeError: fn = unicode(itm.dirName()) self.vcs.svnLogLimited(fn) def __SVNLogBrowser(self): """ Private slot called by the context menu to show the log browser for a file. """ itm = self.browser.currentItem() try: fn = unicode(itm.fileName()) except AttributeError: fn = unicode(itm.dirName()) self.vcs.svnLogBrowser(fn) def __SVNBlame(self): """ Private slot called by the context menu to show the blame of a file. """ itm = self.browser.currentItem() fn = unicode(itm.fileName()) self.vcs.svnBlame(fn) def __SVNLock(self): """ Private slot called by the context menu to lock files in the repository. """ names = [] for itm in self.browser.getSelectedItems(): try: names.append(unicode(itm.fileName())) except AttributeError: names.append(unicode(itm.dirName())) self.vcs.svnLock(names) def __SVNUnlock(self): """ Private slot called by the context menu to unlock files in the repository. """ names = [] for itm in self.browser.getSelectedItems(): try: names.append(unicode(itm.fileName())) except AttributeError: names.append(unicode(itm.dirName())) self.vcs.svnUnlock(names) def __SVNBreakLock(self): """ Private slot called by the context menu to break lock files in the repository. """ names = [] for itm in self.browser.getSelectedItems(): try: names.append(unicode(itm.fileName())) except AttributeError: names.append(unicode(itm.dirName())) self.vcs.svnUnlock(names, breakIt = True) def __SVNStealLock(self): """ Private slot called by the context menu to steal lock files in the repository. """ names = [] for itm in self.browser.getSelectedItems(): try: names.append(unicode(itm.fileName())) except AttributeError: names.append(unicode(itm.dirName())) self.vcs.svnLock(names, stealIt = True) def __SVNConfigure(self): """ Private method to open the configuration dialog. """ e4App().getObject("UserInterface").showPreferences("zzz_subversionPage") def __SVNAddToChangelist(self): """ Private slot called by the context menu to add files to a changelist. """ names = [] for itm in self.browser.getSelectedItems(): try: names.append(unicode(itm.fileName())) except AttributeError: names.append(unicode(itm.dirName())) self.vcs.svnAddToChangelist(names) def __SVNRemoveFromChangelist(self): """ Private slot called by the context menu to remove files from their changelist. """ names = [] for itm in self.browser.getSelectedItems(): try: names.append(unicode(itm.fileName())) except AttributeError: names.append(unicode(itm.dirName())) self.vcs.svnRemoveFromChangelist(names) ############################################################################ # Some private utility methods below ############################################################################ def __itemsHaveFiles(self, items): """ Private method to check, if items contain file type items. @param items items to check (list of QTreeWidgetItems) @return flag indicating items contain file type items (boolean) """ for itm in items: if isinstance(itm, ProjectBrowserFileItem): return True return False eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/SvnLogDialog.ui0000644000175000001440000000007411744566051026007 xustar000000000000000030 atime=1389081082.843724399 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/SvnLogDialog.ui0000644000175000001440000001105011744566051025531 0ustar00detlevusers00000000000000 SvnLogDialog 0 0 751 649 Subversion Log 0 3 Log <b>Subversion Log</b><p>This shows the output of the svn log command. By clicking on the links you may show the difference between versions.</p> 0 1 Errors <b>Subversion log errors</b><p>This shows possible error messages of the svn log command.</p> true false Input Qt::Horizontal QSizePolicy::Expanding 327 29 Press to send the input to the subversion process &Send Alt+S Enter data to be sent to the subversion process Select to switch the input field to password mode &Password Mode Alt+P Qt::Horizontal QDialogButtonBox::Close contents errors input passwordCheckBox sendButton buttonBox buttonBox rejected() SvnLogDialog close() 262 624 271 647 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/SvnDialog.ui0000644000175000001440000000007411744565716025354 xustar000000000000000030 atime=1389081082.843724399 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/SvnDialog.ui0000644000175000001440000001016011744565716025077 0ustar00detlevusers00000000000000 SvnDialog 0 0 593 499 Subversion true 0 2 Output true false 0 1 Errors true false Input Qt::Horizontal QSizePolicy::Expanding 327 29 Press to send the input to the subversion process &Send Alt+S Enter data to be sent to the subversion process Select to switch the input field to password mode &Password Mode Alt+P Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Close qPixmapFromMimeSource resultbox errors input passwordCheckBox sendButton buttonBox eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/icons0000644000175000001440000000007311706605624024153 xustar000000000000000029 atime=1389081086.01372434 30 ctime=1389081086.315724332 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/icons/0000755000175000001440000000000011706605624023756 5ustar00detlevusers00000000000000eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/icons/PaxHeaders.8617/preferences-subversion.png0000644000175000001440000000007411017556745031441 xustar000000000000000030 atime=1389081082.851724398 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/icons/preferences-subversion.png0000644000175000001440000000130011017556745031160 0ustar00detlevusers00000000000000PNG  IHDRĴl;IDAT8͔KTQ?7oޛ&GRPlSEQ AvڹuݿFhQA%%) VudiQ?h"s{?p8犛ݽ :_>b]<+\?z08ӎG>8ī`Cu<9\[MMM(@?X[PhiP9fP6xk}#p./LDX8sDFE>=QRnb<汒qBChSԗ8̏X:ƽN0%aH:"7w01@""9i9ZQ'g'kqI5438)M¦.{N2cxXb 첳"Y}C1:d3nn?Omm '"s:' iMhYQ4}5M70:9CN#IENDB`eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/icons/PaxHeaders.8617/subversion.png0000644000175000001440000000007411017556745027142 xustar000000000000000030 atime=1389081082.851724398 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/icons/subversion.png0000644000175000001440000000130011017556745026661 0ustar00detlevusers00000000000000PNG  IHDRĴl;IDAT8͔KTQ?7oޛ&GRPlSEQ AvڹuݿFhQA%%) VudiQ?h"s{?p8犛ݽ :_>b]<+\?z08ӎG>8ī`Cu<9\[MMM(@?X[PhiP9fP6xk}#p./LDX8sDFE>=QRnb<汒qBChSԗ8̏X:ƽN0%aH:"7w01@""9i9ZQ'g'kqI5438)M¦.{N2cxXb 첳"Y}C1:d3nn?Omm '"s:' iMhYQ4}5M70:9CN#IENDB`eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/SvnChangeListsDialog.py0000644000175000001440000000013212261012650027462 xustar000000000000000030 mtime=1388582312.086078167 30 atime=1389081082.851724398 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/SvnChangeListsDialog.py0000644000175000001440000002233612261012650027222 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2012 - 2014 Detlev Offenbach # """ Module implementing a dialog to browse the change lists. """ import os from PyQt4.QtCore import pyqtSignature, Qt, QProcess, QRegExp, QTimer from PyQt4.QtGui import QDialog, QDialogButtonBox, QListWidgetItem, QLineEdit from KdeQt import KQMessageBox from .Ui_SvnChangeListsDialog import Ui_SvnChangeListsDialog import Preferences class SvnChangeListsDialog(QDialog, Ui_SvnChangeListsDialog): """ Class implementing a dialog to browse the change lists. """ def __init__(self, vcs, parent=None): """ Constructor @param vcs reference to the vcs object @param parent parent widget (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.buttonBox.button(QDialogButtonBox.Close).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Cancel).setDefault(True) self.process = None self.vcs = vcs self.rx_status = \ QRegExp('(.{8,9})\\s+([0-9-]+)\\s+([0-9?]+)\\s+(\\S+)\\s+(.+)\\s*') # flags (8 or 9 anything), revision, changed rev, author, path self.rx_status2 = \ QRegExp('(.{8,9})\\s+(.+)\\s*') # flags (8 or 9 anything), path self.rx_changelist = \ QRegExp('--- \\S+ .([\\w\\s]+).:\\s+') # three dashes, Changelist (translated), quote, # changelist name, quote, : @pyqtSignature("QListWidgetItem*, QListWidgetItem*") def on_changeLists_currentItemChanged(self, current, previous): """ Private slot to handle the selection of a new item. @param current current item (QListWidgetItem) @param previous previous current item (QListWidgetItem) """ self.filesList.clear() if current is not None: changelist = unicode(current.text()) if changelist in self.changeListsDict: self.filesList.addItems(sorted(self.changeListsDict[changelist])) def start(self, path): """ Public slot to populate the data. @param path directory name to show change lists for (string) """ self.changeListsDict = {} self.filesLabel.setText(self.trUtf8("Files (relative to %1):").arg(path)) self.errorGroup.hide() self.intercept = False self.path = path self.currentChangelist = "" self.process = QProcess() self.process.finished.connect(self.__procFinished) self.process.readyReadStandardOutput.connect(self.__readStdout) self.process.readyReadStandardError.connect(self.__readStderr) args = [] args.append('status') self.vcs.addArguments(args, self.vcs.options['global']) self.vcs.addArguments(args, self.vcs.options['status']) if '--verbose' not in self.vcs.options['global'] and \ '--verbose' not in self.vcs.options['status']: args.append('--verbose') if isinstance(path, list): self.dname, fnames = self.vcs.splitPathList(path) self.vcs.addArguments(args, fnames) else: self.dname, fname = self.vcs.splitPath(path) args.append(fname) self.process.setWorkingDirectory(self.dname) self.process.start('svn', args) procStarted = self.process.waitForStarted() if not procStarted: self.inputGroup.setEnabled(False) self.inputGroup.hide() KQMessageBox.critical(self, self.trUtf8('Process Generation Error'), self.trUtf8( 'The process %1 could not be started. ' 'Ensure, that it is in the search path.' ).arg('svn')) else: self.inputGroup.setEnabled(True) self.inputGroup.show() def __finish(self): """ Private slot called when the process finished or the user pressed the button. """ if self.process is not None and \ self.process.state() != QProcess.NotRunning: self.process.terminate() QTimer.singleShot(2000, self.process.kill) self.process.waitForFinished(3000) self.buttonBox.button(QDialogButtonBox.Close).setEnabled(True) self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Close).setDefault(True) self.inputGroup.setEnabled(False) self.inputGroup.hide() if len(self.changeListsDict) == 0: self.changeLists.addItem(self.trUtf8("No changelists found")) self.buttonBox.button(QDialogButtonBox.Close).setFocus(Qt.OtherFocusReason) else: self.changeLists.addItems(sorted(self.changeListsDict.keys())) self.changeLists.setCurrentRow(0) self.changeLists.setFocus(Qt.OtherFocusReason) def on_buttonBox_clicked(self, button): """ Private slot called by a button of the button box clicked. @param button button that was clicked (QAbstractButton) """ if button == self.buttonBox.button(QDialogButtonBox.Close): self.close() elif button == self.buttonBox.button(QDialogButtonBox.Cancel): self.__finish() def __procFinished(self, exitCode, exitStatus): """ Private slot connected to the finished signal. @param exitCode exit code of the process (integer) @param exitStatus exit status of the process (QProcess.ExitStatus) """ self.__finish() def __readStdout(self): """ Private slot to handle the readyReadStandardOutput signal. It reads the output of the process, formats it and inserts it into the contents pane. """ if self.process is not None: self.process.setReadChannel(QProcess.StandardOutput) while self.process.canReadLine(): s = unicode(self.process.readLine(), Preferences.getSystem("IOEncoding"), 'replace') if self.currentChangelist != "" and self.rx_status.exactMatch(s): file = unicode(self.rx_status.cap(5)).strip() filename = file.replace(self.path + os.sep, "") if filename not in self.changeListsDict[self.currentChangelist]: self.changeListsDict[self.currentChangelist].append(filename) elif self.currentChangelist != "" and self.rx_status2.exactMatch(s): file = unicode(self.rx_status2.cap(2)).strip() filename = file.replace(self.path + os.sep, "") if filename not in self.changeListsDict[self.currentChangelist]: self.changeListsDict[self.currentChangelist].append(filename) elif self.rx_changelist.exactMatch(s): self.currentChangelist = unicode(self.rx_changelist.cap(1)) if self.currentChangelist not in self.changeListsDict: self.changeListsDict[self.currentChangelist] = [] def __readStderr(self): """ Private slot to handle the readyReadStandardError signal. It reads the error output of the process and inserts it into the error pane. """ if self.process is not None: self.errorGroup.show() s = QString(self.process.readAllStandardError()) self.errors.insertPlainText(s) self.errors.ensureCursorVisible() def on_passwordCheckBox_toggled(self, isOn): """ Private slot to handle the password checkbox toggled. @param isOn flag indicating the status of the check box (boolean) """ if isOn: self.input.setEchoMode(QLineEdit.Password) else: self.input.setEchoMode(QLineEdit.Normal) @pyqtSignature("") def on_sendButton_clicked(self): """ Private slot to send the input to the subversion process. """ input = self.input.text() input += os.linesep if self.passwordCheckBox.isChecked(): self.errors.insertPlainText(os.linesep) self.errors.ensureCursorVisible() else: self.errors.insertPlainText(input) self.errors.ensureCursorVisible() self.process.write(input) self.passwordCheckBox.setChecked(False) self.input.clear() def on_input_returnPressed(self): """ Private slot to handle the press of the return key in the input field. """ self.intercept = True self.on_sendButton_clicked() def keyPressEvent(self, evt): """ Protected slot to handle a key press event. @param evt the key press event (QKeyEvent) """ if self.intercept: self.intercept = False evt.accept() return QDialog.keyPressEvent(self, evt) eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/SvnOptionsDialog.py0000644000175000001440000000013212261012650026711 xustar000000000000000030 mtime=1388582312.103078383 30 atime=1389081082.865724398 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/SvnOptionsDialog.py0000644000175000001440000001020412261012650026440 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2002 - 2014 Detlev Offenbach # """ Module implementing a dialog to enter options used to start a project in the VCS. """ import os from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQFileDialog from E4Gui.E4Completers import E4DirCompleter from SvnRepoBrowserDialog import SvnRepoBrowserDialog from Ui_SvnOptionsDialog import Ui_SvnOptionsDialog from Config import ConfigSvnProtocols import Utilities class SvnOptionsDialog(QDialog, Ui_SvnOptionsDialog): """ Class implementing a dialog to enter options used to start a project in the repository. """ def __init__(self, vcs, project, parent = None): """ Constructor @param vcs reference to the version control object @param project reference to the project object @param parent parent widget (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.vcsDirectoryCompleter = E4DirCompleter(self.vcsUrlEdit) self.project = project self.protocolCombo.addItems(ConfigSvnProtocols) hd = Utilities.toNativeSeparators(QDir.homePath()) hd = os.path.join(unicode(hd), 'subversionroot') self.vcsUrlEdit.setText(hd) self.vcs = vcs self.localPath = unicode(hd) self.networkPath = "localhost/" self.localProtocol = True @pyqtSignature("") def on_vcsUrlButton_clicked(self): """ Private slot to display a selection dialog. """ if self.protocolCombo.currentText() == "file://": directory = KQFileDialog.getExistingDirectory(\ self, self.trUtf8("Select Repository-Directory"), self.vcsUrlEdit.text(), QFileDialog.Options(QFileDialog.ShowDirsOnly)) if not directory.isEmpty(): self.vcsUrlEdit.setText(Utilities.toNativeSeparators(directory)) else: dlg = SvnRepoBrowserDialog(self.vcs, mode = "select", parent = self) dlg.start(self.protocolCombo.currentText() + self.vcsUrlEdit.text()) if dlg.exec_() == QDialog.Accepted: url = dlg.getSelectedUrl() if not url.isEmpty(): protocol = url.section("://", 0, 0) path = url.section("://", 1, 1) self.protocolCombo.setCurrentIndex(\ self.protocolCombo.findText(protocol + "://")) self.vcsUrlEdit.setText(path) @pyqtSignature("QString") def on_protocolCombo_activated(self, protocol): """ Private slot to switch the status of the directory selection button. """ if str(protocol) == "file://": self.networkPath = unicode(self.vcsUrlEdit.text()) self.vcsUrlEdit.setText(self.localPath) self.vcsUrlLabel.setText(self.trUtf8("Pat&h:")) self.localProtocol = True else: if self.localProtocol: self.localPath = unicode(self.vcsUrlEdit.text()) self.vcsUrlEdit.setText(self.networkPath) self.vcsUrlLabel.setText(self.trUtf8("&URL:")) self.localProtocol = False @pyqtSlot(str) def on_vcsUrlEdit_textChanged(self, txt): """ Private slot to handle changes of the URL. @param txt current text of the line edit (QString) """ enable = not txt.contains("://") self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(enable) def getData(self): """ Public slot to retrieve the data entered into the dialog. @return a dictionary containing the data entered """ scheme = str(self.protocolCombo.currentText()) url = unicode(self.vcsUrlEdit.text()) vcsdatadict = { "url" : '%s%s' % (scheme, url), "message" : unicode(self.vcsLogEdit.text()), "standardLayout" : self.layoutCheckBox.isChecked(), } return vcsdatadict eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/subversion.py0000644000175000001440000000013212261012650025646 xustar000000000000000030 mtime=1388582312.116078548 30 atime=1389081082.865724398 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/subversion.py0000644000175000001440000023732412261012650025413 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Module implementing the version control systems interface to Subversion. """ import os import shutil import types import urllib from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQMessageBox, KQInputDialog from KdeQt.KQApplication import e4App from VCS.VersionControl import VersionControl from SvnDialog import SvnDialog from SvnCommitDialog import SvnCommitDialog from SvnLogDialog import SvnLogDialog from SvnLogBrowserDialog import SvnLogBrowserDialog from SvnDiffDialog import SvnDiffDialog from SvnRevisionSelectionDialog import SvnRevisionSelectionDialog from SvnStatusDialog import SvnStatusDialog from SvnTagDialog import SvnTagDialog from SvnTagBranchListDialog import SvnTagBranchListDialog from SvnCopyDialog import SvnCopyDialog from SvnCommandDialog import SvnCommandDialog from SvnSwitchDialog import SvnSwitchDialog from SvnMergeDialog import SvnMergeDialog from SvnPropListDialog import SvnPropListDialog from SvnPropSetDialog import SvnPropSetDialog from SvnOptionsDialog import SvnOptionsDialog from SvnNewProjectOptionsDialog import SvnNewProjectOptionsDialog from SvnBlameDialog import SvnBlameDialog from SvnRelocateDialog import SvnRelocateDialog from SvnUrlSelectionDialog import SvnUrlSelectionDialog from SvnRepoBrowserDialog import SvnRepoBrowserDialog from .SvnChangeListsDialog import SvnChangeListsDialog from SvnStatusMonitorThread import SvnStatusMonitorThread from SvnUtilities import getConfigPath, amendConfig, createDefaultConfig from ProjectBrowserHelper import SvnProjectBrowserHelper from ProjectHelper import SvnProjectHelper import Preferences import Utilities class Subversion(VersionControl): """ Class implementing the version control systems interface to Subversion. @signal committed() emitted after the commit action has completed """ def __init__(self, plugin, parent=None, name=None): """ Constructor @param plugin reference to the plugin object @param parent parent widget (QWidget) @param name name of this object (string or QString) """ VersionControl.__init__(self, parent, name) self.defaultOptions = { 'global' : [''], 'commit' : [''], 'checkout' : [''], 'update' : [''], 'add' : [''], 'remove' : [''], 'diff' : [''], 'log' : [''], 'history' : [''], 'status' : [''], 'tag' : [''], 'export' : [''] } self.interestingDataKeys = [ "standardLayout", ] self.__plugin = plugin self.__ui = parent self.options = self.defaultOptions self.otherData["standardLayout"] = True self.tagsList = QStringList() self.branchesList = QStringList() self.allTagsBranchesList = QStringList() self.mergeList = [QStringList(), QStringList(), QStringList()] self.showedTags = False self.showedBranches = False self.tagTypeList = QStringList() self.tagTypeList.append('tags') self.tagTypeList.append('branches') self.commandHistory = QStringList() self.wdHistory = QStringList() if os.environ.has_key("SVN_ASP_DOT_NET_HACK"): self.adminDir = '_svn' else: self.adminDir = '.svn' self.log = None self.diff = None self.status = None self.propList = None self.tagbranchList = None self.blame = None self.repoBrowser = None # regular expression object for evaluation of the status output self.rx_status1 = QRegExp('(.{8})\\s+([0-9-]+)\\s+([0-9?]+)\\s+(\\S+)\\s+(.+)') self.rx_status2 = QRegExp('(.{8})\\s+(.+)\\s*') self.statusCache = {} self.__commitData = {} self.__commitDialog = None self.__wcng = True # assume new generation working copy metadata format def getPlugin(self): """ Public method to get a reference to the plugin object. @return reference to the plugin object (VcsSubversionPlugin) """ return self.__plugin def vcsShutdown(self): """ Public method used to shutdown the Subversion interface. """ if self.log is not None: self.log.close() if self.diff is not None: self.diff.close() if self.status is not None: self.status.close() if self.propList is not None: self.propList.close() if self.tagbranchList is not None: self.tagbranchList.close() if self.blame is not None: self.blame.close() if self.repoBrowser is not None: self.repoBrowser.close() def vcsExists(self): """ Public method used to test for the presence of the svn executable. @return flag indicating the existance (boolean) and an error message (QString) """ self.versionStr = '' errMsg = QString() ioEncoding = str(Preferences.getSystem("IOEncoding")) process = QProcess() process.start('svn', QStringList('--version')) procStarted = process.waitForStarted() if procStarted: finished = process.waitForFinished(30000) if finished and process.exitCode() == 0: output = \ unicode(process.readAllStandardOutput(), ioEncoding, 'replace') self.versionStr = output.split()[2] return True, errMsg else: if finished: errMsg = \ self.trUtf8("The svn process finished with the exit code %1")\ .arg(process.exitCode()) else: errMsg = self.trUtf8("The svn process did not finish within 30s.") else: errMsg = self.trUtf8("Could not start the svn executable.") return False, errMsg def vcsInit(self, vcsDir, noDialog = False): """ Public method used to initialize the subversion repository. The subversion repository has to be initialized from outside eric4 because the respective command always works locally. Therefore we always return TRUE without doing anything. @param vcsDir name of the VCS directory (string) @param noDialog flag indicating quiet operations (boolean) @return always TRUE """ return True def vcsConvertProject(self, vcsDataDict, project): """ Public method to convert an uncontrolled project to a version controlled project. @param vcsDataDict dictionary of data required for the conversion @param project reference to the project object """ success = self.vcsImport(vcsDataDict, project.ppath)[0] if not success: KQMessageBox.critical(None, self.trUtf8("Create project in repository"), self.trUtf8("""The project could not be created in the repository.""" """ Maybe the given repository doesn't exist or the""" """ repository server is down.""")) else: cwdIsPpath = False if os.getcwd() == project.ppath: os.chdir(os.path.dirname(project.ppath)) cwdIsPpath = True tmpProjectDir = "%s_tmp" % project.ppath shutil.rmtree(tmpProjectDir, True) os.rename(project.ppath, tmpProjectDir) os.makedirs(project.ppath) self.vcsCheckout(vcsDataDict, project.ppath) if cwdIsPpath: os.chdir(project.ppath) self.vcsCommit(project.ppath, vcsDataDict["message"], True) pfn = project.pfile if not os.path.isfile(pfn): pfn += "z" if not os.path.isfile(pfn): KQMessageBox.critical(None, self.trUtf8("New project"), self.trUtf8("""The project could not be checked out of the""" """ repository.
    """ """Restoring the original contents.""")) if os.getcwd() == project.ppath: os.chdir(os.path.dirname(project.ppath)) cwdIsPpath = True else: cwdIsPpath = False shutil.rmtree(project.ppath, True) os.rename(tmpProjectDir, project.ppath) project.pdata["VCS"] = ['None'] project.vcs = None project.setDirty(True) project.saveProject() project.closeProject() return shutil.rmtree(tmpProjectDir, True) project.closeProject(noSave = True) project.openProject(pfn) def vcsImport(self, vcsDataDict, projectDir, noDialog = False): """ Public method used to import the project into the Subversion repository. @param vcsDataDict dictionary of data required for the import @param projectDir project directory (string) @param noDialog flag indicating quiet operations @return flag indicating an execution without errors (boolean) and a flag indicating the version controll status (boolean) """ noDialog = False msg = QString(vcsDataDict["message"]) if msg.isEmpty(): msg = QString('***') vcsDir = self.svnNormalizeURL(vcsDataDict["url"]) if vcsDir.startswith('/'): vcsDir = 'file://%s' % vcsDir elif vcsDir[1] in ['|', ':']: vcsDir = 'file:///%s' % vcsDir project = vcsDir[vcsDir.rfind('/')+1:] # create the dir structure to be imported into the repository tmpDir = '%s_tmp' % projectDir try: os.makedirs(tmpDir) if self.otherData["standardLayout"]: os.mkdir(os.path.join(tmpDir, project)) os.mkdir(os.path.join(tmpDir, project, 'branches')) os.mkdir(os.path.join(tmpDir, project, 'tags')) shutil.copytree(projectDir, os.path.join(tmpDir, project, 'trunk')) else: shutil.copytree(projectDir, os.path.join(tmpDir, project)) except OSError, e: if os.path.isdir(tmpDir): shutil.rmtree(tmpDir, True) return False, False args = QStringList() args.append('import') self.addArguments(args, self.options['global']) args.append('-m') args.append(msg) args.append(self.__svnURL(vcsDir)) if noDialog: status = self.startSynchronizedProcess(QProcess(), "svn", args, os.path.join(tmpDir, project)) else: dia = SvnDialog(self.trUtf8('Importing project into Subversion repository')) res = dia.startProcess(args, os.path.join(tmpDir, project)) if res: dia.exec_() status = dia.normalExit() shutil.rmtree(tmpDir, True) return status, False def vcsCheckout(self, vcsDataDict, projectDir, noDialog = False): """ Public method used to check the project out of the Subversion repository. @param vcsDataDict dictionary of data required for the checkout @param projectDir project directory to create (string) @param noDialog flag indicating quiet operations @return flag indicating an execution without errors (boolean) """ noDialog = False try: tag = vcsDataDict["tag"] except KeyError: tag = None vcsDir = self.svnNormalizeURL(vcsDataDict["url"]) if vcsDir.startswith('/'): vcsDir = 'file://%s' % vcsDir elif vcsDir[1] in ['|', ':']: vcsDir = 'file:///%s' % vcsDir if self.otherData["standardLayout"]: if tag is None or tag == '': svnUrl = '%s/trunk' % vcsDir else: if not tag.startswith('tags') and not tag.startswith('branches'): type, ok = KQInputDialog.getItem(\ None, self.trUtf8("Subversion Checkout"), self.trUtf8("The tag must be a normal tag (tags) or" " a branch tag (branches)." " Please select from the list."), self.tagTypeList, 0, False) if not ok: return False tag = '%s/%s' % (unicode(type), tag) svnUrl = '%s/%s' % (vcsDir, tag) else: svnUrl = vcsDir args = QStringList() args.append('checkout') self.addArguments(args, self.options['global']) self.addArguments(args, self.options['checkout']) args.append(self.__svnURL(svnUrl)) args.append(projectDir) if noDialog: return self.startSynchronizedProcess(QProcess(), 'svn', args) else: dia = SvnDialog(self.trUtf8('Checking project out of Subversion repository')) res = dia.startProcess(args) if res: dia.exec_() return dia.normalExit() def vcsExport(self, vcsDataDict, projectDir): """ Public method used to export a directory from the Subversion repository. @param vcsDataDict dictionary of data required for the checkout @param projectDir project directory to create (string) @return flag indicating an execution without errors (boolean) """ try: tag = vcsDataDict["tag"] except KeyError: tag = None vcsDir = self.svnNormalizeURL(vcsDataDict["url"]) if vcsDir.startswith('/') or vcsDir[1] == '|': vcsDir = 'file://%s' % vcsDir if self.otherData["standardLayout"]: if tag is None or tag == '': svnUrl = '%s/trunk' % vcsDir else: if not tag.startswith('tags') and not tag.startswith('branches'): type, ok = KQInputDialog.getItem(\ None, self.trUtf8("Subversion Export"), self.trUtf8("The tag must be a normal tag (tags) or" " a branch tag (branches)." " Please select from the list."), self.tagTypeList, 0, False) if not ok: return False tag = '%s/%s' % (unicode(type), tag) svnUrl = '%s/%s' % (vcsDir, tag) else: svnUrl = vcsDir args = QStringList() args.append('export') self.addArguments(args, self.options['global']) args.append("--force") args.append(self.__svnURL(svnUrl)) args.append(projectDir) dia = SvnDialog(self.trUtf8('Exporting project from Subversion repository')) res = dia.startProcess(args) if res: dia.exec_() return dia.normalExit() def vcsCommit(self, name, message, noDialog = False): """ Public method used to make the change of a file/directory permanent in the Subversion repository. @param name file/directory name to be committed (string or list of strings) @param message message for this operation (string) @param noDialog flag indicating quiet operations """ msg = QString(message) if not noDialog and msg.isEmpty(): # call CommitDialog and get message from there if self.__commitDialog is None: self.__commitDialog = SvnCommitDialog(self, self.__ui) self.connect(self.__commitDialog, SIGNAL("accepted()"), self.__vcsCommit_Step2) self.__commitDialog.show() self.__commitDialog.raise_() self.__commitDialog.activateWindow() self.__commitData["name"] = name self.__commitData["msg"] = msg self.__commitData["noDialog"] = noDialog if noDialog: self.__vcsCommit_Step2() def __vcsCommit_Step2(self): """ Private slot performing the second step of the commit action. """ name = self.__commitData["name"] msg = self.__commitData["msg"] noDialog = self.__commitData["noDialog"] if self.__commitDialog is not None: msg = self.__commitDialog.logMessage() if self.__commitDialog.hasChangelists(): changelists, keepChangelists = self.__commitDialog.changelistsData() else: changelists, keepChangelists = [], False self.disconnect(self.__commitDialog, SIGNAL("accepted()"), self.__vcsCommit_Step2) self.__commitDialog = None else: changelists, keepChangelists = QStringList(), False if msg.isEmpty(): msg = QString('***') args = QStringList() args.append('commit') self.addArguments(args, self.options['global']) self.addArguments(args, self.options['commit']) if keepChangelists: args.append("--keep-changelists") for changelist in changelists: args.append("--changelist") args.append(changelist) args.append("-m") args.append(msg) if type(name) is types.ListType: dname, fnames = self.splitPathList(name) self.addArguments(args, fnames) else: dname, fname = self.splitPath(name) args.append(fname) if self.svnGetReposName(dname).startswith('http') or \ self.svnGetReposName(dname).startswith('svn'): noDialog = False if noDialog: self.startSynchronizedProcess(QProcess(), "svn", args, dname) else: dia = SvnDialog(self.trUtf8('Commiting changes to Subversion repository')) res = dia.startProcess(args, dname) if res: dia.exec_() self.emit(SIGNAL("committed()")) self.checkVCSStatus() def vcsUpdate(self, name, noDialog = False): """ Public method used to update a file/directory with the Subversion repository. @param name file/directory name to be updated (string or list of strings) @param noDialog flag indicating quiet operations (boolean) @return flag indicating, that the update contained an add or delete (boolean) """ args = QStringList() args.append('update') self.addArguments(args, self.options['global']) self.addArguments(args, self.options['update']) if self.versionStr >= '1.5.0': args.append('--accept') args.append('postpone') if type(name) is types.ListType: dname, fnames = self.splitPathList(name) self.addArguments(args, fnames) else: dname, fname = self.splitPath(name) args.append(fname) if noDialog: self.startSynchronizedProcess(QProcess(), "svn", args, dname) res = False else: dia = SvnDialog(self.trUtf8('Synchronizing with the Subversion repository')) res = dia.startProcess(args, dname, True) if res: dia.exec_() res = dia.hasAddOrDelete() self.checkVCSStatus() return res def vcsAdd(self, name, isDir = False, noDialog = False): """ Public method used to add a file/directory to the Subversion repository. @param name file/directory name to be added (string) @param isDir flag indicating name is a directory (boolean) @param noDialog flag indicating quiet operations """ args = QStringList() args.append('add') self.addArguments(args, self.options['global']) self.addArguments(args, self.options['add']) args.append('--non-recursive') if noDialog and '--force' not in args: args.append('--force') if type(name) is types.ListType: if isDir: dname, fname = os.path.split(unicode(name[0])) else: dname, fnames = self.splitPathList(name) else: if isDir: dname, fname = os.path.split(unicode(name)) else: dname, fname = self.splitPath(name) tree = [] wdir = dname if self.__wcng: repodir = dname while not os.path.isdir(os.path.join(repodir, self.adminDir)): repodir = os.path.dirname(repodir) if os.path.splitdrive(repodir)[1] == os.sep: return # oops, project is not version controlled while os.path.normcase(dname) != os.path.normcase(repodir) and \ (os.path.normcase(dname) not in self.statusCache or \ self.statusCache[os.path.normcase(dname)] == self.canBeAdded): # add directories recursively, if they aren't in the repository already tree.insert(-1, dname) dname = os.path.dirname(dname) wdir = dname else: while not os.path.exists(os.path.join(dname, self.adminDir)): # add directories recursively, if they aren't in the repository already tree.insert(-1, dname) dname = os.path.dirname(dname) wdir = dname self.addArguments(args, tree) if type(name) is types.ListType: tree2 = [] for n in name: d = os.path.dirname(n) if self.__wcng: repodir = d while not os.path.isdir(os.path.join(repodir, self.adminDir)): repodir = os.path.dirname(repodir) if os.path.splitdrive(repodir)[1] == os.sep: return # oops, project is not version controlled while os.path.normcase(d) != os.path.normcase(repodir) and \ (d not in tree2 + tree) and \ (os.path.normcase(d) not in self.statusCache or \ self.statusCache[os.path.normcase(d)] == self.canBeAdded): tree2.append(d) d = os.path.dirname(d) else: while not os.path.exists(os.path.join(d, self.adminDir)): if d in tree2 + tree: break tree2.append(d) d = os.path.dirname(d) tree2.reverse() self.addArguments(args, tree2) self.addArguments(args, name) else: args.append(name) if noDialog: self.startSynchronizedProcess(QProcess(), "svn", args, wdir) else: dia = SvnDialog(\ self.trUtf8('Adding files/directories to the Subversion repository')) res = dia.startProcess(args, wdir) if res: dia.exec_() def vcsAddBinary(self, name, isDir = False): """ Public method used to add a file/directory in binary mode to the Subversion repository. @param name file/directory name to be added (string) @param isDir flag indicating name is a directory (boolean) """ self.vcsAdd(name, isDir) def vcsAddTree(self, path): """ Public method to add a directory tree rooted at path to the Subversion repository. @param path root directory of the tree to be added (string or list of strings)) """ args = QStringList() args.append('add') self.addArguments(args, self.options['global']) self.addArguments(args, self.options['add']) tree = [] if type(path) is types.ListType: dname, fnames = self.splitPathList(path) for n in path: d = os.path.dirname(n) if self.__wcng: repodir = d while not os.path.isdir(os.path.join(repodir, self.adminDir)): repodir = os.path.dirname(repodir) if os.path.splitdrive(repodir)[1] == os.sep: return # oops, project is not version controlled while os.path.normcase(d) != os.path.normcase(repodir) and \ (d not in tree) and \ (os.path.normcase(d) not in self.statusCache or \ self.statusCache[os.path.normcase(d)] == self.canBeAdded): tree.append(d) d = os.path.dirname(d) else: while not os.path.exists(os.path.join(d, self.adminDir)): # add directories recursively, # if they aren't in the repository already if d in tree: break tree.append(d) d = os.path.dirname(d) tree.reverse() else: dname, fname = os.path.split(unicode(path)) if self.__wcng: repodir = dname while not os.path.isdir(os.path.join(repodir, self.adminDir)): repodir = os.path.dirname(repodir) if os.path.splitdrive(repodir)[1] == os.sep: return # oops, project is not version controlled while os.path.normcase(dname) != os.path.normcase(repodir) and \ (os.path.normcase(dname) not in self.statusCache or \ self.statusCache[os.path.normcase(dname)] == self.canBeAdded): # add directories recursively, if they aren't in the repository already tree.insert(-1, dname) dname = os.path.dirname(dname) else: while not os.path.exists(os.path.join(dname, self.adminDir)): # add directories recursively, # if they aren't in the repository already tree.insert(-1, dname) dname = os.path.dirname(dname) if tree: self.vcsAdd(tree, True) if type(path) is types.ListType: self.addArguments(args, path) else: args.append(path) dia = SvnDialog(\ self.trUtf8('Adding directory trees to the Subversion repository')) res = dia.startProcess(args, dname) if res: dia.exec_() def vcsRemove(self, name, project = False, noDialog = False): """ Public method used to remove a file/directory from the Subversion repository. The default operation is to remove the local copy as well. @param name file/directory name to be removed (string or list of strings)) @param project flag indicating deletion of a project tree (boolean) (not needed) @param noDialog flag indicating quiet operations @return flag indicating successfull operation (boolean) """ args = QStringList() args.append('delete') self.addArguments(args, self.options['global']) self.addArguments(args, self.options['remove']) if noDialog and '--force' not in args: args.append('--force') if type(name) is types.ListType: self.addArguments(args, name) else: args.append(name) if noDialog: res = self.startSynchronizedProcess(QProcess(), "svn", args) else: dia = SvnDialog(\ self.trUtf8('Removing files/directories from the Subversion repository')) res = dia.startProcess(args) if res: dia.exec_() res = dia.normalExit() return res def vcsMove(self, name, project, target = None, noDialog = False): """ Public method used to move a file/directory. @param name file/directory name to be moved (string) @param project reference to the project object @param target new name of the file/directory (string) @param noDialog flag indicating quiet operations @return flag indicating successfull operation (boolean) """ rx_prot = QRegExp('(file:|svn:|svn+ssh:|http:|https:).+') opts = self.options['global'][:] force = '--force' in opts if force: del opts[opts.index('--force')] res = False if noDialog: if target is None: return False force = True accepted = True else: dlg = SvnCopyDialog(name, None, True, force) accepted = (dlg.exec_() == QDialog.Accepted) if accepted: target, force = dlg.getData() if not rx_prot.exactMatch(target): isDir = os.path.isdir(name) else: isDir = False if accepted: isdir = os.path.isdir(name) args = QStringList() args.append('move') self.addArguments(args, opts) if force: args.append('--force') if rx_prot.exactMatch(target): args.append('--message') args.append(QString('Moving %1 to %2').arg(name).arg(target)) target = self.__svnURL(target) else: target = unicode(target) args.append(name) args.append(target) if noDialog: res = self.startSynchronizedProcess(QProcess(), "svn", args) else: dia = SvnDialog(self.trUtf8('Moving %1') .arg(name)) res = dia.startProcess(args) if res: dia.exec_() res = dia.normalExit() if res and not rx_prot.exactMatch(target): if target.startswith(project.getProjectPath()): if isDir: project.moveDirectory(name, target) else: project.renameFileInPdata(name, target) else: if isDir: project.removeDirectory(name) else: project.removeFile(name) return res def vcsLog(self, name): """ Public method used to view the log of a file/directory from the Subversion repository. @param name file/directory name to show the log of (string) """ self.log = SvnLogDialog(self) self.log.show() self.log.start(name) def vcsDiff(self, name): """ Public method used to view the difference of a file/directory to the Subversion repository. If name is a directory and is the project directory, all project files are saved first. If name is a file (or list of files), which is/are being edited and has unsaved modification, they can be saved or the operation may be aborted. @param name file/directory name to be diffed (string) """ if type(name) is types.ListType: names = name[:] else: names = [name] for nam in names: if os.path.isfile(nam): editor = e4App().getObject("ViewManager").getOpenEditor(nam) if editor and not editor.checkDirty() : return else: project = e4App().getObject("Project") if nam == project.ppath and not project.saveAllScripts(): return self.diff = SvnDiffDialog(self) self.diff.show() QApplication.processEvents() self.diff.start(name) def vcsStatus(self, name): """ Public method used to view the status of files/directories in the Subversion repository. @param name file/directory name(s) to show the status of (string or list of strings) """ self.status = SvnStatusDialog(self) self.status.show() self.status.start(name) def vcsTag(self, name): """ Public method used to set the tag of a file/directory in the Subversion repository. @param name file/directory name to be tagged (string) """ dname, fname = self.splitPath(name) reposURL = self.svnGetReposName(dname) if reposURL is None: KQMessageBox.critical(None, self.trUtf8("Subversion Error"), self.trUtf8("""The URL of the project repository could not be""" """ retrieved from the working copy. The tag operation will""" """ be aborted""")) return if self.otherData["standardLayout"]: url = None else: url = self.svnNormalizeURL(reposURL) dlg = SvnTagDialog(self.allTagsBranchesList, url, self.otherData["standardLayout"]) if dlg.exec_() == QDialog.Accepted: tag, tagOp = dlg.getParameters() self.allTagsBranchesList.removeAll(tag) self.allTagsBranchesList.prepend(tag) else: return if self.otherData["standardLayout"]: rx_base = QRegExp('(.+)/(trunk|tags|branches).*') if not rx_base.exactMatch(reposURL): KQMessageBox.critical(None, self.trUtf8("Subversion Error"), self.trUtf8("""The URL of the project repository has an""" """ invalid format. The tag operation will""" """ be aborted""")) return reposRoot = unicode(rx_base.cap(1)) if tagOp in [1, 4]: url = '%s/tags/%s' % (reposRoot, urllib.quote(unicode(tag))) elif tagOp in [2, 8]: url = '%s/branches/%s' % (reposRoot, urllib.quote(unicode(tag))) else: url = self.__svnURL(unicode(tag)) args = QStringList() if tagOp in [1, 2]: args.append('copy') self.addArguments(args, self.options['global']) self.addArguments(args, self.options['tag']) args.append('--message') args.append('Created tag <%s>' % unicode(tag)) args.append(reposURL) args.append(url) else: args.append('delete') self.addArguments(args, self.options['global']) self.addArguments(args, self.options['tag']) args.append('--message') args.append('Deleted tag <%s>' % unicode(tag)) args.append(url) dia = SvnDialog(self.trUtf8('Tagging %1 in the Subversion repository') .arg(name)) res = dia.startProcess(args) if res: dia.exec_() def vcsRevert(self, name): """ Public method used to revert changes made to a file/directory. @param name file/directory name to be reverted (string) """ args = QStringList() args.append('revert') self.addArguments(args, self.options['global']) if type(name) is types.ListType: if len(name) == 1 and os.path.isdir(name[0]): args.append('--recursive') self.addArguments(args, name) else: if os.path.isdir(name): args.append('--recursive') args.append(name) dia = SvnDialog(self.trUtf8('Reverting changes')) res = dia.startProcess(args) if res: dia.exec_() self.checkVCSStatus() def vcsSwitch(self, name): """ Public method used to switch a directory to a different tag/branch. @param name directory name to be switched (string) """ dname, fname = self.splitPath(name) reposURL = self.svnGetReposName(dname) if reposURL is None: KQMessageBox.critical(None, self.trUtf8("Subversion Error"), self.trUtf8("""The URL of the project repository could not be""" """ retrieved from the working copy. The switch operation will""" """ be aborted""")) return if self.otherData["standardLayout"]: url = None else: url = self.svnNormalizeURL(reposURL) dlg = SvnSwitchDialog(self.allTagsBranchesList, url, self.otherData["standardLayout"]) if dlg.exec_() == QDialog.Accepted: tag, tagType = dlg.getParameters() self.allTagsBranchesList.removeAll(tag) self.allTagsBranchesList.prepend(tag) else: return if self.otherData["standardLayout"]: rx_base = QRegExp('(.+)/(trunk|tags|branches).*') if not rx_base.exactMatch(reposURL): KQMessageBox.critical(None, self.trUtf8("Subversion Error"), self.trUtf8("""The URL of the project repository has an""" """ invalid format. The switch operation will""" """ be aborted""")) return reposRoot = unicode(rx_base.cap(1)) tn = tag if tagType == 1: url = '%s/tags/%s' % (reposRoot, urllib.quote(unicode(tag))) elif tagType == 2: url = '%s/branches/%s' % (reposRoot, urllib.quote(unicode(tag))) elif tagType == 4: url = '%s/trunk' % (reposRoot) tn = QString('HEAD') else: url = self.__svnURL(unicode(tag)) tn = url args = QStringList() args.append('switch') if self.versionStr >= '1.5.0': args.append('--accept') args.append('postpone') args.append(url) args.append(name) dia = SvnDialog(self.trUtf8('Switching to %1') .arg(tn)) res = dia.startProcess(args) if res: dia.exec_() def vcsMerge(self, name): """ Public method used to merge a URL/revision into the local project. @param name file/directory name to be merged (string) """ dname, fname = self.splitPath(name) opts = self.options['global'][:] force = '--force' in opts if force: del opts[opts.index('--force')] dlg = SvnMergeDialog(self.mergeList[0], self.mergeList[1], self.mergeList[2], force) if dlg.exec_() == QDialog.Accepted: urlrev1, urlrev2, target, force = dlg.getParameters() else: return # remember URL or revision self.mergeList[0].removeAll(urlrev1) self.mergeList[0].prepend(urlrev1) self.mergeList[1].removeAll(urlrev2) self.mergeList[1].prepend(urlrev2) rx_rev = QRegExp('\\d+|HEAD') args = QStringList() args.append('merge') self.addArguments(args, opts) if self.versionStr >= '1.5.0': args.append('--accept') args.append('postpone') if force: args.append('--force') if rx_rev.exactMatch(urlrev1): args.append('-r') args.append(QString('%1:%2').arg(urlrev1).arg(urlrev2)) if target.isEmpty(): args.append(name) else: args.append(target) # remember target self.mergeList[2].removeAll(target) self.mergeList[2].prepend(target) else: args.append(self.__svnURL(urlrev1)) args.append(self.__svnURL(urlrev2)) args.append(fname) dia = SvnDialog(self.trUtf8('Merging %1').arg(name)) res = dia.startProcess(args, dname) if res: dia.exec_() def vcsRegisteredState(self, name): """ Public method used to get the registered state of a file in the vcs. @param name filename to check (string or QString) @return a combination of canBeCommited and canBeAdded """ if self.__wcng: return self.__vcsRegisteredState_wcng(name) else: return self.__vcsRegisteredState_wc(name) def __vcsRegisteredState_wcng(self, name): """ Private method used to get the registered state of a file in the vcs. This is the variant for subversion installations using the new working copy meta-data format. @param name filename to check (string or QString) @return a combination of canBeCommited and canBeAdded """ name = unicode(name) if name.endswith(os.sep): name = name[:-1] name = os.path.normcase(name) dname, fname = self.splitPath(name) if fname == '.' and os.path.isdir(os.path.join(dname, self.adminDir)): return self.canBeCommitted if name in self.statusCache: return self.statusCache[name] name = os.path.normcase(unicode(name)) states = { name : 0 } states = self.vcsAllRegisteredStates(states, dname, False) if states[name] == self.canBeCommitted: return self.canBeCommitted else: return self.canBeAdded def __vcsRegisteredState_wc(self, name): """ Private method used to get the registered state of a file in the vcs. This is the variant for subversion installations using the old working copy meta-data format. @param name filename to check (string or QString) @return a combination of canBeCommited and canBeAdded """ dname, fname = self.splitPath(name) if fname == '.': if os.path.isdir(os.path.join(dname, self.adminDir)): return self.canBeCommitted else: return self.canBeAdded name = os.path.normcase(unicode(name)) states = { name : 0 } states = self.vcsAllRegisteredStates(states, dname, False) if states[name] == self.canBeCommitted: return self.canBeCommitted else: return self.canBeAdded def vcsAllRegisteredStates(self, names, dname, shortcut = True): """ Public method used to get the registered states of a number of files in the vcs. Note: If a shortcut is to be taken, the code will only check, if the named directory has been scanned already. If so, it is assumed, that the states for all files has been populated by the previous run. @param names dictionary with all filenames to be checked as keys @param dname directory to check in (string) @param shortcut flag indicating a shortcut should be taken (boolean) @return the received dictionary completed with a combination of canBeCommited and canBeAdded or None in order to signal an error """ if self.__wcng: return self.__vcsAllRegisteredStates_wcng(names, dname, shortcut) else: return self.__vcsAllRegisteredStates_wc(names, dname, shortcut) def __vcsAllRegisteredStates_wcng(self, names, dname, shortcut = True): """ Private method used to get the registered states of a number of files in the vcs. This is the variant for subversion installations using the new working copy meta-data format. Note: If a shortcut is to be taken, the code will only check, if the named directory has been scanned already. If so, it is assumed, that the states for all files has been populated by the previous run. @param names dictionary with all filenames to be checked as keys @param dname directory to check in (string) @param shortcut flag indicating a shortcut should be taken (boolean) @return the received dictionary completed with a combination of canBeCommited and canBeAdded or None in order to signal an error """ dname = unicode(dname) if dname.endswith(os.sep): dname = dname[:-1] dname = os.path.normcase(dname) found = False for name in self.statusCache.keys(): if names.has_key(name): found = True names[name] = self.statusCache[name] if not found: # find the root of the repo repodir = dname while not os.path.isdir(os.path.join(repodir, self.adminDir)): repodir = os.path.dirname(repodir) if os.path.splitdrive(repodir)[1] == os.sep: return names ioEncoding = str(Preferences.getSystem("IOEncoding")) process = QProcess() args = QStringList() args.append('status') args.append('--verbose') args.append('--non-interactive') args.append(dname) process.start('svn', args) procStarted = process.waitForStarted() if procStarted: finished = process.waitForFinished(30000) if finished and process.exitCode() == 0: output = \ unicode(process.readAllStandardOutput(), ioEncoding, 'replace') for line in output.splitlines(): if self.rx_status1.exactMatch(line): flags = str(self.rx_status1.cap(1)) path = self.rx_status1.cap(5).trimmed() elif self.rx_status2.exactMatch(line): flags = str(self.rx_status2.cap(1)) path = self.rx_status2.cap(2).trimmed() else: continue name = os.path.normcase(unicode(path)) if flags[0] not in "?I": if names.has_key(name): names[name] = self.canBeCommitted self.statusCache[name] = self.canBeCommitted else: self.statusCache[name] = self.canBeAdded return names def __vcsAllRegisteredStates_wc(self, names, dname, shortcut = True): """ Private method used to get the registered states of a number of files in the vcs. This is the variant for subversion installations using the old working copy meta-data format. Note: If a shortcut is to be taken, the code will only check, if the named directory has been scanned already. If so, it is assumed, that the states for all files has been populated by the previous run. @param names dictionary with all filenames to be checked as keys @param dname directory to check in (string) @param shortcut flag indicating a shortcut should be taken (boolean) @return the received dictionary completed with a combination of canBeCommited and canBeAdded or None in order to signal an error """ dname = unicode(dname) if not os.path.isdir(os.path.join(dname, self.adminDir)): # not under version control -> do nothing return names found = False for name in self.statusCache.keys(): if os.path.dirname(name) == dname: if shortcut: found = True break if names.has_key(name): found = True names[name] = self.statusCache[name] if not found: ioEncoding = str(Preferences.getSystem("IOEncoding")) process = QProcess() args = QStringList() args.append('status') args.append('--verbose') args.append('--non-interactive') args.append(dname) process.start('svn', args) procStarted = process.waitForStarted() if procStarted: finished = process.waitForFinished(30000) if finished and process.exitCode() == 0: output = \ unicode(process.readAllStandardOutput(), ioEncoding, 'replace') for line in output.splitlines(): if self.rx_status1.exactMatch(line): flags = str(self.rx_status1.cap(1)) path = self.rx_status1.cap(5).trimmed() elif self.rx_status2.exactMatch(line): flags = str(self.rx_status2.cap(1)) path = self.rx_status2.cap(2).trimmed() else: continue name = os.path.normcase(unicode(path)) if flags[0] not in "?I": if names.has_key(name): names[name] = self.canBeCommitted self.statusCache[name] = self.canBeCommitted else: self.statusCache[name] = self.canBeAdded return names def clearStatusCache(self): """ Public method to clear the status cache. """ self.statusCache = {} def vcsInitConfig(self, project): """ Public method to initialize the VCS configuration. This method ensures, that eric specific files and directories are ignored. @param project reference to the project (Project) """ configPath = getConfigPath() if os.path.exists(configPath): amendConfig() else: createDefaultConfig() def vcsName(self): """ Public method returning the name of the vcs. @return always 'Subversion' (string) """ return "Subversion" def vcsCleanup(self, name): """ Public method used to cleanup the working copy. @param name directory name to be cleaned up (string) """ args = QStringList() args.append('cleanup') self.addArguments(args, self.options['global']) args.append(name) dia = SvnDialog(self.trUtf8('Cleaning up %1') .arg(name)) res = dia.startProcess(args) if res: dia.exec_() def vcsCommandLine(self, name): """ Public method used to execute arbitrary subversion commands. @param name directory name of the working directory (string) """ dlg = SvnCommandDialog(self.commandHistory, self.wdHistory, name) if dlg.exec_() == QDialog.Accepted: command, wd = dlg.getData() commandList = Utilities.parseOptionString(command) # This moves any previous occurrence of these arguments to the head # of the list. self.commandHistory.removeAll(command) self.commandHistory.prepend(command) self.wdHistory.removeAll(wd) self.wdHistory.prepend(wd) args = QStringList() self.addArguments(args, commandList) dia = SvnDialog(self.trUtf8('Subversion command')) res = dia.startProcess(args, wd) if res: dia.exec_() def vcsOptionsDialog(self, project, archive, editable = False, parent = None): """ Public method to get a dialog to enter repository info. @param project reference to the project object @param archive name of the project in the repository (string) @param editable flag indicating that the project name is editable (boolean) @param parent parent widget (QWidget) """ return SvnOptionsDialog(self, project, parent) def vcsNewProjectOptionsDialog(self, parent = None): """ Public method to get a dialog to enter repository info for getting a new project. @param parent parent widget (QWidget) """ return SvnNewProjectOptionsDialog(self, parent) def vcsRepositoryInfos(self, ppath): """ Public method to retrieve information about the repository. @param ppath local path to get the repository infos (string) @return string with ready formated info for display (QString) """ info = {\ 'committed-rev' : '', 'committed-date' : '', 'committed-time' : '', 'url' : '', 'last-author' : '', 'revision' : '' } ioEncoding = str(Preferences.getSystem("IOEncoding")) process = QProcess() args = QStringList() args.append('info') args.append('--non-interactive') args.append('--xml') args.append(ppath) process.start('svn', args) procStarted = process.waitForStarted() if procStarted: finished = process.waitForFinished(30000) if finished and process.exitCode() == 0: output = unicode(process.readAllStandardOutput(), ioEncoding, 'replace') entryFound = False commitFound = False for line in output.splitlines(): line = line.strip() if line.startswith(''): commitFound = False elif line.startswith("revision="): rev = line[line.find('"')+1:line.rfind('"')] if entryFound: info['revision'] = rev entryFound = False elif commitFound: info['committed-rev'] = rev elif line.startswith(''): info['url'] = \ line.replace('', '').replace('', '') elif line.startswith(''): info['last-author'] = \ line.replace('', '').replace('', '') elif line.startswith(''): value = line.replace('', '').replace('', '') date, time = value.split('T') info['committed-date'] = date info['committed-time'] = "%s%s" % (time.split('.')[0], time[-1]) return QString(QApplication.translate('subversion', """

    Repository information

    """ """""" """""" """""" """""" """""" """""" """""" """""" """
    Subversion V.%1
    URL%2
    Current revision%3
    Committed revision%4
    Committed date%5
    Comitted time%6
    Last author%7
    """ ))\ .arg(self.versionStr)\ .arg(info['url'])\ .arg(info['revision'])\ .arg(info['committed-rev'])\ .arg(info['committed-date'])\ .arg(info['committed-time'])\ .arg(info['last-author'])\ ############################################################################ ## Public Subversion specific methods are below. ############################################################################ def svnGetReposName(self, path): """ Public method used to retrieve the URL of the subversion repository path. @param path local path to get the svn repository path for (string) @return string with the repository path URL """ ioEncoding = str(Preferences.getSystem("IOEncoding")) process = QProcess() args = QStringList() args.append('info') args.append('--xml') args.append('--non-interactive') args.append(path) process.start('svn', args) procStarted = process.waitForStarted() if procStarted: finished = process.waitForFinished(30000) if finished and process.exitCode() == 0: output = unicode(process.readAllStandardOutput(), ioEncoding, 'replace') for line in output.splitlines(): line = line.strip() if line.startswith(''): reposURL = line.replace('', '').replace('', '') return reposURL return "" def svnResolve(self, name): """ Public method used to resolve conflicts of a file/directory. @param name file/directory name to be resolved (string) """ args = QStringList() if self.versionStr >= '1.5.0': args.append('resolve') args.append('--accept') args.append('working') else: args.append('resolved') self.addArguments(args, self.options['global']) if type(name) is types.ListType: self.addArguments(args, name) else: if os.path.isdir(name): args.append('--recursive') args.append(name) dia = SvnDialog(self.trUtf8('Resolving conficts')) res = dia.startProcess(args) if res: dia.exec_() self.checkVCSStatus() def svnCopy(self, name, project): """ Public method used to copy a file/directory. @param name file/directory name to be copied (string) @param project reference to the project object @return flag indicating successfull operation (boolean) """ rx_prot = QRegExp('(file:|svn:|svn+ssh:|http:|https:).+') dlg = SvnCopyDialog(name) res = False if dlg.exec_() == QDialog.Accepted: target, force = dlg.getData() args = QStringList() args.append('copy') self.addArguments(args, self.options['global']) if rx_prot.exactMatch(target): args.append('--message') args.append(QString('Copying %1 to %2').arg(name).arg(target)) target = self.__svnURL(target) else: target = unicode(target) args.append(name) args.append(target) dia = SvnDialog(self.trUtf8('Copying %1') .arg(name)) res = dia.startProcess(args) if res: dia.exec_() res = dia.normalExit() if res and \ not rx_prot.exactMatch(target) and \ target.startswith(project.getProjectPath()): if os.path.isdir(name): project.copyDirectory(name, target) else: project.appendFile(target) return res def svnListProps(self, name, recursive = False): """ Public method used to list the properties of a file/directory. @param name file/directory name (string or list of strings) @param recursive flag indicating a recursive list is requested """ self.propList = SvnPropListDialog(self) self.propList.show() self.propList.start(name, recursive) def svnSetProp(self, name, recursive = False): """ Public method used to add a property to a file/directory. @param name file/directory name (string or list of strings) @param recursive flag indicating a recursive list is requested """ dlg = SvnPropSetDialog() if dlg.exec_() == QDialog.Accepted: propName, fileFlag, propValue = dlg.getData() if propName.isEmpty(): KQMessageBox.critical(None, self.trUtf8("Subversion Set Property"), self.trUtf8("""You have to supply a property name. Aborting.""")) return args = QStringList() args.append('propset') self.addArguments(args, self.options['global']) if recursive: args.append('--recursive') args.append(propName) if fileFlag: args.append('--file') args.append(propValue) if type(name) is types.ListType: dname, fnames = self.splitPathList(name) self.addArguments(args, fnames) else: dname, fname = self.splitPath(name) args.append(fname) dia = SvnDialog(self.trUtf8('Subversion Set Property')) res = dia.startProcess(args, dname) if res: dia.exec_() def svnDelProp(self, name, recursive = False): """ Public method used to delete a property of a file/directory. @param name file/directory name (string or list of strings) @param recursive flag indicating a recursive list is requested """ propName, ok = KQInputDialog.getText(\ None, self.trUtf8("Subversion Delete Property"), self.trUtf8("Enter property name"), QLineEdit.Normal) if not ok: return if propName.isEmpty(): KQMessageBox.critical(None, self.trUtf8("Subversion Delete Property"), self.trUtf8("""You have to supply a property name. Aborting.""")) return args = QStringList() args.append('propdel') self.addArguments(args, self.options['global']) if recursive: args.append('--recursive') args.append(propName) if type(name) is types.ListType: dname, fnames = self.splitPathList(name) self.addArguments(args, fnames) else: dname, fname = self.splitPath(name) args.append(fname) dia = SvnDialog(self.trUtf8('Subversion Delete Property')) res = dia.startProcess(args, dname) if res: dia.exec_() def svnListTagBranch(self, path, tags = True): """ Public method used to list the available tags or branches. @param path directory name of the project (string) @param tags flag indicating listing of branches or tags (False = branches, True = tags) """ self.tagbranchList = SvnTagBranchListDialog(self) self.tagbranchList.show() if tags: if not self.showedTags: self.showedTags = True allTagsBranchesList = self.allTagsBranchesList else: self.tagsList = QStringList() allTagsBranchesList = None self.tagbranchList.start(path, tags, self.tagsList, allTagsBranchesList) elif not tags: if not self.showedBranches: self.showedBranches = True allTagsBranchesList = self.allTagsBranchesList else: self.branchesList = QStringList() allTagsBranchesList = None self.tagbranchList.start(path, tags, self.branchesList, self.allTagsBranchesList) def svnBlame(self, name): """ Public method to show the output of the svn blame command. @param name file name to show the blame for (string) """ self.blame = SvnBlameDialog(self) self.blame.show() self.blame.start(name) def svnExtendedDiff(self, name): """ Public method used to view the difference of a file/directory to the Subversion repository. If name is a directory and is the project directory, all project files are saved first. If name is a file (or list of files), which is/are being edited and has unsaved modification, they can be saved or the operation may be aborted. This method gives the chance to enter the revisions to be compared. @param name file/directory name to be diffed (string) """ if type(name) is types.ListType: names = name[:] else: names = [name] for nam in names: if os.path.isfile(nam): editor = e4App().getObject("ViewManager").getOpenEditor(nam) if editor and not editor.checkDirty() : return else: project = e4App().getObject("Project") if nam == project.ppath and not project.saveAllScripts(): return dlg = SvnRevisionSelectionDialog() if dlg.exec_() == QDialog.Accepted: revisions = dlg.getRevisions() self.diff = SvnDiffDialog(self) self.diff.show() self.diff.start(name, revisions) def svnUrlDiff(self, name): """ Public method used to view the difference of a file/directory of two repository URLs. If name is a directory and is the project directory, all project files are saved first. If name is a file (or list of files), which is/are being edited and has unsaved modification, they can be saved or the operation may be aborted. This method gives the chance to enter the revisions to be compared. @param name file/directory name to be diffed (string) """ if type(name) is types.ListType: names = name[:] else: names = [name] for nam in names: if os.path.isfile(nam): editor = e4App().getObject("ViewManager").getOpenEditor(nam) if editor and not editor.checkDirty() : return else: project = e4App().getObject("Project") if nam == project.ppath and not project.saveAllScripts(): return dname = self.splitPath(names[0])[0] dlg = SvnUrlSelectionDialog(self, self.tagsList, self.branchesList, dname) if dlg.exec_() == QDialog.Accepted: urls, summary = dlg.getURLs() self.diff = SvnDiffDialog(self) self.diff.show() QApplication.processEvents() self.diff.start(name, urls = urls, summary = summary) def svnLogLimited(self, name): """ Public method used to view the (limited) log of a file/directory from the Subversion repository. @param name file/directory name to show the log of (string) """ noEntries, ok = KQInputDialog.getInt(\ None, self.trUtf8("Subversion Log"), self.trUtf8("Select number of entries to show."), self.getPlugin().getPreferences("LogLimit"), 1, 999999, 1) if ok: self.log = SvnLogDialog(self) self.log.show() self.log.start(name, noEntries) def svnLogBrowser(self, path): """ Public method used to browse the log of a file/directory from the Subversion repository. @param path file/directory name to show the log of (string) """ self.logBrowser = SvnLogBrowserDialog(self) self.logBrowser.show() self.logBrowser.start(path) def svnLock(self, name, stealIt=False, parent=None): """ Public method used to lock a file in the Subversion repository. @param name file/directory name to be locked (string or list of strings) @param stealIt flag indicating a forced operation (boolean) @param parent reference to the parent object of the subversion dialog (QWidget) """ args = QStringList() args.append('lock') self.addArguments(args, self.options['global']) if stealIt: args.append('--force') if type(name) is types.ListType: dname, fnames = self.splitPathList(name) self.addArguments(args, fnames) else: dname, fname = self.splitPath(name) args.append(fname) dia = SvnDialog(self.trUtf8('Locking in the Subversion repository'), parent) res = dia.startProcess(args, dname) if res: dia.exec_() def svnUnlock(self, name, breakIt=False, parent=None): """ Public method used to unlock a file in the Subversion repository. @param name file/directory name to be unlocked (string or list of strings) @param breakIt flag indicating a forced operation (boolean) @param parent reference to the parent object of the subversion dialog (QWidget) """ args = QStringList() args.append('unlock') self.addArguments(args, self.options['global']) if breakIt: args.append('--force') if type(name) is types.ListType: dname, fnames = self.splitPathList(name) self.addArguments(args, fnames) else: dname, fname = self.splitPath(name) args.append(fname) dia = SvnDialog(self.trUtf8('Unlocking in the Subversion repository'), parent) res = dia.startProcess(args, dname) if res: dia.exec_() def svnRelocate(self, projectPath): """ Public method to relocate the working copy to a new repository URL. @param projectPath path name of the project (string) """ currUrl = self.svnGetReposName(projectPath) dlg = SvnRelocateDialog(currUrl) if dlg.exec_() == QDialog.Accepted: newUrl, inside = dlg.getData() args = QStringList() args.append('switch') if not inside: args.append('--relocate') args.append(currUrl) args.append(newUrl) args.append(projectPath) dia = SvnDialog(self.trUtf8('Relocating')) res = dia.startProcess(args) if res: dia.exec_() def svnRepoBrowser(self, projectPath = None): """ Public method to open the repository browser. @param projectPath path name of the project (string) """ if projectPath: url = self.svnGetReposName(projectPath) else: url = None if url is None: url, ok = KQInputDialog.getText(\ None, self.trUtf8("Repository Browser"), self.trUtf8("Enter the repository URL."), QLineEdit.Normal) if not ok or url.isEmpty(): return self.repoBrowser = SvnRepoBrowserDialog(self) self.repoBrowser.show() self.repoBrowser.start(url) def svnRemoveFromChangelist(self, names): """ Public method to remove a file or directory from its changelist. Note: Directories will be removed recursively. @param names name or list of names of file or directory to remove (string or QString) """ args = QStringList() args.append('changelist') self.addArguments(args, self.options['global']) args.append('--remove') args.append('--recursive') if type(names) is types.ListType: dname, fnames = self.splitPathList(names) self.addArguments(args, fnames) else: dname, fname = self.splitPath(names) args.append(fname) dia = SvnDialog(self.trUtf8('Remove from changelist')) res = dia.startProcess(args, dname) if res: dia.exec_() def svnAddToChangelist(self, names): """ Public method to add a file or directory to a changelist. Note: Directories will be added recursively. @param names name or list of names of file or directory to add (string or QString) """ clname, ok = KQInputDialog.getItem(\ None, self.trUtf8("Add to changelist"), self.trUtf8("Enter name of the changelist:"), sorted(self.svnGetChangelists()), 0, True) if not ok or clname.isEmpty(): return args = QStringList() args.append('changelist') self.addArguments(args, self.options['global']) args.append('--recursive') args.append(clname) if type(names) is types.ListType: dname, fnames = self.splitPathList(names) self.addArguments(args, fnames) else: dname, fname = self.splitPath(names) args.append(fname) dia = SvnDialog(self.trUtf8('Remove from changelist')) res = dia.startProcess(args, dname) if res: dia.exec_() def svnShowChangelists(self, path): """ Public method used to inspect the change lists defined for the project. @param path directory name to show change lists for (string) """ self.changeLists = SvnChangeListsDialog(self) self.changeLists.show() QApplication.processEvents() self.changeLists.start(path) def svnGetChangelists(self): """ Public method to get a list of all defined change lists. @return list of defined change list names (list of strings) """ changelists = [] rx_changelist = \ QRegExp('--- \\S+ .([\\w\\s]+).:\\s*') # three dashes, Changelist (translated), quote, # changelist name, quote, : args = [] args.append("status") args.append("--non-interactive") args.append(".") ppath = e4App().getObject("Project").getProjectPath() process = QProcess() process.setWorkingDirectory(ppath) process.start('svn', args) procStarted = process.waitForStarted() if procStarted: finished = process.waitForFinished(30000) if finished and process.exitCode() == 0: output = \ unicode(process.readAllStandardOutput(), Preferences.getSystem("IOEncoding"), 'replace') if output: for line in output.splitlines(): if rx_changelist.exactMatch(line): changelist = unicode(rx_changelist.cap(1)) if changelist not in changelists: changelists.append(changelist) return changelists ############################################################################ ## Private Subversion specific methods are below. ############################################################################ def __svnURL(self, url): """ Private method to format a url for subversion. @param url unformatted url string (string) @return properly formated url for subversion """ url = self.svnNormalizeURL(url) url = tuple(url.split(':', 2)) if len(url) == 3: scheme = url[0] host = url[1] port, path = url[2].split("/",1) return "%s:%s:%s/%s" % (scheme, host, port, urllib.quote(path)) else: scheme = url[0] if scheme == "file": return "%s:%s" % (scheme, urllib.quote(url[1])) else: try: host, path = url[1][2:].split("/", 1) except ValueError: host = url[1][2:] path = "" return "%s://%s/%s" % (scheme, host, urllib.quote(path)) def svnNormalizeURL(self, url): """ Public method to normalize a url for subversion. @param url url string (string) @return properly normalized url for subversion """ protocol, url = url.split("://", 1) if url.startswith("\\\\"): url = url[2:] if protocol == "file": url = os.path.normcase(url) url = url.replace('\\', '/') if url.endswith('/'): url = url[:-1] if not url.startswith("/") and url[1] in [":", "|"]: url = "/%s" % url return "%s://%s" % (protocol, url) ############################################################################ ## Methods to get the helper objects are below. ############################################################################ def vcsGetProjectBrowserHelper(self, browser, project, isTranslationsBrowser = False): """ Public method to instanciate a helper object for the different project browsers. @param browser reference to the project browser object @param project reference to the project object @param isTranslationsBrowser flag indicating, the helper is requested for the translations browser (this needs some special treatment) @return the project browser helper object """ return SvnProjectBrowserHelper(self, browser, project, isTranslationsBrowser) def vcsGetProjectHelper(self, project): """ Public method to instanciate a helper object for the project. @param project reference to the project object @return the project helper object """ helper = self.__plugin.getProjectHelper() helper.setObjects(self, project) self.__wcng = \ os.path.exists(os.path.join(project.getProjectPath(), ".svn", "format")) or \ os.path.exists(os.path.join(project.getProjectPath(), "_svn", "format")) or \ os.path.exists(os.path.join(project.getProjectPath(), ".svn", "wc.db")) or \ os.path.exists(os.path.join(project.getProjectPath(), "_svn", "wc.db")) return helper ############################################################################ ## Status Monitor Thread methods ############################################################################ def _createStatusMonitorThread(self, interval, project): """ Protected method to create an instance of the VCS status monitor thread. @param project reference to the project object @param interval check interval for the monitor thread in seconds (integer) @return reference to the monitor thread (QThread) """ return SvnStatusMonitorThread(interval, project.ppath, self) eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/SvnOptionsDialog.ui0000644000175000001440000000013012114635677026715 xustar000000000000000028 mtime=1362312127.3447767 30 atime=1389081082.876724398 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/SvnOptionsDialog.ui0000644000175000001440000001257712114635677026465 0ustar00detlevusers00000000000000 SvnOptionsDialog 0 0 565 167 Repository Infos <b>Repository Infos Dialog</b> <p>Enter the various infos into the entry fields. These values are used to generate a new project in the repository. If the checkbox is selected, the URL must end in the project name. A directory tree with project/tags, project/branches and project/trunk will be generated in the repository. If the checkbox is not selected, the URL must contain the complete path in the repository.</p> <p>For remote repositories the URL must contain the hostname.</p> true Log &Message: vcsLogEdit Select, if the standard repository layout (projectdir/trunk, projectdir/tags, projectdir/branches) should be generated Create standard repository &layout Alt+L true Select the protocol to access the repository Select the repository url via a directory selection dialog or the repository browser ... &URL: vcsUrlEdit Enter the log message for the new project. <b>Log Message</b> <p>Enter the log message to be used for the new project.</p> new project started &Protocol: protocolCombo Enter the url path of the module in the repository (without protocol part) <b>URL</b><p>Enter the URL to the module. For a repository with standard layout, this must not contain the trunk, tags or branches part.</p> Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok qPixmapFromMimeSource protocolCombo vcsUrlEdit vcsUrlButton vcsLogEdit layoutCheckBox buttonBox accepted() SvnOptionsDialog accept() 47 142 51 164 buttonBox rejected() SvnOptionsDialog reject() 204 146 205 165 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/SvnCopyDialog.py0000644000175000001440000000013212261012650026170 xustar000000000000000030 mtime=1388582312.136078801 30 atime=1389081082.877724398 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/SvnCopyDialog.py0000644000175000001440000000641412261012650025727 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Module implementing a dialog to enter the data for a copy operation. """ import os.path from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQFileDialog from E4Gui.E4Completers import E4FileCompleter, E4DirCompleter from Ui_SvnCopyDialog import Ui_SvnCopyDialog import Utilities class SvnCopyDialog(QDialog, Ui_SvnCopyDialog): """ Class implementing a dialog to enter the data for a copy or rename operation. """ def __init__(self, source, parent = None, move = False, force = False): """ Constructor @param source name of the source file/directory (QString) @param parent parent widget (QWidget) @param move flag indicating a move operation @param force flag indicating a forced operation (boolean) """ QDialog.__init__(self, parent) self.setupUi(self) self.source = source if os.path.isdir(self.source): self.targetCompleter = E4DirCompleter(self.targetEdit) else: self.targetCompleter = E4FileCompleter(self.targetEdit) if move: self.setWindowTitle(self.trUtf8('Subversion Move')) else: self.forceCheckBox.setEnabled(False) self.forceCheckBox.setChecked(force) self.sourceEdit.setText(source) self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(False) def getData(self): """ Public method to retrieve the copy data. @return the target name (QString) and a flag indicating the operation should be enforced (boolean) """ target = unicode(self.targetEdit.text()) if not os.path.isabs(target): sourceDir = os.path.dirname(unicode(self.sourceEdit.text())) target = os.path.join(sourceDir, target) return (QString(Utilities.toNativeSeparators(target)), self.forceCheckBox.isChecked()) @pyqtSignature("") def on_dirButton_clicked(self): """ Private slot to handle the button press for selecting the target via a selection dialog. """ if os.path.isdir(self.source): target = KQFileDialog.getExistingDirectory(\ None, self.trUtf8("Select target"), self.targetEdit.text(), QFileDialog.Options(QFileDialog.ShowDirsOnly)) else: target = KQFileDialog.getSaveFileName(\ None, self.trUtf8("Select target"), self.targetEdit.text(), QString(), None, QFileDialog.Options(QFileDialog.DontConfirmOverwrite)) if not target.isEmpty(): self.targetEdit.setText(Utilities.toNativeSeparators(target)) @pyqtSignature("QString") def on_targetEdit_textChanged(self, txt): """ Private slot to handle changes of the target. @param txt contents of the target edit (QString) """ txt = unicode(txt) self.buttonBox.button(QDialogButtonBox.Ok).setEnabled( os.path.isabs(txt) or os.path.dirname(txt) == "") eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/SvnStatusMonitorThread.py0000644000175000001440000000013212261012650030121 xustar000000000000000030 mtime=1388582312.167079195 30 atime=1389081082.877724398 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/SvnStatusMonitorThread.py0000644000175000001440000001146412261012650027661 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing the VCS status monitor thread class for Subversion. """ from PyQt4.QtCore import QRegExp, QProcess, QStringList, QString from VCS.StatusMonitorThread import VcsStatusMonitorThread import Preferences class SvnStatusMonitorThread(VcsStatusMonitorThread): """ Class implementing the VCS status monitor thread class for Subversion. """ def __init__(self, interval, projectDir, vcs, parent = None): """ Constructor @param interval new interval in seconds (integer) @param projectDir project directory to monitor (string or QString) @param vcs reference to the version control object @param parent reference to the parent object (QObject) """ VcsStatusMonitorThread.__init__(self, interval, projectDir, vcs, parent) self.__ioEncoding = str(Preferences.getSystem("IOEncoding")) self.rx_status1 = \ QRegExp('(.{8,9})\\s+([0-9-]+)\\s+(.+)\\s*') self.rx_status2 = \ QRegExp('(.{8,9})\\s+([0-9-]+)\\s+([0-9?]+)\\s+(\\S+)\\s+(.+)\\s*') def _performMonitor(self): """ Protected method implementing the monitoring action. This method populates the statusList member variable with a list of strings giving the status in the first column and the path relative to the project directory starting with the third column. The allowed status flags are:
    • "A" path was added but not yet comitted
    • "M" path has local changes
    • "O" path was removed
    • "R" path was deleted and then re-added
    • "U" path needs an update
    • "Z" path contains a conflict
    • " " path is back at normal
    @return tuple of flag indicating successful operation (boolean) and a status message in case of non successful operation (QString) """ self.shouldUpdate = False process = QProcess() args = QStringList() args.append('status') if not Preferences.getVCS("MonitorLocalStatus"): args.append('--show-updates') args.append('--non-interactive') args.append('.') process.setWorkingDirectory(self.projectDir) process.start('svn', args) procStarted = process.waitForStarted() if procStarted: finished = process.waitForFinished(300000) if finished and process.exitCode() == 0: output = \ unicode(process.readAllStandardOutput(), self.__ioEncoding, 'replace') states = {} for line in output.splitlines(): if self.rx_status1.exactMatch(line): flags = str(self.rx_status1.cap(1)) path = self.rx_status1.cap(3).trimmed() elif self.rx_status2.exactMatch(line): flags = str(self.rx_status2.cap(1)) path = self.rx_status2.cap(5).trimmed() else: continue if flags[0] in "ACDMR" or \ (flags[0] == " " and flags[-1] == "*"): if flags[-1] == "*": status = "U" else: status = flags[0] if status == "C": status = "Z" # give it highest priority elif status == "D": status = "O" if status == "U": self.shouldUpdate = True name = unicode(path) states[name] = status try: if self.reportedStates[name] != status: self.statusList.append("%s %s" % (status, name)) except KeyError: self.statusList.append("%s %s" % (status, name)) for name in self.reportedStates.keys(): if name not in states: self.statusList.append(" %s" % name) self.reportedStates = states return True, \ self.trUtf8("Subversion status checked successfully (using svn)") else: process.kill() process.waitForFinished() return False, QString(process.readAllStandardError()) else: process.kill() process.waitForFinished() return False, self.trUtf8("Could not start the Subversion process.") eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/SvnLogBrowserDialog.py0000644000175000001440000000013212261012650027343 xustar000000000000000030 mtime=1388582312.170079233 30 atime=1389081082.877724398 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/SvnLogBrowserDialog.py0000644000175000001440000005612112261012650027102 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing a dialog to browse the log history. """ import os from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQMessageBox from SvnDiffDialog import SvnDiffDialog from Ui_SvnLogBrowserDialog import Ui_SvnLogBrowserDialog import UI.PixmapCache import Preferences class SvnLogBrowserDialog(QDialog, Ui_SvnLogBrowserDialog): """ Class implementing a dialog to browse the log history. """ def __init__(self, vcs, parent = None): """ Constructor @param vcs reference to the vcs object @param parent parent widget (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.buttonBox.button(QDialogButtonBox.Close).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Cancel).setDefault(True) self.filesTree.headerItem().setText(self.filesTree.columnCount(), "") self.filesTree.header().setSortIndicator(0, Qt.AscendingOrder) self.vcs = vcs self.__maxDate = QDate() self.__minDate = QDate() self.__filterLogsEnabled = True self.fromDate.setDisplayFormat("yyyy-MM-dd") self.toDate.setDisplayFormat("yyyy-MM-dd") self.fromDate.setDate(QDate.currentDate()) self.toDate.setDate(QDate.currentDate()) self.fieldCombo.setCurrentIndex(self.fieldCombo.findText(self.trUtf8("Message"))) self.clearRxEditButton.setIcon(UI.PixmapCache.getIcon("clearLeft.png")) self.limitSpinBox.setValue(self.vcs.getPlugin().getPreferences("LogLimit")) self.stopCheckBox.setChecked(self.vcs.getPlugin().getPreferences("StopLogOnCopy")) self.__messageRole = Qt.UserRole self.__changesRole = Qt.UserRole + 1 self.process = QProcess() self.connect(self.process, SIGNAL('finished(int, QProcess::ExitStatus)'), self.__procFinished) self.connect(self.process, SIGNAL('readyReadStandardOutput()'), self.__readStdout) self.connect(self.process, SIGNAL('readyReadStandardError()'), self.__readStderr) self.rx_sep1 = QRegExp('\\-+\\s*') self.rx_sep2 = QRegExp('=+\\s*') self.rx_rev1 = QRegExp('rev ([0-9]+): ([^|]*) \| ([^|]*) \| ([0-9]+) .*') # "rev" followed by one or more decimals followed by a colon followed # anything up to " | " (twice) followed by one or more decimals followed # by anything self.rx_rev2 = QRegExp('r([0-9]+) \| ([^|]*) \| ([^|]*) \| ([0-9]+) .*') # "r" followed by one or more decimals followed by " | " followed # anything up to " | " (twice) followed by one or more decimals followed # by anything self.rx_flags1 = QRegExp(r""" ([ADM])\s(.*)\s+\(\w+\s+(.*):([0-9]+)\)\s*""") # three blanks followed by A or D or M followed by path followed by # path copied from followed by copied from revision self.rx_flags2 = QRegExp(' ([ADM]) (.*)\\s*') # three blanks followed by A or D or M followed by path self.flags = { 'A' : self.trUtf8('Added'), 'D' : self.trUtf8('Deleted'), 'M' : self.trUtf8('Modified'), 'R' : self.trUtf8('Replaced'), } self.buf = QStringList() # buffer for stdout self.diff = None self.__started = False self.__lastRev = 0 def closeEvent(self, e): """ Private slot implementing a close event handler. @param e close event (QCloseEvent) """ if self.process is not None and \ self.process.state() != QProcess.NotRunning: self.process.terminate() QTimer.singleShot(2000, self.process, SLOT('kill()')) self.process.waitForFinished(3000) e.accept() def __resizeColumnsLog(self): """ Private method to resize the log tree columns. """ self.logTree.header().resizeSections(QHeaderView.ResizeToContents) self.logTree.header().setStretchLastSection(True) def __resortLog(self): """ Private method to resort the log tree. """ self.logTree.sortItems(self.logTree.sortColumn(), self.logTree.header().sortIndicatorOrder()) def __resizeColumnsFiles(self): """ Private method to resize the changed files tree columns. """ self.filesTree.header().resizeSections(QHeaderView.ResizeToContents) self.filesTree.header().setStretchLastSection(True) def __resortFiles(self): """ Private method to resort the changed files tree. """ sortColumn = self.filesTree.sortColumn() self.filesTree.sortItems(1, self.filesTree.header().sortIndicatorOrder()) self.filesTree.sortItems(sortColumn, self.filesTree.header().sortIndicatorOrder()) def __generateLogItem(self, author, date, message, revision, changedPaths): """ Private method to generate a log tree entry. @param author author info (string or QString) @param date date info (string or QString) @param message text of the log message (QStringList) @param revision revision info (string or QString) @param changedPaths list of dictionary objects containing info about the changed files/directories @return reference to the generated item (QTreeWidgetItem) """ msg = QStringList() for line in message: msg.append(line.trimmed()) itm = QTreeWidgetItem(self.logTree) itm.setData(0, Qt.DisplayRole, int(revision)) itm.setData(1, Qt.DisplayRole, author) itm.setData(2, Qt.DisplayRole, date) itm.setData(3, Qt.DisplayRole, msg.join(" ")) itm.setData(0, self.__messageRole, QVariant(message)) itm.setData(0, self.__changesRole, QVariant(repr(changedPaths))) itm.setTextAlignment(0, Qt.AlignRight) itm.setTextAlignment(1, Qt.AlignLeft) itm.setTextAlignment(2, Qt.AlignLeft) itm.setTextAlignment(3, Qt.AlignLeft) itm.setTextAlignment(4, Qt.AlignLeft) try: self.__lastRev = int(revision) except ValueError: self.__lastRev = 0 return itm def __generateFileItem(self, action, path, copyFrom, copyRev): """ Private method to generate a changed files tree entry. @param action indicator for the change action ("A", "D" or "M") @param path path of the file in the repository (string or QString) @param copyFrom path the file was copied from (None, string or QString) @param copyRev revision the file was copied from (None, string or QString) @return reference to the generated item (QTreeWidgetItem) """ itm = QTreeWidgetItem(self.filesTree, QStringList() << self.flags[action] \ << path \ << copyFrom \ << copyRev ) itm.setTextAlignment(3, Qt.AlignRight) return itm def __getLogEntries(self, startRev = None): """ Private method to retrieve log entries from the repository. @param startRev revision number to start from (integer, string or QString) """ self.buttonBox.button(QDialogButtonBox.Close).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(True) self.buttonBox.button(QDialogButtonBox.Cancel).setDefault(True) QApplication.processEvents() QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) QApplication.processEvents() self.intercept = False self.process.kill() self.buf = QStringList() self.cancelled = False self.errors.clear() args = QStringList() args.append('log') self.vcs.addArguments(args, self.vcs.options['global']) self.vcs.addArguments(args, self.vcs.options['log']) args.append('--verbose') args.append('--limit') args.append('%d' % self.limitSpinBox.value()) if startRev is not None: args.append('--revision') args.append('%s:0' % startRev) if self.stopCheckBox.isChecked(): args.append('--stop-on-copy') args.append(self.fname) self.process.setWorkingDirectory(self.dname) self.inputGroup.setEnabled(True) self.inputGroup.show() self.process.start('svn', args) procStarted = self.process.waitForStarted() if not procStarted: self.inputGroup.setEnabled(False) self.inputGroup.hide() KQMessageBox.critical(None, self.trUtf8('Process Generation Error'), self.trUtf8( 'The process %1 could not be started. ' 'Ensure, that it is in the search path.' ).arg('svn')) def start(self, fn): """ Public slot to start the svn log command. @param fn filename to show the log for (string) """ self.filename = fn self.dname, self.fname = self.vcs.splitPath(fn) self.activateWindow() self.raise_() self.logTree.clear() self.__started = True self.__getLogEntries() def __procFinished(self, exitCode, exitStatus): """ Private slot connected to the finished signal. @param exitCode exit code of the process (integer) @param exitStatus exit status of the process (QProcess.ExitStatus) """ self.__processBuffer() self.__finish() def __finish(self): """ Private slot called when the process finished or the user pressed the button. """ if self.process is not None and \ self.process.state() != QProcess.NotRunning: self.process.terminate() QTimer.singleShot(2000, self.process, SLOT('kill()')) self.process.waitForFinished(3000) QApplication.restoreOverrideCursor() self.buttonBox.button(QDialogButtonBox.Close).setEnabled(True) self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Close).setDefault(True) self.inputGroup.setEnabled(False) self.inputGroup.hide() def __processBuffer(self): """ Private method to process the buffered output of the svn log command. """ ioEncoding = str(Preferences.getSystem("IOEncoding")) noEntries = 0 log = {"message" : QStringList()} changedPaths = [] for s in self.buf: if self.rx_rev1.exactMatch(s): log["revision"] = self.rx_rev.cap(1) log["author"] = self.rx_rev.cap(2) log["date"] = self.rx_rev.cap(3) # number of lines is ignored elif self.rx_rev2.exactMatch(s): log["revision"] = self.rx_rev2.cap(1) log["author"] = self.rx_rev2.cap(2) log["date"] = self.rx_rev2.cap(3) # number of lines is ignored elif self.rx_flags1.exactMatch(s): changedPaths.append({\ "action" : unicode(self.rx_flags1.cap(1).trimmed(), ioEncoding, 'replace'), "path" : unicode(self.rx_flags1.cap(2).trimmed(), ioEncoding, 'replace'), "copyfrom_path" : unicode(self.rx_flags1.cap(3).trimmed(), ioEncoding, 'replace'), "copyfrom_revision" : unicode(self.rx_flags1.cap(4).trimmed(), ioEncoding, 'replace'), }) elif self.rx_flags2.exactMatch(s): changedPaths.append({\ "action" : unicode(self.rx_flags2.cap(1).trimmed(), ioEncoding, 'replace'), "path" : unicode(self.rx_flags2.cap(2).trimmed(), ioEncoding, 'replace'), "copyfrom_path" : "", "copyfrom_revision" : "", }) elif self.rx_sep1.exactMatch(s) or self.rx_sep2.exactMatch(s): if len(log) > 1: self.__generateLogItem(log["author"], log["date"], log["message"], log["revision"], changedPaths) dt = QDate.fromString(log["date"], Qt.ISODate) if not self.__maxDate.isValid() and not self.__minDate.isValid(): self.__maxDate = dt self.__minDate = dt else: if self.__maxDate < dt: self.__maxDate = dt if self.__minDate > dt: self.__minDate = dt noEntries += 1 log = {"message" : QStringList()} changedPaths = [] else: if s.trimmed().endsWith(":") or s.trimmed().isEmpty(): continue else: log["message"].append(s) self.__resizeColumnsLog() self.__resortLog() if self.__started: self.logTree.setCurrentItem(self.logTree.topLevelItem(0)) self.__started = False if noEntries < self.limitSpinBox.value() and not self.cancelled: self.nextButton.setEnabled(False) self.limitSpinBox.setEnabled(False) self.__filterLogsEnabled = False self.fromDate.setMinimumDate(self.__minDate) self.fromDate.setMaximumDate(self.__maxDate) self.fromDate.setDate(self.__minDate) self.toDate.setMinimumDate(self.__minDate) self.toDate.setMaximumDate(self.__maxDate) self.toDate.setDate(self.__maxDate) self.__filterLogsEnabled = True self.__filterLogs() def __readStdout(self): """ Private slot to handle the readyReadStandardOutput signal. It reads the output of the process and inserts it into a buffer. """ self.process.setReadChannel(QProcess.StandardOutput) while self.process.canReadLine(): line = QString(self.process.readLine()) self.buf.append(line) def __readStderr(self): """ Private slot to handle the readyReadStandardError signal. It reads the error output of the process and inserts it into the error pane. """ if self.process is not None: s = QString(self.process.readAllStandardError()) self.errors.insertPlainText(s) self.errors.ensureCursorVisible() def __diffRevisions(self, rev1, rev2): """ Private method to do a diff of two revisions. @param rev1 first revision number (integer) @param rev2 second revision number (integer) """ if self.diff: self.diff.close() del self.diff self.diff = SvnDiffDialog(self.vcs) self.diff.show() self.diff.start(self.filename, [rev1, rev2]) def on_buttonBox_clicked(self, button): """ Private slot called by a button of the button box clicked. @param button button that was clicked (QAbstractButton) """ if button == self.buttonBox.button(QDialogButtonBox.Close): self.close() elif button == self.buttonBox.button(QDialogButtonBox.Cancel): self.cancelled = True self.__finish() @pyqtSignature("QTreeWidgetItem*, QTreeWidgetItem*") def on_logTree_currentItemChanged(self, current, previous): """ Private slot called, when the current item of the log tree changes. @param current reference to the new current item (QTreeWidgetItem) @param previous reference to the old current item (QTreeWidgetItem) """ self.messageEdit.clear() for line in current.data(0, self.__messageRole).toStringList(): self.messageEdit.append(line.trimmed()) self.filesTree.clear() changes = eval(unicode(current.data(0, self.__changesRole).toString())) if len(changes) > 0: for change in changes: self.__generateFileItem(change["action"], change["path"], change["copyfrom_path"], change["copyfrom_revision"]) self.__resizeColumnsFiles() self.__resortFiles() self.diffPreviousButton.setEnabled(\ current != self.logTree.topLevelItem(self.logTree.topLevelItemCount() - 1)) @pyqtSignature("") def on_logTree_itemSelectionChanged(self): """ Private slot called, when the selection has changed. """ self.diffRevisionsButton.setEnabled(len(self.logTree.selectedItems()) == 2) @pyqtSignature("") def on_nextButton_clicked(self): """ Private slot to handle the Next button. """ if self.__lastRev > 1: self.__getLogEntries(self.__lastRev - 1) @pyqtSignature("") def on_diffPreviousButton_clicked(self): """ Private slot to handle the Diff to Previous button. """ itm = self.logTree.currentItem() if itm is None: self.diffPreviousButton.setEnabled(False) return rev2 = int(itm.text(0)) itm = self.logTree.topLevelItem(self.logTree.indexOfTopLevelItem(itm) + 1) if itm is None: self.diffPreviousButton.setEnabled(False) return rev1 = int(itm.text(0)) self.__diffRevisions(rev1, rev2) @pyqtSignature("") def on_diffRevisionsButton_clicked(self): """ Private slot to handle the Compare Revisions button. """ items = self.logTree.selectedItems() if len(items) != 2: self.diffRevisionsButton.setEnabled(False) return rev2 = int(items[0].text(0)) rev1 = int(items[1].text(0)) self.__diffRevisions(min(rev1, rev2), max(rev1, rev2)) @pyqtSignature("QDate") def on_fromDate_dateChanged(self, date): """ Private slot called, when the from date changes. @param date new date (QDate) """ self.__filterLogs() @pyqtSignature("QDate") def on_toDate_dateChanged(self, date): """ Private slot called, when the from date changes. @param date new date (QDate) """ self.__filterLogs() @pyqtSignature("QString") def on_fieldCombo_activated(self, txt): """ Private slot called, when a new filter field is selected. @param txt text of the selected field (QString) """ self.__filterLogs() @pyqtSignature("QString") def on_rxEdit_textChanged(self, txt): """ Private slot called, when a filter expression is entered. @param txt filter expression (QString) """ self.__filterLogs() def __filterLogs(self): """ Private method to filter the log entries. """ if self.__filterLogsEnabled: from_ = self.fromDate.date().toString("yyyy-MM-dd") to_ = self.toDate.date().addDays(1).toString("yyyy-MM-dd") txt = self.fieldCombo.currentText() if txt == self.trUtf8("Author"): fieldIndex = 1 searchRx = QRegExp(self.rxEdit.text(), Qt.CaseInsensitive) elif txt == self.trUtf8("Revision"): fieldIndex = 0 txt = self.rxEdit.text() if txt.startsWith("^"): searchRx = QRegExp("^\s*%s" % txt[1:], Qt.CaseInsensitive) else: searchRx = QRegExp(txt, Qt.CaseInsensitive) else: fieldIndex = 3 searchRx = QRegExp(self.rxEdit.text(), Qt.CaseInsensitive) currentItem = self.logTree.currentItem() for topIndex in range(self.logTree.topLevelItemCount()): topItem = self.logTree.topLevelItem(topIndex) if topItem.text(2) <= to_ and topItem.text(2) >= from_ and \ topItem.text(fieldIndex).contains(searchRx): topItem.setHidden(False) if topItem is currentItem: self.on_logTree_currentItemChanged(topItem, None) else: topItem.setHidden(True) if topItem is currentItem: self.messageEdit.clear() self.filesTree.clear() @pyqtSignature("") def on_clearRxEditButton_clicked(self): """ Private slot called by a click of the clear RX edit button. """ self.rxEdit.clear() @pyqtSignature("bool") def on_stopCheckBox_clicked(self, checked): """ Private slot called, when the stop on copy/move checkbox is clicked """ self.vcs.getPlugin().setPreferences("StopLogOnCopy", int(self.stopCheckBox.isChecked())) self.nextButton.setEnabled(True) self.limitSpinBox.setEnabled(True) def on_passwordCheckBox_toggled(self, isOn): """ Private slot to handle the password checkbox toggled. @param isOn flag indicating the status of the check box (boolean) """ if isOn: self.input.setEchoMode(QLineEdit.Password) else: self.input.setEchoMode(QLineEdit.Normal) @pyqtSignature("") def on_sendButton_clicked(self): """ Private slot to send the input to the subversion process. """ input = self.input.text() input.append(os.linesep) if self.passwordCheckBox.isChecked(): self.errors.insertPlainText(os.linesep) self.errors.ensureCursorVisible() else: self.errors.insertPlainText(input) self.errors.ensureCursorVisible() self.process.write(input.toLocal8Bit()) self.passwordCheckBox.setChecked(False) self.input.clear() def on_input_returnPressed(self): """ Private slot to handle the press of the return key in the input field. """ self.intercept = True self.on_sendButton_clicked() def keyPressEvent(self, evt): """ Protected slot to handle a key press event. @param evt the key press event (QKeyEvent) """ if self.intercept: self.intercept = False evt.accept() return QWidget.keyPressEvent(self, evt) eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/SvnTagDialog.py0000644000175000001440000000013212261012650025771 xustar000000000000000030 mtime=1388582312.183079398 30 atime=1389081082.877724398 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/SvnTagDialog.py0000644000175000001440000000403612261012650025526 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Module implementing a dialog to enter the data for a tagging operation. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from Ui_SvnTagDialog import Ui_SvnTagDialog class SvnTagDialog(QDialog, Ui_SvnTagDialog): """ Class implementing a dialog to enter the data for a tagging operation. """ def __init__(self, taglist, reposURL, standardLayout, parent = None): """ Constructor @param taglist list of previously entered tags (QStringList) @param reposURL repository path (QString or string) or None @param standardLayout flag indicating the layout of the repository (boolean) @param parent parent widget (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.okButton = self.buttonBox.button(QDialogButtonBox.Ok) self.okButton.setEnabled(False) self.tagCombo.clear() self.tagCombo.addItems(taglist) if reposURL is not None and reposURL is not QString(): self.tagCombo.setEditText(reposURL) if not standardLayout: self.TagActionGroup.setEnabled(False) def on_tagCombo_editTextChanged(self, text): """ Private method used to enable/disable the OK-button. @param text ignored """ self.okButton.setDisabled(text.isEmpty()) def getParameters(self): """ Public method to retrieve the tag data. @return tuple of QString and int (tag, tag operation) """ tag = self.tagCombo.currentText() tagOp = 0 if self.createRegularButton.isChecked(): tagOp = 1 elif self.createBranchButton.isChecked(): tagOp = 2 elif self.deleteRegularButton.isChecked(): tagOp = 4 elif self.deleteBranchButton.isChecked(): tagOp = 8 return (tag, tagOp) eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/ProjectHelper.py0000644000175000001440000000013212261012650026215 xustar000000000000000030 mtime=1388582312.186079436 30 atime=1389081082.877724398 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/ProjectHelper.py0000644000175000001440000006104412261012650025754 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2005 - 2014 Detlev Offenbach # """ Module implementing the VCS project helper for Subversion. """ import os from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt.KQApplication import e4App from VCS.ProjectHelper import VcsProjectHelper from E4Gui.E4Action import E4Action import UI.PixmapCache class SvnProjectHelper(VcsProjectHelper): """ Class implementing the VCS project helper for Subversion. """ def __init__(self, vcsObject, projectObject, parent = None, name = None): """ Constructor @param vcsObject reference to the vcs object @param projectObject reference to the project object @param parent parent widget (QWidget) @param name name of this object (string or QString) """ VcsProjectHelper.__init__(self, vcsObject, projectObject, parent, name) def getActions(self): """ Public method to get a list of all actions. @return list of all actions (list of E4Action) """ return self.actions[:] def initActions(self): """ Public method to generate the action objects. """ self.vcsNewAct = E4Action(self.trUtf8('New from repository'), UI.PixmapCache.getIcon("vcsCheckout.png"), self.trUtf8('&New from repository...'), 0, 0, self, 'subversion_new') self.vcsNewAct.setStatusTip(self.trUtf8( 'Create a new project from the VCS repository' )) self.vcsNewAct.setWhatsThis(self.trUtf8( """New from repository""" """

    This creates a new local project from the VCS repository.

    """ )) self.connect(self.vcsNewAct, SIGNAL('triggered()'), self._vcsCheckout) self.actions.append(self.vcsNewAct) self.vcsUpdateAct = E4Action(self.trUtf8('Update from repository'), UI.PixmapCache.getIcon("vcsUpdate.png"), self.trUtf8('&Update from repository'), 0, 0, self, 'subversion_update') self.vcsUpdateAct.setStatusTip(self.trUtf8( 'Update the local project from the VCS repository' )) self.vcsUpdateAct.setWhatsThis(self.trUtf8( """Update from repository""" """

    This updates the local project from the VCS repository.

    """ )) self.connect(self.vcsUpdateAct, SIGNAL('triggered()'), self._vcsUpdate) self.actions.append(self.vcsUpdateAct) self.vcsCommitAct = E4Action(self.trUtf8('Commit changes to repository'), UI.PixmapCache.getIcon("vcsCommit.png"), self.trUtf8('&Commit changes to repository...'), 0, 0, self, 'subversion_commit') self.vcsCommitAct.setStatusTip(self.trUtf8( 'Commit changes to the local project to the VCS repository' )) self.vcsCommitAct.setWhatsThis(self.trUtf8( """Commit changes to repository""" """

    This commits changes to the local project to the VCS repository.

    """ )) self.connect(self.vcsCommitAct, SIGNAL('triggered()'), self._vcsCommit) self.actions.append(self.vcsCommitAct) self.vcsLogAct = E4Action(self.trUtf8('Show log'), UI.PixmapCache.getIcon("vcsLog.png"), self.trUtf8('Show &log'), 0, 0, self, 'subversion_log') self.vcsLogAct.setStatusTip(self.trUtf8( 'Show the log of the local project' )) self.vcsLogAct.setWhatsThis(self.trUtf8( """Show log""" """

    This shows the log of the local project.

    """ )) self.connect(self.vcsLogAct, SIGNAL('triggered()'), self._vcsLog) self.actions.append(self.vcsLogAct) self.svnLogLimitedAct = E4Action(self.trUtf8('Show limited log'), UI.PixmapCache.getIcon("vcsLog.png"), self.trUtf8('Show limited log'), 0, 0, self, 'subversion_log_limited') self.svnLogLimitedAct.setStatusTip(self.trUtf8( 'Show a limited log of the local project' )) self.svnLogLimitedAct.setWhatsThis(self.trUtf8( """Show limited log""" """

    This shows the log of the local project limited to a selectable""" """ number of entries.

    """ )) self.connect(self.svnLogLimitedAct, SIGNAL('triggered()'), self.__svnLogLimited) self.actions.append(self.svnLogLimitedAct) self.svnLogBrowserAct = E4Action(self.trUtf8('Show log browser'), UI.PixmapCache.getIcon("vcsLog.png"), self.trUtf8('Show log browser'), 0, 0, self, 'subversion_log_browser') self.svnLogBrowserAct.setStatusTip(self.trUtf8( 'Show a dialog to browse the log of the local project' )) self.svnLogBrowserAct.setWhatsThis(self.trUtf8( """Show log browser""" """

    This shows a dialog to browse the log of the local project.""" """ A limited number of entries is shown first. More can be""" """ retrieved later on.

    """ )) self.connect(self.svnLogBrowserAct, SIGNAL('triggered()'), self.__svnLogBrowser) self.actions.append(self.svnLogBrowserAct) self.vcsDiffAct = E4Action(self.trUtf8('Show difference'), UI.PixmapCache.getIcon("vcsDiff.png"), self.trUtf8('Show &difference'), 0, 0, self, 'subversion_diff') self.vcsDiffAct.setStatusTip(self.trUtf8( 'Show the difference of the local project to the repository' )) self.vcsDiffAct.setWhatsThis(self.trUtf8( """Show difference""" """

    This shows the difference of the local project to the repository.

    """ )) self.connect(self.vcsDiffAct, SIGNAL('triggered()'), self._vcsDiff) self.actions.append(self.vcsDiffAct) self.svnExtDiffAct = E4Action(self.trUtf8('Show difference (extended)'), UI.PixmapCache.getIcon("vcsDiff.png"), self.trUtf8('Show difference (extended)'), 0, 0, self, 'subversion_extendeddiff') self.svnExtDiffAct.setStatusTip(self.trUtf8( 'Show the difference of revisions of the project to the repository' )) self.svnExtDiffAct.setWhatsThis(self.trUtf8( """Show difference (extended)""" """

    This shows the difference of selectable revisions of the project.

    """ )) self.connect(self.svnExtDiffAct, SIGNAL('triggered()'), self.__svnExtendedDiff) self.actions.append(self.svnExtDiffAct) self.svnUrlDiffAct = E4Action(self.trUtf8('Show difference (URLs)'), UI.PixmapCache.getIcon("vcsDiff.png"), self.trUtf8('Show difference (URLs)'), 0, 0, self, 'subversion_urldiff') self.svnUrlDiffAct.setStatusTip(self.trUtf8( 'Show the difference of the project between two repository URLs' )) self.svnUrlDiffAct.setWhatsThis(self.trUtf8( """Show difference (URLs)""" """

    This shows the difference of the project between""" """ two repository URLs.

    """ )) self.connect(self.svnUrlDiffAct, SIGNAL('triggered()'), self.__svnUrlDiff) self.actions.append(self.svnUrlDiffAct) self.vcsStatusAct = E4Action(self.trUtf8('Show status'), UI.PixmapCache.getIcon("vcsStatus.png"), self.trUtf8('Show &status'), 0, 0, self, 'subversion_status') self.vcsStatusAct.setStatusTip(self.trUtf8( 'Show the status of the local project' )) self.vcsStatusAct.setWhatsThis(self.trUtf8( """Show status""" """

    This shows the status of the local project.

    """ )) self.connect(self.vcsStatusAct, SIGNAL('triggered()'), self._vcsStatus) self.actions.append(self.vcsStatusAct) self.svnChangeListsAct = E4Action(self.trUtf8('Show change lists'), UI.PixmapCache.getIcon("vcsChangeLists.png"), self.trUtf8('Show change lists'), 0, 0, self, 'subversion_changelists') self.svnChangeListsAct.setStatusTip(self.trUtf8( 'Show the change lists and associated files of the local project' )) self.svnChangeListsAct.setWhatsThis(self.trUtf8( """Show change lists""" """

    This shows the change lists and associated files of the""" """ local project.

    """ )) self.connect(self.svnChangeListsAct, SIGNAL('triggered()'), self.__svnChangeLists) self.actions.append(self.svnChangeListsAct) self.vcsTagAct = E4Action(self.trUtf8('Tag in repository'), UI.PixmapCache.getIcon("vcsTag.png"), self.trUtf8('&Tag in repository...'), 0, 0, self, 'subversion_tag') self.vcsTagAct.setStatusTip(self.trUtf8( 'Tag the local project in the repository' )) self.vcsTagAct.setWhatsThis(self.trUtf8( """Tag in repository""" """

    This tags the local project in the repository.

    """ )) self.connect(self.vcsTagAct, SIGNAL('triggered()'), self._vcsTag) self.actions.append(self.vcsTagAct) self.vcsExportAct = E4Action(self.trUtf8('Export from repository'), UI.PixmapCache.getIcon("vcsExport.png"), self.trUtf8('&Export from repository...'), 0, 0, self, 'subversion_export') self.vcsExportAct.setStatusTip(self.trUtf8( 'Export a project from the repository' )) self.vcsExportAct.setWhatsThis(self.trUtf8( """Export from repository""" """

    This exports a project from the repository.

    """ )) self.connect(self.vcsExportAct, SIGNAL('triggered()'), self._vcsExport) self.actions.append(self.vcsExportAct) self.vcsPropsAct = E4Action(self.trUtf8('Command options'), self.trUtf8('Command &options...'),0,0,self, 'subversion_options') self.vcsPropsAct.setStatusTip(self.trUtf8('Show the VCS command options')) self.vcsPropsAct.setWhatsThis(self.trUtf8( """Command options...""" """

    This shows a dialog to edit the VCS command options.

    """ )) self.connect(self.vcsPropsAct, SIGNAL('triggered()'), self._vcsCommandOptions) self.actions.append(self.vcsPropsAct) self.vcsRevertAct = E4Action(self.trUtf8('Revert changes'), UI.PixmapCache.getIcon("vcsRevert.png"), self.trUtf8('Re&vert changes'), 0, 0, self, 'subversion_revert') self.vcsRevertAct.setStatusTip(self.trUtf8( 'Revert all changes made to the local project' )) self.vcsRevertAct.setWhatsThis(self.trUtf8( """Revert changes""" """

    This reverts all changes made to the local project.

    """ )) self.connect(self.vcsRevertAct, SIGNAL('triggered()'), self._vcsRevert) self.actions.append(self.vcsRevertAct) self.vcsMergeAct = E4Action(self.trUtf8('Merge'), UI.PixmapCache.getIcon("vcsMerge.png"), self.trUtf8('Mer&ge changes...'), 0, 0, self, 'subversion_merge') self.vcsMergeAct.setStatusTip(self.trUtf8( 'Merge changes of a tag/revision into the local project' )) self.vcsMergeAct.setWhatsThis(self.trUtf8( """Merge""" """

    This merges changes of a tag/revision into the local project.

    """ )) self.connect(self.vcsMergeAct, SIGNAL('triggered()'), self._vcsMerge) self.actions.append(self.vcsMergeAct) self.vcsSwitchAct = E4Action(self.trUtf8('Switch'), UI.PixmapCache.getIcon("vcsSwitch.png"), self.trUtf8('S&witch...'), 0, 0, self, 'subversion_switch') self.vcsSwitchAct.setStatusTip(self.trUtf8( 'Switch the local copy to another tag/branch' )) self.vcsSwitchAct.setWhatsThis(self.trUtf8( """Switch""" """

    This switches the local copy to another tag/branch.

    """ )) self.connect(self.vcsSwitchAct, SIGNAL('triggered()'), self._vcsSwitch) self.actions.append(self.vcsSwitchAct) self.vcsResolveAct = E4Action(self.trUtf8('Conflicts resolved'), self.trUtf8('Con&flicts resolved'), 0, 0, self, 'subversion_resolve') self.vcsResolveAct.setStatusTip(self.trUtf8( 'Mark all conflicts of the local project as resolved' )) self.vcsResolveAct.setWhatsThis(self.trUtf8( """Conflicts resolved""" """

    This marks all conflicts of the local project as resolved.

    """ )) self.connect(self.vcsResolveAct, SIGNAL('triggered()'), self.__svnResolve) self.actions.append(self.vcsResolveAct) self.vcsCleanupAct = E4Action(self.trUtf8('Cleanup'), self.trUtf8('Cleanu&p'), 0, 0, self, 'subversion_cleanup') self.vcsCleanupAct.setStatusTip(self.trUtf8( 'Cleanup the local project' )) self.vcsCleanupAct.setWhatsThis(self.trUtf8( """Cleanup""" """

    This performs a cleanup of the local project.

    """ )) self.connect(self.vcsCleanupAct, SIGNAL('triggered()'), self._vcsCleanup) self.actions.append(self.vcsCleanupAct) self.vcsCommandAct = E4Action(self.trUtf8('Execute command'), self.trUtf8('E&xecute command...'), 0, 0, self, 'subversion_command') self.vcsCommandAct.setStatusTip(self.trUtf8( 'Execute an arbitrary VCS command' )) self.vcsCommandAct.setWhatsThis(self.trUtf8( """Execute command""" """

    This opens a dialog to enter an arbitrary VCS command.

    """ )) self.connect(self.vcsCommandAct, SIGNAL('triggered()'), self._vcsCommand) self.actions.append(self.vcsCommandAct) self.svnTagListAct = E4Action(self.trUtf8('List tags'), self.trUtf8('List tags...'), 0, 0, self, 'subversion_list_tags') self.svnTagListAct.setStatusTip(self.trUtf8( 'List tags of the project' )) self.svnTagListAct.setWhatsThis(self.trUtf8( """List tags""" """

    This lists the tags of the project.

    """ )) self.connect(self.svnTagListAct, SIGNAL('triggered()'), self.__svnTagList) self.actions.append(self.svnTagListAct) self.svnBranchListAct = E4Action(self.trUtf8('List branches'), self.trUtf8('List branches...'), 0, 0, self, 'subversion_list_branches') self.svnBranchListAct.setStatusTip(self.trUtf8( 'List branches of the project' )) self.svnBranchListAct.setWhatsThis(self.trUtf8( """List branches""" """

    This lists the branches of the project.

    """ )) self.connect(self.svnBranchListAct, SIGNAL('triggered()'), self.__svnBranchList) self.actions.append(self.svnBranchListAct) self.svnListAct = E4Action(self.trUtf8('List repository contents'), self.trUtf8('List repository contents...'), 0, 0, self, 'subversion_contents') self.svnListAct.setStatusTip(self.trUtf8( 'Lists the contents of the repository' )) self.svnListAct.setWhatsThis(self.trUtf8( """List repository contents""" """

    This lists the contents of the repository.

    """ )) self.connect(self.svnListAct, SIGNAL('triggered()'), self.__svnTagList) self.actions.append(self.svnListAct) self.svnPropSetAct = E4Action(self.trUtf8('Set Property'), self.trUtf8('Set Property...'), 0, 0, self, 'subversion_property_set') self.svnPropSetAct.setStatusTip(self.trUtf8( 'Set a property for the project files' )) self.svnPropSetAct.setWhatsThis(self.trUtf8( """Set Property""" """

    This sets a property for the project files.

    """ )) self.connect(self.svnPropSetAct, SIGNAL('triggered()'), self.__svnPropSet) self.actions.append(self.svnPropSetAct) self.svnPropListAct = E4Action(self.trUtf8('List Properties'), self.trUtf8('List Properties...'), 0, 0, self, 'subversion_property_list') self.svnPropListAct.setStatusTip(self.trUtf8( 'List properties of the project files' )) self.svnPropListAct.setWhatsThis(self.trUtf8( """List Properties""" """

    This lists the properties of the project files.

    """ )) self.connect(self.svnPropListAct, SIGNAL('triggered()'), self.__svnPropList) self.actions.append(self.svnPropListAct) self.svnPropDelAct = E4Action(self.trUtf8('Delete Property'), self.trUtf8('Delete Property...'), 0, 0, self, 'subversion_property_delete') self.svnPropDelAct.setStatusTip(self.trUtf8( 'Delete a property for the project files' )) self.svnPropDelAct.setWhatsThis(self.trUtf8( """Delete Property""" """

    This deletes a property for the project files.

    """ )) self.connect(self.svnPropDelAct, SIGNAL('triggered()'), self.__svnPropDel) self.actions.append(self.svnPropDelAct) self.svnRelocateAct = E4Action(self.trUtf8('Relocate'), UI.PixmapCache.getIcon("vcsSwitch.png"), self.trUtf8('Relocate...'), 0, 0, self, 'subversion_relocate') self.svnRelocateAct.setStatusTip(self.trUtf8( 'Relocate the working copy to a new repository URL' )) self.svnRelocateAct.setWhatsThis(self.trUtf8( """Relocate""" """

    This relocates the working copy to a new repository URL.

    """ )) self.connect(self.svnRelocateAct, SIGNAL('triggered()'), self.__svnRelocate) self.actions.append(self.svnRelocateAct) self.svnRepoBrowserAct = E4Action(self.trUtf8('Repository Browser'), UI.PixmapCache.getIcon("vcsRepoBrowser.png"), self.trUtf8('Repository Browser...'), 0, 0, self, 'subversion_repo_browser') self.svnRepoBrowserAct.setStatusTip(self.trUtf8( 'Show the Repository Browser dialog' )) self.svnRepoBrowserAct.setWhatsThis(self.trUtf8( """Repository Browser""" """

    This shows the Repository Browser dialog.

    """ )) self.connect(self.svnRepoBrowserAct, SIGNAL('triggered()'), self.__svnRepoBrowser) self.actions.append(self.svnRepoBrowserAct) self.svnConfigAct = E4Action(self.trUtf8('Configure'), self.trUtf8('Configure...'), 0, 0, self, 'subversion_configure') self.svnConfigAct.setStatusTip(self.trUtf8( 'Show the configuration dialog with the Subversion page selected' )) self.svnConfigAct.setWhatsThis(self.trUtf8( """Configure""" """

    Show the configuration dialog with the Subversion page selected.

    """ )) self.connect(self.svnConfigAct, SIGNAL('triggered()'), self.__svnConfigure) self.actions.append(self.svnConfigAct) def initMenu(self, menu): """ Public method to generate the VCS menu. @param menu reference to the menu to be populated (QMenu) """ menu.clear() act = menu.addAction( UI.PixmapCache.getIcon( os.path.join("VcsPlugins", "vcsSubversion", "icons", "subversion.png")), self.vcs.vcsName(), self._vcsInfoDisplay) font = act.font() font.setBold(True) act.setFont(font) menu.addSeparator() menu.addAction(self.vcsUpdateAct) menu.addAction(self.vcsCommitAct) menu.addSeparator() menu.addAction(self.vcsNewAct) menu.addAction(self.vcsExportAct) menu.addSeparator() menu.addAction(self.vcsTagAct) if self.vcs.otherData["standardLayout"]: menu.addAction(self.svnTagListAct) menu.addAction(self.svnBranchListAct) else: menu.addAction(self.svnListAct) menu.addSeparator() menu.addAction(self.vcsLogAct) if self.vcs.versionStr >= '1.2.0': menu.addAction(self.svnLogLimitedAct) menu.addAction(self.svnLogBrowserAct) menu.addSeparator() menu.addAction(self.vcsStatusAct) menu.addAction(self.svnChangeListsAct) menu.addSeparator() menu.addAction(self.vcsDiffAct) menu.addAction(self.svnExtDiffAct) menu.addAction(self.svnUrlDiffAct) menu.addSeparator() menu.addAction(self.vcsRevertAct) menu.addAction(self.vcsMergeAct) menu.addAction(self.vcsResolveAct) menu.addSeparator() menu.addAction(self.svnRelocateAct) menu.addAction(self.vcsSwitchAct) menu.addSeparator() menu.addAction(self.svnPropSetAct) menu.addAction(self.svnPropListAct) menu.addAction(self.svnPropDelAct) menu.addSeparator() menu.addAction(self.vcsCleanupAct) menu.addSeparator() menu.addAction(self.vcsCommandAct) menu.addAction(self.svnRepoBrowserAct) menu.addSeparator() menu.addAction(self.vcsPropsAct) menu.addSeparator() menu.addAction(self.svnConfigAct) def __svnResolve(self): """ Private slot used to resolve conflicts of the local project. """ self.vcs.svnResolve(self.project.ppath) def __svnPropList(self): """ Private slot used to list the properties of the project files. """ self.vcs.svnListProps(self.project.ppath, True) def __svnPropSet(self): """ Private slot used to set a property for the project files. """ self.vcs.svnSetProp(self.project.ppath, True) def __svnPropDel(self): """ Private slot used to delete a property for the project files. """ self.vcs.svnDelProp(self.project.ppath, True) def __svnTagList(self): """ Private slot used to list the tags of the project. """ self.vcs.svnListTagBranch(self.project.ppath, True) def __svnBranchList(self): """ Private slot used to list the branches of the project. """ self.vcs.svnListTagBranch(self.project.ppath, False) def __svnExtendedDiff(self): """ Private slot used to perform a svn diff with the selection of revisions. """ self.vcs.svnExtendedDiff(self.project.ppath) def __svnUrlDiff(self): """ Private slot used to perform a svn diff with the selection of repository URLs. """ self.vcs.svnUrlDiff(self.project.ppath) def __svnLogLimited(self): """ Private slot used to perform a svn log --limit. """ self.vcs.svnLogLimited(self.project.ppath) def __svnLogBrowser(self): """ Private slot used to browse the log of the current project. """ self.vcs.svnLogBrowser(self.project.ppath) def __svnRelocate(self): """ Private slot used to relocate the working copy to a new repository URL. """ self.vcs.svnRelocate(self.project.ppath) def __svnRepoBrowser(self): """ Private slot to open the repository browser. """ self.vcs.svnRepoBrowser(projectPath = self.project.ppath) def __svnConfigure(self): """ Private slot to open the configuration dialog. """ e4App().getObject("UserInterface").showPreferences("zzz_subversionPage") def __svnChangeLists(self): """ Private slot used to show a list of change lists. """ self.vcs.svnShowChangelists(self.project.ppath) eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/SvnLogDialog.py0000644000175000001440000000013012261012650025775 xustar000000000000000028 mtime=1388582312.1910795 30 atime=1389081082.891724398 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/SvnLogDialog.py0000644000175000001440000002617712261012650025546 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Module implementing a dialog to show the output of the svn log command process. """ import os import sys from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQMessageBox from Ui_SvnLogDialog import Ui_SvnLogDialog from SvnDiffDialog import SvnDiffDialog import Utilities class SvnLogDialog(QWidget, Ui_SvnLogDialog): """ Class implementing a dialog to show the output of the svn log command process. The dialog is nonmodal. Clicking a link in the upper text pane shows a diff of the versions. """ def __init__(self, vcs, parent = None): """ Constructor @param vcs reference to the vcs object @param parent parent widget (QWidget) """ QWidget.__init__(self, parent) self.setupUi(self) self.buttonBox.button(QDialogButtonBox.Close).setDefault(True) self.process = QProcess() self.vcs = vcs self.contents.setHtml(\ self.trUtf8('Processing your request, please wait...')) self.connect(self.process, SIGNAL('finished(int, QProcess::ExitStatus)'), self.__procFinished) self.connect(self.process, SIGNAL('readyReadStandardOutput()'), self.__readStdout) self.connect(self.process, SIGNAL('readyReadStandardError()'), self.__readStderr) self.connect(self.contents, SIGNAL('anchorClicked(const QUrl&)'), self.__sourceChanged) self.rx_sep = QRegExp('\\-+\\s*') self.rx_sep2 = QRegExp('=+\\s*') self.rx_rev = QRegExp('rev ([0-9]+): ([^|]*) \| ([^|]*) \| ([0-9]+) .*') # "rev" followed by one or more decimals followed by a colon followed # anything up to " | " (twice) followed by one or more decimals followed # by anything self.rx_rev2 = QRegExp('r([0-9]+) \| ([^|]*) \| ([^|]*) \| ([0-9]+) .*') # "r" followed by one or more decimals followed by " | " followed # anything up to " | " (twice) followed by one or more decimals followed # by anything self.rx_flags = QRegExp(' ([ADM])( .*)\\s*') # three blanks followed by A or D or M self.rx_changed = QRegExp('Changed .*\\s*') self.flags = { 'A' : self.trUtf8('Added'), 'D' : self.trUtf8('Deleted'), 'M' : self.trUtf8('Modified') } self.revisions = QStringList() # stack of remembered revisions self.revString = self.trUtf8('revision') self.buf = QStringList() # buffer for stdout self.diff = None def closeEvent(self, e): """ Private slot implementing a close event handler. @param e close event (QCloseEvent) """ if self.process is not None and \ self.process.state() != QProcess.NotRunning: self.process.terminate() QTimer.singleShot(2000, self.process, SLOT('kill()')) self.process.waitForFinished(3000) e.accept() def start(self, fn, noEntries = 0): """ Public slot to start the cvs log command. @param fn filename to show the log for (string) @param noEntries number of entries to show (integer) """ self.errorGroup.hide() QApplication.processEvents() self.intercept = False self.filename = fn self.dname, self.fname = self.vcs.splitPath(fn) self.process.kill() args = QStringList() args.append('log') self.vcs.addArguments(args, self.vcs.options['global']) self.vcs.addArguments(args, self.vcs.options['log']) if noEntries: args.append('--limit') args.append(str(noEntries)) self.activateWindow() self.raise_() args.append(self.fname) self.process.setWorkingDirectory(self.dname) self.process.start('svn', args) procStarted = self.process.waitForStarted() if not procStarted: self.inputGroup.setEnabled(False) KQMessageBox.critical(None, self.trUtf8('Process Generation Error'), self.trUtf8( 'The process %1 could not be started. ' 'Ensure, that it is in the search path.' ).arg('svn')) def __procFinished(self, exitCode, exitStatus): """ Private slot connected to the finished signal. @param exitCode exit code of the process (integer) @param exitStatus exit status of the process (QProcess.ExitStatus) """ self.inputGroup.setEnabled(False) self.inputGroup.hide() self.contents.clear() lvers = 1 for s in self.buf: rev_match = False if self.rx_rev.exactMatch(s): ver = self.rx_rev.cap(1) author = self.rx_rev.cap(2) date = self.rx_rev.cap(3) # number of lines is ignored rev_match = True elif self.rx_rev2.exactMatch(s): ver = self.rx_rev2.cap(1) author = self.rx_rev2.cap(2) date = self.rx_rev2.cap(3) # number of lines is ignored rev_match = True if rev_match: dstr = QString('%1 %2').arg(self.revString).arg(ver) try: lv = self.revisions[lvers] lvers += 1 url = QUrl() url.setScheme("file") url.setPath(self.filename) query = QByteArray() query.append(lv).append('_').append(ver) url.setEncodedQuery(query) dstr.append(' [')\ .append(self.trUtf8('diff to %1').arg(lv))\ .append(']') except IndexError: pass dstr.append('
    \n') self.contents.insertHtml(dstr) dstr = self.trUtf8('author: %1
    \n').arg(author) self.contents.insertHtml(dstr) dstr = self.trUtf8('date: %1
    \n').arg(date) self.contents.insertHtml(dstr) elif self.rx_sep.exactMatch(s) or self.rx_sep2.exactMatch(s): self.contents.insertHtml('
    \n') elif self.rx_flags.exactMatch(s): dstr = QString(self.flags[str(self.rx_flags.cap(1))]) dstr.append(self.rx_flags.cap(2)) dstr.append('
    \n') self.contents.insertHtml(dstr) elif self.rx_changed.exactMatch(s): dstr = QString('
    %1
    \n').arg(s) self.contents.insertHtml(dstr) else: if s.isEmpty(): s = self.contents.insertHtml('
    \n') else: self.contents.insertHtml(Utilities.html_encode(unicode(s))) self.contents.insertHtml('
    \n') tc = self.contents.textCursor() tc.movePosition(QTextCursor.Start) self.contents.setTextCursor(tc) self.contents.ensureCursorVisible() def __readStdout(self): """ Private slot to handle the readyReadStandardOutput signal. It reads the output of the process and inserts it into a buffer. """ self.process.setReadChannel(QProcess.StandardOutput) while self.process.canReadLine(): line = QString(self.process.readLine()) self.buf.append(line) if self.rx_rev.exactMatch(line): ver = self.rx_rev.cap(1) # save revision number for later use self.revisions.append(ver) elif self.rx_rev2.exactMatch(line): ver = self.rx_rev2.cap(1) # save revision number for later use self.revisions.append(ver) def __readStderr(self): """ Private slot to handle the readyReadStandardError signal. It reads the error output of the process and inserts it into the error pane. """ if self.process is not None: self.errorGroup.show() s = QString(self.process.readAllStandardError()) self.errors.insertPlainText(s) self.errors.ensureCursorVisible() def __sourceChanged(self, url): """ Private slot to handle the sourceChanged signal of the contents pane. @param url the url that was clicked (QUrl) """ self.contents.setSource(QUrl('')) filename = unicode(url.path()) if Utilities.isWindowsPlatform(): if filename.startswith("/"): filename = filename[1:] ver = QString(url.encodedQuery()) v1 = ver.section('_', 0, 0) v2 = ver.section('_', 1, 1) if v1.isEmpty() or v2.isEmpty(): return self.contents.scrollToAnchor(ver) if self.diff: del self.diff self.diff = SvnDiffDialog(self.vcs) self.diff.show() self.diff.start(filename, [v1, v2]) def on_passwordCheckBox_toggled(self, isOn): """ Private slot to handle the password checkbox toggled. @param isOn flag indicating the status of the check box (boolean) """ if isOn: self.input.setEchoMode(QLineEdit.Password) else: self.input.setEchoMode(QLineEdit.Normal) @pyqtSignature("") def on_sendButton_clicked(self): """ Private slot to send the input to the subversion process. """ input = self.input.text() input.append(os.linesep) if self.passwordCheckBox.isChecked(): self.errors.insertPlainText(os.linesep) self.errors.ensureCursorVisible() else: self.errors.insertPlainText(input) self.errors.ensureCursorVisible() self.process.write(input.toLocal8Bit()) self.passwordCheckBox.setChecked(False) self.input.clear() def on_input_returnPressed(self): """ Private slot to handle the press of the return key in the input field. """ self.intercept = True self.on_sendButton_clicked() def keyPressEvent(self, evt): """ Protected slot to handle a key press event. @param evt the key press event (QKeyEvent) """ if self.intercept: self.intercept = False evt.accept() return QWidget.keyPressEvent(self, evt) eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/__init__.py0000644000175000001440000000013212261012650025206 xustar000000000000000030 mtime=1388582312.193079525 30 atime=1389081082.906724398 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/__init__.py0000644000175000001440000000041112261012650024734 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Package implementing the vcs interface to Subversion It consists of the subversion class, the project helper classes and some Subversion specific dialogs. """ eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/SvnMergeDialog.ui0000644000175000001440000000007411072705612026315 xustar000000000000000030 atime=1389081082.906724398 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/SvnMergeDialog.ui0000644000175000001440000001205211072705612026042 0ustar00detlevusers00000000000000 SvnMergeDialog 0 0 456 152 Subversion Merge true Select to force the merge operation Enforce merge Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok Target: Enter the target <b>Target</b> <p>Enter the target for the merge operation into this field. Leave it empty to get the target URL from the working copy.</p> <p><b>Note:</b> This entry is only needed, if you enter revision numbers above.</p> true QComboBox::InsertAtTop true false 1. URL/Revision: 0 0 Enter an URL or a revision number <b>URL/Revision</b> <p>Enter an URL or a revision number to be merged into the working copy.</p> true true false 0 0 Enter an URL or a revision number <b>URL/Revision</b> <p>Enter an URL or a revision number to be merged into the working copy.</p> true true false 2. URL/Revision: qPixmapFromMimeSource tag1Combo tag2Combo targetCombo forceCheckBox buttonBox buttonBox accepted() SvnMergeDialog accept() 35 101 34 126 buttonBox rejected() SvnMergeDialog reject() 105 107 105 126 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/SvnTagBranchListDialog.ui0000644000175000001440000000007411744566425027760 xustar000000000000000030 atime=1389081082.907724397 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/SvnTagBranchListDialog.ui0000644000175000001440000001155111744566425027510 0ustar00detlevusers00000000000000 SvnTagBranchListDialog 0 0 634 494 Subversion Tag List <b>Subversion Tag/Branch List</b> <p>This dialog shows a list of the projects tags or branches.</p> true 0 2 <b>Tag/Branches List</b> <p>This shows a list of the projects tags or branches.</p> true false false true Revision Author Date Name 0 1 Errors true false Input Qt::Horizontal QSizePolicy::Expanding 327 29 Press to send the input to the subversion process &Send Alt+S Enter data to be sent to the subversion process Select to switch the input field to password mode &Password Mode Alt+P Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Close qPixmapFromMimeSource tagList errors input passwordCheckBox sendButton buttonBox eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/SvnDialog.py0000644000175000001440000000013212261012650025335 xustar000000000000000030 mtime=1388582312.209079728 30 atime=1389081082.907724397 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/SvnDialog.py0000644000175000001440000002052312261012650025071 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Module implementing a dialog starting a process and showing its output. """ import os from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQMessageBox from Ui_SvnDialog import Ui_SvnDialog import Preferences class SvnDialog(QDialog, Ui_SvnDialog): """ Class implementing a dialog starting a process and showing its output. It starts a QProcess and displays a dialog that shows the output of the process. The dialog is modal, which causes a synchronized execution of the process. """ def __init__(self, text, parent = None): """ Constructor @param text text to be shown by the label (string or QString) @param parent parent widget (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.buttonBox.button(QDialogButtonBox.Close).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Cancel).setDefault(True) self.proc = None self.username = '' self.password = '' self.outputGroup.setTitle(text) def __finish(self): """ Private slot called when the process finished or the user pressed the button. """ if self.proc is not None and \ self.proc.state() != QProcess.NotRunning: self.proc.terminate() QTimer.singleShot(2000, self.proc, SLOT('kill()')) self.proc.waitForFinished(3000) self.buttonBox.button(QDialogButtonBox.Close).setEnabled(True) self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Close).setDefault(True) self.inputGroup.setEnabled(False) self.inputGroup.hide() self.proc = None self.buttonBox.button(QDialogButtonBox.Close).setEnabled(True) self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Close).setDefault(True) self.buttonBox.button(QDialogButtonBox.Close).setFocus(Qt.OtherFocusReason) if Preferences.getVCS("AutoClose") and \ self.normal and \ not self.errors.toPlainText().length() > 0: self.accept() def on_buttonBox_clicked(self, button): """ Private slot called by a button of the button box clicked. @param button button that was clicked (QAbstractButton) """ if button == self.buttonBox.button(QDialogButtonBox.Close): self.close() elif button == self.buttonBox.button(QDialogButtonBox.Cancel): self.__finish() def __procFinished(self, exitCode, exitStatus): """ Private slot connected to the finished signal. @param exitCode exit code of the process (integer) @param exitStatus exit status of the process (QProcess.ExitStatus) """ self.normal = (exitStatus == QProcess.NormalExit) and (exitCode == 0) self.__finish() def startProcess(self, args, workingDir = None, setLanguage = False): """ Public slot used to start the process. @param args list of arguments for the process (QStringList) @param workingDir working directory for the process (string or QString) @param setLanguage flag indicating to set the language to "C" (boolean) @return flag indicating a successful start of the process """ self.errorGroup.hide() self.normal = False self.intercept = False self.__hasAddOrDelete = False self.proc = QProcess() if setLanguage: env = QProcessEnvironment.systemEnvironment() env.insert("LANG", "C") self.proc.setProcessEnvironment(env) nargs = QStringList() lastWasPwd = False for arg in args: if lastWasPwd: lastWasPwd = True continue nargs.append(arg) if arg == QString('--password'): lastWasPwd = True nargs.append('*****') self.resultbox.append(nargs.join(' ')) self.resultbox.append('') self.connect(self.proc, SIGNAL('finished(int, QProcess::ExitStatus)'), self.__procFinished) self.connect(self.proc, SIGNAL('readyReadStandardOutput()'), self.__readStdout) self.connect(self.proc, SIGNAL('readyReadStandardError()'), self.__readStderr) if workingDir: self.proc.setWorkingDirectory(workingDir) self.proc.start('svn', args) procStarted = self.proc.waitForStarted() if not procStarted: self.buttonBox.setFocus() self.inputGroup.setEnabled(False) self.inputGroup.hide() KQMessageBox.critical(None, self.trUtf8('Process Generation Error'), self.trUtf8( 'The process %1 could not be started. ' 'Ensure, that it is in the search path.' ).arg('svn')) else: self.inputGroup.setEnabled(True) self.inputGroup.show() return procStarted def normalExit(self): """ Public method to check for a normal process termination. @return flag indicating normal process termination (boolean) """ return self.normal def __readStdout(self): """ Private slot to handle the readyReadStdout signal. It reads the output of the process, formats it and inserts it into the contents pane. """ if self.proc is not None: s = QString(self.proc.readAllStandardOutput()) self.resultbox.insertPlainText(s) self.resultbox.ensureCursorVisible() if not self.__hasAddOrDelete and len(s) > 0: # check the output for l in s.split(os.linesep, QString.SkipEmptyParts): if l[0:2] in ['A ', 'D ']: self.__hasAddOrDelete = True break def __readStderr(self): """ Private slot to handle the readyReadStderr signal. It reads the error output of the process and inserts it into the error pane. """ if self.proc is not None: self.errorGroup.show() s = QString(self.proc.readAllStandardError()) self.errors.insertPlainText(s) self.errors.ensureCursorVisible() def on_passwordCheckBox_toggled(self, isOn): """ Private slot to handle the password checkbox toggled. @param isOn flag indicating the status of the check box (boolean) """ if isOn: self.input.setEchoMode(QLineEdit.Password) else: self.input.setEchoMode(QLineEdit.Normal) @pyqtSignature("") def on_sendButton_clicked(self): """ Private slot to send the input to the subversion process. """ input = self.input.text() input.append(os.linesep) if self.passwordCheckBox.isChecked(): self.errors.insertPlainText(os.linesep) self.errors.ensureCursorVisible() else: self.errors.insertPlainText(input) self.errors.ensureCursorVisible() self.proc.write(input.toLocal8Bit()) self.passwordCheckBox.setChecked(False) self.input.clear() def on_input_returnPressed(self): """ Private slot to handle the press of the return key in the input field. """ self.intercept = True self.on_sendButton_clicked() def keyPressEvent(self, evt): """ Protected slot to handle a key press event. @param evt the key press event (QKeyEvent) """ if self.intercept: self.intercept = False evt.accept() return QDialog.keyPressEvent(self, evt) def hasAddOrDelete(self): """ Public method to check, if the last action contained an add or delete. """ return self.__hasAddOrDelete eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/SvnChangeListsDialog.ui0000644000175000001440000000007411762632711027467 xustar000000000000000030 atime=1389081082.914724397 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/SvnChangeListsDialog.ui0000644000175000001440000001314311762632711027216 0ustar00detlevusers00000000000000 SvnChangeListsDialog 0 0 519 494 Subversion Change Lists true Change Lists: 0 1 <b>Change Lists</b> <p>Select a change list here to see the associated files in the list below.</p> true true 0 2 <b>Files</b> <p>This shows a list of files associated with the change list selected above.</p> true 0 1 Errors true false Input Qt::Horizontal QSizePolicy::Expanding 327 29 Press to send the input to the subversion process &Send Alt+S Enter data to be sent to the subversion process Select to switch the input field to password mode &Password Mode Alt+P Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Close changeLists filesList errors input passwordCheckBox sendButton buttonBox buttonBox accepted() SvnChangeListsDialog accept() 248 254 157 274 buttonBox rejected() SvnChangeListsDialog reject() 316 260 286 274 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/SvnStatusDialog.py0000644000175000001440000000013212261012650026541 xustar000000000000000030 mtime=1388582312.227079957 30 atime=1389081082.914724397 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py0000644000175000001440000010501412261012650026274 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Module implementing a dialog to show the output of the svn status command process. """ import types import os from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQMessageBox from KdeQt.KQApplication import e4App from SvnDiffDialog import SvnDiffDialog from Ui_SvnStatusDialog import Ui_SvnStatusDialog import Preferences class SvnStatusDialog(QWidget, Ui_SvnStatusDialog): """ Class implementing a dialog to show the output of the svn status command process. """ def __init__(self, vcs, parent = None): """ Constructor @param vcs reference to the vcs object @param parent parent widget (QWidget) """ QWidget.__init__(self, parent) self.setupUi(self) self.__toBeCommittedColumn = 0 self.__changelistColumn = 1 self.__statusColumn = 2 self.__propStatusColumn = 3 self.__lockedColumn = 4 self.__historyColumn = 5 self.__switchedColumn = 6 self.__lockinfoColumn = 7 self.__upToDateColumn = 8 self.__pathColumn = 12 self.__lastColumn = self.statusList.columnCount() self.refreshButton = \ self.buttonBox.addButton(self.trUtf8("Refresh"), QDialogButtonBox.ActionRole) self.refreshButton.setToolTip(self.trUtf8("Press to refresh the status display")) self.refreshButton.setEnabled(False) self.buttonBox.button(QDialogButtonBox.Close).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Cancel).setDefault(True) self.diff = None self.process = None self.vcs = vcs self.connect(self.vcs, SIGNAL("committed()"), self.__committed) self.statusList.headerItem().setText(self.__lastColumn, "") self.statusList.header().setSortIndicator(self.__pathColumn, Qt.AscendingOrder) if self.vcs.versionStr < '1.5.0': self.statusList.header().hideSection(self.__changelistColumn) self.menuactions = [] self.menu = QMenu() self.menuactions.append(self.menu.addAction(\ self.trUtf8("Commit changes to repository..."), self.__commit)) self.menu.addSeparator() self.menuactions.append(self.menu.addAction(\ self.trUtf8("Add to repository"), self.__add)) self.menuactions.append(self.menu.addAction(\ self.trUtf8("Show differences"), self.__diff)) self.menuactions.append(self.menu.addAction(\ self.trUtf8("Revert changes"), self.__revert)) self.menuactions.append(self.menu.addAction(\ self.trUtf8("Restore missing"), self.__restoreMissing)) if self.vcs.versionStr >= '1.5.0': self.menu.addSeparator() self.menuactions.append(self.menu.addAction( self.trUtf8("Add to Changelist"), self.__addToChangelist)) self.menuactions.append(self.menu.addAction( self.trUtf8("Remove from Changelist"), self.__removeFromChangelist)) if self.vcs.versionStr >= '1.2.0': self.menu.addSeparator() self.menuactions.append(self.menu.addAction(self.trUtf8("Lock"), self.__lock)) self.menuactions.append(self.menu.addAction(self.trUtf8("Unlock"), self.__unlock)) self.menuactions.append(self.menu.addAction(self.trUtf8("Break lock"), self.__breakLock)) self.menuactions.append(self.menu.addAction(self.trUtf8("Steal lock"), self.__stealLock)) self.menu.addSeparator() self.menuactions.append(self.menu.addAction(self.trUtf8("Adjust column sizes"), self.__resizeColumns)) for act in self.menuactions: act.setEnabled(False) self.statusList.setContextMenuPolicy(Qt.CustomContextMenu) self.connect(self.statusList, SIGNAL("customContextMenuRequested(const QPoint &)"), self.__showContextMenu) self.modifiedIndicators = QStringList() self.modifiedIndicators.append(self.trUtf8('added')) self.modifiedIndicators.append(self.trUtf8('deleted')) self.modifiedIndicators.append(self.trUtf8('modified')) self.unversionedIndicators = QStringList() self.unversionedIndicators.append(self.trUtf8('unversioned')) self.lockedIndicators = QStringList() self.lockedIndicators.append(self.trUtf8('locked')) self.missingIndicators = QStringList() self.missingIndicators.append(self.trUtf8('missing')) self.stealBreakLockIndicators = QStringList() self.stealBreakLockIndicators.append(self.trUtf8('other lock')) self.stealBreakLockIndicators.append(self.trUtf8('stolen lock')) self.stealBreakLockIndicators.append(self.trUtf8('broken lock')) self.unlockedIndicators = QStringList() self.unlockedIndicators.append(self.trUtf8('not locked')) self.status = { ' ' : self.trUtf8('normal'), 'A' : self.trUtf8('added'), 'D' : self.trUtf8('deleted'), 'M' : self.trUtf8('modified'), 'R' : self.trUtf8('replaced'), 'C' : self.trUtf8('conflict'), 'X' : self.trUtf8('external'), 'I' : self.trUtf8('ignored'), '?' : self.trUtf8('unversioned'), '!' : self.trUtf8('missing'), '~' : self.trUtf8('type error') } self.propStatus = { ' ' : self.trUtf8('normal'), 'M' : self.trUtf8('modified'), 'C' : self.trUtf8('conflict') } self.locked = { ' ' : self.trUtf8('no'), 'L' : self.trUtf8('yes') } self.history = { ' ' : self.trUtf8('no'), '+' : self.trUtf8('yes') } self.switched = { ' ' : self.trUtf8('no'), 'S' : self.trUtf8('yes') } self.lockinfo = { ' ' : self.trUtf8('not locked'), 'K' : self.trUtf8('locked'), 'O' : self.trUtf8('other lock'), 'T' : self.trUtf8('stolen lock'), 'B' : self.trUtf8('broken lock'), } self.uptodate = { ' ' : self.trUtf8('yes'), '*' : self.trUtf8('no') } self.rx_status = \ QRegExp('(.{8,9})\\s+([0-9-]+)\\s+([0-9?]+)\\s+(\\S+)\\s+(.+)\\s*') # flags (8 anything), revision, changed rev, author, path self.rx_status2 = \ QRegExp('(.{8,9})\\s+(.+)\\s*') # flags (8 anything), path self.rx_changelist = \ QRegExp('--- \\S+ .([\\w\\s]+).:\\s+') # three dashes, Changelist (translated), quote, changelist name, quote, : self.__nonverbose = True def __resort(self): """ Private method to resort the tree. """ self.statusList.sortItems(self.statusList.sortColumn(), self.statusList.header().sortIndicatorOrder()) def __resizeColumns(self): """ Private method to resize the list columns. """ self.statusList.header().resizeSections(QHeaderView.ResizeToContents) self.statusList.header().setStretchLastSection(True) def __generateItem(self, status, propStatus, locked, history, switched, lockinfo, uptodate, revision, change, author, path): """ Private method to generate a status item in the status list. @param status status indicator (string) @param propStatus property status indicator (string) @param locked locked indicator (string) @param history history indicator (string) @param switched switched indicator (string) @param lockinfo lock indicator (string) @param uptodate up to date indicator (string) @param revision revision string (string or QString) @param change revision of last change (string or QString) @param author author of the last change (string or QString) @param path path of the file or directory (string or QString) """ if self.__nonverbose and \ status == " " and \ propStatus == " " and \ locked == " " and \ history == " " and \ switched == " " and \ lockinfo == " " and \ uptodate == " " and \ self.currentChangelist == "": return if revision == "": rev = "" else: try: rev = int(revision) except ValueError: rev = revision if change == "": chg = "" else: try: chg = int(change) except ValueError: chg = change statusText = self.status[status] itm = QTreeWidgetItem(self.statusList) itm.setData(0, Qt.DisplayRole, "") itm.setData(1, Qt.DisplayRole, self.currentChangelist) itm.setData(2, Qt.DisplayRole, statusText) itm.setData(3, Qt.DisplayRole, self.propStatus[propStatus]) itm.setData(4, Qt.DisplayRole, self.locked[locked]) itm.setData(5, Qt.DisplayRole, self.history[history]) itm.setData(6, Qt.DisplayRole, self.switched[switched]) itm.setData(7, Qt.DisplayRole, self.lockinfo[lockinfo]) itm.setData(8, Qt.DisplayRole, self.uptodate[uptodate]) itm.setData(9, Qt.DisplayRole, rev) itm.setData(10, Qt.DisplayRole, chg) itm.setData(11, Qt.DisplayRole, author) itm.setData(12, Qt.DisplayRole, path) itm.setTextAlignment(1, Qt.AlignLeft) itm.setTextAlignment(2, Qt.AlignHCenter) itm.setTextAlignment(3, Qt.AlignHCenter) itm.setTextAlignment(4, Qt.AlignHCenter) itm.setTextAlignment(5, Qt.AlignHCenter) itm.setTextAlignment(6, Qt.AlignHCenter) itm.setTextAlignment(7, Qt.AlignHCenter) itm.setTextAlignment(8, Qt.AlignHCenter) itm.setTextAlignment(9, Qt.AlignRight) itm.setTextAlignment(10, Qt.AlignRight) itm.setTextAlignment(11, Qt.AlignLeft) itm.setTextAlignment(12, Qt.AlignLeft) if status in "ADM" or propStatus in "M": itm.setCheckState(self.__toBeCommittedColumn, Qt.Checked) self.hidePropertyStatusColumn = self.hidePropertyStatusColumn and \ propStatus == " " self.hideLockColumns = self.hideLockColumns and \ locked == " " and lockinfo == " " self.hideUpToDateColumn = self.hideUpToDateColumn and uptodate == " " self.hideHistoryColumn = self.hideHistoryColumn and history == " " self.hideSwitchedColumn = self.hideSwitchedColumn and switched == " " if statusText not in self.__statusFilters: self.__statusFilters.append(statusText) def closeEvent(self, e): """ Private slot implementing a close event handler. @param e close event (QCloseEvent) """ if self.process is not None and \ self.process.state() != QProcess.NotRunning: self.process.terminate() QTimer.singleShot(2000, self.process, SLOT('kill()')) self.process.waitForFinished(3000) e.accept() def start(self, fn): """ Public slot to start the svn status command. @param fn filename(s)/directoryname(s) to show the status of (string or list of strings) """ self.errorGroup.hide() self.intercept = False self.args = fn for act in self.menuactions: act.setEnabled(False) self.addButton.setEnabled(False) self.commitButton.setEnabled(False) self.diffButton.setEnabled(False) self.revertButton.setEnabled(False) self.restoreButton.setEnabled(False) self.statusFilterCombo.clear() self.__statusFilters = [] self.currentChangelist = "" self.changelistFound = False self.hidePropertyStatusColumn = True self.hideLockColumns = True self.hideUpToDateColumn = True self.hideHistoryColumn = True self.hideSwitchedColumn = True if self.process: self.process.kill() else: self.process = QProcess() self.connect(self.process, SIGNAL('finished(int, QProcess::ExitStatus)'), self.__procFinished) self.connect(self.process, SIGNAL('readyReadStandardOutput()'), self.__readStdout) self.connect(self.process, SIGNAL('readyReadStandardError()'), self.__readStderr) args = QStringList() args.append('status') self.vcs.addArguments(args, self.vcs.options['global']) self.vcs.addArguments(args, self.vcs.options['status']) if '--verbose' not in self.vcs.options['global'] and \ '--verbose' not in self.vcs.options['status']: args.append('--verbose') self.__nonverbose = True else: self.__nonverbose = False if '--show-updates' in self.vcs.options['status'] or \ '-u' in self.vcs.options['status']: self.activateWindow() self.raise_() if type(fn) is types.ListType: self.dname, fnames = self.vcs.splitPathList(fn) self.vcs.addArguments(args, fnames) else: self.dname, fname = self.vcs.splitPath(fn) args.append(fname) self.process.setWorkingDirectory(self.dname) self.setWindowTitle(self.trUtf8('Subversion Status')) self.process.start('svn', args) procStarted = self.process.waitForStarted() if not procStarted: self.inputGroup.setEnabled(False) self.inputGroup.hide() KQMessageBox.critical(None, self.trUtf8('Process Generation Error'), self.trUtf8( 'The process %1 could not be started. ' 'Ensure, that it is in the search path.' ).arg('svn')) else: self.inputGroup.setEnabled(True) self.inputGroup.show() def __finish(self): """ Private slot called when the process finished or the user pressed the button. """ if self.process is not None and \ self.process.state() != QProcess.NotRunning: self.process.terminate() QTimer.singleShot(2000, self.process, SLOT('kill()')) self.process.waitForFinished(3000) self.buttonBox.button(QDialogButtonBox.Close).setEnabled(True) self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Close).setDefault(True) self.buttonBox.button(QDialogButtonBox.Close).setFocus(Qt.OtherFocusReason) self.inputGroup.setEnabled(False) self.inputGroup.hide() self.refreshButton.setEnabled(True) self.__statusFilters.sort() self.__statusFilters.insert(0, "<%s>" % self.trUtf8("all")) self.statusFilterCombo.addItems(self.__statusFilters) for act in self.menuactions: act.setEnabled(True) self.process = None self.__resort() self.__resizeColumns() self.statusList.setColumnHidden(self.__propStatusColumn, self.hidePropertyStatusColumn) self.statusList.setColumnHidden(self.__lockedColumn, self.hideLockColumns) self.statusList.setColumnHidden(self.__lockinfoColumn, self.hideLockColumns) self.statusList.setColumnHidden(self.__upToDateColumn, self.hideUpToDateColumn) self.statusList.setColumnHidden(self.__historyColumn, self.hideHistoryColumn) self.statusList.setColumnHidden(self.__switchedColumn, self.hideSwitchedColumn) self.statusList.setColumnHidden(self.__changelistColumn, not self.changelistFound) self.__updateButtons() self.__updateCommitButton() def on_buttonBox_clicked(self, button): """ Private slot called by a button of the button box clicked. @param button button that was clicked (QAbstractButton) """ if button == self.buttonBox.button(QDialogButtonBox.Close): self.close() elif button == self.buttonBox.button(QDialogButtonBox.Cancel): self.__finish() elif button == self.refreshButton: self.on_refreshButton_clicked() def __procFinished(self, exitCode, exitStatus): """ Private slot connected to the finished signal. @param exitCode exit code of the process (integer) @param exitStatus exit status of the process (QProcess.ExitStatus) """ self.__finish() def __readStdout(self): """ Private slot to handle the readyReadStandardOutput signal. It reads the output of the process, formats it and inserts it into the contents pane. """ if self.process is not None: self.process.setReadChannel(QProcess.StandardOutput) while self.process.canReadLine(): s = QString(self.process.readLine()) if self.rx_status.exactMatch(s): flags = str(self.rx_status.cap(1)) rev = self.rx_status.cap(2) change = self.rx_status.cap(3) author = self.rx_status.cap(4) path = self.rx_status.cap(5).trimmed() self.__generateItem(flags[0], flags[1], flags[2], flags[3], flags[4], flags[5], flags[-1], rev, change, author, path) elif self.rx_status2.exactMatch(s): flags = str(self.rx_status2.cap(1)) path = self.rx_status2.cap(2).trimmed() self.__generateItem(flags[0], flags[1], flags[2], flags[3], flags[4], flags[5], flags[-1], "", "", "", path) elif self.rx_changelist.exactMatch(s): self.currentChangelist = self.rx_changelist.cap(1) self.changelistFound = True def __readStderr(self): """ Private slot to handle the readyReadStandardError signal. It reads the error output of the process and inserts it into the error pane. """ if self.process is not None: self.errorGroup.show() s = QString(self.process.readAllStandardError()) self.errors.insertPlainText(s) self.errors.ensureCursorVisible() def on_passwordCheckBox_toggled(self, isOn): """ Private slot to handle the password checkbox toggled. @param isOn flag indicating the status of the check box (boolean) """ if isOn: self.input.setEchoMode(QLineEdit.Password) else: self.input.setEchoMode(QLineEdit.Normal) @pyqtSignature("") def on_sendButton_clicked(self): """ Private slot to send the input to the subversion process. """ input = self.input.text() input.append(os.linesep) if self.passwordCheckBox.isChecked(): self.errors.insertPlainText(os.linesep) self.errors.ensureCursorVisible() else: self.errors.insertPlainText(input) self.errors.ensureCursorVisible() self.process.write(input.toLocal8Bit()) self.passwordCheckBox.setChecked(False) self.input.clear() def on_input_returnPressed(self): """ Private slot to handle the press of the return key in the input field. """ self.intercept = True self.on_sendButton_clicked() def keyPressEvent(self, evt): """ Protected slot to handle a key press event. @param evt the key press event (QKeyEvent) """ if self.intercept: self.intercept = False evt.accept() return QWidget.keyPressEvent(self, evt) @pyqtSignature("") def on_refreshButton_clicked(self): """ Private slot to refresh the status display. """ self.buttonBox.button(QDialogButtonBox.Close).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(True) self.buttonBox.button(QDialogButtonBox.Cancel).setDefault(True) self.inputGroup.setEnabled(True) self.inputGroup.show() self.refreshButton.setEnabled(False) self.statusList.clear() self.start(self.args) @pyqtSignature("") def on_statusList_itemSelectionChanged(self): """ Private slot to act upon changes of selected items. """ self.__updateButtons() @pyqtSignature("QTreeWidgetItem*, int") def on_statusList_itemChanged(self, item, column): """ Private slot to act upon item changes. @param item reference to the changed item (QTreeWidgetItem) @param column index of column that changed (integer) """ if column == self.__toBeCommittedColumn: self.__updateCommitButton() def __updateButtons(self): """ Private method to update the VCS buttons status. """ modified = len(self.__getModifiedItems()) unversioned = len(self.__getUnversionedItems()) missing = len(self.__getMissingItems()) self.addButton.setEnabled(unversioned) self.diffButton.setEnabled(modified) self.revertButton.setEnabled(modified) self.restoreButton.setEnabled(missing) def __updateCommitButton(self): """ Private method to update the Commit button status. """ commitable = len(self.__getCommitableItems()) self.commitButton.setEnabled(commitable) @pyqtSignature("") def on_commitButton_clicked(self): """ Private slot to handle the press of the Commit button. """ self.__commit() @pyqtSignature("") def on_addButton_clicked(self): """ Private slot to handle the press of the Add button. """ self.__add() @pyqtSignature("") def on_diffButton_clicked(self): """ Private slot to handle the press of the Differences button. """ self.__diff() @pyqtSignature("") def on_revertButton_clicked(self): """ Private slot to handle the press of the Revert button. """ self.__revert() @pyqtSignature("") def on_restoreButton_clicked(self): """ Private slot to handle the press of the Restore button. """ self.__restoreMissing() @pyqtSignature("QString") def on_statusFilterCombo_activated(self, txt): """ Private slot to react to the selection of a status filter. @param txt selected status filter (QString) """ if txt == "<%s>" % self.trUtf8("all"): for topIndex in range(self.statusList.topLevelItemCount()): topItem = self.statusList.topLevelItem(topIndex) topItem.setHidden(False) else: for topIndex in range(self.statusList.topLevelItemCount()): topItem = self.statusList.topLevelItem(topIndex) topItem.setHidden(topItem.text(self.__statusColumn) != txt) ############################################################################ ## Context menu handling methods ############################################################################ def __showContextMenu(self, coord): """ Protected slot to show the context menu of the status list. @param coord the position of the mouse pointer (QPoint) """ self.menu.popup(self.mapToGlobal(coord)) def __commit(self): """ Private slot to handle the Commit context menu entry. """ names = [os.path.join(self.dname, unicode(itm.text(self.__pathColumn))) \ for itm in self.__getCommitableItems()] if not names: KQMessageBox.information(self, self.trUtf8("Commit"), self.trUtf8("""There are no items selected to be committed.""")) return if Preferences.getVCS("AutoSaveFiles"): vm = e4App().getObject("ViewManager") for name in names: vm.saveEditor(name) self.vcs.vcsCommit(names, '') def __committed(self): """ Private slot called after the commit has finished. """ if self.isVisible(): self.on_refreshButton_clicked() self.vcs.checkVCSStatus() def __add(self): """ Private slot to handle the Add context menu entry. """ names = [os.path.join(self.dname, unicode(itm.text(self.__pathColumn))) \ for itm in self.__getUnversionedItems()] if not names: KQMessageBox.information(self, self.trUtf8("Add"), self.trUtf8("""There are no unversioned entries available/selected.""")) return self.vcs.vcsAdd(names) self.on_refreshButton_clicked() project = e4App().getObject("Project") for name in names: project.getModel().updateVCSStatus(name) def __revert(self): """ Private slot to handle the Revert context menu entry. """ names = [os.path.join(self.dname, unicode(itm.text(self.__pathColumn))) \ for itm in self.__getModifiedItems()] if not names: KQMessageBox.information(self, self.trUtf8("Revert"), self.trUtf8("""There are no uncommitted changes available/selected.""")) return self.vcs.vcsRevert(names) self.raise_() self.activateWindow() self.on_refreshButton_clicked() self.vcs.checkVCSStatus() def __restoreMissing(self): """ Private slot to handle the Restore Missing context menu entry. """ names = [os.path.join(self.dname, unicode(itm.text(self.__pathColumn))) \ for itm in self.__getMissingItems()] if not names: KQMessageBox.information(self, self.trUtf8("Revert"), self.trUtf8("""There are no missing items available/selected.""")) return self.vcs.vcsRevert(names) self.on_refreshButton_clicked() self.vcs.checkVCSStatus() def __diff(self): """ Private slot to handle the Diff context menu entry. """ names = [os.path.join(self.dname, unicode(itm.text(self.__pathColumn))) \ for itm in self.__getModifiedItems()] if not names: KQMessageBox.information(self, self.trUtf8("Differences"), self.trUtf8("""There are no uncommitted changes available/selected.""")) return if self.diff is None: self.diff = SvnDiffDialog(self.vcs) self.diff.show() QApplication.processEvents() self.diff.start(names) def __lock(self): """ Private slot to handle the Lock context menu entry. """ names = [os.path.join(self.dname, unicode(itm.text(self.__pathColumn))) \ for itm in self.__getLockActionItems(self.unlockedIndicators)] if not names: KQMessageBox.information(self, self.trUtf8("Lock"), self.trUtf8("""There are no unlocked files available/selected.""")) return self.vcs.svnLock(names, parent = self) self.on_refreshButton_clicked() def __unlock(self): """ Private slot to handle the Unlock context menu entry. """ names = [os.path.join(self.dname, unicode(itm.text(self.__pathColumn))) \ for itm in self.__getLockActionItems(self.lockedIndicators)] if not names: KQMessageBox.information(self, self.trUtf8("Unlock"), self.trUtf8("""There are no locked files available/selected.""")) return self.vcs.svnUnlock(names, parent = self) self.on_refreshButton_clicked() def __breakLock(self): """ Private slot to handle the Break Lock context menu entry. """ names = [os.path.join(self.dname, unicode(itm.text(self.__pathColumn))) \ for itm in self.__getLockActionItems(self.stealBreakLockIndicators)] if not names: KQMessageBox.information(self, self.trUtf8("Break Lock"), self.trUtf8("""There are no locked files available/selected.""")) return self.vcs.svnUnlock(names, parent = self, breakIt = True) self.on_refreshButton_clicked() def __stealLock(self): """ Private slot to handle the Break Lock context menu entry. """ names = [os.path.join(self.dname, unicode(itm.text(self.__pathColumn))) \ for itm in self.__getLockActionItems(self.stealBreakLockIndicators)] if not names: KQMessageBox.information(self, self.trUtf8("Steal Lock"), self.trUtf8("""There are no locked files available/selected.""")) return self.vcs.svnLock(names, parent=self, stealIt=True) self.on_refreshButton_clicked() def __addToChangelist(self): """ Private slot to add entries to a changelist. """ names = [os.path.join(self.dname, unicode(itm.text(self.__pathColumn))) \ for itm in self.__getNonChangelistItems()] if not names: KQMessageBox.information(self, self.trUtf8("Remove from Changelist"), self.trUtf8( """There are no files available/selected not """ """belonging to a changelist.""" ) ) return self.vcs.svnAddToChangelist(names) self.on_refreshButton_clicked() def __removeFromChangelist(self): """ Private slot to remove entries from their changelists. """ names = [os.path.join(self.dname, unicode(itm.text(self.__pathColumn))) \ for itm in self.__getChangelistItems()] if not names: KQMessageBox.information(self, self.trUtf8("Remove from Changelist"), self.trUtf8( """There are no files available/selected belonging to a changelist.""" ) ) return self.vcs.svnRemoveFromChangelist(names) self.on_refreshButton_clicked() def __getCommitableItems(self): """ Private method to retrieve all entries the user wants to commit. @return list of all items, the user has checked """ commitableItems = [] for index in range(self.statusList.topLevelItemCount()): itm = self.statusList.topLevelItem(index) if itm.checkState(self.__toBeCommittedColumn) == Qt.Checked: commitableItems.append(itm) return commitableItems def __getModifiedItems(self): """ Private method to retrieve all entries, that have a modified status. @return list of all items with a modified status """ modifiedItems = [] for itm in self.statusList.selectedItems(): if self.modifiedIndicators.contains(itm.text(self.__statusColumn)) or \ self.modifiedIndicators.contains(itm.text(self.__propStatusColumn)): modifiedItems.append(itm) return modifiedItems def __getUnversionedItems(self): """ Private method to retrieve all entries, that have an unversioned status. @return list of all items with an unversioned status """ unversionedItems = [] for itm in self.statusList.selectedItems(): if self.unversionedIndicators.contains(itm.text(self.__statusColumn)): unversionedItems.append(itm) return unversionedItems def __getMissingItems(self): """ Private method to retrieve all entries, that have a missing status. @return list of all items with a missing status """ missingItems = [] for itm in self.statusList.selectedItems(): if self.missingIndicators.contains(itm.text(self.__statusColumn)): missingItems.append(itm) return missingItems def __getLockActionItems(self, indicators): """ Private method to retrieve all emtries, that have a locked status. @return list of all items with a locked status """ lockitems = [] for itm in self.statusList.selectedItems(): if indicators.contains(itm.text(self.__lockinfoColumn)): lockitems.append(itm) return lockitems def __getChangelistItems(self): """ Private method to retrieve all entries, that are members of a changelist. @return list of all items belonging to a changelist """ clitems = [] for itm in self.statusList.selectedItems(): if not itm.text(self.__changelistColumn).isEmpty(): clitems.append(itm) return clitems def __getNonChangelistItems(self): """ Private method to retrieve all entries, that are not members of a changelist. @return list of all items not belonging to a changelist """ clitems = [] for itm in self.statusList.selectedItems(): if itm.text(self.__changelistColumn).isEmpty(): clitems.append(itm) return clitems eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/SvnBlameDialog.py0000644000175000001440000000013212261012650026276 xustar000000000000000030 mtime=1388582312.230079995 30 atime=1389081082.914724397 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/SvnBlameDialog.py0000644000175000001440000002041412261012650026031 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Module implementing a dialog to show the output of the svn blame command. """ import sys from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQMessageBox from Ui_SvnBlameDialog import Ui_SvnBlameDialog import Preferences import Utilities class SvnBlameDialog(QDialog, Ui_SvnBlameDialog): """ Class implementing a dialog to show the output of the svn blame command. """ def __init__(self, vcs, parent = None): """ Constructor @param vcs reference to the vcs object @param parent parent widget (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.buttonBox.button(QDialogButtonBox.Close).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Cancel).setDefault(True) self.process = QProcess() self.vcs = vcs self.blameList.headerItem().setText(self.blameList.columnCount(), "") font = QFont(self.blameList.font()) if Utilities.isWindowsPlatform(): font.setFamily("Lucida Console") else: font.setFamily("Monospace") self.blameList.setFont(font) self.__ioEncoding = str(Preferences.getSystem("IOEncoding")) self.connect(self.process, SIGNAL('finished(int, QProcess::ExitStatus)'), self.__procFinished) self.connect(self.process, SIGNAL('readyReadStandardOutput()'), self.__readStdout) self.connect(self.process, SIGNAL('readyReadStandardError()'), self.__readStderr) def closeEvent(self, e): """ Private slot implementing a close event handler. @param e close event (QCloseEvent) """ if self.process is not None and \ self.process.state() != QProcess.NotRunning: self.process.terminate() QTimer.singleShot(2000, self.process, SLOT('kill()')) self.process.waitForFinished(3000) e.accept() def start(self, fn): """ Public slot to start the svn status command. @param fn filename to show the log for (string) """ self.errorGroup.hide() self.intercept = False self.activateWindow() self.lineno = 1 dname, fname = self.vcs.splitPath(fn) self.process.kill() args = QStringList() args.append('blame') self.vcs.addArguments(args, self.vcs.options['global']) args.append(fname) self.process.setWorkingDirectory(dname) self.process.start('svn', args) procStarted = self.process.waitForStarted() if not procStarted: self.inputGroup.setEnabled(False) self.inputGroup.hide() KQMessageBox.critical(None, self.trUtf8('Process Generation Error'), self.trUtf8( 'The process %1 could not be started. ' 'Ensure, that it is in the search path.' ).arg('svn')) else: self.inputGroup.setEnabled(True) self.inputGroup.show() def __finish(self): """ Private slot called when the process finished or the user pressed the button. """ if self.process is not None and \ self.process.state() != QProcess.NotRunning: self.process.terminate() QTimer.singleShot(2000, self.process, SLOT('kill()')) self.process.waitForFinished(3000) self.buttonBox.button(QDialogButtonBox.Close).setEnabled(True) self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Close).setDefault(True) self.buttonBox.button(QDialogButtonBox.Close).setFocus(Qt.OtherFocusReason) self.inputGroup.setEnabled(False) self.inputGroup.hide() self.process = None self.__resizeColumns() def on_buttonBox_clicked(self, button): """ Private slot called by a button of the button box clicked. @param button button that was clicked (QAbstractButton) """ if button == self.buttonBox.button(QDialogButtonBox.Close): self.close() elif button == self.buttonBox.button(QDialogButtonBox.Cancel): self.__finish() def __procFinished(self, exitCode, exitStatus): """ Private slot connected to the finished signal. @param exitCode exit code of the process (integer) @param exitStatus exit status of the process (QProcess.ExitStatus) """ self.__finish() def __resizeColumns(self): """ Private method to resize the list columns. """ self.blameList.header().resizeSections(QHeaderView.ResizeToContents) self.blameList.header().setStretchLastSection(True) def __generateItem(self, revision, author, text): """ Private method to generate a tag item in the taglist. @param revision revision string (string or QString) @param author author of the tag (string or QString) @param date date of the tag (string or QString) @param name name (path) of the tag (string or QString) """ itm = QTreeWidgetItem(self.blameList, QStringList() << revision << author << "%d" % self.lineno << text) self.lineno += 1 itm.setTextAlignment(0, Qt.AlignRight) itm.setTextAlignment(2, Qt.AlignRight) def __readStdout(self): """ Private slot to handle the readyReadStdout signal. It reads the output of the process, formats it and inserts it into the contents pane. """ self.process.setReadChannel(QProcess.StandardOutput) while self.process.canReadLine(): s = unicode(self.process.readLine(), self.__ioEncoding, 'replace').strip() rev, s = s.split(None, 1) try: author, text = s.split(' ', 1) except ValueError: author = s.strip() text = "" self.__generateItem(rev, author, text) def __readStderr(self): """ Private slot to handle the readyReadStderr signal. It reads the error output of the process and inserts it into the error pane. """ if self.process is not None: self.errorGroup.show() s = QString(self.process.readAllStandardError()) self.errors.insertPlainText(s) self.errors.ensureCursorVisible() def on_passwordCheckBox_toggled(self, isOn): """ Private slot to handle the password checkbox toggled. @param isOn flag indicating the status of the check box (boolean) """ if isOn: self.input.setEchoMode(QLineEdit.Password) else: self.input.setEchoMode(QLineEdit.Normal) @pyqtSignature("") def on_sendButton_clicked(self): """ Private slot to send the input to the subversion process. """ input = self.input.text() input.append(os.linesep) if self.passwordCheckBox.isChecked(): self.errors.insertPlainText(os.linesep) self.errors.ensureCursorVisible() else: self.errors.insertPlainText(input) self.errors.ensureCursorVisible() self.process.write(input.toLocal8Bit()) self.passwordCheckBox.setChecked(False) self.input.clear() def on_input_returnPressed(self): """ Private slot to handle the press of the return key in the input field. """ self.intercept = True self.on_sendButton_clicked() def keyPressEvent(self, evt): """ Protected slot to handle a key press event. @param evt the key press event (QKeyEvent) """ if self.intercept: self.intercept = False evt.accept() return QDialog.keyPressEvent(self, evt) eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/SvnUrlSelectionDialog.py0000644000175000001440000000013212261012650027666 xustar000000000000000030 mtime=1388582312.233080033 30 atime=1389081082.914724397 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/SvnUrlSelectionDialog.py0000644000175000001440000001273412261012650027427 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing a dialog to enter the URLs for the svn diff command. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQMessageBox from KdeQt.KQApplication import e4App from Ui_SvnUrlSelectionDialog import Ui_SvnUrlSelectionDialog import Utilities class SvnUrlSelectionDialog(QDialog, Ui_SvnUrlSelectionDialog): """ Class implementing a dialog to enter the URLs for the svn diff command. """ def __init__(self, vcs, tagsList, branchesList, path, parent = None): """ Constructor @param vcs reference to the vcs object @param tagsList list of tags (QStringList) @param branchesList list of branches (QStringList) @param path pathname to determine the repository URL from (string or QString) @param parent parent widget of the dialog (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) if vcs.versionStr < "1.4.0": self.summaryCheckBox.setEnabled(False) self.summaryCheckBox.setChecked(False) self.vcs = vcs self.tagsList = tagsList self.branchesList = branchesList self.typeCombo1.addItems(QStringList() << "trunk/" << "tags/" << "branches/") self.typeCombo2.addItems(QStringList() << "trunk/" << "tags/" << "branches/") reposURL = self.vcs.svnGetReposName(path) if reposURL is None: KQMessageBox.critical(None, self.trUtf8("Subversion Error"), self.trUtf8("""The URL of the project repository could not be""" """ retrieved from the working copy. The operation will""" """ be aborted""")) self.reject() return if self.vcs.otherData["standardLayout"]: # determine the base path of the project in the repository rx_base = QRegExp('(.+/)(trunk|tags|branches).*') if not rx_base.exactMatch(reposURL): KQMessageBox.critical(None, self.trUtf8("Subversion Error"), self.trUtf8("""The URL of the project repository has an""" """ invalid format. The list operation will""" """ be aborted""")) self.reject() return reposRoot = unicode(rx_base.cap(1)) self.repoRootLabel1.setText(reposRoot) self.repoRootLabel2.setText(reposRoot) else: project = e4App().getObject('Project') if Utilities.normcasepath(path) != \ Utilities.normcasepath(project.getProjectPath()): path = project.getRelativePath(path) reposURL = reposURL.replace(path, '') self.repoRootLabel1.hide() self.typeCombo1.hide() self.labelCombo1.addItems(QStringList(reposURL) + self.vcs.tagsList) self.labelCombo1.setEnabled(True) self.repoRootLabel2.hide() self.typeCombo2.hide() self.labelCombo2.addItems(QStringList(reposURL) + self.vcs.tagsList) self.labelCombo2.setEnabled(True) def __changeLabelCombo(self, labelCombo, type_): """ Private method used to change the label combo depending on the selected type. @param labelCombo reference to the labelCombo object (QComboBox) @param type type string (QString) """ if type_ == "trunk/": labelCombo.clear() labelCombo.setEditText("") labelCombo.setEnabled(False) elif type_ == "tags/": labelCombo.clear() labelCombo.clearEditText() labelCombo.addItems(self.tagsList) labelCombo.setEnabled(True) elif type_ == "branches/": labelCombo.clear() labelCombo.clearEditText() labelCombo.addItems(self.branchesList) labelCombo.setEnabled(True) @pyqtSignature("QString") def on_typeCombo1_currentIndexChanged(self, type_): """ Private slot called when the selected type was changed. @param type_ selected type (QString) """ self.__changeLabelCombo(self.labelCombo1, type_) @pyqtSignature("QString") def on_typeCombo2_currentIndexChanged(self, type_): """ Private slot called when the selected type was changed. @param type_ selected type (QString) """ self.__changeLabelCombo(self.labelCombo2, type_) def getURLs(self): """ Public method to get the entered URLs. @return tuple of list of two URL strings (list of strings) and a flag indicating a diff summary (boolean) """ if self.vcs.otherData["standardLayout"]: url1 = unicode(self.repoRootLabel1.text() + \ self.typeCombo1.currentText() + \ self.labelCombo1.currentText()) url2 = unicode(self.repoRootLabel2.text() + \ self.typeCombo2.currentText() + \ self.labelCombo2.currentText()) else: url1 = unicode(self.labelCombo1.currentText()) url2 = unicode(self.labelCombo2.currentText()) return [url1, url2], self.summaryCheckBox.isChecked() eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/SvnCommandDialog.ui0000644000175000001440000000007411744565542026650 xustar000000000000000030 atime=1389081082.915724397 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/SvnCommandDialog.ui0000644000175000001440000001373611744565542026407 0ustar00detlevusers00000000000000 SvnCommandDialog 0 0 628 137 Subversion Command Subversion Command: 0 0 Enter the Subversion command to be executed with all necessary parameters <b>Subversion Command</b> <p>Enter the Subversion command to be executed including all necessary parameters. If a parameter of the commandline includes a space you have to surround this parameter by single or double quotes. Do not include the name of the subversion client executable (i.e. svn).</p> true QComboBox::InsertAtTop true false Select the working directory via a directory selection dialog <b>Working directory</b> <p>Select the working directory for the Subversion command via a directory selection dialog.</p> ... 0 0 Enter the working directory for the Subversion command <b>Working directory</b> <p>Enter the working directory for the Subversion command. This is an optional entry. The button to the right will open a directory selection dialog.</p> true QComboBox::InsertAtTop true false Working Directory:<br>(optional) 0 0 Project Directory: 0 0 This shows the root directory of the current project. project directory Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok qPixmapFromMimeSource commandCombo workdirCombo dirButton buttonBox buttonBox accepted() SvnCommandDialog accept() 41 103 49 129 buttonBox rejected() SvnCommandDialog reject() 173 109 174 128 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/SvnTagDialog.ui0000644000175000001440000000007411072705612025771 xustar000000000000000030 atime=1389081082.915724397 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/SvnTagDialog.ui0000644000175000001440000001203111072705612025513 0ustar00detlevusers00000000000000 SvnTagDialog 0 0 391 216 Subversion Tag true Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok 0 0 Enter the name of the tag <b>Tag Name</b> <p>Enter the name of the tag to be created, moved or deleted.</p> true true false Name: Tag Action Select to create a regular tag <b>Create Regular Tag</b> <p>Select this entry in order to create a regular tag in the repository.</p> Create Regular Tag true Select to create a branch tag <b>Create Branch Tag</b> <p>Select this entry in order to create a branch in the repository.</p> Create Branch Tag Select to delete a regular tag <b>Delete Regular Tag</b> <p>Select this entry in order to delete the selected regular tag.</p> Delete Regular Tag Select to delete a branch tag <b>Delete Branch Tag</b> <p>Select this entry in order to delete the selected branch tag.</p> Delete Branch Tag qPixmapFromMimeSource tagCombo createRegularButton createBranchButton deleteRegularButton deleteBranchButton buttonBox accepted() SvnTagDialog accept() 85 192 25 214 buttonBox rejected() SvnTagDialog reject() 122 193 128 210 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/SvnLogBrowserDialog.ui0000644000175000001440000000007411072705612027343 xustar000000000000000030 atime=1389081082.915724397 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/SvnLogBrowserDialog.ui0000644000175000001440000002555311072705612027102 0ustar00detlevusers00000000000000 SvnLogBrowserDialog 0 0 700 800 Subversion Log true From: Enter the start date true To: Enter the end date true Select the field to filter on Revision Author Message Enter the regular expression to filter on 0 5 true QAbstractItemView::ExtendedSelection false false true true Revision Author Date Message 0 2 true 0 3 true false false true true Action Path Copy from Copy from Rev Press to get the next bunch of log entries &Next Enter the limit of entries to fetch Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 1 10000 100 Select to stop listing log messages at a copy or move Stop on Copy/Move Qt::Vertical Press to generate a diff to the previous revision &Diff to Previous Press to compare two revisions &Compare Revisions Qt::Horizontal 81 29 0 1 Errors Qt::NoFocus <b>Subversion log errors</b><p>This shows possible error messages of the svn log command.</p> true false Input Qt::Horizontal QSizePolicy::Expanding 327 29 Press to send the input to the subversion process &Send Alt+S Enter data to be sent to the subversion process Select to switch the input field to password mode &Password Mode Alt+P Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Close fromDate toDate fieldCombo rxEdit clearRxEditButton logTree messageEdit filesTree nextButton limitSpinBox stopCheckBox diffPreviousButton diffRevisionsButton input passwordCheckBox sendButton buttonBox eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/SvnSwitchDialog.py0000644000175000001440000000013112261012650026516 xustar000000000000000029 mtime=1388582312.24308016 30 atime=1389081082.916724397 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/SvnSwitchDialog.py0000644000175000001440000000315512261012650026255 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Module implementing a dialog to enter the data for a switch operation. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from Ui_SvnSwitchDialog import Ui_SvnSwitchDialog class SvnSwitchDialog(QDialog, Ui_SvnSwitchDialog): """ Class implementing a dialog to enter the data for a switch operation. """ def __init__(self, taglist, reposURL, standardLayout, parent = None): """ Constructor @param taglist list of previously entered tags (QStringList) @param reposURL repository path (QString or string) or None @param standardLayout flag indicating the layout of the repository (boolean) @param parent parent widget (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.tagCombo.clear() self.tagCombo.addItems(taglist) if reposURL is not None and reposURL is not QString(): self.tagCombo.setEditText(reposURL) if not standardLayout: self.TagTypeGroup.setEnabled(False) def getParameters(self): """ Public method to retrieve the tag data. @return tuple of QString and int (tag, tag type) """ tag = self.tagCombo.currentText() tagType = 0 if self.regularButton.isChecked(): tagType = 1 elif self.branchButton.isChecked(): tagType = 2 if tag.isEmpty(): tagType = 4 return (tag, tagType) eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/Config.py0000644000175000001440000000013212261012650024654 xustar000000000000000030 mtime=1388582312.245080185 30 atime=1389081082.916724397 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/Config.py0000644000175000001440000002063512261012650024414 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2004 - 2014 Detlev Offenbach # """ Module defining configuration variables for the subversion package """ from PyQt4.QtCore import QStringList # Available protocols fpr the repository URL ConfigSvnProtocols = QStringList() ConfigSvnProtocols.append('file://') ConfigSvnProtocols.append('http://') ConfigSvnProtocols.append('https://') ConfigSvnProtocols.append('svn://') ConfigSvnProtocols.append('svn+ssh://') DefaultConfig = "\n".join([ "### This file configures various client-side behaviors.", "###", "### The commented-out examples below are intended to demonstrate", "### how to use this file.", "", "### Section for authentication and authorization customizations.", "[auth]", "### Set password stores used by Subversion. They should be", "### delimited by spaces or commas. The order of values determines", "### the order in which password stores are used.", "### Valid password stores:", "### gnome-keyring (Unix-like systems)", "### kwallet (Unix-like systems)", "### keychain (Mac OS X)", "### windows-cryptoapi (Windows)", "# password-stores = keychain", "# password-stores = windows-cryptoapi", "# password-stores = gnome-keyring,kwallet", "### To disable all password stores, use an empty list:", "# password-stores =", "###", "### Set KWallet wallet used by Subversion. If empty or unset,", "### then the default network wallet will be used.", "# kwallet-wallet =", "###", "### Include PID (Process ID) in Subversion application name when", "### using KWallet. It defaults to 'no'.", "# kwallet-svn-application-name-with-pid = yes", "###", "### The rest of the [auth] section in this file has been deprecated.", "### Both 'store-passwords' and 'store-auth-creds' can now be", "### specified in the 'servers' file in your config directory", "### and are documented there. Anything specified in this section ", "### is overridden by settings specified in the 'servers' file.", "# store-passwords = no", "# store-auth-creds = no", "", "### Section for configuring external helper applications.", "[helpers]", "### Set editor-cmd to the command used to invoke your text editor.", "### This will override the environment variables that Subversion", "### examines by default to find this information ($EDITOR, ", "### et al).", "# editor-cmd = editor (vi, emacs, notepad, etc.)", "### Set diff-cmd to the absolute path of your 'diff' program.", "### This will override the compile-time default, which is to use", "### Subversion's internal diff implementation.", "# diff-cmd = diff_program (diff, gdiff, etc.)", "### Diff-extensions are arguments passed to an external diff", "### program or to Subversion's internal diff implementation.", "### Set diff-extensions to override the default arguments ('-u').", "# diff-extensions = -u -p", "### Set diff3-cmd to the absolute path of your 'diff3' program.", "### This will override the compile-time default, which is to use", "### Subversion's internal diff3 implementation.", "# diff3-cmd = diff3_program (diff3, gdiff3, etc.)", "### Set diff3-has-program-arg to 'yes' if your 'diff3' program", "### accepts the '--diff-program' option.", "# diff3-has-program-arg = [yes | no]", "### Set merge-tool-cmd to the command used to invoke your external", "### merging tool of choice. Subversion will pass 5 arguments to", "### the specified command: base theirs mine merged wcfile", "# merge-tool-cmd = merge_command", "", "### Section for configuring tunnel agents.", "[tunnels]", "### Configure svn protocol tunnel schemes here. By default, only", "### the 'ssh' scheme is defined. You can define other schemes to", "### be used with 'svn+scheme://hostname/path' URLs. A scheme", "### definition is simply a command, optionally prefixed by an", "### environment variable name which can override the command if it", "### is defined. The command (or environment variable) may contain", "### arguments, using standard shell quoting for arguments with", "### spaces. The command will be invoked as:", "### svnserve -t", "### (If the URL includes a username, then the hostname will be", "### passed to the tunnel agent as @.) If the", "### built-in ssh scheme were not predefined, it could be defined", "### as:", "# ssh = $SVN_SSH ssh -q", "### If you wanted to define a new 'rsh' scheme, to be used with", "### 'svn+rsh:' URLs, you could do so as follows:", "# rsh = rsh", "### Or, if you wanted to specify a full path and arguments:", "# rsh = /path/to/rsh -l myusername", "### On Windows, if you are specifying a full path to a command,", "### use a forward slash (/) or a paired backslash (\\\\) as the", "### path separator. A single backslash will be treated as an", "### escape for the following character.", "", "### Section for configuring miscelleneous Subversion options.", "[miscellany]", "### Set global-ignores to a set of whitespace-delimited globs", "### which Subversion will ignore in its 'status' output, and", "### while importing or adding files and directories.", "### '*' matches leading dots, e.g. '*.rej' matches '.foo.rej'.", "global-ignores = *.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc", " *.pyo .*.rej *.rej .*~ *~ #*# .#* .*.swp .DS_Store", " *.orig *.bak cur tmp __pycache__ .directory", " .ropeproject .eric4project _ropeproject _eric4project", "### Set log-encoding to the default encoding for log messages", "# log-encoding = latin1", "### Set use-commit-times to make checkout/update/switch/revert", "### put last-committed timestamps on every file touched.", "# use-commit-times = yes", "### Set no-unlock to prevent 'svn commit' from automatically", "### releasing locks on files.", "# no-unlock = yes", "### Set mime-types-file to a MIME type registry file, used to", "### provide hints to Subversion's MIME type auto-detection", "### algorithm.", "# mime-types-file = /path/to/mime.types", "### Set preserved-conflict-file-exts to a whitespace-delimited", "### list of patterns matching file extensions which should be", "### preserved in generated conflict file names. By default,", "### conflict files use custom extensions.", "# preserved-conflict-file-exts = doc ppt xls od?", "### Set enable-auto-props to 'yes' to enable automatic properties", "### for 'svn add' and 'svn import', it defaults to 'no'.", "### Automatic properties are defined in the section 'auto-props'.", "# enable-auto-props = yes", "### Set interactive-conflicts to 'no' to disable interactive", "### conflict resolution prompting. It defaults to 'yes'.", "# interactive-conflicts = no", "### Set memory-cache-size to define the size of the memory cache", "### used by the client when accessing a FSFS repository via", "### ra_local (the file:// scheme). The value represents the number", "### of MB used by the cache.", "# memory-cache-size = 16", "", "### Section for configuring automatic properties.", "[auto-props]", "### The format of the entries is:", "### file-name-pattern = propname[=value][;propname[=value]...]", "### The file-name-pattern can contain wildcards (such as '*' and", "### '?'). All entries which match (case-insensitively) will be", "### applied to the file. Note that auto-props functionality", "### must be enabled, which is typically done by setting the", "### 'enable-auto-props' option.", "# *.c = svn:eol-style=native", "# *.cpp = svn:eol-style=native", "# *.h = svn:keywords=Author Date Id Rev URL;svn:eol-style=native", "# *.dsp = svn:eol-style=CRLF", "# *.dsw = svn:eol-style=CRLF", "# *.sh = svn:eol-style=native;svn:executable", "# *.txt = svn:eol-style=native;svn:keywords=Author Date Id Rev URL;", "# *.png = svn:mime-type=image/png", "# *.jpg = svn:mime-type=image/jpeg", "# Makefile = svn:eol-style=native", "", ]) DefaultIgnores = [ "*.orig", "*.bak", "cur", "tmp", "__pycache__", ".directory", ".ropeproject", ".eric4project", "_ropeproject", "_eric4project", ] eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/SvnRevisionSelectionDialog.ui0000644000175000001440000000007411072705612030722 xustar000000000000000030 atime=1389081082.916724397 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/SvnRevisionSelectionDialog.ui0000644000175000001440000003202611072705612030452 0ustar00detlevusers00000000000000 SvnRevisionSelectionDialog 0 0 339 519 Subversion Diff true Revision &1 Select revision before last commit PREV Select last committed revision COMMITTED Select base revision BASE Select head revision of repository HEAD Select working revision WORKING true false 0 0 Enter a revision number Qt::AlignRight 1 999999999 false Enter time of revision false Enter date of revision yyyy-MM-dd true Qt::Horizontal 40 20 Select to specify a revision by number Number Select to specify a revision by date and time Date Revision &2 Select revision before last commit PREV Select last committed revision COMMITTED Select base revision BASE Select head revision of repository HEAD true Select working revision WORKING false 0 0 Enter a revision number Qt::AlignRight 1 999999999 false Enter time of revision false Enter date of revision yyyy-MM-dd true Qt::Horizontal 40 20 Select to specify a revision by number Number Select to specify a revision by date and time Date Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok qPixmapFromMimeSource number1Button number1SpinBox date1Button date1Edit time1Edit head1Button working1Button base1Button committed1Button prev1Button number2Button number2SpinBox date2Button date2Edit time2Edit head2Button working2Button base2Button committed2Button prev2Button buttonBox buttonBox accepted() SvnRevisionSelectionDialog accept() 27 512 21 143 buttonBox rejected() SvnRevisionSelectionDialog reject() 79 512 73 140 number1Button toggled(bool) number1SpinBox setEnabled(bool) 62 45 148 43 date1Button toggled(bool) date1Edit setEnabled(bool) 70 77 136 74 date1Button toggled(bool) time1Edit setEnabled(bool) 16 74 257 74 number2Button toggled(bool) number2SpinBox setEnabled(bool) 32 281 128 283 date2Button toggled(bool) date2Edit setEnabled(bool) 49 310 134 310 date2Button toggled(bool) time2Edit setEnabled(bool) 55 322 264 320 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/SvnCommitDialog.ui0000644000175000001440000000013211762647615026517 xustar000000000000000030 mtime=1338724237.164135538 30 atime=1389081082.916724397 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/SvnCommitDialog.ui0000644000175000001440000000576211762647615026263 0ustar00detlevusers00000000000000 SvnCommitDialog 0 0 450 396 Subversion Commit Message Enter the log message. <b>Log Message</b> <p>Enter the log message for the commit action.</p> true false Recent commit messages Select a recent commit message to use Changelists Select the change lists to limit the commit Select to keep the changelists Keep changelists Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Close|QDialogButtonBox::Ok qPixmapFromMimeSource logEdit recentComboBox changeLists keepChangeListsCheckBox buttonBox eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/SvnRelocateDialog.ui0000644000175000001440000000007411072705612027014 xustar000000000000000030 atime=1389081082.954724396 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/SvnRelocateDialog.ui0000644000175000001440000000566611072705612026556 0ustar00detlevusers00000000000000 SvnRelocateDialog 0 0 531 119 Subversion Relocate true QFrame::StyledPanel New repository URL: Enter the URL of the repository the working space should be relocated to Current repository URL: Select, if the relocate should happen inside the repository Relocate inside repository (used, if the repository layout has changed) Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok newUrlEdit insideCheckBox buttonBox buttonBox accepted() SvnRelocateDialog accept() 31 75 29 92 buttonBox rejected() SvnRelocateDialog reject() 69 74 69 95 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/SvnNewProjectOptionsDialog.ui0000644000175000001440000000013212114635661030711 xustar000000000000000030 mtime=1362312113.977770024 30 atime=1389081082.954724396 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/SvnNewProjectOptionsDialog.ui0000644000175000001440000001506312114635661030450 0ustar00detlevusers00000000000000 SvnNewProjectOptionsDialog 0 0 562 201 New Project from Repository <b>New Project from Repository Dialog</b> <p>Enter the various repository infos into the entry fields. These values are used, when the new project is retrieved from the repository. If the checkbox is selected, the URL must end in the project name. A repository layout with project/tags, project/branches and project/trunk will be assumed. In this case, you may enter a tag or branch, which must look like tags/tagname or branches/branchname. If the checkbox is not selected, the URL must contain the complete path in the repository.</p> <p>For remote repositories the URL must contain the hostname.</p> true Enter the tag the new project should be generated from <b>Tag in VCS</b> <p>Enter the tag name the new project shall be generated from. Leave empty to retrieve the latest data from the repository.</p> ... Select the protocol to access the repository &Protocol: protocolCombo Enter the url path of the module in the repository (without protocol part) <b>URL</b><p>Enter the URL to the module. For a repository with standard layout, this must not contain the trunk, tags or branches part.</p> &URL: vcsUrlEdit Enter the directory of the new project. <b>Project Directory</b> <p>Enter the directory of the new project. It will be retrieved from the repository and be placed in this directory.</p> Select to indicate, that the repository has a standard layout (projectdir/trunk, projectdir/tags, projectdir/branches) Repository has standard &layout Alt+L true Select the repository url via a directory selection dialog or the repository browser ... Project &Directory: vcsProjectDirEdit &Tag: vcsTagEdit Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok qPixmapFromMimeSource protocolCombo vcsUrlEdit vcsUrlButton vcsTagEdit vcsProjectDirEdit projectDirButton layoutCheckBox buttonBox accepted() SvnNewProjectOptionsDialog accept() 37 176 38 198 buttonBox rejected() SvnNewProjectOptionsDialog reject() 147 177 153 197 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/SvnMergeDialog.py0000644000175000001440000000013112261012650026314 xustar000000000000000029 mtime=1388582312.24708021 30 atime=1389081082.955724397 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/SvnMergeDialog.py0000644000175000001440000000564612261012650026062 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Module implementing a dialog to enter the data for a merge operation. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from Ui_SvnMergeDialog import Ui_SvnMergeDialog class SvnMergeDialog(QDialog, Ui_SvnMergeDialog): """ Class implementing a dialog to enter the data for a merge operation. """ def __init__(self, mergelist1, mergelist2, targetlist, force = False, parent = None): """ Constructor @param mergelist1 list of previously entered URLs/revisions (QStringList) @param mergelist2 list of previously entered URLs/revisions (QStringList) @param targetlist list of previously entered targets (QStringList) @param force flag indicating a forced merge (boolean) @param parent parent widget (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.forceCheckBox.setChecked(force) self.rx_url = QRegExp('(?:file:|svn:|svn+ssh:|http:|https:)//.+') self.rx_rev = QRegExp('\\d+') self.tag1Combo.clear() self.tag1Combo.addItems(mergelist1) self.tag2Combo.clear() self.tag2Combo.addItems(mergelist2) self.targetCombo.clear() self.targetCombo.addItems(targetlist) self.okButton = self.buttonBox.button(QDialogButtonBox.Ok) self.okButton.setEnabled(False) def __enableOkButton(self): """ Private method used to enable/disable the OK-button. @param text ignored """ self.okButton.setDisabled( self.tag1Combo.currentText().isEmpty() or \ self.tag2Combo.currentText().isEmpty() or \ not ((self.rx_url.exactMatch(self.tag1Combo.currentText()) and \ self.rx_url.exactMatch(self.tag2Combo.currentText())) or \ (self.rx_rev.exactMatch(self.tag1Combo.currentText()) and \ self.rx_rev.exactMatch(self.tag2Combo.currentText())) ) ) def on_tag1Combo_editTextChanged(self, text): """ Private slot to handle the tag1Combo editTextChanged signal. """ self.__enableOkButton() def on_tag2Combo_editTextChanged(self, text): """ Private slot to handle the tag2Combo editTextChanged signal. """ self.__enableOkButton() def getParameters(self): """ Public method to retrieve the tag data. @return tuple naming two tag names or two revisions, a target and a flag indicating a forced merge (QString, QString, QString, boolean) """ return (self.tag1Combo.currentText(), self.tag2Combo.currentText(), self.targetCombo.currentText(), self.forceCheckBox.isChecked()) eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/SvnRevisionSelectionDialog.py0000644000175000001440000000013212261012650030722 xustar000000000000000030 mtime=1388582312.250080249 30 atime=1389081082.955724397 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/SvnRevisionSelectionDialog.py0000644000175000001440000000534212261012650030460 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing a dialog to enter the revisions for the svn diff command. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from Ui_SvnRevisionSelectionDialog import Ui_SvnRevisionSelectionDialog class SvnRevisionSelectionDialog(QDialog, Ui_SvnRevisionSelectionDialog): """ Class implementing a dialog to enter the revisions for the svn diff command. """ def __init__(self,parent = None): """ Constructor @param parent parent widget of the dialog (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.date1Edit.setDate(QDate.currentDate()) self.date2Edit.setDate(QDate.currentDate()) def __getRevision(self, no): """ Private method to generate the revision. @param no revision number to generate (1 or 2) @return revision (integer or string) """ if no == 1: numberButton = self.number1Button numberSpinBox = self.number1SpinBox dateButton = self.date1Button dateEdit = self.date1Edit timeEdit = self.time1Edit headButton = self.head1Button workingButton = self.working1Button baseButton = self.base1Button committedButton = self.committed1Button prevButton = self.prev1Button else: numberButton = self.number2Button numberSpinBox = self.number2SpinBox dateButton = self.date2Button dateEdit = self.date2Edit timeEdit = self.time2Edit headButton = self.head2Button workingButton = self.working2Button baseButton = self.base2Button committedButton = self.committed2Button prevButton = self.prev2Button if numberButton.isChecked(): return numberSpinBox.value() elif dateButton.isChecked(): return "{%s}" % \ QDateTime(dateEdit.date(), timeEdit.time()).toString(Qt.ISODate) elif headButton.isChecked(): return "HEAD" elif workingButton.isChecked(): return "WORKING" elif baseButton.isChecked(): return "BASE" elif committedButton.isChecked(): return "COMMITTED" elif prevButton.isChecked(): return "PREV" def getRevisions(self): """ Public method to get the revisions. @return list two integers or strings """ rev1 = self.__getRevision(1) rev2 = self.__getRevision(2) return [rev1, rev2] eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/SvnStatusDialog.ui0000644000175000001440000000007411744566330026551 xustar000000000000000030 atime=1389081082.955724397 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.ui0000644000175000001440000002161711744566330026305 0ustar00detlevusers00000000000000 SvnStatusDialog 0 0 955 646 Subversion Status <b>Subversion Status</b> <p>This dialog shows the status of the selected file or project.</p> Qt::Horizontal 40 20 &Filter on Status: statusFilterCombo Select the status of entries to be shown QComboBox::AdjustToContents 0 3 true QAbstractItemView::ExtendedSelection false true Commit Changelist Status Prop. Status Locked History Switched Lock Info Up to date Revision Last Change Author Path Commit the selected changes &Commit Qt::Vertical Add the selected entries to the repository &Add Show differences of the selected entries to the repository &Differences Revert the selected entries to the last revision in the repository Re&vert Restore the selected missing entries from the repository &Restore Qt::Horizontal 40 20 0 1 Errors true false Input Qt::Horizontal QSizePolicy::Expanding 327 29 Press to send the input to the subversion process &Send Alt+S Enter data to be sent to the subversion process Select to switch the input field to password mode &Password Mode Alt+P Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Close qPixmapFromMimeSource statusFilterCombo statusList commitButton addButton diffButton revertButton restoreButton errors input passwordCheckBox sendButton buttonBox eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/SvnCommitDialog.py0000644000175000001440000000013212261012650026506 xustar000000000000000030 mtime=1388582312.259080363 30 atime=1389081082.956724397 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/SvnCommitDialog.py0000644000175000001440000000741012261012650026242 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Module implementing a dialog to enter the commit message. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from Ui_SvnCommitDialog import Ui_SvnCommitDialog import Preferences class SvnCommitDialog(QWidget, Ui_SvnCommitDialog): """ Class implementing a dialog to enter the commit message. @signal accepted() emitted, if the dialog was accepted @signal rejected() emitted, if the dialog was rejected """ def __init__(self, vcs, parent = None): """ Constructor @param vcs reference to the vcs object @param parent parent widget (QWidget) """ QWidget.__init__(self, parent, Qt.WindowFlags(Qt.Window)) self.setupUi(self) if vcs.versionStr < '1.5.0': self.changeListsGroup.hide() else: self.changeLists.addItems(sorted(vcs.svnGetChangelists())) def showEvent(self, evt): """ Public method called when the dialog is about to be shown. @param evt the event (QShowEvent) """ self.recentCommitMessages = \ Preferences.Prefs.settings.value('Subversion/Commits').toStringList() self.recentComboBox.clear() self.recentComboBox.addItem("") self.recentComboBox.addItems(self.recentCommitMessages) def logMessage(self): """ Public method to retrieve the log message. @return the log message (QString) """ msg = self.logEdit.toPlainText() if not msg.isEmpty(): self.recentCommitMessages.removeAll(msg) self.recentCommitMessages.prepend(msg) no = Preferences.Prefs.settings\ .value('Subversion/CommitMessages', QVariant(20)).toInt()[0] del self.recentCommitMessages[no:] Preferences.Prefs.settings.setValue('Subversion/Commits', QVariant(self.recentCommitMessages)) return msg def hasChangelists(self): """ Public method to check, if the user entered some changelists. @return flag indicating availability of changelists (boolean) """ return len(self.changeLists.selectedItems()) > 0 def changelistsData(self): """ Public method to retrieve the changelists data. @return tuple containing the changelists (list of strings) and a flag indicating to keep changelists (boolean) """ slists = [unicode(l.text()).strip() for l in self.changeLists.selectedItems() if unicode(l.text()).strip() != ""] if len(slists) == 0: return [], False return slists, self.keepChangeListsCheckBox.isChecked() def on_buttonBox_clicked(self, button): """ Private slot called by a button of the button box clicked. @param button button that was clicked (QAbstractButton) """ if button == self.buttonBox.button(QDialogButtonBox.Cancel): self.logEdit.clear() def on_buttonBox_accepted(self): """ Private slot called by the buttonBox accepted signal. """ self.close() self.emit(SIGNAL("accepted()")) def on_buttonBox_rejected(self): """ Private slot called by the buttonBox rejected signal. """ self.close() self.emit(SIGNAL("rejected()")) @pyqtSignature("QString") def on_recentComboBox_activated(self, txt): """ Private slot to select a commit message from recent ones. """ if not txt.isEmpty(): self.logEdit.setPlainText(txt) eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/SvnUrlSelectionDialog.ui0000644000175000001440000000007411072705612027666 xustar000000000000000030 atime=1389081082.956724397 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/SvnUrlSelectionDialog.ui0000644000175000001440000000767211072705612027427 0ustar00detlevusers00000000000000 SvnUrlSelectionDialog 0 0 542 195 Subversion Diff true Repository URL 1 Select the URL type 0 0 Enter the label name or path true Repository URL 2 Select the URL type 0 0 Enter the label name or path true Select to just show a summary of differences Summary only Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok typeCombo1 labelCombo1 typeCombo2 labelCombo2 summaryCheckBox buttonBox buttonBox accepted() SvnUrlSelectionDialog accept() 230 188 157 178 buttonBox rejected() SvnUrlSelectionDialog reject() 292 166 286 178 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/SvnRelocateDialog.py0000644000175000001440000000013212261012650027014 xustar000000000000000030 mtime=1388582312.261080388 30 atime=1389081082.956724397 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/SvnRelocateDialog.py0000644000175000001440000000217712261012650026555 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c)2014 Detlev Offenbach # """ Module implementing a dialog to enter the data to relocate the workspace. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from Ui_SvnRelocateDialog import Ui_SvnRelocateDialog class SvnRelocateDialog(QDialog, Ui_SvnRelocateDialog): """ Class implementing a dialog to enter the data to relocate the workspace. """ def __init__(self, currUrl, parent = None): """ Constructor @param currUrl current repository URL (string or QString) @param parent parent widget (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.currUrlLabel.setText(currUrl) self.newUrlEdit.setText(currUrl) def getData(self): """ Public slot used to retrieve the data entered into the dialog. @return the new repository URL (string) and an indication, if the relocate is inside the repository (boolean) """ return unicode(self.newUrlEdit.text()), self.insideCheckBox.isChecked() eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/SvnPropListDialog.py0000644000175000001440000000013212261012650027032 xustar000000000000000030 mtime=1388582312.264080426 30 atime=1389081082.956724397 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/SvnPropListDialog.py0000644000175000001440000001676512261012650026603 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Module implementing a dialog to show the output of the svn proplist command process. """ import types from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQMessageBox from Ui_SvnPropListDialog import Ui_SvnPropListDialog class SvnPropListDialog(QWidget, Ui_SvnPropListDialog): """ Class implementing a dialog to show the output of the svn proplist command process. """ def __init__(self, vcs, parent = None): """ Constructor @param vcs reference to the vcs object @param parent parent widget (QWidget) """ QWidget.__init__(self, parent) self.setupUi(self) self.buttonBox.button(QDialogButtonBox.Close).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Cancel).setDefault(True) self.process = QProcess() env = QProcessEnvironment.systemEnvironment() env.insert("LANG", "C") self.process.setProcessEnvironment(env) self.vcs = vcs self.propsList.headerItem().setText(self.propsList.columnCount(), "") self.propsList.header().setSortIndicator(0, Qt.AscendingOrder) self.connect(self.process, SIGNAL('finished(int, QProcess::ExitStatus)'), self.__procFinished) self.connect(self.process, SIGNAL('readyReadStandardOutput()'), self.__readStdout) self.connect(self.process, SIGNAL('readyReadStandardError()'), self.__readStderr) self.rx_path = QRegExp(r"Properties on '([^']+)':\s*") self.rx_prop = QRegExp(r" (.*) *: *(.*)[\r\n]") self.lastPath = None self.lastProp = None self.propBuffer = QString('') def __resort(self): """ Private method to resort the tree. """ self.propsList.sortItems(self.propsList.sortColumn(), self.propsList.header().sortIndicatorOrder()) def __resizeColumns(self): """ Private method to resize the list columns. """ self.propsList.header().resizeSections(QHeaderView.ResizeToContents) self.propsList.header().setStretchLastSection(True) def __generateItem(self, path, propName, propValue): """ Private method to generate a properties item in the properties list. @param path file/directory name the property applies to (string or QString) @param propName name of the property (string or QString) @param propValue value of the property (string or QString) """ QTreeWidgetItem(self.propsList, QStringList() << path << propName << propValue.trimmed()) def closeEvent(self, e): """ Private slot implementing a close event handler. @param e close event (QCloseEvent) """ if self.process is not None and \ self.process.state() != QProcess.NotRunning: self.process.terminate() QTimer.singleShot(2000, self.process, SLOT('kill()')) self.process.waitForFinished(3000) e.accept() def start(self, fn, recursive = False): """ Public slot to start the svn status command. @param fn filename(s) (string or list of string) @param recursive flag indicating a recursive list is requested """ self.errorGroup.hide() self.process.kill() args = QStringList() args.append('proplist') self.vcs.addArguments(args, self.vcs.options['global']) args.append('--verbose') if recursive: args.append('--recursive') if type(fn) is types.ListType: dname, fnames = self.vcs.splitPathList(fn) self.vcs.addArguments(args, fnames) else: dname, fname = self.vcs.splitPath(fn) args.append(fname) self.process.setWorkingDirectory(dname) self.process.start('svn', args) procStarted = self.process.waitForStarted() if not procStarted: KQMessageBox.critical(None, self.trUtf8('Process Generation Error'), self.trUtf8( 'The process %1 could not be started. ' 'Ensure, that it is in the search path.' ).arg('svn')) def __finish(self): """ Private slot called when the process finished or the user pressed the button. """ if self.process is not None and \ self.process.state() != QProcess.NotRunning: self.process.terminate() QTimer.singleShot(2000, self.process, SLOT('kill()')) self.process.waitForFinished(3000) self.buttonBox.button(QDialogButtonBox.Close).setEnabled(True) self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Close).setDefault(True) self.process = None if self.lastProp: self.__generateItem(self.lastPath, self.lastProp, self.propBuffer) self.__resort() self.__resizeColumns() def on_buttonBox_clicked(self, button): """ Private slot called by a button of the button box clicked. @param button button that was clicked (QAbstractButton) """ if button == self.buttonBox.button(QDialogButtonBox.Close): self.close() elif button == self.buttonBox.button(QDialogButtonBox.Cancel): self.__finish() def __procFinished(self, exitCode, exitStatus): """ Private slot connected to the finished signal. @param exitCode exit code of the process (integer) @param exitStatus exit status of the process (QProcess.ExitStatus) """ if self.lastPath is None: self.__generateItem('', 'None', '') self.__finish() def __readStdout(self): """ Private slot to handle the readyReadStandardOutput signal. It reads the output of the process, formats it and inserts it into the contents pane. """ self.process.setReadChannel(QProcess.StandardOutput) while self.process.canReadLine(): s = QString(self.process.readLine()) if self.rx_path.exactMatch(s): if self.lastProp: self.__generateItem(self.lastPath, self.lastProp, self.propBuffer) self.lastPath = self.rx_path.cap(1) self.lastProp = None self.propBuffer = QString('') elif self.rx_prop.exactMatch(s): if self.lastProp: self.__generateItem(self.lastPath, self.lastProp, self.propBuffer) self.lastProp = self.rx_prop.cap(1) self.propBuffer = self.rx_prop.cap(2) else: self.propBuffer.append(' ') self.propBuffer.append(s) def __readStderr(self): """ Private slot to handle the readyReadStandardError signal. It reads the error output of the process and inserts it into the error pane. """ if self.process is not None: self.errorGroup.show() s = QString(self.process.readAllStandardError()) self.errors.insertPlainText(s) self.errors.ensureCursorVisible() eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/ConfigurationPage0000644000175000001440000000013212262730776026445 xustar000000000000000030 mtime=1389081086.300724332 30 atime=1389081086.305724332 30 ctime=1389081086.315724332 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/ConfigurationPage/0000755000175000001440000000000012262730776026254 5ustar00detlevusers00000000000000eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/ConfigurationPage/PaxHeaders.8617/SubversionPage.0000644000175000001440000000013212261012650031436 xustar000000000000000030 mtime=1388582312.271080515 30 atime=1389081082.957724398 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/ConfigurationPage/SubversionPage.py0000644000175000001440000000346512261012650031551 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing the Subversion configuration page. """ from PyQt4.QtCore import pyqtSignature from QScintilla.MiniEditor import MiniEditor from Preferences.ConfigurationPages.ConfigurationPageBase import ConfigurationPageBase from Ui_SubversionPage import Ui_SubversionPage class SubversionPage(ConfigurationPageBase, Ui_SubversionPage): """ Class implementing the Subversion configuration page. """ def __init__(self, plugin): """ Constructor @param plugin reference to the plugin object """ ConfigurationPageBase.__init__(self) self.setupUi(self) self.setObjectName("SubversionPage") self.__plugin = plugin # set initial values self.logSpinBox.setValue(self.__plugin.getPreferences("LogLimit")) self.commitSpinBox.setValue(self.__plugin.getPreferences("CommitMessages")) def save(self): """ Public slot to save the Subversion configuration. """ self.__plugin.setPreferences("LogLimit", self.logSpinBox.value()) self.__plugin.setPreferences("CommitMessages", self.commitSpinBox.value()) @pyqtSignature("") def on_configButton_clicked(self): """ Private slot to edit the Subversion config file. """ cfgFile = self.__plugin.getConfigPath() editor = MiniEditor(cfgFile, "Properties", self) editor.show() @pyqtSignature("") def on_serversButton_clicked(self): """ Private slot to edit the Subversion servers file. """ serversFile = self.__plugin.getServersPath() editor = MiniEditor(serversFile, "Properties", self) editor.show() eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/ConfigurationPage/PaxHeaders.8617/__init__.py0000644000175000001440000000013112261012650030611 xustar000000000000000029 mtime=1388582312.27308054 30 atime=1389081082.957724398 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/ConfigurationPage/__init__.py0000644000175000001440000000025012261012650030341 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Package implementing the the subversion configuration page. """ eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/ConfigurationPage/PaxHeaders.8617/SubversionPage.0000644000175000001440000000007411072705606031454 xustar000000000000000030 atime=1389081082.957724398 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/ConfigurationPage/SubversionPage.ui0000644000175000001440000001000611072705606031534 0ustar00detlevusers00000000000000 SubversionPage 0 0 402 384 <b>Configure Subversion Interface</b> QFrame::HLine QFrame::Sunken Qt::Horizontal Log No. of log messages shown: Enter the number of log messages to be shown Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 999999 Qt::Horizontal 41 20 Commit No. of commit messages to remember: Enter the number of commit messages to remember Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 1 100 Qt::Horizontal 40 20 Edit the subversion config file Edit config file Edit the subversion servers file Edit servers file Qt::Vertical 388 21 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/SvnCopyDialog.ui0000644000175000001440000000013211762422526026171 xustar000000000000000030 mtime=1338647894.551317798 30 atime=1389081082.967724397 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/SvnCopyDialog.ui0000644000175000001440000000744611762422526025736 0ustar00detlevusers00000000000000 SvnCopyDialog 0 0 409 135 Subversion Copy true Press to open a selection dialog <b>Target directory</b> <p>Select the target name for the operation via a selection dialog.</p> ... Source: Shows the name of the source <b>Source name</b> <p>This field shows the name of the source.</p> true Enter the target name <b>Target name</b> <p>Enter the new name in this field. The target must be the new name or an absolute path.</p> Target: Select to force the operation Enforce operation Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok qPixmapFromMimeSource sourceEdit targetEdit dirButton forceCheckBox buttonBox buttonBox accepted() SvnCopyDialog accept() 32 79 32 97 buttonBox rejected() SvnCopyDialog reject() 101 80 101 97 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/SvnPropListDialog.ui0000644000175000001440000000007411072705612027032 xustar000000000000000030 atime=1389081082.968724396 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/SvnPropListDialog.ui0000644000175000001440000000567411072705612026573 0ustar00detlevusers00000000000000 SvnPropListDialog 0 0 826 569 Subversion List Properties <b>Subversion List Prperties</b> <p>This dialog shows the properties of the selected file or project.</p> 0 3 <b>Properties List</b> <p>This shows the properties of the selected file or project.</p> true false false true Path Name Value 0 1 Errors <b>Subversion proplist errors</b> <p>This shows possible error messages of the subversion proplist command.</p> Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Close qPixmapFromMimeSource propsList errors buttonBox eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/SvnDiffDialog.py0000644000175000001440000000013212261012650026126 xustar000000000000000030 mtime=1388582312.280080629 30 atime=1389081082.968724396 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/SvnDiffDialog.py0000644000175000001440000003143412261012650025665 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Module implementing a dialog to show the output of the svn diff command process. """ import os import sys import types from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQFileDialog, KQMessageBox from KdeQt.KQApplication import e4App from Ui_SvnDiffDialog import Ui_SvnDiffDialog import Utilities class SvnDiffDialog(QWidget, Ui_SvnDiffDialog): """ Class implementing a dialog to show the output of the svn diff command process. """ def __init__(self, vcs, parent = None): """ Constructor @param vcs reference to the vcs object @param parent parent widget (QWidget) """ QWidget.__init__(self, parent) self.setupUi(self) self.buttonBox.button(QDialogButtonBox.Save).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Close).setDefault(True) self.process = QProcess() self.vcs = vcs if Utilities.isWindowsPlatform(): self.contents.setFontFamily("Lucida Console") else: self.contents.setFontFamily("Monospace") self.cNormalFormat = self.contents.currentCharFormat() self.cAddedFormat = self.contents.currentCharFormat() self.cAddedFormat.setBackground(QBrush(QColor(190, 237, 190))) self.cRemovedFormat = self.contents.currentCharFormat() self.cRemovedFormat.setBackground(QBrush(QColor(237, 190, 190))) self.cLineNoFormat = self.contents.currentCharFormat() self.cLineNoFormat.setBackground(QBrush(QColor(255, 220, 168))) self.connect(self.process, SIGNAL('finished(int, QProcess::ExitStatus)'), self.__procFinished) self.connect(self.process, SIGNAL('readyReadStandardOutput()'), self.__readStdout) self.connect(self.process, SIGNAL('readyReadStandardError()'), self.__readStderr) def closeEvent(self, e): """ Private slot implementing a close event handler. @param e close event (QCloseEvent) """ if self.process is not None and \ self.process.state() != QProcess.NotRunning: self.process.terminate() QTimer.singleShot(2000, self.process, SLOT('kill()')) self.process.waitForFinished(3000) e.accept() def __getVersionArg(self, version): """ Private method to get a svn revision argument for the given revision. @param version revision (integer or string) @return version argument (string) """ if version == "WORKING": return None else: return str(version) def start(self, fn, versions = None, urls = None, summary = False): """ Public slot to start the svn diff command. @param fn filename to be diffed (string) @param versions list of versions to be diffed (list of up to 2 QString or None) @keyparam urls list of repository URLs (list of 2 strings) @keyparam summary flag indicating a summarizing diff (only valid for URL diffs) (boolean) """ self.errorGroup.hide() self.inputGroup.show() self.intercept = False self.filename = fn self.process.kill() self.contents.clear() self.paras = 0 args = QStringList() args.append('diff') self.vcs.addArguments(args, self.vcs.options['global']) self.vcs.addArguments(args, self.vcs.options['diff']) if '--diff-cmd' in self.vcs.options['diff']: self.buttonBox.button(QDialogButtonBox.Save).hide() if versions is not None: self.raise_() self.activateWindow() rev1 = self.__getVersionArg(versions[0]) rev2 = None if len(versions) == 2: rev2 = self.__getVersionArg(versions[1]) if rev1 is not None or rev2 is not None: args.append('-r') if rev1 is not None and rev2 is not None: args.append('%s:%s' % (rev1, rev2)) elif rev2 is None: args.append(rev1) elif rev1 is None: args.append(rev2) self.summaryPath = None if urls is not None: if summary: args.append("--summarize") self.summaryPath = urls[0] args.append("--old=%s" % urls[0]) args.append("--new=%s" % urls[1]) if type(fn) is types.ListType: dname, fnames = self.vcs.splitPathList(fn) else: dname, fname = self.vcs.splitPath(fn) fnames = [fname] project = e4App().getObject('Project') if dname == project.getProjectPath(): path = "" else: path = project.getRelativePath(dname) if path: path += "/" for fname in fnames: args.append(path + fname) else: if type(fn) is types.ListType: dname, fnames = self.vcs.splitPathList(fn) self.vcs.addArguments(args, fnames) else: dname, fname = self.vcs.splitPath(fn) args.append(fname) self.process.setWorkingDirectory(dname) self.process.start('svn', args) procStarted = self.process.waitForStarted() if not procStarted: self.inputGroup.setEnabled(False) self.inputGroup.hide() KQMessageBox.critical(None, self.trUtf8('Process Generation Error'), self.trUtf8( 'The process %1 could not be started. ' 'Ensure, that it is in the search path.' ).arg('svn')) def __procFinished(self, exitCode, exitStatus): """ Private slot connected to the finished signal. @param exitCode exit code of the process (integer) @param exitStatus exit status of the process (QProcess.ExitStatus) """ self.inputGroup.setEnabled(False) self.inputGroup.hide() if self.paras == 0: self.contents.insertPlainText(\ self.trUtf8('There is no difference.')) return self.buttonBox.button(QDialogButtonBox.Save).setEnabled(True) self.buttonBox.button(QDialogButtonBox.Close).setDefault(True) self.buttonBox.button(QDialogButtonBox.Close).setFocus(Qt.OtherFocusReason) tc = self.contents.textCursor() tc.movePosition(QTextCursor.Start) self.contents.setTextCursor(tc) self.contents.ensureCursorVisible() def __appendText(self, txt, format): """ Private method to append text to the end of the contents pane. @param txt text to insert (QString) @param format text format to be used (QTextCharFormat) """ tc = self.contents.textCursor() tc.movePosition(QTextCursor.End) self.contents.setTextCursor(tc) self.contents.setCurrentCharFormat(format) self.contents.insertPlainText(txt) def __readStdout(self): """ Private slot to handle the readyReadStandardOutput signal. It reads the output of the process, formats it and inserts it into the contents pane. """ self.process.setReadChannel(QProcess.StandardOutput) while self.process.canReadLine(): line = QString(self.process.readLine()) if self.summaryPath: line = line.replace(self.summaryPath + '/', '') line = line.split(" ", QString.SkipEmptyParts).join(" ") if line.startsWith('+') or line.startsWith('>') or line.startsWith('A '): format = self.cAddedFormat elif line.startsWith('-') or line.startsWith('<') or line.startsWith('D '): format = self.cRemovedFormat elif line.startsWith('@@'): format = self.cLineNoFormat else: format = self.cNormalFormat self.__appendText(line, format) self.paras += 1 def __readStderr(self): """ Private slot to handle the readyReadStandardError signal. It reads the error output of the process and inserts it into the error pane. """ if self.process is not None: self.errorGroup.show() s = QString(self.process.readAllStandardError()) self.errors.insertPlainText(s) self.errors.ensureCursorVisible() def on_buttonBox_clicked(self, button): """ Private slot called by a button of the button box clicked. @param button button that was clicked (QAbstractButton) """ if button == self.buttonBox.button(QDialogButtonBox.Save): self.on_saveButton_clicked() @pyqtSignature("") def on_saveButton_clicked(self): """ Private slot to handle the Save button press. It saves the diff shown in the dialog to a file in the local filesystem. """ if type(self.filename) is types.ListType: if len(self.filename) > 1: fname = self.vcs.splitPathList(self.filename)[0] else: dname, fname = self.vcs.splitPath(self.filename[0]) if fname != '.': fname = "%s.diff" % self.filename[0] else: fname = dname else: fname = self.vcs.splitPath(self.filename)[0] selectedFilter = QString("") fname = KQFileDialog.getSaveFileName(\ self, self.trUtf8("Save Diff"), fname, self.trUtf8("Patch Files (*.diff)"), selectedFilter, QFileDialog.Options(QFileDialog.DontConfirmOverwrite)) if fname.isEmpty(): return ext = QFileInfo(fname).suffix() if ext.isEmpty(): ex = selectedFilter.section('(*',1,1).section(')',0,0) if not ex.isEmpty(): fname.append(ex) if QFileInfo(fname).exists(): res = KQMessageBox.warning(self, self.trUtf8("Save Diff"), self.trUtf8("

    The patch file %1 already exists.

    ") .arg(fname), QMessageBox.StandardButtons(\ QMessageBox.Abort | \ QMessageBox.Save), QMessageBox.Abort) if res != QMessageBox.Save: return fname = unicode(Utilities.toNativeSeparators(fname)) try: f = open(fname, "wb") f.write(unicode(self.contents.toPlainText())) f.close() except IOError, why: KQMessageBox.critical(self, self.trUtf8('Save Diff'), self.trUtf8('

    The patch file %1 could not be saved.' '
    Reason: %2

    ') .arg(unicode(fname)).arg(str(why))) def on_passwordCheckBox_toggled(self, isOn): """ Private slot to handle the password checkbox toggled. @param isOn flag indicating the status of the check box (boolean) """ if isOn: self.input.setEchoMode(QLineEdit.Password) else: self.input.setEchoMode(QLineEdit.Normal) @pyqtSignature("") def on_sendButton_clicked(self): """ Private slot to send the input to the subversion process. """ input = self.input.text() input.append(os.linesep) if self.passwordCheckBox.isChecked(): self.errors.insertPlainText(os.linesep) self.errors.ensureCursorVisible() else: self.errors.insertPlainText(input) self.errors.ensureCursorVisible() self.process.write(input.toLocal8Bit()) self.passwordCheckBox.setChecked(False) self.input.clear() def on_input_returnPressed(self): """ Private slot to handle the press of the return key in the input field. """ self.intercept = True self.on_sendButton_clicked() def keyPressEvent(self, evt): """ Protected slot to handle a key press event. @param evt the key press event (QKeyEvent) """ if self.intercept: self.intercept = False evt.accept() return QWidget.keyPressEvent(self, evt) eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/SvnRepoBrowserDialog.py0000644000175000001440000000013212261012650027527 xustar000000000000000030 mtime=1388582312.283080667 30 atime=1389081082.968724396 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/SvnRepoBrowserDialog.py0000644000175000001440000003724512261012650027274 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing the subversion repository browser dialog. """ import os from PyQt4.QtGui import * from PyQt4.QtCore import * from KdeQt import KQMessageBox from Ui_SvnRepoBrowserDialog import Ui_SvnRepoBrowserDialog import UI.PixmapCache import Preferences class SvnRepoBrowserDialog(QDialog, Ui_SvnRepoBrowserDialog): """ Class implementing the subversion repository browser dialog. """ def __init__(self, vcs, mode = "browse", parent = None): """ Constructor @param vcs reference to the vcs object @param mode mode of the dialog (string, "browse" or "select") @param parent parent widget (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.repoTree.headerItem().setText(self.repoTree.columnCount(), "") self.repoTree.header().setSortIndicator(0, Qt.AscendingOrder) self.process = None self.vcs = vcs self.mode = mode if self.mode == "select": self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Close).hide() else: self.buttonBox.button(QDialogButtonBox.Ok).hide() self.buttonBox.button(QDialogButtonBox.Cancel).hide() self.__dirIcon = UI.PixmapCache.getIcon("dirClosed.png") self.__fileIcon = UI.PixmapCache.getIcon("fileMisc.png") self.__urlRole = Qt.UserRole self.__ignoreExpand = False self.intercept = False self.__rx_dir = \ QRegExp(r"""\s*([0-9]+)\s+(\w+)\s+((?:\w+\s+\d+|[0-9.]+\s+\w+)\s+[0-9:]+)\s+(.+)\s*""") self.__rx_file = \ QRegExp(r"""\s*([0-9]+)\s+(\w+)\s+([0-9]+)\s((?:\w+\s+\d+|[0-9.]+\s+\w+)\s+[0-9:]+)\s+(.+)\s*""") def closeEvent(self, e): """ Private slot implementing a close event handler. @param e close event (QCloseEvent) """ if self.process is not None and \ self.process.state() != QProcess.NotRunning: self.process.terminate() QTimer.singleShot(2000, self.process, SLOT('kill()')) self.process.waitForFinished(3000) e.accept() def __resort(self): """ Private method to resort the tree. """ self.repoTree.sortItems(self.repoTree.sortColumn(), self.repoTree.header().sortIndicatorOrder()) def __resizeColumns(self): """ Private method to resize the tree columns. """ self.repoTree.header().resizeSections(QHeaderView.ResizeToContents) self.repoTree.header().setStretchLastSection(True) def __generateItem(self, repopath, revision, author, size, date, nodekind, url): """ Private method to generate a tree item in the repository tree. @param parent parent of the item to be created (QTreeWidget or QTreeWidgetItem) @param repopath path of the item (string or QString) @param revision revision info (string or QString) @param author author info (string or QString) @param size size info (string or QString) @param date date info (string or QString) @param nodekind node kind info (string, "dir" or "file") @param url url of the entry (string or QString) @return reference to the generated item (QTreeWidgetItem) """ path = repopath if revision == "": rev = "" else: rev = int(revision) if size == "": sz = "" else: sz = int(size) itm = QTreeWidgetItem(self.parentItem) itm.setData(0, Qt.DisplayRole, path) itm.setData(1, Qt.DisplayRole, rev) itm.setData(2, Qt.DisplayRole, author) itm.setData(3, Qt.DisplayRole, sz) itm.setData(4, Qt.DisplayRole, date) if nodekind == "dir": itm.setIcon(0, self.__dirIcon) itm.setChildIndicatorPolicy(QTreeWidgetItem.ShowIndicator) elif nodekind == "file": itm.setIcon(0, self.__fileIcon) itm.setData(0, self.__urlRole, QVariant(url)) itm.setTextAlignment(0, Qt.AlignLeft) itm.setTextAlignment(1, Qt.AlignRight) itm.setTextAlignment(2, Qt.AlignLeft) itm.setTextAlignment(3, Qt.AlignRight) itm.setTextAlignment(4, Qt.AlignLeft) return itm def __repoRoot(self, url): """ Private method to get the repository root using the svn info command. @param url the repository URL to browser (string or QString) @return repository root (string) """ ioEncoding = str(Preferences.getSystem("IOEncoding")) repoRoot = None process = QProcess() args = QStringList() args.append('info') self.vcs.addArguments(args, self.vcs.options['global']) args.append('--xml') args.append(url) process.start('svn', args) procStarted = process.waitForStarted() if procStarted: finished = process.waitForFinished(30000) if finished: if process.exitCode() == 0: output = unicode(process.readAllStandardOutput(), ioEncoding, 'replace') for line in output.splitlines(): line = line.strip() if line.startswith(''): repoRoot = line.replace('', '').replace('', '') break else: error = QString(process.readAllStandardError()) self.errors.insertPlainText(error) self.errors.ensureCursorVisible() else: QApplication.restoreOverrideCursor() KQMessageBox.critical(None, self.trUtf8('Process Generation Error'), self.trUtf8( 'The process %1 could not be started. ' 'Ensure, that it is in the search path.' ).arg('svn')) return repoRoot def __listRepo(self, url, parent = None): """ Private method to perform the svn list command. @param url the repository URL to browser (string or QString) @param parent reference to the item, the data should be appended to (QTreeWidget or QTreeWidgetItem) """ QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) QApplication.processEvents() self.repoUrl = url if parent is None: self.parentItem = self.repoTree else: self.parentItem = parent if self.parentItem == self.repoTree: repoRoot = self.__repoRoot(url) if repoRoot is None: self.__finish() return self.__ignoreExpand = True itm = self.__generateItem(repoRoot, "", "", "", "", "dir", repoRoot) itm.setExpanded(True) self.parentItem = itm urlPart = repoRoot for element in unicode(url).replace(repoRoot, "").split("/"): if element: urlPart = "%s/%s" % (urlPart, element) itm = self.__generateItem(element, "", "", "", "", "dir", urlPart) itm.setExpanded(True) self.parentItem = itm itm.setExpanded(False) self.__ignoreExpand = False self.__finish() return self.intercept = False if self.process: self.process.kill() else: self.process = QProcess() self.connect(self.process, SIGNAL('finished(int, QProcess::ExitStatus)'), self.__procFinished) self.connect(self.process, SIGNAL('readyReadStandardOutput()'), self.__readStdout) self.connect(self.process, SIGNAL('readyReadStandardError()'), self.__readStderr) args = QStringList() args.append('list') self.vcs.addArguments(args, self.vcs.options['global']) if '--verbose' not in self.vcs.options['global']: args.append('--verbose') args.append(url) self.process.start('svn', args) procStarted = self.process.waitForStarted() if not procStarted: self.__finish() self.inputGroup.setEnabled(False) self.inputGroup.hide() KQMessageBox.critical(None, self.trUtf8('Process Generation Error'), self.trUtf8( 'The process %1 could not be started. ' 'Ensure, that it is in the search path.' ).arg('svn')) else: self.inputGroup.setEnabled(True) self.inputGroup.show() def __normalizeUrl(self, url): """ Private method to normalite the url. @param url the url to normalize (string or QString) @return normalized URL (QString) """ url_ = QString(url) if url_.endsWith("/"): return url_[:-1] return url_ def start(self, url): """ Public slot to start the svn info command. @param url the repository URL to browser (string or QString) """ self.url = "" self.urlCombo.addItem(self.__normalizeUrl(url)) @pyqtSignature("QString") def on_urlCombo_currentIndexChanged(self, text): """ Private slot called, when a new repository URL is entered or selected. @param text the text of the current item (QString) """ url = self.__normalizeUrl(text) if url != self.url: self.url = QString(url) self.repoTree.clear() self.__listRepo(url) @pyqtSignature("QTreeWidgetItem*") def on_repoTree_itemExpanded(self, item): """ Private slot called when an item is expanded. @param item reference to the item to be expanded (QTreeWidgetItem) """ if not self.__ignoreExpand: url = item.data(0, self.__urlRole).toString() self.__listRepo(url, item) @pyqtSignature("QTreeWidgetItem*") def on_repoTree_itemCollapsed(self, item): """ Private slot called when an item is collapsed. @param item reference to the item to be collapsed (QTreeWidgetItem) """ for child in item.takeChildren(): del child @pyqtSignature("") def on_repoTree_itemSelectionChanged(self): """ Private slot called when the selection changes. """ if self.mode == "select": self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(True) def accept(self): """ Public slot called when the dialog is accepted. """ if self.focusWidget() == self.urlCombo: return QDialog.accept(self) def getSelectedUrl(self): """ Public method to retrieve the selected repository URL. @return the selected repository URL (QString) """ items = self.repoTree.selectedItems() if len(items) == 1: return items[0].data(0, self.__urlRole).toString() else: return QString() def __finish(self): """ Private slot called when the process finished or the user pressed the button. """ if self.process is not None and \ self.process.state() != QProcess.NotRunning: self.process.terminate() QTimer.singleShot(2000, self.process, SLOT('kill()')) self.process.waitForFinished(3000) self.inputGroup.setEnabled(False) self.inputGroup.hide() self.__resizeColumns() self.__resort() QApplication.restoreOverrideCursor() def __procFinished(self, exitCode, exitStatus): """ Private slot connected to the finished signal. @param exitCode exit code of the process (integer) @param exitStatus exit status of the process (QProcess.ExitStatus) """ self.__finish() def __readStdout(self): """ Private slot to handle the readyReadStandardOutput signal. It reads the output of the process, formats it and inserts it into the contents pane. """ if self.process is not None: self.process.setReadChannel(QProcess.StandardOutput) while self.process.canReadLine(): s = QString(self.process.readLine()) if self.__rx_dir.exactMatch(s): revision = self.__rx_dir.cap(1) author = self.__rx_dir.cap(2) date = self.__rx_dir.cap(3) name = self.__rx_dir.cap(4).trimmed() if name.endsWith("/"): name = name[:-1] size = "" nodekind = "dir" elif self.__rx_file.exactMatch(s): revision = self.__rx_file.cap(1) author = self.__rx_file.cap(2) size = self.__rx_file.cap(3) date = self.__rx_file.cap(4) name = self.__rx_file.cap(5).trimmed() nodekind = "file" else: continue url = "%s/%s" % (self.repoUrl, name) self.__generateItem(name, revision, author, size, date, nodekind, url) def __readStderr(self): """ Private slot to handle the readyReadStandardError signal. It reads the error output of the process and inserts it into the error pane. """ if self.process is not None: s = QString(self.process.readAllStandardError()) self.errors.insertPlainText(s) self.errors.ensureCursorVisible() def on_passwordCheckBox_toggled(self, isOn): """ Private slot to handle the password checkbox toggled. @param isOn flag indicating the status of the check box (boolean) """ if isOn: self.input.setEchoMode(QLineEdit.Password) else: self.input.setEchoMode(QLineEdit.Normal) @pyqtSignature("") def on_sendButton_clicked(self): """ Private slot to send the input to the subversion process. """ input = self.input.text() input.append(os.linesep) if self.passwordCheckBox.isChecked(): self.errors.insertPlainText(os.linesep) self.errors.ensureCursorVisible() else: self.errors.insertPlainText(input) self.errors.ensureCursorVisible() self.process.write(input.toLocal8Bit()) self.passwordCheckBox.setChecked(False) self.input.clear() def on_input_returnPressed(self): """ Private slot to handle the press of the return key in the input field. """ self.intercept = True self.on_sendButton_clicked() def keyPressEvent(self, evt): """ Protected slot to handle a key press event. @param evt the key press event (QKeyEvent) """ if self.intercept: self.intercept = False evt.accept() return QWidget.keyPressEvent(self, evt) eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/SvnPropSetDialog.ui0000644000175000001440000000007411072705612026652 xustar000000000000000030 atime=1389081082.968724396 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/SvnPropSetDialog.ui0000644000175000001440000001224011072705612026376 0ustar00detlevusers00000000000000 SvnPropSetDialog 0 0 494 385 Set Subversion Property true Property Name: Enter the name of the property to be set Select property source Qt::NoFocus File Text true Enter text of the property true false false Press to select the file via a file selection dialog ... false Enter the name of a file for the property Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok qPixmapFromMimeSource propNameEdit textRadioButton propTextEdit propFileEdit fileButton textRadioButton toggled(bool) propTextEdit setEnabled(bool) 49 78 76 140 fileRadioButton toggled(bool) propFileEdit setEnabled(bool) 35 287 49 319 fileRadioButton toggled(bool) fileButton setEnabled(bool) 454 290 450 317 buttonBox accepted() SvnPropSetDialog accept() 67 360 74 380 buttonBox rejected() SvnPropSetDialog reject() 196 367 199 385 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/SvnCommandDialog.py0000644000175000001440000000013212261012650026634 xustar000000000000000030 mtime=1388582312.291080769 30 atime=1389081082.968724396 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/SvnCommandDialog.py0000644000175000001440000000571512261012650026376 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Module implementing the Subversion command dialog. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQFileDialog from E4Gui.E4Completers import E4DirCompleter from Ui_SvnCommandDialog import Ui_SvnCommandDialog import Utilities class SvnCommandDialog(QDialog, Ui_SvnCommandDialog): """ Class implementing the Subversion command dialog. It implements a dialog that is used to enter an arbitrary subversion command. It asks the user to enter the commandline parameters and the working directory. """ def __init__(self, argvList, wdList, ppath, parent = None): """ Constructor @param argvList history list of commandline arguments (QStringList) @param wdList history list of working directories (QStringList) @param ppath pathname of the project directory (string) @param parent parent widget of this dialog (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.workdirCompleter = E4DirCompleter(self.workdirCombo) self.okButton = self.buttonBox.button(QDialogButtonBox.Ok) self.okButton.setEnabled(False) self.commandCombo.clear() self.commandCombo.addItems(argvList) if argvList.count() > 0: self.commandCombo.setCurrentIndex(0) self.workdirCombo.clear() self.workdirCombo.addItems(wdList) if wdList.count() > 0: self.workdirCombo.setCurrentIndex(0) self.projectDirLabel.setText(ppath) # modify some what's this help texts t = self.commandCombo.whatsThis() if not t.isEmpty(): t = t.append(Utilities.getPercentReplacementHelp()) self.commandCombo.setWhatsThis(t) @pyqtSignature("") def on_dirButton_clicked(self): """ Private method used to open a directory selection dialog. """ cwd = self.workdirCombo.currentText() if cwd.isEmpty(): cwd = self.projectDirLabel.text() d = KQFileDialog.getExistingDirectory(\ self, self.trUtf8("Working directory"), cwd, QFileDialog.Options(QFileDialog.ShowDirsOnly)) if not d.isEmpty(): self.workdirCombo.setEditText(Utilities.toNativeSeparators(d)) def on_commandCombo_editTextChanged(self, text): """ Private method used to enable/disable the OK-button. @param text ignored """ self.okButton.setDisabled(self.commandCombo.currentText().isEmpty()) def getData(self): """ Public method to retrieve the data entered into this dialog. @return a tuple of argv, workdir """ return (self.commandCombo.currentText(), self.workdirCombo.currentText()) eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/SvnSwitchDialog.ui0000644000175000001440000000007411072705612026517 xustar000000000000000030 atime=1389081082.968724396 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/SvnSwitchDialog.ui0000644000175000001440000000761611072705612026256 0ustar00detlevusers00000000000000 SvnSwitchDialog 0 0 391 146 Subversion Switch true Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok Tag Name: 0 0 Enter the name of the tag <b>Tag Name</b> <p>Enter the name of the tag to be switched to. In order to switch to the trunk version leave it empty.</p> true true false Tag Type Select for a regular tag <b>Regular Tag</b> <p>Select this entry for a regular tag.</p> Regular Tag true Select for a branch tag <b>Branch Tag</b> <p>Select this entry for a branch tag.</p> Branch Tag qPixmapFromMimeSource tagCombo regularButton branchButton buttonBox accepted() SvnSwitchDialog accept() 53 113 34 139 buttonBox rejected() SvnSwitchDialog reject() 110 123 110 139 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/SvnDiffDialog.ui0000644000175000001440000000007411744565763026147 xustar000000000000000030 atime=1389081082.969724396 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/SvnDiffDialog.ui0000644000175000001440000001123711744565763025700 0ustar00detlevusers00000000000000 SvnDiffDialog 0 0 749 646 Subversion Diff 0 3 Difference <b>Subversion Diff</b><p>This shows the output of the svn diff command.</p> QTextEdit::NoWrap true 8 false 0 1 Errors true false Input Qt::Horizontal QSizePolicy::Expanding 327 29 Press to send the input to the subversion process &Send Alt+S Enter data to be sent to the subversion process Select to switch the input field to password mode &Password Mode Alt+P Qt::Horizontal QDialogButtonBox::Close|QDialogButtonBox::Save contents errors input passwordCheckBox sendButton buttonBox buttonBox rejected() SvnDiffDialog close() 197 624 201 645 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/PaxHeaders.8617/SvnNewProjectOptionsDialog.py0000644000175000001440000000013212261012650030712 xustar000000000000000030 mtime=1388582312.293080794 30 atime=1389081082.969724396 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsSubversion/SvnNewProjectOptionsDialog.py0000644000175000001440000001243712261012650030453 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2002 - 2014 Detlev Offenbach # """ Module implementing the Subversion Options Dialog for a new project from the repository. """ import os from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQFileDialog from E4Gui.E4Completers import E4DirCompleter from SvnRepoBrowserDialog import SvnRepoBrowserDialog from Ui_SvnNewProjectOptionsDialog import Ui_SvnNewProjectOptionsDialog from Config import ConfigSvnProtocols import Utilities import Preferences class SvnNewProjectOptionsDialog(QDialog, Ui_SvnNewProjectOptionsDialog): """ Class implementing the Options Dialog for a new project from the repository. """ def __init__(self, vcs, parent = None): """ Constructor @param vcs reference to the version control object @param parent parent widget (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.vcsDirectoryCompleter = E4DirCompleter(self.vcsUrlEdit) self.vcsProjectDirCompleter = E4DirCompleter(self.vcsProjectDirEdit) self.protocolCombo.addItems(ConfigSvnProtocols) self.vcs = vcs hd = Utilities.toNativeSeparators(QDir.homePath()) hd = os.path.join(unicode(hd), 'subversionroot') self.vcsUrlEdit.setText(hd) self.localPath = unicode(hd) self.networkPath = "localhost/" self.localProtocol = True self.vcsProjectDirEdit.setText(Utilities.toNativeSeparators( Preferences.getMultiProject("Workspace") or Utilities.getHomeDir())) @pyqtSignature("") def on_vcsUrlButton_clicked(self): """ Private slot to display a selection dialog. """ if self.protocolCombo.currentText() == "file://": directory = KQFileDialog.getExistingDirectory(\ self, self.trUtf8("Select Repository-Directory"), self.vcsUrlEdit.text(), QFileDialog.Options(QFileDialog.ShowDirsOnly)) if not directory.isEmpty(): self.vcsUrlEdit.setText(Utilities.toNativeSeparators(directory)) else: dlg = SvnRepoBrowserDialog(self.vcs, mode = "select", parent = self) dlg.start(self.protocolCombo.currentText() + self.vcsUrlEdit.text()) if dlg.exec_() == QDialog.Accepted: url = dlg.getSelectedUrl() if not url.isEmpty(): protocol = url.section("://", 0, 0) path = url.section("://", 1, 1) self.protocolCombo.setCurrentIndex(\ self.protocolCombo.findText(protocol + "://")) self.vcsUrlEdit.setText(path) @pyqtSignature("") def on_projectDirButton_clicked(self): """ Private slot to display a directory selection dialog. """ directory = KQFileDialog.getExistingDirectory(\ self, self.trUtf8("Select Project Directory"), self.vcsProjectDirEdit.text(), QFileDialog.Options(QFileDialog.ShowDirsOnly)) if not directory.isEmpty(): self.vcsProjectDirEdit.setText(Utilities.toNativeSeparators(directory)) def on_layoutCheckBox_toggled(self, checked): """ Private slot to handle the change of the layout checkbox. @param checked flag indicating the state of the checkbox (boolean) """ self.vcsTagLabel.setEnabled(checked) self.vcsTagEdit.setEnabled(checked) if not checked: self.vcsTagEdit.clear() @pyqtSignature("QString") def on_protocolCombo_activated(self, protocol): """ Private slot to switch the status of the directory selection button. """ if str(protocol) == "file://": self.networkPath = unicode(self.vcsUrlEdit.text()) self.vcsUrlEdit.setText(self.localPath) self.vcsUrlLabel.setText(self.trUtf8("Pat&h:")) self.localProtocol = True else: if self.localProtocol: self.localPath = unicode(self.vcsUrlEdit.text()) self.vcsUrlEdit.setText(self.networkPath) self.vcsUrlLabel.setText(self.trUtf8("&URL:")) self.localProtocol = False @pyqtSlot(str) def on_vcsUrlEdit_textChanged(self, txt): """ Private slot to handle changes of the URL. @param txt current text of the line edit (QString) """ enable = not txt.contains("://") self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(enable) def getData(self): """ Public slot to retrieve the data entered into the dialog. @return a tuple of a string (project directory) and a dictionary containing the data entered. """ scheme = str(self.protocolCombo.currentText()) url = unicode(self.vcsUrlEdit.text()) vcsdatadict = { "url" : '%s%s' % (scheme, url), "tag" : unicode(self.vcsTagEdit.text()), "standardLayout" : self.layoutCheckBox.isChecked(), } return (unicode(self.vcsProjectDirEdit.text()), vcsdatadict) eric4-4.5.18/eric/Plugins/VcsPlugins/PaxHeaders.8617/vcsPySvn0000644000175000001440000000013212262730776021761 xustar000000000000000030 mtime=1389081086.300724332 30 atime=1389081086.305724332 30 ctime=1389081086.315724332 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/0000755000175000001440000000000012262730776021570 5ustar00detlevusers00000000000000eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnTagBranchListDialog.py0000644000175000001440000000013112261012650026662 xustar000000000000000029 mtime=1388582312.29908087 30 atime=1389081082.969724396 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnTagBranchListDialog.py0000644000175000001440000001721712261012650026425 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Module implementing a dialog to show a list of tags or branches. """ import os import pysvn from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQMessageBox, KQInputDialog from SvnUtilities import formatTime from SvnDialogMixin import SvnDialogMixin from Ui_SvnTagBranchListDialog import Ui_SvnTagBranchListDialog class SvnTagBranchListDialog(QDialog, SvnDialogMixin, Ui_SvnTagBranchListDialog): """ Class implementing a dialog to show a list of tags or branches. """ def __init__(self, vcs, parent = None): """ Constructor @param vcs reference to the vcs object @param parent parent widget (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) SvnDialogMixin.__init__(self) self.buttonBox.button(QDialogButtonBox.Close).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Cancel).setDefault(True) self.vcs = vcs self.tagList.headerItem().setText(self.tagList.columnCount(), "") self.tagList.header().setSortIndicator(3, Qt.AscendingOrder) self.client = self.vcs.getClient() self.client.callback_cancel = \ self._clientCancelCallback self.client.callback_get_login = \ self._clientLoginCallback self.client.callback_ssl_server_trust_prompt = \ self._clientSslServerTrustPromptCallback def start(self, path, tags = True): """ Public slot to start the svn status command. @param path name of directory to be listed (string) @param tags flag indicating a list of tags is requested (False = branches, True = tags) """ self.errorGroup.hide() if not tags: self.setWindowTitle(self.trUtf8("Subversion Branches List")) self.activateWindow() QApplication.processEvents() dname, fname = self.vcs.splitPath(path) reposURL = self.vcs.svnGetReposName(dname) if reposURL is None: KQMessageBox.critical(None, self.trUtf8("Subversion Error"), self.trUtf8("""The URL of the project repository could not be""" """ retrieved from the working copy. The list operation will""" """ be aborted""")) self.close() return False if self.vcs.otherData["standardLayout"]: # determine the base path of the project in the repository rx_base = QRegExp('(.+)/(trunk|tags|branches).*') if not rx_base.exactMatch(reposURL): KQMessageBox.critical(None, self.trUtf8("Subversion Error"), self.trUtf8("""The URL of the project repository has an""" """ invalid format. The list operation will""" """ be aborted""")) return False reposRoot = unicode(rx_base.cap(1)) if tags: path = "%s/tags" % reposRoot else: path = "%s/branches" % reposRoot else: reposPath, ok = KQInputDialog.getText(\ self, self.trUtf8("Subversion List"), self.trUtf8("Enter the repository URL containing the tags or branches"), QLineEdit.Normal, self.vcs.svnNormalizeURL(reposURL)) if not ok: self.close() return False if reposPath.isEmpty(): KQMessageBox.critical(None, self.trUtf8("Subversion List"), self.trUtf8("""The repository URL is empty. Aborting...""")) self.close() return False path = unicode(reposPath) locker = QMutexLocker(self.vcs.vcsExecutionMutex) self.tagsList = QStringList() cwd = os.getcwd() os.chdir(dname) try: entries = self.client.list(path, recurse = False) for dirent, lock in entries: if dirent["path"] != path: name = dirent["path"].replace(path + '/', "") self.__generateItem(dirent["created_rev"].number, dirent["last_author"], formatTime(dirent["time"]), name) if self.vcs.otherData["standardLayout"]: self.tagsList.append(name) else: self.tagsList.append(path + '/' + name) if self._clientCancelCallback(): break res = True except pysvn.ClientError, e: self.__showError(e.args[0]) res = False except AttributeError: self.__showError(\ self.trUtf8("The installed version of PySvn should be 1.4.0 or better.")) res = False locker.unlock() self.__finish() os.chdir(cwd) return res def __finish(self): """ Private slot called when the process finished or the user pressed the button. """ self.buttonBox.button(QDialogButtonBox.Close).setEnabled(True) self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Close).setDefault(True) self.__resizeColumns() self.__resort() self._cancel() def on_buttonBox_clicked(self, button): """ Private slot called by a button of the button box clicked. @param button button that was clicked (QAbstractButton) """ if button == self.buttonBox.button(QDialogButtonBox.Close): self.close() elif button == self.buttonBox.button(QDialogButtonBox.Cancel): self.__finish() def __showError(self, msg): """ Private slot to show an error message. @param msg error message to show (string or QString) """ self.errorGroup.show() self.errors.insertPlainText(msg) self.errors.ensureCursorVisible() def __resort(self): """ Private method to resort the tree. """ self.tagList.sortItems(self.tagList.sortColumn(), self.tagList.header().sortIndicatorOrder()) def __resizeColumns(self): """ Private method to resize the list columns. """ self.tagList.header().resizeSections(QHeaderView.ResizeToContents) self.tagList.header().setStretchLastSection(True) def __generateItem(self, revision, author, date, name): """ Private method to generate a tag item in the taglist. @param revision revision number (integer) @param author author of the tag (string or QString) @param date date of the tag (string or QString) @param name name (path) of the tag (string or QString) """ itm = QTreeWidgetItem(self.tagList) itm.setData(0, Qt.DisplayRole, revision) itm.setData(1, Qt.DisplayRole, author) itm.setData(2, Qt.DisplayRole, date) itm.setData(3, Qt.DisplayRole, name) itm.setTextAlignment(0, Qt.AlignRight) def getTagList(self): """ Public method to get the taglist of the last run. @return list of tags (QStringList) """ return self.tagsList eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnBlameDialog.ui0000644000175000001440000000007411744564603025227 xustar000000000000000030 atime=1389081082.977724396 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnBlameDialog.ui0000644000175000001440000000500511744564603024754 0ustar00detlevusers00000000000000 SvnBlameDialog 0 0 690 750 Subversion Blame true 0 6 true QAbstractItemView::NoSelection false false Revision Author Line 0 1 Errors true false Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Close blameList errors buttonBox eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnUtilities.py0000644000175000001440000000013212261012650025031 xustar000000000000000030 mtime=1388582312.301080896 30 atime=1389081082.977724396 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnUtilities.py0000644000175000001440000000675312261012650024576 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing some common utility functions for the pysvn package. """ import sys import os from PyQt4.QtCore import QDateTime, Qt import Utilities from Config import DefaultConfig, DefaultIgnores def formatTime(seconds): """ Module function to return a formatted time string. @param seconds time in seconds since epoch to be formatted (float or long) @return formatted time string (QString) """ return QDateTime.fromTime_t(long(seconds))\ .toTimeSpec(Qt.LocalTime)\ .toString("yyyy-MM-dd hh:mm:ss") def dateFromTime_t(seconds): """ Module function to return the date. @param seconds time in seconds since epoch to be formatted (float or long) @return date (QDate) """ return QDateTime.fromTime_t(long(seconds)).toTimeSpec(Qt.LocalTime).date() def getServersPath(): """ Module function to get the filename of the servers file. @return filename of the servers file (string) """ if Utilities.isWindowsPlatform(): appdata = os.environ["APPDATA"] return os.path.join(appdata, "Subversion", "servers") else: homedir = Utilities.getHomeDir() return os.path.join(homedir, ".subversion", "servers") def getConfigPath(): """ Module function to get the filename of the config file. @return filename of the config file (string) """ if Utilities.isWindowsPlatform(): appdata = os.environ["APPDATA"] return os.path.join(appdata, "Subversion", "config") else: homedir = Utilities.getHomeDir() return os.path.join(homedir, ".subversion", "config") def createDefaultConfig(): """ Module function to create a default config file suitable for eric. """ config = getConfigPath() try: os.makedirs(os.path.dirname(config)) except OSError: pass try: f = open(config, "w") f.write(DefaultConfig) f.close() except IOError: pass def amendConfig(): """ Module function to amend the config file. """ config = getConfigPath() try: f = open(config, "r") configList = f.read().splitlines() f.close() except IOError: return newConfig = [] ignoresFound = False amendList = [] for line in configList: if line.find("global-ignores") in [0, 2]: ignoresFound = True if line.startswith("# "): line = line[2:] newConfig.append(line) for amend in DefaultIgnores: if amend not in line: amendList.append(amend) elif ignoresFound: if line.startswith("##"): ignoresFound = False if amendList: newConfig.append(" " + " ".join(amendList)) newConfig.append(line) continue elif line.startswith("# "): line = line[2:] newConfig.append(line) oldAmends = amendList[:] amendList = [] for amend in oldAmends: if amend not in line: amendList.append(amend) else: newConfig.append(line) if newConfig != configList: try: f = open(config, "w") f.write("\n".join(newConfig)) f.close() except IOError: pass eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnRepoBrowserDialog.ui0000644000175000001440000000007411072705617026454 xustar000000000000000030 atime=1389081082.981724396 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnRepoBrowserDialog.ui0000644000175000001440000000606011072705617026203 0ustar00detlevusers00000000000000 SvnRepoBrowserDialog 0 0 650 500 Subversion Repository Browser URL: Enter the URL of the repository true QComboBox::InsertAtTop true true true 5 File Revision Author Size Date Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Close|QDialogButtonBox::Ok urlCombo repoTree buttonBox buttonBox rejected() SvnRepoBrowserDialog reject() 353 493 286 274 buttonBox accepted() SvnRepoBrowserDialog accept() 140 474 8 472 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnPropSetDialog.py0000644000175000001440000000013212261012650025572 xustar000000000000000030 mtime=1388582312.303080921 30 atime=1389081082.981724396 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnPropSetDialog.py0000644000175000001440000000237712261012650025335 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Module implementing a dialog to enter the data for a new property. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from Ui_SvnPropSetDialog import Ui_SvnPropSetDialog class SvnPropSetDialog(QDialog, Ui_SvnPropSetDialog): """ Class implementing a dialog to enter the data for a new property. """ def __init__(self, recursive, parent = None): """ Constructor @param recursive flag indicating a recursive set is requested @param parent parent widget (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.recurseCheckBox.setChecked(recursive) def getData(self): """ Public slot used to retrieve the data entered into the dialog. @return tuple of three values giving the property name, the text of the property and a flag indicating, that this property should be applied recursively. (string, string, boolean) """ return (unicode(self.propNameEdit.text()), unicode(self.propTextEdit.toPlainText()), self.recurseCheckBox.isChecked()) eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnDialogMixin.py0000644000175000001440000000013212261012650025262 xustar000000000000000030 mtime=1388582312.314081061 30 atime=1389081082.981724396 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnDialogMixin.py0000644000175000001440000001367712261012650025032 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Module implementing a dialog mixin class providing common callback methods for the pysvn client. """ from PyQt4.QtGui import QApplication, QDialog, QWidget, QCursor class SvnDialogMixin(object): """ Class implementing a dialog mixin providing common callback methods for the pysvn client. """ def __init__(self, log = ""): """ Constructor @param log optional log message (string or QString) """ self.shouldCancel = False self.logMessage = log def _cancel(self): """ Protected method to request a cancellation of the current action. """ self.shouldCancel = True def _reset(self): """ Protected method to reset the internal state of the dialog. """ self.shouldCancel = False def _clientCancelCallback(self): """ Protected method called by the client to check for cancellation. @return flag indicating a cancellation """ QApplication.processEvents() return self.shouldCancel def _clientLoginCallback(self, realm, username, may_save): """ Protected method called by the client to get login information. @param realm name of the realm of the requested credentials (string) @param username username as supplied by subversion (string) @param may_save flag indicating, that subversion is willing to save the answers returned (boolean) @return tuple of four values (retcode, username, password, save). Retcode should be True, if username and password should be used by subversion, username and password contain the relevant data as strings and save is a flag indicating, that username and password should be saved. """ from SvnLoginDialog import SvnLoginDialog cursor = QCursor(QApplication.overrideCursor()) if cursor is not None: QApplication.restoreOverrideCursor() parent = isinstance(self, QWidget) and self or None dlg = SvnLoginDialog(realm, username, may_save, parent) res = dlg.exec_() if cursor is not None: QApplication.setOverrideCursor(cursor) if res == QDialog.Accepted: loginData = dlg.getData() return (True, loginData[0], loginData[1], loginData[2]) else: return (False, "", "", False) def _clientSslServerTrustPromptCallback(self, trust_dict): """ Protected method called by the client to request acceptance for a ssl server certificate. @param trust_dict dictionary containing the trust data @return tuple of three values (retcode, acceptedFailures, save). Retcode should be true, if the certificate should be accepted, acceptedFailures should indicate the accepted certificate failures and save should be True, if subversion should save the certificate. """ from KdeQt import KQMessageBox from PyQt4.QtGui import QMessageBox cursor = QCursor(QApplication.overrideCursor()) if cursor is not None: QApplication.restoreOverrideCursor() parent = isinstance(self, QWidget) and self or None msgBox = KQMessageBox.KQMessageBox(QMessageBox.Question, self.trUtf8("Subversion SSL Server Certificate"), self.trUtf8("""

    Accept the following SSL certificate?

    """ """""" """""" """""" """""" """""" """""" """""" """
    Realm:%1
    Hostname:%2
    Fingerprint:%3
    Valid from:%4
    Valid until:%5
    Issuer name:%6
    """)\ .arg(trust_dict["realm"])\ .arg(trust_dict["hostname"])\ .arg(trust_dict["finger_print"])\ .arg(trust_dict["valid_from"])\ .arg(trust_dict["valid_until"])\ .arg(trust_dict["issuer_dname"]), QMessageBox.StandardButtons(QMessageBox.NoButton), parent) permButton = msgBox.addButton(self.trUtf8("&Permanent accept"), QMessageBox.AcceptRole) tempButton = msgBox.addButton(self.trUtf8("&Temporary accept"), QMessageBox.AcceptRole) rejectButton = msgBox.addButton(self.trUtf8("&Reject"), QMessageBox.RejectRole) msgBox.exec_() if cursor is not None: QApplication.setOverrideCursor(cursor) if msgBox.clickedButton() == permButton: return (True, trust_dict["failures"], True) elif msgBox.clickedButton() == tempButton: return (True, trust_dict["failures"], False) else: return (False, 0, False) def _clientLogCallback(self): """ Protected method called by the client to request a log message. @return a flag indicating success and the log message (string) """ from SvnCommitDialog import SvnCommitDialog if self.logMessage: return True, self.logMessage else: # call CommitDialog and get message from there dlg = SvnCommitDialog(self) if dlg.exec_() == QDialog.Accepted: msg = unicode(dlg.logMessage()) if msg: return True, msg else: return True, "***" # always supply a valid log message else: return False, "" eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnLoginDialog.ui0000644000175000001440000000007411072705617025253 xustar000000000000000030 atime=1389081082.994724396 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnLoginDialog.ui0000644000175000001440000000601111072705617024776 0ustar00detlevusers00000000000000 SvnLoginDialog 0 0 400 145 Subversion Login true Select, if the login data should be saved. Save login data Enter password QLineEdit::Password Password: Username: Enter username Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok usernameEdit passwordEdit saveCheckBox buttonBox accepted() SvnLoginDialog accept() 23 129 23 141 buttonBox rejected() SvnLoginDialog reject() 81 121 81 145 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/ProjectBrowserHelper.py0000644000175000001440000000013212261012650026501 xustar000000000000000030 mtime=1388582312.316081086 30 atime=1389081082.994724396 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/ProjectBrowserHelper.py0000644000175000001440000011335312261012650026241 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2005 - 2014 Detlev Offenbach # """ Module implementing the VCS project browser helper for subversion. """ import os import pysvn from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt.KQApplication import e4App from VCS.ProjectBrowserHelper import VcsProjectBrowserHelper from Project.ProjectBrowserModel import ProjectBrowserFileItem import UI.PixmapCache class SvnProjectBrowserHelper(VcsProjectBrowserHelper): """ Class implementing the VCS project browser helper for subversion. """ def __init__(self, vcsObject, browserObject, projectObject, isTranslationsBrowser, parent = None, name = None): """ Constructor @param vcsObject reference to the vcs object @param browserObject reference to the project browser object @param projectObject reference to the project object @param isTranslationsBrowser flag indicating, the helper is requested for the translations browser (this needs some special treatment) @param parent parent widget (QWidget) @param name name of this object (string or QString) """ VcsProjectBrowserHelper.__init__(self, vcsObject, browserObject, projectObject, isTranslationsBrowser, parent, name) def showContextMenu(self, menu, standardItems): """ Slot called before the context menu is shown. It enables/disables the VCS menu entries depending on the overall VCS status and the file status. @param menu reference to the menu to be shown @param standardItems array of standard items that need activation/deactivation depending on the overall VCS status """ if unicode(self.browser.currentItem().data(1)) == self.vcs.vcsName(): for act in self.vcsMenuActions: act.setEnabled(True) for act in self.vcsAddMenuActions: act.setEnabled(False) for act in standardItems: act.setEnabled(False) if not hasattr(self.browser.currentItem(), 'fileName'): self.blameAct.setEnabled(False) else: for act in self.vcsMenuActions: act.setEnabled(False) for act in self.vcsAddMenuActions: act.setEnabled(True) if 1 in self.browser.specialMenuEntries: try: name = unicode(self.browser.currentItem().fileName()) except AttributeError: name = unicode(self.browser.currentItem().dirName()) if not os.path.isdir(name): self.vcsMenuAddTree.setEnabled(False) for act in standardItems: act.setEnabled(True) def showContextMenuMulti(self, menu, standardItems): """ Slot called before the context menu (multiple selections) is shown. It enables/disables the VCS menu entries depending on the overall VCS status and the files status. @param menu reference to the menu to be shown @param standardItems array of standard items that need activation/deactivation depending on the overall VCS status """ vcsName = self.vcs.vcsName() items = self.browser.getSelectedItems() vcsItems = 0 # determine number of selected items under VCS control for itm in items: if unicode(itm.data(1)) == vcsName: vcsItems += 1 if vcsItems > 0: if vcsItems != len(items): for act in self.vcsMultiMenuActions: act.setEnabled(False) else: for act in self.vcsMultiMenuActions: act.setEnabled(True) for act in self.vcsAddMultiMenuActions: act.setEnabled(False) for act in standardItems: act.setEnabled(False) else: for act in self.vcsMultiMenuActions: act.setEnabled(False) for act in self.vcsAddMultiMenuActions: act.setEnabled(True) if 1 in self.browser.specialMenuEntries and \ self.__itemsHaveFiles(items): self.vcsMultiMenuAddTree.setEnabled(False) for act in standardItems: act.setEnabled(True) def showContextMenuDir(self, menu, standardItems): """ Slot called before the context menu is shown. It enables/disables the VCS menu entries depending on the overall VCS status and the directory status. @param menu reference to the menu to be shown @param standardItems array of standard items that need activation/deactivation depending on the overall VCS status """ if unicode(self.browser.currentItem().data(1)) == self.vcs.vcsName(): for act in self.vcsDirMenuActions: act.setEnabled(True) for act in self.vcsAddDirMenuActions: act.setEnabled(False) for act in standardItems: act.setEnabled(False) else: for act in self.vcsDirMenuActions: act.setEnabled(False) for act in self.vcsAddDirMenuActions: act.setEnabled(True) for act in standardItems: act.setEnabled(True) def showContextMenuDirMulti(self, menu, standardItems): """ Slot called before the context menu is shown. It enables/disables the VCS menu entries depending on the overall VCS status and the directory status. @param menu reference to the menu to be shown @param standardItems array of standard items that need activation/deactivation depending on the overall VCS status """ vcsName = self.vcs.vcsName() items = self.browser.getSelectedItems() vcsItems = 0 # determine number of selected items under VCS control for itm in items: if unicode(itm.data(1)) == vcsName: vcsItems += 1 if vcsItems > 0: if vcsItems != len(items): for act in self.vcsDirMultiMenuActions: act.setEnabled(False) else: for act in self.vcsDirMultiMenuActions: act.setEnabled(True) for act in self.vcsAddDirMultiMenuActions: act.setEnabled(False) for act in standardItems: act.setEnabled(False) else: for act in self.vcsDirMultiMenuActions: act.setEnabled(False) for act in self.vcsAddDirMultiMenuActions: act.setEnabled(True) for act in standardItems: act.setEnabled(True) ############################################################################ # Protected menu generation methods below ############################################################################ def _addVCSMenu(self, mainMenu): """ Protected method used to add the VCS menu to all project browsers. @param mainMenu reference to the menu to be amended """ self.vcsMenuActions = [] self.vcsAddMenuActions = [] menu = QMenu(self.trUtf8("Version Control")) act = menu.addAction( UI.PixmapCache.getIcon( os.path.join("VcsPlugins", "vcsPySvn", "icons", "pysvn.png")), self.vcs.vcsName(), self._VCSInfoDisplay) font = act.font() font.setBold(True) act.setFont(font) menu.addSeparator() act = menu.addAction(UI.PixmapCache.getIcon("vcsUpdate.png"), self.trUtf8('Update from repository'), self._VCSUpdate) self.vcsMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsCommit.png"), self.trUtf8('Commit changes to repository...'), self._VCSCommit) self.vcsMenuActions.append(act) menu.addSeparator() act = menu.addAction(UI.PixmapCache.getIcon("vcsAdd.png"), self.trUtf8('Add to repository'), self._VCSAdd) self.vcsAddMenuActions.append(act) if 1 in self.browser.specialMenuEntries: self.vcsMenuAddTree = menu.addAction(UI.PixmapCache.getIcon("vcsAdd.png"), self.trUtf8('Add tree to repository'), self._VCSAddTree) self.vcsAddMenuActions.append(self.vcsMenuAddTree) act = menu.addAction(UI.PixmapCache.getIcon("vcsRemove.png"), self.trUtf8('Remove from repository (and disk)'), self._VCSRemove) self.vcsMenuActions.append(act) menu.addSeparator() act = menu.addAction(self.trUtf8('Copy'), self.__SVNCopy) self.vcsMenuActions.append(act) act = menu.addAction(self.trUtf8('Move'), self.__SVNMove) self.vcsMenuActions.append(act) if pysvn.svn_version >= (1, 5, 0) and pysvn.version >= (1, 6, 0): menu.addSeparator() act = menu.addAction(self.trUtf8("Add to Changelist"), self.__SVNAddToChangelist) self.vcsMenuActions.append(act) act = menu.addAction(self.trUtf8("Remove from Changelist"), self.__SVNRemoveFromChangelist) self.vcsMenuActions.append(act) menu.addSeparator() act = menu.addAction(UI.PixmapCache.getIcon("vcsLog.png"), self.trUtf8('Show log'), self._VCSLog) self.vcsMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsLog.png"), self.trUtf8('Show limited log'), self.__SVNLogLimited) self.vcsMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsLog.png"), self.trUtf8('Show log browser'), self.__SVNLogBrowser) self.vcsMenuActions.append(act) menu.addSeparator() act = menu.addAction(UI.PixmapCache.getIcon("vcsStatus.png"), self.trUtf8('Show status'), self._VCSStatus) self.vcsMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsRepo.png"), self.trUtf8('Show repository info'), self.__SVNInfo) self.vcsMenuActions.append(act) menu.addSeparator() act = menu.addAction(UI.PixmapCache.getIcon("vcsDiff.png"), self.trUtf8('Show difference'), self._VCSDiff) self.vcsMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsDiff.png"), self.trUtf8('Show difference (extended)'), self.__SVNExtendedDiff) self.vcsMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsDiff.png"), self.trUtf8('Show difference (URLs)'), self.__SVNUrlDiff) self.vcsMenuActions.append(act) self.blameAct = menu.addAction(self.trUtf8('Show annotated file'), self.__SVNBlame) self.vcsMenuActions.append(self.blameAct) menu.addSeparator() act = menu.addAction(UI.PixmapCache.getIcon("vcsRevert.png"), self.trUtf8('Revert changes'), self._VCSRevert) self.vcsMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsMerge.png"), self.trUtf8('Merge changes'), self._VCSMerge) self.vcsMenuActions.append(act) act = menu.addAction(self.trUtf8('Conflict resolved'), self.__SVNResolve) self.vcsMenuActions.append(act) menu.addSeparator() act = menu.addAction(UI.PixmapCache.getIcon("vcsLock.png"), self.trUtf8('Lock'), self.__SVNLock) self.vcsMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsUnlock.png"), self.trUtf8('Unlock'), self.__SVNUnlock) self.vcsMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsUnlock.png"), self.trUtf8('Break Lock'), self.__SVNBreakLock) self.vcsMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsUnlock.png"), self.trUtf8('Steal Lock'), self.__SVNStealLock) self.vcsMenuActions.append(act) menu.addSeparator() act = menu.addAction(self.trUtf8('Set Property'), self.__SVNSetProp) self.vcsMenuActions.append(act) act = menu.addAction(self.trUtf8('List Properties'), self.__SVNListProps) self.vcsMenuActions.append(act) act = menu.addAction(self.trUtf8('Delete Property'), self.__SVNDelProp) self.vcsMenuActions.append(act) menu.addSeparator() menu.addAction(self.trUtf8('Select all local file entries'), self.browser.selectLocalEntries) menu.addAction(self.trUtf8('Select all versioned file entries'), self.browser.selectVCSEntries) menu.addAction(self.trUtf8('Select all local directory entries'), self.browser.selectLocalDirEntries) menu.addAction(self.trUtf8('Select all versioned directory entries'), self.browser.selectVCSDirEntries) menu.addSeparator() menu.addAction(self.trUtf8("Configure..."), self.__SVNConfigure) mainMenu.addSeparator() mainMenu.addMenu(menu) self.menu = menu def _addVCSMenuMulti(self, mainMenu): """ Protected method used to add the VCS menu for multi selection to all project browsers. @param mainMenu reference to the menu to be amended """ self.vcsMultiMenuActions = [] self.vcsAddMultiMenuActions = [] menu = QMenu(self.trUtf8("Version Control")) act = menu.addAction( UI.PixmapCache.getIcon( os.path.join("VcsPlugins", "vcsPySvn", "icons", "pysvn.png")), self.vcs.vcsName(), self._VCSInfoDisplay) font = act.font() font.setBold(True) act.setFont(font) menu.addSeparator() act = menu.addAction(UI.PixmapCache.getIcon("vcsUpdate.png"), self.trUtf8('Update from repository'), self._VCSUpdate) self.vcsMultiMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsCommit.png"), self.trUtf8('Commit changes to repository...'), self._VCSCommit) self.vcsMultiMenuActions.append(act) menu.addSeparator() act = menu.addAction(UI.PixmapCache.getIcon("vcsAdd.png"), self.trUtf8('Add to repository'), self._VCSAdd) self.vcsAddMultiMenuActions.append(act) if 1 in self.browser.specialMenuEntries: self.vcsMultiMenuAddTree = \ menu.addAction(UI.PixmapCache.getIcon("vcsAdd.png"), self.trUtf8('Add tree to repository'), self._VCSAddTree) self.vcsAddMultiMenuActions.append(self.vcsMultiMenuAddTree) act = menu.addAction(UI.PixmapCache.getIcon("vcsRemove.png"), self.trUtf8('Remove from repository (and disk)'), self._VCSRemove) self.vcsMultiMenuActions.append(act) self.vcsRemoveMultiMenuItem = act if pysvn.svn_version >= (1, 5, 0) and pysvn.version >= (1, 6, 0): menu.addSeparator() act = menu.addAction(self.trUtf8("Add to Changelist"), self.__SVNAddToChangelist) self.vcsMenuActions.append(act) act = menu.addAction(self.trUtf8("Remove from Changelist"), self.__SVNRemoveFromChangelist) self.vcsMenuActions.append(act) menu.addSeparator() act = menu.addAction(UI.PixmapCache.getIcon("vcsStatus.png"), self.trUtf8('Show status'), self._VCSStatus) self.vcsMultiMenuActions.append(act) menu.addSeparator() act = menu.addAction(UI.PixmapCache.getIcon("vcsDiff.png"), self.trUtf8('Show difference'), self._VCSDiff) self.vcsMultiMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsDiff.png"), self.trUtf8('Show difference (extended)'), self.__SVNExtendedDiff) self.vcsMultiMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsDiff.png"), self.trUtf8('Show difference (URLs)'), self.__SVNUrlDiff) self.vcsMultiMenuActions.append(act) menu.addSeparator() act = menu.addAction(UI.PixmapCache.getIcon("vcsRevert.png"), self.trUtf8('Revert changes'), self._VCSRevert) self.vcsMultiMenuActions.append(act) act = menu.addAction(self.trUtf8('Conflict resolved'), self.__SVNResolve) self.vcsMultiMenuActions.append(act) menu.addSeparator() act = menu.addAction(UI.PixmapCache.getIcon("vcsLock.png"), self.trUtf8('Lock'), self.__SVNLock) self.vcsMultiMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsUnlock.png"), self.trUtf8('Unlock'), self.__SVNUnlock) self.vcsMultiMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsUnlock.png"), self.trUtf8('Break Lock'), self.__SVNBreakLock) self.vcsMultiMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsUnlock.png"), self.trUtf8('Steal Lock'), self.__SVNStealLock) self.vcsMultiMenuActions.append(act) menu.addSeparator() act = menu.addAction(self.trUtf8('Set Property'), self.__SVNSetProp) self.vcsMultiMenuActions.append(act) act = menu.addAction(self.trUtf8('List Properties'), self.__SVNListProps) self.vcsMultiMenuActions.append(act) act = menu.addAction(self.trUtf8('Delete Property'), self.__SVNDelProp) self.vcsMultiMenuActions.append(act) menu.addSeparator() menu.addAction(self.trUtf8('Select all local file entries'), self.browser.selectLocalEntries) menu.addAction(self.trUtf8('Select all versioned file entries'), self.browser.selectVCSEntries) menu.addAction(self.trUtf8('Select all local directory entries'), self.browser.selectLocalDirEntries) menu.addAction(self.trUtf8('Select all versioned directory entries'), self.browser.selectVCSDirEntries) menu.addSeparator() menu.addAction(self.trUtf8("Configure..."), self.__SVNConfigure) mainMenu.addSeparator() mainMenu.addMenu(menu) self.menuMulti = menu def _addVCSMenuBack(self, mainMenu): """ Protected method used to add the VCS menu to all project browsers. @param mainMenu reference to the menu to be amended """ menu = QMenu(self.trUtf8("Version Control")) act = menu.addAction( UI.PixmapCache.getIcon( os.path.join("VcsPlugins", "vcsPySvn", "icons", "pysvn.png")), self.vcs.vcsName(), self._VCSInfoDisplay) font = act.font() font.setBold(True) act.setFont(font) menu.addSeparator() menu.addAction(self.trUtf8('Select all local file entries'), self.browser.selectLocalEntries) menu.addAction(self.trUtf8('Select all versioned file entries'), self.browser.selectVCSEntries) menu.addAction(self.trUtf8('Select all local directory entries'), self.browser.selectLocalDirEntries) menu.addAction(self.trUtf8('Select all versioned directory entries'), self.browser.selectVCSDirEntries) menu.addSeparator() menu.addAction(self.trUtf8("Configure..."), self.__SVNConfigure) mainMenu.addSeparator() mainMenu.addMenu(menu) self.menuBack = menu def _addVCSMenuDir(self, mainMenu): """ Protected method used to add the VCS menu to all project browsers. @param mainMenu reference to the menu to be amended """ if mainMenu is None: return self.vcsDirMenuActions = [] self.vcsAddDirMenuActions = [] menu = QMenu(self.trUtf8("Version Control")) act = menu.addAction( UI.PixmapCache.getIcon( os.path.join("VcsPlugins", "vcsPySvn", "icons", "pysvn.png")), self.vcs.vcsName(), self._VCSInfoDisplay) font = act.font() font.setBold(True) act.setFont(font) menu.addSeparator() act = menu.addAction(UI.PixmapCache.getIcon("vcsUpdate.png"), self.trUtf8('Update from repository'), self._VCSUpdate) self.vcsDirMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsCommit.png"), self.trUtf8('Commit changes to repository...'), self._VCSCommit) self.vcsDirMenuActions.append(act) menu.addSeparator() act = menu.addAction(UI.PixmapCache.getIcon("vcsAdd.png"), self.trUtf8('Add to repository'), self._VCSAdd) self.vcsAddDirMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsRemove.png"), self.trUtf8('Remove from repository (and disk)'), self._VCSRemove) self.vcsDirMenuActions.append(act) menu.addSeparator() act = menu.addAction(self.trUtf8('Copy'), self.__SVNCopy) self.vcsDirMenuActions.append(act) act = menu.addAction(self.trUtf8('Move'), self.__SVNMove) self.vcsDirMenuActions.append(act) if pysvn.svn_version >= (1, 5, 0) and pysvn.version >= (1, 6, 0): menu.addSeparator() act = menu.addAction(self.trUtf8("Add to Changelist"), self.__SVNAddToChangelist) self.vcsMenuActions.append(act) act = menu.addAction(self.trUtf8("Remove from Changelist"), self.__SVNRemoveFromChangelist) self.vcsMenuActions.append(act) menu.addSeparator() act = menu.addAction(UI.PixmapCache.getIcon("vcsLog.png"), self.trUtf8('Show log'), self._VCSLog) self.vcsDirMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsLog.png"), self.trUtf8('Show limited log'), self.__SVNLogLimited) self.vcsDirMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsLog.png"), self.trUtf8('Show log browser'), self.__SVNLogBrowser) self.vcsDirMenuActions.append(act) menu.addSeparator() act = menu.addAction(UI.PixmapCache.getIcon("vcsStatus.png"), self.trUtf8('Show status'), self._VCSStatus) self.vcsDirMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsRepo.png"), self.trUtf8('Show repository info'), self.__SVNInfo) self.vcsDirMenuActions.append(act) menu.addSeparator() act = menu.addAction(UI.PixmapCache.getIcon("vcsDiff.png"), self.trUtf8('Show difference'), self._VCSDiff) self.vcsDirMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsDiff.png"), self.trUtf8('Show difference (extended)'), self.__SVNExtendedDiff) self.vcsDirMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsDiff.png"), self.trUtf8('Show difference (URLs)'), self.__SVNUrlDiff) self.vcsDirMenuActions.append(act) menu.addSeparator() act = menu.addAction(UI.PixmapCache.getIcon("vcsRevert.png"), self.trUtf8('Revert changes'), self._VCSRevert) self.vcsDirMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsMerge.png"), self.trUtf8('Merge changes'), self._VCSMerge) self.vcsDirMenuActions.append(act) act = menu.addAction(self.trUtf8('Conflict resolved'), self.__SVNResolve) self.vcsDirMenuActions.append(act) menu.addSeparator() act = menu.addAction(self.trUtf8('Set Property'), self.__SVNSetProp) self.vcsDirMenuActions.append(act) act = menu.addAction(self.trUtf8('List Properties'), self.__SVNListProps) self.vcsDirMenuActions.append(act) act = menu.addAction(self.trUtf8('Delete Property'), self.__SVNDelProp) self.vcsDirMenuActions.append(act) menu.addSeparator() menu.addAction(self.trUtf8('Select all local file entries'), self.browser.selectLocalEntries) menu.addAction(self.trUtf8('Select all versioned file entries'), self.browser.selectVCSEntries) menu.addAction(self.trUtf8('Select all local directory entries'), self.browser.selectLocalDirEntries) menu.addAction(self.trUtf8('Select all versioned directory entries'), self.browser.selectVCSDirEntries) menu.addSeparator() menu.addAction(self.trUtf8("Configure..."), self.__SVNConfigure) mainMenu.addSeparator() mainMenu.addMenu(menu) self.menuDir = menu def _addVCSMenuDirMulti(self, mainMenu): """ Protected method used to add the VCS menu to all project browsers. @param mainMenu reference to the menu to be amended """ if mainMenu is None: return self.vcsDirMultiMenuActions = [] self.vcsAddDirMultiMenuActions = [] menu = QMenu(self.trUtf8("Version Control")) act = menu.addAction( UI.PixmapCache.getIcon( os.path.join("VcsPlugins", "vcsPySvn", "icons", "pysvn.png")), self.vcs.vcsName(), self._VCSInfoDisplay) font = act.font() font.setBold(True) act.setFont(font) menu.addSeparator() act = menu.addAction(UI.PixmapCache.getIcon("vcsUpdate.png"), self.trUtf8('Update from repository'), self._VCSUpdate) self.vcsDirMultiMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsCommit.png"), self.trUtf8('Commit changes to repository...'), self._VCSCommit) self.vcsDirMultiMenuActions.append(act) menu.addSeparator() act = menu.addAction(UI.PixmapCache.getIcon("vcsAdd.png"), self.trUtf8('Add to repository'), self._VCSAdd) self.vcsAddDirMultiMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsRemove.png"), self.trUtf8('Remove from repository (and disk)'), self._VCSRemove) self.vcsDirMultiMenuActions.append(act) if pysvn.svn_version >= (1, 5, 0) and pysvn.version >= (1, 6, 0): menu.addSeparator() act = menu.addAction(self.trUtf8("Add to Changelist"), self.__SVNAddToChangelist) self.vcsMenuActions.append(act) act = menu.addAction(self.trUtf8("Remove from Changelist"), self.__SVNRemoveFromChangelist) self.vcsMenuActions.append(act) menu.addSeparator() act = menu.addAction(UI.PixmapCache.getIcon("vcsStatus.png"), self.trUtf8('Show status'), self._VCSStatus) self.vcsDirMultiMenuActions.append(act) menu.addSeparator() act = menu.addAction(UI.PixmapCache.getIcon("vcsDiff.png"), self.trUtf8('Show difference'), self._VCSDiff) self.vcsDirMultiMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsDiff.png"), self.trUtf8('Show difference (extended)'), self.__SVNExtendedDiff) self.vcsDirMultiMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsDiff.png"), self.trUtf8('Show difference (URLs)'), self.__SVNUrlDiff) self.vcsDirMultiMenuActions.append(act) menu.addSeparator() act = menu.addAction(UI.PixmapCache.getIcon("vcsRevert.png"), self.trUtf8('Revert changes'), self._VCSRevert) self.vcsDirMenuActions.append(act) act = menu.addAction(UI.PixmapCache.getIcon("vcsMerge.png"), self.trUtf8('Merge changes'), self._VCSMerge) self.vcsDirMenuActions.append(act) act = menu.addAction(self.trUtf8('Conflict resolved'), self.__SVNResolve) self.vcsDirMultiMenuActions.append(act) menu.addSeparator() act = menu.addAction(self.trUtf8('Set Property'), self.__SVNSetProp) self.vcsDirMultiMenuActions.append(act) act = menu.addAction(self.trUtf8('List Properties'), self.__SVNListProps) self.vcsDirMultiMenuActions.append(act) act = menu.addAction(self.trUtf8('Delete Property'), self.__SVNDelProp) self.vcsDirMultiMenuActions.append(act) menu.addSeparator() menu.addAction(self.trUtf8('Select all local file entries'), self.browser.selectLocalEntries) menu.addAction(self.trUtf8('Select all versioned file entries'), self.browser.selectVCSEntries) menu.addAction(self.trUtf8('Select all local directory entries'), self.browser.selectLocalDirEntries) menu.addAction(self.trUtf8('Select all versioned directory entries'), self.browser.selectVCSDirEntries) menu.addSeparator() menu.addAction(self.trUtf8("Configure..."), self.__SVNConfigure) mainMenu.addSeparator() mainMenu.addMenu(menu) self.menuDirMulti = menu ############################################################################ # Menu handling methods below ############################################################################ def __SVNCopy(self): """ Private slot called by the context menu to copy the selected file. """ itm = self.browser.currentItem() try: fn = unicode(itm.fileName()) except AttributeError: fn = unicode(itm.dirName()) self.vcs.svnCopy(fn, self.project) def __SVNMove(self): """ Private slot called by the context menu to move the selected file. """ itm = self.browser.currentItem() try: fn = unicode(itm.fileName()) except AttributeError: fn = unicode(itm.dirName()) isFile = os.path.isfile(fn) movefiles = self.browser.project.getFiles(fn) if self.vcs.vcsMove(fn, self.project): if isFile: self.browser.emit(SIGNAL('closeSourceWindow'), fn) else: for mf in movefiles: self.browser.emit(SIGNAL('closeSourceWindow'), mf) def __SVNResolve(self): """ Private slot called by the context menu to resolve conflicts of a file. """ names = [] for itm in self.browser.getSelectedItems(): try: names.append(unicode(itm.fileName())) except AttributeError: names.append(unicode(itm.dirName())) self.vcs.svnResolve(names) def __SVNListProps(self): """ Private slot called by the context menu to list the subversion properties of a file. """ names = [] for itm in self.browser.getSelectedItems(): try: names.append(unicode(itm.fileName())) except AttributeError: names.append(unicode(itm.dirName())) self.vcs.svnListProps(names) def __SVNSetProp(self): """ Private slot called by the context menu to set a subversion property of a file. """ names = [] for itm in self.browser.getSelectedItems(): try: names.append(unicode(itm.fileName())) except AttributeError: names.append(unicode(itm.dirName())) self.vcs.svnSetProp(names) def __SVNDelProp(self): """ Private slot called by the context menu to delete a subversion property of a file. """ names = [] for itm in self.browser.getSelectedItems(): try: names.append(unicode(itm.fileName())) except AttributeError: names.append(unicode(itm.dirName())) self.vcs.svnDelProp(names) def __SVNExtendedDiff(self): """ Private slot called by the context menu to show the difference of a file to the repository. This gives the chance to enter the revisions to compare. """ names = [] for itm in self.browser.getSelectedItems(): try: names.append(unicode(itm.fileName())) except AttributeError: names.append(unicode(itm.dirName())) self.vcs.svnExtendedDiff(names) def __SVNUrlDiff(self): """ Private slot called by the context menu to show the difference of a file of two repository URLs. This gives the chance to enter the repository URLs to compare. """ names = [] for itm in self.browser.getSelectedItems(): try: names.append(unicode(itm.fileName())) except AttributeError: names.append(unicode(itm.dirName())) self.vcs.svnUrlDiff(names) def __SVNLogLimited(self): """ Private slot called by the context menu to show the limited log of a file. """ itm = self.browser.currentItem() try: fn = unicode(itm.fileName()) except AttributeError: fn = unicode(itm.dirName()) self.vcs.svnLogLimited(fn) def __SVNLogBrowser(self): """ Private slot called by the context menu to show the log browser for a file. """ itm = self.browser.currentItem() try: fn = unicode(itm.fileName()) except AttributeError: fn = unicode(itm.dirName()) self.vcs.svnLogBrowser(fn) def __SVNBlame(self): """ Private slot called by the context menu to show the blame of a file. """ itm = self.browser.currentItem() fn = unicode(itm.fileName()) self.vcs.svnBlame(fn) def __SVNLock(self): """ Private slot called by the context menu to lock files in the repository. """ names = [] for itm in self.browser.getSelectedItems(): try: names.append(unicode(itm.fileName())) except AttributeError: names.append(unicode(itm.dirName())) self.vcs.svnLock(names) def __SVNUnlock(self): """ Private slot called by the context menu to unlock files in the repository. """ names = [] for itm in self.browser.getSelectedItems(): try: names.append(unicode(itm.fileName())) except AttributeError: names.append(unicode(itm.dirName())) self.vcs.svnUnlock(names) def __SVNBreakLock(self): """ Private slot called by the context menu to break lock files in the repository. """ names = [] for itm in self.browser.getSelectedItems(): try: names.append(unicode(itm.fileName())) except AttributeError: names.append(unicode(itm.dirName())) self.vcs.svnUnlock(names, breakIt = True) def __SVNStealLock(self): """ Private slot called by the context menu to steal lock files in the repository. """ names = [] for itm in self.browser.getSelectedItems(): try: names.append(unicode(itm.fileName())) except AttributeError: names.append(unicode(itm.dirName())) self.vcs.svnLock(names, stealIt = True) def __SVNInfo(self): """ Private slot called by the context menu to show repository information of a file or directory. """ try: name = unicode(self.browser.currentItem().fileName()) except AttributeError: name = unicode(self.browser.currentItem().dirName()) name = self.project.getRelativePath(name) self.vcs.svnInfo(self.project.ppath, name) def __SVNConfigure(self): """ Private method to open the configuration dialog. """ e4App().getObject("UserInterface").showPreferences("zzz_subversionPage") def __SVNAddToChangelist(self): """ Private slot called by the context menu to add files to a changelist. """ names = [] for itm in self.browser.getSelectedItems(): try: names.append(unicode(itm.fileName())) except AttributeError: names.append(unicode(itm.dirName())) self.vcs.svnAddToChangelist(names) def __SVNRemoveFromChangelist(self): """ Private slot called by the context menu to remove files from their changelist. """ names = [] for itm in self.browser.getSelectedItems(): try: names.append(unicode(itm.fileName())) except AttributeError: names.append(unicode(itm.dirName())) self.vcs.svnRemoveFromChangelist(names) ############################################################################ # Some private utility methods below ############################################################################ def __itemsHaveFiles(self, items): """ Private method to check, if items contain file type items. @param items items to check (list of QTreeWidgetItems) @return flag indicating items contain file type items (boolean) """ for itm in items: if isinstance(itm, ProjectBrowserFileItem): return True return False eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnLogDialog.ui0000644000175000001440000000007411744564746024740 xustar000000000000000030 atime=1389081083.011724396 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnLogDialog.ui0000644000175000001440000000466711744564746024502 0ustar00detlevusers00000000000000 SvnLogDialog 0 0 751 649 Subversion Log 0 4 Log <b>Subversion Log</b><p>This shows the output of the svn log command. By clicking on the links you may show the difference between versions.</p> 0 1 Errors <b>Subversion log errors</b><p>This shows possible error messages of the svn log command.</p> true false Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Close contents errors buttonBox eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnDialog.ui0000644000175000001440000000007411744564707024273 xustar000000000000000030 atime=1389081083.025724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnDialog.ui0000644000175000001440000000447611744564707024033 0ustar00detlevusers00000000000000 SvnDialog 0 0 593 499 Subversion true 0 3 Output true false 0 1 Errors true false Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Close qPixmapFromMimeSource resultbox errors buttonBox eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/icons0000644000175000001440000000007311706605624023073 xustar000000000000000029 atime=1389081086.01372434 30 ctime=1389081086.315724332 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/icons/0000755000175000001440000000000011706605624022676 5ustar00detlevusers00000000000000eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/icons/PaxHeaders.8617/pysvn.png0000644000175000001440000000007411017556744025041 xustar000000000000000030 atime=1389081083.025724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/icons/pysvn.png0000644000175000001440000000162011017556744024565 0ustar00detlevusers00000000000000PNG  IHDRĴl;WIDAT8k\U?Lfc&&N3$&P!(BQ sU(wvJD hAZ I)41&Nf23}>`@=p9s9+פcIǿmmiBHŚPƄRF1ag`Ƴ/p,׶7ˏYt T˳DQpxQÜ87/=Oe}c MlF؉M^}8e|C  RiXC8Dp2֛Q Pϫ1Q) ),/K}|DRJE,ߝgnGg;nE8 K5ymkĤləJ\?})0;*iYz{)2佩 '~GMK5y(!a҄RA"e(8LJ]iG d.soM8CPJ`jz U?9Te7NLHWNFMr:vd#v}IIENDB`eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/icons/PaxHeaders.8617/preferences-subversion.png0000644000175000001440000000007411017556744030360 xustar000000000000000030 atime=1389081083.025724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/icons/preferences-subversion.png0000644000175000001440000000130011017556744030077 0ustar00detlevusers00000000000000PNG  IHDRĴl;IDAT8͔KTQ?7oޛ&GRPlSEQ AvڹuݿFhQA%%) VudiQ?h"s{?p8犛ݽ :_>b]<+\?z08ӎG>8ī`Cu<9\[MMM(@?X[PhiP9fP6xk}#p./LDX8sDFE>=QRnb<汒qBChSԗ8̏X:ƽN0%aH:"7w01@""9i9ZQ'g'kqI5438)M¦.{N2cxXb 첳"Y}C1:d3nn?Omm '"s:' iMhYQ4}5M70:9CN#IENDB`eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnChangeListsDialog.py0000644000175000001440000000013112261012650026401 xustar000000000000000029 mtime=1388582312.32108115 30 atime=1389081083.026724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnChangeListsDialog.py0000644000175000001440000001042212261012650026133 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2012 - 2014 Detlev Offenbach # """ Module implementing a dialog to browse the change lists. """ import os import pysvn from PyQt4.QtCore import pyqtSignature, Qt, QMutexLocker from PyQt4.QtGui import QDialog, QDialogButtonBox, QListWidgetItem, QApplication, \ QCursor from SvnDialogMixin import SvnDialogMixin from Ui_SvnChangeListsDialog import Ui_SvnChangeListsDialog class SvnChangeListsDialog(QDialog, SvnDialogMixin, Ui_SvnChangeListsDialog): """ Class implementing a dialog to browse the change lists. """ def __init__(self, vcs, parent=None): """ Constructor @param vcs reference to the vcs object @param parent parent widget (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) SvnDialogMixin.__init__(self) self.buttonBox.button(QDialogButtonBox.Close).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Cancel).setDefault(True) self.vcs = vcs self.client = self.vcs.getClient() self.client.callback_cancel = \ self._clientCancelCallback self.client.callback_get_login = \ self._clientLoginCallback self.client.callback_ssl_server_trust_prompt = \ self._clientSslServerTrustPromptCallback @pyqtSignature("QListWidgetItem*, QListWidgetItem*") def on_changeLists_currentItemChanged(self, current, previous): """ Private slot to handle the selection of a new item. @param current current item (QListWidgetItem) @param previous previous current item (QListWidgetItem) """ self.filesList.clear() if current is not None: changelist = unicode(current.text()) if changelist in self.changeListsDict: self.filesList.addItems(sorted(self.changeListsDict[changelist])) def start(self, path): """ Public slot to populate the data. @param path directory name to show change lists for (string) """ self.changeListsDict = {} self.cancelled = False self.filesLabel.setText(self.trUtf8("Files (relative to %1):").arg(path)) QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) QApplication.processEvents() locker = QMutexLocker(self.vcs.vcsExecutionMutex) try: entries = self.client.get_changelist(path, depth=pysvn.depth.infinity) for entry in entries: file = entry[0] changelist = entry[1] if changelist not in self.changeListsDict: self.changeListsDict[changelist] = [] filename = file.replace(path + os.sep, "") if filename not in self.changeListsDict[changelist]: self.changeListsDict[changelist].append(filename) except pysvn.ClientError as e: locker.unlock() self.__showError(e.args[0]) self.__finish() def __finish(self): """ Private slot called when the user pressed the button. """ self.changeLists.addItems(sorted(self.changeListsDict.keys())) QApplication.restoreOverrideCursor() self.buttonBox.button(QDialogButtonBox.Close).setEnabled(True) self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Close).setDefault(True) if len(self.changeListsDict) == 0: self.changeLists.addItem(self.trUtf8("No changelists found")) self.buttonBox.button(QDialogButtonBox.Close).setFocus(Qt.OtherFocusReason) else: self.changeLists.setCurrentRow(0) self.changeLists.setFocus(Qt.OtherFocusReason) def on_buttonBox_clicked(self, button): """ Private slot called by a button of the button box clicked. @param button button that was clicked (QAbstractButton) """ if button == self.buttonBox.button(QDialogButtonBox.Close): self.close() elif button == self.buttonBox.button(QDialogButtonBox.Cancel): self.cancelled = True self.__finish() eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnOptionsDialog.py0000644000175000001440000000013212261012650025631 xustar000000000000000030 mtime=1388582312.337081353 30 atime=1389081083.027724396 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnOptionsDialog.py0000644000175000001440000001020412261012650025360 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2002 - 2014 Detlev Offenbach # """ Module implementing a dialog to enter options used to start a project in the VCS. """ import os from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQFileDialog from E4Gui.E4Completers import E4DirCompleter from SvnRepoBrowserDialog import SvnRepoBrowserDialog from Ui_SvnOptionsDialog import Ui_SvnOptionsDialog from Config import ConfigSvnProtocols import Utilities class SvnOptionsDialog(QDialog, Ui_SvnOptionsDialog): """ Class implementing a dialog to enter options used to start a project in the repository. """ def __init__(self, vcs, project, parent = None): """ Constructor @param vcs reference to the version control object @param project reference to the project object @param parent parent widget (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.vcsDirectoryCompleter = E4DirCompleter(self.vcsUrlEdit) self.project = project self.protocolCombo.addItems(ConfigSvnProtocols) hd = Utilities.toNativeSeparators(QDir.homePath()) hd = os.path.join(unicode(hd), 'subversionroot') self.vcsUrlEdit.setText(hd) self.vcs = vcs self.localPath = unicode(hd) self.networkPath = "localhost/" self.localProtocol = True @pyqtSignature("") def on_vcsUrlButton_clicked(self): """ Private slot to display a selection dialog. """ if self.protocolCombo.currentText() == "file://": directory = KQFileDialog.getExistingDirectory(\ self, self.trUtf8("Select Repository-Directory"), self.vcsUrlEdit.text(), QFileDialog.Options(QFileDialog.ShowDirsOnly)) if not directory.isEmpty(): self.vcsUrlEdit.setText(Utilities.toNativeSeparators(directory)) else: dlg = SvnRepoBrowserDialog(self.vcs, mode = "select", parent = self) dlg.start(self.protocolCombo.currentText() + self.vcsUrlEdit.text()) if dlg.exec_() == QDialog.Accepted: url = dlg.getSelectedUrl() if not url.isEmpty(): protocol = url.section("://", 0, 0) path = url.section("://", 1, 1) self.protocolCombo.setCurrentIndex(\ self.protocolCombo.findText(protocol + "://")) self.vcsUrlEdit.setText(path) @pyqtSignature("QString") def on_protocolCombo_activated(self, protocol): """ Private slot to switch the status of the directory selection button. """ if str(protocol) == "file://": self.networkPath = unicode(self.vcsUrlEdit.text()) self.vcsUrlEdit.setText(self.localPath) self.vcsUrlLabel.setText(self.trUtf8("Pat&h:")) self.localProtocol = True else: if self.localProtocol: self.localPath = unicode(self.vcsUrlEdit.text()) self.vcsUrlEdit.setText(self.networkPath) self.vcsUrlLabel.setText(self.trUtf8("&URL:")) self.localProtocol = False @pyqtSlot(str) def on_vcsUrlEdit_textChanged(self, txt): """ Private slot to handle changes of the URL. @param txt current text of the line edit (QString) """ enable = not txt.contains("://") self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(enable) def getData(self): """ Public slot to retrieve the data entered into the dialog. @return a dictionary containing the data entered """ scheme = str(self.protocolCombo.currentText()) url = unicode(self.vcsUrlEdit.text()) vcsdatadict = { "url" : '%s%s' % (scheme, url), "message" : unicode(self.vcsLogEdit.text()), "standardLayout" : self.layoutCheckBox.isChecked(), } return vcsdatadict eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/subversion.py0000644000175000001440000000013212261012650024566 xustar000000000000000030 mtime=1388582312.356081594 30 atime=1389081083.027724396 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/subversion.py0000644000175000001440000026201612261012650024327 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing the version control systems interface to Subversion. """ import os import shutil import types import urllib import time from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQMessageBox, KQInputDialog from KdeQt.KQApplication import e4App from VCS.VersionControl import VersionControl import pysvn from SvnDialog import SvnDialog from SvnCommitDialog import SvnCommitDialog from SvnLogDialog import SvnLogDialog from SvnLogBrowserDialog import SvnLogBrowserDialog from SvnDiffDialog import SvnDiffDialog from SvnRevisionSelectionDialog import SvnRevisionSelectionDialog from SvnStatusDialog import SvnStatusDialog from SvnTagDialog import SvnTagDialog from SvnTagBranchListDialog import SvnTagBranchListDialog from SvnCopyDialog import SvnCopyDialog from SvnCommandDialog import SvnCommandDialog from SvnSwitchDialog import SvnSwitchDialog from SvnMergeDialog import SvnMergeDialog from SvnPropListDialog import SvnPropListDialog from SvnPropSetDialog import SvnPropSetDialog from SvnPropDelDialog import SvnPropDelDialog from SvnOptionsDialog import SvnOptionsDialog from SvnNewProjectOptionsDialog import SvnNewProjectOptionsDialog from SvnBlameDialog import SvnBlameDialog from SvnInfoDialog import SvnInfoDialog from SvnRelocateDialog import SvnRelocateDialog from SvnUrlSelectionDialog import SvnUrlSelectionDialog from SvnRepoBrowserDialog import SvnRepoBrowserDialog from SvnChangeListsDialog import SvnChangeListsDialog from SvnStatusMonitorThread import SvnStatusMonitorThread from SvnUtilities import getConfigPath, amendConfig, createDefaultConfig from ProjectBrowserHelper import SvnProjectBrowserHelper from ProjectHelper import SvnProjectHelper from Plugins.VcsPlugins.vcsSubversion.SvnDialog import SvnDialog as SvnProcessDialog import Utilities class Subversion(VersionControl): """ Class implementing the version control systems interface to Subversion. @signal committed() emitted after the commit action has completed """ def __init__(self, plugin, parent = None, name = None): """ Constructor @param plugin reference to the plugin object @param parent parent widget (QWidget) @param name name of this object (string or QString) """ VersionControl.__init__(self, parent, name) self.defaultOptions = { 'global' : [''], 'commit' : [''], 'checkout' : [''], 'update' : [''], 'add' : [''], 'remove' : [''], 'diff' : [''], 'log' : [''], 'history' : [''], 'status' : [''], 'tag' : [''], 'export' : [''] } self.interestingDataKeys = [ "standardLayout", ] self.__plugin = plugin self.__ui = parent self.options = self.defaultOptions self.otherData["standardLayout"] = True self.tagsList = QStringList() self.branchesList = QStringList() self.allTagsBranchesList = QStringList() self.mergeList = [QStringList(), QStringList(), QStringList()] self.showedTags = False self.showedBranches = False self.tagTypeList = QStringList() self.tagTypeList.append('tags') self.tagTypeList.append('branches') self.commandHistory = QStringList() self.wdHistory = QStringList() if pysvn.version >= (1, 4, 3, 0) and os.environ.has_key("SVN_ASP_DOT_NET_HACK"): self.adminDir = '_svn' else: self.adminDir = '.svn' self.log = None self.diff = None self.status = None self.propList = None self.tagbranchList = None self.blame = None self.repoBrowser = None self.logBrowser = None self.statusCache = {} self.__commitData = {} self.__commitDialog = None self.__wcng = True # assume new generation working copy metadata format def getPlugin(self): """ Public method to get a reference to the plugin object. @return reference to the plugin object (VcsPySvnPlugin) """ return self.__plugin def getClient(self): """ Public method to create and initialize the pysvn client object. @return the pysvn client object (pysvn.Client) """ configDir = "" authCache = True for arg in self.options['global']: if arg.startswith("--config-dir"): configDir = arg.split("=", 1)[1] if arg.startswith("--no-auth-cache"): authCache = False client = pysvn.Client(configDir) client.exception_style = 1 client.set_auth_cache(authCache) return client ############################################################################ ## Methods of the VCS interface ############################################################################ def vcsShutdown(self): """ Public method used to shutdown the Subversion interface. """ if self.log is not None: self.log.close() if self.diff is not None: self.diff.close() if self.status is not None: self.status.close() if self.propList is not None: self.propList.close() if self.tagbranchList is not None: self.tagbranchList.close() if self.blame is not None: self.blame.close() if self.repoBrowser is not None: self.repoBrowser.close() if self.logBrowser is not None: self.logBrowser.close() def vcsExists(self): """ Public method used to test for the presence of the svn executable. @return flag indicating the existance (boolean) and an error message (QString) """ self.versionStr = ".".join([str(v) for v in pysvn.svn_version[:-1]]) return True, QString() def vcsInit(self, vcsDir, noDialog = False): """ Public method used to initialize the subversion repository. The subversion repository has to be initialized from outside eric4 because the respective command always works locally. Therefore we always return TRUE without doing anything. @param vcsDir name of the VCS directory (string) @param noDialog flag indicating quiet operations (boolean) @return always TRUE """ return True def vcsConvertProject(self, vcsDataDict, project): """ Public method to convert an uncontrolled project to a version controlled project. @param vcsDataDict dictionary of data required for the conversion @param project reference to the project object """ success = self.vcsImport(vcsDataDict, project.ppath)[0] if not success: KQMessageBox.critical(None, self.trUtf8("Create project in repository"), self.trUtf8("""The project could not be created in the repository.""" """ Maybe the given repository doesn't exist or the""" """ repository server is down.""")) else: cwdIsPpath = False if os.getcwd() == project.ppath: os.chdir(os.path.dirname(project.ppath)) cwdIsPpath = True tmpProjectDir = "%s_tmp" % project.ppath shutil.rmtree(tmpProjectDir, True) os.rename(project.ppath, tmpProjectDir) os.makedirs(project.ppath) self.vcsCheckout(vcsDataDict, project.ppath) if cwdIsPpath: os.chdir(project.ppath) self.vcsCommit(project.ppath, vcsDataDict["message"], True) pfn = project.pfile if not os.path.isfile(pfn): pfn += "z" if not os.path.isfile(pfn): KQMessageBox.critical(None, self.trUtf8("New project"), self.trUtf8("""The project could not be checked out of the""" """ repository.
    """ """Restoring the original contents.""")) if os.getcwd() == project.ppath: os.chdir(os.path.dirname(project.ppath)) cwdIsPpath = True else: cwdIsPpath = False shutil.rmtree(project.ppath, True) os.rename(tmpProjectDir, project.ppath) project.pdata["VCS"] = ['None'] project.vcs = None project.setDirty(True) project.saveProject() project.closeProject() return shutil.rmtree(tmpProjectDir, True) project.closeProject(noSave = True) project.openProject(pfn) def vcsImport(self, vcsDataDict, projectDir, noDialog = False): """ Public method used to import the project into the Subversion repository. @param vcsDataDict dictionary of data required for the import @param projectDir project directory (string) @param noDialog flag indicating quiet operations @return flag indicating an execution without errors (boolean) and a flag indicating the version controll status (boolean) """ noDialog = False msg = QString(vcsDataDict["message"]) if msg.isEmpty(): msg = QString('***') vcsDir = self.svnNormalizeURL(vcsDataDict["url"]) if vcsDir.startswith('/'): vcsDir = 'file://%s' % vcsDir elif vcsDir[1] in ['|', ':']: vcsDir = 'file:///%s' % vcsDir project = vcsDir[vcsDir.rfind('/')+1:] # create the dir structure to be imported into the repository tmpDir = '%s_tmp' % projectDir try: os.makedirs(tmpDir) if self.otherData["standardLayout"]: os.mkdir(os.path.join(tmpDir, project)) os.mkdir(os.path.join(tmpDir, project, 'branches')) os.mkdir(os.path.join(tmpDir, project, 'tags')) shutil.copytree(projectDir, os.path.join(tmpDir, project, 'trunk')) else: shutil.copytree(projectDir, os.path.join(tmpDir, project)) except OSError, e: if os.path.isdir(tmpDir): shutil.rmtree(tmpDir, True) return False, False locker = QMutexLocker(self.vcsExecutionMutex) cwd = os.getcwd() os.chdir(os.path.join(tmpDir, project)) opts = self.options['global'] + self.options['update'] recurse = "--non-recursive" not in opts url = self.__svnURL(vcsDir) client = self.getClient() if not noDialog: dlg = \ SvnDialog(self.trUtf8('Importing project into Subversion repository'), "import%s --message %s ." % \ ((not recurse) and " --non-recursive" or "", unicode(msg)), client) QApplication.processEvents() try: rev = client.import_(".", url, unicode(msg), recurse, ignore = True) status = True except pysvn.ClientError, e: status = False rev = None if not noDialog: dlg.showError(e.args[0]) locker.unlock() if not noDialog: rev and dlg.showMessage(self.trUtf8("Imported revision %1.\n")\ .arg(rev.number)) dlg.finish() dlg.exec_() os.chdir(cwd) shutil.rmtree(tmpDir, True) return status, False def vcsCheckout(self, vcsDataDict, projectDir, noDialog = False): """ Public method used to check the project out of the Subversion repository. @param vcsDataDict dictionary of data required for the checkout @param projectDir project directory to create (string) @param noDialog flag indicating quiet operations @return flag indicating an execution without errors (boolean) """ noDialog = False try: tag = vcsDataDict["tag"] except KeyError: tag = None vcsDir = self.svnNormalizeURL(vcsDataDict["url"]) if vcsDir.startswith('/'): vcsDir = 'file://%s' % vcsDir elif vcsDir[1] in ['|', ':']: vcsDir = 'file:///%s' % vcsDir if self.otherData["standardLayout"]: if tag is None or tag == '': svnUrl = '%s/trunk' % vcsDir else: if not tag.startswith('tags') and not tag.startswith('branches'): type, ok = KQInputDialog.getItem(\ None, self.trUtf8("Subversion Checkout"), self.trUtf8("The tag must be a normal tag (tags) or" " a branch tag (branches)." " Please select from the list."), self.tagTypeList, 0, False) if not ok: return False tag = '%s/%s' % (unicode(type), tag) svnUrl = '%s/%s' % (vcsDir, tag) else: svnUrl = vcsDir opts = self.options['global'] + self.options['checkout'] recurse = "--non-recursive" not in opts url = self.__svnURL(svnUrl) client = self.getClient() if not noDialog: dlg = \ SvnDialog(self.trUtf8('Checking project out of Subversion repository'), "checkout%s %s %s" % \ ((not recurse) and " --non-recursive" or "", url, projectDir), client) QApplication.processEvents() locker = QMutexLocker(self.vcsExecutionMutex) try: rev = client.checkout(url, projectDir, recurse) status = True except pysvn.ClientError, e: status = False if not noDialog: dlg.showError(e.args[0]) locker.unlock() if not noDialog: dlg.finish() dlg.exec_() return status def vcsExport(self, vcsDataDict, projectDir): """ Public method used to export a directory from the Subversion repository. @param vcsDataDict dictionary of data required for the checkout @param projectDir project directory to create (string) @return flag indicating an execution without errors (boolean) """ try: tag = vcsDataDict["tag"] except KeyError: tag = None vcsDir = self.svnNormalizeURL(vcsDataDict["url"]) if vcsDir.startswith('/') or vcsDir[1] == '|': vcsDir = 'file://%s' % vcsDir if self.otherData["standardLayout"]: if tag is None or tag == '': svnUrl = '%s/trunk' % vcsDir else: if not tag.startswith('tags') and not tag.startswith('branches'): type, ok = KQInputDialog.getItem(\ None, self.trUtf8("Subversion Export"), self.trUtf8("The tag must be a normal tag (tags) or" " a branch tag (branches)." " Please select from the list."), self.tagTypeList, 0, False) if not ok: return False tag = '%s/%s' % (unicode(type), tag) svnUrl = '%s/%s' % (vcsDir, tag) else: svnUrl = vcsDir opts = self.options['global'] recurse = "--non-recursive" not in opts url = self.__svnURL(svnUrl) client = self.getClient() dlg = \ SvnDialog(self.trUtf8('Exporting project from Subversion repository'), "export --force%s %s %s" % \ ((not recurse) and " --non-recursive" or "", url, projectDir), client) QApplication.processEvents() locker = QMutexLocker(self.vcsExecutionMutex) try: rev = client.export(url, projectDir, force = True, recurse = recurse) status = True except pysvn.ClientError, e: status = False dlg.showError(e.args[0]) locker.unlock() dlg.finish() dlg.exec_() return status def vcsCommit(self, name, message, noDialog = False): """ Public method used to make the change of a file/directory permanent in the Subversion repository. @param name file/directory name to be committed (string or list of strings) @param message message for this operation (string) @param noDialog flag indicating quiet operations """ msg = QString(message) if not noDialog and msg.isEmpty(): # call CommitDialog and get message from there if self.__commitDialog is None: self.__commitDialog = SvnCommitDialog(self.svnGetChangelists(), self.__ui) self.connect(self.__commitDialog, SIGNAL("accepted()"), self.__vcsCommit_Step2) self.__commitDialog.show() self.__commitDialog.raise_() self.__commitDialog.activateWindow() self.__commitData["name"] = name self.__commitData["msg"] = msg self.__commitData["noDialog"] = noDialog if noDialog: self.__vcsCommit_Step2() def __vcsCommit_Step2(self): """ Private slot performing the second step of the commit action. """ name = self.__commitData["name"] msg = self.__commitData["msg"] noDialog = self.__commitData["noDialog"] if self.__commitDialog is not None: msg = self.__commitDialog.logMessage() if self.__commitDialog.hasChangelists(): changelists, keepChangelists = self.__commitDialog.changelistsData() else: changelists, keepChangelists = [], False self.disconnect(self.__commitDialog, SIGNAL("accepted()"), self.__vcsCommit_Step2) self.__commitDialog = None else: changelists, keepChangelists = [], False if msg.isEmpty(): msg = QString('***') if type(name) is types.ListType: dname, fnames = self.splitPathList(name) else: dname, fname = self.splitPath(name) fnames = [fname] if self.svnGetReposName(dname).startswith('http') or \ self.svnGetReposName(dname).startswith('svn'): noDialog = False locker = QMutexLocker(self.vcsExecutionMutex) cwd = os.getcwd() os.chdir(dname) opts = self.options['global'] + self.options['commit'] recurse = "--non-recursive" not in opts keeplocks = "--keep-locks" in opts client = self.getClient() if not noDialog: dlg = \ SvnDialog(self.trUtf8('Commiting changes to Subversion repository'), "commit%s%s%s%s --message %s %s" % \ ((not recurse) and " --non-recursive" or "", keeplocks and " --keep-locks" or "", keepChangelists and " --keep-changelists" or "", changelists and \ " --changelist ".join([""] + changelists) or "", unicode(msg), " ".join(fnames)), client) QApplication.processEvents() try: if changelists: rev = client.checkin(fnames, unicode(msg), recurse = recurse, keep_locks = keeplocks, keep_changelist = keepChangelists, changelists = changelists) else: rev = client.checkin(fnames, unicode(msg), recurse = recurse, keep_locks = keeplocks) except pysvn.ClientError, e: rev = None if not noDialog: dlg.showError(e.args[0]) locker.unlock() if not noDialog: rev and dlg.showMessage(self.trUtf8("Committed revision %1.")\ .arg(rev.number)) dlg.finish() dlg.exec_() os.chdir(cwd) self.emit(SIGNAL("committed()")) self.checkVCSStatus() def vcsUpdate(self, name, noDialog = False): """ Public method used to update a file/directory with the Subversion repository. @param name file/directory name to be updated (string or list of strings) @param noDialog flag indicating quiet operations (boolean) @return flag indicating, that the update contained an add or delete (boolean) """ if type(name) is types.ListType: dname, fnames = self.splitPathList(name) else: dname, fname = self.splitPath(name) fnames = [fname] locker = QMutexLocker(self.vcsExecutionMutex) cwd = os.getcwd() os.chdir(dname) opts = self.options['global'] + self.options['update'] recurse = "--non-recursive" not in opts client = self.getClient() if not noDialog: dlg = \ SvnDialog(self.trUtf8('Synchronizing with the Subversion repository'), "update%s %s" % ((not recurse) and " --non-recursive" or "", " ".join(fnames)), client) QApplication.processEvents() try: revlist = client.update(fnames, recurse) except pysvn.ClientError, e: dlg.showError(e.args[0]) locker.unlock() if not noDialog: dlg.finish() dlg.exec_() res = dlg.hasAddOrDelete() else: res = False os.chdir(cwd) self.checkVCSStatus() return res def vcsAdd(self, name, isDir = False, noDialog = False): """ Public method used to add a file/directory to the Subversion repository. @param name file/directory name to be added (string) @param isDir flag indicating name is a directory (boolean) @param noDialog flag indicating quiet operations (boolean) """ if type(name) is types.ListType: if isDir: dname, fname = os.path.split(unicode(name[0])) else: dname, fnames = self.splitPathList(name) else: if isDir: dname, fname = os.path.split(unicode(name)) else: dname, fname = self.splitPath(name) names = [] tree = [] wdir = dname if self.__wcng: repodir = dname while not os.path.isdir(os.path.join(repodir, self.adminDir)): repodir = os.path.dirname(repodir) if os.path.splitdrive(repodir)[1] == os.sep: return # oops, project is not version controlled while os.path.normcase(dname) != os.path.normcase(repodir) and \ (os.path.normcase(dname) not in self.statusCache or \ self.statusCache[os.path.normcase(dname)] == self.canBeAdded): # add directories recursively, if they aren't in the repository already tree.insert(-1, dname) dname = os.path.dirname(dname) wdir = dname else: while not os.path.exists(os.path.join(dname, self.adminDir)): # add directories recursively, if they aren't in the repository already tree.insert(-1, dname) dname = os.path.dirname(dname) wdir = dname names.extend(tree) if type(name) is types.ListType: tree2 = [] for n in name: d = os.path.dirname(n) if self.__wcng: repodir = d while not os.path.isdir(os.path.join(repodir, self.adminDir)): repodir = os.path.dirname(repodir) if os.path.splitdrive(repodir)[1] == os.sep: return # oops, project is not version controlled while os.path.normcase(d) != os.path.normcase(repodir) and \ (d not in tree2 + tree) and \ (os.path.normcase(d) not in self.statusCache or \ self.statusCache[os.path.normcase(d)] == self.canBeAdded): tree2.append(d) d = os.path.dirname(d) else: while not os.path.exists(os.path.join(d, self.adminDir)): if d in tree2 + tree: break tree2.append(d) d = os.path.dirname(d) tree2.reverse() names.extend(tree2) names.extend(name) else: names.append(name) locker = QMutexLocker(self.vcsExecutionMutex) cwd = os.getcwd() os.chdir(wdir) opts = self.options['global'] + self.options['add'] recurse = False force = "--force" in opts or noDialog noignore = "--no-ignore" in opts client = self.getClient() if not noDialog: dlg = \ SvnDialog(\ self.trUtf8('Adding files/directories to the Subversion repository'), "add --non-recursive%s%s %s" % \ (force and " --force" or "", noignore and " --no-ignore" or "", " ".join(names)), client) QApplication.processEvents() try: client.add(names, recurse = recurse, force = force, ignore = not noignore) except pysvn.ClientError, e: if not noDialog: dlg.showError(e.args[0]) locker.unlock() if not noDialog: dlg.finish() dlg.exec_() os.chdir(cwd) def vcsAddBinary(self, name, isDir = False): """ Public method used to add a file/directory in binary mode to the Subversion repository. @param name file/directory name to be added (string) @param isDir flag indicating name is a directory (boolean) """ self.vcsAdd(name, isDir) def vcsAddTree(self, path): """ Public method to add a directory tree rooted at path to the Subversion repository. @param path root directory of the tree to be added (string or list of strings)) """ args = QStringList() args.append('add') self.addArguments(args, self.options['global']) self.addArguments(args, self.options['add']) tree = [] if type(path) is types.ListType: dname, fnames = self.splitPathList(path) for n in path: d = os.path.dirname(n) if self.__wcng: repodir = d while not os.path.isdir(os.path.join(repodir, self.adminDir)): repodir = os.path.dirname(repodir) if os.path.splitdrive(repodir)[1] == os.sep: return # oops, project is not version controlled while os.path.normcase(d) != os.path.normcase(repodir) and \ (d not in tree) and \ (os.path.normcase(d) not in self.statusCache or \ self.statusCache[os.path.normcase(d)] == self.canBeAdded): tree.append(d) d = os.path.dirname(d) else: while not os.path.exists(os.path.join(d, self.adminDir)): # add directories recursively, # if they aren't in the repository already if d in tree: break tree.append(d) d = os.path.dirname(d) tree.reverse() else: dname, fname = os.path.split(unicode(path)) if self.__wcng: repodir = dname while not os.path.isdir(os.path.join(repodir, self.adminDir)): repodir = os.path.dirname(repodir) if os.path.splitdrive(repodir)[1] == os.sep: return # oops, project is not version controlled while os.path.normcase(dname) != os.path.normcase(repodir) and \ (os.path.normcase(dname) not in self.statusCache or \ self.statusCache[os.path.normcase(dname)] == self.canBeAdded): # add directories recursively, if they aren't in the repository already tree.insert(-1, dname) dname = os.path.dirname(dname) else: while not os.path.exists(os.path.join(dname, self.adminDir)): # add directories recursively, # if they aren't in the repository already tree.insert(-1, dname) dname = os.path.dirname(dname) if tree: self.vcsAdd(tree, True) names = [] if type(path) is types.ListType: names.extend(path) else: names.append(path) locker = QMutexLocker(self.vcsExecutionMutex) cwd = os.getcwd() os.chdir(dname) opts = self.options['global'] + self.options['add'] recurse = True force = "--force" in opts ignore = "--ignore" in opts client = self.getClient() dlg = \ SvnDialog(\ self.trUtf8('Adding directory trees to the Subversion repository'), "add%s%s %s" % \ (force and " --force" or "", ignore and " --ignore" or "", " ".join(names)), client) QApplication.processEvents() try: client.add(names, recurse = recurse, force = force, ignore = ignore) except pysvn.ClientError, e: dlg.showError(e.args[0]) locker.unlock() dlg.finish() dlg.exec_() os.chdir(cwd) def vcsRemove(self, name, project = False, noDialog = False): """ Public method used to remove a file/directory from the Subversion repository. The default operation is to remove the local copy as well. @param name file/directory name to be removed (string or list of strings)) @param project flag indicating deletion of a project tree (boolean) (not needed) @param noDialog flag indicating quiet operations @return flag indicating successfull operation (boolean) """ if type(name) is not types.ListType: name = [name] opts = self.options['global'] + self.options['remove'] force = "--force" in opts or noDialog client = self.getClient() if not noDialog: dlg = \ SvnDialog(\ self.trUtf8('Removing files/directories from the Subversion repository'), "remove%s %s" % \ (force and " --force" or "", " ".join(name)), client) QApplication.processEvents() locker = QMutexLocker(self.vcsExecutionMutex) try: client.remove(name, force = force) res = True except pysvn.ClientError, e: res = False if not noDialog: dlg.showError(e.args[0]) locker.unlock() if not noDialog: dlg.finish() dlg.exec_() return res def vcsMove(self, name, project, target = None, noDialog = False): """ Public method used to move a file/directory. @param name file/directory name to be moved (string) @param project reference to the project object @param target new name of the file/directory (string) @param noDialog flag indicating quiet operations @return flag indicating successfull operation (boolean) """ rx_prot = QRegExp('(file:|svn:|svn+ssh:|http:|https:).+') opts = self.options['global'] res = False if noDialog: if target is None: return False force = True accepted = True else: dlg = SvnCopyDialog(name, None, True, "--force" in opts) accepted = (dlg.exec_() == QDialog.Accepted) if accepted: target, force = dlg.getData() if not rx_prot.exactMatch(target): isDir = os.path.isdir(name) else: isDir = False if accepted: client = self.getClient() if rx_prot.exactMatch(target): target = self.__svnURL(target) log = "Moving %s to %s" % (unicode(name), unicode(target)) else: log = "" target = unicode(target) if not noDialog: dlg = \ SvnDialog(\ self.trUtf8('Moving %1').arg(name), "move%s%s %s %s" % \ (force and " --force" or "", log and (" --message %s" % log) or "", name, target), client, log = log) QApplication.processEvents() locker = QMutexLocker(self.vcsExecutionMutex) try: client.move(name, target, force = force) res = True except pysvn.ClientError, e: res = False if not noDialog: dlg.showError(e.args[0]) locker.unlock() if not noDialog: dlg.finish() dlg.exec_() if res and not rx_prot.exactMatch(target): if target.startswith(project.getProjectPath()): if isDir: project.moveDirectory(name, target) else: project.renameFileInPdata(name, target) else: if isDir: project.removeDirectory(name) else: project.removeFile(name) return res def vcsLog(self, name): """ Public method used to view the log of a file/directory from the Subversion repository. @param name file/directory name to show the log of (string) """ self.log = SvnLogDialog(self) self.log.show() QApplication.processEvents() self.log.start(name) def vcsDiff(self, name): """ Public method used to view the difference of a file/directory to the Subversion repository. If name is a directory and is the project directory, all project files are saved first. If name is a file (or list of files), which is/are being edited and has unsaved modification, they can be saved or the operation may be aborted. @param name file/directory name to be diffed (string) """ if type(name) is types.ListType: names = name[:] else: names = [name] for nam in names: if os.path.isfile(nam): editor = e4App().getObject("ViewManager").getOpenEditor(nam) if editor and not editor.checkDirty() : return else: project = e4App().getObject("Project") if nam == project.ppath and not project.saveAllScripts(): return self.diff = SvnDiffDialog(self) self.diff.show() QApplication.processEvents() self.diff.start(name) def vcsStatus(self, name): """ Public method used to view the status of files/directories in the Subversion repository. @param name file/directory name(s) to show the status of (string or list of strings) """ self.status = SvnStatusDialog(self) self.status.show() QApplication.processEvents() self.status.start(name) def vcsTag(self, name): """ Public method used to set the tag of a file/directory in the Subversion repository. @param name file/directory name to be tagged (string) """ dname, fname = self.splitPath(name) reposURL = self.svnGetReposName(dname) if reposURL is None: KQMessageBox.critical(None, self.trUtf8("Subversion Error"), self.trUtf8("""The URL of the project repository could not be""" """ retrieved from the working copy. The tag operation will""" """ be aborted""")) return if self.otherData["standardLayout"]: url = None else: url = self.svnNormalizeURL(reposURL) dlg = SvnTagDialog(self.allTagsBranchesList, url, self.otherData["standardLayout"]) if dlg.exec_() == QDialog.Accepted: tag, tagOp = dlg.getParameters() self.allTagsBranchesList.removeAll(tag) self.allTagsBranchesList.prepend(tag) else: return if self.otherData["standardLayout"]: rx_base = QRegExp('(.+)/(trunk|tags|branches).*') if not rx_base.exactMatch(reposURL): KQMessageBox.critical(None, self.trUtf8("Subversion Error"), self.trUtf8("""The URL of the project repository has an""" """ invalid format. The tag operation will""" """ be aborted""")) return reposRoot = unicode(rx_base.cap(1)) if tagOp in [1, 4]: url = '%s/tags/%s' % (reposRoot, urllib.quote(unicode(tag))) elif tagOp in [2, 8]: url = '%s/branches/%s' % (reposRoot, urllib.quote(unicode(tag))) else: url = self.__svnURL(unicode(tag)) self.tagName = tag client = self.getClient() rev = None if tagOp in [1, 2]: log = 'Created tag <%s>' % unicode(self.tagName) dlg = \ SvnDialog(\ self.trUtf8('Tagging %1 in the Subversion repository').arg(name), "copy --message %s %s %s" % (log, reposURL, url), client, log = log) QApplication.processEvents() locker = QMutexLocker(self.vcsExecutionMutex) try: rev = client.copy(reposURL, url) except pysvn.ClientError, e: dlg.showError(e.args[0]) locker.unlock() else: log = 'Deleted tag <%s>' % unicode(self.tagName) dlg = \ SvnDialog(\ self.trUtf8('Tagging %1 in the Subversion repository').arg(name), "remove --message %s %s" % (log, url), client, log = log) QApplication.processEvents() locker = QMutexLocker(self.vcsExecutionMutex) try: rev = client.remove(url) except pysvn.ClientError, e: dlg.showError(e.args[0]) locker.unlock() rev and dlg.showMessage(\ self.trUtf8("Revision %1.\n").arg(rev.number)) dlg.finish() dlg.exec_() def vcsRevert(self, name): """ Public method used to revert changes made to a file/directory. @param name file/directory name to be reverted (string) """ recurse = False if type(name) is not types.ListType: name = [name] if len(name) == 1 and os.path.isdir(name[0]): recurse = True client = self.getClient() dlg = \ SvnDialog(self.trUtf8('Reverting changes'), "revert %s %s" % ((not recurse) and " --non-recursive" or "", " ".join(name)), client) QApplication.processEvents() locker = QMutexLocker(self.vcsExecutionMutex) try: client.revert(name, recurse) except pysvn.ClientError, e: dlg.showError(e.args[0]) locker.unlock() dlg.finish() dlg.exec_() self.checkVCSStatus() def vcsSwitch(self, name): """ Public method used to switch a directory to a different tag/branch. @param name directory name to be switched (string) """ dname, fname = self.splitPath(name) reposURL = self.svnGetReposName(dname) if reposURL is None: KQMessageBox.critical(None, self.trUtf8("Subversion Error"), self.trUtf8("""The URL of the project repository could not be""" """ retrieved from the working copy. The switch operation will""" """ be aborted""")) return if self.otherData["standardLayout"]: url = None else: url = self.svnNormalizeURL(reposURL) dlg = SvnSwitchDialog(self.allTagsBranchesList, url, self.otherData["standardLayout"]) if dlg.exec_() == QDialog.Accepted: tag, tagType = dlg.getParameters() self.allTagsBranchesList.removeAll(tag) self.allTagsBranchesList.prepend(tag) else: return if self.otherData["standardLayout"]: rx_base = QRegExp('(.+)/(trunk|tags|branches).*') if not rx_base.exactMatch(reposURL): KQMessageBox.critical(None, self.trUtf8("Subversion Error"), self.trUtf8("""The URL of the project repository has an""" """ invalid format. The switch operation will""" """ be aborted""")) return reposRoot = unicode(rx_base.cap(1)) tn = tag if tagType == 1: url = '%s/tags/%s' % (reposRoot, urllib.quote(unicode(tag))) elif tagType == 2: url = '%s/branches/%s' % (reposRoot, urllib.quote(unicode(tag))) elif tagType == 4: url = '%s/trunk' % (reposRoot) tn = QString('HEAD') else: url = self.__svnURL(unicode(tag)) tn = url client = self.getClient() dlg = \ SvnDialog(self.trUtf8('Switching to %1').arg(tn), "switch %s %s" % (url, name), client) QApplication.processEvents() locker = QMutexLocker(self.vcsExecutionMutex) try: rev = client.switch(name, url) dlg.showMessage(self.trUtf8("Revision %1.\n").arg(rev.number)) except pysvn.ClientError, e: dlg.showError(e.args[0]) locker.unlock() dlg.finish() dlg.exec_() def vcsMerge(self, name): """ Public method used to merge a URL/revision into the local project. @param name file/directory name to be merged (string) """ dname, fname = self.splitPath(name) opts = self.options['global'] dlg = SvnMergeDialog(self.mergeList[0], self.mergeList[1], self.mergeList[2], "--force" in opts) if dlg.exec_() == QDialog.Accepted: urlrev1, urlrev2, target, force = dlg.getParameters() else: return # remember URL or revision self.mergeList[0].removeAll(urlrev1) self.mergeList[0].prepend(urlrev1) self.mergeList[1].removeAll(urlrev2) self.mergeList[1].prepend(urlrev2) rx_rev = QRegExp('\\d+|HEAD|head') locker = QMutexLocker(self.vcsExecutionMutex) cwd = os.getcwd() os.chdir(dname) recurse = "--non-recursive" not in opts if rx_rev.exactMatch(urlrev1): if unicode(urlrev1) in ["HEAD", "head"]: revision1 = pysvn.Revision(pysvn.opt_revision_kind.head) rev1 = "HEAD" else: revision1 = \ pysvn.Revision(pysvn.opt_revision_kind.number, urlrev1.toLong()[0]) rev1 = unicode(urlrev1) if unicode(urlrev2) in ["HEAD", "head"]: revision2 = pysvn.Revision(pysvn.opt_revision_kind.head) rev2 = "HEAD" else: revision2 = \ pysvn.Revision(pysvn.opt_revision_kind.number, urlrev2.toLong()[0]) rev2 = unicode(urlrev2) if target.isEmpty(): url1 = unicode(name) url2 = unicode(name) else: url1 = unicode(target) url2 = unicode(target) # remember target self.mergeList[2].removeAll(target) self.mergeList[2].prepend(target) else: urlrev1 = unicode(urlrev1) if "@" in urlrev1: url1, rev = urlrev1.split("@") if rev in ["HEAD", "head"]: revision1 = pysvn.Revision(pysvn.opt_revision_kind.head) rev1 = "HEAD" else: revision1 = \ pysvn.Revision(pysvn.opt_revision_kind.number, int(rev)) rev1 = rev else: url1 = urlrev1 revision1 = pysvn.Revision(pysvn.opt_revision_kind.unspecified) rev1 = "" urlrev2 = unicode(urlrev2) if "@" in urlrev2: url2, rev = urlrev2.split("@") if rev in ["HEAD", "head"]: revision2 = pysvn.Revision(pysvn.opt_revision_kind.head) rev2 = "HEAD" else: revision2 = \ pysvn.Revision(pysvn.opt_revision_kind.number, int(rev)) rev2 = rev else: url2 = urlrev2 revision2 = pysvn.Revision(pysvn.opt_revision_kind.unspecified) rev2 = "" client = self.getClient() dlg = \ SvnDialog(\ self.trUtf8('Merging %1').arg(name), "merge%s%s %s %s %s" % \ ((not recurse) and " --non-recursive" or "", force and " --force" or "", "%s%s" % (url1, rev1 and ("@"+rev1) or ""), "%s%s" % (url2, rev2 and ("@"+rev2) or ""), fname), client) QApplication.processEvents() try: client.merge(url1, revision1, url2, revision2, fname, recurse = recurse, force = force) except pysvn.ClientError, e: dlg.showError(e.args[0]) locker.unlock() dlg.finish() dlg.exec_() os.chdir(cwd) def vcsRegisteredState(self, name): """ Public method used to get the registered state of a file in the vcs. @param name filename to check (string or QString) @return a combination of canBeCommited and canBeAdded """ if self.__wcng: return self.__vcsRegisteredState_wcng(name) else: return self.__vcsRegisteredState_wc(name) def __vcsRegisteredState_wcng(self, name): """ Private method used to get the registered state of a file in the vcs. This is the variant for subversion installations using the new working copy meta-data format. @param name filename to check (string or QString) @return a combination of canBeCommited and canBeAdded """ name = unicode(name) if name.endswith(os.sep): name = name[:-1] name = os.path.normcase(name) dname, fname = self.splitPath(name) if fname == '.' and os.path.isdir(os.path.join(dname, self.adminDir)): return self.canBeCommitted if name in self.statusCache: return self.statusCache[name] name = os.path.normcase(unicode(name)) states = { name : 0 } states = self.vcsAllRegisteredStates(states, dname, False) if states[name] == self.canBeCommitted: return self.canBeCommitted else: return self.canBeAdded def __vcsRegisteredState_wc(self, name): """ Private method used to get the registered state of a file in the vcs. This is the variant for subversion installations using the old working copy meta-data format. @param name filename to check (string or QString) @return a combination of canBeCommited and canBeAdded """ dname, fname = self.splitPath(name) if fname == '.': if os.path.isdir(os.path.join(dname, self.adminDir)): return self.canBeCommitted else: return self.canBeAdded name = os.path.normcase(unicode(name)) states = { name : 0 } states = self.vcsAllRegisteredStates(states, dname, False) if states[name] == self.canBeCommitted: return self.canBeCommitted else: return self.canBeAdded def vcsAllRegisteredStates(self, names, dname, shortcut = True): """ Public method used to get the registered states of a number of files in the vcs. Note: If a shortcut is to be taken, the code will only check, if the named directory has been scanned already. If so, it is assumed, that the states for all files has been populated by the previous run. @param names dictionary with all filenames to be checked as keys @param dname directory to check in (string) @param shortcut flag indicating a shortcut should be taken (boolean) @return the received dictionary completed with a combination of canBeCommited and canBeAdded or None in order to signal an error """ if self.__wcng: return self.__vcsAllRegisteredStates_wcng(names, dname, shortcut) else: return self.__vcsAllRegisteredStates_wc(names, dname, shortcut) def __vcsAllRegisteredStates_wcng(self, names, dname, shortcut = True): """ Private method used to get the registered states of a number of files in the vcs. This is the variant for subversion installations using the new working copy meta-data format. Note: If a shortcut is to be taken, the code will only check, if the named directory has been scanned already. If so, it is assumed, that the states for all files has been populated by the previous run. @param names dictionary with all filenames to be checked as keys @param dname directory to check in (string) @param shortcut flag indicating a shortcut should be taken (boolean) @return the received dictionary completed with a combination of canBeCommited and canBeAdded or None in order to signal an error """ dname = unicode(dname) if dname.endswith(os.sep): dname = dname[:-1] dname = os.path.normcase(dname) found = False for name in self.statusCache.keys(): if names.has_key(name): found = True names[name] = self.statusCache[name] if not found: # find the root of the repo repodir = dname while not os.path.isdir(os.path.join(repodir, self.adminDir)): repodir = os.path.dirname(repodir) if os.path.splitdrive(repodir)[1] == os.sep: return names from SvnDialogMixin import SvnDialogMixin mixin = SvnDialogMixin() client = self.getClient() client.callback_get_login = \ mixin._clientLoginCallback client.callback_ssl_server_trust_prompt = \ mixin._clientSslServerTrustPromptCallback try: locker = QMutexLocker(self.vcsExecutionMutex) allFiles = client.status(dname, recurse = True, get_all = True, ignore = True, update = False) locker.unlock() dirs = [x for x in names.keys() if os.path.isdir(x)] for file in allFiles: name = os.path.normcase(file.path) if self.__isVersioned(file): if names.has_key(name): names[name] = self.canBeCommitted dn = name while os.path.splitdrive(dn)[1] != os.sep and \ dn != repodir: dn = os.path.dirname(dn) if dn in self.statusCache and \ self.statusCache[dn] == self.canBeCommitted: break self.statusCache[dn] = self.canBeCommitted self.statusCache[name] = self.canBeCommitted if dirs: for d in dirs: if name.startswith(d): names[d] = self.canBeCommitted self.statusCache[d] = self.canBeCommitted dirs.remove(d) break else: self.statusCache[name] = self.canBeAdded except pysvn.ClientError, e: locker.unlock() # ignore pysvn errors return names def __vcsAllRegisteredStates_wc(self, names, dname, shortcut = True): """ Private method used to get the registered states of a number of files in the vcs. This is the variant for subversion installations using the old working copy meta-data format. Note: If a shortcut is to be taken, the code will only check, if the named directory has been scanned already. If so, it is assumed, that the states for all files has been populated by the previous run. @param names dictionary with all filenames to be checked as keys @param dname directory to check in (string) @param shortcut flag indicating a shortcut should be taken (boolean) @return the received dictionary completed with a combination of canBeCommited and canBeAdded or None in order to signal an error """ dname = unicode(dname) if not os.path.isdir(os.path.join(dname, self.adminDir)): # not under version control -> do nothing return names found = False for name in self.statusCache.keys(): if os.path.dirname(name) == dname: if shortcut: found = True break if names.has_key(name): found = True names[name] = self.statusCache[name] if not found: from SvnDialogMixin import SvnDialogMixin mixin = SvnDialogMixin() client = self.getClient() client.callback_get_login = \ mixin._clientLoginCallback client.callback_ssl_server_trust_prompt = \ mixin._clientSslServerTrustPromptCallback try: locker = QMutexLocker(self.vcsExecutionMutex) allFiles = client.status(dname, recurse = True, get_all = True, ignore = True, update = False) locker.unlock() for file in allFiles: name = os.path.normcase(file.path) if self.__isVersioned(file): if names.has_key(name): names[name] = self.canBeCommitted self.statusCache[name] = self.canBeCommitted else: self.statusCache[name] = self.canBeAdded except pysvn.ClientError, e: locker.unlock() # ignore pysvn errors return names def __isVersioned(self, status): """ Private method to check, if the given status indicates a versioned state. @param status status object to check (pysvn.PysvnStatus) @return flag indicating a versioned state (boolean) """ return status["text_status"] in [ pysvn.wc_status_kind.normal, pysvn.wc_status_kind.added, pysvn.wc_status_kind.missing, pysvn.wc_status_kind.deleted, pysvn.wc_status_kind.replaced, pysvn.wc_status_kind.modified, pysvn.wc_status_kind.merged, pysvn.wc_status_kind.conflicted, ] def clearStatusCache(self): """ Public method to clear the status cache. """ self.statusCache = {} def vcsInitConfig(self, project): """ Public method to initialize the VCS configuration. This method ensures, that eric specific files and directories are ignored. @param project reference to the project (Project) """ configPath = getConfigPath() if os.path.exists(configPath): amendConfig() else: createDefaultConfig() def vcsName(self): """ Public method returning the name of the vcs. @return always 'Subversion' (string) """ return "Subversion" def vcsCleanup(self, name): """ Public method used to cleanup the working copy. @param name directory name to be cleaned up (string) """ client = self.getClient() dlg = \ SvnDialog(self.trUtf8('Cleaning up %1').arg(name), "cleanup %s" % name, client) QApplication.processEvents() locker = QMutexLocker(self.vcsExecutionMutex) try: rev = client.cleanup(name) except pysvn.ClientError, e: dlg.showError(e.args[0]) locker.unlock() dlg.finish() dlg.exec_() def vcsCommandLine(self, name): """ Public method used to execute arbitrary subversion commands. @param name directory name of the working directory (string) """ dlg = SvnCommandDialog(self.commandHistory, self.wdHistory, name) if dlg.exec_() == QDialog.Accepted: command, wd = dlg.getData() commandList = Utilities.parseOptionString(command) # This moves any previous occurrence of these arguments to the head # of the list. self.commandHistory.removeAll(command) self.commandHistory.prepend(command) self.wdHistory.removeAll(wd) self.wdHistory.prepend(wd) args = QStringList() self.addArguments(args, commandList) dia = SvnProcessDialog(self.trUtf8('Subversion command')) res = dia.startProcess(args, wd) if res: dia.exec_() def vcsOptionsDialog(self, project, archive, editable = False, parent = None): """ Public method to get a dialog to enter repository info. @param project reference to the project object @param archive name of the project in the repository (string) @param editable flag indicating that the project name is editable (boolean) @param parent parent widget (QWidget) """ return SvnOptionsDialog(self, project, parent) def vcsNewProjectOptionsDialog(self, parent = None): """ Public method to get a dialog to enter repository info for getting a new project. @param parent parent widget (QWidget) """ return SvnNewProjectOptionsDialog(self, parent) def vcsRepositoryInfos(self, ppath): """ Public method to retrieve information about the repository. @param ppath local path to get the repository infos (string) @return string with ready formated info for display (QString) """ try: entry = self.getClient().info(ppath) except pysvn.ClientError, e: return QString(e.args[0]) if hasattr(pysvn, 'svn_api_version'): apiVersion = "%s %s" % \ (".".join([str(v) for v in pysvn.svn_api_version[:3]]), pysvn.svn_api_version[3]) else: apiVersion = QString(QApplication.translate('subversion', "unknown")) return QString(QApplication.translate('subversion', """

    Repository information

    """ """""" """""" """""" """""" """""" """""" """""" """""" """""" """""" """
    PySvn V.%1
    Subversion V.%2
    Subversion API V.%3
    URL%4
    Current revision%5
    Committed revision%6
    Committed date%7
    Comitted time%8
    Last author%9
    """ ))\ .arg(".".join([str(v) for v in pysvn.version]))\ .arg(".".join([str(v) for v in pysvn.svn_version[:3]]))\ .arg(apiVersion)\ .arg(entry.url)\ .arg(entry.revision.number)\ .arg(entry.commit_revision.number)\ .arg(time.strftime("%Y-%m-%d", time.localtime(entry.commit_time)))\ .arg(time.strftime("%H:%M:%S %Z", time.localtime(entry.commit_time)))\ .arg(entry.commit_author) ############################################################################ ## Public Subversion specific methods are below. ############################################################################ def svnGetReposName(self, path): """ Public method used to retrieve the URL of the subversion repository path. @param path local path to get the svn repository path for (string) @return string with the repository path URL """ client = pysvn.Client() locker = QMutexLocker(self.vcsExecutionMutex) try: entry = client.info(path) url = entry.url except pysvn.ClientError: url = "" locker.unlock() return url def svnResolve(self, name): """ Public method used to resolve conflicts of a file/directory. @param name file/directory name to be resolved (string) """ if type(name) is types.ListType: dname, fnames = self.splitPathList(name) else: dname, fname = self.splitPath(name) fnames = [fname] locker = QMutexLocker(self.vcsExecutionMutex) cwd = os.getcwd() os.chdir(dname) opts = self.options['global'] recurse = "--non-recursive" not in opts client = self.getClient() dlg = \ SvnDialog(self.trUtf8('Resolving conficts'), "resolved%s %s" % \ ((not recurse) and " --non-recursive" or "", " ".join(fnames)), client) QApplication.processEvents() try: for name in fnames: rev = client.resolved(name, recurse = recurse) except pysvn.ClientError, e: dlg.showError(e.args[0]) locker.unlock() dlg.finish() dlg.exec_() os.chdir(cwd) self.checkVCSStatus() def svnCopy(self, name, project): """ Public method used to copy a file/directory. @param name file/directory name to be copied (string) @param project reference to the project object @return flag indicating successfull operation (boolean) """ rx_prot = QRegExp('(file:|svn:|svn+ssh:|http:|https:).+') dlg = SvnCopyDialog(name) res = False if dlg.exec_() == QDialog.Accepted: target, force = dlg.getData() client = self.getClient() if rx_prot.exactMatch(target): target = self.__svnURL(target) log = "Copying %s to %s" % (unicode(name), unicode(target)) else: log = "" target = unicode(target) dlg = \ SvnDialog(\ self.trUtf8('Copying %1').arg(name), "copy%s %s %s" % \ (log and (" --message %s" % log) or "", name, target), client, log = log) QApplication.processEvents() locker = QMutexLocker(self.vcsExecutionMutex) try: client.copy(name, target) res = True except pysvn.ClientError, e: res = False dlg.showError(e.args[0]) locker.unlock() dlg.finish() dlg.exec_() if res and \ not rx_prot.exactMatch(target) and \ target.startswith(project.getProjectPath()): if os.path.isdir(name): project.copyDirectory(name, target) else: project.appendFile(target) return res def svnListProps(self, name, recursive = False): """ Public method used to list the properties of a file/directory. @param name file/directory name (string or list of strings) @param recursive flag indicating a recursive list is requested """ self.propList = SvnPropListDialog(self) self.propList.show() QApplication.processEvents() self.propList.start(name, recursive) def svnSetProp(self, name, recursive = False): """ Public method used to add a property to a file/directory. @param name file/directory name (string or list of strings) @param recursive flag indicating a recursive set is requested """ dlg = SvnPropSetDialog(recursive) if dlg.exec_() == QDialog.Accepted: propName, propValue, recurse = dlg.getData() if not propName: KQMessageBox.critical(None, self.trUtf8("Subversion Set Property"), self.trUtf8("""You have to supply a property name. Aborting.""")) return if type(name) is types.ListType: dname, fnames = self.splitPathList(name) else: dname, fname = self.splitPath(name) fnames = [fname] locker = QMutexLocker(self.vcsExecutionMutex) cwd = os.getcwd() os.chdir(dname) opts = self.options['global'] skipchecks = "--skip-checks" in opts client = self.getClient() dlg = \ SvnDialog(\ self.trUtf8('Subversion Set Property'), "propset%s%s %s %s %s" % \ (recurse and " --recurse" or "", skipchecks and " --skip-checks" or "", propName, propValue, " ".join(fnames)), client) QApplication.processEvents() try: for name in fnames: client.propset(propName, propValue, name, recurse = recurse, skip_checks = skipchecks) except pysvn.ClientError, e: dlg.showError(e.args[0]) locker.unlock() dlg.showMessage(self.trUtf8("Property set.")) dlg.finish() dlg.exec_() os.chdir(cwd) def svnDelProp(self, name, recursive = False): """ Public method used to delete a property of a file/directory. @param name file/directory name (string or list of strings) @param recursive flag indicating a recursive list is requested """ dlg = SvnPropDelDialog(recursive) if dlg.exec_() == QDialog.Accepted: propName, recurse = dlg.getData() if not propName: KQMessageBox.critical(None, self.trUtf8("Subversion Delete Property"), self.trUtf8("""You have to supply a property name. Aborting.""")) return if type(name) is types.ListType: dname, fnames = self.splitPathList(name) else: dname, fname = self.splitPath(name) fnames = [fname] locker = QMutexLocker(self.vcsExecutionMutex) cwd = os.getcwd() os.chdir(dname) opts = self.options['global'] skipchecks = "--skip-checks" in opts client = self.getClient() dlg = \ SvnDialog(\ self.trUtf8('Subversion Delete Property'), "propdel%s%s %s %s" % \ (recurse and " --recurse" or "", skipchecks and " --skip-checks" or "", propName, " ".join(fnames)), client) QApplication.processEvents() try: for name in fnames: client.propdel(propName, name, recurse = recurse, skip_checks = skipchecks) except pysvn.ClientError, e: dlg.showError(e.args[0]) locker.unlock() dlg.showMessage(self.trUtf8("Property deleted.")) dlg.finish() dlg.exec_() os.chdir(cwd) def svnListTagBranch(self, path, tags = True): """ Public method used to list the available tags or branches. @param path directory name of the project (string) @param tags flag indicating listing of branches or tags (False = branches, True = tags) """ self.tagbranchList = SvnTagBranchListDialog(self) self.tagbranchList.show() QApplication.processEvents() res = self.tagbranchList.start(path, tags) if res: if tags: self.tagsList = self.tagbranchList.getTagList() if not self.showedTags: self.allTagsBranchesList = self.allTagsBranchesList + self.tagsList self.showedTags = True elif not tags: self.branchesList = self.tagbranchList.getTagList() if not self.showedBranches: self.allTagsBranchesList = self.allTagsBranchesList + self.branchesList self.showedBranches = True def svnBlame(self, name): """ Public method to show the output of the svn blame command. @param name file name to show the blame for (string) """ self.blame = SvnBlameDialog(self) self.blame.show() QApplication.processEvents() self.blame.start(name) def svnExtendedDiff(self, name): """ Public method used to view the difference of a file/directory to the Subversion repository. If name is a directory and is the project directory, all project files are saved first. If name is a file (or list of files), which is/are being edited and has unsaved modification, they can be saved or the operation may be aborted. This method gives the chance to enter the revisions to be compared. @param name file/directory name to be diffed (string) """ if type(name) is types.ListType: names = name[:] else: names = [name] for nam in names: if os.path.isfile(nam): editor = e4App().getObject("ViewManager").getOpenEditor(nam) if editor and not editor.checkDirty() : return else: project = e4App().getObject("Project") if nam == project.ppath and not project.saveAllScripts(): return dlg = SvnRevisionSelectionDialog() if dlg.exec_() == QDialog.Accepted: revisions = dlg.getRevisions() self.diff = SvnDiffDialog(self) self.diff.show() QApplication.processEvents() self.diff.start(name, revisions) def svnUrlDiff(self, name): """ Public method used to view the difference of a file/directory of two repository URLs. If name is a directory and is the project directory, all project files are saved first. If name is a file (or list of files), which is/are being edited and has unsaved modification, they can be saved or the operation may be aborted. This method gives the chance to enter the revisions to be compared. @param name file/directory name to be diffed (string) """ if type(name) is types.ListType: names = name[:] else: names = [name] for nam in names: if os.path.isfile(nam): editor = e4App().getObject("ViewManager").getOpenEditor(nam) if editor and not editor.checkDirty() : return else: project = e4App().getObject("Project") if nam == project.ppath and not project.saveAllScripts(): return dname = self.splitPath(names[0])[0] dlg = SvnUrlSelectionDialog(self, self.tagsList, self.branchesList, dname) if dlg.exec_() == QDialog.Accepted: urls, summary = dlg.getURLs() self.diff = SvnDiffDialog(self) self.diff.show() QApplication.processEvents() self.diff.start(name, urls = urls, summary = summary) def svnLogLimited(self, name): """ Public method used to view the (limited) log of a file/directory from the Subversion repository. @param name file/directory name to show the log of (string) """ noEntries, ok = KQInputDialog.getInt(\ None, self.trUtf8("Subversion Log"), self.trUtf8("Select number of entries to show."), self.getPlugin().getPreferences("LogLimit"), 1, 999999, 1) if ok: self.log = SvnLogDialog(self) self.log.show() QApplication.processEvents() self.log.start(name, noEntries) def svnLogBrowser(self, path): """ Public method used to browse the log of a file/directory from the Subversion repository. @param path file/directory name to show the log of (string) """ self.logBrowser = SvnLogBrowserDialog(self) self.logBrowser.show() QApplication.processEvents() self.logBrowser.start(path) def svnLock(self, name, stealIt=False, parent=None): """ Public method used to lock a file in the Subversion repository. @param name file/directory name to be locked (string or list of strings) @param stealIt flag indicating a forced operation (boolean) @param parent reference to the parent object of the subversion dialog (QWidget) """ comment, ok = KQInputDialog.getText(\ None, self.trUtf8("Subversion Lock"), self.trUtf8("Enter lock comment"), QLineEdit.Normal) if not ok: return comment = unicode(comment) if type(name) is types.ListType: dname, fnames = self.splitPathList(name) else: dname, fname = self.splitPath(name) fnames = [fname] locker = QMutexLocker(self.vcsExecutionMutex) cwd = os.getcwd() os.chdir(dname) client = self.getClient() dlg = \ SvnDialog(\ self.trUtf8('Locking in the Subversion repository'), "lock%s%s %s" % \ (stealIt and " --force" or "", comment and (" --message %s" % comment) or "", " ".join(fnames)), client, parent = parent) QApplication.processEvents() try: client.lock(fnames, comment, force = stealIt) except pysvn.ClientError, e: dlg.showError(e.args[0]) except AttributeError, e: dlg.showError(str(e)) locker.unlock() dlg.finish() dlg.exec_() os.chdir(cwd) def svnUnlock(self, name, breakIt=False, parent=None): """ Public method used to unlock a file in the Subversion repository. @param name file/directory name to be unlocked (string or list of strings) @param breakIt flag indicating a forced operation (boolean) @param parent reference to the parent object of the subversion dialog (QWidget) """ if type(name) is types.ListType: dname, fnames = self.splitPathList(name) else: dname, fname = self.splitPath(name) fnames = [fname] locker = QMutexLocker(self.vcsExecutionMutex) cwd = os.getcwd() os.chdir(dname) client = self.getClient() dlg = \ SvnDialog(\ self.trUtf8('Unlocking in the Subversion repository'), "unlock%s %s" % \ (breakIt and " --force" or "", " ".join(fnames)), client, parent = parent) QApplication.processEvents() try: client.unlock(fnames, force = breakIt) except pysvn.ClientError, e: dlg.showError(e.args[0]) except AttributeError, e: dlg.showError(str(e)) locker.unlock() dlg.finish() dlg.exec_() os.chdir(cwd) def svnInfo(self, projectPath, name): """ Public method to show repository information about a file or directory. @param projectPath path name of the project (string) @param name file/directory name relative to the project (string) """ dlg = SvnInfoDialog(self) dlg.start(projectPath, name) dlg.exec_() def svnRelocate(self, projectPath): """ Public method to relocate the working copy to a new repository URL. @param projectPath path name of the project (string) """ currUrl = self.svnGetReposName(projectPath) dlg = SvnRelocateDialog(currUrl) if dlg.exec_() == QDialog.Accepted: newUrl, inside = dlg.getData() if inside: msg = "switch %s %s" % (newUrl, projectPath) else: msg = "relocate %s %s %s" % (currUrl, newUrl, projectPath) client = self.getClient() dlg = \ SvnDialog(self.trUtf8('Relocating'), msg, client) QApplication.processEvents() locker = QMutexLocker(self.vcsExecutionMutex) try: if inside: client.switch(projectPath, newUrl) else: client.relocate(currUrl, newUrl, projectPath, recurse = True) except pysvn.ClientError, e: dlg.showError(e.args[0]) locker.unlock() dlg.finish() dlg.exec_() def svnRepoBrowser(self, projectPath = None): """ Public method to open the repository browser. @param projectPath path name of the project (string) """ if projectPath: url = self.svnGetReposName(projectPath) else: url = None if url is None: url, ok = KQInputDialog.getText(\ None, self.trUtf8("Repository Browser"), self.trUtf8("Enter the repository URL."), QLineEdit.Normal) if not ok or url.isEmpty(): return self.repoBrowser = SvnRepoBrowserDialog(self) self.repoBrowser.start(url) def svnRemoveFromChangelist(self, names): """ Public method to remove a file or directory from its changelist. Note: Directories will be removed recursively. @param names name or list of names of file or directory to remove (string or QString) """ if type(names) is not types.ListType: names = [names] client = self.getClient() dlg = \ SvnDialog(self.trUtf8('Remove from changelist'), "changelist --remove %s" % " ".join(names), client) QApplication.processEvents() locker = QMutexLocker(self.vcsExecutionMutex) try: for name in names: client.remove_from_changelists(name) except pysvn.ClientError, e: dlg.showError(e.args[0]) locker.unlock() dlg.finish() dlg.exec_() def svnAddToChangelist(self, names): """ Public method to add a file or directory to a changelist. Note: Directories will be added recursively. @param names name or list of names of file or directory to add (string or QString) """ if type(names) is not types.ListType: names = [names] clname, ok = KQInputDialog.getItem(\ None, self.trUtf8("Add to changelist"), self.trUtf8("Enter name of the changelist:"), sorted(self.svnGetChangelists()), 0, True) if not ok or clname.isEmpty(): return clname = unicode(clname) client = self.getClient() dlg = \ SvnDialog(self.trUtf8('Add to changelist'), "changelist %s" % " ".join(names), client) QApplication.processEvents() locker = QMutexLocker(self.vcsExecutionMutex) try: for name in names: client.add_to_changelist(name, clname, depth = pysvn.depth.infinity) except pysvn.ClientError, e: dlg.showError(e.args[0]) locker.unlock() dlg.finish() dlg.exec_() def svnShowChangelists(self, path): """ Public method used to inspect the change lists defined for the project. @param path directory name to show change lists for (string) """ self.changeLists = SvnChangeListsDialog(self) self.changeLists.show() QApplication.processEvents() self.changeLists.start(path) def svnGetChangelists(self): """ Public method to get a list of all defined change lists. @return list of defined change list names (list of strings) """ changelists = [] client = self.getClient() if hasattr(client, 'get_changelist'): ppath = e4App().getObject("Project").getProjectPath() locker = QMutexLocker(self.vcsExecutionMutex) try: entries = client.get_changelist(ppath, depth=pysvn.depth.infinity) for entry in entries: changelist = entry[1] if changelist not in changelists: changelists.append(changelist) except pysvn.ClientError: pass locker.unlock() return changelists ############################################################################ ## Private Subversion specific methods are below. ############################################################################ def __svnURL(self, url): """ Private method to format a url for subversion. @param url unformatted url string (string) @return properly formated url for subversion """ url = self.svnNormalizeURL(url) url = tuple(url.split(':', 2)) if len(url) == 3: scheme = url[0] host = url[1] port, path = url[2].split("/",1) return "%s:%s:%s/%s" % (scheme, host, port, urllib.quote(path)) else: scheme = url[0] if scheme == "file": return "%s:%s" % (scheme, urllib.quote(url[1])) else: try: host, path = url[1][2:].split("/", 1) except ValueError: host = url[1][2:] path = "" return "%s://%s/%s" % (scheme, host, urllib.quote(path)) def svnNormalizeURL(self, url): """ Public method to normalize a url for subversion. @param url url string (string) @return properly normalized url for subversion """ protocol, url = url.split("://", 1) if url.startswith("\\\\"): url = url[2:] if protocol == "file": url = os.path.normcase(url) if url[1] == ":": url = url.replace(":", "|", 1) url = url.replace('\\', '/') if url.endswith('/'): url = url[:-1] if not url.startswith("/") and url[1] in [":", "|"]: url = "/%s" % url return "%s://%s" % (protocol, url) ############################################################################ ## Methods to get the helper objects are below. ############################################################################ def vcsGetProjectBrowserHelper(self, browser, project, isTranslationsBrowser = False): """ Public method to instanciate a helper object for the different project browsers. @param browser reference to the project browser object @param project reference to the project object @param isTranslationsBrowser flag indicating, the helper is requested for the translations browser (this needs some special treatment) @return the project browser helper object """ return SvnProjectBrowserHelper(self, browser, project, isTranslationsBrowser) def vcsGetProjectHelper(self, project): """ Public method to instanciate a helper object for the project. @param project reference to the project object @return the project helper object """ helper = self.__plugin.getProjectHelper() helper.setObjects(self, project) self.__wcng = \ os.path.exists(os.path.join(project.getProjectPath(), ".svn", "format")) or \ os.path.exists(os.path.join(project.getProjectPath(), "_svn", "format")) or \ os.path.exists(os.path.join(project.getProjectPath(), ".svn", "wc.db")) or \ os.path.exists(os.path.join(project.getProjectPath(), "_svn", "wc.db")) return helper ############################################################################ ## Status Monitor Thread methods ############################################################################ def _createStatusMonitorThread(self, interval, project): """ Protected method to create an instance of the VCS status monitor thread. @param project reference to the project object @param interval check interval for the monitor thread in seconds (integer) @return reference to the monitor thread (QThread) """ return SvnStatusMonitorThread(interval, project.ppath, self) eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnInfoDialog.py0000644000175000001440000000013212261012650025071 xustar000000000000000030 mtime=1388582312.359081632 30 atime=1389081083.037724397 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnInfoDialog.py0000644000175000001440000001742312261012650024632 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Module implementing a dialog to show repository related information for a file/directory. """ import os import pysvn from PyQt4.QtCore import * from PyQt4.QtGui import * from SvnUtilities import formatTime from SvnDialogMixin import SvnDialogMixin from VCS.Ui_RepositoryInfoDialog import Ui_VcsRepositoryInfoDialog class SvnInfoDialog(QDialog, SvnDialogMixin, Ui_VcsRepositoryInfoDialog): """ Class implementing a dialog to show repository related information for a file/directory. """ def __init__(self, vcs, parent = None): """ Constructor @param vcs reference to the vcs object @param parent parent widget (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) SvnDialogMixin.__init__(self) self.vcs = vcs self.client = self.vcs.getClient() self.client.callback_cancel = \ self._clientCancelCallback self.client.callback_get_login = \ self._clientLoginCallback self.client.callback_ssl_server_trust_prompt = \ self._clientSslServerTrustPromptCallback self.show() QApplication.processEvents() def start(self, projectPath, fn): """ Public slot to start the svn info command. @param projectPath path name of the project (string) @param fn file or directory name relative to the project (string) """ locker = QMutexLocker(self.vcs.vcsExecutionMutex) cwd = os.getcwd() os.chdir(projectPath) try: entries = self.client.info2(fn, recurse = False) infoStr = QString("") for path, info in entries: infoStr.append(self.trUtf8(\ "")\ .arg(path)) if info['URL']: infoStr.append(self.trUtf8(\ "")\ .arg(info['URL'])) if info['rev']: infoStr.append(self.trUtf8(\ "")\ .arg(info['rev'].number)) if info['repos_root_URL']: infoStr.append(self.trUtf8(\ "")\ .arg(info['repos_root_URL'])) if info['repos_UUID']: infoStr.append(self.trUtf8(\ "")\ .arg(info['repos_UUID'])) if info['last_changed_author']: infoStr.append(self.trUtf8(\ "")\ .arg(info['last_changed_author'])) if info['last_changed_date']: infoStr.append(self.trUtf8(\ "")\ .arg(formatTime(info['last_changed_date']))) if info['last_changed_rev'] and \ info['last_changed_rev'].kind == pysvn.opt_revision_kind.number: infoStr.append(self.trUtf8(\ "")\ .arg(info['last_changed_rev'].number)) if info['kind']: if info['kind'] == pysvn.node_kind.file: nodeKind = self.trUtf8("file") elif info['kind'] == pysvn.node_kind.dir: nodeKind = self.trUtf8("directory") elif info['kind'] == pysvn.node_kind.none: nodeKind = self.trUtf8("none") else: nodeKind = self.trUtf8("unknown") infoStr.append(self.trUtf8(\ "")\ .arg(nodeKind)) if info['lock']: lockInfo = info['lock'] infoStr.append(self.trUtf8(\ "")\ .arg(lockInfo['owner'])) infoStr.append(self.trUtf8(\ "")\ .arg(formatTime(lockInfo['creation_date']))) if lockInfo['expiration_date'] is not None: infoStr.append(\ self.trUtf8(\ "")\ .arg(formatTime(lockInfo['expiration_date']))) infoStr.append(self.trUtf8(\ "")\ .arg(lockInfo['token'])) infoStr.append(self.trUtf8(\ "")\ .arg(lockInfo['comment'])) if info['wc_info']: wcInfo = info['wc_info'] if wcInfo['schedule']: if wcInfo['schedule'] == pysvn.wc_schedule.normal: schedule = self.trUtf8("normal") elif wcInfo['schedule'] == pysvn.wc_schedule.add: schedule = self.trUtf8("add") elif wcInfo['schedule'] == pysvn.wc_schedule.delete: schedule = self.trUtf8("delete") elif wcInfo['schedule'] == pysvn.wc_schedule.replace: schedule = self.trUtf8("replace") infoStr.append(self.trUtf8(\ "")\ .arg(schedule)) if wcInfo['copyfrom_url']: infoStr.append(self.trUtf8(\ "")\ .arg(wcInfo['copyfrom_url'])) infoStr.append(self.trUtf8(\ "")\ .arg(wcInfo['copyfrom_rev'].number)) if wcInfo['text_time']: infoStr.append(self.trUtf8(\ "")\ .arg(formatTime(wcInfo['text_time']))) if wcInfo['prop_time']: infoStr.append(self.trUtf8(\ "")\ .arg(formatTime(wcInfo['prop_time']))) if wcInfo['checksum']: infoStr.append(self.trUtf8(\ "")\ .arg(wcInfo['checksum'])) infoStr.append("
    Path (relative to project):%1
    Url:%1
    Revision:%1
    Repository root URL:%1
    Repository UUID:%1
    Last changed author:%1
    Last Changed Date:%1
    Last changed revision:%1
    Node kind:%1
    Lock Owner:%1
    Lock Creation Date:%1
    Lock Expiration Date:%1
    Lock Token:%1
    Lock Comment:%1
    Schedule:%1
    Copied From URL:%1
    Copied From Rev:%1
    Text Last Updated:%1
    Properties Last Updated:%1
    Checksum:%1
    ") self.infoBrowser.setHtml(infoStr) except pysvn.ClientError, e: self.__showError(e.args[0]) locker.unlock() os.chdir(cwd) def __showError(self, msg): """ Private slot to show an error message. @param msg error message to show (string or QString) """ infoStr = QString("

    %1

    ").arg(msg) self.infoBrowser.setHtml(infoStr) eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnOptionsDialog.ui0000644000175000001440000000013212114635645025632 xustar000000000000000030 mtime=1362312101.509763866 30 atime=1389081083.052724397 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnOptionsDialog.ui0000644000175000001440000001257712114635645025400 0ustar00detlevusers00000000000000 SvnOptionsDialog 0 0 565 165 Repository Infos <b>Repository Infos Dialog</b> <p>Enter the various infos into the entry fields. These values are used to generate a new project in the repository. If the checkbox is selected, the URL must end in the project name. A directory tree with project/tags, project/branches and project/trunk will be generated in the repository. If the checkbox is not selected, the URL must contain the complete path in the repository.</p> <p>For remote repositories the URL must contain the hostname.</p> true Log &Message: vcsLogEdit Select, if the standard repository layout (projectdir/trunk, projectdir/tags, projectdir/branches) should be generated Create standard repository &layout Alt+L true Select the protocol to access the repository Select the repository url via a directory selection dialog or the repository browser ... &URL: vcsUrlEdit Enter the log message for the new project. <b>Log Message</b> <p>Enter the log message to be used for the new project.</p> new project started &Protocol: protocolCombo Enter the url path of the module in the repository (without protocol part) <b>URL</b><p>Enter the URL to the module. For a repository with standard layout, this must not contain the trunk, tags or branches part.</p> Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok qPixmapFromMimeSource protocolCombo vcsUrlEdit vcsUrlButton vcsLogEdit layoutCheckBox buttonBox accepted() SvnOptionsDialog accept() 24 130 24 151 buttonBox rejected() SvnOptionsDialog reject() 104 135 104 148 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnCopyDialog.py0000644000175000001440000000013212261012650025110 xustar000000000000000030 mtime=1388582312.379081886 30 atime=1389081083.052724397 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnCopyDialog.py0000644000175000001440000000642712261012650024653 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Module implementing a dialog to enter the data for a copy operation. """ import os.path from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQFileDialog from E4Gui.E4Completers import E4FileCompleter, E4DirCompleter from Ui_SvnCopyDialog import Ui_SvnCopyDialog import Utilities class SvnCopyDialog(QDialog, Ui_SvnCopyDialog): """ Class implementing a dialog to enter the data for a copy or rename operation. """ def __init__(self, source, parent = None, move = False, force = False): """ Constructor @param source name of the source file/directory (QString) @param parent parent widget (QWidget) @param move flag indicating a move operation (boolean) @param force flag indicating a forced operation (boolean) """ QDialog.__init__(self, parent) self.setupUi(self) self.source = source if os.path.isdir(self.source): self.targetCompleter = E4DirCompleter(self.targetEdit) else: self.targetCompleter = E4FileCompleter(self.targetEdit) if move: self.setWindowTitle(self.trUtf8('Subversion Move')) else: self.forceCheckBox.setEnabled(False) self.forceCheckBox.setChecked(force) self.sourceEdit.setText(source) self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(False) def getData(self): """ Public method to retrieve the copy data. @return the target name (QString) and a flag indicating the operation should be enforced (boolean) """ target = unicode(self.targetEdit.text()) if not os.path.isabs(target): sourceDir = os.path.dirname(unicode(self.sourceEdit.text())) target = os.path.join(sourceDir, target) return (QString(Utilities.toNativeSeparators(target)), self.forceCheckBox.isChecked()) @pyqtSignature("") def on_dirButton_clicked(self): """ Private slot to handle the button press for selecting the target via a selection dialog. """ if os.path.isdir(self.source): target = KQFileDialog.getExistingDirectory(\ None, self.trUtf8("Select target"), self.targetEdit.text(), QFileDialog.Options(QFileDialog.ShowDirsOnly)) else: target = KQFileDialog.getSaveFileName(\ None, self.trUtf8("Select target"), self.targetEdit.text(), QString(), None, QFileDialog.Options(QFileDialog.DontConfirmOverwrite)) if not target.isEmpty(): self.targetEdit.setText(Utilities.toNativeSeparators(target)) @pyqtSignature("QString") def on_targetEdit_textChanged(self, txt): """ Private slot to handle changes of the target. @param txt contents of the target edit (QString) """ txt = unicode(txt) self.buttonBox.button(QDialogButtonBox.Ok).setEnabled( os.path.isabs(txt) or os.path.dirname(txt) == "") eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnStatusMonitorThread.py0000644000175000001440000000013212261012650027041 xustar000000000000000030 mtime=1388582312.382081924 30 atime=1389081083.052724397 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnStatusMonitorThread.py0000644000175000001440000001441412261012650026577 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing the VCS status monitor thread class for Subversion. """ import os import pysvn from PyQt4.QtCore import QRegExp, QStringList, QString from VCS.StatusMonitorThread import VcsStatusMonitorThread import Preferences class SvnStatusMonitorThread(VcsStatusMonitorThread): """ Class implementing the VCS status monitor thread class for Subversion. """ def __init__(self, interval, projectDir, vcs, parent = None): """ Constructor @param interval new interval in seconds (integer) @param projectDir project directory to monitor (string or QString) @param vcs reference to the version control object @param parent reference to the parent object (QObject) """ VcsStatusMonitorThread.__init__(self, interval, projectDir, vcs, parent) def _performMonitor(self): """ Protected method implementing the monitoring action. This method populates the statusList member variable with a list of strings giving the status in the first column and the path relative to the project directory starting with the third column. The allowed status flags are:
    • "A" path was added but not yet comitted
    • "M" path has local changes
    • "O" path was removed
    • "R" path was deleted and then re-added
    • "U" path needs an update
    • "Z" path contains a conflict
    • " " path is back at normal
    @return tuple of flag indicating successful operation (boolean) and a status message in case of non successful operation (QString) """ self.shouldUpdate = False client = pysvn.Client() client.exception_style = 1 client.callback_get_login = \ self.__clientLoginCallback client.callback_ssl_server_trust_prompt = \ self.__clientSslServerTrustPromptCallback cwd = os.getcwd() os.chdir(unicode(self.projectDir)) try: allFiles = client.status('.', recurse = True, get_all = True, ignore = True, update = \ not Preferences.getVCS("MonitorLocalStatus")) states = {} for file in allFiles: uptodate = True if file.repos_text_status != pysvn.wc_status_kind.none: uptodate = uptodate and \ file.repos_text_status != pysvn.wc_status_kind.modified if file.repos_prop_status != pysvn.wc_status_kind.none: uptodate = uptodate and \ file.repos_prop_status != pysvn.wc_status_kind.modified status = "" if not uptodate: status = "U" self.shouldUpdate = True elif file.text_status == pysvn.wc_status_kind.conflicted or \ file.prop_status == pysvn.wc_status_kind.conflicted: status = "Z" elif file.text_status == pysvn.wc_status_kind.deleted or \ file.prop_status == pysvn.wc_status_kind.deleted: status = "O" elif file.text_status == pysvn.wc_status_kind.modified or \ file.prop_status == pysvn.wc_status_kind.modified: status = "M" elif file.text_status == pysvn.wc_status_kind.added or \ file.prop_status == pysvn.wc_status_kind.added: status = "A" elif file.text_status == pysvn.wc_status_kind.replaced or \ file.prop_status == pysvn.wc_status_kind.replaced: status = "R" if status: states[file.path] = status try: if self.reportedStates[file.path] != status: self.statusList.append("%s %s" % (status, file.path)) except KeyError: self.statusList.append("%s %s" % (status, file.path)) for name in self.reportedStates.keys(): if name not in states: self.statusList.append(" %s" % name) self.reportedStates = states res = True statusStr = \ self.trUtf8("Subversion status checked successfully (using pysvn)") except pysvn.ClientError, e: res = False statusStr = QString(e.args[0]) os.chdir(cwd) return res, statusStr def __clientLoginCallback(self, realm, username, may_save): """ Private method called by the client to get login information. @param realm name of the realm of the requested credentials (string) @param username username as supplied by subversion (string) @param may_save flag indicating, that subversion is willing to save the answers returned (boolean) @return tuple of four values (retcode, username, password, save). Retcode should be True, if username and password should be used by subversion, username and password contain the relevant data as strings and save is a flag indicating, that username and password should be saved. Always returns (False, "", "", False). """ return (False, "", "", False) def __clientSslServerTrustPromptCallback(self, trust_dict): """ Private method called by the client to request acceptance for a ssl server certificate. @param trust_dict dictionary containing the trust data @return tuple of three values (retcode, acceptedFailures, save). Retcode should be true, if the certificate should be accepted, acceptedFailures should indicate the accepted certificate failures and save should be True, if subversion should save the certificate. Always returns (False, 0, False). """ return (False, 0, False) eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnLogBrowserDialog.py0000644000175000001440000000013212261012650026263 xustar000000000000000030 mtime=1388582312.384081949 30 atime=1389081083.052724397 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnLogBrowserDialog.py0000644000175000001440000004453612261012650026031 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing a dialog to browse the log history. """ import os import pysvn from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQMessageBox from SvnUtilities import formatTime, dateFromTime_t from SvnDialogMixin import SvnDialogMixin from SvnDiffDialog import SvnDiffDialog from Ui_SvnLogBrowserDialog import Ui_SvnLogBrowserDialog import UI.PixmapCache class SvnLogBrowserDialog(QDialog, SvnDialogMixin, Ui_SvnLogBrowserDialog): """ Class implementing a dialog to browse the log history. """ def __init__(self, vcs, parent = None): """ Constructor @param vcs reference to the vcs object @param parent parent widget (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) SvnDialogMixin.__init__(self) self.buttonBox.button(QDialogButtonBox.Close).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Cancel).setDefault(True) self.filesTree.headerItem().setText(self.filesTree.columnCount(), "") self.filesTree.header().setSortIndicator(0, Qt.AscendingOrder) self.vcs = vcs self.__maxDate = QDate() self.__minDate = QDate() self.__filterLogsEnabled = True self.fromDate.setDisplayFormat("yyyy-MM-dd") self.toDate.setDisplayFormat("yyyy-MM-dd") self.fromDate.setDate(QDate.currentDate()) self.toDate.setDate(QDate.currentDate()) self.fieldCombo.setCurrentIndex(self.fieldCombo.findText(self.trUtf8("Message"))) self.clearRxEditButton.setIcon(UI.PixmapCache.getIcon("clearLeft.png")) self.limitSpinBox.setValue(self.vcs.getPlugin().getPreferences("LogLimit")) self.stopCheckBox.setChecked(self.vcs.getPlugin().getPreferences("StopLogOnCopy")) self.__messageRole = Qt.UserRole self.__changesRole = Qt.UserRole + 1 self.flags = { 'A' : self.trUtf8('Added'), 'D' : self.trUtf8('Deleted'), 'M' : self.trUtf8('Modified'), 'R' : self.trUtf8('Replaced'), } self.diff = None self.__lastRev = 0 self.client = self.vcs.getClient() self.client.callback_cancel = \ self._clientCancelCallback self.client.callback_get_login = \ self._clientLoginCallback self.client.callback_ssl_server_trust_prompt = \ self._clientSslServerTrustPromptCallback def _reset(self): """ Protected method to reset the internal state of the dialog. """ SvnDialogMixin._reset(self) self.cancelled = False self.buttonBox.button(QDialogButtonBox.Close).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(True) self.buttonBox.button(QDialogButtonBox.Cancel).setDefault(True) QApplication.processEvents() def __resizeColumnsLog(self): """ Private method to resize the log tree columns. """ self.logTree.header().resizeSections(QHeaderView.ResizeToContents) self.logTree.header().setStretchLastSection(True) def __resortLog(self): """ Private method to resort the log tree. """ self.logTree.sortItems(self.logTree.sortColumn(), self.logTree.header().sortIndicatorOrder()) def __resizeColumnsFiles(self): """ Private method to resize the changed files tree columns. """ self.filesTree.header().resizeSections(QHeaderView.ResizeToContents) self.filesTree.header().setStretchLastSection(True) def __resortFiles(self): """ Private method to resort the changed files tree. """ sortColumn = self.filesTree.sortColumn() self.filesTree.sortItems(1, self.filesTree.header().sortIndicatorOrder()) self.filesTree.sortItems(sortColumn, self.filesTree.header().sortIndicatorOrder()) def __generateLogItem(self, author, date, message, revision, changedPaths): """ Private method to generate a log tree entry. @param author author info (string or QString) @param date date info (integer) @param message text of the log message (string or QString) @param revision revision info (string or pysvn.opt_revision_kind) @param changedPaths list of pysvn dictionary like objects containing info about the changed files/directories @return reference to the generated item (QTreeWidgetItem) """ if revision == "": rev = "" self.__lastRev = 0 else: rev = revision.number self.__lastRev = revision.number if date == "": dt = "" else: dt = formatTime(date) itm = QTreeWidgetItem(self.logTree) itm.setData(0, Qt.DisplayRole, rev) itm.setData(1, Qt.DisplayRole, author) itm.setData(2, Qt.DisplayRole, dt) itm.setData(3, Qt.DisplayRole, " ".join(message.splitlines())) changes = [] for changedPath in changedPaths: if changedPath["copyfrom_path"] is None: copyPath = "" else: copyPath = changedPath["copyfrom_path"] if changedPath["copyfrom_revision"] is None: copyRev = "" else: copyRev = "%7d" % changedPath["copyfrom_revision"].number change = { "action" : changedPath["action"], "path" : changedPath["path"], "copyfrom_path" : copyPath, "copyfrom_revision" : copyRev, } changes.append(change) itm.setData(0, self.__messageRole, QVariant(message)) itm.setData(0, self.__changesRole, QVariant(unicode(changes))) itm.setTextAlignment(0, Qt.AlignRight) itm.setTextAlignment(1, Qt.AlignLeft) itm.setTextAlignment(2, Qt.AlignLeft) itm.setTextAlignment(3, Qt.AlignLeft) itm.setTextAlignment(4, Qt.AlignLeft) return itm def __generateFileItem(self, action, path, copyFrom, copyRev): """ Private method to generate a changed files tree entry. @param action indicator for the change action ("A", "D" or "M") @param path path of the file in the repository (string or QString) @param copyFrom path the file was copied from (None, string or QString) @param copyRev revision the file was copied from (None, string or QString) @return reference to the generated item (QTreeWidgetItem) """ itm = QTreeWidgetItem(self.filesTree, QStringList() << self.flags[action] \ << path \ << copyFrom \ << copyRev ) itm.setTextAlignment(3, Qt.AlignRight) return itm def __getLogEntries(self, startRev = None): """ Private method to retrieve log entries from the repository. @param startRev revision number to start from (integer, string or QString) """ fetchLimit = 10 self._reset() QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) QApplication.processEvents() limit = self.limitSpinBox.value() if startRev is None: start = pysvn.Revision(pysvn.opt_revision_kind.head) else: try: start = pysvn.Revision(pysvn.opt_revision_kind.number, int(startRev)) except TypeError: start = pysvn.Revision(pysvn.opt_revision_kind.head) locker = QMutexLocker(self.vcs.vcsExecutionMutex) cwd = os.getcwd() os.chdir(self.dname) try: fetched = 0 logs = [] while fetched < limit: flimit = min(fetchLimit, limit - fetched) if fetched == 0: revstart = start else: revstart = pysvn.Revision(\ pysvn.opt_revision_kind.number, nextRev) allLogs = self.client.log(self.fname, revision_start = revstart, discover_changed_paths = True, limit = flimit + 1, strict_node_history = self.stopCheckBox.isChecked()) if len(allLogs) <= flimit or self._clientCancelCallback(): logs.extend(allLogs) break else: logs.extend(allLogs[:-1]) nextRev = allLogs[-1]["revision"].number fetched += fetchLimit locker.unlock() for log in logs: self.__generateLogItem(log["author"], log["date"], log["message"], log["revision"], log['changed_paths']) dt = dateFromTime_t(log["date"]) if not self.__maxDate.isValid() and not self.__minDate.isValid(): self.__maxDate = dt self.__minDate = dt else: if self.__maxDate < dt: self.__maxDate = dt if self.__minDate > dt: self.__minDate = dt if len(logs) < limit and not self.cancelled: self.nextButton.setEnabled(False) self.limitSpinBox.setEnabled(False) self.__filterLogsEnabled = False self.fromDate.setMinimumDate(self.__minDate) self.fromDate.setMaximumDate(self.__maxDate) self.fromDate.setDate(self.__minDate) self.toDate.setMinimumDate(self.__minDate) self.toDate.setMaximumDate(self.__maxDate) self.toDate.setDate(self.__maxDate) self.__filterLogsEnabled = True self.__resizeColumnsLog() self.__resortLog() self.__filterLogs() except pysvn.ClientError, e: locker.unlock() self.__showError(e.args[0]) os.chdir(cwd) self.__finish() def start(self, fn): """ Public slot to start the svn log command. @param fn filename to show the log for (string) """ self.filename = fn self.dname, self.fname = self.vcs.splitPath(fn) self.activateWindow() self.raise_() self.logTree.clear() self.__getLogEntries() self.logTree.setCurrentItem(self.logTree.topLevelItem(0)) def __finish(self): """ Private slot called when the user pressed the button. """ QApplication.restoreOverrideCursor() self.buttonBox.button(QDialogButtonBox.Close).setEnabled(True) self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Close).setDefault(True) self._cancel() def __diffRevisions(self, rev1, rev2, peg_rev): """ Private method to do a diff of two revisions. @param rev1 first revision number (integer) @param rev2 second revision number (integer) @param peg_rev revision number to use as a reference (integer) """ if self.diff is None: self.diff = SvnDiffDialog(self.vcs) self.diff.show() QApplication.processEvents() self.diff.start(self.filename, [rev1, rev2], pegRev = peg_rev) def on_buttonBox_clicked(self, button): """ Private slot called by a button of the button box clicked. @param button button that was clicked (QAbstractButton) """ if button == self.buttonBox.button(QDialogButtonBox.Close): self.close() elif button == self.buttonBox.button(QDialogButtonBox.Cancel): self.cancelled = True self.__finish() @pyqtSignature("QTreeWidgetItem*, QTreeWidgetItem*") def on_logTree_currentItemChanged(self, current, previous): """ Private slot called, when the current item of the log tree changes. @param current reference to the new current item (QTreeWidgetItem) @param previous reference to the old current item (QTreeWidgetItem) """ self.messageEdit.setPlainText(current.data(0, self.__messageRole).toString()) self.filesTree.clear() changes = eval(unicode(current.data(0, self.__changesRole).toString())) if len(changes) > 0: for change in changes: self.__generateFileItem(change["action"], change["path"], change["copyfrom_path"], change["copyfrom_revision"]) self.__resizeColumnsFiles() self.__resortFiles() self.diffPreviousButton.setEnabled(\ current != self.logTree.topLevelItem(self.logTree.topLevelItemCount() - 1)) @pyqtSignature("") def on_logTree_itemSelectionChanged(self): """ Private slot called, when the selection has changed. """ self.diffRevisionsButton.setEnabled(len(self.logTree.selectedItems()) == 2) @pyqtSignature("") def on_nextButton_clicked(self): """ Private slot to handle the Next button. """ if self.__lastRev > 1: self.__getLogEntries(self.__lastRev - 1) @pyqtSignature("") def on_diffPreviousButton_clicked(self): """ Private slot to handle the Diff to Previous button. """ itm = self.logTree.topLevelItem(0) if itm is None: self.diffPreviousButton.setEnabled(False) return peg_rev = int(itm.text(0)) itm = self.logTree.currentItem() if itm is None: self.diffPreviousButton.setEnabled(False) return rev2 = int(itm.text(0)) itm = self.logTree.topLevelItem(self.logTree.indexOfTopLevelItem(itm) + 1) if itm is None: self.diffPreviousButton.setEnabled(False) return rev1 = int(itm.text(0)) self.__diffRevisions(rev1, rev2, peg_rev) @pyqtSignature("") def on_diffRevisionsButton_clicked(self): """ Private slot to handle the Compare Revisions button. """ items = self.logTree.selectedItems() if len(items) != 2: self.diffRevisionsButton.setEnabled(False) return rev2 = int(items[0].text(0)) rev1 = int(items[1].text(0)) itm = self.logTree.topLevelItem(0) if itm is None: self.diffPreviousButton.setEnabled(False) return peg_rev = int(itm.text(0)) self.__diffRevisions(min(rev1, rev2), max(rev1, rev2), peg_rev) def __showError(self, msg): """ Private slot to show an error message. @param msg error message to show (string or QString) """ KQMessageBox.critical(self, self.trUtf8("Subversion Error"), msg) @pyqtSignature("QDate") def on_fromDate_dateChanged(self, date): """ Private slot called, when the from date changes. @param date new date (QDate) """ self.__filterLogs() @pyqtSignature("QDate") def on_toDate_dateChanged(self, date): """ Private slot called, when the from date changes. @param date new date (QDate) """ self.__filterLogs() @pyqtSignature("QString") def on_fieldCombo_activated(self, txt): """ Private slot called, when a new filter field is selected. @param txt text of the selected field (QString) """ self.__filterLogs() @pyqtSignature("QString") def on_rxEdit_textChanged(self, txt): """ Private slot called, when a filter expression is entered. @param txt filter expression (QString) """ self.__filterLogs() def __filterLogs(self): """ Private method to filter the log entries. """ if self.__filterLogsEnabled: from_ = self.fromDate.date().toString("yyyy-MM-dd") to_ = self.toDate.date().addDays(1).toString("yyyy-MM-dd") txt = self.fieldCombo.currentText() if txt == self.trUtf8("Author"): fieldIndex = 1 searchRx = QRegExp(self.rxEdit.text(), Qt.CaseInsensitive) elif txt == self.trUtf8("Revision"): fieldIndex = 0 txt = self.rxEdit.text() if txt.startsWith("^"): searchRx = QRegExp("^\s*%s" % txt[1:], Qt.CaseInsensitive) else: searchRx = QRegExp(txt, Qt.CaseInsensitive) else: fieldIndex = 3 searchRx = QRegExp(self.rxEdit.text(), Qt.CaseInsensitive) currentItem = self.logTree.currentItem() for topIndex in range(self.logTree.topLevelItemCount()): topItem = self.logTree.topLevelItem(topIndex) if topItem.text(2) <= to_ and topItem.text(2) >= from_ and \ topItem.text(fieldIndex).contains(searchRx): topItem.setHidden(False) if topItem is currentItem: self.on_logTree_currentItemChanged(topItem, None) else: topItem.setHidden(True) if topItem is currentItem: self.messageEdit.clear() self.filesTree.clear() @pyqtSignature("") def on_clearRxEditButton_clicked(self): """ Private slot called by a click of the clear RX edit button. """ self.rxEdit.clear() @pyqtSignature("bool") def on_stopCheckBox_clicked(self, checked): """ Private slot called, when the stop on copy/move checkbox is clicked """ self.vcs.getPlugin().setPreferences("StopLogOnCopy", int(self.stopCheckBox.isChecked())) self.nextButton.setEnabled(True) self.limitSpinBox.setEnabled(True) eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnTagDialog.py0000644000175000001440000000013212261012650024711 xustar000000000000000030 mtime=1388582312.387081987 30 atime=1389081083.053724396 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnTagDialog.py0000644000175000001440000000403612261012650024446 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Module implementing a dialog to enter the data for a tagging operation. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from Ui_SvnTagDialog import Ui_SvnTagDialog class SvnTagDialog(QDialog, Ui_SvnTagDialog): """ Class implementing a dialog to enter the data for a tagging operation. """ def __init__(self, taglist, reposURL, standardLayout, parent = None): """ Constructor @param taglist list of previously entered tags (QStringList) @param reposURL repository path (QString or string) or None @param standardLayout flag indicating the layout of the repository (boolean) @param parent parent widget (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.okButton = self.buttonBox.button(QDialogButtonBox.Ok) self.okButton.setEnabled(False) self.tagCombo.clear() self.tagCombo.addItems(taglist) if reposURL is not None and reposURL is not QString(): self.tagCombo.setEditText(reposURL) if not standardLayout: self.TagActionGroup.setEnabled(False) def on_tagCombo_editTextChanged(self, text): """ Private method used to enable/disable the OK-button. @param text ignored """ self.okButton.setDisabled(text.isEmpty()) def getParameters(self): """ Public method to retrieve the tag data. @return tuple of QString and int (tag, tag operation) """ tag = self.tagCombo.currentText() tagOp = 0 if self.createRegularButton.isChecked(): tagOp = 1 elif self.createBranchButton.isChecked(): tagOp = 2 elif self.deleteRegularButton.isChecked(): tagOp = 4 elif self.deleteBranchButton.isChecked(): tagOp = 8 return (tag, tagOp) eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/ProjectHelper.py0000644000175000001440000000013212261012650025135 xustar000000000000000030 mtime=1388582312.390082025 30 atime=1389081083.053724396 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/ProjectHelper.py0000644000175000001440000006266512261012650024706 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2005 - 2014 Detlev Offenbach # """ Module implementing the VCS project helper for Subversion. """ import os from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt.KQApplication import e4App from VCS.ProjectHelper import VcsProjectHelper from E4Gui.E4Action import E4Action import UI.PixmapCache class SvnProjectHelper(VcsProjectHelper): """ Class implementing the VCS project helper for Subversion. """ def __init__(self, vcsObject, projectObject, parent = None, name = None): """ Constructor @param vcsObject reference to the vcs object @param projectObject reference to the project object @param parent parent widget (QWidget) @param name name of this object (string or QString) """ VcsProjectHelper.__init__(self, vcsObject, projectObject, parent, name) def getActions(self): """ Public method to get a list of all actions. @return list of all actions (list of E4Action) """ return self.actions[:] def initActions(self): """ Public method to generate the action objects. """ self.vcsNewAct = E4Action(self.trUtf8('New from repository'), UI.PixmapCache.getIcon("vcsCheckout.png"), self.trUtf8('&New from repository...'), 0, 0, self, 'subversion_new') self.vcsNewAct.setStatusTip(self.trUtf8( 'Create a new project from the VCS repository' )) self.vcsNewAct.setWhatsThis(self.trUtf8( """New from repository""" """

    This creates a new local project from the VCS repository.

    """ )) self.connect(self.vcsNewAct, SIGNAL('triggered()'), self._vcsCheckout) self.actions.append(self.vcsNewAct) self.vcsUpdateAct = E4Action(self.trUtf8('Update from repository'), UI.PixmapCache.getIcon("vcsUpdate.png"), self.trUtf8('&Update from repository'), 0, 0, self, 'subversion_update') self.vcsUpdateAct.setStatusTip(self.trUtf8( 'Update the local project from the VCS repository' )) self.vcsUpdateAct.setWhatsThis(self.trUtf8( """Update from repository""" """

    This updates the local project from the VCS repository.

    """ )) self.connect(self.vcsUpdateAct, SIGNAL('triggered()'), self._vcsUpdate) self.actions.append(self.vcsUpdateAct) self.vcsCommitAct = E4Action(self.trUtf8('Commit changes to repository'), UI.PixmapCache.getIcon("vcsCommit.png"), self.trUtf8('&Commit changes to repository...'), 0, 0, self, 'subversion_commit') self.vcsCommitAct.setStatusTip(self.trUtf8( 'Commit changes to the local project to the VCS repository' )) self.vcsCommitAct.setWhatsThis(self.trUtf8( """Commit changes to repository""" """

    This commits changes to the local project to the VCS repository.

    """ )) self.connect(self.vcsCommitAct, SIGNAL('triggered()'), self._vcsCommit) self.actions.append(self.vcsCommitAct) self.vcsLogAct = E4Action(self.trUtf8('Show log'), UI.PixmapCache.getIcon("vcsLog.png"), self.trUtf8('Show &log'), 0, 0, self, 'subversion_log') self.vcsLogAct.setStatusTip(self.trUtf8( 'Show the log of the local project' )) self.vcsLogAct.setWhatsThis(self.trUtf8( """Show log""" """

    This shows the log of the local project.

    """ )) self.connect(self.vcsLogAct, SIGNAL('triggered()'), self._vcsLog) self.actions.append(self.vcsLogAct) self.svnLogLimitedAct = E4Action(self.trUtf8('Show limited log'), UI.PixmapCache.getIcon("vcsLog.png"), self.trUtf8('Show limited log'), 0, 0, self, 'subversion_log_limited') self.svnLogLimitedAct.setStatusTip(self.trUtf8( 'Show a limited log of the local project' )) self.svnLogLimitedAct.setWhatsThis(self.trUtf8( """Show limited log""" """

    This shows the log of the local project limited to a selectable""" """ number of entries.

    """ )) self.connect(self.svnLogLimitedAct, SIGNAL('triggered()'), self.__svnLogLimited) self.actions.append(self.svnLogLimitedAct) self.svnLogBrowserAct = E4Action(self.trUtf8('Show log browser'), UI.PixmapCache.getIcon("vcsLog.png"), self.trUtf8('Show log browser'), 0, 0, self, 'subversion_log_browser') self.svnLogBrowserAct.setStatusTip(self.trUtf8( 'Show a dialog to browse the log of the local project' )) self.svnLogBrowserAct.setWhatsThis(self.trUtf8( """Show log browser""" """

    This shows a dialog to browse the log of the local project.""" """ A limited number of entries is shown first. More can be""" """ retrieved later on.

    """ )) self.connect(self.svnLogBrowserAct, SIGNAL('triggered()'), self.__svnLogBrowser) self.actions.append(self.svnLogBrowserAct) self.vcsDiffAct = E4Action(self.trUtf8('Show difference'), UI.PixmapCache.getIcon("vcsDiff.png"), self.trUtf8('Show &difference'), 0, 0, self, 'subversion_diff') self.vcsDiffAct.setStatusTip(self.trUtf8( 'Show the difference of the local project to the repository' )) self.vcsDiffAct.setWhatsThis(self.trUtf8( """Show difference""" """

    This shows the difference of the local project to the repository.

    """ )) self.connect(self.vcsDiffAct, SIGNAL('triggered()'), self._vcsDiff) self.actions.append(self.vcsDiffAct) self.svnExtDiffAct = E4Action(self.trUtf8('Show difference (extended)'), UI.PixmapCache.getIcon("vcsDiff.png"), self.trUtf8('Show difference (extended)'), 0, 0, self, 'subversion_extendeddiff') self.svnExtDiffAct.setStatusTip(self.trUtf8( 'Show the difference of revisions of the project to the repository' )) self.svnExtDiffAct.setWhatsThis(self.trUtf8( """Show difference (extended)""" """

    This shows the difference of selectable revisions of the project.

    """ )) self.connect(self.svnExtDiffAct, SIGNAL('triggered()'), self.__svnExtendedDiff) self.actions.append(self.svnExtDiffAct) self.svnUrlDiffAct = E4Action(self.trUtf8('Show difference (URLs)'), UI.PixmapCache.getIcon("vcsDiff.png"), self.trUtf8('Show difference (URLs)'), 0, 0, self, 'subversion_urldiff') self.svnUrlDiffAct.setStatusTip(self.trUtf8( 'Show the difference of the project between two repository URLs' )) self.svnUrlDiffAct.setWhatsThis(self.trUtf8( """Show difference (URLs)""" """

    This shows the difference of the project between""" """ two repository URLs.

    """ )) self.connect(self.svnUrlDiffAct, SIGNAL('triggered()'), self.__svnUrlDiff) self.actions.append(self.svnUrlDiffAct) self.vcsStatusAct = E4Action(self.trUtf8('Show status'), UI.PixmapCache.getIcon("vcsStatus.png"), self.trUtf8('Show &status'), 0, 0, self, 'subversion_status') self.vcsStatusAct.setStatusTip(self.trUtf8( 'Show the status of the local project' )) self.vcsStatusAct.setWhatsThis(self.trUtf8( """Show status""" """

    This shows the status of the local project.

    """ )) self.connect(self.vcsStatusAct, SIGNAL('triggered()'), self._vcsStatus) self.actions.append(self.vcsStatusAct) self.svnChangeListsAct = E4Action(self.trUtf8('Show change lists'), UI.PixmapCache.getIcon("vcsChangeLists.png"), self.trUtf8('Show change lists'), 0, 0, self, 'subversion_changelists') self.svnChangeListsAct.setStatusTip(self.trUtf8( 'Show the change lists and associated files of the local project' )) self.svnChangeListsAct.setWhatsThis(self.trUtf8( """Show change lists""" """

    This shows the change lists and associated files of the""" """ local project.

    """ )) self.connect(self.svnChangeListsAct, SIGNAL('triggered()'), self.__svnChangeLists) self.actions.append(self.svnChangeListsAct) self.svnRepoInfoAct = E4Action(self.trUtf8('Show repository info'), UI.PixmapCache.getIcon("vcsRepo.png"), self.trUtf8('Show repository info'), 0, 0, self, 'subversion_repoinfo') self.svnRepoInfoAct.setStatusTip(self.trUtf8( 'Show some repository related information for the local project' )) self.svnRepoInfoAct.setWhatsThis(self.trUtf8( """Show repository info""" """

    This shows some repository related information for""" """ the local project.

    """ )) self.connect(self.svnRepoInfoAct, SIGNAL('triggered()'), self.__svnInfo) self.actions.append(self.svnRepoInfoAct) self.vcsTagAct = E4Action(self.trUtf8('Tag in repository'), UI.PixmapCache.getIcon("vcsTag.png"), self.trUtf8('&Tag in repository...'), 0, 0, self, 'subversion_tag') self.vcsTagAct.setStatusTip(self.trUtf8( 'Tag the local project in the repository' )) self.vcsTagAct.setWhatsThis(self.trUtf8( """Tag in repository""" """

    This tags the local project in the repository.

    """ )) self.connect(self.vcsTagAct, SIGNAL('triggered()'), self._vcsTag) self.actions.append(self.vcsTagAct) self.vcsExportAct = E4Action(self.trUtf8('Export from repository'), UI.PixmapCache.getIcon("vcsExport.png"), self.trUtf8('&Export from repository...'), 0, 0, self, 'subversion_export') self.vcsExportAct.setStatusTip(self.trUtf8( 'Export a project from the repository' )) self.vcsExportAct.setWhatsThis(self.trUtf8( """Export from repository""" """

    This exports a project from the repository.

    """ )) self.connect(self.vcsExportAct, SIGNAL('triggered()'), self._vcsExport) self.actions.append(self.vcsExportAct) self.vcsPropsAct = E4Action(self.trUtf8('Command options'), self.trUtf8('Command &options...'),0,0,self, 'subversion_options') self.vcsPropsAct.setStatusTip(self.trUtf8('Show the VCS command options')) self.vcsPropsAct.setWhatsThis(self.trUtf8( """Command options...""" """

    This shows a dialog to edit the VCS command options.

    """ )) self.connect(self.vcsPropsAct, SIGNAL('triggered()'), self._vcsCommandOptions) self.actions.append(self.vcsPropsAct) self.vcsRevertAct = E4Action(self.trUtf8('Revert changes'), UI.PixmapCache.getIcon("vcsRevert.png"), self.trUtf8('Re&vert changes'), 0, 0, self, 'subversion_revert') self.vcsRevertAct.setStatusTip(self.trUtf8( 'Revert all changes made to the local project' )) self.vcsRevertAct.setWhatsThis(self.trUtf8( """Revert changes""" """

    This reverts all changes made to the local project.

    """ )) self.connect(self.vcsRevertAct, SIGNAL('triggered()'), self._vcsRevert) self.actions.append(self.vcsRevertAct) self.vcsMergeAct = E4Action(self.trUtf8('Merge'), UI.PixmapCache.getIcon("vcsMerge.png"), self.trUtf8('Mer&ge changes...'), 0, 0, self, 'subversion_merge') self.vcsMergeAct.setStatusTip(self.trUtf8( 'Merge changes of a tag/revision into the local project' )) self.vcsMergeAct.setWhatsThis(self.trUtf8( """Merge""" """

    This merges changes of a tag/revision into the local project.

    """ )) self.connect(self.vcsMergeAct, SIGNAL('triggered()'), self._vcsMerge) self.actions.append(self.vcsMergeAct) self.vcsSwitchAct = E4Action(self.trUtf8('Switch'), UI.PixmapCache.getIcon("vcsSwitch.png"), self.trUtf8('S&witch...'), 0, 0, self, 'subversion_switch') self.vcsSwitchAct.setStatusTip(self.trUtf8( 'Switch the local copy to another tag/branch' )) self.vcsSwitchAct.setWhatsThis(self.trUtf8( """Switch""" """

    This switches the local copy to another tag/branch.

    """ )) self.connect(self.vcsSwitchAct, SIGNAL('triggered()'), self._vcsSwitch) self.actions.append(self.vcsSwitchAct) self.vcsResolveAct = E4Action(self.trUtf8('Conflicts resolved'), self.trUtf8('Con&flicts resolved'), 0, 0, self, 'subversion_resolve') self.vcsResolveAct.setStatusTip(self.trUtf8( 'Mark all conflicts of the local project as resolved' )) self.vcsResolveAct.setWhatsThis(self.trUtf8( """Conflicts resolved""" """

    This marks all conflicts of the local project as resolved.

    """ )) self.connect(self.vcsResolveAct, SIGNAL('triggered()'), self.__svnResolve) self.actions.append(self.vcsResolveAct) self.vcsCleanupAct = E4Action(self.trUtf8('Cleanup'), self.trUtf8('Cleanu&p'), 0, 0, self, 'subversion_cleanup') self.vcsCleanupAct.setStatusTip(self.trUtf8( 'Cleanup the local project' )) self.vcsCleanupAct.setWhatsThis(self.trUtf8( """Cleanup""" """

    This performs a cleanup of the local project.

    """ )) self.connect(self.vcsCleanupAct, SIGNAL('triggered()'), self._vcsCleanup) self.actions.append(self.vcsCleanupAct) self.vcsCommandAct = E4Action(self.trUtf8('Execute command'), self.trUtf8('E&xecute command...'), 0, 0, self, 'subversion_command') self.vcsCommandAct.setStatusTip(self.trUtf8( 'Execute an arbitrary VCS command' )) self.vcsCommandAct.setWhatsThis(self.trUtf8( """Execute command""" """

    This opens a dialog to enter an arbitrary VCS command.

    """ )) self.connect(self.vcsCommandAct, SIGNAL('triggered()'), self._vcsCommand) self.actions.append(self.vcsCommandAct) self.svnTagListAct = E4Action(self.trUtf8('List tags'), self.trUtf8('List tags...'), 0, 0, self, 'subversion_list_tags') self.svnTagListAct.setStatusTip(self.trUtf8( 'List tags of the project' )) self.svnTagListAct.setWhatsThis(self.trUtf8( """List tags""" """

    This lists the tags of the project.

    """ )) self.connect(self.svnTagListAct, SIGNAL('triggered()'), self.__svnTagList) self.actions.append(self.svnTagListAct) self.svnBranchListAct = E4Action(self.trUtf8('List branches'), self.trUtf8('List branches...'), 0, 0, self, 'subversion_list_branches') self.svnBranchListAct.setStatusTip(self.trUtf8( 'List branches of the project' )) self.svnBranchListAct.setWhatsThis(self.trUtf8( """List branches""" """

    This lists the branches of the project.

    """ )) self.connect(self.svnBranchListAct, SIGNAL('triggered()'), self.__svnBranchList) self.actions.append(self.svnBranchListAct) self.svnListAct = E4Action(self.trUtf8('List repository contents'), self.trUtf8('List repository contents...'), 0, 0, self, 'subversion_contents') self.svnListAct.setStatusTip(self.trUtf8( 'Lists the contents of the repository' )) self.svnListAct.setWhatsThis(self.trUtf8( """List repository contents""" """

    This lists the contents of the repository.

    """ )) self.connect(self.svnListAct, SIGNAL('triggered()'), self.__svnTagList) self.actions.append(self.svnListAct) self.svnPropSetAct = E4Action(self.trUtf8('Set Property'), self.trUtf8('Set Property...'), 0, 0, self, 'subversion_property_set') self.svnPropSetAct.setStatusTip(self.trUtf8( 'Set a property for the project files' )) self.svnPropSetAct.setWhatsThis(self.trUtf8( """Set Property""" """

    This sets a property for the project files.

    """ )) self.connect(self.svnPropSetAct, SIGNAL('triggered()'), self.__svnPropSet) self.actions.append(self.svnPropSetAct) self.svnPropListAct = E4Action(self.trUtf8('List Properties'), self.trUtf8('List Properties...'), 0, 0, self, 'subversion_property_list') self.svnPropListAct.setStatusTip(self.trUtf8( 'List properties of the project files' )) self.svnPropListAct.setWhatsThis(self.trUtf8( """List Properties""" """

    This lists the properties of the project files.

    """ )) self.connect(self.svnPropListAct, SIGNAL('triggered()'), self.__svnPropList) self.actions.append(self.svnPropListAct) self.svnPropDelAct = E4Action(self.trUtf8('Delete Property'), self.trUtf8('Delete Property...'), 0, 0, self, 'subversion_property_delete') self.svnPropDelAct.setStatusTip(self.trUtf8( 'Delete a property for the project files' )) self.svnPropDelAct.setWhatsThis(self.trUtf8( """Delete Property""" """

    This deletes a property for the project files.

    """ )) self.connect(self.svnPropDelAct, SIGNAL('triggered()'), self.__svnPropDel) self.actions.append(self.svnPropDelAct) self.svnRelocateAct = E4Action(self.trUtf8('Relocate'), UI.PixmapCache.getIcon("vcsSwitch.png"), self.trUtf8('Relocate...'), 0, 0, self, 'subversion_relocate') self.svnRelocateAct.setStatusTip(self.trUtf8( 'Relocate the working copy to a new repository URL' )) self.svnRelocateAct.setWhatsThis(self.trUtf8( """Relocate""" """

    This relocates the working copy to a new repository URL.

    """ )) self.connect(self.svnRelocateAct, SIGNAL('triggered()'), self.__svnRelocate) self.actions.append(self.svnRelocateAct) self.svnRepoBrowserAct = E4Action(self.trUtf8('Repository Browser'), UI.PixmapCache.getIcon("vcsRepoBrowser.png"), self.trUtf8('Repository Browser...'), 0, 0, self, 'subversion_repo_browser') self.svnRepoBrowserAct.setStatusTip(self.trUtf8( 'Show the Repository Browser dialog' )) self.svnRepoBrowserAct.setWhatsThis(self.trUtf8( """Repository Browser""" """

    This shows the Repository Browser dialog.

    """ )) self.connect(self.svnRepoBrowserAct, SIGNAL('triggered()'), self.__svnRepoBrowser) self.actions.append(self.svnRepoBrowserAct) self.svnConfigAct = E4Action(self.trUtf8('Configure'), self.trUtf8('Configure...'), 0, 0, self, 'subversion_configure') self.svnConfigAct.setStatusTip(self.trUtf8( 'Show the configuration dialog with the Subversion page selected' )) self.svnConfigAct.setWhatsThis(self.trUtf8( """Configure""" """

    Show the configuration dialog with the Subversion page selected.

    """ )) self.connect(self.svnConfigAct, SIGNAL('triggered()'), self.__svnConfigure) self.actions.append(self.svnConfigAct) def initMenu(self, menu): """ Public method to generate the VCS menu. @param menu reference to the menu to be populated (QMenu) """ menu.clear() act = menu.addAction( UI.PixmapCache.getIcon( os.path.join("VcsPlugins", "vcsPySvn", "icons", "pysvn.png")), self.vcs.vcsName(), self._vcsInfoDisplay) font = act.font() font.setBold(True) act.setFont(font) menu.addSeparator() menu.addAction(self.vcsUpdateAct) menu.addAction(self.vcsCommitAct) menu.addSeparator() menu.addAction(self.vcsNewAct) menu.addAction(self.vcsExportAct) menu.addSeparator() menu.addAction(self.vcsTagAct) if self.vcs.otherData["standardLayout"]: menu.addAction(self.svnTagListAct) menu.addAction(self.svnBranchListAct) else: menu.addAction(self.svnListAct) menu.addSeparator() menu.addAction(self.vcsLogAct) menu.addAction(self.svnLogLimitedAct) menu.addAction(self.svnLogBrowserAct) menu.addSeparator() menu.addAction(self.vcsStatusAct) menu.addAction(self.svnChangeListsAct) menu.addAction(self.svnRepoInfoAct) menu.addSeparator() menu.addAction(self.vcsDiffAct) menu.addAction(self.svnExtDiffAct) menu.addAction(self.svnUrlDiffAct) menu.addSeparator() menu.addAction(self.vcsRevertAct) menu.addAction(self.vcsMergeAct) menu.addAction(self.vcsResolveAct) menu.addSeparator() menu.addAction(self.vcsSwitchAct) menu.addAction(self.svnRelocateAct) menu.addSeparator() menu.addAction(self.svnPropSetAct) menu.addAction(self.svnPropListAct) menu.addAction(self.svnPropDelAct) menu.addSeparator() menu.addAction(self.vcsCleanupAct) menu.addSeparator() menu.addAction(self.vcsCommandAct) menu.addAction(self.svnRepoBrowserAct) menu.addSeparator() menu.addAction(self.vcsPropsAct) menu.addSeparator() menu.addAction(self.svnConfigAct) def __svnResolve(self): """ Private slot used to resolve conflicts of the local project. """ self.vcs.svnResolve(self.project.ppath) def __svnPropList(self): """ Private slot used to list the properties of the project files. """ self.vcs.svnListProps(self.project.ppath, True) def __svnPropSet(self): """ Private slot used to set a property for the project files. """ self.vcs.svnSetProp(self.project.ppath, True) def __svnPropDel(self): """ Private slot used to delete a property for the project files. """ self.vcs.svnDelProp(self.project.ppath, True) def __svnTagList(self): """ Private slot used to list the tags of the project. """ self.vcs.svnListTagBranch(self.project.ppath, True) def __svnBranchList(self): """ Private slot used to list the branches of the project. """ self.vcs.svnListTagBranch(self.project.ppath, False) def __svnExtendedDiff(self): """ Private slot used to perform a svn diff with the selection of revisions. """ self.vcs.svnExtendedDiff(self.project.ppath) def __svnUrlDiff(self): """ Private slot used to perform a svn diff with the selection of repository URLs. """ self.vcs.svnUrlDiff(self.project.ppath) def __svnLogLimited(self): """ Private slot used to perform a svn log --limit. """ self.vcs.svnLogLimited(self.project.ppath) def __svnLogBrowser(self): """ Private slot used to browse the log of the current project. """ self.vcs.svnLogBrowser(self.project.ppath) def __svnInfo(self): """ Private slot used to show repository information for the local project. """ self.vcs.svnInfo(self.project.ppath, ".") def __svnRelocate(self): """ Private slot used to relocate the working copy to a new repository URL. """ self.vcs.svnRelocate(self.project.ppath) def __svnRepoBrowser(self): """ Private slot to open the repository browser. """ self.vcs.svnRepoBrowser(projectPath = self.project.ppath) def __svnConfigure(self): """ Private slot to open the configuration dialog. """ e4App().getObject("UserInterface").showPreferences("zzz_subversionPage") def __svnChangeLists(self): """ Private slot used to show a list of change lists. """ self.vcs.svnShowChangelists(self.project.ppath) eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnLogDialog.py0000644000175000001440000000013212261012650024717 xustar000000000000000030 mtime=1388582312.394082076 30 atime=1389081083.053724396 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnLogDialog.py0000644000175000001440000002140612261012650024454 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Module implementing a dialog to show the output of the svn log command process. """ import os import sys import pysvn from PyQt4.QtCore import * from PyQt4.QtGui import * from SvnUtilities import formatTime from SvnDialogMixin import SvnDialogMixin from Ui_SvnLogDialog import Ui_SvnLogDialog from SvnDiffDialog import SvnDiffDialog import Utilities class SvnLogDialog(QWidget, SvnDialogMixin, Ui_SvnLogDialog): """ Class implementing a dialog to show the output of the svn log command. The dialog is nonmodal. Clicking a link in the upper text pane shows a diff of the versions. """ def __init__(self, vcs, parent = None): """ Constructor @param vcs reference to the vcs object @param parent parent widget (QWidget) """ QWidget.__init__(self, parent) self.setupUi(self) SvnDialogMixin.__init__(self) self.buttonBox.button(QDialogButtonBox.Close).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Cancel).setDefault(True) self.vcs = vcs self.contents.setHtml(\ self.trUtf8('Processing your request, please wait...')) self.connect(self.contents, SIGNAL('anchorClicked(const QUrl&)'), self.__sourceChanged) self.flags = { 'A' : self.trUtf8('Added'), 'D' : self.trUtf8('Deleted'), 'M' : self.trUtf8('Modified') } self.revString = self.trUtf8('revision') self.diff = None self.client = self.vcs.getClient() self.client.callback_cancel = \ self._clientCancelCallback self.client.callback_get_login = \ self._clientLoginCallback self.client.callback_ssl_server_trust_prompt = \ self._clientSslServerTrustPromptCallback def start(self, fn, noEntries = 0): """ Public slot to start the svn log command. @param fn filename to show the log for (string) @param noEntries number of entries to show (integer) """ self.errorGroup.hide() fetchLimit = 10 QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) QApplication.processEvents() self.filename = fn dname, fname = self.vcs.splitPath(fn) opts = self.vcs.options['global'] + self.vcs.options['log'] verbose = "--verbose" in opts self.activateWindow() self.raise_() locker = QMutexLocker(self.vcs.vcsExecutionMutex) cwd = os.getcwd() os.chdir(dname) try: fetched = 0 logs = [] limit = noEntries or 9999999 while fetched < limit: flimit = min(fetchLimit, limit - fetched) if fetched == 0: revstart = pysvn.Revision(pysvn.opt_revision_kind.head) else: revstart = pysvn.Revision(\ pysvn.opt_revision_kind.number, nextRev) allLogs = self.client.log(fname, revision_start = revstart, discover_changed_paths = verbose, limit = flimit + 1, strict_node_history = False) if len(allLogs) <= flimit or self._clientCancelCallback(): logs.extend(allLogs) break else: logs.extend(allLogs[:-1]) nextRev = allLogs[-1]["revision"].number fetched += fetchLimit locker.unlock() self.contents.clear() self.__pegRev = None for log in logs: ver = QString.number(log["revision"].number) dstr = QString('%1 %2').arg(self.revString)\ .arg(ver) if self.__pegRev is None: self.__pegRev = int(ver) try: lv = QString.number(\ logs[logs.index(log) + 1]["revision"].number) url = QUrl() url.setScheme("file") url.setPath(self.filename) query = QByteArray() query.append(lv).append('_').append(ver) url.setEncodedQuery(query) dstr.append(' [')\ .append(self.trUtf8('diff to %1').arg(lv))\ .append(']') except IndexError: pass dstr.append('
    \n') self.contents.insertHtml(dstr) dstr = self.trUtf8('author: %1
    \n').arg(log["author"]) self.contents.insertHtml(dstr) dstr = self.trUtf8('date: %1
    \n').arg(formatTime(log["date"])) self.contents.insertHtml(dstr) self.contents.insertHtml('
    \n') for line in log["message"].splitlines(): self.contents.insertHtml(Utilities.html_encode(line)) self.contents.insertHtml('
    \n') if len(log['changed_paths']) > 0: self.contents.insertHtml('
    \n') for changeInfo in log['changed_paths']: dstr = QString('%1 %2')\ .arg(self.flags[changeInfo["action"]])\ .arg(changeInfo["path"]) if changeInfo["copyfrom_path"] is not None: dstr.append(self.trUtf8(" (copied from %1, revision %2)")\ .arg(changeInfo["copyfrom_path"])\ .arg(changeInfo["copyfrom_revision"].number)) dstr.append('
    \n') self.contents.insertHtml(dstr) self.contents.insertHtml('

    \n') except pysvn.ClientError, e: locker.unlock() self.__showError(e.args[0]) os.chdir(cwd) self.__finish() def __finish(self): """ Private slot called when the user pressed the button. """ QApplication.restoreOverrideCursor() self.buttonBox.button(QDialogButtonBox.Close).setEnabled(True) self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Close).setDefault(True) tc = self.contents.textCursor() tc.movePosition(QTextCursor.Start) self.contents.setTextCursor(tc) self.contents.ensureCursorVisible() self._cancel() def on_buttonBox_clicked(self, button): """ Private slot called by a button of the button box clicked. @param button button that was clicked (QAbstractButton) """ if button == self.buttonBox.button(QDialogButtonBox.Close): self.close() elif button == self.buttonBox.button(QDialogButtonBox.Cancel): self.__finish() def __sourceChanged(self, url): """ Private slot to handle the sourceChanged signal of the contents pane. @param url the url that was clicked (QUrl) """ self.contents.setSource(QUrl('')) filename = unicode(url.path()) if Utilities.isWindowsPlatform(): if filename.startswith("/"): filename = filename[1:] ver = QString(url.encodedQuery()) v1 = ver.section('_', 0, 0) v2 = ver.section('_', 1, 1) if v1.isEmpty() or v2.isEmpty(): return v1, ok1 = v1.toLong() v2, ok2 = v2.toLong() if not ok1 or not ok2: return self.contents.scrollToAnchor(ver) if self.diff is None: self.diff = SvnDiffDialog(self.vcs) self.diff.show() self.diff.start(filename, [v1, v2], pegRev = self.__pegRev) def __showError(self, msg): """ Private slot to show an error message. @param msg error message to show (string or QString) """ self.errorGroup.show() self.errors.insertPlainText(msg) self.errors.ensureCursorVisible()eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/__init__.py0000644000175000001440000000013212261012650024126 xustar000000000000000030 mtime=1388582312.396082102 30 atime=1389081083.053724396 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/__init__.py0000644000175000001440000000047112261012650023662 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Package implementing the vcs interface to Subversion It consists of the subversion class, the project helper classes and some Subversion specific dialogs. This package is based upon the pysvn interface. """ eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnMergeDialog.ui0000644000175000001440000000007411072705617025242 xustar000000000000000030 atime=1389081083.053724396 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnMergeDialog.ui0000644000175000001440000001205111072705617024766 0ustar00detlevusers00000000000000 SvnMergeDialog 0 0 456 152 Subversion Merge true Select to force the merge operation Enforce merge Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok Target: Enter the target <b>Target</b> <p>Enter the target for the merge operation into this field. Leave it empty to get the target URL from the working copy.</p> <p><b>Note:</b> This entry is only needed, if you enter revision numbers above.</p> true QComboBox::InsertAtTop true false 0 0 Enter an URL or a revision number <b>URL/Revision</b> <p>Enter an URL or a revision number to be merged into the working copy.</p> true true false 0 0 Enter an URL or a revision number <b>URL/Revision</b> <p>Enter an URL or a revision number to be merged into the working copy.</p> true true false 2. URL/Revision: 1. URL/Revision: qPixmapFromMimeSource tag1Combo tag2Combo targetCombo forceCheckBox buttonBox buttonBox accepted() SvnMergeDialog accept() 40 96 40 117 buttonBox rejected() SvnMergeDialog reject() 119 102 119 120 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnTagBranchListDialog.ui0000644000175000001440000000007411744565302026671 xustar000000000000000030 atime=1389081083.053724396 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnTagBranchListDialog.ui0000644000175000001440000000606711744565302026427 0ustar00detlevusers00000000000000 SvnTagBranchListDialog 0 0 634 494 Subversion Tag List <b>Subversion Tag/Branch List</b> <p>This dialog shows a list of the projects tags or branches.</p> true 0 3 <b>Tag/Branches List</b> <p>This shows a list of the projects tags or branches.</p> true false false true Revision Author Date Name 0 1 Errors true false Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Close qPixmapFromMimeSource tagList errors buttonBox eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnPropDelDialog.ui0000644000175000001440000000007411072705617025550 xustar000000000000000030 atime=1389081083.054724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnPropDelDialog.ui0000644000175000001440000000507411072705617025303 0ustar00detlevusers00000000000000 SvnPropDelDialog 0 0 494 98 Delete Subversion Property true Enter the name of the property to be deleted Select to apply the property recursively Apply &recursively Property &Name: propNameEdit Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok qPixmapFromMimeSource propNameEdit recurseCheckBox buttonBox accepted() SvnPropDelDialog accept() 37 77 37 95 buttonBox rejected() SvnPropDelDialog reject() 88 75 88 96 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnDialog.py0000644000175000001440000000013212261012650024255 xustar000000000000000030 mtime=1388582312.415082342 30 atime=1389081083.054724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnDialog.py0000644000175000001440000001171212261012650024011 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Module implementing a dialog to show the output of a pysvn action. """ import os import pysvn from PyQt4.QtCore import * from PyQt4.QtGui import * from SvnConst import svnNotifyActionMap from SvnDialogMixin import SvnDialogMixin from Ui_SvnDialog import Ui_SvnDialog import Preferences class SvnDialog(QDialog, SvnDialogMixin, Ui_SvnDialog): """ Class implementing a dialog to show the output of a pysvn action. """ def __init__(self, text, command, pysvnClient, parent = None, log = ""): """ Constructor @param text text to be shown by the label (string or QString) @param command svn command to be executed (display purposes only) (string or QString) @param pysvnClient reference to the pysvn client object (pysvn.Client) @keyparam parent parent widget (QWidget) @keyparam log optional log message (string or QString) """ QDialog.__init__(self, parent) self.setupUi(self) SvnDialogMixin.__init__(self, log) self.buttonBox.button(QDialogButtonBox.Close).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Cancel).setDefault(True) self.outputGroup.setTitle(text) self.errorGroup.hide() pysvnClient.callback_cancel = \ self._clientCancelCallback pysvnClient.callback_notify = \ self._clientNotifyCallback pysvnClient.callback_get_login = \ self._clientLoginCallback pysvnClient.callback_ssl_server_trust_prompt = \ self._clientSslServerTrustPromptCallback pysvnClient.callback_get_log_message = \ self._clientLogCallback self.__hasAddOrDelete = False command = unicode(command) if command: self.resultbox.append(command) self.resultbox.append('') self.show() QApplication.processEvents() def _clientNotifyCallback(self, eventDict): """ Protected method called by the client to send events @param eventDict dictionary containing the notification event """ msg = QString() if eventDict["action"] == pysvn.wc_notify_action.update_completed: msg = self.trUtf8("Revision %1.\n").arg(eventDict["revision"].number) elif eventDict["path"] != "" and \ eventDict["action"] in svnNotifyActionMap and \ svnNotifyActionMap[eventDict["action"]] is not None: mime = eventDict["mime_type"] == "application/octet-stream" and \ self.trUtf8(" (binary)") or QString("") msg = self.trUtf8("%1 %2%3\n")\ .arg(self.trUtf8(svnNotifyActionMap[eventDict["action"]]))\ .arg(eventDict["path"])\ .arg(mime) if eventDict["action"] in \ [pysvn.wc_notify_action.add, pysvn.wc_notify_action.commit_added, pysvn.wc_notify_action.commit_deleted, pysvn.wc_notify_action.delete, pysvn.wc_notify_action.update_add, pysvn.wc_notify_action.update_delete]: self.__hasAddOrDelete = True if not msg.isEmpty(): self.showMessage(msg) def showMessage(self, msg): """ Public slot to show a message. @param msg message to show (string or QString) """ self.resultbox.insertPlainText(msg) self.resultbox.ensureCursorVisible() QApplication.processEvents() def showError(self, msg): """ Public slot to show an error message. @param msg error message to show (string or QString) """ self.errorGroup.show() self.errors.insertPlainText(msg) self.errors.ensureCursorVisible() QApplication.processEvents() def finish(self): """ Public slot called when the process finished or the user pressed the button. """ self.buttonBox.button(QDialogButtonBox.Close).setEnabled(True) self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Close).setDefault(True) self._cancel() if Preferences.getVCS("AutoClose"): self.accept() def on_buttonBox_clicked(self, button): """ Private slot called by a button of the button box clicked. @param button button that was clicked (QAbstractButton) """ if button == self.buttonBox.button(QDialogButtonBox.Close): self.close() elif button == self.buttonBox.button(QDialogButtonBox.Cancel): self.finish() def hasAddOrDelete(self): """ Public method to check, if the last action contained an add or delete. """ return self.__hasAddOrDelete eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnChangeListsDialog.ui0000644000175000001440000000007411762452421026405 xustar000000000000000030 atime=1389081083.063724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnChangeListsDialog.ui0000644000175000001440000000615111762452421026135 0ustar00detlevusers00000000000000 SvnChangeListsDialog 0 0 519 494 Subversion Change Lists true Change Lists: 0 1 <b>Change Lists</b> <p>Select a change list here to see the associated files in the list below.</p> true true 0 2 <b>Files</b> <p>This shows a list of files associated with the change list selected above.</p> true Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Close changeLists filesList buttonBox buttonBox accepted() SvnChangeListsDialog accept() 248 254 157 274 buttonBox rejected() SvnChangeListsDialog reject() 316 260 286 274 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnStatusDialog.py0000644000175000001440000000013112261012650025460 xustar000000000000000029 mtime=1388582312.42908252 30 atime=1389081083.063724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnStatusDialog.py0000644000175000001440000007653612261012650025234 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Module implementing a dialog to show the output of the svn status command process. """ import types import os import pysvn from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQMessageBox from KdeQt.KQApplication import e4App from SvnConst import svnStatusMap from SvnDialogMixin import SvnDialogMixin from SvnDiffDialog import SvnDiffDialog from Ui_SvnStatusDialog import Ui_SvnStatusDialog import Preferences import Utilities class SvnStatusDialog(QWidget, SvnDialogMixin, Ui_SvnStatusDialog): """ Class implementing a dialog to show the output of the svn status command process. """ def __init__(self, vcs, parent = None): """ Constructor @param vcs reference to the vcs object @param parent parent widget (QWidget) """ QWidget.__init__(self, parent) self.setupUi(self) SvnDialogMixin.__init__(self) self.__toBeCommittedColumn = 0 self.__changelistColumn = 1 self.__statusColumn = 2 self.__propStatusColumn = 3 self.__lockedColumn = 4 self.__historyColumn = 5 self.__switchedColumn = 6 self.__lockinfoColumn = 7 self.__upToDateColumn = 8 self.__pathColumn = 12 self.__lastColumn = self.statusList.columnCount() self.refreshButton = \ self.buttonBox.addButton(self.trUtf8("Refresh"), QDialogButtonBox.ActionRole) self.refreshButton.setToolTip(self.trUtf8("Press to refresh the status display")) self.refreshButton.setEnabled(False) self.buttonBox.button(QDialogButtonBox.Close).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Cancel).setDefault(True) self.diff = None self.vcs = vcs self.connect(self.vcs, SIGNAL("committed()"), self.__committed) self.statusList.headerItem().setText(self.__lastColumn, "") self.statusList.header().setSortIndicator(self.__pathColumn, Qt.AscendingOrder) if pysvn.svn_version < (1, 5, 0) or pysvn.version < (1, 6, 0): self.statusList.header().hideSection(self.__changelistColumn) self.menuactions = [] self.menu = QMenu() self.menuactions.append(self.menu.addAction(\ self.trUtf8("Commit changes to repository..."), self.__commit)) self.menu.addSeparator() self.menuactions.append(self.menu.addAction(\ self.trUtf8("Add to repository"), self.__add)) self.menuactions.append(self.menu.addAction(\ self.trUtf8("Show differences"), self.__diff)) self.menuactions.append(self.menu.addAction(\ self.trUtf8("Revert changes"), self.__revert)) self.menuactions.append(self.menu.addAction(\ self.trUtf8("Restore missing"), self.__restoreMissing)) if pysvn.svn_version >= (1, 5, 0) and pysvn.version >= (1, 6, 0): self.menu.addSeparator() self.menuactions.append(self.menu.addAction( self.trUtf8("Add to Changelist"), self.__addToChangelist)) self.menuactions.append(self.menu.addAction( self.trUtf8("Remove from Changelist"), self.__removeFromChangelist)) if self.vcs.versionStr >= '1.2.0': self.menu.addSeparator() self.menuactions.append(self.menu.addAction(self.trUtf8("Lock"), self.__lock)) self.menuactions.append(self.menu.addAction(self.trUtf8("Unlock"), self.__unlock)) self.menuactions.append(self.menu.addAction(self.trUtf8("Break lock"), self.__breakLock)) self.menuactions.append(self.menu.addAction(self.trUtf8("Steal lock"), self.__stealLock)) self.menu.addSeparator() self.menuactions.append(self.menu.addAction(self.trUtf8("Adjust column sizes"), self.__resizeColumns)) for act in self.menuactions: act.setEnabled(False) self.statusList.setContextMenuPolicy(Qt.CustomContextMenu) self.connect(self.statusList, SIGNAL("customContextMenuRequested(const QPoint &)"), self.__showContextMenu) self.modifiedIndicators = QStringList() self.modifiedIndicators.append( self.trUtf8(svnStatusMap[pysvn.wc_status_kind.added])) self.modifiedIndicators.append( self.trUtf8(svnStatusMap[pysvn.wc_status_kind.deleted])) self.modifiedIndicators.append( self.trUtf8(svnStatusMap[pysvn.wc_status_kind.modified])) self.unversionedIndicators = QStringList() self.unversionedIndicators.append( self.trUtf8(svnStatusMap[pysvn.wc_status_kind.unversioned])) self.lockedIndicators = QStringList() self.lockedIndicators.append(self.trUtf8('locked')) self.stealBreakLockIndicators = QStringList() self.stealBreakLockIndicators.append(self.trUtf8('other lock')) self.stealBreakLockIndicators.append(self.trUtf8('stolen lock')) self.stealBreakLockIndicators.append(self.trUtf8('broken lock')) self.unlockedIndicators = QStringList() self.unlockedIndicators.append(self.trUtf8('not locked')) self.missingIndicators = QStringList() self.missingIndicators.append( self.trUtf8(svnStatusMap[pysvn.wc_status_kind.missing])) self.lockinfo = { ' ' : self.trUtf8('not locked'), 'L' : self.trUtf8('locked'), 'O' : self.trUtf8('other lock'), 'S' : self.trUtf8('stolen lock'), 'B' : self.trUtf8('broken lock'), } self.yesno = [self.trUtf8('no'), self.trUtf8('yes')] self.client = self.vcs.getClient() self.client.callback_cancel = \ self._clientCancelCallback self.client.callback_get_login = \ self._clientLoginCallback self.client.callback_ssl_server_trust_prompt = \ self._clientSslServerTrustPromptCallback self.show() QApplication.processEvents() def __resort(self): """ Private method to resort the tree. """ self.statusList.sortItems(self.statusList.sortColumn(), self.statusList.header().sortIndicatorOrder()) def __resizeColumns(self): """ Private method to resize the list columns. """ self.statusList.header().resizeSections(QHeaderView.ResizeToContents) self.statusList.header().setStretchLastSection(True) def __generateItem(self, changelist, status, propStatus, locked, history, switched, lockinfo, uptodate, revision, change, author, path): """ Private method to generate a status item in the status list. @param changelist name of the changelist (string) @param status text status (pysvn.wc_status_kind) @param propStatus property status (pysvn.wc_status_kind) @param locked locked flag (boolean) @param history history flag (boolean) @param switched switched flag (boolean) @param lockinfo lock indicator (string) @param uptodate up to date flag (boolean) @param revision revision (integer) @param change revision of last change (integer) @param author author of the last change (string or QString) @param path path of the file or directory (string or QString) """ statusText = self.trUtf8(svnStatusMap[status]) itm = QTreeWidgetItem(self.statusList) itm.setData(0, Qt.DisplayRole, "") itm.setData(1, Qt.DisplayRole, changelist) itm.setData(2, Qt.DisplayRole, statusText) itm.setData(3, Qt.DisplayRole, self.trUtf8(svnStatusMap[propStatus])) itm.setData(4, Qt.DisplayRole, self.yesno[locked]) itm.setData(5, Qt.DisplayRole, self.yesno[history]) itm.setData(6, Qt.DisplayRole, self.yesno[switched]) itm.setData(7, Qt.DisplayRole, self.lockinfo[lockinfo]) itm.setData(8, Qt.DisplayRole, self.yesno[uptodate]) itm.setData(9, Qt.DisplayRole, revision) itm.setData(10, Qt.DisplayRole, change) itm.setData(11, Qt.DisplayRole, author) itm.setData(12, Qt.DisplayRole, path) itm.setTextAlignment(1, Qt.AlignLeft) itm.setTextAlignment(2, Qt.AlignHCenter) itm.setTextAlignment(3, Qt.AlignHCenter) itm.setTextAlignment(4, Qt.AlignHCenter) itm.setTextAlignment(5, Qt.AlignHCenter) itm.setTextAlignment(6, Qt.AlignHCenter) itm.setTextAlignment(7, Qt.AlignHCenter) itm.setTextAlignment(8, Qt.AlignHCenter) itm.setTextAlignment(9, Qt.AlignRight) itm.setTextAlignment(10, Qt.AlignRight) itm.setTextAlignment(11, Qt.AlignLeft) itm.setTextAlignment(12, Qt.AlignLeft) if status in [pysvn.wc_status_kind.added, pysvn.wc_status_kind.deleted, pysvn.wc_status_kind.modified] or \ propStatus in [pysvn.wc_status_kind.added, pysvn.wc_status_kind.deleted, pysvn.wc_status_kind.modified]: itm.setCheckState(self.__toBeCommittedColumn, Qt.Checked) if statusText not in self.__statusFilters: self.__statusFilters.append(statusText) def start(self, fn): """ Public slot to start the svn status command. @param fn filename(s)/directoryname(s) to show the status of (string or list of strings) """ self.errorGroup.hide() for act in self.menuactions: act.setEnabled(False) self.addButton.setEnabled(False) self.commitButton.setEnabled(False) self.diffButton.setEnabled(False) self.revertButton.setEnabled(False) self.restoreButton.setEnabled(False) self.statusFilterCombo.clear() self.__statusFilters = [] QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) QApplication.processEvents() self.args = fn self.setWindowTitle(self.trUtf8('Subversion Status')) self.activateWindow() self.raise_() if type(fn) is types.ListType: self.dname, fnames = self.vcs.splitPathList(fn) else: self.dname, fname = self.vcs.splitPath(fn) fnames = [fname] opts = self.vcs.options['global'] + self.vcs.options['status'] verbose = "--verbose" in opts recurse = "--non-recursive" not in opts update = "--show-updates" in opts hideChangelistColumn = True hidePropertyStatusColumn = True hideLockColumns = True hideUpToDateColumn = True hideHistoryColumn = True hideSwitchedColumn = True locker = QMutexLocker(self.vcs.vcsExecutionMutex) cwd = os.getcwd() os.chdir(self.dname) try: for name in fnames: # step 1: determine changelists and their files changelistsDict = {} if hasattr(self.client, 'get_changelist'): if recurse: depth = pysvn.depth.infinity else: depth = pysvn.depth.immediate changelists = self.client.get_changelist(name, depth = depth) for fpath, changelist in changelists: fpath = Utilities.normcasepath(fpath) changelistsDict[fpath] = changelist hideChangelistColumn = hideChangelistColumn and \ len(changelistsDict) == 0 # step 2: determine status of files allFiles = self.client.status(name, recurse = recurse, get_all = verbose, ignore = True, update = update) counter = 0 for file in allFiles: uptodate = True if file.repos_text_status != pysvn.wc_status_kind.none: uptodate = uptodate and \ file.repos_text_status != pysvn.wc_status_kind.modified if file.repos_prop_status != pysvn.wc_status_kind.none: uptodate = uptodate and \ file.repos_prop_status != pysvn.wc_status_kind.modified lockState = " " if file.entry is not None and \ hasattr(file.entry, 'lock_token') and \ file.entry.lock_token is not None: lockState = "L" if hasattr(file, 'repos_lock') and update: if lockState == "L" and file.repos_lock is None: lockState = "B" elif lockState == " " and file.repos_lock is not None: lockState = "O" elif lockState == "L" and file.repos_lock is not None and \ file.entry.lock_token != file.repos_lock["token"]: lockState = "S" fpath = Utilities.normcasepath(os.path.join(self.dname, file.path)) if fpath in changelistsDict: changelist = changelistsDict[fpath] else: changelist = "" hidePropertyStatusColumn = hidePropertyStatusColumn and \ file.prop_status in [ pysvn.wc_status_kind.none, pysvn.wc_status_kind.normal ] hideLockColumns = hideLockColumns and \ not file.is_locked and lockState == " " hideUpToDateColumn = hideUpToDateColumn and uptodate hideHistoryColumn = hideHistoryColumn and not file.is_copied hideSwitchedColumn = hideSwitchedColumn and not file.is_switched self.__generateItem( changelist, file.text_status, file.prop_status, file.is_locked, file.is_copied, file.is_switched, lockState, uptodate, file.entry and file.entry.revision.number or "", file.entry and file.entry.commit_revision.number or "", file.entry and file.entry.commit_author or "", file.path ) counter += 1 if counter == 30: # check for cancel every 30 items counter = 0 if self._clientCancelCallback(): break if self._clientCancelCallback(): break except pysvn.ClientError, e: self.__showError(e.args[0]+'\n') self.statusList.setColumnHidden(self.__propStatusColumn, hidePropertyStatusColumn) self.statusList.setColumnHidden(self.__lockedColumn, hideLockColumns) self.statusList.setColumnHidden(self.__lockinfoColumn, hideLockColumns) self.statusList.setColumnHidden(self.__upToDateColumn, hideUpToDateColumn) self.statusList.setColumnHidden(self.__historyColumn, hideHistoryColumn) self.statusList.setColumnHidden(self.__switchedColumn, hideSwitchedColumn) self.statusList.setColumnHidden(self.__changelistColumn, hideChangelistColumn) locker.unlock() self.__finish() os.chdir(cwd) def __finish(self): """ Private slot called when the process finished or the user pressed the button. """ QApplication.restoreOverrideCursor() self.buttonBox.button(QDialogButtonBox.Close).setEnabled(True) self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Close).setDefault(True) self.refreshButton.setEnabled(True) self.__updateButtons() self.__updateCommitButton() self.__statusFilters.sort() self.__statusFilters.insert(0, "<%s>" % self.trUtf8("all")) self.statusFilterCombo.addItems(self.__statusFilters) for act in self.menuactions: act.setEnabled(True) self.__resizeColumns() self.__resort() self._cancel() def on_buttonBox_clicked(self, button): """ Private slot called by a button of the button box clicked. @param button button that was clicked (QAbstractButton) """ if button == self.buttonBox.button(QDialogButtonBox.Close): self.close() elif button == self.buttonBox.button(QDialogButtonBox.Cancel): self.__finish() elif button == self.refreshButton: self.on_refreshButton_clicked() @pyqtSignature("") def on_refreshButton_clicked(self): """ Private slot to refresh the status display. """ self.buttonBox.button(QDialogButtonBox.Close).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(True) self.buttonBox.button(QDialogButtonBox.Cancel).setDefault(True) self.refreshButton.setEnabled(False) self.statusList.clear() self.shouldCancel = False self.start(self.args) def __showError(self, msg): """ Private slot to show an error message. @param msg error message to show (string or QString) """ self.errorGroup.show() self.errors.insertPlainText(msg) self.errors.ensureCursorVisible() @pyqtSignature("") def on_statusList_itemSelectionChanged(self): """ Private slot to act upon changes of selected items. """ self.__updateButtons() @pyqtSignature("QTreeWidgetItem*, int") def on_statusList_itemChanged(self, item, column): """ Private slot to act upon item changes. @param item reference to the changed item (QTreeWidgetItem) @param column index of column that changed (integer) """ if column == self.__toBeCommittedColumn: self.__updateCommitButton() def __updateButtons(self): """ Private method to update the VCS buttons status. """ modified = len(self.__getModifiedItems()) unversioned = len(self.__getUnversionedItems()) missing = len(self.__getMissingItems()) self.addButton.setEnabled(unversioned) self.diffButton.setEnabled(modified) self.revertButton.setEnabled(modified) self.restoreButton.setEnabled(missing) def __updateCommitButton(self): """ Private method to update the Commit button status. """ commitable = len(self.__getCommitableItems()) self.commitButton.setEnabled(commitable) @pyqtSignature("") def on_commitButton_clicked(self): """ Private slot to handle the press of the Commit button. """ self.__commit() @pyqtSignature("") def on_addButton_clicked(self): """ Private slot to handle the press of the Add button. """ self.__add() @pyqtSignature("") def on_diffButton_clicked(self): """ Private slot to handle the press of the Differences button. """ self.__diff() @pyqtSignature("") def on_revertButton_clicked(self): """ Private slot to handle the press of the Revert button. """ self.__revert() @pyqtSignature("") def on_restoreButton_clicked(self): """ Private slot to handle the press of the Restore button. """ self.__restoreMissing() @pyqtSignature("QString") def on_statusFilterCombo_activated(self, txt): """ Private slot to react to the selection of a status filter. @param txt selected status filter (QString) """ if txt == "<%s>" % self.trUtf8("all"): for topIndex in range(self.statusList.topLevelItemCount()): topItem = self.statusList.topLevelItem(topIndex) topItem.setHidden(False) else: for topIndex in range(self.statusList.topLevelItemCount()): topItem = self.statusList.topLevelItem(topIndex) topItem.setHidden(topItem.text(self.__statusColumn) != txt) ############################################################################ ## Context menu handling methods ############################################################################ def __showContextMenu(self, coord): """ Protected slot to show the context menu of the status list. @param coord the position of the mouse pointer (QPoint) """ self.menu.popup(self.mapToGlobal(coord)) def __commit(self): """ Private slot to handle the Commit context menu entry. """ names = [os.path.join(self.dname, unicode(itm.text(self.__pathColumn))) \ for itm in self.__getCommitableItems()] if not names: KQMessageBox.information(self, self.trUtf8("Commit"), self.trUtf8("""There are no items selected to be committed.""")) return if Preferences.getVCS("AutoSaveFiles"): vm = e4App().getObject("ViewManager") for name in names: vm.saveEditor(name) self.vcs.vcsCommit(names, '') def __committed(self): """ Private slot called after the commit has finished. """ if self.isVisible(): self.on_refreshButton_clicked() self.vcs.checkVCSStatus() def __add(self): """ Private slot to handle the Add context menu entry. """ names = [os.path.join(self.dname, unicode(itm.text(self.__pathColumn))) \ for itm in self.__getUnversionedItems()] if not names: KQMessageBox.information(self, self.trUtf8("Add"), self.trUtf8("""There are no unversioned entries available/selected.""")) return self.vcs.vcsAdd(names) self.on_refreshButton_clicked() project = e4App().getObject("Project") for name in names: project.getModel().updateVCSStatus(name) def __revert(self): """ Private slot to handle the Revert context menu entry. """ names = [os.path.join(self.dname, unicode(itm.text(self.__pathColumn))) \ for itm in self.__getModifiedItems()] if not names: KQMessageBox.information(self, self.trUtf8("Revert"), self.trUtf8("""There are no uncommitted changes available/selected.""")) return self.vcs.vcsRevert(names) self.raise_() self.activateWindow() self.on_refreshButton_clicked() self.vcs.checkVCSStatus() def __restoreMissing(self): """ Private slot to handle the Restore Missing context menu entry. """ names = [os.path.join(self.dname, unicode(itm.text(self.__pathColumn))) \ for itm in self.__getMissingItems()] if not names: KQMessageBox.information(self, self.trUtf8("Revert"), self.trUtf8("""There are no missing items available/selected.""")) return self.vcs.vcsRevert(names) self.on_refreshButton_clicked() self.vcs.checkVCSStatus() def __diff(self): """ Private slot to handle the Diff context menu entry. """ names = [os.path.join(self.dname, unicode(itm.text(self.__pathColumn))) \ for itm in self.__getModifiedItems()] if not names: KQMessageBox.information(self, self.trUtf8("Differences"), self.trUtf8("""There are no uncommitted changes available/selected.""")) return if self.diff is None: self.diff = SvnDiffDialog(self.vcs) self.diff.show() QApplication.processEvents() self.diff.start(names) def __lock(self): """ Private slot to handle the Lock context menu entry. """ names = [os.path.join(self.dname, unicode(itm.text(self.__pathColumn))) \ for itm in self.__getLockActionItems(self.unlockedIndicators)] if not names: KQMessageBox.information(self, self.trUtf8("Lock"), self.trUtf8("""There are no unlocked files available/selected.""")) return self.vcs.svnLock(names, parent = self) self.on_refreshButton_clicked() def __unlock(self): """ Private slot to handle the Unlock context menu entry. """ names = [os.path.join(self.dname, unicode(itm.text(self.__pathColumn))) \ for itm in self.__getLockActionItems(self.lockedIndicators)] if not names: KQMessageBox.information(self, self.trUtf8("Unlock"), self.trUtf8("""There are no locked files available/selected.""")) return self.vcs.svnUnlock(names, parent = self) self.on_refreshButton_clicked() def __breakLock(self): """ Private slot to handle the Break Lock context menu entry. """ names = [os.path.join(self.dname, unicode(itm.text(self.__pathColumn))) \ for itm in self.__getLockActionItems(self.stealBreakLockIndicators)] if not names: KQMessageBox.information(self, self.trUtf8("Break Lock"), self.trUtf8("""There are no locked files available/selected.""")) return self.vcs.svnUnlock(names, parent = self, breakIt = True) self.on_refreshButton_clicked() def __stealLock(self): """ Private slot to handle the Break Lock context menu entry. """ names = [os.path.join(self.dname, unicode(itm.text(self.__pathColumn))) \ for itm in self.__getLockActionItems(self.stealBreakLockIndicators)] if not names: KQMessageBox.information(self, self.trUtf8("Steal Lock"), self.trUtf8("""There are no locked files available/selected.""")) return self.vcs.svnLock(names, parent=self, stealIt=True) self.on_refreshButton_clicked() def __addToChangelist(self): """ Private slot to add entries to a changelist. """ names = [os.path.join(self.dname, unicode(itm.text(self.__pathColumn))) \ for itm in self.__getNonChangelistItems()] if not names: KQMessageBox.information(self, self.trUtf8("Remove from Changelist"), self.trUtf8( """There are no files available/selected not """ """belonging to a changelist.""" ) ) return self.vcs.svnAddToChangelist(names) self.on_refreshButton_clicked() def __removeFromChangelist(self): """ Private slot to remove entries from their changelists. """ names = [os.path.join(self.dname, unicode(itm.text(self.__pathColumn))) \ for itm in self.__getChangelistItems()] if not names: KQMessageBox.information(self, self.trUtf8("Remove from Changelist"), self.trUtf8( """There are no files available/selected belonging to a changelist.""" ) ) return self.vcs.svnRemoveFromChangelist(names) self.on_refreshButton_clicked() def __getCommitableItems(self): """ Private method to retrieve all entries the user wants to commit. @return list of all items, the user has checked """ commitableItems = [] for index in range(self.statusList.topLevelItemCount()): itm = self.statusList.topLevelItem(index) if itm.checkState(self.__toBeCommittedColumn) == Qt.Checked: commitableItems.append(itm) return commitableItems def __getModifiedItems(self): """ Private method to retrieve all entries, that have a modified status. @return list of all items with a modified status """ modifiedItems = [] for itm in self.statusList.selectedItems(): if self.modifiedIndicators.contains(itm.text(self.__statusColumn)) or \ self.modifiedIndicators.contains(itm.text(self.__propStatusColumn)): modifiedItems.append(itm) return modifiedItems def __getUnversionedItems(self): """ Private method to retrieve all entries, that have an unversioned status. @return list of all items with an unversioned status """ unversionedItems = [] for itm in self.statusList.selectedItems(): if self.unversionedIndicators.contains(itm.text(self.__statusColumn)): unversionedItems.append(itm) return unversionedItems def __getMissingItems(self): """ Private method to retrieve all entries, that have a missing status. @return list of all items with a missing status """ missingItems = [] for itm in self.statusList.selectedItems(): if self.missingIndicators.contains(itm.text(self.__statusColumn)): missingItems.append(itm) return missingItems def __getLockActionItems(self, indicators): """ Private method to retrieve all entries, that have a locked status. @return list of all items with a locked status """ lockitems = [] for itm in self.statusList.selectedItems(): if indicators.contains(itm.text(self.__lockinfoColumn)): lockitems.append(itm) return lockitems def __getChangelistItems(self): """ Private method to retrieve all entries, that are members of a changelist. @return list of all items belonging to a changelist """ clitems = [] for itm in self.statusList.selectedItems(): if not itm.text(self.__changelistColumn).isEmpty(): clitems.append(itm) return clitems def __getNonChangelistItems(self): """ Private method to retrieve all entries, that are not members of a changelist. @return list of all items not belonging to a changelist """ clitems = [] for itm in self.statusList.selectedItems(): if itm.text(self.__changelistColumn).isEmpty(): clitems.append(itm) return clitems eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnBlameDialog.py0000644000175000001440000000013212261012650025216 xustar000000000000000030 mtime=1388582312.432082558 30 atime=1389081083.063724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnBlameDialog.py0000644000175000001440000001061712261012650024755 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Module implementing a dialog to show the output of the svn blame command. """ import os import sys import pysvn from PyQt4.QtCore import * from PyQt4.QtGui import * from SvnDialogMixin import SvnDialogMixin from Ui_SvnBlameDialog import Ui_SvnBlameDialog import Utilities class SvnBlameDialog(QDialog, SvnDialogMixin, Ui_SvnBlameDialog): """ Class implementing a dialog to show the output of the svn blame command. """ def __init__(self, vcs, parent = None): """ Constructor @param vcs reference to the vcs object @param parent parent widget (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) SvnDialogMixin.__init__(self) self.buttonBox.button(QDialogButtonBox.Close).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Cancel).setDefault(True) self.vcs = vcs self.blameList.headerItem().setText(self.blameList.columnCount(), "") font = QFont(self.blameList.font()) if Utilities.isWindowsPlatform(): font.setFamily("Lucida Console") else: font.setFamily("Monospace") self.blameList.setFont(font) self.client = self.vcs.getClient() self.client.callback_cancel = \ self._clientCancelCallback self.client.callback_get_login = \ self._clientLoginCallback self.client.callback_ssl_server_trust_prompt = \ self._clientSslServerTrustPromptCallback def start(self, fn): """ Public slot to start the svn status command. @param fn filename to show the log for (string) """ self.errorGroup.hide() self.activateWindow() dname, fname = self.vcs.splitPath(fn) locker = QMutexLocker(self.vcs.vcsExecutionMutex) cwd = os.getcwd() os.chdir(dname) try: annotations = self.client.annotate(fname) locker.unlock() for annotation in annotations: self.__generateItem(annotation["revision"].number, annotation["author"], annotation["number"] + 1, annotation["line"]) except pysvn.ClientError, e: locker.unlock() self.__showError(e.args[0]+'\n') self.__finish() os.chdir(cwd) def __finish(self): """ Private slot called when the process finished or the user pressed the button. """ self.buttonBox.button(QDialogButtonBox.Close).setEnabled(True) self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Close).setDefault(True) self.__resizeColumns() self._cancel() def on_buttonBox_clicked(self, button): """ Private slot called by a button of the button box clicked. @param button button that was clicked (QAbstractButton) """ if button == self.buttonBox.button(QDialogButtonBox.Close): self.close() elif button == self.buttonBox.button(QDialogButtonBox.Cancel): self.__finish() def __resizeColumns(self): """ Private method to resize the list columns. """ self.blameList.header().resizeSections(QHeaderView.ResizeToContents) self.blameList.header().setStretchLastSection(True) def __generateItem(self, revision, author, lineno, text): """ Private method to generate a tag item in the taglist. @param revision revision string (integer) @param author author of the tag (string or QString) @param lineno line number (integer) @param text text of the line (string or QString) """ itm = QTreeWidgetItem(self.blameList, QStringList() << "%d" % revision << author << "%d" % lineno << text) itm.setTextAlignment(0, Qt.AlignRight) itm.setTextAlignment(2, Qt.AlignRight) def __showError(self, msg): """ Private slot to show an error message. @param msg error message to show (string or QString) """ self.errorGroup.show() self.errors.insertPlainText(msg) self.errors.ensureCursorVisible() eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnUrlSelectionDialog.py0000644000175000001440000000013212261012650026606 xustar000000000000000030 mtime=1388582312.435082596 30 atime=1389081083.063724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnUrlSelectionDialog.py0000644000175000001440000001277212261012650026351 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing a dialog to enter the URLs for the svn diff command. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQMessageBox from KdeQt.KQApplication import e4App import pysvn from Ui_SvnUrlSelectionDialog import Ui_SvnUrlSelectionDialog import Utilities class SvnUrlSelectionDialog(QDialog, Ui_SvnUrlSelectionDialog): """ Class implementing a dialog to enter the URLs for the svn diff command. """ def __init__(self, vcs, tagsList, branchesList, path, parent = None): """ Constructor @param vcs reference to the vcs object @param tagsList list of tags (QStringList) @param branchesList list of branches (QStringList) @param path pathname to determine the repository URL from (string or QString) @param parent parent widget of the dialog (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) if not hasattr(pysvn.Client(), 'diff_summarize'): self.summaryCheckBox.setEnabled(False) self.summaryCheckBox.setChecked(False) self.vcs = vcs self.tagsList = tagsList self.branchesList = branchesList self.typeCombo1.addItems(QStringList() << "trunk/" << "tags/" << "branches/") self.typeCombo2.addItems(QStringList() << "trunk/" << "tags/" << "branches/") reposURL = self.vcs.svnGetReposName(path) if reposURL is None: KQMessageBox.critical(None, self.trUtf8("Subversion Error"), self.trUtf8("""The URL of the project repository could not be""" """ retrieved from the working copy. The operation will""" """ be aborted""")) self.reject() return if self.vcs.otherData["standardLayout"]: # determine the base path of the project in the repository rx_base = QRegExp('(.+/)(trunk|tags|branches).*') if not rx_base.exactMatch(reposURL): KQMessageBox.critical(None, self.trUtf8("Subversion Error"), self.trUtf8("""The URL of the project repository has an""" """ invalid format. The operation will""" """ be aborted""")) self.reject() return reposRoot = unicode(rx_base.cap(1)) self.repoRootLabel1.setText(reposRoot) self.repoRootLabel2.setText(reposRoot) else: project = e4App().getObject('Project') if Utilities.normcasepath(path) != \ Utilities.normcasepath(project.getProjectPath()): path = project.getRelativePath(path) reposURL = reposURL.replace(path, '') self.repoRootLabel1.hide() self.typeCombo1.hide() self.labelCombo1.addItems(QStringList(reposURL) + self.vcs.tagsList) self.labelCombo1.setEnabled(True) self.repoRootLabel2.hide() self.typeCombo2.hide() self.labelCombo2.addItems(QStringList(reposURL) + self.vcs.tagsList) self.labelCombo2.setEnabled(True) def __changeLabelCombo(self, labelCombo, type_): """ Private method used to change the label combo depending on the selected type. @param labelCombo reference to the labelCombo object (QComboBox) @param type type string (QString) """ if type_ == "trunk/": labelCombo.clear() labelCombo.setEditText("") labelCombo.setEnabled(False) elif type_ == "tags/": labelCombo.clear() labelCombo.clearEditText() labelCombo.addItems(self.tagsList) labelCombo.setEnabled(True) elif type_ == "branches/": labelCombo.clear() labelCombo.clearEditText() labelCombo.addItems(self.branchesList) labelCombo.setEnabled(True) @pyqtSignature("QString") def on_typeCombo1_currentIndexChanged(self, type_): """ Private slot called when the selected type was changed. @param type_ selected type (QString) """ self.__changeLabelCombo(self.labelCombo1, type_) @pyqtSignature("QString") def on_typeCombo2_currentIndexChanged(self, type_): """ Private slot called when the selected type was changed. @param type_ selected type (QString) """ self.__changeLabelCombo(self.labelCombo2, type_) def getURLs(self): """ Public method to get the entered URLs. @return tuple of list of two URL strings (list of strings) and a flag indicating a diff summary (boolean) """ if self.vcs.otherData["standardLayout"]: url1 = unicode(self.repoRootLabel1.text() + \ self.typeCombo1.currentText() + \ self.labelCombo1.currentText()) url2 = unicode(self.repoRootLabel2.text() + \ self.typeCombo2.currentText() + \ self.labelCombo2.currentText()) else: url1 = unicode(self.labelCombo1.currentText()) url2 = unicode(self.labelCombo2.currentText()) return [url1, url2], self.summaryCheckBox.isChecked() eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnCommandDialog.ui0000644000175000001440000000007411744565466025575 xustar000000000000000030 atime=1389081083.064724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnCommandDialog.ui0000644000175000001440000001373611744565466025334 0ustar00detlevusers00000000000000 SvnCommandDialog 0 0 628 137 Subversion Command Subversion Command: 0 0 Enter the Subversion command to be executed with all necessary parameters <b>Subversion Command</b> <p>Enter the Subversion command to be executed including all necessary parameters. If a parameter of the commandline includes a space you have to surround this parameter by single or double quotes. Do not include the name of the subversion client executable (i.e. svn).</p> true QComboBox::InsertAtTop true false Select the working directory via a directory selection dialog <b>Working directory</b> <p>Select the working directory for the Subversion command via a directory selection dialog.</p> ... 0 0 Enter the working directory for the Subversion command <b>Working directory</b> <p>Enter the working directory for the Subversion command. This is an optional entry. The button to the right will open a directory selection dialog.</p> true QComboBox::InsertAtTop true false Working Directory:<br>(optional) 0 0 Project Directory: 0 0 This shows the root directory of the current project. project directory Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok qPixmapFromMimeSource commandCombo workdirCombo dirButton buttonBox buttonBox accepted() SvnCommandDialog accept() 27 103 27 119 buttonBox rejected() SvnCommandDialog reject() 137 100 137 123 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnTagDialog.ui0000644000175000001440000000007411072705617024716 xustar000000000000000030 atime=1389081083.064724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnTagDialog.ui0000644000175000001440000001202711072705617024445 0ustar00detlevusers00000000000000 SvnTagDialog 0 0 391 197 Subversion Tag true Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok 0 0 Enter the name of the tag <b>Tag Name</b> <p>Enter the name of the tag to be created, moved or deleted.</p> true true false Name: Tag Action Select to create a regular tag <b>Create Regular Tag</b> <p>Select this entry in order to create a regular tag in the repository.</p> Create Regular Tag true Select to create a branch tag <b>Create Branch Tag</b> <p>Select this entry in order to create a branch in the repository.</p> Create Branch Tag Select to delete a regular tag <b>Delete Regular Tag</b> <p>Select this entry in order to delete the selected regular tag.</p> Delete Regular Tag Select to delete a branch tag <b>Delete Branch Tag</b> <p>Select this entry in order to delete the selected branch tag.</p> Delete Branch Tag qPixmapFromMimeSource tagCombo createRegularButton createBranchButton deleteRegularButton deleteBranchButton buttonBox accepted() SvnTagDialog accept() 24 163 24 186 buttonBox rejected() SvnTagDialog reject() 70 168 70 183 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnPropDelDialog.py0000644000175000001440000000013212261012650025543 xustar000000000000000030 mtime=1388582312.439082647 30 atime=1389081083.064724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnPropDelDialog.py0000644000175000001440000000276512261012650025307 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Module implementing a dialog to enter the data for a new property. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from Ui_SvnPropDelDialog import Ui_SvnPropDelDialog class SvnPropDelDialog(QDialog, Ui_SvnPropDelDialog): """ Class implementing a dialog to enter the data for a new property. """ def __init__(self, recursive, parent = None): """ Constructor @param recursive flag indicating a recursive set is requested @param parent parent widget (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.okButton = self.buttonBox.button(QDialogButtonBox.Ok) self.okButton.setEnabled(False) self.recurseCheckBox.setChecked(recursive) def on_propNameEdit_textChanged(self, text): """ Private method used to enable/disable the OK-button. @param text ignored """ self.okButton.setDisabled(text.isEmpty()) def getData(self): """ Public slot used to retrieve the data entered into the dialog. @return tuple of two values giving the property name and a flag indicating, that this property should be applied recursively. (string, boolean) """ return (unicode(self.propNameEdit.text()), self.recurseCheckBox.isChecked()) eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnLogBrowserDialog.ui0000644000175000001440000000007411072705617026270 xustar000000000000000030 atime=1389081083.064724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnLogBrowserDialog.ui0000644000175000001440000002014111072705617026013 0ustar00detlevusers00000000000000 SvnLogBrowserDialog 0 0 700 600 Subversion Log true From: Enter the start date true To: Enter the end date true Select the field to filter on Revision Author Message Enter the regular expression to filter on 0 5 true QAbstractItemView::ExtendedSelection false false true true Revision Author Date Message 0 2 true 0 3 true false false true true Action Path Copy from Copy from Rev Press to get the next bunch of log entries &Next Enter the limit of entries to fetch Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 1 10000 100 Select to stop listing log messages at a copy or move Stop on Copy/Move Qt::Vertical Press to generate a diff to the previous revision &Diff to Previous Press to compare two revisions &Compare Revisions Qt::Horizontal 91 29 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Close fromDate toDate fieldCombo rxEdit logTree messageEdit filesTree nextButton limitSpinBox stopCheckBox diffPreviousButton diffRevisionsButton buttonBox clearRxEditButton eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnSwitchDialog.py0000644000175000001440000000013212261012650025437 xustar000000000000000030 mtime=1388582312.446082736 30 atime=1389081083.065724396 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnSwitchDialog.py0000644000175000001440000000315512261012650025175 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Module implementing a dialog to enter the data for a switch operation. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from Ui_SvnSwitchDialog import Ui_SvnSwitchDialog class SvnSwitchDialog(QDialog, Ui_SvnSwitchDialog): """ Class implementing a dialog to enter the data for a switch operation. """ def __init__(self, taglist, reposURL, standardLayout, parent = None): """ Constructor @param taglist list of previously entered tags (QStringList) @param reposURL repository path (QString or string) or None @param standardLayout flag indicating the layout of the repository (boolean) @param parent parent widget (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.tagCombo.clear() self.tagCombo.addItems(taglist) if reposURL is not None and reposURL is not QString(): self.tagCombo.setEditText(reposURL) if not standardLayout: self.TagTypeGroup.setEnabled(False) def getParameters(self): """ Public method to retrieve the tag data. @return tuple of QString and int (tag, tag type) """ tag = self.tagCombo.currentText() tagType = 0 if self.regularButton.isChecked(): tagType = 1 elif self.branchButton.isChecked(): tagType = 2 if tag.isEmpty(): tagType = 4 return (tag, tagType) eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/Config.py0000644000175000001440000000013212261012650023574 xustar000000000000000030 mtime=1388582312.448082761 30 atime=1389081083.065724396 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/Config.py0000644000175000001440000002063512261012650023334 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2004 - 2014 Detlev Offenbach # """ Module defining configuration variables for the subversion package """ from PyQt4.QtCore import QStringList # Available protocols fpr the repository URL ConfigSvnProtocols = QStringList() ConfigSvnProtocols.append('file://') ConfigSvnProtocols.append('http://') ConfigSvnProtocols.append('https://') ConfigSvnProtocols.append('svn://') ConfigSvnProtocols.append('svn+ssh://') DefaultConfig = "\n".join([ "### This file configures various client-side behaviors.", "###", "### The commented-out examples below are intended to demonstrate", "### how to use this file.", "", "### Section for authentication and authorization customizations.", "[auth]", "### Set password stores used by Subversion. They should be", "### delimited by spaces or commas. The order of values determines", "### the order in which password stores are used.", "### Valid password stores:", "### gnome-keyring (Unix-like systems)", "### kwallet (Unix-like systems)", "### keychain (Mac OS X)", "### windows-cryptoapi (Windows)", "# password-stores = keychain", "# password-stores = windows-cryptoapi", "# password-stores = gnome-keyring,kwallet", "### To disable all password stores, use an empty list:", "# password-stores =", "###", "### Set KWallet wallet used by Subversion. If empty or unset,", "### then the default network wallet will be used.", "# kwallet-wallet =", "###", "### Include PID (Process ID) in Subversion application name when", "### using KWallet. It defaults to 'no'.", "# kwallet-svn-application-name-with-pid = yes", "###", "### The rest of the [auth] section in this file has been deprecated.", "### Both 'store-passwords' and 'store-auth-creds' can now be", "### specified in the 'servers' file in your config directory", "### and are documented there. Anything specified in this section ", "### is overridden by settings specified in the 'servers' file.", "# store-passwords = no", "# store-auth-creds = no", "", "### Section for configuring external helper applications.", "[helpers]", "### Set editor-cmd to the command used to invoke your text editor.", "### This will override the environment variables that Subversion", "### examines by default to find this information ($EDITOR, ", "### et al).", "# editor-cmd = editor (vi, emacs, notepad, etc.)", "### Set diff-cmd to the absolute path of your 'diff' program.", "### This will override the compile-time default, which is to use", "### Subversion's internal diff implementation.", "# diff-cmd = diff_program (diff, gdiff, etc.)", "### Diff-extensions are arguments passed to an external diff", "### program or to Subversion's internal diff implementation.", "### Set diff-extensions to override the default arguments ('-u').", "# diff-extensions = -u -p", "### Set diff3-cmd to the absolute path of your 'diff3' program.", "### This will override the compile-time default, which is to use", "### Subversion's internal diff3 implementation.", "# diff3-cmd = diff3_program (diff3, gdiff3, etc.)", "### Set diff3-has-program-arg to 'yes' if your 'diff3' program", "### accepts the '--diff-program' option.", "# diff3-has-program-arg = [yes | no]", "### Set merge-tool-cmd to the command used to invoke your external", "### merging tool of choice. Subversion will pass 5 arguments to", "### the specified command: base theirs mine merged wcfile", "# merge-tool-cmd = merge_command", "", "### Section for configuring tunnel agents.", "[tunnels]", "### Configure svn protocol tunnel schemes here. By default, only", "### the 'ssh' scheme is defined. You can define other schemes to", "### be used with 'svn+scheme://hostname/path' URLs. A scheme", "### definition is simply a command, optionally prefixed by an", "### environment variable name which can override the command if it", "### is defined. The command (or environment variable) may contain", "### arguments, using standard shell quoting for arguments with", "### spaces. The command will be invoked as:", "### svnserve -t", "### (If the URL includes a username, then the hostname will be", "### passed to the tunnel agent as @.) If the", "### built-in ssh scheme were not predefined, it could be defined", "### as:", "# ssh = $SVN_SSH ssh -q", "### If you wanted to define a new 'rsh' scheme, to be used with", "### 'svn+rsh:' URLs, you could do so as follows:", "# rsh = rsh", "### Or, if you wanted to specify a full path and arguments:", "# rsh = /path/to/rsh -l myusername", "### On Windows, if you are specifying a full path to a command,", "### use a forward slash (/) or a paired backslash (\\\\) as the", "### path separator. A single backslash will be treated as an", "### escape for the following character.", "", "### Section for configuring miscelleneous Subversion options.", "[miscellany]", "### Set global-ignores to a set of whitespace-delimited globs", "### which Subversion will ignore in its 'status' output, and", "### while importing or adding files and directories.", "### '*' matches leading dots, e.g. '*.rej' matches '.foo.rej'.", "global-ignores = *.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc", " *.pyo .*.rej *.rej .*~ *~ #*# .#* .*.swp .DS_Store", " *.orig *.bak cur tmp __pycache__ .directory", " .ropeproject .eric4project _ropeproject _eric4project", "### Set log-encoding to the default encoding for log messages", "# log-encoding = latin1", "### Set use-commit-times to make checkout/update/switch/revert", "### put last-committed timestamps on every file touched.", "# use-commit-times = yes", "### Set no-unlock to prevent 'svn commit' from automatically", "### releasing locks on files.", "# no-unlock = yes", "### Set mime-types-file to a MIME type registry file, used to", "### provide hints to Subversion's MIME type auto-detection", "### algorithm.", "# mime-types-file = /path/to/mime.types", "### Set preserved-conflict-file-exts to a whitespace-delimited", "### list of patterns matching file extensions which should be", "### preserved in generated conflict file names. By default,", "### conflict files use custom extensions.", "# preserved-conflict-file-exts = doc ppt xls od?", "### Set enable-auto-props to 'yes' to enable automatic properties", "### for 'svn add' and 'svn import', it defaults to 'no'.", "### Automatic properties are defined in the section 'auto-props'.", "# enable-auto-props = yes", "### Set interactive-conflicts to 'no' to disable interactive", "### conflict resolution prompting. It defaults to 'yes'.", "# interactive-conflicts = no", "### Set memory-cache-size to define the size of the memory cache", "### used by the client when accessing a FSFS repository via", "### ra_local (the file:// scheme). The value represents the number", "### of MB used by the cache.", "# memory-cache-size = 16", "", "### Section for configuring automatic properties.", "[auto-props]", "### The format of the entries is:", "### file-name-pattern = propname[=value][;propname[=value]...]", "### The file-name-pattern can contain wildcards (such as '*' and", "### '?'). All entries which match (case-insensitively) will be", "### applied to the file. Note that auto-props functionality", "### must be enabled, which is typically done by setting the", "### 'enable-auto-props' option.", "# *.c = svn:eol-style=native", "# *.cpp = svn:eol-style=native", "# *.h = svn:keywords=Author Date Id Rev URL;svn:eol-style=native", "# *.dsp = svn:eol-style=CRLF", "# *.dsw = svn:eol-style=CRLF", "# *.sh = svn:eol-style=native;svn:executable", "# *.txt = svn:eol-style=native;svn:keywords=Author Date Id Rev URL;", "# *.png = svn:mime-type=image/png", "# *.jpg = svn:mime-type=image/jpeg", "# Makefile = svn:eol-style=native", "", ]) DefaultIgnores = [ "*.orig", "*.bak", "cur", "tmp", "__pycache__", ".directory", ".ropeproject", ".eric4project", "_ropeproject", "_eric4project", ] eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnRevisionSelectionDialog.ui0000644000175000001440000000007411072705617027647 xustar000000000000000030 atime=1389081083.065724396 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnRevisionSelectionDialog.ui0000644000175000001440000003202611072705617027377 0ustar00detlevusers00000000000000 SvnRevisionSelectionDialog 0 0 339 519 Subversion Diff true Revision &1 Select revision before last commit PREV Select last committed revision COMMITTED Select base revision BASE Select head revision of repository HEAD Select working revision WORKING true false 0 0 Enter a revision number Qt::AlignRight 1 999999999 false Enter time of revision false Enter date of revision yyyy-MM-dd true Qt::Horizontal 40 20 Select to specify a revision by number Number Select to specify a revision by date and time Date Revision &2 Select revision before last commit PREV Select last committed revision COMMITTED Select base revision BASE Select head revision of repository HEAD true Select working revision WORKING false 0 0 Enter a revision number Qt::AlignRight 1 999999999 false Enter time of revision false Enter date of revision yyyy-MM-dd true Qt::Horizontal 40 20 Select to specify a revision by number Number Select to specify a revision by date and time Date Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok qPixmapFromMimeSource number1Button number1SpinBox date1Button date1Edit time1Edit head1Button working1Button base1Button committed1Button prev1Button number2Button number2SpinBox date2Button date2Edit time2Edit head2Button working2Button base2Button committed2Button prev2Button buttonBox buttonBox accepted() SvnRevisionSelectionDialog accept() 27 512 21 143 buttonBox rejected() SvnRevisionSelectionDialog reject() 79 512 73 140 number1Button toggled(bool) number1SpinBox setEnabled(bool) 62 45 148 43 date1Button toggled(bool) date1Edit setEnabled(bool) 70 77 136 74 date1Button toggled(bool) time1Edit setEnabled(bool) 16 74 257 74 number2Button toggled(bool) number2SpinBox setEnabled(bool) 32 281 128 283 date2Button toggled(bool) date2Edit setEnabled(bool) 49 310 134 310 date2Button toggled(bool) time2Edit setEnabled(bool) 55 322 264 320 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnCommitDialog.ui0000644000175000001440000000013211762645576025443 xustar000000000000000030 mtime=1338723198.291890393 30 atime=1389081083.072724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnCommitDialog.ui0000644000175000001440000000576211762645576025207 0ustar00detlevusers00000000000000 SvnCommitDialog 0 0 450 384 Subversion Commit Message Enter the log message. <b>Log Message</b> <p>Enter the log message for the commit action.</p> true false Recent commit messages Select a recent commit message to use Changelists Select the change lists to limit the commit Select to keep the changelists Keep changelists Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Close|QDialogButtonBox::Ok qPixmapFromMimeSource logEdit recentComboBox changeLists keepChangeListsCheckBox buttonBox eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnRelocateDialog.ui0000644000175000001440000000007411072705617025741 xustar000000000000000030 atime=1389081083.076724396 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnRelocateDialog.ui0000644000175000001440000000566611072705617025503 0ustar00detlevusers00000000000000 SvnRelocateDialog 0 0 531 119 Subversion Relocate true QFrame::StyledPanel New repository URL: Enter the URL of the repository the working space should be relocated to Current repository URL: Select, if the relocate should happen inside the repository Relocate inside repository (used, if the repository layout has changed) Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok newUrlEdit insideCheckBox buttonBox buttonBox accepted() SvnRelocateDialog accept() 31 75 29 92 buttonBox rejected() SvnRelocateDialog reject() 69 74 69 95 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnNewProjectOptionsDialog.ui0000644000175000001440000000013112114635630027624 xustar000000000000000029 mtime=1362312088.19275719 30 atime=1389081083.076724396 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnNewProjectOptionsDialog.ui0000644000175000001440000001527612114635630027372 0ustar00detlevusers00000000000000 SvnNewProjectOptionsDialog 0 0 562 200 New Project from Repository <b>New Project from Repository Dialog</b> <p>Enter the various repository infos into the entry fields. These values are used, when the new project is retrieved from the repository. If the checkbox is selected, the URL must end in the project name. A repository layout with project/tags, project/branches and project/trunk will be assumed. In this case, you may enter a tag or branch, which must look like tags/tagname or branches/branchname. If the checkbox is not selected, the URL must contain the complete path in the repository.</p> <p>For remote repositories the URL must contain the hostname.</p> true Enter the tag the new project should be generated from <b>Tag in VCS</b> <p>Enter the tag name the new project shall be generated from. Leave empty to retrieve the latest data from the repository.</p> Select the project directory via a directory selection dialog ... Select the protocol to access the repository &Protocol: protocolCombo Enter the url path of the module in the repository (without protocol part) <b>URL</b><p>Enter the URL to the module. For a repository with standard layout, this must not contain the trunk, tags or branches part.</p> &URL: vcsUrlEdit Enter the directory of the new project. <b>Project Directory</b> <p>Enter the directory of the new project. It will be retrieved from the repository and be placed in this directory.</p> Select to indicate, that the repository has a standard layout (projectdir/trunk, projectdir/tags, projectdir/branches) Repository has standard &layout Alt+L true Select the repository url via a directory selection dialog or the repository browser ... Project &Directory: vcsProjectDirEdit &Tag: vcsTagEdit Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok qPixmapFromMimeSource protocolCombo vcsUrlEdit vcsUrlButton vcsTagEdit vcsProjectDirEdit projectDirButton layoutCheckBox buttonBox accepted() SvnNewProjectOptionsDialog accept() 29 157 29 181 buttonBox rejected() SvnNewProjectOptionsDialog reject() 129 163 129 177 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnMergeDialog.py0000644000175000001440000000013212261012650025235 xustar000000000000000030 mtime=1388582312.451082799 30 atime=1389081083.077724396 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnMergeDialog.py0000644000175000001440000000564612261012650025002 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Module implementing a dialog to enter the data for a merge operation. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from Ui_SvnMergeDialog import Ui_SvnMergeDialog class SvnMergeDialog(QDialog, Ui_SvnMergeDialog): """ Class implementing a dialog to enter the data for a merge operation. """ def __init__(self, mergelist1, mergelist2, targetlist, force = False, parent = None): """ Constructor @param mergelist1 list of previously entered URLs/revisions (QStringList) @param mergelist2 list of previously entered URLs/revisions (QStringList) @param targetlist list of previously entered targets (QStringList) @param force flag indicating a forced merge (boolean) @param parent parent widget (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.forceCheckBox.setChecked(force) self.okButton = self.buttonBox.button(QDialogButtonBox.Ok) self.okButton.setEnabled(False) self.rx_url = QRegExp('(?:file:|svn:|svn+ssh:|http:|https:)//.+') self.rx_rev = QRegExp('\\d+') self.tag1Combo.clear() self.tag1Combo.addItems(mergelist1) self.tag2Combo.clear() self.tag2Combo.addItems(mergelist2) self.targetCombo.clear() self.targetCombo.addItems(targetlist) def __enableOkButton(self): """ Private method used to enable/disable the OK-button. @param text ignored """ self.okButton.setDisabled( self.tag1Combo.currentText().isEmpty() or \ self.tag2Combo.currentText().isEmpty() or \ not ((self.rx_url.exactMatch(self.tag1Combo.currentText()) and \ self.rx_url.exactMatch(self.tag2Combo.currentText())) or \ (self.rx_rev.exactMatch(self.tag1Combo.currentText()) and \ self.rx_rev.exactMatch(self.tag2Combo.currentText())) ) ) def on_tag1Combo_editTextChanged(self, text): """ Private slot to handle the tag1Combo editTextChanged signal. """ self.__enableOkButton() def on_tag2Combo_editTextChanged(self, text): """ Private slot to handle the tag2Combo editTextChanged signal. """ self.__enableOkButton() def getParameters(self): """ Public method to retrieve the tag data. @return tuple naming two tag names or two revisions, a target and a flag indicating a forced merge (QString, QString, QString, boolean) """ return (self.tag1Combo.currentText(), self.tag2Combo.currentText(), self.targetCombo.currentText(), self.forceCheckBox.isChecked()) eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnRevisionSelectionDialog.py0000644000175000001440000000013212261012650027642 xustar000000000000000030 mtime=1388582312.453082825 30 atime=1389081083.077724396 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnRevisionSelectionDialog.py0000644000175000001440000000534212261012650027400 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing a dialog to enter the revisions for the svn diff command. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from Ui_SvnRevisionSelectionDialog import Ui_SvnRevisionSelectionDialog class SvnRevisionSelectionDialog(QDialog, Ui_SvnRevisionSelectionDialog): """ Class implementing a dialog to enter the revisions for the svn diff command. """ def __init__(self,parent = None): """ Constructor @param parent parent widget of the dialog (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.date1Edit.setDate(QDate.currentDate()) self.date2Edit.setDate(QDate.currentDate()) def __getRevision(self, no): """ Private method to generate the revision. @param no revision number to generate (1 or 2) @return revision (integer or string) """ if no == 1: numberButton = self.number1Button numberSpinBox = self.number1SpinBox dateButton = self.date1Button dateEdit = self.date1Edit timeEdit = self.time1Edit headButton = self.head1Button workingButton = self.working1Button baseButton = self.base1Button committedButton = self.committed1Button prevButton = self.prev1Button else: numberButton = self.number2Button numberSpinBox = self.number2SpinBox dateButton = self.date2Button dateEdit = self.date2Edit timeEdit = self.time2Edit headButton = self.head2Button workingButton = self.working2Button baseButton = self.base2Button committedButton = self.committed2Button prevButton = self.prev2Button if numberButton.isChecked(): return numberSpinBox.value() elif dateButton.isChecked(): return "{%s}" % \ QDateTime(dateEdit.date(), timeEdit.time()).toString(Qt.ISODate) elif headButton.isChecked(): return "HEAD" elif workingButton.isChecked(): return "WORKING" elif baseButton.isChecked(): return "BASE" elif committedButton.isChecked(): return "COMMITTED" elif prevButton.isChecked(): return "PREV" def getRevisions(self): """ Public method to get the revisions. @return list two integers or strings """ rev1 = self.__getRevision(1) rev2 = self.__getRevision(2) return [rev1, rev2] eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnStatusDialog.ui0000644000175000001440000000007411744565231025470 xustar000000000000000030 atime=1389081083.077724396 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnStatusDialog.ui0000644000175000001440000001625611744565231025227 0ustar00detlevusers00000000000000 SvnStatusDialog 0 0 955 646 Subversion Status <b>Subversion Status</b> <p>This dialog shows the status of the selected file or project.</p> Qt::Horizontal 40 20 &Filter on Status: statusFilterCombo Select the status of entries to be shown QComboBox::AdjustToContents 0 4 true QAbstractItemView::ExtendedSelection false false true Commit Changelist Status Prop. Status Locked History Switched Lock Info Up to date Revision Last Change Author Path Commit the selected changes &Commit Qt::Vertical Add the selected entries to the repository &Add Show differences of the selected entries to the repository &Differences Revert the selected entries to the last revision in the repository Re&vert Restore the selected missing entries from the repository &Restore Qt::Horizontal 40 20 0 1 Errors true false Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Close qPixmapFromMimeSource statusFilterCombo statusList commitButton addButton diffButton revertButton restoreButton errors buttonBox eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnCommitDialog.py0000644000175000001440000000013212261012650025426 xustar000000000000000030 mtime=1388582312.463082952 30 atime=1389081083.077724396 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnCommitDialog.py0000644000175000001440000000770212261012650025166 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Module implementing a dialog to enter the commit message. """ import pysvn from PyQt4.QtCore import * from PyQt4.QtGui import * from Ui_SvnCommitDialog import Ui_SvnCommitDialog import Preferences class SvnCommitDialog(QWidget, Ui_SvnCommitDialog): """ Class implementing a dialog to enter the commit message. @signal accepted() emitted, if the dialog was accepted @signal rejected() emitted, if the dialog was rejected """ def __init__(self, changelists, parent = None): """ Constructor @param changelists list of available change lists (list of strings) @param parent parent widget (QWidget) """ QWidget.__init__(self, parent, Qt.WindowFlags(Qt.Window)) self.setupUi(self) if pysvn.svn_version < (1, 5, 0) or pysvn.version < (1, 6, 0): self.changeListsGroup.hide() else: self.changeLists.addItems(sorted(changelists)) def showEvent(self, evt): """ Public method called when the dialog is about to be shown. @param evt the event (QShowEvent) """ self.recentCommitMessages = \ Preferences.Prefs.settings.value('Subversion/Commits').toStringList() self.recentComboBox.clear() self.recentComboBox.addItem("") self.recentComboBox.addItems(self.recentCommitMessages) def logMessage(self): """ Public method to retrieve the log message. This method has the side effect of saving the 20 most recent commit messages for reuse. @return the log message (QString) """ msg = self.logEdit.toPlainText() if not msg.isEmpty(): self.recentCommitMessages.removeAll(msg) self.recentCommitMessages.prepend(msg) no = Preferences.Prefs.settings\ .value('Subversion/CommitMessages', QVariant(20)).toInt()[0] del self.recentCommitMessages[no:] Preferences.Prefs.settings.setValue('Subversion/Commits', QVariant(self.recentCommitMessages)) return msg def hasChangelists(self): """ Public method to check, if the user entered some changelists. @return flag indicating availability of changelists (boolean) """ return len(self.changeLists.selectedItems()) > 0 def changelistsData(self): """ Public method to retrieve the changelists data. @return tuple containing the changelists (list of strings) and a flag indicating to keep changelists (boolean) """ slists = [unicode(l.text()).strip() for l in self.changeLists.selectedItems() if unicode(l.text()).strip() != ""] if len(slists) == 0: return [], False return slists, self.keepChangeListsCheckBox.isChecked() def on_buttonBox_clicked(self, button): """ Private slot called by a button of the button box clicked. @param button button that was clicked (QAbstractButton) """ if button == self.buttonBox.button(QDialogButtonBox.Cancel): self.logEdit.clear() def on_buttonBox_accepted(self): """ Private slot called by the buttonBox accepted signal. """ self.close() self.emit(SIGNAL("accepted()")) def on_buttonBox_rejected(self): """ Private slot called by the buttonBox rejected signal. """ self.close() self.emit(SIGNAL("rejected()")) @pyqtSignature("QString") def on_recentComboBox_activated(self, txt): """ Private slot to select a commit message from recent ones. """ if not txt.isEmpty(): self.logEdit.setPlainText(txt) eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnUrlSelectionDialog.ui0000644000175000001440000000007411072705617026613 xustar000000000000000030 atime=1389081083.077724396 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnUrlSelectionDialog.ui0000644000175000001440000000767211072705617026354 0ustar00detlevusers00000000000000 SvnUrlSelectionDialog 0 0 542 195 Subversion Diff true Repository URL 1 Select the URL type 0 0 Enter the label name or path true Repository URL 2 Select the URL type 0 0 Enter the label name or path true Select to just show a summary of differences Summary only Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok typeCombo1 labelCombo1 typeCombo2 labelCombo2 summaryCheckBox buttonBox buttonBox accepted() SvnUrlSelectionDialog accept() 230 188 157 178 buttonBox rejected() SvnUrlSelectionDialog reject() 292 166 286 178 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnRelocateDialog.py0000644000175000001440000000013212261012650025734 xustar000000000000000030 mtime=1388582312.467083003 30 atime=1389081083.078724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnRelocateDialog.py0000644000175000001440000000217712261012650025475 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c)2014 Detlev Offenbach # """ Module implementing a dialog to enter the data to relocate the workspace. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from Ui_SvnRelocateDialog import Ui_SvnRelocateDialog class SvnRelocateDialog(QDialog, Ui_SvnRelocateDialog): """ Class implementing a dialog to enter the data to relocate the workspace. """ def __init__(self, currUrl, parent = None): """ Constructor @param currUrl current repository URL (string or QString) @param parent parent widget (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.currUrlLabel.setText(currUrl) self.newUrlEdit.setText(currUrl) def getData(self): """ Public slot used to retrieve the data entered into the dialog. @return the new repository URL (string) and an indication, if the relocate is inside the repository (boolean) """ return unicode(self.newUrlEdit.text()), self.insideCheckBox.isChecked() eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnPropListDialog.py0000644000175000001440000000013212261012650025752 xustar000000000000000030 mtime=1388582312.472083066 30 atime=1389081083.078724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnPropListDialog.py0000644000175000001440000001221112261012650025501 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Module implementing a dialog to show the output of the svn proplist command process. """ import os import types import pysvn from PyQt4.QtCore import * from PyQt4.QtGui import * from SvnDialogMixin import SvnDialogMixin from Ui_SvnPropListDialog import Ui_SvnPropListDialog class SvnPropListDialog(QWidget, SvnDialogMixin, Ui_SvnPropListDialog): """ Class implementing a dialog to show the output of the svn proplist command process. """ def __init__(self, vcs, parent = None): """ Constructor @param vcs reference to the vcs object @param parent parent widget (QWidget) """ QWidget.__init__(self, parent) self.setupUi(self) SvnDialogMixin.__init__(self) self.buttonBox.button(QDialogButtonBox.Close).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Cancel).setDefault(True) self.vcs = vcs self.propsList.headerItem().setText(self.propsList.columnCount(), "") self.propsList.header().setSortIndicator(0, Qt.AscendingOrder) self.client = self.vcs.getClient() self.client.callback_cancel = \ self._clientCancelCallback self.client.callback_get_login = \ self._clientLoginCallback self.client.callback_ssl_server_trust_prompt = \ self._clientSslServerTrustPromptCallback def __resort(self): """ Private method to resort the tree. """ self.propsList.sortItems(self.propsList.sortColumn(), self.propsList.header().sortIndicatorOrder()) def __resizeColumns(self): """ Private method to resize the list columns. """ self.propsList.header().resizeSections(QHeaderView.ResizeToContents) self.propsList.header().setStretchLastSection(True) def __generateItem(self, path, propName, propValue): """ Private method to generate a properties item in the properties list. @param path file/directory name the property applies to (string or QString) @param propName name of the property (string or QString) @param propValue value of the property (string or QString) """ QTreeWidgetItem(self.propsList, QStringList() << path << propName << propValue) def start(self, fn, recursive = False): """ Public slot to start the svn status command. @param fn filename(s) (string or list of string) @param recursive flag indicating a recursive list is requested """ self.errorGroup.hide() QApplication.processEvents() self.propsFound = False if type(fn) is types.ListType: dname, fnames = self.vcs.splitPathList(fn) else: dname, fname = self.vcs.splitPath(fn) fnames = [fname] locker = QMutexLocker(self.vcs.vcsExecutionMutex) cwd = os.getcwd() os.chdir(dname) try: for name in fnames: proplist = self.client.proplist(name, recurse = recursive) counter = 0 for path, prop in proplist: for propName, propVal in prop.items(): self.__generateItem(path, propName, propVal) self.propsFound = True counter += 1 if counter == 30: # check for cancel every 30 items counter = 0 if self._clientCancelCallback(): break if self._clientCancelCallback(): break except pysvn.ClientError, e: self.__showError(e.args[0]) locker.unlock() self.__finish() os.chdir(cwd) def __finish(self): """ Private slot called when the process finished or the user pressed the button. """ if not self.propsFound: self.__generateItem("", self.trUtf8("None"), "") self.__resort() self.__resizeColumns() self.buttonBox.button(QDialogButtonBox.Close).setEnabled(True) self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Close).setDefault(True) self._cancel() def on_buttonBox_clicked(self, button): """ Private slot called by a button of the button box clicked. @param button button that was clicked (QAbstractButton) """ if button == self.buttonBox.button(QDialogButtonBox.Close): self.close() elif button == self.buttonBox.button(QDialogButtonBox.Cancel): self.__finish() def __showError(self, msg): """ Private slot to show an error message. @param msg error message to show (string or QString) """ self.errorGroup.show() self.errors.insertPlainText(msg) self.errors.ensureCursorVisible() eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/ConfigurationPage0000644000175000001440000000013212262730776025365 xustar000000000000000030 mtime=1389081086.300724332 30 atime=1389081086.305724332 30 ctime=1389081086.315724332 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/ConfigurationPage/0000755000175000001440000000000012262730776025174 5ustar00detlevusers00000000000000eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/ConfigurationPage/PaxHeaders.8617/SubversionPage.py0000644000175000001440000000013212261012650030727 xustar000000000000000030 mtime=1388582312.479083155 30 atime=1389081083.079724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/ConfigurationPage/SubversionPage.py0000644000175000001440000000346112261012650030465 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing the Subversion configuration page. """ from PyQt4.QtCore import pyqtSignature from QScintilla.MiniEditor import MiniEditor from Preferences.ConfigurationPages.ConfigurationPageBase import ConfigurationPageBase from Ui_SubversionPage import Ui_SubversionPage class SubversionPage(ConfigurationPageBase, Ui_SubversionPage): """ Class implementing the Subversion configuration page. """ def __init__(self, plugin): """ Constructor @param plugin reference to the plugin object """ ConfigurationPageBase.__init__(self) self.setupUi(self) self.setObjectName("SubversionPage") self.__plugin = plugin # set initial values self.logSpinBox.setValue(self.__plugin.getPreferences("LogLimit")) self.commitSpinBox.setValue(self.__plugin.getPreferences("CommitMessages")) def save(self): """ Public slot to save the Subversion configuration. """ self.__plugin.setPreferences("LogLimit", self.logSpinBox.value()) self.__plugin.setPreferences("CommitMessages", self.commitSpinBox.value()) @pyqtSignature("") def on_configButton_clicked(self): """ Private slot to edit the Subversion config file. """ cfgFile = self.__plugin.getConfigPath() editor = MiniEditor(cfgFile, "Properties", self) editor.show() @pyqtSignature("") def on_serversButton_clicked(self): """ Private slot to edit the Subversion servers file. """ serversFile = self.__plugin.getServersPath() editor = MiniEditor(serversFile, "Properties", self) editor.show() eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/ConfigurationPage/PaxHeaders.8617/__init__.py0000644000175000001440000000013112261012650027531 xustar000000000000000029 mtime=1388582312.48108318 30 atime=1389081083.079724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/ConfigurationPage/__init__.py0000644000175000001440000000025012261012650027261 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Package implementing the the subversion configuration page. """ eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/ConfigurationPage/PaxHeaders.8617/SubversionPage.ui0000644000175000001440000000007411072705613030730 xustar000000000000000030 atime=1389081083.087724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/ConfigurationPage/SubversionPage.ui0000644000175000001440000001000611072705613030452 0ustar00detlevusers00000000000000 SubversionPage 0 0 402 354 <b>Configure Subversion Interface</b> QFrame::HLine QFrame::Sunken Qt::Horizontal Log No. of log messages shown: Enter the number of log messages to be shown Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 999999 Qt::Horizontal 41 20 Commit No. of commit messages to remember: Enter the number of commit messages to remember Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 1 100 Qt::Horizontal 40 20 Edit the subversion config file Edit config file Edit the subversion servers file Edit servers file Qt::Vertical 388 31 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnCopyDialog.ui0000644000175000001440000000013211762422526025111 xustar000000000000000030 mtime=1338647894.542317807 30 atime=1389081083.094724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnCopyDialog.ui0000644000175000001440000000744111762422526024651 0ustar00detlevusers00000000000000 SvnCopyDialog 0 0 409 135 Subversion Copy true Press to open a selection dialog <b>Target name</b> <p>Select the target name for the operation via a selection dialog.</p> ... Source: Shows the name of the source <b>Source name</b> <p>This field shows the name of the source.</p> true Enter the target name <b>Target name</b> <p>Enter the new name in this field. The target must be the new name or an absolute path.</p> Target: Select to force the operation Enforce operation Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok qPixmapFromMimeSource sourceEdit targetEdit dirButton forceCheckBox buttonBox buttonBox accepted() SvnCopyDialog accept() 32 79 32 97 buttonBox rejected() SvnCopyDialog reject() 101 80 101 97 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnPropListDialog.ui0000644000175000001440000000007411072705617025757 xustar000000000000000030 atime=1389081083.100724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnPropListDialog.ui0000644000175000001440000000563511072705617025515 0ustar00detlevusers00000000000000 SvnPropListDialog 0 0 826 569 Subversion List Properties <b>Subversion List Prperties</b> <p>This dialog shows the properties of the selected file or project.</p> 0 3 <b>Properties List</b> <p>This shows the properties of the selected file or project.</p> true false false true Path Name Value 0 1 Errors <b>Subversion proplist errors</b> <p>This shows possible error messages of the subversion proplist command.</p> Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Close qPixmapFromMimeSource propsList errors eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnDiffDialog.py0000644000175000001440000000013212261012650025046 xustar000000000000000030 mtime=1388582312.488083269 30 atime=1389081083.100724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnDiffDialog.py0000644000175000001440000003344412261012650024610 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Module implementing a dialog to show the output of the svn diff command process. """ import os import sys import types import pysvn from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQFileDialog, KQMessageBox from KdeQt.KQApplication import e4App from SvnDialogMixin import SvnDialogMixin from Ui_SvnDiffDialog import Ui_SvnDiffDialog import Utilities class SvnDiffDialog(QWidget, SvnDialogMixin, Ui_SvnDiffDialog): """ Class implementing a dialog to show the output of the svn diff command. """ def __init__(self, vcs, parent = None): """ Constructor @param vcs reference to the vcs object @param parent parent widget (QWidget) """ QWidget.__init__(self, parent) self.setupUi(self) SvnDialogMixin.__init__(self) self.buttonBox.button(QDialogButtonBox.Save).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Close).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Cancel).setDefault(True) self.vcs = vcs if Utilities.isWindowsPlatform(): self.contents.setFontFamily("Lucida Console") else: self.contents.setFontFamily("Monospace") self.cNormalFormat = self.contents.currentCharFormat() self.cAddedFormat = self.contents.currentCharFormat() self.cAddedFormat.setBackground(QBrush(QColor(190, 237, 190))) self.cRemovedFormat = self.contents.currentCharFormat() self.cRemovedFormat.setBackground(QBrush(QColor(237, 190, 190))) self.cLineNoFormat = self.contents.currentCharFormat() self.cLineNoFormat.setBackground(QBrush(QColor(255, 220, 168))) self.client = self.vcs.getClient() self.client.callback_cancel = \ self._clientCancelCallback self.client.callback_get_login = \ self._clientLoginCallback self.client.callback_ssl_server_trust_prompt = \ self._clientSslServerTrustPromptCallback def __getVersionArg(self, version): """ Private method to get a pysvn revision object for the given version number. @param version revision (integer or string) @return revision object (pysvn.Revision) """ if type(version) == type(1) or type(version) == type(1L): return pysvn.Revision(pysvn.opt_revision_kind.number, version) elif version.startswith("{"): dateStr = version[1:-1] secs = QDateTime.fromString(dateStr, Qt.ISODate).toTime_t() return pysvn.Revision(pysvn.opt_revision_kind.date, secs) elif version == "HEAD": return pysvn.Revision(pysvn.opt_revision_kind.head) elif version == "COMMITTED": return pysvn.Revision(pysvn.opt_revision_kind.committed) elif version == "BASE": return pysvn.Revision(pysvn.opt_revision_kind.base) elif version == "WORKING": return pysvn.Revision(pysvn.opt_revision_kind.working) elif version == "PREV": return pysvn.Revision(pysvn.opt_revision_kind.previous) else: return pysvn.Revision(pysvn.opt_revision_kind.unspecified) def __getDiffSummaryKind(self, summaryKind): """ Private method to get a string descripion of the diff summary. @param summaryKind (pysvn.diff_summarize.summarize_kind) @return one letter string indicating the change type (QString) """ if summaryKind == pysvn.diff_summarize_kind.delete: return "D" elif summaryKind == pysvn.diff_summarize_kind.modified: return "M" elif summaryKind == pysvn.diff_summarize_kind.added: return "A" elif summaryKind == pysvn.diff_summarize_kind.normal: return "N" else: return " " def start(self, fn, versions = None, urls = None, summary = False, pegRev = None): """ Public slot to start the svn diff command. @param fn filename to be diffed (string) @param versions list of versions to be diffed (list of up to 2 integer or None) @keyparam urls list of repository URLs (list of 2 strings) @keyparam summary flag indicating a summarizing diff (only valid for URL diffs) (boolean) @keyparam pegRev revision number the filename is valid (integer) """ self.buttonBox.button(QDialogButtonBox.Save).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Close).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(True) self.buttonBox.button(QDialogButtonBox.Cancel).setDefault(True) self._reset() self.errorGroup.hide() QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) QApplication.processEvents() self.filename = fn self.contents.clear() self.paras = 0 if Utilities.hasEnvironmentEntry('TEMP'): tmpdir = Utilities.getEnvironmentEntry('TEMP') elif Utilities.hasEnvironmentEntry('TMPDIR'): tmpdir = Utilities.getEnvironmentEntry('TMPDIR') elif Utilities.hasEnvironmentEntry('TMP'): tmpdir = Utilities.getEnvironmentEntry('TMP') elif os.path.exists('/var/tmp'): tmpdir = '/var/tmp' elif os.path.exists('/usr/tmp'): tmpdir = '/usr/tmp' elif os.path.exists('/tmp'): tmpdir = '/tmp' else: KQMessageBox.critical(self, self.trUtf8("Subversion Diff"), self.trUtf8("""There is no temporary directory available.""")) return tmpdir = os.path.join(tmpdir, 'svn_tmp') if not os.path.exists(tmpdir): os.mkdir(tmpdir) opts = self.vcs.options['global'] + self.vcs.options['diff'] recurse = "--non-recursive" not in opts if versions is not None: self.raise_() self.activateWindow() rev1 = self.__getVersionArg(versions[0]) if len(versions) == 1: rev2 = self.__getVersionArg("WORKING") else: rev2 = self.__getVersionArg(versions[1]) else: rev1 = self.__getVersionArg("BASE") rev2 = self.__getVersionArg("WORKING") if urls is not None: rev1 = self.__getVersionArg("HEAD") rev2 = self.__getVersionArg("HEAD") if type(fn) is types.ListType: dname, fnames = self.vcs.splitPathList(fn) else: dname, fname = self.vcs.splitPath(fn) fnames = [fname] locker = QMutexLocker(self.vcs.vcsExecutionMutex) cwd = os.getcwd() os.chdir(dname) try: dname = e4App().getObject('Project').getRelativePath(dname) if dname: dname += "/" for name in fnames: self.__showError(self.trUtf8("Processing file '%1'...\n").arg(name)) if urls is not None: url1 = "%s/%s%s" % (urls[0], dname, name) url2 = "%s/%s%s" % (urls[1], dname, name) if summary: diff_summary = self.client.diff_summarize(\ url1, revision1 = rev1, url_or_path2 = url2, revision2 = rev2, recurse = recurse) diff_list = [] for diff_sum in diff_summary: diff_list.append("%s %s" % \ (self.__getDiffSummaryKind(diff_sum['summarize_kind']), diff_sum['path'])) diffText = os.linesep.join(diff_list) else: diffText = self.client.diff(tmpdir, url1, revision1 = rev1, url_or_path2 = url2, revision2 = rev2, recurse = recurse) else: if pegRev is not None: diffText = self.client.diff_peg(tmpdir, name, peg_revision = self.__getVersionArg(pegRev), revision_start = rev1, revision_end = rev2, recurse = recurse) else: diffText = self.client.diff(tmpdir, name, revision1 = rev1, revision2 = rev2, recurse = recurse) counter = 0 for line in diffText.splitlines(): self.__appendText("%s%s" % (line, os.linesep)) counter += 1 if counter == 30: # check for cancel every 30 lines counter = 0 if self._clientCancelCallback(): break if self._clientCancelCallback(): break except pysvn.ClientError, e: self.__showError(e.args[0]) locker.unlock() os.chdir(cwd) self.__finish() if self.paras == 0: self.contents.insertPlainText(\ self.trUtf8('There is no difference.')) return self.buttonBox.button(QDialogButtonBox.Save).setEnabled(True) def __appendText(self, line): """ Private method to append text to the end of the contents pane. @param line line of text to insert (string) """ if line.startswith('+') or line.startswith('>') or line.startswith('A '): format = self.cAddedFormat elif line.startswith('-') or line.startswith('<') or line.startswith('D '): format = self.cRemovedFormat elif line.startswith('@@'): format = self.cLineNoFormat else: format = self.cNormalFormat tc = self.contents.textCursor() tc.movePosition(QTextCursor.End) self.contents.setTextCursor(tc) self.contents.setCurrentCharFormat(format) self.contents.insertPlainText(line) self.paras += 1 def __finish(self): """ Private slot called when the user pressed the button. """ QApplication.restoreOverrideCursor() self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Close).setEnabled(True) self.buttonBox.button(QDialogButtonBox.Close).setDefault(True) tc = self.contents.textCursor() tc.movePosition(QTextCursor.Start) self.contents.setTextCursor(tc) self.contents.ensureCursorVisible() self._cancel() def on_buttonBox_clicked(self, button): """ Private slot called by a button of the button box clicked. @param button button that was clicked (QAbstractButton) """ if button == self.buttonBox.button(QDialogButtonBox.Close): self.close() elif button == self.buttonBox.button(QDialogButtonBox.Cancel): self.__finish() elif button == self.buttonBox.button(QDialogButtonBox.Save): self.on_saveButton_clicked() @pyqtSignature("") def on_saveButton_clicked(self): """ Private slot to handle the Save button press. It saves the diff shown in the dialog to a file in the local filesystem. """ if type(self.filename) is types.ListType: if len(self.filename) > 1: fname = self.vcs.splitPathList(self.filename)[0] else: dname, fname = self.vcs.splitPath(self.filename[0]) if fname != '.': fname = "%s.diff" % self.filename[0] else: fname = dname else: fname = self.vcs.splitPath(self.filename)[0] selectedFilter = QString("") fname = KQFileDialog.getSaveFileName(\ self, self.trUtf8("Save Diff"), fname, self.trUtf8("Patch Files (*.diff)"), selectedFilter, QFileDialog.Options(QFileDialog.DontConfirmOverwrite)) if fname.isEmpty(): return ext = QFileInfo(fname).suffix() if ext.isEmpty(): ex = selectedFilter.section('(*',1,1).section(')',0,0) if not ex.isEmpty(): fname.append(ex) if QFileInfo(fname).exists(): res = KQMessageBox.warning(self, self.trUtf8("Save Diff"), self.trUtf8("

    The patch file %1 already exists.

    ") .arg(fname), QMessageBox.StandardButtons(\ QMessageBox.Abort | \ QMessageBox.Save), QMessageBox.Abort) if res != QMessageBox.Save: return fname = unicode(Utilities.toNativeSeparators(fname)) try: f = open(fname, "wb") f.write(unicode(self.contents.toPlainText())) f.close() except IOError, why: KQMessageBox.critical(self, self.trUtf8('Save Diff'), self.trUtf8('

    The patch file %1 could not be saved.' '
    Reason: %2

    ') .arg(unicode(fname)).arg(str(why))) def __showError(self, msg): """ Private slot to show an error message. @param msg error message to show (string or QString) """ self.errorGroup.show() self.errors.insertPlainText(msg) self.errors.ensureCursorVisible() eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnRepoBrowserDialog.py0000644000175000001440000000013212261012650026447 xustar000000000000000030 mtime=1388582312.491083307 30 atime=1389081083.100724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnRepoBrowserDialog.py0000644000175000001440000002406412261012650026207 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing the subversion repository browser dialog. """ import pysvn from PyQt4.QtGui import * from PyQt4.QtCore import * from KdeQt import KQMessageBox from SvnUtilities import formatTime from SvnDialogMixin import SvnDialogMixin from Ui_SvnRepoBrowserDialog import Ui_SvnRepoBrowserDialog import UI.PixmapCache class SvnRepoBrowserDialog(QDialog, SvnDialogMixin, Ui_SvnRepoBrowserDialog): """ Class implementing the subversion repository browser dialog. """ def __init__(self, vcs, mode = "browse", parent = None): """ Constructor @param vcs reference to the vcs object @param mode mode of the dialog (string, "browse" or "select") @param parent parent widget (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) SvnDialogMixin.__init__(self) self.repoTree.headerItem().setText(self.repoTree.columnCount(), "") self.repoTree.header().setSortIndicator(0, Qt.AscendingOrder) self.vcs = vcs self.mode = mode if self.mode == "select": self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Close).hide() else: self.buttonBox.button(QDialogButtonBox.Ok).hide() self.buttonBox.button(QDialogButtonBox.Cancel).hide() self.__dirIcon = UI.PixmapCache.getIcon("dirClosed.png") self.__fileIcon = UI.PixmapCache.getIcon("fileMisc.png") self.__urlRole = Qt.UserRole self.__ignoreExpand = False self.client = self.vcs.getClient() self.client.callback_cancel = \ self._clientCancelCallback self.client.callback_get_login = \ self._clientLoginCallback self.client.callback_ssl_server_trust_prompt = \ self._clientSslServerTrustPromptCallback self.show() QApplication.processEvents() def __resort(self): """ Private method to resort the tree. """ self.repoTree.sortItems(self.repoTree.sortColumn(), self.repoTree.header().sortIndicatorOrder()) def __resizeColumns(self): """ Private method to resize the tree columns. """ self.repoTree.header().resizeSections(QHeaderView.ResizeToContents) self.repoTree.header().setStretchLastSection(True) def __generateItem(self, parent, repopath, revision, author, size, date, nodekind, url): """ Private method to generate a tree item in the repository tree. @param parent parent of the item to be created (QTreeWidget or QTreeWidgetItem) @param repopath path of the item (string or QString) @param revision revision info (string or pysvn.opt_revision_kind) @param author author info (string or QString) @param size size info (integer) @param date date info (integer) @param nodekind node kind info (pysvn.node_kind) @param url url of the entry (string or QString) @return reference to the generated item (QTreeWidgetItem) """ if repopath == "/": path = url else: path = unicode(url).split("/")[-1] if revision == "": rev = "" else: rev = revision.number if date == "": dt = "" else: dt = formatTime(date) if author is None: author = "" itm = QTreeWidgetItem(parent) itm.setData(0, Qt.DisplayRole, path) itm.setData(1, Qt.DisplayRole, rev) itm.setData(2, Qt.DisplayRole, author) itm.setData(3, Qt.DisplayRole, size) itm.setData(4, Qt.DisplayRole, dt) if nodekind == pysvn.node_kind.dir: itm.setIcon(0, self.__dirIcon) itm.setChildIndicatorPolicy(QTreeWidgetItem.ShowIndicator) elif nodekind == pysvn.node_kind.file: itm.setIcon(0, self.__fileIcon) itm.setData(0, self.__urlRole, QVariant(url)) itm.setTextAlignment(0, Qt.AlignLeft) itm.setTextAlignment(1, Qt.AlignRight) itm.setTextAlignment(2, Qt.AlignLeft) itm.setTextAlignment(3, Qt.AlignRight) itm.setTextAlignment(4, Qt.AlignLeft) return itm def __listRepo(self, url, parent = None): """ Private method to perform the svn list command. @param url the repository URL to browser (string or QString) @param parent reference to the item, the data should be appended to (QTreeWidget or QTreeWidgetItem) """ QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) QApplication.processEvents() if parent is None: parent = self.repoTree locker = QMutexLocker(self.vcs.vcsExecutionMutex) try: try: entries = self.client.list(unicode(url), recurse = False) firstTime = parent == self.repoTree for dirent, lock in entries: if (firstTime and dirent["path"] != url) or \ (parent != self.repoTree and dirent["path"] == url): continue if firstTime: if dirent["repos_path"] != "/": repoUrl = dirent["path"].replace(dirent["repos_path"], "") else: repoUrl = dirent["path"] if repoUrl != url: self.__ignoreExpand = True itm = self.__generateItem(parent, "/", "", "", 0, "", pysvn.node_kind.dir, repoUrl) itm.setExpanded(True) parent = itm urlPart = repoUrl for element in dirent["repos_path"].split("/")[:-1]: if element: urlPart = "%s/%s" % (urlPart, element) itm = self.__generateItem(parent, element, "", "", 0, "", pysvn.node_kind.dir, urlPart) itm.setExpanded(True) parent = itm self.__ignoreExpand = False itm = self.__generateItem(parent, dirent["repos_path"], dirent["created_rev"], dirent["last_author"], dirent["size"], dirent["time"], dirent["kind"], dirent["path"]) self.__resort() self.__resizeColumns() except pysvn.ClientError, e: self.__showError(e.args[0]) except AttributeError: self.__showError(\ self.trUtf8("The installed version of PySvn should be " "1.4.0 or better.")) finally: locker.unlock() QApplication.restoreOverrideCursor() def __normalizeUrl(self, url): """ Private method to normalite the url. @param url the url to normalize (string or QString) @return normalized URL (QString) """ url_ = QString(url) if url_.endsWith("/"): return url_[:-1] return url_ def start(self, url): """ Public slot to start the svn info command. @param url the repository URL to browser (string or QString) """ self.url = "" self.urlCombo.addItem(self.__normalizeUrl(url)) @pyqtSignature("QString") def on_urlCombo_currentIndexChanged(self, text): """ Private slot called, when a new repository URL is entered or selected. @param text the text of the current item (QString) """ url = self.__normalizeUrl(text) if url != self.url: self.url = QString(url) self.repoTree.clear() self.__listRepo(url) @pyqtSignature("QTreeWidgetItem*") def on_repoTree_itemExpanded(self, item): """ Private slot called when an item is expanded. @param item reference to the item to be expanded (QTreeWidgetItem) """ if not self.__ignoreExpand: url = item.data(0, self.__urlRole).toString() self.__listRepo(url, item) @pyqtSignature("QTreeWidgetItem*") def on_repoTree_itemCollapsed(self, item): """ Private slot called when an item is collapsed. @param item reference to the item to be collapsed (QTreeWidgetItem) """ for child in item.takeChildren(): del child @pyqtSignature("") def on_repoTree_itemSelectionChanged(self): """ Private slot called when the selection changes. """ if self.mode == "select": self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(True) def __showError(self, msg): """ Private slot to show an error message. @param msg error message to show (string or QString) """ KQMessageBox.critical(self, self.trUtf8("Subversion Error"), msg) def accept(self): """ Public slot called when the dialog is accepted. """ if self.focusWidget() == self.urlCombo: return QDialog.accept(self) def getSelectedUrl(self): """ Public method to retrieve the selected repository URL. @return the selected repository URL (QString) """ items = self.repoTree.selectedItems() if len(items) == 1: return items[0].data(0, self.__urlRole).toString() else: return QString() eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnPropSetDialog.ui0000644000175000001440000000007411072705617025577 xustar000000000000000030 atime=1389081083.108724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnPropSetDialog.ui0000644000175000001440000000660011072705617025326 0ustar00detlevusers00000000000000 SvnPropSetDialog 0 0 494 385 Set Subversion Property true Enter text of the property true false Property &Name: propNameEdit Enter the name of the property to be set Select to apply the property recursively Apply &recursively Property &Value: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop propTextEdit Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok qPixmapFromMimeSource propNameEdit propTextEdit recurseCheckBox buttonBox accepted() SvnPropSetDialog accept() 28 362 28 386 buttonBox rejected() SvnPropSetDialog reject() 94 366 94 383 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnCommandDialog.py0000644000175000001440000000013212261012650025554 xustar000000000000000030 mtime=1388582312.500083421 30 atime=1389081083.108724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnCommandDialog.py0000644000175000001440000000571512261012650025316 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Module implementing the Subversion command dialog. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQFileDialog from E4Gui.E4Completers import E4DirCompleter from Ui_SvnCommandDialog import Ui_SvnCommandDialog import Utilities class SvnCommandDialog(QDialog, Ui_SvnCommandDialog): """ Class implementing the Subversion command dialog. It implements a dialog that is used to enter an arbitrary subversion command. It asks the user to enter the commandline parameters and the working directory. """ def __init__(self, argvList, wdList, ppath, parent = None): """ Constructor @param argvList history list of commandline arguments (QStringList) @param wdList history list of working directories (QStringList) @param ppath pathname of the project directory (string) @param parent parent widget of this dialog (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.workdirCompleter = E4DirCompleter(self.workdirCombo) self.okButton = self.buttonBox.button(QDialogButtonBox.Ok) self.okButton.setEnabled(False) self.commandCombo.clear() self.commandCombo.addItems(argvList) if argvList.count() > 0: self.commandCombo.setCurrentIndex(0) self.workdirCombo.clear() self.workdirCombo.addItems(wdList) if wdList.count() > 0: self.workdirCombo.setCurrentIndex(0) self.projectDirLabel.setText(ppath) # modify some what's this help texts t = self.commandCombo.whatsThis() if not t.isEmpty(): t = t.append(Utilities.getPercentReplacementHelp()) self.commandCombo.setWhatsThis(t) @pyqtSignature("") def on_dirButton_clicked(self): """ Private method used to open a directory selection dialog. """ cwd = self.workdirCombo.currentText() if cwd.isEmpty(): cwd = self.projectDirLabel.text() d = KQFileDialog.getExistingDirectory(\ self, self.trUtf8("Working directory"), cwd, QFileDialog.Options(QFileDialog.ShowDirsOnly)) if not d.isEmpty(): self.workdirCombo.setEditText(Utilities.toNativeSeparators(d)) def on_commandCombo_editTextChanged(self, text): """ Private method used to enable/disable the OK-button. @param text ignored """ self.okButton.setDisabled(self.commandCombo.currentText().isEmpty()) def getData(self): """ Public method to retrieve the data entered into this dialog. @return a tuple of argv, workdir """ return (self.commandCombo.currentText(), self.workdirCombo.currentText()) eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnSwitchDialog.ui0000644000175000001440000000007411072705617025444 xustar000000000000000030 atime=1389081083.108724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnSwitchDialog.ui0000644000175000001440000000761411072705617025201 0ustar00detlevusers00000000000000 SvnSwitchDialog 0 0 391 146 Subversion Switch true Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok Tag Name: 0 0 Enter the name of the tag <b>Tag Name</b> <p>Enter the name of the tag to be switched to. In order to switch to the trunk version leave it empty.</p> true true false Tag Type Select for a regular tag <b>Regular Tag</b> <p>Select this entry for a regular tag.</p> Regular Tag true Select for a branch tag <b>Branch Tag</b> <p>Select this entry for a branch tag.</p> Branch Tag qPixmapFromMimeSource tagCombo regularButton branchButton buttonBox accepted() SvnSwitchDialog accept() 21 122 21 136 buttonBox rejected() SvnSwitchDialog reject() 67 122 67 134 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnLoginDialog.py0000644000175000001440000000013212261012650025246 xustar000000000000000030 mtime=1388582312.502083447 30 atime=1389081083.108724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnLoginDialog.py0000644000175000001440000000262412261012650025004 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing the login dialog for pysvn. """ from PyQt4.QtGui import QDialog from Ui_SvnLoginDialog import Ui_SvnLoginDialog class SvnLoginDialog(QDialog, Ui_SvnLoginDialog): """ Class implementing the login dialog for pysvn. """ def __init__(self, realm, username, may_save, parent = None): """ Constructor @param realm name of the realm of the requested credentials (string) @param username username as supplied by subversion (string) @param may_save flag indicating, that subversion is willing to save the answers returned (boolean) """ QDialog.__init__(self, parent) self.setupUi(self) self.realmLabel.setText(self.trUtf8("Enter login data for realm %1.")\ .arg(realm)) self.usernameEdit.setText(username) self.saveCheckBox.setEnabled(may_save) if not may_save: self.saveCheckBox.setChecked(False) def getData(self): """ Public method to retrieve the login data. @return tuple of three values (username, password, save) """ return (str(self.usernameEdit.text()), str(self.passwordEdit.text()), self.saveCheckBox.isChecked()) eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnDiffDialog.ui0000644000175000001440000000007411744564726025065 xustar000000000000000030 atime=1389081083.109724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnDiffDialog.ui0000644000175000001440000000505511744564726024617 0ustar00detlevusers00000000000000 SvnDiffDialog 0 0 749 646 Subversion Diff 0 4 Difference <b>Subversion Diff</b><p>This shows the output of the svn diff command.</p> QTextEdit::NoWrap true 8 false 0 1 Errors true false Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Close|QDialogButtonBox::Save contents errors buttonBox eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnNewProjectOptionsDialog.py0000644000175000001440000000013212261012650027632 xustar000000000000000030 mtime=1388582312.514083599 30 atime=1389081083.109724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnNewProjectOptionsDialog.py0000644000175000001440000001243712261012650027373 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2002 - 2014 Detlev Offenbach # """ Module implementing the Subversion Options Dialog for a new project from the repository. """ import os from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQFileDialog from E4Gui.E4Completers import E4DirCompleter from SvnRepoBrowserDialog import SvnRepoBrowserDialog from Ui_SvnNewProjectOptionsDialog import Ui_SvnNewProjectOptionsDialog from Config import ConfigSvnProtocols import Utilities import Preferences class SvnNewProjectOptionsDialog(QDialog, Ui_SvnNewProjectOptionsDialog): """ Class implementing the Options Dialog for a new project from the repository. """ def __init__(self, vcs, parent = None): """ Constructor @param vcs reference to the version control object @param parent parent widget (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.vcsDirectoryCompleter = E4DirCompleter(self.vcsUrlEdit) self.vcsProjectDirCompleter = E4DirCompleter(self.vcsProjectDirEdit) self.protocolCombo.addItems(ConfigSvnProtocols) hd = Utilities.toNativeSeparators(QDir.homePath()) hd = os.path.join(unicode(hd), 'subversionroot') self.vcsUrlEdit.setText(hd) self.vcs = vcs self.localPath = unicode(hd) self.networkPath = "localhost/" self.localProtocol = True self.vcsProjectDirEdit.setText(Utilities.toNativeSeparators( Preferences.getMultiProject("Workspace") or Utilities.getHomeDir())) @pyqtSignature("") def on_vcsUrlButton_clicked(self): """ Private slot to display a selection dialog. """ if self.protocolCombo.currentText() == "file://": directory = KQFileDialog.getExistingDirectory(\ self, self.trUtf8("Select Repository-Directory"), self.vcsUrlEdit.text(), QFileDialog.Options(QFileDialog.ShowDirsOnly)) if not directory.isEmpty(): self.vcsUrlEdit.setText(Utilities.toNativeSeparators(directory)) else: dlg = SvnRepoBrowserDialog(self.vcs, mode = "select", parent = self) dlg.start(self.protocolCombo.currentText() + self.vcsUrlEdit.text()) if dlg.exec_() == QDialog.Accepted: url = dlg.getSelectedUrl() if not url.isEmpty(): protocol = url.section("://", 0, 0) path = url.section("://", 1, 1) self.protocolCombo.setCurrentIndex(\ self.protocolCombo.findText(protocol + "://")) self.vcsUrlEdit.setText(path) @pyqtSignature("") def on_projectDirButton_clicked(self): """ Private slot to display a directory selection dialog. """ directory = KQFileDialog.getExistingDirectory(\ self, self.trUtf8("Select Project Directory"), self.vcsProjectDirEdit.text(), QFileDialog.Options(QFileDialog.ShowDirsOnly)) if not directory.isEmpty(): self.vcsProjectDirEdit.setText(Utilities.toNativeSeparators(directory)) def on_layoutCheckBox_toggled(self, checked): """ Private slot to handle the change of the layout checkbox. @param checked flag indicating the state of the checkbox (boolean) """ self.vcsTagLabel.setEnabled(checked) self.vcsTagEdit.setEnabled(checked) if not checked: self.vcsTagEdit.clear() @pyqtSignature("QString") def on_protocolCombo_activated(self, protocol): """ Private slot to switch the status of the directory selection button. """ if str(protocol) == "file://": self.networkPath = unicode(self.vcsUrlEdit.text()) self.vcsUrlEdit.setText(self.localPath) self.vcsUrlLabel.setText(self.trUtf8("Pat&h:")) self.localProtocol = True else: if self.localProtocol: self.localPath = unicode(self.vcsUrlEdit.text()) self.vcsUrlEdit.setText(self.networkPath) self.vcsUrlLabel.setText(self.trUtf8("&URL:")) self.localProtocol = False @pyqtSlot(str) def on_vcsUrlEdit_textChanged(self, txt): """ Private slot to handle changes of the URL. @param txt current text of the line edit (QString) """ enable = not txt.contains("://") self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(enable) def getData(self): """ Public slot to retrieve the data entered into the dialog. @return a tuple of a string (project directory) and a dictionary containing the data entered. """ scheme = str(self.protocolCombo.currentText()) url = unicode(self.vcsUrlEdit.text()) vcsdatadict = { "url" : '%s%s' % (scheme, url), "tag" : unicode(self.vcsTagEdit.text()), "standardLayout" : self.layoutCheckBox.isChecked(), } return (unicode(self.vcsProjectDirEdit.text()), vcsdatadict) eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/PaxHeaders.8617/SvnConst.py0000644000175000001440000000013212261012650024144 xustar000000000000000030 mtime=1388582312.519083662 30 atime=1389081083.109724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/vcsPySvn/SvnConst.py0000644000175000001440000001035212261012650023677 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing some constants for the pysvn package. """ from PyQt4.QtCore import QT_TRANSLATE_NOOP import pysvn svnNotifyActionMap = { pysvn.wc_notify_action.add : \ QT_TRANSLATE_NOOP('Subversion', 'Add'), pysvn.wc_notify_action.commit_added : \ QT_TRANSLATE_NOOP('Subversion', 'Add'), pysvn.wc_notify_action.commit_deleted : \ QT_TRANSLATE_NOOP('Subversion', 'Delete'), pysvn.wc_notify_action.commit_modified : \ QT_TRANSLATE_NOOP('Subversion', 'Modify'), pysvn.wc_notify_action.commit_postfix_txdelta : None, pysvn.wc_notify_action.commit_replaced : \ QT_TRANSLATE_NOOP('Subversion', 'Replace'), pysvn.wc_notify_action.copy : \ QT_TRANSLATE_NOOP('Subversion', 'Copy'), pysvn.wc_notify_action.delete : \ QT_TRANSLATE_NOOP('Subversion', 'Delete'), pysvn.wc_notify_action.failed_revert : \ QT_TRANSLATE_NOOP('Subversion', 'Failed revert'), pysvn.wc_notify_action.resolved : \ QT_TRANSLATE_NOOP('Subversion', 'Resolve'), pysvn.wc_notify_action.restore : \ QT_TRANSLATE_NOOP('Subversion', 'Restore'), pysvn.wc_notify_action.revert : \ QT_TRANSLATE_NOOP('Subversion', 'Revert'), pysvn.wc_notify_action.skip : \ QT_TRANSLATE_NOOP('Subversion', 'Skip'), pysvn.wc_notify_action.status_completed : None, pysvn.wc_notify_action.status_external : \ QT_TRANSLATE_NOOP('Subversion', 'External'), pysvn.wc_notify_action.update_add : \ QT_TRANSLATE_NOOP('Subversion', 'Add'), pysvn.wc_notify_action.update_completed : None, pysvn.wc_notify_action.update_delete : \ QT_TRANSLATE_NOOP('Subversion', 'Delete'), pysvn.wc_notify_action.update_external : \ QT_TRANSLATE_NOOP('Subversion', 'External'), pysvn.wc_notify_action.update_update : \ QT_TRANSLATE_NOOP('Subversion', 'Update'), pysvn.wc_notify_action.annotate_revision : \ QT_TRANSLATE_NOOP('Subversion', 'Annotate'), } if hasattr( pysvn.wc_notify_action, 'locked' ): svnNotifyActionMap[ pysvn.wc_notify_action.locked ] = \ QT_TRANSLATE_NOOP('Subversion', 'Locking') svnNotifyActionMap[ pysvn.wc_notify_action.unlocked ] = \ QT_TRANSLATE_NOOP('Subversion', 'Unlocking') svnNotifyActionMap[ pysvn.wc_notify_action.failed_lock ] = \ QT_TRANSLATE_NOOP('Subversion', 'Failed lock') svnNotifyActionMap[ pysvn.wc_notify_action.failed_unlock ] = \ QT_TRANSLATE_NOOP('Subversion', 'Failed unlock') if hasattr( pysvn.wc_notify_action, 'changelist_clear'): svnNotifyActionMap[ pysvn.wc_notify_action.changelist_clear ] = \ QT_TRANSLATE_NOOP('Subversion', 'Changelist clear') svnNotifyActionMap[ pysvn.wc_notify_action.changelist_set ] = \ QT_TRANSLATE_NOOP('Subversion', 'Changelist set') svnNotifyActionMap[ pysvn.wc_notify_action.changelist_moved ] = \ QT_TRANSLATE_NOOP('Subversion', 'Changelist moved') svnStatusMap = { pysvn.wc_status_kind.added: \ QT_TRANSLATE_NOOP('Subversion', 'added'), pysvn.wc_status_kind.conflicted: \ QT_TRANSLATE_NOOP('Subversion', 'conflict'), pysvn.wc_status_kind.deleted: \ QT_TRANSLATE_NOOP('Subversion', 'deleted'), pysvn.wc_status_kind.external: \ QT_TRANSLATE_NOOP('Subversion', 'external'), pysvn.wc_status_kind.ignored: \ QT_TRANSLATE_NOOP('Subversion', 'ignored'), pysvn.wc_status_kind.incomplete: \ QT_TRANSLATE_NOOP('Subversion', 'incomplete'), pysvn.wc_status_kind.missing: \ QT_TRANSLATE_NOOP('Subversion', 'missing'), pysvn.wc_status_kind.merged: \ QT_TRANSLATE_NOOP('Subversion', 'merged'), pysvn.wc_status_kind.modified: \ QT_TRANSLATE_NOOP('Subversion', 'modified'), pysvn.wc_status_kind.none: \ QT_TRANSLATE_NOOP('Subversion', 'normal'), pysvn.wc_status_kind.normal: \ QT_TRANSLATE_NOOP('Subversion', 'normal'), pysvn.wc_status_kind.obstructed: \ QT_TRANSLATE_NOOP('Subversion', 'type error'), pysvn.wc_status_kind.replaced: \ QT_TRANSLATE_NOOP('Subversion', 'replaced'), pysvn.wc_status_kind.unversioned: \ QT_TRANSLATE_NOOP('Subversion', 'unversioned'), } eric4-4.5.18/eric/Plugins/VcsPlugins/PaxHeaders.8617/__init__.py0000644000175000001440000000013212261012650022333 xustar000000000000000030 mtime=1388582312.521083688 30 atime=1389081083.109724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/VcsPlugins/__init__.py0000644000175000001440000000026012261012650022063 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Package containing the various version control system plugins. """ eric4-4.5.18/eric/Plugins/PaxHeaders.8617/PluginEricdoc.py0000644000175000001440000000013212261012650021226 xustar000000000000000030 mtime=1388582312.524083726 30 atime=1389081083.109724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/PluginEricdoc.py0000644000175000001440000001405012261012650020760 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing the Ericdoc plugin. """ import os import sys import copy from PyQt4.QtCore import QObject, SIGNAL, QString from PyQt4.QtGui import QDialog, QApplication from KdeQt.KQApplication import e4App from E4Gui.E4Action import E4Action from DocumentationPlugins.Ericdoc.EricdocConfigDialog import EricdocConfigDialog from DocumentationPlugins.Ericdoc.EricdocExecDialog import EricdocExecDialog import Utilities from eric4config import getConfig # Start-Of-Header name = "Ericdoc Plugin" author = "Detlev Offenbach " autoactivate = True deactivateable = True version = "4.4.0" className = "EricdocPlugin" packageName = "__core__" shortDescription = "Show the Ericdoc dialogs." longDescription = """This plugin implements the Ericdoc dialogs.""" \ """ Ericdoc is used to generate a source code documentation""" \ """ for Python and Ruby projects.""" # End-Of-Header error = QString("") def exeDisplayData(): """ Public method to support the display of some executable info. @return dictionary containing the data to query the presence of the executable """ exe = 'eric4_doc' if Utilities.isWindowsPlatform(): exe = os.path.join(getConfig("bindir"), exe +'.bat') data = { "programEntry" : True, "header" : QApplication.translate("EricdocPlugin", "Eric4 Documentation Generator"), "exe" : exe, "versionCommand" : '--version', "versionStartsWith" : 'eric4_', "versionPosition" : -2, "version" : "", "versionCleanup" : None, } return data class EricdocPlugin(QObject): """ Class implementing the Ericdoc plugin. """ def __init__(self, ui): """ Constructor @param ui reference to the user interface object (UI.UserInterface) """ QObject.__init__(self, ui) self.__ui = ui self.__initialize() def __initialize(self): """ Private slot to (re)initialize the plugin. """ self.__projectAct = None def activate(self): """ Public method to activate this plugin. @return tuple of None and activation status (boolean) """ menu = e4App().getObject("Project").getMenu("Apidoc") if menu: self.__projectAct = \ E4Action(self.trUtf8('Generate documentation (eric4_doc)'), self.trUtf8('Generate &documentation (eric4_doc)'), 0, 0, self, 'doc_eric4_doc') self.__projectAct.setStatusTip(\ self.trUtf8('Generate API documentation using eric4_doc')) self.__projectAct.setWhatsThis(self.trUtf8( """Generate documentation""" """

    Generate API documentation using eric4_doc.

    """ )) self.connect(self.__projectAct, SIGNAL('triggered()'), self.__doEricdoc) e4App().getObject("Project").addE4Actions([self.__projectAct]) menu.addAction(self.__projectAct) self.connect(e4App().getObject("Project"), SIGNAL("showMenu"), self.__projectShowMenu) return None, True def deactivate(self): """ Public method to deactivate this plugin. """ self.disconnect(e4App().getObject("Project"), SIGNAL("showMenu"), self.__projectShowMenu) menu = e4App().getObject("Project").getMenu("Apidoc") if menu: menu.removeAction(self.__projectAct) e4App().getObject("Project").removeE4Actions([self.__projectAct]) self.__initialize() def __projectShowMenu(self, menuName, menu): """ Private slot called, when the the project menu or a submenu is about to be shown. @param menuName name of the menu to be shown (string) @param menu reference to the menu (QMenu) """ if menuName == "Apidoc": if self.__projectAct is not None: self.__projectAct.setEnabled(\ e4App().getObject("Project").getProjectLanguage() in \ ["Python", "Python3", "Ruby"]) def __doEricdoc(self): """ Private slot to perform the eric4_doc api documentation generation. """ project = e4App().getObject("Project") parms = project.getData('DOCUMENTATIONPARMS', "ERIC4DOC") dlg = EricdocConfigDialog(project, parms) if dlg.exec_() == QDialog.Accepted: args, parms = dlg.generateParameters() project.setData('DOCUMENTATIONPARMS', "ERIC4DOC", parms) # now do the call dia = EricdocExecDialog("Ericdoc") res = dia.start(args, project.ppath) if res: dia.exec_() outdir = parms['outputDirectory'] if outdir == '': outdir = 'doc' # that is eric4_docs default output dir # add it to the project data, if it isn't in already outdir = project.getRelativePath(outdir) if outdir not in project.pdata['OTHERS']: project.pdata['OTHERS'].append(outdir) project.setDirty(True) project.othersAdded(outdir) if parms['qtHelpEnabled']: outdir = parms['qtHelpOutputDirectory'] if outdir == '': outdir = 'help' # that is eric4_docs default QtHelp output dir # add it to the project data, if it isn't in already outdir = project.getRelativePath(outdir) if outdir not in project.pdata['OTHERS']: project.pdata['OTHERS'].append(outdir) project.setDirty(True) project.othersAdded(outdir) eric4-4.5.18/eric/Plugins/PaxHeaders.8617/WizardPlugins0000644000175000001440000000013112261012660020652 xustar000000000000000030 mtime=1388582320.512184329 29 atime=1389081086.01372434 30 ctime=1389081086.315724332 eric4-4.5.18/eric/Plugins/WizardPlugins/0000755000175000001440000000000012261012660020462 5ustar00detlevusers00000000000000eric4-4.5.18/eric/Plugins/WizardPlugins/PaxHeaders.8617/QRegExpWizard0000644000175000001440000000013212262730776023367 xustar000000000000000030 mtime=1389081086.300724332 30 atime=1389081086.305724332 30 ctime=1389081086.315724332 eric4-4.5.18/eric/Plugins/WizardPlugins/QRegExpWizard/0000755000175000001440000000000012262730776023176 5ustar00detlevusers00000000000000eric4-4.5.18/eric/Plugins/WizardPlugins/QRegExpWizard/PaxHeaders.8617/QRegExpWizardDialog.py0000644000175000001440000000013212261012650027611 xustar000000000000000030 mtime=1388582312.529083789 30 atime=1389081083.109724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/WizardPlugins/QRegExpWizard/QRegExpWizardDialog.py0000644000175000001440000005056612261012650027357 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2004 - 2014 Detlev Offenbach # """ Module implementing the QRegExp wizard dialog. """ import sys import os from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQMessageBox, KQFileDialog from KdeQt.KQMainWindow import KQMainWindow from KdeQt.KQApplication import e4App from Ui_QRegExpWizardDialog import Ui_QRegExpWizardDialog from QRegExpWizardRepeatDialog import QRegExpWizardRepeatDialog from QRegExpWizardCharactersDialog import QRegExpWizardCharactersDialog import UI.PixmapCache import Utilities class QRegExpWizardWidget(QWidget, Ui_QRegExpWizardDialog): """ Class implementing the QRegExp wizard dialog. """ def __init__(self, parent = None, fromEric = True): """ Constructor @param parent parent widget (QWidget) @param fromEric flag indicating a call from within eric4 """ QWidget.__init__(self,parent) self.setupUi(self) # initialize icons of the tool buttons self.charButton.setIcon(UI.PixmapCache.getIcon("characters.png")) self.anycharButton.setIcon(UI.PixmapCache.getIcon("anychar.png")) self.repeatButton.setIcon(UI.PixmapCache.getIcon("repeat.png")) self.nonGroupButton.setIcon(UI.PixmapCache.getIcon("nongroup.png")) self.groupButton.setIcon(UI.PixmapCache.getIcon("group.png")) self.altnButton.setIcon(UI.PixmapCache.getIcon("altn.png")) self.beglineButton.setIcon(UI.PixmapCache.getIcon("begline.png")) self.endlineButton.setIcon(UI.PixmapCache.getIcon("endline.png")) self.wordboundButton.setIcon(UI.PixmapCache.getIcon("wordboundary.png")) self.nonwordboundButton.setIcon(UI.PixmapCache.getIcon("nonwordboundary.png")) self.poslookaheadButton.setIcon(UI.PixmapCache.getIcon("poslookahead.png")) self.neglookaheadButton.setIcon(UI.PixmapCache.getIcon("neglookahead.png")) self.undoButton.setIcon(UI.PixmapCache.getIcon("editUndo.png")) self.redoButton.setIcon(UI.PixmapCache.getIcon("editRedo.png")) self.saveButton = \ self.buttonBox.addButton(self.trUtf8("Save"), QDialogButtonBox.ActionRole) self.saveButton.setToolTip(self.trUtf8("Save the regular expression to a file")) self.loadButton = \ self.buttonBox.addButton(self.trUtf8("Load"), QDialogButtonBox.ActionRole) self.loadButton.setToolTip(self.trUtf8("Load a regular expression from a file")) self.validateButton = \ self.buttonBox.addButton(self.trUtf8("Validate"), QDialogButtonBox.ActionRole) self.validateButton.setToolTip(self.trUtf8("Validate the regular expression")) self.executeButton = \ self.buttonBox.addButton(self.trUtf8("Execute"), QDialogButtonBox.ActionRole) self.executeButton.setToolTip(self.trUtf8("Execute the regular expression")) self.nextButton = \ self.buttonBox.addButton(self.trUtf8("Next match"), QDialogButtonBox.ActionRole) self.nextButton.setToolTip(\ self.trUtf8("Show the next match of the regular expression")) self.nextButton.setEnabled(False) if fromEric: self.buttonBox.button(QDialogButtonBox.Close).hide() self.copyButton = None uitype = e4App().getObject("Project").getProjectType() else: self.copyButton = \ self.buttonBox.addButton(self.trUtf8("Copy"), QDialogButtonBox.ActionRole) self.copyButton.setToolTip(\ self.trUtf8("Copy the regular expression to the clipboard")) self.buttonBox.button(QDialogButtonBox.Ok).hide() self.buttonBox.button(QDialogButtonBox.Cancel).hide() self.variableLabel.hide() self.variableLineEdit.hide() self.variableLine.hide() self.regexpLineEdit.setFocus() def __insertString(self, s, steps=0): """ Private method to insert a string into line edit and move cursor. @param s string to be inserted into the regexp line edit (string or QString) @param steps number of characters to move the cursor (integer). Negative steps moves cursor back, positives forward. """ self.regexpLineEdit.insert(s) self.regexpLineEdit.cursorForward(False, steps) @pyqtSignature("") def on_anycharButton_clicked(self): """ Private slot to handle the any character toolbutton. """ self.__insertString(".") @pyqtSignature("") def on_nonGroupButton_clicked(self): """ Private slot to handle the non group toolbutton. """ self.__insertString("(?:)", -1) @pyqtSignature("") def on_groupButton_clicked(self): """ Private slot to handle the group toolbutton. """ self.__insertString("()", -1) @pyqtSignature("") def on_altnButton_clicked(self): """ Private slot to handle the alternatives toolbutton. """ self.__insertString("(|)", -2) @pyqtSignature("") def on_beglineButton_clicked(self): """ Private slot to handle the begin line toolbutton. """ self.__insertString("^") @pyqtSignature("") def on_endlineButton_clicked(self): """ Private slot to handle the end line toolbutton. """ self.__insertString("$") @pyqtSignature("") def on_wordboundButton_clicked(self): """ Private slot to handle the word boundary toolbutton. """ self.__insertString("\\b") @pyqtSignature("") def on_nonwordboundButton_clicked(self): """ Private slot to handle the non word boundary toolbutton. """ self.__insertString("\\B") @pyqtSignature("") def on_poslookaheadButton_clicked(self): """ Private slot to handle the positive lookahead toolbutton. """ self.__insertString("(?=)", -1) @pyqtSignature("") def on_neglookaheadButton_clicked(self): """ Private slot to handle the negative lookahead toolbutton. """ self.__insertString("(?!)", -1) @pyqtSignature("") def on_repeatButton_clicked(self): """ Private slot to handle the repeat toolbutton. """ dlg = QRegExpWizardRepeatDialog(self) if dlg.exec_() == QDialog.Accepted: self.__insertString(dlg.getRepeat()) @pyqtSignature("") def on_charButton_clicked(self): """ Private slot to handle the characters toolbutton. """ dlg = QRegExpWizardCharactersDialog(self) if dlg.exec_() == QDialog.Accepted: self.__insertString(dlg.getCharacters()) def on_buttonBox_clicked(self, button): """ Private slot called by a button of the button box clicked. @param button button that was clicked (QAbstractButton) """ if button == self.validateButton: self.on_validateButton_clicked() elif button == self.executeButton: self.on_executeButton_clicked() elif button == self.saveButton: self.on_saveButton_clicked() elif button == self.loadButton: self.on_loadButton_clicked() elif button == self.nextButton: self.on_nextButton_clicked() elif self.copyButton and button == self.copyButton: self.on_copyButton_clicked() @pyqtSignature("") def on_saveButton_clicked(self): """ Private slot to save the regexp to a file. """ selectedFilter = QString("") fname = KQFileDialog.getSaveFileName(\ self, self.trUtf8("Save regular expression"), QString(), self.trUtf8("RegExp Files (*.rx);;All Files (*)"), selectedFilter, QFileDialog.Options(QFileDialog.DontConfirmOverwrite)) if not fname.isEmpty(): ext = QFileInfo(fname).suffix() if ext.isEmpty(): ex = selectedFilter.section('(*', 1, 1).section(')', 0, 0) if not ex.isEmpty(): fname.append(ex) if QFileInfo(fname).exists(): res = KQMessageBox.warning(self, self.trUtf8("Save regular expression"), self.trUtf8("

    The file %1 already exists.

    ") .arg(fname), QMessageBox.StandardButtons(\ QMessageBox.Abort | \ QMessageBox.Save), QMessageBox.Abort) if res == QMessageBox.Abort or res == QMessageBox.Cancel: return try: f=open(unicode(Utilities.toNativeSeparators(fname)), "wb") f.write(unicode(self.regexpLineEdit.text())) f.close() except IOError, err: KQMessageBox.information(self, self.trUtf8("Save regular expression"), self.trUtf8("""

    The regular expression could not be saved.

    """ """

    Reason: %1

    """).arg(str(err))) @pyqtSignature("") def on_loadButton_clicked(self): """ Private slot to load a regexp from a file. """ fname = KQFileDialog.getOpenFileName(\ self, self.trUtf8("Load regular expression"), QString(), self.trUtf8("RegExp Files (*.rx);;All Files (*)"), None) if not fname.isEmpty(): try: f=open(unicode(Utilities.toNativeSeparators(fname)), "rb") regexp = f.read() f.close() self.regexpLineEdit.setText(regexp) except IOError, err: KQMessageBox.information(self, self.trUtf8("Save regular expression"), self.trUtf8("""

    The regular expression could not be saved.

    """ """

    Reason: %1

    """).arg(str(err))) @pyqtSignature("") def on_copyButton_clicked(self): """ Private slot to copy the regexp string into the clipboard. This slot is only available, if not called from within eric4. """ escaped = self.regexpLineEdit.text() if not escaped.isEmpty(): escaped = escaped.replace("\\", "\\\\") cb = QApplication.clipboard() cb.setText(escaped, QClipboard.Clipboard) if cb.supportsSelection(): cb.setText(escaped, QClipboard.Selection) @pyqtSignature("") def on_validateButton_clicked(self): """ Private slot to validate the entered regexp. """ regex = self.regexpLineEdit.text() if not regex.isEmpty(): re = QRegExp(regex) if self.caseSensitiveCheckBox.isChecked(): re.setCaseSensitivity(Qt.CaseSensitive) else: re.setCaseSensitivity(Qt.CaseInsensitive) re.setMinimal(self.minimalCheckBox.isChecked()) if self.wildcardCheckBox.isChecked(): re.setPatternSyntax(QRegExp.Wildcard) else: re.setPatternSyntax(QRegExp.RegExp) if re.isValid(): KQMessageBox.information(None, self.trUtf8(""), self.trUtf8("""The regular expression is valid.""")) else: KQMessageBox.critical(None, self.trUtf8("Error"), self.trUtf8("""Invalid regular expression: %1""") .arg(re.errorString())) return else: KQMessageBox.critical(None, self.trUtf8("Error"), self.trUtf8("""A regular expression must be given.""")) @pyqtSignature("") def on_executeButton_clicked(self, startpos = 0): """ Private slot to execute the entered regexp on the test text. This slot will execute the entered regexp on the entered test data and will display the result in the table part of the dialog. @param startpos starting position for the regexp matching """ regex = self.regexpLineEdit.text() text = self.textTextEdit.toPlainText() if not regex.isEmpty() and not text.isEmpty(): re = QRegExp(regex) if self.caseSensitiveCheckBox.isChecked(): re.setCaseSensitivity(Qt.CaseSensitive) else: re.setCaseSensitivity(Qt.CaseInsensitive) re.setMinimal(self.minimalCheckBox.isChecked()) wildcard = self.wildcardCheckBox.isChecked() if wildcard: re.setPatternSyntax(QRegExp.Wildcard) else: re.setPatternSyntax(QRegExp.RegExp) if not re.isValid(): KQMessageBox.critical(None, self.trUtf8("Error"), self.trUtf8("""Invalid regular expression: %1""") .arg(re.errorString())) return offset = re.indexIn(text, startpos) captures = re.captureCount() row = 0 OFFSET = 5 self.resultTable.setColumnCount(0) self.resultTable.setColumnCount(3) self.resultTable.setRowCount(0) self.resultTable.setRowCount(OFFSET) self.resultTable.setItem(row, 0, QTableWidgetItem(self.trUtf8("Regexp"))) self.resultTable.setItem(row, 1, QTableWidgetItem(regex)) if offset != -1: self.lastMatchEnd = offset + re.matchedLength() self.nextButton.setEnabled(True) row += 1 self.resultTable.setItem(row, 0, QTableWidgetItem(self.trUtf8("Offset"))) self.resultTable.setItem(row, 1, QTableWidgetItem(QString.number(offset))) if not wildcard: row += 1 self.resultTable.setItem(row, 0, QTableWidgetItem(self.trUtf8("Captures"))) self.resultTable.setItem(row, 1, QTableWidgetItem(QString.number(captures))) row += 1 self.resultTable.setItem(row, 1, QTableWidgetItem(self.trUtf8("Text"))) self.resultTable.setItem(row, 2, QTableWidgetItem(self.trUtf8("Characters"))) row += 1 self.resultTable.setItem(row, 0, QTableWidgetItem(self.trUtf8("Match"))) self.resultTable.setItem(row, 1, QTableWidgetItem(re.cap(0))) self.resultTable.setItem(row, 2, QTableWidgetItem(QString.number(re.matchedLength()))) if not wildcard: for i in range(1, captures + 1): if re.cap(i).length() > 0: row += 1 self.resultTable.insertRow(row) self.resultTable.setItem(row, 0, QTableWidgetItem(self.trUtf8("Capture #%1").arg(i))) self.resultTable.setItem(row, 1, QTableWidgetItem(re.cap(i))) self.resultTable.setItem(row, 2, QTableWidgetItem(QString.number(re.cap(i).length()))) else: self.resultTable.setRowCount(3) # highlight the matched text tc = self.textTextEdit.textCursor() tc.setPosition(offset) tc.setPosition(self.lastMatchEnd, QTextCursor.KeepAnchor) self.textTextEdit.setTextCursor(tc) else: self.nextButton.setEnabled(False) self.resultTable.setRowCount(2) row += 1 if startpos > 0: self.resultTable.setItem(row, 0, QTableWidgetItem(self.trUtf8("No more matches"))) else: self.resultTable.setItem(row, 0, QTableWidgetItem(self.trUtf8("No matches"))) # remove the highlight tc = self.textTextEdit.textCursor() tc.setPosition(0) self.textTextEdit.setTextCursor(tc) self.resultTable.resizeColumnsToContents() self.resultTable.resizeRowsToContents() self.resultTable.verticalHeader().hide() self.resultTable.horizontalHeader().hide() else: KQMessageBox.critical(None, self.trUtf8("Error"), self.trUtf8("""A regular expression and a text must be given.""")) @pyqtSignature("") def on_nextButton_clicked(self): """ Private slot to find the next match. """ self.on_executeButton_clicked(self.lastMatchEnd) def on_regexpLineEdit_textChanged(self, txt): """ Private slot called when the regexp changes. @param txt the new text of the line edit (QString) """ self.nextButton.setEnabled(False) def getCode(self, indLevel, indString): """ Public method to get the source code. @param indLevel indentation level (int) @param indString string used for indentation (space or tab) (string) @return generated code (string) """ # calculate the indentation string istring = indLevel * indString # now generate the code reVar = unicode(self.variableLineEdit.text()) if not reVar: reVar = "regexp" regexp = unicode(self.regexpLineEdit.text()) code = '%s = QRegExp(r"""%s""")%s' % \ (reVar, regexp.replace('"', '\\"'), os.linesep) if not self.caseSensitiveCheckBox.isChecked(): code += '%s%s.setCaseSensitivity(Qt.CaseInsensitive)%s' % \ (istring, reVar, os.linesep) if self.minimalCheckBox.isChecked(): code += '%s%s.setMinimal(1)%s' % (istring, reVar, os.linesep) if self.wildcardCheckBox.isChecked(): code += '%s%s.setPatternSyntax(QRegExp.Wildcard)%s' % \ (istring, reVar, os.linesep) return code class QRegExpWizardDialog(QDialog): """ Class for the dialog variant. """ def __init__(self, parent = None, fromEric = True): """ Constructor @param parent parent widget (QWidget) @param fromEric flag indicating a call from within eric4 """ QDialog.__init__(self, parent) self.setModal(fromEric) self.setSizeGripEnabled(True) self.__layout = QVBoxLayout(self) self.__layout.setMargin(0) self.setLayout(self.__layout) self.cw = QRegExpWizardWidget(self, fromEric) size = self.cw.size() self.__layout.addWidget(self.cw) self.resize(size) self.connect(self.cw.buttonBox, SIGNAL("accepted()"), self.accept) self.connect(self.cw.buttonBox, SIGNAL("rejected()"), self.reject) def getCode(self, indLevel, indString): """ Public method to get the source code. @param indLevel indentation level (int) @param indString string used for indentation (space or tab) (string) @return generated code (string) """ return self.cw.getCode(indLevel, indString) class QRegExpWizardWindow(KQMainWindow): """ Main window class for the standalone dialog. """ def __init__(self, parent = None): """ Constructor @param parent reference to the parent widget (QWidget) """ KQMainWindow.__init__(self, parent) self.cw = QRegExpWizardWidget(self, fromEric = False) size = self.cw.size() self.setCentralWidget(self.cw) self.resize(size) self.connect(self.cw.buttonBox, SIGNAL("accepted()"), self.close) self.connect(self.cw.buttonBox, SIGNAL("rejected()"), self.close) eric4-4.5.18/eric/Plugins/WizardPlugins/QRegExpWizard/PaxHeaders.8617/QRegExpWizardCharactersDialog.0000644000175000001440000000013212261012650031240 xustar000000000000000030 mtime=1388582312.532083828 30 atime=1389081083.110724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/WizardPlugins/QRegExpWizard/QRegExpWizardCharactersDialog.py0000644000175000001440000002665512261012650031361 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2004 - 2014 Detlev Offenbach # """ Module implementing a dialog for entering character classes. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from Ui_QRegExpWizardCharactersDialog import Ui_QRegExpWizardCharactersDialog class QRegExpWizardCharactersDialog(QDialog, Ui_QRegExpWizardCharactersDialog): """ Class implementing a dialog for entering character classes. """ specialChars = { 4 : "\\a", 5 : "\\f", 6 : "\\n", 7 : "\\r", 8 : "\\t", 9 : "\\v" } predefinedClasses = ["\\s", "\\S", "\\w", "\\W", "\\d", "\\D"] def __init__(self,parent = None): """ Constructor @param parent parent widget (QWidget) """ QDialog.__init__(self,parent) self.setupUi(self) self.comboItems = QStringList() self.comboItems.append(self.trUtf8("Normal character")) self.comboItems.append(self.trUtf8("Unicode character in hexadecimal notation")) self.comboItems.append(self.trUtf8("Unicode character in octal notation")) self.comboItems.append(self.trUtf8("---")) self.comboItems.append(self.trUtf8("Bell character (\\a)")) self.comboItems.append(self.trUtf8("Page break (\\f)")) self.comboItems.append(self.trUtf8("Line feed (\\n)")) self.comboItems.append(self.trUtf8("Carriage return (\\r)")) self.comboItems.append(self.trUtf8("Horizontal tabulator (\\t)")) self.comboItems.append(self.trUtf8("Vertical tabulator (\\v)")) self.charValidator = QRegExpValidator(QRegExp(".{0,1}"), self) self.hexValidator = QRegExpValidator(QRegExp("[0-9a-fA-F]{0,4}"), self) self.octValidator = QRegExpValidator(QRegExp("[0-3]?[0-7]{0,2}"), self) # generate dialog part for single characters self.singlesBoxLayout = QVBoxLayout(self.singlesBox) self.singlesBoxLayout.setObjectName("singlesBoxLayout") self.singlesBoxLayout.setSpacing(6) self.singlesBoxLayout.setMargin(6) self.singlesBox.setLayout(self.singlesBoxLayout) self.singlesView = QScrollArea(self.singlesBox) self.singlesView.setObjectName("singlesView") self.singlesBoxLayout.addWidget(self.singlesView) self.singlesItemsBox = QWidget(self) self.singlesView.setWidget(self.singlesItemsBox) self.singlesItemsBox.setObjectName("singlesItemsBox") self.singlesItemsBoxLayout = QVBoxLayout(self.singlesItemsBox) self.singlesItemsBoxLayout.setMargin(6) self.singlesItemsBoxLayout.setSpacing(6) self.singlesItemsBox.setLayout(self.singlesItemsBoxLayout) self.singlesEntries = [] self.__addSinglesLine() hlayout0 = QHBoxLayout() hlayout0.setMargin(0) hlayout0.setSpacing(6) hlayout0.setObjectName("hlayout0") self.moreSinglesButton = QPushButton(self.trUtf8("Additional Entries"), self.singlesBox) self.moreSinglesButton.setObjectName("moreSinglesButton") hlayout0.addWidget(self.moreSinglesButton) hspacer0 = QSpacerItem(30,20,QSizePolicy.Expanding,QSizePolicy.Minimum) hlayout0.addItem(hspacer0) self.singlesBoxLayout.addLayout(hlayout0) self.connect(self.moreSinglesButton, SIGNAL("clicked()"), self.__addSinglesLine) # generate dialog part for character ranges self.rangesBoxLayout = QVBoxLayout(self.rangesBox) self.rangesBoxLayout.setObjectName("rangesBoxLayout") self.rangesBoxLayout.setSpacing(6) self.rangesBoxLayout.setMargin(6) self.rangesBox.setLayout(self.rangesBoxLayout) self.rangesView = QScrollArea(self.rangesBox) self.rangesView.setObjectName("rangesView") self.rangesBoxLayout.addWidget(self.rangesView) self.rangesItemsBox = QWidget(self) self.rangesView.setWidget(self.rangesItemsBox) self.rangesItemsBox.setObjectName("rangesItemsBox") self.rangesItemsBoxLayout = QVBoxLayout(self.rangesItemsBox) self.rangesItemsBoxLayout.setMargin(6) self.rangesItemsBoxLayout.setSpacing(6) self.rangesItemsBox.setLayout(self.rangesItemsBoxLayout) self.rangesEntries = [] self.__addRangesLine() hlayout1 = QHBoxLayout() hlayout1.setMargin(0) hlayout1.setSpacing(6) hlayout1.setObjectName("hlayout1") self.moreRangesButton = QPushButton(self.trUtf8("Additional Entries"), self.rangesBox) self.moreSinglesButton.setObjectName("moreRangesButton") hlayout1.addWidget(self.moreRangesButton) hspacer1 = QSpacerItem(30,20,QSizePolicy.Expanding,QSizePolicy.Minimum) hlayout1.addItem(hspacer1) self.rangesBoxLayout.addLayout(hlayout1) self.connect(self.moreRangesButton, SIGNAL("clicked()"), self.__addRangesLine) def __addSinglesLine(self): """ Private slot to add a line of entry widgets for single characters. """ hbox = QWidget(self.singlesItemsBox) hboxLayout = QHBoxLayout(hbox) hboxLayout.setMargin(0) hboxLayout.setSpacing(6) hbox.setLayout(hboxLayout) cb1 = QComboBox(hbox) cb1.setEditable(False) cb1.addItems(self.comboItems) hboxLayout.addWidget(cb1) le1 = QLineEdit(hbox) le1.setValidator(self.charValidator) hboxLayout.addWidget(le1) cb2 = QComboBox(hbox) cb2.setEditable(False) cb2.addItems(self.comboItems) hboxLayout.addWidget(cb2) le2 = QLineEdit(hbox) le2.setValidator(self.charValidator) hboxLayout.addWidget(le2) self.singlesItemsBoxLayout.addWidget(hbox) self.connect(cb1, SIGNAL('activated(int)'), self.__singlesCharTypeSelected) self.connect(cb2, SIGNAL('activated(int)'), self.__singlesCharTypeSelected) hbox.show() self.singlesItemsBox.adjustSize() self.singlesEntries.append([cb1, le1]) self.singlesEntries.append([cb2, le2]) def __addRangesLine(self): """ Private slot to add a line of entry widgets for character ranges. """ hbox = QWidget(self.rangesItemsBox) hboxLayout = QHBoxLayout(hbox) hboxLayout.setMargin(0) hboxLayout.setSpacing(6) hbox.setLayout(hboxLayout) l1 = QLabel(self.trUtf8("Between:"), hbox) hboxLayout.addWidget(l1) cb1 = QComboBox(hbox) cb1.setEditable(False) cb1.addItems(self.comboItems) hboxLayout.addWidget(cb1) le1 = QLineEdit(hbox) le1.setValidator(self.charValidator) hboxLayout.addWidget(le1) l2 = QLabel(self.trUtf8("And:"), hbox) hboxLayout.addWidget(l2) cb2 = QComboBox(hbox) cb2.setEditable(False) cb2.addItems(self.comboItems) hboxLayout.addWidget(cb2) le2 = QLineEdit(hbox) le2.setValidator(self.charValidator) hboxLayout.addWidget(le2) self.rangesItemsBoxLayout.addWidget(hbox) self.connect(cb1, SIGNAL('activated(int)'), self.__rangesCharTypeSelected) self.connect(cb2, SIGNAL('activated(int)'), self.__rangesCharTypeSelected) hbox.show() self.rangesItemsBox.adjustSize() self.rangesEntries.append([cb1, le1, cb2, le2]) def __performSelectedAction(self, index, lineedit): """ Private method performing some actions depending on the input. @param index selected list index (integer) @param lineedit line edit widget to act on (QLineEdit) """ if index < 3: lineedit.setEnabled(True) if index == 0: lineedit.setValidator(self.charValidator) elif index == 1: lineedit.setValidator(self.hexValidator) elif index == 2: lineedit.setValidator(self.octValidator) elif index > 3: lineedit.setEnabled(False) lineedit.clear() def __singlesCharTypeSelected(self, index): """ Private slot to handle the activated(int) signal of the single chars combo boxes. @param index selected list index (integer) """ combo = self.sender() for entriesList in self.singlesEntries: if combo == entriesList[0]: self.__performSelectedAction(index, entriesList[1]) def __rangesCharTypeSelected(self, index): """ Private slot to handle the activated(int) signal of the char ranges combo boxes. @param index selected list index (integer) """ combo = self.sender() for entriesList in self.rangesEntries: if combo == entriesList[0]: self.__performSelectedAction(index, entriesList[1]) elif combo == entriesList[2]: self.__performSelectedAction(index, entriesList[3]) def __formatCharacter(self, index, char): """ Private method to format the characters entered into the dialog. @param index selected list index (integer) @param char character string enetered into the dialog (string) @return formated character string (string) """ if index == 0: return char elif index == 1: return "\\x%s" % char.lower() elif index == 2: return "\\0%s" % char else: try: return self.specialChars[index] except KeyError: return "" def getCharacters(self): """ Public method to return the character string assembled via the dialog. @return formatted string for character classes (string) """ regexp = "" # negative character range if self.negativeCheckBox.isChecked(): regexp += "^" # predefined character ranges if self.wordCharCheckBox.isChecked(): regexp += "\\w" if self.nonWordCharCheckBox.isChecked(): regexp += "\\W" if self.digitsCheckBox.isChecked(): regexp += "\\d" if self.nonDigitsCheckBox.isChecked(): regexp += "\\D" if self.whitespaceCheckBox.isChecked(): regexp += "\\s" if self.nonWhitespaceCheckBox.isChecked(): regexp += "\\S" # single characters for entrieslist in self.singlesEntries: index = entrieslist[0].currentIndex() char = unicode(entrieslist[1].text()) regexp += self.__formatCharacter(index, char) # character ranges for entrieslist in self.rangesEntries: if entrieslist[1].text().isEmpty() or \ entrieslist[3].text().isEmpty(): continue index = entrieslist[0].currentIndex() char = unicode(entrieslist[1].text()) regexp += "%s-" % self.__formatCharacter(index, char) index = entrieslist[2].currentIndex() char = unicode(entrieslist[3].text()) regexp += self.__formatCharacter(index, char) if regexp: if len(regexp) == 2 and regexp in self.predefinedClasses: return regexp else: return "[%s]" % regexp else: return "" eric4-4.5.18/eric/Plugins/WizardPlugins/QRegExpWizard/PaxHeaders.8617/QRegExpWizardDialog.ui0000644000175000001440000000007411246226301027605 xustar000000000000000030 atime=1389081083.110724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/WizardPlugins/QRegExpWizard/QRegExpWizardDialog.ui0000644000175000001440000004026111246226301027335 0ustar00detlevusers00000000000000 QRegExpWizardDialog 0 0 749 600 QRegExp Wizard true &Variable Name: variableLineEdit Qt::Horizontal <b>Single character of a range (e.g. [abcd])</b><p>Select a single character of a range via a specific dialog.</p> <b>Single character of a range (e.g. [abcd])</b><p>Select a single character of a range via a specific dialog. This dialog will help to edit the range of characters and add some specific conditions.</p>s ... <b>Any character: '.'</b> <p>Select to insert a dot (.) in your regexp.</p> <b>Any character: '.'</b> <p>Select to insert a dot (.) in your regexp. The dot matches a single character, except line break characters (by default). E.g. 'gr.y' matches 'gray', 'grey', 'gr%y', etc. Use the dot sparingly. Often, a character class or negated character class is faster and more precise.</p> ... <b>Repeat contents</b> <p>Select a repetition condition via a specific dialog. This dialog will help to specify the allowed range for repetitions.</p> <b>Repeat contents</b> <p>Select a repetition condition via a specific dialog. This dialog will help to specify the allowed range for repetitions.</p> ... <b>Non capturing parentheses: (?:)</b> <p>Select to insert some non capturing brackets.</p> <b>Non capturing parentheses: (?:)</b> <p>Select to insert some non capturing brackets. It can be used to apply a regexp quantifier (eg. '?' or '+') to the entire group of characters inside the brakets. E.g. the regex 'Set(?:Value)?' matches 'Set' or 'SetValue'. The '?:' inside the brakets means that the content of the match (called the backreference) is not stored for further use.</p> ... <b>Group: ()</b> <p>Select to insert some capturing brackets.</p> <b>Group: ()</b> <p>Select to insert some capturing brackets. They can be used to apply a regexp quantifier (e.g. '?' or '+') to the entire group of characters inside the brakets. E.g. the regex 'Set(Value)?' matches 'Set' or 'SetValue'. Contrary to non-capturing parentheses, the backreference matched inside the brakets is stored for further use (i.e. 'Value' in the second example above). One can access the backereference with the '\1' expression. </p> <p>E.g. '([a-c])x\1x\1' will match 'axaxa', 'bxbxb' and 'cxcxc'.</p> ... <b>Alternatives: '|'</b> <p>Select to insert the alternation symbol '|'. </p> <b>Alternatives: '|'</b> <p>Select to insert the alternation symbol '|'. The alternation is used to match a single regular expression out of several possible regular expressions. E.g. 'cat|dog|mouse|fish' matches words containing the word 'cat', 'dog','mouse' or 'fish'. Be aware that in the above example, the alternatives refer to whole or part of words. If you want to match exactly the words 'cat', 'dog', ... you should express the fact that you only want to match complete words: '\b(cat|dog|mouse|fish)\b'</p> ... <b>Begin of line: '^'</b> <p>Select to insert the start line character (^).</p> <b>Begin of line: '^'</b> <p>Select to insert the start line character (^). It is used to find some expressions at the begining of lines. E.g. '^[A-Z]' match lines starting with a capitalized character. </p> ... <b>End of line: '$'</b> <p>Select to insert the end of line character ($).</p> <b>End of line: '$'</b> <p>Select to insert the end of line character ($). It is used to find some expressions at the end of lines.</p> ... <b>Word boundary</b> <p>Select to insert the word boudary character (\b).</p> <b>Word boundary</b> <p>Select to insert the word boudary character (\b). This character is used to express the fact that word must begin or end at this position. E.g. '\bcat\b' matches exactly the word 'cat' while 'concatenation' is ignored.</p> ... <b>Non word boundary</b> <p>Select to insert the word boudary character (\B). \B is the negated version of \b.</p> <b>Non word boundary</b> <p>Select to insert the word boudary character (\B). \B is the negated version of \b. \B matches at every position where \b does not. Effectively, \B matches at any position between two word characters as well as at any position between two non-word characters.</p> ... <b>Positive lookahead: (?=<i>regexpr</i>)</b> <p>Select to insert the positive lookhead brackets.</p> <b>Positive lookahead: (?=<i>regexpr</i>)</b> <p>Select to insert the positive lookhead brackets. Basically, positive lookhead is used to match a character only if followed by another one. Writting 'q(?=u)' means that you want to match the 'q' character only if it is followed by 'u'. In this statement 'u' is a trivial regexp which may be replaced by a more complex expression; q(?=[abc])' will match a 'q' if followed by either 'a', 'b' or 'c'.</p> ... <b>Negative lookahead: (?!<i>regexpr</i>)</b> <p>Select to insert the negative lookhead brackets.</p> <b>Negative lookahead: (?!<i>regexpr</i>)</b> <p>Select to insert the negative lookhead brackets. Basically, negative lookhead is used to match a character only if it is not followed by a another one. Writting 'q(?!u)' means that you want to match 'q' only if it is not followed by 'u'. In this statement, 'u' is a trivial regexp which may be replaced by a more complex expression; 'q(?![abc])' will match a 'q' if it is followed by anything else than 'a', 'b' or 'c'.</p> ... Qt::Horizontal QSizePolicy::Fixed 16 20 <b>Undo last edit</b> ... <b>Redo last edit</b> ... Qt::Horizontal QSizePolicy::Expanding 81 24 &Regexp: regexpLineEdit &Text: Qt::AlignTop textTextEdit Case &Sensitive Alt+S true &Minimal Alt+M &Wildcard Alt+W Qt::Horizontal QSizePolicy::Expanding 40 20 QAbstractItemView::NoEditTriggers Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Close|QDialogButtonBox::Ok qPixmapFromMimeSource variableLineEdit regexpLineEdit textTextEdit caseSensitiveCheckBox minimalCheckBox wildcardCheckBox resultTable charButton anycharButton repeatButton nonGroupButton groupButton altnButton beglineButton endlineButton wordboundButton nonwordboundButton poslookaheadButton neglookaheadButton undoButton redoButton undoButton clicked() regexpLineEdit undo() 490 132 487 163 redoButton clicked() regexpLineEdit redo() 526 132 529 163 eric4-4.5.18/eric/Plugins/WizardPlugins/QRegExpWizard/PaxHeaders.8617/__init__.py0000644000175000001440000000013212261012650025534 xustar000000000000000030 mtime=1388582312.534083853 30 atime=1389081083.110724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/WizardPlugins/QRegExpWizard/__init__.py0000644000175000001440000000022512261012650025265 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2004 - 2014 Detlev Offenbach # """ Package implementing the QRegExp wizard. """ eric4-4.5.18/eric/Plugins/WizardPlugins/QRegExpWizard/PaxHeaders.8617/QRegExpWizardRepeatDialog.py0000644000175000001440000000013212261012650030752 xustar000000000000000030 mtime=1388582312.536083878 30 atime=1389081083.110724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/WizardPlugins/QRegExpWizard/QRegExpWizardRepeatDialog.py0000644000175000001440000000433112261012650030505 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2004 - 2014 Detlev Offenbach # """ Module implementing a dialog for entering repeat counts. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from Ui_QRegExpWizardRepeatDialog import Ui_QRegExpWizardRepeatDialog class QRegExpWizardRepeatDialog(QDialog, Ui_QRegExpWizardRepeatDialog): """ Class implementing a dialog for entering repeat counts. """ def __init__(self,parent = None): """ Constructor @param parent parent widget (QWidget) """ QDialog.__init__(self,parent) self.setupUi(self) self.unlimitedButton.setChecked(True) @pyqtSignature("int") def on_lowerSpin_valueChanged(self, value): """ Private slot to handle the lowerSpin valueChanged signal. @param value value of the spinbox (integer) """ if self.upperSpin.value() < value: self.upperSpin.setValue(value) @pyqtSignature("int") def on_upperSpin_valueChanged(self, value): """ Private slot to handle the upperSpin valueChanged signal. @param value value of the spinbox (integer) """ if self.lowerSpin.value() > value: self.lowerSpin.setValue(value) def getRepeat(self): """ Public method to retrieve the dialog's result. @return ready formatted repeat string (string) """ if self.unlimitedButton.isChecked(): return "*" elif self.minButton.isChecked(): reps = self.minSpin.value() if reps == 1: return "+" else: return "{%d,}" % reps elif self.maxButton.isChecked(): reps = self.maxSpin.value() if reps == 1: return "?" else: return "{,%d}" % reps elif self.exactButton.isChecked(): reps = self.exactSpin.value() return "{%d}" % reps elif self.betweenButton.isChecked(): repsMin = self.lowerSpin.value() repsMax = self.upperSpin.value() return "{%d,%d}" % (repsMin, repsMax) eric4-4.5.18/eric/Plugins/WizardPlugins/QRegExpWizard/PaxHeaders.8617/QRegExpWizardCharactersDialog.0000644000175000001440000000007411072705622031254 xustar000000000000000030 atime=1389081083.110724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/WizardPlugins/QRegExpWizard/QRegExpWizardCharactersDialog.ui0000644000175000001440000001051611072705622031342 0ustar00detlevusers00000000000000 QRegExpWizardCharactersDialog 0 0 800 500 Editor for character sets true The defined characters should not match Predefined character ranges Non-whitespace characters Non-digits Whitespace characters Digits Non-word characters Word character 0 0 Single character 0 0 Character ranges Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok qPixmapFromMimeSource negativeCheckBox wordCharCheckBox nonWordCharCheckBox digitsCheckBox nonDigitsCheckBox whitespaceCheckBox nonWhitespaceCheckBox buttonBox accepted() QRegExpWizardCharactersDialog accept() 80 482 80 499 buttonBox rejected() QRegExpWizardCharactersDialog reject() 229 480 229 498 eric4-4.5.18/eric/Plugins/WizardPlugins/QRegExpWizard/PaxHeaders.8617/QRegExpWizardRepeatDialog.ui0000644000175000001440000000007411072705622030753 xustar000000000000000030 atime=1389081083.111724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/WizardPlugins/QRegExpWizard/QRegExpWizardRepeatDialog.ui0000644000175000001440000001703311072705622030504 0ustar00detlevusers00000000000000 QRegExpWizardRepeatDialog 0 0 331 197 Number of repetitions true true 0 times times times false Qt::AlignRight 1 false Qt::AlignRight 1 and Between false Qt::AlignRight 1 Exactly false Qt::AlignRight 1 Maximum Minimum false Qt::AlignRight 1 Unlimited (incl. zero times) Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok qPixmapFromMimeSource unlimitedButton minButton minSpin maxButton maxSpin exactButton exactSpin betweenButton lowerSpin upperSpin minButton toggled(bool) minSpin setEnabled(bool) 53 43 121 47 maxButton toggled(bool) maxSpin setEnabled(bool) 58 68 117 67 exactButton toggled(bool) exactSpin setEnabled(bool) 53 99 116 98 betweenButton toggled(bool) lowerSpin setEnabled(bool) 52 126 119 124 betweenButton toggled(bool) upperSpin setEnabled(bool) 53 125 282 125 buttonBox accepted() QRegExpWizardRepeatDialog accept() 16 164 16 185 buttonBox rejected() QRegExpWizardRepeatDialog reject() 72 167 72 181 eric4-4.5.18/eric/Plugins/WizardPlugins/PaxHeaders.8617/FontDialogWizard0000644000175000001440000000013212262730776024102 xustar000000000000000030 mtime=1389081086.300724332 30 atime=1389081086.305724332 30 ctime=1389081086.315724332 eric4-4.5.18/eric/Plugins/WizardPlugins/FontDialogWizard/0000755000175000001440000000000012262730776023711 5ustar00detlevusers00000000000000eric4-4.5.18/eric/Plugins/WizardPlugins/FontDialogWizard/PaxHeaders.8617/__init__.py0000644000175000001440000000013212261012650026247 xustar000000000000000030 mtime=1388582312.546084005 30 atime=1389081083.111724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/WizardPlugins/FontDialogWizard/__init__.py0000644000175000001440000000023112261012650025775 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Package implementing the font dialog wizard. """ eric4-4.5.18/eric/Plugins/WizardPlugins/FontDialogWizard/PaxHeaders.8617/FontDialogWizardDialog.py0000644000175000001440000000013212261012650031037 xustar000000000000000030 mtime=1388582312.548084031 30 atime=1389081083.111724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/WizardPlugins/FontDialogWizard/FontDialogWizardDialog.py0000644000175000001440000000576712261012650030610 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Module implementing the font dialog wizard dialog. """ import os from PyQt4.QtCore import * from PyQt4.QtGui import * from Ui_FontDialogWizardDialog import Ui_FontDialogWizardDialog class FontDialogWizardDialog(QDialog, Ui_FontDialogWizardDialog): """ Class implementing the font dialog wizard dialog. It displays a dialog for entering the parameters for the QFontDialog code generator. """ def __init__(self, parent=None): """ Constructor @param parent parent widget (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.bTest = \ self.buttonBox.addButton(self.trUtf8("Test"), QDialogButtonBox.ActionRole) self.font = None def on_buttonBox_clicked(self, button): """ Private slot called by a button of the button box clicked. @param button button that was clicked (QAbstractButton) """ if button == self.bTest: self.on_bTest_clicked() @pyqtSignature("") def on_bTest_clicked(self): """ Private method to test the selected options. """ if self.font is None: QFontDialog.getFont() else: QFontDialog.getFont(self.font) def on_eVariable_textChanged(self, text): """ Private slot to handle the textChanged signal of eVariable. @param text the new text (QString) """ if text.isEmpty(): self.bTest.setEnabled(True) else: self.bTest.setEnabled(False) @pyqtSignature("") def on_fontButton_clicked(self): """ Private slot to handle the button press to select a font via a font selection dialog. """ if self.font is None: font, ok = QFontDialog.getFont() else: font, ok = QFontDialog.getFont(self.font) if ok: self.font = font else: self.font = None def getCode(self, indLevel, indString): """ Public method to get the source code. @param indLevel indentation level (int) @param indString string used for indentation (space or tab) (string) @return generated code (string) """ # calculate our indentation level and the indentation string il = indLevel + 1 istring = il * indString # now generate the code code = 'QFontDialog.getFont(' if self.eVariable.text().isEmpty(): if self.font is not None: code += 'QFont("%s", %d, %d, %d)' % \ (self.font.family(), self.font.pointSize(), self.font.weight(), self.font.italic()) else: code += str(self.eVariable.text()) code += ')%s' % os.linesep return code eric4-4.5.18/eric/Plugins/WizardPlugins/FontDialogWizard/PaxHeaders.8617/FontDialogWizardDialog.ui0000644000175000001440000000007411072705621031037 xustar000000000000000030 atime=1389081083.111724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/WizardPlugins/FontDialogWizard/FontDialogWizardDialog.ui0000644000175000001440000000616211072705621030571 0ustar00detlevusers00000000000000 FontDialogWizardDialog 0 0 377 118 QFontDialog Wizard true Qt::Horizontal QSizePolicy::Expanding 30 0 Press to select a font via a dialog Select Font ... Qt::Horizontal QSizePolicy::Expanding 30 0 Variable Enter a variable name Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok qPixmapFromMimeSource fontButton eVariable buttonBox accepted() FontDialogWizardDialog accept() 20 97 20 120 buttonBox rejected() FontDialogWizardDialog reject() 76 100 76 119 eric4-4.5.18/eric/Plugins/WizardPlugins/PaxHeaders.8617/PyRegExpWizard0000644000175000001440000000013212262730776023557 xustar000000000000000030 mtime=1389081086.300724332 30 atime=1389081086.305724332 30 ctime=1389081086.315724332 eric4-4.5.18/eric/Plugins/WizardPlugins/PyRegExpWizard/0000755000175000001440000000000012262730776023366 5ustar00detlevusers00000000000000eric4-4.5.18/eric/Plugins/WizardPlugins/PyRegExpWizard/PaxHeaders.8617/PyRegExpWizardDialog.ui0000644000175000001440000000007411170420646030171 xustar000000000000000030 atime=1389081083.112724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardDialog.ui0000644000175000001440000005630011170420646027722 0ustar00detlevusers00000000000000 PyRegExpWizardDialog 0 0 750 700 Python re Wizard true Python Version Python 2 true Python 3 Qt::Horizontal 535 20 Variable Name: Include import statement QFrame::HLine QFrame::Sunken Qt::Horizontal <b>Comment: (?#)</b> <p>Insert some comment inside your regexp.</p> <b>Comment: (?#)</b> <p>Insert some comment inside your regexp.The regex engine ignores everything after the (?# until the first closing round bracket. The following example could clarify the regexp which match a valid date: </p> <p>(?#year)(19|20)\d\d[- /.](?#month)(0[1-9]|1[012])[- /.](?#day)(0[1-9]|[12][0-9]|3[01])</p> ... <b>Single character of a range (e.g. [abcd])</b><p>Select a single character of a range via a specific dialog.</p> <b>Single character of a range (e.g. [abcd])</b><p>Select a single character of a range via a specific dialog. This dialog will help to edit the range of characters and add some specific conditions.</p>s ... <b>Any character: '.'</b> <p>Select to insert a dot (.) in your regexp.</p> <b>Any character: '.'</b> <p>Select to insert a dot (.) in your regexp. The dot matches a single character, except line break characters (by default). E.g. 'gr.y' matches 'gray', 'grey', 'gr%y', etc. Use the dot sparingly. Often, a character class or negated character class is faster and more precise.</p> ... <b>Repeat contents</b> <p>Select a repetition condition via a specific dialog. This dialog will help to specify the allowed range for repetitions.</p> <b>Repeat contents</b> <p>Select a repetition condition via a specific dialog. This dialog will help to specify the allowed range for repetitions.</p> ... <b>Non capturing parentheses: (?:)</b> <p>Select to insert some non capturing brackets.</p> <b>Non capturing parentheses: (?:)</b> <p>Select to insert some non capturing brackets. It can be used to apply a regexp quantifier (eg. '?' or '+') to the entire group of characters inside the brakets. E.g. the regex 'Set(?:Value)?' matches 'Set' or 'SetValue'. The '?:' inside the brakets means that the content of the match (called the backreference) is not stored for further use.</p> ... <b>Group: ()</b> <p>Select to insert some capturing brackets.</p> <b>Group: ()</b> <p>Select to insert some capturing brackets. They can be used to apply a regexp quantifier (e.g. '?' or '+') to the entire group of characters inside the brakets. E.g. the regex 'Set(Value)?' matches 'Set' or 'SetValue'. Contrary to non-capturing parentheses, the backreference matched inside the brakets is stored for further use (i.e. 'Value' in the second example above). One can access the backereference with the '\1' expression. </p> <p>E.g. '([a-c])x\1x\1' will match 'axaxa', 'bxbxb' and 'cxcxc'.</p> ... <b>Named group: (?P&lt;<i>groupname</i>&gt;)</b> <p>Select to insert some named group brackets.</p> <b>Named group: (?P&lt;<i>groupname</i>&gt;)</b> <p>Select to insert some named group brackets. Usage is similar to standard group parentheses as the matched backreference is also stored for further usage. The difference is that a name is given to the match. This is useful when the work to do on the match becomes a bit complicated. One can access the backreference via the group name (i.e (?P=<i>groupname</i>)). E.g. (?P<foo>[abc])x(?P=foo)x(?P=foo)x matches 'axaxax','bxbxbx' or 'cxcxcx' ('foo' is the group name)</p> ... <b>Reference named group: (?P=<i>groupname</i>)</b> <p>Select to insert a reference to named group previously declared.</p> <b>Reference named group: (?P=<i>groupname</i>)</b> <p>Select to insert a reference to named group previously declared. Each reference group refers to the match found by the corresponding named group. In the following example, (?P=foo) may refer to the charaters 'a','b' or 'c'.</p> <p>E.g. (?P<foo>[abc])x(?P=foo)x(?P=foo)x matches 'axaxax','bxbxbx' or 'cxcxcx'.</p> ... <b>Alternatives: '|'</b> <p>Select to insert the alternation symbol '|'. </p> <b>Alternatives: '|'</b> <p>Select to insert the alternation symbol '|'. The alternation is used to match a single regular expression out of several possible regular expressions. E.g. 'cat|dog|mouse|fish' matches words containing the word 'cat', 'dog','mouse' or 'fish'. Be aware that in the above example, the alternatives refer to whole or part of words. If you want to match exactly the words 'cat', 'dog', ... you should express the fact that you only want to match complete words: '\b(cat|dog|mouse|fish)\b'</p> ... <b>Begin of line: '^'</b> <p>Select to insert the start line character (^).</p> <b>Begin of line: '^'</b> <p>Select to insert the start line character (^). It is used to find some expressions at the begining of lines. E.g. '^[A-Z]' match lines starting with a capitalized character. </p> ... <b>End of line: '$'</b> <p>Select to insert the end of line character ($).</p> <b>End of line: '$'</b> <p>Select to insert the end of line character ($). It is used to find some expressions at the end of lines.</p> ... <b>Word boundary</b> <p>Select to insert the word boudary character (\b).</p> <b>Word boundary</b> <p>Select to insert the word boudary character (\b). This character is used to express the fact that word must begin or end at this position. E.g. '\bcat\b' matches exactly the word 'cat' while 'concatenation' is ignored.</p> ... <b>Non word boundary</b> <p>Select to insert the word boudary character (\B). \B is the negated version of \b.</p> <b>Non word boundary</b> <p>Select to insert the word boudary character (\B). \B is the negated version of \b. \B matches at every position where \b does not. Effectively, \B matches at any position between two word characters as well as at any position between two non-word characters.</p> ... <b>Positive lookahead: (?=<i>regexpr</i>)</b> <p>Select to insert the positive lookhead brackets.</p> <b>Positive lookahead: (?=<i>regexpr</i>)</b> <p>Select to insert the positive lookhead brackets. Basically, positive lookhead is used to match a character only if followed by another one. Writting 'q(?=u)' means that you want to match the 'q' character only if it is followed by 'u'. In this statement 'u' is a trivial regexp which may be replaced by a more complex expression; q(?=[abc])' will match a 'q' if followed by either 'a', 'b' or 'c'.</p> ... <b>Negative lookahead: (?!<i>regexpr</i>)</b> <p>Select to insert the negative lookhead brackets.</p> <b>Negative lookahead: (?!<i>regexpr</i>)</b> <p>Select to insert the negative lookhead brackets. Basically, negative lookhead is used to match a character only if it is not followed by a another one. Writting 'q(?!u)' means that you want to match 'q' only if it is not followed by 'u'. In this statement, 'u' is a trivial regexp which may be replaced by a more complex expression; 'q(?![abc])' will match a 'q' if it is followed by anything else than 'a', 'b' or 'c'.</p> ... <b>Positive lookbehind: (?&lt;=<i>regexpr</i>)</b> <p>Select to insert the positive lookbehind brackets.</p> <b>Positive lookbehind: (?&lt;=<i>regexpr</i>)</b> <p>Select to insert the positive lookbehind brackets. Lookbehind has the same effect as lookahead, but works backwards. It is used to match a character only if preceded by another one. Writting '(?&lt;=u)q' means that you want to match the 'q' character only if it is preceded by 'u'. As with lookhead, 'u' may be replaced by a more complex expression; '(?&lt;=[abc])q' will match a 'q' if preceded by either 'a', 'b' or 'c'.</p> ... <b>Negative lookbehind (?&lt;!<i>regexpr</i>)</b> <p>Select to insert the negative lookbehind brackets.</p> <b>Negative lookbehind (?&lt;!<i>regexpr</i>)</b> <p>Select to insert the negative lookbehind brackets. Lookbehind has the same effect as lookahead, but works backwards. It is used to match a character only if not preceded by another one. Writting '(?&lt;!u)q' means that you want to match the 'q' character only if it is not preceded by 'u'. As other lookaround, 'u' may be replaced by a more complex expression; '(?&lt;![abc])q' will match a 'q' only if not preceded by either 'a', 'b' nor 'c'.</p> ... Qt::Horizontal QSizePolicy::Fixed 16 20 <b>Undo last edit</b> ... <b>Redo last edit</b> ... Qt::Horizontal QSizePolicy::Expanding 20 20 Regexp: Qt::AlignTop 0 1 false 0 2 QAbstractItemView::NoEditTriggers "^" matches beginning of line, "$" matches end of line Match Linebreaks Unicode Verbose Regexp Case Sensitive true Observe Locale "." matches linebreaks as well Dot matches Linebreak Text: Qt::AlignTop 0 1 false Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Close|QDialogButtonBox::Ok qPixmapFromMimeSource py2Button py3Button variableLineEdit importCheckBox commentButton charButton anycharButton repeatButton nonGroupButton groupButton namedGroupButton namedReferenceButton altnButton beglineButton endlineButton wordboundButton nonwordboundButton poslookaheadButton neglookaheadButton poslookbehindButton neglookbehindButton undoButton redoButton regexpTextEdit textTextEdit caseSensitiveCheckBox verboseCheckBox multilineCheckBox localeCheckBox dotallCheckBox unicodeCheckBox resultTable buttonBox eric4-4.5.18/eric/Plugins/WizardPlugins/PyRegExpWizard/PaxHeaders.8617/PyRegExpWizardCharactersDialo0000644000175000001440000000007411072705621031406 xustar000000000000000030 atime=1389081083.112724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardCharactersDialog.ui0000644000175000001440000001052411072705621031720 0ustar00detlevusers00000000000000 PyRegExpWizardCharactersDialog 0 0 800 500 Editor for character sets true The defined characters should not match Predefined character ranges Non-whitespace characters Non-digits Whitespace characters Digits Non-word characters Word character 0 0 Single character 0 0 Character ranges Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok qPixmapFromMimeSource negativeCheckBox wordCharCheckBox nonWordCharCheckBox digitsCheckBox nonDigitsCheckBox whitespaceCheckBox nonWhitespaceCheckBox buttonBox accepted() PyRegExpWizardCharactersDialog accept() 157 476 157 498 buttonBox rejected() PyRegExpWizardCharactersDialog reject() 269 477 269 499 eric4-4.5.18/eric/Plugins/WizardPlugins/PyRegExpWizard/PaxHeaders.8617/PyRegExpWizardRepeatDialog.ui0000644000175000001440000000007411072705621031332 xustar000000000000000030 atime=1389081083.112724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardRepeatDialog.ui0000644000175000001440000001736311072705621031071 0ustar00detlevusers00000000000000 PyRegExpWizardRepeatDialog 0 0 331 223 Number of repetitions true true 0 times times times false Qt::AlignRight 1 false Qt::AlignRight 1 and Between false Qt::AlignRight 1 Exactly false Qt::AlignRight 1 Maximum Minimum false Qt::AlignRight 1 Unlimited (incl. zero times) Minimal match Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok qPixmapFromMimeSource unlimitedButton minButton minSpin maxButton maxSpin exactButton exactSpin betweenButton lowerSpin upperSpin minimalCheckBox minButton toggled(bool) minSpin setEnabled(bool) 53 43 121 47 maxButton toggled(bool) maxSpin setEnabled(bool) 58 68 117 67 exactButton toggled(bool) exactSpin setEnabled(bool) 61 114 162 114 betweenButton toggled(bool) lowerSpin setEnabled(bool) 60 143 162 143 betweenButton toggled(bool) upperSpin setEnabled(bool) 61 143 322 143 buttonBox accepted() PyRegExpWizardRepeatDialog accept() 19 190 19 211 buttonBox rejected() PyRegExpWizardRepeatDialog reject() 61 192 61 210 eric4-4.5.18/eric/Plugins/WizardPlugins/PyRegExpWizard/PaxHeaders.8617/PyRegExpWizardRepeatDialog.py0000644000175000001440000000013212261012650031332 xustar000000000000000030 mtime=1388582312.551084068 30 atime=1389081083.112724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardRepeatDialog.py0000644000175000001440000000465012261012650031071 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2004 - 2014 Detlev Offenbach # """ Module implementing a dialog for entering repeat counts. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from Ui_PyRegExpWizardRepeatDialog import Ui_PyRegExpWizardRepeatDialog class PyRegExpWizardRepeatDialog(QDialog, Ui_PyRegExpWizardRepeatDialog): """ Class implementing a dialog for entering repeat counts. """ def __init__(self,parent = None): """ Constructor @param parent parent widget (QWidget) """ QDialog.__init__(self,parent) self.setupUi(self) self.unlimitedButton.setChecked(True) @pyqtSignature("int") def on_lowerSpin_valueChanged(self, value): """ Private slot to handle the lowerSpin valueChanged signal. @param value value of the spinbox (integer) """ if self.upperSpin.value() < value: self.upperSpin.setValue(value) @pyqtSignature("int") def on_upperSpin_valueChanged(self, value): """ Private slot to handle the upperSpin valueChanged signal. @param value value of the spinbox (integer) """ if self.lowerSpin.value() > value: self.lowerSpin.setValue(value) def getRepeat(self): """ Public method to retrieve the dialog's result. @return ready formatted repeat string (string) """ if self.minimalCheckBox.isChecked(): minimal = "?" else: minimal = "" if self.unlimitedButton.isChecked(): return "*" + minimal elif self.minButton.isChecked(): reps = self.minSpin.value() if reps == 1: return "+" + minimal else: return "{%d,}%s" % (reps, minimal) elif self.maxButton.isChecked(): reps = self.maxSpin.value() if reps == 1: return "?" + minimal else: return "{,%d}%s" % (reps, minimal) elif self.exactButton.isChecked(): reps = self.exactSpin.value() return "{%d}%s" % (reps, minimal) elif self.betweenButton.isChecked(): repsMin = self.lowerSpin.value() repsMax = self.upperSpin.value() return "{%d,%d}%s" % (repsMin, repsMax, minimal) eric4-4.5.18/eric/Plugins/WizardPlugins/PyRegExpWizard/PaxHeaders.8617/__init__.py0000644000175000001440000000013212261012650025724 xustar000000000000000030 mtime=1388582312.555084119 30 atime=1389081083.112724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/WizardPlugins/PyRegExpWizard/__init__.py0000644000175000001440000000022712261012650025457 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2004 - 2014 Detlev Offenbach # """ Package implementing the Python re wizard. """ eric4-4.5.18/eric/Plugins/WizardPlugins/PyRegExpWizard/PaxHeaders.8617/PyRegExpWizardDialog.py0000644000175000001440000000013212261012650030171 xustar000000000000000030 mtime=1388582312.568084285 30 atime=1389081083.126724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardDialog.py0000644000175000001440000006433112261012650027732 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2004 - 2014 Detlev Offenbach # """ Module implementing the Python re wizard dialog. """ import sys import os import re from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQMessageBox, KQInputDialog, KQFileDialog from KdeQt.KQMainWindow import KQMainWindow from Ui_PyRegExpWizardDialog import Ui_PyRegExpWizardDialog from PyRegExpWizardRepeatDialog import PyRegExpWizardRepeatDialog from PyRegExpWizardCharactersDialog import PyRegExpWizardCharactersDialog import UI.PixmapCache import Utilities class PyRegExpWizardWidget(QWidget, Ui_PyRegExpWizardDialog): """ Class implementing the Python re wizard dialog. """ def __init__(self, parent = None, fromEric = True): """ Constructor @param parent parent widget (QWidget) @param fromEric flag indicating a call from within eric4 """ QWidget.__init__(self,parent) self.setupUi(self) # initialize icons of the tool buttons self.commentButton.setIcon(UI.PixmapCache.getIcon("comment.png")) self.charButton.setIcon(UI.PixmapCache.getIcon("characters.png")) self.anycharButton.setIcon(UI.PixmapCache.getIcon("anychar.png")) self.repeatButton.setIcon(UI.PixmapCache.getIcon("repeat.png")) self.nonGroupButton.setIcon(UI.PixmapCache.getIcon("nongroup.png")) self.groupButton.setIcon(UI.PixmapCache.getIcon("group.png")) self.namedGroupButton.setIcon(UI.PixmapCache.getIcon("namedgroup.png")) self.namedReferenceButton.setIcon(UI.PixmapCache.getIcon("namedreference.png")) self.altnButton.setIcon(UI.PixmapCache.getIcon("altn.png")) self.beglineButton.setIcon(UI.PixmapCache.getIcon("begline.png")) self.endlineButton.setIcon(UI.PixmapCache.getIcon("endline.png")) self.wordboundButton.setIcon(UI.PixmapCache.getIcon("wordboundary.png")) self.nonwordboundButton.setIcon(UI.PixmapCache.getIcon("nonwordboundary.png")) self.poslookaheadButton.setIcon(UI.PixmapCache.getIcon("poslookahead.png")) self.neglookaheadButton.setIcon(UI.PixmapCache.getIcon("neglookahead.png")) self.poslookbehindButton.setIcon(UI.PixmapCache.getIcon("poslookbehind.png")) self.neglookbehindButton.setIcon(UI.PixmapCache.getIcon("neglookbehind.png")) self.undoButton.setIcon(UI.PixmapCache.getIcon("editUndo.png")) self.redoButton.setIcon(UI.PixmapCache.getIcon("editRedo.png")) self.namedGroups = re.compile(r"""\(?P<([^>]+)>""").findall self.saveButton = \ self.buttonBox.addButton(self.trUtf8("Save"), QDialogButtonBox.ActionRole) self.saveButton.setToolTip(self.trUtf8("Save the regular expression to a file")) self.loadButton = \ self.buttonBox.addButton(self.trUtf8("Load"), QDialogButtonBox.ActionRole) self.loadButton.setToolTip(self.trUtf8("Load a regular expression from a file")) self.validateButton = \ self.buttonBox.addButton(self.trUtf8("Validate"), QDialogButtonBox.ActionRole) self.validateButton.setToolTip(self.trUtf8("Validate the regular expression")) self.executeButton = \ self.buttonBox.addButton(self.trUtf8("Execute"), QDialogButtonBox.ActionRole) self.executeButton.setToolTip(self.trUtf8("Execute the regular expression")) self.nextButton = \ self.buttonBox.addButton(self.trUtf8("Next match"), QDialogButtonBox.ActionRole) self.nextButton.setToolTip(\ self.trUtf8("Show the next match of the regular expression")) self.nextButton.setEnabled(False) if fromEric: self.buttonBox.button(QDialogButtonBox.Close).hide() self.copyButton = None else: self.copyButton = \ self.buttonBox.addButton(self.trUtf8("Copy"), QDialogButtonBox.ActionRole) self.copyButton.setToolTip(\ self.trUtf8("Copy the regular expression to the clipboard")) self.buttonBox.button(QDialogButtonBox.Ok).hide() self.buttonBox.button(QDialogButtonBox.Cancel).hide() self.variableLabel.hide() self.variableLineEdit.hide() self.variableLine.hide() self.importCheckBox.hide() self.regexpTextEdit.setFocus() def __insertString(self, s, steps = 0): """ Private method to insert a string into line edit and move cursor. @param s string to be inserted into the regexp line edit (string or QString) @param steps number of characters to move the cursor (integer). Negative steps moves cursor back, positives forward. """ self.regexpTextEdit.insertPlainText(s) tc = self.regexpTextEdit.textCursor() if steps != 0: if steps < 0: act = QTextCursor.Left steps = abs(steps) else: act = QTextCursor.Right for i in range(steps): tc.movePosition(act) self.regexpTextEdit.setTextCursor(tc) @pyqtSignature("") def on_commentButton_clicked(self): """ Private slot to handle the comment toolbutton. """ self.__insertString("(?#)", -1) @pyqtSignature("") def on_anycharButton_clicked(self): """ Private slot to handle the any character toolbutton. """ self.__insertString(".") @pyqtSignature("") def on_nonGroupButton_clicked(self): """ Private slot to handle the non group toolbutton. """ self.__insertString("(?:)", -1) @pyqtSignature("") def on_groupButton_clicked(self): """ Private slot to handle the group toolbutton. """ self.__insertString("()", -1) @pyqtSignature("") def on_namedGroupButton_clicked(self): """ Private slot to handle the named group toolbutton. """ self.__insertString("(?P<>)", -2) @pyqtSignature("") def on_namedReferenceButton_clicked(self): """ Private slot to handle the named reference toolbutton. """ # determine cursor position as length into text length = self.regexpTextEdit.textCursor().position() # only present group names that occur before the current cursor position regex = unicode(self.regexpTextEdit.toPlainText().left(length)) names = self.namedGroups(regex) if not names: KQMessageBox.information(None, self.trUtf8("Named reference"), self.trUtf8("""No named groups have been defined yet.""")) return qs = QStringList() for name in names: qs.append(name) groupName, ok = KQInputDialog.getItem(\ None, self.trUtf8("Named reference"), self.trUtf8("Select group name:"), qs, 0, True) if ok and not groupName.isEmpty(): self.__insertString("(?P=%s)" % groupName) @pyqtSignature("") def on_altnButton_clicked(self): """ Private slot to handle the alternatives toolbutton. """ self.__insertString("(|)", -2) @pyqtSignature("") def on_beglineButton_clicked(self): """ Private slot to handle the begin line toolbutton. """ self.__insertString("^") @pyqtSignature("") def on_endlineButton_clicked(self): """ Private slot to handle the end line toolbutton. """ self.__insertString("$") @pyqtSignature("") def on_wordboundButton_clicked(self): """ Private slot to handle the word boundary toolbutton. """ self.__insertString("\\b") @pyqtSignature("") def on_nonwordboundButton_clicked(self): """ Private slot to handle the non word boundary toolbutton. """ self.__insertString("\\B") @pyqtSignature("") def on_poslookaheadButton_clicked(self): """ Private slot to handle the positive lookahead toolbutton. """ self.__insertString("(?=)", -1) @pyqtSignature("") def on_neglookaheadButton_clicked(self): """ Private slot to handle the negative lookahead toolbutton. """ self.__insertString("(?!)", -1) @pyqtSignature("") def on_poslookbehindButton_clicked(self): """ Private slot to handle the positive lookbehind toolbutton. """ self.__insertString("(?<=)", -1) @pyqtSignature("") def on_neglookbehindButton_clicked(self): """ Private slot to handle the negative lookbehind toolbutton. """ self.__insertString("(?The file %1 already exists.

    ") .arg(fname), QMessageBox.StandardButtons(\ QMessageBox.Abort | \ QMessageBox.Save), QMessageBox.Abort) if res == QMessageBox.Abort or res == QMessageBox.Cancel: return try: f=open(unicode(Utilities.toNativeSeparators(fname)), "wb") f.write(unicode(self.regexpTextEdit.toPlainText())) f.close() except IOError, err: KQMessageBox.information(self, self.trUtf8("Save regular expression"), self.trUtf8("""

    The regular expression could not be saved.

    """ """

    Reason: %1

    """).arg(str(err))) @pyqtSignature("") def on_loadButton_clicked(self): """ Private slot to load a regexp from a file. """ fname = KQFileDialog.getOpenFileName(\ self, self.trUtf8("Load regular expression"), QString(), self.trUtf8("RegExp Files (*.rx);;All Files (*)"), None) if not fname.isEmpty(): try: f=open(unicode(Utilities.toNativeSeparators(fname)), "rb") regexp = f.read() f.close() self.regexpTextEdit.setPlainText(regexp) except IOError, err: KQMessageBox.information(self, self.trUtf8("Save regular expression"), self.trUtf8("""

    The regular expression could not be saved.

    """ """

    Reason: %1

    """).arg(str(err))) @pyqtSignature("") def on_copyButton_clicked(self): """ Private slot to copy the regexp string into the clipboard. This slot is only available, if not called from within eric4. """ escaped = self.regexpTextEdit.toPlainText() if not escaped.isEmpty(): escaped = escaped.replace("\\", "\\\\") cb = QApplication.clipboard() cb.setText(escaped, QClipboard.Clipboard) if cb.supportsSelection(): cb.setText(escaped, QClipboard.Selection) @pyqtSignature("") def on_validateButton_clicked(self): """ Private slot to validate the entered regexp. """ regex = unicode(self.regexpTextEdit.toPlainText()) if regex: try: flags = 0 if not self.caseSensitiveCheckBox.isChecked(): flags |= re.IGNORECASE if self.multilineCheckBox.isChecked(): flags |= re.MULTILINE if self.dotallCheckBox.isChecked(): flags |= re.DOTALL if self.verboseCheckBox.isChecked(): flags |= re.VERBOSE if self.py2Button.isChecked(): if self.localeCheckBox.isChecked(): flags |= re.LOCALE if self.unicodeCheckBox.isChecked(): flags |= re.UNICODE else: if self.unicodeCheckBox.isChecked(): flags |= re.ASCII re.compile(regex, flags) KQMessageBox.information(None, self.trUtf8(""), self.trUtf8("""The regular expression is valid.""")) except re.error, e: KQMessageBox.critical(None, self.trUtf8("Error"), self.trUtf8("""Invalid regular expression: %1""") .arg(str(e))) return except IndexError: KQMessageBox.critical(None, self.trUtf8("Error"), self.trUtf8("""Invalid regular expression: missing group name""")) return else: KQMessageBox.critical(None, self.trUtf8("Error"), self.trUtf8("""A regular expression must be given.""")) @pyqtSignature("") def on_executeButton_clicked(self, startpos = 0): """ Private slot to execute the entered regexp on the test text. This slot will execute the entered regexp on the entered test data and will display the result in the table part of the dialog. @param startpos starting position for the regexp matching """ regex = unicode(self.regexpTextEdit.toPlainText()) text = unicode(self.textTextEdit.toPlainText()) if regex and text: try: flags = 0 if not self.caseSensitiveCheckBox.isChecked(): flags |= re.IGNORECASE if self.multilineCheckBox.isChecked(): flags |= re.MULTILINE if self.dotallCheckBox.isChecked(): flags |= re.DOTALL if self.verboseCheckBox.isChecked(): flags |= re.VERBOSE if self.py2Button.isChecked(): if self.localeCheckBox.isChecked(): flags |= re.LOCALE if self.unicodeCheckBox.isChecked(): flags |= re.UNICODE else: if self.unicodeCheckBox.isChecked(): flags |= re.ASCII regobj = re.compile(regex, flags) matchobj = regobj.search(text, startpos) if matchobj is not None: captures = len(matchobj.groups()) if captures is None: captures = 0 else: captures = 0 row = 0 OFFSET = 5 self.resultTable.setColumnCount(0) self.resultTable.setColumnCount(3) self.resultTable.setRowCount(0) self.resultTable.setRowCount(OFFSET) self.resultTable.setItem(row, 0, QTableWidgetItem(self.trUtf8("Regexp"))) self.resultTable.setItem(row, 1, QTableWidgetItem(regex)) if matchobj is not None: offset = matchobj.start() self.lastMatchEnd = matchobj.end() self.nextButton.setEnabled(True) row += 1 self.resultTable.setItem(row, 0, QTableWidgetItem(self.trUtf8("Offset"))) self.resultTable.setItem(row, 1, QTableWidgetItem(QString.number(matchobj.start(0)))) row += 1 self.resultTable.setItem(row, 0, QTableWidgetItem(self.trUtf8("Captures"))) self.resultTable.setItem(row, 1, QTableWidgetItem(QString.number(captures))) row += 1 self.resultTable.setItem(row, 1, QTableWidgetItem(self.trUtf8("Text"))) self.resultTable.setItem(row, 2, QTableWidgetItem(self.trUtf8("Characters"))) row += 1 self.resultTable.setItem(row, 0, QTableWidgetItem(self.trUtf8("Match"))) self.resultTable.setItem(row, 1, QTableWidgetItem(matchobj.group(0))) self.resultTable.setItem(row, 2, QTableWidgetItem(QString.number(len(matchobj.group(0))))) for i in range(1, captures + 1): if matchobj.group(i) is not None: row += 1 self.resultTable.insertRow(row) self.resultTable.setItem(row, 0, QTableWidgetItem(self.trUtf8("Capture #%1").arg(i))) self.resultTable.setItem(row, 1, QTableWidgetItem(matchobj.group(i))) self.resultTable.setItem(row, 2, QTableWidgetItem(QString.number(len(matchobj.group(i))))) # highlight the matched text tc = self.textTextEdit.textCursor() tc.setPosition(offset) tc.setPosition(self.lastMatchEnd, QTextCursor.KeepAnchor) self.textTextEdit.setTextCursor(tc) else: self.nextButton.setEnabled(False) self.resultTable.setRowCount(2) row += 1 if startpos > 0: self.resultTable.setItem(row, 0, QTableWidgetItem(self.trUtf8("No more matches"))) else: self.resultTable.setItem(row, 0, QTableWidgetItem(self.trUtf8("No matches"))) # remove the highlight tc = self.textTextEdit.textCursor() tc.setPosition(0) self.textTextEdit.setTextCursor(tc) self.resultTable.resizeColumnsToContents() self.resultTable.resizeRowsToContents() self.resultTable.verticalHeader().hide() self.resultTable.horizontalHeader().hide() except re.error, e: KQMessageBox.critical(None, self.trUtf8("Error"), self.trUtf8("""Invalid regular expression: %1""") .arg(str(e))) return except IndexError: KQMessageBox.critical(None, self.trUtf8("Error"), self.trUtf8("""Invalid regular expression: missing group name""")) return else: KQMessageBox.critical(None, self.trUtf8("Error"), self.trUtf8("""A regular expression and a text must be given.""")) @pyqtSignature("") def on_nextButton_clicked(self): """ Private slot to find the next match. """ self.on_executeButton_clicked(self.lastMatchEnd) @pyqtSignature("") def on_regexpTextEdit_textChanged(self): """ Private slot called when the regexp changes. """ self.nextButton.setEnabled(False) @pyqtSignature("bool") def on_py2Button_toggled(self, checked): """ Private slot called when the Python version was selected. @param checked state of the Python 2 button (boolean) """ # set the checkboxes self.localeCheckBox.setHidden(not checked) if checked: self.unicodeCheckBox.setText(self.trUtf8("Unicode")) else: self.unicodeCheckBox.setText(self.trUtf8("ASCII")) self.unicodeCheckBox.setChecked(not self.unicodeCheckBox.isChecked()) # clear the result table self.resultTable.clear() self.resultTable.setColumnCount(0) self.resultTable.setRowCount(0) # remove the highlight tc = self.textTextEdit.textCursor() tc.setPosition(0) self.textTextEdit.setTextCursor(tc) def getCode(self, indLevel, indString): """ Public method to get the source code. @param indLevel indentation level (int) @param indString string used for indentation (space or tab) (string) @return generated code (string) """ # calculate the indentation string istring = indLevel * indString i1string = (indLevel + 1) * indString # now generate the code reVar = unicode(self.variableLineEdit.text()) if not reVar: reVar = "regexp" regexp = unicode(self.regexpTextEdit.toPlainText()) flags = [] if not self.caseSensitiveCheckBox.isChecked(): flags.append('re.IGNORECASE') if self.multilineCheckBox.isChecked(): flags.append('re.MULTILINE') if self.dotallCheckBox.isChecked(): flags.append('re.DOTALL') if self.verboseCheckBox.isChecked(): flags.append('re.VERBOSE') if self.localeCheckBox.isChecked() and \ self.py2Button.isChecked(): flags.append('re.LOCALE') if self.unicodeCheckBox.isChecked(): if self.py2Button.isChecked(): flags.append('re.UNICODE') else: flags.append('re.ASCII') flags = " | ".join(flags) code = '' if self.importCheckBox.isChecked(): code += 'import re%s%s' % (os.linesep, istring) code += '%s = re.compile(r"""%s"""' % \ (reVar, regexp.replace('"', '\\"')) if flags: code += ', \\%s%s%s' % (os.linesep, i1string, flags) code += ')%s' % os.linesep return code class PyRegExpWizardDialog(QDialog): """ Class for the dialog variant. """ def __init__(self, parent = None, fromEric = True): """ Constructor @param parent parent widget (QWidget) @param fromEric flag indicating a call from within eric4 """ QDialog.__init__(self, parent) self.setModal(fromEric) self.setSizeGripEnabled(True) self.__layout = QVBoxLayout(self) self.__layout.setMargin(0) self.setLayout(self.__layout) self.cw = PyRegExpWizardWidget(self, fromEric) size = self.cw.size() self.__layout.addWidget(self.cw) self.resize(size) self.connect(self.cw.buttonBox, SIGNAL("accepted()"), self.accept) self.connect(self.cw.buttonBox, SIGNAL("rejected()"), self.reject) def getCode(self, indLevel, indString): """ Public method to get the source code. @param indLevel indentation level (int) @param indString string used for indentation (space or tab) (string) @return generated code (string) """ return self.cw.getCode(indLevel, indString) class PyRegExpWizardWindow(KQMainWindow): """ Main window class for the standalone dialog. """ def __init__(self, parent = None): """ Constructor @param parent reference to the parent widget (QWidget) """ KQMainWindow.__init__(self, parent) self.cw = PyRegExpWizardWidget(self, fromEric = False) size = self.cw.size() self.setCentralWidget(self.cw) self.resize(size) self.connect(self.cw.buttonBox, SIGNAL("accepted()"), self.close) self.connect(self.cw.buttonBox, SIGNAL("rejected()"), self.close) eric4-4.5.18/eric/Plugins/WizardPlugins/PyRegExpWizard/PaxHeaders.8617/PyRegExpWizardCharactersDialo0000644000175000001440000000013212261012650031373 xustar000000000000000030 mtime=1388582312.571084322 30 atime=1389081083.126724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardCharactersDialog.py0000644000175000001440000002666112261012650031736 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2004 - 2014 Detlev Offenbach # """ Module implementing a dialog for entering character classes. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from Ui_PyRegExpWizardCharactersDialog import Ui_PyRegExpWizardCharactersDialog class PyRegExpWizardCharactersDialog(QDialog, Ui_PyRegExpWizardCharactersDialog): """ Class implementing a dialog for entering character classes. """ specialChars = { 4 : "\\a", 5 : "\\f", 6 : "\\n", 7 : "\\r", 8 : "\\t", 9 : "\\v" } predefinedClasses = ["\\s", "\\S", "\\w", "\\W", "\\d", "\\D"] def __init__(self,parent = None): """ Constructor @param parent parent widget (QWidget) """ QDialog.__init__(self,parent) self.setupUi(self) self.comboItems = QStringList() self.comboItems.append(self.trUtf8("Normal character")) self.comboItems.append(self.trUtf8("Unicode character in hexadecimal notation")) self.comboItems.append(self.trUtf8("Unicode character in octal notation")) self.comboItems.append(self.trUtf8("---")) self.comboItems.append(self.trUtf8("Bell character (\\a)")) self.comboItems.append(self.trUtf8("Page break (\\f)")) self.comboItems.append(self.trUtf8("Line feed (\\n)")) self.comboItems.append(self.trUtf8("Carriage return (\\r)")) self.comboItems.append(self.trUtf8("Horizontal tabulator (\\t)")) self.comboItems.append(self.trUtf8("Vertical tabulator (\\v)")) self.charValidator = QRegExpValidator(QRegExp(".{0,1}"), self) self.hexValidator = QRegExpValidator(QRegExp("[0-9a-fA-F]{0,4}"), self) self.octValidator = QRegExpValidator(QRegExp("[0-3]?[0-7]{0,2}"), self) # generate dialog part for single characters self.singlesBoxLayout = QVBoxLayout(self.singlesBox) self.singlesBoxLayout.setObjectName("singlesBoxLayout") self.singlesBoxLayout.setSpacing(6) self.singlesBoxLayout.setMargin(6) self.singlesBox.setLayout(self.singlesBoxLayout) self.singlesView = QScrollArea(self.singlesBox) self.singlesView.setObjectName("singlesView") self.singlesBoxLayout.addWidget(self.singlesView) self.singlesItemsBox = QWidget(self) self.singlesView.setWidget(self.singlesItemsBox) self.singlesItemsBox.setObjectName("singlesItemsBox") self.singlesItemsBoxLayout = QVBoxLayout(self.singlesItemsBox) self.singlesItemsBoxLayout.setMargin(6) self.singlesItemsBoxLayout.setSpacing(6) self.singlesItemsBox.setLayout(self.singlesItemsBoxLayout) self.singlesEntries = [] self.__addSinglesLine() hlayout0 = QHBoxLayout() hlayout0.setMargin(0) hlayout0.setSpacing(6) hlayout0.setObjectName("hlayout0") self.moreSinglesButton = QPushButton(self.trUtf8("Additional Entries"), self.singlesBox) self.moreSinglesButton.setObjectName("moreSinglesButton") hlayout0.addWidget(self.moreSinglesButton) hspacer0 = QSpacerItem(30,20,QSizePolicy.Expanding,QSizePolicy.Minimum) hlayout0.addItem(hspacer0) self.singlesBoxLayout.addLayout(hlayout0) self.connect(self.moreSinglesButton, SIGNAL("clicked()"), self.__addSinglesLine) # generate dialog part for character ranges self.rangesBoxLayout = QVBoxLayout(self.rangesBox) self.rangesBoxLayout.setObjectName("rangesBoxLayout") self.rangesBoxLayout.setSpacing(6) self.rangesBoxLayout.setMargin(6) self.rangesBox.setLayout(self.rangesBoxLayout) self.rangesView = QScrollArea(self.rangesBox) self.rangesView.setObjectName("rangesView") self.rangesBoxLayout.addWidget(self.rangesView) self.rangesItemsBox = QWidget(self) self.rangesView.setWidget(self.rangesItemsBox) self.rangesItemsBox.setObjectName("rangesItemsBox") self.rangesItemsBoxLayout = QVBoxLayout(self.rangesItemsBox) self.rangesItemsBoxLayout.setMargin(6) self.rangesItemsBoxLayout.setSpacing(6) self.rangesItemsBox.setLayout(self.rangesItemsBoxLayout) self.rangesEntries = [] self.__addRangesLine() hlayout1 = QHBoxLayout() hlayout1.setMargin(0) hlayout1.setSpacing(6) hlayout1.setObjectName("hlayout1") self.moreRangesButton = QPushButton(self.trUtf8("Additional Entries"), self.rangesBox) self.moreSinglesButton.setObjectName("moreRangesButton") hlayout1.addWidget(self.moreRangesButton) hspacer1 = QSpacerItem(30,20,QSizePolicy.Expanding,QSizePolicy.Minimum) hlayout1.addItem(hspacer1) self.rangesBoxLayout.addLayout(hlayout1) self.connect(self.moreRangesButton, SIGNAL("clicked()"), self.__addRangesLine) def __addSinglesLine(self): """ Private slot to add a line of entry widgets for single characters. """ hbox = QWidget(self.singlesItemsBox) hboxLayout = QHBoxLayout(hbox) hboxLayout.setMargin(0) hboxLayout.setSpacing(6) hbox.setLayout(hboxLayout) cb1 = QComboBox(hbox) cb1.setEditable(False) cb1.addItems(self.comboItems) hboxLayout.addWidget(cb1) le1 = QLineEdit(hbox) le1.setValidator(self.charValidator) hboxLayout.addWidget(le1) cb2 = QComboBox(hbox) cb2.setEditable(False) cb2.addItems(self.comboItems) hboxLayout.addWidget(cb2) le2 = QLineEdit(hbox) le2.setValidator(self.charValidator) hboxLayout.addWidget(le2) self.singlesItemsBoxLayout.addWidget(hbox) self.connect(cb1, SIGNAL('activated(int)'), self.__singlesCharTypeSelected) self.connect(cb2, SIGNAL('activated(int)'), self.__singlesCharTypeSelected) hbox.show() self.singlesItemsBox.adjustSize() self.singlesEntries.append([cb1, le1]) self.singlesEntries.append([cb2, le2]) def __addRangesLine(self): """ Private slot to add a line of entry widgets for character ranges. """ hbox = QWidget(self.rangesItemsBox) hboxLayout = QHBoxLayout(hbox) hboxLayout.setMargin(0) hboxLayout.setSpacing(6) hbox.setLayout(hboxLayout) l1 = QLabel(self.trUtf8("Between:"), hbox) hboxLayout.addWidget(l1) cb1 = QComboBox(hbox) cb1.setEditable(False) cb1.addItems(self.comboItems) hboxLayout.addWidget(cb1) le1 = QLineEdit(hbox) le1.setValidator(self.charValidator) hboxLayout.addWidget(le1) l2 = QLabel(self.trUtf8("And:"), hbox) hboxLayout.addWidget(l2) cb2 = QComboBox(hbox) cb2.setEditable(False) cb2.addItems(self.comboItems) hboxLayout.addWidget(cb2) le2 = QLineEdit(hbox) le2.setValidator(self.charValidator) hboxLayout.addWidget(le2) self.rangesItemsBoxLayout.addWidget(hbox) self.connect(cb1, SIGNAL('activated(int)'), self.__rangesCharTypeSelected) self.connect(cb2, SIGNAL('activated(int)'), self.__rangesCharTypeSelected) hbox.show() self.rangesItemsBox.adjustSize() self.rangesEntries.append([cb1, le1, cb2, le2]) def __performSelectedAction(self, index, lineedit): """ Private method performing some actions depending on the input. @param index selected list index (integer) @param lineedit line edit widget to act on (QLineEdit) """ if index < 3: lineedit.setEnabled(True) if index == 0: lineedit.setValidator(self.charValidator) elif index == 1: lineedit.setValidator(self.hexValidator) elif index == 2: lineedit.setValidator(self.octValidator) elif index > 3: lineedit.setEnabled(False) lineedit.clear() def __singlesCharTypeSelected(self, index): """ Private slot to handle the activated(int) signal of the single chars combo boxes. @param index selected list index (integer) """ combo = self.sender() for entriesList in self.singlesEntries: if combo == entriesList[0]: self.__performSelectedAction(index, entriesList[1]) def __rangesCharTypeSelected(self, index): """ Private slot to handle the activated(int) signal of the char ranges combo boxes. @param index selected list index (integer) """ combo = self.sender() for entriesList in self.rangesEntries: if combo == entriesList[0]: self.__performSelectedAction(index, entriesList[1]) elif combo == entriesList[2]: self.__performSelectedAction(index, entriesList[3]) def __formatCharacter(self, index, char): """ Private method to format the characters entered into the dialog. @param index selected list index (integer) @param char character string enetered into the dialog (string) @return formated character string (string) """ if index == 0: return char elif index == 1: return "\\x%s" % char.lower() elif index == 2: return "\\0%s" % char else: try: return self.specialChars[index] except KeyError: return "" def getCharacters(self): """ Public method to return the character string assembled via the dialog. @return formatted string for character classes (string) """ regexp = "" # negative character range if self.negativeCheckBox.isChecked(): regexp += "^" # predefined character ranges if self.wordCharCheckBox.isChecked(): regexp += "\\w" if self.nonWordCharCheckBox.isChecked(): regexp += "\\W" if self.digitsCheckBox.isChecked(): regexp += "\\d" if self.nonDigitsCheckBox.isChecked(): regexp += "\\D" if self.whitespaceCheckBox.isChecked(): regexp += "\\s" if self.nonWhitespaceCheckBox.isChecked(): regexp += "\\S" # single characters for entrieslist in self.singlesEntries: index = entrieslist[0].currentIndex() char = unicode(entrieslist[1].text()) regexp += self.__formatCharacter(index, char) # character ranges for entrieslist in self.rangesEntries: if entrieslist[1].text().isEmpty() or \ entrieslist[3].text().isEmpty(): continue index = entrieslist[0].currentIndex() char = unicode(entrieslist[1].text()) regexp += "%s-" % self.__formatCharacter(index, char) index = entrieslist[2].currentIndex() char = unicode(entrieslist[3].text()) regexp += self.__formatCharacter(index, char) if regexp: if len(regexp) == 2 and regexp in self.predefinedClasses: return regexp else: return "[%s]" % regexp else: return "" eric4-4.5.18/eric/Plugins/WizardPlugins/PaxHeaders.8617/__init__.py0000644000175000001440000000013212261012650023040 xustar000000000000000030 mtime=1388582312.576084386 30 atime=1389081083.126724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/WizardPlugins/__init__.py0000644000175000001440000000024012261012650022566 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Package containing the various core wizard plugins. """ eric4-4.5.18/eric/Plugins/WizardPlugins/PaxHeaders.8617/ColorDialogWizard0000644000175000001440000000013212262730776024252 xustar000000000000000030 mtime=1389081086.300724332 30 atime=1389081086.305724332 30 ctime=1389081086.315724332 eric4-4.5.18/eric/Plugins/WizardPlugins/ColorDialogWizard/0000755000175000001440000000000012262730776024061 5ustar00detlevusers00000000000000eric4-4.5.18/eric/Plugins/WizardPlugins/ColorDialogWizard/PaxHeaders.8617/ColorDialogWizardDialog.py0000644000175000001440000000013212261012650031357 xustar000000000000000030 mtime=1388582312.581084449 30 atime=1389081083.126724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/WizardPlugins/ColorDialogWizard/ColorDialogWizardDialog.py0000644000175000001440000001500612261012650031113 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Module implementing the color dialog wizard dialog. """ import os from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQMessageBox from Ui_ColorDialogWizardDialog import Ui_ColorDialogWizardDialog class ColorDialogWizardDialog(QDialog, Ui_ColorDialogWizardDialog): """ Class implementing the color dialog wizard dialog. It displays a dialog for entering the parameters for the QColorDialog code generator. """ def __init__(self, parent=None): """ Constructor @param parent parent widget (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.bTest = \ self.buttonBox.addButton(self.trUtf8("Test"), QDialogButtonBox.ActionRole) if qVersion() < "4.5.0": self.rQt40.setChecked(True) else: self.rQt45.setChecked(True) def on_buttonBox_clicked(self, button): """ Private slot called by a button of the button box clicked. @param button button that was clicked (QAbstractButton) """ if button == self.bTest: self.on_bTest_clicked() @pyqtSignature("") def on_bTest_clicked(self): """ Private method to test the selected options. """ if self.rColor.isChecked(): if self.eColor.currentText().isEmpty(): QColorDialog.getColor() else: coStr = unicode(self.eColor.currentText()) if coStr.startswith('#'): coStr = "QColor('%s')" % coStr else: coStr = "QColor(%s)" % coStr try: if self.rQt45.isChecked(): exec 'QColorDialog.getColor(%s, None, "%s")' % \ (coStr, self.eTitle.text()) else: exec 'QColorDialog.getColor(%s)' % coStr except: KQMessageBox.critical(None, self.trUtf8("QColorDialog Wizard Error"), self.trUtf8("""

    The colour %1 is not valid.

    """) .arg(coStr)) elif self.rRGBA.isChecked(): if self.rQt45.isChecked(): QColorDialog.getColor( QColor(self.sRed.value(), self.sGreen.value(), self.sBlue.value(), self.sAlpha.value()), None, self.eTitle.text(), QColorDialog.ColorDialogOptions(QColorDialog.ShowAlphaChannel)) else: rgba = qRgba(self.sRed.value(), self.sGreen.value(), self.sBlue.value(), self.sAlpha.value()) QColorDialog.getRgba(rgba) def on_eRGB_textChanged(self, text): """ Private slot to handle the textChanged signal of eRGB. @param text the new text (QString) """ if text.isEmpty(): self.sRed.setEnabled(True) self.sGreen.setEnabled(True) self.sBlue.setEnabled(True) self.sAlpha.setEnabled(True) self.bTest.setEnabled(True) else: self.sRed.setEnabled(False) self.sGreen.setEnabled(False) self.sBlue.setEnabled(False) self.sAlpha.setEnabled(False) self.bTest.setEnabled(False) def on_eColor_editTextChanged(self, text): """ Private slot to handle the editTextChanged signal of eColor. @param text the new text (QString) """ if text.isEmpty() or text.startsWith('Qt.') or text.startsWith('#'): self.bTest.setEnabled(True) else: self.bTest.setEnabled(False) def on_rQt45_toggled(self, on): """ Private slot to handle the toggled signal of the rQt45 radio button. @param on toggle state (boolean) (ignored) """ self.titleGroup.setEnabled(on) def getCode(self, indLevel, indString): """ Public method to get the source code. @param indLevel indentation level (int) @param indString string used for indentation (space or tab) (string) @return generated code (string) """ # calculate our indentation level and the indentation string il = indLevel + 1 istring = il * indString # now generate the code code = 'QColorDialog.' if self.rColor.isChecked(): code += 'getColor(' if not self.eColor.currentText().isEmpty(): col = str(self.eColor.currentText()) if col.startswith('#'): code += 'QColor("%s")' % col else: code += 'QColor(%s)' % col if self.rQt45.isChecked(): code += ', None,%s' % os.linesep code += '%sself.trUtf8("%s"),%s' % \ (istring, self.eTitle.text(), os.linesep) code += \ '%sQColorDialog.ColorDialogOptions(QColorDialog.ShowAlphaChannel)' % \ istring code += ')%s' % os.linesep elif self.rRGBA.isChecked(): if self.rQt45.isChecked(): code += 'getColor(' if self.eRGB.text().isEmpty(): code += 'QColor(%d, %d, %d, %d),%s' % \ (self.sRed.value(), self.sGreen.value(), self.sBlue.value(), self.sAlpha.value(), os.linesep) else: code += '%s,%s' % (self.eRGB.text(), os.linesep) code += '%sNone,%s' % (istring, os.linesep) code += '%sself.trUtf8("%s"),%s' % \ (istring, self.eTitle.text(), os.linesep) code += \ '%sQColorDialog.ColorDialogOptions(QColorDialog.ShowAlphaChannel)' % \ istring code += ')%s' % os.linesep else: code += 'getRgba(' if self.eRGB.text().isEmpty(): code += 'qRgba(%d, %d, %d, %d)' % \ (self.sRed.value(), self.sGreen.value(), self.sBlue.value(), self.sAlpha.value()) else: code += str(self.eRGB.text()) code += ')%s' % os.linesep return code eric4-4.5.18/eric/Plugins/WizardPlugins/ColorDialogWizard/PaxHeaders.8617/__init__.py0000644000175000001440000000013212261012650026417 xustar000000000000000030 mtime=1388582312.583084475 30 atime=1389081083.126724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/WizardPlugins/ColorDialogWizard/__init__.py0000644000175000001440000000023212261012650026146 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Package implementing the color dialog wizard. """ eric4-4.5.18/eric/Plugins/WizardPlugins/ColorDialogWizard/PaxHeaders.8617/ColorDialogWizardDialog.ui0000644000175000001440000000007411246240671031361 xustar000000000000000030 atime=1389081083.127724394 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/WizardPlugins/ColorDialogWizard/ColorDialogWizardDialog.ui0000644000175000001440000002663411246240671031121 0ustar00detlevusers00000000000000 ColorDialogWizardDialog 0 0 367 469 QColorDialog Wizard true Qt Version Qt::TabFocus Select to generate code for Qt 4.0.0 but less than Qt 4.5.0 Qt 4.0 Qt::TabFocus Select to generate code for Qt 4.5.0 or newer Qt 4.5 true Qt::Horizontal 161 21 Type Select to generate a QColorDialog.getColor dialog Colour true Select to generate a QColorDialog.getRgba dialog RGBA Title Enter the dialog title Colour 0 0 Enter a variable name or a colour true Qt.red Qt.darkRed Qt.green Qt.darkGreen Qt.blue Qt.darkBlue Qt.cyan Qt.darkCyan Qt.magenta Qt.darkMagenta Qt.yellow Qt.darkYellow Qt.white Qt.lightGray Qt.gray Qt.darkGray Qt.black Qt.transparent Qt.color0 Qt.color1 false RGBA 6 Enter a variable name Variable Enter the alpha value 255 Enter the blue value 255 128 Enter the green value 255 128 Enter the red value 255 128 Alpha Blue Red Green Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok qPixmapFromMimeSource rQt40 rQt45 rColor rRGBA eTitle eColor sRed sGreen sBlue sAlpha eRGB buttonBox rColor toggled(bool) groupBox_2 setEnabled(bool) 38 35 36 66 rRGBA toggled(bool) groupBox_3 setEnabled(bool) 212 38 209 122 buttonBox accepted() ColorDialogWizardDialog accept() 20 263 20 280 buttonBox rejected() ColorDialogWizardDialog reject() 76 260 76 278 eric4-4.5.18/eric/Plugins/WizardPlugins/PaxHeaders.8617/InputDialogWizard0000644000175000001440000000013212262730776024273 xustar000000000000000030 mtime=1389081086.300724332 30 atime=1389081086.305724332 30 ctime=1389081086.315724332 eric4-4.5.18/eric/Plugins/WizardPlugins/InputDialogWizard/0000755000175000001440000000000012262730776024102 5ustar00detlevusers00000000000000eric4-4.5.18/eric/Plugins/WizardPlugins/InputDialogWizard/PaxHeaders.8617/__init__.py0000644000175000001440000000013212261012650026440 xustar000000000000000030 mtime=1388582312.586084513 30 atime=1389081083.127724394 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/WizardPlugins/InputDialogWizard/__init__.py0000644000175000001440000000023212261012650026167 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Package implementing the input dialog wizard. """ eric4-4.5.18/eric/Plugins/WizardPlugins/InputDialogWizard/PaxHeaders.8617/InputDialogWizardDialog.ui0000644000175000001440000000007411246225775031433 xustar000000000000000030 atime=1389081083.127724394 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/WizardPlugins/InputDialogWizard/InputDialogWizardDialog.ui0000644000175000001440000002772511246225775031175 0ustar00detlevusers00000000000000 InputDialogWizardDialog 0 0 501 658 QInputDialog Wizard true Type Text true Integer Double Item Caption Label Text Echo Mode Normal true No Echo Password Default false Integer -2147483647 2147483647 1 -2147483647 2147483647 2147483647 -2147483647 2147483647 -2147483647 -2147483647 2147483647 Step To From Default false Double -2147483647 2147483647 1 2147483647 -2147483647 0 Default From To Decimals false Item Editable true Current Item String List Variable Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok qPixmapFromMimeSource rText rInteger rDouble rItem eCaption eLabel rEchoNormal rEchoNoEcho rEchoPassword eTextDefault sIntDefault sIntFrom sIntTo sIntStep eDoubleDefault eDoubleFrom eDoubleTo sDoubleDecimals eVariable sCurrentItem cEditable rText toggled(bool) groupBox_2 setEnabled(bool) 55 108 30 222 rInteger toggled(bool) groupBox_4 setEnabled(bool) 171 88 169 359 rDouble toggled(bool) groupBox_5 setEnabled(bool) 272 89 274 433 rItem toggled(bool) groupBox_6 setEnabled(bool) 439 94 439 513 buttonBox accepted() InputDialogWizardDialog accept() 25 605 25 622 buttonBox rejected() InputDialogWizardDialog reject() 111 612 111 621 eric4-4.5.18/eric/Plugins/WizardPlugins/InputDialogWizard/PaxHeaders.8617/InputDialogWizardDialog.py0000644000175000001440000000013212261012650031421 xustar000000000000000030 mtime=1388582312.591084576 30 atime=1389081083.128724394 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/WizardPlugins/InputDialogWizard/InputDialogWizardDialog.py0000644000175000001440000001653512261012650031165 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Module implementing the input dialog wizard dialog. """ import os from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt.KQApplication import e4App from Ui_InputDialogWizardDialog import Ui_InputDialogWizardDialog class InputDialogWizardDialog(QDialog, Ui_InputDialogWizardDialog): """ Class implementing the input dialog wizard dialog. It displays a dialog for entering the parameters for the QInputDialog code generator. """ def __init__(self, parent=None): """ Constructor @param parent parent widget (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) # set the validators for the double line edots self.eDoubleDefault.setValidator(\ QDoubleValidator(-2147483647, 2147483647, 99, self.eDoubleDefault)) self.eDoubleFrom.setValidator(\ QDoubleValidator(-2147483647, 2147483647, 99, self.eDoubleFrom)) self.eDoubleTo.setValidator(\ QDoubleValidator(-2147483647, 2147483647, 99, self.eDoubleTo)) self.bTest = \ self.buttonBox.addButton(self.trUtf8("Test"), QDialogButtonBox.ActionRole) @pyqtSignature("bool") def on_rItem_toggled(self, checked): """ Private slot to perform actions dependant on the item type selection. @param checked flag indicating the checked state (boolean) """ self.bTest.setEnabled(not checked) def on_buttonBox_clicked(self, button): """ Private slot called by a button of the button box clicked. @param button button that was clicked (QAbstractButton) """ if button == self.bTest: self.on_bTest_clicked() @pyqtSignature("") def on_bTest_clicked(self): """ Private method to test the selected options. """ if self.rText.isChecked(): if self.rEchoNormal.isChecked(): echomode = QLineEdit.Normal elif self.rEchoNoEcho.isChecked(): echomode = QLineEdit.NoEcho else: echomode = QLineEdit.Password QInputDialog.getText(\ None, self.eCaption.text(), self.eLabel.text(), echomode, self.eTextDefault.text()) elif self.rInteger.isChecked(): QInputDialog.getInt(\ None, self.eCaption.text(), self.eLabel.text(), self.sIntDefault.value(), self.sIntFrom.value(), self.sIntTo.value(), self.sIntStep.value()) elif self.rDouble.isChecked(): try: doubleDefault = float(str(self.eDoubleDefault.text())) except ValueError: doubleDefault = 0 try: doubleFrom = float(str(self.eDoubleFrom.text())) except ValueError: doubleFrom = -2147483647 try: doubleTo = float(str(self.eDoubleTo.text())) except ValueError: doubleTo = 2147483647 QInputDialog.getDouble(\ None, self.eCaption.text(), self.eLabel.text(), doubleDefault, doubleFrom, doubleTo, self.sDoubleDecimals.value()) def __getCode4(self, indLevel, indString): """ Private method to get the source code for Qt4. @param indLevel indentation level (int) @param indString string used for indentation (space or tab) (string) @return generated code (string) """ # calculate our indentation level and the indentation string il = indLevel + 1 istring = il * indString # now generate the code code = 'QInputDialog.' if self.rText.isChecked(): code += 'getText(\\%s%s' % (os.linesep, istring) code += 'None,%s%s' % (os.linesep, istring) code += 'self.trUtf8("%s"),%s%s' % \ (unicode(self.eCaption.text()), os.linesep, istring) code += 'self.trUtf8("%s"),%s%s' % \ (unicode(self.eLabel.text()), os.linesep, istring) if self.rEchoNormal.isChecked(): code += 'QLineEdit.Normal' elif self.rEchoNoEcho.isChecked(): code += 'QLineEdit.NoEcho' else: code += 'QLineEdit.Password' if not self.eTextDefault.text().isEmpty(): code += ',%s%sself.trUtf8("%s")' % \ (os.linesep, istring, unicode(self.eTextDefault.text())) code += ')%s' % os.linesep elif self.rInteger.isChecked(): code += 'getInt(\\%s%s' % (os.linesep, istring) code += 'None,%s%s' % (os.linesep, istring) code += 'self.trUtf8("%s"),%s%s' % \ (unicode(self.eCaption.text()), os.linesep, istring) code += 'self.trUtf8("%s"),%s%s' % \ (unicode(self.eLabel.text()), os.linesep, istring) code += '%d, %d, %d, %d)%s' % \ (self.sIntDefault.value(), self.sIntFrom.value(), self.sIntTo.value(), self.sIntStep.value(), os.linesep) elif self.rDouble.isChecked(): try: doubleDefault = float(str(self.eDoubleDefault.text())) except ValueError: doubleDefault = 0 try: doubleFrom = float(str(self.eDoubleFrom.text())) except ValueError: doubleFrom = -2147483647 try: doubleTo = float(str(self.eDoubleTo.text())) except ValueError: doubleTo = 2147483647 code += 'getDouble(\\%s%s' % (os.linesep, istring) code += 'None,%s%s' % (os.linesep, istring) code += 'self.trUtf8("%s"),%s%s' % \ (unicode(self.eCaption.text()), os.linesep, istring) code += 'self.trUtf8("%s"),%s%s' % \ (unicode(self.eLabel.text()), os.linesep, istring) code += '%s, %s, %s, %d)%s' % \ (str(doubleDefault), str(doubleFrom), str(doubleTo), self.sDoubleDecimals.value(), os.linesep) elif self.rItem.isChecked(): code += 'getItem(\\%s%s' % (os.linesep, istring) code += 'None,%s%s' % (os.linesep, istring) code += 'self.trUtf8("%s"),%s%s' % \ (unicode(self.eCaption.text()), os.linesep, istring) code += 'self.trUtf8("%s"),%s%s' % \ (unicode(self.eLabel.text()), os.linesep, istring) code += '%s,%s%s' % (unicode(self.eVariable.text()), os.linesep, istring) code += '%d, %s)%s' % \ (self.sCurrentItem.value(), self.cEditable.isChecked(), os.linesep) return code def getCode(self, indLevel, indString): """ Public method to get the source code. @param indLevel indentation level (int) @param indString string used for indentation (space or tab) (string) @return generated code (string) """ return self.__getCode4(indLevel, indString) eric4-4.5.18/eric/Plugins/WizardPlugins/PaxHeaders.8617/FileDialogWizard0000644000175000001440000000013212262730776024053 xustar000000000000000030 mtime=1389081086.300724332 30 atime=1389081086.305724332 30 ctime=1389081086.315724332 eric4-4.5.18/eric/Plugins/WizardPlugins/FileDialogWizard/0000755000175000001440000000000012262730776023662 5ustar00detlevusers00000000000000eric4-4.5.18/eric/Plugins/WizardPlugins/FileDialogWizard/PaxHeaders.8617/FileDialogWizardDialog.ui0000644000175000001440000000007411246225456030767 xustar000000000000000030 atime=1389081083.129724394 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/WizardPlugins/FileDialogWizard/FileDialogWizardDialog.ui0000644000175000001440000001770711246225456030530 0ustar00detlevusers00000000000000 FileDialogWizardDialog 0 0 529 487 QFileDialog Wizard true Type Select to create an 'Open File' dialog Open File true Select to create an 'Open Files' dialog Open Files Select to create a 'Save File' dialog Save File Select to create a 'Select Directory' dialog Select Directory Caption Enter the caption text Check to resolve symbolic links Resolve Symlinks true File Dialog Properties Check this if the contents of the edit names a variable or variable function Is Variable Enter the filter specifications separated by ';;' Check this if the contents of the edit names a variable or variable function Is Variable Enter the working directory or a filename Filters false Select to show an overwrite confirmation dialog Show overwrite confirmation Start With / Working Directory false Directory Dialog Properties Enter the working directory Working Directory Check this if the contents of the edit names a variable or variable function Is Variable Check to display directories only Show Directories Only true Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok qPixmapFromMimeSource rOpenFile rOpenFiles rSaveFile rDirectory eCaption cSymlinks eStartWith cStartWith eFilters cFilters cConfirmOverwrite eWorkDir cWorkDir cDirOnly buttonBox accepted() FileDialogWizardDialog accept() 25 464 24 488 buttonBox rejected() FileDialogWizardDialog reject() 124 470 124 485 eric4-4.5.18/eric/Plugins/WizardPlugins/FileDialogWizard/PaxHeaders.8617/FileDialogWizardDialog.py0000644000175000001440000000013212261012650030761 xustar000000000000000030 mtime=1388582312.594084614 30 atime=1389081083.129724394 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/WizardPlugins/FileDialogWizard/FileDialogWizardDialog.py0000644000175000001440000002702212261012650030516 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Module implementing the file dialog wizard dialog. """ import os from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt.KQApplication import e4App import Globals from E4Gui.E4Completers import E4FileCompleter, E4DirCompleter from Ui_FileDialogWizardDialog import Ui_FileDialogWizardDialog class FileDialogWizardDialog(QDialog, Ui_FileDialogWizardDialog): """ Class implementing the color dialog wizard dialog. It displays a dialog for entering the parameters for the QFileDialog code generator. """ def __init__(self, parent=None): """ Constructor @param parent parent widget (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.eStartWithCompleter = E4FileCompleter(self.eStartWith) self.eWorkDirCompleter = E4DirCompleter(self.eWorkDir) self.connect(self.rSaveFile, SIGNAL("toggled(bool)"), self.__toggleConfirmCheckBox) self.connect(self.rDirectory, SIGNAL("toggled(bool)"), self.__toggleGroupsAndTest) self.connect(self.cStartWith, SIGNAL("toggled(bool)"), self.__toggleGroupsAndTest) self.connect(self.cWorkDir, SIGNAL("toggled(bool)"), self.__toggleGroupsAndTest) self.connect(self.cFilters, SIGNAL("toggled(bool)"), self.__toggleGroupsAndTest) self.bTest = \ self.buttonBox.addButton(self.trUtf8("Test"), QDialogButtonBox.ActionRole) def on_buttonBox_clicked(self, button): """ Private slot called by a button of the button box clicked. @param button button that was clicked (QAbstractButton) """ if button == self.bTest: self.on_bTest_clicked() @pyqtSignature("") def on_bTest_clicked(self): """ Private method to test the selected options. """ if self.rOpenFile.isChecked(): if not self.cSymlinks.isChecked(): options = QFileDialog.Options(QFileDialog.DontResolveSymlinks) else: options = QFileDialog.Options() if Globals.isLinuxPlatform(): options |= QFileDialog.DontUseNativeDialog QFileDialog.getOpenFileName(\ None, self.eCaption.text(), self.eStartWith.text(), self.eFilters.text(), None, options) elif self.rOpenFiles.isChecked(): if not self.cSymlinks.isChecked(): options = QFileDialog.Options(QFileDialog.DontResolveSymlinks) else: options = QFileDialog.Options() if Globals.isLinuxPlatform(): options |= QFileDialog.DontUseNativeDialog QFileDialog.getOpenFileNames(\ None, self.eCaption.text(), self.eStartWith.text(), self.eFilters.text(), None, options) elif self.rSaveFile.isChecked(): if not self.cSymlinks.isChecked(): options = QFileDialog.Options(QFileDialog.DontResolveSymlinks) else: options = QFileDialog.Options() if Globals.isLinuxPlatform(): options |= QFileDialog.DontUseNativeDialog QFileDialog.getSaveFileName(\ None, self.eCaption.text(), self.eStartWith.text(), self.eFilters.text(), None, options) elif self.rDirectory.isChecked(): options = QFileDialog.Options() if not self.cSymlinks.isChecked(): options |= QFileDialog.Options(QFileDialog.DontResolveSymlinks) if self.cDirOnly.isChecked(): options |= QFileDialog.Options(QFileDialog.ShowDirsOnly) else: options |= QFileDialog.Options(QFileDialog.Option(0)) if Globals.isLinuxPlatform(): options |= QFileDialog.DontUseNativeDialog QFileDialog.getExistingDirectory(\ None, self.eCaption.text(), self.eWorkDir.text(), options) def __toggleConfirmCheckBox(self): """ Private slot to enable/disable the confirmation check box. """ self.cConfirmOverwrite.setEnabled(self.rSaveFile.isChecked()) def __toggleGroupsAndTest(self): """ Private slot to enable/disable certain groups and the test button. """ if self.rDirectory.isChecked(): self.filePropertiesGroup.setEnabled(False) self.dirPropertiesGroup.setEnabled(True) self.bTest.setDisabled(self.cWorkDir.isChecked()) else: self.filePropertiesGroup.setEnabled(True) self.dirPropertiesGroup.setEnabled(False) self.bTest.setDisabled(\ self.cStartWith.isChecked() or self.cFilters.isChecked()) def __getCode4(self, indLevel, indString): """ Private method to get the source code for Qt4. @param indLevel indentation level (int) @param indString string used for indentation (space or tab) (string) @return generated code (string) """ # calculate our indentation level and the indentation string il = indLevel + 1 istring = il * indString # now generate the code code = 'QFileDialog.' if self.rOpenFile.isChecked(): code += 'getOpenFileName(\\%s%s' % (os.linesep, istring) code += 'None,%s%s' % (os.linesep, istring) if self.eCaption.text().isEmpty(): code += 'QString(),%s%s' % (os.linesep, istring) else: code += 'self.trUtf8("%s"),%s%s' % \ (unicode(self.eCaption.text()), os.linesep, istring) if self.eStartWith.text().isEmpty(): code += 'QString(),%s%s' % (os.linesep, istring) else: if self.cStartWith.isChecked(): fmt = '%s,%s%s' else: fmt = 'self.trUtf8("%s"),%s%s' code += fmt % (unicode(self.eStartWith.text()), os.linesep, istring) if self.eFilters.text().isEmpty(): code += 'QString()' else: if self.cFilters.isChecked(): fmt = '%s' else: fmt = 'self.trUtf8("%s")' code += fmt % unicode(self.eFilters.text()) code += ',%s%sNone' % (os.linesep, istring) if not self.cSymlinks.isChecked(): code += ',%s%sQFileDialog.Options(QFileDialog.DontResolveSymlinks)' % \ (os.linesep, istring) code += ')%s' % os.linesep elif self.rOpenFiles.isChecked(): code += 'getOpenFileNames(\\%s%s' % (os.linesep, istring) code += 'None,%s%s' % (os.linesep, istring) if self.eCaption.text().isEmpty(): code += 'QString(),%s%s' % (os.linesep, istring) else: code += 'self.trUtf8("%s"),%s%s' % \ (unicode(self.eCaption.text()), os.linesep, istring) if self.eStartWith.text().isEmpty(): code += 'QString(),%s%s' % (os.linesep, istring) else: if self.cStartWith.isChecked(): fmt = '%s,%s%s' else: fmt = 'self.trUtf8("%s"),%s%s' code += fmt % (unicode(self.eStartWith.text()), os.linesep, istring) if self.eFilters.text().isEmpty(): code += 'QString()' else: if self.cFilters.isChecked(): fmt = '%s' else: fmt = 'self.trUtf8("%s")' code += fmt % unicode(self.eFilters.text()) code += ',%s%sNone' % (os.linesep, istring) if not self.cSymlinks.isChecked(): code += ',%s%sQFileDialog.Options(QFileDialog.DontResolveSymlinks)' % \ (os.linesep, istring) code += ')%s' % os.linesep elif self.rSaveFile.isChecked(): code += 'getSaveFileName(\\%s%s' % (os.linesep, istring) code += 'None,%s%s' % (os.linesep, istring) if self.eCaption.text().isEmpty(): code += 'QString(),%s%s' % (os.linesep, istring) else: code += 'self.trUtf8("%s"),%s%s' % \ (unicode(self.eCaption.text()), os.linesep, istring) if self.eStartWith.text().isEmpty(): code += 'QString(),%s%s' % (os.linesep, istring) else: if self.cStartWith.isChecked(): fmt = '%s,%s%s' else: fmt = 'self.trUtf8("%s"),%s%s' code += fmt % (unicode(self.eStartWith.text()), os.linesep, istring) if self.eFilters.text().isEmpty(): code += 'QString()' else: if self.cFilters.isChecked(): fmt = '%s' else: fmt = 'self.trUtf8("%s")' code += fmt % unicode(self.eFilters.text()) code += ',%s%sNone' % (os.linesep, istring) if (not self.cSymlinks.isChecked()) or \ (not self.cConfirmOverwrite.isChecked()): code += ',%s%sQFileDialog.Options(' % (os.linesep, istring) if not self.cSymlinks.isChecked(): code += 'QFileDialog.DontResolveSymlinks' if (not self.cSymlinks.isChecked()) and \ (not self.cConfirmOverwrite.isChecked()): code += ' | ' if not self.cConfirmOverwrite.isChecked(): code += 'QFileDialog.DontConfirmOverwrite' code += ')' code += ')%s' % os.linesep elif self.rDirectory.isChecked(): code += 'getExistingDirectory(\\%s%s' % (os.linesep, istring) code += 'None,%s%s' % (os.linesep, istring) if self.eCaption.text().isEmpty(): code += 'QString(),%s%s' % (os.linesep, istring) else: code += 'self.trUtf8("%s"),%s%s' % \ (unicode(self.eCaption.text()), os.linesep, istring) if self.eWorkDir.text().isEmpty(): code += 'QString()' else: if self.cWorkDir.isChecked(): fmt = '%s' else: fmt = 'self.trUtf8("%s")' code += fmt % unicode(self.eWorkDir.text()) code += ',%s%sQFileDialog.Options(' % (os.linesep, istring) if not self.cSymlinks.isChecked(): code += 'QFileDialog.DontResolveSymlinks | ' if self.cDirOnly.isChecked(): code += 'QFileDialog.ShowDirsOnly' else: code += 'QFileDialog.Option(0)' code += '))%s' % os.linesep return code def getCode(self, indLevel, indString): """ Public method to get the source code. @param indLevel indentation level (int) @param indString string used for indentation (space or tab) (string) @return generated code (string) """ return self.__getCode4(indLevel, indString) eric4-4.5.18/eric/Plugins/WizardPlugins/FileDialogWizard/PaxHeaders.8617/__init__.py0000644000175000001440000000013212261012650026220 xustar000000000000000030 mtime=1388582312.598084665 30 atime=1389081083.130724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/WizardPlugins/FileDialogWizard/__init__.py0000644000175000001440000000023112261012650025746 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Package implementing the file dialog wizard. """ eric4-4.5.18/eric/Plugins/WizardPlugins/PaxHeaders.8617/MessageBoxWizard0000644000175000001440000000013212262730776024111 xustar000000000000000030 mtime=1389081086.300724332 30 atime=1389081086.305724332 30 ctime=1389081086.315724332 eric4-4.5.18/eric/Plugins/WizardPlugins/MessageBoxWizard/0000755000175000001440000000000012262730776023720 5ustar00detlevusers00000000000000eric4-4.5.18/eric/Plugins/WizardPlugins/MessageBoxWizard/PaxHeaders.8617/MessageBoxWizardDialog.py0000644000175000001440000000013212261012650031055 xustar000000000000000030 mtime=1388582312.601084703 30 atime=1389081083.130724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/WizardPlugins/MessageBoxWizard/MessageBoxWizardDialog.py0000644000175000001440000004027712261012650030621 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Module implementing the message box wizard dialog. """ import os from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt.KQApplication import e4App from Ui_MessageBoxWizardDialog import Ui_MessageBoxWizardDialog class MessageBoxWizardDialog(QDialog, Ui_MessageBoxWizardDialog): """ Class implementing the message box wizard dialog. It displays a dialog for entering the parameters for the QMessageBox code generator. """ def __init__(self, parent=None): """ Constructor @param parent parent widget (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) # keep the following three lists in sync self.buttonsList = QStringList() \ << self.trUtf8("No button") \ << self.trUtf8("Abort") \ << self.trUtf8("Apply") \ << self.trUtf8("Cancel") \ << self.trUtf8("Close") \ << self.trUtf8("Discard") \ << self.trUtf8("Help") \ << self.trUtf8("Ignore") \ << self.trUtf8("No") \ << self.trUtf8("No to all") \ << self.trUtf8("Ok") \ << self.trUtf8("Open") \ << self.trUtf8("Reset") \ << self.trUtf8("Restore defaults") \ << self.trUtf8("Retry") \ << self.trUtf8("Save") \ << self.trUtf8("Save all") \ << self.trUtf8("Yes") \ << self.trUtf8("Yes to all") self.buttonsCodeListBinary = [ QMessageBox.NoButton, QMessageBox.Abort, QMessageBox.Apply, QMessageBox.Cancel, QMessageBox.Close, QMessageBox.Discard, QMessageBox.Help, QMessageBox.Ignore, QMessageBox.No, QMessageBox.NoToAll, QMessageBox.Ok, QMessageBox.Open, QMessageBox.Reset, QMessageBox.RestoreDefaults, QMessageBox.Retry, QMessageBox.Save, QMessageBox.SaveAll, QMessageBox.Yes, QMessageBox.YesToAll, ] self.buttonsCodeListText = [ "QMessageBox.NoButton", "QMessageBox.Abort", "QMessageBox.Apply", "QMessageBox.Cancel", "QMessageBox.Close", "QMessageBox.Discard", "QMessageBox.Help", "QMessageBox.Ignore", "QMessageBox.No", "QMessageBox.NoToAll", "QMessageBox.Ok", "QMessageBox.Open", "QMessageBox.Reset", "QMessageBox.RestoreDefaults", "QMessageBox.Retry", "QMessageBox.Save", "QMessageBox.SaveAll", "QMessageBox.Yes", "QMessageBox.YesToAll", ] self.defaultCombo.addItems(self.buttonsList) self.bTest = \ self.buttonBox.addButton(self.trUtf8("Test"), QDialogButtonBox.ActionRole) if qVersion() < "4.2.0": self.rQt4.setChecked(True) else: self.rQt42.setChecked(True) def __testQt40(self): """ Private method to test the selected options for Qt3 and Qt 4.0. """ b1 = QString() b2 = QString() b3 = QString() if not self.cButton0.currentText().isEmpty(): b1 = self.cButton0.currentText() if not self.cButton1.currentText().isEmpty(): b2 = self.cButton1.currentText() if not self.cButton2.currentText().isEmpty(): b3 = self.cButton2.currentText() if self.rInformation.isChecked(): QMessageBox.information(None, self.eCaption.text(), self.eMessage.toPlainText(), b1, b2, b3, self.sDefault.value(), self.sEscape.value() ) elif self.rQuestion.isChecked(): QMessageBox.question(None, self.eCaption.text(), self.eMessage.toPlainText(), b1, b2, b3, self.sDefault.value(), self.sEscape.value() ) elif self.rWarning.isChecked(): QMessageBox.warning(None, self.eCaption.text(), self.eMessage.toPlainText(), b1, b2, b3, self.sDefault.value(), self.sEscape.value() ) elif self.rCritical.isChecked(): QMessageBox.critical(None, self.eCaption.text(), self.eMessage.toPlainText(), b1, b2, b3, self.sDefault.value(), self.sEscape.value() ) def __testQt42(self): """ Private method to test the selected options for Qt 4.2.0. """ buttons = QMessageBox.NoButton if self.abortCheck.isChecked(): buttons |= QMessageBox.Abort if self.applyCheck.isChecked(): buttons |= QMessageBox.Apply if self.cancelCheck.isChecked(): buttons |= QMessageBox.Cancel if self.closeCheck.isChecked(): buttons |= QMessageBox.Close if self.discardCheck.isChecked(): buttons |= QMessageBox.Discard if self.helpCheck.isChecked(): buttons |= QMessageBox.Help if self.ignoreCheck.isChecked(): buttons |= QMessageBox.Ignore if self.noCheck.isChecked(): buttons |= QMessageBox.No if self.notoallCheck.isChecked(): buttons |= QMessageBox.NoToAll if self.okCheck.isChecked(): buttons |= QMessageBox.Ok if self.openCheck.isChecked(): buttons |= QMessageBox.Open if self.resetCheck.isChecked(): buttons |= QMessageBox.Reset if self.restoreCheck.isChecked(): buttons |= QMessageBox.RestoreDefaults if self.retryCheck.isChecked(): buttons |= QMessageBox.Retry if self.saveCheck.isChecked(): buttons |= QMessageBox.Save if self.saveallCheck.isChecked(): buttons |= QMessageBox.SaveAll if self.yesCheck.isChecked(): buttons |= QMessageBox.Yes if self.yestoallCheck.isChecked(): buttons |= QMessageBox.YesToAll if buttons == QMessageBox.NoButton: buttons = QMessageBox.Ok defaultButton = self.buttonsCodeListBinary[self.defaultCombo.currentIndex()] if self.rInformation.isChecked(): QMessageBox.information(None, self.eCaption.text(), self.eMessage.toPlainText(), QMessageBox.StandardButtons(buttons), defaultButton ) elif self.rQuestion.isChecked(): QMessageBox.question(None, self.eCaption.text(), self.eMessage.toPlainText(), QMessageBox.StandardButtons(buttons), defaultButton ) elif self.rWarning.isChecked(): QMessageBox.warning(None, self.eCaption.text(), self.eMessage.toPlainText(), QMessageBox.StandardButtons(buttons), defaultButton ) elif self.rCritical.isChecked(): QMessageBox.critical(None, self.eCaption.text(), self.eMessage.toPlainText(), QMessageBox.StandardButtons(buttons), defaultButton ) def on_buttonBox_clicked(self, button): """ Private slot called by a button of the button box clicked. @param button button that was clicked (QAbstractButton) """ if button == self.bTest: self.on_bTest_clicked() @pyqtSignature("") def on_bTest_clicked(self): """ Private method to test the selected options. """ if self.rAbout.isChecked(): QMessageBox.about(None, self.eCaption.text(), self.eMessage.toPlainText() ) elif self.rAboutQt.isChecked(): QMessageBox.aboutQt(None, self.eCaption.text() ) else: if self.rQt42.isChecked(): self.__testQt42() else: self.__testQt40() def on_cButton0_editTextChanged(self, text): """ Private slot to enable/disable the other button combos depending on its contents. @param text the new text (QString) """ if text.isEmpty(): self.cButton1.setEnabled(False) self.cButton2.setEnabled(False) else: self.cButton1.setEnabled(True) if self.cButton1.currentText().isEmpty(): self.cButton2.setEnabled(False) else: self.cButton2.setEnabled(True) self.sDefault.setMaximum(0) self.sEscape.setMaximum(0) def on_cButton1_editTextChanged(self, text): """ Private slot to enable/disable the other button combos depending on its contents. @param text the new text (QString) """ if text.isEmpty(): self.cButton2.setEnabled(False) self.sDefault.setMaximum(0) self.sEscape.setMaximum(0) else: self.cButton2.setEnabled(True) self.sDefault.setMaximum(1) self.sEscape.setMaximum(1) def on_cButton2_editTextChanged(self, text): """ Private slot to enable/disable the other button combos depending on its contents. @param text the new text (QString) """ if text.isEmpty(): self.sDefault.setMaximum(1) self.sEscape.setMaximum(1) else: self.sDefault.setMaximum(2) self.sEscape.setMaximum(2) def __enabledGroups(self): """ Private method to enable/disable some group boxes. """ self.buttons.setEnabled(not self.rQt42.isChecked() and \ not self.rAbout.isChecked() and \ not self.rAboutQt.isChecked() ) self.standardButtons.setEnabled(self.rQt42.isChecked() and \ not self.rAbout.isChecked() and \ not self.rAboutQt.isChecked() ) def on_rQt42_toggled(self, on): """ Private slot to handle the toggled signal of the rQt42 radio button. @param on toggle state (boolean) (ignored) """ self.__enabledGroups() def on_rAbout_toggled(self, on): """ Private slot to handle the toggled signal of the rAbout radio button. @param on toggle state (boolean) (ignored) """ self.__enabledGroups() def on_rAboutQt_toggled(self, on): """ Private slot to handle the toggled signal of the rAboutQt radio button. @param on toggle state (boolean) (ignored) """ self.__enabledGroups() def __getQt40ButtonCode(self, istring): """ Private method to generate the button code for Qt3 and Qt 4.0. @param istring indentation string (string) @return the button code (string) """ btnCode = "" b1 = None b2 = None b3 = None if not self.cButton0.currentText().isEmpty(): b1 = self.cButton0.currentText() if not self.cButton1.currentText().isEmpty(): b2 = self.cButton1.currentText() if not self.cButton2.currentText().isEmpty(): b3 = self.cButton2.currentText() for button in [b1, b2, b3]: if button is None: btnCode += ',%s%sQString()' % (os.linesep, istring) else: btnCode += ',%s%sself.trUtf8("%s")' % \ (os.linesep, istring, unicode(button)) btnCode += ',%s%s%d, %d' % \ (os.linesep, istring, self.sDefault.value(), self.sEscape.value()) return btnCode def __getQt42ButtonCode(self, istring, indString): """ Private method to generate the button code for Qt 4.2.0. @param istring indentation string (string) @param indString string used for indentation (space or tab) (string) @return the button code (string) """ buttons = [] if self.abortCheck.isChecked(): buttons.append("QMessageBox.Abort") if self.applyCheck.isChecked(): buttons.append("QMessageBox.Apply") if self.cancelCheck.isChecked(): buttons.append("QMessageBox.Cancel") if self.closeCheck.isChecked(): buttons.append("QMessageBox.Close") if self.discardCheck.isChecked(): buttons.append("QMessageBox.Discard") if self.helpCheck.isChecked(): buttons.append("QMessageBox.Help") if self.ignoreCheck.isChecked(): buttons.append("QMessageBox.Ignore") if self.noCheck.isChecked(): buttons.append("QMessageBox.No") if self.notoallCheck.isChecked(): buttons.append("QMessageBox.NoToAll") if self.okCheck.isChecked(): buttons.append("QMessageBox.Ok") if self.openCheck.isChecked(): buttons.append("QMessageBox.Open") if self.resetCheck.isChecked(): buttons.append("QMessageBox.Reset") if self.restoreCheck.isChecked(): buttons.append("QMessageBox.RestoreDefaults") if self.retryCheck.isChecked(): buttons.append("QMessageBox.Retry") if self.saveCheck.isChecked(): buttons.append("QMessageBox.Save") if self.saveallCheck.isChecked(): buttons.append("QMessageBox.SaveAll") if self.yesCheck.isChecked(): buttons.append("QMessageBox.Yes") if self.yestoallCheck.isChecked(): buttons.append("QMessageBox.YesToAll") if len(buttons) == 0: return "" istring2 = istring + indString joinstring = ' | \\%s%s' % (os.linesep, istring2) btnCode = ',%s%sQMessageBox.StandardButtons(\\' % (os.linesep, istring) btnCode += '%s%s%s)' % (os.linesep, istring2, joinstring.join(buttons)) defaultIndex = self.defaultCombo.currentIndex() if defaultIndex: btnCode += ',%s%s%s' % (os.linesep, istring, self.buttonsCodeListText[defaultIndex]) return btnCode def getCode(self, indLevel, indString): """ Public method to get the source code. @param indLevel indentation level (int) @param indString string used for indentation (space or tab) (string) @return generated code (string) """ # calculate our indentation level and the indentation string il = indLevel + 1 istring = il * indString # now generate the code msgdlg = 'QMessageBox.' if self.rAbout.isChecked(): msgdlg += "about(None,%s" % os.linesep elif self.rAboutQt.isChecked(): msgdlg += "aboutQt(None, %s" % os.linesep elif self.rInformation.isChecked(): msgdlg += "information(None,%s" % os.linesep elif self.rQuestion.isChecked(): msgdlg += "question(None,%s" % os.linesep elif self.rWarning.isChecked(): msgdlg += "warning(None,%s" % os.linesep else: msgdlg +="critical(None,%s" % os.linesep msgdlg += '%sself.trUtf8("%s")' % (istring, unicode(self.eCaption.text())) if not self.rAboutQt.isChecked(): msgdlg += ',%s%sself.trUtf8("""%s""")' % \ (os.linesep, istring, unicode(self.eMessage.toPlainText())) if not self.rAbout.isChecked() and not self.rAboutQt.isChecked(): if self.rQt42.isChecked(): msgdlg += self.__getQt42ButtonCode(istring, indString) else: msgdlg += self.__getQt40ButtonCode(istring) msgdlg +=')%s' % os.linesep return msgdlg eric4-4.5.18/eric/Plugins/WizardPlugins/MessageBoxWizard/PaxHeaders.8617/MessageBoxWizardDialog.ui0000644000175000001440000000007411246226357031064 xustar000000000000000030 atime=1389081083.130724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/WizardPlugins/MessageBoxWizard/MessageBoxWizardDialog.ui0000644000175000001440000004463211246226357030622 0ustar00detlevusers00000000000000 MessageBoxWizardDialog 0 0 535 658 QMessageBox Wizard true Qt Version Qt::TabFocus Select to generate code for Qt 4.0.0 or newer Qt 4.0 Qt::TabFocus Select to generate code for Qt 4.2.0 or newer Qt 4.2 true Qt::Horizontal 161 21 Type Generate an Information QMessageBox Information true Qt::TabFocus Generate a Question QMessageBox Question Qt::TabFocus Generate a Warning QMessageBox Warning Qt::TabFocus Generate a Critical QMessageBox Critical Qt::TabFocus Generate an About QMessageBox About Qt::TabFocus Generate an AboutQt QMessageBox About Qt Caption Enter the caption for the QMessageBox Message Enter the message to be shown in the QMessageBox true false Buttons false Enter the text of button 1 true &OK &Cancel &Yes &No &Abort &Retry &Ignore Enter the text of button 0 true &OK &Cancel &Yes &No &Abort &Retry &Ignore Button 2 false Enter the text of button 2 true &OK &Cancel &Yes &No &Abort &Retry &Ignore Button 1 Button 0 Default Button: Enter the index of the default button 0 Escape Button: Enter the index of the button to be activated upon pressing Esc or -1 to ignore -1 0 -1 Standard Buttons Apply Abort Cancel Ignore Save all Save Discard Yes to all Open Reset Ok No Help No to all Retry Restore defaults Yes Close Default Button: 0 0 Select the default button Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok qPixmapFromMimeSource rQt4 rQt42 rInformation rQuestion rWarning rCritical rAbout rAboutQt eCaption eMessage cButton0 cButton1 cButton2 sDefault sEscape abortCheck applyCheck cancelCheck closeCheck discardCheck helpCheck ignoreCheck noCheck notoallCheck okCheck openCheck resetCheck restoreCheck retryCheck saveCheck saveallCheck yesCheck yestoallCheck defaultCombo buttonBox accepted() MessageBoxWizardDialog accept() 34 582 34 604 buttonBox rejected() MessageBoxWizardDialog reject() 126 584 126 605 eric4-4.5.18/eric/Plugins/WizardPlugins/MessageBoxWizard/PaxHeaders.8617/__init__.py0000644000175000001440000000013212261012650026256 xustar000000000000000030 mtime=1388582312.603084728 30 atime=1389081083.130724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/WizardPlugins/MessageBoxWizard/__init__.py0000644000175000001440000000023112261012650026004 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Package implementing the message box wizard. """ eric4-4.5.18/eric/Plugins/PaxHeaders.8617/AboutPlugin0000644000175000001440000000013212262730776020322 xustar000000000000000030 mtime=1389081086.300724332 30 atime=1389081086.305724332 30 ctime=1389081086.315724332 eric4-4.5.18/eric/Plugins/AboutPlugin/0000755000175000001440000000000012262730776020131 5ustar00detlevusers00000000000000eric4-4.5.18/eric/Plugins/AboutPlugin/PaxHeaders.8617/AboutDialog.ui0000644000175000001440000000007411073424751023125 xustar000000000000000030 atime=1389081083.142724394 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/AboutPlugin/AboutDialog.ui0000644000175000001440000001143711073424751022660 0ustar00detlevusers00000000000000 AboutDialog 0 0 580 450 About Eric false 0 0 Sans Serif 11 75 false true false false 0 &About QFrame::NoFrame true A&uthors QFrame::NoFrame true &Thanks To QFrame::NoFrame true &License Agreement QFrame::NoFrame QTextEdit::FixedColumnWidth 80 true false Qt::Horizontal QDialogButtonBox::Ok aboutTabWidget aboutEdit authorsEdit thanksEdit licenseEdit buttonBox accepted() AboutDialog accept() 83 423 83 434 buttonBox rejected() AboutDialog reject() 135 420 136 435 eric4-4.5.18/eric/Plugins/AboutPlugin/PaxHeaders.8617/__init__.py0000644000175000001440000000013212261012650022467 xustar000000000000000030 mtime=1388582312.608084792 30 atime=1389081083.143724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/AboutPlugin/__init__.py0000644000175000001440000000022112261012650022214 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Package containing the About plugin. """ eric4-4.5.18/eric/Plugins/AboutPlugin/PaxHeaders.8617/AboutDialog.py0000644000175000001440000000013112261012650023121 xustar000000000000000029 mtime=1388582312.61108483 30 atime=1389081083.143724395 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Plugins/AboutPlugin/AboutDialog.py0000644000175000001440000011050412261012650022655 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2004 - 2014 Detlev Offenbach # """ Module implementing an 'About Eric' dialog. """ import sys from PyQt4.QtCore import QString, Qt, SIGNAL from PyQt4.QtGui import QApplication from UI.Info import * import Utilities titleText = QString("%1 - %2").arg(Program).arg(Version) aboutText = QApplication.translate("AboutDialog", """

    %1 is an Integrated Development Environment for the Python""" """ programming language. It is written using the PyQt Python bindings for""" """ the Qt GUI toolkit and the QScintilla editor widget.

    """ """

    For more information see""" """ %2.

    """ """

    Please send bug reports to %3.

    """ """

    To request a new feature please send an email to""" """ %4.

    """ """

    %1 uses third party software which is copyrighted""" """ by its respective copyright holder. For details see""" """ the copyright notice of the individual package.

    """ ).arg(Program).arg(Homepage).arg(BugAddress).arg(FeatureAddress) authorsText = QString( u"""\ Detlev Offenbach Project Manager, Maintainer and German translation Andrew Bushnell Multithreaded debugger Alexander Darovsky Mikhail Terekhov Russian translations Julien Vienne French translations Zdeněk Böhm Czech translations Jaime Seuma Spanish translations Serdar Koçdaş Turkish translations Xia WeiPeng Chinese translations Gianluca Leonardo Giordani Italian translations """ ) thanksText = QString( u"""Phil Thompson for providing PyQt and QScintilla and pushing me into this business. Andrew Bushnell of Fluent Inc. for contributing the multithreading debugger and a bunch of fixes to enhance the platform independence. Alexander Darovsky and Mikhail Terekhov for providing Russian translations. Julien Vienne for providing French translations. Zdenek Böhm for providing Czech translations. Jaime Seuma for providing Spanish translations. Serdar Koçdaş for providing Turkish translations. Xia WeiPeng for providing Chinese translations. Gianluca for providing Italian translations. Shane Richards for Crystal Icons. The Kumula Team for the splash screen. Gordon Tyler Hans-Peter Jansen Ralf Ahlbrink Stefan Jaensch Martin v. Löwis Thorsten Kohnhorst for providing patches to improve eric3 and eric4. And all the people who reported bugs and made suggestions.""" ) licenseText = QString( """Eric is %1 You may use, distribute and copy Eric under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, which is shown below, or (at your option) any later version. ------------------------------------------------------------------------- GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS""").arg(Copyright) import os from PyQt4.QtGui import * from PyQt4.QtCore import * import UI.PixmapCache from Ui_AboutDialog import Ui_AboutDialog class AboutDialog(QDialog, Ui_AboutDialog): """ Class implementing an 'About Eric' dialog. """ def __init__(self, parent = None): """ Constructor @param parent reference to the parent widget (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.ericLabel.setText(titleText) self.ericPixmap.setPixmap(UI.PixmapCache.getPixmap("eric.png").scaled(48, 48)) #################################################################### ## ABOUT #################################################################### self.aboutEdit.setHtml(aboutText) #################################################################### ## Copyright, Authors #################################################################### self.authorsEdit.setPlainText(authorsText) #################################################################### ## THANKS #################################################################### self.thanksEdit.setPlainText(thanksText) #################################################################### ## LICENSE #################################################################### if Utilities.isWindowsPlatform(): self.licenseEdit.setFontFamily("Lucida Console") else: self.licenseEdit.setFontFamily("Monospace") self.licenseEdit.setPlainText(licenseText) self.aboutTabWidget.setCurrentWidget(self.about) eric4-4.5.18/eric/PaxHeaders.8617/eric4_diff.py0000644000175000001440000000013212261012650017054 xustar000000000000000030 mtime=1388582312.616084893 30 atime=1389081083.153724394 30 ctime=1389081086.308724333 eric4-4.5.18/eric/eric4_diff.py0000644000175000001440000000341712261012650016613 0ustar00detlevusers00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Eric4 Diff This is the main Python script that performs the necessary initialization of the Diff module and starts the Qt event loop. This is a standalone version of the integrated Diff module. """ import sys import os # disable the usage of KDE widgets, if requested sys.e4nokde = False if "--nokde" in sys.argv: del sys.argv[sys.argv.index("--nokde")] sys.e4nokde = True else: sys.e4nokde = os.getenv("e4nokde") is not None and os.getenv("e4nokde") == "1" for arg in sys.argv: if arg.startswith("--config="): import Utilities configDir = arg.replace("--config=", "") Utilities.setConfigDir(configDir) sys.argv.remove(arg) break from Utilities import Startup def createMainWidget(argv): """ Function to create the main widget. @param argv list of commandline parameters (list of strings) @return reference to the main widget (QWidget) """ from UI.DiffDialog import DiffWindow return DiffWindow() def main(): """ Main entry point into the application. """ options = [\ ("--config=configDir", "use the given directory as the one containing the config files"), ("--nokde" , "don't use KDE widgets"), ] appinfo = Startup.makeAppInfo(sys.argv, "Eric4 Diff", "", "Simple graphical diff tool", options) res = Startup.simpleAppStartup(sys.argv, appinfo, createMainWidget) sys.exit(res) if __name__ == '__main__': main() eric4-4.5.18/eric/PaxHeaders.8617/Styles0000644000175000001440000000007311706605624015732 xustar000000000000000029 atime=1389081086.01472434 30 ctime=1389081086.315724332 eric4-4.5.18/eric/Styles/0000755000175000001440000000000011706605624015535 5ustar00detlevusers00000000000000eric4-4.5.18/eric/Styles/PaxHeaders.8617/Pure_Technology_Dark.qss0000644000175000001440000000007410657333742022612 xustar000000000000000030 atime=1389081083.153724394 30 ctime=1389081086.308724333 eric4-4.5.18/eric/Styles/Pure_Technology_Dark.qss0000644000175000001440000000055310657333742022342 0ustar00detlevusers00000000000000QProgressBar:horizontal { border: 1px solid gray; border-radius: 3px; background: white; padding: 1px; text-align: center; } QProgressBar::chunk:horizontal { background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #c8ff67, stop: 1 #ace44a); } * { selection-background-color: #BCF952; selection-color: #000000; } eric4-4.5.18/eric/PaxHeaders.8617/eric4_tray.pyw0000644000175000001440000000013012261012652017312 xustar000000000000000028 mtime=1388582314.9861149 30 atime=1389081083.153724394 30 ctime=1389081086.308724333 eric4-4.5.18/eric/eric4_tray.pyw0000644000175000001440000000021012261012652017037 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2010 - 2014 Detlev Offenbach # from eric4_tray import main main() eric4-4.5.18/eric/PaxHeaders.8617/eric4_plugininstall.pyw0000644000175000001440000000013212261012652021222 xustar000000000000000030 mtime=1388582314.988114925 30 atime=1389081083.153724394 30 ctime=1389081086.308724333 eric4-4.5.18/eric/eric4_plugininstall.pyw0000644000175000001440000000022112261012652020747 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2010 - 2014 Detlev Offenbach # from eric4_plugininstall import main main() eric4-4.5.18/eric/PaxHeaders.8617/icons0000644000175000001440000000007311706605624015562 xustar000000000000000029 atime=1389081086.01472434 30 ctime=1389081086.315724332 eric4-4.5.18/eric/icons/0000755000175000001440000000000011706605624015365 5ustar00detlevusers00000000000000eric4-4.5.18/eric/icons/PaxHeaders.8617/default0000644000175000001440000000013212262730776017207 xustar000000000000000030 mtime=1389081086.289724333 30 atime=1389081086.290724332 30 ctime=1389081086.315724332 eric4-4.5.18/eric/icons/default/0000755000175000001440000000000012262730776017016 5ustar00detlevusers00000000000000eric4-4.5.18/eric/icons/default/PaxHeaders.8617/drawCircleFilled.png0000644000175000001440000000013212167565270023170 xustar000000000000000030 mtime=1373563576.948318537 30 atime=1389081083.168724394 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/drawCircleFilled.png0000644000175000001440000000105312167565270022721 0ustar00detlevusers00000000000000PNG  IHDRj pHYsϐPLTE˺ҥǽìϠϚɢϗ:5tRNS.//559=>>FPhhiGKIDATeZa6D[Huc1?O W$Zs8lr$IZ sE<f%6̷|X*N™ U!p/Cx 8B&8QHH{cl|*ୌU >{+σN7."%p%.]AVVIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/sceneHeightDec.png0000644000175000001440000000013212167565271022634 xustar000000000000000030 mtime=1373563577.344318982 30 atime=1389081083.168724394 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/sceneHeightDec.png0000644000175000001440000000136412167565271022372 0ustar00detlevusers00000000000000PNG  IHDRj pHYs  tIME0*M'CtEXtCommentCreated with The GIMPd%nGPLTEб簰ѳ¡((45ݵEg1}wEtRNS #*+128:>@CDE]a詜bKGDl0;IDAT=NPonŦ@D_ EKVx oC1;b]}ջ-`=OSFdCzMLc_^?~,e1Vu=QaN֑ -̝e|b`jؖ{A*Cί̹(Wy54di15AA1ڲ{8:ƵϬޭ{eM^9Vݰu3W.P|=yg؝Q2rU "<ڦ y0Xc6|6>nc\gt۽$, V)E`!Q&+0"ߘ_ݖ8@d( 2[vnB9%ʄpT4@ V@ 2{U9K)@΁Qi\TeeO~߈!bP0QoRYvU33JDCmnKB lV]bՙп dno874KQ{OGj X[cvC+P89'^ڰѿʁ[ًf1j=eYX\U/3>;~Vʻ/bdu˥sn])vߩR8 IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/helpAbout.png0000644000175000001440000000013212167565271021715 xustar000000000000000030 mtime=1373563577.153318767 30 atime=1389081083.191724394 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/helpAbout.png0000644000175000001440000000203712167565271021451 0ustar00detlevusers00000000000000PNG  IHDRĴl;sBIT|d pHYsaa0UtEXtSoftwarewww.inkscape.org<IDAT8˵k\U?ޛI2_ƴɐji5! B*B E bf&bڂvc"V%n Zmij{{śNf w{>p!1n4ifDq2q;e,]p5t[YXYɗn̰?ߏv.v}wp//6BfmDhNYyݼrr {#/6#FH88=Ɗ ~w^z2[ zBbfhicOcndpp_ًW&c}2^H7+zBHS2^H_g#2vq'!9_yJE,qϾ{mh!5355oO%ܽ׺72(PsUZ1EغpV@= O6X,(4PJƸ;U壑N4U3T2DX/*j歓glT0bwN >u j^ ,*D(D.,9ªŧ fΈUwYFT)랯5_úXEնTM[I},lEl`U密 l; z+Xw6!;{\pc c籶eP׻xZjz$V)NQ<$s舗hoք+O ~CۨTҮ|d&QY!f(P(*r TTG ,YBS-s>M"b8P$ʳj6}|{f@lcmLҖIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/sceneWidthInc.png0000644000175000001440000000013212167565271022521 xustar000000000000000030 mtime=1373563577.349318988 30 atime=1389081083.191724394 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/sceneWidthInc.png0000644000175000001440000000134612167565271022257 0ustar00detlevusers00000000000000PNG  IHDRj pHYs  tIME/htEXtCommentCreated with The GIMPd%nDPLTEб簰ѳ¡((45ݵEg1O/EtRNS #*+128:>@CDE]a詜bKGDkReIDATJ`Lp1ZΘ*f9#>cZ1ꓫ0mOSE(\Nt2kK @3Kn Ll.2Yh6W6@$KKmVHqCڟ(H{龪B۲3LyV9B=IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/vcsUpdate.png0000644000175000001440000000013212167565271021730 xustar000000000000000030 mtime=1373563577.464319117 30 atime=1389081083.191724394 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/vcsUpdate.png0000644000175000001440000000240012167565271021456 0ustar00detlevusers00000000000000PNG  IHDRĴl; pHYs  tIME hXDtEXtCommentCreated with The GIMPd%nbKGDdIDAT8˕UKh\e>wsdd j)I-h( U BPW.\r!rMٴP JK2 h࣍i;dry?&Y'wws΍D{H$Z8>Rןo4 Ba]וNCvTU%ZJ\(Vw) ^-˛4&'';'񟅅}}}o_ARV`,xR" oSSS2;;k*eYG"M("K4M"f`fۗG:/G Egj>{os`oAaN?1f`jz@ s0~|mhc":;_gw&L 7wvv1_O_?^lq]\D$"Bi mTkwAwo n2ɇu0"wٹR)E~ ]8;_D\2 >f:k-),\h4zTRa]ADy\x rDQErGO#g=?%YUU,rt\Y"'!i!E\CK|P bfѸ֛GXc .3cvfLYo%J Um09Lf =lQz P0:/Gz UhkHMT!R\g'z|Dp5ZTT<,KtH 詣w5q;JI[dh=SÚ$#ݹ?4]\EC9XY'<ҟK`s,mf>00@x\dT1w.+tk {O3FtZ%R.󺼼 0= YR,d2)0@.RVX42 oRʺww(tSTk~~966v y>6#bZX* Lr25!"hL6\~08w4ALOO7oK౯^9;IϾY,eg7{\ݣLZf0;ޥ͙G :5~~D9\o>l:/IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/module.png0000644000175000001440000000013212167565271021257 xustar000000000000000030 mtime=1373563577.179318797 30 atime=1389081083.210724394 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/module.png0000644000175000001440000000046112167565271021012 0ustar00detlevusers00000000000000PNG  IHDRR pHYs  tIMEm$tEXtCommentCreated with GIMPWPLTEdddhOxxQQيꠠtRNS@fbKGD ٥gIDAT 0 ^"} TعC$`&{(g2z$J%QuIo*kY(G ~M(IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/2leftarrow.png0000644000175000001440000000013212167565270022060 xustar000000000000000030 mtime=1373563576.857318433 30 atime=1389081083.210724394 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/2leftarrow.png0000644000175000001440000000231712167565270021615 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYsaa0UtEXtSoftwarewww.inkscape.org<PLTE@fURUp|KPmmTKMVjMWhDEGIKLNOPRSTUVWX_JJc T 6$ R   U "f"^Xc\!`   yg1q1oY j iDDEEHHMMTTYY\\Bfuy|Sqc R  #!!"#""#$%%%%'y'))))*l*,,--....000011334{444778u888::;;==??@@AABBCCEEFFHHIIJJLLMMMMOOQQRRRRTTTTUUWWXXXXYY[[^^``ddddffffggjjnnoouuwwyy}}ć݂z:YtRNSABINY\qqs{U3IDATc` 0Yt?(CS&;Ȣ.L ݻ.d zpeͫW᢬oߺqmY'/DC/_pı>% r9~vlۼaQ9{vn߲qK͛sP,rukW/_`YӧNZML-(,NQ"WVUSYܧ R-&1(_@[ƶ jpM*oh^W1QyfyO&;iA%Sni<#a&JOf`VX @RԑD,Nht IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/globalVariables.png0000644000175000001440000000013212167565271023063 xustar000000000000000030 mtime=1373563577.141318754 30 atime=1389081083.210724394 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/globalVariables.png0000644000175000001440000000223012167565271022612 0ustar00detlevusers00000000000000PNG  IHDRj pHYs  tIME 8ɬztEXtCommentCreated with The GIMPd%n=PLTEefj"mݬ!l)rܶ0y2|/y޴&uO'x|K[/}0})wT>߲]b{錶4%y3ܟQ>W\qU㉷n狻7/|2xdjco%sB%pٔ+},~WN1ڞIOO|>IvUG,c ,vɪY~w0 `!=CcѫIē8C.tH'IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/erict.png0000644000175000001440000000013012167565271021076 xustar000000000000000028 mtime=1373563577.0933187 30 atime=1389081083.210724394 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/erict.png0000644000175000001440000000570112167565271020635 0ustar00detlevusers00000000000000PNG  IHDR00W pHYs  tIME  %(bKGD NIDATh՚Kl]y39$yIHY$GkKuH"\E- t]ȶ^6;َeY/R󒗼syO7J03}?#.7B' EQ5fuxcG\ĮDW N˾#b ljLt{05b=LjQx+U|.@1-0^3Džx/Ҡd?I*'UWX4+We]<5!lL֮e=<|si!40m]_gv1Ο W^kT DࣅmhBCf"K 'Qs> ;T_sqaH| e4.h((@Hʵp2\:o{B&]Ϡҗ|=hphiԂlPPU0KֱFhtjH2zX;/V;U6'=| ->g YDSˡ0FwN]_( #DK2AoKL@Tg)ՆbV!B>Γ瀝 śqq}F^qKk]4 6:ˏ^$9pTĸv/(5dHpQ+kyx EnnCj"(Pgϛns#IB;%AVVu֣Sq-o2 OBjOWhTuoL?65[P:3˶F)͠ǂ|8Nk2*qE OqbENW16TZC~׺YGv{{ ӵwCefERenM{|3I,~Fuc6m^+~xo~A}!WƁed9~R.vo7g\34qv #P< [{#ԦAGKxﭯf{?O1zb!x .ͦlEP{[Ǫ.6NZ;fD*fPZ|Y{_2A|7X|灥%c+x:G_pl(;G:YgUI#L~a,% CռDdV~Gîew'0l%턔rb}r]BP10Ѳo9-J$S)WhmqQ Ӣk"s>yjWL5KyO!:Ҍ)2j:$$-aL)a̠V%)i,3NB?+O]@K;(檄`5"jYl'OdURe9漢|7?+T4sЛ!+ :aLh* t' r'a %o'wi˫@fry 2R0RژX'5c0j(:%bXPf$tMGpXww~K?cy.XbCGnqdAW[p#ܛs؈5АgA !mheŠyᯏl}5~5Ў1*)L71T 9!pjNk#۠#M:l4xey?0. @KhI <_`UPFZ9(GgB= 9;?_iqbHww>BVr ]ɩ&N10uJbhF(ېD Z=c*`-C߹|ʆLʷ ꬄQƺn;vpG*[KF{"h@x`ʃكo1ܳAmIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/autoHideOn.png0000644000175000001440000000013212167565270022030 xustar000000000000000030 mtime=1373563576.875318455 30 atime=1389081083.220724393 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/autoHideOn.png0000644000175000001440000000221012167565270021555 0ustar00detlevusers00000000000000PNG  IHDRj pHYs^tIME :f PLTE9k$W7$U%W3$T*Q%X%>?v 9%Wt'A\L"P//U?[ %I%W0[%W 1H$U !@"Q)\;j8%W !7 N!Q#Q%TIu$U(I3U*Zb=R#Gy3N0^$Rg1\(Ks>k*P!Fz9cAn*Po2a{:dLr%Om(Om-Oj<[CfMs0Mg6PsA[s<^t1a|4XSz9[@eDmn!Ap,Fi/P0Jl2No2V7Ru9Qq:];W};f=`>Tq>`B`FxGhLiLpOuQpTmT~WsYvYwY{Z~[}[\`y`aaabbbchiiijjkkkmnoopqrtttvvvwwxyz|}}~ƀЁ؂كĄτۅȅ̅ۆŇɇ͈ň҈ψۈމlj̉؉ЉԊ͊ҋɋϋҋጫŌʌ፬ˍ̎̏ȏ䐰ёˑ͕ؒ̒͒ؓꖸ꘷ΙКѤإ٦٧ܲƢ@UtRNS  "&'-2ABEQ]dhkpuuvvy| bKGD L"IDATc` qb0g1;v]Iknhz!W._**m/z "T7;rS%Y> F@Qu 6ufj:{ѪwoY`Uј[V=mm{v[`4)VK#0.-w'N cЉ` Oͯ0ӻ"UM dVF%5LYqɑ2*eNplaw,k'-E6Zx5ޝ<."֟{~h 6~QJ0a[-}nҍ>`Vt͗<h) R ^qou]zz3+XߪwYݾ}+w1=BcߘP8c箞S, Tp})ކ|'|V&l_00 0vmJI]=uHZ_U,r&X%.Y h@y ]%iMIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/logViewer.png0000644000175000001440000000013212167565271021735 xustar000000000000000030 mtime=1373563577.169318785 30 atime=1389081083.220724393 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/logViewer.png0000644000175000001440000000237112167565271021472 0ustar00detlevusers00000000000000PNG  IHDRĴl;sRGB pHYs^tIME6u,bKGDyIDAT8˕k\Eǿgv-6솀m16&1R/QA ? ೨'Ģ@%Zjm5uil\rrΌ9Vā3'|(PXa3w zJuk_ycv]Nykcmb:. ʰjhS*| 2&lUU}z̚'GFF.%I8]^܆I'рTiNy]FX~"'p{{cccQ&9)F!C hb ew 1&~\.*V+4MC:kC_{礐+TOc35ci|/,,Q? @иVՐZݧ^ߚW} FjNM"Y,(0   8 VVw?{BНJRb~)k 66(Q1Dh45WfIA@nE#yq+j-x桃ſS%0IҎXFr0L}p]L'Q1xXG iTZT)܄^RS9LMM!_Ĺ2 1$X# ,ߥW/AT: ^F/ڃM,9lx|=֏"ξSryڴ*gm +Jfd-dz.L8iXE6g|;K3R4KlbyXIz|[tXFplxh\./'96/a8ELɲ) ."bml<y`S`3ܜU;0H!Ъr:MIT*%pT>/[ƍEg-V[.[ n [YAByJnPsv[^B¶E Cpg sv@-\Ծr ,k8 eƢAvG E^D~+[sbN_\2e(d"/btf)r/gj9\J5^hF)p2FR%FƜdCEvYV&qIϋ!s>{Аa#HI<"drrR듖J+dĝHT+p i xfZ GGG*200 J%Kof"v/[,Sϻ < idU0laz788,Q16Ò^&+SUR__/ds;9m&tb=IOGRpWI8瑅)Ŕ@Б>E9 d2h ݎ[/뗤"*mmm=:>#LwGÖKS i %}q?' q_pV0HeH|+t8yk#FhFww6'þ U??gHbb?|x5] w-9|հ?,V%F]]5- B+?sph}gIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/printPreview.png0000644000175000001440000000013212167565271022470 xustar000000000000000030 mtime=1373563577.292318924 30 atime=1389081083.264724393 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/printPreview.png0000644000175000001440000000246412167565271022230 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYsvv}ՂtEXtSoftwarewww.inkscape.org<PLTEVKHMSu ;;;I=8  | x ڂ ʼϬޙߗ&&&&&''''(((222999===>>>???@>=@@@DDDGGGIIIOOOUUU___a]\aabcccjXIrrr}}}ko7uo{vsy|xubf 1^Ph#ShT׆X>tؕ'bIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/comment.png0000644000175000001440000000013212167565270021433 xustar000000000000000030 mtime=1373563576.909318493 30 atime=1389081083.264724393 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/comment.png0000644000175000001440000000242012167565270021163 0ustar00detlevusers00000000000000PNG  IHDRĴl;IDAT8˵KlTU9<:}R0 4 *&L!ZqᖸƘu&FtalJQ@D޵t3wf{qT6~_~9?r16o\~1WF"0RdxB+j__M}ɚ(IeoL$-|>|.ɓУC=S(DHPul5Rr?nLJ)I\.W jI`0[^ ̱-`lLPn7kGʆW-nmGQ_\X\nc5j8՚ PpѝAgáxh ۭ[uSNU4MNN3i6LESP^29e':D|5s+Hsjs}IW̠eL4)ڢLЭvB#"'fR%:z$`0cށTlj7ŶԐ.-<(&D}gi&rN57=F Z%Ir"N;E4L}X- Y4pΜ >*5J?: "E5ckѣlllnQl'|)bsʧhSGdۤhe[& 4j)N5?LVlr'eRSB =K' U%MyʥSSS|رcЁC]<Q)| P&XR{#UE8GACL-RD9k_xN8$.u s)#3Q"Fd ykZ'^GXu ԻڷFR.S1|wuؼ^UgVY pMP(VV.(ϿA5 Z2K, k4Yf1e(5%슉 :88؈$SK8.0LJԝpi 0-EEU;{5O83_MPB@PfVD/ ԡMB@Q//uԻٞ={cK0 1`̭| X"A(2nn r1PǏ{KgT.R!Kp52+^~s7KatK-+¯% ?DqAIobdgTIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/bookmarkNext.png0000644000175000001440000000013112167565270022434 xustar000000000000000029 mtime=1373563576.88031846 30 atime=1389081083.274724392 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/bookmarkNext.png0000644000175000001440000000224712167565270022174 0ustar00detlevusers00000000000000PNG  IHDRĴl; pHYs  tIME69ҊtEXtCommentCreated with The GIMPd%nbKGD IDAT8˕mTegguuqu}wvr] LXD MIO%Ǡ02OE_Pz4 ^\VUwy{gOɺ+s<{sιt{^֛z~g3̈=e-K+\X YF@V?4|ƥPUjQ3m 3P=gʩW/!bЃ:(݉GN7'n}9XcKUb0(`&0E޴6_iݜC/DoJ[ qH4q= m@\σHH`TXf DQa$ LX1YZw؈S O)JԜ:cqI'78w_/zg|pEVrW(xIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/remsplitHorizontal.png0000644000175000001440000000013212167565271023703 xustar000000000000000030 mtime=1373563577.335318972 30 atime=1389081083.274724392 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/remsplitHorizontal.png0000644000175000001440000000115512167565271023437 0ustar00detlevusers00000000000000PNG  IHDRj pHYsvv}ՂtEXtSoftwarewww.inkscape.org<PLTEZ0tRNS !#)+34<>FIMNPRSUO IDATe;0k)8(&&NN~NNQIZjyI_r\Y0Ypt+(}` %*i}}0:Tm}TL$Εe H_=i#e! ҵtUpV]tp?i5%`$qi ChlV,ثpW0 =^gXT=Q'*zIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/unittestProject.png0000644000175000001440000000013212167565271023200 xustar000000000000000030 mtime=1373563577.420319067 30 atime=1389081083.274724392 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/unittestProject.png0000644000175000001440000000215612167565271022736 0ustar00detlevusers00000000000000PNG  IHDRĴl; pHYs  tIME-.֏JtEXtCommentCreated with The GIMPd%nbKGDIDAT8˭]h[e{>r4Y&&tkes8E(t(+s^xQBe77Un0Ժ-mvMsޜxtm}<FG`h5hkk]GGG3`n յuuu}dƞE楔Kͧ>ng4MaҲb@VT`M{{;%Z[[kjϭ0a?IuP #yMp R0 cjkd p7o9Z GWۄp!;ÊV!۳PqP%d!#A c7q)TȩQVd8p9`;ߜuزRܻuQR `jB_{37S g>üNDZ+m+({ aw?"6nE?Ѳ2 [LLEZ,Udk̂#V*L |ρ /X2dyP}URZ$$2v L |J<2%Qxj;Pf" p=*K)`NB|xD)R* +L/:,&|.ڰq"ǚei` 31H !!5ktŦ){{ =葧"{r2뼗 (qg8Rpe qH$T}|LإG&oeҫSFzI6ґO3(/Rh uu^_.5̂@.r2c[;lҦ2ow;@V*cZ F9vZK(1lZ#L$s-lpmIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/fileDesigner.png0000644000175000001440000000013212167565271022372 xustar000000000000000030 mtime=1373563577.104318712 30 atime=1389081083.287724392 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/fileDesigner.png0000644000175000001440000000165412167565271022132 0ustar00detlevusers00000000000000PNG  IHDRj PLTE!!!999297@8CCG3H]NX3\v'_bYfgrKh0n%q.rAssvvwG?y%~l~)~lSmnn!o0/>x$n1)z97Eerccdi_SI`PTjFWȅ]ǎ@[kbMD>ZVCYחיŰݙޠɬdߞ΍'÷Ւ'snڿޏ,*otRNS#&MS\l>z#6IDATnLa}oN_UAĆku. XĞ۰#Ŵ R3xP@?(.3E"T8fFDI̿?[[kQBH*D:/^ YNav9;i Q|qԮ ӳ6NAl<[PaMMlt;HPbKH(f&+WzTwϻew~ bCҮͽLtRNS#&MSW`lq scIDATc`  p0O_0w@heKW2 *jjgAr=MLRC;vσ [)jʫj+h[Y[A+#[z&L6cƒˡu*F8%{8V.Y0w KO O(6c¥K/_I%!f&)V^*l!`ecejV4g܅@VYfrɥj6qYzQSfB},\]M TDy!F,)0`,)k m.mm$%& Y &UKWm횅"l"X[jzֱIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/shapesAlignHCenter.png0000644000175000001440000000013212167565271023501 xustar000000000000000030 mtime=1373563577.357318997 30 atime=1389081083.287724392 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/shapesAlignHCenter.png0000644000175000001440000000021112167565271023225 0ustar00detlevusers00000000000000PNG  IHDRڄ PLTE=-tRNS@f.IDATc```0!(jR! G6 S"k"IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/erict-bwi.png0000644000175000001440000000013212167565271021657 xustar000000000000000030 mtime=1373563577.077318682 30 atime=1389081083.287724392 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/erict-bwi.png0000644000175000001440000000333612167565271021416 0ustar00detlevusers00000000000000PNG  IHDR00 1 sRGB pHYs  tIME  $_.bKGD̿bIDATXõXKG>Tu}͝Ǟk$v ٠ RV""ĂM !6ba2 0H@2}"+$f칣tI*}w؇N}O]?˦5hV%ʪ:Kg3Jԃ7 ΃rqY PEZpH XQ9w~c @ StbD`Y9mmOa & &ݢ[T 2C3=POck|nRbP`0- ,F߆۴H  -;!@,C>l!& N9@c\vMv3$pE-ہu!@2k//|4y! T 60P{oC/GS3 mdafH΃"LJؒ93hU >>GGw0JD&Pw]BEL5-ޚ[SL O0isvQ9LVKi 6AҴ?~,.79&yΟpQdyXFT+kwj6UC F&2&"WϿ^Sd+oIu0i'(@k76 h<7z7q7Ue氘NTU̎'AXM&CNMhbor rJEoflΟG8;ۡI/cRqELX! ܁Ĩ>ornc}^d-.נ 5si|~OF`8RsF][QURUfY7 %$lv#RSuhdm6@׷RF's,-35F)m$eN.k)5~~ϕ21P6o `gɸO&!Mu{K~SRs=^t Pnꑞ'ru䩲U! *wV(r jǺd~ᙤ.@CJ%"t _lI!1&R-ǁiѪfxA,xnt9@RRW.n"/jc(*IS 6V`l(̔ԩFM'AK4?>'ڏ(l욫 dyH;z|a8~H]mLe~RYHg$"t^j``m Pl?T') Ʈ۩Cėy+TskIDaMnG+ l^ tQcq tB-2e֓: i/A"kp\Q?;V )U"E=*^Gʔ _愼I}c{ӦS2<6mh3ݩ&Z`쬛@(*_+8TtKXs7b"?& #z/g չ=J4Zm$LeBԚ~zXϙ7Yt h?'Y  ?3Q}|rY|vmȇPIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/preferences-filehandling.png0000644000175000001440000000013212167565271024715 xustar000000000000000030 mtime=1373563577.246318872 30 atime=1389081083.287724392 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/preferences-filehandling.png0000644000175000001440000000207412167565271024452 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYsvv}ՂtEXtSoftwarewww.inkscape.org<yPLTE $ #HFG`^_  " " #""%"#%##&$%(&&)'(*((*()+))+**,*+.*+.,-/+,/..0..1./1//1/02./2012113/0300412422423544655734744755766845856877967988:78:89;89;::;:;<89<;;<;<=;<>;<><=>==?=>?>>@<=@?@A>?A?@BAAC?@DABDCCECDHFGIFGMIJMJKMKLOLMQOPSQRTPQVSTWTUWUVXVWYWXZWXZXY[YZ\Z[][\^\]_]^`^_a_`b`acabdbcecdgefvvvxxxzzz|||}}}ٳ tRNSoo]Kvm IDATuMQ>{]d&"*ID1^ xB1^RT21GgwL&|VGk S)ӏ΍'[Ii:;7֩jjm XU_4RY6π _10E1vQ=l 2{OP0{\$Fc$$ #-1t$ywwqq N8҆[z6(7xar3^q _C^ ODx˵׾?8G܍-Qe[ʣh XVyTnT_~723cߎ܇n\X:+<#K!ĥŸ,\:|H3 `Bio9DW 䎣8 / S(/C@g^.PŔ|nVƤuعQu>^By S7.)JIѸH ).%o_ Pu%H/n %9ujoG!&yO]*O+ذecӆ_7nC6npuAf " 8y =Z1E4G[fdLT77&"JeuÙ·kGܲ6IぞCq1.BU4gvY":p.ҒZhʍWR1zZx{@\6w E~Ǵhh`?.?*IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/fileProject.png0000644000175000001440000000013212167565271022240 xustar000000000000000030 mtime=1373563577.114318724 30 atime=1389081083.296724392 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/fileProject.png0000644000175000001440000000202312167565271021767 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYs B(xtEXtSoftwarewww.inkscape.org<@PLTE,,,000ffflllg"n1o3p9>>ACzCFzF{HJ}JLMMORRS[bk^_ek_effhowhikklqwllmnnnopqqqq{r|st}u~uv~vwwxxy{|||̀̂̂̅̎̎ҏ̏ғ̢̘̞̞̟̕tRNS!&M_`fjgH'IDATeJQF{75 !ؤ|;[7PAl-l|-,L,TB/q?ww-o1Bﲢ wWV؛7h?[݅+`;")VQ7CUeɣ8Uu=a$iK|| ǭN8Jl[FgfKQX^"-4Nf$IPzXlKIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/task_r.png0000644000175000001440000000013212167565271021255 xustar000000000000000030 mtime=1373563577.401319046 30 atime=1389081083.296724392 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/task_r.png0000644000175000001440000000132112167565271021004 0ustar00detlevusers00000000000000PNG  IHDR(-S pHYs:tIME LzdhPLTE:<22222222227777   V !#$R $&R#')*+\%-0,12.2.3/35/5/5$6066707 790:=3?4A6B6D7E7E%F9H&I9I1I'K:L+L(M)N

    X/ZBZC]>]?`3qK~S~Ԇӗٛ&tRNSWdkp|ǻ bKGDHIDATJP$M "KGq{6L*TE9ɉc 00/…dvnCBy" oA\ POp(1"nhxYq2~oM.Tixռ0_lGJ4,Ձ7Ϥ ]˟fjI;2 *IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/sceneHeightInc.png0000644000175000001440000000013212167565271022652 xustar000000000000000030 mtime=1373563577.345318983 30 atime=1389081083.296724392 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/sceneHeightInc.png0000644000175000001440000000135512167565271022410 0ustar00detlevusers00000000000000PNG  IHDRj pHYs  tIME0ytEXtCommentCreated with The GIMPd%nDPLTEб簰ѳ¡((45ݵEg1O/EtRNS #*+128:>@CDE]a詜bKGDkReIDAT1N@o~Ob#@? EQ8fO0cy[|xO(w#.{S/#Ϊ &CUp $iD38 -[:D2&$V% (TNeyo0q2;>d$3L EEzNJ!NIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/preferences-spellchecking.png0000644000175000001440000000013212167565271025104 xustar000000000000000030 mtime=1373563577.283318913 30 atime=1389081083.296724392 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/preferences-spellchecking.png0000644000175000001440000000211512167565271024635 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYsvv}ՂtEXtSoftwarewww.inkscape.org<PLTE@111+++++$ 33....+555 .1110.-DDD,,,,111,111CCC=== :::6-- +***3,.,,,:::#+'+--***222:::  -DDDDDD2228>9;;; ;;;w1 ,(((,,,, +,,AGC222/,2,',+,,#,,,++((( .::::::DDD((( CCC,,,, ,333 (((;;;;;;z2#,222;;; , , ,,,,,#,',((()))+,/,1112222,;;;DDDtRNS  !!""###$)+,.2455<=?@EHKNORTXXZZ[fjmtyz{{||}}~/-IDATu;Baמ]Mޒ{+{~6 _`-׾K`]ѕS~ڞ|sֶ B* P$]6fwD!V E.ΨR àX vB8?n0y$v4H,ZEGw|PWjb*%=+;#51.&ߛgo ƗdeܩIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/class.png0000644000175000001440000000013212167565270021076 xustar000000000000000030 mtime=1373563576.899318482 30 atime=1389081083.312724392 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/class.png0000644000175000001440000000046712167565270020637 0ustar00detlevusers00000000000000PNG  IHDRR pHYs  tIME(5tEXtCommentCreated with GIMPW!PLTE8r;bbQdddfmמϸCtRNS@fbKGD hVjIDATc```q`)-`GG (Rb 9"iiI@q1lht1Ʉv:t 2D vl[yxjCcIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/editPaste.png0000644000175000001440000000013212167565270021713 xustar000000000000000030 mtime=1373563576.971318563 30 atime=1389081083.312724392 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/editPaste.png0000644000175000001440000000165112167565270021450 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYsaa0UtEXtSoftwarewww.inkscape.org<PLTECCBklj{{{efcbcay|}dddsss$$#WWW~~~nnnsssooo㊊bbb888454999===>>>@@@FFFHHHJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^```aaabbbcccdddeeefffgggiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvxxxzzz{{{|||}}}u*tRNS!,-GKNX[\]]^rrh2$IDATas|v'1j *A -jʣhDeLfuN'/^{vOʳuwU+`0hD|Dttwu+?`0z<ݭ7;Ƿ8خK4ɒI/ZZfI&> 1!hؘ4Sf9qs?=>4-!)stG_ (>!(B @)]J)/RBUIMCj:mK#?W}ZնǧjcWл?SWSJIwЕR.^\um>5Sʥs}{Dx\vmZy鸮WHf>o릫 EJ8 {T׏ r^~r?p!mVYQF.37kVSc)=4Mf_ŋKe\n~L!_dWz!inм5l;,q.{ 9s]/] _,"t]dfv{@>Ej86mU(ּ4A9F)5B+k?WXe)hB)1拽I~ye#3H)fWbqo`g߿OS/Q֋, eJ :k,{^&[,b;UץX8Jý;IDsu:{v WCn(,ʉ +nƆ"Y^^f:5i|'֣t@*e&&£|i}~K+iRKOR)d Դ%$24Gϑ?}q:k Ͼ< 3$a^ьOYv;"$;9J&[Ķm =>j6_$$5_@ >Ϯ}Azҏ/Hס$t~ahvea_g$F;s˧񇋄3&ӽ-xĖ0|~.xsoйd Er]t6T*|MϞa|Cv+ʖoPȧ ˃EtS)2|U&>:& rOnG3Lt(a"5B=bLXƧD܃t>EJce0QlY]%PanuJɢ >G xQ4~oǶPJQ,*NF/}!\qZtI&gIM/ x1t|ڄ#xo0I#(c[h:׵ ?6F?b|d ݰmI,XE0](eGY+uBQi4ݏ hH4x7X8]pn4nBfչe~k?ez,U΃/0z~9n u]ʕ*SWx~R6KsE8KPPw)J)uS8vqVDͦG͵rtf97GCAIEBJQOS\Zbz|Lk`tRNS "$%%&)))+-444567899:>?@ABDDDEFIJJMOPPQRTXXZZ[\]]^aafghhhikprrssx{~g  IDATc``P8e ͝3{ } nӶ W.[ެ OnOcib` 3ezJ0 ;fyIJș kxZJJ+ H 3(;H+ٚ1 3G3b 2` 32a q CfNvSqbCJQ4PFHZrEMX}أ sܽgW';o\.,XThkV-Wؐ* L))(+N`ݬc/&IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/shell_r.png0000644000175000001440000000013212167565271021422 xustar000000000000000030 mtime=1373563577.364319004 30 atime=1389081083.319724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/shell_r.png0000644000175000001440000000260712167565271021161 0ustar00detlevusers00000000000000PNG  IHDRĴl; pHYs  tIME 1ȘXbKGDIDAT8ˍKl\g33gƗqLhLlj`4`* X`͎EX (bH ʢl "Ҥ& Q.v|M=9|4Mnz^|A0ZyŹ?P3A?(C/7go~׏x*W_Wg>=lwSVHC8k6R{}QG:Lai(TGjF޻&~!  aEWJILhM[qWocYG0)悳`Hr>L!t4, YuM M;5XgSTJDΧ6FHƂN@GCbP0I$Ƒ"s`Z묵hzCJc C!s`-heҫ{qW~I]Ú!6 cl2l+ߞ{)?z=ր0YX0!pTN`H'7_~o|qqrd< A3)NFM*T `aƗ`,O:Gox"Zt4wyph=VD F DH $:5mb-ḏ P˴lz+!dz,?N-N(5FkSp!:8y0ͩb <:I@G!U/VN0S%K6q:QbA':vUT:zV$H1jA=Tv&$YGԈ=)$ PơW"Ave0 (Q} lD t-A?4 ͎#NpJ`r!:CM]ڝ!D3ygRDywKֶyVn$Z܉fk }KuPʼnJ?Ħ[lk I'Wwowu\OµAݸͷŲsĝ 3hH5T0^zO9@V#xaavW;9.ƽRzd^}+WVo޼\|d?QvoNk^^ /7F˩D{[^)NKV~Hӯ8py777׿xS=21>ʺ""::--UU--qq))RR77++BBĭΠ--==AAYY\\EE<<++``ss5577==??^^@@ffpp??@@DDAABBDDVVwwFFHHJJMM\\NNYYeeddQQUU]]WWrr]]mm^^]]bbii¹ĢooŻż˳ҸVr|9[tRNS &((,<==BMbbdkqv e[bKGDÊhBQIDATc`8'߾ #8[ܽkvc0pk,t #8vIK7߸)$8&4$ r273֙( l1Ɂ:a}J@a넲铖Z1h5iV``ЎI,xrI𒬼@us69Kl5>FypCI.0h`Q) -XвȹAf 0`1göe>*BpQyyq2!Du  A=08F XT>k uӖ}AmF0(eEa\ȑ ]IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/configureViewProfiles.png0000644000175000001440000000013212167565270024311 xustar000000000000000030 mtime=1373563576.921318507 30 atime=1389081083.330724392 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/configureViewProfiles.png0000644000175000001440000000211612167565270024043 0ustar00detlevusers00000000000000PNG  IHDRj pHYs  tIME ,ftEXtCommentCreated with The GIMPd%nPLTEoooBBB)))aaakkk""" kkk888~~~hhhaaaJJJgggб簰ѳ˜((45ݵKv[tRNS #*2<A 5ofD? "^Db+m} u IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/fileLinguist.png0000644000175000001440000000013212167565271022430 xustar000000000000000030 mtime=1373563577.109318718 30 atime=1389081083.330724392 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/fileLinguist.png0000644000175000001440000000167112167565271022167 0ustar00detlevusers00000000000000PNG  IHDRj PLTE!!!999:D(:G=I@I*BVEK7L]%NiO]0OoP]4P|XC}X{`u8bTxd}*e}7f};ijfi4js`j:k&o:rKsCt!uvTv)x-z,z8|d|5|:}(~e~+%u^8/!(c26?-}t:'::4:<4*)5$7()49J*($''¯çʿ̷ɾ8 tRNS#&MS\l>z#CIDATmJP̽OPR)Zq?+ҵ/K5\ޗ}qѢQjkkn"IAY~s8g!HOlngM90,rJ|zHwxclݝ},.Cc@eOŕxOV&2: 'A @ OUDf)_p@QlwL:efrRU19gFGxQM C^~Y)I!o/W:9<42bo  K!#Ce`_|b͕@ X;Gvvzzak&&Y[U^XfejJs(a}v2/}DW鸅}ܱWҙis}团^ϼI֔FFzdL'OjooqJno1!Ρ妜šwϝ3SN gבDž(Ry^ZѡD1bog־e]<}:oEt6*765mW.Ϫ-JP³g94[hgN.~/G2}^W9QOUX1G"sg-5#ۗۇLOYo5TH<!G5,!KiL/뾯<|E>1FH\q HEH1lPP0uhϘ~(TJfρo,h4i$@$3egY_bzcy9Q{_: ?s}OwmY 4(EhSI:Z%ıZW9gg[? n݊ݘ9z=Vےh~.9-y$4ٷ_UI>QB`g)r_b1ڠEctI\3Q4#Raī&8$C5"r e:IUc+мA;LY߹΁iB}g(_eCe:Sh|Ot23*?NO?ۋ ):]=d ^GC%y`ܻ=Ml K+L[/p.eUdC3(`uk]IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/1downarrow.png0000644000175000001440000000013212167565270022074 xustar000000000000000030 mtime=1373563576.845318353 30 atime=1389081083.344724392 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/1downarrow.png0000644000175000001440000000151612167565270021631 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYsaa0UtEXtSoftwarewww.inkscape.org<PLTE@fUYUURcmLKrLQnNMVNRZainqovz~]Rm XZeb i4r4eeT }%w&/u/GGQQVVZZ]]qqViyfv m&&''')((**++--....//0{022335566::<<==@@AACCEEHHIILLOOSSWWWWZZ^^eeiimmxxzz||NJlyHtRNS ABLOrr~W2FIDATc` (&&.!)%-#'& u7wi*M43 stgD%$%[BLsj/ .PQí2??F6]4okNdGr9{Y:ߡ4VS%~eTwd v}=laJ8g(IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/preferences-printer.png0000644000175000001440000000013012167565271023752 xustar000000000000000028 mtime=1373563577.2713189 30 atime=1389081083.344724392 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/preferences-printer.png0000644000175000001440000000171612167565271023513 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYsaa0UtEXtSoftwarewww.inkscape.org<PLTEӱwwwDDDӈ䂂ŏҌЌwwx***115888???@@@AAALLLUUUVVWXXYaabbbdccdcceddefffiiijjjkkkmmmssstttuuuvvvQ:tRNS  &++557?@CGGMQZ`vt6#IDATRQs߾la( 3`?OhMaIe- wPA( X4@;_Az=SN~C.}li,l-\}ZmλE-Sޞ,U/lqg]˼gnᒯ526`ܒ^DjL'393p$3SRoZ X6dGqWnq7ut?mv_];22ܘNdd4qCP#2λ3{JÄx94IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/ericWeb.png0000644000175000001440000000013212167565271021352 xustar000000000000000030 mtime=1373563577.098318705 30 atime=1389081083.344724392 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/ericWeb.png0000644000175000001440000000250112167565271021102 0ustar00detlevusers00000000000000PNG  IHDRĴl;IDATۋTu;sf朹;VjE+("*0"z"*{^K%:ss~|h?Gep̱_p^K,ƪMVrzY(P&c  aQ)jbn+&Q*? :Ecef/ZQ@3D\FЕ"!iq(VACs:;b+DxJ0k1UO>ԨN,{"@Jm9ȗ*T0M/1,mɢF;a Ć"ܛ+8U]erm Ju ^FMo$X%;{DJj.#PK%U;_?3Pkek)N^QҶ>ɣx _km ºXGSJH#w1s0H< mv;k?߰S3߿ϥzW'2k溁 }9D,b'P޺r;;ߛvtBǺq2Sв0̥w pA[7CgywMl:' hЖ<[ol^6>t` 9MR*B; 0)$*H rE@R 0~,*ϏaKr7B(TTCd^;n+nKck< K LFS-YqkP caŖM3Pvk ?0jwQ[VNq2'ӹ 0 1|.@9s[#Ðpx!%tMB7g?͜oiiJ1bӳ2 @@7>MR30w"af+rۅ+,Ag@,TG7 #::YlΥlldPtdȔc,t.4 };RJ^my:3#ʸpO50LDST"{f..8CVİ&oz=]W,D~9ݒLh]l|3>^/$Ie*BNٔ*97-1陭FZQeIc6)~>Sg5pwDYQH0LEvPH~dӟ>0pٺ;_K\S#Y/ř .ky鳷F#^8_}I.4YWjͥK{4U=΋IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/multiProjectSaveAs.png0000644000175000001440000000013212167565271023556 xustar000000000000000030 mtime=1373563577.190318809 30 atime=1389081083.345724392 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/multiProjectSaveAs.png0000644000175000001440000000242712167565271023315 0ustar00detlevusers00000000000000PNG  IHDRĴl; pHYs  tIME ! btEXtCommentCreated with The GIMPd%nbKGD{IDAT]lSUkct J1Q1(cH0!JL| 1>Hɽ>( "^ 6`c+֮-mo!a/3wN644kYV (rbPwwC---/,]m˲⌣B\!I%k\cFՆop]rE*bBXRgw6@Bs미_[7?`Co}XՈcQ9j,aZ[[iߊ< @C"} S ˶ȑ# 47  7s*UJ>_&)!T*dB*\ U15p,Cv<22rPÜ?yoϏhu<8g>U nu+YaFRxGvqGxFgb˞A)d{^pÇ fyR s) oa=[J&+>>???@@@DDDGGGIIIOOOUUU^^^___aabccciijrrr}}}!.tRNS !$5vRJ~8:9\܎rR߃׳~rhP\ܥ>ޟ]o~@H]ʋH]JQTۺ:}+IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/2uparrow.png0000644000175000001440000000013112167565270021551 xustar000000000000000029 mtime=1373563576.86031844 30 atime=1389081083.345724392 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/2uparrow.png0000644000175000001440000000227412167565270021311 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYsaa0UtEXtSoftwarewww.inkscape.org<PLTEnPC@p{INj\LNSojNNXhDFHIKMOPR^TUVWXYNPZAzAOc7&  ^X Z W Z/o/ Z  ~ c'i' u mX j;u;;{;CCKKOOXXYY}}etxD~V f s P e  #"#####%j&%x%&'''((**,,,,--....0011223z344557u77799;;==??@@AABBCCDDFFGGIIIIKKLLMMNNOOOOQQRRSSUUUUVVXXZZ[[\\__bbddeegghhjjjjppppvvyyyy}}ƈiZtRNS%((55SX^bdfn2eۥ(IDATc` 01c\))*K]5x};/(eȮ5Q(߾#:ZCo]ا u Ean7ݰ45;ۃ"fykdUVW9qݿ}ĎsrjkK' llٶlVnE]\g;{ca,SVS Q7ܾgWU@ŏ^;g))YyE9Su wܹjĸx1Ο:q[wOoi\2r JʪZ¤ ohk;IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/nongroup.png0000644000175000001440000000013212167565271021641 xustar000000000000000030 mtime=1373563577.203318823 30 atime=1389081083.345724392 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/nongroup.png0000644000175000001440000000016512167565271021375 0ustar00detlevusers00000000000000PNG  IHDRalSPLTE@ӻ_tRNS@fIDATc`@,L ,ЀAj~(IIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/preferences-pyDebugger.png0000644000175000001440000000013212167565271024366 xustar000000000000000030 mtime=1373563577.275318904 30 atime=1389081083.351724392 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/preferences-pyDebugger.png0000644000175000001440000000240412167565271024120 0ustar00detlevusers00000000000000PNG  IHDRj pHYsaa0UtEXtSoftwarewww.inkscape.org<PLTËˁIJv222  ]%%CNcۺE  CQCA b +++m11RRRpo q2 '''- """((($& (( *RS'P G= 2(H5ZدR\sM  t]7/;/I͢Y]oمV lQmc@˘6!@x (1 -7! "5D)))...2%4445l5m5n8s9p{?|@++BvCyCFuG|IzM_~N32NOS44X33\aX acdlehYynrXisf>zh}g;}l}}}%-34ViVd ./**\?O&??Н;lM`&21?=Ѐr[V%%uo "MOFZbFFOQ`ipKLVY[g)ytRNS &),-778999M-a![Va0H6a ʢ, ayZQEkWTK>| pa&̓wt.5@ *g7asfiXIѷykGܾ}+8lo\bɺc| <nl]  jc cxE4B[}5Astq23/3@Ej;vG0- )oU<;ӕ&6[kOrpp4MS0/Nx/`@`_0~q\BQmmmt8L\{HL./],080 xYbfKK 9}4pH!Ci%W/GwbzrOO7colC{VdzP^ci`8+sAL-M53q-dRo.28͋O2Aьw^޶LgH,q~e8;1\or=$Q]ykr~DCHIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/wikipedia.png0000644000175000001440000000013212167565271021740 xustar000000000000000030 mtime=1373563577.473319127 30 atime=1389081083.351724392 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/wikipedia.png0000644000175000001440000000041412167565271021471 0ustar00detlevusers00000000000000PNG  IHDRj 3PLTE(((<:{~s~@|fs&z"tկNĈ@=BFwPS`0 iL 췭ǟ/}Xmշzi8](&d˜V *s%!.XVbW1wڪ:mhA-]3fKP"J^pVbY(L9E˩܅ Qmr R}ɠB@r,Gv5MYgoqUP[Qd0A X fJ?w,>b5敏-/isQ+l$bZ+O?Dpuؼ#呩ms}W#3Iswvk84gnx{ߦ3sfHs fAL`_f@Lc)txCT8Z[/7Mࠤf t*o%R1-A`Jqh^D( J LKGu:Oя% 5 RLdž/ ~ɩlcTI[LWe7UeAMA5$G^ώ_9!PIhZL$8[}jE~ ƲQ.lߕ8A7˺ ɟ*$5kH+ȑtu|[/,;صl5!Gd3sғGꆔmʀp䑎 ]=N)lpݧ/͡W *IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/exit.png0000644000175000001440000000013212167565271020743 xustar000000000000000030 mtime=1373563577.101318709 30 atime=1389081083.351724392 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/exit.png0000644000175000001440000000220712167565271020476 0ustar00detlevusers00000000000000PNG  IHDRĴl; pHYsϐtIME  ҡabKGDIDAT8˵]hUwvg ДDJڔt &1BT$m>XilEQ"R5>AJSc U$ZkլYv(B;3;wfFyfe[`&Šp2|v2 `'72" +P A"u0'IB΂o$d6/By dVKh|4ttw/KG?sBnK0 ҺO<_>#}UR\_h8 UJ+d_=X6(8^IN]1"}(~~ ֍O|vzB*^*tX6~_'ƥ/SYfuz҂Tjp}4Հ]ʼڅU3UӣشčHj,z~{hB6r,K)5%"'*q)!uF"ý9 VrlmJɆ(5?U-))Ѓ*IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/download.png0000644000175000001440000000013212167565270021600 xustar000000000000000030 mtime=1373563576.946318535 30 atime=1389081083.351724392 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/download.png0000644000175000001440000000175012167565270021335 0ustar00detlevusers00000000000000PNG  IHDRj pHYs cytIME N "PLTE2")P=uC~I M!P <&48k7.M : ?*#1_3a$,(,T $F3RVq-$ʈ0  "CVn 6%6d}9j #@0 ;=vEc8k9m?\#T)Y2`#:(?B|FJ M;e =e/\4_9l=v>u0MD>lJ $;?$<@$C%>D$?D$@G%AG%AH%CJ&DK&DL&EM&GO&IR&JT'KU'KV'LV'MV'NX'NX(OY(P\(R_(Yh*[i*]l+]m+^m*^m+_p+`q+aq+ar+bt,dv,dw,fx,fy,h{-i|,i|-i}-k-k-l.n.o.p.r.u/{0{12122333334344555555565656676777777778888888888989999899JXIDATc 3`U]\RawN wxjiC`)en2,\r>USev"FΎ: B07>ʶ8M6!~diF\ .4SQ1 "'0HKF kX +g̨feO,Tgi iq:eoob4 js:ֹsr65XguyărT{|b\E &@ܝ.ˠQ"¬NjtAC}#u4k\-U٘B;aAUͯl-.1cbV}D^S$Htn)Bz2Cl*K{:@ DFm+IJq*JKN!Q!R#SWY9]-_D`<`DabDcEeIeNeSf9f=gSgShMiSj-jKkImbnbo;obpYpcqVq/tWw_wSxqx0z>zrze~NtZUV‚h_erǃuh:kW͑sqsvpБ~|φφࢮږ^8tRNS $';EKS]cnx}YIDATc`PeljDehhiiֆD 4zM}ee'( Yʋrj %E ̪iUF<>L鱑ƼP\<BLKyeT$y#K&"DŽrvfhPtJRj0f`0*)6C0#IŹ@IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/vcsRevert.png0000644000175000001440000000013212167565271021755 xustar000000000000000030 mtime=1373563577.454319105 30 atime=1389081083.352724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/vcsRevert.png0000644000175000001440000000252312167565271021511 0ustar00detlevusers00000000000000PNG  IHDRĴl; pHYs  tIME 4uJtEXtCommentCreated with The GIMPd%nbKGDIDAT8ˍTKU=g:鄙3&ȌAHb6""ĕٺsƍ Q\z: 2 d !!IT0c>{o%&YHz{y>z:70-Բ,x<$IE1u ;Jxeeee",mY֧R o0,99(U/30}ר(zex9Nq PH08Y!90}DrY ċ3 x<_$d[a^5ƤR89xN}* p~g^́ l7;v33fRYSTf2X90mP&109ie]d$/l\`8ys d2M4֒'x#g7~ B2t JƈѦuH,c7$EgB>1Qt] йi(i]B}VfΒ"" uջ]D?0VsY POaTe؝!J&ː H(:]Sm|*o=X13&A#Jb ,ABP#$T:vMB+ W0ztp*15H~ %3tX6ϓ 2N]f(XgvWRT+~Ss2WD*I'շYZmL! [Z=kRGhi]ѿ7 Ҽ*6gI(0:^[d+3[x:R/J%l^@2;FL{;`lAy8vdit4~#=BH%X I(xfiB뇳lUEKab0$'1wu5avdbZn5pr̹wNCagrOCca WΔ[ <4pY?X%x%ZfWR[I-Ep=[e<.BkR"X >dOUzJЊ*fitwڱ)YJ)ѽ>?@XĂ#HV=(e|BWdgbږJ96nJK%l8B)Rb-X,QXnJ^[s#U.l(2w&c̎whJ30f\c~G8fZڄ63/6e`'N (B.y?={SL>}br/\hxʣe#c ~F3>sxq~N8=rh&%.cv,n3gԎ?>?sj_YO#aŶKRjdzzzرc3G8wc*=Ⳮ|㍹SVsl4G +=6xm%5[Q/zL]¡mjm [889*rAfqC.'ޟ.I Uܮ(t%Mk,g;Q;bϗ(K7>ݩ!^֯*-`W]q8ԝɎ'U2. "sJGo2#: Ѿ%M{TT=HikX vɷZ$Q&4' A{6U/A$1+|qc*^5j@ AZi-j(>6j =âPy+ Z8|ehj:15I=fg#V+<=>h$rVs_.c$8`w..7.- lłP2&b1tݼ.xǣq2Gn[Crss\h 钾KJL\7][Gh^7g48JXGAu~Pì49*nq<{\T̪h4sz?9DC/j0MI#U b0%A1Y ~!ɩ3A\v aB0,Ml"5+"Fay^XyMyjs\˄IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/erict-hc.png0000644000175000001440000000013212167565271021470 xustar000000000000000030 mtime=1373563577.087318693 30 atime=1389081083.355724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/erict-hc.png0000644000175000001440000000576012167565271021232 0ustar00detlevusers00000000000000PNG  IHDR00WsRGB pHYs  tIME  (7LbKGD pIDATh՚[ly{e^S$EYӒhVTǖԸ~0\-C8!AӇ jz MkIPCTKha, KShj\.;gg>PCDYt3<ΙkZ*?v@J>)$^zN|Eȟaw0+c26 R;|dImQip.-Tft|W/(T8b^/U8(L֪!uPCJOODžC"; `%.eΚ`-bELםN4.W?7ȕeM)T( R_f Px- qhI֠llps*3V;U|+GWG2<F"Xh &FE23dE]6&C@ 7xK/G#Ǫh4oP% r$QD-$Ch&aF$g_[ 49ώОL\gJKl)dA$~yar}="sθt"-I.&MOJ"[);ȼŗ>½%($ O?-a(L¬ЛR/֖fpעP Ϫ|Th#Dȼ[htÐ(Id&"oR CgYKشr\%;B;C b/LZ"ZU( ^ ɚ*/  ~mwtz#':x{+nJ]ֺqüaWJ.khR*n"޴IQy )יc/.ql˴Q_>U2PKyP'Bcu@D$N>X`5?{O"n 5 ~?6bYD$LZRb+h~B&I ey39LJZYC!e~_ca[ok$ƷS9S%g~zY% AC4%'K"6F-YjG!TK)'}mOOUF)sͽHR8̃İgՖe3qUv#`Z Tjԑ\%OȓAxe=tP esLj9%[1w#٤EH4-ҹ\do2&6 lzے4 +E UF`bq8y?8>@Ͼ\ѸP&RgIqL)iZiF `#4{+El={&4F000븼GA)e2XȠ\Rj|Ct#&,}IW?-A eq2l/i6Ed,G E )$襋 ɳ@efΗx)?TB:X&Eck}s~uƲla늛L!ϓsڐ/x^5#^u0*t0Ѽ\xd]KN| ??71ʕJm; .BĄ91]mܧ?ߏS(sd.UɤMKϜGpه{gKЊK+;SL/;>2?r‡9YaIӯ!V)fitb_(qHx3{GFCEZ>|T%>2@4B @n (nɀ!TKTF?Ngՠ]>-Wfi5 ˦*{i m/&w"F"RmE"A$ޟ#"ƙ9"fr}̪]-S%W1tE +8Q46,h6n6BEMJ섆/# ȳuLm' = L_c+ma,/iD RKmk 8gV>)vى0,l/N]Y TtIg1؍xy'K=|FeNl֩'<%!dXm6fv৻i̭%0F_HU"h;ȾP.&;}8oӦ-#6柞fe2:Q26nhq&wEZ^yTOjr &k*Wf xę'u9rm#OuT~d@ `yJni)~?8b d } Bъ$8%~FkYۛ 3y{3IdLNNE''FgtKFHh K@H؊EazԘK:k=J4o;1RpZŎIIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/erict-bw.png0000644000175000001440000000013212167565271021506 xustar000000000000000030 mtime=1373563577.081318686 30 atime=1389081083.355724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/erict-bw.png0000644000175000001440000000351312167565271021242 0ustar00detlevusers00000000000000PNG  IHDR00 1 sRGB pHYs  tIME "i+1bKGD̿IDATXõXKWn={=c$cDU$Dc@>f& $e'9D`8؞]ł3˪[G9_sB wCy,\G ,. Ċ2#PT baDu.7ţ?(..HyF|>{Mfh,M0 `)5q(Ԇ&TnOza_aZBuAhӿ8ߝ(4q~|Q`J#ĴU'+; f!@jm}Q+_ T(, `(E},q=~<`R+=)ϟKPb| | Ny8/: @P%DJ5ܝDuT3EM-͉ ""3bzILmʏA֋7F_%H4p )eî S5 t.-Uw$[^r dr{IRhx纸ps( 6{`%+iJ&I!xOȾA`֔:hZ[sh,҇ WRmIEiKrb c(bKz~0|2g7=\9:I$, ]yn妑37] \p̐zxi&j&tK9p,4IkuYь!ޣ#|Z`z>m>.g 4T2Qs0I$p`3fdՈEn~WmA2j<Z5UPÍ:Oz}Ej]ǹf0M8α~o=KV>,f豘S#MaOB [×ERDIK;*#UpD*\|$ NfŚ(Wͪ%ws3ue~))wF.ٴƮ&܀ _D3&Ui?-фPyvn o !>^Ae.XJ2G*UHSG 4"e/@{hj]6|=pGX:[kl_5C|"sL ۭ krԍ8fb w;U?|T@?G :ꗩu!Fxo 5k;{E_uSk܂hIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/fileMisc.png0000644000175000001440000000013212167565271021525 xustar000000000000000030 mtime=1373563577.110318719 30 atime=1389081083.355724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/fileMisc.png0000644000175000001440000000110512167565271021254 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYsvv}ՂtEXtSoftwarewww.inkscape.org<PLTE!!!999Rv "tRNS#&MS\l>z#IDATmANPCބ- )4iYmP|ƞgꀗyH=SlBXݰW8vl؎ǒp|/4'=;]@{ܚxuh5A$Zk] P~X}?؏"qr1\-rU]JVxl)Q=>?>? ! " !$!"&#$'%&(''*(),++.,-/./100322534756877:99?>?/..1/0212544656878;9:<;<>==DCDfffmmmnnnutt$"#ppprrrtttvvv#!!'&&(&&+*+,*+.,,0..1-.1./1012./2013/0312401444534634655745856877:78:99:9:;89>:;?<=A>?A@AB?@BACC@ADDDIFGJJKMJKOMNPMNPOPQQRROPRPQSPQUSTVTUXVWYWX[YZ][\^\]a_`cbbdbcfdegefuwy~ٳG]8tRNS2IDATuѽNQs^4nC쌕vXV>o`a?&H0 ޽3b"˙)f?chCkOErDzFFWzϭu1~p[k"k.V%;aZcm5|l-Ԧ9U δR=L9c5xTre*(9 v;(%L9 M~S)Z2.~+&p`(hυ>.h%M Us=XĪ`8湯d*>NA2<鏂x:0/2 !}iY!){_+%IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/fileSvg.png0000644000175000001440000000013212167565271021371 xustar000000000000000030 mtime=1373563577.130318741 30 atime=1389081083.356724392 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/fileSvg.png0000644000175000001440000000207212167565271021124 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYsaa0UtEXtSoftwarewww.inkscape.org<PLTE555LLLCCCIIIxxx{{{LLLPPPnnn̵eԵkҷrӺZкq׺xԼzֽhֽz־~ؿw}ÂpāĊr~|͢ϜѨ~ӫ`ԏԖԭշw;*tRNS0:IM\\]df~b]IDATjSa}I0C:((T:vvP,2{ ^n7l"XkLړ$$R$IHh+gݺ#s3W+ﻻy\*d5}x0jM>'R'˳qX粺i:%O{ੲzn6><94 Ά}l 0@a(J;/? 7wܫ-`-?W~o tI̝Oydy yS%Ǥ*A6C弘  2pqIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/preferences-colours.png0000644000175000001440000000013212167565271023757 xustar000000000000000030 mtime=1373563577.241318866 30 atime=1389081083.356724392 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/preferences-colours.png0000644000175000001440000000336412167565271023517 0ustar00detlevusers00000000000000PNG  IHDRĴl; pHYs7\7\ǤbKGDfIDAT8MklgǿΥ=-bådl\ݸ ps@^0,H$8]X/4AqKDHD66 A/PVsJi{n?7ϻ/!`0G$.7+Ůz~ޠFM [0+UlRA S d2s2iiZ0sf3YTcKXK,~^9߾h8y= Z>"| ~^LB~`ۑG_?YOLd!?priỈ]=˚opϊ P }IgL+wgÏU/%˲R,Od|"mqCoD}ni[hܪUZlB.[bQضEWӧOʪ J%86S[_M.JsٻN.`P)ӊ\> JsEE=] Z2l;  'a-"@r՞?l|OryU@"DP=u*,\@ 'wſ􎗟p" |`ɉYBa?ٻN˩Nb1Fd|eV,>m 5ĵP; oCP;@$3'+vcƲ`U Np8h ۀ㛒pH ̚ j뻟W+ю5lfe˨` ]J$Jpi%|˭)MO8zg+&Z~=OgZ)O5.yc>>:v?u?iė`Hr-W+~k⬼?,*7MS3+!C'{PF0XBRO-?o6V(6k.хd0a8FDBv!eK 6v8U75 '`ER/-zԤ[F?oy` DaXJ@&uD'܉>(7(Zyl1C6rBQfk<_h ë!Ir0Q=}?JH ja__5c#+r^ # *塭M,TS__[IkbB5bT;Ƕۖ詬n۴q^#ߝaۍPށ;u}׮7 |^L4r&=ܸs{x޹Q="PCvRM&yFq5n]Ӭ%HK?qvXZythüюDf--0bq4[nN&hYcc3'R |fv2K\ h"zTXtSoftwarex+//.NN,H/J6XS\IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/pluginRepository.png0000644000175000001440000000013212167565271023370 xustar000000000000000030 mtime=1373563577.230318854 30 atime=1389081083.356724392 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/pluginRepository.png0000644000175000001440000000251212167565271023122 0ustar00detlevusers00000000000000PNG  IHDRĴl; pHYs  tIME.6tEXtCommentCreated with The GIMPd%nbKGDIDAT8˝KlUEsι^^)X "SDeatBB]&&.LL F&n_ 1Fi[@Zn)}Ι3sfsqr|L27sK'{OFWUDޝ(ւ˟;3/~3M/Tm&*iyn5pYUeEOyGϱ|j;?wl`1ak`̙©L[xŕ8*ܚ jCgB9:|{`sR 0tDS&IYeY|͡A((B93U1 Bk_spYEW8Z'ne88&@,:\]'@ Ɇwn{lc٨K55+BꘫV(2V 9ȼ~cY9 a&TLS5 pa̅Ӳb zxkI3{&0@u6JSm8VC{A.\]`(+]U $Ξl`xd ~3P6NJJ(0y*LGG` p-4[h(zέ}{F2kH l\]])xvXN (fU6b4]>߷mkr㇢v}#HgV{yYtUBe_#hh j '^p½pke;;&+lR"A)WdAkPuY9.c١إDÏE`w&lDa E4K- E8pnz@kD C, )Ƴ`\ҟ7G f':JZ {ض=팡3pW{ NXU$ksϋtIUŻa,}9y?{U$ q9+GCZĠSr3ZKsY=^_gTLyGΕB!tӲ t3pW{x))k'IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/diffFiles.png0000644000175000001440000000013112167565270021663 xustar000000000000000029 mtime=1373563576.94231853 30 atime=1389081083.356724392 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/diffFiles.png0000644000175000001440000000160312167565270021416 0ustar00detlevusers00000000000000PNG  IHDR(-S"PLTE DED{yjfggcghWhMahlajobkq_kr\jt]lz^pTevcsSsBex[{Jf|h~Q|9wËYIҴȘբ˟Ԯlgu#z$m(s*{+m.z1V2j4Xu4667:=H:

    rAD!GaGH)JgN7R5STU7VTVXTX=Y8[{_L_C`c\cJddsd{d|ewWf1ghNkmvkkTlSlVmxnVoXrr~rrCsudwdx_ynz^zK{j{e|l|m|h|q~gQրun눻x牤vr׉|ΟϫҪꂖыԢϐɔˤشݧߥ֪שݫʭźm(tRNS*9FSm{FYUIDATc```V`c@r[n^"n\qúY!2sOI\b$JA8cI_EH`-O[/r %NB I١a ոª(Cܐ6~-vyV| Y3'$eXfOHKs 11 ͉rp7 Dե:ziihs]$m)%a(#3 A /^-IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/home.png0000644000175000001440000000013212167565271020722 xustar000000000000000030 mtime=1373563577.160318775 30 atime=1389081083.356724392 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/home.png0000644000175000001440000000164712167565271020464 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYsvv}ՂtEXtSoftwarewww.inkscape.org<PLTE5<>FJJ.4628848:6<<6<>8>>;=?;;=;>@>UWVVYX9<;:=<).0-23.34/5604416747749:5996986<==;7AEDI`LKGN&NQNX+XVPYa[[V[\\[]\]^^]d]j^``ccccdceffeggfffghhgkih3hhbijflolqsqxysxzuy{q}u>y|DFIw?MMN}DRHJSb PRY[^ahgK x0tRNS ||#vvIDATc` LE%l jJrڮ6R5u>ZUH’ezM-a n h + [x7AY LX4"L3 vA0HXJu$0YX (,ه"fGMIMMbfDA˚ߗ35/*;%77wJRII攢ܢ)PḾ¶¾⾢8p”)iy`FT8쀔l0#* rns' vrr 7;k|L̬l\<|<ܜl,L r$n IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/empty.png0000644000175000001440000000013212167565270021127 xustar000000000000000030 mtime=1373563576.982318575 30 atime=1389081083.356724392 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/empty.png0000644000175000001440000000014012167565270020654 0ustar00detlevusers00000000000000PNG  IHDR%=m"PLTEz=tRNS@f IDATc 0 HIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/vcsStatus.png0000644000175000001440000000013212167565271021771 xustar000000000000000030 mtime=1373563577.456319108 30 atime=1389081083.361724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/vcsStatus.png0000644000175000001440000000247412167565271021532 0ustar00detlevusers00000000000000PNG  IHDRĴl; pHYs  tIME $jtEXtCommentCreated with The GIMPd%nbKGDIDAT8ˍUmh[e~ͽMI6e] ZVZUaO LAW_pbсLT2յciM$Mrqy|ysyagD bx\.F–eVqj>e2 ?rkkk山1W43== Co^F<  t]WŸOHf_1q/aχBw#ȠSȚ@LTD}`~kJeټG ӴA(KҮAeZV_1 y'0R{%-M[[[[{=wJFeǩT$nbrQzb.鴭 :0YQ#YP)J!Ûg( fmm<s˭XP1`UtF?w+%RܒfdOL-IGG d76ݥՆ>F=&k}~)@Bgbb-$eE҂L?W箲 ~.tq-ě}XL^32.:ˊ Ԑn|,?&Ԑ@/ܨgtF ηrD RH \h V]|2YT58'cd)KWr4alFTC]P|\`.;HBRQ 6";0ްۣ©ܑԼf9s/r,(K7Mb1~b-λD..WNSSS᫔Ok쎎)MB{ #}% "԰+"OW'/5e z|_v. 8X޷x3?Q zW`Yoyұ}(9EZwePi3-berl9X/5IvtIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/watchpoints.png0000644000175000001440000000013212167565271022335 xustar000000000000000030 mtime=1373563577.468319121 30 atime=1389081083.361724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/watchpoints.png0000644000175000001440000000152312167565271022070 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYsaa0UtEXtSoftwarewww.inkscape.org<ePLTEwwwwwwwwwwww$$$%%%'''(((***,,,999;;;GGGHHHVVVXXX^^^___cccpppsss{{{}}}~~~K-tRNS  ))00VVVuuvvxxzz'IDATMNP]_?vZ&1:a߮f:돌H X b GhI˻l _-y3?OlUnoNC̾>Oם0Br\ L' leť2W?S?TCQx?QMNcT AHB2TS!"w؜څ6x6v_ױAZ;iIib`iGNN@u;Y֛-ji* {fiaOFX/IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/fileLinguist2.png0000644000175000001440000000013212167565271022512 xustar000000000000000030 mtime=1373563577.107318716 30 atime=1389081083.361724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/fileLinguist2.png0000644000175000001440000000164112167565271022246 0ustar00detlevusers00000000000000PNG  IHDRj pHYs  tIME 2zPLTE!!!999W)i/|8:G'}GaI(co=!G!`$S$M%]5%c&B']'D(D2(W(Q(e(X(M)d)b*J3*~B*Q*Y*g+k,D-R-T/k0^>2d4^A4I4T5a5o5p6b6h7K=7}N7i8vM8`8d9M:R:U:h:q;}Q;p;r;u=s?_KYL[WC}`tibTxdfjgrCwT|d~fu_u}ì³̾K tRNS#&MS\l>z#bKGDq'/IDATmJ@ϙLRhh 7|_CPp/ʥNE.*F4fJ)]9 o,Vw ($d ) A! U5i!8y+X5hsH-Moa΃xB…۴iۄ2t!rE]b}L9%i'/J>VS>֊ MٚTXkr͵\޽Ja){s}(RVxK IrϷfN&^f 4bIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/sceneSize.png0000644000175000001440000000013212167565271021722 xustar000000000000000030 mtime=1373563577.346318984 30 atime=1389081083.361724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/sceneSize.png0000644000175000001440000000140112167565271021450 0ustar00detlevusers00000000000000PNG  IHDRj pHYs  tIME0 vI$tEXtCommentCreated with The GIMPd%nDPLTEб簰ѳ¡((45ݵEg1O/EtRNS #*+128:>@CDE]a詜bKGDkReIDAT1N@o~Ob#@!q((H0g ix>|f,6:ؿg8vң܌4pdOzIT3:xO害jhۥsPh$PD#V* *pk%q44&NAHD1i<3Mf2ft3Y5H21TYToQTIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/designer4.png0000644000175000001440000000013212167565270021655 xustar000000000000000030 mtime=1373563576.940318528 30 atime=1389081083.368724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/designer4.png0000644000175000001440000000255012167565270021411 0ustar00detlevusers00000000000000PNG  IHDRĴl;/IDATmlpw])w+R-햒4McX%Wsh7dn̞\HFdF|axQݔZfLj WG˕w宽e!&>b˶H#nܨ.I#Rofbb$Rlpt]Y*xK}T+i99.#ѱ\xt8BHJݢlٔ,ʪw*OY&!DPtlD )|6FFK]&UyVWԃ%ã% 4Sخ &k"&Zt+/sܜ7{\B,Hs]?^gyܻsPB(ڛ4~3f_ !4Mz1 V~LMߨI !P(L&###ngg'(PJ D"p8bM]]]{jǎ; x8!iC`0:xPJa&JSNѨVcccɓ'_m;z\)"@UӴiV07N<IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/ericWeb32.png0000644000175000001440000000013212167565271021517 xustar000000000000000030 mtime=1373563577.096318703 30 atime=1389081083.368724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/ericWeb32.png0000644000175000001440000000505212167565271021253 0ustar00detlevusers00000000000000PNG  IHDR szz IDAT[\Aww.s;{Mn'[N5 U!FP$^  T**h!JB[5'Nez;3;3g SOW^yEwDGϺ:t vͮ?uj{ˊ]n2cT/ʟs3q$žL'&?}! CKVm)p2K/ >ګ*&n}s;yďH!Dox}{VLxMi㈩rx7&).|ʸ㣿ne?q练V]]tjW.^58;'Ў@GRȩ*@z/1&z_7?{E+Eq <=?p5 =D?1ݿ' g)QSeVmzuv=l}O?P +$G/P+;NO87!"zcGzFsܥl GLGp zS85 ¤◿ЩOyu".5vNQ% R RJz98+_2[-&MKɯ:c]qƹ&祣ăJ%IZ`q}u&݄+k}]l_Y.3D=V:wOd_ZK]5{==1=Mۮ3RI&~`:㳨d;d{ceN4E) .o .M7kS|.mD0>|,#T\&+gϜ<4#҂O{\_^]T MYtt ͹CR\('.uC6b޿P-ZĩVpLL_(C6膓X^M}vsV)R bG׺ .~S.0%[B*XU uoLt%7Xc@}m@xzזXRC\)4 Sϭ'I󌽽>.ҿ]Bc,O-tc2QҰ PƏn圿q&itgۇ%  2@D^Z*b&!݀8W*Ko_t @ hO~̨?!K] jykuB~w&@ GWIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/namedreference.png0000644000175000001440000000013212167565271022735 xustar000000000000000030 mtime=1373563577.197318817 30 atime=1389081083.368724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/namedreference.png0000644000175000001440000000025412167565271022470 0ustar00detlevusers00000000000000PNG  IHDR#PLTE@-KtRNS@fBIDATc` [0(冂e@&[x9f ` &0 s!20Alc"ḌeOIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/transformResize.png0000644000175000001440000000013212167565271023167 xustar000000000000000030 mtime=1373563577.411319057 30 atime=1389081083.369724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/transformResize.png0000644000175000001440000000236712167565271022731 0ustar00detlevusers00000000000000PNG  IHDRj sRGB pHYs cytIME 3PLTENNNbfluvvtrt[[\^^_````aacddkabsɻstt`bb`deUVVhhhйїʼ̡ϴtqnhkggbabbdEJK`gefe k,24,-35-45-.39;56;=7;?A;@?CGHLNPOjZYZ]^`a^defcghikgiklmjlnpqwvu{{~||ÿ1etRNS  --/3379>??EENNbcgkqXrbKGDVIDATc`@r*l Zz ,LȢaIΊ H2uQb(ړe:st8We @pH(6XT"$c|s<`Ғ @^ׯ^piArܹuUݓ焨ypͥzJ*ՁXRk/X uHGwm[rQWY%̱`g߹yj# H/ܻcFӏU#Tsl0iG@`Pۺ.HQJ \T@>\8//?04„9DD"$ u C(Vp(De;zIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/unittestRestart.png0000644000175000001440000000013112167565271023215 xustar000000000000000029 mtime=1373563577.42231907 30 atime=1389081083.369724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/unittestRestart.png0000644000175000001440000000247412167565271022757 0ustar00detlevusers00000000000000PNG  IHDRĴl; pHYs  tIME.;tEXtCommentCreated with The GIMPd%nbKGDIDATIh\em2K&$$iZMmXEE(x(^EA=A(e6ͧLG ndf@e8,&c/' `pW$JF: 6AN Y <4 b +ƙT/,ԁiu[u$%p(}=6-q'JD)'J*'kv(!AjFF0FV0Jf678=k%yN`L=A8slA׿t}ԹAGďqZtG 1^P=XNGw(d `71x.Ӣ-GWOx)gsNXNa[)RB|!;=etAAQ,<2ɜ͹/}.ϣ]sR#Q(z_,2L[cC-L\3Э02$LE|en48cS0Kps#0^ŵ٫@3=YMPuT*Rkj5t֐J'|Ucj<^%6w6lL17;H CKv ]E7H-^Vn:sFU҆zBdci[:15*Vϝ諝,Gv\ ffER7S {7qc+ԀBCpi1jxRmDa]Ⱥ3 Bp9G?JJY(m0 $N}?%[\QW06% - pEe=dEZc/ jA:n{vS= &Zɼ х|X!ǀ[KOQHʹn/@ aJ(d$IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/spellchecking.png0000644000175000001440000000013212167565271022605 xustar000000000000000030 mtime=1373563577.367319008 30 atime=1389081083.369724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/spellchecking.png0000644000175000001440000000211512167565271022336 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYsvv}ՂtEXtSoftwarewww.inkscape.org<PLTE@111+++++$ 33....+555 .1110.-DDD,,,,111,111CCC=== :::6-- +***3,.,,,:::#+'+--***222:::  -DDDDDD2228>9;;; ;;;w1 ,(((,,,, +,,AGC222/,2,',+,,#,,,++((( .::::::DDD((( CCC,,,, ,333 (((;;;;;;z2#,222;;; , , ,,,,,#,',((()))+,/,1112222,;;;DDDtRNS  !!""###$)+,.2455<=?@EHKNORTXXZZ[fjmtyz{{||}}~/-IDATu;Baמ]Mޒ{+{~6 _`-׾K`]ѕS~ڞ|sֶ B* P$]6fwD!V E.ΨR àX vB8?n0y$v4H,ZEGw|PWjb*%=+;#51.&ߛgo ƗdeܩIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/stepOver.png0000644000175000001440000000013212167565271021601 xustar000000000000000030 mtime=1373563577.374319016 30 atime=1389081083.369724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/stepOver.png0000644000175000001440000000027312167565271021335 0ustar00detlevusers00000000000000PNG  IHDR#'PLTE@/`?O`s$.72tRNSv8AIDATcTG(”```8=YA)I p72]Ve2 Djq̪IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/method.png0000644000175000001440000000013212167565271021252 xustar000000000000000030 mtime=1373563577.174318791 30 atime=1389081083.369724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/method.png0000644000175000001440000000067412167565271021013 0ustar00detlevusers00000000000000PNG  IHDR(-S pHYs  tIME tEXtCommentCreated with GIMPWPLTE     ddd.£/¤1̺MͺKоOпOҰ4fg׻?jmmnUXV96= }iIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/tCBreak.png0000644000175000001440000000013212167565271021305 xustar000000000000000030 mtime=1373563577.403319048 30 atime=1389081083.369724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/tCBreak.png0000644000175000001440000000116712167565271021044 0ustar00detlevusers00000000000000PNG  IHDR(-S pHYs+tIME /..!PLTEVB()-.FIKNST' !"NPQ2367:;<B$%')PSTXY[]^`bdegikmprtvz|<##''$$ON   !!!"""#$&&&----0'!6 888>>>?AAAD E##GGGGIIIN( RD9RRRTTTUUUX(YVT]]]`?%dH0fbagGGgREic`l4ooopVFtG!w8xDxxx{]C|A ~H:`488b9rKLKW=FDLKTTJEKF hgLDSS``WV][^]qpddQQZZhhOO䍋䎌~}惂jhaa蜚蠞衠^]ZYZZ0KutRNS #'++,,,,--.11134BCJYffbKGDkjhIDATc`5`V0f`5S`F L6ad4IΌ 2I6Vx{U4fJ1AD V.O^.|C6R-6ww7׮ٿe}HT#gr_nj&y30'ݰqqSiM7nXhΠ:n6_ [/Ƞ0uɂYU}!`3{;[l>4kw9{^|ܥf)sHz^u'rdV._jS*QB>wܻz@,Nx֮.c=}r:NU\$*pƳ%P‘ߺmIۖFsʵcwC1EDHrk2Aכ7IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/drawRectangle.png0000644000175000001440000000013212167565270022553 xustar000000000000000030 mtime=1373563576.958318548 30 atime=1389081083.369724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/drawRectangle.png0000644000175000001440000000072312167565270022307 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYsaa0UtEXtSoftwarewww.inkscape.org<PLTEŜҐtRNS:IDAT1N@Yr`& CRBH߽_]|~3QbÎI,ViG9\do znqYn<95n^ږ4<J *qk\+;[Mfxn8/߾X?LOROIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/task.png0000644000175000001440000000013212167565271020734 xustar000000000000000030 mtime=1373563577.393319037 30 atime=1389081083.370724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/task.png0000644000175000001440000000134612167565271020472 0ustar00detlevusers00000000000000PNG  IHDR(-SsBITO pHYs:tEXtSoftwarewww.inkscape.org<hPLTE:<22222222227777   V !#$R $&R#')*+\%-0,12.2.3/35/5/5$6066707 790:=3?4A6B6D7E7E%F9H&I9I1I'K:L+L(M)N

    X/ZBZC]>]?`3qK~S~Ԇӗٛ&tRNSWdkp|ǻ IDATE.Q߽sf&2!EDM}G`ς=BIͽsѠ}!F0Rq؜eB16s+VeZZ7z/\5DaI=4CS]}!]w.?ֱH7;Gb v~/\\MWsK۟Zm̙`ԫ_hϳxLg U_Vi hsIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/preferences-mail_generic.png0000644000175000001440000000013212167565271024707 xustar000000000000000030 mtime=1373563577.263318891 30 atime=1389081083.370724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/preferences-mail_generic.png0000644000175000001440000000103612167565271024441 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYsvv}ՂtEXtSoftwarewww.inkscape.org<PLTEӤֳ֭ͥͫ޹սݾ tRNS /0=>?IDATm0ݽKE:0P XA`!8N,q"_qCzZ|r.]>湾ZgVv1,@p'ӝJ[cYJ|iʌApPJ JCa&yKy1m[ȱA$?B`!+71zIYIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/pluginUninstall.png0000644000175000001440000000013212167565271023162 xustar000000000000000030 mtime=1373563577.231318855 30 atime=1389081083.370724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/pluginUninstall.png0000644000175000001440000000256612167565271022725 0ustar00detlevusers00000000000000PNG  IHDRĴl; pHYs  tIME- ztEXtCommentCreated with The GIMPd%nbKGDIDAT8˝[lTU}Ι\:tP-Z^AMD$55h|1H(> H0`Pb0>^aJVg ^=" b{6CMS^t.30׷ ^5OmƓ#nu<,ꜽ:fu29ڵ2~ \t]nM_$@8uSH ʁkO ً{! G.qh&!}c60P0s\xTv(h: \fkwv?0 ZtpҸ8dIT@I@*o]7?)\5I1j9J3|ƝGegCABCP1@ƒʐn{dI{FKmd!$x GY4puRcB@fxfǹa?=Ϲ,<erV="F~9K{j^/^L,GX4.mtqL332*86\\N*m/0؟B#?1i?!ًd%G%lN〾0s}րT}vK&TSm}$*G %d.DHtT 3C&\ Q8B$b9n`0Mcge {|u 5zvxpPtljP;Q?K *?@wgC3:vڼZb/ͳK]>^yp ?`2d,R@Ej .Oz;C`l׏뺁|:DccH$渦!#Jagg1c`nnX71{Z)E\Z.._ˇ(JJw۶a&ߏn|ddD{tM 樔D&@ib-lll (lVӃE: `z6>c׷b tqLԣѨJY(W2Z*id&tZQT(;?7p|Onjs/#NTf `xxXA"˿|'YTk~ҤRkv,S "H L,3}oo~0doZ]RCvll XXXPdd6R3Ms>-RsHP099qoEIҊĕNZ(RbQ-(^Avoj>bF=/U4HX6KA ǙEbIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/forward.png0000644000175000001440000000013212167565271021436 xustar000000000000000030 mtime=1373563577.140318753 30 atime=1389081083.370724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/forward.png0000644000175000001440000000211112167565271021163 0ustar00detlevusers00000000000000PNG  IHDRj pHYs cytIME /yPLTE3a4d9kq-Y2`7_>g"<[!G}Do - 6 > $F %G$A'I-U4a4b.S*;/C4^5K:n5\6ZT#;{{ٵsF2aڰyM/3erHصm¬KW^lѼP_=QGbVEcG_WK]YvzRtHP3"5 #%>Lܪ3&dHCTp?}bsea/],֝o,ˈymkgj׎NSytQθp}I, @.X[1IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/unhighlight.png0000644000175000001440000000013212167565271022304 xustar000000000000000030 mtime=1373563577.415319062 30 atime=1389081083.370724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/unhighlight.png0000644000175000001440000000063512167565271022042 0ustar00detlevusers00000000000000PNG  IHDRl" pHYs  PLTE@ @/`?O`0_BsW+?l<_$$&C`'S.0x17l7_̌^ bDUA!*8UDuʮ7++X)b͊Q,cx p>u7-A#!z%8%z%z!xũ'[[6]>C)OξBDPD@DAEc^* 4qQ˦8ƼH_r.bbTNYiwN9nO6#B7NLtbѬ}*萙מRJGit}AEra˜Xb8?4}f}4_C7d !8^cr05,f0fHY؛8>3a@TN,䲻*뎴/Ա0<3Qh䲫 6 Fz:w+ffD"Tfpe^ 7oo<)L'l^J*H;UT^&03 Պ|N4:>TJbV+&LJqϪm[qdg~A=8Y,gm1Fm]Gut]8&*=9'FD `#SJa4*i`^ϙUǃuOG#c|v>Œ9SbV#PE/89-JoRQ֛{Wg\>pvO׼ƛ\v1􃩈འ1L;&l8qKR2\yt!"9991.c*8DvLѨc2PU&Td'mj.l8<?7v=׋s[zv 1.]zo{ߢjl6'*{b 6-9gsi ]בs[}ߥZ,K)9=m,R:{9#" OD lIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/preferences-project.png0000644000175000001440000000013212167565271023737 xustar000000000000000030 mtime=1373563577.272318901 30 atime=1389081083.371724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/preferences-project.png0000644000175000001440000000202312167565271023466 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYs B(xtEXtSoftwarewww.inkscape.org<@PLTE,,,000ffflllg"n1o3p9>>ACzCFzF{HJ}JLMMORRS[bk^_ek_effhowhikklqwllmnnnopqqqq{r|st}u~uv~vwwxxy{|||̀̂̂̅̎̎ҏ̏ғ̢̘̞̞̟̕tRNS!&M_`fjgH'IDATeJQF{75 !ؤ|;[7PAl-l|-,L,TB/q?ww-o1Bﲢ wWV؛7h?[݅+`;")VQ7CUeɣ8Uu=a$iK|| ǭN8Jl[FgfKQX^"-4Nf$IPzXlKIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/vcsLogin.png0000644000175000001440000000013112167565271021555 xustar000000000000000029 mtime=1373563577.44031909 30 atime=1389081083.371724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/vcsLogin.png0000644000175000001440000000242312167565271021311 0ustar00detlevusers00000000000000PNG  IHDRĴl; pHYs  tIME*3tEXtCommentCreated with The GIMPd%nbKGDwIDAT8}OLcUƿ--a&0 3:"̬X7!&q#KC g1fƘ%c%@y߹kb%wsg}}ݟNCX,f9H$^닅au]8`04ZV-JDV+ B J^b0+X'y1*呲=,dGJmVU71V`nЛ,$yb_Tz+dK,[~?99yNқ(KJEzUxUyp B! Lx~zxu 7a*0)vQ CFB]QV0qFla - m(JX*=|`:666pݻkj1"유lWƆx)-%oNՄĹsC\"fff0;;)TkUeD=== .JKylݻJW^<l6+W;u54j#T@DiAG8̄ӯc``@Y\\T9[װ,RtL0lD&A"aZ8Z1 z :S /!R)vN@<+juV=RI"iEGOҖ>o_92$7 :@dzC@Mvkuu{Om^;cب® EJB;o;*z;TW}xsϞ_t@qS\c7] dc B{إߦ^ۅ%@ný*Vǂ c}\jbmE&)=&>ܜIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/notcoveredNext.png0000644000175000001440000000013212167565271023001 xustar000000000000000030 mtime=1373563577.207318828 30 atime=1389081083.371724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/notcoveredNext.png0000644000175000001440000000227712167565271022543 0ustar00detlevusers00000000000000PNG  IHDRĴl; pHYs  tIME;5VʸtEXtCommentCreated with The GIMPd%nbKGD#IDATKlTU5J(TBBGBY jTPBZ8gΘvb~H)B @+R %:h4:҈@ D-6Meͤf51Kq }_a? ie,t&B4Q="Gt:YH#51k- )Δ(z!?I!%DZ!2IH%V-_SױpdLHƟ|$;QKRI8"Lz>f 0*u7Kk9a&>VmWju| 8T Z۝WjAh,-֛>׸&`A q(.vSޘRL TCMXP_NyKݩEY*g̪;>;]$&@ ;A h21pi6XAd38(%&SObO!<I:*DUy:\DKĸ"`J f(=)-i?~G^e:]o=1TJ( eJ9_G IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/projectNew.png0000644000175000001440000000013212167565271022112 xustar000000000000000030 mtime=1373563577.305318938 30 atime=1389081083.371724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/projectNew.png0000644000175000001440000000250412167565271021645 0ustar00detlevusers00000000000000PNG  IHDRj pHYs  tIME &(G|otEXtCommentCreated with The GIMPd%nPLTE'''***666888+++]]]___EEEEEEwwwYYYzzzXXXYYYZZZ[[[\\\]]]^^^dddJJJ  )$$&',t,//001y12224577::<=CCCCDDGKLoLLQSATVVYZV[\A^```Yaccjikmo{pirYtttu{y}z{{|~့ՃՃ݃݃ՊȌȐᑵ咣Քᕥәș֚ךܚȞ㠹ؠءڢդݥܥަާߧߨը֨ܯޯܴصܻھܾؿ2tRNS+,-Z\^``kkkkkkkmpww}xbKGDmJrIDATUM/Qs!;aAҰ aaK`'H$+DHJ$$6>BmS3sBGyWyzʞWo3@qČɟJ~SK2~P)Y f9dn7Ky獦I6z-_ؤ ~W {zXpjJ̆}^XҮ5հ?=^%T;|A*܏'[mtDG'O.^>j^H^M jq^D% Hp)@mo*.H6{/W` % HDΌ],R__!*7ETPg?IKE絒#`JKat8, q#v:IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/colorPicker.png0000644000175000001440000000013212167565270022245 xustar000000000000000030 mtime=1373563576.908318492 30 atime=1389081083.371724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/colorPicker.png0000644000175000001440000000205012167565270021774 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYsvv}ՂtEXtSoftwarewww.inkscape.org<PLTE******PPQ@W;De?kSvvwkSZQ?n:hz_bSiydbREv@cS奥t^aR٩Dm<ȃ~hc{bjeVݴkM}D쯯p[ً`X򲲵v^PtHljZOKIAn=Dx@h`>m:MHYGeLfLlYmZtrt^w_}dfedfxjikonqqo{wzȂ͂ЈΥאޘmR`ktRNS "(()-.11357:<=>>?@AABDGGNRXehijks}VIDATc`z, .} ]=Nh ("MuVr!I-%¶iEey5Ѧ(.IN-(5fdDf^PՖSh,x̸]F$a^El̲6aD ?ds^x܅KE1^ru>#jk*1DN[a^#Y52 OyjH2Õ >2-#C3>5t4Te%%ĄXB"*IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/uiPreviewer.png0000644000175000001440000000013212167565271022300 xustar000000000000000030 mtime=1373563577.414319061 30 atime=1389081083.371724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/uiPreviewer.png0000644000175000001440000000225512167565271022036 0ustar00detlevusers00000000000000PNG  IHDRj pHYs  tIMEڴSvtEXtCommentCreated with The GIMPd%nPLTEб簰ѳ297A8CCG4H]OX3]w'`bZghrKh0n%r.rBsttvE?vvx%~)~R!r0/>$o1({97Gesdcdi`SaJPTWGmˇ]Ȏ@\a((MoD?ZWCYڙܜDZ45ʬfύ&·Ւ'rnݵޏ-+JEtRNS #*+128:>@CDE]a詜bKGDw w8+IDATJQ9s5DYTH"lDOP^m{;I ӡ=Mm>V*-VS))$96*0K;63fl5rf7Əh5 JV1#QxI][x01#=lwDF B%]~lZC cFf[{gq$r.?HjXk6 oMپY;jCB`RJ:Pr9DJ:I@%QDL^B)b'. K[JEIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/notcovered.png0000644000175000001440000000013112167565271022141 xustar000000000000000029 mtime=1373563577.20931883 30 atime=1389081083.379724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/notcovered.png0000644000175000001440000000320712167565271021676 0ustar00detlevusers00000000000000PNG  IHDROc#" pHYs7\7\Ǥ vpAg\ƭbKGD XIDATHǭiPgǟݕ%b@1D. dDr eD;CSDKDPJE* rTAFhe;)Bv7ҙ~p7f^VrqYƹݳVV=8R$Nh,,RS)ԟ *&ñ0$ ;T+>xkV y/KU<1 C=0T\L$iu͡؆FlγѾKbt` zewwsS[QA>A voUJZZZ 9bNq%N>];lm!;;!yJ|&y&?3:3{7L< "N${~`ωm]m&>zrP)$r[)]XQ,˫gW+E{ m+=曘u:w_S!>WZX :śǛGY~ 5d<#uf}] mվ̮&EE"ؘ̙XhJNJ"nm1n1eoE"WMN/o}R%T ՑdR{If *Y^]. ]r`ыE/פYxC8bwIx>o> \,],G2űXbo}dy3kE\YO0sWN <ڝP33 ]N:'ݨj#{NYN'A]ĵZf-[ؽccK ,aeaeuvAk@po~AyA9Г1(WW 2p.gn . &,>.Z0}5*PŢ5,6ẚ!ѼZ(r@I!|S$r"S#!ӗ.֧cA -m%e|_jjГd8r @PP HKC+"H_ud9\baթémrxn`z2~ * OOѦۦͦM'C?ďDv#06,s23^nD ])$N|nN2kg69Og8X{"zTXtSoftwarex+//.NN,H/J6XS\IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/close.png0000644000175000001440000000013112167565270021075 xustar000000000000000029 mtime=1373563576.90631849 30 atime=1389081083.379724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/close.png0000644000175000001440000000234312167565270020632 0ustar00detlevusers00000000000000PNG  IHDRĴl; pHYs B(xtIME 6 ibKGDpIDATkl]u{oncMaέK`D]؈b#@4|mA'_1&Ġ feH\@ lmvmoo1e,$\:@{bp|XVSVly$M=]]m>p@QlwL:efrRU19gFGxQM C^~Y)I!o/W:9<42bo  K!#Ce`_|b͕@ X;Gvvzzak&&Y[U^XfejJs(a}v2/}DW鸅}ܱWҙis}团^ϼI֔FFzdL'OjooqJno1!Ρ妜šwϝ3SN gבDž(Ry^ZѡD1bog־e]<}:oEt6*765mW.Ϫ-JP³g94[hgN.~/G2}^W9QOUX1G"sg-5#ۗۇLOYo5TH<!G5,!KiL/뾯<|E>1FH\q HEH1lPP0uhϘ~(TJfρo,h4i$@$3egY_bzcy9Q{_: ?s}OwmY 4(EhSI:Z%ıZW9gg[? n݊ݘ9z=Vےh~.9-y$4ٷ_UI>QB`g)r_b1ڠEctI\3Q4#Raī&8$C5"r e:IUc+мA;LY߹΁iB}g(_eCe:Sh|Ot23*?NO?ۋ ):]=d ^GC%y`ܻ=Ml K+L[/p.eUdC3(`uk]IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/openQM.png0000644000175000001440000000013212167565271021171 xustar000000000000000030 mtime=1373563577.215318837 30 atime=1389081083.379724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/openQM.png0000644000175000001440000000246712167565271020734 0ustar00detlevusers00000000000000PNG  IHDRj pHYsvv}ՂtEXtSoftwarewww.inkscape.org<PLTEdxSezr ... 111sqhh[ZjNLcY~AW@ԃZZ[[[\]^7zcf6zil_rs-r-s/tLsabef)d)g*g+iq+m,q,r-nb/t65u9K>NAjBQG\Ha!M_ NQkPxP*Q_5Uf1Um$VNbXYs9YZ\p4]q8^hY_`cx5dghwh0hiiikkmpp7pqFq(rrrs,tuxyYyyoyyz9{z{{{{*|}}}}~~'䀰񂡫+@;솩І鉶.7ʍ捷ꍻ4鏹쐸;⑺9<蔾~/-藿옼蘿#/6+0,"(+_KHtRNS $(;Eq!T9xjAG`+ѫH23` ppm9gdҗ22s5Izl:93 7~rf&vp&3BR 3"Zs4_XRI-z}agsxCb>b~wj?~OP ɇn{;Z3^/亜gwիW7[]_?t]M{vq c 擤~e(7Z$I?|nM>rYYKx,V*τyw jIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/coverageProject.png0000644000175000001440000000013212167565270023113 xustar000000000000000030 mtime=1373563576.927318513 30 atime=1389081083.379724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/coverageProject.png0000644000175000001440000000210112167565270022637 0ustar00detlevusers00000000000000PNG  IHDRĴl; pHYs  tIME"'(tEXtCommentCreated with The GIMPd%nbKGDIDAT8˭]hUs6wS"1 R b#   kF$  6(*"X^$M Fnvfv~&ƤFf3 6u/p^\[[[˿mWWW+`m nhh4=%MqYimm=944tv~meYnʶjBPL&;;;/jooꀫ[` ġ,>q <,a`]N/:I% U.;W}*jjq A R`)P}$b6@ .8;N VKhkPkl0ݝ3}QE x4y`%U,ДB;{>Om_Y: C܄|%_$4?lctEPVwB2 Tdf(ttG_$oz|1uģŕeX:P%Kx4&B_Ɩz # & xϙKSV}?/)!}exĸ]g5G 8!CR:91ɻ)/rIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/linguist4.png0000644000175000001440000000013112167565271021713 xustar000000000000000030 mtime=1373563577.165318781 29 atime=1389081083.38072439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/linguist4.png0000644000175000001440000000270312167565271021450 0ustar00detlevusers00000000000000PNG  IHDRĴl;IDAT8ˍ[l\3gezxv8zcq!nlANUZ$ZL/UU/5TH$N+hėIc{/^3_R#{oapaUU[QUU[u]չ{5MߤBOL؈*0"Zv=1k4m,Wp,7M +`fbll,=[_U Ū0h˴:~GՆPXuWz:+]N1sI^ټmی*Ba䱾"T:t]>{tF6#nPHsZV.[ϷHlwPT*D4U.%zZj*$ppI86Tȁ,#zHn&O !tF~j lQt>ΟL"$TE`x_ G(BU1K1伅 -;vnC!|>U׌FaP !01 !{Cb tr,Jg0;K3 GN C6gj5.R@6\;~kU-0@jvpmJyɓh4oP__esmrQqH6$Y+. `fy)-^^;̾BSbt]X t?nf(uL8(Y&F Lz" | 듓KH&Up4u7]-ԪIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/addBookmark.png0000644000175000001440000000013112167565270022206 xustar000000000000000030 mtime=1373563576.864318442 29 atime=1389081083.38072439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/addBookmark.png0000644000175000001440000000231712167565270021744 0ustar00detlevusers00000000000000PNG  IHDRĴl;sBIT|d pHYsbb<tEXtSoftwarewww.inkscape.org<LIDAT8ˍ[lEg{w腂b j"AFK@#`bh'"FLhԠ>Q^F1  ) `-+{v|$IΜ?9sDk͝ wSNe"VV;6*P>-;Ge+pwu[k G/=VyvXa͹/Գq#~?kDE̙3}@ִ6|sYFTF虺Pzµd'cuU\EX6QZƑo ͩ,x`8yW.22C,E4(֊hx,Pv[{ ,kPpB 7hEoer2 1r7bk[L_]U֌lc:G`B 8STħOE^SÑH+Q@t 8ؽ͎F^"$. &PaPu,!điu@&0 z]K+0L@Ggо*ϺS VlYZ 5tS-}'39 YFAa(  W֚6SW8S`M)8W@@U\v>r8ێE*ͻg{MvOzN߰)q78P1Ř :􋭯NWfUu+cTD "HT)|CC?rr7"b+W(w0 Zԙ|?w2tK*2TH B#z.̰)Pط˔B'g̩k;/11I0dRg QWq@`TTHMct3pXbD6kvp!7Lf(Dn!K眱>Ozx욲ѩ*%9|M%6iD 5'8kT>N#BgeAeJT, (3/$ IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/poslookbehind.png0000644000175000001440000000013112167565271022631 xustar000000000000000030 mtime=1373563577.233318857 29 atime=1389081083.38072439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/poslookbehind.png0000644000175000001440000000030012167565271022355 0ustar00detlevusers00000000000000PNG  IHDR#*PLTE EitRNS@fDIDATc` ((pL+e {E ݻHR4)!(7l\$p0*c2IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/shell.png0000644000175000001440000000013112167565271021100 xustar000000000000000030 mtime=1373563577.362319002 29 atime=1389081083.38072439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/shell.png0000644000175000001440000000246412167565271020641 0ustar00detlevusers00000000000000PNG  IHDRĴl;IDAT8˵o]Ws}nB8T V @͖ ,` bAHAH(UUC;OopXTlo9?޷g+|ޓt Y NiLf0bA ZkTМ#JA~˾gk?y Z23kVitf Y2!$BGKPJHt.r+Xahc<'O<Ǘ>w7=8S&: <1M~-]n:0 F={RLUW~ʔ_OcsV;MZ7 N&/ΡDV[ [ ?EU$BeSSI2ұ(bֵ%A,l7]3&qATpnsiHEZ {ڳo}?ǟ͇(d`Ĉ(S}CۀxO<+ Qd¹K矚[wO~4]k!$N8D}GԂdC|\YS<Re:\4?;Oz m@88}ǨD-PCT"GGpzvzB:{տlT W*EP}A)"!C܅e; zHc Q;!M? V'oYGC{EN>X<_Y॥TI$gfF;t's'G]gΖ^62}o2询sV)^*I͝! CC1I:N/ET( ˟;X07,nlP$Ay *"rQ=wLsSW7wںֵOgX':5ޥ0ϒCbvQ̓ΐ8!_MٵW˭kV^{W>n95H㰳6]oxir& /c}C({բ}|69_`B:4Z; <8b/bY8!;&Bz/UsݣփA@<΃tN~YӧgV\Z,i6νV?kOw^jǹPљQcl޸~=^q2MMR)`\<|o,SWsX4w{u{ʕ.(Q(зzIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/grid.png0000644000175000001440000000013112167565271020716 xustar000000000000000030 mtime=1373563577.148318762 29 atime=1389081083.38072439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/grid.png0000644000175000001440000000016012167565271020446 0ustar00detlevusers00000000000000PNG  IHDRzxPLTEgtRNS@fIDATc`>>AAAD GGGIIIK( N( RD9RRRTTTUUUX(YVT]]]_<"`-`?%dH0fbagREic`l4ooopVFtG!w8xDxxx{]C|A |eP`4b9c:rKyUgFtRNS #'.3CYfaڴ+IDATR@ 躘b94%/t}TdSK.7}0T٧2( ik< Ȱ&0ڠg]!s099ca F]lagRd+92Im7>^H6=V}YZzy3Շ7~:ҙ5=S{c5a&MT2w+!.qy,\l _飏" `)e 嶈pp2[`2 PHy eͣ *~W~29ۅIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/reload.png0000644000175000001440000000013212167565271021240 xustar000000000000000030 mtime=1373563577.334318971 30 atime=1389081083.381724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/reload.png0000644000175000001440000000241312167565271020772 0ustar00detlevusers00000000000000PNG  IHDRĴl;sBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<IDAT8˵klUvwm]۪D@Zn+mR+I4 H@h-%* j⇆Ƈ#(4Ę߻k¦|L3KGߨ# i$;h-}Y euer:U0)&+(bxcby9Ga7v{ދ1ށ5]#^xV疈Ib5qj[Jfr_~ȳw|qh#-,K%O:}{}3}Y;Ӌ(-EXbJ(qC--hlv ܀ (Bg٨E($!6*&D7w#x<!0@rS2/ lBR _Ҭ`:g3 z#*6WRRQ_>N"sMDV)'7rN3N8&* ;\{#/k B wx?oY4`/>*H;Iwq4zTSed"wWnp?M/2<<AuR4BVfffdzzZ )\N666dvv6<'fskkKNOOe||\<\'y9>>C988EEZCh6t B <99G&''u7pGTWj\^^N.@lV<Њ"[J>44Ȕ"2XLg@pQH˥d'ev ̂E, :+B"$35cHqi1*u ' v$7W`f__ ꪓQ^ZU%M [l&$Ye~Kɨt!S(NkR+I܀]ŐJ"sEnd J#|眼t4ôhl|`8,ksp_ i(ql%%ilNP3) FYHV^[*|A_Z z?d2uXGݟti߃J߾WԤ}=sWE$]@f@ Kty%%a&1^^^.웳F;d̨ a a$tCZZ0YWkgg166v PfQ8TE<-WZG/iHBm qR0OhllOm_~V Jt# :XMC+#<9o0 :F{ >Nr!8cIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/vcsCommit.png0000644000175000001440000000013212167565271021736 xustar000000000000000030 mtime=1373563577.432319081 30 atime=1389081083.381724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/vcsCommit.png0000644000175000001440000000244412167565271021474 0ustar00detlevusers00000000000000PNG  IHDRĴl; pHYs  tIMEtEXtCommentCreated with The GIMPd%nbKGDIDAT8˕UKL\Uk0mi7ZmM%F&2]7ĕ 5XcH,! MiikJV*awW=ϙ{9cqqQfx<~uݗTX,mlZ}e^{rtxxxK.᫥Ri{oo111"?\H&$ސvFZU`a ٧քHX,~!>5szz:bhD"qdQ̚@BJ 1-l6Ǥe)I9/KF$0@.(`K}tzu ՛ZUr ,"8HDi /K].`r,4.HL@ܚm͌d200YGP谼W 7K:kk[yJ~@DŽM-Ef`?Ig0!I.JOq o(gjIpVBGn _E-Wt8 ~Fhʳ ^&(ЂG upkm&s_Ucxt`/VqH c3Ajo-ɢ\m4LVh ?xN9)7$,3ԗ#(ck~ 1l6}tߣaaGu"cJ4:X\-Ͷauڭvgn 0F#iw͊xw4;%`Za)߄SCH &`\ֱ4m)J,Q2C}}}g3pkm ؅GW[X"'5r;-ҩR]wCtWJWOJhlܳgOx?Ɔ5\KbNA2 `ӰG^X?LzTݚk_i/Ȧ#tB"v) vpFS I ZƭgO'Wov̠!SSSl7|{UwDikakݎeLZ]['slQfaDꃇw_IIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/cookie.png0000644000175000001440000000013212167565270021242 xustar000000000000000030 mtime=1373563576.925318511 30 atime=1389081083.381724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/cookie.png0000644000175000001440000000210112167565270020766 0ustar00detlevusers00000000000000PNG  IHDRĴl;IDAT8˭MhTW73hhLǯ  4B#]$ZKv+q'EUk-i%h+mih,606:3I&L|yhI.,9GH-Í& |pYMo1vO#fh;L )UPXvI+wlfc:~/^<~*"'sm=ַ8o:5d+3<.-Kj?׋Weѩ; 9{bP8pL%_$BI%_?ThJl'lPY^ZZcf6<0N%˛>bqv}d0ǹ-ҩǘ&|Z~yL:naIF[Im8̹w̜+;"D_F8Zwh hݵ#)5WA(Ł`lI퍭2łùtyp>UwVU NuuQj92=]v5LVk$I5Ӎ'?-eȪZD832鿯Չ_)7d`fXeߧ13CȅP@ 췱~3{Y}O rwz?zccAsqc|Ӌ asN% j*Osz=ݙ?x_k+RZdcS`$0_N(DBt)Me@G|ѣ>=o993xS'N! SᅝY(v7]6V3 fVѨ4Vxn=s3gG)U zز&!3[`f.ו>~)sB(zɡ9:r-y.L85 ۺ#^lIc!uxdp@>.ƌS]=<{^,BZ[OIΧMMU#@ f`-`ĕUXP̌f3,=,$XW1]ʭ<::\3XǻtRH&@Xmi 八3GzIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/vcsRepoBrowser.png0000644000175000001440000000013212167565271022757 xustar000000000000000030 mtime=1373563577.450319101 30 atime=1389081083.382724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/vcsRepoBrowser.png0000644000175000001440000000201512167565271022507 0ustar00detlevusers00000000000000PNG  IHDRj pHYs  tIME"~tEXtCommentCreated with The GIMPd%nPLTEб簰ѳœ((45ݵ4&iEtRNS #*+128:>@CDE]a詜bKGDg(IDATJa{oDY APpkWhoB!R&3t>vh>彗|r8١ZϿG6iu }o9Û{ "DzmHv|R )wuȵyw} D0&=+|"S4:Am޷cU}nBY'e޸ R0%﻾ ,;$Q3X^n @)K:%c%O""K63$ y> -yxrIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/zoomTo.png0000644000175000001440000000013212167565271021261 xustar000000000000000030 mtime=1373563577.483319138 30 atime=1389081083.382724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/zoomTo.png0000644000175000001440000000246612167565271021023 0ustar00detlevusers00000000000000PNG  IHDRj pHYs cytIME (3>>vvv__`111}~~777555333011EEEzz{UUV~|VVWtwsmqjqfvcc]rrrVUVWTQ]TLLKJLkkkIyFEDxyzAD@Aٯ=[<Ѐ8^iryyAǂ~2|}}~g~~~Q/k߇{{{*dߕvvvg>>???BBB)))%%%%%%''',,,///222666;;;>>>AAAǿ$$$''',,,---...///00/0001101111212212222323323334434445545556656767767777878878888989989:9::9:;9:;:;;:<<;<<<<=;==<=><=>==?=>?<>?=????@>?A?@A?@A@AB@ABABCABCBCDBDECDFCEEDEFDEGDFFEFGEFHEFHFGHFGIFHIFHIGHJGIJHIKHJKHKLILMJLMKMNLNOMOQNPROSSQSTRTVRUVSUWTVXUWYUY[WZ\X_`^|||~~~@5tRNS #012Ybcefgimmmm~lDX IDAT]MnAUW 2aHl&,(a1d޽tl D1L x]J+Jmn{,mY%䇷Tٔi~T@~l?2Z\~ߍd_w)%LsܴJ_NNJ.L<*?)q&S9S-;U3CRʔ(R*3%@ۍӴ̓8s|xsut®_cCKqǾ@ &8xbW/`Lz+5cig ´0 B.X &jhԂ nHPƐA Ac44:v:mw=hi(TB/'99s~'Rp \^fs2CYON^86occ4IĈ0Wg$[qr eOSe#SqP4]O813D42Aр+uf"S9F\VsdϺC}ɩ*+ehsK׆4|L]CAwGrᇟ훺6&zq"j*!|xH<%WE4t6t$..#eAK)ԦQ,B9+D.)3Xlc %(@0ƥmj`Sj)-k$h10)y$HHq_3((<`?]Tp E@R6M#[qM5kOZ('w_ܫD#J! .] FDγVEܩ޵ !RbȜmY+ gYlyH/JT2tpMݳ]ۚ(*%Y*t=޺12C㙡l8oTxVV_;aрjDTdAo*RmϮ\۩@#5~Pir@y4 TTmך [: @f({8ωac zXɕ,Bޖo4X@uxc;Bp PtcYUr,Y|zĶ\l ILf/tv`T5r!՞{ܙ8PB>;kau {Gùs~ʹY}~KtD]HoF6yژ7YuCOjfJ))4q+&}RH9!ͬ5 tW{VKk03%b恈v >wnukgnψ1  to(ú hz}|_OOۻ9oK4 y΋ G!I#vIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/class_protected.png0000644000175000001440000000013212167565270023147 xustar000000000000000030 mtime=1373563576.901318484 30 atime=1389081083.392724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/class_protected.png0000644000175000001440000000073512167565270022706 0ustar00detlevusers00000000000000PNG  IHDR(-S pHYs  tIME&8? tEXtCommentCreated with GIMPWPLTE  hhhppp8r:aa;bbQ^^^cccdddffmךϨ۹8 tRNS#ADIO 0?bKGD37|^IDATU DŒha{Μ15cuu">BΡT@+)ON"繍V"&7YûrulY.oƮ'f/JNP#yTXJfNAN`J&74Px,333ӓmx`AīoDŽp&^U-m]m5dQ\An{IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/breakpointToggle.png0000644000175000001440000000013112167565270023270 xustar000000000000000030 mtime=1373563576.894318476 29 atime=1389081083.40072439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/breakpointToggle.png0000644000175000001440000000252112167565270023023 0ustar00detlevusers00000000000000PNG  IHDRj pHYs  tIME 5SftEXtCommentCreated with The GIMPd%nPLTE"-=@3#9#:4[ 9trrec^`$;"3M,Ho;]{e|,De2Y.Hn--JJeen  ww~ Njz u dq I %k t 2!2!=,@0j 0Mw=Fij pw8Z@^DJmLpM5PMcOmOnQuR\~V{WkX}Y}Zy[z\~\]~_}aaag';ghhhi~ijmnqq|}H`~~!/ʚ ! '%xzxa^a_srzxՈՊUS  |z 30rp nm}|ۃcbܛ}|݉XVqp{zߞsq}|᫪≈⌋ㆅ㈇@=omzy~{傀収圜宭KI[Y慄按搐暚炀瑑皚~qp}|銉锔麺fcꉈꍌꐏꖕꗗꙙꝝꢡlj룣쁀웛젠줤us힞簾着ﳳx)4AtRNS .9:;GHIJR{0bKGDj6mIDATnP[;?$M(R5JA!&&.nk;@jҤv?>ЁLTڞga|MLچ `UϏoW~v#ͳ4IY}}ainU&v(PAJ~^']PDxSI:F4;}8 `rz2 F8Nf@sl1[(dkC3[ۅ54TszpEyů\ՕipI#OE\]sdA(~ JW֑IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/preferences-highlighter-association.png0000644000175000001440000000013112167565271027100 xustar000000000000000030 mtime=1373563577.255318882 29 atime=1389081083.40072439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/preferences-highlighter-association.png0000644000175000001440000000230712167565271026635 0ustar00detlevusers00000000000000PNG  IHDRj pHYs^tIME }PLTE~~~zzzvvvvvvhhh3tA׻ ??KNN!X&H(e*H,i2X3Q3i4`8b:l>Q@lDlFhGrLQ1bRUYZq^v_eweejy~ۇΉf␛Ô䕮ӖȡݥϨ㩷תܳU2qєӔjُލ瘝諫鏏햛x6s564Ш3o36os:?x|&jHtRNS 0255;;?BGIPz{|?[bKGDMIDATc```(!',"eZyVL(EQI P5r QՂs RYYffDHJlhS-/LX/"c֝{?pP&}0:/y „u.Y6sMo@spaw^=3~'pŹ@tsO~cGpłowzxYהSg޸yL㗮ݺ}%\x;X|yÄyV͜7a303ˮnnY1wlSf^ھvY&ROݶc0jDɜy|1d702SBVF& 4qTtIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/LICENSE.oxygen0000644000175000001440000000007311016011250021554 xustar000000000000000029 atime=1389081083.40072439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/LICENSE.oxygen0000644000175000001440000000377511016011250021316 0ustar00detlevusers00000000000000The Oxygen Icon Theme Copyright (C) 2007 David Vignoni Copyright (C) 2007 Johann Ollivier Lapeyre Copyright (C) 2007 Kenneth Wimer Copyright (C) 2007 Nuno Fernades Pinheiro Copyright (C) 2007 Riccardo Iaconelli Copyright (C) 2007 David Miller and others 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 3 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, see . Clarification: The GNU Lesser General Public License or LGPL is written for software libraries in the first place. We expressly want the LGPL to be valid for this artwork library too. KDE Oxygen theme icons is a special kind of software library, it is an artwork library, it's elements can be used in a Graphical User Interface, or GUI. Source code, for this library means: - where they exist, SVG; - otherwise, if applicable, the multi-layered formats xcf or psd, or otherwise png. The LGPL in some sections obliges you to make the files carry notices. With images this is in some cases impossible or hardly useful. With this library a notice is placed at a prominent place in the directory containing the elements. You may follow this practice. The exception in section 5 of the GNU Lesser General Public License covers the use of elements of this art library in a GUI. kde-artists [at] kde.org eric4-4.5.18/eric/icons/default/PaxHeaders.8617/wordboundary.png0000644000175000001440000000013012167565271022507 xustar000000000000000029 mtime=1373563577.47631913 29 atime=1389081083.40072439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/wordboundary.png0000644000175000001440000000021212167565271022236 0ustar00detlevusers00000000000000PNG  IHDR& PLTE;ftRNS@f,IDATc`  hb`eu"E $+)**$1 4ͻIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/unittest.png0000644000175000001440000000013112167565271021650 xustar000000000000000030 mtime=1373563577.417319064 29 atime=1389081083.40172439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/unittest.png0000644000175000001440000000213612167565271021405 0ustar00detlevusers00000000000000PNG  IHDRĴl; pHYs  tIME,w)ޝtEXtCommentCreated with The GIMPd%nbKGDIDAT8Kku/m&skikۤJ/Ѫ`zEhE]7u(PpJ? VBZhLI&3;9.Bg}ΏkO z*˧,keٴ*J묗ZG `{^[4IRob74󒭣If4a ǰP:]PM6]YG )GL'EA _{q!Ο<\͕E~BPs;Yܴfe:f{ BBȷ;WpHzA;l:PSj&;UZMe1t/מ'g@BDфC0Fb&$ eU3&+g#JVb"0h<% DŽ@e|g5z(Z͋@z6B3ҏ.vۮQViI1Jrcx8qh=IŸďB1 ?R(ME@G 0㞰M<<($Qgbn5Ñ.K 51a+C@'H4PՀ Zw8Иgk=7 uL\7;;@Јpc>!,MB>uX\X 0[A;Jlc)\rLK`{\Fѩ;6#'5;!c͉3Њfk__tk8w/~`9;NX"-=HQXēқVv܁ȝ~K>8g>Z2(X#apԀ$Z/ֆVE}};7#^]c߼ݸq:`K" *4'^߶nTӑ =%"ہ X>^>pu-op /%r֓YLMK?~#%`t>ѷ4IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/taskNext.png0000644000175000001440000000013112167565271021572 xustar000000000000000030 mtime=1373563577.392319036 29 atime=1389081083.40172439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/taskNext.png0000644000175000001440000000232512167565271021327 0ustar00detlevusers00000000000000PNG  IHDRĴl; pHYs  tIME6&tEXtCommentCreated with The GIMPd%nbKGD9IDAT8˕]lUwNwKtB)mP!Q(@$JU$V䅈}5&Gb"Z ABwS>6mۯ̽>limIν=ss.̍m1v?r흶kf9c^%[;5ΰ ^?Ծ"wv {y״=XnkuW#s+LmqG9A XAPXW]ኖDi kK2lnMƳNG;C464lVUUa6_nßL=`)LgpppCAIJe8J6VȢaEC,=>h7W'Hp<ONIbF88KZhfe`j:Fv47:>yh3陘DjYz"11,&ҕ≦R{:0``y0Ґ)LH$RI+0HQ[QC ]L*ĸ8o8Ca,$=_sǣ|s* ACH>f>>kc|4o$>qGMX+zSxy6zS8y#^{ ]mHmFNᄗy,Rz˝̺u{P-Z Z "$"fNoP Zk"\B0"C>lk; 10fOj6CCC NRKk^uǽMݿ{bbgaa!3IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/pluginInstall.png0000644000175000001440000000013112167565271022616 xustar000000000000000030 mtime=1373563577.226318849 29 atime=1389081083.40172439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/pluginInstall.png0000644000175000001440000000244512167565271022356 0ustar00detlevusers00000000000000PNG  IHDRĴl; pHYs  tIME,][tEXtCommentCreated with The GIMPd%nbKGDIDAT8˝MlUwfP>bEb 1D 1 ea&&,D7M%u!MV%)֖7ܙ{-maA?Ι;g`荁-{FrAʽtDo\Î?C]ݤA޹Wْ,^G,gI\HI6Ul0@~~OI",Є6h=u)}a}epKks!]Gl?!Đ?{Ǟ;yĆ=CM^Wsa\y ˜`<F|fckU_ŸW SWύ|ڃP`(</ʀ_r9|86kT2*.L/J}"ajxҁP<d./; #` T !$J৿~9b\t$?8?5c5UDH#*۷!ӊ8|I]Uko"e`_ǎu?mTÈ&n+n-y\nkBBE pЄ/\kb{ow: P=_P<²L[dwYx]: & pF-l Q-%ޕ7 A Jk|I}AD3s!@vh5L^}-\kΕ:[B$T-3S÷w9eN hSB0|~?cR<zIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/showPrograms.png0000644000175000001440000000013112167565271022464 xustar000000000000000030 mtime=1373563577.366319007 29 atime=1389081083.40172439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/showPrograms.png0000644000175000001440000000260512167565271022222 0ustar00detlevusers00000000000000PNG  IHDRĴl;sBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<IDAT8ˍ{LSW65Kd(aZ&B@TS1Af8:A20`iyZ,k  ȣ*R(!l!'߽zgQѣڛY 3*Jdx@ߌ::=3{HLdB޽z]Ab6S0:Ҡ|%0g K -0=գF}}~1`2Q077o&!"Zd]UU߁>kq|}644fD衽ʃOp'Janupǎ]_8>|lnhknpE tE@py`2/3F3zZU%#1(uX >)PgAՃDR11g=qw0yy\Xr%RRajJ>Frrdi[~LLa`5$'AllE79Um;y[\\>?sNZ >C~9+WLR5##fxXO == N>,37(cxlǗNHY'=ާǏ%J|l>a.->ƍ+l6,D RM#T,Vz?2] _]݃H$ allb++Yj]f'gaIKˠfgV򾨨 D" =jiOW9Ba-ma9V>??Q:::)3 OM֒]xKoa+7Hjkkǥӽ%FJ (FdX@R@yy%6Zvvv\ÃYnBGP!:88eAɚ$ WT#5@WW|"ꖂec-4jZm=..].W`W߽{KTU*Hhhh~YKj#Qt򀀠YN Cv#]]WFMGQyJ4j9Q$PP^*BŠ.k(wHIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/openNewTab.png0000644000175000001440000000013112167565271022033 xustar000000000000000030 mtime=1373563577.213318835 29 atime=1389081083.40172439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/openNewTab.png0000644000175000001440000000151612167565271021571 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYsvv}ՂtEXtSoftwarewww.inkscape.org<PLTEUUsbHDC ?"S 8AB  j $*ӏ 0!/&1BڨۨݽU(5ɷ %SunMy~Zpa\Le(SoW[}iNpxdLtD˸(+4*.!>ʄ,nXSVajf WPTRQUd~(0OZIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/configureImport.png0000644000175000001440000000013212167565270023145 xustar000000000000000030 mtime=1373563576.914318499 30 atime=1389081083.402724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/configureImport.png0000644000175000001440000000242412167565270022701 0ustar00detlevusers00000000000000PNG  IHDRĴl; pHYs7\7\ǤIDAT8ˍ[L#e732p]ŰkR0Da/ J|@x0(h F. B; s|41 iNo~s.sJ1jmU$IdYQVFCL(˲*q hƲ,qOTrbbRF@]oqq||LMMd2A@@JVWWUח~l BB_'̐!..N!88ASq48$$>|l*[->`att&''1?11dY|mQVV`TLENNBJJ `Ԙp`0MMMxT7==ŵDst: i}}ݞ_( :E-1 3_ˠrcXܖwwwG~ JT,b*'v{ܣ[qnn.`HyAlJd0a!,, :[]]yLX!@DXl z&cxsR~Z\\,b?(**bSGGGO'''y<` eڼ:BnnnN)xUUUtFP__O@0IHHÔ͊7AG%I^RSS55O(3TC***PO49Yʸ>899Ȑd58UڟnR S{c=V:"33SŽz u+(RjCgFHÂEfeeiϿ_T7t޿Z(X0":--M2\ggIYPױL#g9Eԥ;n\WWkhh$ y5@"h`̙fXP yyy&###%ѯ|IYŏpk`p}ξiccc%3MshaLo1M }s^kkz;<<\XV@VԧezNyQ^q/сygffhi]ɧPTn*5V++ݥϐQ+׳NTH4M5*_ta *%IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/editUncomment.png0000644000175000001440000000013212167565270022604 xustar000000000000000030 mtime=1373563576.979318572 30 atime=1389081083.402724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/editUncomment.png0000644000175000001440000000252512167565270022342 0ustar00detlevusers00000000000000PNG  IHDRĴl;IDAT8˵{LW-ZZ Q- Ձ - ɜ| :PAf  T :p,F{'QRlG{AB5ۓe?'|T(rး)}-::nj μơZ,~0?CדY wt9/*U?TJsB+{a[ͅԫ6d/l؞R֘ah[TTնȬӻ~`pݖIEdjJ aϥ񧮋ټuV 3D"?X^0 ++Xšœ'ʸ)G_r:qu hӷF1ޏXw/{@*wWt~$uSFQ`O| 7?'/VJ ~pw>= @X3zR * en&Y362>ftv7OU%!ZsC|{Nbp8 DPw8%& q.z^ w c&& kL]$E|^QWbݠRq+^,ȼi6R]/)q4L~rM@݈:8Iu 9.RNOOE]6,VLnSm%)d#[؍ dgOÀ VMq8RѫVk,nBwLZ l.Ys+*LR?)ۀOo@eh b-pG$ s86Kba(-٩j)ˏ10 (O`mf($&B(J%JZF/JE+S@=/|TCTݡx>ѧ>5}SI;;=83,-ӄ688(Hvvnf:6TU̖N-ʫ˂m6ĜaFΨ,]`[uyk>)4TP·"** BbX+L&0)@@)`|^Śݗ TIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/1rightarrow.png0000644000175000001440000000013212167565270022242 xustar000000000000000030 mtime=1373563576.850318429 30 atime=1389081083.402724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/1rightarrow.png0000644000175000001440000000146312167565270022000 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYsaa0UtEXtSoftwarewww.inkscape.org<PLTEEkxNPj{MRk~MXf}`cQ U a  [ ^lt|e`  `  f(k( |  ir q!8{8DDJJMMtQaq ^ ##&&'p'((++++,,--//0033447~777::==??AABBFFFFIILLOOQQTTXX[[^^ccggjjnnuuyy{{Ň n?tRNS55<@cemtښIDATc` 1cVnf"aυ),fDŽ.,\&nluMm];\qiyEe7RVN^AaQ%?)iٹBH*^.q щHj>ƦȆz:Xfȁ@' 4hXbx^ܐ3t48$+;$ƽz<IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/clearLeft.png0000644000175000001440000000013212167565270021672 xustar000000000000000030 mtime=1373563576.902318485 30 atime=1389081083.403724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/clearLeft.png0000644000175000001440000000165412167565270021432 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYsaa0UtEXtSoftwarewww.inkscape.org<PLTE <<<444**' >@>TTT 563..->?=342    !!!""""#"$%$%%%''&''''(&))(+,+,,,...00/444555777787999<<<=><>>>>?=@A>AAAAB@BB@CCCEEEFGEGGGHHHKKKLLLLMJOOOQQQSTQTTTTURTUSTUTUUUXXWXYVYZW[[[[\Y]]]^^^`a^bbbcccdecdedfhdggghhhhihlmimmmnolppppqnssssuquuuvwswwwxxxyyy]$tRNS &&@BbeIDATc`8-  QںPA+Kۥw[^۾,lѽkw[WYP6 ,fƹ}569qALv}U550+\>muZNAi4Q%^9cU[JFDu`a2=kMw| 3rp[]<:yуW(`kkfK.LF ZiL/PBIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/attribute_class.png0000644000175000001440000000013212167565270023161 xustar000000000000000030 mtime=1373563576.867318446 30 atime=1389081083.403724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/attribute_class.png0000644000175000001440000000040112167565270022706 0ustar00detlevusers00000000000000PNG  IHDRRsRGB pHYs  tIMEf/iTXtCommentCreated with GIMPd.ePLTE8rfϸB˷tRNS@fbKGDaf}/IDATc` 0 @ch#!f8AJpT"9 ،!J=IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/preferences-styles.png0000644000175000001440000000013212167565271023614 xustar000000000000000030 mtime=1373563577.284318915 30 atime=1389081083.403724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/preferences-styles.png0000644000175000001440000000167612167565271023360 0ustar00detlevusers00000000000000PNG  IHDRj pHYs^tIME [{PLTENUUUDWXY֧܎zz___<<ctIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/editReplace.png0000644000175000001440000000013112167565270022211 xustar000000000000000030 mtime=1373563576.975318567 29 atime=1389081083.41372439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/editReplace.png0000644000175000001440000000206312167565270021745 0ustar00detlevusers00000000000000PNG  IHDRj pHYsvv}ՂtEXtSoftwarewww.inkscape.org<+PLTE  !!""#$$%%)/245q6p6q6779t9v=q=sABrEHHLMO|P}PQRRRUYh~bhls~uvu}v~y񪪪Ȟl)tRNS "#$+,1369=?FGINPQRSU[]}TIDATu;nSAcID=h +a J RErIl; 5x< V0R&+0" 'RA!7,!~JV{Fo7~[?c2bؽ}* uX"{k?õY)2 R;WS,bI@#SH&o`4u%-ntYͻR'#LyhJEA\,3[z9kOe!ƏG5 V:W̹29pJR]f)7_O1ӖIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/editCut.png0000644000175000001440000000013112167565270021371 xustar000000000000000030 mtime=1373563576.964318555 29 atime=1389081083.41372439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/editCut.png0000644000175000001440000000110612167565270021122 0ustar00detlevusers00000000000000PNG  IHDRnsBITUF pHYs B(xtEXtSoftwarewww.inkscape.org<IDAT(υOHaLW  KCC&L\An"ԡx0;ZAh1(P.-?(e ؖxMO{y>y+ Z8|ehj:15I=fg#V+<=>h$rVs_.c$8`w..7.- lłP2&b1tݼ.xǣq2Gn[Crss\h 钾KJL\7][Gh^7g48JXGAu~Pì49*nq<{\T̪h4sz?9DC/j0MI#U b0%A1Y ~!ɩ3A\v aB0,Ml"5+"Fay^XyMyjs\˄IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/fileSaveProject.png0000644000175000001440000000013112167565271023056 xustar000000000000000030 mtime=1373563577.127318738 29 atime=1389081083.41372439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/fileSaveProject.png0000644000175000001440000000202612167565271022611 0ustar00detlevusers00000000000000PNG  IHDRĴl; pHYs  tIME %PtEXtCommentCreated with The GIMPd%nbKGDzIDAT8˝kE?fd&󣉲bQ-T0/x*x&r* $zɥ"-M$VHnnn3ߙ6Tiw}``y̨VlNΌ:5P P7[˯!Tgff,-3X8+P (`d7~En{k FP?` 9Ri6H҄G("<8qybbS= 91ab~V"vuXR#Nl:Ճz:X%ZpΓJ$$ֲ_Ƞul-"B6etl0 eJӔZKXkY[[A1f$}SS,?1 2*{jW._&nϟGDTBz/cHl\+gΰDXkk%bbADj@R],1>MRĭzFAh4hhc(ϛ&˔&&TPHG#0WwWFNz*O]"JNһѠPRshK&ŗ1V#88BNa+8JXYct#` t >RLnS @ 4ӆxj\1E؀X{9v݁p?;[W>z)$qBؽ5 =IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/attributes.png0000644000175000001440000000013112167565270022156 xustar000000000000000030 mtime=1373563576.872318452 29 atime=1389081083.41372439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/attributes.png0000644000175000001440000000046612167565270021717 0ustar00detlevusers00000000000000PNG  IHDRR pHYs  tIME#ItEXtCommentCreated with GIMPW!PLTE@@@dddmmmwwwxtRNS@fbKGD hViIDAT @uU٠T@rB|ahnA P{ kWbl:%vA9s[`:m}Rzs JC$J[Җ V_dB|IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/projectSourcesPy.png0000644000175000001440000000013112167565271023314 xustar000000000000000030 mtime=1373563577.318318953 29 atime=1389081083.41372439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/projectSourcesPy.png0000644000175000001440000000172612167565271023055 0ustar00detlevusers00000000000000PNG  IHDRĴl;IDAT8˕Oh\U73dibQj M,QiD EPĭMխ. "FVSiMb243ysIm.='_=tmZB䙈<9W>rl9qJEk%u!@( {7_^UrqiUz%j-9٫?u)d)*R2X\ʙ˜ezaU*J .–y{ HpTUsA<×ow34;N[Ifi7fPDU'nYџPخC#ͽ67W䀕UtԱA8kIvA-@v̿ly{a.CN6zZݠмjˮahVJ'XZ/7E6xUN dI@-[$;ZJ-f^b QQL{$eUPےdQBlL"uLߗʾ Ãka =xd[F6H1jMD wvm˱LP/W+BLVza~^Ax ҆Τ](ۑh]C+\ ҂zJRж$GKJO3SsO??:ɗYrYӚһԻ$,ßG_[ջc.D;tM4vè᧷tQu8R܁xPux vn1G[\}"^uUpf;T K-cR+8 9 8n=*;")Cʘ /1rcep5=|:>[b-4l 7@qZ뛭-:g3a2_ΛR\fbe_ka9IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/taskPrioHigh.png0000644000175000001440000000013112167565271022365 xustar000000000000000030 mtime=1373563577.397319041 29 atime=1389081083.41372439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/taskPrioHigh.png0000644000175000001440000000222712167565271022123 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYs B(xtEXtSoftwarewww.inkscape.org<PLTEUUU@@@K(0-׆ߐăF4JN)iDkSMK``:E$#w׊P@Fگ=!Q+U-         "$%(***+!+,,!,,/0001-2&2 35,578 :!;;<&=&>'?=?$A-A)B'B%C9C)D-D*F*G)G,HEH,J,J*K9L-M/OESLSLS2UMU2WJYOY3Y3ZP[F]T]T]T]Q^^^"a`aUbObRbSbPcYcWdcdKdPeVgagYgUiiigiWiMjXldm\m[n\o\p`pernrfrbsatduhvhwswhwiwgwZxfysyhzqzg{stnnstvɎzԀГГҒӑԒؕؕڗ؛٘ڛܞ剧۞ۡܣܡݤ٫ޢަݦޤަੲߩ଴᫷ஸ⮻䱿'tRNS ##09:?HSaL*IDATeнJA\b,|B6b!o`oeaCYوi#A@ L]nc;tc?p?(3U'zBnTj޲Q+>3B6hM6Y`-:`B@ۏ .L)ry@ N~qv<"ֈ#vCy(Fk7qOЋːq(: ﳼw6Qإ#pd}sac_s&W"ETiySC˴-.pL#JB ')`A|n4ϪFRy8C,IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/runProject.png0000644000175000001440000000013112167565271022124 xustar000000000000000030 mtime=1373563577.341318979 29 atime=1389081083.41372439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/runProject.png0000644000175000001440000000252712167565271021665 0ustar00detlevusers00000000000000PNG  IHDRj pHYs  tIME+ tEXtCommentCreated with The GIMPd%nPLTEfffqqq~~~,,,000FFF]]]555ffflllƑg"n1o3p9>>ACFzHJ}JLMMORR[bk^_ekeffhowhikklmnnnnpqqqqv{q{r|t}u~uv~vwwwxy{||̂̂̎ҏ̞̟̏̕¢Ԥðȳʴ׸ƻE'kAtRNS !&5:MOU_`efffjjstuv{|՚ubKGDLdWyIDATM;OPN[-RD D&Gu1n&L&&&!4Ɵ`b"!( =Sn-o0BѼX$$V(:r 0l3X|[O;r3n'!J=]_6iK< KƹDPnõ_lDZxm99u_,<0Ngn̝&qP9O6Rt^{tOԬdVsFBp}dQKLSzW+ 0hӁqŵ#4WfQ jZ^fc7נGcQ,D f'861ƀCt؋{2bHCGQ@ْ=Ӊ/8r /БDYyeIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/endline.png0000644000175000001440000000013112167565270021406 xustar000000000000000030 mtime=1373563576.983318576 29 atime=1389081083.41372439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/endline.png0000644000175000001440000000054212167565270021142 0ustar00detlevusers00000000000000PNG  IHDRj pHYsvv}ՂtIME"zlPLTE/tRNS "#+,36=>?FIPSUڂ`bKGD#*bl:WIDATc`? r@NARQI ()JQdd1,p Vw%0 `dfe`cab$aIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/autoHideOff.png0000644000175000001440000000013112167565270022165 xustar000000000000000030 mtime=1373563576.874318454 29 atime=1389081083.41372439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/autoHideOff.png0000644000175000001440000000207412167565270021723 0ustar00detlevusers00000000000000PNG  IHDRj pHYs^tIME  "==PLTE5$= 98:/n l;Tw8Z&Y(Z5&U#UIn!O/& :4% &K &K(L go(23]j (N 7 8 = 9GH+ !@ ,h-_w-ax:b:c;d;ec '3lf̭0+ŲPtSțCB6!+!3LLHOqʈH:ׂ 1v7zwg^a!;Yy*I L3ԋ0, v*@jnDb rrCtW4$yT TKT6~_:Gu .ͯ/խA(i$@Tc TWSI: %Tn C t |`L.*8W}},<F# b5B&&&߿f?H$6ƈrh4+**n755ͅjRJEf^UUUxͲ 2FX.dg?KPj갻Xͼc3leX1"۶mYZ^d38u%v8aP8ߙXNOXX[fgn|rbKGD︰}IDATKjAWu=WL`|I@qB Aēx A^AqJ0 80~P]|x|_:$J?;Ͼr-dj]ˢ dh/ [BA^6@KvsvB+;PD@Ӑ ^U(rv~AW%dD\o(uoaB"t=skU"M 4kLnԄ[ [~(mγZZp! swܦBveN~WE` {g*4Ƃ |}ځ9ϋBOF$.BojuWyr#ߴҰZ^̪6s6ZL6M_@+]3IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/fileD.png0000644000175000001440000000013112167565271021014 xustar000000000000000030 mtime=1373563577.105318713 29 atime=1389081083.41572439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/fileD.png0000644000175000001440000000157512167565271020557 0ustar00detlevusers00000000000000PNG  IHDR(-S pHYs  tIME $xv!tEXtComment(c) 2004 by Manfred NowakagPLTE  8===CG''JJJKGGLLQRCCRFFRIJSSS00S23SONSPPWY[[('abb"!ccg)*m! uHHuTUu[Z|aa))mm:9noab~~KL;>@@CE''@@22JKBBON|{ijĶVVŰŶ<;AB77AC,-9:HH:965KJ44HG<;QQ()99;9UT==gh..''QRBC>?랞쪫)()*;<<;HHdd퉇//NO]^qraIDATJBaΗL VsC@m-B6A -R$hx:y܅Y5?)5c@zj{@ZX?6.! \8 /,D!W$csʼn*fqnN\1w:J5`4T`<d=˺ %`WKowNyM2?绽&ǯ] ?Cp=d"?Fj WIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/taskPriority.png0000644000175000001440000000013112167565271022475 xustar000000000000000030 mtime=1373563577.399319044 29 atime=1389081083.41572439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/taskPriority.png0000644000175000001440000000222712167565271022233 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYs B(xtEXtSoftwarewww.inkscape.org<PLTEUUU@@@K(0-׆ߐăF4JN)iDkSMK``:E$#w׊P@Fگ=!Q+U-         "$%(***+!+,,!,,/0001-2&2 35,578 :!;;<&=&>'?=?$A-A)B'B%C9C)D-D*F*G)G,HEH,J,J*K9L-M/OESLSLS2UMU2WJYOY3Y3ZP[F]T]T]T]Q^^^"a`aUbObRbSbPcYcWdcdKdPeVgagYgUiiigiWiMjXldm\m[n\o\p`pernrfrbsatduhvhwswhwiwgwZxfysyhzqzg{stnnstvɎzԀГГҒӑԒؕؕڗ؛٘ڛܞ剧۞ۡܣܡݤ٫ޢަݦޤަੲߩ଴᫷ஸ⮻䱿'tRNS ##09:?HSaL*IDATeнJA\b,|B6b!o`oeaCYوi#A@ L]nc;tc?p?(3U'zBnTj޲Q+>3B6hM6Y`-:`B@ۏ .L)ry@ N~qv<"ֈ#vCy(Fk7qOЋːq(: ﳼw6Qإ#pd}sac_s&W"ETiySC˴-.pL#JB ')`A|n4ϪFRy8C,IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/preferences-interface.png0000644000175000001440000000013112167565271024230 xustar000000000000000030 mtime=1373563577.260318888 29 atime=1389081083.41572439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/preferences-interface.png0000644000175000001440000000152512167565271023766 0ustar00detlevusers00000000000000PNG  IHDRĴl;sBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<IDAT8˵=o1K.յ*@C$~l(TUbfC؂~,e`"EKCy}oC-9O|sQ sxxٶ], !DFMӒ(x677i :L)JN'U?,V@4!Cvf(7>~ da<\%c&+U%:E?KY3`t<%%L¹ 䊢1ȃc|p8xTvHh (1& 3Rp\\TlyL& 2P.!J5OTOyGn*sK z情 {^g 0~u2b\pWi0 T* bI|4sPDKMz'1HyvUT.R6,.)TEEw%ȩSSyLGoI걨t,vE|KnCل^_\\H`|uf9<#rѷZzxA?4IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/templateViewer.png0000644000175000001440000000013112167565271022766 xustar000000000000000030 mtime=1373563577.405319051 29 atime=1389081083.41572439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/templateViewer.png0000644000175000001440000000216212167565271022522 0ustar00detlevusers00000000000000PNG  IHDRĴl;sBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<IDAT8˵KOWœE?@M/颫.lHZuY5RԦ @pxp،m~1=s㇂+G?Wsh#'=b'>وP@&K ds윜!aU8SXE"%,o eGOq&MTaaqwz3$g+@C*s~ >>GGGVVVaaafffwwwxxx{{{6tRNS#&MS\l>z#IDATAjA}\x7.7r%fa4`&`HT^(L ЗBtVp'efDpNAFlB-k[VU% _SRȏ.0얮o$/G=P0z% m=X@AeL/k\!)z޸*E 23۹nH"}@ZH6g"m #bF|*IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/exceptions.png0000644000175000001440000000013112167565271022152 xustar000000000000000030 mtime=1373563577.099318707 29 atime=1389081083.41572439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/exceptions.png0000644000175000001440000000231012167565271021701 0ustar00detlevusers00000000000000PNG  IHDRj pHYsu85tIME4 ӉPLTEu勭|u|佽еҶƶ֒谯갰ݪޫкѼ«Īī⛛㝝ఱᱲ}~ا۰甓蕔݉ffff҅Ґ׊yxllↄㆅxxooopppuuuvvv    112332*)65EEbbbbJJcc;:ZYddBAED;9;9OMONeeׁ:7VUeejiَXVqpNL_^܅C@OMffmlݧC@ffonB?on{yࠠIE}{gg⌌<7YV㖕㖖㡡㰰㴳hh䵴侽梢ii跶ii飣덋묬좢죣줤춶jj휛kk便着llllmmmmþ2;tRNS !",1?BBHLLbbgg}}@ EbKGDHUIDATӕνJP&Ioc R,A8non栈Tik6Hjlp8p#+g i7JDѱ o6ݺݜ821v$F.Lc7u 1~ðg+Y}{|VLꌯ)#f`Zls,eyA0'+|b_EFX˜-Nif+ jP 3f;>lc(׳g$ -3 ':*ReV Rﶣ"i"ՂFT="+e V^ꭠO/zX1P T{||\YX6IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/vcsChangeLists.png0000644000175000001440000000013112167565271022711 xustar000000000000000030 mtime=1373563577.427319075 29 atime=1389081083.41572439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/vcsChangeLists.png0000644000175000001440000000254212167565271022447 0ustar00detlevusers00000000000000PNG  IHDRj sRGB pHYs  tIMEs!iTXtCommentCreated with The GIMPmPLTElll„΍ҏۄnnnjjjĆʊjjjvvvğއxxxĆȈ„΍wwwĆȈĆ~~~„΍֔omi蛛΍΍ҏڕnlhTZ[ϦWЎҏԑܖt g!1%)-/1AC)9G;=KACEGIKMYO]U_v?ZUtRNS  !!7>OXX[fgn|||bKGDIDATEjA9՗I4nL Y!>C‡|wn*g\0 "13F48[ʍ@&s>mk@0Cw⡼ˏRo)Pi[D8kijPgu;R͑cTd˪&z9@+ dUEgFkr[ke>}}F+z2EzÎot[>( ³~IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/preferences-editor.png0000644000175000001440000000013012167565271023555 xustar000000000000000029 mtime=1373563577.24431887 29 atime=1389081083.41572439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/preferences-editor.png0000644000175000001440000000235012167565271023311 0ustar00detlevusers00000000000000PNG  IHDRĴl;sBIT|d pHYsaa0UtEXtSoftwarewww.inkscape.org<eIDAT8ˍKHwcVZt'(řꨵP/Tݹ ]t"ZTƍ+ ݌k;$hyG1R17 h’Rա' +j9I z(!AQdloo([eJ[ И ),xP |NOOJ,--}'K4U. "PUUL!#W Y50?H0kcDo;8Fڜ9@ʊqy-HrQx ?=ox"b xYz<2.H N l.C`6g<^vU?3j&`0X^3)ceCҮͽLtRNS#&MSW`lq scIDATc`  p0O_0w@heKW2 *jjgAr=MLRC;vσ [)jʫj+h[Y[A+#[z&L6cƒˡu*F8%{8V.Y0w KO O(6c¥K/_I%!f&)V^*l!`ecejV4g܅@VYfrɥj6qYzQSfB},\]M TDy!F,)0`,)k m.mm$%& Y &UKWm횅"l"X[jzֱIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/shapesAlignTop.png0000644000175000001440000000013112167565271022712 xustar000000000000000030 mtime=1373563577.359318999 29 atime=1389081083.41672439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/shapesAlignTop.png0000644000175000001440000000020712167565271022444 0ustar00detlevusers00000000000000PNG  IHDRڄ PLTE=-tRNS@f,IDATc`V514*Q @B4 ٴ $XIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/multiProjectProps.png0000644000175000001440000000013112167565271023476 xustar000000000000000030 mtime=1373563577.188318807 29 atime=1389081083.41672439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/multiProjectProps.png0000644000175000001440000000224712167565271023236 0ustar00detlevusers00000000000000PNG  IHDRĴl; pHYs  tIME /YyNJtEXtCommentCreated with The GIMPd%nbKGD IDAT8˭Oecxcb8PA@P2ZZzǵ?ZZz^KiG-gEljd3Uof پɓ_ޛOw$X9B5HC`"Ck BǔJGfÇ 4 BbKx\~Ͷ6NSSSmUU՛ ̑Y pqA^WcM0;ʤR߈Wee V^9Q  =@ } V9;<- hgMMˠsW-7@1ځ^.'WSS:}*`]} PYY\Cx |H&  V===^3+s1❆K %iz(_4~$_;A_<. ht(8/Od:V BV^^|@^N,ti RحޥPW7qAD HsPzĦJ'R9z[Fkk+$}oޓF`0|\4}PffӐ)V!QT]5ѭeǻ7`\ ;]\QQsBOV;i3 MJg!/3$wJǛu-(c[PDuo[(5Lr;N?|7%ݝH0IIuN--J(nfob)!F;v7Oq/l60Lpx|kkk*(({lZ%q/"w"=$E'wFzHwE[X3k@_^8R/`8_UyG^qE{HTQVhUL{IKWMQhRvEXhwDƌY5>$>%C'S1^7_8c;k?oBwGyGyH{J {LSd+XY[]az_bceffhijip!kmlmn t*nmnoppqq}@rrsrstŇLϦС|鹛뷗ŭϽŭȰ̵ϺмѾҿ-htRNS  !#&,/134457?@OR]bddffghinrv}c|IDATc[C7-۶m۶mcٶ[Z<lg ۗs &I-J4#V"Oߌr]s`*܄ږis Ŵ%Y;jkmtXk(hN ]l~^>DT9Bhb>XM܀(,fm|hYbxr<8 Glv mƃt 7 bJ,$~9)YШ" ?ӂC_,y X`fjBR8DO5֭GIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/zoomReset.png0000644000175000001440000000013112167565271021760 xustar000000000000000030 mtime=1373563577.481319136 29 atime=1389081083.41672439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/zoomReset.png0000644000175000001440000000250712167565271021517 0ustar00detlevusers00000000000000PNG  IHDRj pHYs cytIME ~H=PLTE333 +++@@@GGG]]]ppp667 566qqqbbclllgggYYZeeeUUVtuu```~m{hhhiw``ass_]_lkZZZWhhiUlllTQ\]򏐐S𲳴KMKJMVVVIt{{{EEYڟD߿PPPwwwBoppA\BKʌJJJV_97ĦvO3N9~~拌䉉,l̅>})fX|&_'_]œArKrb壤̉뀹ݦGQ~̫𽾿ٔ.Qby.TLFo`ukoʁC\y+J8]{4RЋ6P?WsK_Qcyz{lynnnsss{*V.^ 2g 3j 5m :wMY=nS.\1d;i>m?pK}kkkllljtRNS  /02=BCQTTWYY]]^bffgghhijklllnopppqstttuuvyyzz}}9VabKGD&.IDATc` S$Q f?eޜHL'lڼz-G96N4kG<:W޻T6LXaǔwo%ӆ iOu3+pELXeb`*;œM]2ZZj{MP690[܆b?W.wOZP wx"_;#sig'"#SGV@HXW^j]blSZf?GVU[gRXc5>N EMZ #(SQO'*2DLZEMY;CRKQ]?FRLS`FLWU[fIPZCKYGP_;BP;CQW_m{~~}NT`_fsuyxysv}p~W]iNUbfks^dmwcgoscgnV^ohvhlt˩NTaGPb[`iwz}1:KNT`ȈmryωMVgltvƵ¿gotҼƾƨЮS[lý܏ahvFOaݟ۞بͤqxpx877&%#yqxu|66600/468;;9QQPHKO888BBBTW\VY]jknspmtrntsqurnuro{xu|xzztRNS  %(((,,--357778899:;;;<<=>>>>>>??@@@@@BBDDDEEEEFGGHHIIIJLLLNOPPQRSSTUUVWWWYYYZZZ\\]`aaabbbbcghhikkkkmpqqrrrtvvwyy{{||~NbKGDa,IDATc`&1z?I]xʹS!rL߹l_ďeL=eMkzɞ':‚ gǬZ{pays=&/ټiѓ.pacvÖþpa*m5 fm7 +YwO9{J9*paJGӊ,$ 0yO^my!+9ٮTNN4 RcG6O ֋E +U7HwO uTQ y4a nx|U Mw_A>pgEфvyYt r_;d.WslhͭWMIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/adBlockAction.png0000644000175000001440000000013112167565270022465 xustar000000000000000030 mtime=1373563576.862318441 29 atime=1389081083.41672439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/adBlockAction.png0000644000175000001440000000260512167565270022223 0ustar00detlevusers00000000000000PNG  IHDRĴl;sBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<IDAT8ˍ{LSW65Kd(aZ&B@TS1Af8:A20`iyZ,k  ȣ*R(!l!'߽zgQѣڛY 3*Jdx@ߌ::=3{HLdB޽z]Ab6S0:Ҡ|%0g K -0=գF}}~1`2Q077o&!"Zd]UU߁>kq|}644fD衽ʃOp'Janupǎ]_8>|lnhknpE tE@py`2/3F3zZU%#1(uX >)PgAՃDR11g=qw0yy\Xr%RRajJ>Frrdi[~LLa`5$'AllE79Um;y[\\>?sNZ >C~9+WLR5##fxXO == N>,37(cxlǗNHY'=ާǏ%J|l>a.->ƍ+l6,D RM#T,Vz?2] _]݃H$ allb++Yj]f'gaIKˠfgV򾨨 D" =jiOW9Ba-ma9V>??Q:::)3 OM֒]xKoa+7Hjkkǥӽ%FJ (FdX@R@yy%6Zvvv\ÃYnBGP!:88eAɚ$ WT#5@WW|"ꖂec-4jZm=..].W`W߽{KTU*Hhhh~YKj#Qt򀀠YN Cv#]]WFMGQyJ4j9Q$PP^*BŠ.k(wHIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/vcsCheckout.png0000644000175000001440000000013112167565271022252 xustar000000000000000030 mtime=1373563577.430319079 29 atime=1389081083.41672439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/vcsCheckout.png0000644000175000001440000000242412167565271022007 0ustar00detlevusers00000000000000PNG  IHDRĴl; pHYs  tIMEitEXtCommentCreated with The GIMPd%nbKGDxIDAT8˕U[LU;{, Hl4Fߌ|'1} 1%4S-E,{ Ol9|wf%<KKKr*#HO^hd8zVM8[Tbry{ww1>>1_ x]7iZ&EeYub8eDӔ [1UU}5 }FyM @Y* L f4U!MϪpyb}PH+9ګ{xbRۤM?@̘30@Z="9l6;8AژT g<,7WWs=&8or933fWNaضD4b`rLu }^[c4NY'cj-)>w32t:-RI,0c&tbO _mD!_YKj-;l.l@ /YYTfTXST!B} OUJ+JY^^vy^DĴdPHkww8+Ae\-"ӓA8@1Lqdllmߩ~/8ݚo&~S(.KEHS3CLqzQ^Zx ~ĂQ芆]T6 jq*@k:.+n_<VAX p(ͫw?Pv|{;}o]>B,!IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/restart.png0000644000175000001440000000013112167565271021455 xustar000000000000000030 mtime=1373563577.339318976 29 atime=1389081083.41672439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/restart.png0000644000175000001440000000241312167565271021210 0ustar00detlevusers00000000000000PNG  IHDRĴl;sBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<IDAT8˵klUvwm]۪D@Zn+mR+I4 H@h-%* j⇆Ƈ#(4Ę߻k¦|L3KGߨ# i$;h-}Y euer:U0)&+(bxcby9Ga7v{ދ1ށ5]#^xV疈Ib5qj[Jfr_~ȳw|qh#-,K%O:}{}3}Y;Ӌ(-EXbJ(qC--hlv ܀ (Bg٨E($!6*&D7w#x<!0@rS2/ lBR _Ҭ`:g3 z#*6WRRQ_>N"sMDV)'7rN3N8&* ;\{#/k B wx?oY4`/>*H;Iwq4zTSed"wWnp?M>?AABDDGGIIIKLMQRTVXYY^_``giijorstuzzzzꀣɂՂꇵތˏ䐽摿ꕲЗҙ՛ҝ̞͟Ϣѣңפקڨ۱սJLtRNS "*+./01?@ABCHQST`abbfiu~8IDATc`E$$EE9e5LL4dBJV߽sVJŒPa!MV͝1e u&(;ֻe7 M΍<{ʊ7meAk<ѲdKW=7kfz@ak;M8gݓ3 K%N)K:dSxdpe)꒜ ON] ߂}2/,!6tp̶ `+)IKʘfD\srs1C? OtaIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/runScript.png0000644000175000001440000000013212167565271021763 xustar000000000000000030 mtime=1373563577.343318981 30 atime=1389081083.417724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/runScript.png0000644000175000001440000000241712167565271021521 0ustar00detlevusers00000000000000PNG  IHDRĴl; pHYs  tIME*"x?tEXtCommentCreated with The GIMPd%nbKGDsIDAT8˕]UUsϝu31o%ҁJ F,*B> | zAD@)|^"D GiFGw9_{Ý;L ~^y=G 0H`ݓʗy)gG{hYWi8LNzpnUZXɱ7s0R7 khV "7LjPr F4ujErީǏv8S <x7v5mǡI)@aJ1((ى[*ʾ_Uu^Q _oqј}v5:HiMco0}wVZ ЬHKIg;)EIV3~ mV ;ºZBٻ&P6äp&n x`]Ĵ'uZsja$kRncPKxgm Q ,ؘ{S>E;JOS03-p!b bu ,FlD3TLUܘK0qyf:qsJzR޽iEjm"[Pk~le#NQry`:p|Ν;=gY;`J>y_z.u9u0l/tcZ U°)W\{n|2>9„^)An"i' afVݰgAdQ9Fg K}DJsVCn6ckb-FDW{waCuS.W4 ŋnūC/ؑZnmk𦖥ID/ym|^Q333Zah4Ѹ-`3-:ۚ,Z*RF#|w_ 4:Gpl]Θ;k"8˃ <1,;v˝{[~SsZ,&#\JRwŊBDQGQ9{{{OG&]/b}.Zt֎^wZ\rRK.};==}̙3o߾}ǭm۶@yͯ8p7m.гu9׆IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/importShortcuts.png0000644000175000001440000000013212167565271023223 xustar000000000000000030 mtime=1373563577.163318779 30 atime=1389081083.417724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/importShortcuts.png0000644000175000001440000000204712167565271022760 0ustar00detlevusers00000000000000PNG  IHDRj PLTE3v3va`KKKOOOGGGuwjidddfffbb♙UߘUߞl៟l౱wHwۋABydno~~eo||}򁚸ށ݃ތ쎹쒒딼떾뙽蚾霜ʝꢢ먨山:XitRNS "&./347>ACvyvQNIDATuʱnAu(. xx h9((h("%QBE;p,p0-U,Axi: 0zځ|TwdQ+G/Sr}0|gtwsWP?_7^ell2Q`M8DO26qyg잁&64Ǚ³kLYj,zCא-`KWhk+/iS8.dzLSZus c3vuBywOJܶRXFzxmۿ#yb][K~Vn>VuYju Y_rJ|)IB`S@S]A{buEQmAaRcr22@S,8EB(,ʇ8Bз/i4Fڬʽ3(J^rxY']$@(\{7G.!đqX^wAbms#P Cɘ,E; 8cmKMeAI/oQgѮ|1}A;a 8N=zڏ BEQP~](Dn[ IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/editDelete.png0000644000175000001440000000013212167565270022041 xustar000000000000000030 mtime=1373563576.966318557 30 atime=1389081083.417724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/editDelete.png0000644000175000001440000000231512167565270021574 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYsvv}ՂtEXtSoftwarewww.inkscape.org<PLTE%%**%%..%%66>>BB$$2288==BB$$BBDD,,::HH??CCJJYY??CCRRSSDDIIKKffZYnmXXEEPPBBDDIIXWvvLLWWlk~PPmm||݁KK~}ނDDEEIHMMVUWWPPooႁጌ℄⌌VVHGUU䂂䏏oo充勋匋FFsr懆OOUUljzy燆狋珎QQedkinn苉薕蜛HG^]ts邀镔隘飡NNUU\[ꀀꎌ꣡ꫪ뙘뤣쑑XX~}llffשׂﴳbaedz_=tRNS ׶iYIDATc` عر1@9'aL ק*CD۪M!Lk 䰫UgĹ.^9cEj*SsSloXmɕiYel S&_t ֕6Adwl͒{Κ3̀ BV}{l>j9 Ya?u~C6@e`k]|杫 jL\~3u,ZI53v޺wc 8tdlBă7N,Id{KJhʋ sڻ;zDd13&&Dx:p\\DLOa&)Ln~&WN&;^V BFF,L,>>vvv__`111}~~777555333011EEEzz{UUVVVWtt{mk~xckc`brrrVWTWLMKkkkIEDxyzAD@Aٯ=<\hD~tD8_yA}~2|}}~gҁ~~~.vQ%`/k5|{{{-i曛*dߺvvvgΧ,\0ᖥ%O\xhy`vapςs._:Чz4LlQŵVN^sa ℋ[^?}/|TSzE("x$xYz#IDATmANPCބ- )4iYmP|ƞgꀗyH=SlBXݰW8vl؎ǒp|/4'=;]@{ܚxuh5A$Zk] P~X}?؏"qr1\-rU]JVxl)QFiGjGlHmHnInJqJrKr2Mo2Mp,Bg,Bh-Bh-Di.Dj.Gk.Gl.Gm/Gm{}wq`jce]egXTOO }"x"z"{"}"~"$t&}*l*o-s-s-x/{6y;yOmOpO{O{SsSvSwU}Y_jj{|2tRNS(,55555555VZɣWbKGD2@LIDATMKBAwP2 JZVh-ViS`:wnsN<=ZɭEccɿ;&C "Ew:+Mv UǯOAۖiuo^>Nmy`t uJ}f HY*o*\|I\|%r]#ê / ?h5ucvkLtKIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/deleteShape.png0000644000175000001440000000013112167565270022213 xustar000000000000000030 mtime=1373563576.938318526 29 atime=1389081083.41872439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/deleteShape.png0000644000175000001440000000252112167565270021746 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYsvv}ՂtEXtSoftwarewww.inkscape.org<PLTE<<<;;;...---...***QORLXGJFACZ@]@_ c##:f&&i)(n/-%%%o2/r42~JHecIII```bbbkkkD67fXXfffmmmrrr|ooZIIچտƯ%%++33 % 61塔:9A@IGOMWT_[fbvt}lmrrttÆ%%@@ɕ--22EEˏ˝LLRRVV99 Ҩұӯ\\$!BA ׵ccٶ,'IGjh0,PN pnXU71vsID_[郁lhtRNS  !&)+-.013678<=@BBCDEGITgl:zQIDATc` b 7G1 >~>-ʌ YTЧֽyo[͑ xw17M,pQ~cQC \ϣsߡ.\}*f8{Ƕ=P[ cH΅YDbv!AZ\ 0qEBFpeD]EQdј5mG՜s[f&ѷ9Fjc{{jmm %GBREssx<Zr_wֲߗ!x_-KL /|^l>sX w r{{#66<<\t|fs^*lB!+Y[[@ GFFFP˞9r>F<&Cʮ6C}U:ʊLOO|,ޡ,.T^ɘ 999)9::N9==eڒJ"ܐixE3ZwiiIW$N2>IWWW`)RϊŢ$c2=M>11!ȇ)zEndllLĔ1g\T YBPop}}ݚHDƨ&d}'hE{{L&WB@VsC\fwwW|\D&dA[d20.Σ*ZEP+o`bGE"W2CRUj.btc,GeJȾX(Z*h.,,A@mGQѡI!+"Ղ]~,r\*}E*XH*GUzBd c2TJ$GL.s y$esD <(k#w??od罂3k@?iE2F՞8vN®' l`[FB#zu]6XPEqaMX buػwA<a0&Xbt1YuA#^K`߫+zRw}tS->dɼMH5^?a@ f؁3oFKd]%% , F0ϙY^(*#1f=/QrP Jj6d3y M%{h04K ̓U/5߰V2G0oQwX|K0a8^cXt_IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/2rightarrow.png0000644000175000001440000000013112167565270022242 xustar000000000000000030 mtime=1373563576.859318438 29 atime=1389081083.41872439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/2rightarrow.png0000644000175000001440000000231512167565270021776 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYsaa0UtEXtSoftwarewww.inkscape.org<PLTE@:f\Rr|yLPoIlLUjMXiCEGHJKMMPOQRSUUW _d R S -m-  U V ^Wc `F~F }j1r1  iqmDDEEH}HMMTTYY\\Ruxyb~r \ {| #!!"#""#&%%%%(y())))*t+,,--....0000113344447~77777::;;==??@@AABBCCEEFFHHIIIILLMMMMOOQQRRRRTTTTUUVVXXXXYY[[^^``ddddffffggjjnnoouuvvyy}}ŇTXtRNS!BBIPYYrs{ͺ2IDATc` Y I%}6Ta;AL &P;f0YYX՛aw?eF\@};q¥!f0ak6l޺cv +3oђoܶ}1 'M:}KW^nӖ`aή>JoLRvQEueInJl8ƚDWG!j2kZ˲}mx`T^趸t;;Sb<$Xט5ːôE94˳0XδE X~[ e@.8gܛ|fIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/flag.png0000644000175000001440000000013112167565271020702 xustar000000000000000030 mtime=1373563577.139318752 29 atime=1389081083.41872439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/flag.png0000644000175000001440000000071612167565271020441 0ustar00detlevusers00000000000000PNG  IHDR%3sRGB pHYs  tIME#/PLTE:::???BBBDDDFFFFGGGGGIII[[[gggkkkqqrqrqqrrrqrrrqrrrwww*!,#.%1)3+6.70: 2=6>')".6@:D0:>H?H@IMVPW^f #$') #%&Lq\bKGDAlNIDATm1@D?h! 4h*2ƯWɽ'4lRY  @ٓɌqջZj8S1U  U/3V/Q-%UY%'#p00nOo-IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/windowRestore.png0000644000175000001440000000013012167565271022643 xustar000000000000000029 mtime=1373563577.47631913 29 atime=1389081083.41872439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/windowRestore.png0000644000175000001440000000135112167565271022377 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYsvv}ՂtEXtSoftwarewww.inkscape.org<,PLTEuQwKxMXtvw~{{³::Ҿǵ|}ԱeWtRNS !#)+34<>FIMNPRSU_IDATuN@X)RETDwPVz[˼;8+_˟9,H&Ʋ~~L~\wu]Wkڱv+>0m 9lTI!)!xԨ\k@v"jjfecQ&%12EδP)4u9YM/?2dT,lm%Ӻ?8<:>9=;07351624 ہs IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/unittestScript.png0000644000175000001440000000013112167565271023035 xustar000000000000000030 mtime=1373563577.424319072 29 atime=1389081083.41872439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/unittestScript.png0000644000175000001440000000243212167565271022571 0ustar00detlevusers00000000000000PNG  IHDRĴl; pHYs  tIME-jtEXtCommentCreated with The GIMPd%nbKGD~IDAT8˕]U;;;_9bۮ*~nH.QtyAA݅A AMAx*JG9Wd+s9̼ձl/P \ Kk2r_7q[؃]T}90w x-V}ִg\AQF &`C\sjrEƊ` bpcxlpʷVIN)`DS0:PDhS'}wiHfs;F}slO19mc0 9FrM+oa5xl~y}lSEDcU`EJVIA ׬/m(@bPTàK"ո$ aMA"|7r1K3bfI=@4[r 8DX ,W /n!Vd<ALikД(§Dʻ[yi1G4oo.q8`-cq Q7V/f N V+DxkK1"ZV@4XuS N"SV$W7\ Bkǝ.zlqE:ya^t?a6iS38SuiMU az,oL֚B6'Z; mO{tF6#nPHsZV.[ϷHlwPT*D4U.%zZj*$ppI86Tȁ,#zHn&O !tF~j lQt>ΟL"$TE`x_ G(BU1K1伅 -;vnC!|>U׌FaP !01 !{Cb tr,Jg0;K3 GN C6gj5.R@6\;~kU-0@jvpmJyɓh4oP__esmrQqH6$Y+. `fy)-^^;̾BSbt]X t?nf(uL8(Y&F Lz" | 듓KH&Up4u7]-ԪIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/class_private.png0000644000175000001440000000013112167565270022627 xustar000000000000000030 mtime=1373563576.900318483 29 atime=1389081083.41872439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/class_private.png0000644000175000001440000000077612167565270022374 0ustar00detlevusers00000000000000PNG  IHDR(-S pHYs  tIMEtEXtCommentCreated with GIMPWPLTE^^^iv+++808ɘҝܪ++--"771PP7778r;aa;bb=XYOOOQY_dddecdflmמϸۻʗ˘˘ҜҝԦՠרܪݫݬ@>?1>S tRNS +/>DbKGD;9lIDATUg0D!{m# P.2:%a\tϋn=`LGRN抵J]sj+V/ z38.7Wd53 i3 Q'AIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/filePixmap.png0000644000175000001440000000013112167565271022067 xustar000000000000000030 mtime=1373563577.113318722 29 atime=1389081083.41872439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/filePixmap.png0000644000175000001440000000235412167565271021626 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYsaa0UtEXtSoftwarewww.inkscape.org<PLTEUUUBBBTTTnnn^^^hhh{{{ث        !!!"## # $!$$$%%%%%&&&&('%)+ +(+++,++-"/.-1112223!3+4+"4,4446$61-81!9-999<*<7=:/===>:)C4EEEH5$NA#O/O>P1P1S1X4YJ]O^5b6 dSe8 h9 hV!jUl?nWs_sg"tssu^'wb{H|McHqjMr vtZt$}"V!køs͉mmz٠*w CA{ ',PPPPP  ,,,",,,(-0J^/-,,,/8QKctq6tRNS .Ffp*IDATA.CQshRI#X͈UXD0-{= *MPr $A|;A—)IUAݘjhMg2pᄫe@Ԛ[sPM,iQ8$8 3pknI!@3Kԥ4uƵ6[Sw%`v!|hui-˰շOk^ϖkUE+Upv/zYܖ`c@2Pɭ ~ N,IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/goto.png0000644000175000001440000000013112167565271020741 xustar000000000000000030 mtime=1373563577.145318758 29 atime=1389081083.41972439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/goto.png0000644000175000001440000000100312167565271020466 0ustar00detlevusers00000000000000PNG  IHDRnsBITUF pHYsaa0UtEXtSoftwarewww.inkscape.org<IDAT(c@#KhQiUEKDR?o\Ps +^TEpNwĔ{Yp7{*ހ)YD""]XE. ";bnMgPŋA"l6"m%m8%}jOcv@GR,X&ۯ !*Ar;7MS8ǖV|׎Yq@FR> W91LSX'Ȯt"2[103p13H302180x21;- 6?;#ָ!>RIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/drawCircle.png0000644000175000001440000000013112167565270022047 xustar000000000000000030 mtime=1373563576.949318538 29 atime=1389081083.41972439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/drawCircle.png0000644000175000001440000000162712167565270021610 0ustar00detlevusers00000000000000PNG  IHDRj sRGB pHYsϐtIME 缃PLTE˺ҥǽìϠϚɢϗ $CtRNS.//559=>>FPhhiVVbKGDeh>IDATMKQ{)?TD* "6r7Zآf5rԚt t|XLGh>owZ;pC6T=_Tjdx+eBq8;Q72JٯW3jpSse7ӝ(BjVWNf ,5er_!KDr3W{ID)Q#C)J hQ({Zp(IOg?zQH"J%"QU:f@v쟥뫛"K8?F߳qgg_N!@ڶy$L ?}+96IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/vcsExport.png0000644000175000001440000000013112167565271021766 xustar000000000000000030 mtime=1373563577.436319085 29 atime=1389081083.41972439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/vcsExport.png0000644000175000001440000000233512167565271021524 0ustar00detlevusers00000000000000PNG  IHDRĴl; pHYs  tIME7 7tEXtCommentCreated with The GIMPd%nbKGDAIDAT8˕UKhWҌ4X%Y-`Ep4ii(J.ʺUW.Ѝ$ԄĭjڍbYdg9Qj.\9s9666Xj45͏/  лݮt:q\bYVZVvV*W|9;;%?LB/`^+0Mӄ4өا@*wh3%/$`Qq y;01o Zk,y>ɍ4m 0mjޟ߁q~Msh3ƴMɘ jIu;0QhC*x:|'BS@|zC4M". |J[ ڣG|eEN3+G?^1FqM=:͈dH$03J%5]]7ĉ;f̠l)LYXp8p\ 6D".kÖCn("REU}ˎ`8oW˪gAV S 2:Q(H@m⠉``tZܨBS7oNRc7\#c:%JTwwPa=x ]طN0- :F+.Ή ib>84$ёN;'HD4ԡ/<}Cl)hԘ]"V6+ea[DQ9QxL4лԕ}f'0Fٝg2WQY›B9緾W{xl.ėe̠#WJK7uU6*ΰ .UHd榅g0,I#`[hS(P}{[gΈs.LHɋD⹙LwRTK][[kMOO~X,vL1(/,ͣgϊ +͑k2:Bڧ"q߹~Ԕ=_{gȫڛpQ$W^Ǐ^EO}#`\1tnEVC OIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/editUnindent.png0000644000175000001440000000013112167565270022422 xustar000000000000000030 mtime=1373563576.982318575 29 atime=1389081083.41972439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/editUnindent.png0000644000175000001440000000131012167565270022150 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYsvv}ՂtEXtSoftwarewww.inkscape.org<5PLTE555DDDFFFUUU[[[bbbFFEZZYnnnqqq.46;;;CCBCCCHHGJKJMMLQRQRRQUUTVWUYYXZ[Y[\Z]^]`a_ab`efdfgehhhhigiiiijhjkjlllnplopnqqqsuqttrxzvyyy}{~tRNS"p;IDATjQBAȂ`aa' )RRI(kdݝɼ{= x٢ CSyь 0^x`on%m0"r%9N tB&}& ~|JB/?C%cvB;JB7ox6P1y"L~M;]z}g;}}}!!34 ''./&&55 O&??!"`&21;;[V%%;< "MOFF5wntRNS &),-07789?ABDEFHHKMOQXX[\bdeijkklnovzzhuYSVaP 6adCNay (e3J r|Qc3O>u~0Oj_:)4kujW f;]k]rm`f{0iݡ3[d=qG6mזµǍL6<5{[ ySnݸop}eӜÅuآ;uL` 3(9 2rOI `t3)bYM`WD[T^C*ofIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/quickFindExtend.png0000644000175000001440000000013112167565271023056 xustar000000000000000030 mtime=1373563577.329318965 29 atime=1389081083.41972439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/quickFindExtend.png0000644000175000001440000000134012167565271022607 0ustar00detlevusers00000000000000PNG  IHDRnsBITUF pHYsaa0UtEXtSoftwarewww.inkscape.org<_IDATk\uw9+g6m!Պ8 $ !KT4?CqS)EqQCD0tbH,:"i-g~{*j a(6uk>psboC&Su\*q;.#5є,%?B0߮6}朆 R #d[8MzELDi*Mue\K=$T8q'ҷ?_IZ3M.dRt^URL ~u}Rl&wp2XL$s.ɤ‚j.Ɠ8vj@~DPSq,!uO*LӛMTWR!/ʖ*̴W8O*PCFt nW q6,նG꒥pnB)`T"JזWB[ՄqcFaZXhLHIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/drawRectangleFilled.png0000644000175000001440000000013112167565270023672 xustar000000000000000030 mtime=1373563576.956318546 29 atime=1389081083.41972439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/drawRectangleFilled.png0000644000175000001440000000044612167565270023431 0ustar00detlevusers00000000000000PNG  IHDRj pHYsaa0UtEXtSoftwarewww.inkscape.org<BPLTE]tRNS:VIDATӕ10 Cџp'!6fO#*1] [x;qH]Hܕ;8rCSnҕ_CȌ l~ZQIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/taskPrioLow.png0000644000175000001440000000013112167565271022247 xustar000000000000000030 mtime=1373563577.398319043 29 atime=1389081083.42072439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/taskPrioLow.png0000644000175000001440000000123412167565271022002 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYs B(xtEXtSoftwarewww.inkscape.org<bPLTEvvу``ᯯ))0022   :: ^^  IIaakk MMaaee $$SSMM hhSSrr MMnnՒ SSXXmm؍XXMM SSYYcckkۍ[[jjMMYYQQSSYYލ ߍ১SSNN⍍ TTSS䌌SS\\``ll匌00SSTT猌玎YYll苋茌ZZ錌륥99otRNS ##:?NIDAT1 1?3$b`g<l낅I4Ka X߿)fy6F2*]?cHPBK4himΕ<t_7RbU D"̬*N!L41_j\IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/trPreviewer.png0000644000175000001440000000013112167565271022307 xustar000000000000000030 mtime=1373563577.412319058 29 atime=1389081083.42072439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/trPreviewer.png0000644000175000001440000000226412167565271022046 0ustar00detlevusers00000000000000PNG  IHDRj pHYs  tIMEOtEXtCommentCreated with The GIMPd%nPLTEб簰ѳ:H;D)=I@J+BVDK7M^%NiO]0Pp Q]5Q}XC}Y{au8cUzd}*e~7f~;ijgi4js`k;k&o:sLuu vEw*x-z+z8{X}6}(~f~<,j%^…y80!(c27-~@u:':;4;<4*)5#7((48I*($'&((çżıͷȾ45ݵEtRNS #*+128:>@CDE]a詜bKGDw w82IDATJaƙl1H7Ad v-[uE]EwD)(!s;gѦ6=FS-T@@lSnI7u8N$tR}k!4D WyZ͜mBEIp}ݫL{1oQ0ng E.R0NdR0ڎ)W1D80bmW03j`cK59:* aXS;M1c̪sqÃ[녥:cH!A+V)7"%+KyQDL¿q mN}t05EIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/drawBrush.png0000644000175000001440000000013112167565270021731 xustar000000000000000030 mtime=1373563576.947318536 29 atime=1389081083.42072439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/drawBrush.png0000644000175000001440000000153412167565270021467 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYsaa0UtEXtSoftwarewww.inkscape.org<PLTEUUUxhhhh YM.UEh000A5===WJ(///' KKKhF;UUU***jjjsssSJ4!!!hkkki###cR UEUUU ```kkknxxxx222 {{{))) """$$$%%%&&&))),,,...333444555:::;;;AAABBBJJJTTTkkkxe,~zqMi\Wg˻ͻ̭ͩatRNS  "&'-01234677;>ACEFHJMV[egiqss|ZIDATc`~ 6qUQeNE鞜RA1Z">E袼ežBh. 芍KDE [deE2 &%;2ʅTZaG dp{ Rdk[ atsKCSCm2:Fzj*ʊ‚wwW#ڹQ_O$w޲_x& IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/step.png0000644000175000001440000000013112167565271020744 xustar000000000000000030 mtime=1373563577.375319017 29 atime=1389081083.42172439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/step.png0000644000175000001440000000026212167565271020477 0ustar00detlevusers00000000000000PNG  IHDR#$PLTE@/`?O`s$.7I tRNS@fXT*)`0@D!0yYs^W0ƹi@yO2}_s E i"7͌bF~qQĭz!Z*U]!~Wy˚hEz|$AbTaqdh(-6@sUDGPOl&jYܦƧ}"^˗3cUCHPD:' H6Oȥ7ߐT_ ܹ'OI8L6#$( Udh.D"J[] +^>/㲷'EiJRvwHXT,C^Уrpn`lVA8GyJ3Ȉ^Nv@ͦ UE OK0ea1Sг[J__4mK>_Rsd8rAl(n|ScշQm_2>Pߕ\./Pޡ+83cfL /=nG}YWlЊZMLK(\Nͨ_@Ɇ|QnSc0k:TC zO >Beŕ Ƈ]6ﰩҎ(c3/ Ts1H@T< 9zƞF_a,NEfִ y&}llI&>#suV333U- hu4.6$ǩ"YWL )FXuw}5-ΣQ62̂bvޟ299!ߗ\qGVXaKJlZq>y1W݅|kׇÑp IqwV}zb~sg?䀎PBIDATu@яʺ_B-VRnn1fSw{TNh>-c G{rȜ|ޮ(9s xb?W4%G&-BKVM0-(Ixڊw mtdʼnz@+Y-m 0胷IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/iconEditor.png0000644000175000001440000000013112167565271022070 xustar000000000000000030 mtime=1373563577.162318777 29 atime=1389081083.42172439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/iconEditor.png0000644000175000001440000000237512167565271021632 0ustar00detlevusers00000000000000PNG  IHDRĴl;IDAT8œIlUewS(4,;!q]Q11&.4Lā@ `)CB }u|c߻ӻ~na&l~?ٳA VmH AtmӶmi&l=5uHSbѦ;Ln|H.PϹx} c-'_|u^mtBŮKM𫼨BG'l%dZDZtZ_Ul:"E (Pʍ7PNp6FvYo5p Qd N[3eݭX>(4jD2}?JxjSo+*Za%}c͕v {f QHU5tw}XJZ9~%7/)xɟU3ȿil0U/!a0<膮C=||3S#\9zeyχs睿`TA3‰Yj>-C]S-@fg]#ssnxb"3R~r5xƉ2>>BBBfffrrr"""///)))KKK///BBB>>>///TTNNN"""KKKTTZZZKKKTKKKT555~~~555~~~///))))))%ATTtuvT///BBBT)))"""BBB555>>>T>>>rrrTfffNNNZZZ>>>YYYTT///TTTBBBTfffTrrrKKKYYYI~~~>>>uuu555TT555TTU555///TT))))))///ggguuuM9~>>>"""TKKKT///<TNNN~~~TT>>>rrr~~~T)))T"""#X(Q)))///5559W>>>BBBBWyDLZKKKNNNUY_VcyYYYZZZfffgggrrruuu~~~B9^tRNS !"$$%+-/134456;=@@@ABBCDFGIILMNNOPRW^`eopttvxyz}NIDATc` j,fI_v}02p.0W+H &f3!¬׬fpK]4w>@ *\$6] Xٵh9`w3'H0zwjv_l_$-Q 0&%300$ՂU[S{f̞ Ͼ06F$m/#,H(Z 3K'y8F-p Lg`hP `}i  9gM3FN:zPX<2S @aF!9e5-C;'W'[c=MU%1&ةi_VIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/eric.png0000644000175000001440000000013112167565271020713 xustar000000000000000030 mtime=1373563577.073318677 29 atime=1389081083.42172439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/eric.png0000644000175000001440000013506512167565271020460 0ustar00detlevusers00000000000000PNG  IHDR>zsRGB pHYs.#.#x?vtIME  .ڴ!iTXtCommentCreated with The GIMPmbKGDIDATxُdy;cȭ2+kn6["bIƌLa` P1l P6{/0kc P;6bSKuwYkdg_Ed%( ,NrQ8]=K,K,K,K,K,K,K,K,/[٠6ˍv0<}9+mɄlmsr|DF6o,_, OR0[0Nۖeby$هm ĶjU5q0ow0Pk|CٮieN(⫎^_gǏrvңl2ܼy~>n{auu}_}?KRԫU<%œx[:ZٱO^}ե".IyUBFJǶp|UrR[|pHe,H8<j}Ϟ=njL&j*aPf9arxxt6<<\!8;9%I&)Boͳ=q;e2lF's?y4<(Js}RRhLnݸN8swGLFS zgabPqlfeY~mW\><#NyT<|N% LM4 ӄ'xEFaCNOz Å2!DeAGb2tѽOIZ9ilpr֧ NCNC1F\vFd2⣻w1 jF2 ZѰnWK, 3`PTEusy=z'dyJ&SL%893M1-C)ހ z̦QHǨDX2Sllmr1m!qcY60K,rl@Phx<\*Fmf)p?% 4;\z],ˡlTX;˳$?ht׾lNF_)҄V }].mmQdvW'ylN'hٜwч a8'Su<{Fۯre,f4<ۣZY}ayƗ$KNYf[#au}Ǐl40ƍ$QL']q|x`0d8p=diJ6Qa0LIJ0ɤ QO!(Jײ fsNOx3 D%Ck;ll}eK<\ߥngo=}P۶_M/X?5 /N#ewh4pp67EA)%j*Bl =<~̳&1i" CЬAdiJFaHFQ@jH4OIӄ"-Hӌ|hROP*1p8{\L2f*08=>F2Kxy,Iwnދ#?ɋƃ7B|s&)Rs2y~31<& cҢd:#z3"Z 3 fH(ʒŶlаj'`P ڭ6Wn\c2y!v56J\]^4Ka?yE NٷQdgkp0jbW*L9(DQYP"($M2LFJI_DJi^OJysX b dIV` Li6'BLB8J Ců)yQYw֧Pq{ܺq%6'C^3ܸyY^1K[٩Ǐhȣ9~"+&&qY$ZdeA縮8Bm{>0pR(b/*,qR ,VBmJq\QVh˃]LˢRsZ׶@o gcu{um.?%̇ot<~tG4 xOgZP DDYJytN&K 2,CeYi=W@! mB/>Ջ_ˋm-zmYeY6BB/n8h;oVڢnSk6q nZwRo-sĥ1R YJ$&+ $a;;پm& |1`NT$HɊl鹒YEQdY"-_P{Nw]`B!BPaQ+6qBEBa! Bb6R)04MmGc|z*\ F8)s֥兴$qm˗/SM͵uΎNÐ_YtjBa(j:4f8aZ&a0"ʲq666(˒$IPJ $9s",M>9Z,2(Tv^D*0ZH"E H%1\8)d‹:e9`[&cpEq̍kBw.}e//%  8~m6/mlg'y~鋿*a?:H  YH 0B`{>S(B!B9!8o?W(.'RJh P(U :۶)EUT Jab)AРДJa>m") ,*6 /$a:WԪUwv~::~Jw]<$kZw?w]Ee)N#,!81LYJR$EN`YKQiJQضeY!E&D4E|EARx^! ~<|MAxNyޏ4-RRHmPj+JvWsU6. ,f+zS%BIO>4I?SuLC ?d>;>w# C<ӧON#F I0H 8$MS<'/}n|NeYyR F8.i-DiP!m2@&ca z>dZ$+RıM,1M hZmsynÕW G88mnyK%HI*=zLVWV* +A1G%C0r,\Ci0Lϣ(Eq<|N$۶_h=<KBqc & Iai{O[BPHYPEgyv @bbu,zIJӠUee9Y E,/Js$ /1BNOIzqgXh8´}dyN$IBJ,ᢴ%r ( }Zݞ?X_(.mS\,%Fŵ4a8'(J[.jEᔜ *,$01 @p]۱WonWi[\f}}0S R $^3N(Zk˦wz|6GI-Ҹ 30Ð$(rI9BhEqQ|Zu̲쯨ߏ>y~kװm3p+Ze},ASV#θq*g9)Vne4>(Zh|R#EtD`bYeY"40}R?P0XYAe%YNiui4۔ٞjYY% _Rē4 LNg8AG0f<=G ceyT q{:X t:0-ϏM6$N2_'$E1GGk5pL 4 BYD+lnnbY]F`4mL1T(s O5S(J3'45,&z09볱J٤Ѭ# cn:_T x:v/u vh:- h08JdY -r4g̑Jf)1 $r)&gH$I0 8qضc:8ﺴ ~@# a \&I3N[yvgT\peF eX|S}t RҪD)qa&&&H-QeJ+,a.Z-~vlU7l`LA*Vh4-lNW:T— 5B8\`ccW^}p;wxot|Ҭ6!%e1aD53,T*\e6]xDY4?5wBE$1f4˙ T z(-R #6.s+!~@^ݗO _Z΃97n\g`p޽ywtiJ;LÀј|0â,l2AJIb<ŋAYRЊG{y_+>?\M[`xAFňvL6^.yQbҰGEYRLT|>{('P(עt-L8},qpPkS0m(I& ٘j%e<.nB$xT<уtWVhw_d2FriIxta|8Ķno3BTVDQ縔YlU9icR+$&/$I ,83/4M/}4_ i "BUot.%eR˴})% Aiex<U\kxN17KE]嵭u5cuWvWvWiZVP/- _A4~dw?`os|\itI1MCa8}}4[JUb_9={aB󅊨iR 1M\ yJ&Tk>Ff*IѨ 1I)ސպeԘ9?إW5}uvW?wW^g#ЦXoѮWA˶yU.70 e+޹0-%<@`G With7T50dD8=~Cm gh֛|NeA@.%YX/oh F %ySP ,i-4U3 R)%#9B|24Mi Rn 8 甀ؔNIƥ^V*T Ά?c4F+̇Vk \7_e^ytBRL1TTL!0 !RVZ ,$| ;9Ç G}988,%a(QJVdwʵX蔦s4PJ m-Jf"z<:oS{LjXo[D9kS)c-rAa($KPi4Mo_uLdd?#!JZFqpLzc,R~0%4MV|܀kWv8Z[+y_>J%vkln#ǘQꫯK$_ۻ,ONg#(" C,_,@:ˏ;7׮m;a.tV[Zh4X[ZRio,//%WNOM&3jѿ3T\ܽHXADa0(J1SgIΟgȬD%EYbY #}46ch)LS m*z$KI ւ$EJ--Q|ˢ^BY` FCIBP>RxQJa&¢He^&'ǔdZe0`%I\-nQB&QU= \ʕ4;hu:/JėV w?ahh2a4-,[HL AKCQWX,\ZIb]$b"HRfY0cC)6*(E0Mi#X”+l JMR1՚ǍGX貶"M@)%'*ժOwQZy>Vkָu hooSoԸ|uܦbX.°[Ʋ:a2;9QHERC-,! 06&Ba`Q` 7v^AGSj&T̓?vQv=}޸vt,Q"DAI,%fS[x$Sl\+7yUo!'#X(|9F"W[!>!M+ICaqr]ALﴇ-A4TDS Vm>nWqY_o1O(`zcDA)\&Vpp4VVhu\ئVoTU1 C}}4Mڿ$|DQ|5,4GZJVp6̣"L&cZTOUʬd2Qb>:McY&Iv a R&Ra..njA^N __{k/- __ 99:b0r6쓦Ag)I D4*'/S ڂp*2LqwB)qnCŐX¤`YjYnQkvi-V;EۆRē!ZOI(ȣsi)ݕ@ q]۶75dYLdl[YۋeP7P\V#4Șt54Yma;.NTo}ǜ)͏?e~;WYYi]\$I޺r2}Yv<~ ǥ(%Ta4",ަ1VlEv/~3\\gՠӨ34ؖYs<>{dI`0d>n5RahHP$I[qɊl~Lcy]BCj ؎FcjAݩ`y6nWx_\yh۽! DA@|'I62,ydC]<;bd<:W(NFD 'Gl_ժLқVjSLaY鴰 '!I)N,6dA%קMh8¦xAC \C&+k LݻGw2'w7_}tÈćw?wʫFE|=˴0MgOvecfL! hoa1\d6z0$v "#&.A19X_[#~&7T}!,R%'G\e ۯ jDI,9Lfl/U6 XpO&qZ+5Q 1mjvxE)KF`:f A%LC\Bsq,|xx7ѬVh(u~F;|h6d:&VFw_{ܿ9X?;G{z,eҩUڭK١L'R2ΑRӨ9:3ݢѨ}_q9NNJT*("q=9LX+٨~:Nuz&_>A{Y<9sܙ;PvUwUuuIEdɀ% B,_ H@]<IEU]s)̘#ڤ>q߷VnlFŌCN^b4>£,oc8Jʪ4t$Q@eO2I AT)ǸeU":7sRQyY3s|["+2 BJF!#ԧO MFD}-df߃y|>#@U ria9+oZXzT@0-ZEpl%kg8* I&^YT tzmjoCZe7ht\蒆)? ^|;GG{ܸZn^+-]_8b6O?씛k1Uiv:*$Q䝧ocI4%XϙO/Ivišd^VFTy(jjEg(IKSKh*S%&S!Nll'֓#=p -*r@-Dut jB 2\$8cD,Էިє՘*h"2ۍPq{#fih6AR G5 m޶5Y^9ŌFL/ oDAPdplvo5b]uVNaEJU̧3dd5lx* $*b9 6"F +>|MYg4[mYxw9eǟb:,$k\˚nh)8D I”"Z6P uv'o=S>aTy?e<k Jf*g VOݤF5*JR$jf P7(/^*ᯠ<; ˓rū)/n0-/ȋZlpxo0H[Qj| ! QG*e' bÃqBѠT VauRW:6q^ͩ 2uYz f_ſG WĐ$,Ed =vuZ:cNKZEx4!OE0)+1lm!I52 + b _Aiv"j5+|omT' jߧr)$*di=GDQeRFS"TEp2#TzE9laKGY425U!""K Bk⊡ [}k"?ɯO=VXbE=|p/xcD6,[5 Q8>Ggܿ錆bK6-AELni9'O b]rz1}|Ah%lSj"(d$3Vkw),HsYPPMR1ʧzM/~!TUeq7κ.JW+1b5lq1 &N>O8~,IMn/ij[1CS)!qZjUM^2:;RS%j]`m"T9qC%:r nIC7&Sb/÷a=f>Ih:eקj˗4{Mcg{N9xcnEeIh+wP$:.UUAlN: R stphirI)ʂ!*ޜGa\'!e]s뀧GD\t])iIZ(f/L5$3qBP6%Nk HD6wBgcgQo<Ǹcsy3y}w(Z@X5n,Ìe! +grv}ӷߦt8?$bU3]LXEVP5BTd5ۻPd薍 0NSQS s5-BtQ`S9Y4P4MϞ 2"%ӋwH||Ɍ^cl m8XVSKɲCf T4ZཊQ) ۵(E vb:dؚ|6#XwG21.Nyۿ}Z;֯<;ۂ7sEU~'"8>7<<4ɡDhϟ}M^W+|hٗy˔2 I"شudQng3Nj5nå6X/״{{īIYL,\Z".R#>YﲽcZ5Dvwi{ZWnw׳9nν#Mqt:W777?FHHxiZخKBC`{k0xq6CE@%TYATT$ID, .O/x[o 51M7c8ZKgHMݤB$H2qd8[** lmBGUUXH&c7\LY : 3]딑6'8dpJ UI֘N;MCHDZ Yh,pFcvۘklCD4J2Ac;{ۼzm .#mU,OT&II]F#7ȲLq|<˯fGocdS5ْV6Zc*zàvH5YaX ̔ K4u|8&HE*jUnؘNup9" q:*hh MfͦiP 4M`zK~7F:^KӶdg)n *fJV*TY4mE +qm6RU.)"Y *o}ȇ wFDNzKe}rdJ >g|QDQKyiTBq( y*t6Q")`;:UPD>j$ <41df,"jR"+kZ$Hr4J)g<~p'+Ǐ$6O$BϿgȪh:cbMg5AryPeBaUUCVANTBMY(BeO~iF4_ PMUV0tucWDU~'=oN0>G{Gqt- H~L{y~mr BkV"I IDjIQ"s4]4uK'1B657&+ {9e`_H||]G-p izbZ6tmN 4`*m4]CQ9it]4(,U\a5 AD_"+K ӤmQ&1Rd5{\yzNz-V+D@(B,c̖bezDHͨ$( SE1TBxH] :M􆆦TENe8EPy{w NYLf<{`Helnl!k ϟ'_#6򐍦Ȥt,*ql7X>.eϿa6QD . A+ʌ HEb6 `wg ISP6ixy$[}(B+d깴zmDY}ɏ?ϿfFr @oȍM-ȬrX= ۮt(l4M(e5`ߣ.Rӱ2KmoC8[b& F {}x:O)Iysyq6|JfhjNIHMYrN"u3KVkCSTb?2U@T*'s܆Ie]*[}ү/WIG"lot(e>4nt>*2BQ~ɋBUD@+ 2m ͱ)0I0Lq]8I<;DPQ` .c2&E$$(V[xG',o?ϱMe3ʢF*Ggyh:}ڝ.ɔz$P+jNKYf(yc]2ҴU8DkZMMWP$Q9 mnϟg)YA $2)YR qSZ2Z۠VrG~NCiMhgV~A@j?`I$Y55,ДYxS4D564Wч;i5;q%g25^}A]Ai$)Nq,Ri|#:/P M3~MC0D MQkٸAuJ0NP-4M>e쓦[=%Z SDM\Ր0Lu"+_Ql;w8.G-` S\S%mVO5$P5Ns (RʴBu,C LchM!\f͐ E)sEPr)5Pd9Gxݧ >3  8qIEγg|a•4C'Nlˡƣ"RNji"k5Yx˵7I D,Iʂ^dK6}DRAw˗̦L[]ă;,#Y! e̛q_#CFn۸mv!f#   6u:J0غjdc'r1uH"˔(*dYeZ6PbZ2 D玾(~kvvvag{o`Oڠl2y:S><”t*!J24^â(jh1y'ÙEȆVEE4QCrEZFQ41U ul:j}, C7,GDztlğ͸>?ŖJlGǵLJ-xg_RK5Q^QS"QiY dMסV J!!!7tͿݸ??d2l6{6x4g|3,1 7.}Wfefl(n8ΩJ\^6,Jhwz{D8ќ9:~:Jy@U6u\t`̼u- &#T5df\ uu]m`o?|j$Ud%{G,Vňn"U- b*ZdiB(Ub!I*uUs1!I*[;rY x'[&oy E$ E(O|jf9ȈE)ˌ#*:B7'ȂIԘL*Ai6R`*Y2Xn5p*7$b[Sdwc]uZK_i ,X44b 0!!qı5V!IRȷ/M!M (BjZrV Q!*NZjAvdaT4$CIhj,1P:^bMpFn\]^$.$S9udI XJ\4&YCJq=yAXfkhz]u & bkq i\TU!+춅fw _Nv6y5[ S2"r7:j5nDQlBiOc"2vzaXň(_I&qg2/x9G6Mꔕ Rc 6wt]km0Yx'n|ç4Mj78Gk-vwYM 3<R&:9>Vb6,"bz)YB 4ǏIZex9[LwWC4۴h6,dF,xf. 芉+LVt;..;;ȊlDiӫSZD@089_k5Q%? u=^]_2V[88A(+z=fAa0P*EcZ(3"E^`Zn%QPIndyAGx2_*1 o>~5({%Uh:.,1Qēݞ_oH9ZckpJI e xjܿlUB膆i4\,a:;;; 3*F3 (-1";[ݧ,}&لǏ)/80՚_~"mmаMʼ(颫 UVBs31n͍RA",3"6?[-b5S5T̮^V8 p.Bc}sx [Lt Ɨc]Sv:t=T 2FeiX%|8޽}Jj$EF%.N.ݴnUmCMxunqtgP$Z_Q%ޑxFI^ƣ#a[:uY'?'S,B/.PEMUN',swwl"rdYd=6b 'qAYI &sBw$]hyQXvӈN KV+(˂Ã-ww}#Jsۛ;ddntddI]ob*Ec)wc{wt T4X!UU d +,>[]wo`mH/S՚o!pC/(VAa1M-" ݝ-TIfx3$s겢aV^a6} SPĒ{{:.}Uׯ+ld<|-Rx9E>utmR@W4A@%n׵?X_q||Lhp&I9QVvΑc1A6U 0Ʌ>`=-;ӊ?ϟ=cӢ!CY$5P T!Uc+ Y^&)yZŗߐfŒlhE\<{ Yf{{VPB&(l@u**Ae>oݿ*EjKc(M'[`w-%&vlɀv>똯nۥmAŊӐlDHU(' Fs$Ib(9(Ȋ)GmoPW%˵O^xrF$1-C)˟E]VO4<ՙ[e>p8BQ"Js.oyIb0$JʲD$M`6DyNVHN"(йw_&N2TIk5"Aqy5 ++$&e~:LQd۲99g}E%HiE)غErLS)9}m*E2uJ@R ,ˢnhloun/MI,2Pxuq`Qj*{[-( [eE, 6LbuHQ3#a}ŏieUow}Upg,&01KS1Y &IS EYR" Tf%&Xu"Imv|0*ѰtZ.( YK Ef6q>:FYTpmmX/fM`P),\/P4HP5-7{ P DďC3:i4,Gקi$@Q(wJ)匣{;>Y"$zuJ˶QozP%4ʩp0L(:KQ,R1yydf.*,۶t$ȋ L0v7q\jr!YZRV>0 9 /}U*clMಎki+ G\Oj *r&s^A ,>Md{k?J €^\sv9`gn$kUy.n,@NtMMՂJ@(&eAZTqYV0t8iA2G~Gl#}Y' r(E\+./. Lm]nE$R.n89b< RJ|LX1׋`.b%0_u(Q5fEU 鲵(J@Ty\+gkA]%( }`MQuH: 4K1"$b fGJQċbDQb݆|v\fb( veCav6Y7j / , dCf_b:,/wouɲ`^!eFk"McTgwwZ@QʚiLߴE^PӨ$1ڤȬyv=mvQFRNA6_a V4 (F$TaSj a!Ap*_afa S#R:!9x7H"Y!W!O.궲1ָ)+HY46?{`4y9Ǵ,t j8BTb20ȋ˰XwiRP}lC'[%p@cfR_J: D&)Bq+~뇿ͪ R4M2`X2"H2RRtfq]$'Clio-J׫3T1tCSLʌ4&bYc<%CDQMeR4{o+Yz=gcq9̚HqB!m7,4J / im4ĝ0"7VÀf6*P"U-RJ֔ce#99qKA[$ij.3/Rrq˴yS`sՕ,Q9i3^]2tMр$ P%p|yR`Tm4JsBSv,Bd4 FynS}AwGuKb=,ˠ?# jws9nQd2Y1E&\MV,( D TdC[m)O&t'o?y$Wm)*%(fpeQ&2V w>~ͽ}vȓ[7Pm1Y@u!/.GM/q+4_y(}F.KA@4Inj~)Q2 f |`:ٜhB%(%,^E0ez(EJM[ crgvy盒'."U,a6MZ!3w>QBu恏mغ X6vu\[m)߲ w!UC'4EdL1Mb0]24lSg8pȒ4P / Spp+7پo_Wʷ :x7^~JrAx,+HL*yFAgJNɮR1y2qCQb%^^ӯZW|>cgqDIE r o+}+Oo'u??.if(.BrAU0FUtCCR LS%X䶁hEAj_[m)Od63L4PIP ,KXmV*-k{[Ȓ"U8K^Tzky㫿޽0ۇk#ê ΟwğS9CDu *e I0l"ˉH҉ ɓU)DnU15Zua2"r4ay$UU34ZLF"CPD"CcAh9("+!i*FI흈ݭu'5~o?_%]K4BK ݀O=GB]VEm J fXeЖ:C*KSYxs~CLE`ZVPx / rB!XC~?odA%YfYoEAqr?# ᪨1L\jU)UKE =QIsT8ǰ#OSZ" R!'&s5L$3E2 "RBQ&$?(տ__e?w>~}Ec(*#K2VETnإ&#KܸeЖMOS\CN]Hըsٕ_BQX ^* b=n&kiM[y0Qx,Gaa3wUZ٦( 4C-A8 vA,Q%NAf 8S*̓~>w1-RAU;-~@ޗ|_z/1>$([1BB6@- HdLFm1$yA2i6Jh4pUAUQT` K9is!"".wm2st{c&BWfԈb2oɄ>Nk6|sz,Y mS*7(-%j [?n1>?]2|LM M[6Wt,J1 javP$xP(*Eһ@+-ώȲrBpzkf 4 Ks>n\gUu&DqBߧZR[_E.cZ]{sz 66 #F]Wx 9:تdzIQ;o8~bƗLU|@|0@0~; 0,$A8 -Iל) JQ199>#bj*8 p&D.oe.{UUD!Zm]#>zL{CbpQ7p'/hS'$R0Ur [kLsDRrp9.[ܹ{rŸ{:wqћR1aP4dIa<~"ֲ¹sǨ~'=rtB'aHX0)ѐ88=;I3v<{)౺ZATEMde V+yDp4B3u dH~  STj^A51ǧ]W88,.ܮ[̽[i^K *qm'>vǣo/.q՛qg:Z1 (Ϟq~Q˿|"qgCZ5MEM$IBRegkeH 3![|%qQWy1{h(lYр`"+gsZ: _F;{lpi9,BGܻ{O9Dd^8&"<(Z.3Qsq9}@3-$Ma8^ %@ݡ( 67qFC:'gxQ"2v^p1 ۷!'7K(<>/~^[>{xYR&LFcTY%C1y&՚ b+{HRmY C,Uj^ }uO~3ui0NOX_Cj./z c̒* S<סR&} 9yPd ?t?($ ;gQ73t82 K ahz7ɷ%EVRz7`! XgDIDABy&-4K#][V%ƍdj0XDѷ(bM ]{Fa!IE^gLC<NkocvB E./(7\s@]'Rj*_◱G| i4kuVWX]]olFT+W)~E QIUA 0 QtBM'8>dZ6m]ق<`OUOrRχpA0jk_SĂl$ LYMoje8ᣏ?⢇y9QP_mf1^<Ѩ2)3g&krAUC34p4ً: n@R~/_$h֨UmdI@7479aGWs (®_e!v0U ]8[{1uYkR++x /ò\~^(NL&* GvۗR jbo psADX$'8e*+UJ̠%ITMh'5nb:/^~9NG8?ώ;7'ϦJUf2>R6i9рПLxW5R2VW]\zm8!-"h vZNjܹ{ZdfZ,^"Og[k~(჏1TZݦSVWyyr̳@ӄj"Jܾu]9=:(r^~jL4 qs=f)0\fgz !ϯZdY. 2U//,-%*GjS6wA`smϜ,\%秧kނ ah|k$ɔ#[lr"Ⱦ(JTeHYi[.\v|Ӭ?dۜ &\)i3i֚eh@FGB(k$I'9|`?.{B-8/, >y!H&,U,͵U0uJFɳ3Ncldu/~Ky"𹸼`)-9Q.Y&is!(g0v'T+J&-$GcY&QM j&s669vT2 &v% ESHwlȂ`4̤ RŸ?k+B?,8z[a&?{PV<}7oǘAt:ނyW(lgo_̛k%Z[\T:L zHJQX1nbucՕ6G/{ :3wכqqc{}nKVZ.I%!qe:XIl y*)zEom/a?yV@c|yk7<}Ӭ7OƌGc }1bAVA.\u(dy)qHl#>:yNQd^;'2[l(6 (t$ 7ղi&'EeQ2(K ?4AeJW&,?#N0B"'L8A55&GJ|,ꬬnѪU!$Soȋ .&Z"Q`&_>{LFc=| {[+&>b- PɑTg>"$B Rdzh>R]i0l@UR w|eZF\A[s42~iQ}$,<͠(( mְK&qs`w{!) )ip}ݎAjlrN{'ضMXv0|BAVn2LS qRmS倬HQ% KXgyLQA$Q"KR[di̧#>} RϟzEoޔ(xޫc>! PD1i.b63d=O{0EH8SJvyiı@dA8lǙ:A^QT, ./t.4Ur YN|qk&gaHRbuQ1T#3t<$Lf4[ˀ,%2Nkڏ5s_01t;#X̱mc8-dy" ܽ{VJ=z"2n!lrLYFQ蚂3IØHf&dYAF^Hlmsmg=d4&kkhL^dO'lMѩ&ICט|ZۛhBj K^\Q!7o~25K jpA0&K3../dyNieȣG \C>SpyaYhDpXGdϸ Xm0OiXMf&`DqD^?qtAu7 2PDu! "$SH өiǃO?e8I*;;4MF1^m"cJ"[~@(J Ygi!nB!!j$I?lFo4ͯogYvQA3q_c EQe ?xԡdy@RmSoT989Q )"mE;Ɠb.'3߼l1i4Ztΰ VCN-؏1Me0#**Q^o)e1/_$*,I(0K+,+ӂ H Ȋ^kiYF1s0ә.zs}p)OGy5Iw[o  j a2ttN)QG!P>|FHܺq d{sN^霳# àZ0z1`ya64J# 0Ⓡs ES)J \dȊh0aXV At{LSZ6ZdFAѠyA4)jxng/ œ'қ?㓦,%{h\͗%qi] UVZ }.Ώv/(Q ]%1C3sFdyئx8;$QL>j5Iq"3\[gckFXa{sU;36㔋^[7o$.zm>{aUj:ضd`&*XéMf@Dصe)ٌ0 ix ?~7+3x;+7RŸZ 8}W#"ySM66( #^dB VVk̝+uRa TU`A٠T*3p]dqUьaDtgKU8s$MI'=?#[;q ʨ΍kU I daJ\l:a,"* 4Y,l5(" 4AR%ԧdɼ|!>{p8b>|P./{.%9?>A$Fe=$A %%cn^;D57R.QW {I #ƃ >#2IJ2IR*Y A_ӏ)gꐥ ex4F,۰f: 1CCĢR.F)S 1i^ ka嚉燐ggc4C$<`gc`ًt)x0 #ʖE.#0L8??lٸC$U8OH"h7aD i EFLF=>ixnHTV1Y\f4!Vr{m!GSe*6*~8 4U? ѶC1%bue~g]P-,AR ISJ%F9E0P4,'NVFKH90<*ZkeRŸa(oh|sQ'/qs&Jeib^ KZ }e2L"Y[jhGr ]A74\wh8fxx~[nR/UX>qEa$ ggJQ34etE6 Ll,W<}rBLVe:sQ`# )El*i눢P$NQ4DBdYfΈ>Ry9~)OATy^m 8q9iqуz̦cDE$C:BOܸ~`8@E660 1;Ù!IQJMS)0.dv8I9&P-sM3PC[AU)!E_i2u&hBZ7첷ؖEKY#)npyНccXjH *R2lq&bQ) ? )"e I%>lBFC>CN9ܸ}$-Oaׯ`%>P*W9=;bGeQ&sB6LAdaylw4 ۴(UD>;'T*%4#IC( vҌe GbHq5fR.Xqfsyeo¿7i~Mw"U_- 8=9a82w\,%C(²,$%d 0T&q<3~WVk=^ۛt;v.9.s.;<~jhl:'}A$v0Qrt|*efsI &!U∵VYёD_&9jf!++눂Qex̙SKl#9?eg\^*7urAdG\;g6he67֐$[D-%{SW]e4M85,켃HJZAYKoEr>㧬P.Y<:u$Ilj)ݳq[asٟ`,3rL4MES58ҹd<*Cz"&^LfN{[ؖ $Mik,,ʓ1 4|?h>=}o\cUcp E^A n߽d:b<#KPdc2r&&Fvw08(XYi"JP)CsA.Pe/E>S "2OC6VTk62w|Z*YRW<;97> -%zc*+_B^x.#gBQ-4eYlOHs᪙u`[&7 %S#/?l5zŔtN^ôLDYBDZ1$E /$gu^S6uL,I*4U4& B!h6k<;."v;2iAlg`c}_7|'Ja@3Ysoj ;4+pf^d9s7[%n]u!QaZBWxGJ6庁T5(:Tp='R4 YJ0_puXkm1vGc0!(9\bH@H,!KUino |ADl5ХdIġ|1.Xاiĝ lOtj-—AZJSo5z`0sA$@f6}^{`G*ie Aikc^xܹwuB?{GܼuM;c.q1Zߠ^Agln4od<>#7"N$RR$W]2"LݢI3(҄f'9,2E̙I" 9Q JqK*q&,bZ?ɓy|oUYUYHBTܰ-nH G[o,ނW0 ˤp@7@Oݕ5wmC EK(}]fdFdd|;ѐ=\^pyz;*9B^x9F Ij/֚`$9]M҂"K,Bt;M%,d%x) i%Is|O$ B%-2 h2=}htbkk|'%G7y jEi}wOngΠ{oFsxǝgq A ˟~ɐE !9?#o"kGC'TpvzxR`soNO^G(%>H$X#D{JD~ړTUMVV<>=ØA?䒚v/{@)fUA8ߋ%QrӈωW7d<;Ҍ m.Xvu:dY%/~;^@*G#O3JYH5H|HmMF?c[/E~=-rZ05;}@ w? :`4rSlhs~qm2[F)EnfpTF[lSۊDb)J hcM lEe4bVB i ʩ8 i6Z4F)VSL KjP+겆b42+ţCfF?g+YT,-RAZl]?z̛?| [W/D <:e< ɘ|Gtz"jz]Aն |3Xf,V:C@HKna,WK/r4Q^__"ny7"9Sŷ&B{wc=W?`L""g0)V;aJI"M !8Xg,in5E" KCd8򸸼& #*+>zcKsXg@  9RКEZPrIm,Ԅ?hlOkW~?bkO]{w=:d2bv'w~D3’+9aP#ўi4 #Ir{eg ?}D^fO]WC>^My)U s H։F"]TEjQZh pH ui LB JR030]2(8Ɨ*+ t5HKZ -)ȋg#N7F?[R()#=+$[t wo{Vt :=8Bkb~pUQ<Ǘ>yVXTS Bi6C)ܢcEAH%鑄1X< /^(r>KbCAEwfRz>Gوg‰c!1@e*ۻ-{4Z>n#VlO9~HY-V|@U'Wiy>E"*:ܻ}Ҭ$"*;-(py55^o;3u<"j$x eӧ4☺8`8#_v,G& $ÐFZ `6s{o%A{3$ „XYAYk㔕U֟3|ZJUU`րáE@UWΘ,)|Oa?xnC(jg]H q z$*@8?*+.Ӎq# cJPK%eVhĄJRH"/Y(J3lA4{JCZL5Y.zn"e4_|!}ƚ6"+1_ZQ/q3Z ɚRP8>~s $t E5;1}a"=P\p|_3,qer47ߢ 7wN UՈ9@@yԵjvҢ ׀# /$ 2K4V."L Z&A\ eٓm_vyAYM͘nuztYs![i 銍scUibLIUdux># }\UR9$agk Ȳ>W!!i7;8.s!{n Tpwov+A@UfU-8yzЛakI4(EIdHQBO)B;F)*$.rQ@3iZUa1fStZ5إrZ6W1qbL,8m珰"d=mwp?g5-^$O>A,gL-<}=@{Zi˻GQ/|sPggqq#(OmلnXBQhçGUblgieqQU?“!UJH MPB((D NH|MQڐcJ&B4jE6'|M\_D-' Rt>VHc^U-ʯ;DoM̸kB n#-Rs8Q|ͧ[D[ Zm]ħ? IpʪSK{[t-F ,-k,a X%jN!"vLy`,\\YB|e% <$)j<btyb;XS! (n-f0O(O#eahv+c58֍#iL˟n0yFUHCڣ׌f\ 'D|eh;x?y_R˘4UqB!c!M3tk+]w-3.&KVR ٔ>fHXL_h7Za1ǗVA˗h%p'#R^9N0#0S vc\ЌXH6lt2a 8=9$; c.궸wi^0Nh7#QBB(Jj ķ?x!d!=J.ߡթKFpf+^^:p4WT L]"*VP,K|`{HdيIv>a{{[DJ0He'AoPZL*ILPR)Gj (+|%Y-%fY\kvTuRq[']( i)EZh2<$*# #=|L^"}vg<1d1ct k(.>>A!.jJ+H[1o8x5'6_D*+Z]D ph_!UeFރs;aH%Քْ^(JC_|ytw1c>_Ia'! [^'a'MCrL)-^ӎf!j/RbdXKYW]Vx>,JUx4FHs/NnQ+NNi4:]n?,~ ^5<-ʚ3V*ր:8+˂l|!$J{8KQVE%Yw8g\Ǵ-$qN`+K&K+j0e4#S l]fp}5f .yim}Ӯt~"?~ KWH WKQQ%uUB ]Njwޥh 8yAM]g4A)5o PQG H%M&:x!;rZ6f2`<_nRI`6IAǭ{saBey]ҜۻMSΉQ+{|x8q=[2]UXP9 NvEE3|1c(˂4M-Ľ.ATiEQZ.%9IJnDI`@UIVc VLoPr?Y,6K1piG]'_h'>e/˿[1NEJR9 #b9U3{9tܻ{J&7vO$>%vZ)dzy8PHK`WSfԀlp5[5F*bAÆ u#0d{{s#>z) 4iQJ"QDFVCh+{ԫ[TKOjkϹ;jy6g5]n5IM?;C8FD.xxiR05_wA)h!Rľ"]_s8x1W sAȣÃ\\ }& DkM]-W;vPU../-W6;a{[+GCᏘ_Q$fogS)֔!SZIBo%~Isd:FI,V 2i!֏QLhIF 7G_yٓ ,!PVi88bp2j[?6_l,C%ZuQ+hvŊh_=@e)N.`nrITc8J?ڱ Ͼd4G1?E[Khq:fʓteT w|'Q5cQK&$[ vvϏPۈp_-p4`?h$$Iz Ϟr}5d{g |(j@G4mvUA ^'>ɊIr6Yl:ܺwO'L&C|_P%wSՎ7nP_YRV CuQS"k )>o{xVc?2_-ۇߓxZ!=ćR&h&V뗃/H<b:A#7 ] OFzp[s)ՊBt]t[-(*NO0y^"`2X.ty8axv1|!/޽Ǜo]dn(s:;hk#_kX)I~#F8ڠ=$ $Z{b( F.Geh|ǧD$cFNB* K-ȍ+Н[غ .:n 7"}7"+^^OUUGJEU_ۿJE|FgmB\QaW)Tyx8%CZG=x$Ͱ.fVŏsl6'PҡfFC¸uIB:PB) >Ryh1v$c?D* * ̆c>6tt1bimO"M$=^a+ |Ҫz#9zbATRגnx# Pz_}[yQ$Qr$:sy5b2_7&IUdx iiJX1]SDSC#E3<=h&1nݛ-EA!REW8v}.k/n !}MY()i1[wd-f.N&S C/1UJQ`36:+'֯I^w5z?6_drdaHi H=,-urD>OO˂Ͼ|9e _>VH҈˟*R՜vPPԢF3j{>Dق^EpcDHYTE늦B8 XnrA\kR RH4uzc# bfn[Ged( }5P~C}PoH}&7 ukɔFOGCu`kC1OWaО%Iؚ{ۼ D* lFxA|L U5lDib8=K#ElRM^,q^)5J{Q8GHc]?։µcQ@h=Q.R7+ؗH)R)ސּwGHRRB}Cq$fF?=kE>%/+,J j(K hM*@HM];>E-/aUcHOE>(LI-=|l5' %XIa*d5|'?>@7@k)BV{X҉# 4zW*k^Ǵ{7"ٲwSܸy'̮ϖ̃<*ES о:Gi^zSLWHSS5E^jq$3E SBBbQ6QOxq c*%J! q 3ql<~}ccy6~̆UV+"#,y{ԫ1)6_y$ qNP#2Q8fZx)B^#&m <(!gho⵺ؤ@I(=7&ܰX_YW8JlEiR2,,,1L3˔D)L$MWk1 C t/ᆟrrd A8q\#?7lذaÆ 6lذaÆ 6lذaÆ 6lذaÆ J?f(,4cIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/editUndo.png0000644000175000001440000000013112167565270021543 xustar000000000000000030 mtime=1373563576.981318574 29 atime=1389081083.42172439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/editUndo.png0000644000175000001440000000233312167565270021277 0ustar00detlevusers00000000000000PNG  IHDRĴl;sBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<XIDAT8˝IUEsoiD *1QD 9qI酮ԅ …D7.\`\pL)Ёh36hzMު:.V$N:JT;%P){uv?S\AM^^~{wʣ]:-%W\FM26xLW7N@@QU$Hq- vcӏw:|Z'-'^%C2z$x90IEϒLnۻS]MtD@ >ԩI=JRO{2h[{A&3{"Os~?T4^ZBp o1EGsjȓmK|[|cN`"mk6,5J;[5wO0ScM[88)= U] ڑ4'b#IcxкfS]O llk 9mQ@CSYuh?gO*fxkϸFbknT4X(=N x$3W:ak6 MC;!^o<8z- Մh"WM,@-'7D}17[.E~!a)zxɤ͠V5I+3bG0:W,кu)&B)YXj`ZMehF4c]7]Ŋ~_}l7hpQ~JN uYr85A3+ӡdjXO$6>s'-M MhBͩSWCe`̈́~fRVm^1Wul7uYMmJ`+'zUr5^H4JFqodR8?ϿzݮB7wz`g(Q%ʄ~a_%]Pwn9Ug>>CCCWWW...333;;;BBBLLLUUU]]]^^^///AAAUUUYYY111222888>>>OOO^^^fffggg222555;;;CCCTTTUUUWWW]]]111444>>>@@@WWWYYY]]]ccc,,,...///111222333444555666777888999:::;;;===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNNNOOOOPPPPPQQQQRRRSSSTTTUUUUUVVVVVVWWWWXXXYYYZZZ[[[\\\]]]^^^^^____```aaaaabbbbbbccccdddeeefffffgggggghhhhiiijjjjjkkkklllmmmnnnooopppqqqrrrrrsuuuuuvvvvvvwxxxyyyyyzzzz{{{||~}}}}}~~~;AtRNS$$$$$$AAAAAAAPPPPPPP:ˆIDATc`iڲ"=i`W(˷Sbק̛ZWXTk(ݜbFLu^(Yoڪڅ[ϟXaVn4[ܾIk6Nɋ(Pd`Q9PW΁u;eU5;3Ȥ 8>rϖؤE3S%˖.xjҺ|:t붧]{4z2 YvjzԂ3+ 6[Ypc'$,PTUpxɭw--nOqd /ȝ!:Ɏ]2c5j#.m/L(ssvcO/kNh,Ȉrg`PN-(͈LN u qdRL^c|BTzzlh(B s##"T9!eify`?+9FvrqqaXIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/projectSourcesRbMixed.png0000644000175000001440000000013112167565271024256 xustar000000000000000030 mtime=1373563577.320318955 29 atime=1389081083.42172439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/projectSourcesRbMixed.png0000644000175000001440000000065512167565271024017 0ustar00detlevusers00000000000000PNG  IHDRj PLTE0005,7.A88-ᷰ%B-,4@,H,_EtL0Y?pK4H/_DA'D*M:W)γO7TrY.ւ$g+_FAz 3 ߑd$Mȡ9z>(w.z^_lz׵4]Ҥ^M`2`)G`dĽ5Vbymscuޯ?7Yͣ)~5y&lIq%!)+ËE'[?Pݰ\[O7mEd8 ='deWt8|o@E 8s9?5<%dGT4&L5f ;fKztÀRJRi\.xgDd)~_YszdlRHMcѬlN<.rէѴ .b߽{~ m~7֘R eKHNfxbѠQ0S &hz6j/ٹ0C!vC&' %!N^@R2bbF?xB!Lc() 0N8I?F8Iq}h)ǧH%qtǃ3yK1QqEA8񣄑)LbAh1'^ɺr0(f%70u Ci(M)~GA k:mR43 0Vcw8:;[:DҘ:fQeL%0Õw4f0x5lL4P/tq_lvuQBФɗ&w\E!~rFM6[$ Z=j?Z0G1B^?)H/xFe!$NpbsWհ^ u?<[適C`CTJ" IS("_nCFSncƾuovu}8תeJfH 8.Θ(Q8LSgy?~{/V<}zRyĩ)ln1Yx6$MBQ ȐLNc[ƻW'݂XasqRt%`Zz}Vߧ1(ewZ}O3 /<0/ѢK&94lCJlYP/Jnl$|FFOe Wwyh5}/ f6JC3ddh ah|G'|h5 !,Tȼ}kO3n,f"*p[ݸ [@/M?+ZysIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/open.png0000644000175000001440000000013112167565271020732 xustar000000000000000030 mtime=1373563577.214318836 29 atime=1389081083.42272439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/open.png0000644000175000001440000000206212167565271020465 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYsvv}ՂtEXtSoftwarewww.inkscape.org<@PLTEdxSezr ... 111sqhh[ZjNLcY~AW@ԃZZ[[[\]^7zcf6zil_rs-r-s/tLsabef,r/tAjXZ_`dghiiikkmrrrtuxyyzz{{|}}}~󀖯䀰셵捷ꍻ쏷鏹쏼ꑺ蔾ꗿ옼蘿BXYHtRNS $(;?EVF)ԩɴ CtN/̩4"E߯~"Raw +Pf(23 ,Ѻ6fb^a>m#aY`!pIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/continue.png0000644000175000001440000000013112167565270021614 xustar000000000000000030 mtime=1373563576.922318508 29 atime=1389081083.42272439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/continue.png0000644000175000001440000000027112167565270021347 0ustar00detlevusers00000000000000PNG  IHDR#PLTEO`sVɭtRNSv8TIDATQ @w?dlpfh@ޚ(ދcء~0)IL NL ǢD&p> .IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/attribute.png0000644000175000001440000000013112167565270021773 xustar000000000000000030 mtime=1373563576.868318447 29 atime=1389081083.42272439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/attribute.png0000644000175000001440000000036012167565270021525 0ustar00detlevusers00000000000000PNG  IHDRR pHYs  tIME!Vj(tEXtCommentCreated with GIMPWPLTEdddmmm StRNS@fbKGDaf}/IDATc` 0 @ch#!f8AJpT"9 ،!J=IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/fileModified.png0000644000175000001440000000013012167565271022350 xustar000000000000000029 mtime=1373563577.11131872 29 atime=1389081083.42272439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/fileModified.png0000644000175000001440000000134412167565271022106 0ustar00detlevusers00000000000000PNG  IHDRj _PLTEf !!!999OJ9xr]@4 PA5+ ?5`S,i]7n_-na8{j3s7x:InCdGUĴŵʶvȰջfmΉАמܥxtRNS## aTg#t|iXfFBtfD=v!,DTx^{kIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/syncToc.png0000644000175000001440000000013112167565271021413 xustar000000000000000030 mtime=1373563577.384319027 29 atime=1389081083.42272439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/syncToc.png0000644000175000001440000000243212167565271021147 0ustar00detlevusers00000000000000PNG  IHDRĴl;IDAT8}k]3{>GG#ˊEvU))qK/ RH hB(<=o})mBZҴ)%֔B [ST'c7]GϾ̚>H]y|QσVK& KZ ǫQy.,J1*^4߾z+WKO)jVJetYnM QslH5Q]&Ư=|wW~BTNڱV7:\{)"j)7*j])E.n]`$Għbg>ss/ ֆ.hjZ Լ (z|=0Eȩ*TS?FsKp(K:Zv}љc '>dt[G&{iRP"+4U ѤOP$y^<)`u ןdrn&1=2Iyxsc I'P!hxck-[ N c =Jc}(/ c i1 * s,e1k,OlO~o1ƙCSl,Y>X} f-*)VR_"3)I@?{iuyBYN_ۿ ՠ<"#!+ ``#)NIX~F7 ()z`ϑ1vŸ6~s (#3>^x]DY` Ȋ !ypQ x}/v1(L ?Ωoѻśosskj8N!Vc-gXB7uӏ8:ry]>ټDSa0^\8u [_={6>WN;}noQj@+/^e-H(=^8$˵YE?ŵ"*>IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/altn.png0000644000175000001440000000013112167565270020726 xustar000000000000000030 mtime=1373563576.865318444 29 atime=1389081083.42272439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/altn.png0000644000175000001440000000120312167565270020455 0ustar00detlevusers00000000000000PNG  IHDRa~e pHYs  tIME3Bo&PLTEZ \ TeZ *9Q T V W Y Z \ ] al rv);LARCTDTDUL\N^[lfj prv"{&Yj`q^_;LHY i k l"'-$5%6&7'8(9):*;2B2C5F6G6H7H:K>O?O@QBSCTHYIZK\O`PaQbSdTeUfVgXiYiYjZjZk]narbsctduhyizk|l}m~or}~4*tRNS bKGDaLIDATc`1%4 ($&1p!??wWG;9:'_/owG]vKltLD>B'ɡ(' ~9 w l4Jx\JdX\THhL? g^IR?>}z X,VںZK"###͍mmm-]tR,ޮx<~qhV(V (/1-"\L|y&Kcnſ牭?f 8:*DhFu،j* 7@64As4<ٶOE19ۘ_sZDmQhjigz"!P [d;^g7m^<ۦ˹|7^ jD!4x4DǶ߳)6o"R2M0!͜5k;0<_+AD!d8>ЗG0mrl+8O: c1f74T*+D%@[`Y`/*ozp=rkRa#V:IR"XE"9@&Akx>D~"3&ru#8/yu|:4iώ:BAX c8( bF7s\rfwꇰCXwuuuٽI&:yq;P?ȥ#oQ6o<vCIx SRƙpaKPTʬ? qKs S j7gJ"eH-ER2;k춘^bjȮ tݐ>? x'x[H –RhWP|} ~Q@}IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/configure.png0000644000175000001440000000013212167565270021752 xustar000000000000000030 mtime=1373563576.917318502 30 atime=1389081083.423724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/configure.png0000644000175000001440000000400712167565270021505 0ustar00detlevusers00000000000000PNG  IHDR$x pHYs7\7\Ǥ vpAgXbKGD XdIDATHǵyPWLPYE]#jy@`1x,cHnd% *D܈$ lG'"x dW=v/M|u7Dx S6*˕DJkR ˈ\~jmrc yXiwƚź3K!JX+z8 $~D>r+z."R t041֜PY&b:VbAvOG ɃɝmRW.w 9p"yKyiD̔cJ[s6fgU]0xdSYafxoյh=dnn`ʅD@K7ߗݗ՗X@`cxu:(#{_q- WwGa ڷ|WI3ю&`lhvEk1o> שl\Ҹ⛲9rryzvGDhxۦvہ̣ Rqϖ/As6{k8/6Ր*Z/.&PsܔVE뀨ZtϛQv7piǀ(ᯰ8sz`vJ>GfޛVv`{B!ˆi sV1R]w =|oѹa@u,\p퀟7o[s`KC  q3?g ݵm澫޻yOykRKGQ j Dlfo]Y =J4_` 3KnPd7f?T}2.n.n.9)ґUtU j_T_F>Հcdl/EX\ ˆ"d§K'MOo"D ^mZ[|9 : _5 f{*YL`&z/]tA6< \I^AR h*<2H<Gi`kY=__/ЯV&]?z*@`V؟+BNI:'Ndc48/>YLU~3d<PY+axꦹ>Jaytttτ=+ i(E\'~Q X|v?h v"zTXtSoftwarex+//.NN,H/J6XS\IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/editor.png0000644000175000001440000000013112167565270021256 xustar000000000000000029 mtime=1373563576.96931856 30 atime=1389081083.423724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/editor.png0000644000175000001440000000235012167565270021011 0ustar00detlevusers00000000000000PNG  IHDRĴl;sBIT|d pHYsaa0UtEXtSoftwarewww.inkscape.org<eIDAT8ˍKHwcVZt'(řꨵP/Tݹ ]t"ZTƍ+ ݌k;$hyG1R17 h’Rա' +j9I z(!AQdloo([eJ[ И ),xP |NOOJ,--}'K4U. "PUUL!#W Y50?H0kcDo;8Fڜ9@ʊqy-HrQx ?=ox"b xYz<2.H N l.C`6g<^vU?3j&`0X^3)ce[b-4l 7@qZ뛭-:g3a2_ΛR\fbe_ka9IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/multiProjectOpen.png0000644000175000001440000000013212167565271023275 xustar000000000000000030 mtime=1373563577.185318803 30 atime=1389081083.423724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/multiProjectOpen.png0000644000175000001440000000233512167565271023032 0ustar00detlevusers00000000000000PNG  IHDRj pHYs  tIME rntEXtCommentCreated with The GIMPd%nPLTERRRfffxxx-reeettt~~~nnnfff`_yyy^֨Wyyyvuxjiݏbbk{wzĆnNJrUxߛzlᰵQPَHzZґҿARs˽do򌣿CKPQRSTXYZ^_cdeghkllmooqstuuuxy{|}}}₩݂݃ڇ܇އٌ퍮ύ؎퐞ϑ떳Ԗחߗ똮ʘ홲ə՚윿靪ٞƟ֠ڡ٢꣮Ф즽ԧϧ쨰߰ñȵ๿¿7_gdtRNS!)+13445y?Q$aӂ{k^0HU &l>@FmXsÄӚw,r@6^$;?$<@$C%>D$?D$@G%AG%AH%CJ&DK&DL&EM&GO&IR&JT'KU'KV'LV'MV'NX'NX(OY(P\(R_(Yh*[i*]l+]m+^m*^m+_p+`q+aq+ar+bt,dv,dw,fx,fy,h{-i|,i|-i}-k-k-l.n.o.p.r.u/{0{12122333334344555555565656676777777778888888888989999899JXIDATc 3`U]\RawN wxjiC`)en2,\r>USev"FΎ: B07>ʶ8M6!~diF\ .4SQ1 "'0HKF kX +g̨feO,Tgi iq:eoob4 js:ֹsr65XguyărT{|b\E &@ܝ.ˠQ"¬NjtAC}#u4k\-U٘B;aAUͯl-.1cbV}D^S$HtPLTE@111+33...555111DDD,,,111111CCC=== :::***:::***222::: DDD222CEC8>9:<; ;;; (((AGC222(((:::DDDDED((( CCC 333 (((;;;;;;222;;; ((()))111222;;;DDDK '_tRNS !"##$+,.2455<=?@EHKNORTXXZfmt{}EIDATmB;N}n砼CyH—p8z9O%ގ-ҷ1tn'=s5>˩2o.24Ltd[ vsRG-񙇭x`󼫍&t@kZ'9drəF<gW^ee,(1Tm}*H#-9cOmmےx"N:Fj6ĢļDZ7GQEOde DsiHQ$'t%PEUjvo.`"[!DY eRKVH)QBP?z܂C8Z_U>I(B9 ieշJ+R8hIxOVFrcH)~)$ґHceBsi2X.⯫)c9DL *&bPAa %\1tŶ#nB.mP qpa>QeB,7Cv=^S}qѿ^}nhEA%-[$fb%_~F*j">c7 ,ьw/Z4qp!0 Щ_?(]Fs}(OXFLU_H-|.qYk)zr?)zYV}ߠ6?~ۖEch 7ѧ1Ȼ0?X1urJ3WWOH|1P(Jߛ3ۓ4PLKpeʧX,fw;IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/multiProjectSave.png0000644000175000001440000000013212167565271023272 xustar000000000000000030 mtime=1373563577.193318812 30 atime=1389081083.430724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/multiProjectSave.png0000644000175000001440000000226612167565271023032 0ustar00detlevusers00000000000000PNG  IHDRĴl; pHYs  tIME !R6tEXtCommentCreated with The GIMPd%nbKGDIDATOlSu_۷Yە ` $Ĉfp51L(LDgO^I&pXD-C m}mW{?Y"b28qDT*}8khkf$ٳ8ZJ!nLLL1I-cn w;si}tg<].yLkuen’12nm/4E~HNMMa%T2O+ٙ70O@\V/ccd)+KrrZƭBı#ٴlSF$0otttl|| 6@6|+*Yl.KecXQ:=N__o9-oLN_1@csϷ}o!m_c^=|rF.rXR]bxxÄQ*!@BNBR*mlZ:u8w.!D$m-&Z֚0 IHUƀ1N q܊\Mqۺ zGc6 Uƀ$"RH֘c d*'Eη]a7dZkRaRo |LfrlbWW lu]\ץ^3sc;sxo jVIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/projectSourcesRb.png0000644000175000001440000000013212167565271023270 xustar000000000000000030 mtime=1373563577.321318956 30 atime=1389081083.430724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/projectSourcesRb.png0000644000175000001440000000063412167565271023025 0ustar00detlevusers00000000000000PNG  IHDRj PLTE5,7.A88-ᷰ%B-,4@,H,_EtL0Y?pK4H/_DA'D*M:WFQYݢx0aZ 4"6@4pT2N\ZDl#"P(HV Č00u~?K>T8-qZ 4-]&[۳|WO\AZ/}ǓbOs";>IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/preferences-pluginmanager.png0000644000175000001440000000013112167565271025121 xustar000000000000000030 mtime=1373563577.270318899 29 atime=1389081083.43172439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/preferences-pluginmanager.png0000644000175000001440000000216612167565271024661 0ustar00detlevusers00000000000000PNG  IHDRĴl;sBIT|d pHYsaa0UtEXtSoftwarewww.inkscape.org<IDAT8˕UKlTUsoo;BS*kl7ą2&1&$7&`a\+4`Y"QJRy>t$ywwqq N8҆[z6(7xar3^q _C^ ODx˵׾?8G܍-Qe[ʣh XVyTnT_~723cߎ܇n\X:+<#K!ĥŸ,\:|H3 `Bio9DW 䎣8 / S(/C@g^.PŔ|nVƤuعQu>^By S7.)JIѸH ).%o_ Pu%H/n %9ujoG!&yO]*O+ذecӆ_7nC6npuAf " 8y =Z1E4G[fdLT77&"JeuÙ·kGܲ6IぞCq1.BU4gvY":p.ҒZhʍWR1zZx{@\6w E~Ǵhh`?.?*IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/editCopy.png0000644000175000001440000000013112167565270021550 xustar000000000000000030 mtime=1373563576.963318554 29 atime=1389081083.43172439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/editCopy.png0000644000175000001440000000134512167565270021306 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYsvv}ՂtEXtSoftwarewww.inkscape.org< PLTE )tRNS "#$+,1369=?FGINPQRSU[]}IDATuNSaFѽs$LsX> HC[zۑגwWEsuJЋoO,xzY}Gm?+Oz}ېaġ4Q,4!UIU2hH=,BCmQ@h 1]Uh(C]U"AK*%IC2Q"r@D+1f!A8?@yw&? '˻}/7P6y=rC8wtR'+1-4TN>IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/preferences-typing.png0000644000175000001440000000013112167565271023602 xustar000000000000000030 mtime=1373563577.286318917 29 atime=1389081083.43172439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/preferences-typing.png0000644000175000001440000000107512167565271023340 0ustar00detlevusers00000000000000PNG  IHDRnsBITUF pHYsaa0UtEXtSoftwarewww.inkscape.org<IDATRQn~(3 BaczVz މ㌕qlǟQDA1 YcrH`z 2HI2}v7Wkҏ};m4-l^͙Hov a%y)}d(dHp@& [lp( }I$9XbaLsHCiȀQmj`L *aHqFb c/eOh.ݓ?REN~"SW9"rEw1T%τŔ~5C oE X K: B\b"2ep>M0g@JD* *WpxZCAőI(823$', X~GHX&OE= >puJUs{^;JQ@2ܩ'IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/sceneWidthDec.png0000644000175000001440000000013212167565271022503 xustar000000000000000030 mtime=1373563577.348318986 30 atime=1389081083.432724389 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/sceneWidthDec.png0000644000175000001440000000135112167565271022235 0ustar00detlevusers00000000000000PNG  IHDRj pHYs  tIME/4zr7tEXtCommentCreated with The GIMPd%nDPLTEб簰ѳ¡((45ݵEg1O/EtRNS #*+128:>@CDE]a詜bKGDkReIDATANQE&$&r8qؑ`>U1Hx[jD⨨Pt[vn&~x/kh~rc.3L׸h@΍f` Zpde36h6 ep 邋̐L=pR ,mUdum#SvG_C1SIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/splitHorizontal.png0000644000175000001440000000013112167565271023176 xustar000000000000000029 mtime=1373563577.36931901 30 atime=1389081083.432724389 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/splitHorizontal.png0000644000175000001440000000116412167565271022733 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYsvv}ՂtEXtSoftwarewww.inkscape.org<PLTE{{::Ҿ|}Ա1 tRNS !#)+34<>FIMNPRSU_IDATu@@ѵv+6xI&m2&6Sw]Im<+(em>|:րkpZ}K|U=&g/V6s: U0aLS$ ;7LR*h*џh:\_ E~i O1q86IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/preferences-highlighting-styles.png0000644000175000001440000000013212167565271026257 xustar000000000000000030 mtime=1373563577.256318883 30 atime=1389081083.432724389 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/preferences-highlighting-styles.png0000644000175000001440000000244012167565271026011 0ustar00detlevusers00000000000000PNG  IHDRj pHYs^tIME ,nPLTEzKHEEE[=IUaxV1DDDzA$$$=IUaipwx1@@@444cF'''}`RR$C622_4!  1+++BBB  !  JJJOOOWWW$0:B#C!EEG^^^```ggglllnjj[UUEg__ ..444IIYYaaccggllqqiioossuuww   !!!"""###$$$%%%)))***---. ...///222666777:::===@@@BBBCCCDDDHHHQEETOOUUUZPP\\\cf..fffkkkl]]nAAppps t<֦=U3ywѨ3lIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/selectRectangle.png0000644000175000001440000000013212167565271023076 xustar000000000000000030 mtime=1373563577.354318993 30 atime=1389081083.433724389 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/selectRectangle.png0000644000175000001440000000127212167565271022632 0ustar00detlevusers00000000000000PNG  IHDRj pHYsaa0UtEXtSoftwarewww.inkscape.org<>PLTEXZ\`be3688<@9<@:=A;>A;?B<>AAD?ADACGGJOKMPKNPNPSOPSOQTOQUORTPT[QSWQTWQTXQUXRUZSUXSVZSWZTV\TWYUWZUX[UX\UY[VX]VY_VY`WY\WZ_XZ\Z\_Z\a]`c_ae_bjbdgbehbekfimilrprvvw{wy}~͹ftRNS^j׵IDATъaɈK8[MW.[p0~}UO{[w^99:dmz7ݭۈ_ Vf計?>$$*Mw3,3 &55:' ZXB4Sޠ\$U~G}-eHRMZ4e&ejْb&JRUxa`b&e =< bʟOv|OIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/method_class.png0000644000175000001440000000013112167565271022436 xustar000000000000000029 mtime=1373563577.17331879 30 atime=1389081083.433724389 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/method_class.png0000644000175000001440000000074112167565271022173 0ustar00detlevusers00000000000000PNG  IHDR(-SsRGB pHYs  tIMEiTXtCommentCreated with GIMPd.ePLTE         *" //  +&-.($,-*(8r;bb=9Qfmמϸ;tRNS**,,.BBobKGD*SԞIDATӍ PLN^ 03rގ4B nZURmuJέ|cRB4n1_xV;F Cy)[y9[,pe),sIM{it|tx xIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/breakDisabled.png0000644000175000001440000000013212167565270022505 xustar000000000000000030 mtime=1373563576.887318468 30 atime=1389081083.433724389 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/breakDisabled.png0000644000175000001440000000071112167565270022236 0ustar00detlevusers00000000000000PNG  IHDR7 pHYs+tIME /bKGD̿ZIDAT(MJ@'CdU /a]mY+u#M;+PxAk-p!"n t!jLS|L$ߟ0 Wyy;<CcK\\\!25l x#i_=ڠgƴLU]Q-N|H@(2<>.``Y^†?*@R0P"ݎщvvtc#:$Ϝ$ H2IBe 7?ĩ@@ IdzQYpL@TpH*V4[@Ud2L&aiW5k·*d*dOВ=^PX溡ml۲|kk1:z^6U ˭:碽j55:5&Mٺd]o\||[@qtw{R}"VX u|ݽ[m $װ+o﫿=l?.:>=)-ZoIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/profileScript.png0000644000175000001440000000013212167565271022617 xustar000000000000000030 mtime=1373563577.297318929 30 atime=1389081083.433724389 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/profileScript.png0000644000175000001440000000245212167565271022354 0ustar00detlevusers00000000000000PNG  IHDRĴl; pHYs  tIME()5+5tEXtCommentCreated with The GIMPd%nbKGDIDAT8˕k\e1f2sPMմÅZc[ *VZT\ .)^Q\ u)VEM7*&&i:Id&w9I 9{cN=׽yS*$bDJOH=7PՌ  I3hJ*K2Uj]h#ܢX ǎ+U)od _^c9Z K3*FUE<La lA4*UR3'w \N 9xݏmLAEhd "ZX;*=cw'`% ykbQNF5CSV{U`TҔDhJޖϿ ^&(vZЌjGgtt҇ǿFq dաQ^x<ݫ 1heR$ƅ^&~3u#BQJqPYagˡ@NM lDZ&iҌ1/w"aY1X".my47)&-m>0222sFPQ,9`-8JFA3$ru+sU)R j}X9oaja-NŨ~nV;PchF$T73jEٹ9&}nHk0Y5r|ЅY-8XhLTvO7#?gB傋V$BNc4ȶmPch7$a982200`Ukݟ~K7nCN+t4SMFҮmL^G}, (Bei{,Ɲ7Z`T)!ϼ&9R׈x3^~>-ʌ YTЧֽyo[͑ xw17M,pQ~cQC \ϣsߡ.\}*f8{Ƕ=?FIPSUڂ`VIDATc`? r@NARQI ()JeeP! tKaB'(,*&"}$a#P`VlǚxS*25`WUy/L\=$RgW )Auǚ8ַdP4>>LAcG~&}j{'dRJo}tGxӐmy URt^gdR? `B~w]G|sP`VlZ^3g@TPȵl/L|}H(lXm;v)Kś θr9RTpae 8W-MĖMaV.sX/IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/anychar.png0000644000175000001440000000013112167565270021415 xustar000000000000000030 mtime=1373563576.866318445 29 atime=1389081083.43472439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/anychar.png0000644000175000001440000000236112167565270021152 0ustar00detlevusers00000000000000PNG  IHDRj PLTE +12 \ y  `###!%'&+,!%&~&+,!%+-  &+,!%& ~g crr&+-&+,9S8N )4:!%&mw !&'&+-+13!!%&yj  4K +13+02   &Jl +12 +12 x 3_6i  !%' &+- ,=Jnpstvwwyz{}pv v!%&!%'!~!"&+,&+-&,-+13-6925=B5DO>>AAACFHMNPQT`gmmooppqsty{{{{ Y7IOIDATc`` g..^F {E&d`Ԁ@02E%߸Q HX'G!3TL([Jg;;f@,Am3;lWa`H^iP 5:h?ꅚ@Rp딲E 齳AyB`Qս1Y$Ry|{[<ŀ C }R[YN~ȥa um@9Z@p'-BǙs^ppڳ_50uߺ}zz &z X̜"Ҋ:&frRBlF=IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/cBreakpointToggle.png0000644000175000001440000000013012167565270023372 xustar000000000000000029 mtime=1373563576.89731848 29 atime=1389081083.43472439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/cBreakpointToggle.png0000644000175000001440000000246512167565270023135 0ustar00detlevusers00000000000000PNG  IHDRj pHYs  tIME 1S\tEXtCommentCreated with The GIMPd%nPLTE"-=@$4#9#:4[ 9tBr@r@f:d8^5`6$;"3M,Ho;]{e|,De2Yc.HnqT|-VŽJR̠fnCSf b dgimoѪw~P` NjzNvNd@rHJ?%lGuYh!i!q,t0jF0Mw=QijFpw8Z@_DWmLpMNPMgOmOnQuRe~V{WoX}Y}Zy[z\~\]~_}aaagV;ghhhiijmnqq|}q`~~ʖl/kl jmo!ehtsyqusDŽ%̭Ϋxϡ_|ӣ_ԩrԮxյն~֠Tׄד1ױ{؀؁؅حpفن٪mڀڱ|۵܁ܧbݳ}ݺރߧW߯q߳{ĝr|࿐˫⻈⽌㺅㻇>nz{弁ƝέJZ滄Ś罁‘ƛ軀~q}鿉ĕջd꿈ÐƘǖǚɞ̢ḳ콀ɜˠͤs˟̡ΤҪӬ԰ղЧѫճծظҩԫױֱHtAtRNS .9:;GHIJR{0bKGD۶xlIDATONa~_ S[RIMčk7x<pέ;1bѰjo^a…1\ADVM;\2\ΫFU',`ы"KI},Hwȓ$YV,ful74{ezY-@02ow'AҖV{}M[@@VX>l'5 f#h^N B/U#@ ֝ ` oO6OF$΢@ liJaS,Dgu%׋ڂVi1XGˏvʇE֜j&<鍝 D?r|| IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/privateBrowsing.png0000644000175000001440000000013112167565271023156 xustar000000000000000030 mtime=1373563577.293318925 29 atime=1389081083.43472439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/privateBrowsing.png0000644000175000001440000000110312167565271022704 0ustar00detlevusers00000000000000PNG  IHDR(-SsBITO pHYs B(xtEXtSoftwarewww.inkscape.org<PLTE  111666 Z[13yjjjvvv pqxy"$c̈ 14@DV[X][`]b]b^c_dm%CtRNS 48:>NXZj|lK|IDATc` 0"qut %\nuk__c-)._PYTWUA@SBNEQ_AMHICl*l ,BrIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/drawFill.png0000644000175000001440000000013112167565270021534 xustar000000000000000030 mtime=1373563576.954318544 29 atime=1389081083.43472439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/drawFill.png0000644000175000001440000000265012167565270021272 0ustar00detlevusers00000000000000PNG  IHDRĴl;sBIT|d pHYsaa0UtEXtSoftwarewww.inkscape.org<%IDAT8ˍ{Lg_$*F S 0#ё]9$3@]ؼ$i NPl((-"BRnQ-@W,Rm!o%tK}sW6K~o-}A'ϵ#N%aM‹%ׯT%0&o͔|kYF"&1ȗ_՘WjPmM())AZZbbbpuBpvz.vvLb8bBH[L&ڊ2b")) $bB)}KfÉ::: .Iֿ4B :a"v( d2dff"++ nfVb|81{5D'FGzh(7m Ɵ@Ut.%N؉EX|\ Պqx-` Fy 5Hh: )wBze?I=+,8[wӳEg6I}O@gC|Ѱ?1\Wfpu\!@rPOO3pzo W,p.·al$E0?Axxxgwp)qxw̩S Lzm'jW`t11tt\!KZMb'"8rBD<=.]ڮR[y5p4It>jE ؈`l@L|7[`omO-@M:C{nDUUUoTT/Ǜy D"oa `Bo4{wMMM^ks"""rssG2oir?2tuu9(eaaa+u+c$x{Gŕ7$$wnf`\LL*K;*&x)))Ie/7K@;4]]qٙόo ?E,JcCCC"bb1{c~)Nsr_Zز:~쟖.`#ZGħg|2̇p# o`0\IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/preferences-orbit.png0000644000175000001440000000013112167565271023407 xustar000000000000000030 mtime=1373563577.268318896 29 atime=1389081083.43572439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/preferences-orbit.png0000644000175000001440000000150112167565271023137 0ustar00detlevusers00000000000000PNG  IHDR(-S pHYs  tIME  IU>tEXtCommentCreated with The GIMPd%nPLTE'%,%Dx"  ]%t .SyYXJsT!qYA|]Gy_(h`@wfkk%Nn?mo#xIcyU_]^STu*ұ!i!ԁLzUv(B^av=_uc]gt(HJemkdqLT'ؒĐ`sUw@JiQ^|| D@%0/-=7E?<.)!=??4q )0a` dԕ͕x^7QG$+2')fBIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/preferences-network.png0000644000175000001440000000013112167565271023761 xustar000000000000000030 mtime=1373563577.266318894 29 atime=1389081083.43572439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/preferences-network.png0000644000175000001440000000244512167565271023521 0ustar00detlevusers00000000000000PNG  IHDRĴl;sBIT|d pHYsaa0UtEXtSoftwarewww.inkscape.org<IDAT8ˍ[lTE9sn{JJU>HLE͘(<`4ZBr,s?g|-0df~|b75`8/ӷnOk7++2+1z`'/+tm#ؠ?;t}ocֶDgw 2YS0u5&%pԆ/eZ_b&yF'%ZU͂^aCw3L˂?#p̣Q$jC:}qhh/p`.I@E31Zy ي M])">tv4@)L BUB,LAM7]0R)uŢVB`KXB*WEf ‚D5 O$$zߺ~X;)d*\"yg߲C)x9eTZydXF۩W'>l5Q?#>8K1  ^)͛3{CGl^dځijbłUV0{-߻0sv95RȾ}Qqxdĩ):8xtİxD=2'FcMxwݗxߢi#˲t \ mqX|>wahh蔮뮪N"1<<Ͳxoo+R*=QWW!Xܛf߽,40=/IRSJ)G)X~Œ,}s5IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/syntaxError.png0000644000175000001440000000013112167565271022331 xustar000000000000000030 mtime=1373563577.388319031 29 atime=1389081083.43572439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/syntaxError.png0000644000175000001440000000145512167565271022071 0ustar00detlevusers00000000000000PNG  IHDR(-SsBITO pHYs:tEXtSoftwarewww.inkscape.org<PLTE76 * $$$!   FJ   F ---BAph"Jpa cIi X Vpi'FLX i/0Nbz99'+%00W,,0 S=5pg !) +.&1""W33]G:cjkI8mqu}KL~wp %& 66[U  8:34PtRNS ##)1334778==EEJQTU[]ccttvy~9xIDATc`&"@3##8\]KITLQ .kj$`m M WFTԜj#U*8=k+ 98!ZKJrC =yfp$d8Bdm*sDzA)Y&}siM$#!3Dȁ`HE cCIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/preferences-autocompletion.png0000644000175000001440000000013112167565271025332 xustar000000000000000030 mtime=1373563577.238318863 29 atime=1389081083.43572439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/preferences-autocompletion.png0000644000175000001440000000253612167565271025073 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYsaa0UtEXtSoftwarewww.inkscape.org<PLTEmmmȱQQf3___q9bbbY(###ԞM!u5WWW.r5w3&"'''7TTTccct2+++m; {.JkK """r1PPP''' _ ۆi(䨃 xxxo`S˩жJ{Xs0HHH%%%r0A ngggƜ 8~Dw4Gu-r> Y[$$$ ~~~}D3Ұ72~+ Cy^_.s1ʨ1@@@s1qLs1]\\>;BBB KKKY """h)/3"7 ~w m^QP"!!!666@#ZZZ"s1y-q ,./UM2tRNS  "&'(*,-..//122346::;<=??ABBBCDDEGJJKLLLLMQQSTTUUWXY[\]_``bfgiioopprrwxz{||epPIDATc` T̨H#Q"57?čLF&Ni۶}˅@U9zbn@p_Pצk10Ԓ̻lR4P}ک:팼^gf22Tl;0Q #iD#}[̷XoSewbx'jn߹y W 3''U]4ϳJ8'ͻX&-kxz%00Kˎsoɣ3:1y;0M2Œ.3 3r8=SAqLaFէ˰3֬HSj>|fIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/projectViewer.png0000644000175000001440000000013112167565271022621 xustar000000000000000030 mtime=1373563577.326318962 29 atime=1389081083.43572439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/projectViewer.png0000644000175000001440000000202312167565271022351 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYs B(xtEXtSoftwarewww.inkscape.org<@PLTE,,,000ffflllg"n1o3p9>>ACzCFzF{HJ}JLMMORRS[bk^_ek_effhowhikklqwllmnnnopqqqq{r|st}u~uv~vwwxxy{|||̀̂̂̅̎̎ҏ̏ғ̢̘̞̞̟̕tRNS!&M_`fjgH'IDATeJQF{75 !ؤ|;[7PAl-l|-,L,TB/q?ww-o1Bﲢ wWV؛7h?[݅+`;")VQ7CUeɣ8Uu=a$iK|| ǭN8Jl[FgfKQX^"-4Nf$IPzXlKIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/yahoo.png0000644000175000001440000000013112167565271021110 xustar000000000000000030 mtime=1373563577.477319132 29 atime=1389081083.43572439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/yahoo.png0000644000175000001440000000043312167565271020643 0ustar00detlevusers00000000000000PNG  IHDRj TPLTECCCUZZZaeeempppy{{{pp{{eeNNOOCCFZz_T#+G'| ƫJ/bhJzazf ,9 3e!u:b4e!k;ZH/gHznYg̔#dj@@ [W^lga)Z71co"dkiGϕ@2y * S#-, 35I&a}LeR:)q5\ݭLӔO0q*%x<( `$P*zPRRek'4{q{2\q-w;4Ć0:1rssX򐝝 P !!Z!tWWH꣪ h (_H$Baa!`ªFQQ!Hq̐Ak,K"WGI/o22[p=M&#}9𽀫!gNr>Uqtƺ}+^!09Ev9\BԒG!!=P۹ѴGY=RzJ/w<`Ϡ)s%<]o{f/Z#gV]yu)AA&[=Ol%v̷D('腏cIK[;/~?;x|̵D?l˶X%h.1͡I1_4 Sr oh_KQ|,{ac9#-6 i8uXh)M;&QT][ .9PE_L)Uv8t_q=jn`%>>AAAD GGGIIIK( N( RD9RRRTTTUUUX(YVT]]]_<"`-`?%dH0fbagREic`l4ooopVFtG!w8xDxxx{]C|A |eP`4b9c:rKyUgFtRNS #'.3CYfaڴ+IDATR@ 躘b94%/t}TdSK.7}0T٧2( ik< Ȱ&0ڠg]!s099ca F]lagRd+92Im7>^H6=V}YZzy3Շ7~:ҙ5=S{c5a&MT2w+!.qy,\l _飏" `)e 嶈pp2[`2 PHy eͣ *~W~29ۅIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/drawLine.png0000644000175000001440000000013112167565270021535 xustar000000000000000030 mtime=1373563576.955318545 29 atime=1389081083.43572439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/drawLine.png0000644000175000001440000000061712167565270021274 0ustar00detlevusers00000000000000PNG  IHDRj sBITOtEXtSoftwarewww.inkscape.org<xPLTE14614614614625725836847958:59;7:<8;=9<>:>@;?A=AC>BE@DFBFICHJEJM14625725836847958:69;7;=8<>:=@;?A=@C?BE@DGBFIDHKFKNIMP`%tRNSpqrstuvwxxzz{||}~ >LMЬ[L)Z];YΦ4fPoc%gu5 P:E`(A-^!d tER88O#VsusKV&L-\cZ3>NG,TbS,I$\# Bc_}:˗ejX{MTJuL _ZqX25YClܰjJZaMi9I ,jk?T&[vB (Es=>m[x]AGȥ5Wޝ>Bׇ1ZV4 ւBKX7_8-uw}-\fvLt :g^y mVP_VPM&œçvn\ի _b3ܘnAj}d R&41}&$u.\'C,>s v\朗0`wIRZA a$T-S$| d\B!۳|"k"Ҽ'[JD1A}&h7ଥ<1M{AtjZ *V8v4̗v乣יnyw\Vqr\#H@E1Sx(mPhDU$Ҝ!g<ɧ#/{h87ALwrΡ:{zBPẔz>%m=[ʑ#G䁞r!] o ]X%bQ7lusn]z,ݛf20?oʉ'D\KGC=]T/'UvesE\; ۟ݻwk=y{PDLjUJ{7d ja0: 2hf$Z.zoJ+ ޹³m6jF00تpdv~蚜^IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/editIndent.png0000644000175000001440000000013112167565270022057 xustar000000000000000030 mtime=1373563576.968318559 29 atime=1389081083.43572439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/editIndent.png0000644000175000001440000000130112167565270021605 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYsvv}ՂtEXtSoftwarewww.inkscape.org<5PLTE555DDDFFFUUU[[[bbbFFEZZYnnnqqq.46;;;CCBCCCHHGJKJMMLQRQRRQUUTVWUYYXZ[Y[\Z]^]`a_ab`efdfgehhhhigiiiijhjkjlllnplopnqqqsuqttrxzvyyy}{~tRNS"p;IDAT.Qs7; A"[ NBBg's@1e2)Zf0*y\ 'su$ =#!5yI)`4_Z L/-n~XIMxˣ$4f;kJf?|HB6{k<7ª Я @z9=ܘFL˜8Cua w% IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/grayscale.png0000644000175000001440000000013112167565271021743 xustar000000000000000029 mtime=1373563577.14731876 30 atime=1389081083.436724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/grayscale.png0000644000175000001440000000042112167565271021473 0ustar00detlevusers00000000000000PNG  IHDR6q0PLTE000XXXtRNS@fIDATc`@i`aCzP6H] ~x : uuu`P__kؘ^&QN Y-pd_ZۜyS G@B=J[#B1DET50DU5$1]AYEGA^VLFrdGIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/preferences-exporters.png0000644000175000001440000000013212167565271024324 xustar000000000000000030 mtime=1373563577.245318871 30 atime=1389081083.436724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/preferences-exporters.png0000644000175000001440000000163312167565271024061 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYsvv}ՂtEXtSoftwarewww.inkscape.org<PLTE~~~%%&ggggggڄ~~~򥥤ɥt7>tRNS "#$+,369;=?FIOPRSSUVWghituyz g1IDATjSawtc)":r$^^N:X >X^9$ xĖdKb~=2@X->]t&*G_J%Uʝz'B^'ql˖\ qx?($Sv$i}{xnZر$Lqsv##ng(l !bw$@8|=͗F i($v}|9(Mf=x0={48 І6cQ=IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/back.png0000644000175000001440000000013212167565270020671 xustar000000000000000030 mtime=1373563576.877318457 30 atime=1389081083.436724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/back.png0000644000175000001440000000201412167565270020420 0ustar00detlevusers00000000000000PNG  IHDRj pHYs cytIME 4$z,IPLTE3a6h*S%F-Y+Q1_*N1^/R5a8k4U@u9Q"An&Gy(Iy.P0S6W7X8Z:c;W;^<_>aAcEaEiFkGlMqNpOtOyPpQmQvRwRxVvW}YZ{Z}Z[y\^_`bc{ddeghjjjklnnooppqqqqrrstuuvvwwyz||}Àŀ؁؂džÇLJˈˈމ͊Ɗ͋Ȍ⍢ɎÎˏ̐͑ǑΔʔ˖͖ΗΘϙ̙ОПҠӡԪ٪ګڶh3tRNS "%6:FIXevbKGDo IDATc` a JOS8p]TTg]Q9e 7ٻo;3 LTP=sێvﶱspvV֬Za۷nٸn\/ BPӔYs\v͚ /,o4mK/^`H.n-J %k[\VQQZj RL/:%"?9@^EމƦVJ03JVuNiy!0Cʠu9ъ 0"GjcPYSKsT@;˵)C*ag b`Vm?U%'IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/stopLoading.png0000644000175000001440000000013112167565271022254 xustar000000000000000029 mtime=1373563577.37831902 30 atime=1389081083.436724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/stopLoading.png0000644000175000001440000000253512167565271022014 0ustar00detlevusers00000000000000PNG  IHDRĴl;$IDAT8˭[hTGs.{=$Fúac/X$D"*y( |D_ƥDEE-X郩IԒ`ndgΙ~9̙70!MMa!`s}risw([k8?0Vy⮬T2L$=?4z>5H&o7ca+nmmeCƉݻ?:($1R Easar$f2_'_rEJ  mpNVsjjaD>OؖA tVlZ͹y̼{WD^P9s_X8YBޫWT"-.\~RPE|}r-477/YL\};kJWTE3t$֢Rpoј)>vXjg:QnNjr(sj衕:$j5k\p9Z%S؇W65|RU`.'uup74iP4X7o;\ E>;CU}ysMA::LP_xRH^h6 .=wvXd5NLklcir KK&`Ko" ;!TJhkϝovUPOqlƖ, X9^e籴-m… ?o:uwu0;w֎*"pz<רzrɎ +mmϋ^Me7[IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/configureExport.png0000644000175000001440000000013212167565270023154 xustar000000000000000030 mtime=1373563576.912318497 30 atime=1389081083.436724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/configureExport.png0000644000175000001440000000250112167565270022704 0ustar00detlevusers00000000000000PNG  IHDRĴl; pHYs7\7\ǤIDAT8ˍMLTW{ 3 `*H2)[&u&6GҖb M4&MJJZSA@ M%P 0z_KCjLŗ\{$zI|Aˡ>sar:U5 ]7fCzh2KQ)]3v;EEmW˜D&)q̙JÒ8334MX|YYُ NJl]I?GG>Bm^]]%ŗebSNv#_իkm7oz[f{ѣG jHubby@Up *))!ʗmUvŋ v:A(: mzz{?%4p{]]] 4FlKKKo"_ٓpF1囈:;^y#i|ABI433#2P(t]4ͱk.E9==n7HH&O~H$ǟ?~Z[[ K1=tc2M\rY:-´&ݔ(d^l"p02Wi_q 4arjQ({N6INsBx\#JtHQ MtC-LU!Cŕ!qxgϞ|jeZ_L&QBh1P?ȚH4nb|lll`M 3-˻Nﬨ@0|(l1d88'Ǔ*x0h4*fJW״477]έpk"D\RpIw2X0./w\G|999pE^UUt:ٕ+We̔jli&{^ X8 А+ELs0.1!*F0,xߚC|/XXL%IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/cBreak.png0000644000175000001440000000013212167565270021160 xustar000000000000000030 mtime=1373563576.896318478 30 atime=1389081083.436724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/cBreak.png0000644000175000001440000000141512167565270020713 0ustar00detlevusers00000000000000PNG  IHDR(-S pHYs+tIME 'PLTE2\2\\\\\\\\\\\e\c\\\\\\\\\\\\\\\\\\\\\\e g j l e m g i j d l __d i m \|\_\**O$-O\_l -Sr "Sj""\r Sj-"O]_r "vx"&/6;OUY_{| i4tRNS(,55555555VZcbKGDHqIDATN@̌TEL0?1B$Fbtv-7r5Y`@|- ė'־i5usϫ4>JL+WfDtv\Β|ŹiazT܃+6$?ቓ٣g'/‡1(_e_g^Lm_}o ! l֍d^$Y~?8IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/vcsSwitch.png0000644000175000001440000000013112167565271021746 xustar000000000000000029 mtime=1373563577.45831911 30 atime=1389081083.437724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/vcsSwitch.png0000644000175000001440000000170712167565271021506 0ustar00detlevusers00000000000000PNG  IHDRj pHYs  tIME le2tEXtCommentCreated with The GIMPd%nPLTE :!Oaaaggg9WEnakx.Lp,SmQx~Р4ZwGg,Lj'AZ/IkeIlw]dnNsVl}àXzmnw_tmUupMq^mqz,Lv8X;^?]@`GbJiKoLhQtXyY]va|b{dfkllmnvqry}~ĀāɄɅˈɋ͖Ԝ~&hLtRNS 8==LR_bbdmq|PKibKGD)Ԏ6IDATc`?`WrZτv3w"B\,00i3gϚ1]UZYPs*`_c)cWdbS u2L8)";?+6{z F%u-)YٙiIau-=U ƅ-}Bbƒ|'24wմٛ{Ļ6ԴV0Ohj-HTΨrz8]\58ĭxՠV^1)Q>6Ivf8gOkmIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/projectFind.png0000644000175000001440000000013212167565271022241 xustar000000000000000030 mtime=1373563577.301318934 30 atime=1389081083.437724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/projectFind.png0000644000175000001440000000225412167565271021776 0ustar00detlevusers00000000000000PNG  IHDRĴl; pHYs  tIME &=/tEXtCommentCreated with The GIMPd%nbKGDIDAT8˵;l[e߽88hi$DNZӇ!:v``AbT vE XR*Ԫ-iB۸u'}2@M 990==ѱ APV=wQ_&y*ɼL&?Yf's\ݻ_$%zޤ,_sܥ–em$ӧOl.䱱0Z Z&;b(6(W_ !bZ };c!%1oaK?xK *h0Nmr'vP ȀeBEiy)B\t@9Tcmx-j :[;C#y { d d$ K]qGͳ9+K67KăP}/OI?aApxdPqpH$r"QǶпufn`; UF! !uiiͺd!0lXAl^Ǐ `08w4K ,x& $Tt͡x}Qkضt01MsWUC` MGZk 8.~g|03ܹpIvڵOQ8ptp8?|bbuo0 j~@8Ώt( v(,k64JՒCu%gS8_87 zVsjӿ*:㋚G8_,}+45i>IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/multiProjectClose.png0000644000175000001440000000013212167565271023441 xustar000000000000000030 mtime=1373563577.181318799 30 atime=1389081083.437724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/multiProjectClose.png0000644000175000001440000000243412167565271023176 0ustar00detlevusers00000000000000PNG  IHDRĴl; pHYs  tIME  tEXtCommentCreated with The GIMPd%nbKGDIDATohugv7o77os3[AH) *eY "BETzf(`h # Vkv=Ջ^b~>bݩD"eYX8GΟ??800sԪU_~eYq}ߝBS"ھӣn,,+Mb%j T }ܺnYT, Nf&mvK DJ όQt4=cL&3~*KB5C](`y&!8S 蹳{ǎm=t_,Vzu P{?ǎ['*)^2>G}+)z{H_r7kAxѹRܥby;k&F&NNk-6EܙK8tuѲzr[BBsNϾQ>ZlղΖ $d _&+\24oێSbKeãE=zg0y6gh&hGoHb紬D=W!ܘI-YxJ!ȏd9y#lu@( %LElܸ1HkS'RvOɆ_a"!HS+,xIX|0o;Ί>a~^2l,Kк H^XIHC8"h,/0\n Y  \Ԕ/ >8[#և88;=479367lnrcegtuyqsv\^aegj\^avwy@BE@CFADFBEHqsvikmkmodfhNPSMORAEHCFIqrubdhtuySUXKNRMPTjknRTV\^aIDAT}Na:X j‚+.+J3ZTMa:9.ÿ%V֊ o+,'vN{a~-$ЃɨObwߺI[#5A}\։|{ ld;%Ģv0GJv/0P!' $3̇HH"ZA+G4&H0@( Tїɖ'f>) yZ`4X]Uטv:Wd5ilg=hE[dT՜n?- t׳jm )󛫚 MV| 3qIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/syntaxErrorGoto.png0000644000175000001440000000013212167565271023163 xustar000000000000000030 mtime=1373563577.386319029 30 atime=1389081083.437724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/syntaxErrorGoto.png0000644000175000001440000000241212167565271022714 0ustar00detlevusers00000000000000PNG  IHDRĴl; pHYs  tIMETtEXtCommentCreated with The GIMPd%nbKGDnIDAT8˕MlTUwޛΛv:30@[0L EDEAÆqM4ƅecjDv&5(2h;Laa>޻3bHONNrn9zw}k=|pY߫: yRݛwK|tϗ:2rd3{`8eѡRUocE76_RiUz94LJWj Ifr#Z?~(d [5p8g]x 5,RI" Zjii--imk[VMMlgJqypCT2_#H!H'D:j?==lc5&'Sd~T˱$J(,VJo+1 'dxhhhzFGCCwۺл^5ɃSOs}{l3qǩM>?L4 nD_MЄ讎AXm,_FIJ,8iDLWVGT0g83嶛BJQMc[ iF/]aCzaی؎OSO[L4ɾ2şw JYmV[\K%2 >Jgs{V d' 3XD".(6V-,gIIt8ͅIV(@=-k~Ş^!+EM)Ntw{>b]]] 7JqU)~#fr?_Q@;O -HlwgP(LqO$iZ);[9Ý|>] _c,?F`IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/projectSources.png0000644000175000001440000000013212167565271023004 xustar000000000000000030 mtime=1373563577.314318948 30 atime=1389081083.437724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/projectSources.png0000644000175000001440000000166012167565271022541 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYsvv}ՂtEXtSoftwarewww.inkscape.org<PLTE!!!999ҶdtRNS#&MS\l>z#KIDATm=K`ț6BiEAGA݊.:뢓?_*88"ŢFR՘4qh(=\.EPQ"P00qc۶1-7xY}=#i/o$vθs+ݐM&gAWUoϘx2y~;C %ژ)j=Vi\~{ u6f&рRGu3p4Ml繈N!vq/HPOFaBvgg&wAƖTv%\HJ ?OK95cDiIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/debugProject.png0000644000175000001440000000013212167565270022406 xustar000000000000000030 mtime=1373563576.931318518 30 atime=1389081083.437724391 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/debugProject.png0000644000175000001440000000245012167565270022141 0ustar00detlevusers00000000000000PNG  IHDRj pHYs  tIME' gdvtEXtCommentCreated with The GIMPd%nPLTEQQQ,,,000$$$IIIffflllƴ؎ڶg"n1o3p9>>ACzCFzFzHJLMMORS[bk^_`cddeffhhiklllmnnnpqqqq{t}uuvwxxy{|||~~˂̂эƎ̎Ҏ˓ҕΕʙ̝̝̝­k"+tRNS!&00369MOO_`fjqwbKGDVIDATc```F(`8$Y"JWBD9^+  F!— \+sjXy*|EG?jzHhd眹w^ _1]'s'^ б+X}¯Aojxw=cu*|  ye7ݸm`ӼW^<6eZĉ__<vwA]U)^>qѮ=t ]7-i1 @uL!IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/preferences-api.png0000644000175000001440000000013012167565271023040 xustar000000000000000029 mtime=1373563577.23531886 29 atime=1389081083.43872439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/preferences-api.png0000644000175000001440000000216212167565271022575 0ustar00detlevusers00000000000000PNG  IHDRĴl;sBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<IDAT8˵KOWœE?@M/颫.lHZuY5RԦ @pxp،m~1=s㇂+G?Wsh#'=b'>وP@&K ds윜!aU8SXE"%,o eGOq&MTaaqwz3$g+@C*s~ ɘl}j&DP 6VX2˖sxfiZZgefo'Y!^g8^9TvBcooh9w{igYv)Rz9I_o"k}wg]D ] վ{nyI2>2W"߻g$A&/M mzjXX[cp_q!<U)PF3ěX˄Yg`wBPa_|آHPp l)gRq5 ɱJ\4T{!k`*ncKԟgJ%X/jL .q[-U]  Ay'03Yč-b uܑu.!%H y{%B`Ӫ N5aU@ȺH95ƿK$NTV~ddfM0\p|ppF:n8ئ JH=M«Ci" |[:s2b),Jxv "ܲREi2!T_#ra2 Z +ͺ{DQr:\9 ?Pq~hևK9V<^  h+ #`^ YW@f۔&60VQtG4!U%`fsq:>=-L;ݾ?jaZSS3_^cvoeY?o+Z4ޠ:e p(PׁT dț7CNp<ުy/dN1lAQ@eDKbOnje'$%F:.W[ebE1; $0]ÜKZ.wV%)U' y:T_^6&41JOO|qhks[iV>_LưLU, cwx~~W#xuf`@Vff4%ih)ﵖXOJӎ;|BlIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/preferences-rbDebugger.png0000644000175000001440000000013112167565271024340 xustar000000000000000030 mtime=1373563577.279318909 29 atime=1389081083.43872439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/preferences-rbDebugger.png0000644000175000001440000000234112167565271024073 0ustar00detlevusers00000000000000PNG  IHDRj pHYsaa0UtEXtSoftwarewww.inkscape.org<PLTE7.2227.7- ;3 ]%%C  CQCA  +++11RRR 2 '''B-- """((($& (( 2*'P G= 2(YRH5M  '7/;/8,5,ILAPD4,1' lQmc!D. ! )))...2%444644@++N32S44X33\aX nsf>}g;}}}!!34,2$ *))%./DD443$&&556$O&?? `&121;;*[V%%'aWdTJ. "J4MOO9;"P5bHxdoFFN7V;kǾ`FM5ZC\DePwgv`JRqtRNS &&))),-.7789ABDEFHHKMOQXX[\bdijkklnovzz3HIDATc`F(`B32C:(4@-Ya.S5u~>M3Vaظ@6a$cNa0vaҢ<_aZm 3{'2fўbPa;mm2pd 31UNܶņ{&72 3:e+'"Y鵤vɣ}%6# [ϟ {f2A39uGoZ`ɽr̉ǮO e +ZEsͽÅܻ~h iQ0 G̹k18KBT} %K100+#B$$c| ZIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/viewProfileEdit.png0000644000175000001440000000013012167565271023071 xustar000000000000000029 mtime=1373563577.46731912 29 atime=1389081083.43872439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/viewProfileEdit.png0000644000175000001440000000223012167565271022622 0ustar00detlevusers00000000000000PNG  IHDRj pHYs  tIME ;w/'tEXtCommentCreated with The GIMPd%ndPLTEvvTaб簰ذqѳz$Ƞ'߼Hq1Gh[5¿d%#%%%&&&'&%+*)-+'.,'0.%73*;7(?;/A?;EEEFA1JD-WO5[Q2dY4g\8l^4n8wCx5z7I"((OífƯgúϱRбNҰFÔg*ֺcȟɡڶCΤ۳/ݵݽSwNq8Sٺ;PQ^DAm0<0534,GZtRNS ##*+128:>@CDEX\]aɆl,bKGD˄p+IDAT]Ja$3j!j)6(B]Cm+AMPЦEDF6hCST'Y;\H" !5_A€Crr^=x3;l8?*F: fފ@Ey*YoU42_l2ϝ6 FOWR> )-b%puhzy>3\V(Lja i VbYմ0FF0ִ l]3⬪ 3lȘ'"f6dxOq~6_*xIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/preferences-general.png0000644000175000001440000000013112167565271023705 xustar000000000000000030 mtime=1373563577.248318874 29 atime=1389081083.43872439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/preferences-general.png0000644000175000001440000000257312167565271023447 0ustar00detlevusers00000000000000PNG  IHDRĴl; pHYs7\7\ǤbKGDIDAT8˕ LSWics8g\NM&0f8#Ij-7- iKA) &,ܖH(wUp“s߻߹sxvC" ~8c-)k5N}iaqЋ_!=KtmZshlljvPr XD* O7Gt?7EQ>pLzrKu2 3ln78٬A C^yۃ \E}$WWeVLhK[zد5$˧v'xoݺIŽ=$xOB8M}Nwn…rM1SR),}]) vVf*sЙ |%tuwA#4E:}R%G[=ׯ_K 꼃w7}6:NJuPL_~vIr6vG,IHL@W\n;qÛk׬a:",S2$"$# =Ƌ;>X_U*H:\̑f]i})fē|&_'_]ţArKrb죤̀ݦGQ~̫񽾿ٔ.Qby.TFo`uoʁC\y+J8]{4RЋ6P?WsM"ZK_Qcyz{ 2`@kH{Q!a#h$mlynnnsss{CxeU!u"ikkklllC}tRNS  /02=BCQSTTWYYYY[]]^^^bddffgghhhijllmnpqsttuvvvvz{}R'bKGD!.IDATc` R$Q-9qU~HLgoݶn8̚>ʜɓVOSR߹dLXâ¢0am._t50a5QGܻ10a=Maζ֎aRc= tLv6hz&.-煻PceiWd7*w׼k/(!u+.h'mF(WgGX1B=[<,.^Պ`+}K*.ګ-jPlSbIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/neglookahead.png0000644000175000001440000000013112167565271022412 xustar000000000000000030 mtime=1373563577.199318819 29 atime=1389081083.43872439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/neglookahead.png0000644000175000001440000000027412167565271022150 0ustar00detlevusers00000000000000PNG  IHDR#'PLTE itRNS@fCIDATc` 0 n `2 29sQYA(-#?=????@>GIIJJKKMJNNNVVVZ\Zbcajkilllmmmuutx{xz|z|||ܪ RFD6'?tRNS  !""%'(,,,4569:?@ABEGIMTXY[\]_jjkoy{sIDATc``dd@FCN)5V!lpJaz3L=&“ݙF{N clg;=?H˲mX5+^)9`ilg37o:||00~EfKk.?0EfnnزkJ.eg2]jńjө[9=cʼn4#sꉏ %o[9'CD7.ZinV90e -m,xËY>)T]0o 0Ko<}u3$Vg Ԩ|O :_؊ezޒ˻xkTyIw2:\Y$| }av&<IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/browser.png0000644000175000001440000000013112167565270021453 xustar000000000000000030 mtime=1373563576.895318477 29 atime=1389081083.43972439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/browser.png0000644000175000001440000000164612167565270021215 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYsaa0UtEXtSoftwarewww.inkscape.org<PLTEб簰ѳ<<==?E^_aa_bbegiighjlllz{{昽皿盿睷ٟ頡秧ڬԵָ((Ӻ45ݵEtRNS #*+128:>@CDE]a詜IDATJaofDkn$ZDU it-m 4TAM/鍷Xr|wZAq||^zAAzxdx2`y~V)}*.>[ [8ΆNlkkJf.I`!<ِ ~~uH,&/NIKa]jRQ\O&H:{L+$[(x\KWي*!IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/method_private.png0000644000175000001440000000013112167565271023003 xustar000000000000000030 mtime=1373563577.176318793 29 atime=1389081083.43972439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/method_private.png0000644000175000001440000000126012167565271022535 0ustar00detlevusers00000000000000PNG  IHDR(-S pHYs  tIME*tEXtCommentCreated with GIMPWPLTEcL$^Livzcg   +++    808C;@ɘҝܪddd.£/¤1ʗ˘˘̺MͺKоOпOҜҝҰ4Ԧfՠgר׻?jmmnܪݫݬUXV9?1>~Sw}>p@!tRNS **++,,./2;>>@BBrrD0VbKGD^aIDATMRAgɸf%(A5ۺb~MwUWxE,.|{BD"B.sĩN`T":<&Wks\lpɋb5^w66=]')F/ud2j;2k8*kUdxm]j ӭcl7/\IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/splitVertical.png0000644000175000001440000000013112167565271022616 xustar000000000000000030 mtime=1373563577.370319011 29 atime=1389081083.43972439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/splitVertical.png0000644000175000001440000000117612167565271022356 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYsvv}ՂtEXtSoftwarewww.inkscape.org<PLTE{{::Ҿ|}Ա䈈tRNS !#)+34<>FIMNPRSU_IDATmJA IRXV>_hk#u&$;˱ߗ0]z\(6_=eswm?s갞+CLIfעMFA94**yb,A(\3PPQ0[.%#Gn)L4rԦr k_FAIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/editBookmarks.png0000644000175000001440000000013112167565270022566 xustar000000000000000030 mtime=1373563576.959318549 29 atime=1389081083.43972439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/editBookmarks.png0000644000175000001440000000237712167565270022332 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYsaa0UtEXtSoftwarewww.inkscape.org<PLTErrD†D̓†k̓knjnj@@וߣԕFLPR~Ґ~Ґٚڛ֕MՔJkxydmf^HKЏMW`АsPQYtMNݣS̍ݣ͏ oLjpɋ cϒO`ϓ՚ TSʌΐΖ!ӟ,՛ ߫ 67^ws΍ΤҙӒ Ԗ ԜԜ՞ ؚ؜٣ݩި3ީ5߫:> <]__ceytgmmwxy9eagZsagmsmsmsmsxmsmwms}m|||UgaZg}gaggswgsfmswmswPwB^agagaa4XI(kVtRNS !%,/6hzqKIDATc` 䙰+*a  .Y]T&eQCa &'*)9O-ʷtŎӀDu1/+J#.&;L) VM͹iߎ W6R@-‚%jhؒЙY)~iA5h 1]lIڃSg/䕅%3G.qh_Sg-6..v*Ry]$553~ӽzȡRp9Ykxe(tbߠ& o;q<[\Zoql?A>NOMOPMY[W^_\SSSrrrUUUopmRSP]^\LLJmnj`a]}NNMsuryzw[]Zlmi}}}oply{xzzzuwsvvv`a^qso{}xllltuqppmghdrrqsuqvxtqso{|ywyt}y|yz|wlni|~{}suqjjiϷ݃޹ហቋmok듔\][kljpqn !!! $%$'''))()*))-/...389CDBFGFNPNRRQTWXXXXY[Y]^]bc`cdcfgfgigijijljlllmnnvwvxxwyyyy||~~~tRNS  ##&&)+,-.012233569ABNRVVYjjjn{87qXIDATc`Bb~lL ho' n?u݂ ]8h3\L|]abRBںz"7ag۵.OYؠxΩkv1F6ۺeʄsIi!zHV2zwu[i64TÅE"g1>z`LX7e5FLLgΝ969}Z6tM`aE$*0hhy^vlHXλ'O ) {{b`D:۩k IQn^_gjy9bԟ<~ˈmѼe$ƧDzl d\ FA/ n].UIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/attribute_private.png0000644000175000001440000000013212167565270023526 xustar000000000000000030 mtime=1373563576.869318448 30 atime=1389081083.440724389 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/attribute_private.png0000644000175000001440000000074412167565270023265 0ustar00detlevusers00000000000000PNG  IHDR(-S pHYs  tIME;1RtEXtCommentCreated with GIMPWPLTEcL$ivzcg+++ 808C;@ɘҝܪcccdddeecmmmʗ˘˘ҜҝԦՠרܪݫݬ@>?1>Sb: _tRNS++/2;>>@rrbKGD70G}IDAT]G1{/ 8P5FiwL)ӂ A\Ogw~7Cu,wEbuz {U|s~Z?s6g30D&QL HG3IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/preferences-icons.png0000644000175000001440000000013212167565271023404 xustar000000000000000030 mtime=1373563577.258318885 30 atime=1389081083.440724389 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/preferences-icons.png0000644000175000001440000000200412167565271023132 0ustar00detlevusers00000000000000PNG  IHDRj pHYs B(xtIME 4+L' PLTE"""$$$%%%%%%AJLRRTVzV\ddknoz|KQzUA~pzrenOfXp`xav:grrbKGDCd=IDATc``bGL \ʚ(@KYD}Ӗ\zE3f\-*13ҳ(~ZfRJ Rl -&fz끠,aܦ 2` #S}7pL P^kCcxpAڒP56@뢜]C׭GP[Ex` {Z@TNn8*0ǣ$ n pH?7*\m ]YvM]6Tx}@kUKUNvo Kh]~݊sfUz7Nԑfc`U݀Yyd0֘9Q7 02FFeIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/fileShortcuts.png0000644000175000001440000000013112167565271022627 xustar000000000000000029 mtime=1373563577.12931874 30 atime=1389081083.440724389 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/fileShortcuts.png0000644000175000001440000000132012167565271022356 0ustar00detlevusers00000000000000PNG  IHDRj PPLTE!!!999ҥtRNS#&MS\l>z#IDATmKNA{xG"1Ą+'bŝr!h"20LO jOU~d4?%1oD z{V2X5,YK HˤNմwFĴ5 Gn DPlwC ^'4P2^s9ΧOސ֮ќxrZJ<iX<ɪB";۽߅PDf5k\;'"_%嶊MݖǼw S+7.6\9G h[IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/fileMultiProject.png0000644000175000001440000000013212167565271023253 xustar000000000000000030 mtime=1373563577.112318721 30 atime=1389081083.440724389 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/fileMultiProject.png0000644000175000001440000000126712167565271023013 0ustar00detlevusers00000000000000PNG  IHDRj nPLTE```cccNNNPPPttteeefffyyyȻ@ABDEF\^_dhjllvx|쀶Ђ׃҆ڈЈވӏГÔȕЗЗęߚ쟭֟Ƞߡ줻ץ駱ǩթɪުګǭծޱױճն޶շո麺!-ntRNS()UacjIDATc```bvFd,^ ,(y /ʼn"̣]Rfă"+fba`$b>mA ('a/ iG,Ba +hGb/i 3?:ۋ,% 5'JY9)pa6Q~paaނ(! 2?.31YEd~BZ00|W7G=Ca`~CwIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/filePython2.png0000644000175000001440000000013212167565271022175 xustar000000000000000030 mtime=1373563577.116318726 30 atime=1389081083.440724389 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/filePython2.png0000644000175000001440000000203712167565271021731 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYsvv}ՂtEXtSoftwarewww.inkscape.org<@PLTE$$$***883999DDD/f/f2i2j3k4m5j5n5n5o6m6q7q7r8r8s9t9u9u:v;wz>{?{?|@|AtA}A~BCDEFwFY\efix{|Ǐʔ˕ϙɜОϱӱԸۻٿɿԷOֵ=\sހ:@CACDGHJKRNQOQRUVfWXY`Z[\]^_`ac|fghmjmnotRNS"1589;=GVi #4IDATmѱJA6AH HBA J𕢾BA4`N%1w3mĭC?&GbL`dLL#GLEs*8`pȈ3qS}5ff`h&8'")7ʃTxm{)q*X6Ґ;])~JgA{n!~R֪_"n5qk3"7’طP[k+ e%=W_>>'ej@954V\"Uz0xMۥ \e~IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/windowFullscreen.png0000644000175000001440000000013212167565271023324 xustar000000000000000030 mtime=1373563577.474319128 30 atime=1389081083.440724389 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/windowFullscreen.png0000644000175000001440000000133612167565271023061 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYsvv}ՂtEXtSoftwarewww.inkscape.org</PLTE@@CCOOPP{{ppqqxx::Ҿ|}ԖԱް߲tRNS !#)+34<>FIMNPRSU_IDATc` "@FAH݁.ؽ TB8tXXHHX8y%$ńx8Xt7[IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/method_protected.png0000644000175000001440000000013212167565271023323 xustar000000000000000030 mtime=1373563577.177318794 30 atime=1389081083.440724389 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/method_protected.png0000644000175000001440000000116212167565271023055 0ustar00detlevusers00000000000000PNG  IHDR(-S pHYs  tIMEa|^tEXtCommentCreated with GIMPWPLTE       Ίdddgggnnn.£/¤1̺MͺKоOпOҰ4fg׻?jmmnUXV98]6ZyS]5ƙΓC(%5I@tI*τd":ñb~u {5hIk_e,TWn*n`΢j,$N(3Ӈ\s VFzFtk+&_IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/fileSaveAs.png0000644000175000001440000000013112167565271022013 xustar000000000000000030 mtime=1373563577.123318734 29 atime=1389081083.44172439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/fileSaveAs.png0000644000175000001440000000236012167565271021547 0ustar00detlevusers00000000000000PNG  IHDRĴl;sBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<mIDAT8˵LUe?ﹿ$A)5"\F,[?pZ cV[馩-GY62t5MSI )/=}dWyw{S:;X,}y>?h @ "B.֯C+MNN;ᬪ*)Ê,nӧPJot @kMXBC `ÅP|N@`0H0Dko1uZc ghP!s)&3 ).ΚxFk1&B>%yMϽIio$Ò;ŋ)> J)Rh+Z#@)ux p3ϓo;NtdXg&!AF3XR*'2cbF y_J5kn֗C䪻h+\6_ ;O1;e=[j${it"կzE6Ol6(bJߐ9<9xk ]X yD jⶩ7q]ZR1kcPR* 1.`]+zȺ t?btrou1+caaSMVVVSf,GMRG JYx59x_3tŀKfJ3ϧbvh&Rș\4qeϕcۡXmz=QJ1"-oLe[qpˢ8e0gNWش4ڼtvt ėG^&9dHƋ^^|!772alƶm` +%w3&YW'z kj&11%QYY8B8Զm"RNA.Fw"]^;)e^K$mBBqDzbRbBqxj~):3R;EW^I-3hlZ/v}2aaxRB._ 77ۼkQglkiN+[BShqbT.gųjῌ h4tǿIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/1leftarrow.png0000644000175000001440000000012712167565270022063 xustar000000000000000028 mtime=1373563576.8483184 29 atime=1389081083.44172439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/1leftarrow.png0000644000175000001440000000154212167565270021613 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYsaa0UtEXtSoftwarewww.inkscape.org<PLTE&fR]YURjrLKrLQoD}DMVNRZaiQmqqvz}^Rl XY a d g4r4eelp K !%q&1o1GGQQVVZZ]]qqGZiy}Wuh e&&((***,++,,-r---..//112~2224t46699====@@AACCDDHHIIKKOOSSWWWWZZ^^eeiillxxzz||NJuJtRNS@AJOpq}IDATc` 0b"o/!$2S]]}B(GoO${WgG[bN-MHE u5UeQV₼ܜB90WrjJb@HX!ڙ>QV2[YFe(:P.(<&!K;FaNP*Gu,+d-HF)-JIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/findNext.png0000644000175000001440000000013112167565271021550 xustar000000000000000030 mtime=1373563577.134318746 29 atime=1389081083.44172439 30 ctime=1389081086.308724333 eric4-4.5.18/eric/icons/default/findNext.png0000644000175000001440000000247212167565271021310 0ustar00detlevusers00000000000000PNG  IHDRĴl; pHYs  tIME &(XtEXtCommentCreated with The GIMPd%nbKGDIDAT8˝mLSWuj(cZ@^`S(h CP -|sS̸,eKa3~ˇesD灙,㶛'~<ؽu~a[?my|oY_&qKfY *oD> sGO|vxD/_ݏ ~WtJE@chT O=@Ϲۅ3Һ'JnK/c8GUfh'LkGiكk_c{z n`qԏc5pp5Y//5V_iGr]WzUti~dMFNxQ\!l/`Q:]XgQ;W 9l/w+ ,?ݓnd>lO?y̰XQ-+WoC] t=~ ЛK^? vui/kտg%~ j s۶m0"~@K );{%hL&"ш%QM^,8vo )B 1 Ңv0D(B]]JJJ`ZRV%ɫ_Pz kl@[KwPPP"xD5y]|2%Fxڵ5+m&4Ug9K6eee&(CY^b$XmQUTnhgzO><qNP[հ楃 `ZuY"œxf;ǬZ9999TGkW#\E/3!FXRyKm/5"|52QMQCXPh4!+MւfS7YYYQNgIOOQMQCĸE¡IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/dirClosed.png0000644000175000001440000000013112167565270021700 xustar000000000000000030 mtime=1373563576.943318531 29 atime=1389081083.44172439 30 ctime=1389081086.309724333 eric4-4.5.18/eric/icons/default/dirClosed.png0000644000175000001440000000132312167565270021432 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYsvv}ՂtEXtSoftwarewww.inkscape.org<GPLTE(FNdvf~uukj_`UUjKJcXXaA|AY労ZZ[[:}\]9|[]^__`cځꂱ3wZ\aab3wWXXXXY-s.tXcefh,r.tXfgiopwwx}䋻鐼ꐾXv\FtRNS %*.8;JY\]^u,AIDATJQw|X;%`+x6zB 1Oα}?, N/ 'ۯ 7X6T KnkMz_,vo( 2/: ndfy#3]7d*X)HW:LCUW9=F ͟:EIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/projectProps.png0000644000175000001440000000013112167565271022463 xustar000000000000000030 mtime=1373563577.308318942 29 atime=1389081083.44172439 30 ctime=1389081086.309724333 eric4-4.5.18/eric/icons/default/projectProps.png0000644000175000001440000000254012167565271022217 0ustar00detlevusers00000000000000PNG  IHDRj pHYs  tIME '"h0tEXtCommentCreated with The GIMPd%nPLTE___bbbyyyHHH~~~000RRR|||VVVJJJ'''***666888+++---]]]___qqqppp???xxxnnnvvvmmmEEEEEEwwwYYYzzzaaaEEEXXXYYYZZZ[[[\\\]]]^^^ZZZdddYYYJJJfffiiiwwwppp׷,t/1y2457?CCDEEHJJKZ\^``ajkkkkkkklms}KbKGDK ^IDAT].Q;kˌ ") ˮl\F pXKD" cJ;3LTC(8y|yhn ,I#C`| *M,)WΟW:a6'RW&dTQߘ:j?6lSbs|5Bܾƌfx­N=8;["@i&ӵ[@h4A"z8pdOzB'H^੐/$eG:;*[a0F7^7r%F9궳R ֯jofڄrrU*#O⯏r2JgN O?IWIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/drawEllipseFilled.png0000644000175000001440000000013112167565270023363 xustar000000000000000030 mtime=1373563576.950318539 29 atime=1389081083.44172439 30 ctime=1389081086.309724333 eric4-4.5.18/eric/icons/default/drawEllipseFilled.png0000644000175000001440000000075712167565270023127 0ustar00detlevusers00000000000000PNG  IHDRj pHYsϐPLTEƳ¾̱γ̯ƥ̫άư̊ .K1tRNS//00??DDGHQIDATP@m]XU23(5 qe(.y̋dp$isoyI8WbЗ-0DJ{&M]  #ns2u4pXy4|+(iIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/fileSave.png0000644000175000001440000000013112167565271021527 xustar000000000000000030 mtime=1373563577.125318736 29 atime=1389081083.44172439 30 ctime=1389081086.309724333 eric4-4.5.18/eric/icons/default/fileSave.png0000644000175000001440000000207412167565271021265 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYsvv}ՂtEXtSoftwarewww.inkscape.org<yPLTE $ #HFG`^_  " " #""%"#%##&$%(&&)'(*((*()+))+**,*+.*+.,-/+,/..0..1./1//1/02./2012113/0300412422423544655734744755766845856877967988:78:89;89;::;:;<89<;;<;<=;<>;<><=>==?=>?>>@<=@?@A>?A?@BAAC?@DABDCCECDHFGIFGMIJMJKMKLOLMQOPSQRTPQVSTWTUWUVXVWYWXZWXZXY[YZ\Z[][\^\]_]^`^_a_`b`acabdbcecdgefvvvxxxzzz|||}}}ٳ tRNSoo]Kvm IDATuMQ>{]d&"*ID1^ xB1^RT21GgwL&|VGk S)ӏ΍'[Ii:;7֩jjm XU_4RY6π _10E1vQ=l 2{OP0{\$Fc$$ #-1/W2ܖ;p.A 16-爠 H;W/[kAJwG cg(|T,ۙi)~p۵L 7MhrB4T|D/pq$j8Ȣ飸ɤP]#}BGbZg£f@O"W HmfzMSqB>fĺ/& U:{,TqDuDKIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/preferences-vcs.png0000644000175000001440000000013112167565271023063 xustar000000000000000030 mtime=1373563577.288318919 29 atime=1389081083.44272439 30 ctime=1389081086.309724333 eric4-4.5.18/eric/icons/default/preferences-vcs.png0000644000175000001440000000130712167565271022617 0ustar00detlevusers00000000000000PNG  IHDRnsBITUF pHYsaa0UtEXtSoftwarewww.inkscape.org<FIDATn&MRҪ6 OoC;Љ'@b1ѡ/**$$hiKcǮCгsr?/ ӶqV!exZVQFUL4yb1A b8< !$q"TjDSj)RjwwW#ڹQ_O$w޲_x& IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/vcsLogout.png0000644000175000001440000000013112167565271021756 xustar000000000000000030 mtime=1373563577.443319093 29 atime=1389081083.44272439 30 ctime=1389081086.309724333 eric4-4.5.18/eric/icons/default/vcsLogout.png0000644000175000001440000000221512167565271021511 0ustar00detlevusers00000000000000PNG  IHDRĴl; pHYs  tIME6 tEXtCommentCreated with The GIMPd%nbKGDIDAT8}TKcEnߛGn:l^q!(w!_ƍ ٸFm0>g_L&u* TV9UY2kKfy!W8~kmmFѬT*NeJ%(L&nV/=;;;9,,woca( }_lٖ?tDx)}wwwCgoo8z܀I̖ rYAD ^K |ބ (7"i:XT10Go,q{2L3Vp$f2]:)8E ʀ38&`PS``~XɌLh0l0+06rQ BVf㣬 K&m"1r*0 .`FnT`*`FgP*p r 72;s}} 0)CzJP1 bbS7jyyY`O/qsa:E@SFiTh"SDLhA&ST5”m !eͬ 2&S%^_~ 'c)x)2^L{˒%Ddq}diq~ ޼䖑ݥ,6u[rgڒ$KbIj$O IBTlϖk<)m`$dQ/?`RgIq )>my?+݋xJ\'?I~i=eFp" DG1| .w:i{n=KrP]2'ϒ(kq bw3-<c3F݊Z%?b1&l1MX@MI`Ki_n~p幧Xj>"OJ16oI!^ <~D$fNFIKs=?跿G`TBEd?S LZ8 IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/google.png0000644000175000001440000000013112167565271021245 xustar000000000000000030 mtime=1373563577.143318756 29 atime=1389081083.44272439 30 ctime=1389081086.309724333 eric4-4.5.18/eric/icons/default/google.png0000644000175000001440000000106112167565271020776 0ustar00detlevusers00000000000000PNG  IHDRj pHYs:duhtEXtCommentCreated with GIMPWPLTE%y%+ , 4 4 0 1 . 4 9525;6><7>@CEO \!H(U+P,R.U:&HiXonnsDŽnjݑ䓛֠ѥztRNS@fIDATc`VD00ssr1M9؅t 4쁒F2.H¦`\= QCp6a_Yq<؄CFIMNPRSUO IDATe?kA?*$ B0J -ݧH&M0f̮~pǞ-٠oF/:d xӺ1r @DzW}mB ςйw< ޝDNP(XU#w |ɽBL_&= ?33u2A~8 eʼ(4ۮ~IWzH2 h|9 G _֫#u̒?){p*SIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/notcoveredPrev.png0000644000175000001440000000013112167565271022776 xustar000000000000000030 mtime=1373563577.212318833 29 atime=1389081083.44272439 30 ctime=1389081086.309724333 eric4-4.5.18/eric/icons/default/notcoveredPrev.png0000644000175000001440000000227512167565271022537 0ustar00detlevusers00000000000000PNG  IHDRĴl; pHYs  tIME)itEXtCommentCreated with The GIMPd%nbKGD!IDATohemskٖf @4.9EUz/ FWDd W$.\lny~OZ É}>.2~?g/̴u{F<@2.66x .s[9ў{sx.hYan%#ܰf 1;mfr9̢x (|\ǫ׬X&k:Ov<$( 1bǻ6ve2dYt mHMO[cSci Y3mTEئ5q,F4c -[o hL`JxHfQܷәZW 1h1ka+,:0A) ̢؀NYXո{ Vc" P/" -1 B;e3ߏRMZKOƒyք+-Zjhqo(#aXFP 8ͽ!3(WiLIlb| bT.&uL9CCM"ȥ2:-Tzҗ)},X\h< VXRkYUEpUuu ( r)4؝LksC_‚P B ("7}Ks_^uVrdZ|R$ƩQj%ch&i[x+W&3}lNLYhs~_Mvɨ X0:.a,zD.'(Mk}*"gKN~ShP_ٸ@,|?CM-SzUؔ *>;=_U8? TT*R}e+bBI<^3o/68(7EUwIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/webSearch.png0000644000175000001440000000013112167565271021674 xustar000000000000000030 mtime=1373563577.470319124 29 atime=1389081083.44272439 30 ctime=1389081086.309724333 eric4-4.5.18/eric/icons/default/webSearch.png0000644000175000001440000000242412167565271021431 0ustar00detlevusers00000000000000PNG  IHDRj pHYsaa0UtEXtSoftwarewww.inkscape.org<PLTEUUUsss ]]]GGGDGGSSSVVVbbb~mmm|zyorVVVnjifbepadSSS`YVPOOOOOONTMퟟfffY[[KkT^HLLLGuwwGsCAHHH@?q?_ɼ}+VTL\>_RYX#qR3+5bRRRF=KY{4Uf+چP>Wyي½vXX |7[Y.8~!Wb`x#o1Kک)RWaH?| ]tkXOcyAR'DKK E4,xTʸrSeGY v qbI ^@,Ccr}[دf_a{&%ii 36@*i`r,7qt_F%_o``NNށ p'Q9,VTLmYXq wK\HRd^;G4y9X,[*/ʯRhr++]/811eddTaDV144j,wJPIE-^AǧL>nR 7HV7 ===`xN^0W÷FZN}k{N 5ړd|5љkV^^PK uʆR!$ cQjn-$$8'OwO `c ^D98s6@}&{ ?g!4FGGqM"D"iCTvީvc›Bj~؄h6rmzjExQ/088HSH{AO~qjEO>Lf A(/]<ӤyG;&4-5׃<"޲x/[&DzDsMP.-"'ZEdرc~]ɩt:+Ķ=JTHKaҒe/39IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/openUI.png0000644000175000001440000000013012167565271021167 xustar000000000000000029 mtime=1373563577.21831884 29 atime=1389081083.44272439 30 ctime=1389081086.309724333 eric4-4.5.18/eric/icons/default/openUI.png0000644000175000001440000000203012167565271020716 0ustar00detlevusers00000000000000PNG  IHDRĴl; pHYsvv}ՂtEXtSoftwarewww.inkscape.org<IDAT8˵oUE?gfZ"j *(W&4daL\!1ѕ1op(q)ƍ4"B"{}ΌW^GNrnι|;g=2;~`Cf3 ŇqJi-SSGFF:3T{Q0: V궂jZD7}#j=/|+=#/}Kam>;V=Hi |e]&Mpa R҂FQ{qށ\Q 懕:@PMBSRk.kV;JA+EȘ!ѻ۰<:! 4α:(!&0,Vѥ8ZW$ZХJbhXm?IbM)ghEU}t8r N<}W.|G/Ƴ>Ǻ$$$C ?PDOiq:9)) jVL鱑ƼP\<BLKyeT$y#K&"DŽrvfhPtJRj0f`0*)6C0#IŹ@IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/method_static.png0000644000175000001440000000013112167565271022620 xustar000000000000000030 mtime=1373563577.178318795 29 atime=1389081083.44372439 30 ctime=1389081086.309724333 eric4-4.5.18/eric/icons/default/method_static.png0000644000175000001440000000074012167565271022354 0ustar00detlevusers00000000000000PNG  IHDR(-SsRGB pHYs  tIME%Y iTXtCommentCreated with GIMPd.ePLTE         *" //  +&-.($,-*(=9@@@mmmwww=tRNS**,,.BBobKGD*SԞIDATӍ PLN@`&CnۑfV#UMJMNo}a^\-/fj{bHK1;g < 6y,e.8iT9͚?f IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/databaseConnection.png0000644000175000001440000000013112167565270023554 xustar000000000000000030 mtime=1373563576.930318517 29 atime=1389081083.44372439 30 ctime=1389081086.309724333 eric4-4.5.18/eric/icons/default/databaseConnection.png0000644000175000001440000000145612167565270023315 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYsaa0UtEXtSoftwarewww.inkscape.org<tPLTE$$I$UD!!!xUc }h$ccck qjR bbbޭPpTnU!m$æ%Ơđǹ̳hk pt˗8ٗ¹/"dXtRNS  $&'),.136>?HIKMOPQQWY^opsssrgIDATc`@D,&{%,U^d d"zW'2E< ⊫s,,|nY%1َl#2JS s+R H+MHɏʶBvvXJIl|vv "cQbg"(oǭiVTHꠊpI)(*)Hs2v((v%DIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/characters.png0000644000175000001440000000013112167565270022107 xustar000000000000000030 mtime=1373563576.898318481 29 atime=1389081083.44472439 30 ctime=1389081086.309724333 eric4-4.5.18/eric/icons/default/characters.png0000644000175000001440000000204312167565270021641 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYsaa0UtEXtSoftwarewww.inkscape.org<PLTE*/1.46.46*/1 $% $%''..66.46.46.46%*+.46.46%*+%++055*/1%*+ $$%)+%)+$%%*+ %*+%*+%*+  $%  $&&*+*01$%*/1*01*/1 */1 $% $%%*+*/1  $%%*+%*+*01*/1 $%*/1 $% $%%*+*/1*01k<tRNS  !!"##%&'())*+,-./00033557<=>???FHIKNQRTUVZ]``dfgjmpqsy4&_IDATBo-{YƲls-۶Ճo]. ZZ @.u{0D`ZTh9MjP?^BpG%PTp1,w(ynuFNfa~K DR09maCΞ:JڝK*bo?'E4Z ,#bk'7 ynvzbLLh;RIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/stepOut.png0000644000175000001440000000013112167565271021434 xustar000000000000000030 mtime=1373563577.372319013 29 atime=1389081083.44472439 30 ctime=1389081086.309724333 eric4-4.5.18/eric/icons/default/stepOut.png0000644000175000001440000000027712167565271021175 0ustar00detlevusers00000000000000PNG  IHDR#'PLTE@/`?O`s$.72tRNSv8EIDATc`` 3`// 2 p@TgE Xm#^( V L@ >IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/helpAboutKde.png0000644000175000001440000000013112167565271022340 xustar000000000000000030 mtime=1373563577.151318765 29 atime=1389081083.44472439 30 ctime=1389081086.309724333 eric4-4.5.18/eric/icons/default/helpAboutKde.png0000644000175000001440000000274012167565271022076 0ustar00detlevusers00000000000000PNG  IHDRĴl;sBIT|d pHYsaa0UtEXtSoftwarewww.inkscape.org<]IDATKWw<:Ġֶ4 H5Z"Z .ZEq΍ A\ .|/ J)TI2Gfs~~>FU1~ؓE6Xtd45E@Q [n04 h}u}pxKT5@V??2c(+X[8fq!GUٯ:v]xͫ޺ݯg>c2[ea0e6PdLF Ԓ8AUS=󖃪fk{y Ұg;b"6##B Ŭ'wwᲂ>Y^(SWflصyB$4ˇ!j&JjB-~  p6eB4HVbmUW)jT.!j,: ٌ_^c֡ k u=eM=8qΊڮ'5{(f^Պ>_\b0>>@@@DDDHHH[[[]]]aaacccdddfffiiikkkmmmoooxxx|||AtRNS IDAT"YPE,jI-G z@WL>sbr\Mǯi F>E[^'!y$g"y*Moͫ:@ox݁ UIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/filePython.png0000644000175000001440000000013212167565271022113 xustar000000000000000030 mtime=1373563577.117318727 30 atime=1389081083.459724389 30 ctime=1389081086.309724333 eric4-4.5.18/eric/icons/default/filePython.png0000644000175000001440000000203712167565271021647 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYsvv}ՂtEXtSoftwarewww.inkscape.org<@PLTE$$$***883999DDD/f/f2i2j3k4m5j5n5n5o6m6q7q7r8r8s9t9u9u:v;wz>{?{?|@|AtA}A~BCDEFwFY\efix{|Ǐʔ˕ϙɜОϱӱԸۻٿɿԷOֵ=\sހ:@CACDGHJKRNQOQRUVfWXY`Z[\]^_`ac|fghmjmnotRNS"1589;=GVi #4IDATmѱJA6AH HBA J𕢾BA4`N%1w3mĭC?&GbL`dLL#GLEs*8`pȈ3qS}5ff`h&8'")7ʃTxm{)q*X6Ґ;])~JgA{n!~R֪_"n5qk3"7’طP[k+ e%=W_>>'ej@954V\"Uz0xMۥ \e~IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/multiProjectViewer.png0000644000175000001440000000013212167565271023635 xustar000000000000000030 mtime=1373563577.195318814 30 atime=1389081083.460724389 30 ctime=1389081086.309724333 eric4-4.5.18/eric/icons/default/multiProjectViewer.png0000644000175000001440000000126712167565271023375 0ustar00detlevusers00000000000000PNG  IHDRj nPLTE```cccNNNPPPttteeefffyyyȻ@ABDEF\^_dhjllvx|쀶Ђ׃҆ڈЈވӏГÔȕЗЗęߚ쟭֟Ƞߡ줻ץ駱ǩթɪުګǭծޱױճն޶շո麺!-ntRNS()UacjIDATc```bvFd,^ ,(y /ʼn"̣]Rfă"+fba`$b>mA ('a/ iG,Ba +hGb/i 3?:ۋ,% 5'JY9)pa6Q~paaނ(! 2?.31YEd~BZ00|W7G=Ca`~CwIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/drawEllipse.png0000644000175000001440000000013112167565270022243 xustar000000000000000029 mtime=1373563576.95131854 30 atime=1389081083.460724389 30 ctime=1389081086.309724333 eric4-4.5.18/eric/icons/default/drawEllipse.png0000644000175000001440000000142212167565270021775 0ustar00detlevusers00000000000000PNG  IHDRj sRGB pHYsϐtIME +VPJPLTEƳ¾̱γ̯ƥ̫άư̊⬬i87tRNS//00??DDGHF<bKGDmIDATӭ=OPF{ b0&bLLD LW[[:q'gzrr$0:_H柳`iNu9(p3Y]ZO={]95ZXE!8+kS]0بy_EZuY#3A9NU4*NE\G% `bZEG|D}/>Y+z2e9n[?Jr^_߱d~IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/coverageScript.png0000644000175000001440000000013212167565270022751 xustar000000000000000030 mtime=1373563576.929318516 30 atime=1389081083.460724389 30 ctime=1389081086.309724333 eric4-4.5.18/eric/icons/default/coverageScript.png0000644000175000001440000000233712167565270022510 0ustar00detlevusers00000000000000PNG  IHDRĴl; pHYs  tIME# JZtEXtCommentCreated with The GIMPd%nbKGDCIDAT8˕OU|wo2uTԡ@ l!BPP+W-mZ A(tZfhT(3f〈:xǹyO;³y?Wb^xHWk2XMRFp֢#MgkyﵭVKw+?y &5PKT '.WoVU=E|-+HlMo j%'mYjTkC]MPt/wg$^Іxz.xρC]S.sh 2i,b-ZDbNF0򮅥 b= _s®KF`6ՌD0iJv)+Nq{wn2v6;'544'҈+T(ɆQq#$-jB *$E[Sjl|ug-yO.*|t걢g3g+ iC.%J޿XiZEat&ʠJ9ё:JRpfn}wl,q¢Ƕ5y3;1R2r3ánamȟfs#z~>9oequm@%%5b XUy,qq?yh^)ҽa|1ҙ997gٵ>0-cRDF=Y*Yg7F+wa}5^B٦S JYO#Дk0UF }$N^T͟ᣛ |X,[n "go-x+\gi4YD`h,*N)(Lسխp#;Nj\)MyO;vٲEdpʣf!5[k@llRQ'`v (&Mc_W!'ZG m[Ө ?3Q{8? Jߕ}4V= b-C KslX#/ph<ﳖx{鮬X%ChG+xG!ԒNA )w޾R9ٖnkƧ$J"p.+.*rIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/projectForms.png0000644000175000001440000000013212167565271022447 xustar000000000000000030 mtime=1373563577.303318936 30 atime=1389081083.460724389 30 ctime=1389081086.309724333 eric4-4.5.18/eric/icons/default/projectForms.png0000644000175000001440000000255012167565271022203 0ustar00detlevusers00000000000000PNG  IHDRĴl;/IDATmlpw])w+R-햒4McX%Wsh7dn̞\HFdF|axQݔZfLj WG˕w宽e!&>b˶H#nܨ.I#Rofbb$Rlpt]Y*xK}T+i99.#ѱ\xt8BHJݢlٔ,ʪw*OY&!DPtlD )|6FFK]&UyVWԃ%ã% 4Sخ &k"&Zt+/sܜ7{\B,Hs]?^gyܻsPB(ڛ4~3f_ !4Mz1 V~LMߨI !P(L&###ngg'(PJ D"p8bM]]]{jǎ; x8!iC`0:xPJa&JSNѨVcccɓ'_m;z\)"@UӴiV07N<IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/profileProject.png0000644000175000001440000000013212167565271022761 xustar000000000000000030 mtime=1373563577.295318927 30 atime=1389081083.460724389 30 ctime=1389081086.309724333 eric4-4.5.18/eric/icons/default/profileProject.png0000644000175000001440000000222612167565271022515 0ustar00detlevusers00000000000000PNG  IHDRĴl; pHYs  tIME) [tEXtCommentCreated with The GIMPd%nbKGDIDAT8˝KlTe}-C[JP Dƺ2te41! 0Qh&pʸ)& H 46h:P(v:N;su,X=Y{s3@7Za 1=tо244`/ ڵ̙3PWT޼ysDz엫շt'ZK[###7폣i'v;aLd ;<,hoz9.o$ S L\,=u]4ydZ/G'PUXMl} ۃ(z2*1%n@G4S7@@?/x;k/"@ ` FnY]J@* V0*q@hy:|5m)%Qa{GjB}wd$o-,ґheO}$T:KxcG9h߯k?M/K~lNWAMB?KϿ!%e255\ZPJXWaw )!3wQm(©T=on- ۶jĝ YVO]Pz …((\r4-7!mf>,RfΝ kVEu]7;غ!a[:N_1 BRelllֶm/o M^IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/projectSourcesPyMixed.png0000644000175000001440000000013112167565271024303 xustar000000000000000029 mtime=1373563577.31631895 30 atime=1389081083.460724389 30 ctime=1389081086.309724333 eric4-4.5.18/eric/icons/default/projectSourcesPyMixed.png0000644000175000001440000000175512167565271024046 0ustar00detlevusers00000000000000PNG  IHDRĴl;IDAT8˕_TU?;3;3N5)BJew(B{/_z^%_C?QCPZmQwƙ{Nwfw\v^~~=8跾SWoߎiD N(JXMӚ~GΕgTt%Vq"xHWZzUX82$NV,EʵZ̵ԭF4OۈG2T64Xl7n7i-F-NpK4L'ZjU]/ر{nɳ'*6: *jP18ĩlm\'`hŹa2ٙEV) 8Ul(<M{eq[?껋ke;TSq|6W:1wܮKVJ ] NV0F  hq r0'I|%u'BWFK t'ٲ!`o:hKР Q<`2Xě5F3c06 ^]Kr`u:ρ:O^;)t`;${fb1/ÂeSXKΥ@S/%De&?z{Ɔn9R1K.k)Idu/9x$00<$WyסqŨ.{QǕۛ2\9`zqp؉;OTlQ8vgkǽkrTfOxnz~Rg4"CG*l_PVMZ]effƜ>gtސ2f٪4^kգ}W뛏7pҎ}Z-;De8}}߼o'vl9o.KS6`3MϽ}A.i&ӌ,W^IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/projectInterfaces.png0000644000175000001440000000013212167565271023444 xustar000000000000000030 mtime=1373563577.304318937 30 atime=1389081083.460724389 30 ctime=1389081086.309724333 eric4-4.5.18/eric/icons/default/projectInterfaces.png0000644000175000001440000000115512167565271023200 0ustar00detlevusers00000000000000PNG  IHDRj PLTE!!!999 %%%555666<<<>>>GGGVVVaaafffwwwxxx{{{6tRNS#&MS\l>z#IDATAjA}\x7.7r%fa4`&`HT^(L ЗBtVp'efDpNAFlB-k[VU% _SRȏ.0얮o$/G=P0z% m=X@AeL/k\!)z޸*E 23۹nH"}@ZH6g"m #bF|*IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/projectSave.png0000644000175000001440000000013212167565271022257 xustar000000000000000030 mtime=1373563577.313318947 30 atime=1389081083.460724389 30 ctime=1389081086.309724333 eric4-4.5.18/eric/icons/default/projectSave.png0000644000175000001440000000213412167565271022011 0ustar00detlevusers00000000000000PNG  IHDRĴl; pHYs  tIME (4q)tEXtCommentCreated with The GIMPd%nbKGDIDAT8˕k\E3g#M#HI(mؖ*+i1/jBz J b"AP7𢈂.Mc#IlwgvΜ3^݀h87g}}>3#FFFrӉDMV+++nܸ<TT:S*mY0755?/ˍ GFF^#ܐAQwwwy/\.Z;,|bbbck;p11s.jNؕy+M10|B=#fdb<6aϿʆ3X$$̯Bω,@vx ~CnB,U`jhY WC}MӟlmBI$xH R!D8Rtf[c|s!˟|vHvl{嫼v/]fq5q!)cqܹ ~{|7`I 0=1Bv ŀaRq ciC>^p5&0=i<Ҧ bGX?yW7pcǎ=Yr/vr9;_ZPVQJQ[*9zdy93NZP(rɓ?rL~;+Wf2uVM}5zC4 ͘Rahq`c*$SIZcZLaen4*mǏ`箝T** j[7oqgk9 IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/nonwordboundary.png0000644000175000001440000000013212167565271023224 xustar000000000000000030 mtime=1373563577.204318824 30 atime=1389081083.460724389 30 ctime=1389081086.309724333 eric4-4.5.18/eric/icons/default/nonwordboundary.png0000644000175000001440000000023212167565271022753 0ustar00detlevusers00000000000000PNG  IHDR& PLTE;ftRNS@fmA ('a/ iG,Ba +hGb/i 3?:ۋ,% 5'JY9)pa6Q~paaނ(! 2?.31YEd~BZ00|W7G=Ca`~CwIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/fileRuby.png0000644000175000001440000000013112167565271021552 xustar000000000000000029 mtime=1373563577.12031873 30 atime=1389081083.460724389 30 ctime=1389081086.309724333 eric4-4.5.18/eric/icons/default/fileRuby.png0000644000175000001440000000245112167565271021307 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYsaa0UtEXtSoftwarewww.inkscape.org<PLTE555LLLCCCIIIxxx{{{LLLnnnJJJ̨3./*1'3*/+1*3+,*-*0+4*1)3*;09).(1)+*:*;-.'1(/*7&(',*7&,).&2,4,8/@1@:WN-(2674:%72Q=1,<$bcF.`g:$IIc^8#'&jg6#=8baS@n_8$819$}F:G6~ωϟG?ЋOB?'ueҡqjA7@5VC׏קؖؤصٔٞkXڃ~ڐuicLoZ~r߲}~nⲷ垖鸯ȽB*tRNS0:IM\\]fk~SIDATjQ;;LI[b1)TDэ Ѝn^ ޅ K! 1mZQT339B@!J  סj)Tw(Bt2jN:FVjk,qQC`{a5}PYToq{2Xx[ (ðzx kAQfA+u#ڏaIa uߟnVGVZ_+26|>K`{a1=O7g Km֮xlxyVt~燇sP]5%G0byú$x0\P`uYKvd% ;ľ:*4 ` Zabz,Y녳=vy.)1zr\ِ9M`&0VX"S妌gͫui3N rE$ e6'*IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/breakpointNext.png0000644000175000001440000000013112167565270022765 xustar000000000000000030 mtime=1373563576.890318472 29 atime=1389081083.46172439 30 ctime=1389081086.309724333 eric4-4.5.18/eric/icons/default/breakpointNext.png0000644000175000001440000000247012167565270022523 0ustar00detlevusers00000000000000PNG  IHDRĴl; pHYs  tIMEuxtEXtCommentCreated with The GIMPd%nbKGDIDATIle[fqPHD1Qj\P,r$&L\xиԋ^CLr1,Vj(](]fv>`B>r'=m^ɆƸ"Ǟwl%v.9/WFZչ;+ [ ]?$vn9Z>%zCɻ0?vvW*٥Y # Յ1\%IPZU֪{ܒ5?3Evv+rQH# F c nb" VX:\rq4#i'gQB )ըH(:ԨPX7pJ88=*hb~~mW]X-3c8pnEJ4:h_#==jA==#;ax[~Z1@rth4y.IHZ r9nI4:J;D. ,4ט: CĹs`-LO C'^~;5Q6PUdp/FA:v~D5ZNC*BR2+O"X\F >1dL']KL4U_\4=)4cxL['׹@<8TB_O41gŽV@={O&R|^Gx> 9?}cc$vl<4?BIYI)JA*OXR]XGcAʩLMy\S(x:^o4>dpYZ,K g?Q{T:};@pѡ]6!.+e9ap°v2O&o+ u xz)IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/exportShortcuts.png0000644000175000001440000000013112167565271023231 xustar000000000000000030 mtime=1373563577.103318711 29 atime=1389081083.46172439 30 ctime=1389081086.309724333 eric4-4.5.18/eric/icons/default/exportShortcuts.png0000644000175000001440000000234512167565271022770 0ustar00detlevusers00000000000000PNG  IHDRj PLTE" !KKKOOOGGGdddfff# !(&'" $ !/,-2/0512534633645845856967:78<9:=;<>:;><=@>>A>?B@@BAACABECDFCDFDEGFGHEFKHIKIJKJJLIJPNOQPQUSTVSTZXY[YY[YZ[ZZa_`feeifglmpmnpqrurqsrrtttuvttvvxvvyvwy{{}|}}{|}|}~|}|EQtRNS "&./347C^vy H.PyIDATM;kQ.;FP R{, Vi-lBkBL!q93bxxe4@ #NcýTjwʱ^Z߮XABm!ӛ!X0F`2j_{ПFRl)\9׺ꇰ)[Qǀ}@N=v1Pe}~(*@}=S+N6/ܫZCԃ+%JD?7ˇ) ).HnMvؑ;@x1}B\c"9uNydRs\yta"t3IEqZ1͍?"~t 1PPN<RUPZ "> "jK h)iBmƘNi:$ɜ9ޓIJk:DrB ĝNgvdY///CINRAJ$IJ8$H($i!"WVVe2 Km,Jd Jy^4i%h-L*0 ?eab0#[J0 [! cQݸmn ;,خ ba/|FSs6 Ön &xkˊ'&^;y_D/36Bvۡ=={={eB@NѺ O^DŗFյm ZgܸȠY/qpBu:\?EU-%ݫAqfbOX/`zsh7F-晱bR֨t*BBr<^{.ƋaNz8n7nHq튠rK<䁣u"E t"l* PVؤ5D=L/(-{MĵJY̡I# Q '۠G>;} c?]EZ3=ؙ#%tRU9/mԁ}hxӞඎ/$,p.o䌀Lfm+WTũBQܤ*B8ཐu8 NǪ:+?V^Ξ<<2W y 5s8&ܥT0VACzFyFzF{J}JKMMQRS[bk\\^_ek_efhkllmnnoopqqqq{sst}uv~vwxy}yzz{||̀̂̄̅ԅ̍卿펨̎ҏҔ̢̘̞̞̟̦۫̕ŭøܹ޹<%tRNS!&&7?MNOPPQU_`afjj}bKGD&iIDAT;kSq6%&iVgQPp'8 E:TC&7N $d5)Io!ӻwWwzixLBڞ9wVEYYnjK tBRZ@BNj76?)A? $3DyQHs~#$QBdIy;u}(e !ҥoQY5TS+oׇ13UW+_^u:$tlc},6QooMepoH3U`,c^zQUQQ 7UP Ɉj!IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/preferences-help.png0000644000175000001440000000013112167565271023220 xustar000000000000000030 mtime=1373563577.252318879 29 atime=1389081083.46272439 30 ctime=1389081086.309724333 eric4-4.5.18/eric/icons/default/preferences-help.png0000644000175000001440000000245112167565271022755 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYsvv}ՂtEXtSoftwarewww.inkscape.org<PLTE'''***,,,sssvvvrrrwwwwww{{{iiicccџ]aa _ f g jcko\lpjx|}cny z !n!"j"w""#q##$h${%%%'|'(*s+,-../|03}56t6778r9r;<>>?AABDDGGIIIKLMQRTVXYY^_``giijorstuzzzzꀣɂՂꇵތˏ䐽摿ꕲЗҙ՛ҝ̞͟Ϣѣңפקڨ۱սJLtRNS "*+./01?@ABCHQST`abbfiu~8IDATc`E$$EE9e5LL4dBJV߽sVJŒPa!MV͝1e u&(;ֻe7 M΍<{ʊ7meAk<ѲdKW=7kfz@ak;M8gݓ3 K%N)K:dSxdpe)꒜ ON] ߂}2/,!6tp̶ `+)IKʘfD\srs1C? OtaIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/viewProfileDebug.png0000644000175000001440000000013112167565271023233 xustar000000000000000030 mtime=1373563577.466319119 29 atime=1389081083.46272439 30 ctime=1389081086.309724333 eric4-4.5.18/eric/icons/default/viewProfileDebug.png0000644000175000001440000000225212167565271022767 0ustar00detlevusers00000000000000PNG  IHDRj pHYs  tIME,*;ռtEXtCommentCreated with The GIMPd%nLPLTE^^^dddQQQPPPBBBб䰰Ʒͳ¼܀??ѱ^pVtRNS #*+012478:>@CDE]a7bKGDÊhBYIDATeMKBAϙIyݘJwv~@vJZE!^J#CΜ~ag1sއS%1c[>ܗS7T. 9IZН+a\ _ Wjm}y&.!c Lp"6;NB_ !r=D+IDB++mDt\_$OFWYIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/debugScript.png0000644000175000001440000000013012167565270022242 xustar000000000000000029 mtime=1373563576.93331852 29 atime=1389081083.46272439 30 ctime=1389081086.309724333 eric4-4.5.18/eric/icons/default/debugScript.png0000644000175000001440000000260312167565270021777 0ustar00detlevusers00000000000000PNG  IHDRĴl; pHYs  tIME&(6-tEXtCommentCreated with The GIMPd%nbKGDIDAT8˥_lUƿvv[N'@ ԥEIMŶE #&&>`DFcHH/B!& ( M[L‚-m-;@JBɽ37g+ h|Pq3ޘ dM1`Ex+`?yk 1|['jck2<Ŝq/^q:+ߦHFm.Ӈ wL}j03=ޡR7a" w$SdZ Z"#puON~Q(& E$ߑuy>pL0e$ 3q!>tLe0 ܥ+˚_EYVZ4<5g}s[o02!?NfW**4TJtJ@ ~azʠ' (VL~Zhu9*PMH;GKƝ=4uPt[T% N,}8lc֟Lh׮!pd`mor ^='(h#ER_p|1 %AOe;%>[-Ñ4HBuEs 9mvi%,Vz-.M๊12DMuQM"TBelΓo,Q,+2Y$Qͨy ԶhkLs:Vɠ-y0pUlyek:PA WnOTL:F v#zTVʺ"S PD8{4HQg.p&1lǽ"9Ke*ྐྵ1[=ɸY\! nuKV|oTg~}rE50xCvp<2bXڳ,/|,, j+ Hz;;w}(̰IUÛwرcҶmۘﮰ|GZOpL$\Zi\w#β~GFF6ݻ {EDdr ^C_~+>|85kְE˖-|8/x<^vvͅ,OQQYLY^WWg4AMӺi^޵SlAK5^N0hF'd}!0z)Zᰗ1GGG@v ~#jX9Lv&|ҡCXKKK-4==m^vͅ;l=wttLD"߃LIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/newWindow.png0000644000175000001440000000013112167565271021752 xustar000000000000000030 mtime=1373563577.202318822 29 atime=1389081083.46272439 30 ctime=1389081086.309724333 eric4-4.5.18/eric/icons/default/newWindow.png0000644000175000001440000000133612167565271021510 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYsvv}ՂtEXtSoftwarewww.inkscape.org<VPLTE !!$$&'''))++,/00111227::=CCCCDDGLLSAVVZV\A`YjipirYst݃݃ފ᎚֚ךܚb5tRNS-15pww[pIDATc`@L\< (M'1>![ aAˆO1&Vv(  *, f`΅g-wB/Gma̜t00)u T00 kH1p@KaGj2D))z)2pt[Y:q" f۫(j)[dq ź; `f&̎ ΊiH2\*IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/projectSaveAs.png0000644000175000001440000000013112167565271022542 xustar000000000000000030 mtime=1373563577.311318945 29 atime=1389081083.46372439 30 ctime=1389081086.309724333 eric4-4.5.18/eric/icons/default/projectSaveAs.png0000644000175000001440000000226712167565271022304 0ustar00detlevusers00000000000000PNG  IHDRĴl; pHYs  tIME ()aMtEXtCommentCreated with The GIMPd%nbKGDIDATOe>IL8L1i 3ڼp͋7KղfffVF%K˖tf[@(pp}PŏK4E"U!ѯ;::B766>jEEE5@o{{Nӧ3x<}˔RDDRYYYys?'@c6+9{xk׮}a:3ιhߎDYUK`0 /47ClsL}ι("B(jJX^ ywy|;yPcdS5ӌk- n=Ie)(orE%`E3iCUꀼiD=;|&+GI 9wo!"L"'ocߏVdIjhm+VHӤFFZJikֵ!y|YKSZZJ뗭]@Q4J&A1OM.j7oLǿ*faȝ;weha9fNvҰ .Vr2}FR#Lr|1hҏhh\?ܰc ]]]A>s ʂ^AqIENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/new.png0000644000175000001440000000013112167565271020562 xustar000000000000000030 mtime=1373563577.201318821 29 atime=1389081083.46372439 30 ctime=1389081086.309724333 eric4-4.5.18/eric/icons/default/new.png0000644000175000001440000000174012167565271020317 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYsvv}ՂtEXtSoftwarewww.inkscape.org<PLTE11-11,>>>+  &'''((**,///111227::=CCCCDDGLLSAVVZV\A`YjipirY˂݈݃݃ي֚ךܚhUw*tRNS "&47>?@IPpqstwZB6IDAT=rq{% :Fg :Pe*=QYC 0ɽuN g|@]}i?ɹ骖ޟP]td:gvN*_׻g,НtUUՕ@jHWWWe_lu~KUwwUf]uf|={XzbPՕDdNR5BD UDļ f_ !uo$6+ӽ?`Hb3O>͏~ǯ\8? dC^IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/vcsDiff.png0000644000175000001440000000013112167565271021355 xustar000000000000000030 mtime=1373563577.434319083 29 atime=1389081083.46372439 30 ctime=1389081086.309724333 eric4-4.5.18/eric/icons/default/vcsDiff.png0000644000175000001440000000303212167565271021106 0ustar00detlevusers00000000000000PNG  IHDRĴl; pHYs  tIME3[vtEXtCommentCreated with The GIMPd%nbKGD~IDAT8ˍU]lSe~ڞӞ]O׵6~81.LK.+Q0܈PL2\L9 6v==oexŗ<=m{}Oؘz#|'~:T*4MMӊ\.JnyC6]Y__ׇKgk׮ID%r UU+d6 j|gк 2ttԁ KWnUUUݼ&+- nR$7fbAesG4}^ (cn^ȃ$qD  !ഡ-j(xql'Mb"^OVߙXU5G#Q0L'0\Z[['䍋B`Rhgh.Jvf*b#!*(T$ug" x+~/ 8h ۓ$Tpj &d:1uE![+(9U!7F+|.*G.챝`c VY纆YAI삈pЙ 5uMe++bK;og'2,YA-ƭ*K5mC2iC_%ת`6Vqx1JB!A$>ZZ]D<[ÙljGn 1$7f2@}дkt& dK# 2H(H7Pd:t& ݡ^37*6j$B:-J^j # .&tiTbCқms(i NP@%#v TDIqaD7{p pSЫ{([EVlty:(6 !DĩXm!X鞶<7nQ?ԗ Lh6?jyȈjM;C ~L?xhd}vxj#^KOl-[Zv"IENDB`eric4-4.5.18/eric/icons/default/PaxHeaders.8617/preferences-graphics.png0000644000175000001440000000013212167565271024071 xustar000000000000000030 mtime=1373563577.250318876 30 atime=1389081083.464724389 30 ctime=1389081086.309724333 eric4-4.5.18/eric/icons/default/preferences-graphics.png0000644000175000001440000000204012167565271023617 0ustar00detlevusers00000000000000PNG  IHDRj sBITO pHYsaa0UtEXtSoftwarewww.inkscape.org<PLTE |&! } L52E0.E0.t E0. K75"~ h C.,$ h _MKH-+y nyyyX=:?,* E0.C/-3'&E hF21hWUE0.fkkK20^LJN:8VCAE hiir s  SVV sa^h i^h oXVi^"}x m $}lj oqqmin fMKpgf^DA} tq Z>;lRQv^\ׂt  ̢r }   !$&x m } tRNS  !$$%%%%'(*+,,----//00336689<=f$,Lx H^C zq#ARP*$4vM(%4.[;ؘ*%O B}hQz$4ضdf#/Efwߝ*n#~򧗎/YYYyf$YJp8L/^AZ[[3+n (?@U7WCk7τb\5VqFvNvq˒%33SՉyQQQY,--^~\Sl4lnnvN'M:Ȉ@w\.wU,>(8ggfee@u'*`P455- 4 c}+^M$+i`x[7t'+++Pmmqy M13'qx6:4MV)hZZZSȁ0} t l`a舽%}ϹXuJꛛI˅ɼ=!dMMʻP`:?=#_VҫWqpp@?R x`H*EtNs .U2ՂMWh]PJ7dP)8]Z-6m` h %55 6[ w[Kyy9e| Gv˄;ZZZ5A fc]x>R|p4{Z&dLĩ& bhawH7WTF2_h"zTXtSoftwarex+//.NN,H/J6XS\IENDB`eric4-4.5.18/eric/PaxHeaders.8617/Preferences0000644000175000001440000000013212262730776016711 xustar000000000000000030 mtime=1389081086.301724332 30 atime=1389081086.305724332 30 ctime=1389081086.315724332 eric4-4.5.18/eric/Preferences/0000755000175000001440000000000012262730776016520 5ustar00detlevusers00000000000000eric4-4.5.18/eric/Preferences/PaxHeaders.8617/PreferencesLexer.py0000644000175000001440000000013212261012650022560 xustar000000000000000030 mtime=1388582312.631085084 30 atime=1389081083.464724389 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/PreferencesLexer.py0000644000175000001440000002001112261012650022304 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2002 - 2014 Detlev Offenbach # """ 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 import Globals 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 unicode(self._errorMessage) def __str__(self): """ Private method returning a string representation of the exception. @return string representing the error message """ return str(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: %1').arg(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 or QString) @param parent The parent widget of this lexer. (QextScintilla) """ QsciLexer.__init__(self, parent) # These default font families are taken from QScintilla if Globals.isWindowsPlatform(): self.__defaultFontFamily = "Courier New" elif Globals.isMacPlatform(): self.__defaultFontFamily = "Courier" else: self.__defaultFontFamily = "Bitstream Vera Sans Mono" # instantiate a lexer object for the given language language = unicode(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 = QStringList() # 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 not desc.isEmpty(): 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) # Override QScintilla's default font family to # always use a monospaced font self.fonts[i].setFamily(self.__defaultFontFamily) 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.defaultFonts[i].setFamily(self.__defaultFontFamily) 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 (QString) """ if self.descriptions.has_key(style): return self.descriptions[style] else: return QString() eric4-4.5.18/eric/Preferences/PaxHeaders.8617/ShortcutDialog.ui0000644000175000001440000000007311650574123022254 xustar000000000000000029 atime=1389081083.46972439 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ShortcutDialog.ui0000644000175000001440000001060411650574123022003 0ustar00detlevusers00000000000000 ShortcutDialog 0 0 539 142 Edit Shortcut Press your shortcut keys and select OK Qt::NoFocus Select to change the primary keyboard shortcut Primary Shortcut: true Qt::NoFocus Press to clear the key sequence buffer. Clear true Qt::NoFocus Select to change the alternative keyboard shortcut Alternative Shortcut: false Qt::NoFocus Press to clear the key sequence buffer. Clear true Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok qPixmapFromMimeSource primaryButton toggled(bool) primaryClearButton setEnabled(bool) 80 23 178 24 alternateButton toggled(bool) alternateClearButton setEnabled(bool) 98 56 247 66 buttonBox rejected() ShortcutDialog reject() 92 96 100 117 eric4-4.5.18/eric/Preferences/PaxHeaders.8617/ViewProfileSidebarsDialog.ui0000644000175000001440000000007411121236651024344 xustar000000000000000030 atime=1389081083.474724389 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ViewProfileSidebarsDialog.ui0000644000175000001440000001027011121236651024071 0ustar00detlevusers00000000000000 ViewProfileSidebarsDialog 0 0 608 179 Configure View Profiles true Select the windows, that should be visible, when the different profiles are active. Qt::AlignVCenter &Edit Profile Left Sidebar true Bottom Sidebar true Debug-Viewer &Debug Profile Left Sidebar Bottom Sidebar true Debug-Viewer true Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok qPixmapFromMimeSource epvtCheckBox ephtCheckBox epdbCheckBox dpvtCheckBox dphtCheckBox dpdbCheckBox buttonBox buttonBox accepted() ViewProfileSidebarsDialog accept() 56 208 56 229 buttonBox rejected() ViewProfileSidebarsDialog reject() 146 215 146 234 eric4-4.5.18/eric/Preferences/PaxHeaders.8617/ProgramsDialog.py0000644000175000001440000000013212261012650022231 xustar000000000000000030 mtime=1388582312.633085109 30 atime=1389081083.474724389 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ProgramsDialog.py0000644000175000001440000002767212261012650022001 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing the Programs page. """ import os import sys import re from PyQt4.QtCore import pyqtSignature, QString, QStringList, Qt, QProcess from PyQt4.QtGui import QApplication, QTreeWidgetItem, QHeaderView, QCursor, \ QDialog, QDialogButtonBox from KdeQt.KQApplication import e4App from Ui_ProgramsDialog import Ui_ProgramsDialog import Preferences import Utilities class ProgramsDialog(QDialog, Ui_ProgramsDialog): """ Class implementing the Programs page. """ def __init__(self, parent = None): """ Constructor @param parent The parent widget of this dialog. (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.setObjectName("ProgramsDialog") self.__hasSearched = False self.programsList.headerItem().setText(self.programsList.columnCount(), "") self.searchButton = \ self.buttonBox.addButton(self.trUtf8("Search"), QDialogButtonBox.ActionRole) self.searchButton.setToolTip(self.trUtf8("Press to search for programs")) def show(self): """ Public slot to show the dialog. """ QDialog.show(self) if not self.__hasSearched: self.on_programsSearchButton_clicked() def on_buttonBox_clicked(self, button): """ Private slot called by a button of the button box clicked. @param button button that was clicked (QAbstractButton) """ if button == self.searchButton: self.on_programsSearchButton_clicked() @pyqtSignature("") def on_programsSearchButton_clicked(self): """ Private slot to search for all supported/required programs. """ QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) QApplication.processEvents() self.programsList.clear() header = self.programsList.header() header.setSortIndicator(0, Qt.AscendingOrder) header.setSortIndicatorShown(False) # 1. do the Qt4 programs # 1a. Translation Converter exe = Utilities.isWindowsPlatform() and \ "%s.exe" % Utilities.generateQtToolName("lrelease") or \ Utilities.generateQtToolName("lrelease") version = self.__createProgramEntry(self.trUtf8("Translation Converter (Qt4)"), exe, '-version', 'lrelease', -1) # 1b. Qt4 Designer if Utilities.isWindowsPlatform(): exe = "%s.exe" % Utilities.generateQtToolName("designer") elif Utilities.isMacPlatform(): exe = unicode(Utilities.getQtMacBundle("designer")) else: exe = Utilities.generateQtToolName("designer") self.__createProgramEntry(self.trUtf8("Qt4 Designer"), exe, version = version) # 1c. Qt4 Linguist if Utilities.isWindowsPlatform(): exe = "%s.exe" % Utilities.generateQtToolName("linguist") elif Utilities.isMacPlatform(): exe = unicode(Utilities.getQtMacBundle("linguist")) else: exe = Utilities.generateQtToolName("linguist") self.__createProgramEntry(self.trUtf8("Qt4 Linguist"), exe, version = version) # 1d. Qt4 Assistant if Utilities.isWindowsPlatform(): exe = "%s.exe" % Utilities.generateQtToolName("assistant") elif Utilities.isMacPlatform(): exe = unicode(Utilities.getQtMacBundle("assistant")) else: exe = Utilities.generateQtToolName("assistant") self.__createProgramEntry(self.trUtf8("Qt4 Assistant"), exe, version = version) # 2. do the PyQt programs # 2a. Translation Extractor PyQt4 self.__createProgramEntry(self.trUtf8("Translation Extractor (Python, Qt4)"), Utilities.isWindowsPlatform() and "pylupdate4.exe" or "pylupdate4", '-version', 'pylupdate', -1) # 2b. Forms Compiler PyQt4 self.__createProgramEntry(self.trUtf8("Forms Compiler (Python, Qt4)"), Utilities.isWindowsPlatform() and "pyuic4.bat" or "pyuic4", '--version', 'Python User', 4) # 2c. Resource Compiler PyQt4 self.__createProgramEntry(self.trUtf8("Resource Compiler (Python, Qt4)"), Utilities.isWindowsPlatform() and "pyrcc4.exe" or "pyrcc4", '-version', 'Resource Compiler', -1) # 3. do the PySide programs # 3a. Translation Extractor PySide self.__createProgramEntry(self.trUtf8("Translation Extractor (Python, PySide)"), Utilities.generatePySideToolPath("pyside-lupdate"), '-version', '', -1, versionRe = 'lupdate') # 3b. Forms Compiler PySide self.__createProgramEntry(self.trUtf8("Forms Compiler (Python, PySide)"), Utilities.generatePySideToolPath("pyside-uic"), '--version', 'PySide User', 5, versionCleanup=(0, -1)) # 3.c Resource Compiler PySide self.__createProgramEntry(self.trUtf8("Resource Compiler (Python, PySide)"), Utilities.generatePySideToolPath("pyside-rcc"), '-version', 'Resource Compiler', -1) # 4. do the Ruby programs # 4a. Forms Compiler for Qt4 self.__createProgramEntry(self.trUtf8("Forms Compiler (Ruby, Qt4)"), Utilities.isWindowsPlatform() and "rbuic4.exe" or "rbuic4", '-version', 'Qt', -1) # 4b. Resource Compiler for Qt4 self.__createProgramEntry(self.trUtf8("Resource Compiler (Ruby, Qt4)"), Utilities.isWindowsPlatform() and "rbrcc.exe" or "rbrcc", '-version', 'Ruby Resource Compiler', -1) # 5. do the CORBA programs # 5a. omniORB exe = unicode(Preferences.getCorba("omniidl")) if Utilities.isWindowsPlatform(): exe += ".exe" self.__createProgramEntry(self.trUtf8("CORBA IDL Compiler"), exe, '-V', 'omniidl', -1) # 6. do the spell checking entry try: import enchant try: text = os.path.dirname(enchant.__file__) except AttributeError: text = "enchant" try: version = enchant.__version__ except AttributeError: version = self.trUtf8("(unknown)") except (ImportError, AttributeError, OSError): text = "enchant" version = "" self.__createEntry(self.trUtf8("Spell Checker - PyEnchant"), text, version) # do the plugin related programs pm = e4App().getObject("PluginManager") for info in pm.getPluginExeDisplayData(): if info["programEntry"]: self.__createProgramEntry( info["header"], info["exe"], versionCommand = info["versionCommand"], versionStartsWith = info["versionStartsWith"], versionPosition = info["versionPosition"], version = info["version"], versionCleanup = info["versionCleanup"], ) else: self.__createEntry( info["header"], info["text"], info["version"] ) self.programsList.sortByColumn(0, Qt.AscendingOrder) QApplication.restoreOverrideCursor() self.__hasSearched = True def __createProgramEntry(self, description, exe, versionCommand = "", versionStartsWith = "", versionPosition = 0, version = "", versionCleanup = None, versionRe = None): """ Private method to generate a program entry. @param description descriptive text (string or QString) @param exe name of the executable program (string) @param versionCommand command line switch to get the version info (string) if this is empty, the given version will be shown. @param versionStartsWith start of line identifying version info (string) @param versionPosition index of part containing the version info (integer) @keyparam version version string to show (string) @keyparam versionCleanup tuple of two integers giving string positions start and stop for the version string (tuple of integers) @keyparam versionRe regexp to determine the line identifying version info (string). Takes precedence over versionStartsWith. @return version string of detected or given version (string) """ itm = QTreeWidgetItem(self.programsList, QStringList(description)) font = itm.font(0) font.setBold(True) itm.setFont(0, font) if not exe: itm.setText(1, self.trUtf8("(not configured)")) else: if os.path.isabs(exe): if not Utilities.isExecutable(exe): exe = "" else: exe = Utilities.getExecutablePath(exe) if exe: if versionCommand and \ (versionStartsWith != "" or \ (versionRe is not None and versionRe != "")) and \ versionPosition: proc = QProcess() proc.setProcessChannelMode(QProcess.MergedChannels) proc.start(exe, QStringList(versionCommand)) finished = proc.waitForFinished(10000) if finished: output = \ unicode(proc.readAllStandardOutput(), str(Preferences.getSystem("IOEncoding")), 'replace') if versionRe is None: versionRe = "^%s" % re.escape(versionStartsWith) versionRe = re.compile(versionRe, re.UNICODE) for line in output.splitlines(): if versionRe.search(line): try: version = line.split()[versionPosition] if versionCleanup: version = \ version[versionCleanup[0]:versionCleanup[1]] break except IndexError: version = self.trUtf8("(unknown)") else: version = self.trUtf8("(not executable)") itm2 = QTreeWidgetItem(itm, QStringList() << exe << version) itm.setExpanded(True) else: itm.setText(1, self.trUtf8("(not found)")) QApplication.processEvents() self.programsList.header().resizeSections(QHeaderView.ResizeToContents) self.programsList.header().setStretchLastSection(True) return version def __createEntry(self, description, entryText, entryVersion): """ Private method to generate a program entry. @param description descriptive text (string or QString) @param entryText text to show (string or QString) @param entryVersion version string to show (string or QString). """ itm = QTreeWidgetItem(self.programsList, QStringList(description)) font = itm.font(0) font.setBold(True) itm.setFont(0, font) if len(entryVersion): itm2 = QTreeWidgetItem(itm, QStringList() << entryText << entryVersion) itm.setExpanded(True) else: itm.setText(1, self.trUtf8("(not found)")) QApplication.processEvents() self.programsList.header().resizeSections(QHeaderView.ResizeToContents) self.programsList.header().setStretchLastSection(True) eric4-4.5.18/eric/Preferences/PaxHeaders.8617/ToolGroupConfigurationDialog.py0000644000175000001440000000013212261012650025121 xustar000000000000000030 mtime=1388582312.638085173 30 atime=1389081083.474724389 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ToolGroupConfigurationDialog.py0000644000175000001440000001550512261012650024661 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2002 - 2014 Detlev Offenbach # """ Module implementing a configuration dialog for the tools menu. """ import sys import os import copy from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQMessageBox from Ui_ToolGroupConfigurationDialog import Ui_ToolGroupConfigurationDialog import Utilities class ToolGroupConfigurationDialog(QDialog, Ui_ToolGroupConfigurationDialog): """ Class implementing a configuration dialog for the tool groups. """ def __init__(self, toolGroups, currentGroup, parent = None): """ Constructor @param toolGroups list of configured tool groups @param currentGroup number of the active group (integer) @param parent parent widget (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.currentGroup = currentGroup self.toolGroups = copy.deepcopy(toolGroups) for group in toolGroups: self.groupsList.addItem(group[0]) if len(toolGroups): self.groupsList.setCurrentRow(0) self.on_groupsList_currentRowChanged(0) @pyqtSignature("") def on_newButton_clicked(self): """ Private slot to clear all entry fields. """ self.nameEdit.clear() @pyqtSignature("") def on_addButton_clicked(self): """ Private slot to add a new entry. """ groupName = self.nameEdit.text() if groupName.isEmpty(): KQMessageBox.critical(self, self.trUtf8("Add tool group entry"), self.trUtf8("You have to give a name for the group to add.")) return if len(self.groupsList.findItems(groupName, Qt.MatchFlags(Qt.MatchExactly))): KQMessageBox.critical(self, self.trUtf8("Add tool group entry"), self.trUtf8("An entry for the group name %1 already exists.")\ .arg(groupName)) return self.groupsList.addItem(unicode(groupName)) self.toolGroups.append([unicode(groupName), []]) @pyqtSignature("") def on_changeButton_clicked(self): """ Private slot to change an entry. """ row = self.groupsList.currentRow() if row < 0: return groupName = self.nameEdit.text() if groupName.isEmpty(): KQMessageBox.critical(self, self.trUtf8("Add tool group entry"), self.trUtf8("You have to give a name for the group to add.")) return if len(self.groupsList.findItems(groupName, Qt.MatchFlags(Qt.MatchExactly))): KQMessageBox.critical(self, self.trUtf8("Add tool group entry"), self.trUtf8("An entry for the group name %1 already exists.")\ .arg(groupName)) return self.toolGroups[row][0] = unicode(groupName) self.groupsList.currentItem().setText(groupName) @pyqtSignature("") def on_deleteButton_clicked(self): """ Private slot to delete the selected entry. """ row = self.groupsList.currentRow() if row < 0: return res = KQMessageBox.warning(None, self.trUtf8("Delete tool group entry"), self.trUtf8("""

    Do you really want to delete the tool group""" """ "%1"?

    """)\ .arg(self.groupsList.currentItem().text()), QMessageBox.StandardButtons(\ QMessageBox.No | \ QMessageBox.Yes), QMessageBox.No) if res != QMessageBox.Yes: return if row == self.currentGroup: # set to default group if current group gets deleted self.currentGroup = -1 del self.toolGroups[row] itm = self.groupsList.takeItem(row) del itm if row >= len(self.toolGroups): row -= 1 self.groupsList.setCurrentRow(row) self.on_groupsList_currentRowChanged(row) @pyqtSignature("") def on_downButton_clicked(self): """ Private slot to move an entry down in the list. """ curr = self.groupsList.currentRow() self.__swap(curr, curr+1) self.groupsList.clear() for group in self.toolGroups: self.groupsList.addItem(group[0]) self.groupsList.setCurrentRow(curr + 1) if curr + 1 == len(self.toolGroups): self.downButton.setEnabled(False) self.upButton.setEnabled(True) @pyqtSignature("") def on_upButton_clicked(self): """ Private slot to move an entry up in the list. """ curr = self.groupsList.currentRow() self.__swap(curr-1, curr) self.groupsList.clear() for group in self.toolGroups: self.groupsList.addItem(group[0]) self.groupsList.setCurrentRow(curr - 1) if curr - 1 == 0: self.upButton.setEnabled(False) self.downButton.setEnabled(True) def on_groupsList_currentRowChanged(self, row): """ Private slot to set the lineedits depending on the selected entry. @param row the row of the selected entry (integer) """ if row >= 0 and row < len(self.toolGroups): group = self.toolGroups[row] self.nameEdit.setText(group[0]) self.deleteButton.setEnabled(True) self.changeButton.setEnabled(True) if row != 0: self.upButton.setEnabled(True) else: self.upButton.setEnabled(False) if row+1 != len(self.toolGroups): self.downButton.setEnabled(True) else: self.downButton.setEnabled(False) else: self.nameEdit.clear() self.downButton.setEnabled(False) self.upButton.setEnabled(False) self.deleteButton.setEnabled(False) self.changeButton.setEnabled(False) def getToolGroups(self): """ Public method to retrieve the tool groups. @return a list of lists containing the group name and the tool group entries """ return self.toolGroups[:], self.currentGroup def __swap(self, itm1, itm2): """ Private method used two swap two list entries given by their index. @param itm1 index of first entry (int) @param itm2 index of second entry (int) """ tmp = self.toolGroups[itm1] self.toolGroups[itm1] = self.toolGroups[itm2] self.toolGroups[itm2] = tmp eric4-4.5.18/eric/Preferences/PaxHeaders.8617/Shortcuts.py0000644000175000001440000000013212261012650021315 xustar000000000000000030 mtime=1388582312.640085198 30 atime=1389081083.490724389 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/Shortcuts.py0000644000175000001440000004167112261012650021060 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2004 - 2014 Detlev Offenbach # """ Module implementing functions dealing with keyboard shortcuts. """ import cStringIO from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQMessageBox from KdeQt.KQApplication import e4App from Preferences import Prefs, syncPreferences from E4XML.XMLUtilities import make_parser from E4XML.XMLErrorHandler import XMLErrorHandler, XMLFatalParseError from E4XML.ShortcutsHandler import ShortcutsHandler from E4XML.ShortcutsWriter import ShortcutsWriter from E4XML.XMLEntityResolver import XMLEntityResolver def __readShortcut(act, category, prefClass): """ Private function to read a single keyboard shortcut from the settings. @param act reference to the action object (E4Action) @param category category the action belongs to (string or QString) @param prefClass preferences class used as the storage area """ if not act.objectName().isEmpty(): accel = prefClass.settings.value(\ QString("Shortcuts/%1/%2/Accel").arg(category).arg(act.objectName())) if accel.isValid(): act.setShortcut(QKeySequence(accel.toString())) accel = prefClass.settings.value(\ QString("Shortcuts/%1/%2/AltAccel").arg(category).arg(act.objectName())) if accel.isValid(): act.setAlternateShortcut(QKeySequence(accel.toString())) def readShortcuts(prefClass = Prefs, helpViewer = None, pluginName = None): """ Module function to read the keyboard shortcuts for the defined QActions. @keyparam prefClass preferences class used as the storage area @keyparam helpViewer reference to the help window object @keyparam pluginName name of the plugin for which to load shortcuts (string) """ if helpViewer is None and pluginName is None: for act in e4App().getObject("Project").getActions(): __readShortcut(act, "Project", prefClass) for act in e4App().getObject("UserInterface").getActions('ui'): __readShortcut(act, "General", prefClass) for act in e4App().getObject("UserInterface").getActions('wizards'): __readShortcut(act, "Wizards", prefClass) for act in e4App().getObject("DebugUI").getActions(): __readShortcut(act, "Debug", prefClass) for act in e4App().getObject("ViewManager").getActions('edit'): __readShortcut(act, "Edit", prefClass) for act in e4App().getObject("ViewManager").getActions('file'): __readShortcut(act, "File", prefClass) for act in e4App().getObject("ViewManager").getActions('search'): __readShortcut(act, "Search", prefClass) for act in e4App().getObject("ViewManager").getActions('view'): __readShortcut(act, "View", prefClass) for act in e4App().getObject("ViewManager").getActions('macro'): __readShortcut(act, "Macro", prefClass) for act in e4App().getObject("ViewManager").getActions('bookmark'): __readShortcut(act, "Bookmarks", prefClass) for act in e4App().getObject("ViewManager").getActions('spelling'): __readShortcut(act, "Spelling", prefClass) actions = e4App().getObject("ViewManager").getActions('window') if actions: for act in actions: __readShortcut(act, "Window", prefClass) for category, ref in e4App().getPluginObjects(): if hasattr(ref, "getActions"): actions = ref.getActions() for act in actions: __readShortcut(act, category, prefClass) if helpViewer is not None: for act in helpViewer.getActions(): __readShortcut(act, "HelpViewer", prefClass) if pluginName is not None: try: ref = e4App().getPluginObject(pluginName) if hasattr(ref, "getActions"): actions = ref.getActions() for act in actions: __readShortcut(act, pluginName, prefClass) except KeyError: # silently ignore non available plugins pass def __saveShortcut(act, category, prefClass): """ Private function to write a single keyboard shortcut to the settings. @param act reference to the action object (E4Action) @param category category the action belongs to (string or QString) @param prefClass preferences class used as the storage area """ if not act.objectName().isEmpty(): prefClass.settings.setValue(\ QString("Shortcuts/%1/%2/Accel").arg(category).arg(act.objectName()), QVariant(act.shortcut().toString())) prefClass.settings.setValue(\ QString("Shortcuts/%1/%2/AltAccel").arg(category).arg(act.objectName()), QVariant(act.alternateShortcut().toString())) def saveShortcuts(prefClass = Prefs): """ Module function to write the keyboard shortcuts for the defined QActions. @param prefClass preferences class used as the storage area """ # step 1: clear all previously saved shortcuts prefClass.settings.beginGroup("Shortcuts") prefClass.settings.remove("") prefClass.settings.endGroup() # step 2: save the various shortcuts for act in e4App().getObject("Project").getActions(): __saveShortcut(act, "Project", prefClass) for act in e4App().getObject("UserInterface").getActions('ui'): __saveShortcut(act, "General", prefClass) for act in e4App().getObject("UserInterface").getActions('wizards'): __saveShortcut(act, "Wizards", prefClass) for act in e4App().getObject("DebugUI").getActions(): __saveShortcut(act, "Debug", prefClass) for act in e4App().getObject("ViewManager").getActions('edit'): __saveShortcut(act, "Edit", prefClass) for act in e4App().getObject("ViewManager").getActions('file'): __saveShortcut(act, "File", prefClass) for act in e4App().getObject("ViewManager").getActions('search'): __saveShortcut(act, "Search", prefClass) for act in e4App().getObject("ViewManager").getActions('view'): __saveShortcut(act, "View", prefClass) for act in e4App().getObject("ViewManager").getActions('macro'): __saveShortcut(act, "Macro", prefClass) for act in e4App().getObject("ViewManager").getActions('bookmark'): __saveShortcut(act, "Bookmarks", prefClass) for act in e4App().getObject("ViewManager").getActions('spelling'): __saveShortcut(act, "Spelling", prefClass) actions = e4App().getObject("ViewManager").getActions('window') if actions: for act in actions: __saveShortcut(act, "Window", prefClass) for category, ref in e4App().getPluginObjects(): if hasattr(ref, "getActions"): actions = ref.getActions() for act in actions: __saveShortcut(act, category, prefClass) for act in e4App().getObject("DummyHelpViewer").getActions(): __saveShortcut(act, "HelpViewer", prefClass) def exportShortcuts(fn): """ Module function to export the keyboard shortcuts for the defined QActions. @param fn filename of the export file (string) @return flag indicating success """ try: if fn.lower().endswith("e4kz"): try: import gzip except ImportError: KQMessageBox.critical(None, QApplication.translate("Shortcuts", "Export Keyboard Shortcuts"), QApplication.translate("Shortcuts", """Compressed keyboard shortcut files""" """ not supported. The compression library is missing.""")) return 0 f = gzip.open(fn, "wb") else: f = open(fn, "wb") ShortcutsWriter(f).writeXML() f.close() return True except IOError: return False def importShortcuts(fn): """ Module function to import the keyboard shortcuts for the defined E4Actions. @param fn filename of the import file (string) @return flag indicating success """ fn = unicode(fn) try: if fn.lower().endswith("kz"): try: import gzip except ImportError: KQMessageBox.critical(None, QApplication.translate("Shortcuts", "Import Keyboard Shortcuts"), QApplication.translate("Shortcuts", """Compressed keyboard shortcut files""" """ not supported. The compression library is missing.""")) return False f = gzip.open(fn, "rb") else: f = open(fn, "rb") try: line = f.readline() dtdLine = f.readline() finally: f.close() except IOError: KQMessageBox.critical(None, QApplication.translate("Shortcuts", "Import Keyboard Shortcuts"), QApplication.translate("Shortcuts", "

    The keyboard shortcuts could not be read from file %1.

    ") .arg(fn)) return False if fn.lower().endswith("kz"): # work around for a bug in xmlproc validating = False else: validating = dtdLine.startswith("The keyboard shortcuts could not be read from file %1.

    ") .arg(fn)) return False except XMLFatalParseError: KQMessageBox.critical(None, QApplication.translate("Shortcuts", "Import Keyboard Shortcuts"), QApplication.translate("Shortcuts", "

    The keyboard shortcuts file %1 has invalid contents.

    ") .arg(fn)) eh.showParseMessages() return False eh.showParseMessages() shortcuts = handler.getShortcuts() if handler.getVersion() == "3.5": setActions_35(shortcuts) else: setActions(shortcuts) saveShortcuts() syncPreferences() return True def __setAction(actions, sdict): """ Private function to write a single keyboard shortcut to the settings. @param actions list of actions to set (list of E4Action) @param sdict dictionary containg accelerator information for one category """ for act in actions: if not act.objectName().isEmpty(): try: accel, altAccel = sdict[unicode(act.objectName())] act.setShortcut(QKeySequence(accel)) act.setAlternateShortcut(QKeySequence(altAccel)) except KeyError: pass def setActions(shortcuts): """ Module function to set actions based on new format shortcuts file. @param shortcuts dictionary containing the accelerator information read from a XML file """ if shortcuts.has_key("Project"): __setAction(e4App().getObject("Project").getActions(), shortcuts["Project"]) if shortcuts.has_key("General"): __setAction(e4App().getObject("UserInterface").getActions('ui'), shortcuts["General"]) if shortcuts.has_key("Wizards"): __setAction(e4App().getObject("UserInterface").getActions('wizards'), shortcuts["Wizards"]) if shortcuts.has_key("Debug"): __setAction(e4App().getObject("DebugUI").getActions(), shortcuts["Debug"]) if shortcuts.has_key("Edit"): __setAction(e4App().getObject("ViewManager").getActions('edit'), shortcuts["Edit"]) if shortcuts.has_key("File"): __setAction(e4App().getObject("ViewManager").getActions('file'), shortcuts["File"]) if shortcuts.has_key("Search"): __setAction(e4App().getObject("ViewManager").getActions('search'), shortcuts["Search"]) if shortcuts.has_key("View"): __setAction(e4App().getObject("ViewManager").getActions('view'), shortcuts["View"]) if shortcuts.has_key("Macro"): __setAction(e4App().getObject("ViewManager").getActions('macro'), shortcuts["Macro"]) if shortcuts.has_key("Bookmarks"): __setAction(e4App().getObject("ViewManager").getActions('bookmark'), shortcuts["Bookmarks"]) if shortcuts.has_key("Spelling"): __setAction(e4App().getObject("ViewManager").getActions('spelling'), shortcuts["Spelling"]) if shortcuts.has_key("Window"): actions = e4App().getObject("ViewManager").getActions('window') if actions: __setAction(actions, shortcuts["Window"]) for category, ref in e4App().getPluginObjects(): if shortcuts.has_key(category) and hasattr(ref, "getActions"): actions = ref.getActions() __setAction(actions, shortcuts[category]) if shortcuts.has_key("HelpViewer"): __setAction(e4App().getObject("DummyHelpViewer").getActions(), shortcuts["HelpViewer"]) def __setAction35(actions, sdict): """ Private function to write a single keyboard shortcut to the settings (old format). @param actions list of actions to set (list of E4Action) @param sdict dictionary containg accelerator information for one category """ for act in actions: if not act.objectName().isEmpty(): try: accel, altAccel = sdict[unicode(act.objectName())] act.setShortcut(QKeySequence(accel)) act.setAlternateShortcut(QKeySequence()) except KeyError: pass def setActions_35(shortcuts): """ Module function to set actions based on old format shortcuts file. @param shortcuts dictionary containing the accelerator information read from a XML file """ if shortcuts.has_key("Project"): __setAction35(e4App().getObject("Project").getActions(), shortcuts["Project"]) if shortcuts.has_key("General"): __setAction35(e4App().getObject("UserInterface").getActions('ui'), shortcuts["General"]) if shortcuts.has_key("Wizards"): __setAction35(e4App().getObject("UserInterface").getActions('wizards'), shortcuts["Wizards"]) if shortcuts.has_key("Debug"): __setAction35(e4App().getObject("DebugUI").getActions(), shortcuts["Debug"]) if shortcuts.has_key("Edit"): __setAction35(e4App().getObject("ViewManager").getActions('edit'), shortcuts["Edit"]) if shortcuts.has_key("File"): __setAction35(e4App().getObject("ViewManager").getActions('file'), shortcuts["File"]) if shortcuts.has_key("Search"): __setAction35(e4App().getObject("ViewManager").getActions('search'), shortcuts["Search"]) if shortcuts.has_key("View"): __setAction35(e4App().getObject("ViewManager").getActions('view'), shortcuts["View"]) if shortcuts.has_key("Macro"): __setAction35(e4App().getObject("ViewManager").getActions('macro'), shortcuts["Macro"]) if shortcuts.has_key("Bookmarks"): __setAction35(e4App().getObject("ViewManager").getActions('bookmark'), shortcuts["Bookmarks"]) if shortcuts.has_key("Window"): actions = e4App().getObject("ViewManager").getActions('window') if actions: __setAction35(actions, shortcuts["Window"]) for category, ref in e4App().getPluginObjects(): if shortcuts.has_key(category) and hasattr(ref, "getActions"): actions = ref.getActions() __setAction35(actions, shortcuts[category]) eric4-4.5.18/eric/Preferences/PaxHeaders.8617/ToolGroupConfigurationDialog.ui0000644000175000001440000000007411072705636025127 xustar000000000000000030 atime=1389081083.502724389 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ToolGroupConfigurationDialog.ui0000644000175000001440000001513411072705636024660 0ustar00detlevusers00000000000000 ToolGroupConfigurationDialog 0 0 475 391 Configure Tool Groups true false Delete the selected entry <b>Delete</b> <p>Delete the selected entry.</p> &Delete Alt+D Add a new tools entry <b>Add</b> <p>Add a new tool groups entry with the name entered below.</p> &Add Alt+A &Group name: nameEdit false Change the values of the selected entry <b>Change</b> <p>Change the values of the selected entry.</p> C&hange Alt+H Qt::Vertical QSizePolicy::Expanding 87 20 Clear all entry fields <b>New</b> <p>Clear all entry fields for entering a new tool groups entry.</p> &New Alt+N false Move up <b>Move Up</b> <p>Move the selected entry up.</p> &Up Alt+U false Move down <b>Move Down</b> <p>Move the selected entry down.</p> Do&wn Alt+W Enter the menu text <b>Menu text</b> <p>Enter the menu text. Precede the accelerator key with an & character.</p> Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok qPixmapFromMimeSource groupsList nameEdit newButton addButton changeButton deleteButton upButton downButton buttonBox accepted() ToolGroupConfigurationDialog accept() 20 365 22 387 buttonBox rejected() ToolGroupConfigurationDialog reject() 143 370 145 391 eric4-4.5.18/eric/Preferences/PaxHeaders.8617/ShortcutDialog.py0000644000175000001440000000013212261012650022252 xustar000000000000000030 mtime=1388582312.645085262 30 atime=1389081083.502724389 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ShortcutDialog.py0000644000175000001440000001352312261012650022010 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Module implementing a dialog for the configuration of a keyboard shortcut. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from Ui_ShortcutDialog import Ui_ShortcutDialog class ShortcutDialog(QDialog, Ui_ShortcutDialog): """ Class implementing a dialog for the configuration of a keyboard shortcut. @signal shortcutChanged(QKeySequence, QKeySequence, bool, objectType) emitted after the OK button was pressed """ def __init__(self, parent = None, name = None, modal = False): """ Constructor @param parent The parent widget of this dialog. (QWidget) @param name The name of this dialog. (QString) @param modal Flag indicating a modal dialog. (boolean) """ QDialog.__init__(self, parent) if name: self.setObjectName(name) self.setModal(modal) self.setupUi(self) self.keyIndex = 0 self.keys = [0, 0, 0, 0] self.noCheck = False self.objectType = None self.connect(self.primaryClearButton, SIGNAL("clicked()"), self.__clear) self.connect(self.alternateClearButton, SIGNAL("clicked()"), self.__clear) self.connect(self.primaryButton, SIGNAL("clicked()"), self.__typeChanged) self.connect(self.alternateButton, SIGNAL("clicked()"), self.__typeChanged) self.shortcutsGroup.installEventFilter(self) self.primaryButton.installEventFilter(self) self.alternateButton.installEventFilter(self) self.primaryClearButton.installEventFilter(self) self.alternateClearButton.installEventFilter(self) self.keyEdit.installEventFilter(self) self.alternateKeyEdit.installEventFilter(self) self.buttonBox.button(QDialogButtonBox.Ok).installEventFilter(self) self.buttonBox.button(QDialogButtonBox.Cancel).installEventFilter(self) self.keyEdit.setFocus() def setKeys(self, key, alternateKey, noCheck, objectType): """ Public method to set the key to be configured. @param key key sequence to be changed (QKeySequence) @param alternateKey alternate key sequence to be changed (QKeySequence) @param noCheck flag indicating that no uniqueness check should be performed (boolean) @param objectType type of the object (string). """ self.keyIndex = 0 self.keys = [0, 0, 0, 0] self.keyEdit.setText(QString(key)) self.alternateKeyEdit.setText(QString(alternateKey)) self.primaryButton.setChecked(True) self.noCheck = noCheck self.objectType = objectType def on_buttonBox_accepted(self): """ Private slot to handle the OK button press. """ self.hide() self.emit(SIGNAL('shortcutChanged'), QKeySequence(self.keyEdit.text()), QKeySequence(self.alternateKeyEdit.text()), self.noCheck, self.objectType) def __clear(self): """ Private slot to handle the Clear button press. """ self.keyIndex = 0 self.keys = [0, 0, 0, 0] self.__setKeyEditText("") def __typeChanged(self): """ Private slot to handle the change of the shortcuts type. """ self.keyIndex = 0 self.keys = [0, 0, 0, 0] def __setKeyEditText(self, txt): """ Private method to set the text of a key edit. @param txt text to be set (QString) """ if self.primaryButton.isChecked(): self.keyEdit.setText(txt) else: self.alternateKeyEdit.setText(txt) def eventFilter(self, watched, event): """ Method called to filter the event queue. @param watched the QObject being watched @param event the event that occurred @return always False """ if event.type() == QEvent.KeyPress: self.keyPressEvent(event) return True return False def keyPressEvent(self, evt): """ Private method to handle a key press event. @param evt the key event (QKeyEvent) """ if evt.key() == Qt.Key_Control: return if evt.key() == Qt.Key_Meta: return if evt.key() == Qt.Key_Shift: return if evt.key() == Qt.Key_Alt: return if evt.key() == Qt.Key_Menu: return if self.keyIndex == 4: self.keyIndex = 0 self.keys = [0, 0, 0, 0] if evt.key() == Qt.Key_Backtab and evt.modifiers() & Qt.ShiftModifier: self.keys[self.keyIndex] = Qt.Key_Tab else: self.keys[self.keyIndex] = evt.key() if evt.modifiers() & Qt.ShiftModifier: self.keys[self.keyIndex] += Qt.SHIFT if evt.modifiers() & Qt.ControlModifier: self.keys[self.keyIndex] += Qt.CTRL if evt.modifiers() & Qt.AltModifier: self.keys[self.keyIndex] += Qt.ALT if evt.modifiers() & Qt.MetaModifier: self.keys[self.keyIndex] += Qt.META self.keyIndex += 1 if self.keyIndex == 1: self.__setKeyEditText(QString(QKeySequence(self.keys[0]))) elif self.keyIndex == 2: self.__setKeyEditText(QString(QKeySequence(self.keys[0], self.keys[1]))) elif self.keyIndex == 3: self.__setKeyEditText(QString(QKeySequence(self.keys[0], self.keys[1], self.keys[2]))) elif self.keyIndex == 4: self.__setKeyEditText(QString(QKeySequence(self.keys[0], self.keys[1], self.keys[2], self.keys[3]))) eric4-4.5.18/eric/Preferences/PaxHeaders.8617/__init__.py0000644000175000001440000000013212261012650021056 xustar000000000000000030 mtime=1388582312.669085566 30 atime=1389081083.502724389 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/__init__.py0000644000175000001440000023741512261012650020624 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2002 - 2014 Detlev Offenbach # """ Package implementing the preferences interface. The preferences interface consists of a class, which defines the default values for all configuration items and stores the actual values. These values are read and written to the eric4 preferences file by module functions. The data is stored in a file in a subdirectory of the users home directory. The individual configuration data is accessed by accessor functions defined on the module level. The module is simply imported wherever it is needed with the statement 'import Preferences'. Do not use 'from Preferences import *' to import it. """ import sys import os import fnmatch import shutil from PyQt4 import QtCore, QtGui from PyQt4 import Qsci from PyQt4.QtWebKit import QWebSettings import QScintilla.Lexers from Globals import settingsNameOrganization, settingsNameGlobal, settingsNameRecent, \ isWindowsPlatform, getPyQt4ModulesDirectory from Project.ProjectBrowserFlags import SourcesBrowserFlag, FormsBrowserFlag, \ ResourcesBrowserFlag, TranslationsBrowserFlag, InterfacesBrowserFlag, \ OthersBrowserFlag, AllBrowsersFlag class Prefs(object): """ A class to hold all configuration items for the application. """ # defaults for the variables window varDefaults = { "LocalsFilter" : [], "GlobalsFilter" : [] } # defaults for the debugger debuggerDefaults = { "RemoteDbgEnabled" : 0, "RemoteHost" : "", "RemoteExecution" : "", "PassiveDbgEnabled" : 0, "PassiveDbgPort" : 42424, "PassiveDbgType" : "Python", "AutomaticReset" : 0, "Autosave" : 1, "ThreeStateBreakPoints": 0, "SuppressClientExit" : 0, "BreakAlways" : 0, "CustomPythonInterpreter" : 0, "PythonInterpreter" : "", "Python3Interpreter" : "", "RubyInterpreter" : "/usr/bin/ruby", "DebugClientType" : "standard", # supported "standard", "threaded", "custom" "DebugClient" : "", "DebugClientType3" : "standard", # supported "standard", "threaded", "custom" "DebugClient3" : "", "PythonExtensions" : ".py .pyw .ptl", # space separated list of Python extensions "Python3Extensions" : ".py3 .pyw3", # space separated list of Python3 extensions "DebugEnvironmentReplace" : 0, "DebugEnvironment" : "", "PythonRedirect" : 1, "PythonNoEncoding" : 0, "Python3Redirect" : 1, "Python3NoEncoding" : 0, "RubyRedirect" : 1, "ConsoleDbgEnabled" : 0, "ConsoleDbgCommand" : "", "PathTranslation" : 0, "PathTranslationRemote" : "", "PathTranslationLocal" : "", "NetworkInterface" : "127.0.0.1", "AutoViewSourceCode" : 0, } debuggerDefaults["AllowedHosts"] = \ QtCore.QStringList("127.0.0.1") << QtCore.QString("0:0:0:0:0:0:0:1%0") uiDefaults = { "Language" : "System", "Style" : "System", "StyleSheet" : "", "ViewManager" : "tabview", "LayoutType" : "Sidebars", "SidebarDelay": 200, # allowed values are "DockWindows", "FloatingWindows", "Toolboxes" and "Sidebars" "LayoutShellEmbedded" : 0, # 0 = separate # 1 = embedded in debug browser "LayoutFileBrowserEmbedded" : 1, # 0 = separate # 1 = embedded in debug browser # 2 = embedded in project browser "BrowsersListFoldersFirst" : 1, "BrowsersHideNonPublic" : 0, "BrowsersListContentsByOccurrence" : 0, "BrowsersFileFilters" : "*.py[co];*.so;*.dll", "LogViewerAutoRaise" : 1, "SingleApplicationMode" : 0, "CaptionShowsFilename" : 1, "CaptionFilenameLength" : 100, "RecentNumber" : 9, "TopLeftByLeft" : 1, "BottomLeftByLeft" : 0, "TopRightByRight" : 1, "BottomRightByRight" : 0, "TabViewManagerFilenameLength" : 40, "TabViewManagerFilenameOnly" : 1, # the order in ViewProfiles is Project-Viewer, File-Browser, # Debug-Viewer, Python-Shell, Log-Viewer, Task-Viewer, # Templates-Viewer, Multiproject-Viewer, Terminal "ViewProfiles" : { "edit" : [ # visibility (0) [ 1, 0, 0, 1, 1, 1, 1, 1, 1], # saved state main window with dock windows (1) "", # saved states floating windows (2) ["", "", "", "", "", "", "", "", ""], # saved state main window with floating windows (3) "", # saved state main window with toolbox windows (4) "", # visibility of the toolboxes (5) [ 1, 1], # saved states of the splitters and sidebars of the # sidebars layout (6) ["", "", "", ""], ], "debug" : [ # visibility (0) [ 0, 0, 1, 1, 1, 1, 0, 0, 1], # saved state main window with dock windows (1) "", # saved states floating windows (2) ["", "", "", "", "", "", "", "", ""], # saved state main window with floating windows (3) "", # saved state main window with toolbox windows (4) "", # visibility of the toolboxes (5) [ 0, 1], # saved states of the splitters and sidebars of the # sidebars layout (6) ["", "", "", ""], ], }, "ToolbarManagerState" : QtCore.QByteArray(), "ShowSplash" : 1, "UseKDEDialogs" : 0, "SingleCloseButton" : 0, "PerformVersionCheck" : 4, # 0 = off # 1 = at startup # 2 = daily # 3 = weekly # 4 = monthly "UseProxy" : 0, "UseSystemProxy" : 1, "ProxyHost" : "", "ProxyPort" : 80, "ProxyUser" : "", "ProxyPassword" : "", "ProxyType" : 0, # 0 = transparent HTTP proxy # 1 = caching HTTP proxy # 2 = SOCKS5 proxy "PluginRepositoryUrl" : \ "http://eric-ide.python-projects.org/plugins4/repository.xml", "VersionsUrls" : QtCore.QStringList() \ << "http://die-offenbachs.homelinux.org:48888/eric/snapshots4/versions" \ << "http://eric-ide.python-projects.org/snapshots4/versions", "OpenOnStartup" : 0, # 0 = nothing # 1 = last file # 2 = last project # 3 = last multiproject # 4 = last global session "DownloadPath" : "", "RequestDownloadFilename" : 1, "CheckErrorLog" : 1, "LogStdErrColour" : QtGui.QColor(QtCore.Qt.red), } viewProfilesLength = len(uiDefaults["ViewProfiles"]["edit"][2]) iconsDefaults = { "Path" : QtCore.QStringList(), } # defaults for the editor settings editorDefaults = { "AutosaveInterval" : 0, "TabWidth" : 4, "IndentWidth" : 4, "IndentationGuides" : 1, "UnifiedMargins" : 0, "LinenoMargin" : 1, "FoldingMargin" : 1, "FoldingStyle" : 1, "TabForIndentation" : 0, "TabIndents" : 1, "ConvertTabsOnLoad" : 0, "AutomaticEOLConversion" : 1, "ShowWhitespace" : 0, "WhitespaceSize" : 1, "ShowEOL" : 0, "UseMonospacedFont" : 0, "WrapLongLines" : 0, "WarnFilesize" : 512, "ClearBreaksOnClose" : 1, "StripTrailingWhitespace" : 0, "CommentColumn0" : 1, "OverrideEditAreaColours": 0, "EdgeMode" : Qsci.QsciScintilla.EdgeNone, "EdgeColumn" : 80, "AutoIndentation" : 1, "BraceHighlighting" : 1, "CreateBackupFile" : 0, "CaretLineVisible" : 0, "CaretWidth" : 1, "ColourizeSelText" : 0, "CustomSelectionColours" : 0, "ExtendSelectionToEol" : 0, "AutoPrepareAPIs" : 0, "AutoCompletionEnabled" : 0, "AutoCompletionCaseSensitivity" : 1, "AutoCompletionReplaceWord" : 0, "AutoCompletionShowSingle" : 0, "AutoCompletionSource" : Qsci.QsciScintilla.AcsDocument, "AutoCompletionThreshold" : 2, "AutoCompletionFillups" : 0, "CallTipsEnabled" : 0, "CallTipsVisible" : 0, "CallTipsStyle" : Qsci.QsciScintilla.CallTipsNoContext, "CallTipsScintillaOnFail" : 0, # show QScintilla calltips, if plugin fails "AutoCheckSyntax" : 1, "AutoReopen" : 0, "MiniContextMenu" : 0, "SearchMarkersEnabled" : 1, "QuickSearchMarkersEnabled" : 1, "MarkOccurrencesEnabled" : 1, "MarkOccurrencesTimeout" : 500, # 500 milliseconds "AdvancedEncodingDetection" : 1, "SpellCheckingEnabled" : 1, "AutoSpellCheckingEnabled" : 1, "AutoSpellCheckChunkSize" : 30, "SpellCheckStringsOnly" : 1, "SpellCheckingMinWordSize" : 3, "SpellCheckingDefaultLanguage" : "en", "SpellCheckingPersonalWordList" : "", "SpellCheckingPersonalExcludeList" : "", "DefaultEncoding" : "utf-8", "DefaultOpenFilter" : QtGui.QApplication.translate('Lexers', 'Python Files (*.py *.py3)'), "DefaultSaveFilter" : QtGui.QApplication.translate('Lexers', "Python Files (*.py)"), "AdditionalOpenFilters" : QtCore.QStringList(), "AdditionalSaveFilters" : QtCore.QStringList(), # All (most) lexers "AllFoldCompact" : 1, # Bash specifics "BashFoldComment" : 1, # CMake specifics "CMakeFoldAtElse" : 0, # C++ specifics "CppCaseInsensitiveKeywords" : 0, "CppFoldComment" : 1, "CppFoldPreprocessor" : 0, "CppFoldAtElse" : 0, "CppIndentOpeningBrace" : 0, "CppIndentClosingBrace" : 0, "CppDollarsAllowed" : 1, "CppStylePreprocessor": 0, "CppHighlightTripleQuotedStrings": 0, # CSS specifics "CssFoldComment" : 1, # D specifics "DFoldComment" : 1, "DFoldAtElse" : 0, "DIndentOpeningBrace" : 0, "DIndentClosingBrace" : 0, # HTML specifics "HtmlFoldPreprocessor" : 0, "HtmlFoldScriptComments" : 0, "HtmlFoldScriptHeredocs" : 0, "HtmlCaseSensitiveTags" : 0, "HtmlDjangoTemplates": 0, "HtmlMakoTemplates": 0, # Pascal specifics "PascalFoldComment" : 1, "PascalFoldPreprocessor" : 0, "PascalSmartHighlighting" : 1, # Perl specifics "PerlFoldComment" : 1, "PerlFoldPackages" : 1, "PerlFoldPODBlocks" : 1, "PerlFoldAtElse": 0, # PostScript specifics "PostScriptTokenize" : 0, "PostScriptLevel" : 3, "PostScriptFoldAtElse" : 0, # Povray specifics "PovFoldComment" : 1, "PovFoldDirectives" : 0, # Properties specifics "PropertiesInitialSpaces": 1, # Python specifics "PythonBadIndentation" : 1, "PythonFoldComment" : 1, "PythonFoldString" : 1, "PythonAutoIndent" : 1, "PythonAllowV2Unicode" : 1, "PythonAllowV3Binary" : 1, "PythonAllowV3Bytes" : 1, "PythonFoldQuotes": 0, "PythonStringsOverNewLineAllowed": 0, "PythonHighlightSubidentifier": 1, # Ruby specifics "RubyFoldComment": 0, # SQL specifics "SqlFoldComment" : 1, "SqlBackslashEscapes" : 0, "SqlDottedWords": 0, "SqlFoldAtElse": 0, "SqlFoldOnlyBegin": 0, "SqlHashComments": 0, "SqlQuotedIdentifiers": 0, # TCL specifics "TclFoldComment": 0, # TeX specifics "TexFoldComment": 0, "TexProcessComments": 0, "TexProcessIf": 1, # VHDL specifics "VHDLFoldComment" : 1, "VHDLFoldAtElse" : 1, "VHDLFoldAtBegin" : 1, "VHDLFoldAtParenthesis" : 1, # XML specifics "XMLStyleScripts" : 1, # YAML specifics "YAMLFoldComment" : 0, } if isWindowsPlatform(): editorDefaults["EOLMode"] = Qsci.QsciScintilla.EolWindows else: editorDefaults["EOLMode"] = Qsci.QsciScintilla.EolUnix editorColourDefaults = { "CurrentMarker" : QtGui.QColor(QtCore.Qt.yellow), "ErrorMarker" : QtGui.QColor(QtCore.Qt.red), "MatchingBrace" : QtGui.QColor(QtCore.Qt.green), "MatchingBraceBack" : QtGui.QColor(QtCore.Qt.white), "NonmatchingBrace" : QtGui.QColor(QtCore.Qt.red), "NonmatchingBraceBack" : QtGui.QColor(QtCore.Qt.white), "CallTipsBackground" : QtGui.QColor(QtCore.Qt.white), "CaretForeground" : QtGui.QColor(QtCore.Qt.black), "CaretLineBackground" : QtGui.QColor(QtCore.Qt.white), "Edge" : QtGui.QColor(QtCore.Qt.lightGray), "SelectionBackground" : QtGui.QColor(QtCore.Qt.black), "SelectionForeground" : QtGui.QColor(QtCore.Qt.white), "SearchMarkers" : QtGui.QColor(QtCore.Qt.blue), "MarginsBackground" : QtGui.QColor(QtCore.Qt.lightGray), "MarginsForeground" : QtGui.QColor(QtCore.Qt.black), "FoldmarginBackground" : QtGui.QColor(230, 230, 230), "SpellingMarkers" : QtGui.QColor(QtCore.Qt.red), "WhitespaceForeground" : QtGui.QColor(QtCore.Qt.darkGray), "WhitespaceBackground" : QtGui.QColor(QtCore.Qt.white), "EditAreaForeground" : QtGui.QApplication.palette().color( QtGui.QPalette.Active, QtGui.QPalette.Base), "EditAreaBackground" : QtGui.QApplication.palette().color( QtGui.QPalette.Active, QtGui.QPalette.Text), } editorOtherFontsDefaults = { "MarginsFont" : "Sans Serif,10,-1,5,50,0,0,0,0,0", "DefaultFont" : "Sans Serif,10,-1,5,50,0,0,0,0,0", "MonospacedFont" : "Courier,10,-1,5,50,0,0,0,0,0", } editorTypingDefaults = { "Python/EnabledTypingAids" : 1, "Python/InsertClosingBrace" : 1, "Python/IndentBrace" : 0, "Python/SkipBrace" : 1, "Python/InsertQuote" : 1, "Python/DedentElse" : 1, "Python/DedentExcept" : 1, "Python/Py24StyleTry" : 1, "Python/InsertImport" : 1, "Python/InsertSelf" : 1, "Python/InsertBlank" : 1, "Python/ColonDetection" : 1, "Python/DedentDef" : 0, "Ruby/EnabledTypingAids" : 1, "Ruby/InsertClosingBrace" : 1, "Ruby/IndentBrace" : 1, "Ruby/SkipBrace" : 1, "Ruby/InsertQuote" : 1, "Ruby/InsertBlank" : 1, "Ruby/InsertHereDoc" : 1, "Ruby/InsertInlineDoc" : 1, } editorExporterDefaults = { "HTML/WYSIWYG" : 1, "HTML/Folding" : 0, "HTML/OnlyStylesUsed" : 0, "HTML/FullPathAsTitle" : 0, "HTML/UseTabs" : 0, "RTF/WYSIWYG" : 1, "RTF/UseTabs" : 0, "RTF/Font" : "Courier New,10,-1,5,50,0,0,0,0,0", "PDF/Magnification" : 0, "PDF/Font" : "Helvetica", # must be Courier, Helvetica or Times "PDF/PageSize" : "A4", # must be A4 or Letter "PDF/MarginLeft" : 36, "PDF/MarginRight" : 36, "PDF/MarginTop" : 36, "PDF/MarginBottom" : 36, "TeX/OnlyStylesUsed" : 0, "TeX/FullPathAsTitle" : 0, } # defaults for the printer settings printerDefaults = { "PrinterName" : "", "ColorMode" : 1, "FirstPageFirst" : 1, "Magnification" : -3, "Orientation" : 0, "PageSize": 0, "HeaderFont" : "Serif,10,-1,5,50,0,0,0,0,0", "LeftMargin" : 1.0, "RightMargin" : 1.0, "TopMargin" : 1.0, "BottomMargin" : 1.0, } # defaults for the project settings projectDefaults = { "SearchNewFiles" : 0, "SearchNewFilesRecursively" : 0, "AutoIncludeNewFiles" : 0, "AutoLoadSession" : 0, "AutoSaveSession" : 0, "SessionAllBreakpoints" : 0, "CompressedProjectFiles" : 0, "XMLTimestamp" : 1, "AutoCompileForms" : 0, "AutoCompileResources" : 0, "AutoLoadDbgProperties" : 0, "AutoSaveDbgProperties" : 0, "HideGeneratedForms" : 0, "FollowEditor" : 1, "RecentNumber" : 9, } # defaults for the multi project settings multiProjectDefaults = { "OpenMasterAutomatically" : 1, "XMLTimestamp" : 1, "RecentNumber" : 9, "Workspace": "", } # defaults for the project browser flags settings projectBrowserFlagsDefaults = { "Qt4" : SourcesBrowserFlag | \ FormsBrowserFlag | \ ResourcesBrowserFlag | \ TranslationsBrowserFlag | \ InterfacesBrowserFlag | \ OthersBrowserFlag, "Qt4C" : SourcesBrowserFlag | \ ResourcesBrowserFlag | \ TranslationsBrowserFlag | \ InterfacesBrowserFlag | \ OthersBrowserFlag, "E4Plugin" : SourcesBrowserFlag | \ FormsBrowserFlag | \ ResourcesBrowserFlag | \ TranslationsBrowserFlag | \ InterfacesBrowserFlag | \ OthersBrowserFlag, "Kde4" : SourcesBrowserFlag | \ FormsBrowserFlag | \ ResourcesBrowserFlag | \ InterfacesBrowserFlag | \ OthersBrowserFlag, "Console" : SourcesBrowserFlag | \ InterfacesBrowserFlag | \ OthersBrowserFlag, "Other" : SourcesBrowserFlag | \ InterfacesBrowserFlag | \ OthersBrowserFlag, "PySide" : SourcesBrowserFlag | \ FormsBrowserFlag | \ ResourcesBrowserFlag | \ TranslationsBrowserFlag | \ InterfacesBrowserFlag | \ OthersBrowserFlag, "PySideC" : SourcesBrowserFlag | \ ResourcesBrowserFlag | \ TranslationsBrowserFlag | \ InterfacesBrowserFlag | \ OthersBrowserFlag, } # defaults for the project browser colour settings projectBrowserColourDefaults = { "Highlighted" : QtGui.QColor(QtCore.Qt.red), "VcsAdded" : QtGui.QColor(QtCore.Qt.blue), "VcsConflict" : QtGui.QColor(QtCore.Qt.red), "VcsModified" : QtGui.QColor(QtCore.Qt.yellow), "VcsReplaced" : QtGui.QColor(QtCore.Qt.cyan), "VcsUpdate" : QtGui.QColor(QtCore.Qt.green), "VcsRemoved" : QtGui.QColor(QtCore.Qt.magenta) } # defaults for the help settings helpDefaults = { "HelpViewerType" : 1, # this coresponds with the radio button id "CustomViewer" : "", "PythonDocDir" : "", "QtDocDir" : "", "Qt4DocDir" : "", "PyQt4DocDir" : "", "PyKDE4DocDir" : "", "PySideDocDir" : "", "SingleHelpWindow" : 1, "SaveGeometry" : 1, "HelpViewerState" : QtCore.QByteArray(), "WebSearchSuggestions" : 1, "WebSearchEngine" : "Google", "WebSearchKeywords" : [], # array of two tuples (keyword, search engine name) "DiskCacheEnabled" : 1, "DiskCacheSize" : 50, # 50 MB "AcceptCookies" : 2, # CookieJar.AcceptOnlyFromSitesNavigatedTo "KeepCookiesUntil" : 0, # CookieJar.KeepUntilExpire "FilterTrackingCookies" : 1, "PrintBackgrounds" : 0, "StartupBehavior" : 0, # show home page "HomePage": "pyrc:home", "HistoryLimit" : 30, "DefaultScheme" : "file://", "SavePasswords" : 0, "AdBlockEnabled" : 0, "AdBlockSubscriptions" : QtCore.QStringList(), "SearchLanguage": QtCore.QLocale().language(), } @classmethod def initWebSettingsDefaults(cls): """ Class method to initialize the web settings related defaults. """ websettings = QWebSettings.globalSettings() fontFamily = websettings.fontFamily(QWebSettings.StandardFont) fontSize = websettings.fontSize(QWebSettings.DefaultFontSize) cls.helpDefaults["StandardFont"] = QtGui.QFont(fontFamily, fontSize).toString() fontFamily = websettings.fontFamily(QWebSettings.FixedFont) fontSize = websettings.fontSize(QWebSettings.DefaultFixedFontSize) cls.helpDefaults["FixedFont"] = QtGui.QFont(fontFamily, fontSize).toString() cls.helpDefaults.update({ "AutoLoadImages" : websettings.testAttribute(QWebSettings.AutoLoadImages), "UserStyleSheet" : "", "SaveUrlColor" : QtGui.QColor(248, 248, 210), "JavaEnabled" : websettings.testAttribute(QWebSettings.JavaEnabled), "JavaScriptEnabled" : websettings.testAttribute(QWebSettings.JavascriptEnabled), "JavaScriptCanOpenWindows" : websettings.testAttribute(QWebSettings.JavascriptCanOpenWindows), "JavaScriptCanAccessClipboard" : websettings.testAttribute(QWebSettings.JavascriptCanAccessClipboard), "PluginsEnabled" : websettings.testAttribute(QWebSettings.PluginsEnabled), }) cls.webSettingsIntitialized = True webSettingsIntitialized = False # defaults for system settings if isWindowsPlatform(): sysDefaults = { "StringEncoding" : "cp1252", "IOEncoding" : "cp1252", } else: sysDefaults = { "StringEncoding" : "utf-8", "IOEncoding" : "utf-8", } # defaults for the shell settings shellDefaults = { "LinenoMargin" : 1, "AutoCompletionEnabled" : 1, "CallTipsEnabled" : 1, "WrapEnabled" : 1, "MaxHistoryEntries" : 100, "SyntaxHighlightingEnabled" : 1, "ShowStdOutErr" : 1, "UseMonospacedFont" : 0, "MonospacedFont" : "Courier,10,-1,5,50,0,0,0,0,0", "MarginsFont" : "Sans Serif,10,-1,5,50,0,0,0,0,0", } # defaults for Qt related stuff qtDefaults = { "Qt4TranslationsDir" : "", "QtToolsPrefix4" : "", "QtToolsPostfix4" : "", "Qt4Dir" : "", } # defaults for corba related stuff corbaDefaults = { "omniidl" : "omniidl" } # defaults for user related stuff userDefaults = { "Email" : "", "MailServer" : "", "Signature" : "", "MailServerAuthentication" : 0, "MailServerUser" : "", "MailServerPassword" : "", "MailServerUseTLS" : 0, "MailServerPort" : 25, "UseSystemEmailClient" : 0, } # defaults for vcs related stuff vcsDefaults = { "AutoClose" : 0, "AutoSaveFiles" : 1, "AutoSaveProject" : 1, "AutoUpdate" : 0, "StatusMonitorInterval" : 120, "MonitorLocalStatus" : 0, } # defaults for tasks related stuff tasksDefaults = { "TasksMarkers" : "TO" + "DO:", "TasksMarkersBugfix" : "FIX" + "ME:", # needed to keep it from being recognized as a task "TasksColour" : QtGui.QColor(QtCore.Qt.black), "TasksBugfixColour" : QtGui.QColor(QtCore.Qt.red), "TasksBgColour" : QtGui.QColor(QtCore.Qt.white), "TasksProjectBgColour" : QtGui.QColor(QtCore.Qt.lightGray), "ClearOnFileClose": 1, } # defaults for templates related stuff templatesDefaults = { "AutoOpenGroups" : 1, "SingleDialog" : 0, "ShowTooltip" : 0, "SeparatorChar" : "$", } # defaults for plugin manager related stuff pluginManagerDefaults = { "ActivateExternal" : 1, "DownloadPath" : "" } # defaults for the printer settings graphicsDefaults = { "Font" : "SansSerif,10,-1,5,50,0,0,0,0,0" } # defaults for the icon editor iconEditorDefaults = { "IconEditorState" : QtCore.QByteArray(), } # defaults for tray starter trayStarterDefaults = { "TrayStarterIcon" : "erict.png", # valid values are: erict.png, erict-hc.png, erict-bw.png, erict-bwi.png } # defaults for geometry geometryDefaults = { "HelpViewerGeometry" : QtCore.QByteArray(), "IconEditorGeometry" : QtCore.QByteArray(), "MainGeometry" : QtCore.QByteArray(), "MainMaximized" : 0, } # if true, revert layouts to factory defaults resetLayout = False def readToolGroups(prefClass = Prefs): """ Module function to read the tool groups configuration. @param prefClass preferences class used as the storage area @return list of tuples defing the tool groups """ toolGroups = [] groups = prefClass.settings.value("Toolgroups/Groups", QtCore.QVariant(0)).toInt()[0] for groupIndex in range(groups): groupName = \ prefClass.settings.value("Toolgroups/%02d/Name" % groupIndex).toString() group = [unicode(groupName), []] items = prefClass.settings.value("Toolgroups/%02d/Items" % groupIndex, QtCore.QVariant(0)).toInt()[0] for ind in range(items): menutext = prefClass.settings.value(\ "Toolgroups/%02d/%02d/Menutext" % (groupIndex, ind)).toString() icon = prefClass.settings.value(\ "Toolgroups/%02d/%02d/Icon" % (groupIndex, ind)).toString() executable = prefClass.settings.value(\ "Toolgroups/%02d/%02d/Executable" % (groupIndex, ind)).toString() arguments = prefClass.settings.value(\ "Toolgroups/%02d/%02d/Arguments" % (groupIndex, ind)).toString() redirect = prefClass.settings.value(\ "Toolgroups/%02d/%02d/Redirect" % (groupIndex, ind)).toString() if not menutext.isEmpty(): if unicode(menutext) == '--': tool = { 'menutext' : '--', 'icon' : '', 'executable' : '', 'arguments' : '', 'redirect' : 'no', } group[1].append(tool) elif not executable.isEmpty(): tool = { 'menutext' : unicode(menutext), 'icon' : unicode(icon), 'executable' : unicode(executable), 'arguments' : unicode(arguments), 'redirect' : unicode(redirect), } group[1].append(tool) toolGroups.append(group) currentGroup = prefClass.settings.value("Toolgroups/Current Group", QtCore.QVariant(-1)).toInt()[0] return toolGroups, currentGroup def saveToolGroups(toolGroups, currentGroup, prefClass = Prefs): """ Module function to write the tool groups configuration. @param toolGroups reference to the list of tool groups @param currentGroup index of the currently selected tool group (integer) @param prefClass preferences class used as the storage area """ # first step, remove all tool group entries prefClass.settings.remove("Toolgroups") # second step, write the tool group entries prefClass.settings.setValue("Toolgroups/Groups", QtCore.QVariant(len(toolGroups))) groupIndex = 0 for group in toolGroups: prefClass.settings.setValue("Toolgroups/%02d/Name" % groupIndex, QtCore.QVariant(group[0])) prefClass.settings.setValue("Toolgroups/%02d/Items" % groupIndex, QtCore.QVariant(len(group[1]))) ind = 0 for tool in group[1]: prefClass.settings.setValue(\ "Toolgroups/%02d/%02d/Menutext" % (groupIndex, ind), QtCore.QVariant(tool['menutext'])) prefClass.settings.setValue(\ "Toolgroups/%02d/%02d/Icon" % (groupIndex, ind), QtCore.QVariant(tool['icon'])) prefClass.settings.setValue(\ "Toolgroups/%02d/%02d/Executable" % (groupIndex, ind), QtCore.QVariant(tool['executable'])) prefClass.settings.setValue(\ "Toolgroups/%02d/%02d/Arguments" % (groupIndex, ind), QtCore.QVariant(tool['arguments'])) prefClass.settings.setValue(\ "Toolgroups/%02d/%02d/Redirect" % (groupIndex, ind), QtCore.QVariant(tool['redirect'])) ind += 1 groupIndex += 1 prefClass.settings.setValue(\ "Toolgroups/Current Group", QtCore.QVariant(currentGroup)) def initPreferences(): """ Module function to initialize the central configuration store. """ if not isWindowsPlatform(): cfile = os.path.join(os.path.expanduser("~"), ".config", settingsNameOrganization, settingsNameGlobal + ".conf") ifile = os.path.splitext(cfile)[0] + ".ini" if os.path.exists(cfile) and not os.path.exists(ifile): os.rename(cfile, ifile) Prefs.settings = QtCore.QSettings( QtCore.QSettings.IniFormat, QtCore.QSettings.UserScope, settingsNameOrganization, settingsNameGlobal) if not isWindowsPlatform(): hp = QtCore.QDir.homePath() dn = QtCore.QDir(hp) dn.mkdir(".eric4") QtCore.QCoreApplication.setOrganizationName(settingsNameOrganization) QtCore.QCoreApplication.setApplicationName(settingsNameGlobal) def syncPreferences(prefClass = Prefs): """ Module function to sync the preferences to disk. In addition to syncing, the central configuration store is reinitialized as well. @param prefClass preferences class used as the storage area """ prefClass.settings.setValue("General/Configured", QtCore.QVariant(1)) initPreferences() def exportPreferences(prefClass = Prefs): """ Module function to export the current preferences. @param prefClass preferences class used as the storage area """ from KdeQt import KQFileDialog selectedFilter = QtCore.QString('') filename = KQFileDialog.getSaveFileName(\ None, QtCore.QCoreApplication.translate("Preferences", "Export Preferences"), QtCore.QString(), QtCore.QCoreApplication.translate("Preferences", "Properties File (*.ini);;All Files (*)"), selectedFilter, QtGui.QFileDialog.Options(QtGui.QFileDialog.DontConfirmOverwrite)) if not filename.isEmpty(): ext = QtCore.QFileInfo(filename).suffix() if ext.isEmpty(): ex = selectedFilter.section('(*',1,1).section(')',0,0) if not ex.isEmpty(): filename.append(ex) settingsFile = unicode(prefClass.settings.fileName()) prefClass.settings = None shutil.copy(settingsFile, unicode(filename)) initPreferences() def importPreferences(prefClass = Prefs): """ Module function to import preferences from a file previously saved by the export function. @param prefClass preferences class used as the storage area """ from KdeQt import KQFileDialog filename = KQFileDialog.getOpenFileName(\ None, QtCore.QCoreApplication.translate("Preferences", "Import Preferences"), QtCore.QString(), QtCore.QCoreApplication.translate("Preferences", "Properties File (*.ini);;All Files (*)"), None) if not filename.isEmpty(): settingsFile = unicode(prefClass.settings.fileName()) shutil.copy(unicode(filename), settingsFile) initPreferences() def isConfigured(prefClass = Prefs): """ Module function to check, if the the application has been configured. @param prefClass preferences class used as the storage area @return flag indicating the configured status (boolean) """ return prefClass.settings.value("General/Configured", QtCore.QVariant(0)).toInt()[0] def initRecentSettings(): """ Module function to initialize the central configuration store for recently opened files and projects. This function is called once upon import of the module. """ if not isWindowsPlatform(): cfile = os.path.join(os.path.expanduser("~"), ".config", settingsNameOrganization, settingsNameRecent + ".conf") ifile = os.path.splitext(cfile)[0] + ".ini" if os.path.exists(cfile) and not os.path.exists(ifile): os.rename(cfile, ifile) Prefs.rsettings = QtCore.QSettings( QtCore.QSettings.IniFormat, QtCore.QSettings.UserScope, settingsNameOrganization, settingsNameRecent) def getVarFilters(prefClass = Prefs): """ Module function to retrieve the variables filter settings. @param prefClass preferences class used as the storage area @return a tuple defing the variables filter """ localsFilter = eval(unicode(prefClass.settings.value("Variables/LocalsFilter", QtCore.QVariant(unicode(prefClass.varDefaults["LocalsFilter"]))).toString())) globalsFilter = eval(unicode(prefClass.settings.value("Variables/GlobalsFilter", QtCore.QVariant(unicode(prefClass.varDefaults["GlobalsFilter"]))).toString())) return (localsFilter, globalsFilter) def setVarFilters(filters, prefClass = Prefs): """ Module function to store the variables filter settings. @param prefClass preferences class used as the storage area """ prefClass.settings.setValue("Variables/LocalsFilter", QtCore.QVariant(unicode(filters[0]))) prefClass.settings.setValue("Variables/GlobalsFilter", QtCore.QVariant(unicode(filters[1]))) def getDebugger(key, prefClass = Prefs): """ Module function to retrieve the debugger settings. @param key the key of the value to get @param prefClass preferences class used as the storage area @return the requested debugger setting """ if key in ["RemoteDbgEnabled", "PassiveDbgEnabled", "PassiveDbgPort", "CustomPythonInterpreter", "AutomaticReset", "DebugEnvironmentReplace", "PythonRedirect", "PythonNoEncoding", "Python3Redirect", "Python3NoEncoding", "RubyRedirect", "ConsoleDbgEnabled", "PathTranslation", "Autosave", "ThreeStateBreakPoints", "SuppressClientExit", "BreakAlways", "AutoViewSourceCode", ]: return prefClass.settings.value("Debugger/" + key, QtCore.QVariant(prefClass.debuggerDefaults[key])).toInt()[0] if key in ["RemoteHost", "RemoteExecution", "PythonInterpreter", "Python3Interpreter", "RubyInterpreter", "DebugClient", "DebugClientType", "DebugClient3", "DebugClientType3", "DebugEnvironment", "ConsoleDbgCommand", "PathTranslationRemote", "PathTranslationLocal", "NetworkInterface", "PassiveDbgType", "PythonExtensions", "Python3Extensions"]: return prefClass.settings.value("Debugger/" + key, QtCore.QVariant(prefClass.debuggerDefaults[key])).toString() if key in ["AllowedHosts"]: return prefClass.settings.value("Debugger/" + key, QtCore.QVariant(prefClass.debuggerDefaults[key])).toStringList() def setDebugger(key, value, prefClass = Prefs): """ Module function to store the debugger settings. @param key the key of the setting to be set @param value the value to be set @param prefClass preferences class used as the storage area """ prefClass.settings.setValue("Debugger/" + key, QtCore.QVariant(value)) def getPython(key, prefClass = Prefs): """ Module function to retrieve the Python settings. @param key the key of the value to get @param prefClass preferences class used as the storage area @return the requested debugger setting """ if key in ["PythonExtensions", "Python3Extensions"]: exts = [] for ext in unicode(getDebugger(key, prefClass)).split(): if ext.startswith("."): exts.append(ext) else: exts.append(".%s" % ext) return exts def setPython(key, value, prefClass = Prefs): """ Module function to store the Python settings. @param key the key of the setting to be set @param value the value to be set @param prefClass preferences class used as the storage area """ if key in ["PythonExtensions", "Python3Extensions"]: setDebugger(key, value, prefClass) def getUILanguage(prefClass = Prefs): """ Module function to retrieve the language for the user interface. @param prefClass preferences class used as the storage area @return the language for the UI """ lang = \ prefClass.settings.value("UI/Language", QtCore.QVariant(prefClass.uiDefaults["Language"])).toString() if unicode(lang) == "None" or unicode(lang) == "" or lang is None: return None else: return unicode(lang) def setUILanguage(lang, prefClass = Prefs): """ Module function to store the language for the user interface. @param lang the language @param prefClass preferences class used as the storage area """ if lang is None: prefClass.settings.setValue("UI/Language", QtCore.QVariant("None")) else: prefClass.settings.setValue("UI/Language", QtCore.QVariant(lang)) def getUILayout(prefClass = Prefs): """ Module function to retrieve the layout for the user interface. @param prefClass preferences class used as the storage area @return the UI layout as a tuple of main layout, flag for an embedded shell and a value for an embedded file browser """ layout = (\ prefClass.settings.value("UI/LayoutType", QtCore.QVariant(prefClass.uiDefaults["LayoutType"])).toString(), prefClass.settings.value("UI/LayoutShellEmbedded", QtCore.QVariant(prefClass.uiDefaults["LayoutShellEmbedded"]))\ .toInt()[0], prefClass.settings.value("UI/LayoutFileBrowserEmbedded", QtCore.QVariant(prefClass.uiDefaults["LayoutFileBrowserEmbedded"]))\ .toInt()[0], ) return layout def setUILayout(layout, prefClass = Prefs): """ Module function to store the layout for the user interface. @param layout the layout type @param prefClass preferences class used as the storage area """ prefClass.settings.setValue("UI/LayoutType", QtCore.QVariant(layout[0])) prefClass.settings.setValue("UI/LayoutShellEmbedded", QtCore.QVariant(layout[1])) prefClass.settings.setValue("UI/LayoutFileBrowserEmbedded", QtCore.QVariant(layout[2])) def getViewManager(prefClass = Prefs): """ Module function to retrieve the selected viewmanager type. @param prefClass preferences class used as the storage area @return the viewmanager type """ return unicode(prefClass.settings.value("UI/ViewManager", QtCore.QVariant(prefClass.uiDefaults["ViewManager"])).toString()) def setViewManager(vm, prefClass = Prefs): """ Module function to store the selected viewmanager type. @param vm the viewmanager type @param prefClass preferences class used as the storage area """ prefClass.settings.setValue("UI/ViewManager", QtCore.QVariant(vm)) def getUI(key, prefClass = Prefs): """ Module function to retrieve the various UI settings. @param key the key of the value to get @param prefClass preferences class used as the storage area @return the requested UI setting """ if key in ["BrowsersListFoldersFirst", "BrowsersHideNonPublic", "BrowsersListContentsByOccurrence", "LogViewerAutoRaise", "SingleApplicationMode", "TabViewManagerFilenameLength", "TabViewManagerFilenameOnly", "CaptionShowsFilename", "CaptionFilenameLength", "RecentNumber", "UseKDEDialogs", "ShowSplash", "PerformVersionCheck", "SingleCloseButton", "UseProxy", "ProxyPort", "ProxyType", "UseSystemProxy", "TopLeftByLeft", "BottomLeftByLeft", "TopRightByRight", "BottomRightByRight", "OpenOnStartup", "RequestDownloadFilename", "LayoutShellEmbedded", "LayoutFileBrowserEmbedded", "CheckErrorLog", "SidebarDelay"]: return prefClass.settings.value("UI/" + key, QtCore.QVariant(prefClass.uiDefaults[key])).toInt()[0] if key in ["Style", "StyleSheet", "ProxyHost", "ProxyUser", "PluginRepositoryUrl", "DownloadPath", "BrowsersFileFilters"]: return prefClass.settings.value("UI/" + key, QtCore.QVariant(prefClass.uiDefaults[key])).toString() if key == "ProxyPassword": from Utilities import pwDecode return pwDecode(prefClass.settings.value("UI/" + key, QtCore.QVariant(prefClass.uiDefaults[key])).toString()) if key in ["VersionsUrls"]: urls = prefClass.settings.value("UI/" + key, QtCore.QVariant(prefClass.uiDefaults[key])).toStringList() if len(urls) == 0: return prefClass.uiDefaults[key] else: return urls if key in ["LogStdErrColour"]: col = prefClass.settings.value("UI/" + key) if col.isValid(): return QtGui.QColor(col.toString()) else: return prefClass.uiDefaults[key] if key == "ViewProfiles": v = prefClass.settings.value("UI/ViewProfiles") if v.isValid(): viewProfiles = eval(unicode(v.toString())) for name in ["edit", "debug"]: # adjust entries for individual windows vpLength = len(viewProfiles[name][0]) if vpLength < prefClass.viewProfilesLength: viewProfiles[name][0].extend(\ prefClass.uiDefaults["ViewProfiles"][name][0][vpLength:]) vpLength = len(viewProfiles[name][2]) if vpLength < prefClass.viewProfilesLength: viewProfiles[name][2].extend(\ prefClass.uiDefaults["ViewProfiles"][name][2][vpLength:]) # adjust profile vpLength = len(viewProfiles[name]) if vpLength < len(prefClass.uiDefaults["ViewProfiles"][name]): viewProfiles[name].extend( prefClass.uiDefaults["ViewProfiles"][name][vpLength:]) else: viewProfiles = prefClass.uiDefaults["ViewProfiles"] return viewProfiles if key == "ToolbarManagerState": v = prefClass.settings.value("UI/ToolbarManagerState") if v.isValid(): return v.toByteArray() else: return prefClass.uiDefaults["ToolbarManagerState"] def setUI(key, value, prefClass = Prefs): """ Module function to store the various UI settings. @param key the key of the setting to be set @param value the value to be set @param prefClass preferences class used as the storage area """ if key == "ViewProfiles": prefClass.settings.setValue("UI/" + key, QtCore.QVariant(unicode(value))) elif key == "LogStdErrColour": prefClass.settings.setValue("UI/" + key, QtCore.QVariant(value.name())) elif key == "ProxyPassword": from Utilities import pwEncode prefClass.settings.setValue( "UI/" + key, QtCore.QVariant(pwEncode(value))) else: prefClass.settings.setValue("UI/" + key, QtCore.QVariant(value)) def getIcons(key, prefClass = Prefs): """ Module function to retrieve the various Icons settings. @param key the key of the value to get @param prefClass preferences class used as the storage area @return the requested Icons setting """ dirlist = prefClass.settings.value("UI/Icons/" + key) if dirlist.isValid(): return dirlist.toStringList() else: return prefClass.iconsDefaults[key] def setIcons(key, value, prefClass = Prefs): """ Module function to store the various Icons settings. @param key the key of the setting to be set @param value the value to be set @param prefClass preferences class used as the storage area """ prefClass.settings.setValue("UI/Icons/" + key, QtCore.QVariant(value)) def getEditor(key, prefClass = Prefs): """ Module function to retrieve the various editor settings. @param key the key of the value to get @param prefClass preferences class used as the storage area @return the requested editor setting """ if key in ["DefaultEncoding", "DefaultOpenFilter", "DefaultSaveFilter", "SpellCheckingDefaultLanguage", "SpellCheckingPersonalWordList", "SpellCheckingPersonalExcludeList"]: return prefClass.settings.value("Editor/" + key, QtCore.QVariant(prefClass.editorDefaults[key])).toString() elif key in ["AdditionalOpenFilters", "AdditionalSaveFilters"]: return prefClass.settings.value("Editor/" + key, QtCore.QVariant(prefClass.editorDefaults[key])).toStringList() else: return prefClass.settings.value("Editor/" + key, QtCore.QVariant(prefClass.editorDefaults[key])).toInt()[0] def setEditor(key, value, prefClass = Prefs): """ Module function to store the various editor settings. @param key the key of the setting to be set @param value the value to be set @param prefClass preferences class used as the storage area """ prefClass.settings.setValue("Editor/" + key, QtCore.QVariant(value)) def getEditorColour(key, prefClass = Prefs): """ Module function to retrieve the various editor marker colours. @param key the key of the value to get @param prefClass preferences class used as the storage area @return the requested editor colour """ col = prefClass.settings.value("Editor/Colour/" + key) if col.isValid(): return QtGui.QColor(col.toString()) else: return prefClass.editorColourDefaults[key] def setEditorColour(key, value, prefClass = Prefs): """ Module function to store the various editor marker colours. @param key the key of the colour to be set @param value the colour to be set @param prefClass preferences class used as the storage area """ prefClass.settings.setValue("Editor/Colour/" + key, QtCore.QVariant(value.name())) def getEditorOtherFonts(key, prefClass = Prefs): """ Module function to retrieve the various editor fonts except the lexer fonts. @param key the key of the value to get @param prefClass preferences class used as the storage area @return the requested editor font (QFont) """ f = QtGui.QFont() f.fromString(prefClass.settings.value("Editor/Other Fonts/" + key, QtCore.QVariant(prefClass.editorOtherFontsDefaults[key])).toString()) return f def setEditorOtherFonts(key, font, prefClass = Prefs): """ Module function to store the various editor fonts except the lexer fonts. @param key the key of the font to be set @param font the font to be set (QFont) @param prefClass preferences class used as the storage area """ prefClass.settings.setValue("Editor/Other Fonts/" + key, QtCore.QVariant(font.toString())) def getEditorAPI(key, prefClass = Prefs): """ Module function to retrieve the various lists of api files. @param key the key of the value to get @param prefClass preferences class used as the storage area @return the requested list of api files (QStringList) """ ap = prefClass.settings.value("Editor/APIs/" + key) if ap.isValid(): apis = ap.toStringList() if len(apis) and apis[0].isEmpty(): return QtCore.QStringList() else: return apis else: return QtCore.QStringList() def setEditorAPI(key, apilist, prefClass = Prefs): """ Module function to store the various lists of api files. @param key the key of the api to be set @param apilist the list of api files (QStringList) @param prefClass preferences class used as the storage area """ prefClass.settings.setValue("Editor/APIs/" + key, QtCore.QVariant(apilist)) def getEditorKeywords(key, prefClass = Prefs): """ Module function to retrieve the various lists of language keywords. @param key the key of the value to get @param prefClass preferences class used as the storage area @return the requested list of language keywords (QStringList) """ keywords = prefClass.settings.value("Editor/Keywords/" + key) if keywords.isValid(): return keywords.toStringList() else: return QtCore.QStringList() def setEditorKeywords(key, keywordsLists, prefClass = Prefs): """ Module function to store the various lists of language keywords. @param key the key of the api to be set @param keywordsLists the list of language keywords (QStringList) @param prefClass preferences class used as the storage area """ prefClass.settings.setValue("Editor/Keywords/" + key, QtCore.QVariant(keywordsLists)) def getEditorLexerAssocs(prefClass = Prefs): """ Module function to retrieve all lexer associations. @param prefClass preferences class used as the storage area @return a reference to the list of lexer associations (dictionary of strings) """ editorLexerAssoc = {} prefClass.settings.beginGroup("Editor/LexerAssociations") keyList = prefClass.settings.childKeys() prefClass.settings.endGroup() editorLexerAssocDefaults = QScintilla.Lexers.getDefaultLexerAssociations() if len(keyList) == 0: # build from scratch for key in editorLexerAssocDefaults.keys(): editorLexerAssoc[key] = \ QtCore.QString(editorLexerAssocDefaults[key]) else: for key in keyList: key = unicode(key) if editorLexerAssocDefaults.has_key(key): defaultValue = editorLexerAssocDefaults[key] else: defaultValue = QtCore.QString() editorLexerAssoc[key] = \ prefClass.settings.value("Editor/LexerAssociations/" + key, QtCore.QVariant(defaultValue)).toString() # check for new default lexer associations for key in editorLexerAssocDefaults.keys(): if not editorLexerAssoc.has_key(key): editorLexerAssoc[key] = \ QtCore.QString(editorLexerAssocDefaults[key]) return editorLexerAssoc def setEditorLexerAssocs(assocs, prefClass = Prefs): """ Module function to retrieve all lexer associations. @param assocs dictionary of lexer associations to be set @param prefClass preferences class used as the storage area """ # first remove lexer associations that no longer exist, than save the rest prefClass.settings.beginGroup("Editor/LexerAssociations") keyList = prefClass.settings.childKeys() prefClass.settings.endGroup() for key in keyList: key = unicode(key) if not assocs.has_key(key): prefClass.settings.remove("Editor/LexerAssociations/" + key) for key in assocs.keys(): prefClass.settings.setValue("Editor/LexerAssociations/" + key, QtCore.QVariant(assocs[key])) def getEditorLexerAssoc(filename, prefClass = Prefs): """ Module function to retrieve a lexer association. @param filename filename used to determine the associated lexer language (string) @param prefClass preferences class used as the storage area @return the requested lexer language (string) """ for pattern, language in getEditorLexerAssocs().items(): if fnmatch.fnmatch(filename, pattern): return unicode(language) return "" def getEditorTyping(key, prefClass = Prefs): """ Module function to retrieve the various editor typing settings. @param key the key of the value to get @param prefClass preferences class used as the storage area @return the requested editor setting """ return prefClass.settings.value("Editor/Typing/" + key, QtCore.QVariant(prefClass.editorTypingDefaults[key])).toInt()[0] def setEditorTyping(key, value, prefClass = Prefs): """ Module function to store the various editor typing settings. @param key the key of the setting to be set @param value the value to be set @param prefClass preferences class used as the storage area """ prefClass.settings.setValue("Editor/Typing/" + key, QtCore.QVariant(value)) def getEditorExporter(key, prefClass = Prefs): """ Module function to retrieve the various editor exporters settings. @param key the key of the value to get @param prefClass preferences class used as the storage area @return the requested editor setting """ if key in ["RTF/Font"]: f = QtGui.QFont() f.fromString(prefClass.settings.value("Editor/Exporters/" + key, QtCore.QVariant(prefClass.editorExporterDefaults[key])).toString()) return f elif key in ["PDF/Font", "PDF/PageSize"]: return prefClass.settings.value("Editor/Exporters/" + key, QtCore.QVariant(prefClass.editorExporterDefaults[key])).toString() else: return prefClass.settings.value("Editor/Exporters/" + key, QtCore.QVariant(prefClass.editorExporterDefaults[key])).toInt()[0] def setEditorExporter(key, value, prefClass = Prefs): """ Module function to store the various editor exporters settings. @param key the key of the setting to be set @param value the value to be set @param prefClass preferences class used as the storage area """ if key in ["RTF/Font"]: v = value.toString() else: v = value prefClass.settings.setValue("Editor/Exporters/" + key, QtCore.QVariant(v)) def getPrinter(key, prefClass = Prefs): """ Module function to retrieve the various printer settings. @param key the key of the value to get @param prefClass preferences class used as the storage area @return the requested printer setting """ if key in ["ColorMode", "FirstPageFirst", "Magnification", "Orientation", "PageSize"]: return prefClass.settings.value("Printer/" + key, QtCore.QVariant(prefClass.printerDefaults[key])).toInt()[0] if key in ["LeftMargin", "RightMargin", "TopMargin", "BottomMargin"]: return prefClass.settings.value("Printer/" + key, QtCore.QVariant(prefClass.printerDefaults[key])).toDouble()[0] if key in ["PrinterName"]: return prefClass.settings.value("Printer/" + key, QtCore.QVariant(prefClass.printerDefaults[key])).toString() if key in ["HeaderFont"]: f = QtGui.QFont() f.fromString(prefClass.settings.value("Printer/" + key, QtCore.QVariant(prefClass.printerDefaults[key])).toString()) return f def setPrinter(key, value, prefClass = Prefs): """ Module function to store the various printer settings. @param key the key of the setting to be set @param value the value to be set @param prefClass preferences class used as the storage area """ if key in ["HeaderFont"]: v = value.toString() else: v = value prefClass.settings.setValue("Printer/" + key, QtCore.QVariant(v)) def getShell(key, prefClass = Prefs): """ Module function to retrieve the various shell settings. @param key the key of the value to get @param prefClass preferences class used as the storage area @return the requested shell setting """ if key in ["MonospacedFont", "MarginsFont"]: f = QtGui.QFont() f.fromString(prefClass.settings.value("Shell/" + key, QtCore.QVariant(prefClass.shellDefaults[key])).toString()) return f else: return prefClass.settings.value("Shell/" + key, QtCore.QVariant(prefClass.shellDefaults[key])).toInt()[0] def setShell(key, value, prefClass = Prefs): """ Module function to store the various shell settings. @param key the key of the setting to be set @param value the value to be set @param prefClass preferences class used as the storage area """ if key in ["MonospacedFont", "MarginsFont"]: prefClass.settings.setValue("Shell/" + key, QtCore.QVariant(value.toString())) else: prefClass.settings.setValue("Shell/" + key, QtCore.QVariant(value)) def getProject(key, prefClass = Prefs): """ Module function to retrieve the various project handling settings. @param key the key of the value to get @param prefClass preferences class used as the storage area @return the requested project setting """ return prefClass.settings.value("Project/" + key, QtCore.QVariant(prefClass.projectDefaults[key])).toInt()[0] def setProject(key, value, prefClass = Prefs): """ Module function to store the various project handling settings. @param key the key of the setting to be set @param value the value to be set @param prefClass preferences class used as the storage area """ prefClass.settings.setValue("Project/" + key, QtCore.QVariant(value)) def getProjectBrowserFlags(key, prefClass = Prefs): """ Module function to retrieve the various project browser flags settings. @param key the key of the value to get @param prefClass preferences class used as the storage area @return the requested project setting """ try: default = prefClass.projectBrowserFlagsDefaults[key] except KeyError: default = AllBrowsersFlag return prefClass.settings.value("Project/BrowserFlags/" + key, QtCore.QVariant(default)).toInt()[0] def setProjectBrowserFlags(key, value, prefClass = Prefs): """ Module function to store the various project browser flags settings. @param key the key of the setting to be set @param value the value to be set @param prefClass preferences class used as the storage area """ prefClass.settings.setValue("Project/BrowserFlags/" + key, QtCore.QVariant(value)) def setProjectBrowserFlagsDefault(key, value, prefClass = Prefs): """ Module function to store the various project browser flags settings. @param key the key of the setting to be set @param value the value to be set @param prefClass preferences class used as the storage area """ prefClass.projectBrowserFlagsDefaults[key] = value def removeProjectBrowserFlags(key, prefClass = Prefs): """ Module function to remove a project browser flags setting. @param key the key of the setting to be removed @param prefClass preferences class used as the storage area """ prefClass.settings.remove("Project/BrowserFlags/" + key) def getProjectBrowserColour(key, prefClass = Prefs): """ Module function to retrieve the various project browser colours. @param key the key of the value to get @param prefClass preferences class used as the storage area @return the requested project browser colour """ col = prefClass.settings.value("Project/Colour/" + key) if col.isValid(): return QtGui.QColor(col.toString()) else: return prefClass.projectBrowserColourDefaults[key] def setProjectBrowserColour(key, value, prefClass = Prefs): """ Module function to store the various project browser colours. @param key the key of the colour to be set @param value the colour to be set @param prefClass preferences class used as the storage area """ prefClass.settings.setValue("Project/Colour/" + key, QtCore.QVariant(value.name())) def getMultiProject(key, prefClass = Prefs): """ Module function to retrieve the various project handling settings. @param key the key of the value to get @param prefClass preferences class used as the storage area @return the requested project setting """ if key in ["OpenMasterAutomatically", "XMLTimestamp", "RecentNumber"]: return prefClass.settings.value("MultiProject/" + key, QtCore.QVariant(prefClass.multiProjectDefaults[key])).toInt()[0] else: return prefClass.settings.value("MultiProject/" + key, QtCore.QVariant(prefClass.multiProjectDefaults[key])).toString() def setMultiProject(key, value, prefClass = Prefs): """ Module function to store the various project handling settings. @param key the key of the setting to be set @param value the value to be set @param prefClass preferences class used as the storage area """ prefClass.settings.setValue("MultiProject/" + key, QtCore.QVariant(value)) def getQt4DocDir(prefClass = Prefs): """ Module function to retrieve the Qt4DocDir setting. @param prefClass preferences class used as the storage area @return the requested Qt4DocDir setting (string) """ s = unicode(prefClass.settings.value("Help/Qt4DocDir", QtCore.QVariant(prefClass.helpDefaults["Qt4DocDir"])).toString()) if s == "": s = os.getenv("QT4DOCDIR", "") if s == "": s = unicode(QtCore.QLibraryInfo.location(QtCore.QLibraryInfo.DocumentationPath)) return s def getHelp(key, prefClass = Prefs): """ Module function to retrieve the various help settings. @param key the key of the value to get @param prefClass preferences class used as the storage area @return the requested help setting """ if not prefClass.webSettingsIntitialized: prefClass.initWebSettingsDefaults() if key in ["CustomViewer", \ "PythonDocDir", "QtDocDir", "Qt4DocDir", "PyQt4DocDir", "PyKDE4DocDir", "UserStyleSheet", "WebSearchEngine", "HomePage", "PySideDocDir", "DefaultScheme"]: return prefClass.settings.value("Help/" + key, QtCore.QVariant(prefClass.helpDefaults[key])).toString() elif key in ["AdBlockSubscriptions"]: return prefClass.settings.value("Help/" + key, QtCore.QVariant(prefClass.helpDefaults[key])).toStringList() elif key in ["StandardFont", "FixedFont"]: f = QtGui.QFont() f.fromString(prefClass.settings.value("Help/" + key, QtCore.QVariant(prefClass.helpDefaults[key])).toString()) return f elif key in ["SaveUrlColor"]: col = prefClass.settings.value("Help/" + key) if col.isValid(): return QtGui.QColor(col.toString()) else: return prefClass.helpDefaults[key] elif key in ["HelpViewerState"]: return prefClass.settings.value("Help/" + key, QtCore.QVariant(prefClass.helpDefaults[key])).toByteArray() elif key in ["WebSearchKeywords"]: # return a list of tuples of (keyword, engine name) keywords = [] size = prefClass.settings.beginReadArray("Help/" + key); for index in range(size): prefClass.settings.setArrayIndex(index) keyword = prefClass.settings.value("Keyword").toString() engineName = prefClass.settings.value("Engine").toString() keywords.append((keyword, engineName)) prefClass.settings.endArray() return keywords else: # default is integer value return prefClass.settings.value("Help/" + key, QtCore.QVariant(prefClass.helpDefaults[key])).toInt()[0] def setHelp(key, value, prefClass = Prefs): """ Module function to store the various help settings. @param key the key of the setting to be set @param value the value to be set @param prefClass preferences class used as the storage area """ if key in ["StandardFont", "FixedFont"]: prefClass.settings.setValue("Help/" + key, QtCore.QVariant(value.toString())) elif key == "SaveUrlColor": prefClass.settings.setValue("Help/" + key, QtCore.QVariant(value.name())) elif key == "WebSearchKeywords": # value is list of tuples of (keyword, engine name) prefClass.settings.beginWriteArray("Help/" + key, len(value)) index = 0 for v in value: prefClass.settings.setArrayIndex(index) prefClass.settings.setValue("Keyword", QtCore.QVariant(v[0])) prefClass.settings.setValue("Engine", QtCore.QVariant(v[1])) index += 1 prefClass.settings.endArray() else: prefClass.settings.setValue("Help/" + key, QtCore.QVariant(value)) def getSystem(key, prefClass = Prefs): """ Module function to retrieve the various system settings. @param key the key of the value to get @param prefClass preferences class used as the storage area @return the requested system setting """ from Utilities import supportedCodecs if key in ["StringEncoding", "IOEncoding"]: encoding = unicode(prefClass.settings.value("System/" + key, QtCore.QVariant(prefClass.sysDefaults[key])).toString()) if encoding not in supportedCodecs: encoding = prefClass.sysDefaults[key] return encoding def setSystem(key, value, prefClass = Prefs): """ Module function to store the various system settings. @param key the key of the setting to be set @param value the value to be set @param prefClass preferences class used as the storage area """ prefClass.settings.setValue("System/" + key, QtCore.QVariant(value)) def getQt4TranslationsDir(prefClass = Prefs): """ Module function to retrieve the Qt4TranslationsDir setting. @param prefClass preferences class used as the storage area @return the requested Qt4TranslationsDir setting (string) """ s = unicode(prefClass.settings.value("Qt/Qt4TranslationsDir", QtCore.QVariant(prefClass.qtDefaults["Qt4TranslationsDir"])).toString()) if s == "": s = os.getenv("QT4TRANSLATIONSDIR", "") if s == "": s = unicode(QtCore.QLibraryInfo.location(QtCore.QLibraryInfo.TranslationsPath)) if s == "" and isWindowsPlatform(): transPath = os.path.join(getPyQt4ModulesDirectory(), "translations") if os.path.exists(transPath): s = transPath return s def getQt(key, prefClass = Prefs): """ Module function to retrieve the various Qt settings. @param key the key of the value to get @param prefClass preferences class used as the storage area @return the requested Qt setting """ if key == "Qt4TranslationsDir": return getQt4TranslationsDir(prefClass) elif key in ["QtToolsPrefix4", "QtToolsPostfix4"]: return prefClass.settings.value("Qt/" + key, QtCore.QVariant(prefClass.qtDefaults[key])).toString() elif key in ["Qt4Dir"]: p = unicode(prefClass.settings.value("Qt/" + key, QtCore.QVariant(prefClass.qtDefaults[key])).toString()) if p == "": p = unicode(QtCore.QLibraryInfo.location(QtCore.QLibraryInfo.BinariesPath)) return p else: return prefClass.settings.value("Qt/" + key, QtCore.QVariant(prefClass.qtDefaults[key])).toInt()[0] def setQt(key, value, prefClass = Prefs): """ Module function to store the various Qt settings. @param key the key of the setting to be set @param value the value to be set @param prefClass preferences class used as the storage area """ prefClass.settings.setValue("Qt/" + key, QtCore.QVariant(value)) def getCorba(key, prefClass = Prefs): """ Module function to retrieve the various corba settings. @param key the key of the value to get @param prefClass preferences class used as the storage area @return the requested corba setting """ return prefClass.settings.value("Corba/" + key, QtCore.QVariant(prefClass.corbaDefaults[key])).toString() def setCorba(key, value, prefClass = Prefs): """ Module function to store the various corba settings. @param key the key of the setting to be set @param value the value to be set @param prefClass preferences class used as the storage area """ prefClass.settings.setValue("Corba/" + key, QtCore.QVariant(value)) def getUser(key, prefClass = Prefs): """ Module function to retrieve the various user settings. @param key the key of the value to get @param prefClass preferences class used as the storage area @return the requested user setting """ if key in ["MailServerAuthentication", "MailServerUseTLS", "MailServerPort", "UseSystemEmailClient"]: return prefClass.settings.value("User/" + key, QtCore.QVariant(prefClass.userDefaults[key])).toInt()[0] elif key == "MailServerPassword": from Utilities import pwDecode return pwDecode(prefClass.settings.value("User/" + key, QtCore.QVariant(prefClass.userDefaults[key])).toString()) else: return prefClass.settings.value("User/" + key, QtCore.QVariant(prefClass.userDefaults[key])).toString() def setUser(key, value, prefClass = Prefs): """ Module function to store the various user settings. @param key the key of the setting to be set @param value the value to be set @param prefClass preferences class used as the storage area """ if key == "MailServerPassword": from Utilities import pwEncode prefClass.settings.setValue( "User/" + key, QtCore.QVariant(pwEncode(value))) else: prefClass.settings.setValue("User/" + key, QtCore.QVariant(value)) def getVCS(key, prefClass = Prefs): """ Module function to retrieve the VCS related settings. @param key the key of the value to get @param prefClass preferences class used as the storage area @return the requested user setting """ return prefClass.settings.value("VCS/" + key, QtCore.QVariant(prefClass.vcsDefaults[key])).toInt()[0] def setVCS(key, value, prefClass = Prefs): """ Module function to store the VCS related settings. @param key the key of the setting to be set @param value the value to be set @param prefClass preferences class used as the storage area """ prefClass.settings.setValue("VCS/" + key, QtCore.QVariant(value)) def getTasks(key, prefClass = Prefs): """ Module function to retrieve the Tasks related settings. @param key the key of the value to get @param prefClass preferences class used as the storage area @return the requested user setting """ if key in ["TasksColour", "TasksBugfixColour", "TasksBgColour", "TasksProjectBgColour"]: col = prefClass.settings.value("Tasks/" + key) if col.isValid(): return QtGui.QColor(col.toString()) else: return prefClass.tasksDefaults[key] elif key in ["ClearOnFileClose"]: return prefClass.settings.value("Tasks/" + key, QtCore.QVariant(prefClass.tasksDefaults[key])).toInt()[0] else: return prefClass.settings.value("Tasks/" + key, QtCore.QVariant(prefClass.tasksDefaults[key])).toString() def setTasks(key, value, prefClass = Prefs): """ Module function to store the Tasks related settings. @param key the key of the setting to be set @param value the value to be set @param prefClass preferences class used as the storage area """ if key in ["TasksColour", "TasksBugfixColour", "TasksBgColour", "TasksProjectBgColour"]: prefClass.settings.setValue("Tasks/" + key, QtCore.QVariant(value.name())) else: prefClass.settings.setValue("Tasks/" + key, QtCore.QVariant(value)) def getTemplates(key, prefClass = Prefs): """ Module function to retrieve the Templates related settings. @param key the key of the value to get @param prefClass preferences class used as the storage area @return the requested user setting """ if key in ["SeparatorChar"]: return prefClass.settings.value("Templates/" + key, QtCore.QVariant(prefClass.templatesDefaults[key])).toString() else: return prefClass.settings.value("Templates/" + key, QtCore.QVariant(prefClass.templatesDefaults[key])).toInt()[0] def setTemplates(key, value, prefClass = Prefs): """ Module function to store the Templates related settings. @param key the key of the setting to be set @param value the value to be set @param prefClass preferences class used as the storage area """ prefClass.settings.setValue("Templates/" + key, QtCore.QVariant(value)) def getPluginManager(key, prefClass = Prefs): """ Module function to retrieve the plugin manager related settings. @param key the key of the value to get @param prefClass preferences class used as the storage area @return the requested user setting """ if key in ["ActivateExternal"]: return prefClass.settings.value("PluginManager/" + key, QtCore.QVariant(prefClass.pluginManagerDefaults[key])).toInt()[0] else: return prefClass.settings.value("PluginManager/" + key, QtCore.QVariant(prefClass.pluginManagerDefaults[key])).toString() def setPluginManager(key, value, prefClass = Prefs): """ Module function to store the plugin manager related settings. @param key the key of the setting to be set @param value the value to be set @param prefClass preferences class used as the storage area """ prefClass.settings.setValue("PluginManager/" + key, QtCore.QVariant(value)) def getGraphics(key, prefClass = Prefs): """ Module function to retrieve the Graphics related settings. @param key the key of the value to get @param prefClass preferences class used as the storage area @return the requested user setting """ if key in ["Font"]: f = QtGui.QFont() f.fromString(prefClass.settings.value("Graphics/" + key, QtCore.QVariant(prefClass.graphicsDefaults[key])).toString()) return f else: return prefClass.settings.value("Graphics/" + key, QtCore.QVariant(prefClass.graphicsDefaults[key])).toString() def setGraphics(key, value, prefClass = Prefs): """ Module function to store the Graphics related settings. @param key the key of the setting to be set @param value the value to be set @param prefClass preferences class used as the storage area """ if key in ["Font"]: prefClass.settings.setValue("Graphics/" + key, QtCore.QVariant(value.toString())) else: prefClass.settings.setValue("Graphics/" + key, QtCore.QVariant(value)) def getIconEditor(key, prefClass = Prefs): """ Module function to retrieve the Icon Editor related settings. @param key the key of the value to get @param prefClass preferences class used as the storage area @return the requested user setting """ if key in ["IconEditorState"]: return prefClass.settings.value("IconEditor/" + key, QtCore.QVariant(prefClass.iconEditorDefaults[key])).toByteArray() else: return prefClass.settings.value("IconEditor/" + key, QtCore.QVariant(prefClass.iconEditorDefaults[key])).toString() def setIconEditor(key, value, prefClass = Prefs): """ Module function to store the Icon Editor related settings. @param key the key of the setting to be set @param value the value to be set @param prefClass preferences class used as the storage area """ prefClass.settings.setValue("IconEditor/" + key, QtCore.QVariant(value)) def getTrayStarter(key, prefClass = Prefs): """ Module function to retrieve the tray starter related settings. @param key the key of the value to get @param prefClass preferences class used as the storage area @return the requested user setting """ return prefClass.settings.value("TrayStarter/" + key, QtCore.QVariant(prefClass.trayStarterDefaults[key])).toString() def setTrayStarter(key, value, prefClass = Prefs): """ Module function to store the tray starter related settings. @param key the key of the setting to be set @param value the value to be set @param prefClass preferences class used as the storage area """ prefClass.settings.setValue("TrayStarter/" + key, QtCore.QVariant(value)) def getGeometry(key, prefClass = Prefs): """ Module function to retrieve the display geometry. @param key the key of the value to get @param prefClass preferences class used as the storage area @return the requested geometry setting """ if key in ["MainMaximized"]: return prefClass.settings.value("Geometry/" + key, QtCore.QVariant(prefClass.geometryDefaults[key])).toInt()[0] else: v = prefClass.settings.value("Geometry/" + key) if v.isValid(): return v.toByteArray() else: return prefClass.geometryDefaults[key] def setGeometry(key, value, prefClass = Prefs): """ Module function to store the display geometry. @param key the key of the setting to be set @param value the geometry to be set @param prefClass preferences class used as the storage area """ if key in ["MainMaximized"]: prefClass.settings.setValue("Geometry/" + key, QtCore.QVariant(value)) else: if prefClass.resetLayout: v = prefClass.geometryDefaults[key] else: v = value prefClass.settings.setValue("Geometry/" + key, QtCore.QVariant(v)) def resetLayout(prefClass = Prefs): """ Module function to set a flag not storing the current layout. @param prefClass preferences class used as the storage area """ prefClass.resetLayout = True def shouldResetLayout(prefClass = Prefs): """ Module function to indicate a reset of the layout. @param prefClass preferences class used as the storage area @return flag indicating a reset of the layout (boolean) """ return prefClass.resetLayout def saveResetLayout(prefClass = Prefs): """ Module function to save the reset layout. """ if prefClass.resetLayout: for key in prefClass.geometryDefaults.keys(): prefClass.settings.setValue("Geometry/" + key, QtCore.QVariant(prefClass.geometryDefaults[key])) initPreferences() initRecentSettings() eric4-4.5.18/eric/Preferences/PaxHeaders.8617/ProgramsDialog.ui0000644000175000001440000000007411164072542022232 xustar000000000000000030 atime=1389081083.514724389 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ProgramsDialog.ui0000644000175000001440000000350411164072542021761 0ustar00detlevusers00000000000000 ProgramsDialog 0 0 700 570 External Programs false true Path Version Qt::Horizontal QDialogButtonBox::Close buttonBox accepted() ProgramsDialog close() 155 546 123 505 buttonBox rejected() ProgramsDialog close() 253 552 207 505 eric4-4.5.18/eric/Preferences/PaxHeaders.8617/ConfigurationPages0000644000175000001440000000013212262730776022500 xustar000000000000000030 mtime=1389081086.301724332 30 atime=1389081086.305724332 30 ctime=1389081086.315724332 eric4-4.5.18/eric/Preferences/ConfigurationPages/0000755000175000001440000000000012262730776022307 5ustar00detlevusers00000000000000eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/ApplicationPage.ui0000644000175000001440000000007411233631264026146 xustar000000000000000030 atime=1389081083.514724389 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/ApplicationPage.ui0000644000175000001440000001624311233631264025701 0ustar00detlevusers00000000000000 ApplicationPage 0 0 589 563 <b>Configure the application</b> QFrame::HLine QFrame::Sunken Qt::Horizontal Select, if only one instance of the application should be running Single Application Mode Select to show the startup splash screen Show Splash Screen at startup Open at startup Select to not open anything None Select to open the most recently opened file Last File Select to open the most recently opened project Last Project Select to open the most recently opened multiproject Last Multiproject Select to restore the global session Global Session Check for updates Select to disable update checking None Select to check for updates at every startup Always Select to check for updates once a day Daily Select to check for updates once a week Weekly Select to check for updates once a month Monthly Reporting Select to use the system email client to send reports Use System Email Client Error Log Select to check the existence of an error log upon startup Check for Error Log at Startup Qt::Vertical 571 21 singleApplicationCheckBox splashScreenCheckBox noOpenRadioButton lastFileRadioButton lastProjectRadioButton lastMultiprojectRadioButton globalSessionRadioButton noCheckRadioButton alwaysCheckRadioButton dailyCheckRadioButton weeklyCheckRadioButton monthlyCheckRadioButton systemEmailClientCheckBox errorlogCheckBox eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/EditorFilePage.ui0000644000175000001440000000013212034017357025725 xustar000000000000000030 mtime=1349525231.938420692 30 atime=1389081083.520724388 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/EditorFilePage.ui0000644000175000001440000003706312034017357025470 0ustar00detlevusers00000000000000 EditorFilePage 0 0 547 976 <b>Configure file handling settings</b> QFrame::HLine QFrame::Sunken Qt::Horizontal Open && Close Select, whether breakpoint belonging to an editor should be cleared, when the editor is closed Clear Breakpoints upon closing Select to reread the file automatically, if it was changed externally Reread automatically when changed externally Warn, if file is greater than Enter the filesize, a warning dialog should be shown. KB 1 16384 16 1024 Qt::Horizontal 40 20 End of Line End of Line Characters Select Unix type end of line Unix Select Macintosh type end of line Macintosh Select Windows type end of line Windows/DOS Select whether the eol type should be converted upon opening the file. Automatic End of Line Conversion Save Select, whether Python files should be checked automatically for syntax errors Automatic Syntax Check Select, whether trailing whitespace should be removed upon save Strip trailing whitespace upon save Select, whether a backup file shall be generated upon save Create backup file upon save Autosave interval: Move to set the autosave interval in minutes (0 to disable) 0 30 5 Qt::Horizontal 1 Displays the selected autosave interval. 2 QLCDNumber::Flat 5.000000000000000 Encoding Select to use the advanced encoding detection <b>Advanced encoding detection</b> <p>Select to use the advanced encoding detection based on the &quot;universal character encoding detector&quot; from <a href="http://chardet.feedparser.org">http://chardet.feedparser.org</a>.</p> Use advanced encoding detection Default Encoding: 0 0 Select the string encoding to be used. Default File Filters Open Files: Qt::Horizontal 40 20 Save Files: Additional File Filters <b>Note:</b> Save file filters must contain one wildcard pattern only. true Select to edit the open file filters Open Files true Select to edit the save file filters Save Files 0 0 0 200 true true Add... false Edit... false Delete Qt::Vertical 20 40 Qt::Vertical 435 20 clearBreakpointsCheckBox automaticReopenCheckBox warnFilesizeSpinBox lfRadioButton crRadioButton crlfRadioButton automaticEolConversionCheckBox automaticSyntaxCheckCheckBox createBackupFileCheckBox stripWhitespaceCheckBox autosaveSlider advEncodingCheckBox defaultEncodingComboBox openFilesFilterComboBox saveFilesFilterComboBox openFiltersButton savFiltersButton fileFiltersList addFileFilterButton editFileFilterButton deleteFileFilterButton autosaveSlider valueChanged(int) autosaveLCD display(int) 272 58 420 55 eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/HelpDocumentationPage.ui0000644000175000001440000000007411254220157027323 xustar000000000000000030 atime=1389081083.525724388 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/HelpDocumentationPage.ui0000644000175000001440000001576611254220157027067 0ustar00detlevusers00000000000000 HelpDocumentationPage 0 0 526 594 <b>Configure help documentation</b> QFrame::HLine QFrame::Sunken Qt::Horizontal Python Documentation Press to select the Python documentation directory via a dialog ... Enter the Python documentation directory <b>Note</b>: Leave empty to use the PYTHONDOCDIR environment variable, if set. Qt4 Documentation Press to select the Qt4 documentation directory via a dialog ... Enter the Qt4 documentation directory <b>Note</b>: Leave empty to use the QT4DOCDIR environment variable, if set. PyQt4 Documentation Press to select the PyQt4 documentation directory via a dialog ... Enter the PyQt4 documentation directory <b>Note</b>: Leave empty to use the PYQT4DOCDIR environment variable, if set. PyKDE4 Documentation Press to select the PyKDE4 documentation directory via a dialog ... Enter the PyKDE4 documentation directory <b>Note</b>: Leave empty to use the PYKDE4DOCDIR environment variable, if set. PySide Documentation Press to select the PySide documentation directory via a dialog ... Enter the PySide documentation directory <b>Note</b>: Leave empty to use the PYSIDEDOCDIR environment variable, if set. Qt::Vertical 479 41 pythonDocDirEdit pythonDocDirButton qt4DocDirEdit qt4DocDirButton pyqt4DocDirEdit pyqt4DocDirButton pykde4DocDirEdit pykde4DocDirButton pysideDocDirEdit pysideDocDirButton eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/PluginManagerPage.ui0000644000175000001440000000007411072705635026441 xustar000000000000000030 atime=1389081083.530724388 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/PluginManagerPage.ui0000644000175000001440000000536411072705635026176 0ustar00detlevusers00000000000000 PluginManagerPage 0 0 507 299 <b>Configure plugin manager</b> QFrame::HLine QFrame::Sunken Qt::Horizontal Plugins download directory: Enter the plugins download directory Select the plugins download directory via a directory selection dialog ... <font color="#FF0000"><b>Note:</b> The following setting is activated at the next startup of the application.</font> Select to enable third party plugins to be loaded Load third party plugins Qt::Vertical 435 121 downloadDirEdit downloadDirButton activateExternalPluginsCheckBox eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/PluginManagerPage.py0000644000175000001440000000013212261012650026434 xustar000000000000000030 mtime=1388582312.687085795 30 atime=1389081083.531724388 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/PluginManagerPage.py0000644000175000001440000000442512261012650026173 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing the Plugin Manager configuration page. """ import os from PyQt4.QtCore import QDir, QString, pyqtSignature from PyQt4.QtGui import QFileDialog from KdeQt import KQFileDialog from E4Gui.E4Completers import E4DirCompleter from ConfigurationPageBase import ConfigurationPageBase from Ui_PluginManagerPage import Ui_PluginManagerPage import Preferences import Utilities class PluginManagerPage(ConfigurationPageBase, Ui_PluginManagerPage): """ Class implementing the Plugin Manager configuration page. """ def __init__(self): """ Constructor """ ConfigurationPageBase.__init__(self) self.setupUi(self) self.setObjectName("PluginManagerPage") self.downloadDirCompleter = E4DirCompleter(self.downloadDirEdit) # set initial values self.activateExternalPluginsCheckBox.setChecked(\ Preferences.getPluginManager("ActivateExternal")) self.downloadDirEdit.setText(\ Preferences.getPluginManager("DownloadPath")) def save(self): """ Public slot to save the Viewmanager configuration. """ Preferences.setPluginManager("ActivateExternal", int(self.activateExternalPluginsCheckBox.isChecked())) Preferences.setPluginManager("DownloadPath", self.downloadDirEdit.text()) @pyqtSignature("") def on_downloadDirButton_clicked(self): """ Private slot to handle the directory selection via dialog. """ directory = KQFileDialog.getExistingDirectory(\ self, self.trUtf8("Select plugins download directory"), self.downloadDirEdit.text(), QFileDialog.Options(QFileDialog.ShowDirsOnly)) if not directory.isNull(): dn = unicode(Utilities.toNativeSeparators(directory)) while dn.endswith(os.sep): dn = dn[:-1] self.downloadDirEdit.setText(dn) def create(dlg): """ Module function to create the configuration page. @param dlg reference to the configuration dialog """ page = PluginManagerPage() return page eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/EditorStylesPage.py0000644000175000001440000000013212261012650026335 xustar000000000000000030 mtime=1388582312.717086175 30 atime=1389081083.531724388 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/EditorStylesPage.py0000644000175000001440000004217512261012650026100 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing the Editor Styles configuration page. """ from PyQt4.QtCore import pyqtSignature from PyQt4.QtGui import QPixmap, QIcon from PyQt4.Qsci import QsciScintilla from QScintilla.QsciScintillaCompat import QSCINTILLA_VERSION from ConfigurationPageBase import ConfigurationPageBase from Ui_EditorStylesPage import Ui_EditorStylesPage import Preferences class EditorStylesPage(ConfigurationPageBase, Ui_EditorStylesPage): """ Class implementing the Editor Styles configuration page. """ def __init__(self): """ Constructor """ ConfigurationPageBase.__init__(self) self.setupUi(self) self.setObjectName("EditorStylesPage") self.foldStyles = [ QsciScintilla.PlainFoldStyle, QsciScintilla.CircledFoldStyle, QsciScintilla.BoxedFoldStyle, QsciScintilla.CircledTreeFoldStyle, QsciScintilla.BoxedTreeFoldStyle ] self.edgeModes = [ QsciScintilla.EdgeNone, QsciScintilla.EdgeLine, QsciScintilla.EdgeBackground ] self.editorColours = {} # set initial values try: self.foldingStyleComboBox.setCurrentIndex( self.foldStyles.index(Preferences.getEditor("FoldingStyle"))) except ValueError: self.foldingStyleComboBox.setCurrentIndex(0) self.marginsFont = Preferences.getEditorOtherFonts("MarginsFont") self.marginsFontSample.setFont(self.marginsFont) self.defaultFont = Preferences.getEditorOtherFonts("DefaultFont") self.defaultFontSample.setFont(self.defaultFont) self.monospacedFont = Preferences.getEditorOtherFonts("MonospacedFont") self.monospacedFontSample.setFont(self.monospacedFont) self.monospacedCheckBox.setChecked(\ Preferences.getEditor("UseMonospacedFont")) self.linenoCheckBox.setChecked(\ Preferences.getEditor("LinenoMargin")) self.foldingCheckBox.setChecked(\ Preferences.getEditor("FoldingMargin")) if QSCINTILLA_VERSION() >= 0x020301: self.unifiedMarginsCheckBox.setChecked(\ Preferences.getEditor("UnifiedMargins")) else: self.unifiedMarginsCheckBox.setEnabled(False) self.unifiedMarginsCheckBox.setChecked(True) self.caretlineVisibleCheckBox.setChecked(\ Preferences.getEditor("CaretLineVisible")) self.caretWidthSpinBox.setValue(\ Preferences.getEditor("CaretWidth")) self.colourizeSelTextCheckBox.setChecked(\ Preferences.getEditor("ColourizeSelText")) self.customSelColourCheckBox.setChecked(\ Preferences.getEditor("CustomSelectionColours")) self.extentSelEolCheckBox.setChecked(\ Preferences.getEditor("ExtendSelectionToEol")) self.editorColours["CaretForeground"] = \ self.initColour("CaretForeground", self.caretForegroundButton, Preferences.getEditorColour) self.editorColours["CaretLineBackground"] = \ self.initColour("CaretLineBackground", self.caretlineBackgroundButton, Preferences.getEditorColour) self.editorColours["SelectionForeground"] = \ self.initColour("SelectionForeground", self.selectionForegroundButton, Preferences.getEditorColour) self.editorColours["SelectionBackground"] = \ self.initColour("SelectionBackground", self.selectionBackgroundButton, Preferences.getEditorColour) self.editorColours["CurrentMarker"] = \ self.initColour("CurrentMarker", self.currentLineMarkerButton, Preferences.getEditorColour) self.editorColours["ErrorMarker"] = \ self.initColour("ErrorMarker", self.errorMarkerButton, Preferences.getEditorColour) self.editorColours["MarginsForeground"] = \ self.initColour("MarginsForeground", self.marginsForegroundButton, Preferences.getEditorColour) self.editorColours["MarginsBackground"] = \ self.initColour("MarginsBackground", self.marginsBackgroundButton, Preferences.getEditorColour) self.editorColours["FoldmarginBackground"] = \ self.initColour("FoldmarginBackground", self.foldmarginBackgroundButton, Preferences.getEditorColour) self.eolCheckBox.setChecked(Preferences.getEditor("ShowEOL")) self.wrapLongLinesCheckBox.setChecked(\ Preferences.getEditor("WrapLongLines")) self.edgeModeCombo.setCurrentIndex( self.edgeModes.index(Preferences.getEditor("EdgeMode"))) self.edgeLineColumnSlider.setValue(\ Preferences.getEditor("EdgeColumn")) self.editorColours["Edge"] = \ self.initColour("Edge", self.edgeBackgroundColorButton, Preferences.getEditorColour) self.bracehighlightingCheckBox.setChecked(\ Preferences.getEditor("BraceHighlighting")) self.editorColours["MatchingBrace"] = \ self.initColour("MatchingBrace", self.matchingBracesButton, Preferences.getEditorColour) self.editorColours["MatchingBraceBack"] = \ self.initColour("MatchingBraceBack", self.matchingBracesBackButton, Preferences.getEditorColour) self.editorColours["NonmatchingBrace"] = \ self.initColour("NonmatchingBrace", self.nonmatchingBracesButton, Preferences.getEditorColour) self.editorColours["NonmatchingBraceBack"] = \ self.initColour("NonmatchingBraceBack", self.nonmatchingBracesBackButton, Preferences.getEditorColour) self.whitespaceCheckBox.setChecked(\ Preferences.getEditor("ShowWhitespace")) self.whitespaceSizeSpinBox.setValue( Preferences.getEditor("WhitespaceSize")) self.editorColours["WhitespaceForeground"] = \ self.initColour("WhitespaceForeground", self.whitespaceForegroundButton, Preferences.getEditorColour) self.editorColours["WhitespaceBackground"] = \ self.initColour("WhitespaceBackground", self.whitespaceBackgroundButton, Preferences.getEditorColour) if not hasattr(QsciScintilla, "setWhitespaceForegroundColor"): self.whitespaceSizeSpinBox.setEnabled(False) self.whitespaceForegroundButton.setEnabled(False) self.whitespaceBackgroundButton.setEnabled(False) self.miniMenuCheckBox.setChecked(\ Preferences.getEditor("MiniContextMenu")) self.editAreaOverrideCheckBox.setChecked( Preferences.getEditor("OverrideEditAreaColours")) self.editorColours["EditAreaForeground"] = \ self.initColour("EditAreaForeground", self.editAreaForegroundButton, Preferences.getEditorColour) self.editorColours["EditAreaBackground"] = \ self.initColour("EditAreaBackground", self.editAreaBackgroundButton, Preferences.getEditorColour) def save(self): """ Public slot to save the Editor Styles configuration. """ Preferences.setEditor("FoldingStyle", self.foldStyles[self.foldingStyleComboBox.currentIndex()]) Preferences.setEditorOtherFonts("MarginsFont", self.marginsFont) Preferences.setEditorOtherFonts("DefaultFont", self.defaultFont) Preferences.setEditorOtherFonts("MonospacedFont", self.monospacedFont) Preferences.setEditor("UseMonospacedFont", int(self.monospacedCheckBox.isChecked())) Preferences.setEditor("LinenoMargin", int(self.linenoCheckBox.isChecked())) Preferences.setEditor("FoldingMargin", int(self.foldingCheckBox.isChecked())) if QSCINTILLA_VERSION() >= 0x020301: Preferences.setEditor("UnifiedMargins", int(self.unifiedMarginsCheckBox.isChecked())) Preferences.setEditor("CaretLineVisible", int(self.caretlineVisibleCheckBox.isChecked())) Preferences.setEditor("ColourizeSelText", int(self.colourizeSelTextCheckBox.isChecked())) Preferences.setEditor("CustomSelectionColours", int(self.customSelColourCheckBox.isChecked())) Preferences.setEditor("ExtendSelectionToEol", int(self.extentSelEolCheckBox.isChecked())) Preferences.setEditor("CaretWidth", self.caretWidthSpinBox.value()) Preferences.setEditor("ShowEOL", int(self.eolCheckBox.isChecked())) Preferences.setEditor("WrapLongLines", int(self.wrapLongLinesCheckBox.isChecked())) Preferences.setEditor("EdgeMode", self.edgeModes[self.edgeModeCombo.currentIndex()]) Preferences.setEditor("EdgeColumn", self.edgeLineColumnSlider.value()) Preferences.setEditor("BraceHighlighting", int(self.bracehighlightingCheckBox.isChecked())) Preferences.setEditor("ShowWhitespace", int(self.whitespaceCheckBox.isChecked())) Preferences.setEditor("WhitespaceSize", self.whitespaceSizeSpinBox.value()) Preferences.setEditor("MiniContextMenu", int(self.miniMenuCheckBox.isChecked())) Preferences.setEditor("OverrideEditAreaColours", int(self.editAreaOverrideCheckBox.isChecked())) for key in self.editorColours.keys(): Preferences.setEditorColour(key, self.editorColours[key]) @pyqtSignature("") def on_linenumbersFontButton_clicked(self): """ Private method used to select the font for the editor margins. """ self.marginsFont = self.selectFont(self.marginsFontSample, self.marginsFont) @pyqtSignature("") def on_defaultFontButton_clicked(self): """ Private method used to select the default font for the editor. """ self.defaultFont = self.selectFont(self.defaultFontSample, self.defaultFont) @pyqtSignature("") def on_monospacedFontButton_clicked(self): """ Private method used to select the font to be used as the monospaced font. """ self.monospacedFont = \ self.selectFont(self.monospacedFontSample, self.monospacedFont) @pyqtSignature("") def on_caretForegroundButton_clicked(self): """ Private slot to set the foreground colour of the caret. """ self.editorColours["CaretForeground"] = \ self.selectColour(self.caretForegroundButton, self.editorColours["CaretForeground"]) @pyqtSignature("") def on_caretlineBackgroundButton_clicked(self): """ Private slot to set the background colour of the caretline. """ self.editorColours["CaretLineBackground"] = \ self.selectColour(self.caretlineBackgroundButton, self.editorColours["CaretLineBackground"]) @pyqtSignature("") def on_selectionForegroundButton_clicked(self): """ Private slot to set the foreground colour of the selection. """ self.editorColours["SelectionForeground"] = \ self.selectColour(self.selectionForegroundButton, self.editorColours["SelectionForeground"]) @pyqtSignature("") def on_selectionBackgroundButton_clicked(self): """ Private slot to set the background colour of the selection. """ self.editorColours["SelectionBackground"] = \ self.selectColour(self.selectionBackgroundButton, self.editorColours["SelectionBackground"]) @pyqtSignature("") def on_currentLineMarkerButton_clicked(self): """ Private slot to set the colour for the highlight of the current line. """ self.editorColours["CurrentMarker"] = \ self.selectColour(self.currentLineMarkerButton, self.editorColours["CurrentMarker"]) @pyqtSignature("") def on_errorMarkerButton_clicked(self): """ Private slot to set the colour for the highlight of the error line. """ self.editorColours["ErrorMarker"] = \ self.selectColour(self.errorMarkerButton, self.editorColours["ErrorMarker"]) @pyqtSignature("") def on_marginsForegroundButton_clicked(self): """ Private slot to set the foreground colour for the margins. """ self.editorColours["MarginsForeground"] = \ self.selectColour(self.marginsForegroundButton, self.editorColours["MarginsForeground"]) @pyqtSignature("") def on_marginsBackgroundButton_clicked(self): """ Private slot to set the background colour for the margins. """ self.editorColours["MarginsBackground"] = \ self.selectColour(self.marginsBackgroundButton, self.editorColours["MarginsBackground"]) @pyqtSignature("") def on_foldmarginBackgroundButton_clicked(self): """ Private slot to set the background colour for the foldmargin. """ self.editorColours["FoldmarginBackground"] = \ self.selectColour(self.foldmarginBackgroundButton, self.editorColours["FoldmarginBackground"]) @pyqtSignature("") def on_edgeBackgroundColorButton_clicked(self): """ Private slot to set the colour for the edge background or line. """ self.editorColours["Edge"] = \ self.selectColour(self.edgeBackgroundColorButton, self.editorColours["Edge"]) @pyqtSignature("") def on_matchingBracesButton_clicked(self): """ Private slot to set the colour for highlighting matching braces. """ self.editorColours["MatchingBrace"] = \ self.selectColour(self.matchingBracesButton, self.editorColours["MatchingBrace"]) @pyqtSignature("") def on_matchingBracesBackButton_clicked(self): """ Private slot to set the background colour for highlighting matching braces. """ self.editorColours["MatchingBraceBack"] = \ self.selectColour(self.matchingBracesBackButton, self.editorColours["MatchingBraceBack"]) @pyqtSignature("") def on_nonmatchingBracesButton_clicked(self): """ Private slot to set the colour for highlighting nonmatching braces. """ self.editorColours["NonmatchingBrace"] = \ self.selectColour(self.nonmatchingBracesButton, self.editorColours["NonmatchingBrace"]) @pyqtSignature("") def on_nonmatchingBracesBackButton_clicked(self): """ Private slot to set the background colour for highlighting nonmatching braces. """ self.editorColours["NonmatchingBraceBack"] = \ self.selectColour(self.nonmatchingBracesBackButton, self.editorColours["NonmatchingBraceBack"]) def polishPage(self): """ Public slot to perform some polishing actions. """ self.marginsFontSample.setFont(self.marginsFont) self.defaultFontSample.setFont(self.defaultFont) self.monospacedFontSample.setFont(self.monospacedFont) @pyqtSignature("") def on_whitespaceForegroundButton_clicked(self): """ Private slot to set the foreground colour of visible whitespace. """ self.editorColours["WhitespaceForeground"] = \ self.selectColour(self.whitespaceForegroundButton, self.editorColours["WhitespaceForeground"]) @pyqtSignature("") def on_whitespaceBackgroundButton_clicked(self): """ Private slot to set the background colour of visible whitespace. """ self.editorColours["WhitespaceBackground"] = \ self.selectColour(self.whitespaceBackgroundButton, self.editorColours["WhitespaceBackground"]) @pyqtSignature("") def on_editAreaForegroundButton_clicked(self): """ Private slot to set the foreground colour of the edit area. """ self.editorColours["EditAreaForeground"] = \ self.selectColour(self.editAreaForegroundButton, self.editorColours["EditAreaForeground"]) @pyqtSignature("") def on_editAreaBackgroundButton_clicked(self): """ Private slot to set the background colour of the edit area. """ self.editorColours["EditAreaBackground"] = \ self.selectColour(self.editAreaBackgroundButton, self.editorColours["EditAreaBackground"]) def create(dlg): """ Module function to create the configuration page. @param dlg reference to the configuration dialog """ page = EditorStylesPage() return page eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/MultiProjectPage.ui0000644000175000001440000000013211777334623026333 xustar000000000000000030 mtime=1342028179.886299195 30 atime=1389081083.539724388 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/MultiProjectPage.ui0000644000175000001440000001200711777334623026065 0ustar00detlevusers00000000000000 MultiProjectPage 0 0 494 357 <b>Configure multiproject settings</b> QFrame::HLine QFrame::Sunken Qt::Horizontal Workspace Enter the name of the workspace directory <b>Workspace Directory</b> <p>Enter the directory of the workspace. This directory is used as the default for opening or saving new files or projects.</p> Select the workspace directory via a directory selection button ... Master Project Select to open the master project automatically upon opening the multiproject Open master project automatically XML Select, if a timestamp should be written to all multiproject related XML files Include timestamp in multiproject related XML files Recent Multiprojects Number of recent multiprojects: Enter the number of recent multiprojects to remember Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 5 50 Qt::Horizontal 40 20 Qt::Vertical 20 40 workspaceEdit workspaceButton openMasterAutomaticallyCheckBox multiProjectTimestampCheckBox multiProjectRecentSpinBox eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/EditorHighlightersPage.py0000644000175000001440000000013212261012650027473 xustar000000000000000030 mtime=1388582312.720086214 30 atime=1389081083.539724388 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/EditorHighlightersPage.py0000644000175000001440000001460012261012650027226 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing the Editor Highlighter Associations configuration page. """ import os from pygments.lexers import get_all_lexers from PyQt4.QtCore import Qt, QStringList, pyqtSignature, QString from PyQt4.QtGui import QHeaderView, QTreeWidgetItem from ConfigurationPageBase import ConfigurationPageBase from Ui_EditorHighlightersPage import Ui_EditorHighlightersPage import Preferences class EditorHighlightersPage(ConfigurationPageBase, Ui_EditorHighlightersPage): """ Class implementing the Editor Highlighter Associations configuration page. """ def __init__(self, lexers): """ Constructor @param lexers reference to the lexers dictionary """ ConfigurationPageBase.__init__(self) self.setupUi(self) self.setObjectName("EditorHighlightersPage") self.editorLexerList.headerItem().setText(self.editorLexerList.columnCount(), "") header = self.editorLexerList.header() header.setResizeMode(QHeaderView.ResizeToContents) header.setSortIndicator(0, Qt.AscendingOrder) try: self.extsep = os.extsep except AttributeError: self.extsep = "." self.extras = ["-----------", self.trUtf8("Alternative")] languages = [''] + sorted(lexers.keys()) + self.extras for lang in languages: self.editorLexerCombo.addItem(lang) pygmentsLexers = [''] + sorted([l[0] for l in get_all_lexers()]) for pygmentsLexer in pygmentsLexers: self.pygmentsLexerCombo.addItem(pygmentsLexer) # set initial values lexerAssocs = Preferences.getEditorLexerAssocs() for ext in lexerAssocs.keys(): QTreeWidgetItem(self.editorLexerList, QStringList() << ext << lexerAssocs[ext]) self.editorLexerList.sortByColumn(0, Qt.AscendingOrder) def save(self): """ Public slot to save the Editor Highlighter Associations configuration. """ lexerAssocs = {} for index in range(\ self.editorLexerList.topLevelItemCount()): itm = self.editorLexerList.topLevelItem(index) lexerAssocs[unicode(itm.text(0))] = unicode(itm.text(1)) Preferences.setEditorLexerAssocs(lexerAssocs) @pyqtSignature("") def on_addLexerButton_clicked(self): """ Private slot to add the lexer association displayed to the list. """ ext = self.editorFileExtEdit.text() if ext.startsWith(self.extsep): ext.replace(self.extsep, "") lexer = self.editorLexerCombo.currentText() if lexer in self.extras: pygmentsLexer = self.pygmentsLexerCombo.currentText() if pygmentsLexer.isEmpty(): lexer = pygmentsLexer else: lexer = QString("Pygments|%1").arg(pygmentsLexer) if not ext.isEmpty() and not lexer.isEmpty(): itmList = self.editorLexerList.findItems(\ ext, Qt.MatchFlags(Qt.MatchExactly), 0) if itmList: index = self.editorLexerList.indexOfTopLevelItem(itmList[0]) itm = self.editorLexerList.takeTopLevelItem(index) del itm itm = QTreeWidgetItem(self.editorLexerList, QStringList() << ext << lexer) self.editorFileExtEdit.clear() self.editorLexerCombo.setCurrentIndex(0) self.pygmentsLexerCombo.setCurrentIndex(0) self.editorLexerList.sortItems(self.editorLexerList.sortColumn(), self.editorLexerList.header().sortIndicatorOrder()) @pyqtSignature("") def on_deleteLexerButton_clicked(self): """ Private slot to delete the currently selected lexer association of the list. """ itmList = self.editorLexerList.selectedItems() if itmList: index = self.editorLexerList.indexOfTopLevelItem(\ itmList[0]) itm = self.editorLexerList.takeTopLevelItem(index) del itm self.editorLexerList.clearSelection() self.editorFileExtEdit.clear() self.editorLexerCombo.setCurrentIndex(0) def on_editorLexerList_itemClicked(self, itm, column): """ Private slot to handle the clicked signal of the lexer association list. @param itm reference to the selecte item (QTreeWidgetItem) @param column column the item was clicked or activated (integer) (ignored) """ if itm is None: self.editorFileExtEdit.clear() self.editorLexerCombo.setCurrentIndex(0) self.pygmentsLexerCombo.setCurrentIndex(0) else: self.editorFileExtEdit.setText(itm.text(0)) lexer = itm.text(1) if lexer.startsWith("Pygments|"): pygmentsLexer = lexer.section("|", 1) pygmentsIndex = self.pygmentsLexerCombo.findText(pygmentsLexer) lexer = self.trUtf8("Alternative") else: pygmentsIndex = 0 index = self.editorLexerCombo.findText(lexer) self.editorLexerCombo.setCurrentIndex(index) self.pygmentsLexerCombo.setCurrentIndex(pygmentsIndex) def on_editorLexerList_itemActivated(self, itm, column): """ Private slot to handle the activated signal of the lexer association list. @param itm reference to the selecte item (QTreeWidgetItem) @param column column the item was clicked or activated (integer) (ignored) """ self.on_editorLexerList_itemClicked(itm, column) @pyqtSignature("QString") def on_editorLexerCombo_currentIndexChanged(self, text): """ Private slot to handle the selection of a lexer. """ if text in self.extras: self.pygmentsLexerCombo.setEnabled(True) self.pygmentsLabel.setEnabled(True) else: self.pygmentsLexerCombo.setEnabled(False) self.pygmentsLabel.setEnabled(False) def create(dlg): """ Module function to create the configuration page. @param dlg reference to the configuration dialog """ page = EditorHighlightersPage(dlg.getLexers()) return page eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/EditorAutocompletionQScintillaPage.0000644000175000001440000000007411072705635031507 xustar000000000000000030 atime=1389081083.549724388 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/EditorAutocompletionQScintillaPage.ui0000644000175000001440000000753611072705635031605 0ustar00detlevusers00000000000000 EditorAutocompletionQScintillaPage 0 0 506 257 <b>Configure QScintilla Autocompletion</b> QFrame::HLine QFrame::Sunken Qt::Horizontal Select this, if single entries shall be inserted automatically Show single Select to enable the use of fill-up characters to autocomplete the current word <b>Use fill-up characters</b><p>Select to enable the use of fill-up characters to autocomplete the current word. A fill-up character is one that, when entered while an auto-completion list is being displayed, causes the currently selected item from the list to be added to the text followed by the fill-up character.</p> Use fill-up characters Source Select this to get autocompletion from current document from Document Select this to get autocompletion from installed APIs from API files Select this to get autocompletion from current document and installed APIs from Document and API files Qt::Vertical 456 51 acShowSingleCheckBox acFillupsCheckBox acSourceDocumentRadioButton acSourceAPIsRadioButton acSourceAllRadioButton eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/PythonPage.ui0000644000175000001440000000007411163704567025175 xustar000000000000000030 atime=1389081083.554724389 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/PythonPage.ui0000644000175000001440000000763111163704567024731 0ustar00detlevusers00000000000000 PythonPage 0 0 482 473 <b>Configure Python</b> QFrame::HLine QFrame::Sunken Qt::Horizontal Encoding String Encoding: 0 0 Select the string encoding to be used. I/O Encoding: 0 0 Select the string encoding used by commandline tools. Source association Enter the file extensions to be associated with the Python versions separated by a space. They must not overlap with each other. true Python 2: Python 3: Qt::Vertical 464 41 eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/EditorCalltipsQScintillaPage.py0000644000175000001440000000013212261012650030611 xustar000000000000000030 mtime=1388582312.723086251 30 atime=1389081083.554724389 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/EditorCalltipsQScintillaPage.py0000644000175000001440000000401112261012650030337 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing the QScintilla Calltips configuration page. """ from PyQt4.Qsci import QsciScintilla from ConfigurationPageBase import ConfigurationPageBase from Ui_EditorCalltipsQScintillaPage import Ui_EditorCalltipsQScintillaPage import Preferences class EditorCalltipsQScintillaPage(ConfigurationPageBase, Ui_EditorCalltipsQScintillaPage): """ Class implementing the QScintilla Calltips configuration page. """ def __init__(self): """ Constructor """ ConfigurationPageBase.__init__(self) self.setupUi(self) self.setObjectName("EditorCalltipsQScintillaPage") # set initial values ctContext = Preferences.getEditor("CallTipsStyle") if ctContext == QsciScintilla.CallTipsNoContext: self.ctNoContextButton.setChecked(True) elif ctContext == QsciScintilla.CallTipsNoAutoCompletionContext: self.ctNoAutoCompletionButton.setChecked(True) elif ctContext == QsciScintilla.CallTipsContext: self.ctContextButton.setChecked(True) def save(self): """ Public slot to save the EditorCalltips configuration. """ if self.ctNoContextButton.isChecked(): Preferences.setEditor("CallTipsStyle", QsciScintilla.CallTipsNoContext) elif self.ctNoAutoCompletionButton.isChecked(): Preferences.setEditor("CallTipsStyle", QsciScintilla.CallTipsNoAutoCompletionContext) elif self.ctContextButton.isChecked(): Preferences.setEditor("CallTipsStyle", QsciScintilla.CallTipsContext) def create(dlg): """ Module function to create the configuration page. @param dlg reference to the configuration dialog """ page = EditorCalltipsQScintillaPage() return page eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/EditorSpellCheckingPage.py0000644000175000001440000000013212261012650027565 xustar000000000000000030 mtime=1388582312.726086289 30 atime=1389081083.554724389 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/EditorSpellCheckingPage.py0000644000175000001440000001211512261012650027317 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2008 - 2014 Detlev Offenbach # """ Module implementing the Editor Spellchecking configuration page. """ from PyQt4.QtCore import pyqtSignature from PyQt4.QtGui import QPixmap, QIcon from KdeQt import KQFileDialog from E4Gui.E4Completers import E4FileCompleter from ConfigurationPageBase import ConfigurationPageBase from Ui_EditorSpellCheckingPage import Ui_EditorSpellCheckingPage import Preferences import Utilities from QScintilla.SpellChecker import SpellChecker class EditorSpellCheckingPage(ConfigurationPageBase, Ui_EditorSpellCheckingPage): """ Class implementing the Editor Spellchecking configuration page. """ def __init__(self): """ Constructor """ ConfigurationPageBase.__init__(self) self.setupUi(self) self.setObjectName("EditorSpellCheckingPage") self.editorColours = {} languages = sorted(SpellChecker.getAvailableLanguages()) self.defaultLanguageCombo.addItems(languages) if languages: self.errorLabel.hide() else: self.spellingFrame.setEnabled(False) self.pwlFileCompleter = E4FileCompleter(self.pwlEdit, showHidden = True) self.pelFileCompleter = E4FileCompleter(self.pelEdit, showHidden = True) # set initial values self.checkingEnabledCheckBox.setChecked( Preferences.getEditor("SpellCheckingEnabled")) self.defaultLanguageCombo.setCurrentIndex( self.defaultLanguageCombo.findText( Preferences.getEditor("SpellCheckingDefaultLanguage"))) self.stringsOnlyCheckBox.setChecked( Preferences.getEditor("SpellCheckStringsOnly")) self.minimumWordSizeSlider.setValue( Preferences.getEditor("SpellCheckingMinWordSize")) self.editorColours["SpellingMarkers"] = \ self.initColour("SpellingMarkers", self.spellingMarkerButton, Preferences.getEditorColour) self.pwlEdit.setText(Preferences.getEditor("SpellCheckingPersonalWordList")) self.pelEdit.setText(Preferences.getEditor("SpellCheckingPersonalExcludeList")) if self.spellingFrame.isEnabled(): self.enabledCheckBox.setChecked(\ Preferences.getEditor("AutoSpellCheckingEnabled")) else: self.enabledCheckBox.setChecked(False) # not available self.chunkSizeSpinBox.setValue(Preferences.getEditor("AutoSpellCheckChunkSize")) def save(self): """ Public slot to save the Editor Search configuration. """ Preferences.setEditor("SpellCheckingEnabled", int(self.checkingEnabledCheckBox.isChecked())) Preferences.setEditor("SpellCheckingDefaultLanguage", self.defaultLanguageCombo.currentText()) Preferences.setEditor("SpellCheckStringsOnly", int(self.stringsOnlyCheckBox.isChecked())) Preferences.setEditor("SpellCheckingMinWordSize", self.minimumWordSizeSlider.value()) for key in self.editorColours.keys(): Preferences.setEditorColour(key, self.editorColours[key]) Preferences.setEditor("SpellCheckingPersonalWordList", self.pwlEdit.text()) Preferences.setEditor("SpellCheckingPersonalExcludeList", self.pelEdit.text()) Preferences.setEditor("AutoSpellCheckingEnabled", int(self.enabledCheckBox.isChecked())) Preferences.setEditor("AutoSpellCheckChunkSize", self.chunkSizeSpinBox.value()) @pyqtSignature("") def on_spellingMarkerButton_clicked(self): """ Private slot to set the colour of the spelling markers. """ self.editorColours["SpellingMarkers"] = \ self.selectColour(self.spellingMarkerButton, self.editorColours["SpellingMarkers"]) @pyqtSignature("") def on_pwlButton_clicked(self): """ Private method to select the personal word list file. """ file = KQFileDialog.getOpenFileName(\ self, self.trUtf8("Select personal word list"), self.pwlEdit.text(), self.trUtf8("Dictionary File (*.dic);;All Files (*)")) if not file.isEmpty(): self.pwlEdit.setText(Utilities.toNativeSeparators(file)) @pyqtSignature("") def on_pelButton_clicked(self): """ Private method to select the personal exclude list file. """ file = KQFileDialog.getOpenFileName(\ self, self.trUtf8("Select personal exclude list"), self.pelEdit.text(), self.trUtf8("Dictionary File (*.dic);;All Files (*)")) if not file.isEmpty(): self.pelEdit.setText(Utilities.toNativeSeparators(file)) def create(dlg): """ Module function to create the configuration page. @param dlg reference to the configuration dialog """ page = EditorSpellCheckingPage() return page eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/EditorHighlightingStylesPage.py0000644000175000001440000000013212261012650030663 xustar000000000000000030 mtime=1388582312.729086328 30 atime=1389081083.554724389 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/EditorHighlightingStylesPage.py0000644000175000001440000004634112261012650030425 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing the Editor Highlighting Styles configuration page. """ import os import cStringIO from PyQt4.QtCore import QString, QStringList, pyqtSignature, QFileInfo, QVariant from PyQt4.QtGui import QPalette, QFileDialog, QMenu, QFont from KdeQt import KQColorDialog, KQFontDialog, KQInputDialog, KQFileDialog, KQMessageBox from ConfigurationPageBase import ConfigurationPageBase from Ui_EditorHighlightingStylesPage import Ui_EditorHighlightingStylesPage from E4XML.XMLUtilities import make_parser from E4XML.XMLErrorHandler import XMLErrorHandler, XMLFatalParseError from E4XML.XMLEntityResolver import XMLEntityResolver from E4XML.HighlightingStylesWriter import HighlightingStylesWriter from E4XML.HighlightingStylesHandler import HighlightingStylesHandler import Preferences class EditorHighlightingStylesPage(ConfigurationPageBase, Ui_EditorHighlightingStylesPage): """ Class implementing the Editor Highlighting Styles configuration page. """ FAMILYONLY = 0 SIZEONLY = 1 FAMILYANDSIZE = 2 FONT = 99 def __init__(self, lexers): """ Constructor @param lexers reference to the lexers dictionary """ ConfigurationPageBase.__init__(self) self.setupUi(self) self.setObjectName("EditorHighlightingStylesPage") self.__fontButtonMenu = QMenu() act = self.__fontButtonMenu.addAction(self.trUtf8("Font")) act.setData(QVariant(self.FONT)) self.__fontButtonMenu.addSeparator() act = self.__fontButtonMenu.addAction(self.trUtf8("Family and Size only")) act.setData(QVariant(self.FAMILYANDSIZE)) act = self.__fontButtonMenu.addAction(self.trUtf8("Family only")) act.setData(QVariant(self.FAMILYONLY)) act = self.__fontButtonMenu.addAction(self.trUtf8("Size only")) act.setData(QVariant(self.SIZEONLY)) self.__fontButtonMenu.triggered.connect(self.__fontButtonMenuTriggered) self.fontButton.setMenu(self.__fontButtonMenu) self.__allFontsButtonMenu = QMenu() act = self.__allFontsButtonMenu.addAction(self.trUtf8("Font")) act.setData(QVariant(self.FONT)) self.__allFontsButtonMenu.addSeparator() act = self.__allFontsButtonMenu.addAction(self.trUtf8("Family and Size only")) act.setData(QVariant(self.FAMILYANDSIZE)) act = self.__allFontsButtonMenu.addAction(self.trUtf8("Family only")) act.setData(QVariant(self.FAMILYONLY)) act = self.__allFontsButtonMenu.addAction(self.trUtf8("Size only")) act.setData(QVariant(self.SIZEONLY)) self.__allFontsButtonMenu.triggered.connect(self.__allFontsButtonMenuTriggered) self.allFontsButton.setMenu(self.__allFontsButtonMenu) self.lexer = None self.lexers = lexers # set initial values languages = [''] + self.lexers.keys() languages.sort() for lang in languages: self.lexerLanguageComboBox.addItem(lang) self.on_lexerLanguageComboBox_activated(QString('')) def save(self): """ Public slot to save the Editor Highlighting Styles configuration. """ for lexer in self.lexers.values(): lexer.writeSettings(Preferences.Prefs.settings, "Scintilla") @pyqtSignature("QString") def on_lexerLanguageComboBox_activated(self, language): """ Private slot to fill the style combo of the source page. @param language The lexer language (string or QString) """ self.styleElementList.clear() self.styleGroup.setEnabled(False) self.lexer = None self.exportCurrentButton.setEnabled(not language.isEmpty()) self.importCurrentButton.setEnabled(not language.isEmpty()) if language.isEmpty(): return try: self.lexer = self.lexers[unicode(language)] except KeyError: return self.styleGroup.setEnabled(True) self.styleElementList.addItems(self.lexer.styles) self.styleElementList.setCurrentRow(0) def on_styleElementList_currentRowChanged(self, index): """ Private method to set up the style element part of the source page. @param index the style index. """ try: self.style = self.lexer.ind2style[index] except KeyError: return colour = self.lexer.color(self.style) paper = self.lexer.paper(self.style) eolfill = self.lexer.eolFill(self.style) font = self.lexer.font(self.style) self.sampleText.setFont(font) pl = self.sampleText.palette() pl.setColor(QPalette.Text, colour) pl.setColor(QPalette.Base, paper) self.sampleText.setPalette(pl) self.sampleText.repaint() self.eolfillCheckBox.setChecked(eolfill) @pyqtSignature("") def on_foregroundButton_clicked(self): """ Private method used to select the foreground colour of the selected style and lexer. """ colour = KQColorDialog.getColor(self.lexer.color(self.style)) if colour.isValid(): pl = self.sampleText.palette() pl.setColor(QPalette.Text, colour) self.sampleText.setPalette(pl) self.sampleText.repaint() if len(self.styleElementList.selectedItems()) > 1: for selItem in self.styleElementList.selectedItems(): style = self.lexer.ind2style[self.styleElementList.row(selItem)] self.lexer.setColor(colour, style) else: self.lexer.setColor(colour, self.style) @pyqtSignature("") def on_backgroundButton_clicked(self): """ Private method used to select the background colour of the selected style and lexer. """ colour = KQColorDialog.getColor(self.lexer.paper(self.style)) if colour.isValid(): pl = self.sampleText.palette() pl.setColor(QPalette.Base, colour) self.sampleText.setPalette(pl) self.sampleText.repaint() if len(self.styleElementList.selectedItems()) > 1: for selItem in self.styleElementList.selectedItems(): style = self.lexer.ind2style[self.styleElementList.row(selItem)] self.lexer.setPaper(colour, style) else: self.lexer.setPaper(colour, self.style) @pyqtSignature("") def on_allBackgroundColoursButton_clicked(self): """ Private method used to select the background colour of all styles of a selected lexer. """ colour = KQColorDialog.getColor(self.lexer.paper(self.style)) if colour.isValid(): pl = self.sampleText.palette() pl.setColor(QPalette.Base, colour) self.sampleText.setPalette(pl) self.sampleText.repaint() for style in self.lexer.ind2style.values(): self.lexer.setPaper(colour, style) def __changeFont(self, doAll, familyOnly, sizeOnly): """ Private slot to change the highlighter font. @param doAll flag indicating to change the font for all styles (boolean) @param familyOnly flag indicating to set the font family only (boolean) @param sizeOnly flag indicating to set the font size only (boolean """ def setFont(font, style, familyOnly, sizeOnly): """ Local function to set the font. @param font font to be set (QFont) @param style style to set the font for (integer) @param familyOnly flag indicating to set the font family only (boolean) @param sizeOnly flag indicating to set the font size only (boolean """ if familyOnly or sizeOnly: newFont = QFont(self.lexer.font(style)) if familyOnly: newFont.setFamily(font.family()) if sizeOnly: newFont.setPointSize(font.pointSize()) self.lexer.setFont(newFont, style) else: self.lexer.setFont(font, style) def setSampleFont(font, familyOnly, sizeOnly): """ Local function to set the font of the sample text. @param font font to be set (QFont) @param familyOnly flag indicating to set the font family only (boolean) @param sizeOnly flag indicating to set the font size only (boolean """ if familyOnly or sizeOnly: newFont = QFont(self.lexer.font(self.style)) if familyOnly: newFont.setFamily(font.family()) if sizeOnly: newFont.setPointSize(font.pointSize()) self.sampleText.setFont(newFont) else: self.sampleText.setFont(font) font, ok = KQFontDialog.getFont(self.lexer.font(self.style)) if ok: setSampleFont(font, familyOnly, sizeOnly) if doAll: for style in list(self.lexer.ind2style.values()): setFont(font, style, familyOnly, sizeOnly) elif len(self.styleElementList.selectedItems()) > 1: for selItem in self.styleElementList.selectedItems(): style = self.lexer.ind2style[self.styleElementList.row(selItem)] setFont(font, style, familyOnly, sizeOnly) else: setFont(font, self.style, familyOnly, sizeOnly) def __fontButtonMenuTriggered(self, act): """ Private slot used to select the font of the selected style and lexer. @param act reference to the triggering action (QAction) """ if act is None: return familyOnly = act.data().toInt()[0] in [self.FAMILYANDSIZE, self.FAMILYONLY] sizeOnly = act.data().toInt()[0] in [self.FAMILYANDSIZE, self.SIZEONLY] self.__changeFont(False, familyOnly, sizeOnly) def __allFontsButtonMenuTriggered(self, act): """ Private slot used to change the font of all styles of a selected lexer. @param act reference to the triggering action (QAction) """ if act is None: return familyOnly = act.data().toInt()[0] in [self.FAMILYANDSIZE, self.FAMILYONLY] sizeOnly = act.data().toInt()[0] in [self.FAMILYANDSIZE, self.SIZEONLY] self.__changeFont(True, familyOnly, sizeOnly) def on_eolfillCheckBox_toggled(self, b): """ Private method used to set the eolfill for the selected style and lexer. @param b Flag indicating enabled or disabled state. """ self.lexer.setEolFill(b, self.style) @pyqtSignature("") def on_allEolFillButton_clicked(self): """ Private method used to set the eolfill for all styles of a selected lexer. """ on = self.trUtf8("Enabled") off = self.trUtf8("Disabled") selection, ok = KQInputDialog.getItem(\ self, self.trUtf8("Fill to end of line"), self.trUtf8("Select fill to end of line for all styles"), QStringList() << on << off, 0, False) if ok: enabled = selection == on self.eolfillCheckBox.setChecked(enabled) for style in self.lexer.ind2style.values(): self.lexer.setEolFill(enabled, style) @pyqtSignature("") def on_defaultButton_clicked(self): """ Private method to set the current style to its default values. """ if len(self.styleElementList.selectedItems()) > 1: for selItem in self.styleElementList.selectedItems(): style = self.lexer.ind2style[self.styleElementList.row(selItem)] self.__setToDefault(style) else: self.__setToDefault(self.style) self.on_styleElementList_currentRowChanged(self.styleElementList.currentRow()) @pyqtSignature("") def on_allDefaultButton_clicked(self): """ Private method to set all styles to their default values. """ for style in self.lexer.ind2style.values(): self.__setToDefault(style) self.on_styleElementList_currentRowChanged(self.styleElementList.currentRow()) def __setToDefault(self, style): """ Private method to set a specific style to its default values. @param style style to be reset (integer) """ self.lexer.setColor(self.lexer.defaultColor(style), style) self.lexer.setPaper(self.lexer.defaultPaper(style), style) self.lexer.setFont(self.lexer.defaultFont(style), style) self.lexer.setEolFill(self.lexer.defaultEolFill(style), style) @pyqtSignature("") def on_importCurrentButton_clicked(self): """ Private slot to import the styles of the current lexer. """ self.__importStyles({self.lexer.language() : self.lexer}) @pyqtSignature("") def on_exportCurrentButton_clicked(self): """ Private slot to export the styles of the current lexer. """ self.__exportStyles([self.lexer]) @pyqtSignature("") def on_importAllButton_clicked(self): """ Private slot to import the styles of all lexers. """ self.__importStyles(self.lexers) @pyqtSignature("") def on_exportAllButton_clicked(self): """ Private slot to export the styles of all lexers. """ self.__exportStyles(self.lexers.values()) def __exportStyles(self, lexers): """ Private method to export the styles of the given lexers. @param lexers list of lexer objects for which to export the styles """ selectedFilter = QString("") fn = KQFileDialog.getSaveFileName(\ self, self.trUtf8("Export Highlighting Styles"), QString(), self.trUtf8("eric4 highlighting styles file (*.e4h)"), selectedFilter, QFileDialog.Options(QFileDialog.DontConfirmOverwrite)) if fn.isEmpty(): return ext = QFileInfo(fn).suffix() if ext.isEmpty(): ex = selectedFilter.section('(*', 1, 1).section(')', 0, 0) if not ex.isEmpty(): fn.append(ex) fn = unicode(fn) try: f = open(fn, "wb") HighlightingStylesWriter(f, lexers).writeXML() f.close() except IOError, err: KQMessageBox.critical(self, self.trUtf8("Export Highlighting Styles"), self.trUtf8("""

    The highlighting styles could not be exported""" """ to file %1.

    Reason: %2

    """)\ .arg(fn)\ .arg(str(err)) ) def __importStyles(self, lexers): """ Private method to import the styles of the given lexers. @param lexers dictionary of lexer objects for which to import the styles """ fn = KQFileDialog.getOpenFileName(\ self, self.trUtf8("Import Highlighting Styles"), QString(), self.trUtf8("eric4 highlighting styles file (*.e4h)"), None) if fn.isEmpty(): return fn = unicode(fn) try: f = open(fn, "rb") try: line = f.readline() dtdLine = f.readline() finally: f.close() except IOError, err: KQMessageBox.critical(self, self.trUtf8("Import Highlighting Styles"), self.trUtf8("""

    The highlighting styles could not be read""" """ from file %1.

    Reason: %2

    """)\ .arg(fn)\ .arg(str(err)) ) return validating = dtdLine.startswith("The highlighting styles could not be read""" """ from file %1.

    Reason: %2

    """)\ .arg(fn)\ .arg(str(err)) ) return except XMLFatalParseError: KQMessageBox.critical(self, self.trUtf8("Import Highlighting Styles"), self.trUtf8("""

    The highlighting styles file %1""" """ has invalid contents.

    """).arg(fn)) eh.showParseMessages() return eh.showParseMessages() if self.lexer: colour = self.lexer.color(self.style) paper = self.lexer.paper(self.style) eolfill = self.lexer.eolFill(self.style) font = self.lexer.font(self.style) self.sampleText.setFont(font) pl = self.sampleText.palette() pl.setColor(QPalette.Text, colour) pl.setColor(QPalette.Base, paper) self.sampleText.setPalette(pl) self.sampleText.repaint() self.eolfillCheckBox.setChecked(eolfill) def saveState(self): """ Public method to save the current state of the widget. @return array containing the index of the selected lexer language (integer) and the index of the selected lexer entry (integer) """ savedState = [ self.lexerLanguageComboBox.currentIndex(), self.styleElementList.currentRow(), ] return savedState def setState(self, state): """ Public method to set the state of the widget. @param state state data generated by saveState """ self.lexerLanguageComboBox.setCurrentIndex(state[0]) self.on_lexerLanguageComboBox_activated(self.lexerLanguageComboBox.currentText()) self.styleElementList.setCurrentRow(state[1]) def create(dlg): """ Module function to create the configuration page. @param dlg reference to the configuration dialog """ page = EditorHighlightingStylesPage(dlg.getLexers()) return page eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/HelpAppearancePage.py0000644000175000001440000000013212261012650026553 xustar000000000000000030 mtime=1388582312.731086353 30 atime=1389081083.554724389 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/HelpAppearancePage.py0000644000175000001440000001160612261012650026311 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing the Help Viewers configuration page. """ from PyQt4.QtCore import QDir, QString, pyqtSignature from KdeQt import KQFileDialog from E4Gui.E4Completers import E4FileCompleter from ConfigurationPageBase import ConfigurationPageBase from Ui_HelpAppearancePage import Ui_HelpAppearancePage from Preferences.ConfigurationDialog import ConfigurationWidget import Preferences import Utilities class HelpAppearancePage(ConfigurationPageBase, Ui_HelpAppearancePage): """ Class implementing the Help Viewer Appearance page. """ def __init__(self): """ Constructor """ ConfigurationPageBase.__init__(self) self.setupUi(self) self.setObjectName("HelpAppearancePage") self.styleSheetCompleter = E4FileCompleter(self.styleSheetEdit) self.helpColours = {} self.__displayMode = None # set initial values self.standardFont = Preferences.getHelp("StandardFont") self.standardFontSample.setFont(self.standardFont) self.standardFontSample.setText(QString("%1 %2")\ .arg(self.standardFont.family())\ .arg(self.standardFont.pointSize())) self.fixedFont = Preferences.getHelp("FixedFont") self.fixedFontSample.setFont(self.fixedFont) self.fixedFontSample.setText(QString("%1 %2")\ .arg(self.fixedFont.family())\ .arg(self.fixedFont.pointSize())) self.helpColours["SaveUrlColor"] = \ self.initColour("SaveUrlColor", self.secureURLsColourButton, Preferences.getHelp) self.autoLoadImagesCheckBox.setChecked(Preferences.getHelp("AutoLoadImages")) self.styleSheetEdit.setText(Preferences.getHelp("UserStyleSheet")) self.tabsCloseButtonCheckBox.setChecked(Preferences.getUI("SingleCloseButton")) def setMode(self, displayMode): """ Public method to perform mode dependent setups. @param displayMode mode of the configuration dialog (ConfigurationWidget.DefaultMode, ConfigurationWidget.HelpBrowserMode, ConfigurationWidget.TrayStarterMode) """ assert displayMode in ( ConfigurationWidget.DefaultMode, ConfigurationWidget.HelpBrowserMode, ConfigurationWidget.TrayStarterMode ) self.__displayMode = displayMode if self.__displayMode != ConfigurationWidget.HelpBrowserMode: self.separatorLine.hide() self.nextStartupNoteLabel.hide() self.tabsGroupBox.hide() def save(self): """ Public slot to save the Help Viewers configuration. """ Preferences.setHelp("StandardFont", self.standardFont) Preferences.setHelp("FixedFont", self.fixedFont) Preferences.setHelp("AutoLoadImages", int(self.autoLoadImagesCheckBox.isChecked())) Preferences.setHelp("UserStyleSheet", self.styleSheetEdit.text()) for key in self.helpColours.keys(): Preferences.setHelp(key, self.helpColours[key]) if self.__displayMode == ConfigurationWidget.HelpBrowserMode: Preferences.setUI("SingleCloseButton", int(self.tabsCloseButtonCheckBox.isChecked())) @pyqtSignature("") def on_standardFontButton_clicked(self): """ Private method used to select the standard font. """ self.standardFont = \ self.selectFont(self.standardFontSample, self.standardFont, True) @pyqtSignature("") def on_fixedFontButton_clicked(self): """ Private method used to select the fixed-width font. """ self.fixedFont = \ self.selectFont(self.fixedFontSample, self.fixedFont, True) @pyqtSignature("") def on_secureURLsColourButton_clicked(self): """ Private slot to set the colour for secure URLs. """ self.helpColours["SaveUrlColor"] = \ self.selectColour(self.secureURLsColourButton, self.helpColours["SaveUrlColor"]) @pyqtSignature("") def on_styleSheetButton_clicked(self): """ Private slot to handle the user style sheet selection. """ file = KQFileDialog.getOpenFileName(\ self, self.trUtf8("Select Style Sheet"), self.styleSheetEdit.text(), QString()) if not file.isNull(): self.styleSheetEdit.setText(Utilities.toNativeSeparators(file)) def create(dlg): """ Module function to create the configuration page. @param dlg reference to the configuration dialog """ page = HelpAppearancePage() return page eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/EditorSearchPage.ui0000644000175000001440000000007411072705635026264 xustar000000000000000030 atime=1389081083.556724388 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/EditorSearchPage.ui0000644000175000001440000001276111072705635026020 0ustar00detlevusers00000000000000 EditorSearchPage 0 0 576 596 <b>Configure editor search options</b> QFrame::HLine QFrame::Sunken Qt::Horizontal Search Markers Select, whether markers for all occurrences of the current word shall be shown Highlight all occurrences of current word Select, whether search markers shall be shown for a standard search Highlight all occurrences of search text Select, whether search markers shall be shown for a quicksearch Highlight all occurrences of quicksearch text Timeout for current word highlighting: Enter the time in milliseconds after which occurrences of the current word shall be highlighted Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter QAbstractSpinBox::PlusMinus QAbstractSpinBox::CorrectToNearestValue ms 100 5000 100 Qt::Horizontal 40 20 Marker Colour: 100 0 Select the colour for the search markers. Qt::Horizontal 40 20 Qt::Vertical 558 231 occurrencesMarkersEnabledCheckBox searchMarkersEnabledCheckBox quicksearchMarkersEnabledCheckBox markOccurrencesTimeoutSpinBox searchMarkerButton eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/HelpWebBrowserPage.ui0000644000175000001440000000007411572372442026603 xustar000000000000000030 atime=1389081083.557724387 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/HelpWebBrowserPage.ui0000644000175000001440000003330411572372442026333 0ustar00detlevusers00000000000000 HelpWebBrowserPage 0 0 613 818 <b>Configure web browser</b> QFrame::HLine QFrame::Sunken Qt::Horizontal Select to use a single help browser window only Use single web browser window Select to save the window size and position Save size and position upon exit Select to enable suggestions for web searches Show suggestions for web searches Startup On startup: Select the startup behavior Show home page Show empty page Home Page: Enter the desired home page Press to set the current page as the home page Set to current page Press to set the default home page Set to default home page Qt::Horizontal 160 20 Scheme Default Scheme: 0 0 Select the default scheme <b>Default Scheme</b><p>Select the default scheme. This scheme is prepended to URLs, that don't contain one.</p> false Privacy Select to enable Java Enable Java Select to enable JavaScript Enable JavaScript Select to allow JavaScript to open windows JavaScript can open windows Select to allow JavaScript to access the clipboard JavaScript can access clipboard Select to enable plugins in web pages Enable Plugins Security Select to save passwords Save passwords History Remove history items: 0 0 Select the period for expiration of history entries After one day After one week After two weeks After one month After one year Manually On application exit Browser Cache Enable disk cache Cache size: Enter the maximum size of the disk cache Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter MB 1 999 Qt::Horizontal 410 20 Web Search Language: Select the language to be used for web searches QComboBox::AdjustToContents Qt::Horizontal 450 20 Printing Select to print background colours and images Print background colours and images Qt::Vertical 479 121 singleHelpWindowCheckBox saveGeometryCheckBox webSuggestionsCheckBox startupCombo homePageEdit setCurrentPageButton defaultHomeButton defaultSchemeCombo javaCheckBox javaScriptCheckBox jsOpenWindowsCheckBox jsClipboardCheckBox pluginsCheckBox savePasswordsCheckBox expireHistory diskCacheCheckBox cacheSizeSpinBox languageCombo printBackgroundsCheckBox eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/DebuggerGeneralPage.py0000644000175000001440000000013212261012650026725 xustar000000000000000030 mtime=1388582312.751086607 30 atime=1389081083.557724387 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/DebuggerGeneralPage.py0000644000175000001440000002574612261012650026475 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing the Debugger General configuration page. """ import socket from PyQt4.QtCore import * from PyQt4.QtGui import * from PyQt4.QtNetwork import * from KdeQt import KQInputDialog, KQMessageBox from KdeQt.KQApplication import e4App from E4Gui.E4Completers import E4FileCompleter, E4DirCompleter from ConfigurationPageBase import ConfigurationPageBase from Ui_DebuggerGeneralPage import Ui_DebuggerGeneralPage import Preferences import Utilities class DebuggerGeneralPage(ConfigurationPageBase, Ui_DebuggerGeneralPage): """ Class implementing the Debugger General configuration page. """ def __init__(self): """ Constructor """ ConfigurationPageBase.__init__(self) self.setupUi(self) self.setObjectName("DebuggerGeneralPage") t = self.execLineEdit.whatsThis() if not t.isEmpty(): t.append(Utilities.getPercentReplacementHelp()) self.execLineEdit.setWhatsThis(t) try: backends = e4App().getObject("DebugServer").getSupportedLanguages() for backend in sorted(backends): self.passiveDbgBackendCombo.addItem(backend) except KeyError: self.passiveDbgGroup.setEnabled(False) t = self.consoleDbgEdit.whatsThis() if not t.isEmpty(): t.append(Utilities.getPercentReplacementHelp()) self.consoleDbgEdit.setWhatsThis(t) self.consoleDbgCompleter = E4FileCompleter(self.consoleDbgEdit) self.dbgTranslationLocalCompleter = E4DirCompleter(self.dbgTranslationLocalEdit) # set initial values interfaces = QStringList() networkInterfaces = QNetworkInterface.allInterfaces() for networkInterface in networkInterfaces: addressEntries = networkInterface.addressEntries() if len(addressEntries) > 0: for addressEntry in addressEntries: if ":" in addressEntry.ip().toString() and not socket.has_ipv6: continue # IPv6 not supported by Python interfaces.append(QString("%1 (%2)")\ .arg(networkInterface.name())\ .arg(addressEntry.ip().toString())) self.interfacesCombo.addItems(interfaces) interface = Preferences.getDebugger("NetworkInterface") if not socket.has_ipv6: # IPv6 not supported by Python self.all6InterfacesButton.setEnabled(False) if interface == "allv6": interface = "all" if interface == "all": self.allInterfacesButton.setChecked(True) elif interface == "allv6": self.all6InterfacesButton.setChecked(True) else: self.selectedInterfaceButton.setChecked(True) index = interfaces.indexOf(QRegExp(QString(".*%1.*").arg(interface))) self.interfacesCombo.setCurrentIndex(index) self.allowedHostsList.addItems(\ Preferences.getDebugger("AllowedHosts")) self.remoteCheckBox.setChecked(\ Preferences.getDebugger("RemoteDbgEnabled")) self.hostLineEdit.setText(\ Preferences.getDebugger("RemoteHost")) self.execLineEdit.setText(\ Preferences.getDebugger("RemoteExecution")) if self.passiveDbgGroup.isEnabled(): self.passiveDbgCheckBox.setChecked(\ Preferences.getDebugger("PassiveDbgEnabled")) self.passiveDbgPortSpinBox.setValue(\ Preferences.getDebugger("PassiveDbgPort")) index = self.passiveDbgBackendCombo.findText( Preferences.getDebugger("PassiveDbgType")) if index == -1: index = 0 self.passiveDbgBackendCombo.setCurrentIndex(index) self.debugEnvironReplaceCheckBox.setChecked(\ Preferences.getDebugger("DebugEnvironmentReplace")) self.debugEnvironEdit.setText(\ Preferences.getDebugger("DebugEnvironment")) self.automaticResetCheckBox.setChecked(\ Preferences.getDebugger("AutomaticReset")) self.debugAutoSaveScriptsCheckBox.setChecked(\ Preferences.getDebugger("Autosave")) self.consoleDbgCheckBox.setChecked(\ Preferences.getDebugger("ConsoleDbgEnabled")) self.consoleDbgEdit.setText(\ Preferences.getDebugger("ConsoleDbgCommand")) self.dbgPathTranslationCheckBox.setChecked(\ Preferences.getDebugger("PathTranslation")) self.dbgTranslationRemoteEdit.setText(\ Preferences.getDebugger("PathTranslationRemote")) self.dbgTranslationLocalEdit.setText(\ Preferences.getDebugger("PathTranslationLocal")) self.debugThreeStateBreakPoint.setChecked(\ Preferences.getDebugger("ThreeStateBreakPoints")) self.dontShowClientExitCheckBox.setChecked(\ Preferences.getDebugger("SuppressClientExit")) self.exceptionBreakCheckBox.setChecked(\ Preferences.getDebugger("BreakAlways")) self.autoViewSourcecodeCheckBox.setChecked(\ Preferences.getDebugger("AutoViewSourceCode")) def save(self): """ Public slot to save the Debugger General (1) configuration. """ Preferences.setDebugger("RemoteDbgEnabled", int(self.remoteCheckBox.isChecked())) Preferences.setDebugger("RemoteHost", self.hostLineEdit.text()) Preferences.setDebugger("RemoteExecution", self.execLineEdit.text()) Preferences.setDebugger("PassiveDbgEnabled", int(self.passiveDbgCheckBox.isChecked())) Preferences.setDebugger("PassiveDbgPort", self.passiveDbgPortSpinBox.value()) Preferences.setDebugger("PassiveDbgType", self.passiveDbgBackendCombo.currentText()) if self.allInterfacesButton.isChecked(): Preferences.setDebugger("NetworkInterface", "all") elif self.all6InterfacesButton.isChecked(): Preferences.setDebugger("NetworkInterface", "allv6") else: interface = self.interfacesCombo.currentText() interface = interface.section("(", 1, 1).section(")", 0, 0) if interface.isEmpty(): Preferences.setDebugger("NetworkInterface", "all") else: Preferences.setDebugger("NetworkInterface", interface) allowedHosts = QStringList() for row in range(self.allowedHostsList.count()): allowedHosts.append(self.allowedHostsList.item(row).text()) Preferences.setDebugger("AllowedHosts", allowedHosts) Preferences.setDebugger("DebugEnvironmentReplace", int(self.debugEnvironReplaceCheckBox.isChecked())) Preferences.setDebugger("DebugEnvironment", self.debugEnvironEdit.text()) Preferences.setDebugger("AutomaticReset", int(self.automaticResetCheckBox.isChecked())) Preferences.setDebugger("Autosave", int(self.debugAutoSaveScriptsCheckBox.isChecked())) Preferences.setDebugger("ConsoleDbgEnabled", int(self.consoleDbgCheckBox.isChecked())) Preferences.setDebugger("ConsoleDbgCommand", self.consoleDbgEdit.text()) Preferences.setDebugger("PathTranslation", int(self.dbgPathTranslationCheckBox.isChecked())) Preferences.setDebugger("PathTranslationRemote", unicode(self.dbgTranslationRemoteEdit.text())) Preferences.setDebugger("PathTranslationLocal", unicode(self.dbgTranslationLocalEdit.text())) Preferences.setDebugger("ThreeStateBreakPoints", int(self.debugThreeStateBreakPoint.isChecked())) Preferences.setDebugger("SuppressClientExit", int(self.dontShowClientExitCheckBox.isChecked())) Preferences.setDebugger("BreakAlways", int(self.exceptionBreakCheckBox.isChecked())) Preferences.setDebugger("AutoViewSourceCode", int(self.autoViewSourcecodeCheckBox.isChecked())) def on_allowedHostsList_currentItemChanged(self, current, previous): """ Private method set the state of the edit and delete button. @param current new current item (QListWidgetItem) @param previous previous current item (QListWidgetItem) """ self.editAllowedHostButton.setEnabled(current is not None) self.deleteAllowedHostButton.setEnabled(current is not None) @pyqtSignature("") def on_addAllowedHostButton_clicked(self): """ Private slot called to add a new allowed host. """ allowedHost, ok = KQInputDialog.getText(\ None, self.trUtf8("Add allowed host"), self.trUtf8("Enter the IP address of an allowed host"), QLineEdit.Normal) if ok and not allowedHost.isEmpty(): if QHostAddress(allowedHost).protocol() in \ [QAbstractSocket.IPv4Protocol, QAbstractSocket.IPv6Protocol]: self.allowedHostsList.addItem(allowedHost) else: KQMessageBox.critical(None, self.trUtf8("Add allowed host"), self.trUtf8("""

    The entered address %1 is not""" """ a valid IP v4 or IP v6 address. Aborting...

    """)\ .arg(allowedHost)) @pyqtSignature("") def on_deleteAllowedHostButton_clicked(self): """ Private slot called to delete an allowed host. """ self.allowedHostsList.takeItem(self.allowedHostsList.currentRow()) @pyqtSignature("") def on_editAllowedHostButton_clicked(self): """ Private slot called to edit an allowed host. """ allowedHost = self.allowedHostsList.currentItem().text() allowedHost, ok = KQInputDialog.getText(\ None, self.trUtf8("Edit allowed host"), self.trUtf8("Enter the IP address of an allowed host"), QLineEdit.Normal, allowedHost) if ok and not allowedHost.isEmpty(): if QHostAddress(allowedHost).protocol() in \ [QAbstractSocket.IPv4Protocol, QAbstractSocket.IPv6Protocol]: self.allowedHostsList.currentItem().setText(allowedHost) else: KQMessageBox.critical(None, self.trUtf8("Edit allowed host"), self.trUtf8("""

    The entered address %1 is not""" """ a valid IP v4 or IP v6 address. Aborting...

    """)\ .arg(allowedHost)) def create(dlg): """ Module function to create the configuration page. @param dlg reference to the configuration dialog """ page = DebuggerGeneralPage() return page eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/DebuggerRubyPage.ui0000644000175000001440000000007411072705635026276 xustar000000000000000030 atime=1389081083.566724388 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/DebuggerRubyPage.ui0000644000175000001440000000442311072705635026026 0ustar00detlevusers00000000000000 DebuggerRubyPage 0 0 400 170 <b>Configure Ruby Debugger</b> QFrame::HLine QFrame::Sunken Qt::Horizontal Ruby Interpreter for Debug Client Enter the path of the Ruby interpreter to be used by the debug client. Press to select the Ruby interpreter via a file selection dialog ... Select, to redirect stdin, stdout and stderr of the program being debugged to the eric4 IDE Redirect stdin/stdout/stderr Qt::Vertical 20 40 eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/InterfacePage.ui0000644000175000001440000000013212136734526025606 xustar000000000000000030 mtime=1367062870.055480489 30 atime=1389081083.566724388 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/InterfacePage.ui0000644000175000001440000005124212136734526025344 0ustar00detlevusers00000000000000 InterfacePage 0 0 555 1169 <b>Configure User Interface</b> QFrame::HLine QFrame::Sunken Qt::Horizontal Browsers Select, if folders should be listed first in the various browsers List folders first in Browsers Select to hide non public classes, methods and attributes in the browsers. Hide non public members in Browsers Select to sort file contents by occurrence Sort contents by occurrence Filter out files: Enter wildcard file patterns separated by semicolon. Files matching these patterns will not be shown by the file browsers. Log-Viewer Select to show the log-viewer upon new output Show upon new output Stderr Colour: 100 0 Select the colour for text sent to stderr Qt::Horizontal 319 20 Qt::StrongFocus Select, if the caption of the main window should show the filename of the current editor Caption shows filename true Filename Length Enter the number of characters to be shown in the main window title. 10 999 10 100 Qt::Horizontal 31 23 Style: Select the interface style Style Sheet: Enter the name of the style sheet file Select the style sheet file via a file selection dialog ... Dockarea Corner Usage Top Left Corner Select to assign the top left corner to the top dockarea Top dockarea Select to assign the top left corner to the left dockarea Left dockarea Top Right Corner Select to assign the top right corner to the top dockarea Top dockarea Select to assign the top right corner to the right dockarea Right dockarea Bottom Left Corner Select to assign the bottom left corner to the bottom dockarea Bottom dockarea Select to assign the bottom left corner to the left dockarea Left dockarea Bottom Right Corner Select to assign the bottom right corner to the bottom dockarea Bottom dockarea Select to assign the bottom right corner to the right dockarea Right dockarea Sidebars Delay: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter ms 2000 100 200 Qt::Horizontal 396 20 QFrame::HLine QFrame::Sunken Qt::Horizontal <font color="#FF0000"><b>Note:</b> All settings below are activated at the next startup of the application.</font> 0 0 Language: languageComboBox 0 0 Select the interface language. The interface language can be selected from this list. If "system" is selected, the interface language is determined by the system. The selection of "none" means, that the default language will be used. Layout: 0 0 Select the layout type. Dock Windows Floating Windows Toolboxes Sidebars Shell Select to get a separate shell window separate window Select to embed the shell in the Debug-Viewer embed in Debug-Viewer File-Browser Select to get a separate file browser window separate window Select to embed the file browser in the Debug-Viewer embed in Debug-Viewer Select to embed the file browser in the Project-Viewer embed in Project-Viewer Tabs Show only one close button instead of one for each tab Dialogs Select, if KDE 4 dialogs should be used Use KDE 4 dialogs Qt::Vertical 537 41 Reset layout to factory defaults uiBrowsersListFoldersFirstCheckBox uiBrowsersHideNonPublicCheckBox uiBrowsersSortByOccurrenceCheckBox fileFiltersEdit lvAutoRaiseCheckBox stderrTextColourButton uiCaptionShowsFilenameGroupBox filenameLengthSpinBox styleComboBox styleSheetEdit styleSheetButton tlTopButton tlLeftButton trTopButton trRightButton blBottomButton blLeftButton brTopButton brRightButton delaySpinBox languageComboBox layoutComboBox separateShellButton debugEmbeddedShellButton separateFileBrowserButton debugEmbeddedFileBrowserButton projectEmbeddedFileBrowserButton tabsCloseButtonCheckBox uiKdeDialogsCheckBox resetLayoutButton eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/HelpDocumentationPage.py0000644000175000001440000000013212261012650027325 xustar000000000000000030 mtime=1388582312.753086632 30 atime=1389081083.567724388 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/HelpDocumentationPage.py0000644000175000001440000001230412261012650027057 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing the Help Documentation configuration page. """ from PyQt4.QtCore import QDir, pyqtSignature, QUrl from PyQt4.QtGui import QFileDialog from KdeQt import KQFileDialog import KdeQt from E4Gui.E4Completers import E4FileCompleter from ConfigurationPageBase import ConfigurationPageBase from Ui_HelpDocumentationPage import Ui_HelpDocumentationPage import Preferences import Utilities class HelpDocumentationPage(ConfigurationPageBase, Ui_HelpDocumentationPage): """ Class implementing the Help Documentation configuration page. """ def __init__(self): """ Constructor """ ConfigurationPageBase.__init__(self) self.setupUi(self) self.setObjectName("HelpDocumentationPage") self.pythonDocDirCompleter = E4FileCompleter(self.pythonDocDirEdit) self.qt4DocDirCompleter = E4FileCompleter(self.qt4DocDirEdit) self.pyqt4DocDirCompleter = E4FileCompleter(self.pyqt4DocDirEdit) self.pykde4DocDirCompleter = E4FileCompleter(self.pykde4DocDirEdit) self.pysideDocDirCompleter = E4FileCompleter(self.pysideDocDirEdit) self.pykde4Group.setEnabled(KdeQt.isKDEAvailable()) try: import PySide self.pysideGroup.setEnabled(True) del PySide except ImportError: self.pysideGroup.setEnabled(False) # set initial values self.pythonDocDirEdit.setText(\ Preferences.getHelp("PythonDocDir")) self.qt4DocDirEdit.setText(\ Preferences.getHelp("Qt4DocDir")) self.pyqt4DocDirEdit.setText(\ Preferences.getHelp("PyQt4DocDir")) self.pykde4DocDirEdit.setText(\ Preferences.getHelp("PyKDE4DocDir")) self.pysideDocDirEdit.setText(\ Preferences.getHelp("PySideDocDir")) def save(self): """ Public slot to save the Help Documentation configuration. """ Preferences.setHelp("PythonDocDir", self.pythonDocDirEdit.text()) Preferences.setHelp("Qt4DocDir", self.qt4DocDirEdit.text()) Preferences.setHelp("PyQt4DocDir", self.pyqt4DocDirEdit.text()) Preferences.setHelp("PyKDE4DocDir", self.pykde4DocDirEdit.text()) Preferences.setHelp("PySideDocDir", self.pysideDocDirEdit.text()) @pyqtSignature("") def on_pythonDocDirButton_clicked(self): """ Private slot to select the Python documentation directory. """ entry = KQFileDialog.getOpenFileName(\ self, self.trUtf8("Select Python documentation entry"), QUrl(self.pythonDocDirEdit.text()).path(), self.trUtf8("HTML Files (*.html *.htm);;All Files (*)")) if entry: self.pythonDocDirEdit.setText(Utilities.toNativeSeparators(entry)) @pyqtSignature("") def on_qt4DocDirButton_clicked(self): """ Private slot to select the Qt4 documentation directory. """ entry = KQFileDialog.getOpenFileName(\ self, self.trUtf8("Select Qt4 documentation entry"), QUrl(self.qt4DocDirEdit.text()).path(), self.trUtf8("HTML Files (*.html *.htm);;All Files (*)")) if entry: self.qt4DocDirEdit.setText(Utilities.toNativeSeparators(entry)) @pyqtSignature("") def on_pyqt4DocDirButton_clicked(self): """ Private slot to select the PyQt4 documentation directory. """ entry = KQFileDialog.getOpenFileName(\ self, self.trUtf8("Select PyQt4 documentation entry"), QUrl(self.pyqt4DocDirEdit.text()).path(), self.trUtf8("HTML Files (*.html *.htm);;All Files (*)")) if entry: self.pyqt4DocDirEdit.setText(Utilities.toNativeSeparators(entry)) @pyqtSignature("") def on_pykde4DocDirButton_clicked(self): """ Private slot to select the PyKDE4 documentation directory. """ entry = KQFileDialog.getOpenFileName(\ self, self.trUtf8("Select PyKDE4 documentation entry"), QUrl(self.pykde4DocDirEdit.text()).path(), self.trUtf8("HTML Files (*.html *.htm);;All Files (*)")) if entry: self.pykde4DocDirEdit.setText(Utilities.toNativeSeparators(entry)) @pyqtSignature("") def on_pysideDocDirButton_clicked(self): """ Private slot to select the PySide documentation directory. """ entry = KQFileDialog.getOpenFileName(\ self, self.trUtf8("Select PySide documentation entry"), QUrl(self.pysideDocDirEdit.text()).path(), self.trUtf8("HTML Files (*.html *.htm);;All Files (*)")) if entry: self.pysideDocDirEdit.setText(Utilities.toNativeSeparators(entry)) def create(dlg): """ Module function to create the configuration page. @param dlg reference to the configuration dialog """ page = HelpDocumentationPage() return page eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/PrinterPage.py0000644000175000001440000000013212261012650025326 xustar000000000000000030 mtime=1388582312.758086696 30 atime=1389081083.567724388 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/PrinterPage.py0000644000175000001440000000657212261012650025072 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing the Printer configuration page. """ from PyQt4.QtCore import pyqtSignature from ConfigurationPageBase import ConfigurationPageBase from Ui_PrinterPage import Ui_PrinterPage import Preferences class PrinterPage(ConfigurationPageBase, Ui_PrinterPage): """ Class implementing the Printer configuration page. """ def __init__(self): """ Constructor """ ConfigurationPageBase.__init__(self) self.setupUi(self) self.setObjectName("PrinterPage") # set initial values self.printerNameEdit.setText(\ Preferences.getPrinter("PrinterName")) if Preferences.getPrinter("ColorMode"): self.printerColorButton.setChecked(True) else: self.printerGrayscaleButton.setChecked(True) if Preferences.getPrinter("FirstPageFirst"): self.printFirstPageFirstButton.setChecked(True) else: self.printFirstPageLastButton.setChecked(True) self.printMagnificationSpinBox.setValue(\ Preferences.getPrinter("Magnification")) self.printheaderFont = Preferences.getPrinter("HeaderFont") self.printheaderFontSample.setFont(self.printheaderFont) self.leftMarginSpinBox.setValue(\ Preferences.getPrinter("LeftMargin")) self.rightMarginSpinBox.setValue(\ Preferences.getPrinter("RightMargin")) self.topMarginSpinBox.setValue(\ Preferences.getPrinter("TopMargin")) self.bottomMarginSpinBox.setValue(\ Preferences.getPrinter("BottomMargin")) def save(self): """ Public slot to save the Printer configuration. """ Preferences.setPrinter("PrinterName", self.printerNameEdit.text()) if self.printerColorButton.isChecked(): Preferences.setPrinter("ColorMode", 1) else: Preferences.setPrinter("ColorMode", 0) if self.printFirstPageFirstButton.isChecked(): Preferences.setPrinter("FirstPageFirst", 1) else: Preferences.setPrinter("FirstPageFirst", 0) Preferences.setPrinter("Magnification", self.printMagnificationSpinBox.value()) Preferences.setPrinter("HeaderFont", self.printheaderFont) Preferences.setPrinter("LeftMargin", self.leftMarginSpinBox.value()) Preferences.setPrinter("RightMargin", self.rightMarginSpinBox.value()) Preferences.setPrinter("TopMargin", self.topMarginSpinBox.value()) Preferences.setPrinter("BottomMargin", self.bottomMarginSpinBox.value()) @pyqtSignature("") def on_printheaderFontButton_clicked(self): """ Private method used to select the font for the page header. """ self.printheaderFont = \ self.selectFont(self.printheaderFontSample, self.printheaderFont) def polishPage(self): """ Public slot to perform some polishing actions. """ self.printheaderFontSample.setFont(self.printheaderFont) def create(dlg): """ Module function to create the configuration page. @param dlg reference to the configuration dialog """ page = PrinterPage() return page eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/EditorAutocompletionQScintillaPage.0000644000175000001440000000013212261012650031467 xustar000000000000000030 mtime=1388582312.762086746 30 atime=1389081083.596724388 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/EditorAutocompletionQScintillaPage.py0000644000175000001440000000461012261012650031573 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing the QScintilla Autocompletion configuration page. """ from PyQt4.Qsci import QsciScintilla from ConfigurationPageBase import ConfigurationPageBase from Ui_EditorAutocompletionQScintillaPage import Ui_EditorAutocompletionQScintillaPage import Preferences class EditorAutocompletionQScintillaPage(ConfigurationPageBase, Ui_EditorAutocompletionQScintillaPage): """ Class implementing the QScintilla Autocompletion configuration page. """ def __init__(self): """ Constructor """ ConfigurationPageBase.__init__(self) self.setupUi(self) self.setObjectName("EditorAutocompletionQScintillaPage") # set initial values self.acShowSingleCheckBox.setChecked(\ Preferences.getEditor("AutoCompletionShowSingle")) self.acFillupsCheckBox.setChecked(\ Preferences.getEditor("AutoCompletionFillups")) acSource = Preferences.getEditor("AutoCompletionSource") if acSource == QsciScintilla.AcsDocument: self.acSourceDocumentRadioButton.setChecked(True) elif acSource == QsciScintilla.AcsAPIs: self.acSourceAPIsRadioButton.setChecked(True) elif acSource == QsciScintilla.AcsAll: self.acSourceAllRadioButton.setChecked(True) def save(self): """ Public slot to save the Editor Autocompletion configuration. """ Preferences.setEditor("AutoCompletionShowSingle", int(self.acShowSingleCheckBox.isChecked())) Preferences.setEditor("AutoCompletionFillups", int(self.acFillupsCheckBox.isChecked())) if self.acSourceDocumentRadioButton.isChecked(): Preferences.setEditor("AutoCompletionSource", QsciScintilla.AcsDocument) elif self.acSourceAPIsRadioButton.isChecked(): Preferences.setEditor("AutoCompletionSource", QsciScintilla.AcsAPIs) elif self.acSourceAllRadioButton.isChecked(): Preferences.setEditor("AutoCompletionSource", QsciScintilla.AcsAll) def create(dlg): """ Module function to create the configuration page. @param dlg reference to the configuration dialog """ page = EditorAutocompletionQScintillaPage() return page eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/EditorTypingPage.ui0000644000175000001440000000007411131124325026314 xustar000000000000000030 atime=1389081083.596724388 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/EditorTypingPage.ui0000644000175000001440000004013711131124325026046 0ustar00detlevusers00000000000000 EditorTypingPage 0 0 537 531 <b>Configure typing</b> QFrame::HLine QFrame::Sunken Qt::Horizontal Programming Language: 0 0 Select the programming language to be configured. 0 Qt::TabFocus Select to enable Python typing aids Enable Python typing aids true Select to insert a closing parenthesis Automatic parenthesis insertion Qt::Horizontal QSizePolicy::Fixed 20 20 false Select to skip matching braces when typing Automatically skip matching braces when typing Qt::Horizontal 131 21 Select to skip a ':', if typed next to another ':' Automatic colon detection Select to indent to the brace level after typing 'return' After '(' indent to its level Select to insert the matching quote character Automatic quote insertion Select to dedent 'else:' and 'elif' to the matching 'if' Automatic dedent of 'else:' and 'elif' Select to dedent 'except' and 'finally' to the matching 'try:' Automatic dedent of 'except' and 'finally' Qt::Horizontal QSizePolicy::Fixed 20 20 false Select to treat code as Python 2.4 code Python 2.4 style 'try:' blocks Qt::Horizontal 261 20 Select to insert the 'import' string Automatic insertion of the 'import' string on 'from xxx' Select to insert the 'self' string when declaring a method Automatic insertion of 'self' when declaring methods Select to insert a blank after ',' Automatic insertion of ' ' (blank) after ',' Select to dedent 'def' statements to the last 'def' or 'class' Automatic dedent of 'def' statements Qt::Vertical 507 20 0 0 Qt::TabFocus Select to enable Ruby typing aids Enable Ruby typing aids true Select to insert a closing parenthesis Automatic parenthesis insertion Select to skip matching braces when typing Automatically skip matching braces when typing Select to indent to the brace level after typing 'return' After '(' indent to its level Select to insert the matching quote character Automatic quote insertion Select to insert a blank after ',' Automatic insertion of ' ' (blank) after ',' Select to automatically complete a here document Automatic completion of here document Select to automatically insert '=end' after entering '=begin' Automatic insertion of '=end' after '=begin' Qt::Vertical 20 40 Qt::Vertical 519 20 languageCombo pythonGroup pythonInsertClosingBraceCheckBox pythonSkipBraceCheckBox pythonColonDetectionCheckBox pythonIndentBraceCheckBox pythonInsertQuoteCheckBox pythonDedentElseCheckBox pythonDedentExceptCheckBox pythonDedentExceptPy24CheckBox pythonInsertImportCheckBox pythonInsertSelfCheckBox pythonInsertBlankCheckBox pythonDedentDefCheckBox rubyGroup rubyInsertClosingBraceCheckBox rubySkipBraceCheckBox rubyIndentBraceCheckBox rubyInsertQuoteCheckBox rubyInsertBlankCheckBox rubyInsertHereDocCheckBox rubyInsertInlineDocCheckBox pythonInsertClosingBraceCheckBox toggled(bool) pythonSkipBraceCheckBox setEnabled(bool) 99 114 116 144 pythonInsertClosingBraceCheckBox toggled(bool) pythonSkipBraceCheckBox setChecked(bool) 196 114 198 137 pythonDedentExceptCheckBox toggled(bool) pythonDedentExceptPy24CheckBox setEnabled(bool) 69 279 80 305 eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/TasksPage.py0000644000175000001440000000013212261012650024770 xustar000000000000000030 mtime=1388582312.764086772 30 atime=1389081083.597724387 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/TasksPage.py0000644000175000001440000000703112261012650024523 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing the Tasks configuration page. """ from PyQt4.QtCore import pyqtSignature from PyQt4.QtGui import QPixmap, QIcon from ConfigurationPageBase import ConfigurationPageBase from Ui_TasksPage import Ui_TasksPage import Preferences class TasksPage(ConfigurationPageBase, Ui_TasksPage): """ Class implementing the Tasks configuration page. """ def __init__(self): """ Constructor """ ConfigurationPageBase.__init__(self) self.setupUi(self) self.setObjectName("TasksPage") self.tasksColours = {} # set initial values self.tasksMarkerEdit.setText(Preferences.getTasks("TasksMarkers")) self.tasksMarkerBugfixEdit.setText(\ Preferences.getTasks("TasksMarkersBugfix")) self.tasksColours["TasksColour"] = \ self.initColour("TasksColour", self.tasksColourButton, Preferences.getTasks) self.tasksColours["TasksBugfixColour"] = \ self.initColour("TasksBugfixColour", self.tasksBugfixColourButton, Preferences.getTasks) self.tasksColours["TasksBgColour"] = \ self.initColour("TasksBgColour", self.tasksBgColourButton, Preferences.getTasks) self.tasksColours["TasksProjectBgColour"] = \ self.initColour("TasksProjectBgColour", self.tasksProjectBgColourButton, Preferences.getTasks) self.clearCheckBox.setChecked(Preferences.getTasks("ClearOnFileClose")) def save(self): """ Public slot to save the Tasks configuration. """ Preferences.setTasks("TasksMarkers", self.tasksMarkerEdit.text()) Preferences.setTasks("TasksMarkersBugfix", self.tasksMarkerBugfixEdit.text()) for key in self.tasksColours.keys(): Preferences.setTasks(key, self.tasksColours[key]) Preferences.setTasks("ClearOnFileClose", int(self.clearCheckBox.isChecked())) @pyqtSignature("") def on_tasksColourButton_clicked(self): """ Private slot to set the colour for standard tasks. """ self.tasksColours["TasksColour"] = \ self.selectColour(self.tasksColourButton, self.tasksColours["TasksColour"]) @pyqtSignature("") def on_tasksBugfixColourButton_clicked(self): """ Private slot to set the colour for bugfix tasks. """ self.tasksColours["TasksBugfixColour"] = \ self.selectColour(self.tasksBugfixColourButton, self.tasksColours["TasksBugfixColour"]) @pyqtSignature("") def on_tasksBgColourButton_clicked(self): """ Private slot to set the background colour for global tasks. """ self.tasksColours["TasksBgColour"] = \ self.selectColour(self.tasksBgColourButton, self.tasksColours["TasksBgColour"]) @pyqtSignature("") def on_tasksProjectBgColourButton_clicked(self): """ Private slot to set the backgroundcolour for project tasks. """ self.tasksColours["TasksProjectBgColour"] = \ self.selectColour(self.tasksProjectBgColourButton, self.tasksColours["TasksProjectBgColour"]) def create(dlg): """ Module function to create the configuration page. @param dlg reference to the configuration dialog """ page = TasksPage() return page eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/EditorExportersPage.ui0000644000175000001440000000013212034017357027041 xustar000000000000000030 mtime=1349525231.936420692 30 atime=1389081083.597724387 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/EditorExportersPage.ui0000644000175000001440000003501512034017357026577 0ustar00detlevusers00000000000000 EditorExportersPage 0 0 537 531 <b>Configure exporters</b> QFrame::HLine QFrame::Sunken Qt::Horizontal Exporter Type: 0 0 Select the exporter to be configured. 0 0 Select to export in WYSIWYG mode Use WYSIWYG mode Select to include folding functionality Include folding functionality Select to include only used styles Include only used styles Select to use the full pathname as the document title Use full pathname as document title Select to use tabs in the generated file Use tabs Qt::Vertical 507 21 0 Magnification: Select the magnification value to be added to the font sizes of the styles 20 Qt::Horizontal Displays the selected magnification value 2 QLCDNumber::Flat Font: Select the font from the list Pagesize: Select the page size from the list Margins Select the top margin in points (72 pt == 1") 288 Select the left margin in points (72 pt == 1") 288 Select the right margin in points (72 pt == 1") 288 Select the bottom margin in points (72 pt == 1") 288 Qt::Horizontal 40 20 Qt::Vertical 20 21 0 Select to export in WYSIWYG mode Use WYSIWYG mode Press to select the font for the RTF export Select Font Qt::NoFocus Font for RTF export Qt::AlignHCenter true Select to use tabs in the generated file Use tabs Qt::Vertical 451 21 0 Select to include only used styles Include only used styles Select to use the full pathname as the document title Use full pathname as document title Qt::Vertical 507 21 Qt::Vertical 519 21 exportersCombo htmlWysiwygCheckBox htmlFoldingCheckBox htmlStylesCheckBox htmlTitleCheckBox htmlTabsCheckBox pdfMagnificationSlider pdfFontCombo pdfPageSizeCombo pdfMarginTopSpin pdfMarginLeftSpin pdfMarginRightSpin pdfMarginBottomSpin rtfWysiwygCheckBox rtfFontButton rtfTabsCheckBox texStylesCheckBox texTitleCheckBox rtfWysiwygCheckBox toggled(bool) rtfFontButton setDisabled(bool) 57 83 59 117 rtfWysiwygCheckBox toggled(bool) rtfFontSample setDisabled(bool) 216 86 217 115 pdfMagnificationSlider sliderMoved(int) pdfMagnificationLCD display(int) 174 86 331 91 pdfMagnificationSlider valueChanged(int) pdfMagnificationLCD display(int) 140 87 332 96 eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/GraphicsPage.py0000644000175000001440000000013212261012650025443 xustar000000000000000030 mtime=1388582312.784087026 30 atime=1389081083.598724387 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/GraphicsPage.py0000644000175000001440000000306112261012650025175 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing the Printer configuration page. """ from PyQt4.QtCore import pyqtSignature from ConfigurationPageBase import ConfigurationPageBase from Ui_GraphicsPage import Ui_GraphicsPage import Preferences class GraphicsPage(ConfigurationPageBase, Ui_GraphicsPage): """ Class implementing the Printer configuration page. """ def __init__(self): """ Constructor """ ConfigurationPageBase.__init__(self) self.setupUi(self) self.setObjectName("GraphicsPage") # set initial values self.graphicsFont = Preferences.getGraphics("Font") self.graphicsFontSample.setFont(self.graphicsFont) def save(self): """ Public slot to save the Printer configuration. """ Preferences.setGraphics("Font", self.graphicsFont) @pyqtSignature("") def on_graphicsFontButton_clicked(self): """ Private method used to select the font for the graphics items. """ self.graphicsFont = self.selectFont(self.graphicsFontSample, self.graphicsFont) def polishPage(self): """ Public slot to perform some polishing actions. """ self.graphicsFontSample.setFont(self.graphicsFont) def create(dlg): """ Module function to create the configuration page. @param dlg reference to the configuration dialog """ page = GraphicsPage() return page eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/DebuggerGeneralPage.ui0000644000175000001440000000013211774044625026731 xustar000000000000000030 mtime=1341147541.993653975 30 atime=1389081083.605724387 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/DebuggerGeneralPage.ui0000644000175000001440000006140511774044625026471 0ustar00detlevusers00000000000000 DebuggerGeneralPage 0 0 643 1319 <b>Configure general debugger settings</b> QFrame::HLine QFrame::Sunken Qt::Horizontal Network Interface <font color="#FF0000"><b>Note:</b> These settings are activated at the next startup of the application.</font> Select to listen on all available network interfaces (IPv4 mode) All network interfaces (IPv4) Select to listen on all available network interfaces (IPv6 mode) All network interfaces (IPv6) Select to listen on the configured interface Only selected interface false Select the network interface to listen on Allowed hosts Qt::Vertical 20 40 false Delete false Edit... Add... 0 0 Passive Debugger <font color="#FF0000"><b>Note:</b> These settings are activated at the next startup of the application.</font> Enables the passive debug mode <b>Passive Debugger Enabled</b> <p>This enables the passive debugging mode. In this mode the debug client (the script) connects to the debug server (the IDE). The script is started outside the IDE. This way mod_python or Zope scripts can be debugged.</p> Passive Debugger Enabled false Debug Server Port: false Enter the port the debugger should listen on <b>Debug Server Port</b> <p>Enter the port the debugger should listen on.</p> 1024 65535 42424 Qt::Horizontal 91 20 false Debugger Type: false Select the debugger type of the backend Qt::Horizontal 91 20 Remote Debugger false Remote Execution: execLineEdit false Enter the remote execution command. <b>Remote Execution</b> <p>Enter the remote execution command (e.g. ssh). This command is used to log into the remote host and execute the remote debugger.</p> false Enter the hostname of the remote machine. <b>Remote Host</b> <p>Enter the hostname of the remote machine.</p> false Remote Host: hostLineEdit Enable remote debugging This enables the remote debugger. Please enter the hostname of the remote machine and the command for the remote execution (e.g. ssh) below. Remote Debugging Enabled Path Translation Select to perform path translation Perform Path Translation false Local Path: false Enter the local path false Enter the remote path false Remote Path: Console Debugger Enter the console command (e.g. xterm -e) <b>Console Command</b> <p>Enter the console command (e.g. xterm -e). This command is used to open a command window for the debugger.</p> Console Command: Select to start the debugger in a console window (e.g. xterm) Start debugger in console window Environment for Debug Client Select, if the environment should be replaced. <b>Replace Environment</b> <p>If this entry is checked, the environment of the debugger will be replaced by the entries of the environment variables field. If it is unchecked, the environment will be ammended by these settings.</p> Replace Environment Environment: Enter the environment variables to be set. <b>Environment</b> <p>Enter the environment variables to be set for the debugger. The individual settings must be separate by whitespace and be given in the form 'var=value'.</p> <p>Example: var1=1 var2="hello world"</p> Start Debugging Select, whether changed scripts should be saved upon a debug, run, ... action. Autosave changed scripts Debug Client Exit Select, whether a reset of the debug client should be performed after a client exit Automatic Reset after Client Exit Select to suppress the client exit dialog for a clean exit Don't show client exit dialog for a clean exit Breakpoints Select to change the breakpoint toggle order from Off->On->Off to Off->On (permanent)->On (temporary)->Off Three state breakpoint Exceptions Select to always break at exceptions Always break at exceptions Local Variables Viewer Automatically view source code when user changes the callstack frame in the callstack viewer. Automatically view source code Qt::Vertical 20 28 allInterfacesButton all6InterfacesButton selectedInterfaceButton interfacesCombo allowedHostsList addAllowedHostButton editAllowedHostButton deleteAllowedHostButton passiveDbgCheckBox passiveDbgPortSpinBox passiveDbgBackendCombo remoteCheckBox hostLineEdit execLineEdit dbgPathTranslationCheckBox dbgTranslationRemoteEdit dbgTranslationLocalEdit consoleDbgCheckBox consoleDbgEdit debugEnvironReplaceCheckBox debugEnvironEdit debugAutoSaveScriptsCheckBox automaticResetCheckBox dontShowClientExitCheckBox debugThreeStateBreakPoint exceptionBreakCheckBox passiveDbgCheckBox toggled(bool) passiveDbgPortLabel setEnabled(bool) 121 467 107 498 passiveDbgCheckBox toggled(bool) passiveDbgPortSpinBox setEnabled(bool) 219 467 205 498 remoteCheckBox toggled(bool) execLineEdit setEnabled(bool) 294 568 587 630 remoteCheckBox toggled(bool) execLabel setEnabled(bool) 160 568 128 630 remoteCheckBox toggled(bool) hostLabel setEnabled(bool) 147 568 86 599 remoteCheckBox toggled(bool) hostLineEdit setEnabled(bool) 263 568 587 599 selectedInterfaceButton toggled(bool) interfacesCombo setEnabled(bool) 587 107 307 137 passiveDbgCheckBox toggled(bool) label setEnabled(bool) 78 467 410 498 passiveDbgCheckBox toggled(bool) passiveDbgBackendCombo setEnabled(bool) 257 467 484 497 dbgPathTranslationCheckBox toggled(bool) dbgTranslationRemoteEdit setEnabled(bool) 74 700 241 731 dbgPathTranslationCheckBox toggled(bool) textLabel1_18 setEnabled(bool) 54 700 56 731 dbgPathTranslationCheckBox toggled(bool) textLabel2_9 setEnabled(bool) 104 700 89 762 dbgPathTranslationCheckBox toggled(bool) dbgTranslationLocalEdit setEnabled(bool) 273 700 353 762 eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/HelpViewersPage.py0000644000175000001440000000013212261012650026140 xustar000000000000000030 mtime=1388582312.789087089 30 atime=1389081083.606724388 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/HelpViewersPage.py0000644000175000001440000001013712261012650025674 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing the Help Viewers configuration page. """ from PyQt4.QtCore import QDir, QString, pyqtSignature from PyQt4.QtGui import QButtonGroup from KdeQt import KQFileDialog from E4Gui.E4Completers import E4FileCompleter from ConfigurationPageBase import ConfigurationPageBase from Ui_HelpViewersPage import Ui_HelpViewersPage import Preferences import Utilities class HelpViewersPage(ConfigurationPageBase, Ui_HelpViewersPage): """ Class implementing the Help Viewers configuration page. """ def __init__(self): """ Constructor """ ConfigurationPageBase.__init__(self) self.setupUi(self) self.setObjectName("HelpViewersPage") self.helpViewerGroup = QButtonGroup() self.helpViewerGroup.addButton(self.helpBrowserButton) self.helpViewerGroup.addButton(self.qtAssistantButton) self.helpViewerGroup.addButton(self.webBrowserButton) self.helpViewerGroup.addButton(self.customViewerButton) self.customViewerCompleter = E4FileCompleter(self.customViewerEdit) # set initial values hvId = Preferences.getHelp("HelpViewerType") if hvId == 1: self.helpBrowserButton.setChecked(True) elif hvId == 2: self.qtAssistantButton.setChecked(True) elif hvId == 3: self.webBrowserButton.setChecked(True) else: self.customViewerButton.setChecked(True) self.customViewerEdit.setText(\ Preferences.getHelp("CustomViewer")) def save(self): """ Public slot to save the Help Viewers configuration. """ if self.helpBrowserButton.isChecked(): hvId = 1 elif self.qtAssistantButton.isChecked(): hvId = 2 elif self.webBrowserButton.isChecked(): hvId = 3 elif self.customViewerButton.isChecked(): hvId = 4 Preferences.setHelp("HelpViewerType", hvId) Preferences.setHelp("CustomViewer", self.customViewerEdit.text()) @pyqtSignature("") def on_customViewerSelectionButton_clicked(self): """ Private slot to handle the custom viewer selection. """ file = KQFileDialog.getOpenFileName(\ self, self.trUtf8("Select Custom Viewer"), self.customViewerEdit.text(), QString()) if not file.isNull(): self.customViewerEdit.setText(Utilities.toNativeSeparators(file)) @pyqtSignature("") def on_webbrowserButton_clicked(self): """ Private slot to handle the Web browser selection. """ file = KQFileDialog.getOpenFileName(\ self, self.trUtf8("Select Web-Browser"), self.webbrowserEdit.text(), QString()) if not file.isNull(): self.webbrowserEdit.setText(Utilities.toNativeSeparators(file)) @pyqtSignature("") def on_pdfviewerButton_clicked(self): """ Private slot to handle the PDF viewer selection. """ file = KQFileDialog.getOpenFileName(\ self, self.trUtf8("Select PDF-Viewer"), self.pdfviewerEdit.text(), QString()) if not file.isNull(): self.pdfviewerEdit.setText(Utilities.toNativeSeparators(file)) @pyqtSignature("") def on_chmviewerButton_clicked(self): """ Private slot to handle the CHM viewer selection. """ file = KQFileDialog.getOpenFileName(\ self, self.trUtf8("Select CHM-Viewer"), self.chmviewerEdit.text(), QString()) if not file.isNull(): self.chmviewerEdit.setText(Utilities.toNativeSeparators(file)) def create(dlg): """ Module function to create the configuration page. @param dlg reference to the configuration dialog """ page = HelpViewersPage() return page eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/ApplicationPage.py0000644000175000001440000000013212261012650026146 xustar000000000000000030 mtime=1388582312.792087127 30 atime=1389081083.606724388 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/ApplicationPage.py0000644000175000001440000000732512261012650025707 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing the Application configuration page. """ import os from PyQt4.QtCore import QVariant, pyqtSignature from ConfigurationPageBase import ConfigurationPageBase from Ui_ApplicationPage import Ui_ApplicationPage import Preferences class ApplicationPage(ConfigurationPageBase, Ui_ApplicationPage): """ Class implementing the Application configuration page. """ def __init__(self): """ Constructor """ ConfigurationPageBase.__init__(self) self.setupUi(self) self.setObjectName("ApplicationPage") # set initial values self.singleApplicationCheckBox.setChecked(\ Preferences.getUI("SingleApplicationMode")) self.splashScreenCheckBox.setChecked(\ Preferences.getUI("ShowSplash")) openOnStartup = Preferences.getUI("OpenOnStartup") if openOnStartup == 0: self.noOpenRadioButton.setChecked(True) elif openOnStartup == 1: self.lastFileRadioButton.setChecked(True) elif openOnStartup == 2: self.lastProjectRadioButton.setChecked(True) elif openOnStartup == 3: self.lastMultiprojectRadioButton.setChecked(True) elif openOnStartup == 4: self.globalSessionRadioButton.setChecked(True) period = Preferences.getUI("PerformVersionCheck") if period == 0: self.noCheckRadioButton.setChecked(True) elif period == 1: self.alwaysCheckRadioButton.setChecked(True) elif period == 2: self.dailyCheckRadioButton.setChecked(True) elif period == 3: self.weeklyCheckRadioButton.setChecked(True) elif period == 4: self.monthlyCheckRadioButton.setChecked(True) self.systemEmailClientCheckBox.setChecked( Preferences.getUser("UseSystemEmailClient")) self.errorlogCheckBox.setChecked( Preferences.getUI("CheckErrorLog")) def save(self): """ Public slot to save the Application configuration. """ Preferences.setUI("SingleApplicationMode", int(self.singleApplicationCheckBox.isChecked())) Preferences.setUI("ShowSplash", int(self.splashScreenCheckBox.isChecked())) if self.noOpenRadioButton.isChecked(): openOnStartup = 0 elif self.lastFileRadioButton.isChecked(): openOnStartup = 1 elif self.lastProjectRadioButton.isChecked(): openOnStartup = 2 elif self.lastMultiprojectRadioButton.isChecked(): openOnStartup = 3 elif self.globalSessionRadioButton.isChecked(): openOnStartup = 4 Preferences.setUI("OpenOnStartup", openOnStartup) if self.noCheckRadioButton.isChecked(): period = 0 elif self.alwaysCheckRadioButton.isChecked(): period = 1 elif self.dailyCheckRadioButton.isChecked(): period = 2 elif self.weeklyCheckRadioButton.isChecked(): period = 3 elif self.monthlyCheckRadioButton.isChecked(): period = 4 Preferences.setUI("PerformVersionCheck", period) Preferences.setUser("UseSystemEmailClient", int(self.systemEmailClientCheckBox.isChecked())) Preferences.setUI("CheckErrorLog", int(self.errorlogCheckBox.isChecked())) def create(dlg): """ Module function to create the configuration page. @param dlg reference to the configuration dialog """ page = ApplicationPage() return page eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/ConfigurationPageBase.py0000644000175000001440000000013212261012650027305 xustar000000000000000030 mtime=1388582312.794087152 30 atime=1389081083.606724388 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/ConfigurationPageBase.py0000644000175000001440000000575712261012650027055 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing the base class for all configuration pages. """ from PyQt4.QtGui import QWidget, QIcon, QPixmap, QColor from PyQt4.QtCore import QString from KdeQt import KQColorDialog, KQFontDialog class ConfigurationPageBase(QWidget): """ Class implementing the base class for all configuration pages. """ def __init__(self): """ Constructor """ QWidget.__init__(self) def polishPage(self): """ Public slot to perform some polishing actions. """ return def saveState(self): """ Public method to save the current state of the widget. """ return None def setState(self, state): """ Public method to set the state of the widget. @param state state data generated by saveState """ return def initColour(self, colourstr, button, prefMethod): """ Public method to initialize a colour selection button. @param colourstr colour to be set (string) @param button reference to a QButton to show the colour on @param prefMethod preferences method to get the colour @return reference to the created colour (QColor) """ colour = QColor(prefMethod(colourstr)) size = button.size() pm = QPixmap(size.width()/2, size.height()/2) pm.fill(colour) button.setIconSize(pm.size()) button.setIcon(QIcon(pm)) return colour def selectColour(self, button, colourVar): """ Public method used by the colour selection buttons. @param button reference to a QButton to show the colour on @param colourVar reference to the variable containing the colour (QColor) @return selected colour (QColor) """ colour = KQColorDialog.getColor(colourVar) if colour.isValid(): size = button.iconSize() pm = QPixmap(size.width(), size.height()) pm.fill(colour) button.setIcon(QIcon(pm)) else: colour = colourVar return colour def selectFont(self, fontSample, fontVar, showFontInfo = False): """ Public method used by the font selection buttons. @param fontSample reference to the font sample widget (QLineEdit) @param fontVar reference to the variable containing the font (QFont) @param showFontInfo flag indicating to show some font info as the sample (boolean) @return selected font (QFont) """ font, ok = KQFontDialog.getFont(fontVar) if ok: fontSample.setFont(font) if showFontInfo: fontSample.setText( QString("%1 %2").arg(font.family()).arg(font.pointSize())) else: font = fontVar return font eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/EditorAPIsPage.py0000644000175000001440000000013212261012650025646 xustar000000000000000030 mtime=1388582312.798087203 30 atime=1389081083.606724388 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/EditorAPIsPage.py0000644000175000001440000002327412261012650025410 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing the Editor APIs configuration page. """ from PyQt4.QtCore import QDir, QString, QStringList, pyqtSignature, SIGNAL, QFileInfo from KdeQt import KQFileDialog, KQInputDialog, KQMessageBox from KdeQt.KQApplication import e4App from E4Gui.E4Completers import E4FileCompleter from ConfigurationPageBase import ConfigurationPageBase from Ui_EditorAPIsPage import Ui_EditorAPIsPage from QScintilla.APIsManager import APIsManager import QScintilla.Lexers import Preferences import Utilities class EditorAPIsPage(ConfigurationPageBase, Ui_EditorAPIsPage): """ Class implementing the Editor APIs configuration page. """ def __init__(self): """ Constructor """ ConfigurationPageBase.__init__(self) self.setupUi(self) self.setObjectName("EditorAPIsPage") self.prepareApiButton.setText(self.trUtf8("Compile APIs")) self.__apisManager = APIsManager() self.__currentAPI = None self.__inPreparation = False self.apiFileCompleter = E4FileCompleter(self.apiFileEdit) # set initial values self.pluginManager = e4App().getObject("PluginManager") self.apiAutoPrepareCheckBox.setChecked(\ Preferences.getEditor("AutoPrepareAPIs")) self.apis = {} apiLanguages = [''] + QScintilla.Lexers.getSupportedLanguages().keys() apiLanguages.sort() for lang in apiLanguages: if lang != "Guessed": self.apiLanguageComboBox.addItem(lang) self.currentApiLanguage = QString('') self.on_apiLanguageComboBox_activated(self.currentApiLanguage) for lang in apiLanguages[1:]: self.apis[lang] = QStringList(Preferences.getEditorAPI(lang)) def save(self): """ Public slot to save the Editor APIs configuration. """ Preferences.setEditor("AutoPrepareAPIs", int(self.apiAutoPrepareCheckBox.isChecked())) lang = self.apiLanguageComboBox.currentText() self.apis[unicode(lang)] = self.__editorGetApisFromApiList() for lang, apis in self.apis.items(): Preferences.setEditorAPI(lang, apis) @pyqtSignature("QString") def on_apiLanguageComboBox_activated(self, language): """ Private slot to fill the api listbox of the api page. @param language selected API language (QString) """ if self.currentApiLanguage.compare(language) == 0: return self.apis[unicode(self.currentApiLanguage)] = self.__editorGetApisFromApiList() self.currentApiLanguage = QString(language) self.apiList.clear() if language.isEmpty(): self.apiGroup.setEnabled(False) return self.apiGroup.setEnabled(True) for api in self.apis[unicode(self.currentApiLanguage)]: if not api.isEmpty(): self.apiList.addItem(api) self.__currentAPI = self.__apisManager.getAPIs(self.currentApiLanguage) if self.__currentAPI is not None: self.connect(self.__currentAPI, SIGNAL('apiPreparationFinished()'), self.__apiPreparationFinished) self.connect(self.__currentAPI, SIGNAL('apiPreparationCancelled()'), self.__apiPreparationCancelled) self.connect(self.__currentAPI, SIGNAL('apiPreparationStarted()'), self.__apiPreparationStarted) self.addInstalledApiFileButton.setEnabled(\ not self.__currentAPI.installedAPIFiles().isEmpty()) else: self.addInstalledApiFileButton.setEnabled(False) self.addPluginApiFileButton.setEnabled( len(self.pluginManager.getPluginApiFiles(self.currentApiLanguage)) > 0) def __editorGetApisFromApiList(self): """ Private slot to retrieve the api filenames from the list. @return list of api filenames (QStringList) """ apis = QStringList() for row in range(self.apiList.count()): apis.append(self.apiList.item(row).text()) return apis @pyqtSignature("") def on_apiFileButton_clicked(self): """ Private method to select an api file. """ file = KQFileDialog.getOpenFileName(\ self, self.trUtf8("Select API file"), self.apiFileEdit.text(), self.trUtf8("API File (*.api);;All Files (*)")) if not file.isEmpty(): self.apiFileEdit.setText(Utilities.toNativeSeparators(file)) @pyqtSignature("") def on_addApiFileButton_clicked(self): """ Private slot to add the api file displayed to the listbox. """ file = self.apiFileEdit.text() if not file.isEmpty(): self.apiList.addItem(Utilities.toNativeSeparators(file)) self.apiFileEdit.clear() @pyqtSignature("") def on_deleteApiFileButton_clicked(self): """ Private slot to delete the currently selected file of the listbox. """ crow = self.apiList.currentRow() if crow >= 0: itm = self.apiList.takeItem(crow) del itm @pyqtSignature("") def on_addInstalledApiFileButton_clicked(self): """ Private slot to add an API file from the list of installed API files for the selected lexer language. """ installedAPIFiles = self.__currentAPI.installedAPIFiles() if len(installedAPIFiles) > 0: installedAPIFilesPath = QFileInfo(installedAPIFiles[0]).path() installedAPIFilesShort = QStringList() for installedAPIFile in installedAPIFiles: installedAPIFilesShort.append(QFileInfo(installedAPIFile).fileName()) file, ok = KQInputDialog.getItem(\ self, self.trUtf8("Add from installed APIs"), self.trUtf8("Select from the list of installed API files"), installedAPIFilesShort, 0, False) if ok: self.apiList.addItem(Utilities.toNativeSeparators(\ QFileInfo(QDir(installedAPIFilesPath), file).absoluteFilePath())) else: KQMessageBox.warning(self, self.trUtf8("Add from installed APIs"), self.trUtf8("""There are no APIs installed yet.""" """ Selection is not available.""")) self.addInstalledApiFileButton.setEnabled(False) @pyqtSignature("") def on_addPluginApiFileButton_clicked(self): """ Private slot to add an API file from the list of API files installed by plugins for the selected lexer language. """ pluginAPIFiles = self.pluginManager.getPluginApiFiles(self.currentApiLanguage) pluginAPIFilesDict = {} for apiFile in pluginAPIFiles: pluginAPIFilesDict[unicode(QFileInfo(apiFile).fileName())] = apiFile file, ok = KQInputDialog.getItem(\ self, self.trUtf8("Add from Plugin APIs"), self.trUtf8( "Select from the list of API files installed by plugins"), sorted(pluginAPIFilesDict.keys()), 0, False) if ok: self.apiList.addItem(Utilities.toNativeSeparators(\ pluginAPIFilesDict[unicode(file)])) @pyqtSignature("") def on_prepareApiButton_clicked(self): """ Private slot to prepare the API file for the currently selected language. """ if self.__inPreparation: self.__currentAPI and self.__currentAPI.cancelPreparation() else: if self.__currentAPI is not None: self.__currentAPI.prepareAPIs(\ ondemand = True, rawList = QStringList(self.__editorGetApisFromApiList())) def __apiPreparationFinished(self): """ Private method called after the API preparation has finished. """ self.prepareApiProgressBar.reset() self.prepareApiProgressBar.setRange(0, 100) self.prepareApiProgressBar.setValue(0) self.prepareApiButton.setText(self.trUtf8("Compile APIs")) self.__inPreparation = False def __apiPreparationCancelled(self): """ Private slot called after the API preparation has been cancelled. """ self.__apiPreparationFinished() def __apiPreparationStarted(self): """ Private method called after the API preparation has started. """ self.prepareApiProgressBar.setRange(0, 0) self.prepareApiProgressBar.setValue(0) self.prepareApiButton.setText(self.trUtf8("Cancel compilation")) self.__inPreparation = True def saveState(self): """ Public method to save the current state of the widget. @return index of the selected lexer language (integer) """ return self.apiLanguageComboBox.currentIndex() def setState(self, state): """ Public method to set the state of the widget. @param state state data generated by saveState """ self.apiLanguageComboBox.setCurrentIndex(state) self.on_apiLanguageComboBox_activated(self.apiLanguageComboBox.currentText()) def create(dlg): """ Module function to create the configuration page. @param dlg reference to the configuration dialog """ page = EditorAPIsPage() return page eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/EditorKeywordsPage.py0000644000175000001440000000013212261012650026661 xustar000000000000000030 mtime=1388582312.803087267 30 atime=1389081083.606724388 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/EditorKeywordsPage.py0000644000175000001440000001037312261012650026417 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2010 - 2014 Detlev Offenbach # """ Module implementing the editor highlighter keywords configuration page. """ from PyQt4.QtCore import pyqtSignature, QStringList, QString from PyQt4.QtGui import QWidget from ConfigurationPageBase import ConfigurationPageBase from Ui_EditorKeywordsPage import Ui_EditorKeywordsPage import QScintilla.Lexers from QScintilla.Lexers.LexerContainer import LexerContainer import Preferences class EditorKeywordsPage(ConfigurationPageBase, Ui_EditorKeywordsPage): """ Class implementing the editor highlighter keywords configuration page. """ def __init__(self): """ Constructor """ ConfigurationPageBase.__init__(self) self.setupUi(self) self.setObjectName("EditorKeywordsPage") # set initial values self.__keywords = { "": QStringList(["", "", "", "", "", "", "", "", "", ""]) } languages = [''] + QScintilla.Lexers.getSupportedLanguages().keys() languages.sort() for lang in languages: if lang: lex = QScintilla.Lexers.getLexer(lang) if isinstance(lex, LexerContainer): continue keywords = Preferences.getEditorKeywords(lang)[:] if keywords.isEmpty(): keywords = QStringList("") for kwSet in range(1, 10): kw = lex.keywords(kwSet) if kw is None: kw = "" keywords.append(kw) self.__keywords[lang] = keywords self.languageCombo.addItem(lang) self.currentLanguage = QString() self.currentSet = 1 self.on_languageCombo_activated(self.currentLanguage) def save(self): """ Public slot to save the editor highlighter keywords configuration. """ lang = unicode(self.languageCombo.currentText()) kwSet = self.setSpinBox.value() self.__keywords[lang][kwSet] = self.keywordsEdit.toPlainText() for lang, keywords in self.__keywords.items(): Preferences.setEditorKeywords(lang, keywords) @pyqtSignature("QString") def on_languageCombo_activated(self, language): """ Private slot to fill the keywords edit. @param language selected language (QString) """ if self.currentLanguage == language: return if self.setSpinBox.value() == 1: self.on_setSpinBox_valueChanged(1) first, last = 10, 0 for kwSet in range(1, 10): if not self.__keywords[unicode(language)][kwSet].isEmpty(): first = min(first, kwSet) last = max(last, kwSet) if language in ["Python", "Python2", "Python3"] and last < 2: last = 2 # support for keyword set 2 as of QScintilla 2.6.0 self.setSpinBox.setEnabled((not language.isEmpty()) and first < 10) self.keywordsEdit.setEnabled((not language.isEmpty()) and first < 10) if first < 10: self.setSpinBox.setMinimum(first) self.setSpinBox.setMaximum(last) self.setSpinBox.setValue(first) else: self.setSpinBox.setMinimum(0) self.setSpinBox.setMaximum(0) self.setSpinBox.setValue(0) @pyqtSignature("int") def on_setSpinBox_valueChanged(self, kwSet): """ Private slot to fill the keywords edit. @param kwSet number of the selected keyword set (integer) """ language = self.languageCombo.currentText() if self.currentLanguage == language and self.currentSet == kwSet: return self.__keywords[unicode(self.currentLanguage)][self.currentSet] = \ self.keywordsEdit.toPlainText() self.currentLanguage = language self.currentSet = kwSet self.keywordsEdit.setPlainText(self.__keywords[unicode(language)][kwSet]) def create(dlg): """ Module function to create the configuration page. @param dlg reference to the configuration dialog """ page = EditorKeywordsPage() return page eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/IconsPreviewDialog.py0000644000175000001440000000013212261012650026643 xustar000000000000000030 mtime=1388582312.805087292 30 atime=1389081083.607724388 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/IconsPreviewDialog.py0000644000175000001440000000172712261012650026404 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2004 - 2014 Detlev Offenbach # """ Module implementing a dialog to preview the contents of an icon directory. """ import os.path from PyQt4.QtGui import QListWidgetItem, QDialog, QIcon from PyQt4.QtCore import QDir, QStringList from Ui_IconsPreviewDialog import Ui_IconsPreviewDialog class IconsPreviewDialog(QDialog, Ui_IconsPreviewDialog): """ Class implementing a dialog to preview the contents of an icon directory. """ def __init__(self, parent, dirName): """ Constructor @param parent parent widget (QWidget) @param dirName name of directory to show """ QDialog.__init__(self, parent) self.setupUi(self) dir = QDir(dirName) for icon in dir.entryList(QStringList() << "*.png"): QListWidgetItem(QIcon(os.path.join(unicode(dirName), unicode(icon))), icon, self.iconView) eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/PrinterPage.ui0000644000175000001440000000007411072705635025333 xustar000000000000000030 atime=1389081083.607724388 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/PrinterPage.ui0000644000175000001440000002162211072705635025063 0ustar00detlevusers00000000000000 PrinterPage 0 0 446 568 <b>Configure printer settings</b> QFrame::HLine QFrame::Sunken Qt::Horizontal QFrame::NoFrame 0 Colour Gray Scale QFrame::NoFrame 6 0 First Page First Last Page First Printername: Magnification: Qt::NoFocus Header Font Qt::AlignHCenter true Press to select the font for the page headers Header Font -10 10 -3 Colour Mode: Qt::AlignTop Page Order: Qt::AlignTop Qt::Horizontal 251 20 Margins Enter the top margin in cm. cm 1 9.900000000000000 0.500000000000000 Enter the left margin in cm. cm 1 9.900000000000000 0.500000000000000 Enter the right margin in cm. cm 1 9.900000000000000 0.500000000000000 Enter the bottom margin in cm. cm 1 9.900000000000000 0.500000000000000 Qt::Horizontal 40 20 Qt::Vertical 428 61 printerNameEdit printerColorButton printerGrayscaleButton printFirstPageFirstButton printFirstPageLastButton printMagnificationSpinBox printheaderFontButton topMarginSpinBox leftMarginSpinBox rightMarginSpinBox bottomMarginSpinBox eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/ShellPage.py0000644000175000001440000000013212261012650024752 xustar000000000000000030 mtime=1388582312.825087546 30 atime=1389081083.620724387 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/ShellPage.py0000644000175000001440000000732012261012650024506 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing the Shell configuration page. """ from PyQt4.QtCore import pyqtSignature from ConfigurationPageBase import ConfigurationPageBase from Ui_ShellPage import Ui_ShellPage import Preferences class ShellPage(ConfigurationPageBase, Ui_ShellPage): """ Class implementing the Shell configuration page. """ def __init__(self): """ Constructor """ ConfigurationPageBase.__init__(self) self.setupUi(self) self.setObjectName("ShellPage") # set initial values self.shellLinenoCheckBox.setChecked( Preferences.getShell("LinenoMargin")) self.shellWordWrapCheckBox.setChecked( Preferences.getShell("WrapEnabled")) self.shellACEnabledCheckBox.setChecked( Preferences.getShell("AutoCompletionEnabled")) self.shellCTEnabledCheckBox.setChecked( Preferences.getShell("CallTipsEnabled")) self.shellSyntaxHighlightingCheckBox.setChecked( Preferences.getShell("SyntaxHighlightingEnabled")) self.shellHistorySpinBox.setValue( Preferences.getShell("MaxHistoryEntries")) self.stdOutErrCheckBox.setChecked( Preferences.getShell("ShowStdOutErr")) self.monospacedFont = Preferences.getShell("MonospacedFont") self.monospacedFontSample.setFont(self.monospacedFont) self.monospacedCheckBox.setChecked(\ Preferences.getShell("UseMonospacedFont")) self.marginsFont = Preferences.getShell("MarginsFont") self.marginsFontSample.setFont(self.marginsFont) def save(self): """ Public slot to save the Shell configuration. """ Preferences.setShell("LinenoMargin", int(self.shellLinenoCheckBox.isChecked())) Preferences.setShell("WrapEnabled", int(self.shellWordWrapCheckBox.isChecked())) Preferences.setShell("AutoCompletionEnabled", int(self.shellACEnabledCheckBox.isChecked())) Preferences.setShell("CallTipsEnabled", int(self.shellCTEnabledCheckBox.isChecked())) Preferences.setShell("SyntaxHighlightingEnabled", int(self.shellSyntaxHighlightingCheckBox.isChecked())) Preferences.setShell("MaxHistoryEntries", self.shellHistorySpinBox.value()) Preferences.setShell("ShowStdOutErr", int(self.stdOutErrCheckBox.isChecked())) Preferences.setShell("MonospacedFont", self.monospacedFont) Preferences.setShell("UseMonospacedFont", int(self.monospacedCheckBox.isChecked())) Preferences.setShell("MarginsFont", self.marginsFont) @pyqtSignature("") def on_monospacedFontButton_clicked(self): """ Private method used to select the font to be used as the monospaced font. """ self.monospacedFont = \ self.selectFont(self.monospacedFontSample, self.monospacedFont) @pyqtSignature("") def on_linenumbersFontButton_clicked(self): """ Private method used to select the font for the editor margins. """ self.marginsFont = self.selectFont(self.marginsFontSample, self.marginsFont) def polishPage(self): """ Public slot to perform some polishing actions. """ self.monospacedFontSample.setFont(self.monospacedFont) self.marginsFontSample.setFont(self.marginsFont) def create(dlg): """ Module function to create the configuration page. @param dlg reference to the configuration dialog """ page = ShellPage() return page eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/IconsPage.ui0000644000175000001440000000007411072705635024763 xustar000000000000000030 atime=1389081083.631724387 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/IconsPage.ui0000644000175000001440000001146411072705635024516 0ustar00detlevusers00000000000000 IconsPage 0 0 539 371 <b>Configure icon directories</b> QFrame::HLine QFrame::Sunken Qt::Horizontal <font color="#FF0000"><b>Note:</b> These settings are activated at the next startup of the application.</font> false Press to delete the selected directory from the list Delete false Press to add the entered directory to the list Add Enter a directory to be added Press to select an icon directory via a selection dialog ... false Show Qt::Vertical QSizePolicy::Expanding 20 209 false Up false Down Qt::Vertical QSizePolicy::Expanding 20 170 List of icon directories true iconDirectoryList upButton downButton deleteIconDirectoryButton iconDirectoryEdit iconDirectoryButton showIconsButton addIconDirectoryButton eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/__init__.py0000644000175000001440000000013212261012650024645 xustar000000000000000030 mtime=1388582312.830087609 30 atime=1389081083.631724387 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/__init__.py0000644000175000001440000000026012261012650024375 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Package implementing the various pages of the configuration dialog. """ eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/VcsPage.py0000644000175000001440000000013212261012650024436 xustar000000000000000030 mtime=1388582312.833087647 30 atime=1389081083.631724387 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/VcsPage.py0000644000175000001440000001313312261012650024171 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing the VCS configuration page. """ from PyQt4.QtCore import pyqtSignature from ConfigurationPageBase import ConfigurationPageBase from Ui_VcsPage import Ui_VcsPage import Preferences class VcsPage(ConfigurationPageBase, Ui_VcsPage): """ Class implementing the VCS configuration page. """ def __init__(self): """ Constructor """ ConfigurationPageBase.__init__(self) self.setupUi(self) self.setObjectName("VcsPage") self.projectBrowserColours = {} # set initial values self.vcsAutoCloseCheckBox.setChecked(Preferences.getVCS("AutoClose")) self.vcsAutoSaveCheckBox.setChecked(Preferences.getVCS("AutoSaveFiles")) self.vcsAutoSaveProjectCheckBox.setChecked( Preferences.getVCS("AutoSaveProject")) self.vcsStatusMonitorIntervalSpinBox.setValue( Preferences.getVCS("StatusMonitorInterval")) self.vcsMonitorLocalStatusCheckBox.setChecked( Preferences.getVCS("MonitorLocalStatus")) self.autoUpdateCheckBox.setChecked( Preferences.getVCS("AutoUpdate")) self.projectBrowserColours["VcsAdded"] = \ self.initColour("VcsAdded", self.pbVcsAddedButton, Preferences.getProjectBrowserColour) self.projectBrowserColours["VcsConflict"] = \ self.initColour("VcsConflict", self.pbVcsConflictButton, Preferences.getProjectBrowserColour) self.projectBrowserColours["VcsModified"] = \ self.initColour("VcsModified", self.pbVcsModifiedButton, Preferences.getProjectBrowserColour) self.projectBrowserColours["VcsReplaced"] = \ self.initColour("VcsReplaced", self.pbVcsReplacedButton, Preferences.getProjectBrowserColour) self.projectBrowserColours["VcsUpdate"] = \ self.initColour("VcsUpdate", self.pbVcsUpdateButton, Preferences.getProjectBrowserColour) self.projectBrowserColours["VcsConflict"] = \ self.initColour("VcsConflict", self.pbVcsConflictButton, Preferences.getProjectBrowserColour) self.projectBrowserColours["VcsRemoved"] = \ self.initColour("VcsRemoved", self.pbVcsRemovedButton, Preferences.getProjectBrowserColour) def save(self): """ Public slot to save the VCS configuration. """ Preferences.setVCS("AutoClose", int(self.vcsAutoCloseCheckBox.isChecked())) Preferences.setVCS("AutoSaveFiles", int(self.vcsAutoSaveCheckBox.isChecked())) Preferences.setVCS("AutoSaveProject", int(self.vcsAutoSaveProjectCheckBox.isChecked())) Preferences.setVCS("StatusMonitorInterval", self.vcsStatusMonitorIntervalSpinBox.value()) Preferences.setVCS("MonitorLocalStatus", int(self.vcsMonitorLocalStatusCheckBox.isChecked())) Preferences.setVCS("AutoUpdate", int(self.autoUpdateCheckBox.isChecked())) for key in self.projectBrowserColours.keys(): Preferences.setProjectBrowserColour(key, self.projectBrowserColours[key]) @pyqtSignature("") def on_pbVcsAddedButton_clicked(self): """ Private slot to set the background colour for entries with VCS status "added". """ self.projectBrowserColours["VcsAdded"] = \ self.selectColour(self.pbVcsAddedButton, self.projectBrowserColours["VcsAdded"]) @pyqtSignature("") def on_pbVcsConflictButton_clicked(self): """ Private slot to set the background colour for entries with VCS status "conflict". """ self.projectBrowserColours["VcsConflict"] = \ self.selectColour(self.pbVcsConflictButton, self.projectBrowserColours["VcsConflict"]) @pyqtSignature("") def on_pbVcsModifiedButton_clicked(self): """ Private slot to set the background colour for entries with VCS status "modified". """ self.projectBrowserColours["VcsModified"] = \ self.selectColour(self.pbVcsModifiedButton, self.projectBrowserColours["VcsModified"]) @pyqtSignature("") def on_pbVcsReplacedButton_clicked(self): """ Private slot to set the background colour for entries with VCS status "replaced". """ self.projectBrowserColours["VcsReplaced"] = \ self.selectColour(self.pbVcsReplacedButton, self.projectBrowserColours["VcsReplaced"]) @pyqtSignature("") def on_pbVcsRemovedButton_clicked(self): """ Private slot to set the background colour for entries with VCS status "removed". """ self.projectBrowserColours["VcsRemoved"] = \ self.selectColour(self.pbVcsRemovedButton, self.projectBrowserColours["VcsRemoved"]) @pyqtSignature("") def on_pbVcsUpdateButton_clicked(self): """ Private slot to set the background colour for entries with VCS status "needs update". """ self.projectBrowserColours["VcsUpdate"] = \ self.selectColour(self.pbVcsUpdateButton, self.projectBrowserColours["VcsUpdate"]) def create(dlg): """ Module function to create the configuration page. @param dlg reference to the configuration dialog """ page = VcsPage() return page eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/DebuggerPythonPage.py0000644000175000001440000000013212261012650026631 xustar000000000000000030 mtime=1388582312.835087673 30 atime=1389081083.631724387 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/DebuggerPythonPage.py0000644000175000001440000000770412261012650026373 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing the Debugger Python configuration page. """ from PyQt4.QtCore import QDir, QString, pyqtSignature from KdeQt import KQFileDialog from E4Gui.E4Completers import E4FileCompleter from ConfigurationPageBase import ConfigurationPageBase from Ui_DebuggerPythonPage import Ui_DebuggerPythonPage import Preferences import Utilities class DebuggerPythonPage(ConfigurationPageBase, Ui_DebuggerPythonPage): """ Class implementing the Debugger Python configuration page. """ def __init__(self): """ Constructor """ ConfigurationPageBase.__init__(self) self.setupUi(self) self.setObjectName("DebuggerPythonPage") self.interpreterCompleter = E4FileCompleter(self.interpreterEdit) self.debugClientCompleter = E4FileCompleter(self.debugClientEdit) # set initial values self.customPyCheckBox.setChecked(\ Preferences.getDebugger("CustomPythonInterpreter")) self.interpreterEdit.setText(\ Preferences.getDebugger("PythonInterpreter")) dct = Preferences.getDebugger("DebugClientType") if dct == "standard": self.standardButton.setChecked(True) elif dct == "threaded": self.threadedButton.setChecked(True) else: self.customButton.setChecked(True) self.debugClientEdit.setText(\ Preferences.getDebugger("DebugClient")) self.pyRedirectCheckBox.setChecked(\ Preferences.getDebugger("PythonRedirect")) self.pyNoEncodingCheckBox.setChecked(\ Preferences.getDebugger("PythonNoEncoding")) self.sourceExtensionsEdit.setText( Preferences.getDebugger("PythonExtensions")) def save(self): """ Public slot to save the Debugger Python configuration. """ Preferences.setDebugger("CustomPythonInterpreter", int(self.customPyCheckBox.isChecked())) Preferences.setDebugger("PythonInterpreter", self.interpreterEdit.text()) if self.standardButton.isChecked(): dct = "standard" elif self.threadedButton.isChecked(): dct = "threaded" else: dct = "custom" Preferences.setDebugger("DebugClientType", dct) Preferences.setDebugger("DebugClient", self.debugClientEdit.text()) Preferences.setDebugger("PythonRedirect", int(self.pyRedirectCheckBox.isChecked())) Preferences.setDebugger("PythonNoEncoding", int(self.pyNoEncodingCheckBox.isChecked())) Preferences.setDebugger("PythonExtensions", self.sourceExtensionsEdit.text()) @pyqtSignature("") def on_interpreterButton_clicked(self): """ Private slot to handle the Python interpreter selection. """ file = KQFileDialog.getOpenFileName(\ self, self.trUtf8("Select Python interpreter for Debug Client"), self.interpreterEdit.text(), QString()) if not file.isEmpty(): self.interpreterEdit.setText(\ Utilities.toNativeSeparators(file)) @pyqtSignature("") def on_debugClientButton_clicked(self): """ Private slot to handle the Debug Client selection. """ file = KQFileDialog.getOpenFileName(\ None, self.trUtf8("Select Debug Client"), self.debugClientEdit.text(), self.trUtf8("Python Files (*.py)")) if not file.isEmpty(): self.debugClientEdit.setText(\ Utilities.toNativeSeparators(file)) def create(dlg): """ Module function to create the configuration page. @param dlg reference to the configuration dialog """ page = DebuggerPythonPage() return page eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/EditorCalltipsQScintillaPage.ui0000644000175000001440000000007411072705635030616 xustar000000000000000030 atime=1389081083.631724387 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/EditorCalltipsQScintillaPage.ui0000644000175000001440000000617411072705635030353 0ustar00detlevusers00000000000000 EditorCalltipsQScintillaPage 0 0 406 369 <b>Configure QScintilla Calltips</b> QFrame::HLine QFrame::Sunken Qt::Horizontal Context display options Select to display calltips without a context Don't show context information Select to display calltips with a context only if the user hasn't already implicitly identified the context using autocompletion Show context information, if no prior autocompletion Select to display calltips with a context Show context information Qt::Horizontal A context is any scope (e.g. a C++ namespace or a Python module) prior to the function/method name. true Qt::Vertical 388 20 ctNoContextButton ctNoAutoCompletionButton ctContextButton eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/TemplatesPage.ui0000644000175000001440000000007411072705635025646 xustar000000000000000030 atime=1389081083.637724386 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/TemplatesPage.ui0000644000175000001440000001203111072705635025370 0ustar00detlevusers00000000000000 TemplatesPage 0 0 532 374 <b>Configure Templates</b> QFrame::HLine QFrame::Sunken Qt::Horizontal Groups Select, if groups having entries should be opened automatically Expand groups automatically Variables Separator: 0 0 Enter the character that encloses variables 1 Qt::Horizontal QSizePolicy::Expanding 40 20 Input method for variables Select, if a new dialog should be opened for every template variable One dialog per template variable Select, if only one dialog for all template variables should be shown One dialog for all template variables Tooltips Select, if the template text should be shown in a tooltip Show template text in tooltip Qt::Vertical 20 40 templatesAutoOpenGroupsCheckBox templatesSeparatorCharEdit templatesMultiDialogButton templatesSingleDialogButton templatesToolTipCheckBox eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/TemplatesPage.py0000644000175000001440000000013212261012650025641 xustar000000000000000030 mtime=1388582312.837087698 30 atime=1389081083.637724386 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/TemplatesPage.py0000644000175000001440000000365012261012650025377 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing the Templates configuration page. """ from ConfigurationPageBase import ConfigurationPageBase from Ui_TemplatesPage import Ui_TemplatesPage import Preferences class TemplatesPage(ConfigurationPageBase, Ui_TemplatesPage): """ Class implementing the Templates configuration page. """ def __init__(self): """ Constructor """ ConfigurationPageBase.__init__(self) self.setupUi(self) self.setObjectName("TemplatesPage") # set initial values self.templatesAutoOpenGroupsCheckBox.setChecked(\ Preferences.getTemplates("AutoOpenGroups")) self.templatesSeparatorCharEdit.setText(\ Preferences.getTemplates("SeparatorChar")) if Preferences.getTemplates("SingleDialog"): self.templatesSingleDialogButton.setChecked(True) else: self.templatesMultiDialogButton.setChecked(True) self.templatesToolTipCheckBox.setChecked(\ Preferences.getTemplates("ShowTooltip")) def save(self): """ Public slot to save the Templates configuration. """ Preferences.setTemplates("AutoOpenGroups", int(self.templatesAutoOpenGroupsCheckBox.isChecked())) sepChar = self.templatesSeparatorCharEdit.text() if not sepChar.isEmpty(): Preferences.setTemplates("SeparatorChar", unicode(sepChar)) Preferences.setTemplates("SingleDialog", int(self.templatesSingleDialogButton.isChecked())) Preferences.setTemplates("ShowTooltip", int(self.templatesToolTipCheckBox.isChecked())) def create(dlg): """ Module function to create the configuration page. @param dlg reference to the configuration dialog """ page = TemplatesPage() return page eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/EmailPage.ui0000644000175000001440000000007411563266473024746 xustar000000000000000030 atime=1389081083.637724386 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/EmailPage.ui0000644000175000001440000001726211563266473024503 0ustar00detlevusers00000000000000 EmailPage 0 0 422 512 <b>Configure Email</b> QFrame::HLine QFrame::Sunken Qt::Horizontal Outgoing mail server (SMTP): Enter the address of your mail server Outgoing mail server port: Enter the port of the mail server Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 1 65535 25 Qt::Horizontal 118 20 Email address: Enter your email address Signature: Qt::AlignTop Enter your email signature false Select to use TLS Use TLS Select to authenticatate against the mail server Mail server needs authentication false Username: false Enter your mail server username false Password: false Enter your password for accessing the mail server QLineEdit::Password Press to test the login data Test Login Qt::Vertical 20 40 mailServerEdit portSpin emailEdit signatureEdit useTlsCheckBox mailAuthenticationCheckBox mailUserEdit mailPasswordEdit mailAuthenticationCheckBox toggled(bool) textLabel1_15 setEnabled(bool) 35 292 44 316 mailAuthenticationCheckBox toggled(bool) textLabel2_7 setEnabled(bool) 70 289 11 343 mailAuthenticationCheckBox toggled(bool) mailUserEdit setEnabled(bool) 101 288 122 316 mailAuthenticationCheckBox toggled(bool) mailPasswordEdit setEnabled(bool) 172 290 172 346 eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/GraphicsPage.ui0000644000175000001440000000007411072705635025450 xustar000000000000000030 atime=1389081083.638724387 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/GraphicsPage.ui0000644000175000001440000000375411072705635025206 0ustar00detlevusers00000000000000 GraphicsPage 0 0 440 334 <b>Configure graphics settings</b> QFrame::HLine QFrame::Sunken Qt::Horizontal Press to select the font for the graphic items Graphics Font Qt::NoFocus Graphics Font Qt::AlignHCenter true Qt::Vertical 20 40 graphicsFontButton eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/EditorAutocompletionPage.ui0000644000175000001440000000013212034017357030050 xustar000000000000000030 mtime=1349525231.932420691 30 atime=1389081083.638724387 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/EditorAutocompletionPage.ui0000644000175000001440000001203112034017357027577 0ustar00detlevusers00000000000000 EditorAutocompletionPage 0 0 506 294 <b>Configure Autocompletion</b> QFrame::HLine QFrame::Sunken Qt::Horizontal Select this to enable autocompletion <b>Autocompletion Enabled</b><p>Select to enable autocompletion. In order to get autocompletion from alternative autocompletion providers (if installed), these have to be enabled on their respective configuration page. Only one alternative provider might be enabled.</p> Autocompletion Enabled false General Select this to have case sensitive auto-completion lists Case sensitive Select this, if the word to the right should be replaced by the selected entry Replace word Threshold: Move to set the threshold for display of an autocompletion list 10 2 Qt::Horizontal 1 Displays the selected autocompletion threshold 2 QLCDNumber::Flat 2.000000000000000 Qt::Vertical 456 51 acEnabledCheckBox acThresholdSlider valueChanged(int) lCDNumber4 display(int) 304 114 465 116 acEnabledCheckBox toggled(bool) groupBox setEnabled(bool) 103 43 114 64 eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/TasksPage.ui0000644000175000001440000000007411647604074025000 xustar000000000000000030 atime=1389081083.638724387 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/TasksPage.ui0000644000175000001440000001466411647604074024540 0ustar00detlevusers00000000000000 TasksPage 0 0 586 433 <b>Configure Tasks</b> QFrame::HLine QFrame::Sunken Qt::Horizontal Tasks Markers Enter the tasks markers separated by a space character. Standard tasks: Enter the tasks markers separated by a space character. Bugfix tasks: Tasks Colours 100 0 Select the background colour for project tasks. 100 0 Select the background colour for global tasks. 100 0 Select the colour for bugfix tasks. 100 0 Select the colour for standard tasks. Bugfix tasks foreground colour: Global tasks background colour: Project tasks background colour: Standard tasks foreground colour: Qt::Horizontal 40 20 Tasks Handling Select to clear global file tasks when the file is closed Clear global file task when file is closed Qt::Vertical 20 40 tasksMarkerEdit tasksMarkerBugfixEdit tasksColourButton tasksBugfixColourButton tasksBgColourButton tasksProjectBgColourButton eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/QtPage.ui0000644000175000001440000000007411246217665024300 xustar000000000000000030 atime=1389081083.638724387 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/QtPage.ui0000644000175000001440000001404711246217665024033 0ustar00detlevusers00000000000000 QtPage 0 0 642 614 <b>Configure Qt</b> QFrame::HLine QFrame::Sunken Qt::Horizontal Qt4 Directory <font color="#FF0000"><b>Note:</b> This setting is activated at the next startup of the application.</font> Enter the path of the Qt4 directory. Press to select the Qt4 directory via a directory selection dialog ... Qt4 Translations Directory Press to select the Qt4 translations directory via a directory selection dialog ... Enter the path of the Qt4 translations directory. <font color="#FF0000"><b>Note:</b> This setting is activated at the next startup of the application.</font> <b>Note:</b> Leave this entry empty to use the QT4TRANSLATIONSDIR environment variable or the path compiled into the Qt4 library. true Qt Tools The tool executable is composed of the prefix, the tool name and the postfix. For win, the extension is added automatically. true Qt4-Prefix: Enter the prefix for the Qt4 tools name Qt4-Postfix: Enter the postfix for the Qt4 tools name 1 0 This gives an example of the complete tool name designer Qt::Vertical 496 20 qt4Edit qt4Button qt4TransEdit qt4TransButton qt4PrefixEdit qt4PostfixEdit eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/ProjectPage.ui0000644000175000001440000000007411072705635025316 xustar000000000000000030 atime=1389081083.638724387 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/ProjectPage.ui0000644000175000001440000002254511072705635025053 0ustar00detlevusers00000000000000 ProjectPage 0 0 602 624 <b>Configure project settings</b> QFrame::HLine QFrame::Sunken Qt::Horizontal Compression Select, if the project file of a new project should be compressed Compress project file upon creation XML Select, if a timestamp should be written to all project related XML files Include timestamp in project related XML files Search new files Search for new files recursively Select whether a search for new files on a project open should be performed. Search for new files on open false Select whether the found files should be included automatically. Automatically include found files Debugger Properties Select, whether a project debugger properties file shall be read on opening the project Load debugger properties upon opening Select, whether a project debugger properties file shall be written on closing the project Save debugger properties upon closing Sessions Select, whether a project session file shall be read on opening the project Load session upon opening Select, whether a project session file shall be written on closing the project Save session upon closing Select whether all breakpoints should be saved to the session file. Save all breakpoints Automatically compile Select, if changed forms should be compiled automatically upon a run action changed forms Select, if changed resources should be compiled automatically upon a run action changed resources Recent Projects Number of recent projects: Enter the number of recent projects to remember Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 5 50 Qt::Horizontal 40 20 Qt::Vertical 584 20 projectCompressedProjectFilesCheckBox projectTimestampCheckBox projectSearchNewFilesRecursiveCheckBox projectSearchNewFilesCheckBox projectAutoIncludeNewFilesCheckBox projectLoadSessionCheckBox projectSaveSessionCheckBox projectSessionAllBpCheckBox projectLoadDebugPropertiesCheckBox projectSaveDebugPropertiesCheckBox projectAutoCompileFormsCheckBox projectAutoCompileResourcesCheckBox projectRecentSpinBox projectSearchNewFilesCheckBox toggled(bool) projectAutoIncludeNewFilesCheckBox setEnabled(bool) 50 133 73 190 eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/EditorPropertiesPage.ui0000644000175000001440000000007411661772706027222 xustar000000000000000030 atime=1389081083.639724387 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/EditorPropertiesPage.ui0000644000175000001440000010043011661772706026745 0ustar00detlevusers00000000000000 EditorPropertiesPage 0 0 558 2001 <b>Configure lexer properties</b> QFrame::HLine QFrame::Sunken Qt::Horizontal All Lexers Properties Select to include trailing blank lines in a fold block Fold compact (except CMake, Python) Bash Lexer Properties Select whether folding of comments shall be possible Fold comments C++ , C# , IDL, Java and JavaScript Lexer Properties Select whether folding of comments shall be possible Fold comments Select whether folding at else statement should be possible Fold at else Select whether folding of preprocessor directives shall be possible Fold preprocessor directives Select, whether the line containing the opening brace should be indented Indent opening brace Select, whether the line containing the closing brace should be indented Indent closing brace Select to use case insensitive keywords Case insensitive keywords (C/C++ only) Select to allow '$' characters in identifier names Allow '$' in identifier names Select to style preprocessor lines Style preprocessor lines Select to highlight triple quoted strings Highlight triple quoted strings CMake Lexer Properties Select whether folding at else statement should be possible Fold at else CSS Lexer Properties Select whether folding of comments shall be possible Fold comments D Lexer Properties Select, whether the line containing the closing brace should be indented Indent closing brace Select, whether the line containing the opening brace should be indented Indent opening brace Select whether folding at else statement should be possible Fold at else Select whether folding of comments shall be possible Fold comments HTML Lexer Properties Select whether folding of preprocessor directives shall be possible Fold preprocessor directives Select to enable folding of script comments Fold script comments Select to enable folding of script heredocs Fold script heredocs Select whether HTML tags should be case sensitive Case sensitive tags Select to enable support for Django templates Enable Django templates Select to enable support for Mako templates Enable Mako templates XML Lexer Properties Select to enable styling of scripts Style scripts Pascal Lexer Properties Select whether folding of comments shall be possible Fold comments Select whether folding of preprocessor directives shall be possible Fold preprocessor directives Select to enable smart highlighting of keywords Smart Highlighting Perl Lexer Properties Select whether folding of comments shall be possible Fold comments Select to enable folding of Perl packages Fold packages Select to enable folding of Perl POD blocks Fold POD blocks Select whether folding at else statement should be possible Fold at else PostScript Lexer Properties Select whether folding at else statement should be possible Fold at else Select to mark tokens Mark Tokens PostScript Level: Select the PostScript level Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 1 9 3 Qt::Horizontal 40 20 Povray Lexer Properties Select whether folding of directives shall be possible Fold directives Select whether folding of comments shall be possible Fold comments Properties Lexer Properties Select to allow initial spaces in a line Allow initial spaces Python Lexer Properties Select whether folding of comments shall be possible Fold comments Select whether folding of strings shall be possible Fold strings Select whether folding of triple quoted strings shall be possible Fold triple quoted strings Select whether bad indentation shall be highlighted Highlight bad indentation Select to highlight sub-identifiers defined in keyword set 2 Highlight sub-identifiers Select whether text should be autoindented after a ':' Auto indentation after ':' Select to allow strings to span newline characters Strings may span newline characters Select to allow Python v2 unicode string literals (e.g. u"utf8") Allow v2 unicode string literals Select to allow Python v3 binary and octal literals (e.g. 0b1011, 0o712) Allow v3 binary and octal literals Select to allow Python v3 bytes string literals (e.g. b"bytes") Allow v3 bytes string literals Ruby Lexer Properties Select whether folding of comments shall be possible Fold comments SQL Lexer Properties Select whether folding of comments shall be possible Fold comments Select whether folding at else statement should be possible Fold at else Select whether only BEGIN blocks can be folded Only BEGIN blocks can be folded Select to enable Backslash Escapes Backslash Escapes Select if words may contain dots Words may contain dots Select to allow '#' as a comment character Allow '#' as comment character Select to enable quoted identifiers Enable quoted identifiers TCL Lexer Properties Select whether folding of comments shall be possible Fold comments TeX Lexer Properties Select whether folding of comments shall be possible Fold comments Select to treat comments as TeX source Treat comments as TeX source Select to treat \if<unknown> as a command Treat \if<unknown> as command VHDL Lexer Properties Select whether folding of blocks at a parenthesis shall be possible Fold at parenthesis Select whether folding of begin blocks shall be possible Fold at begin Select whether folding at else statement should be possible Fold at else Select whether folding of comments shall be possible Fold comments YAML Lexer Properties Select whether folding of comments shall be possible Fold comments Qt::Vertical 467 21 allFoldCompactCheckBox foldBashCommentCheckBox foldCppCommentCheckBox foldCppAtElseCheckBox foldCppPreprocessorCheckBox cppIndentOpeningBraceCheckBox cppIndentClosingBraceCheckBox cppCaseInsensitiveCheckBox cppDollarAllowedCheckBox cppStylePreprocessorCheckBox cppHighlightTripleQuotedCheckBox cmakeFoldAtElseCheckBox foldCssCommentCheckBox foldDCommentCheckBox foldDAtElseCheckBox dIndentOpeningBraceCheckBox dIndentClosingBraceCheckBox foldHtmlPreprocessorCheckBox foldHtmlScriptCommentsCheckBox foldHtmlScriptHereDocsCheckBox htmlCaseSensitiveTagsCheckBox htmlDjangoCheckBox htmlMakoCheckBox xmlSyleScriptsCheckBox foldPascalCommentCheckBox foldPascalPreprocessorCheckBox pascalSmartHighlightingCheckBox foldPerlCommentCheckBox foldPerlPackagesCheckBox foldPerlPODBlocksCheckBox foldPerlAtElseCheckBox psFoldAtElseCheckBox psMarkTokensCheckBox psLevelSpinBox foldPovrayCommentCheckBox foldPovrayDirectivesCheckBox propertiesInitialSpacesCheckBox foldPythonCommentCheckBox foldPythonStringCheckBox foldPythonQuotesCheckBox pythonBadIndentationCheckBox pythonHighlightSubidentifierCheckBox pythonAutoindentCheckBox pythonStringsOverNewlineCheckBox pythonV2UnicodeAllowedCheckBox pythonV3BinaryAllowedCheckBox pythonV3BytesAllowedCheckBox foldRubyCommentCheckBox foldSqlCommentCheckBox sqlFoldAtElseCheckBox sqlFoldOnlyBeginCheckBox sqlBackslashEscapesCheckBox sqlDottedWordsCheckBox sqlHashCommentsCheckBox sqlQuotedIdentifiersCheckBox foldTclCommentCheckBox foldTexCommentCheckBox texProcessCommentsCheckBox texProcessIfCheckBox vhdlFoldCommentCheckBox vhdlFoldAtElseCheckBox vhdlFoldAtBeginCheckBox vhdlFoldAtParenthesisCheckBox foldYamlCommentCheckBox eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/DebuggerPython3Page.py0000644000175000001440000000013212261012650026714 xustar000000000000000030 mtime=1388582312.857087952 30 atime=1389081083.639724387 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/DebuggerPython3Page.py0000644000175000001440000000740012261012650026447 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing the Debugger Python3 configuration page. """ from PyQt4.QtCore import QDir, QString, pyqtSignature from KdeQt import KQFileDialog from E4Gui.E4Completers import E4FileCompleter from ConfigurationPageBase import ConfigurationPageBase from Ui_DebuggerPython3Page import Ui_DebuggerPython3Page import Preferences import Utilities class DebuggerPython3Page(ConfigurationPageBase, Ui_DebuggerPython3Page): """ Class implementing the Debugger Python3 configuration page. """ def __init__(self): """ Constructor """ ConfigurationPageBase.__init__(self) self.setupUi(self) self.setObjectName("DebuggerPython3Page") self.interpreterCompleter = E4FileCompleter(self.interpreterEdit) self.debugClientCompleter = E4FileCompleter(self.debugClientEdit) # set initial values self.interpreterEdit.setText(\ Preferences.getDebugger("Python3Interpreter")) dct = Preferences.getDebugger("DebugClientType3") if dct == "standard": self.standardButton.setChecked(True) elif dct == "threaded": self.threadedButton.setChecked(True) else: self.customButton.setChecked(True) self.debugClientEdit.setText( Preferences.getDebugger("DebugClient3")) self.pyRedirectCheckBox.setChecked( Preferences.getDebugger("Python3Redirect")) self.pyNoEncodingCheckBox.setChecked( Preferences.getDebugger("Python3NoEncoding")) self.sourceExtensionsEdit.setText( Preferences.getDebugger("Python3Extensions")) def save(self): """ Public slot to save the Debugger Python configuration. """ Preferences.setDebugger("Python3Interpreter", self.interpreterEdit.text()) if self.standardButton.isChecked(): dct = "standard" elif self.threadedButton.isChecked(): dct = "threaded" else: dct = "custom" Preferences.setDebugger("DebugClientType3", dct) Preferences.setDebugger("DebugClient3", self.debugClientEdit.text()) Preferences.setDebugger("Python3Redirect", int(self.pyRedirectCheckBox.isChecked())) Preferences.setDebugger("Python3NoEncoding", int(self.pyNoEncodingCheckBox.isChecked())) Preferences.setDebugger("Python3Extensions", self.sourceExtensionsEdit.text()) @pyqtSignature("") def on_interpreterButton_clicked(self): """ Private slot to handle the Python interpreter selection. """ file = KQFileDialog.getOpenFileName(\ self, self.trUtf8("Select Python interpreter for Debug Client"), self.interpreterEdit.text(), QString()) if not file.isEmpty(): self.interpreterEdit.setText(\ Utilities.toNativeSeparators(file)) @pyqtSignature("") def on_debugClientButton_clicked(self): """ Private slot to handle the Debug Client selection. """ file = KQFileDialog.getOpenFileName(\ None, self.trUtf8("Select Debug Client"), self.debugClientEdit.text(), self.trUtf8("Python Files (*.py *.py3)")) if not file.isEmpty(): self.debugClientEdit.setText(\ Utilities.toNativeSeparators(file)) def create(dlg): """ Module function to create the configuration page. @param dlg reference to the configuration dialog """ page = DebuggerPython3Page() return page eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/ProjectBrowserPage.ui0000644000175000001440000000007411072705635026662 xustar000000000000000030 atime=1389081083.639724387 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/ProjectBrowserPage.ui0000644000175000001440000001514611072705635026416 0ustar00detlevusers00000000000000 ProjectBrowserPage 0 0 617 497 <b>Configure project viewer settings</b> QFrame::HLine QFrame::Sunken Qt::Horizontal Colours Highlighted entries (Others): 100 0 Select the colour for highlighted entries in the Others viewer. Qt::Horizontal 40 20 Visible Project Browsers Projecttype: 0 0 Select the project type to be configured Select to show the sources browser Sources Browser Select to show the translations browser Translations Browser Select to show the forms browser Forms Browser Select to show the interfaces (IDL) browser Interfaces (IDL) Browser Select to show the resources browser Resources Browser Select to show the browser for other files Others Browser Select to make the project browsers highlight the file of the current editor. Highlight file of current editor Select to hide sources generated from form files Hide generated form sources Qt::Vertical 599 21 pbHighlightedButton projectTypeCombo sourcesBrowserCheckBox formsBrowserCheckBox resourcesBrowserCheckBox translationsBrowserCheckBox interfacesBrowserCheckBox othersBrowserCheckBox followEditorCheckBox hideGeneratedCheckBox eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/EditorStylesPage.ui0000644000175000001440000000013212140204244026320 xustar000000000000000030 mtime=1367410852.940070405 30 atime=1389081083.652724387 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/EditorStylesPage.ui0000644000175000001440000011274512140204244026064 0ustar00detlevusers00000000000000 EditorStylesPage 0 0 581 1602 <b>Configure editor styles</b> QFrame::HLine QFrame::Sunken Qt::Horizontal <b>Note:</b> Fonts and colors of the syntax highlighters have to be configured on the syntax highlighter styles page. true Colours Select to set the colour of the edit area different to the default style Override edit area colours false Edit area foreground: false 100 0 Select the foreground colour for the edit area. false Edit area background: false 100 0 Select the background colour for the edit area. Fonts Select, whether the monospaced font should be used as default Use monospaced as default Qt::NoFocus Default Text Qt::AlignHCenter true Press to select the default font for the editor's text Default Text Font Press to select the font to be used as the monospaced font Monospaced Font Qt::NoFocus Monospaced Text Qt::AlignHCenter true Margins Select whether line numbers margin should be shown. Show Line Numbers Margin Select whether the fold margin should be shown. Show Fold Margin Select to show unified margins (like eric4 < 4.3.0) Show unified margins Folding style: 0 0 Select the folding style to be used in the folding margin <b>Folding style</b> <p>Select the desired folding style to be used in the folding margin.</p> <p>The available styles are: <ul> <li>Plain - simple plus and minus symbols</li> <li>Circled - circled plus and minus symbols</li> <li>Boxed - boxed plus and minus symbols</li> <li>Circled Tree - circled plus and minus symbols and flattened tree with rounded corners</li> <li>Boxed Tree - boxed plus and minus symbols and flattened tree with rectangled corners</li> </ul> </p> Plain Circled Boxed Circled Tree Boxed Tree Margins foreground: 100 0 Select the foreground colour for the margins Margins background: 100 0 Select the background colour for the margins Foldmargin background: 100 0 Select the background colour for the foldmargin Press to select the font for the editor line numbers Line Numbers Font 200 0 Qt::NoFocus 2345 Qt::AlignHCenter true Qt::Horizontal 40 20 Selection Select to use custom selection colours <b>Use custom selection colours</b><p>Select this entry in order to use custom selection colours in the editor and shell windows. The colours for the selection foreground and background are defined on the colours page.</p> Use custom selection colours Select, if selected text should be colourized by the lexer. Colourize selected text Select to extend selection to end of line Extend selection to end of line Selection foreground: 100 0 Select the foreground colour for the selection. Selection background: 100 0 Select the background colour for the selection. Caret Select, whether the caretline should be highlighted Caretline visible Caret width: Select caret width (1, 2 or 3 pixels) 1 3 Qt::Horizontal QSizePolicy::Expanding 40 20 Caret foreground: 100 0 Select the colour for the caret. Caretline background: 100 0 Select the background colour for the line containing the caret. Debugging Line Markers Current line marker: 100 0 Select the colour for the current line marker. Error line marker: 100 0 Select the colour for the error line marker. Braces Select whether matching and bad braces shall be highlighted. Highlight braces Matched braces: 100 0 Select the colour for highlighting matching braces. Matched braces background: 100 0 Select the background colour for highlighting matching braces. 100 0 Unmatched brace: Select the colour for highlighting nonmatching braces. 100 0 Unmatched brace background: Select the background colour for highlighting nonmatching braces. End of Line Select whether end of line shall be shown Show End of Line Select, whether long lines should be wrapped Wrap long lines Edge Mode Qt::Horizontal QSizePolicy::Expanding 211 20 Qt::Horizontal QSizePolicy::Expanding 201 31 100 0 Select the colour for the edge marker. Background colour: 11 0 Move to set the edge column. 0 160 80 Qt::Horizontal 10 1 0 Displays the selected tab width. 3 QLCDNumber::Flat 80.000000000000000 Column number: Mode: 0 0 Disabled Draw Line Change Background Colour Whitespace Select whether whitspace characters shall be shown Show Whitespace Whitespace size: Select the size of the dots used to represent visible whitespace 1 10 Qt::Horizontal QSizePolicy::Expanding 40 20 Whitespace foreground: 100 0 Select the foreground colour for visible whitespace Whitespace background: 100 0 Select the background colour for visible whitespace Various Select to show a minimalistic context menu Show minimal context menu Qt::Vertical 558 20 editAreaOverrideCheckBox editAreaForegroundButton editAreaBackgroundButton defaultFontButton monospacedFontButton monospacedCheckBox linenoCheckBox foldingCheckBox unifiedMarginsCheckBox foldingStyleComboBox marginsForegroundButton marginsBackgroundButton foldmarginBackgroundButton linenumbersFontButton customSelColourCheckBox colourizeSelTextCheckBox extentSelEolCheckBox selectionForegroundButton selectionBackgroundButton caretlineVisibleCheckBox caretWidthSpinBox caretForegroundButton caretlineBackgroundButton currentLineMarkerButton errorMarkerButton bracehighlightingCheckBox matchingBracesButton matchingBracesBackButton nonmatchingBracesButton nonmatchingBracesBackButton eolCheckBox wrapLongLinesCheckBox edgeModeCombo edgeLineColumnSlider edgeBackgroundColorButton whitespaceCheckBox whitespaceSizeSpinBox whitespaceForegroundButton whitespaceBackgroundButton miniMenuCheckBox edgeLineColumnSlider valueChanged(int) edgeLineColumnLCD display(int) 492 1111 544 1115 editAreaOverrideCheckBox toggled(bool) editAreaForegroundButton setEnabled(bool) 101 113 182 139 editAreaOverrideCheckBox toggled(bool) editAreaBackgroundButton setEnabled(bool) 417 113 462 141 editAreaOverrideCheckBox toggled(bool) TextLabel2_2_2_2_2_12 setEnabled(bool) 58 116 56 149 editAreaOverrideCheckBox toggled(bool) TextLabel2_2_2_2_2_11 setEnabled(bool) 344 116 343 137 eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/ViewmanagerPage.py0000644000175000001440000000013212261012650026150 xustar000000000000000030 mtime=1388582312.861088003 30 atime=1389081083.653724387 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/ViewmanagerPage.py0000644000175000001440000000631212261012650025704 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing the Viewmanager configuration page. """ import os from PyQt4.QtCore import QStringList, pyqtSignature, QVariant from PyQt4.QtGui import QPixmap from KdeQt.KQApplication import e4App from ConfigurationPageBase import ConfigurationPageBase from Ui_ViewmanagerPage import Ui_ViewmanagerPage import Preferences from eric4config import getConfig class ViewmanagerPage(ConfigurationPageBase, Ui_ViewmanagerPage): """ Class implementing the Viewmanager configuration page. """ def __init__(self): """ Constructor """ ConfigurationPageBase.__init__(self) self.setupUi(self) self.setObjectName("ViewmanagerPage") # set initial values self.pluginManager = e4App().getObject("PluginManager") self.viewmanagers = self.pluginManager.getPluginDisplayStrings("viewmanager") self.windowComboBox.clear() currentVm = Preferences.getViewManager() keys = self.viewmanagers.keys() keys.sort() for key in keys: self.windowComboBox.addItem(self.trUtf8(self.viewmanagers[key]), QVariant(key)) currentIndex = self.windowComboBox.findText(\ self.trUtf8(self.viewmanagers[currentVm])) self.windowComboBox.setCurrentIndex(currentIndex) self.on_windowComboBox_activated(currentIndex) self.tabViewGroupBox.setTitle(self.trUtf8(self.viewmanagers["tabview"])) self.filenameLengthSpinBox.setValue( Preferences.getUI("TabViewManagerFilenameLength")) self.filenameOnlyCheckBox.setChecked( Preferences.getUI("TabViewManagerFilenameOnly")) self.recentFilesSpinBox.setValue( Preferences.getUI("RecentNumber")) def save(self): """ Public slot to save the Viewmanager configuration. """ vm = unicode(\ self.windowComboBox.itemData(self.windowComboBox.currentIndex()).toString()) Preferences.setViewManager(vm) Preferences.setUI("TabViewManagerFilenameLength", self.filenameLengthSpinBox.value()) Preferences.setUI("TabViewManagerFilenameOnly", int(self.filenameOnlyCheckBox.isChecked())) Preferences.setUI("RecentNumber", self.recentFilesSpinBox.value()) @pyqtSignature("int") def on_windowComboBox_activated(self, index): """ Private slot to show a preview of the selected workspace view type. @param index index of selected workspace view type (integer) """ workspace = unicode(\ self.windowComboBox.itemData(self.windowComboBox.currentIndex()).toString()) pixmap = self.pluginManager.getPluginPreviewPixmap("viewmanager", workspace) self.previewPixmap.setPixmap(pixmap) self.tabViewGroupBox.setEnabled(workspace == "tabview") def create(dlg): """ Module function to create the configuration page. @param dlg reference to the configuration dialog """ page = ViewmanagerPage() return page eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/PythonPage.py0000644000175000001440000000013212261012650025164 xustar000000000000000030 mtime=1388582312.865088054 30 atime=1389081083.654724387 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/PythonPage.py0000644000175000001440000000424512261012650024723 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing the Python configuration page. """ from ConfigurationPageBase import ConfigurationPageBase from Ui_PythonPage import Ui_PythonPage import Preferences from Utilities import supportedCodecs class PythonPage(ConfigurationPageBase, Ui_PythonPage): """ Class implementing the Python configuration page. """ def __init__(self): """ Constructor """ ConfigurationPageBase.__init__(self) self.setupUi(self) self.setObjectName("PythonPage") self.stringEncodingComboBox.addItems(sorted(supportedCodecs)) self.ioEncodingComboBox.addItems(sorted(supportedCodecs)) # set initial values index = self.stringEncodingComboBox.findText(\ Preferences.getSystem("StringEncoding")) self.stringEncodingComboBox.setCurrentIndex(index) index = self.ioEncodingComboBox.findText(\ Preferences.getSystem("IOEncoding")) self.ioEncodingComboBox.setCurrentIndex(index) # these are the same as in the debugger pages self.py2ExtensionsEdit.setText( Preferences.getDebugger("PythonExtensions")) self.py3ExtensionsEdit.setText( Preferences.getDebugger("Python3Extensions")) def save(self): """ Public slot to save the Python configuration. """ enc = unicode(self.stringEncodingComboBox.currentText()) if not enc: enc = "utf-8" Preferences.setSystem("StringEncoding", enc) enc = unicode(self.ioEncodingComboBox.currentText()) if not enc: enc = "utf-8" Preferences.setSystem("IOEncoding", enc) Preferences.setDebugger("PythonExtensions", self.py2ExtensionsEdit.text()) Preferences.setDebugger("Python3Extensions", self.py3ExtensionsEdit.text()) def create(dlg): """ Module function to create the configuration page. @param dlg reference to the configuration dialog """ page = PythonPage() return page eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/EditorKeywordsPage.ui0000644000175000001440000000007411650523141026656 xustar000000000000000030 atime=1389081083.654724387 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/EditorKeywordsPage.ui0000644000175000001440000000471511650523141026412 0ustar00detlevusers00000000000000 EditorKeywordsPage 0 0 462 422 <b>Configure syntax highlighter keywords</b> QFrame::HLine QFrame::Sunken Qt::Horizontal Language: 0 0 Select the language to be configured. Set: 1 9 Enter the keywords separated by a blank languageCombo setSpinBox keywordsEdit eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/EditorFilePage.py0000644000175000001440000000013212261012650025731 xustar000000000000000030 mtime=1388582312.870088117 30 atime=1389081083.654724387 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/EditorFilePage.py0000644000175000001440000002473512261012650025476 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing the Editor General configuration page. """ from PyQt4.QtCore import pyqtSignature, QStringList from PyQt4.QtGui import QListWidgetItem, QInputDialog, QLineEdit from PyQt4.Qsci import QsciScintilla from KdeQt import KQMessageBox import QScintilla.Lexers from ConfigurationPageBase import ConfigurationPageBase from Ui_EditorFilePage import Ui_EditorFilePage from Utilities import supportedCodecs import Preferences class EditorFilePage(ConfigurationPageBase, Ui_EditorFilePage): """ Class implementing the Editor File configuration page. """ def __init__(self): """ Constructor """ ConfigurationPageBase.__init__(self) self.setupUi(self) self.setObjectName("EditorFilePage") self.__showsOpenFilters = True self.openFileFilters = \ QStringList(Preferences.getEditor("AdditionalOpenFilters")) self.saveFileFilters = \ QStringList(Preferences.getEditor("AdditionalSaveFilters")) self.fileFiltersList.addItems(self.openFileFilters) self.__setDefaultFiltersLists() self.defaultEncodingComboBox.addItems(sorted(supportedCodecs)) # set initial values self.autosaveSlider.setValue(\ Preferences.getEditor("AutosaveInterval")) self.createBackupFileCheckBox.setChecked(\ Preferences.getEditor("CreateBackupFile")) self.automaticSyntaxCheckCheckBox.setChecked(\ Preferences.getEditor("AutoCheckSyntax")) self.defaultEncodingComboBox.setCurrentIndex(\ self.defaultEncodingComboBox.findText(\ Preferences.getEditor("DefaultEncoding"))) self.advEncodingCheckBox.setChecked(\ Preferences.getEditor("AdvancedEncodingDetection")) self.warnFilesizeSpinBox.setValue(\ Preferences.getEditor("WarnFilesize")) self.clearBreakpointsCheckBox.setChecked(\ Preferences.getEditor("ClearBreaksOnClose")) self.automaticReopenCheckBox.setChecked(\ Preferences.getEditor("AutoReopen")) self.stripWhitespaceCheckBox.setChecked(\ Preferences.getEditor("StripTrailingWhitespace")) self.openFilesFilterComboBox.setCurrentIndex(\ self.openFilesFilterComboBox.findText(\ Preferences.getEditor("DefaultOpenFilter"))) self.saveFilesFilterComboBox.setCurrentIndex(\ self.saveFilesFilterComboBox.findText(\ Preferences.getEditor("DefaultSaveFilter"))) self.automaticEolConversionCheckBox.setChecked(\ Preferences.getEditor("AutomaticEOLConversion")) eolMode = Preferences.getEditor("EOLMode") if eolMode == QsciScintilla.EolWindows: self.crlfRadioButton.setChecked(True) elif eolMode == QsciScintilla.EolMac: self.crRadioButton.setChecked(True) elif eolMode == QsciScintilla.EolUnix: self.lfRadioButton.setChecked(True) def save(self): """ Public slot to save the Editor General configuration. """ Preferences.setEditor("AutosaveInterval", self.autosaveSlider.value()) Preferences.setEditor("CreateBackupFile", int(self.createBackupFileCheckBox.isChecked())) Preferences.setEditor("AutoCheckSyntax", int(self.automaticSyntaxCheckCheckBox.isChecked())) enc = unicode(self.defaultEncodingComboBox.currentText()) if not enc: enc = "utf-8" Preferences.setEditor("DefaultEncoding", enc) Preferences.setEditor("AdvancedEncodingDetection", int(self.advEncodingCheckBox.isChecked())) Preferences.setEditor("WarnFilesize", self.warnFilesizeSpinBox.value()) Preferences.setEditor("ClearBreaksOnClose", int(self.clearBreakpointsCheckBox.isChecked())) Preferences.setEditor("AutoReopen", int(self.automaticReopenCheckBox.isChecked())) Preferences.setEditor("StripTrailingWhitespace", int(self.stripWhitespaceCheckBox.isChecked())) Preferences.setEditor("DefaultOpenFilter", self.openFilesFilterComboBox.currentText()) Preferences.setEditor("DefaultSaveFilter", self.saveFilesFilterComboBox.currentText()) Preferences.setEditor("AutomaticEOLConversion", int(self.automaticEolConversionCheckBox.isChecked())) if self.crlfRadioButton.isChecked(): Preferences.setEditor("EOLMode", QsciScintilla.EolWindows) elif self.crRadioButton.isChecked(): Preferences.setEditor("EOLMode", QsciScintilla.EolMac) elif self.lfRadioButton.isChecked(): Preferences.setEditor("EOLMode", QsciScintilla.EolUnix) self.__extractFileFilters() Preferences.setEditor("AdditionalOpenFilters", self.openFileFilters) Preferences.setEditor("AdditionalSaveFilters", self.saveFileFilters) def __setDefaultFiltersLists(self, keepSelection = False): """ Private slot to set the default file filter combo boxes. @param keepSelection flag indicating to keep the current selection if possible (boolean) """ if keepSelection: selectedOpenFilter = self.openFilesFilterComboBox.currentText() selectedSaveFilter = self.saveFilesFilterComboBox.currentText() openFileFiltersList = \ QScintilla.Lexers.getOpenFileFiltersList(False, withAdditional = False) + \ self.openFileFilters openFileFiltersList.sort() self.openFilesFilterComboBox.clear() self.openFilesFilterComboBox.addItems(openFileFiltersList) saveFileFiltersList = \ QScintilla.Lexers.getSaveFileFiltersList(False, withAdditional = False) + \ self.saveFileFilters saveFileFiltersList.sort() self.saveFilesFilterComboBox.clear() self.saveFilesFilterComboBox.addItems(saveFileFiltersList) if keepSelection: self.openFilesFilterComboBox.setCurrentIndex( self.openFilesFilterComboBox.findText(selectedOpenFilter)) self.saveFilesFilterComboBox.setCurrentIndex( self.saveFilesFilterComboBox.findText(selectedSaveFilter)) def __extractFileFilters(self): """ Private method to extract the file filters. """ filters = QStringList() for row in range(self.fileFiltersList.count()): filters.append(self.fileFiltersList.item(row).text()) if self.__showsOpenFilters: self.openFileFilters = filters else: self.saveFileFilters = filters def __checkFileFilter(self, filter): """ Private method to check a file filter for validity. @param filter file filter pattern to check (QString) @return flag indicating validity (boolean) """ if not self.__showsOpenFilters and \ filter.count("*") != 1: KQMessageBox.critical(self, self.trUtf8("Add File Filter"), self.trUtf8("""A Save File Filter must contain exactly one""" """ wildcard pattern. Yours contains %1.""")\ .arg(filter.count("*"))) return False if filter.count("*") == 0: KQMessageBox.critical(self, self.trUtf8("Add File Filter"), self.trUtf8("""A File Filter must contain at least one""" """ wildcard pattern.""")) return False return True @pyqtSignature("bool") def on_openFiltersButton_toggled(self, checked): """ Private slot to switch the list of file filters. @param checked flag indicating the check state of the button (boolean) """ self.__extractFileFilters() self.__showsOpenFilters = checked self.fileFiltersList.clear() if checked: self.fileFiltersList.addItems(self.openFileFilters) else: self.fileFiltersList.addItems(self.saveFileFilters) @pyqtSignature("QListWidgetItem*, QListWidgetItem*") def on_fileFiltersList_currentItemChanged(self, current, previous): """ Private slot to set the state of the edit and delete buttons. @param current new current item (QListWidgetItem) @param previous previous current item (QListWidgetItem) """ self.editFileFilterButton.setEnabled(current is not None) self.deleteFileFilterButton.setEnabled(current is not None) @pyqtSignature("") def on_addFileFilterButton_clicked(self): """ Private slot to add a file filter to the list. """ filter, ok = QInputDialog.getText( self, self.trUtf8("Add File Filter"), self.trUtf8("Enter the file filter entry:"), QLineEdit.Normal) if ok and filter: if self.__checkFileFilter(filter): self.fileFiltersList.addItem(filter) self.__extractFileFilters() self.__setDefaultFiltersLists(keepSelection = True) @pyqtSignature("") def on_editFileFilterButton_clicked(self): """ Private slot called to edit a file filter entry. """ filter = self.fileFiltersList.currentItem().text() filter, ok = QInputDialog.getText( self, self.trUtf8("Add File Filter"), self.trUtf8("Enter the file filter entry:"), QLineEdit.Normal, filter) if ok and filter: if self.__checkFileFilter(filter): self.fileFiltersList.currentItem().setText(filter) self.__extractFileFilters() self.__setDefaultFiltersLists(keepSelection = True) @pyqtSignature("") def on_deleteFileFilterButton_clicked(self): """ Private slot called to delete a file filter entry. """ self.fileFiltersList.takeItem(self.fileFiltersList.currentRow()) self.__extractFileFilters() self.__setDefaultFiltersLists(keepSelection = True) def create(dlg): """ Module function to create the configuration page. @param dlg reference to the configuration dialog """ page = EditorFilePage() return page eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/DebuggerPython3Page.ui0000644000175000001440000000007411160753147026720 xustar000000000000000030 atime=1389081083.654724387 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/DebuggerPython3Page.ui0000644000175000001440000001503111160753147026445 0ustar00detlevusers00000000000000 DebuggerPython3Page 0 0 453 449 <b>Configure Python3 Debugger</b> QFrame::HLine QFrame::Sunken Qt::Horizontal Python3 Interpreter for Debug Client Enter the path of the Python3 interpreter to be used by the debug client. Press to select the Python3 interpreter via a file selection dialog ... Debug Client Type false Enter the path of the Debug Client to be used. Leave empty to use the default. false Press to select the Debug Client via a file selection dialog ... Select the standard debug client Standard Select the custom selected debug client Custom Select the multi threaded debug client Multi Threaded Source association Enter the file extensions to be associated with the Python3 debugger separated by a space. They must not overlap with the ones for Python2. true Select, to redirect stdin, stdout and stderr of the program being debugged to the eric4 IDE Redirect stdin/stdout/stderr Select to not set the debug client encoding Don't set the encoding of the debug client Qt::Vertical 435 21 interpreterEdit interpreterButton standardButton threadedButton customButton debugClientEdit debugClientButton sourceExtensionsEdit pyRedirectCheckBox pyNoEncodingCheckBox customButton toggled(bool) debugClientEdit setEnabled(bool) 368 194 332 219 customButton toggled(bool) debugClientButton setEnabled(bool) 455 195 463 222 eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/EditorCalltipsPage.py0000644000175000001440000000013112261012650026624 xustar000000000000000029 mtime=1388582312.87508818 30 atime=1389081083.664724386 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/EditorCalltipsPage.py0000644000175000001440000000431212261012650026357 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing the Editor Calltips configuration page. """ from PyQt4.QtCore import pyqtSignature from ConfigurationPageBase import ConfigurationPageBase from Ui_EditorCalltipsPage import Ui_EditorCalltipsPage import Preferences class EditorCalltipsPage(ConfigurationPageBase, Ui_EditorCalltipsPage): """ Class implementing the Editor Calltips configuration page. """ def __init__(self): """ Constructor """ ConfigurationPageBase.__init__(self) self.setupUi(self) self.setObjectName("EditorCalltipsPage") # set initial values self.ctEnabledCheckBox.setChecked(\ Preferences.getEditor("CallTipsEnabled")) self.ctVisibleSlider.setValue(\ Preferences.getEditor("CallTipsVisible")) self.callTipsBackgroundColour = \ self.initColour("CallTipsBackground", self.calltipsBackgroundButton, Preferences.getEditorColour) self.ctScintillaCheckBox.setChecked( Preferences.getEditor("CallTipsScintillaOnFail")) def save(self): """ Public slot to save the EditorCalltips configuration. """ Preferences.setEditor("CallTipsEnabled", int(self.ctEnabledCheckBox.isChecked())) Preferences.setEditor("CallTipsVisible", self.ctVisibleSlider.value()) Preferences.setEditorColour("CallTipsBackground", self.callTipsBackgroundColour) Preferences.setEditor("CallTipsScintillaOnFail", int(self.ctScintillaCheckBox.isChecked())) @pyqtSignature("") def on_calltipsBackgroundButton_clicked(self): """ Private slot to set the background colour for calltips. """ self.callTipsBackgroundColour = \ self.selectColour(self.calltipsBackgroundButton, self.callTipsBackgroundColour) def create(dlg): """ Module function to create the configuration page. @param dlg reference to the configuration dialog """ page = EditorCalltipsPage() return page eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/EditorSpellCheckingPage.ui0000644000175000001440000000013212034017357027561 xustar000000000000000030 mtime=1349525231.941420692 30 atime=1389081083.664724386 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/EditorSpellCheckingPage.ui0000644000175000001440000003023512034017357027316 0ustar00detlevusers00000000000000 EditorSpellCheckingPage 0 0 576 666 <b>Configure editor spell checking options</b> QFrame::HLine QFrame::Sunken Qt::Horizontal <font color="#FF0000">Spell checking with PyEnchant is not available.</font> QFrame::NoFrame QFrame::Plain 0 Select to enable spell checking Spell checking enabled Defaults Default language: Select the default language Qt::Horizontal 353 20 Spell checking options Select to check strings only Spell check strings only Minimum word size: Move to set the minimum size of words to be checked 1 10 Qt::Horizontal QSlider::NoTicks 1 Displays the minimum size of words to be checked 2 QLCDNumber::Flat 1 Colours Marker Colour: 100 0 Select the colour for the spelling markers. Qt::Horizontal 348 20 Personal lists Personal word list file: Enter the filename of the personal word list Select the personal word list file via a file selection dialog ... Personal exclude list file: Enter the filename of the personal exclude list Select the personal exclude list file via a file selection dialog ... <b>Note:</b> leave these entries empty to use the default <b>Note:</b> valid for all newly opened editors Automatic spell checking Select to enable spellchecking Automatic spell checking enabled Amount of lines to autocheck at once: Enter the number of lines to check per go. Higher values increase checking speed but decrease GUI responsivenes Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 10 999 Qt::Horizontal 40 20 Qt::Vertical 558 231 checkingEnabledCheckBox defaultLanguageCombo stringsOnlyCheckBox minimumWordSizeSlider spellingMarkerButton pwlEdit pwlButton pelEdit pelButton enabledCheckBox chunkSizeSpinBox minimumWordSizeSlider valueChanged(int) lCDNumber display(int) 248 131 545 131 eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/EditorSearchPage.py0000644000175000001440000000013212261012650026257 xustar000000000000000030 mtime=1388582312.879088231 30 atime=1389081083.664724386 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/EditorSearchPage.py0000644000175000001440000000520012261012650026006 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2008 - 2014 Detlev Offenbach # """ Module implementing the Editor Search configuration page. """ from PyQt4.QtCore import pyqtSignature from PyQt4.QtGui import QPixmap, QIcon from ConfigurationPageBase import ConfigurationPageBase from Ui_EditorSearchPage import Ui_EditorSearchPage import Preferences class EditorSearchPage(ConfigurationPageBase, Ui_EditorSearchPage): """ Class implementing the Editor Search configuration page. """ def __init__(self): """ Constructor """ ConfigurationPageBase.__init__(self) self.setupUi(self) self.setObjectName("EditorSearchPage") self.editorColours = {} # set initial values self.searchMarkersEnabledCheckBox.setChecked(\ Preferences.getEditor("SearchMarkersEnabled")) self.quicksearchMarkersEnabledCheckBox.setChecked(\ Preferences.getEditor("QuickSearchMarkersEnabled")) self.occurrencesMarkersEnabledCheckBox.setChecked(\ Preferences.getEditor("MarkOccurrencesEnabled")) self.markOccurrencesTimeoutSpinBox.setValue( Preferences.getEditor("MarkOccurrencesTimeout")) self.editorColours["SearchMarkers"] = \ self.initColour("SearchMarkers", self.searchMarkerButton, Preferences.getEditorColour) def save(self): """ Public slot to save the Editor Search configuration. """ Preferences.setEditor("SearchMarkersEnabled", int(self.searchMarkersEnabledCheckBox.isChecked())) Preferences.setEditor("QuickSearchMarkersEnabled", int(self.quicksearchMarkersEnabledCheckBox.isChecked())) Preferences.setEditor("MarkOccurrencesEnabled", int(self.occurrencesMarkersEnabledCheckBox.isChecked())) Preferences.setEditor("MarkOccurrencesTimeout", self.markOccurrencesTimeoutSpinBox.value()) for key in self.editorColours.keys(): Preferences.setEditorColour(key, self.editorColours[key]) @pyqtSignature("") def on_searchMarkerButton_clicked(self): """ Private slot to set the colour of the search markers. """ self.editorColours["SearchMarkers"] = \ self.selectColour(self.searchMarkerButton, self.editorColours["SearchMarkers"]) def create(dlg): """ Module function to create the configuration page. @param dlg reference to the configuration dialog """ page = EditorSearchPage() return page eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/IconsPreviewDialog.ui0000644000175000001440000000007411072705636026651 xustar000000000000000030 atime=1389081083.664724386 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/IconsPreviewDialog.ui0000644000175000001440000000316111072705636026377 0ustar00detlevusers00000000000000 IconsPreviewDialog 0 0 596 541 Icons Preview true QListView::Free QListView::LeftToRight 100 50 QListView::IconMode Qt::Horizontal QDialogButtonBox::Ok iconView buttonBox accepted() IconsPreviewDialog accept() 155 519 161 538 eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/TrayStarterPage.ui0000644000175000001440000000007411461042275026170 xustar000000000000000030 atime=1389081083.665724387 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/TrayStarterPage.ui0000644000175000001440000000521611461042275025721 0ustar00detlevusers00000000000000 TrayStarterPage 0 0 482 473 <b>Configure Tray Starter</b> QFrame::HLine QFrame::Sunken Qt::Horizontal Icon Select to use the standard icon Standard Icon Select to use the high contrast icon High Contrast Icon Select to use a black and white icon Black and White Icon Select to use an inverse black and white icon Inverse Black and White Icon Qt::Vertical 464 41 eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/EditorCalltipsPage.ui0000644000175000001440000000013112034017357026620 xustar000000000000000029 mtime=1349525231.93342069 30 atime=1389081083.665724387 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/EditorCalltipsPage.ui0000644000175000001440000001416112034017357026356 0ustar00detlevusers00000000000000 EditorCalltipsPage 0 0 406 369 <b>Configure Calltips</b> QFrame::HLine QFrame::Sunken Qt::Horizontal Select this to enable calltips Calltips Enabled false 0 Visible calltips: Move to set the maximum number of calltips shown (0 = all available) 20 Qt::Horizontal 1 Displays the maximum number of calltips to be shown 2 QLCDNumber::Flat false Colours Background colour: 100 0 Select the background colour for calltips. Qt::Horizontal 40 20 Plug-In Behavior Select to show QScintilla provided calltips, if the selected plugin fails Qscintilla provided calltips are shown, if this option is enabled and calltips shall be provided by a plug-in (see calltips sub-page of the plug-in) and the plugin-in doesn't deliver any calltips. Show QScintilla calltips, if plug-in fails Qt::Vertical 388 20 ctEnabledCheckBox ctVisibleSlider calltipsBackgroundButton ctScintillaCheckBox ctEnabledCheckBox toggled(bool) groupBox_2 setEnabled(bool) 68 48 77 148 ctEnabledCheckBox toggled(bool) frame setEnabled(bool) 199 47 199 75 ctVisibleSlider valueChanged(int) lCDNumber5 display(int) 285 75 372 77 eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/CorbaPage.ui0000644000175000001440000000007411072705635024736 xustar000000000000000030 atime=1389081083.682724386 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/CorbaPage.ui0000644000175000001440000000436311072705635024471 0ustar00detlevusers00000000000000 CorbaPage 0 0 589 490 <b>Configure CORBA support</b> QFrame::HLine QFrame::Sunken Qt::Horizontal IDL Compiler Press to select the IDL compiler via a file selection dialog. ... Enter the path to the IDL compiler. <b>Note:</b> Leave this entry empty to use the default value (omniidl or omniidl.exe). Qt::Vertical 20 81 idlEdit idlButton eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/NetworkPage.ui0000644000175000001440000000013212031577626025337 xustar000000000000000030 mtime=1348927382.564850681 30 atime=1389081083.682724386 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/NetworkPage.ui0000644000175000001440000001676512031577626025110 0ustar00detlevusers00000000000000 NetworkPage 0 0 589 563 <b>Configure Network</b> QFrame::HLine QFrame::Sunken Qt::Horizontal Download directory: Enter the download directory (leave empty to use the default location) Select the download directory via a directory selection dialog ... Select to ask the user for a download filename Request name of downloaded file Select to use a web proxy Use network proxy true true Select to use the system proxy configuration Use system proxy configuration true Select to use an application specific proxy configuration Manual proxy configuration: false Manual proxy settings Proxy-Type: Select the type of the proxy Proxy-Host: Enter the name of the proxy host Proxy-Port: Enter the proxy port Qt::AlignRight 1 65535 80 Qt::Horizontal 40 20 Username: Enter the username for the proxy Password: Enter the password for the proxy QLineEdit::Password Qt::Vertical 571 21 downloadDirEdit downloadDirButton requestFilenameCheckBox manualProxyButton toggled(bool) groupBox setEnabled(bool) 70 159 71 199 eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/DebuggerRubyPage.py0000644000175000001440000000013212261012650026271 xustar000000000000000030 mtime=1388582312.883088282 30 atime=1389081083.682724386 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/DebuggerRubyPage.py0000644000175000001440000000407012261012650026024 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing the Debugger Ruby configuration page. """ from PyQt4.QtCore import QDir, QString, pyqtSignature from KdeQt import KQFileDialog from E4Gui.E4Completers import E4FileCompleter from ConfigurationPageBase import ConfigurationPageBase from Ui_DebuggerRubyPage import Ui_DebuggerRubyPage import Preferences import Utilities class DebuggerRubyPage(ConfigurationPageBase, Ui_DebuggerRubyPage): """ Class implementing the Debugger Ruby configuration page. """ def __init__(self): """ Constructor """ ConfigurationPageBase.__init__(self) self.setupUi(self) self.setObjectName("DebuggerRubyPage") self.rubyInterpreterCompleter = E4FileCompleter(self.rubyInterpreterEdit) # set initial values self.rubyInterpreterEdit.setText(\ Preferences.getDebugger("RubyInterpreter")) self.rbRedirectCheckBox.setChecked(\ Preferences.getDebugger("RubyRedirect")) def save(self): """ Public slot to save the Debugger Ruby configuration. """ Preferences.setDebugger("RubyInterpreter", self.rubyInterpreterEdit.text()) Preferences.setDebugger("RubyRedirect", int(self.rbRedirectCheckBox.isChecked())) @pyqtSignature("") def on_rubyInterpreterButton_clicked(self): """ Private slot to handle the Ruby interpreter selection. """ file = KQFileDialog.getOpenFileName(\ self, self.trUtf8("Select Ruby interpreter for Debug Client"), self.rubyInterpreterEdit.text()) if not file.isEmpty(): self.rubyInterpreterEdit.setText(\ Utilities.toNativeSeparators(file)) def create(dlg): """ Module function to create the configuration page. @param dlg reference to the configuration dialog """ page = DebuggerRubyPage() return page eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/ProjectPage.py0000644000175000001440000000013212261012650025311 xustar000000000000000030 mtime=1388582312.885088308 30 atime=1389081083.682724386 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/ProjectPage.py0000644000175000001440000000757712261012650025063 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing the Project configuration page. """ from ConfigurationPageBase import ConfigurationPageBase from Ui_ProjectPage import Ui_ProjectPage import Preferences class ProjectPage(ConfigurationPageBase, Ui_ProjectPage): """ Class implementing the Project configuration page. """ def __init__(self): """ Constructor """ ConfigurationPageBase.__init__(self) self.setupUi(self) self.setObjectName("ProjectPage") # set initial values self.projectCompressedProjectFilesCheckBox.setChecked(\ Preferences.getProject("CompressedProjectFiles")) self.projectSearchNewFilesRecursiveCheckBox.setChecked(\ Preferences.getProject("SearchNewFilesRecursively")) self.projectSearchNewFilesCheckBox.setChecked(\ Preferences.getProject("SearchNewFiles")) self.projectAutoIncludeNewFilesCheckBox.setChecked(\ Preferences.getProject("AutoIncludeNewFiles")) self.projectLoadSessionCheckBox.setChecked(\ Preferences.getProject("AutoLoadSession")) self.projectSaveSessionCheckBox.setChecked(\ Preferences.getProject("AutoSaveSession")) self.projectSessionAllBpCheckBox.setChecked(\ Preferences.getProject("SessionAllBreakpoints")) self.projectLoadDebugPropertiesCheckBox.setChecked(\ Preferences.getProject("AutoLoadDbgProperties")) self.projectSaveDebugPropertiesCheckBox.setChecked(\ Preferences.getProject("AutoSaveDbgProperties")) self.projectAutoCompileFormsCheckBox.setChecked(\ Preferences.getProject("AutoCompileForms")) self.projectAutoCompileResourcesCheckBox.setChecked(\ Preferences.getProject("AutoCompileResources")) self.projectTimestampCheckBox.setChecked(\ Preferences.getProject("XMLTimestamp")) self.projectRecentSpinBox.setValue( Preferences.getProject("RecentNumber")) def save(self): """ Public slot to save the Project configuration. """ Preferences.setProject("CompressedProjectFiles", int(self.projectCompressedProjectFilesCheckBox.isChecked())) Preferences.setProject("SearchNewFilesRecursively", int(self.projectSearchNewFilesRecursiveCheckBox.isChecked())) Preferences.setProject("SearchNewFiles", int(self.projectSearchNewFilesCheckBox.isChecked())) Preferences.setProject("AutoIncludeNewFiles", int(self.projectAutoIncludeNewFilesCheckBox.isChecked())) Preferences.setProject("AutoLoadSession", int(self.projectLoadSessionCheckBox.isChecked())) Preferences.setProject("AutoSaveSession", int(self.projectSaveSessionCheckBox.isChecked())) Preferences.setProject("SessionAllBreakpoints", int(self.projectSessionAllBpCheckBox.isChecked())) Preferences.setProject("AutoLoadDbgProperties", int(self.projectLoadDebugPropertiesCheckBox.isChecked())) Preferences.setProject("AutoSaveDbgProperties", int(self.projectSaveDebugPropertiesCheckBox.isChecked())) Preferences.setProject("AutoCompileForms", int(self.projectAutoCompileFormsCheckBox.isChecked())) Preferences.setProject("AutoCompileResources", int(self.projectAutoCompileResourcesCheckBox.isChecked())) Preferences.setProject("XMLTimestamp", int(self.projectTimestampCheckBox.isChecked())) Preferences.setProject("RecentNumber", self.projectRecentSpinBox.value()) def create(dlg): """ Module function to create the configuration page. @param dlg reference to the configuration dialog """ page = ProjectPage() return page eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/EditorGeneralPage.py0000644000175000001440000000013212261012650026427 xustar000000000000000030 mtime=1388582312.887088333 30 atime=1389081083.682724386 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/EditorGeneralPage.py0000644000175000001440000000567212261012650026173 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing the Editor General configuration page. """ import QScintilla.Lexers from ConfigurationPageBase import ConfigurationPageBase from Ui_EditorGeneralPage import Ui_EditorGeneralPage import Preferences class EditorGeneralPage(ConfigurationPageBase, Ui_EditorGeneralPage): """ Class implementing the Editor General configuration page. """ def __init__(self): """ Constructor """ ConfigurationPageBase.__init__(self) self.setupUi(self) self.setObjectName("EditorGeneralPage") # set initial values self.tabwidthSlider.setValue(\ Preferences.getEditor("TabWidth")) self.indentwidthSlider.setValue(\ Preferences.getEditor("IndentWidth")) self.indentguidesCheckBox.setChecked(\ Preferences.getEditor("IndentationGuides")) self.tabforindentationCheckBox.setChecked(\ Preferences.getEditor("TabForIndentation")) self.tabindentsCheckBox.setChecked(\ Preferences.getEditor("TabIndents")) self.converttabsCheckBox.setChecked(\ Preferences.getEditor("ConvertTabsOnLoad")) self.autoindentCheckBox.setChecked(\ Preferences.getEditor("AutoIndentation")) self.comment0CheckBox.setChecked( Preferences.getEditor("CommentColumn0")) def save(self): """ Public slot to save the Editor General configuration. """ Preferences.setEditor("TabWidth", self.tabwidthSlider.value()) Preferences.setEditor("IndentWidth", self.indentwidthSlider.value()) Preferences.setEditor("IndentationGuides", int(self.indentguidesCheckBox.isChecked())) Preferences.setEditor("TabForIndentation", int(self.tabforindentationCheckBox.isChecked())) Preferences.setEditor("TabIndents", int(self.tabindentsCheckBox.isChecked())) Preferences.setEditor("ConvertTabsOnLoad", int(self.converttabsCheckBox.isChecked())) Preferences.setEditor("AutoIndentation", int(self.autoindentCheckBox.isChecked())) Preferences.setEditor("CommentColumn0", int(self.comment0CheckBox.isChecked())) def on_tabforindentationCheckBox_toggled(self, checked): """ Private slot used to set the tab conversion check box. @param checked flag received from the signal (boolean) """ if checked and self.converttabsCheckBox.isChecked(): self.converttabsCheckBox.setChecked(not checked) self.converttabsCheckBox.setEnabled(not checked) def create(dlg): """ Module function to create the configuration page. @param dlg reference to the configuration dialog """ page = EditorGeneralPage() return page eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/EditorPropertiesPage.py0000644000175000001440000000013212261012650027206 xustar000000000000000030 mtime=1388582312.890088371 30 atime=1389081083.682724386 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/EditorPropertiesPage.py0000644000175000001440000005106212261012650026744 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing the Editor Properties configuration page. """ from PyQt4.Qsci import QsciScintilla from QScintilla.QsciScintillaCompat import QSCINTILLA_VERSION from ConfigurationPageBase import ConfigurationPageBase from Ui_EditorPropertiesPage import Ui_EditorPropertiesPage import Preferences class EditorPropertiesPage(ConfigurationPageBase, Ui_EditorPropertiesPage): """ Class implementing the Editor Properties configuration page. """ def __init__(self, lexers): """ Constructor @param lexers reference to the lexers dictionary """ ConfigurationPageBase.__init__(self) self.setupUi(self) self.setObjectName("EditorPropertiesPage") self.languages = sorted(lexers.keys()[:]) # set initial values # All self.allFoldCompactCheckBox.setChecked(\ Preferences.getEditor("AllFoldCompact")) # Bash self.foldBashCommentCheckBox.setChecked(\ Preferences.getEditor("BashFoldComment")) # CMake self.cmakeFoldAtElseCheckBox.setChecked(\ Preferences.getEditor("CMakeFoldAtElse")) # C++ self.foldCppCommentCheckBox.setChecked(\ Preferences.getEditor("CppFoldComment")) self.foldCppPreprocessorCheckBox.setChecked(\ Preferences.getEditor("CppFoldPreprocessor")) self.foldCppAtElseCheckBox.setChecked(\ Preferences.getEditor("CppFoldAtElse")) self.cppIndentOpeningBraceCheckBox.setChecked(\ Preferences.getEditor("CppIndentOpeningBrace")) self.cppIndentClosingBraceCheckBox.setChecked(\ Preferences.getEditor("CppIndentClosingBrace")) self.cppCaseInsensitiveCheckBox.setChecked(\ Preferences.getEditor("CppCaseInsensitiveKeywords")) if QSCINTILLA_VERSION() >= 0x020400: self.cppDollarAllowedCheckBox.setChecked( Preferences.getEditor("CppDollarsAllowed")) else: self.cppDollarAllowedCheckBox.setEnabled(False) if QSCINTILLA_VERSION() >= 0x020500: self.cppStylePreprocessorCheckBox.setChecked( Preferences.getEditor("CppStylePreprocessor")) else: self.cppStylePreprocessorCheckBox.setEnabled(False) if QSCINTILLA_VERSION() >= 0x020600: self.cppHighlightTripleQuotedCheckBox.setChecked( Preferences.getEditor("CppHighlightTripleQuotedStrings")) else: self.cppHighlightTripleQuotedCheckBox.setEnabled(False) # CSS self.foldCssCommentCheckBox.setChecked(\ Preferences.getEditor("CssFoldComment")) # D self.foldDCommentCheckBox.setChecked(\ Preferences.getEditor("DFoldComment")) self.foldDAtElseCheckBox.setChecked(\ Preferences.getEditor("DFoldAtElse")) self.dIndentOpeningBraceCheckBox.setChecked(\ Preferences.getEditor("DIndentOpeningBrace")) self.dIndentClosingBraceCheckBox.setChecked(\ Preferences.getEditor("DIndentClosingBrace")) # HTML self.foldHtmlPreprocessorCheckBox.setChecked(\ Preferences.getEditor("HtmlFoldPreprocessor")) self.htmlCaseSensitiveTagsCheckBox.setChecked(\ Preferences.getEditor("HtmlCaseSensitiveTags")) if QSCINTILLA_VERSION() >= 0x020400: self.foldHtmlScriptCommentsCheckBox.setChecked( Preferences.getEditor("HtmlFoldScriptComments")) self.foldHtmlScriptHereDocsCheckBox.setChecked( Preferences.getEditor("HtmlFoldScriptHeredocs")) else: self.foldHtmlScriptCommentsCheckBox.setEnabled(False) self.foldHtmlScriptHereDocsCheckBox.setEnabled(False) if QSCINTILLA_VERSION() >= 0x020500: self.htmlDjangoCheckBox.setChecked( Preferences.getEditor("HtmlDjangoTemplates")) self.htmlMakoCheckBox.setChecked( Preferences.getEditor("HtmlMakoTemplates")) else: self.htmlDjangoCheckBox.setEnabled(False) self.htmlMakoCheckBox.setEnabled(False) # Pascal if "Pascal" in self.languages: self.pascalGroup.setEnabled(True) self.foldPascalCommentCheckBox.setChecked(\ Preferences.getEditor("PascalFoldComment")) self.foldPascalPreprocessorCheckBox.setChecked(\ Preferences.getEditor("PascalFoldPreprocessor")) if QSCINTILLA_VERSION() >= 0x020400: self.pascalSmartHighlightingCheckBox.setChecked( Preferences.getEditor("PascalSmartHighlighting")) else: self.pascalSmartHighlightingCheckBox.setEnabled(False) else: self.pascalGroup.setEnabled(False) # Perl self.foldPerlCommentCheckBox.setChecked(\ Preferences.getEditor("PerlFoldComment")) if QSCINTILLA_VERSION() >= 0x020400: self.foldPerlPackagesCheckBox.setChecked( Preferences.getEditor("PerlFoldPackages")) self.foldPerlPODBlocksCheckBox.setChecked( Preferences.getEditor("PerlFoldPODBlocks")) else: self.foldPerlPackagesCheckBox.setEnabled(False) self.foldPerlPODBlocksCheckBox.setEnabled(False) if QSCINTILLA_VERSION() >= 0x020600: self.foldPerlAtElseCheckBox.setChecked( Preferences.getEditor("PerlFoldAtElse")) else: self.foldPerlAtElseCheckBox.setEnabled(False) # PostScript if "PostScript" in self.languages: self.postscriptGroup.setEnabled(True) self.psFoldAtElseCheckBox.setChecked(\ Preferences.getEditor("PostScriptFoldAtElse")) self.psMarkTokensCheckBox.setChecked(\ Preferences.getEditor("PostScriptTokenize")) self.psLevelSpinBox.setValue(\ Preferences.getEditor("PostScriptLevel")) else: self.postscriptGroup.setEnabled(False) # Povray self.foldPovrayCommentCheckBox.setChecked(\ Preferences.getEditor("PovFoldComment")) self.foldPovrayDirectivesCheckBox.setChecked(\ Preferences.getEditor("PovFoldDirectives")) # Properties if QSCINTILLA_VERSION() >= 0x020500: self.propertiesInitialSpacesCheckBox.setChecked( Preferences.getEditor("PropertiesInitialSpaces")) else: self.propertiesInitialSpacesCheckBox.setEnabled(False) # Python self.foldPythonCommentCheckBox.setChecked(\ Preferences.getEditor("PythonFoldComment")) self.foldPythonStringCheckBox.setChecked(\ Preferences.getEditor("PythonFoldString")) self.pythonBadIndentationCheckBox.setChecked(\ Preferences.getEditor("PythonBadIndentation")) self.pythonAutoindentCheckBox.setChecked(\ Preferences.getEditor("PythonAutoIndent")) if QSCINTILLA_VERSION() >= 0x020400: self.pythonV2UnicodeAllowedCheckBox.setChecked( Preferences.getEditor("PythonAllowV2Unicode")) self.pythonV3BinaryAllowedCheckBox.setChecked( Preferences.getEditor("PythonAllowV3Binary")) self.pythonV3BytesAllowedCheckBox.setChecked( Preferences.getEditor("PythonAllowV3Bytes")) else: self.pythonV2UnicodeAllowedCheckBox.setEnabled(False) self.pythonV3BinaryAllowedCheckBox.setEnabled(False) self.pythonV3BytesAllowedCheckBox.setEnabled(False) if QSCINTILLA_VERSION() >= 0x020500: self.foldPythonQuotesCheckBox.setChecked( Preferences.getEditor("PythonFoldQuotes")) self.pythonStringsOverNewlineCheckBox.setChecked( Preferences.getEditor("PythonStringsOverNewLineAllowed")) else: self.foldPythonQuotesCheckBox.setEnabled(False) self.pythonStringsOverNewlineCheckBox.setEnabled(False) if QSCINTILLA_VERSION() >= 0x020600: self.pythonHighlightSubidentifierCheckBox.setChecked( Preferences.getEditor("PythonHighlightSubidentifier")) else: self.pythonHighlightSubidentifierCheckBox.setEnabled(False) # Ruby if QSCINTILLA_VERSION() >= 0x020500: self.foldRubyCommentCheckBox.setChecked( Preferences.getEditor("RubyFoldComment")) else: self.foldRubyCommentCheckBox.setEnabled(False) # SQL self.foldSqlCommentCheckBox.setChecked(\ Preferences.getEditor("SqlFoldComment")) self.sqlBackslashEscapesCheckBox.setChecked(\ Preferences.getEditor("SqlBackslashEscapes")) if QSCINTILLA_VERSION() >= 0x020500: self.sqlFoldAtElseCheckBox.setChecked( Preferences.getEditor("SqlFoldAtElse")) self.sqlFoldOnlyBeginCheckBox.setChecked( Preferences.getEditor("SqlFoldOnlyBegin")) self.sqlDottedWordsCheckBox.setChecked( Preferences.getEditor("SqlDottedWords")) self.sqlHashCommentsCheckBox.setChecked( Preferences.getEditor("SqlHashComments")) self.sqlQuotedIdentifiersCheckBox.setChecked( Preferences.getEditor("SqlQuotedIdentifiers")) else: self.sqlFoldAtElseCheckBox.setEnabled(False) self.sqlFoldOnlyBeginCheckBox.setEnabled(False) self.sqlDottedWordsCheckBox.setEnabled(False) self.sqlHashCommentsCheckBox.setEnabled(False) self.sqlQuotedIdentifiersCheckBox.setEnabled(False) # TCL if QSCINTILLA_VERSION() >= 0x020500: self.foldTclCommentCheckBox.setChecked( Preferences.getEditor("TclFoldComment")) else: self.foldTclCommentCheckBox.setEnabled(False) # TeX if QSCINTILLA_VERSION() >= 0x020500: self.foldTexCommentCheckBox.setChecked( Preferences.getEditor("TexFoldComment")) self.texProcessCommentsCheckBox.setChecked( Preferences.getEditor("TexProcessComments")) self.texProcessIfCheckBox.setChecked( Preferences.getEditor("TexProcessIf")) else: self.foldTexCommentCheckBox.setEnabled(False) self.texProcessCommentsCheckBox.setEnabled(False) self.texProcessIfCheckBox.setEnabled(False) # VHDL self.vhdlFoldCommentCheckBox.setChecked(\ Preferences.getEditor("VHDLFoldComment")) self.vhdlFoldAtElseCheckBox.setChecked(\ Preferences.getEditor("VHDLFoldAtElse")) self.vhdlFoldAtBeginCheckBox.setChecked(\ Preferences.getEditor("VHDLFoldAtBegin")) self.vhdlFoldAtParenthesisCheckBox.setChecked(\ Preferences.getEditor("VHDLFoldAtParenthesis")) # XML if QSCINTILLA_VERSION() >= 0x020400: self.xmlSyleScriptsCheckBox.setChecked( Preferences.getEditor("XMLStyleScripts")) else: self.xmlGroup.setEnabled(False) # YAML if "YAML" in self.languages: self.yamlGroup.setEnabled(True) self.foldYamlCommentCheckBox.setChecked(\ Preferences.getEditor("YAMLFoldComment")) else: self.yamlGroup.setEnabled(False) def save(self): """ Public slot to save the Editor Properties (1) configuration. """ # All Preferences.setEditor("AllFoldCompact", int(self.allFoldCompactCheckBox.isChecked())) # Bash Preferences.setEditor("BashFoldComment", int(self.foldBashCommentCheckBox.isChecked())) # CMake Preferences.setEditor("CMakeFoldAtElse", int(self.cmakeFoldAtElseCheckBox.isChecked())) # C++ Preferences.setEditor("CppFoldComment", int(self.foldCppCommentCheckBox.isChecked())) Preferences.setEditor("CppFoldPreprocessor", int(self.foldCppPreprocessorCheckBox.isChecked())) Preferences.setEditor("CppFoldAtElse", int(self.foldCppAtElseCheckBox.isChecked())) Preferences.setEditor("CppIndentOpeningBrace", int(self.cppIndentOpeningBraceCheckBox.isChecked())) Preferences.setEditor("CppIndentClosingBrace", int(self.cppIndentClosingBraceCheckBox.isChecked())) Preferences.setEditor("CppCaseInsensitiveKeywords", int(self.cppCaseInsensitiveCheckBox.isChecked())) if QSCINTILLA_VERSION() >= 0x020400: Preferences.setEditor("CppDollarsAllowed", int(self.cppDollarAllowedCheckBox.isChecked())) if QSCINTILLA_VERSION() >= 0x020500: Preferences.setEditor("CppStylePreprocessor", int(self.cppStylePreprocessorCheckBox.isChecked())) if QSCINTILLA_VERSION() >= 0x020600: Preferences.setEditor("CppHighlightTripleQuotedStrings", int(self.cppHighlightTripleQuotedCheckBox.isChecked())) # CSS Preferences.setEditor("CssFoldComment", int(self.foldCssCommentCheckBox.isChecked())) # D Preferences.setEditor("DFoldComment", int(self.foldDCommentCheckBox.isChecked())) Preferences.setEditor("DFoldAtElse", int(self.foldDAtElseCheckBox.isChecked())) Preferences.setEditor("DIndentOpeningBrace", int(self.dIndentOpeningBraceCheckBox.isChecked())) Preferences.setEditor("DIndentClosingBrace", int(self.dIndentClosingBraceCheckBox.isChecked())) # HTML Preferences.setEditor("HtmlFoldPreprocessor", int(self.foldHtmlPreprocessorCheckBox.isChecked())) Preferences.setEditor("HtmlCaseSensitiveTags", int(self.htmlCaseSensitiveTagsCheckBox.isChecked())) if QSCINTILLA_VERSION() >= 0x020400: Preferences.setEditor("HtmlFoldScriptComments", int(self.foldHtmlScriptCommentsCheckBox.isChecked())) Preferences.setEditor("HtmlFoldScriptHeredocs", int(self.foldHtmlScriptHereDocsCheckBox.isChecked())) if QSCINTILLA_VERSION() >= 0x020500: Preferences.setEditor("HtmlDjangoTemplates", int(self.htmlDjangoCheckBox.isChecked())) Preferences.setEditor("HtmlMakoTemplates", int(self.htmlMakoCheckBox.isChecked())) # Pascal if "Pascal" in self.languages: Preferences.setEditor("PascalFoldComment", int(self.foldPascalCommentCheckBox.isChecked())) Preferences.setEditor("PascalFoldPreprocessor", int(self.foldPascalPreprocessorCheckBox.isChecked())) if QSCINTILLA_VERSION() >= 0x020400: Preferences.setEditor("PascalSmartHighlighting", int(self.pascalSmartHighlightingCheckBox.isChecked())) # Perl Preferences.setEditor("PerlFoldComment", int(self.foldPerlCommentCheckBox.isChecked())) if QSCINTILLA_VERSION() >= 0x020400: Preferences.setEditor("PerlFoldPackages", int(self.foldPerlPackagesCheckBox.isChecked())) Preferences.setEditor("PerlFoldPODBlocks", int(self.foldPerlPODBlocksCheckBox.isChecked())) if QSCINTILLA_VERSION() >= 0x020600: Preferences.setEditor("PerlFoldAtElse", int(self.foldPerlAtElseCheckBox.isChecked())) # PostScript if "PostScript" in self.languages: Preferences.setEditor("PostScriptFoldAtElse", int(self.psFoldAtElseCheckBox.isChecked())) Preferences.setEditor("PostScriptTokenize", int(self.psMarkTokensCheckBox.isChecked())) Preferences.setEditor("PostScriptLevel", self.psLevelSpinBox.value()) # Povray Preferences.setEditor("PovFoldComment", int(self.foldPovrayCommentCheckBox.isChecked())) Preferences.setEditor("PovFoldDirectives", int(self.foldPovrayDirectivesCheckBox.isChecked())) # Properties if QSCINTILLA_VERSION() >= 0x020500: Preferences.setEditor("PropertiesInitialSpaces", int(self.propertiesInitialSpacesCheckBox.isChecked())) # Python Preferences.setEditor("PythonFoldComment", int(self.foldPythonCommentCheckBox.isChecked())) Preferences.setEditor("PythonFoldString", int(self.foldPythonStringCheckBox.isChecked())) Preferences.setEditor("PythonBadIndentation", int(self.pythonBadIndentationCheckBox.isChecked())) Preferences.setEditor("PythonAutoIndent", int(self.pythonAutoindentCheckBox.isChecked())) if QSCINTILLA_VERSION() >= 0x020400: Preferences.setEditor("PythonAllowV2Unicode", int(self.pythonV2UnicodeAllowedCheckBox.isChecked())) Preferences.setEditor("PythonAllowV3Binary", int(self.pythonV3BinaryAllowedCheckBox.isChecked())) Preferences.setEditor("PythonAllowV3Bytes", int(self.pythonV3BytesAllowedCheckBox.isChecked())) if QSCINTILLA_VERSION() >= 0x020500: Preferences.setEditor("PythonFoldQuotes", int(self.foldPythonQuotesCheckBox.isChecked())) Preferences.setEditor("PythonStringsOverNewLineAllowed", int(self.pythonStringsOverNewlineCheckBox.isChecked())) if QSCINTILLA_VERSION() >= 0x020600: Preferences.setEditor("PythonHighlightSubidentifier", int(self.pythonHighlightSubidentifierCheckBox.isChecked())) # Ruby if QSCINTILLA_VERSION() >= 0x020500: Preferences.setEditor("RubyFoldComment", int(self.foldRubyCommentCheckBox.isChecked())) # SQL Preferences.setEditor("SqlFoldComment", int(self.foldSqlCommentCheckBox.isChecked())) Preferences.setEditor("SqlBackslashEscapes", int(self.sqlBackslashEscapesCheckBox.isChecked())) if QSCINTILLA_VERSION() >= 0x020500: Preferences.setEditor("SqlFoldAtElse", int(self.sqlFoldAtElseCheckBox.isChecked())) Preferences.setEditor("SqlFoldOnlyBegin", int(self.sqlFoldOnlyBeginCheckBox.isChecked())) Preferences.setEditor("SqlDottedWords", int(self.sqlDottedWordsCheckBox.isChecked())) Preferences.setEditor("SqlHashComments", int(self.sqlHashCommentsCheckBox.isChecked())) Preferences.setEditor("SqlQuotedIdentifiers", int(self.sqlQuotedIdentifiersCheckBox.isChecked())) # TCL if QSCINTILLA_VERSION() >= 0x020500: Preferences.setEditor("TclFoldComment", int(self.foldTclCommentCheckBox.isChecked())) # TeX if QSCINTILLA_VERSION() >= 0x020500: Preferences.setEditor("TexFoldComment", int(self.foldTexCommentCheckBox.isChecked())) Preferences.setEditor("TexProcessComments", int(self.texProcessCommentsCheckBox.isChecked())) Preferences.setEditor("TexProcessIf", int(self.texProcessIfCheckBox.isChecked())) # VHDL Preferences.setEditor("VHDLFoldComment", int(self.vhdlFoldCommentCheckBox.isChecked())) Preferences.setEditor("VHDLFoldAtElse", int(self.vhdlFoldAtElseCheckBox.isChecked())) Preferences.setEditor("VHDLFoldAtBegin", int(self.vhdlFoldAtBeginCheckBox.isChecked())) Preferences.setEditor("VHDLFoldAtParenthesis", int(self.vhdlFoldAtParenthesisCheckBox.isChecked())) # XML if QSCINTILLA_VERSION() >= 0x020400: Preferences.setEditor("XMLStyleScripts", int(self.xmlSyleScriptsCheckBox.isChecked())) # YAML if "YAML" in self.languages: Preferences.setEditor("YAMLFoldComment", int(self.foldYamlCommentCheckBox.isChecked())) def create(dlg): """ Module function to create the configuration page. @param dlg reference to the configuration dialog """ page = EditorPropertiesPage(dlg.getLexers()) return page eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/EditorTypingPage.py0000644000175000001440000000013212261012650026324 xustar000000000000000030 mtime=1388582312.892088396 30 atime=1389081083.683724386 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/EditorTypingPage.py0000644000175000001440000001542212261012650026062 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing the Editor Typing configuration page. """ from PyQt4.QtCore import QVariant, pyqtSignature from ConfigurationPageBase import ConfigurationPageBase from Ui_EditorTypingPage import Ui_EditorTypingPage import Preferences class EditorTypingPage(ConfigurationPageBase, Ui_EditorTypingPage): """ Class implementing the Editor Typing configuration page. """ def __init__(self): """ Constructor """ ConfigurationPageBase.__init__(self) self.setupUi(self) self.setObjectName("EditorTypingPage") # set initial values self.pageIds = {} self.pageIds[' '] = self.stackedWidget.indexOf(self.emptyPage) self.pageIds['Python'] = self.stackedWidget.indexOf(self.pythonPage) self.pageIds['Ruby'] = self.stackedWidget.indexOf(self.rubyPage) languages = self.pageIds.keys() languages.sort() for language in languages: self.languageCombo.addItem(language, QVariant(self.pageIds[language])) # Python self.pythonGroup.setChecked(\ Preferences.getEditorTyping("Python/EnabledTypingAids")) self.pythonInsertClosingBraceCheckBox.setChecked(\ Preferences.getEditorTyping("Python/InsertClosingBrace")) self.pythonSkipBraceCheckBox.setChecked(\ Preferences.getEditorTyping("Python/SkipBrace")) self.pythonIndentBraceCheckBox.setChecked(\ Preferences.getEditorTyping("Python/IndentBrace")) self.pythonInsertQuoteCheckBox.setChecked(\ Preferences.getEditorTyping("Python/InsertQuote")) self.pythonDedentElseCheckBox.setChecked(\ Preferences.getEditorTyping("Python/DedentElse")) self.pythonDedentExceptCheckBox.setChecked(\ Preferences.getEditorTyping("Python/DedentExcept")) self.pythonDedentExceptPy24CheckBox.setChecked(\ Preferences.getEditorTyping("Python/Py24StyleTry")) self.pythonInsertImportCheckBox.setChecked(\ Preferences.getEditorTyping("Python/InsertImport")) self.pythonInsertSelfCheckBox.setChecked(\ Preferences.getEditorTyping("Python/InsertSelf")) self.pythonInsertBlankCheckBox.setChecked(\ Preferences.getEditorTyping("Python/InsertBlank")) self.pythonColonDetectionCheckBox.setChecked(\ Preferences.getEditorTyping("Python/ColonDetection")) self.pythonDedentDefCheckBox.setChecked( Preferences.getEditorTyping("Python/DedentDef")) # Ruby self.rubyGroup.setChecked(\ Preferences.getEditorTyping("Ruby/EnabledTypingAids")) self.rubyInsertClosingBraceCheckBox.setChecked(\ Preferences.getEditorTyping("Ruby/InsertClosingBrace")) self.rubySkipBraceCheckBox.setChecked(\ Preferences.getEditorTyping("Ruby/SkipBrace")) self.rubyIndentBraceCheckBox.setChecked(\ Preferences.getEditorTyping("Ruby/IndentBrace")) self.rubyInsertQuoteCheckBox.setChecked(\ Preferences.getEditorTyping("Ruby/InsertQuote")) self.rubyInsertBlankCheckBox.setChecked(\ Preferences.getEditorTyping("Ruby/InsertBlank")) self.rubyInsertHereDocCheckBox.setChecked(\ Preferences.getEditorTyping("Ruby/InsertHereDoc")) self.rubyInsertInlineDocCheckBox.setChecked(\ Preferences.getEditorTyping("Ruby/InsertInlineDoc")) self.on_languageCombo_activated(' ') def save(self): """ Public slot to save the Editor Typing configuration. """ # Python Preferences.setEditorTyping("Python/EnabledTypingAids", int(self.pythonGroup.isChecked())) Preferences.setEditorTyping("Python/InsertClosingBrace", int(self.pythonInsertClosingBraceCheckBox.isChecked())) Preferences.setEditorTyping("Python/SkipBrace", int(self.pythonSkipBraceCheckBox.isChecked())) Preferences.setEditorTyping("Python/IndentBrace", int(self.pythonIndentBraceCheckBox.isChecked())) Preferences.setEditorTyping("Python/InsertQuote", int(self.pythonInsertQuoteCheckBox.isChecked())) Preferences.setEditorTyping("Python/DedentElse", int(self.pythonDedentElseCheckBox.isChecked())) Preferences.setEditorTyping("Python/DedentExcept", int(self.pythonDedentExceptCheckBox.isChecked())) Preferences.setEditorTyping("Python/Py24StyleTry", int(self.pythonDedentExceptPy24CheckBox.isChecked())) Preferences.setEditorTyping("Python/InsertImport", int(self.pythonInsertImportCheckBox.isChecked())) Preferences.setEditorTyping("Python/InsertSelf", int(self.pythonInsertSelfCheckBox.isChecked())) Preferences.setEditorTyping("Python/InsertBlank", int(self.pythonInsertBlankCheckBox.isChecked())) Preferences.setEditorTyping("Python/ColonDetection", int(self.pythonColonDetectionCheckBox.isChecked())) Preferences.setEditorTyping("Python/DedentDef", int(self.pythonDedentDefCheckBox.isChecked())) # Ruby Preferences.setEditorTyping("Ruby/EnabledTypingAids", int(self.rubyGroup.isChecked())) Preferences.setEditorTyping("Ruby/InsertClosingBrace", int(self.rubyInsertClosingBraceCheckBox.isChecked())) Preferences.setEditorTyping("Ruby/SkipBrace", int(self.rubySkipBraceCheckBox.isChecked())) Preferences.setEditorTyping("Ruby/IndentBrace", int(self.rubyIndentBraceCheckBox.isChecked())) Preferences.setEditorTyping("Ruby/InsertQuote", int(self.rubyInsertQuoteCheckBox.isChecked())) Preferences.setEditorTyping("Ruby/InsertBlank", int(self.rubyInsertBlankCheckBox.isChecked())) Preferences.setEditorTyping("Ruby/InsertHereDoc", int(self.rubyInsertHereDocCheckBox.isChecked())) Preferences.setEditorTyping("Ruby/InsertInlineDoc", int(self.rubyInsertInlineDocCheckBox.isChecked())) @pyqtSignature("QString") def on_languageCombo_activated(self, language): """ Private slot to select the page related to the selected language. @param language name of the selected language (QString) """ try: index = self.pageIds[str(language)] except KeyError: index = self.pageIds[' '] self.stackedWidget.setCurrentIndex(index) def create(dlg): """ Module function to create the configuration page. @param dlg reference to the configuration dialog """ page = EditorTypingPage() return page eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/EditorHighlightingStylesPage.ui0000644000175000001440000000013212165762100030655 xustar000000000000000030 mtime=1373103168.595975866 30 atime=1389081083.688724386 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/EditorHighlightingStylesPage.ui0000644000175000001440000002037712165762100030420 0ustar00detlevusers00000000000000 EditorHighlightingStylesPage 0 0 550 592 <b>Configure syntax highlighting</b> QFrame::HLine QFrame::Sunken Qt::Horizontal Lexer Language: 0 0 Select the lexer language to be configured. Style Element QAbstractItemView::ExtendedSelection Select the foreground colour. Foreground Colour Select the background colour. Background Colour Select the font. Font Select end of line fill. Fill to end of line Qt::Horizontal Press to set the current style to its default values to Default Qt::Vertical 20 51 Select the background colour for all styles All Background Colours Select the font for all styles. All Fonts Select the eol fill for all styles All Fill to end of line Qt::Horizontal Press to set all styles to their default values All to Default Qt::NoFocus Sample Text Qt::AlignHCenter true false Imports all styles of the currently selected language Import styles false Exports all styles of the currently selected language Export styles Imports all styles of all languages Import all styles Exports all styles of all languages Export all styles lexerLanguageComboBox styleElementList foregroundButton backgroundButton fontButton eolfillCheckBox defaultButton allBackgroundColoursButton allFontsButton allEolFillButton allDefaultButton eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/EditorGeneralPage.ui0000644000175000001440000000013212034017357026423 xustar000000000000000030 mtime=1349525231.939420692 30 atime=1389081083.689724386 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/EditorGeneralPage.ui0000644000175000001440000002052012034017357026154 0ustar00detlevusers00000000000000 EditorGeneralPage 0 0 553 593 <b>Configure general editor settings</b> QFrame::HLine QFrame::Sunken Qt::Horizontal Tabs && Indentation Tab width: tabwidthSlider Move to set the tab width. 1 20 4 Qt::Horizontal 1 Displays the selected tab width. 2 QLCDNumber::Flat 4.000000000000000 Indentation width: indentwidthSlider Move to set the indentation width. 1 20 4 Qt::Horizontal 1 Displays the selected indentation width. 2 QLCDNumber::Flat 4.000000000000000 Select whether indentation guides should be shown. Show Indentation Guides Select whether tab characters are used for indentations. Use tabs for indentations Select whether autoindentation shall be enabled Auto indentation Select whether tabs shall be converted upon opening the file Convert tabs upon open Select whether pressing the tab key indents. Tab key indents Comments Select to insert the comment sign at column 0 <b>Insert comment at column 0</b><p>Select to insert the comment sign at column 0. Otherwise, the comment sign is inserted at the first non-whitespace position.</p> Insert comment at column 0 Qt::Vertical 535 101 tabwidthSlider indentwidthSlider indentguidesCheckBox autoindentCheckBox tabindentsCheckBox tabforindentationCheckBox converttabsCheckBox tabwidthSlider valueChanged(int) tabwidthLCD display(int) 384 81 415 82 indentwidthSlider valueChanged(int) indentwidthLCD display(int) 384 110 410 110 eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/EditorHighlightersPage.ui0000644000175000001440000000007411133175472027476 xustar000000000000000030 atime=1389081083.689724386 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/EditorHighlightersPage.ui0000644000175000001440000000733011133175472027226 0ustar00detlevusers00000000000000 EditorHighlightersPage 0 0 400 361 <b>Configure syntax highlighters</b> QFrame::HLine QFrame::Sunken Qt::Horizontal true false true Filename Pattern Lexer Language Filename Pattern: Enter the filename pattern to be associated Press to add or change the entered association Add/Change Lexer Language: Select the lexer language to associate Press to delete the selected association Delete Alternative Lexer: Select the alternative lexer to associate editorLexerList editorFileExtEdit editorLexerCombo pygmentsLexerCombo addLexerButton deleteLexerButton eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/IconsPage.py0000644000175000001440000000013212261012650024756 xustar000000000000000030 mtime=1388582312.905088561 30 atime=1389081083.706724386 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/IconsPage.py0000644000175000001440000001351712261012650024517 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing the Icons configuration page. """ from PyQt4.QtCore import QDir, QString, QStringList, pyqtSignature from PyQt4.QtGui import QListWidgetItem, QFileDialog from KdeQt import KQFileDialog from E4Gui.E4Completers import E4DirCompleter from ConfigurationPageBase import ConfigurationPageBase from IconsPreviewDialog import IconsPreviewDialog from Ui_IconsPage import Ui_IconsPage import Preferences import Utilities class IconsPage(ConfigurationPageBase, Ui_IconsPage): """ Class implementing the Icons configuration page. """ def __init__(self): """ Constructor """ ConfigurationPageBase.__init__(self) self.setupUi(self) self.setObjectName("IconsPage") self.iconDirectoryCompleter = E4DirCompleter(self.iconDirectoryEdit) # set initial values dirList = QStringList(Preferences.getIcons("Path")) for dir in dirList: if not dir.isEmpty(): QListWidgetItem(dir, self.iconDirectoryList) def save(self): """ Public slot to save the Icons configuration. """ dirList = QStringList() for i in range(self.iconDirectoryList.count()): dirList.append(self.iconDirectoryList.item(i).text()) Preferences.setIcons("Path", dirList) def on_iconDirectoryList_currentRowChanged(self, row): """ Private slot to handle the currentRowChanged signal of the icons directory list. @param row the current row (integer) """ if row == -1: self.deleteIconDirectoryButton.setEnabled(False) self.upButton.setEnabled(False) self.downButton.setEnabled(False) self.showIconsButton.setEnabled(\ not self.iconDirectoryEdit.text().isEmpty()) else: maxIndex = self.iconDirectoryList.count() - 1 self.upButton.setEnabled(row != 0) self.downButton.setEnabled(row != maxIndex) self.deleteIconDirectoryButton.setEnabled(True) self.showIconsButton.setEnabled(True) def on_iconDirectoryEdit_textChanged(self, txt): """ Private slot to handle the textChanged signal of the directory edit. @param txt the text of the directory edit (QString) """ self.addIconDirectoryButton.setEnabled(not txt.isEmpty()) self.showIconsButton.setEnabled(not txt.isEmpty() or \ self.iconDirectoryList.currentRow() != -1) @pyqtSignature("") def on_upButton_clicked(self): """ Private slot called to move the selected item up in the list. """ row = self.iconDirectoryList.currentRow() if row == 0: # we're already at the top return itm = self.iconDirectoryList.takeItem(row) self.iconDirectoryList.insertItem(row - 1, itm) self.iconDirectoryList.setCurrentItem(itm) if row == 1: self.upButton.setEnabled(False) else: self.upButton.setEnabled(True) self.downButton.setEnabled(True) @pyqtSignature("") def on_downButton_clicked(self): """ Private slot called to move the selected item down in the list. """ rows = self.iconDirectoryList.count() row = self.iconDirectoryList.currentRow() if row == rows - 1: # we're already at the end return itm = self.iconDirectoryList.takeItem(row) self.iconDirectoryList.insertItem(row + 1, itm) self.iconDirectoryList.setCurrentItem(itm) self.upButton.setEnabled(True) if row == rows - 2: self.downButton.setEnabled(False) else: self.downButton.setEnabled(True) @pyqtSignature("") def on_iconDirectoryButton_clicked(self): """ Private slot to select an icon directory. """ dir = KQFileDialog.getExistingDirectory(\ None, self.trUtf8("Select icon directory"), QString(), QFileDialog.Options(QFileDialog.ShowDirsOnly)) if not dir.isEmpty(): self.iconDirectoryEdit.setText(Utilities.toNativeSeparators(dir)) @pyqtSignature("") def on_addIconDirectoryButton_clicked(self): """ Private slot to add the icon directory displayed to the listbox. """ dir = self.iconDirectoryEdit.text() if not dir.isEmpty(): QListWidgetItem(dir, self.iconDirectoryList) self.iconDirectoryEdit.clear() row = self.iconDirectoryList.currentRow() self.on_iconDirectoryList_currentRowChanged(row) @pyqtSignature("") def on_deleteIconDirectoryButton_clicked(self): """ Private slot to delete the currently selected directory of the listbox. """ row = self.iconDirectoryList.currentRow() itm = self.iconDirectoryList.takeItem(row) del itm row = self.iconDirectoryList.currentRow() self.on_iconDirectoryList_currentRowChanged(row) @pyqtSignature("") def on_showIconsButton_clicked(self): """ Private slot to display a preview of an icons directory. """ dir = self.iconDirectoryEdit.text() if dir.isEmpty(): itm = self.iconDirectoryList.currentItem() if itm is not None: dir = itm.text() if not dir.isEmpty(): dlg = IconsPreviewDialog(self, dir) dlg.exec_() def create(dlg): """ Module function to create the configuration page. @param dlg reference to the configuration dialog """ page = IconsPage() return page eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/ShellPage.ui0000644000175000001440000000013212140204614024736 xustar000000000000000030 mtime=1367411084.326132187 30 atime=1389081083.706724386 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/ShellPage.ui0000644000175000001440000001572312140204614024500 0ustar00detlevusers00000000000000 ShellPage 0 0 587 538 <b>Configure Shell</b> QFrame::HLine QFrame::Sunken Qt::Horizontal Select whether line numbers margin should be shown. Show Line Numbers Margin Select this to enable calltips Calltips Enabled Select to enable wrapping at word boundaries Word Wrap Enabled Select this to enable autocompletion Autocompletion Enabled Select to enable syntax highlighting Syntax Highlighting Enabled max. History Entries: Enter the number of history entries allowed 10 1000 10 100 Qt::Horizontal QSizePolicy::Expanding 40 20 Select to show debuggee stdout and stderr Show stdout and stderr of debuggee Font Press to select the font to be used as the monospaced font Monospaced Font Qt::NoFocus Monospaced Text Qt::AlignHCenter true Select, whether the monospaced font should be used as default Use monospaced as default Press to select the font for the line numbers Line Numbers Font 200 0 Qt::NoFocus 2345 Qt::AlignHCenter true Qt::Vertical 20 40 shellLinenoCheckBox shellACEnabledCheckBox shellSyntaxHighlightingCheckBox shellWordWrapCheckBox shellCTEnabledCheckBox shellHistorySpinBox eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/EditorAutocompletionPage.py0000644000175000001440000000013212261012650030054 xustar000000000000000030 mtime=1388582312.907088586 30 atime=1389081083.717724385 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/EditorAutocompletionPage.py0000644000175000001440000000362112261012650027610 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing the Editor Autocompletion configuration page. """ from ConfigurationPageBase import ConfigurationPageBase from Ui_EditorAutocompletionPage import Ui_EditorAutocompletionPage import Preferences class EditorAutocompletionPage(ConfigurationPageBase, Ui_EditorAutocompletionPage): """ Class implementing the Editor Autocompletion configuration page. """ def __init__(self): """ Constructor """ ConfigurationPageBase.__init__(self) self.setupUi(self) self.setObjectName("EditorAutocompletionPage") # set initial values self.acEnabledCheckBox.setChecked(\ Preferences.getEditor("AutoCompletionEnabled")) self.acCaseSensitivityCheckBox.setChecked(\ Preferences.getEditor("AutoCompletionCaseSensitivity")) self.acReplaceWordCheckBox.setChecked(\ Preferences.getEditor("AutoCompletionReplaceWord")) self.acThresholdSlider.setValue(\ Preferences.getEditor("AutoCompletionThreshold")) def save(self): """ Public slot to save the Editor Autocompletion configuration. """ Preferences.setEditor("AutoCompletionEnabled", int(self.acEnabledCheckBox.isChecked())) Preferences.setEditor("AutoCompletionCaseSensitivity", int(self.acCaseSensitivityCheckBox.isChecked())) Preferences.setEditor("AutoCompletionReplaceWord", int(self.acReplaceWordCheckBox.isChecked())) Preferences.setEditor("AutoCompletionThreshold", self.acThresholdSlider.value()) def create(dlg): """ Module function to create the configuration page. @param dlg reference to the configuration dialog """ page = EditorAutocompletionPage() return page eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/TrayStarterPage.py0000644000175000001440000000013212261012650026167 xustar000000000000000030 mtime=1388582312.911088637 30 atime=1389081083.718724386 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/TrayStarterPage.py0000644000175000001440000000427712261012650025733 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2010 - 2014 Detlev Offenbach # """ Module implementing the tray starter configuration page. """ from .ConfigurationPageBase import ConfigurationPageBase from .Ui_TrayStarterPage import Ui_TrayStarterPage import Preferences import UI.PixmapCache class TrayStarterPage(ConfigurationPageBase, Ui_TrayStarterPage): """ Class implementing the tray starter configuration page. """ def __init__(self, parent = None): """ Constructor @param parent reference to the parent widget (QWidget) """ ConfigurationPageBase.__init__(self) self.setupUi(self) self.setObjectName("Py3FlakesPage") self.standardButton.setIcon(UI.PixmapCache.getIcon("erict.png")) self.highContrastButton.setIcon(UI.PixmapCache.getIcon("erict-hc.png")) self.blackWhiteButton.setIcon(UI.PixmapCache.getIcon("erict-bw.png")) self.blackWhiteInverseButton.setIcon(UI.PixmapCache.getIcon("erict-bwi.png")) # set initial values iconName = Preferences.getTrayStarter("TrayStarterIcon") if iconName == "erict.png": self.standardButton.setChecked(True) elif iconName == "erict-hc.png": self.highContrastButton.setChecked(True) elif iconName == "erict-bw.png": self.blackWhiteButton.setChecked(True) elif iconName == "erict-bwi.png": self.blackWhiteInverseButton.setChecked(True) def save(self): """ Public slot to save the Python configuration. """ if self.standardButton.isChecked(): iconName = "erict.png" elif self.highContrastButton.isChecked(): iconName = "erict-hc.png" elif self.blackWhiteButton.isChecked(): iconName = "erict-bw.png" elif self.blackWhiteInverseButton.isChecked(): iconName = "erict-bwi.png" Preferences.setTrayStarter("TrayStarterIcon", iconName) def create(dlg): """ Module function to create the configuration page. @param dlg reference to the configuration dialog """ page = TrayStarterPage() return page eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/ViewmanagerPage.ui0000644000175000001440000000007411072705635026155 xustar000000000000000030 atime=1389081083.718724386 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/ViewmanagerPage.ui0000644000175000001440000001403511072705635025705 0ustar00detlevusers00000000000000 ViewmanagerPage 0 0 406 315 <b>Configure viewmanager</b> QFrame::HLine QFrame::Sunken Qt::Horizontal <font color="#FF0000"><b>Note:</b> This setting is activated at the next startup of the application.</font> Window view: windowComboBox 0 0 Select the window view type. The kind of window view can be selected from this list. The picture below gives an example of the selected view type. Preview of selected window view This displays a small preview of the selected window view. This is the way the source windows are displayed in the application. false Qt::AlignCenter Qt::Horizontal false Tabbed View Filename Length of Tab: Enter the number of characters to be shown in the tab. 1 100 40 Qt::Horizontal 81 20 Select to display the filename only Show filename only Recent Files Number of recent files: Enter the number of recent files to remember Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 5 50 Qt::Horizontal 40 20 Qt::Vertical 388 20 eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/HelpAppearancePage.ui0000644000175000001440000000007411572371751026563 xustar000000000000000030 atime=1389081083.718724386 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/HelpAppearancePage.ui0000644000175000001440000001604411572371751026315 0ustar00detlevusers00000000000000 HelpAppearancePage 0 0 497 440 <b>Configure help viewer appearance</b> QFrame::HLine QFrame::Sunken Qt::Horizontal Fonts Press to select the standard font Standard Font Qt::NoFocus Times 16 Qt::AlignHCenter true Press to select the fixed-width font Fixed-Width Font Qt::NoFocus Courier 13 Qt::AlignHCenter true Colours Background colour of secure URLs: 100 0 Select the background colour for secure URLs. Qt::Horizontal 141 20 Images Select to load images Load images Style Sheet User Style Sheet: Enter the file name of a user style sheet Select the user style sheet via a file selection dialog ... QFrame::HLine QFrame::Sunken Qt::Horizontal <font color="#FF0000"><b>Note:</b> All settings below are activated at the next startup of the application.</font> Tabs Show only one close button instead of one for each tab Qt::Vertical 479 121 standardFontButton fixedFontButton secureURLsColourButton autoLoadImagesCheckBox styleSheetEdit styleSheetButton eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/EditorAPIsPage.ui0000644000175000001440000000007411072705635025653 xustar000000000000000030 atime=1389081083.719724386 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/EditorAPIsPage.ui0000644000175000001440000001360011072705635025400 0ustar00detlevusers00000000000000 EditorAPIsPage 0 0 462 422 <b>Configure API files</b> QFrame::HLine QFrame::Sunken Qt::Horizontal Select to compile the APIs automatically upon loading Compile APIs automatically Language: 0 0 Select the language to be configured. false APIs List of API files true Press to delete the selected file from the list Delete Press to add the entered file to the list Add Enter a file to be added Press to select an API file via a selection dialog ... Press to select an API file from the list of installed API files Add from installed APIs Press to select an API file from the list of API files installed by plugins Add from Plugin APIs Qt::Horizontal Press to compile the selected APIs definition Compile APIs 0 false Qt::Horizontal apiAutoPrepareCheckBox apiLanguageComboBox apiList deleteApiFileButton apiFileEdit apiFileButton addApiFileButton addInstalledApiFileButton addPluginApiFileButton prepareApiButton eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/MultiProjectPage.py0000644000175000001440000000013212261012650026324 xustar000000000000000030 mtime=1388582312.922088777 30 atime=1389081083.719724386 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/MultiProjectPage.py0000644000175000001440000000511012261012650026053 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2008 - 2014 Detlev Offenbach # """ Module implementing the Multi Project configuration page. """ from PyQt4.QtCore import pyqtSignature from PyQt4.QtGui import QFileDialog from ConfigurationPageBase import ConfigurationPageBase from Ui_MultiProjectPage import Ui_MultiProjectPage from KdeQt import KQFileDialog import Preferences import Utilities class MultiProjectPage(ConfigurationPageBase, Ui_MultiProjectPage): """ Class implementing the Multi Project configuration page. """ def __init__(self): """ Constructor """ ConfigurationPageBase.__init__(self) self.setupUi(self) self.setObjectName("MultiProjectPage") # set initial values self.openMasterAutomaticallyCheckBox.setChecked(\ Preferences.getMultiProject("OpenMasterAutomatically")) self.multiProjectTimestampCheckBox.setChecked(\ Preferences.getMultiProject("XMLTimestamp")) self.multiProjectRecentSpinBox.setValue( Preferences.getMultiProject("RecentNumber")) self.workspaceEdit.setText( Utilities.toNativeSeparators( Preferences.getMultiProject("Workspace") or Utilities.getHomeDir())) def save(self): """ Public slot to save the Project configuration. """ Preferences.setMultiProject("OpenMasterAutomatically", int(self.openMasterAutomaticallyCheckBox.isChecked())) Preferences.setMultiProject("XMLTimestamp", int(self.multiProjectTimestampCheckBox.isChecked())) Preferences.setMultiProject("RecentNumber", self.multiProjectRecentSpinBox.value()) Preferences.setMultiProject("Workspace", self.workspaceEdit.text()) @pyqtSignature("") def on_workspaceButton_clicked(self): """ Private slot to display a directory selection dialog. """ default = self.workspaceEdit.text() if default.isEmpty(): default = Utilities.getHomeDir() directory = KQFileDialog.getExistingDirectory( self, self.trUtf8("Select Workspace Directory"), default, QFileDialog.Options(0)) if not directory.isEmpty(): self.workspaceEdit.setText(Utilities.toNativeSeparators(directory)) def create(dlg): """ Module function to create the configuration page. @param dlg reference to the configuration dialog """ page = MultiProjectPage() return page eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/NetworkPage.py0000644000175000001440000000013212261012650025334 xustar000000000000000030 mtime=1388582312.924088802 30 atime=1389081083.719724386 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/NetworkPage.py0000644000175000001440000000733112261012650025072 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2008 - 2014 Detlev Offenbach # """ Module implementing the Network configuration page. """ import os from PyQt4.QtCore import QVariant, pyqtSignature from PyQt4.QtGui import QFileDialog from KdeQt import KQFileDialog from E4Gui.E4Completers import E4DirCompleter from ConfigurationPageBase import ConfigurationPageBase from Ui_NetworkPage import Ui_NetworkPage import Preferences import Utilities class NetworkPage(ConfigurationPageBase, Ui_NetworkPage): """ Class implementing the Network configuration page. """ def __init__(self): """ Constructor """ ConfigurationPageBase.__init__(self) self.setupUi(self) self.setObjectName("NetworkPage") self.downloadDirCompleter = E4DirCompleter(self.downloadDirEdit) self.proxyTypeCombo.addItem(self.trUtf8("Transparent HTTP"), QVariant(0)) self.proxyTypeCombo.addItem(self.trUtf8("Caching HTTP"), QVariant(1)) self.proxyTypeCombo.addItem(self.trUtf8("Socks5"), QVariant(2)) # set initial values self.downloadDirEdit.setText(Preferences.getUI("DownloadPath")) self.requestFilenameCheckBox.setChecked( Preferences.getUI("RequestDownloadFilename")) self.proxyGroup.setChecked(\ Preferences.getUI("UseProxy")) if Preferences.getUI("UseSystemProxy"): self.systemProxyButton.setChecked(True) else: self.manualProxyButton.setChecked(True) self.proxyTypeCombo.setCurrentIndex(self.proxyTypeCombo.findData(\ QVariant(Preferences.getUI("ProxyType")))) self.proxyHostEdit.setText(\ Preferences.getUI("ProxyHost")) self.proxyUserEdit.setText(\ Preferences.getUI("ProxyUser")) self.proxyPasswordEdit.setText(\ Preferences.getUI("ProxyPassword")) self.proxyPortSpin.setValue(\ Preferences.getUI("ProxyPort")) def save(self): """ Public slot to save the Application configuration. """ Preferences.setUI("DownloadPath", self.downloadDirEdit.text()) Preferences.setUI("RequestDownloadFilename", int(self.requestFilenameCheckBox.isChecked())) Preferences.setUI("UseProxy", int(self.proxyGroup.isChecked())) Preferences.setUI("UseSystemProxy", int(self.systemProxyButton.isChecked())) Preferences.setUI("ProxyType", self.proxyTypeCombo.itemData(self.proxyTypeCombo.currentIndex()).toInt()[0]) Preferences.setUI("ProxyHost", self.proxyHostEdit.text()) Preferences.setUI("ProxyUser", self.proxyUserEdit.text()) Preferences.setUI("ProxyPassword", self.proxyPasswordEdit.text()) Preferences.setUI("ProxyPort", self.proxyPortSpin.value()) @pyqtSignature("") def on_downloadDirButton_clicked(self): """ Private slot to handle the directory selection via dialog. """ directory = KQFileDialog.getExistingDirectory(\ self, self.trUtf8("Select download directory"), self.downloadDirEdit.text(), QFileDialog.Options(QFileDialog.ShowDirsOnly)) if not directory.isNull(): dn = unicode(Utilities.toNativeSeparators(directory)) while dn.endswith(os.sep): dn = dn[:-1] self.downloadDirEdit.setText(dn) def create(dlg): """ Module function to create the configuration page. @param dlg reference to the configuration dialog """ page = NetworkPage() return page eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/EditorExportersPage.py0000644000175000001440000000013212261012650027045 xustar000000000000000030 mtime=1388582312.933088917 30 atime=1389081083.732724386 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/EditorExportersPage.py0000644000175000001440000001531112261012650026600 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing the Editor Exporters configuration page. """ from PyQt4.QtCore import QVariant, pyqtSignature from KdeQt import KQFontDialog from ConfigurationPageBase import ConfigurationPageBase from Ui_EditorExportersPage import Ui_EditorExportersPage import Preferences class EditorExportersPage(ConfigurationPageBase, Ui_EditorExportersPage): """ Class implementing the Editor Typing configuration page. """ def __init__(self): """ Constructor """ ConfigurationPageBase.__init__(self) self.setupUi(self) self.setObjectName("EditorExportersPage") # set initial values self.pageIds = {} self.pageIds[' '] = self.stackedWidget.indexOf(self.emptyPage) self.pageIds['HTML'] = self.stackedWidget.indexOf(self.htmlPage) self.pageIds['PDF'] = self.stackedWidget.indexOf(self.pdfPage) self.pageIds['RTF'] = self.stackedWidget.indexOf(self.rtfPage) self.pageIds['TeX'] = self.stackedWidget.indexOf(self.texPage) exporters = self.pageIds.keys() exporters.sort() for exporter in exporters: self.exportersCombo.addItem(exporter, QVariant(self.pageIds[exporter])) self.pdfFontCombo.addItem(self.trUtf8("Courier"), QVariant("Courier")) self.pdfFontCombo.addItem(self.trUtf8("Helvetica"), QVariant("Helvetica")) self.pdfFontCombo.addItem(self.trUtf8("Times"), QVariant("Times")) self.pdfPageSizeCombo.addItem(self.trUtf8("A4"), QVariant("A4")) self.pdfPageSizeCombo.addItem(self.trUtf8("Letter"), QVariant("Letter")) # HTML self.htmlWysiwygCheckBox.setChecked(\ Preferences.getEditorExporter("HTML/WYSIWYG")) self.htmlFoldingCheckBox.setChecked(\ Preferences.getEditorExporter("HTML/Folding")) self.htmlStylesCheckBox.setChecked(\ Preferences.getEditorExporter("HTML/OnlyStylesUsed")) self.htmlTitleCheckBox.setChecked(\ Preferences.getEditorExporter("HTML/FullPathAsTitle")) self.htmlTabsCheckBox.setChecked(\ Preferences.getEditorExporter("HTML/UseTabs")) # PDF self.pdfMagnificationSlider.setValue(\ Preferences.getEditorExporter("PDF/Magnification")) ind = self.pdfFontCombo.findData(QVariant(\ Preferences.getEditorExporter("PDF/Font"))) self.pdfFontCombo.setCurrentIndex(ind) ind = self.pdfPageSizeCombo.findData(QVariant(\ Preferences.getEditorExporter("PDF/PageSize"))) self.pdfPageSizeCombo.setCurrentIndex(ind) self.pdfMarginTopSpin.setValue(\ Preferences.getEditorExporter("PDF/MarginTop")) self.pdfMarginBottomSpin.setValue(\ Preferences.getEditorExporter("PDF/MarginBottom")) self.pdfMarginLeftSpin.setValue(\ Preferences.getEditorExporter("PDF/MarginLeft")) self.pdfMarginRightSpin.setValue(\ Preferences.getEditorExporter("PDF/MarginRight")) # RTF self.rtfWysiwygCheckBox.setChecked(\ Preferences.getEditorExporter("RTF/WYSIWYG")) self.rtfTabsCheckBox.setChecked(\ Preferences.getEditorExporter("RTF/UseTabs")) self.rtfFont = Preferences.getEditorExporter("RTF/Font") self.rtfFontSample.setFont(self.rtfFont) # TeX self.texStylesCheckBox.setChecked(\ Preferences.getEditorExporter("TeX/OnlyStylesUsed")) self.texTitleCheckBox.setChecked(\ Preferences.getEditorExporter("TeX/FullPathAsTitle")) self.on_exportersCombo_activated(' ') def save(self): """ Public slot to save the Editor Typing configuration. """ # HTML Preferences.setEditorExporter("HTML/WYSIWYG", int(self.htmlWysiwygCheckBox.isChecked())) Preferences.setEditorExporter("HTML/Folding", int(self.htmlFoldingCheckBox.isChecked())) Preferences.setEditorExporter("HTML/OnlyStylesUsed", int(self.htmlStylesCheckBox.isChecked())) Preferences.setEditorExporter("HTML/FullPathAsTitle", int(self.htmlTitleCheckBox.isChecked())) Preferences.setEditorExporter("HTML/UseTabs", int(self.htmlTabsCheckBox.isChecked())) # PDF Preferences.setEditorExporter("PDF/Magnification", self.pdfMagnificationSlider.value()) Preferences.setEditorExporter("PDF/Font", self.pdfFontCombo.itemData(self.pdfFontCombo.currentIndex())\ .toString()) Preferences.setEditorExporter("PDF/PageSize", self.pdfPageSizeCombo.itemData(self.pdfPageSizeCombo.currentIndex())\ .toString()) Preferences.setEditorExporter("PDF/MarginTop", self.pdfMarginTopSpin.value()) Preferences.setEditorExporter("PDF/MarginBottom", self.pdfMarginBottomSpin.value()) Preferences.setEditorExporter("PDF/MarginLeft", self.pdfMarginLeftSpin.value()) Preferences.setEditorExporter("PDF/MarginRight", self.pdfMarginRightSpin.value()) # RTF Preferences.setEditorExporter("RTF/WYSIWYG", int(self.rtfWysiwygCheckBox.isChecked())) Preferences.setEditorExporter("RTF/UseTabs", int(self.rtfTabsCheckBox.isChecked())) Preferences.setEditorExporter("RTF/Font", self.rtfFont) # TeX Preferences.setEditorExporter("TeX/OnlyStylesUsed", int(self.texStylesCheckBox.isChecked())) Preferences.setEditorExporter("TeX/FullPathAsTitle", int(self.texTitleCheckBox.isChecked())) @pyqtSignature("QString") def on_exportersCombo_activated(self, exporter): """ Private slot to select the page related to the selected exporter. @param exporter name of the selected exporter (QString) """ try: index = self.pageIds[str(exporter)] except KeyError: index = self.pageIds[' '] self.stackedWidget.setCurrentIndex(index) @pyqtSignature("") def on_rtfFontButton_clicked(self): """ Private method used to select the font for the RTF export. """ font, ok = KQFontDialog.getFont(self.rtfFont) if ok: self.rtfFontSample.setFont(font) self.rtfFont = font def create(dlg): """ Module function to create the configuration page. @param dlg reference to the configuration dialog """ page = EditorExportersPage() return page eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/DebuggerPythonPage.ui0000644000175000001440000000007411160753317026634 xustar000000000000000030 atime=1389081083.733724386 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/DebuggerPythonPage.ui0000644000175000001440000001746211160753317026373 0ustar00detlevusers00000000000000 DebuggerPythonPage 0 0 453 449 <b>Configure Python Debugger</b> QFrame::HLine QFrame::Sunken Qt::Horizontal Python Interpreter for Debug Client Select, whether a special Python interpreter should be used Custom Python Interpreter false Enter the path of the Python interpreter to be used by the debug client. Leave empty to use the default. false Press to select the Python interpreter via a file selection dialog ... Debug Client Type false Enter the path of the Debug Client to be used. Leave empty to use the default. false Press to select the Debug Client via a file selection dialog ... Select the standard debug client Standard Select the custom selected debug client Custom Select the multi threaded debug client Multi Threaded Source association Enter the file extensions to be associated with the Python2 debugger separated by a space. They must not overlap with the ones for Python3. true Select, to redirect stdin, stdout and stderr of the program being debugged to the eric4 IDE Redirect stdin/stdout/stderr Select to not set the debug client encoding Don't set the encoding of the debug client Qt::Vertical 435 21 customPyCheckBox interpreterEdit interpreterButton standardButton threadedButton customButton debugClientEdit debugClientButton sourceExtensionsEdit pyRedirectCheckBox pyNoEncodingCheckBox customPyCheckBox toggled(bool) interpreterEdit setEnabled(bool) 86 96 86 122 customPyCheckBox toggled(bool) interpreterButton setEnabled(bool) 475 95 480 126 customButton toggled(bool) debugClientEdit setEnabled(bool) 368 194 332 219 customButton toggled(bool) debugClientButton setEnabled(bool) 455 195 463 222 eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/EmailPage.py0000644000175000001440000000013212261012650024732 xustar000000000000000030 mtime=1388582312.937088968 30 atime=1389081083.734724386 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/EmailPage.py0000644000175000001440000001337112261012650024471 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing the Email configuration page. """ import smtplib import socket from PyQt4.QtCore import pyqtSignature, Qt from PyQt4.QtGui import QApplication, QCursor from KdeQt import KQMessageBox from ConfigurationPageBase import ConfigurationPageBase from Ui_EmailPage import Ui_EmailPage import Preferences class EmailPage(ConfigurationPageBase, Ui_EmailPage): """ Class implementing the Email configuration page. """ def __init__(self): """ Constructor """ ConfigurationPageBase.__init__(self) self.setupUi(self) self.setObjectName("EmailPage") # set initial values self.mailServerEdit.setText(Preferences.getUser("MailServer")) self.portSpin.setValue(Preferences.getUser("MailServerPort")) self.emailEdit.setText(Preferences.getUser("Email")) self.signatureEdit.setPlainText(Preferences.getUser("Signature")) self.mailAuthenticationCheckBox.setChecked(\ Preferences.getUser("MailServerAuthentication")) self.mailUserEdit.setText(Preferences.getUser("MailServerUser")) self.mailPasswordEdit.setText(\ Preferences.getUser("MailServerPassword")) self.useTlsCheckBox.setChecked(\ Preferences.getUser("MailServerUseTLS")) def save(self): """ Public slot to save the Email configuration. """ Preferences.setUser("MailServer", self.mailServerEdit.text()) Preferences.setUser("MailServerPort", self.portSpin.value()) Preferences.setUser("Email", self.emailEdit.text()) Preferences.setUser("Signature", self.signatureEdit.toPlainText()) Preferences.setUser("MailServerAuthentication", int(self.mailAuthenticationCheckBox.isChecked())) Preferences.setUser("MailServerUser", self.mailUserEdit.text()) Preferences.setUser("MailServerPassword", self.mailPasswordEdit.text()) Preferences.setUser("MailServerUseTLS", int(self.useTlsCheckBox.isChecked())) def __updateTestButton(self): """ Private slot to update the enabled state of the test button. """ self.testButton.setEnabled( self.mailAuthenticationCheckBox.isChecked() and \ not self.mailUserEdit.text().isEmpty() and \ not self.mailPasswordEdit.text().isEmpty() and \ not self.mailServerEdit.text().isEmpty() ) @pyqtSignature("bool") def on_mailAuthenticationCheckBox_toggled(self, checked): """ Private slot to handle a change of the state of the authentication selector. @param checked state of the checkbox (boolean) """ self.__updateTestButton() @pyqtSignature("QString") def on_mailUserEdit_textChanged(self, txt): """ Private slot to handle a change of the text of the user edit. @param txt current text of the edit (QString) """ self.__updateTestButton() @pyqtSignature("QString") def on_mailPasswordEdit_textChanged(self, txt): """ Private slot to handle a change of the text of the user edit. @param txt current text of the edit (QString) """ self.__updateTestButton() @pyqtSignature("") def on_testButton_clicked(self): """ Private slot to test the mail server login data. """ QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) QApplication.processEvents() try: server = smtplib.SMTP(str(self.mailServerEdit.text()), self.portSpin.value(), timeout=10) if self.useTlsCheckBox.isChecked(): server.starttls() try: server.login(unicode(self.mailUserEdit.text()), unicode(self.mailPasswordEdit.text())) QApplication.restoreOverrideCursor() KQMessageBox.information(self, self.trUtf8("Login Test"), self.trUtf8("""The login test succeeded.""")) except (smtplib.SMTPException, socket.error) as e: QApplication.restoreOverrideCursor() if isinstance(e, smtplib.SMTPResponseException): errorStr = e.smtp_error.decode() elif isinstance(e, socket.timeout): errorStr = str(e) elif isinstance(e, socket.error): errorStr = e[1] else: errorStr = str(e) KQMessageBox.critical(self, self.trUtf8("Login Test"), self.trUtf8("""

    The login test failed.
    Reason: %1

    """) .arg(errorStr)) server.quit() except (smtplib.SMTPException, socket.error) as e: QApplication.restoreOverrideCursor() if isinstance(e, smtplib.SMTPResponseException): errorStr = e.smtp_error.decode() elif isinstance(e, socket.timeout): errorStr = str(e) elif isinstance(e, socket.error): errorStr = e[1] else: errorStr = str(e) KQMessageBox.critical(self, self.trUtf8("Login Test"), self.trUtf8("""

    The login test failed.
    Reason: %1

    """) .arg(errorStr)) def create(dlg): """ Module function to create the configuration page. @param dlg reference to the configuration dialog """ page = EmailPage() return page eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/CorbaPage.py0000644000175000001440000000013212261012650024731 xustar000000000000000030 mtime=1388582312.942089031 30 atime=1389081083.734724386 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/CorbaPage.py0000644000175000001440000000322312261012650024463 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing the Corba configuration page. """ from PyQt4.QtCore import QDir, QString, pyqtSignature from KdeQt import KQFileDialog from E4Gui.E4Completers import E4FileCompleter from ConfigurationPageBase import ConfigurationPageBase from Ui_CorbaPage import Ui_CorbaPage import Preferences import Utilities class CorbaPage(ConfigurationPageBase, Ui_CorbaPage): """ Class implementing the Corba configuration page. """ def __init__(self): """ Constructor """ ConfigurationPageBase.__init__(self) self.setupUi(self) self.setObjectName("CorbaPage") self.idlCompleter = E4FileCompleter(self.idlEdit) # set initial values self.idlEdit.setText(Preferences.getCorba("omniidl")) def save(self): """ Public slot to save the Corba configuration. """ Preferences.setCorba("omniidl", self.idlEdit.text()) @pyqtSignature("") def on_idlButton_clicked(self): """ Private slot to handle the IDL compiler selection. """ file = KQFileDialog.getOpenFileName(\ self, self.trUtf8("Select IDL compiler"), self.idlEdit.text(), QString()) if not file.isNull(): self.idlEdit.setText(Utilities.toNativeSeparators(file)) def create(dlg): """ Module function to create the configuration page. @param dlg reference to the configuration dialog """ page = CorbaPage() return page eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/InterfacePage.py0000644000175000001440000000013112261012650025602 xustar000000000000000029 mtime=1388582312.94908912 30 atime=1389081083.734724386 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/InterfacePage.py0000644000175000001440000002561412261012650025345 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing the Interface configuration page. """ import glob import os from PyQt4.QtCore import pyqtSignature, QVariant, QTranslator, QString, qVersion from PyQt4.QtGui import QStyleFactory from E4Gui.E4Completers import E4FileCompleter from ConfigurationPageBase import ConfigurationPageBase from Ui_InterfacePage import Ui_InterfacePage from KdeQt import KQFileDialog import KdeQt import Preferences import Utilities from eric4config import getConfig class InterfacePage(ConfigurationPageBase, Ui_InterfacePage): """ Class implementing the Interface configuration page. """ def __init__(self): """ Constructor """ ConfigurationPageBase.__init__(self) self.setupUi(self) self.setObjectName("InterfacePage") self.styleSheetCompleter = E4FileCompleter(self.styleSheetEdit) self.uiColours = {} # set initial values self.__populateStyleCombo() self.__populateLanguageCombo() self.uiBrowsersListFoldersFirstCheckBox.setChecked( Preferences.getUI("BrowsersListFoldersFirst")) self.uiBrowsersHideNonPublicCheckBox.setChecked( Preferences.getUI("BrowsersHideNonPublic")) self.uiBrowsersSortByOccurrenceCheckBox.setChecked( Preferences.getUI("BrowsersListContentsByOccurrence")) self.fileFiltersEdit.setText(Preferences.getUI("BrowsersFileFilters")) self.lvAutoRaiseCheckBox.setChecked( Preferences.getUI("LogViewerAutoRaise")) self.uiCaptionShowsFilenameGroupBox.setChecked( Preferences.getUI("CaptionShowsFilename")) self.filenameLengthSpinBox.setValue(\ Preferences.getUI("CaptionFilenameLength")) self.styleSheetEdit.setText(Preferences.getUI("StyleSheet")) if Preferences.getUI("TopLeftByLeft"): self.tlLeftButton.setChecked(True) else: self.tlTopButton.setChecked(True) if Preferences.getUI("BottomLeftByLeft"): self.blLeftButton.setChecked(True) else: self.blBottomButton.setChecked(True) if Preferences.getUI("TopRightByRight"): self.trRightButton.setChecked(True) else: self.trTopButton.setChecked(True) if Preferences.getUI("BottomRightByRight"): self.brRightButton.setChecked(True) else: self.brTopButton.setChecked(True) layout = Preferences.getUILayout() if layout[0] == "DockWindows": index = 0 elif layout[0] == "FloatingWindows": index = 1 elif layout[0] == "Toolboxes": index = 2 elif layout[0] == "Sidebars": index = 3 else: index = 0 # default for bad values self.layoutComboBox.setCurrentIndex(index) if layout[1] == 0: self.separateShellButton.setChecked(True) else: self.debugEmbeddedShellButton.setChecked(True) if layout[2] == 0: self.separateFileBrowserButton.setChecked(True) elif layout[2] == 1: self.debugEmbeddedFileBrowserButton.setChecked(True) else: self.projectEmbeddedFileBrowserButton.setChecked(True) if qVersion() < '4.5.0': self.tabsGroupBox.setEnabled(False) self.tabsCloseButtonCheckBox.setChecked(True) else: self.tabsGroupBox.setEnabled(True) self.tabsCloseButtonCheckBox.setChecked( Preferences.getUI("SingleCloseButton")) if Utilities.isMacPlatform() or Utilities.isWindowsPlatform(): self.uiKdeDialogsCheckBox.setChecked(False) self.dialogsGroupBox.hide() else: self.uiKdeDialogsCheckBox.setChecked(\ Preferences.getUI("UseKDEDialogs")) self.uiColours["LogStdErrColour"] = \ self.initColour("LogStdErrColour", self.stderrTextColourButton, Preferences.getUI) self.delaySpinBox.setValue(Preferences.getUI("SidebarDelay")) def save(self): """ Public slot to save the Interface configuration. """ # save the style settings styleIndex = self.styleComboBox.currentIndex() style = self.styleComboBox.itemData(styleIndex).toString() Preferences.setUI("Style", style) # save the other UI related settings Preferences.setUI("BrowsersListFoldersFirst", int(self.uiBrowsersListFoldersFirstCheckBox.isChecked())) Preferences.setUI("BrowsersHideNonPublic", int(self.uiBrowsersHideNonPublicCheckBox.isChecked())) Preferences.setUI("BrowsersListContentsByOccurrence", int(self.uiBrowsersSortByOccurrenceCheckBox.isChecked())) Preferences.setUI("BrowsersFileFilters", self.fileFiltersEdit.text()) Preferences.setUI("LogViewerAutoRaise", int(self.lvAutoRaiseCheckBox.isChecked())) Preferences.setUI("CaptionShowsFilename", int(self.uiCaptionShowsFilenameGroupBox.isChecked())) Preferences.setUI("CaptionFilenameLength", self.filenameLengthSpinBox.value()) Preferences.setUI("StyleSheet", self.styleSheetEdit.text()) # save the dockarea corner settings Preferences.setUI("TopLeftByLeft", int(self.tlLeftButton.isChecked())) Preferences.setUI("BottomLeftByLeft", int(self.blLeftButton.isChecked())) Preferences.setUI("TopRightByRight", int(self.trRightButton.isChecked())) Preferences.setUI("BottomRightByRight", int(self.brRightButton.isChecked())) # save the language settings uiLanguageIndex = self.languageComboBox.currentIndex() if uiLanguageIndex: uiLanguage = unicode(\ self.languageComboBox.itemData(uiLanguageIndex).toString()) else: uiLanguage = None Preferences.setUILanguage(uiLanguage) # save the interface layout settings if self.separateShellButton.isChecked(): layout2 = 0 else: layout2 = 1 if self.separateFileBrowserButton.isChecked(): layout3 = 0 elif self.debugEmbeddedFileBrowserButton.isChecked(): layout3 = 1 else: layout3 = 2 if self.layoutComboBox.currentIndex() == 0: layout1 = "DockWindows" elif self.layoutComboBox.currentIndex() == 1: layout1 = "FloatingWindows" elif self.layoutComboBox.currentIndex() == 2: layout1 = "Toolboxes" elif self.layoutComboBox.currentIndex() == 3: layout1 = "Sidebars" else: layout1 = "DockWindows" layout = (layout1, layout2, layout3) Preferences.setUILayout(layout) Preferences.setUI("SingleCloseButton", int(self.tabsCloseButtonCheckBox.isChecked())) Preferences.setUI("UseKDEDialogs", int(self.uiKdeDialogsCheckBox.isChecked())) Preferences.setUI("SidebarDelay", self.delaySpinBox.value()) for key in self.uiColours.keys(): Preferences.setUI(key, self.uiColours[key]) def __populateStyleCombo(self): """ Private method to populate the style combo box. """ curStyle = Preferences.getUI("Style") styles = QStyleFactory.keys() styles.sort() self.styleComboBox.addItem(self.trUtf8('System'), QVariant("System")) for style in styles: self.styleComboBox.addItem(style, QVariant(style)) currentIndex = self.styleComboBox.findData(QVariant(curStyle)) if currentIndex == -1: currentIndex = 0 self.styleComboBox.setCurrentIndex(currentIndex) def __populateLanguageCombo(self): """ Private method to initialize the language combobox of the Interface configuration page. """ self.languageComboBox.clear() fnlist = glob.glob("eric4_*.qm") + \ glob.glob(os.path.join(getConfig('ericTranslationsDir'), "eric4_*.qm")) + \ glob.glob(os.path.join(Utilities.getConfigDir(), "eric4_*.qm")) locales = {} for fn in fnlist: locale = os.path.basename(fn)[6:-3] if not locales.has_key(locale): translator = QTranslator() translator.load(fn) locales[locale] = \ translator.translate("InterfacePage", "English", "Translate this with your language") + \ QString(" (%1)").arg(locale) localeList = locales.keys() localeList.sort() try: uiLanguage = unicode(Preferences.getUILanguage()) if uiLanguage == "None": currentIndex = 0 elif uiLanguage == "System": currentIndex = 1 else: currentIndex = localeList.index(uiLanguage) + 2 except ValueError: currentIndex = 0 self.languageComboBox.clear() self.languageComboBox.addItem("English (default)", QVariant("None")) self.languageComboBox.addItem(self.trUtf8('System'), QVariant("System")) for locale in localeList: self.languageComboBox.addItem(locales[locale], QVariant(locale)) self.languageComboBox.setCurrentIndex(currentIndex) @pyqtSignature("") def on_styleSheetButton_clicked(self): """ Private method to select the style sheet file via a dialog. """ file = KQFileDialog.getOpenFileName(\ self, self.trUtf8("Select style sheet file"), self.styleSheetEdit.text(), self.trUtf8("Qt Style Sheets (*.qss);;Cascading Style Sheets (*.css);;" "All files (*)"), None) if not file.isEmpty(): self.styleSheetEdit.setText(Utilities.toNativeSeparators(file)) @pyqtSignature("") def on_resetLayoutButton_clicked(self): """ Private method to reset layout to factory defaults """ Preferences.resetLayout() @pyqtSignature("") def on_stderrTextColourButton_clicked(self): """ Private slot to set the foreground colour of the caret. """ self.uiColours["LogStdErrColour"] = \ self.selectColour(self.stderrTextColourButton, self.uiColours["LogStdErrColour"]) def create(dlg): """ Module function to create the configuration page. @param dlg reference to the configuration dialog """ page = InterfacePage() return page eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/HelpViewersPage.ui0000644000175000001440000000007411235520730026135 xustar000000000000000030 atime=1389081083.748724385 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/HelpViewersPage.ui0000644000175000001440000001107211235520730025663 0ustar00detlevusers00000000000000 HelpViewersPage 0 0 613 634 <b>Configure help viewers</b> QFrame::HLine QFrame::Sunken Qt::Horizontal Help Viewer false Enter the custom viewer to be used false Press to select the custom viewer via a file selection dialog ... Select to use a custom viewer Custom Select to use Qt Assistant Qt Assistant Select to use the Eric Web Browser Eric Web Browser true Select to use the configured web browser Web Browser Qt::Vertical 479 121 helpBrowserButton qtAssistantButton webBrowserButton customViewerButton customViewerEdit customViewerSelectionButton customViewerButton toggled(bool) customViewerEdit setEnabled(bool) 592 94 231 109 customViewerButton toggled(bool) customViewerSelectionButton setEnabled(bool) 592 94 591 127 eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/VcsPage.ui0000644000175000001440000000007411724636374024452 xustar000000000000000030 atime=1389081083.748724385 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/VcsPage.ui0000644000175000001440000002233411724636374024203 0ustar00detlevusers00000000000000 VcsPage 0 0 619 572 <b>Configure Version Control Systems</b> QFrame::HLine QFrame::Sunken Qt::Horizontal Close VCS dialog automatically, if no error occured Commit Select, if files should be saved before a commit Save files upon commit Select, if project should be saved before a commit Save project upon commit Status Monitor Select the interval in seconds for VCS status updates (0 to disable) sec 3600 Qt::Horizontal 40 20 Select to monitor local status only (if supported by VCS) Monitor local status only Select to enable automatic updates Automatic updates enabled Colours VCS status "added": 100 0 Select the background colour for entries with VCS status "added". VCS status "conflict": 100 0 Select the background colour for entries with VCS status "conflict". Qt::Horizontal 40 20 VCS status "modified": 100 0 Select the background colour for entries with VCS status "modified". VCS status "replaced": 100 0 Select the background colour for entries with VCS status "replaced". VCS status "needs update": 100 0 Select the background colour for entries with VCS status "needs update". VCS status "removed": 100 0 Select the background colour for entries with VCS status "removed". Qt::Vertical 512 81 vcsAutoCloseCheckBox vcsAutoSaveCheckBox vcsAutoSaveProjectCheckBox vcsStatusMonitorIntervalSpinBox vcsMonitorLocalStatusCheckBox autoUpdateCheckBox pbVcsAddedButton pbVcsModifiedButton pbVcsUpdateButton pbVcsConflictButton pbVcsReplacedButton eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/ProjectBrowserPage.py0000644000175000001440000000013212261012650026655 xustar000000000000000030 mtime=1388582312.961089272 30 atime=1389081083.748724385 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/ProjectBrowserPage.py0000644000175000001440000001323412261012650026412 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing the Project Browser configuration page. """ from PyQt4.QtCore import pyqtSignature, QVariant from KdeQt.KQApplication import e4App from ConfigurationPageBase import ConfigurationPageBase from Ui_ProjectBrowserPage import Ui_ProjectBrowserPage from Project.ProjectBrowserFlags import SourcesBrowserFlag, FormsBrowserFlag, \ ResourcesBrowserFlag, TranslationsBrowserFlag, InterfacesBrowserFlag, \ OthersBrowserFlag, AllBrowsersFlag import Preferences class ProjectBrowserPage(ConfigurationPageBase, Ui_ProjectBrowserPage): """ Class implementing the Project Browser configuration page. """ def __init__(self): """ Constructor """ ConfigurationPageBase.__init__(self) self.setupUi(self) self.setObjectName("ProjectBrowserPage") self.projectBrowserColours = {} self.__currentProjectTypeIndex = 0 # set initial values self.projectTypeCombo.addItem('', QVariant('')) self.__projectBrowserFlags = {'' : 0} try: projectTypes = e4App().getObject("Project").getProjectTypes() for projectType in sorted(projectTypes.keys()): self.projectTypeCombo.addItem(projectTypes[projectType], QVariant(projectType)) self.__projectBrowserFlags[projectType] = \ Preferences.getProjectBrowserFlags(projectType) except KeyError: self.pbGroup.setEnabled(False) self.projectBrowserColours["Highlighted"] = \ self.initColour("Highlighted", self.pbHighlightedButton, Preferences.getProjectBrowserColour) self.followEditorCheckBox.setChecked(\ Preferences.getProject("FollowEditor")) self.hideGeneratedCheckBox.setChecked(\ Preferences.getProject("HideGeneratedForms")) def save(self): """ Public slot to save the Project Browser configuration. """ for key in self.projectBrowserColours.keys(): Preferences.setProjectBrowserColour(key, self.projectBrowserColours[key]) Preferences.setProject("FollowEditor", int(self.followEditorCheckBox.isChecked())) Preferences.setProject("HideGeneratedForms", int(self.hideGeneratedCheckBox.isChecked())) if self.pbGroup.isEnabled(): self.__storeProjectBrowserFlags(\ self.projectTypeCombo.itemData(self.__currentProjectTypeIndex).toString()) for projectType, flags in self.__projectBrowserFlags.items(): if projectType != '': Preferences.setProjectBrowserFlags(projectType, flags) @pyqtSignature("") def on_pbHighlightedButton_clicked(self): """ Private slot to set the colour for highlighted entries of the project others browser. """ self.projectBrowserColours["Highlighted"] = \ self.selectColour(self.pbHighlightedButton, self.projectBrowserColours["Highlighted"]) def __storeProjectBrowserFlags(self, projectType): """ Private method to store the flags for the selected project type. @param projectType type of the selected project (QString) """ flags = 0 if self.sourcesBrowserCheckBox.isChecked(): flags |= SourcesBrowserFlag if self.formsBrowserCheckBox.isChecked(): flags |= FormsBrowserFlag if self.resourcesBrowserCheckBox.isChecked(): flags |= ResourcesBrowserFlag if self.translationsBrowserCheckBox.isChecked(): flags |= TranslationsBrowserFlag if self.interfacesBrowserCheckBox.isChecked(): flags |= InterfacesBrowserFlag if self.othersBrowserCheckBox.isChecked(): flags |= OthersBrowserFlag self.__projectBrowserFlags[unicode(projectType)] = flags def __setProjectBrowsersCheckBoxes(self, projectType): """ Private method to set the checkboxes according to the selected project type. @param projectType type of the selected project (QString) """ flags = self.__projectBrowserFlags[unicode(projectType)] self.sourcesBrowserCheckBox.setChecked(flags & SourcesBrowserFlag) self.formsBrowserCheckBox.setChecked(flags & FormsBrowserFlag) self.resourcesBrowserCheckBox.setChecked(flags & ResourcesBrowserFlag) self.translationsBrowserCheckBox.setChecked(flags & TranslationsBrowserFlag) self.interfacesBrowserCheckBox.setChecked(flags & InterfacesBrowserFlag) self.othersBrowserCheckBox.setChecked(flags & OthersBrowserFlag) @pyqtSignature("int") def on_projectTypeCombo_activated(self, index): """ Private slot to set the browser checkboxes according to the selected project type. @param index index of the selected project type (integer) """ if self.__currentProjectTypeIndex == index: return self.__storeProjectBrowserFlags(\ self.projectTypeCombo.itemData(self.__currentProjectTypeIndex).toString()) self.__setProjectBrowsersCheckBoxes(\ self.projectTypeCombo.itemData(index).toString()) self.__currentProjectTypeIndex = index def create(dlg): """ Module function to create the configuration page. @param dlg reference to the configuration dialog """ page = ProjectBrowserPage() return page eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/QtPage.py0000644000175000001440000000013212261012650024267 xustar000000000000000030 mtime=1388582312.986089589 30 atime=1389081083.749724385 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/QtPage.py0000644000175000001440000000713712261012650024031 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing the Qt configuration page. """ import sys from PyQt4.QtCore import QDir, pyqtSignature from PyQt4.QtGui import QFileDialog from KdeQt import KQFileDialog from E4Gui.E4Completers import E4DirCompleter from ConfigurationPageBase import ConfigurationPageBase from Ui_QtPage import Ui_QtPage import Preferences import Utilities class QtPage(ConfigurationPageBase, Ui_QtPage): """ Class implementing the Qt configuration page. """ def __init__(self): """ Constructor """ ConfigurationPageBase.__init__(self) self.setupUi(self) self.setObjectName("QtPage") self.qt4Completer = E4DirCompleter(self.qt4Edit) self.qt4TransCompleter = E4DirCompleter(self.qt4TransEdit) if sys.platform != "darwin": self.qt4Group.hide() # set initial values self.qt4Edit.setText(Preferences.getQt("Qt4Dir")) self.qt4TransEdit.setText(Preferences.getQt("Qt4TranslationsDir")) self.qt4PrefixEdit.setText(Preferences.getQt("QtToolsPrefix4")) self.qt4PostfixEdit.setText(Preferences.getQt("QtToolsPostfix4")) self.__updateQt4Sample() def save(self): """ Public slot to save the Qt configuration. """ Preferences.setQt("Qt4Dir", self.qt4Edit.text()) Preferences.setQt("Qt4TranslationsDir", self.qt4TransEdit.text()) Preferences.setQt("QtToolsPrefix4", self.qt4PrefixEdit.text()) Preferences.setQt("QtToolsPostfix4", self.qt4PostfixEdit.text()) @pyqtSignature("") def on_qt4Button_clicked(self): """ Private slot to handle the Qt4 directory selection. """ dir = KQFileDialog.getExistingDirectory(\ self, self.trUtf8("Select Qt4 Directory"), self.qt4Edit.text(), QFileDialog.Options(QFileDialog.ShowDirsOnly)) if not dir.isNull(): self.qt4Edit.setText(Utilities.toNativeSeparators(dir)) @pyqtSignature("") def on_qt4TransButton_clicked(self): """ Private slot to handle the Qt4 translations directory selection. """ dir = KQFileDialog.getExistingDirectory(\ self, self.trUtf8("Select Qt4 Translations Directory"), self.qt4TransEdit.text(), QFileDialog.Options(QFileDialog.ShowDirsOnly)) if not dir.isNull(): self.qt4TransEdit.setText(Utilities.toNativeSeparators(dir)) def __updateQt4Sample(self): """ Private slot to update the Qt4 tools sample label. """ self.qt4SampleLabel.setText(self.trUtf8("Sample: %1designer%2")\ .arg(self.qt4PrefixEdit.text())\ .arg(self.qt4PostfixEdit.text())) @pyqtSignature("QString") def on_qt4PrefixEdit_textChanged(self, txt): """ Private slot to handle a change in the entered Qt directory. @param txt the entered string (QString) """ self.__updateQt4Sample() @pyqtSignature("QString") def on_qt4PostfixEdit_textChanged(self, txt): """ Private slot to handle a change in the entered Qt directory. @param txt the entered string (QString) """ self.__updateQt4Sample() def create(dlg): """ Module function to create the configuration page. @param dlg reference to the configuration dialog """ page = QtPage() return page eric4-4.5.18/eric/Preferences/ConfigurationPages/PaxHeaders.8617/HelpWebBrowserPage.py0000644000175000001440000000013212261012650026575 xustar000000000000000030 mtime=1388582312.989089627 30 atime=1389081083.749724385 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationPages/HelpWebBrowserPage.py0000644000175000001440000001665112261012650026340 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing the Help web browser configuration page. """ from PyQt4.QtCore import qVersion, pyqtSignature, QString, QLocale from ConfigurationPageBase import ConfigurationPageBase from Ui_HelpWebBrowserPage import Ui_HelpWebBrowserPage import Helpviewer.HelpWindow import Preferences class HelpWebBrowserPage(ConfigurationPageBase, Ui_HelpWebBrowserPage): """ Class implementing the Help web browser configuration page. """ def __init__(self, configDialog): """ Constructor @param configDialog reference to the configuration dialog (ConfigurationDialog) """ ConfigurationPageBase.__init__(self) self.setupUi(self) self.setObjectName("HelpWebBrowserPage") mw = configDialog.parent().parent() if hasattr(mw, "helpWindow") and mw.helpWindow is not None: self.__helpWindow = mw.helpWindow elif hasattr(mw, "currentBrowser"): self.__helpWindow = mw else: self.__helpWindow = None self.setCurrentPageButton.setEnabled(self.__helpWindow is not None) defaultSchemes = ["file://", "http://", "https://", "qthelp://"] self.defaultSchemeCombo.addItems(defaultSchemes) # set initial values self.singleHelpWindowCheckBox.setChecked( Preferences.getHelp("SingleHelpWindow")) self.saveGeometryCheckBox.setChecked( Preferences.getHelp("SaveGeometry")) self.webSuggestionsCheckBox.setChecked( Preferences.getHelp("WebSearchSuggestions")) self.javaCheckBox.setChecked( Preferences.getHelp("JavaEnabled")) self.javaScriptCheckBox.setChecked( Preferences.getHelp("JavaScriptEnabled")) self.jsOpenWindowsCheckBox.setChecked( Preferences.getHelp("JavaScriptCanOpenWindows")) self.jsClipboardCheckBox.setChecked( Preferences.getHelp("JavaScriptCanAccessClipboard")) self.pluginsCheckBox.setChecked( Preferences.getHelp("PluginsEnabled")) self.savePasswordsCheckBox.setChecked( Preferences.getHelp("SavePasswords")) if qVersion() >= '4.5.0': self.diskCacheCheckBox.setChecked( Preferences.getHelp("DiskCacheEnabled")) self.cacheSizeSpinBox.setValue( Preferences.getHelp("DiskCacheSize")) self.printBackgroundsCheckBox.setChecked( Preferences.getHelp("PrintBackgrounds")) else: self.cacheGroup.setEnabled(False) self.printGroup.setEnabled(False) self.startupCombo.setCurrentIndex( Preferences.getHelp("StartupBehavior")) self.homePageEdit.setText( Preferences.getHelp("HomePage")) self.defaultSchemeCombo.setCurrentIndex( self.defaultSchemeCombo.findText( Preferences.getHelp("DefaultScheme"))) self.defaultSchemeCombo.setCurrentIndex( self.defaultSchemeCombo.findText( Preferences.getHelp("DefaultScheme"))) historyLimit = Preferences.getHelp("HistoryLimit") idx = 0 if historyLimit == 1: idx = 0 elif historyLimit == 7: idx = 1 elif historyLimit == 14: idx = 2 elif historyLimit == 30: idx = 3 elif historyLimit == 365: idx = 4 elif historyLimit == -1: idx = 5 elif historyLimit == -2: idx = 6 else: idx = 5 self.expireHistory.setCurrentIndex(idx) for language in range(2, QLocale.LastLanguage + 1): if len(QLocale.countriesForLanguage(language)) > 0: self.languageCombo.addItem(QLocale.languageToString(language), language) self.languageCombo.model().sort(0) self.languageCombo.insertSeparator(0) self.languageCombo.insertItem(0, QLocale.languageToString(0), 0) index = self.languageCombo.findData(Preferences.getHelp("SearchLanguage")) if index > -1: self.languageCombo.setCurrentIndex(index) def save(self): """ Public slot to save the Help Viewers configuration. """ Preferences.setHelp("SingleHelpWindow", int(self.singleHelpWindowCheckBox.isChecked())) Preferences.setHelp("SaveGeometry", int(self.saveGeometryCheckBox.isChecked())) Preferences.setHelp("WebSearchSuggestions", int(self.webSuggestionsCheckBox.isChecked())) Preferences.setHelp("JavaEnabled", int(self.javaCheckBox.isChecked())) Preferences.setHelp("JavaScriptEnabled", int(self.javaScriptCheckBox.isChecked())) Preferences.setHelp("JavaScriptCanOpenWindows", int(self.jsOpenWindowsCheckBox.isChecked())) Preferences.setHelp("JavaScriptCanAccessClipboard", int(self.jsClipboardCheckBox.isChecked())) Preferences.setHelp("PluginsEnabled", int(self.pluginsCheckBox.isChecked())) Preferences.setHelp("SavePasswords", int(self.savePasswordsCheckBox.isChecked())) if qVersion() >= '4.5.0': Preferences.setHelp("DiskCacheEnabled", int(self.diskCacheCheckBox.isChecked())) Preferences.setHelp("DiskCacheSize", self.cacheSizeSpinBox.value()) Preferences.setHelp("PrintBackgrounds", int(self.printBackgroundsCheckBox.isChecked())) Preferences.setHelp("StartupBehavior", self.startupCombo.currentIndex()) Preferences.setHelp("HomePage", self.homePageEdit.text()) Preferences.setHelp("DefaultScheme", self.defaultSchemeCombo.currentText()) idx = self.expireHistory.currentIndex() if idx == 0: historyLimit = 1 elif idx == 1: historyLimit = 7 elif idx == 2: historyLimit = 14 elif idx == 3: historyLimit = 30 elif idx == 4: historyLimit = 365 elif idx == 5: historyLimit = -1 elif idx == 6: historyLimit = -2 Preferences.setHelp("HistoryLimit", historyLimit) languageIndex = self.languageCombo.currentIndex() if languageIndex > -1: language = self.languageCombo.itemData(languageIndex) else: # fall back to system default language = QLocale.system().language() Preferences.setHelp("SearchLanguage", language) @pyqtSignature("") def on_setCurrentPageButton_clicked(self): """ Private slot to set the current page as the home page. """ url = self.__helpWindow.currentBrowser().url() self.homePageEdit.setText(QString.fromUtf8(url.toEncoded())) @pyqtSignature("") def on_defaultHomeButton_clicked(self): """ Private slot to set the default home page. """ self.homePageEdit.setText(Preferences.Prefs.helpDefaults["HomePage"]) def create(dlg): """ Module function to create the configuration page. @param dlg reference to the configuration dialog """ page = HelpWebBrowserPage(dlg) return page eric4-4.5.18/eric/Preferences/PaxHeaders.8617/ConfigurationDialog.py0000644000175000001440000000013112261012651023246 xustar000000000000000029 mtime=1388582313.00508983 30 atime=1389081083.749724385 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ConfigurationDialog.py0000644000175000001440000007756312261012651023023 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2002 - 2014 Detlev Offenbach # """ Module implementing a dialog for the configuration of eric4. """ import os import types from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQMessageBox from KdeQt.KQMainWindow import KQMainWindow from KdeQt.KQApplication import e4App from E4Gui.E4LineEdit import E4LineEdit from Globals import isMacPlatform import QScintilla.Lexers import Preferences from PreferencesLexer import PreferencesLexer, PreferencesLexerLanguageError import UI.PixmapCache from eric4config import getConfig class ConfigurationPageItem(QTreeWidgetItem): """ Class implementing a QTreeWidgetItem holding the configuration page data. """ def __init__(self, parent, text, pageName, iconFile): """ Constructor @param parent parent widget of the item (QTreeWidget or QTreeWidgetItem) @param text text to be displayed (string or QString) @param pageName name of the configuration page (string or QString) @param iconFile file name of the icon to be shown (string) """ QTreeWidgetItem.__init__(self, parent, QStringList(text)) self.setIcon(0, UI.PixmapCache.getIcon(iconFile)) self.__pageName = unicode(pageName) def getPageName(self): """ Public method to get the name of the associated configuration page. @return name of the configuration page (string) """ return self.__pageName class ConfigurationWidget(QWidget): """ Class implementing a dialog for the configuration of eric4. @signal preferencesChanged emitted after settings have been changed @signal accepted() emitted to indicate acceptance of the changes @signal rejected() emitted to indicate rejection of the changes """ DefaultMode = 0 HelpBrowserMode = 1 TrayStarterMode = 2 def __init__(self, parent = None, fromEric = True, displayMode = DefaultMode): """ Constructor @param parent The parent widget of this dialog. (QWidget) @keyparam fromEric flag indicating a dialog generation from within the eric4 ide (boolean) @keyparam displayMode mode of the configuration dialog (DefaultMode, HelpBrowserMode, TrayStarterMode) """ assert displayMode in ( ConfigurationWidget.DefaultMode, ConfigurationWidget.HelpBrowserMode, ConfigurationWidget.TrayStarterMode ) QWidget.__init__(self, parent) self.fromEric = fromEric self.displayMode = displayMode self.__setupUi() self.itmDict = {} if not fromEric: from PluginManager.PluginManager import PluginManager try: self.pluginManager = e4App().getObject("PluginManager") except KeyError: self.pluginManager = PluginManager(self) e4App().registerObject("PluginManager", self.pluginManager) if displayMode == ConfigurationWidget.DefaultMode: self.configItems = { # key : [display string, pixmap name, dialog module name or # page creation function, parent key, # reference to configuration page (must always be last)] # The dialog module must have the module function create to create # the configuration page. This must have the method save to save # the settings. "applicationPage" : \ [self.trUtf8("Application"), "preferences-application.png", "ApplicationPage", None, None], "corbaPage" : \ [self.trUtf8("CORBA"), "preferences-orbit.png", "CorbaPage", None, None], "emailPage" : \ [self.trUtf8("Email"), "preferences-mail_generic.png", "EmailPage", None, None], "graphicsPage" : \ [self.trUtf8("Graphics"), "preferences-graphics.png", "GraphicsPage", None, None], "iconsPage" : \ [self.trUtf8("Icons"), "preferences-icons.png", "IconsPage", None, None], "networkPage" : \ [self.trUtf8("Network"), "preferences-network.png", "NetworkPage", None, None], "pluginManagerPage" : \ [self.trUtf8("Plugin Manager"), "preferences-pluginmanager.png", "PluginManagerPage", None, None], "printerPage" : \ [self.trUtf8("Printer"), "preferences-printer.png", "PrinterPage", None, None], "pythonPage" : \ [self.trUtf8("Python"), "preferences-python.png", "PythonPage", None, None], "qtPage" : \ [self.trUtf8("Qt"), "preferences-qtlogo.png", "QtPage", None, None], "shellPage" : \ [self.trUtf8("Shell"), "preferences-shell.png", "ShellPage", None, None], "tasksPage" : \ [self.trUtf8("Tasks"), "task.png", "TasksPage", None, None], "templatesPage" : \ [self.trUtf8("Templates"), "preferences-template.png", "TemplatesPage", None, None], "trayStarterPage" : \ [self.trUtf8("Tray Starter"), "erict.png", "TrayStarterPage", None, None], "vcsPage" : \ [self.trUtf8("Version Control Systems"), "preferences-vcs.png", "VcsPage", None, None], "0debuggerPage": \ [self.trUtf8("Debugger"), "preferences-debugger.png", None, None, None], "debuggerGeneralPage" : \ [self.trUtf8("General"), "preferences-debugger.png", "DebuggerGeneralPage", "0debuggerPage", None], "debuggerPythonPage" : \ [self.trUtf8("Python"), "preferences-pyDebugger.png", "DebuggerPythonPage", "0debuggerPage", None], "debuggerPython3Page" : \ [self.trUtf8("Python3"), "preferences-pyDebugger.png", "DebuggerPython3Page", "0debuggerPage", None], "debuggerRubyPage" : \ [self.trUtf8("Ruby"), "preferences-rbDebugger.png", "DebuggerRubyPage", "0debuggerPage", None], "0editorPage" : \ [self.trUtf8("Editor"), "preferences-editor.png", None, None, None], "editorAPIsPage" : \ [self.trUtf8("APIs"), "preferences-api.png", "EditorAPIsPage", "0editorPage", None], "editorAutocompletionPage" : \ [self.trUtf8("Autocompletion"), "preferences-autocompletion.png", "EditorAutocompletionPage", "0editorPage", None], "editorAutocompletionQScintillaPage" : \ [self.trUtf8("QScintilla"), "qscintilla.png", "EditorAutocompletionQScintillaPage", "editorAutocompletionPage", None], "editorCalltipsPage" : \ [self.trUtf8("Calltips"), "preferences-calltips.png", "EditorCalltipsPage", "0editorPage", None], "editorCalltipsQScintillaPage" : \ [self.trUtf8("QScintilla"), "qscintilla.png", "EditorCalltipsQScintillaPage", "editorCalltipsPage", None], "editorGeneralPage" : \ [self.trUtf8("General"), "preferences-general.png", "EditorGeneralPage", "0editorPage", None], "editorFilePage" : \ [self.trUtf8("Filehandling"), "preferences-filehandling.png", "EditorFilePage", "0editorPage", None], "editorSearchPage" : \ [self.trUtf8("Searching"), "preferences-search.png", "EditorSearchPage", "0editorPage", None], "editorSpellCheckingPage" : \ [self.trUtf8("Spell checking"), "preferences-spellchecking.png", "EditorSpellCheckingPage", "0editorPage", None], "editorStylesPage" : \ [self.trUtf8("Style"), "preferences-styles.png", "EditorStylesPage", "0editorPage", None], "editorTypingPage" : \ [self.trUtf8("Typing"), "preferences-typing.png", "EditorTypingPage", "0editorPage", None], "editorExportersPage" : \ [self.trUtf8("Exporters"), "preferences-exporters.png", "EditorExportersPage", "0editorPage", None], "1editorLexerPage" : \ [self.trUtf8("Highlighters"), "preferences-highlighting-styles.png", None, "0editorPage", None], "editorHighlightersPage" : \ [self.trUtf8("Filetype Associations"), "preferences-highlighter-association.png", "EditorHighlightersPage", "1editorLexerPage", None], "editorHighlightingStylesPage" : \ [self.trUtf8("Styles"), "preferences-highlighting-styles.png", "EditorHighlightingStylesPage", "1editorLexerPage", None], "editorKeywordsPage" : \ [self.trUtf8("Keywords"), "preferences-keywords.png", "EditorKeywordsPage", "1editorLexerPage", None], "editorPropertiesPage" : \ [self.trUtf8("Properties"), "preferences-properties.png", "EditorPropertiesPage", "1editorLexerPage", None], "0helpPage" : \ [self.trUtf8("Help"), "preferences-help.png", None, None, None], "helpAppearancePage" : \ [self.trUtf8("Appearance"), "preferences-styles.png", "HelpAppearancePage", "0helpPage", None], "helpDocumentationPage" : \ [self.trUtf8("Help Documentation"), "preferences-helpdocumentation.png", "HelpDocumentationPage", "0helpPage", None], "helpViewersPage" : \ [self.trUtf8("Help Viewers"), "preferences-helpviewers.png", "HelpViewersPage", "0helpPage", None], "helpWebBrowserPage" : \ [self.trUtf8("eric4 Web Browser"), "ericWeb.png", "HelpWebBrowserPage", "0helpPage", None], "0projectPage" : \ [self.trUtf8("Project"), "preferences-project.png", None, None, None], "projectBrowserPage" : \ [self.trUtf8("Project Viewer"), "preferences-project.png", "ProjectBrowserPage", "0projectPage", None], "projectPage" : \ [self.trUtf8("Project"), "preferences-project.png", "ProjectPage", "0projectPage", None], "multiProjectPage" : \ [self.trUtf8("Multiproject"), "preferences-multiproject.png", "MultiProjectPage", "0projectPage", None], "0interfacePage" : \ [self.trUtf8("Interface"), "preferences-interface.png", None, None, None], "interfacePage" : \ [self.trUtf8("Interface"), "preferences-interface.png", "InterfacePage", "0interfacePage", None], "viewmanagerPage" : \ [self.trUtf8("Viewmanager"), "preferences-viewmanager.png", "ViewmanagerPage", "0interfacePage", None], } self.configItems.update( e4App().getObject("PluginManager").getPluginConfigData()) elif displayMode == ConfigurationWidget.HelpBrowserMode: self.configItems = { # key : [display string, pixmap name, dialog module name or # page creation function, parent key, # reference to configuration page (must always be last)] # The dialog module must have the module function create to create # the configuration page. This must have the method save to save # the settings. "networkPage" : \ [self.trUtf8("Network"), "preferences-network.png", "NetworkPage", None, None], "printerPage" : \ [self.trUtf8("Printer"), "preferences-printer.png", "PrinterPage", None, None], "0helpPage" : \ [self.trUtf8("Help"), "preferences-help.png", None, None, None], "helpAppearancePage" : \ [self.trUtf8("Appearance"), "preferences-styles.png", "HelpAppearancePage", "0helpPage", None], "helpDocumentationPage" : \ [self.trUtf8("Help Documentation"), "preferences-helpdocumentation.png", "HelpDocumentationPage", "0helpPage", None], "helpWebBrowserPage" : \ [self.trUtf8("eric4 Web Browser"), "ericWeb.png", "HelpWebBrowserPage", "0helpPage", None], } elif displayMode == ConfigurationWidget.TrayStarterMode: self.configItems = { # key : [display string, pixmap name, dialog module name or # page creation function, parent key, # reference to configuration page (must always be last)] # The dialog module must have the module function create to create # the configuration page. This must have the method save to save # the settings. "trayStarterPage" : \ [self.trUtf8("Tray Starter"), "erict.png", "TrayStarterPage", None, None], } else: raise RuntimeError("Illegal mode value: %d" % displayMode) # generate the list entries itemsToExpand = [] keys = self.configItems.keys() keys.sort() for key in keys: pageData = self.configItems[key] if pageData[3]: pitm = self.itmDict[pageData[3]] # get the parent item else: pitm = self.configList self.itmDict[key] = ConfigurationPageItem(pitm, pageData[0], key, pageData[1]) self.itmDict[key].setExpanded(True) self.configList.sortByColumn(0, Qt.AscendingOrder) # set the initial size of the splitter self.configSplitter.setSizes([200, 600]) self.connect(self.configList, SIGNAL("itemActivated(QTreeWidgetItem *, int)"), self.__showConfigurationPage) self.connect(self.configList, SIGNAL("itemClicked(QTreeWidgetItem *, int)"), self.__showConfigurationPage) self.connect(self.buttonBox, SIGNAL("accepted()"), self.accept) self.connect(self.buttonBox, SIGNAL("rejected()"), self, SIGNAL("rejected()")) if displayMode != ConfigurationWidget.TrayStarterMode: self.__initLexers() def accept(self): """ Public slot to accept the buttonBox accept signal. """ if not isMacPlatform(): wdg = self.focusWidget() if wdg == self.configList: return self.emit(SIGNAL("accepted()")) def __setupUi(self): """ Private method to perform the general setup of the configuration widget. """ self.setObjectName("ConfigurationDialog") self.resize(900, 650) self.setProperty("sizeGripEnabled", QVariant(True)) self.verticalLayout_2 = QVBoxLayout(self) self.verticalLayout_2.setSpacing(6) self.verticalLayout_2.setMargin(6) self.verticalLayout_2.setObjectName("verticalLayout_2") self.configSplitter = QSplitter(self) self.configSplitter.setOrientation(Qt.Horizontal) self.configSplitter.setObjectName("configSplitter") self.configListWidget = QWidget(self.configSplitter) self.leftVBoxLayout = QVBoxLayout(self.configListWidget) self.leftVBoxLayout.setMargin(0) self.leftVBoxLayout.setSpacing(0) self.leftVBoxLayout.setObjectName("leftVBoxLayout") self.configListFilter = E4LineEdit(self, self.trUtf8("Enter filter text...")) self.configListFilter.setObjectName("configListFilter") self.leftVBoxLayout.addWidget(self.configListFilter) self.configList = QTreeWidget() self.configList.setObjectName("configList") self.leftVBoxLayout.addWidget(self.configList) self.connect(self.configListFilter, SIGNAL("textChanged(const QString &)"), self.__filterTextChanged) self.scrollArea = QScrollArea(self.configSplitter) self.scrollArea.setFrameShape(QFrame.NoFrame) self.scrollArea.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn) self.scrollArea.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOn) self.scrollArea.setWidgetResizable(False) self.scrollArea.setObjectName("scrollArea") self.configStack = QStackedWidget() self.configStack.setFrameShape(QFrame.Box) self.configStack.setFrameShadow(QFrame.Sunken) self.configStack.setObjectName("configStack") self.scrollArea.setWidget(self.configStack) self.emptyPage = QWidget() self.emptyPage.setGeometry(QRect(0, 0, 372, 591)) self.emptyPage.setObjectName("emptyPage") self.vboxlayout = QVBoxLayout(self.emptyPage) self.vboxlayout.setSpacing(6) self.vboxlayout.setMargin(6) self.vboxlayout.setObjectName("vboxlayout") spacerItem = QSpacerItem(20, 20, QSizePolicy.Minimum, QSizePolicy.Expanding) self.vboxlayout.addItem(spacerItem) self.emptyPagePixmap = QLabel(self.emptyPage) self.emptyPagePixmap.setAlignment(Qt.AlignCenter) self.emptyPagePixmap.setObjectName("emptyPagePixmap") self.emptyPagePixmap.setPixmap( QPixmap(os.path.join(getConfig('ericPixDir'), 'eric.png'))) self.vboxlayout.addWidget(self.emptyPagePixmap) self.textLabel1 = QLabel(self.emptyPage) self.textLabel1.setAlignment(Qt.AlignCenter) self.textLabel1.setObjectName("textLabel1") self.vboxlayout.addWidget(self.textLabel1) spacerItem1 = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) self.vboxlayout.addItem(spacerItem1) self.configStack.addWidget(self.emptyPage) self.verticalLayout_2.addWidget(self.configSplitter) self.buttonBox = QDialogButtonBox(self) self.buttonBox.setOrientation(Qt.Horizontal) self.buttonBox.setStandardButtons( QDialogButtonBox.Apply | QDialogButtonBox.Cancel | \ QDialogButtonBox.Ok | QDialogButtonBox.Reset) self.buttonBox.setObjectName("buttonBox") if not self.fromEric and self.displayMode == ConfigurationWidget.DefaultMode: self.buttonBox.button(QDialogButtonBox.Apply).hide() self.buttonBox.button(QDialogButtonBox.Apply).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Reset).setEnabled(False) self.verticalLayout_2.addWidget(self.buttonBox) self.setWindowTitle(self.trUtf8("Preferences")) self.configList.header().hide() self.configList.header().setSortIndicator(0, Qt.AscendingOrder) self.configList.setSortingEnabled(True) self.textLabel1.setText(self.trUtf8("Please select an entry of the list \n" "to display the configuration page.")) QMetaObject.connectSlotsByName(self) self.setTabOrder(self.configList, self.configStack) self.configStack.setCurrentWidget(self.emptyPage) self.configList.setFocus() def __filterTextChanged(self, filter): """ Private slot to handle a change of the filter. @param filter text of the filter line edit (string) """ self.__filterChildItems(self.configList.invisibleRootItem(), filter) def __filterChildItems(self, parent, filter): """ Private method to filter child items based on a filter string. @param parent reference to the parent item (QTreeWidgetItem) @param filter filter string (string) @return flag indicating a visible child item (boolean) """ childVisible = False for index in range(parent.childCount()): itm = parent.child(index) if itm.childCount() > 0: visible = self.__filterChildItems(itm, filter) else: visible = filter.isEmpty() or \ itm.text(0).contains(filter, Qt.CaseInsensitive) if visible: childVisible = True itm.setHidden(not visible) return childVisible def __initLexers(self): """ Private method to initialize the dictionary of preferences lexers. """ self.lexers = {} for language in QScintilla.Lexers.getSupportedLanguages().keys(): try: self.lexers[language] = PreferencesLexer(language, self) except PreferencesLexerLanguageError: pass def __importConfigurationPage(self, name): """ Private method to import a configuration page module. @param name name of the configuration page module (string) @return reference to the configuration page module """ modName = "Preferences.ConfigurationPages.%s" % name try: mod = __import__(modName) components = modName.split('.') for comp in components[1:]: mod = getattr(mod, comp) return mod except ImportError: KQMessageBox.critical(None, self.trUtf8("Configuration Page Error"), self.trUtf8("""

    The configuration page %1""" """ could not be loaded.

    """).arg(name)) return None def __showConfigurationPage(self, itm, column): """ Private slot to show a selected configuration page. @param itm reference to the selected item (QTreeWidgetItem) @param column column that was selected (integer) (ignored) """ pageName = itm.getPageName() self.showConfigurationPageByName(pageName) def __initPage(self, pageData): """ Private method to initialize a configuration page. @param pageData data structure for the page to initialize @return reference to the initialized page """ page = None if type(pageData[2] ) is types.FunctionType: page = pageData[2](self) else: mod = self.__importConfigurationPage(pageData[2]) if mod: page = mod.create(self) if page is not None: self.configStack.addWidget(page) pageData[-1] = page try: page.setMode(self.displayMode) except AttributeError: pass return page def showConfigurationPageByName(self, pageName): """ Public slot to show a named configuration page. @param pageName name of the configuration page to show (string or QString) """ if pageName == "empty": page = self.emptyPage else: pageName = unicode(pageName) pageData = self.configItems[pageName] if pageData[-1] is None and pageData[2] is not None: # the page was not loaded yet, create it page = self.__initPage(pageData) else: page = pageData[-1] if page is None: page = self.emptyPage self.configStack.setCurrentWidget(page) ssize = self.scrollArea.size() if self.scrollArea.horizontalScrollBar(): ssize.setHeight( ssize.height() - self.scrollArea.horizontalScrollBar().height() - 2) if self.scrollArea.verticalScrollBar(): ssize.setWidth( ssize.width() - self.scrollArea.verticalScrollBar().width() - 2) psize = page.minimumSizeHint() self.configStack.resize(max(ssize.width(), psize.width()), max(ssize.height(), psize.height())) if page != self.emptyPage: page.polishPage() self.buttonBox.button(QDialogButtonBox.Apply).setEnabled(True) self.buttonBox.button(QDialogButtonBox.Reset).setEnabled(True) else: self.buttonBox.button(QDialogButtonBox.Apply).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Reset).setEnabled(False) # reset scrollbars for sb in [self.scrollArea.horizontalScrollBar(), self.scrollArea.verticalScrollBar()]: if sb: sb.setValue(0) def calledFromEric(self): """ Public method to check, if invoked from within eric. @return flag indicating invocation from within eric (boolean) """ return self.fromEric def getPage(self, pageName): """ Public method to get a reference to the named page. @param pageName name of the configuration page (string) @return reference to the page or None, indicating page was not loaded yet """ return self.configItems[pageName][-1] def getLexers(self): """ Public method to get a reference to the lexers dictionary. @return reference to the lexers dictionary """ return self.lexers def setPreferences(self): """ Public method called to store the selected values into the preferences storage. """ for key, pageData in self.configItems.items(): if pageData[-1]: pageData[-1].save() # page was loaded (and possibly modified) QApplication.processEvents() # ensure HMI is responsive def on_buttonBox_clicked(self, button): """ Private slot called by a button of the button box clicked. @param button button that was clicked (QAbstractButton) """ if button == self.buttonBox.button(QDialogButtonBox.Apply): self.on_applyButton_clicked() elif button == self.buttonBox.button(QDialogButtonBox.Reset): self.on_resetButton_clicked() @pyqtSignature("") def on_applyButton_clicked(self): """ Private slot called to apply the settings of the current page. """ if self.configStack.currentWidget() != self.emptyPage: page = self.configStack.currentWidget() savedState = page.saveState() page.save() self.emit(SIGNAL('preferencesChanged')) if savedState is not None: page.setState(savedState) @pyqtSignature("") def on_resetButton_clicked(self): """ Private slot called to reset the settings of the current page. """ if self.configStack.currentWidget() != self.emptyPage: currentPage = self.configStack.currentWidget() savedState = currentPage.saveState() pageName = self.configList.currentItem().getPageName() self.configStack.removeWidget(currentPage) if pageName == "editorHighlightingStylesPage": self.__initLexers() pageData = self.configItems[unicode(pageName)] pageData[-1] = None self.showConfigurationPageByName(pageName) if savedState is not None: self.configStack.currentWidget().setState(savedState) class ConfigurationDialog(QDialog): """ Class for the dialog variant. @signal preferencesChanged emitted after settings have been changed """ DefaultMode = ConfigurationWidget.DefaultMode HelpBrowserMode = ConfigurationWidget.HelpBrowserMode TrayStarterMode = ConfigurationWidget.TrayStarterMode def __init__(self, parent = None, name = None, modal = False, fromEric = True, displayMode = ConfigurationWidget.DefaultMode): """ Constructor @param parent The parent widget of this dialog. (QWidget) @param name The name of this dialog. (QString) @param modal Flag indicating a modal dialog. (boolean) @keyparam fromEric flag indicating a dialog generation from within the eric4 ide (boolean) @keyparam displayMode mode of the configuration dialog (DefaultMode, HelpBrowserMode, TrayStarterMode) """ QDialog.__init__(self, parent) if name: self.setObjectName(name) self.setModal(modal) self.layout = QVBoxLayout(self) self.layout.setMargin(0) self.layout.setSpacing(0) self.cw = ConfigurationWidget(self, fromEric = fromEric, displayMode = displayMode) size = self.cw.size() self.layout.addWidget(self.cw) self.resize(size) self.connect(self.cw, SIGNAL("accepted()"), self.accept) self.connect(self.cw, SIGNAL("rejected()"), self.reject) self.connect(self.cw, SIGNAL('preferencesChanged'), self.__preferencesChanged) def __preferencesChanged(self): """ Private slot to handle a change of the preferences. """ self.emit(SIGNAL('preferencesChanged')) def showConfigurationPageByName(self, pageName): """ Public slot to show a named configuration page. @param pageName name of the configuration page to show (string or QString) """ self.cw.showConfigurationPageByName(pageName) def setPreferences(self): """ Public method called to store the selected values into the preferences storage. """ self.cw.setPreferences() class ConfigurationWindow(KQMainWindow): """ Main window class for the standalone dialog. """ def __init__(self, parent = None): """ Constructor @param parent reference to the parent widget (QWidget) """ KQMainWindow.__init__(self, parent) self.cw = ConfigurationWidget(self, fromEric = False) size = self.cw.size() self.setCentralWidget(self.cw) self.resize(size) self.connect(self.cw, SIGNAL("accepted()"), self.accept) self.connect(self.cw, SIGNAL("rejected()"), self.close) def showConfigurationPageByName(self, pageName): """ Public slot to show a named configuration page. @param pageName name of the configuration page to show (string or QString) """ self.cw.showConfigurationPageByName(pageName) def accept(self): """ Protected slot called by the Ok button. """ self.cw.setPreferences() Preferences.saveResetLayout() Preferences.syncPreferences() self.close() eric4-4.5.18/eric/Preferences/PaxHeaders.8617/ViewProfileToolboxesDialog.ui0000644000175000001440000000007411072705636024577 xustar000000000000000030 atime=1389081083.750724385 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ViewProfileToolboxesDialog.ui0000644000175000001440000001031411072705636024323 0ustar00detlevusers00000000000000 ViewProfileToolboxesDialog 0 0 608 179 Configure View Profiles true Select the windows, that should be visible, when the different profiles are active. Qt::AlignVCenter &Edit Profile Vertical Toolbox true Horizontal Toolbox true Debug-Viewer &Debug Profile Vertical Toolbox Horizontal Toolbox true Debug-Viewer true Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok qPixmapFromMimeSource epvtCheckBox ephtCheckBox epdbCheckBox dpvtCheckBox dphtCheckBox dpdbCheckBox buttonBox buttonBox accepted() ViewProfileToolboxesDialog accept() 56 208 56 229 buttonBox rejected() ViewProfileToolboxesDialog reject() 146 215 146 234 eric4-4.5.18/eric/Preferences/PaxHeaders.8617/ShortcutsDialog.ui0000644000175000001440000000007411662203016022431 xustar000000000000000030 atime=1389081083.750724385 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ShortcutsDialog.ui0000644000175000001440000001076511662203016022167 0ustar00detlevusers00000000000000 ShortcutsDialog 0 0 800 480 Keyboard Shortcuts &Filter: searchEdit Enter the regular expression that should be contained in the shortcut action Press to clear the search edit Filter on Select to filter based on the actions &Action true Select to filter based on shortcut or alternative shortcut &Shortcut or Alternative Qt::Horizontal 40 20 This list shows all keyboard shortcuts. <b>Keyboard Shortcuts List</b> <p>This list shows all keyboard shortcuts defined in the application. Double click an entry in order to change the respective shortcut. Alternatively, the shortcut might be changed by editing the key sequence in the respective column.</p> true Action Shortcut Alternativ Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok qPixmapFromMimeSource searchEdit clearSearchButton actionButton shortcutButton shortcutsList buttonBox buttonBox rejected() ShortcutsDialog reject() 69 457 77 477 eric4-4.5.18/eric/Preferences/PaxHeaders.8617/ViewProfileDialog.py0000644000175000001440000000013212261012651022673 xustar000000000000000030 mtime=1388582313.010089894 30 atime=1389081083.750724385 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ViewProfileDialog.py0000644000175000001440000001325512261012651022433 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2002 - 2014 Detlev Offenbach # """ Module implementing a dialog to configure the various view profiles. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from Ui_ViewProfileDialog import Ui_ViewProfileDialog from Ui_ViewProfileToolboxesDialog import Ui_ViewProfileToolboxesDialog from Ui_ViewProfileSidebarsDialog import Ui_ViewProfileSidebarsDialog class ViewProfileDialog(QDialog): """ Class implementing a dialog to configure the various view profiles. """ def __init__(self, layout, profiles, separateShell, separateBrowser, parent = None): """ Constructor @param layout type of the window layout (string) @param profiles dictionary of tuples containing the visibility of the windows for the various profiles @param separateShell flag indicating that the Python shell is a separate window @param separateBrowser flag indicating that the file browser is a separate window @param parent parent widget of this dialog (QWidget) """ QDialog.__init__(self, parent) self.__layout = layout if self.__layout == "Toolboxes": self.ui = Ui_ViewProfileToolboxesDialog() elif self.__layout == "Sidebars": self.ui = Ui_ViewProfileSidebarsDialog() else: self.ui = Ui_ViewProfileDialog() self.ui.setupUi(self) self.profiles = profiles # set the editor profile profile = self.profiles["edit"][0] self.ui.epdbCheckBox.setChecked(profile[2]) if self.__layout in ["Toolboxes", "Sidebars"]: profile = self.profiles["edit"][5] self.ui.epvtCheckBox.setChecked(profile[0]) self.ui.ephtCheckBox.setChecked(profile[1]) else: self.ui.eppbCheckBox.setChecked(profile[0]) if separateBrowser: self.ui.epfbCheckBox.setChecked(profile[1]) else: self.ui.epfbCheckBox.setChecked(False) self.ui.epfbCheckBox.setEnabled(False) if separateShell: self.ui.eppsCheckBox.setChecked(profile[3]) else: self.ui.eppsCheckBox.setChecked(False) self.ui.eppsCheckBox.setEnabled(False) self.ui.eplvCheckBox.setChecked(profile[4]) self.ui.eptvCheckBox.setChecked(profile[5]) self.ui.eptevCheckBox.setChecked(profile[6]) self.ui.epmpbCheckBox.setChecked(profile[7]) self.ui.eptwCheckBox.setChecked(profile[8]) # set the debug profile profile = self.profiles["debug"][0] self.ui.dpdbCheckBox.setChecked(profile[2]) if self.__layout in ["Toolboxes", "Sidebars"]: profile = self.profiles["edit"][5] self.ui.dpvtCheckBox.setChecked(profile[0]) self.ui.dphtCheckBox.setChecked(profile[1]) else: self.ui.dppbCheckBox.setChecked(profile[0]) if separateBrowser: self.ui.dpfbCheckBox.setChecked(profile[1]) else: self.ui.dpfbCheckBox.setChecked(False) self.ui.dpfbCheckBox.setEnabled(False) if separateShell: self.ui.dppsCheckBox.setChecked(profile[3]) else: self.ui.dppsCheckBox.setChecked(False) self.ui.dppsCheckBox.setEnabled(False) self.ui.dplvCheckBox.setChecked(profile[4]) self.ui.dptvCheckBox.setChecked(profile[5]) self.ui.dptevCheckBox.setChecked(profile[6]) self.ui.dpmpbCheckBox.setChecked(profile[7]) self.ui.dptwCheckBox.setChecked(profile[8]) def getProfiles(self): """ Public method to retrieve the configured profiles. @return dictionary of tuples containing the visibility of the windows for the various profiles """ if self.__layout in ["Toolboxes", "Sidebars"]: # get the edit profile self.profiles["edit"][0][2] = self.ui.epdbCheckBox.isChecked() self.profiles["edit"][5] = [\ self.ui.epvtCheckBox.isChecked(), self.ui.ephtCheckBox.isChecked(), ] # get the debug profile self.profiles["debug"][0][2] = self.ui.dpdbCheckBox.isChecked() self.profiles["debug"][5] = [\ self.ui.dpvtCheckBox.isChecked(), self.ui.dphtCheckBox.isChecked(), ] else: # get the edit profile self.profiles["edit"][0] = [\ self.ui.eppbCheckBox.isChecked(), self.ui.epfbCheckBox.isChecked(), self.ui.epdbCheckBox.isChecked(), self.ui.eppsCheckBox.isChecked(), self.ui.eplvCheckBox.isChecked(), self.ui.eptvCheckBox.isChecked(), self.ui.eptevCheckBox.isChecked(), self.ui.epmpbCheckBox.isChecked(), self.ui.eptwCheckBox.isChecked(), ] # get the debug profile self.profiles["debug"][0] = [\ self.ui.dppbCheckBox.isChecked(), self.ui.dpfbCheckBox.isChecked(), self.ui.dpdbCheckBox.isChecked(), self.ui.dppsCheckBox.isChecked(), self.ui.dplvCheckBox.isChecked(), self.ui.dptvCheckBox.isChecked(), self.ui.dptevCheckBox.isChecked(), self.ui.dpmpbCheckBox.isChecked(), self.ui.dptwCheckBox.isChecked(), ] return self.profiles eric4-4.5.18/eric/Preferences/PaxHeaders.8617/ToolConfigurationDialog.ui0000644000175000001440000000007411072705636024112 xustar000000000000000030 atime=1389081083.750724385 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ToolConfigurationDialog.ui0000644000175000001440000002615711072705636023652 0ustar00detlevusers00000000000000 ToolConfigurationDialog 0 0 591 487 Configure Tools Menu true Add a separator <b>Add separator</b><p>Add a separator for the menu.</p> Add &Separator Add a new tools entry <b>Add</b> <p>Add a new tools entry with the values entered below.</p> &Add Alt+A Select the output redirection mode <b>Redirect output<b><p>Select the output redirection mode. The standard error channel is either not redirected or shown in the log viewer.</p> Enter the arguments for the executable <b>Arguments</b> <p>Enter the arguments for the executable.</p> false Move up <b>Move Up</b> <p>Move the selected entry up.</p> &Up Alt+U false Delete the selected entry <b>Delete</b> <p>Delete the selected entry.</p> &Delete Alt+D Clear all entry fields <b>New</b> <p>Clear all entry fields for entering a new tools entry.</p> &New Alt+N Select the icon via a file selection dialog <b>Icon</b> <p>Select the icon via a file selection dialog.</p> ... Enter the filename of the executable <b>Executable</b> <p>Enter the filename of the executable.</p> false Move down <b>Move Down</b> <p>Move the selected entry down.</p> Do&wn Alt+W Qt::Vertical QSizePolicy::Expanding 105 22 Enter the menu text <b>Menu text</b> <p>Enter the menu text. Precede the accelerator key with an & character.</p> false Change the values of the selected entry <b>Change</b> <p>Change the values of the selected entry.</p> C&hange Alt+H &Icon file: iconEdit Ar&guments: argumentsEdit &Menu text: menuEdit Qt::Horizontal Select the executable via a file selection dialog <b>Executable</b> <p>Select the executable via a file selection dialog.</p> ... Enter the filename of the icon <b>Icon</b> <p>Enter the filename of the icon.</p> &Redirect output redirectCombo &Executable file: executableEdit Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok qPixmapFromMimeSource toolsList menuEdit iconEdit iconButton executableEdit executableButton argumentsEdit redirectCombo newButton addButton changeButton deleteButton upButton downButton separatorButton buttonBox accepted() ToolConfigurationDialog accept() 62 465 62 486 buttonBox rejected() ToolConfigurationDialog reject() 177 466 178 486 eric4-4.5.18/eric/Preferences/PaxHeaders.8617/ViewProfileDialog.ui0000644000175000001440000000007411751500245022671 xustar000000000000000030 atime=1389081083.751724385 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ViewProfileDialog.ui0000644000175000001440000001677511751500245022436 0ustar00detlevusers00000000000000 ViewProfileDialog 0 0 608 370 Configure View Profiles true Select the windows, that should be visible, when the different profiles are active. Qt::AlignVCenter &Edit Profile Multiproject-Viewer true Project-Viewer true File-Browser Debug-Viewer Shell true Terminal true Log-Viewer true Task-Viewer true Templates-Viewer true &Debug Profile Multiproject-Viewer Project-Viewer false File-Browser Debug-Viewer true Shell true Terminal true Log-Viewer true Task-Viewer true Templates-Viewer Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok qPixmapFromMimeSource epmpbCheckBox eppbCheckBox epfbCheckBox epdbCheckBox eppsCheckBox eptwCheckBox eplvCheckBox eptvCheckBox eptevCheckBox dpmpbCheckBox dppbCheckBox dpfbCheckBox dpdbCheckBox dppsCheckBox dptwCheckBox dplvCheckBox dptvCheckBox dptevCheckBox buttonBox buttonBox accepted() ViewProfileDialog accept() 56 208 56 229 buttonBox rejected() ViewProfileDialog reject() 146 215 146 234 eric4-4.5.18/eric/Preferences/PaxHeaders.8617/ToolConfigurationDialog.py0000644000175000001440000000013212261012651024105 xustar000000000000000030 mtime=1388582313.015089957 30 atime=1389081083.751724385 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ToolConfigurationDialog.py0000644000175000001440000003230212261012651023637 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2002 - 2014 Detlev Offenbach # """ Module implementing a configuration dialog for the tools menu. """ import sys import os import copy from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQFileDialog, KQMessageBox from E4Gui.E4Completers import E4FileCompleter from Ui_ToolConfigurationDialog import Ui_ToolConfigurationDialog import Utilities class ToolConfigurationDialog(QDialog, Ui_ToolConfigurationDialog): """ Class implementing a configuration dialog for the tools menu. """ def __init__(self, toollist, parent=None): """ Constructor @param toollist list of configured tools @param parent parent widget (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.iconCompleter = E4FileCompleter(self.iconEdit) self.executableCompleter = E4FileCompleter(self.executableEdit) self.redirectionModes = [ ("no", self.trUtf8("no redirection")), ("show", self.trUtf8("show output")), ("insert", self.trUtf8("insert into current editor")), ("replaceSelection", self.trUtf8("replace selection of current editor")), ] self.toollist = copy.deepcopy(toollist) for tool in toollist: self.toolsList.addItem(tool['menutext']) for mode in self.redirectionModes: self.redirectCombo.addItem(mode[1]) if len(toollist): self.toolsList.setCurrentRow(0) self.on_toolsList_currentRowChanged(0) t = self.argumentsEdit.whatsThis() if not t.isEmpty(): t = t.append(Utilities.getPercentReplacementHelp()) self.argumentsEdit.setWhatsThis(t) def __findModeIndex(self, shortName): """ Private method to find the mode index by its short name. @param shortName short name of the mode (string) @return index of the mode (integer) """ ind = 0 for mode in self.redirectionModes: if mode[0] == shortName: return ind ind += 1 return 1 # default is "show output" @pyqtSignature("") def on_newButton_clicked(self): """ Private slot to clear all entry fields. """ self.executableEdit.clear() self.menuEdit.clear() self.iconEdit.clear() self.argumentsEdit.clear() self.redirectCombo.setCurrentIndex(1) @pyqtSignature("") def on_addButton_clicked(self): """ Private slot to add a new entry. """ menutext = self.menuEdit.text() icon = self.iconEdit.text() executable = self.executableEdit.text() arguments = self.argumentsEdit.text() redirect = self.redirectionModes[self.redirectCombo.currentIndex()][0] if executable.isEmpty(): KQMessageBox.critical(self, self.trUtf8("Add tool entry"), self.trUtf8("You have to set an executable to add to the" " Tools-Menu first.")) return if menutext.isEmpty(): KQMessageBox.critical(self, self.trUtf8("Add tool entry"), self.trUtf8("You have to insert a menuentry text to add the" " selected program to the Tools-Menu first.")) return executable = unicode(executable) if not Utilities.isinpath(executable): KQMessageBox.critical(self, self.trUtf8("Add tool entry"), self.trUtf8("The selected file could not be found or" " is not an executable." " Please choose an executable filename.")) return if len(self.toolsList.findItems(menutext, Qt.MatchFlags(Qt.MatchExactly))): KQMessageBox.critical(self, self.trUtf8("Add tool entry"), self.trUtf8("An entry for the menu text %1 already exists.")\ .arg(menutext)) return self.toolsList.addItem(menutext) tool = { 'menutext' : unicode(menutext), 'icon' : unicode(icon), 'executable' : executable, 'arguments' : unicode(arguments), 'redirect' : redirect, } self.toollist.append(tool) @pyqtSignature("") def on_changeButton_clicked(self): """ Private slot to change an entry. """ row = self.toolsList.currentRow() if row < 0: return menutext = self.menuEdit.text() icon = self.iconEdit.text() executable = self.executableEdit.text() arguments = self.argumentsEdit.text() redirect = self.redirectionModes[self.redirectCombo.currentIndex()][0] if executable.isEmpty(): KQMessageBox.critical(self, self.trUtf8("Change tool entry"), self.trUtf8("You have to set an executable to change the" " Tools-Menu entry.")) return if menutext.isEmpty(): KQMessageBox.critical(self, self.trUtf8("Change tool entry"), self.trUtf8("You have to insert a menuentry text to change the" " selected Tools-Menu entry.")) return executable = unicode(executable) if not Utilities.isinpath(executable): KQMessageBox.critical(self, self.trUtf8("Change tool entry"), self.trUtf8("The selected file could not be found or" " is not an executable." " Please choose an existing executable filename.")) return self.toollist[row] = { 'menutext' : unicode(menutext), 'icon' : unicode(icon), 'executable' : executable, 'arguments' : unicode(arguments), 'redirect' : redirect, } self.toolsList.currentItem().setText(menutext) self.changeButton.setEnabled(False) @pyqtSignature("") def on_deleteButton_clicked(self): """ Private slot to delete the selected entry. """ row = self.toolsList.currentRow() if row < 0: return del self.toollist[row] itm = self.toolsList.takeItem(row) del itm if row >= len(self.toollist): row -= 1 self.toolsList.setCurrentRow(row) self.on_toolsList_currentRowChanged(row) @pyqtSignature("") def on_downButton_clicked(self): """ Private slot to move an entry down in the list. """ curr = self.toolsList.currentRow() self.__swap(curr, curr+1) self.toolsList.clear() for tool in self.toollist: self.toolsList.addItem(tool['menutext']) self.toolsList.setCurrentRow(curr + 1) if curr + 1 == len(self.toollist): self.downButton.setEnabled(False) self.upButton.setEnabled(True) @pyqtSignature("") def on_upButton_clicked(self): """ Private slot to move an entry up in the list. """ curr = self.toolsList.currentRow() self.__swap(curr-1, curr) self.toolsList.clear() for tool in self.toollist: self.toolsList.addItem(tool['menutext']) self.toolsList.setCurrentRow(curr - 1) if curr - 1 == 0: self.upButton.setEnabled(False) self.downButton.setEnabled(True) @pyqtSignature("") def on_separatorButton_clicked(self): """ Private slot to add a menu separator. """ self.toolsList.addItem('--') tool = { 'menutext' : '--', 'icon' : '', 'executable' : '', 'arguments' : '', 'redirect' : 'no', } self.toollist.append(tool) @pyqtSignature("") def on_executableButton_clicked(self): """ Private slot to handle the executable selection via a file selection dialog. """ execfile = KQFileDialog.getOpenFileName(\ self, self.trUtf8("Select executable"), self.executableEdit.text(), QString()) if not execfile.isEmpty(): execfile = unicode(Utilities.toNativeSeparators(execfile)) if not Utilities.isinpath(execfile): KQMessageBox.critical(self, self.trUtf8("Select executable"), self.trUtf8("The selected file is not an executable." " Please choose an executable filename.")) return self.executableEdit.setText(execfile) @pyqtSignature("") def on_iconButton_clicked(self): """ Private slot to handle the icon selection via a file selection dialog. """ icon = KQFileDialog.getOpenFileName(\ self, self.trUtf8("Select icon file"), self.iconEdit.text(), self.trUtf8("Icon files (*.png)"), None) if not icon.isEmpty(): self.iconEdit.setText(icon) def on_toolsList_currentRowChanged(self, row): """ Private slot to set the lineedits depending on the selected entry. @param row the row of the selected entry (integer) """ if row >= 0 and row < len(self.toollist): if self.toollist[row]['menutext'] == '--': self.executableEdit.clear() self.menuEdit.clear() self.iconEdit.clear() self.argumentsEdit.clear() self.redirectCombo.setCurrentIndex(0) else: tool = self.toollist[row] self.menuEdit.setText(tool['menutext']) self.iconEdit.setText(tool['icon']) self.executableEdit.setText(tool['executable']) self.argumentsEdit.setText(tool['arguments']) self.redirectCombo.setCurrentIndex(self.__findModeIndex(tool['redirect'])) self.changeButton.setEnabled(False) self.deleteButton.setEnabled(True) if row != 0: self.upButton.setEnabled(True) else: self.upButton.setEnabled(False) if row+1 != len(self.toollist): self.downButton.setEnabled(True) else: self.downButton.setEnabled(False) else: self.executableEdit.clear() self.menuEdit.clear() self.iconEdit.clear() self.argumentsEdit.clear() self.downButton.setEnabled(False) self.upButton.setEnabled(False) self.deleteButton.setEnabled(False) self.changeButton.setEnabled(False) def __toolEntryChanged(self): """ Private slot to perform actions when a tool entry was changed. """ row = self.toolsList.currentRow() if row >= 0 and \ row < len(self.toollist) and \ self.toollist[row]['menutext'] != '--': self.changeButton.setEnabled(True) def on_menuEdit_textChanged(self, text): """ Private slot called, when the menu text was changed. @param text the new text (QString) (ignored) """ self.__toolEntryChanged() def on_iconEdit_textChanged(self, text): """ Private slot called, when the icon path was changed. @param text the new text (QString) (ignored) """ self.__toolEntryChanged() def on_executableEdit_textChanged(self, text): """ Private slot called, when the executable was changed. @param text the new text (QString) (ignored) """ self.__toolEntryChanged() def on_argumentsEdit_textChanged(self, text): """ Private slot called, when the arguments string was changed. @param text the new text (QString) (ignored) """ self.__toolEntryChanged() @pyqtSignature("int") def on_redirectCombo_currentIndexChanged(self, index): """ Private slot called, when the redirection mode was changed. @param index the selected mode index (integer) (ignored) """ self.__toolEntryChanged() def getToollist(self): """ Public method to retrieve the tools list. @return a list of tuples containing the menu text, the executable, the executables arguments and a redirection flag """ return self.toollist[:] def __swap(self, itm1, itm2): """ Private method used two swap two list entries given by their index. @param itm1 index of first entry (int) @param itm2 index of second entry (int) """ tmp = self.toollist[itm1] self.toollist[itm1] = self.toollist[itm2] self.toollist[itm2] = tmp eric4-4.5.18/eric/Preferences/PaxHeaders.8617/ShortcutsDialog.py0000644000175000001440000000013212261012651022436 xustar000000000000000030 mtime=1388582313.017089982 30 atime=1389081083.751724385 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Preferences/ShortcutsDialog.py0000644000175000001440000004742012261012651022177 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Module implementing a dialog for the configuration of eric4s keyboard shortcuts. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQMessageBox from KdeQt.KQApplication import e4App from Ui_ShortcutsDialog import Ui_ShortcutsDialog from ShortcutDialog import ShortcutDialog import UI.PixmapCache import Preferences from Preferences import Shortcuts class ShortcutsDialog(QDialog, Ui_ShortcutsDialog): """ Class implementing a dialog for the configuration of eric4s keyboard shortcuts. """ objectNameRole = Qt.UserRole noCheckRole = Qt.UserRole + 1 objectTypeRole = Qt.UserRole + 2 def __init__(self, parent = None, name = None, modal = False): """ Constructor @param parent The parent widget of this dialog. (QWidget) @param name The name of this dialog. (QString) @param modal Flag indicating a modal dialog. (boolean) """ QDialog.__init__(self, parent) if name: self.setObjectName(name) self.setModal(modal) self.setupUi(self) self.clearSearchButton.setIcon(UI.PixmapCache.getIcon("clearLeft.png")) self.shortcutsList.headerItem().setText(self.shortcutsList.columnCount(), "") self.shortcutsList.header().setSortIndicator(0, Qt.AscendingOrder) self.shortcutDialog = ShortcutDialog() self.connect(self.shortcutDialog, SIGNAL('shortcutChanged'), self.__shortcutChanged) def __resort(self): """ Private method to resort the tree. """ self.shortcutsList.sortItems(self.shortcutsList.sortColumn(), self.shortcutsList.header().sortIndicatorOrder()) def __resizeColumns(self): """ Private method to resize the list columns. """ self.shortcutsList.header().resizeSections(QHeaderView.ResizeToContents) self.shortcutsList.header().setStretchLastSection(True) def __generateCategoryItem(self, title): """ Private method to generate a category item. @param title title for the item (QString) @return reference to the category item (QTreeWidgetItem) """ itm = QTreeWidgetItem(self.shortcutsList, QStringList(title)) itm.setExpanded(True) return itm def __generateShortcutItem(self, category, action, noCheck = False, objectType = None): """ Private method to generate a keyboard shortcut item. @param category reference to the category item (QTreeWidgetItem) @param action reference to the keyboard action (E4Action) @keyparam noCheck flag indicating that no uniqueness check should be performed (boolean) @keyparam objectType type of the object (string). Objects of the same type are not checked for duplicate shortcuts. """ itm = QTreeWidgetItem(category, QStringList() << action.iconText() << QString(action.shortcut().toString()) \ << QString(action.alternateShortcut().toString())) itm.setIcon(0, action.icon()) itm.setData(0, self.objectNameRole, QVariant(action.objectName())) itm.setData(0, self.noCheckRole, QVariant(noCheck)) if objectType: itm.setData(0, self.objectTypeRole, QVariant(objectType)) else: itm.setData(0, self.objectTypeRole, QVariant()) def populate(self): """ Public method to populate the dialog. """ self.searchEdit.clear() self.searchEdit.setFocus() self.shortcutsList.clear() self.actionButton.setChecked(True) # let the plugin manager create on demand plugin objects pm = e4App().getObject("PluginManager") pm.initOnDemandPlugins() # populate the various lists self.projectItem = self.__generateCategoryItem(self.trUtf8("Project")) for act in e4App().getObject("Project").getActions(): self.__generateShortcutItem(self.projectItem, act) self.uiItem = self.__generateCategoryItem(self.trUtf8("General")) for act in e4App().getObject("UserInterface").getActions('ui'): self.__generateShortcutItem(self.uiItem, act) self.wizardsItem = self.__generateCategoryItem(self.trUtf8("Wizards")) for act in e4App().getObject("UserInterface").getActions('wizards'): self.__generateShortcutItem(self.wizardsItem, act) self.debugItem = self.__generateCategoryItem(self.trUtf8("Debug")) for act in e4App().getObject("DebugUI").getActions(): self.__generateShortcutItem(self.debugItem, act) self.editItem = self.__generateCategoryItem(self.trUtf8("Edit")) for act in e4App().getObject("ViewManager").getActions('edit'): self.__generateShortcutItem(self.editItem, act) self.fileItem = self.__generateCategoryItem(self.trUtf8("File")) for act in e4App().getObject("ViewManager").getActions('file'): self.__generateShortcutItem(self.fileItem, act) self.searchItem = self.__generateCategoryItem(self.trUtf8("Search")) for act in e4App().getObject("ViewManager").getActions('search'): self.__generateShortcutItem(self.searchItem, act) self.viewItem = self.__generateCategoryItem(self.trUtf8("View")) for act in e4App().getObject("ViewManager").getActions('view'): self.__generateShortcutItem(self.viewItem, act) self.macroItem = self.__generateCategoryItem(self.trUtf8("Macro")) for act in e4App().getObject("ViewManager").getActions('macro'): self.__generateShortcutItem(self.macroItem, act) self.bookmarkItem = self.__generateCategoryItem(self.trUtf8("Bookmarks")) for act in e4App().getObject("ViewManager").getActions('bookmark'): self.__generateShortcutItem(self.bookmarkItem, act) self.spellingItem = self.__generateCategoryItem(self.trUtf8("Spelling")) for act in e4App().getObject("ViewManager").getActions('spelling'): self.__generateShortcutItem(self.spellingItem, act) actions = e4App().getObject("ViewManager").getActions('window') if actions: self.windowItem = self.__generateCategoryItem(self.trUtf8("Window")) for act in actions: self.__generateShortcutItem(self.windowItem, act) self.pluginCategoryItems = [] for category, ref in e4App().getPluginObjects(): if hasattr(ref, "getActions"): categoryItem = self.__generateCategoryItem(category) objectType = e4App().getPluginObjectType(category) for act in ref.getActions(): self.__generateShortcutItem(categoryItem, act, objectType = objectType) self.pluginCategoryItems.append(categoryItem) self.helpViewerItem = self.__generateCategoryItem(self.trUtf8("Web Browser")) for act in e4App().getObject("DummyHelpViewer").getActions(): self.__generateShortcutItem(self.helpViewerItem, act, True) self.__resort() self.__resizeColumns() self.__editTopItem = None def on_shortcutsList_itemDoubleClicked(self, itm, column): """ Private slot to handle a double click in the shortcuts list. @param itm the list item that was double clicked (QTreeWidgetItem) @param column the list item was double clicked in (integer) """ if itm.childCount(): return self.__editTopItem = itm.parent() self.shortcutDialog.setKeys(QKeySequence(itm.text(1)), QKeySequence(itm.text(2)), itm.data(0, self.noCheckRole).toBool(), itm.data(0, self.objectTypeRole).toString()) self.shortcutDialog.show() def on_shortcutsList_itemClicked(self, itm, column): """ Private slot to handle a click in the shortcuts list. @param itm the list item that was clicked (QTreeWidgetItem) @param column the list item was clicked in (integer) """ if itm.childCount() or column not in [1, 2]: return self.shortcutsList.openPersistentEditor(itm, column) def on_shortcutsList_itemChanged(self, itm, column): """ Private slot to handle the edit of a shortcut key. @param itm reference to the item changed (QTreeWidgetItem) @param column column changed (integer) """ if column != 0: keystr = unicode(itm.text(column)).title() if not itm.data(0, self.noCheckRole).toBool() and \ not self.__checkShortcut(QKeySequence(keystr), itm.data(0, self.objectTypeRole).toString(), itm.parent()): itm.setText(column, "") else: itm.setText(column, keystr) self.shortcutsList.closePersistentEditor(itm, column) def __shortcutChanged(self, keysequence, altKeysequence, noCheck, objectType): """ Private slot to handle the shortcutChanged signal of the shortcut dialog. @param keysequence the keysequence of the changed action (QKeySequence) @param altKeysequence the alternative keysequence of the changed action (QKeySequence) @param noCheck flag indicating that no uniqueness check should be performed (boolean) @param objectType type of the object (string). """ if not noCheck and \ (not self.__checkShortcut(keysequence, objectType, self.__editTopItem) or \ not self.__checkShortcut(altKeysequence, objectType, self.__editTopItem)): return self.shortcutsList.currentItem().setText(1, QString(keysequence)) self.shortcutsList.currentItem().setText(2, QString(altKeysequence)) self.__resort() self.__resizeColumns() def __checkShortcut(self, keysequence, objectType, origTopItem): """ Private method to check a keysequence for uniqueness. @param keysequence the keysequence to check (QKeySequence) @param objectType type of the object (string). Entries with the same object type are not checked for uniqueness. @param origTopItem refrence to the parent of the item to be checked (QTreeWidgetItem) @return flag indicating uniqueness (boolean) """ if keysequence.isEmpty(): return True keystr = unicode(QString(keysequence)) keyname = unicode(self.shortcutsList.currentItem().text(0)) for topIndex in range(self.shortcutsList.topLevelItemCount()): topItem = self.shortcutsList.topLevelItem(topIndex) for index in range(topItem.childCount()): itm = topItem.child(index) # 1. shall a check be performed? if itm.data(0, self.noCheckRole).toBool(): continue # 2. check object type itmObjectType = itm.data(0, self.objectTypeRole).toString() if itmObjectType and \ itmObjectType == objectType and \ topItem != origTopItem: continue # 3. check key name if unicode(itm.text(0)) != keyname: for col in [1, 2]: # check against primary, then alternative binding itmseq = unicode(itm.text(col)) # step 1: check if shortcut is already allocated if keystr == itmseq: res = KQMessageBox.warning(None, self.trUtf8("Edit shortcuts"), self.trUtf8(\ """

    %1 has already been allocated""" """ to the %2 action. """ """Remove this binding?

    """) .arg(keystr).arg(itm.text(0)), QMessageBox.StandardButtons(\ QMessageBox.No | \ QMessageBox.Yes), QMessageBox.No) if res == QMessageBox.Yes: itm.setText(col, "") return True else: return False if not itmseq: continue # step 2: check if shortcut hides an already allocated if itmseq.startswith("%s+" % keystr): res = KQMessageBox.warning(None, self.trUtf8("Edit shortcuts"), self.trUtf8(\ """

    %1 hides the %2 action. """ """Remove this binding?

    """) .arg(keystr).arg(itm.text(0)), QMessageBox.StandardButtons(\ QMessageBox.No | \ QMessageBox.Yes), QMessageBox.No) if res == QMessageBox.Yes: itm.setText(col, "") return True else: return False # step 3: check if shortcut is hidden by an already allocated if keystr.startswith("%s+" % itmseq): res = KQMessageBox.warning(None, self.trUtf8("Edit shortcuts"), self.trUtf8(\ """

    %1 is hidden by the %2 action. """ """Remove this binding?

    """) .arg(keystr).arg(itm.text(0)), QMessageBox.StandardButtons(\ QMessageBox.No | \ QMessageBox.Yes), QMessageBox.No) if res == QMessageBox.Yes: itm.setText(col, "") return True else: return False return True def __saveCategoryActions(self, category, actions): """ Private method to save the actions for a category. @param category reference to the category item (QTreeWidgetItem) @param actions list of actions for the category (list of E4Action) """ for index in range(category.childCount()): itm = category.child(index) txt = str(itm.text(4)) # this is one more due to empty last section txt = itm.data(0, self.objectNameRole).toString() for act in actions: if txt == act.objectName(): act.setShortcut(QKeySequence(itm.text(1))) act.setAlternateShortcut(QKeySequence(itm.text(2)), removeEmpty=True) break def on_buttonBox_accepted(self): """ Private slot to handle the OK button press. """ self.__saveCategoryActions(self.projectItem, e4App().getObject("Project").getActions()) self.__saveCategoryActions(self.uiItem, e4App().getObject("UserInterface").getActions('ui')) self.__saveCategoryActions(self.wizardsItem, e4App().getObject("UserInterface").getActions('wizards')) self.__saveCategoryActions(self.debugItem, e4App().getObject("DebugUI").getActions()) self.__saveCategoryActions(self.editItem, e4App().getObject("ViewManager").getActions('edit')) self.__saveCategoryActions(self.fileItem, e4App().getObject("ViewManager").getActions('file')) self.__saveCategoryActions(self.searchItem, e4App().getObject("ViewManager").getActions('search')) self.__saveCategoryActions(self.viewItem, e4App().getObject("ViewManager").getActions('view')) self.__saveCategoryActions(self.macroItem, e4App().getObject("ViewManager").getActions('macro')) self.__saveCategoryActions(self.bookmarkItem, e4App().getObject("ViewManager").getActions('bookmark')) self.__saveCategoryActions(self.spellingItem, e4App().getObject("ViewManager").getActions('spelling')) actions = e4App().getObject("ViewManager").getActions('window') if actions: self.__saveCategoryActions(self.windowItem, actions) for categoryItem in self.pluginCategoryItems: category = unicode(categoryItem.text(0)) ref = e4App().getPluginObject(category) if ref is not None and hasattr(ref, "getActions"): self.__saveCategoryActions(categoryItem, ref.getActions()) self.__saveCategoryActions(self.helpViewerItem, e4App().getObject("DummyHelpViewer").getActions()) Shortcuts.saveShortcuts() Preferences.syncPreferences() self.emit(SIGNAL('updateShortcuts')) self.hide() @pyqtSignature("QString") def on_searchEdit_textChanged(self, txt): """ Private slot called, when the text in the search edit changes. @param txt text of the search edit (QString) """ for topIndex in range(self.shortcutsList.topLevelItemCount()): topItem = self.shortcutsList.topLevelItem(topIndex) childHiddenCount = 0 for index in range(topItem.childCount()): itm = topItem.child(index) if (self.actionButton.isChecked() and \ not itm.text(0).contains(QRegExp(txt, Qt.CaseInsensitive))) or \ (self.shortcutButton.isChecked() and \ not itm.text(1).contains(txt, Qt.CaseInsensitive) and \ not itm.text(2).contains(txt, Qt.CaseInsensitive)): itm.setHidden(True) childHiddenCount += 1 else: itm.setHidden(False) topItem.setHidden(childHiddenCount == topItem.childCount()) @pyqtSignature("") def on_clearSearchButton_clicked(self): """ Private slot called by a click of the clear search button. """ self.searchEdit.clear() @pyqtSignature("bool") def on_actionButton_toggled(self, checked): """ Private slot called, when the action radio button is toggled. @param checked state of the action radio button (boolean) """ if checked: self.on_searchEdit_textChanged(self.searchEdit.text()) @pyqtSignature("bool") def on_shortcutButton_toggled(self, checked): """ Private slot called, when the shortcuts radio button is toggled. @param checked state of the shortcuts radio button (boolean) """ if checked: self.on_searchEdit_textChanged(self.searchEdit.text()) eric4-4.5.18/eric/PaxHeaders.8617/Debugger0000644000175000001440000000013212262730776016174 xustar000000000000000030 mtime=1389081086.301724332 30 atime=1389081086.305724332 30 ctime=1389081086.315724332 eric4-4.5.18/eric/Debugger/0000755000175000001440000000000012262730776016003 5ustar00detlevusers00000000000000eric4-4.5.18/eric/Debugger/PaxHeaders.8617/ExceptionLogger.py0000644000175000001440000000013212261012651021701 xustar000000000000000030 mtime=1388582313.038090248 30 atime=1389081083.799724385 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Debugger/ExceptionLogger.py0000644000175000001440000001125212261012651021434 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2002 - 2014 Detlev Offenbach # """ Module implementing the Exception Logger widget. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt.KQApplication import e4App class ExceptionLogger(QTreeWidget): """ Class implementing the Exception Logger widget. This class displays a log of all exceptions having occured during a debugging session. @signal sourceFile(string, int) emitted to open a source file at a line """ def __init__(self, parent=None): """ Constructor @param parent the parent widget of this widget """ QTreeWidget.__init__(self, parent) self.setObjectName("ExceptionLogger") self.setWindowTitle(self.trUtf8("Exceptions")) self.setWordWrap(True) self.setRootIsDecorated(True) self.setHeaderLabels(QStringList() << self.trUtf8("Exception")) self.setSortingEnabled(False) self.setContextMenuPolicy(Qt.CustomContextMenu) self.connect(self,SIGNAL('customContextMenuRequested(const QPoint &)'), self.__showContextMenu) self.connect(self,SIGNAL('itemDoubleClicked(QTreeWidgetItem *, int)'), self.__itemDoubleClicked) self.setWhatsThis(self.trUtf8( """Exceptions Logger""" """

    This windows shows a trace of all exceptions, that have""" """ occured during the last debugging session. Initially only the""" """ exception type and exception message are shown. After""" """ the expansion of this entry, the complete call stack as reported""" """ by the client is show with the most recent call first.

    """ )) self.menu = QMenu(self) self.menu.addAction(self.trUtf8("Show source"), self.__openSource) self.menu.addAction(self.trUtf8("Clear"), self.clear) self.menu.addSeparator() self.menu.addAction(self.trUtf8("Configure..."), self.__configure) self.backMenu = QMenu(self) self.backMenu.addAction(self.trUtf8("Clear"), self.clear) self.backMenu.addSeparator() self.backMenu.addAction(self.trUtf8("Configure..."), self.__configure) def __itemDoubleClicked(self, itm): """ Private slot to handle the double click of an item. @param itm the item that was double clicked(QTreeWidgetItem), ignored """ self.__openSource() def __showContextMenu(self, coord): """ Private slot to show the context menu of the listview. @param coord the global coordinates of the mouse pointer (QPoint) """ itm = self.itemAt(coord) coord = self.mapToGlobal(coord) if itm is None: self.backMenu.popup(coord) else: self.menu.popup(coord) def addException(self, exceptionType, exceptionMessage, stackTrace): """ Public slot to handle the arrival of a new exception. @param exceptionType type of exception raised (string) @param exceptionMessage message given by the exception (string) @param stackTrace list of stack entries. """ itm = QTreeWidgetItem(self) if exceptionType is None: itm.setText(0, self.trUtf8('An unhandled exception occured.' ' See the shell window for details.')) return if exceptionMessage == '': itm.setText(0, "%s" % exceptionType) else: itm.setText(0, "%s, %s" % (exceptionType, exceptionMessage)) # now add the call stack, most recent call first for fn, ln in stackTrace: excitm = QTreeWidgetItem(itm) excitm.setText(0, "%s, %d" % (fn, ln)) def debuggingStarted(self): """ Public slot to clear the listview upon starting a new debugging session. """ self.clear() def __openSource(self): """ Private slot to handle a double click on an entry. """ itm = self.currentItem() if itm.parent() is None: return entry = unicode(itm.text(0)) entryList = entry.split(",") try: self.emit(SIGNAL('sourceFile'), entryList[0], int(entryList[1])) except (IndexError, ValueError): pass def __configure(self): """ Private method to open the configuration dialog. """ e4App().getObject("UserInterface").showPreferences("debuggerGeneralPage") eric4-4.5.18/eric/Debugger/PaxHeaders.8617/StartRunDialog.ui0000644000175000001440000000007411677072076021520 xustar000000000000000030 atime=1389081083.799724385 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Debugger/StartRunDialog.ui0000644000175000001440000002457011677072076021255 0ustar00detlevusers00000000000000 StartRunDialog 0 0 488 257 Start running true Command&line: cmdlineCombo 0 0 Enter the commandline parameters <b>Commandline</b> <p>Enter the commandline parameters in this field.</p> true QComboBox::InsertAtTop QComboBox::AdjustToMinimumContentsLengthWithIcon true false &Working directory: workdirCombo 0 0 Enter the working directory <b>Working directory</b> <p>Enter the working directory of the application to be debugged. Leave it empty to set the working directory to the executable directory.</p> true QComboBox::InsertAtTop QComboBox::AdjustToMinimumContentsLengthWithIcon true false Select directory using a directory selection dialog <b>Select directory</b> <p>Select the working directory via a directory selection dialog.</p> ... &Environment: environmentCombo 0 0 Enter the environment variables to be set. <b>Environment</b> <p>Enter the environment variables to be set for the program. The individual settings must be separated by whitespace and be given in the form 'var=value'. In order to add to an environment variable, enter it in the form 'var+=value'.</p> <p>Example: var1=1 var2="hello world" var3+=":/tmp"</p> true QComboBox::InsertAtTop QComboBox::AdjustToMinimumContentsLengthWithIcon true false Uncheck to disable exception reporting <b>Report exceptions</b> <p>Uncheck this in order to disable exception reporting.</p> Report &exceptions Alt+E true Select to clear the display of the interpreter window <b>Clear interpreter window</b><p>This clears the display of the interpreter window before starting the debug client.</p> Clear &interpreter window true Select to start the debugger in a console window <b>Start in console</b> <p>Select to start the debugger in a console window. The console command has to be configured on the Debugger-&gt;General page</p> Start in console Forking Select to go through the fork without asking <b>Fork without pausing</b> <p>Select to go through the fork without asking making the forking decision based on the Parent/Child selection.</p> Fork without pausing false Select to debug the child process after forking <b>Debug Child Process</b> <p>Select to debug the child process after forking. If it is not selected, the parent process will be debugged. This has no effect, if forking without pausing is not selected.</p> Debug Child Process Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok qPixmapFromMimeSource cmdlineCombo workdirCombo dirButton environmentCombo exceptionCheckBox clearShellCheckBox consoleCheckBox forkModeCheckBox forkChildCheckBox buttonBox buttonBox accepted() StartRunDialog accept() 40 247 34 150 buttonBox rejected() StartRunDialog reject() 159 247 150 148 forkModeCheckBox toggled(bool) forkChildCheckBox setEnabled(bool) 85 193 283 189 eric4-4.5.18/eric/Debugger/PaxHeaders.8617/DebugClientCapabilities.py0000644000175000001440000000013212261012651023302 xustar000000000000000030 mtime=1388582313.048090375 30 atime=1389081083.810724384 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Debugger/DebugClientCapabilities.py0000644000175000001440000000071112261012651023033 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module defining the debug clients capabilities. """ HasDebugger = 0x0001 HasInterpreter = 0x0002 HasProfiler = 0x0004 HasCoverage = 0x0008 HasCompleter = 0x0010 HasUnittest = 0x0020 HasShell = 0x0040 HasAll = HasDebugger | HasInterpreter | HasProfiler | \ HasCoverage | HasCompleter | HasUnittest | HasShell eric4-4.5.18/eric/Debugger/PaxHeaders.8617/StartDebugDialog.ui0000644000175000001440000000007411466563551022001 xustar000000000000000030 atime=1389081083.810724384 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Debugger/StartDebugDialog.ui0000644000175000001440000002677211466563551021544 0ustar00detlevusers00000000000000 StartDebugDialog 0 0 488 292 Start debugging true Command&line: cmdlineCombo 0 0 Enter the commandline parameters <b>Commandline</b> <p>Enter the commandline parameters in this field.</p> true QComboBox::InsertAtTop QComboBox::AdjustToMinimumContentsLengthWithIcon true false &Working directory: workdirCombo 0 0 Enter the working directory <b>Working directory</b> <p>Enter the working directory of the application to be debugged. Leave it empty to set the working directory to the executable directory.</p> true QComboBox::InsertAtTop QComboBox::AdjustToMinimumContentsLengthWithIcon true false Select directory using a directory selection dialog <b>Select directory</b> <p>Select the working directory via a directory selection dialog.</p> ... &Environment: environmentCombo 0 0 Enter the environment variables to be set. <b>Environment</b> <p>Enter the environment variables to be set for the program. The individual settings must be separated by whitespace and be given in the form 'var=value'. In order to add to an environment variable, enter it in the form 'var+=value'.</p> <p>Example: var1=1 var2="hello world" var3+=":/tmp"</p> true QComboBox::InsertAtTop QComboBox::AdjustToMinimumContentsLengthWithIcon true false Uncheck to disable exception reporting <b>Report exceptions</b> <p>Uncheck this in order to disable exception reporting.</p> Report &exceptions Alt+E true Select to clear the display of the interpreter window <b>Clear interpreter window</b><p>This clears the display of the interpreter window before starting the debug client.</p> Clear &interpreter window true Select to start the debugger in a console window <b>Start in console</b> <p>Select to start the debugger in a console window. The console command has to be configured on the Debugger-&gt;General page</p> Start in console Select to trace into the Python library &Trace into interpreter libraries Alt+T Select to not stop the debugger at the first executable line. <b>Don't stop at first line</b><p>This prevents the debugger from stopping at the first executable line.</p> Don't stop at first line true Forking Select to go through the fork without asking <b>Fork without pausing</b> <p>Select to go through the fork without asking making the forking decision based on the Parent/Child selection.</p> Fork without pausing false Select to debug the child process after forking <b>Debug Child Process</b> <p>Select to debug the child process after forking. If it is not selected, the parent process will be debugged. This has no effect, if forking without pausing is not selected.</p> Debug Child Process Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok qPixmapFromMimeSource cmdlineCombo workdirCombo dirButton environmentCombo exceptionCheckBox clearShellCheckBox consoleCheckBox tracePythonCheckBox autoContinueCheckBox forkModeCheckBox forkChildCheckBox buttonBox buttonBox accepted() StartDebugDialog accept() 59 282 43 179 buttonBox rejected() StartDebugDialog reject() 127 282 118 180 forkModeCheckBox toggled(bool) forkChildCheckBox setEnabled(bool) 164 229 276 228 eric4-4.5.18/eric/Debugger/PaxHeaders.8617/DebugServer.py0000644000175000001440000000013212261012651021020 xustar000000000000000030 mtime=1388582313.063090565 30 atime=1389081083.810724384 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Debugger/DebugServer.py0000644000175000001440000015042412261012651020560 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing the debug server. """ import sys import os import time import signal from PyQt4.QtCore import * from PyQt4.QtGui import QMessageBox from PyQt4.QtNetwork import QTcpServer, QHostAddress, QHostInfo, QNetworkInterface from KdeQt import KQMessageBox from KdeQt.KQApplication import e4App from BreakPointModel import BreakPointModel from WatchPointModel import WatchPointModel import DebugClientCapabilities import Preferences import Utilities DebuggerInterfaces = [ "DebuggerInterfacePython", "DebuggerInterfacePython3", "DebuggerInterfaceRuby", "DebuggerInterfaceNone", ] class DebugServer(QTcpServer): """ Class implementing the debug server embedded within the IDE. @signal clientProcessStdout emitted after the client has sent some output via stdout @signal clientProcessStderr emitted after the client has sent some output via stderr @signal clientOutput emitted after the client has sent some output @signal clientRawInputSent emitted after the data was sent to the debug client @signal clientLine(filename, lineno, forStack) emitted after the debug client has executed a line of code @signal clientStack(stack) emitted after the debug client has executed a line of code @signal clientThreadList(currentId, threadList) emitted after a thread list has been received @signal clientThreadSet emitted after the client has acknowledged the change of the current thread @signal clientVariables(scope, variables) emitted after a variables dump has been received @signal clientVariable(scope, variables) emitted after a dump for one class variable has been received @signal clientStatement(boolean) emitted after an interactive command has been executed. The parameter is 0 to indicate that the command is complete and 1 if it needs more input. @signal clientException(exception) emitted after an exception occured on the client side @signal clientSyntaxError(exception) emitted after a syntax error has been detected on the client side @signal clientExit(int) emitted with the exit status after the client has exited @signal clientClearBreak(filename, lineno) emitted after the debug client has decided to clear a temporary breakpoint @signal clientBreakConditionError(fn, lineno) emitted after the client has signaled a syntax error in a breakpoint condition @signal clientClearWatch(condition) emitted after the debug client has decided to clear a temporary watch expression @signal clientWatchConditionError(condition) emitted after the client has signaled a syntax error in a watch expression @signal clientRawInput(prompt, echo) emitted after a raw input request was received @signal clientBanner(banner) emitted after the client banner was received @signal clientCapabilities(int capabilities, QString cltype) emitted after the clients capabilities were received @signal clientCompletionList(completionList, text) emitted after the client the commandline completion list and the reworked searchstring was received from the client @signal passiveDebugStarted emitted after the debug client has connected in passive debug mode @signal clientGone emitted if the client went away (planned or unplanned) @signal utPrepared(nrTests, exc_type, exc_value) emitted after the client has loaded a unittest suite @signal utFinished emitted after the client signalled the end of the unittest @signal utStartTest(testname, testdocu) emitted after the client has started a test @signal utStopTest emitted after the client has finished a test @signal utTestFailed(testname, exc_info) emitted after the client reported a failed test @signal utTestErrored(testname, exc_info) emitted after the client reported an errored test """ def __init__(self): """ Constructor """ QTcpServer.__init__(self) # create our models self.breakpointModel = BreakPointModel(self) self.watchpointModel = WatchPointModel(self) self.watchSpecialCreated = \ self.trUtf8("created", "must be same as in EditWatchpointDialog") self.watchSpecialChanged = \ self.trUtf8("changed", "must be same as in EditWatchpointDialog") self.networkInterface = unicode(Preferences.getDebugger("NetworkInterface")) if self.networkInterface == "all": hostAddress = QHostAddress(QHostAddress.Any) elif self.networkInterface == "allv6": hostAddress = QHostAddress(QHostAddress.AnyIPv6) else: hostAddress = QHostAddress(self.networkInterface) self.networkInterfaceName, self.networkInterfaceIndex = \ self.__getNetworkInterfaceAndIndex(self.networkInterface) if Preferences.getDebugger("PassiveDbgEnabled"): sock = Preferences.getDebugger("PassiveDbgPort") # default: 42424 self.listen(hostAddress, sock) self.passive = True self.passiveClientExited = False else: if hostAddress.toString().toLower().startsWith("fe80"): hostAddress.setScopeId(self.networkInterfaceName) self.listen(hostAddress) self.passive = False self.debuggerInterface = None self.debugging = False self.running = False self.clientProcess = None self.clientType = Preferences.Prefs.settings.value(\ 'DebugClient/Type', QVariant('Python')).toString() self.lastClientType = '' self.__autoClearShell = False self.connect(self, SIGNAL("clientClearBreak"), self.__clientClearBreakPoint) self.connect(self, SIGNAL("clientClearWatch"), self.__clientClearWatchPoint) self.connect(self, SIGNAL("newConnection()"), self.__newConnection) self.connect(self.breakpointModel, SIGNAL("rowsAboutToBeRemoved(const QModelIndex &, int, int)"), self.__deleteBreakPoints) self.connect(self.breakpointModel, SIGNAL("dataAboutToBeChanged(const QModelIndex &, const QModelIndex &)"), self.__breakPointDataAboutToBeChanged) self.connect(self.breakpointModel, SIGNAL("dataChanged(const QModelIndex &, const QModelIndex &)"), self.__changeBreakPoints) self.connect(self.breakpointModel, SIGNAL("rowsInserted(const QModelIndex &, int, int)"), self.__addBreakPoints) self.connect(self.watchpointModel, SIGNAL("rowsAboutToBeRemoved(const QModelIndex &, int, int)"), self.__deleteWatchPoints) self.connect(self.watchpointModel, SIGNAL("dataAboutToBeChanged(const QModelIndex &, const QModelIndex &)"), self.__watchPointDataAboutToBeChanged) self.connect(self.watchpointModel, SIGNAL("dataChanged(const QModelIndex &, const QModelIndex &)"), self.__changeWatchPoints) self.connect(self.watchpointModel, SIGNAL("rowsInserted(const QModelIndex &, int, int)"), self.__addWatchPoints) self.__registerDebuggerInterfaces() def getHostAddress(self, localhost): """ Public method to get the IP address or hostname the debug server is listening. @param localhost flag indicating to return the address for localhost (boolean) @return IP address or hostname (string) """ if self.networkInterface == "all": if localhost: return "127.0.0.1" else: return "%s@@v4" % QHostInfo.localHostName() elif self.networkInterface == "allv6": if localhost: return "::1" else: return "%s@@v6" % QHostInfo.localHostName() else: return "{0}@@i{1}".format(self.networkInterface, self.networkInterfaceIndex) def __getNetworkInterfaceAndIndex(self, address): """ Private method to determine the network interface and the interface index. @param address address to determine the info for (string or QString) @return tuple of network interface name (string) and index (integer) """ address = unicode(address) if address not in ["all", "allv6"]: for networkInterface in QNetworkInterface.allInterfaces(): addressEntries = networkInterface.addressEntries() if len(addressEntries) > 0: for addressEntry in addressEntries: if addressEntry.ip().toString().toLower() == address.lower(): return unicode(networkInterface.name()), \ networkInterface.index() return "", 0 def preferencesChanged(self): """ Public slot to handle the preferencesChanged signal. """ self.__registerDebuggerInterfaces() def __registerDebuggerInterfaces(self): """ Private method to register the available debugger interface modules. """ self.__clientCapabilities = {} self.__clientAssociations = {} for interface in DebuggerInterfaces: modName = "Debugger.%s" % interface mod = __import__(modName) components = modName.split('.') for comp in components[1:]: mod = getattr(mod, comp) clientLanguage, clientCapabilities, clientExtensions = \ mod.getRegistryData() if clientLanguage: self.__clientCapabilities[clientLanguage] = clientCapabilities for extension in clientExtensions: if extension not in self.__clientAssociations: self.__clientAssociations[extension] = clientLanguage def getSupportedLanguages(self, shellOnly = False): """ Public slot to return the supported programming languages. @param shellOnly flag indicating only languages supporting an interactive shell should be returned @return list of supported languages (list of strings) """ languages = self.__clientCapabilities.keys() try: del languages[languages.index("None")] except ValueError: pass # it is not in the list if shellOnly: languages = \ [lang for lang in languages \ if self.__clientCapabilities[lang] & DebugClientCapabilities.HasShell] return languages[:] def getExtensions(self, language): """ Public slot to get the extensions associated with the given language. @param language language to get extensions for (string) @return tuple of extensions associated with the language (tuple of strings) """ extensions = [] for ext, lang in self.__clientAssociations.items(): if lang == language: extensions.append(ext) return tuple(extensions) def __createDebuggerInterface(self, clientType = None): """ Private slot to create the debugger interface object. @param clientType type of the client interface to be created (string or QString) """ if self.lastClientType != self.clientType or clientType is not None: if clientType is None: clientType = self.clientType if clientType == "Python": from DebuggerInterfacePython import DebuggerInterfacePython self.debuggerInterface = DebuggerInterfacePython(self, self.passive) elif clientType == "Python3": from DebuggerInterfacePython3 import DebuggerInterfacePython3 self.debuggerInterface = DebuggerInterfacePython3(self, self.passive) elif clientType == "Ruby": from DebuggerInterfaceRuby import DebuggerInterfaceRuby self.debuggerInterface = DebuggerInterfaceRuby(self, self.passive) elif clientType == "None": from DebuggerInterfaceNone import DebuggerInterfaceNone self.debuggerInterface = DebuggerInterfaceNone(self, self.passive) else: from DebuggerInterfaceNone import DebuggerInterfaceNone self.debuggerInterface = DebuggerInterfaceNone(self, self.passive) self.clientType = "None" def __setClientType(self, clType): """ Private method to set the client type. @param clType type of client to be started (string) """ if clType is not None and clType in self.getSupportedLanguages(): self.clientType = clType ok = Preferences.Prefs.settings.setValue('DebugClient/Type', QVariant(self.clientType)) def startClient(self, unplanned = True, clType = None, forProject = False, runInConsole = False): """ Public method to start a debug client. @keyparam unplanned flag indicating that the client has died (boolean) @keyparam clType type of client to be started (string) @keyparam forProject flag indicating a project related action (boolean) @keyparam runInConsole flag indicating to start the debugger in a console window (boolean) """ self.running = False if not self.passive or not self.passiveClientExited: if self.debuggerInterface and self.debuggerInterface.isConnected(): self.shutdownServer() self.emit(SIGNAL('clientGone'), unplanned & self.debugging) if clType: self.__setClientType(clType) # only start the client, if we are not in passive mode if not self.passive: if self.clientProcess: self.disconnect(self.clientProcess, SIGNAL("readyReadStandardError()"), self.__clientProcessError) self.disconnect(self.clientProcess, SIGNAL("readyReadStandardOutput()"), self.__clientProcessOutput) self.clientProcess.kill() self.clientProcess.waitForFinished(1000) self.clientProcess = None self.__createDebuggerInterface() if forProject: project = e4App().getObject("Project") if not project.isDebugPropertiesLoaded(): self.clientProcess, isNetworked = \ self.debuggerInterface.startRemote(self.serverPort(), runInConsole) else: self.clientProcess, isNetworked = \ self.debuggerInterface.startRemoteForProject(self.serverPort(), runInConsole) else: self.clientProcess, isNetworked = \ self.debuggerInterface.startRemote(self.serverPort(), runInConsole) if self.clientProcess: self.connect(self.clientProcess, SIGNAL("readyReadStandardError()"), self.__clientProcessError) self.connect(self.clientProcess, SIGNAL("readyReadStandardOutput()"), self.__clientProcessOutput) if not isNetworked: # the client is connected through stdin and stdout # Perform actions necessary, if client type has changed if self.lastClientType != self.clientType: self.lastClientType = self.clientType self.remoteBanner() elif self.__autoClearShell: self.__autoClearShell = False self.remoteBanner() self.debuggerInterface.flush() else: self.__createDebuggerInterface("None") def __clientProcessOutput(self): """ Private slot to process client output received via stdout. """ output = QString(self.clientProcess.readAllStandardOutput()) self.emit(SIGNAL("clientProcessStdout"), output) def __clientProcessError(self): """ Private slot to process client output received via stderr. """ error = QString(self.clientProcess.readAllStandardError()) self.emit(SIGNAL("clientProcessStderr"), error) def __clientClearBreakPoint(self, fn, lineno): """ Private slot to handle the clientClearBreak signal. @param fn filename of breakpoint to clear (string or QString) @param lineno line number of breakpoint to clear (integer) """ if self.debugging: index = self.breakpointModel.getBreakPointIndex(fn, lineno) self.breakpointModel.deleteBreakPointByIndex(index) def __deleteBreakPoints(self, parentIndex, start, end): """ Private slot to delete breakpoints. @param parentIndex index of parent item (QModelIndex) @param start start row (integer) @param end end row (integer) """ if self.debugging: for row in range(start, end+1): index = self.breakpointModel.index(row, 0, parentIndex) fn, lineno = self.breakpointModel.getBreakPointByIndex(index)[0:2] self.remoteBreakpoint(fn, lineno, False) def __changeBreakPoints(self, startIndex, endIndex): """ Private slot to set changed breakpoints. @param indexes indexes of changed breakpoints. """ if self.debugging: self.__addBreakPoints(QModelIndex(), startIndex.row(), endIndex.row()) def __breakPointDataAboutToBeChanged(self, startIndex, endIndex): """ Private slot to handle the dataAboutToBeChanged signal of the breakpoint model. @param startIndex start index of the rows to be changed (QModelIndex) @param endIndex end index of the rows to be changed (QModelIndex) """ if self.debugging: self.__deleteBreakPoints(QModelIndex(), startIndex.row(), endIndex.row()) def __addBreakPoints(self, parentIndex, start, end): """ Private slot to add breakpoints. @param parentIndex index of parent item (QModelIndex) @param start start row (integer) @param end end row (integer) """ if self.debugging: for row in range(start, end+1): index = self.breakpointModel.index(row, 0, parentIndex) fn, line, cond, temp, enabled, ignorecount = \ self.breakpointModel.getBreakPointByIndex(index)[:6] self.remoteBreakpoint(fn, line, True, cond, temp) if not enabled: self.__remoteBreakpointEnable(fn, line, False) if ignorecount: self.__remoteBreakpointIgnore(fn, line, ignorecount) def __makeWatchCondition(self, cond, special): """ Private method to construct the condition string. @param cond condition (string or QString) @param special special condition (string or QString) @return condition string (QString) """ special = unicode(special) if special == "": _cond = unicode(cond) else: if special == unicode(self.watchSpecialCreated): _cond = "%s ??created??" % cond elif special == unicode(self.watchSpecialChanged): _cond = "%s ??changed??" % cond return _cond def __splitWatchCondition(self, cond): """ Private method to split a remote watch expression. @param cond remote expression (string or QString) @return tuple of local expression (string) and special condition (string) """ cond = unicode(cond) if cond.endswith(" ??created??"): cond, special = cond.split() special = unicode(self.watchSpecialCreated) elif cond.endswith(" ??changed??"): cond, special = cond.split() special = unicode(self.watchSpecialChanged) else: cond = cond special = "" return cond, special def __clientClearWatchPoint(self, condition): """ Private slot to handle the clientClearWatch signal. @param condition expression of watch expression to clear (string or QString) """ if self.debugging: cond, special = self.__splitWatchCondition(condition) index = self.watchpointModel.getWatchPointIndex(cond, special) self.watchpointModel.deleteWatchPointByIndex(index) def __deleteWatchPoints(self, parentIndex, start, end): """ Private slot to delete watch expressions. @param parentIndex index of parent item (QModelIndex) @param start start row (integer) @param end end row (integer) """ if self.debugging: for row in range(start, end+1): index = self.watchpointModel.index(row, 0, parentIndex) cond, special = self.watchpointModel.getWatchPointByIndex(index)[0:2] cond = self.__makeWatchCondition(cond, special) self.__remoteWatchpoint(cond, False) def __watchPointDataAboutToBeChanged(self, startIndex, endIndex): """ Private slot to handle the dataAboutToBeChanged signal of the watch expression model. @param startIndex start index of the rows to be changed (QModelIndex) @param endIndex end index of the rows to be changed (QModelIndex) """ if self.debugging: self.__deleteWatchPoints(QModelIndex(), startIndex.row(), endIndex.row()) def __addWatchPoints(self, parentIndex, start, end): """ Private slot to set a watch expression. @param parentIndex index of parent item (QModelIndex) @param start start row (integer) @param end end row (integer) """ if self.debugging: for row in range(start, end+1): index = self.watchpointModel.index(row, 0, parentIndex) cond, special, temp, enabled, ignorecount = \ self.watchpointModel.getWatchPointByIndex(index)[:5] cond = self.__makeWatchCondition(cond, special) self.__remoteWatchpoint(cond, True, temp) if not enabled: self.__remoteWatchpointEnable(cond, False) if ignorecount: self.__remoteWatchpointIgnore(cond, ignorecount) def __changeWatchPoints(self, startIndex, endIndex): """ Private slot to set changed watch expressions. @param startIndex start index of the rows to be changed (QModelIndex) @param endIndex end index of the rows to be changed (QModelIndex) """ if self.debugging: self.__addWatchPoints(QModelIndex(), startIndex.row(), endIndex.row()) def getClientCapabilities(self, type): """ Public method to retrieve the debug clients capabilities. @param type debug client type (string) @return debug client capabilities (integer) """ try: return self.__clientCapabilities[type] except KeyError: return 0 # no capabilities def __newConnection(self): """ Private slot to handle a new connection. """ sock = self.nextPendingConnection() peerAddress = sock.peerAddress().toString() if Preferences.getDebugger("AllowedHosts").indexOf(peerAddress) == -1: # the peer is not allowed to connect res = KQMessageBox.warning(None, self.trUtf8("Connection from illegal host"), self.trUtf8("""

    A connection was attempted by the""" """ illegal host %1. Accept this connection?

    """)\ .arg(peerAddress), QMessageBox.StandardButtons(\ QMessageBox.No | \ QMessageBox.Yes), QMessageBox.No) if res == QMessageBox.No: sock.abort() return else: allowedHosts = Preferences.getDebugger("AllowedHosts") allowedHosts.append(peerAddress) Preferences.setDebugger("AllowedHosts", allowedHosts) if self.passive: self.__createDebuggerInterface(Preferences.getDebugger("PassiveDbgType")) accepted = self.debuggerInterface.newConnection(sock) if accepted: # Perform actions necessary, if client type has changed if self.lastClientType != self.clientType: self.lastClientType = self.clientType self.remoteBanner() elif self.__autoClearShell: self.__autoClearShell = False self.remoteBanner() elif self.passive: self.remoteBanner() self.debuggerInterface.flush() def shutdownServer(self): """ Public method to cleanly shut down. It closes our socket and shuts down the debug client. (Needed on Win OS) """ if self.debuggerInterface is not None: self.debuggerInterface.shutdown() def remoteEnvironment(self, env): """ Public method to set the environment for a program to debug, run, ... @param env environment settings (string) """ envlist = Utilities.parseEnvironmentString(env) envdict = {} for el in envlist: try: key, value = el.split('=', 1) if value.startswith('"') or value.startswith("'"): value = value[1:-1] envdict[unicode(key)] = unicode(value) except UnpackError: pass self.debuggerInterface.remoteEnvironment(envdict) def remoteLoad(self, fn, argv, wd, env, autoClearShell = True, tracePython = False, autoContinue = True, forProject = False, runInConsole = False, autoFork = False, forkChild = False): """ Public method to load a new program to debug. @param fn the filename to debug (string) @param argv the commandline arguments to pass to the program (string or QString) @param wd the working directory for the program (string) @param env environment settings (string) @keyparam autoClearShell flag indicating, that the interpreter window should be cleared (boolean) @keyparam tracePython flag indicating if the Python library should be traced as well (boolean) @keyparam autoContinue flag indicating, that the debugger should not stop at the first executable line (boolean) @keyparam forProject flag indicating a project related action (boolean) @keyparam runInConsole flag indicating to start the debugger in a console window (boolean) @keyparam autoFork flag indicating the automatic fork mode (boolean) @keyparam forkChild flag indicating to debug the child after forking (boolean) """ self.__autoClearShell = autoClearShell self.__autoContinue = autoContinue # Restart the client try: self.__setClientType(self.__clientAssociations[os.path.splitext(fn)[1]]) except KeyError: self.__setClientType('Python') # assume it is a Python file self.startClient(False, forProject = forProject, runInConsole = runInConsole) self.remoteEnvironment(env) self.debuggerInterface.remoteLoad(fn, argv, wd, tracePython, autoContinue, autoFork, forkChild) self.debugging = True self.running = True self.__restoreBreakpoints() self.__restoreWatchpoints() def remoteRun(self, fn, argv, wd, env, autoClearShell = True, forProject = False, runInConsole = False, autoFork = False, forkChild = False): """ Public method to load a new program to run. @param fn the filename to run (string) @param argv the commandline arguments to pass to the program (string or QString) @param wd the working directory for the program (string) @param env environment settings (string) @keyparam autoClearShell flag indicating, that the interpreter window should be cleared (boolean) @keyparam forProject flag indicating a project related action (boolean) @keyparam runInConsole flag indicating to start the debugger in a console window (boolean) @keyparam autoFork flag indicating the automatic fork mode (boolean) @keyparam forkChild flag indicating to debug the child after forking (boolean) """ self.__autoClearShell = autoClearShell # Restart the client try: self.__setClientType(self.__clientAssociations[os.path.splitext(fn)[1]]) except KeyError: self.__setClientType('Python') # assume it is a Python file self.startClient(False, forProject = forProject, runInConsole = runInConsole) self.remoteEnvironment(env) self.debuggerInterface.remoteRun(fn, argv, wd, autoFork, forkChild) self.debugging = False self.running = True def remoteCoverage(self, fn, argv, wd, env, autoClearShell = True, erase = False, forProject = False, runInConsole = False): """ Public method to load a new program to collect coverage data. @param fn the filename to run (string) @param argv the commandline arguments to pass to the program (string or QString) @param wd the working directory for the program (string) @param env environment settings (string) @keyparam autoClearShell flag indicating, that the interpreter window should be cleared (boolean) @keyparam erase flag indicating that coverage info should be cleared first (boolean) @keyparam forProject flag indicating a project related action (boolean) @keyparam runInConsole flag indicating to start the debugger in a console window (boolean) """ self.__autoClearShell = autoClearShell # Restart the client try: self.__setClientType(self.__clientAssociations[os.path.splitext(fn)[1]]) except KeyError: self.__setClientType('Python') # assume it is a Python file self.startClient(False, forProject = forProject, runInConsole = runInConsole) self.remoteEnvironment(env) self.debuggerInterface.remoteCoverage(fn, argv, wd, erase) self.debugging = False self.running = True def remoteProfile(self, fn, argv, wd, env, autoClearShell = True, erase = False, forProject = False, runInConsole = False): """ Public method to load a new program to collect profiling data. @param fn the filename to run (string) @param argv the commandline arguments to pass to the program (string or QString) @param wd the working directory for the program (string) @param env environment settings (string) @keyparam autoClearShell flag indicating, that the interpreter window should be cleared (boolean) @keyparam erase flag indicating that timing info should be cleared first (boolean) @keyparam forProject flag indicating a project related action (boolean) @keyparam runInConsole flag indicating to start the debugger in a console window (boolean) """ self.__autoClearShell = autoClearShell # Restart the client try: self.__setClientType(self.__clientAssociations[os.path.splitext(fn)[1]]) except KeyError: self.__setClientType('Python') # assume it is a Python file self.startClient(False, forProject = forProject, runInConsole = runInConsole) self.remoteEnvironment(env) self.debuggerInterface.remoteProfile(fn, argv, wd, erase) self.debugging = False self.running = True def remoteStatement(self, stmt): """ Public method to execute a Python statement. @param stmt the Python statement to execute (string). It should not have a trailing newline. """ self.debuggerInterface.remoteStatement(stmt) def remoteStep(self): """ Public method to single step the debugged program. """ self.debuggerInterface.remoteStep() def remoteStepOver(self): """ Public method to step over the debugged program. """ self.debuggerInterface.remoteStepOver() def remoteStepOut(self): """ Public method to step out the debugged program. """ self.debuggerInterface.remoteStepOut() def remoteStepQuit(self): """ Public method to stop the debugged program. """ self.debuggerInterface.remoteStepQuit() def remoteContinue(self, special = False): """ Public method to continue the debugged program. @param special flag indicating a special continue operation """ self.debuggerInterface.remoteContinue(special) def remoteBreakpoint(self, fn, line, set, cond=None, temp=False): """ Public method to set or clear a breakpoint. @param fn filename the breakpoint belongs to (string) @param line linenumber of the breakpoint (int) @param set flag indicating setting or resetting a breakpoint (boolean) @param cond condition of the breakpoint (string) @param temp flag indicating a temporary breakpoint (boolean) """ self.debuggerInterface.remoteBreakpoint(fn, line, set, cond, temp) def __remoteBreakpointEnable(self, fn, line, enable): """ Private method to enable or disable a breakpoint. @param fn filename the breakpoint belongs to (string) @param line linenumber of the breakpoint (int) @param enable flag indicating enabling or disabling a breakpoint (boolean) """ self.debuggerInterface.remoteBreakpointEnable(fn, line, enable) def __remoteBreakpointIgnore(self, fn, line, count): """ Private method to ignore a breakpoint the next couple of occurrences. @param fn filename the breakpoint belongs to (string) @param line linenumber of the breakpoint (int) @param count number of occurrences to ignore (int) """ self.debuggerInterface.remoteBreakpointIgnore(fn, line, count) def __remoteWatchpoint(self, cond, set, temp = False): """ Private method to set or clear a watch expression. @param cond expression of the watch expression (string) @param set flag indicating setting or resetting a watch expression (boolean) @param temp flag indicating a temporary watch expression (boolean) """ # cond is combination of cond and special (s. watch expression viewer) self.debuggerInterface.remoteWatchpoint(cond, set, temp) def __remoteWatchpointEnable(self, cond, enable): """ Private method to enable or disable a watch expression. @param cond expression of the watch expression (string) @param enable flag indicating enabling or disabling a watch expression (boolean) """ # cond is combination of cond and special (s. watch expression viewer) self.debuggerInterface.remoteWatchpointEnable(cond, enable) def __remoteWatchpointIgnore(self, cond, count): """ Private method to ignore a watch expression the next couple of occurrences. @param cond expression of the watch expression (string) @param count number of occurrences to ignore (int) """ # cond is combination of cond and special (s. watch expression viewer) self.debuggerInterface.remoteWatchpointIgnore(cond, count) def remoteRawInput(self,s): """ Public method to send the raw input to the debugged program. @param s the raw input (string) """ self.debuggerInterface.remoteRawInput(s) self.emit(SIGNAL('clientRawInputSent')) def remoteThreadList(self): """ Public method to request the list of threads from the client. """ self.debuggerInterface.remoteThreadList() def remoteSetThread(self, tid): """ Public method to request to set the given thread as current thread. @param tid id of the thread (integer) """ self.debuggerInterface.remoteSetThread(tid) def remoteClientVariables(self, scope, filter, framenr = 0): """ Public method to request the variables of the debugged program. @param scope the scope of the variables (0 = local, 1 = global) @param filter list of variable types to filter out (list of int) @param framenr framenumber of the variables to retrieve (int) """ self.debuggerInterface.remoteClientVariables(scope, filter, framenr) def remoteClientVariable(self, scope, filter, var, framenr = 0): """ Public method to request the variables of the debugged program. @param scope the scope of the variables (0 = local, 1 = global) @param filter list of variable types to filter out (list of int) @param var list encoded name of variable to retrieve (string) @param framenr framenumber of the variables to retrieve (int) """ self.debuggerInterface.remoteClientVariable(scope, filter, var, framenr) def remoteClientSetFilter(self, scope, filter): """ Public method to set a variables filter list. @param scope the scope of the variables (0 = local, 1 = global) @param filter regexp string for variable names to filter out (string) """ self.debuggerInterface.remoteClientSetFilter(scope, filter) def remoteEval(self, arg): """ Public method to evaluate arg in the current context of the debugged program. @param arg the arguments to evaluate (string) """ self.debuggerInterface.remoteEval(arg) def remoteExec(self, stmt): """ Public method to execute stmt in the current context of the debugged program. @param stmt statement to execute (string) """ self.debuggerInterface.remoteExec(stmt) def remoteBanner(self): """ Public slot to get the banner info of the remote client. """ self.debuggerInterface.remoteBanner() def remoteCapabilities(self): """ Public slot to get the debug clients capabilities. """ self.debuggerInterface.remoteCapabilities() def remoteCompletion(self, text): """ Public slot to get the a list of possible commandline completions from the remote client. @param text the text to be completed (string or QString) """ self.debuggerInterface.remoteCompletion(text) def remoteUTPrepare(self, fn, tn, tfn, cov, covname, coverase): """ Public method to prepare a new unittest run. @param fn the filename to load (string) @param tn the testname to load (string) @param tfn the test function name to load tests from (string) @param cov flag indicating collection of coverage data is requested @param covname filename to be used to assemble the coverage caches filename @param coverase flag indicating erasure of coverage data is requested """ # Restart the client if there is already a program loaded. try: self.__setClientType(self.__clientAssociations[os.path.splitext(fn)[1]]) except KeyError: self.__setClientType('Python') # assume it is a Python file self.startClient(False) self.debuggerInterface.remoteUTPrepare(fn, tn, tfn, cov, covname, coverase) self.debugging = False self.running = True def remoteUTRun(self): """ Public method to start a unittest run. """ self.debuggerInterface.remoteUTRun() def remoteUTStop(self): """ public method to stop a unittest run. """ self.debuggerInterface.remoteUTStop() def clientOutput(self, line): """ Public method to process a line of client output. @param line client output (string) """ self.emit(SIGNAL('clientOutput'), line) def clientLine(self, filename, lineno, forStack = False): """ Public method to process client position feedback. @param filename name of the file currently being executed (string) @param lineno line of code currently being executed (integer) @param forStack flag indicating this is for a stack dump (boolean) """ self.emit(SIGNAL('clientLine'), filename, lineno, forStack) def clientStack(self, stack): """ Public method to process a client's stack information. @param stack list of stack entries. Each entry is a tuple of three values giving the filename, linenumber and method (list of lists of (string, integer, string)) """ self.emit(SIGNAL('clientStack'), stack) def clientThreadList(self, currentId, threadList): """ Public method to process the client thread list info. @param currentID id of the current thread (integer) @param threadList list of dictionaries containing the thread data """ self.emit(SIGNAL('clientThreadList'), currentId, threadList) def clientThreadSet(self): """ Public method to handle the change of the client thread. """ self.emit(SIGNAL('clientThreadSet')) def clientVariables(self, scope, variables): """ Public method to process the client variables info. @param scope scope of the variables (-1 = empty global, 1 = global, 0 = local) @param variables the list of variables from the client """ self.emit(SIGNAL('clientVariables'), scope, variables) def clientVariable(self, scope, variables): """ Public method to process the client variable info. @param scope scope of the variables (-1 = empty global, 1 = global, 0 = local) @param variables the list of members of a classvariable from the client """ self.emit(SIGNAL('clientVariable'), scope, variables) def clientStatement(self, more): """ Public method to process the input response from the client. @param more flag indicating that more user input is required """ self.emit(SIGNAL('clientStatement'), more) def clientException(self, exceptionType, exceptionMessage, stackTrace): """ Public method to process the exception info from the client. @param exceptionType type of exception raised (string) @param exceptionMessage message given by the exception (string) @param stackTrace list of stack entries with the exception position first. Each stack entry is a list giving the filename and the linenumber. """ if self.running: self.emit(SIGNAL('clientException'), exceptionType, exceptionMessage, stackTrace) def clientSyntaxError(self, message, filename, lineNo, characterNo): """ Public method to process the syntax error info from the client. @param message message of the syntax error (string) @param filename translated filename of the syntax error position (string) @param lineNo line number of the syntax error position (integer) @param characterNo character number of the syntax error position (integer) """ if self.running: self.emit(SIGNAL('clientSyntaxError'), message, filename, lineNo, characterNo) def clientExit(self, status): """ Public method to process the client exit status. @param status exit code as a string (string) """ if self.passive: self.__passiveShutDown() self.emit(SIGNAL('clientExit(int)'), int(status)) if Preferences.getDebugger("AutomaticReset"): self.startClient(False) if self.passive: self.__createDebuggerInterface("None") self.clientOutput(self.trUtf8('\nNot connected\n')) self.clientStatement(False) self.running = False def clientClearBreak(self, filename, lineno): """ Public method to process the client clear breakpoint command. @param filename filename of the breakpoint (string) @param lineno line umber of the breakpoint (integer) """ self.emit(SIGNAL('clientClearBreak'), filename, lineno) def clientBreakConditionError(self, filename, lineno): """ Public method to process the client breakpoint condition error info. @param filename filename of the breakpoint (string) @param lineno line umber of the breakpoint (integer) """ self.emit(SIGNAL('clientBreakConditionError'), filename, lineno) def clientClearWatch(self, condition): """ Public slot to handle the clientClearWatch signal. @param condition expression of watch expression to clear (string or QString) """ self.emit(SIGNAL('clientClearWatch'), condition) def clientWatchConditionError(self, condition): """ Public method to process the client watch expression error info. @param condition expression of watch expression to clear (string or QString) """ self.emit(SIGNAL('clientWatchConditionError'), condition) def clientRawInput(self, prompt, echo): """ Public method to process the client raw input command. @param prompt the input prompt (string) @param echo flag indicating an echoing of the input (boolean) """ self.emit(SIGNAL('clientRawInput'), prompt, echo) def clientBanner(self, version, platform, debugClient): """ Public method to process the client banner info. @param version interpreter version info (string) @param platform hostname of the client (string) @param debugClient additional debugger type info (string) """ self.emit(SIGNAL('clientBanner'), version, platform, debugClient) def clientCapabilities(self, capabilities, clientType): """ Public method to process the client capabilities info. @param capabilities bitmaks with the client capabilities (integer) @param clientType type of the debug client (string) """ self.__clientCapabilities[clientType] = capabilities self.emit(SIGNAL('clientCapabilities'), capabilities, clientType) def clientCompletionList(self, completionList, text): """ Public method to process the client auto completion info. @param completionList list of possible completions (list of strings) @param text the text to be completed (string) """ self.emit(SIGNAL('clientCompletionList'), completionList, text) def clientUtPrepared(self, result, exceptionType, exceptionValue): """ Public method to process the client unittest prepared info. @param result number of test cases (0 = error) (integer) @param exceptionType exception type (string) @param exceptionValue exception message (string) """ self.emit(SIGNAL('utPrepared'), result, exceptionType, exceptionValue) def clientUtStartTest(self, testname, doc): """ Public method to process the client start test info. @param testname name of the test (string) @param doc short description of the test (string) """ self.emit(SIGNAL('utStartTest'), testname, doc) def clientUtStopTest(self): """ Public method to process the client stop test info. """ self.emit(SIGNAL('utStopTest')) def clientUtTestFailed(self, testname, traceback): """ Public method to process the client test failed info. @param testname name of the test (string) @param traceback lines of traceback info (string) """ self.emit(SIGNAL('utTestFailed'), testname, traceback) def clientUtTestErrored(self, testname, traceback): """ Public method to process the client test errored info. @param testname name of the test (string) @param traceback lines of traceback info (string) """ self.emit(SIGNAL('utTestErrored'), testname, traceback) def clientUtFinished(self): """ Public method to process the client unit test finished info. """ self.emit(SIGNAL('utFinished')) def passiveStartUp(self, fn, exc): """ Public method to handle a passive debug connection. @param fn filename of the debugged script (string) @param exc flag to enable exception reporting of the IDE (boolean) """ print unicode(self.trUtf8("Passive debug connection received")) self.passiveClientExited = False self.debugging = True self.running = True self.__restoreBreakpoints() self.__restoreWatchpoints() self.emit(SIGNAL('passiveDebugStarted'), fn, exc) def __passiveShutDown(self): """ Private method to shut down a passive debug connection. """ self.passiveClientExited = True self.shutdownServer() print unicode(self.trUtf8("Passive debug connection closed")) def __restoreBreakpoints(self): """ Private method to restore the breakpoints after a restart. """ if self.debugging: self.__addBreakPoints(QModelIndex(), 0, self.breakpointModel.rowCount()-1) def __restoreWatchpoints(self): """ Private method to restore the watch expressions after a restart. """ if self.debugging: self.__addWatchPoints(QModelIndex(), 0, self.watchpointModel.rowCount()-1) def getBreakPointModel(self): """ Public slot to get a reference to the breakpoint model object. @return reference to the breakpoint model object (BreakPointModel) """ return self.breakpointModel def getWatchPointModel(self): """ Public slot to get a reference to the watch expression model object. @return reference to the watch expression model object (WatchPointModel) """ return self.watchpointModel def isConnected(self): """ Public method to test, if the debug server is connected to a backend. @return flag indicating a connection (boolean) """ return self.debuggerInterface and self.debuggerInterface.isConnected() eric4-4.5.18/eric/Debugger/PaxHeaders.8617/EditBreakpointDialog.py0000644000175000001440000000013212261012651022627 xustar000000000000000030 mtime=1388582313.066090603 30 atime=1389081083.810724384 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Debugger/EditBreakpointDialog.py0000644000175000001440000001242412261012651022364 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Module implementing a dialog to edit breakpoint properties. """ import os.path from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQFileDialog from E4Gui.E4Completers import E4FileCompleter from Ui_EditBreakpointDialog import Ui_EditBreakpointDialog import Utilities class EditBreakpointDialog(QDialog, Ui_EditBreakpointDialog): """ Class implementing a dialog to edit breakpoint properties. """ def __init__(self, id, properties, condHistory, parent = None, name = None, modal = False, addMode = False, filenameHistory = None): """ Constructor @param id id of the breakpoint (tuple) (filename, linenumber) @param properties properties for the breakpoint (tuple) (condition, temporary flag, enabled flag, ignore count) @param condHistory the list of conditionals history (QStringList) @param parent the parent of this dialog @param name the widget name of this dialog @param modal flag indicating a modal dialog """ QDialog.__init__(self,parent) self.setupUi(self) if name: self.setObjectName(name) self.setModal(modal) self.okButton = self.buttonBox.button(QDialogButtonBox.Ok) self.filenameCompleter = E4FileCompleter(self.filenameCombo) fn, lineno = id if not addMode: cond, temp, enabled, count = properties # set the filename if fn is not None: self.filenameCombo.setEditText(fn) # set the line number self.linenoSpinBox.setValue(lineno) # set the condition if cond is None: cond = '' curr = condHistory.indexOf(cond) if curr == -1: condHistory.prepend(cond) curr = 0 self.conditionCombo.addItems(condHistory) self.conditionCombo.setCurrentIndex(curr) # set the ignore count self.ignoreSpinBox.setValue(count) # set the checkboxes self.temporaryCheckBox.setChecked(temp) self.enabledCheckBox.setChecked(enabled) self.filenameCombo.setEnabled(False) self.fileButton.setEnabled(False) self.linenoSpinBox.setEnabled(False) self.conditionCombo.setFocus() else: self.setWindowTitle(self.trUtf8("Add Breakpoint")) # set the filename if fn is None: fn = QString('') curr = filenameHistory.indexOf(fn) if curr == -1: filenameHistory.prepend(fn) curr = 0 self.filenameCombo.addItems(filenameHistory) self.filenameCombo.setCurrentIndex(curr) # set the condition cond = '' curr = condHistory.indexOf(cond) if curr == -1: condHistory.prepend(cond) curr = 0 self.conditionCombo.addItems(condHistory) self.conditionCombo.setCurrentIndex(curr) if QString(fn).isEmpty(): self.okButton.setEnabled(False) @pyqtSignature("") def on_fileButton_clicked(self): """ Private slot to select a file via a file selection dialog. """ file = KQFileDialog.getOpenFileName(\ self, self.trUtf8("Select filename of the breakpoint"), self.filenameCombo.currentText(), QString()) if not file.isNull(): self.filenameCombo.setEditText(Utilities.toNativeSeparators(file)) def on_filenameCombo_editTextChanged(self, fn): """ Private slot to handle the change of the filename. @param fn text of the filename edit (QString) """ if fn.isEmpty(): self.okButton.setEnabled(False) else: self.okButton.setEnabled(True) def getData(self): """ Public method to retrieve the entered data. @return a tuple containing the breakpoints new properties (condition, temporary flag, enabled flag, ignore count) """ return (self.conditionCombo.currentText(), self.temporaryCheckBox.isChecked(), self.enabledCheckBox.isChecked(), self.ignoreSpinBox.value()) def getAddData(self): """ Public method to retrieve the entered data for an add. @return a tuple containing the new breakpoints properties (filename, lineno, condition, temporary flag, enabled flag, ignore count) """ fn = self.filenameCombo.currentText() if fn.isEmpty(): fn = None else: fn = os.path.expanduser(os.path.expandvars(unicode(fn))) return (fn, self.linenoSpinBox.value(), self.conditionCombo.currentText(), self.temporaryCheckBox.isChecked(), self.enabledCheckBox.isChecked(), self.ignoreSpinBox.value()) eric4-4.5.18/eric/Debugger/PaxHeaders.8617/BreakPointModel.py0000644000175000001440000000013212261012651021622 xustar000000000000000030 mtime=1388582313.069090641 30 atime=1389081083.811724385 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Debugger/BreakPointModel.py0000644000175000001440000002415712261012651021365 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing the Breakpoint model. """ from PyQt4.QtCore import * class BreakPointModel(QAbstractItemModel): """ Class implementing a custom model for breakpoints. """ def __init__(self, parent = None): """ Constructor @param reference to the parent widget (QObject) """ QObject.__init__(self, parent) self.breakpoints = [] self.header = [ QVariant(self.trUtf8("Filename")), QVariant(self.trUtf8("Line")), QVariant(self.trUtf8('Condition')), QVariant(self.trUtf8('Temporary')), QVariant(self.trUtf8('Enabled')), QVariant(self.trUtf8('Ignore Count')), ] self.alignments = [QVariant(Qt.Alignment(Qt.AlignLeft)), QVariant(Qt.Alignment(Qt.AlignRight)), QVariant(Qt.Alignment(Qt.AlignLeft)), QVariant(Qt.Alignment(Qt.AlignHCenter)), QVariant(Qt.Alignment(Qt.AlignHCenter)), QVariant(Qt.Alignment(Qt.AlignRight)), QVariant(Qt.Alignment(Qt.AlignHCenter)), ] def columnCount(self, parent = QModelIndex()): """ Public method to get the current column count. @return column count (integer) """ return len(self.header) + 1 def rowCount(self, parent = QModelIndex()): """ Public method to get the current row count. @return row count (integer) """ # we do not have a tree, parent should always be invalid if not parent.isValid(): return len(self.breakpoints) else: return 0 def data(self, index, role): """ Public method to get the requested data. @param index index of the requested data (QModelIndex) @param role role of the requested data (Qt.ItemDataRole) @return the requested data (QVariant) """ if not index.isValid(): return QVariant() if role == Qt.DisplayRole or role == Qt.ToolTipRole: if index.column() < len(self.header): return QVariant(self.breakpoints[index.row()][index.column()]) if role == Qt.TextAlignmentRole: if index.column() < len(self.alignments): return self.alignments[index.column()] return QVariant() def flags(self, index): """ Public method to get item flags. @param index index of the requested flags (QModelIndex) @return item flags for the given index (Qt.ItemFlags) """ if not index.isValid(): return Qt.ItemIsEnabled return Qt.ItemIsEnabled | Qt.ItemIsSelectable def headerData(self, section, orientation, role = Qt.DisplayRole): """ Public method to get header data. @param section section number of the requested header data (integer) @param orientation orientation of the header (Qt.Orientation) @param role role of the requested data (Qt.ItemDataRole) @return header data (QVariant) """ if orientation == Qt.Horizontal and role == Qt.DisplayRole: if section >= len(self.header): return QVariant("") else: return self.header[section] return QVariant() def index(self, row, column, parent = QModelIndex()): """ Public method to create an index. @param row row number for the index (integer) @param column column number for the index (integer) @param parent index of the parent item (QModelIndex) @return requested index (QModelIndex) """ if parent.isValid() or \ row < 0 or row >= len(self.breakpoints) or \ column < 0 or column >= len(self.header): return QModelIndex() return self.createIndex(row, column, self.breakpoints[row]) def parent(self, index): """ Public method to get the parent index. @param index index of item to get parent (QModelIndex) @return index of parent (QModelIndex) """ return QModelIndex() def hasChildren(self, parent = QModelIndex()): """ Public method to check for the presence of child items. @param parent index of parent item (QModelIndex) @return flag indicating the presence of child items (boolean) """ if not parent.isValid(): return len(self.breakpoints) > 0 else: return False ############################################################################ def addBreakPoint(self, fn, line, properties): """ Public method to add a new breakpoint to the list. @param fn filename of the breakpoint (string or QString) @param line line number of the breakpoint (integer) @param properties properties of the breakpoint (tuple of condition (string or QString), temporary flag (bool), enabled flag (bool), ignore count (integer)) """ bp = [unicode(fn), line] + list(properties) cnt = len(self.breakpoints) self.beginInsertRows(QModelIndex(), cnt, cnt) self.breakpoints.append(bp) self.endInsertRows() def setBreakPointByIndex(self, index, fn, line, properties): """ Public method to set the values of a breakpoint given by index. @param index index of the breakpoint (QModelIndex) @param fn filename of the breakpoint (string or QString) @param line line number of the breakpoint (integer) @param properties properties of the breakpoint (tuple of condition (string or QString), temporary flag (bool), enabled flag (bool), ignore count (integer)) """ if index.isValid(): row = index.row() index1 = self.createIndex(row, 0, self.breakpoints[row]) index2 = self.createIndex(row, len(self.breakpoints[row]), self.breakpoints[row]) self.emit(\ SIGNAL("dataAboutToBeChanged(const QModelIndex &, const QModelIndex &)"), index1, index2) i = 0 for value in [unicode(fn), line] + list(properties): self.breakpoints[row][i] = value i += 1 self.emit(SIGNAL("dataChanged(const QModelIndex &, const QModelIndex &)"), index1, index2) def setBreakPointEnabledByIndex(self, index, enabled): """ Public method to set the enabled state of a breakpoint given by index. @param index index of the breakpoint (QModelIndex) @param enabled flag giving the enabled state (boolean) """ if index.isValid(): row = index.row() col = 4 index1 = self.createIndex(row, col, self.breakpoints[row]) self.emit(\ SIGNAL("dataAboutToBeChanged(const QModelIndex &, const QModelIndex &)"), index1, index1) self.breakpoints[row][col] = enabled self.emit(SIGNAL("dataChanged(const QModelIndex &, const QModelIndex &)"), index1, index1) def deleteBreakPointByIndex(self, index): """ Public method to set the values of a breakpoint given by index. @param index index of the breakpoint (QModelIndex) """ if index.isValid(): row = index.row() self.beginRemoveRows(QModelIndex(), row, row) del self.breakpoints[row] self.endRemoveRows() def deleteBreakPoints(self, idxList): """ Public method to delete a list of breakpoints given by their indexes. @param idxList list of breakpoint indexes (list of QModelIndex) """ rows = [] for index in idxList: if index.isValid(): rows.append(index.row()) rows.sort(reverse = True) for row in rows: self.beginRemoveRows(QModelIndex(), row, row) del self.breakpoints[row] self.endRemoveRows() def deleteAll(self): """ Public method to delete all breakpoints. """ if self.breakpoints: self.beginRemoveRows(QModelIndex(), 0, len(self.breakpoints) - 1) self.breakpoints = [] self.endRemoveRows() def getBreakPointByIndex(self, index): """ Public method to get the values of a breakpoint given by index. @param index index of the breakpoint (QModelIndex) @return breakpoint (list of seven values (filename, line number, condition, temporary flag, enabled flag, ignore count)) """ if index.isValid(): return self.breakpoints[index.row()][:] # return a copy else: return [] def getBreakPointIndex(self, fn, lineno): """ Public method to get the index of a breakpoint given by filename and line number. @param fn filename of the breakpoint (string or QString) @param line line number of the breakpoint (integer) @return index (QModelIndex) """ fn = unicode(fn) for row in range(len(self.breakpoints)): bp = self.breakpoints[row] if unicode(bp[0]) == fn and bp[1] == lineno: return self.createIndex(row, 0, self.breakpoints[row]) return QModelIndex() def isBreakPointTemporaryByIndex(self, index): """ Public method to test, if a breakpoint given by it's index is temporary. @param index index of the breakpoint to test (QModelIndex) @return flag indicating a temporary breakpoint (boolean) """ if index.isValid(): return self.breakpoints[index.row()][3] else: return False eric4-4.5.18/eric/Debugger/PaxHeaders.8617/DebugUI.py0000644000175000001440000000013212261012651020067 xustar000000000000000030 mtime=1388582313.082090806 30 atime=1389081083.811724385 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Debugger/DebugUI.py0000644000175000001440000024441412261012651017632 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2002 - 2014 Detlev Offenbach # """ Module implementing the debugger UI. """ import os from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQMessageBox, KQInputDialog from UI.Info import * from VariablesFilterDialog import * from ExceptionsFilterDialog import * from StartDialog import * from EditBreakpointDialog import EditBreakpointDialog from EditWatchpointDialog import EditWatchpointDialog from DebugClientCapabilities import * import Preferences import Utilities import UI.PixmapCache import UI.Config from E4Gui.E4Action import E4Action, createActionGroup from eric4config import getConfig class DebugUI(QObject): """ Class implementing the debugger part of the UI. @signal clientStack(stack) emitted at breaking after a reported exception @signal compileForms() emitted if changed project forms should be compiled @signal compileResources() emitted if changed project resources should be compiled @signal debuggingStarted(filename) emitted when a debugging session was started @signal resetUI() emitted to reset the UI @signal exceptionInterrupt() emitted after the execution was interrupted by an exception and acknowledged by the user @signal appendStdout(msg) emitted when the client program has terminated and the display of the termination dialog is suppressed """ def __init__(self, ui, vm, debugServer, debugViewer, project): """ Constructor @param ui reference to the main UI @param vm reference to the viewmanager @param debugServer reference to the debug server @param debugViewer reference to the debug viewer widget @param project reference to the project object """ QObject.__init__(self, ui) self.ui = ui self.viewmanager = vm self.debugServer = debugServer self.debugViewer = debugViewer self.project = project # Clear some variables self.projectOpen = False self.editorOpen = False # Generate the variables filter dialog self.dbgFilterDialog = VariablesFilterDialog(self.ui, 'Filter Dialog', True) # read the saved debug info values self.argvHistory = \ Preferences.Prefs.settings \ .value('DebugInfo/ArgumentsHistory').toStringList() self.wdHistory = \ Preferences.Prefs.settings \ .value('DebugInfo/WorkingDirectoryHistory').toStringList() self.envHistory = \ Preferences.Prefs.settings \ .value('DebugInfo/EnvironmentHistory').toStringList() self.excList = \ Preferences.Prefs.settings \ .value('DebugInfo/Exceptions').toStringList() self.excIgnoreList = \ Preferences.Prefs.settings \ .value('DebugInfo/IgnoredExceptions').toStringList() self.exceptions = \ Preferences.Prefs.settings.value('DebugInfo/ReportExceptions', QVariant(True)).toBool() self.autoClearShell = Preferences.Prefs.settings.value('DebugInfo/AutoClearShell', QVariant(True)).toBool() self.tracePython = Preferences.Prefs.settings.value('DebugInfo/TracePython', QVariant(False)).toBool() self.autoContinue = Preferences.Prefs.settings.value('DebugInfo/AutoContinue', QVariant(True)).toBool() self.forkAutomatically = Preferences.Prefs.settings.value( 'DebugInfo/ForkAutomatically', QVariant(False)).toBool() self.forkIntoChild = Preferences.Prefs.settings.value('DebugInfo/ForkIntoChild', QVariant(False)).toBool() self.evalHistory = QStringList() self.execHistory = QStringList() self.lastDebuggedFile = None self.lastStartAction = 0 # 0=None, 1=Script, 2=Project self.lastAction = -1 self.debugActions = [self.__continue, self.__step,\ self.__stepOver, self.__stepOut,\ self.__stepQuit, self.__runToCursor] self.localsVarFilter, self.globalsVarFilter = Preferences.getVarFilters() self.debugViewer.setVariablesFilter(self.globalsVarFilter, self.localsVarFilter) # Connect the signals emitted by the debug-server self.connect(debugServer, SIGNAL('clientGone'), self.__clientGone) self.connect(debugServer, SIGNAL('clientLine'), self.__clientLine) self.connect(debugServer, SIGNAL('clientExit(int)'), self.__clientExit) self.connect(debugServer, SIGNAL('clientSyntaxError'), self.__clientSyntaxError) self.connect(debugServer, SIGNAL('clientException'), self.__clientException) self.connect(debugServer, SIGNAL('clientVariables'), self.__clientVariables) self.connect(debugServer, SIGNAL('clientVariable'), self.__clientVariable) self.connect(debugServer, SIGNAL('clientBreakConditionError'), self.__clientBreakConditionError) self.connect(debugServer, SIGNAL('clientWatchConditionError'), self.__clientWatchConditionError) self.connect(debugServer, SIGNAL('passiveDebugStarted'), self.__passiveDebugStarted) self.connect(debugServer, SIGNAL('clientThreadSet'), self.__clientThreadSet) self.connect(debugServer, SIGNAL('clientRawInput'), debugViewer.handleRawInput) self.connect(debugServer, SIGNAL('clientRawInputSent'), debugViewer.restoreCurrentPage) self.connect(debugServer, SIGNAL('clientThreadList'), debugViewer.showThreadList) # Connect the signals emitted by the viewmanager self.connect(vm, SIGNAL('editorOpened'), self.__editorOpened) self.connect(vm, SIGNAL('lastEditorClosed'), self.__lastEditorClosed) self.connect(vm, SIGNAL('checkActions'), self.__checkActions) self.connect(vm, SIGNAL('cursorChanged'), self.__cursorChanged) self.connect(vm, SIGNAL('breakpointToggled'), self.__cursorChanged) # Connect the signals emitted by the project self.connect(project, SIGNAL('projectOpened'), self.__projectOpened) self.connect(project, SIGNAL('newProject'), self.__projectOpened) self.connect(project, SIGNAL('projectClosed'), self.__projectClosed) self.connect(project, SIGNAL('projectSessionLoaded'), self.__projectSessionLoaded) # Set a flag for the passive debug mode self.passive = Preferences.getDebugger("PassiveDbgEnabled") def variablesFilter(self, scope): """ Public method to get the variables filter for a scope. @param scope flag indicating global (True) or local (False) scope """ if scope: return self.globalsVarFilter[:] else: return self.localsVarFilter[:] def initActions(self): """ Method defining the user interface actions. """ self.actions = [] self.runAct = E4Action(self.trUtf8('Run Script'), UI.PixmapCache.getIcon("runScript.png"), self.trUtf8('&Run Script...'),Qt.Key_F2,0,self,'dbg_run_script') self.runAct.setStatusTip(self.trUtf8('Run the current Script')) self.runAct.setWhatsThis(self.trUtf8( """Run Script""" """

    Set the command line arguments and run the script outside the""" """ debugger. If the file has unsaved changes it may be saved first.

    """ )) self.connect(self.runAct, SIGNAL('triggered()'), self.__runScript) self.actions.append(self.runAct) self.runProjectAct = E4Action(self.trUtf8('Run Project'), UI.PixmapCache.getIcon("runProject.png"), self.trUtf8('Run &Project...'),Qt.SHIFT + Qt.Key_F2,0,self, 'dbg_run_project') self.runProjectAct.setStatusTip(self.trUtf8('Run the current Project')) self.runProjectAct.setWhatsThis(self.trUtf8( """Run Project""" """

    Set the command line arguments and run the current project""" """ outside the debugger.""" """ If files of the current project have unsaved changes they may""" """ be saved first.

    """ )) self.connect(self.runProjectAct, SIGNAL('triggered()'), self.__runProject) self.actions.append(self.runProjectAct) self.coverageAct = E4Action(self.trUtf8('Coverage run of Script'), UI.PixmapCache.getIcon("coverageScript.png"), self.trUtf8('Coverage run of Script...'),0,0,self,'dbg_coverage_script') self.coverageAct.setStatusTip(\ self.trUtf8('Perform a coverage run of the current Script')) self.coverageAct.setWhatsThis(self.trUtf8( """Coverage run of Script""" """

    Set the command line arguments and run the script under the control""" """ of a coverage analysis tool. If the file has unsaved changes it may be""" """ saved first.

    """ )) self.connect(self.coverageAct, SIGNAL('triggered()'), self.__coverageScript) self.actions.append(self.coverageAct) self.coverageProjectAct = E4Action(self.trUtf8('Coverage run of Project'), UI.PixmapCache.getIcon("coverageProject.png"), self.trUtf8('Coverage run of Project...'),0,0,self,'dbg_coverage_project') self.coverageProjectAct.setStatusTip(\ self.trUtf8('Perform a coverage run of the current Project')) self.coverageProjectAct.setWhatsThis(self.trUtf8( """Coverage run of Project""" """

    Set the command line arguments and run the current project""" """ under the control of a coverage analysis tool.""" """ If files of the current project have unsaved changes they may""" """ be saved first.

    """ )) self.connect(self.coverageProjectAct, SIGNAL('triggered()'), self.__coverageProject) self.actions.append(self.coverageProjectAct) self.profileAct = E4Action(self.trUtf8('Profile Script'), UI.PixmapCache.getIcon("profileScript.png"), self.trUtf8('Profile Script...'),0,0,self,'dbg_profile_script') self.profileAct.setStatusTip(self.trUtf8('Profile the current Script')) self.profileAct.setWhatsThis(self.trUtf8( """Profile Script""" """

    Set the command line arguments and profile the script.""" """ If the file has unsaved changes it may be saved first.

    """ )) self.connect(self.profileAct, SIGNAL('triggered()'), self.__profileScript) self.actions.append(self.profileAct) self.profileProjectAct = E4Action(self.trUtf8('Profile Project'), UI.PixmapCache.getIcon("profileProject.png"), self.trUtf8('Profile Project...'),0,0,self,'dbg_profile_project') self.profileProjectAct.setStatusTip(self.trUtf8('Profile the current Project')) self.profileProjectAct.setWhatsThis(self.trUtf8( """Profile Project""" """

    Set the command line arguments and profile the current project.""" """ If files of the current project have unsaved changes they may""" """ be saved first.

    """ )) self.connect(self.profileProjectAct, SIGNAL('triggered()'), self.__profileProject) self.actions.append(self.profileProjectAct) self.debugAct = E4Action(self.trUtf8('Debug Script'), UI.PixmapCache.getIcon("debugScript.png"), self.trUtf8('&Debug Script...'),Qt.Key_F5,0,self,'dbg_debug_script') self.debugAct.setStatusTip(self.trUtf8('Debug the current Script')) self.debugAct.setWhatsThis(self.trUtf8( """Debug Script""" """

    Set the command line arguments and set the current line to be the""" """ first executable Python statement of the current editor window.""" """ If the file has unsaved changes it may be saved first.

    """ )) self.connect(self.debugAct, SIGNAL('triggered()'), self.__debugScript) self.actions.append(self.debugAct) self.debugProjectAct = E4Action(self.trUtf8('Debug Project'), UI.PixmapCache.getIcon("debugProject.png"), self.trUtf8('Debug &Project...'),Qt.SHIFT + Qt.Key_F5,0,self, 'dbg_debug_project') self.debugProjectAct.setStatusTip(self.trUtf8('Debug the current Project')) self.debugProjectAct.setWhatsThis(self.trUtf8( """Debug Project""" """

    Set the command line arguments and set the current line to be the""" """ first executable Python statement of the main script of the current""" """ project. If files of the current project have unsaved changes they may""" """ be saved first.

    """ )) self.connect(self.debugProjectAct, SIGNAL('triggered()'), self.__debugProject) self.actions.append(self.debugProjectAct) self.restartAct = E4Action(self.trUtf8('Restart Script'), UI.PixmapCache.getIcon("restart.png"), self.trUtf8('Restart Script'),Qt.Key_F4,0,self,'dbg_restart_script') self.restartAct.setStatusTip(self.trUtf8('Restart the last debugged script')) self.restartAct.setWhatsThis(self.trUtf8( """Restart Script""" """

    Set the command line arguments and set the current line to be the""" """ first executable Python statement of the script that was debugged last.""" """ If there are unsaved changes, they may be saved first.

    """ )) self.connect(self.restartAct, SIGNAL('triggered()'), self.__doRestart) self.actions.append(self.restartAct) self.stopAct = E4Action(self.trUtf8('Stop Script'), UI.PixmapCache.getIcon("stopScript.png"), self.trUtf8('Stop Script'),Qt.SHIFT + Qt.Key_F10,0, self,'dbg_stop_script') self.stopAct.setStatusTip(self.trUtf8("""Stop the running script.""")) self.stopAct.setWhatsThis(self.trUtf8( """Stop Script""" """

    This stops the script running in the debugger backend.

    """ )) self.connect(self.stopAct, SIGNAL('triggered()'), self.__stopScript) self.actions.append(self.stopAct) self.debugActGrp = createActionGroup(self) act = E4Action(self.trUtf8('Continue'), UI.PixmapCache.getIcon("continue.png"), self.trUtf8('&Continue'),Qt.Key_F6,0, self.debugActGrp,'dbg_continue') act.setStatusTip(\ self.trUtf8('Continue running the program from the current line')) act.setWhatsThis(self.trUtf8( """Continue""" """

    Continue running the program from the current line. The program will""" """ stop when it terminates or when a breakpoint is reached.

    """ )) self.connect(act, SIGNAL('triggered()'), self.__continue) self.actions.append(act) act = E4Action(self.trUtf8('Continue to Cursor'), UI.PixmapCache.getIcon("continueToCursor.png"), self.trUtf8('Continue &To Cursor'),Qt.SHIFT + Qt.Key_F6,0, self.debugActGrp,'dbg_continue_to_cursor') act.setStatusTip(self.trUtf8("""Continue running the program from the""" """ current line to the current cursor position""")) act.setWhatsThis(self.trUtf8( """Continue To Cursor""" """

    Continue running the program from the current line to the""" """ current cursor position.

    """ )) self.connect(act, SIGNAL('triggered()'), self.__runToCursor) self.actions.append(act) act = E4Action(self.trUtf8('Single Step'), UI.PixmapCache.getIcon("step.png"), self.trUtf8('Sin&gle Step'),Qt.Key_F7,0, self.debugActGrp,'dbg_single_step') act.setStatusTip(self.trUtf8('Execute a single Python statement')) act.setWhatsThis(self.trUtf8( """Single Step""" """

    Execute a single Python statement. If the statement""" """ is an import statement, a class constructor, or a""" """ method or function call then control is returned to the debugger at""" """ the next statement.

    """ )) self.connect(act, SIGNAL('triggered()'), self.__step) self.actions.append(act) act = E4Action(self.trUtf8('Step Over'), UI.PixmapCache.getIcon("stepOver.png"), self.trUtf8('Step &Over'),Qt.Key_F8,0, self.debugActGrp,'dbg_step_over') act.setStatusTip(self.trUtf8("""Execute a single Python statement staying""" """ in the current frame""")) act.setWhatsThis(self.trUtf8( """Step Over""" """

    Execute a single Python statement staying in the same frame. If""" """ the statement is an import statement, a class constructor,""" """ or a method or function call then control is returned to the debugger""" """ after the statement has completed.

    """ )) self.connect(act, SIGNAL('triggered()'), self.__stepOver) self.actions.append(act) act = E4Action(self.trUtf8('Step Out'), UI.PixmapCache.getIcon("stepOut.png"), self.trUtf8('Step Ou&t'),Qt.Key_F9,0, self.debugActGrp,'dbg_step_out') act.setStatusTip(self.trUtf8("""Execute Python statements until leaving""" """ the current frame""")) act.setWhatsThis(self.trUtf8( """Step Out""" """

    Execute Python statements until leaving the current frame. If""" """ the statements are inside an import statement, a class""" """ constructor, or a method or function call then control is returned""" """ to the debugger after the current frame has been left.

    """ )) self.connect(act, SIGNAL('triggered()'), self.__stepOut) self.actions.append(act) act = E4Action(self.trUtf8('Stop'), UI.PixmapCache.getIcon("stepQuit.png"), self.trUtf8('&Stop'),Qt.Key_F10,0, self.debugActGrp,'dbg_stop') act.setStatusTip(self.trUtf8('Stop debugging')) act.setWhatsThis(self.trUtf8( """Stop""" """

    Stop the running debugging session.

    """ )) self.connect(act, SIGNAL('triggered()'), self.__stepQuit) self.actions.append(act) self.debugActGrp2 = createActionGroup(self) act = E4Action(self.trUtf8('Evaluate'), self.trUtf8('E&valuate...'), 0,0,self.debugActGrp2,'dbg_evaluate') act.setStatusTip(self.trUtf8('Evaluate in current context')) act.setWhatsThis(self.trUtf8( """Evaluate""" """

    Evaluate an expression in the current context of the""" """ debugged program. The result is displayed in the""" """ shell window.

    """ )) self.connect(act, SIGNAL('triggered()'), self.__eval) self.actions.append(act) act = E4Action(self.trUtf8('Execute'), self.trUtf8('E&xecute...'), 0,0,self.debugActGrp2,'dbg_execute') act.setStatusTip(\ self.trUtf8('Execute a one line statement in the current context')) act.setWhatsThis(self.trUtf8( """Execute""" """

    Execute a one line statement in the current context""" """ of the debugged program.

    """ )) self.connect(act, SIGNAL('triggered()'), self.__exec) self.actions.append(act) self.dbgFilterAct = E4Action(self.trUtf8('Variables Type Filter'), self.trUtf8('Varia&bles Type Filter...'), 0, 0, self, 'dbg_variables_filter') self.dbgFilterAct.setStatusTip(self.trUtf8('Configure variables type filter')) self.dbgFilterAct.setWhatsThis(self.trUtf8( """Variables Type Filter""" """

    Configure the variables type filter. Only variable types that are not""" """ selected are displayed in the global or local variables window""" """ during a debugging session.

    """ )) self.connect(self.dbgFilterAct, SIGNAL('triggered()'), self.__configureVariablesFilters) self.actions.append(self.dbgFilterAct) self.excFilterAct = E4Action(self.trUtf8('Exceptions Filter'), self.trUtf8('&Exceptions Filter...'), 0, 0, self, 'dbg_exceptions_filter') self.excFilterAct.setStatusTip(self.trUtf8('Configure exceptions filter')) self.excFilterAct.setWhatsThis(self.trUtf8( """Exceptions Filter""" """

    Configure the exceptions filter. Only exception types that are""" """ listed are highlighted during a debugging session.

    """ """

    Please note, that all unhandled exceptions are highlighted""" """ indepent from the filter list.

    """ )) self.connect(self.excFilterAct, SIGNAL('triggered()'), self.__configureExceptionsFilter) self.actions.append(self.excFilterAct) self.excIgnoreFilterAct = E4Action(self.trUtf8('Ignored Exceptions'), self.trUtf8('&Ignored Exceptions...'), 0, 0, self, 'dbg_ignored_exceptions') self.excIgnoreFilterAct.setStatusTip(self.trUtf8('Configure ignored exceptions')) self.excIgnoreFilterAct.setWhatsThis(self.trUtf8( """Ignored Exceptions""" """

    Configure the ignored exceptions. Only exception types that are""" """ not listed are highlighted during a debugging session.

    """ """

    Please note, that unhandled exceptions cannot be ignored.

    """ )) self.connect(self.excIgnoreFilterAct, SIGNAL('triggered()'), self.__configureIgnoredExceptions) self.actions.append(self.excIgnoreFilterAct) self.dbgSetBpActGrp = createActionGroup(self) self.dbgToggleBpAct = E4Action(self.trUtf8('Toggle Breakpoint'), UI.PixmapCache.getIcon("breakpointToggle.png"), self.trUtf8('Toggle Breakpoint'), QKeySequence(self.trUtf8("Shift+F11","Debug|Toggle Breakpoint")), 0, self.dbgSetBpActGrp, 'dbg_toggle_breakpoint') self.dbgToggleBpAct.setStatusTip(self.trUtf8('Toggle Breakpoint')) self.dbgToggleBpAct.setWhatsThis(self.trUtf8( """Toggle Breakpoint""" """

    Toggles a breakpoint at the current line of the""" """ current editor.

    """ )) self.connect(self.dbgToggleBpAct, SIGNAL('triggered()'), self.__toggleBreakpoint) self.actions.append(self.dbgToggleBpAct) self.dbgEditBpAct = E4Action(self.trUtf8('Edit Breakpoint'), UI.PixmapCache.getIcon("cBreakpointToggle.png"), self.trUtf8('Edit Breakpoint...'), QKeySequence(self.trUtf8("Shift+F12","Debug|Edit Breakpoint")), 0, self.dbgSetBpActGrp, 'dbg_edit_breakpoint') self.dbgEditBpAct.setStatusTip(self.trUtf8('Edit Breakpoint')) self.dbgEditBpAct.setWhatsThis(self.trUtf8( """Edit Breakpoint""" """

    Opens a dialog to edit the breakpoints properties.""" """ It works at the current line of the current editor.

    """ )) self.connect(self.dbgEditBpAct, SIGNAL('triggered()'), self.__editBreakpoint) self.actions.append(self.dbgEditBpAct) self.dbgNextBpAct = E4Action(self.trUtf8('Next Breakpoint'), UI.PixmapCache.getIcon("breakpointNext.png"), self.trUtf8('Next Breakpoint'), QKeySequence(self.trUtf8("Ctrl+Shift+PgDown","Debug|Next Breakpoint")), 0, self.dbgSetBpActGrp, 'dbg_next_breakpoint') self.dbgNextBpAct.setStatusTip(self.trUtf8('Next Breakpoint')) self.dbgNextBpAct.setWhatsThis(self.trUtf8( """Next Breakpoint""" """

    Go to next breakpoint of the current editor.

    """ )) self.connect(self.dbgNextBpAct, SIGNAL('triggered()'), self.__nextBreakpoint) self.actions.append(self.dbgNextBpAct) self.dbgPrevBpAct = E4Action(self.trUtf8('Previous Breakpoint'), UI.PixmapCache.getIcon("breakpointPrevious.png"), self.trUtf8('Previous Breakpoint'), QKeySequence(self.trUtf8("Ctrl+Shift+PgUp","Debug|Previous Breakpoint")), 0, self.dbgSetBpActGrp, 'dbg_previous_breakpoint') self.dbgPrevBpAct.setStatusTip(self.trUtf8('Previous Breakpoint')) self.dbgPrevBpAct.setWhatsThis(self.trUtf8( """Previous Breakpoint""" """

    Go to previous breakpoint of the current editor.

    """ )) self.connect(self.dbgPrevBpAct, SIGNAL('triggered()'), self.__previousBreakpoint) self.actions.append(self.dbgPrevBpAct) act = E4Action(self.trUtf8('Clear Breakpoints'), self.trUtf8('Clear Breakpoints'), QKeySequence(self.trUtf8("Ctrl+Shift+C","Debug|Clear Breakpoints")), 0, self.dbgSetBpActGrp, 'dbg_clear_breakpoint') act.setStatusTip(self.trUtf8('Clear Breakpoints')) act.setWhatsThis(self.trUtf8( """Clear Breakpoints""" """

    Clear breakpoints of all editors.

    """ )) self.connect(act, SIGNAL('triggered()'), self.__clearBreakpoints) self.actions.append(act) self.debugActGrp.setEnabled(False) self.debugActGrp2.setEnabled(False) self.dbgSetBpActGrp.setEnabled(False) self.runAct.setEnabled(False) self.runProjectAct.setEnabled(False) self.profileAct.setEnabled(False) self.profileProjectAct.setEnabled(False) self.coverageAct.setEnabled(False) self.coverageProjectAct.setEnabled(False) self.debugAct.setEnabled(False) self.debugProjectAct.setEnabled(False) self.restartAct.setEnabled(False) self.stopAct.setEnabled(False) def initMenus(self): """ Public slot to initialize the project menu. @return the generated menu """ dmenu = QMenu(self.trUtf8('&Debug'), self.parent()) dmenu.setTearOffEnabled(True) smenu = QMenu(self.trUtf8('&Start'), self.parent()) smenu.setTearOffEnabled(True) self.breakpointsMenu = QMenu(self.trUtf8('&Breakpoints'), dmenu) smenu.addAction(self.restartAct) smenu.addAction(self.stopAct) smenu.addSeparator() smenu.addAction(self.runAct) smenu.addAction(self.runProjectAct) smenu.addSeparator() smenu.addAction(self.debugAct) smenu.addAction(self.debugProjectAct) smenu.addSeparator() smenu.addAction(self.profileAct) smenu.addAction(self.profileProjectAct) smenu.addSeparator() smenu.addAction(self.coverageAct) smenu.addAction(self.coverageProjectAct) dmenu.addActions(self.debugActGrp.actions()) dmenu.addSeparator() dmenu.addActions(self.debugActGrp2.actions()) dmenu.addSeparator() dmenu.addActions(self.dbgSetBpActGrp.actions()) self.menuBreakpointsAct = dmenu.addMenu(self.breakpointsMenu) dmenu.addSeparator() dmenu.addAction(self.dbgFilterAct) dmenu.addAction(self.excFilterAct) dmenu.addAction(self.excIgnoreFilterAct) self.connect(self.breakpointsMenu, SIGNAL('aboutToShow()'), self.__showBreakpointsMenu) self.connect(self.breakpointsMenu, SIGNAL('triggered(QAction *)'), self.__breakpointSelected) self.connect(dmenu, SIGNAL('aboutToShow()'), self.__showDebugMenu) return smenu, dmenu def initToolbars(self, toolbarManager): """ Public slot to initialize the debug toolbars. @param toolbarManager reference to a toolbar manager object (E4ToolBarManager) @return the generated toolbars (list of QToolBar) """ starttb = QToolBar(self.trUtf8("Start"), self.parent()) starttb.setIconSize(UI.Config.ToolBarIconSize) starttb.setObjectName("StartToolbar") starttb.setToolTip(self.trUtf8('Start')) starttb.addAction(self.restartAct) starttb.addAction(self.stopAct) starttb.addSeparator() starttb.addAction(self.runAct) starttb.addAction(self.runProjectAct) starttb.addSeparator() starttb.addAction(self.debugAct) starttb.addAction(self.debugProjectAct) debugtb = QToolBar(self.trUtf8("Debug"), self.parent()) debugtb.setIconSize(UI.Config.ToolBarIconSize) debugtb.setObjectName("DebugToolbar") debugtb.setToolTip(self.trUtf8('Debug')) debugtb.addActions(self.debugActGrp.actions()) debugtb.addSeparator() debugtb.addAction(self.dbgToggleBpAct) debugtb.addAction(self.dbgEditBpAct) debugtb.addAction(self.dbgNextBpAct) debugtb.addAction(self.dbgPrevBpAct) toolbarManager.addToolBar(starttb, starttb.windowTitle()) toolbarManager.addToolBar(debugtb, debugtb.windowTitle()) toolbarManager.addAction(self.profileAct, starttb.windowTitle()) toolbarManager.addAction(self.profileProjectAct, starttb.windowTitle()) toolbarManager.addAction(self.coverageAct, starttb.windowTitle()) toolbarManager.addAction(self.coverageProjectAct, starttb.windowTitle()) return [starttb, debugtb] def setArgvHistory(self, argsStr, clearHistories = False): """ Public slot to initialize the argv history. @param argsStr the commandline arguments (string or QString) @param clearHistories flag indicating, that the list should be cleared (boolean) """ if clearHistories: self.argvHistory.clear() else: self.argvHistory.removeAll(argsStr) self.argvHistory.prepend(argsStr) def setWdHistory(self, wdStr, clearHistories = False): """ Public slot to initialize the wd history. @param wdStr the working directory (string or QString) @param clearHistories flag indicating, that the list should be cleared (boolean) """ if clearHistories: self.wdHistory.clear() else: self.wdHistory.removeAll(wdStr) self.wdHistory.prepend(wdStr) def setEnvHistory(self, envStr, clearHistories = False): """ Public slot to initialize the env history. @param envStr the environment settings (string or QString) @param clearHistories flag indicating, that the list should be cleared (boolean) """ if clearHistories: self.envHistory.clear() else: self.envHistory.removeAll(envStr) self.envHistory.prepend(envStr) def setExceptionReporting(self, exceptions): """ Public slot to initialize the exception reporting flag. @param exceptions flag indicating exception reporting status (boolean) """ self.exceptions = exceptions def setExcList(self, excList): """ Public slot to initialize the exceptions type list. @param excList list of exception types (QStringList) """ self.excList = excList[:] # keep a copy def setExcIgnoreList(self, excIgnoreList): """ Public slot to initialize the ignored exceptions type list. @param excIgnoreList list of ignored exception types (QStringList) """ self.excIgnoreList = excIgnoreList[:] # keep a copy def setAutoClearShell(self, autoClearShell): """ Public slot to initialize the autoClearShell flag. @param autoClearShell flag indicating, that the interpreter window should be cleared (boolean) """ self.autoClearShell = autoClearShell def setTracePython(self, tracePython): """ Public slot to initialize the trace Python flag. @param tracePython flag indicating if the Python library should be traced as well (boolean) """ self.tracePython = tracePython def setAutoContinue(self, autoContinue): """ Public slot to initialize the autoContinue flag. @param autoContinue flag indicating, that the debugger should not stop at the first executable line (boolean) """ self.autoContinue = autoContinue def __editorOpened(self, fn): """ Private slot to handle the editorOpened signal. @param fn filename of the opened editor """ self.editorOpen = True if fn: editor = self.viewmanager.getOpenEditor(fn) else: editor = None self.__checkActions(editor) def __lastEditorClosed(self): """ Private slot to handle the closeProgram signal. """ self.editorOpen = False self.debugAct.setEnabled(False) self.runAct.setEnabled(False) self.profileAct.setEnabled(False) self.coverageAct.setEnabled(False) self.debugActGrp.setEnabled(False) self.debugActGrp2.setEnabled(False) self.dbgSetBpActGrp.setEnabled(False) self.lastAction = -1 if not self.projectOpen: self.restartAct.setEnabled(False) self.lastDebuggedFile = None self.lastStartAction = 0 def __checkActions(self, editor): """ Private slot to check some actions for their enable/disable status. @param editor editor window """ if editor: fn = editor.getFileName() else: fn = None cap = 0 if fn: for language in self.debugServer.getSupportedLanguages(): exts = self.debugServer.getExtensions(language) if fn.endswith(exts): cap = self.debugServer.getClientCapabilities(language) break else: if editor.isPyFile(): cap = self.debugServer.getClientCapabilities('Python') elif editor.isPy3File(): cap = self.debugServer.getClientCapabilities('Python3') elif editor.isRubyFile(): cap = self.debugServer.getClientCapabilities('Ruby') if not self.passive: self.runAct.setEnabled(cap & HasInterpreter) self.coverageAct.setEnabled(cap & HasCoverage) self.profileAct.setEnabled(cap & HasProfiler) self.debugAct.setEnabled(cap & HasDebugger) self.dbgSetBpActGrp.setEnabled(cap & HasDebugger) if editor.curLineHasBreakpoint(): self.dbgEditBpAct.setEnabled(True) else: self.dbgEditBpAct.setEnabled(False) if editor.hasBreakpoints(): self.dbgNextBpAct.setEnabled(True) self.dbgPrevBpAct.setEnabled(True) else: self.dbgNextBpAct.setEnabled(False) self.dbgPrevBpAct.setEnabled(False) else: self.runAct.setEnabled(False) self.coverageAct.setEnabled(False) self.profileAct.setEnabled(False) self.debugAct.setEnabled(False) self.dbgSetBpActGrp.setEnabled(False) def __cursorChanged(self, editor): """ Private slot handling the cursorChanged signal of the viewmanager. @param editor editor window """ if editor is None: return if editor.isPyFile() or editor.isPy3File() or editor.isRubyFile(): if editor.curLineHasBreakpoint(): self.dbgEditBpAct.setEnabled(True) else: self.dbgEditBpAct.setEnabled(False) if editor.hasBreakpoints(): self.dbgNextBpAct.setEnabled(True) self.dbgPrevBpAct.setEnabled(True) else: self.dbgNextBpAct.setEnabled(False) self.dbgPrevBpAct.setEnabled(False) def __projectOpened(self): """ Private slot to handle the projectOpened signal. """ self.projectOpen = True cap = self.debugServer.getClientCapabilities(\ self.project.pdata["PROGLANGUAGE"][0]) if not self.passive: self.debugProjectAct.setEnabled(cap & HasDebugger) self.runProjectAct.setEnabled(cap & HasInterpreter) self.profileProjectAct.setEnabled(cap & HasProfiler) self.coverageProjectAct.setEnabled(cap & HasCoverage) def __projectClosed(self): """ Private slot to handle the projectClosed signal. """ self.projectOpen = False self.runProjectAct.setEnabled(False) self.profileProjectAct.setEnabled(False) self.coverageProjectAct.setEnabled(False) self.debugProjectAct.setEnabled(False) if not self.editorOpen: self.restartAct.setEnabled(False) self.lastDebuggedFile = None self.lastStartAction = 0 def __projectSessionLoaded(self): """ Private slot to handle the projectSessionLoaded signal. """ fn = self.project.getMainScript(True) if fn is not None: self.lastStartAction = 2 self.lastDebuggedFile = fn self.restartAct.setEnabled(True) def shutdown(self): """ Public method to perform shutdown actions. """ # Just save the 10 most recent entries del self.argvHistory[10:] del self.wdHistory[10:] del self.envHistory[10:] Preferences.Prefs.settings.setValue('DebugInfo/ArgumentsHistory', QVariant(self.argvHistory)) Preferences.Prefs.settings.setValue('DebugInfo/WorkingDirectoryHistory', QVariant(self.wdHistory)) Preferences.Prefs.settings.setValue('DebugInfo/EnvironmentHistory', QVariant(self.envHistory)) Preferences.Prefs.settings.setValue('DebugInfo/Exceptions', QVariant(self.excList)) Preferences.Prefs.settings.setValue('DebugInfo/IgnoredExceptions', QVariant(self.excIgnoreList)) Preferences.Prefs.settings.setValue('DebugInfo/ReportExceptions', QVariant(self.exceptions)) Preferences.Prefs.settings.setValue('DebugInfo/AutoClearShell', QVariant(self.autoClearShell)) Preferences.Prefs.settings.setValue('DebugInfo/TracePython', QVariant(self.tracePython)) Preferences.Prefs.settings.setValue('DebugInfo/AutoContinue', QVariant(self.autoContinue)) Preferences.Prefs.settings.setValue('DebugInfo/ForkAutomatically', QVariant(self.forkAutomatically)) Preferences.Prefs.settings.setValue('DebugInfo/ForkIntoChild', QVariant(self.forkIntoChild)) def shutdownServer(self): """ Public method to shut down the debug server. This is needed to cleanly close the sockets on Win OS. @return always true """ self.debugServer.shutdownServer() return True def __resetUI(self): """ Private slot to reset the user interface. """ self.lastAction = -1 self.debugActGrp.setEnabled(False) self.debugActGrp2.setEnabled(False) if not self.passive: if self.editorOpen: editor = self.viewmanager.activeWindow() else: editor = None self.__checkActions(editor) self.debugProjectAct.setEnabled(self.projectOpen) self.runProjectAct.setEnabled(self.projectOpen) self.profileProjectAct.setEnabled(self.projectOpen) self.coverageProjectAct.setEnabled(self.projectOpen) if self.lastDebuggedFile is not None and \ (self.editorOpen or self.projectOpen): self.restartAct.setEnabled(True) else: self.restartAct.setEnabled(False) self.stopAct.setEnabled(False) self.emit(SIGNAL('resetUI')) def __clientLine(self, fn, line, forStack): """ Private method to handle a change to the current line. @param fn filename (string) @param line linenumber (int) @param forStack flag indicating this is for a stack dump (boolean) """ self.ui.raise_() self.ui.activateWindow() if self.ui.getViewProfile() != "debug": self.ui.setDebugProfile() self.viewmanager.setFileLine(fn, line) if not forStack: self.__getThreadList() self.__getClientVariables() def __clientExit(self, status): """ Private method to handle the debugged program terminating. @param status exit code of the debugged program (int) """ self.viewmanager.exit() self.__resetUI() if not Preferences.getDebugger("SuppressClientExit") or status != 0: if self.ui.currentProg is None: KQMessageBox.information(self.ui,Program, self.trUtf8('

    The program has terminated with an exit' ' status of %1.

    ').arg(status)) else: KQMessageBox.information(self.ui,Program, self.trUtf8('

    %1 has terminated with an exit' ' status of %2.

    ') .arg(Utilities.normabspath(self.ui.currentProg)) .arg(status)) else: if self.ui.currentProg is None: self.emit(SIGNAL("appendStdout"), self.trUtf8('The program has terminated with an exit' ' status of %1.\n').arg(status)) else: self.emit(SIGNAL("appendStdout"), self.trUtf8('"%1" has terminated with an exit' ' status of %2.\n') .arg(Utilities.normabspath(self.ui.currentProg)) .arg(status)) def __clientSyntaxError(self, message, filename, lineNo, characterNo): """ Private method to handle a syntax error in the debugged program. @param message message of the syntax error (string) @param filename translated filename of the syntax error position (string) @param lineNo line number of the syntax error position (integer) @param characterNo character number of the syntax error position (integer) """ self.__resetUI() self.ui.raise_() self.ui.activateWindow() if message is None: KQMessageBox.critical(self.ui,Program, self.trUtf8('The program being debugged contains an unspecified' ' syntax error.')) return self.viewmanager.setFileLine(filename, lineNo, True, True) KQMessageBox.critical(self.ui,Program, self.trUtf8('

    The file %1 contains the syntax error' ' %2 at line %3, character %4.

    ') .arg(filename) .arg(message) .arg(lineNo) .arg(characterNo)) def __clientException(self, exceptionType, exceptionMessage, stackTrace): """ Private method to handle an exception of the debugged program. @param exceptionType type of exception raised (string) @param exceptionMessage message given by the exception (string) @param stackTrace list of stack entries. """ self.ui.raise_() self.ui.activateWindow() QApplication.processEvents() if exceptionType is None: KQMessageBox.critical(self.ui,Program, self.trUtf8('An unhandled exception occured.' ' See the shell window for details.')) return if (self.exceptions and \ exceptionType not in self.excIgnoreList and \ (not len(self.excList) or \ (len(self.excList) and exceptionType in self.excList)))\ or exceptionType.startswith('unhandled'): if stackTrace: self.viewmanager.setFileLine(stackTrace[0][0], stackTrace[0][1], True) if Preferences.getDebugger("BreakAlways"): res = QMessageBox.Yes else: if stackTrace: if exceptionType.startswith('unhandled'): buttons = QMessageBox.StandardButtons(\ QMessageBox.No | \ QMessageBox.Yes) else: buttons = QMessageBox.StandardButtons(\ QMessageBox.No | \ QMessageBox.Yes | \ QMessageBox.Ignore) res = KQMessageBox.critical(self.ui, Program, self.trUtf8('

    The debugged program raised the exception' ' %1
    "%2"
    File: %3,' ' Line: %4

    Break here?

    ') .arg(exceptionType) .arg(Utilities.html_encode(exceptionMessage)) .arg(stackTrace[0][0]) .arg(stackTrace[0][1]), buttons, QMessageBox.No) else: res = KQMessageBox.critical(self.ui, Program, self.trUtf8('

    The debugged program raised the exception' ' %1
    "%2"

    ') .arg(exceptionType) .arg(Utilities.html_encode(exceptionMessage))) if res == QMessageBox.Yes: self.emit(SIGNAL('exceptionInterrupt')) stack = [] for fn, ln in stackTrace: stack.append((fn, ln, '')) self.emit(SIGNAL('clientStack'), stack) self.__getClientVariables() self.ui.setDebugProfile() return elif res == QMessageBox.Ignore: if exceptionType not in self.excIgnoreList: self.excIgnoreList.append(exceptionType) if self.lastAction != -1: if self.lastAction == 2: self.__specialContinue() else: self.debugActions[self.lastAction]() else: self.__continue() def __clientGone(self,unplanned): """ Private method to handle the disconnection of the debugger client. @param unplanned 1 if the client died, 0 otherwise """ self.__resetUI() if unplanned: KQMessageBox.information(self.ui,Program, self.trUtf8('The program being debugged has terminated unexpectedly.')) def __getThreadList(self): """ Private method to get the list of threads from the client. """ self.debugServer.remoteThreadList() def __clientThreadSet(self): """ Private method to handle a change of the client's current thread. """ self.debugServer.remoteClientVariables(0, self.localsVarFilter) def __getClientVariables(self): """ Private method to request the global and local variables. In the first step, the global variables are requested from the client. Once these have been received, the local variables are requested. This happens in the method '__clientVariables'. """ # get globals first self.debugServer.remoteClientVariables(1, self.globalsVarFilter) # the local variables are requested once we have received the globals def __clientVariables(self, scope, variables): """ Private method to write the clients variables to the user interface. @param scope scope of the variables (-1 = empty global, 1 = global, 0 = local) @param variables the list of variables from the client """ if scope > 0: self.debugViewer.showVariables(variables, True) if scope == 1: # now get the local variables self.debugServer.remoteClientVariables(0, self.localsVarFilter) elif scope == 0: self.debugViewer.showVariables(variables, False) elif scope == -1: vlist = [('None','','')] self.debugViewer.showVariables(vlist, False) if scope < 1: self.debugActGrp.setEnabled(True) self.debugActGrp2.setEnabled(True) def __clientVariable(self, scope, variables): """ Private method to write the contents of a clients classvariable to the user interface. @param scope scope of the variables (-1 = empty global, 1 = global, 0 = local) @param variables the list of members of a classvariable from the client """ if scope == 1: self.debugViewer.showVariable(variables, 1) elif scope == 0: self.debugViewer.showVariable(variables, 0) def __clientBreakConditionError(self, filename, lineno): """ Private method to handle a condition error of a breakpoint. @param filename filename of the breakpoint @param lineno linenumber of the breakpoint """ KQMessageBox.critical(None, self.trUtf8("Breakpoint Condition Error"), self.trUtf8("""

    The condition of the breakpoint %1, %2""" """ contains a syntax error.

    """)\ .arg(filename).arg(lineno)) model = self.debugServer.getBreakPointModel() index = model.getBreakPointIndex(filename, lineno) if not index.isValid(): return bp = model.getBreakPointByIndex(index) if not bp: return fn, line, cond, temp, enabled, count = bp[:6] dlg = EditBreakpointDialog((fn, line), (cond, temp, enabled, count), QStringList(), self.ui, modal = True) if dlg.exec_() == QDialog.Accepted: cond, temp, enabled, count = dlg.getData() model.setBreakPointByIndex(index, fn, line, (cond, temp, enabled, count)) def __clientWatchConditionError(self, cond): """ Public method to handle a expression error of a watch expression. Note: This can only happen for normal watch expressions @param cond expression of the watch expression (string or QString) """ KQMessageBox.critical(None, self.trUtf8("Watch Expression Error"), self.trUtf8("""

    The watch expression %1""" """ contains a syntax error.

    """)\ .arg(cond)) model = self.debugServer.getWatchPointModel() index = model.getWatchPointIndex(cond) if not index.isValid(): return wp = model.getWatchPointByIndex(index) if not wp: return cond, special, temp, enabled, count = wp[:5] dlg = EditWatchpointDialog(\ (QString(cond), temp, enabled, count, QString(special)), self) if dlg.exec_() == QDialog.Accepted: cond, temp, enabled, count, special = dlg.getData() # check for duplicates idx = self.__model.getWatchPointIndex(cond, special) duplicate = idx.isValid() and idx.internalPointer() != index.internalPointer() if duplicate: if special.isEmpty(): msg = self.trUtf8("""

    A watch expression '%1'""" """ already exists.

    """)\ .arg(Utilities.html_encode(unicode(cond))) else: msg = self.trUtf8("""

    A watch expression '%1'""" """ for the variable %2 already exists.

    """)\ .arg(special)\ .arg(Utilities.html_encode(unicode(cond))) KQMessageBox.warning(None, self.trUtf8("Watch expression already exists"), msg) model.deleteWatchPointByIndex(index) else: model.setWatchPointByIndex(index, unicode(cond), unicode(special), (temp, enabled, count)) def __configureVariablesFilters(self): """ Private slot for displaying the variables filter configuration dialog. """ result = self.dbgFilterDialog.exec_() if result == QDialog.Accepted: self.localsVarFilter, self.globalsVarFilter = \ self.dbgFilterDialog.getSelection() else: self.dbgFilterDialog.setSelection( self.localsVarFilter, self.globalsVarFilter) self.debugViewer.setVariablesFilter(self.globalsVarFilter, self.localsVarFilter) def __configureExceptionsFilter(self): """ Private slot for displaying the exception filter dialog. """ dlg = ExceptionsFilterDialog(self.excList, ignore = False) if dlg.exec_() == QDialog.Accepted: self.excList = dlg.getExceptionsList()[:] # keep a copy def __configureIgnoredExceptions(self): """ Private slot for displaying the ignored exceptions dialog. """ dlg = ExceptionsFilterDialog(self.excIgnoreList, ignore = True) if dlg.exec_() == QDialog.Accepted: self.excIgnoreList = dlg.getExceptionsList()[:] # keep a copy def __toggleBreakpoint(self): """ Private slot to handle the 'Set/Reset breakpoint' action. """ self.viewmanager.activeWindow().menuToggleBreakpoint() def __editBreakpoint(self): """ Private slot to handle the 'Edit breakpoint' action. """ self.viewmanager.activeWindow().menuEditBreakpoint() def __nextBreakpoint(self): """ Private slot to handle the 'Next breakpoint' action. """ self.viewmanager.activeWindow().menuNextBreakpoint() def __previousBreakpoint(self): """ Private slot to handle the 'Previous breakpoint' action. """ self.viewmanager.activeWindow().menuPreviousBreakpoint() def __clearBreakpoints(self): """ Private slot to handle the 'Clear breakpoints' action. """ self.debugServer.getBreakPointModel().deleteAll() def __showDebugMenu(self): """ Private method to set up the debug menu. """ bpCount = self.debugServer.getBreakPointModel().rowCount() self.menuBreakpointsAct.setEnabled(bpCount > 0) def __showBreakpointsMenu(self): """ Private method to handle the show breakpoints menu signal. """ self.breakpointsMenu.clear() model = self.debugServer.getBreakPointModel() for row in range(model.rowCount()): index = model.index(row, 0) filename, line, cond = model.getBreakPointByIndex(index)[:3] if not cond: formattedCond = "" else: formattedCond = " : %s" % unicode(cond)[:20] bpSuffix = " : %d%s" % (line, formattedCond) act = self.breakpointsMenu.addAction(\ "%s%s" % (\ Utilities.compactPath(\ filename, self.ui.maxMenuFilePathLen - len(bpSuffix)), bpSuffix)) act.setData(QVariant([QVariant(filename), QVariant(line)])) def __breakpointSelected(self, act): """ Private method to handle the breakpoint selected signal. @param act reference to the action that triggered (QAction) """ try: qvList = act.data().toPyObject() filename = unicode(qvList[0]) line = qvList[1] except AttributeError: qvList = act.data().toList() filename = unicode(qvList[0].toString()) line = qvList[1].toInt()[0] self.viewmanager.openSourceFile(filename, line) def __compileChangedProjectFiles(self): """ Private method to signal compilation of changed forms and resources is wanted. """ if Preferences.getProject("AutoCompileForms"): self.emit(SIGNAL('compileForms')) if Preferences.getProject("AutoCompileResources"): self.emit(SIGNAL('compileResources')) QApplication.processEvents() def __coverageScript(self): """ Private slot to handle the coverage of script action. """ self.__doCoverage(False) def __coverageProject(self): """ Private slot to handle the coverage of project action. """ self.__compileChangedProjectFiles() self.__doCoverage(True) def __doCoverage(self, runProject): """ Private method to handle the coverage actions. @param runProject flag indicating coverage of the current project (True) or script (false) """ self.__resetUI() doNotStart = False # Get the command line arguments, the working directory and the # exception reporting flag. if runProject: cap = self.trUtf8("Coverage of Project") else: cap = self.trUtf8("Coverage of Script") dlg = StartDialog(cap, self.argvHistory, self.wdHistory, self.envHistory, self.exceptions, self.ui, 2, autoClearShell = self.autoClearShell) if dlg.exec_() == QDialog.Accepted: argv, wd, env, exceptions, clearShell, clearHistories, console = dlg.getData() eraseCoverage = dlg.getCoverageData() if runProject: fn = self.project.getMainScript(1) if fn is None: KQMessageBox.critical(self.ui, self.trUtf8("Coverage of Project"), self.trUtf8("There is no main script defined for the" " current project. Aborting")) return if Preferences.getDebugger("Autosave") and \ not self.project.saveAllScripts(reportSyntaxErrors = True): doNotStart = True # save the info for later use self.project.setDbgInfo(argv, wd, env, exceptions, self.excList, self.excIgnoreList, clearShell) self.lastStartAction = 6 else: editor = self.viewmanager.activeWindow() if editor is None: return if not self.viewmanager.checkDirty(editor, Preferences.getDebugger("Autosave")) or \ editor.getFileName() is None: return fn = editor.getFileName() self.lastStartAction = 5 # save the filename for use by the restart method self.lastDebuggedFile = fn self.restartAct.setEnabled(True) # This moves any previous occurrence of these arguments to the head # of the list. self.setArgvHistory(argv, clearHistories) self.setWdHistory(wd, clearHistories) self.setEnvHistory(env, clearHistories) # Save the exception flags self.exceptions = exceptions # Save the erase coverage flag self.eraseCoverage = eraseCoverage # Save the clear interpreter flag self.autoClearShell = clearShell # Save the run in console flag self.runInConsole = console # Hide all error highlights self.viewmanager.unhighlight() if not doNotStart: if runProject and self.project.getProjectType() == "E4Plugin": argv.insert(0, '--plugin="%s" ' % fn) fn = os.path.join(getConfig('ericDir'), "eric4.py") # Ask the client to open the new program. self.debugServer.remoteCoverage(fn, argv, wd, env, autoClearShell = self.autoClearShell, erase = eraseCoverage, forProject = runProject, runInConsole = console) self.stopAct.setEnabled(True) def __profileScript(self): """ Private slot to handle the profile script action. """ self.__doProfile(False) def __profileProject(self): """ Private slot to handle the profile project action. """ self.__compileChangedProjectFiles() self.__doProfile(True) def __doProfile(self, runProject): """ Private method to handle the profile actions. @param runProject flag indicating profiling of the current project (True) or script (False) """ self.__resetUI() doNotStart = False # Get the command line arguments, the working directory and the # exception reporting flag. if runProject: cap = self.trUtf8("Profile of Project") else: cap = self.trUtf8("Profile of Script") dlg = StartDialog(cap, self.argvHistory, self.wdHistory, self.envHistory, self.exceptions, self.ui, 3, autoClearShell = self.autoClearShell) if dlg.exec_() == QDialog.Accepted: argv, wd, env, exceptions, clearShell, clearHistories, console = dlg.getData() eraseTimings = dlg.getProfilingData() if runProject: fn = self.project.getMainScript(1) if fn is None: KQMessageBox.critical(self.ui, self.trUtf8("Profile of Project"), self.trUtf8("There is no main script defined for the" " current project. Aborting")) return if Preferences.getDebugger("Autosave") and \ not self.project.saveAllScripts(reportSyntaxErrors = True): doNotStart = True # save the info for later use self.project.setDbgInfo(argv, wd, env, exceptions, self.excList, self.excIgnoreList, clearShell) self.lastStartAction = 8 else: editor = self.viewmanager.activeWindow() if editor is None: return if not self.viewmanager.checkDirty(editor, Preferences.getDebugger("Autosave")) or \ editor.getFileName() is None: return fn = editor.getFileName() self.lastStartAction = 7 # save the filename for use by the restart method self.lastDebuggedFile = fn self.restartAct.setEnabled(True) # This moves any previous occurrence of these arguments to the head # of the list. self.setArgvHistory(argv, clearHistories) self.setWdHistory(wd, clearHistories) self.setEnvHistory(env, clearHistories) # Save the exception flags self.exceptions = exceptions # Save the erase timing flag self.eraseTimings = eraseTimings # Save the clear interpreter flag self.autoClearShell = clearShell # Save the run in console flag self.runInConsole = console # Hide all error highlights self.viewmanager.unhighlight() if not doNotStart: if runProject and self.project.getProjectType() == "E4Plugin": argv.insert(0, '--plugin="%s" ' % fn) fn = os.path.join(getConfig('ericDir'), "eric4.py") # Ask the client to open the new program. self.debugServer.remoteProfile(fn, argv, wd, env, autoClearShell = self.autoClearShell, erase = eraseTimings, forProject = runProject, runInConsole = console) self.stopAct.setEnabled(True) def __runScript(self): """ Private slot to handle the run script action. """ self.__doRun(False) def __runProject(self): """ Private slot to handle the run project action. """ self.__compileChangedProjectFiles() self.__doRun(True) def __doRun(self, runProject): """ Private method to handle the run actions. @param runProject flag indicating running the current project (True) or script (False) """ self.__resetUI() doNotStart = False # Get the command line arguments, the working directory and the # exception reporting flag. if runProject: cap = self.trUtf8("Run Project") else: cap = self.trUtf8("Run Script") dlg = StartDialog(cap, self.argvHistory, self.wdHistory, self.envHistory, self.exceptions, self.ui, 1, autoClearShell = self.autoClearShell, autoFork = self.forkAutomatically, forkChild = self.forkIntoChild) if dlg.exec_() == QDialog.Accepted: argv, wd, env, exceptions, clearShell, clearHistories, console = dlg.getData() forkAutomatically, forkIntoChild = dlg.getRunData() if runProject: fn = self.project.getMainScript(1) if fn is None: KQMessageBox.critical(self.ui, self.trUtf8("Run Project"), self.trUtf8("There is no main script defined for the" " current project. Aborting")) return if Preferences.getDebugger("Autosave") and \ not self.project.saveAllScripts(reportSyntaxErrors = True): doNotStart = True # save the info for later use self.project.setDbgInfo(argv, wd, env, exceptions, self.excList, self.excIgnoreList, clearShell) self.lastStartAction = 4 else: editor = self.viewmanager.activeWindow() if editor is None: return if not self.viewmanager.checkDirty(editor, Preferences.getDebugger("Autosave")) or \ editor.getFileName() is None: return fn = editor.getFileName() self.lastStartAction = 3 # save the filename for use by the restart method self.lastDebuggedFile = fn self.restartAct.setEnabled(True) # This moves any previous occurrence of these arguments to the head # of the list. self.setArgvHistory(argv, clearHistories) self.setWdHistory(wd, clearHistories) self.setEnvHistory(env, clearHistories) # Save the exception flags self.exceptions = exceptions # Save the clear interpreter flag self.autoClearShell = clearShell # Save the run in console flag self.runInConsole = console # Save the forking flags self.forkAutomatically = forkAutomatically self.forkIntoChild = forkIntoChild # Hide all error highlights self.viewmanager.unhighlight() if not doNotStart: if runProject and self.project.getProjectType() == "E4Plugin": argv.insert(0, '--plugin="%s" ' % fn) fn = os.path.join(getConfig('ericDir'), "eric4.py") # Ask the client to open the new program. self.debugServer.remoteRun(fn, argv, wd, env, autoClearShell = self.autoClearShell, forProject = runProject, runInConsole = console, autoFork = forkAutomatically, forkChild = forkIntoChild) self.stopAct.setEnabled(True) def __debugScript(self): """ Private slot to handle the debug script action. """ self.__doDebug(False) def __debugProject(self): """ Private slot to handle the debug project action. """ self.__compileChangedProjectFiles() self.__doDebug(True) def __doDebug(self, debugProject): """ Private method to handle the debug actions. @param debugProject flag indicating debugging the current project (True) or script (False) """ self.__resetUI() doNotStart = False # Get the command line arguments, the working directory and the # exception reporting flag. if debugProject: cap = self.trUtf8("Debug Project") else: cap = self.trUtf8("Debug Script") dlg = StartDialog(cap, self.argvHistory, self.wdHistory, self.envHistory, self.exceptions, self.ui, 0, tracePython = self.tracePython, autoClearShell = self.autoClearShell, autoContinue = self.autoContinue, autoFork = self.forkAutomatically, forkChild = self.forkIntoChild) if dlg.exec_() == QDialog.Accepted: argv, wd, env, exceptions, clearShell, clearHistories, console = dlg.getData() tracePython, autoContinue, forkAutomatically, forkIntoChild = \ dlg.getDebugData() if debugProject: fn = self.project.getMainScript(True) if fn is None: KQMessageBox.critical(self.ui, self.trUtf8("Debug Project"), self.trUtf8("There is no main script defined for the" " current project. No debugging possible.")) return if Preferences.getDebugger("Autosave") and \ not self.project.saveAllScripts(reportSyntaxErrors = True): doNotStart = True # save the info for later use self.project.setDbgInfo(argv, wd, env, exceptions, self.excList, self.excIgnoreList, clearShell, tracePython = tracePython, autoContinue = self.autoContinue) self.lastStartAction = 2 else: editor = self.viewmanager.activeWindow() if editor is None: return if not self.viewmanager.checkDirty(editor, Preferences.getDebugger("Autosave")) or \ editor.getFileName() is None: return fn = editor.getFileName() self.lastStartAction = 1 # save the filename for use by the restart method self.lastDebuggedFile = fn self.restartAct.setEnabled(True) # This moves any previous occurrence of these arguments to the head # of the list. self.setArgvHistory(argv, clearHistories) self.setWdHistory(wd, clearHistories) self.setEnvHistory(env, clearHistories) # Save the exception flags self.exceptions = exceptions # Save the tracePython flag self.tracePython = tracePython # Save the clear interpreter flag self.autoClearShell = clearShell # Save the run in console flag self.runInConsole = console # Save the auto continue flag self.autoContinue = autoContinue # Save the forking flags self.forkAutomatically = forkAutomatically self.forkIntoChild = forkIntoChild # Hide all error highlights self.viewmanager.unhighlight() if not doNotStart: if debugProject and self.project.getProjectType() == "E4Plugin": argv.insert(0, '--plugin="%s" ' % fn) fn = os.path.join(getConfig('ericDir'), "eric4.py") tracePython = True # override flag because it must be true # Ask the client to open the new program. self.debugServer.remoteLoad(fn, argv, wd, env, autoClearShell = self.autoClearShell, tracePython = tracePython, autoContinue = autoContinue, forProject = debugProject, runInConsole = console, autoFork = forkAutomatically, forkChild = forkIntoChild) # Signal that we have started a debugging session self.emit(SIGNAL('debuggingStarted'), fn) self.stopAct.setEnabled(True) def __doRestart(self): """ Private slot to handle the restart action to restart the last debugged file. """ self.__resetUI() doNotStart = False # first save any changes if self.lastStartAction in [1, 3, 5, 7, 9]: editor = self.viewmanager.getOpenEditor(self.lastDebuggedFile) if editor and \ not self.viewmanager.checkDirty(editor, Preferences.getDebugger("Autosave")): return forProject = False elif self.lastStartAction in [2, 4, 6, 8, 10]: if Preferences.getDebugger("Autosave") and \ not self.project.saveAllScripts(reportSyntaxErrors = True): doNotStart = True self.__compileChangedProjectFiles() forProject = True else: return # should not happen # get the saved stuff wd = self.wdHistory[0] argv = self.argvHistory[0] fn = self.lastDebuggedFile env = self.envHistory[0] # Hide all error highlights self.viewmanager.unhighlight() if not doNotStart: if forProject and self.project.getProjectType() == "E4Plugin": argv.insert(0, '--plugin="%s" ' % fn) fn = os.path.join(getConfig('ericDir'), "eric4.py") if self.lastStartAction in [1, 2]: # Ask the client to debug the new program. self.debugServer.remoteLoad(fn, argv, wd, env, autoClearShell = self.autoClearShell, tracePython = self.tracePython, autoContinue = self.autoContinue, forProject = forProject, runInConsole = self.runInConsole, autoFork = self.forkAutomatically, forkChild = self.forkIntoChild) # Signal that we have started a debugging session self.emit(SIGNAL('debuggingStarted'), fn) elif self.lastStartAction in [3, 4]: # Ask the client to run the new program. self.debugServer.remoteRun(fn, argv, wd, env, autoClearShell = self.autoClearShell, forProject = forProject, runInConsole = self.runInConsole, autoFork = self.forkAutomatically, forkChild = self.forkIntoChild) elif self.lastStartAction in [5, 6]: # Ask the client to coverage run the new program. self.debugServer.remoteCoverage(fn, argv, wd, env, autoClearShell = self.autoClearShell, erase = self.eraseCoverage, forProject = forProject, runInConsole = self.runInConsole) elif self.lastStartAction in [7, 8]: # Ask the client to profile run the new program. self.debugServer.remoteProfile(fn, argv, wd, env, autoClearShell = self.autoClearShell, erase = self.eraseTimings, forProject = forProject, runInConsole = self.runInConsole) self.stopAct.setEnabled(True) def __stopScript(self): """ Private slot to stop the running script. """ self.debugServer.startClient(False) def __passiveDebugStarted(self, fn, exc): """ Private slot to handle a passive debug session start. @param fn filename of the debugged script @param exc flag to enable exception reporting of the IDE (boolean) """ # Hide all error highlights self.viewmanager.unhighlight() # Set filename of script being debugged self.ui.currentProg = fn # Set exception reporting self.setExceptionReporting(exc) # Signal that we have started a debugging session self.emit(SIGNAL('debuggingStarted'), fn) def __continue(self): """ Private method to handle the Continue action. """ self.lastAction = 0 self.__enterRemote() self.debugServer.remoteContinue() def __specialContinue(self): """ Private method to handle the Special Continue action. """ self.lastAction = 2 self.__enterRemote() self.debugServer.remoteContinue(1) def __step(self): """ Private method to handle the Step action. """ self.lastAction = 1 self.__enterRemote() self.debugServer.remoteStep() def __stepOver(self): """ Private method to handle the Step Over action. """ self.lastAction = 2 self.__enterRemote() self.debugServer.remoteStepOver() def __stepOut(self): """ Private method to handle the Step Out action. """ self.lastAction = 3 self.__enterRemote() self.debugServer.remoteStepOut() def __stepQuit(self): """ Private method to handle the Step Quit action. """ self.lastAction = 4 self.__enterRemote() self.debugServer.remoteStepQuit() self.__resetUI() def __runToCursor(self): """ Private method to handle the Run to Cursor action. """ self.lastAction = 0 aw = self.viewmanager.activeWindow() line = aw.getCursorPosition()[0] + 1 self.__enterRemote() self.debugServer.remoteBreakpoint(aw.getFileName(), line, 1, None, 1) self.debugServer.remoteContinue() def __eval(self): """ Private method to handle the Eval action. """ # Get the command line arguments. if len(self.evalHistory) > 0: curr = 0 else: curr = -1 arg, ok = KQInputDialog.getItem(\ self.ui, self.trUtf8("Evaluate"), self.trUtf8("Enter the statement to evaluate"), self.evalHistory, curr, True) if ok: if arg.isNull(): return # This moves any previous occurrence of this expression to the head # of the list. self.evalHistory.removeAll(arg) self.evalHistory.prepend(arg) self.debugServer.remoteEval(arg) def __exec(self): """ Private method to handle the Exec action. """ # Get the command line arguments. if len(self.execHistory) > 0: curr = 0 else: curr = -1 stmt, ok = KQInputDialog.getItem(\ self.ui, self.trUtf8("Execute"), self.trUtf8("Enter the statement to execute"), self.execHistory, curr, True) if ok: if stmt.isNull(): return # This moves any previous occurrence of this statement to the head # of the list. self.execHistory.removeAll(stmt) self.execHistory.prepend(stmt) self.debugServer.remoteExec(stmt) def __enterRemote(self): """ Private method to update the user interface. This method is called just prior to executing some of the program being debugged. """ # Disable further debug commands from the user. self.debugActGrp.setEnabled(False) self.debugActGrp2.setEnabled(False) self.viewmanager.unhighlight(True) def getActions(self): """ Public method to get a list of all actions. @return list of all actions (list of E4Action) """ return self.actions[:] eric4-4.5.18/eric/Debugger/PaxHeaders.8617/BreakPointViewer.py0000644000175000001440000000013212261012651022023 xustar000000000000000030 mtime=1388582313.084090831 30 atime=1389081083.811724385 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Debugger/BreakPointViewer.py0000644000175000001440000003613312261012651021563 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2005 - 2014 Detlev Offenbach # """ Module implementing the Breakpoint viewer widget. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt.KQApplication import e4App from EditBreakpointDialog import EditBreakpointDialog class BreakPointViewer(QTreeView): """ Class implementing the Breakpoint viewer widget. Breakpoints will be shown with all their details. They can be modified through the context menu of this widget. @signal sourceFile(string, int) emitted to show the source of a breakpoint """ def __init__(self, parent = None): """ Constructor @param parent the parent (QWidget) """ QTreeView.__init__(self, parent) self.setObjectName("BreakPointViewer") self.__model = None self.setItemsExpandable(False) self.setRootIsDecorated(False) self.setAlternatingRowColors(True) self.setSelectionMode(QAbstractItemView.ExtendedSelection) self.setSelectionBehavior(QAbstractItemView.SelectRows) self.setWindowTitle(self.trUtf8("Breakpoints")) self.setContextMenuPolicy(Qt.CustomContextMenu) self.connect(self,SIGNAL('customContextMenuRequested(const QPoint &)'), self.__showContextMenu) self.connect(self,SIGNAL('doubleClicked(const QModelIndex &)'), self.__doubleClicked) self.__createPopupMenus() self.condHistory = QStringList() self.fnHistory = QStringList() self.fnHistory.append('') def setModel(self, model): """ Public slot to set the breakpoint model. @param reference to the breakpoint model (BreakPointModel) """ self.__model = model self.sortingModel = QSortFilterProxyModel() self.sortingModel.setSourceModel(self.__model) QTreeView.setModel(self, self.sortingModel) header = self.header() header.setSortIndicator(0, Qt.AscendingOrder) header.setSortIndicatorShown(True) header.setClickable(True) self.setSortingEnabled(True) self.__layoutDisplay() def __layoutDisplay(self): """ Private slot to perform a layout operation. """ self.__resizeColumns() self.__resort() def __resizeColumns(self): """ Private slot to resize the view when items get added, edited or deleted. """ self.header().resizeSections(QHeaderView.ResizeToContents) self.header().setStretchLastSection(True) def __resort(self): """ Private slot to resort the tree. """ self.model().sort(self.header().sortIndicatorSection(), self.header().sortIndicatorOrder()) def __toSourceIndex(self, index): """ Private slot to convert an index to a source index. @param index index to be converted (QModelIndex) """ return self.sortingModel.mapToSource(index) def __fromSourceIndex(self, sindex): """ Private slot to convert a source index to an index. @param sindex source index to be converted (QModelIndex) """ return self.sortingModel.mapFromSource(sindex) def __setRowSelected(self, index, selected = True): """ Private slot to select a complete row. @param index index determining the row to be selected (QModelIndex) @param selected flag indicating the action (bool) """ if not index.isValid(): return if selected: flags = QItemSelectionModel.SelectionFlags(\ QItemSelectionModel.ClearAndSelect | QItemSelectionModel.Rows) else: flags = QItemSelectionModel.SelectionFlags(\ QItemSelectionModel.Deselect | QItemSelectionModel.Rows) self.selectionModel().select(index, flags) def __createPopupMenus(self): """ Private method to generate the popup menus. """ self.menu = QMenu() self.menu.addAction(self.trUtf8("Add"), self.__addBreak) self.menu.addAction(self.trUtf8("Edit..."), self.__editBreak) self.menu.addSeparator() self.menu.addAction(self.trUtf8("Enable"), self.__enableBreak) self.menu.addAction(self.trUtf8("Enable all"), self.__enableAllBreaks) self.menu.addSeparator() self.menu.addAction(self.trUtf8("Disable"), self.__disableBreak) self.menu.addAction(self.trUtf8("Disable all"), self.__disableAllBreaks) self.menu.addSeparator() self.menu.addAction(self.trUtf8("Delete"), self.__deleteBreak) self.menu.addAction(self.trUtf8("Delete all"), self.__deleteAllBreaks) self.menu.addSeparator() self.menu.addAction(self.trUtf8("Goto"), self.__showSource) self.menu.addSeparator() self.menu.addAction(self.trUtf8("Configure..."), self.__configure) self.backMenuActions = {} self.backMenu = QMenu() self.backMenu.addAction(self.trUtf8("Add"), self.__addBreak) self.backMenuActions["EnableAll"] = \ self.backMenu.addAction(self.trUtf8("Enable all"), self.__enableAllBreaks) self.backMenuActions["DisableAll"] = \ self.backMenu.addAction(self.trUtf8("Disable all"), self.__disableAllBreaks) self.backMenuActions["DeleteAll"] = \ self.backMenu.addAction(self.trUtf8("Delete all"), self.__deleteAllBreaks) self.connect(self.backMenu, SIGNAL('aboutToShow()'), self.__showBackMenu) self.backMenu.addSeparator() self.backMenu.addAction(self.trUtf8("Configure..."), self.__configure) self.multiMenu = QMenu() self.multiMenu.addAction(self.trUtf8("Add"), self.__addBreak) self.multiMenu.addSeparator() self.multiMenu.addAction(self.trUtf8("Enable selected"), self.__enableSelectedBreaks) self.multiMenu.addAction(self.trUtf8("Enable all"), self.__enableAllBreaks) self.multiMenu.addSeparator() self.multiMenu.addAction(self.trUtf8("Disable selected"), self.__disableSelectedBreaks) self.multiMenu.addAction(self.trUtf8("Disable all"), self.__disableAllBreaks) self.multiMenu.addSeparator() self.multiMenu.addAction(self.trUtf8("Delete selected"), self.__deleteSelectedBreaks) self.multiMenu.addAction(self.trUtf8("Delete all"), self.__deleteAllBreaks) self.multiMenu.addSeparator() self.multiMenu.addAction(self.trUtf8("Configure..."), self.__configure) def __showContextMenu(self, coord): """ Private slot to show the context menu. @param coord the position of the mouse pointer (QPoint) """ cnt = self.__getSelectedItemsCount() if cnt <= 1: index = self.indexAt(coord) if index.isValid(): cnt = 1 self.__setRowSelected(index) coord = self.mapToGlobal(coord) if cnt > 1: self.multiMenu.popup(coord) elif cnt == 1: self.menu.popup(coord) else: self.backMenu.popup(coord) def __clearSelection(self): """ Private slot to clear the selection. """ for index in self.selectedIndexes(): self.__setRowSelected(index, False) def __addBreak(self): """ Private slot to handle the add breakpoint context menu entry. """ dlg = EditBreakpointDialog((self.fnHistory[0], None), None, self.condHistory, self, modal = 1, addMode = 1, filenameHistory = self.fnHistory) if dlg.exec_() == QDialog.Accepted: fn, line, cond, temp, enabled, count = dlg.getAddData() if fn is not None: self.fnHistory.removeAll(fn) self.fnHistory.prepend(fn) if not cond.isEmpty(): self.condHistory.removeAll(cond) self.condHistory.prepend(cond) self.__model.addBreakPoint(fn, line, (unicode(cond), temp, enabled, count)) self.__resizeColumns() self.__resort() def __doubleClicked(self, index): """ Private slot to handle the double clicked signal. @param index index of the entry that was double clicked (QModelIndex) """ if index.isValid(): self.__editBreakpoint(index) def __editBreak(self): """ Private slot to handle the edit breakpoint context menu entry. """ index = self.currentIndex() if index.isValid(): self.__editBreakpoint(index) def __editBreakpoint(self, index): """ Private slot to edit a breakpoint. @param index index of breakpoint to be edited (QModelIndex) """ sindex = self.__toSourceIndex(index) if sindex.isValid(): bp = self.__model.getBreakPointByIndex(sindex) if not bp: return fn, line, cond, temp, enabled, count = bp[:6] dlg = EditBreakpointDialog((fn, line), (cond, temp, enabled, count), self.condHistory, self, modal = True) if dlg.exec_() == QDialog.Accepted: cond, temp, enabled, count = dlg.getData() if not cond.isEmpty(): self.condHistory.removeAll(cond) self.condHistory.prepend(cond) self.__model.setBreakPointByIndex(sindex, fn, line, (unicode(cond), temp, enabled, count)) self.__resizeColumns() self.__resort() def __setBpEnabled(self, index, enabled): """ Private method to set the enabled status of a breakpoint. @param index index of breakpoint to be enabled/disabled (QModelIndex) @param enabled flag indicating the enabled status to be set (boolean) """ sindex = self.__toSourceIndex(index) if sindex.isValid(): self.__model.setBreakPointEnabledByIndex(sindex, enabled) def __enableBreak(self): """ Private slot to handle the enable breakpoint context menu entry. """ index = self.currentIndex() self.__setBpEnabled(index, True) self.__resizeColumns() self.__resort() def __enableAllBreaks(self): """ Private slot to handle the enable all breakpoints context menu entry. """ index = self.model().index(0, 0) while index.isValid(): self.__setBpEnabled(index, True) index = self.indexBelow(index) self.__resizeColumns() self.__resort() def __enableSelectedBreaks(self): """ Private slot to handle the enable selected breakpoints context menu entry. """ for index in self.selectedIndexes(): if index.column() == 0: self.__setBpEnabled(index, True) self.__resizeColumns() self.__resort() def __disableBreak(self): """ Private slot to handle the disable breakpoint context menu entry. """ index = self.currentIndex() self.__setBpEnabled(index, False) self.__resizeColumns() self.__resort() def __disableAllBreaks(self): """ Private slot to handle the disable all breakpoints context menu entry. """ index = self.model().index(0, 0) while index.isValid(): self.__setBpEnabled(index, False) index = self.indexBelow(index) self.__resizeColumns() self.__resort() def __disableSelectedBreaks(self): """ Private slot to handle the disable selected breakpoints context menu entry. """ for index in self.selectedIndexes(): if index.column() == 0: self.__setBpEnabled(index, False) self.__resizeColumns() self.__resort() def __deleteBreak(self): """ Private slot to handle the delete breakpoint context menu entry. """ index = self.currentIndex() sindex = self.__toSourceIndex(index) if sindex.isValid(): self.__model.deleteBreakPointByIndex(sindex) def __deleteAllBreaks(self): """ Private slot to handle the delete all breakpoints context menu entry. """ self.__model.deleteAll() def __deleteSelectedBreaks(self): """ Private slot to handle the delete selected breakpoints context menu entry. """ idxList = [] for index in self.selectedIndexes(): sindex = self.__toSourceIndex(index) if sindex.isValid() and index.column() == 0: idxList.append(sindex) self.__model.deleteBreakPoints(idxList) def __showSource(self): """ Private slot to handle the goto context menu entry. """ index = self.currentIndex() sindex = self.__toSourceIndex(index) bp = self.__model.getBreakPointByIndex(sindex) if not bp: return fn, line = bp[:2] self.emit(SIGNAL("sourceFile"), fn, line) def highlightBreakpoint(self, fn, lineno): """ Public slot to handle the clientLine signal. @param fn filename of the breakpoint (QString) @param lineno line number of the breakpoint (integer) """ sindex = self.__model.getBreakPointIndex(fn, lineno) if sindex.isValid(): return index = self.__fromSourceIndex(sindex) if index.isValid(): self.__clearSelection() self.__setRowSelected(index, True) def handleResetUI(self): """ Public slot to reset the breakpoint viewer. """ self.__clearSelection() def __showBackMenu(self): """ Private slot to handle the aboutToShow signal of the background menu. """ if self.model().rowCount() == 0: self.backMenuActions["EnableAll"].setEnabled(False) self.backMenuActions["DisableAll"].setEnabled(False) self.backMenuActions["DeleteAll"].setEnabled(False) else: self.backMenuActions["EnableAll"].setEnabled(True) self.backMenuActions["DisableAll"].setEnabled(True) self.backMenuActions["DeleteAll"].setEnabled(True) def __getSelectedItemsCount(self): """ Private method to get the count of items selected. @return count of items selected (integer) """ count = len(self.selectedIndexes()) / (self.__model.columnCount()-1) # column count is 1 greater than selectable return count def __configure(self): """ Private method to open the configuration dialog. """ e4App().getObject("UserInterface").showPreferences("debuggerGeneralPage") eric4-4.5.18/eric/Debugger/PaxHeaders.8617/StartProfileDialog.ui0000644000175000001440000000007411466563566022361 xustar000000000000000030 atime=1389081083.827724385 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Debugger/StartProfileDialog.ui0000644000175000001440000002212611466563566022111 0ustar00detlevusers00000000000000 StartProfileDialog 0 0 488 183 Start profiling true Command&line: cmdlineCombo 0 0 Enter the commandline parameters <b>Commandline</b> <p>Enter the commandline parameters in this field.</p> true QComboBox::InsertAtTop QComboBox::AdjustToMinimumContentsLengthWithIcon true false &Working directory: workdirCombo 0 0 Enter the working directory <b>Working directory</b> <p>Enter the working directory of the application to be debugged. Leave it empty to set the working directory to the executable directory.</p> true QComboBox::InsertAtTop QComboBox::AdjustToMinimumContentsLengthWithIcon true false Select directory using a directory selection dialog <b>Select directory</b> <p>Select the working directory via a directory selection dialog.</p> ... &Environment: environmentCombo 0 0 Enter the environment variables to be set. <b>Environment</b> <p>Enter the environment variables to be set for the program. The individual settings must be separated by whitespace and be given in the form 'var=value'. In order to add to an environment variable, enter it in the form 'var+=value'.</p> <p>Example: var1=1 var2="hello world" var3+=":/tmp"</p> true QComboBox::InsertAtTop QComboBox::AdjustToMinimumContentsLengthWithIcon true false Uncheck to disable exception reporting <b>Report exceptions</b> <p>Uncheck this in order to disable exception reporting.</p> Report &exceptions Alt+E true Select to clear the display of the interpreter window <b>Clear interpreter window</b><p>This clears the display of the interpreter window before starting the debug client.</p> Clear &interpreter window true Select to start the debugger in a console window <b>Start in console</b> <p>Select to start the debugger in a console window. The console command has to be configured on the Debugger-&gt;General page</p> Start in console Select this to erase the collected timing data <b>Erase timing data</b> <p>Select this to erase the collected timing data before the next profiling run.</p> Erase &timing data Alt+C Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok qPixmapFromMimeSource cmdlineCombo workdirCombo dirButton environmentCombo exceptionCheckBox clearShellCheckBox consoleCheckBox eraseCheckBox buttonBox buttonBox accepted() StartProfileDialog accept() 20 150 23 173 buttonBox rejected() StartProfileDialog reject() 116 154 116 171 eric4-4.5.18/eric/Debugger/PaxHeaders.8617/WatchPointViewer.py0000644000175000001440000000013212261012651022045 xustar000000000000000030 mtime=1388582313.087090869 30 atime=1389081083.827724385 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Debugger/WatchPointViewer.py0000644000175000001440000003677112261012651021615 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2005 - 2014 Detlev Offenbach # """ Module implementing the watch expression viewer widget. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQMessageBox from KdeQt.KQApplication import e4App from EditWatchpointDialog import EditWatchpointDialog import Utilities class WatchPointViewer(QTreeView): """ Class implementing the watch expression viewer widget. Watch expressions will be shown with all their details. They can be modified through the context menu of this widget. """ def __init__(self, parent = None): """ Constructor @param parent the parent (QWidget) """ QTreeView.__init__(self,parent) self.setObjectName("WatchExpressionViewer") self.__model = None self.setItemsExpandable(False) self.setRootIsDecorated(False) self.setAlternatingRowColors(True) self.setSelectionMode(QAbstractItemView.ExtendedSelection) self.setSelectionBehavior(QAbstractItemView.SelectRows) self.setWindowTitle(self.trUtf8("Watchpoints")) self.setContextMenuPolicy(Qt.CustomContextMenu) self.connect(self,SIGNAL('customContextMenuRequested(const QPoint &)'), self.__showContextMenu) self.connect(self,SIGNAL('doubleClicked(const QModelIndex &)'), self.__doubleClicked) self.__createPopupMenus() def setModel(self, model): """ Public slot to set the watch expression model. @param reference to the watch expression model (WatchPointModel) """ self.__model = model self.sortingModel = QSortFilterProxyModel() self.sortingModel.setSourceModel(self.__model) QTreeView.setModel(self, self.sortingModel) header = self.header() header.setSortIndicator(0, Qt.AscendingOrder) header.setSortIndicatorShown(True) header.setClickable(True) self.setSortingEnabled(True) self.__layoutDisplay() def __layoutDisplay(self): """ Private slot to perform a layout operation. """ self.__resizeColumns() self.__resort() def __resizeColumns(self): """ Private slot to resize the view when items get added, edited or deleted. """ self.header().resizeSections(QHeaderView.ResizeToContents) self.header().setStretchLastSection(True) def __resort(self): """ Private slot to resort the tree. """ self.model().sort(self.header().sortIndicatorSection(), self.header().sortIndicatorOrder()) def __toSourceIndex(self, index): """ Private slot to convert an index to a source index. @param index index to be converted (QModelIndex) """ return self.sortingModel.mapToSource(index) def __fromSourceIndex(self, sindex): """ Private slot to convert a source index to an index. @param sindex source index to be converted (QModelIndex) """ return self.sortingModel.mapFromSource(sindex) def __setRowSelected(self, index, selected = True): """ Private slot to select a complete row. @param index index determining the row to be selected (QModelIndex) @param selected flag indicating the action (bool) """ if not index.isValid(): return if selected: flags = QItemSelectionModel.SelectionFlags(\ QItemSelectionModel.ClearAndSelect | QItemSelectionModel.Rows) else: flags = QItemSelectionModel.SelectionFlags(\ QItemSelectionModel.Deselect | QItemSelectionModel.Rows) self.selectionModel().select(index, flags) def __createPopupMenus(self): """ Private method to generate the popup menus. """ self.menu = QMenu() self.menu.addAction(self.trUtf8("Add"), self.__addWatchPoint) self.menu.addAction(self.trUtf8("Edit..."), self.__editWatchPoint) self.menu.addSeparator() self.menu.addAction(self.trUtf8("Enable"), self.__enableWatchPoint) self.menu.addAction(self.trUtf8("Enable all"), self.__enableAllWatchPoints) self.menu.addSeparator() self.menu.addAction(self.trUtf8("Disable"), self.__disableWatchPoint) self.menu.addAction(self.trUtf8("Disable all"), self.__disableAllWatchPoints) self.menu.addSeparator() self.menu.addAction(self.trUtf8("Delete"), self.__deleteWatchPoint) self.menu.addAction(self.trUtf8("Delete all"), self.__deleteAllWatchPoints) self.menu.addSeparator() self.menu.addAction(self.trUtf8("Configure..."), self.__configure) self.backMenuActions = {} self.backMenu = QMenu() self.backMenu.addAction(self.trUtf8("Add"), self.__addWatchPoint) self.backMenuActions["EnableAll"] = \ self.backMenu.addAction(self.trUtf8("Enable all"), self.__enableAllWatchPoints) self.backMenuActions["DisableAll"] = \ self.backMenu.addAction(self.trUtf8("Disable all"), self.__disableAllWatchPoints) self.backMenuActions["DeleteAll"] = \ self.backMenu.addAction(self.trUtf8("Delete all"), self.__deleteAllWatchPoints) self.backMenu.addSeparator() self.backMenu.addAction(self.trUtf8("Configure..."), self.__configure) self.connect(self.backMenu, SIGNAL('aboutToShow()'), self.__showBackMenu) self.multiMenu = QMenu() self.multiMenu.addAction(self.trUtf8("Add"), self.__addWatchPoint) self.multiMenu.addSeparator() self.multiMenu.addAction(self.trUtf8("Enable selected"), self.__enableSelectedWatchPoints) self.multiMenu.addAction(self.trUtf8("Enable all"), self.__enableAllWatchPoints) self.multiMenu.addSeparator() self.multiMenu.addAction(self.trUtf8("Disable selected"), self.__disableSelectedWatchPoints) self.multiMenu.addAction(self.trUtf8("Disable all"), self.__disableAllWatchPoints) self.multiMenu.addSeparator() self.multiMenu.addAction(self.trUtf8("Delete selected"), self.__deleteSelectedWatchPoints) self.multiMenu.addAction(self.trUtf8("Delete all"), self.__deleteAllWatchPoints) self.multiMenu.addSeparator() self.multiMenu.addAction(self.trUtf8("Configure..."), self.__configure) def __showContextMenu(self, coord): """ Private slot to show the context menu. @param coord the position of the mouse pointer (QPoint) """ cnt = self.__getSelectedItemsCount() if cnt <= 1: index = self.indexAt(coord) if index.isValid(): cnt = 1 self.__setRowSelected(index) coord = self.mapToGlobal(coord) if cnt > 1: self.multiMenu.popup(coord) elif cnt == 1: self.menu.popup(coord) else: self.backMenu.popup(coord) def __clearSelection(self): """ Private slot to clear the selection. """ for index in self.selectedIndexes(): self.__setRowSelected(index, False) def __findDuplicates(self, cond, special, showMessage = False, index = QModelIndex()): """ Private method to check, if an entry already exists. @param cond condition to check (string or QString) @param special special condition to check (string or QString) @param showMessage flag indicating a message should be shown, if a duplicate entry is found (boolean) @param index index that should not be considered duplicate (QModelIndex) @return flag indicating a duplicate entry (boolean) """ cond = unicode(cond) special = unicode(special) idx = self.__model.getWatchPointIndex(cond, special) duplicate = idx.isValid() and idx.internalPointer() != index.internalPointer() if showMessage and duplicate: if not special: msg = self.trUtf8("""

    A watch expression '%1'""" """ already exists.

    """)\ .arg(Utilities.html_encode(unicode(cond))) else: msg = self.trUtf8("""

    A watch expression '%1'""" """ for the variable %2 already exists.

    """)\ .arg(special)\ .arg(Utilities.html_encode(unicode(cond))) KQMessageBox.warning(None, self.trUtf8("Watch expression already exists"), msg) return duplicate def __clearSelection(self): """ Private slot to clear the selection. """ for index in self.selectedIndexes(): self.__setRowSelected(index, False) def __addWatchPoint(self): """ Private slot to handle the add watch expression context menu entry. """ dlg = EditWatchpointDialog((QString(""), False, True, 0, QString("")), self) if dlg.exec_() == QDialog.Accepted: cond, temp, enabled, ignorecount, special = dlg.getData() if not self.__findDuplicates(cond, special, True): self.__model.addWatchPoint(cond, special, (temp, enabled, ignorecount)) self.__resizeColumns() self.__resort() def __doubleClicked(self, index): """ Private slot to handle the double clicked signal. @param index index of the entry that was double clicked (QModelIndex) """ if index.isValid(): self.__doEditWatchPoint(index) def __editWatchPoint(self): """ Private slot to handle the edit watch expression context menu entry. """ index = self.currentIndex() if index.isValid(): self.__doEditWatchPoint(index) def __doEditWatchPoint(self, index): """ Private slot to edit a watch expression. @param index index of watch expression to be edited (QModelIndex) """ sindex = self.__toSourceIndex(index) if sindex.isValid(): wp = self.__model.getWatchPointByIndex(sindex) if not wp: return cond, special, temp, enabled, count = wp[:5] dlg = EditWatchpointDialog(\ (QString(cond), temp, enabled, count, QString(special)), self) if dlg.exec_() == QDialog.Accepted: cond, temp, enabled, count, special = dlg.getData() if not self.__findDuplicates(cond, special, True, sindex): self.__model.setWatchPointByIndex(sindex, unicode(cond), unicode(special), (temp, enabled, count)) self.__resizeColumns() self.__resort() def __setWpEnabled(self, index, enabled): """ Private method to set the enabled status of a watch expression. @param index index of watch expression to be enabled/disabled (QModelIndex) @param enabled flag indicating the enabled status to be set (boolean) """ sindex = self.__toSourceIndex(index) if sindex.isValid(): self.__model.setWatchPointEnabledByIndex(sindex, enabled) def __enableWatchPoint(self): """ Private slot to handle the enable watch expression context menu entry. """ index = self.currentIndex() self.__setWpEnabled(index, True) self.__resizeColumns() self.__resort() def __enableAllWatchPoints(self): """ Private slot to handle the enable all watch expressions context menu entry. """ index = self.model().index(0, 0) while index.isValid(): self.__setWpEnabled(index, True) index = self.indexBelow(index) self.__resizeColumns() self.__resort() def __enableSelectedWatchPoints(self): """ Private slot to handle the enable selected watch expressions context menu entry. """ for index in self.selectedIndexes(): if index.column() == 0: self.__setWpEnabled(index, True) self.__resizeColumns() self.__resort() def __disableWatchPoint(self): """ Private slot to handle the disable watch expression context menu entry. """ index = self.currentIndex() self.__setWpEnabled(index, False) self.__resizeColumns() self.__resort() def __disableAllWatchPoints(self): """ Private slot to handle the disable all watch expressions context menu entry. """ index = self.model().index(0, 0) while index.isValid(): self.__setWpEnabled(index, False) index = self.indexBelow(index) self.__resizeColumns() self.__resort() def __disableSelectedWatchPoints(self): """ Private slot to handle the disable selected watch expressions context menu entry. """ for index in self.selectedIndexes(): if index.column() == 0: self.__setWpEnabled(index, False) self.__resizeColumns() self.__resort() def __deleteWatchPoint(self): """ Private slot to handle the delete watch expression context menu entry. """ index = self.currentIndex() sindex = self.__toSourceIndex(index) if sindex.isValid(): self.__model.deleteWatchPointByIndex(sindex) def __deleteAllWatchPoints(self): """ Private slot to handle the delete all watch expressions context menu entry. """ self.__model.deleteAll() def __deleteSelectedWatchPoints(self): """ Private slot to handle the delete selected watch expressions context menu entry. """ idxList = [] for index in self.selectedIndexes(): sindex = self.__toSourceIndex(index) if sindex.isValid() and index.column() == 0: lastrow = index.row() idxList.append(sindex) self.__model.deleteWatchPoints(idxList) def __showBackMenu(self): """ Private slot to handle the aboutToShow signal of the background menu. """ if self.model().rowCount() == 0: self.backMenuActions["EnableAll"].setEnabled(False) self.backMenuActions["DisableAll"].setEnabled(False) self.backMenuActions["DeleteAll"].setEnabled(False) else: self.backMenuActions["EnableAll"].setEnabled(True) self.backMenuActions["DisableAll"].setEnabled(True) self.backMenuActions["DeleteAll"].setEnabled(True) def __getSelectedItemsCount(self): """ Private method to get the count of items selected. @return count of items selected (integer) """ count = len(self.selectedIndexes()) / (self.__model.columnCount()-1) # column count is 1 greater than selectable return count def __configure(self): """ Private method to open the configuration dialog. """ e4App().getObject("UserInterface").showPreferences("debuggerGeneralPage") eric4-4.5.18/eric/Debugger/PaxHeaders.8617/ExceptionsFilterDialog.py0000644000175000001440000000013212261012651023212 xustar000000000000000030 mtime=1388582313.092090932 30 atime=1389081083.827724385 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Debugger/ExceptionsFilterDialog.py0000644000175000001440000000625512261012651022754 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2002 - 2014 Detlev Offenbach # """ Module implementing the exceptions filter dialog. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from Ui_ExceptionsFilterDialog import Ui_ExceptionsFilterDialog class ExceptionsFilterDialog(QDialog, Ui_ExceptionsFilterDialog): """ Class implementing the exceptions filter dialog. """ def __init__(self, excList, ignore, parent=None): """ Constructor @param excList list of exceptions to be edited (QStringList) @param ignore flag indicating the ignore exceptions mode (boolean) @param parent the parent widget (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.setModal(True) self.exceptionList.addItems(excList) if ignore: self.setWindowTitle(self.trUtf8("Ignored Exceptions")) self.exceptionList.setToolTip(self.trUtf8("List of ignored exceptions")) self.okButton = self.buttonBox.button(QDialogButtonBox.Ok) @pyqtSignature("") def on_exceptionList_itemSelectionChanged(self): """ Private slot to handle the change of the selection. """ self.deleteButton.setEnabled(len(self.exceptionList.selectedItems()) > 0) @pyqtSignature("") def on_deleteButton_clicked(self): """ Private slot to delete the currently selected exception of the listbox. """ itm = self.exceptionList.takeItem(self.exceptionList.currentRow()) del itm @pyqtSignature("") def on_deleteAllButton_clicked(self): """ Private slot to delete all exceptions of the listbox. """ while self.exceptionList.count() > 0: itm = self.exceptionList.takeItem(0) del itm @pyqtSignature("") def on_addButton_clicked(self): """ Private slot to handle the Add button press. """ exception = self.exceptionEdit.text() if not exception.isEmpty(): self.exceptionList.addItem(exception) self.exceptionEdit.clear() def on_exceptionEdit_textChanged(self, txt): """ Private slot to handle the textChanged signal of exceptionEdit. This slot sets the enabled status of the add button and sets the forms default button. @param txt the text entered into exceptionEdit (QString) """ if txt.isEmpty(): self.okButton.setDefault(True) self.addButton.setDefault(False) self.addButton.setEnabled(False) else: self.okButton.setDefault(False) self.addButton.setDefault(True) self.addButton.setEnabled(True) def getExceptionsList(self): """ Public method to retrieve the list of exception types. @return list of exception types (list of strings) """ excList = QStringList() for row in range(0, self.exceptionList.count()): itm = self.exceptionList.item(row) excList.append(itm.text()) return excList eric4-4.5.18/eric/Debugger/PaxHeaders.8617/DebugViewer.py0000644000175000001440000000013112261012651021012 xustar000000000000000029 mtime=1388582313.09509097 30 atime=1389081083.827724385 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Debugger/DebugViewer.py0000644000175000001440000004350612261012651020555 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2002 - 2014 Detlev Offenbach # """ Module implementing a widget containing various debug related views. The views avaliable are:
    • variables viewer for global variables
    • variables viewer for local variables
    • viewer for breakpoints
    • viewer for watch expressions
    • viewer for exceptions
    • viewer for threads
    • a file browser (optional)
    • an interpreter shell (optional)
    """ import os from PyQt4.QtCore import * from PyQt4.QtGui import * from QScintilla.Shell import Shell from VariablesViewer import VariablesViewer from ExceptionLogger import ExceptionLogger from BreakPointViewer import BreakPointViewer from WatchPointViewer import WatchPointViewer import Preferences import Utilities import UI.PixmapCache from E4Gui.E4TabWidget import E4TabWidget class DebugViewer(QWidget): """ Class implementing a widget conatining various debug related views. The individual tabs contain the interpreter shell (optional), the filesystem browser (optional), the two variables viewers (global and local), a breakpoint viewer, a watch expression viewer and the exception logger. Additionally a list of all threads is shown. @signal sourceFile(string, int) emitted to open a source file at a line """ def __init__(self, debugServer, docked, vm, parent = None, embeddedShell = True, embeddedBrowser = True): """ Constructor @param debugServer reference to the debug server object @param docked flag indicating a dock window @param vm reference to the viewmanager object @param parent parent widget (QWidget) @param embeddedShell flag indicating whether the shell should be included. This flag is set to False by those layouts, that have the interpreter shell in a separate window. @param embeddedBrowser flag indicating whether the file browser should be included. This flag is set to False by those layouts, that have the file browser in a separate window or embedded in the project browser instead. """ QWidget.__init__(self, parent) self.debugServer = debugServer self.debugUI = None self.setWindowIcon(UI.PixmapCache.getIcon("eric.png")) self.__mainLayout = QVBoxLayout() self.__mainLayout.setMargin(0) self.setLayout(self.__mainLayout) self.__tabWidget = E4TabWidget() self.__mainLayout.addWidget(self.__tabWidget) self.embeddedShell = embeddedShell if embeddedShell: # add the interpreter shell self.shell = Shell(debugServer, vm) index = self.__tabWidget.addTab(self.shell, UI.PixmapCache.getIcon("shell.png"), '') self.__tabWidget.setTabToolTip(index, self.shell.windowTitle()) self.embeddedBrowser = embeddedBrowser if embeddedBrowser: from UI.Browser import Browser # add the browser self.browser = Browser() index = self.__tabWidget.addTab(self.browser, UI.PixmapCache.getIcon("browser.png"), '') self.__tabWidget.setTabToolTip(index, self.browser.windowTitle()) # add the global variables viewer self.glvWidget = QWidget() self.glvWidgetVLayout = QVBoxLayout(self.glvWidget) self.glvWidgetVLayout.setMargin(0) self.glvWidgetVLayout.setSpacing(3) self.glvWidget.setLayout(self.glvWidgetVLayout) self.globalsViewer = VariablesViewer(self.glvWidget, True) self.glvWidgetVLayout.addWidget(self.globalsViewer) self.glvWidgetHLayout = QHBoxLayout() self.glvWidgetHLayout.setMargin(3) self.globalsFilterEdit = QLineEdit(self.glvWidget) self.globalsFilterEdit.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) self.glvWidgetHLayout.addWidget(self.globalsFilterEdit) self.globalsFilterEdit.setToolTip(\ self.trUtf8("Enter regular expression patterns separated by ';' to define " "variable filters. ")) self.globalsFilterEdit.setWhatsThis(\ self.trUtf8("Enter regular expression patterns separated by ';' to define " "variable filters. All variables and class attributes matched by one of " "the expressions are not shown in the list above.")) self.setGlobalsFilterButton = QPushButton(self.trUtf8('Set'), self.glvWidget) self.glvWidgetHLayout.addWidget(self.setGlobalsFilterButton) self.glvWidgetVLayout.addLayout(self.glvWidgetHLayout) index = self.__tabWidget.addTab(self.glvWidget, UI.PixmapCache.getIcon("globalVariables.png"), '') self.__tabWidget.setTabToolTip(index, self.globalsViewer.windowTitle()) self.connect(self.setGlobalsFilterButton, SIGNAL('clicked()'), self.__setGlobalsFilter) self.connect(self.globalsFilterEdit, SIGNAL('returnPressed()'), self.__setGlobalsFilter) # add the local variables viewer self.lvWidget = QWidget() self.lvWidgetVLayout = QVBoxLayout(self.lvWidget) self.lvWidgetVLayout.setMargin(0) self.lvWidgetVLayout.setSpacing(3) self.lvWidget.setLayout(self.lvWidgetVLayout) self.lvWidgetHLayout1 = QHBoxLayout() self.lvWidgetHLayout1.setMargin(3) self.stackComboBox = QComboBox(self.lvWidget) self.stackComboBox.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) self.lvWidgetHLayout1.addWidget(self.stackComboBox) self.sourceButton = QPushButton(self.trUtf8('Source'), self.lvWidget) self.lvWidgetHLayout1.addWidget(self.sourceButton) self.sourceButton.setEnabled(False) self.lvWidgetVLayout.addLayout(self.lvWidgetHLayout1) self.localsViewer = VariablesViewer(self.lvWidget, False) self.lvWidgetVLayout.addWidget(self.localsViewer) self.lvWidgetHLayout2 = QHBoxLayout() self.lvWidgetHLayout2.setMargin(3) self.localsFilterEdit = QLineEdit(self.lvWidget) self.localsFilterEdit.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) self.lvWidgetHLayout2.addWidget(self.localsFilterEdit) self.localsFilterEdit.setToolTip(\ self.trUtf8("Enter regular expression patterns separated by ';' to define " "variable filters. ")) self.localsFilterEdit.setWhatsThis(\ self.trUtf8("Enter regular expression patterns separated by ';' to define " "variable filters. All variables and class attributes matched by one of " "the expressions are not shown in the list above.")) self.setLocalsFilterButton = QPushButton(self.trUtf8('Set'), self.lvWidget) self.lvWidgetHLayout2.addWidget(self.setLocalsFilterButton) self.lvWidgetVLayout.addLayout(self.lvWidgetHLayout2) index = self.__tabWidget.addTab(self.lvWidget, UI.PixmapCache.getIcon("localVariables.png"), '') self.__tabWidget.setTabToolTip(index, self.localsViewer.windowTitle()) self.connect(self.sourceButton, SIGNAL('clicked()'), self.__showSource) self.connect(self.stackComboBox, SIGNAL('activated(int)'), self.__frameSelected) self.connect(self.setLocalsFilterButton, SIGNAL('clicked()'), self.__setLocalsFilter) self.connect(self.localsFilterEdit, SIGNAL('returnPressed()'), self.__setLocalsFilter) # add the breakpoint viewer self.breakpointViewer = BreakPointViewer() self.breakpointViewer.setModel(self.debugServer.getBreakPointModel()) index = self.__tabWidget.addTab(self.breakpointViewer, UI.PixmapCache.getIcon("breakpoints.png"), '') self.__tabWidget.setTabToolTip(index, self.breakpointViewer.windowTitle()) self.connect(self.breakpointViewer, SIGNAL("sourceFile"), self, SIGNAL("sourceFile")) # add the watch expression viewer self.watchpointViewer = WatchPointViewer() self.watchpointViewer.setModel(self.debugServer.getWatchPointModel()) index = self.__tabWidget.addTab(self.watchpointViewer, UI.PixmapCache.getIcon("watchpoints.png"), '') self.__tabWidget.setTabToolTip(index, self.watchpointViewer.windowTitle()) # add the exception logger self.exceptionLogger = ExceptionLogger() index = self.__tabWidget.addTab(self.exceptionLogger, UI.PixmapCache.getIcon("exceptions.png"), '') self.__tabWidget.setTabToolTip(index, self.exceptionLogger.windowTitle()) if self.embeddedShell: self.__tabWidget.setCurrentWidget(self.shell) else: if self.embeddedBrowser: self.__tabWidget.setCurrentWidget(self.browser) else: self.__tabWidget.setCurrentWidget(self.lvWidget) # add the threads viewer self.__mainLayout.addWidget(QLabel(self.trUtf8("Threads:"))) self.__threadList = QTreeWidget() self.__threadList.setHeaderLabels([self.trUtf8("ID"), self.trUtf8("Name"), self.trUtf8("State"), ""]) self.__threadList.setSortingEnabled(True) self.__mainLayout.addWidget(self.__threadList) self.__doThreadListUpdate = True self.connect(self.__threadList, SIGNAL('currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)'), self.__threadSelected) self.__mainLayout.setStretchFactor(self.__tabWidget, 5) self.__mainLayout.setStretchFactor(self.__threadList, 1) self.currPage = None self.currentStack = None self.framenr = 0 self.connect(self.debugServer, SIGNAL('clientStack'), self.handleClientStack) self.__autoViewSource = Preferences.getDebugger("AutoViewSourceCode") self.sourceButton.setVisible(not self.__autoViewSource) def preferencesChanged(self): """ Public slot to handle the preferencesChanged signal. """ self.__autoViewSource = Preferences.getDebugger("AutoViewSourceCode") self.sourceButton.setVisible(not self.__autoViewSource) def setDebugger(self, debugUI): """ Public method to set a reference to the Debug UI. @param debugUI reference to the DebugUI objectTrees """ self.debugUI = debugUI self.connect(self.debugUI, SIGNAL('clientStack'), self.handleClientStack) def handleResetUI(self): """ Public method to reset the SBVviewer. """ self.globalsViewer.handleResetUI() self.localsViewer.handleResetUI() self.stackComboBox.clear() self.sourceButton.setEnabled(False) self.currentStack = None self.__threadList.clear() if self.embeddedShell: self.__tabWidget.setCurrentWidget(self.shell) else: if self.embeddedBrowser: self.__tabWidget.setCurrentWidget(self.browser) else: self.__tabWidget.setCurrentWidget(self.lvWidget) self.breakpointViewer.handleResetUI() def handleRawInput(self): """ Pulic slot to handle the switch to the shell in raw input mode. """ if self.embeddedShell: self.saveCurrentPage() self.__tabWidget.setCurrentWidget(self.shell) def showVariables(self, vlist, globals): """ Public method to show the variables in the respective window. @param vlist list of variables to display @param globals flag indicating global/local state """ if globals: self.globalsViewer.showVariables(vlist, self.framenr) else: self.localsViewer.showVariables(vlist, self.framenr) def showVariable(self, vlist, globals): """ Public method to show the variables in the respective window. @param vlist list of variables to display @param globals flag indicating global/local state """ if globals: self.globalsViewer.showVariable(vlist) else: self.localsViewer.showVariable(vlist) def showVariablesTab(self, globals): """ Public method to make a variables tab visible. @param globals flag indicating global/local state """ if globals: self.__tabWidget.setCurrentWidget(self.glvWidget) else: self.__tabWidget.setCurrentWidget(self.lvWidget) def saveCurrentPage(self): """ Public slot to save the current page. """ self.currPage = self.__tabWidget.currentWidget() def restoreCurrentPage(self): """ Public slot to restore the previously saved page. """ if self.currPage is not None: self.__tabWidget.setCurrentWidget(self.currPage) def handleClientStack(self, stack): """ Public slot to show the call stack of the program being debugged. """ self.framenr = 0 self.stackComboBox.clear() self.currentStack = stack self.sourceButton.setEnabled(len(stack) > 0) for s in stack: # just show base filename to make it readable s = (os.path.basename(s[0]), s[1], s[2]) self.stackComboBox.addItem('%s:%s:%s' % s) def setVariablesFilter(self, globalsFilter, localsFilter): """ Public slot to set the local variables filter. @param globalsFilter filter list for global variable types (list of int) @param localsFilter filter list for local variable types (list of int) """ self.globalsFilter = globalsFilter self.localsFilter = localsFilter def __showSource(self): """ Private slot to handle the source button press to show the selected file. """ s = self.currentStack[self.stackComboBox.currentIndex()] self.emit(SIGNAL('sourceFile'), s[0], int(s[1])) def __frameSelected(self, frmnr): """ Private slot to handle the selection of a new stack frame number. @param frmnr frame number (0 is the current frame) (int) """ self.framenr = frmnr self.debugServer.remoteClientVariables(0, self.localsFilter, frmnr) if self.__autoViewSource: self.__showSource() def __setGlobalsFilter(self): """ Private slot to set the global variable filter """ filter = unicode(self.globalsFilterEdit.text()) self.debugServer.remoteClientSetFilter(1, filter) if self.currentStack: self.debugServer.remoteClientVariables(2, self.globalsFilter) def __setLocalsFilter(self): """ Private slot to set the local variable filter """ filter = unicode(self.localsFilterEdit.text()) self.debugServer.remoteClientSetFilter(0, filter) if self.currentStack: self.debugServer.remoteClientVariables(0, self.localsFilter, self.framenr) def handleDebuggingStarted(self): """ Public slot to handle the start of a debugging session. This slot sets the variables filter expressions. """ self.__setGlobalsFilter() self.__setLocalsFilter() self.showVariablesTab(False) def currentWidget(self): """ Public method to get a reference to the current widget. @return reference to the current widget (QWidget) """ return self.__tabWidget.currentWidget() def setCurrentWidget(self, widget): """ Public slot to set the current page based on the given widget. @param widget reference to the widget (QWidget) """ self.__tabWidget.setCurrentWidget(widget) def showThreadList(self, currentID, threadList): """ Public method to show the thread list. @param currentID id of the current thread (integer) @param threadList list of dictionaries containing the thread data """ citm = None self.__threadList.clear() for thread in threadList: if thread['broken']: state = self.trUtf8("waiting at breakpoint") else: state = self.trUtf8("running") itm = QTreeWidgetItem(self.__threadList, ["%d" % thread['id'], thread['name'], state]) if thread['id'] == currentID: citm = itm self.__threadList.header().resizeSections(QHeaderView.ResizeToContents) self.__threadList.header().setStretchLastSection(True) if citm: self.__doThreadListUpdate = False self.__threadList.setCurrentItem(citm) self.__doThreadListUpdate = True def __threadSelected(self, current, previous): """ Private slot to handle the selection of a thread in the thread list. @param current reference to the new current item (QTreeWidgetItem) @param previous reference to the previous current item (QTreeWidgetItem) """ if current is not None and self.__doThreadListUpdate: tid, ok = current.text(0).toLong() if ok: self.debugServer.remoteSetThread(tid) eric4-4.5.18/eric/Debugger/PaxHeaders.8617/__init__.py0000644000175000001440000000013212261012651020342 xustar000000000000000030 mtime=1388582313.097090995 30 atime=1389081083.827724385 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Debugger/__init__.py0000644000175000001440000000043712261012651020100 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2002 - 2014 Detlev Offenbach # """ Package implementing the Debugger frontend This package implements the graphical debugger. It consists of the debugger related HMI part, supporting dialogs and the debug server. """ eric4-4.5.18/eric/Debugger/PaxHeaders.8617/DebuggerInterfacePython3.py0000644000175000001440000000013212261012651023435 xustar000000000000000030 mtime=1388582313.105091097 30 atime=1389081083.828724385 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Debugger/DebuggerInterfacePython3.py0000644000175000001440000011502412261012651023172 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing the Python3 debugger interface for the debug server. """ import sys import os import socket import subprocess from PyQt4.QtCore import * from KdeQt import KQMessageBox, KQInputDialog from KdeQt.KQApplication import e4App from DebugProtocol import * import DebugClientCapabilities import Preferences import Utilities from eric4config import getConfig ##ClientDefaultCapabilities = DebugClientCapabilities.HasAll ClientDefaultCapabilities = \ DebugClientCapabilities.HasDebugger | \ DebugClientCapabilities.HasInterpreter | \ DebugClientCapabilities.HasShell | \ DebugClientCapabilities.HasCompleter | \ DebugClientCapabilities.HasProfiler | \ DebugClientCapabilities.HasUnittest def getRegistryData(): """ Module function to get characterising data for the debugger interface. @return list of the following data. Client type (string), client capabilities (integer), client type association (list of strings) """ exts = [] for ext in unicode(Preferences.getDebugger("Python3Extensions")).split(): if ext.startswith("."): exts.append(ext) else: exts.append(".%s" % ext) if exts and unicode(Preferences.getDebugger("Python3Interpreter")): return ["Python3", ClientDefaultCapabilities, exts] else: return ["", 0, []] class DebuggerInterfacePython3(QObject): """ Class implementing the Python debugger interface for the debug server. """ def __init__(self, debugServer, passive): """ Constructor @param debugServer reference to the debug server (DebugServer) @param passive flag indicating passive connection mode (boolean) """ QObject.__init__(self) self.__isNetworked = True self.__autoContinue = not passive self.debugServer = debugServer self.passive = passive self.process = None self.qsock = None self.queue = [] # set default values for capabilities of clients self.clientCapabilities = ClientDefaultCapabilities self.codec = QTextCodec.codecForName(str(Preferences.getSystem("StringEncoding"))) if passive: # set translation function if Preferences.getDebugger("PathTranslation"): self.translateRemote = \ unicode(Preferences.getDebugger("PathTranslationRemote")) self.translateLocal = \ unicode(Preferences.getDebugger("PathTranslationLocal")) self.translate = self.__remoteTranslation else: self.translate = self.__identityTranslation def __identityTranslation(self, fn, remote2local = True): """ Private method to perform the identity path translation. @param fn filename to be translated (string or QString) @param remote2local flag indicating the direction of translation (False = local to remote, True = remote to local [default]) @return translated filename (string) """ return unicode(fn) def __remoteTranslation(self, fn, remote2local = True): """ Private method to perform the path translation. @param fn filename to be translated (string or QString) @param remote2local flag indicating the direction of translation (False = local to remote, True = remote to local [default]) @return translated filename (string) """ if remote2local: return unicode(fn).replace(self.translateRemote, self.translateLocal) else: return unicode(fn).replace(self.translateLocal, self.translateRemote) def __startProcess(self, program, arguments, environment = None): """ Private method to start the debugger client process. @param program name of the executable to start (string) @param arguments arguments to be passed to the program (list of string) @param environment dictionary of environment settings to pass (dict of string) @return the process object (QProcess) or None and an error string (QString) """ proc = QProcess() errorStr = QString() if environment is not None: env = QStringList() for key, value in environment.items(): env.append("%s=%s" % (key, value)) proc.setEnvironment(env) args = QStringList() for arg in arguments: args.append(arg) proc.start(program, args) if not proc.waitForStarted(10000): errorStr = proc.errorString() proc = None return proc, errorStr def startRemote(self, port, runInConsole): """ Public method to start a remote Python interpreter. @param port portnumber the debug server is listening on (integer) @param runInConsole flag indicating to start the debugger in a console window (boolean) @return client process object (QProcess) and a flag to indicate a network connection (boolean) """ interpreter = unicode(Preferences.getDebugger("Python3Interpreter")) if interpreter == "": KQMessageBox.critical(None, self.trUtf8("Start Debugger"), self.trUtf8(\ """

    No Python3 interpreter configured.

    """)) return None, False debugClientType = unicode(Preferences.getDebugger("DebugClientType3")) if debugClientType == "standard": debugClient = os.path.join(getConfig('ericDir'), "DebugClients", "Python3", "DebugClient.py") elif debugClientType == "threaded": debugClient = os.path.join(getConfig('ericDir'), "DebugClients", "Python3", "DebugClientThreads.py") else: debugClient = unicode(Preferences.getDebugger("DebugClient3")) if debugClient == "": debugClient = os.path.join(sys.path[0], "DebugClients", "Python3", "DebugClient.py") redirect = str(Preferences.getDebugger("Python3Redirect")) noencoding = \ Preferences.getDebugger("Python3NoEncoding") and '--no-encoding' or '' if Preferences.getDebugger("RemoteDbgEnabled"): ipaddr = self.debugServer.getHostAddress(False) rexec = unicode(Preferences.getDebugger("RemoteExecution")) rhost = unicode(Preferences.getDebugger("RemoteHost")) if rhost == "": rhost = "localhost" if rexec: args = Utilities.parseOptionString(rexec) + \ [rhost, interpreter, os.path.abspath(debugClient), noencoding, str(port), redirect, ipaddr] args[0] = Utilities.getExecutablePath(args[0]) process, error = self.__startProcess(args[0], args[1:]) if process is None: KQMessageBox.critical(None, self.trUtf8("Start Debugger"), self.trUtf8(\ """

    The debugger backend could not be started.

    """ """

    Reason: %1

    """).arg(error)) # set translation function if Preferences.getDebugger("PathTranslation"): self.translateRemote = \ unicode(Preferences.getDebugger("PathTranslationRemote")) self.translateLocal = \ unicode(Preferences.getDebugger("PathTranslationLocal")) self.translate = self.__remoteTranslation else: self.translate = self.__identityTranslation return process, self.__isNetworked # set translation function self.translate = self.__identityTranslation # setup the environment for the debugger if Preferences.getDebugger("DebugEnvironmentReplace"): clientEnv = {} else: clientEnv = os.environ.copy() envlist = Utilities.parseEnvironmentString(\ Preferences.getDebugger("DebugEnvironment")) for el in envlist: try: key, value = el.split('=', 1) if value.startswith('"') or value.startswith("'"): value = value[1:-1] clientEnv[str(key)] = str(value) except UnpackError: pass ipaddr = self.debugServer.getHostAddress(True) if runInConsole or Preferences.getDebugger("ConsoleDbgEnabled"): ccmd = unicode(Preferences.getDebugger("ConsoleDbgCommand")) if ccmd: args = Utilities.parseOptionString(ccmd) + \ [interpreter, os.path.abspath(debugClient), noencoding, str(port), '0', ipaddr] args[0] = Utilities.getExecutablePath(args[0]) process, error = self.__startProcess(args[0], args[1:], clientEnv) if process is None: KQMessageBox.critical(None, self.trUtf8("Start Debugger"), self.trUtf8(\ """

    The debugger backend could not be started.

    """ """

    Reason: %1

    """).arg(error)) return process, self.__isNetworked process, error = self.__startProcess(interpreter, [debugClient, noencoding, str(port), redirect, ipaddr], clientEnv) if process is None: KQMessageBox.critical(None, self.trUtf8("Start Debugger"), self.trUtf8( """

    The debugger backend could not be started.

    """ """

    Reason: %1

    """).arg(error)) return process, self.__isNetworked def startRemoteForProject(self, port, runInConsole): """ Public method to start a remote Python interpreter for a project. @param port portnumber the debug server is listening on (integer) @param runInConsole flag indicating to start the debugger in a console window (boolean) @return client process object (QProcess) and a flag to indicate a network connection (boolean) """ project = e4App().getObject("Project") if not project.isDebugPropertiesLoaded(): return None, self.__isNetworked # start debugger with project specific settings interpreter = project.getDebugProperty("INTERPRETER") debugClient = project.getDebugProperty("DEBUGCLIENT") redirect = str(project.getDebugProperty("REDIRECT")) noencoding = \ project.getDebugProperty("NOENCODING") and '--no-encoding' or '' if project.getDebugProperty("REMOTEDEBUGGER"): ipaddr = self.debugServer.getHostAddress(False) rexec = project.getDebugProperty("REMOTECOMMAND") rhost = project.getDebugProperty("REMOTEHOST") if rhost == "": rhost = "localhost" if rexec: args = Utilities.parseOptionString(rexec) + \ [rhost, interpreter, os.path.abspath(debugClient), noencoding, str(port), redirect, ipaddr] args[0] = Utilities.getExecutablePath(args[0]) process, error = self.__startProcess(args[0], args[1:]) if process is None: KQMessageBox.critical(None, self.trUtf8("Start Debugger"), self.trUtf8(\ """

    The debugger backend could not be started.

    """ """

    Reason: %1

    """).arg(error)) # set translation function if project.getDebugProperty("PATHTRANSLATION"): self.translateRemote = project.getDebugProperty("REMOTEPATH") self.translateLocal = project.getDebugProperty("LOCALPATH") self.translate = self.__remoteTranslation else: self.translate = self.__identityTranslation return process, self.__isNetworked # set translation function self.translate = self.__identityTranslation # setup the environment for the debugger if project.getDebugProperty("ENVIRONMENTOVERRIDE"): clientEnv = {} else: clientEnv = os.environ.copy() envlist = Utilities.parseEnvironmentString(\ project.getDebugProperty("ENVIRONMENTSTRING")) for el in envlist: try: key, value = el.split('=', 1) if value.startswith('"') or value.startswith("'"): value = value[1:-1] clientEnv[str(key)] = str(value) except UnpackError: pass ipaddr = self.debugServer.getHostAddress(True) if runInConsole or project.getDebugProperty("CONSOLEDEBUGGER"): ccmd = unicode(project.getDebugProperty("CONSOLECOMMAND")) or \ unicode(Preferences.getDebugger("ConsoleDbgCommand")) if ccmd: args = Utilities.parseOptionString(ccmd) + \ [interpreter, os.path.abspath(debugClient), noencoding, str(port), '0', ipaddr] args[0] = Utilities.getExecutablePath(args[0]) process, error = self.__startProcess(args[0], args[1:], clientEnv) if process is None: KQMessageBox.critical(None, self.trUtf8("Start Debugger"), self.trUtf8(\ """

    The debugger backend could not be started.

    """ """

    Reason: %1

    """).arg(error)) return process, self.__isNetworked process, error = self.__startProcess(interpreter, [debugClient, noencoding, str(port), redirect, ipaddr], clientEnv) if process is None: KQMessageBox.critical(None, self.trUtf8("Start Debugger"), self.trUtf8( """

    The debugger backend could not be started.

    """ """

    Reason: %1

    """).arg(error)) return process, self.__isNetworked def getClientCapabilities(self): """ Public method to retrieve the debug clients capabilities. @return debug client capabilities (integer) """ return self.clientCapabilities def newConnection(self, sock): """ Public slot to handle a new connection. @param sock reference to the socket object (QTcpSocket) @return flag indicating success (boolean) """ # If we already have a connection, refuse this one. It will be closed # automatically. if self.qsock is not None: return False self.connect(sock, SIGNAL('disconnected()'), self.debugServer.startClient) self.connect(sock, SIGNAL('readyRead()'), self.__parseClientLine) self.qsock = sock # Get the remote clients capabilities self.remoteCapabilities() return True def flush(self): """ Public slot to flush the queue. """ # Send commands that were waiting for the connection. for cmd in self.queue: self.qsock.write(cmd.encode('utf8', 'backslashreplace')) self.queue = [] def shutdown(self): """ Public method to cleanly shut down. It closes our socket and shuts down the debug client. (Needed on Win OS) """ if self.qsock is None: return # do not want any slots called during shutdown self.disconnect(self.qsock, SIGNAL('disconnected()'), self.debugServer.startClient) self.disconnect(self.qsock, SIGNAL('readyRead()'), self.__parseClientLine) # close down socket, and shut down client as well. self.__sendCommand('%s\n' % RequestShutdown) self.qsock.flush() self.qsock.close() # reinitialize self.qsock = None self.queue = [] def isConnected(self): """ Public method to test, if a debug client has connected. @return flag indicating the connection status (boolean) """ return self.qsock is not None def remoteEnvironment(self, env): """ Public method to set the environment for a program to debug, run, ... @param env environment settings (dictionary) """ self.__sendCommand('%s%s\n' % (RequestEnv, unicode(env))) def remoteLoad(self, fn, argv, wd, traceInterpreter = False, autoContinue = True, autoFork = False, forkChild = False): """ Public method to load a new program to debug. @param fn the filename to debug (string) @param argv the commandline arguments to pass to the program (string or QString) @param wd the working directory for the program (string) @keyparam traceInterpreter flag indicating if the interpreter library should be traced as well (boolean) @keyparam autoContinue flag indicating, that the debugger should not stop at the first executable line (boolean) @keyparam autoFork flag indicating the automatic fork mode (boolean) @keyparam forkChild flag indicating to debug the child after forking (boolean) """ self.__autoContinue = autoContinue wd = self.translate(wd, False) fn = self.translate(os.path.abspath(unicode(fn)), False) self.__sendCommand('%s%s\n' % (RequestForkMode, repr((autoFork, forkChild)))) self.__sendCommand('%s%s|%s|%s|%d\n' % \ (RequestLoad, unicode(wd), unicode(fn), unicode(Utilities.parseOptionString(argv)), traceInterpreter)) def remoteRun(self, fn, argv, wd, autoFork = False, forkChild = False): """ Public method to load a new program to run. @param fn the filename to run (string) @param argv the commandline arguments to pass to the program (string or QString) @param wd the working directory for the program (string) @keyparam autoFork flag indicating the automatic fork mode (boolean) @keyparam forkChild flag indicating to debug the child after forking (boolean) """ wd = self.translate(wd, False) fn = self.translate(os.path.abspath(unicode(fn)), False) self.__sendCommand('%s%s\n' % (RequestForkMode, repr((autoFork, forkChild)))) self.__sendCommand('%s%s|%s|%s\n' % \ (RequestRun, unicode(wd), unicode(fn), unicode(Utilities.parseOptionString(argv)))) def remoteCoverage(self, fn, argv, wd, erase = False): """ Public method to load a new program to collect coverage data. @param fn the filename to run (string) @param argv the commandline arguments to pass to the program (string or QString) @param wd the working directory for the program (string) @keyparam erase flag indicating that coverage info should be cleared first (boolean) """ wd = self.translate(wd, False) fn = self.translate(os.path.abspath(unicode(fn)), False) self.__sendCommand('%s%s@@%s@@%s@@%d\n' % \ (RequestCoverage, unicode(wd), unicode(fn), unicode(Utilities.parseOptionString(argv)), erase)) def remoteProfile(self, fn, argv, wd, erase = False): """ Public method to load a new program to collect profiling data. @param fn the filename to run (string) @param argv the commandline arguments to pass to the program (string or QString) @param wd the working directory for the program (string) @keyparam erase flag indicating that timing info should be cleared first (boolean) """ wd = self.translate(wd, False) fn = self.translate(os.path.abspath(unicode(fn)), False) self.__sendCommand('%s%s|%s|%s|%d\n' % \ (RequestProfile, unicode(wd), unicode(fn), unicode(Utilities.parseOptionString(argv)), erase)) def remoteStatement(self, stmt): """ Public method to execute a Python statement. @param stmt the Python statement to execute (string). It should not have a trailing newline. """ self.__sendCommand('%s\n' % stmt) self.__sendCommand(RequestOK + '\n') def remoteStep(self): """ Public method to single step the debugged program. """ self.__sendCommand(RequestStep + '\n') def remoteStepOver(self): """ Public method to step over the debugged program. """ self.__sendCommand(RequestStepOver + '\n') def remoteStepOut(self): """ Public method to step out the debugged program. """ self.__sendCommand(RequestStepOut + '\n') def remoteStepQuit(self): """ Public method to stop the debugged program. """ self.__sendCommand(RequestStepQuit + '\n') def remoteContinue(self, special = False): """ Public method to continue the debugged program. @param special flag indicating a special continue operation """ self.__sendCommand('%s%d\n' % (RequestContinue, special)) def remoteBreakpoint(self, fn, line, set, cond = None, temp = False): """ Public method to set or clear a breakpoint. @param fn filename the breakpoint belongs to (string) @param line linenumber of the breakpoint (int) @param set flag indicating setting or resetting a breakpoint (boolean) @param cond condition of the breakpoint (string) @param temp flag indicating a temporary breakpoint (boolean) """ fn = self.translate(fn, False) self.__sendCommand('%s%s@@%d@@%d@@%d@@%s\n' % \ (RequestBreak, fn, line, temp, set, cond)) def remoteBreakpointEnable(self, fn, line, enable): """ Public method to enable or disable a breakpoint. @param fn filename the breakpoint belongs to (string) @param line linenumber of the breakpoint (int) @param enable flag indicating enabling or disabling a breakpoint (boolean) """ fn = self.translate(fn, False) self.__sendCommand('%s%s,%d,%d\n' % (RequestBreakEnable, fn, line, enable)) def remoteBreakpointIgnore(self, fn, line, count): """ Public method to ignore a breakpoint the next couple of occurrences. @param fn filename the breakpoint belongs to (string) @param line linenumber of the breakpoint (int) @param count number of occurrences to ignore (int) """ fn = self.translate(fn, False) self.__sendCommand('%s%s,%d,%d\n' % (RequestBreakIgnore, fn, line, count)) def remoteWatchpoint(self, cond, set, temp = False): """ Public method to set or clear a watch expression. @param cond expression of the watch expression (string) @param set flag indicating setting or resetting a watch expression (boolean) @param temp flag indicating a temporary watch expression (boolean) """ # cond is combination of cond and special (s. watch expression viewer) self.__sendCommand('%s%s@@%d@@%d\n' % (RequestWatch, cond, temp, set)) def remoteWatchpointEnable(self, cond, enable): """ Public method to enable or disable a watch expression. @param cond expression of the watch expression (string) @param enable flag indicating enabling or disabling a watch expression (boolean) """ # cond is combination of cond and special (s. watch expression viewer) self.__sendCommand('%s%s,%d\n' % (RequestWatchEnable, cond, enable)) def remoteWatchpointIgnore(self, cond, count): """ Public method to ignore a watch expression the next couple of occurrences. @param cond expression of the watch expression (string) @param count number of occurrences to ignore (int) """ # cond is combination of cond and special (s. watch expression viewer) self.__sendCommand('%s%s,%d\n' % (RequestWatchIgnore, cond, count)) def remoteRawInput(self,s): """ Public method to send the raw input to the debugged program. @param s the raw input (string) """ self.__sendCommand(s + '\n') def remoteThreadList(self): """ Public method to request the list of threads from the client. """ self.__sendCommand('%s\n' % RequestThreadList) def remoteSetThread(self, tid): """ Public method to request to set the given thread as current thread. @param tid id of the thread (integer) """ self.__sendCommand('%s%d\n' % (RequestThreadSet, tid)) def remoteClientVariables(self, scope, filter, framenr = 0): """ Public method to request the variables of the debugged program. @param scope the scope of the variables (0 = local, 1 = global) @param filter list of variable types to filter out (list of int) @param framenr framenumber of the variables to retrieve (int) """ self.__sendCommand('%s%d, %d, %s\n' % \ (RequestVariables, framenr, scope, unicode(filter))) def remoteClientVariable(self, scope, filter, var, framenr = 0): """ Public method to request the variables of the debugged program. @param scope the scope of the variables (0 = local, 1 = global) @param filter list of variable types to filter out (list of int) @param var list encoded name of variable to retrieve (string) @param framenr framenumber of the variables to retrieve (int) """ self.__sendCommand('%s%s, %d, %d, %s\n' % \ (RequestVariable, str(var), framenr, scope, str(filter))) def remoteClientSetFilter(self, scope, filter): """ Public method to set a variables filter list. @param scope the scope of the variables (0 = local, 1 = global) @param filter regexp string for variable names to filter out (string) """ self.__sendCommand('%s%d, "%s"\n' % (RequestSetFilter, scope, filter)) def remoteEval(self, arg): """ Public method to evaluate arg in the current context of the debugged program. @param arg the arguments to evaluate (string) """ self.__sendCommand('%s%s\n' % (RequestEval, arg)) def remoteExec(self, stmt): """ Public method to execute stmt in the current context of the debugged program. @param stmt statement to execute (string) """ self.__sendCommand('%s%s\n' % (RequestExec, stmt)) def remoteBanner(self): """ Public slot to get the banner info of the remote client. """ self.__sendCommand(RequestBanner + '\n') def remoteCapabilities(self): """ Public slot to get the debug clients capabilities. """ self.__sendCommand(RequestCapabilities + '\n') def remoteCompletion(self, text): """ Public slot to get the a list of possible commandline completions from the remote client. @param text the text to be completed (string or QString) """ self.__sendCommand("%s%s\n" % (RequestCompletion, text)) def remoteUTPrepare(self, fn, tn, tfn, cov, covname, coverase): """ Public method to prepare a new unittest run. @param fn the filename to load (string) @param tn the testname to load (string) @param tfn the test function name to load tests from (string) @param cov flag indicating collection of coverage data is requested @param covname filename to be used to assemble the coverage caches filename @param coverase flag indicating erasure of coverage data is requested """ fn = self.translate(os.path.abspath(unicode(fn)), False) self.__sendCommand('%s%s|%s|%s|%d|%s|%d\n' % \ (RequestUTPrepare, unicode(fn), unicode(tn), unicode(tfn), cov, unicode(covname), coverase)) def remoteUTRun(self): """ Public method to start a unittest run. """ self.__sendCommand('%s\n' % RequestUTRun) def remoteUTStop(self): """ Public method to stop a unittest run. """ self.__sendCommand('%s\n' % RequestUTStop) def __askForkTo(self): """ Private method to ask the user which branch of a fork to follow. """ selections = [self.trUtf8("Parent Process"), self.trUtf8("Child process")] res, ok = KQInputDialog.getItem(\ None, self.trUtf8("Client forking"), self.trUtf8("Select the fork branch to follow."), selections, 0, False) if not ok or res == selections[0]: self.__sendCommand(ResponseForkTo + 'parent\n') else: self.__sendCommand(ResponseForkTo + 'child\n') def __parseClientLine(self): """ Private method to handle data from the client. """ while self.qsock and self.qsock.canReadLine(): qs = self.qsock.readLine() if self.codec is not None: us = self.codec.fromUnicode(QString(qs)) else: us = qs line = str(us) if line.endswith(EOT): line = line[:-len(EOT)] if not line: continue ## print "Server: ", line ##debug eoc = line.find('<') + 1 # Deal with case where user has written directly to stdout # or stderr, but not line terminated and we stepped over the # write call, in that case the >line< will not be the first # string read from the socket... boc = line.find('>') if boc > 0 and eoc > boc: self.debugServer.clientOutput(line[:boc]) line = line[boc:] eoc = line.find('<') + 1 boc = line.find('>') if boc >= 0 and eoc > boc: resp = line[boc:eoc] if resp == ResponseLine or resp == ResponseStack: stack = eval(line[eoc:-1]) for s in stack: s[0] = self.translate(s[0], True) cf = stack[0] if self.__autoContinue: self.__autoContinue = False QTimer.singleShot(0, self.remoteContinue) else: self.debugServer.clientLine(cf[0], int(cf[1]), resp == ResponseStack) self.debugServer.clientStack(stack) continue if resp == ResponseThreadList: currentId, threadList = eval(line[eoc:-1]) self.debugServer.clientThreadList(currentId, threadList) continue if resp == ResponseThreadSet: self.debugServer.clientThreadSet() continue if resp == ResponseVariables: vlist = eval(line[eoc:-1]) scope = vlist[0] try: variables = vlist[1:] except IndexError: variables = [] self.debugServer.clientVariables(scope, variables) continue if resp == ResponseVariable: vlist = eval(line[eoc:-1]) scope = vlist[0] try: variables = vlist[1:] except IndexError: variables = [] self.debugServer.clientVariable(scope, variables) continue if resp == ResponseOK: self.debugServer.clientStatement(False) continue if resp == ResponseContinue: self.debugServer.clientStatement(True) continue if resp == ResponseException: exc = line[eoc:-1] exc = self.translate(exc, True) try: exclist = eval(exc) exctype = exclist[0] excmessage = exclist[1] stack = exclist[2:] if stack and stack[0] and stack[0][0] == "": stack = [] except (IndexError, ValueError, SyntaxError): exctype = None excmessage = '' stack = [] self.debugServer.clientException(exctype, excmessage, stack) continue if resp == ResponseSyntax: exc = line[eoc:-1] exc = self.translate(exc, True) try: message, (fn, ln, cn) = eval(exc) if fn is None: fn = '' except (IndexError, ValueError): message = None fn = '' ln = 0 cn = 0 if cn is None: cn = 0 self.debugServer.clientSyntaxError(message, fn, ln, cn) continue if resp == ResponseExit: self.debugServer.clientExit(line[eoc:-1]) continue if resp == ResponseClearBreak: fn, lineno = line[eoc:-1].split(',') lineno = int(lineno) fn = self.translate(fn, True) self.debugServer.clientClearBreak(fn, lineno) continue if resp == ResponseBPConditionError: fn, lineno = line[eoc:-1].split(',') lineno = int(lineno) fn = self.translate(fn, True) self.debugServer.clientBreakConditionError(fn, lineno) continue if resp == ResponseClearWatch: cond = line[eoc:-1] self.debugServer.clientClearWatch(cond) continue if resp == ResponseWPConditionError: cond = line[eoc:-1] self.debugServer.clientWatchConditionError(cond) continue if resp == ResponseRaw: prompt, echo = eval(line[eoc:-1]) self.debugServer.clientRawInput(prompt, echo) continue if resp == ResponseBanner: version, platform, dbgclient = eval(line[eoc:-1]) self.debugServer.clientBanner(version, platform, dbgclient) continue if resp == ResponseCapabilities: cap, clType = eval(line[eoc:-1]) self.clientCapabilities = cap self.debugServer.clientCapabilities(cap, clType) continue if resp == ResponseCompletion: clstring, text = line[eoc:-1].split('||') cl = eval(clstring) self.debugServer.clientCompletionList(cl, text) continue if resp == PassiveStartup: fn, exc = line[eoc:-1].split('|') exc = bool(exc) fn = self.translate(fn, True) self.debugServer.passiveStartUp(fn, exc) continue if resp == ResponseUTPrepared: res, exc_type, exc_value = eval(line[eoc:-1]) self.debugServer.clientUtPrepared(res, exc_type, exc_value) continue if resp == ResponseUTStartTest: testname, doc = eval(line[eoc:-1]) self.debugServer.clientUtStartTest(testname, doc) continue if resp == ResponseUTStopTest: self.debugServer.clientUtStopTest() continue if resp == ResponseUTTestFailed: testname, traceback = eval(line[eoc:-1]) self.debugServer.clientUtTestFailed(testname, traceback) continue if resp == ResponseUTTestErrored: testname, traceback = eval(line[eoc:-1]) self.debugServer.clientUtTestErrored(testname, traceback) continue if resp == ResponseUTFinished: self.debugServer.clientUtFinished() continue if resp == RequestForkTo: self.__askForkTo() continue self.debugServer.clientOutput(line) def __sendCommand(self, cmd): """ Private method to send a single line command to the client. @param cmd command to send to the debug client (string) """ if self.qsock is not None: self.qsock.write(cmd.encode('utf8', 'backslashreplace')) else: self.queue.append(cmd) eric4-4.5.18/eric/Debugger/PaxHeaders.8617/StartCoverageDialog.ui0000644000175000001440000000007411466563531022504 xustar000000000000000030 atime=1389081083.829724384 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Debugger/StartCoverageDialog.ui0000644000175000001440000002216411466563531022236 0ustar00detlevusers00000000000000 StartCoverageDialog 0 0 488 222 Start coverage run true Command&line: cmdlineCombo 0 0 Enter the commandline parameters <b>Commandline</b> <p>Enter the commandline parameters in this field.</p> true QComboBox::InsertAtTop QComboBox::AdjustToMinimumContentsLengthWithIcon true false &Working directory: workdirCombo 0 0 Enter the working directory <b>Working directory</b> <p>Enter the working directory of the application to be debugged. Leave it empty to set the working directory to the executable directory.</p> true QComboBox::InsertAtTop QComboBox::AdjustToMinimumContentsLengthWithIcon true false Select directory using a directory selection dialog <b>Select directory</b> <p>Select the working directory via a directory selection dialog.</p> ... &Environment: environmentCombo 0 0 Enter the environment variables to be set. <b>Environment</b> <p>Enter the environment variables to be set for the program. The individual settings must be separated by whitespace and be given in the form 'var=value'. In order to add to an environment variable, enter it in the form 'var+=value'.</p> <p>Example: var1=1 var2="hello world" var3+=":/tmp"</p> true QComboBox::InsertAtTop QComboBox::AdjustToMinimumContentsLengthWithIcon true false Uncheck to disable exception reporting <b>Report exceptions</b> <p>Uncheck this in order to disable exception reporting.</p> Report &exceptions Alt+E true Select to clear the display of the interpreter window <b>Clear interpreter window</b><p>This clears the display of the interpreter window before starting the debug client.</p> Clear &interpreter window true Select to start the debugger in a console window <b>Start in console</b> <p>Select to start the debugger in a console window. The console command has to be configured on the Debugger-&gt;General page</p> Start in console Select this to erase the collected coverage information <b>Erase coverage information</b> <p>Select this to erase the collected coverage information before the next coverage run.</p> Erase &coverage information Alt+C Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok qPixmapFromMimeSource cmdlineCombo workdirCombo dirButton environmentCombo exceptionCheckBox clearShellCheckBox consoleCheckBox eraseCheckBox buttonBox buttonBox accepted() StartCoverageDialog accept() 28 176 28 201 buttonBox rejected() StartCoverageDialog reject() 113 177 113 199 eric4-4.5.18/eric/Debugger/PaxHeaders.8617/DebuggerInterfacePython.py0000644000175000001440000000013212261012651023352 xustar000000000000000030 mtime=1388582313.109091148 30 atime=1389081083.829724384 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Debugger/DebuggerInterfacePython.py0000644000175000001440000011427512261012651023116 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing the Python debugger interface for the debug server. """ import sys import os import socket import subprocess from PyQt4.QtCore import * from KdeQt import KQMessageBox, KQInputDialog from KdeQt.KQApplication import e4App from DebugProtocol import * import DebugClientCapabilities import Preferences import Utilities from eric4config import getConfig ClientDefaultCapabilities = DebugClientCapabilities.HasAll def getRegistryData(): """ Module function to get characterising data for the debugger interface. @return list of the following data. Client type (string), client capabilities (integer), client type association (list of strings) """ exts = [] for ext in unicode(Preferences.getDebugger("PythonExtensions")).split(): if ext.startswith("."): exts.append(ext) else: exts.append(".%s" % ext) if exts: return ["Python", ClientDefaultCapabilities, exts] else: return ["", 0, []] class DebuggerInterfacePython(QObject): """ Class implementing the Python debugger interface for the debug server. """ def __init__(self, debugServer, passive): """ Constructor @param debugServer reference to the debug server (DebugServer) @param passive flag indicating passive connection mode (boolean) """ QObject.__init__(self) self.__isNetworked = True self.__autoContinue = not passive self.debugServer = debugServer self.passive = passive self.process = None self.qsock = None self.queue = [] # set default values for capabilities of clients self.clientCapabilities = ClientDefaultCapabilities self.codec = QTextCodec.codecForName(str(Preferences.getSystem("StringEncoding"))) if passive: # set translation function if Preferences.getDebugger("PathTranslation"): self.translateRemote = \ unicode(Preferences.getDebugger("PathTranslationRemote")) self.translateLocal = \ unicode(Preferences.getDebugger("PathTranslationLocal")) self.translate = self.__remoteTranslation else: self.translate = self.__identityTranslation def __identityTranslation(self, fn, remote2local = True): """ Private method to perform the identity path translation. @param fn filename to be translated (string or QString) @param remote2local flag indicating the direction of translation (False = local to remote, True = remote to local [default]) @return translated filename (string) """ return unicode(fn) def __remoteTranslation(self, fn, remote2local = True): """ Private method to perform the path translation. @param fn filename to be translated (string or QString) @param remote2local flag indicating the direction of translation (False = local to remote, True = remote to local [default]) @return translated filename (string) """ if remote2local: return unicode(fn).replace(self.translateRemote, self.translateLocal) else: return unicode(fn).replace(self.translateLocal, self.translateRemote) def __startProcess(self, program, arguments, environment = None): """ Private method to start the debugger client process. @param program name of the executable to start (string) @param arguments arguments to be passed to the program (list of string) @param environment dictionary of environment settings to pass (dict of string) @return the process object (QProcess) or None and an error string (QString) """ proc = QProcess() errorStr = QString() if environment is not None: env = QStringList() for key, value in environment.items(): env.append("%s=%s" % (key, value)) proc.setEnvironment(env) args = QStringList() for arg in arguments: args.append(arg) proc.start(program, args) if not proc.waitForStarted(10000): errorStr = proc.errorString() proc = None return proc, errorStr def startRemote(self, port, runInConsole): """ Public method to start a remote Python interpreter. @param port portnumber the debug server is listening on (integer) @param runInConsole flag indicating to start the debugger in a console window (boolean) @return client process object (QProcess) and a flag to indicate a network connection (boolean) """ if Preferences.getDebugger("CustomPythonInterpreter"): interpreter = unicode(Preferences.getDebugger("PythonInterpreter")) if interpreter == "": interpreter = sys.executable else: interpreter = sys.executable debugClientType = unicode(Preferences.getDebugger("DebugClientType")) if debugClientType == "standard": debugClient = os.path.join(getConfig('ericDir'), "DebugClients", "Python", "DebugClient.py") elif debugClientType == "threaded": debugClient = os.path.join(getConfig('ericDir'), "DebugClients", "Python", "DebugClientThreads.py") else: debugClient = unicode(Preferences.getDebugger("DebugClient")) if debugClient == "": debugClient = os.path.join(sys.path[0], "DebugClients", "Python", "DebugClient.py") redirect = str(Preferences.getDebugger("PythonRedirect")) noencoding = \ Preferences.getDebugger("PythonNoEncoding") and '--no-encoding' or '' if Preferences.getDebugger("RemoteDbgEnabled"): ipaddr = self.debugServer.getHostAddress(False) rexec = unicode(Preferences.getDebugger("RemoteExecution")) rhost = unicode(Preferences.getDebugger("RemoteHost")) if rhost == "": rhost = "localhost" if rexec: args = Utilities.parseOptionString(rexec) + \ [rhost, interpreter, os.path.abspath(debugClient), noencoding, str(port), redirect, ipaddr] args[0] = Utilities.getExecutablePath(args[0]) process, error = self.__startProcess(args[0], args[1:]) if process is None: KQMessageBox.critical(None, self.trUtf8("Start Debugger"), self.trUtf8(\ """

    The debugger backend could not be started.

    """ """

    Reason: %1

    """).arg(error)) # set translation function if Preferences.getDebugger("PathTranslation"): self.translateRemote = \ unicode(Preferences.getDebugger("PathTranslationRemote")) self.translateLocal = \ unicode(Preferences.getDebugger("PathTranslationLocal")) self.translate = self.__remoteTranslation else: self.translate = self.__identityTranslation return process, self.__isNetworked # set translation function self.translate = self.__identityTranslation # setup the environment for the debugger if Preferences.getDebugger("DebugEnvironmentReplace"): clientEnv = {} else: clientEnv = os.environ.copy() envlist = Utilities.parseEnvironmentString(\ Preferences.getDebugger("DebugEnvironment")) for el in envlist: try: key, value = el.split('=', 1) if value.startswith('"') or value.startswith("'"): value = value[1:-1] clientEnv[str(key)] = str(value) except UnpackError: pass ipaddr = self.debugServer.getHostAddress(True) if runInConsole or Preferences.getDebugger("ConsoleDbgEnabled"): ccmd = unicode(Preferences.getDebugger("ConsoleDbgCommand")) if ccmd: args = Utilities.parseOptionString(ccmd) + \ [interpreter, os.path.abspath(debugClient), noencoding, str(port), '0', ipaddr] args[0] = Utilities.getExecutablePath(args[0]) process, error = self.__startProcess(args[0], args[1:], clientEnv) if process is None: KQMessageBox.critical(None, self.trUtf8("Start Debugger"), self.trUtf8(\ """

    The debugger backend could not be started.

    """ """

    Reason: %1

    """).arg(error)) return process, self.__isNetworked process, error = self.__startProcess(interpreter, [debugClient, noencoding, str(port), redirect, ipaddr], clientEnv) if process is None: KQMessageBox.critical(None, self.trUtf8("Start Debugger"), self.trUtf8( """

    The debugger backend could not be started.

    """ """

    Reason: %1

    """).arg(error)) return process, self.__isNetworked def startRemoteForProject(self, port, runInConsole): """ Public method to start a remote Python interpreter for a project. @param port portnumber the debug server is listening on (integer) @param runInConsole flag indicating to start the debugger in a console window (boolean) @return client process object (QProcess) and a flag to indicate a network connection (boolean) """ project = e4App().getObject("Project") if not project.isDebugPropertiesLoaded(): return None, self.__isNetworked # start debugger with project specific settings interpreter = project.getDebugProperty("INTERPRETER") debugClient = project.getDebugProperty("DEBUGCLIENT") redirect = str(project.getDebugProperty("REDIRECT")) noencoding = \ project.getDebugProperty("NOENCODING") and '--no-encoding' or '' if project.getDebugProperty("REMOTEDEBUGGER"): ipaddr = self.debugServer.getHostAddress(False) rexec = project.getDebugProperty("REMOTECOMMAND") rhost = project.getDebugProperty("REMOTEHOST") if rhost == "": rhost = "localhost" if rexec: args = Utilities.parseOptionString(rexec) + \ [rhost, interpreter, os.path.abspath(debugClient), noencoding, str(port), redirect, ipaddr] args[0] = Utilities.getExecutablePath(args[0]) process, error = self.__startProcess(args[0], args[1:]) if process is None: KQMessageBox.critical(None, self.trUtf8("Start Debugger"), self.trUtf8(\ """

    The debugger backend could not be started.

    """ """

    Reason: %1

    """).arg(error)) # set translation function if project.getDebugProperty("PATHTRANSLATION"): self.translateRemote = project.getDebugProperty("REMOTEPATH") self.translateLocal = project.getDebugProperty("LOCALPATH") self.translate = self.__remoteTranslation else: self.translate = self.__identityTranslation return process, self.__isNetworked # set translation function self.translate = self.__identityTranslation # setup the environment for the debugger if project.getDebugProperty("ENVIRONMENTOVERRIDE"): clientEnv = {} else: clientEnv = os.environ.copy() envlist = Utilities.parseEnvironmentString(\ project.getDebugProperty("ENVIRONMENTSTRING")) for el in envlist: try: key, value = el.split('=', 1) if value.startswith('"') or value.startswith("'"): value = value[1:-1] clientEnv[str(key)] = str(value) except UnpackError: pass ipaddr = self.debugServer.getHostAddress(True) if runInConsole or project.getDebugProperty("CONSOLEDEBUGGER"): ccmd = unicode(project.getDebugProperty("CONSOLECOMMAND")) or \ unicode(Preferences.getDebugger("ConsoleDbgCommand")) if ccmd: args = Utilities.parseOptionString(ccmd) + \ [interpreter, os.path.abspath(debugClient), noencoding, str(port), '0', ipaddr] args[0] = Utilities.getExecutablePath(args[0]) process, error = self.__startProcess(args[0], args[1:], clientEnv) if process is None: KQMessageBox.critical(None, self.trUtf8("Start Debugger"), self.trUtf8(\ """

    The debugger backend could not be started.

    """ """

    Reason: %1

    """).arg(error)) return process, self.__isNetworked process, error = self.__startProcess(interpreter, [debugClient, noencoding, str(port), redirect, ipaddr], clientEnv) if process is None: KQMessageBox.critical(None, self.trUtf8("Start Debugger"), self.trUtf8( """

    The debugger backend could not be started.

    """ """

    Reason: %1

    """).arg(error)) return process, self.__isNetworked def getClientCapabilities(self): """ Public method to retrieve the debug clients capabilities. @return debug client capabilities (integer) """ return self.clientCapabilities def newConnection(self, sock): """ Public slot to handle a new connection. @param sock reference to the socket object (QTcpSocket) @return flag indicating success (boolean) """ # If we already have a connection, refuse this one. It will be closed # automatically. if self.qsock is not None: return False self.connect(sock, SIGNAL('disconnected()'), self.debugServer.startClient) self.connect(sock, SIGNAL('readyRead()'), self.__parseClientLine) self.qsock = sock # Get the remote clients capabilities self.remoteCapabilities() return True def flush(self): """ Public slot to flush the queue. """ # Send commands that were waiting for the connection. for cmd in self.queue: self.qsock.write(cmd.encode('utf8')) self.queue = [] def shutdown(self): """ Public method to cleanly shut down. It closes our socket and shuts down the debug client. (Needed on Win OS) """ if self.qsock is None: return # do not want any slots called during shutdown self.disconnect(self.qsock, SIGNAL('disconnected()'), self.debugServer.startClient) self.disconnect(self.qsock, SIGNAL('readyRead()'), self.__parseClientLine) # close down socket, and shut down client as well. self.__sendCommand('%s\n' % RequestShutdown) self.qsock.flush() self.qsock.close() # reinitialize self.qsock = None self.queue = [] def isConnected(self): """ Public method to test, if a debug client has connected. @return flag indicating the connection status (boolean) """ return self.qsock is not None def remoteEnvironment(self, env): """ Public method to set the environment for a program to debug, run, ... @param env environment settings (dictionary) """ self.__sendCommand('%s%s\n' % (RequestEnv, unicode(env))) def remoteLoad(self, fn, argv, wd, traceInterpreter = False, autoContinue = True, autoFork = False, forkChild = False): """ Public method to load a new program to debug. @param fn the filename to debug (string) @param argv the commandline arguments to pass to the program (string or QString) @param wd the working directory for the program (string) @keyparam traceInterpreter flag indicating if the interpreter library should be traced as well (boolean) @keyparam autoContinue flag indicating, that the debugger should not stop at the first executable line (boolean) @keyparam autoFork flag indicating the automatic fork mode (boolean) @keyparam forkChild flag indicating to debug the child after forking (boolean) """ self.__autoContinue = autoContinue wd = self.translate(wd, False) fn = self.translate(os.path.abspath(unicode(fn)), False) self.__sendCommand('%s%s\n' % (RequestForkMode, repr((autoFork, forkChild)))) self.__sendCommand('%s%s|%s|%s|%d\n' % \ (RequestLoad, unicode(wd), unicode(fn), unicode(Utilities.parseOptionString(argv)), traceInterpreter)) def remoteRun(self, fn, argv, wd, autoFork = False, forkChild = False): """ Public method to load a new program to run. @param fn the filename to run (string) @param argv the commandline arguments to pass to the program (string or QString) @param wd the working directory for the program (string) @keyparam autoFork flag indicating the automatic fork mode (boolean) @keyparam forkChild flag indicating to debug the child after forking (boolean) """ wd = self.translate(wd, False) fn = self.translate(os.path.abspath(unicode(fn)), False) self.__sendCommand('%s%s\n' % (RequestForkMode, repr((autoFork, forkChild)))) self.__sendCommand('%s%s|%s|%s\n' % \ (RequestRun, unicode(wd), unicode(fn), unicode(Utilities.parseOptionString(argv)))) def remoteCoverage(self, fn, argv, wd, erase = False): """ Public method to load a new program to collect coverage data. @param fn the filename to run (string) @param argv the commandline arguments to pass to the program (string or QString) @param wd the working directory for the program (string) @keyparam erase flag indicating that coverage info should be cleared first (boolean) """ wd = self.translate(wd, False) fn = self.translate(os.path.abspath(unicode(fn)), False) self.__sendCommand('%s%s@@%s@@%s@@%d\n' % \ (RequestCoverage, unicode(wd), unicode(fn), unicode(Utilities.parseOptionString(argv)), erase)) def remoteProfile(self, fn, argv, wd, erase = False): """ Public method to load a new program to collect profiling data. @param fn the filename to run (string) @param argv the commandline arguments to pass to the program (string or QString) @param wd the working directory for the program (string) @keyparam erase flag indicating that timing info should be cleared first (boolean) """ wd = self.translate(wd, False) fn = self.translate(os.path.abspath(unicode(fn)), False) self.__sendCommand('%s%s|%s|%s|%d\n' % \ (RequestProfile, unicode(wd), unicode(fn), unicode(Utilities.parseOptionString(argv)), erase)) def remoteStatement(self, stmt): """ Public method to execute a Python statement. @param stmt the Python statement to execute (string). It should not have a trailing newline. """ self.__sendCommand('%s\n' % stmt) self.__sendCommand(RequestOK + '\n') def remoteStep(self): """ Public method to single step the debugged program. """ self.__sendCommand(RequestStep + '\n') def remoteStepOver(self): """ Public method to step over the debugged program. """ self.__sendCommand(RequestStepOver + '\n') def remoteStepOut(self): """ Public method to step out the debugged program. """ self.__sendCommand(RequestStepOut + '\n') def remoteStepQuit(self): """ Public method to stop the debugged program. """ self.__sendCommand(RequestStepQuit + '\n') def remoteContinue(self, special = False): """ Public method to continue the debugged program. @param special flag indicating a special continue operation """ self.__sendCommand('%s%d\n' % (RequestContinue, special)) def remoteBreakpoint(self, fn, line, set, cond = None, temp = False): """ Public method to set or clear a breakpoint. @param fn filename the breakpoint belongs to (string) @param line linenumber of the breakpoint (int) @param set flag indicating setting or resetting a breakpoint (boolean) @param cond condition of the breakpoint (string) @param temp flag indicating a temporary breakpoint (boolean) """ fn = self.translate(fn, False) self.__sendCommand('%s%s@@%d@@%d@@%d@@%s\n' % \ (RequestBreak, fn, line, temp, set, cond)) def remoteBreakpointEnable(self, fn, line, enable): """ Public method to enable or disable a breakpoint. @param fn filename the breakpoint belongs to (string) @param line linenumber of the breakpoint (int) @param enable flag indicating enabling or disabling a breakpoint (boolean) """ fn = self.translate(fn, False) self.__sendCommand('%s%s,%d,%d\n' % (RequestBreakEnable, fn, line, enable)) def remoteBreakpointIgnore(self, fn, line, count): """ Public method to ignore a breakpoint the next couple of occurrences. @param fn filename the breakpoint belongs to (string) @param line linenumber of the breakpoint (int) @param count number of occurrences to ignore (int) """ fn = self.translate(fn, False) self.__sendCommand('%s%s,%d,%d\n' % (RequestBreakIgnore, fn, line, count)) def remoteWatchpoint(self, cond, set, temp = False): """ Public method to set or clear a watch expression. @param cond expression of the watch expression (string) @param set flag indicating setting or resetting a watch expression (boolean) @param temp flag indicating a temporary watch expression (boolean) """ # cond is combination of cond and special (s. watch expression viewer) self.__sendCommand('%s%s@@%d@@%d\n' % (RequestWatch, cond, temp, set)) def remoteWatchpointEnable(self, cond, enable): """ Public method to enable or disable a watch expression. @param cond expression of the watch expression (string) @param enable flag indicating enabling or disabling a watch expression (boolean) """ # cond is combination of cond and special (s. watch expression viewer) self.__sendCommand('%s%s,%d\n' % (RequestWatchEnable, cond, enable)) def remoteWatchpointIgnore(self, cond, count): """ Public method to ignore a watch expression the next couple of occurrences. @param cond expression of the watch expression (string) @param count number of occurrences to ignore (int) """ # cond is combination of cond and special (s. watch expression viewer) self.__sendCommand('%s%s,%d\n' % (RequestWatchIgnore, cond, count)) def remoteRawInput(self,s): """ Public method to send the raw input to the debugged program. @param s the raw input (string) """ self.__sendCommand(s + '\n') def remoteThreadList(self): """ Public method to request the list of threads from the client. """ self.__sendCommand('%s\n' % RequestThreadList) def remoteSetThread(self, tid): """ Public method to request to set the given thread as current thread. @param tid id of the thread (integer) """ self.__sendCommand('%s%d\n' % (RequestThreadSet, tid)) def remoteClientVariables(self, scope, filter, framenr = 0): """ Public method to request the variables of the debugged program. @param scope the scope of the variables (0 = local, 1 = global) @param filter list of variable types to filter out (list of int) @param framenr framenumber of the variables to retrieve (int) """ self.__sendCommand('%s%d, %d, %s\n' % \ (RequestVariables, framenr, scope, unicode(filter))) def remoteClientVariable(self, scope, filter, var, framenr = 0): """ Public method to request the variables of the debugged program. @param scope the scope of the variables (0 = local, 1 = global) @param filter list of variable types to filter out (list of int) @param var list encoded name of variable to retrieve (string) @param framenr framenumber of the variables to retrieve (int) """ self.__sendCommand('%s%s, %d, %d, %s\n' % \ (RequestVariable, unicode(var), framenr, scope, str(filter))) def remoteClientSetFilter(self, scope, filter): """ Public method to set a variables filter list. @param scope the scope of the variables (0 = local, 1 = global) @param filter regexp string for variable names to filter out (string) """ self.__sendCommand('%s%d, "%s"\n' % (RequestSetFilter, scope, filter)) def remoteEval(self, arg): """ Public method to evaluate arg in the current context of the debugged program. @param arg the arguments to evaluate (string) """ self.__sendCommand('%s%s\n' % (RequestEval, arg)) def remoteExec(self, stmt): """ Public method to execute stmt in the current context of the debugged program. @param stmt statement to execute (string) """ self.__sendCommand('%s%s\n' % (RequestExec, stmt)) def remoteBanner(self): """ Public slot to get the banner info of the remote client. """ self.__sendCommand(RequestBanner + '\n') def remoteCapabilities(self): """ Public slot to get the debug clients capabilities. """ self.__sendCommand(RequestCapabilities + '\n') def remoteCompletion(self, text): """ Public slot to get the a list of possible commandline completions from the remote client. @param text the text to be completed (string or QString) """ self.__sendCommand("%s%s\n" % (RequestCompletion, text)) def remoteUTPrepare(self, fn, tn, tfn, cov, covname, coverase): """ Public method to prepare a new unittest run. @param fn the filename to load (string) @param tn the testname to load (string) @param tfn the test function name to load tests from (string) @param cov flag indicating collection of coverage data is requested @param covname filename to be used to assemble the coverage caches filename @param coverase flag indicating erasure of coverage data is requested """ fn = self.translate(os.path.abspath(unicode(fn)), False) self.__sendCommand('%s%s|%s|%s|%d|%s|%d\n' % \ (RequestUTPrepare, unicode(fn), unicode(tn), unicode(tfn), cov, unicode(covname), coverase)) def remoteUTRun(self): """ Public method to start a unittest run. """ self.__sendCommand('%s\n' % RequestUTRun) def remoteUTStop(self): """ Public method to stop a unittest run. """ self.__sendCommand('%s\n' % RequestUTStop) def __askForkTo(self): """ Private method to ask the user which branch of a fork to follow. """ selections = [self.trUtf8("Parent Process"), self.trUtf8("Child process")] res, ok = KQInputDialog.getItem(\ None, self.trUtf8("Client forking"), self.trUtf8("Select the fork branch to follow."), selections, 0, False) if not ok or res == selections[0]: self.__sendCommand(ResponseForkTo + 'parent\n') else: self.__sendCommand(ResponseForkTo + 'child\n') def __parseClientLine(self): """ Private method to handle data from the client. """ while self.qsock and self.qsock.canReadLine(): qs = self.qsock.readLine() if self.codec is not None: us = self.codec.fromUnicode(QString(qs)) else: us = qs line = str(us) if line.endswith(EOT): line = line[:-len(EOT)] if not line: continue ## print "Server: ", line ##debug eoc = line.find('<') + 1 # Deal with case where user has written directly to stdout # or stderr, but not line terminated and we stepped over the # write call, in that case the >line< will not be the first # string read from the socket... boc = line.find('>') if boc > 0 and eoc > boc: self.debugServer.clientOutput(line[:boc]) line = line[boc:] eoc = line.find('<') + 1 boc = line.find('>') if boc >= 0 and eoc > boc: resp = line[boc:eoc] if resp == ResponseLine or resp == ResponseStack: stack = eval(line[eoc:-1]) for s in stack: s[0] = self.translate(s[0], True) cf = stack[0] if self.__autoContinue: self.__autoContinue = False QTimer.singleShot(0, self.remoteContinue) else: self.debugServer.clientLine(cf[0], int(cf[1]), resp == ResponseStack) self.debugServer.clientStack(stack) continue if resp == ResponseThreadList: currentId, threadList = eval(line[eoc:-1]) self.debugServer.clientThreadList(currentId, threadList) continue if resp == ResponseThreadSet: self.debugServer.clientThreadSet() continue if resp == ResponseVariables: vlist = eval(line[eoc:-1]) scope = vlist[0] try: variables = vlist[1:] except IndexError: variables = [] self.debugServer.clientVariables(scope, variables) continue if resp == ResponseVariable: vlist = eval(line[eoc:-1]) scope = vlist[0] try: variables = vlist[1:] except IndexError: variables = [] self.debugServer.clientVariable(scope, variables) continue if resp == ResponseOK: self.debugServer.clientStatement(False) continue if resp == ResponseContinue: self.debugServer.clientStatement(True) continue if resp == ResponseException: exc = line[eoc:-1] exc = self.translate(exc, True) try: exclist = eval(exc) exctype = exclist[0] excmessage = exclist[1] stack = exclist[2:] if stack and stack[0] and stack[0][0] == "": stack = [] except (IndexError, ValueError, SyntaxError): exctype = None excmessage = '' stack = [] self.debugServer.clientException(exctype, excmessage, stack) continue if resp == ResponseSyntax: exc = line[eoc:-1] exc = self.translate(exc, True) try: message, (fn, ln, cn) = eval(exc) if fn is None: fn = '' except (IndexError, ValueError): message = None fn = '' ln = 0 cn = 0 if cn is None: cn = 0 self.debugServer.clientSyntaxError(message, fn, ln, cn) continue if resp == ResponseExit: self.debugServer.clientExit(line[eoc:-1]) continue if resp == ResponseClearBreak: fn, lineno = line[eoc:-1].split(',') lineno = int(lineno) fn = self.translate(fn, True) self.debugServer.clientClearBreak(fn, lineno) continue if resp == ResponseBPConditionError: fn, lineno = line[eoc:-1].split(',') lineno = int(lineno) fn = self.translate(fn, True) self.debugServer.clientBreakConditionError(fn, lineno) continue if resp == ResponseClearWatch: cond = line[eoc:-1] self.debugServer.clientClearWatch(cond) continue if resp == ResponseWPConditionError: cond = line[eoc:-1] self.debugServer.clientWatchConditionError(cond) continue if resp == ResponseRaw: prompt, echo = eval(line[eoc:-1]) self.debugServer.clientRawInput(prompt, echo) continue if resp == ResponseBanner: version, platform, dbgclient = eval(line[eoc:-1]) self.debugServer.clientBanner(version, platform, dbgclient) continue if resp == ResponseCapabilities: cap, clType = eval(line[eoc:-1]) self.clientCapabilities = cap self.debugServer.clientCapabilities(cap, clType) continue if resp == ResponseCompletion: clstring, text = line[eoc:-1].split('||') cl = eval(clstring) self.debugServer.clientCompletionList(cl, text) continue if resp == PassiveStartup: fn, exc = line[eoc:-1].split('|') exc = bool(exc) fn = self.translate(fn, True) self.debugServer.passiveStartUp(fn, exc) continue if resp == ResponseUTPrepared: res, exc_type, exc_value = eval(line[eoc:-1]) self.debugServer.clientUtPrepared(res, exc_type, exc_value) continue if resp == ResponseUTStartTest: testname, doc = eval(line[eoc:-1]) self.debugServer.clientUtStartTest(testname, doc) continue if resp == ResponseUTStopTest: self.debugServer.clientUtStopTest() continue if resp == ResponseUTTestFailed: testname, traceback = eval(line[eoc:-1]) self.debugServer.clientUtTestFailed(testname, traceback) continue if resp == ResponseUTTestErrored: testname, traceback = eval(line[eoc:-1]) self.debugServer.clientUtTestErrored(testname, traceback) continue if resp == ResponseUTFinished: self.debugServer.clientUtFinished() continue if resp == RequestForkTo: self.__askForkTo() continue self.debugServer.clientOutput(line) def __sendCommand(self, cmd): """ Private method to send a single line command to the client. @param cmd command to send to the debug client (string) """ if self.qsock is not None: self.qsock.write(cmd.encode('utf8')) else: self.queue.append(cmd) eric4-4.5.18/eric/Debugger/PaxHeaders.8617/EditWatchpointDialog.py0000644000175000001440000000013212261012651022651 xustar000000000000000030 mtime=1388582313.114091211 30 atime=1389081083.830724384 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Debugger/EditWatchpointDialog.py0000644000175000001440000000742412261012651022412 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Module implementing a dialog to edit watch expression properties. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from Ui_EditWatchpointDialog import Ui_EditWatchpointDialog class EditWatchpointDialog(QDialog, Ui_EditWatchpointDialog): """ Class implementing a dialog to edit watch expression properties. """ def __init__(self, properties, parent = None, name = None, modal = False): """ Constructor @param properties properties for the watch expression (tuple) (expression, temporary flag, enabled flag, ignore count, special condition) @param parent the parent of this dialog @param name the widget name of this dialog @param modal flag indicating a modal dialog """ QDialog.__init__(self,parent) self.setupUi(self) if name: self.setObjectName(name) self.setModal(modal) self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(False) # connect our widgets self.connect(self.conditionEdit, SIGNAL("textChanged(const QString &)"), self.__textChanged) self.connect(self.specialEdit, SIGNAL("textChanged(const QString &)"), self.__textChanged) cond, temp, enabled, count, special = properties # set the condition if special.isEmpty(): self.conditionButton.setChecked(True) self.conditionEdit.setText(cond) else: self.specialButton.setChecked(True) self.specialEdit.setText(cond) ind = self.specialCombo.findText(special) if ind == -1: ind = 0 self.specialCombo.setCurrentIndex(ind) # set the ignore count self.ignoreSpinBox.setValue(count) # set the checkboxes self.temporaryCheckBox.setChecked(temp) self.enabledCheckBox.setChecked(enabled) if special.isEmpty(): self.conditionEdit.setFocus() else: self.specialEdit.setFocus() def __textChanged(self, txt): """ Private slot to handle the text changed signal of the condition line edit. @param txt text of the line edit (QString) """ if self.conditionButton.isChecked(): self.buttonBox.button(QDialogButtonBox.Ok)\ .setEnabled(not self.conditionEdit.text().isEmpty()) elif self.specialButton.isChecked(): self.buttonBox.button(QDialogButtonBox.Ok)\ .setEnabled(not self.specialEdit.text().isEmpty()) else: # should not happen self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(False) def getData(self): """ Public method to retrieve the entered data. @return a tuple containing the watch expressions new properties (expression, temporary flag, enabled flag, ignore count, special condition) """ if self.conditionButton.isChecked(): return (self.conditionEdit.text(), self.temporaryCheckBox.isChecked(), self.enabledCheckBox.isChecked(), self.ignoreSpinBox.value(), QString("")) elif self.specialButton.isChecked(): return (self.specialEdit.text(), self.temporaryCheckBox.isChecked(), self.enabledCheckBox.isChecked(), self.ignoreSpinBox.value(), self.specialCombo.currentText()) else: # should not happen return (QString(""), False, False, 0, QString("")) eric4-4.5.18/eric/Debugger/PaxHeaders.8617/DebugProtocol.py0000644000175000001440000000013212261012651021353 xustar000000000000000030 mtime=1388582313.116091236 30 atime=1389081083.830724384 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Debugger/DebugProtocol.py0000644000175000001440000000512212261012651021105 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module defining the debug protocol tokens. """ # The protocol "words". RequestOK = '>OK?<' RequestEnv = '>Environment<' RequestCapabilities = '>Capabilities<' RequestLoad = '>Load<' RequestRun = '>Run<' RequestCoverage = '>Coverage<' RequestProfile = '>Profile<' RequestContinue = '>Continue<' RequestStep = '>Step<' RequestStepOver = '>StepOver<' RequestStepOut = '>StepOut<' RequestStepQuit = '>StepQuit<' RequestBreak = '>Break<' RequestBreakEnable = '>EnableBreak<' RequestBreakIgnore = '>IgnoreBreak<' RequestWatch = '>Watch<' RequestWatchEnable = '>EnableWatch<' RequestWatchIgnore = '>IgnoreWatch<' RequestVariables = '>Variables<' RequestVariable = '>Variable<' RequestSetFilter = '>SetFilter<' RequestThreadList = '>ThreadList<' RequestThreadSet = '>ThreadSet<' RequestEval = '>Eval<' RequestExec = '>Exec<' RequestShutdown = '>Shutdown<' RequestBanner = '>Banner<' RequestCompletion = '>Completion<' RequestUTPrepare = '>UTPrepare<' RequestUTRun = '>UTRun<' RequestUTStop = '>UTStop<' RequestForkTo = '>ForkTo<' RequestForkMode = '>ForkMode<' ResponseOK = '>OK<' ResponseCapabilities = RequestCapabilities ResponseContinue = '>Continue<' ResponseException = '>Exception<' ResponseSyntax = '>SyntaxError<' ResponseExit = '>Exit<' ResponseLine = '>Line<' ResponseRaw = '>Raw<' ResponseClearBreak = '>ClearBreak<' ResponseBPConditionError = '>BPConditionError<' ResponseClearWatch = '>ClearWatch<' ResponseWPConditionError = '>WPConditionError<' ResponseVariables = RequestVariables ResponseVariable = RequestVariable ResponseThreadList = RequestThreadList ResponseThreadSet = RequestThreadSet ResponseStack = '>CurrentStack<' ResponseBanner = RequestBanner ResponseCompletion = RequestCompletion ResponseUTPrepared = '>UTPrepared<' ResponseUTStartTest = '>UTStartTest<' ResponseUTStopTest = '>UTStopTest<' ResponseUTTestFailed = '>UTTestFailed<' ResponseUTTestErrored = '>UTTestErrored<' ResponseUTFinished = '>UTFinished<' ResponseForkTo = RequestForkTo PassiveStartup = '>PassiveStartup<' EOT = '>EOT<\n' eric4-4.5.18/eric/Debugger/PaxHeaders.8617/VariableDetailDialog.ui0000644000175000001440000000007411072435332022571 xustar000000000000000030 atime=1389081083.840724383 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Debugger/VariableDetailDialog.ui0000644000175000001440000000564511072435332022330 0ustar00detlevusers00000000000000 VariableDetailDialog 0 0 800 350 Variable Details true true Qt::Horizontal QDialogButtonBox::Ok Name: true true Type: Value: Qt::AlignTop true false qPixmapFromMimeSource eName eType eValue buttonBox accepted() VariableDetailDialog accept() 19 260 22 280 buttonBox rejected() VariableDetailDialog reject() 106 258 106 280 eric4-4.5.18/eric/Debugger/PaxHeaders.8617/Config.py0000644000175000001440000000013212261012651020010 xustar000000000000000030 mtime=1388582313.118091261 30 atime=1389081083.840724383 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Debugger/Config.py0000644000175000001440000000562412261012651017551 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2002 - 2014 Detlev Offenbach # """ Module defining the different Python types and their display strings. """ from DebugClients.Python.DebugConfig import ConfigVarTypeStrings try: from PyQt4.QtCore import QT_TRANSLATE_NOOP # Variables type definition ConfigVarTypeDispStrings = [ QT_TRANSLATE_NOOP('Variable Types', 'Hidden Attributes'), QT_TRANSLATE_NOOP('Variable Types', 'None'), QT_TRANSLATE_NOOP('Variable Types', 'Type'), QT_TRANSLATE_NOOP('Variable Types', 'Boolean'), QT_TRANSLATE_NOOP('Variable Types', 'Integer'), QT_TRANSLATE_NOOP('Variable Types', 'Long Integer'), QT_TRANSLATE_NOOP('Variable Types', 'Float'), QT_TRANSLATE_NOOP('Variable Types', 'Complex'), QT_TRANSLATE_NOOP('Variable Types', 'String'), QT_TRANSLATE_NOOP('Variable Types', 'Unicode String'), QT_TRANSLATE_NOOP('Variable Types', 'Tuple'), QT_TRANSLATE_NOOP('Variable Types', 'List/Array'), QT_TRANSLATE_NOOP('Variable Types', 'Dictionary/Hash/Map'), QT_TRANSLATE_NOOP('Variable Types', 'Dictionary Proxy'), QT_TRANSLATE_NOOP('Variable Types', 'Set'), QT_TRANSLATE_NOOP('Variable Types', 'File'), QT_TRANSLATE_NOOP('Variable Types', 'X Range'), QT_TRANSLATE_NOOP('Variable Types', 'Slice'), QT_TRANSLATE_NOOP('Variable Types', 'Buffer'), QT_TRANSLATE_NOOP('Variable Types', 'Class'), QT_TRANSLATE_NOOP('Variable Types', 'Class Instance'), QT_TRANSLATE_NOOP('Variable Types', 'Class Method'), QT_TRANSLATE_NOOP('Variable Types', 'Class Property'), QT_TRANSLATE_NOOP('Variable Types', 'Generator'), QT_TRANSLATE_NOOP('Variable Types', 'Function'), QT_TRANSLATE_NOOP('Variable Types', 'Builtin Function'), QT_TRANSLATE_NOOP('Variable Types', 'Code'), QT_TRANSLATE_NOOP('Variable Types', 'Module'), QT_TRANSLATE_NOOP('Variable Types', 'Ellipsis'), QT_TRANSLATE_NOOP('Variable Types', 'Traceback'), QT_TRANSLATE_NOOP('Variable Types', 'Frame'), QT_TRANSLATE_NOOP('Variable Types', 'Other')] except ImportError: # Variables type definition (for non-Qt only) ConfigVarTypeDispStrings = [ 'Hidden Attributes', 'None', 'Type', 'Boolean', 'Integer', 'Long Integer', 'Float', 'Complex', 'String', 'Unicode String', 'Tuple', 'List/Array', 'Dictionary/Hash/Map', 'Dictionary Proxy', 'Set', 'File', 'X Range', 'Slice', 'Buffer', 'Class', 'Class Instance', 'Class Method', 'Class Property', 'Generator', 'Function', 'Builtin Function', 'Code', 'Module', 'Ellipsis', 'Traceback', 'Frame', 'Other'] eric4-4.5.18/eric/Debugger/PaxHeaders.8617/EditWatchpointDialog.ui0000644000175000001440000000007411072435332022647 xustar000000000000000030 atime=1389081083.840724383 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Debugger/EditWatchpointDialog.ui0000644000175000001440000001435011072435332022377 0ustar00detlevusers00000000000000 EditWatchpointDialog 0 0 402 234 Edit Watch Expression true Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok Qt::Horizontal QSizePolicy::Expanding 211 20 Enter an ignore count for the watch expression 9999 Ignore Count: Select, whether the watch expression is enabled Enabled Select whether this is a temporary watch expression Temporary Watch Expression Variable: Expression: true false Enter a variable and select the special condition below false Select a special condition created changed Enter the expression for the watch expression qPixmapFromMimeSource conditionButton conditionEdit specialButton specialEdit specialCombo ignoreSpinBox temporaryCheckBox enabledCheckBox conditionButton toggled(bool) conditionEdit setEnabled(bool) 63 21 143 21 specialButton toggled(bool) specialCombo setEnabled(bool) 56 45 123 73 specialButton toggled(bool) specialEdit setEnabled(bool) 81 46 122 47 buttonBox accepted() EditWatchpointDialog accept() 16 202 16 217 buttonBox rejected() EditWatchpointDialog reject() 87 203 87 218 eric4-4.5.18/eric/Debugger/PaxHeaders.8617/EditBreakpointDialog.ui0000644000175000001440000000007411072435332022625 xustar000000000000000030 atime=1389081083.840724383 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Debugger/EditBreakpointDialog.ui0000644000175000001440000001366111072435332022361 0ustar00detlevusers00000000000000 EditBreakpointDialog 0 0 428 216 Edit Breakpoint true Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok Select, whether the breakpoint is enabled Enabled true Select whether this is a temporary breakpoint Temporary Breakpoint Enter the filename of the breakpoint true true 0 0 Enter or select a condition for the breakpoint true true Enter an ignore count for the breakpoint 9999 Qt::Horizontal QSizePolicy::Expanding 250 20 Enter the linenumber of the breakpoint 1 99999 Qt::Horizontal QSizePolicy::Expanding 200 20 Press to open a file selection dialog ... Linenumber: Filename: Condition: Ignore Count: qPixmapFromMimeSource filenameCombo linenoSpinBox fileButton conditionCombo ignoreSpinBox temporaryCheckBox enabledCheckBox buttonBox accepted() EditBreakpointDialog accept() 21 179 21 201 buttonBox rejected() EditBreakpointDialog reject() 97 187 97 204 eric4-4.5.18/eric/Debugger/PaxHeaders.8617/VariablesViewer.py0000644000175000001440000000013212261012651021675 xustar000000000000000030 mtime=1388582313.126091363 30 atime=1389081083.841724383 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Debugger/VariablesViewer.py0000644000175000001440000006365412261012651021445 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2002 - 2014 Detlev Offenbach # """ Module implementing the variables viewer widget. """ import types from math import log10 import sys from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt.KQApplication import e4App from Config import ConfigVarTypeDispStrings, ConfigVarTypeStrings from VariableDetailDialog import VariableDetailDialog from Utilities import toUnicode import Preferences class VariableItem(QTreeWidgetItem): """ Class implementing the data structure for variable items. """ def __init__(self, parent, dvar, dvalue, dtype): """ Constructor. @param parent reference to the parent item @param dvar variable name (string or QString) @param dvalue value string (string or QString) @param dtype type string (string or QString) """ self.__value = QString(dvalue) if len(dvalue) > 2048: # 1024 * 2 dvalue = QApplication.translate("VariableItem", "") self.__tooltip = QString(dvalue) else: if Qt.mightBeRichText(dvalue): self.__tooltip = Qt.escape(dvalue) else: self.__tooltip = dvalue lines = QString(dvalue).split(QRegExp(r"\r\n|\r|\n")) if len(lines) > 1: # only show the first non-empty line; # indicate skipped lines by <...> at the # beginning and/or end index = 0 while index < len(lines) - 1 and lines[index].isEmpty(): index += 1 dvalue = QString("") if index > 0: dvalue += QString("<...>") dvalue += lines[index] if index < len(lines) - 1: dvalue += QString("<...>") QTreeWidgetItem.__init__(self, parent, QStringList() << dvar << dvalue << dtype) self.populated = True def getValue(self): """ Public method to return the value of the item. @return value of the item (QString) """ return self.__value def data(self, column, role): """ Public method to return the data for the requested role. This implementation changes the original behavior in a way, that the display data is returned as the tooltip for column 1. @param column column number (integer) @param role data role (Qt.ItemDataRole) @return requested data (QVariant) """ if column == 1 and role == Qt.ToolTipRole: return self.__tooltip return QTreeWidgetItem.data(self, column, role) def attachDummy(self): """ Public method to attach a dummy sub item to allow for lazy population. """ QTreeWidgetItem(self, QStringList("DUMMY")) def deleteChildren(self): """ Public method to delete all children (cleaning the subtree). """ for itm in self.takeChildren(): del itm def key(self, column): """ Public method generating the key for this item. @param column the column to sort on (integer) """ return self.text(column) def __lt__(self, other): """ Public method to check, if the item is less than the other one. @param other reference to item to compare against (QTreeWidgetItem) @return true, if this item is less than other (boolean) """ column = self.treeWidget().sortColumn() return self.key(column) < other.key(column) def expand(self): """ Public method to expand the item. Note: This is just a do nothing and should be overwritten. """ return def collapse(self): """ Public method to collapse the item. Note: This is just a do nothing and should be overwritten. """ return class SpecialVarItem(VariableItem): """ Class implementing a VariableItem that represents a special variable node. These special variable nodes are generated for classes, lists, tuples and dictionaries. """ def __init__(self, parent, dvar, dvalue, dtype, frmnr, scope): """ Constructor @param parent parent of this item @param dvar variable name (string or QString) @param dvalue value string (string or QString) @param dtype type string (string or QString) @param frmnr frame number (0 is the current frame) (int) @param scope flag indicating global (1) or local (0) variables """ VariableItem.__init__(self, parent, dvar, dvalue, dtype) self.attachDummy() self.populated = False self.framenr = frmnr self.scope = scope def expand(self): """ Public method to expand the item. """ self.deleteChildren() self.populated = True pathlist = [str(self.text(0))] par = self.parent() # step 1: get a pathlist up to the requested variable while par is not None: pathlist.insert(0, str(par.text(0))) par = par.parent() # step 2: request the variable from the debugger filter = e4App().getObject("DebugUI").variablesFilter(self.scope) e4App().getObject("DebugServer").remoteClientVariable(\ self.scope, filter, pathlist, self.framenr) class ArrayElementVarItem(VariableItem): """ Class implementing a VariableItem that represents an array element. """ def __init__(self, parent, dvar, dvalue, dtype): """ Constructor @param parent parent of this item @param dvar variable name (string or QString) @param dvalue value string (string or QString) @param dtype type string (string or QString) """ VariableItem.__init__(self, parent, dvar, dvalue, dtype) """ Array elements have numbers as names, but the key must be right justified and zero filled to 6 decimal places. Then element 2 will have a key of '000002' and appear before element 10 with a key of '000010' """ keyStr = str(self.text(0)) self.arrayElementKey = QString("%.6d" % int(keyStr)) def key(self, column): """ Public method generating the key for this item. @param column the column to sort on (integer) """ if column == 0: return self.arrayElementKey else: return VariableItem.key(self, column) class SpecialArrayElementVarItem(SpecialVarItem): """ Class implementing a QTreeWidgetItem that represents a special array variable node. """ def __init__(self, parent, dvar, dvalue, dtype, frmnr, scope): """ Constructor @param parent parent of this item @param dvar variable name (string or QString) @param dvalue value string (string or QString) @param dtype type string (string or QString) @param frmnr frame number (0 is the current frame) (int) @param scope flag indicating global (1) or local (0) variables """ SpecialVarItem.__init__(self, parent, dvar, dvalue, dtype, frmnr, scope) """ Array elements have numbers as names, but the key must be right justified and zero filled to 6 decimal places. Then element 2 will have a key of '000002' and appear before element 10 with a key of '000010' """ keyStr = str(self.text(0))[:-2] # strip off [], () or {} self.arrayElementKey = QString("%.6d" % int(keyStr)) def key(self, column): """ Public method generating the key for this item. @param column the column to sort on (integer) """ if column == 0: return self.arrayElementKey else: return SpecialVarItem.key(self, column) class VariablesViewer(QTreeWidget): """ Class implementing the variables viewer widget. This widget is used to display the variables of the program being debugged in a tree. Compound types will be shown with their main entry first. Once the subtree has been expanded, the individual entries will be shown. Double clicking an entry will popup a dialog showing the variables parameters in a more readable form. This is especially useful for lengthy strings. This widget has two modes for displaying the global and the local variables. """ def __init__(self, parent=None, scope=1): """ Constructor @param parent the parent (QWidget) @param scope flag indicating global (1) or local (0) variables """ QTreeWidget.__init__(self, parent) self.indicators = {'list' : '[]', 'tuple' : '()', 'dict' : '{}', # Python types 'Array' : '[]', 'Hash' : '{}'} # Ruby types self.rx_class = QRegExp('<.*(instance|object) at 0x.*>') self.rx_class2 = QRegExp('class .*') self.rx_class3 = QRegExp('') self.dvar_rx_class1 = QRegExp(r'<.*(instance|object) at 0x.*>(\[\]|\{\}|\(\))') self.dvar_rx_class2 = QRegExp(r'(\[\]|\{\}|\(\))') self.dvar_rx_array_element = QRegExp(r'^\d+$') self.dvar_rx_special_array_element = QRegExp(r'^\d+(\[\]|\{\}|\(\))$') self.rx_nonprintable = QRegExp(r"""(\\x\d\d)+""") self.framenr = 0 self.loc = Preferences.getSystem("StringEncoding") self.openItems = [] self.setRootIsDecorated(True) self.setAlternatingRowColors(True) self.setSelectionBehavior(QAbstractItemView.SelectRows) self.scope = scope if scope: self.setWindowTitle(self.trUtf8("Global Variables")) self.setHeaderLabels(QStringList() << \ self.trUtf8("Globals") << \ self.trUtf8("Value") << \ self.trUtf8("Type")) self.setWhatsThis(self.trUtf8( """The Global Variables Viewer Window""" """

    This window displays the global variables""" """ of the debugged program.

    """ )) else: self.setWindowTitle(self.trUtf8("Local Variables")) self.setHeaderLabels(QStringList() << \ self.trUtf8("Locals") << \ self.trUtf8("Value") << \ self.trUtf8("Type")) self.setWhatsThis(self.trUtf8( """The Local Variables Viewer Window""" """

    This window displays the local variables""" """ of the debugged program.

    """ )) header = self.header() header.setSortIndicator(0, Qt.AscendingOrder) header.setSortIndicatorShown(True) header.setClickable(True) header.resizeSection(0, 120) # variable column header.resizeSection(1, 150) # value column self.__createPopupMenus() self.setContextMenuPolicy(Qt.CustomContextMenu) self.connect(self,SIGNAL('customContextMenuRequested(const QPoint &)'), self.__showContextMenu) self.connect(self, SIGNAL("itemExpanded(QTreeWidgetItem *)"), self.__expandItemSignal) self.connect(self, SIGNAL("itemCollapsed(QTreeWidgetItem *)"), self.collapseItem) self.resortEnabled = True def __createPopupMenus(self): """ Private method to generate the popup menus. """ self.menu = QMenu() self.menu.addAction(self.trUtf8("Show Details..."), self.__showDetails) self.menu.addSeparator() self.menu.addAction(self.trUtf8("Configure..."), self.__configure) self.backMenu = QMenu() self.backMenu.addAction(self.trUtf8("Configure..."), self.__configure) def __showContextMenu(self, coord): """ Private slot to show the context menu. @param coord the position of the mouse pointer (QPoint) """ gcoord = self.mapToGlobal(coord) if self.itemAt(coord) is not None: self.menu.popup(gcoord) else: self.backMenu.popup(gcoord) def __findItem(self, slist, column, node=None): """ Private method to search for an item. It is used to find a specific item in column, that is a child of node. If node is None, a child of the QTreeWidget is searched. @param slist searchlist (list of strings or QStrings) @param column index of column to search in (int) @param node start point of the search @return the found item or None """ if node is None: count = self.topLevelItemCount() else: count = node.childCount() for index in range(count): if node is None: itm = self.topLevelItem(index) else: itm = node.child(index) if QString.compare(itm.text(column), slist[0]) == 0: if len(slist) > 1: itm = self.__findItem(slist[1:], column, itm) return itm return None def showVariables(self, vlist, frmnr): """ Public method to show variables in a list. @param vlist the list of variables to be displayed. Each listentry is a tuple of three values.
    • the variable name (string)
    • the variables type (string)
    • the variables value (string)
    @param frmnr frame number (0 is the current frame) (int) """ self.current = self.currentItem() if self.current: self.curpathlist = self.__buildTreePath(self.current) self.clear() self.__scrollToItem = None self.framenr = frmnr if len(vlist): self.resortEnabled = False for (var, vtype, value) in vlist: self.__addItem(None, vtype, var, value) # reexpand tree openItems = self.openItems[:] openItems.sort() self.openItems = [] for itemPath in openItems: itm = self.__findItem(itemPath, 0) if itm is not None: self.expandItem(itm) else: self.openItems.append(itemPath) if self.current: citm = self.__findItem(self.curpathlist, 0) if citm: self.setCurrentItem(citm) self.setItemSelected(citm, True) self.scrollToItem(citm, QAbstractItemView.PositionAtTop) self.current = None self.resortEnabled = True self.__resort() def showVariable(self, vlist): """ Public method to show variables in a list. @param vlist the list of subitems to be displayed. The first element gives the path of the parent variable. Each other listentry is a tuple of three values.
    • the variable name (string)
    • the variables type (string)
    • the variables value (string)
    """ resortEnabled = self.resortEnabled self.resortEnabled = False if self.current is None: self.current = self.currentItem() if self.current: self.curpathlist = self.__buildTreePath(self.current) subelementsAdded = False if vlist: itm = self.__findItem(vlist[0], 0) for var, vtype, value in vlist[1:]: self.__addItem(itm, vtype, var, value) subelementsAdded = True # reexpand tree openItems = self.openItems[:] openItems.sort() self.openItems = [] for itemPath in openItems: itm = self.__findItem(itemPath, 0) if itm is not None and not itm.isExpanded(): if itm.populated: self.blockSignals(True) itm.setExpanded(True) self.blockSignals(False) else: self.expandItem(itm) self.openItems = openItems[:] if self.current: citm = self.__findItem(self.curpathlist, 0) if citm: self.setCurrentItem(citm) self.setItemSelected(citm, True) if self.__scrollToItem: self.scrollToItem(self.__scrollToItem, QAbstractItemView.PositionAtTop) else: self.scrollToItem(citm, QAbstractItemView.PositionAtTop) self.current = None elif self.__scrollToItem: self.scrollToItem(self.__scrollToItem, QAbstractItemView.PositionAtTop) self.resortEnabled = resortEnabled self.__resort() def __generateItem(self, parent, dvar, dvalue, dtype, isSpecial = False): """ Private method used to generate a VariableItem. @param parent parent of the item to be generated @param dvar variable name (string or QString) @param dvalue value string (string or QString) @param dtype type string (string or QString) @param isSpecial flag indicating that a special node should be generated (boolean) @return The item that was generated (VariableItem). """ if isSpecial and \ (self.dvar_rx_class1.exactMatch(dvar) or \ self.dvar_rx_class2.exactMatch(dvar)): isSpecial = False if self.rx_class2.exactMatch(dtype): return SpecialVarItem(parent, dvar, dvalue, dtype[7:-1], self.framenr, self.scope) elif dtype != "void *" and \ (self.rx_class.exactMatch(dvalue) or \ self.rx_class3.exactMatch(dvalue) or \ isSpecial): if self.dvar_rx_special_array_element.exactMatch(dvar): return SpecialArrayElementVarItem(parent, dvar, dvalue, dtype, self.framenr, self.scope) else: return SpecialVarItem(parent, dvar, dvalue, dtype, self.framenr, self.scope) else: if isinstance(dvalue, str): dvalue = QString.fromLocal8Bit( dvalue ) if self.dvar_rx_array_element.exactMatch(dvar): return ArrayElementVarItem(parent, dvar, dvalue, dtype) else: return VariableItem(parent, dvar, dvalue, dtype) def __unicode(self, s): """ Private method to convert a string to unicode. @param s the string to be converted (string) @return unicode representation of s (unicode object) """ if type(s) is type(u""): return s try: u = unicode(s, self.loc) except TypeError: u = str(s) except UnicodeError: u = toUnicode(s) return u def __addItem(self, parent, vtype, var, value): """ Private method used to add an item to the list. If the item is of a type with subelements (i.e. list, dictionary, tuple), these subelements are added by calling this method recursively. @param parent the parent of the item to be added (QTreeWidgetItem or None) @param vtype the type of the item to be added (string) @param var the variable name (string) @param value the value string (string) @return The item that was added to the listview (QTreeWidgetItem). """ if parent is None: parent = self try: dvar = '%s%s' % (var, self.indicators[vtype]) except KeyError: dvar = var dvtype = self.__getDispType(vtype) if vtype in ['list', 'Array', 'tuple', 'dict', 'Hash']: itm = self.__generateItem(parent, dvar, self.trUtf8("%1 items").arg(value), dvtype, True) elif vtype in ['unicode', 'str']: if self.rx_nonprintable.indexIn(value) != -1: sval = value else: try: sval = eval(value) except: sval = value itm = self.__generateItem(parent, dvar, self.__unicode(sval), dvtype) else: itm = self.__generateItem(parent, dvar, value, dvtype) return itm def __getDispType(self, vtype): """ Private method used to get the display string for type vtype. @param vtype the type, the display string should be looked up for (string) @return displaystring (string or QString) """ try: i = ConfigVarTypeStrings.index(vtype) dvtype = self.trUtf8(ConfigVarTypeDispStrings[i]) except ValueError: if vtype == 'classobj': dvtype = self.trUtf8(\ ConfigVarTypeDispStrings[ConfigVarTypeStrings.index('instance')]\ ) else: dvtype = vtype return dvtype def mouseDoubleClickEvent(self, mouseEvent): """ Protected method of QAbstractItemView. Reimplemented to disable expanding/collapsing of items when double-clicking. Instead the double-clicked entry is opened. @param mouseEvent the mouse event object (QMouseEvent) """ itm = self.itemAt(mouseEvent.pos()) self.__showVariableDetails(itm) def __showDetails(self): """ Private slot to show details about the selected variable. """ itm = self.currentItem() self.__showVariableDetails(itm) def __showVariableDetails(self, itm): """ Private method to show details about a variable. @param itm reference to the variable item """ if itm is None: return val = itm.getValue() if val.isEmpty(): return # do not display anything, if the variable has no value vtype = itm.text(2) name = unicode(itm.text(0)) if name[-2:] in ['[]', '{}', '()']: name = name[:-2] par = itm.parent() nlist = [name] # build up the fully qualified name while par is not None: pname = unicode(par.text(0)) if pname[-2:] in ['[]', '{}', '()']: if nlist[0].endswith("."): nlist[0] = '[%s].' % nlist[0][:-1] else: nlist[0] = '[%s]' % nlist[0] nlist.insert(0, pname[:-2]) else: nlist.insert(0, '%s.' % pname) par = par.parent() name = ''.join(nlist) # now show the dialog dlg = VariableDetailDialog(name, vtype, val) dlg.exec_() def __buildTreePath(self, itm): """ Private method to build up a path from the top to an item. @param itm item to build the path for (QTreeWidgetItem) @return list of names denoting the path from the top (list of strings) """ name = unicode(itm.text(0)) pathlist = [name] par = itm.parent() # build up a path from the top to the item while par is not None: pname = unicode(par.text(0)) pathlist.insert(0, pname) par = par.parent() return pathlist[:] def __expandItemSignal(self, parentItem): """ Private slot to handle the expanded signal. @param parentItem reference to the item being expanded (QTreeWidgetItem) """ self.expandItem(parentItem) self.__scrollToItem = parentItem def expandItem(self, parentItem): """ Public slot to handle the expanded signal. @param parentItem reference to the item being expanded (QTreeWidgetItem) """ pathlist = self.__buildTreePath(parentItem) self.openItems.append(pathlist) if parentItem.populated: return try: parentItem.expand() self.__resort() except AttributeError: QTreeWidget.expandItem(self, parentItem) def collapseItem(self, parentItem): """ Public slot to handle the collapsed signal. @param parentItem reference to the item being collapsed (QTreeWidgetItem) """ pathlist = self.__buildTreePath(parentItem) self.openItems.remove(pathlist) try: parentItem.collapse() except AttributeError: QTreeWidget.collapseItem(self, parentItem) def __resort(self): """ Private method to resort the tree. """ if self.resortEnabled: self.sortItems(self.sortColumn(), self.header().sortIndicatorOrder()) def handleResetUI(self): """ Public method to reset the VariablesViewer. """ self.clear() self.openItems = [] def __configure(self): """ Private method to open the configuration dialog. """ e4App().getObject("UserInterface").showPreferences("debuggerGeneralPage") eric4-4.5.18/eric/Debugger/PaxHeaders.8617/VariablesFilterDialog.ui0000644000175000001440000000007411072435332022777 xustar000000000000000030 atime=1389081083.841724383 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Debugger/VariablesFilterDialog.ui0000644000175000001440000000703211072435332022526 0ustar00detlevusers00000000000000 Detlev Offenbach <detlev@die-offenbachs.de> VariablesFilterDialog 0 0 386 338 Variables Type Filter <b>Filter Dialog</b> <p> This dialog gives the user the possibility to select what kind of variables should <b>not</b> be shown during a debugging session.</p> true Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok &Locals Filter localsList &Globals Filter globalsList Locals Filter List <b>Locals Filter List</b> <p>Select the variable types you want to be filtered out of the locals variables list.</p< QAbstractItemView::ExtendedSelection Globals Filter List <b>Globals Filter List</b> <p>Select the variable types you want to be filtered out of the globals variables list.</p< QAbstractItemView::ExtendedSelection qPixmapFromMimeSource localsList globalsList buttonBox accepted() VariablesFilterDialog accept() 14 319 15 332 buttonBox rejected() VariablesFilterDialog reject() 84 317 84 336 eric4-4.5.18/eric/Debugger/PaxHeaders.8617/WatchPointModel.py0000644000175000001440000000013212261012651021644 xustar000000000000000030 mtime=1388582313.131091426 30 atime=1389081083.841724383 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Debugger/WatchPointModel.py0000644000175000001440000002345012261012651021402 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing the Watch expression model. """ from PyQt4.QtCore import * class WatchPointModel(QAbstractItemModel): """ Class implementing a custom model for watch expressions. """ def __init__(self, parent = None): """ Constructor @param reference to the parent widget (QObject) """ QObject.__init__(self, parent) self.watchpoints = [] self.header = [ QVariant(self.trUtf8("Condition")), QVariant(self.trUtf8("Special")), QVariant(self.trUtf8('Temporary')), QVariant(self.trUtf8('Enabled')), QVariant(self.trUtf8('Ignore Count')), ] self.alignments = [QVariant(Qt.Alignment(Qt.AlignLeft)), QVariant(Qt.Alignment(Qt.AlignLeft)), QVariant(Qt.Alignment(Qt.AlignHCenter)), QVariant(Qt.Alignment(Qt.AlignHCenter)), QVariant(Qt.Alignment(Qt.AlignRight)), ] def columnCount(self, parent = QModelIndex()): """ Public method to get the current column count. @return column count (integer) """ return len(self.header) + 1 def rowCount(self, parent = QModelIndex()): """ Public method to get the current row count. @return row count (integer) """ # we do not have a tree, parent should always be invalid if not parent.isValid(): return len(self.watchpoints) else: return 0 def data(self, index, role): """ Public method to get the requested data. @param index index of the requested data (QModelIndex) @param role role of the requested data (Qt.ItemDataRole) @return the requested data (QVariant) """ if not index.isValid(): return QVariant() if role == Qt.DisplayRole or role == Qt.ToolTipRole: if index.column() < len(self.header): return QVariant(self.watchpoints[index.row()][index.column()]) if role == Qt.TextAlignmentRole: if index.column() < len(self.alignments): return self.alignments[index.column()] return QVariant() def flags(self, index): """ Public method to get item flags. @param index index of the requested flags (QModelIndex) @return item flags for the given index (Qt.ItemFlags) """ if not index.isValid(): return Qt.ItemIsEnabled return Qt.ItemIsEnabled | Qt.ItemIsSelectable def headerData(self, section, orientation, role = Qt.DisplayRole): """ Public method to get header data. @param section section number of the requested header data (integer) @param orientation orientation of the header (Qt.Orientation) @param role role of the requested data (Qt.ItemDataRole) @return header data (QVariant) """ if orientation == Qt.Horizontal and role == Qt.DisplayRole: if section >= len(self.header): return QVariant("") else: return self.header[section] return QVariant() def index(self, row, column, parent = QModelIndex()): """ Public method to create an index. @param row row number for the index (integer) @param column column number for the index (integer) @param parent index of the parent item (QModelIndex) @return requested index (QModelIndex) """ if parent.isValid() or \ row < 0 or row >= len(self.watchpoints) or \ column < 0 or column >= len(self.header): return QModelIndex() return self.createIndex(row, column, self.watchpoints[row]) def parent(self, index): """ Public method to get the parent index. @param index index of item to get parent (QModelIndex) @return index of parent (QModelIndex) """ return QModelIndex() def hasChildren(self, parent = QModelIndex()): """ Public method to check for the presence of child items. @param parent index of parent item (QModelIndex) @return flag indicating the presence of child items (boolean) """ if not parent.isValid(): return len(self.watchpoints) > 0 else: return False ############################################################################ def addWatchPoint(self, cond, special, properties): """ Public method to add a new watch expression to the list. @param cond expression of the watch expression (string or QString) @param special special condition of the watch expression (string or QString) @param properties properties of the watch expression (tuple of temporary flag (bool), enabled flag (bool), ignore count (integer)) """ wp = [unicode(cond), unicode(special)] + list(properties) cnt = len(self.watchpoints) self.beginInsertRows(QModelIndex(), cnt, cnt) self.watchpoints.append(wp) self.endInsertRows() def setWatchPointByIndex(self, index, cond, special, properties): """ Public method to set the values of a watch expression given by index. @param index index of the watch expression (QModelIndex) @param cond expression of the watch expression (string or QString) @param special special condition of the watch expression (string or QString) @param properties properties of the watch expression (tuple of temporary flag (bool), enabled flag (bool), ignore count (integer)) """ if index.isValid(): row = index.row() index1 = self.createIndex(row, 0, self.watchpoints[row]) index2 = self.createIndex(row, len(self.watchpoints[row]), self.watchpoints[row]) self.emit(\ SIGNAL("dataAboutToBeChanged(const QModelIndex &, const QModelIndex &)"), index1, index2) i = 0 for value in [unicode(cond), unicode(special)] + list(properties): self.watchpoints[row][i] = value i += 1 self.emit(SIGNAL("dataChanged(const QModelIndex &, const QModelIndex &)"), index1, index2) def setWatchPointEnabledByIndex(self, index, enabled): """ Public method to set the enabled state of a watch expression given by index. @param index index of the watch expression (QModelIndex) @param enabled flag giving the enabled state (boolean) """ if index.isValid(): row = index.row() col = 3 index1 = self.createIndex(row, col, self.watchpoints[row]) self.emit(\ SIGNAL("dataAboutToBeChanged(const QModelIndex &, const QModelIndex &)"), index1, index1) self.watchpoints[row][col] = enabled self.emit(SIGNAL("dataChanged(const QModelIndex &, const QModelIndex &)"), index1, index1) def deleteWatchPointByIndex(self, index): """ Public method to set the values of a watch expression given by index. @param index index of the watch expression (QModelIndex) """ if index.isValid(): row = index.row() self.beginRemoveRows(QModelIndex(), row, row) del self.watchpoints[row] self.endRemoveRows() def deleteWatchPoints(self, idxList): """ Public method to delete a list of watch expressions given by their indexes. @param idxList list of watch expression indexes (list of QModelIndex) """ rows = [] for index in idxList: if index.isValid(): rows.append(index.row()) rows.sort(reverse = True) for row in rows: self.beginRemoveRows(QModelIndex(), row, row) del self.watchpoints[row] self.endRemoveRows() def deleteAll(self): """ Public method to delete all watch expressions. """ if self.watchpoints: self.beginRemoveRows(QModelIndex(), 0, len(self.watchpoints) - 1) self.watchpoints = [] self.endRemoveRows() def getWatchPointByIndex(self, index): """ Public method to get the values of a watch expression given by index. @param index index of the watch expression (QModelIndex) @return watch expression (list of six values (expression, special condition, temporary flag, enabled flag, ignore count, index)) """ if index.isValid(): return self.watchpoints[index.row()][:] # return a copy else: return [] def getWatchPointIndex(self, cond, special = ""): """ Public method to get the index of a watch expression given by expression. @param cond expression of the watch expression (string or QString) @param special special condition of the watch expression (string or QString) @return index (QModelIndex) """ cond = unicode(cond) special = unicode(special) for row in range(len(self.watchpoints)): wp = self.watchpoints[row] if unicode(wp[0]) == cond: if special and unicode(wp[1]) != special: continue return self.createIndex(row, 0, self.watchpoints[row]) return QModelIndex() eric4-4.5.18/eric/Debugger/PaxHeaders.8617/VariableDetailDialog.py0000644000175000001440000000013212261012651022573 xustar000000000000000030 mtime=1388582313.133091451 30 atime=1389081083.842724384 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Debugger/VariableDetailDialog.py0000644000175000001440000000203612261012651022326 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Module implementing the variable detail dialog. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from Ui_VariableDetailDialog import Ui_VariableDetailDialog class VariableDetailDialog(QDialog, Ui_VariableDetailDialog): """ Class implementing the variable detail dialog. This dialog shows the name, the type and the value of a variable in a read only dialog. It is opened upon a double click in the variables viewer widget. """ def __init__(self, var, vtype, value): """ Constructor @param var the variables name (string or QString) @param vtype the variables type (string or QString) @param value the variables value (string or QString) """ QDialog.__init__(self) self.setupUi(self) # set the different fields self.eName.setText(var) self.eType.setText(vtype) self.eValue.setPlainText(value) eric4-4.5.18/eric/Debugger/PaxHeaders.8617/VariablesFilterDialog.py0000644000175000001440000000013212261012651023001 xustar000000000000000030 mtime=1388582313.135091477 30 atime=1389081083.854724384 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Debugger/VariablesFilterDialog.py0000644000175000001440000000641412261012651022540 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2002 - 2014 Detlev Offenbach # """ Module implementing the variables filter dialog. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from Debugger.Config import ConfigVarTypeDispStrings import Preferences from Ui_VariablesFilterDialog import Ui_VariablesFilterDialog class VariablesFilterDialog(QDialog, Ui_VariablesFilterDialog): """ Class implementing the variables filter dialog. It opens a dialog window for the configuration of the variables type filter to be applied during a debugging session. """ def __init__(self, parent = None, name = None, modal = False): """ Constructor @param parent parent widget of this dialog (QWidget) @param name name of this dialog (string or QString) @param modal flag to indicate a modal dialog (boolean) """ QDialog.__init__(self,parent) if name: self.setObjectName(name) self.setModal(modal) self.setupUi(self) self.defaultButton = self.buttonBox.addButton(\ self.trUtf8("Save Default"), QDialogButtonBox.ActionRole) lDefaultFilter, gDefaultFilter = Preferences.getVarFilters() #populate the listboxes and set the default selection for lb in self.localsList, self.globalsList: for ts in ConfigVarTypeDispStrings: lb.addItem(self.trUtf8(ts)) for filterIndex in lDefaultFilter: itm = self.localsList.item(filterIndex) self.localsList.setItemSelected(itm, True) for filterIndex in gDefaultFilter: itm = self.globalsList.item(filterIndex) self.globalsList.setItemSelected(itm, True) def getSelection(self): """ Public slot to retrieve the current selections. @return A tuple of lists of integer values. The first list is the locals variables filter, the second the globals variables filter. """ lList = [] gList = [] for i in range(self.localsList.count()): itm = self.localsList.item(i) if self.localsList.isItemSelected(itm): lList.append(i) for i in range(self.globalsList.count()): itm = self.globalsList.item(i) if self.globalsList.isItemSelected(itm): gList.append(i) return (lList, gList) def setSelection(self, lList, gList): """ Public slot to set the current selection. @param lList local variables filter (list of int) @param gList global variables filter (list of int) """ for filterIndex in lList: itm = self.localsList.item(filterIndex) self.localsList.setItemSelected(itm, True) for filterIndex in gList: itm = self.globalsList.item(filterIndex) self.globalsList.setItemSelected(itm, True) def on_buttonBox_clicked(self, button): """ Private slot called by a button of the button box clicked. @param button button that was clicked (QAbstractButton) """ if button == self.defaultButton: Preferences.setVarFilters(self.getSelection()) eric4-4.5.18/eric/Debugger/PaxHeaders.8617/DebuggerInterfaceNone.py0000644000175000001440000000013212261012651022770 xustar000000000000000030 mtime=1388582313.138091515 30 atime=1389081083.854724384 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Debugger/DebuggerInterfaceNone.py0000644000175000001440000003112012261012651022517 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing a dummy debugger interface for the debug server. """ from PyQt4.QtCore import * ClientDefaultCapabilities = 0 ClientTypeAssociations = [] def getRegistryData(): """ Module functionto get characterising data for the debugger interface. @return list of the following data. Client type (string), client capabilities (integer), client type association (list of strings) """ return ["None", ClientDefaultCapabilities, ClientTypeAssociations] class DebuggerInterfaceNone(QObject): """ Class implementing a dummy debugger interface for the debug server. """ def __init__(self, debugServer, passive): """ Constructor @param debugServer reference to the debug server (DebugServer) @param passive flag indicating passive connection mode (boolean) """ QObject.__init__(self) self.debugServer = debugServer self.passive = passive self.qsock = None self.queue = [] # set default values for capabilities of clients self.clientCapabilities = ClientDefaultCapabilities def startRemote(self, port, runInConsole): """ Public method to start a remote Python interpreter. @param port portnumber the debug server is listening on (integer) @param runInConsole flag indicating to start the debugger in a console window (boolean) @return client process object (QProcess) and a flag to indicate a network connection (boolean) """ return None, True def startRemoteForProject(self, port, runInConsole): """ Public method to start a remote Python interpreter for a project. @param port portnumber the debug server is listening on (integer) @param runInConsole flag indicating to start the debugger in a console window (boolean) @return client process object (QProcess) and a flag to indicate a network connection (boolean) """ return None, True def getClientCapabilities(self): """ Public method to retrieve the debug clients capabilities. @return debug client capabilities (integer) """ return self.clientCapabilities def newConnection(self, sock): """ Public slot to handle a new connection. @param sock reference to the socket object (QTcpSocket) @return flag indicating success (boolean) """ return False def flush(self): """ Public slot to flush the queue. """ self.queue = [] def shutdown(self): """ Public method to cleanly shut down. It closes our socket and shuts down the debug client. (Needed on Win OS) """ self.qsock = None self.queue = [] def isConnected(self): """ Public method to test, if a debug client has connected. @return flag indicating the connection status (boolean) """ return self.qsock is not None def remoteEnvironment(self, env): """ Public method to set the environment for a program to debug, run, ... @param env environment settings (dictionary) """ return def remoteLoad(self, fn, argv, wd, traceInterpreter = False, autoContinue = True, autoFork = False, forkChild = False): """ Public method to load a new program to debug. @param fn the filename to debug (string) @param argv the commandline arguments to pass to the program (string or QString) @param wd the working directory for the program (string) @keyparam traceInterpreter flag indicating if the interpreter library should be traced as well (boolean) @keyparam autoContinue flag indicating, that the debugger should not stop at the first executable line (boolean) @keyparam autoFork flag indicating the automatic fork mode (boolean) @keyparam forkChild flag indicating to debug the child after forking (boolean) """ return def remoteRun(self, fn, argv, wd, autoFork = False, forkChild = False): """ Public method to load a new program to run. @param fn the filename to run (string) @param argv the commandline arguments to pass to the program (string or QString) @param wd the working directory for the program (string) @keyparam autoFork flag indicating the automatic fork mode (boolean) @keyparam forkChild flag indicating to debug the child after forking (boolean) """ return def remoteCoverage(self, fn, argv, wd, erase = False): """ Public method to load a new program to collect coverage data. @param fn the filename to run (string) @param argv the commandline arguments to pass to the program (string or QString) @param wd the working directory for the program (string) @keyparam erase flag indicating that coverage info should be cleared first (boolean) """ return def remoteProfile(self, fn, argv, wd, erase = False): """ Public method to load a new program to collect profiling data. @param fn the filename to run (string) @param argv the commandline arguments to pass to the program (string or QString) @param wd the working directory for the program (string) @keyparam erase flag indicating that timing info should be cleared first (boolean) """ return def remoteStatement(self, stmt): """ Public method to execute a Python statement. @param stmt the Python statement to execute (string). It should not have a trailing newline. """ self.debugServer.clientStatement(False) return def remoteStep(self): """ Public method to single step the debugged program. """ return def remoteStepOver(self): """ Public method to step over the debugged program. """ return def remoteStepOut(self): """ Public method to step out the debugged program. """ return def remoteStepQuit(self): """ Public method to stop the debugged program. """ return def remoteContinue(self, special = False): """ Public method to continue the debugged program. @param special flag indicating a special continue operation """ return def remoteBreakpoint(self, fn, line, set, cond = None, temp = False): """ Public method to set or clear a breakpoint. @param fn filename the breakpoint belongs to (string) @param line linenumber of the breakpoint (int) @param set flag indicating setting or resetting a breakpoint (boolean) @param cond condition of the breakpoint (string) @param temp flag indicating a temporary breakpoint (boolean) """ return def remoteBreakpointEnable(self, fn, line, enable): """ Public method to enable or disable a breakpoint. @param fn filename the breakpoint belongs to (string) @param line linenumber of the breakpoint (int) @param enable flag indicating enabling or disabling a breakpoint (boolean) """ return def remoteBreakpointIgnore(self, fn, line, count): """ Public method to ignore a breakpoint the next couple of occurrences. @param fn filename the breakpoint belongs to (string) @param line linenumber of the breakpoint (int) @param count number of occurrences to ignore (int) """ return def remoteWatchpoint(self, cond, set, temp = False): """ Public method to set or clear a watch expression. @param cond expression of the watch expression (string) @param set flag indicating setting or resetting a watch expression (boolean) @param temp flag indicating a temporary watch expression (boolean) """ return def remoteWatchpointEnable(self, cond, enable): """ Public method to enable or disable a watch expression. @param cond expression of the watch expression (string) @param enable flag indicating enabling or disabling a watch expression (boolean) """ return def remoteWatchpointIgnore(self, cond, count): """ Public method to ignore a watch expression the next couple of occurrences. @param cond expression of the watch expression (string) @param count number of occurrences to ignore (int) """ return def remoteRawInput(self,s): """ Public method to send the raw input to the debugged program. @param s the raw input (string) """ return def remoteThreadList(self): """ Public method to request the list of threads from the client. """ return def remoteSetThread(self, tid): """ Public method to request to set the given thread as current thread. @param tid id of the thread (integer) """ return def remoteClientVariables(self, scope, filter, framenr = 0): """ Public method to request the variables of the debugged program. @param scope the scope of the variables (0 = local, 1 = global) @param filter list of variable types to filter out (list of int) @param framenr framenumber of the variables to retrieve (int) """ return def remoteClientVariable(self, scope, filter, var, framenr = 0): """ Public method to request the variables of the debugged program. @param scope the scope of the variables (0 = local, 1 = global) @param filter list of variable types to filter out (list of int) @param var list encoded name of variable to retrieve (string) @param framenr framenumber of the variables to retrieve (int) """ return def remoteClientSetFilter(self, scope, filter): """ Public method to set a variables filter list. @param scope the scope of the variables (0 = local, 1 = global) @param filter regexp string for variable names to filter out (string) """ return def remoteEval(self, arg): """ Public method to evaluate arg in the current context of the debugged program. @param arg the arguments to evaluate (string) """ return def remoteExec(self, stmt): """ Public method to execute stmt in the current context of the debugged program. @param stmt statement to execute (string) """ return def remoteBanner(self): """ Public slot to get the banner info of the remote client. """ self.debugServer.clientBanner("No backend", "", "") return def remoteCapabilities(self): """ Public slot to get the debug clients capabilities. """ return def remoteCompletion(self, text): """ Public slot to get the a list of possible commandline completions from the remote client. @param text the text to be completed (string or QString) """ return def remoteUTPrepare(self, fn, tn, tfn, cov, covname, coverase): """ Public method to prepare a new unittest run. @param fn the filename to load (string) @param tn the testname to load (string) @param tfn the test function name to load tests from (string) @param cov flag indicating collection of coverage data is requested @param covname filename to be used to assemble the coverage caches filename @param coverase flag indicating erasure of coverage data is requested """ return def remoteUTRun(self): """ Public method to start a unittest run. """ return def remoteUTStop(self): """ public method to stop a unittest run. """ return eric4-4.5.18/eric/Debugger/PaxHeaders.8617/ExceptionsFilterDialog.ui0000644000175000001440000000007411076660777023231 xustar000000000000000030 atime=1389081083.854724384 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Debugger/ExceptionsFilterDialog.ui0000644000175000001440000001054311076660777022761 0ustar00detlevusers00000000000000 ExceptionsFilterDialog 0 0 464 385 Exceptions Filter <b>Exception Filter</b> <p>This dialog is used to enter the exception types, that shall be highlighted during a debugging session. If this list is empty, all exception types will be highlighted. If the exception reporting flag in the "Start Debugging" dialog is unchecked, no exception will be reported at all.</p> <p>Please note, that unhandled exceptions are always highlighted independent of these settings.</p> true List of exceptions that shall be highlighted true false Press to add the entered exception to the list Add Enter an exception type that shall be highlighted false Press to delete the selected exception from the list Delete Press to delete all exceptions from the list Delete All Qt::Horizontal 40 20 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok qPixmapFromMimeSource exceptionList exceptionEdit addButton deleteButton deleteAllButton buttonBox buttonBox accepted() ExceptionsFilterDialog accept() 26 309 26 325 buttonBox rejected() ExceptionsFilterDialog reject() 85 310 85 324 eric4-4.5.18/eric/Debugger/PaxHeaders.8617/DebuggerInterfaceRuby.py0000644000175000001440000000013112261012651023011 xustar000000000000000029 mtime=1388582313.14009154 30 atime=1389081083.854724384 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Debugger/DebuggerInterfaceRuby.py0000644000175000001440000010200512261012651022542 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing the Ruby debugger interface for the debug server. """ import sys import os import socket import subprocess from PyQt4.QtCore import * from KdeQt import KQMessageBox from KdeQt.KQApplication import e4App from DebugProtocol import * import DebugClientCapabilities import Preferences import Utilities from eric4config import getConfig ClientDefaultCapabilities = \ DebugClientCapabilities.HasDebugger | \ DebugClientCapabilities.HasShell | \ DebugClientCapabilities.HasInterpreter | \ DebugClientCapabilities.HasCompleter ClientTypeAssociations = [".rb"] def getRegistryData(): """ Module function to get characterising data for the debugger interface. @return list of the following data. Client type (string), client capabilities (integer), client type association (list of strings) """ return ["Ruby", ClientDefaultCapabilities, ClientTypeAssociations] class DebuggerInterfaceRuby(QObject): """ Class implementing the Ruby debugger interface for the debug server. """ def __init__(self, debugServer, passive): """ Constructor @param debugServer reference to the debug server (DebugServer) @param passive flag indicating passive connection mode (boolean) """ QObject.__init__(self) self.__isNetworked = True self.__autoContinue = not passive self.debugServer = debugServer self.passive = passive self.process = None self.qsock = None self.queue = [] # set default values for capabilities of clients self.clientCapabilities = ClientDefaultCapabilities self.codec = QTextCodec.codecForName(str(Preferences.getSystem("StringEncoding"))) if passive: # set translation function if Preferences.getDebugger("PathTranslation"): self.translateRemote = \ unicode(Preferences.getDebugger("PathTranslationRemote")) self.translateLocal = \ unicode(Preferences.getDebugger("PathTranslationLocal")) self.translate = self.__remoteTranslation else: self.translate = self.__identityTranslation def __identityTranslation(self, fn, remote2local = True): """ Private method to perform the identity path translation. @param fn filename to be translated (string or QString) @param remote2local flag indicating the direction of translation (False = local to remote, True = remote to local [default]) @return translated filename (string) """ return unicode(fn) def __remoteTranslation(self, fn, remote2local = True): """ Private method to perform the path translation. @param fn filename to be translated (string or QString) @param remote2local flag indicating the direction of translation (False = local to remote, True = remote to local [default]) @return translated filename (string) """ if remote2local: return unicode(fn).replace(self.translateRemote, self.translateLocal) else: return unicode(fn).replace(self.translateLocal, self.translateRemote) def __startProcess(self, program, arguments, environment = None): """ Private method to start the debugger client process. @param program name of the executable to start (string) @param arguments arguments to be passed to the program (list of string) @param environment dictionary of environment settings to pass (dict of string) @return the process object (QProcess) or None and an error string (QString) """ proc = QProcess() errorStr = QString() if environment is not None: env = QStringList() for key, value in environment.items(): env.append("%s=%s" % (key, value)) proc.setEnvironment(env) args = QStringList() for arg in arguments: args.append(arg) proc.start(program, args) if not proc.waitForStarted(10000): errorStr = proc.errorString() proc = None return proc, errorStr def startRemote(self, port, runInConsole): """ Public method to start a remote Ruby interpreter. @param port portnumber the debug server is listening on (integer) @param runInConsole flag indicating to start the debugger in a console window (boolean) @return client process object (QProcess) and a flag to indicate a network connection (boolean) """ interpreter = unicode(Preferences.getDebugger("RubyInterpreter")) if interpreter == "": interpreter = "/usr/bin/ruby" debugClient = os.path.join(getConfig('ericDir'), "DebugClients", "Ruby", "DebugClient.rb") redirect = str(Preferences.getDebugger("RubyRedirect")) if Preferences.getDebugger("RemoteDbgEnabled"): ipaddr = self.debugServer.getHostAddress(False)[0] rexec = unicode(Preferences.getDebugger("RemoteExecution")) rhost = unicode(Preferences.getDebugger("RemoteHost")) if rhost == "": rhost = "localhost" if rexec: args = Utilities.parseOptionString(rexec) + \ [rhost, interpreter, os.path.abspath(debugClient), str(port), redirect, ipaddr] args[0] = Utilities.getExecutablePath(args[0]) process, error = self.__startProcess(args[0], args[1:]) if process is None: KQMessageBox.critical(None, self.trUtf8("Start Debugger"), self.trUtf8(\ """

    The debugger backend could not be started.

    """ """

    Reason: %1

    """).arg(error)) # set translation function if Preferences.getDebugger("PathTranslation"): self.translateRemote = \ unicode(Preferences.getDebugger("PathTranslationRemote")) self.translateLocal = \ unicode(Preferences.getDebugger("PathTranslationLocal")) self.translate = self.__remoteTranslation else: self.translate = self.__identityTranslation return process, self.__isNetworked # set translation function self.translate = self.__identityTranslation # setup the environment for the debugger if Preferences.getDebugger("DebugEnvironmentReplace"): clientEnv = {} else: clientEnv = os.environ.copy() envlist = Utilities.parseEnvironmentString(\ Preferences.getDebugger("DebugEnvironment")) for el in envlist: try: key, value = el.split('=', 1) if value.startswith('"') or value.startswith("'"): value = value[1:-1] clientEnv[str(key)] = str(value) except UnpackError: pass ipaddr = self.debugServer.getHostAddress(True) if runInConsole or Preferences.getDebugger("ConsoleDbgEnabled"): ccmd = unicode(Preferences.getDebugger("ConsoleDbgCommand")) if ccmd: args = Utilities.parseOptionString(ccmd) + \ [interpreter, os.path.abspath(debugClient), str(port), '0', ipaddr] args[0] = Utilities.getExecutablePath(args[0]) process, error = self.__startProcess(args[0], args[1:], clientEnv) if process is None: KQMessageBox.critical(None, self.trUtf8("Start Debugger"), self.trUtf8(\ """

    The debugger backend could not be started.

    """ """

    Reason: %1

    """).arg(error)) return process, self.__isNetworked process, error = self.__startProcess(interpreter, [debugClient, str(port), redirect, ipaddr], clientEnv) if process is None: KQMessageBox.critical(None, self.trUtf8("Start Debugger"), self.trUtf8( """

    The debugger backend could not be started.

    """ """

    Reason: %1

    """).arg(error)) return process, self.__isNetworked def startRemoteForProject(self, port, runInConsole): """ Public method to start a remote Ruby interpreter for a project. @param port portnumber the debug server is listening on (integer) @param runInConsole flag indicating to start the debugger in a console window (boolean) @return pid of the client process (integer) and a flag to indicate a network connection (boolean) """ project = e4App().getObject("Project") if not project.isDebugPropertiesLoaded(): return None, self.__isNetworked # start debugger with project specific settings interpreter = project.getDebugProperty("INTERPRETER") debugClient = project.getDebugProperty("DEBUGCLIENT") redirect = str(project.getDebugProperty("REDIRECT")) if project.getDebugProperty("REMOTEDEBUGGER"): ipaddr = self.debugServer.getHostAddress(False)[0] rexec = project.getDebugProperty("REMOTECOMMAND") rhost = project.getDebugProperty("REMOTEHOST") if rhost == "": rhost = "localhost" if rexec: args = Utilities.parseOptionString(rexec) + \ [rhost, interpreter, os.path.abspath(debugClient), str(port), redirect, ipaddr] args[0] = Utilities.getExecutablePath(args[0]) process, error = self.__startProcess(args[0], args[1:]) if process is None: KQMessageBox.critical(None, self.trUtf8("Start Debugger"), self.trUtf8(\ """

    The debugger backend could not be started.

    """ """

    Reason: %1

    """).arg(error)) # set translation function if project.getDebugProperty("PATHTRANSLATION"): self.translateRemote = project.getDebugProperty("REMOTEPATH") self.translateLocal = project.getDebugProperty("LOCALPATH") self.translate = self.__remoteTranslation else: self.translate = self.__identityTranslation return process, self.__isNetworked # set translation function self.translate = self.__identityTranslation # setup the environment for the debugger if project.getDebugProperty("ENVIRONMENTOVERRIDE"): clientEnv = {} else: clientEnv = os.environ.copy() envlist = Utilities.parseEnvironmentString(\ project.getDebugProperty("ENVIRONMENTSTRING")) for el in envlist: try: key, value = el.split('=', 1) if value.startswith('"') or value.startswith("'"): value = value[1:-1] clientEnv[str(key)] = str(value) except UnpackError: pass ipaddr = self.debugServer.getHostAddress(True) if runInConsole or project.getDebugProperty("CONSOLEDEBUGGER"): ccmd = unicode(project.getDebugProperty("CONSOLECOMMAND")) or \ unicode(Preferences.getDebugger("ConsoleDbgCommand")) if ccmd: args = Utilities.parseOptionString(ccmd) + \ [interpreter, os.path.abspath(debugClient), str(port), '0', ipaddr] args[0] = Utilities.getExecutablePath(args[0]) process, error = self.__startProcess(args[0], args[1:], clientEnv) if process is None: KQMessageBox.critical(None, self.trUtf8("Start Debugger"), self.trUtf8(\ """

    The debugger backend could not be started.

    """ """

    Reason: %1

    """).arg(error)) return process, self.__isNetworked process, error = self.__startProcess(interpreter, [debugClient, str(port), redirect, ipaddr], clientEnv) if process is None: KQMessageBox.critical(None, self.trUtf8("Start Debugger"), self.trUtf8( """

    The debugger backend could not be started.

    """ """

    Reason: %1

    """).arg(error)) return process, self.__isNetworked def getClientCapabilities(self): """ Public method to retrieve the debug clients capabilities. @return debug client capabilities (integer) """ return self.clientCapabilities def newConnection(self, sock): """ Public slot to handle a new connection. @param sock reference to the socket object (QTcpSocket) @return flag indicating success (boolean) """ # If we already have a connection, refuse this one. It will be closed # automatically. if self.qsock is not None: return False self.connect(sock, SIGNAL('disconnected()'), self.debugServer.startClient) self.connect(sock, SIGNAL('readyRead()'), self.__parseClientLine) self.qsock = sock # Get the remote clients capabilities self.remoteCapabilities() return True def flush(self): """ Public slot to flush the queue. """ # Send commands that were waiting for the connection. for cmd in self.queue: self.qsock.write(cmd.encode('utf8')) self.queue = [] def shutdown(self): """ Public method to cleanly shut down. It closes our socket and shuts down the debug client. (Needed on Win OS) """ if self.qsock is None: return # do not want any slots called during shutdown self.disconnect(self.qsock, SIGNAL('disconnected()'), self.debugServer.startClient) self.disconnect(self.qsock, SIGNAL('readyRead()'), self.__parseClientLine) # close down socket, and shut down client as well. self.__sendCommand('%s\n' % RequestShutdown) self.qsock.flush() self.qsock.close() # reinitialize self.qsock = None self.queue = [] def isConnected(self): """ Public method to test, if a debug client has connected. @return flag indicating the connection status (boolean) """ return self.qsock is not None def remoteEnvironment(self, env): """ Public method to set the environment for a program to debug, run, ... @param env environment settings (dictionary) """ self.__sendCommand('%s%s\n' % (RequestEnv, str(env))) def remoteLoad(self, fn, argv, wd, traceInterpreter = False, autoContinue = True, autoFork = False, forkChild = False): """ Public method to load a new program to debug. @param fn the filename to debug (string) @param argv the commandline arguments to pass to the program (string or QString) @param wd the working directory for the program (string) @keyparam traceInterpreter flag indicating if the interpreter library should be traced as well (boolean) @keyparam autoContinue flag indicating, that the debugger should not stop at the first executable line (boolean) @keyparam autoFork flag indicating the automatic fork mode (boolean) (ignored) @keyparam forkChild flag indicating to debug the child after forking (boolean) (ignored) """ self.__autoContinue = autoContinue wd = self.translate(wd, False) fn = self.translate(os.path.abspath(unicode(fn)), False) self.__sendCommand('%s%s|%s|%s|%d\n' % \ (RequestLoad, unicode(wd), unicode(fn), unicode(Utilities.parseOptionString(argv)), traceInterpreter)) def remoteRun(self, fn, argv, wd, autoFork = False, forkChild = False): """ Public method to load a new program to run. @param fn the filename to run (string) @param argv the commandline arguments to pass to the program (string or QString) @param wd the working directory for the program (string) @keyparam autoFork flag indicating the automatic fork mode (boolean) @keyparam forkChild flag indicating to debug the child after forking (boolean) """ wd = self.translate(wd, False) fn = self.translate(os.path.abspath(unicode(fn)), False) self.__sendCommand('%s%s|%s|%s\n' % \ (RequestRun, unicode(wd), unicode(fn), unicode(Utilities.parseOptionString(argv)))) def remoteCoverage(self, fn, argv, wd, erase = False): """ Public method to load a new program to collect coverage data. @param fn the filename to run (string) @param argv the commandline arguments to pass to the program (string or QString) @param wd the working directory for the program (string) @keyparam erase flag indicating that coverage info should be cleared first (boolean) """ raise NotImplementedError("Interface not available.") def remoteProfile(self, fn, argv, wd, erase = False): """ Public method to load a new program to collect profiling data. @param fn the filename to run (string) @param argv the commandline arguments to pass to the program (string or QString) @param wd the working directory for the program (string) @keyparam erase flag indicating that timing info should be cleared first (boolean) """ raise NotImplementedError("Interface not available.") def remoteStatement(self, stmt): """ Public method to execute a Ruby statement. @param stmt the Ruby statement to execute (string). It should not have a trailing newline. """ self.__sendCommand('%s\n' % stmt) self.__sendCommand(RequestOK + '\n') def remoteStep(self): """ Public method to single step the debugged program. """ self.__sendCommand(RequestStep + '\n') def remoteStepOver(self): """ Public method to step over the debugged program. """ self.__sendCommand(RequestStepOver + '\n') def remoteStepOut(self): """ Public method to step out the debugged program. """ self.__sendCommand(RequestStepOut + '\n') def remoteStepQuit(self): """ Public method to stop the debugged program. """ self.__sendCommand(RequestStepQuit + '\n') def remoteContinue(self, special = False): """ Public method to continue the debugged program. @param special flag indicating a special continue operation """ self.__sendCommand('%s%d\n' % (RequestContinue, special)) def remoteBreakpoint(self, fn, line, set, cond = None, temp = False): """ Public method to set or clear a breakpoint. @param fn filename the breakpoint belongs to (string) @param line linenumber of the breakpoint (int) @param set flag indicating setting or resetting a breakpoint (boolean) @param cond condition of the breakpoint (string) @param temp flag indicating a temporary breakpoint (boolean) """ fn = self.translate(fn, False) self.__sendCommand('%s%s@@%d@@%d@@%d@@%s\n' % \ (RequestBreak, fn, line, temp, set, cond)) def remoteBreakpointEnable(self, fn, line, enable): """ Public method to enable or disable a breakpoint. @param fn filename the breakpoint belongs to (string) @param line linenumber of the breakpoint (int) @param enable flag indicating enabling or disabling a breakpoint (boolean) """ fn = self.translate(fn, False) self.__sendCommand('%s%s,%d,%d\n' % (RequestBreakEnable, fn, line, enable)) def remoteBreakpointIgnore(self, fn, line, count): """ Public method to ignore a breakpoint the next couple of occurrences. @param fn filename the breakpoint belongs to (string) @param line linenumber of the breakpoint (int) @param count number of occurrences to ignore (int) """ fn = self.translate(fn, False) self.__sendCommand('%s%s,%d,%d\n' % (RequestBreakIgnore, fn, line, count)) def remoteWatchpoint(self, cond, set, temp = False): """ Public method to set or clear a watch expression. @param cond expression of the watch expression (string) @param set flag indicating setting or resetting a watch expression (boolean) @param temp flag indicating a temporary watch expression (boolean) """ # cond is combination of cond and special (s. watch expression viewer) self.__sendCommand('%s%s@@%d@@%d\n' % (RequestWatch, cond, temp, set)) def remoteWatchpointEnable(self, cond, enable): """ Public method to enable or disable a watch expression. @param cond expression of the watch expression (string) @param enable flag indicating enabling or disabling a watch expression (boolean) """ # cond is combination of cond and special (s. watch expression viewer) self.__sendCommand('%s%s,%d\n' % (RequestWatchEnable, cond, enable)) def remoteWatchpointIgnore(self, cond, count): """ Public method to ignore a watch expression the next couple of occurrences. @param cond expression of the watch expression (string) @param count number of occurrences to ignore (int) """ # cond is combination of cond and special (s. watch expression viewer) self.__sendCommand('%s%s,%d\n' % (RequestWatchIgnore, cond, count)) def remoteRawInput(self,s): """ Public method to send the raw input to the debugged program. @param s the raw input (string) """ self.__sendCommand(s + '\n') def remoteThreadList(self): """ Public method to request the list of threads from the client. """ return def remoteSetThread(self, tid): """ Public method to request to set the given thread as current thread. @param tid id of the thread (integer) """ return def remoteClientVariables(self, scope, filter, framenr = 0): """ Public method to request the variables of the debugged program. @param scope the scope of the variables (0 = local, 1 = global) @param filter list of variable types to filter out (list of int) @param framenr framenumber of the variables to retrieve (int) """ self.__sendCommand('%s%d, %d, %s\n' % \ (RequestVariables, framenr, scope, unicode(filter))) def remoteClientVariable(self, scope, filter, var, framenr = 0): """ Public method to request the variables of the debugged program. @param scope the scope of the variables (0 = local, 1 = global) @param filter list of variable types to filter out (list of int) @param var list encoded name of variable to retrieve (string) @param framenr framenumber of the variables to retrieve (int) """ self.__sendCommand('%s%s, %d, %d, %s\n' % \ (RequestVariable, unicode(var), framenr, scope, str(filter))) def remoteClientSetFilter(self, scope, filter): """ Public method to set a variables filter list. @param scope the scope of the variables (0 = local, 1 = global) @param filter regexp string for variable names to filter out (string) """ self.__sendCommand('%s%d, "%s"\n' % (RequestSetFilter, scope, filter)) def remoteEval(self, arg): """ Public method to evaluate arg in the current context of the debugged program. @param arg the arguments to evaluate (string) """ self.__sendCommand('%s%s\n' % (RequestEval, arg)) def remoteExec(self, stmt): """ Public method to execute stmt in the current context of the debugged program. @param stmt statement to execute (string) """ self.__sendCommand('%s%s\n' % (RequestExec, stmt)) def remoteBanner(self): """ Public slot to get the banner info of the remote client. """ self.__sendCommand(RequestBanner + '\n') def remoteCapabilities(self): """ Public slot to get the debug clients capabilities. """ self.__sendCommand(RequestCapabilities + '\n') def remoteCompletion(self, text): """ Public slot to get the a list of possible commandline completions from the remote client. @param text the text to be completed (string or QString) """ self.__sendCommand("%s%s\n" % (RequestCompletion, text)) def remoteUTPrepare(self, fn, tn, tfn, cov, covname, coverase): """ Public method to prepare a new unittest run. @param fn the filename to load (string) @param tn the testname to load (string) @param tfn the test function name to load tests from (string) @param cov flag indicating collection of coverage data is requested @param covname filename to be used to assemble the coverage caches filename @param coverase flag indicating erasure of coverage data is requested """ raise NotImplementedError("Interface not available.") def remoteUTRun(self): """ Public method to start a unittest run. """ raise NotImplementedError("Interface not available.") def remoteUTStop(self): """ public method to stop a unittest run. """ raise NotImplementedError("Interface not available.") def __parseClientLine(self): """ Private method to handle data from the client. """ while self.qsock and self.qsock.canReadLine(): qs = self.qsock.readLine() if self.codec is not None: us = self.codec.fromUnicode(QString(qs)) else: us = qs line = str(us) if line.endswith(EOT): line = line[:-len(EOT)] if not line: continue ## print "Server: ", line ##debug eoc = line.find('<') + 1 # Deal with case where user has written directly to stdout # or stderr, but not line terminated and we stepped over the # write call, in that case the >line< will not be the first # string read from the socket... boc = line.find('>') if boc > 0 and eoc > boc: self.debugServer.clientOutput(line[:boc]) line = line[boc:] eoc = line.find('<') + 1 boc = line.find('>') if boc >= 0 and eoc > boc: resp = line[boc:eoc] if resp == ResponseLine: stack = eval(line[eoc:-1]) for s in stack: s[0] = self.translate(s[0], True) cf = stack[0] if self.__autoContinue: self.__autoContinue = False QTimer.singleShot(0, self.remoteContinue) else: self.debugServer.clientLine(cf[0], int(cf[1])) self.debugServer.clientStack(stack) continue if resp == ResponseVariables: vlist = eval(line[eoc:-1]) scope = vlist[0] try: variables = vlist[1:] except IndexError: variables = [] self.debugServer.clientVariables(scope, variables) continue if resp == ResponseVariable: vlist = eval(line[eoc:-1]) scope = vlist[0] try: variables = vlist[1:] except IndexError: variables = [] self.debugServer.clientVariable(scope, variables) continue if resp == ResponseOK: self.debugServer.clientStatement(False) continue if resp == ResponseContinue: self.debugServer.clientStatement(True) continue if resp == ResponseException: exc = line[eoc:-1] exc = self.translate(exc, True) try: exclist = eval(exc) exctype = exclist[0] excmessage = exclist[1] stack = exclist[2:] except (IndexError, ValueError, SyntaxError): exctype = None excmessage = '' stack = [] self.debugServer.clientException(exctype, excmessage, stack) continue if resp == ResponseSyntax: exc = line[eoc:-1] exc = self.translate(exc, True) try: message, (fn, ln, cn) = eval(exc) if fn is None: fn = '' except (IndexError, ValueError): message = None fn = '' ln = 0 cn = 0 self.debugServer.clientSyntaxError(message, fn, ln, cn) continue if resp == ResponseExit: self.debugServer.clientExit(line[eoc:-1]) continue if resp == ResponseClearBreak: fn, lineno = line[eoc:-1].split(',') lineno = int(lineno) fn = self.translate(fn, True) self.debugServer.clientClearBreak(fn, lineno) continue if resp == ResponseClearWatch: cond = line[eoc:-1] self.debugServer.clientClearWatch(cond) continue if resp == ResponseBanner: version, platform, dbgclient = eval(line[eoc:-1]) self.debugServer.clientBanner(version, platform, dbgclient) continue if resp == ResponseCapabilities: cap, clType = eval(line[eoc:-1]) self.clientCapabilities = cap self.debugServer.clientCapabilities(cap, clType) continue if resp == ResponseCompletion: clstring, text = line[eoc:-1].split('||') cl = eval(clstring) self.debugServer.clientCompletionList(cl, text) continue if resp == PassiveStartup: fn, exc = line[eoc:-1].split('|') exc = bool(exc) fn = self.translate(fn, True) self.debugServer.passiveStartUp(fn, exc) continue self.debugServer.clientOutput(line) def __sendCommand(self, cmd): """ Private method to send a single line command to the client. @param cmd command to send to the debug client (string) """ if self.qsock is not None: self.qsock.write(cmd.encode('utf8')) else: self.queue.append(cmd) eric4-4.5.18/eric/Debugger/PaxHeaders.8617/StartDialog.py0000644000175000001440000000013212261012651021020 xustar000000000000000030 mtime=1388582313.142091566 30 atime=1389081083.855724384 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Debugger/StartDialog.py0000644000175000001440000002170512261012651020557 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2002 - 2014 Detlev Offenbach # """ Module implementing the Start Program dialog. """ import os from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQFileDialog from E4Gui.E4Completers import E4DirCompleter import Utilities import Preferences class StartDialog(QDialog): """ Class implementing the Start Program dialog. It implements a dialog that is used to start an application for debugging. It asks the user to enter the commandline parameters, the working directory and whether exception reporting should be disabled. """ def __init__(self, caption, argvList, wdList, envList, exceptions, parent = None, type = 0, modfuncList = None, tracePython = False, autoClearShell = True, autoContinue = True, autoFork = False, forkChild = False): """ Constructor @param caption the caption to be displayed (QString) @param argvList history list of commandline arguments (QStringList) @param wdList history list of working directories (QStringList) @param envList history list of environment settings (QStringList) @param exceptions exception reporting flag (boolean) @param parent parent widget of this dialog (QWidget) @param type type of the start dialog
    • 0 = start debug dialog
    • 1 = start run dialog
    • 2 = start coverage dialog
    • 3 = start profile dialog
    @keyparam modfuncList history list of module functions (QStringList) @keyparam tracePython flag indicating if the Python library should be traced as well (boolean) @keyparam autoClearShell flag indicating, that the interpreter window should be cleared automatically (boolean) @keyparam autoContinue flag indicating, that the debugger should not stop at the first executable line (boolean) @keyparam autoFork flag indicating the automatic fork mode (boolean) @keyparam forkChild flag indicating to debug the child after forking (boolean) """ QDialog.__init__(self, parent) self.setModal(True) self.type = type if type == 0: from Ui_StartDebugDialog import Ui_StartDebugDialog self.ui = Ui_StartDebugDialog() elif type == 1: from Ui_StartRunDialog import Ui_StartRunDialog self.ui = Ui_StartRunDialog() elif type == 2: from Ui_StartCoverageDialog import Ui_StartCoverageDialog self.ui = Ui_StartCoverageDialog() elif type == 3: from Ui_StartProfileDialog import Ui_StartProfileDialog self.ui = Ui_StartProfileDialog() self.ui.setupUi(self) self.clearButton = self.ui.buttonBox.addButton(\ self.trUtf8("Clear Histories"), QDialogButtonBox.ActionRole) self.workdirCompleter = E4DirCompleter(self.ui.workdirCombo) self.setWindowTitle(caption) self.ui.cmdlineCombo.clear() self.ui.cmdlineCombo.addItems(argvList) if argvList.count() > 0: self.ui.cmdlineCombo.setCurrentIndex(0) self.ui.workdirCombo.clear() self.ui.workdirCombo.addItems(wdList) if wdList.count() > 0: self.ui.workdirCombo.setCurrentIndex(0) self.ui.environmentCombo.clear() self.ui.environmentCombo.addItems(envList) self.ui.exceptionCheckBox.setChecked(exceptions) self.ui.clearShellCheckBox.setChecked(autoClearShell) self.ui.consoleCheckBox.setEnabled( not Preferences.getDebugger("ConsoleDbgCommand").isEmpty()) self.ui.consoleCheckBox.setChecked(False) if type == 0: # start debug dialog self.ui.tracePythonCheckBox.setChecked(tracePython) self.ui.tracePythonCheckBox.show() self.ui.autoContinueCheckBox.setChecked(autoContinue) self.ui.forkModeCheckBox.setChecked(autoFork) self.ui.forkChildCheckBox.setChecked(forkChild) if type == 1: # start run dialog self.ui.forkModeCheckBox.setChecked(autoFork) self.ui.forkChildCheckBox.setChecked(forkChild) if type == 3: # start coverage or profile dialog self.ui.eraseCheckBox.setChecked(True) self.__clearHistoryLists = False @pyqtSignature("") def on_dirButton_clicked(self): """ Private method used to open a directory selection dialog. """ cwd = self.ui.workdirCombo.currentText() d = KQFileDialog.getExistingDirectory(\ self, self.trUtf8("Working directory"), cwd, QFileDialog.Options(QFileDialog.ShowDirsOnly)) if not d.isNull() and not d.isEmpty(): self.ui.workdirCombo.setEditText(Utilities.toNativeSeparators(d)) def on_modFuncCombo_editTextChanged(self): """ Private slot to enable/disable the OK button. """ self.ui.buttonBox.button(QDialogButtonBox.Ok).setDisabled(\ self.ui.modFuncCombo.currentText().isEmpty()) def getData(self): """ Public method to retrieve the data entered into this dialog. @return a tuple of argv (QString), workdir (QString), environment (QString), exceptions flag (boolean), clear interpreter flag (boolean), clear histories flag (boolean) and run in console flag (boolean) """ cmdLine = self.ui.cmdlineCombo.currentText() workdir = self.ui.workdirCombo.currentText() environment = self.ui.environmentCombo.currentText() return (cmdLine, workdir, environment, self.ui.exceptionCheckBox.isChecked(), self.ui.clearShellCheckBox.isChecked(), self.__clearHistoryLists, self.ui.consoleCheckBox.isChecked()) def getDebugData(self): """ Public method to retrieve the debug related data entered into this dialog. @return a tuple of a flag indicating, if the Python library should be traced as well, a flag indicating, that the debugger should not stop at the first executable line (boolean), a flag indicating, that the debugger should fork automatically (boolean) and a flag indicating, that the debugger should debug the child process after forking automatically (boolean) """ if self.type == 0: return (self.ui.tracePythonCheckBox.isChecked(), self.ui.autoContinueCheckBox.isChecked(), self.ui.forkModeCheckBox.isChecked(), self.ui.forkChildCheckBox.isChecked()) def getRunData(self): """ Public method to retrieve the debug related data entered into this dialog. @return a tuple of a flag indicating, that the debugger should fork automatically (boolean) and a flag indicating, that the debugger should debug the child process after forking automatically (boolean) """ if self.type == 1: return (self.ui.forkModeCheckBox.isChecked(), self.ui.forkChildCheckBox.isChecked()) def getCoverageData(self): """ Public method to retrieve the coverage related data entered into this dialog. @return flag indicating erasure of coverage info (boolean) """ if self.type == 2: return self.ui.eraseCheckBox.isChecked() def getProfilingData(self): """ Public method to retrieve the profiling related data entered into this dialog. @return flag indicating erasure of profiling info (boolean) """ if self.type == 3: return self.ui.eraseCheckBox.isChecked() def __clearHistories(self): """ Private slot to clear the combo boxes lists and record a flag to clear the lists. """ self.__clearHistoryLists = True cmdLine = self.ui.cmdlineCombo.currentText() workdir = self.ui.workdirCombo.currentText() environment = self.ui.environmentCombo.currentText() self.ui.cmdlineCombo.clear() self.ui.workdirCombo.clear() self.ui.environmentCombo.clear() self.ui.cmdlineCombo.addItem(cmdLine) self.ui.workdirCombo.addItem(workdir) self.ui.environmentCombo.addItem(environment) def on_buttonBox_clicked(self, button): """ Private slot called by a button of the button box clicked. @param button button that was clicked (QAbstractButton) """ if button == self.clearButton: self.__clearHistories() eric4-4.5.18/eric/PaxHeaders.8617/Dictionaries0000644000175000001440000000007311706605624017064 xustar000000000000000029 atime=1389081086.01472434 30 ctime=1389081086.315724332 eric4-4.5.18/eric/Dictionaries/0000755000175000001440000000000011706605624016667 5ustar00detlevusers00000000000000eric4-4.5.18/eric/Dictionaries/PaxHeaders.8617/excludes.dic0000644000175000001440000000007411420263411021422 xustar000000000000000030 atime=1389081083.855724384 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Dictionaries/excludes.dic0000644000175000001440000000000011420263411021135 0ustar00detlevusers00000000000000eric4-4.5.18/eric/Dictionaries/PaxHeaders.8617/words.dic0000644000175000001440000000007411527263507020762 xustar000000000000000030 atime=1389081083.855724384 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Dictionaries/words.dic0000644000175000001440000000001411527263507020502 0ustar00detlevusers00000000000000 unversionederic4-4.5.18/eric/PaxHeaders.8617/eric4_iconeditor.pyw0000644000175000001440000000013212261012652020474 xustar000000000000000030 mtime=1388582314.990114951 30 atime=1389081083.855724384 30 ctime=1389081086.309724333 eric4-4.5.18/eric/eric4_iconeditor.pyw0000644000175000001440000000021612261012652020225 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2010 - 2014 Detlev Offenbach # from eric4_iconeditor import main main() eric4-4.5.18/eric/PaxHeaders.8617/Graphics0000644000175000001440000000013212262730776016210 xustar000000000000000030 mtime=1389081086.301724332 30 atime=1389081086.305724332 30 ctime=1389081086.315724332 eric4-4.5.18/eric/Graphics/0000755000175000001440000000000012262730776016017 5ustar00detlevusers00000000000000eric4-4.5.18/eric/Graphics/PaxHeaders.8617/ZoomDialog.py0000644000175000001440000000013212261012651020663 xustar000000000000000030 mtime=1388582313.145091604 30 atime=1389081083.855724384 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Graphics/ZoomDialog.py0000644000175000001440000000205112261012651020413 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing a zoom dialog for a graphics canvas. """ from PyQt4.QtGui import QDialog from Ui_ZoomDialog import Ui_ZoomDialog class ZoomDialog(QDialog, Ui_ZoomDialog): """ Class implementing a zoom dialog for a graphics canvas. """ def __init__(self, zoom, parent = None, name = None): """ Constructor @param zoom zoom factor to show in the spinbox (float) @param parent parent widget of this dialog (QWidget) @param name name of this dialog (string or QString) """ QDialog.__init__(self, parent) if name: self.setObjectName(name) else: self.setObjectName("ZoomDialog") self.setupUi(self) self.zoomSpinBox.setValue(zoom) def getZoomSize(self): """ Public method to retrieve the zoom size. @return zoom size (double) """ return self.zoomSpinBox.value() eric4-4.5.18/eric/Graphics/PaxHeaders.8617/ModuleItem.py0000644000175000001440000000013212261012651020663 xustar000000000000000030 mtime=1388582313.147091629 30 atime=1389081083.855724384 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Graphics/ModuleItem.py0000644000175000001440000001147712261012651020427 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing a module item. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from UMLItem import UMLItem class ModuleModel(object): """ Class implementing the module model. """ def __init__(self, name, classlist=[]): """ Constructor @param name the module name (string) @param classlist list of class names (list of strings) """ self.name = name self.classlist = classlist def addClass(self, classname): """ Method to add a class to the module model. @param classname class name to be added (string) """ self.classlist.append(classname) def getClasses(self): """ Method to retrieve the classes of the module. @return list of class names (list of strings) """ return self.classlist[:] def getName(self): """ Method to retrieve the module name. @return module name (string) """ return self.name class ModuleItem(UMLItem): """ Class implementing a module item. """ def __init__(self, model = None, x = 0, y = 0, rounded = False, parent = None, scene = None): """ Constructor @param model module model containing the module data (ModuleModel) @param x x-coordinate (integer) @param y y-coordinate (integer) @keyparam rounded flag indicating a rounded corner (boolean) @keyparam parent reference to the parent object (QGraphicsItem) @keyparam scene reference to the scene object (QGraphicsScene) """ UMLItem.__init__(self, x, y, rounded, parent) self.model = model scene.addItem(self) if self.model: self.__createTexts() self.__calculateSize() def __createTexts(self): """ Private method to create the text items of the module item. """ if self.model is None: return boldFont = QFont(self.font) boldFont.setBold(True) classes = self.model.getClasses() x = self.margin + self.rect().x() y = self.margin + self.rect().y() self.header = QGraphicsSimpleTextItem(self) self.header.setFont(boldFont) self.header.setText(self.model.getName()) self.header.setPos(x, y) y += self.header.boundingRect().height() + self.margin if classes: txt = "\n".join(classes) else: txt = " " self.classes = QGraphicsSimpleTextItem(self) self.classes.setFont(self.font) self.classes.setText(txt) self.classes.setPos(x, y) def __calculateSize(self): """ Private method to calculate the size of the module item. """ if self.model is None: return width = self.header.boundingRect().width() height = self.header.boundingRect().height() if self.classes: width = max(width, self.classes.boundingRect().width()) height = height + self.classes.boundingRect().height() self.setSize(width + 2 * self.margin, height + 2 * self.margin) def setModel(self, model): """ Method to set the module model. @param model module model containing the module data (ModuleModel) """ self.scene().removeItem(self.header) self.header = None if self.classes: self.scene().removeItem(self.classes) self.meths = None self.model = model self.__createTexts() self.__calculateSize() def paint(self, painter, option, widget = None): """ Public method to paint the item in local coordinates. @param painter reference to the painter object (QPainter) @param option style options (QStyleOptionGraphicsItem) @param widget optional reference to the widget painted on (QWidget) """ pen = self.pen() if (option.state & QStyle.State_Selected) == QStyle.State(QStyle.State_Selected): pen.setWidth(2) else: pen.setWidth(1) painter.setPen(pen) painter.setBrush(self.brush()) painter.setFont(self.font) offsetX = self.rect().x() offsetY = self.rect().y() w = self.rect().width() h = self.rect().height() painter.drawRect(offsetX, offsetY, w, h) y = self.margin + self.header.boundingRect().height() painter.drawLine(offsetX, offsetY + y, offsetX + w - 1, offsetY + y) self.adjustAssociations() eric4-4.5.18/eric/Graphics/PaxHeaders.8617/ApplicationDiagram.py0000644000175000001440000000013212261012651022347 xustar000000000000000030 mtime=1388582313.165091857 30 atime=1389081083.855724384 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Graphics/ApplicationDiagram.py0000644000175000001440000002226612261012651022111 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing a dialog showing an imports diagram of the application. """ import os import glob from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt.KQProgressDialog import KQProgressDialog from UMLDialog import UMLDialog from PackageItem import PackageItem, PackageModel from AssociationItem import AssociationItem, Imports import GraphicsUtilities import Utilities.ModuleParser import Utilities class ApplicationDiagram(UMLDialog): """ Class implementing a dialog showing an imports diagram of the application. """ def __init__(self, project, parent = None, name = None, noModules = False): """ Constructor @param project reference to the project object @param parent parent widget of the view (QWidget) @param name name of the view widget (QString or string) @keyparam noModules flag indicating, that no module names should be shown (boolean) """ self.project = project self.noModules = noModules UMLDialog.__init__(self, self.project.ppath, parent) if not name: self.setObjectName("ApplicationDiagram") else: self.setObjectName(name) self.connect(self.umlView, SIGNAL("relayout()"), self.relayout) def __buildModulesDict(self): """ Private method to build a dictionary of modules contained in the application. @return dictionary of modules contained in the application. """ moduleDict = {} mods = self.project.pdata["SOURCES"] modules = [] for module in mods: modules.append(Utilities.normabsjoinpath(self.project.ppath, module)) tot = len(modules) progress = KQProgressDialog(self.trUtf8("Parsing modules..."), QString(), 0, tot, self) try: prog = 0 progress.show() QApplication.processEvents() for module in modules: progress.setValue(prog) QApplication.processEvents() prog += 1 if module.endswith("__init__.py"): continue try: mod = Utilities.ModuleParser.readModule(module) except ImportError: continue else: name = mod.name moduleDict[name] = mod finally: progress.setValue(tot) return moduleDict def __buildPackages(self): """ Private method to build the packages shapes of the diagram. """ project = os.path.splitdrive(self.project.getProjectPath())[1]\ .replace(os.sep, '.')[1:] packages = {} shapes = {} p = 10 y = 10 maxHeight = 0 sceneRect = self.umlView.sceneRect() modules = self.__buildModulesDict() sortedkeys = modules.keys() sortedkeys.sort() # step 1: build a dictionary of packages for module in sortedkeys: l = module.split('.') package = '.'.join(l[:-1]) if packages.has_key(package): packages[package][0].append(l[-1]) else: packages[package] = ([l[-1]], []) # step 2: assign modules to dictionaries and update import relationship for module in sortedkeys: l = module.split('.') package = '.'.join(l[:-1]) impLst = [] for i in modules[module].imports: if modules.has_key(i): impLst.append(i) else: if i.find('.') == -1: n = "%s.%s" % (modules[module].package, i) if modules.has_key(n): impLst.append(n) else: n = "%s.%s" % (project, i) if modules.has_key(n): impLst.append(n) elif packages.has_key(n): n = "%s.<>" % n impLst.append(n) else: n = "%s.%s" % (project, i) if modules.has_key(n): impLst.append(n) for i in modules[module].from_imports.keys(): if i.startswith('.'): dots = len(i) - len(i.lstrip('.')) if dots == 1: i = i[1:] elif dots > 1: packagePath = os.path.dirname(modules[module].file) hasInit = True ppath = packagePath while hasInit: ppath = os.path.dirname(ppath) hasInit = \ len(glob.glob(os.path.join(ppath, '__init__.*'))) > 0 shortPackage = \ packagePath.replace(ppath, '').replace(os.sep, '.')[1:] packageList = shortPackage.split('.')[1:] packageListLen = len(packageList) i = '.'.join(packageList[:packageListLen - dots + 1] + [i[dots:]]) if modules.has_key(i): impLst.append(i) else: if i.find('.') == -1: n = "%s.%s" % (modules[module].package, i) if modules.has_key(n): impLst.append(n) else: n = "%s.%s" % (project, i) if modules.has_key(n): impLst.append(n) elif packages.has_key(n): n = "%s.<>" % n impLst.append(n) else: n = "%s.%s" % (project, i) if modules.has_key(n): impLst.append(n) for imp in impLst: impPackage = '.'.join(imp.split('.')[:-1]) if not impPackage in packages[package][1] and \ not impPackage == package: packages[package][1].append(impPackage) sortedkeys = packages.keys() sortedkeys.sort() for package in sortedkeys: if package: relPackage = package.replace(project, '') if relPackage and relPackage[0] == '.': relPackage = relPackage[1:] else: relPackage = unicode(self.trUtf8("<>")) else: relPackage = unicode(self.trUtf8("<>")) shape = self.__addPackage(relPackage, packages[package][0], 0.0, 0.0) shapeRect = shape.sceneBoundingRect() shapes[package] = (shape, packages[package][1]) pn = p + shapeRect.width() + 10 maxHeight = max(maxHeight, shapeRect.height()) if pn > sceneRect.width(): p = 10 y += maxHeight + 10 maxHeight = shapeRect.height() shape.setPos(p, y) p += shapeRect.width() + 10 else: shape.setPos(p, y) p = pn rect = self.umlView._getDiagramRect(10) sceneRect = self.umlView.sceneRect() if rect.width() > sceneRect.width(): sceneRect.setWidth(rect.width()) if rect.height() > sceneRect.height(): sceneRect.setHeight(rect.height()) self.umlView.setSceneSize(sceneRect.width(), sceneRect.height()) self.__createAssociations(shapes) def __addPackage(self, name, modules, x, y): """ Private method to add a package to the diagram. @param name package name to be shown (string) @param modules list of module names contained in the package (list of strings) @param x x-coordinate (float) @param y y-coordinate (float) """ modules.sort() pm = PackageModel(name, modules) pw = PackageItem(pm, x, y, noModules = self.noModules, scene = self.scene) return pw def __createAssociations(self, shapes): """ Private method to generate the associations between the package shapes. @param shapes list of shapes """ for package in shapes.keys(): for rel in shapes[package][1]: assoc = AssociationItem(\ shapes[package][0], shapes[rel][0], Imports) self.scene.addItem(assoc) def show(self): """ Overriden method to show the dialog. """ self.__buildPackages() UMLDialog.show(self) def relayout(self): """ Method to relayout the diagram. """ self.__buildPackages() eric4-4.5.18/eric/Graphics/PaxHeaders.8617/ImportsDiagram.py0000644000175000001440000000013212261012651021541 xustar000000000000000030 mtime=1388582313.172091946 30 atime=1389081083.855724384 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Graphics/ImportsDiagram.py0000644000175000001440000002073712261012651021304 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing a dialog showing an imports diagram of a package. """ import glob import os import sys from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt.KQProgressDialog import KQProgressDialog from UMLDialog import UMLDialog from ModuleItem import ModuleItem, ModuleModel from AssociationItem import AssociationItem, Imports import GraphicsUtilities import Utilities.ModuleParser import Utilities class ImportsDiagram(UMLDialog): """ Class implementing a dialog showing an imports diagram of a package. Note: Only package internal imports are show in order to maintain some readability. """ def __init__(self, package, parent = None, name = None, showExternalImports = False): """ Constructor @param package name of a python package to show the import relationships (string) @param parent parent widget of the view (QWidget) @param name name of the view widget (QString or string) @keyparam showExternalImports flag indicating to show exports from outside the package (boolean) """ self.showExternalImports = showExternalImports self.packagePath = Utilities.normabspath(package) self.package = os.path.splitdrive(self.packagePath)[1].replace(os.sep, '.')[1:] hasInit = True ppath = self.packagePath while hasInit: ppath = os.path.dirname(ppath) hasInit = len(glob.glob(os.path.join(ppath, '__init__.*'))) > 0 self.shortPackage = self.packagePath.replace(ppath, '').replace(os.sep, '.')[1:] UMLDialog.__init__(self, self.packagePath, parent) if not name: self.setObjectName("ImportsDiagram") else: self.setObjectName(name) self.connect(self.umlView, SIGNAL("relayout()"), self.relayout) def __buildModulesDict(self): """ Private method to build a dictionary of modules contained in the package. @return dictionary of modules contained in the package. """ moduleDict = {} modules = glob.glob(Utilities.normjoinpath(self.packagePath,'*.py')) + \ glob.glob(Utilities.normjoinpath(self.packagePath,'*.pyw')) + \ glob.glob(Utilities.normjoinpath(self.packagePath,'*.ptl')) tot = len(modules) progress = KQProgressDialog(self.trUtf8("Parsing modules..."), QString(), 0, tot, self) try: prog = 0 progress.show() QApplication.processEvents() for module in modules: progress.setValue(prog) QApplication.processEvents() prog = prog + 1 try: mod = Utilities.ModuleParser.readModule(module, caching = False) except ImportError: continue else: name = mod.name if name.startswith(self.package): name = name[len(self.package) + 1:] moduleDict[name] = mod finally: progress.setValue(tot) return moduleDict def __buildImports(self): """ Private method to build the modules shapes of the diagram. """ initlist = glob.glob(os.path.join(self.packagePath, '__init__.*')) if len(initlist) == 0: ct = QGraphicsTextItem(None) ct.setHtml(\ self.trUtf8("The directory '%1' is not a Python package.")\ .arg(self.package)) self.scene.addItem(ct) return shapes = {} p = 10 y = 10 maxHeight = 0 sceneRect = self.umlView.sceneRect() modules = self.__buildModulesDict() sortedkeys = modules.keys() sortedkeys.sort() externalMods = [] packageList = self.shortPackage.split('.') packageListLen = len(packageList) for module in sortedkeys: impLst = [] for i in modules[module].imports: if i.startswith(self.package): n = i[len(self.package) + 1:] else: n = i if modules.has_key(i): impLst.append(n) elif self.showExternalImports: impLst.append(n) if not n in externalMods: externalMods.append(n) for i in modules[module].from_imports.keys(): if i.startswith('.'): dots = len(i) - len(i.lstrip('.')) if dots == 1: n = i[1:] i = n else: if self.showExternalImports: n = '.'.join(\ packageList[:packageListLen - dots + 1] + [i[dots:]]) else: n = i elif i.startswith(self.package): n = i[len(self.package) + 1:] else: n = i if modules.has_key(i): impLst.append(n) elif self.showExternalImports: impLst.append(n) if not n in externalMods: externalMods.append(n) classNames = [] for cls in modules[module].classes.keys(): className = modules[module].classes[cls].name if className not in classNames: classNames.append(className) shape = self.__addModule(module, classNames, 0.0, 0.0) shapeRect = shape.sceneBoundingRect() shapes[module] = (shape, impLst) pn = p + shapeRect.width() + 10 maxHeight = max(maxHeight, shapeRect.height()) if pn > sceneRect.width(): p = 10 y += maxHeight + 10 maxHeight = shapeRect.height() shape.setPos(p, y) p += shapeRect.width() + 10 else: shape.setPos(p, y) p = pn for module in externalMods: shape = self.__addModule(module, [], 0.0, 0.0) shapeRect = shape.sceneBoundingRect() shapes[module] = (shape, []) pn = p + shapeRect.width() + 10 maxHeight = max(maxHeight, shapeRect.height()) if pn > sceneRect.width(): p = 10 y += maxHeight + 10 maxHeight = shapeRect.height() shape.setPos(p, y) p += shapeRect.width() + 10 else: shape.setPos(p, y) p = pn rect = self.umlView._getDiagramRect(10) sceneRect = self.umlView.sceneRect() if rect.width() > sceneRect.width(): sceneRect.setWidth(rect.width()) if rect.height() > sceneRect.height(): sceneRect.setHeight(rect.height()) self.umlView.setSceneSize(sceneRect.width(), sceneRect.height()) self.__createAssociations(shapes) def __addModule(self, name, classes, x, y): """ Private method to add a module to the diagram. @param name module name to be shown (string) @param classes list of class names contained in the module (list of strings) @param x x-coordinate (float) @param y y-coordinate (float) """ classes.sort() impM = ModuleModel(name, classes) impW = ModuleItem(impM, x, y, scene = self.scene) return impW def __createAssociations(self, shapes): """ Private method to generate the associations between the module shapes. @param shapes list of shapes """ for module in shapes.keys(): for rel in shapes[module][1]: assoc = AssociationItem(\ shapes[module][0], shapes[rel][0], Imports) self.scene.addItem(assoc) def show(self): """ Overriden method to show the dialog. """ self.__buildImports() UMLDialog.show(self) def relayout(self): """ Method to relayout the diagram. """ self.__buildImports() eric4-4.5.18/eric/Graphics/PaxHeaders.8617/__init__.py0000644000175000001440000000013212261012651020356 xustar000000000000000030 mtime=1388582313.177092009 30 atime=1389081083.856724384 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Graphics/__init__.py0000644000175000001440000000034012261012651020105 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2004 - 2014 Detlev Offenbach # """ Package implementing various graphical representations. This package implements various graphical representations. """ eric4-4.5.18/eric/Graphics/PaxHeaders.8617/UMLSceneSizeDialog.py0000644000175000001440000000013212261012651022205 xustar000000000000000030 mtime=1388582313.179092034 30 atime=1389081083.856724384 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Graphics/UMLSceneSizeDialog.py0000644000175000001440000000270012261012651021736 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2004 - 2014 Detlev Offenbach # """ Module implementing a dialog to set the scene sizes. """ from PyQt4.QtGui import QDialog from Ui_UMLSceneSizeDialog import Ui_UMLSceneSizeDialog class UMLSceneSizeDialog(QDialog, Ui_UMLSceneSizeDialog): """ Class implementing a dialog to set the scene sizes. """ def __init__(self, w, h, minW, minH, parent = None, name = None): """ Constructor @param w current width of scene (integer) @param h current height of scene (integer) @param minW minimum width allowed (integer) @param minH minimum height allowed (integer) @param parent parent widget of this dialog (QWidget) @param name name of this widget (QString or string) """ QDialog.__init__(self, parent) if name: self.setObjectName(name) self.setupUi(self) self.widthSpinBox.setValue(w) self.heightSpinBox.setValue(h) self.widthSpinBox.setMinimum(minW) self.heightSpinBox.setMinimum(minH) self.widthSpinBox.selectAll() self.widthSpinBox.setFocus() def getData(self): """ Method to retrieve the entered data. @return tuple giving the selected width and height (integer, integer) """ return (self.widthSpinBox.value(), self.heightSpinBox.value()) eric4-4.5.18/eric/Graphics/PaxHeaders.8617/PackageItem.py0000644000175000001440000000013112261012651020770 xustar000000000000000029 mtime=1388582313.18109206 30 atime=1389081083.856724384 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Graphics/PackageItem.py0000644000175000001440000001312512261012651020525 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing a package item. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from UMLItem import UMLItem class PackageModel(object): """ Class implementing the package model. """ def __init__(self, name, moduleslist = []): """ Constructor @param name package name (string) @param moduleslist list of module names (list of strings) """ self.name = name self.moduleslist = moduleslist def addModule(self, modulename): """ Method to add a module to the package model. @param modulename module name to be added (string) """ self.moduleslist.append(modulename) def getModules(self): """ Method to retrieve the modules of the package. @return list of module names (list of strings) """ return self.moduleslist[:] def getName(self): """ Method to retrieve the package name. @return package name (string) """ return self.name class PackageItem(UMLItem): """ Class implementing a package item. """ def __init__(self, model = None, x = 0, y = 0, rounded = False, noModules = False, parent = None, scene = None): """ Constructor @param model module model containing the module data (ModuleModel) @param x x-coordinate (integer) @param y y-coordinate (integer) @param rounded flag indicating a rounded corner (boolean) @keyparam noModules flag indicating, that no module names should be shown (boolean) @keyparam parent reference to the parent object (QGraphicsItem) @keyparam scene reference to the scene object (QGraphicsScene) """ UMLItem.__init__(self, x, y, rounded, parent) self.model = model self.noModules = noModules scene.addItem(self) if self.model: self.__createTexts() self.__calculateSize() def __createTexts(self): """ Private method to create the text items of the class item. """ if self.model is None: return boldFont = QFont(self.font) boldFont.setBold(True) modules = self.model.getModules() x = self.margin + self.rect().x() y = self.margin + self.rect().y() self.header = QGraphicsSimpleTextItem(self) self.header.setFont(boldFont) self.header.setText(self.model.getName()) self.header.setPos(x, y) y += self.header.boundingRect().height() + self.margin if not self.noModules: if modules: txt = "\n".join(modules) else: txt = " " self.modules = QGraphicsSimpleTextItem(self) self.modules.setFont(self.font) self.modules.setText(txt) self.modules.setPos(x, y) else: self.modules = None def __calculateSize(self): """ Method to calculate the size of the package widget. """ if self.model is None: return width = self.header.boundingRect().width() height = self.header.boundingRect().height() if self.modules: width = max(width, self.modules.boundingRect().width()) height = height + self.modules.boundingRect().height() latchW = width / 3.0 latchH = min(15.0, latchW) self.setSize(width + 2 * self.margin, height + latchH + 2 * self.margin) x = self.margin + self.rect().x() y = self.margin + self.rect().y() + latchH self.header.setPos(x, y) y += self.header.boundingRect().height() + self.margin if self.modules: self.modules.setPos(x, y) def setModel(self, model): """ Method to set the package model. @param model package model containing the package data (PackageModel) """ self.scene().removeItem(self.header) self.header = None if self.modules: self.scene().removeItem(self.modules) self.modules = None self.model = model self.__createTexts() self.__calculateSize() def paint(self, painter, option, widget = None): """ Public method to paint the item in local coordinates. @param painter reference to the painter object (QPainter) @param option style options (QStyleOptionGraphicsItem) @param widget optional reference to the widget painted on (QWidget) """ pen = self.pen() if (option.state & QStyle.State_Selected) == QStyle.State(QStyle.State_Selected): pen.setWidth(2) else: pen.setWidth(1) offsetX = self.rect().x() offsetY = self.rect().y() w = self.rect().width() latchW = w / 3.0 latchH = min(15.0, latchW) h = self.rect().height() - latchH + 1 painter.setPen(pen) painter.setBrush(self.brush()) painter.setFont(self.font) painter.drawRect(offsetX, offsetY, latchW, latchH) painter.drawRect(offsetX, offsetY + latchH, w, h) y = self.margin + self.header.boundingRect().height() + latchH painter.drawLine(offsetX, offsetY + y, offsetX + w - 1, offsetY + y) self.adjustAssociations() eric4-4.5.18/eric/Graphics/PaxHeaders.8617/ZoomDialog.ui0000644000175000001440000000007411072435325020663 xustar000000000000000030 atime=1389081083.871724383 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Graphics/ZoomDialog.ui0000644000175000001440000000506211072435325020413 0ustar00detlevusers00000000000000 ZoomDialog 0 0 271 77 Zoom true Zoom &Factor: zoomSpinBox 0 0 Enter zoom factor Qt::AlignRight 0.010000000000000 1000.000000000000000 1.000000000000000 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok zoomSpinBox buttonBox accepted() ZoomDialog accept() 21 46 21 65 buttonBox rejected() ZoomDialog reject() 62 50 62 69 eric4-4.5.18/eric/Graphics/PaxHeaders.8617/UMLDialog.py0000644000175000001440000000013212261012651020374 xustar000000000000000030 mtime=1388582313.184092098 30 atime=1389081083.871724383 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Graphics/UMLDialog.py0000644000175000001440000000330612261012651020130 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing a dialog showing UML like diagrams. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt.KQMainWindow import KQMainWindow from UMLGraphicsView import UMLGraphicsView import UI.Config import UI.PixmapCache class UMLDialog(KQMainWindow): """ Class implementing a dialog showing UML like diagrams. """ def __init__(self, diagramName = "Unnamed", parent = None, name = None): """ Constructor @param diagramName name of the diagram (string) @param parent parent widget of the view (QWidget) @param name name of the view widget (QString or string) """ KQMainWindow.__init__(self, parent) if not name: self.setObjectName("UMLDialog") else: self.setObjectName(name) self.scene = QGraphicsScene(0.0, 0.0, 800.0, 600.0) self.umlView = UMLGraphicsView(self.scene, diagramName, self, "umlView") self.closeAct = \ QAction(UI.PixmapCache.getIcon("close.png"), self.trUtf8("Close"), self) self.connect(self.closeAct, SIGNAL("triggered()"), self.close) self.windowToolBar = QToolBar(self.trUtf8("Window"), self) self.windowToolBar.setIconSize(UI.Config.ToolBarIconSize) self.windowToolBar.addAction(self.closeAct) self.umlToolBar = self.umlView.initToolBar() self.addToolBar(Qt.TopToolBarArea, self.windowToolBar) self.addToolBar(Qt.TopToolBarArea, self.umlToolBar) self.setCentralWidget(self.umlView) eric4-4.5.18/eric/Graphics/PaxHeaders.8617/GraphicsUtilities.py0000644000175000001440000000013212261012651022253 xustar000000000000000030 mtime=1388582313.186092123 30 atime=1389081083.871724383 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Graphics/GraphicsUtilities.py0000644000175000001440000000710012261012651022003 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2004 - 2014 Detlev Offenbach # """ Module implementing some graphical utility functions. """ class RecursionError(OverflowError, ValueError): """ Unable to calculate result because of recursive structure. """ def sort(nodes, routes, noRecursion = False): """ Function to sort widgets topographically. Passed a list of nodes and a list of source, dest routes, it attempts to create a list of stages, where each sub list is one stage in a process. The algorithm was taken from Boa Constructor. @param nodes list of nodes to be sorted @param routes list of routes between the nodes @param noRecursion flag indicating, if recursion errors should be raised @exception RecursionError a recursion error was detected @return list of stages """ children, parents = _buildChildrenLists(routes) # first stage is those nodes having no incoming routes... stage = [] stages = [stage] taken = [] for node in nodes: if not parents.get(node): stage.append(node) if nodes and not stage: # there is no element, which does not depend on some other element! stage.append(nodes[0]) taken.extend(stage) nodes = filter(lambda x, l = stage: x not in l, nodes) while nodes: previousStageChildren = [] nodelen = len(nodes) # second stage are those nodes, which are direct children of the first stage for node in stage: for child in children.get(node, []): if child not in previousStageChildren and child not in taken: previousStageChildren.append(child) elif child in taken and noRecursion: raise RecursionError((child, node)) # unless they are children of other direct children... stage = previousStageChildren removes = [] for current in stage: currentParents = parents.get(current, []) for parent in currentParents: if parent in stage and parent != current: # might wind up removing current if not current in parents.get(parent, []): # is not mutually dependant removes.append(current) for remove in removes: while remove in stage: stage.remove(remove) stages.append(stage) taken.extend(stage) nodes = filter(lambda x, l = stage: x not in l, nodes) if nodelen == len(nodes): if noRecursion: raise RecursionError(nodes) else: stages.append(nodes[:]) nodes = [] return stages def _buildChildrenLists(routes): """ Function to build up parent - child relationships. Taken from Boa Constructor. @param routes list of routes between nodes @return dictionary of child and dictionary of parent relationships """ childrenTable = {} parentTable = {} for sourceID, destinationID in routes: currentChildren = childrenTable.get(sourceID, []) currentParents = parentTable.get(destinationID, []) if not destinationID in currentChildren: currentChildren.append(destinationID) if not sourceID in currentParents: currentParents.append(sourceID) childrenTable[sourceID] = currentChildren parentTable[destinationID] = currentParents return childrenTable, parentTable eric4-4.5.18/eric/Graphics/PaxHeaders.8617/AssociationItem.py0000644000175000001440000000013212261012651021712 xustar000000000000000030 mtime=1388582313.189092161 30 atime=1389081083.871724383 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Graphics/AssociationItem.py0000644000175000001440000003707712261012651021462 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2004 - 2014 Detlev Offenbach # """ Module implementing a graphics item for an association between two items. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from E4Graphics.E4ArrowItem import E4ArrowItem, NormalArrow, WideArrow Normal = 0 Generalisation = 1 Imports = 2 NoRegion = 0 West = 1 North = 2 East = 3 South = 4 NorthWest = 5 NorthEast = 6 SouthEast = 7 SouthWest = 8 Center = 9 class AssociationItem(E4ArrowItem): """ Class implementing a graphics item for an association between two items. The association is drawn as an arrow starting at the first items and ending at the second. """ def __init__(self, itemA, itemB, type = Normal, parent = None): """ Constructor @param itemA first widget of the association @param itemB second widget of the association @param type type of the association. This must be one of
    • Normal (default)
    • Generalisation
    • Imports
    @keyparam parent reference to the parent object (QGraphicsItem) """ if type == Normal: arrowType = NormalArrow arrowFilled = True elif type == Imports: arrowType = NormalArrow arrowFilled = True elif type == Generalisation: arrowType = WideArrow arrowFilled = False E4ArrowItem.__init__(self, QPointF(0, 0), QPointF(100, 100), arrowFilled, arrowType, parent) self.setFlag(QGraphicsItem.ItemIsMovable, False) self.setFlag(QGraphicsItem.ItemIsSelectable, False) ## self.calculateEndingPoints = self.__calculateEndingPoints_center self.calculateEndingPoints = self.__calculateEndingPoints_rectangle self.itemA = itemA self.itemB = itemB self.assocType = type self.regionA = NoRegion self.regionB = NoRegion self.calculateEndingPoints() self.itemA.addAssociation(self) self.itemB.addAssociation(self) def __mapRectFromItem(self, item): """ Private method to map item's rectangle to this item's coordinate system. @param item reference to the item to be mapped (QGraphicsRectItem) @return item's rectangle in local coordinates (QRectF) """ rect = item.rect() tl = self.mapFromItem(item, rect.topLeft()) return QRectF(tl.x(), tl.y(), rect.width(), rect.height()) def __calculateEndingPoints_center(self): """ Private method to calculate the ending points of the association item. The ending points are calculated from the centers of the two associated items. """ if self.itemA is None or self.itemB is None: return self.prepareGeometryChange() rectA = self.__mapRectFromItem(self.itemA) rectB = self.__mapRectFromItem(self.itemB) midA = QPointF(rectA.x() + rectA.width() / 2.0, rectA.y() + rectA.height() / 2.0) midB = QPointF(rectB.x() + rectB.width() / 2.0, rectB.y() + rectB.height() / 2.0) startP = self.__findRectIntersectionPoint(self.itemA, midA, midB) endP = self.__findRectIntersectionPoint(self.itemB, midB, midA) if startP.x() != -1 and startP.y() != -1 and \ endP.x() != -1 and endP.y() != -1: self.setPoints(startP.x(), startP.y(), endP.x(), endP.y()) def __calculateEndingPoints_rectangle(self): """ Private method to calculate the ending points of the association item. The ending points are calculated by the following method. For each item the diagram is divided in four Regions by its diagonals as indicated below
                       \  Region 2  /
                        \          /
                         |--------|
                         | \    / |
                         |  \  /  |
                         |   \/   |
                Region 1 |   /\   | Region 3
                         |  /  \  |
                         | /    \ |
                         |--------|
                        /          \
                       /  Region 4  \
            
    Each diagonal is defined by two corners of the bounding rectangle To calculate the start point we have to find out in which region (defined by itemA's diagonals) is itemB's TopLeft corner (lets call it region M). After that the start point will be the middle point of rectangle's side contained in region M. To calculate the end point we repeat the above but in the opposite direction (from itemB to itemA) """ if self.itemA is None or self.itemB is None: return self.prepareGeometryChange() rectA = self.__mapRectFromItem(self.itemA) rectB = self.__mapRectFromItem(self.itemB) xA = rectA.x() + rectA.width() / 2.0 yA = rectA.y() + rectA.height() / 2.0 xB = rectB.x() + rectB.width() / 2.0 yB = rectB.y() + rectB.height() / 2.0 # find itemA region rc = QRectF(xA, yA, rectA.width(), rectA.height()) oldRegionA = self.regionA self.regionA = self.__findPointRegion(rc, xB, yB) # move some regions to the standard ones if self.regionA == NorthWest: self.regionA = North elif self.regionA == NorthEast: self.regionA = East elif self.regionA == SouthEast: self.regionA = South elif self.regionA == SouthWest: self.regionA = West elif self.regionA == Center: self.regionA = West self.__updateEndPoint(self.regionA, True) # now do the same for itemB rc = QRectF(xB, yB, rectB.width(), rectB.height()) oldRegionB = self.regionB self.regionB = self.__findPointRegion(rc, xA, yA) # move some regions to the standard ones if self.regionB == NorthWest: self.regionB = North elif self.regionB == NorthEast: self.regionB = East elif self.regionB == SouthEast: self.regionB = South elif self.regionB == SouthWest: self.regionB = West elif self.regionB == Center: self.regionB = West self.__updateEndPoint(self.regionB, False) def __findPointRegion(self, rect, posX, posY): """ Private method to find out, which region of rectangle rect contains the point (PosX, PosY) and returns the region number. @param rect rectangle to calculate the region for (QRectF) @param posX x position of point (float) @param posY y position of point (float) @return the calculated region number
    West = Region 1
    North = Region 2
    East = Region 3
    South = Region 4
    NorthWest = On diagonal 2 between Region 1 and 2
    NorthEast = On diagonal 1 between Region 2 and 3
    SouthEast = On diagonal 2 between Region 3 and 4
    SouthWest = On diagonal 1 between Region4 and 1
    Center = On diagonal 1 and On diagonal 2 (the center)
    """ w = rect.width() h = rect.height() x = rect.x() y = rect.y() slope2 = w / h slope1 = -slope2 b1 = x + w / 2.0 - y * slope1 b2 = x + w / 2.0 - y * slope2 eval1 = slope1 * posY + b1 eval2 = slope2 * posY + b2 result = NoRegion # inside region 1 if eval1 > posX and eval2 > posX: result = West #inside region 2 elif eval1 > posX and eval2 < posX: result = North # inside region 3 elif eval1 < posX and eval2 < posX: result = East # inside region 4 elif eval1 < posX and eval2 > posX: result = South # inside region 5 elif eval1 == posX and eval2 < posX: result = NorthWest # inside region 6 elif eval1 < posX and eval2 == posX: result = NorthEast # inside region 7 elif eval1 == posX and eval2 > posX: result = SouthEast # inside region 8 elif eval1 > posX and eval2 == posX: result = SouthWest # inside region 9 elif eval1 == posX and eval2 == posX: result = Center return result def __updateEndPoint(self, region, isWidgetA): """ Private method to update an endpoint. @param region the region for the endpoint (integer) @param isWidgetA flag indicating update for itemA is done (boolean) """ if region == NoRegion: return if isWidgetA: rect = self.__mapRectFromItem(self.itemA) else: rect = self.__mapRectFromItem(self.itemB) x = rect.x() y = rect.y() ww = rect.width() wh = rect.height() ch = wh / 2.0 cw = ww / 2.0 if region == West: px = x py = y + ch elif region == North: px = x + cw py = y elif region == East: px = x + ww py = y + ch elif region == South: px = x + cw py = y + wh elif region == Center: px = x + cw py = y + wh if isWidgetA: self.setStartPoint(px, py) else: self.setEndPoint(px, py) def __findRectIntersectionPoint(self, item, p1, p2): """ Private method to find the intersetion point of a line with a rectangle. @param item item to check against @param p1 first point of the line (QPointF) @param p2 second point of the line (QPointF) @return the intersection point (QPointF) """ rect = self.__mapRectFromItem(item) lines = [ QLineF(rect.topLeft(), rect.topRight()), QLineF(rect.topLeft(), rect.bottomLeft()), QLineF(rect.bottomRight(), rect.bottomLeft()), QLineF(rect.bottomRight(), rect.topRight()) ] intersectLine = QLineF(p1, p2) intersectPoint = QPointF(0, 0) for line in lines: if intersectLine.intersect(line, intersectPoint) == \ QLineF.BoundedIntersection: return intersectPoint return QPointF(-1.0, -1.0) def __findIntersection(self, p1, p2, p3, p4): """ Method to calculate the intersection point of two lines. The first line is determined by the points p1 and p2, the second line by p3 and p4. If the intersection point is not contained in the segment p1p2, then it returns (-1.0, -1.0). For the function's internal calculations remember:
    QT coordinates start with the point (0,0) as the topleft corner and x-values increase from left to right and y-values increase from top to bottom; it means the visible area is quadrant I in the regular XY coordinate system
                Quadrant II     |   Quadrant I
               -----------------|-----------------
                Quadrant III    |   Quadrant IV
            
    In order for the linear function calculations to work in this method we must switch x and y values (x values become y values and viceversa) @param p1 first point of first line (QPointF) @param p2 second point of first line (QPointF) @param p3 first point of second line (QPointF) @param p4 second point of second line (QPointF) @return the intersection point (QPointF) """ x1 = p1.y() y1 = p1.x() x2 = p2.y() y2 = p2.x() x3 = p3.y() y3 = p3.x() x4 = p4.y() y4 = p4.x() # line 1 is the line between (x1, y1) and (x2, y2) # line 2 is the line between (x3, y3) and (x4, y4) no_line1 = True # it is false, if line 1 is a linear function no_line2 = True # it is false, if line 2 is a linear function slope1 = 0.0 slope2 = 0.0 b1 = 0.0 b2 = 0.0 if x2 != x1: slope1 = (y2 - y1) / (x2 - x1) b1 = y1 - slope1 * x1 no_line1 = False if x4 != x3: slope2 = (y4 - y3) / (x4 - x3) b2 = y3 - slope2 * x3 no_line2 = False pt = QPointF() # if either line is not a function if no_line1 and no_line2: # if the lines are not the same one if x1 != x3: return QPointF(-1.0, -1.0) # if the lines are the same ones if y3 <= y4: if y3 <= y1 and y1 <= y4: return QPointF(y1, x1) else: return QPointF(y2, x2) else: if y4 <= y1 and y1 <= y3: return QPointF(y1, x1) else: return QPointF(y2, x2) elif no_line1: pt.setX(slope2 * x1 + b2) pt.setY(x1) if y1 >= y2: if not (y2 <= pt.x() and pt.x() <= y1): pt.setX(-1.0) pt.setY(-1.0) else: if not (y1 <= pt.x() and pt.x() <= y2): pt.setX(-1.0) pt.setY(-1.0) return pt elif no_line2: pt.setX(slope1 * x3 + b1) pt.setY(x3) if y3 >= y4: if not (y4 <= pt.x() and pt.x() <= y3): pt.setX(-1.0) pt.setY(-1.0) else: if not (y3 <= pt.x() and pt.x() <= y4): pt.setX(-1.0) pt.setY(-1.0) return pt if slope1 == slope2: pt.setX(-1.0) pt.setY(-1.0) return pt pt.setY((b2 - b1) / (slope1 - slope2)) pt.setX(slope1 * pt.y() + b1) # the intersection point must be inside the segment (x1, y1) (x2, y2) if x2 >= x1 and y2 >= y1: if not ((x1 <= pt.y() and pt.y() <= x2) and (y1 <= pt.x() and pt.x() <= y2)): pt.setX(-1.0) pt.setY(-1.0) elif x2 < x1 and y2 >= y1: if not ((x2 <= pt.y() and pt.y() <= x1) and (y1 <= pt.x() and pt.x() <= y2)): pt.setX(-1.0) pt.setY(-1.0) elif x2 >= x1 and y2 < y1: if not ((x1 <= pt.y() and pt.y() <= x2) and (y2 <= pt.x() and pt.x() <= y1)): pt.setX(-1.0) pt.setY(-1.0) else: if not ((x2 <= pt.y() and pt.y() <= x1) and (y2 <= pt.x() and pt.x() <= y1)): pt.setX(-1.0) pt.setY(-1.0) return pt def widgetMoved(self): """ Public method to recalculate the association after a widget was moved. """ self.calculateEndingPoints() def unassociate(self): """ Public method to unassociate from the widgets. """ self.itemA.removeAssociation(self) self.itemB.removeAssociation(self) eric4-4.5.18/eric/Graphics/PaxHeaders.8617/UMLItem.py0000644000175000001440000000013212261012651020073 xustar000000000000000030 mtime=1388582313.191092186 30 atime=1389081083.871724383 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Graphics/UMLItem.py0000644000175000001440000001102012261012651017617 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2004 - 2014 Detlev Offenbach # """ Module implementing the UMLItem base class. """ from PyQt4.QtCore import * from PyQt4.QtGui import * import Preferences class UMLItem(QGraphicsRectItem): """ Class implementing the UMLItem base class. """ def __init__(self, x = 0, y = 0, rounded = False, parent = None): """ Constructor @param x x-coordinate (integer) @param y y-coordinate (integer) @param rounded flag indicating a rounded corner (boolean) @keyparam parent reference to the parent object (QGraphicsItem) """ QGraphicsRectItem.__init__(self, parent) self.font = Preferences.getGraphics("Font") self.margin = 5 self.associations = [] self.shouldAdjustAssociations = False self.setRect(x, y, 60, 30) if rounded: p = self.pen() p.setCapStyle(Qt.RoundCap) p.setJoinStyle(Qt.RoundJoin) self.setFlag(QGraphicsItem.ItemIsMovable, True) self.setFlag(QGraphicsItem.ItemIsSelectable, True) try: self.setFlag(QGraphicsItem.ItemSendsGeometryChanges, True) except AttributeError: # only available for Qt 4.6.0 and newer pass def setSize(self, width, height): """ Public method to set the rectangles size. @param width width of the rectangle (float) @param height height of the rectangle (float) """ rect = self.rect() rect.setSize(QSizeF(width, height)) self.setRect(rect) def addAssociation(self, assoc): """ Method to add an association to this widget. @param assoc association to be added (AssociationWidget) """ if assoc and not assoc in self.associations: self.associations.append(assoc) def removeAssociation(self, assoc): """ Method to remove an association to this widget. @param assoc association to be removed (AssociationWidget) """ if assoc and assoc in self.associations: self.associations.remove(assoc) def removeAssociations(self): """ Method to remove all associations of this widget. """ for assoc in self.associations[:]: assoc.unassociate() assoc.hide() del assoc def adjustAssociations(self): """ Method to adjust the associations to widget movements. """ if self.shouldAdjustAssociations: for assoc in self.associations: assoc.widgetMoved() self.shouldAdjustAssociations = False def moveBy(self, dx, dy): """ Overriden method to move the widget relative. @param dx relative movement in x-direction (float) @param dy relative movement in y-direction (float) """ QGraphicsRectItem.moveBy(self, dx, dy) self.adjustAssociations() def setPos(self, x, y): """ Overriden method to set the items position. @param x absolute x-position (float) @param y absolute y-position (float) """ QGraphicsRectItem.setPos(self, x, y) self.adjustAssociations() def itemChange(self, change, value): """ Protected method called when an items state changes. @param change the item's change (QGraphicsItem.GraphicsItemChange) @param value the value of the change (QVariant) @return adjusted values (QVariant) """ if change == QGraphicsItem.ItemPositionChange: self.shouldAdjustAssociations = True return QGraphicsItem.itemChange(self, change, value) def paint(self, painter, option, widget = None): """ Public method to paint the item in local coordinates. @param painter reference to the painter object (QPainter) @param option style options (QStyleOptionGraphicsItem) @param widget optional reference to the widget painted on (QWidget) """ pen = self.pen() if (option.state & QStyle.State_Selected) == QStyle.State(QStyle.State_Selected): pen.setWidth(2) else: pen.setWidth(1) painter.setPen(pen) painter.setBrush(self.brush()) painter.drawRect(self.rect()) self.adjustAssociations() eric4-4.5.18/eric/Graphics/PaxHeaders.8617/PackageDiagram.py0000644000175000001440000000013212261012651021437 xustar000000000000000030 mtime=1388582313.194092224 30 atime=1389081083.872724383 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Graphics/PackageDiagram.py0000644000175000001440000002633312261012651021200 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing a dialog showing a UML like class diagram of a package. """ import glob import os.path from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt.KQProgressDialog import KQProgressDialog from UMLDialog import UMLDialog from ClassItem import ClassItem, ClassModel from AssociationItem import AssociationItem, Generalisation import GraphicsUtilities import Utilities.ModuleParser import Utilities class PackageDiagram(UMLDialog): """ Class implementing a dialog showing a UML like class diagram of a package. """ def __init__(self, package, parent = None, name = None, noAttrs = False): """ Constructor @param package name of a python package to be shown (string) @param parent parent widget of the view (QWidget) @param name name of the view widget (QString or string) @keyparam noAttrs flag indicating, that no attributes should be shown (boolean) """ self.package = Utilities.normabspath(package) self.allClasses = {} self.noAttrs = noAttrs UMLDialog.__init__(self, self.package, parent) if not name: self.setObjectName("PackageDiagram") else: self.setObjectName(name) self.connect(self.umlView, SIGNAL("relayout()"), self.relayout) def __getCurrentShape(self, name): """ Private method to get the named shape. @param name name of the shape (string) @return shape (QCanvasItem) """ return self.allClasses.get(name) def __buildModulesDict(self): """ Private method to build a dictionary of modules contained in the package. @return dictionary of modules contained in the package. """ supportedExt = ['*.py', '*.pyw', '*.ptl', '*.rb'] moduleDict = {} modules = [] for ext in supportedExt: modules.extend(glob.glob(Utilities.normjoinpath(self.package, ext))) tot = len(modules) progress = KQProgressDialog(self.trUtf8("Parsing modules..."), QString(), 0, tot, self) try: prog = 0 progress.show() QApplication.processEvents() for module in modules: progress.setValue(prog) QApplication.processEvents() prog += 1 try: mod = Utilities.ModuleParser.readModule(module) except ImportError: continue else: name = mod.name if name.startswith(self.package): name = name[len(self.package) + 1:] moduleDict[name] = mod finally: progress.setValue(tot) return moduleDict def __buildClasses(self): """ Private method to build the class shapes of the package diagram. The algorithm is borrowed from Boa Constructor. """ initlist = glob.glob(os.path.join(self.package, '__init__.*')) if len(initlist) == 0: ct = QGraphicsTextItem(None, self.scene) ct.setHtml(\ self.trUtf8("The directory '%1' is not a package.")\ .arg(self.package)) return modules = self.__buildModulesDict() if not modules: ct = QGraphicsTextItem(None, self.scene) ct.setHtml(\ self.trUtf8("The package '%1' does not contain any modules.") .arg(self.package)) return # step 1: build all classes found in the modules classesFound = False for modName in modules.keys(): module = modules[modName] for cls in module.classes.keys(): classesFound = True self.__addLocalClass(cls, module.classes[cls], 0, 0) if not classesFound: ct = QGraphicsTextItem(None, self.scene) ct.setHtml(\ self.trUtf8("The package '%1' does not contain any classes.") .arg(self.package)) return # step 2: build the class hierarchies routes = [] nodes = [] for modName in modules.keys(): module = modules[modName] todo = [module.createHierarchy()] while todo: hierarchy = todo[0] for className in hierarchy.keys(): cw = self.__getCurrentShape(className) if not cw and className.find('.') >= 0: cw = self.__getCurrentShape(className.split('.')[-1]) if cw: self.allClasses[className] = cw if cw and cw.noAttrs != self.noAttrs: cw = None if cw and not (cw.external and \ (module.classes.has_key(className) or module.modules.has_key(className)) ): if className not in nodes: nodes.append(className) else: if module.classes.has_key(className): # this is a local class (defined in this module) self.__addLocalClass(className, module.classes[className], 0, 0) elif module.modules.has_key(className): # this is a local module (defined in this module) self.__addLocalClass(className, module.modules[className], 0, 0, True) else: self.__addExternalClass(className, 0, 0) nodes.append(className) if hierarchy.get(className): todo.append(hierarchy.get(className)) children = hierarchy.get(className).keys() for child in children: if (className, child) not in routes: routes.append((className, child)) del todo[0] self.__arrangeClasses(nodes, routes[:]) self.__createAssociations(routes) def __arrangeClasses(self, nodes, routes, whiteSpaceFactor = 1.2): """ Private method to arrange the shapes on the canvas. The algorithm is borrowed from Boa Constructor. """ generations = GraphicsUtilities.sort(nodes, routes) # calculate width and height of all elements sizes = [] for generation in generations: sizes.append([]) for child in generation: sizes[-1].append(self.__getCurrentShape(child).sceneBoundingRect()) # calculate total width and total height width = 0 height = 0 widths = [] heights = [] for generation in sizes: currentWidth = 0 currentHeight = 0 for rect in generation: if rect.bottom() > currentHeight: currentHeight = rect.bottom() currentWidth = currentWidth + rect.right() # update totals if currentWidth > width: width = currentWidth height = height + currentHeight # store generation info widths.append(currentWidth) heights.append(currentHeight) # add in some whitespace width = width * whiteSpaceFactor ## rawHeight = height height = height * whiteSpaceFactor - 20 ## verticalWhiteSpace = (height - rawHeight) / (len(generations) - 1.0 or 2.0) verticalWhiteSpace = 40 sceneRect = self.umlView.sceneRect() width += 50.0 height += 50.0 swidth = width < sceneRect.width() and sceneRect.width() or width sheight = height < sceneRect.height() and sceneRect.height() or height self.umlView.setSceneSize(swidth, sheight) # distribute each generation across the width and the # generations across height y = 10.0 for currentWidth, currentHeight, generation in \ map(None, widths, heights, generations): x = 10.0 # whiteSpace is the space between any two elements whiteSpace = (width - currentWidth - 20) / (len(generation) - 1.0 or 2.0) for className in generation: cw = self.__getCurrentShape(className) cw.setPos(x, y) rect = cw.sceneBoundingRect() x = x + rect.width() + whiteSpace y = y + currentHeight + verticalWhiteSpace def __addLocalClass(self, className, _class, x, y, isRbModule = False): """ Private method to add a class defined in the module. @param className name of the class to be as a dictionary key (string) @param _class class to be shown (ModuleParser.Class) @param x x-coordinate (float) @param y y-coordinate (float) @param isRbModule flag indicating a Ruby module (boolean) """ meths = _class.methods.keys() meths.sort() attrs = _class.attributes.keys() attrs.sort() name = _class.name if isRbModule: name = "%s (Module)" % name cl = ClassModel(name, meths[:], attrs[:]) cw = ClassItem(cl, False, x, y, noAttrs = self.noAttrs, scene = self.scene) self.allClasses[className] = cw def __addExternalClass(self, _class, x, y): """ Private method to add a class defined outside the module. If the canvas is too small to take the shape, it is enlarged. @param _class class to be shown (string) @param x x-coordinate (float) @param y y-coordinate (float) """ cl = ClassModel(_class) cw = ClassItem(cl, True, x, y, noAttrs = self.noAttrs, scene = self.scene) self.allClasses[_class] = cw def __createAssociations(self, routes): """ Private method to generate the associations between the class shapes. @param routes list of relationsships """ for route in routes: if len(route) > 1: assoc = AssociationItem(\ self.__getCurrentShape(route[1]), self.__getCurrentShape(route[0]), Generalisation) self.scene.addItem(assoc) def show(self): """ Overriden method to show the dialog. """ self.__buildClasses() UMLDialog.show(self) def relayout(self): """ Method to relayout the diagram. """ self.allClasses.clear() self.__buildClasses() eric4-4.5.18/eric/Graphics/PaxHeaders.8617/UMLGraphicsView.py0000644000175000001440000000013212261012651021570 xustar000000000000000030 mtime=1388582313.212092452 30 atime=1389081083.872724383 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Graphics/UMLGraphicsView.py0000644000175000001440000004712312261012651021331 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing a subclass of E4GraphicsView for our diagrams. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from E4Graphics.E4GraphicsView import E4GraphicsView from KdeQt import KQFileDialog, KQMessageBox import KdeQt.KQPrinter from KdeQt.KQPrintDialog import KQPrintDialog from UMLItem import UMLItem from UMLSceneSizeDialog import UMLSceneSizeDialog from ZoomDialog import ZoomDialog import UI.Config import UI.PixmapCache import Preferences class UMLGraphicsView(E4GraphicsView): """ Class implementing a specialized E4GraphicsView for our diagrams. @signal relayout() emitted to indicate a relayout of the diagram is requested """ def __init__(self, scene, diagramName = "Unnamed", parent = None, name = None): """ Constructor @param scene reference to the scene object (QGraphicsScene) @param diagramName name of the diagram (string or QString) @param parent parent widget of the view (QWidget) @param name name of the view widget (QString or string) """ E4GraphicsView.__init__(self, scene, parent) if name: self.setObjectName(name) self.setViewportUpdateMode(QGraphicsView.FullViewportUpdate) self.diagramName = diagramName self.border = 10 self.deltaSize = 100.0 self.__initActions() self.connect(scene, SIGNAL("changed(const QList &)"), self.__sceneChanged) def __initActions(self): """ Private method to initialize the view actions. """ self.deleteShapeAct = \ QAction(UI.PixmapCache.getIcon("deleteShape.png"), self.trUtf8("Delete shapes"), self) self.connect(self.deleteShapeAct, SIGNAL("triggered()"), self.__deleteShape) self.saveAct = \ QAction(UI.PixmapCache.getIcon("fileSave.png"), self.trUtf8("Save as Image"), self) self.connect(self.saveAct, SIGNAL("triggered()"), self.__saveImage) self.printAct = \ QAction(UI.PixmapCache.getIcon("print.png"), self.trUtf8("Print"), self) self.connect(self.printAct, SIGNAL("triggered()"), self.__printDiagram) self.printPreviewAct = \ QAction(UI.PixmapCache.getIcon("printPreview.png"), self.trUtf8("Print Preview"), self) self.connect(self.printPreviewAct, SIGNAL("triggered()"), self.__printPreviewDiagram) self.zoomInAct = \ QAction(UI.PixmapCache.getIcon("zoomIn.png"), self.trUtf8("Zoom in"), self) self.connect(self.zoomInAct, SIGNAL("triggered()"), self.zoomIn) self.zoomOutAct = \ QAction(UI.PixmapCache.getIcon("zoomOut.png"), self.trUtf8("Zoom out"), self) self.connect(self.zoomOutAct, SIGNAL("triggered()"), self.zoomOut) self.zoomAct = \ QAction(UI.PixmapCache.getIcon("zoomTo.png"), self.trUtf8("Zoom..."), self) self.connect(self.zoomAct, SIGNAL("triggered()"), self.__zoom) self.zoomResetAct = \ QAction(UI.PixmapCache.getIcon("zoomReset.png"), self.trUtf8("Zoom reset"), self) self.connect(self.zoomResetAct, SIGNAL("triggered()"), self.zoomReset) self.incWidthAct = \ QAction(UI.PixmapCache.getIcon("sceneWidthInc.png"), self.trUtf8("Increase width by %1 points").arg(self.deltaSize), self) self.connect(self.incWidthAct, SIGNAL("triggered()"), self.__incWidth) self.incHeightAct = \ QAction(UI.PixmapCache.getIcon("sceneHeightInc.png"), self.trUtf8("Increase height by %1 points").arg(self.deltaSize), self) self.connect(self.incHeightAct, SIGNAL("triggered()"), self.__incHeight) self.decWidthAct = \ QAction(UI.PixmapCache.getIcon("sceneWidthDec.png"), self.trUtf8("Decrease width by %1 points").arg(self.deltaSize), self) self.connect(self.decWidthAct, SIGNAL("triggered()"), self.__decWidth) self.decHeightAct = \ QAction(UI.PixmapCache.getIcon("sceneHeightDec.png"), self.trUtf8("Decrease height by %1 points").arg(self.deltaSize), self) self.connect(self.decHeightAct, SIGNAL("triggered()"), self.__decHeight) self.setSizeAct = \ QAction(UI.PixmapCache.getIcon("sceneSize.png"), self.trUtf8("Set size"), self) self.connect(self.setSizeAct, SIGNAL("triggered()"), self.__setSize) self.relayoutAct = \ QAction(UI.PixmapCache.getIcon("reload.png"), self.trUtf8("Re-Layout"), self) self.connect(self.relayoutAct, SIGNAL("triggered()"), self.__relayout) self.alignLeftAct = \ QAction(UI.PixmapCache.getIcon("shapesAlignLeft.png"), self.trUtf8("Align Left"), self) self.connect(self.alignLeftAct, SIGNAL("triggered()"), lambda align=Qt.AlignLeft: self.__alignShapes(align)) self.alignHCenterAct = \ QAction(UI.PixmapCache.getIcon("shapesAlignHCenter.png"), self.trUtf8("Align Center Horizontal"), self) self.connect(self.alignHCenterAct, SIGNAL("triggered()"), lambda align=Qt.AlignHCenter: self.__alignShapes(align)) self.alignRightAct = \ QAction(UI.PixmapCache.getIcon("shapesAlignRight.png"), self.trUtf8("Align Right"), self) self.connect(self.alignRightAct, SIGNAL("triggered()"), lambda align=Qt.AlignRight: self.__alignShapes(align)) self.alignTopAct = \ QAction(UI.PixmapCache.getIcon("shapesAlignTop.png"), self.trUtf8("Align Top"), self) self.connect(self.alignTopAct, SIGNAL("triggered()"), lambda align=Qt.AlignTop: self.__alignShapes(align)) self.alignVCenterAct = \ QAction(UI.PixmapCache.getIcon("shapesAlignVCenter.png"), self.trUtf8("Align Center Vertical"), self) self.connect(self.alignVCenterAct, SIGNAL("triggered()"), lambda align=Qt.AlignVCenter: self.__alignShapes(align)) self.alignBottomAct = \ QAction(UI.PixmapCache.getIcon("shapesAlignBottom.png"), self.trUtf8("Align Bottom"), self) self.connect(self.alignBottomAct, SIGNAL("triggered()"), lambda align=Qt.AlignBottom: self.__alignShapes(align)) def __checkSizeActions(self): """ Private slot to set the enabled state of the size actions. """ diagramSize = self._getDiagramSize(10) sceneRect = self.scene().sceneRect() if (sceneRect.width() - self.deltaSize) < diagramSize.width(): self.decWidthAct.setEnabled(False) else: self.decWidthAct.setEnabled(True) if (sceneRect.height() - self.deltaSize) < diagramSize.height(): self.decHeightAct.setEnabled(False) else: self.decHeightAct.setEnabled(True) def __sceneChanged(self, areas): """ Private slot called when the scene changes. @param areas list of rectangles that contain changes (list of QRectF) """ if len(self.scene().selectedItems()) > 0: self.deleteShapeAct.setEnabled(True) else: self.deleteShapeAct.setEnabled(False) sceneRect = self.scene().sceneRect() newWidth = width = sceneRect.width() newHeight = height = sceneRect.height() rect = self._getDiagramRect(10) if width < rect.width(): newWidth = rect.width() if height < rect.height(): newHeight = rect.height() if newHeight != height or newWidth != width: self.setSceneSize(newWidth, newHeight) self.__checkSizeActions() def initToolBar(self): """ Public method to populate a toolbar with our actions. @return the populated toolBar (QToolBar) """ toolBar = QToolBar(self.trUtf8("Graphics"), self) toolBar.setIconSize(UI.Config.ToolBarIconSize) toolBar.addAction(self.deleteShapeAct) toolBar.addSeparator() toolBar.addAction(self.saveAct) toolBar.addSeparator() toolBar.addAction(self.printPreviewAct) toolBar.addAction(self.printAct) toolBar.addSeparator() toolBar.addAction(self.zoomInAct) toolBar.addAction(self.zoomOutAct) toolBar.addAction(self.zoomAct) toolBar.addAction(self.zoomResetAct) toolBar.addSeparator() toolBar.addAction(self.alignLeftAct) toolBar.addAction(self.alignHCenterAct) toolBar.addAction(self.alignRightAct) toolBar.addAction(self.alignTopAct) toolBar.addAction(self.alignVCenterAct) toolBar.addAction(self.alignBottomAct) toolBar.addSeparator() toolBar.addAction(self.incWidthAct) toolBar.addAction(self.incHeightAct) toolBar.addAction(self.decWidthAct) toolBar.addAction(self.decHeightAct) toolBar.addAction(self.setSizeAct) toolBar.addSeparator() toolBar.addAction(self.relayoutAct) return toolBar def filteredItems(self, items): """ Public method to filter a list of items. @param items list of items as returned by the scene object (QGraphicsItem) @return list of interesting collision items (QGraphicsItem) """ return [itm for itm in items if isinstance(itm, UMLItem)] def selectItems(self, items): """ Public method to select the given items. @param items list of items to be selected (list of QGraphicsItemItem) """ # step 1: deselect all items self.unselectItems() # step 2: select all given items for itm in items: if isinstance(itm, UMLItem): itm.setSelected(True) def selectItem(self, item): """ Public method to select an item. @param item item to be selected (QGraphicsItemItem) """ if isinstance(item, UMLItem): item.setSelected(not item.isSelected()) def __deleteShape(self): """ Private method to delete the selected shapes from the display. """ for item in self.scene().selectedItems(): item.removeAssociations() item.setSelected(False) self.scene().removeItem(item) del item def __incWidth(self): """ Private method to handle the increase width context menu entry. """ self.resizeScene(self.deltaSize, True) self.__checkSizeActions() def __incHeight(self): """ Private method to handle the increase height context menu entry. """ self.resizeScene(self.deltaSize, False) self.__checkSizeActions() def __decWidth(self): """ Private method to handle the decrease width context menu entry. """ self.resizeScene(-self.deltaSize, True) self.__checkSizeActions() def __decHeight(self): """ Private method to handle the decrease height context menu entry. """ self.resizeScene(-self.deltaSize, False) self.__checkSizeActions() def __setSize(self): """ Private method to handle the set size context menu entry. """ rect = self._getDiagramRect(10) sceneRect = self.scene().sceneRect() dlg = UMLSceneSizeDialog(sceneRect.width(), sceneRect.height(), rect.width(), rect.height(), self) if dlg.exec_() == QDialog.Accepted: width, height = dlg.getData() self.setSceneSize(width, height) self.__checkSizeActions() def __saveImage(self): """ Private method to handle the save context menu entry. """ selectedFilter = QString('') fname = KQFileDialog.getSaveFileName(\ self, self.trUtf8("Save Diagram"), QString(), self.trUtf8("Portable Network Graphics (*.png);;" "Scalable Vector Graphics (*.svg)"), selectedFilter, QFileDialog.Options(QFileDialog.DontConfirmOverwrite)) if not fname.isEmpty(): ext = QFileInfo(fname).suffix() if ext.isEmpty(): ex = selectedFilter.section('(*',1,1).section(')',0,0) if not ex.isEmpty(): fname.append(ex) if QFileInfo(fname).exists(): res = KQMessageBox.warning(self, self.trUtf8("Save Diagram"), self.trUtf8("

    The file %1 already exists.

    ") .arg(fname), QMessageBox.StandardButtons(\ QMessageBox.Abort | \ QMessageBox.Save), QMessageBox.Abort) if res == QMessageBox.Abort or res == QMessageBox.Cancel: return success = self.saveImage(fname, QFileInfo(fname).suffix().toUpper()) if not success: KQMessageBox.critical(None, self.trUtf8("Save Diagram"), self.trUtf8("""

    The file %1 could not be saved.

    """) .arg(fname)) def __relayout(self): """ Private method to handle the re-layout context menu entry. """ scene = self.scene() for itm in scene.items()[:]: if itm.scene() == scene: scene.removeItem(itm) self.emit(SIGNAL("relayout()")) def __printDiagram(self): """ Private slot called to print the diagram. """ printer = KdeQt.KQPrinter.KQPrinter(mode = QPrinter.ScreenResolution) printer.setFullPage(True) if Preferences.getPrinter("ColorMode"): printer.setColorMode(KdeQt.KQPrinter.Color) else: printer.setColorMode(KdeQt.KQPrinter.GrayScale) if Preferences.getPrinter("FirstPageFirst"): printer.setPageOrder(KdeQt.KQPrinter.FirstPageFirst) else: printer.setPageOrder(KdeQt.KQPrinter.LastPageFirst) printer.setPageMargins( Preferences.getPrinter("LeftMargin") * 10, Preferences.getPrinter("TopMargin") * 10, Preferences.getPrinter("RightMargin") * 10, Preferences.getPrinter("BottomMargin") * 10, QPrinter.Millimeter ) printer.setPrinterName(Preferences.getPrinter("PrinterName")) printDialog = KQPrintDialog(printer, self) if printDialog.exec_(): self.printDiagram(printer, self.diagramName) def __printPreviewDiagram(self): """ Private slot called to show a print preview of the diagram. """ from PyQt4.QtGui import QPrintPreviewDialog printer = KdeQt.KQPrinter.KQPrinter(mode = QPrinter.ScreenResolution) printer.setFullPage(True) if Preferences.getPrinter("ColorMode"): printer.setColorMode(KdeQt.KQPrinter.Color) else: printer.setColorMode(KdeQt.KQPrinter.GrayScale) if Preferences.getPrinter("FirstPageFirst"): printer.setPageOrder(KdeQt.KQPrinter.FirstPageFirst) else: printer.setPageOrder(KdeQt.KQPrinter.LastPageFirst) printer.setPageMargins( Preferences.getPrinter("LeftMargin") * 10, Preferences.getPrinter("TopMargin") * 10, Preferences.getPrinter("RightMargin") * 10, Preferences.getPrinter("BottomMargin") * 10, QPrinter.Millimeter ) printer.setPrinterName(Preferences.getPrinter("PrinterName")) preview = QPrintPreviewDialog(printer, self) self.connect(preview, SIGNAL("paintRequested(QPrinter*)"), self.printDiagram) preview.exec_() def __zoom(self): """ Private method to handle the zoom context menu action. """ dlg = ZoomDialog(self.zoom(), self) if dlg.exec_() == QDialog.Accepted: zoom = dlg.getZoomSize() self.setZoom(zoom) def setDiagramName(self, name): """ Public slot to set the diagram name. @param name diagram name (string or QString) """ self.diagramName = name def __alignShapes(self, alignment): """ Private slot to align the selected shapes. @param alignment alignment type (Qt.AlignmentFlag) """ # step 1: get all selected items items = self.scene().selectedItems() if len(items) <= 1: return # step 2: find the index of the item to align in relation to amount = None for i, item in enumerate(items): rect = item.sceneBoundingRect() if alignment == Qt.AlignLeft: if amount is None or rect.x() < amount: amount = rect.x() index = i elif alignment == Qt.AlignRight: if amount is None or rect.x() + rect.width() > amount: amount = rect.x() + rect.width() index = i elif alignment == Qt.AlignHCenter: if amount is None or rect.width() > amount: amount = rect.width() index = i elif alignment == Qt.AlignTop: if amount is None or rect.y() < amount: amount = rect.y() index = i elif alignment == Qt.AlignBottom: if amount is None or rect.y() + rect.height() > amount: amount = rect.y() + rect.height() index = i elif alignment == Qt.AlignVCenter: if amount is None or rect.height() > amount: amount = rect.height() index = i rect = items[index].sceneBoundingRect() # step 3: move the other items for i, item in enumerate(items): if i == index: continue itemrect = item.sceneBoundingRect() xOffset = yOffset = 0 if alignment == Qt.AlignLeft: xOffset = rect.x() - itemrect.x() elif alignment == Qt.AlignRight: xOffset = (rect.x() + rect.width()) - \ (itemrect.x() + itemrect.width()) elif alignment == Qt.AlignHCenter: xOffset = (rect.x() + rect.width() / 2) - \ (itemrect.x() + itemrect.width() / 2) elif alignment == Qt.AlignTop: yOffset = rect.y() - itemrect.y() elif alignment == Qt.AlignBottom: yOffset = (rect.y() + rect.height()) - \ (itemrect.y() + itemrect.height()) elif alignment == Qt.AlignVCenter: yOffset = (rect.y() + rect.height() / 2) - \ (itemrect.y() + itemrect.height() / 2) item.moveBy(xOffset, yOffset) self.scene().update() eric4-4.5.18/eric/Graphics/PaxHeaders.8617/ClassItem.py0000644000175000001440000000013212261012651020503 xustar000000000000000030 mtime=1388582313.215092491 30 atime=1389081083.872724383 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Graphics/ClassItem.py0000644000175000001440000001535612261012651020247 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing an UML like class item. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from UMLItem import UMLItem class ClassModel(object): """ Class implementing the class model. """ def __init__(self, name, methods = [], attributes = []): """ Constructor @param name the class name (string) @param methods list of method names of the class (list of strings) @param attributes list of attribute names of the class (list of strings) """ self.name = name self.methods = methods self.attributes = attributes def addMethod(self, method): """ Method to add a method to the class model. @param method method name to be added (string) """ self.methods.append(method) def addAttribute(self, attribute): """ Method to add an attribute to the class model. @param attribute attribute name to be added (string) """ self.attributes.append(attribute) def getMethods(self): """ Method to retrieve the methods of the class. @return list of class methods (list of strings) """ return self.methods[:] def getAttributes(self): """ Method to retrieve the attributes of the class. @return list of class attributes (list of strings) """ return self.attributes[:] def getName(self): """ Method to retrieve the class name. @return class name (string) """ return self.name class ClassItem(UMLItem): """ Class implementing an UML like class item. """ def __init__(self, model = None, external = False, x = 0, y = 0, rounded = False, noAttrs = False, parent = None, scene = None): """ Constructor @param model class model containing the class data (ClassModel) @param external flag indicating a class defined outside our scope (boolean) @param x x-coordinate (integer) @param y y-coordinate (integer) @keyparam rounded flag indicating a rounded corner (boolean) @keyparam noAttrs flag indicating, that no attributes should be shown (boolean) @keyparam parent reference to the parent object (QGraphicsItem) @keyparam scene reference to the scene object (QGraphicsScene) """ UMLItem.__init__(self, x, y, rounded, parent) self.model = model self.external = external self.noAttrs = noAttrs scene.addItem(self) if self.model: self.__createTexts() self.__calculateSize() def __createTexts(self): """ Private method to create the text items of the class item. """ if self.model is None: return boldFont = QFont(self.font) boldFont.setBold(True) attrs = self.model.getAttributes() meths = self.model.getMethods() x = self.margin + self.rect().x() y = self.margin + self.rect().y() self.header = QGraphicsSimpleTextItem(self) self.header.setFont(boldFont) self.header.setText(self.model.getName()) self.header.setPos(x, y) y += self.header.boundingRect().height() + self.margin if not self.noAttrs and not self.external: if attrs: txt = "\n".join(attrs) else: txt = " " self.attrs = QGraphicsSimpleTextItem(self) self.attrs.setFont(self.font) self.attrs.setText(txt) self.attrs.setPos(x, y) y += self.attrs.boundingRect().height() + self.margin else: self.attrs = None if meths: txt = "\n".join(meths) else: txt = " " self.meths = QGraphicsSimpleTextItem(self) self.meths.setFont(self.font) self.meths.setText(txt) self.meths.setPos(x, y) def __calculateSize(self): """ Private method to calculate the size of the class item. """ if self.model is None: return width = self.header.boundingRect().width() height = self.header.boundingRect().height() if self.attrs: width = max(width, self.attrs.boundingRect().width()) height = height + self.attrs.boundingRect().height() + self.margin if self.meths: width = max(width, self.meths.boundingRect().width()) height = height + self.meths.boundingRect().height() self.setSize(width + 2 * self.margin, height + 2 * self.margin) def setModel(self, model): """ Method to set the class model. @param model class model containing the class data (ClassModel) """ self.scene().removeItem(self.header) self.header = None if self.attrs: self.scene().removeItem(self.attrs) self.attrs = None if self.meths: self.scene().removeItem(self.meths) self.meths = None self.model = model self.__createTexts() self.__calculateSize() def paint(self, painter, option, widget = None): """ Public method to paint the item in local coordinates. @param painter reference to the painter object (QPainter) @param option style options (QStyleOptionGraphicsItem) @param widget optional reference to the widget painted on (QWidget) """ pen = self.pen() if (option.state & QStyle.State_Selected) == QStyle.State(QStyle.State_Selected): pen.setWidth(2) else: pen.setWidth(1) painter.setPen(pen) painter.setBrush(self.brush()) painter.setFont(self.font) offsetX = self.rect().x() offsetY = self.rect().y() w = self.rect().width() h = self.rect().height() painter.drawRect(offsetX, offsetY, w, h) y = self.margin + self.header.boundingRect().height() painter.drawLine(offsetX, offsetY + y, offsetX + w - 1, offsetY + y) if self.attrs: y += self.margin + self.attrs.boundingRect().height() painter.drawLine(offsetX, offsetY + y, offsetX + w - 1, offsetY + y) self.adjustAssociations() def isExternal(self): """ Method returning the external state. @return external state (boolean) """ return self.external eric4-4.5.18/eric/Graphics/PaxHeaders.8617/UMLClassDiagram.py0000644000175000001440000000013212261012651021527 xustar000000000000000030 mtime=1388582313.220092554 30 atime=1389081083.872724383 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Graphics/UMLClassDiagram.py0000644000175000001440000002316512261012651021270 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing a dialog showing a UML like class diagram. """ from PyQt4.QtCore import * from PyQt4.QtGui import * import Utilities.ModuleParser from UMLDialog import UMLDialog from ClassItem import ClassItem, ClassModel from AssociationItem import AssociationItem, Generalisation import GraphicsUtilities class UMLClassDiagram(UMLDialog): """ Class implementing a dialog showing a UML like class diagram. """ def __init__(self, file, parent = None, name = None, noAttrs = False): """ Constructor @param file filename of a python module to be shown (string) @param parent parent widget of the view (QWidget) @param name name of the view widget (QString or string) @keyparam noAttrs flag indicating, that no attributes should be shown (boolean) """ self.file = file self.noAttrs = noAttrs UMLDialog.__init__(self, self.file, parent) if not name: self.setObjectName("UMLClassDiagram") else: self.setObjectName(name) self.allClasses = {} self.allModules = {} self.connect(self.umlView, SIGNAL("relayout()"), self.relayout) def __getCurrentShape(self, name): """ Private method to get the named shape. @param name name of the shape (string) @return shape (QGraphicsItem) """ return self.allClasses.get(name) def __buildClasses(self): """ Private method to build the class shapes of the class diagram. The algorithm is borrowed from Boa Constructor. """ try: module = Utilities.ModuleParser.readModule(self.file) except ImportError: ct = QGraphicsTextItem(None) ct.setHtml(\ self.trUtf8("The module '%1' could not be found.").arg(self.file)) self.scene.addItem(ct) return if not self.allModules.has_key(self.file): self.allModules[self.file] = [] routes = [] nodes = [] todo = [module.createHierarchy()] classesFound = False while todo: hierarchy = todo[0] for className in hierarchy.keys(): classesFound = True cw = self.__getCurrentShape(className) if not cw and className.find('.') >= 0: cw = self.__getCurrentShape(className.split('.')[-1]) if cw: self.allClasses[className] = cw if className not in self.allModules[self.file]: self.allModules[self.file].append(className) if cw and cw.noAttrs != self.noAttrs: cw = None if cw and not (cw.external and \ (module.classes.has_key(className) or module.modules.has_key(className)) ): if cw.scene() != self.scene: self.scene.addItem(cw) cw.setPos(10, 10) if className not in nodes: nodes.append(className) else: if module.classes.has_key(className): # this is a local class (defined in this module) self.__addLocalClass(\ className, module.classes[className], 0, 0) elif module.modules.has_key(className): # this is a local module (defined in this module) self.__addLocalClass(\ className, module.modules[className], 0, 0, True) else: self.__addExternalClass(className, 0, 0) nodes.append(className) if hierarchy.get(className): todo.append(hierarchy.get(className)) children = hierarchy.get(className).keys() for child in children: if (className, child) not in routes: routes.append((className, child)) del todo[0] if classesFound: self.__arrangeClasses(nodes, routes[:]) self.__createAssociations(routes) else: ct = QGraphicsTextItem(None) ct.setHtml(\ self.trUtf8("The module '%1' does not contain any classes.")\ .arg(self.file)) self.scene.addItem(ct) def __arrangeClasses(self, nodes, routes, whiteSpaceFactor = 1.2): """ Private method to arrange the shapes on the canvas. The algorithm is borrowed from Boa Constructor. """ generations = GraphicsUtilities.sort(nodes, routes) # calculate width and height of all elements sizes = [] for generation in generations: sizes.append([]) for child in generation: sizes[-1].append(self.__getCurrentShape(child).sceneBoundingRect()) # calculate total width and total height width = 0 height = 0 widths = [] heights = [] for generation in sizes: currentWidth = 0 currentHeight = 0 for rect in generation: if rect.bottom() > currentHeight: currentHeight = rect.bottom() currentWidth = currentWidth + rect.right() # update totals if currentWidth > width: width = currentWidth height = height + currentHeight # store generation info widths.append(currentWidth) heights.append(currentHeight) # add in some whitespace width = width * whiteSpaceFactor ## rawHeight = height height = height * whiteSpaceFactor - 20 ## verticalWhiteSpace = (height - rawHeight) / (len(generations) - 1.0 or 2.0) verticalWhiteSpace = 40 sceneRect = self.umlView.sceneRect() width += 50.0 height += 50.0 swidth = width < sceneRect.width() and sceneRect.width() or width sheight = height < sceneRect.height() and sceneRect.height() or height self.umlView.setSceneSize(swidth, sheight) # distribute each generation across the width and the # generations across height y = 10.0 for currentWidth, currentHeight, generation in \ map(None, widths, heights, generations): x = 10.0 # whiteSpace is the space between any two elements whiteSpace = (width - currentWidth - 20) / (len(generation) - 1.0 or 2.0) for className in generation: cw = self.__getCurrentShape(className) cw.setPos(x, y) rect = cw.sceneBoundingRect() x = x + rect.width() + whiteSpace y = y + currentHeight + verticalWhiteSpace def __addLocalClass(self, className, _class, x, y, isRbModule = False): """ Private method to add a class defined in the module. @param className name of the class to be as a dictionary key (string) @param _class class to be shown (ModuleParser.Class) @param x x-coordinate (float) @param y y-coordinate (float) @param isRbModule flag indicating a Ruby module (boolean) """ meths = _class.methods.keys() meths.sort() attrs = _class.attributes.keys() attrs.sort() name = _class.name if isRbModule: name = "%s (Module)" % name cl = ClassModel(name, meths[:], attrs[:]) cw = ClassItem(cl, False, x, y, noAttrs = self.noAttrs, scene = self.scene) self.allClasses[className] = cw if _class.name not in self.allModules[self.file]: self.allModules[self.file].append(_class.name) def __addExternalClass(self, _class, x, y): """ Private method to add a class defined outside the module. If the canvas is too small to take the shape, it is enlarged. @param _class class to be shown (string) @param x x-coordinate (float) @param y y-coordinate (float) """ cl = ClassModel(_class) cw = ClassItem(cl, True, x, y, noAttrs = self.noAttrs, scene = self.scene) self.allClasses[_class] = cw if _class not in self.allModules[self.file]: self.allModules[self.file].append(_class) def __createAssociations(self, routes): """ Private method to generate the associations between the class shapes. @param routes list of relationsships """ for route in routes: if len(route) > 1: assoc = AssociationItem(\ self.__getCurrentShape(route[1]), self.__getCurrentShape(route[0]), Generalisation) self.scene.addItem(assoc) def show(self): """ Overriden method to show the dialog. """ self.__buildClasses() UMLDialog.show(self) def relayout(self): """ Public method to relayout the diagram. """ self.allClasses.clear() self.allModules.clear() self.__buildClasses() eric4-4.5.18/eric/Graphics/PaxHeaders.8617/UMLSceneSizeDialog.ui0000644000175000001440000000007411072435325022205 xustar000000000000000030 atime=1389081083.873724383 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Graphics/UMLSceneSizeDialog.ui0000644000175000001440000000522611072435325021737 0ustar00detlevusers00000000000000 UMLSceneSizeDialog 0 0 314 103 Set Size true Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok Height (in pixels): Width (in pixels): Select the height of the diagram 100 100000 Select the width of the diagram 100 100000 qPixmapFromMimeSource buttonBox accepted() UMLSceneSizeDialog accept() 24 73 24 93 buttonBox rejected() UMLSceneSizeDialog reject() 79 75 79 94 eric4-4.5.18/eric/Graphics/PaxHeaders.8617/SvgDiagram.py0000644000175000001440000000013212261012651020643 xustar000000000000000030 mtime=1388582313.222092579 30 atime=1389081083.873724383 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Graphics/SvgDiagram.py0000644000175000001440000002622112261012651020400 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2008 - 2014 Detlev Offenbach # """ Module implementing a dialog showing a SVG graphic. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from PyQt4.QtSvg import QSvgWidget import KdeQt.KQPrinter from KdeQt.KQMainWindow import KQMainWindow from KdeQt.KQPrintDialog import KQPrintDialog from ZoomDialog import ZoomDialog import UI.Config import Preferences class SvgDiagram(KQMainWindow): """ Class implementing a dialog showing a SVG graphic. """ def __init__(self, svgFile, parent = None, name = None): """ Constructor @param svgFile filename of a SVG graphics file to show (QString or string) @param parent parent widget of the view (QWidget) @param name name of the view widget (QString or string) """ KQMainWindow.__init__(self, parent) if name: self.setObjectName(name) else: self.setObjectName("SvgDiagram") self.setWindowTitle(self.trUtf8("SVG-Viewer")) self.svgWidget = QSvgWidget() self.svgWidget.setObjectName("svgWidget") self.svgWidget.setBackgroundRole(QPalette.Base) self.svgWidget.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Ignored) self.svgView = QScrollArea() self.svgView.setObjectName("svgView") self.svgView.setBackgroundRole(QPalette.Dark) self.svgView.setWidget(self.svgWidget) self.setCentralWidget(self.svgView) # polish up the dialog self.resize(QSize(800, 600).expandedTo(self.minimumSizeHint())) self.zoom = 1.0 self.svgFile = svgFile self.svgWidget.load(self.svgFile) self.svgWidget.resize(self.svgWidget.renderer().defaultSize()) self.__initActions() self.__initContextMenu() self.__initToolBars() def __initActions(self): """ Private method to initialize the view actions. """ self.closeAct = \ QAction(UI.PixmapCache.getIcon("close.png"), self.trUtf8("Close"), self) self.connect(self.closeAct, SIGNAL("triggered()"), self.close) self.printAct = \ QAction(UI.PixmapCache.getIcon("print.png"), self.trUtf8("Print"), self) self.connect(self.printAct, SIGNAL("triggered()"), self.__printDiagram) self.printPreviewAct = \ QAction(UI.PixmapCache.getIcon("printPreview.png"), self.trUtf8("Print Preview"), self) self.connect(self.printPreviewAct, SIGNAL("triggered()"), self.__printPreviewDiagram) self.zoomInAct = \ QAction(UI.PixmapCache.getIcon("zoomIn.png"), self.trUtf8("Zoom in"), self) self.connect(self.zoomInAct, SIGNAL("triggered()"), self.__zoomIn) self.zoomOutAct = \ QAction(UI.PixmapCache.getIcon("zoomOut.png"), self.trUtf8("Zoom out"), self) self.connect(self.zoomOutAct, SIGNAL("triggered()"), self.__zoomOut) self.zoomAct = \ QAction(UI.PixmapCache.getIcon("zoomTo.png"), self.trUtf8("Zoom..."), self) self.connect(self.zoomAct, SIGNAL("triggered()"), self.__zoom) self.zoomResetAct = \ QAction(UI.PixmapCache.getIcon("zoomReset.png"), self.trUtf8("Zoom reset"), self) self.connect(self.zoomResetAct, SIGNAL("triggered()"), self.__zoomReset) def __initContextMenu(self): """ Private method to initialize the context menu. """ self.__menu = QMenu(self) self.__menu.addAction(self.closeAct) self.__menu.addSeparator() self.__menu.addAction(self.printPreviewAct) self.__menu.addAction(self.printAct) self.__menu.addSeparator() self.__menu.addAction(self.zoomInAct) self.__menu.addAction(self.zoomOutAct) self.__menu.addAction(self.zoomAct) self.__menu.addAction(self.zoomResetAct) self.setContextMenuPolicy(Qt.CustomContextMenu) self.connect(self, SIGNAL('customContextMenuRequested(const QPoint &)'), self.__showContextMenu) def __showContextMenu(self, coord): """ Private slot to show the context menu of the listview. @param coord the position of the mouse pointer (QPoint) """ self.__menu.popup(self.mapToGlobal(coord)) def __initToolBars(self): """ Private method to populate the toolbars with our actions. """ self.windowToolBar = QToolBar(self.trUtf8("Window"), self) self.windowToolBar.setIconSize(UI.Config.ToolBarIconSize) self.windowToolBar.addAction(self.closeAct) self.graphicsToolBar = QToolBar(self.trUtf8("Graphics"), self) self.graphicsToolBar.setIconSize(UI.Config.ToolBarIconSize) self.graphicsToolBar.addAction(self.printPreviewAct) self.graphicsToolBar.addAction(self.printAct) self.graphicsToolBar.addSeparator() self.graphicsToolBar.addAction(self.zoomInAct) self.graphicsToolBar.addAction(self.zoomOutAct) self.graphicsToolBar.addAction(self.zoomAct) self.graphicsToolBar.addAction(self.zoomResetAct) self.addToolBar(Qt.TopToolBarArea, self.windowToolBar) self.addToolBar(Qt.TopToolBarArea, self.graphicsToolBar) def getDiagramName(self): """ Method to retrieve a name for the diagram. @return name for the diagram """ return self.svgFile ############################################################################ ## Private menu handling methods below. ############################################################################ def __adjustScrollBar(self, scrollBar, factor): """ Private method to adjust a scrollbar by a certain factor. @param scrollBar reference to the scrollbar object (QScrollBar) @param factor factor to adjust by (float) """ scrollBar.setValue(int(factor * scrollBar.value() + ((factor - 1) * scrollBar.pageStep()/2))) def __doZoom(self, factor): """ Private method to perform the zooming. @param factor zoom factor (float) """ self.zoom *= factor self.svgWidget.resize(self.zoom * self.svgWidget.sizeHint()) self.__adjustScrollBar(self.svgView.horizontalScrollBar(), factor) self.__adjustScrollBar(self.svgView.verticalScrollBar(), factor) def __zoomIn(self): """ Private method to handle the zoom in context menu entry. """ self.__doZoom(1.25) def __zoomOut(self): """ Private method to handle the zoom out context menu entry. """ self.__doZoom(0.8) def __zoomReset(self): """ Private method to handle the reset zoom context menu entry. """ self.zoom = 1.0 self.svgWidget.adjustSize() def __zoom(self): """ Private method to handle the zoom context menu action. """ dlg = ZoomDialog(self.zoom, self) if dlg.exec_() == QDialog.Accepted: zoom = dlg.getZoomSize() factor = zoom / self.zoom self.__doZoom(factor) def __printDiagram(self): """ Private slot called to print the diagram. """ printer = KdeQt.KQPrinter.KQPrinter(mode = QPrinter.ScreenResolution) printer.setFullPage(True) if Preferences.getPrinter("ColorMode"): printer.setColorMode(KdeQt.KQPrinter.Color) else: printer.setColorMode(KdeQt.KQPrinter.GrayScale) if Preferences.getPrinter("FirstPageFirst"): printer.setPageOrder(KdeQt.KQPrinter.FirstPageFirst) else: printer.setPageOrder(KdeQt.KQPrinter.LastPageFirst) printer.setPrinterName(Preferences.getPrinter("PrinterName")) printDialog = KQPrintDialog(printer, self) if printDialog.exec_(): self.__print(printer) def __printPreviewDiagram(self): """ Private slot called to show a print preview of the diagram. """ from PyQt4.QtGui import QPrintPreviewDialog printer = KdeQt.KQPrinter.KQPrinter(mode = QPrinter.ScreenResolution) printer.setFullPage(True) if Preferences.getPrinter("ColorMode"): printer.setColorMode(KdeQt.KQPrinter.Color) else: printer.setColorMode(KdeQt.KQPrinter.GrayScale) if Preferences.getPrinter("FirstPageFirst"): printer.setPageOrder(KdeQt.KQPrinter.FirstPageFirst) else: printer.setPageOrder(KdeQt.KQPrinter.LastPageFirst) printer.setPageMargins( Preferences.getPrinter("LeftMargin") * 10, Preferences.getPrinter("TopMargin") * 10, Preferences.getPrinter("RightMargin") * 10, Preferences.getPrinter("BottomMargin") * 10, QPrinter.Millimeter ) printer.setPrinterName(Preferences.getPrinter("PrinterName")) preview = QPrintPreviewDialog(printer, self) self.connect(preview, SIGNAL("paintRequested(QPrinter*)"), self.__print) preview.exec_() def __print(self, printer): """ Private slot to the actual printing. @param printer reference to the printer object (QPrinter) """ painter = QPainter() painter.begin(printer) # calculate margin and width of printout font = QFont("times", 10) painter.setFont(font) fm = painter.fontMetrics() fontHeight = fm.lineSpacing() marginX = printer.pageRect().x() - printer.paperRect().x() marginX = \ Preferences.getPrinter("LeftMargin") * int(printer.resolution() / 2.54) \ - marginX marginY = printer.pageRect().y() - printer.paperRect().y() marginY = \ Preferences.getPrinter("TopMargin") * int(printer.resolution() / 2.54) \ - marginY width = printer.width() - marginX \ - Preferences.getPrinter("RightMargin") * int(printer.resolution() / 2.54) height = printer.height() - fontHeight - 4 - marginY \ - Preferences.getPrinter("BottomMargin") * int(printer.resolution() / 2.54) # write a foot note s = QString(self.trUtf8("Diagram: %1").arg(self.getDiagramName())) tc = QColor(50, 50, 50) painter.setPen(tc) painter.drawRect(marginX, marginY, width, height) painter.drawLine(marginX, marginY + height + 2, marginX + width, marginY + height + 2) painter.setFont(font) painter.drawText(marginX, marginY + height + 4, width, fontHeight, Qt.AlignRight, s) # render the diagram painter.setViewport(marginX, marginY, width, height) self.svgWidget.renderer().render(painter) painter.end() eric4-4.5.18/eric/Graphics/PaxHeaders.8617/PixmapDiagram.py0000644000175000001440000000013212261012651021342 xustar000000000000000030 mtime=1388582313.224092604 30 atime=1389081083.873724383 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Graphics/PixmapDiagram.py0000644000175000001440000003044712261012651021104 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2004 - 2014 Detlev Offenbach # """ Module implementing a dialog showing a pixmap. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQMessageBox from KdeQt.KQMainWindow import KQMainWindow import KdeQt.KQPrinter from KdeQt.KQPrintDialog import KQPrintDialog from ZoomDialog import ZoomDialog import UI.Config import Preferences class PixmapDiagram(KQMainWindow): """ Class implementing a dialog showing a pixmap. """ def __init__(self, pixmap, parent = None, name = None): """ Constructor @param pixmap filename of a graphics file to show (QString or string) @param parent parent widget of the view (QWidget) @param name name of the view widget (QString or string) """ KQMainWindow.__init__(self, parent) if name: self.setObjectName(name) else: self.setObjectName("PixmapDiagram") self.setWindowTitle(self.trUtf8("Pixmap-Viewer")) self.pixmapLabel = QLabel() self.pixmapLabel.setObjectName("pixmapLabel") self.pixmapLabel.setBackgroundRole(QPalette.Base) self.pixmapLabel.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Ignored) self.pixmapLabel.setScaledContents(True) self.pixmapView = QScrollArea() self.pixmapView.setObjectName("pixmapView") self.pixmapView.setBackgroundRole(QPalette.Dark) self.pixmapView.setWidget(self.pixmapLabel) self.setCentralWidget(self.pixmapView) # polish up the dialog self.resize(QSize(800, 600).expandedTo(self.minimumSizeHint())) self.zoom = 1.0 self.pixmapfile = pixmap self.status = self.__showPixmap(self.pixmapfile) self.__initActions() self.__initContextMenu() self.__initToolBars() def __initActions(self): """ Private method to initialize the view actions. """ self.closeAct = \ QAction(UI.PixmapCache.getIcon("close.png"), self.trUtf8("Close"), self) self.connect(self.closeAct, SIGNAL("triggered()"), self.close) self.printAct = \ QAction(UI.PixmapCache.getIcon("print.png"), self.trUtf8("Print"), self) self.connect(self.printAct, SIGNAL("triggered()"), self.__printDiagram) self.printPreviewAct = \ QAction(UI.PixmapCache.getIcon("printPreview.png"), self.trUtf8("Print Preview"), self) self.connect(self.printPreviewAct, SIGNAL("triggered()"), self.__printPreviewDiagram) self.zoomInAct = \ QAction(UI.PixmapCache.getIcon("zoomIn.png"), self.trUtf8("Zoom in"), self) self.connect(self.zoomInAct, SIGNAL("triggered()"), self.__zoomIn) self.zoomOutAct = \ QAction(UI.PixmapCache.getIcon("zoomOut.png"), self.trUtf8("Zoom out"), self) self.connect(self.zoomOutAct, SIGNAL("triggered()"), self.__zoomOut) self.zoomAct = \ QAction(UI.PixmapCache.getIcon("zoomTo.png"), self.trUtf8("Zoom..."), self) self.connect(self.zoomAct, SIGNAL("triggered()"), self.__zoom) self.zoomResetAct = \ QAction(UI.PixmapCache.getIcon("zoomReset.png"), self.trUtf8("Zoom reset"), self) self.connect(self.zoomResetAct, SIGNAL("triggered()"), self.__zoomReset) def __initContextMenu(self): """ Private method to initialize the context menu. """ self.__menu = QMenu(self) self.__menu.addAction(self.closeAct) self.__menu.addSeparator() self.__menu.addAction(self.printPreviewAct) self.__menu.addAction(self.printAct) self.__menu.addSeparator() self.__menu.addAction(self.zoomInAct) self.__menu.addAction(self.zoomOutAct) self.__menu.addAction(self.zoomAct) self.__menu.addAction(self.zoomResetAct) self.setContextMenuPolicy(Qt.CustomContextMenu) self.connect(self, SIGNAL('customContextMenuRequested(const QPoint &)'), self.__showContextMenu) def __showContextMenu(self, coord): """ Private slot to show the context menu of the listview. @param coord the position of the mouse pointer (QPoint) """ self.__menu.popup(self.mapToGlobal(coord)) def __initToolBars(self): """ Private method to populate the toolbars with our actions. """ self.windowToolBar = QToolBar(self.trUtf8("Window"), self) self.windowToolBar.setIconSize(UI.Config.ToolBarIconSize) self.windowToolBar.addAction(self.closeAct) self.graphicsToolBar = QToolBar(self.trUtf8("Graphics"), self) self.graphicsToolBar.setIconSize(UI.Config.ToolBarIconSize) self.graphicsToolBar.addAction(self.printPreviewAct) self.graphicsToolBar.addAction(self.printAct) self.graphicsToolBar.addSeparator() self.graphicsToolBar.addAction(self.zoomInAct) self.graphicsToolBar.addAction(self.zoomOutAct) self.graphicsToolBar.addAction(self.zoomAct) self.graphicsToolBar.addAction(self.zoomResetAct) self.addToolBar(Qt.TopToolBarArea, self.windowToolBar) self.addToolBar(Qt.TopToolBarArea, self.graphicsToolBar) def __showPixmap(self, filename): """ Private method to show a file. @param filename name of the file to be shown (string or QString) @return flag indicating success """ image = QImage(filename) if image.isNull(): KQMessageBox.warning(self, self.trUtf8("Pixmap-Viewer"), self.trUtf8("""

    The file %1 cannot be displayed.""" """ The format is not supported.

    """).arg(filename)) return False self.pixmapLabel.setPixmap(QPixmap.fromImage(image)) self.pixmapLabel.adjustSize() return True def getDiagramName(self): """ Method to retrieve a name for the diagram. @return name for the diagram """ return self.pixmapfile def getStatus(self): """ Method to retrieve the status of the canvas. @return flag indicating a successful pixmap loading (boolean) """ return self.status ############################################################################ ## Private menu handling methods below. ############################################################################ def __adjustScrollBar(self, scrollBar, factor): """ Private method to adjust a scrollbar by a certain factor. @param scrollBar reference to the scrollbar object (QScrollBar) @param factor factor to adjust by (float) """ scrollBar.setValue(int(factor * scrollBar.value() + ((factor - 1) * scrollBar.pageStep()/2))) def __doZoom(self, factor): """ Private method to perform the zooming. @param factor zoom factor (float) """ self.zoom *= factor self.pixmapLabel.resize(self.zoom * self.pixmapLabel.pixmap().size()) self.__adjustScrollBar(self.pixmapView.horizontalScrollBar(), factor) self.__adjustScrollBar(self.pixmapView.verticalScrollBar(), factor) def __zoomIn(self): """ Private method to handle the zoom in context menu entry. """ self.__doZoom(1.25) def __zoomOut(self): """ Private method to handle the zoom out context menu entry. """ self.__doZoom(0.8) def __zoomReset(self): """ Private method to handle the reset zoom context menu entry. """ self.zoom = 1.0 self.pixmapLabel.adjustSize() def __zoom(self): """ Private method to handle the zoom context menu action. """ dlg = ZoomDialog(self.zoom, self) if dlg.exec_() == QDialog.Accepted: zoom = dlg.getZoomSize() factor = zoom / self.zoom self.__doZoom(factor) def __printDiagram(self): """ Private slot called to print the diagram. """ printer = KdeQt.KQPrinter.KQPrinter(mode = QPrinter.ScreenResolution) printer.setFullPage(True) if Preferences.getPrinter("ColorMode"): printer.setColorMode(KdeQt.KQPrinter.Color) else: printer.setColorMode(KdeQt.KQPrinter.GrayScale) if Preferences.getPrinter("FirstPageFirst"): printer.setPageOrder(KdeQt.KQPrinter.FirstPageFirst) else: printer.setPageOrder(KdeQt.KQPrinter.LastPageFirst) printer.setPrinterName(Preferences.getPrinter("PrinterName")) printDialog = KQPrintDialog(printer, self) if printDialog.exec_(): self.__print(printer) def __printPreviewDiagram(self): """ Private slot called to show a print preview of the diagram. """ from PyQt4.QtGui import QPrintPreviewDialog printer = KdeQt.KQPrinter.KQPrinter(mode = QPrinter.ScreenResolution) printer.setFullPage(True) if Preferences.getPrinter("ColorMode"): printer.setColorMode(KdeQt.KQPrinter.Color) else: printer.setColorMode(KdeQt.KQPrinter.GrayScale) if Preferences.getPrinter("FirstPageFirst"): printer.setPageOrder(KdeQt.KQPrinter.FirstPageFirst) else: printer.setPageOrder(KdeQt.KQPrinter.LastPageFirst) printer.setPageMargins( Preferences.getPrinter("LeftMargin") * 10, Preferences.getPrinter("TopMargin") * 10, Preferences.getPrinter("RightMargin") * 10, Preferences.getPrinter("BottomMargin") * 10, QPrinter.Millimeter ) printer.setPrinterName(Preferences.getPrinter("PrinterName")) preview = QPrintPreviewDialog(printer, self) self.connect(preview, SIGNAL("paintRequested(QPrinter*)"), self.__print) preview.exec_() def __print(self, printer): """ Private slot to the actual printing. @param printer reference to the printer object (QPrinter) """ painter = QPainter() painter.begin(printer) # calculate margin and width of printout font = QFont("times", 10) painter.setFont(font) fm = painter.fontMetrics() fontHeight = fm.lineSpacing() marginX = printer.pageRect().x() - printer.paperRect().x() marginX = \ Preferences.getPrinter("LeftMargin") * int(printer.resolution() / 2.54) \ - marginX marginY = printer.pageRect().y() - printer.paperRect().y() marginY = \ Preferences.getPrinter("TopMargin") * int(printer.resolution() / 2.54) \ - marginY width = printer.width() - marginX \ - Preferences.getPrinter("RightMargin") * int(printer.resolution() / 2.54) height = printer.height() - fontHeight - 4 - marginY \ - Preferences.getPrinter("BottomMargin") * int(printer.resolution() / 2.54) # write a foot note s = QString(self.trUtf8("Diagram: %1").arg(self.getDiagramName())) tc = QColor(50, 50, 50) painter.setPen(tc) painter.drawRect(marginX, marginY, width, height) painter.drawLine(marginX, marginY + height + 2, marginX + width, marginY + height + 2) painter.setFont(font) painter.drawText(marginX, marginY + height + 4, width, fontHeight, Qt.AlignRight, s) # render the diagram size = self.pixmapLabel.pixmap().size() size.scale(QSize(width - 10, height - 10), # 5 px inner margin Qt.KeepAspectRatio) painter.setViewport(marginX + 5, marginY + 5, size.width(), size.height()) painter.setWindow(self.pixmapLabel.pixmap().rect()) painter.drawPixmap(0, 0, self.pixmapLabel.pixmap()) painter.end() eric4-4.5.18/eric/PaxHeaders.8617/E4Graphics0000644000175000001440000000013112261012660016360 xustar000000000000000030 mtime=1388582320.883188967 29 atime=1389081086.01472434 30 ctime=1389081086.315724332 eric4-4.5.18/eric/E4Graphics/0000755000175000001440000000000012261012660016170 5ustar00detlevusers00000000000000eric4-4.5.18/eric/E4Graphics/PaxHeaders.8617/__init__.py0000644000175000001440000000013212261012651020547 xustar000000000000000030 mtime=1388582313.227092642 30 atime=1389081083.874724383 30 ctime=1389081086.309724333 eric4-4.5.18/eric/E4Graphics/__init__.py0000644000175000001440000000026412261012651020303 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Package implementing some QGraphicsView related general purpoe classes. """ eric4-4.5.18/eric/E4Graphics/PaxHeaders.8617/E4ArrowItem.py0000644000175000001440000000013212261012651021112 xustar000000000000000030 mtime=1388582313.229092668 30 atime=1389081083.874724383 30 ctime=1389081086.309724333 eric4-4.5.18/eric/E4Graphics/E4ArrowItem.py0000644000175000001440000001065612261012651020654 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing a graphics item subclass for an arrow. """ from math import * from PyQt4.QtCore import * from PyQt4.QtGui import * NormalArrow = 1 WideArrow = 2 ArrowheadAngleFactor = 0.26179938779914941 # 0.5 * atan(sqrt(3.0) / 3.0) class E4ArrowItem(QAbstractGraphicsShapeItem): """ Class implementing an arrow graphics item subclass. """ def __init__(self, origin = QPointF(), end = QPointF(), filled = False, type = NormalArrow, parent = None): """ Constructor @param origin origin of the arrow (QPointF) @param end end point of the arrow (QPointF) @param filled flag indicating a filled arrow head (boolean) @param type arrow type (NormalArrow, WideArrow) @keyparam parent reference to the parent object (QGraphicsItem) """ QAbstractGraphicsShapeItem.__init__(self, parent) self._origin = origin self._end = end self._filled = filled self._type = type self._halfLength = 13.0 self.setFlag(QGraphicsItem.ItemIsMovable, True) self.setFlag(QGraphicsItem.ItemIsSelectable, True) def setPoints(self, xa, ya, xb, yb): """ Public method to set the start and end points of the line. Note: This method does not redraw the item. @param xa x-coordinate of the start point (float) @param ya y-coordinate of the start point (float) @param xb x-coordinate of the end point (float) @param yb y-coordinate of the end point (float) """ self._origin = QPointF(xa, ya) self._end = QPointF(xb, yb) def setStartPoint(self, x, y): """ Public method to set the start point. Note: This method does not redraw the item. @param x x-coordinate of the start point (float) @param y y-coordinate of the start point (float) """ self._origin = QPointF(x, y) def setEndPoint(self, x, y): """ Public method to set the end point. Note: This method does not redraw the item. @param x x-coordinate of the end point (float) @param y y-coordinate of the end point (float) """ self._end = QPointF(x, y) def boundingRect(self): """ Public method to return the bounding rectangle. @return bounding rectangle (QRectF) """ extra = self._halfLength / 2.0 return QRectF(self._origin, QSizeF(self._end.x() - self._origin.x(), self._end.y() - self._origin.y()))\ .normalized()\ .adjusted(-extra, -extra, extra, extra) def paint(self, painter, option, widget = None): """ Public method to paint the item in local coordinates. @param painter reference to the painter object (QPainter) @param option style options (QStyleOptionGraphicsItem) @param widget optional reference to the widget painted on (QWidget) """ if (option.state & QStyle.State_Selected) == QStyle.State(QStyle.State_Selected): width = 2 else: width = 1 # draw the line first line = QLineF(self._origin, self._end) painter.setPen(QPen(Qt.black, width, Qt.SolidLine, Qt.FlatCap, Qt.MiterJoin)) painter.drawLine(line) # draw the arrow head arrowAngle = self._type * ArrowheadAngleFactor slope = atan2(line.dy(), line.dx()) # Calculate left arrow point arrowSlope = slope + arrowAngle a1 = QPointF(self._end.x() - self._halfLength * cos(arrowSlope), self._end.y() - self._halfLength * sin(arrowSlope)) # Calculate right arrow point arrowSlope = slope - arrowAngle a2 = QPointF(self._end.x() - self._halfLength * cos(arrowSlope), self._end.y() - self._halfLength * sin(arrowSlope)) if self._filled: painter.setBrush(Qt.black) else: painter.setBrush(Qt.white) polygon = QPolygonF() polygon.append(line.p2()) polygon.append(a1) polygon.append(a2) painter.drawPolygon(polygon) eric4-4.5.18/eric/E4Graphics/PaxHeaders.8617/E4GraphicsView.py0000644000175000001440000000013112261012651021573 xustar000000000000000029 mtime=1388582313.24109282 30 atime=1389081083.874724383 30 ctime=1389081086.309724333 eric4-4.5.18/eric/E4Graphics/E4GraphicsView.py0000644000175000001440000002704412261012651021335 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing a canvas view class. """ import sys from PyQt4.QtCore import * from PyQt4.QtGui import * import Preferences class E4GraphicsView(QGraphicsView): """ Class implementing a graphics view. """ def __init__(self, scene, parent = None): """ Constructor @param scene reference to the scene object (QGraphicsScene) @param parent parent widget (QWidget) """ QGraphicsView.__init__(self, scene, parent) self.setObjectName("E4GraphicsView") self.setBackgroundBrush(QBrush(Qt.white)) self.setRenderHint(QPainter.Antialiasing, True) self.setDragMode(QGraphicsView.RubberBandDrag) self.setAlignment(Qt.Alignment(Qt.AlignLeft | Qt.AlignTop)) self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOn) self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn) self.setViewportUpdateMode(QGraphicsView.SmartViewportUpdate) self.setWhatsThis(self.trUtf8("Graphics View\n" "

    This graphics view is used to show a diagram. \n" "There are various actions available to manipulate the \n" "shown items.

    \n" "
      \n" "
    • Clicking on an item selects it.
    • \n" "
    • Ctrl-clicking adds an item to the selection.
    • \n" "
    • Ctrl-clicking a selected item deselects it.
    • \n" "
    • Clicking on an empty spot of the canvas resets the selection.
    • \n" "
    • Dragging the mouse over the canvas spans a rubberband to \n" "select multiple items.
    • \n" "
    • Dragging the mouse over a selected item moves the \n" "whole selection.
    • \n" "
    \n" )) def zoomIn(self): """ Public method to zoom in. """ self.scale(1.25, 1.25) def zoomOut(self): """ Public method to zoom out. """ self.scale(0.8, 0.8) def zoomReset(self): """ Public method to handle the reset zoom context menu entry. """ self.resetMatrix() def setZoom(self, zoomFactor): """ Public method to set the zoom factor. @param zoomFactor new zoom factor (float) """ self.zoomReset() self.scale(zoomFactor, zoomFactor) def zoom(self): """ Public method to get the current zoom factor. @return current zoom factor (float) """ return self.matrix().m11() def resizeScene(self, amount, isWidth = True): """ Public method to resize the scene. @param isWidth flag indicating width is to be resized (boolean) @param amount size increment (integer) """ sceneRect = self.scene().sceneRect() width = sceneRect.width() height = sceneRect.height() if isWidth: width += amount else: height += amount rect = self._getDiagramRect(10) if width < rect.width(): width = rect.width() if height < rect.height(): height = rect.height() self.setSceneSize(width, height) def setSceneSize(self, width, height): """ Public method to set the scene size. @param width width for the scene (float) @param height height for the scene (float) """ rect = self.scene().sceneRect() rect.setHeight(height) rect.setWidth(width) self.scene().setSceneRect(rect) def _getDiagramRect(self, border = 0): """ Protected method to calculate the minimum rectangle fitting the diagram. @param border border width to include in the calculation (integer) @return the minimum rectangle (QRectF) """ startx = sys.maxint starty = sys.maxint endx = 0 endy = 0 items = self.filteredItems(self.scene().items()) for itm in items: rect = itm.sceneBoundingRect() itmEndX = rect.x() + rect.width() itmEndY = rect.y()+ rect.height() itmStartX = rect.x() itmStartY = rect.y() if startx >= itmStartX: startx = itmStartX if starty >= itmStartY: starty = itmStartY if endx <= itmEndX: endx = itmEndX if endy <= itmEndY: endy = itmEndY if border: startx -= border starty -= border endx += border endy += border return QRectF(startx, starty, endx - startx + 1, endy - starty + 1) def _getDiagramSize(self, border = 0): """ Protected method to calculate the minimum size fitting the diagram. @param border border width to include in the calculation (integer) @return the minimum size (QSizeF) """ endx = 0 endy = 0 items = self.filteredItems(self.scene().items()) for itm in items: rect = itm.sceneBoundingRect() itmEndX = rect.x() + rect.width() itmEndY = rect.y()+ rect.height() if endx <= itmEndX: endx = itmEndX if endy <= itmEndY: endy = itmEndY if border: endx += border endy += border return QSizeF(endx + 1, endy + 1) def __getDiagram(self, rect, format = "PNG", filename = None): """ Private method to retrieve the diagram from the scene fitting it in the minimum rectangle. @param rect minimum rectangle fitting the diagram (QRectF) @param format format for the image file (string or QString) @param filename name of the file for non pixmaps (string or QString) @return diagram pixmap to receive the diagram (QPixmap) """ selectedItems = self.scene().selectedItems() # step 1: deselect all widgets if selectedItems: for item in selectedItems: item.setSelected(False) # step 2: grab the diagram if format == "PNG": paintDevice = QPixmap(int(rect.width()), int(rect.height())) paintDevice.fill(self.backgroundBrush().color()) else: from PyQt4.QtSvg import QSvgGenerator paintDevice = QSvgGenerator() paintDevice.setResolution(100) # 100 dpi paintDevice.setSize(QSize(int(rect.width()), int(rect.height()))) paintDevice.setViewBox(rect) paintDevice.setFileName(filename) painter = QPainter(paintDevice) painter.setRenderHint(QPainter.Antialiasing, True) self.scene().render(painter, QRectF(), rect) # step 3: reselect the widgets if selectedItems: for item in selectedItems: item.setSelected(True) return paintDevice def saveImage(self, filename, format = "PNG"): """ Public method to save the scene to a file. @param filename name of the file to write the image to (string or QString) @param format format for the image file (string or QString) @return flag indicating success (boolean) """ rect = self._getDiagramRect(self.border) if format == "SVG": svg = self.__getDiagram(rect, format = format, filename = filename) return True else: pixmap = self.__getDiagram(rect) return pixmap.save(filename, format) def printDiagram(self, printer, diagramName = ""): """ Public method to print the diagram. @param printer reference to a ready configured printer object (QPrinter) @param diagramName name of the diagram (string or QString) """ painter = QPainter() painter.begin(printer) offsetX = 0 offsetY = 0 widthX = 0 heightY = 0 font = QFont("times", 10) painter.setFont(font) fm = painter.fontMetrics() fontHeight = fm.lineSpacing() marginX = printer.pageRect().x() - printer.paperRect().x() marginX = \ Preferences.getPrinter("LeftMargin") * int(printer.resolution() / 2.54) \ - marginX marginY = printer.pageRect().y() - printer.paperRect().y() marginY = \ Preferences.getPrinter("TopMargin") * int(printer.resolution() / 2.54) \ - marginY width = printer.width() - marginX \ - Preferences.getPrinter("RightMargin") * int(printer.resolution() / 2.54) height = printer.height() - fontHeight - 4 - marginY \ - Preferences.getPrinter("BottomMargin") * int(printer.resolution() / 2.54) border = self.border == 0 and 5 or self.border rect = self._getDiagramRect(border) diagram = self.__getDiagram(rect) finishX = False finishY = False page = 0 pageX = 0 pageY = 1 while not finishX or not finishY: if not finishX: offsetX = pageX * width pageX += 1 elif not finishY: offsetY = pageY * height offsetX = 0 pageY += 1 finishX = False pageX = 1 if (width + offsetX) > diagram.width(): finishX = True widthX = diagram.width() - offsetX else: widthX = width if diagram.width() < width: widthX = diagram.width() finishX = True offsetX = 0 if (height + offsetY) > diagram.height(): finishY = True heightY = diagram.height() - offsetY else: heightY = height if diagram.height() < height: finishY = True heightY = diagram.height() offsetY = 0 painter.drawPixmap(marginX, marginY, diagram, offsetX, offsetY, widthX, heightY) # write a foot note s = QString(self.trUtf8("Diagram: %1, Page %2") .arg(diagramName).arg(page + 1)) tc = QColor(50, 50, 50) painter.setPen(tc) painter.drawRect(marginX, marginY, width, height) painter.drawLine(marginX, marginY + height + 2, marginX + width, marginY + height + 2) painter.setFont(font) painter.drawText(marginX, marginY + height + 4, width, fontHeight, Qt.AlignRight, s) if not finishX or not finishY: printer.newPage() page += 1 painter.end() ############################################################################ ## The methods below should be overridden by subclasses to get special ## behavior. ############################################################################ def filteredItems(self, items): """ Public method to filter a list of items. @param items list of items as returned by the scene object (QGraphicsItem) @return list of interesting collision items (QGraphicsItem) """ # just return the list unchanged return items eric4-4.5.18/eric/PaxHeaders.8617/eric4config.linux0000644000175000001440000000007411317675524020006 xustar000000000000000030 atime=1389081083.880724383 30 ctime=1389081086.309724333 eric4-4.5.18/eric/eric4config.linux0000644000175000001440000000145711317675524017542 0ustar00detlevusers00000000000000cfg = { 'ericDir' : "/usr/lib64/python/site-packages/eric4", 'ericPixDir' : "/usr/share/eric4/pixmaps", 'ericIconDir' : "/usr/share/eric4/icons", 'ericDTDDir' : "/usr/share/eric4/DTDs", 'ericCSSDir' : "/usr/share/eric4/CSSs", 'ericStylesDir' : "/usr/share/eric4/Styles", 'ericDocDir' : "/usr/share/doc/eric4", 'ericExamplesDir' : "/usr/share/doc/eric4/Examples", 'ericTranslationsDir' : "/usr/share/qt2/translations", 'ericTemplatesDir' : "/usr/share/eric4/DesignerTemplates", 'ericCodeTemplatesDir' : "/usr/share/eric4/CodeTemplates", 'ericOthersDir' : "/usr/share/eric4", 'bindir' : "/usr/bin", 'mdir' : "/usr/lib64/python/site-packages", } eric4-4.5.18/eric/PaxHeaders.8617/eric4.py0000644000175000001440000000013112261012651016064 xustar000000000000000030 mtime=1388582313.243092845 29 atime=1389081083.97372438 30 ctime=1389081086.309724333 eric4-4.5.18/eric/eric4.py0000644000175000001440000002375512261012651015633 0ustar00detlevusers00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- # Copyright (c) 2002 - 2014 Detlev Offenbach # """ Eric4 Python IDE This is the main Python script that performs the necessary initialization of the IDE and starts the Qt event loop. """ import sys import os import traceback import cStringIO import time import logging from PyQt4.QtCore import QTextCodec, SIGNAL, SLOT, qWarning, \ QLibraryInfo, QTimer from PyQt4.QtGui import QApplication, QErrorMessage # some global variables needed to start the application args = None mainWindow = None splash = None # generate list of arguments to be remembered for a restart restartArgsList = ["--nokde", "--nosplash", "--plugin", "--debug", "--config"] restartArgs = [arg for arg in sys.argv[1:] if arg.split("=", 1)[0] in restartArgsList] # disable the usage of KDE widgets, if requested sys.e4nokde = False if "--nokde" in sys.argv: del sys.argv[sys.argv.index("--nokde")] sys.e4nokde = True else: sys.e4nokde = os.getenv("e4nokde") is not None and os.getenv("e4nokde") == "1" if "--debug" in sys.argv: del sys.argv[sys.argv.index("--debug")] logging.basicConfig(level = logging.DEBUG) for arg in sys.argv: if arg.startswith("--config="): import Utilities configDir = arg.replace("--config=", "") Utilities.setConfigDir(configDir) sys.argv.remove(arg) break # make ThirdParty package available as a packages repository sys.path.insert(2, os.path.join(os.path.dirname(__file__), "ThirdParty", "Pygments")) from KdeQt.KQApplication import KQApplication from UI.Info import Program, Version, BugAddress from UI.SplashScreen import SplashScreen, NoneSplashScreen from E4Gui.E4SingleApplication import E4SingleApplicationClient import Utilities from Utilities import Startup logging.debug("Importing Preferences") import Preferences if not Preferences.getUI("UseKDEDialogs"): sys.e4nokde = True def handleSingleApplication(ddindex): """ Global function to handle the single application mode. @param ddindex index of a '--' option in the options list """ client = E4SingleApplicationClient() res = client.connect() if res > 0: if "--nosplash" in sys.argv and sys.argv.index("--nosplash") < ddindex: del sys.argv[sys.argv.index("--nosplash")] if "--nokde" in sys.argv and sys.argv.index("--nokde") < ddindex: del sys.argv[sys.argv.index("--nokde")] if "--noopen" in sys.argv and sys.argv.index("--noopen") < ddindex: del sys.argv[sys.argv.index("--noopen")] if "--debug" in sys.argv and sys.argv.index("--debug") < ddindex: del sys.argv[sys.argv.index("--debug")] for arg in sys.argv: if arg.startswith("--config="): sys.argv.remove(arg) break if len(sys.argv) > 1: client.processArgs(sys.argv[1:]) sys.exit(0) elif res < 0: print "eric4: %s" % client.errstr() sys.exit(res) def excepthook(excType, excValue, tracebackobj): """ Global function to catch unhandled exceptions. @param excType exception type @param excValue exception value @param tracebackobj traceback object """ separator = '-' * 80 logFile = os.path.join(unicode(Utilities.getConfigDir()), "eric4_error.log") notice = \ """An unhandled exception occurred. Please report the problem\n"""\ """using the error reporting dialog or via email to <%s>.\n"""\ """A log has been written to "%s".\n\nError information:\n""" % \ (BugAddress, logFile) timeString = time.strftime("%Y-%m-%d, %H:%M:%S") versionInfo = "\n%s\n%s" % (separator, Utilities.generateVersionInfo()) pluginVersionInfo = Utilities.generatePluginsVersionInfo() if pluginVersionInfo: versionInfo += "%s\n%s" % (separator, pluginVersionInfo) distroInfo = Utilities.generateDistroInfo() if distroInfo: versionInfo += "%s\n%s" % (separator, distroInfo) tbinfofile = cStringIO.StringIO() traceback.print_tb(tracebackobj, None, tbinfofile) tbinfofile.seek(0) tbinfo = tbinfofile.read() errmsg = '%s: \n%s' % (str(excType), str(excValue)) sections = [separator, timeString, separator, errmsg, separator, tbinfo] msg = '\n'.join(sections) try: f = open(logFile, "w") f.write(msg) f.write(versionInfo) f.close() except IOError: pass qWarning(str(notice) + str(msg) + str(versionInfo)) def uiStartUp(): """ Global function to finalize the start up of the main UI. Note: It is activated by a zero timeout single-shot timer. """ global args, mainWindow, splash if splash: splash.finish(mainWindow) del splash mainWindow.checkForErrorLog() mainWindow.processArgs(args) mainWindow.performVersionCheck(False) mainWindow.checkProjectsWorkspace() mainWindow.checkConfigurationStatus() def main(): """ Main entry point into the application. """ global args, mainWindow, splash, restartArgs sys.excepthook = excepthook options = [\ ("--config=configDir", "use the given directory as the one containing the config files"), ("--debug", "activate debugging output to the console"), ("--nosplash", "don't show the splash screen"), ("--noopen", "don't open anything at startup except that given in command"), ("--nokde" , "don't use KDE widgets"), ("--plugin=plugin-file", "load the given plugin file (plugin development)"), ("--start-session", "load the global session file"), ("--", "indicate that there are options for the program to be debugged"), ("", "(everything after that is considered arguments for this program)") ] kqOptions = [\ ("config \\", "use the given directory as the one containing the config files"), ("debug", "activate debugging output to the console"), ("nosplash", "don't show the splash screen"), ("noopen", "don't open anything at startup except that given in command"), ("nokde" , "don't use KDE widgets"), ("plugin \\", "load the given plugin file (plugin development)"), ("start-session", "load the global session file"), ("!+file", "") ] appinfo = Startup.makeAppInfo(sys.argv, "Eric4", "[project | files... [--] [debug-options]]", "A Python IDE", options) ddindex = Startup.handleArgs(sys.argv, appinfo) if not Utilities.checkBlacklistedVersions(): sys.exit(100) app = KQApplication(sys.argv, kqOptions) if Preferences.getUI("SingleApplicationMode"): handleSingleApplication(ddindex) # set the library paths for plugins Startup.setLibraryPaths() # set the search path for icons Startup.initializeResourceSearchPath() # generate and show a splash window, if not suppressed if "--nosplash" in sys.argv and sys.argv.index("--nosplash") < ddindex: del sys.argv[sys.argv.index("--nosplash")] splash = NoneSplashScreen() elif not Preferences.getUI("ShowSplash"): splash = NoneSplashScreen() else: splash = SplashScreen() # modify the executable search path for the PyQt4 installer if Utilities.isWindowsPlatform(): pyqtDataDir = Utilities.getPyQt4ModulesDirectory() if os.path.exists(os.path.join(pyqtDataDir, "bin")): path = os.path.join(pyqtDataDir, "bin") + os.pathsep + os.environ["PATH"] else: path = pyqtDataDir + os.pathsep + os.environ["PATH"] os.environ["PATH"] = path pluginFile = None noopen = False if "--noopen" in sys.argv and sys.argv.index("--noopen") < ddindex: del sys.argv[sys.argv.index("--noopen")] noopen = True for arg in sys.argv: if arg.startswith("--plugin=") and sys.argv.index(arg) < ddindex: # extract the plugin development option pluginFile = arg.replace("--plugin=", "").replace('"', "") sys.argv.remove(arg) pluginFile = os.path.expanduser(pluginFile) pluginFile = Utilities.normabspath(pluginFile) break # is there a set of filenames or options on the command line, # if so, pass them to the UI if len(sys.argv) > 1: args = sys.argv[1:] # Set the applications string encoding try: sys.setappdefaultencoding(str(Preferences.getSystem("StringEncoding"))) except AttributeError: pass # get the Qt4 translations directory qt4TransDir = Preferences.getQt4TranslationsDir() if not qt4TransDir: qt4TransDir = QLibraryInfo.location(QLibraryInfo.TranslationsPath) # Load translation files and install them loc = Startup.loadTranslators(qt4TransDir, app, ("qscintilla",)) QTextCodec.setCodecForCStrings(QTextCodec.codecForName(\ str(Preferences.getSystem("StringEncoding")))) splash.showMessage(QApplication.translate("eric4", "Importing packages...")) # We can only import these after creating the KQApplication because they # make Qt calls that need the KQApplication to exist. from UI.UserInterface import UserInterface splash.showMessage(QApplication.translate("eric4", "Generating Main Window...")) try: mainWindow = UserInterface(app, loc, splash, pluginFile, noopen, restartArgs) app.connect(app, SIGNAL("lastWindowClosed()"), app, SLOT("quit()")) mainWindow.show() QTimer.singleShot(0, uiStartUp) # generate a graphical error handler eMsg = QErrorMessage.qtHandler() eMsg.setMinimumSize(600, 400) # start the event loop res = app.exec_() logging.debug("Shutting down, result %d" % res) logging.shutdown() sys.exit(res) except Exception, err: raise err if __name__ == '__main__': main() eric4-4.5.18/eric/PaxHeaders.8617/default.e4k0000644000175000001440000000007411700077425016552 xustar000000000000000030 atime=1389081083.993724382 30 ctime=1389081086.309724333 eric4-4.5.18/eric/default.e4k0000644000175000001440000017700111700077425016305 0ustar00detlevusers00000000000000 project_new project_open project_close project_save project_save_as project_add_file project_add_directory project_add_translation project_search_new_files project_properties project_user_properties project_filetype_associatios project_lexer_associatios project_debugger_properties project_debugger_properties_load project_debugger_properties_save project_debugger_properties_delete project_debugger_properties_resets project_load_session project_save_session project_delete_session project_code_metrics project_code_coverage project_profile_data project_application_diagram project_plugin_pkglist project_plugin_archive project_plugin_sarchive packagers_cxfreeze doc_eric4_api doc_eric4_doc project_check_pylint project_check_pylintshow project_check_syntax project_check_indentations quit Ctrl+Q new_window Ctrl+Shift+N edit_profile debug_profile project_viewer project_viewer_activate Alt+Shift+P multi_project_viewer multi_project_viewer_activate Alt+Shift+M debug_viewer debug_viewer_activate Alt+Shift+D interpreter_shell interprter_shell_activate Alt+Shift+S terminal terminal_activate Alt+Shift+R file_browser file_browser_activate Alt+Shift+F log_viewer log_viewer_activate Alt+Shift+G task_viewer task_viewer_activate Alt+Shift+T template_viewer template_viewer_activate Alt+Shift+A vertical_toolbox horizontal_toolbox left_sidebar bottom_sidebar whatsThis Shift+F1 helpviewer F1 qt4_documentation pyqt4_documentation python_documentation eric_documentation pyside_documentation show_versions check_updates show_downloadable_versions report_bug request_feature unittest unittest_restart unittest_script unittest_project qt_designer4 qt_linguist4 ui_previewer tr_previewer diff_files compare_files sql_browser mini_editor web_browser icon_editor preferences export_preferences import_preferences reload_apis show_external_tools view_profiles configure_toolbars keyboard_shortcuts export_keyboard_shortcuts import_keyboard_shortcuts viewmanager_activate Alt+Shift+E view_next_tab Ctrl+Alt+Tab view_previous_tab Ctrl+Alt+Shift+Tab switch_tabs Ctrl+1 plugin_infos plugin_install plugin_deinstall plugin_repository about_eric about_qt wizards_python_re wizards_qcolordialog wizards_qfiledialog wizards_qfontdialog wizards_qinputdialog wizards_qmessagebox wizards_qregexp dbg_run_script F2 dbg_run_project Shift+F2 dbg_coverage_script dbg_coverage_project dbg_profile_script dbg_profile_project dbg_debug_script F5 dbg_debug_project Shift+F5 dbg_restart_script F4 dbg_stop_script Shift+F10 dbg_continue F6 dbg_continue_to_cursor Shift+F6 dbg_single_step F7 dbg_step_over F8 dbg_step_out F9 dbg_stop F10 dbg_evaluate dbg_execute dbg_variables_filter dbg_exceptions_filter dbg_ignored_exceptions dbg_toggle_breakpoint Shift+F11 dbg_edit_breakpoint Shift+F12 dbg_next_breakpoint Ctrl+Shift+PgDown dbg_previous_breakpoint Ctrl+Shift+PgUp dbg_clear_breakpoint Ctrl+Shift+C vm_edit_undo Ctrl+Z Alt+Backspace vm_edit_redo Ctrl+Shift+Z vm_edit_revert Ctrl+Y vm_edit_cut Ctrl+X Shift+Del vm_edit_copy Ctrl+C Ctrl+Ins vm_edit_paste Ctrl+V Shift+Ins vm_edit_clear Alt+Shift+C vm_edit_indent Ctrl+I vm_edit_unindent Ctrl+Shift+I vm_edit_smart_indent Ctrl+Alt+I vm_edit_comment Ctrl+M vm_edit_uncomment Ctrl+Alt+M vm_edit_stream_comment vm_edit_box_comment vm_edit_select_to_brace Ctrl+E vm_edit_select_all Ctrl+A vm_edit_deselect_all Ctrl+Alt+A vm_edit_convert_eol vm_edit_shorten_empty_lines vm_edit_autocomplete Ctrl+Space vm_edit_autocomplete_from_document Ctrl+Shift+Space vm_edit_autocomplete_from_api Ctrl+Alt+Space vm_edit_autocomplete_from_all Alt+Shift+Space vm_edit_calltip Alt+Space vm_edit_move_left_char Left vm_edit_move_right_char Right vm_edit_move_up_line Up vm_edit_move_down_line Down vm_edit_move_left_word_part Alt+Left vm_edit_move_right_word_part Alt+Right vm_edit_move_left_word Ctrl+Left vm_edit_move_right_word Ctrl+Right vm_edit_move_first_visible_char Home vm_edit_move_start_line Alt+Home vm_edit_move_end_line End vm_edit_scroll_down_line Ctrl+Down vm_edit_scroll_up_line Ctrl+Up vm_edit_move_up_para Alt+Up vm_edit_move_down_para Alt+Down vm_edit_move_up_page PgUp vm_edit_move_down_page PgDown vm_edit_move_start_text Ctrl+Home vm_edit_move_end_text Ctrl+End vm_edit_indent_one_level Tab vm_edit_unindent_one_level Shift+Tab vm_edit_extend_selection_left_char Shift+Left vm_edit_extend_selection_right_char Shift+Right vm_edit_extend_selection_up_line Shift+Up vm_edit_extend_selection_down_line Shift+Down vm_edit_extend_selection_left_word_part Alt+Shift+Left vm_edit_extend_selection_right_word_part Alt+Shift+Right vm_edit_extend_selection_left_word Ctrl+Shift+Left vm_edit_extend_selection_right_word Ctrl+Shift+Right vm_edit_extend_selection_first_visible_char Shift+Home vm_edit_extend_selection_end_line Shift+End vm_edit_extend_selection_up_para Alt+Shift+Up vm_edit_extend_selection_down_para Alt+Shift+Down vm_edit_extend_selection_up_page Shift+PgUp vm_edit_extend_selection_down_page Shift+PgDown vm_edit_extend_selection_start_text Ctrl+Shift+Home vm_edit_extend_selection_end_text Ctrl+Shift+End vm_edit_delete_previous_char Backspace Shift+Backspace vm_edit_delet_previous_char_not_line_start vm_edit_delete_current_char Del vm_edit_delete_word_left Ctrl+Backspace vm_edit_delete_word_right Ctrl+Del vm_edit_delete_line_left Ctrl+Shift+Backspace vm_edit_delete_line_right Ctrl+Shift+Del vm_edit_insert_line Return Enter vm_edit_insert_line_below Shift+Return Shift+Enter vm_edit_delete_current_line Ctrl+U Ctrl+Shift+L vm_edit_duplicate_current_line Ctrl+D vm_edit_swap_current_previous_line Ctrl+T vm_edit_cut_current_line Alt+Shift+L vm_edit_copy_current_line Ctrl+Shift+T vm_edit_toggle_insert_overtype Ins vm_edit_convert_selection_lower Alt+Shift+U vm_edit_convert_selection_upper Ctrl+Shift+U vm_edit_move_end_displayed_line Alt+End vm_edit_extend_selection_end_displayed_line vm_edit_formfeed vm_edit_escape Esc vm_edit_extend_rect_selection_down_line Ctrl+Alt+Down vm_edit_extend_rect_selection_up_line Ctrl+Alt+Up vm_edit_extend_rect_selection_left_char Ctrl+Alt+Left vm_edit_extend_rect_selection_right_char Ctrl+Alt+Right vm_edit_extend_rect_selection_first_visible_char Ctrl+Alt+Home vm_edit_extend_rect_selection_end_line Ctrl+Alt+End vm_edit_extend_rect_selection_up_page Ctrl+Alt+PgUp vm_edit_extend_rect_selection_down_page Ctrl+Alt+PgDown vm_edit_duplicate_current_selection Ctrl+Shift+D vm_edit_scroll_start_text vm_edit_scroll_end_text vm_edit_scroll_vertically_center vm_edit_move_end_next_word vm_edit_select_end_next_word vm_edit_move_end_previous_word vm_edit_select_end_previous_word vm_edit_move_start_document_line vm_edit_extend_selection_start_document_line vm_edit_select_rect_start_line vm_edit_extend_selection_start_display_line vm_edit_move_start_display_document_line vm_edit_extend_selection_start_display_document_line vm_edit_move_first_visible_char_document_line vm_edit_extend_selection_first_visible_char_document_line vm_edit_end_start_display_document_line vm_edit_extend_selection_end_display_document_line vm_edit_stuttered_move_up_page vm_edit_stuttered_extend_selection_up_page vm_edit_stuttered_move_down_page vm_edit_stuttered_extend_selection_down_page vm_edit_delete_right_end_next_word vm_edit_move_selection_up_one_line vm_edit_move_selection_down_one_line vm_file_new Ctrl+N vm_file_open Ctrl+O vm_file_close Ctrl+W vm_file_close_all vm_file_save Ctrl+S vm_file_save_as Ctrl+Shift+S vm_file_save_all vm_file_print Ctrl+P vm_file_print_preview vm_file_search_file Ctrl+Alt+F vm_search Ctrl+F vm_search_next F3 vm_search_previous Shift+F3 vm_clear_search_markers Ctrl+3 vm_search_replace Ctrl+R vm_quicksearch Ctrl+Shift+K vm_quicksearch_backwards Ctrl+Shift+J vm_quicksearch_extend Ctrl+Shift+H vm_search_goto_line Ctrl+G vm_search_goto_brace Ctrl+L vm_search_in_files Ctrl+Shift+F vm_replace_in_files Ctrl+Shift+R vm_view_zoom_in Ctrl++ vm_view_zoom_out Ctrl+- vm_view_zoom_reset Ctrl+0 vm_view_zoom Ctrl+# vm_view_toggle_all_folds vm_view_toggle_all_folds_children vm_view_toggle_current_fold vm_view_unhighlight vm_view_split_view vm_view_arrange_horizontally vm_view_remove_split vm_next_split Ctrl+Alt+N vm_previous_split Ctrl+Alt+P vm_macro_start_recording vm_macro_stop_recording vm_macro_run vm_macro_delete vm_macro_load vm_macro_save vm_bookmark_toggle Ctrl+Alt+T vm_bookmark_next Ctrl+PgDown vm_bookmark_previous Ctrl+PgUp vm_bookmark_clear Ctrl+Alt+C vm_syntaxerror_goto vm_syntaxerror_clear vm_uncovered_next vm_uncovered_previous vm_task_next vm_task_previous vm_spelling_spellcheck Shift+F7 vm_spelling_autospellcheck subversion_new subversion_update Meta+Alt+U subversion_commit Meta+Alt+O subversion_add subversion_remove subversion_log subversion_log_limited subversion_log_browser Meta+Alt+G subversion_diff Meta+Alt+D subversion_extendeddiff subversion_urldiff subversion_status Meta+Alt+S subversion_repoinfo subversion_tag subversion_export subversion_options subversion_revert subversion_merge subversion_switch subversion_resolve subversion_cleanup subversion_command subversion_list_tags subversion_list_branches subversion_contents subversion_property_set subversion_property_list subversion_property_delete subversion_relocate subversion_repo_browser subversion_configure refactoring_rename refactoring_rename_local refactoring_rename_module refactoring_change_occurrences refactoring_extract_method refactoring_extract_variable refactoring_inline refactoring_move_method refactoring_move_module refactoring_use_function refactoring_introduce_factory_method refactoring_introduce_parameter_method refactoring_organize_imports refactoring_expand_star_imports refactoring_relative_to_absolute_imports refactoring_froms_to_imports refactoring_organize_imports refactoring_restructure refactoring_change_method_signature refactoring_inline_argument_default refactoring_transform_module_to_package refactoring_method_to_methodobject refactoring_encapsulate_attribute refactoring_local_variable_to_attribute refactoring_undo refactoring_redo refactoring_show_project_undo_history refactoring_show_project_redo_history refactoring_show_file_undo_history refactoring_show_file_redo_history refactoring_clear_history refactoring_find_occurrences refactoring_find_definition refactoring_find_implementations refactoring_edit_config refactoring_help refactoring_analyze_all refactoring_update_configuration refactoring_find_errors refactoring_find_all_errors cvs_new cvs_update Ctrl+Alt+U cvs_commit Ctrl+Alt+O cvs_add cvs_remove cvs_log Ctrl+Alt+G cvs_diff Ctrl+Alt+D cvs_status Ctrl+Alt+S cvs_tag cvs_export cvs_options cvs_revert cvs_merge cvs_switch cvs_cleanup cvs_command cvs_login cvs_logout subversion_new subversion_update Meta+Alt+U subversion_commit Meta+Alt+O subversion_add subversion_remove subversion_log subversion_log_limited subversion_log_browser Meta+Alt+G subversion_diff Meta+Alt+D subversion_extendeddiff subversion_urldiff subversion_status Meta+Alt+S subversion_tag subversion_export subversion_options subversion_revert subversion_merge subversion_switch subversion_resolve subversion_cleanup subversion_command subversion_list_tags subversion_list_branches subversion_contents subversion_property_set subversion_property_list subversion_property_delete subversion_relocate subversion_repo_browser subversion_configure help_file_new_tab Ctrl+T help_file_new_window Ctrl+N help_file_open Ctrl+O help_file_open_tab Ctrl+Shift+O help_file_save_as Ctrl+Shift+S help_file_import_bookmarks help_file_export_bookmarks help_file_print Ctrl+P help_file_print_preview help_file_close Ctrl+W help_file_close_all help_file_private_browsing help_file_quit Ctrl+Q help_go_backward Alt+Left Backspace help_go_foreward Alt+Right Shift+Backspace help_go_home Ctrl+Home help_go_reload Ctrl+R F5 help_go_stop Ctrl+. Esc help_edit_copy Ctrl+C help_edit_find Ctrl+F help_edit_find_next F3 help_edit_find_previous Shift+F3 help_bookmarks_manage Ctrl+Shift+B help_bookmark_add Ctrl+D help_bookmark_show_all help_bookmark_all_tabs help_help_whats_this Shift+F1 help_help_about help_help_about_qt help_view_zoom_in Ctrl++ help_view_zoom_out Ctrl+- help_view_zoom_reset Ctrl+0 help_view_zoom_text_only help_show_page_source Ctrl+U help_view_full_scree F11 help_view_next_tab Ctrl+Alt+Tab help_view_previous_tab Ctrl+Alt+Shift+Tab help_switch_tabs Ctrl+1 help_preferences help_accepted_languages help_cookies help_sync_toc help_show_toc help_show_index help_show_search help_qthelp_documents help_qthelp_filters help_qthelp_reindex help_clear_private_data help_clear_icons_db help_search_engines help_manage_passwords help_adblock help_tools_network_monitor eric4-4.5.18/eric/PaxHeaders.8617/UI0000644000175000001440000000013212262730776014765 xustar000000000000000030 mtime=1389081086.304724332 30 atime=1389081086.305724332 30 ctime=1389081086.315724332 eric4-4.5.18/eric/UI/0000755000175000001440000000000012262730776014574 5ustar00detlevusers00000000000000eric4-4.5.18/eric/UI/PaxHeaders.8617/FindFileDialog.ui0000644000175000001440000000007411375751642020205 xustar000000000000000030 atime=1389081084.002724382 30 ctime=1389081086.309724333 eric4-4.5.18/eric/UI/FindFileDialog.ui0000644000175000001440000003441311375751642017737 0ustar00detlevusers00000000000000 FindFileDialog 0 0 600 750 Find in Files Find &text: findtextCombo 0 0 Enter the search text or regular expression true QComboBox::InsertAtTop false false Replace te&xt: findtextCombo 0 0 Enter the replacement text or regular expression true QComboBox::InsertAtTop false false Select to match case sensitive &Match upper/lower case Select to match whole words only Whole &word Select if the searchtext is a regular expression Regular &Expression Select to open the first occurence automatically Feeling Like File type Search in source files &Sources true Search in resources &Resources Search in forms &Forms Search in interfaces &Interfaces Qt::Horizontal Select to filter the files by a given filename pattern Fi&lter false 0 0 Enter the filename wildcards separated by ';' 0 0 Find in Search in files of the current project &Project true Search in files of a directory tree to be entered below &Directory tree false 0 0 Enter the directory to search in true QComboBox::InsertAtTop QComboBox::AdjustToMinimumContentsLength false Select the directory via a directory selection dialog ... Search in open files only &Open files only 0 0 Shows the progress of the search action 0 Qt::Horizontal 0 3 true true 2 File/Line Text Press to apply the selected replacements Replace Qt::Horizontal QDialogButtonBox::Close E4SqueezeLabelPath QLabel
    E4Gui/E4SqueezeLabels.h
    findtextCombo replacetextCombo caseCheckBox wordCheckBox regexpCheckBox feelLikeCheckBox sourcesCheckBox formsCheckBox resourcesCheckBox interfacesCheckBox filterCheckBox filterEdit projectButton dirButton dirCombo dirSelectButton openFilesButton findList replaceButton buttonBox dirButton toggled(bool) dirSelectButton setEnabled(bool) 392 136 577 168 buttonBox rejected() FindFileDialog close() 49 740 34 660 filterCheckBox toggled(bool) filterEdit setEnabled(bool) 53 195 191 196 dirButton toggled(bool) dirCombo setEnabled(bool) 302 125 303 158
    eric4-4.5.18/eric/UI/PaxHeaders.8617/AuthenticationDialog.py0000644000175000001440000000013212261012651021473 xustar000000000000000030 mtime=1388582313.247092896 30 atime=1389081084.002724382 30 ctime=1389081086.309724333 eric4-4.5.18/eric/UI/AuthenticationDialog.py0000644000175000001440000000405712261012651021233 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2008 - 2014 Detlev Offenbach # """ Module implementing the authentication dialog for the help browser. """ from PyQt4.QtGui import QDialog, QStyle from Ui_AuthenticationDialog import Ui_AuthenticationDialog class AuthenticationDialog(QDialog, Ui_AuthenticationDialog): """ Class implementing the authentication dialog for the help browser. """ def __init__(self, info, username, showSave = False, saveIt = False, parent = None): """ Constructor @param info information to be shown (string or QString) @param username username as supplied by subversion (string or QString) @param showSave flag to indicate to show the save checkbox (boolean) @param saveIt flag indicating the value for the save checkbox (boolean) """ QDialog.__init__(self, parent) self.setupUi(self) self.infoLabel.setText(info) self.usernameEdit.setText(username) self.saveCheckBox.setVisible(showSave) self.saveCheckBox.setChecked(saveIt) self.iconLabel.setText("") self.iconLabel.setPixmap( self.style().standardIcon(QStyle.SP_MessageBoxQuestion).pixmap(32, 32)) def setData(self, username, password): """ Public method to set the login data. @param username username (string or QString) @param password password (string or QString) """ self.usernameEdit.setText(username) self.passwordEdit.setText(password) def getData(self): """ Public method to retrieve the login data. @return tuple of two QString values (username, password) """ return (self.usernameEdit.text(), self.passwordEdit.text()) def shallSave(self): """ Public method to check, if the login data shall be saved. @return flag indicating that the login data shall be saved (boolean) """ return self.saveCheckBox.isChecked() eric4-4.5.18/eric/UI/PaxHeaders.8617/EmailDialog.py0000644000175000001440000000013212261012651017543 xustar000000000000000030 mtime=1388582313.252092959 30 atime=1389081084.002724382 30 ctime=1389081086.309724333 eric4-4.5.18/eric/UI/EmailDialog.py0000644000175000001440000003121612261012651017300 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Module implementing a dialog to send bug reports. """ import sys import os import mimetypes import smtplib import socket from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQFileDialog, KQMessageBox, KQInputDialog import KdeQt from Ui_EmailDialog import Ui_EmailDialog from Info import Program, Version, BugAddress, FeatureAddress import Preferences import Utilities from email import Encoders from email.MIMEBase import MIMEBase from email.MIMEText import MIMEText from email.MIMEImage import MIMEImage from email.MIMEAudio import MIMEAudio from email.MIMEMultipart import MIMEMultipart class EmailDialog(QDialog, Ui_EmailDialog): """ Class implementing a dialog to send bug reports. """ def __init__(self, mode = "bug", parent = None): """ Constructor @param mode mode of this dialog (string, "bug" or "feature") @param parent parent widget of this dialog (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.message.setWordWrapMode(QTextOption.WordWrap) self.__mode = mode if self.__mode == "feature": self.setWindowTitle(self.trUtf8("Send feature request")) self.msgLabel.setText(self.trUtf8( "Enter your &feature request below." " Version information is added automatically.")) self.__toAddress = FeatureAddress else: # default is bug self.msgLabel.setText(self.trUtf8( "Enter your &bug description below." " Version information is added automatically.")) self.__toAddress = BugAddress self.sendButton = \ self.buttonBox.addButton(self.trUtf8("Send"), QDialogButtonBox.ActionRole) self.sendButton.setEnabled(False) self.sendButton.setDefault(True) height = self.height() self.mainSplitter.setSizes([int(0.7 * height), int(0.3 * height)]) self.attachments.headerItem().setText(self.attachments.columnCount(), "") self.attachments.header().setResizeMode(QHeaderView.Interactive) sig = Preferences.getUser("Signature") if sig: self.message.setPlainText(sig) cursor = self.message.textCursor() cursor.setPosition(0) self.message.setTextCursor(cursor) self.message.ensureCursorVisible() self.__deleteFiles = [] def keyPressEvent(self, ev): """ Re-implemented to handle the user pressing the escape key. @param ev key event (QKeyEvent) """ if ev.key() == Qt.Key_Escape: res = KQMessageBox.question(self, self.trUtf8("Close dialog"), self.trUtf8("""Do you really want to close the dialog?"""), QMessageBox.StandardButtons(\ QMessageBox.No | \ QMessageBox.Yes), QMessageBox.No) if res == QMessageBox.Yes: self.reject() def on_buttonBox_clicked(self, button): """ Private slot called by a button of the button box clicked. @param button button that was clicked (QAbstractButton) """ if button == self.sendButton: self.on_sendButton_clicked() def on_buttonBox_rejected(self): """ Private slot to handle the rejected signal of the button box. """ res = KQMessageBox.question(self, self.trUtf8("Close dialog"), self.trUtf8("""Do you really want to close the dialog?"""), QMessageBox.StandardButtons(\ QMessageBox.No | \ QMessageBox.Yes), QMessageBox.No) if res == QMessageBox.Yes: self.reject() @pyqtSignature("") def on_sendButton_clicked(self): """ Private slot to send the email message. """ if self.attachments.topLevelItemCount(): msg = self.__createMultipartMail() else: msg = self.__createSimpleMail() ok = self.__sendmail(msg) if ok: for f in self.__deleteFiles: try: os.remove(f) except OSError: pass self.accept() def __createSimpleMail(self): """ Private method to create a simple mail message. @return string containing the mail message """ try: import sipconfig sip_version_str = sipconfig.Configuration().sip_version_str except ImportError: sip_version_str = "sip version not available" msgtext = "%s\r\n----\r\n%s----\r\n%s----\r\n%s" % \ (unicode(self.message.toPlainText()), Utilities.generateVersionInfo("\r\n"), Utilities.generatePluginsVersionInfo("\r\n"), Utilities.generateDistroInfo("\r\n")) msg = MIMEText(msgtext, _charset = unicode(Preferences.getSystem("StringEncoding"))) msg['From'] = unicode(Preferences.getUser("Email")) msg['To'] = self.__toAddress msg['Subject'] = '[eric4] %s' % unicode(self.subject.text()) return msg.as_string() def __createMultipartMail(self): """ Private method to create a multipart mail message. @return string containing the mail message """ try: import sipconfig sip_version_str = sipconfig.Configuration().sip_version_str except ImportError: sip_version_str = "sip version not available" mpPreamble = ("This is a MIME-encoded message with attachments. " "If you see this message, your mail client is not " "capable of displaying the attachments.") msgtext = "%s\r\n----\r\n%s----\r\n%s----\r\n%s" % \ (unicode(self.message.toPlainText()), Utilities.generateVersionInfo("\r\n"), Utilities.generatePluginsVersionInfo("\r\n"), Utilities.generateDistroInfo("\r\n")) # first part of multipart mail explains format msg = MIMEMultipart() msg['From'] = unicode(Preferences.getUser("Email")) msg['To'] = self.__toAddress msg['Subject'] = '[eric4] %s' % unicode(self.subject.text()) msg.preamble = mpPreamble msg.epilogue = '' # second part is intended to be read att = MIMEText(msgtext, _charset = unicode(Preferences.getSystem("StringEncoding"))) msg.attach(att) # next parts contain the attachments for index in range(self.attachments.topLevelItemCount()): itm = self.attachments.topLevelItem(index) maintype, subtype = str(itm.text(1)).split('/', 1) fname = unicode(itm.text(0)) name = os.path.basename(fname) if maintype == 'text': att = MIMEText(open(fname, 'rb').read(), _subtype = subtype) elif maintype == 'image': att = MIMEImage(open(fname, 'rb').read(), _subtype = subtype) elif maintype == 'audio': att = MIMEAudio(open(fname, 'rb').read(), _subtype = subtype) else: att = MIMEBase(maintype, subtype) att.set_payload(open(fname, 'rb').read()) Encoders.encode_base64(att) att.add_header('Content-Disposition', 'attachment', filename = name) msg.attach(att) return msg.as_string() def __sendmail(self, msg): """ Private method to actually send the message. @param msg the message to be sent (string) @return flag indicating success (boolean) """ try: server = smtplib.SMTP(str(Preferences.getUser("MailServer")), Preferences.getUser("MailServerPort")) if Preferences.getUser("MailServerUseTLS"): server.starttls() if Preferences.getUser("MailServerAuthentication"): # mail server needs authentication password = unicode(Preferences.getUser("MailServerPassword")) if not password: password, ok = KQInputDialog.getText(\ self, self.trUtf8("Mail Server Password"), self.trUtf8("Enter your mail server password"), QLineEdit.Password) if not ok: # abort return False try: server.login(unicode(Preferences.getUser("MailServerUser")), str(password)) except (smtplib.SMTPException, socket.error), e: res = KQMessageBox.critical(self, self.trUtf8("Send bug report"), self.trUtf8("""

    Authentication failed.
    Reason: %1

    """) .arg(str(e)), QMessageBox.StandardButtons(\ QMessageBox.Abort | \ QMessageBox.Retry), QMessageBox.Retry) if res == QMessageBox.Retry: return self.__sendmail(msg) else: return False QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) QApplication.processEvents() result = server.sendmail(unicode(Preferences.getUser("Email")), self.__toAddress, msg) server.quit() QApplication.restoreOverrideCursor() except (smtplib.SMTPException, socket.error), e: QApplication.restoreOverrideCursor() res = KQMessageBox.critical(self, self.trUtf8("Send bug report"), self.trUtf8("""

    Message could not be sent.
    Reason: %1

    """) .arg(str(e)), QMessageBox.StandardButtons(\ QMessageBox.Abort | \ QMessageBox.Retry), QMessageBox.Retry) if res == QMessageBox.Retry: return self.__sendmail(msg) else: return False return True @pyqtSignature("") def on_addButton_clicked(self): """ Private slot to handle the Add... button. """ fname = KQFileDialog.getOpenFileName(\ self, self.trUtf8("Attach file"), QString(), QString()) if not fname.isEmpty(): self.attachFile(fname, False) def attachFile(self, fname, deleteFile): """ Public method to add an attachment. @param fname name of the file to be attached (string or QString) @param deleteFile flag indicating to delete the file after it has been sent (boolean) """ fname = unicode(fname) type = mimetypes.guess_type(fname)[0] if not type: type = "application/octet-stream" itm = QTreeWidgetItem(self.attachments, QStringList() << fname << type) self.attachments.header().resizeSections(QHeaderView.ResizeToContents) self.attachments.header().setStretchLastSection(True) if deleteFile: self.__deleteFiles.append(fname) @pyqtSignature("") def on_deleteButton_clicked(self): """ Private slot to handle the Delete button. """ itm = self.attachments.currentItem() if itm is not None: itm = self.attachments.takeTopLevelItem(\ self.attachments.indexOfTopLevelItem(itm)) del itm def on_subject_textChanged(self, txt): """ Private slot to handle the textChanged signal of the subject edit. @param txt changed text (QString) """ self.sendButton.setEnabled(\ not self.subject.text().isEmpty() and \ not self.message.toPlainText().isEmpty()) def on_message_textChanged(self): """ Private slot to handle the textChanged signal of the message edit. @param txt changed text (QString) """ self.sendButton.setEnabled(\ not self.subject.text().isEmpty() and \ not self.message.toPlainText().isEmpty()) eric4-4.5.18/eric/UI/PaxHeaders.8617/ErrorLogDialog.py0000644000175000001440000000013112261012651020246 xustar000000000000000029 mtime=1388582313.25609301 30 atime=1389081084.002724382 30 ctime=1389081086.309724333 eric4-4.5.18/eric/UI/ErrorLogDialog.py0000644000175000001440000000335412261012651020006 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2012 - 2014 Detlev Offenbach # """ Module implementing a dialog to display an error log. """ import os from PyQt4.QtCore import pyqtSignature from PyQt4.QtGui import QDialog, QStyle from .Ui_ErrorLogDialog import Ui_ErrorLogDialog class ErrorLogDialog(QDialog, Ui_ErrorLogDialog): """ Class implementing a dialog to display an error log. """ def __init__(self, logFile, parent=None): """ Constructor @param logFile name of the log file containing the error info (string) @param parent reference to the parent widget (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) pixmap = self.style().standardIcon(QStyle.SP_MessageBoxQuestion).pixmap(32, 32) self.icon.setPixmap(pixmap) self.__ui = parent self.__logFile = logFile try: f = open(logFile, "r") txt = f.read() f.close() self.logEdit.setPlainText(txt) except IOError: pass @pyqtSignature("") def on_emailButton_clicked(self): """ Private slot to send an email. """ self.__ui.showEmailDialog("bug", attachFile=self.__logFile, deleteAttachFile=True) self.accept() @pyqtSignature("") def on_deleteButton_clicked(self): """ Private slot to delete the log file. """ if os.path.exists(self.__logFile): os.remove(self.__logFile) self.accept() @pyqtSignature("") def on_keepButton_clicked(self): """ Private slot to just do nothing. """ self.accept() eric4-4.5.18/eric/UI/PaxHeaders.8617/DiffDialog.py0000644000175000001440000000013212261012651017364 xustar000000000000000030 mtime=1388582313.261093073 30 atime=1389081084.002724382 30 ctime=1389081086.309724333 eric4-4.5.18/eric/UI/DiffDialog.py0000644000175000001440000004606312261012651017127 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2004 - 2014 Detlev Offenbach # """ Module implementing a dialog to compare two files. """ import os import sys import time from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQFileDialog, KQMessageBox from KdeQt.KQMainWindow import KQMainWindow from E4Gui.E4Completers import E4FileCompleter from Ui_DiffDialog import Ui_DiffDialog import Utilities from difflib import SequenceMatcher # This function is copied from python 2.3 and slightly modified. # The header lines contain a tab after the filename. def unified_diff(a, b, fromfile='', tofile='', fromfiledate='', tofiledate='', n=3, lineterm='\n'): """ Compare two sequences of lines; generate the delta as a unified diff. Unified diffs are a compact way of showing line changes and a few lines of context. The number of context lines is set by 'n' which defaults to three. By default, the diff control lines (those with ---, +++, or @@) are created with a trailing newline. This is helpful so that inputs created from file.readlines() result in diffs that are suitable for file.writelines() since both the inputs and outputs have trailing newlines. For inputs that do not have trailing newlines, set the lineterm argument to "" so that the output will be uniformly newline free. The unidiff format normally has a header for filenames and modification times. Any or all of these may be specified using strings for 'fromfile', 'tofile', 'fromfiledate', and 'tofiledate'. The modification times are normally expressed in the format returned by time.ctime(). Example:
        >>> for line in unified_diff('one two three four'.split(),
        ...             'zero one tree four'.split(), 'Original', 'Current',
        ...             'Sat Jan 26 23:30:50 1991', 'Fri Jun 06 10:20:52 2003',
        ...             lineterm=''):
        ...     print line
        --- Original Sat Jan 26 23:30:50 1991
        +++ Current Fri Jun 06 10:20:52 2003
        @@ -1,4 +1,4 @@
        +zero
         one
        -two
        -three
        +tree
         four
        
    @param a first sequence of lines (list of strings) @param b second sequence of lines (list of strings) @param fromfile filename of the first file (string) @param tofile filename of the second file (string) @param fromfiledate modification time of the first file (string) @param tofiledate modification time of the second file (string) @param n number of lines of context (integer) @param lineterm line termination string (string) @return a generator yielding lines of differences """ started = False for group in SequenceMatcher(None,a,b).get_grouped_opcodes(n): if not started: yield '--- %s\t%s%s' % (fromfile, fromfiledate, lineterm) yield '+++ %s\t%s%s' % (tofile, tofiledate, lineterm) started = True i1, i2, j1, j2 = group[0][1], group[-1][2], group[0][3], group[-1][4] yield "@@ -%d,%d +%d,%d @@%s" % (i1+1, i2-i1, j1+1, j2-j1, lineterm) for tag, i1, i2, j1, j2 in group: if tag == 'equal': for line in a[i1:i2]: yield ' ' + line continue if tag == 'replace' or tag == 'delete': for line in a[i1:i2]: yield '-' + line if tag == 'replace' or tag == 'insert': for line in b[j1:j2]: yield '+' + line # This function is copied from python 2.3 and slightly modified. # The header lines contain a tab after the filename. def context_diff(a, b, fromfile='', tofile='', fromfiledate='', tofiledate='', n=3, lineterm='\n'): """ Compare two sequences of lines; generate the delta as a context diff. Context diffs are a compact way of showing line changes and a few lines of context. The number of context lines is set by 'n' which defaults to three. By default, the diff control lines (those with *** or ---) are created with a trailing newline. This is helpful so that inputs created from file.readlines() result in diffs that are suitable for file.writelines() since both the inputs and outputs have trailing newlines. For inputs that do not have trailing newlines, set the lineterm argument to "" so that the output will be uniformly newline free. The context diff format normally has a header for filenames and modification times. Any or all of these may be specified using strings for 'fromfile', 'tofile', 'fromfiledate', and 'tofiledate'. The modification times are normally expressed in the format returned by time.ctime(). If not specified, the strings default to blanks. Example:
        >>> print ''.join(context_diff('one\ntwo\nthree\nfour\n'.splitlines(1),
        ...       'zero\none\ntree\nfour\n'.splitlines(1), 'Original', 'Current',
        ...       'Sat Jan 26 23:30:50 1991', 'Fri Jun 06 10:22:46 2003')),
        *** Original Sat Jan 26 23:30:50 1991
        --- Current Fri Jun 06 10:22:46 2003
        ***************
        *** 1,4 ****
          one
        ! two
        ! three
          four
        --- 1,4 ----
        + zero
          one
        ! tree
          four
        
    @param a first sequence of lines (list of strings) @param b second sequence of lines (list of strings) @param fromfile filename of the first file (string) @param tofile filename of the second file (string) @param fromfiledate modification time of the first file (string) @param tofiledate modification time of the second file (string) @param n number of lines of context (integer) @param lineterm line termination string (string) @return a generator yielding lines of differences """ started = False prefixmap = {'insert':'+ ', 'delete':'- ', 'replace':'! ', 'equal':' '} for group in SequenceMatcher(None,a,b).get_grouped_opcodes(n): if not started: yield '*** %s\t%s%s' % (fromfile, fromfiledate, lineterm) yield '--- %s\t%s%s' % (tofile, tofiledate, lineterm) started = True yield '***************%s' % (lineterm,) if group[-1][2] - group[0][1] >= 2: yield '*** %d,%d ****%s' % (group[0][1]+1, group[-1][2], lineterm) else: yield '*** %d ****%s' % (group[-1][2], lineterm) visiblechanges = [e for e in group if e[0] in ('replace', 'delete')] if visiblechanges: for tag, i1, i2, _, _ in group: if tag != 'insert': for line in a[i1:i2]: yield prefixmap[tag] + line if group[-1][4] - group[0][3] >= 2: yield '--- %d,%d ----%s' % (group[0][3]+1, group[-1][4], lineterm) else: yield '--- %d ----%s' % (group[-1][4], lineterm) visiblechanges = [e for e in group if e[0] in ('replace', 'insert')] if visiblechanges: for tag, _, _, j1, j2 in group: if tag != 'delete': for line in b[j1:j2]: yield prefixmap[tag] + line class DiffDialog(QWidget, Ui_DiffDialog): """ Class implementing a dialog to compare two files. """ def __init__(self,parent = None): """ Constructor """ QWidget.__init__(self,parent) self.setupUi(self) self.file1Completer = E4FileCompleter(self.file1Edit) self.file2Completer = E4FileCompleter(self.file2Edit) self.diffButton = \ self.buttonBox.addButton(self.trUtf8("Compare"), QDialogButtonBox.ActionRole) self.diffButton.setToolTip(\ self.trUtf8("Press to perform the comparison of the two files")) self.saveButton = \ self.buttonBox.addButton(self.trUtf8("Save"), QDialogButtonBox.ActionRole) self.saveButton.setToolTip(self.trUtf8("Save the output to a patch file")) self.diffButton.setEnabled(False) self.saveButton.setEnabled(False) self.diffButton.setDefault(True) self.filename1 = '' self.filename2 = '' self.updateInterval = 20 # update every 20 lines if Utilities.isWindowsPlatform(): self.contents.setFontFamily("Lucida Console") else: self.contents.setFontFamily("Monospace") self.cNormalFormat = self.contents.currentCharFormat() self.cAddedFormat = self.contents.currentCharFormat() self.cAddedFormat.setBackground(QBrush(QColor(190, 237, 190))) self.cRemovedFormat = self.contents.currentCharFormat() self.cRemovedFormat.setBackground(QBrush(QColor(237, 190, 190))) self.cReplacedFormat = self.contents.currentCharFormat() self.cReplacedFormat.setBackground(QBrush(QColor(190, 190, 237))) self.cLineNoFormat = self.contents.currentCharFormat() self.cLineNoFormat.setBackground(QBrush(QColor(255, 220, 168))) # connect some of our widgets explicitly self.connect(self.file1Edit, SIGNAL("textChanged(const QString &)"), self.__fileChanged) self.connect(self.file2Edit, SIGNAL("textChanged(const QString &)"), self.__fileChanged) def show(self, filename = None): """ Public slot to show the dialog. @param filename name of a file to use as the first file (string or QString) """ if filename: self.file1Edit.setText(filename) QWidget.show(self) def on_buttonBox_clicked(self, button): """ Private slot called by a button of the button box clicked. @param button button that was clicked (QAbstractButton) """ if button == self.diffButton: self.on_diffButton_clicked() elif button == self.saveButton: self.on_saveButton_clicked() @pyqtSignature("") def on_saveButton_clicked(self): """ Private slot to handle the Save button press. It saves the diff shown in the dialog to a file in the local filesystem. """ dname, fname = Utilities.splitPath(self.filename2) if fname != '.': fname = "%s.diff" % self.filename2 else: fname = dname selectedFilter = QString("") fname = KQFileDialog.getSaveFileName(\ self, self.trUtf8("Save Diff"), fname, self.trUtf8("Patch Files (*.diff)"), selectedFilter, QFileDialog.Options(QFileDialog.DontConfirmOverwrite)) if fname.isEmpty(): return ext = QFileInfo(fname).suffix() if ext.isEmpty(): ex = selectedFilter.section('(*',1,1).section(')',0,0) if not ex.isEmpty(): fname.append(ex) if QFileInfo(fname).exists(): res = KQMessageBox.warning(self, self.trUtf8("Save Diff"), self.trUtf8("

    The patch file %1 already exists.

    ") .arg(fname), QMessageBox.StandardButtons(\ QMessageBox.Abort | \ QMessageBox.Save), QMessageBox.Abort) if res != QMessageBox.Save: return fname = unicode(Utilities.toNativeSeparators(fname)) try: f = open(fname, "wb") txt = self.contents.toPlainText() try: f.write(unicode(txt)) except UnicodeError: pass f.close() except IOError, why: KQMessageBox.critical(self, self.trUtf8('Save Diff'), self.trUtf8('

    The patch file %1 could not be saved.
    ' 'Reason: %2

    ') .arg(unicode(fname)).arg(str(why))) @pyqtSignature("") def on_diffButton_clicked(self): """ Private slot to handle the Compare button press. """ self.filename1 = unicode(Utilities.toNativeSeparators(self.file1Edit.text())) try: filemtime1 = time.ctime(os.stat(self.filename1).st_mtime) except IOError: filemtime1 = "" try: f1 = open(self.filename1, "rb") lines1 = f1.readlines() f1.close() except IOError: KQMessageBox.critical(self, self.trUtf8("Compare Files"), self.trUtf8("""

    The file %1 could not be read.

    """) .arg(self.filename1)) return self.filename2 = unicode(Utilities.toNativeSeparators(self.file2Edit.text())) try: filemtime2 = time.ctime(os.stat(self.filename2).st_mtime) except IOError: filemtime2 = "" try: f2 = open(self.filename2, "rb") lines2 = f2.readlines() f2.close() except IOError: KQMessageBox.critical(self, self.trUtf8("Compare Files"), self.trUtf8("""

    The file %1 could not be read.

    """) .arg(self.filename2)) return self.contents.clear() self.saveButton.setEnabled(False) if self.unifiedRadioButton.isChecked(): self.__generateUnifiedDiff(lines1, lines2, self.filename1, self.filename2, filemtime1, filemtime2) else: self.__generateContextDiff(lines1, lines2, self.filename1, self.filename2, filemtime1, filemtime2) tc = self.contents.textCursor() tc.movePosition(QTextCursor.Start) self.contents.setTextCursor(tc) self.contents.ensureCursorVisible() self.saveButton.setEnabled(True) def __appendText(self, txt, format): """ Private method to append text to the end of the contents pane. @param txt text to insert (QString) @param format text format to be used (QTextCharFormat) """ tc = self.contents.textCursor() tc.movePosition(QTextCursor.End) self.contents.setTextCursor(tc) self.contents.setCurrentCharFormat(format) self.contents.insertPlainText(txt) def __generateUnifiedDiff(self, a, b, fromfile, tofile, fromfiledate, tofiledate): """ Private slot to generate a unified diff output. @param a first sequence of lines (list of strings) @param b second sequence of lines (list of strings) @param fromfile filename of the first file (string) @param tofile filename of the second file (string) @param fromfiledate modification time of the first file (string) @param tofiledate modification time of the second file (string) """ paras = 0 for line in unified_diff(a, b, fromfile, tofile, fromfiledate, tofiledate): if line.startswith('+') or line.startswith('>'): format = self.cAddedFormat elif line.startswith('-') or line.startswith('<'): format = self.cRemovedFormat elif line.startswith('@@'): format = self.cLineNoFormat else: format = self.cNormalFormat self.__appendText(line, format) paras += 1 if not (paras % self.updateInterval): QApplication.processEvents() if paras == 0: self.__appendText(self.trUtf8('There is no difference.'), self.cNormalFormat) def __generateContextDiff(self, a, b, fromfile, tofile, fromfiledate, tofiledate): """ Private slot to generate a context diff output. @param a first sequence of lines (list of strings) @param b second sequence of lines (list of strings) @param fromfile filename of the first file (string) @param tofile filename of the second file (string) @param fromfiledate modification time of the first file (string) @param tofiledate modification time of the second file (string) """ paras = 0 for line in context_diff(a, b, fromfile, tofile, fromfiledate, tofiledate): if line.startswith('+ '): format = self.cAddedFormat elif line.startswith('- '): format = self.cRemovedFormat elif line.startswith('! '): format = self.cReplacedFormat elif (line.startswith('*** ') or line.startswith('--- ')) and paras > 1: format = self.cLineNoFormat else: format = self.cNormalFormat self.__appendText(line, format) paras += 1 if not (paras % self.updateInterval): QApplication.processEvents() if paras == 0: self.__appendText(self.trUtf8('There is no difference.'), self.cNormalFormat) def __fileChanged(self): """ Private slot to enable/disable the Compare button. """ if self.file1Edit.text().isEmpty() or \ self.file2Edit.text().isEmpty(): self.diffButton.setEnabled(False) else: self.diffButton.setEnabled(True) def __selectFile(self, lineEdit): """ Private slot to display a file selection dialog. @param lineEdit field for the display of the selected filename (QLineEdit) """ filename = KQFileDialog.getOpenFileName(\ self, self.trUtf8("Select file to compare"), lineEdit.text(), QString()) if not filename.isEmpty(): lineEdit.setText(Utilities.toNativeSeparators(filename)) @pyqtSignature("") def on_file1Button_clicked(self): """ Private slot to handle the file 1 file selection button press. """ self.__selectFile(self.file1Edit) @pyqtSignature("") def on_file2Button_clicked(self): """ Private slot to handle the file 2 file selection button press. """ self.__selectFile(self.file2Edit) class DiffWindow(KQMainWindow): """ Main window class for the standalone dialog. """ def __init__(self, parent = None): """ Constructor @param parent reference to the parent widget (QWidget) """ KQMainWindow.__init__(self, parent) self.cw = DiffDialog(self) self.cw.installEventFilter(self) size = self.cw.size() self.setCentralWidget(self.cw) self.resize(size) def eventFilter(self, obj, event): """ Public method to filter events. @param obj reference to the object the event is meant for (QObject) @param event reference to the event object (QEvent) @return flag indicating, whether the event was handled (boolean) """ if event.type() == QEvent.Close: QApplication.exit() return True return False eric4-4.5.18/eric/UI/PaxHeaders.8617/BrowserModel.py0000644000175000001440000000013212261012651020000 xustar000000000000000030 mtime=1388582313.264093111 30 atime=1389081084.003724382 30 ctime=1389081086.309724333 eric4-4.5.18/eric/UI/BrowserModel.py0000644000175000001440000015325512261012651017545 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing the browser model. """ import sys import os import fnmatch from PyQt4.QtCore import * from PyQt4.QtGui import * import Utilities.ClassBrowsers import Utilities.ClassBrowsers.ClbrBaseClasses import UI.PixmapCache import Preferences import Utilities BrowserItemRoot = 0 BrowserItemDirectory = 1 BrowserItemSysPath = 2 BrowserItemFile = 3 BrowserItemClass = 4 BrowserItemMethod = 5 BrowserItemAttributes = 6 BrowserItemAttribute = 7 BrowserItemCoding = 8 class BrowserModel(QAbstractItemModel): """ Class implementing the browser model. """ def __init__(self, parent = None): """ Constructor @param parent reference to parent object (QObject) """ QAbstractItemModel.__init__(self, parent) rootData = QVariant(QApplication.translate("BrowserModel", "Name")) self.rootItem = BrowserItem(None, rootData) self.progDir = None self.watchedItems = {} self.watcher = QFileSystemWatcher(self) self.connect(self.watcher, SIGNAL("directoryChanged(const QString&)"), self.directoryChanged) self.__populateModel() def columnCount(self, parent=QModelIndex()): """ Public method to get the number of columns. @param parent index of parent item (QModelIndex) @return number of columns (integer) """ if parent.isValid(): item = parent.internalPointer() else: item = self.rootItem return item.columnCount() + 1 def data(self, index, role): """ Public method to get data of an item. @param index index of the data to retrieve (QModelIndex) @param role role of data (Qt.ItemDataRole) @return requested data (QVariant) """ if not index.isValid(): return QVariant() if role == Qt.DisplayRole: item = index.internalPointer() if index.column() < item.columnCount(): return QVariant(item.data(index.column())) elif index.column() == item.columnCount() and \ index.column() < self.columnCount(self.parent(index)): # This is for the case where an item under a multi-column parent # doesn't have a value for all the columns return QVariant("") elif role == Qt.DecorationRole: if index.column() == 0: return QVariant(index.internalPointer().getIcon()) elif role == Qt.FontRole: item = index.internalPointer() if item.isSymlink(): font = QFont(QApplication.font("QTreeView")) font.setItalic(True) return QVariant(font) return QVariant() def flags(self, index): """ Public method to get the item flags. @param index index of the data to retrieve (QModelIndex) @return requested flags (Qt.ItemFlags) """ if not index.isValid(): return Qt.ItemIsEnabled return Qt.ItemIsEnabled | Qt.ItemIsSelectable def headerData(self, section, orientation, role = Qt.DisplayRole): """ Public method to get the header data. @param section number of section to get data for (integer) @param orientation header orientation (Qt.Orientation) @param role role of data (Qt.ItemDataRole) @return requested header data (QVariant) """ if orientation == Qt.Horizontal and role == Qt.DisplayRole: if section >= self.rootItem.columnCount(): return QVariant("") else: return self.rootItem.data(section) return QVariant() def index(self, row, column, parent = QModelIndex()): """ Public method to create an index. @param row row number of the new index (integer) @param column column number of the new index (integer) @param parent index of parent item (QModelIndex) @return index object (QModelIndex) """ # The model/view framework considers negative values out-of-bounds, # however in python they work when indexing into lists. So make sure # we return an invalid index for out-of-bounds row/col if row < 0 or column < 0 or \ row >= self.rowCount(parent) or column >= self.columnCount(parent): return QModelIndex() if not parent.isValid(): parentItem = self.rootItem else: parentItem = parent.internalPointer() try: if not parentItem.isPopulated(): self.populateItem(parentItem) childItem = parentItem.child(row) except IndexError: childItem = None if childItem: return self.createIndex(row, column, childItem) else: return QModelIndex() def parent(self, index): """ Public method to get the index of the parent object. @param index index of the item (QModelIndex) @return index of parent item (QModelIndex) """ if not index.isValid(): return QModelIndex() childItem = index.internalPointer() parentItem = childItem.parent() if parentItem == self.rootItem: return QModelIndex() return self.createIndex(parentItem.row(), 0, parentItem) def rowCount(self, parent = QModelIndex()): """ Public method to get the number of rows. @param parent index of parent item (QModelIndex) @return number of rows (integer) """ # Only the first column should have children if parent.column() > 0: return 0 if not parent.isValid(): parentItem = self.rootItem else: parentItem = parent.internalPointer() if not parentItem.isPopulated(): # lazy population self.populateItem(parentItem) return parentItem.childCount() def hasChildren(self, parent = QModelIndex()): """ Public method to check for the presence of child items. We always return True for normal items in order to do lazy population of the tree. @param parent index of parent item (QModelIndex) @return flag indicating the presence of child items (boolean) """ # Only the first column should have children if parent.column() > 0: return 0 if not parent.isValid(): return self.rootItem.childCount() > 0 if parent.internalPointer().isLazyPopulated(): return True else: return parent.internalPointer().childCount() > 0 def clear(self): """ Public method to clear the model. """ self.rootItem.removeChildren() self.reset() def item(self, index): """ Public method to get a reference to an item. @param index index of the data to retrieve (QModelIndex) @return requested item reference (BrowserItem) """ if not index.isValid(): return None return index.internalPointer() def _addWatchedItem(self, itm): """ Protected method to watch an item. @param itm item to be watched (BrowserDirectoryItem) """ if isinstance(itm, BrowserDirectoryItem): dirName = itm.dirName() if dirName != "" and \ not dirName.startswith("//") and \ not dirName.startswith("\\\\"): if dirName not in self.watcher.directories(): self.watcher.addPath(dirName) if dirName in self.watchedItems: if itm not in self.watchedItems[dirName]: self.watchedItems[dirName].append(itm) else: self.watchedItems[dirName] = [itm] def _removeWatchedItem(self, itm): """ Protected method to remove a watched item. @param itm item to be removed (BrowserDirectoryItem) """ if isinstance(itm, BrowserDirectoryItem): dirName = itm.dirName() if dirName in self.watchedItems: if itm in self.watchedItems[dirName]: self.watchedItems[dirName].remove(itm) if len(self.watchedItems[dirName]) == 0: del self.watchedItems[dirName] self.watcher.removePath(dirName) def directoryChanged(self, path): """ Public slot to handle the directoryChanged signal of the watcher. @param path path of the directory (string) """ path = unicode(path) if path not in self.watchedItems: # just ignore the situation we don't have a reference to the item return for itm in self.watchedItems[path]: oldCnt = itm.childCount() qdir = QDir(itm.dirName()) entryInfoList = qdir.entryInfoList( QDir.Filters(QDir.AllEntries | QDir.NoDotAndDotDot)) # step 1: check for new entries children = itm.children() for f in entryInfoList: fpath = unicode(Utilities.toNativeSeparators(f.absoluteFilePath())) childFound = False for child in children: if child.name() == fpath: childFound = True children.remove(child) break if childFound: continue cnt = itm.childCount() self.beginInsertRows(self.createIndex(itm.row(), 0, itm), cnt, cnt) if f.isDir(): node = BrowserDirectoryItem(itm, unicode(Utilities.toNativeSeparators(f.absoluteFilePath())), False) else: node = BrowserFileItem(itm, unicode(Utilities.toNativeSeparators(f.absoluteFilePath()))) self._addItem(node, itm) self.endInsertRows() # step 2: check for removed entries if len(entryInfoList) != itm.childCount(): for row in range(oldCnt - 1, -1, -1): child = itm.child(row) childname = Utilities.fromNativeSeparators(child.name()) entryFound = False for f in entryInfoList: if unicode(f.absoluteFilePath()) == childname: entryFound = True entryInfoList.remove(f) break if entryFound: continue self._removeWatchedItem(child) self.beginRemoveRows(self.createIndex(itm.row(), 0, itm), row, row) itm.removeChild(child) self.endRemoveRows() def __populateModel(self): """ Private method to populate the browser model. """ self._addItem(BrowserSysPathItem(self.rootItem), self.rootItem) self.toplevelDirs = QStringList() tdp = Preferences.Prefs.settings.value('BrowserModel/ToplevelDirs').toStringList() if not tdp.isEmpty(): self.toplevelDirs = tdp else: self.toplevelDirs.append(Utilities.toNativeSeparators(QDir.homePath())) for d in QDir.drives(): self.toplevelDirs.append(Utilities.toNativeSeparators(\ d.absoluteFilePath())) for d in self.toplevelDirs: itm = BrowserDirectoryItem(self.rootItem, d) self._addItem(itm, self.rootItem) def programChange(self, dirname): """ Public method to change the entry for the directory of file being debugged. @param dirname name of the directory containing the file (string or QString) """ if self.progDir: if dirname == self.progDir.dirName(): return # remove old entry self._removeWatchedItem(self.progDir) self.beginRemoveRows(QModelIndex(), self.progDir.row(), self.progDir.row()) self.rootItem.removeChild(self.progDir) self.endRemoveRows() self.progDir = None itm = BrowserDirectoryItem(self.rootItem, dirname) self.addItem(itm) self.progDir = itm def addTopLevelDir(self, dirname): """ Public method to add a new toplevel directory. @param dirname name of the new toplevel directory (string or QString) """ if not self.toplevelDirs.contains(dirname): itm = BrowserDirectoryItem(self.rootItem, dirname) self.addItem(itm) self.toplevelDirs.append(itm.dirName()) def removeToplevelDir(self, index): """ Public method to remove a toplevel directory. @param index index of the toplevel directory to be removed (QModelIndex) """ if not index.isValid(): return item = index.internalPointer() self.beginRemoveRows(index.parent(), index.row(), index.row()) self.rootItem.removeChild(item) self.endRemoveRows() self.toplevelDirs.removeAll(item.dirName()) self._removeWatchedItem(item) def saveToplevelDirs(self): """ Public slot to save the toplevel directories. """ Preferences.Prefs.settings.setValue('BrowserModel/ToplevelDirs', QVariant(self.toplevelDirs)) def _addItem(self, itm, parentItem): """ Protected slot to add an item. @param itm reference to item to add (BrowserItem) @param parentItem reference to item to add to (BrowserItem) """ parentItem.appendChild(itm) def addItem(self, itm, parent = QModelIndex()): """ Puplic slot to add an item. @param itm item to add (BrowserItem) @param parent index of parent item (QModelIndex) """ if not parent.isValid(): parentItem = self.rootItem else: parentItem = parent.internalPointer() cnt = parentItem.childCount() self.beginInsertRows(parent, cnt, cnt) self._addItem(itm, parentItem) self.endInsertRows() def populateItem(self, parentItem, repopulate = False): """ Public method to populate an item's subtree. @param parentItem reference to the item to be populated @param repopulate flag indicating a repopulation (boolean) """ if parentItem.type() == BrowserItemDirectory: self.populateDirectoryItem(parentItem, repopulate) elif parentItem.type() == BrowserItemSysPath: self.populateSysPathItem(parentItem, repopulate) elif parentItem.type() == BrowserItemFile: self.populateFileItem(parentItem, repopulate) elif parentItem.type() == BrowserItemClass: self.populateClassItem(parentItem, repopulate) elif parentItem.type() == BrowserItemMethod: self.populateMethodItem(parentItem, repopulate) elif parentItem.type() == BrowserItemAttributes: self.populateClassAttributesItem(parentItem, repopulate) def populateDirectoryItem(self, parentItem, repopulate = False): """ Public method to populate a directory item's subtree. @param parentItem reference to the directory item to be populated @param repopulate flag indicating a repopulation (boolean) """ self._addWatchedItem(parentItem) qdir = QDir(parentItem.dirName()) entryInfoList = \ qdir.entryInfoList(QDir.Filters(QDir.AllEntries | QDir.NoDotAndDotDot)) if len(entryInfoList) > 0: if repopulate: self.beginInsertRows(self.createIndex(parentItem.row(), 0, parentItem), 0, len(entryInfoList) - 1) for f in entryInfoList: if f.isDir(): node = BrowserDirectoryItem(parentItem, unicode(Utilities.toNativeSeparators(f.absoluteFilePath())), False) else: fileFilters = Preferences.getUI("BrowsersFileFilters").split(";") if not fileFilters.isEmpty(): fn = unicode(f.fileName()) if any([fnmatch.fnmatch(fn, unicode(ff).strip()) \ for ff in fileFilters]): continue node = BrowserFileItem(parentItem, unicode(Utilities.toNativeSeparators(f.absoluteFilePath()))) self._addItem(node, parentItem) if repopulate: self.endInsertRows() def populateSysPathItem(self, parentItem, repopulate = False): """ Public method to populate a sys.path item's subtree. @param parentItem reference to the sys.path item to be populated @param repopulate flag indicating a repopulation (boolean) """ if len(sys.path) > 0: if repopulate: self.beginInsertRows(self.createIndex(parentItem.row(), 0, parentItem), 0, len(sys.path) - 1) for p in sys.path: if p == '': p = os.getcwd() node = BrowserDirectoryItem(parentItem, p) self._addItem(node, parentItem) if repopulate: self.endInsertRows() def populateFileItem(self, parentItem, repopulate = False): """ Public method to populate a file item's subtree. @param parentItem reference to the file item to be populated @param repopulate flag indicating a repopulation (boolean) """ moduleName = parentItem.moduleName() fileName = parentItem.fileName() try: dict = Utilities.ClassBrowsers.readmodule(\ moduleName, [parentItem.dirName()], parentItem.isPythonFile() or parentItem.isPython3File()) except ImportError: return keys = dict.keys() if len(keys) > 0: if repopulate: self.beginInsertRows(self.createIndex(parentItem.row(), 0, parentItem), 0, len(keys) - 1) for key in keys: if key.startswith("@@"): # special treatment done later continue cl = dict[key] try: if cl.module == moduleName: node = BrowserClassItem(parentItem, cl, fileName) self._addItem(node, parentItem) except AttributeError: pass if "@@Coding@@" in keys: node = BrowserCodingItem(parentItem, QApplication.translate("BrowserModel", "Coding: %1")\ .arg(dict["@@Coding@@"].coding)) self._addItem(node, parentItem) if "@@Globals@@" in keys: node = BrowserClassAttributesItem(parentItem, dict["@@Globals@@"].globals, QApplication.translate("BrowserModel", "Globals")) self._addItem(node, parentItem) if repopulate: self.endInsertRows() def populateClassItem(self, parentItem, repopulate = False): """ Public method to populate a class item's subtree. @param parentItem reference to the class item to be populated @param repopulate flag indicating a repopulation (boolean) """ cl = parentItem.classObject() file_ = parentItem.fileName() if cl is None: return # build sorted list of names keys = [] for name in cl.classes.keys(): keys.append((name, 'c')) for name in cl.methods.keys(): keys.append((name, 'm')) if len(keys) > 0: if repopulate: self.beginInsertRows(self.createIndex(parentItem.row(), 0, parentItem), 0, len(keys) - 1) for key, kind in keys: if kind == 'c': node = BrowserClassItem(parentItem, cl.classes[key], file_) elif kind == 'm': node = BrowserMethodItem(parentItem, cl.methods[key], file_) self._addItem(node, parentItem) if repopulate: self.endInsertRows() if len(cl.attributes): node = BrowserClassAttributesItem(\ parentItem, cl.attributes, QApplication.translate("BrowserModel", "Attributes")) if repopulate: self.addItem(node, self.createIndex(parentItem.row(), 0, parentItem)) else: self._addItem(node, parentItem) if len(cl.globals): node = BrowserClassAttributesItem(\ parentItem, cl.globals, QApplication.translate("BrowserModel", "Class Attributes"), True) if repopulate: self.addItem(node, self.createIndex(parentItem.row(), 0, parentItem)) else: self._addItem(node, parentItem) def populateMethodItem(self, parentItem, repopulate = False): """ Public method to populate a method item's subtree. @param parentItem reference to the method item to be populated @param repopulate flag indicating a repopulation (boolean) """ fn = parentItem.functionObject() file_ = parentItem.fileName() if fn is None: return # build sorted list of names keys = [] for name in fn.classes.keys(): keys.append((name, 'c')) for name in fn.methods.keys(): keys.append((name, 'm')) if len(keys) > 0: if repopulate: self.beginInsertRows(self.createIndex(parentItem.row(), 0, parentItem), 0, len(keys) - 1) for key, kind in keys: if kind == 'c': node = BrowserClassItem(parentItem, fn.classes[key], file_) elif kind == 'm': node = BrowserMethodItem(parentItem, fn.methods[key], file_) self._addItem(node, parentItem) if repopulate: self.endInsertRows() def populateClassAttributesItem(self, parentItem, repopulate = False): """ Public method to populate a class attributes item's subtree. @param parentItem reference to the class attributes item to be populated @param repopulate flag indicating a repopulation (boolean) """ classAttributes = parentItem.isClassAttributes() attributes = parentItem.attributes() if not attributes: return keys = attributes.keys() if len(keys) > 0: if repopulate: self.beginInsertRows(self.createIndex(parentItem.row(), 0, parentItem), 0, len(keys) - 1) for key in keys: node = BrowserClassAttributeItem(parentItem, attributes[key], classAttributes) self._addItem(node, parentItem) if repopulate: self.endInsertRows() class BrowserItem(object): """ Class implementing the data structure for browser items. """ def __init__(self, parent, data): """ Constructor. @param parent reference to the parent item @param data single data of the item """ self.childItems = [] self.parentItem = parent self.itemData = [data] self.type_ = BrowserItemRoot self.icon = UI.PixmapCache.getIcon("empty.png") self._populated = True self._lazyPopulation = False self.symlink = False def appendChild(self, child): """ Public method to add a child to this item. @param child reference to the child item to add (BrowserItem) """ self.childItems.append(child) self._populated = True def removeChild(self, child): """ Public method to remove a child. @param child reference to the child to remove (BrowserItem) """ self.childItems.remove(child) def removeChildren(self): """ Public method to remove all children. """ self.childItems = [] def child(self, row): """ Public method to get a child id. @param row number of child to get the id of (integer) @param return reference to the child item (BrowserItem) """ return self.childItems[row] def children(self): """ Public method to get the ids of all child items. @return references to all child items (list of BrowserItem) """ return self.childItems[:] def childCount(self): """ Public method to get the number of available child items. @return number of child items (integer) """ return len(self.childItems) def columnCount(self): """ Public method to get the number of available data items. @return number of data items (integer) """ return len(self.itemData) def data(self, column): """ Public method to get a specific data item. @param column number of the requested data item (integer) @param return the stored data item """ try: return self.itemData[column] except IndexError: return "" def parent(self): """ Public method to get the reference to the parent item. @return reference to the parent item """ return self.parentItem def row(self): """ Public method to get the row number of this item. @return row number (integer) """ return self.parentItem.childItems.index(self) def type(self): """ Public method to get the item type. @return type of the item """ return self.type_ def isPublic(self): """ Public method returning the public visibility status. @return flag indicating public visibility (boolean) """ return True def getIcon(self): """ Public method to get the items icon. @return the icon (QIcon) """ return self.icon def isPopulated(self): """ Public method to chek, if this item is populated. @return population status (boolean) """ return self._populated def isLazyPopulated(self): """ Public method to check, if this item should be populated lazyly. @return lazy population flag (boolean) """ return self._lazyPopulation def lessThan(self, other, column, order): """ Public method to check, if the item is less than the other one. @param other reference to item to compare against (BrowserItem) @param column column number to use for the comparison (integer) @param order sort order (Qt.SortOrder) (for special sorting) @return true, if this item is less than other (boolean) """ try: return self.itemData[column] < other.itemData[column] except IndexError: return False def isSymlink(self): """ Public method to check, if the items is a symbolic link. @return flag indicating a symbolic link (boolean) """ return self.symlink class BrowserDirectoryItem(BrowserItem): """ Class implementing the data structure for browser directory items. """ def __init__(self, parent, dinfo, full = True): """ Constructor @param parent parent item @param dinfo dinfo is the string for the directory (string or QString) @param full flag indicating full pathname should be displayed (boolean) """ self._dirName = os.path.abspath(unicode(dinfo)) if full: dn = self._dirName else: dn = os.path.basename(self._dirName) BrowserItem.__init__(self, parent, dn) self.type_ = BrowserItemDirectory if os.path.lexists(self._dirName) and os.path.islink(self._dirName): self.symlink = True self.icon = UI.PixmapCache.getSymlinkIcon("dirClosed.png") else: self.icon = UI.PixmapCache.getIcon("dirClosed.png") self._populated = False self._lazyPopulation = True def setName(self, dinfo, full = True): """ Public method to set the directory name. @param dinfo dinfo is the string for the directory (string or QString) @param full flag indicating full pathname should be displayed (boolean) """ self._dirName = os.path.abspath(unicode(dinfo)) if full: dn = self._dirName else: dn = os.path.basename(self._dirName) self.itemData[0] = dn def dirName(self): """ Public method returning the directory name. @return directory name (string) """ return self._dirName def name(self): """ Public method to return the name of the item. @return name of the item (string) """ return self._dirName def lessThan(self, other, column, order): """ Public method to check, if the item is less than the other one. @param other reference to item to compare against (BrowserItem) @param column column number to use for the comparison (integer) @param order sort order (Qt.SortOrder) (for special sorting) @return true, if this item is less than other (boolean) """ if issubclass(other.__class__, BrowserFileItem): if Preferences.getUI("BrowsersListFoldersFirst"): return order == Qt.AscendingOrder return BrowserItem.lessThan(self, other, column, order) class BrowserSysPathItem(BrowserItem): """ Class implementing the data structure for browser sys.path items. """ def __init__(self, parent): """ Constructor @param parent parent item """ BrowserItem.__init__(self, parent, "sys.path") self.type_ = BrowserItemSysPath self.icon = UI.PixmapCache.getIcon("filePython.png") self._populated = False self._lazyPopulation = True class BrowserFileItem(BrowserItem): """ Class implementing the data structure for browser file items. """ def __init__(self, parent, finfo, full = True, sourceLanguage = ""): """ Constructor @param parent parent item @param finfo the string for the file (string) @param full flag indicating full pathname should be displayed (boolean) @param sourceLanguage source code language of the project (string) """ BrowserItem.__init__(self, parent, os.path.basename(finfo)) self.type_ = BrowserItemFile if finfo.endswith('.ui.h'): self.fileext = '.ui.h' else: self.fileext = os.path.splitext(finfo)[1].lower() self._filename = os.path.abspath(finfo) self._dirName = os.path.dirname(finfo) self.sourceLanguage = sourceLanguage self._moduleName = '' pixName = "" if self.isPythonFile(): if self.fileext == '.py': pixName = "filePython.png" else: pixName = "filePython2.png" self._populated = False self._lazyPopulation = True self._moduleName = os.path.basename(finfo) elif self.isPython3File(): pixName = "filePython.png" self._populated = False self._lazyPopulation = True self._moduleName = os.path.basename(finfo) elif self.isRubyFile(): "fileRuby.png" self._populated = False self._lazyPopulation = True self._moduleName = os.path.basename(finfo) elif self.isDesignerFile() or self.isDesignerHeaderFile(): pixName = "fileDesigner.png" elif self.isLinguistFile(): if self.fileext == '.ts': pixName = "fileLinguist.png" else: pixName = "fileLinguist2.png" elif self.isResourcesFile(): pixName = "fileResource.png" elif self.isProjectFile(): pixName = "fileProject.png" elif self.isMultiProjectFile(): pixName = "fileMultiProject.png" elif self.isIdlFile(): pixName = "fileIDL.png" self._populated = False self._lazyPopulation = True self._moduleName = os.path.basename(finfo) elif self.isPixmapFile(): pixName = "filePixmap.png" elif self.isSvgFile(): pixName = "fileSvg.png" elif self.isDFile(): pixName = "fileD.png" else: pixName = "fileMisc.png" if os.path.lexists(self._filename) and os.path.islink(self._filename): self.symlink = True self.icon = UI.PixmapCache.getSymlinkIcon(pixName) else: self.icon = UI.PixmapCache.getIcon(pixName) def setName(self, finfo, full = True): """ Public method to set the directory name. @param finfo the string for the file (string) @param full flag indicating full pathname should be displayed (boolean) """ self._filename = os.path.abspath(finfo) self.itemData[0] = os.path.basename(finfo) if self.isPythonFile() or self.isPython3File() or \ self.isRubyFile() or self.isIdlFile(): self._dirName = os.path.dirname(finfo) self._moduleName = os.path.basename(finfo) def fileName(self): """ Public method returning the filename. @return filename (string) """ return self._filename def fileExt(self): """ Public method returning the file extension. @return file extension (string) """ return self.fileext def name(self): """ Public method to return the name of the item. @return name of the item (string) """ return self._filename def dirName(self): """ Public method returning the directory name. @return directory name (string) """ return self._dirName def moduleName(self): """ Public method returning the module name. @return module name (string) """ return self._moduleName def isPythonFile(self): """ Public method to check, if this file is a Python script. @return flag indicating a Python file (boolean) """ return self.fileext in Preferences.getPython("PythonExtensions") or \ (self.fileext == "" and self.sourceLanguage == "Python") def isPython3File(self): """ Public method to check, if this file is a Python3 script. @return flag indicating a Python file (boolean) """ return self.fileext in Preferences.getPython("Python3Extensions") or \ (self.fileext == "" and self.sourceLanguage == "Python3") def isRubyFile(self): """ Public method to check, if this file is a Ruby script. @return flag indicating a Ruby file (boolean) """ return self.fileext == '.rb' or \ (self.fileext == "" and self.sourceLanguage == "Ruby") def isDesignerFile(self): """ Public method to check, if this file is a Qt-Designer file. @return flag indicating a Qt-Designer file (boolean) """ return self.fileext == '.ui' def isDesignerHeaderFile(self): """ Public method to check, if this file is a Qt-Designer header file. @return flag indicating a Qt-Designer header file (boolean) """ return self.fileext == '.ui.h' def isLinguistFile(self): """ Public method to check, if this file is a Qt-Linguist file. @return flag indicating a Qt-Linguist file (boolean) """ return self.fileext in ['.ts', '.qm'] def isResourcesFile(self): """ Public method to check, if this file is a Qt-Resources file. @return flag indicating a Qt-Resources file (boolean) """ return self.fileext == '.qrc' def isProjectFile(self): """ Public method to check, if this file is an eric4 project file. @return flag indicating an eric4 project file (boolean) """ return self.fileext in ['.e3p', '.e3pz', '.e4p', '.e4pz'] def isMultiProjectFile(self): """ Public method to check, if this file is an eric4 multi project file. @return flag indicating an eric4 project file (boolean) """ return self.fileext in ['.e4m', '.e4mz'] def isIdlFile(self): """ Public method to check, if this file is a CORBA IDL file. @return flag indicating a CORBA IDL file (boolean) """ return self.fileext == '.idl' def isPixmapFile(self): """ Public method to check, if this file is a pixmap file. @return flag indicating a pixmap file (boolean) """ return self.fileext[1:] in QImageReader.supportedImageFormats() def isSvgFile(self): """ Public method to check, if this file is a SVG file. @return flag indicating a SVG file (boolean) """ return self.fileext == '.svg' def isDFile(self): """ Public method to check, if this file is a D file. @return flag indicating a D file (boolean) """ return self.fileext in ['.d', '.di'] or \ (self.fileext == "" and self.sourceLanguage == "D") def lessThan(self, other, column, order): """ Public method to check, if the item is less than the other one. @param other reference to item to compare against (BrowserItem) @param column column number to use for the comparison (integer) @param order sort order (Qt.SortOrder) (for special sorting) @return true, if this item is less than other (boolean) """ if not issubclass(other.__class__, BrowserFileItem): if Preferences.getUI("BrowsersListFoldersFirst"): return order == Qt.DescendingOrder if issubclass(other.__class__, BrowserFileItem): sinit = os.path.basename(self._filename).startswith('__init__.py') oinit = os.path.basename(other.fileName()).startswith('__init__.py') if sinit and not oinit: return order == Qt.AscendingOrder if not sinit and oinit: return order == Qt.DescendingOrder return BrowserItem.lessThan(self, other, column, order) class BrowserClassItem(BrowserItem): """ Class implementing the data structure for browser class items. """ def __init__(self, parent, cl, filename): """ Constructor @param parent parent item @param cl Class object to be shown @param filename filename of the file defining this class """ name = cl.name if hasattr(cl, 'super') and cl.super: supers = [] for sup in cl.super: try: sname = sup.name if sup.module != cl.module: sname = "%s.%s" % (sup.module, sname) except AttributeError: sname = sup supers.append(sname) name = name + "(%s)" % ", ".join(supers) BrowserItem.__init__(self, parent, name) self.type_ = BrowserItemClass self.name = name self._classObject = cl self._filename = filename self.isfunction = isinstance(self._classObject, Utilities.ClassBrowsers.ClbrBaseClasses.Function) self.ismodule = isinstance(self._classObject, Utilities.ClassBrowsers.ClbrBaseClasses.Module) if self.isfunction: if cl.isPrivate(): self.icon = UI.PixmapCache.getIcon("method_private.png") elif cl.isProtected(): self.icon = UI.PixmapCache.getIcon("method_protected.png") else: self.icon = UI.PixmapCache.getIcon("method.png") self.itemData[0] = "%s(%s)" % (name, ", ".join(self._classObject.parameters)) # if no defaults are wanted # ... % (name, ", ".join([e.split('=')[0].strip() \ # for e in self._classObject.parameters])) elif self.ismodule: self.icon = UI.PixmapCache.getIcon("module.png") else: if cl.isPrivate(): self.icon = UI.PixmapCache.getIcon("class_private.png") elif cl.isProtected(): self.icon = UI.PixmapCache.getIcon("class_protected.png") else: self.icon = UI.PixmapCache.getIcon("class.png") if self._classObject and \ (self._classObject.methods or \ self._classObject.classes or \ self._classObject.attributes): self._populated = False self._lazyPopulation = True def fileName(self): """ Public method returning the filename. @return filename (string) """ return self._filename def classObject(self): """ Public method returning the class object. @return reference to the class object """ return self._classObject def lineno(self): """ Public method returning the line number defining this object. return line number defining the object (integer) """ return self._classObject.lineno def lessThan(self, other, column, order): """ Public method to check, if the item is less than the other one. @param other reference to item to compare against (BrowserItem) @param column column number to use for the comparison (integer) @param order sort order (Qt.SortOrder) (for special sorting) @return true, if this item is less than other (boolean) """ if issubclass(other.__class__, BrowserCodingItem) or \ issubclass(other.__class__, BrowserClassAttributesItem): return order == Qt.DescendingOrder if Preferences.getUI("BrowsersListContentsByOccurrence") and column == 0: if order == Qt.AscendingOrder: return self.lineno() < other.lineno() else: return self.lineno() > other.lineno() return BrowserItem.lessThan(self, other, column, order) def isPublic(self): """ Public method returning the public visibility status. @return flag indicating public visibility (boolean) """ return self._classObject.isPublic() class BrowserMethodItem(BrowserItem): """ Class implementing the data structure for browser method items. """ def __init__(self, parent, fn, filename): """ Constructor @param parent parent item @param fn Function object to be shown @param filename filename of the file defining this class """ name = fn.name BrowserItem.__init__(self, parent, name) self.type_ = BrowserItemMethod self.name = name self._functionObject = fn self._filename = filename if self._functionObject.modifier == \ Utilities.ClassBrowsers.ClbrBaseClasses.Function.Static: self.icon = UI.PixmapCache.getIcon("method_static.png") elif self._functionObject.modifier == \ Utilities.ClassBrowsers.ClbrBaseClasses.Function.Class: self.icon = UI.PixmapCache.getIcon("method_class.png") elif self._functionObject.isPrivate(): self.icon = UI.PixmapCache.getIcon("method_private.png") elif self._functionObject.isProtected(): self.icon = UI.PixmapCache.getIcon("method_protected.png") else: self.icon = UI.PixmapCache.getIcon("method.png") self.itemData[0] = "%s(%s)" % \ (name, ", ".join(self._functionObject.parameters)) # if no defaults are wanted # ... % (name, ", ".join(\ # [e.split('=')[0].strip() for e in self._functionObject.parameters])) if self._functionObject and \ (self._functionObject.methods or self._functionObject.classes): self._populated = False self._lazyPopulation = True def fileName(self): """ Public method returning the filename. @return filename (string) """ return self._filename def functionObject(self): """ Public method returning the function object. @return reference to the function object """ return self._functionObject def lineno(self): """ Public method returning the line number defining this object. return line number defining the object (integer) """ return self._functionObject.lineno def lessThan(self, other, column, order): """ Public method to check, if the item is less than the other one. @param other reference to item to compare against (BrowserItem) @param column column number to use for the comparison (integer) @param order sort order (Qt.SortOrder) (for special sorting) @return true, if this item is less than other (boolean) """ if issubclass(other.__class__, BrowserMethodItem): if self.name.startswith('__init__'): return order == Qt.AscendingOrder if other.name.startswith('__init__'): return order == Qt.DescendingOrder elif issubclass(other.__class__, BrowserClassAttributesItem): return order == Qt.DescendingOrder if Preferences.getUI("BrowsersListContentsByOccurrence") and column == 0: if order == Qt.AscendingOrder: return self.lineno() < other.lineno() else: return self.lineno() > other.lineno() return BrowserItem.lessThan(self, other, column, order) def isPublic(self): """ Public method returning the public visibility status. @return flag indicating public visibility (boolean) """ return self._functionObject.isPublic() class BrowserClassAttributesItem(BrowserItem): """ Class implementing the data structure for browser class attributes items. """ def __init__(self, parent, attributes, text, isClass=False): """ Constructor @param parent parent item @param attributes list of attributes @param text text to be shown by this item (QString) @param isClass flag indicating class attributes (boolean) """ BrowserItem.__init__(self, parent, text) self.type_ = BrowserItemAttributes self._attributes = attributes.copy() self._populated = False self._lazyPopulation = True if isClass: self.icon = UI.PixmapCache.getIcon("attributes_class.png") else: self.icon = UI.PixmapCache.getIcon("attributes.png") self.__isClass = isClass def attributes(self): """ Public method returning the attribute list. @return reference to the list of attributes """ return self._attributes def isClassAttributes(self): """ Public method returning the attributes type. @return flag indicating class attributes (boolean) """ return self.__isClass def lessThan(self, other, column, order): """ Public method to check, if the item is less than the other one. @param other reference to item to compare against (BrowserItem) @param column column number to use for the comparison (integer) @param order sort order (Qt.SortOrder) (for special sorting) @return true, if this item is less than other (boolean) """ if issubclass(other.__class__, BrowserCodingItem): return order == Qt.DescendingOrder elif issubclass(other.__class__, BrowserClassItem) or \ issubclass(other.__class__, BrowserMethodItem): return order == Qt.AscendingOrder return BrowserItem.lessThan(self, other, column, order) class BrowserClassAttributeItem(BrowserItem): """ Class implementing the data structure for browser class attribute items. """ def __init__(self, parent, attribute, isClass=False): """ Constructor @param parent parent item @param attribute reference to the attribute object @param isClass flag indicating a class attribute (boolean) """ BrowserItem.__init__(self, parent, attribute.name) self.type_ = BrowserItemAttribute self._attributeObject = attribute self.__public = attribute.isPublic() if isClass: self.icon = UI.PixmapCache.getIcon("attribute_class.png") elif attribute.isPrivate(): self.icon = UI.PixmapCache.getIcon("attribute_private.png") elif attribute.isProtected(): self.icon = UI.PixmapCache.getIcon("attribute_protected.png") else: self.icon = UI.PixmapCache.getIcon("attribute.png") def isPublic(self): """ Public method returning the public visibility status. @return flag indicating public visibility (boolean) """ return self.__public def attributeObject(self): """ Public method returning the class object. @return reference to the class object """ return self._attributeObject def fileName(self): """ Public method returning the filename. @return filename (string) """ return self._attributeObject.file def lineno(self): """ Public method returning the line number defining this object. return line number defining the object (integer) """ return self._attributeObject.lineno def lessThan(self, other, column, order): """ Public method to check, if the item is less than the other one. @param other reference to item to compare against (BrowserItem) @param column column number to use for the comparison (integer) @param order sort order (Qt.SortOrder) (for special sorting) @return true, if this item is less than other (boolean) """ if Preferences.getUI("BrowsersListContentsByOccurrence") and column == 0: if order == Qt.AscendingOrder: return self.lineno() < other.lineno() else: return self.lineno() > other.lineno() return BrowserItem.lessThan(self, other, column, order) class BrowserCodingItem(BrowserItem): """ Class implementing the data structure for browser coding items. """ def __init__(self, parent, text): """ Constructor @param parent parent item @param text text to be shown by this item (QString) """ BrowserItem.__init__(self, parent, text) self.type_ = BrowserItemCoding self.icon = UI.PixmapCache.getIcon("textencoding.png") def lessThan(self, other, column, order): """ Public method to check, if the item is less than the other one. @param other reference to item to compare against (BrowserItem) @param column column number to use for the comparison (integer) @param order sort order (Qt.SortOrder) (for special sorting) @return true, if this item is less than other (boolean) """ if issubclass(other.__class__, BrowserClassItem) or \ issubclass(other.__class__, BrowserClassAttributesItem): return order == Qt.AscendingOrder return BrowserItem.lessThan(self, other, column, order) eric4-4.5.18/eric/UI/PaxHeaders.8617/EmailDialog.ui0000644000175000001440000000007411072435341017541 xustar000000000000000030 atime=1389081084.019724381 30 ctime=1389081086.309724333 eric4-4.5.18/eric/UI/EmailDialog.ui0000644000175000001440000001301511072435341017266 0ustar00detlevusers00000000000000 EmailDialog 0 0 600 547 Send bug report true Qt::Vertical Message &Subject: subject Enter the subject message 0 0 QTextEdit::FixedColumnWidth 70 8 false 0 0 Attachments 0 0 true false Name Type Press to add an attachment &Add... Alt+A Delete the selected entry from the list of attachments &Delete Alt+D Qt::Vertical QSizePolicy::Expanding 20 16 Qt::Horizontal QDialogButtonBox::Close qPixmapFromMimeSource subject message addButton attachments deleteButton eric4-4.5.18/eric/UI/PaxHeaders.8617/PixmapCache.py0000644000175000001440000000013212261012651017556 xustar000000000000000030 mtime=1388582313.266093136 30 atime=1389081084.019724381 30 ctime=1389081086.309724333 eric4-4.5.18/eric/UI/PixmapCache.py0000644000175000001440000000475212261012651017320 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2004 - 2014 Detlev Offenbach # """ Module implementing a pixmap cache for icons. """ import os from PyQt4.QtCore import QStringList from PyQt4.QtGui import QPixmap, QIcon, QPainter class PixmapCache(object): """ Class implementing a pixmap cache for icons. """ def __init__(self): """ Constructor """ self.pixmapCache = {} self.searchPath = QStringList() def getPixmap(self, key): """ Public method to retrieve a pixmap. @param key name of the wanted pixmap (string) @return the requested pixmap (QPixmap) """ if key: try: return self.pixmapCache[key] except KeyError: if not os.path.isabs(key): for path in self.searchPath: pm = QPixmap(path + "/" + key) if not pm.isNull(): break else: pm = QPixmap() else: pm = QPixmap(key) self.pixmapCache[key] = pm return self.pixmapCache[key] return QPixmap() def addSearchPath(self, path): """ Public method to add a path to the search path. @param path path to add (QString) """ if not path in self.searchPath: self.searchPath.append(path) pixCache = PixmapCache() def getPixmap(key, cache = pixCache): """ Module function to retrieve a pixmap. @param key name of the wanted pixmap (string) @return the requested pixmap (QPixmap) """ return cache.getPixmap(key) def getIcon(key, cache = pixCache): """ Module function to retrieve an icon. @param key name of the wanted icon (string) @return the requested icon (QIcon) """ return QIcon(cache.getPixmap(key)) def getSymlinkIcon(key, cache = pixCache): """ Module function to retrieve a symbolic link icon. @param key name of the wanted icon (string) @return the requested icon (QIcon) """ pix1 = QPixmap(cache.getPixmap(key)) pix2 = cache.getPixmap("symlink.png") painter = QPainter(pix1) painter.drawPixmap(0, 10, pix2) painter.end() return QIcon(pix1) def addSearchPath(path, cache = pixCache): """ Module function to add a path to the search path. @param path path to add (QString) """ cache.addSearchPath(path) eric4-4.5.18/eric/UI/PaxHeaders.8617/SplashScreen.py0000644000175000001440000000013212261012651017766 xustar000000000000000030 mtime=1388582313.268093162 30 atime=1389081084.019724381 30 ctime=1389081086.309724333 eric4-4.5.18/eric/UI/SplashScreen.py0000644000175000001440000000420712261012651017523 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing a splashscreen for eric4. """ import os.path import logging from PyQt4.QtCore import Qt from PyQt4.QtGui import QApplication, QPixmap, QSplashScreen, QColor from eric4config import getConfig class SplashScreen(QSplashScreen): """ Class implementing a splashscreen for eric4. """ def __init__(self): """ Constructor """ ericPic = QPixmap(os.path.join(getConfig('ericPixDir'), 'ericSplash.png')) self.labelAlignment = \ Qt.Alignment(Qt.AlignBottom | Qt.AlignRight | Qt.AlignAbsolute) QSplashScreen.__init__(self, ericPic) self.show() QApplication.flush() def showMessage(self, msg): """ Public method to show a message in the bottom part of the splashscreen. @param msg message to be shown (string or QString) """ logging.debug(unicode(msg)) QSplashScreen.showMessage(self, msg, self.labelAlignment, QColor(Qt.white)) QApplication.processEvents() def clearMessage(self): """ Public method to clear the message shown. """ QSplashScreen.clearMessage(self) QApplication.processEvents() class NoneSplashScreen(object): """ Class implementing a "None" splashscreen for eric4. This class implements the same interface as the real splashscreen, but simply does nothing. """ def __init__(self): """ Constructor """ pass def showMessage(self, msg): """ Public method to show a message in the bottom part of the splashscreen. @param msg message to be shown (string or QString) """ logging.debug(unicode(msg)) def clearMessage(self): """ Public method to clear the message shown. """ pass def finish(self, widget): """ Public method to finish the splash screen. @param widget widget to wait for (QWidget) """ pass eric4-4.5.18/eric/UI/PaxHeaders.8617/LogView.py0000644000175000001440000000013212261012651016750 xustar000000000000000030 mtime=1388582313.273093225 30 atime=1389081084.019724381 30 ctime=1389081086.309724333 eric4-4.5.18/eric/UI/LogView.py0000644000175000001440000000661212261012651016507 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing the log viewer widget and the log widget. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from E4Gui.E4TabWidget import E4TabWidget from KdeQt.KQApplication import e4App import UI.PixmapCache import Preferences class LogViewer(QTextEdit): """ Class providing a specialized text edit for displaying logging information. """ def __init__(self, parent = None): """ Constructor @param parent reference to the parent widget (QWidget) """ QTextEdit.__init__(self, parent) self.setAcceptRichText(False) self.setLineWrapMode(QTextEdit.NoWrap) self.setReadOnly(True) self.setWindowIcon(UI.PixmapCache.getIcon("eric.png")) # create the context menu self.__menu = QMenu(self) self.__menu.addAction(self.trUtf8('Clear'), self.clear) self.__menu.addAction(self.trUtf8('Copy'), self.copy) self.__menu.addSeparator() self.__menu.addAction(self.trUtf8('Select All'), self.selectAll) self.__menu.addSeparator() self.__menu.addAction(self.trUtf8("Configure..."), self.__configure) self.setContextMenuPolicy(Qt.CustomContextMenu) self.connect(self, SIGNAL("customContextMenuRequested(const QPoint &)"), self.__handleShowContextMenu) self.cNormalFormat = self.currentCharFormat() self.cErrorFormat = self.currentCharFormat() self.cErrorFormat.setForeground(QBrush(Preferences.getUI("LogStdErrColour"))) def __handleShowContextMenu(self, coord): """ Private slot to show the context menu. @param coord the position of the mouse pointer (QPoint) """ coord = self.mapToGlobal(coord) self.__menu.popup(coord) def __appendText(self, txt, error = False): """ Public method to append text to the end. @param txt text to insert (QString) @param error flag indicating to insert error text (boolean) """ tc = self.textCursor() tc.movePosition(QTextCursor.End) self.setTextCursor(tc) if error: self.setCurrentCharFormat(self.cErrorFormat) else: self.setCurrentCharFormat(self.cNormalFormat) self.insertPlainText(txt) self.ensureCursorVisible() def appendToStdout(self, txt): """ Public slot to appand text to the "stdout" tab. @param txt text to be appended (string or QString) """ self.__appendText(txt, error = False) QApplication.processEvents() def appendToStderr(self, txt): """ Public slot to appand text to the "stderr" tab. @param txt text to be appended (string or QString) """ self.__appendText(txt, error = True) QApplication.processEvents() def preferencesChanged(self): """ Public slot to handle a change of the preferences. """ self.cErrorFormat.setForeground(QBrush(Preferences.getUI("LogStdErrColour"))) def __configure(self): """ Private method to open the configuration dialog. """ e4App().getObject("UserInterface").showPreferences("interfacePage") eric4-4.5.18/eric/UI/PaxHeaders.8617/__init__.py0000644000175000001440000000013212261012651017133 xustar000000000000000030 mtime=1388582313.276093263 30 atime=1389081084.019724381 30 ctime=1389081086.309724333 eric4-4.5.18/eric/UI/__init__.py0000644000175000001440000000051212261012651016663 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2002 - 2014 Detlev Offenbach # """ Package implementing the main user interface and general purpose dialogs. This package contains the main user interface and some general purpose dialogs as well as dialogs not fitting the other more specific categories. """ eric4-4.5.18/eric/UI/PaxHeaders.8617/FindFileNameDialog.py0000644000175000001440000000013212261012651020775 xustar000000000000000030 mtime=1388582313.285093377 30 atime=1389081084.019724381 30 ctime=1389081086.309724333 eric4-4.5.18/eric/UI/FindFileNameDialog.py0000644000175000001440000002135612261012651020536 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2004 - 2014 Detlev Offenbach # """ Module implementing a dialog to search for files. """ import os import sys from PyQt4.QtCore import * from PyQt4.QtGui import * from E4Gui.E4Completers import E4DirCompleter from Ui_FindFileNameDialog import Ui_FindFileNameDialog from Utilities import direntries import Utilities class FindFileNameDialog(QWidget, Ui_FindFileNameDialog): """ Class implementing a dialog to search for files. The occurrences found are displayed in a QTreeWidget showing the filename and the pathname. The file will be opened upon a double click onto the respective entry of the list. @signal sourceFile(string) emitted to open a file in the editor @signal designerFile(string) emitted to open a Qt-Designer file """ def __init__(self, project, parent = None): """ Constructor @param project reference to the project object @param parent parent widget of this dialog (QWidget) """ QWidget.__init__(self, parent) self.setupUi(self) self.searchDirCompleter = E4DirCompleter(self.searchDirEdit) self.fileList.headerItem().setText(self.fileList.columnCount(), "") self.stopButton = \ self.buttonBox.addButton(self.trUtf8("Stop"), QDialogButtonBox.ActionRole) self.stopButton.setToolTip(self.trUtf8("Press to stop the search")) self.stopButton.setEnabled(False) self.buttonBox.button(QDialogButtonBox.Open).setToolTip(\ self.trUtf8("Opens the selected file")) self.buttonBox.button(QDialogButtonBox.Open).setEnabled(False) self.project = project self.extsepLabel.setText(os.extsep) self.shouldStop = False def on_buttonBox_clicked(self, button): """ Private slot called by a button of the button box clicked. @param button button that was clicked (QAbstractButton) """ if button == self.stopButton: self.shouldStop = True elif button == self.buttonBox.button(QDialogButtonBox.Open): self.__openFile() def __openFile(self, itm=None): """ Private slot to open a file. It emits the signal sourceFile or designerFile depending on the file extension. @param itm item to be opened (QTreeWidgetItem) """ if itm is None: itm = self.fileList.currentItem() if itm is not None: fileName = unicode(itm.text(0)) filePath = unicode(itm.text(1)) if fileName.endswith('.ui'): self.emit(SIGNAL('designerFile'), os.path.join(filePath, fileName)) else: self.emit(SIGNAL('sourceFile'), os.path.join(filePath, fileName)) def __searchFile(self): """ Private slot to handle the search. """ fileName = unicode(self.fileNameEdit.text()) if not fileName: self.fileList.clear() return fileExt = unicode(self.fileExtEdit.text()) if not fileExt and Utilities.isWindowsPlatform(): self.fileList.clear() return patternFormat = fileExt and "%s%s%s*" or "%s*%s%s" fileNamePattern = patternFormat % (fileName, os.extsep, fileExt and fileExt or '*') searchPaths = [] if self.searchDirCheckBox.isChecked() and \ not self.searchDirEdit.text().isEmpty(): searchPaths.append(unicode(self.searchDirEdit.text())) if self.projectCheckBox.isChecked(): searchPaths.append(self.project.ppath) if self.syspathCheckBox.isChecked(): searchPaths.extend(sys.path) found = False self.fileList.clear() locations = {} self.shouldStop = False self.stopButton.setEnabled(True) QApplication.processEvents() for path in searchPaths: if os.path.isdir(path): files = direntries(path, True, fileNamePattern, False, self.checkStop) if files: found = True for file in files: fp, fn = os.path.split(file) if locations.has_key(fn): if fp in locations[fn]: continue else: locations[fn].append(fp) else: locations[fn] = [fp] QTreeWidgetItem(self.fileList, QStringList() << fn << fp) QApplication.processEvents() del locations self.stopButton.setEnabled(False) self.fileList.header().resizeSections(QHeaderView.ResizeToContents) self.fileList.header().setStretchLastSection(True) if found: self.fileList.setCurrentItem(self.fileList.topLevelItem(0)) def checkStop(self): """ Public method to check, if the search should be stopped. @return flag indicating the search should be stopped (boolean) """ QApplication.processEvents() return self.shouldStop def on_fileNameEdit_textChanged(self, text): """ Private slot to handle the textChanged signal of the file name edit. @param text (ignored) """ self.__searchFile() def on_fileExtEdit_textChanged(self, text): """ Private slot to handle the textChanged signal of the file extension edit. @param text (ignored) """ self.__searchFile() def on_searchDirEdit_textChanged(self, text): """ Private slot to handle the textChanged signal of the search directory edit. @param text (ignored) """ self.searchDirCheckBox.setEnabled(not text.isEmpty()) if self.searchDirCheckBox.isChecked(): self.__searchFile() @pyqtSignature("") def on_searchDirButton_clicked(self): """ Private slot to handle the clicked signal of the search directory selection button. """ searchDir = QFileDialog.getExistingDirectory(\ None, self.trUtf8("Select search directory"), self.searchDirEdit.text(), QFileDialog.Options(QFileDialog.ShowDirsOnly)) if not searchDir.isEmpty(): self.searchDirEdit.setText(Utilities.toNativeSeparators(searchDir)) def on_searchDirCheckBox_toggled(self, checked): """ Private slot to handle the toggled signal of the search directory checkbox. @param checked flag indicating the state of the checkbox (boolean) """ if not self.searchDirEdit.text().isEmpty(): self.__searchFile() def on_projectCheckBox_toggled(self, checked): """ Private slot to handle the toggled signal of the project checkbox. @param checked flag indicating the state of the checkbox (boolean) """ self.__searchFile() def on_syspathCheckBox_toggled(self, checked): """ Private slot to handle the toggled signal of the sys.path checkbox. @param checked flag indicating the state of the checkbox (boolean) """ self.__searchFile() def on_fileList_itemActivated(self, itm, column): """ Private slot to handle the double click on a file item. It emits the signal sourceFile or designerFile depending on the file extension. @param itm the double clicked listview item (QTreeWidgetItem) @param column column that was double clicked (integer) (ignored) """ self.__openFile(itm) def on_fileList_currentItemChanged(self, current, previous): """ Private slot handling a change of the current item. @param current current item (QTreeWidgetItem) @param previous prevoius current item (QTreeWidgetItem) """ self.buttonBox.button(QDialogButtonBox.Open).setEnabled(current is not None) def show(self): """ Overwritten method to enable/disable the project checkbox. """ if self.project and self.project.isOpen(): self.projectCheckBox.setEnabled(True) self.projectCheckBox.setChecked(True) else: self.projectCheckBox.setEnabled(False) self.projectCheckBox.setChecked(False) self.fileNameEdit.selectAll() self.fileNameEdit.setFocus() QWidget.show(self) eric4-4.5.18/eric/UI/PaxHeaders.8617/DiffDialog.ui0000644000175000001440000000007311666702432017370 xustar000000000000000029 atime=1389081084.03572438 30 ctime=1389081086.309724333 eric4-4.5.18/eric/UI/DiffDialog.ui0000644000175000001440000001147011666702432017121 0ustar00detlevusers00000000000000 DiffDialog 0 0 750 600 File Differences File &1: file1Edit Enter the name of the first file Press to select the file via a file selection dialog ... File &2: file1Edit Enter the name of the second file Press to select the file via a file selection dialog ... Select to generate a unified diff &Unified Diff Alt+U true Select to generate a context diff Co&ntext Diff Alt+N Qt::Horizontal QSizePolicy::Expanding 40 20 QTextEdit::NoWrap true 8 false Qt::Horizontal QDialogButtonBox::Close file1Edit file1Button file2Edit file2Button unifiedRadioButton contextRadioButton contents buttonBox buttonBox rejected() DiffDialog close() 80 578 82 594 eric4-4.5.18/eric/UI/PaxHeaders.8617/FindFileNameDialog.ui0000644000175000001440000000007411072435341020773 xustar000000000000000030 atime=1389081084.036724381 30 ctime=1389081086.309724333 eric4-4.5.18/eric/UI/FindFileNameDialog.ui0000644000175000001440000001160611072435341020524 0ustar00detlevusers00000000000000 FindFileNameDialog 0 0 599 478 Find File Enter filename (? matches any single character, * matches everything) 9 0 Enter file name to search for . 1 0 Enter file extension to search for false Enabled to include the entered directory into the search Search Path: Enter the directory, the file should be searched in Press to select the directory, the file should be searched in ... Select to search in the project path Search in &project Alt+P Select to search in sys.path Search in &sys.path Alt+S false true Filename Path Qt::Horizontal QDialogButtonBox::Close|QDialogButtonBox::Open fileNameEdit fileExtEdit searchDirEdit searchDirButton searchDirCheckBox projectCheckBox syspathCheckBox fileList buttonBox rejected() FindFileNameDialog close() 40 458 41 477 eric4-4.5.18/eric/UI/PaxHeaders.8617/UserInterface.py0000644000175000001440000000013212261012651020133 xustar000000000000000030 mtime=1388582313.297093529 30 atime=1389081084.036724381 30 ctime=1389081086.309724333 eric4-4.5.18/eric/UI/UserInterface.py0000644000175000001440000073101512261012651017674 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2002 - 2014 Detlev Offenbach # """ Module implementing the main user interface. """ import os import sys import cStringIO import logging from PyQt4.QtCore import * from PyQt4.QtGui import * from PyQt4.Qsci import QSCINTILLA_VERSION_STR from PyQt4.QtNetwork import QNetworkProxyFactory, QNetworkAccessManager, \ QNetworkRequest, QNetworkReply try: from PyQt4.QtNetwork import QSslError SSL_AVAILABLE = True except ImportError: SSL_AVAILABLE = False from KdeQt import KQFileDialog, KQMessageBox from KdeQt.KQMainWindow import KQMainWindow from KdeQt.KQProgressDialog import KQProgressDialog from KdeQt.KQApplication import e4App import KdeQt from Debugger.DebugUI import DebugUI from Debugger.DebugServer import DebugServer from Debugger.DebugViewer import DebugViewer from Debugger.DebugClientCapabilities import HasUnittest from QScintilla.Shell import Shell from QScintilla.MiniEditor import MiniEditor from QScintilla.SpellChecker import SpellChecker from PyUnit.UnittestDialog import UnittestDialog from Helpviewer.HelpWindow import HelpWindow from Preferences.ConfigurationDialog import ConfigurationDialog from Preferences.ViewProfileDialog import ViewProfileDialog from Preferences.ShortcutsDialog import ShortcutsDialog from Preferences.ToolConfigurationDialog import ToolConfigurationDialog from Preferences.ToolGroupConfigurationDialog import ToolGroupConfigurationDialog from Preferences.ProgramsDialog import ProgramsDialog from Preferences import Shortcuts from PluginManager.PluginManager import PluginManager from PluginManager.PluginInfoDialog import PluginInfoDialog from PluginManager.PluginInstallDialog import PluginInstallDialog from PluginManager.PluginUninstallDialog import PluginUninstallDialog from PluginManager.PluginRepositoryDialog import PluginRepositoryDialog from Project.Project import Project from Project.ProjectBrowser import ProjectBrowser from MultiProject.MultiProject import MultiProject from MultiProject.MultiProjectBrowser import MultiProjectBrowser from Tasks.TaskViewer import TaskViewer from Templates.TemplateViewer import TemplateViewer from Browser import Browser from Info import * import Config from EmailDialog import EmailDialog from DiffDialog import DiffDialog from CompareDialog import CompareDialog from LogView import LogViewer from FindFileDialog import FindFileDialog from FindFileNameDialog import FindFileNameDialog from AuthenticationDialog import AuthenticationDialog from E4Gui.E4SingleApplication import E4SingleApplicationServer from E4Gui.E4Action import E4Action, createActionGroup from E4Gui.E4ToolBarManager import E4ToolBarManager from E4Gui.E4ToolBarDialog import E4ToolBarDialog from E4Gui.E4SqueezeLabels import E4SqueezeLabelPath from E4Gui.E4ToolBox import E4VerticalToolBox, E4HorizontalToolBox from E4Gui.E4SideBar import E4SideBar from E4Gui.E4TabWidget import E4TabWidget from VCS.StatusMonitorLed import StatusMonitorLed import Preferences import ViewManager import Utilities from Graphics.PixmapDiagram import PixmapDiagram from Graphics.SvgDiagram import SvgDiagram import UI.PixmapCache from E4XML.XMLUtilities import make_parser from E4XML.XMLErrorHandler import XMLErrorHandler, XMLFatalParseError from E4XML.XMLEntityResolver import XMLEntityResolver from E4XML.TasksHandler import TasksHandler from E4XML.TasksWriter import TasksWriter from E4XML.TemplatesHandler import TemplatesHandler from E4XML.TemplatesWriter import TemplatesWriter from E4XML.SessionWriter import SessionWriter from E4XML.SessionHandler import SessionHandler from E4Network.E4NetworkProxyFactory import E4NetworkProxyFactory from IconEditor.IconEditorWindow import IconEditorWindow from eric4config import getConfig class Redirector(QObject): """ Helper class used to redirect stdout and stderr to the log window @signal appendStderr(string) emitted to write data to stderr logger @signal appendStdout(string) emitted to write data to stdout logger """ def __init__(self, stderr): """ Constructor @param stderr flag indicating stderr is being redirected """ QObject.__init__(self) self.stderr = stderr self.buffer = '' def __nWrite(self, n): """ Private method used to write data. @param n max number of bytes to write """ if n: line = self.buffer[:n] if self.stderr: self.emit(SIGNAL('appendStderr'), line) else: self.emit(SIGNAL('appendStdout'), line) self.buffer = self.buffer[n:] def __bufferedWrite(self): """ Private method returning number of characters to write. @return number of characters buffered or length of buffered line """ return self.buffer.rfind('\n') + 1 def flush(self): """ Public method used to flush the buffered data. """ self.__nWrite(len(self.buffer)) def write(self, s): """ Public method used to write data. @param s data to be written (it must support the str-method) """ self.buffer = self.buffer + unicode(s) self.__nWrite(self.__bufferedWrite()) class UserInterface(KQMainWindow): """ Class implementing the main user interface. @signal appendStderr(QString) emitted to write data to stderr logger @signal appendStdout(QString) emitted to write data to stdout logger @signal preferencesChanged() emitted after the preferences were changed @signal reloadAPIs() emitted to reload the api information @signal showMenu(string, QMenu) emitted when a menu is about to be shown. The name of the menu and a reference to the menu are given. """ maxFilePathLen = 100 maxSbFilePathLen = 150 maxMenuFilePathLen = 75 def __init__(self, app, locale, splash, plugin, noOpenAtStartup, restartArguments): """ Constructor @param app reference to the application object (KQApplication) @param locale locale to be used by the UI (string) @param splash reference to the splashscreen (UI.SplashScreen.SplashScreen) @param plugin filename of a plugin to be loaded (used for plugin development) @param noOpenAtStartup flag indicating that the open at startup option should not be executed (boolean) @param restartArguments list of command line parameters to be used for a restart (list of strings) """ KQMainWindow.__init__(self) self.__restartArgs = restartArguments[:] self.defaultStyleName = QApplication.style().objectName() self.__setStyle() self.maxEditorPathLen = Preferences.getUI("CaptionFilenameLength") self.locale = locale self.__noOpenAtStartup = noOpenAtStartup self.layout, self.embeddedShell, self.embeddedFileBrowser = \ Preferences.getUILayout() self.passiveMode = Preferences.getDebugger("PassiveDbgEnabled") g = Preferences.getGeometry("MainGeometry") if g.isEmpty(): s = QSize(1280, 1024) self.resize(s) else: self.restoreGeometry(g) self.__startup = True self.__proxyFactory = E4NetworkProxyFactory() QNetworkProxyFactory.setApplicationProxyFactory(self.__proxyFactory) self.capProject = "" self.capEditor = "" self.captionShowsFilename = Preferences.getUI("CaptionShowsFilename") QApplication.setWindowIcon(UI.PixmapCache.getIcon("eric.png")) self.setWindowIcon(UI.PixmapCache.getIcon("eric.png")) self.__setWindowCaption() # load the view profiles self.profiles = Preferences.getUI("ViewProfiles") # Generate the debug server object debugServer = DebugServer() # Generate an empty project object and multi project object self.project = Project(self) self.multiProject = MultiProject(self.project, self) splash.showMessage(self.trUtf8("Initializing Plugin Manager...")) # Initialize the Plugin Manager (Plugins are initialized later self.pluginManager = PluginManager(self, develPlugin = plugin) splash.showMessage(self.trUtf8("Generating Main User Interface...")) # Create the main window now so that we can connect QActions to it. logging.debug("Creating Layout...") self.__createLayout(debugServer) # Generate the debugger part of the ui logging.debug("Creating Debugger UI...") self.debuggerUI = DebugUI(self, self.viewmanager, debugServer, self.debugViewer, self.project) self.debugViewer.setDebugger(self.debuggerUI) self.shell.setDebuggerUI(self.debuggerUI) # Generate the redirection helpers self.stdout = Redirector(False) self.stderr = Redirector(True) # Genrae the programs dialog logging.debug("Creating Programs Dialog...") self.programsDialog = ProgramsDialog(self) # Generate the shortcuts configuration dialog logging.debug("Creating Shortcuts Dialog...") self.shortcutsDialog = ShortcutsDialog(self, 'Shortcuts') # now setup the connections splash.showMessage(self.trUtf8("Setting up connections...")) self.connect(app, SIGNAL("focusChanged(QWidget*, QWidget*)"), self.viewmanager.appFocusChanged) self.connect(self.browser, SIGNAL('sourceFile'), self.viewmanager.openSourceFile) self.connect(self.browser, SIGNAL('designerFile'), self.__designer) self.connect(self.browser, SIGNAL('linguistFile'), self.__linguist4) self.connect(self.browser, SIGNAL('projectFile'), self.project.openProject) self.connect(self.browser, SIGNAL('multiProjectFile'), self.multiProject.openMultiProject) self.connect(self.browser, SIGNAL('pixmapEditFile'), self.__editPixmap) self.connect(self.browser, SIGNAL('pixmapFile'), self.__showPixmap) self.connect(self.browser, SIGNAL('svgFile'), self.__showSvg) self.connect(self.browser, SIGNAL('unittestOpen'), self.__unittestScript) self.connect(self.browser, SIGNAL('trpreview'), self.__TRPreviewer) self.connect(self.debugViewer.exceptionLogger, SIGNAL('sourceFile'), self.viewmanager.openSourceFile) self.connect(self.debugViewer, SIGNAL('sourceFile'), self.viewmanager.showDebugSource) self.connect(self.taskViewer, SIGNAL('displayFile'), self.viewmanager.openSourceFile) self.connect(self.projectBrowser.psBrowser, SIGNAL('sourceFile'), self.viewmanager.openSourceFile) self.connect(self.projectBrowser.psBrowser, SIGNAL('closeSourceWindow'), self.viewmanager.closeWindow) self.connect(self.projectBrowser.psBrowser, SIGNAL('unittestOpen'), self.__unittestScript) self.connect(self.projectBrowser.pfBrowser, SIGNAL('designerFile'), self.__designer) self.connect(self.projectBrowser.pfBrowser, SIGNAL('sourceFile'), self.viewmanager.openSourceFile) self.connect(self.projectBrowser.pfBrowser, SIGNAL('uipreview'), self.__UIPreviewer) self.connect(self.projectBrowser.pfBrowser, SIGNAL('trpreview'), self.__TRPreviewer) self.connect(self.projectBrowser.pfBrowser, SIGNAL('closeSourceWindow'), self.viewmanager.closeWindow) self.connect(self.projectBrowser.pfBrowser, SIGNAL('appendStdout'), self.appendToStdout) self.connect(self.projectBrowser.pfBrowser, SIGNAL('appendStderr'), self.appendToStderr) self.connect(self.projectBrowser.prBrowser, SIGNAL('sourceFile'), self.viewmanager.openSourceFile) self.connect(self.projectBrowser.prBrowser, SIGNAL('closeSourceWindow'), self.viewmanager.closeWindow) self.connect(self.projectBrowser.prBrowser, SIGNAL('appendStdout'), self.appendToStdout) self.connect(self.projectBrowser.prBrowser, SIGNAL('appendStderr'), self.appendToStderr) self.connect(self.projectBrowser.ptBrowser, SIGNAL('linguistFile'), self.__linguist4) self.connect(self.projectBrowser.ptBrowser, SIGNAL('sourceFile'), self.viewmanager.openSourceFile) self.connect(self.projectBrowser.ptBrowser, SIGNAL('trpreview'), self.__TRPreviewer) self.connect(self.projectBrowser.ptBrowser, SIGNAL('closeSourceWindow'), self.viewmanager.closeWindow) self.connect(self.projectBrowser.ptBrowser, SIGNAL('appendStdout'), self.appendToStdout) self.connect(self.projectBrowser.ptBrowser, SIGNAL('appendStderr'), self.appendToStderr) self.connect(self.projectBrowser.piBrowser, SIGNAL('sourceFile'), self.viewmanager.openSourceFile) self.connect(self.projectBrowser.piBrowser, SIGNAL('closeSourceWindow'), self.viewmanager.closeWindow) self.connect(self.projectBrowser.piBrowser, SIGNAL('appendStdout'), self.appendToStdout) self.connect(self.projectBrowser.piBrowser, SIGNAL('appendStderr'), self.appendToStderr) self.connect(self.projectBrowser.poBrowser, SIGNAL('sourceFile'), self.viewmanager.openSourceFile) self.connect(self.projectBrowser.poBrowser, SIGNAL('closeSourceWindow'), self.viewmanager.closeWindow) self.connect(self.projectBrowser.poBrowser, SIGNAL('pixmapEditFile'), self.__editPixmap) self.connect(self.projectBrowser.poBrowser, SIGNAL('pixmapFile'), self.__showPixmap) self.connect(self.projectBrowser.poBrowser, SIGNAL('svgFile'), self.__showSvg) self.connect(self.project, SIGNAL('sourceFile'), self.viewmanager.openSourceFile) self.connect(self.project, SIGNAL('projectOpened'), self.viewmanager.projectOpened) self.connect(self.project, SIGNAL('projectClosed'), self.viewmanager.projectClosed) self.connect(self.project, SIGNAL('projectFileRenamed'), self.viewmanager.projectFileRenamed) self.connect(self.project, SIGNAL('lexerAssociationsChanged'), self.viewmanager.projectLexerAssociationsChanged) self.connect(self.project, SIGNAL('newProject'), self.__newProject) self.connect(self.project, SIGNAL('projectOpened'), self.__projectOpened) self.connect(self.project, SIGNAL('projectOpened'), self.__activateProjectBrowser) self.connect(self.project, SIGNAL('projectClosed'), self.__projectClosed) self.connect(self.multiProject, SIGNAL("multiProjectOpened"), self.__activateMultiProjectBrowser) self.connect(self.debuggerUI, SIGNAL('resetUI'), self.viewmanager.handleResetUI) self.connect(self.debuggerUI, SIGNAL('resetUI'), self.debugViewer.handleResetUI) self.connect(self.debuggerUI, SIGNAL('resetUI'), self.__setEditProfile) self.connect(self.debuggerUI, SIGNAL('debuggingStarted'), self.browser.handleProgramChange) self.connect(self.debuggerUI, SIGNAL('debuggingStarted'), self.debugViewer.exceptionLogger.debuggingStarted) self.connect(self.debuggerUI, SIGNAL('debuggingStarted'), self.debugViewer.handleDebuggingStarted) self.connect(self.debuggerUI, SIGNAL('debuggingStarted'), self.__programChange) self.connect(self.debuggerUI, SIGNAL('debuggingStarted'), self.__debuggingStarted) self.connect(self.debuggerUI, SIGNAL('compileForms'), self.projectBrowser.pfBrowser.compileChangedForms) self.connect(self.debuggerUI, SIGNAL('compileResources'), self.projectBrowser.prBrowser.compileChangedResources) self.connect(self.debuggerUI, SIGNAL('appendStdout'), self.appendToStdout) self.connect(debugServer, SIGNAL('passiveDebugStarted'), self.debugViewer.exceptionLogger.debuggingStarted) self.connect(debugServer, SIGNAL('passiveDebugStarted'), self.debugViewer.handleDebuggingStarted) self.connect(debugServer, SIGNAL('clientException'), self.debugViewer.exceptionLogger.addException) self.connect(debugServer, SIGNAL('clientLine'), self.debugViewer.breakpointViewer.highlightBreakpoint) self.connect(debugServer, SIGNAL('clientProcessStdout'), self.appendToStdout) self.connect(debugServer, SIGNAL('clientProcessStderr'), self.appendToStderr) self.connect(self.stdout, SIGNAL('appendStdout'), self.appendToStdout) self.connect(self.stderr, SIGNAL('appendStderr'), self.appendToStderr) self.connect(self, SIGNAL('preferencesChanged'), self.viewmanager.preferencesChanged) self.connect(self, SIGNAL('reloadAPIs'), self.viewmanager.getAPIsManager().reloadAPIs) self.connect(self, SIGNAL('preferencesChanged'), self.logViewer.preferencesChanged) self.connect(self, SIGNAL('appendStdout'), self.logViewer.appendToStdout) self.connect(self, SIGNAL('appendStderr'), self.logViewer.appendToStderr) self.connect(self, SIGNAL('preferencesChanged'), self.shell.handlePreferencesChanged) self.connect(self, SIGNAL('preferencesChanged'), self.project.handlePreferencesChanged) self.connect(self, SIGNAL('preferencesChanged'), self.projectBrowser.handlePreferencesChanged) self.connect(self, SIGNAL('preferencesChanged'), self.projectBrowser.psBrowser.handlePreferencesChanged) self.connect(self, SIGNAL('preferencesChanged'), self.projectBrowser.pfBrowser.handlePreferencesChanged) self.connect(self, SIGNAL('preferencesChanged'), self.projectBrowser.prBrowser.handlePreferencesChanged) self.connect(self, SIGNAL('preferencesChanged'), self.projectBrowser.ptBrowser.handlePreferencesChanged) self.connect(self, SIGNAL('preferencesChanged'), self.projectBrowser.piBrowser.handlePreferencesChanged) self.connect(self, SIGNAL('preferencesChanged'), self.projectBrowser.poBrowser.handlePreferencesChanged) self.connect(self, SIGNAL('preferencesChanged'), self.browser.handlePreferencesChanged) self.connect(self, SIGNAL('preferencesChanged'), self.taskViewer.handlePreferencesChanged) self.connect(self, SIGNAL('preferencesChanged'), self.pluginManager.preferencesChanged) self.connect(self, SIGNAL('preferencesChanged'), debugServer.preferencesChanged) self.connect(self, SIGNAL('preferencesChanged'), self.debugViewer.preferencesChanged) self.connect(self.viewmanager, SIGNAL('editorSaved'), self.project.repopulateItem) self.connect(self.viewmanager, SIGNAL('lastEditorClosed'), self.__lastEditorClosed) self.connect(self.viewmanager, SIGNAL('editorOpened'), self.__editorOpened) self.connect(self.viewmanager, SIGNAL('changeCaption'), self.__setWindowCaption) self.connect(self.viewmanager, SIGNAL('checkActions'), self.__checkActions) self.connect(self.viewmanager, SIGNAL('editorChanged'), self.projectBrowser.handleEditorChanged) # Generate the unittest dialog self.unittestDialog = UnittestDialog(None, self.debuggerUI.debugServer, self, fromEric = True) self.connect(self.unittestDialog, SIGNAL('unittestFile'), self.viewmanager.setFileLine) # Generate the find in project files dialog self.findFilesDialog = FindFileDialog(self.project) self.connect(self.findFilesDialog, SIGNAL('sourceFile'), self.viewmanager.openSourceFile) self.connect(self.findFilesDialog, SIGNAL('designerFile'), self.__designer) self.replaceFilesDialog = FindFileDialog(self.project, replaceMode = True) self.connect(self.replaceFilesDialog, SIGNAL('sourceFile'), self.viewmanager.openSourceFile) self.connect(self.replaceFilesDialog, SIGNAL('designerFile'), self.__designer) # generate the find file dialog self.findFileNameDialog = FindFileNameDialog(self.project) self.connect(self.findFileNameDialog, SIGNAL('sourceFile'), self.viewmanager.openSourceFile) self.connect(self.findFileNameDialog, SIGNAL('designerFile'), self.__designer) # generate the diff dialogs self.diffDlg = DiffDialog() self.compareDlg = CompareDialog() # create the toolbar manager object self.toolbarManager = E4ToolBarManager(self, self) self.toolbarManager.setMainWindow(self) # Initialize the tool groups and list of started tools splash.showMessage(self.trUtf8("Initializing Tools...")) self.toolGroups, self.currentToolGroup = Preferences.readToolGroups() self.toolProcs = [] self.__initExternalToolsActions() # create a dummy help window for shortcuts handling self.dummyHelpViewer = HelpWindow(None, '.', None, 'help viewer', True, True) # register all relevant objects splash.showMessage(self.trUtf8("Registering Objects...")) e4App().registerObject("UserInterface", self) e4App().registerObject("DebugUI", self.debuggerUI) e4App().registerObject("DebugServer", debugServer) e4App().registerObject("ViewManager", self.viewmanager) e4App().registerObject("Project", self.project) e4App().registerObject("ProjectBrowser", self.projectBrowser) e4App().registerObject("MultiProject", self.multiProject) e4App().registerObject("TaskViewer", self.taskViewer) e4App().registerObject("TemplateViewer", self.templateViewer) e4App().registerObject("Shell", self.shell) e4App().registerObject("FindFilesDialog", self.findFilesDialog) e4App().registerObject("ReplaceFilesDialog", self.replaceFilesDialog) e4App().registerObject("DummyHelpViewer", self.dummyHelpViewer) e4App().registerObject("PluginManager", self.pluginManager) e4App().registerObject("ToolbarManager", self.toolbarManager) # Initialize the actions, menus, toolbars and statusbar splash.showMessage(self.trUtf8("Initializing Actions...")) self.__initActions() splash.showMessage(self.trUtf8("Initializing Menus...")) self.__initMenus() splash.showMessage(self.trUtf8("Initializing Toolbars...")) self.__initToolbars() splash.showMessage(self.trUtf8("Initializing Statusbar...")) self.__initStatusbar() # Initialise the instance variables. self.currentProg = None self.isProg = False self.utEditorOpen = False self.utProjectOpen = False self.inDragDrop = False self.setAcceptDrops(True) self.currentProfile = None self.shutdownCalled = False self.inCloseEevent = False # now redirect stdout and stderr # TODO: release - reenable redirection ## sys.stdout = self.stdout ## sys.stderr = self.stderr # now fire up the single application server if Preferences.getUI("SingleApplicationMode"): splash.showMessage(self.trUtf8("Initializing Single Application Server...")) self.SAServer = E4SingleApplicationServer() else: self.SAServer = None # now finalize the plugin manager setup self.pluginManager.finalizeSetup() # now activate plugins having autoload set to True splash.showMessage(self.trUtf8("Activating Plugins...")) self.pluginManager.activatePlugins() # now read the keyboard shortcuts for all the actions Shortcuts.readShortcuts() # restore toolbar manager state splash.showMessage(self.trUtf8("Restoring Toolbarmanager...")) self.toolbarManager.restoreState(Preferences.getUI("ToolbarManagerState")) # now activate the initial view profile splash.showMessage(self.trUtf8("Setting View Profile...")) self.__setEditProfile() # now read the saved tasks splash.showMessage(self.trUtf8("Reading Tasks...")) self.__readTasks() # now read the saved templates splash.showMessage(self.trUtf8("Reading Templates...")) self.templateViewer.readTemplates() # now start the debug client splash.showMessage(self.trUtf8("Starting Debugger...")) debugServer.startClient(False) # attributes for the network objects self.__networkManager = QNetworkAccessManager(self) self.connect(self.__networkManager, SIGNAL('proxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*)'), self.__proxyAuthenticationRequired) if SSL_AVAILABLE: self.connect(self.__networkManager, SIGNAL('sslErrors(QNetworkReply *, const QList &)'), self.__sslErrors) self.__replies = [] # attribute for the help window self.helpWindow = None # list of web addresses serving the versions file self.__httpAlternatives = Preferences.getUI("VersionsUrls") self.__inVersionCheck = False self.__versionCheckProgress = None # set spellchecker defaults SpellChecker.setDefaultLanguage( unicode(Preferences.getEditor("SpellCheckingDefaultLanguage"))) def __setStyle(self): """ Private slot to set the style of the interface. """ # step 1: set the style style = None styleName = Preferences.getUI("Style") if styleName != "System" and styleName in QStyleFactory.keys(): style = QStyleFactory.create(styleName) if style is None: style = QStyleFactory.create(self.defaultStyleName) if style is not None: QApplication.setStyle(style) # step 2: set a style sheet if Preferences.getUI("UseKDEDialogs") and not sys.e4nokde: styleSheet = "" else: styleSheetFile = unicode(Preferences.getUI("StyleSheet")) if styleSheetFile: try: f = open(styleSheetFile, "rb") styleSheet = f.read() f.close() except IOError, msg: KQMessageBox.warning(None, self.trUtf8("Loading Style Sheet"), self.trUtf8("""

    The Qt Style Sheet file %1 could""" """ not be read.
    Reason: %2

    """)\ .arg(styleSheetFile).arg(str(msg)), QMessageBox.StandardButtons(\ QMessageBox.Ok)) return else: styleSheet = "" e4App().setStyleSheet(styleSheet) def __createLayout(self, debugServer): """ Private method to create the layout of the various windows. @param debugServer reference to the debug server object """ # Create the view manager depending on the configuration setting logging.debug("Creating Viewmanager...") self.viewmanager = \ ViewManager.factory(self, self, debugServer, self.pluginManager) centralWidget = QWidget() layout = QVBoxLayout() layout.setContentsMargins(1, 1, 1, 1) layout.addWidget(self.viewmanager) layout.addWidget(self.viewmanager.searchDlg) layout.addWidget(self.viewmanager.replaceDlg) self.viewmanager.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Expanding) centralWidget.setLayout(layout) self.setCentralWidget(centralWidget) self.viewmanager.searchDlg.hide() self.viewmanager.replaceDlg.hide() # Create layout with movable dock windows if self.layout == "DockWindows": logging.debug("Creating dockable windows...") self.__createDockWindowsLayout(debugServer) # Create layout with toolbox windows embedded in dock windows elif self.layout == "Toolboxes": logging.debug("Creating toolboxes...") self.__createToolboxesLayout(debugServer) # Create layout with sidebar windows embedded in dock windows elif self.layout == "Sidebars": logging.debug("Creating sidebars...") self.__createSidebarsLayout(debugServer) # Create layout with floating windows elif self.layout == "FloatingWindows": logging.debug("Creating floating windows...") self.__createFloatingWindowsLayout(debugServer) else: raise RuntimeError("wrong layout type given (%s)" % self.layout) logging.debug("Created Layout") def __createFloatingWindowsLayout(self, debugServer): """ Private method to create the FloatingWindows layout. @param debugServer reference to the debug server object """ # Create the project browser self.projectBrowser = ProjectBrowser(self.project, None, embeddedBrowser=(self.embeddedFileBrowser == 2)) self.projectBrowser.setWindowTitle(self.trUtf8("Project-Viewer")) # Create the multi project browser self.multiProjectBrowser = MultiProjectBrowser(self.multiProject) self.multiProjectBrowser.setWindowTitle(self.trUtf8("Multiproject-Viewer")) # Create the debug viewer maybe without the embedded shell self.debugViewer = DebugViewer(debugServer, False, self.viewmanager, None, embeddedShell=self.embeddedShell, embeddedBrowser=(self.embeddedFileBrowser == 1)) self.debugViewer.setWindowTitle(self.trUtf8("Debug-Viewer")) # Create the log viewer part of the user interface self.logViewer = LogViewer(None) self.logViewer.setWindowTitle(self.trUtf8("Log-Viewer")) # Create the task viewer part of the user interface self.taskViewer = TaskViewer(None, self.project) self.taskViewer.setWindowTitle(self.trUtf8("Task-Viewer")) # Create the template viewer part of the user interface self.templateViewer = TemplateViewer(None, self.viewmanager) self.templateViewer.setWindowTitle(self.trUtf8("Template-Viewer")) self.windows = [self.projectBrowser, None, self.debugViewer, None, self.logViewer, self.taskViewer, self.templateViewer, self.multiProjectBrowser, None] if self.embeddedShell: self.shell = self.debugViewer.shell else: # Create the shell self.shell = Shell(debugServer, self.viewmanager, None) self.windows[3] = self.shell if self.embeddedFileBrowser == 0: # separate window # Create the file browser self.browser = Browser(None) self.browser.setWindowTitle(self.trUtf8("File-Browser")) self.windows[1] = self.browser elif self.embeddedFileBrowser == 1: # embedded in debug browser self.browser = self.debugViewer.browser else: # embedded in project browser self.browser = self.projectBrowser.fileBrowser def __createDockWindowsLayout(self, debugServer): """ Private method to create the DockWindows layout. @param debugServer reference to the debug server object """ # Create the project browser self.projectBrowserDock = self.__createDockWindow("ProjectBrowserDock") self.projectBrowser = ProjectBrowser(self.project, self.projectBrowserDock, embeddedBrowser=(self.embeddedFileBrowser == 2)) self.__setupDockWindow(self.projectBrowserDock, Qt.LeftDockWidgetArea, self.projectBrowser, self.trUtf8("Project-Viewer")) # Create the multi project browser self.multiProjectBrowserDock = \ self.__createDockWindow("MultiProjectBrowserDock") self.multiProjectBrowser = MultiProjectBrowser(self.multiProject) self.__setupDockWindow(self.multiProjectBrowserDock, Qt.LeftDockWidgetArea, self.multiProjectBrowser, self.trUtf8("Multiproject-Viewer")) # Create the debug viewer maybe without the embedded shell self.debugViewerDock = self.__createDockWindow("DebugViewerDock") self.debugViewer = DebugViewer(debugServer, True, self.viewmanager, self.debugViewerDock, embeddedShell=self.embeddedShell, embeddedBrowser=(self.embeddedFileBrowser == 1)) self.__setupDockWindow(self.debugViewerDock, Qt.RightDockWidgetArea, self.debugViewer, self.trUtf8("Debug-Viewer")) # Create the log viewer part of the user interface self.logViewerDock = self.__createDockWindow("LogViewerDock") self.logViewer = LogViewer(self.logViewerDock) self.__setupDockWindow(self.logViewerDock, Qt.BottomDockWidgetArea, self.logViewer, self.trUtf8("Log-Viewer")) # Create the task viewer part of the user interface self.taskViewerDock = self.__createDockWindow("TaskViewerDock") self.taskViewer = TaskViewer(self.taskViewerDock, self.project) self.__setupDockWindow(self.taskViewerDock, Qt.BottomDockWidgetArea, self.taskViewer, self.trUtf8("Task-Viewer")) # Create the template viewer part of the user interface self.templateViewerDock = self.__createDockWindow("TemplateViewerDock") self.templateViewer = TemplateViewer(self.templateViewerDock, self.viewmanager) self.__setupDockWindow(self.templateViewerDock, Qt.RightDockWidgetArea, self.templateViewer, self.trUtf8("Template-Viewer")) self.windows = [self.projectBrowserDock, None, self.debugViewerDock, None, self.logViewerDock, self.taskViewerDock, self.templateViewerDock, self.multiProjectBrowserDock, None] if self.embeddedShell: self.shell = self.debugViewer.shell else: # Create the shell self.shellDock = self.__createDockWindow("ShellDock") self.shell = Shell(debugServer, self.viewmanager, self.shellDock) self.__setupDockWindow(self.shellDock, Qt.BottomDockWidgetArea, self.shell, self.trUtf8("Shell")) self.windows[3] = self.shellDock if self.embeddedFileBrowser == 0: # separate window # Create the file browser self.browserDock = self.__createDockWindow("BrowserDock") self.browser = Browser(self.browserDock) self.__setupDockWindow(self.browserDock, Qt.RightDockWidgetArea, self.browser, self.trUtf8("File-Browser")) self.windows[1] = self.browserDock elif self.embeddedFileBrowser == 1: # embedded in debug browser self.browser = self.debugViewer.browser else: # embedded in project browser self.browser = self.projectBrowser.fileBrowser def __createToolboxesLayout(self, debugServer): """ Private method to create the Toolboxes layout. @param debugServer reference to the debug server object """ # Create the vertical toolbox self.vToolboxDock = self.__createDockWindow("vToolboxDock") self.vToolbox = E4VerticalToolBox(self.vToolboxDock) self.__setupDockWindow(self.vToolboxDock, Qt.LeftDockWidgetArea, self.vToolbox, self.trUtf8("Vertical Toolbox")) # Create the horizontal toolbox self.hToolboxDock = self.__createDockWindow("hToolboxDock") self.hToolbox = E4HorizontalToolBox(self.hToolboxDock) self.__setupDockWindow(self.hToolboxDock, Qt.BottomDockWidgetArea, self.hToolbox, self.trUtf8("Horizontal Toolbox")) # Create the project browser self.projectBrowser = ProjectBrowser(self.project, None, embeddedBrowser=(self.embeddedFileBrowser == 2)) self.vToolbox.addItem(self.projectBrowser, UI.PixmapCache.getIcon("projectViewer.png"), self.trUtf8("Project-Viewer")) # Create the multi project browser self.multiProjectBrowser = MultiProjectBrowser(self.multiProject) self.vToolbox.addItem(self.multiProjectBrowser, UI.PixmapCache.getIcon("multiProjectViewer.png"), self.trUtf8("Multiproject-Viewer")) # Create the template viewer part of the user interface self.templateViewer = TemplateViewer(None, self.viewmanager) self.vToolbox.addItem(self.templateViewer, UI.PixmapCache.getIcon("templateViewer.png"), self.trUtf8("Template-Viewer")) # Create the debug viewer maybe without the embedded shell self.debugViewerDock = self.__createDockWindow("DebugViewerDock") self.debugViewer = DebugViewer(debugServer, True, self.viewmanager, self.debugViewerDock, embeddedShell=self.embeddedShell, embeddedBrowser=(self.embeddedFileBrowser == 1)) self.__setupDockWindow(self.debugViewerDock, Qt.RightDockWidgetArea, self.debugViewer, self.trUtf8("Debug-Viewer")) # Create the task viewer part of the user interface self.taskViewer = TaskViewer(None, self.project) self.hToolbox.addItem(self.taskViewer, UI.PixmapCache.getIcon("task.png"), self.trUtf8("Task-Viewer")) # Create the log viewer part of the user interface self.logViewer = LogViewer() self.hToolbox.addItem(self.logViewer, UI.PixmapCache.getIcon("logViewer.png"), self.trUtf8("Log-Viewer")) self.windows = [None, None, self.debugViewerDock, None, None, None, None, None, None] if self.embeddedShell: self.shell = self.debugViewer.shell else: # Create the shell self.shell = Shell(debugServer, self.viewmanager) self.hToolbox.insertItem(0, self.shell, UI.PixmapCache.getIcon("shell.png"), self.trUtf8("Shell")) if self.embeddedFileBrowser == 0: # separate window # Create the file browser self.browser = Browser() self.vToolbox.addItem(self.browser, UI.PixmapCache.getIcon("browser.png"), self.trUtf8("File-Browser")) elif self.embeddedFileBrowser == 1: # embedded in debug browser self.browser = self.debugViewer.browser else: # embedded in project browser self.browser = self.projectBrowser.fileBrowser self.hToolbox.setCurrentIndex(0) def __createSidebarsLayout(self, debugServer): """ Private method to create the Sidebars layout. @param debugServer reference to the debug server object """ delay = Preferences.getUI("SidebarDelay") # Create the left sidebar self.leftSidebar = E4SideBar(E4SideBar.West, delay) # Create the bottom sidebar self.bottomSidebar = E4SideBar(E4SideBar.South, delay) # Create the project browser logging.debug("Creating Project Browser...") self.projectBrowser = ProjectBrowser(self.project, None, embeddedBrowser=(self.embeddedFileBrowser == 2)) self.leftSidebar.addTab(self.projectBrowser, UI.PixmapCache.getIcon("projectViewer.png"), self.trUtf8("Project-Viewer")) # Create the multi project browser logging.debug("Creating Multiproject Browser...") self.multiProjectBrowser = MultiProjectBrowser(self.multiProject) self.leftSidebar.addTab(self.multiProjectBrowser, UI.PixmapCache.getIcon("multiProjectViewer.png"), self.trUtf8("Multiproject-Viewer")) # Create the template viewer part of the user interface logging.debug("Creating Template Viewer...") self.templateViewer = TemplateViewer(None, self.viewmanager) self.leftSidebar.addTab(self.templateViewer, UI.PixmapCache.getIcon("templateViewer.png"), self.trUtf8("Template-Viewer")) # Create the debug viewer maybe without the embedded shell logging.debug("Creating Debug Viewer...") self.debugViewerDock = self.__createDockWindow("DebugViewerDock") self.debugViewer = DebugViewer(debugServer, True, self.viewmanager, self.debugViewerDock, embeddedShell=self.embeddedShell, embeddedBrowser=(self.embeddedFileBrowser == 1)) self.__setupDockWindow(self.debugViewerDock, Qt.RightDockWidgetArea, self.debugViewer, self.trUtf8("Debug-Viewer")) # Create the task viewer part of the user interface logging.debug("Creating Task Viewer...") self.taskViewer = TaskViewer(None, self.project) self.bottomSidebar.addTab(self.taskViewer, UI.PixmapCache.getIcon("task.png"), self.trUtf8("Task-Viewer")) # Create the log viewer part of the user interface logging.debug("Creating Log Viewer...") self.logViewer = LogViewer() self.bottomSidebar.addTab(self.logViewer, UI.PixmapCache.getIcon("logViewer.png"), self.trUtf8("Log-Viewer")) self.windows = [None, None, self.debugViewerDock, None, None, None, None, None, None] if self.embeddedShell: self.shell = self.debugViewer.shell else: # Create the shell logging.debug("Creating Shell...") self.shell = Shell(debugServer, self.viewmanager) self.bottomSidebar.insertTab(0, self.shell, UI.PixmapCache.getIcon("shell.png"), self.trUtf8("Shell")) if self.embeddedFileBrowser == 0: # separate window # Create the file browser logging.debug("Creating File Browser...") self.browser = Browser() self.leftSidebar.addTab(self.browser, UI.PixmapCache.getIcon("browser.png"), self.trUtf8("File-Browser")) elif self.embeddedFileBrowser == 1: # embedded in debug browser self.browser = self.debugViewer.browser else: # embedded in project browser self.browser = self.projectBrowser.fileBrowser self.bottomSidebar.setCurrentIndex(0) # create the central widget logging.debug("Creating central widget...") cw = self.centralWidget() # save the current central widget self.horizontalSplitter = QSplitter(Qt.Horizontal) self.verticalSplitter = QSplitter(Qt.Vertical) self.verticalSplitter.addWidget(cw) self.verticalSplitter.addWidget(self.bottomSidebar) self.horizontalSplitter.addWidget(self.leftSidebar) self.horizontalSplitter.addWidget(self.verticalSplitter) self.setCentralWidget(self.horizontalSplitter) self.leftSidebar.setSplitter(self.horizontalSplitter) self.bottomSidebar.setSplitter(self.verticalSplitter) def __configureDockareaCornerUsage(self): """ Private method to configure the usage of the dockarea corners. """ if Preferences.getUI("TopLeftByLeft"): self.setCorner(Qt.TopLeftCorner, Qt.LeftDockWidgetArea) else: self.setCorner(Qt.TopLeftCorner, Qt.TopDockWidgetArea) if Preferences.getUI("BottomLeftByLeft"): self.setCorner(Qt.BottomLeftCorner, Qt.LeftDockWidgetArea) else: self.setCorner(Qt.BottomLeftCorner, Qt.BottomDockWidgetArea) if Preferences.getUI("TopRightByRight"): self.setCorner(Qt.TopRightCorner, Qt.RightDockWidgetArea) else: self.setCorner(Qt.TopRightCorner, Qt.TopDockWidgetArea) if Preferences.getUI("BottomRightByRight"): self.setCorner(Qt.BottomRightCorner, Qt.RightDockWidgetArea) else: self.setCorner(Qt.BottomRightCorner, Qt.BottomDockWidgetArea) def showLogTab(self, tabname): """ Public method to show a particular Log-Viewer tab. @param tabname string naming the tab to be shown (string) """ if Preferences.getUI("LogViewerAutoRaise"): if self.layout == "DockWindows": self.logViewerDock.show() self.logViewerDock.raise_() elif self.layout == "Toolboxes": self.hToolboxDock.show() self.hToolbox.setCurrentWidget(self.logViewer) self.hToolboxDock.raise_() elif self.layout == "Sidebars": self.bottomSidebar.show() self.bottomSidebar.setCurrentWidget(self.logViewer) self.bottomSidebar.raise_() if self.bottomSidebar.isAutoHiding(): self.bottomSidebar.setFocus() def __openOnStartup(self, startupType = None): """ Private method to open the last file, project or multiproject. @param startupType type of startup requested (string, one of "Nothing", "File", "Project", "MultiProject" or "Session") """ startupTypeMapping = { "Nothing" : 0, "File" : 1, "Project" : 2, "MultiProject" : 3, "Session" : 4, } if startupType is None: startup = Preferences.getUI("OpenOnStartup") else: try: startup = startupTypeMapping[startupType] except KeyError: startup = Preferences.getUI("OpenOnStartup") if startup == 0: # open nothing pass elif startup == 1: # open last file recent = self.viewmanager.getMostRecent() if recent is not None: self.viewmanager.openFiles(recent) elif startup == 2: # open last project recent = self.project.getMostRecent() if recent is not None: self.project.openProject(recent) elif startup == 3: # open last multiproject recent = self.multiProject.getMostRecent() if recent is not None: self.multiProject.openMultiProject(recent) elif startup == 4: # open from session file self.__readSession() def processArgs(self, args): """ Public method to process the command line args passed to the UI. @param args list of files to open
    The args are processed one at a time. All arguments after a '--' option are considered debug arguments to the program for the debugger. All files named before the '--' option are opened in a text editor, unless the argument ends in .e3p, .e3pz, .e4p or .e4pz, then it is opened as a project file. If it ends in .e4m or .e4mz, it is opened as a multiproject. """ # no args, return if args is None: if not self.__noOpenAtStartup: self.__openOnStartup() return opens = 0 # holds space delimited list of command args, if any argsStr = None # flag indicating '--' options was found ddseen = False if Utilities.isWindowsPlatform(): argChars = ['-', '/'] else: argChars = ['-'] for arg in args: # handle a request to start with last session if arg == '--start-session': self.__openOnStartup("Session") # ignore all further arguments return if arg == '--' and not ddseen: ddseen = True continue if arg[0] in argChars or ddseen: if argsStr is None: argsStr = arg else: argsStr = "%s %s" % (argsStr, arg) continue try: ext = os.path.splitext(arg)[1] ext = os.path.normcase(ext) except IndexError: ext = "" if ext in ['.e4p', '.e4pz', '.e3p', '.e3pz']: self.project.openProject(arg) opens += 1 elif ext in ['.e4m', '.e4mz']: self.multiProject.openMultiProject(arg) opens += 1 else: self.viewmanager.openFiles(arg) opens += 1 # store away any args we had if argsStr is not None: self.debuggerUI.setArgvHistory(argsStr) if opens == 0: # no files, project or multiproject was given if not self.__noOpenAtStartup: self.__openOnStartup() def __createDockWindow(self, name): """ Private method to create a dock window with common properties. @param name object name of the new dock window (string or QString) @return the generated dock window (QDockWindow) """ dock = QDockWidget() dock.setObjectName(name) dock.setFeatures(\ QDockWidget.DockWidgetFeatures(QDockWidget.AllDockWidgetFeatures)) return dock def __setupDockWindow(self, dock, where, widget, caption): """ Private method to configure the dock window created with __createDockWindow(). @param dock the dock window (QDockWindow) @param where dock area to be docked to (Qt.DockWidgetArea) @param widget widget to be shown in the dock window (QWidget) @param caption caption of the dock window (string or QString) """ if caption is None: caption = QString() self.addDockWidget(where, dock) dock.setWidget(widget) dock.setWindowTitle(caption) dock.show() def __setWindowCaption(self, editor = None, project = None): """ Private method to set the caption of the Main Window. @param editor filename to be displayed (string or QString) @param project project name to be displayed (string or QString) """ if editor is not None and self.captionShowsFilename: self.capEditor = \ Utilities.compactPath(unicode(editor), self.maxFilePathLen) if project is not None: self.capProject = unicode(project) if self.passiveMode: if not self.capProject and not self.capEditor: self.setWindowTitle(self.trUtf8("%1 - Passive Mode").arg(Program)) elif self.capProject and not self.capEditor: self.setWindowTitle(self.trUtf8("%1 - %2 - Passive Mode")\ .arg(self.capProject)\ .arg(Program)) elif not self.capProject and self.capEditor: self.setWindowTitle(self.trUtf8("%1 - %2 - Passive Mode")\ .arg(self.capEditor)\ .arg(Program)) else: self.setWindowTitle(self.trUtf8("%1 - %2 - %3 - Passive Mode")\ .arg(self.capProject)\ .arg(self.capEditor)\ .arg(Program)) else: if not self.capProject and not self.capEditor: self.setWindowTitle(Program) elif self.capProject and not self.capEditor: self.setWindowTitle("%s - %s" % (self.capProject, Program)) elif not self.capProject and self.capEditor: self.setWindowTitle("%s - %s" % (self.capEditor, Program)) else: self.setWindowTitle("%s - %s - %s" % \ (self.capProject, self.capEditor, Program)) def __initActions(self): """ Private method to define the user interface actions. """ self.actions = [] self.wizardsActions = [] self.exitAct = E4Action(self.trUtf8('Quit'), UI.PixmapCache.getIcon("exit.png"), self.trUtf8('&Quit'), QKeySequence(self.trUtf8("Ctrl+Q","File|Quit")), 0, self, 'quit') self.exitAct.setStatusTip(self.trUtf8('Quit the IDE')) self.exitAct.setWhatsThis(self.trUtf8( """Quit the IDE""" """

    This quits the IDE. Any unsaved changes may be saved first.""" """ Any Python program being debugged will be stopped and the""" """ preferences will be written to disc.

    """ )) self.connect(self.exitAct, SIGNAL('triggered()'), self.__quit) self.exitAct.setMenuRole(QAction.QuitRole) self.actions.append(self.exitAct) self.newWindowAct = E4Action(self.trUtf8('New Window'), UI.PixmapCache.getIcon("newWindow.png"), self.trUtf8('New &Window'), QKeySequence(self.trUtf8("Ctrl+Shift+N", "File|New Window")), 0, self, 'new_window') self.newWindowAct.setStatusTip(self.trUtf8('Open a new eric4 instance')) self.newWindowAct.setWhatsThis(self.trUtf8( """New Window""" """

    This opens a new instance of the eric4 IDE.

    """ )) self.connect(self.newWindowAct, SIGNAL('triggered()'), self.__newWindow) self.actions.append(self.newWindowAct) self.newWindowAct.setEnabled(not Preferences.getUI("SingleApplicationMode")) self.viewProfileActGrp = createActionGroup(self, "viewprofiles", True) self.setEditProfileAct = E4Action(self.trUtf8('Edit Profile'), UI.PixmapCache.getIcon("viewProfileEdit.png"), self.trUtf8('Edit Profile'), 0, 0, self.viewProfileActGrp, 'edit_profile', True) self.setEditProfileAct.setStatusTip(self.trUtf8('Activate the edit view profile')) self.setEditProfileAct.setWhatsThis(self.trUtf8( """Edit Profile""" """

    Activate the "Edit View Profile". Windows being shown,""" """ if this profile is active, may be configured with the""" """ "View Profile Configuration" dialog.

    """ )) self.connect(self.setEditProfileAct, SIGNAL('triggered()'), self.__setEditProfile) self.actions.append(self.setEditProfileAct) self.setDebugProfileAct = E4Action(self.trUtf8('Debug Profile'), UI.PixmapCache.getIcon("viewProfileDebug.png"), self.trUtf8('Debug Profile'), 0, 0, self.viewProfileActGrp, 'debug_profile', True) self.setDebugProfileAct.setStatusTip(\ self.trUtf8('Activate the debug view profile')) self.setDebugProfileAct.setWhatsThis(self.trUtf8( """Debug Profile""" """

    Activate the "Debug View Profile". Windows being shown,""" """ if this profile is active, may be configured with the""" """ "View Profile Configuration" dialog.

    """ )) self.connect(self.setDebugProfileAct, SIGNAL('triggered()'), self.setDebugProfile) self.actions.append(self.setDebugProfileAct) self.pbAct = E4Action(self.trUtf8('Project-Viewer'), self.trUtf8('&Project-Viewer'), 0, 0, self, 'project_viewer', True) self.pbAct.setStatusTip(self.trUtf8('Toggle the Project-Viewer window')) self.pbAct.setWhatsThis(self.trUtf8( """Toggle the Project-Viewer window""" """

    If the Project-Viewer window is hidden then display it.""" """ If it is displayed then close it.

    """ )) self.connect(self.pbAct, SIGNAL('triggered()'), self.__toggleProjectBrowser) self.actions.append(self.pbAct) self.pbActivateAct = E4Action(self.trUtf8('Activate Project-Viewer'), self.trUtf8('Activate Project-Viewer'), QKeySequence(self.trUtf8("Alt+Shift+P")), 0, self, 'project_viewer_activate') self.connect(self.pbActivateAct, SIGNAL('triggered()'), self.__activateProjectBrowser) self.actions.append(self.pbActivateAct) self.addAction(self.pbActivateAct) self.mpbAct = E4Action(self.trUtf8('Multiproject-Viewer'), self.trUtf8('&Multiproject-Viewer'), 0, 0, self, 'multi_project_viewer', True) self.mpbAct.setStatusTip(self.trUtf8('Toggle the Multiproject-Viewer window')) self.mpbAct.setWhatsThis(self.trUtf8( """Toggle the Multiproject-Viewer window""" """

    If the Multiproject-Viewer window is hidden then display it.""" """ If it is displayed then close it.

    """ )) self.connect(self.mpbAct, SIGNAL('triggered()'), self.__toggleMultiProjectBrowser) self.actions.append(self.mpbAct) self.mpbActivateAct = E4Action(self.trUtf8('Activate Multiproject-Viewer'), self.trUtf8('Activate Multiproject-Viewer'), QKeySequence(self.trUtf8("Alt+Shift+M")), 0, self, 'multi_project_viewer_activate') self.connect(self.mpbActivateAct, SIGNAL('triggered()'), self.__activateMultiProjectBrowser) self.actions.append(self.mpbActivateAct) self.addAction(self.mpbActivateAct) self.debugViewerAct = E4Action(self.trUtf8('Debug-Viewer'), self.trUtf8('&Debug-Viewer'), 0, 0, self, 'debug_viewer', True) self.debugViewerAct.setStatusTip(self.trUtf8('Toggle the Debug-Viewer window')) self.debugViewerAct.setWhatsThis(self.trUtf8( """Toggle the Debug-Viewer window""" """

    If the Debug-Viewer window is hidden then display it.""" """ If it is displayed then close it.

    """ )) self.connect(self.debugViewerAct, SIGNAL('triggered()'), self.__toggleDebugViewer) self.actions.append(self.debugViewerAct) self.debugViewerActivateAct = E4Action(self.trUtf8('Activate Debug-Viewer'), self.trUtf8('Activate Debug-Viewer'), QKeySequence(self.trUtf8("Alt+Shift+D")), 0, self, 'debug_viewer_activate') self.connect(self.debugViewerActivateAct, SIGNAL('triggered()'), self.__activateDebugViewer) self.actions.append(self.debugViewerActivateAct) self.addAction(self.debugViewerActivateAct) self.shellAct = E4Action(self.trUtf8('Shell'), self.trUtf8('&Shell'), 0, 0, self, 'interpreter_shell', True) self.shellAct.setStatusTip(self.trUtf8('Toggle the Shell window')) self.shellAct.setWhatsThis(self.trUtf8( """Toggle the Shell window""" """

    If the Shell window is hidden then display it.""" """ If it is displayed then close it.

    """ )) if not self.embeddedShell: self.connect(self.shellAct, SIGNAL('triggered()'), self.__toggleShell) self.actions.append(self.shellAct) self.shellActivateAct = E4Action(self.trUtf8('Activate Shell'), self.trUtf8('Activate Shell'), QKeySequence(self.trUtf8("Alt+Shift+S")), 0, self, 'interprter_shell_activate') self.connect(self.shellActivateAct, SIGNAL('triggered()'), self.__activateShell) self.actions.append(self.shellActivateAct) self.addAction(self.shellActivateAct) self.browserAct = E4Action(self.trUtf8('File-Browser'), self.trUtf8('File-&Browser'), 0, 0, self, 'file_browser', True) self.browserAct.setStatusTip(self.trUtf8('Toggle the File-Browser window')) self.browserAct.setWhatsThis(self.trUtf8( """Toggle the File-Browser window""" """

    If the File-Browser window is hidden then display it.""" """ If it is displayed then close it.

    """ )) if not self.embeddedFileBrowser: self.connect(self.browserAct, SIGNAL('triggered()'), self.__toggleBrowser) self.actions.append(self.browserAct) self.browserActivateAct = E4Action(self.trUtf8('Activate File-Browser'), self.trUtf8('Activate File-Browser'), QKeySequence(self.trUtf8("Alt+Shift+F")), 0, self, 'file_browser_activate') self.connect(self.browserActivateAct, SIGNAL('triggered()'), self.__activateBrowser) self.actions.append(self.browserActivateAct) self.addAction(self.browserActivateAct) self.logViewerAct = E4Action(self.trUtf8('Log-Viewer'), self.trUtf8('&Log-Viewer'), 0, 0, self, 'log_viewer', True) self.logViewerAct.setStatusTip(self.trUtf8('Toggle the Log-Viewer window')) self.logViewerAct.setWhatsThis(self.trUtf8( """Toggle the Log-Viewer window""" """

    If the Log-Viewer window is hidden then display it.""" """ If it is displayed then close it.

    """ )) self.connect(self.logViewerAct, SIGNAL('triggered()'), self.__toggleLogViewer) self.actions.append(self.logViewerAct) self.logViewerActivateAct = E4Action(self.trUtf8('Activate Log-Viewer'), self.trUtf8('Activate Log-Viewer'), QKeySequence(self.trUtf8("Alt+Shift+G")), 0, self, 'log_viewer_activate') self.connect(self.logViewerActivateAct, SIGNAL('triggered()'), self.__activateLogViewer) self.actions.append(self.logViewerActivateAct) self.addAction(self.logViewerActivateAct) self.taskViewerAct = E4Action(self.trUtf8('Task-Viewer'), self.trUtf8('T&ask-Viewer'), 0, 0, self, 'task_viewer', True) self.taskViewerAct.setStatusTip(self.trUtf8('Toggle the Task-Viewer window')) self.taskViewerAct.setWhatsThis(self.trUtf8( """Toggle the Task-Viewer window""" """

    If the Task-Viewer window is hidden then display it.""" """ If it is displayed then close it.

    """ )) self.connect(self.taskViewerAct, SIGNAL('triggered()'), self.__toggleTaskViewer) self.actions.append(self.taskViewerAct) self.taskViewerActivateAct = E4Action(self.trUtf8('Activate Task-Viewer'), self.trUtf8('Activate Task-Viewer'), QKeySequence(self.trUtf8("Alt+Shift+T")), 0, self, 'task_viewer_activate') self.connect(self.taskViewerActivateAct, SIGNAL('triggered()'), self.__activateTaskViewer) self.actions.append(self.taskViewerActivateAct) self.addAction(self.taskViewerActivateAct) self.templateViewerAct = E4Action(self.trUtf8('Template-Viewer'), self.trUtf8('Temp&late-Viewer'), 0, 0, self, 'template_viewer', True) self.templateViewerAct.setStatusTip(\ self.trUtf8('Toggle the Template-Viewer window')) self.templateViewerAct.setWhatsThis(self.trUtf8( """Toggle the Template-Viewer window""" """

    If the Template-Viewer window is hidden then display it.""" """ If it is displayed then close it.

    """ )) self.connect(self.templateViewerAct, SIGNAL('triggered()'), self.__toggleTemplateViewer) self.actions.append(self.templateViewerAct) self.templateViewerActivateAct = E4Action(self.trUtf8('Activate Template-Viewer'), self.trUtf8('Activate Template-Viewer'), QKeySequence(self.trUtf8("Alt+Shift+A")), 0, self, 'template_viewer_activate') self.connect(self.templateViewerActivateAct, SIGNAL('triggered()'), self.__activateTemplateViewer) self.actions.append(self.templateViewerActivateAct) self.addAction(self.templateViewerActivateAct) self.vtAct = E4Action(self.trUtf8('Vertical Toolbox'), self.trUtf8('&Vertical Toolbox'), 0, 0, self, 'vertical_toolbox', True) self.vtAct.setStatusTip(self.trUtf8('Toggle the Vertical Toolbox window')) self.vtAct.setWhatsThis(self.trUtf8( """Toggle the Vertical Toolbox window""" """

    If the Vertical Toolbox window is hidden then display it.""" """ If it is displayed then close it.

    """ )) self.connect(self.vtAct, SIGNAL('triggered()'), self.__toggleVerticalToolbox) self.actions.append(self.vtAct) self.htAct = E4Action(self.trUtf8('Horizontal Toolbox'), self.trUtf8('&Horizontal Toolbox'), 0, 0, self, 'horizontal_toolbox', True) self.htAct.setStatusTip(self.trUtf8('Toggle the Horizontal Toolbox window')) self.htAct.setWhatsThis(self.trUtf8( """Toggle the Horizontal Toolbox window""" """

    If the Horizontal Toolbox window is hidden then display it.""" """ If it is displayed then close it.

    """ )) self.connect(self.htAct, SIGNAL('triggered()'), self.__toggleHorizontalToolbox) self.actions.append(self.htAct) self.lsbAct = E4Action(self.trUtf8('Left Sidebar'), self.trUtf8('&Left Sidebar'), 0, 0, self, 'left_sidebar', True) self.lsbAct.setStatusTip(self.trUtf8('Toggle the left sidebar window')) self.lsbAct.setWhatsThis(self.trUtf8( """Toggle the left sidebar window""" """

    If the left sidebar window is hidden then display it.""" """ If it is displayed then close it.

    """ )) self.connect(self.lsbAct, SIGNAL('triggered()'), self.__toggleLeftSidebar) self.actions.append(self.lsbAct) self.bsbAct = E4Action(self.trUtf8('Bottom Sidebar'), self.trUtf8('&Bottom Sidebar'), 0, 0, self, 'bottom_sidebar', True) self.bsbAct.setStatusTip(self.trUtf8('Toggle the bottom sidebar window')) self.bsbAct.setWhatsThis(self.trUtf8( """Toggle the bottom sidebar window""" """

    If the bottom sidebar window is hidden then display it.""" """ If it is displayed then close it.

    """ )) self.connect(self.bsbAct, SIGNAL('triggered()'), self.__toggleBottomSidebar) self.actions.append(self.bsbAct) self.whatsThisAct = E4Action(self.trUtf8('What\'s This?'), UI.PixmapCache.getIcon("whatsThis.png"), self.trUtf8('&What\'s This?'), QKeySequence(self.trUtf8("Shift+F1")), 0, self, 'whatsThis') self.whatsThisAct.setStatusTip(self.trUtf8('Context sensitive help')) self.whatsThisAct.setWhatsThis(self.trUtf8( """Display context sensitive help""" """

    In What's This? mode, the mouse cursor shows an arrow with a question""" """ mark, and you can click on the interface elements to get a short""" """ description of what they do and how to use them. In dialogs, this""" """ feature can be accessed using the context help button in the""" """ titlebar.

    """ )) self.connect(self.whatsThisAct, SIGNAL('triggered()'), self.__whatsThis) self.actions.append(self.whatsThisAct) self.helpviewerAct = E4Action(self.trUtf8('Helpviewer'), UI.PixmapCache.getIcon("help.png"), self.trUtf8('&Helpviewer...'), QKeySequence(self.trUtf8("F1")), 0, self, 'helpviewer') self.helpviewerAct.setStatusTip(self.trUtf8('Open the helpviewer window')) self.helpviewerAct.setWhatsThis(self.trUtf8( """Helpviewer""" """

    Display the eric4 web browser. This window will show""" """ HTML help files and help from Qt help collections. It has the""" """ capability to navigate to links, set bookmarks, print the displayed""" """ help and some more features. You may use it to browse the internet""" """ as well

    If called with a word selected, this word is search""" """ in the Qt help collection.

    """ )) self.connect(self.helpviewerAct, SIGNAL('triggered()'), self.__helpViewer) self.actions.append(self.helpviewerAct) self.__initQtDocActions() self.__initKdeDocActions() self.__initPythonDocAction() self.__initEricDocAction() self.__initPySideDocActions() self.versionAct = E4Action(self.trUtf8('Show Versions'), self.trUtf8('Show &Versions'), 0, 0, self, 'show_versions') self.versionAct.setStatusTip(self.trUtf8('Display version information')) self.versionAct.setWhatsThis(self.trUtf8( """Show Versions""" """

    Display version information.

    """ )) self.connect(self.versionAct, SIGNAL('triggered()'), self.__showVersions) self.actions.append(self.versionAct) self.checkUpdateAct = E4Action(self.trUtf8('Check for Updates'), self.trUtf8('Check for &Updates...'), 0, 0, self, 'check_updates') self.checkUpdateAct.setStatusTip(self.trUtf8('Check for Updates')) self.checkUpdateAct.setWhatsThis(self.trUtf8( """Check for Updates...""" """

    Checks the internet for updates of eric4.

    """ )) self.connect(self.checkUpdateAct, SIGNAL('triggered()'), self.performVersionCheck) self.actions.append(self.checkUpdateAct) self.showVersionsAct = E4Action(self.trUtf8('Show downloadable versions'), self.trUtf8('Show &downloadable versions...'), 0, 0, self, 'show_downloadable_versions') self.showVersionsAct.setStatusTip(\ self.trUtf8('Show the versions available for download')) self.showVersionsAct.setWhatsThis(self.trUtf8( """Show downloadable versions...""" """

    Shows the eric4 versions available for download """ """from the internet.

    """ )) self.connect(self.showVersionsAct, SIGNAL('triggered()'), self.showAvailableVersionsInfo) self.actions.append(self.showVersionsAct) self.reportBugAct = E4Action(self.trUtf8('Report Bug'), self.trUtf8('Report &Bug...'), 0, 0, self, 'report_bug') self.reportBugAct.setStatusTip(self.trUtf8('Report a bug')) self.reportBugAct.setWhatsThis(self.trUtf8( """Report Bug...""" """

    Opens a dialog to report a bug.

    """ )) self.connect(self.reportBugAct, SIGNAL('triggered()'), self.__reportBug) self.actions.append(self.reportBugAct) self.requestFeatureAct = E4Action(self.trUtf8('Request Feature'), self.trUtf8('Request &Feature...'), 0, 0, self, 'request_feature') self.requestFeatureAct.setStatusTip(self.trUtf8('Send a feature request')) self.requestFeatureAct.setWhatsThis(self.trUtf8( """Request Feature...""" """

    Opens a dialog to send a feature request.

    """ )) self.connect(self.requestFeatureAct, SIGNAL('triggered()'), self.__requestFeature) self.actions.append(self.requestFeatureAct) self.utActGrp = createActionGroup(self) self.utDialogAct = E4Action(self.trUtf8('Unittest'), UI.PixmapCache.getIcon("unittest.png"), self.trUtf8('&Unittest...'), 0, 0, self.utActGrp, 'unittest') self.utDialogAct.setStatusTip(self.trUtf8('Start unittest dialog')) self.utDialogAct.setWhatsThis(self.trUtf8( """Unittest""" """

    Perform unit tests. The dialog gives you the""" """ ability to select and run a unittest suite.

    """ )) self.connect(self.utDialogAct, SIGNAL('triggered()'), self.__unittest) self.actions.append(self.utDialogAct) self.utRestartAct = E4Action(self.trUtf8('Unittest Restart'), UI.PixmapCache.getIcon("unittestRestart.png"), self.trUtf8('&Restart Unittest...'), 0, 0, self.utActGrp, 'unittest_restart') self.utRestartAct.setStatusTip(self.trUtf8('Restart last unittest')) self.utRestartAct.setWhatsThis(self.trUtf8( """Restart Unittest""" """

    Restart the unittest performed last.

    """ )) self.connect(self.utRestartAct, SIGNAL('triggered()'), self.__unittestRestart) self.utRestartAct.setEnabled(False) self.actions.append(self.utRestartAct) self.utScriptAct = E4Action(self.trUtf8('Unittest Script'), UI.PixmapCache.getIcon("unittestScript.png"), self.trUtf8('Unittest &Script...'), 0, 0, self.utActGrp, 'unittest_script') self.utScriptAct.setStatusTip(self.trUtf8('Run unittest with current script')) self.utScriptAct.setWhatsThis(self.trUtf8( """Unittest Script""" """

    Run unittest with current script.

    """ )) self.connect(self.utScriptAct, SIGNAL('triggered()'), self.__unittestScript) self.utScriptAct.setEnabled(False) self.actions.append(self.utScriptAct) self.utProjectAct = E4Action(self.trUtf8('Unittest Project'), UI.PixmapCache.getIcon("unittestProject.png"), self.trUtf8('Unittest &Project...'), 0, 0, self.utActGrp, 'unittest_project') self.utProjectAct.setStatusTip(self.trUtf8('Run unittest with current project')) self.utProjectAct.setWhatsThis(self.trUtf8( """Unittest Project""" """

    Run unittest with current project.

    """ )) self.connect(self.utProjectAct, SIGNAL('triggered()'), self.__unittestProject) self.utProjectAct.setEnabled(False) self.actions.append(self.utProjectAct) # check for Qt4 designer and linguist if Utilities.isWindowsPlatform(): designerExe = "%s.exe" % Utilities.generateQtToolName("designer") elif Utilities.isMacPlatform(): designerExe = unicode(Utilities.getQtMacBundle("designer")) else: designerExe = Utilities.generateQtToolName("designer") if Utilities.isinpath(designerExe): self.designer4Act = E4Action(self.trUtf8('Qt-Designer 4'), UI.PixmapCache.getIcon("designer4.png"), self.trUtf8('&Designer 4...'), 0, 0, self, 'qt_designer4') self.designer4Act.setStatusTip(self.trUtf8('Start Qt-Designer 4')) self.designer4Act.setWhatsThis(self.trUtf8( """Qt-Designer 4""" """

    Start Qt-Designer 4.

    """ )) self.connect(self.designer4Act, SIGNAL('triggered()'), self.__designer4) self.actions.append(self.designer4Act) else: self.designer4Act = None if Utilities.isWindowsPlatform(): linguistExe = "%s.exe" % Utilities.generateQtToolName("linguist") elif Utilities.isMacPlatform(): linguistExe = unicode(Utilities.getQtMacBundle("linguist")) else: linguistExe = Utilities.generateQtToolName("linguist") if Utilities.isinpath(linguistExe): self.linguist4Act = E4Action(self.trUtf8('Qt-Linguist 4'), UI.PixmapCache.getIcon("linguist4.png"), self.trUtf8('&Linguist 4...'), 0, 0, self, 'qt_linguist4') self.linguist4Act.setStatusTip(self.trUtf8('Start Qt-Linguist 4')) self.linguist4Act.setWhatsThis(self.trUtf8( """Qt-Linguist 4""" """

    Start Qt-Linguist 4.

    """ )) self.connect(self.linguist4Act, SIGNAL('triggered()'), self.__linguist4) self.actions.append(self.linguist4Act) else: self.linguist4Act = None self.uipreviewerAct = E4Action(self.trUtf8('UI Previewer'), UI.PixmapCache.getIcon("uiPreviewer.png"), self.trUtf8('&UI Previewer...'), 0, 0, self, 'ui_previewer') self.uipreviewerAct.setStatusTip(self.trUtf8('Start the UI Previewer')) self.uipreviewerAct.setWhatsThis(self.trUtf8( """UI Previewer""" """

    Start the UI Previewer.

    """ )) self.connect(self.uipreviewerAct, SIGNAL('triggered()'), self.__UIPreviewer) self.actions.append(self.uipreviewerAct) self.trpreviewerAct = E4Action(self.trUtf8('Translations Previewer'), UI.PixmapCache.getIcon("trPreviewer.png"), self.trUtf8('&Translations Previewer...'), 0, 0, self, 'tr_previewer') self.trpreviewerAct.setStatusTip(self.trUtf8('Start the Translations Previewer')) self.trpreviewerAct.setWhatsThis(self.trUtf8( """Translations Previewer""" """

    Start the Translations Previewer.

    """ )) self.connect(self.trpreviewerAct, SIGNAL('triggered()'), self.__TRPreviewer) self.actions.append(self.trpreviewerAct) self.diffAct = E4Action(self.trUtf8('Compare Files'), UI.PixmapCache.getIcon("diffFiles.png"), self.trUtf8('&Compare Files...'), 0, 0, self, 'diff_files') self.diffAct.setStatusTip(self.trUtf8('Compare two files')) self.diffAct.setWhatsThis(self.trUtf8( """Compare Files""" """

    Open a dialog to compare two files.

    """ )) self.connect(self.diffAct, SIGNAL('triggered()'), self.__compareFiles) self.actions.append(self.diffAct) self.compareAct = E4Action(self.trUtf8('Compare Files side by side'), UI.PixmapCache.getIcon("compareFiles.png"), self.trUtf8('Compare Files &side by side...'), 0, 0, self, 'compare_files') self.compareAct.setStatusTip(self.trUtf8('Compare two files')) self.compareAct.setWhatsThis(self.trUtf8( """Compare Files side by side""" """

    Open a dialog to compare two files and show the result""" """ side by side.

    """ )) self.connect(self.compareAct, SIGNAL('triggered()'), self.__compareFilesSbs) self.actions.append(self.compareAct) self.sqlBrowserAct = E4Action(self.trUtf8('SQL Browser'), UI.PixmapCache.getIcon("sqlBrowser.png"), self.trUtf8('SQL &Browser...'), 0, 0, self, 'sql_browser') self.sqlBrowserAct.setStatusTip(self.trUtf8('Browse a SQL database')) self.sqlBrowserAct.setWhatsThis(self.trUtf8( """SQL Browser""" """

    Browse a SQL database.

    """ )) self.connect(self.sqlBrowserAct, SIGNAL('triggered()'), self.__sqlBrowser) self.actions.append(self.sqlBrowserAct) self.miniEditorAct = E4Action(self.trUtf8('Mini Editor'), UI.PixmapCache.getIcon("editor.png"), self.trUtf8('Mini &Editor...'), 0, 0, self, 'mini_editor') self.miniEditorAct.setStatusTip(self.trUtf8('Mini Editor')) self.miniEditorAct.setWhatsThis(self.trUtf8( """Mini Editor""" """

    Open a dialog with a simplified editor.

    """ )) self.connect(self.miniEditorAct, SIGNAL('triggered()'), self.__openMiniEditor) self.actions.append(self.miniEditorAct) self.webBrowserAct = E4Action(self.trUtf8('eric4 Web Browser'), UI.PixmapCache.getIcon("ericWeb.png"), self.trUtf8('eric4 &Web Browser...'), 0, 0, self, 'web_browser') self.webBrowserAct.setStatusTip(self.trUtf8('Start the eric4 Web Browser')) self.webBrowserAct.setWhatsThis(self.trUtf8( """eric4 Web Browser""" """

    Browse the Internet with the eric4 Web Browser.

    """ )) self.connect(self.webBrowserAct, SIGNAL('triggered()'), self.__startWebBrowser) self.actions.append(self.webBrowserAct) self.iconEditorAct = E4Action(self.trUtf8('Icon Editor'), UI.PixmapCache.getIcon("iconEditor.png"), self.trUtf8('&Icon Editor...'), 0, 0, self, 'icon_editor') self.iconEditorAct.setStatusTip(self.trUtf8('Start the eric4 Icon Editor')) self.iconEditorAct.setWhatsThis(self.trUtf8( """Icon Editor""" """

    Starts the eric4 Icon Editor for editing simple icons.

    """ )) self.connect(self.iconEditorAct, SIGNAL('triggered()'), self.__editPixmap) self.actions.append(self.iconEditorAct) self.prefAct = E4Action(self.trUtf8('Preferences'), UI.PixmapCache.getIcon("configure.png"), self.trUtf8('&Preferences...'), 0, 0, self, 'preferences') self.prefAct.setStatusTip(self.trUtf8('Set the prefered configuration')) self.prefAct.setWhatsThis(self.trUtf8( """Preferences""" """

    Set the configuration items of the application""" """ with your prefered values.

    """ )) self.connect(self.prefAct, SIGNAL('triggered()'), self.showPreferences) self.prefAct.setMenuRole(QAction.PreferencesRole) self.actions.append(self.prefAct) self.prefExportAct = E4Action(self.trUtf8('Export Preferences'), UI.PixmapCache.getIcon("configureExport.png"), self.trUtf8('E&xport Preferences...'), 0, 0, self, 'export_preferences') self.prefExportAct.setStatusTip(self.trUtf8('Export the current configuration')) self.prefExportAct.setWhatsThis(self.trUtf8( """Export Preferences""" """

    Export the current configuration to a file.

    """ )) self.connect(self.prefExportAct, SIGNAL('triggered()'), self.__exportPreferences) self.actions.append(self.prefExportAct) self.prefImportAct = E4Action(self.trUtf8('Import Preferences'), UI.PixmapCache.getIcon("configureImport.png"), self.trUtf8('I&mport Preferences...'), 0, 0, self, 'import_preferences') self.prefImportAct.setStatusTip(self.trUtf8( 'Import a previously exported configuration')) self.prefImportAct.setWhatsThis(self.trUtf8( """Import Preferences""" """

    Import a previously exported configuration.

    """ )) self.connect(self.prefImportAct, SIGNAL('triggered()'), self.__importPreferences) self.actions.append(self.prefImportAct) self.reloadAPIsAct = E4Action(self.trUtf8('Reload APIs'), self.trUtf8('Reload &APIs'), 0, 0, self, 'reload_apis') self.reloadAPIsAct.setStatusTip(self.trUtf8('Reload the API information')) self.reloadAPIsAct.setWhatsThis(self.trUtf8( """Reload APIs""" """

    Reload the API information.

    """ )) self.connect(self.reloadAPIsAct, SIGNAL('triggered()'), self.__reloadAPIs) self.actions.append(self.reloadAPIsAct) self.showExternalToolsAct = E4Action(self.trUtf8('Show external tools'), UI.PixmapCache.getIcon("showPrograms.png"), self.trUtf8('Show external &tools'), 0, 0, self, 'show_external_tools') self.showExternalToolsAct.setStatusTip(self.trUtf8('Reload the API information')) self.showExternalToolsAct.setWhatsThis(self.trUtf8( """Show external tools""" """

    Opens a dialog to show the path and versions of all""" """ extenal tools used by eric4.

    """ )) self.connect(self.showExternalToolsAct, SIGNAL('triggered()'), self.__showExternalTools) self.actions.append(self.showExternalToolsAct) self.configViewProfilesAct = E4Action(self.trUtf8('View Profiles'), UI.PixmapCache.getIcon("configureViewProfiles.png"), self.trUtf8('&View Profiles...'), 0, 0, self, 'view_profiles') self.configViewProfilesAct.setStatusTip(self.trUtf8('Configure view profiles')) self.configViewProfilesAct.setWhatsThis(self.trUtf8( """View Profiles""" """

    Configure the view profiles. With this dialog you may""" """ set the visibility of the various windows for the predetermined""" """ view profiles.

    """ )) self.connect(self.configViewProfilesAct, SIGNAL('triggered()'), self.__configViewProfiles) self.actions.append(self.configViewProfilesAct) self.configToolBarsAct = E4Action(self.trUtf8('Toolbars'), UI.PixmapCache.getIcon("toolbarsConfigure.png"), self.trUtf8('Tool&bars...'), 0, 0, self, 'configure_toolbars') self.configToolBarsAct.setStatusTip(self.trUtf8('Configure toolbars')) self.configToolBarsAct.setWhatsThis(self.trUtf8( """Toolbars""" """

    Configure the toolbars. With this dialog you may""" """ change the actions shown on the various toolbars and""" """ define your own toolbars.

    """ )) self.connect(self.configToolBarsAct, SIGNAL('triggered()'), self.__configToolBars) self.actions.append(self.configToolBarsAct) self.shortcutsAct = E4Action(self.trUtf8('Keyboard Shortcuts'), UI.PixmapCache.getIcon("configureShortcuts.png"), self.trUtf8('Keyboard &Shortcuts...'), 0, 0, self, 'keyboard_shortcuts') self.shortcutsAct.setStatusTip(self.trUtf8('Set the keyboard shortcuts')) self.shortcutsAct.setWhatsThis(self.trUtf8( """Keyboard Shortcuts""" """

    Set the keyboard shortcuts of the application""" """ with your prefered values.

    """ )) self.connect(self.shortcutsAct, SIGNAL('triggered()'), self.__configShortcuts) self.actions.append(self.shortcutsAct) self.exportShortcutsAct = E4Action(self.trUtf8('Export Keyboard Shortcuts'), UI.PixmapCache.getIcon("exportShortcuts.png"), self.trUtf8('&Export Keyboard Shortcuts...'), 0, 0, self, 'export_keyboard_shortcuts') self.exportShortcutsAct.setStatusTip(self.trUtf8('Export the keyboard shortcuts')) self.exportShortcutsAct.setWhatsThis(self.trUtf8( """Export Keyboard Shortcuts""" """

    Export the keyboard shortcuts of the application.

    """ )) self.connect(self.exportShortcutsAct, SIGNAL('triggered()'), self.__exportShortcuts) self.actions.append(self.exportShortcutsAct) self.importShortcutsAct = E4Action(self.trUtf8('Import Keyboard Shortcuts'), UI.PixmapCache.getIcon("importShortcuts.png"), self.trUtf8('&Import Keyboard Shortcuts...'), 0, 0, self, 'import_keyboard_shortcuts') self.importShortcutsAct.setStatusTip(self.trUtf8('Import the keyboard shortcuts')) self.importShortcutsAct.setWhatsThis(self.trUtf8( """Import Keyboard Shortcuts""" """

    Import the keyboard shortcuts of the application.

    """ )) self.connect(self.importShortcutsAct, SIGNAL('triggered()'), self.__importShortcuts) self.actions.append(self.importShortcutsAct) self.viewmanagerActivateAct = E4Action(self.trUtf8('Activate current editor'), self.trUtf8('Activate current editor'), QKeySequence(self.trUtf8("Alt+Shift+E")), 0, self, 'viewmanager_activate') self.connect(self.viewmanagerActivateAct, SIGNAL('triggered()'), self.__activateViewmanager) self.actions.append(self.viewmanagerActivateAct) self.addAction(self.viewmanagerActivateAct) self.nextTabAct = E4Action(self.trUtf8('Show next'), self.trUtf8('Show next'), QKeySequence(self.trUtf8('Ctrl+Alt+Tab')), 0, self, 'view_next_tab') self.connect(self.nextTabAct, SIGNAL('triggered()'), self.__showNext) self.actions.append(self.nextTabAct) self.addAction(self.nextTabAct) self.prevTabAct = E4Action(self.trUtf8('Show previous'), self.trUtf8('Show previous'), QKeySequence(self.trUtf8('Shift+Ctrl+Alt+Tab')), 0, self, 'view_previous_tab') self.connect(self.prevTabAct, SIGNAL('triggered()'), self.__showPrevious) self.actions.append(self.prevTabAct) self.addAction(self.prevTabAct) self.switchTabAct = E4Action(self.trUtf8('Switch between tabs'), self.trUtf8('Switch between tabs'), QKeySequence(self.trUtf8('Ctrl+1')), 0, self, 'switch_tabs') self.connect(self.switchTabAct, SIGNAL('triggered()'), self.__switchTab) self.actions.append(self.switchTabAct) self.addAction(self.switchTabAct) self.pluginInfoAct = E4Action(self.trUtf8('Plugin Infos'), UI.PixmapCache.getIcon("plugin.png"), self.trUtf8('&Plugin Infos...'), 0, 0, self, 'plugin_infos') self.pluginInfoAct.setStatusTip(self.trUtf8('Show Plugin Infos')) self.pluginInfoAct.setWhatsThis(self.trUtf8( """Plugin Infos...""" """

    This opens a dialog, that show some information about""" """ loaded plugins.

    """ )) self.connect(self.pluginInfoAct, SIGNAL('triggered()'), self.__showPluginInfo) self.actions.append(self.pluginInfoAct) self.pluginInstallAct = E4Action(self.trUtf8('Install Plugins'), UI.PixmapCache.getIcon("pluginInstall.png"), self.trUtf8('&Install Plugins...'), 0, 0, self, 'plugin_install') self.pluginInstallAct.setStatusTip(self.trUtf8('Install Plugins')) self.pluginInstallAct.setWhatsThis(self.trUtf8( """Install Plugins...""" """

    This opens a dialog to install or update plugins.

    """ )) self.connect(self.pluginInstallAct, SIGNAL('triggered()'), self.__installPlugins) self.actions.append(self.pluginInstallAct) self.pluginDeinstallAct = E4Action(self.trUtf8('Uninstall Plugin'), UI.PixmapCache.getIcon("pluginUninstall.png"), self.trUtf8('&Uninstall Plugin...'), 0, 0, self, 'plugin_deinstall') self.pluginDeinstallAct.setStatusTip(self.trUtf8('Uninstall Plugin')) self.pluginDeinstallAct.setWhatsThis(self.trUtf8( """Uninstall Plugin...""" """

    This opens a dialog to uninstall a plugin.

    """ )) self.connect(self.pluginDeinstallAct, SIGNAL('triggered()'), self.__deinstallPlugin) self.actions.append(self.pluginDeinstallAct) self.pluginRepoAct = E4Action(self.trUtf8('Plugin Repository'), UI.PixmapCache.getIcon("pluginRepository.png"), self.trUtf8('Plugin &Repository...'), 0, 0, self, 'plugin_repository') self.pluginRepoAct.setStatusTip(self.trUtf8( 'Show Plugins available for download')) self.pluginRepoAct.setWhatsThis(self.trUtf8( """Plugin Repository...""" """

    This opens a dialog, that shows a list of plugins """ """available on the Internet.

    """ )) self.connect(self.pluginRepoAct, SIGNAL('triggered()'), self.__showPluginsAvailable) self.actions.append(self.pluginRepoAct) # initialize viewmanager actions self.viewmanager.initActions() # initialize debugger actions self.debuggerUI.initActions() # initialize project actions self.project.initActions() # initialize multi project actions self.multiProject.initActions() def __initQtDocActions(self): """ Private slot to initilize the action to show the Qt documentation. """ self.qt4DocAct = E4Action(self.trUtf8('Qt4 Documentation'), self.trUtf8('Qt&4 Documentation'), 0, 0, self, 'qt4_documentation') self.qt4DocAct.setStatusTip(self.trUtf8('Open Qt4 Documentation')) self.qt4DocAct.setWhatsThis(self.trUtf8( """Qt4 Documentation""" """

    Display the Qt4 Documentation. Dependant upon your settings, this""" """ will either show the help in Eric's internal help viewer, or execute""" """ a web browser or Qt Assistant.

    """ )) self.connect(self.qt4DocAct, SIGNAL('triggered()'), self.__showQt4Doc) self.actions.append(self.qt4DocAct) self.pyqt4DocAct = E4Action(self.trUtf8('PyQt4 Documentation'), self.trUtf8('P&yQt4 Documentation'), 0, 0, self, 'pyqt4_documentation') self.pyqt4DocAct.setStatusTip(self.trUtf8('Open PyQt4 Documentation')) self.pyqt4DocAct.setWhatsThis(self.trUtf8( """PyQt4 Documentation""" """

    Display the PyQt4 Documentation. Dependant upon your settings, this""" """ will either show the help in Eric's internal help viewer, or execute""" """ a web browser or Qt Assistant.

    """ )) self.connect(self.pyqt4DocAct, SIGNAL('triggered()'), self.__showPyQt4Doc) self.actions.append(self.pyqt4DocAct) def __initKdeDocActions(self): """ Private slot to initilize the action to show the KDE4 documentation. """ if KdeQt.isKDEAvailable(): self.pykde4DocAct = E4Action(self.trUtf8('PyKDE4 Documentation'), self.trUtf8('Py&KDE4 Documentation'), 0, 0, self, 'pykde4_documentation') self.pykde4DocAct.setStatusTip(self.trUtf8('Open PyKDE4 Documentation')) self.pykde4DocAct.setWhatsThis(self.trUtf8( """PyKDE4 Documentation""" """

    Display the PyKDE4 Documentation. Dependant upon your settings, """ """this will either show the help in Eric's internal help viewer, or """ """execute a web browser or Qt Assistant.

    """ )) self.connect(self.pykde4DocAct, SIGNAL('triggered()'), self.__showPyKDE4Doc) self.actions.append(self.pykde4DocAct) else: self.pykde4DocAct = None def __initPythonDocAction(self): """ Private slot to initilize the action to show the Python documentation. """ self.pythonDocAct = E4Action(self.trUtf8('Python Documentation'), self.trUtf8('&Python Documentation'), 0, 0, self, 'python_documentation') self.pythonDocAct.setStatusTip(self.trUtf8('Open Python Documentation')) self.pythonDocAct.setWhatsThis(self.trUtf8( """Python Documentation""" """

    Display the python documentation.""" """ If no documentation directory is configured,""" """ the location of the python documentation is assumed to be the doc""" """ directory underneath the location of the python executable on""" """ Windows and /usr/share/doc/packages/python/html on Unix.""" """ Set PYTHONDOCDIR in your environment to override this.

    """ )) self.connect(self.pythonDocAct, SIGNAL('triggered()'), self.__showPythonDoc) self.actions.append(self.pythonDocAct) def __initEricDocAction(self): """ Private slot to initialize the action to show the eric4 documentation. """ self.ericDocAct = E4Action(self.trUtf8("Eric API Documentation"), self.trUtf8('&Eric API Documentation'), 0, 0, self, 'eric_documentation') self.ericDocAct.setStatusTip(self.trUtf8("Open Eric API Documentation")) self.ericDocAct.setWhatsThis(self.trUtf8( """Eric API Documentation""" """

    Display the Eric API documentation.""" """ The location for the documentation is the Documentation/Source""" """ subdirectory of the eric4 installation directory.

    """ )) self.connect(self.ericDocAct, SIGNAL('triggered()'), self.__showEricDoc) self.actions.append(self.ericDocAct) def __initPySideDocActions(self): """ Private slot to initilize the action to show the PySide documentation. """ try: import PySide self.pysideDocAct = E4Action(self.trUtf8('PySide Documentation'), self.trUtf8('Py&Side Documentation'), 0, 0, self, 'pyside_documentation') self.pysideDocAct.setStatusTip(self.trUtf8('Open PySide Documentation')) self.pysideDocAct.setWhatsThis(self.trUtf8( """PySide Documentation""" """

    Display the PySide Documentation. Dependant upon your settings, """ """this will either show the help in Eric's internal help viewer, or """ """execute a web browser or Qt Assistant.

    """ )) self.connect(self.pysideDocAct, SIGNAL('triggered()'), self.__showPySideDoc) self.actions.append(self.pysideDocAct) del PySide except ImportError: self.pysideDocAct = None def __initMenus(self): """ Private slot to create the menus. """ self.__menus = {} mb = self.menuBar() self.__menus["file"] = self.viewmanager.initFileMenu() mb.addMenu(self.__menus["file"]) self.__menus["file"].addSeparator() self.__menus["file"].addAction(self.exitAct) act = self.__menus["file"].actions()[0] sep = self.__menus["file"].insertSeparator(act) self.__menus["file"].insertAction(sep, self.newWindowAct) self.connect(self.__menus["file"], SIGNAL('aboutToShow()'), self.__showFileMenu) self.__menus["edit"] = self.viewmanager.initEditMenu() mb.addMenu(self.__menus["edit"]) self.__menus["view"] = self.viewmanager.initViewMenu() mb.addMenu(self.__menus["view"]) self.__menus["start"], self.__menus["debug"] = self.debuggerUI.initMenus() mb.addMenu(self.__menus["start"]) mb.addMenu(self.__menus["debug"]) self.__menus["unittest"] = QMenu(self.trUtf8('&Unittest'), self) self.__menus["unittest"].setTearOffEnabled(True) mb.addMenu(self.__menus["unittest"]) self.__menus["unittest"].addAction(self.utDialogAct) self.__menus["unittest"].addSeparator() self.__menus["unittest"].addAction(self.utRestartAct) self.__menus["unittest"].addAction(self.utScriptAct) self.__menus["unittest"].addAction(self.utProjectAct) self.__menus["multiproject"] = self.multiProject.initMenu() mb.addMenu(self.__menus["multiproject"]) self.__menus["project"] = self.project.initMenu() mb.addMenu(self.__menus["project"]) self.__menus["extras"] = QMenu(self.trUtf8('E&xtras'), self) self.__menus["extras"].setTearOffEnabled(True) self.connect(self.__menus["extras"], SIGNAL('aboutToShow()'), self.__showExtrasMenu) mb.addMenu(self.__menus["extras"]) self.viewmanager.addToExtrasMenu(self.__menus["extras"]) self.__menus["wizards"] = QMenu(self.trUtf8('Wi&zards'), self) self.__menus["wizards"].setTearOffEnabled(True) self.connect(self.__menus["wizards"], SIGNAL('aboutToShow()'), self.__showWizardsMenu) self.wizardsMenuAct = self.__menus["extras"].addMenu(self.__menus["wizards"]) self.wizardsMenuAct.setEnabled(False) self.__menus["macros"] = self.viewmanager.initMacroMenu() self.__menus["extras"].addMenu(self.__menus["macros"]) self.__menus["tools"] = QMenu(self.trUtf8('&Tools'), self) self.connect(self.__menus["tools"], SIGNAL('aboutToShow()'), self.__showToolsMenu) self.connect(self.__menus["tools"], SIGNAL('triggered(QAction *)'), self.__toolExecute) self.toolGroupsMenu = QMenu(self.trUtf8("Select Tool Group"), self) self.connect(self.toolGroupsMenu, SIGNAL('aboutToShow()'), self.__showToolGroupsMenu) self.connect(self.toolGroupsMenu, SIGNAL('triggered(QAction *)'), self.__toolGroupSelected) self.toolGroupsMenuTriggered = False self.__menus["extras"].addMenu(self.__menus["tools"]) self.__menus["settings"] = QMenu(self.trUtf8('Se&ttings'), self) mb.addMenu(self.__menus["settings"]) self.__menus["settings"].setTearOffEnabled(True) self.__menus["settings"].addAction(self.prefAct) self.__menus["settings"].addAction(self.prefExportAct) self.__menus["settings"].addAction(self.prefImportAct) self.__menus["settings"].addSeparator() self.__menus["settings"].addAction(self.reloadAPIsAct) self.__menus["settings"].addSeparator() self.__menus["settings"].addAction(self.configViewProfilesAct) self.__menus["settings"].addAction(self.configToolBarsAct) self.__menus["settings"].addSeparator() self.__menus["settings"].addAction(self.shortcutsAct) self.__menus["settings"].addAction(self.exportShortcutsAct) self.__menus["settings"].addAction(self.importShortcutsAct) self.__menus["settings"].addSeparator() self.__menus["settings"].addAction(self.showExternalToolsAct) self.__menus["window"] = QMenu(self.trUtf8('&Window'), self) mb.addMenu(self.__menus["window"]) self.__menus["window"].setTearOffEnabled(True) self.connect(self.__menus["window"], SIGNAL('aboutToShow()'), self.__showWindowMenu) self.__menus["toolbars"] = \ QMenu(self.trUtf8("&Toolbars"), self.__menus["window"]) self.__menus["toolbars"].setTearOffEnabled(True) self.connect(self.__menus["toolbars"], SIGNAL('aboutToShow()'), self.__showToolbarsMenu) self.connect(self.__menus["toolbars"], SIGNAL('triggered(QAction *)'), self.__TBMenuTriggered) self.__showWindowMenu() # to initialize these actions self.__menus["bookmarks"] = self.viewmanager.initBookmarkMenu() mb.addMenu(self.__menus["bookmarks"]) self.__menus["bookmarks"].setTearOffEnabled(True) self.__menus["plugins"] = QMenu(self.trUtf8('P&lugins'), self) mb.addMenu(self.__menus["plugins"]) self.__menus["plugins"].setTearOffEnabled(True) self.__menus["plugins"].addAction(self.pluginInfoAct) self.__menus["plugins"].addAction(self.pluginInstallAct) self.__menus["plugins"].addAction(self.pluginDeinstallAct) self.__menus["plugins"].addSeparator() self.__menus["plugins"].addAction(self.pluginRepoAct) self.__menus["plugins"].addSeparator() self.__menus["plugins"].addAction( self.trUtf8("Configure..."), self.__pluginsConfigure) mb.addSeparator() self.__menus["help"] = QMenu(self.trUtf8('&Help'), self) mb.addMenu(self.__menus["help"]) self.__menus["help"].setTearOffEnabled(True) self.__menus["help"].addAction(self.helpviewerAct) self.__menus["help"].addSeparator() self.__menus["help"].addAction(self.ericDocAct) self.__menus["help"].addAction(self.pythonDocAct) self.__menus["help"].addAction(self.qt4DocAct) self.__menus["help"].addAction(self.pyqt4DocAct) if self.pykde4DocAct is not None: self.__menus["help"].addAction(self.pykde4DocAct) if self.pysideDocAct is not None: self.__menus["help"].addAction(self.pysideDocAct) self.__menus["help"].addSeparator() self.__menus["help"].addAction(self.versionAct) self.__menus["help"].addSeparator() self.__menus["help"].addAction(self.checkUpdateAct) self.__menus["help"].addAction(self.showVersionsAct) self.__menus["help"].addSeparator() self.__menus["help"].addAction(self.reportBugAct) self.__menus["help"].addAction(self.requestFeatureAct) self.__menus["help"].addSeparator() self.__menus["help"].addAction(self.whatsThisAct) self.connect(self.__menus["help"], SIGNAL('aboutToShow()'), self.__showHelpMenu) def getToolBarIconSize(self): """ Public method to get the toolbar icon size. @return toolbar icon size (QSize) """ return Config.ToolBarIconSize def __initToolbars(self): """ Private slot to create the toolbars. """ filetb = self.viewmanager.initFileToolbar(self.toolbarManager) edittb = self.viewmanager.initEditToolbar(self.toolbarManager) searchtb, quicksearchtb = self.viewmanager.initSearchToolbars(self.toolbarManager) viewtb = self.viewmanager.initViewToolbar(self.toolbarManager) starttb, debugtb = self.debuggerUI.initToolbars(self.toolbarManager) multiprojecttb = self.multiProject.initToolbar(self.toolbarManager) projecttb = self.project.initToolbar(self.toolbarManager) toolstb = QToolBar(self.trUtf8("Tools"), self) unittesttb = QToolBar(self.trUtf8("Unittest"), self) bookmarktb = self.viewmanager.initBookmarkToolbar(self.toolbarManager) spellingtb = self.viewmanager.initSpellingToolbar(self.toolbarManager) settingstb = QToolBar(self.trUtf8("Settings"), self) helptb = QToolBar(self.trUtf8("Help"), self) profilestb = QToolBar(self.trUtf8("Profiles"), self) pluginstb = QToolBar(self.trUtf8("Plugins"), self) toolstb.setIconSize(Config.ToolBarIconSize) unittesttb.setIconSize(Config.ToolBarIconSize) settingstb.setIconSize(Config.ToolBarIconSize) helptb.setIconSize(Config.ToolBarIconSize) profilestb.setIconSize(Config.ToolBarIconSize) pluginstb.setIconSize(Config.ToolBarIconSize) toolstb.setObjectName("ToolsToolbar") unittesttb.setObjectName("UnittestToolbar") settingstb.setObjectName("SettingsToolbar") helptb.setObjectName("HelpToolbar") profilestb.setObjectName("ProfilesToolbar") pluginstb.setObjectName("PluginsToolbar") toolstb.setToolTip(self.trUtf8("Tools")) unittesttb.setToolTip(self.trUtf8("Unittest")) settingstb.setToolTip(self.trUtf8("Settings")) helptb.setToolTip(self.trUtf8("Help")) profilestb.setToolTip(self.trUtf8("Profiles")) pluginstb.setToolTip(self.trUtf8("Plugins")) filetb.addSeparator() filetb.addAction(self.exitAct) act = filetb.actions()[0] sep = filetb.insertSeparator(act) filetb.insertAction(sep, self.newWindowAct) self.toolbarManager.addToolBar(filetb, filetb.windowTitle()) # setup the unittest toolbar unittesttb.addAction(self.utDialogAct) unittesttb.addSeparator() unittesttb.addAction(self.utRestartAct) unittesttb.addAction(self.utScriptAct) unittesttb.addAction(self.utProjectAct) self.toolbarManager.addToolBar(unittesttb, unittesttb.windowTitle()) # setup the tools toolbar if self.designer4Act is not None: toolstb.addAction(self.designer4Act) if self.linguist4Act is not None: toolstb.addAction(self.linguist4Act) toolstb.addAction(self.uipreviewerAct) toolstb.addAction(self.trpreviewerAct) toolstb.addSeparator() toolstb.addAction(self.diffAct) toolstb.addAction(self.compareAct) toolstb.addSeparator() toolstb.addAction(self.sqlBrowserAct) toolstb.addSeparator() toolstb.addAction(self.miniEditorAct) toolstb.addAction(self.iconEditorAct) toolstb.addSeparator() toolstb.addAction(self.webBrowserAct) self.toolbarManager.addToolBar(toolstb, toolstb.windowTitle()) # setup the settings toolbar settingstb.addAction(self.prefAct) settingstb.addAction(self.configViewProfilesAct) settingstb.addAction(self.configToolBarsAct) settingstb.addAction(self.shortcutsAct) settingstb.addAction(self.showExternalToolsAct) self.toolbarManager.addToolBar(settingstb, settingstb.windowTitle()) self.toolbarManager.addAction(self.exportShortcutsAct, settingstb.windowTitle()) self.toolbarManager.addAction(self.importShortcutsAct, settingstb.windowTitle()) # setup the help toolbar helptb.addAction(self.whatsThisAct) self.toolbarManager.addToolBar(helptb, helptb.windowTitle()) self.toolbarManager.addAction(self.helpviewerAct, helptb.windowTitle()) # setup the view profiles toolbar profilestb.addActions(self.viewProfileActGrp.actions()) self.toolbarManager.addToolBar(profilestb, profilestb.windowTitle()) # setup the plugins toolbar pluginstb.addAction(self.pluginInfoAct) pluginstb.addAction(self.pluginInstallAct) pluginstb.addAction(self.pluginDeinstallAct) pluginstb.addSeparator() pluginstb.addAction(self.pluginRepoAct) self.toolbarManager.addToolBar(pluginstb, pluginstb.windowTitle()) # add the various toolbars self.addToolBar(filetb) self.addToolBar(edittb) self.addToolBar(searchtb) self.addToolBar(quicksearchtb) self.addToolBar(viewtb) self.addToolBar(starttb) self.addToolBar(debugtb) self.addToolBar(multiprojecttb) self.addToolBar(projecttb) self.addToolBar(Qt.RightToolBarArea, settingstb) self.addToolBar(Qt.RightToolBarArea, toolstb) self.addToolBar(helptb) self.addToolBar(bookmarktb) self.addToolBar(spellingtb) self.addToolBar(unittesttb) self.addToolBar(profilestb) self.addToolBar(pluginstb) # hide toolbars not wanted in the initial layout searchtb.hide() quicksearchtb.hide() viewtb.hide() debugtb.hide() multiprojecttb.hide() helptb.hide() spellingtb.hide() unittesttb.hide() pluginstb.hide() # just add new toolbars to the end of the list self.__toolbars = {} self.__toolbars["file"] = [filetb.windowTitle(), filetb] self.__toolbars["edit"] = [edittb.windowTitle(), edittb] self.__toolbars["search"] = [searchtb.windowTitle(), searchtb] self.__toolbars["view"] = [viewtb.windowTitle(), viewtb] self.__toolbars["start"] = [starttb.windowTitle(), starttb] self.__toolbars["debug"] = [debugtb.windowTitle(), debugtb] self.__toolbars["project"] = [projecttb.windowTitle(), projecttb] self.__toolbars["tools"] = [toolstb.windowTitle(), toolstb] self.__toolbars["help"] = [helptb.windowTitle(), helptb] self.__toolbars["settings"] = [settingstb.windowTitle(), settingstb] self.__toolbars["bookmarks"] = [bookmarktb.windowTitle(), bookmarktb] self.__toolbars["unittest"] = [unittesttb.windowTitle(), unittesttb] self.__toolbars["view_profiles"] = [profilestb.windowTitle(), profilestb] self.__toolbars["plugins"] = [pluginstb.windowTitle(), pluginstb] self.__toolbars["quicksearch"] = [quicksearchtb.windowTitle(), quicksearchtb] self.__toolbars["multiproject"] = [multiprojecttb.windowTitle(), multiprojecttb] self.__toolbars["spelling"] = [spellingtb.windowTitle(), spellingtb] def __initDebugToolbarsLayout(self): """ Private slot to initialize the toolbars layout for the debug profile. """ # Step 1: set the edit profile to be sure self.__setEditProfile() # Step 2: switch to debug profile and do the layout initSize = self.size() self.setDebugProfile() self.__toolbars["project"][1].hide() self.__toolbars["debug"][1].show() self.resize(initSize) # Step 3: switch back to edit profile self.__setEditProfile() def __initStatusbar(self): """ Private slot to set up the status bar. """ self.__statusBar = self.statusBar() self.__statusBar.setSizeGripEnabled(True) self.sbLanguage = QLabel(self.__statusBar) self.__statusBar.addPermanentWidget(self.sbLanguage) self.sbLanguage.setWhatsThis(self.trUtf8( """

    This part of the status bar displays the""" """ current editors language.

    """ )) self.sbEncoding = QLabel(self.__statusBar) self.__statusBar.addPermanentWidget(self.sbEncoding) self.sbEncoding.setWhatsThis(self.trUtf8( """

    This part of the status bar displays the""" """ current editors encoding.

    """ )) self.sbEol = QLabel(self.__statusBar) self.__statusBar.addPermanentWidget(self.sbEol) self.sbEol.setWhatsThis(self.trUtf8( """

    This part of the status bar displays the""" """ current editors eol setting.

    """ )) self.sbWritable = QLabel(self.__statusBar) self.__statusBar.addPermanentWidget(self.sbWritable) self.sbWritable.setWhatsThis(self.trUtf8( """

    This part of the status bar displays an indication of the""" """ current editors files writability.

    """ )) self.sbFile = E4SqueezeLabelPath(self.__statusBar) self.sbFile.setMaximumWidth(500) self.sbFile.setMinimumWidth(100) self.__statusBar.addPermanentWidget(self.sbFile, True) self.sbFile.setWhatsThis(self.trUtf8( """

    This part of the status bar displays the name of the file of""" """ the current editor.

    """ )) self.sbLine = QLabel(self.__statusBar) self.__statusBar.addPermanentWidget(self.sbLine) self.sbLine.setWhatsThis(self.trUtf8( """

    This part of the status bar displays the line number of the""" """ current editor.

    """ )) self.sbPos = QLabel(self.__statusBar) self.__statusBar.addPermanentWidget(self.sbPos) self.sbPos.setWhatsThis(self.trUtf8( """

    This part of the status bar displays the cursor position of""" """ the current editor.

    """ )) self.viewmanager.setSbInfo(self.sbFile, self.sbLine, self.sbPos, self.sbWritable, self.sbEncoding, self.sbLanguage, self.sbEol) self.sbVcsMonitorLed = StatusMonitorLed(self.project, self.__statusBar) self.__statusBar.addPermanentWidget(self.sbVcsMonitorLed) def __initExternalToolsActions(self): """ Private slot to create actions for the configured external tools. """ self.toolGroupActions = {} for toolGroup in self.toolGroups: category = self.trUtf8("External Tools/%1").arg(toolGroup[0]) for tool in toolGroup[1]: if tool['menutext'] != '--': act = QAction(UI.PixmapCache.getIcon(tool['icon']), tool['menutext'], self) act.setObjectName("%s@@%s" % (toolGroup[0], unicode(tool['menutext']))) self.connect(act, SIGNAL("triggered()"), self.__toolActionTriggered) self.toolGroupActions[unicode(act.objectName())] = act self.toolbarManager.addAction(act, category) def __updateExternalToolsActions(self): """ Private method to update the external tools actions for the current tool group. """ toolGroup = self.toolGroups[self.currentToolGroup] groupkey = "%s@@" % toolGroup[0] groupActionKeys = [] # step 1: get actions for this group for key in self.toolGroupActions: if key.startswith(groupkey): groupActionKeys.append(key) # step 2: build keys for all actions i.a.w. current configuration ckeys = [] for tool in toolGroup[1]: if tool['menutext'] != '--': ckeys.append("%s@@%s" % (toolGroup[0], unicode(tool['menutext']))) # step 3: remove all actions not configured any more for key in groupActionKeys: if key not in ckeys: self.toolbarManager.removeAction(self.toolGroupActions[key]) self.disconnect(self.toolGroupActions[key], SIGNAL("triggered()"), self.__toolActionTriggered) del self.toolGroupActions[key] # step 4: add all newly configured tools category = self.trUtf8("External Tools/%1").arg(toolGroup[0]) for tool in toolGroup[1]: if tool['menutext'] != '--': key = "%s@@%s" % (toolGroup[0], unicode(tool['menutext'])) if key not in groupActionKeys: act = QAction(UI.PixmapCache.getIcon(tool['icon']), tool['menutext'], self) act.setObjectName(key) self.connect(act, SIGNAL("triggered()"), self.__toolActionTriggered) self.toolGroupActions[key] = act self.toolbarManager.addAction(act, category) def __showFileMenu(self): """ Private slot to display the File menu. """ self.emit(SIGNAL("showMenu"), "File", self.__menus["file"]) def __showExtrasMenu(self): """ Private slot to display the Extras menu. """ self.emit(SIGNAL("showMenu"), "Extras", self.__menus["extras"]) def __showWizardsMenu(self): """ Private slot to display the Wizards menu. """ self.emit(SIGNAL("showMenu"), "Wizards", self.__menus["wizards"]) def __showHelpMenu(self): """ Private slot to display the Help menu. """ self.checkUpdateAct.setEnabled(not self.__inVersionCheck) self.showVersionsAct.setEnabled(not self.__inVersionCheck) self.emit(SIGNAL("showMenu"), "Help", self.__menus["help"]) def __showNext(self): """ Private slot used to show the next tab or file. """ fwidget = QApplication.focusWidget() while fwidget and not hasattr(fwidget, 'nextTab'): fwidget = fwidget.parent() if fwidget: fwidget.nextTab() def __showPrevious(self): """ Private slot used to show the previous tab or file. """ fwidget = QApplication.focusWidget() while fwidget and not hasattr(fwidget, 'prevTab'): fwidget = fwidget.parent() if fwidget: fwidget.prevTab() def __switchTab(self): """ Private slot used to switch between the current and the previous current tab. """ fwidget = QApplication.focusWidget() while fwidget and not hasattr(fwidget, 'switchTab'): fwidget = fwidget.parent() if fwidget: fwidget.switchTab() def __whatsThis(self): """ Private slot called in to enter Whats This mode. """ QWhatsThis.enterWhatsThisMode() def __showVersions(self): """ Private slot to handle the Versions dialog. """ try: import sipconfig sip_version_str = sipconfig.Configuration().sip_version_str except ImportError: sip_version_str = "sip version not available" if KdeQt.isKDEAvailable(): versionText = self.trUtf8( """

    Version Numbers

    """ """""") versionText.append(QString( """""")\ .arg(sys.version.split()[0])) versionText.append(QString( """""")\ .arg(KdeQt.kdeVersionString())) versionText.append(QString( """""")\ .arg(KdeQt.pyKdeVersionString())) versionText.append(QString( """""")\ .arg(qVersion())) versionText.append(QString( """""")\ .arg(PYQT_VERSION_STR)) versionText.append(QString( """""")\ .arg(sip_version_str)) versionText.append(QString( """""")\ .arg(QSCINTILLA_VERSION_STR)) versionText.append(QString( """""")\ .arg(Program)\ .arg(Version)) versionText.append(self.trUtf8("""
    Python%1
    KDE%1
    PyKDE%1
    Qt%1
    PyQt%1
    sip%1
    QScintilla%1
    %1%2
    """)) else: versionText = self.trUtf8( """

    Version Numbers

    """ """""") versionText.append(QString( """""")\ .arg(sys.version.split()[0])) versionText.append(QString( """""")\ .arg(qVersion())) versionText.append(QString( """""")\ .arg(PYQT_VERSION_STR)) versionText.append(QString( """""")\ .arg(sip_version_str)) versionText.append(QString( """""")\ .arg(QSCINTILLA_VERSION_STR)) versionText.append(QString( """""")\ .arg(Program)\ .arg(Version)) versionText.append(self.trUtf8("""
    Python%1
    Qt%1
    PyQt%1
    sip%1
    QScintilla%1
    %1%2
    """)) KQMessageBox.about(self, Program, versionText) def __reportBug(self): """ Private slot to handle the Report Bug dialog. """ self.showEmailDialog("bug") def __requestFeature(self): """ Private slot to handle the Feature Request dialog. """ self.showEmailDialog("feature") def showEmailDialog(self, mode, attachFile = None, deleteAttachFile = False): """ Private slot to show the email dialog in a given mode. @param mode mode of the email dialog (string, "bug" or "feature") @param attachFile name of a file to attach to the email (string or QString) @param deleteAttachFile flag indicating to delete the attached file after it has been sent (boolean) """ if Preferences.getUser("UseSystemEmailClient"): self.__showSystemEmailClient(mode, attachFile, deleteAttachFile) else: if Preferences.getUser("Email").isEmpty() or \ Preferences.getUser("MailServer").isEmpty(): KQMessageBox.critical(None, self.trUtf8("Report Bug"), self.trUtf8("""Email address or mail server address is empty.""" """ Please configure your Email settings in the""" """ Preferences Dialog.""")) self.showPreferences("emailPage") return self.dlg = EmailDialog(mode = mode) if attachFile is not None: self.dlg.attachFile(attachFile, deleteAttachFile) self.dlg.show() def __showSystemEmailClient(self, mode, attachFile = None, deleteAttachFile = False): """ Private slot to show the system email dialog. @param mode mode of the email dialog (string, "bug" or "feature") @param attachFile name of a file to put into the body of the email (string or QString) @param deleteAttachFile flag indicating to delete the file after it has been read (boolean) """ if mode == "feature": address = FeatureAddress else: address = BugAddress subject = "[eric4] " if attachFile is not None: f = open(attachFile, "r") body = f.read() f.close() if deleteAttachFile: os.remove(attachFile) else: body = "\r\n----\r\n%s----\r\n%s----\r\n%s" % \ (Utilities.generateVersionInfo("\r\n"), Utilities.generatePluginsVersionInfo("\r\n"), Utilities.generateDistroInfo("\r\n")) url = QUrl("mailto:%s" % address) url.addQueryItem("subject", subject) url.addQueryItem("body", body) QDesktopServices.openUrl(url) def checkForErrorLog(self): """ Public method to check for the presence of an error log and ask the user, what to do with it. """ if Preferences.getUI("CheckErrorLog"): logFile = os.path.join(unicode(Utilities.getConfigDir()), "eric4_error.log") if os.path.exists(logFile): from .ErrorLogDialog import ErrorLogDialog dlg = ErrorLogDialog(logFile, self) dlg.exec_() def __compareFiles(self): """ Private slot to handle the Compare Files dialog. """ aw = self.viewmanager.activeWindow() fn = aw and aw.getFileName() or None self.diffDlg.show(fn) def __compareFilesSbs(self): """ Private slot to handle the Compare Files dialog. """ aw = self.viewmanager.activeWindow() fn = aw and aw.getFileName() or None self.compareDlg.show(fn) def __openMiniEditor(self): """ Private slot to show a mini editor window. """ editor = MiniEditor(parent = self) editor.show() def addE4Actions(self, actions, type): """ Public method to add actions to the list of actions. @param type string denoting the action set to get. It must be one of "ui" or "wizards". @param actions list of actions to be added (list of E4Action) """ if type == 'ui': self.actions.extend(actions) elif type == 'wizards': self.wizardsActions.extend(actions) def removeE4Actions(self, actions, type = 'ui'): """ Public method to remove actions from the list of actions. @param type string denoting the action set to get. It must be one of "ui" or "wizards". @param actions list of actions (list of E4Action) """ for act in actions: try: if type == 'ui': self.actions.remove(act) elif type == 'wizards': self.wizardsActions.remove(act) except ValueError: pass def getActions(self, type): """ Public method to get a list of all actions. @param type string denoting the action set to get. It must be one of "ui" or "wizards". @return list of all actions (list of E4Action) """ if type == 'ui': return self.actions[:] elif type == 'wizards': return self.wizardsActions[:] else: return [] def getMenuAction(self, menuName, actionName): """ Public method to get a reference to an action of a menu. @param menuName name of the menu to search in (string) @param actionName object name of the action to search for (string or QString) """ try: menu = self.__menus[menuName] except KeyError: return None for act in menu.actions(): if act.objectName() == actionName: return act return None def getMenuBarAction(self, menuName): """ Public method to get a reference to an action of the main menu. @param menuName name of the menu to search in (string) """ try: menu = self.__menus[menuName] except KeyError: return None return menu.menuAction() def getMenu(self, name): """ Public method to get a reference to a specific menu. @param name name of the menu (string) @return reference to the menu (QMenu) """ try: return self.__menus[name] except KeyError: return None def registerToolbar(self, name, text, toolbar): """ Public method to register a toolbar. This method must be called in order to make a toolbar manageable by the UserInterface object. @param name name of the toolbar (string). This is used as the key into the dictionary of toolbar references. @param text user visible text for the toolbar entry (QString) @param toolbar reference to the toolbar to be registered (QToolBar) @exception KeyError raised, if a toolbar with the given name was already registered """ if self.__toolbars.has_key(name): raise KeyError("Toolbar '%s' already registered." % name) self.__toolbars[name] = [text, toolbar] def reregisterToolbar(self, name, text): """ Public method to change the visible text for the named toolbar. @param name name of the toolbar to be changed (string) @param text new user visible text for the toolbar entry (QString) """ if name in self.__toolbars: self.__toolbars[name][0] = text def unregisterToolbar(self, name): """ Public method to unregister a toolbar. @param name name of the toolbar (string). """ if self.__toolbars.has_key(name): del self.__toolbars[name] def getToolbar(self, name): """ Public method to get a reference to a specific toolbar. @param name name of the toolbar (string) @return reference to the toolbar entry (tuple of QString and QToolBar) """ try: return self.__toolbars[name] except KeyError: return None def getLocale(self): """ Public method to get the locale of the IDE. @return locale of the IDE (string or None) """ return self.locale def __quit(self): """ Private method to quit the application. """ if self.__shutdown(): e4App().closeAllWindows() def __restart(self): """ Private method to restart the application. """ res = KQMessageBox.question(None, self.trUtf8("Restart application"), self.trUtf8("""The application needs to be restarted. Do it now?"""), QMessageBox.StandardButtons(\ QMessageBox.No | \ QMessageBox.Yes), QMessageBox.Yes) if res == QMessageBox.Yes and self.__shutdown(): e4App().closeAllWindows() program = sys.executable eric4 = os.path.join(getConfig("ericDir"), "eric4.py") args = QStringList(eric4) args.append("--start-session") for arg in self.__restartArgs: args.append(arg) QProcess.startDetached(program, args) def __newWindow(self): """ Private slot to start a new instance of eric4. """ if not Preferences.getUI("SingleApplicationMode"): # start eric4 without any arguments program = sys.executable eric4 = os.path.join(getConfig("ericDir"), "eric4.py") args = [eric4] QProcess.startDetached(program, args) def __showToolsMenu(self): """ Private slot to display the Tools menu. """ self.__menus["tools"].clear() self.__menus["tools"].addMenu(self.toolGroupsMenu) act = self.__menus["tools"].addAction(self.trUtf8("Configure Tool Groups ..."), self.__toolGroupsConfiguration) act.setData(QVariant(-1)) act = self.__menus["tools"].addAction(\ self.trUtf8("Configure current Tool Group ..."), self.__toolsConfiguration) act.setData(QVariant(-2)) self.__menus["tools"].addSeparator() if self.currentToolGroup == -1: act.setEnabled(False) # add the default entries if self.designer4Act is not None: self.__menus["tools"].addAction(self.designer4Act) if self.linguist4Act is not None: self.__menus["tools"].addAction(self.linguist4Act) self.__menus["tools"].addAction(self.uipreviewerAct) self.__menus["tools"].addAction(self.trpreviewerAct) self.__menus["tools"].addAction(self.diffAct) self.__menus["tools"].addAction(self.compareAct) self.__menus["tools"].addAction(self.sqlBrowserAct) self.__menus["tools"].addAction(self.miniEditorAct) self.__menus["tools"].addAction(self.iconEditorAct) self.__menus["tools"].addAction(self.webBrowserAct) elif self.currentToolGroup == -2: act.setEnabled(False) # add the plugin entries self.emit(SIGNAL("showMenu"), "Tools", self.__menus["tools"]) else: # add the configurable entries idx = 0 try: for tool in self.toolGroups[self.currentToolGroup][1]: if tool['menutext'] == '--': self.__menus["tools"].addSeparator() else: act = self.__menus["tools"].addAction(\ UI.PixmapCache.getIcon(tool['icon']), tool['menutext']) act.setData(QVariant(idx)) idx = idx + 1 except IndexError: # the current tool group might have been deleted pass def __showToolGroupsMenu(self): """ Private slot to display the Tool Groups menu. """ self.toolGroupsMenu.clear() # add the default entry act = self.toolGroupsMenu.addAction(self.trUtf8("&Builtin Tools")) act.setData(QVariant(-1)) if self.currentToolGroup == -1: font = act.font() font.setBold(True) act.setFont(font) # add the plugins entry act = self.toolGroupsMenu.addAction(self.trUtf8("&Plugin Tools")) act.setData(QVariant(-2)) if self.currentToolGroup == -2: font = act.font() font.setBold(True) act.setFont(font) # add the configurable tool groups idx = 0 for toolGroup in self.toolGroups: act = self.toolGroupsMenu.addAction(toolGroup[0]) act.setData(QVariant(idx)) if self.currentToolGroup == idx: font = act.font() font.setBold(True) act.setFont(font) idx = idx + 1 def __toolGroupSelected(self, act): """ Private slot to set the current tool group. @param act reference to the action that was triggered (QAction) """ self.toolGroupsMenuTriggered = True idx, ok = act.data().toInt() if ok: self.currentToolGroup = idx def __showWindowMenu(self): """ Private slot to display the Window menu. """ self.__menus["window"].clear() self.__menus["window"].addActions(self.viewProfileActGrp.actions()) self.__menus["window"].addSeparator() if self.layout == "Toolboxes": self.__menus["window"].addAction(self.vtAct) self.vtAct.setChecked(not self.vToolboxDock.isHidden()) self.__menus["window"].addAction(self.htAct) self.htAct.setChecked(not self.hToolboxDock.isHidden()) self.__menus["window"].addAction(self.debugViewerAct) self.debugViewerAct.setChecked(not self.debugViewerDock.isHidden()) elif self.layout == "Sidebars": self.__menus["window"].addAction(self.lsbAct) self.lsbAct.setChecked(not self.leftSidebar.isHidden()) self.__menus["window"].addAction(self.bsbAct) self.bsbAct.setChecked(not self.bottomSidebar.isHidden()) self.__menus["window"].addAction(self.debugViewerAct) self.debugViewerAct.setChecked(not self.debugViewerDock.isHidden()) else: # Set the options according to what is being displayed. self.__menus["window"].addAction(self.pbAct) if self.layout == "DockWindows": self.pbAct.setChecked(not self.projectBrowserDock.isHidden()) else: self.pbAct.setChecked(not self.projectBrowser.isHidden()) self.__menus["window"].addAction(self.mpbAct) if self.layout == "DockWindows": self.mpbAct.setChecked(not self.multiProjectBrowserDock.isHidden()) else: self.mpbAct.setChecked(not self.multiProjectBrowser.isHidden()) if not self.embeddedFileBrowser: self.__menus["window"].addAction(self.browserAct) if self.layout == "DockWindows": self.browserAct.setChecked(not self.browserDock.isHidden()) else: self.browserAct.setChecked(not self.browser.isHidden()) self.__menus["window"].addAction(self.debugViewerAct) if self.layout == "DockWindows": self.debugViewerAct.setChecked(not self.debugViewerDock.isHidden()) else: self.debugViewerAct.setChecked(not self.debugViewer.isHidden()) if not self.embeddedShell: self.__menus["window"].addAction(self.shellAct) if self.layout == "DockWindows": self.shellAct.setChecked(not self.shellDock.isHidden()) else: self.shellAct.setChecked(not self.shell.isHidden()) self.__menus["window"].addAction(self.logViewerAct) if self.layout == "DockWindows": self.logViewerAct.setChecked(not self.logViewerDock.isHidden()) else: self.logViewerAct.setChecked(not self.logViewer.isHidden()) self.__menus["window"].addAction(self.taskViewerAct) if self.layout == "DockWindows": self.taskViewerAct.setChecked(not self.taskViewerDock.isHidden()) else: self.taskViewerAct.setChecked(not self.taskViewer.isHidden()) self.__menus["window"].addAction(self.templateViewerAct) if self.layout == "DockWindows": self.templateViewerAct.setChecked(not self.templateViewerDock.isHidden()) else: self.templateViewerAct.setChecked(not self.templateViewer.isHidden()) # Insert menu entry for toolbar settings self.__menus["window"].addSeparator() self.__menus["window"].addMenu(self.__menus["toolbars"]) # Now do any Source Viewer related stuff. self.viewmanager.showWindowMenu(self.__menus["window"]) self.emit(SIGNAL("showMenu"), "Window", self.__menus["window"]) def __showToolbarsMenu(self): """ Private slot to display the Toolbars menu. """ self.__menus["toolbars"].clear() tbList = [] for name, (text, tb) in self.__toolbars.items(): tbList.append((unicode(text), tb, name)) tbList.sort() for text, tb, name in tbList: act = self.__menus["toolbars"].addAction(text) act.setCheckable(True) act.setData(QVariant(name)) act.setChecked(not tb.isHidden()) self.__menus["toolbars"].addSeparator() self.__toolbarsShowAllAct = \ self.__menus["toolbars"].addAction(self.trUtf8("&Show all")) self.__toolbarsHideAllAct = \ self.__menus["toolbars"].addAction(self.trUtf8("&Hide all")) def __TBMenuTriggered(self, act): """ Private method to handle the toggle of a toolbar. @param act reference to the action that was triggered (QAction) """ if act == self.__toolbarsShowAllAct: for text, tb in self.__toolbars.values(): tb.show() if self.__menus["toolbars"].isTearOffMenuVisible(): self.__showToolbarsMenu() elif act == self.__toolbarsHideAllAct: for text, tb in self.__toolbars.values(): tb.hide() if self.__menus["toolbars"].isTearOffMenuVisible(): self.__showToolbarsMenu() else: name = unicode(act.data().toString()) if name: tb = self.__toolbars[name][1] if act.isChecked(): tb.show() else: tb.hide() def __saveCurrentViewProfile(self, save): """ Private slot to save the window geometries of the active profile. @param save flag indicating that the current profile should be saved (boolean) """ if self.currentProfile and save: # step 1: save the window geometries of the active profile if self.layout == "DockWindows": state = self.saveState() self.profiles[self.currentProfile][1] = str(state) elif self.layout in ["Toolboxes", "Sidebars"]: state = self.saveState() self.profiles[self.currentProfile][4] = str(state) if self.layout == "Sidebars": state = self.horizontalSplitter.saveState() self.profiles[self.currentProfile][6][0] = str(state) state = self.verticalSplitter.saveState() self.profiles[self.currentProfile][6][1] = str(state) state = self.leftSidebar.saveState() self.profiles[self.currentProfile][6][2] = str(state) state = self.bottomSidebar.saveState() self.profiles[self.currentProfile][6][3] = str(state) elif self.layout == "FloatingWindows": state = self.saveState() self.profiles[self.currentProfile][3] = str(state) for window, i in zip(self.windows, range(len(self.windows))): if window is not None: self.profiles[self.currentProfile][2][i] = \ str(window.saveGeometry()) # step 2: save the visibility of the windows of the active profile for window, i in zip(self.windows, range(len(self.windows))): if window is not None: self.profiles[self.currentProfile][0][i] = window.isVisible() if self.layout == "Toolboxes": self.profiles[self.currentProfile][5][0] = self.vToolboxDock.isVisible() self.profiles[self.currentProfile][5][1] = self.hToolboxDock.isVisible() elif self.layout == "Sidebars": self.profiles[self.currentProfile][5][0] = self.leftSidebar.isVisible() self.profiles[self.currentProfile][5][1] = self.bottomSidebar.isVisible() Preferences.setUI("ViewProfiles", self.profiles) def __activateViewProfile(self, name, save = True): """ Private slot to activate a view profile. @param name name of the profile to be activated (string) @param save flag indicating that the current profile should be saved (boolean) """ if self.currentProfile != name or not save: # step 1: save the active profile self.__saveCurrentViewProfile(save) # step 2: set the window geometries of the new profile if self.layout == "DockWindows": state = QByteArray(self.profiles[name][1]) if not state.isEmpty(): self.restoreState(state) self.__configureDockareaCornerUsage() elif self.layout in ["Toolboxes", "Sidebars"]: state = QByteArray(self.profiles[name][4]) if not state.isEmpty(): self.restoreState(state) if self.layout == "Sidebars": state = QByteArray(self.profiles[name][6][0]) if not state.isEmpty(): self.horizontalSplitter.restoreState(state) state = QByteArray(self.profiles[name][6][1]) if not state.isEmpty(): self.verticalSplitter.restoreState(state) state = QByteArray(self.profiles[name][6][2]) if not state.isEmpty(): self.leftSidebar.restoreState(state) state = QByteArray(self.profiles[name][6][3]) if not state.isEmpty(): self.bottomSidebar.restoreState(state) self.__configureDockareaCornerUsage() elif self.layout == "FloatingWindows": state = QByteArray(self.profiles[name][3]) if not state.isEmpty(): self.restoreState(state) for window, i in zip(self.windows, range(len(self.windows))): if window is not None: geo = QByteArray(self.profiles[name][2][i]) if not geo.isEmpty(): window.restoreGeometry(geo) pass # step 3: activate the windows of the new profile for window, visible in zip(self.windows, self.profiles[name][0]): if window is not None: window.setVisible(visible) if self.layout == "Toolboxes": self.vToolboxDock.setVisible(self.profiles[name][5][0]) self.hToolboxDock.setVisible(self.profiles[name][5][1]) elif self.layout == "Sidebars": self.leftSidebar.setVisible(self.profiles[name][5][0]) self.bottomSidebar.setVisible(self.profiles[name][5][1]) # step 4: remember the new profile self.currentProfile = name # step 5: make sure that cursor of the shell is visible self.shell.ensureCursorVisible() # step 6: make sure, that the toolbars and window menu are shown correctly if self.__menus["toolbars"].isTearOffMenuVisible(): self.__showToolbarsMenu() if self.__menus["window"].isTearOffMenuVisible(): self.__showWindowMenu() def __setEditProfile(self, save = True): """ Private slot to activate the edit view profile. @param save flag indicating that the current profile should be saved (boolean) """ self.__activateViewProfile("edit", save) self.setEditProfileAct.setChecked(True) def __debuggingStarted(self): """ Private slot to handle the start of a debugging session. """ self.setDebugProfile() if self.layout == "Toolboxes": if not self.embeddedShell: self.hToolbox.setCurrentWidget(self.shell) elif self.layout == "Sidebars": if not self.embeddedShell: self.bottomSidebar.setCurrentWidget(self.shell) def setDebugProfile(self, save = True): """ Public slot to activate the debug view profile. @param save flag indicating that the current profile should be saved (boolean) """ self.viewmanager.searchDlg.hide() self.viewmanager.replaceDlg.hide() self.__activateViewProfile("debug", save) self.setDebugProfileAct.setChecked(True) def getViewProfile(self): """ Public method to get the current view profile. @return the name of the current view profile (string) """ return self.currentProfile def __toggleProjectBrowser(self): """ Private slot to handle the toggle of the Project Browser window. """ hasFocus = self.projectBrowser.currentWidget().hasFocus() if self.layout == "DockWindows": shown = self.__toggleWindow(self.projectBrowserDock) else: shown = self.__toggleWindow(self.projectBrowser) if shown: self.__activateProjectBrowser() else: if hasFocus: self.__activateViewmanager() def __activateProjectBrowser(self): """ Private slot to handle the activation of the project browser. """ if self.layout == "DockWindows": self.projectBrowserDock.show() self.projectBrowserDock.raise_() elif self.layout == "Toolboxes": self.vToolboxDock.show() self.vToolbox.setCurrentWidget(self.projectBrowser) elif self.layout == "Sidebars": self.leftSidebar.show() self.leftSidebar.setCurrentWidget(self.projectBrowser) else: self.projectBrowser.show() self.projectBrowser.currentWidget().setFocus(Qt.ActiveWindowFocusReason) def __toggleMultiProjectBrowser(self): """ Private slot to handle the toggle of the Project Browser window. """ hasFocus = self.multiProjectBrowser.hasFocus() if self.layout == "DockWindows": shown = self.__toggleWindow(self.multiProjectBrowserDock) else: shown = self.__toggleWindow(self.multiProjectBrowser) if shown: self.__activateMultiProjectBrowser() else: if hasFocus: self.__activateViewmanager() def __activateMultiProjectBrowser(self): """ Private slot to handle the activation of the project browser. """ if self.layout == "DockWindows": self.multiProjectBrowserDock.show() self.multiProjectBrowserDock.raise_() elif self.layout == "Toolboxes": self.vToolboxDock.show() self.vToolbox.setCurrentWidget(self.multiProjectBrowser) elif self.layout == "Sidebars": self.leftSidebar.show() self.leftSidebar.setCurrentWidget(self.multiProjectBrowser) else: self.multiProjectBrowser.show() self.multiProjectBrowser.setFocus(Qt.ActiveWindowFocusReason) def __toggleDebugViewer(self): """ Private slot to handle the toggle of the debug viewer. """ hasFocus = self.debugViewer.currentWidget().hasFocus() if self.layout in ["DockWindows", "Toolboxes", "Sidebars"]: shown = self.__toggleWindow(self.debugViewerDock) else: shown = self.__toggleWindow(self.debugViewer) if shown: self.__activateDebugViewer() else: if hasFocus: self.__activateViewmanager() def __activateDebugViewer(self): """ Private slot to handle the activation of the debug browser. """ if self.layout in ["DockWindows", "Toolboxes", "Sidebars"]: self.debugViewerDock.show() self.debugViewerDock.raise_() else: self.debugViewer.show() self.debugViewer.currentWidget().setFocus(Qt.ActiveWindowFocusReason) def __toggleShell(self): """ Private slot to handle the toggle of the Shell window . """ hasFocus = self.shell.hasFocus() if self.layout == "DockWindows": shown = self.__toggleWindow(self.shellDock) else: shown = self.__toggleWindow(self.shell) if shown: self.__activateShell() else: if hasFocus: self.__activateViewmanager() def __activateShell(self): """ Private slot to handle the activation of the Shell window. """ if self.embeddedShell: # embedded in debug browser if self.layout in ["DockWindows", "Toolboxes", "Sidebars"]: self.debugViewerDock.show() self.debugViewerDock.raise_() else: self.debugViewer.show() self.debugViewer.setCurrentWidget(self.shell) else: # separate window if self.layout == "DockWindows": self.shellDock.show() self.shellDock.raise_() elif self.layout == "Toolboxes": self.hToolboxDock.show() self.hToolbox.setCurrentWidget(self.shell) elif self.layout == "Sidebars": self.bottomSidebar.show() self.bottomSidebar.setCurrentWidget(self.shell) else: self.shell.show() self.shell.setFocus(Qt.ActiveWindowFocusReason) def __toggleLogViewer(self): """ Private slot to handle the toggle of the Log Viewer window. """ hasFocus = self.logViewer.hasFocus() if self.layout == "DockWindows": shown = self.__toggleWindow(self.logViewerDock) else: shown = self.__toggleWindow(self.logViewer) if shown: self.__activateLogViewer() else: if hasFocus: self.__activateViewmanager() def __activateLogViewer(self): """ Private slot to handle the activation of the Log Viewer. """ if self.layout == "DockWindows": self.logViewerDock.show() self.logViewerDock.raise_() elif self.layout == "Toolboxes": self.hToolboxDock.show() self.hToolbox.setCurrentWidget(self.logViewer) elif self.layout == "Sidebars": self.bottomSidebar.show() self.bottomSidebar.setCurrentWidget(self.logViewer) else: self.logViewer.show() self.logViewer.setFocus(Qt.ActiveWindowFocusReason) def __toggleTaskViewer(self): """ Private slot to handle the toggle of the Task Viewer window. """ hasFocus = self.taskViewer.hasFocus() if self.layout == "DockWindows": shown = self.__toggleWindow(self.taskViewerDock) else: shown = self.__toggleWindow(self.taskViewer) if shown: self.__activateTaskViewer() else: if hasFocus: self.__activateViewmanager() def __activateTaskViewer(self): """ Private slot to handle the activation of the Task Viewer. """ if self.layout == "DockWindows": self.taskViewerDock.show() self.taskViewerDock.raise_() elif self.layout == "Toolboxes": self.hToolboxDock.show() self.hToolbox.setCurrentWidget(self.taskViewer) elif self.layout == "Sidebars": self.bottomSidebar.show() self.bottomSidebar.setCurrentWidget(self.taskViewer) else: self.taskViewer.show() self.taskViewer.setFocus(Qt.ActiveWindowFocusReason) def __toggleTemplateViewer(self): """ Private slot to handle the toggle of the Template Viewer window. """ hasFocus = self.templateViewer.hasFocus() if self.layout == "DockWindows": shown = self.__toggleWindow(self.templateViewerDock) else: shown = self.__toggleWindow(self.templateViewer) if shown: self.__activateTemplateViewer() else: if hasFocus: self.__activateViewmanager() def __activateTemplateViewer(self): """ Private slot to handle the activation of the Template Viewer. """ if self.layout == "DockWindows": self.templateViewerDock.show() self.templateViewerDock.raise_() elif self.layout == "Toolboxes": self.vToolboxDock.show() self.vToolbox.setCurrentWidget(self.templateViewer) elif self.layout == "Sidebars": self.leftSidebar.show() self.leftSidebar.setCurrentWidget(self.templateViewer) else: self.templateViewer.show() self.templateViewer.setFocus(Qt.ActiveWindowFocusReason) def __toggleBrowser(self): """ Private slot to handle the toggle of the File Browser window. """ hasFocus = self.browser.hasFocus() if self.layout == "DockWindows": shown = self.__toggleWindow(self.browserDock) else: shown = self.__toggleWindow(self.browser) if shown: self.__activateBrowser() else: if hasFocus: self.__activateViewmanager() def __activateBrowser(self): """ Private slot to handle the activation of the file browser. """ if self.embeddedFileBrowser == 0: # separate window if self.layout == "DockWindows": self.browserDock.show() self.browserDock.raise_() elif self.layout == "Toolboxes": self.vToolboxDock.show() self.vToolbox.setCurrentWidget(self.browser) elif self.layout == "Sidebars": self.leftSidebar.show() self.leftSidebar.setCurrentWidget(self.browser) else: self.browser.show() elif self.embeddedFileBrowser == 1: # embedded in debug browser if self.layout in ["DockWindows", "Toolboxes", "Sidebars"]: self.debugViewerDock.show() self.debugViewerDock.raise_() else: self.debugViewer.show() self.debugViewer.setCurrentWidget(self.browser) else: # embedded in project browser if self.layout == "DockWindows": self.projectBrowserDock.show() self.projectBrowserDock.raise_() elif self.layout == "Toolboxes": self.vToolboxDock.show() self.vToolbox.setCurrentWidget(self.projectBrowser) elif self.layout == "Sidebars": self.leftSidebar.show() self.leftSidebar.setCurrentWidget(self.projectBrowser) else: self.projectBrowser.show() self.projectBrowser.setCurrentWidget(self.browser) self.browser.setFocus(Qt.ActiveWindowFocusReason) def __toggleVerticalToolbox(self): """ Private slot to handle the toggle of the Vertical Toolbox window. """ hasFocus = self.vToolbox.currentWidget().hasFocus() shown = self.__toggleWindow(self.vToolboxDock) if shown: self.vToolbox.currentWidget().setFocus(Qt.ActiveWindowFocusReason) else: if hasFocus: self.__activateViewmanager() def __toggleHorizontalToolbox(self): """ Private slot to handle the toggle of the Horizontal Toolbox window. """ hasFocus = self.hToolbox.currentWidget().hasFocus() shown = self.__toggleWindow(self.hToolboxDock) if shown: self.hToolbox.currentWidget().setFocus(Qt.ActiveWindowFocusReason) else: if hasFocus: self.__activateViewmanager() def __toggleLeftSidebar(self): """ Private slot to handle the toggle of the left sidebar window. """ hasFocus = self.leftSidebar.currentWidget().hasFocus() shown = self.__toggleWindow(self.leftSidebar) if shown: self.leftSidebar.currentWidget().setFocus(Qt.ActiveWindowFocusReason) else: if hasFocus: self.__activateViewmanager() def __toggleBottomSidebar(self): """ Private slot to handle the toggle of the bottom sidebar window. """ hasFocus = self.bottomSidebar.currentWidget().hasFocus() shown = self.__toggleWindow(self.bottomSidebar) if shown: self.bottomSidebar.currentWidget().setFocus(Qt.ActiveWindowFocusReason) else: if hasFocus: self.__activateViewmanager() def __activateViewmanager(self): """ Private slot to handle the activation of the current editor. """ aw = self.viewmanager.activeWindow() if aw is not None: aw.setFocus(Qt.ActiveWindowFocusReason) def __toggleWindow(self, w): """ Private method to toggle a workspace editor window. @param w reference to the workspace editor window @return flag indicating, if the window was shown (boolean) """ if w.isHidden(): w.show() return True else: w.hide() return False def __toolsConfiguration(self): """ Private slot to handle the tools configuration menu entry. """ dlg = ToolConfigurationDialog(self.toolGroups[self.currentToolGroup][1], self) if dlg.exec_() == QDialog.Accepted: self.toolGroups[self.currentToolGroup][1] = dlg.getToollist() self.__updateExternalToolsActions() def __toolGroupsConfiguration(self): """ Private slot to handle the tool groups configuration menu entry. """ dlg = ToolGroupConfigurationDialog(self.toolGroups, self.currentToolGroup, self) if dlg.exec_() == QDialog.Accepted: self.toolGroups, self.currentToolGroup = dlg.getToolGroups() def __unittest(self): """ Private slot for displaying the unittest dialog. """ self.unittestDialog.show() self.unittestDialog.raise_() def __unittestScript(self, prog = None): """ Private slot for displaying the unittest dialog and run the current script. @param prog the python program to be opened """ if prog is None: aw = self.viewmanager.activeWindow() fn = aw.getFileName() tfn = Utilities.getTestFileName(fn) if os.path.exists(tfn): prog = tfn else: prog = fn self.unittestDialog.insertProg(prog) self.unittestDialog.show() self.unittestDialog.raise_() self.utRestartAct.setEnabled(True) def __unittestProject(self): """ Private slot for displaying the unittest dialog and run the current project. """ fn = self.project.getMainScript(True) if fn: tfn = Utilities.getTestFileName(fn) if os.path.exists(tfn): prog = tfn else: prog = fn else: KQMessageBox.critical(self, self.trUtf8("Unittest Project"), self.trUtf8("There is no main script defined for the" " current project. Aborting")) return self.unittestDialog.insertProg(prog) self.unittestDialog.show() self.unittestDialog.raise_() self.utRestartAct.setEnabled(True) def __unittestRestart(self): """ Private slot to display the unittest dialog and rerun the last test. """ self.unittestDialog.show() self.unittestDialog.raise_() self.unittestDialog.on_startButton_clicked() def __designer(self, fn = None, version = 0): """ Private slot to start the Qt-Designer executable. @param fn filename of the form to be opened @param version indication for the requested version (Qt 4) (integer) """ if fn is not None and version == 0: # determine version from file, if not specified try: f = open(fn, "rb") found = False while not found: uiLine = f.readline() found = uiLine.lower().startswith("The file %1 does not exist or' ' is zero length.

    ') .arg(fn)) return except EnvironmentError: KQMessageBox.critical(self, self.trUtf8('Problem'), self.trUtf8('

    The file %1 does not exist or' ' is zero length.

    ') .arg(fn)) return if sys.platform == "darwin": designer, args = Utilities.prepareQtMacBundle("designer", version, args) else: if version == 4: designer = Utilities.generateQtToolName("designer") if Utilities.isWindowsPlatform(): designer = designer + '.exe' proc = QProcess() if not proc.startDetached(designer, args): KQMessageBox.critical(self, self.trUtf8('Process Generation Error'), self.trUtf8( '

    Could not start Qt-Designer.
    ' 'Ensure that it is available as %1.

    ' ).arg(designer)) def __designer4(self): """ Private slot to start the Qt-Designer 4 executable. """ self.__designer(version = 4) def __linguist(self, fn = None, version = 0): """ Private slot to start the Qt-Linguist executable. @param fn filename of the translation file to be opened @param version indication for the requested version (Qt 4) (integer) """ if version < 4: KQMessageBox.information(None, self.trUtf8("Qt 3 support"), self.trUtf8("""Qt v.3 is not supported by eric4.""")) return args = QStringList() if fn is not None: fn = unicode(fn).replace('.qm', '.ts') try: if os.path.isfile(fn) and os.path.getsize(fn): args.append(fn) else: KQMessageBox.critical(self, self.trUtf8('Problem'), self.trUtf8('

    The file %1 does not exist or' ' is zero length.

    ') .arg(fn)) return except EnvironmentError: KQMessageBox.critical(self, self.trUtf8('Problem'), self.trUtf8('

    The file %1 does not exist or' ' is zero length.

    ') .arg(fn)) return if sys.platform == "darwin": linguist, args = Utilities.prepareQtMacBundle("linguist", version, args) else: if version == 4: linguist = Utilities.generateQtToolName("linguist") if Utilities.isWindowsPlatform(): linguist = linguist + '.exe' proc = QProcess() if not proc.startDetached(linguist, args): KQMessageBox.critical(self, self.trUtf8('Process Generation Error'), self.trUtf8( '

    Could not start Qt-Linguist.
    ' 'Ensure that it is available as %1.

    ' ).arg(linguist)) def __linguist4(self, fn = None): """ Private slot to start the Qt-Linguist 4 executable. @param fn filename of the translation file to be opened """ self.__linguist(fn, version = 4) def __assistant(self, home = None, version = 0): """ Private slot to start the Qt-Assistant executable. @param home full pathname of a file to display (string or QString) @param version indication for the requested version (Qt 4) (integer) """ if version < 4: KQMessageBox.information(None, self.trUtf8("Qt 3 support"), self.trUtf8("""Qt v.3 is not supported by eric4.""")) return args = QStringList() if home: if version == 4: args.append('-showUrl') args.append(home) if sys.platform == "darwin": assistant, args = Utilities.prepareQtMacBundle("assistant", version, args) else: if version == 4: assistant = Utilities.generateQtToolName("assistant") if Utilities.isWindowsPlatform(): assistant = assistant + '.exe' proc = QProcess() if not proc.startDetached(assistant, args): KQMessageBox.critical(self, self.trUtf8('Process Generation Error'), self.trUtf8( '

    Could not start Qt-Assistant.
    ' 'Ensure that it is available as %1.

    ' ).arg(assistant)) def __assistant4(self): """ Private slot to start the Qt-Assistant 4 executable. """ self.__assistant(version = 4) def __webBrowser(self, home = None): """ Private slot to start a web browser executable. @param home full pathname of a file to display (string or QString) """ started = QDesktopServices.openUrl(QUrl(home)) if not started: KQMessageBox.critical(self, self.trUtf8('Open Browser'), self.trUtf8('Could not start a web browser')) def __customViewer(self, home = None): """ Private slot to start a custom viewer. @param home full pathname of a file to display (string or QString) """ customViewer = Preferences.getHelp("CustomViewer") if customViewer.isEmpty(): KQMessageBox.information(self, self.trUtf8("Help"), self.trUtf8("""Currently no custom viewer is selected.""" """ Please use the preferences dialog to specify one.""")) return proc = QProcess() args = QStringList() if home: args.append(home) if not proc.startDetached(customViewer, args): KQMessageBox.critical(self, self.trUtf8('Process Generation Error'), self.trUtf8( '

    Could not start custom viewer.
    ' 'Ensure that it is available as %1.

    ' ).arg(customViewer)) def __chmViewer(self, home=None): """ Private slot to start the win help viewer to show *.chm files. @param home full pathname of a file to display (string or QString) """ if home: proc = QProcess() args = QStringList() args.append(home) if not proc.startDetached("hh", args): KQMessageBox.critical(self, self.trUtf8('Process Generation Error'), self.trUtf8( '

    Could not start the help viewer.
    ' 'Ensure that it is available as hh.

    ' )) def __UIPreviewer(self,fn=None): """ Private slot to start the UI Previewer executable. @param fn filename of the form to be previewed """ proc = QProcess() viewer = os.path.join(getConfig("ericDir"), "eric4_uipreviewer.py") args = QStringList() args.append(viewer) if fn is not None: fn = unicode(fn) try: if os.path.isfile(fn) and os.path.getsize(fn): args.append(fn) else: KQMessageBox.critical(self, self.trUtf8('Problem'), self.trUtf8('

    The file %1 does not exist or' ' is zero length.

    ') .arg(fn)) return except EnvironmentError: KQMessageBox.critical(self, self.trUtf8('Problem'), self.trUtf8('

    The file %1 does not exist or' ' is zero length.

    ') .arg(fn)) return if not os.path.isfile(viewer) or not proc.startDetached(sys.executable, args): KQMessageBox.critical(self, self.trUtf8('Process Generation Error'), self.trUtf8( '

    Could not start UI Previewer.
    ' 'Ensure that it is available as %1.

    ' ).arg(viewer)) def __TRPreviewer(self, fileNames = None, ignore = False): """ Private slot to start the Translation Previewer executable. @param fileNames filenames of forms and/or translations to be previewed @param ignore flag indicating non existing files should be ignored (boolean) """ proc = QProcess() viewer = os.path.join(getConfig("ericDir"), "eric4_trpreviewer.py") args = QStringList() args.append(viewer) if fileNames is not None: for fn in fileNames: fn = unicode(fn) try: if os.path.isfile(fn) and os.path.getsize(fn): args.append(fn) else: if not ignore: KQMessageBox.critical(self, self.trUtf8('Problem'), self.trUtf8('

    The file %1 does not exist or' ' is zero length.

    ') .arg(fn)) return except EnvironmentError: if not ignore: KQMessageBox.critical(self, self.trUtf8('Problem'), self.trUtf8('

    The file %1 does not exist or' ' is zero length.

    ') .arg(fn)) return if not os.path.isfile(viewer) or not proc.startDetached(sys.executable, args): KQMessageBox.critical(self, self.trUtf8('Process Generation Error'), self.trUtf8( '

    Could not start Translation Previewer.
    ' 'Ensure that it is available as %1.

    ' ).arg(viewer)) def __sqlBrowser(self): """ Private slot to start the SQL browser tool. """ proc = QProcess() browser = os.path.join(getConfig("ericDir"), "eric4_sqlbrowser.py") args = QStringList() args.append(browser) if not os.path.isfile(browser) or not proc.startDetached(sys.executable, args): KQMessageBox.critical(self, self.trUtf8('Process Generation Error'), self.trUtf8( '

    Could not start SQL Browser.
    ' 'Ensure that it is available as %1.

    ' ).arg(browser)) def __editPixmap(self, fn = ""): """ Private slot to show a pixmap in a dialog. @param fn filename of the file to show (string or QString) """ dlg = IconEditorWindow(fn, self, fromEric = True) dlg.show() def __showPixmap(self, fn): """ Private slot to show a pixmap in a dialog. @param fn filename of the file to show (string or QString) """ dlg = PixmapDiagram(fn, self) if dlg.getStatus(): dlg.show() def __showSvg(self, fn): """ Private slot to show a SVG file in a dialog. @param fn filename of the file to show (string or QString) """ dlg = SvgDiagram(fn, self) dlg.show() def __toolActionTriggered(self): """ Private slot called by external tools toolbar actions. """ act = self.sender() toolGroupName, toolMenuText = unicode(act.objectName()).split('@@', 1) for toolGroup in self.toolGroups: if toolGroup[0] == toolGroupName: for tool in toolGroup[1]: if tool['menutext'] == toolMenuText: self.__startToolProcess(tool) return KQMessageBox.information(self, self.trUtf8("External Tools"), self.trUtf8("""No tool entry found for external tool '%1' """ """in tool group '%2'.""").arg(toolMenuText).arg(toolGroupName)) return KQMessageBox.information(self, self.trUtf8("External Tools"), self.trUtf8("""No toolgroup entry '%1' found.""").arg(toolGroupName)) def __toolExecute(self, act): """ Private slot to execute a particular tool. @param act reference to the action that was triggered (QAction) """ if self.toolGroupsMenuTriggered: # ignore actions triggered from the select tool group submenu self.toolGroupsMenuTriggered = False return if self.currentToolGroup < 0: # it was a built in or plugin tool, don't handle it here return idx, ok = act.data().toInt() if ok and idx >= 0: tool = self.toolGroups[self.currentToolGroup][1][idx] self.__startToolProcess(tool) def __startToolProcess(self, tool): """ Private slot to start an external tool process. @param tool list of tool entries """ proc = QProcess() procData = (None,) program = unicode(tool['executable']) args = QStringList() argv = Utilities.parseOptionString(tool['arguments']) for arg in argv: args.append(arg) t = self.trUtf8("Starting process '%1 %2'.\n")\ .arg(program)\ .arg(tool['arguments']) self.appendToStdout(t) self.connect(proc, SIGNAL('finished(int, QProcess::ExitStatus)'), self.__toolFinished) if tool['redirect'] != 'no': self.connect(proc, SIGNAL('readyReadStandardOutput()'), self.__processToolStdout) self.connect(proc, SIGNAL('readyReadStandardError()'), self.__processToolStderr) if tool['redirect'] in ["insert", "replaceSelection"]: aw = self.viewmanager.activeWindow() procData = (aw, tool['redirect'], []) if aw is not None: aw.beginUndoAction() proc.start(program, args) if not proc.waitForStarted(): KQMessageBox.critical(self, self.trUtf8('Process Generation Error'), self.trUtf8( '

    Could not start the tool entry %1.
    ' 'Ensure that it is available as %2.

    ')\ .arg(tool['menutext']).arg(tool['executable'])) else: self.toolProcs.append((program, proc, procData)) if tool['redirect'] == 'no': proc.closeReadChannel(QProcess.StandardOutput) proc.closeReadChannel(QProcess.StandardError) proc.closeWriteChannel() def __processToolStdout(self): """ Private slot to handle the readyReadStdout signal of a tool process. """ ioEncoding = str(Preferences.getSystem("IOEncoding")) # loop through all running tool processes for program, toolProc, toolProcData in self.toolProcs: toolProc.setReadChannel(QProcess.StandardOutput) if toolProcData[0] is None or \ toolProcData[1] not in ["insert", "replaceSelection"]: # not connected to an editor or wrong mode while toolProc.canReadLine(): s = QString("%s - " % program) output = unicode(toolProc.readLine(), ioEncoding, 'replace') s.append(output) self.appendToStdout(s) else: if toolProcData[1] == "insert": text = unicode(toolProc.readAll(), ioEncoding, 'replace') toolProcData[0].insert(text) elif toolProcData[1] == "replaceSelection": text = unicode(toolProc.readAll(), ioEncoding, 'replace') toolProcData[2].append(text) def __processToolStderr(self): """ Private slot to handle the readyReadStderr signal of a tool process. """ ioEncoding = str(Preferences.getSystem("IOEncoding")) # loop through all running tool processes for program, toolProc, toolProcData in self.toolProcs: toolProc.setReadChannel(QProcess.StandardError) while toolProc.canReadLine(): s = QString("%s - " % program) error = unicode(toolProc.readLine(), ioEncoding, 'replace') s.append(error) self.appendToStderr(s) def __toolFinished(self, exitCode, exitStatus): """ Private slot to handle the finished signal of a tool process. @param exitCode exit code of the process (integer) @param exitStatus exit status of the process (QProcess.ExitStatus) """ exitedProcs = [] # loop through all running tool processes for program, toolProc, toolProcData in self.toolProcs: if toolProc.state() == QProcess.NotRunning: exitedProcs.append((program, toolProc, toolProcData)) if toolProcData[0] is not None: if toolProcData[1] == "replaceSelection": text = ''.join(toolProcData[2]) toolProcData[0].replace(text) toolProcData[0].endUndoAction() # now delete the exited procs from the list of running processes for proc in exitedProcs: self.toolProcs.remove(proc) t = self.trUtf8("Process '%1' has exited.\n").arg(proc[0]) self.appendToStdout(t) def __showPythonDoc(self): """ Private slot to show the Python documentation. """ pythonDocDir = unicode(Preferences.getHelp("PythonDocDir")) if not pythonDocDir: if Utilities.isWindowsPlatform(): pythonDocDir = Utilities.getEnvironmentEntry("PYTHONDOCDIR", os.path.join(os.path.dirname(sys.executable), "doc")) else: pythonDocDir = Utilities.getEnvironmentEntry("PYTHONDOCDIR", '/usr/share/doc/packages/python/html') if not pythonDocDir.startswith("http://") and \ not pythonDocDir.startswith("https://"): if pythonDocDir.startswith("file://"): pythonDocDir = pythonDocDir[7:] if not os.path.splitext(pythonDocDir)[1]: home = Utilities.normjoinpath(pythonDocDir, 'index.html') if Utilities.isWindowsPlatform() and not os.path.exists(home): pyversion = sys.hexversion >> 16 vers = "%d%d" % ((pyversion >> 8) & 0xff, pyversion & 0xff) home = os.path.join(pythonDocDir, "python%s.chm" % vers) else: home = pythonDocDir if not os.path.exists(home): KQMessageBox.warning(None, self.trUtf8("Documentation Missing"), self.trUtf8("""

    The documentation starting point""" """ "%1" could not be found.

    """)\ .arg(home)) return if not home.endswith(".chm"): if Utilities.isWindowsPlatform(): home = "file:///" + unicode(Utilities.fromNativeSeparators(home)) else: home = "file://" + home else: home = pythonDocDir if home.endswith(".chm"): self.__chmViewer(home) else: hvType = Preferences.getHelp("HelpViewerType") if hvType == 1: self.launchHelpViewer(home) elif hvType == 2: self.__assistant(home, version = 4) elif hvType == 3: self.__webBrowser(home) else: self.__customViewer(home) def __showQt4Doc(self): """ Private slot to show the Qt4 documentation. """ qt4DocDir = unicode(Preferences.getHelp("Qt4DocDir")) if not qt4DocDir: qt4DocDir = Utilities.getEnvironmentEntry("QT4DOCDIR", "") if not qt4DocDir: qt4DocDir = os.path.join(unicode(Preferences.getQt4DocDir()), "html") if qt4DocDir.startswith("qthelp://"): if not os.path.splitext(qt4DocDir)[1]: home = qt4DocDir + "/index.html" else: home = qt4DocDir elif qt4DocDir.startswith("http://") or qt4DocDir.startswith("https://"): home = qt4DocDir else: if qt4DocDir.startswith("file://"): qt4DocDir = qt4DocDir[7:] if not os.path.splitext(qt4DocDir)[1]: home = Utilities.normjoinpath(qt4DocDir, 'index.html') else: home = qt4DocDir if not os.path.exists(home): KQMessageBox.warning(None, self.trUtf8("Documentation Missing"), self.trUtf8("""

    The documentation starting point""" """ "%1" could not be found.

    """)\ .arg(home)) return if Utilities.isWindowsPlatform(): home = "file:///" + unicode(Utilities.fromNativeSeparators(home)) else: home = "file://" + home hvType = Preferences.getHelp("HelpViewerType") if hvType == 1: self.launchHelpViewer(home) elif hvType == 2: self.__assistant(home, version = 4) elif hvType == 3: self.__webBrowser(home) else: self.__customViewer(home) def __showPyQt4Doc(self): """ Private slot to show the PyQt4 documentation. """ pyqt4DocDir = unicode(Preferences.getHelp("PyQt4DocDir")) if not pyqt4DocDir: pyqt4DocDir = Utilities.getEnvironmentEntry("PYQT4DOCDIR", None) if not pyqt4DocDir: KQMessageBox.warning(None, self.trUtf8("Documentation"), self.trUtf8("""

    The PyQt4 documentation starting point""" """ has not been configured.

    """)) return if not pyqt4DocDir.startswith("http://") and \ not pyqt4DocDir.startswith("https://"): home = "" if pyqt4DocDir: if pyqt4DocDir.startswith("file://"): pyqt4DocDir = pyqt4DocDir[7:] if not os.path.splitext(pyqt4DocDir)[1]: possibleHomes = [\ Utilities.normjoinpath(pyqt4DocDir, 'index.html'), Utilities.normjoinpath(pyqt4DocDir, 'pyqt4ref.html'), Utilities.normjoinpath(pyqt4DocDir, 'classes.html'), ] for possibleHome in possibleHomes: if os.path.exists(possibleHome): home = possibleHome break else: home = pyqt4DocDir if not home or not os.path.exists(home): KQMessageBox.warning(None, self.trUtf8("Documentation Missing"), self.trUtf8("""

    The documentation starting point""" """ "%1" could not be found.

    """)\ .arg(home)) return if Utilities.isWindowsPlatform(): home = "file:///" + unicode(Utilities.fromNativeSeparators(home)) else: home = "file://" + home else: home = pyqt4DocDir hvType = Preferences.getHelp("HelpViewerType") if hvType == 1: self.launchHelpViewer(home) elif hvType == 2: self.__assistant(home, version = 4) elif hvType == 3: self.__webBrowser(home) else: self.__customViewer(home) def __showPyKDE4Doc(self): """ Private slot to show the PyKDE4 documentation. """ pykde4DocDir = unicode(Preferences.getHelp("PyKDE4DocDir")) if not pykde4DocDir: pykde4DocDir = Utilities.getEnvironmentEntry("PYKDE4DOCDIR", None) if not pykde4DocDir: KQMessageBox.warning(None, self.trUtf8("Documentation"), self.trUtf8("""

    The PyKDE4 documentation starting point""" """ has not been configured.

    """)) return if not pykde4DocDir.startswith("http://") and \ not pykde4DocDir.startswith("https://"): if pykde4DocDir.startswith("file://"): pykde4DocDir = pykde4DocDir[7:] if not os.path.splitext(pykde4DocDir)[1]: home = Utilities.normjoinpath(pykde4DocDir, 'index.html') else: home = pykde4DocDir if not os.path.exists(home): KQMessageBox.warning(None, self.trUtf8("Documentation Missing"), self.trUtf8("""

    The documentation starting point""" """ "%1" could not be found.

    """)\ .arg(home)) return if Utilities.isWindowsPlatform(): home = "file:///" + unicode(Utilities.fromNativeSeparators(home)) else: home = "file://" + home else: home = pykde4DocDir hvType = Preferences.getHelp("HelpViewerType") if hvType == 1: self.launchHelpViewer(home) elif hvType == 2: self.__assistant(home, version = 4) elif hvType == 3: self.__webBrowser(home) else: self.__customViewer(home) def __showEricDoc(self): """ Private slot to show the Eric documentation. """ home = Utilities.normjoinpath(getConfig('ericDocDir'), "Source", "index.html") if not home.startswith("http://") and \ not home.startswith("https://"): if not os.path.exists(home): KQMessageBox.warning(None, self.trUtf8("Documentation Missing"), self.trUtf8("""

    The documentation starting point""" """ "%1" could not be found.

    """)\ .arg(home)) return if Utilities.isWindowsPlatform(): home = "file:///" + unicode(Utilities.fromNativeSeparators(home)) else: home = "file://" + home hvType = Preferences.getHelp("HelpViewerType") if hvType == 1: self.launchHelpViewer(home) elif hvType == 2: self.__assistant(home, version = 4) elif hvType == 3: self.__webBrowser(home) else: self.__customViewer(home) def __showPySideDoc(self): """ Private slot to show the PySide documentation. """ pysideDocDir = unicode(Preferences.getHelp("PySideDocDir")) if not pysideDocDir: pysideDocDir = Utilities.getEnvironmentEntry("PYSIDEDOCDIR", None) if not pysideDocDir: KQMessageBox.warning(None, self.trUtf8("Documentation"), self.trUtf8("""

    The PySide documentation starting point""" """ has not been configured.

    """)) return if not pysideDocDir.startswith("http://") and \ not pysideDocDir.startswith("https://"): if pysideDocDir.startswith("file://"): pysideDocDir = pysideDocDir[7:] if not os.path.splitext(pysideDocDir)[1]: home = Utilities.normjoinpath(pysideDocDir, 'index.html') else: home = pysideDocDir if not os.path.exists(home): KQMessageBox.warning(None, self.trUtf8("Documentation Missing"), self.trUtf8("""

    The documentation starting point""" """ "%1" could not be found.

    """)\ .arg(home)) return if Utilities.isWindowsPlatform(): home = "file:///" + unicode(Utilities.fromNativeSeparators(home)) else: home = "file://" + home else: home = pysideDocDir hvType = Preferences.getHelp("HelpViewerType") if hvType == 1: self.launchHelpViewer(home) elif hvType == 2: self.__assistant(home, version = 4) elif hvType == 3: self.__webBrowser(home) else: self.__customViewer(home) def launchHelpViewer(self, home, searchWord = None): """ Public slot to start the help viewer. @param home filename of file to be shown (string or QString) @keyparam searchWord word to search for (string or QString) """ if len(unicode(home)) > 0: homeUrl = QUrl(home) if homeUrl.scheme().isEmpty(): home = QUrl.fromLocalFile(home).toString() if not Preferences.getHelp("SingleHelpWindow") or self.helpWindow is None: help = HelpWindow(home, '.', None, 'help viewer', True, searchWord = searchWord) if QApplication.desktop().width() > 400 and \ QApplication.desktop().height() > 500: help.show() else: help.showMaximized() if Preferences.getHelp("SingleHelpWindow"): self.helpWindow = help self.connect(self.helpWindow, SIGNAL("helpClosed"), self.__helpClosed) self.connect(self, SIGNAL("preferencesChanged"), self.helpWindow.preferencesChanged) elif searchWord is not None: self.helpWindow.search(searchWord) self.helpWindow.raise_() else: self.helpWindow.newTab(home) self.helpWindow.raise_() def __helpClosed(self): """ Private slot to handle the helpClosed signal of the help window. """ if Preferences.getHelp("SingleHelpWindow"): self.disconnect(self, SIGNAL("preferencesChanged"), self.helpWindow.preferencesChanged) self.helpWindow = None def __helpViewer(self): """ Private slot to start an empty help viewer. """ searchWord = self.viewmanager.textForFind(False) if searchWord == "": searchWord = None self.launchHelpViewer("", searchWord = searchWord) def __startWebBrowser(self): """ Private slot to start the eric4 web browser. """ self.launchHelpViewer("") def showPreferences(self, pageName = None): """ Public slot to set the preferences. @param pageName name of the configuration page to show (string or QString) """ dlg = ConfigurationDialog(self, 'Configuration')#, True) self.connect(dlg, SIGNAL('preferencesChanged'), self.__preferencesChanged) dlg.show() if pageName is not None: dlg.showConfigurationPageByName(pageName) else: dlg.showConfigurationPageByName("empty") dlg.exec_() QApplication.processEvents() if dlg.result() == QDialog.Accepted: dlg.setPreferences() Preferences.syncPreferences() self.__preferencesChanged() def __exportPreferences(self): """ Private slot to export the current preferences. """ Preferences.exportPreferences() def __importPreferences(self): """ Private slot to import preferences. """ Preferences.importPreferences() self.__preferencesChanged() def __preferencesChanged(self): """ Private slot to handle a change of the preferences. """ self.__setStyle() if Preferences.getUI("SingleApplicationMode"): if self.SAServer is None: self.SAServer = E4SingleApplicationServer() else: if self.SAServer is not None: self.SAServer.shutdown() self.SAServer = None self.newWindowAct.setEnabled(not Preferences.getUI("SingleApplicationMode")) self.maxEditorPathLen = Preferences.getUI("CaptionFilenameLength") self.captionShowsFilename = Preferences.getUI("CaptionShowsFilename") if not self.captionShowsFilename: self.__setWindowCaption(editor = "") else: aw = self.viewmanager.activeWindow() fn = aw and aw.getFileName() or None if fn: self.__setWindowCaption(editor = unicode(fn)) else: self.__setWindowCaption(editor = "") self.__httpAlternatives = Preferences.getUI("VersionsUrls") self.performVersionCheck(False) self.__configureDockareaCornerUsage() SpellChecker.setDefaultLanguage( unicode(Preferences.getEditor("SpellCheckingDefaultLanguage"))) if self.layout == "Sidebars": delay = Preferences.getUI("SidebarDelay") self.leftSidebar.setDelay(delay) self.bottomSidebar.setDelay(delay) self.emit(SIGNAL('preferencesChanged')) def __reloadAPIs(self): """ Private slot to reload the api information. """ self.emit(SIGNAL('reloadAPIs')) def __showExternalTools(self): """ Private slot to display a dialog show a list of external tools used by eric4. """ self.programsDialog.show() def __configViewProfiles(self): """ Private slot to configure the various view profiles. """ dlg = ViewProfileDialog(self.layout, self.profiles, not self.embeddedShell, not self.embeddedFileBrowser) if dlg.exec_() == QDialog.Accepted: self.profiles = dlg.getProfiles() Preferences.setUI("ViewProfiles", self.profiles) if self.currentProfile == "edit": self.__setEditProfile(False) elif self.currentProfile == "debug": self.setDebugProfile(False) def __configToolBars(self): """ Private slot to configure the various toolbars. """ dlg = E4ToolBarDialog(self.toolbarManager) if dlg.exec_() == QDialog.Accepted: Preferences.setUI("ToolbarManagerState", self.toolbarManager.saveState()) def __configShortcuts(self): """ Private slot to configure the keyboard shortcuts. """ self.shortcutsDialog.populate() self.shortcutsDialog.show() def __exportShortcuts(self): """ Private slot to export the keyboard shortcuts. """ selectedFilter = QString("") fn = KQFileDialog.getSaveFileName(\ None, self.trUtf8("Export Keyboard Shortcuts"), QString(), self.trUtf8("eric4 keyboard shortcut file (*.e4k);;" "Compressed eric4 keyboard shortcut file (*.e4kz)"), selectedFilter, QFileDialog.Options(QFileDialog.DontConfirmOverwrite)) if fn.isEmpty(): return ext = QFileInfo(fn).suffix() if ext.isEmpty(): ex = selectedFilter.section('(*',1,1).section(')',0,0) if not ex.isEmpty(): fn.append(ex) fn = unicode(fn) res = Shortcuts.exportShortcuts(fn) if not res: KQMessageBox.critical(None, self.trUtf8("Export Keyboard Shortcuts"), self.trUtf8("

    The keyboard shortcuts could not be written to file" " %1.

    ").arg(fn)) def __importShortcuts(self): """ Private slot to import the keyboard shortcuts. """ fn = KQFileDialog.getOpenFileName(\ None, self.trUtf8("Import Keyboard Shortcuts"), QString(), self.trUtf8("eric4 keyboard shortcut file (*.e4k *.e4kz);;" "eric3 keyboard shortcut file (*.e3k *.e3kz)")) if fn.isEmpty(): return fn = unicode(fn) Shortcuts.importShortcuts(fn) def __newProject(self): """ Private slot to handle the NewProject signal. """ self.__setWindowCaption(project = self.project.name) def __projectOpened(self): """ Private slot to handle the projectOpened signal. """ self.__setWindowCaption(project = self.project.name) cap = e4App().getObject("DebugServer")\ .getClientCapabilities(self.project.pdata["PROGLANGUAGE"][0]) self.utProjectAct.setEnabled(cap & HasUnittest) self.utProjectOpen = cap & HasUnittest def __projectClosed(self): """ Private slot to handle the projectClosed signal. """ self.__setWindowCaption(project = "") self.utProjectAct.setEnabled(False) if not self.utEditorOpen: self.utRestartAct.setEnabled(False) self.utProjectOpen = False def __programChange(self, fn): """ Private slot to handle the programChange signal. This primarily is here to set the currentProg variable. @param fn filename to be set as current prog (QString) """ # Delete the old program if there was one. if self.currentProg is not None: del self.currentProg self.currentProg = os.path.normpath(unicode(fn)) def __lastEditorClosed(self): """ Private slot to handle the lastEditorClosed signal. """ self.wizardsMenuAct.setEnabled(False) self.utScriptAct.setEnabled(False) self.utEditorOpen = False if not self.utProjectOpen: self.utRestartAct.setEnabled(False) self.__setWindowCaption(editor = "") def __editorOpened(self, fn): """ Private slot to handle the editorOpened signal. @param fn filename of the opened editor (QString) """ fn = unicode(fn) self.wizardsMenuAct.setEnabled(len(self.__menus["wizards"].actions()) > 0) if fn and unicode(fn) != "None": dbs = e4App().getObject("DebugServer") for language in dbs.getSupportedLanguages(): exts = dbs.getExtensions(language) if fn.endswith(exts): cap = dbs.getClientCapabilities(language) self.utScriptAct.setEnabled(cap & HasUnittest) self.utEditorOpen = cap & HasUnittest return if self.viewmanager.getOpenEditor(fn).isPyFile() or \ self.viewmanager.getOpenEditor(fn).isPy3File(): self.utScriptAct.setEnabled(True) self.utEditorOpen = True def __checkActions(self, editor): """ Private slot to check some actions for their enable/disable status. @param editor editor window """ if editor: fn = editor.getFileName() else: fn = None if fn: dbs = e4App().getObject("DebugServer") for language in dbs.getSupportedLanguages(): exts = dbs.getExtensions(language) if fn.endswith(exts): cap = dbs.getClientCapabilities(language) self.utScriptAct.setEnabled(cap & HasUnittest) self.utEditorOpen = cap & HasUnittest return if editor.isPyFile() or editor.isPy3File(): self.utScriptAct.setEnabled(True) self.utEditorOpen = True return self.utScriptAct.setEnabled(False) def __writeTasks(self): """ Private slot to write the tasks data to an XML file (.e4t). """ try: fn = os.path.join(Utilities.getConfigDir(), "eric4tasks.e4t") f = open(fn, "wb") TasksWriter(f, False).writeXML() f.close() except IOError: KQMessageBox.critical(None, self.trUtf8("Save tasks"), self.trUtf8("

    The tasks file %1 could not be written.

    ") .arg(fn)) def __readTasks(self): """ Private slot to read in the tasks file (.e4t) """ try: fn = os.path.join(Utilities.getConfigDir(), "eric4tasks.e4t") if not os.path.exists(fn): return f = open(fn, "rb") line = f.readline() dtdLine = f.readline() f.close() except IOError: KQMessageBox.critical(None, self.trUtf8("Read tasks"), self.trUtf8("

    The tasks file %1 could not be read.

    ").arg(fn)) return # now read the file if line.startswith('The tasks file %1 could not be read.

    ")\ .arg(fn)) return except XMLFatalParseError: pass eh.showParseMessages() else: KQMessageBox.critical(None, self.trUtf8("Read tasks"), self.trUtf8("

    The tasks file %1 has an unsupported format.

    ")\ .arg(fn)) def __writeSession(self): """ Private slot to write the session data to an XML file (.e4s). """ try: fn = os.path.join(Utilities.getConfigDir(), "eric4session.e4s") f = open(fn, "wb") SessionWriter(f, None).writeXML() f.close() except IOError: KQMessageBox.critical(None, self.trUtf8("Save session"), self.trUtf8("

    The session file %1 could not be written.

    ") .arg(fn)) def __readSession(self): """ Private slot to read in the session file (.e4s) """ try: fn = os.path.join(Utilities.getConfigDir(), "eric4session.e4s") if not os.path.exists(fn): KQMessageBox.critical(None, self.trUtf8("Read session"), self.trUtf8("

    The session file %1 could not be read.

    ")\ .arg(fn)) return f = open(fn, "rb") line = f.readline() dtdLine = f.readline() f.close() except IOError: KQMessageBox.critical(None, self.trUtf8("Read session"), self.trUtf8("

    The session file %1 could not be read.

    ")\ .arg(fn)) return # now read the file if line.startswith('The session file %1 could not be read.

    ")\ .arg(fn)) return except XMLFatalParseError: pass eh.showParseMessages() else: KQMessageBox.critical(None, self.trUtf8("Read session"), self.trUtf8("

    The session file %1 has an unsupported" " format.

    ").arg(fn)) ########################################################## ## Below are slots to handle StdOut and StdErr ########################################################## def appendToStdout(self, s): """ Public slot to append text to the stdout log viewer tab. @param s output to be appended (string or QString) """ self.showLogTab("stdout") self.emit(SIGNAL('appendStdout'), s) def appendToStderr(self, s): """ Public slot to append text to the stderr log viewer tab. @param s output to be appended (string or QString) """ self.showLogTab("stderr") self.emit(SIGNAL('appendStderr'), s) ########################################################## ## Below are slots needed by the plugin menu ########################################################## def __showPluginInfo(self): """ Private slot to show the plugin info dialog. """ self.__pluginInfoDialog = PluginInfoDialog(self.pluginManager, self) self.__pluginInfoDialog.show() def __installPlugins(self, pluginFileNames = QStringList()): """ Private slot to show a dialog to install a new plugin. @param pluginFileNames list of plugin files suggested for installation (QStringList) """ dlg = PluginInstallDialog(self.pluginManager, pluginFileNames, self) dlg.exec_() if dlg.restartNeeded(): self.__restart() def __deinstallPlugin(self): """ Private slot to show a dialog to uninstall a plugin. """ dlg = PluginUninstallDialog(self.pluginManager, self) dlg.exec_() def __showPluginsAvailable(self): """ Private slot to show the plugins available for download. """ dlg = PluginRepositoryDialog(self) res = dlg.exec_() if res == (QDialog.Accepted + 1): self.__installPlugins(dlg.getDownloadedPlugins()) def __pluginsConfigure(self): """ Private slot to show the plugin manager configuration page. """ self.showPreferences("pluginManagerPage") ################################################################# ## Drag and Drop Support ################################################################# def dragEnterEvent(self, event): """ Protected method to handle the drag enter event. @param event the drag enter event (QDragEnterEvent) """ self.inDragDrop = event.mimeData().hasUrls() if self.inDragDrop: event.acceptProposedAction() def dragMoveEvent(self, event): """ Protected method to handle the drag move event. @param event the drag move event (QDragMoveEvent) """ if self.inDragDrop: event.acceptProposedAction() def dragLeaveEvent(self, event): """ Protected method to handle the drag leave event. @param event the drag leave event (QDragLeaveEvent) """ if self.inDragDrop: self.inDragDrop = False def dropEvent(self, event): """ Protected method to handle the drop event. @param event the drop event (QDropEvent) """ if event.mimeData().hasUrls(): event.acceptProposedAction() for url in event.mimeData().urls(): fname = url.toLocalFile() if not fname.isEmpty(): if QFileInfo(fname).isFile(): self.viewmanager.openSourceFile(unicode(fname)) else: KQMessageBox.information(None, self.trUtf8("Drop Error"), self.trUtf8("""

    %1 is not a file.

    """) .arg(fname)) self.inDragDrop = False ########################################################## ## Below are methods needed for shutting down the IDE ########################################################## def closeEvent(self, event): """ Private event handler for the close event. This event handler saves the preferences. @param event close event (QCloseEvent) """ if self.__shutdown(): event.accept() if not self.inCloseEevent: self.inCloseEevent = True QTimer.singleShot(0, e4App().closeAllWindows) else: event.ignore() def __shutdown(self): """ Private method to perform all necessary steps to close down the IDE. @return flag indicating success """ if self.shutdownCalled: return True self.__writeSession() if not self.project.closeProject(): return False if not self.multiProject.closeMultiProject(): return False if not self.viewmanager.closeViewManager(): return False self.shell.closeShell() self.__writeTasks() self.templateViewer.writeTemplates() if not self.debuggerUI.shutdownServer(): return False self.debuggerUI.shutdown() self.pluginManager.shutdown() if self.layout == "Sidebars": self.leftSidebar.shutdown() self.bottomSidebar.shutdown() if self.SAServer is not None: self.SAServer.shutdown() self.SAServer = None Preferences.setGeometry("MainMaximized", int(self.isMaximized())) if not self.isMaximized(): Preferences.setGeometry("MainGeometry", self.saveGeometry()) if self.layout == "FloatingWindows": # floating windows windows = { "ProjectBrowser": self.projectBrowser, "DebugViewer": self.debugViewer, "LogViewer": self.logViewer, "Shell": self.shell, "FileBrowser" : self.browser, "TaskViewer" : self.taskViewer, "TemplateViewer" : self.templateViewer, "MultiProjectBrowser": self.multiProjectBrowser, } if self.embeddedShell: del windows["Shell"] if self.embeddedFileBrowser: del windows["FileBrowser"] for window, i in zip(self.windows, range(len(self.windows))): if window is not None: self.profiles[self.currentProfile][2][i] = \ str(window.saveGeometry()) self.browser.saveToplevelDirs() Preferences.setUI("ToolbarManagerState", self.toolbarManager.saveState()) self.__saveCurrentViewProfile(True) Preferences.saveToolGroups(self.toolGroups, self.currentToolGroup) Preferences.syncPreferences() self.shutdownCalled = True return True ############################################## ## Below are methods to check for new versions ############################################## def showAvailableVersionsInfo(self): """ Public method to show the eric4 versions available for download. """ self.performVersionCheck(manual = True, showVersions = True) def performVersionCheck(self, manual = True, alternative = 0, showVersions = False): """ Public method to check the internet for an eric4 update. @param manual flag indicating an invocation via the menu (boolean) @param alternative index of server to download from (integer) @keyparam showVersion flag indicating the show versions mode (boolean) """ if not manual: if Version.startswith("@@"): return else: period = Preferences.getUI("PerformVersionCheck") if period == 0: return elif period in [2, 3, 4]: lastCheck = Preferences.Prefs.settings.value(\ "Updates/LastCheckDate", QVariant(QDate(1970, 1, 1))).toDate() if lastCheck.isValid(): now = QDate.currentDate() if period == 2 and lastCheck.day() == now.day(): # daily return elif period == 3 and lastCheck.daysTo(now) < 7: # weekly return elif period == 4 and lastCheck.month() == now.month(): # monthly return self.__inVersionCheck = True self.manualUpdatesCheck = manual self.showAvailableVersions = showVersions self.httpAlternative = alternative url = QUrl(self.__httpAlternatives[alternative]) self.__versionCheckCanceled = False if manual: if self.__versionCheckProgress is None: self.__versionCheckProgress = \ KQProgressDialog("", self.trUtf8("&Cancel"), 0, len(self.__httpAlternatives), self) self.__versionCheckProgress.setMinimumDuration(0) self.connect(self.__versionCheckProgress, SIGNAL("canceled()"), self.__versionsDownloadCanceled) self.__versionCheckProgress.setLabelText(self.trUtf8("Trying host %1")\ .arg(url.host())) self.__versionCheckProgress.setValue(alternative) request = QNetworkRequest(url) request.setAttribute(QNetworkRequest.CacheLoadControlAttribute, QNetworkRequest.AlwaysNetwork) reply = self.__networkManager.get(request) self.connect(reply, SIGNAL("finished()"), self.__versionsDownloadDone) self.__replies.append(reply) def __versionsDownloadDone(self): """ Private method called, after the versions file has been downloaded from the internet. """ if self.__versionCheckCanceled: self.__inVersionCheck = False if self.__versionCheckProgress is not None: self.__versionCheckProgress.reset() self.__versionCheckProgress = None return reply = self.sender() if reply in self.__replies: self.__replies.remove(reply) if reply.error() == QNetworkReply.NoError: ioEncoding = str(Preferences.getSystem("IOEncoding")) versions = unicode(reply.readAll(), ioEncoding, 'replace').splitlines() if reply.error() != QNetworkReply.NoError or versions[0].startswith("<"): # network error or an error page self.httpAlternative += 1 if self.httpAlternative >= len(self.__httpAlternatives): self.__inVersionCheck = False if self.__versionCheckProgress is not None: self.__versionCheckProgress.reset() self.__versionCheckProgress = None KQMessageBox.warning(None, self.trUtf8("Error getting versions information"), self.trUtf8("""The versions information could not be downloaded.""" """ Please go online and try again.""")) return else: self.performVersionCheck(self.manualUpdatesCheck, self.httpAlternative, self.showAvailableVersions) return self.__inVersionCheck = False if self.__versionCheckProgress is not None: self.__versionCheckProgress.reset() self.__versionCheckProgress = None self.__updateVersionsUrls(versions) if self.showAvailableVersions: self.__showAvailableVersionInfos(versions) else: Preferences.Prefs.settings.setValue(\ "Updates/LastCheckDate", QVariant(QDate.currentDate())) self.__versionCheckResult(versions) def __updateVersionsUrls(self, versions): """ Private method to update the URLs from which to retrieve the versions file. @param versions contents of the downloaded versions file (list of strings) """ if len(versions) > 5 and versions[4] == "---": line = 5 urls = QStringList() while line < len(versions): urls.append(versions[line]) line += 1 Preferences.setUI("VersionsUrls", urls) self.__httpAlternatives = Preferences.getUI("VersionsUrls") def __versionCheckResult(self, versions): """ Private method to show the result of the version check action. @param versions contents of the downloaded versions file (list of strings) """ url = "" try: if "-snapshot-" in Version: # check snapshot version if versions[2][0] == "4" and versions[2] > Version: res = KQMessageBox.information(None, self.trUtf8("Update available"), self.trUtf8("""The update to %1 of eric4 is available""" """ at %2. Would you like to get it?""")\ .arg(versions[2]).arg(versions[3]), QMessageBox.StandardButtons(\ QMessageBox.No | \ QMessageBox.Yes), QMessageBox.Yes) url = res == QMessageBox.Yes and versions[3] or '' elif versions[0] > Version: res = KQMessageBox.information(None, self.trUtf8("Update available"), self.trUtf8("""The update to %1 of eric4 is available""" """ at %2. Would you like to get it?""")\ .arg(versions[0]).arg(versions[1]), QMessageBox.StandardButtons(\ QMessageBox.No | \ QMessageBox.Yes), QMessageBox.Yes) url = res == QMessageBox.Yes and versions[1] or '' else: if self.manualUpdatesCheck: KQMessageBox.information(None, self.trUtf8("Eric4 is up to date"), self.trUtf8("""You are using the latest version of eric4""")) else: # check release version if versions[0] > Version: res = KQMessageBox.information(None, self.trUtf8("Update available"), self.trUtf8("""The update to %1 of eric4 is available""" """ at %2. Would you like to get it?""")\ .arg(versions[0]).arg(versions[1]), QMessageBox.StandardButtons(\ QMessageBox.No | \ QMessageBox.Yes), QMessageBox.Yes) url = res == QMessageBox.Yes and versions[1] or '' else: if self.manualUpdatesCheck: KQMessageBox.information(None, self.trUtf8("Eric4 is up to date"), self.trUtf8("""You are using the latest version of eric4""")) except IndexError: KQMessageBox.warning(None, self.trUtf8("Error during updates check"), self.trUtf8("""Could not perform updates check.""")) if url: QDesktopServices.openUrl(QUrl(url)) def __versionsDownloadCanceled(self): """ Private method called to cancel the version check. """ if self.__replies: self.__versionCheckCanceled = True self.__replies[-1].abort() def __showAvailableVersionInfos(self, versions): """ Private method to show the versions available for download. @param versions contents of the downloaded versions file (list of strings) """ versionText = self.trUtf8( """

    Available versions

    """ """""") line = 0 while line < len(versions): if versions[line] == "---": break versionText.append(QString( """""")\ .arg(versions[line])\ .arg(versions[line + 1])\ .arg('sourceforge' in versions[line + 1] and \ "SourceForge" or versions[line + 1])) line += 2 versionText.append(self.trUtf8("""
    %1%3
    """)) KQMessageBox.about(self, Program, versionText) def __proxyAuthenticationRequired(self, proxy, auth): """ Private slot to handle a proxy authentication request. @param proxy reference to the proxy object (QNetworkProxy) @param auth reference to the authenticator object (QAuthenticator) """ info = self.trUtf8("Connect to proxy '%1' using:")\ .arg(Qt.escape(proxy.hostName())) dlg = AuthenticationDialog(info, proxy.user(), True) dlg.setData(proxy.user(), proxy.password()) if dlg.exec_() == QDialog.Accepted: username, password = dlg.getData() auth.setUser(username) auth.setPassword(password) if dlg.shallSave(): Preferences.setUI("ProxyUser", username) Preferences.setUI("ProxyPassword", password) def __sslErrors(self, reply, errors): """ Private slot to handle SSL errors. @param reply reference to the reply object (QNetworkReply) @param errors list of SSL errors (list of QSslError) """ errorStrings = QStringList() for err in errors: errorStrings.append(err.errorString()) errorString = errorStrings.join('.
    ') ret = KQMessageBox.warning(self, self.trUtf8("SSL Errors"), self.trUtf8("""

    SSL Errors:

    """ """

    %1

    """ """

    Do you want to ignore these errors?

    """)\ .arg(errorString), QMessageBox.StandardButtons(\ QMessageBox.No | \ QMessageBox.Yes), QMessageBox.No) if ret == QMessageBox.Yes: reply.ignoreSslErrors() else: self.__downloadCancelled = True reply.abort() ####################################### ## Below are methods for various checks ####################################### def checkConfigurationStatus(self): """ Public method to check, if eric4 has been configured. If it is not, the configuration dialog is shown. """ if not Preferences.isConfigured(): self.__initDebugToolbarsLayout() KQMessageBox.information(None, self.trUtf8("First time usage"), self.trUtf8("""eric4 has not been configured yet. """ """The configuration dialog will be started."""), QMessageBox.StandardButtons(\ QMessageBox.Ok)) self.showPreferences() def checkProjectsWorkspace(self): """ Public method to check, if a projects workspace has been configured. If it has not, a dialog is shown. """ if not Preferences.isConfigured(): # eric hasn't been configured at all self.checkConfigurationStatus() workspace = Preferences.getMultiProject("Workspace") if workspace.isEmpty(): default = Utilities.getHomeDir() workspace = KQFileDialog.getExistingDirectory( None, self.trUtf8("Select Workspace Directory"), default, QFileDialog.Options(QFileDialog.Option(0))) Preferences.setMultiProject("Workspace", workspace) def versionIsNewer(self, required, snapshot = None): """ Public method to check, if the eric4 version is good compared to the required version. @param required required version (string or QString) @param snapshot required snapshot version (string or QString) @return flag indicating, that the version is newer than the required one (boolean) """ if Version.startswith("@@"): # development version, always newer return True if "-snapshot-" in Version: # check snapshot version if snapshot is None: return True else: vers = Version.split("-snapshot-")[1] return vers.split()[0] > snapshot return Version.split()[0] > required ################################# ## Below are some utility methods ################################# def __getFloatingGeometry(self, w): """ Private method to get the geometry of a floating windows. @param w reference to the widget to be saved (QWidget) @return list giving the widget's geometry and its visibility """ s = w.size() p = w.pos() return [p.x(), p.y(), s.width(), s.height(), not w.isHidden()] ############################ ## some event handlers below ############################ def showEvent(self, evt): """ Protected method to handle the show event. @param evt reference to the show event (QShowEvent) """ if self.__startup: if Preferences.getGeometry("MainMaximized"): self.setWindowState(Qt.WindowStates(Qt.WindowMaximized)) self.__startup = False eric4-4.5.18/eric/UI/PaxHeaders.8617/DeleteFilesConfirmationDialog.ui0000644000175000001440000000007311072435341023247 xustar000000000000000029 atime=1389081084.06272438 30 ctime=1389081086.309724333 eric4-4.5.18/eric/UI/DeleteFilesConfirmationDialog.ui0000644000175000001440000000265711072435341023007 0ustar00detlevusers00000000000000 DeleteFilesConfirmationDialog 0 0 458 288 true Dummy Qt::AlignVCenter Qt::NoFocus QAbstractItemView::NoSelection Qt::Horizontal QDialogButtonBox::No|QDialogButtonBox::Yes qPixmapFromMimeSource filesList eric4-4.5.18/eric/UI/PaxHeaders.8617/Info.py0000644000175000001440000000013212262730776016307 xustar000000000000000030 mtime=1389081086.303724332 30 atime=1389081086.303724332 30 ctime=1389081086.309724333 eric4-4.5.18/eric/UI/Info.py0000644000175000001440000000072212262730776016042 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2002 - 2014 Detlev Offenbach # """ Module defining some informational strings. """ Program = 'eric4' Version = '4.5.18 (r4529)' Copyright = 'Copyright (c) 2002 - 2014 Detlev Offenbach ' BugAddress = 'eric4-bugs@eric-ide.python-projects.org' FeatureAddress = 'eric4-featurerequest@eric-ide.python-projects.org' Homepage = "http://eric-ide.python-projects.org/index.html" eric4-4.5.18/eric/UI/PaxHeaders.8617/ErrorLogDialog.ui0000644000175000001440000000007311732357665020263 xustar000000000000000029 atime=1389081084.06272438 30 ctime=1389081086.309724333 eric4-4.5.18/eric/UI/ErrorLogDialog.ui0000644000175000001440000000475511732357665020024 0ustar00detlevusers00000000000000 ErrorLogDialog 0 0 500 350 Error Log Found true 0 0 <b>An error log file was found. What should be done with it?</b> true Press to send an email Send Bug Email true Press to ignore the error and delete the log file Ignore and Delete Press to ignore the error but keep the log file Ignore but Keep logEdit emailButton deleteButton keepButton eric4-4.5.18/eric/UI/PaxHeaders.8617/Config.py0000644000175000001440000000013112261012651016600 xustar000000000000000030 mtime=1388582313.317093783 29 atime=1389081084.06272438 30 ctime=1389081086.309724333 eric4-4.5.18/eric/UI/Config.py0000644000175000001440000000034512261012651016335 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module defining common data to be used by all windows.. """ from PyQt4.QtCore import QSize ToolBarIconSize = QSize(20, 18) eric4-4.5.18/eric/UI/PaxHeaders.8617/FindFileDialog.py0000644000175000001440000000013012261012651020172 xustar000000000000000029 mtime=1388582313.32009382 29 atime=1389081084.06272438 30 ctime=1389081086.309724333 eric4-4.5.18/eric/UI/FindFileDialog.py0000644000175000001440000006166312261012651017742 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2002 - 2014 Detlev Offenbach # """ Module implementing a dialog to search for text in files. """ import os import re import sys from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQFileDialog, KQMessageBox from KdeQt.KQApplication import e4App from Ui_FindFileDialog import Ui_FindFileDialog import Utilities import Preferences class FindFileDialog(QDialog, Ui_FindFileDialog): """ Class implementing a dialog to search for text in files. The occurrences found are displayed in a QTreeWidget showing the filename, the linenumber and the found text. The file will be opened upon a double click onto the respective entry of the list. @signal sourceFile(string, int, string, (int, int)) emitted to open a source file at a line @signal designerFile(string) emitted to open a Qt-Designer file """ lineRole = Qt.UserRole + 1 startRole = Qt.UserRole + 2 endRole = Qt.UserRole + 3 replaceRole = Qt.UserRole + 4 md5Role = Qt.UserRole + 5 def __init__(self, project, replaceMode = False, parent=None): """ Constructor @param project reference to the project object @param parent parent widget of this dialog (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.setWindowFlags(Qt.WindowFlags(Qt.Window)) self.__replaceMode = replaceMode self.stopButton = \ self.buttonBox.addButton(self.trUtf8("Stop"), QDialogButtonBox.ActionRole) self.stopButton.setEnabled(False) self.findButton = \ self.buttonBox.addButton(self.trUtf8("Find"), QDialogButtonBox.ActionRole) self.findButton.setEnabled(False) self.findButton.setDefault(True) if self.__replaceMode: self.replaceButton.setEnabled(False) self.setWindowTitle(self.trUtf8("Replace in Files")) else: self.replaceLabel.hide() self.replacetextCombo.hide() self.replaceButton.hide() self.findProgressLabel.setMaximumWidth(550) self.searchHistory = Preferences.Prefs.settings.value( "FindFileDialog/SearchHistory").toStringList() self.replaceHistory = Preferences.Prefs.settings.value( "FindFileDialog/ReplaceHistory").toStringList() self.dirHistory = Preferences.Prefs.settings.value( "FindFileDialog/DirectoryHistory").toStringList() self.findtextCombo.addItems(self.searchHistory) self.replacetextCombo.addItems(self.replaceHistory) self.dirCombo.addItems(self.dirHistory) self.project = project self.findList.headerItem().setText(self.findList.columnCount(), "") self.findList.header().setSortIndicator(0, Qt.AscendingOrder) self.__section0Size = self.findList.header().sectionSize(0) self.findList.setExpandsOnDoubleClick(False) if self.__replaceMode: font = self.findList.font() if Utilities.isWindowsPlatform(): font.setFamily("Lucida Console") else: font.setFamily("Monospace") self.findList.setFont(font) # Qt Designer form files self.filterForms = r'.*\.ui$|.*\.ui\.h$' self.formsExt = ['*.ui', '*.ui.h'] # Corba interface files self.filterInterfaces = r'.*\.idl$' self.interfacesExt = ['*.idl'] # Qt resources files self.filterResources = r'.*\.qrc$' self.resourcesExt = ['*.qrc'] self.__cancelSearch = False self.__lastFileItem = None self.__populating = False self.setContextMenuPolicy(Qt.CustomContextMenu) self.connect(self, SIGNAL("customContextMenuRequested(const QPoint &)"), self.__contextMenuRequested) def __createItem(self, file, line, text, start, end, replTxt = "", md5 = ""): """ Private method to create an entry in the file list. @param file filename of file (string or QString) @param line line number (integer) @param text text found (string or QString) @param start start position of match (integer) @param end end position of match (integer) @param replTxt text with replacements applied (string or QString) @param md5 MD5 hash of the file (string or QString) """ if self.__lastFileItem is None: # It's a new file self.__lastFileItem = QTreeWidgetItem(self.findList, QStringList(file)) self.__lastFileItem.setFirstColumnSpanned(True) self.__lastFileItem.setExpanded(True) if self.__replaceMode: self.__lastFileItem.setFlags(self.__lastFileItem.flags() | \ Qt.ItemFlags(Qt.ItemIsUserCheckable | Qt.ItemIsTristate)) # Qt bug: # item is not user checkable if setFirstColumnSpanned is True (< 4.5.0) self.__lastFileItem.setData(0, self.md5Role, QVariant(md5)) itm = QTreeWidgetItem(self.__lastFileItem) itm.setTextAlignment(0, Qt.AlignRight) itm.setData(0, Qt.DisplayRole, line) itm.setData(1, Qt.DisplayRole, text) itm.setData(0, self.lineRole, QVariant(line)) itm.setData(0, self.startRole, QVariant(start)) itm.setData(0, self.endRole, QVariant(end)) itm.setData(0, self.replaceRole, QVariant(replTxt)) if self.__replaceMode: itm.setFlags(itm.flags() | Qt.ItemFlags(Qt.ItemIsUserCheckable)) itm.setCheckState(0, Qt.Checked) self.replaceButton.setEnabled(True) def show(self, txt = ""): """ Overwritten method to enable/disable the project button. @param txt text to be shown in the searchtext combo (string or QString) """ if self.project and self.project.isOpen(): self.projectButton.setEnabled(True) else: self.projectButton.setEnabled(False) self.dirButton.setChecked(True) self.findtextCombo.setEditText(txt) self.findtextCombo.lineEdit().selectAll() self.findtextCombo.setFocus() if self.__replaceMode: self.findList.clear() self.replacetextCombo.setEditText("") QDialog.show(self) def on_findtextCombo_editTextChanged(self, text): """ Private slot to handle the editTextChanged signal of the find text combo. @param text (ignored) """ self.__enableFindButton() def on_replacetextCombo_editTextChanged(self, text): """ Private slot to handle the editTextChanged signal of the replace text combo. @param text (ignored) """ self.__enableFindButton() def on_dirCombo_editTextChanged(self, text): """ Private slot to handle the textChanged signal of the directory combo box. @param text (ignored) """ self.__enableFindButton() @pyqtSignature("") def on_projectButton_clicked(self): """ Private slot to handle the selection of the project radio button. """ self.__enableFindButton() @pyqtSignature("") def on_dirButton_clicked(self): """ Private slot to handle the selection of the project radio button. """ self.__enableFindButton() @pyqtSignature("") def on_filterCheckBox_clicked(self): """ Private slot to handle the selection of the file filter check box. """ self.__enableFindButton() @pyqtSignature("QString") def on_filterEdit_textEdited(self, p0): """ Private slot to handle the textChanged signal of the file filter edit. @param text (ignored) """ self.__enableFindButton() def __enableFindButton(self): """ Private slot called to enable the find button. """ if self.findtextCombo.currentText().isEmpty() or \ (self.__replaceMode and self.replacetextCombo.currentText().isEmpty()) or \ (self.dirButton.isChecked() and \ (self.dirCombo.currentText().isEmpty() or \ not os.path.exists( os.path.abspath(unicode(self.dirCombo.currentText()))))) or \ (self.filterCheckBox.isChecked() and self.filterEdit.text().isEmpty()): self.findButton.setEnabled(False) self.buttonBox.button(QDialogButtonBox.Close).setDefault(True) else: self.findButton.setEnabled(True) self.findButton.setDefault(True) def on_buttonBox_clicked(self, button): """ Private slot called by a button of the button box clicked. @param button button that was clicked (QAbstractButton) """ if button == self.findButton: self.__doSearch() elif button == self.stopButton: self.__stopSearch() def __stripEol(self, txt): """ Private method to strip the eol part. @param txt line of text that should be treated (string) @return text with eol stripped (string) """ return txt.replace("\r", "").replace("\n", "") def __stopSearch(self): """ Private slot to handle the stop button being pressed. """ self.__cancelSearch = True def __doSearch(self): """ Private slot to handle the find button being pressed. """ if self.__replaceMode and not e4App().getObject("ViewManager").checkAllDirty(): return self.__cancelSearch = False self.stopButton.setEnabled(True) self.stopButton.setDefault(True) self.findButton.setEnabled(False) if self.filterCheckBox.isChecked(): fileFilter = unicode(self.filterEdit.text()) fileFilterList = ["^%s$" % filter.replace(".", "\.").replace("*", ".*") \ for filter in fileFilter.split(";")] filterRe = re.compile("|".join(fileFilterList)) if self.projectButton.isChecked(): if self.filterCheckBox.isChecked(): files = [self.project.getRelativePath(file) \ for file in \ self.__getFileList(self.project.getProjectPath(), filterRe)] else: files = [] if self.sourcesCheckBox.isChecked(): files += self.project.pdata["SOURCES"] if self.formsCheckBox.isChecked(): files += self.project.pdata["FORMS"] + \ ['%s.h' % f for f in self.project.pdata["FORMS"]] if self.interfacesCheckBox.isChecked(): files += self.project.pdata["INTERFACES"] if self.resourcesCheckBox.isChecked(): files += self.project.pdata["RESOURCES"] elif self.dirButton.isChecked(): if not self.filterCheckBox.isChecked(): filters = [] if self.sourcesCheckBox.isChecked(): filters.extend( ["^%s$" % assoc.replace(".", "\.").replace("*", ".*") \ for assoc in Preferences.getEditorLexerAssocs().keys() \ if assoc not in self.formsExt + self.interfacesExt]) if self.formsCheckBox.isChecked(): filters.append(self.filterForms) if self.interfacesCheckBox.isChecked(): filters.append(self.filterInterfaces) if self.resourcesCheckBox.isChecked(): filters.append(self.filterResources) filterString = "|".join(filters) filterRe = re.compile(filterString) files = self.__getFileList( os.path.abspath(unicode(self.dirCombo.currentText())), filterRe) elif self.openFilesButton.isChecked(): files = e4App().getObject("ViewManager").getOpenFilenames() self.findList.clear() QApplication.processEvents() QApplication.processEvents() self.findProgress.setMaximum(len(files)) # retrieve the values reg = self.regexpCheckBox.isChecked() wo = self.wordCheckBox.isChecked() cs = self.caseCheckBox.isChecked() ct = unicode(self.findtextCombo.currentText()) if reg: txt = ct else: txt = re.escape(ct) if wo: txt = "\\b%s\\b" % txt flags = re.UNICODE | re.LOCALE if not cs: flags |= re.IGNORECASE try: search = re.compile(txt, flags) except re.error, why: QMessageBox.critical(None, self.trUtf8("Invalid search expression"), self.trUtf8("""

    The search expression is not valid.

    """ """

    Error: %1

    """).arg(str(why))) self.stopButton.setEnabled(False) self.findButton.setEnabled(True) self.findButton.setDefault(True) return # reset the findtextCombo self.searchHistory.removeAll(ct) self.searchHistory.prepend(ct) self.findtextCombo.clear() self.findtextCombo.addItems(self.searchHistory) Preferences.Prefs.settings.setValue("FindFileDialog/SearchHistory", self.searchHistory[:30]) if self.__replaceMode: replTxt = unicode(self.replacetextCombo.currentText()) self.replaceHistory.removeAll(replTxt) self.replaceHistory.prepend(replTxt) self.replacetextCombo.clear() self.replacetextCombo.addItems(self.replaceHistory) Preferences.Prefs.settings.setValue("FindFileDialog/ReplaceHistory", self.replaceHistory[:30]) if self.dirButton.isChecked(): searchDir = self.dirCombo.currentText() self.dirHistory.removeAll(searchDir) self.dirHistory.insert(0, searchDir) self.dirCombo.clear() self.dirCombo.addItems(self.dirHistory) Preferences.Prefs.settings.setValue("FindFileDialog/DirectoryHistory", self.dirHistory[:30]) # now go through all the files self.__populating = True self.findList.setUpdatesEnabled(False) progress = 0 breakSearch = False for file in files: self.__lastFileItem = None if self.__cancelSearch or breakSearch: break self.findProgressLabel.setPath(file) if self.projectButton.isChecked(): fn = os.path.join(self.project.ppath, file) else: fn = file # read the file and split it into textlines try: f = open(fn, 'rb') text, encoding, hash = Utilities.decodeWithHash(f.read()) lines = text.splitlines(True) f.close() except IOError: progress += 1 self.findProgress.setValue(progress) continue # now perform the search and display the lines found count = 0 for line in lines: if self.__cancelSearch: break count += 1 contains = search.search(line) if contains: start = contains.start() end = contains.end() if self.__replaceMode: rline = search.sub(replTxt, line) else: rline = "" line = self.__stripEol(line) if len(line) > 1024: line = "%s ..." % line[:1024] if self.__replaceMode: if len(rline) > 1024: rline = "%s ..." % line[:1024] line = "- %s\n+ %s" % ( line, self.__stripEol(rline)) self.__createItem(file, count, line, start, end, rline, hash) if self.feelLikeCheckBox.isChecked(): fn = os.path.join(self.project.ppath, unicode(file)) self.emit(SIGNAL('sourceFile'), fn, count, "", (start, end)) QApplication.processEvents() breakSearch = True break QApplication.processEvents() progress += 1 self.findProgress.setValue(progress) self.findProgressLabel.setPath("") self.findList.setUpdatesEnabled(True) self.findList.sortItems(self.findList.sortColumn(), self.findList.header().sortIndicatorOrder()) self.findList.resizeColumnToContents(1) if self.__replaceMode: self.findList.header().resizeSection(0, self.__section0Size + 30) self.findList.header().setStretchLastSection(True) self.__populating = False self.stopButton.setEnabled(False) self.findButton.setEnabled(True) self.findButton.setDefault(True) if breakSearch: self.close() def on_findList_itemDoubleClicked(self, itm, column): """ Private slot to handle the double click on a file item. It emits the signal sourceFile or designerFile depending on the file extension. @param itm the double clicked tree item (QTreeWidgetItem) @param column column that was double clicked (integer) (ignored) """ if itm.parent(): file = itm.parent().text(0) line = itm.data(0, self.lineRole).toInt()[0] start = itm.data(0, self.startRole).toInt()[0] end = itm.data(0, self.endRole).toInt()[0] else: file = itm.text(0) line = 1 start = 0 end = 0 if self.project: fn = os.path.join(self.project.ppath, unicode(file)) else: fn = unicode(file) if fn.endswith('.ui'): self.emit(SIGNAL('designerFile'), fn) elif fn.endswith('.ui.h'): fn = os.path.splitext(unicode(file))[0] self.emit(SIGNAL('designerFile'), fn) else: self.emit(SIGNAL('sourceFile'), fn, line, "", (start, end)) @pyqtSignature("") def on_dirSelectButton_clicked(self): """ Private slot to display a directory selection dialog. """ directory = KQFileDialog.getExistingDirectory(\ self, self.trUtf8("Select directory"), self.dirCombo.currentText(), QFileDialog.Options(QFileDialog.ShowDirsOnly)) if not directory.isEmpty(): self.dirCombo.setEditText(Utilities.toNativeSeparators(directory)) def __getFileList(self, path, filterRe): """ Private method to get a list of files to search. @param path the root directory to search in (string) @param filterRe regular expression defining the filter criteria (regexp object) @return list of files to be processed (list of strings) """ path = os.path.abspath(path) files = [] for dirname, _, names in os.walk(path): files.extend([os.path.join(dirname, f) \ for f in names \ if re.match(filterRe, f)] ) return files def setSearchDirectory(self, searchDir): """ Public slot to set the name of the directory to search in. @param searchDir name of the directory to search in (string or QString) """ self.dirButton.setChecked(True) self.dirCombo.setEditText(Utilities.toNativeSeparators(searchDir)) @pyqtSignature("") def on_replaceButton_clicked(self): """ Private slot to perform the requested replace actions. """ self.findProgress.setMaximum(self.findList.topLevelItemCount()) self.findProgress.setValue(0) progress = 0 for index in range(self.findList.topLevelItemCount()): itm = self.findList.topLevelItem(index) if itm.checkState(0) in [Qt.PartiallyChecked, Qt.Checked]: file = unicode(itm.text(0)) origHash = itm.data(0, self.md5Role).toString() self.findProgressLabel.setPath(file) if self.projectButton.isChecked(): fn = os.path.join(self.project.ppath, file) else: fn = file # read the file and split it into textlines try: f = open(fn, 'rb') text, encoding, hash = Utilities.decodeWithHash(f.read()) lines = text.splitlines(True) f.close() except IOError, err: KQMessageBox.critical(self, self.trUtf8("Replace in Files"), self.trUtf8("""

    Could not read the file %1.""" """ Skipping it.

    Reason: %2

    """)\ .arg(fn).arg(str(err)) ) progress += 1 self.findProgress.setValue(progress) continue # Check the original and the current hash. Skip the file, # if hashes are different. if origHash != hash: KQMessageBox.critical(self, self.trUtf8("Replace in Files"), self.trUtf8("""

    The current and the original hash of the""" """ file %1 are different. Skipping it.""" """

    Hash 1: %2

    Hash 2: %3

    """)\ .arg(fn).arg(origHash).arg(hash) ) progress += 1 self.findProgress.setValue(progress) continue # replace the lines authorized by the user for cindex in range(itm.childCount()): citm = itm.child(cindex) if citm.checkState(0) == Qt.Checked: line = citm.data(0, self.lineRole).toInt()[0] rline = citm.data(0, self.replaceRole).toString() lines[line - 1] = unicode(rline) # write the file txt = "".join(lines) txt, encoding = Utilities.encode(txt, encoding) try: f = open(fn, 'wb') f.write(txt) f.close() except IOError, err: KQMessageBox.critical(self, self.trUtf8("Replace in Files"), self.trUtf8("""

    Could not save the file %1.""" """ Skipping it.

    Reason: %2

    """)\ .arg(fn).arg(str(err)) ) progress += 1 self.findProgress.setValue(progress) self.findProgressLabel.setPath("") self.findList.clear() self.replaceButton.setEnabled(False) self.findButton.setEnabled(True) self.findButton.setDefault(True) def __contextMenuRequested(self, pos): """ Private slot to handle the context menu request. @param pos position the context menu shall be shown (QPoint) """ menu = QMenu(self) menu.addAction(self.trUtf8("Open"), self.__openFile) menu.addAction(self.trUtf8("Copy Path to Clipboard"), self.__copyToClipboard) menu.exec_(QCursor.pos()) def __openFile(self): """ Private slot to open the currently selected entry. """ itm = self.findList.selectedItems()[0] self.on_findList_itemDoubleClicked(itm, 0) def __copyToClipboard(self): """ Private method to copy the path of an entry to the clipboard. """ itm = self.findList.selectedItems()[0] if itm.parent(): fn = itm.parent().text(0) else: fn = itm.text(0) cb = QApplication.clipboard() cb.setText(fn) eric4-4.5.18/eric/UI/PaxHeaders.8617/CompareDialog.py0000644000175000001440000000013112261012651020101 xustar000000000000000030 mtime=1388582313.322093846 29 atime=1389081084.06272438 30 ctime=1389081086.309724333 eric4-4.5.18/eric/UI/CompareDialog.py0000644000175000001440000004144612261012651017645 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2004 - 2014 Detlev Offenbach # """ Module implementing a dialog to compare two files and show the result side by side. """ import os import sys import re from difflib import _mdiff, IS_CHARACTER_JUNK from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQFileDialog, KQMessageBox from KdeQt.KQMainWindow import KQMainWindow from E4Gui.E4Completers import E4FileCompleter import UI.PixmapCache from Ui_CompareDialog import Ui_CompareDialog import Utilities def sbsdiff(a, b, linenumberwidth = 4): """ Compare two sequences of lines; generate the delta for display side by side. @param a first sequence of lines (list of strings) @param b second sequence of lines (list of strings) @param linenumberwidth width (in characters) of the linenumbers (integer) @return a generator yielding tuples of differences. The tuple is composed of strings as follows.
    • opcode -- one of e, d, i, r for equal, delete, insert, replace
    • lineno a -- linenumber of sequence a
    • line a -- line of sequence a
    • lineno b -- linenumber of sequence b
    • line b -- line of sequence b
    """ def removeMarkers(line): """ Internal function to remove all diff markers. @param line line to work on (string) @return line without diff markers (string) """ return line\ .replace('\0+', "")\ .replace('\0-', "")\ .replace('\0^', "")\ .replace('\1', "") linenumberformat = "%%%dd" % linenumberwidth emptylineno = ' ' * linenumberwidth for (ln1, l1), (ln2, l2), flag in _mdiff(a, b, None, None, IS_CHARACTER_JUNK): if not flag: yield ('e', str(linenumberformat % ln1), l1, str(linenumberformat % ln2), l2) continue if ln2 == "" and l2 == "\n": yield ('d', str(linenumberformat % ln1), removeMarkers(l1), emptylineno, '\n') continue if ln1 == "" and l1 == "\n": yield ('i', emptylineno, '\n', str(linenumberformat % ln2), removeMarkers(l2)) continue yield ('r', str(linenumberformat % ln1), l1, str(linenumberformat % ln2), l2) class CompareDialog(QWidget, Ui_CompareDialog): """ Class implementing a dialog to compare two files and show the result side by side. """ def __init__(self, files = [], parent = None): """ Constructor @param files list of files to compare and their label (list of two tuples of two strings) @param parent parent widget (QWidget) """ QWidget.__init__(self,parent) self.setupUi(self) self.file1Completer = E4FileCompleter(self.file1Edit) self.file2Completer = E4FileCompleter(self.file2Edit) self.diffButton = \ self.buttonBox.addButton(self.trUtf8("Compare"), QDialogButtonBox.ActionRole) self.diffButton.setToolTip(\ self.trUtf8("Press to perform the comparison of the two files")) self.diffButton.setEnabled(False) self.diffButton.setDefault(True) self.firstButton.setIcon(UI.PixmapCache.getIcon("2uparrow.png")) self.upButton.setIcon(UI.PixmapCache.getIcon("1uparrow.png")) self.downButton.setIcon(UI.PixmapCache.getIcon("1downarrow.png")) self.lastButton.setIcon(UI.PixmapCache.getIcon("2downarrow.png")) self.totalLabel.setText(self.trUtf8('Total: %1').arg(0)) self.changedLabel.setText(self.trUtf8('Changed: %1').arg(0)) self.addedLabel.setText(self.trUtf8('Added: %1').arg(0)) self.deletedLabel.setText(self.trUtf8('Deleted: %1').arg(0)) self.updateInterval = 20 # update every 20 lines self.vsb1 = self.contents_1.verticalScrollBar() self.hsb1 = self.contents_1.horizontalScrollBar() self.vsb2 = self.contents_2.verticalScrollBar() self.hsb2 = self.contents_2.horizontalScrollBar() self.on_synchronizeCheckBox_toggled(True) if Utilities.isWindowsPlatform(): self.contents_1.setFontFamily("Lucida Console") self.contents_2.setFontFamily("Lucida Console") else: self.contents_1.setFontFamily("Monospace") self.contents_2.setFontFamily("Monospace") self.fontHeight = QFontMetrics(self.contents_1.currentFont()).height() self.cNormalFormat = self.contents_1.currentCharFormat() self.cInsertedFormat = self.contents_1.currentCharFormat() self.cInsertedFormat.setBackground(QBrush(QColor(190, 237, 190))) self.cDeletedFormat = self.contents_1.currentCharFormat() self.cDeletedFormat.setBackground(QBrush(QColor(237, 190, 190))) self.cReplacedFormat = self.contents_1.currentCharFormat() self.cReplacedFormat.setBackground(QBrush(QColor(190, 190, 237))) # connect some of our widgets explicitly self.connect(self.file1Edit, SIGNAL("textChanged(const QString &)"), self.__fileChanged) self.connect(self.file2Edit, SIGNAL("textChanged(const QString &)"), self.__fileChanged) self.connect(self.synchronizeCheckBox, SIGNAL("toggled(bool)"), self.on_synchronizeCheckBox_toggled) self.connect(self.vsb1, SIGNAL("valueChanged(int)"), self.__scrollBarMoved) self.connect(self.vsb1, SIGNAL('valueChanged(int)'), self.vsb2, SLOT('setValue(int)')) self.connect(self.vsb2, SIGNAL('valueChanged(int)'), self.vsb1, SLOT('setValue(int)')) self.diffParas = [] self.currentDiffPos = -1 self.markerPattern = "\0\+|\0\^|\0\-" if len(files) == 2: self.filesGroup.hide() self.file1Edit.setText(files[0][1]) self.file2Edit.setText(files[1][1]) self.file1Label.setText(files[0][0]) self.file2Label.setText(files[1][0]) self.diffButton.hide() QTimer.singleShot(0, self.on_diffButton_clicked) else: self.file1Label.hide() self.file2Label.hide() def show(self, filename = None): """ Public slot to show the dialog. @param filename name of a file to use as the first file (string or QString) """ if filename: self.file1Edit.setText(filename) QWidget.show(self) def __appendText(self, pane, linenumber, line, format, interLine = False): """ Private method to append text to the end of the contents pane. @param pane text edit widget to append text to (QTextedit) @param linenumber number of line to insert (string) @param line text to insert (string) @param format text format to be used (QTextCharFormat) @param interLine flag indicating interline changes (boolean) """ tc = pane.textCursor() tc.movePosition(QTextCursor.End) pane.setTextCursor(tc) pane.setCurrentCharFormat(format) if interLine: pane.insertPlainText("%s " % linenumber) for txt in re.split(self.markerPattern, line): if txt: if txt.count('\1'): txt1, txt = txt.split('\1', 1) tc = pane.textCursor() tc.movePosition(QTextCursor.End) pane.setTextCursor(tc) pane.setCurrentCharFormat(format) pane.insertPlainText(txt1) tc = pane.textCursor() tc.movePosition(QTextCursor.End) pane.setTextCursor(tc) pane.setCurrentCharFormat(self.cNormalFormat) pane.insertPlainText(txt) else: pane.insertPlainText("%s %s" % (linenumber, line)) def on_buttonBox_clicked(self, button): """ Private slot called by a button of the button box clicked. @param button button that was clicked (QAbstractButton) """ if button == self.diffButton: self.on_diffButton_clicked() @pyqtSignature("") def on_diffButton_clicked(self): """ Private slot to handle the Compare button press. """ filename1 = unicode(Utilities.toNativeSeparators(self.file1Edit.text())) try: f1 = open(filename1, "rb") lines1 = f1.readlines() f1.close() except IOError: KQMessageBox.critical(self, self.trUtf8("Compare Files"), self.trUtf8("""

    The file %1 could not be read.

    """) .arg(filename1)) return filename2 = unicode(Utilities.toNativeSeparators(self.file2Edit.text())) try: f2 = open(filename2, "rb") lines2 = f2.readlines() f2.close() except IOError: KQMessageBox.critical(self, self.trUtf8("Compare Files"), self.trUtf8("""

    The file %1 could not be read.

    """) .arg(filename2)) return self.contents_1.clear() self.contents_2.clear() # counters for changes added = 0 deleted = 0 changed = 0 paras = 1 self.diffParas = [] self.currentDiffPos = -1 oldOpcode = '' for opcode, ln1, l1, ln2, l2 in sbsdiff(lines1, lines2): if opcode in 'idr': if oldOpcode != opcode: oldOpcode = opcode self.diffParas.append(paras) # update counters if opcode == 'i': added += 1 elif opcode == 'd': deleted += 1 elif opcode == 'r': changed += 1 if opcode == 'i': format1 = self.cNormalFormat format2 = self.cInsertedFormat elif opcode == 'd': format1 = self.cDeletedFormat format2 = self.cNormalFormat elif opcode == 'r': if ln1.strip(): format1 = self.cReplacedFormat else: format1 = self.cNormalFormat if ln2.strip(): format2 = self.cReplacedFormat else: format2 = self.cNormalFormat else: oldOpcode = '' format1 = self.cNormalFormat format2 = self.cNormalFormat self.__appendText(self.contents_1, ln1, l1, format1, opcode == 'r') self.__appendText(self.contents_2, ln2, l2, format2, opcode == 'r') paras += 1 if not (paras % self.updateInterval): QApplication.processEvents() self.vsb1.setValue(0) self.vsb2.setValue(0) self.firstButton.setEnabled(False) self.upButton.setEnabled(False) self.downButton.setEnabled(len(self.diffParas) > 0) self.lastButton.setEnabled(len(self.diffParas) > 0) self.totalLabel.setText(self.trUtf8('Total: %1').arg(added + deleted + changed)) self.changedLabel.setText(self.trUtf8('Changed: %1').arg(changed)) self.addedLabel.setText(self.trUtf8('Added: %1').arg(added)) self.deletedLabel.setText(self.trUtf8('Deleted: %1').arg(deleted)) def __moveTextToCurrentDiffPos(self): """ Private slot to move the text display to the current diff position. """ value = (self.diffParas[self.currentDiffPos] - 1) * self.fontHeight self.vsb1.setValue(value) self.vsb2.setValue(value) def __scrollBarMoved(self, value): """ Private slot to enable the buttons and set the current diff position depending on scrollbar position. @param value scrollbar position (integer) """ tPos = value / self.fontHeight + 1 bPos = (value + self.vsb1.pageStep()) / self.fontHeight + 1 self.currentDiffPos = -1 if self.diffParas: self.firstButton.setEnabled(tPos > self.diffParas[0]) self.upButton.setEnabled(tPos > self.diffParas[0]) self.downButton.setEnabled(bPos < self.diffParas[-1]) self.lastButton.setEnabled(bPos < self.diffParas[-1]) if tPos >= self.diffParas[0]: for diffPos in self.diffParas: self.currentDiffPos += 1 if tPos <= diffPos: break @pyqtSignature("") def on_upButton_clicked(self): """ Private slot to go to the previous difference. """ self.currentDiffPos -= 1 self.__moveTextToCurrentDiffPos() @pyqtSignature("") def on_downButton_clicked(self): """ Private slot to go to the next difference. """ self.currentDiffPos += 1 self.__moveTextToCurrentDiffPos() @pyqtSignature("") def on_firstButton_clicked(self): """ Private slot to go to the first difference. """ self.currentDiffPos = 0 self.__moveTextToCurrentDiffPos() @pyqtSignature("") def on_lastButton_clicked(self): """ Private slot to go to the last difference. """ self.currentDiffPos = len(self.diffParas) - 1 self.__moveTextToCurrentDiffPos() def __fileChanged(self): """ Private slot to enable/disable the Compare button. """ if self.file1Edit.text().isEmpty() or \ self.file2Edit.text().isEmpty(): self.diffButton.setEnabled(False) else: self.diffButton.setEnabled(True) def __selectFile(self, lineEdit): """ Private slot to display a file selection dialog. @param lineEdit field for the display of the selected filename (QLineEdit) """ filename = KQFileDialog.getOpenFileName(\ self, self.trUtf8("Select file to compare"), lineEdit.text(), QString()) if not filename.isEmpty(): lineEdit.setText(Utilities.toNativeSeparators(filename)) @pyqtSignature("") def on_file1Button_clicked(self): """ Private slot to handle the file 1 file selection button press. """ self.__selectFile(self.file1Edit) @pyqtSignature("") def on_file2Button_clicked(self): """ Private slot to handle the file 2 file selection button press. """ self.__selectFile(self.file2Edit) @pyqtSignature("bool") def on_synchronizeCheckBox_toggled(self, sync): """ Private slot to connect or disconnect the scrollbars of the displays. @param sync flag indicating synchronisation status (boolean) """ if sync: self.hsb2.setValue(self.hsb1.value()) self.connect(self.hsb1, SIGNAL('valueChanged(int)'), self.hsb2, SLOT('setValue(int)')) self.connect(self.hsb2, SIGNAL('valueChanged(int)'), self.hsb1, SLOT('setValue(int)')) else: self.disconnect(self.hsb1, SIGNAL('valueChanged(int)'), self.hsb2, SLOT('setValue(int)')) self.disconnect(self.hsb2, SIGNAL('valueChanged(int)'), self.hsb1, SLOT('setValue(int)')) class CompareWindow(KQMainWindow): """ Main window class for the standalone dialog. """ def __init__(self, files = [], parent = None): """ Constructor @param files list of files to compare and their label (list of two tuples of two strings) @param parent reference to the parent widget (QWidget) """ KQMainWindow.__init__(self, parent) self.cw = CompareDialog(files, self) self.cw.installEventFilter(self) size = self.cw.size() self.setCentralWidget(self.cw) self.resize(size) def eventFilter(self, obj, event): """ Public method to filter events. @param obj reference to the object the event is meant for (QObject) @param event reference to the event object (QEvent) @return flag indicating, whether the event was handled (boolean) """ if event.type() == QEvent.Close: QApplication.exit() return True return Falseeric4-4.5.18/eric/UI/PaxHeaders.8617/CompareDialog.ui0000644000175000001440000000007411106322061020070 xustar000000000000000030 atime=1389081084.063724381 30 ctime=1389081086.309724333 eric4-4.5.18/eric/UI/CompareDialog.ui0000644000175000001440000002103111106322061017612 0ustar00detlevusers00000000000000 CompareDialog 0 0 950 600 File Comparison true 0 File &1: file1Edit Enter the name of the first file Press to select the file via a file selection dialog ... File &2: file1Edit Enter the name of the second file Press to select the file via a file selection dialog ... true true Qt::NoFocus QTextEdit::NoWrap true 8 false Qt::Vertical 20 101 false Press to move to the first difference false Press to move to the previous difference false Press to move to the next difference false Press to move to the last difference Qt::Vertical 20 101 Qt::NoFocus QTextEdit::NoWrap true 8 false Select, if the scrollbars should be synchronized &Synchronize scrollbars Alt+S true QFrame::Panel QFrame::Sunken QFrame::Panel QFrame::Sunken QFrame::Panel QFrame::Sunken QFrame::Panel QFrame::Sunken Qt::Horizontal QDialogButtonBox::Close file1Edit file1Button file2Edit file2Button synchronizeCheckBox firstButton upButton downButton lastButton buttonBox rejected() CompareDialog close() 102 580 104 599 eric4-4.5.18/eric/UI/PaxHeaders.8617/DeleteFilesConfirmationDialog.py0000644000175000001440000000013212261012651023252 xustar000000000000000030 mtime=1388582313.325093884 30 atime=1389081084.063724381 30 ctime=1389081086.309724333 eric4-4.5.18/eric/UI/DeleteFilesConfirmationDialog.py0000644000175000001440000000354012261012651023006 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2004 - 2014 Detlev Offenbach # """ Module implementing a dialog to confirm deletion of multiple files. """ from PyQt4.QtGui import QDialog, QDialogButtonBox from Ui_DeleteFilesConfirmationDialog import Ui_DeleteFilesConfirmationDialog class DeleteFilesConfirmationDialog(QDialog, Ui_DeleteFilesConfirmationDialog): """ Class implementing a dialog to confirm deletion of multiple files. """ def __init__(self, parent, caption, message, files): """ Constructor @param parent parent of this dialog (QWidget) @param caption window title for the dialog (string or QString) @param message message to be shown (string or QString) @param okLabel label for the OK button (string or QString) @param cancelLabel label for the Cancel button (string or QString) @param files list of filenames to be shown (list of strings or QStrings or a QStringList) """ QDialog.__init__(self,parent) self.setupUi(self) self.setModal(True) self.buttonBox.button(QDialogButtonBox.Yes).setAutoDefault(False) self.buttonBox.button(QDialogButtonBox.No).setDefault(True) self.buttonBox.button(QDialogButtonBox.No).setFocus() self.setWindowTitle(caption) self.message.setText(message) for file_ in files: self.filesList.addItem(file_) def on_buttonBox_clicked(self, button): """ Private slot called by a button of the button box clicked. @param button button that was clicked (QAbstractButton) """ if button == self.buttonBox.button(QDialogButtonBox.Yes): self.accept() elif button == self.buttonBox.button(QDialogButtonBox.No): self.reject() eric4-4.5.18/eric/UI/PaxHeaders.8617/BrowserSortFilterProxyModel.py0000644000175000001440000000013212261012651023060 xustar000000000000000030 mtime=1388582313.327093909 30 atime=1389081084.063724381 30 ctime=1389081086.309724333 eric4-4.5.18/eric/UI/BrowserSortFilterProxyModel.py0000644000175000001440000000715012261012651022615 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing the browser sort filter proxy model. """ from PyQt4.QtCore import * from PyQt4.QtGui import * import Preferences class BrowserSortFilterProxyModel(QSortFilterProxyModel): """ Class implementing the browser sort filter proxy model. """ def __init__(self, parent = None): """ Constructor @param parent reference to the parent object (QObject) """ QSortFilterProxyModel.__init__(self, parent) self.hideNonPublic = Preferences.getUI("BrowsersHideNonPublic") def sort(self, column, order): """ Public method to sort the items. @param column column number to sort on (integer) @param order sort order for the sort (Qt.SortOrder) """ self.__sortColumn = column self.__sortOrder = order QSortFilterProxyModel.sort(self, column, order) def lessThan(self, left, right): """ Protected method used to sort the displayed items. It implements a special sorting function that takes into account, if folders should be shown first, and that __init__ is always the first method of a class. @param left index of left item (QModelIndex) @param right index of right item (QModelIndex) @return true, if left is less than right (boolean) """ l = left.model() and left.model().item(left) or None r = right.model() and right.model().item(right) or None if l and r: return l.lessThan(r, self.__sortColumn, self.__sortOrder) return False def item(self, index): """ Public method to get a reference to an item. @param index index of the data to retrieve (QModelIndex) @return requested item reference (BrowserItem) """ if not index.isValid(): return None sindex = self.mapToSource(index) return self.sourceModel().item(sindex) def hasChildren(self, parent = QModelIndex()): """ Public method to check for the presence of child items. We always return True for normal items in order to do lazy population of the tree. @param parent index of parent item (QModelIndex) @return flag indicating the presence of child items (boolean) """ sindex = self.mapToSource(parent) return self.sourceModel().hasChildren(sindex) def filterAcceptsRow(self, source_row, source_parent): """ Protected method to filter rows. It implements a filter to suppress the display of non public classes, methods and attributes. @param source_row row number (in the source model) of item (integer) @param source_parent index of parent item (in the source model) of item (QModelIndex) @return flag indicating, if the item should be shown (boolean) """ if self.hideNonPublic: sindex = self.sourceModel().index(source_row, 0, source_parent) return self.sourceModel().item(sindex).isPublic() else: return True def preferencesChanged(self): """ Public slot called to handle a change of the preferences settings. """ hideNonPublic = Preferences.getUI("BrowsersHideNonPublic") if self.hideNonPublic != hideNonPublic: self.hideNonPublic = hideNonPublic self.filterChanged() eric4-4.5.18/eric/UI/PaxHeaders.8617/Browser.py0000644000175000001440000000013212261012651017017 xustar000000000000000030 mtime=1388582313.343094112 30 atime=1389081084.064724381 30 ctime=1389081086.309724333 eric4-4.5.18/eric/UI/Browser.py0000644000175000001440000005516512261012651016565 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2002 - 2014 Detlev Offenbach # """ Module implementing a browser with class browsing capabilities. """ import sys import os import mimetypes from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQFileDialog from KdeQt.KQApplication import e4App from BrowserModel import BrowserModel, \ BrowserDirectoryItem, BrowserFileItem, BrowserClassItem, BrowserMethodItem, \ BrowserClassAttributeItem from BrowserSortFilterProxyModel import BrowserSortFilterProxyModel import UI.PixmapCache import Preferences import Utilities class Browser(QTreeView): """ Class used to display a file system tree. Via the context menu that is displayed by a right click the user can select various actions on the selected file. @signal sourceFile(string, int, string) emitted to open a Python file at a line @signal designerFile(string) emitted to open a Qt-Designer file @signal linguistFile(string) emitted to open a Qt-Linguist (*.ts) file @signal trpreview(string list) emitted to preview a Qt-Linguist (*.qm) file @signal projectFile(string) emitted to open an eric4 project file @signal multiProjectFile(string) emitted to open an eric4 multi project file @signal pixmapFile(string) emitted to open a pixmap file @signal pixmapEditFile(string) emitted to edit a pixmap file @signal svgFile(string) emitted to open a SVG file @signal unittestOpen(string) emitted to open a Python file for a unittest """ def __init__(self, parent = None): """ Constructor @param parent parent widget (QWidget) """ QTreeView.__init__(self, parent) self.setWindowTitle(QApplication.translate('Browser', 'File-Browser')) self.setWindowIcon(UI.PixmapCache.getIcon("eric.png")) self.__embeddedBrowser = Preferences.getUI("LayoutFileBrowserEmbedded") self.__model = BrowserModel() self.__sortModel = BrowserSortFilterProxyModel() self.__sortModel.setSourceModel(self.__model) self.setModel(self.__sortModel) self.selectedItemsFilter = [BrowserFileItem] self.setContextMenuPolicy(Qt.CustomContextMenu) self.connect(self, SIGNAL("customContextMenuRequested(const QPoint &)"), self._contextMenuRequested) self.connect(self, SIGNAL("activated(const QModelIndex &)"), self._openItem) self.connect(self, SIGNAL("expanded(const QModelIndex &)"), self._resizeColumns) self.connect(self, SIGNAL("collapsed(const QModelIndex &)"), self._resizeColumns) self.setWhatsThis(QApplication.translate('Browser', """The Browser Window""" """

    This allows you to easily navigate the hierachy of directories and""" """ files on your system, identify the Python programs and open them up in""" """ a Source Viewer window. The window displays several separate""" """ hierachies.

    """ """

    The first hierachy is only shown if you have opened a program for""" """ debugging and its root is the directory containing that program.""" """ Usually all of the separate files that make up a Python application are""" """ held in the same directory, so this hierachy gives you easy access to""" """ most of what you will need.

    """ """

    The next hierachy is used to easily navigate the directories that are""" """ specified in the Python sys.path variable.

    """ """

    The remaining hierachies allow you navigate your system as a whole.""" """ On a UNIX system there will be a hierachy with / at its""" """ root and another with the user home directory.""" """ On a Windows system there will be a hierachy for each drive on the""" """ system.

    """ """

    Python programs (i.e. those with a .py file name suffix)""" """ are identified in the hierachies with a Python icon.""" """ The right mouse button will popup a menu which lets you""" """ open the file in a Source Viewer window,""" """ open the file for debugging or use it for a unittest run.

    """ """

    The context menu of a class, function or method allows you to open""" """ the file defining this class, function or method and will ensure, that""" """ the correct source line is visible.

    """ """

    Qt-Designer files (i.e. those with a .ui file name suffix)""" """ are shown with a Designer icon. The context menu of these files""" """ allows you to start Qt-Designer with that file.

    """ """

    Qt-Linguist files (i.e. those with a .ts file name suffix)""" """ are shown with a Linguist icon. The context menu of these files""" """ allows you to start Qt-Linguist with that file.

    """ )) self.__createPopupMenus() self._init() # perform common initialization tasks def _init(self): """ Protected method to perform initialization tasks common to this base class and all derived classes. """ self.setRootIsDecorated(True) self.setAlternatingRowColors(True) header = self.header() header.setSortIndicator(0, Qt.AscendingOrder) header.setSortIndicatorShown(True) header.setClickable(True) self.setSortingEnabled(True) self.setSelectionMode(QAbstractItemView.ExtendedSelection) self.setSelectionBehavior(QAbstractItemView.SelectRows) self.header().setStretchLastSection(True) self.headerSize0 = 0 self.layoutDisplay() def layoutDisplay(self): """ Public slot to perform a layout operation. """ self._resizeColumns(QModelIndex()) self._resort() def _resizeColumns(self, index): """ Protected slot to resize the view when items get expanded or collapsed. @param index index of item (QModelIndex) """ w = max(100, self.sizeHintForColumn(0)) if w != self.headerSize0: self.header().resizeSection(0, w) self.headerSize0 = w def _resort(self): """ Protected slot to resort the tree. """ self.model().sort(self.header().sortIndicatorSection(), self.header().sortIndicatorOrder()) def __createPopupMenus(self): """ Private method to generate the various popup menus. """ # create the popup menu for source files self.sourceMenu = QMenu(self) self.sourceMenu.addAction(QApplication.translate('Browser', 'Open'), self._openItem) self.unittestAct = self.sourceMenu.addAction(\ QApplication.translate('Browser', 'Run unittest...'), self.handleUnittest) self.sourceMenu.addAction( QApplication.translate('Browser', 'Copy Path to Clipboard'), self._copyToClipboard) # create the popup menu for general use self.menu = QMenu(self) self.menu.addAction(QApplication.translate('Browser', 'Open'), self._openItem) self.editPixmapAct = \ self.menu.addAction(QApplication.translate('Browser', 'Open in Icon Editor'), self._editPixmap) self.menu.addAction( QApplication.translate('Browser', 'Copy Path to Clipboard'), self._copyToClipboard) if self.__embeddedBrowser in [1, 2]: self.menu.addSeparator() self.menu.addAction(QApplication.translate('Browser', 'Configure...'), self.__configure) # create the menu for multiple selected files self.multiMenu = QMenu(self) self.multiMenu.addAction(QApplication.translate('Browser', 'Open'), self._openItem) if self.__embeddedBrowser in [1, 2]: self.multiMenu.addSeparator() self.multiMenu.addAction(QApplication.translate('Browser', 'Configure...'), self.__configure) # create the directory menu self.dirMenu = QMenu(self) self.dirMenu.addAction(QApplication.translate('Browser', 'New toplevel directory...'), self.__newToplevelDir) self.addAsTopLevelAct = self.dirMenu.addAction(\ QApplication.translate('Browser', 'Add as toplevel directory'), self.__addAsToplevelDir) self.removeFromToplevelAct = self.dirMenu.addAction(\ QApplication.translate('Browser', 'Remove from toplevel'), self.__removeToplevel) self.dirMenu.addSeparator() self.dirMenu.addAction(QApplication.translate('Browser', 'Refresh directory'), self.__refreshDirectory) self.dirMenu.addSeparator() self.dirMenu.addAction(QApplication.translate('Browser', 'Find in this directory'), self.__findInDirectory) self.dirMenu.addAction(QApplication.translate('Browser', 'Find&&Replace in this directory'), self.__replaceInDirectory) self.dirMenu.addAction( QApplication.translate('Browser', 'Copy Path to Clipboard'), self._copyToClipboard) if self.__embeddedBrowser in [1, 2]: self.dirMenu.addSeparator() self.dirMenu.addAction(QApplication.translate('Browser', 'Configure...'), self.__configure) # create the background menu self.backMenu = QMenu(self) self.backMenu.addAction(QApplication.translate('Browser', 'New toplevel directory...'), self.__newToplevelDir) if self.__embeddedBrowser in [1, 2]: self.backMenu.addSeparator() self.backMenu.addAction(QApplication.translate('Browser', 'Configure...'), self.__configure) def mouseDoubleClickEvent(self, mouseEvent): """ Protected method of QAbstractItemView. Reimplemented to disable expanding/collapsing of items when double-clicking. Instead the double-clicked entry is opened. @param mouseEvent the mouse event (QMouseEvent) """ index = self.indexAt(mouseEvent.pos()) if index.isValid(): self._openItem() def _contextMenuRequested(self, coord): """ Protected slot to show the context menu of the listview. @param coord the position of the mouse pointer (QPoint) """ categories = self.getSelectedItemsCountCategorized(\ [BrowserDirectoryItem, BrowserFileItem, BrowserClassItem, BrowserMethodItem]) cnt = categories["sum"] bfcnt = categories[unicode(BrowserFileItem)] if cnt > 1 and cnt == bfcnt: self.multiMenu.popup(self.mapToGlobal(coord)) else: index = self.indexAt(coord) if index.isValid(): self.setCurrentIndex(index) flags = QItemSelectionModel.SelectionFlags(\ QItemSelectionModel.ClearAndSelect | QItemSelectionModel.Rows) self.selectionModel().select(index, flags) itm = self.model().item(index) coord = self.mapToGlobal(coord) if isinstance(itm, BrowserFileItem): if itm.isPythonFile(): if itm.fileName().endswith('.py'): self.unittestAct.setEnabled(True) else: self.unittestAct.setEnabled(False) self.sourceMenu.popup(coord) else: self.editPixmapAct.setVisible(itm.isPixmapFile()) self.menu.popup(coord) elif isinstance(itm, BrowserClassItem) or \ isinstance(itm, BrowserMethodItem): self.menu.popup(coord) elif isinstance(itm, BrowserDirectoryItem): if not index.parent().isValid(): self.removeFromToplevelAct.setEnabled(True) self.addAsTopLevelAct.setEnabled(False) else: self.removeFromToplevelAct.setEnabled(False) self.addAsTopLevelAct.setEnabled(True) self.dirMenu.popup(coord) else: self.backMenu.popup(coord) else: self.backMenu.popup(self.mapToGlobal(coord)) def handlePreferencesChanged(self): """ Public slot used to handle the preferencesChanged signal. """ self.model().preferencesChanged() self._resort() def _openItem(self): """ Protected slot to handle the open popup menu entry. """ itmList = self.getSelectedItems(\ [BrowserFileItem, BrowserClassItem, BrowserMethodItem, BrowserClassAttributeItem]) for itm in itmList: if isinstance(itm, BrowserFileItem): if itm.isPythonFile(): self.emit(SIGNAL('sourceFile'), itm.fileName(), -1, "Python") elif itm.isPython3File(): self.emit(SIGNAL('sourceFile'), itm.fileName(), -1, "Python3") elif itm.isRubyFile(): self.emit(SIGNAL('sourceFile'), itm.fileName(), -1, "Ruby") elif itm.isDFile(): self.emit(SIGNAL('sourceFile'), itm.fileName(), -1, "D") elif itm.isDesignerFile(): self.emit(SIGNAL('designerFile'), itm.fileName()) elif itm.isDesignerHeaderFile(): self.emit(SIGNAL('sourceFile'), itm.fileName()) elif itm.isLinguistFile(): if itm.fileExt() == '.ts': self.emit(SIGNAL('linguistFile'), itm.fileName()) else: self.emit(SIGNAL('trpreview'), [itm.fileName()]) elif itm.isProjectFile(): self.emit(SIGNAL('projectFile'), itm.fileName()) elif itm.isMultiProjectFile(): self.emit(SIGNAL('multiProjectFile'), itm.fileName()) elif itm.isIdlFile(): self.emit(SIGNAL('sourceFile'), itm.fileName()) elif itm.isResourcesFile(): self.emit(SIGNAL('sourceFile'), itm.fileName()) elif itm.isPixmapFile(): self.emit(SIGNAL('pixmapFile'), itm.fileName()) elif itm.isSvgFile(): self.emit(SIGNAL('svgFile'), itm.fileName()) else: type_ = mimetypes.guess_type(itm.fileName())[0] if type_ is None or type_.split("/")[0] == "text": self.emit(SIGNAL('sourceFile'), itm.fileName()) else: QDesktopServices.openUrl(QUrl(itm.fileName())) elif isinstance(itm, BrowserClassItem): self.emit(SIGNAL('sourceFile'), itm.fileName(), itm.classObject().lineno) elif isinstance(itm, BrowserMethodItem): self.emit(SIGNAL('sourceFile'), itm.fileName(), itm.functionObject().lineno) elif isinstance(itm, BrowserClassAttributeItem): self.emit(SIGNAL('sourceFile'), itm.fileName(), itm.attributeObject().lineno) def _editPixmap(self): """ Protected slot to handle the open in icon editor popup menu entry. """ itmList = self.getSelectedItems([BrowserFileItem]) for itm in itmList: if isinstance(itm, BrowserFileItem): if itm.isPixmapFile(): self.emit(SIGNAL('pixmapEditFile'), itm.fileName()) def _copyToClipboard(self): """ Protected method to copy the text shown for an entry to the clipboard. """ itm = self.model().item(self.currentIndex()) try: fn = unicode(itm.fileName()) except AttributeError: try: fn = unicode(itm.dirName()) except AttributeError: fn = "" if fn: cb = QApplication.clipboard() cb.setText(fn) def handleUnittest(self): """ Public slot to handle the unittest popup menu entry. """ try: index = self.currentIndex() itm = self.model().item(index) pyfn = itm.fileName() except AttributeError: pyfn = None if pyfn is not None: self.emit(SIGNAL('unittestOpen'), pyfn) def __newToplevelDir(self): """ Private slot to handle the New toplevel directory popup menu entry. """ dname = KQFileDialog.getExistingDirectory(\ None, QApplication.translate('Browser', "New toplevel directory"), QString(), QFileDialog.Options(QFileDialog.ShowDirsOnly)) if not dname.isEmpty(): dname = os.path.abspath(unicode(Utilities.toNativeSeparators(dname))) self.__model.addTopLevelDir(dname) def __removeToplevel(self): """ Private slot to handle the Remove from toplevel popup menu entry. """ index = self.currentIndex() sindex = self.model().mapToSource(index) self.__model.removeToplevelDir(sindex) def __addAsToplevelDir(self): """ Private slot to handle the Add as toplevel directory popup menu entry. """ index = self.currentIndex() dname = self.model().item(index).dirName() self.__model.addTopLevelDir(dname) def __refreshDirectory(self): """ Private slot to refresh a directory entry. """ index = self.currentIndex() refreshDir = self.model().item(index).dirName() self.__model.directoryChanged(refreshDir) def __findInDirectory(self): """ Private slot to handle the Find in directory popup menu entry. """ index = self.currentIndex() searchDir = self.model().item(index).dirName() findFilesDialog = e4App().getObject("FindFilesDialog") findFilesDialog.setSearchDirectory(searchDir) findFilesDialog.show() findFilesDialog.raise_() findFilesDialog.activateWindow() def __replaceInDirectory(self): """ Private slot to handle the Find&Replace in directory popup menu entry. """ index = self.currentIndex() searchDir = self.model().item(index).dirName() replaceFilesDialog = e4App().getObject("ReplaceFilesDialog") replaceFilesDialog.setSearchDirectory(searchDir) replaceFilesDialog.show() replaceFilesDialog.raise_() replaceFilesDialog.activateWindow() def handleProgramChange(self,fn): """ Public slot to handle the programChange signal. """ self.__model.programChange(os.path.dirname(fn)) def wantedItem(self, itm, filter=None): """ Public method to check type of an item. @param itm the item to check (BrowserItem) @param filter list of classes to check against @return flag indicating item is a valid type (boolean) """ if filter is None: filter = self.selectedItemsFilter for typ in filter: if isinstance(itm, typ): return True return False def getSelectedItems(self, filter=None): """ Public method to get the selected items. @param filter list of classes to check against @return list of selected items (list of BroweserItem) """ selectedItems = [] indexes = self.selectedIndexes() for index in indexes: if index.column() == 0: itm = self.model().item(index) if self.wantedItem(itm, filter): selectedItems.append(itm) return selectedItems def getSelectedItemsCount(self, filter=None): """ Public method to get the count of items selected. @param filter list of classes to check against @return count of items selected (integer) """ count = 0 indexes = self.selectedIndexes() for index in indexes: if index.column() == 0: itm = self.model().item(index) if self.wantedItem(itm, filter): count += 1 return count def getSelectedItemsCountCategorized(self, filter=None): """ Public method to get a categorized count of selected items. @param filter list of classes to check against @return a dictionary containing the counts of items belonging to the individual filter classes. The keys of the dictionary are the unicode representation of the classes given in the filter (i.e. unicode(filterClass)). The dictionary contains an additional entry with key "sum", that stores the sum of all selected entries fulfilling the filter criteria. """ if filter is None: filter = self.selectedItemsFilter categories = {} categories["sum"] = 0 for typ in filter: categories[unicode(typ)] = 0 indexes = self.selectedIndexes() for index in indexes: if index.column() == 0: itm = self.model().item(index) for typ in filter: if isinstance(itm, typ): categories["sum"] += 1 categories[unicode(typ)] += 1 return categories def saveToplevelDirs(self): """ Public slot to save the toplevel directories. """ self.__model.saveToplevelDirs() def __configure(self): """ Private method to open the configuration dialog. """ if self.__embeddedBrowser == 1: e4App().getObject("UserInterface").showPreferences("debuggerGeneralPage") elif self.__embeddedBrowser == 2: e4App().getObject("UserInterface").showPreferences("projectBrowserPage") eric4-4.5.18/eric/UI/PaxHeaders.8617/AuthenticationDialog.ui0000644000175000001440000000007311072435341021470 xustar000000000000000029 atime=1389081084.07772438 30 ctime=1389081086.309724333 eric4-4.5.18/eric/UI/AuthenticationDialog.ui0000644000175000001440000000732411072435341021224 0ustar00detlevusers00000000000000 AuthenticationDialog 0 0 400 154 0 0 Authentication Required true Icon 0 0 Info true Username: Enter username Password: Enter password QLineEdit::Password Select to save the login data Save login data Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok usernameEdit passwordEdit saveCheckBox buttonBox buttonBox accepted() AuthenticationDialog accept() 29 111 23 117 buttonBox rejected() AuthenticationDialog reject() 87 111 81 117 eric4-4.5.18/eric/PaxHeaders.8617/Globals0000644000175000001440000000013112261012660016012 xustar000000000000000030 mtime=1388582320.927189516 29 atime=1389081086.01472434 30 ctime=1389081086.315724332 eric4-4.5.18/eric/Globals/0000755000175000001440000000000012261012660015622 5ustar00detlevusers00000000000000eric4-4.5.18/eric/Globals/PaxHeaders.8617/__init__.py0000644000175000001440000000013112261012651020200 xustar000000000000000030 mtime=1388582313.358094302 29 atime=1389081084.07972438 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Globals/__init__.py0000644000175000001440000000305712261012651017740 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module defining common data to be used by all modules. """ import sys import os # names of the various settings objects settingsNameOrganization = "Eric4" settingsNameGlobal = "eric4" settingsNameRecent = "eric4recent" # key names of the various recent entries recentNameMultiProject = "MultiProjects" recentNameProject = "Projects" recentNameFiles = "Files" def isWindowsPlatform(): """ Function to check, if this is a Windows platform. @return flag indicating Windows platform (boolean) """ return sys.platform.startswith("win") def isMacPlatform(): """ Function to check, if this is a Mac platform. @return flag indicating Mac platform (boolean) """ return sys.platform == "darwin" def isLinuxPlatform(): """ Function to check, if this is a Linux platform. @return flag indicating Linux platform (boolean) """ return sys.platform.startswith("linux") def getPythonModulesDirectory(): """ Function to determine the path to Python's modules directory. @return path to the Python modules directory (string) """ import distutils.sysconfig return distutils.sysconfig.get_python_lib(True) def getPyQt4ModulesDirectory(): """ Function to determine the path to PyQt4's modules directory. @return path to the PyQt4 modules directory (string) """ import distutils.sysconfig return os.path.join(distutils.sysconfig.get_python_lib(True), "PyQt4") eric4-4.5.18/eric/PaxHeaders.8617/eric4_editor.pyw0000644000175000001440000000013112261012652017622 xustar000000000000000030 mtime=1388582314.992114976 29 atime=1389081084.07972438 30 ctime=1389081086.309724333 eric4-4.5.18/eric/eric4_editor.pyw0000644000175000001440000000021212261012652017350 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2010 - 2014 Detlev Offenbach # from eric4_editor import main main() eric4-4.5.18/eric/PaxHeaders.8617/MultiProject0000644000175000001440000000013212262730776017071 xustar000000000000000030 mtime=1389081086.301724332 30 atime=1389081086.305724332 30 ctime=1389081086.315724332 eric4-4.5.18/eric/MultiProject/0000755000175000001440000000000012262730776016700 5ustar00detlevusers00000000000000eric4-4.5.18/eric/MultiProject/PaxHeaders.8617/MultiProject.py0000644000175000001440000000013012261012651022117 xustar000000000000000029 mtime=1388582313.36109434 29 atime=1389081084.07972438 30 ctime=1389081086.309724333 eric4-4.5.18/eric/MultiProject/MultiProject.py0000644000175000001440000010542212261012651021657 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2008 - 2014 Detlev Offenbach # """ Module implementing the multi project management functionality. """ import os import sys import cStringIO from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQFileDialog, KQMessageBox from KdeQt.KQApplication import e4App from Globals import recentNameMultiProject from PropertiesDialog import PropertiesDialog from AddProjectDialog import AddProjectDialog from E4XML.XMLUtilities import make_parser from E4XML.XMLErrorHandler import XMLErrorHandler, XMLFatalParseError from E4XML.XMLEntityResolver import XMLEntityResolver from E4XML.MultiProjectHandler import MultiProjectHandler from E4XML.MultiProjectWriter import MultiProjectWriter import UI.PixmapCache from E4Gui.E4Action import E4Action, createActionGroup import Preferences import Utilities class MultiProject(QObject): """ Class implementing the project management functionality. @signal dirty(int) emitted when the dirty state changes @signal newMultiProject() emitted after a new multi project was generated @signal multiProjectOpened() emitted after a multi project file was read @signal multiProjectClosed() emitted after a multi project was closed @signal multiProjectPropertiesChanged() emitted after the multi project properties were changed @signal showMenu(string, QMenu) emitted when a menu is about to be shown. The name of the menu and a reference to the menu are given. @signal projectDataChanged(project data dict) emitted after a project entry has been changed @signal projectAdded(project data dict) emitted after a project entry has been added @signal projectRemoved(project data dict) emitted after a project entry has been removed @signal projectOpened(filename) emitted after the project has been opened """ def __init__(self, project, parent = None, filename = None): """ Constructor @param project reference to the project object (Project.Project) @param parent parent widget (usually the ui object) (QWidget) @param filename optional filename of a multi project file to open (string) """ QObject.__init__(self, parent) self.ui = parent self.projectObject = project self.__initData() self.recent = QStringList() self.__loadRecent() if filename is not None: self.openMultiProject(filename) def __initData(self): """ Private method to initialize the multi project data part. """ self.loaded = False # flag for the loaded status self.dirty = False # dirty flag self.pfile = "" # name of the multi project file self.ppath = "" # name of the multi project directory self.description = "" # description of the multi project self.name = "" self.opened = False self.projects = [] # list of project info; each info entry is a dictionary # 'name' : Name of the project # 'file' : project filename # 'master' : flag indicating the master project # 'description' : description of the project def __loadRecent(self): """ Private method to load the recently opened multi project filenames. """ self.recent.clear() Preferences.Prefs.rsettings.sync() rp = Preferences.Prefs.rsettings.value(recentNameMultiProject) if rp.isValid(): for f in rp.toStringList(): if QFileInfo(f).exists(): self.recent.append(f) def __saveRecent(self): """ Private method to save the list of recently opened filenames. """ Preferences.Prefs.rsettings.setValue(recentNameMultiProject, QVariant(self.recent)) Preferences.Prefs.rsettings.sync() def getMostRecent(self): """ Public method to get the most recently opened multiproject. @return path of the most recently opened multiproject (string) """ if len(self.recent): return unicode(self.recent[0]) else: return None def setDirty(self, b): """ Public method to set the dirty state. It emits the signal dirty(int). @param b dirty state (boolean) """ self.dirty = b self.saveAct.setEnabled(b) self.emit(SIGNAL("dirty"), bool(b)) def isDirty(self): """ Public method to return the dirty state. @return dirty state (boolean) """ return self.dirty def isOpen(self): """ Public method to return the opened state. @return open state (boolean) """ return self.opened def getMultiProjectPath(self): """ Public method to get the multi project path. @return multi project path (string) """ return self.ppath def getMultiProjectFile(self): """ Public method to get the path of the multi project file. @return path of the multi project file (string) """ return self.pfile def __checkFilesExist(self): """ Private method to check, if the files in a list exist. The project files are checked for existance in the filesystem. Non existant projects are removed from the list and the dirty state of the multi project is changed accordingly. """ removed = False removelist = [] for project in self.projects: if not os.path.exists(project['file']): removelist.append(project) removed = True if removed: for project in removelist: self.projects.remove(project) self.setDirty(True) def __readMultiProject(self, fn): """ Private method to read in a multi project (.e4m, .e4mz) file. @param fn filename of the multi project file to be read (string or QString) @return flag indicating success """ fn = unicode(fn) try: if fn.lower().endswith("e4mz"): try: import gzip except ImportError: QApplication.restoreOverrideCursor() KQMessageBox.critical(None, self.trUtf8("Read multiproject file"), self.trUtf8("""Compressed multiproject files not supported.""" """ The compression library is missing.""")) return False f = gzip.open(fn, "rb") else: f = open(fn, "rb") line = f.readline() dtdLine = f.readline() f.close() except EnvironmentError: QApplication.restoreOverrideCursor() KQMessageBox.critical(None, self.trUtf8("Read multiproject file"), self.trUtf8("

    The multiproject file %1 could not be read.

    ")\ .arg(fn)) return False self.pfile = os.path.abspath(fn) self.ppath = os.path.abspath(os.path.dirname(fn)) # now read the file if not line.startswith('The multiproject file %1 has an unsupported" " format.

    ").arg(fn)) return False # insert filename into list of recently opened multi projects self.__syncRecent() res = self.__readXMLMultiProject(fn, dtdLine.startswith("The multiproject file %1 could not be read.

    ")\ .arg(fn)) return False except XMLFatalParseError: QApplication.restoreOverrideCursor() KQMessageBox.critical(None, self.trUtf8("Read multiproject file"), self.trUtf8("

    The multiproject file %1 has invalid " "contents.

    ").arg(fn)) eh.showParseMessages() return False QApplication.restoreOverrideCursor() eh.showParseMessages() QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) QApplication.processEvents() return True def __writeMultiProject(self, fn = None): """ Private method to save the multi project infos to a multi project file. @param fn optional filename of the multi project file to be written. If fn is None, the filename stored in the multi project object is used. This is the 'save' action. If fn is given, this filename is used instead of the one in the multi project object. This is the 'save as' action. @return flag indicating success """ if fn is None: fn = self.pfile res = self.__writeXMLMultiProject(fn) if res: self.pfile = os.path.abspath(fn) self.ppath = os.path.abspath(os.path.dirname(fn)) self.name = os.path.splitext(os.path.basename(fn))[0] self.setDirty(False) # insert filename into list of recently opened projects self.__syncRecent() return res def __writeXMLMultiProject(self, fn = None): """ Private method to write the multi project data to an XML file. @param fn the filename of the multi project file (string) """ try: if fn.lower().endswith("e4mz"): try: import gzip except ImportError: KQMessageBox.critical(None, self.trUtf8("Save multiproject file"), self.trUtf8("""Compressed multiproject files not supported.""" """ The compression library is missing.""")) return False f = gzip.open(fn, "wb") else: f = open(fn, "wb") MultiProjectWriter(self, f, os.path.splitext(os.path.basename(fn))[0])\ .writeXML() f.close() except IOError: KQMessageBox.critical(None, self.trUtf8("Save multiproject file"), self.trUtf8("

    The multiproject file %1 could not be " "written.

    ").arg(fn)) return False return True def addProject(self, startdir = None): """ Public slot used to add files to the project. @param startdir start directory for the selection dialog """ if startdir is None: startdir = self.ppath dlg = AddProjectDialog(self.ui, startdir=startdir) if dlg.exec_() == QDialog.Accepted: name, filename, isMaster, description = dlg.getData() # step 1: check, if project was already added for project in self.projects: if project['file'] == filename: return # step 2: check, if master should be changed if isMaster: for project in self.projects: if project['master']: project['master'] = False self.emit(SIGNAL("projectDataChanged"), project) self.setDirty(True) break # step 3: add the project entry project = { 'name' : name, 'file' : filename, 'master' : isMaster, 'description' : description, } self.projects.append(project) self.emit(SIGNAL("projectAdded"), project) self.setDirty(True) def changeProjectProperties(self, pro): """ Public method to change the data of a project entry. @param pro dictionary with the project data """ # step 1: check, if master should be changed if pro['master']: for project in self.projects: if project['master']: if project['file'] != pro['file']: project['master'] = False self.emit(SIGNAL("projectDataChanged"), project) self.setDirty(True) break # step 2: change the entry for project in self.projects: if project['file'] == pro['file']: # project filename is not changeable via interface project['name'] = pro['name'] project['master'] = pro['master'] project['description'] = pro['description'] self.emit(SIGNAL("projectDataChanged"), project) self.setDirty(True) def getProjects(self): """ Public method to get all project entries. """ return self.projects def getProject(self, fn): """ Public method to get a reference to a project entry. @param fn filename of the project to be removed from the multi project @return dictionary containing the project data """ for project in self.projects: if project['file'] == fn: return project return None def removeProject(self, fn): """ Public slot to remove a project from the multi project. @param fn filename of the project to be removed from the multi project """ for project in self.projects: if project['file'] == fn: self.projects.remove(project) self.emit(SIGNAL("projectRemoved"), project) self.setDirty(True) break def newMultiProject(self): """ Public slot to build a new multi project. This method displays the new multi project dialog and initializes the multi project object with the data entered. """ if not self.checkDirty(): return dlg = PropertiesDialog(self, True) if dlg.exec_() == QDialog.Accepted: self.closeMultiProject() dlg.storeData() self.opened = True self.setDirty(True) self.closeAct.setEnabled(True) self.saveasAct.setEnabled(True) self.addProjectAct.setEnabled(True) self.propsAct.setEnabled(True) self.emit(SIGNAL('newMultiProject')) def __showProperties(self): """ Private slot to display the properties dialog. """ dlg = PropertiesDialog(self, False) if dlg.exec_() == QDialog.Accepted: dlg.storeData() self.setDirty(True) self.emit(SIGNAL('multiProjectPropertiesChanged')) def openMultiProject(self, fn = None, openMaster = True): """ Public slot to open a multi project. @param fn optional filename of the multi project file to be read @param openMaster flag indicating, that the master project should be opened depending on the configuration(boolean) """ if not self.checkDirty(): return if fn is None: fn = KQFileDialog.getOpenFileName(\ self.parent(), self.trUtf8("Open multiproject"), Preferences.getMultiProject("Workspace") or Utilities.getHomeDir(), self.trUtf8("Multiproject Files (*.e4m *.e4mz)")) if fn.isEmpty(): fn = None else: fn = unicode(fn) QApplication.processEvents() if fn is not None: QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) QApplication.processEvents() self.closeMultiProject() if self.__readMultiProject(fn): self.opened = True QApplication.restoreOverrideCursor() QApplication.processEvents() self.closeAct.setEnabled(True) self.saveasAct.setEnabled(True) self.addProjectAct.setEnabled(True) self.propsAct.setEnabled(True) self.emit(SIGNAL('multiProjectOpened')) if openMaster and Preferences.getMultiProject("OpenMasterAutomatically"): self.__openMasterProject(False) else: QApplication.restoreOverrideCursor() def saveMultiProject(self): """ Public slot to save the current multi project. @return flag indicating success """ if self.isDirty(): if len(self.pfile) > 0: ok = self.__writeMultiProject() else: ok = self.saveMultiProjectAs() else: ok = True return ok def saveMultiProjectAs(self): """ Public slot to save the current multi project to a different file. @return flag indicating success """ if Preferences.getProject("CompressedProjectFiles"): selectedFilter = self.trUtf8("Compressed Multiproject Files (*.e4mz)") else: selectedFilter = self.trUtf8("Multiproject Files (*.e4m)") if self.ppath: defaultPath = self.ppath else: defaultPath = Preferences.getMultiProject("Workspace") or \ Utilities.getHomeDir() fn = KQFileDialog.getSaveFileName(\ self.parent(), self.trUtf8("Save multiproject as"), defaultPath, self.trUtf8("Multiproject Files (*.e4m);;" "Compressed Multiproject Files (*.e4mz)"), selectedFilter, QFileDialog.Options(QFileDialog.DontConfirmOverwrite)) if not fn.isEmpty(): ext = QFileInfo(fn).suffix() if ext.isEmpty(): ex = selectedFilter.section('(*', 1, 1).section(')', 0, 0) if not ex.isEmpty(): fn.append(ex) if QFileInfo(fn).exists(): res = KQMessageBox.warning(None, self.trUtf8("Save File"), self.trUtf8("""

    The file %1 already exists.

    """) .arg(fn), QMessageBox.StandardButtons(\ QMessageBox.Abort | \ QMessageBox.Save), QMessageBox.Abort) if res != QMessageBox.Save: return False self.name = unicode(QFileInfo(fn).baseName()) ok = self.__writeMultiProject(unicode(fn)) self.emit(SIGNAL('multiProjectClosed')) self.emit(SIGNAL('multiProjectOpened')) return True else: return False def checkDirty(self): """ Public method to check the dirty status and open a message window. @return flag indicating whether this operation was successful """ if self.isDirty(): res = KQMessageBox.warning(self.parent(), self.trUtf8("Close Multiproject"), self.trUtf8("The current multiproject has unsaved changes."), QMessageBox.StandardButtons(\ QMessageBox.Abort | \ QMessageBox.Discard | \ QMessageBox.Save), QMessageBox.Save) if res == QMessageBox.Save: return self.saveMultiProject() elif res == QMessageBox.Discard: self.setDirty(False) return True elif res == QMessageBox.Abort: return False return True def closeMultiProject(self): """ Public slot to close the current multi project. @return flag indicating success (boolean) """ # save the list of recently opened projects self.__saveRecent() if not self.isOpen(): return True if not self.checkDirty(): return False # now close the current project, if it belongs to the multi project pfile = self.projectObject.getProjectFile() if pfile: for project in self.projects: if project['file'] == pfile: if not self.projectObject.closeProject(): return False break self.__initData() self.closeAct.setEnabled(False) self.saveasAct.setEnabled(False) self.saveAct.setEnabled(False) self.addProjectAct.setEnabled(False) self.propsAct.setEnabled(False) self.emit(SIGNAL('multiProjectClosed')) return True def initActions(self): """ Public slot to initialize the multi project related actions. """ self.actions = [] self.actGrp1 = createActionGroup(self) act = E4Action(self.trUtf8('New multiproject'), UI.PixmapCache.getIcon("multiProjectNew.png"), self.trUtf8('&New...'), 0, 0, self.actGrp1,'multi_project_new') act.setStatusTip(self.trUtf8('Generate a new multiproject')) act.setWhatsThis(self.trUtf8( """New...""" """

    This opens a dialog for entering the info for a""" """ new multiproject.

    """ )) self.connect(act, SIGNAL('triggered()'), self.newMultiProject) self.actions.append(act) act = E4Action(self.trUtf8('Open multiproject'), UI.PixmapCache.getIcon("multiProjectOpen.png"), self.trUtf8('&Open...'), 0, 0, self.actGrp1,'multi_project_open') act.setStatusTip(self.trUtf8('Open an existing multiproject')) act.setWhatsThis(self.trUtf8( """Open...""" """

    This opens an existing multiproject.

    """ )) self.connect(act, SIGNAL('triggered()'), self.openMultiProject) self.actions.append(act) self.closeAct = E4Action(self.trUtf8('Close multiproject'), UI.PixmapCache.getIcon("multiProjectClose.png"), self.trUtf8('&Close'), 0, 0, self, 'multi_project_close') self.closeAct.setStatusTip(self.trUtf8('Close the current multiproject')) self.closeAct.setWhatsThis(self.trUtf8( """Close""" """

    This closes the current multiproject.

    """ )) self.connect(self.closeAct, SIGNAL('triggered()'), self.closeMultiProject) self.actions.append(self.closeAct) self.saveAct = E4Action(self.trUtf8('Save multiproject'), UI.PixmapCache.getIcon("multiProjectSave.png"), self.trUtf8('&Save'), 0, 0, self, 'multi_project_save') self.saveAct.setStatusTip(self.trUtf8('Save the current multiproject')) self.saveAct.setWhatsThis(self.trUtf8( """Save""" """

    This saves the current multiproject.

    """ )) self.connect(self.saveAct, SIGNAL('triggered()'), self.saveMultiProject) self.actions.append(self.saveAct) self.saveasAct = E4Action(self.trUtf8('Save multiproject as'), UI.PixmapCache.getIcon("multiProjectSaveAs.png"), self.trUtf8('Save &as...'), 0, 0, self, 'multi_project_save_as') self.saveasAct.setStatusTip(self.trUtf8( 'Save the current multiproject to a new file')) self.saveasAct.setWhatsThis(self.trUtf8( """Save as""" """

    This saves the current multiproject to a new file.

    """ )) self.connect(self.saveasAct, SIGNAL('triggered()'), self.saveMultiProjectAs) self.actions.append(self.saveasAct) self.addProjectAct = E4Action(self.trUtf8('Add project to multiproject'), UI.PixmapCache.getIcon("fileProject.png"), self.trUtf8('Add &project...'), 0, 0, self,'multi_project_add_project') self.addProjectAct.setStatusTip(self.trUtf8( 'Add a project to the current multiproject')) self.addProjectAct.setWhatsThis(self.trUtf8( """Add project...""" """

    This opens a dialog for adding a project""" """ to the current multiproject.

    """ )) self.connect(self.addProjectAct, SIGNAL('triggered()'), self.addProject) self.actions.append(self.addProjectAct) self.propsAct = E4Action(self.trUtf8('Multiproject properties'), UI.PixmapCache.getIcon("multiProjectProps.png"), self.trUtf8('&Properties...'), 0, 0, self, 'multi_project_properties') self.propsAct.setStatusTip(self.trUtf8('Show the multiproject properties')) self.propsAct.setWhatsThis(self.trUtf8( """Properties...""" """

    This shows a dialog to edit the multiproject properties.

    """ )) self.connect(self.propsAct, SIGNAL('triggered()'), self.__showProperties) self.actions.append(self.propsAct) self.closeAct.setEnabled(False) self.saveAct.setEnabled(False) self.saveasAct.setEnabled(False) self.addProjectAct.setEnabled(False) self.propsAct.setEnabled(False) def initMenu(self): """ Public slot to initialize the multi project menu. @return the menu generated (QMenu) """ menu = QMenu(self.trUtf8('&Multiproject'), self.parent()) self.recentMenu = QMenu(self.trUtf8('Open &Recent Multiprojects'), menu) self.__menus = { "Main" : menu, "Recent" : self.recentMenu, } # connect the aboutToShow signals self.connect(self.recentMenu, SIGNAL('aboutToShow()'), self.__showContextMenuRecent) self.connect(self.recentMenu, SIGNAL('triggered(QAction *)'), self.__openRecent) self.connect(menu, SIGNAL('aboutToShow()'), self.__showMenu) # build the main menu menu.setTearOffEnabled(True) menu.addActions(self.actGrp1.actions()) self.menuRecentAct = menu.addMenu(self.recentMenu) menu.addSeparator() menu.addAction(self.closeAct) menu.addSeparator() menu.addAction(self.saveAct) menu.addAction(self.saveasAct) menu.addSeparator() menu.addAction(self.addProjectAct) menu.addSeparator() menu.addAction(self.propsAct) self.menu = menu return menu def initToolbar(self, toolbarManager): """ Public slot to initialize the multi project toolbar. @param toolbarManager reference to a toolbar manager object (E4ToolBarManager) @return the toolbar generated (QToolBar) """ tb = QToolBar(self.trUtf8("Multiproject"), self.parent()) tb.setIconSize(UI.Config.ToolBarIconSize) tb.setObjectName("MultiProjectToolbar") tb.setToolTip(self.trUtf8('Multiproject')) tb.addActions(self.actGrp1.actions()) tb.addAction(self.closeAct) tb.addSeparator() tb.addAction(self.saveAct) tb.addAction(self.saveasAct) toolbarManager.addToolBar(tb, tb.windowTitle()) toolbarManager.addAction(self.addProjectAct, tb.windowTitle()) toolbarManager.addAction(self.propsAct, tb.windowTitle()) return tb def __showMenu(self): """ Private method to set up the multi project menu. """ self.menuRecentAct.setEnabled(len(self.recent) > 0) self.emit(SIGNAL("showMenu"), "Main", self.__menus["Main"]) def __syncRecent(self): """ Private method to synchronize the list of recently opened multi projects with the central store. """ self.recent.removeAll(self.pfile) self.recent.prepend(self.pfile) maxRecent = Preferences.getProject("RecentNumber") if len(self.recent) > maxRecent: self.recent = self.recent[:maxRecent] self.__saveRecent() def __showContextMenuRecent(self): """ Private method to set up the recent multi projects menu. """ self.__loadRecent() self.recentMenu.clear() idx = 1 for rp in self.recent: if idx < 10: formatStr = '&%d. %s' else: formatStr = '%d. %s' act = self.recentMenu.addAction(\ formatStr % (idx, Utilities.compactPath(unicode(rp), self.ui.maxMenuFilePathLen))) act.setData(QVariant(rp)) act.setEnabled(QFileInfo(rp).exists()) idx += 1 self.recentMenu.addSeparator() self.recentMenu.addAction(self.trUtf8('&Clear'), self.__clearRecent) def __openRecent(self, act): """ Private method to open a multi project from the list of rencently opened multi projects. @param act reference to the action that triggered (QAction) """ file = unicode(act.data().toString()) if file: self.openMultiProject(file) def __clearRecent(self): """ Private method to clear the recent multi projects menu. """ self.recent.clear() def getActions(self): """ Public method to get a list of all actions. @return list of all actions (list of E4Action) """ return self.actions[:] def addE4Actions(self, actions): """ Public method to add actions to the list of actions. @param actions list of actions (list of E4Action) """ self.actions.extend(actions) def removeE4Actions(self, actions): """ Public method to remove actions from the list of actions. @param actions list of actions (list of E4Action) """ for act in actions: try: self.actions.remove(act) except ValueError: pass def getMenu(self, menuName): """ Public method to get a reference to the main menu or a submenu. @param menuName name of the menu (string) @return reference to the requested menu (QMenu) or None """ try: return self.__menus[menuName] except KeyError: return None def openProject(self, filename): """ Public slot to open a project. @param filename filename of the project file (string) """ self.projectObject.openProject(filename) self.emit(SIGNAL('projectOpened'), filename) def __openMasterProject(self, reopen = True): """ Public slot to open the master project. @param reopen flag indicating, that the master project should be reopened, if it has been opened already (boolean) """ for project in self.projects: if project['master']: if reopen or \ not self.projectObject.isOpen() or \ self.projectObject.getProjectFile() != project['file']: self.openProject(project['file']) return def getMasterProjectFile(self): """ Public method to get the filename of the master project. @return name of the master project file (string) """ for project in self.projects: if project['master']: return project['file'] return None def getDependantProjectFiles(self): """ Public method to get the filenames of the dependant projects. @return names of the dependant project files (list of strings) """ files = [] for project in self.projects: if not project['master']: files.append(project['file']) return files eric4-4.5.18/eric/MultiProject/PaxHeaders.8617/AddProjectDialog.ui0000644000175000001440000000007311072435320022631 xustar000000000000000029 atime=1389081084.07972438 30 ctime=1389081086.309724333 eric4-4.5.18/eric/MultiProject/AddProjectDialog.ui0000644000175000001440000001032011072435320022353 0ustar00detlevusers00000000000000 AddProjectDialog 0 0 569 378 Add Project true &Name: nameEdit Enter the name of the project Project&file: filenameEdit Enter the name of the project file Select the project file via a file selection dialog ... &Description: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop descriptionEdit Enter a short description for the project true false Select to make this project the master project Is &master project Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok nameEdit filenameEdit fileButton descriptionEdit masterCheckBox buttonBox buttonBox accepted() AddProjectDialog accept() 248 254 157 274 buttonBox rejected() AddProjectDialog reject() 316 260 286 274 eric4-4.5.18/eric/MultiProject/PaxHeaders.8617/__init__.py0000644000175000001440000000013112261012651021236 xustar000000000000000030 mtime=1388582313.366094403 29 atime=1389081084.07972438 30 ctime=1389081086.309724333 eric4-4.5.18/eric/MultiProject/__init__.py0000644000175000001440000000103412261012651020767 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2008 - 2014 Detlev Offenbach # """ Package implementing the multi project management module of eric4. The multi project management module consists of the main part, which is used for reading and writing of eric4 multi project files (*.e4m *.e4mz) and for performing all operations on the multi project. It is accompanied by various UI related modules implementing different dialogs and a browser for the display of projects belonging to the current multi project. """ eric4-4.5.18/eric/MultiProject/PaxHeaders.8617/AddProjectDialog.py0000644000175000001440000000013112261012651022636 xustar000000000000000030 mtime=1388582313.368094428 29 atime=1389081084.07972438 30 ctime=1389081086.309724333 eric4-4.5.18/eric/MultiProject/AddProjectDialog.py0000644000175000001440000000655012261012651022377 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2008 - 2014 Detlev Offenbach # """ Module implementing the add project dialog. """ from PyQt4.QtGui import * from PyQt4.QtCore import * from KdeQt import KQFileDialog from E4Gui.E4Completers import E4FileCompleter from Ui_AddProjectDialog import Ui_AddProjectDialog import Utilities class AddProjectDialog(QDialog, Ui_AddProjectDialog): """ Class implementing the add project dialog. """ def __init__(self, parent = None, startdir = None, project = None): """ Constructor @param parent parent widget of this dialog (QWidget) @param startdir start directory for the selection dialog (string or QString) @param project dictionary containing project data """ QDialog.__init__(self, parent) self.setupUi(self) self.fileCompleter = E4FileCompleter(self.filenameEdit) self.startdir = startdir self.__okButton = self.buttonBox.button(QDialogButtonBox.Ok) self.__okButton.setEnabled(False) if project is not None: self.setWindowTitle(self.trUtf8("Project Properties")) self.filenameEdit.setReadOnly(True) self.fileButton.setEnabled(False) self.nameEdit.setText(project['name']) self.filenameEdit.setText(project['file']) self.descriptionEdit.setPlainText(project['description']) self.masterCheckBox.setChecked(project['master']) @pyqtSignature("") def on_fileButton_clicked(self): """ Private slot to display a file selection dialog. """ startdir = self.filenameEdit.text() if startdir.isEmpty() and self.startdir is not None: startdir = self.startdir projectFile = KQFileDialog.getOpenFileName(\ self, self.trUtf8("Add Project"), startdir, self.trUtf8("Project Files (*.e4p *.e4pz)"), None) if not projectFile.isEmpty(): self.filenameEdit.setText(Utilities.toNativeSeparators(projectFile)) def getData(self): """ Public slot to retrieve the dialogs data. @return tuple of four values (string, string, boolean, string) giving the project name, the name of the project file, a flag telling, whether the project shall be the master project and a short description for the project """ return (unicode(self.nameEdit.text()), unicode(self.filenameEdit.text()), self.masterCheckBox.isChecked(), unicode(self.descriptionEdit.toPlainText())) @pyqtSignature("QString") def on_nameEdit_textChanged(self, p0): """ Private slot called when the project name has changed. """ self.__updateUi() @pyqtSignature("QString") def on_filenameEdit_textChanged(self, p0): """ Private slot called when the project filename has changed. """ self.__updateUi() def __updateUi(self): """ Private method to update the dialog. """ self.__okButton.setEnabled(not self.nameEdit.text().isEmpty() and \ not self.filenameEdit.text().isEmpty()) eric4-4.5.18/eric/MultiProject/PaxHeaders.8617/MultiProjectBrowser.py0000644000175000001440000000013112261012651023464 xustar000000000000000030 mtime=1388582313.370094454 29 atime=1389081084.07972438 30 ctime=1389081086.309724333 eric4-4.5.18/eric/MultiProject/MultiProjectBrowser.py0000644000175000001440000002051412261012651023221 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2008 - 2014 Detlev Offenbach # """ Module implementing the multi project browser. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt.KQApplication import e4App from AddProjectDialog import AddProjectDialog import UI.PixmapCache class MultiProjectBrowser(QListWidget): """ Class implementing the multi project browser. """ def __init__(self, multiProject, parent = None): """ Constructor @param project reference to the multi project object @param parent parent widget (QWidget) """ QListWidget.__init__(self, parent) self.multiProject = multiProject self.setWindowIcon(UI.PixmapCache.getIcon("eric.png")) self.setAlternatingRowColors(True) self.connect(self.multiProject, SIGNAL("newMultiProject"), self.__newMultiProject) self.connect(self.multiProject, SIGNAL("multiProjectOpened"), self.__multiProjectOpened) self.connect(self.multiProject, SIGNAL("multiProjectClosed"), self.__multiProjectClosed) self.connect(self.multiProject, SIGNAL("projectDataChanged"), self.__projectDataChanged) self.connect(self.multiProject, SIGNAL("projectAdded"), self.__projectAdded) self.connect(self.multiProject, SIGNAL("projectRemoved"), self.__projectRemoved) self.connect(self.multiProject, SIGNAL("projectOpened"), self.__projectOpened) self.__createPopupMenu() self.setContextMenuPolicy(Qt.CustomContextMenu) self.connect(self, SIGNAL("customContextMenuRequested(const QPoint &)"), self.__contextMenuRequested) self.connect(self, SIGNAL("itemActivated(QListWidgetItem*)"), self.__openItem) ############################################################################ ## Slot handling methods below ############################################################################ def __newMultiProject(self): """ Private slot to handle the creation of a new multi project. """ self.clear() def __multiProjectOpened(self): """ Private slot to handle the opening of a multi project. """ for project in self.multiProject.getProjects(): self.__addProject(project) self.sortItems() def __multiProjectClosed(self): """ Private slot to handle the closing of a multi project. """ self.clear() def __projectAdded(self, project): """ Private slot to handle the addition of a project to the multi project. @param project reference to the project data dictionary """ self.__addProject(project) self.sortItems() def __projectRemoved(self, project): """ Private slot to handle the removal of a project from the multi project. @param project reference to the project data dictionary """ row = self.__findProjectItem(project) if row > -1: itm = self.takeItem(row) del itm def __projectDataChanged(self, project): """ Private slot to handle the change of a project of the multi project. @param project reference to the project data dictionary """ row = self.__findProjectItem(project) if row > -1: self.__setItemData(self.item(row), project) self.sortItems() def __projectOpened(self, projectfile): """ Private slot to handle the opening of a project. """ project = { 'name' : "", 'file' : projectfile, 'master' : False, 'description' : "", } row = self.__findProjectItem(project) if row > -1: self.item(row).setSelected(True) def __contextMenuRequested(self, coord): """ Private slot to show the context menu. @param coord the position of the mouse pointer (QPoint) """ itm = self.itemAt(coord) if itm is None: self.__backMenu.popup(self.mapToGlobal(coord)) else: self.__menu.popup(self.mapToGlobal(coord)) def __openItem(self, itm = None): """ Private slot to open a project. @param itm reference to the project item to be opened (QListWidgetItem) """ if itm is None: itm = self.currentItem() if itm is None: return filename = unicode(itm.data(Qt.UserRole).toString()) if filename: self.multiProject.openProject(filename) ############################################################################ ## Private methods below ############################################################################ def __addProject(self, project): """ Private method to add a project to the list. @param project reference to the project data dictionary """ itm = QListWidgetItem(self) self.__setItemData(itm, project) def __setItemData(self, itm, project): """ Private method to set the data of a project item. @param itm reference to the item to be set (QListWidgetItem) @param project reference to the project data dictionary """ itm.setText(project['name']) if project['master']: itm.setIcon(UI.PixmapCache.getIcon("masterProject.png")) else: itm.setIcon(UI.PixmapCache.getIcon("empty.png")) itm.setToolTip(project['file']) itm.setData(Qt.UserRole, QVariant(project['file'])) def __findProjectItem(self, project): """ Private method to search a specific project item. @param project reference to the project data dictionary """ row = 0 while row < self.count(): itm = self.item(row) data = itm.data(Qt.UserRole).toString() if data == project['file']: return row row += 1 return -1 def __removeProject(self): """ Private method to handle the Remove context menu entry. """ itm = self.currentItem() if itm is not None: filename = unicode(itm.data(Qt.UserRole).toString()) if filename: self.multiProject.removeProject(filename) def __showProjectProperties(self): """ Private method to show the data of a project entry. """ itm = self.currentItem() if itm is not None: filename = unicode(itm.data(Qt.UserRole).toString()) if filename: project = self.multiProject.getProject(filename) if project is not None: dlg = AddProjectDialog(self, project = project) if dlg.exec_() == QDialog.Accepted: name, filename, isMaster, description = dlg.getData() project = { 'name' : name, 'file' : filename, 'master' : isMaster, 'description' : description, } self.multiProject.changeProjectProperties(project) def __createPopupMenu(self): """ Private method to create the popup menu. """ self.__menu = QMenu(self) self.__menu.addAction(self.trUtf8("Open"), self.__openItem) self.__menu.addAction(self.trUtf8("Remove"), self.__removeProject) self.__menu.addAction(self.trUtf8("Properties"), self.__showProjectProperties) self.__menu.addSeparator() self.__menu.addAction(self.trUtf8("Configure..."), self.__configure) self.__backMenu = QMenu(self) self.__backMenu.addAction(self.trUtf8("Configure..."), self.__configure) def __configure(self): """ Private method to open the configuration dialog. """ e4App().getObject("UserInterface").showPreferences("multiProjectPage") eric4-4.5.18/eric/MultiProject/PaxHeaders.8617/PropertiesDialog.ui0000644000175000001440000000007311072435320022746 xustar000000000000000029 atime=1389081084.07972438 30 ctime=1389081086.309724333 eric4-4.5.18/eric/MultiProject/PropertiesDialog.ui0000644000175000001440000000503411072435320022476 0ustar00detlevusers00000000000000 PropertiesDialog 0 0 530 227 Multiproject Properties true &Description: Qt::AlignTop descriptionEdit Enter description <b>Description</b> <p>Enter a short description for the multiproject.</p> true false Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok descriptionEdit buttonBox buttonBox accepted() PropertiesDialog accept() 248 254 157 274 buttonBox rejected() PropertiesDialog reject() 316 260 286 274 eric4-4.5.18/eric/MultiProject/PaxHeaders.8617/PropertiesDialog.py0000644000175000001440000000013112261012651022753 xustar000000000000000030 mtime=1388582313.375094517 29 atime=1389081084.08072438 30 ctime=1389081086.309724333 eric4-4.5.18/eric/MultiProject/PropertiesDialog.py0000644000175000001440000000225012261012651022505 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2008 - 2014 Detlev Offenbach # """ Module implementing the multi project properties dialog. """ from PyQt4.QtGui import QDialog from PyQt4.QtCore import pyqtSignature from Ui_PropertiesDialog import Ui_PropertiesDialog class PropertiesDialog(QDialog, Ui_PropertiesDialog): """ Class implementing the multi project properties dialog. """ def __init__(self, multiProject, new = True, parent = None): """ Constructor @param multiProject reference to the multi project object @param new flag indicating the generation of a new multi project @param parent parent widget of this dialog (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.multiProject = multiProject self.newMultiProject = new if not new: self.descriptionEdit.setPlainText(self.multiProject.description) def storeData(self): """ Public method to store the entered/modified data. """ self.multiProject.description = unicode(self.descriptionEdit.toPlainText()) eric4-4.5.18/eric/PaxHeaders.8617/eric4_sqlbrowser.pyw0000644000175000001440000000013112261012652020537 xustar000000000000000030 mtime=1388582314.994115001 29 atime=1389081084.08072438 30 ctime=1389081086.309724333 eric4-4.5.18/eric/eric4_sqlbrowser.pyw0000644000175000001440000000021612261012652020271 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2010 - 2014 Detlev Offenbach # from eric4_sqlbrowser import main main() eric4-4.5.18/eric/PaxHeaders.8617/eric4_pluginuninstall.pyw0000644000175000001440000000013112261012652021564 xustar000000000000000030 mtime=1388582314.996115026 29 atime=1389081084.08072438 30 ctime=1389081086.309724333 eric4-4.5.18/eric/eric4_pluginuninstall.pyw0000644000175000001440000000022312261012652021314 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2010 - 2014 Detlev Offenbach # from eric4_pluginuninstall import main main() eric4-4.5.18/eric/PaxHeaders.8617/PyUnit0000644000175000001440000000013212262730776015700 xustar000000000000000030 mtime=1389081086.301724332 30 atime=1389081086.305724332 30 ctime=1389081086.315724332 eric4-4.5.18/eric/PyUnit/0000755000175000001440000000000012262730776015507 5ustar00detlevusers00000000000000eric4-4.5.18/eric/PyUnit/PaxHeaders.8617/__init__.py0000644000175000001440000000013112261012651020045 xustar000000000000000030 mtime=1388582313.377094543 29 atime=1389081084.08072438 30 ctime=1389081086.309724333 eric4-4.5.18/eric/PyUnit/__init__.py0000644000175000001440000000065612261012651017607 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2002 - 2014 Detlev Offenbach # """ Package implementing an interface to the pyunit unittest package. The package consist of a single dialog, which may be called as a standalone version using the eric4_unittest script or from within the eric4 IDE. If it is called from within eric4, it has the additional function to open a source file that failed a test. """ eric4-4.5.18/eric/PyUnit/PaxHeaders.8617/UnittestStacktraceDialog.ui0000644000175000001440000000007411072435375023260 xustar000000000000000030 atime=1389081084.092724379 30 ctime=1389081086.309724333 eric4-4.5.18/eric/PyUnit/UnittestStacktraceDialog.ui0000644000175000001440000000314011072435375023003 0ustar00detlevusers00000000000000 UnittestStacktraceDialog 0 0 600 250 true false Qt::Horizontal QDialogButtonBox::Close buttonBox accepted() UnittestStacktraceDialog accept() 33 235 33 249 buttonBox rejected() UnittestStacktraceDialog reject() 94 226 95 249 eric4-4.5.18/eric/PyUnit/PaxHeaders.8617/UnittestDialog.py0000644000175000001440000000013212261012651021246 xustar000000000000000030 mtime=1388582313.382094606 30 atime=1389081084.092724379 30 ctime=1389081086.309724333 eric4-4.5.18/eric/PyUnit/UnittestDialog.py0000644000175000001440000005371612261012651021014 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2002 - 2014 Detlev Offenbach # """ Module implementing the UI to the pyunit package. """ import unittest import sys import traceback import time import re import os from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQFileDialog, KQMessageBox from KdeQt.KQMainWindow import KQMainWindow from KdeQt.KQApplication import e4App from E4Gui.E4Completers import E4FileCompleter from Ui_UnittestDialog import Ui_UnittestDialog from Ui_UnittestStacktraceDialog import Ui_UnittestStacktraceDialog from DebugClients.Python.coverage import coverage import UI.PixmapCache import Utilities class UnittestDialog(QWidget, Ui_UnittestDialog): """ Class implementing the UI to the pyunit package. @signal unittestFile(string,int,int) emitted to show the source of a unittest file """ def __init__(self, prog = None, dbs = None, ui = None, fromEric=False, parent = None, name = None): """ Constructor @param prog filename of the program to open @param dbs reference to the debug server object. It is an indication whether we were called from within the eric4 IDE @param ui reference to the UI object @param fromEric flag indicating an instantiation from within the eric IDE (boolean) @param parent parent widget of this dialog (QWidget) @param name name of this dialog (string or QString) """ QWidget.__init__(self,parent) if name: self.setObjectName(name) self.setupUi(self) self.startButton = self.buttonBox.addButton(\ self.trUtf8("Start"), QDialogButtonBox.ActionRole) self.startButton.setToolTip(self.trUtf8("Start the selected testsuite")) self.startButton.setWhatsThis(self.trUtf8(\ """Start Test""" """

    This button starts the selected testsuite.

    """)) self.stopButton = self.buttonBox.addButton(\ self.trUtf8("Stop"), QDialogButtonBox.ActionRole) self.stopButton.setToolTip(self.trUtf8("Stop the running unittest")) self.stopButton.setWhatsThis(self.trUtf8(\ """Stop Test""" """

    This button stops a running unittest.

    """)) self.stopButton.setEnabled(False) self.startButton.setDefault(True) self.dbs = dbs self.__fromEric = fromEric self.setWindowFlags(\ self.windowFlags() | Qt.WindowFlags(Qt.WindowContextHelpButtonHint)) self.setWindowIcon(UI.PixmapCache.getIcon("eric.png")) self.setWindowTitle(self.trUtf8("Unittest")) if dbs: self.ui = ui else: self.localCheckBox.hide() self.__setProgressColor("green") self.progressLed.setDarkFactor(150) self.progressLed.off() self.testSuiteCompleter = E4FileCompleter(self.testsuiteComboBox) self.fileHistory = QStringList() self.testNameHistory = QStringList() self.running = False self.savedModulelist = None self.savedSysPath = sys.path if prog: self.insertProg(prog) self.rx1 = QRegExp(self.trUtf8("^Failure: ")) self.rx2 = QRegExp(self.trUtf8("^Error: ")) # now connect the debug server signals if called from the eric4 IDE if self.dbs: self.connect(self.dbs, SIGNAL('utPrepared'), self.__UTPrepared) self.connect(self.dbs, SIGNAL('utFinished'), self.__setStoppedMode) self.connect(self.dbs, SIGNAL('utStartTest'), self.testStarted) self.connect(self.dbs, SIGNAL('utStopTest'), self.testFinished) self.connect(self.dbs, SIGNAL('utTestFailed'), self.testFailed) self.connect(self.dbs, SIGNAL('utTestErrored'), self.testErrored) def keyPressEvent(self, evt): """ Protected slot to handle key press events. @param evt key press event to handle (QKeyEvent) """ if evt.key() == Qt.Key_Escape and self.__fromEric: self.close() def __setProgressColor(self, color): """ Private methode to set the color of the progress color label. @param color colour to be shown """ self.progressLed.setColor(QColor(color)) def insertProg(self, prog): """ Public slot to insert the filename prog into the testsuiteComboBox object. @param prog filename to be inserted (string or QString) """ # prepend the selected file to the testsuite combobox if prog is None: prog = QString() self.fileHistory.removeAll(prog) self.fileHistory.prepend(prog) self.testsuiteComboBox.clear() self.testsuiteComboBox.addItems(self.fileHistory) def insertTestName(self, testName): """ Public slot to insert a test name into the testComboBox object. @param testName name of the test to be inserted (string or QString) """ # prepend the selected file to the testsuite combobox if testName is None: testName = QString() self.testNameHistory.removeAll(testName) self.testNameHistory.prepend(testName) self.testComboBox.clear() self.testComboBox.addItems(self.testNameHistory) @pyqtSignature("") def on_fileDialogButton_clicked(self): """ Private slot to open a file dialog. """ if self.dbs: pyExtensions = \ ' '.join(["*%s" % ext for ext in self.dbs.getExtensions('Python')]) py3Extensions = \ ' '.join(["*%s" % ext for ext in self.dbs.getExtensions('Python3')]) filter = self.trUtf8("Python Files (%1);;Python3 Files (%2);;All Files (*)")\ .arg(pyExtensions).arg(py3Extensions) else: filter = self.trUtf8("Python Files (*.py);;All Files (*)") prog = KQFileDialog.getOpenFileName(\ self, QString(), self.testsuiteComboBox.currentText(), filter) if prog.isNull(): return self.insertProg(Utilities.toNativeSeparators(prog)) @pyqtSignature("QString") def on_testsuiteComboBox_editTextChanged(self, txt): """ Private slot to handle changes of the test file name. @param txt name of the test file (string) """ if self.dbs: exts = self.dbs.getExtensions("Python3") if unicode(txt).endswith(exts): self.coverageCheckBox.setChecked(False) self.coverageCheckBox.setEnabled(False) self.localCheckBox.setChecked(False) self.localCheckBox.setEnabled(False) return self.coverageCheckBox.setEnabled(True) self.localCheckBox.setEnabled(True) def on_buttonBox_clicked(self, button): """ Private slot called by a button of the button box clicked. @param button button that was clicked (QAbstractButton) """ if button == self.startButton: self.on_startButton_clicked() elif button == self.stopButton: self.on_stopButton_clicked() @pyqtSignature("") def on_startButton_clicked(self): """ Public slot to start the test. """ if self.running: return prog = unicode(self.testsuiteComboBox.currentText()) if not prog: KQMessageBox.critical(self, self.trUtf8("Unittest"), self.trUtf8("You must enter a test suite file.")) return # prepend the selected file to the testsuite combobox self.insertProg(prog) self.sbLabel.setText(self.trUtf8("Preparing Testsuite")) QApplication.processEvents() testFunctionName = unicode(self.testComboBox.currentText()) if testFunctionName: self.insertTestName(testFunctionName) else: testFunctionName = "suite" # build the module name from the filename without extension self.testName = os.path.splitext(os.path.basename(prog))[0] if self.dbs and not self.localCheckBox.isChecked(): # we are cooperating with the eric4 IDE project = e4App().getObject("Project") if project.isOpen() and project.isProjectSource(prog): mainScript = project.getMainScript(True) else: mainScript = os.path.abspath(prog) self.dbs.remoteUTPrepare(prog, self.testName, testFunctionName, self.coverageCheckBox.isChecked(), mainScript, self.coverageEraseCheckBox.isChecked()) else: # we are running as an application or in local mode sys.path = [os.path.dirname(os.path.abspath(prog))] + self.savedSysPath # clean up list of imported modules to force a reimport upon running the test if self.savedModulelist: for modname in sys.modules.keys(): if not self.savedModulelist.has_key(modname): # delete it del(sys.modules[modname]) self.savedModulelist = sys.modules.copy() # now try to generate the testsuite try: module = __import__(self.testName) try: test = unittest.defaultTestLoader.loadTestsFromName(\ testFunctionName, module) except AttributeError: test = unittest.defaultTestLoader.loadTestsFromModule(module) except: exc_type, exc_value, exc_tb = sys.exc_info() KQMessageBox.critical(self, self.trUtf8("Unittest"), self.trUtf8("

    Unable to run test %1.
    %2
    %3

    ") .arg(self.testName) .arg(unicode(exc_type)) .arg(unicode(exc_value))) return # now set up the coverage stuff if self.coverageCheckBox.isChecked(): if self.dbs: # we are cooperating with the eric4 IDE project = e4App().getObject("Project") if project.isOpen() and project.isProjectSource(prog): mainScript = project.getMainScript(True) if not mainScript: mainScript = os.path.abspath(prog) else: mainScript = os.path.abspath(prog) else: mainScript = os.path.abspath(prog) cover = coverage( data_file = "%s.coverage" % os.path.splitext(mainScript)[0]) cover.use_cache(True) if self.coverageEraseCheckBox.isChecked(): cover.erase() else: cover = None self.testResult = QtTestResult(self) self.totalTests = test.countTestCases() self.__setRunningMode() if cover: cover.start() test.run(self.testResult) if cover: cover.stop() cover.save() self.__setStoppedMode() sys.path = self.savedSysPath def __UTPrepared(self, nrTests, exc_type, exc_value): """ Private slot to handle the utPrepared signal. If the unittest suite was loaded successfully, we ask the client to run the test suite. @param nrTests number of tests contained in the test suite (integer) @param exc_type type of exception occured during preparation (string) @param exc_value value of exception occured during preparation (string) """ if nrTests == 0: KQMessageBox.critical(self, self.trUtf8("Unittest"), self.trUtf8("

    Unable to run test %1.
    %2
    %3

    ") .arg(self.testName) .arg(exc_type) .arg(exc_value)) return self.totalTests = nrTests self.__setRunningMode() self.dbs.remoteUTRun() @pyqtSignature("") def on_stopButton_clicked(self): """ Private slot to stop the test. """ if self.dbs and not self.localCheckBox.isChecked(): self.dbs.remoteUTStop() elif self.testResult: self.testResult.stop() def on_errorsListWidget_currentTextChanged(self, text): """ Private slot to handle the highlighted(const QString&) signal. """ if not text.isEmpty(): text.remove(self.rx1).remove(self.rx2) itm = self.testsListWidget.findItems(text, Qt.MatchFlags(Qt.MatchExactly))[0] self.testsListWidget.setCurrentItem(itm) self.testsListWidget.scrollToItem(itm) def __setRunningMode(self): """ Private method to set the GUI in running mode. """ self.running = True # reset counters and error infos self.runCount = 0 self.failCount = 0 self.errorCount = 0 self.remainingCount = self.totalTests self.errorInfo = [] # reset the GUI self.progressCounterRunCount.setText(str(self.runCount)) self.progressCounterFailureCount.setText(str(self.failCount)) self.progressCounterErrorCount.setText(str(self.errorCount)) self.progressCounterRemCount.setText(str(self.remainingCount)) self.errorsListWidget.clear() self.testsListWidget.clear() self.progressProgressBar.setRange(0, self.totalTests) self.__setProgressColor("green") self.progressProgressBar.reset() self.stopButton.setEnabled(True) self.startButton.setEnabled(False) self.stopButton.setDefault(True) self.sbLabel.setText(self.trUtf8("Running")) self.progressLed.on() QApplication.processEvents() self.startTime = time.time() def __setStoppedMode(self): """ Private method to set the GUI in stopped mode. """ self.stopTime = time.time() self.timeTaken = float(self.stopTime - self.startTime) self.running = False self.startButton.setEnabled(True) self.stopButton.setEnabled(False) self.startButton.setDefault(True) if self.runCount == 1: self.sbLabel.setText(self.trUtf8("Ran %1 test in %2s") .arg(self.runCount) .arg("%.3f" % self.timeTaken)) else: self.sbLabel.setText(self.trUtf8("Ran %1 tests in %2s") .arg(self.runCount) .arg("%.3f" % self.timeTaken)) self.progressLed.off() def testFailed(self, test, exc): """ Public method called if a test fails. @param test name of the failed test (string) @param exc string representation of the exception (list of strings) """ self.failCount += 1 self.progressCounterFailureCount.setText(str(self.failCount)) self.errorsListWidget.insertItem(0, self.trUtf8("Failure: %1").arg(test)) self.errorInfo.insert(0, (test, exc)) def testErrored(self, test, exc): """ Public method called if a test errors. @param test name of the failed test (string) @param exc string representation of the exception (list of strings) """ self.errorCount += 1 self.progressCounterErrorCount.setText(str(self.errorCount)) self.errorsListWidget.insertItem(0, self.trUtf8("Error: %1").arg(test)) self.errorInfo.insert(0, (test, exc)) def testStarted(self, test, doc): """ Public method called if a test is about to be run. @param test name of the started test (string) @param doc documentation of the started test (string) """ if doc: self.testsListWidget.insertItem(0, " %s" % doc) self.testsListWidget.insertItem(0, unicode(test)) if self.dbs is None or self.localCheckBox.isChecked(): QApplication.processEvents() def testFinished(self): """ Public method called if a test has finished. Note: It is also called if it has already failed or errored. """ # update the counters self.remainingCount -= 1 self.runCount += 1 self.progressCounterRunCount.setText(str(self.runCount)) self.progressCounterRemCount.setText(str(self.remainingCount)) # update the progressbar if self.errorCount: self.__setProgressColor("red") elif self.failCount: self.__setProgressColor("orange") self.progressProgressBar.setValue(self.runCount) def on_errorsListWidget_itemDoubleClicked(self, lbitem): """ Private slot called by doubleclicking an errorlist entry. It will popup a dialog showing the stacktrace. If called from eric, an additional button is displayed to show the python source in an eric source viewer (in erics main window. @param lbitem the listbox item that was double clicked """ self.errListIndex = self.errorsListWidget.row(lbitem) text = lbitem.text() # get the error info test, tracebackLines = self.errorInfo[self.errListIndex] tracebackText = "".join(tracebackLines) # now build the dialog self.dlg = QDialog() ui = Ui_UnittestStacktraceDialog() ui.setupUi(self.dlg) ui.showButton = ui.buttonBox.addButton(\ self.trUtf8("Show Source"), QDialogButtonBox.ActionRole) ui.buttonBox.button(QDialogButtonBox.Close).setDefault(True) self.dlg.setWindowTitle(text) ui.testLabel.setText(test) ui.traceback.setPlainText(tracebackText) # one more button if called from eric if self.dbs: self.dlg.connect(ui.showButton, SIGNAL("clicked()"), self.__showSource) else: ui.showButton.hide() # and now fire it up self.dlg.show() self.dlg.exec_() def __showSource(self): """ Private slot to show the source of a traceback in an eric4 editor. """ if not self.dbs: return # get the error info test, tracebackLines = self.errorInfo[self.errListIndex] # find the last entry matching the pattern for index in range(len(tracebackLines) - 1, -1, -1): fmatch = re.search(r'File "(.*?)", line (\d*?),.*', tracebackLines[index]) if fmatch: break if fmatch: fn, ln = fmatch.group(1, 2) self.emit(SIGNAL('unittestFile'), fn, int(ln), 1) class QtTestResult(unittest.TestResult): """ A TestResult derivative to work with a graphical GUI. For more details see pyunit.py of the standard python distribution. """ def __init__(self, parent): """ Constructor @param parent The parent widget. """ unittest.TestResult.__init__(self) self.parent = parent def addFailure(self, test, err): """ Method called if a test failed. @param test Reference to the test object @param err The error traceback """ unittest.TestResult.addFailure(self, test, err) tracebackLines = apply(traceback.format_exception, err + (10,)) self.parent.testFailed(unicode(test), tracebackLines) def addError(self, test, err): """ Method called if a test errored. @param test Reference to the test object @param err The error traceback """ unittest.TestResult.addError(self, test, err) tracebackLines = apply(traceback.format_exception, err + (10,)) self.parent.testErrored(unicode(test), tracebackLines) def startTest(self, test): """ Method called at the start of a test. @param test Reference to the test object """ unittest.TestResult.startTest(self, test) self.parent.testStarted(unicode(test), test.shortDescription()) def stopTest(self, test): """ Method called at the end of a test. @param test Reference to the test object """ unittest.TestResult.stopTest(self, test) self.parent.testFinished() class UnittestWindow(KQMainWindow): """ Main window class for the standalone dialog. """ def __init__(self, prog = None, parent = None): """ Constructor @param prog filename of the program to open @param parent reference to the parent widget (QWidget) """ KQMainWindow.__init__(self, parent) self.cw = UnittestDialog(prog = prog, parent = self) self.cw.installEventFilter(self) size = self.cw.size() self.setCentralWidget(self.cw) self.resize(size) def eventFilter(self, obj, event): """ Public method to filter events. @param obj reference to the object the event is meant for (QObject) @param event reference to the event object (QEvent) @return flag indicating, whether the event was handled (boolean) """ if event.type() == QEvent.Close: QApplication.exit() return True return False eric4-4.5.18/eric/PyUnit/PaxHeaders.8617/UnittestDialog.ui0000644000175000001440000000007311072435375021252 xustar000000000000000029 atime=1389081084.10072438 30 ctime=1389081086.309724333 eric4-4.5.18/eric/PyUnit/UnittestDialog.ui0000644000175000001440000002747111072435375021013 0ustar00detlevusers00000000000000 UnittestDialog 0 0 619 667 Unittest Enter the test name. Leave empty to use the default name "suite". <b>Testname</b><p>Enter the name of the test to be performed. This name must follow the rules given by Python's unittest module. If this field is empty, the default name of "suite" will be used.</p> true 0 0 Enter name of file defining the testsuite <b>Testsuite</b> <p>Enter the name of the file defining the testsuite. It should have a method with a name given below. If no name is given, the suite() method will be tried. If no such method can be found, the module will be inspected for proper test cases.</p> true QComboBox::InsertAtTop true false Enter &test name: testComboBox Open a file selection dialog ... Enter test &filename: testsuiteComboBox Select whether you want to run the test locally Run &local Select whether coverage data should be collected C&ollect coverage data false Select whether old coverage data should be erased &Erase coverage data Progress: Qt::Horizontal 371 20 0 Qt::Horizontal Run: Number of tests run 0 Failures: Number of test failures 0 Errors: Number of test errors 0 Remaining: Number of tests to be run 0 Qt::Horizontal QSizePolicy::Expanding 20 20 Tests performed: Failures and errors: Failures and Errors list <b>Failures and Errors list</b> <p>This list shows all failed and errored tests. Double clicking on an entry will show the respective traceback.</p> Qt::Horizontal QDialogButtonBox::Close 0 0 Idle Qt::Horizontal QSizePolicy::Expanding 20 20 E4Led QFrame
    E4Gui/E4Led.h
    1
    testsuiteComboBox fileDialogButton testComboBox localCheckBox coverageCheckBox coverageEraseCheckBox testsListWidget errorsListWidget coverageCheckBox toggled(bool) coverageEraseCheckBox setEnabled(bool) 405 107 604 107 buttonBox accepted() UnittestDialog close() 58 618 72 667 buttonBox rejected() UnittestDialog close() 148 623 148 668
    eric4-4.5.18/eric/PaxHeaders.8617/eric4_qregexp.py0000644000175000001440000000013112261012651017617 xustar000000000000000030 mtime=1388582313.386094656 29 atime=1389081084.10072438 30 ctime=1389081086.309724333 eric4-4.5.18/eric/eric4_qregexp.py0000644000175000001440000000356212261012651017360 0ustar00detlevusers00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- # Copyright (c) 2004 - 2014 Detlev Offenbach # """ Eric4 QRegExp This is the main Python script that performs the necessary initialization of the QRegExp wizard module and starts the Qt event loop. This is a standalone version of the integrated QRegExp wizard. """ import sys import os # disable the usage of KDE widgets, if requested sys.e4nokde = False if "--nokde" in sys.argv: del sys.argv[sys.argv.index("--nokde")] sys.e4nokde = True else: sys.e4nokde = os.getenv("e4nokde") is not None and os.getenv("e4nokde") == "1" for arg in sys.argv: if arg.startswith("--config="): import Utilities configDir = arg.replace("--config=", "") Utilities.setConfigDir(configDir) sys.argv.remove(arg) break from Utilities import Startup def createMainWidget(argv): """ Function to create the main widget. @param argv list of commandline parameters (list of strings) @return reference to the main widget (QWidget) """ from Plugins.WizardPlugins.QRegExpWizard.QRegExpWizardDialog import \ QRegExpWizardWindow return QRegExpWizardWindow() def main(): """ Main entry point into the application. """ options = [\ ("--config=configDir", "use the given directory as the one containing the config files"), ("--nokde" , "don't use KDE widgets"), ] appinfo = Startup.makeAppInfo(sys.argv, "Eric4 QRegExp", "", "Regexp editor for Qt's QRegExp class", options) res = Startup.simpleAppStartup(sys.argv, appinfo, createMainWidget) sys.exit(res) if __name__ == '__main__': main() eric4-4.5.18/eric/PaxHeaders.8617/eric4_configure.py0000644000175000001440000000013112261012651020125 xustar000000000000000030 mtime=1388582313.396094783 29 atime=1389081084.10072438 30 ctime=1389081086.309724333 eric4-4.5.18/eric/eric4_configure.py0000644000175000001440000000367712261012651017675 0ustar00detlevusers00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Eric4 Configure This is the main Python script to configure the eric4 IDE from the outside. """ import sys import os # disable the usage of KDE widgets, if requested sys.e4nokde = False if "--nokde" in sys.argv: del sys.argv[sys.argv.index("--nokde")] sys.e4nokde = True else: sys.e4nokde = os.getenv("e4nokde") is not None and os.getenv("e4nokde") == "1" for arg in sys.argv: if arg.startswith("--config="): import Utilities configDir = arg.replace("--config=", "") Utilities.setConfigDir(configDir) sys.argv.remove(arg) break # make ThirdParty package available as a packages repository sys.path.insert(2, os.path.join(os.path.dirname(__file__), "ThirdParty", "Pygments")) from Utilities import Startup import Preferences def createMainWidget(argv): """ Function to create the main widget. @param argv list of commandline parameters (list of strings) @return reference to the main widget (QWidget) """ from Preferences.ConfigurationDialog import ConfigurationWindow w = ConfigurationWindow() w.show() w.showConfigurationPageByName("empty") return w def main(): """ Main entry point into the application. """ options = [\ ("--config=configDir", "use the given directory as the one containing the config files"), ("--nokde" , "don't use KDE widgets"), ] appinfo = Startup.makeAppInfo(sys.argv, "Eric4 Configure", "", "Configuration editor for eric4", options) res = Startup.simpleAppStartup(sys.argv, appinfo, createMainWidget) sys.exit(res) if __name__ == '__main__': main() eric4-4.5.18/eric/PaxHeaders.8617/install-i18n.py0000644000175000001440000000013112261012651017301 xustar000000000000000030 mtime=1388582313.398094808 29 atime=1389081086.00372434 30 ctime=1389081086.309724333 eric4-4.5.18/eric/install-i18n.py0000644000175000001440000000574712261012651017051 0ustar00detlevusers00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- # Copyright (c) 2004 - 2014 Detlev Offenbach # # This is the install script for eric4's translation files. """ Installation script for the eric4 IDE translation files. """ import sys import os import shutil import glob from PyQt4.QtCore import QDir try: from eric4config import getConfig except ImportError: print "The eric4 IDE doesn't seem to be installed. Aborting." sys.exit(1) def getConfigDir(): """ Global function to get the name of the directory storing the config data. @return directory name of the config dir (string) """ if sys.platform.startswith("win"): cdn = "_eric4" else: cdn = ".eric4" hp = QDir.homePath() dn = QDir(hp) dn.mkdir(cdn) hp.append("/").append(cdn) try: return unicode(QDir.toNativeSeparators(hp)) except AttributeError: return unicode(QDir.convertSeparators(hp)) # Define the globals. progName = None configDir = getConfigDir() privateInstall = False def usage(rcode = 2): """ Display a usage message and exit. @param rcode return code passed back to the calling process (integer) """ global progName, configDir print print "Usage:" print " %s [-hp]" % (progName) print "where:" print " -h display this help message" print " -p install into the private area (%s)" % (configDir) sys.exit(rcode) def installTranslations(): """ Install the translation files into the right place. """ global privateInstall, configDir if privateInstall: targetDir = configDir else: targetDir = getConfig('ericTranslationsDir') try: for fn in glob.glob(os.path.join('eric', 'i18n', '*.qm')): shutil.copy2(fn, targetDir) os.chmod(os.path.join(targetDir, os.path.basename(fn)), 0o644) except IOError, msg: sys.stderr.write('IOError: %s\nTry install-i18n as root.\n' % msg) except OSError, msg: sys.stderr.write('OSError: %s\nTry install-i18n with admin rights.\n' % msg) def main(argv): """ The main function of the script. @param argv list of command line arguments (list of strings) """ import getopt # Parse the command line. global progName, privateInstall progName = os.path.basename(argv[0]) try: optlist, args = getopt.getopt(argv[1:],"hp") except getopt.GetoptError: usage() global platBinDir depChecks = 1 for opt, arg in optlist: if opt == "-h": usage(0) elif opt == "-p": privateInstall = 1 installTranslations() if __name__ == "__main__": try: main(sys.argv) except SystemExit: raise except: print \ """An internal error occured. Please report all the output of the program, including the following traceback, to eric4-bugs@eric-ide.python-projects.org. """ raise eric4-4.5.18/eric/PaxHeaders.8617/eric4.pyw0000644000175000001440000000013112261012652016254 xustar000000000000000030 mtime=1388582314.998115052 29 atime=1389081084.10072438 30 ctime=1389081086.309724333 eric4-4.5.18/eric/eric4.pyw0000644000175000001440000000020312261012652016002 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2005 - 2014 Detlev Offenbach # from eric4 import main main() eric4-4.5.18/eric/PaxHeaders.8617/Examples0000644000175000001440000000013112261012660016205 xustar000000000000000030 mtime=1388582320.968190029 29 atime=1389081086.01472434 30 ctime=1389081086.315724332 eric4-4.5.18/eric/Examples/0000755000175000001440000000000012261012660016015 5ustar00detlevusers00000000000000eric4-4.5.18/eric/Examples/PaxHeaders.8617/hallo.py0000644000175000001440000000013112261012651017733 xustar000000000000000030 mtime=1388582313.401094846 29 atime=1389081084.10072438 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Examples/hallo.py0000644000175000001440000000020312261012651017461 0ustar00detlevusers00000000000000#!/usr/bin/env python import sys def main(): print "Hello World!" sys.exit(0) if __name__ == "__main__": main() eric4-4.5.18/eric/Examples/PaxHeaders.8617/modpython_dbg.py0000644000175000001440000000013112261012651021471 xustar000000000000000030 mtime=1388582313.403094872 29 atime=1389081084.10072438 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Examples/modpython_dbg.py0000644000175000001440000000033012261012651021220 0ustar00detlevusers00000000000000from mod_python import apache apache.initDebugger('/Path/To/modpython_dbg.py') def handler(req): req.content_type = "text/plain" req.send_http_header() req.write("Hello World!\n") return apache.OK eric4-4.5.18/eric/Examples/PaxHeaders.8617/modpython.py0000644000175000001440000000013112261012651020655 xustar000000000000000030 mtime=1388582313.405094897 29 atime=1389081084.10072438 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Examples/modpython.py0000644000175000001440000000024612261012651020412 0ustar00detlevusers00000000000000from mod_python import apache def handler(req): req.content_type = "text/plain" req.send_http_header() req.write("Hello World!\n") return apache.OK eric4-4.5.18/eric/Examples/PaxHeaders.8617/rhallo.py0000644000175000001440000000013112261012651020115 xustar000000000000000030 mtime=1388582313.408094935 29 atime=1389081084.10772438 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Examples/rhallo.py0000644000175000001440000000044512261012651017653 0ustar00detlevusers00000000000000#!/usr/bin/env python import sys import eric4dbgstub def main(): print "Hello World!" sys.exit(0) if __name__ == "__main__": if eric4dbgstub.initDebugger("standard"): # or if eric4dbgstub.initDebugger("threads"): eric4dbgstub.debugger.startDebugger() main() eric4-4.5.18/eric/PaxHeaders.8617/README-passive-debugging.txt0000644000175000001440000000007310735765774021641 xustar000000000000000029 atime=1389081084.10772438 30 ctime=1389081086.309724333 eric4-4.5.18/eric/README-passive-debugging.txt0000644000175000001440000000427710735765774021401 0ustar00detlevusers00000000000000README for passive mode debugging eric4 provides the capability to debug programms using the passive mode. In this mode it is possible to start the debugger separate from the IDE. This may be done on a different computer as well. If the debugger is started on a remote machine, it is your responsibility to ensure, that the paths to the script to be debugged are identical on both machines. In order to enable passive mode debugging in the IDE choose the debugger tab of the preferences dialog and enable the passive mode debugging checkbox. You may change the default port as well. Please be aware that you have to tell the debugger the port, if it is different to the default value of 42424. On the remote computer you have to have the debugger scripts installed. Use DebugClient.py to debug normal scripts or DebugClientThreads.py to debug multi threaded scripts. The debuggers know about the following commandline switches. -h -- this specifies the hostname of the machine running the IDE. -p -- this specifies the portnumber of the IDE. -w -- this specifies the working directory to be used for the script to be debugged. -t -- this enables tracing into the Python library -n -- this disables the redirection of stdin, stdout and stderr The commandline parameters have to be followed by '--' (double dash), the script to be debugged and its commandline parameters. Example:: python DebugClient -h somehost -- myscript.py param1 After the execution of the debugger command, it connects to the IDE and tells it the filename of the script being debugged. The IDE will try to load it and the script will stop at the first line. After that you may set breakpoints, step through your script and use all the debugging functions. Note: The port and hostname may alternatively be set through the environment variables ERICPORT and ERICHOST. Please send bug reports, feature requests or contributions to eric bugs address or using the buildt in bug reporting dialog. eric4-4.5.18/eric/PaxHeaders.8617/eric4_trpreviewer.py0000644000175000001440000000013012261012651020521 xustar000000000000000029 mtime=1388582313.41009496 29 atime=1389081084.10772438 30 ctime=1389081086.309724333 eric4-4.5.18/eric/eric4_trpreviewer.py0000644000175000001440000000514512261012651020262 0ustar00detlevusers00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- # Copyright (c) 2004 - 2014 Detlev Offenbach # """ Eric4 TR Previewer This is the main Python script that performs the necessary initialization of the tr previewer and starts the Qt event loop. This is a standalone version of the integrated tr previewer. """ import sys import os # disable the usage of KDE widgets, if requested sys.e4nokde = False if "--nokde" in sys.argv: del sys.argv[sys.argv.index("--nokde")] sys.e4nokde = True else: sys.e4nokde = os.getenv("e4nokde") is not None and os.getenv("e4nokde") == "1" for arg in sys.argv: if arg.startswith("--config="): import Utilities configDir = arg.replace("--config=", "") Utilities.setConfigDir(configDir) sys.argv.remove(arg) break from KdeQt.KQApplication import KQApplication from Tools.TRSingleApplication import TRSingleApplicationClient from Utilities import Startup def createMainWidget(argv): """ Function to create the main widget. @param argv list of commandline parameters (list of strings) @return reference to the main widget (QWidget) """ from Tools.TRPreviewer import TRPreviewer if len(argv) > 1: files = argv[1:] else: files = [] previewer = TRPreviewer(files, None, 'TRPreviewer') return previewer def main(): """ Main entry point into the application. """ options = [\ ("--config=configDir", "use the given directory as the one containing the config files"), ("--nokde" , "don't use KDE widgets"), ] kqOptions = [\ ("config \\", "use the given directory as the one containing the config files"), ("nokde" , "don't use KDE widgets"), ("!+file","") ] appinfo = Startup.makeAppInfo(sys.argv, "Eric4 TR Previewer", "file", "TR file previewer", options) app = KQApplication(sys.argv, kqOptions) client = TRSingleApplicationClient() res = client.connect() if res > 0: if len(sys.argv) > 1: client.processArgs(sys.argv[1:]) sys.exit(0) elif res < 0: print "eric4_trpreviewer: %s" % client.errstr() sys.exit(res) else: res = Startup.simpleAppStartup(sys.argv, appinfo, createMainWidget, kqOptions) sys.exit(res) if __name__ == '__main__': main() eric4-4.5.18/eric/PaxHeaders.8617/eric4_tray.py0000644000175000001440000000013212261012651017124 xustar000000000000000030 mtime=1388582313.412094986 30 atime=1389081084.108724379 30 ctime=1389081086.309724333 eric4-4.5.18/eric/eric4_tray.py0000644000175000001440000000363512261012651016665 0ustar00detlevusers00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Eric4 Tray This is the main Python script that performs the necessary initialization of the system-tray application. This acts as a quickstarter by providing a context menu to start the eric4 IDE and the eric4 tools. """ import sys import os # disable the usage of KDE widgets, if requested sys.e4nokde = False if "--nokde" in sys.argv: del sys.argv[sys.argv.index("--nokde")] sys.e4nokde = True else: sys.e4nokde = os.getenv("e4nokde") is not None and os.getenv("e4nokde") == "1" for arg in sys.argv: if arg.startswith("--config="): import Utilities configDir = arg.replace("--config=", "") Utilities.setConfigDir(configDir) sys.argv.remove(arg) break from Utilities import Startup def createMainWidget(argv): """ Function to create the main widget. @param argv list of commandline parameters (list of strings) @return reference to the main widget (QWidget) """ from Tools.TrayStarter import TrayStarter return TrayStarter() def main(): """ Main entry point into the application. """ options = [\ ("--config=configDir", "use the given directory as the one containing the config files"), ("--nokde" , "don't use KDE widgets"), ] appinfo = Startup.makeAppInfo(sys.argv, "Eric4 Tray", "", "Traystarter for eric4", options) res = Startup.simpleAppStartup(sys.argv, appinfo, createMainWidget, quitOnLastWindowClosed = False, raiseIt = False) sys.exit(res) if __name__ == '__main__': main() eric4-4.5.18/eric/PaxHeaders.8617/eric4_iconeditor.py0000644000175000001440000000013212261012651020304 xustar000000000000000030 mtime=1388582313.414095011 30 atime=1389081084.108724379 30 ctime=1389081086.309724333 eric4-4.5.18/eric/eric4_iconeditor.py0000644000175000001440000000432212261012651020037 0ustar00detlevusers00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Eric4 Icon Editor This is the main Python script that performs the necessary initialization of the icon editor and starts the Qt event loop. This is a standalone version of the integrated icon editor. """ import sys import os # disable the usage of KDE widgets, if requested sys.e4nokde = False if "--nokde" in sys.argv: del sys.argv[sys.argv.index("--nokde")] sys.e4nokde = True else: sys.e4nokde = os.getenv("e4nokde") is not None and os.getenv("e4nokde") == "1" for arg in sys.argv: if arg.startswith("--config="): import Utilities configDir = arg.replace("--config=", "") Utilities.setConfigDir(configDir) sys.argv.remove(arg) break from Utilities import Startup import Utilities def createMainWidget(argv): """ Function to create the main widget. @param argv list of commandline parameters (list of strings) @return reference to the main widget (QWidget) """ from IconEditor.IconEditorWindow import IconEditorWindow try: fileName = argv[1] except IndexError: fileName = "" editor = IconEditorWindow(fileName, None) return editor def main(): """ Main entry point into the application. """ options = [\ ("--config=configDir", "use the given directory as the one containing the config files"), ("--nokde" , "don't use KDE widgets"), ("", "name of file to edit") ] kqOptions = [\ ("config \\", "use the given directory as the one containing the config files"), ("nokde" , "don't use KDE widgets"), ("!+file","") ] appinfo = Startup.makeAppInfo(sys.argv, "Eric4 Icon Editor", "", "Little tool to edit icon files.", options) res = Startup.simpleAppStartup(sys.argv, appinfo, createMainWidget, kqOptions) sys.exit(res) if __name__ == '__main__': main() eric4-4.5.18/eric/PaxHeaders.8617/README-i18n.txt0000644000175000001440000000007410563426123016773 xustar000000000000000030 atime=1389081084.108724379 30 ctime=1389081086.309724333 eric4-4.5.18/eric/README-i18n.txt0000644000175000001440000000150110563426123016515 0ustar00detlevusers00000000000000README for the eric4 IDE's translations Installation of translations Translations of the eric4 IDE are available as separate downloads. There are two ways to install them. The first possibility is to install them together with eric4. In order to do that, simply extract the downloaded archives into the same place as the eric4 archive and follow the installation instructions of the eric4 README. The second possibility is to install them separately. Extract the downloaded archives and execute the install-i18n.py script (type python install-i18n.py -h for some help). This way you can make the translations available to everybody or just to the user executing the installation command (if using the -p switch). eric4-4.5.18/eric/PaxHeaders.8617/__init__.py0000644000175000001440000000013212261012651016616 xustar000000000000000030 mtime=1388582313.418095062 30 atime=1389081084.108724379 30 ctime=1389081086.309724333 eric4-4.5.18/eric/__init__.py0000644000175000001440000000044612261012651016354 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Package implementing the eric4 Python IDE (version 4.5). To get more information about eric4 please see the eric web site. """ eric4-4.5.18/eric/PaxHeaders.8617/eric4_pluginrepository.py0000644000175000001440000000013212261012651021603 xustar000000000000000030 mtime=1388582313.420095087 30 atime=1389081084.108724379 30 ctime=1389081086.309724333 eric4-4.5.18/eric/eric4_pluginrepository.py0000644000175000001440000000347212261012651021343 0ustar00detlevusers00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Eric4 Plugin Installer This is the main Python script to install eric4 plugins from outside of the IDE. """ import sys import os # disable the usage of KDE widgets, if requested sys.e4nokde = False if "--nokde" in sys.argv: del sys.argv[sys.argv.index("--nokde")] sys.e4nokde = True else: sys.e4nokde = os.getenv("e4nokde") is not None and os.getenv("e4nokde") == "1" for arg in sys.argv: if arg.startswith("--config="): import Utilities configDir = arg.replace("--config=", "") Utilities.setConfigDir(configDir) sys.argv.remove(arg) break from Utilities import Startup def createMainWidget(argv): """ Function to create the main widget. @param argv list of commandline parameters (list of strings) @return reference to the main widget (QWidget) """ from PluginManager.PluginRepositoryDialog import PluginRepositoryWindow return PluginRepositoryWindow(None) def main(): """ Main entry point into the application. """ options = [\ ("--config=configDir", "use the given directory as the one containing the config files"), ("--nokde" , "don't use KDE widgets"), ] appinfo = Startup.makeAppInfo(sys.argv, "Eric4 Plugin Repository", "", "Utility to show the contents of the eric4" " Plugin repository.", options) res = Startup.simpleAppStartup(sys.argv, appinfo, createMainWidget) sys.exit(res) if __name__ == '__main__': main() eric4-4.5.18/eric/PaxHeaders.8617/i18n0000644000175000001440000000013212262730777015230 xustar000000000000000030 mtime=1389081087.710724292 30 atime=1389081086.316724333 30 ctime=1389081087.710724292 eric4-4.5.18/eric/i18n/0000755000175000001440000000000012262730777015037 5ustar00detlevusers00000000000000eric4-4.5.18/eric/PaxHeaders.8617/README0000644000175000001440000000007411332612404015372 xustar000000000000000030 atime=1389081084.393724374 30 ctime=1389081086.309724333 eric4-4.5.18/eric/README0000644000175000001440000002351111332612404015121 0ustar00detlevusers00000000000000README for the eric4 IDE Installation Installing eric4 is a simple process. Just execute the install.py script (type python install.py -h for some help). Please note that the installation has to be performed using the administrators account (i.e. root on linux). This installs a wrapper script in the standard executable directory (default: /usr/local/bin on linux) called eric4. If you want to uninstall the package just execute the uninstall script. This gets rid of all installed files. In this case please send an email to the below mentioned address and tell me your reason. This might give me a hint on how to improve eric4. If the required packages (Qt4, QScintilla2, sip and PyQt4) are not installed, please get them and install them in the following order (order is important). 1. Install Qt4 2. Build and install sip 3. Build and install QScintilla2 4. Build and install PyQt4 5. Build and install QScintilla2 Python bindings 6. Install eric4 If you want to use the interfaces to other supported software packages, you may install them in any order and at any time. Installation of translations Translations of the eric4 IDE are available as separate downloads. There are two ways to install them. The first possibility is to install them together with eric4. In order to do that, simply extract the downloaded archives into the same place as the eric4 archive and follow the installation instructions above. The second possibility is to install them separately. Extract the downloaded archives and execute the install-i18n.py script (type python install-i18n.py -h for some help). This way you can make the translations available to everybody or just to the user executing the installation command (if using the -p switch). Running Just call up eric4, which will start the IDE. Use the "what is"-help (arrow with ?) to get some help. Sorry, there is no documentation yet. To start the unit test module in a standalone variant simply call up eric4-unittest. This will show the same dialog (though with a little bit less functionality) as if started from within eric4. The helpviewer can be started as a standalone program by executing the eric4-helpviewer script. Please note, the first time you start eric4 it will recognize, that it hasn't been configured yet and will show the configuration dialog. Please take your time and go through all the configuration items. However, every configuration option has a meaningful default value. Running from the sources If you want to run eric4 from within the source tree you have to execute the compileUiFiles.py script once after a fresh checkout from the source repository or when new dialogs have been added. Thereafter just execute the eric4.py script. Tray starter eric4 comes with a little utility called "eric4-tray". This embeds an icon in the system tray, which contains a context menu to start eric4 and all it's utilities. Double clicking this icon starts the eric4 IDE. Autocompletion/Calltips eric4 provides an interface to the QScintilla auto-completion and calltips functionality. QScintilla2 comes with API files for Python and itself. PyQt4 contains an API file as well. These are installed by default, if the correct installation order (see above) is followed. An API file for eric4 is installed in the same place. In order to use autocompletion and calltips in eric4 please configure these functions in the "Preferences Dialog" on the "Editor -> APIs", "Editor -> Autocompletion" and "Editor -> Calltips" pages. Remote Debugger In order to enable the remote debugger start eric4, open the preferences dialog and configure the settings on the debugger pages. The remote login must be possible without any further interaction (i.e. no password prompt). If the remote setup differs from the local one you must configure the Python interpreter and the Debug Client to be used in the Preferences dialog. eric4 includes two different versions of the debug client. DebugClient.py is the traditional debugger and DebugClientThreads is a multithreading variant of the debug client. Please copy all needed files to a place accessible through the Python path of the remote machine and set the entries of the a.m. configuration tab accordingly. Passive Debugging Passive debugging mode allows the startup of the debugger from outside of the IDE. The IDE waits for a connection attempt. For further details see the file README-passive-debugging.txt Plugin System eric4 contains a plugin system, that is used to extend eric4's functionality. Some plugins are part of eric4. Additional plugins are available via the Internet. Please use the built in plug-in repository dialog to get a list of available (official) plugins and to download them. For more details about the plug-in system please see the documentation area. Interfaces to additional software packages At the moment eric4 provides interfaces to the following software packages. Qt-Designer This is part of the Qt distribution and is used to generate user interfaces. Qt-Linguist This is part of the Qt distribution and is used to generate translations. Qt-Assistant This is part of the Qt distribution and may be used to display help files. Subversion This is another version control system available from . It is meant to be the successor of CVS. Eric4 supports two different Subversion interfaces. One is using the svn command line tool, the other is using the PySvn Python interface . The selection is done automatically depending on the installed software. The PySvn interface is prefered. This automatism can be overridden an a per project basis using the "User Properties" dialog. coverage.py This is a tool to check Python code coverage. A slightly modified version is part of the eric4 distribution. The original version is available from tabnanny This is a tool to check Python code for white-space related problems. It is part of the standard Python installation. profile This is part of the standard Python distribution and is used to profile Python source code. cyclops This is a tool to detect variable cycles which can cause the garbage collector being unable to do his job. Interfaces to additional software packages via plugins Some of the interfaces provided as plugins are as follows. CVS This is a version control system available from . pylint This is a tool to check the source code according to various rules. It is available from . cx_Freeze This is a tool for packaging Python programs. It is available from Internationalization eric4 and it's tools are prepared to show the UI in different languages, which can be configured via the preferences dialog. The Qt and QScintilla translations are searched in the translations directory given in the preferences dialog (Qt page). If the translations cannot be found, some part of the MMI might show English texts even if you have selected something else. If you are missing eric4 translations for your language and are willing to volunteer for this work please send me an email naming the country code and I will send you the respective Qt-Linguist file. Window Layout eric4 provides different window layouts. In these layouts, the shell window and the file browser may be embedded or be separat windows. The first layout uses dock windows and the last one provides independant windows. Source code documentation eric4 has a built in source code documentation generator, which is usable via the commandline as well. For further details please see the file README-eric4-doc.txt License eric4 (and the others) is released under the conditions of the GPL. See separate license file for more details. Third party software included in eric4 is released under their respective license and contained in the eric4 distribution for convenience. Bugs and other reports Please send bug reports, feature requests or contributions to eric bugs address. After the IDE is installed you can use the "Report Bug..." entry of the Help menu. This will send a message to eric4-4.5.18/eric/PaxHeaders.8617/VCS0000644000175000001440000000013212262730776015103 xustar000000000000000030 mtime=1389081086.301724332 30 atime=1389081086.305724332 30 ctime=1389081086.315724332 eric4-4.5.18/eric/VCS/0000755000175000001440000000000012262730776014712 5ustar00detlevusers00000000000000eric4-4.5.18/eric/VCS/PaxHeaders.8617/RepositoryInfoDialog.ui0000644000175000001440000000007411072435341021623 xustar000000000000000030 atime=1389081084.394724374 30 ctime=1389081086.309724333 eric4-4.5.18/eric/VCS/RepositoryInfoDialog.ui0000644000175000001440000000332011072435341021346 0ustar00detlevusers00000000000000 VcsRepositoryInfoDialog 0 0 590 437 Repository Information true true Qt::Horizontal QDialogButtonBox::Close qPixmapFromMimeSource buttonBox accepted() VcsRepositoryInfoDialog accept() 48 419 50 437 buttonBox rejected() VcsRepositoryInfoDialog reject() 226 422 233 440 eric4-4.5.18/eric/VCS/PaxHeaders.8617/ProjectBrowserHelper.py0000644000175000001440000000013212261012651021624 xustar000000000000000030 mtime=1388582313.423095125 30 atime=1389081084.394724374 30 ctime=1389081086.309724333 eric4-4.5.18/eric/VCS/ProjectBrowserHelper.py0000644000175000001440000003303712261012651021364 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2005 - 2014 Detlev Offenbach # """ Module implementing the base class of the VCS project browser helper. """ import os from PyQt4.QtCore import QObject from PyQt4.QtGui import QDialog from KdeQt.KQApplication import e4App from UI.DeleteFilesConfirmationDialog import DeleteFilesConfirmationDialog from Project.ProjectBrowserModel import ProjectBrowserSimpleDirectoryItem, \ ProjectBrowserFileItem, ProjectBrowserDirectoryItem from RepositoryInfoDialog import VcsRepositoryInfoDialog import Preferences class VcsProjectBrowserHelper(QObject): """ Class implementing the base class of the VCS project browser helper. """ def __init__(self, vcsObject, browserObject, projectObject, isTranslationsBrowser, parent = None, name = None): """ Constructor @param vcsObject reference to the vcs object @param browserObject reference to the project browser object @param projectObject reference to the project object @param isTranslationsBrowser flag indicating, the helper is requested for the translations browser (this needs some special treatment) @param parent parent widget (QWidget) @param name name of this object (string or QString) """ QObject.__init__(self, parent) if name: self.setObjectName(name) self.vcs = vcsObject self.browser = browserObject self.isTranslationsBrowser = isTranslationsBrowser self.project = projectObject def addVCSMenus(self, mainMenu, multiMenu, backMenu, dirMenu, dirMultiMenu): """ Public method to add the VCS entries to the various project browser menus. @param mainMenu reference to the main menu (QPopupMenu) @param multiMenu reference to the multiple selection menu (QPopupMenu) @param backMenu reference to the background menu (QPopupMenu) @param dirMenu reference to the directory menu (QPopupMenu) @param dirMultiMenu reference to the multiple selection directory menu (QPopupMenu) """ self._addVCSMenu(mainMenu) self._addVCSMenuMulti(multiMenu) self._addVCSMenuBack(backMenu) self._addVCSMenuDir(dirMenu) self._addVCSMenuDirMulti(dirMultiMenu) def showContextMenu(self, menu, standardItems): """ Slot called before the context menu is shown. It enables/disables the VCS menu entries depending on the overall VCS status and the file status. @param menu reference to the menu to be shown @param standardItems array of standard items that need activation/deactivation depending on the overall VCS status """ raise RuntimeError('Not implemented') def showContextMenuMulti(self, menu, standardItems): """ Slot called before the context menu (multiple selections) is shown. It enables/disables the VCS menu entries depending on the overall VCS status and the files status. @param menu reference to the menu to be shown @param standardItems array of standard items that need activation/deactivation depending on the overall VCS status """ raise RuntimeError('Not implemented') def showContextMenuDir(self, menu, standardItems): """ Slot called before the context menu is shown. It enables/disables the VCS menu entries depending on the overall VCS status and the directory status. @param menu reference to the menu to be shown @param standardItems array of standard items that need activation/deactivation depending on the overall VCS status """ raise RuntimeError('Not implemented') def showContextMenuDirMulti(self, menu, standardItems): """ Slot called before the context menu is shown. It enables/disables the VCS menu entries depending on the overall VCS status and the directory status. @param menu reference to the menu to be shown @param standardItems array of standard items that need activation/deactivation depending on the overall VCS status """ raise RuntimeError('Not implemented') ############################################################################ ## General menu handling methods below ############################################################################ def _VCSUpdate(self): """ Protected slot called by the context menu to update a file from the VCS repository. """ if self.isTranslationsBrowser: names = [unicode(itm.dirName()) \ for itm in self.browser.getSelectedItems(\ [ProjectBrowserSimpleDirectoryItem])] if not names: names = [unicode(itm.fileName()) \ for itm in self.browser.getSelectedItems([ProjectBrowserFileItem])] else: names = [] for itm in self.browser.getSelectedItems(): try: name = unicode(itm.fileName()) except AttributeError: name = unicode(itm.dirName()) names.append(name) self.vcs.vcsUpdate(names) def _VCSCommit(self): """ Protected slot called by the context menu to commit the changes to the VCS repository. """ if self.isTranslationsBrowser: names = [unicode(itm.dirName()) \ for itm in self.browser.getSelectedItems(\ [ProjectBrowserSimpleDirectoryItem])] if not names: names = [unicode(itm.fileName()) \ for itm in self.browser.getSelectedItems([ProjectBrowserFileItem])] else: names = [] for itm in self.browser.getSelectedItems(): try: name = unicode(itm.fileName()) except AttributeError: name = unicode(itm.dirName()) names.append(name) if Preferences.getVCS("AutoSaveFiles"): vm = e4App().getObject("ViewManager") for name in names: vm.saveEditor(name) self.vcs.vcsCommit(names, '') def _VCSAdd(self): """ Protected slot called by the context menu to add the selected file to the VCS repository. """ if self.isTranslationsBrowser: items = self.browser.getSelectedItems([ProjectBrowserSimpleDirectoryItem]) if items: names = [unicode(itm.dirName()) for itm in items] qnames = [] else: items = self.browser.getSelectedItems([ProjectBrowserFileItem]) names = [] qnames = [] for itm in items: name = unicode(itm.fileName()) if name.endswith('.qm'): qnames.append(name) else: names.append(name) else: names = [] for itm in self.browser.getSelectedItems(): try: name = unicode(itm.fileName()) except AttributeError: name = unicode(itm.dirName()) names.append(name) qnames = [] if not len(names + qnames): return if len(names + qnames) == 1: if names: self.vcs.vcsAdd(names[0], os.path.isdir(names[0])) else: if self.vcs.canDetectBinaries: self.vcs.vcsAdd(qnames) else: self.vcs.vcsAddBinary(qnames) else: if self.vcs.canDetectBinaries: self.vcs.vcsAdd(names + qnames) else: self.vcs.vcsAdd(names) if len(qnames): self.vcs.vcsAddBinary(qnames) for fn in names + qnames: self._updateVCSStatus(fn) def _VCSAddTree(self): """ Protected slot called by the context menu. It is used to add the selected directory tree to the VCS repository. """ items = self.browser.getSelectedItems() names = [] for itm in self.browser.getSelectedItems(): try: name = unicode(itm.fileName()) except AttributeError: name = unicode(itm.dirName()) names.append(name) self.vcs.vcsAddTree(names) for fn in names: self._updateVCSStatus(fn) def _VCSRemove(self): """ Protected slot called by the context menu to remove the selected file from the VCS repository. """ if self.isTranslationsBrowser: items = self.browser.getSelectedItems([ProjectBrowserSimpleDirectoryItem]) if items: return # not supported isRemoveDirs = False items = self.browser.getSelectedItems([ProjectBrowserFileItem]) names = [unicode(itm.fileName()) for itm in items] dlg = DeleteFilesConfirmationDialog(self.parent(), self.trUtf8("Remove from repository (and disk)"), self.trUtf8("Do you really want to remove these translation files from" " the repository (and disk)?"), names) else: items = self.browser.getSelectedItems() isRemoveDirs = len(items) == \ self.browser.getSelectedItemsCount(\ [ProjectBrowserSimpleDirectoryItem, ProjectBrowserDirectoryItem]) if isRemoveDirs: names = [unicode(itm.dirName()) for itm in items] else: names = [unicode(itm.fileName()) for itm in items] files = [self.browser.project.getRelativePath(name) \ for name in names] dlg = DeleteFilesConfirmationDialog(self.parent(), self.trUtf8("Remove from repository (and disk)"), self.trUtf8("Do you really want to remove these files/directories" " from the repository (and disk)?"), files) if dlg.exec_() == QDialog.Accepted: status = self.vcs.vcsRemove(names) if status: if isRemoveDirs: self.browser._removeDir() # remove directories from Project else: self.browser._removeFile() # remove file(s) from project def _VCSLog(self): """ Protected slot called by the context menu to show the VCS log of a file/directory. """ itm = self.browser.currentItem() try: fn = unicode(itm.fileName()) except AttributeError: fn = unicode(itm.dirName()) self.vcs.vcsLog(fn) def _VCSDiff(self): """ Protected slot called by the context menu to show the difference of a file/directory to the repository. """ names = [] for itm in self.browser.getSelectedItems(): try: name = unicode(itm.fileName()) except AttributeError: name = unicode(itm.dirName()) names.append(name) self.vcs.vcsDiff(names) def _VCSStatus(self): """ Protected slot called by the context menu to show the status of a file. """ if self.isTranslationsBrowser: items = self.browser.getSelectedItems([ProjectBrowserSimpleDirectoryItem]) if items: names = [unicode(itm.dirName()) for itm in items] else: items = self.browser.getSelectedItems([ProjectBrowserFileItem]) names = [unicode(itm.fileName()) for itm in items] else: names = [] for itm in self.browser.getSelectedItems(): try: name = unicode(itm.fileName()) except AttributeError: name = unicode(itm.dirName()) names.append(name) self.vcs.vcsStatus(names) def _VCSRevert(self): """ Protected slot called by the context menu to revert changes made to a file. """ names = [] for itm in self.browser.getSelectedItems(): try: name = unicode(itm.fileName()) except AttributeError: name = unicode(itm.dirName()) names.append(name) self.vcs.vcsRevert(names) def _VCSMerge(self): """ Protected slot called by the context menu to merge changes into to a file. """ itm = self.browser.currentItem() try: name = unicode(itm.fileName()) except AttributeError: name = unicode(itm.dirName()) self.vcs.vcsMerge(name) def _VCSInfoDisplay(self): """ Protected slot called to show some vcs information. """ info = self.vcs.vcsRepositoryInfos(self.project.ppath) dlg = VcsRepositoryInfoDialog(None, info) dlg.exec_() def _updateVCSStatus(self, name): """ Protected method to update the VCS status of an item. @param name filename or directoryname of the item to be updated (string) """ self.project.getModel().updateVCSStatus(name) eric4-4.5.18/eric/VCS/PaxHeaders.8617/CommandOptionsDialog.ui0000644000175000001440000000007411072435341021562 xustar000000000000000030 atime=1389081084.394724374 30 ctime=1389081086.309724333 eric4-4.5.18/eric/VCS/CommandOptionsDialog.ui0000644000175000001440000002442511072435341021316 0ustar00detlevusers00000000000000 vcsCommandOptionsDialog 0 0 531 413 VCS Command Options <b>VCS Command Options Dialog</b> <p>Enter the options for the different VCS commands. The "Global Options" entry applies to all VCS commands.</p> true &History Options: historyEdit &Add Options: addEdit &Remove Options: removeEdit &Tag Options: tagEdit Enter the options for the commit command. <b>Commit Options</b> <p>Enter the options for the commit command.</p> Enter the options for the history command. <b>History Options</b> <p>Enter the options for the history command.</p> Enter the options for the diff command. <b>Diff Options</b> <p>Enter the options for the diff command.</p> Enter the options for the update command. <b>Update Options</b> <p>Enter the options for the update command.</p> Enter the options for the log command. <b>Log Options</b> <p>Enter the options for the log command.</p> Enter the options for the tag command. <b>Tag Options</b> <p>Enter the options for the tag command.</p> Enter the options for the status command. <b>Status Options</b> <p>Enter the options for the status command.</p> &Diff Options: diffEdit &Global Options: globalEdit Enter the options for the export command. <b>Export Options</b> <p>Enter the options for the export command.</p> Enter the options for the add command. <b>Add Options</b> <p>Enter the options for the add command.</p> &Log Options: logEdit &StatusOptions: statusEdit Enter the options for the remove command. <b>Remove Options</b> <p>Enter the options for the remove command.</p> Enter the options for the checkout command. <b>Checkout Options</b> <p>Enter the options for the checkout command.</p> Co&mmit Options: commitEdit &Export Options: exportEdit Check&out Options: checkoutEdit &Update Options: updateEdit Enter the global options. <b>Global Options</b> <p>Enter the global options.</p> Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok qPixmapFromMimeSource globalEdit commitEdit checkoutEdit updateEdit addEdit removeEdit diffEdit logEdit historyEdit statusEdit tagEdit exportEdit buttonBox accepted() vcsCommandOptionsDialog accept() 120 390 120 411 buttonBox rejected() vcsCommandOptionsDialog reject() 191 390 193 410 eric4-4.5.18/eric/VCS/PaxHeaders.8617/RepositoryInfoDialog.py0000644000175000001440000000013112261012651021624 xustar000000000000000029 mtime=1388582313.42509515 30 atime=1389081084.394724374 30 ctime=1389081086.309724333 eric4-4.5.18/eric/VCS/RepositoryInfoDialog.py0000644000175000001440000000105312261012651021356 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2004 - 2014 Detlev Offenbach # """ Module implemting a dialog to show repository information. """ from PyQt4.QtGui import QDialog from Ui_RepositoryInfoDialog import Ui_VcsRepositoryInfoDialog class VcsRepositoryInfoDialog(QDialog, Ui_VcsRepositoryInfoDialog): """ Class implemting a dialog to show repository information. """ def __init__(self, parent, info): QDialog.__init__(self, parent) self.setupUi(self) self.infoBrowser.setHtml(info) eric4-4.5.18/eric/VCS/PaxHeaders.8617/StatusMonitorLed.py0000644000175000001440000000013212261012651020772 xustar000000000000000030 mtime=1388582313.430095214 30 atime=1389081084.394724374 30 ctime=1389081086.309724333 eric4-4.5.18/eric/VCS/StatusMonitorLed.py0000644000175000001440000001165212261012651020531 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing a LED to indicate the status of the VCS status monitor thread. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQInputDialog from E4Gui.E4Led import E4Led, E4LedRectangular import Preferences class StatusMonitorLed(E4Led): """ Class implementing a LED to indicate the status of the VCS status monitor thread. """ def __init__(self, project, parent): """ Constructor @param project reference to the project object (Project.Project) @param parent reference to the parent object (QWidget) """ E4Led.__init__(self, parent, shape = E4LedRectangular, rectRatio = 1.0) self.project = project self.vcsMonitorLedColors = { "off" : QColor(Qt.lightGray), "ok" : QColor(Qt.green), "nok" : QColor(Qt.red), "op" : QColor(Qt.yellow), "send" : QColor(Qt.blue), "wait" : QColor(Qt.cyan), "timeout" : QColor(Qt.darkRed) } self.__on = False self.setWhatsThis(self.trUtf8( """

    This LED indicates the operating""" """ status of the VCS monitor thread (off = monitoring off,""" """ green = monitoring on and ok, red = monitoring on, but not ok,""" """ yellow = checking VCS status). A status description is given""" """ in the tooltip.

    """ )) self.setToolTip(\ self.trUtf8("Repository status checking is switched off") ) self.setColor(self.vcsMonitorLedColors["off"]) # define a context menu self.__menu = QMenu(self) self.__checkAct = \ self.__menu.addAction(self.trUtf8("Check status"), self.__checkStatus) self.__intervalAct = \ self.__menu.addAction(self.trUtf8("Set interval..."), self.__setInterval) self.__menu.addSeparator() self.__onAct = \ self.__menu.addAction(self.trUtf8("Switch on"), self.__switchOn) self.__offAct = \ self.__menu.addAction(self.trUtf8("Switch off"), self.__switchOff) self.__checkActions() # connect signals to our slots self.setContextMenuPolicy(Qt.CustomContextMenu) self.connect(self, SIGNAL("customContextMenuRequested(const QPoint &)"), self._showContextMenu) self.connect(self.project, SIGNAL('vcsStatusMonitorStatus(QString, QString)'), self.__projectVcsMonitorStatus) def __checkActions(self): """ Private method to set the enabled status of the context menu actions. """ if self.project.pudata["VCSSTATUSMONITORINTERVAL"]: vcsStatusMonitorInterval = self.project.pudata["VCSSTATUSMONITORINTERVAL"][0] else: vcsStatusMonitorInterval = Preferences.getVCS("StatusMonitorInterval") self.__checkAct.setEnabled(self.__on) self.__intervalAct.setEnabled(self.__on) self.__onAct.setEnabled((not self.__on) and vcsStatusMonitorInterval > 0) self.__offAct.setEnabled(self.__on) def __projectVcsMonitorStatus(self, status, statusMsg): """ Private method to receive the status monitor status. @param status status of the monitoring thread (QString, ok, nok or off) @param statusMsg explanotory text for the signaled status (QString) """ self.setColor(self.vcsMonitorLedColors[unicode(status)]) self.setToolTip(statusMsg) self.__on = unicode(status) != 'off' def _showContextMenu(self, coord): """ Protected slot to show the context menu. @param coord the position of the mouse pointer (QPoint) """ if not self.project.isOpen(): return self.__checkActions() self.__menu.popup(self.mapToGlobal(coord)) def __checkStatus(self): """ Private slot to initiate a new status check. """ self.project.checkVCSStatus() def __setInterval(self): """ Private slot to change the status check interval. """ interval, ok = KQInputDialog.getInt(\ None, self.trUtf8("VCS Status Monitor"), self.trUtf8("Enter monitor interval [s]"), self.project.getStatusMonitorInterval(), 0, 3600, 1) if ok: self.project.setStatusMonitorInterval(interval) def __switchOn(self): """ Private slot to switch the status monitor thread to On. """ self.project.startStatusMonitor() def __switchOff(self): """ Private slot to switch the status monitor thread to Off. """ self.project.stopStatusMonitor() eric4-4.5.18/eric/VCS/PaxHeaders.8617/ProjectHelper.py0000644000175000001440000000013212261012651020260 xustar000000000000000030 mtime=1388582313.432095239 30 atime=1389081084.394724374 30 ctime=1389081086.309724333 eric4-4.5.18/eric/VCS/ProjectHelper.py0000644000175000001440000004745612261012651020032 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2005 - 2014 Detlev Offenbach # """ Module implementing the base class of the VCS project helper. """ import os import sys import shutil import copy from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQMessageBox, KQInputDialog from KdeQt.KQApplication import e4App import VCS from CommandOptionsDialog import vcsCommandOptionsDialog from RepositoryInfoDialog import VcsRepositoryInfoDialog from E4Gui.E4Action import E4Action import Utilities import Preferences class VcsProjectHelper(QObject): """ Class implementing the base class of the VCS project helper. """ def __init__(self, vcsObject, projectObject, parent = None, name = None): """ Constructor @param vcsObject reference to the vcs object @param projectObject reference to the project object @param parent parent widget (QWidget) @param name name of this object (string or QString) """ QObject.__init__(self, parent) if name: self.setObjectName(name) self.vcs = vcsObject self.project = projectObject self.actions = [] self.vcsAddAct = None self.initActions() def setObjects(self, vcsObject, projectObject): """ Public method to set references to the vcs and project objects. @param vcsObject reference to the vcs object @param projectObject reference to the project object """ self.vcs = vcsObject self.project = projectObject def initActions(self): """ Public method to generate the action objects. """ self.vcsNewAct = E4Action(self.trUtf8('New from repository'), self.trUtf8('&New from repository...'), 0, 0, self, 'vcs_new') self.vcsNewAct.setStatusTip(self.trUtf8( 'Create a new project from the VCS repository' )) self.vcsNewAct.setWhatsThis(self.trUtf8( """New from repository""" """

    This creates a new local project from the VCS repository.

    """ )) self.connect(self.vcsNewAct, SIGNAL('triggered()'), self._vcsCheckout) self.actions.append(self.vcsNewAct) self.vcsExportAct = E4Action(self.trUtf8('Export from repository'), self.trUtf8('&Export from repository...'), 0, 0, self, 'vcs_export') self.vcsExportAct.setStatusTip(self.trUtf8( 'Export a project from the repository' )) self.vcsExportAct.setWhatsThis(self.trUtf8( """Export from repository""" """

    This exports a project from the repository.

    """ )) self.connect(self.vcsExportAct, SIGNAL('triggered()'), self._vcsExport) self.actions.append(self.vcsExportAct) self.vcsAddAct = E4Action(self.trUtf8('Add to repository'), self.trUtf8('&Add to repository...'), 0, 0, self, 'vcs_add') self.vcsAddAct.setStatusTip(self.trUtf8( 'Add the local project to the VCS repository' )) self.vcsAddAct.setWhatsThis(self.trUtf8( """Add to repository""" """

    This adds (imports) the local project to the VCS repository.

    """ )) self.connect(self.vcsAddAct, SIGNAL('triggered()'), self._vcsImport) self.actions.append(self.vcsAddAct) def initMenu(self, menu): """ Public method to generate the VCS menu. @param menu reference to the menu to be populated (QMenu) """ menu.clear() menu.addAction(self.vcsNewAct) menu.addAction(self.vcsExportAct) menu.addSeparator() menu.addAction(self.vcsAddAct) menu.addSeparator() def showMenu(self): """ Public slot called before the vcs menu is shown. """ if self.vcsAddAct: self.vcsAddAct.setEnabled(self.project.isOpen()) def _vcsCheckout(self, export = False): """ Protected slot used to create a local project from the repository. @param export flag indicating whether an export or a checkout should be performed """ if not self.project.checkDirty(): return vcsSystemsDict = e4App().getObject("PluginManager")\ .getPluginDisplayStrings("version_control") if not vcsSystemsDict: # no version control system found return vcsSystemsDisplay = QStringList() keys = vcsSystemsDict.keys() keys.sort() for key in keys: vcsSystemsDisplay.append(vcsSystemsDict[key]) vcsSelected, ok = KQInputDialog.getItem(\ None, self.trUtf8("New Project"), self.trUtf8("Select version control system for the project"), vcsSystemsDisplay, 0, False) if not ok: return for vcsSystem, vcsSystemDisplay in vcsSystemsDict.items(): if vcsSystemDisplay == vcsSelected: break if not self.project.closeProject(): return self.project.pdata["VCS"] = [vcsSystem] self.project.vcs = self.project.initVCS(vcsSystem) if self.project.vcs is not None: vcsdlg = self.project.vcs.vcsNewProjectOptionsDialog() if vcsdlg.exec_() == QDialog.Accepted: projectdir, vcsDataDict = vcsdlg.getData() self.project.pdata["VCS"] = [vcsSystem] self.project.vcs = self.project.initVCS(vcsSystem) # edit VCS command options vcores = KQMessageBox.question(None, self.trUtf8("New Project"), self.trUtf8("""Would you like to edit the VCS command options?"""), QMessageBox.StandardButtons(\ QMessageBox.No | \ QMessageBox.Yes), QMessageBox.No) if vcores == QMessageBox.Yes: codlg = vcsCommandOptionsDialog(self.project.vcs) if codlg.exec_() == QDialog.Accepted: self.project.vcs.vcsSetOptions(codlg.getOptions()) # create the project directory if it doesn't exist already if not os.path.isdir(projectdir): try: os.makedirs(projectdir) except EnvironmentError: KQMessageBox.critical(None, self.trUtf8("Create project directory"), self.trUtf8("

    The project directory %1 could not" " be created.

    ").arg(projectdir)) self.project.pdata["VCS"] = ['None'] self.project.vcs = self.project.initVCS() return # create the project from the VCS self.project.vcs.vcsSetDataFromDict(vcsDataDict) if export: ok = self.project.vcs.vcsExport(vcsDataDict, projectdir) else: ok = self.project.vcs.vcsCheckout(vcsDataDict, projectdir, False) if ok: projectdir = os.path.normpath(projectdir) filters = QStringList() << "*.e4p" << "*.e4pz" << "*.e3p" << "*.e3pz" d = QDir(projectdir) plist = d.entryInfoList(filters) if len(plist): if len(plist) == 1: self.project.openProject(plist[0].absoluteFilePath()) self.project.emit(SIGNAL('newProject')) else: pfilenamelist = d.entryList(filters) pfilename, ok = KQInputDialog.getItem( None, self.trUtf8("New project from repository"), self.trUtf8("Select a project file to open."), pfilenamelist, 0, False) if ok: self.project.openProject(\ QFileInfo(d, pfilename).absoluteFilePath()) self.project.emit(SIGNAL('newProject')) if export: self.project.pdata["VCS"] = ['None'] self.project.vcs = self.project.initVCS() self.project.setDirty(True) self.project.saveProject() else: res = KQMessageBox.question(None, self.trUtf8("New project from repository"), self.trUtf8("The project retrieved from the repository" " does not contain an eric project file" " (*.e4p *.e4pz *.e3p *.e3pz)." " Create it?"), QMessageBox.StandardButtons(\ QMessageBox.No | \ QMessageBox.Yes), QMessageBox.Yes) if res == QMessageBox.Yes: self.project.ppath = projectdir self.project.opened = True from Project.PropertiesDialog import PropertiesDialog dlg = PropertiesDialog(self.project, False) if dlg.exec_() == QDialog.Accepted: dlg.storeData() self.project.initFileTypes() self.project.setDirty(True) try: ms = os.path.join(self.project.ppath, self.project.pdata["MAINSCRIPT"][0]) if os.path.exists(ms): self.project.appendFile(ms) except IndexError: ms = "" self.project.newProjectAddFiles(ms) self.project.saveProject() self.project.openProject(self.project.pfile) if not export: res = KQMessageBox.question(None, self.trUtf8("New project from repository"), self.trUtf8("Shall the project file be added to" " the repository?"), QMessageBox.StandardButtons(\ QMessageBox.No | \ QMessageBox.Yes), QMessageBox.Yes) if res == QMessageBox.Yes: self.project.vcs.vcsAdd(self.project.pfile) else: KQMessageBox.critical(None, self.trUtf8("New project from repository"), self.trUtf8("""The project could not be retrieved from""" """ the repository.""")) self.project.pdata["VCS"] = ['None'] self.project.vcs = self.project.initVCS() else: self.project.pdata["VCS"] = ['None'] self.project.vcs = self.project.initVCS() def _vcsExport(self): """ Protected slot used to export a project from the repository. """ self._vcsCheckout(True) def _vcsImport(self): """ Protected slot used to import the local project into the repository. NOTE: This does not necessarily make the local project a vcs controlled project. You may have to checkout the project from the repository in order to accomplish that. """ def revertChanges(): """ Local function do revert the changes made to the project object. """ self.project.pdata["VCS"] = pdata_vcs[:] self.project.pdata["VCSOPTIONS"] = copy.deepcopy(pdata_vcsoptions) self.project.pdata["VCSOTHERDATA"] = copy.deepcopy(pdata_vcsother) self.project.vcs = vcs self.project.vcsProjectHelper = vcsHelper self.project.vcsBasicHelper = vcs is None self.initMenu(self.project.vcsMenu) self.project.setDirty(True) self.project.saveProject() pdata_vcs = self.project.pdata["VCS"][:] pdata_vcsoptions = copy.deepcopy(self.project.pdata["VCSOPTIONS"]) pdata_vcsother = copy.deepcopy(self.project.pdata["VCSOTHERDATA"]) vcs = self.project.vcs vcsHelper = self.project.vcsProjectHelper vcsSystemsDict = e4App().getObject("PluginManager")\ .getPluginDisplayStrings("version_control") if not vcsSystemsDict: # no version control system found return vcsSystemsDisplay = QStringList() keys = vcsSystemsDict.keys() keys.sort() for key in keys: vcsSystemsDisplay.append(vcsSystemsDict[key]) vcsSelected, ok = KQInputDialog.getItem(\ None, self.trUtf8("Import Project"), self.trUtf8("Select version control system for the project"), vcsSystemsDisplay, 0, False) if not ok: return vcsSystem = None for vcsSystem, vcsSystemDisplay in vcsSystemsDict.items(): if vcsSystemDisplay == vcsSelected: break if vcsSystem: self.project.pdata["VCS"] = [vcsSystem] self.project.vcs = self.project.initVCS(vcsSystem) if self.project.vcs is not None: vcsdlg = self.project.vcs.vcsOptionsDialog(self.project, self.project.name, 1) if vcsdlg.exec_() == QDialog.Accepted: vcsDataDict = vcsdlg.getData() # edit VCS command options vcores = KQMessageBox.question(None, self.trUtf8("Import Project"), self.trUtf8("""Would you like to edit the VCS command options?"""), QMessageBox.StandardButtons(\ QMessageBox.No | \ QMessageBox.Yes), QMessageBox.No) if vcores == QMessageBox.Yes: codlg = vcsCommandOptionsDialog(self.project.vcs) if codlg.exec_() == QDialog.Accepted: self.project.vcs.vcsSetOptions(codlg.getOptions()) self.project.setDirty(True) self.project.vcs.vcsSetDataFromDict(vcsDataDict) self.project.saveProject() isVcsControlled = \ self.project.vcs.vcsImport(vcsDataDict, self.project.ppath)[0] if isVcsControlled: # reopen the project self.project.openProject(self.project.pfile) else: # revert the changes to the local project # because the project dir is not a VCS directory revertChanges() else: # revert the changes because user cancelled revertChanges() def _vcsUpdate(self): """ Protected slot used to update the local project from the repository. """ shouldReopen = self.vcs.vcsUpdate(self.project.ppath) if shouldReopen: res = KQMessageBox.information(None, self.trUtf8("Update"), self.trUtf8("""The project should be reread. Do this now?"""), QMessageBox.StandardButtons(\ QMessageBox.No | \ QMessageBox.Yes), QMessageBox.Yes) if res == QMessageBox.Yes: self.project.reopenProject() def _vcsCommit(self): """ Protected slot used to commit changes to the local project to the repository. """ if Preferences.getVCS("AutoSaveProject"): self.project.saveProject() if Preferences.getVCS("AutoSaveFiles"): self.project.saveAllScripts() self.vcs.vcsCommit(self.project.ppath, '') def _vcsRemove(self): """ Protected slot used to remove the local project from the repository. Depending on the parameters set in the vcs object the project may be removed from the local disk as well. """ res = KQMessageBox.warning(None, self.trUtf8("Remove project from repository"), self.trUtf8("Dou you really want to remove this project from" " the repository (and disk)?"), QMessageBox.StandardButtons(\ QMessageBox.No | \ QMessageBox.Yes), QMessageBox.No) if res == QMessageBox.Yes: self.vcs.vcsRemove(self.project.ppath, True) self._vcsCommit() if not os.path.exists(self.project.pfile): ppath = self.project.ppath self.setDirty(False) self.project.closeProject() shutil.rmtree(ppath, True) def _vcsCommandOptions(self): """ Protected slot to edit the VCS command options. """ codlg = vcsCommandOptionsDialog(self.vcs) if codlg.exec_() == QDialog.Accepted: self.vcs.vcsSetOptions(codlg.getOptions()) self.project.setDirty(True) def _vcsLog(self): """ Protected slot used to show the log of the local project. """ self.vcs.vcsLog(self.project.ppath) def _vcsDiff(self): """ Protected slot used to show the difference of the local project to the repository. """ self.vcs.vcsDiff(self.project.ppath) def _vcsStatus(self): """ Protected slot used to show the status of the local project. """ self.vcs.vcsStatus(self.project.ppath) def _vcsTag(self): """ Protected slot used to tag the local project in the repository. """ self.vcs.vcsTag(self.project.ppath) def _vcsRevert(self): """ Protected slot used to revert changes made to the local project. """ self.vcs.vcsRevert(self.project.ppath) def _vcsSwitch(self): """ Protected slot used to switch the local project to another tag/branch. """ self.vcs.vcsSwitch(self.project.ppath) def _vcsMerge(self): """ Protected slot used to merge changes of a tag/revision into the local project. """ self.vcs.vcsMerge(self.project.ppath) def _vcsCleanup(self): """ Protected slot used to cleanup the local project. """ self.vcs.vcsCleanup(self.project.ppath) def _vcsCommand(self): """ Protected slot used to execute an arbitrary vcs command. """ self.vcs.vcsCommandLine(self.project.ppath) def _vcsInfoDisplay(self): """ Protected slot called to show some vcs information. """ info = self.vcs.vcsRepositoryInfos(self.project.ppath) dlg = VcsRepositoryInfoDialog(None, info) dlg.exec_() eric4-4.5.18/eric/VCS/PaxHeaders.8617/__init__.py0000644000175000001440000000013112261012651017250 xustar000000000000000030 mtime=1388582313.434095265 29 atime=1389081084.41672437 30 ctime=1389081086.309724333 eric4-4.5.18/eric/VCS/__init__.py0000644000175000001440000000400312261012651017000 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2002 - 2014 Detlev Offenbach # """ Module implementing the general part of the interface to version control systems. The general part of the VCS interface defines classes to implement common dialogs. These are a dialog to enter command options, a dialog to display some repository information and an abstract base class. The individual interfaces (i.e. CVS) have to be subclasses of this base class. """ from KdeQt.KQApplication import e4App import Preferences ###################################################################### ## Below is the factory function to instantiate the appropriate ## vcs object depending on the project settings. ###################################################################### def factory(vcs): """ Modul factory function to generate the right vcs object. @param vcs name of the VCS system to be used (string) @return the instantiated VCS object """ pluginManager = e4App().getObject("PluginManager") if pluginManager is None: # that should not happen vc = None vc = pluginManager.getPluginObject("version_control", vcs, maybeActive = True) if vc is None: # try alternative vcs interfaces assuming, that there is a common # indicator for the alternatives found = False for indicator, vcsData in pluginManager.getVcsSystemIndicators().items(): for vcsSystem, vcsSystemDisplay in vcsData: if vcsSystem == vcs: found = True break if found: if len(vcsData) > 1: for vcsSystem, vcsSystemDisplay in vcsData: if vcsSystem != vcs: vc = pluginManager.getPluginObject( "version_control", vcsSystem, maybeActive = True) if vc is not None: break break return vc eric4-4.5.18/eric/VCS/PaxHeaders.8617/VersionControl.py0000644000175000001440000000013012261012651020476 xustar000000000000000029 mtime=1388582313.43609529 29 atime=1389081084.41672437 30 ctime=1389081086.309724333 eric4-4.5.18/eric/VCS/VersionControl.py0000644000175000001440000006531512261012651020244 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2002 - 2014 Detlev Offenbach # """ Module implementing an abstract base class to be subclassed by all specific VCS interfaces. """ import os from PyQt4.QtCore import QObject, QThread, QMutex, QProcess, \ QString, QStringList, SIGNAL, Qt from PyQt4.QtGui import QApplication from KdeQt import KQMessageBox import Preferences class VersionControl(QObject): """ Class implementing an abstract base class to be subclassed by all specific VCS interfaces. It defines the vcs interface to be implemented by subclasses and the common methods. @signal vcsStatusMonitorData(QStringList) emitted to update the VCS status @signal vcsStatusMonitorStatus(QString, QString) emitted to signal the status of the monitoring thread (ok, nok, op, off) and a status message """ canBeCommitted = 1 # Indicates that a file/directory is in the vcs. canBeAdded = 2 # Indicates that a file/directory is not in vcs. def __init__(self, parent=None, name=None): """ Constructor @param parent parent widget (QWidget) @param name name of this object (string or QString) """ QObject.__init__(self, parent) if name: self.setObjectName(name) self.defaultOptions = { 'global' : [''], 'commit' : [''], 'checkout' : [''], 'update' : [''], 'add' : [''], 'remove' : [''], 'diff' : [''], 'log' : [''], 'history' : [''], 'status' : [''], 'tag' : [''], 'export' : [''] } self.interestingDataKeys = [] self.options = {} self.otherData = {} self.canDetectBinaries = True self.autoCommit = False self.statusMonitorThread = None self.vcsExecutionMutex = QMutex() def vcsShutdown(self): """ Public method used to shutdown the vcs interface. """ raise RuntimeError('Not implemented') def vcsExists(self): """ Public method used to test for the presence of the vcs. It must return a bool to indicate the existance and a QString giving an error message in case of failure. @exception RuntimeError not implemented """ raise RuntimeError('Not implemented') def vcsInit(self, vcsDir, noDialog = False): """ Public method used to initialize the vcs. It must return a boolean to indicate an execution without errors. @param vcsDir name of the VCS directory (string) @param noDialog flag indicating quiet operations (boolean) @exception RuntimeError not implemented """ raise RuntimeError('Not implemented') def vcsConvertProject(self, vcsDataDict, project): """ Public method to convert an uncontrolled project to a version controlled project. @param vcsDataDict dictionary of data required for the conversion @param project reference to the project object @exception RuntimeError not implemented """ raise RuntimeError('Not implemented') def vcsImport(self, vcsDataDict, projectDir, noDialog = False): """ Public method used to import the project into the vcs. @param vcsDataDict dictionary of data required for the import @param projectDir project directory (string) @param noDialog flag indicating quiet operations @return flag indicating an execution without errors (boolean) and a flag indicating the version controll status (boolean) @exception RuntimeError not implemented """ raise RuntimeError('Not implemented') def vcsCheckout(self, vcsDataDict, projectDir, noDialog = False): """ Public method used to check the project out of the vcs. @param vcsDataDict dictionary of data required for the checkout @param projectDir project directory to create (string) @param noDialog flag indicating quiet operations @return flag indicating an execution without errors (boolean) @exception RuntimeError not implemented """ raise RuntimeError('Not implemented') def vcsExport(self, vcsDataDict, projectDir): """ Public method used to export a directory from the vcs. It must return a boolean to indicate an execution without errors. @param vcsDataDict dictionary of data required for the export @param projectDir project directory to create (string) @return flag indicating an execution without errors (boolean) @exception RuntimeError not implemented """ raise RuntimeError('Not implemented') def vcsCommit(self, name, message, noDialog = False): """ Public method used to make the change of a file/directory permanent in the vcs. It must return a boolean to indicate an execution without errors. @param name file/directory name to be committed (string) @param message message for this operation (string) @param noDialog flag indicating quiet operations @exception RuntimeError not implemented """ raise RuntimeError('Not implemented') def vcsUpdate(self, name, noDialog = False): """ Public method used to update a file/directory in the vcs. It must not return anything. @param name file/directory name to be updated (string) @param noDialog flag indicating quiet operations (boolean) @return flag indicating, that the update contained an add or delete (boolean) @exception RuntimeError not implemented """ raise RuntimeError('Not implemented') def vcsAdd(self, name, isDir = False, noDialog = False): """ Public method used to add a file/directory in the vcs. It must not return anything. @param name file/directory name to be added (string) @param isDir flag indicating name is a directory (boolean) @param noDialog flag indicating quiet operations (boolean) @exception RuntimeError not implemented """ raise RuntimeError('Not implemented') def vcsAddBinary(self, name, isDir = False): """ Public method used to add a file/directory in binary mode in the vcs. It must not return anything. @param name file/directory name to be added (string) @param isDir flag indicating name is a directory (boolean) @exception RuntimeError not implemented """ raise RuntimeError('Not implemented') def vcsAddTree(self, path): """ Public method to add a directory tree rooted at path in the vcs. It must not return anything. @param path root directory of the tree to be added (string) @exception RuntimeError not implemented """ raise RuntimeError('Not implemented') def vcsRemove(self, name, project = False, noDialog = False): """ Public method used to add a file/directory in the vcs. It must return a flag indicating successfull operation @param name file/directory name to be removed (string) @param project flag indicating deletion of a project tree (boolean) @param noDialog flag indicating quiet operations @exception RuntimeError not implemented """ raise RuntimeError('Not implemented') def vcsMove(self, name, project, target = None, noDialog = False): """ Public method used to move a file/directory. @param name file/directory name to be moved (string) @param project reference to the project object @param target new name of the file/directory (string) @param noDialog flag indicating quiet operations @return flag indicating successfull operation (boolean) @exception RuntimeError not implemented """ raise RuntimeError('Not implemented') def vcsLog(self, name): """ Public method used to view the log of a file/directory in the vcs. It must not return anything. @param name file/directory name to show the log for (string) @exception RuntimeError not implemented """ raise RuntimeError('Not implemented') def vcsDiff(self, name): """ Public method used to view the diff of a file/directory in the vcs. It must not return anything. @param name file/directory name to be diffed (string) @exception RuntimeError not implemented """ raise RuntimeError('Not implemented') def vcsHistory(self, name): """ Public method used to view the history of a file/directory in the vcs. It must not return anything. @param name file/directory name to show the history for (string) @exception RuntimeError not implemented """ raise RuntimeError('Not implemented') def vcsStatus(self, name): """ Public method used to view the status of a file/directory in the vcs. It must not return anything. @param name file/directory name to show the status for (string) @exception RuntimeError not implemented """ raise RuntimeError('Not implemented') def vcsTag(self, name): """ Public method used to set the tag of a file/directory in the vcs. It must not return anything. @param name file/directory name to be tagged (string) @exception RuntimeError not implemented """ raise RuntimeError('Not implemented') def vcsRevert(self, name): """ Public method used to revert changes made to a file/directory. It must not return anything. @param name file/directory name to be reverted (string) @exception RuntimeError not implemented """ raise RuntimeError('Not implemented') def vcsSwitch(self, name): """ Public method used to switch a directory to a different tag/branch. It must not return anything. @param name directory name to be switched (string) @exception RuntimeError not implemented """ raise RuntimeError('Not implemented') def vcsMerge(self, name): """ Public method used to merge a tag/branch into the local project. It must not return anything. @param name file/directory name to be merged (string) @exception RuntimeError not implemented """ raise RuntimeError('Not implemented') def vcsRegisteredState(self, name): """ Public method used to get the registered state of a file in the vcs. @param name filename to check (string) @return a combination of canBeCommited and canBeAdded or 0 in order to signal an error @exception RuntimeError not implemented """ raise RuntimeError('Not implemented') def vcsAllRegisteredStates(self, names, dname): """ Public method used to get the registered states of a number of files in the vcs. @param names dictionary with all filenames to be checked as keys @param dname directory to check in (string) @return the received dictionary completed with a combination of canBeCommited and canBeAdded or None in order to signal an error @exception RuntimeError not implemented """ raise RuntimeError('Not implemented') def vcsName(self): """ Public method returning the name of the vcs. @return name of the vcs (string) @exception RuntimeError not implemented """ raise RuntimeError('Not implemented') def vcsCleanup(self, name): """ Public method used to cleanup the local copy. @param name directory name to be cleaned up (string) @exception RuntimeError not implemented """ raise RuntimeError('Not implemented') def vcsCommandLine(self, name): """ Public method used to execute arbitrary vcs commands. @param name directory name of the working directory (string) @exception RuntimeError not implemented """ raise RuntimeError('Not implemented') def vcsOptionsDialog(self, project, archive, editable = False, parent = None): """ Public method to get a dialog to enter repository info. @param project reference to the project object @param archive name of the project in the repository (string) @param editable flag indicating that the project name is editable (boolean) @param parent parent widget (QWidget) """ raise RuntimeError('Not implemented') def vcsNewProjectOptionsDialog(self, parent = None): """ Public method to get a dialog to enter repository info for getting a new project. @param parent parent widget (QWidget) """ raise RuntimeError('Not implemented') def vcsRepositoryInfos(self, ppath): """ Public method to retrieve information about the repository. @param ppath local path to get the repository infos (string) @return string with ready formated info for display (QString) """ raise RuntimeError('Not implemented') def vcsGetProjectBrowserHelper(self, browser, project, isTranslationsBrowser = False): """ Public method to instanciate a helper object for the different project browsers. @param browser reference to the project browser object @param project reference to the project object @param isTranslationsBrowser flag indicating, the helper is requested for the translations browser (this needs some special treatment) @return the project browser helper object """ raise RuntimeError('Not implemented') def vcsGetProjectHelper(self, project): """ Public method to instanciate a helper object for the project. @param project reference to the project object @return the project helper object """ raise RuntimeError('Not implemented') ##################################################################### ## methods above need to be implemented by a subclass ##################################################################### def clearStatusCache(self): """ Public method to clear the status cache. """ pass def vcsInitConfig(self, project): """ Public method to initialize the VCS configuration. This method could ensure, that certain files or directories are exclude from being version controlled. @param project reference to the project (Project) """ pass def vcsDefaultOptions(self): """ Public method used to retrieve the default options for the vcs. @return a dictionary with the vcs operations as key and the respective options as values. The key 'global' must contain the global options. The other keys must be 'commit', 'update', 'add', 'remove', 'diff', 'log', 'history', 'tag', 'status' and 'export'. """ return self.defaultOptions def vcsSetOptions(self, options): """ Public method used to set the options for the vcs. @param options a dictionary of option strings with keys as defined by the default options """ for key in options.keys(): try: self.options[key] = options[key] except KeyError: pass def vcsGetOptions(self): """ Public method used to retrieve the options of the vcs. @return a dictionary of option strings that can be passed to vcsSetOptions. """ return self.options def vcsSetOtherData(self, data): """ Public method used to set vcs specific data. @param data a dictionary of vcs specific data """ for key in data.keys(): try: self.otherData[key] = data[key] except KeyError: pass def vcsGetOtherData(self): """ Public method used to retrieve vcs specific data. @return a dictionary of vcs specific data """ return self.otherData def vcsSetData(self, key, value): """ Public method used to set an entry in the otherData dictionary. @param key the key of the data (string) @param value the value of the data """ if key in self.interestingDataKeys: self.otherData[key] = value def vcsSetDataFromDict(self, dict): """ Public method used to set entries in the otherData dictionary. @param dict dictionary to pick entries from """ for key in self.interestingDataKeys: if dict.has_key(key): self.otherData[key] = dict[key] ##################################################################### ## below are some utility methods ##################################################################### def startSynchronizedProcess(self, proc, program, arguments, workingDir = None): """ Public method to start a synchroneous process This method starts a process and waits for its end while still serving the Qt event loop. @param proc process to start (QProcess) @param program path of the executable to start (string or QString) @param arguments list of arguments for the process (QStringList) @param workingDir working directory for the process (string or QString) @return flag indicating normal exit (boolean) """ if proc is None: return if workingDir: proc.setWorkingDirectory(workingDir) proc.start(program, arguments) procStarted = proc.waitForStarted() if not procStarted: KQMessageBox.critical(None, self.trUtf8('Process Generation Error'), self.trUtf8( 'The process %1 could not be started. ' 'Ensure, that it is in the search path.' ).arg(program)) return False else: while proc.state() == QProcess.Running: QApplication.processEvents() QThread.msleep(300) QApplication.processEvents() return (proc.exitStatus() == QProcess.NormalExit) and (proc.exitCode() == 0) def splitPath(self, name): """ Public method splitting name into a directory part and a file part. @param name path name (string) @return a tuple of 2 strings (dirname, filename). """ fi = unicode(name) if os.path.isdir(fi): dn = os.path.abspath(fi) fn = "." else: dn, fn = os.path.split(fi) return (dn, fn) def splitPathList(self, names): """ Public method splitting the list of names into a common directory part and a file list. @param names list of paths (list of strings) @return a tuple of string and list of strings (dirname, filenamelist) """ li = [unicode(n) for n in names] dname = os.path.commonprefix(li) if dname: if not dname.endswith(os.sep): dname = os.path.dirname(dname) + os.sep fnames = [n.replace(dname, '') for n in li] dname = os.path.dirname(dname) return (dname, fnames) else: return ("/", li) def addArguments(self, args, argslist): """ Protected method to add an argument list to the already present arguments. @param args current arguments list (QStringList) @param argslist list of arguments (list of strings or list of QStrings or a QStringList) """ for arg in argslist: if unicode(arg) != '': args.append(arg) ############################################################################ ## VCS status monitor thread related methods ############################################################################ def __statusMonitorStatus(self, status, statusMsg): """ Private method to receive the status monitor status. It simply reemits the received status. @param status status of the monitoring thread (QString, ok, nok or off) @param statusMsg explanotory text for the signaled status (QString) """ self.emit(SIGNAL("vcsStatusMonitorStatus(QString, QString)"), status, statusMsg) QApplication.flush() def __statusMonitorData(self, statusList): """ Private method to receive the status monitor status. It simply reemits the received status list. @param statusList list of status records (QStringList) """ self.emit(SIGNAL("vcsStatusMonitorData(QStringList)"), statusList) QApplication.flush() def startStatusMonitor(self, project): """ Public method to start the VCS status monitor thread. @param project reference to the project object @return reference to the monitor thread (QThread) """ if project.pudata["VCSSTATUSMONITORINTERVAL"]: vcsStatusMonitorInterval = project.pudata["VCSSTATUSMONITORINTERVAL"][0] else: vcsStatusMonitorInterval = Preferences.getVCS("StatusMonitorInterval") if vcsStatusMonitorInterval > 0: self.statusMonitorThread = \ self._createStatusMonitorThread(vcsStatusMonitorInterval, project) if self.statusMonitorThread is not None: self.connect(self.statusMonitorThread, SIGNAL("vcsStatusMonitorData(QStringList)"), self.__statusMonitorData, Qt.QueuedConnection) self.connect(self.statusMonitorThread, SIGNAL("vcsStatusMonitorStatus(QString, QString)"), self.__statusMonitorStatus, Qt.QueuedConnection) self.statusMonitorThread.setAutoUpdate( Preferences.getVCS("AutoUpdate")) self.statusMonitorThread.start() else: self.statusMonitorThread = None return self.statusMonitorThread def stopStatusMonitor(self): """ Public method to stop the VCS status monitor thread. """ if self.statusMonitorThread is not None: self.__statusMonitorData(QStringList("--RESET--")) self.disconnect(self.statusMonitorThread, SIGNAL("vcsStatusMonitorData(QStringList)"), self.__statusMonitorData) self.disconnect(self.statusMonitorThread, SIGNAL("vcsStatusMonitorStatus(QString, QString)"), self.__statusMonitorStatus) self.statusMonitorThread.stop() self.statusMonitorThread.wait(10000) if not self.statusMonitorThread.isFinished(): self.statusMonitorThread.terminate() self.statusMonitorThread.wait(10000) self.statusMonitorThread = None self.__statusMonitorStatus(QString("off"), self.trUtf8("Repository status checking is switched off")) def setStatusMonitorInterval(self, interval, project): """ Public method to change the monitor interval. @param interval new interval in seconds (integer) @param project reference to the project object """ if self.statusMonitorThread is not None: if interval == 0: self.stopStatusMonitor() else: self.statusMonitorThread.setInterval(interval) else: self.startStatusMonitor(project) def getStatusMonitorInterval(self): """ Public method to get the monitor interval. @return interval in seconds (integer) """ if self.statusMonitorThread is not None: return self.statusMonitorThread.getInterval() else: return 0 def setStatusMonitorAutoUpdate(self, auto): """ Public method to enable the auto update function. @param auto status of the auto update function (boolean) """ if self.statusMonitorThread is not None: self.statusMonitorThread.setAutoUpdate(auto) def getStatusMonitorAutoUpdate(self): """ Public method to retrieve the status of the auto update function. @return status of the auto update function (boolean) """ if self.statusMonitorThread is not None: return self.statusMonitorThread.getAutoUpdate() else: return False def checkVCSStatus(self): """ Public method to wake up the VCS status monitor thread. """ if self.statusMonitorThread is not None: self.statusMonitorThread.checkStatus() def clearStatusMonitorCachedState(self, name): """ Public method to clear the cached VCS state of a file/directory. @param name name of the entry to be cleared (QString or string) """ if self.statusMonitorThread is not None: self.statusMonitorThread.clearCachedState(name) def _createStatusMonitorThread(self, interval, project): """ Protected method to create an instance of the VCS status monitor thread. Note: This method should be overwritten in subclasses in order to support VCS status monitoring. @param interval check interval for the monitor thread in seconds (integer) @param project reference to the project object @return reference to the monitor thread (QThread) """ return None eric4-4.5.18/eric/VCS/PaxHeaders.8617/CommandOptionsDialog.py0000644000175000001440000000013212261012651021564 xustar000000000000000030 mtime=1388582313.441095353 30 atime=1389081084.424724375 30 ctime=1389081086.309724333 eric4-4.5.18/eric/VCS/CommandOptionsDialog.py0000644000175000001440000000620012261012651021314 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2002 - 2014 Detlev Offenbach # """ Module implementing the VCS command options dialog. """ import sys from PyQt4.QtCore import * from PyQt4.QtGui import * from Ui_CommandOptionsDialog import Ui_vcsCommandOptionsDialog import Utilities class vcsCommandOptionsDialog(QDialog, Ui_vcsCommandOptionsDialog): """ Class implementing the VCS command options dialog. """ def __init__(self, vcs, parent=None): """ Constructor @param vcs reference to the vcs object @param parent parent widget (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) if Utilities.isWindowsPlatform(): self.optionChars = ['-', '/'] else: self.optionChars = ['-'] opt = vcs.vcsGetOptions() self.globalEdit.setText(" ".join(opt['global'])) self.commitEdit.setText(" ".join(opt['commit'])) self.checkoutEdit.setText(" ".join(opt['checkout'])) self.updateEdit.setText(" ".join(opt['update'])) self.addEdit.setText(" ".join(opt['add'])) self.removeEdit.setText(" ".join(opt['remove'])) self.diffEdit.setText(" ".join(opt['diff'])) self.logEdit.setText(" ".join(opt['log'])) self.historyEdit.setText(" ".join(opt['history'])) self.statusEdit.setText(" ".join(opt['status'])) self.tagEdit.setText(" ".join(opt['tag'])) self.exportEdit.setText(" ".join(opt['export'])) # modify the what's this help for widget in [self.globalEdit, self.commitEdit, self.checkoutEdit, self.updateEdit, self.addEdit, self.removeEdit, self.diffEdit, self.logEdit, self.historyEdit, self.statusEdit, self.tagEdit, self.exportEdit]: t = widget.whatsThis() if not t.isEmpty(): t = t.append(Utilities.getPercentReplacementHelp()) widget.setWhatsThis(t) def getOptions(self): """ Public method used to retrieve the entered options. @return dictionary of strings giving the options for each supported vcs command """ opt = {} opt['global'] = Utilities.parseOptionString(self.globalEdit.text()) opt['commit'] = Utilities.parseOptionString(self.commitEdit.text()) opt['checkout'] = Utilities.parseOptionString(self.checkoutEdit.text()) opt['update'] = Utilities.parseOptionString(self.updateEdit.text()) opt['add'] = Utilities.parseOptionString(self.addEdit.text()) opt['remove'] = Utilities.parseOptionString(self.removeEdit.text()) opt['diff'] = Utilities.parseOptionString(self.diffEdit.text()) opt['log'] = Utilities.parseOptionString(self.logEdit.text()) opt['history'] = Utilities.parseOptionString(self.historyEdit.text()) opt['status'] = Utilities.parseOptionString(self.statusEdit.text()) opt['tag'] = Utilities.parseOptionString(self.tagEdit.text()) opt['export'] = Utilities.parseOptionString(self.exportEdit.text()) return opt eric4-4.5.18/eric/VCS/PaxHeaders.8617/StatusMonitorThread.py0000644000175000001440000000013212261012651021475 xustar000000000000000030 mtime=1388582313.443095379 30 atime=1389081084.424724375 30 ctime=1389081086.309724333 eric4-4.5.18/eric/VCS/StatusMonitorThread.py0000644000175000001440000001523112261012651021231 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing the VCS status monitor thread base class. """ import os from PyQt4.QtCore import QThread, QMutex, QMutexLocker, QWaitCondition, \ QString, QStringList, SIGNAL from KdeQt.KQApplication import e4App class VcsStatusMonitorThread(QThread): """ Class implementing the VCS status monitor thread base class. @signal vcsStatusMonitorData(QStringList) emitted to update the VCS status @signal vcsStatusMonitorStatus(QString, QString) emitted to signal the status of the monitoring thread (ok, nok, op) and a status message """ def __init__(self, interval, projectDir, vcs, parent = None): """ Constructor @param interval new interval in seconds (integer) @param projectDir project directory to monitor (string or QString) @param vcs reference to the version control object @param parent reference to the parent object (QObject) """ QThread.__init__(self, parent) self.setObjectName("VcsStatusMonitorThread") self.setTerminationEnabled(True) self.projectDir = QString(projectDir) self.vcs = vcs self.interval = interval self.autoUpdate = False self.statusList = QStringList() self.reportedStates = {} self.shouldUpdate = False self.monitorMutex = QMutex() self.monitorCondition = QWaitCondition() self.__stopIt = False def run(self): """ Protected method implementing the tasks action. """ while not self.__stopIt: # perform the checking task self.statusList.clear() self.emit(SIGNAL("vcsStatusMonitorStatus(QString, QString)"), QString("wait"), self.trUtf8("Waiting for lock")) try: locked = self.vcs.vcsExecutionMutex.tryLock(5000) except TypeError: locked = self.vcs.vcsExecutionMutex.tryLock() if locked: try: self.emit(SIGNAL("vcsStatusMonitorStatus(QString, QString)"), QString("op"), self.trUtf8("Checking repository status")) res, statusMsg = self._performMonitor() finally: self.vcs.vcsExecutionMutex.unlock() if res: status = QString("ok") else: status = QString("nok") self.emit(SIGNAL("vcsStatusMonitorStatus(QString, QString)"), QString("send"), self.trUtf8("Sending data")) self.emit(SIGNAL("vcsStatusMonitorData(QStringList)"), QStringList(self.statusList)) self.emit(SIGNAL("vcsStatusMonitorStatus(QString, QString)"), status, statusMsg) else: self.emit(SIGNAL("vcsStatusMonitorStatus(QString, QString)"), QString("timeout"), self.trUtf8("Timed out waiting for lock")) if self.autoUpdate and self.shouldUpdate: try: self.vcs.vcsUpdate(self.projectDir, True) continue # check again except TypeError: pass # compatibility for older VCS plugins self.shouldUpdate = False # wait until interval has expired checking for a stop condition self.monitorMutex.lock() if not self.__stopIt: self.monitorCondition.wait(self.monitorMutex, self.interval * 1000) self.monitorMutex.unlock() self.exit() def setInterval(self, interval): """ Public method to change the monitor interval. @param interval new interval in seconds (integer) """ locked = self.monitorMutex.tryLock() self.interval = interval self.monitorCondition.wakeAll() if locked: self.monitorMutex.unlock() def getInterval(self): """ Public method to get the monitor interval. @return interval in seconds (integer) """ return self.interval def setAutoUpdate(self, auto): """ Public method to enable the auto update function. @param auto status of the auto update function (boolean) """ self.autoUpdate = auto def getAutoUpdate(self): """ Public method to retrieve the status of the auto update function. @return status of the auto update function (boolean) """ return self.autoUpdate def checkStatus(self): """ Public method to wake up the status monitor thread. """ locked = self.monitorMutex.tryLock() self.monitorCondition.wakeAll() if locked: self.monitorMutex.unlock() def stop(self): """ Public method to stop the monitor thread. """ locked = self.monitorMutex.tryLock() self.__stopIt = True self.monitorCondition.wakeAll() if locked: self.monitorMutex.unlock() def clearCachedState(self, name): """ Public method to clear the cached VCS state of a file/directory. @param name name of the entry to be cleared (QString or string) """ project = e4App().getObject("Project") key = project.getRelativePath(unicode(name)) try: del self.reportedStates[key] except KeyError: pass def _performMonitor(self): """ Protected method implementing the real monitoring action. This method must be overridden and populate the statusList member variable with a list of strings giving the status in the first column and the path relative to the project directory starting with the third column. The allowed status flags are:
    • "A" path was added but not yet comitted
    • "M" path has local changes
    • "O" path was removed
    • "R" path was deleted and then re-added
    • "U" path needs an update
    • "Z" path contains a conflict
    • " " path is back at normal
    @return tuple of flag indicating successful operation (boolean) and a status message in case of non successful operation (QString) """ raise RuntimeError('Not implemented') eric4-4.5.18/eric/PaxHeaders.8617/eric4_webbrowser.pyw0000644000175000001440000000013212261012653020517 xustar000000000000000030 mtime=1388582315.001115089 30 atime=1389081084.424724375 30 ctime=1389081086.309724333 eric4-4.5.18/eric/eric4_webbrowser.pyw0000644000175000001440000000021612261012653020250 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2010 - 2014 Detlev Offenbach # from eric4_webbrowser import main main() eric4-4.5.18/eric/PaxHeaders.8617/PluginManager0000644000175000001440000000013212262730776017201 xustar000000000000000030 mtime=1389081086.301724332 30 atime=1389081086.305724332 30 ctime=1389081086.315724332 eric4-4.5.18/eric/PluginManager/0000755000175000001440000000000012262730776017010 5ustar00detlevusers00000000000000eric4-4.5.18/eric/PluginManager/PaxHeaders.8617/PluginRepositoryDialog.py0000644000175000001440000000013212261012651024266 xustar000000000000000030 mtime=1388582313.448095442 30 atime=1389081084.424724375 30 ctime=1389081086.309724333 eric4-4.5.18/eric/PluginManager/PluginRepositoryDialog.py0000644000175000001440000006164612261012651024035 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing a dialog showing the available plugins. """ import sys import os import zipfile import cStringIO from PyQt4.QtGui import * from PyQt4.QtCore import * from PyQt4.QtNetwork import QNetworkAccessManager, QNetworkRequest, QNetworkReply try: from PyQt4.QtNetwork import QSslError SSL_AVAILABLE = True except ImportError: SSL_AVAILABLE = False from KdeQt import KQMessageBox from KdeQt.KQMainWindow import KQMainWindow from Ui_PluginRepositoryDialog import Ui_PluginRepositoryDialog from UI.AuthenticationDialog import AuthenticationDialog from E4XML.XMLUtilities import make_parser from E4XML.XMLErrorHandler import XMLErrorHandler, XMLFatalParseError from E4XML.XMLEntityResolver import XMLEntityResolver from E4XML.PluginRepositoryHandler import PluginRepositoryHandler import Utilities import Preferences import UI.PixmapCache from eric4config import getConfig descrRole = Qt.UserRole urlRole = Qt.UserRole + 1 filenameRole = Qt.UserRole + 2 authorRole = Qt.UserRole + 3 class PluginRepositoryWidget(QWidget, Ui_PluginRepositoryDialog): """ Class implementing a dialog showing the available plugins. @signal closeAndInstall emitted when the Close & Install button is pressed """ def __init__(self, parent = None): """ Constructor @param parent parent of this dialog (QWidget) """ QWidget.__init__(self, parent) self.setupUi(self) self.__updateButton = \ self.buttonBox.addButton(self.trUtf8("Update"), QDialogButtonBox.ActionRole) self.__downloadButton = \ self.buttonBox.addButton(self.trUtf8("Download"), QDialogButtonBox.ActionRole) self.__downloadButton.setEnabled(False) self.__downloadCancelButton = \ self.buttonBox.addButton(self.trUtf8("Cancel"), QDialogButtonBox.ActionRole) self.__installButton = \ self.buttonBox.addButton(self.trUtf8("Close && Install"), QDialogButtonBox.ActionRole) self.__downloadCancelButton.setEnabled(False) self.__installButton.setEnabled(False) self.repositoryUrlEdit.setText(Preferences.getUI("PluginRepositoryUrl")) self.repositoryList.headerItem().setText(self.repositoryList.columnCount(), "") self.repositoryList.header().setSortIndicator(0, Qt.AscendingOrder) self.pluginRepositoryFile = \ os.path.join(Utilities.getConfigDir(), "PluginRepository") # attributes for the network objects self.__networkManager = QNetworkAccessManager(self) self.connect(self.__networkManager, SIGNAL('proxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*)'), self.__proxyAuthenticationRequired) if SSL_AVAILABLE: self.connect(self.__networkManager, SIGNAL('sslErrors(QNetworkReply *, const QList &)'), self.__sslErrors) self.__replies = [] self.__doneMethod = None self.__inDownload = False self.__pluginsToDownload = [] self.__pluginsDownloaded = QStringList() self.__populateList() @pyqtSignature("QAbstractButton*") def on_buttonBox_clicked(self, button): """ Private slot to handle the click of a button of the button box. """ if button == self.__updateButton: self.__updateList() elif button == self.__downloadButton: self.__downloadPlugins() elif button == self.__downloadCancelButton: self.__downloadCancel() elif button == self.__installButton: self.emit(SIGNAL("closeAndInstall")) def __formatDescription(self, lines): """ Private method to format the description. @param lines lines of the description (QStringList) @return formatted description (QString) """ # remove empty line at start and end newlines = lines[:] if len(newlines) and newlines[0] == '': del newlines[0] if len(newlines) and newlines[-1] == '': del newlines[-1] # replace empty lines by newline character index = 0 while index < len(newlines): if newlines[index] == '': newlines[index] = '\n' index += 1 # join lines by a blank return newlines.join(' ') @pyqtSignature("QTreeWidgetItem*, QTreeWidgetItem*") def on_repositoryList_currentItemChanged(self, current, previous): """ Private slot to handle the change of the current item. @param current reference to the new current item (QTreeWidgetItem) @param previous reference to the old current item (QTreeWidgetItem) """ if self.__repositoryMissing or current is None: return self.urlEdit.setText(current.data(0, urlRole).toString()) self.descriptionEdit.setPlainText(\ self.__formatDescription(current.data(0, descrRole).toStringList())) self.authorEdit.setText(current.data(0, authorRole).toString()) def __selectedItems(self): """ Private method to get all selected items without the toplevel ones. @return list of selected items (QList) """ ql = self.repositoryList.selectedItems() for index in range(self.repositoryList.topLevelItemCount()): ti = self.repositoryList.topLevelItem(index) if ti in ql: ql.remove(ti) return ql @pyqtSignature("") def on_repositoryList_itemSelectionChanged(self): """ Private slot to handle a change of the selection. """ self.__downloadButton.setEnabled(len(self.__selectedItems())) def __updateList(self): """ Private slot to download a new list and display the contents. """ url = self.repositoryUrlEdit.text() self.__downloadFile(url, self.pluginRepositoryFile, self.__downloadRepositoryFileDone) def __downloadRepositoryFileDone(self, status, filename): """ Private method called after the repository file was downloaded. @param status flaging indicating a successful download (boolean) @param filename full path of the downloaded file (QString) """ self.__populateList() def __downloadPluginDone(self, status, filename): """ Private method called, when the download of a plugin is finished. @param status flaging indicating a successful download (boolean) @param filename full path of the downloaded file (QString) """ if status: self.__pluginsDownloaded.append(filename) del self.__pluginsToDownload[0] if len(self.__pluginsToDownload): self.__downloadPlugin() else: self.__downloadPluginsDone() def __downloadPlugin(self): """ Private method to download the next plugin. """ self.__downloadFile(self.__pluginsToDownload[0][0], self.__pluginsToDownload[0][1], self.__downloadPluginDone) def __downloadPlugins(self): """ Private slot to download the selected plugins. """ self.__pluginsDownloaded.clear() self.__pluginsToDownload = [] self.__downloadButton.setEnabled(False) self.__installButton.setEnabled(False) for itm in self.repositoryList.selectedItems(): if itm not in [self.__stableItem, self.__unstableItem, self.__unknownItem]: url = itm.data(0, urlRole).toString() filename = os.path.join(\ unicode(Preferences.getPluginManager("DownloadPath")), unicode(itm.data(0, filenameRole).toString())) self.__pluginsToDownload.append((url, filename)) self.__downloadPlugin() def __downloadPluginsDone(self): """ Private method called, when the download of the plugins is finished. """ self.__downloadButton.setEnabled(len(self.__selectedItems())) self.__installButton.setEnabled(True) self.__doneMethod = None KQMessageBox.information(None, self.trUtf8("Download Plugin Files"), self.trUtf8("""The requested plugins were downloaded.""")) self.downloadProgress.setValue(0) # repopulate the list to update the refresh icons self.__populateList() def __resortRepositoryList(self): """ Private method to resort the tree. """ self.repositoryList.sortItems(self.repositoryList.sortColumn(), self.repositoryList.header().sortIndicatorOrder()) def __populateList(self): """ Private method to populate the list of available plugins. """ self.repositoryList.clear() self.__stableItem = None self.__unstableItem = None self.__unknownItem = None self.downloadProgress.setValue(0) self.__doneMethod = None if os.path.exists(self.pluginRepositoryFile): self.__repositoryMissing = False try: f = open(self.pluginRepositoryFile, "rb") line = f.readline() dtdLine = f.readline() f.close() except IOError: KQMessageBox.critical(None, self.trUtf8("Read plugins repository file"), self.trUtf8("

    The plugins repository file %1 " "could not be read. Select Update

    ")\ .arg(self.pluginRepositoryFile)) return # now read the file if line.startswith('The plugins repository file %1 " "could not be read. Select Update

    ")\ .arg(self.pluginRepositoryFile)) return except XMLFatalParseError: pass eh.showParseMessages() self.repositoryList.resizeColumnToContents(0) self.repositoryList.resizeColumnToContents(1) self.repositoryList.resizeColumnToContents(2) self.__resortRepositoryList() url = Preferences.getUI("PluginRepositoryUrl") if url != self.repositoryUrlEdit.text(): self.repositoryUrlEdit.setText(url) KQMessageBox.warning(self, self.trUtf8("Plugins Repository URL Changed"), self.trUtf8("""The URL of the Plugins Repository has""" """ changed. Select the "Update" button to get""" """ the new repository file.""")) else: KQMessageBox.critical(None, self.trUtf8("Read plugins repository file"), self.trUtf8("

    The plugins repository file %1 " "has an unsupported format.

    ")\ .arg(self.pluginRepositoryFile)) else: self.__repositoryMissing = True QTreeWidgetItem(self.repositoryList, \ QStringList() \ << "" \ << self.trUtf8("No plugin repository file available." "\nSelect Update.")) self.repositoryList.resizeColumnToContents(1) def __downloadFile(self, url, filename, doneMethod = None): """ Private slot to download the given file. @param url URL for the download (string or QString) @param filename local name of the file (string or QString) @param doneMethod method to be called when done """ self.__updateButton.setEnabled(False) self.__downloadButton.setEnabled(False) self.__downloadCancelButton.setEnabled(True) self.statusLabel.setText(url) self.__doneMethod = doneMethod self.__downloadURL = url self.__downloadFileName = QString(filename) self.__downloadIODevice = QFile(self.__downloadFileName + ".tmp") self.__downloadCancelled = False request = QNetworkRequest(QUrl(url)) request.setAttribute(QNetworkRequest.CacheLoadControlAttribute, QNetworkRequest.AlwaysNetwork) reply = self.__networkManager.get(request) self.connect(reply, SIGNAL("finished()"), self.__downloadFileDone) self.connect(reply, SIGNAL("downloadProgress(qint64, qint64)"), self.__downloadProgress) self.__replies.append(reply) def __downloadFileDone(self): """ Private method called, after the file has been downloaded from the internet. """ self.__updateButton.setEnabled(True) self.__downloadCancelButton.setEnabled(False) self.statusLabel.setText(" ") ok = True reply = self.sender() if reply in self.__replies: self.__replies.remove(reply) if reply.error() != QNetworkReply.NoError: ok = False if not self.__downloadCancelled: KQMessageBox.warning(None, self.trUtf8("Error downloading file"), self.trUtf8( """

    Could not download the requested file from %1.

    """ """

    Error: %2

    """ ).arg(self.__downloadURL).arg(reply.errorString()) ) self.downloadProgress.setValue(0) self.__downloadURL = None self.__downloadIODevice.remove() self.__downloadIODevice = None if self.repositoryList.topLevelItemCount(): if self.repositoryList.currentItem() is None: self.repositoryList.setCurrentItem(\ self.repositoryList.topLevelItem(0)) else: self.__downloadButton.setEnabled(len(self.__selectedItems())) return self.__downloadIODevice.open(QIODevice.WriteOnly) self.__downloadIODevice.write(reply.readAll()) self.__downloadIODevice.close() if QFile.exists(self.__downloadFileName): QFile.remove(self.__downloadFileName) self.__downloadIODevice.rename(self.__downloadFileName) self.__downloadIODevice = None self.__downloadURL = None if self.__doneMethod is not None: self.__doneMethod(ok, self.__downloadFileName) def __downloadCancel(self): """ Private slot to cancel the current download. """ if self.__replies: reply = self.__replies[0] self.__downloadCancelled = True self.__pluginsToDownload = [] reply.abort() def __downloadProgress(self, done, total): """ Private slot to show the download progress. @param done number of bytes downloaded so far (integer) @param total total bytes to be downloaded (integer) """ if total: self.downloadProgress.setMaximum(total) self.downloadProgress.setValue(done) def addEntry(self, name, short, description, url, author, version, filename, status): """ Public method to add an entry to the list. @param name data for the name field (string or QString) @param short data for the short field (string or QString) @param description data for the description field (list of string or QStringList) @param url data for the url field (string or QString) @param author data for the author field (string or QString) @param version data for the version field (string or QString) @param filename data for the filename field (string or QString) @param status status of the plugin (string [stable, unstable, unknown]) """ if status == "stable": if self.__stableItem is None: self.__stableItem = \ QTreeWidgetItem(self.repositoryList, QStringList(self.trUtf8("Stable"))) self.__stableItem.setExpanded(True) parent = self.__stableItem elif status == "unstable": if self.__unstableItem is None: self.__unstableItem = \ QTreeWidgetItem(self.repositoryList, QStringList(self.trUtf8("Unstable"))) self.__unstableItem.setExpanded(True) parent = self.__unstableItem else: if self.__unknownItem is None: self.__unknownItem = \ QTreeWidgetItem(self.repositoryList, QStringList(self.trUtf8("Unknown"))) self.__unknownItem.setExpanded(True) parent = self.__unknownItem itm = QTreeWidgetItem(parent, QStringList() << name << version << short) itm.setData(0, urlRole, QVariant(url)) itm.setData(0, filenameRole, QVariant(filename)) itm.setData(0, authorRole, QVariant(author)) if type(description) == type([]): descr = QStringList() for line in description: descr.append(line) else: descr = description itm.setData(0, descrRole, QVariant(descr)) if self.__isUpToDate(filename, version): itm.setIcon(1, UI.PixmapCache.getIcon("empty.png")) else: itm.setIcon(1, UI.PixmapCache.getIcon("download.png")) def __isUpToDate(self, filename, version): """ Private method to check, if the given archive is up-to-date. @param filename data for the filename field (string or QString) @param version data for the version field (string or QString) @return flag indicating up-to-date (boolean) """ archive = os.path.join(unicode(Preferences.getPluginManager("DownloadPath")), filename) # check, if the archive exists if not os.path.exists(archive): return False # check, if the archive is a valid zip file if not zipfile.is_zipfile(archive): return False zip = zipfile.ZipFile(archive, "r") try: aversion = zip.read("VERSION") except KeyError: aversion = "" zip.close() return aversion == version def __proxyAuthenticationRequired(self, proxy, auth): """ Private slot to handle a proxy authentication request. @param proxy reference to the proxy object (QNetworkProxy) @param auth reference to the authenticator object (QAuthenticator) """ info = self.trUtf8("Connect to proxy '%1' using:")\ .arg(Qt.escape(proxy.hostName())) dlg = AuthenticationDialog(info, proxy.user(), True) dlg.setData(proxy.user(), proxy.password()) if dlg.exec_() == QDialog.Accepted: username, password = dlg.getData() auth.setUser(username) auth.setPassword(password) if dlg.shallSave(): Preferences.setUI("ProxyUser", username) Preferences.setUI("ProxyPassword", password) def __sslErrors(self, reply, errors): """ Private slot to handle SSL errors. @param reply reference to the reply object (QNetworkReply) @param errors list of SSL errors (list of QSslError) """ errorStrings = QStringList() for err in errors: errorStrings.append(err.errorString()) errorString = errorStrings.join('.
    ') ret = KQMessageBox.warning(self, self.trUtf8("SSL Errors"), self.trUtf8("""

    SSL Errors:

    """ """

    %1

    """ """

    Do you want to ignore these errors?

    """)\ .arg(errorString), QMessageBox.StandardButtons(\ QMessageBox.No | \ QMessageBox.Yes), QMessageBox.No) if ret == QMessageBox.Yes: reply.ignoreSslErrors() else: self.__downloadCancelled = True reply.abort() def getDownloadedPlugins(self): """ Public method to get the list of recently downloaded plugin files. @return list of plugin filenames (QStringList) """ return self.__pluginsDownloaded @pyqtSignature("bool") def on_repositoryUrlEditButton_toggled(self, checked): """ Private slot to set the read only status of the repository URL line edit. @param checked state of the push button (boolean) """ self.repositoryUrlEdit.setReadOnly(not checked) class PluginRepositoryDialog(QDialog): """ Class for the dialog variant. """ def __init__(self, parent = None): """ Constructor @param parent reference to the parent widget (QWidget) """ QDialog.__init__(self, parent) self.setSizeGripEnabled(True) self.__layout = QVBoxLayout(self) self.__layout.setMargin(0) self.setLayout(self.__layout) self.cw = PluginRepositoryWidget(self) size = self.cw.size() self.__layout.addWidget(self.cw) self.resize(size) self.connect(self.cw.buttonBox, SIGNAL("accepted()"), self.accept) self.connect(self.cw.buttonBox, SIGNAL("rejected()"), self.reject) self.connect(self.cw, SIGNAL("closeAndInstall"), self.__closeAndInstall) def __closeAndInstall(self): """ Private slot to handle the closeAndInstall signal. """ self.done(QDialog.Accepted + 1) def getDownloadedPlugins(self): """ Public method to get the list of recently downloaded plugin files. @return list of plugin filenames (QStringList) """ return self.cw.getDownloadedPlugins() class PluginRepositoryWindow(KQMainWindow): """ Main window class for the standalone dialog. """ def __init__(self, parent = None): """ Constructor @param parent reference to the parent widget (QWidget) """ KQMainWindow.__init__(self, parent) self.cw = PluginRepositoryWidget(self) size = self.cw.size() self.setCentralWidget(self.cw) self.resize(size) self.connect(self.cw.buttonBox, SIGNAL("accepted()"), self.close) self.connect(self.cw.buttonBox, SIGNAL("rejected()"), self.close) self.connect(self.cw, SIGNAL("closeAndInstall"), self.__startPluginInstall) def __startPluginInstall(self): """ Private slot to start the eric4 plugin installation dialog. """ proc = QProcess() applPath = os.path.join(getConfig("ericDir"), "eric4_plugininstall.py") args = QStringList() args.append(applPath) args += self.cw.getDownloadedPlugins() if not os.path.isfile(applPath) or not proc.startDetached(sys.executable, args): KQMessageBox.critical(self, self.trUtf8('Process Generation Error'), self.trUtf8( '

    Could not start the process.
    ' 'Ensure that it is available as %1.

    ' ).arg(applPath), self.trUtf8('OK')) self.close() eric4-4.5.18/eric/PluginManager/PaxHeaders.8617/PluginUninstallDialog.py0000644000175000001440000000013212261012651024060 xustar000000000000000030 mtime=1388582313.450095467 30 atime=1389081084.424724375 30 ctime=1389081086.309724333 eric4-4.5.18/eric/PluginManager/PluginUninstallDialog.py0000644000175000001440000001667312261012651023627 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing a dialog for plugin deinstallation. """ import sys import os import imp import shutil from PyQt4.QtGui import * from PyQt4.QtCore import * from KdeQt import KQMessageBox from KdeQt.KQMainWindow import KQMainWindow from PluginManager import PluginManager from Ui_PluginUninstallDialog import Ui_PluginUninstallDialog class PluginUninstallWidget(QWidget, Ui_PluginUninstallDialog): """ Class implementing a dialog for plugin deinstallation. """ def __init__(self, pluginManager, parent = None): """ Constructor @param pluginManager reference to the plugin manager object @param parent parent of this dialog (QWidget) """ QWidget.__init__(self, parent) self.setupUi(self) if pluginManager is None: # started as external plugin deinstaller self.__pluginManager = PluginManager(doLoadPlugins = False) self.__external = True else: self.__pluginManager = pluginManager self.__external = False self.pluginDirectoryCombo.addItem(self.trUtf8("User plugins directory"), QVariant(self.__pluginManager.getPluginDir("user"))) globalDir = self.__pluginManager.getPluginDir("global") if globalDir is not None and os.access(globalDir, os.W_OK): self.pluginDirectoryCombo.addItem(self.trUtf8("Global plugins directory"), QVariant(globalDir)) @pyqtSignature("int") def on_pluginDirectoryCombo_currentIndexChanged(self, index): """ Private slot to populate the plugin name combo upon a change of the plugin area. @param index index of the selected item (integer) """ pluginDirectory = unicode(self.pluginDirectoryCombo\ .itemData(index).toString()) pluginNames = self.__pluginManager.getPluginModules(pluginDirectory) pluginNames.sort() self.pluginNameCombo.clear() for pluginName in pluginNames: fname = "%s.py" % os.path.join(pluginDirectory, pluginName) self.pluginNameCombo.addItem(pluginName, QVariant(fname)) self.buttonBox.button(QDialogButtonBox.Ok)\ .setEnabled(not self.pluginNameCombo.currentText().isEmpty()) @pyqtSignature("") def on_buttonBox_accepted(self): """ Private slot to handle the accepted signal of the button box. """ if self.__uninstallPlugin(): self.emit(SIGNAL("accepted()")) def __uninstallPlugin(self): """ Private slot to uninstall the selected plugin. @return flag indicating success (boolean) """ pluginDirectory = unicode(self.pluginDirectoryCombo\ .itemData(self.pluginDirectoryCombo.currentIndex())\ .toString()) pluginName = unicode(self.pluginNameCombo.currentText()) pluginFile = unicode(self.pluginNameCombo\ .itemData(self.pluginNameCombo.currentIndex())\ .toString()) if not self.__pluginManager.unloadPlugin(pluginName, pluginDirectory): KQMessageBox.critical(None, self.trUtf8("Plugin Uninstallation"), self.trUtf8("""

    The plugin %1 could not be unloaded.""" """ Aborting...

    """).arg(pluginName), QMessageBox.StandardButtons(\ QMessageBox.Ok)) return False if not pluginDirectory in sys.path: sys.path.insert(2, pluginDirectory) module = imp.load_source(pluginName, pluginFile) if not hasattr(module, "packageName"): KQMessageBox.critical(None, self.trUtf8("Plugin Uninstallation"), self.trUtf8("""

    The plugin %1 has no 'packageName' attribute.""" """ Aborting...

    """).arg(pluginName), QMessageBox.StandardButtons(\ QMessageBox.Ok)) return False package = getattr(module, "packageName") if package is None: package = "None" packageDir = "" else: packageDir = os.path.join(pluginDirectory, package) if hasattr(module, "prepareUninstall"): module.prepareUninstall() internalPackages = [] if hasattr(module, "internalPackages"): # it is a comma separated string internalPackages = [p.strip() for p in module.internalPackages.split(",")] del module # clean sys.modules self.__pluginManager.removePluginFromSysModules( pluginName, package, internalPackages) try: if packageDir and os.path.exists(packageDir): shutil.rmtree(packageDir) fnameo = "%so" % pluginFile if os.path.exists(fnameo): os.remove(fnameo) fnamec = "%sc" % pluginFile if os.path.exists(fnamec): os.remove(fnamec) os.remove(pluginFile) except OSError, err: KQMessageBox.critical(None, self.trUtf8("Plugin Uninstallation"), self.trUtf8("""

    The plugin package %1 could not be""" """ removed. Aborting...

    """ """

    Reason: %2

    """).arg(packageDir).arg(str(err)), QMessageBox.StandardButtons(\ QMessageBox.Ok)) return False KQMessageBox.information(None, self.trUtf8("Plugin Uninstallation"), self.trUtf8("""

    The plugin %1 was uninstalled successfully""" """ from %2.

    """)\ .arg(pluginName).arg(pluginDirectory), QMessageBox.StandardButtons(\ QMessageBox.Ok)) return True class PluginUninstallDialog(QDialog): """ Class for the dialog variant. """ def __init__(self, pluginManager, parent = None): """ Constructor @param pluginManager reference to the plugin manager object @param parent reference to the parent widget (QWidget) """ QDialog.__init__(self, parent) self.setSizeGripEnabled(True) self.__layout = QVBoxLayout(self) self.__layout.setMargin(0) self.setLayout(self.__layout) self.cw = PluginUninstallWidget(pluginManager, self) size = self.cw.size() self.__layout.addWidget(self.cw) self.resize(size) self.connect(self.cw, SIGNAL("accepted()"), self.accept) self.connect(self.cw.buttonBox, SIGNAL("rejected()"), self.reject) class PluginUninstallWindow(KQMainWindow): """ Main window class for the standalone dialog. """ def __init__(self, parent = None): """ Constructor @param parent reference to the parent widget (QWidget) """ KQMainWindow.__init__(self, parent) self.cw = PluginUninstallWidget(None, self) size = self.cw.size() self.setCentralWidget(self.cw) self.resize(size) self.connect(self.cw, SIGNAL("accepted()"), self.close) self.connect(self.cw.buttonBox, SIGNAL("rejected()"), self.close) eric4-4.5.18/eric/PluginManager/PaxHeaders.8617/PluginDetailsDialog.py0000644000175000001440000000013212261012651023474 xustar000000000000000030 mtime=1388582313.453095505 30 atime=1389081084.424724375 30 ctime=1389081086.309724333 eric4-4.5.18/eric/PluginManager/PluginDetailsDialog.py0000644000175000001440000000340412261012651023227 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing the Plugin Details Dialog. """ from PyQt4.QtGui import QDialog from PyQt4.QtCore import pyqtSignature from Ui_PluginDetailsDialog import Ui_PluginDetailsDialog class PluginDetailsDialog(QDialog, Ui_PluginDetailsDialog): """ Class implementing the Plugin Details Dialog. """ def __init__(self, details, parent = None): """ Constructor @param details dictionary containing the info to be displayed @param parent parent of this dialog (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.__autoactivate = details["autoactivate"] self.__active = details["active"] self.moduleNameEdit.setText(details["moduleName"]) self.moduleFileNameEdit.setText(details["moduleFileName"]) self.pluginNameEdit.setText(details["pluginName"]) self.versionEdit.setText(details["version"]) self.authorEdit.setText(details["author"]) self.descriptionEdit.setText(details["description"]) self.errorEdit.setText(details["error"]) self.autoactivateCheckBox.setChecked(details["autoactivate"]) self.activeCheckBox.setChecked(details["active"]) @pyqtSignature("") def on_activeCheckBox_clicked(self): """ Private slot called, when the activeCheckBox was clicked. """ self.activeCheckBox.setChecked(self.__active) @pyqtSignature("") def on_autoactivateCheckBox_clicked(self): """ Private slot called, when the autoactivateCheckBox was clicked. """ self.autoactivateCheckBox.setChecked(self.__autoactivate) eric4-4.5.18/eric/PluginManager/PaxHeaders.8617/PluginInfoDialog.ui0000644000175000001440000000007411072435333023001 xustar000000000000000030 atime=1389081084.424724375 30 ctime=1389081086.309724333 eric4-4.5.18/eric/PluginManager/PluginInfoDialog.ui0000644000175000001440000000610311072435333022526 0ustar00detlevusers00000000000000 PluginInfoDialog 0 0 800 600 Loaded Plugins true Double-Click an entry to show detailed info. Plugins with an error are shown in red. true <b>Plugin List</b><p>This lists all loaded plugins. Double-clicking an entry shows more detailed information in a separate dialog.</p> false false true true Module Name Version Autoactivate Active Description Qt::Horizontal QDialogButtonBox::Close pluginList buttonBox buttonBox accepted() PluginInfoDialog accept() 308 454 157 274 buttonBox rejected() PluginInfoDialog reject() 376 460 286 274 eric4-4.5.18/eric/PluginManager/PaxHeaders.8617/PluginInfoDialog.py0000644000175000001440000000013212261012651023002 xustar000000000000000030 mtime=1388582313.455095531 30 atime=1389081084.433724375 30 ctime=1389081086.309724333 eric4-4.5.18/eric/PluginManager/PluginInfoDialog.py0000644000175000001440000001221312261012651022533 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing the Plugin Info Dialog. """ from PyQt4.QtCore import QStringList, Qt, SIGNAL from PyQt4.QtGui import QDialog, QTreeWidgetItem, QHeaderView, QMenu, QBrush from PyQt4.QtCore import pyqtSignature from PluginDetailsDialog import PluginDetailsDialog from Ui_PluginInfoDialog import Ui_PluginInfoDialog class PluginInfoDialog(QDialog, Ui_PluginInfoDialog): """ Class implementing the Plugin Info Dialog. """ def __init__(self, pluginManager, parent = None): """ Constructor @param pluginManager reference to the plugin manager object @param parent parent of this dialog (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.pm = pluginManager self.__autoActivateColumn = 3 self.__activeColumn = 4 self.pluginList.headerItem().setText(self.pluginList.columnCount(), "") # populate the list self.__populateList() self.pluginList.sortByColumn(0, Qt.AscendingOrder) self.__menu = QMenu(self) self.__menu.addAction(self.trUtf8('Show details'), self.__showDetails) self.__activateAct = \ self.__menu.addAction(self.trUtf8('Activate'), self.__activatePlugin) self.__deactivateAct = \ self.__menu.addAction(self.trUtf8('Deactivate'), self.__deactivatePlugin) self.pluginList.setContextMenuPolicy(Qt.CustomContextMenu) self.connect(self.pluginList, SIGNAL('customContextMenuRequested(const QPoint &)'), self.__showContextMenu) def __populateList(self): """ Private method to (re)populate the list of plugins. """ self.pluginList.clear() for info in self.pm.getPluginInfos(): self.__createEntry(info) self.pluginList.sortItems(self.pluginList.sortColumn(), self.pluginList.header().sortIndicatorOrder()) def __createEntry(self, info): """ Private method to create a list entry based on the provided info. @param info tuple giving the info for the entry """ infoList = QStringList() \ << info[0] \ << info[1] \ << info[2] \ << (info[3] and self.trUtf8("Yes") or self.trUtf8("No")) \ << (info[4] and self.trUtf8("Yes") or self.trUtf8("No")) \ << info[5] itm = QTreeWidgetItem(self.pluginList, infoList) if info[6]: # plugin error for col in range(self.pluginList.columnCount()): itm.setForeground(col, QBrush(Qt.red)) itm.setTextAlignment(self.__autoActivateColumn, Qt.AlignHCenter) itm.setTextAlignment(self.__activeColumn, Qt.AlignHCenter) self.pluginList.header().resizeSections(QHeaderView.ResizeToContents) self.pluginList.header().setStretchLastSection(True) def __showContextMenu(self, coord): """ Private slot to show the context menu of the listview. @param coord the position of the mouse pointer (QPoint) """ itm = self.pluginList.itemAt(coord) if itm is not None: autoactivate = itm.text(self.__autoActivateColumn) == self.trUtf8("Yes") if itm.text(self.__activeColumn) == self.trUtf8("Yes"): self.__activateAct.setEnabled(False) self.__deactivateAct.setEnabled(autoactivate) else: self.__activateAct.setEnabled(autoactivate) self.__deactivateAct.setEnabled(False) self.__menu.popup(self.mapToGlobal(coord)) @pyqtSignature("QTreeWidgetItem*, int") def on_pluginList_itemActivated(self, item, column): """ Private slot to show details about a plugin. @param item reference to the selected item (QTreeWidgetItem) @param column column number (integer) """ moduleName = unicode(item.text(0)) details = self.pm.getPluginDetails(moduleName) if details is None: pass else: dlg = PluginDetailsDialog(details, self) dlg.show() def __showDetails(self): """ Private slot to handle the "Show details" context menu action. """ itm = self.pluginList.currentItem() self.on_pluginList_itemActivated(itm, 0) def __activatePlugin(self): """ Private slot to handle the "Deactivate" context menu action. """ itm = self.pluginList.currentItem() moduleName = unicode(itm.text(0)) self.pm.activatePlugin(moduleName) # repopulate the list self.__populateList() def __deactivatePlugin(self): """ Private slot to handle the "Activate" context menu action. """ itm = self.pluginList.currentItem() moduleName = unicode(itm.text(0)) self.pm.deactivatePlugin(moduleName) # repopulate the list self.__populateList() eric4-4.5.18/eric/PluginManager/PaxHeaders.8617/PluginUninstallDialog.ui0000644000175000001440000000007411072435333024057 xustar000000000000000030 atime=1389081084.441724374 30 ctime=1389081086.309724333 eric4-4.5.18/eric/PluginManager/PluginUninstallDialog.ui0000644000175000001440000000352711072435333023613 0ustar00detlevusers00000000000000 PluginUninstallDialog 0 0 400 300 Plugin Uninstallation Plugin directory: Select the plugin area containing the plugin to uninstall Plugin: Select the plugin to uninstall Qt::Vertical 20 40 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok pluginDirectoryCombo pluginNameCombo buttonBox eric4-4.5.18/eric/PluginManager/PaxHeaders.8617/PluginRepositoryDialog.ui0000644000175000001440000000007411737574706024305 xustar000000000000000030 atime=1389081084.441724374 30 ctime=1389081086.309724333 eric4-4.5.18/eric/PluginManager/PluginRepositoryDialog.ui0000644000175000001440000001352711737574706024042 0ustar00detlevusers00000000000000 PluginRepositoryDialog 0 0 800 675 Plugin Repository true 0 7 QAbstractItemView::ExtendedSelection false false true true Name Version Short Description Description: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop 0 3 Qt::NoFocus Displays the description of the selected plugin true Author: Qt::NoFocus Displays the author of the selected plugin true URL: Qt::NoFocus Displays the download URL of the selected plugin true Qt::Horizontal Shows the progress of the current download 0 Repository URL: Shows the repository URL true Press to edit the plugin repository URL Edit URL true Qt::Horizontal QDialogButtonBox::Close repositoryList buttonBox repositoryUrlEdit repositoryUrlEditButton eric4-4.5.18/eric/PluginManager/PaxHeaders.8617/PluginManager.py0000644000175000001440000000013212261012651022341 xustar000000000000000030 mtime=1388582313.460095594 30 atime=1389081084.441724374 30 ctime=1389081086.309724333 eric4-4.5.18/eric/PluginManager/PluginManager.py0000644000175000001440000011632012261012651022076 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing the Plugin Manager. """ import os import sys import imp from PyQt4.QtCore import * from PyQt4.QtGui import QPixmap from KdeQt import KQMessageBox from PluginExceptions import * import UI.PixmapCache import Utilities import Preferences from eric4config import getConfig class PluginManager(QObject): """ Class implementing the Plugin Manager. @signal shutdown() emitted at shutdown of the IDE @signal pluginAboutToBeActivated(modulName, pluginObject) emitted just before a plugin is activated @signal pluginActivated(modulName, pluginObject) emitted just after a plugin was activated @signal allPlugginsActivated() emitted at startup after all plugins have been activated @signal pluginAboutToBeDeactivated(modulName, pluginObject) emitted just before a plugin is deactivated @signal pluginDeactivated(modulName, pluginObject) emitted just after a plugin was deactivated """ def __init__(self, parent = None, doLoadPlugins = True, develPlugin = None): """ Constructor The Plugin Manager deals with three different plugin directories. The first is the one, that is part of eric4 (eric4/Plugins). The second one is the global plugin directory called 'eric4plugins', which is located inside the site-packages directory. The last one is the user plugin directory located inside the .eric4 directory of the users home directory. @param parent reference to the parent object (QObject) @keyparam doLoadPlugins flag indicating, that plugins should be loaded (boolean) @keyparam develPlugin filename of a plugin to be loaded for development (string) """ QObject.__init__(self, parent) self.__ui = parent self.__develPluginFile = develPlugin self.__develPluginName = None self.__inactivePluginsKey = "PluginManager/InactivePlugins" self.pluginDirs = { "eric4" : os.path.join(getConfig('ericDir'), "Plugins"), "global" : os.path.join(Utilities.getPythonModulesDirectory(), "eric4plugins"), "user" : os.path.join(Utilities.getConfigDir(), "eric4plugins"), } self.__priorityOrder = ["eric4", "global", "user"] self.__defaultDownloadDir = os.path.join(Utilities.getConfigDir(), "Downloads") self.__activePlugins = {} self.__inactivePlugins = {} self.__onDemandActivePlugins = {} self.__onDemandInactivePlugins = {} self.__activeModules = {} self.__inactiveModules = {} self.__onDemandActiveModules = {} self.__onDemandInactiveModules = {} self.__failedModules = {} self.__foundCoreModules = [] self.__foundGlobalModules = [] self.__foundUserModules = [] self.__modulesCount = 0 pdirsExist, msg = self.__pluginDirectoriesExist() if not pdirsExist: raise PluginPathError(msg) if doLoadPlugins: if not self.__pluginModulesExist(): raise PluginModulesError self.__insertPluginsPaths() self.__loadPlugins() self.__checkPluginsDownloadDirectory() def finalizeSetup(self): """ Public method to finalize the setup of the plugin manager. """ for module in self.__onDemandInactiveModules.values() + \ self.__onDemandActiveModules.values(): if hasattr(module, "moduleSetup"): module.moduleSetup() def getPluginDir(self, key): """ Public method to get the path of a plugin directory. @return path of the requested plugin directory (string) """ if key not in ["global", "user"]: return None else: try: return self.pluginDirs[key] except KeyError: return None def __pluginDirectoriesExist(self): """ Private method to check, if the plugin folders exist. If the plugin folders don't exist, they are created (if possible). @return tuple of a flag indicating existence of any of the plugin directories (boolean) and a message (QString) """ if self.__develPluginFile: path = Utilities.splitPath(self.__develPluginFile)[0] fname = os.path.join(path, "__init__.py") if not os.path.exists(fname): try: f = open(fname, "wb") f.close() except IOError: return (False, self.trUtf8("Could not create a package for %1.")\ .arg(self.__develPluginFile)) if Preferences.getPluginManager("ActivateExternal"): fname = os.path.join(self.pluginDirs["user"], "__init__.py") if not os.path.exists(fname): if not os.path.exists(self.pluginDirs["user"]): os.mkdir(self.pluginDirs["user"], 0755) try: f = open(fname, "wb") f.close() except IOError: del self.pluginDirs["user"] if not os.path.exists(self.pluginDirs["global"]) and \ os.access(Utilities.getPythonModulesDirectory(), os.W_OK): # create the global plugins directory os.mkdir(self.pluginDirs["global"], 0755) fname = os.path.join(self.pluginDirs["global"], "__init__.py") f = open(fname, "wb") f.write('# -*- coding: utf-8 -*-' + os.linesep) f.write(os.linesep) f.write('"""' + os.linesep) f.write('Package containing the global plugins.' + os.linesep) f.write('"""' + os.linesep) f.close() if not os.path.exists(self.pluginDirs["global"]): del self.pluginDirs["global"] else: del self.pluginDirs["user"] del self.pluginDirs["global"] if not os.path.exists(self.pluginDirs["eric4"]): return (False, self.trUtf8("The internal plugin directory %1 does not exits.")\ .arg(self.pluginDirs["eric4"])) return (True, "") def __pluginModulesExist(self): """ Private method to check, if there are plugins available. @return flag indicating the availability of plugins (boolean) """ if self.__develPluginFile and not os.path.exists(self.__develPluginFile): return False self.__foundCoreModules = self.getPluginModules(self.pluginDirs["eric4"]) if self.pluginDirs.has_key("global"): self.__foundGlobalModules = \ self.getPluginModules(self.pluginDirs["global"]) if self.pluginDirs.has_key("user"): self.__foundUserModules = \ self.getPluginModules(self.pluginDirs["user"]) return len(self.__foundCoreModules + self.__foundGlobalModules + \ self.__foundUserModules) > 0 def getPluginModules(self, pluginPath): """ Public method to get a list of plugin modules. @param pluginPath name of the path to search (string) @return list of plugin module names (list of string) """ pluginFiles = [f[:-3] for f in os.listdir(pluginPath) \ if self.isValidPluginName(f)] return pluginFiles[:] def isValidPluginName(self, pluginName): """ Public methode to check, if a file name is a valid plugin name. Plugin modules must start with "Plugin" and have the extension ".py". @param pluginName name of the file to be checked (string) @return flag indicating a valid plugin name (boolean) """ return pluginName.startswith("Plugin") and pluginName.endswith(".py") def __insertPluginsPaths(self): """ Private method to insert the valid plugin paths intos the search path. """ for key in self.__priorityOrder: if self.pluginDirs.has_key(key): if not self.pluginDirs[key] in sys.path: sys.path.insert(2, self.pluginDirs[key]) UI.PixmapCache.addSearchPath(self.pluginDirs[key]) if self.__develPluginFile: path = Utilities.splitPath(self.__develPluginFile)[0] if not path in sys.path: sys.path.insert(2, path) UI.PixmapCache.addSearchPath(path) def __loadPlugins(self): """ Private method to load the plugins found. """ develPluginName = "" if self.__develPluginFile: develPluginPath, develPluginName = \ Utilities.splitPath(self.__develPluginFile) if self.isValidPluginName(develPluginName): develPluginName = develPluginName[:-3] for pluginName in self.__foundCoreModules: # global and user plugins have priority if pluginName not in self.__foundGlobalModules and \ pluginName not in self.__foundUserModules and \ pluginName != develPluginName: self.loadPlugin(pluginName, self.pluginDirs["eric4"]) for pluginName in self.__foundGlobalModules: # user plugins have priority if pluginName not in self.__foundUserModules and \ pluginName != develPluginName: self.loadPlugin(pluginName, self.pluginDirs["global"]) for pluginName in self.__foundUserModules: if pluginName != develPluginName: self.loadPlugin(pluginName, self.pluginDirs["user"]) if develPluginName: self.loadPlugin(develPluginName, develPluginPath) self.__develPluginName = develPluginName def loadPlugin(self, name, directory, reload_ = False): """ Public method to load a plugin module. Initially all modules are inactive. Modules that are requested on demand are sorted out and are added to the on demand list. Some basic validity checks are performed as well. Modules failing these checks are added to the failed modules list. @param name name of the module to be loaded (string) @param directory name of the plugin directory (string) @param reload_ flag indicating to reload the module (boolean) """ try: fname = "%s.py" % os.path.join(directory, name) module = imp.load_source(name, fname) if not hasattr(module, "autoactivate"): module.error = \ self.trUtf8("Module is missing the 'autoactivate' attribute.") self.__failedModules[name] = module raise PluginLoadError(name) if getattr(module, "autoactivate"): self.__inactiveModules[name] = module else: if not hasattr(module, "pluginType") or \ not hasattr(module, "pluginTypename"): module.error = \ self.trUtf8("Module is missing the 'pluginType' " "and/or 'pluginTypename' attributes.") self.__failedModules[name] = module raise PluginLoadError(name) else: self.__onDemandInactiveModules[name] = module module.eric4PluginModuleName = name module.eric4PluginModuleFilename = fname self.__modulesCount += 1 if reload_: reload(module) except PluginLoadError: print "Error loading plugin module:", name except StandardError, err: module = imp.new_module(name) module.error = \ self.trUtf8("Module failed to load. Error: %1").arg(str(err)) self.__failedModules[name] = module print "Error loading plugin module:", name print str(err) def unloadPlugin(self, name, directory): """ Public method to unload a plugin module. @param name name of the module to be unloaded (string) @param directory name of the plugin directory (string) @return flag indicating success (boolean) """ fname = "%s.py" % os.path.join(directory, name) if self.__onDemandActiveModules.has_key(name) and \ self.__onDemandActiveModules[name].eric4PluginModuleFilename == fname: # cannot unload an ondemand plugin, that is in use return False if self.__activeModules.has_key(name) and \ self.__activeModules[name].eric4PluginModuleFilename == fname: self.deactivatePlugin(name) if self.__inactiveModules.has_key(name) and \ self.__inactiveModules[name].eric4PluginModuleFilename == fname: try: del self.__inactivePlugins[name] except KeyError: pass del self.__inactiveModules[name] elif self.__onDemandInactiveModules.has_key(name) and \ self.__onDemandInactiveModules[name].eric4PluginModuleFilename == fname: try: del self.__onDemandInactivePlugins[name] except KeyError: pass del self.__onDemandInactiveModules[name] elif self.__failedModules.has_key(name): del self.__failedModules[name] self.__modulesCount -= 1 return True def removePluginFromSysModules(self, pluginName, package, internalPackages): """ Public method to remove a plugin and all related modules from sys.modules. @param pluginName name of the plugin module (string) @param package name of the plugin package (string) @param internalPackages list of intenal packages (list of string) @return flag indicating the plugin module was found in sys.modules (boolean) """ packages = [package] + internalPackages found = False if not package: package = "__None__" for moduleName in sys.modules.keys()[:]: if moduleName == pluginName or moduleName.split(".")[0] in packages: found = True del sys.modules[moduleName] return found def initOnDemandPlugins(self): """ Public method to create plugin objects for all on demand plugins. Note: The plugins are not activated. """ names = sorted(self.__onDemandInactiveModules.keys()) for name in names: self.initOnDemandPlugin(name) def initOnDemandPlugin(self, name): """ Public method to create a plugin object for the named on demand plugin. Note: The plugin is not activated. """ try: try: module = self.__onDemandInactiveModules[name] except KeyError: return None if not self.__canActivatePlugin(module): raise PluginActivationError(module.eric4PluginModuleName) version = getattr(module, "version") className = getattr(module, "className") pluginClass = getattr(module, className) pluginObject = None if not self.__onDemandInactivePlugins.has_key(name): pluginObject = pluginClass(self.__ui) pluginObject.eric4PluginModule = module pluginObject.eric4PluginName = className pluginObject.eric4PluginVersion = version self.__onDemandInactivePlugins[name] = pluginObject except PluginActivationError: return None def activatePlugins(self): """ Public method to activate all plugins having the "autoactivate" attribute set to True. """ ial = Preferences.Prefs.settings.value(self.__inactivePluginsKey) if ial.isValid(): savedInactiveList = ial.toStringList() else: savedInactiveList = None if self.__develPluginName is not None and savedInactiveList is not None: savedInactiveList.removeAll(self.__develPluginName) names = self.__inactiveModules.keys() names.sort() for name in names: if savedInactiveList is None or name not in savedInactiveList: self.activatePlugin(name) self.emit(SIGNAL("allPlugginsActivated()")) def activatePlugin(self, name, onDemand = False): """ Public method to activate a plugin. @param name name of the module to be activated @keyparam onDemand flag indicating activation of an on demand plugin (boolean) @return reference to the initialized plugin object """ try: try: if onDemand: module = self.__onDemandInactiveModules[name] else: module = self.__inactiveModules[name] except KeyError: return None if not self.__canActivatePlugin(module): raise PluginActivationError(module.eric4PluginModuleName) version = getattr(module, "version") className = getattr(module, "className") pluginClass = getattr(module, className) pluginObject = None if onDemand and self.__onDemandInactivePlugins.has_key(name): pluginObject = self.__onDemandInactivePlugins[name] elif not onDemand and self.__inactivePlugins.has_key(name): pluginObject = self.__inactivePlugins[name] else: pluginObject = pluginClass(self.__ui) self.emit(SIGNAL("pluginAboutToBeActivated"), name, pluginObject) try: obj, ok = pluginObject.activate() except TypeError: module.error = self.trUtf8("Incompatible plugin activation method.") obj = None ok = True except StandardError, err: module.error = QString(str(err)) obj = None ok = False if not ok: return None self.emit(SIGNAL("pluginActivated"), name, pluginObject) pluginObject.eric4PluginModule = module pluginObject.eric4PluginName = className pluginObject.eric4PluginVersion = version if onDemand: self.__onDemandInactiveModules.pop(name) try: self.__onDemandInactivePlugins.pop(name) except KeyError: pass self.__onDemandActivePlugins[name] = pluginObject self.__onDemandActiveModules[name] = module else: self.__inactiveModules.pop(name) try: self.__inactivePlugins.pop(name) except KeyError: pass self.__activePlugins[name] = pluginObject self.__activeModules[name] = module return obj except PluginActivationError: return None def __canActivatePlugin(self, module): """ Private method to check, if a plugin can be activated. @param module reference to the module to be activated @return flag indicating, if the module satisfies all requirements for being activated (boolean) """ try: if not hasattr(module, "version"): raise PluginModuleFormatError(module.eric4PluginModuleName, "version") if not hasattr(module, "className"): raise PluginModuleFormatError(module.eric4PluginModuleName, "className") className = getattr(module, "className") if not hasattr(module, className): raise PluginModuleFormatError(module.eric4PluginModuleName, className) pluginClass = getattr(module, className) if not hasattr(pluginClass, "__init__"): raise PluginClassFormatError(module.eric4PluginModuleName, className, "__init__") if not hasattr(pluginClass, "activate"): raise PluginClassFormatError(module.eric4PluginModuleName, className, "activate") if not hasattr(pluginClass, "deactivate"): raise PluginClassFormatError(module.eric4PluginModuleName, className, "deactivate") return True except PluginModuleFormatError, e: print repr(e) return False except PluginClassFormatError, e: print repr(e) return False def deactivatePlugin(self, name, onDemand = False): """ Public method to deactivate a plugin. @param name name of the module to be deactivated @keyparam onDemand flag indicating deactivation of an on demand plugin (boolean) """ try: if onDemand: module = self.__onDemandActiveModules[name] else: module = self.__activeModules[name] except KeyError: return if self.__canDeactivatePlugin(module): pluginObject = None if onDemand and self.__onDemandActivePlugins.has_key(name): pluginObject = self.__onDemandActivePlugins[name] elif not onDemand and self.__activePlugins.has_key(name): pluginObject = self.__activePlugins[name] if pluginObject: self.emit(SIGNAL("pluginAboutToBeDeactivated"), name, pluginObject) pluginObject.deactivate() self.emit(SIGNAL("pluginDeactivated"), name, pluginObject) if onDemand: self.__onDemandActiveModules.pop(name) self.__onDemandActivePlugins.pop(name) self.__onDemandInactivePlugins[name] = pluginObject self.__onDemandInactiveModules[name] = module else: self.__activeModules.pop(name) try: self.__activePlugins.pop(name) except KeyError: pass self.__inactivePlugins[name] = pluginObject self.__inactiveModules[name] = module def __canDeactivatePlugin(self, module): """ Private method to check, if a plugin can be deactivated. @param module reference to the module to be deactivated @return flag indicating, if the module satisfies all requirements for being deactivated (boolean) """ return getattr(module, "deactivateable", True) def getPluginObject(self, type_, typename, maybeActive = False): """ Public method to activate an ondemand plugin given by type and typename. @param type_ type of the plugin to be activated (string) @param typename name of the plugin within the type category (string) @keyparam maybeActive flag indicating, that the plugin may be active already (boolean) @return reference to the initialized plugin object """ for name, module in self.__onDemandInactiveModules.items(): if getattr(module, "pluginType") == type_ and \ getattr(module, "pluginTypename") == typename: return self.activatePlugin(name, onDemand = True) if maybeActive: for name, module in self.__onDemandActiveModules.items(): if getattr(module, "pluginType") == type_ and \ getattr(module, "pluginTypename") == typename: self.deactivatePlugin(name, onDemand = True) return self.activatePlugin(name, onDemand = True) return None def getPluginInfos(self): """ Public method to get infos about all loaded plugins. @return list of tuples giving module name (string), plugin name (string), version (string), autoactivate (boolean), active (boolean), short description (string), error flag (boolean) """ infos = [] for name in self.__activeModules.keys(): pname, shortDesc, error, version = \ self.__getShortInfo(self.__activeModules[name]) infos.append((name, pname, version, True, True, shortDesc, error)) for name in self.__inactiveModules.keys(): pname, shortDesc, error, version = \ self.__getShortInfo(self.__inactiveModules[name]) infos.append((name, pname, version, True, False, shortDesc, error)) for name in self.__onDemandActiveModules.keys(): pname, shortDesc, error, version = \ self.__getShortInfo(self.__onDemandActiveModules[name]) infos.append((name, pname, version, False, True, shortDesc, error)) for name in self.__onDemandInactiveModules.keys(): pname, shortDesc, error, version = \ self.__getShortInfo(self.__onDemandInactiveModules[name]) infos.append((name, pname, version, False, False, shortDesc, error)) for name in self.__failedModules.keys(): pname, shortDesc, error, version = \ self.__getShortInfo(self.__failedModules[name]) infos.append((name, pname, version, False, False, shortDesc, error)) return infos def __getShortInfo(self, module): """ Private method to extract the short info from a module. @param module module to extract short info from @return short info as a tuple giving plugin name (string), short description (string), error flag (boolean) and version (string) """ name = getattr(module, "name", "") shortDesc = getattr(module, "shortDescription", "") version = getattr(module, "version", "") error = not getattr(module, "error", QString("")).isEmpty() return name, shortDesc, error, version def getPluginDetails(self, name): """ Public method to get detailed information about a plugin. @param name name of the module to get detailed infos about (string) @return details of the plugin as a dictionary """ details = {} autoactivate = True active = True if self.__activeModules.has_key(name): module = self.__activeModules[name] elif self.__inactiveModules.has_key(name): module = self.__inactiveModules[name] active = False elif self.__onDemandActiveModules.has_key(name): module = self.__onDemandActiveModules[name] autoactivate = False elif self.__onDemandInactiveModules.has_key(name): module = self.__onDemandInactiveModules[name] autoactivate = False active = False elif self.__failedModules.has_key(name): module = self.__failedModules[name] autoactivate = False active = False else: # should not happen return None details["moduleName"] = name details["moduleFileName"] = getattr(module, "eric4PluginModuleFilename", "") details["pluginName"] = getattr(module, "name", "") details["version"] = getattr(module, "version", "") details["author"] = getattr(module, "author", "") details["description"] = getattr(module, "longDescription", "") details["autoactivate"] = autoactivate details["active"] = active details["error"] = getattr(module, "error", QString("")) return details def shutdown(self): """ Public method called to perform actions upon shutdown of the IDE. """ names = QStringList() for name in self.__inactiveModules.keys(): names.append(name) Preferences.Prefs.settings.setValue(self.__inactivePluginsKey, QVariant(names)) self.emit(SIGNAL("shutdown()")) def getPluginDisplayStrings(self, type_): """ Public method to get the display strings of all plugins of a specific type. @param type_ type of the plugins (string) @return dictionary with name as key and display string as value (dictionary of QString) """ pluginDict = {} for name, module in \ self.__onDemandActiveModules.items() + self.__onDemandInactiveModules.items(): if getattr(module, "pluginType") == type_ and \ getattr(module, "error", QString("")).isEmpty(): plugin_name = getattr(module, "pluginTypename") if hasattr(module, "displayString"): try: disp = module.displayString() except TypeError: disp = getattr(module, "displayString") if disp != "": pluginDict[plugin_name] = disp else: pluginDict[plugin_name] = QString(plugin_name) return pluginDict def getPluginPreviewPixmap(self, type_, name): """ Public method to get a preview pixmap of a plugin of a specific type. @param type_ type of the plugin (string) @param name name of the plugin type (string) @return preview pixmap (QPixmap) """ for modname, module in \ self.__onDemandActiveModules.items() + self.__onDemandInactiveModules.items(): if getattr(module, "pluginType") == type_ and \ getattr(module, "pluginTypename") == name: if hasattr(module, "previewPix"): return module.previewPix() else: return QPixmap() return QPixmap() def getPluginApiFiles(self, language): """ Public method to get the list of API files installed by a plugin. @param language language of the requested API files (QString) @return list of API filenames (list of string) """ apis = [] for module in self.__activeModules.values() + \ self.__onDemandActiveModules.values(): if hasattr(module, "apiFiles"): apis.extend(module.apiFiles(language)) return apis def getPluginExeDisplayData(self): """ Public method to get data to display information about a plugins external tool. @return list of dictionaries containing the data. Each dictionary must either contain data for the determination or the data to be displayed.
    A dictionary of the first form must have the following entries:
    • programEntry - indicator for this dictionary form (boolean), always True
    • header - string to be diplayed as a header (QString)
    • exe - the executable (string)
    • versionCommand - commandline parameter for the exe (string)
    • versionStartsWith - indicator for the output line containing the version (string)
    • versionPosition - number of element containing the version (integer)
    • version - version to be used as default (string)
    • versionCleanup - tuple of two integers giving string positions start and stop for the version string (tuple of integers)
    A dictionary of the second form must have the following entries:
    • programEntry - indicator for this dictionary form (boolean), always False
    • header - string to be diplayed as a header (QString)
    • text - entry text to be shown (string or QString)
    • version - version text to be shown (string or QString)
    """ infos = [] for module in self.__activeModules.values() + \ self.__inactiveModules.values(): if hasattr(module, "exeDisplayData"): infos.append(module.exeDisplayData()) for module in self.__onDemandActiveModules.values() + \ self.__onDemandInactiveModules.values(): if hasattr(module, "exeDisplayData"): infos.append(module.exeDisplayData()) return infos def getPluginConfigData(self): """ Public method to get the config data of all active, non on-demand plugins used by the configuration dialog. Plugins supporting this functionality must provide the plugin module function 'getConfigData' returning a dictionary with unique keys of lists with the following list contents:
    display string
    string shown in the selection area of the configuration page. This should be a localized string
    pixmap name
    filename of the pixmap to be shown next to the display string
    page creation function
    plugin module function to be called to create the configuration page. The page must be subclasses from Preferences.ConfigurationPages.ConfigurationPageBase and must implement a method called 'save' to save the settings. A parent entry will be created in the selection list, if this value is None.
    parent key
    dictionary key of the parent entry or None, if this defines a toplevel entry.
    reference to configuration page
    This will be used by the configuration dialog and must always be None
    """ configData = {} for module in self.__activeModules.values() + \ self.__onDemandActiveModules.values() + \ self.__onDemandInactiveModules.values(): if hasattr(module, 'getConfigData'): configData.update(module.getConfigData()) return configData def isPluginLoaded(self, pluginName): """ Public method to check, if a certain plugin is loaded. @param pluginName name of the plugin to check for (string or QString) @return flag indicating, if the plugin is loaded (boolean) """ return unicode(pluginName) in self.__activeModules.keys() or \ unicode(pluginName) in self.__inactiveModules.keys() or \ unicode(pluginName) in self.__onDemandActiveModules.keys() or \ unicode(pluginName) in self.__onDemandInactiveModules.keys() def isPluginActive(self, pluginName): """ Public method to check, if a certain plugin is active. @param pluginName name of the plugin to check for (string or QString) @return flag indicating, if the plugin is active (boolean) """ return unicode(pluginName) in self.__activeModules.keys() or \ unicode(pluginName) in self.__onDemandActiveModules.keys() ############################################################################ ## Specialized plugin module handling methods below ############################################################################ ############################################################################ ## VCS related methods below ############################################################################ def getVcsSystemIndicators(self): """ Public method to get the Vcs System indicators. Plugins supporting this functionality must support the module function getVcsSystemIndicator returning a dictionary with indicator as key and a tuple with the vcs name (string) and vcs display string (QString). @return dictionary with indicator as key and a list of tuples as values. Each tuple contains the vcs name (string) and vcs display string (QString). """ vcsDict = {} for name, module in \ self.__onDemandActiveModules.items() + self.__onDemandInactiveModules.items(): if getattr(module, "pluginType") == "version_control": if hasattr(module, "getVcsSystemIndicator"): res = module.getVcsSystemIndicator() for indicator, vcsData in res.items(): if vcsDict.has_key(indicator): vcsDict[indicator].append(vcsData) else: vcsDict[indicator] = [vcsData] return vcsDict def deactivateVcsPlugins(self): """ Public method to deactivated all activated VCS plugins. """ for name, module in self.__onDemandActiveModules.items(): if getattr(module, "pluginType") == "version_control": self.deactivatePlugin(name, True) def __checkPluginsDownloadDirectory(self): """ Private slot to check for the existance of the plugins download directory. """ downloadDir = unicode(Preferences.getPluginManager("DownloadPath")) if not downloadDir: downloadDir = self.__defaultDownloadDir if not os.path.exists(downloadDir): try: os.mkdir(downloadDir, 0755) except (OSError, IOError), err: # try again with (possibly) new default downloadDir = self.__defaultDownloadDir if not os.path.exists(downloadDir): try: os.mkdir(downloadDir, 0755) except (OSError, IOError), err: KQMessageBox.critical(self.__ui, self.trUtf8("Plugin Manager Error"), self.trUtf8("""

    The plugin download directory %1 """ """could not be created. Please configure it """ """via the configuration dialog.

    """ """

    Reason: %2

    """)\ .arg(downloadDir).arg(str(err))) downloadDir = "" Preferences.setPluginManager("DownloadPath", downloadDir) def preferencesChanged(self): """ Public slot to react to changes in configuration. """ self.__checkPluginsDownloadDirectory() eric4-4.5.18/eric/PluginManager/PaxHeaders.8617/__init__.py0000644000175000001440000000013212261012651021347 xustar000000000000000030 mtime=1388582313.462095619 30 atime=1389081084.441724374 30 ctime=1389081086.309724333 eric4-4.5.18/eric/PluginManager/__init__.py0000644000175000001440000000026212261012651021101 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Package containing the code for the Plugin Manager and related parts. """ eric4-4.5.18/eric/PluginManager/PaxHeaders.8617/PluginInstallDialog.ui0000644000175000001440000000007411072435333023514 xustar000000000000000030 atime=1389081084.441724374 30 ctime=1389081086.309724333 eric4-4.5.18/eric/PluginManager/PluginInstallDialog.ui0000644000175000001440000001210411072435333023237 0ustar00detlevusers00000000000000 PluginInstallDialog 0 0 611 362 Plugin Installation 0 6 0 <b>Enter the plugin archives to install</b> true QAbstractItemView::ExtendedSelection true Add plugin ZIP-archives via a file selection dialog Add ... false Remove the selected entries from the list of plugin archives to be installed Remove Qt::Vertical 20 101 0 <b>Select the destination plugin directory</b> Select the destination plugin area Qt::Vertical 20 40 0 <b>Installation Summary</b> This shows the summary of the installation data true 0 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Close addArchivesButton archivesList removeArchivesButton destinationCombo summaryEdit buttonBox eric4-4.5.18/eric/PluginManager/PaxHeaders.8617/PluginInstallDialog.py0000644000175000001440000000013112261012651023514 xustar000000000000000029 mtime=1388582313.46609567 30 atime=1389081084.441724374 30 ctime=1389081086.309724333 eric4-4.5.18/eric/PluginManager/PluginInstallDialog.py0000644000175000001440000005170112261012651023253 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing the Plugin installation dialog. """ import os import sys import shutil import zipfile import compileall import urlparse from PyQt4.QtGui import * from PyQt4.QtCore import * from KdeQt import KQFileDialog from KdeQt.KQMainWindow import KQMainWindow from E4Gui.E4Completers import E4FileCompleter from PluginManager import PluginManager from Ui_PluginInstallDialog import Ui_PluginInstallDialog import Utilities import Preferences from Utilities.uic import compileUiFiles class PluginInstallWidget(QWidget, Ui_PluginInstallDialog): """ Class implementing the Plugin installation dialog. """ def __init__(self, pluginManager, pluginFileNames, parent = None): """ Constructor @param pluginManager reference to the plugin manager object @param pluginFileNames list of plugin files suggested for installation (QStringList) @param parent parent of this dialog (QWidget) """ QWidget.__init__(self, parent) self.setupUi(self) if pluginManager is None: # started as external plugin installer self.__pluginManager = PluginManager(doLoadPlugins = False) self.__external = True else: self.__pluginManager = pluginManager self.__external = False self.__backButton = \ self.buttonBox.addButton(self.trUtf8("< Back"), QDialogButtonBox.ActionRole) self.__nextButton = \ self.buttonBox.addButton(self.trUtf8("Next >"), QDialogButtonBox.ActionRole) self.__finishButton = \ self.buttonBox.addButton(self.trUtf8("Install"), QDialogButtonBox.ActionRole) self.__closeButton = self.buttonBox.button(QDialogButtonBox.Close) self.__cancelButton = self.buttonBox.button(QDialogButtonBox.Cancel) userDir = self.__pluginManager.getPluginDir("user") if userDir is not None: self.destinationCombo.addItem(self.trUtf8("User plugins directory"), QVariant(userDir)) globalDir = self.__pluginManager.getPluginDir("global") if globalDir is not None and os.access(globalDir, os.W_OK): self.destinationCombo.addItem(self.trUtf8("Global plugins directory"), QVariant(globalDir)) self.__installedDirs = [] self.__installedFiles = [] self.__restartNeeded = False downloadDir = QDir(Preferences.getPluginManager("DownloadPath")) for pluginFileName in pluginFileNames: fi = QFileInfo(pluginFileName) if fi.isRelative(): pluginFileName = QFileInfo(downloadDir, fi.fileName()).absoluteFilePath() self.archivesList.addItem(pluginFileName) self.archivesList.sortItems() self.__currentIndex = 0 self.__selectPage() def restartNeeded(self): """ Public method to check, if a restart of the IDE is required. @return flag indicating a restart is required (boolean) """ return self.__restartNeeded def __createArchivesList(self): """ Private method to create a list of plugin archive names. @return list of plugin archive names (QStringList) """ archivesList = QStringList() for row in range(self.archivesList.count()): archivesList.append(self.archivesList.item(row).text()) return archivesList def __selectPage(self): """ Private method to show the right wizard page. """ self.wizard.setCurrentIndex(self.__currentIndex) if self.__currentIndex == 0: self.__backButton.setEnabled(False) self.__nextButton.setEnabled(self.archivesList.count() > 0) self.__finishButton.setEnabled(False) self.__closeButton.hide() self.__cancelButton.show() elif self.__currentIndex == 1: self.__backButton.setEnabled(True) self.__nextButton.setEnabled(self.destinationCombo.count() > 0) self.__finishButton.setEnabled(False) self.__closeButton.hide() self.__cancelButton.show() else: self.__backButton.setEnabled(True) self.__nextButton.setEnabled(False) self.__finishButton.setEnabled(True) self.__closeButton.hide() self.__cancelButton.show() msg = self.trUtf8("Plugin ZIP-Archives:\n%1\n\nDestination:\n%2 (%3)")\ .arg(self.__createArchivesList().join("\n"))\ .arg(self.destinationCombo.currentText())\ .arg(self.destinationCombo.itemData(self.destinationCombo.currentIndex())\ .toString() ) self.summaryEdit.setPlainText(msg) @pyqtSignature("") def on_addArchivesButton_clicked(self): """ Private slot to select plugin ZIP-archives via a file selection dialog. """ dn = Preferences.getPluginManager("DownloadPath") archives = KQFileDialog.getOpenFileNames(\ self, self.trUtf8("Select plugin ZIP-archives"), dn, self.trUtf8("Plugin archive (*.zip)")) if not archives.isEmpty(): matchflags = Qt.MatchFixedString if not Utilities.isWindowsPlatform(): matchflags |= Qt.MatchCaseSensitive for archive in archives: if len(self.archivesList.findItems(archive, matchflags)) == 0: # entry not in list already self.archivesList.addItem(archive) self.archivesList.sortItems() self.__nextButton.setEnabled(self.archivesList.count() > 0) @pyqtSignature("") def on_archivesList_itemSelectionChanged(self): """ Private slot called, when the selection of the archives list changes. """ self.removeArchivesButton.setEnabled(len(self.archivesList.selectedItems()) > 0) @pyqtSignature("") def on_removeArchivesButton_clicked(self): """ Private slot to remove archives from the list. """ for archiveItem in self.archivesList.selectedItems(): itm = self.archivesList.takeItem(self.archivesList.row(archiveItem)) del itm self.__nextButton.setEnabled(self.archivesList.count() > 0) @pyqtSignature("QAbstractButton*") def on_buttonBox_clicked(self, button): """ Private slot to handle the click of a button of the button box. """ if button == self.__backButton: self.__currentIndex -= 1 self.__selectPage() elif button == self.__nextButton: self.__currentIndex += 1 self.__selectPage() elif button == self.__finishButton: self.__installPlugins() self.__finishButton.setEnabled(False) self.__closeButton.show() self.__cancelButton.hide() def __installPlugins(self): """ Private method to install the selected plugin archives. @return flag indicating success (boolean) """ res = True self.summaryEdit.clear() for archive in self.__createArchivesList(): self.summaryEdit.append(self.trUtf8("Installing %1 ...").arg(archive)) ok, msg, restart = self.__installPlugin(archive) res = res and ok if ok: self.summaryEdit.append(self.trUtf8(" ok")) else: self.summaryEdit.append(msg) if restart: self.__restartNeeded = True self.summaryEdit.append("\n") if res: self.summaryEdit.append(self.trUtf8(\ """The plugins were installed successfully.""")) else: self.summaryEdit.append(self.trUtf8(\ """Some plugins could not be installed.""")) return res def __installPlugin(self, archiveFilename): """ Private slot to install the selected plugin. @param archiveFilename name of the plugin archive file (string or QString) @return flag indicating success (boolean), error message upon failure (QString) and flag indicating a restart of the IDE is required (boolean) """ installedPluginName = "" archive = unicode(archiveFilename) destination = \ unicode(self.destinationCombo.itemData(self.destinationCombo.currentIndex())\ .toString()) # check if archive is a local url url = urlparse.urlparse(archive) if url[0].lower() == 'file': archive = url[2] # check, if the archive exists if not os.path.exists(archive): return False, \ self.trUtf8("""

    The archive file %1 does not exist. """ """Aborting...

    """).arg(archive), \ False # check, if the archive is a valid zip file if not zipfile.is_zipfile(archive): return False, \ self.trUtf8("""

    The file %1 is not a valid plugin """ """ZIP-archive. Aborting...

    """).arg(archive), \ False # check, if the destination is writeable if not os.access(destination, os.W_OK): return False, \ self.trUtf8("""

    The destination directory %1 is not """ """writeable. Aborting...

    """).arg(destination), \ False zip = zipfile.ZipFile(archive, "r") # check, if the archive contains a valid plugin pluginFound = False pluginFileName = "" for name in zip.namelist(): if self.__pluginManager.isValidPluginName(name): installedPluginName = name[:-3] pluginFound = True pluginFileName = name break if not pluginFound: return False, \ self.trUtf8("""

    The file %1 is not a valid plugin """ """ZIP-archive. Aborting...

    """).arg(archive), \ False # parse the plugin module's plugin header pluginSource = zip.read(pluginFileName) packageName = "" internalPackages = [] needsRestart = False for line in pluginSource.splitlines(): if line.startswith("packageName"): tokens = line.split("=") if tokens[0].strip() == "packageName" and \ tokens[1].strip()[1:-1] != "__core__": if tokens[1].strip()[0] in ['"', "'"]: packageName = tokens[1].strip()[1:-1] else: if tokens[1].strip() == "None": packageName = "None" elif line.startswith("internalPackages"): tokens = line.split("=") token = tokens[1].strip()[1:-1] # it is a comma separated string internalPackages = [p.strip() for p in token.split(",")] elif line.startswith("needsRestart"): tokens = line.split("=") needsRestart = tokens[1].strip() == "True" elif line.startswith("# End-Of-Header"): break if not packageName: return False, \ self.trUtf8("""

    The plugin module %1 does not contain """ """a 'packageName' attribute. Aborting...

    """)\ .arg(pluginFileName), \ False # check, if it is a plugin, that collides with others if not os.path.exists(os.path.join(destination, pluginFileName)) and \ packageName != "None" and \ os.path.exists(os.path.join(destination, packageName)): return False, \ self.trUtf8("""

    The plugin package %1 exists. """ """Aborting...

    """)\ .arg(os.path.join(destination, packageName)), \ False if os.path.exists(os.path.join(destination, pluginFileName)) and \ packageName != "None" and \ not os.path.exists(os.path.join(destination, packageName)): return False, \ self.trUtf8("""

    The plugin module %1 exists. """ """Aborting...

    """)\ .arg(os.path.join(destination, pluginFileName)), \ False activatePlugin = False if not self.__external: activatePlugin = \ not self.__pluginManager.isPluginLoaded(installedPluginName) or \ (self.__pluginManager.isPluginLoaded(installedPluginName) and \ self.__pluginManager.isPluginActive(installedPluginName)) # try to unload a plugin with the same name self.__pluginManager.unloadPlugin(installedPluginName, destination) # uninstall existing plugin first to get clean conditions self.__uninstallPackage(destination, pluginFileName, packageName) # clean sys.modules reload_ = self.__pluginManager.removePluginFromSysModules( installedPluginName, packageName, internalPackages) # now do the installation self.__installedDirs = [] self.__installedFiles = [] try: if packageName != "None": packageDirs = ["%s/" % packageName, "%s\\" % packageName] namelist = zip.namelist() namelist.sort() tot = len(namelist) prog = 0 self.progress.setMaximum(tot) QApplication.processEvents() for name in namelist: self.progress.setValue(prog) QApplication.processEvents() prog += 1 if name == pluginFileName or \ name.startswith("%s/" % packageName) or \ name.startswith("%s\\" % packageName): outname = name.replace("/", os.sep) outname = os.path.join(destination, outname) if outname.endswith("/") or outname.endswith("\\"): # it is a directory entry outname = outname[:-1] if not os.path.exists(outname): self.__makedirs(outname) else: # it is a file d = os.path.dirname(outname) if not os.path.exists(d): self.__makedirs(d) f = open(outname, "wb") f.write(zip.read(name)) f.close() self.__installedFiles.append(outname) self.progress.setValue(tot) # now compile user interface files compileUiFiles(os.path.join(destination, packageName), True) else: outname = os.path.join(destination, pluginFileName) f = open(outname, "wb") f.write(pluginSource) f.close() self.__installedFiles.append(outname) except os.error, why: self.__rollback() return False, \ self.trUtf8("Error installing plugin. Reason: %1").arg(str(why)), \ False except IOError, why: self.__rollback() return False, \ self.trUtf8("Error installing plugin. Reason: %1").arg(str(why)), \ False except OSError, why: self.__rollback() return False, \ self.trUtf8("Error installing plugin. Reason: %1").arg(str(why)), \ False except: print >>sys.stderr, "Unspecific exception installing plugin." self.__rollback() return False, \ self.trUtf8("Unspecific exception installing plugin."), \ False # now compile the plugins compileall.compile_dir(destination, quiet = True) if not self.__external: # now load and activate the plugin self.__pluginManager.loadPlugin(installedPluginName, destination, reload_) if activatePlugin: self.__pluginManager.activatePlugin(installedPluginName) return True, QString(""), needsRestart def __rollback(self): """ Private method to rollback a failed installation. """ for fname in self.__installedFiles: if os.path.exists(fname): os.remove(fname) for dname in self.__installedDirs: if os.path.exists(dname): shutil.rmtree(dname) def __makedirs(self, name, mode = 0777): """ Private method to create a directory and all intermediate ones. This is an extended version of the Python one in order to record the created directories. @param name name of the directory to create (string) @param mode permission to set for the new directory (integer) """ head, tail = os.path.split(name) if not tail: head, tail = os.path.split(head) if head and tail and not os.path.exists(head): self.__makedirs(head, mode) if tail == os.curdir: # xxx/newdir/. exists if xxx/newdir exists return os.mkdir(name, mode) self.__installedDirs.append(name) def __uninstallPackage(self, destination, pluginFileName, packageName): """ Private method to uninstall an already installed plugin to prepare the update. @param destination name of the plugin directory (string) @param pluginFileName name of the plugin file (string) @param packageName name of the plugin package (string) """ if packageName == "" or packageName == "None": packageDir = None else: packageDir = os.path.join(destination, packageName) pluginFile = os.path.join(destination, pluginFileName) try: if packageDir and os.path.exists(packageDir): shutil.rmtree(packageDir) fnameo = "%so" % pluginFile if os.path.exists(fnameo): os.remove(fnameo) fnamec = "%sc" % pluginFile if os.path.exists(fnamec): os.remove(fnamec) os.remove(pluginFile) except (IOError, OSError, os.error): # ignore some exceptions pass class PluginInstallDialog(QDialog): """ Class for the dialog variant. """ def __init__(self, pluginManager, pluginFileNames, parent = None): """ Constructor @param pluginManager reference to the plugin manager object @param pluginFileNames list of plugin files suggested for installation (QStringList) @param parent reference to the parent widget (QWidget) """ QDialog.__init__(self, parent) self.setSizeGripEnabled(True) self.__layout = QVBoxLayout(self) self.__layout.setMargin(0) self.setLayout(self.__layout) self.cw = PluginInstallWidget(pluginManager, pluginFileNames, self) size = self.cw.size() self.__layout.addWidget(self.cw) self.resize(size) self.connect(self.cw.buttonBox, SIGNAL("accepted()"), self.accept) self.connect(self.cw.buttonBox, SIGNAL("rejected()"), self.reject) def restartNeeded(self): """ Public method to check, if a restart of the IDE is required. @return flag indicating a restart is required (boolean) """ return self.cw.restartNeeded() class PluginInstallWindow(KQMainWindow): """ Main window class for the standalone dialog. """ def __init__(self, pluginFileNames, parent = None): """ Constructor @param pluginFileNames list of plugin files suggested for installation (QStringList) @param parent reference to the parent widget (QWidget) """ KQMainWindow.__init__(self, parent) self.cw = PluginInstallWidget(None, pluginFileNames, self) size = self.cw.size() self.setCentralWidget(self.cw) self.resize(size) self.connect(self.cw.buttonBox, SIGNAL("accepted()"), self.close) self.connect(self.cw.buttonBox, SIGNAL("rejected()"), self.close) eric4-4.5.18/eric/PluginManager/PaxHeaders.8617/PluginDetailsDialog.ui0000644000175000001440000000007411072435333023473 xustar000000000000000030 atime=1389081084.442724374 30 ctime=1389081086.309724333 eric4-4.5.18/eric/PluginManager/PluginDetailsDialog.ui0000644000175000001440000001337511072435333023231 0ustar00detlevusers00000000000000 PluginDetailsDialog 0 0 563 479 Plugin Details true Module name: true Module filename: true Qt::NoFocus Autoactivate Qt::NoFocus Active Qt::Horizontal 40 20 Plugin name: true Version: true Author: true Description: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop 0 5 true Error: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop 0 1 true Qt::Horizontal QDialogButtonBox::Close moduleNameEdit moduleFileNameEdit pluginNameEdit versionEdit authorEdit descriptionEdit errorEdit buttonBox buttonBox accepted() PluginDetailsDialog accept() 248 254 157 274 buttonBox rejected() PluginDetailsDialog reject() 316 260 286 274 eric4-4.5.18/eric/PluginManager/PaxHeaders.8617/PluginExceptions.py0000644000175000001440000000013112261012651023107 xustar000000000000000029 mtime=1388582313.47009572 30 atime=1389081084.442724374 30 ctime=1389081086.309724333 eric4-4.5.18/eric/PluginManager/PluginExceptions.py0000644000175000001440000000731112261012651022644 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Module implementing the exceptions raised by the plugin system. """ from PyQt4.QtGui import QApplication class PluginError(Exception): """ Class defining a special error for the plugin classes. """ def __init__(self): """ Constructor """ self._errorMessage = \ QApplication.translate("PluginError", "Unspecific plugin error.") def __repr__(self): """ Private method returning a representation of the exception. @return string representing the error message """ return unicode(self._errorMessage) def __str__(self): """ Private method returning a string representation of the exception. @return string representing the error message """ return str(self._errorMessage) class PluginPathError(PluginError): """ Class defining an error raised, when the plugin paths were not found and could not be created. """ def __init__(self, msg = None): """ Constructor @param msg message to be used by the exception (string or QString) """ if msg: self._errorMessage = msg else: self._errorMessage = \ QApplication.translate("PluginError", "Plugin paths not found or not creatable.") class PluginModulesError(PluginError): """ Class defining an error raised, when no plugin modules were found. """ def __init__(self): """ Constructor """ self._errorMessage = \ QApplication.translate("PluginError", "No plugin modules found.") class PluginLoadError(PluginError): """ Class defining an error raised, when there was an error during plugin loading. """ def __init__(self, name): """ Constructor @param name name of the plugin module (string) """ self._errorMessage = \ QApplication.translate("PluginError", "Error loading plugin module: %1")\ .arg(name) class PluginActivationError(PluginError): """ Class defining an error raised, when there was an error during plugin activation. """ def __init__(self, name): """ Constructor @param name name of the plugin module (string) """ self._errorMessage = \ QApplication.translate("PluginError", "Error activating plugin module: %1")\ .arg(name) class PluginModuleFormatError(PluginError): """ Class defining an error raised, when the plugin module is invalid. """ def __init__(self, name, missing): """ Constructor @param name name of the plugin module (string) @param missing description of the missing element (string) """ self._errorMessage = \ QApplication.translate("PluginError", "The plugin module %1 is missing %2.")\ .arg(name).arg(missing) class PluginClassFormatError(PluginError): """ Class defining an error raised, when the plugin module's class is invalid. """ def __init__(self, name, class_, missing): """ Constructor @param name name of the plugin module (string) @param class_ name of the class not satisfying the requirements (string) @param missing description of the missing element (string) """ self._errorMessage = \ QApplication.translate("PluginError", "The plugin class %1 of module %2 is missing %3.")\ .arg(class_).arg(name).arg(missing) eric4-4.5.18/eric/PaxHeaders.8617/uninstall.py0000644000175000001440000000013112261012651017067 xustar000000000000000030 mtime=1388582313.475095784 29 atime=1389081086.00372434 30 ctime=1389081086.309724333 eric4-4.5.18/eric/uninstall.py0000644000175000001440000001176112261012651016630 0ustar00detlevusers00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- # Copyright (c) 2002-2014 Detlev Offenbach # # This is the uninstall script for eric4. """ Uninstallation script for the eric4 IDE and all eric4 related tools. """ import sys import os import shutil import glob import distutils.sysconfig # get a local eric4config.py out of the way if os.path.exists("eric4config.py"): os.rename("eric4config.py", "eric4config.py.orig") from eric4config import getConfig # Define the globals. progName = None pyModDir = None def exit(rcode=0): """ Exit the install script. """ # restore the local eric4config.py if os.path.exists("eric4config.py.orig"): if os.path.exists("eric4config.py"): os.remove("eric4config.py") os.rename("eric4config.py.orig", "eric4config.py") def usage(rcode = 2): """Display a usage message and exit. rcode is the return code passed back to the calling process. """ global progName print "Usage:" print " %s [-h]" % (progName) print "where:" print " -h display this help message" exit(rcode) def initGlobals(): """ Sets the values of globals that need more than a simple assignment. """ global pyModDir pyModDir = distutils.sysconfig.get_python_lib(True) def wrapperName(dname,wfile): """Create the platform specific name for the wrapper script. """ if sys.platform.startswith("win"): wname = dname + "\\" + wfile + ".bat" else: wname = dname + "/" + wfile return wname def uninstallEric(): """ Uninstall the eric files. """ global pyModDir # Remove the wrapper scripts rem_wnames = [ "eric4-api", "eric4-compare", "eric4-configure", "eric4-diff", "eric4-doc", "eric4-helpviewer", "eric4-qregexp", "eric4-re", "eric4-trpreviewer", "eric4-uipreviewer", "eric4-unittest", "eric4", "eric4-tray", "eric4-editor", "eric4-plugininstall", "eric4-pluginuninstall", "eric4-pluginrepository", "eric4-sqlbrowser", "eric4-webbrowser", "eric4-iconeditor", "eric4_api", "eric4_compare", "eric4_configure", "eric4_diff", "eric4_doc", "eric4_helpviewer", "eric4_qregexp", "eric4_re", "eric4_trpreviewer", "eric4_uipreviewer", "eric4_unittest", "eric4", "eric4_tray", "eric4_editor", "eric4_plugininstall", "eric4_pluginuninstall", "eric4_pluginrepository", "eric4_sqlbrowser", "eric4_webbrowser", "eric4_iconeditor", ] for rem_wname in rem_wnames: rwname = wrapperName(getConfig('bindir'),rem_wname) if os.path.exists(rwname): os.remove(rwname) # Cleanup our config file(s) for name in ['eric4config.py', 'eric4config.pyc', 'eric4.pth']: e4cfile = os.path.join(pyModDir, name) if os.path.exists(e4cfile): os.remove(e4cfile) # Cleanup the install directories for name in ['ericExamplesDir', 'ericDocDir', 'ericDTDDir', 'ericCSSDir', 'ericIconDir', 'ericPixDir', 'ericDir', 'ericTemplatesDir', 'ericCodeTemplatesDir', 'ericOthersDir', 'ericStylesDir']: dirpath = getConfig(name) if os.path.exists(dirpath): shutil.rmtree(dirpath, True) # Cleanup translations for name in glob.glob(os.path.join(getConfig('ericTranslationsDir'), 'eric4_*.qm')): if os.path.exists(name): os.remove(name) # Cleanup API files apidir = getConfig('apidir') for name in getConfig('apis'): apiname = os.path.join(apidir, name) if os.path.exists(apiname): os.remove(apiname) if sys.platform == "darwin": # delete the Mac app bundle if os.path.exists("/Developer/Applications/Eric4"): shutil.rmtree("/Developer/Applications/Eric4") if os.path.exists("/Applications/eric4.app"): shutil.rmtree("/Applications/eric4.app") def main(argv): """The main function of the script. argv is the list of command line arguments. """ import getopt initGlobals() # Parse the command line. global progName progName = os.path.basename(argv[0]) try: optlist, args = getopt.getopt(argv[1:],"h") except getopt.GetoptError: usage() global platBinDir for opt, arg in optlist: if opt == "-h": usage(0) try: uninstallEric() except IOError, msg: sys.stderr.write('IOError: %s\nTry uninstall with admin rights.\n' % msg) except OSError, msg: sys.stderr.write('OSError: %s\nTry uninstall with admin rights.\n' % msg) exit(0) if __name__ == "__main__": try: main(sys.argv) except SystemExit: raise except: print \ """An internal error occured. Please report all the output of the program, including the following traceback, to eric4-bugs@eric-ide.python-projects.org. """ raise eric4-4.5.18/eric/PaxHeaders.8617/README-PyXML.txt0000644000175000001440000000007410566031716017170 xustar000000000000000030 atime=1389081084.443724373 30 ctime=1389081086.309724333 eric4-4.5.18/eric/README-PyXML.txt0000644000175000001440000000215310566031716016716 0ustar00detlevusers00000000000000PyXML has a problem calculating the datasize of the data read from an XML file. In order to correct this, make the adjustment shown below. Near the end of method parse_xml_decl (in PyXML 0.8.3 this is at line 723) in _xmlplus.parsers.xmlproc.xmlutils: try: self.data = self.charset_converter(self.data) self.datasize = len(self.data) ### ADD THIS LINE except UnicodeError, e: self._handle_decoding_error(self.data, e) self.input_encoding = enc1 Here is the change as a diff. --- _xmlplus/parsers/xmlproc/xmlutils.py.orig        2006-11-13 11:30:07.768059659 +0100 +++ _xmlplus/parsers/xmlproc/xmlutils.py     2006-11-13 11:30:38.871925067 +0100 @@ -720,6 +720,7 @@ class XMLCommonParser(EntityParser):              # to the recoding.              try:                  self.data = self.charset_converter(self.data) +                self.datasize = len(self.data)              except UnicodeError, e:                  self._handle_decoding_error(self.data, e)              self.input_encoding = enc1 eric4-4.5.18/eric/PaxHeaders.8617/Helpviewer0000644000175000001440000000013212262730776016562 xustar000000000000000030 mtime=1389081086.301724332 30 atime=1389081086.305724332 30 ctime=1389081086.315724332 eric4-4.5.18/eric/Helpviewer/0000755000175000001440000000000012262730776016371 5ustar00detlevusers00000000000000eric4-4.5.18/eric/Helpviewer/PaxHeaders.8617/QtHelpFiltersDialog.py0000644000175000001440000000013212261012651023037 xustar000000000000000030 mtime=1388582313.480095847 30 atime=1389081084.443724373 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/QtHelpFiltersDialog.py0000644000175000001440000001603412261012651022575 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a dialog to manage the QtHelp filters. """ import sqlite3 from PyQt4.QtGui import * from PyQt4.QtCore import * from PyQt4.QtHelp import QHelpEngineCore from KdeQt import KQInputDialog from Ui_QtHelpFiltersDialog import Ui_QtHelpFiltersDialog class QtHelpFiltersDialog(QDialog, Ui_QtHelpFiltersDialog): """ Class implementing a dialog to manage the QtHelp filters """ def __init__(self, engine, parent = None): """ Constructor @param engine reference to the help engine (QHelpEngine) @param parent reference to the parent widget (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.__engine = engine self.attributesList.header().hide() self.filtersList.clear() self.attributesList.clear() help = QHelpEngineCore(self.__engine.collectionFile()) help.setupData() self.__removedFilters = [] self.__filterMap = {} self.__filterMapBackup = {} self.__removedAttributes = [] for filter in help.customFilters(): atts = help.filterAttributes(filter) ufilter = unicode(filter) self.__filterMapBackup[ufilter] = atts if ufilter not in self.__filterMap: self.__filterMap[ufilter] = atts self.filtersList.addItems(sorted(self.__filterMap.keys())) for attr in help.filterAttributes(): QTreeWidgetItem(self.attributesList, QStringList(attr)) if self.__filterMap: self.filtersList.setCurrentRow(0) @pyqtSignature("QListWidgetItem*, QListWidgetItem*") def on_filtersList_currentItemChanged(self, current, previous): """ Private slot to update the attributes depending on the current filter. @param current reference to the current item (QListWidgetitem) @param previous reference to the previous current item (QListWidgetItem) """ checkedList = QStringList() if current is not None: checkedList = self.__filterMap[unicode(current.text())] for index in range(0, self.attributesList.topLevelItemCount()): itm = self.attributesList.topLevelItem(index) if checkedList.contains(itm.text(0)): itm.setCheckState(0, Qt.Checked) else: itm.setCheckState(0, Qt.Unchecked) @pyqtSignature("QTreeWidgetItem*, int") def on_attributesList_itemChanged(self, item, column): """ Private slot to handle a change of an attribute. @param item reference to the changed item (QTreeWidgetItem) @param column column containing the change (integer) """ if self.filtersList.currentItem() is None: return filter = unicode(self.filtersList.currentItem().text()) if filter not in self.__filterMap: return newAtts = QStringList() for index in range(0, self.attributesList.topLevelItemCount()): itm = self.attributesList.topLevelItem(index) if itm.checkState(0) == Qt.Checked: newAtts.append(itm.text(0)) self.__filterMap[filter] = newAtts @pyqtSignature("") def on_addButton_clicked(self): """ Private slot to add a new filter. """ filter, ok = KQInputDialog.getText(\ None, self.trUtf8("Add Filter"), self.trUtf8("Filter name:"), QLineEdit.Normal) if filter.isEmpty(): return ufilter = unicode(filter) if ufilter not in self.__filterMap: self.__filterMap[ufilter] = QStringList() self.filtersList.addItem(filter) itm = self.filtersList.findItems(filter, Qt.MatchCaseSensitive)[0] self.filtersList.setCurrentItem(itm) @pyqtSignature("") def on_removeButton_clicked(self): """ Private slot to remove a filter. """ itm = self.filtersList.takeItem(self.filtersList.currentRow()) if itm is None: return del self.__filterMap[unicode(itm.text())] self.__removedFilters.append(itm.text()) del itm if self.filtersList.count(): self.filtersList.setCurrentRow(0) @pyqtSignature("") def on_removeAttributeButton_clicked(self): """ Private slot to remove a filter attribute. """ itm = self.attributesList.takeTopLevelItem( self.attributesList.indexOfTopLevelItem( self.attributesList.currentItem())) if itm is None: return attr = itm.text(0) self.__removedAttributes.append(attr) for filter in self.__filterMap: if attr in self.__filterMap[filter]: self.__filterMap[filter].removeAll(attr) del itm def __removeAttributes(self): """ Private method to remove attributes from the Qt Help database. """ try: self.__db = sqlite3.connect(unicode(self.__engine.collectionFile())) except sqlite3.DatabaseError: pass # ignore database errors for attr in self.__removedAttributes: self.__db.execute( "DELETE FROM FilterAttributeTable WHERE Name = '%s'" % attr) self.__db.commit() self.__db.close() @pyqtSignature("") def on_buttonBox_accepted(self): """ Private slot to update the database, if the dialog is accepted. """ filtersChanged = False if len(self.__filterMapBackup) != len(self.__filterMap): filtersChanged = True else: for filter in self.__filterMapBackup: if filter not in self.__filterMap: filtersChanged = True else: oldFilterAtts = self.__filterMapBackup[filter] newFilterAtts = self.__filterMap[filter] if len(oldFilterAtts) != len(newFilterAtts): filtersChanged = True else: for attr in oldFilterAtts: if attr not in newFilterAtts: filtersChanged = True break if filtersChanged: break if filtersChanged: for filter in self.__removedFilters: self.__engine.removeCustomFilter(filter) for filter in self.__filterMap: self.__engine.addCustomFilter(filter, self.__filterMap[filter]) if self.__removedAttributes: self.__removeAttributes() if filtersChanged or self.__removedAttributes: self.__engine.setupData() self.accept() eric4-4.5.18/eric/Helpviewer/PaxHeaders.8617/Passwords0000644000175000001440000000013212262730776020547 xustar000000000000000030 mtime=1389081086.301724332 30 atime=1389081086.305724332 30 ctime=1389081086.315724332 eric4-4.5.18/eric/Helpviewer/Passwords/0000755000175000001440000000000012262730776020356 5ustar00detlevusers00000000000000eric4-4.5.18/eric/Helpviewer/Passwords/PaxHeaders.8617/PasswordModel.py0000644000175000001440000000013212261012651023741 xustar000000000000000030 mtime=1388582313.483095885 30 atime=1389081084.443724373 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/Passwords/PasswordModel.py0000644000175000001440000001056112261012651023476 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a model for password management. """ from PyQt4.QtCore import * class PasswordModel(QAbstractTableModel): """ Class implementing a model for password management. """ def __init__(self, manager, parent = None): """ Constructor @param manager reference to the password manager (PasswordManager) @param parent reference to the parent object (QObject) """ QAbstractTableModel.__init__(self, parent) self.__manager = manager self.connect(manager, SIGNAL("changed()"), self.__passwordsChanged) self.__headers = [ self.trUtf8("Website"), self.trUtf8("Username"), self.trUtf8("Password") ] self.__showPasswords = False def setShowPasswords(self, on): """ Public methods to show passwords. @param on flag indicating if passwords shall be shown (boolean) """ self.__showPasswords = on self.reset() def showPasswords(self): """ Public method to indicate, if passwords shall be shown. @return flag indicating if passwords shall be shown (boolean) """ return self.__showPasswords def __passwordsChanged(self): """ Private slot handling a change of the registered passwords. """ self.reset() def removeRows(self, row, count, parent = QModelIndex()): """ Public method to remove entries from the model. @param row start row (integer) @param count number of rows to remove (integer) @param parent parent index (QModelIndex) @return flag indicating success (boolean) """ if parent.isValid(): return False if count <= 0: return False lastRow = row + count - 1 self.beginRemoveRows(parent, row, lastRow) siteList = self.__manager.allSiteNames() for index in range(row, lastRow + 1): self.__manager.removePassword(siteList[index]) # removeEngine emits changed() #self.endRemoveRows() return True def rowCount(self, parent = QModelIndex()): """ Public method to get the number of rows of the model. @param parent parent index (QModelIndex) @return number of rows (integer) """ if parent.isValid(): return 0 else: return self.__manager.sitesCount() def columnCount(self, parent = QModelIndex()): """ Public method to get the number of columns of the model. @param parent parent index (QModelIndex) @return number of columns (integer) """ if self.__showPasswords: return 3 else: return 2 def data(self, index, role): """ Public method to get data from the model. @param index index to get data for (QModelIndex) @param role role of the data to retrieve (integer) @return requested data (QVariant) """ if index.row() >= self.__manager.sitesCount() or index.row() < 0: return QVariant() site = self.__manager.allSiteNames()[index.row()] siteInfo = self.__manager.siteInfo(site) if siteInfo is None: return QVariant() if role == Qt.DisplayRole: if index.column() == 0: return QVariant(site) elif index.column() in [1, 2]: return QVariant(siteInfo[index.column() - 1]) return QVariant() def headerData(self, section, orientation, role = Qt.DisplayRole): """ Public method to get the header data. @param section section number (integer) @param orientation header orientation (Qt.Orientation) @param role data role (integer) @return header data (QVariant) """ if orientation == Qt.Horizontal and role == Qt.DisplayRole: try: return QVariant(self.__headers[section]) except IndexError: pass return QVariant() eric4-4.5.18/eric/Helpviewer/Passwords/PaxHeaders.8617/__init__.py0000644000175000001440000000013112261012651022714 xustar000000000000000029 mtime=1388582313.48509591 30 atime=1389081084.443724373 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/Passwords/__init__.py0000644000175000001440000000024412261012651022447 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Package implementing the password management interface. """ eric4-4.5.18/eric/Helpviewer/Passwords/PaxHeaders.8617/PasswordManager.py0000644000175000001440000000013212261012651024253 xustar000000000000000030 mtime=1388582313.487095936 30 atime=1389081084.443724373 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/Passwords/PasswordManager.py0000644000175000001440000004710612261012651024015 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing the password manager. """ import os from PyQt4.QtCore import * from PyQt4.QtGui import QMessageBox from PyQt4.QtNetwork import QNetworkRequest from PyQt4.QtWebKit import * from Helpviewer.JavaScriptResources import parseForms_js from Utilities.AutoSaver import AutoSaver import Utilities import Preferences class LoginForm(object): """ Class implementing a data structure for login forms. """ def __init__(self): """ Constructor """ self.url = QUrl() self.name = "" self.hasAPassword = False self.elements = [] # list of tuples of element name and value # (QString, QString) self.elementTypes = {} # dict of element name as key and type as value def isValid(self): """ Public method to test for validity. @return flag indicating a valid form (boolean) """ return len(self.elements) > 0 def load(self, data): """ Public method to load the form data from a file. @param data list of strings to load data from (list of strings) @return flag indicating success (boolean) """ self.url = QUrl(data[0]) self.name = data[1] self.hasAPassword = data[2] == "True" for element in data[3:]: name, value = element.split(" = ", 1) self.elements.append((name, value)) def save(self, f): """ Public method to save the form data to a file. @param f file or file like object open for writing @return flag indicating success (booelan) """ f.write("%s\n" % self.url.toString()) f.write("%s\n" % self.name) f.write("%s\n" % self.hasAPassword) for element in self.elements: f.write("%s = %s\n" % (element[0], element[1])) class PasswordManager(QObject): """ Class implementing the password manager. @signal changed() emitted to indicate a change """ SEPARATOR = "====================" FORMS = "=====FORMS=====" NEVER = "=====NEVER=====" def __init__(self, parent = None): """ Constructor @param parent reference to the parent object (QObject) """ QObject.__init__(self, parent) self.__logins = {} self.__loginForms = {} self.__never = [] self.__loaded = False self.__saveTimer = AutoSaver(self, self.save) self.connect(self, SIGNAL("changed()"), self.__saveTimer.changeOccurred) def clear(self): """ Public slot to clear the saved passwords. """ if not self.__loaded: self.__load() self.__logins = {} self.__loginForms = {} self.__never = [] self.__saveTimer.changeOccurred() self.__saveTimer.saveIfNeccessary() self.emit(SIGNAL("changed()")) def getLogin(self, url, realm): """ Public method to get the login credentials. @param url URL to get the credentials for (QUrl) @param realm realm to get the credentials for (string or QString) @return tuple containing the user name (string) and password (string) """ if not self.__loaded: self.__load() key = self.__createKey(url, realm) try: return self.__logins[key][0], Utilities.pwDecode(self.__logins[key][1]) except KeyError: return "", "" def setLogin(self, url, realm, username, password): """ Public method to set the login credentials. @param url URL to set the credentials for (QUrl) @param realm realm to set the credentials for (string or QString) @param username username for the login (string or QString) @param password password for the login (string or QString) """ if not self.__loaded: self.__load() key = self.__createKey(url, realm) self.__logins[key] = (unicode(username), Utilities.pwEncode(password)) self.emit(SIGNAL("changed()")) def __createKey(self, url, realm): """ Private method to create the key string for the login credentials. @param url URL to get the credentials for (QUrl) @param realm realm to get the credentials for (string or QString) @return key string (string) """ realm = unicode(realm) if realm: key = "%s://%s (%s)" % (url.scheme(), url.authority(), realm) else: key = "%s://%s" % (url.scheme(), url.authority()) return key def save(self): """ Public slot to save the login entries to disk. """ if not self.__loaded: return loginFile = os.path.join(Utilities.getConfigDir(), "browser", "logins") try: f = open(loginFile, "w") for key, login in self.__logins.items(): f.write("%s\n" % key) f.write("%s\n" % login[0]) f.write("%s\n" % login[1]) f.write("%s\n" % self.SEPARATOR) if self.__loginForms: f.write("%s\n" % self.FORMS) for key, form in self.__loginForms.items(): f.write("%s\n" % key) form.save(f) f.write("%s\n" % self.SEPARATOR) if self.__never: f.write("%s\n" % self.NEVER) for key in self.__never: f.write("%s\n") % key f.close() except IOError, err: KQMessageBox.critical(None, self.trUtf8("Saving login data"), self.trUtf8("""

    Login data could not be saved to %1

    """ """

    Reason: %2

    """).arg(loginFile).arg(str(err))) return def __load(self): """ Private method to load the saved login credentials. """ loginFile = os.path.join(Utilities.getConfigDir(), "browser", "logins") if os.path.exists(loginFile): try: f = open(loginFile, "r") lines = f.read() f.close() except IOError, err: KQMessageBox.critical(None, self.trUtf8("Loading login data"), self.trUtf8("""

    Login data could not be loaded from %1

    """ """

    Reason: %2

    """).arg(loginFile).arg(str(err))) return data = [] section = 0 # 0 = login data, 1 = forms data, 2 = never store info for line in lines.splitlines(): if line == self.FORMS: section = 1 continue elif line == self.NEVER: section = 2 continue if section == 0: if line != self.SEPARATOR: data.append(line) else: if len(data) != 3: KQMessageBox.critical(None, self.trUtf8("Loading login data"), self.trUtf8("""

    Login data could not be loaded """ """from %1

    """ """

    Reason: Wrong input format

    """)\ .arg(loginFile)) return self.__logins[data[0]] = (data[1], data[2]) data = [] elif section == 1: if line != self.SEPARATOR: data.append(line) else: key = data[0] form = LoginForm() form.load(data[1:]) self.__loginForms[key] = form data = [] elif section == 2: self.__never.append(line) self.__loaded = True def close(self): """ Public method to close the open search engines manager. """ self.__saveTimer.saveIfNeccessary() def removePassword(self, site): """ Public method to remove a password entry. @param site web site name (string or QString) """ site = unicode(site) if site in self.__logins: del self.__logins[site] if site in self.__loginForms: del self.__loginForms[site] self.emit(SIGNAL("changed()")) def allSiteNames(self): """ Public method to get a list of all site names. @return sorted list of all site names (QStringList) """ if not self.__loaded: self.__load() return QStringList(sorted(self.__logins.keys())) def sitesCount(self): """ Public method to get the number of available sites. @return number of sites (integer) """ if not self.__loaded: self.__load() return len(self.__logins) def siteInfo(self, site): """ Public method to get a reference to the named site. @param site web site name (string or QString) @return tuple containing the user name (string) and password (string) """ if not self.__loaded: self.__load() site = unicode(site) if site not in self.__logins: return None return self.__logins[site][0], Utilities.pwDecode(self.__logins[site][1]) def post(self, request, data): """ Public method to check, if the data to be sent contains login data. @param request reference to the network request (QNetworkRequest) @param data data to be sent (QByteArray) """ # shall passwords be saved? if not Preferences.getHelp("SavePasswords"): return # observe privacy if QWebSettings.globalSettings().testAttribute( QWebSettings.PrivateBrowsingEnabled): return if not self.__loaded: self.__load() # determine the url refererHeader = request.rawHeader("Referer") if refererHeader.isEmpty(): return url = QUrl.fromEncoded(refererHeader) url = self.__stripUrl(url) # check that url isn't in __never if unicode(url.toString()) in self.__never: return # check the request type v = request.attribute(QNetworkRequest.User + 101) if not v.isValid(): return navType = v.toInt()[0] if navType != QWebPage.NavigationTypeFormSubmitted: return # determine the QWebPage v = request.attribute(QNetworkRequest.User + 100) webPage = v.toPyObject() if webPage == NotImplemented or webPage is None: return # determine the requests content type contentTypeHeader = request.rawHeader("Content-Type") if contentTypeHeader.isEmpty(): return multipart = contentTypeHeader.startsWith("multipart/form-data") if multipart: boundary = contentTypeHeader.split(" ")[1].split("=")[1] else: boundary = None # find the matching form on the web page form = self.__findForm(webPage, data, boundary = boundary) if not form.isValid(): return form.url = QUrl(url) # check, if the form has a password if not form.hasAPassword: return # prompt, if the form has never be seen key = self.__createKey(url, "") if key not in self.__loginForms: mb = QMessageBox() mb.setText(self.trUtf8( """Would you like to save this password?
    """ """To review passwords you have saved and remove them, """ """use the password management dialog of the Settings menu.""" )) neverButton = mb.addButton( self.trUtf8("Never for this site"), QMessageBox.DestructiveRole) noButton = mb.addButton(self.trUtf8("Not now"), QMessageBox.RejectRole) yesButton = mb.addButton(QMessageBox.Yes) mb.exec_() if mb.clickedButton() == neverButton: self.__never.append(unicode(url.toString())) return elif mb.clickedButton() == noButton: return # extract user name and password user = "" password = "" for index in range(len(form.elements)): element = form.elements[index] name = element[0].toLower() type_ = form.elementTypes[unicode(element[0])] if user == "" and \ type_ == "text": user = element[1] elif password == "" and \ type_ == "password": password = element[1] form.elements[index] = (element[0], QString("--PASSWORD--")) if user and password: self.__logins[key] = (unicode(user), Utilities.pwEncode(password)) self.__loginForms[key] = form self.emit(SIGNAL("changed()")) def __stripUrl(self, url): """ Private method to strip off all unneeded parts of a URL. @param url URL to be stripped (QUrl) @return stripped URL (QUrl) """ cleanUrl = QUrl(url) cleanUrl.setQueryItems([]) cleanUrl.setFragment("") cleanUrl.setUserInfo("") return cleanUrl def __findForm(self, webPage, data, boundary = None): """ Private method to find the form used for logging in. @param webPage reference to the web page (QWebPage) @param data data to be sent (QByteArray) @keyparam boundary boundary string (QByteArray) for multipart encoded data, None for urlencoded data @return parsed form (LoginForm) """ form = LoginForm() if boundary is not None: args = self.__extractMultipartQueryItems(data, boundary) else: argsUrl = QUrl.fromEncoded( QByteArray("foo://bar.com/?" + data.replace("+", "%20"))) encodedArgs = argsUrl.queryItems() args = set() for arg in encodedArgs: key = arg[0] value = arg[1] args.add((key, value)) # extract the forms lst = webPage.mainFrame().evaluateJavaScript(parseForms_js).toList() for formVariant in lst: map = formVariant.toMap() formHasPasswords = False formName = map[QString("name")].toString() formIndex = map[QString("index")].toInt()[0] elements = map[QString("elements")].toList() formElements = set() formElementTypes = {} deadElements = set() for element in elements: elementMap = element.toMap() try: name = elementMap[QString("name")].toString() value = elementMap[QString("value")].toString() type_ = elementMap[QString("type")].toString() except KeyError: continue if type_ == "password": formHasPasswords = True t = (name, value) try: if elementMap[QString("autocomplete")].toString() == "off": deadElements.add(t) except KeyError: pass if not name.isEmpty(): formElements.add(t) formElementTypes[unicode(name)] = type_ if formElements.intersection(args) == args: form.hasAPassword = formHasPasswords if formName.isEmpty(): form.name = formIndex else: form.name = formName args.difference_update(deadElements) for elt in deadElements: if unicode(elt[0]) in formElementTypes: del formElementTypes[unicode(elt[0])] form.elements = list(args) form.elementTypes = formElementTypes break return form def __extractMultipartQueryItems(self, data, boundary): """ Private method to extract the query items for a post operation. @param data data to be sent (QByteArray) @param boundary boundary string (QByteArray) @return set of name, value pairs (set of tuple of QString, QString) """ args = set() dataStr = QString(data) boundaryStr = QString(boundary) parts = dataStr.split(boundaryStr + "\r\n") for part in parts: if part.startsWith("Content-Disposition"): lines = part.split("\r\n") name = lines[0].split("=")[1][1:-1] value = lines[2] args.add((name, value)) return args def fill(self, page): """ Public slot to fill login forms with saved data. @param page reference to the web page (QWebPage) """ if page is None or page.mainFrame() is None: return if not self.__loaded: self.__load() url = page.mainFrame().url() url = self.__stripUrl(url) key = self.__createKey(url, "") if key not in self.__loginForms or \ key not in self.__logins: return form = self.__loginForms[key] if form.url != url: return if form.name == "": formName = QString("0") else: try: formName = QString("%d" % int(form.name)) except ValueError: formName = QString('"%1"').arg(form.name) for element in form.elements: name = element[0] value = element[1] disabled = page.mainFrame().evaluateJavaScript( 'document.forms[%s].elements["%s"].disabled' % (formName, name)).toBool() if disabled: continue readOnly = page.mainFrame().evaluateJavaScript( 'document.forms[%s].elements["%s"].readOnly' % (formName, name)).toBool() if readOnly: continue type_ = page.mainFrame().evaluateJavaScript( 'document.forms[%s].elements["%s"].type' % (formName, name)).toString() if type_ == "" or \ type_ in ["hidden", "reset", "submit"]: continue if type_ == "password": value = Utilities.pwDecode(self.__logins[key][1]) setType = type_ == "checkbox" and "checked" or "value" value = value.replace("\\", "\\\\") value = value.replace('"', '\\"') javascript = 'document.forms[%s].elements["%s"].%s="%s";' % \ (formName, name, setType, value) page.mainFrame().evaluateJavaScript(javascript) eric4-4.5.18/eric/Helpviewer/Passwords/PaxHeaders.8617/PasswordsDialog.ui0000644000175000001440000000013212033057566024263 xustar000000000000000030 mtime=1349279606.973575157 30 atime=1389081084.456724373 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/Passwords/PasswordsDialog.ui0000644000175000001440000001232312033057566024016 0ustar00detlevusers00000000000000 PasswordsDialog 0 0 500 350 Saved Passwords true Qt::Horizontal 40 20 0 Enter search term Press to clear the search edit true QAbstractItemView::SelectRows Qt::ElideMiddle false true Press to remove the selected entries &Remove false Press to remove all entries Remove &All false Qt::Horizontal 208 20 Press to toggle the display of passwords Qt::Horizontal QDialogButtonBox::Close E4TableView QTableView
    E4Gui/E4TableView.h
    searchEdit clearButton passwordsTable removeButton removeAllButton passwordsButton buttonBox buttonBox accepted() PasswordsDialog accept() 228 274 157 274 buttonBox rejected() PasswordsDialog reject() 316 260 286 274 clearButton clicked() searchEdit clear() 376 21 329 23
    eric4-4.5.18/eric/Helpviewer/Passwords/PaxHeaders.8617/PasswordsDialog.py0000644000175000001440000000013212261012651024263 xustar000000000000000030 mtime=1388582313.492095999 30 atime=1389081084.456724373 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/Passwords/PasswordsDialog.py0000644000175000001440000000722312261012651024021 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a dialog to show all saved logins. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQMessageBox import Helpviewer.HelpWindow from PasswordModel import PasswordModel from Ui_PasswordsDialog import Ui_PasswordsDialog import UI.PixmapCache class PasswordsDialog(QDialog, Ui_PasswordsDialog): """ Class implementing a dialog to show all saved logins. """ def __init__(self, parent = None): """ Constructor @param parent reference to the parent widget (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.clearButton.setIcon(UI.PixmapCache.getIcon("clearLeft.png")) self.__showPasswordsText = self.trUtf8("Show Passwords") self.__hidePasswordsText = self.trUtf8("Hide Passwords") self.passwordsButton.setText(self.__showPasswordsText) self.connect(self.removeButton, SIGNAL("clicked()"), self.passwordsTable.removeSelected) self.connect(self.removeAllButton, SIGNAL("clicked()"), self.passwordsTable.removeAll) self.passwordsTable.verticalHeader().hide() self.__passwordModel = \ PasswordModel(Helpviewer.HelpWindow.HelpWindow.passwordManager(), self) self.__proxyModel = QSortFilterProxyModel(self) self.__proxyModel.setSourceModel(self.__passwordModel) self.connect(self.searchEdit, SIGNAL("textChanged(QString)"), self.__proxyModel.setFilterFixedString) self.passwordsTable.setModel(self.__proxyModel) fm = QFontMetrics(QFont()) height = fm.height() + fm.height() / 3 self.passwordsTable.verticalHeader().setDefaultSectionSize(height) self.passwordsTable.verticalHeader().setMinimumSectionSize(-1) self.__calculateHeaderSizes() def __calculateHeaderSizes(self): """ Private method to calculate the section sizes of the horizontal header. """ fm = QFontMetrics(QFont()) for section in range(self.__passwordModel.columnCount()): header = self.passwordsTable.horizontalHeader().sectionSizeHint(section) if section == 0: header = fm.width("averagebiglongsitename") elif section == 1: header = fm.width("averagelongusername") elif section == 2: header = fm.width("averagelongpassword") buffer = fm.width("mm") header += buffer self.passwordsTable.horizontalHeader().resizeSection(section, header) self.passwordsTable.horizontalHeader().setStretchLastSection(True) @pyqtSignature("") def on_passwordsButton_clicked(self): """ Private slot to switch the password display mode. """ if self.__passwordModel.showPasswords(): self.__passwordModel.setShowPasswords(False) self.passwordsButton.setText(self.__showPasswordsText) else: res = KQMessageBox.question(self, self.trUtf8("Saved Passwords"), self.trUtf8("""Do you really want to show passwords?"""), QMessageBox.StandardButtons(\ QMessageBox.No | \ QMessageBox.Yes), QMessageBox.No) if res == QMessageBox.Yes: self.__passwordModel.setShowPasswords(True) self.passwordsButton.setText(self.__hidePasswordsText) self.__calculateHeaderSizes() eric4-4.5.18/eric/Helpviewer/PaxHeaders.8617/CookieJar0000644000175000001440000000013212262730776020430 xustar000000000000000030 mtime=1389081086.301724332 30 atime=1389081086.305724332 30 ctime=1389081086.315724332 eric4-4.5.18/eric/Helpviewer/CookieJar/0000755000175000001440000000000012262730776020237 5ustar00detlevusers00000000000000eric4-4.5.18/eric/Helpviewer/CookieJar/PaxHeaders.8617/CookieExceptionsModel.py0000644000175000001440000000013212261012651025273 xustar000000000000000030 mtime=1388582313.495096037 30 atime=1389081084.456724373 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/CookieJar/CookieExceptionsModel.py0000644000175000001440000001703712261012651025035 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing the cookie exceptions model. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from CookieJar import CookieJar class CookieExceptionsModel(QAbstractTableModel): """ Class implementing the cookie exceptions model. """ def __init__(self, cookieJar, parent = None): """ Constructor @param cookieJar reference to the cookie jar (CookieJar) @param parent reference to the parent object (QObject) """ QAbstractTableModel.__init__(self, parent) self.__cookieJar = cookieJar self.__allowedCookies = self.__cookieJar.allowedCookies() self.__blockedCookies = self.__cookieJar.blockedCookies() self.__sessionCookies = self.__cookieJar.allowForSessionCookies() self.__headers = [ self.trUtf8("Website"), self.trUtf8("Status"), ] def headerData(self, section, orientation, role): """ Public method to get header data from the model. @param section section number (integer) @param orientation orientation (Qt.Orientation) @param role role of the data to retrieve (integer) @return requested data """ if role == Qt.SizeHintRole: fm = QFontMetrics(QFont()) height = fm.height() + fm.height() / 3 width = \ fm.width(self.headerData(section, orientation, Qt.DisplayRole).toString()) return QVariant(QSize(width, height)) if orientation == Qt.Horizontal and role == Qt.DisplayRole: try: return QVariant(self.__headers[section]) except IndexError: return QVariant() return QAbstractTableModel.headerData(self, section, orientation, role) def data(self, index, role): """ Public method to get data from the model. @param index index to get data for (QModelIndex) @param role role of the data to retrieve (integer) @return requested data """ if index.row() < 0 or index.row() >= self.rowCount(): return QVariant() if role in (Qt.DisplayRole, Qt.EditRole): row = index.row() if row < len(self.__allowedCookies): if index.column() == 0: return QVariant(self.__allowedCookies[row]) elif index.column() == 1: return QVariant(self.trUtf8("Allow")) else: return QVariant() row -= len(self.__allowedCookies) if row < len(self.__blockedCookies): if index.column() == 0: return QVariant(self.__blockedCookies[row]) elif index.column() == 1: return QVariant(self.trUtf8("Block")) else: return QVariant() row -= len(self.__blockedCookies) if row < len(self.__sessionCookies): if index.column() == 0: return QVariant(self.__sessionCookies[row]) elif index.column() == 1: return QVariant(self.trUtf8("Allow For Session")) else: return QVariant() return QVariant() return QVariant() def columnCount(self, parent = QModelIndex()): """ Public method to get the number of columns of the model. @param parent parent index (QModelIndex) @return number of columns (integer) """ if parent.isValid(): return 0 else: return len(self.__headers) def rowCount(self, parent = QModelIndex()): """ Public method to get the number of rows of the model. @param parent parent index (QModelIndex) @return number of columns (integer) """ if parent.isValid() or self.__cookieJar is None: return 0 else: return len(self.__allowedCookies) + \ len(self.__blockedCookies) + \ len(self.__sessionCookies) def removeRows(self, row, count, parent = QModelIndex()): """ Public method to remove entries from the model. @param row start row (integer) @param count number of rows to remove (integer) @param parent parent index (QModelIndex) @return flag indicating success (boolean) """ if parent.isValid() or self.__cookieJar is None: return False lastRow = row + count - 1 self.beginRemoveRows(parent, row, lastRow) for i in range(lastRow, row - 1, -1): rowToRemove = i if rowToRemove < len(self.__allowedCookies): del self.__allowedCookies[rowToRemove] continue rowToRemove -= len(self.__allowedCookies) if rowToRemove < len(self.__blockedCookies): del self.__blockedCookies[rowToRemove] continue rowToRemove -= len(self.__blockedCookies) if rowToRemove < len(self.__sessionCookies): del self.__sessionCookies[rowToRemove] continue self.__cookieJar.setAllowedCookies(self.__allowedCookies) self.__cookieJar.setBlockedCookies(self.__blockedCookies) self.__cookieJar.setAllowForSessionCookies(self.__sessionCookies) self.endRemoveRows() return True def addRule(self, host, rule): """ Public method to add an exception rule. @param host name of the host to add a rule for (QString) @param rule type of rule to add (CookieJar.Allow, CookieJar.Block or CookieJar.AllowForSession) """ if host.isEmpty(): return if rule == CookieJar.Allow: self.__addHost(host, self.__allowedCookies, self.__blockedCookies, self.__sessionCookies) return elif rule == CookieJar.Block: self.__addHost(host, self.__blockedCookies, self.__allowedCookies, self.__sessionCookies) return elif rule == CookieJar.AllowForSession: self.__addHost(host, self.__sessionCookies, self.__allowedCookies, self.__blockedCookies) return def __addHost(self, host, addList, removeList1, removeList2): """ Private method to add a host to an exception list. @param host name of the host to add (QString) @param addList reference to the list to add it to (QStringList) @param removeList1 reference to first list to remove it from (QStringList) @param removeList2 reference to second list to remove it from (QStringList) """ if not addList.contains(host): addList.append(host) removeList1.removeOne(host) removeList2.removeOne(host) # Avoid to have similar rules (with or without leading dot) # e.g. python-projects.org and .python-projects.org if host.startsWith("."): otherRule = host[1:] else: otherRule = '.' + host addList.removeOne(otherRule) removeList1.removeOne(otherRule) removeList2.removeOne(otherRule) self.reset() eric4-4.5.18/eric/Helpviewer/CookieJar/PaxHeaders.8617/CookieJar.py0000644000175000001440000000013212261012651022705 xustar000000000000000030 mtime=1388582313.497096062 30 atime=1389081084.456724373 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/CookieJar/CookieJar.py0000644000175000001440000003772612261012651022456 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a QNetworkCookieJar subclass with various accept policies. """ import os from PyQt4.QtCore import * from PyQt4.QtGui import * from PyQt4.QtNetwork import QNetworkCookieJar, QNetworkCookie from PyQt4.QtWebKit import QWebSettings from Utilities.AutoSaver import AutoSaver import Utilities import Preferences class CookieJar(QNetworkCookieJar): """ Class implementing a QNetworkCookieJar subclass with various accept policies. @signal cookiesChanged() emitted after the cookies have been changed """ JAR_VERSION = 23 AcceptAlways = 0 AcceptNever = 1 AcceptOnlyFromSitesNavigatedTo = 2 KeepUntilExpire = 0 KeepUntilExit = 1 KeepUntilTimeLimit = 2 Allow = 0 Block = 1 AllowForSession = 2 def __init__(self, parent = None): """ Constructor @param parent reference to the parent object (QObject) """ QNetworkCookieJar.__init__(self, parent) self.__loaded = False self.__acceptCookies = self.AcceptOnlyFromSitesNavigatedTo self.__saveTimer = AutoSaver(self, self.save) self.__cookiesFile = os.path.join(Utilities.getConfigDir(), "browser", "cookies.ini") def saveCookies(self, cookiesList): """ Public method to save the cookies. @param cookiesList list of cookies to be saved @return saved cookies as a byte array (QByteArray) """ data = QByteArray() stream = QDataStream(data, QIODevice.WriteOnly) stream.writeUInt16(self.JAR_VERSION) stream.writeUInt32(len(cookiesList)) for cookie in cookiesList: stream << cookie.toRawForm() return data def loadCookies(self, cookies): """ Public method to restore the saved cookies. @param cookies byte array containing the saved cookies (QByteArray) @return list of cookies """ if cookies.isEmpty(): return [] cookiesList = [] data = QByteArray(cookies) stream = QDataStream(data, QIODevice.ReadOnly) version = stream.readUInt16() if version != self.JAR_VERSION: return [] noCookies = stream.readUInt32() rawCookie = QByteArray() while not stream.atEnd(): stream >> rawCookie newCookies = QNetworkCookie.parseCookies(rawCookie) for newCookie in newCookies: cookiesList.append(newCookie) return cookiesList def close(self): """ Public slot to close the cookie jar. """ if self.__loaded and self.__keepCookies == self.KeepUntilExit: self.clear() self.__saveTimer.saveIfNeccessary() def clear(self): """ Public method to clear all cookies. """ if not self.__loaded: self.load() self.setAllCookies([]) self.__saveTimer.changeOccurred() self.emit(SIGNAL("cookiesChanged()")) def load(self): """ Public method to load the cookies. """ if self.__loaded: return cookieSettings = QSettings(self.__cookiesFile, QSettings.IniFormat) # load cookies cookies = cookieSettings.value("Cookies") if cookies.isValid(): cookiesList = self.loadCookies(cookies.toByteArray()) else: cookiesList = [] self.setAllCookies(cookiesList) # load exceptions self.__exceptionsBlock = \ cookieSettings.value("Exceptions/block").toStringList() self.__exceptionsAllow = \ cookieSettings.value("Exceptions/allow").toStringList() self.__exceptionsAllowForSession = \ cookieSettings.value("Exceptions/allowForSession").toStringList() self.__exceptionsBlock.sort() self.__exceptionsAllow.sort() self.__exceptionsAllowForSession.sort() self.__acceptCookies = Preferences.getHelp("AcceptCookies") self.__keepCookies = Preferences.getHelp("KeepCookiesUntil") if self.__keepCookies == self.KeepUntilExit: self.setAllCookies([]) self.__filterTrackingCookies = Preferences.getHelp("FilterTrackingCookies") self.__loaded = True self.emit(SIGNAL("cookiesChanged()")) def save(self): """ Public method to save the cookies. """ if not self.__loaded: return self.__purgeOldCookies() cookieSettings = QSettings(self.__cookiesFile, QSettings.IniFormat) cookiesList = self.allCookies() for index in range(len(cookiesList) -1, -1, -1): if cookiesList[index].isSessionCookie(): del cookiesList[index] cookies = self.saveCookies(cookiesList) cookieSettings.setValue("Cookies", QVariant(cookies)) cookieSettings.setValue("Exceptions/block", QVariant(self.__exceptionsBlock)) cookieSettings.setValue("Exceptions/allow", QVariant(self.__exceptionsAllow)) cookieSettings.setValue("Exceptions/allowForSession", QVariant(self.__exceptionsAllowForSession)) Preferences.setHelp("AcceptCookies", self.__acceptCookies) Preferences.setHelp("KeepCookiesUntil", self.__keepCookies) Preferences.setHelp("FilterTrackingCookies", int(self.__filterTrackingCookies)) def __purgeOldCookies(self): """ Private method to purge old cookies """ cookies = self.allCookies() if len(cookies) == 0: return oldCount = len(cookies) now = QDateTime.currentDateTime() for index in range(len(cookies) - 1, -1, -1): if not cookies[index].isSessionCookie() and \ cookies[index].expirationDate() < now: del cookies[index] if oldCount == len(cookies): return self.setAllCookies(cookies) self.emit(SIGNAL("cookiesChanged()")) def cookiesForUrl(self, url): """ Public method to get the cookies for a URL. @param url URL to get cookies for (QUrl) @return list of cookies (list of QNetworkCookie) """ if not self.__loaded: self.load() globalSettings = QWebSettings.globalSettings() if globalSettings.testAttribute(QWebSettings.PrivateBrowsingEnabled): return [] return QNetworkCookieJar.cookiesForUrl(self, url) def setCookiesFromUrl(self, cookieList, url): """ Public method to set cookies for a URL. @param cookieList list of cookies to set (list of QNetworkCookie) @param url url to set cookies for (QUrl) @return flag indicating cookies were set (boolean) """ if not self.__loaded: self.load() globalSettings = QWebSettings.globalSettings() if globalSettings.testAttribute(QWebSettings.PrivateBrowsingEnabled): return False host = url.host() eBlock = self.__isOnDomainList(self.__exceptionsBlock, host) eAllow = not eBlock and \ self.__isOnDomainList(self.__exceptionsAllow, host) eAllowSession = not eBlock and \ not eAllow and \ self.__isOnDomainList(self.__exceptionsAllowForSession, host) addedCookies = False acceptInitially = self.__acceptCookies != self.AcceptNever if (acceptInitially and not eBlock) or \ (not acceptInitially and (eAllow or eAllowSession)): # url domain == cookie domain soon = QDateTime.currentDateTime() soon = soon.addDays(90) for cookie in cookieList: lst = [] if not (self.__filterTrackingCookies and \ cookie.name().startsWith("__utm")): if eAllowSession: cookie.setExpirationDate(QDateTime()) if self.__keepCookies == self.KeepUntilTimeLimit and \ not cookie.isSessionCookie and \ cookie.expirationDate() > soon: cookie.setExpirationDate(soon) lst.append(cookie) if QNetworkCookieJar.setCookiesFromUrl(self, lst, url): addedCookies = True elif self.__acceptCookies == self.AcceptAlways: # force it in if wanted cookies = self.allCookies() for ocookie in cookies[:]: # does the cookie exist already? if cookie.name() == ocookie.name() and \ cookie.domain() == ocookie.domain() and \ cookie.path() == ocookie.path(): # found a match cookies.remove(ocookie) cookies.append(cookie) self.setAllCookies(cookies) addedCookies = True if addedCookies: self.__saveTimer.changeOccurred() self.emit(SIGNAL("cookiesChanged()")) return addedCookies def acceptPolicy(self): """ Public method to get the accept policy. @return current accept policy """ if not self.__loaded: self.load() return self.__acceptCookies def setAcceptPolicy(self, policy): """ Public method to set the accept policy. @param policy accept policy to be set """ if not self.__loaded: self.load() if policy > self.AcceptOnlyFromSitesNavigatedTo: return if policy == self.__acceptCookies: return self.__acceptCookies = policy self.__saveTimer.changeOccurred() def keepPolicy(self): """ Private method to get the keep policy. """ if not self.__loaded: self.load() return self.__keepCookies def setKeepPolicy(self, policy): """ Public method to set the keep policy. @param policy keep policy to be set """ if not self.__loaded: self.load() if policy > self.KeepUntilTimeLimit: return if policy == self.__keepCookies: return self.__keepCookies = policy self.__saveTimer.changeOccurred() def blockedCookies(self): """ Public method to return the blocked cookies. @return list of blocked cookies (QStringList) """ if not self.__loaded: self.load() return self.__exceptionsBlock def allowedCookies(self): """ Public method to return the allowed cookies. @return list of allowed cookies (QStringList) """ if not self.__loaded: self.load() return self.__exceptionsAllow def allowForSessionCookies(self): """ Public method to return the allowed session cookies. @return list of allowed session cookies (QStringList) """ if not self.__loaded: self.load() return self.__exceptionsAllowForSession def setBlockedCookies(self, list_): """ Public method to set the list of blocked cookies. @param list_ list of blocked cookies (QStringList) """ if not self.__loaded: self.load() self.__exceptionsBlock = QStringList(list_) self.__exceptionsBlock.sort() self.__applyRules() self.__saveTimer.changeOccurred() def setAllowedCookies(self, list_): """ Public method to set the list of allowed cookies. @param list_ list of allowed cookies (QStringList) """ if not self.__loaded: self.load() self.__exceptionsAllow = QStringList(list_) self.__exceptionsAllow.sort() self.__applyRules() self.__saveTimer.changeOccurred() def setAllowForSessionCookies(self, list_): """ Public method to set the list of allowed session cookies. @param list_ list of allowed session cookies (QStringList) """ if not self.__loaded: self.load() self.__exceptionsAllowForSession = QStringList(list_) self.__exceptionsAllowForSession.sort() self.__applyRules() self.__saveTimer.changeOccurred() def filterTrackingCookies(self): """ Public method to get the filter tracking cookies flag. @return filter tracking cookies flag (boolean) """ return self.__filterTrackingCookies def setFilterTrackingCookies(self, filterTrackingCookies): """ Public method to set the filter tracking cookies flag. @param filterTrackingCookies filter tracking cookies flag (boolean) """ self.__filterTrackingCookies = filterTrackingCookies def __isOnDomainList(self, rules, domain): """ Private method to check, if either the rule matches the domain exactly or the domain ends with ".rule". @param rules list of rules (QStringList) @param domain domain name to check (QString) @return flag indicating a match (boolean) """ domain = QString(domain) for rule in rules: if rule.startsWith("."): if domain.endsWith(rule): return True withoutDot = rule.right(rule.size() - 1) if domain == withoutDot: return True else: domainEnding = domain.right(rule.size() + 1) if not domainEnding.isEmpty() and \ domainEnding[0] == "." and \ domain.endsWith(rule): return True if rule == domain: return True return False def __applyRules(self): """ Private method to apply the cookie rules. """ cookiesList = self.allCookies() changed = False for index in range(len(cookiesList) - 1, -1, -1): cookie = cookiesList[index] if self.__isOnDomainList(self.__exceptionsBlock, cookie.domain()): del cookiesList[index] changed = True elif self.__isOnDomainList(self.__exceptionsAllowForSession, cookie.domain()): cookie.setExpirationDate(QDateTime()) changed = True if changed: self.setAllCookies(cookiesList) self.__saveTimer.changeOccurred() self.emit(SIGNAL("cookiesChanged()")) def cookies(self): """ Public method to get the cookies of the cookie jar. @return list of all cookies (list of QNetworkCookie) """ if not self.__loaded: self.load() return self.allCookies() def setCookies(self, cookies): """ Public method to set all cookies. @param cookies list of cookies to be set. """ if not self.__loaded: self.load() self.setAllCookies(cookies) self.__saveTimer.changeOccurred() self.emit(SIGNAL("cookiesChanged()")) eric4-4.5.18/eric/Helpviewer/CookieJar/PaxHeaders.8617/CookiesExceptionsDialog.py0000644000175000001440000000013212261012651025615 xustar000000000000000030 mtime=1388582313.500096101 30 atime=1389081084.457724373 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/CookieJar/CookiesExceptionsDialog.py0000644000175000001440000000765612261012651025365 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a dialog for the configuration of cookie exceptions. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from CookieJar import CookieJar from CookieExceptionsModel import CookieExceptionsModel from CookieModel import CookieModel from Ui_CookiesExceptionsDialog import Ui_CookiesExceptionsDialog import UI.PixmapCache class CookiesExceptionsDialog(QDialog, Ui_CookiesExceptionsDialog): """ Class implementing a dialog for the configuration of cookie exceptions. """ def __init__(self, cookieJar, parent = None): """ Constructor @param cookieJar reference to the cookie jar (CookieJar) @param parent reference to the parent widget (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.clearButton.setIcon(UI.PixmapCache.getIcon("clearLeft.png")) self.__cookieJar = cookieJar self.connect(self.removeButton, SIGNAL("clicked()"), self.exceptionsTable.removeSelected) self.connect(self.removeAllButton, SIGNAL("clicked()"), self.exceptionsTable.removeAll) self.exceptionsTable.verticalHeader().hide() self.__exceptionsModel = CookieExceptionsModel(cookieJar) self.__proxyModel = QSortFilterProxyModel(self) self.__proxyModel.setSourceModel(self.__exceptionsModel) self.connect(self.searchEdit, SIGNAL("textChanged(QString)"), self.__proxyModel.setFilterFixedString) self.exceptionsTable.setModel(self.__proxyModel) cookieModel = CookieModel(cookieJar, self) self.domainEdit.setCompleter(QCompleter(cookieModel, self.domainEdit)) f = QFont() f.setPointSize(10) fm = QFontMetrics(f) height = fm.height() + fm.height() / 3 self.exceptionsTable.verticalHeader().setDefaultSectionSize(height) self.exceptionsTable.verticalHeader().setMinimumSectionSize(-1) for section in range(self.__exceptionsModel.columnCount()): header = self.exceptionsTable.horizontalHeader().sectionSizeHint(section) if section == 0: header = fm.width("averagebiglonghost.averagedomain.info") elif section == 1: header = fm.width(self.trUtf8("Allow For Session")) buffer = fm.width("mm") header += buffer self.exceptionsTable.horizontalHeader().resizeSection(section, header) def setDomainName(self, domain): """ Public method to set the domain to be displayed. @param domain domain name to be displayed (string or QString) """ self.domainEdit.setText(domain) @pyqtSignature("QString") def on_domainEdit_textChanged(self, txt): """ Private slot to handle a change of the domain edit text. @param txt current text of the edit (QString) """ enabled = not txt.isEmpty() self.blockButton.setEnabled(enabled) self.allowButton.setEnabled(enabled) self.allowForSessionButton.setEnabled(enabled) @pyqtSignature("") def on_blockButton_clicked(self): """ Private slot to block cookies of a domain. """ self.__exceptionsModel.addRule(self.domainEdit.text(), CookieJar.Block) @pyqtSignature("") def on_allowForSessionButton_clicked(self): """ Private slot to allow cookies of a domain for the current session only. """ self.__exceptionsModel.addRule(self.domainEdit.text(), CookieJar.AllowForSession) @pyqtSignature("") def on_allowButton_clicked(self): """ Private slot to allow cookies of a domain. """ self.__exceptionsModel.addRule(self.domainEdit.text(), CookieJar.Allow) eric4-4.5.18/eric/Helpviewer/CookieJar/PaxHeaders.8617/CookiesConfigurationDialog.ui0000644000175000001440000000007411205751714026304 xustar000000000000000030 atime=1389081084.469724371 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/CookieJar/CookiesConfigurationDialog.ui0000644000175000001440000001334311205751714026035 0ustar00detlevusers00000000000000 CookiesConfigurationDialog 0 0 500 200 Configure cookies true <b>Configure cookies</b> QFrame::HLine QFrame::Sunken Qt::Horizontal &Accept Cookies: acceptCombo 0 0 Select the accept policy Always Never Only from sites you navigate to Show a dialog to configure exceptions &Exceptions... &Keep until: keepUntilCombo 0 0 Select the keep policy They expire I exit the application At most 90 days Show a dialog listing all cookies &Show Cookies... Select to filter tracking cookies &Filter Tracking Cookies Qt::Vertical 20 10 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok acceptCombo exceptionsButton keepUntilCombo cookiesButton filterTrackingCookiesCheckbox buttonBox buttonBox accepted() CookiesConfigurationDialog accept() 248 254 157 274 buttonBox rejected() CookiesConfigurationDialog reject() 316 260 286 274 eric4-4.5.18/eric/Helpviewer/CookieJar/PaxHeaders.8617/CookieModel.py0000644000175000001440000000013212261012651023231 xustar000000000000000030 mtime=1388582313.502096126 30 atime=1389081084.469724371 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/CookieJar/CookieModel.py0000644000175000001440000001121012261012651022756 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing the cookie model. """ from PyQt4.QtCore import * from PyQt4.QtGui import * class CookieModel(QAbstractTableModel): """ Class implementing the cookie model. """ def __init__(self, cookieJar, parent = None): """ Constructor @param cookieJar reference to the cookie jar (CookieJar) @param parent reference to the parent object (QObject) """ QAbstractTableModel.__init__(self, parent) self.__headers = [ self.trUtf8("Website"), self.trUtf8("Name"), self.trUtf8("Path"), self.trUtf8("Secure"), self.trUtf8("Expires"), self.trUtf8("Contents"), ] self.__cookieJar = cookieJar self.connect(self.__cookieJar, SIGNAL("cookiesChanged()"), self.__cookiesChanged) self.__cookieJar.load() def headerData(self, section, orientation, role): """ Public method to get header data from the model. @param section section number (integer) @param orientation orientation (Qt.Orientation) @param role role of the data to retrieve (integer) @return requested data """ if role == Qt.SizeHintRole: fm = QFontMetrics(QFont()) height = fm.height() + fm.height() / 3 width = \ fm.width(self.headerData(section, orientation, Qt.DisplayRole).toString()) return QVariant(QSize(width, height)) if orientation == Qt.Horizontal: if role == Qt.DisplayRole: try: return QVariant(self.__headers[section]) except IndexError: return QVariant() return QVariant() return QAbstractTableModel.headerData(self, section, orientation, role) def data(self, index, role): """ Public method to get data from the model. @param index index to get data for (QModelIndex) @param role role of the data to retrieve (integer) @return requested data (QVariant) """ lst = [] if self.__cookieJar is not None: lst = self.__cookieJar.cookies() if index.row() < 0 or index.row() >= len(lst): return QVariant() if role in (Qt.DisplayRole, Qt.EditRole): cookie = lst[index.row()] col = index.column() if col == 0: return QVariant(cookie.domain()) elif col == 1: return QVariant(cookie.name()) elif col == 2: return QVariant(cookie.path()) elif col == 3: return QVariant(cookie.isSecure()) elif col == 4: return QVariant(cookie.expirationDate()) elif col == 5: return QVariant(cookie.value()) else: return QVariant() return QVariant() def columnCount(self, parent = QModelIndex()): """ Public method to get the number of columns of the model. @param parent parent index (QModelIndex) @return number of columns (integer) """ if parent.isValid(): return 0 else: return len(self.__headers) def rowCount(self, parent = QModelIndex()): """ Public method to get the number of rows of the model. @param parent parent index (QModelIndex) @return number of columns (integer) """ if parent.isValid() or self.__cookieJar is None: return 0 else: return len(self.__cookieJar.cookies()) def removeRows(self, row, count, parent = QModelIndex()): """ Public method to remove entries from the model. @param row start row (integer) @param count number of rows to remove (integer) @param parent parent index (QModelIndex) @return flag indicating success (boolean) """ if parent.isValid() or self.__cookieJar is None: return False lastRow = row + count - 1 self.beginRemoveRows(parent, row, lastRow) lst = self.__cookieJar.cookies() del lst[row:lastRow + 1] self.__cookieJar.setCookies(lst) self.endRemoveRows() return True def __cookiesChanged(self): """ Private slot handling changes of the cookies list in the cookie jar. """ self.reset() eric4-4.5.18/eric/Helpviewer/CookieJar/PaxHeaders.8617/CookiesDialog.ui0000644000175000001440000000013212033057066023546 xustar000000000000000030 mtime=1349279286.509436174 30 atime=1389081084.474724374 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/CookieJar/CookiesDialog.ui0000644000175000001440000001243612033057066023306 0ustar00detlevusers00000000000000 CookiesDialog 0 0 500 350 Cookies true Qt::Horizontal 40 20 0 Enter search term for cookies Press to clear the search edit true QAbstractItemView::SelectRows Qt::ElideMiddle false true Press to remove the selected entries &Remove false Press to remove all entries Remove &All false Press to open the cookies exceptions dialog to add a new rule Add R&ule... false Qt::Horizontal 208 20 Qt::Horizontal QDialogButtonBox::Close E4TableView QTableView
    E4Gui/E4TableView.h
    searchEdit clearButton cookiesTable removeButton removeAllButton addButton buttonBox buttonBox accepted() CookiesDialog accept() 228 274 157 274 buttonBox rejected() CookiesDialog reject() 316 260 286 274 clearButton clicked() searchEdit clear() 376 21 329 23
    eric4-4.5.18/eric/Helpviewer/CookieJar/PaxHeaders.8617/__init__.py0000644000175000001440000000013212261012651022576 xustar000000000000000030 mtime=1388582313.504096151 30 atime=1389081084.474724374 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/CookieJar/__init__.py0000644000175000001440000000025712261012651022334 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Package implementing a cookie jar and related dialogs with models. """ eric4-4.5.18/eric/Helpviewer/CookieJar/PaxHeaders.8617/CookieDetailsDialog.py0000644000175000001440000000013212261012651024676 xustar000000000000000030 mtime=1388582313.509096214 30 atime=1389081084.474724374 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/CookieJar/CookieDetailsDialog.py0000644000175000001440000000254412261012651024435 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a dialog showing the cookie data. """ from PyQt4.QtGui import QDialog from PyQt4.QtCore import pyqtSignature from Ui_CookieDetailsDialog import Ui_CookieDetailsDialog class CookieDetailsDialog(QDialog, Ui_CookieDetailsDialog): """ Class implementing a dialog showing the cookie data. """ def __init__(self, parent = None): """ Constructor @param parent reference to the parent object (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) def setData(self, domain, name, path, secure, expires, value): """ Public method to set the data to be shown. @param domain domain of the cookie (QString) @param name name of the cookie (QString) @param path path of the cookie (QString) @param secure flag indicating a secure cookie (boolean) @param expires expiration time of the cookie (QString) @param value value of the cookie (QString) """ self.domainEdit.setText(domain) self.nameEdit.setText(name) self.pathEdit.setText(path) self.secureCheckBox.setChecked(secure) self.expirationEdit.setText(expires) self.valueEdit.setPlainText(value) eric4-4.5.18/eric/Helpviewer/CookieJar/PaxHeaders.8617/CookieDetailsDialog.ui0000644000175000001440000000007411330107343024667 xustar000000000000000030 atime=1389081084.474724374 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/CookieJar/CookieDetailsDialog.ui0000644000175000001440000000773611330107343024431 0ustar00detlevusers00000000000000 CookieDetailsDialog 0 0 400 300 Cookie Details true Domain: true Name: true Path: true Secure: false Expires: true Contents: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop true Qt::Horizontal QDialogButtonBox::Close domainEdit nameEdit pathEdit secureCheckBox expirationEdit valueEdit buttonBox buttonBox accepted() CookieDetailsDialog accept() 248 254 157 274 buttonBox rejected() CookieDetailsDialog reject() 316 260 286 274 eric4-4.5.18/eric/Helpviewer/CookieJar/PaxHeaders.8617/CookiesDialog.py0000644000175000001440000000013212261012651023553 xustar000000000000000030 mtime=1388582313.517096316 30 atime=1389081084.485724372 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/CookieJar/CookiesDialog.py0000644000175000001440000001223612261012651023311 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a dialog to show all cookies. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from CookieModel import CookieModel from CookieDetailsDialog import CookieDetailsDialog from CookiesExceptionsDialog import CookiesExceptionsDialog from Ui_CookiesDialog import Ui_CookiesDialog import UI.PixmapCache class CookiesDialog(QDialog, Ui_CookiesDialog): """ Class implementing a dialog to show all cookies. """ def __init__(self, cookieJar, parent = None): """ Constructor @param cookieJar reference to the cookie jar (CookieJar) @param parent reference to the parent widget (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.clearButton.setIcon(UI.PixmapCache.getIcon("clearLeft.png")) self.addButton.setEnabled(False) self.__cookieJar = cookieJar self.connect(self.removeButton, SIGNAL("clicked()"), self.cookiesTable.removeSelected) self.connect(self.removeAllButton, SIGNAL("clicked()"), self.cookiesTable.removeAll) self.cookiesTable.verticalHeader().hide() model = CookieModel(cookieJar, self) self.__proxyModel = QSortFilterProxyModel(self) self.__proxyModel.setSourceModel(model) self.connect(self.searchEdit, SIGNAL("textChanged(QString)"), self.__proxyModel.setFilterFixedString) self.cookiesTable.setModel(self.__proxyModel) self.connect(self.cookiesTable, SIGNAL("doubleClicked(const QModelIndex&)"), self.__showCookieDetails) self.connect(self.cookiesTable.selectionModel(), SIGNAL("selectionChanged(const QItemSelection&, const QItemSelection&)"), self.__tableSelectionChanged) self.connect(self.cookiesTable.model(), SIGNAL("modelReset()"), self.__tableModelReset) fm = QFontMetrics(QFont()) height = fm.height() + fm.height() / 3 self.cookiesTable.verticalHeader().setDefaultSectionSize(height) self.cookiesTable.verticalHeader().setMinimumSectionSize(-1) for section in range(model.columnCount()): header = self.cookiesTable.horizontalHeader().sectionSizeHint(section) if section == 0: header = fm.width("averagebiglonghost.averagedomain.info") elif section == 1: header = fm.width("_session_id") elif section == 4: header = fm.width(QDateTime.currentDateTime().toString(Qt.LocalDate)) buffer = fm.width("mm") header += buffer self.cookiesTable.horizontalHeader().resizeSection(section, header) self.cookiesTable.horizontalHeader().setStretchLastSection(True) self.__detailsDialog = None def __showCookieDetails(self, index): """ Private slot to show a dialog with the cookie details. @param index index of the entry to show (QModelIndex) """ if not index.isValid(): return cookiesTable = self.sender() if cookiesTable is None: return model = cookiesTable.model() row = index.row() domain = model.data(model.index(row, 0)).toString() name = model.data(model.index(row, 1)).toString() path = model.data(model.index(row, 2)).toString() secure = model.data(model.index(row, 3)).toBool() expires = model.data(model.index(row, 4)).toDateTime()\ .toString("yyyy-MM-dd hh:mm") value = QString( QByteArray.fromPercentEncoding(model.data(model.index(row, 5)).toByteArray())) if self.__detailsDialog is None: self.__detailsDialog = CookieDetailsDialog(self) self.__detailsDialog.setData(domain, name, path, secure, expires, value) self.__detailsDialog.show() @pyqtSignature("") def on_addButton_clicked(self): """ Private slot to add a new exception. """ selection = self.cookiesTable.selectionModel().selectedRows() if len(selection) == 0: return firstSelected = selection[0] domainSelection = firstSelected.sibling(firstSelected.row(), 0) domain = self.__proxyModel.data(domainSelection, Qt.DisplayRole).toString() dlg = CookiesExceptionsDialog(self.__cookieJar, self) dlg.setDomainName(domain) dlg.exec_() def __tableSelectionChanged(self, selected, deselected): """ Private slot to handle a change of selected items. @param selected selected indexes (QItemSelection) @param deselected deselected indexes (QItemSelection) """ self.addButton.setEnabled(len(selected.indexes()) > 0) def __tableModelReset(self): """ Private slot to handle a reset of the cookies table. """ self.addButton.setEnabled(False) eric4-4.5.18/eric/Helpviewer/CookieJar/PaxHeaders.8617/CookiesExceptionsDialog.ui0000644000175000001440000000013212033057237025610 xustar000000000000000030 mtime=1349279391.672485163 30 atime=1389081084.485724372 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/CookieJar/CookiesExceptionsDialog.ui0000644000175000001440000002070312033057237025344 0ustar00detlevusers00000000000000 CookiesExceptionsDialog 0 0 500 450 Cookie Exceptions true New Exception &Domain: domainEdit Enter the domain name Qt::Horizontal 81 25 false Press to always reject cookies for the domain &Block false false Press to accept cookies for the domain for the current session Allow For &Session false false Press to always accept cookies for the domain Allo&w false Exceptions Qt::Horizontal 40 20 0 Enter search term for exceptions Press to clear the search edit true QAbstractItemView::SelectRows Qt::ElideMiddle false true false Press to remove the selected entries &Remove false Press to remove all entries Remove &All false Qt::Horizontal 286 20 Qt::Horizontal QDialogButtonBox::Close E4TableView QTableView
    E4Gui/E4TableView.h
    domainEdit blockButton allowForSessionButton allowButton searchEdit clearButton exceptionsTable removeButton removeAllButton buttonBox buttonBox accepted() CookiesExceptionsDialog accept() 227 429 157 274 buttonBox rejected() CookiesExceptionsDialog reject() 295 435 286 274 clearButton clicked() searchEdit clear() 467 159 432 158
    eric4-4.5.18/eric/Helpviewer/CookieJar/PaxHeaders.8617/CookiesConfigurationDialog.py0000644000175000001440000000013212261012651026303 xustar000000000000000030 mtime=1388582313.519096341 30 atime=1389081084.485724372 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/CookieJar/CookiesConfigurationDialog.py0000644000175000001440000000576612261012651026053 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing the cookies configuration dialog. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from CookiesDialog import CookiesDialog from CookiesExceptionsDialog import CookiesExceptionsDialog from CookieJar import CookieJar from Ui_CookiesConfigurationDialog import Ui_CookiesConfigurationDialog import Preferences class CookiesConfigurationDialog(QDialog, Ui_CookiesConfigurationDialog): """ Class implementing the cookies configuration dialog. """ def __init__(self, parent): """ Constructor """ QDialog.__init__(self, parent) self.setupUi(self) self.__mw = parent jar = self.__mw.cookieJar() acceptPolicy = jar.acceptPolicy() if acceptPolicy == CookieJar.AcceptAlways: self.acceptCombo.setCurrentIndex(0) elif acceptPolicy == CookieJar.AcceptNever: self.acceptCombo.setCurrentIndex(1) elif acceptPolicy == CookieJar.AcceptOnlyFromSitesNavigatedTo: self.acceptCombo.setCurrentIndex(2) keepPolicy = jar.keepPolicy() if keepPolicy == CookieJar.KeepUntilExpire: self.keepUntilCombo.setCurrentIndex(0) elif keepPolicy == CookieJar.KeepUntilExit: self.keepUntilCombo.setCurrentIndex(1) elif keepPolicy == CookieJar.KeepUntilTimeLimit: self.keepUntilCombo.setCurrentIndex(2) self.filterTrackingCookiesCheckbox.setChecked(jar.filterTrackingCookies()) def accept(self): """ Public slot to accept the dialog. """ acceptSelection = self.acceptCombo.currentIndex() if acceptSelection == 0: acceptPolicy = CookieJar.AcceptAlways elif acceptSelection == 1: acceptPolicy = CookieJar.AcceptNever elif acceptSelection == 2: acceptPolicy = CookieJar.AcceptOnlyFromSitesNavigatedTo keepSelection = self.keepUntilCombo.currentIndex() if keepSelection == 0: keepPolicy = CookieJar.KeepUntilExpire elif keepSelection == 1: keepPolicy = CookieJar.KeepUntilExit elif keepSelection == 2: keepPolicy = CookieJar.KeepUntilTimeLimit jar = self.__mw.cookieJar() jar.setAcceptPolicy(acceptPolicy) jar.setKeepPolicy(keepPolicy) jar.setFilterTrackingCookies(self.filterTrackingCookiesCheckbox.isChecked()) QDialog.accept(self) @pyqtSignature("") def on_exceptionsButton_clicked(self): """ Private slot to show the cookies exceptions dialog. """ dlg = CookiesExceptionsDialog(self.__mw.cookieJar()) dlg.exec_() @pyqtSignature("") def on_cookiesButton_clicked(self): """ Private slot to show the cookies dialog. """ dlg = CookiesDialog(self.__mw.cookieJar()) dlg.exec_() eric4-4.5.18/eric/Helpviewer/PaxHeaders.8617/AdBlock0000644000175000001440000000013212262730776020061 xustar000000000000000030 mtime=1389081086.301724332 30 atime=1389081086.305724332 30 ctime=1389081086.315724332 eric4-4.5.18/eric/Helpviewer/AdBlock/0000755000175000001440000000000012262730776017670 5ustar00detlevusers00000000000000eric4-4.5.18/eric/Helpviewer/AdBlock/PaxHeaders.8617/AdBlockDialog.py0000644000175000001440000000013212261012651023107 xustar000000000000000030 mtime=1388582313.524096404 30 atime=1389081084.485724372 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/AdBlock/AdBlockDialog.py0000644000175000001440000001265512261012651022652 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing the AdBlock configuration dialog. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from E4Gui.E4TreeSortFilterProxyModel import E4TreeSortFilterProxyModel import Helpviewer.HelpWindow from Ui_AdBlockDialog import Ui_AdBlockDialog from AdBlockModel import AdBlockModel from AdBlockRule import AdBlockRule import UI.PixmapCache class AdBlockDialog(QDialog, Ui_AdBlockDialog): """ Class implementing the AdBlock configuration dialog. """ def __init__(self, parent = None): """ Constructor """ QDialog.__init__(self, parent) self.setupUi(self) self.clearButton.setIcon(UI.PixmapCache.getIcon("clearLeft.png")) self.__adBlockModel = AdBlockModel(self) self.__proxyModel = E4TreeSortFilterProxyModel(self) self.__proxyModel.setSourceModel(self.__adBlockModel) self.subscriptionsTree.setModel(self.__proxyModel) self.connect(self.searchEdit, SIGNAL("textChanged(QString)"), self.__proxyModel.setFilterFixedString) manager = Helpviewer.HelpWindow.HelpWindow.adblockManager() self.adBlockGroup.setChecked(manager.isEnabled()) self.connect(self.adBlockGroup, SIGNAL("toggled(bool)"), manager.setEnabled) menu = QMenu(self) self.connect(menu, SIGNAL("aboutToShow()"), self.__aboutToShowActionMenu) self.actionButton.setMenu(menu) self.actionButton.setIcon(UI.PixmapCache.getIcon("adBlockAction.png")) self.actionButton.setPopupMode(QToolButton.InstantPopup) subscription = manager.customRules() subscriptionIndex = self.__adBlockModel.subscriptionIndex(subscription) self.subscriptionsTree.expand(self.__proxyModel.mapFromSource(subscriptionIndex)) def model(self): """ Public method to return a reference to the subscriptions tree model. """ return self.subscriptionsTree.model() def setCurrentIndex(self, index): """ Private slot to set the current index of the subscriptions tree. @param index index to be set (QModelIndex) """ self.subscriptionsTree.setCurrentIndex(index) def __aboutToShowActionMenu(self): """ Private slot to show the actions menu. """ menu = self.actionButton.menu() menu.clear() menu.addAction(self.trUtf8("Add Custom Rule"), self.addCustomRule) menu.addAction(self.trUtf8("Learn more about writing rules..."), self.__learnAboutWritingFilters) menu.addSeparator() idx = self.__proxyModel.mapToSource(self.subscriptionsTree.currentIndex()) act = menu.addAction(self.trUtf8("Update Subscription"), self.__updateSubscription) act.setEnabled(idx.isValid()) menu.addAction(self.trUtf8("Browse Subscriptions..."), self.__browseSubscriptions) menu.addSeparator() act = menu.addAction(self.trUtf8("Remove Subscription"), self.__removeSubscription) act.setEnabled(idx.isValid()) def addCustomRule(self, rule = ""): """ Public slot to add a custom AdBlock rule. @param rule string defining the rule to be added (string or QString) """ manager = Helpviewer.HelpWindow.HelpWindow.adblockManager() subscription = manager.customRules() assert subscription is not None subscription.addRule(AdBlockRule(rule)) QApplication.processEvents() parent = self.__adBlockModel.subscriptionIndex(subscription) cnt = self.__adBlockModel.rowCount(parent) ruleIndex = self.__adBlockModel.index(cnt - 1, 0, parent) self.subscriptionsTree.expand(self.__proxyModel.mapFromSource(parent)) self.subscriptionsTree.edit(self.__proxyModel.mapFromSource(ruleIndex)) def __updateSubscription(self): """ Private slot to update the selected subscription. """ idx = self.__proxyModel.mapToSource(self.subscriptionsTree.currentIndex()) if not idx.isValid(): return if idx.parent().isValid(): idx = idx.parent() subscription = self.__adBlockModel.subscription(idx) subscription.updateNow() def __browseSubscriptions(self): """ Private slot to browse the list of available AdBlock subscriptions. """ QDesktopServices.openUrl(QUrl("http://adblockplus.org/en/subscriptions")) def __learnAboutWritingFilters(self): """ Private slot to show the web page about how to write filters. """ QDesktopServices.openUrl(QUrl("http://adblockplus.org/en/filters")) def __removeSubscription(self): """ Private slot to remove the selected subscription. """ idx = self.__proxyModel.mapToSource(self.subscriptionsTree.currentIndex()) if not idx.isValid(): return if idx.parent().isValid(): idx = idx.parent() subscription = self.__adBlockModel.subscription(idx) manager = Helpviewer.HelpWindow.HelpWindow.adblockManager() manager.removeSubscription(subscription) eric4-4.5.18/eric/Helpviewer/AdBlock/PaxHeaders.8617/AdBlockNetwork.py0000644000175000001440000000013112261012651023340 xustar000000000000000029 mtime=1388582313.52609643 30 atime=1389081084.485724372 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/AdBlock/AdBlockNetwork.py0000644000175000001440000000262312261012651023076 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing the network block class. """ from PyQt4.QtCore import * import Helpviewer.HelpWindow from AdBlockBlockedNetworkReply import AdBlockBlockedNetworkReply class AdBlockNetwork(QObject): """ Class implementing a network block. """ def block(self, request): """ Public method to check for a network block. @return reply object (QNetworkReply) or None """ url = request.url() if url.scheme() in ["data", "pyrc", "qthelp"]: return None manager = Helpviewer.HelpWindow.HelpWindow.adblockManager() if not manager.isEnabled(): return None urlString = QString.fromUtf8(url.toEncoded()) blockedRule = None blockingSubscription = None for subscription in manager.subscriptions(): if subscription.allow(urlString): return None rule = subscription.block(urlString) if rule is not None: blockedRule = rule blockingSubscription = subscription break if blockedRule is not None: reply = AdBlockBlockedNetworkReply(request, blockedRule, self) return reply return None eric4-4.5.18/eric/Helpviewer/AdBlock/PaxHeaders.8617/AdBlockPage.py0000644000175000001440000000013212261012651022564 xustar000000000000000030 mtime=1388582313.528096455 30 atime=1389081084.486724372 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/AdBlock/AdBlockPage.py0000644000175000001440000000175212261012651022323 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a class to apply AdBlock rules to a web page. """ from PyQt4.QtCore import * import Helpviewer.HelpWindow class AdBlockPage(QObject): """ Class to apply AdBlock rules to a web page. """ def __checkRule(self, rule, page, host): """ Private method to check, if a rule applies to the given web page and host. @param rule reference to the rule to check (AdBlockRule) @param page reference to the web page (QWebPage) @param host host name (string or QString) """ # This is a noop until Qt 4.6 is supported by PyQt4 return def applyRulesToPage(self, page): """ Public method to applay AdBlock rules to a web page. @param page reference to the web page (QWebPage) """ # This is a noop until Qt 4.6 is supported by PyQt4 return eric4-4.5.18/eric/Helpviewer/AdBlock/PaxHeaders.8617/AdBlockRule.py0000644000175000001440000000013212261012651022617 xustar000000000000000030 mtime=1388582313.531096493 30 atime=1389081084.486724372 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/AdBlock/AdBlockRule.py0000644000175000001440000001552612261012651022362 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing the AdBlock rule class. """ from PyQt4.QtCore import * class AdBlockRule(object): """ Class implementing the AdBlock rule. """ def __init__(self, filter = QString()): """ Constructor """ self.__regExp = QRegExp() self.__options = QStringList() self.setFilter(filter) def filter(self): """ Public method to get the rule filter string. @return rule filter string (QString) """ return QString(self.__filter) def setFilter(self, filter): """ Public method to set the rule filter string. @param filter rule filter string (string or QString) """ self.__filter = QString(filter) self.__cssRule = False self.__enabled = True self.__exception = False regExpRule = False if filter.startsWith("!") or filter.trimmed().isEmpty(): self.__enabled = False if filter.contains("##"): self.__cssRule = True parsedLine = QString(filter) if parsedLine.startsWith("@@"): self.__exception = True parsedLine = parsedLine[2:] if parsedLine.startsWith("/"): if parsedLine.endsWith("/"): parsedLine = parsedLine[1:-1] regExpRule = True options = parsedLine.indexOf("$") if options >= 0: try: self.__options = parsedLine[options + 1:].split(",") except IndexError: self.__options = QStringList() parsedLine = parsedLine[:options] self.setPattern(parsedLine, regExpRule) if "match-case" in self.__options: self.__regExp.setCaseSensitivity(Qt.CaseSensitive) self.__options.removeAll("match-case") def networkMatch(self, encodedUrl): """ Public method to check the rule for a match. @param encodedUrl string encoded URL to be checked (string or QString) @return flag indicating a match (boolean) """ encodedUrl = QString(encodedUrl) if self.__cssRule: return False if not self.__enabled: return False matched = self.__regExp.indexIn(encodedUrl) != -1 if matched and not len(self.__options) == 0: # only domain rules are supported if len(self.__options) == 1: for option in self.__options: if option.startsWith("domain="): url = QUrl.fromEncoded(encodedUrl.toUtf8()) host = url.host() domainOptions = option[7:].split("|") for domainOption in domainOptions: negate = domainOption.startsWith("~") if negate: domainOption = domainOption[1:] hostMatched = domainOption == host if hostMatched and not negate: return True if not hostMatched and negate: return True return False return matched def isException(self): """ Public method to check, if the rule defines an exception. @return flag indicating an exception (boolean) """ return self.__exception def setException(self, exception): """ Public method to set the rule's exception flag. @param exception flag indicating an exception rule (boolean) """ self.__exception = exception def isEnabled(self): """ Public method to check, if the rule is enabled. @return flag indicating enabled state (boolean) """ return self.__enabled def setEnabled(self, enabled): """ Public method to set the rule's enabled state. @param enabled flag indicating the new enabled state (boolean) """ self.__enabled = enabled if not enabled: self.__filter = "!" + self.__filter else: self.__filter = self.__filter[1:] def isCSSRule(self): """ Public method to check, if the rule is a CSS rule. @return flag indicating a CSS rule (boolean) """ return self.__cssRule def regExpPattern(self): """ Public method to get the regexp pattern of the rule. @return regexp pattern (QRegExp) """ return self.__regExp.pattern() def __convertPatternToRegExp(self, wildcardPattern): """ Private method to convert a wildcard pattern to a regular expression. @param wildcardPattern string containing the wildcard pattern (string or QString) @return string containing a regular expression (QString) """ pattern = QString(wildcardPattern) pattern = pattern.replace(QRegExp(r"\*+"), "*") # remove multiple wildcards pattern = pattern.replace(QRegExp(r"\^\|$"), "^") # remove anchors following separator placeholder pattern = pattern.replace(QRegExp(r"^(\*)"), "") # remove leading wildcards pattern = pattern.replace(QRegExp(r"(\*)$"), "") # remove trailing wildcards pattern = pattern.replace(QRegExp(r"(\W)"), r"\\\1") # escape special symbols pattern = pattern.replace(QRegExp(r"^\\\|\\\|"), r"^[\w\-]+:\/+(?!\/)(?:[^\/]+\.)?") # process extended anchor at expression start pattern = pattern.replace(QRegExp(r"\\\^"), r"(?:[^\w\d\-.%]|$)") # process separator placeholders pattern = pattern.replace(QRegExp(r"^\\\|"), "^") # process anchor at expression start pattern = pattern.replace(QRegExp(r"\\\|$"), "$") # process anchor at expression end pattern = pattern.replace(QRegExp(r"\\\*"), ".*") # replace wildcards by .* return pattern def setPattern(self, pattern, isRegExp): """ Public method to set the rule pattern. @param pattern string containing the pattern (string or QString) @param isRegExp flag indicating a reg exp pattern (boolean) """ pattern = QString(pattern) if isRegExp: self.__regExp = QRegExp(pattern, Qt.CaseInsensitive, QRegExp.RegExp2) else: self.__regExp = QRegExp(self.__convertPatternToRegExp(pattern), Qt.CaseInsensitive, QRegExp.RegExp2) eric4-4.5.18/eric/Helpviewer/AdBlock/PaxHeaders.8617/AdBlockSubscription.py0000644000175000001440000000013212261012651024374 xustar000000000000000030 mtime=1388582313.533096518 30 atime=1389081084.486724372 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/AdBlock/AdBlockSubscription.py0000644000175000001440000003227212261012651024134 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing the AdBlock subscription class. """ import os from PyQt4.QtCore import * from PyQt4.QtNetwork import QNetworkRequest, QNetworkReply from KdeQt import KQMessageBox from AdBlockRule import AdBlockRule import Helpviewer.HelpWindow import Utilities class AdBlockSubscription(QObject): """ Class implementing the AdBlock subscription. @signal changed() emitted after the subscription has changed @signal rulesChanged() emitted after the subscription's rules have changed """ def __init__(self, url, parent = None, default = False): """ Constructor @param url AdBlock URL for the subscription (QUrl) @param parent reference to the parent object (QObject) @param default flag indicating a default subscription (Boolean) """ QObject.__init__(self, parent) self.__url = url.toEncoded() self.__enabled = False self.__downloading = None self.__defaultSubscription = default self.__title = QString() self.__location = QByteArray() self.__lastUpdate = QDateTime() self.__rules = [] # list containing all AdBlock rules self.__networkExceptionRules = [] self.__networkBlockRules = [] self.__pageRules = [] self.__parseUrl(url) def __parseUrl(self, url): """ Private method to parse the AdBlock URL for the subscription. @param url AdBlock URL for the subscription (QUrl) """ if url.scheme() != "abp": return if url.path() != "subscribe": return self.__title = \ QUrl.fromPercentEncoding(url.encodedQueryItemValue("title")) self.__enabled = \ QUrl.fromPercentEncoding(url.encodedQueryItemValue("enabled")) != "false" self.__location = \ QUrl.fromPercentEncoding(url.encodedQueryItemValue("location")).toUtf8() lastUpdateByteArray = url.encodedQueryItemValue("lastUpdate") lastUpdateString = QUrl.fromPercentEncoding(lastUpdateByteArray) self.__lastUpdate = QDateTime.fromString(lastUpdateString, Qt.ISODate) self.__loadRules() def url(self): """ Public method to generate the url for this subscription. @return AdBlock URL for the subscription (QUrl) """ url = QUrl() url.setScheme("abp") url.setPath("subscribe") queryItems = [] queryItems.append((QString("location"), QString.fromUtf8(self.__location))) queryItems.append((QString("title"), self.__title)) if not self.__enabled: queryItems.append((QString("enabled"), QString("false"))) if self.__lastUpdate.isValid(): queryItems.append((QString("lastUpdate"), self.__lastUpdate.toString(Qt.ISODate))) url.setQueryItems(queryItems) return url def isEnabled(self): """ Public method to check, if the subscription is enabled. @return flag indicating the enabled status (boolean) """ return self.__enabled def setEnabled(self, enabled): """ Public method to set the enabled status. @param enabled flag indicating the enabled status (boolean) """ if self.__enabled == enabled: return self.__enabled = enabled self.__populateCache() self.emit(SIGNAL("changed()")) def title(self): """ Public method to get the subscription title. @return subscription title (QString) """ return self.__title def setTitle(self, title): """ Public method to set the subscription title. @param title subscription title (string or QString) """ if self.__title == title: return self.__title = QString(title) self.emit(SIGNAL("changed()")) def location(self): """ Public method to get the subscription location. @return URL of the subscription location (QUrl) """ return QUrl.fromEncoded(self.__location) def setLocation(self, url): """ Public method to set the subscription location. @param url URL of the subscription location (QUrl) """ if url == self.location(): return self.__location = url.toEncoded() self.__lastUpdate = QDateTime() self.emit(SIGNAL("changed()")) def lastUpdate(self): """ Public method to get the date and time of the last update. @return date and time of the last update (QDateTime) """ return self.__lastUpdate def rulesFileName(self): """ Public method to get the name of the rules file. @return name of the rules file (QString) """ if self.location().scheme() == "file": return self.location().toLocalFile() if self.__location.isEmpty(): return QString() sha1 = QCryptographicHash.hash(self.__location, QCryptographicHash.Sha1).toHex() dataDir = os.path.join(Utilities.getConfigDir(), "browser", "subscriptions") if not os.path.exists(dataDir): os.makedirs(dataDir) fileName = QString(os.path.join(dataDir, "adblock_subscription_%s" % sha1)) return fileName def __loadRules(self): """ Private method to load the rules of the subscription. """ fileName = self.rulesFileName() f = QFile(fileName) if f.exists(): if not f.open(QIODevice.ReadOnly): KQMessageBox.warning(None, self.trUtf8("Load subscription rules"), self.trUtf8("""Unable to open adblock file '%1' for reading.""")\ .arg(fileName)) else: textStream = QTextStream(f) header = textStream.readLine(1024) if not header.startsWith("[Adblock"): KQMessageBox.warning(None, self.trUtf8("Load subscription rules"), self.trUtf8("""Adblock file '%1' does not start with [Adblock.""")\ .arg(fileName)) f.close() f.remove() self.__lastUpdate = QDateTime() else: self.__rules = [] while not textStream.atEnd(): line = textStream.readLine() self.__rules.append(AdBlockRule(line)) self.__populateCache() self.emit(SIGNAL("changed()")) if not self.__lastUpdate.isValid() or \ self.__lastUpdate.addDays(7) < QDateTime.currentDateTime(): self.updateNow() def updateNow(self): """ Public method to update the subscription immediately. """ if self.__downloading is not None: return if not self.location().isValid(): return if self.location().scheme() == "file": self.__lastUpdate = QDateTime.currentDateTime() self.__loadRules() self.emit(SIGNAL("changed()")) return request = QNetworkRequest(self.location()) self.__downloading = \ Helpviewer.HelpWindow.HelpWindow.networkAccessManager().get(request) self.connect(self.__downloading, SIGNAL("finished()"), self.__rulesDownloaded) def __rulesDownloaded(self): """ Private slot to deal with the downloaded rules. """ reply = self.sender() response = reply.readAll() redirect = reply.attribute(QNetworkRequest.RedirectionTargetAttribute).toUrl() reply.close() self.__downloading = None if reply.error() != QNetworkReply.NoError: if not self.__defaultSubscription: # don't show error if we try to load the default KQMessageBox.warning(None, self.trUtf8("Downloading subscription rules"), self.trUtf8("""

    Subscription rules could not be downloaded.

    """ """

    Error: %1

    """).arg(reply.errorString())) else: # reset after first download attempt self.__defaultSubscription = False return if redirect.isValid(): request = QNetworkRequest(redirect) self.__downloading = \ Helpviewer.HelpWindow.HelpWindow.networkAccessManager().get(request) self.connect(self.__downloading, SIGNAL("finished()"), self.__rulesDownloaded) return if response.isEmpty(): KQMessageBox.warning(None, self.trUtf8("Downloading subscription rules"), self.trUtf8("""Got empty subscription rules.""")) return fileName = self.rulesFileName() f = QFile(fileName) if not f.open(QIODevice.ReadWrite): KQMessageBox.warning(None, self.trUtf8("Downloading subscription rules"), self.trUtf8("""Unable to open adblock file '%1' for writing.""")\ .arg(fileName)) return f.write(response) self.__lastUpdate = QDateTime.currentDateTime() self.__loadRules() self.emit(SIGNAL("changed()")) self.__downloading = None def saveRules(self): """ Public method to save the subscription rules. """ fileName = self.rulesFileName() if fileName.isEmpty(): return f = QFile(fileName) if not f.open(QIODevice.ReadWrite | QIODevice.Truncate): KQMessageBox.warning(None, self.trUtf8("Saving subscription rules"), self.trUtf8("""Unable to open adblock file '%1' for writing.""")\ .arg(fileName)) return textStream = QTextStream(f) textStream << QString("[Adblock Plus 0.7.1]\n") for rule in self.__rules: textStream << rule.filter() << "\n" def pageRules(self): """ Public method to get the page rules of the subscription. @return list of rule objects (list of AdBlockRule) """ return self.__pageRules[:] def allow(self, urlString): """ Public method to check, if the given URL is allowed. @return reference to the rule object or None (AdBlockRule) """ for rule in self.__networkExceptionRules: if rule.networkMatch(urlString): return rule return None def block(self, urlString): """ Public method to check, if the given URL should be blocked. @return reference to the rule object or None (AdBlockRule) """ for rule in self.__networkBlockRules: if rule.networkMatch(urlString): return rule return None def allRules(self): """ Public method to get the list of rules. @return list of rules (list of AdBlockRule) """ return self.__rules[:] def addRule(self, rule): """ Public method to add a rule. @param rule reference to the rule to add (AdBlockRule) """ self.__rules.append(rule) self.__populateCache() self.emit(SIGNAL("rulesChanged()")) def removeRule(self, offset): """ Public method to remove a rule given the offset. @param offset offset of the rule to remove (integer) """ if offset < 0 or offset > len(self.__rules): return del self.__rules[offset] self.__populateCache() self.emit(SIGNAL("rulesChanged()")) def replaceRule(self, rule, offset): """ Public method to replace a rule given the offset. @param rule reference to the rule to set (AdBlockRule) @param offset offset of the rule to remove (integer) """ self.__rules[offset] = rule self.__populateCache() self.emit(SIGNAL("rulesChanged()")) def __populateCache(self): """ Private method to populate the various rule caches. """ self.__networkBlockRules = [] self.__networkExceptionRules = [] self.__pageRules = [] if not self.isEnabled(): return for rule in self.__rules: if not rule.isEnabled(): continue if rule.isCSSRule(): self.__pageRules.append(rule) elif rule.isException(): self.__networkExceptionRules.append(rule) else: self.__networkBlockRules.append(rule) eric4-4.5.18/eric/Helpviewer/AdBlock/PaxHeaders.8617/__init__.py0000644000175000001440000000013212261012651022227 xustar000000000000000030 mtime=1388582313.537096569 30 atime=1389081084.486724372 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/AdBlock/__init__.py0000644000175000001440000000025212261012651021760 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Package implementing the advertisments blocker functionality. """ eric4-4.5.18/eric/Helpviewer/AdBlock/PaxHeaders.8617/AdBlockModel.py0000644000175000001440000000013212261012651022750 xustar000000000000000030 mtime=1388582313.539096595 30 atime=1389081084.486724372 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/AdBlock/AdBlockModel.py0000644000175000001440000002656112261012651022514 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a model for the AdBlock dialog. """ from PyQt4.QtCore import * from PyQt4.QtGui import * import Helpviewer.HelpWindow class AdBlockModel(QAbstractItemModel): """ Class implementing a model for the AdBlock dialog. """ def __init__(self, parent = None): """ Constructor @param parent reference to the parent object (QObject) """ QAbstractItemModel.__init__(self, parent) self.__manager = Helpviewer.HelpWindow.HelpWindow.adblockManager() self.connect(self.__manager, SIGNAL("rulesChanged()"), self.__rulesChanged) def __rulesChanged(self): """ Private slot to handle changes in rules. """ self.reset() def rule(self, index): """ Public method to get the rule given its index. @param index index of the rule (QModelIndex) @return reference to the rule (AdBlockRule) """ parent = index.internalPointer() return parent.allRules()[index.row()] def subscription(self, index): """ Public method to get the subscription given its index. @param index index of the subscription (QModelIndex) @return reference to the subscription (AdBlockSubscription) """ parent = index.internalPointer() if parent is not None: return None row = index.row() if row < 0 or row >= len(self.__manager.subscriptions()): return None return self.__manager.subscriptions()[row] def subscriptionIndex(self, subscription): """ Public method to get the index of a subscription. @param subscription reference to the subscription (AdBlockSubscription) @return index of the subscription (QModelIndex) """ try: row = self.__manager.subscriptions().index(subscription) if row < 0 or row >= len(self.__manager.subscriptions()): return QModelIndex() return self.createIndex(row, 0, 0) except ValueError: return QModelIndex() def headerData(self, section, orientation, role = Qt.DisplayRole): """ Public method to get the header data. @param section section number (integer) @param orientation header orientation (Qt.Orientation) @param role data role (integer) @return header data (QVariant) """ if orientation == Qt.Horizontal and role == Qt.DisplayRole: if section == 0: return QVariant(self.trUtf8("Rule")) return QAbstractItemModel.headerData(self, section, orientation, role) def data(self, index, role = Qt.DisplayRole): """ Public method to get data from the model. @param index index of bookmark to get data for (QModelIndex) @param role data role (integer) @return bookmark data (QVariant) """ if not index.isValid() or index.model() != self or index.column() != 0: return QVariant() if role in [Qt.EditRole, Qt.DisplayRole]: if index.parent().isValid(): r = self.rule(index) return QVariant(r.filter()) else: sub = self.subscription(index) if sub is not None: return QVariant(sub.title()) elif role == Qt.CheckStateRole: if index.parent().isValid(): r = self.rule(index) if r.isEnabled(): return QVariant(Qt.Checked) else: return QVariant(Qt.Unchecked) else: sub = self.subscription(index) if sub is not None: if sub.isEnabled(): return QVariant(Qt.Checked) else: return QVariant(Qt.Unchecked) return QVariant() def columnCount(self, parent = QModelIndex()): """ Public method to get the number of columns. @param parent index of parent (QModelIndex) @return number of columns (integer) """ if parent.column() > 0: return 0 else: return 1 def rowCount(self, parent = QModelIndex()): """ Public method to determine the number of rows. @param parent index of parent (QModelIndex) @return number of rows (integer) """ if parent.column() > 0: return 0 if not parent.isValid(): return len(self.__manager.subscriptions()) if parent.internalPointer() is not None: return 0 parentNode = self.subscription(parent) if parentNode is not None: return len(parentNode.allRules()) return 0 def index(self, row, column, parent = QModelIndex()): """ Public method to get a model index for a node cell. @param row row number (integer) @param column column number (integer) @param parent index of the parent (QModelIndex) @return index (QModelIndex) """ if row < 0 or column < 0 or \ row >= self.rowCount(parent) or column >= self.columnCount(parent): return QModelIndex() if not parent.isValid(): return self.createIndex(row, column, None) parentNode = self.subscription(parent) return self.createIndex(row, column, parentNode) def parent(self, index = QModelIndex()): """ Public method to get the index of the parent node. @param index index of the child node (QModelIndex) @return index of the parent node (QModelIndex) """ if not index.isValid(): return QModelIndex() parent = index.internalPointer() if parent is None: return QModelIndex() parentRow = self.__manager.subscriptions().index(parent) return self.createIndex(parentRow, 0, None) def flags(self, index): """ Public method to get flags for a node cell. @param index index of the node cell (QModelIndex) @return flags (Qt.ItemFlags) """ if not index.isValid(): return Qt.NoItemFlags flags = Qt.ItemIsSelectable if index.parent().isValid(): flags |= Qt.ItemIsUserCheckable | Qt.ItemIsEditable parentNode = self.subscription(index.parent()) if parentNode is not None and parentNode.isEnabled(): flags |= Qt.ItemIsEnabled else: flags |= Qt.ItemIsUserCheckable | Qt.ItemIsEditable | Qt.ItemIsEnabled return flags def removeRows(self, row, count, parent = QModelIndex()): """ Public method to remove bookmarks from the model. @param row row of the first bookmark to remove (integer) @param count number of bookmarks to remove (integer) @param index of the parent bookmark node (QModelIndex) @return flag indicating successful removal (boolean) """ if row < 0 or count <= 0 or row + count > self.rowCount(parent): return False if not parent.isValid(): self.disconnect(self.__manager, SIGNAL("rulesChanged()"), self.__rulesChanged) self.beginRemoveRows(QModelIndex(), row, row + count - 1) for subscription in self.__manager.subscriptions()[row:row + count]: self.__manager.removeSubscription(subscription) self.endRemoveRows() self.connect(self.__manager, SIGNAL("rulesChanged()"), self.__rulesChanged) return True else: sub = self.subscription(parent) if sub is not None: self.disconnect(self.__manager, SIGNAL("rulesChanged()"), self.__rulesChanged) self.beginRemoveRows(parent, row, row + count - 1) for i in reversed(range(row, row + count)): sub.removeRule(i) self.endRemoveRows() self.connect(self.__manager, SIGNAL("rulesChanged()"), self.__rulesChanged) return True return False def setData(self, index, value, role = Qt.EditRole): """ Public method to set the data of a node cell. @param index index of the node cell (QModelIndex) @param value value to be set (QVariant) @param role role of the data (integer) @return flag indicating success (boolean) """ if not index.isValid() or \ index.model() != self or \ index.column() != 0 or \ (self.flags(index) & Qt.ItemIsEditable) == 0: return False self.disconnect(self.__manager, SIGNAL("rulesChanged()"), self.__rulesChanged) changed = False if role in [Qt.EditRole, Qt.DisplayRole]: if index.parent().isValid(): sub = self.subscription(index.parent()) if sub is not None: r = self.rule(index) r.setFilter(value.toString()) sub.replaceRule(r, index.row()) self.emit(SIGNAL("dataChanged(const QModelIndex&, const QModelIndex&)"), index, index) changed = True else: sub = self.subscription(index) if sub is not None: sub.setTitle(value.toString()) self.emit(SIGNAL("dataChanged(const QModelIndex&, const QModelIndex&)"), index, index) changed = True elif role == Qt.CheckStateRole: if index.parent().isValid(): sub = self.subscription(index.parent()) if sub is not None: r = self.rule(index) r.setEnabled(value == Qt.Checked) sub.replaceRule(r, index.row()) self.emit(SIGNAL("dataChanged(const QModelIndex&, const QModelIndex&)"), index, index) changed = True else: sub = self.subscription(index) if sub is not None: sub.setEnabled(value == Qt.Checked) self.emit(SIGNAL("dataChanged(const QModelIndex&, const QModelIndex&)"), index, index) changed = True self.connect(self.__manager, SIGNAL("rulesChanged()"), self.__rulesChanged) return changed def hasChildren(self, parent = QModelIndex()): """ Public method to check, if a parent node has some children. @param parent index of the parent node (QModelIndex) @return flag indicating the presence of children (boolean) """ if not parent.isValid(): return True if parent.internalPointer() is None: return True return False eric4-4.5.18/eric/Helpviewer/AdBlock/PaxHeaders.8617/AdBlockManager.py0000644000175000001440000000013212261012651023262 xustar000000000000000030 mtime=1388582313.542096632 30 atime=1389081084.486724372 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/AdBlock/AdBlockManager.py0000644000175000001440000002007212261012651023015 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing the AdBlock manager. """ import os from PyQt4.QtCore import * import Helpviewer.HelpWindow from AdBlockNetwork import AdBlockNetwork from AdBlockPage import AdBlockPage from AdBlockSubscription import AdBlockSubscription from AdBlockDialog import AdBlockDialog from Utilities.AutoSaver import AutoSaver import Utilities import Preferences class AdBlockManager(QObject): """ Class implementing the AdBlock manager. @signal rulesChanged() emitted after some rule has changed """ def __init__(self, parent = None): """ Constructor @param parent reference to the parent object (QObject) """ QObject.__init__(self, parent) self.__loaded = False self.__subscriptionsLoaded = False self.__enabled = False self.__adBlockDialog = None self.__adBlockNetwork = None self.__adBlockPage = None self.__subscriptions = [] self.__saveTimer = AutoSaver(self, self.save) self.connect(self, SIGNAL("rulesChanged()"), self.__saveTimer.changeOccurred) def close(self): """ Public method to close the open search engines manager. """ self.__saveTimer.saveIfNeccessary() def isEnabled(self): """ Public method to check, if blocking ads is enabled. @return flag indicating the enabled state (boolean) """ if not self.__loaded: self.load() return self.__enabled def setEnabled(self, enabled): """ Public slot to set the enabled state. @param enabled flag indicating the enabled state (boolean) """ if self.isEnabled() == enabled: return self.__enabled = enabled if enabled: self.__loadSubscriptions() self.emit(SIGNAL("rulesChanged()")) def network(self): """ Public method to get a reference to the network block object. @return reference to the network block object (AdBlockNetwork) """ if self.__adBlockNetwork is None: self.__adBlockNetwork = AdBlockNetwork(self) return self.__adBlockNetwork def page(self): """ Public method to get a reference to the page block object. @return reference to the page block object (AdBlockPage) """ if self.__adBlockPage is None: self.__adBlockPage = AdBlockPage(self) return self.__adBlockPage def __customSubscriptionLocation(self): """ Private method to generate the path for custom subscriptions. @return URL for custom subscriptions (QUrl) """ dataDir = os.path.join(Utilities.getConfigDir(), "browser", "subscriptions") if not os.path.exists(dataDir): os.makedirs(dataDir) fileName = os.path.join(dataDir, "adblock_subscription_custom") return QUrl.fromLocalFile(fileName) def __customSubscriptionUrl(self): """ Private method to generate the URL for custom subscriptions. @return URL for custom subscriptions (QUrl) """ location = self.__customSubscriptionLocation() encodedUrl = QString.fromUtf8(location.toEncoded()) url = QUrl("abp:subscribe?location=%s&title=%s" % \ (encodedUrl, self.trUtf8("Custom Rules"))) return url def customRules(self): """ Public method to get a subscription for custom rules. @return subscription object for custom rules (AdBlockSubscription) """ location = self.__customSubscriptionLocation() for subscription in self.__subscriptions: if subscription.location() == location: return subscription url = self.__customSubscriptionUrl() customAdBlockSubscription = AdBlockSubscription(url, self) self.addSubscription(customAdBlockSubscription) return customAdBlockSubscription def subscriptions(self): """ Public method to get all subscriptions. @return list of subscriptions (list of AdBlockSubscription) """ if not self.__loaded: self.load() return self.__subscriptions[:] def removeSubscription(self, subscription): """ Public method to remove an AdBlock subscription. @param subscription AdBlock subscription to be removed (AdBlockSubscription) """ if subscription is None: return try: self.__subscriptions.remove(subscription) rulesFileName = subscription.rulesFileName() QFile.remove(rulesFileName) self.emit(SIGNAL("rulesChanged()")) except ValueError: pass def addSubscription(self, subscription): """ Public method to add an AdBlock subscription. @param subscription AdBlock subscription to be added (AdBlockSubscription) """ if subscription is None: return self.__subscriptions.append(subscription) self.connect(subscription, SIGNAL("rulesChanged()"), self, SIGNAL("rulesChanged()")) self.connect(subscription, SIGNAL("changed()"), self, SIGNAL("rulesChanged()")) self.emit(SIGNAL("rulesChanged()")) def save(self): """ Public method to save the AdBlock subscriptions. """ if not self.__loaded: return Preferences.setHelp("AdBlockEnabled", int(self.__enabled)) if self.__subscriptionsLoaded: subscriptions = QStringList() for subscription in self.__subscriptions: if subscription is None: continue subscriptions.append(QString.fromUtf8(subscription.url().toEncoded())) subscription.saveRules() Preferences.setHelp("AdBlockSubscriptions", subscriptions) def load(self): """ Public method to load the AdBlock subscriptions. """ if self.__loaded: return self.__loaded = True self.__enabled = bool(Preferences.getHelp("AdBlockEnabled")) if self.__enabled: self.__loadSubscriptions() def __loadSubscriptions(self): """ Private method to load the set of subscriptions. """ if self.__subscriptionsLoaded: return defaultSubscriptionUrl = \ "abp:subscribe?location=http://adblockplus.mozdev.org/easylist/easylist.txt&title=EasyList" defaultSubscriptions = QStringList() defaultSubscriptions.append( QString.fromUtf8(self.__customSubscriptionUrl().toEncoded())) defaultSubscriptions.append(defaultSubscriptionUrl) subscriptions = Preferences.getHelp("AdBlockSubscriptions") if len(subscriptions) == 0: subscriptions = defaultSubscriptions for subscription in subscriptions: url = QUrl.fromEncoded(subscription.toUtf8()) adBlockSubscription = AdBlockSubscription(url, self, subscription == defaultSubscriptionUrl) self.connect(adBlockSubscription, SIGNAL("rulesChanged()"), self, SIGNAL("rulesChanged()")) self.connect(adBlockSubscription, SIGNAL("changed()"), self, SIGNAL("rulesChanged()")) self.__subscriptions.append(adBlockSubscription) self.__subscriptionsLoaded = True def showDialog(self): """ Public slot to show the AdBlock subscription management dialog. """ if self.__adBlockDialog is None: self.__adBlockDialog = AdBlockDialog() self.__adBlockDialog.show() return self.__adBlockDialog eric4-4.5.18/eric/Helpviewer/AdBlock/PaxHeaders.8617/AdBlockAccessHandler.py0000644000175000001440000000013212261012651024407 xustar000000000000000030 mtime=1388582313.544096658 30 atime=1389081084.486724372 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/AdBlock/AdBlockAccessHandler.py0000644000175000001440000000416212261012651024144 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a scheme access handler for AdBlock URLs. """ from PyQt4.QtGui import QMessageBox from PyQt4.QtNetwork import QNetworkAccessManager from KdeQt import KQMessageBox from AdBlockSubscription import AdBlockSubscription import Helpviewer.HelpWindow from Helpviewer.Network.SchemeAccessHandler import SchemeAccessHandler from Helpviewer.Network.EmptyNetworkReply import EmptyNetworkReply class AdBlockAccessHandler(SchemeAccessHandler): """ Class implementing a scheme access handler for AdBlock URLs. """ def createRequest(self, op, request, outgoingData = None): """ Protected method to create a request. @param op the operation to be performed (QNetworkAccessManager.Operation) @param request reference to the request object (QNetworkRequest) @param outgoingData reference to an IODevice containing data to be sent (QIODevice) @return reference to the created reply object (QNetworkReply) """ if op != QNetworkAccessManager.GetOperation: return None if request.url().path() != "subscribe": return None subscription = AdBlockSubscription(request.url(), Helpviewer.HelpWindow.HelpWindow.adblockManager()) res = KQMessageBox.question(None, self.trUtf8("Subscribe?"), self.trUtf8("""

    Subscribe to this AdBlock subscription?

    %1

    """)\ .arg(subscription.title()), QMessageBox.StandardButtons(\ QMessageBox.No | \ QMessageBox.Yes)) if res == QMessageBox.Yes: Helpviewer.HelpWindow.HelpWindow.adblockManager()\ .addSubscription(subscription) dlg = Helpviewer.HelpWindow.HelpWindow.adblockManager().showDialog() model = dlg.model() dlg.setCurrentIndex(model.index(model.rowCount() - 1, 0)) dlg.setFocus() return EmptyNetworkReply(self.parent()) eric4-4.5.18/eric/Helpviewer/AdBlock/PaxHeaders.8617/AdBlockBlockedNetworkReply.py0000644000175000001440000000013212261012651025641 xustar000000000000000030 mtime=1388582313.546096683 30 atime=1389081084.492724372 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/AdBlock/AdBlockBlockedNetworkReply.py0000644000175000001440000000335012261012651025374 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a QNetworkReply subclass reporting a blocked request. """ from PyQt4.QtCore import * from PyQt4.QtNetwork import QNetworkReply, QNetworkAccessManager class AdBlockBlockedNetworkReply(QNetworkReply): """ Class implementing a QNetworkReply subclass reporting a blocked request. """ def __init__(self, request, rule, parent = None): """ Constructor @param request reference to the request object (QNetworkRequest) @param fileData reference to the data buffer (QByteArray) @param mimeType for the reply (string) """ QNetworkReply.__init__(self, parent) self.setOperation(QNetworkAccessManager.GetOperation) self.setRequest(request) self.setUrl(request.url()) self.setError(QNetworkReply.ContentAccessDenied, self.trUtf8("Blocked by AdBlock rule: %1.").arg(rule.filter())) QTimer.singleShot(0, self.__fireSignals) def __fireSignals(self): """ Private method to send some signals to end the connection. """ self.emit(SIGNAL("error(QNetworkReply::NetworkError)"), QNetworkReply.ContentAccessDenied) self.emit(SIGNAL("finished()")) def readData(self, maxlen): """ Protected method to retrieve data from the reply object. @param maxlen maximum number of bytes to read (integer) @return string containing the data (string) """ return None def abort(self): """ Public slot to abort the operation. """ # do nothing pass eric4-4.5.18/eric/Helpviewer/AdBlock/PaxHeaders.8617/AdBlockDialog.ui0000644000175000001440000000007411262162066023107 xustar000000000000000030 atime=1389081084.492724372 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/AdBlock/AdBlockDialog.ui0000644000175000001440000001170311262162066022636 0ustar00detlevusers00000000000000 AdBlockDialog 0 0 650 600 AdBlock Configuration true Enable AdBlock true Qt::Horizontal 40 20 0 Enter search term for subscriptions and rules Press to clear the search edit QAbstractItemView::InternalMove true QAbstractItemView::ExtendedSelection Qt::ElideMiddle true Actions Qt::Horizontal 40 20 Qt::Horizontal QDialogButtonBox::Close E4TreeView QTreeView
    E4Gui/E4TreeView
    adBlockGroup searchEdit clearButton subscriptionsTree actionButton buttonBox buttonBox accepted() AdBlockDialog accept() 252 445 157 274 buttonBox rejected() AdBlockDialog reject() 320 445 286 274 clearButton clicked() searchEdit clear() 728 21 706 20
    eric4-4.5.18/eric/Helpviewer/PaxHeaders.8617/HelpWebSearchWidget.py0000644000175000001440000000013212261012651023011 xustar000000000000000030 mtime=1388582313.548096708 30 atime=1389081084.492724372 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/HelpWebSearchWidget.py0000644000175000001440000003650512261012651022554 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a web search widget for the web browser. """ import os import imp from PyQt4.QtCore import * from PyQt4.QtGui import * from PyQt4.QtWebKit import QWebSettings, QWebPage import UI.PixmapCache import Preferences from E4Gui.E4LineEdit import E4LineEdit from OpenSearch.OpenSearchManager import OpenSearchManager from OpenSearch.OpenSearchEngineAction import OpenSearchEngineAction class HelpWebSearchEdit(E4LineEdit): """ Class implementing the web search line edit. """ def __init__(self, mainWindow, parent=None): """ Constructor @param mainWindow reference to the main window (HelpWindow) @param parent reference to the parent widget (QWidget) """ E4LineEdit.__init__(self, parent) self.__mw = mainWindow def mousePressEvent(self, evt): """ Protected method called by a mouse press event. @param evt reference to the mouse event (QMouseEvent) """ if evt.button() == Qt.XButton1: self.__mw.currentBrowser().pageAction(QWebPage.Back).trigger() elif evt.button() == Qt.XButton2: self.__mw.currentBrowser().pageAction(QWebPage.Forward).trigger() else: E4LineEdit.mousePressEvent(self, evt) class HelpWebSearchWidget(QWidget): """ Class implementing a web search widget for the web browser. @signal search(url) emitted when the search should be done """ def __init__(self, parent = None): """ Constructor @param parent reference to the parent widget (QWidget) """ QWidget.__init__(self, parent) self.mw = parent self.__openSearchManager = OpenSearchManager(self) self.connect(self.__openSearchManager, SIGNAL("currentEngineChanged()"), self.__currentEngineChanged) self.__currentEngine = QString() self.__layout = QHBoxLayout(self) self.__layout.setMargin(0) self.__layout.setSpacing(0) self.setLayout(self.__layout) self.__enginesMenu = QMenu(self) self.__engineButton = QToolButton(self) self.__engineButton.setPopupMode(QToolButton.InstantPopup) self.__engineButton.setMenu(self.__enginesMenu) self.__layout.addWidget(self.__engineButton) self.__searchButton = QToolButton(self) self.__searchButton.setIcon(UI.PixmapCache.getIcon("webSearch.png")) self.__layout.addWidget(self.__searchButton) self.__searchEdit = HelpWebSearchEdit(self.mw, parent = self) self.__layout.addWidget(self.__searchEdit) self.__clearButton = QToolButton(self) self.__clearButton.setIcon(UI.PixmapCache.getIcon("clearLeft.png")) self.__layout.addWidget(self.__clearButton) self.__model = QStandardItemModel(self) self.__completer = QCompleter() self.__completer.setModel(self.__model) self.__completer.setCompletionMode(QCompleter.UnfilteredPopupCompletion) self.__completer.setWidget(self.__searchEdit) self.connect(self.__searchButton, SIGNAL("clicked()"), self.__searchButtonClicked) self.connect(self.__searchEdit, SIGNAL("textEdited(const QString&)"), self.__textEdited) self.connect(self.__clearButton, SIGNAL("clicked()"), self.__searchEdit.clear) self.connect(self.__searchEdit, SIGNAL("returnPressed()"), self.__searchNow) self.connect(self.__completer, SIGNAL("activated(const QModelIndex &)"), self.__completerActivated) self.connect(self.__completer, SIGNAL("highlighted(const QModelIndex &)"), self.__completerHighlighted) self.connect(self.__enginesMenu, SIGNAL("aboutToShow()"), self.__showEnginesMenu) self.__suggestionsItem = None self.__suggestions = QStringList() self.__suggestTimer = None self.__suggestionsEnabled = Preferences.getHelp("WebSearchSuggestions") self.__recentSearchesItem = None self.__recentSearches = QStringList() self.__maxSavedSearches = 10 self.__engine = None self.__loadSearches() self.__setupCompleterMenu() self.__currentEngineChanged() def __searchNow(self): """ Private slot to perform the web search. """ searchText = self.__searchEdit.text() if searchText.isEmpty(): return globalSettings = QWebSettings.globalSettings() if not globalSettings.testAttribute(QWebSettings.PrivateBrowsingEnabled): self.__recentSearches.removeAll(searchText) self.__recentSearches.prepend(searchText) if len(self.__recentSearches) > self.__maxSavedSearches: self.__recentSearches = self.__recentSearches[:self.__maxSavedSearches] self.__setupCompleterMenu() url = self.__openSearchManager.currentEngine().searchUrl(searchText) self.emit(SIGNAL("search"), url) def __setupCompleterMenu(self): """ Private method to create the completer menu. """ if self.__suggestions.isEmpty() or \ (self.__model.rowCount() > 0 and \ self.__model.item(0) != self.__suggestionsItem): self.__model.clear() self.__suggestionsItem = None else: self.__model.removeRows(1, self.__model.rowCount() - 1) boldFont = QFont() boldFont.setBold(True) if not self.__suggestions.isEmpty(): if self.__model.rowCount() == 0: if not self.__suggestionsItem: self.__suggestionsItem = QStandardItem(self.trUtf8("Suggestions")) self.__suggestionsItem.setFont(boldFont) self.__model.appendRow(self.__suggestionsItem) for suggestion in self.__suggestions: self.__model.appendRow(QStandardItem(suggestion)) if self.__recentSearches.isEmpty(): self.__recentSearchesItem = QStandardItem(self.trUtf8("No Recent Searches")) self.__recentSearchesItem.setFont(boldFont) self.__model.appendRow(self.__recentSearchesItem) else: self.__recentSearchesItem = QStandardItem(self.trUtf8("Recent Searches")) self.__recentSearchesItem.setFont(boldFont) self.__model.appendRow(self.__recentSearchesItem) for recentSearch in self.__recentSearches: self.__model.appendRow(QStandardItem(recentSearch)) view = self.__completer.popup() view.setFixedHeight( view.sizeHintForRow(0) * self.__model.rowCount() + view.frameWidth() * 2) self.__searchButton.setEnabled( not self.__recentSearches.isEmpty() or not self.__suggestions.isEmpty()) def __completerActivated(self, index): """ Private slot handling the selection of an entry from the completer. @param index index of the item (QModelIndex) """ if self.__suggestionsItem and \ self.__suggestionsItem.index().row() == index.row(): return if self.__recentSearchesItem and \ self.__recentSearchesItem.index().row() == index.row(): return self.__searchNow() def __completerHighlighted(self, index): """ Private slot handling the highlighting of an entry of the completer. @param index index of the item (QModelIndex) """ if self.__suggestionsItem and \ self.__suggestionsItem.index().row() == index.row(): return False if self.__recentSearchesItem and \ self.__recentSearchesItem.index().row() == index.row(): return False self.__searchEdit.setText(index.data().toString()) return True def __textEdited(self, txt): """ Private slot to handle changes of the search text. @param txt search text (QString) """ if self.__suggestionsEnabled: if self.__suggestTimer is None: self.__suggestTimer = QTimer(self) self.__suggestTimer.setSingleShot(True) self.__suggestTimer.setInterval(200) self.connect(self.__suggestTimer, SIGNAL("timeout()"), self.__getSuggestions) self.__suggestTimer.start() else: self.__completer.setCompletionPrefix(txt) self.__completer.complete() def __getSuggestions(self): """ Private slot to get search suggestions from the configured search engine. """ searchText = self.__searchEdit.text() if not searchText.isEmpty(): self.__openSearchManager.currentEngine().requestSuggestions(searchText) def __newSuggestions(self, suggestions): """ Private slot to receive a new list of suggestions. @param suggestions list of suggestions (QStringList) """ self.__suggestions = suggestions self.__setupCompleterMenu() self.__completer.complete() def __showEnginesMenu(self): """ Private slot to handle the display of the engines menu. """ self.__enginesMenu.clear() engineNames = self.__openSearchManager.allEnginesNames() for engineName in engineNames: engine = self.__openSearchManager.engine(engineName) action = OpenSearchEngineAction(engine, self.__enginesMenu) action.setData(QVariant(engineName)) self.connect(action, SIGNAL("triggered()"), self.__changeCurrentEngine) self.__enginesMenu.addAction(action) if self.__openSearchManager.currentEngineName() == engineName: action.setCheckable(True) action.setChecked(True) ct = self.mw.currentBrowser() linkedResources = ct.linkedResources("search") if len(linkedResources) > 0: self.__enginesMenu.addSeparator() for linkedResource in linkedResources: url = QUrl(linkedResource.href) title = linkedResource.title mimetype = linkedResource.type_ if mimetype != "application/opensearchdescription+xml": continue if url.isEmpty(): continue if url.isRelative(): url = ct.url().resolved(url) if title.isEmpty(): if ct.title().isEmpty(): title = url.host() else: title = ct.title() action = self.__enginesMenu.addAction(self.trUtf8("Add '%1'").arg(title), self.__addEngineFromUrl) action.setData(QVariant(url)) action.setIcon(ct.icon()) self.__enginesMenu.addSeparator() self.__enginesMenu.addAction(self.mw.searchEnginesAction()) if not self.__recentSearches.isEmpty(): self.__enginesMenu.addAction(self.trUtf8("Clear Recent Searches"), self.clear) def __changeCurrentEngine(self): """ Private slot to handle the selection of a search engine. """ action = self.sender() if action is not None: name = action.data().toString() self.__openSearchManager.setCurrentEngineName(name) def __addEngineFromUrl(self): """ Private slot to add a search engine given its URL. """ action = self.sender() if action is not None: variant = action.data() if not variant.canConvert(QVariant.Url): return url = variant.toUrl() self.__openSearchManager.addEngine(url) def __searchButtonClicked(self): """ Private slot to show the search menu via the search button. """ self.__setupCompleterMenu() self.__completer.complete() def clear(self): """ Public method to clear all private data. """ self.__recentSearches.clear() self.__setupCompleterMenu() self.__searchEdit.clear() self.clearFocus() def preferencesChanged(self): """ Public method to handle the change of preferences. """ self.__suggestionsEnabled = Preferences.getHelp("WebSearchSuggestions") if not self.__suggestionsEnabled: self.__suggestions.clear() self.__setupCompleterMenu() def saveSearches(self): """ Public method to save the recently performed web searches. """ Preferences.Prefs.settings.setValue('Help/WebSearches', QVariant(self.__recentSearches)) def __loadSearches(self): """ Public method to load the recently performed web searches. """ searches = Preferences.Prefs.settings.value('Help/WebSearches') if searches.isValid(): self.__recentSearches = searches.toStringList() def openSearchManager(self): """ Public method to get a reference to the opensearch manager object. @return reference to the opensearch manager object (OpenSearchManager) """ return self.__openSearchManager def __currentEngineChanged(self): """ Private slot to track a change of the current search engine. """ if self.__openSearchManager.engineExists(self.__currentEngine): oldEngine = self.__openSearchManager.engine(self.__currentEngine) self.disconnect(oldEngine, SIGNAL("imageChanged()"), self.__engineImageChanged) if self.__suggestionsEnabled: self.disconnect(oldEngine, SIGNAL("suggestions(const QStringList&)"), self.__newSuggestions) newEngine = self.__openSearchManager.currentEngine() if newEngine.networkAccessManager() is None: newEngine.setNetworkAccessManager(self.mw.networkAccessManager()) self.connect(newEngine, SIGNAL("imageChanged()"), self.__engineImageChanged) if self.__suggestionsEnabled: self.connect(newEngine, SIGNAL("suggestions(const QStringList&)"), self.__newSuggestions) self.__searchEdit.setInactiveText(self.__openSearchManager.currentEngineName()) self.__currentEngine = self.__openSearchManager.currentEngineName() self.__engineButton.setIcon( QIcon(QPixmap.fromImage(self.__openSearchManager.currentEngine().image()))) self.__suggestions.clear() self.__setupCompleterMenu() def __engineImageChanged(self): """ Private slot to handle a change of the current search engine icon. """ self.__engineButton.setIcon( QIcon(QPixmap.fromImage(self.__openSearchManager.currentEngine().image()))) eric4-4.5.18/eric/Helpviewer/PaxHeaders.8617/HelpTocWidget.py0000644000175000001440000000013212261012651021673 xustar000000000000000030 mtime=1388582313.550096734 30 atime=1389081084.492724372 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/HelpTocWidget.py0000644000175000001440000001242312261012651021427 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a window for showing the QtHelp TOC. """ from PyQt4.QtCore import * from PyQt4.QtGui import * class HelpTocWidget(QWidget): """ Class implementing a window for showing the QtHelp TOC. @signal linkActivated(const QUrl&) emitted when a TOC entry is activated @signal escapePressed() emitted when the ESC key was pressed """ def __init__(self, engine, mainWindow, parent = None): """ Constructor @param engine reference to the help engine (QHelpEngine) @param mainWindow reference to the main window object (KQMainWindow) @param parent reference to the parent widget (QWidget) """ QWidget.__init__(self, parent) self.__engine = engine self.__mw = mainWindow self.__expandDepth = -2 self.__tocWidget = self.__engine.contentWidget() self.__tocWidget.viewport().installEventFilter(self) self.__tocWidget.setContextMenuPolicy(Qt.CustomContextMenu) self.__layout = QVBoxLayout(self) self.__layout.addWidget(self.__tocWidget) self.connect(self.__tocWidget, SIGNAL("customContextMenuRequested(QPoint)"), self.__showContextMenu) self.connect(self.__tocWidget, SIGNAL("linkActivated(const QUrl&)"), self, SIGNAL("linkActivated(const QUrl&)")) model = self.__tocWidget.model() self.connect(model, SIGNAL("contentsCreated()"), self.__expandTOC) def __expandTOC(self): """ Private slot to expand the table of contents. """ if self.__expandDepth > -2: self.expandToDepth(self.__expandDepth) self.__expandDepth = -2 def expandToDepth(self, depth): """ Public slot to expand the table of contents to a specific depth. @param depth depth to expand to (integer) """ self.__expandDepth = depth if depth == -1: self.__tocWidget.expandAll() else: self.__tocWidget.expandToDepth(depth) def focusInEvent(self, evt): """ Protected method handling focus in events. @param evt reference to the focus event object (QFocusEvent) """ if evt.reason() != Qt.MouseFocusReason: self.__tocWidget.setFocus() def keyPressEvent(self, evt): """ Protected method handling key press events. @param evt reference to the key press event (QKeyEvent) """ if evt.key() == Qt.Key_Escape: self.emit(SIGNAL("escapePressed()")) def eventFilter(self, watched, event): """ Public method called to filter the event queue. @param watched the QObject being watched (QObject) @param event the event that occurred (QEvent) @return flag indicating whether the event was handled (boolean) """ if self.__tocWidget and watched == self.__tocWidget.viewport() and \ event.type() == QEvent.MouseButtonRelease: if self.__tocWidget.indexAt(event.pos()).isValid() and \ event.button() == Qt.LeftButton: self.itemClicked(self.__tocWidget.currentIndex()) elif self.__tocWidget.indexAt(event.pos()).isValid() and \ event.button() == Qt.MidButton: model = self.__tocWidget.model() itm = model.contentItemAt(self.__tocWidget.currentIndex()) self.__mw.newTab(itm.url()) return QWidget.eventFilter(self, watched, event) def itemClicked(self, index): """ Public slot handling a click of a TOC entry. @param index index of the TOC clicked (QModelIndex) """ if not index.isValid(): return model = self.__tocWidget.model() itm = model.contentItemAt(index) if itm: self.emit(SIGNAL("linkActivated(const QUrl&)"), itm.url()) def syncToContent(self, url): """ Public method to sync the TOC to the displayed page. @param url URL of the displayed page (QUrl) @return flag indicating a successful synchronization (boolean) """ idx = self.__tocWidget.indexOf(url) if not idx.isValid(): return False self.__tocWidget.setCurrentIndex(idx) return True def __showContextMenu(self, pos): """ Private slot showing the context menu. @param pos position to show the menu at (QPoint) """ if not self.__tocWidget.indexAt(pos).isValid(): return menu = QMenu() curTab = menu.addAction(self.trUtf8("Open Link")) newTab = menu.addAction(self.trUtf8("Open Link in New Tab")) menu.move(self.__tocWidget.mapToGlobal(pos)) model = self.__tocWidget.model() itm = model.contentItemAt(self.__tocWidget.currentIndex()) act = menu.exec_() if act == curTab: self.emit(SIGNAL("linkActivated(const QUrl&)"), itm.url()) elif act == newTab: self.__mw.newTab(itm.url()) eric4-4.5.18/eric/Helpviewer/PaxHeaders.8617/HelpSearchWidget.py0000644000175000001440000000013212261012651022353 xustar000000000000000030 mtime=1388582313.553096772 30 atime=1389081084.492724372 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/HelpSearchWidget.py0000644000175000001440000001111512261012651022104 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a window for showing the QtHelp index. """ from PyQt4.QtCore import * from PyQt4.QtGui import * class HelpSearchWidget(QWidget): """ Class implementing a window for showing the QtHelp index. @signal linkActivated(const QUrl&) emitted when a search result entry is activated @signal escapePressed() emitted when the ESC key was pressed """ def __init__(self, engine, mainWindow, parent = None): """ Constructor @param engine reference to the help search engine (QHelpSearchEngine) @param mainWindow reference to the main window object (KQMainWindow) @param parent reference to the parent widget (QWidget) """ QWidget.__init__(self, parent) self.__engine = engine self.__mw = mainWindow self.__layout = QVBoxLayout(self) self.__result = self.__engine.resultWidget() self.__query = self.__engine.queryWidget() self.__layout.addWidget(self.__query) self.__layout.addWidget(self.__result) self.setFocusProxy(self.__query) self.connect(self.__query, SIGNAL("search()"), self.__search) self.connect(self.__result, SIGNAL("requestShowLink(const QUrl&)"), self, SIGNAL("linkActivated(const QUrl&)")) self.connect(self.__engine, SIGNAL("searchingStarted()"), self.__searchingStarted) self.connect(self.__engine, SIGNAL("searchingFinished(int)"), self.__searchingFinished) self.__browser = self.__result.findChildren(QTextBrowser)[0] if self.__browser: self.__browser.viewport().installEventFilter(self) def __search(self): """ Private slot to perform a search of the database. """ query = self.__query.query() self.__engine.search(query) def __searchingStarted(self): """ Private slot to handle the start of a search. """ QApplication.setOverrideCursor(Qt.WaitCursor) def __searchingFinished(self, hits): """ Private slot to handle the end of the search. @param hits number of hits (integer) (unused) """ QApplication.restoreOverrideCursor() def eventFilter(self, watched, event): """ Public method called to filter the event queue. @param watched the QObject being watched (QObject) @param event the event that occurred (QEvent) @return flag indicating whether the event was handled (boolean) """ if self.__browser and watched == self.__browser.viewport() and \ event.type() == QEvent.MouseButtonRelease: link = self.__result.linkAt(event.pos()) if not link.isEmpty() and link.isValid(): ctrl = event.modifiers() & Qt.ControlModifier if (event.button() == Qt.LeftButton and ctrl) or \ event.button() == Qt.MidButton: self.__mw.newTab(link) return QWidget.eventFilter(self, watched, event) def keyPressEvent(self, evt): """ Protected method handling key press events. @param evt reference to the key press event (QKeyEvent) """ if evt.key() == Qt.Key_Escape: self.emit(SIGNAL("escapePressed()")) else: evt.ignore() def contextMenuEvent(self, evt): """ Protected method handling context menu events. @param evt reference to the context menu event (QContextMenuEvent) """ point = evt.globalPos() if self.__browser: point = self.__browser.mapFromGlobal(point) if not self.__browser.rect().contains(point, True): return link = QUrl(self.__browser.anchorAt(point)) else: point = self.__result.mapFromGlobal(point) link = self.__result.linkAt(point) if link.isEmpty() or not link.isValid(): return menu = QMenu() curTab = menu.addAction(self.trUtf8("Open Link")) newTab = menu.addAction(self.trUtf8("Open Link in New Tab")) menu.move(evt.globalPos()) act = menu.exec_() if act == curTab: self.emit(SIGNAL("linkActivated(const QUrl&)"), link) elif act == newTab: self.__mw.newTab(link) eric4-4.5.18/eric/Helpviewer/PaxHeaders.8617/History0000644000175000001440000000013212262730776020223 xustar000000000000000030 mtime=1389081086.301724332 30 atime=1389081086.305724332 30 ctime=1389081086.315724332 eric4-4.5.18/eric/Helpviewer/History/0000755000175000001440000000000012262730776020032 5ustar00detlevusers00000000000000eric4-4.5.18/eric/Helpviewer/History/PaxHeaders.8617/HistoryTreeModel.py0000644000175000001440000000013112261012651024073 xustar000000000000000029 mtime=1388582313.55609681 30 atime=1389081084.492724372 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/History/HistoryTreeModel.py0000644000175000001440000003353312261012651023635 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing the history tree model. """ import bisect from PyQt4.QtCore import * from PyQt4.QtGui import QAbstractProxyModel from HistoryModel import HistoryModel import UI.PixmapCache class HistoryTreeModel(QAbstractProxyModel): """ Class implementing the history tree model. """ def __init__(self, sourceModel, parent = None): """ Constructor @param sourceModel reference to the source model (QAbstractItemModel) @param parent reference to the parent object (QObject) """ QAbstractProxyModel.__init__(self, parent) self.__sourceRowCache = [] self.__removingDown = False self.setSourceModel(sourceModel) def headerData(self, section, orientation, role = Qt.DisplayRole): """ Public method to get the header data. @param section section number (integer) @param orientation header orientation (Qt.Orientation) @param role data role (integer) @return header data (QVariant) """ return self.sourceModel().headerData(section, orientation, role) def data(self, index, role = Qt.DisplayRole): """ Public method to get data from the model. @param index index of history entry to get data for (QModelIndex) @param role data role (integer) @return history entry data (QVariant) """ if role in [Qt.DisplayRole, Qt.EditRole]: start = index.internalId() if start == 0: offset = self.__sourceDateRow(index.row()) if index.column() == 0: idx = self.sourceModel().index(offset, 0) date = idx.data(HistoryModel.DateRole).toDate() if date == QDate.currentDate(): return QVariant(self.trUtf8("Earlier Today")) return QVariant(date.toString("yyyy-MM-dd")) if index.column() == 1: return QVariant(self.trUtf8( "%n item(s)", "", self.rowCount(index.sibling(index.row(), 0)))) elif role == Qt.DecorationRole: if index.column() == 0 and not index.parent().isValid(): return QVariant(UI.PixmapCache.getIcon("history.png")) elif role == HistoryModel.DateRole: if index.column() == 0 and index.internalId() == 0: offset = self.__sourceDateRow(index.row()) idx = self.sourceModel().index(offset, 0) return idx.data(HistoryModel.DateRole) return QAbstractProxyModel.data(self, index, role) def columnCount(self, parent = QModelIndex()): """ Public method to get the number of columns. @param parent index of parent (QModelIndex) @return number of columns (integer) """ return self.sourceModel().columnCount(self.mapToSource(parent)) def rowCount(self, parent = QModelIndex()): """ Public method to determine the number of rows. @param parent index of parent (QModelIndex) @return number of rows (integer) """ if parent.internalId() != 0 or \ parent.column() > 0 or \ self.sourceModel() is None: return 0 # row count OF dates if not parent.isValid(): if self.__sourceRowCache: return len(self.__sourceRowCache) currentDate = QDate() rows = 0 totalRows = self.sourceModel().rowCount() for row in range(totalRows): rowDate = \ self.sourceModel().index(row, 0).data(HistoryModel.DateRole).toDate() if rowDate != currentDate: self.__sourceRowCache.append(row) currentDate = rowDate rows += 1 return rows # row count FOR a date start = self.__sourceDateRow(parent.row()) end = self.__sourceDateRow(parent.row() + 1) return end - start def __sourceDateRow(self, row): """ Private method to translate the top level date row into the offset where that date starts. @param row row number of the date (integer) @return offset where that date starts (integer) """ if row <= 0: return 0 if len(self.__sourceRowCache) == 0: self.rowCount(QModelIndex()) if row >= len(self.__sourceRowCache): if self.sourceModel() is None: return 0 return self.sourceModel().rowCount() return self.__sourceRowCache[row] def mapToSource(self, proxyIndex): """ Public method to map an index to the source model index. @param proxyIndex reference to a proxy model index (QModelIndex) @return source model index (QModelIndex) """ offset = proxyIndex.internalId() if offset == 0: return QModelIndex() startDateRow = self.__sourceDateRow(offset - 1) return self.sourceModel().index( startDateRow + proxyIndex.row(), proxyIndex.column()) def index(self, row, column, parent = QModelIndex()): """ Public method to create an index. @param row row number for the index (integer) @param column column number for the index (integer) @param parent index of the parent item (QModelIndex) @return requested index (QModelIndex) """ if row < 0 or \ column < 0 or \ column >= self.columnCount(parent) or \ parent.column() > 0: return QModelIndex() if not parent.isValid(): return self.createIndex(row, column, 0) return self.createIndex(row, column, parent.row() + 1) def parent(self, index): """ Public method to get the parent index. @param index index of item to get parent (QModelIndex) @return index of parent (QModelIndex) """ offset = index.internalId() if offset == 0 or not index.isValid(): return QModelIndex() return self.createIndex(offset - 1, 0, 0) def hasChildren(self, parent = QModelIndex()): """ Public method to check, if an entry has some children. @param parent index of the entry to check (QModelIndex) @return flag indicating the presence of children (boolean) """ grandparent = parent.parent() if not grandparent.isValid(): return True return False def flags(self, index): """ Public method to get the item flags. @param index index of the item (QModelIndex) @return flags (Qt.ItemFlags) """ if not index.isValid(): return Qt.ItemFlags(Qt.NoItemFlags) return Qt.ItemFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsDragEnabled) def setSourceModel(self, sourceModel): """ Public method to set the source model. @param sourceModel reference to the source model (QAbstractItemModel) """ if self.sourceModel() is not None: self.disconnect(self.sourceModel(), SIGNAL("modelReset()"), self.__sourceReset) self.disconnect(self.sourceModel(), SIGNAL("layoutChanged()"), self.__sourceReset) self.disconnect(self.sourceModel(), SIGNAL("rowsInserted(const QModelIndex &, int, int)"), self.__sourceRowsInserted) self.disconnect(self.sourceModel(), SIGNAL("rowsRemoved(const QModelIndex &, int, int)"), self.__sourceRowsRemoved) QAbstractProxyModel.setSourceModel(self, sourceModel) if self.sourceModel() is not None: self.__loaded = False self.connect(self.sourceModel(), SIGNAL("modelReset()"), self.__sourceReset) self.connect(self.sourceModel(), SIGNAL("layoutChanged()"), self.__sourceReset) self.connect(self.sourceModel(), SIGNAL("rowsInserted(const QModelIndex &, int, int)"), self.__sourceRowsInserted) self.connect(self.sourceModel(), SIGNAL("rowsRemoved(const QModelIndex &, int, int)"), self.__sourceRowsRemoved) self.reset() def __sourceReset(self): """ Private slot to handle a reset of the source model. """ self.__sourceRowCache = [] self.reset() def __sourceRowsInserted(self, parent, start, end): """ Private slot to handle the insertion of data in the source model. @param parent reference to the parent index (QModelIndex) @param start start row (integer) @param end end row (integer) """ if not parent.isValid(): if start != 0 or start != end: self.__sourceRowCache = [] self.reset() return self.__sourceRowCache = [] treeIndex = self.mapFromSource(self.sourceModel().index(start, 0)) treeParent = treeIndex.parent() if self.rowCount(treeParent) == 1: self.beginInsertRows(QModelIndex(), 0, 0) self.endInsertRows() else: self.beginInsertRows(treeParent, treeIndex.row(), treeIndex.row()) self.endInsertRows() def mapFromSource(self, sourceIndex): """ Public method to map an index to the proxy model index. @param sourceIndex reference to a source model index (QModelIndex) @return proxy model index (QModelIndex) """ if not sourceIndex.isValid(): return QModelIndex() if len(self.__sourceRowCache) == 0: self.rowCount(QModelIndex()) try: row = self.__sourceRowCache.index(sourceIndex.row()) except ValueError: row = bisect.bisect_left(self.__sourceRowCache, sourceIndex.row()) if row == len(self.__sourceRowCache) or \ self.__sourceRowCache[row] != sourceIndex.row(): row -= 1 dateRow = max(0, row) row = sourceIndex.row() - self.__sourceRowCache[dateRow] return self.createIndex(row, sourceIndex.column(), dateRow + 1) def removeRows(self, row, count, parent = QModelIndex()): """ Public method to remove entries from the model. @param row row of the first entry to remove (integer) @param count number of entries to remove (integer) @param index of the parent entry (QModelIndex) @return flag indicating successful removal (boolean) """ if row < 0 or \ count <= 0 or \ row + count > self.rowCount(parent): return False self.__removingDown = True if parent.isValid() and self.rowCount(parent) == count - row: self.beginRemoveRows(QModelIndex(), parent.row(), parent.row()) else: self.beginRemoveRows(parent, row, row + count - 1) if parent.isValid(): # removing pages offset = self.__sourceDateRow(parent.row()) return self.sourceModel().removeRows(offset + row, count) else: # removing whole dates for i in range(row + count - 1, row - 1, -1): dateParent = self.index(i, 0) offset = self.__sourceDateRow(dateParent.row()) if not self.sourceModel().removeRows(offset, self.rowCount(dateParent)): return False return True def __sourceRowsRemoved(self, parent, start, end): """ Private slot to handle the removal of data in the source model. @param parent reference to the parent index (QModelIndex) @param start start row (integer) @param end end row (integer) """ if not self.__removingDown: self.__sourceRowCache = [] self.reset() return if not parent.isValid(): if self.__sourceRowCache: i = end while i >= start: try: ind = self.__sourceRowCache.index(i) except ValueError: ind = bisect.bisect_left(self.__sourceRowCache, i) if ind == len(self.__sourceRowCache) or \ self.__sourceRowCache[ind] != i: ind -= 1 row = max(0, ind) offset = self.__sourceRowCache[row] dateParent = self.index(row, 0) # If we can remove all the rows in the date do that # and skip over them. rc = self.rowCount(dateParent) if i - rc + 1 == offset and start <= i - rc + 1: del self.__sourceRowCache[row] i -= rc + 1 else: row += 1 i -= 1 for j in range(row, len(self.__sourceRowCache)): self.__sourceRowCache[j] -= 1 if self.__removingDown: self.endRemoveRows() self.__removingDown = False eric4-4.5.18/eric/Helpviewer/History/PaxHeaders.8617/HistoryModel.py0000644000175000001440000000013212261012651023254 xustar000000000000000030 mtime=1388582313.558096835 30 atime=1389081084.492724372 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/History/HistoryModel.py0000644000175000001440000001306512261012651023013 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing the history model. """ from PyQt4.QtCore import * import Helpviewer.HelpWindow class HistoryModel(QAbstractTableModel): """ Class implementing the history model. """ DateRole = Qt.UserRole + 1 DateTimeRole = Qt.UserRole + 2 UrlRole = Qt.UserRole + 3 UrlStringRole = Qt.UserRole + 4 TitleRole = Qt.UserRole + 5 MaxRole = TitleRole def __init__(self, historyManager, parent = None): """ Constructor @param historyManager reference to the history manager object (HistoryManager) @param parent reference to the parent object (QObject) """ QAbstractTableModel.__init__(self, parent) self.__historyManager = historyManager self.__headers = [ self.trUtf8("Title"), self.trUtf8("Address"), ] self.connect(self.__historyManager, SIGNAL("historyReset()"), self.historyReset) self.connect(self.__historyManager, SIGNAL("entryRemoved"), self.historyReset) self.connect(self.__historyManager, SIGNAL("entryAdded"), self.entryAdded) self.connect(self.__historyManager, SIGNAL("entryUpdated(int)"), self.entryUpdated) def historyReset(self): """ Public slot to reset the model. """ self.reset() def entryAdded(self): """ Public slot to handle the addition of a history entry. """ self.beginInsertRows(QModelIndex(), 0, 0) self.endInsertRows() def entryUpdated(self, row): """ Public slot to handle the update of a history entry. @param row row number of the updated entry (integer) """ idx = self.index(row, 0) self.emit(SIGNAL("dataChanged(const QModelIndex&, const QModelIndex&)"), idx, idx) def headerData(self, section, orientation, role = Qt.DisplayRole): """ Public method to get the header data. @param section section number (integer) @param orientation header orientation (Qt.Orientation) @param role data role (integer) @return header data (QVariant) """ if orientation == Qt.Horizontal and role == Qt.DisplayRole: try: return QVariant(self.__headers[section]) except IndexError: pass return QAbstractTableModel.headerData(self, section, orientation, role) def data(self, index, role = Qt.DisplayRole): """ Public method to get data from the model. @param index index of history entry to get data for (QModelIndex) @param role data role (integer) @return history entry data (QVariant) """ lst = self.__historyManager.history() if index.row() < 0 or index.row() > len(lst): return QVariant() itm = lst[index.row()] if role == self.DateTimeRole: return QVariant(itm.dateTime) elif role == self.DateRole: return QVariant(itm.dateTime.date()) elif role == self.UrlRole: return QVariant(QUrl(itm.url)) elif role == self.UrlStringRole: return QVariant(itm.url) elif role == self.TitleRole: return QVariant(itm.userTitle()) elif role in [Qt.DisplayRole, Qt.EditRole]: if index.column() == 0: return QVariant(itm.userTitle()) elif index.column() == 1: return QVariant(itm.url) elif role == Qt.DecorationRole: if index.column() == 0: return QVariant(Helpviewer.HelpWindow.HelpWindow.icon(QUrl(itm.url))) return QVariant() def columnCount(self, parent = QModelIndex()): """ Public method to get the number of columns. @param parent index of parent (QModelIndex) @return number of columns (integer) """ if parent.isValid(): return 0 else: return len(self.__headers) def rowCount(self, parent = QModelIndex()): """ Public method to determine the number of rows. @param parent index of parent (QModelIndex) @return number of rows (integer) """ if parent.isValid(): return 0 else: return len(self.__historyManager.history()) def removeRows(self, row, count, parent = QModelIndex()): """ Public method to remove history entries from the model. @param row row of the first history entry to remove (integer) @param count number of history entries to remove (integer) @param index of the parent entry (QModelIndex) @return flag indicating successful removal (boolean) """ if parent.isValid(): return False lastRow = row + count - 1 self.beginRemoveRows(parent, row, lastRow) lst = self.__historyManager.history()[:] for index in range(lastRow, row - 1, -1): del lst[index] self.disconnect(self.__historyManager, SIGNAL("historyReset()"), self.historyReset) self.__historyManager.setHistory(lst) self.connect(self.__historyManager, SIGNAL("historyReset()"), self.historyReset) self.endRemoveRows() return True eric4-4.5.18/eric/Helpviewer/History/PaxHeaders.8617/HistoryCompleter.py0000644000175000001440000000013212261012651024146 xustar000000000000000030 mtime=1388582313.560096861 30 atime=1389081084.492724372 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/History/HistoryCompleter.py0000644000175000001440000002446212261012651023710 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a special completer for the history. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from HistoryModel import HistoryModel from HistoryFilterModel import HistoryFilterModel class HistoryCompletionView(QTableView): """ Class implementing a special completer view for history based completions. """ def __init__(self, parent = None): """ Constructor @param parent reference to the parent widget (QWidget) """ QTableView.__init__(self, parent) self.horizontalHeader().hide() self.verticalHeader().hide() self.setShowGrid(False) self.setSelectionBehavior(QAbstractItemView.SelectRows) self.setSelectionMode(QAbstractItemView.SingleSelection) self.setTextElideMode(Qt.ElideRight) metrics = self.fontMetrics() self.verticalHeader().setDefaultSectionSize(metrics.height()) def resizeEvent(self, evt): """ Protected method handling resize events. @param evt reference to the resize event (QResizeEvent) """ self.horizontalHeader().resizeSection(0, 0.65 * self.width()) self.horizontalHeader().setStretchLastSection(True) QTableView.resizeEvent(self, evt) def sizeHintForRow(self, row): """ Public method to give a size hint for rows. @param row row number (integer) """ metrics = self.fontMetrics() return metrics.height() class HistoryCompletionModel(QSortFilterProxyModel): """ Class implementing a special model for history based completions. """ HistoryCompletionRole = HistoryFilterModel.MaxRole + 1 def __init__(self, parent = None): """ Constructor @param parent reference to the parent object (QObject) """ QSortFilterProxyModel.__init__(self, parent) self.__searchString = QString() self.__searchMatcher = QRegExp(QString(), Qt.CaseInsensitive, QRegExp.FixedString) self.__wordMatcher = QRegExp(QString(), Qt.CaseInsensitive) self.__isValid = False self.setDynamicSortFilter(True) def data(self, index, role = Qt.DisplayRole): """ Public method to get data from the model. @param index index of history entry to get data for (QModelIndex) @param role data role (integer) @return history entry data (QVariant) """ # If the model is valid, tell QCompleter that everything we have filtered # matches what the user typed; if not, nothing matches if role == self.HistoryCompletionRole and index.isValid(): if self.isValid(): return QVariant(QString("t")) else: return QVariant(QString("f")) if role == Qt.DisplayRole: if index.column() == 0: role = HistoryModel.UrlStringRole else: role = HistoryModel.TitleRole return QSortFilterProxyModel.data(self, index, role) def searchString(self): """ Public method to get the current search string. @return current search string (QString) """ return QString(self.__searchString) def setSearchString(self, string): """ Public method to set the current search string. @param string new search string (QString) """ if string == self.__searchString: return self.__searchString = QString(string) self.__searchMatcher.setPattern(self.__searchString) self.__wordMatcher.setPattern("\\b" + QRegExp.escape(self.__searchString)) self.invalidateFilter() def isValid(self): """ Public method to check the model for validity. @param flag indicating a valid status (boolean) """ return self.__isValid def setValid(self, valid): """ Public method to set the model's validity. @param valid flag indicating the new valid status (boolean) """ if valid == self.__isValid: return self.__isValid = valid # tell the history completer that the model has changed self.emit(SIGNAL("dataChanged(const QModelIndex&, const QModelIndex&)"), self.index(0, 0), self.index(0, self.rowCount() - 1)) def filterAcceptsRow(self, sourceRow, sourceParent): """ Protected method to determine, if the row is acceptable. @param sourceRow row number in the source model (integer) @param sourceParent index of the source item (QModelIndex) @return flag indicating acceptance (boolean) """ # Do a case-insensitive substring match against both the url and title. # It's already ensured, that the user doesn't accidentally use regexp # metacharacters (s. setSearchString()). idx = self.sourceModel().index(sourceRow, 0, sourceParent) url = self.sourceModel().data(idx, HistoryModel.UrlStringRole).toString() if self.__searchMatcher.indexIn(url) != -1: return True title = self.sourceModel().data(idx, HistoryModel.TitleRole).toString() if self.__searchMatcher.indexIn(title) != -1: return True return False def lessThan(self, left, right): """ Protected method used to sort the displayed items. It implements a special sorting function based on the history entry's frequency giving a bonus to hits that match on a word boundary so that e.g. "dot.python-projects.org" is a better result for typing "dot" than "slashdot.org". However, it only looks for the string in the host name, not the entire URL, since while it makes sense to e.g. give "www.phoronix.com" a bonus for "ph", it does NOT make sense to give "www.yadda.com/foo.php" the bonus. @param left index of left item (QModelIndex) @param right index of right item (QModelIndex) @return true, if left is less than right (boolean) """ frequency_L = \ self.sourceModel().data(left, HistoryFilterModel.FrequencyRole).toInt()[0] url_L = self.sourceModel().data(left, HistoryModel.UrlRole).toUrl().host() title_L = self.sourceModel().data(left, HistoryModel.TitleRole).toString() if self.__wordMatcher.indexIn(url_L) != -1 or \ self.__wordMatcher.indexIn(title_L) != -1: frequency_L *= 2 frequency_R = \ self.sourceModel().data(right, HistoryFilterModel.FrequencyRole).toInt()[0] url_R = self.sourceModel().data(right, HistoryModel.UrlRole).toUrl().host() title_R = self.sourceModel().data(right, HistoryModel.TitleRole).toString() if self.__wordMatcher.indexIn(url_R) != -1 or \ self.__wordMatcher.indexIn(title_R) != -1: frequency_R *= 2 # Sort results in descending frequency-derived score. return frequency_R < frequency_L class HistoryCompleter(QCompleter): def __init__(self, model, parent = None): """ Constructor @param model reference to the model (QAbstractItemModel) @param parent reference to the parent object (QObject) """ QCompleter.__init__(self, model, parent) self.setPopup(HistoryCompletionView()) # Completion should be against the faked role. self.setCompletionRole(HistoryCompletionModel.HistoryCompletionRole) # Since the completion role is faked, advantage of the sorted-model # optimizations in QCompleter can be taken. self.setCaseSensitivity(Qt.CaseSensitive) self.setModelSorting(QCompleter.CaseSensitivelySortedModel) self.__searchString = QString() self.__filterTimer = QTimer() self.__filterTimer.setSingleShot(True) self.connect(self.__filterTimer, SIGNAL("timeout()"), self.__updateFilter) def pathFromIndex(self, idx): """ Public method to get a path for a given index. @param idx reference to the index (QModelIndex) @return the actual URL from the history (QString) """ return self.model().data(idx, HistoryModel.UrlStringRole).toString() def splitPath(self, path): """ Public method to split the given path into strings, that are used to match at each level in the model. @param path path to be split (QString) @return list of path elements (QStringList) """ path = QString(path) if path == self.__searchString: return QStringList("t") # Queue an update to the search string. Wait a bit, so that if the user # is quickly typing, the completer doesn't try to complete until they pause. if self.__filterTimer.isActive(): self.__filterTimer.stop() self.__filterTimer.start(150) # If the previous search results are not a superset of the current # search results, tell the model that it is not valid yet. if not path.startsWith(self.__searchString): self.model().setValid(False) self.__searchString = path # The actual filtering is done by the HistoryCompletionModel. Just # return a short dummy here so that QCompleter thinks everything matched. return QStringList("t") def __updateFilter(self): """ Private slot to update the search string. """ completionModel = self.model() # Tell the HistoryCompletionModel about the new search string. completionModel.setSearchString(self.__searchString) # Sort the model. completionModel.sort(0) # Mark it valid. completionModel.setValid(True) # Now update the QCompleter widget, but only if the user is still typing a URL. if self.widget() is not None and self.widget().hasFocus(): self.complete() eric4-4.5.18/eric/Helpviewer/History/PaxHeaders.8617/HistoryDialog.py0000644000175000001440000000013212261012651023413 xustar000000000000000030 mtime=1388582313.562096886 30 atime=1389081084.492724372 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/History/HistoryDialog.py0000644000175000001440000001240612261012651023150 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a dialog to manage history. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from E4Gui.E4TreeSortFilterProxyModel import E4TreeSortFilterProxyModel import Helpviewer.HelpWindow from HistoryModel import HistoryModel from Ui_HistoryDialog import Ui_HistoryDialog import UI.PixmapCache class HistoryDialog(QDialog, Ui_HistoryDialog): """ Class implementing a dialog to manage history. @signal openUrl(const QUrl&, const QString&) emitted to open a URL in the current tab @signal newUrl(const QUrl&, const QString&) emitted to open a URL in a new tab """ def __init__(self, parent = None, manager = None): """ Constructor @param parent reference to the parent widget (QWidget @param manager reference to the history manager object (HistoryManager) """ QDialog.__init__(self, parent) self.setupUi(self) self.clearButton.setIcon(UI.PixmapCache.getIcon("clearLeft.png")) self.__historyManager = manager if self.__historyManager is None: self.__historyManager = Helpviewer.HelpWindow.HelpWindow.historyManager() self.__model = self.__historyManager.historyTreeModel() self.__proxyModel = E4TreeSortFilterProxyModel(self) self.__proxyModel.setSortRole(HistoryModel.DateTimeRole) self.__proxyModel.setFilterKeyColumn(-1) self.__proxyModel.setSourceModel(self.__model) self.historyTree.setModel(self.__proxyModel) self.historyTree.expandAll() fm = QFontMetrics(self.font()) header = fm.width("m") * 40 self.historyTree.header().resizeSection(0, header) self.historyTree.header().setStretchLastSection(True) self.historyTree.setContextMenuPolicy(Qt.CustomContextMenu) self.connect(self.historyTree, SIGNAL("activated(const QModelIndex&)"), self.__activated) self.connect(self.historyTree, SIGNAL("customContextMenuRequested(const QPoint &)"), self.__customContextMenuRequested) self.connect(self.searchEdit, SIGNAL("textChanged(QString)"), self.__proxyModel.setFilterFixedString) self.connect(self.removeButton, SIGNAL("clicked()"), self.historyTree.removeSelected) self.connect(self.removeAllButton, SIGNAL("clicked()"), self.__historyManager.clear) self.connect(self.__proxyModel, SIGNAL("modelReset()"), self.__modelReset) def __modelReset(self): """ Private slot handling a reset of the tree view's model. """ self.historyTree.expandAll() def __customContextMenuRequested(self, pos): """ Private slot to handle the context menu request for the bookmarks tree. @param pos position the context menu was requested (QPoint) """ menu = QMenu() idx = self.historyTree.indexAt(pos) idx = idx.sibling(idx.row(), 0) if idx.isValid() and not self.historyTree.model().hasChildren(idx): menu.addAction(self.trUtf8("&Open"), self.__openHistoryInCurrentTab) menu.addAction(self.trUtf8("Open in New &Tab"), self.__openHistoryInNewTab) menu.addSeparator() menu.addAction(self.trUtf8("&Copy"), self.__copyHistory) menu.addAction(self.trUtf8("&Remove"), self.historyTree.removeSelected) menu.exec_(QCursor.pos()) def __activated(self, idx): """ Private slot to handle the activation of an entry. @param idx reference to the entry index (QModelIndex) """ self.__openHistory(QApplication.keyboardModifiers() & Qt.ControlModifier) def __openHistoryInCurrentTab(self): """ Private slot to open a history entry in the current browser tab. """ self.__openHistory(False) def __openHistoryInNewTab(self): """ Private slot to open a history entry in a new browser tab. """ self.__openHistory(True) def __openHistory(self, newTab): """ Private method to open a history entry. @param newTab flag indicating to open the history entry in a new tab (boolean) """ idx = self.historyTree.currentIndex() if newTab: self.emit(SIGNAL("newUrl(const QUrl&, const QString&)"), idx.data(HistoryModel.UrlRole).toUrl(), idx.data(HistoryModel.TitleRole).toString()) else: self.emit(SIGNAL("openUrl(const QUrl&, const QString&)"), idx.data(HistoryModel.UrlRole).toUrl(), idx.data(HistoryModel.TitleRole).toString()) def __copyHistory(self): """ Private slot to copy a history entry's URL to the clipboard. """ idx = self.historyTree.currentIndex() if not idx.parent().isValid(): return url = idx.data(HistoryModel.UrlStringRole).toString() clipboard = QApplication.clipboard() clipboard.setText(url) eric4-4.5.18/eric/Helpviewer/History/PaxHeaders.8617/__init__.py0000644000175000001440000000013212261012651022371 xustar000000000000000030 mtime=1388582313.564096911 30 atime=1389081084.492724372 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/History/__init__.py0000644000175000001440000000022512261012651022122 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Package implementing the history system. """ eric4-4.5.18/eric/Helpviewer/History/PaxHeaders.8617/HistoryFilterModel.py0000644000175000001440000000013212261012651024422 xustar000000000000000030 mtime=1388582313.567096949 30 atime=1389081084.492724372 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/History/HistoryFilterModel.py0000644000175000001440000003330712261012651024162 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing the history filter model. """ from PyQt4.QtCore import * from PyQt4.QtGui import QAbstractProxyModel from HistoryModel import HistoryModel class HistoryData(object): """ Class storing some history data. """ def __init__(self, offset, frequency = 0): """ Constructor @param offset tail offset (integer) @param frequency frequency (integer) """ self.tailOffset = offset self.frequency = frequency def __eq__(self, other): """ Special method implementing equality. @param other reference to the object to check against (HistoryData) @return flag indicating equality (boolean) """ return self.tailOffset == other.tailOffset and \ (self.frequency == -1 or other.frequency == -1 or \ self.frequency == other.frequency) def __lt__(self, other): """ Special method determining less relation. Note: Like the actual history entries the index mapping is sorted in reverse order by offset @param other reference to the history data object to compare against (HistoryEntry) @return flag indicating less (boolean) """ return self.tailOffset > other.tailOffset class HistoryFilterModel(QAbstractProxyModel): """ Class implementing the history filter model. """ FrequencyRole = HistoryModel.MaxRole + 1 MaxRole = FrequencyRole def __init__(self, sourceModel, parent = None): """ Constructor @param sourceModel reference to the source model (QAbstractItemModel) @param parent reference to the parent object (QObject) """ QAbstractProxyModel.__init__(self, parent) self.__loaded = False self.__filteredRows = [] self.__historyDict = {} self.__scaleTime = QDateTime() self.setSourceModel(sourceModel) def historyContains(self, url): """ Public method to check the history for an entry. @param url URL to check for (QString) @return flag indicating success (boolean) """ self.__load() return unicode(url) in self.__historyDict def historyLocation(self, url): """ Public method to get the row number of an entry in the source model. @param url URL to check for (QString) @return row number in the source model (integer) """ self.__load() url = unicode(url) if url not in self.__historyDict: return 0 return self.sourceModel().rowCount() - self.__historyDict[url] def data(self, index, role = Qt.DisplayRole): """ Public method to get data from the model. @param index index of history entry to get data for (QModelIndex) @param role data role (integer) @return history entry data (QVariant) """ if role == self.FrequencyRole and index.isValid(): return QVariant(self.__filteredRows[index.row()].frequency) return QAbstractProxyModel.data(self, index, role) def setSourceModel(self, sourceModel): """ Public method to set the source model. @param sourceModel reference to the source model (QAbstractItemModel) """ if self.sourceModel() is not None: self.disconnect(self.sourceModel(), SIGNAL("modelReset()"), self.__sourceReset) self.disconnect(self.sourceModel(), SIGNAL("dataChanged(const QModelIndex&, const QModelIndex&)"), self.__sourceDataChanged) self.disconnect(self.sourceModel(), SIGNAL("rowsInserted(const QModelIndex &, int, int)"), self.__sourceRowsInserted) self.disconnect(self.sourceModel(), SIGNAL("rowsRemoved(const QModelIndex &, int, int)"), self.__sourceRowsRemoved) QAbstractProxyModel.setSourceModel(self, sourceModel) if self.sourceModel() is not None: self.__loaded = False self.connect(self.sourceModel(), SIGNAL("modelReset()"), self.__sourceReset) self.connect(self.sourceModel(), SIGNAL("dataChanged(const QModelIndex&, const QModelIndex&)"), self.__sourceDataChanged) self.connect(self.sourceModel(), SIGNAL("rowsInserted(const QModelIndex &, int, int)"), self.__sourceRowsInserted) self.connect(self.sourceModel(), SIGNAL("rowsRemoved(const QModelIndex &, int, int)"), self.__sourceRowsRemoved) def __sourceDataChanged(self, topLeft, bottomRight): """ Private slot to handle the change of data of the source model. @param topLeft index of top left data element (QModelIndex) @param bottomRight index of bottom right data element (QModelIndex) """ self.emit(SIGNAL("dataChanged(const QModelIndex&, const QModelIndex&)"), self.mapFromSource(topLeft), self.mapFromSource(bottomRight)) def headerData(self, section, orientation, role = Qt.DisplayRole): """ Public method to get the header data. @param section section number (integer) @param orientation header orientation (Qt.Orientation) @param role data role (integer) @return header data (QVariant) """ return self.sourceModel().headerData(section, orientation, role) def recalculateFrequencies(self): """ Public method to recalculate the frequencies. """ self.__sourceReset() def __sourceReset(self): """ Private slot to handle a reset of the source model. """ self.__loaded = False self.reset() def rowCount(self, parent = QModelIndex()): """ Public method to determine the number of rows. @param parent index of parent (QModelIndex) @return number of rows (integer) """ self.__load() if parent.isValid(): return 0 return len(self.__historyDict) def columnCount(self, parent = QModelIndex()): """ Public method to get the number of columns. @param parent index of parent (QModelIndex) @return number of columns (integer) """ return self.sourceModel().columnCount(self.mapToSource(parent)) def mapToSource(self, proxyIndex): """ Public method to map an index to the source model index. @param proxyIndex reference to a proxy model index (QModelIndex) @return source model index (QModelIndex) """ self.__load() sourceRow = self.sourceModel().rowCount() - proxyIndex.internalId() return self.sourceModel().index(sourceRow, proxyIndex.column()) def mapFromSource(self, sourceIndex): """ Public method to map an index to the proxy model index. @param sourceIndex reference to a source model index (QModelIndex) @return proxy model index (QModelIndex) """ self.__load() url = unicode(sourceIndex.data(HistoryModel.UrlStringRole).toString()) if url not in self.__historyDict: return QModelIndex() sourceOffset = self.sourceModel().rowCount() - sourceIndex.row() try: row = self.__filteredRows.index(HistoryData(sourceOffset, -1)) except ValueError: return QModelIndex() return self.createIndex(row, sourceIndex.column(), sourceOffset) def index(self, row, column, parent = QModelIndex()): """ Public method to create an index. @param row row number for the index (integer) @param column column number for the index (integer) @param parent index of the parent item (QModelIndex) @return requested index (QModelIndex) """ self.__load() if row < 0 or row >= self.rowCount(parent) or \ column < 0 or column >= self.columnCount(parent): return QModelIndex() return self.createIndex(row, column, self.__filteredRows[row].tailOffset) def parent(self, index): """ Public method to get the parent index. @param index index of item to get parent (QModelIndex) @return index of parent (QModelIndex) """ return QModelIndex() def __load(self): """ Private method to load the model data. """ if self.__loaded: return self.__filteredRows = [] self.__historyDict = {} self.__scaleTime = QDateTime.currentDateTime() for sourceRow in range(self.sourceModel().rowCount()): idx = self.sourceModel().index(sourceRow, 0) url = unicode(idx.data(HistoryModel.UrlStringRole).toString()) if url not in self.__historyDict: sourceOffset = self.sourceModel().rowCount() - sourceRow self.__filteredRows.append( HistoryData(sourceOffset, self.__frequencyScore(idx))) self.__historyDict[url] = sourceOffset else: # the url is known already, so just update the frequency score row = self.__filteredRows.index(HistoryData(self.__historyDict[url], -1)) self.__filteredRows[row].frequency += self.__frequencyScore(idx) self.__loaded = True def __sourceRowsInserted(self, parent, start, end): """ Private slot to handle the insertion of data in the source model. @param parent reference to the parent index (QModelIndex) @param start start row (integer) @param end end row (integer) """ if start == end and start == 0: if not self.__loaded: return idx = self.sourceModel().index(start, 0, parent) url = unicode(idx.data(HistoryModel.UrlStringRole).toString()) currentFrequency = 0 if url in self.__historyDict: row = self.__filteredRows.index(HistoryData(self.__historyDict[url], -1)) currentFrequency = self.__filteredRows[row].frequency self.beginRemoveRows(QModelIndex(), row, row) del self.__filteredRows[row] del self.__historyDict[url] self.endRemoveRows() self.beginInsertRows(QModelIndex(), 0, 0) self.__filteredRows.insert(0, HistoryData(self.sourceModel().rowCount(), self.__frequencyScore(idx) + currentFrequency)) self.__historyDict[url] = self.sourceModel().rowCount() self.endInsertRows() def __sourceRowsRemoved(self, parent, start, end): """ Private slot to handle the removal of data in the source model. @param parent reference to the parent index (QModelIndex) @param start start row (integer) @param end end row (integer) """ self.__sourceReset() def removeRows(self, row, count, parent = QModelIndex()): """ Public method to remove entries from the model. @param row row of the first entry to remove (integer) @param count number of entries to remove (integer) @param index of the parent entry (QModelIndex) @return flag indicating successful removal (boolean) """ if row < 0 or \ count <= 0 or \ row + count > self.rowCount(parent) or \ parent.isValid(): return False lastRow = row + count - 1 self.disconnect(self.sourceModel(), SIGNAL("rowsRemoved(const QModelIndex &, int, int)"), self.__sourceRowsRemoved) self.beginRemoveRows(parent, row, lastRow) oldCount = self.rowCount() start = self.sourceModel().rowCount() - self.__filteredRows[row].tailOffset end = self.sourceModel().rowCount() - self.__filteredRows[lastRow].tailOffset self.sourceModel().removeRows(start, end - start + 1) self.endRemoveRows() self.connect(self.sourceModel(), SIGNAL("rowsRemoved(const QModelIndex &, int, int)"), self.__sourceRowsRemoved) self.__loaded = False if oldCount - count != self.rowCount(): self.reset() return True def __frequencyScore(self, sourceIndex): """ Private method to calculate the frequency score. @param sourceIndex index of the source model (QModelIndex) @return frequency score (integer) """ loadTime = \ self.sourceModel().data(sourceIndex, HistoryModel.DateTimeRole).toDateTime() days = loadTime.daysTo(self.__scaleTime) if days <= 1: return 100 elif days < 8: # within the last week return 90 elif days < 15: # within the last two weeks return 70 elif days < 31: # within the last month return 50 elif days < 91: # within the last 3 months return 30 else: return 10 eric4-4.5.18/eric/Helpviewer/History/PaxHeaders.8617/HistoryMenu.py0000644000175000001440000000013212261012651023120 xustar000000000000000030 mtime=1388582313.569096975 30 atime=1389081084.492724372 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/History/HistoryMenu.py0000644000175000001440000002556312261012651022665 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing the history menu. """ import sys from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQMessageBox from E4Gui.E4ModelMenu import E4ModelMenu import Helpviewer.HelpWindow from HistoryModel import HistoryModel from HistoryDialog import HistoryDialog import UI.PixmapCache class HistoryMenuModel(QAbstractProxyModel): """ Class implementing a model for the history menu. It maps the first bunch of items of the source model to the root. """ MOVEDROWS = 15 def __init__(self, sourceModel, parent = None): """ Constructor @param sourceModel reference to the source model (QAbstractItemModel) @param parent reference to the parent object (QObject) """ QAbstractProxyModel.__init__(self, parent) self.__treeModel = sourceModel self.setSourceModel(sourceModel) def bumpedRows(self): """ Public method to determine the number of rows moved to the root. @return number of rows moved to the root (integer) """ first = self.__treeModel.index(0, 0) if not first.isValid(): return 0 return min(self.__treeModel.rowCount(first), self.MOVEDROWS) def columnCount(self, parent = QModelIndex()): """ Public method to get the number of columns. @param parent index of parent (QModelIndex) @return number of columns (integer) """ return self.__treeModel.columnCount(self.mapToSource(parent)) def rowCount(self, parent = QModelIndex()): """ Public method to determine the number of rows. @param parent index of parent (QModelIndex) @return number of rows (integer) """ if parent.column() > 0: return 0 if not parent.isValid(): folders = self.sourceModel().rowCount() bumpedItems = self.bumpedRows() if bumpedItems <= self.MOVEDROWS and \ bumpedItems == self.sourceModel().rowCount(self.sourceModel().index(0, 0)): folders -= 1 return bumpedItems + folders if parent.internalId() == sys.maxint: if parent.row() < self.bumpedRows(): return 0 idx = self.mapToSource(parent) defaultCount = self.sourceModel().rowCount(idx) if idx == self.sourceModel().index(0, 0): return defaultCount - self.bumpedRows() return defaultCount def mapFromSource(self, sourceIndex): """ Public method to map an index to the proxy model index. @param sourceIndex reference to a source model index (QModelIndex) @return proxy model index (QModelIndex) """ assert False sourceRow = self.__treeModel.mapToSource(sourceIndex).row() return self.createIndex(sourceIndex.row(), sourceIndex.column(), sourceRow) def mapToSource(self, proxyIndex): """ Public method to map an index to the source model index. @param proxyIndex reference to a proxy model index (QModelIndex) @return source model index (QModelIndex) """ if not proxyIndex.isValid(): return QModelIndex() if proxyIndex.internalId() == sys.maxint: bumpedItems = self.bumpedRows() if proxyIndex.row() < bumpedItems: return self.__treeModel.index(proxyIndex.row(), proxyIndex.column(), self.__treeModel.index(0, 0)) if bumpedItems <= self.MOVEDROWS and \ bumpedItems == self.sourceModel().rowCount(self.__treeModel.index(0, 0)): bumpedItems -= 1 return self.__treeModel.index(proxyIndex.row() - bumpedItems, proxyIndex.column()) historyIndex = self.__treeModel.sourceModel()\ .index(proxyIndex.internalId(), proxyIndex.column()) treeIndex = self.__treeModel.mapFromSource(historyIndex) return treeIndex def index(self, row, column, parent = QModelIndex()): """ Public method to create an index. @param row row number for the index (integer) @param column column number for the index (integer) @param parent index of the parent item (QModelIndex) @return requested index (QModelIndex) """ if row < 0 or \ column < 0 or \ column >= self.columnCount(parent) or \ parent.column() > 0: return QModelIndex() if not parent.isValid(): return self.createIndex(row, column, sys.maxint) treeIndexParent = self.mapToSource(parent) bumpedItems = 0 if treeIndexParent == self.sourceModel().index(0, 0): bumpedItems = self.bumpedRows() treeIndex = self.__treeModel.index(row + bumpedItems, column, treeIndexParent) historyIndex = self.__treeModel.mapToSource(treeIndex) historyRow = historyIndex.row() if historyRow == -1: historyRow = treeIndex.row() return self.createIndex(row, column, historyRow) def parent(self, index): """ Public method to get the parent index. @param index index of item to get parent (QModelIndex) @return index of parent (QModelIndex) """ offset = index.internalId() if offset == sys.maxint or not index.isValid(): return QModelIndex() historyIndex = self.__treeModel.sourceModel().index(index.internalId(), 0) treeIndex = self.__treeModel.mapFromSource(historyIndex) treeIndexParent = treeIndex.parent() sourceRow = self.sourceModel().mapToSource(treeIndexParent).row() bumpedItems = self.bumpedRows() if bumpedItems <= self.MOVEDROWS and \ bumpedItems == self.sourceModel().rowCount(self.sourceModel().index(0, 0)): bumpedItems -= 1 return self.createIndex(bumpedItems + treeIndexParent.row(), treeIndexParent.column(), sourceRow) def mimeData(self, indexes): """ Public method to return the mime data. @param indexes list of indexes (QModelIndexList) @return mime data (QMimeData) """ urls = [] for index in indexes: url = index.data(HistoryModel.UrlRole).toUrl() urls.append(url) mdata = QMimeData() mdata.setUrls(urls) return mdata class HistoryMenu(E4ModelMenu): """ Class implementing the history menu. @signal openUrl(const QUrl&, const QString&) emitted to open a URL in the current tab @signal newUrl(const QUrl&, const QString&) emitted to open a URL in a new tab """ def __init__(self, parent = None): """ Constructor @param parent reference to the parent widget (QWidget) """ E4ModelMenu.__init__(self, parent) self.__historyManager = None self.__historyMenuModel = None self.__initialActions = [] self.setMaxRows(7) self.connect(self, SIGNAL("activated(const QModelIndex&)"), self.__activated) self.setStatusBarTextRole(HistoryModel.UrlStringRole) def __activated(self, idx): """ Private slot handling the activated signal. @param idx index of the activated item (QModelIndex) """ if self._keyboardModifiers & Qt.ControlModifier: self.emit(SIGNAL("newUrl(const QUrl&, const QString&)"), idx.data(HistoryModel.UrlRole).toUrl(), idx.data(HistoryModel.TitleRole).toString()) else: self.emit(SIGNAL("openUrl(const QUrl&, const QString&)"), idx.data(HistoryModel.UrlRole).toUrl(), idx.data(HistoryModel.TitleRole).toString()) def prePopulated(self): """ Public method to add any actions before the tree. @return flag indicating if any actions were added """ if self.__historyManager is None: self.__historyManager = Helpviewer.HelpWindow.HelpWindow.historyManager() self.__historyMenuModel = \ HistoryMenuModel(self.__historyManager.historyTreeModel(), self) self.setModel(self.__historyMenuModel) # initial actions for act in self.__initialActions: self.addAction(act) if len(self.__initialActions) != 0: self.addSeparator() self.setFirstSeparator(self.__historyMenuModel.bumpedRows()) return False def postPopulated(self): """ Public method to add any actions after the tree. """ if len(self.__historyManager.history()) > 0: self.addSeparator() act = self.addAction(UI.PixmapCache.getIcon("history.png"), self.trUtf8("Show All History...")) self.connect(act, SIGNAL("triggered()"), self.__showHistoryDialog) act = self.addAction(UI.PixmapCache.getIcon("historyClear.png"), self.trUtf8("Clear History...")) self.connect(act, SIGNAL("triggered()"), self.__clearHistoryDialog) def setInitialActions(self, actions): """ Public method to set the list of actions that should appear first in the menu. @param actions list of initial actions (list of QAction) """ self.__initialActions = actions[:] for act in self.__initialActions: self.addAction(act) def __showHistoryDialog(self): """ Private slot to show the history dialog. """ dlg = HistoryDialog(self) dlg.setAttribute(Qt.WA_DeleteOnClose) self.connect(dlg, SIGNAL("newUrl(const QUrl&, const QString&)"), self, SIGNAL("newUrl(const QUrl&, const QString&)")) self.connect(dlg, SIGNAL("openUrl(const QUrl&, const QString&)"), self, SIGNAL("openUrl(const QUrl&, const QString&)")) dlg.show() def __clearHistoryDialog(self): """ Private slot to clear the history. """ if self.__historyManager is not None and \ KQMessageBox.question(None, self.trUtf8("Clear History"), self.trUtf8("""Do you want to clear the history?"""), QMessageBox.StandardButtons(\ QMessageBox.No | \ QMessageBox.Yes), QMessageBox.No) == QMessageBox.Yes: self.__historyManager.clear() eric4-4.5.18/eric/Helpviewer/History/PaxHeaders.8617/HistoryDialog.ui0000644000175000001440000000013212033056310023375 xustar000000000000000030 mtime=1349278920.084245404 30 atime=1389081084.502724372 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/History/HistoryDialog.ui0000644000175000001440000001150012033056310023124 0ustar00detlevusers00000000000000 HistoryDialog 0 0 750 450 Manage History true Qt::Horizontal 40 20 0 Enter search term for history entries Press to clear the search edit true QAbstractItemView::ExtendedSelection Qt::ElideMiddle true Press to remove the selected entries &Remove false Press to remove all entries Remove &All false Qt::Horizontal 40 20 Qt::Horizontal QDialogButtonBox::Close E4TreeView QTreeView
    E4Gui/E4TreeView
    searchEdit clearButton historyTree removeButton removeAllButton buttonBox buttonBox accepted() HistoryDialog accept() 252 445 157 274 buttonBox rejected() HistoryDialog reject() 320 445 286 274 clearButton clicked() searchEdit clear() 728 21 706 20
    eric4-4.5.18/eric/Helpviewer/History/PaxHeaders.8617/HistoryManager.py0000644000175000001440000000013212261012651023566 xustar000000000000000030 mtime=1388582313.574097038 30 atime=1389081084.502724372 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/History/HistoryManager.py0000644000175000001440000004022712261012651023325 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing the history manager. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from PyQt4.QtWebKit import QWebHistoryInterface, QWebSettings from KdeQt import KQMessageBox from HistoryModel import HistoryModel from HistoryFilterModel import HistoryFilterModel from HistoryTreeModel import HistoryTreeModel from Utilities.AutoSaver import AutoSaver import Utilities import Preferences HISTORY_VERSION = 42 class HistoryEntry(object): """ Class implementing a history entry. """ def __init__(self, url = None, dateTime = None, title = None): """ Constructor @param url URL of the history entry (QString) @param dateTime date and time this entry was created (QDateTime) @param title title string for the history entry (QString) """ self.url = url and url or QString() self.dateTime = dateTime and dateTime or QDateTime() self.title = title and title or QString() def __eq__(self, other): """ Special method determining equality. @param other reference to the history entry to compare against (HistoryEntry) @return flag indicating equality (boolean) """ return other.title == self.title and \ other.url == self.url and \ other.dateTime == self.dateTime def __lt__(self, other): """ Special method determining less relation. Note: History is sorted in reverse order by date and time @param other reference to the history entry to compare against (HistoryEntry) @return flag indicating less (boolean) """ return self.dateTime > other.dateTime def userTitle(self): """ Public method to get the title of the history entry. @return title of the entry (QString) """ if self.title.isEmpty(): page = QFileInfo(QUrl(self.url).path()).fileName() if not page.isEmpty(): return page return self.url return self.title class HistoryManager(QWebHistoryInterface): """ Class implementing the history manager. @signal historyCleared() emitted after the history has been cleared @signal historyReset() emitted after the history has been reset @signal entryAdded emitted after a history entry has been added @signal entryRemoved emitted after a history entry has been removed @signal entryUpdated(int) emitted after a history entry has been updated """ def __init__(self, parent = None): """ Constructor @param parent reference to the parent object (QObject) """ QWebHistoryInterface.__init__(self, parent) self.__saveTimer = AutoSaver(self, self.save) self.__daysToExpire = Preferences.getHelp("HistoryLimit") self.__history = [] self.__lastSavedUrl = QString() self.__expiredTimer = QTimer() self.__expiredTimer.setSingleShot(True) self.connect(self.__expiredTimer, SIGNAL("timeout()"), self.__checkForExpired) self.__frequencyTimer = QTimer() self.__frequencyTimer.setSingleShot(True) self.connect(self.__frequencyTimer, SIGNAL("timeout()"), self.__refreshFrequencies) self.connect(self, SIGNAL("entryAdded"), self.__saveTimer.changeOccurred) self.connect(self, SIGNAL("entryRemoved"), self.__saveTimer.changeOccurred) self.__load() self.__historyModel = HistoryModel(self, self) self.__historyFilterModel = HistoryFilterModel(self.__historyModel, self) self.__historyTreeModel = HistoryTreeModel(self.__historyFilterModel, self) QWebHistoryInterface.setDefaultInterface(self) self.__startFrequencyTimer() def close(self): """ Public method to close the history manager. """ # remove history items on application exit if self.__daysToExpire == -2: self.clear() self.__saveTimer.saveIfNeccessary() def history(self): """ Public method to return the history. @return reference to the list of history entries (list of HistoryEntry) """ return self.__history[:] def setHistory(self, history, loadedAndSorted = False): """ Public method to set a new history. @param history reference to the list of history entries to be set (list of HistoryEntry) @param loadedAndSorted flag indicating that the list is sorted (boolean) """ self.__history = history[:] if not loadedAndSorted: self.__history.sort() self.__checkForExpired() if loadedAndSorted: try: self.__lastSavedUrl = QString(self.__history[0].url) except IndexError: self.__lastSavedUrl = QString() else: self.__lastSavedUrl.clear() self.__saveTimer.changeOccurred() self.emit(SIGNAL("historyReset()")) def historyContains(self, url): """ Public method to check the history for an entry. @param url URL to check for (QString) @return flag indicating success (boolean) """ return self.__historyFilterModel.historyContains(url) def _addHistoryEntry(self, itm): """ Protected method to add a history item. @param itm reference to the history item to add (HistoryEntry) """ globalSettings = QWebSettings.globalSettings() if globalSettings.testAttribute(QWebSettings.PrivateBrowsingEnabled): return self.__history.insert(0, itm) self.emit(SIGNAL("entryAdded"), itm) if len(self.__history) == 1: self.__checkForExpired() def _removeHistoryEntry(self, itm): """ Protected method to remove a history item. @param itm reference to the history item to remove (HistoryEntry) """ self.__lastSavedUrl.clear() self.__history.remove(itm) self.emit(SIGNAL("entryRemoved"), itm) def addHistoryEntry(self, url): """ Public method to add a history entry. @param url URL to be added (QString) """ cleanurl = QUrl(url) cleanurl.setPassword("") cleanurl.setHost(cleanurl.host().toLower()) itm = HistoryEntry(cleanurl.toString(), QDateTime.currentDateTime()) self._addHistoryEntry(itm) def updateHistoryEntry(self, url, title): """ Public method to update a history entry. @param url URL of the entry to update (QString) @param title title of the entry to update (QString) """ for index in range(len(self.__history)): if url == self.__history[index].url: self.__history[index].title = title self.__saveTimer.changeOccurred() if self.__lastSavedUrl.isEmpty(): self.__lastSavedUrl = QString(self.__history[index].url) self.emit(SIGNAL("entryUpdated(int)"), index) break def removeHistoryEntry(self, url, title = QString()): """ Public method to remove a history entry. @param url URL of the entry to remove (QUrl) @param title title of the entry to remove (QString) """ for index in range(len(self.__history)): if url == QUrl(self.__history[index].url) and \ (title.isEmpty() or title == self.__history[index].title): self._removeHistoryEntry(self.__history[index]) break def historyModel(self): """ Public method to get a reference to the history model. @return reference to the history model (HistoryModel) """ return self.__historyModel def historyFilterModel(self): """ Public method to get a reference to the history filter model. @return reference to the history filter model (HistoryFilterModel) """ return self.__historyFilterModel def historyTreeModel(self): """ Public method to get a reference to the history tree model. @return reference to the history tree model (HistoryTreeModel) """ return self.__historyTreeModel def __checkForExpired(self): """ Private slot to check entries for expiration. """ if self.__daysToExpire < 0 or len(self.__history) == 0: return now = QDateTime.currentDateTime() nextTimeout = 0 while self.__history: checkForExpired = QDateTime(self.__history[-1].dateTime) checkForExpired.setDate(checkForExpired.date().addDays(self.__daysToExpire)) if now.daysTo(checkForExpired) > 7: nextTimeout = 7 * 86400 else: nextTimeout = now.secsTo(checkForExpired) if nextTimeout > 0: break itm = self.__history.pop(-1) self.__lastSavedUrl.clear() self.emit(SIGNAL("entryRemoved"), itm) self.__saveTimer.saveIfNeccessary() if nextTimeout > 0: self.__expiredTimer.start(nextTimeout * 1000) def daysToExpire(self): """ Public method to get the days for entry expiration. @return days for entry expiration (integer) """ return self.__daysToExpire def setDaysToExpire(self, limit): """ Public method to set the days for entry expiration. @param limit days for entry expiration (integer) """ if self.__daysToExpire == limit: return self.__daysToExpire = limit self.__checkForExpired() self.__saveTimer.changeOccurred() def preferencesChanged(self): """ Public method to indicate a change of preferences. """ self.setDaysToExpire(Preferences.getHelp("HistoryLimit")) def clear(self): """ Public slot to clear the complete history. """ self.__history = [] self.__lastSavedUrl.clear() self.__saveTimer.changeOccurred() self.__saveTimer.saveIfNeccessary() self.emit(SIGNAL("historyReset()")) self.emit(SIGNAL("historyCleared()")) def __load(self): """ Private method to load the saved history entries from disk. """ historyFile = QFile(Utilities.getConfigDir() + "/browser/history") if not historyFile.exists(): return if not historyFile.open(QIODevice.ReadOnly): KQMessageBox.warning(None, self.trUtf8("Loading History"), self.trUtf8("""

    Unable to open history file %1.""" """
    Reason: %2

    """)\ .arg(historyFile.fileName).arg(historyFile.errorString())) return history = [] historyStream = QDataStream(historyFile) # double check, that the history file is sorted as it is read needToSort = False lastInsertedItem = HistoryEntry() data = QByteArray() stream = QDataStream() buffer = QBuffer() stream.setDevice(buffer) while not historyFile.atEnd(): historyStream >> data buffer.close() buffer.setBuffer(data) buffer.open(QIODevice.ReadOnly) ver = stream.readUInt32() if ver != HISTORY_VERSION: continue itm = HistoryEntry() stream >> itm.url stream >> itm.dateTime stream >> itm.title if not itm.dateTime.isValid(): continue if itm == lastInsertedItem: if lastInsertedItem.title.isEmpty() and len(history) > 0: history[0].title = itm.title continue if not needToSort and history and lastInsertedItem < itm: needToSort = True history.insert(0, itm) lastInsertedItem = itm historyFile.close() if needToSort: history.sort() self.setHistory(history, True) # if the history had to be sorted, rewrite the history sorted if needToSort: self.__lastSavedUrl.clear() self.__saveTimer.changeOccurred() def save(self): """ Public slot to save the history entries to disk. """ historyFile = QFile(Utilities.getConfigDir() + "/browser/history") if not historyFile.exists(): self.__lastSavedUrl.clear() saveAll = self.__lastSavedUrl.isEmpty() first = len(self.__history) - 1 if not saveAll: # find the first one to save for index in range(len(self.__history)): if self.__history[index].url == self.__lastSavedUrl: first = index - 1 break if first == len(self.__history) - 1: saveAll = True # use a temporary file when saving everything tempFile = QTemporaryFile() tempFile.setAutoRemove(False) if saveAll: opened = tempFile.open() else: opened = historyFile.open(QIODevice.Append) if not opened: if saveAll: f = tempFile else: f = historyFile KQMessageBox.warning(None, self.trUtf8("Saving History"), self.trUtf8("""

    Unable to open history file %1.""" """
    Reason: %2

    """)\ .arg(f.fileName()).arg(f.errorString())) return if saveAll: historyStream = QDataStream(tempFile) else: historyStream = QDataStream(historyFile) for index in range(first, -1, -1): data = QByteArray() stream = QDataStream(data, QIODevice.WriteOnly) itm = self.__history[index] stream.writeUInt32(HISTORY_VERSION) stream << itm.url stream << itm.dateTime stream << itm.title historyStream << data if saveAll: tempFile.close() if historyFile.exists() and not historyFile.remove(): KQMessageBox.warning(None, self.trUtf8("Saving History"), self.trUtf8("""

    Error removing old history file %1.""" """
    Reason: %2

    """)\ .arg(historyFile.fileName()).arg(historyFile.errorString())) if not tempFile.copy(historyFile.fileName()): KQMessageBox.warning(None, self.trUtf8("Saving History"), self.trUtf8("""

    Error moving new history file over old one """ """(%1).
    Reason: %2

    """)\ .arg(historyFile.fileName()).arg(tempFile.errorString())) else: historyFile.close() try: self.__lastSavedUrl = QString(self.__history[0].url) except IndexError: self.__lastSavedUrl = QString() def __refreshFrequencies(self): """ Private slot to recalculate the refresh frequencies. """ self.__historyFilterModel.recalculateFrequencies() self.__startFrequencyTimer() def __startFrequencyTimer(self): """ Private method to start the timer to recalculate the frequencies. """ tomorrow = QDateTime(QDate.currentDate().addDays(1), QTime(3, 0)) self.__frequencyTimer.start(QDateTime.currentDateTime().secsTo(tomorrow) * 1000) eric4-4.5.18/eric/Helpviewer/PaxHeaders.8617/HelpTopicDialog.py0000644000175000001440000000013212261012651022200 xustar000000000000000030 mtime=1388582313.578097089 30 atime=1389081084.502724372 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/HelpTopicDialog.py0000644000175000001440000000330612261012651021734 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a dialog to select a help topic to display. """ from PyQt4.QtGui import QDialog from PyQt4.QtCore import pyqtSignature, SIGNAL, QUrl from Ui_HelpTopicDialog import Ui_HelpTopicDialog class HelpTopicDialog(QDialog, Ui_HelpTopicDialog): """ Class implementing a dialog to select a help topic to display. """ def __init__(self, parent, keyword, links): """ Constructor @param parent reference to the parent widget (QWidget) @param keyword keyword for the link set (QString) @param links dictionary with help topic as key (QString) and URL as value (QUrl) """ QDialog.__init__(self, parent) self.setupUi(self) self.label.setText(self.trUtf8("Choose a &topic for %1:")\ .arg(keyword)) self.__links = links for topic in sorted(self.__links): self.topicsList.addItem(topic) if self.topicsList.count() > 0: self.topicsList.setCurrentRow(0) self.topicsList.setFocus() self.connect(self.topicsList, SIGNAL("itemActivated(QListWidgetItem*)"), self.accept) def link(self): """ Public method to the link of the selected topic. @return URL of the selected topic (QUrl) """ itm = self.topicsList.currentItem() if itm is None: return QUrl() topic = itm.text() if topic.isEmpty() or topic not in self.__links: return QUrl() return self.__links[topic] eric4-4.5.18/eric/Helpviewer/PaxHeaders.8617/HelpTopicDialog.ui0000644000175000001440000000007411154731056022201 xustar000000000000000030 atime=1389081084.502724372 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/HelpTopicDialog.ui0000644000175000001440000000344211154731056021731 0ustar00detlevusers00000000000000 HelpTopicDialog 0 0 500 300 Select Help Topic &Topics: topicsList Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok topicsList buttonBox buttonBox accepted() HelpTopicDialog accept() 248 254 157 274 buttonBox rejected() HelpTopicDialog reject() 316 260 286 274 eric4-4.5.18/eric/Helpviewer/PaxHeaders.8617/SearchWidget.py0000644000175000001440000000013212261012651021542 xustar000000000000000030 mtime=1388582313.580097114 30 atime=1389081084.502724372 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/SearchWidget.py0000644000175000001440000001362312261012651021301 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing the search bar for the web browser. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from Ui_SearchWidget import Ui_SearchWidget import UI.PixmapCache class SearchWidget(QWidget, Ui_SearchWidget): """ Class implementing the search bar for the web browser. """ def __init__(self, mainWindow, parent = None): """ Constructor @param mainWindow reference to the main window (QMainWindow) @param parent parent widget of this dialog (QWidget) """ QWidget.__init__(self, parent) self.setupUi(self) self.__mainWindow = mainWindow self.wrapCheckBox.setChecked(True) self.closeButton.setIcon(UI.PixmapCache.getIcon("close.png")) self.findPrevButton.setIcon(UI.PixmapCache.getIcon("1leftarrow.png")) self.findNextButton.setIcon(UI.PixmapCache.getIcon("1rightarrow.png")) self.__defaultBaseColor = \ self.findtextCombo.lineEdit().palette().color(QPalette.Base) self.__defaultTextColor = \ self.findtextCombo.lineEdit().palette().color(QPalette.Text) self.findHistory = QStringList() self.havefound = False self.__findBackwards = False self.connect(self.findtextCombo.lineEdit(), SIGNAL("returnPressed()"), self.__findByReturnPressed) def on_findtextCombo_editTextChanged(self, txt): """ Private slot to enable/disable the find buttons. """ self.findPrevButton.setEnabled(not txt.isEmpty()) self.findNextButton.setEnabled(not txt.isEmpty()) def __findNextPrev(self): """ Private slot to find the next occurrence of text. """ self.infoLabel.clear() self.__setFindtextComboBackground(False) if not self.havefound or self.findtextCombo.currentText().isEmpty(): self.showFind() return if not self.__mainWindow.currentBrowser().findNextPrev( self.findtextCombo.currentText(), self.caseCheckBox.isChecked(), self.__findBackwards, self.wrapCheckBox.isChecked()): self.infoLabel.setText(self.trUtf8("Expression was not found.")) self.__setFindtextComboBackground(True) @pyqtSignature("") def on_findNextButton_clicked(self): """ Private slot to find the next occurrence. """ txt = self.findtextCombo.currentText() # This moves any previous occurrence of this statement to the head # of the list and updates the combobox self.findHistory.removeAll(txt) self.findHistory.prepend(txt) self.findtextCombo.clear() self.findtextCombo.addItems(self.findHistory) self.__findBackwards = False self.__findNextPrev() def findNext(self): """ Public slot to find the next occurrence. """ self.on_findNextButton_clicked() @pyqtSignature("") def on_findPrevButton_clicked(self): """ Private slot to find the previous occurrence. """ txt = self.findtextCombo.currentText() # This moves any previous occurrence of this statement to the head # of the list and updates the combobox self.findHistory.removeAll(txt) self.findHistory.prepend(txt) self.findtextCombo.clear() self.findtextCombo.addItems(self.findHistory) self.__findBackwards = True self.__findNextPrev() def findPrevious(self): """ Public slot to find the previous occurrence. """ self.on_findPrevButton_clicked() def __findByReturnPressed(self): """ Private slot to handle the returnPressed signal of the findtext combobox. """ if self.__findBackwards: self.on_findPrevButton_clicked() else: self.on_findNextButton_clicked() def showFind(self): """ Public method to display this dialog. """ self.havefound = True self.__findBackwards = False self.findtextCombo.clear() self.findtextCombo.addItems(self.findHistory) self.findtextCombo.setEditText('') self.findtextCombo.setFocus() self.caseCheckBox.setChecked(False) if self.__mainWindow.currentBrowser().hasSelection(): self.findtextCombo.setEditText( self.__mainWindow.currentBrowser().selectedText()) self.__setFindtextComboBackground(False) self.show() @pyqtSignature("") def on_closeButton_clicked(self): """ Private slot to close the widget. """ self.close() def keyPressEvent(self, event): """ Protected slot to handle key press events. @param event reference to the key press event (QKeyEvent) """ if event.key() == Qt.Key_Escape: cb = self.__mainWindow.currentBrowser() if cb: cb.setFocus(Qt.ActiveWindowFocusReason) event.accept() self.close() def __setFindtextComboBackground(self, error): """ Private slot to change the findtext combo background to indicate errors. @param error flag indicating an error condition (boolean) """ le = self.findtextCombo.lineEdit() p = le.palette() if error: p.setBrush(QPalette.Base, QBrush(QColor("#FF6666"))) p.setBrush(QPalette.Text, QBrush(QColor("#000000"))) else: p.setBrush(QPalette.Base, self.__defaultBaseColor) p.setBrush(QPalette.Text, self.__defaultTextColor) le.setPalette(p) le.update() eric4-4.5.18/eric/Helpviewer/PaxHeaders.8617/HelpClearPrivateDataDialog.ui0000644000175000001440000000007411262064316024274 xustar000000000000000030 atime=1389081084.502724372 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/HelpClearPrivateDataDialog.ui0000644000175000001440000000756411262064316024035 0ustar00detlevusers00000000000000 HelpClearPrivateDataDialog 0 0 305 191 Clear Private Data true Select to clear the browsing history &Browsing History true Select to clear the search history &Search History true Select to clear the cookies &Cookies true Select to clear the disk cache Cached &Web Pages true Select to clear the website icons Website &Icons true Select to clear the saved passwords Saved &Passwords false Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok historyCheckBox searchCheckBox cookiesCheckBox cacheCheckBox iconsCheckBox passwordsCheckBox buttonBox buttonBox accepted() HelpClearPrivateDataDialog accept() 248 254 157 274 buttonBox rejected() HelpClearPrivateDataDialog reject() 316 260 286 274 eric4-4.5.18/eric/Helpviewer/PaxHeaders.8617/DownloadDialog.py0000644000175000001440000000013212261012651022060 xustar000000000000000030 mtime=1388582313.584097164 30 atime=1389081084.503724372 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/DownloadDialog.py0000644000175000001440000004074012261012651021617 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2008 - 2014 Detlev Offenbach # """ Module implementing the download dialog. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from PyQt4.QtNetwork import QNetworkReply, QNetworkAccessManager, QNetworkRequest from KdeQt import KQFileDialog, KQMessageBox import Preferences import Helpviewer.HelpWindow from Ui_DownloadDialog import Ui_DownloadDialog class DownloadDialog(QWidget, Ui_DownloadDialog): """ Class implementing the download dialog. @signal done() emitted just before the dialog is closed """ def __init__(self, reply = None, requestFilename = False, webPage = None, download = False, parent = None): """ Constructor @param reply reference to the network reply object (QNetworkReply) @param requestFilename flag indicating to ask the user for a filename (boolean) @param webPage reference to the web page object the download originated from (QWebPage) @param download flag indicating a download operation (boolean) @param parent reference to the parent widget (QWidget) """ QWidget.__init__(self, parent) self.setupUi(self) self.setAttribute(Qt.WA_DeleteOnClose) self.__windowTitleTemplate = self.trUtf8("Eric4 Download %1") self.setWindowTitle(self.__windowTitleTemplate.arg("")) self.__tryAgainButton = \ self.buttonBox.addButton(self.trUtf8("Try Again"), QDialogButtonBox.ActionRole) self.__stopButton = \ self.buttonBox.addButton(self.trUtf8("Stop"), QDialogButtonBox.ActionRole) self.__openButton = self.buttonBox.button(QDialogButtonBox.Open) self.__closeButton = self.buttonBox.button(QDialogButtonBox.Close) self.__tryAgainButton.setEnabled(False) self.__closeButton.setEnabled(False) self.__openButton.setEnabled(False) self.keepOpenCheckBox.setChecked(True) icon = self.style().standardIcon(QStyle.SP_FileIcon) self.fileIcon.setPixmap(icon.pixmap(48, 48)) self.__reply = reply self.__requestFilename = requestFilename self.__page = webPage self.__toDownload = download self.__bytesReceived = 0 self.__downloadTime = QTime() self.__output = QFile() self.__initialized = False def initialize(self): """ Public method to (re)initialize the dialog. @return flag indicating success (boolean) """ if self.__reply is None: return self.__startedSaving = False self.__downloadFinished = False self.__url = self.__reply.url() if not self.__getFileName(): return False self.__reply.setParent(self) self.connect(self.__reply, SIGNAL("readyRead()"), self.__readyRead) self.connect(self.__reply, SIGNAL("error(QNetworkReply::NetworkError)"), self.__networkError) self.connect(self.__reply, SIGNAL("downloadProgress(qint64, qint64)"), self.__downloadProgress) self.connect(self.__reply, SIGNAL("metaDataChanged()"), self.__metaDataChanged) self.connect(self.__reply, SIGNAL("finished()"), self.__finished) # reset info self.infoLabel.clear() self.progressBar.setValue(0) # start timer for the download estimation self.__downloadTime.start() self.__initialized = True if self.__reply.error() != QNetworkReply.NoError: self.__networkError() self.__finished() return False return True def __getFileName(self): """ Private method to get the filename to save to from the user. @return flag indicating success (boolean) """ downloadDirectory = Preferences.getUI("DownloadPath") if downloadDirectory.isEmpty(): downloadDirectory = \ QDesktopServices.storageLocation(QDesktopServices.DocumentsLocation) if not downloadDirectory.isEmpty(): downloadDirectory += '/' defaultFileName = self.__saveFileName(downloadDirectory) fileName = defaultFileName baseName = QFileInfo(fileName).completeBaseName() self.__autoOpen = False if not self.__toDownload: res = KQMessageBox.question(None, self.trUtf8("Downloading"), self.trUtf8("""

    You are about to download the file %1.

    """ """

    What do you want to do?

    """).arg(fileName), QMessageBox.StandardButtons(\ QMessageBox.Open | \ QMessageBox.Save | \ QMessageBox.Cancel)) if res == QMessageBox.Cancel: self.__stop() self.close() return False self.__autoOpen = res == QMessageBox.Open fileName = QDesktopServices.storageLocation(QDesktopServices.TempLocation) + \ '/' + QFileInfo(fileName).completeBaseName() if not self.__autoOpen and self.__requestFilename: fileName = KQFileDialog.getSaveFileName(\ None, self.trUtf8("Save File"), defaultFileName, QString(), None) if fileName.isEmpty(): self.__reply.close() if not self.keepOpenCheckBox.isChecked(): self.close() return False else: self.filenameLabel.setText(self.trUtf8("Download canceled: %1")\ .arg(QFileInfo(defaultFileName).fileName())) self.__stop() return True self.__output.setFileName(fileName) self.filenameLabel.setText(QFileInfo(self.__output.fileName()).fileName()) if self.__requestFilename: self.__readyRead() return True def __saveFileName(self, directory): """ Private method to calculate a name for the file to download. @param directory name of the directory to store the file into (QString) @return proposed filename (QString) """ path = QString() if self.__reply.hasRawHeader("Content-Disposition"): header = QString(self.__reply.rawHeader("Content-Disposition")) if not header.isEmpty(): pos = header.indexOf("filename=") if pos != -1: path = header[pos + 9:] if path.startsWith('"') and path.endsWith('"'): path = path[1:-1] if path.isEmpty(): path = self.__url.path() info = QFileInfo(path) baseName = info.completeBaseName() endName = info.suffix() if baseName.isEmpty(): baseName = QString("unnamed_download") name = directory + baseName if not endName.isEmpty(): name += '.' + endName i = 1 while QFile.exists(name): # file exists already, don't overwrite name = directory + baseName + '-' + QString.number(i) if not endName.isEmpty(): name += '.' + endName i += 1 return name @pyqtSignature("QAbstractButton*") def on_buttonBox_clicked(self, button): """ Private slot called by a button of the button box clicked. @param button button that was clicked (QAbstractButton) """ if button == self.__closeButton: self.close() elif button == self.__openButton: self.__open() elif button == self.__stopButton: self.__stop() elif button == self.__tryAgainButton: self.__tryAgain() def __stop(self): """ Private slot to stop the download. """ self.__stopButton.setEnabled(False) self.__closeButton.setEnabled(True) self.__tryAgainButton.setEnabled(True) self.__reply.abort() def __open(self): """ Private slot to open the downloaded file. """ info = QFileInfo(self.__output) url = QUrl.fromLocalFile(info.absoluteFilePath()) QDesktopServices.openUrl(url) def __tryAgain(self): """ Private slot to retry the download. """ self.__tryAgainButton.setEnabled(False) self.__closeButton.setEnabled(False) self.__stopButton.setEnabled(True) if self.__page: nam = self.__page.networkAccessManager() else: nam = QNetworkAccessManager() reply = nam.get(QNetworkRequest(self.__url)) if self.__output.exists(): self.__output.remove() self.__reply = reply self.initialize() def __readyRead(self): """ Private slot to read the available data. """ if self.__requestFilename and self.__output.fileName().isEmpty(): return if not self.__output.isOpen(): # in case someone else has already put a file there if not self.__requestFilename: self.__getFileName() if not self.__output.open(QIODevice.WriteOnly): self.infoLabel.setText(self.trUtf8("Error opening save file: %1")\ .arg(self.__output.errorString())) self.__stopButton.click() return bytesWritten = self.__output.write(self.__reply.readAll()) if bytesWritten == -1: self.infoLabel.setText(self.trUtf8("Error saving: %1")\ .arg(self.__output.errorString())) self.__stopButton.click() else: size = self.__reply.header(QNetworkRequest.ContentLengthHeader).toInt()[0] if size == bytesWritten: self.__downloadProgress(size, size) self.__downloadFinished = True self.__startedSaving = True if self.__downloadFinished: self.__finished() def __networkError(self): """ Private slot to handle a network error. """ if self.__reply.error() != QNetworkReply.OperationCanceledError: self.infoLabel.setText(self.trUtf8("Network Error: %1")\ .arg(self.__reply.errorString())) self.__tryAgainButton.setEnabled(True) self.__closeButton.setEnabled(True) self.__openButton.setEnabled(False) def __metaDataChanged(self): """ Private slot to handle a change of the meta data. """ locationHeader = self.__reply.header(QNetworkRequest.LocationHeader) if locationHeader.isValid(): self.__url = locationHeader.toUrl() self.__reply = Helpviewer.HelpWindow.HelpWindow.networkAccessManager().get( QNetworkRequest(self.__url)) self.initialize() def __downloadProgress(self, received, total): """ Private method show the download progress. @param received number of bytes received (integer) @param total number of total bytes (integer) """ self.__bytesReceived = received if total == -1: self.progressBar.setMaximum(0) self.progressBar.setValue(0) self.setWindowTitle(self.__windowTitleTemplate.arg("")) else: self.progressBar.setMaximum(total) self.progressBar.setValue(received) pc = "%d%%" % (received * 100 / total) self.setWindowTitle(self.__windowTitleTemplate.arg(pc)) self.__updateInfoLabel() def __updateInfoLabel(self): """ Private method to update the info label. """ if self.__reply.error() != QNetworkReply.NoError and \ self.__reply.error() != QNetworkReply.OperationCanceledError: return bytesTotal = self.progressBar.maximum() running = not self.__downloadedSuccessfully() info = QString() if self.__downloading(): remaining = QString() speed = self.__bytesReceived * 1000.0 / self.__downloadTime.elapsed() if bytesTotal != 0: timeRemaining = int((bytesTotal - self.__bytesReceived) / speed) if timeRemaining > 60: minutes = int(timeRemaining / 60) seconds = int(timeRemaining % 60) remaining = self.trUtf8("- %4:%5 minutes remaining")\ .arg(minutes)\ .arg(seconds, 2, 10, QChar('0')) else: # when downloading the eta should never be 0 if timeRemaining == 0: timeRemaining = 1 remaining = self.trUtf8("- %4 seconds remaining").arg(timeRemaining) info = self.trUtf8("%1 of %2 (%3/sec) %4")\ .arg(self.__dataString(self.__bytesReceived))\ .arg(bytesTotal == 0 and self.trUtf8("?") \ or self.__dataString(bytesTotal))\ .arg(self.__dataString(int(speed)))\ .arg(remaining) else: if self.__bytesReceived == bytesTotal: info = self.trUtf8("%1 downloaded")\ .arg(self.__dataString(self.__output.size())) else: info = self.trUtf8("%1 of %2 - Stopped")\ .arg(self.__dataString(self.__bytesReceived))\ .arg(self.__dataString(bytesTotal)) self.infoLabel.setText(info) def __dataString(self, size): """ Private method to generate a formatted data string. @param size size to be formatted (integer) @return formatted data string (QString) """ unit = QString() size = float(size) if size < 1024: unit = self.trUtf8("bytes") elif size < 1024 * 1024: size /= 1024.0 unit = self.trUtf8("kB") else: size /= 1024.0 * 1024.0 unit = self.trUtf8("MB") return QString("%1 %2").arg(size, 0, "f", 1).arg(unit) def __downloading(self): """ Private method to determine, if a download is in progress. @return flag indicating a download is in progress (boolean) """ return self.__stopButton.isEnabled() def __downloadedSuccessfully(self): """ Private method to determine the download status. @return download status (boolean) """ return (not self.__stopButton.isEnabled() and \ not self.__tryAgainButton.isEnabled()) def __finished(self): """ Private slot to handle the download finished. """ self.__downloadFinished = True if not self.__startedSaving: return self.__stopButton.setEnabled(False) self.__closeButton.setEnabled(True) self.__openButton.setEnabled(True) self.__output.close() self.__updateInfoLabel() if not self.keepOpenCheckBox.isChecked() and \ self.__reply.error() == QNetworkReply.NoError: self.close() if self.__autoOpen: self.__open() def closeEvent(self, evt): """ Protected method called when the dialog is closed. """ if self.__initialized: self.__output.close() self.disconnect(self.__reply, SIGNAL("readyRead()"), self.__readyRead) self.disconnect(self.__reply, SIGNAL("error(QNetworkReply::NetworkError)"), self.__networkError) self.disconnect(self.__reply, SIGNAL("downloadProgress(qint64, qint64)"), self.__downloadProgress) self.disconnect(self.__reply, SIGNAL("metaDataChanged()"), self.__metaDataChanged) self.disconnect(self.__reply, SIGNAL("finished()"), self.__finished) self.__reply.close() self.__reply.deleteLater() self.emit(SIGNAL("done()")) eric4-4.5.18/eric/Helpviewer/PaxHeaders.8617/Bookmarks0000644000175000001440000000013212262730776020512 xustar000000000000000030 mtime=1389081086.301724332 30 atime=1389081086.306724332 30 ctime=1389081086.315724332 eric4-4.5.18/eric/Helpviewer/Bookmarks/0000755000175000001440000000000012262730776020321 5ustar00detlevusers00000000000000eric4-4.5.18/eric/Helpviewer/Bookmarks/PaxHeaders.8617/XbelReader.py0000644000175000001440000000013212261012651023136 xustar000000000000000030 mtime=1388582313.587097202 30 atime=1389081084.516724372 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/Bookmarks/XbelReader.py0000644000175000001440000001471612261012651022701 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a class to read XBEL bookmark files. """ from PyQt4.QtCore import * from BookmarkNode import BookmarkNode class XmlEntityResolver(QXmlStreamEntityResolver): """ Class implementing an XML entity resolver for bookmark files. """ def resolveUndeclaredEntity(self, entity): """ Public method to resolve undeclared entities. @param entity entity to be resolved (string or QString) @return resolved entity (QString) """ if entity == "nbsp": return QString(" ") return QString() class XbelReader(QXmlStreamReader): """ Class implementing a reader object for XBEL bookmark files. """ def __init__(self): """ Constructor """ QXmlStreamReader.__init__(self) self.__resolver = XmlEntityResolver() self.setEntityResolver(self.__resolver) def read(self, fileNameOrDevice): """ Public method to read an XBEL bookmark file. @param fileNameOrDevice name of the file to read (string or QString) or reference to the device to read (QIODevice) @return reference to the root node (BookmarkNode) """ if not isinstance(fileNameOrDevice, QIODevice): f = QFile(fileNameOrDevice) if not f.exists(): return BookmarkNode(BookmarkNode.Root) f.open(QFile.ReadOnly) self.setDevice(f) else: self.setDevice(fileNameOrDevice) root = BookmarkNode(BookmarkNode.Root) while not self.atEnd(): self.readNext() if self.isStartElement(): version = self.attributes().value("version").toString() if self.name() == "xbel" and \ (version.isEmpty() or version == "1.0"): self.__readXBEL(root) else: self.raiseError(QCoreApplication.translate( "XbelReader", "The file is not an XBEL version 1.0 file.")) return root def __readXBEL(self, node): """ Private method to read and parse the XBEL file. @param node reference to the node to attach to (BookmarkNode) """ if not self.isStartElement() and self.name() != "xbel": return while not self.atEnd(): self.readNext() if self.isEndElement(): break if self.isStartElement(): if self.name() == "folder": self.__readFolder(node) elif self.name() == "bookmark": self.__readBookmarkNode(node) elif self.name() == "separator": self.__readSeparator(node) else: self.__skipUnknownElement() def __readFolder(self, node): """ Private method to read and parse a folder subtree. @param node reference to the node to attach to (BookmarkNode) """ if not self.isStartElement() and self.name() != "folder": return folder = BookmarkNode(BookmarkNode.Folder, node) folder.expanded = self.attributes().value("folded") == "no" while not self.atEnd(): self.readNext() if self.isEndElement(): break if self.isStartElement(): if self.name() == "title": self.__readTitle(folder) elif self.name() == "desc": self.__readDescription(folder) elif self.name() == "folder": self.__readFolder(folder) elif self.name() == "bookmark": self.__readBookmarkNode(folder) elif self.name() == "separator": self.__readSeparator(folder) else: self.__skipUnknownElement() def __readTitle(self, node): """ Private method to read the title element. @param node reference to the bookmark node title belongs to (BookmarkNode) """ if not self.isStartElement() and self.name() != "title": return node.title = self.readElementText() def __readDescription(self, node): """ Private method to read the desc element. @param node reference to the bookmark node desc belongs to (BookmarkNode) """ if not self.isStartElement() and self.name() != "desc": return node.desc = self.readElementText() def __readSeparator(self, node): """ Private method to read a separator element. @param node reference to the bookmark node the separator belongs to (BookmarkNode) """ BookmarkNode(BookmarkNode.Separator, node) # empty elements have a start and end element self.readNext() def __readBookmarkNode(self, node): """ Private method to read and parse a bookmark subtree. @param node reference to the node to attach to (BookmarkNode) """ if not self.isStartElement() and self.name() != "bookmark": return bookmark = BookmarkNode(BookmarkNode.Bookmark, node) bookmark.url = self.attributes().value("href").toString() while not self.atEnd(): self.readNext() if self.isEndElement(): break if self.isStartElement(): if self.name() == "title": self.__readTitle(bookmark) elif self.name() == "desc": self.__readDescription(bookmark) else: self.__skipUnknownElement() if bookmark.title.isEmpty(): bookmark.title = QCoreApplication.translate("XbelReader", "Unknown title") def __skipUnknownElement(self): """ Private method to skip over all unknown elements. """ if not self.isStartElement(): return while not self.atEnd(): self.readNext() if self.isEndElement(): break if self.isStartElement(): self.__skipUnknownElement() eric4-4.5.18/eric/Helpviewer/Bookmarks/PaxHeaders.8617/AddBookmarkDialog.ui0000644000175000001440000000007411227653433024423 xustar000000000000000030 atime=1389081084.516724372 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/Bookmarks/AddBookmarkDialog.ui0000644000175000001440000000571111227653433024154 0ustar00detlevusers00000000000000 AddBookmarkDialog 0 0 400 174 400 0 Add Bookmark true Type a name for the bookmark, and choose where to keep it. Qt::PlainText true Enter the name Enter the address Qt::Vertical 20 9 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok E4LineEdit QLineEdit
    E4Gui/E4LineEdit.h
    nameEdit addressEdit locationCombo buttonBox buttonBox accepted() AddBookmarkDialog accept() 248 254 157 274 buttonBox rejected() AddBookmarkDialog reject() 316 260 286 274
    eric4-4.5.18/eric/Helpviewer/Bookmarks/PaxHeaders.8617/__init__.py0000644000175000001440000000013212261012651022660 xustar000000000000000030 mtime=1388582313.589097228 30 atime=1389081084.516724372 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/Bookmarks/__init__.py0000644000175000001440000000022712261012651022413 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Package implementing the bookmarks system. """ eric4-4.5.18/eric/Helpviewer/Bookmarks/PaxHeaders.8617/BookmarksMenu.py0000644000175000001440000000013212261012651023676 xustar000000000000000030 mtime=1388582313.591097253 30 atime=1389081084.516724372 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/Bookmarks/BookmarksMenu.py0000644000175000001440000001750512261012651023440 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing the bookmarks menu. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from E4Gui.E4ModelMenu import E4ModelMenu import Helpviewer.HelpWindow from BookmarksModel import BookmarksModel from BookmarkNode import BookmarkNode class BookmarksMenu(E4ModelMenu): """ Class implementing the bookmarks menu base class. @signal openUrl(const QUrl&, const QString&) emitted to open a URL in the current tab @signal newUrl(const QUrl&, const QString&) emitted to open a URL in a new tab """ def __init__(self, parent = None): """ Constructor @param parent reference to the parent widget (QWidget) """ E4ModelMenu.__init__(self, parent) self.connect(self, SIGNAL("activated(const QModelIndex&)"), self.__activated) self.setStatusBarTextRole(BookmarksModel.UrlStringRole) self.setSeparatorRole(BookmarksModel.SeparatorRole) self.setContextMenuPolicy(Qt.CustomContextMenu) self.connect(self, SIGNAL("customContextMenuRequested(const QPoint &)"), self.__contextMenuRequested) def createBaseMenu(self): """ Public method to get the menu that is used to populate sub menu's. @return reference to the menu (BookmarksMenu) """ menu = BookmarksMenu(self) self.connect(menu, SIGNAL("openUrl(const QUrl&, const QString&)"), self, SIGNAL("openUrl(const QUrl&, const QString&)")) self.connect(menu, SIGNAL("newUrl(const QUrl&, const QString&)"), self, SIGNAL("newUrl(const QUrl&, const QString&)")) return menu def __activated(self, idx): """ Private slot handling the activated signal. @param idx index of the activated item (QModelIndex) """ if self._keyboardModifiers & Qt.ControlModifier: self.emit(SIGNAL("newUrl(const QUrl&, const QString&)"), idx.data(BookmarksModel.UrlRole).toUrl(), idx.data(Qt.DisplayRole).toString()) else: self.emit(SIGNAL("openUrl(const QUrl&, const QString&)"), idx.data(BookmarksModel.UrlRole).toUrl(), idx.data(Qt.DisplayRole).toString()) self.resetFlags() def postPopulated(self): """ Public method to add any actions after the tree. """ if self.isEmpty(): return parent = self.rootIndex() hasBookmarks = False for i in range(parent.model().rowCount(parent)): child = parent.model().index(i, 0, parent) if child.data(BookmarksModel.TypeRole).toInt()[0] == BookmarkNode.Bookmark: hasBookmarks = True break if not hasBookmarks: return self.addSeparator() act = self.addAction(self.trUtf8("Open all in Tabs")) self.connect(act, SIGNAL("triggered()"), self.__openAll) def __openAll(self): """ Private slot to open all the menu's items. """ menu = self.sender().parent() if menu is None: return parent = menu.rootIndex() if not parent.isValid(): return for i in range(parent.model().rowCount(parent)): child = parent.model().index(i, 0, parent) if child.data(BookmarksModel.TypeRole).toInt()[0] != BookmarkNode.Bookmark: continue if i == 0: self.emit(SIGNAL("openUrl(const QUrl&, const QString&)"), child.data(BookmarksModel.UrlRole).toUrl(), child.data(Qt.DisplayRole).toString()) else: self.emit(SIGNAL("newUrl(const QUrl&, const QString&)"), child.data(BookmarksModel.UrlRole).toUrl(), child.data(Qt.DisplayRole).toString()) def __contextMenuRequested(self, pos): """ Private slot to handle the context menu request. @param pos position the context menu shall be shown (QPoint) """ act = self.actionAt(pos) if act is not None and act.menu() is None and self.index(act).isValid(): menu = QMenu() v = act.data() menuAction = menu.addAction(self.trUtf8("&Open"), self.__openBookmark) menuAction.setData(v) menuAction = menu.addAction(self.trUtf8("Open in New &Tab\tCtrl+LMB"), self.__openBookmarkInNewTab) menuAction.setData(v) menu.addSeparator() menuAction = menu.addAction(self.trUtf8("&Remove"), self.__removeBookmark) menuAction.setData(v) execAct = menu.exec_(QCursor.pos()) if execAct is not None: self.close() parent = self.parent() while parent is not None and isinstance(parent, QMenu): parent.close() parent = parent.parent() def __openBookmark(self): """ Private slot to open a bookmark in the current browser tab. """ idx = self.index(self.sender()) self.emit(SIGNAL("openUrl(const QUrl&, const QString&)"), idx.data(BookmarksModel.UrlRole).toUrl(), idx.data(Qt.DisplayRole).toString()) def __openBookmarkInNewTab(self): """ Private slot to open a bookmark in a new browser tab. """ idx = self.index(self.sender()) self.emit(SIGNAL("newUrl(const QUrl&, const QString&)"), idx.data(BookmarksModel.UrlRole).toUrl(), idx.data(Qt.DisplayRole).toString()) def __removeBookmark(self): """ Private slot to remove a bookmark. """ idx = self.index(self.sender()) self.removeEntry(idx) ########################################################################################## class BookmarksMenuBarMenu(BookmarksMenu): """ Class implementing a dynamically populated menu for bookmarks. """ def __init__(self, parent = None): """ Constructor @param parent reference to the parent widget (QWidget) """ BookmarksMenu.__init__(self, parent) self.__bookmarksManager = None self.__initialActions = [] def prePopulated(self): """ Public method to add any actions before the tree. @return flag indicating if any actions were added """ self.__bookmarksManager = Helpviewer.HelpWindow.HelpWindow.bookmarksManager() self.setModel(self.__bookmarksManager.bookmarksModel()) self.setRootIndex(self.__bookmarksManager.bookmarksModel()\ .nodeIndex(self.__bookmarksManager.menu())) # initial actions for act in self.__initialActions: self.addAction(act) if len(self.__initialActions) != 0: self.addSeparator() self.createMenu( self.__bookmarksManager.bookmarksModel()\ .nodeIndex(self.__bookmarksManager.toolbar()), 1, self) return True def setInitialActions(self, actions): """ Public method to set the list of actions that should appear first in the menu. @param actions list of initial actions (list of QAction) """ self.__initialActions = actions[:] for act in self.__initialActions: self.addAction(act) eric4-4.5.18/eric/Helpviewer/Bookmarks/PaxHeaders.8617/BookmarksDialog.ui0000644000175000001440000000013112033056254024161 xustar000000000000000030 mtime=1349278892.437230893 29 atime=1389081084.52172437 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/Bookmarks/BookmarksDialog.ui0000644000175000001440000001167012033056254023721 0ustar00detlevusers00000000000000 BookmarksDialog 0 0 750 450 Manage Bookmarks true Qt::Horizontal 40 20 0 Enter search term for bookmarks Press to clear the search edit QAbstractItemView::InternalMove true QAbstractItemView::ExtendedSelection Qt::ElideMiddle true Press to delete the selected entries &Delete false Press to add a new bookmarks folder Add &Folder false Qt::Horizontal 40 20 Qt::Horizontal QDialogButtonBox::Close E4TreeView QTreeView
    E4Gui/E4TreeView
    searchEdit clearButton bookmarksTree removeButton addFolderButton buttonBox buttonBox accepted() BookmarksDialog accept() 252 445 157 274 buttonBox rejected() BookmarksDialog reject() 320 445 286 274 clearButton clicked() searchEdit clear() 728 21 706 20
    eric4-4.5.18/eric/Helpviewer/Bookmarks/PaxHeaders.8617/BookmarksManager.py0000644000175000001440000000013112261012651024343 xustar000000000000000030 mtime=1388582313.595097304 29 atime=1389081084.52172437 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/Bookmarks/BookmarksManager.py0000644000175000001440000004363512261012651024111 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing the bookmarks manager. """ import os from PyQt4.QtCore import * from PyQt4.QtGui import * from PyQt4.QtWebKit import QWebPage from KdeQt import KQMessageBox, KQFileDialog from BookmarkNode import BookmarkNode from BookmarksModel import BookmarksModel from DefaultBookmarks import DefaultBookmarks from XbelReader import XbelReader from XbelWriter import XbelWriter from Utilities.AutoSaver import AutoSaver import Utilities import Preferences BOOKMARKBAR = QT_TRANSLATE_NOOP("BookmarksManager", "Bookmarks Bar") BOOKMARKMENU = QT_TRANSLATE_NOOP("BookmarksManager", "Bookmarks Menu") ########################################################################################## extract_js = r""" function walk() { var parent = arguments[0]; var indent = arguments[1]; var result = ""; var children = parent.childNodes; var folderName = ""; var folded = ""; for (var i = 0; i < children.length; i++) { var object = children.item(i); if (object.nodeName == "HR") { result += indent + "\n"; } if (object.nodeName == "H3") { folderName = object.innerHTML; folded = object.folded; if (object.folded == undefined) folded = "false"; else folded = "true"; } if (object.nodeName == "A") { result += indent + "\n"; result += indent + indent + "" + object.innerHTML + "\n"; result += indent + "\n"; } var currentIndent = indent; if (object.nodeName == "DL" && folderName != "") { result += indent + "\n"; indent += " "; result += indent + "" + folderName + "\n"; } result += walk(object, indent); if (object.nodeName == "DL" && folderName != "") { result += currentIndent + "\n"; } } return result; } var xbel = walk(document, " "); if (xbel != "") { xbel = "\n\n\n" + xbel + "\n"; } xbel; """ ########################################################################################## class BookmarksManager(QObject): """ Class implementing the bookmarks manager. @signal entryAdded emitted after a bookmark node has been added @signal entryRemoved emitted after a bookmark node has been removed @signal entryChanged emitted after a bookmark node has been changed """ def __init__(self, parent = None): """ Constructor @param parent reference to the parent object (QObject) """ QObject.__init__(self, parent) self.__loaded = False self.__saveTimer = AutoSaver(self, self.save) self.__bookmarkRootNode = None self.__toolbar = None self.__menu = None self.__bookmarksModel = None self.__commands = QUndoStack() self.connect(self, SIGNAL("entryAdded"), self.__saveTimer.changeOccurred) self.connect(self, SIGNAL("entryRemoved"), self.__saveTimer.changeOccurred) self.connect(self, SIGNAL("entryChanged"), self.__saveTimer.changeOccurred) def close(self): """ Public method to close the bookmark manager. """ self.__saveTimer.saveIfNeccessary() def undoRedoStack(self): """ Public method to get a reference to the undo stack. @return reference to the undo stack (QUndoStack) """ return self.__commands def changeExpanded(self): """ Public method to handle a change of the expanded state. """ self.__saveTimer.changeOccurred() def load(self): """ Public method to load the bookmarks. """ if self.__loaded: return self.__loaded = True bookmarkFile = os.path.join(Utilities.getConfigDir(), "browser", "bookmarks.xbel") if not QFile.exists(bookmarkFile): ba = QByteArray(DefaultBookmarks) bookmarkFile = QBuffer(ba) bookmarkFile.open(QIODevice.ReadOnly) reader = XbelReader() self.__bookmarkRootNode = reader.read(bookmarkFile) if reader.error() != QXmlStreamReader.NoError: KQMessageBox.warning(None, self.trUtf8("Loading Bookmarks"), self.trUtf8("""Error when loading bookmarks on line %1, column %2:\n""" """%3""")\ .arg(reader.lineNumber())\ .arg(reader.columnNumber())\ .arg(reader.errorString())) others = [] for index in range(len(self.__bookmarkRootNode.children()) - 1, -1, -1): node = self.__bookmarkRootNode.children()[index] if node.type() == BookmarkNode.Folder: if (node.title == self.trUtf8("Toolbar Bookmarks") or \ node.title == BOOKMARKBAR) and \ self.__toolbar is None: node.title = self.trUtf8(BOOKMARKBAR) self.__toolbar = node if (node.title == self.trUtf8("Menu") or \ node.title == BOOKMARKMENU) and \ self.__menu is None: node.title = self.trUtf8(BOOKMARKMENU) self.__menu = node else: others.append(node) self.__bookmarkRootNode.remove(node) if len(self.__bookmarkRootNode.children()) > 0: raise RuntimeError("Error loading bookmarks.") if self.__toolbar is None: self.__toolbar = BookmarkNode(BookmarkNode.Folder, self.__bookmarkRootNode) self.__toolbar.title = self.trUtf8(BOOKMARKBAR) else: self.__bookmarkRootNode.add(self.__toolbar) if self.__menu is None: self.__menu = BookmarkNode(BookmarkNode.Folder, self.__bookmarkRootNode) self.__menu.title = self.trUtf8(BOOKMARKMENU) else: self.__bookmarkRootNode.add(self.__menu) for node in others: self.__menu.add(node) self.__convertFromOldBookmarks() def save(self): """ Public method to save the bookmarks. """ if not self.__loaded: return writer = XbelWriter() bookmarkFile = os.path.join(Utilities.getConfigDir(), "browser", "bookmarks.xbel") # save root folder titles in English (i.e. not localized) self.__menu.title = BOOKMARKMENU self.__toolbar.title = BOOKMARKBAR if not writer.write(bookmarkFile, self.__bookmarkRootNode): KQMessageBox.warning(None, self.trUtf8("Saving Bookmarks"), self.trUtf8("""Error saving bookmarks to %1.""").arg(bookmarkFile)) # restore localized titles self.__menu.title = self.trUtf8(BOOKMARKMENU) self.__toolbar.title = self.trUtf8(BOOKMARKBAR) def addBookmark(self, parent, node, row = -1): """ Public method to add a bookmark. @param parent reference to the node to add to (BookmarkNode) @param node reference to the node to add (BookmarkNode) @param row row number (integer) """ if not self.__loaded: return command = InsertBookmarksCommand(self, parent, node, row) self.__commands.push(command) def removeBookmark(self, node): """ Public method to remove a bookmark. @param node reference to the node to be removed (BookmarkNode) """ if not self.__loaded: return parent = node.parent() row = parent.children().index(node) command = RemoveBookmarksCommand(self, parent, row) self.__commands.push(command) def setTitle(self, node, newTitle): """ Public method to set the title of a bookmark. @param node reference to the node to be changed (BookmarkNode) @param newTitle title to be set (QString) """ if not self.__loaded: return command = ChangeBookmarkCommand(self, node, newTitle, True) self.__commands.push(command) def setUrl(self, node, newUrl): """ Public method to set the URL of a bookmark. @param node reference to the node to be changed (BookmarkNode) @param newUrl URL to be set (QString) """ if not self.__loaded: return command = ChangeBookmarkCommand(self, node, newUrl, False) self.__commands.push(command) def bookmarks(self): """ Public method to get a reference to the root bookmark node. @return reference to the root bookmark node (BookmarkNode) """ if not self.__loaded: self.load() return self.__bookmarkRootNode def menu(self): """ Public method to get a reference to the bookmarks menu node. @return reference to the bookmarks menu node (BookmarkNode) """ if not self.__loaded: self.load() return self.__menu def toolbar(self): """ Public method to get a reference to the bookmarks toolbar node. @return reference to the bookmarks toolbar node (BookmarkNode) """ if not self.__loaded: self.load() return self.__toolbar def bookmarksModel(self): """ Public method to get a reference to the bookmarks model. @return reference to the bookmarks model (BookmarksModel) """ if self.__bookmarksModel is None: self.__bookmarksModel = BookmarksModel(self, self) return self.__bookmarksModel def importBookmarks(self): """ Public method to import bookmarks. """ supportedFormats = QStringList() \ << self.trUtf8("XBEL bookmarks").append(" (*.xbel *.xml)") \ << self.trUtf8("HTML Netscape bookmarks").append(" (*.html *.htm)") fileName = KQFileDialog.getOpenFileName(\ None, self.trUtf8("Import Bookmarks"), QString(), supportedFormats.join(";;"), None) if fileName.isEmpty(): return reader = XbelReader() importRootNode = None if fileName.endsWith(".html"): inFile = QFile(fileName) inFile.open(QIODevice.ReadOnly) if inFile.openMode == QIODevice.NotOpen: KQMessageBox.warning(None, self.trUtf8("Import Bookmarks"), self.trUtf8("""Error opening bookmarks file %1.""")\ .arg(fileName)) return webpage = QWebPage() webpage.mainFrame().setHtml(QString(inFile.readAll())) result = webpage.mainFrame().evaluateJavaScript(extract_js).toByteArray() buffer_ = QBuffer(result) buffer_.open(QIODevice.ReadOnly) importRootNode = reader.read(buffer_) else: importRootNode = reader.read(fileName) if reader.error() != QXmlStreamReader.NoError: KQMessageBox.warning(None, self.trUtf8("Import Bookmarks"), self.trUtf8("""Error when importing bookmarks on line %1, column %2:\n""" """%3""")\ .arg(reader.lineNumber())\ .arg(reader.columnNumber())\ .arg(reader.errorString())) return importRootNode.setType(BookmarkNode.Folder) importRootNode.title = self.trUtf8("Imported %1")\ .arg(QDate.currentDate().toString(Qt.SystemLocaleShortDate)) self.addBookmark(self.menu(), importRootNode) def exportBookmarks(self): """ Public method to export the bookmarks. """ fileName = KQFileDialog.getSaveFileName(\ None, self.trUtf8("Export Bookmarks"), "eric4_bookmarks.xbel", self.trUtf8("XBEL bookmarks").append(" (*.xbel *.xml)")) if fileName.isEmpty(): return writer = XbelWriter() if not writer.write(fileName, self.__bookmarkRootNode): KQMessageBox.critical(None, self.trUtf8("Exporting Bookmarks"), self.trUtf8("""Error exporting bookmarks to %1.""")\ .arg(fileName)) def __convertFromOldBookmarks(self): """ Private method to convert the old bookmarks into the new ones. """ bmNames = Preferences.Prefs.settings.value('Bookmarks/Names') bmFiles = Preferences.Prefs.settings.value('Bookmarks/Files') if bmNames.isValid() and bmFiles.isValid(): bmNames = bmNames.toStringList() bmFiles = bmFiles.toStringList() if len(bmNames) == len(bmFiles): convertedRootNode = BookmarkNode(BookmarkNode.Folder) convertedRootNode.title = self.trUtf8("Converted %1")\ .arg(QDate.currentDate().toString(Qt.SystemLocaleShortDate)) for i in range(len(bmNames)): node = BookmarkNode(BookmarkNode.Bookmark, convertedRootNode) node.title = bmNames[i] url = QUrl(bmFiles[i]) if url.scheme().isEmpty(): url.setScheme("file") node.url = url.toString() self.addBookmark(self.menu(), convertedRootNode) Preferences.Prefs.settings.remove('Bookmarks') class RemoveBookmarksCommand(QUndoCommand): """ Class implementing the Remove undo command. """ def __init__(self, bookmarksManager, parent, row): """ Constructor @param bookmarksManager reference to the bookmarks manager (BookmarksManager) @param parent reference to the parent node (BookmarkNode) @param row row number of bookmark (integer) """ QUndoCommand.__init__(self, QApplication.translate("BookmarksManager", "Remove Bookmark")) self._row = row self._bookmarksManager = bookmarksManager try: self._node = parent.children()[row] except IndexError: self._node = BookmarkNode() self._parent = parent def undo(self): """ Public slot to perform the undo action. """ self._parent.add(self._node, self._row) self._bookmarksManager.emit(SIGNAL("entryAdded"), self._node) def redo(self): """ Public slot to perform the redo action. """ self._parent.remove(self._node) self._bookmarksManager.emit( SIGNAL("entryRemoved"), self._parent, self._row, self._node) class InsertBookmarksCommand(RemoveBookmarksCommand): """ Class implementing the Insert undo command. """ def __init__(self, bookmarksManager, parent, node, row): """ Constructor @param bookmarksManager reference to the bookmarks manager (BookmarksManager) @param parent reference to the parent node (BookmarkNode) @param node reference to the node to be inserted (BookmarkNode) @param row row number of bookmark (integer) """ RemoveBookmarksCommand.__init__(self, bookmarksManager, parent, row) self.setText(QApplication.translate("BookmarksManager", "Insert Bookmark")) self._node = node def undo(self): """ Public slot to perform the undo action. """ RemoveBookmarksCommand.redo(self) def redo(self): """ Public slot to perform the redo action. """ RemoveBookmarksCommand.undo(self) class ChangeBookmarkCommand(QUndoCommand): """ Class implementing the Insert undo command. """ def __init__(self, bookmarksManager, node, newValue, title): """ Constructor @param bookmarksManager reference to the bookmarks manager (BookmarksManager) @param node reference to the node to be changed (BookmarkNode) @param newValue new value to be set (QString) @param title flag indicating a change of the title (True) or the URL (False) (boolean) """ QUndoCommand.__init__(self) self._bookmarksManager = bookmarksManager self._title = title self._newValue = newValue self._node = node if self._title: self._oldValue = self._node.title self.setText(QApplication.translate("BookmarksManager", "Name Change")) else: self._oldValue = self._node.url self.setText(QApplication.translate("BookmarksManager", "Address Change")) def undo(self): """ Public slot to perform the undo action. """ if self._title: self._node.title = self._oldValue else: self._node.url = self._oldValue self._bookmarksManager.emit(SIGNAL("entryChanged"), self._node) def redo(self): """ Public slot to perform the redo action. """ if self._title: self._node.title = self._newValue else: self._node.url = self._newValue self._bookmarksManager.emit(SIGNAL("entryChanged"), self._node) eric4-4.5.18/eric/Helpviewer/Bookmarks/PaxHeaders.8617/DefaultBookmarks.py0000644000175000001440000000013112261012651024355 xustar000000000000000030 mtime=1388582313.598097342 29 atime=1389081084.52272437 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/Bookmarks/DefaultBookmarks.py0000644000175000001440000000432112261012651024110 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module defining the default bookmarks. """ DefaultBookmarks = """ Bookmarks Bar Eric Web Site PyQt4 Web Site Qt Web Sites Qt Web Site Qt Project Qt Documentation Qt Blog Qt Centre Qt-Apps.org Python Web Sites Python Language Website Python Package Index: PyPI Bookmarks Menu Eric Web Site PyQt4 Web Site Send Link """ eric4-4.5.18/eric/Helpviewer/Bookmarks/PaxHeaders.8617/BookmarksDialog.py0000644000175000001440000000013112261012651024170 xustar000000000000000030 mtime=1388582313.602097393 29 atime=1389081084.52272437 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/Bookmarks/BookmarksDialog.py0000644000175000001440000002203512261012651023725 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a dialog to manage bookmarks. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from E4Gui.E4TreeSortFilterProxyModel import E4TreeSortFilterProxyModel import Helpviewer.HelpWindow from BookmarkNode import BookmarkNode from BookmarksModel import BookmarksModel from Ui_BookmarksDialog import Ui_BookmarksDialog import UI.PixmapCache class BookmarksDialog(QDialog, Ui_BookmarksDialog): """ Class implementing a dialog to manage bookmarks. @signal openUrl(const QUrl&, const QString&) emitted to open a URL in the current tab @signal newUrl(const QUrl&, const QString&) emitted to open a URL in a new tab """ def __init__(self, parent = None, manager = None): """ Constructor @param parent reference to the parent widget (QWidget @param manager reference to the bookmarks manager object (BookmarksManager) """ QDialog.__init__(self, parent) self.setupUi(self) self.clearButton.setIcon(UI.PixmapCache.getIcon("clearLeft.png")) self.__bookmarksManager = manager if self.__bookmarksManager is None: self.__bookmarksManager = Helpviewer.HelpWindow.HelpWindow.bookmarksManager() self.__bookmarksModel = self.__bookmarksManager.bookmarksModel() self.__proxyModel = E4TreeSortFilterProxyModel(self) self.__proxyModel.setFilterKeyColumn(-1) self.__proxyModel.setSourceModel(self.__bookmarksModel) self.connect(self.searchEdit, SIGNAL("textChanged(QString)"), self.__proxyModel.setFilterFixedString) self.bookmarksTree.setModel(self.__proxyModel) self.bookmarksTree.setExpanded(self.__proxyModel.index(0, 0), True) fm = QFontMetrics(self.font()) header = fm.width("m") * 40 self.bookmarksTree.header().resizeSection(0, header) self.bookmarksTree.header().setStretchLastSection(True) self.bookmarksTree.setContextMenuPolicy(Qt.CustomContextMenu) self.connect(self.bookmarksTree, SIGNAL("activated(const QModelIndex&)"), self.__activated) self.connect(self.bookmarksTree, SIGNAL("customContextMenuRequested(const QPoint &)"), self.__customContextMenuRequested) self.connect(self.removeButton, SIGNAL("clicked()"), self.bookmarksTree.removeSelected) self.connect(self.addFolderButton, SIGNAL("clicked()"), self.__newFolder) self.__expandNodes(self.__bookmarksManager.bookmarks()) def closeEvent(self, evt): """ Protected method to handle the closing of the dialog. @param evt reference to the event object (QCloseEvent) (ignored) """ self.__shutdown() def reject(self): """ Protected method called when the dialog is rejected. """ self.__shutdown() QDialog.reject(self) def __shutdown(self): """ Private method to perform shutdown actions for the dialog. """ if self.__saveExpandedNodes(self.bookmarksTree.rootIndex()): self.__bookmarksManager.changeExpanded() def __saveExpandedNodes(self, parent): """ Private method to save the child nodes of an expanded node. @param parent index of the parent node (QModelIndex) @return flag indicating a change (boolean) """ changed = False for row in range(self.__proxyModel.rowCount(parent)): child = self.__proxyModel.index(row, 0, parent) sourceIndex = self.__proxyModel.mapToSource(child) childNode = self.__bookmarksModel.node(sourceIndex) wasExpanded = childNode.expanded if self.bookmarksTree.isExpanded(child): childNode.expanded = True changed |= self.__saveExpandedNodes(child) else: childNode.expanded = False changed |= (wasExpanded != childNode.expanded) return changed def __expandNodes(self, node): """ Private method to expand all child nodes of a node. @param node reference to the bookmark node to expand (BookmarkNode) """ for childNode in node.children(): if childNode.expanded: idx = self.__bookmarksModel.nodeIndex(childNode) idx = self.__proxyModel.mapFromSource(idx) self.bookmarksTree.setExpanded(idx, True) self.__expandNodes(childNode) def __customContextMenuRequested(self, pos): """ Private slot to handle the context menu request for the bookmarks tree. @param pos position the context menu was requested (QPoint) """ menu = QMenu() idx = self.bookmarksTree.indexAt(pos) idx = idx.sibling(idx.row(), 0) sourceIndex = self.__proxyModel.mapToSource(idx) node = self.__bookmarksModel.node(sourceIndex) if idx.isValid() and node.type() != BookmarkNode.Folder: menu.addAction(self.trUtf8("&Open"), self.__openBookmarkInCurrentTab) menu.addAction(self.trUtf8("Open in New &Tab"), self.__openBookmarkInNewTab) menu.addSeparator() act = menu.addAction(self.trUtf8("Edit &Name"), self.__editName) act.setEnabled(idx.flags() & Qt.ItemIsEditable) if idx.isValid() and node.type() != BookmarkNode.Folder: menu.addAction(self.trUtf8("Edit &Address"), self.__editAddress) menu.addSeparator() act = menu.addAction(self.trUtf8("&Delete"), self.bookmarksTree.removeSelected) act.setEnabled(idx.flags() & Qt.ItemIsDragEnabled) menu.exec_(QCursor.pos()) def __activated(self, idx): """ Private slot to handle the activation of an entry. @param idx reference to the entry index (QModelIndex) """ self.__openBookmark(QApplication.keyboardModifiers() & Qt.ControlModifier) def __openBookmarkInCurrentTab(self): """ Private slot to open a bookmark in the current browser tab. """ self.__openBookmark(False) def __openBookmarkInNewTab(self): """ Private slot to open a bookmark in a new browser tab. """ self.__openBookmark(True) def __openBookmark(self, newTab): """ Private method to open a bookmark. @param newTab flag indicating to open the bookmark in a new tab (boolean) """ idx = self.bookmarksTree.currentIndex() sourceIndex = self.__proxyModel.mapToSource(idx) node = self.__bookmarksModel.node(sourceIndex) if not idx.parent().isValid() or \ node is None or \ node.type() == BookmarkNode.Folder: return if newTab: self.emit(SIGNAL("newUrl(const QUrl&, const QString&)"), idx.sibling(idx.row(), 1).data(BookmarksModel.UrlRole).toUrl(), idx.sibling(idx.row(), 0).data(Qt.DisplayRole).toString()) else: self.emit(SIGNAL("openUrl(const QUrl&, const QString&)"), idx.sibling(idx.row(), 1).data(BookmarksModel.UrlRole).toUrl(), idx.sibling(idx.row(), 0).data(Qt.DisplayRole).toString()) def __editName(self): """ Private slot to edit the name part of a bookmark. """ idx = self.bookmarksTree.currentIndex() idx = idx.sibling(idx.row(), 0) self.bookmarksTree.edit(idx) def __editAddress(self): """ Private slot to edit the address part of a bookmark. """ idx = self.bookmarksTree.currentIndex() idx = idx.sibling(idx.row(), 1) self.bookmarksTree.edit(idx) def __newFolder(self): """ Private slot to add a new bookmarks folder. """ currentIndex = self.bookmarksTree.currentIndex() idx = QModelIndex(currentIndex) sourceIndex = self.__proxyModel.mapToSource(idx) sourceNode = self.__bookmarksModel.node(sourceIndex) row = -1 # append new folder as the last item per default if sourceNode is not None and \ sourceNode.type() != BookmarkNode.Folder: # If the selected item is not a folder, add a new folder to the # parent folder, but directly below the selected item. idx = idx.parent() row = currentIndex.row() + 1 if not idx.isValid(): # Select bookmarks menu as default. idx = self.__proxyModel.index(1, 0) idx = self.__proxyModel.mapToSource(idx) parent = self.__bookmarksModel.node(idx) node = BookmarkNode(BookmarkNode.Folder) node.title = self.trUtf8("New Folder") self.__bookmarksManager.addBookmark(parent, node, row) eric4-4.5.18/eric/Helpviewer/Bookmarks/PaxHeaders.8617/BookmarkNode.py0000644000175000001440000000013112261012651023473 xustar000000000000000030 mtime=1388582313.604097418 29 atime=1389081084.52272437 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/Bookmarks/BookmarkNode.py0000644000175000001440000000503312261012651023227 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing the bookmark node. """ from PyQt4.QtCore import * class BookmarkNode(object): """ Class implementing the bookmark node type. """ # possible bookmark node types Root = 0 Folder = 1 Bookmark = 2 Separator = 3 def __init__(self, type_ = Root, parent = None): """ Constructor @param type_ type of the bookmark node (BookmarkNode.Type) @param parent reference to the parent node (BookmarkNode) """ self.url = QString() self.title = QString() self.desc = QString() self.expanded = False self._children = [] self._parent = parent self._type = type_ if parent is not None: parent.add(self) def type(self): """ Public method to get the bookmark's type. @return bookmark type (BookmarkNode.Type) """ return self._type def setType(self, type_): """ Public method to set the bookmark's type. @param type_ type of the bookmark node (BookmarkNode.Type) """ self._type = type_ def children(self): """ Public method to get the list of child nodes. @return list of all child nodes (list of BookmarkNode) """ return self._children[:] def parent(self): """ Public method to get a reference to the parent node. @return reference to the parent node (BookmarkNode) """ return self._parent def add(self, child, offset = -1): """ Public method to add/insert a child node. @param child reference to the node to add (BookmarkNode) @param offset position where to insert child (integer, -1 = append) """ if child._type == BookmarkNode.Root: return if child._parent is not None: child._parent.remove(child) child._parent = self if offset == -1: self._children.append(child) else: self._children.insert(offset, child) def remove(self, child): """ Public method to remove a child node. @param child reference to the child node (BookmarkNode) """ child._parent = None if child in self._children: self._children.remove(child) eric4-4.5.18/eric/Helpviewer/Bookmarks/PaxHeaders.8617/BookmarksToolBar.py0000644000175000001440000000013112261012651024333 xustar000000000000000030 mtime=1388582313.606097443 29 atime=1389081084.52272437 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/Bookmarks/BookmarksToolBar.py0000644000175000001440000001501612261012651024071 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a tool bar showing bookmarks. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from PyQt4.QtWebKit import QWebPage from E4Gui.E4ModelToolBar import E4ModelToolBar import Helpviewer.HelpWindow from BookmarksModel import BookmarksModel from BookmarkNode import BookmarkNode from BookmarksMenu import BookmarksMenu from AddBookmarkDialog import AddBookmarkDialog import UI.PixmapCache class BookmarksToolBar(E4ModelToolBar): """ Class implementing a tool bar showing bookmarks. @signal openUrl(const QUrl&, const QString&) emitted to open a URL in the current tab @signal newUrl(const QUrl&, const QString&) emitted to open a URL in a new tab """ def __init__(self, mainWindow, model, parent = None): """ Constructor @param mainWindow reference to the main window (HelpWindow) @param model reference to the bookmarks model (BookmarksModel) @param parent reference to the parent widget (QWidget) """ E4ModelToolBar.__init__(self, QApplication.translate("BookmarksToolBar", "Bookmarks"), parent) self.__mw = mainWindow self.__bookmarksModel = model self.setModel(model) self.setRootIndex(model.nodeIndex( Helpviewer.HelpWindow.HelpWindow.bookmarksManager().toolbar())) self.setContextMenuPolicy(Qt.CustomContextMenu) self.connect(self, SIGNAL("customContextMenuRequested(const QPoint &)"), self.__contextMenuRequested) self.connect(self, SIGNAL("activated(const QModelIndex &)"), self.__bookmarkActivated) self.setHidden(True) self.setToolButtonStyle(Qt.ToolButtonTextBesideIcon) self._build() def __contextMenuRequested(self, pos): """ Private slot to handle the context menu request. @param pos position the context menu shall be shown (QPoint) """ act = self.actionAt(pos) menu = QMenu() if act is not None: v = act.data() if act.menu() is None: menuAction = menu.addAction(self.trUtf8("&Open"), self.__openBookmark) menuAction.setData(v) menuAction = menu.addAction(self.trUtf8("Open in New &Tab\tCtrl+LMB"), self.__openBookmarkInNewTab) menuAction.setData(v) menu.addSeparator() menuAction = menu.addAction(self.trUtf8("&Remove"), self.__removeBookmark) menuAction.setData(v) menu.addSeparator() menu.addAction(self.trUtf8("Add &Bookmark..."), self.__newBookmark) menu.addAction(self.trUtf8("Add &Folder..."), self.__newFolder) menu.exec_(QCursor.pos()) def __bookmarkActivated(self, idx): """ Private slot handling the activation of a bookmark. @param idx index of the activated bookmark (QModelIndex) """ assert idx.isValid() if self._mouseButton == Qt.XButton1: self.__mw.currentBrowser().pageAction(QWebPage.Back).trigger() elif self._mouseButton == Qt.XButton2: self.__mw.currentBrowser().pageAction(QWebPage.Forward).trigger() elif self._mouseButton == Qt.LeftButton: if self._keyboardModifiers & Qt.ControlModifier: self.emit(SIGNAL("newUrl(const QUrl&, const QString&)"), idx.data(BookmarksModel.UrlRole).toUrl(), idx.data(Qt.DisplayRole).toString()) else: self.emit(SIGNAL("openUrl(const QUrl&, const QString&)"), idx.data(BookmarksModel.UrlRole).toUrl(), idx.data(Qt.DisplayRole).toString()) def __openToolBarBookmark(self): """ Private slot to open a bookmark in the current browser tab. """ idx = self.index(self.sender()) if self._keyboardModifiers & Qt.ControlModifier: self.emit(SIGNAL("newUrl(const QUrl&, const QString&)"), idx.data(BookmarksModel.UrlRole).toUrl(), idx.data(Qt.DisplayRole).toString()) else: self.emit(SIGNAL("openUrl(const QUrl&, const QString&)"), idx.data(BookmarksModel.UrlRole).toUrl(), idx.data(Qt.DisplayRole).toString()) self.resetFlags() def __openBookmark(self): """ Private slot to open a bookmark in the current browser tab. """ idx = self.index(self.sender()) self.emit(SIGNAL("openUrl(const QUrl&, const QString&)"), idx.data(BookmarksModel.UrlRole).toUrl(), idx.data(Qt.DisplayRole).toString()) def __openBookmarkInNewTab(self): """ Private slot to open a bookmark in a new browser tab. """ idx = self.index(self.sender()) self.emit(SIGNAL("newUrl(const QUrl&, const QString&)"), idx.data(BookmarksModel.UrlRole).toUrl(), idx.data(Qt.DisplayRole).toString()) def __removeBookmark(self): """ Private slot to remove a bookmark. """ idx = self.index(self.sender()) self.__bookmarksModel.removeRow(idx.row(), self.rootIndex()) def __newBookmark(self): """ Private slot to add a new bookmark. """ dlg = AddBookmarkDialog() dlg.setCurrentIndex(self.rootIndex()) dlg.exec_() def __newFolder(self): """ Private slot to add a new bookmarks folder. """ dlg = AddBookmarkDialog() dlg.setCurrentIndex(self.rootIndex()) dlg.setFolder(True) dlg.exec_() def _createMenu(self): """ Protected method to create the menu for a tool bar action. @return menu for a tool bar action (E4ModelMenu) """ menu = BookmarksMenu(self) self.connect(menu, SIGNAL("openUrl(const QUrl&, const QString&)"), self, SIGNAL("openUrl(const QUrl&, const QString&)")) self.connect(menu, SIGNAL("newUrl(const QUrl&, const QString&)"), self, SIGNAL("newUrl(const QUrl&, const QString&)")) return menu eric4-4.5.18/eric/Helpviewer/Bookmarks/PaxHeaders.8617/XbelWriter.py0000644000175000001440000000013212261012651023210 xustar000000000000000030 mtime=1388582313.609097481 30 atime=1389081084.523724372 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/Bookmarks/XbelWriter.py0000644000175000001440000000525512261012651022751 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a class to write XBEL bookmark files. """ from PyQt4.QtCore import * from BookmarkNode import BookmarkNode class XbelWriter(QXmlStreamWriter): """ Class implementing a writer object to generate XBEL bookmark files. """ def __init__(self): """ Constructor """ QXmlStreamWriter.__init__(self) self.setAutoFormatting(True) def write(self, fileNameOrDevice, root): """ Public method to write an XBEL bookmark file. @param fileNameOrDevice name of the file to write (string or QString) or device to write to (QIODevice) @param root root node of the bookmark tree (BookmarkNode) """ if isinstance(fileNameOrDevice, QIODevice): f = fileNameOrDevice else: f = QFile(fileNameOrDevice) if root is None or not f.open(QFile.WriteOnly): return False self.setDevice(f) return self.__write(root) def __write(self, root): """ Private method to write an XBEL bookmark file. @param root root node of the bookmark tree (BookmarkNode) """ self.writeStartDocument() self.writeDTD("") self.writeStartElement("xbel") self.writeAttribute("version", "1.0") if root.type() == BookmarkNode.Root: for child in root.children(): self.__writeItem(child) else: self.__writeItem(root) self.writeEndDocument() return True def __writeItem(self, node): """ Private method to write an entry for a node. @param node reference to the node to be written (BookmarkNode) """ if node.type() == BookmarkNode.Folder: self.writeStartElement("folder") self.writeAttribute("folded", node.expanded and "no" or "yes") self.writeTextElement("title", node.title) for child in node.children(): self.__writeItem(child) self.writeEndElement() elif node.type() == BookmarkNode.Bookmark: self.writeStartElement("bookmark") if not node.url.isEmpty(): self.writeAttribute("href", node.url) self.writeTextElement("title", node.title) if not node.desc.isEmpty(): self.writeTextElement("desc", node.desc) self.writeEndElement() elif node.type() == BookmarkNode.Separator: self.writeEmptyElement("separator") eric4-4.5.18/eric/Helpviewer/Bookmarks/PaxHeaders.8617/AddBookmarkDialog.py0000644000175000001440000000013212261012651024417 xustar000000000000000030 mtime=1388582313.611097506 30 atime=1389081084.523724372 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/Bookmarks/AddBookmarkDialog.py0000644000175000001440000001620012261012651024150 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a dialog to add a bookmark or a bookmark folder. """ from PyQt4.QtCore import * from PyQt4.QtGui import * import Helpviewer.HelpWindow from BookmarkNode import BookmarkNode from Ui_AddBookmarkDialog import Ui_AddBookmarkDialog class AddBookmarkProxyModel(QSortFilterProxyModel): """ Class implementing a proxy model used by the AddBookmarkDialog dialog. """ def __init__(self, parent = None): """ Constructor @param parent reference to the parent object (QObject) """ QSortFilterProxyModel.__init__(self, parent) def columnCount(self, parent): """ Public method to return the number of columns. @param parent index of the parent (QModelIndex) @return number of columns (integer) """ return min(1, QSortFilterProxyModel.columnCount(self, parent)) def filterAcceptsRow(self, sourceRow, sourceParent): """ Protected method to determine, if the row is acceptable. @param sourceRow row number in the source model (integer) @param sourceParent index of the source item (QModelIndex) @return flag indicating acceptance (boolean) """ idx = self.sourceModel().index(sourceRow, 0, sourceParent) return self.sourceModel().hasChildren(idx) def filterAcceptsColumn(self, sourceColumn, sourceParent): """ Protected method to determine, if the column is acceptable. @param sourceColumn column number in the source model (integer) @param sourceParent index of the source item (QModelIndex) @return flag indicating acceptance (boolean) """ return sourceColumn == 0 def hasChildren(self, parent = QModelIndex()): """ Public method to check, if a parent node has some children. @param parent index of the parent node (QModelIndex) @return flag indicating the presence of children (boolean) """ sindex = self.mapToSource(parent) return self.sourceModel().hasChildren(sindex) class AddBookmarkDialog(QDialog, Ui_AddBookmarkDialog): """ Class implementing a dialog to add a bookmark or a bookmark folder. """ def __init__(self, parent = None, bookmarksManager = None): """ Constructor @param parent reference to the parent widget (QWidget) @param bookmarksManager reference to the bookmarks manager object (BookmarksManager) """ QDialog.__init__(self, parent) self.setupUi(self) self.__bookmarksManager = None self.__addedNode = None self.__addFolder = False if self.__bookmarksManager is None: self.__bookmarksManager = Helpviewer.HelpWindow.HelpWindow.bookmarksManager() self.__proxyModel = AddBookmarkProxyModel(self) model = self.__bookmarksManager.bookmarksModel() self.__proxyModel.setSourceModel(model) self.__treeView = QTreeView(self) self.__treeView.setModel(self.__proxyModel) self.__treeView.expandAll() self.__treeView.header().setStretchLastSection(True) self.__treeView.header().hide() self.__treeView.setItemsExpandable(False) self.__treeView.setRootIsDecorated(False) self.__treeView.setIndentation(10) self.__treeView.show() self.locationCombo.setModel(self.__proxyModel) self.locationCombo.setView(self.__treeView) self.addressEdit.setInactiveText(self.trUtf8("Url")) self.nameEdit.setInactiveText(self.trUtf8("Title")) self.resize(self.sizeHint()) def setUrl(self, url): """ Public slot to set the URL of the new bookmark. @param url URL of the bookmark (QString) """ self.addressEdit.setText(url) self.resize(self.sizeHint()) def url(self): """ Public method to get the URL of the bookmark. @return URL of the bookmark (QString) """ return self.addressEdit.text() def setTitle(self, title): """ Public method to set the title of the new bookmark. @param title title of the bookmark (QString) """ self.nameEdit.setText(title) def title(self): """ Public method to get the title of the bookmark. @return title of the bookmark (QString) """ return self.nameEdit.text() def setCurrentIndex(self, idx): """ Public method to set the current index. @param idx current index to be set (QModelIndex) """ proxyIndex = self.__proxyModel.mapFromSource(idx) self.__treeView.setCurrentIndex(proxyIndex) self.locationCombo.setCurrentIndex(proxyIndex.row()) def currentIndex(self): """ Public method to get the current index. @return current index (QModelIndex) """ idx = self.locationCombo.view().currentIndex() idx = self.__proxyModel.mapToSource(idx) return idx def setFolder(self, folder): """ Public method to set the dialog to "Add Folder" mode. @param folder flag indicating "Add Folder" mode (boolean) """ self.__addFolder = folder if folder: self.setWindowTitle(self.trUtf8("Add Folder")) self.addressEdit.setVisible(False) else: self.setWindowTitle(self.trUtf8("Add Bookmark")) self.addressEdit.setVisible(True) self.resize(self.sizeHint()) def isFolder(self): """ Public method to test, if the dialog is in "Add Folder" mode. @return flag indicating "Add Folder" mode (boolean) """ return self.__addFolder def addedNode(self): """ Public method to get a reference to the added bookmark node. @return reference to the added bookmark node (BookmarkNode) """ return self.__addedNode def accept(self): """ Public slot handling the acceptance of the dialog. """ if (not self.__addFolder and self.addressEdit.text().isEmpty()) or \ self.nameEdit.text().isEmpty(): QDialog.accept(self) return idx = self.currentIndex() if not idx.isValid(): idx = self.__bookmarksManager.bookmarksModel().index(0, 0) parent = self.__bookmarksManager.bookmarksModel().node(idx) if self.__addFolder: type_ = BookmarkNode.Folder else: type_ = BookmarkNode.Bookmark bookmark = BookmarkNode(type_) bookmark.title = self.nameEdit.text() if not self.__addFolder: bookmark.url = self.addressEdit.text() self.__bookmarksManager.addBookmark(parent, bookmark) self.__addedNode = bookmark QDialog.accept(self) eric4-4.5.18/eric/Helpviewer/Bookmarks/PaxHeaders.8617/BookmarksModel.py0000644000175000001440000000013212261012651024032 xustar000000000000000030 mtime=1388582313.613097532 30 atime=1389081084.523724372 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/Bookmarks/BookmarksModel.py0000644000175000001440000003626412261012651023577 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing the bookmark model class. """ from PyQt4.QtCore import * from BookmarkNode import BookmarkNode from XbelWriter import XbelWriter from XbelReader import XbelReader import Helpviewer.HelpWindow import UI.PixmapCache class BookmarksModel(QAbstractItemModel): """ Class implementing the bookmark model. """ TypeRole = Qt.UserRole + 1 UrlRole = Qt.UserRole + 2 UrlStringRole = Qt.UserRole + 3 SeparatorRole = Qt.UserRole + 4 MIMETYPE = "application/bookmarks.xbel" def __init__(self, manager, parent = None): """ Constructor @param manager reference to the bookmark manager object (BookmarksManager) @param parent reference to the parent object (QObject) """ QAbstractItemModel.__init__(self, parent) self.__endMacro = False self.__bookmarksManager = manager self.connect(manager, SIGNAL("entryAdded"), self.entryAdded) self.connect(manager, SIGNAL("entryRemoved"), self.entryRemoved) self.connect(manager, SIGNAL("entryChanged"), self.entryChanged) self.__headers = [ self.trUtf8("Title"), self.trUtf8("Address"), ] def bookmarksManager(self): """ Public method to get a reference to the bookmarks manager. @return reference to the bookmarks manager object (BookmarksManager) """ return self.__bookmarksManager def nodeIndex(self, node): """ Public method to get a model index. @param node reference to the node to get the index for (BookmarkNode) @return model index (QModelIndex) """ parent = node.parent() if parent is None: return QModelIndex() return self.createIndex(parent.children().index(node), 0, node) def entryAdded(self, node): """ Public slot to add a bookmark node. @param node reference to the bookmark node to add (BookmarkNode) """ if node is None or node.parent() is None: return parent = node.parent() row = parent.children().index(node) # node was already added so remove before beginInsertRows is called parent.remove(node) self.beginInsertRows(self.nodeIndex(parent), row, row) parent.add(node, row) self.endInsertRows() def entryRemoved(self, parent, row, node): """ Public slot to remove a bookmark node. @param parent reference to the parent bookmark node (BookmarkNode) @param row row number of the node (integer) @param node reference to the bookmark node to remove (BookmarkNode) """ # node was already removed, re-add so beginRemoveRows works parent.add(node, row) self.beginRemoveRows(self.nodeIndex(parent), row, row) parent.remove(node) self.endRemoveRows() def entryChanged(self, node): """ Public method to change a node. @param node reference to the bookmark node to change (BookmarkNode) """ idx = self.nodeIndex(node) self.emit(SIGNAL("dataChanged(const QModelIndex&, const QModelIndex&)"), idx, idx) def removeRows(self, row, count, parent = QModelIndex()): """ Public method to remove bookmarks from the model. @param row row of the first bookmark to remove (integer) @param count number of bookmarks to remove (integer) @param index of the parent bookmark node (QModelIndex) @return flag indicating successful removal (boolean) """ if row < 0 or count <= 0 or row + count > self.rowCount(parent): return False bookmarkNode = self.node(parent) children = bookmarkNode.children()[row:(row + count)] for node in children: if node == self.__bookmarksManager.menu() or \ node == self.__bookmarksManager.toolbar(): continue self.__bookmarksManager.removeBookmark(node) if self.__endMacro: self.__bookmarksManager.undoRedoStack().endMacro() self.__endMacro = False return True def headerData(self, section, orientation, role = Qt.DisplayRole): """ Public method to get the header data. @param section section number (integer) @param orientation header orientation (Qt.Orientation) @param role data role (integer) @return header data (QVariant) """ if orientation == Qt.Horizontal and role == Qt.DisplayRole: try: return QVariant(self.__headers[section]) except IndexError: pass return QAbstractItemModel.headerData(self, section, orientation, role) def data(self, index, role = Qt.DisplayRole): """ Public method to get data from the model. @param index index of bookmark to get data for (QModelIndex) @param role data role (integer) @return bookmark data (QVariant) """ if not index.isValid() or index.model() != self: return QVariant() bookmarkNode = self.node(index) if role in [Qt.EditRole, Qt.DisplayRole]: if bookmarkNode.type() == BookmarkNode.Separator: if index.column() == 0: return QVariant(QString(50, QChar(0xB7))) elif index.column() == 1: return QVariant(QString()) if index.column() == 0: return QVariant(bookmarkNode.title) elif index.column() == 1: return QVariant(bookmarkNode.url) elif role == self.UrlRole: return QVariant(QUrl(bookmarkNode.url)) elif role == self.UrlStringRole: return QVariant(bookmarkNode.url) elif role == self.TypeRole: return QVariant(bookmarkNode.type()) elif role == self.SeparatorRole: return QVariant(bookmarkNode.type() == BookmarkNode.Separator) elif role == Qt.DecorationRole: if index.column() == 0: if bookmarkNode.type() == BookmarkNode.Folder: return QVariant(UI.PixmapCache.getIcon("dirOpen.png")) return QVariant(Helpviewer.HelpWindow.HelpWindow.icon( QUrl(bookmarkNode.url))) return QVariant() def columnCount(self, parent = QModelIndex()): """ Public method to get the number of columns. @param parent index of parent (QModelIndex) @return number of columns (integer) """ if parent.column() > 0: return 0 else: return len(self.__headers) def rowCount(self, parent = QModelIndex()): """ Public method to determine the number of rows. @param parent index of parent (QModelIndex) @return number of rows (integer) """ if parent.column() > 0: return 0 if not parent.isValid(): return len(self.__bookmarksManager.bookmarks().children()) itm = parent.internalPointer() return len(itm.children()) def index(self, row, column, parent = QModelIndex()): """ Public method to get a model index for a node cell. @param row row number (integer) @param column column number (integer) @param parent index of the parent (QModelIndex) @return index (QModelIndex) """ if row < 0 or column < 0 or \ row >= self.rowCount(parent) or column >= self.columnCount(parent): return QModelIndex() parentNode = self.node(parent) return self.createIndex(row, column, parentNode.children()[row]) def parent(self, index = QModelIndex()): """ Public method to get the index of the parent node. @param index index of the child node (QModelIndex) @return index of the parent node (QModelIndex) """ if not index.isValid(): return QModelIndex() itemNode = self.node(index) if itemNode is None: parentNode = None else: parentNode = itemNode.parent() if parentNode is None or parentNode == self.__bookmarksManager.bookmarks(): return QModelIndex() # get the parent's row grandParentNode = parentNode.parent() parentRow = grandParentNode.children().index(parentNode) return self.createIndex(parentRow, 0, parentNode) def hasChildren(self, parent = QModelIndex()): """ Public method to check, if a parent node has some children. @param parent index of the parent node (QModelIndex) @return flag indicating the presence of children (boolean) """ if not parent.isValid(): return True parentNode = self.node(parent) return parentNode.type() == BookmarkNode.Folder def flags(self, index): """ Public method to get flags for a node cell. @param index index of the node cell (QModelIndex) @return flags (Qt.ItemFlags) """ if not index.isValid(): return Qt.NoItemFlags node = self.node(index) type_ = node.type() flags = Qt.ItemIsSelectable | Qt.ItemIsEnabled if self.hasChildren(index): flags |= Qt.ItemIsDropEnabled if node == self.__bookmarksManager.menu() or \ node == self.__bookmarksManager.toolbar(): return flags flags |= Qt.ItemIsDragEnabled if (index.column() == 0 and type_ != BookmarkNode.Separator) or \ (index.column() == 1 and type_ == BookmarkNode.Bookmark): flags |= Qt.ItemIsEditable return flags def supportedDropActions(self): """ Public method to report the supported drop actions. @return supported drop actions (Qt.DropAction) """ return Qt.CopyAction | Qt.MoveAction def mimeTypes(self): """ Public method to report the supported mime types. @return supported mime types (QStringList) """ types = QStringList(self.MIMETYPE) types << "text/uri-list" return types def mimeData(self, indexes): """ Public method to return the mime data. @param indexes list of indexes (QModelIndexList) @return mime data (QMimeData) """ data = QByteArray() stream = QDataStream(data, QIODevice.WriteOnly) urls = [] for index in indexes: if index.column() != 0 or not index.isValid(): continue encodedData = QByteArray() buffer = QBuffer(encodedData) buffer.open(QIODevice.ReadWrite) writer = XbelWriter() parentNode = self.node(index) writer.write(buffer, parentNode) stream << encodedData urls.append(index.data(self.UrlRole).toUrl()) mdata = QMimeData() mdata.setData(self.MIMETYPE, data) mdata.setUrls(urls) return mdata def dropMimeData(self, data, action, row, column, parent): """ Public method to accept the mime data of a drop action. @param data reference to the mime data (QMimeData) @param action drop action requested (Qt.DropAction) @param row row number (integer) @param column column number (integer) @param parent index of the parent node (QModelIndex) @return flag indicating successful acceptance of the data (boolean) """ if action == Qt.IgnoreAction: return True if column > 0: return False parentNode = self.node(parent) if not data.hasFormat(self.MIMETYPE): if not data.hasUrls(): return False node = BookmarkNode(BookmarkNode.Bookmark, parentNode) node.url = QString.fromUtf8(data.urls()[0].toEncoded()) if data.hasText(): node.title = data.text() else: node.title = node.url self.__bookmarksManager.addBookmark(parentNode, node, row) return True ba = data.data(self.MIMETYPE) stream = QDataStream(ba, QIODevice.ReadOnly) if stream.atEnd(): return False undoStack = self.__bookmarksManager.undoRedoStack() undoStack.beginMacro("Move Bookmarks") while not stream.atEnd(): encodedData = QByteArray() stream >> encodedData buffer = QBuffer(encodedData) buffer.open(QIODevice.ReadOnly) reader = XbelReader() rootNode = reader.read(buffer) for bookmarkNode in rootNode.children(): rootNode.remove(bookmarkNode) row = max(0, row) self.__bookmarksManager.addBookmark(parentNode, bookmarkNode, row) self.__endMacro = True return True def setData(self, index, value, role = Qt.EditRole): """ Public method to set the data of a node cell. @param index index of the node cell (QModelIndex) @param value value to be set (QVariant) @param role role of the data (integer) @return flag indicating success (boolean) """ if not index.isValid() or (self.flags(index) & Qt.ItemIsEditable) == 0: return False item = self.node(index) if role in (Qt.EditRole, Qt.DisplayRole): if index.column() == 0: self.__bookmarksManager.setTitle(item, value.toString()) elif index.column() == 1: self.__bookmarksManager.setUrl(item, value.toString()) else: return False elif role == BookmarksModel.UrlRole: self.__bookmarksManager.setUrl(item, value.toUrl().toString()) elif role == BookmarksModel.UrlStringRole: self.__bookmarksManager.setUrl(item, value.toString()) else: return False return True def node(self, index): """ Public method to get a bookmark node given its index. @param index index of the node (QModelIndex) @return bookmark node (BookmarkNode) """ itemNode = index.internalPointer() if itemNode is None: return self.__bookmarksManager.bookmarks() else: return itemNode eric4-4.5.18/eric/Helpviewer/PaxHeaders.8617/HelpClearPrivateDataDialog.py0000644000175000001440000000013212261012651024275 xustar000000000000000030 mtime=1388582313.625097684 30 atime=1389081084.523724372 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/HelpClearPrivateDataDialog.py0000644000175000001440000000264112261012651024032 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a dialog to select which private data to clear. """ from PyQt4.QtGui import QDialog from PyQt4.QtCore import pyqtSignature, qVersion from Ui_HelpClearPrivateDataDialog import Ui_HelpClearPrivateDataDialog class HelpClearPrivateDataDialog(QDialog, Ui_HelpClearPrivateDataDialog): """ Class implementing a dialog to select which private data to clear. """ def __init__(self, parent = None): """ Constructor @param parent reference to the parent widget (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) if qVersion() < '4.5.0': self.cacheCheckBox.setChecked(False) self.cacheCheckBox.setEnabled(False) def getData(self): """ Public method to get the data from the dialog. @return tuple of flags indicating which data to clear (browsing history, search history, favicons, disk cache, cookies, passwords) (list of boolean) """ return (self.historyCheckBox.isChecked(), self.searchCheckBox.isChecked(), self.iconsCheckBox.isChecked(), self.cacheCheckBox.isChecked(), self.cookiesCheckBox.isChecked(), self.passwordsCheckBox.isChecked()) eric4-4.5.18/eric/Helpviewer/PaxHeaders.8617/QtHelpDocumentationDialog.py0000644000175000001440000000013212261012651024240 xustar000000000000000030 mtime=1388582313.627097709 30 atime=1389081084.523724372 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/QtHelpDocumentationDialog.py0000644000175000001440000001222512261012651023774 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a dialog to manage the QtHelp documentation database. """ from PyQt4.QtGui import * from PyQt4.QtCore import * from PyQt4.QtHelp import QHelpEngineCore from KdeQt import KQFileDialog, KQMessageBox from Ui_QtHelpDocumentationDialog import Ui_QtHelpDocumentationDialog class QtHelpDocumentationDialog(QDialog, Ui_QtHelpDocumentationDialog): """ Class implementing a dialog to manage the QtHelp documentation database. """ def __init__(self, engine, parent): """ Constructor @param engine reference to the help engine (QHelpEngine) @param parent reference to the parent widget (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.removeButton.setEnabled(False) self.__engine = engine self.__mw = parent docs = self.__engine.registeredDocumentations() self.documentsList.addItems(docs) self.__registeredDocs = [] self.__unregisteredDocs = [] self.__tabsToClose = [] @pyqtSignature("") def on_documentsList_itemSelectionChanged(self): """ Private slot handling a change of the documents selection. """ self.removeButton.setEnabled(len(self.documentsList.selectedItems()) != 0) @pyqtSignature("") def on_addButton_clicked(self): """ Private slot to add documents to the help database. """ fileNames = KQFileDialog.getOpenFileNames(\ self, self.trUtf8("Add Documentation"), QString(), self.trUtf8("Qt Compressed Help Files (*.qch)"), None) if fileNames.isEmpty(): return for fileName in fileNames: ns = QHelpEngineCore.namespaceName(fileName) if ns.isEmpty(): KQMessageBox.warning(self, self.trUtf8("Add Documentation"), self.trUtf8("""The file %1 is not a valid Qt Help File.""")\ .arg(fileName) ) continue if len(self.documentsList.findItems(ns, Qt.MatchFixedString)): KQMessageBox.warning(self, self.trUtf8("Add Documentation"), self.trUtf8("""The namespace %1 is already registered.""")\ .arg(ns) ) continue self.__engine.registerDocumentation(fileName) self.documentsList.addItem(ns) self.__registeredDocs.append(ns) if ns in self.__unregisteredDocs: self.__unregisteredDocs.remove(ns) @pyqtSignature("") def on_removeButton_clicked(self): """ Private slot to remove a document from the help database. """ res = KQMessageBox.question(None, self.trUtf8("Remove Documentation"), self.trUtf8("""Do you really want to remove the selected documentation """ """sets from the database?"""), QMessageBox.StandardButtons(\ QMessageBox.No | \ QMessageBox.Yes), QMessageBox.No) if res == QMessageBox.No: return openedDocs = self.__mw.getSourceFileList() items = self.documentsList.selectedItems() for item in items: ns = item.text() if ns in openedDocs.values(): res = KQMessageBox.information(self, self.trUtf8("Remove Documentation"), self.trUtf8("""Some documents currently opened reference the """ """documentation you are attempting to remove. """ """Removing the documentation will close those """ """documents."""), QMessageBox.StandardButtons(\ QMessageBox.Cancel | \ QMessageBox.Ok)) if res == QMessageBox.Cancel: return self.__unregisteredDocs.append(ns) for id in openedDocs: if openedDocs[id] == ns and id not in self.__tabsToClose: self.__tabsToClose.append(id) itm = self.documentsList.takeItem(self.documentsList.row(item)) del itm self.__engine.unregisterDocumentation(ns) if self.documentsList.count(): self.documentsList.setCurrentRow(0, QItemSelectionModel.ClearAndSelect) def hasChanges(self): """ Public slot to test the dialog for changes. @return flag indicating presence of changes """ return len(self.__registeredDocs) > 0 or \ len(self.__unregisteredDocs) > 0 def getTabsToClose(self): """ Public method to get the list of tabs to close. @return list of tab ids to be closed (list of integers) """ return self.__tabsToClose eric4-4.5.18/eric/Helpviewer/PaxHeaders.8617/__init__.py0000644000175000001440000000013212261012651020730 xustar000000000000000030 mtime=1388582313.634097798 30 atime=1389081084.524724373 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/__init__.py0000644000175000001440000000065312261012651020466 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2002 - 2014 Detlev Offenbach # """ Package implementing a little web browser. The web browser is a little HTML browser for the display of HTML help files like the Qt Online Documentation and for browsing the internet. It may be used as a standalone version as well by using the eric4_helpviewer.py script found in the main eric4 installation directory. """ eric4-4.5.18/eric/Helpviewer/PaxHeaders.8617/HelpWindow.py0000644000175000001440000000013212261012651021251 xustar000000000000000030 mtime=1388582313.672098282 30 atime=1389081084.524724373 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/HelpWindow.py0000644000175000001440000034364412261012651021021 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2002 - 2014 Detlev Offenbach # """ Module implementing the helpviewer main window. """ import os from PyQt4.QtCore import * from PyQt4.QtGui import * from PyQt4.QtWebKit import QWebSettings, QWebPage from PyQt4.QtHelp import QHelpEngine, QHelpEngineCore, QHelpSearchQuery from KdeQt import KQFileDialog, KQMessageBox from KdeQt.KQMainWindow import KQMainWindow import KdeQt.KQPrinter from KdeQt.KQPrintDialog import KQPrintDialog from SearchWidget import SearchWidget from HelpBrowserWV import HelpBrowser from HelpTocWidget import HelpTocWidget from HelpIndexWidget import HelpIndexWidget from HelpSearchWidget import HelpSearchWidget from HelpTopicDialog import HelpTopicDialog from QtHelpDocumentationDialog import QtHelpDocumentationDialog from QtHelpFiltersDialog import QtHelpFiltersDialog from HelpDocsInstaller import HelpDocsInstaller from HelpWebSearchWidget import HelpWebSearchWidget from HelpClearPrivateDataDialog import HelpClearPrivateDataDialog from HelpLanguagesDialog import HelpLanguagesDialog from CookieJar.CookieJar import CookieJar from CookieJar.CookiesConfigurationDialog import CookiesConfigurationDialog from Bookmarks.BookmarksManager import BookmarksManager from Bookmarks.BookmarksMenu import BookmarksMenuBarMenu from Bookmarks.BookmarksToolBar import BookmarksToolBar from Bookmarks.BookmarkNode import BookmarkNode from Bookmarks.AddBookmarkDialog import AddBookmarkDialog from Bookmarks.BookmarksDialog import BookmarksDialog from History.HistoryManager import HistoryManager from History.HistoryMenu import HistoryMenu from History.HistoryCompleter import HistoryCompletionModel, HistoryCompleter from Passwords.PasswordManager import PasswordManager from Network.NetworkAccessManager import NetworkAccessManager from AdBlock.AdBlockManager import AdBlockManager from E4Gui.E4TabWidget import E4TabWidget from E4Gui.E4Action import E4Action from E4Network.E4NetworkMonitor import E4NetworkMonitor import Preferences from Preferences import Shortcuts from Preferences.ConfigurationDialog import ConfigurationDialog import Utilities import UI.PixmapCache import UI.Config from UI.Info import Version from eric4config import getConfig class HelpWindow(KQMainWindow): """ Class implementing the web browser main window. @signal helpClosed() emitted after the window was requested to close down @signal zoomTextOnlyChanged(bool) emitted after the zoom text only setting was changed """ helpwindows = [] maxMenuFilePathLen = 75 _networkAccessManager = None _cookieJar = None _helpEngine = None _bookmarksManager = None _historyManager = None _passwordManager = None _adblockManager = None def __init__(self, home, path, parent, name, fromEric = False, initShortcutsOnly = False, searchWord = None): """ Constructor @param home the URL to be shown (string or QString) @param path the path of the working dir (usually '.') (string or QString) @param parent parent widget of this window (QWidget) @param name name of this window (string or QString) @param fromEric flag indicating whether it was called from within eric4 (boolean) @keyparam initShortcutsOnly flag indicating to just initialize the keyboard shortcuts (boolean) @keyparam searchWord word to search for (string or QString) """ KQMainWindow.__init__(self, parent) self.setObjectName(name) self.setWindowTitle(self.trUtf8("eric4 Web Browser")) self.fromEric = fromEric self.initShortcutsOnly = initShortcutsOnly self.setWindowIcon(UI.PixmapCache.getIcon("ericWeb.png")) self.mHistory = QStringList() self.pathCombo = None if self.initShortcutsOnly: self.__initActions() else: self.__helpEngine = \ QHelpEngine(os.path.join(Utilities.getConfigDir(), "browser", "eric4help.qhc"), self) self.connect(self.__helpEngine, SIGNAL("warning(const QString&)"), self.__warning) self.__helpInstaller = None # Attributes for WebKit based browser self.__progressBar = None self.__removeOldHistory() self.tabContextMenuIndex = -1 self.tabWidget = E4TabWidget(self, dnd = True) self.tabWidget.setUsesScrollButtons(True) self.tabWidget.setDocumentMode(True) self.tabWidget.setElideMode(Qt.ElideNone) self.connect(self.tabWidget, SIGNAL('currentChanged(int)'), self.__currentChanged) self.tabWidget.setTabContextMenuPolicy(Qt.CustomContextMenu) self.connect(self.tabWidget, SIGNAL('customTabContextMenuRequested(const QPoint &, int)'), self.__showContextMenu) self.findDlg = SearchWidget(self, self) centralWidget = QWidget() layout = QVBoxLayout() layout.setContentsMargins(1, 1, 1, 1) layout.addWidget(self.tabWidget) layout.addWidget(self.findDlg) self.tabWidget.setSizePolicy( QSizePolicy.Preferred, QSizePolicy.Expanding) centralWidget.setLayout(layout) self.setCentralWidget(centralWidget) self.findDlg.hide() # setup the TOC widget self.__tocWindow = HelpTocWidget(self.__helpEngine, self) self.__tocDock = QDockWidget(self.trUtf8("Contents"), self) self.__tocDock.setObjectName("TocWindow") self.__tocDock.setWidget(self.__tocWindow) self.addDockWidget(Qt.LeftDockWidgetArea, self.__tocDock) # setup the index widget self.__indexWindow = HelpIndexWidget(self.__helpEngine, self) self.__indexDock = QDockWidget(self.trUtf8("Index"), self) self.__indexDock.setObjectName("IndexWindow") self.__indexDock.setWidget(self.__indexWindow) self.addDockWidget(Qt.LeftDockWidgetArea, self.__indexDock) # setup the search widget self.__searchWord = searchWord self.__indexing = False self.__indexingProgress = None self.__searchEngine = self.__helpEngine.searchEngine() self.connect(self.__searchEngine, SIGNAL("indexingStarted()"), self.__indexingStarted) self.connect(self.__searchEngine, SIGNAL("indexingFinished()"), self.__indexingFinished) self.__searchWindow = HelpSearchWidget(self.__searchEngine, self) self.__searchDock = QDockWidget(self.trUtf8("Search"), self) self.__searchDock.setObjectName("SearchWindow") self.__searchDock.setWidget(self.__searchWindow) self.addDockWidget(Qt.LeftDockWidgetArea, self.__searchDock) self.rightCornerWidget = QWidget(self) self.rightCornerWidgetLayout = QHBoxLayout(self.rightCornerWidget) self.rightCornerWidgetLayout.setMargin(0) self.rightCornerWidgetLayout.setSpacing(0) self.__navigationMenu = QMenu(self) self.connect(self.__navigationMenu, SIGNAL("aboutToShow()"), self.__showNavigationMenu) self.connect(self.__navigationMenu, SIGNAL("triggered(QAction*)"), self.__navigationMenuTriggered) self.navigationButton = QToolButton(self.tabWidget) self.navigationButton.setIcon(UI.PixmapCache.getIcon("1downarrow.png")) self.navigationButton.setToolTip(self.trUtf8("Show a navigation menu")) self.navigationButton.setPopupMode(QToolButton.InstantPopup) self.navigationButton.setMenu(self.__navigationMenu) self.navigationButton.setEnabled(False) self.rightCornerWidgetLayout.addWidget(self.navigationButton) if Preferences.getUI("SingleCloseButton") or \ not hasattr(self.tabWidget, 'setTabsClosable'): self.closeButton = QToolButton(self.tabWidget) self.closeButton.setIcon(UI.PixmapCache.getIcon("close.png")) self.closeButton.setToolTip(self.trUtf8("Close the current help window")) self.closeButton.setEnabled(False) self.connect(self.closeButton, SIGNAL("clicked(bool)"), self.__close) self.rightCornerWidgetLayout.addWidget(self.closeButton) else: self.tabWidget.setTabsClosable(True) self.connect(self.tabWidget, SIGNAL("tabCloseRequested(int)"), self.__closeAt) self.closeButton = None self.tabWidget.setCornerWidget(self.rightCornerWidget, Qt.TopRightCorner) self.newTabButton = QToolButton(self.tabWidget) self.newTabButton.setIcon(UI.PixmapCache.getIcon("new.png")) self.newTabButton.setToolTip(self.trUtf8("Open a new help window tab")) self.tabWidget.setCornerWidget(self.newTabButton, Qt.TopLeftCorner) self.connect(self.newTabButton, SIGNAL("clicked(bool)"), self.newTab) if Preferences.getHelp("SaveGeometry"): g = Preferences.getGeometry("HelpViewerGeometry") else: g = QByteArray() if g.isEmpty(): s = QSize(800, 800) self.resize(s) else: self.restoreGeometry(g) self.__setIconDatabasePath() self.__initWebSettings() self.__initActions() self.__initMenus() self.__initToolbars() self.__initTabContextMenu() self.historyManager() self.newBrowser(home) self.currentBrowser().setFocus() self.__class__.helpwindows.append(self) QDesktopServices.setUrlHandler("http", self.__linkActivated) # setup connections # TOC window self.connect(self.__tocWindow, SIGNAL("linkActivated(const QUrl&)"), self.__linkActivated) self.connect(self.__tocWindow, SIGNAL("escapePressed()"), self.__activateCurrentBrowser) # index window self.connect(self.__indexWindow, SIGNAL("linkActivated(const QUrl&)"), self.__linkActivated) self.connect(self.__indexWindow, SIGNAL("linksActivated"), self.__linksActivated) self.connect(self.__indexWindow, SIGNAL("escapePressed()"), self.__activateCurrentBrowser) # search window self.connect(self.__searchWindow, SIGNAL("linkActivated(const QUrl&)"), self.__linkActivated) self.connect(self.__searchWindow, SIGNAL("escapePressed()"), self.__activateCurrentBrowser) state = Preferences.getHelp("HelpViewerState") self.restoreState(state) self.__initHelpDb() QTimer.singleShot(0, self.__lookForNewDocumentation) if self.__searchWord is not None: QTimer.singleShot(0, self.__searchForWord) def __setIconDatabasePath(self, enable = True): """ Private method to set the favicons path. @param enable flag indicating to enabled icon storage """ if enable: iconDatabasePath = os.path.join(Utilities.getConfigDir(), "browser", "favicons") if not os.path.exists(iconDatabasePath): os.makedirs(iconDatabasePath) else: iconDatabasePath = "" # setting an empty path disables it QWebSettings.setIconDatabasePath(iconDatabasePath) def __initWebSettings(self): """ Private method to set the global web settings. """ standardFont = Preferences.getHelp("StandardFont") fixedFont = Preferences.getHelp("FixedFont") settings = QWebSettings.globalSettings() settings.setAttribute(QWebSettings.DeveloperExtrasEnabled, True) settings.setFontFamily(QWebSettings.StandardFont, standardFont.family()) settings.setFontSize(QWebSettings.DefaultFontSize, standardFont.pointSize()) settings.setFontFamily(QWebSettings.FixedFont, fixedFont.family()) settings.setFontSize(QWebSettings.DefaultFixedFontSize, fixedFont.pointSize()) styleSheet = Preferences.getHelp("UserStyleSheet") if not styleSheet.isEmpty(): settings.setUserStyleSheetUrl(QUrl(styleSheet)) settings.setAttribute(QWebSettings.AutoLoadImages, Preferences.getHelp("AutoLoadImages")) settings.setAttribute(QWebSettings.JavaEnabled, Preferences.getHelp("JavaEnabled")) settings.setAttribute(QWebSettings.JavascriptEnabled, Preferences.getHelp("JavaScriptEnabled")) settings.setAttribute(QWebSettings.JavascriptCanOpenWindows, Preferences.getHelp("JavaScriptCanOpenWindows")) settings.setAttribute(QWebSettings.JavascriptCanAccessClipboard, Preferences.getHelp("JavaScriptCanAccessClipboard")) settings.setAttribute(QWebSettings.PluginsEnabled, Preferences.getHelp("PluginsEnabled")) if hasattr(QWebSettings, "PrintElementBackgrounds"): settings.setAttribute(QWebSettings.PrintElementBackgrounds, Preferences.getHelp("PrintBackgrounds")) def __initActions(self): """ Private method to define the user interface actions. """ # list of all actions self.__actions = [] self.newTabAct = E4Action(self.trUtf8('New Tab'), UI.PixmapCache.getIcon("new.png"), self.trUtf8('&New Tab'), QKeySequence(self.trUtf8("Ctrl+T","File|New Tab")), 0, self, 'help_file_new_tab') self.newTabAct.setStatusTip(self.trUtf8('Open a new help window tab')) self.newTabAct.setWhatsThis(self.trUtf8( """New Tab""" """

    This opens a new help window tab.

    """ )) self.connect(self.newTabAct, SIGNAL('triggered()'), self.newTab) self.__actions.append(self.newTabAct) self.newAct = E4Action(self.trUtf8('New Window'), UI.PixmapCache.getIcon("newWindow.png"), self.trUtf8('New &Window'), QKeySequence(self.trUtf8("Ctrl+N","File|New Window")), 0, self, 'help_file_new_window') self.newAct.setStatusTip(self.trUtf8('Open a new help browser window')) self.newAct.setWhatsThis(self.trUtf8( """New Window""" """

    This opens a new help browser window.

    """ )) self.connect(self.newAct, SIGNAL('triggered()'), self.newWindow) self.__actions.append(self.newAct) self.openAct = E4Action(self.trUtf8('Open File'), UI.PixmapCache.getIcon("open.png"), self.trUtf8('&Open File'), QKeySequence(self.trUtf8("Ctrl+O","File|Open")), 0, self, 'help_file_open') self.openAct.setStatusTip(self.trUtf8('Open a help file for display')) self.openAct.setWhatsThis(self.trUtf8( """Open File""" """

    This opens a new help file for display.""" """ It pops up a file selection dialog.

    """ )) self.connect(self.openAct, SIGNAL('triggered()'), self.__openFile) self.__actions.append(self.openAct) self.openTabAct = E4Action(self.trUtf8('Open File in New Tab'), UI.PixmapCache.getIcon("openNewTab.png"), self.trUtf8('Open File in New &Tab'), QKeySequence(self.trUtf8("Shift+Ctrl+O","File|Open in new tab")), 0, self, 'help_file_open_tab') self.openTabAct.setStatusTip(\ self.trUtf8('Open a help file for display in a new tab')) self.openTabAct.setWhatsThis(self.trUtf8( """Open File in New Tab""" """

    This opens a new help file for display in a new tab.""" """ It pops up a file selection dialog.

    """ )) self.connect(self.openTabAct, SIGNAL('triggered()'), self.__openFileNewTab) self.__actions.append(self.openTabAct) self.saveAsAct = E4Action(self.trUtf8('Save As '), UI.PixmapCache.getIcon("fileSaveAs.png"), self.trUtf8('&Save As...'), QKeySequence(self.trUtf8("Shift+Ctrl+S","File|Save As")), 0, self, 'help_file_save_as') self.saveAsAct.setStatusTip(\ self.trUtf8('Save the current page to disk')) self.saveAsAct.setWhatsThis(self.trUtf8( """Save As...""" """

    Saves the current page to disk.

    """ )) self.connect(self.saveAsAct, SIGNAL('triggered()'), self.__savePageAs) self.__actions.append(self.saveAsAct) bookmarksManager = self.bookmarksManager() self.importBookmarksAct = E4Action(self.trUtf8('Import Bookmarks'), self.trUtf8('&Import Bookmarks...'), 0, 0, self, 'help_file_import_bookmarks') self.importBookmarksAct.setStatusTip(\ self.trUtf8('Import bookmarks from other browsers')) self.importBookmarksAct.setWhatsThis(self.trUtf8( """Import Bookmarks""" """

    Import bookmarks from other browsers.

    """ )) self.connect(self.importBookmarksAct, SIGNAL('triggered()'), bookmarksManager.importBookmarks) self.__actions.append(self.importBookmarksAct) self.exportBookmarksAct = E4Action(self.trUtf8('Export Bookmarks'), self.trUtf8('&Export Bookmarks...'), 0, 0, self, 'help_file_export_bookmarks') self.exportBookmarksAct.setStatusTip(\ self.trUtf8('Export the bookmarks into a file')) self.exportBookmarksAct.setWhatsThis(self.trUtf8( """Export Bookmarks""" """

    Export the bookmarks into a file.

    """ )) self.connect(self.exportBookmarksAct, SIGNAL('triggered()'), bookmarksManager.exportBookmarks) self.__actions.append(self.exportBookmarksAct) self.printAct = E4Action(self.trUtf8('Print'), UI.PixmapCache.getIcon("print.png"), self.trUtf8('&Print'), QKeySequence(self.trUtf8("Ctrl+P","File|Print")), 0, self, 'help_file_print') self.printAct.setStatusTip(self.trUtf8('Print the displayed help')) self.printAct.setWhatsThis(self.trUtf8( """Print""" """

    Print the displayed help text.

    """ )) self.connect(self.printAct, SIGNAL('triggered()'), self.__printFile) self.__actions.append(self.printAct) self.printPreviewAct = E4Action(self.trUtf8('Print Preview'), UI.PixmapCache.getIcon("printPreview.png"), self.trUtf8('Print Preview'), 0, 0, self, 'help_file_print_preview') self.printPreviewAct.setStatusTip(self.trUtf8( 'Print preview of the displayed help')) self.printPreviewAct.setWhatsThis(self.trUtf8( """Print Preview""" """

    Print preview of the displayed help text.

    """ )) self.connect(self.printPreviewAct, SIGNAL('triggered()'), self.__printPreviewFile) self.__actions.append(self.printPreviewAct) self.closeAct = E4Action(self.trUtf8('Close'), UI.PixmapCache.getIcon("close.png"), self.trUtf8('&Close'), QKeySequence(self.trUtf8("Ctrl+W","File|Close")), 0, self, 'help_file_close') self.closeAct.setStatusTip(self.trUtf8('Close the current help window')) self.closeAct.setWhatsThis(self.trUtf8( """Close""" """

    Closes the current help window.

    """ )) self.connect(self.closeAct, SIGNAL('triggered()'), self.__close) self.__actions.append(self.closeAct) self.closeAllAct = E4Action(self.trUtf8('Close All'), self.trUtf8('Close &All'), 0, 0, self, 'help_file_close_all') self.closeAllAct.setStatusTip(self.trUtf8('Close all help windows')) self.closeAllAct.setWhatsThis(self.trUtf8( """Close All""" """

    Closes all help windows except the first one.

    """ )) self.connect(self.closeAllAct, SIGNAL('triggered()'), self.__closeAll) self.__actions.append(self.closeAllAct) self.privateBrowsingAct = E4Action(self.trUtf8('Private Browsing'), UI.PixmapCache.getIcon("privateBrowsing.png"), self.trUtf8('Private &Browsing'), 0, 0, self, 'help_file_private_browsing') self.privateBrowsingAct.setStatusTip(self.trUtf8('Private Browsing')) self.privateBrowsingAct.setWhatsThis(self.trUtf8( """Private Browsing""" """

    Enables private browsing. In this mode no history is""" """ recorded anymore.

    """ )) self.connect(self.privateBrowsingAct, SIGNAL('triggered()'), self.__privateBrowsing) self.privateBrowsingAct.setCheckable(True) self.__actions.append(self.privateBrowsingAct) self.exitAct = E4Action(self.trUtf8('Quit'), UI.PixmapCache.getIcon("exit.png"), self.trUtf8('&Quit'), QKeySequence(self.trUtf8("Ctrl+Q","File|Quit")), 0, self, 'help_file_quit') self.exitAct.setStatusTip(self.trUtf8('Quit the eric4 Web Browser')) self.exitAct.setWhatsThis(self.trUtf8( """Quit""" """

    Quit the eric4 Web Browser.

    """ )) if self.fromEric: self.connect(self.exitAct, SIGNAL('triggered()'), self, SLOT('close()')) else: self.connect(self.exitAct, SIGNAL('triggered()'), qApp, SLOT('closeAllWindows()')) self.__actions.append(self.exitAct) self.backAct = E4Action(self.trUtf8('Backward'), UI.PixmapCache.getIcon("back.png"), self.trUtf8('&Backward'), QKeySequence(self.trUtf8("Alt+Left","Go|Backward")), QKeySequence(self.trUtf8("Backspace","Go|Backward")), self, 'help_go_backward') self.backAct.setStatusTip(self.trUtf8('Move one help screen backward')) self.backAct.setWhatsThis(self.trUtf8( """Backward""" """

    Moves one help screen backward. If none is""" """ available, this action is disabled.

    """ )) self.connect(self.backAct, SIGNAL('triggered()'), self.__backward) self.__actions.append(self.backAct) self.forwardAct = E4Action(self.trUtf8('Forward'), UI.PixmapCache.getIcon("forward.png"), self.trUtf8('&Forward'), QKeySequence(self.trUtf8("Alt+Right","Go|Forward")), QKeySequence(self.trUtf8("Shift+Backspace","Go|Forward")), self, 'help_go_foreward') self.forwardAct.setStatusTip(self.trUtf8('Move one help screen forward')) self.forwardAct.setWhatsThis(self.trUtf8( """Forward""" """

    Moves one help screen forward. If none is""" """ available, this action is disabled.

    """ )) self.connect(self.forwardAct, SIGNAL('triggered()'), self.__forward) self.__actions.append(self.forwardAct) self.homeAct = E4Action(self.trUtf8('Home'), UI.PixmapCache.getIcon("home.png"), self.trUtf8('&Home'), QKeySequence(self.trUtf8("Ctrl+Home","Go|Home")), 0, self, 'help_go_home') self.homeAct.setStatusTip(self.trUtf8('Move to the initial help screen')) self.homeAct.setWhatsThis(self.trUtf8( """Home""" """

    Moves to the initial help screen.

    """ )) self.connect(self.homeAct, SIGNAL('triggered()'), self.__home) self.__actions.append(self.homeAct) self.reloadAct = E4Action(self.trUtf8('Reload'), UI.PixmapCache.getIcon("reload.png"), self.trUtf8('&Reload'), QKeySequence(self.trUtf8("Ctrl+R","Go|Reload")), QKeySequence(self.trUtf8("F5","Go|Reload")), self, 'help_go_reload') self.reloadAct.setStatusTip(self.trUtf8('Reload the current help screen')) self.reloadAct.setWhatsThis(self.trUtf8( """Reload""" """

    Reloads the current help screen.

    """ )) self.connect(self.reloadAct, SIGNAL('triggered()'), self.__reload) self.__actions.append(self.reloadAct) self.stopAct = E4Action(self.trUtf8('Stop'), UI.PixmapCache.getIcon("stopLoading.png"), self.trUtf8('&Stop'), QKeySequence(self.trUtf8("Ctrl+.","Go|Stop")), QKeySequence(self.trUtf8("Esc","Go|Stop")), self, 'help_go_stop') self.stopAct.setStatusTip(self.trUtf8('Stop loading')) self.stopAct.setWhatsThis(self.trUtf8( """Stop""" """

    Stops loading of the current tab.

    """ )) self.connect(self.stopAct, SIGNAL('triggered()'), self.__stopLoading) self.__actions.append(self.stopAct) self.copyAct = E4Action(self.trUtf8('Copy'), UI.PixmapCache.getIcon("editCopy.png"), self.trUtf8('&Copy'), QKeySequence(self.trUtf8("Ctrl+C","Edit|Copy")), 0, self, 'help_edit_copy') self.copyAct.setStatusTip(self.trUtf8('Copy the selected text')) self.copyAct.setWhatsThis(self.trUtf8( """Copy""" """

    Copy the selected text to the clipboard.

    """ )) self.connect(self.copyAct, SIGNAL('triggered()'), self.__copy) self.__actions.append(self.copyAct) self.findAct = E4Action(self.trUtf8('Find...'), UI.PixmapCache.getIcon("find.png"), self.trUtf8('&Find...'), QKeySequence(self.trUtf8("Ctrl+F","Edit|Find")), 0, self, 'help_edit_find') self.findAct.setStatusTip(self.trUtf8('Find text in page')) self.findAct.setWhatsThis(self.trUtf8( """Find""" """

    Find text in the current page.

    """ )) self.connect(self.findAct, SIGNAL('triggered()'), self.__find) self.__actions.append(self.findAct) self.findNextAct = E4Action(self.trUtf8('Find next'), UI.PixmapCache.getIcon("findNext.png"), self.trUtf8('Find &next'), QKeySequence(self.trUtf8("F3","Edit|Find next")), 0, self, 'help_edit_find_next') self.findNextAct.setStatusTip(self.trUtf8('Find next occurrence of text in page')) self.findNextAct.setWhatsThis(self.trUtf8( """Find next""" """

    Find the next occurrence of text in the current page.

    """ )) if not self.initShortcutsOnly: self.connect(self.findNextAct, SIGNAL('triggered()'), self.findDlg.findNext) self.__actions.append(self.findNextAct) self.findPrevAct = E4Action(self.trUtf8('Find previous'), UI.PixmapCache.getIcon("findPrev.png"), self.trUtf8('Find &previous'), QKeySequence(self.trUtf8("Shift+F3","Edit|Find previous")), 0, self, 'help_edit_find_previous') self.findPrevAct.setStatusTip(\ self.trUtf8('Find previous occurrence of text in page')) self.findPrevAct.setWhatsThis(self.trUtf8( """Find previous""" """

    Find the previous occurrence of text in the current page.

    """ )) if not self.initShortcutsOnly: self.connect(self.findPrevAct, SIGNAL('triggered()'), self.findDlg.findPrevious) self.__actions.append(self.findPrevAct) self.bookmarksManageAct = E4Action(self.trUtf8('Manage Bookmarks'), self.trUtf8('&Manage Bookmarks...'), QKeySequence(self.trUtf8("Ctrl+Shift+B", "Help|Manage bookmarks")), 0, self, 'help_bookmarks_manage') self.bookmarksManageAct.setStatusTip(self.trUtf8( 'Open a dialog to manage the bookmarks.')) self.bookmarksManageAct.setWhatsThis(self.trUtf8( """Manage Bookmarks...""" """

    Open a dialog to manage the bookmarks.

    """ )) self.connect(self.bookmarksManageAct, SIGNAL('triggered()'), self.__showBookmarksDialog) self.__actions.append(self.bookmarksManageAct) self.bookmarksAddAct = E4Action(self.trUtf8('Add Bookmark'), UI.PixmapCache.getIcon("addBookmark.png"), self.trUtf8('Add &Bookmark...'), QKeySequence(self.trUtf8("Ctrl+D", "Help|Add bookmark")), 0, self, 'help_bookmark_add') self.bookmarksAddAct.setIconVisibleInMenu(False) self.bookmarksAddAct.setStatusTip(self.trUtf8('Open a dialog to add a bookmark.')) self.bookmarksAddAct.setWhatsThis(self.trUtf8( """Add Bookmark""" """

    Open a dialog to add the current URL as a bookmark.

    """ )) self.connect(self.bookmarksAddAct, SIGNAL('triggered()'), self.__addBookmark) self.__actions.append(self.bookmarksAddAct) self.bookmarksAddFolderAct = E4Action(self.trUtf8('Add Folder'), self.trUtf8('Add &Folder...'), 0, 0, self, 'help_bookmark_show_all') self.bookmarksAddFolderAct.setStatusTip(self.trUtf8( 'Open a dialog to add a new bookmarks folder.')) self.bookmarksAddFolderAct.setWhatsThis(self.trUtf8( """Add Folder...""" """

    Open a dialog to add a new bookmarks folder.

    """ )) self.connect(self.bookmarksAddFolderAct, SIGNAL('triggered()'), self.__addBookmarkFolder) self.__actions.append(self.bookmarksAddFolderAct) self.bookmarksAllTabsAct = E4Action(self.trUtf8('Bookmark All Tabs'), self.trUtf8('Bookmark All Tabs...'), 0, 0, self, 'help_bookmark_all_tabs') self.bookmarksAllTabsAct.setStatusTip(self.trUtf8( 'Bookmark all open tabs.')) self.bookmarksAllTabsAct.setWhatsThis(self.trUtf8( """Bookmark All Tabs...""" """

    Open a dialog to add a new bookmarks folder for""" """ all open tabs.

    """ )) self.connect(self.bookmarksAllTabsAct, SIGNAL('triggered()'), self.__bookmarkAll) self.__actions.append(self.bookmarksAllTabsAct) self.whatsThisAct = E4Action(self.trUtf8('What\'s This?'), UI.PixmapCache.getIcon("whatsThis.png"), self.trUtf8('&What\'s This?'), QKeySequence(self.trUtf8("Shift+F1","Help|What's This?'")), 0, self, 'help_help_whats_this') self.whatsThisAct.setStatusTip(self.trUtf8('Context sensitive help')) self.whatsThisAct.setWhatsThis(self.trUtf8( """Display context sensitive help""" """

    In What's This? mode, the mouse cursor shows an arrow with a""" """ question mark, and you can click on the interface elements to get""" """ a short description of what they do and how to use them. In""" """ dialogs, this feature can be accessed using the context help button""" """ in the titlebar.

    """ )) self.connect(self.whatsThisAct, SIGNAL('triggered()'), self.__whatsThis) self.__actions.append(self.whatsThisAct) self.aboutAct = E4Action(self.trUtf8('About'), self.trUtf8('&About'), 0, 0, self, 'help_help_about') self.aboutAct.setStatusTip(self.trUtf8('Display information about this software')) self.aboutAct.setWhatsThis(self.trUtf8( """About""" """

    Display some information about this software.

    """ )) self.connect(self.aboutAct, SIGNAL('triggered()'), self.__about) self.__actions.append(self.aboutAct) self.aboutQtAct = E4Action(self.trUtf8('About Qt'), self.trUtf8('About &Qt'), 0, 0, self, 'help_help_about_qt') self.aboutQtAct.setStatusTip(\ self.trUtf8('Display information about the Qt toolkit')) self.aboutQtAct.setWhatsThis(self.trUtf8( """About Qt""" """

    Display some information about the Qt toolkit.

    """ )) self.connect(self.aboutQtAct, SIGNAL('triggered()'), self.__aboutQt) self.__actions.append(self.aboutQtAct) self.zoomInAct = E4Action(self.trUtf8('Zoom in'), UI.PixmapCache.getIcon("zoomIn.png"), self.trUtf8('Zoom &in'), QKeySequence(self.trUtf8("Ctrl++","View|Zoom in")), QKeySequence(self.trUtf8("Zoom In","View|Zoom in")), self, 'help_view_zoom_in') self.zoomInAct.setStatusTip(self.trUtf8('Zoom in on the text')) self.zoomInAct.setWhatsThis(self.trUtf8( """Zoom in""" """

    Zoom in on the text. This makes the text bigger.

    """ )) self.connect(self.zoomInAct, SIGNAL('triggered()'), self.__zoomIn) self.__actions.append(self.zoomInAct) self.zoomOutAct = E4Action(self.trUtf8('Zoom out'), UI.PixmapCache.getIcon("zoomOut.png"), self.trUtf8('Zoom &out'), QKeySequence(self.trUtf8("Ctrl+-","View|Zoom out")), QKeySequence(self.trUtf8("Zoom Out","View|Zoom out")), self, 'help_view_zoom_out') self.zoomOutAct.setStatusTip(self.trUtf8('Zoom out on the text')) self.zoomOutAct.setWhatsThis(self.trUtf8( """Zoom out""" """

    Zoom out on the text. This makes the text smaller.

    """ )) self.connect(self.zoomOutAct, SIGNAL('triggered()'), self.__zoomOut) self.__actions.append(self.zoomOutAct) self.zoomResetAct = E4Action(self.trUtf8('Zoom reset'), UI.PixmapCache.getIcon("zoomReset.png"), self.trUtf8('Zoom &reset'), QKeySequence(self.trUtf8("Ctrl+0","View|Zoom reset")), 0, self, 'help_view_zoom_reset') self.zoomResetAct.setStatusTip(self.trUtf8('Reset the zoom of the text')) self.zoomResetAct.setWhatsThis(self.trUtf8( """Zoom reset""" """

    Reset the zoom of the text. """ """This sets the zoom factor to 100%.

    """ )) self.connect(self.zoomResetAct, SIGNAL('triggered()'), self.__zoomReset) self.__actions.append(self.zoomResetAct) if hasattr(QWebSettings, 'ZoomTextOnly'): self.zoomTextOnlyAct = E4Action(self.trUtf8('Zoom text only'), self.trUtf8('Zoom &text only'), 0, 0, self, 'help_view_zoom_text_only') self.zoomTextOnlyAct.setCheckable(True) self.zoomTextOnlyAct.setStatusTip(self.trUtf8( 'Zoom text only; pictures remain constant')) self.zoomTextOnlyAct.setWhatsThis(self.trUtf8( """Zoom text only""" """

    Zoom text only; pictures remain constant.

    """ )) self.connect(self.zoomTextOnlyAct, SIGNAL('triggered(bool)'), self.__zoomTextOnly) self.__actions.append(self.zoomTextOnlyAct) else: self.zoomTextOnlyAct = None self.pageSourceAct = E4Action(self.trUtf8('Show page source'), self.trUtf8('Show page source'), QKeySequence(self.trUtf8('Ctrl+U')), 0, self, 'help_show_page_source') self.pageSourceAct.setStatusTip(self.trUtf8('Show the page source in an editor')) self.pageSourceAct.setWhatsThis(self.trUtf8( """Show page source""" """

    Show the page source in an editor.

    """ )) self.connect(self.pageSourceAct, SIGNAL('triggered()'), self.__showPageSource) self.__actions.append(self.pageSourceAct) self.addAction(self.pageSourceAct) self.fullScreenAct = E4Action(self.trUtf8('Full Screen'), UI.PixmapCache.getIcon("windowFullscreen.png"), self.trUtf8('&Full Screen'), QKeySequence(self.trUtf8('F11')), 0, self, 'help_view_full_scree') self.connect(self.fullScreenAct, SIGNAL('triggered()'), self.__viewFullScreen) self.__actions.append(self.fullScreenAct) self.addAction(self.fullScreenAct) self.nextTabAct = E4Action(self.trUtf8('Show next tab'), self.trUtf8('Show next tab'), QKeySequence(self.trUtf8('Ctrl+Alt+Tab')), 0, self, 'help_view_next_tab') self.connect(self.nextTabAct, SIGNAL('triggered()'), self.__nextTab) self.__actions.append(self.nextTabAct) self.addAction(self.nextTabAct) self.prevTabAct = E4Action(self.trUtf8('Show previous tab'), self.trUtf8('Show previous tab'), QKeySequence(self.trUtf8('Shift+Ctrl+Alt+Tab')), 0, self, 'help_view_previous_tab') self.connect(self.prevTabAct, SIGNAL('triggered()'), self.__prevTab) self.__actions.append(self.prevTabAct) self.addAction(self.prevTabAct) self.switchTabAct = E4Action(self.trUtf8('Switch between tabs'), self.trUtf8('Switch between tabs'), QKeySequence(self.trUtf8('Ctrl+1')), 0, self, 'help_switch_tabs') self.connect(self.switchTabAct, SIGNAL('triggered()'), self.__switchTab) self.__actions.append(self.switchTabAct) self.addAction(self.switchTabAct) self.prefAct = E4Action(self.trUtf8('Preferences'), UI.PixmapCache.getIcon("configure.png"), self.trUtf8('&Preferences...'), 0, 0, self, 'help_preferences') self.prefAct.setStatusTip(self.trUtf8('Set the prefered configuration')) self.prefAct.setWhatsThis(self.trUtf8( """Preferences""" """

    Set the configuration items of the application""" """ with your prefered values.

    """ )) self.connect(self.prefAct, SIGNAL('triggered()'), self.__showPreferences) self.__actions.append(self.prefAct) self.acceptedLanguagesAct = E4Action(self.trUtf8('Languages'), UI.PixmapCache.getIcon("flag.png"), self.trUtf8('&Languages...'), 0, 0, self, 'help_accepted_languages') self.acceptedLanguagesAct.setStatusTip(self.trUtf8( 'Configure the accepted languages for web pages')) self.acceptedLanguagesAct.setWhatsThis(self.trUtf8( """Languages""" """

    Configure the accepted languages for web pages.

    """ )) self.connect(self.acceptedLanguagesAct, SIGNAL('triggered()'), self.__showAcceptedLanguages) self.__actions.append(self.acceptedLanguagesAct) self.cookiesAct = E4Action(self.trUtf8('Cookies'), UI.PixmapCache.getIcon("cookie.png"), self.trUtf8('C&ookies...'), 0, 0, self, 'help_cookies') self.cookiesAct.setStatusTip(self.trUtf8( 'Configure cookies handling')) self.cookiesAct.setWhatsThis(self.trUtf8( """Cookies""" """

    Configure cookies handling.

    """ )) self.connect(self.cookiesAct, SIGNAL('triggered()'), self.__showCookiesConfiguration) self.__actions.append(self.cookiesAct) self.syncTocAct = E4Action(self.trUtf8('Sync with Table of Contents'), UI.PixmapCache.getIcon("syncToc.png"), self.trUtf8('Sync with Table of Contents'), 0, 0, self, 'help_sync_toc') self.syncTocAct.setStatusTip(self.trUtf8( 'Synchronizes the table of contents with current page')) self.syncTocAct.setWhatsThis(self.trUtf8( """Sync with Table of Contents""" """

    Synchronizes the table of contents with current page.

    """ )) self.connect(self.syncTocAct, SIGNAL('triggered()'), self.__syncTOC) self.__actions.append(self.syncTocAct) self.showTocAct = E4Action(self.trUtf8('Table of Contents'), self.trUtf8('Table of Contents'), 0, 0, self, 'help_show_toc') self.showTocAct.setStatusTip(self.trUtf8( 'Shows the table of contents window')) self.showTocAct.setWhatsThis(self.trUtf8( """Table of Contents""" """

    Shows the table of contents window.

    """ )) self.connect(self.showTocAct, SIGNAL('triggered()'), self.__showTocWindow) self.__actions.append(self.showTocAct) self.showIndexAct = E4Action(self.trUtf8('Index'), self.trUtf8('Index'), 0, 0, self, 'help_show_index') self.showIndexAct.setStatusTip(self.trUtf8( 'Shows the index window')) self.showIndexAct.setWhatsThis(self.trUtf8( """Index""" """

    Shows the index window.

    """ )) self.connect(self.showIndexAct, SIGNAL('triggered()'), self.__showIndexWindow) self.__actions.append(self.showIndexAct) self.showSearchAct = E4Action(self.trUtf8('Search'), self.trUtf8('Search'), 0, 0, self, 'help_show_search') self.showSearchAct.setStatusTip(self.trUtf8( 'Shows the search window')) self.showSearchAct.setWhatsThis(self.trUtf8( """Search""" """

    Shows the search window.

    """ )) self.connect(self.showSearchAct, SIGNAL('triggered()'), self.__showSearchWindow) self.__actions.append(self.showSearchAct) self.manageQtHelpDocsAct = E4Action(self.trUtf8('Manage QtHelp Documents'), self.trUtf8('Manage QtHelp &Documents'), 0, 0, self, 'help_qthelp_documents') self.manageQtHelpDocsAct.setStatusTip(self.trUtf8( 'Shows a dialog to manage the QtHelp documentation set')) self.manageQtHelpDocsAct.setWhatsThis(self.trUtf8( """Manage QtHelp Documents""" """

    Shows a dialog to manage the QtHelp documentation set.

    """ )) self.connect(self.manageQtHelpDocsAct, SIGNAL('triggered()'), self.__manageQtHelpDocumentation) self.__actions.append(self.manageQtHelpDocsAct) self.manageQtHelpFiltersAct = E4Action(self.trUtf8('Manage QtHelp Filters'), self.trUtf8('Manage QtHelp &Filters'), 0, 0, self, 'help_qthelp_filters') self.manageQtHelpFiltersAct.setStatusTip(self.trUtf8( 'Shows a dialog to manage the QtHelp filters')) self.manageQtHelpFiltersAct.setWhatsThis(self.trUtf8( """Manage QtHelp Filters""" """

    Shows a dialog to manage the QtHelp filters.

    """ )) self.connect(self.manageQtHelpFiltersAct, SIGNAL('triggered()'), self.__manageQtHelpFilters) self.__actions.append(self.manageQtHelpFiltersAct) self.reindexDocumentationAct = E4Action(self.trUtf8('Reindex Documentation'), self.trUtf8('&Reindex Documentation'), 0, 0, self, 'help_qthelp_reindex') self.reindexDocumentationAct.setStatusTip(self.trUtf8( 'Reindexes the documentation set')) self.reindexDocumentationAct.setWhatsThis(self.trUtf8( """Reindex Documentation""" """

    Reindexes the documentation set.

    """ )) if not self.initShortcutsOnly: self.connect(self.reindexDocumentationAct, SIGNAL('triggered()'), self.__searchEngine.reindexDocumentation) self.__actions.append(self.reindexDocumentationAct) self.clearPrivateDataAct = E4Action(self.trUtf8('Clear private data'), self.trUtf8('&Clear private data'), 0, 0, self, 'help_clear_private_data') self.clearPrivateDataAct.setStatusTip(self.trUtf8('Clear private data')) self.clearPrivateDataAct.setWhatsThis(self.trUtf8( """Clear private data""" """

    Clears the private data like browsing history, search history""" """ or the favicons database.

    """ )) self.connect(self.clearPrivateDataAct, SIGNAL('triggered()'), self.__clearPrivateData) self.__actions.append(self.clearPrivateDataAct) self.clearIconsAct = E4Action(self.trUtf8('Clear icons database'), self.trUtf8('Clear &icons database'), 0, 0, self, 'help_clear_icons_db') self.clearIconsAct.setStatusTip(self.trUtf8('Clear the database of favicons')) self.clearIconsAct.setWhatsThis(self.trUtf8( """Clear icons database""" """

    Clears the database of favicons of previously visited URLs.

    """ )) self.connect(self.clearIconsAct, SIGNAL('triggered()'), self.__clearIconsDatabase) self.__actions.append(self.clearIconsAct) self.searchEnginesAct = E4Action(self.trUtf8('Configure Search Engines'), self.trUtf8('Configure &Search Engines...'), 0, 0, self, 'help_search_engines') self.searchEnginesAct.setStatusTip(self.trUtf8( 'Configure the available search engines')) self.searchEnginesAct.setWhatsThis(self.trUtf8( """Configure Search Engines...""" """

    Opens a dialog to configure the available search engines.

    """ )) self.connect(self.searchEnginesAct, SIGNAL('triggered()'), self.__showEnginesConfigurationDialog) self.__actions.append(self.searchEnginesAct) self.passwordsAct = E4Action(self.trUtf8('Manage Saved Passwords'), self.trUtf8('Manage Saved Passwords...'), 0, 0, self, 'help_manage_passwords') self.passwordsAct.setStatusTip(self.trUtf8( 'Manage the saved passwords')) self.passwordsAct.setWhatsThis(self.trUtf8( """Manage Saved Passwords...""" """

    Opens a dialog to manage the saved passwords.

    """ )) self.connect(self.passwordsAct, SIGNAL('triggered()'), self.__showPasswordsDialog) self.__actions.append(self.passwordsAct) self.adblockAct = E4Action(self.trUtf8('Ad Block'), self.trUtf8('&Ad Block...'), 0, 0, self, 'help_adblock') self.adblockAct.setStatusTip(self.trUtf8( 'Configure AdBlock subscriptions and rules')) self.adblockAct.setWhatsThis(self.trUtf8( """Ad Block...""" """

    Opens a dialog to configure AdBlock subscriptions and rules.

    """ )) self.connect(self.adblockAct, SIGNAL('triggered()'), self.__showAdBlockDialog) self.__actions.append(self.adblockAct) self.toolsMonitorAct = E4Action(self.trUtf8('Show Network Monitor'), self.trUtf8('Show &Network Monitor'), 0, 0, self, 'help_tools_network_monitor') self.toolsMonitorAct.setStatusTip(self.trUtf8('Show the network monitor dialog')) self.toolsMonitorAct.setWhatsThis(self.trUtf8( """Show Network Monitor""" """

    Shows the network monitor dialog.

    """ )) self.connect(self.toolsMonitorAct, SIGNAL('triggered()'), self.__showNetworkMonitor) self.__actions.append(self.toolsMonitorAct) self.backAct.setEnabled(False) self.forwardAct.setEnabled(False) # now read the keyboard shortcuts for the actions Shortcuts.readShortcuts(helpViewer = self) def getActions(self): """ Public method to get a list of all actions. @return list of all actions (list of E4Action) """ return self.__actions[:] def __initMenus(self): """ Private method to create the menus. """ mb = self.menuBar() menu = mb.addMenu(self.trUtf8('&File')) menu.setTearOffEnabled(True) menu.addAction(self.newTabAct) menu.addAction(self.newAct) menu.addAction(self.openAct) menu.addAction(self.openTabAct) menu.addSeparator() menu.addAction(self.saveAsAct) menu.addSeparator() menu.addAction(self.importBookmarksAct) menu.addAction(self.exportBookmarksAct) menu.addSeparator() menu.addAction(self.printPreviewAct) menu.addAction(self.printAct) menu.addSeparator() menu.addAction(self.closeAct) menu.addAction(self.closeAllAct) menu.addSeparator() menu.addAction(self.privateBrowsingAct) menu.addSeparator() menu.addAction(self.exitAct) menu = mb.addMenu(self.trUtf8('&Edit')) menu.setTearOffEnabled(True) menu.addAction(self.copyAct) menu.addSeparator() menu.addAction(self.findAct) menu.addAction(self.findNextAct) menu.addAction(self.findPrevAct) menu = mb.addMenu(self.trUtf8('&View')) menu.setTearOffEnabled(True) menu.addAction(self.zoomInAct) menu.addAction(self.zoomResetAct) menu.addAction(self.zoomOutAct) if self.zoomTextOnlyAct is not None: menu.addAction(self.zoomTextOnlyAct) menu.addSeparator() menu.addAction(self.pageSourceAct) menu.addAction(self.fullScreenAct) menu = mb.addMenu(self.trUtf8('&Go')) menu.setTearOffEnabled(True) menu.addAction(self.backAct) menu.addAction(self.forwardAct) menu.addAction(self.homeAct) menu.addSeparator() menu.addAction(self.stopAct) menu.addAction(self.reloadAct) menu.addSeparator() menu.addAction(self.syncTocAct) self.historyMenu = HistoryMenu(self) self.historyMenu.setTearOffEnabled(True) self.historyMenu.setTitle(self.trUtf8('H&istory')) self.connect(self.historyMenu, SIGNAL("openUrl(const QUrl&, const QString&)"), self.__openUrl) self.connect(self.historyMenu, SIGNAL("newUrl(const QUrl&, const QString&)"), self.__openUrlNewTab) mb.addMenu(self.historyMenu) self.bookmarksMenu = BookmarksMenuBarMenu(self) self.bookmarksMenu.setTearOffEnabled(True) self.bookmarksMenu.setTitle(self.trUtf8('&Bookmarks')) self.connect(self.bookmarksMenu, SIGNAL("openUrl(const QUrl&, const QString&)"), self.__openUrl) self.connect(self.bookmarksMenu, SIGNAL("newUrl(const QUrl&, const QString&)"), self.__openUrlNewTab) mb.addMenu(self.bookmarksMenu) bookmarksActions = [] bookmarksActions.append(self.bookmarksManageAct) bookmarksActions.append(self.bookmarksAddAct) bookmarksActions.append(self.bookmarksAllTabsAct) bookmarksActions.append(self.bookmarksAddFolderAct) self.bookmarksMenu.setInitialActions(bookmarksActions) menu = mb.addMenu(self.trUtf8('&Settings')) menu.setTearOffEnabled(True) menu.addAction(self.prefAct) menu.addAction(self.acceptedLanguagesAct) menu.addAction(self.cookiesAct) menu.addSeparator() menu.addAction(self.searchEnginesAct) menu.addSeparator() menu.addAction(self.passwordsAct) menu.addSeparator() menu.addAction(self.adblockAct) menu.addSeparator() menu.addAction(self.manageQtHelpDocsAct) menu.addAction(self.manageQtHelpFiltersAct) menu.addAction(self.reindexDocumentationAct) menu.addSeparator() menu.addAction(self.clearPrivateDataAct) menu.addAction(self.clearIconsAct) menu = mb.addMenu(self.trUtf8("&Tools")) menu.setTearOffEnabled(True) menu.addAction(self.toolsMonitorAct) menu = mb.addMenu(self.trUtf8("&Window")) menu.setTearOffEnabled(True) menu.addAction(self.showTocAct) menu.addAction(self.showIndexAct) menu.addAction(self.showSearchAct) mb.addSeparator() menu = mb.addMenu(self.trUtf8('&Help')) menu.setTearOffEnabled(True) menu.addAction(self.aboutAct) menu.addAction(self.aboutQtAct) menu.addSeparator() menu.addAction(self.whatsThisAct) def __initTabContextMenu(self): """ Private mezhod to create the tab context menu. """ self.__tabContextMenu = QMenu(self.tabWidget) self.tabContextNewAct = \ self.__tabContextMenu.addAction(self.newTabAct) self.__tabContextMenu.addSeparator() self.leftMenuAct = \ self.__tabContextMenu.addAction(UI.PixmapCache.getIcon("1leftarrow.png"), self.trUtf8('Move Left'), self.__tabContextMenuMoveLeft) self.rightMenuAct = \ self.__tabContextMenu.addAction(UI.PixmapCache.getIcon("1rightarrow.png"), self.trUtf8('Move Right'), self.__tabContextMenuMoveRight) self.__tabContextMenu.addSeparator() self.tabContextCloneAct = \ self.__tabContextMenu.addAction(self.trUtf8("Duplicate Page"), self.__tabContextMenuClone) self.__tabContextMenu.addSeparator() self.tabContextCloseAct = \ self.__tabContextMenu.addAction(UI.PixmapCache.getIcon("close.png"), self.trUtf8('Close'), self.__tabContextMenuClose) self.tabContextCloseOthersAct = \ self.__tabContextMenu.addAction(self.trUtf8("Close Others"), self.__tabContextMenuCloseOthers) self.__tabContextMenu.addAction(self.closeAllAct) self.__tabContextMenu.addSeparator() self.__tabContextMenu.addAction(UI.PixmapCache.getIcon("printPreview.png"), self.trUtf8('Print Preview'), self.__tabContextMenuPrintPreview) self.__tabContextMenu.addAction(UI.PixmapCache.getIcon("print.png"), self.trUtf8('Print'), self.__tabContextMenuPrint) self.__tabContextMenu.addSeparator() self.__tabContextMenu.addAction(self.bookmarksAllTabsAct) def __initToolbars(self): """ Private method to create the toolbars. """ filetb = self.addToolBar(self.trUtf8("File")) filetb.setObjectName("FileToolBar") filetb.setIconSize(UI.Config.ToolBarIconSize) filetb.addAction(self.newTabAct) filetb.addAction(self.newAct) filetb.addAction(self.openAct) filetb.addAction(self.openTabAct) filetb.addSeparator() filetb.addAction(self.saveAsAct) filetb.addSeparator() filetb.addAction(self.printPreviewAct) filetb.addAction(self.printAct) filetb.addSeparator() filetb.addAction(self.closeAct) filetb.addAction(self.exitAct) edittb = self.addToolBar(self.trUtf8("Edit")) edittb.setObjectName("EditToolBar") edittb.setIconSize(UI.Config.ToolBarIconSize) edittb.addAction(self.copyAct) viewtb = self.addToolBar(self.trUtf8("View")) viewtb.setObjectName("ViewToolBar") viewtb.setIconSize(UI.Config.ToolBarIconSize) viewtb.addAction(self.zoomInAct) viewtb.addAction(self.zoomResetAct) viewtb.addAction(self.zoomOutAct) viewtb.addSeparator() viewtb.addAction(self.fullScreenAct) findtb = self.addToolBar(self.trUtf8("Find")) findtb.setObjectName("FindToolBar") findtb.setIconSize(UI.Config.ToolBarIconSize) findtb.addAction(self.findAct) findtb.addAction(self.findNextAct) findtb.addAction(self.findPrevAct) filtertb = self.addToolBar(self.trUtf8("Filter")) filtertb.setObjectName("FilterToolBar") self.filterCombo = QComboBox() self.filterCombo.setMinimumWidth( QFontMetrics(QFont()).width("ComboBoxWithEnoughWidth")) filtertb.addWidget(QLabel(self.trUtf8("Filtered by: "))) filtertb.addWidget(self.filterCombo) self.connect(self.__helpEngine, SIGNAL("setupFinished()"), self.__setupFilterCombo) self.connect(self.filterCombo, SIGNAL("activated(const QString&)"), self.__filterQtHelpDocumentation) self.__setupFilterCombo() settingstb = self.addToolBar(self.trUtf8("Settings")) settingstb.setObjectName("SettingsToolBar") settingstb.setIconSize(UI.Config.ToolBarIconSize) settingstb.addAction(self.prefAct) settingstb.addAction(self.acceptedLanguagesAct) settingstb.addAction(self.cookiesAct) helptb = self.addToolBar(self.trUtf8("Help")) helptb.setObjectName("HelpToolBar") helptb.setIconSize(UI.Config.ToolBarIconSize) helptb.addAction(self.whatsThisAct) self.addToolBarBreak() gotb = self.addToolBar(self.trUtf8("Go")) gotb.setObjectName("GoToolBar") gotb.setIconSize(UI.Config.ToolBarIconSize) gotb.addAction(self.backAct) gotb.addAction(self.forwardAct) gotb.addAction(self.reloadAct) gotb.addAction(self.stopAct) gotb.addAction(self.homeAct) gotb.addSeparator() self.iconLabel = QLabel() gotb.addWidget(self.iconLabel) self.pathCombo = QComboBox() self.pathCombo.setDuplicatesEnabled(False) self.pathCombo.setInsertPolicy(QComboBox.InsertAtTop) self.pathCombo.setEditable(1) self.pathCombo.setAutoCompletion(True) self.connect(self.pathCombo, SIGNAL('activated(const QString&)'), self.__pathSelected) self.pathCombo.setWhatsThis(self.trUtf8( """

    Enter the help file or a URL to be displayed directly into this""" """ edit field. Select a previously shown help file or URL from the""" """ drop down list.

    """ )) sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(6) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.pathCombo.sizePolicy().hasHeightForWidth()) self.pathCombo.setSizePolicy(sizePolicy) gotb.addWidget(self.pathCombo) self.pathComboDefaultColor = \ self.pathCombo.lineEdit().palette().color(QPalette.Base) self.__historyCompletionModel = HistoryCompletionModel(self) self.__historyCompletionModel.setSourceModel( self.historyManager().historyFilterModel()) self.__historyCompleter = HistoryCompleter(self.__historyCompletionModel, self) self.connect(self.__historyCompleter, SIGNAL("activated(const QString&)"), self.__pathSelected) self.pathCombo.setCompleter(self.__historyCompleter) self.privacyLabel = QLabel() gotb.addWidget(self.privacyLabel) gotb.addSeparator() self.searchEdit = HelpWebSearchWidget(self) sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(2) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.searchEdit.sizePolicy().hasHeightForWidth()) self.searchEdit.setSizePolicy(sizePolicy) self.connect(self.searchEdit, SIGNAL("search"), self.__linkActivated) gotb.addWidget(self.searchEdit) self.backMenu = QMenu(self) self.connect(self.backMenu, SIGNAL("aboutToShow()"), self.__showBackMenu) self.connect(self.backMenu, SIGNAL("triggered(QAction*)"), self.__navigationMenuActionTriggered) backButton = gotb.widgetForAction(self.backAct) backButton.setMenu(self.backMenu) backButton.setPopupMode(QToolButton.MenuButtonPopup) self.forwardMenu = QMenu(self) self.connect(self.forwardMenu, SIGNAL("aboutToShow()"), self.__showForwardMenu) self.connect(self.forwardMenu, SIGNAL("triggered(QAction*)"), self.__navigationMenuActionTriggered) forwardButton = gotb.widgetForAction(self.forwardAct) forwardButton.setMenu(self.forwardMenu) forwardButton.setPopupMode(QToolButton.MenuButtonPopup) bookmarksModel = self.bookmarksManager().bookmarksModel() self.bookmarksToolBar = BookmarksToolBar(self, bookmarksModel, self) self.bookmarksToolBar.setObjectName("BookmarksToolBar") self.bookmarksToolBar.setIconSize(UI.Config.ToolBarIconSize) self.connect(self.bookmarksToolBar, SIGNAL("openUrl(const QUrl&, const QString&)"), self.__openUrl) self.connect(self.bookmarksToolBar, SIGNAL("newUrl(const QUrl&, const QString&)"), self.__openUrlNewTab) self.addToolBarBreak() self.addToolBar(self.bookmarksToolBar) def __nextTab(self): """ Private slot used to show the next tab. """ fwidget = QApplication.focusWidget() while fwidget and not hasattr(fwidget, 'nextTab'): fwidget = fwidget.parent() if fwidget: fwidget.nextTab() def __prevTab(self): """ Private slot used to show the previous tab. """ fwidget = QApplication.focusWidget() while fwidget and not hasattr(fwidget, 'prevTab'): fwidget = fwidget.parent() if fwidget: fwidget.prevTab() def __switchTab(self): """ Private slot used to switch between the current and the previous current tab. """ fwidget = QApplication.focusWidget() while fwidget and not hasattr(fwidget, 'switchTab'): fwidget = fwidget.parent() if fwidget: fwidget.switchTab() def __whatsThis(self): """ Private slot called in to enter Whats This mode. """ QWhatsThis.enterWhatsThisMode() def __showHistoryMenu(self): """ Private slot called in order to show the history menu. """ self.historyMenu.clear() self.historyMenu.addAction(self.clearHistoryAct) self.clearHistoryAct.setData(QVariant(-1)) self.historyMenu.addSeparator() idx = 0 for hist in self.mHistory: act = self.historyMenu.addAction(\ Utilities.compactPath(unicode(hist), self.maxMenuFilePathLen)) act.setData(QVariant(idx)) idx += 1 act.setIcon(HelpWindow.__getWebIcon(QUrl(hist))) def __pathSelected(self, path): """ Private slot called when a file is selected in the combobox. @param path path to be shown (string or QString) """ url = self.__guessUrlFromPath(path) self.currentBrowser().setSource(url) self.__setPathComboBackground() def __guessUrlFromPath(self, path): """ Private method to guess an URL given a path string. @param path path string to guess an URL for (QString) @return guessed URL (QUrl) """ manager = self.searchEdit.openSearchManager() path = Utilities.fromNativeSeparators(path) url = manager.convertKeywordSearchToUrl(path) if url.isValid(): return url try: return QUrl.fromUserInput(path) except AttributeError: return QUrl(path) def __setPathComboBackground(self): """ Private slot to change the path combo background to indicate save URLs. """ url = QUrl(self.pathCombo.currentText()) le = self.pathCombo.lineEdit() p = le.palette() if url.isEmpty() or url.scheme() != "https": p.setBrush(QPalette.Base, self.pathComboDefaultColor) else: p.setBrush(QPalette.Base, QBrush(Preferences.getHelp("SaveUrlColor"))) le.setPalette(p) le.update() def __elide(self, txt, mode = Qt.ElideRight, length = 40): """ Private method to elide some text. @param txt text to be elided (string or QString) @keyparam mode elide mode (Qt.TextElideMode) @keyparam length amount of characters to be used (integer) @return the elided text (QString) """ qs = QString(txt) if mode == Qt.ElideNone or qs.length() < length: return qs elif mode == Qt.ElideLeft: return QString("...%1").arg(qs.right(length)) elif mode == Qt.ElideMiddle: return QString("%1...%2").arg(qs.left(length / 2)).arg(qs.right(length / 2)) elif mode == Qt.ElideRight: return QString("%1...").arg(qs.left(length)) else: # just in case return qs def __sourceChanged(self, url): """ Private slot called when the displayed text of the combobox is changed. """ selectedURL = url.toString() if not selectedURL.isEmpty() and self.pathCombo is not None: i = self.pathCombo.findText(selectedURL) if i == -1: if not QWebSettings.globalSettings()\ .testAttribute(QWebSettings.PrivateBrowsingEnabled): self.pathCombo.insertItem(0, selectedURL) self.pathCombo.setCurrentIndex(0) else: self.pathCombo.setCurrentIndex(i) self.__setPathComboBackground() self.iconChanged(self.currentBrowser().icon()) def __titleChanged(self, title): """ Private slot called to handle a change of the current browsers title. @param title new title (QString) """ if title == "": title = self.currentBrowser().url().toString() self.tabWidget.setTabText(self.tabWidget.currentIndex(), self.__elide(title.replace("&", "&&"))) self.tabWidget.setTabToolTip(self.tabWidget.currentIndex(), title) self.historyManager().updateHistoryEntry( self.currentBrowser().url().toString(), title) def newTab(self, link = None): """ Public slot called to open a new help window tab. @param link file to be displayed in the new window (string, QString or QUrl) """ if link is None: linkName = "" elif isinstance(link, QUrl): linkName = link.toString() else: linkName = link self.newBrowser(linkName) def newWindow(self, link = None): """ Public slot called to open a new help browser dialog. @param link file to be displayed in the new window (QUrl) """ if link is None: linkName = "" elif isinstance(link, QUrl): linkName = link.toString() else: linkName = link h = HelpWindow(linkName, ".", self.parent(), "qbrowser", self.fromEric) h.show() def __openFile(self): """ Private slot called to open a file. """ fn = KQFileDialog.getOpenFileName(\ self, self.trUtf8("Open File"), QString(), self.trUtf8("Help Files (*.html *.htm);;" "PDF Files (*.pdf);;" "CHM Files (*.chm);;" "All Files (*)" )) if not fn.isEmpty(): if Utilities.isWindowsPlatform(): url = "file:///" + Utilities.fromNativeSeparators(fn) else: url = "file://" + fn self.currentBrowser().setSource(QUrl(url)) def __openFileNewTab(self): """ Private slot called to open a file in a new tab. """ fn = KQFileDialog.getOpenFileName(\ self, self.trUtf8("Open File"), QString(), self.trUtf8("Help Files (*.html *.htm);;" "PDF Files (*.pdf);;" "CHM Files (*.chm);;" "All Files (*)" )) if not fn.isEmpty(): if Utilities.isWindowsPlatform(): url = "file:///" + Utilities.fromNativeSeparators(fn) else: url = "file://" + fn self.newTab(url) def __savePageAs(self): """ Private slot to save the current page. """ browser = self.currentBrowser() if browser is not None: browser.saveAs() def __printFile(self, browser = None): """ Private slot called to print the displayed file. @param browser reference to the browser to be printed (QTextEdit) """ if browser is None: browser = self.currentBrowser() self.__printRequested(browser.page().mainFrame()) def __printRequested(self, frame): """ Private slot to handle a print request. @param frame reference to the frame to be printed (QWebFrame) """ printer = KdeQt.KQPrinter.KQPrinter(mode = QPrinter.HighResolution) if Preferences.getPrinter("ColorMode"): printer.setColorMode(KdeQt.KQPrinter.Color) else: printer.setColorMode(KdeQt.KQPrinter.GrayScale) if Preferences.getPrinter("FirstPageFirst"): printer.setPageOrder(KdeQt.KQPrinter.FirstPageFirst) else: printer.setPageOrder(KdeQt.KQPrinter.LastPageFirst) printer.setPageMargins( Preferences.getPrinter("LeftMargin") * 10, Preferences.getPrinter("TopMargin") * 10, Preferences.getPrinter("RightMargin") * 10, Preferences.getPrinter("BottomMargin") * 10, QPrinter.Millimeter ) printer.setPrinterName(Preferences.getPrinter("PrinterName")) printDialog = KQPrintDialog(printer, self) if printDialog.exec_() == QDialog.Accepted: try: frame.print_(printer) except AttributeError: KQMessageBox.critical(self, self.trUtf8("eric4 Web Browser"), self.trUtf8("""

    Printing is not available due to a bug in PyQt4.""" """Please upgrade.

    """)) return def __printPreviewFile(self, browser = None): """ Private slot called to show a print preview of the displayed file. @param browser reference to the browser to be printed (QTextEdit) """ from PyQt4.QtGui import QPrintPreviewDialog if browser is None: browser = self.currentBrowser() printer = KdeQt.KQPrinter.KQPrinter(mode = QPrinter.HighResolution) if Preferences.getPrinter("ColorMode"): printer.setColorMode(KdeQt.KQPrinter.Color) else: printer.setColorMode(KdeQt.KQPrinter.GrayScale) if Preferences.getPrinter("FirstPageFirst"): printer.setPageOrder(KdeQt.KQPrinter.FirstPageFirst) else: printer.setPageOrder(KdeQt.KQPrinter.LastPageFirst) printer.setPageMargins( Preferences.getPrinter("LeftMargin") * 10, Preferences.getPrinter("TopMargin") * 10, Preferences.getPrinter("RightMargin") * 10, Preferences.getPrinter("BottomMargin") * 10, QPrinter.Millimeter ) printer.setPrinterName(Preferences.getPrinter("PrinterName")) self.__printPreviewBrowser = browser preview = QPrintPreviewDialog(printer, self) self.connect(preview, SIGNAL("paintRequested(QPrinter*)"), self.__printPreview) preview.exec_() def __printPreview(self, printer): """ Public slot to generate a print preview. @param printer reference to the printer object (QPrinter) """ try: self.__printPreviewBrowser.print_(printer) except AttributeError: KQMessageBox.critical(self, self.trUtf8("eric4 Web Browser"), self.trUtf8("""

    Printing is not available due to a bug in PyQt4.""" """Please upgrade.

    """)) return def __about(self): """ Private slot to show the about information. """ KQMessageBox.about(self, self.trUtf8("eric4 Web Browser"), self.trUtf8( """eric4 Web Browser - %1""" """

    The eric4 Web Browser is a combined help file and HTML browser.""" """ It is part of the eric4 development toolset.

    """ ).arg(Version)) def __aboutQt(self): """ Private slot to show info about Qt. """ KQMessageBox.aboutQt(self, self.trUtf8("eric4 Web Browser")) def __removeOldHistory(self): """ Private method to remove the old history from the eric4 preferences file. """ hist = Preferences.Prefs.settings.value('History/Files') if hist.isValid(): Preferences.Prefs.settings.remove('History/Files') def __setBackwardAvailable(self, b): """ Private slot called when backward references are available. @param b flag indicating availability of the backwards action (boolean) """ self.backAct.setEnabled(b) def __setForwardAvailable(self, b): """ Private slot called when forward references are available. @param b flag indicating the availability of the forwards action (boolean) """ self.forwardAct.setEnabled(b) def __setLoadingActions(self, b): """ Private slot to set the loading dependent actions. @param b flag indicating the loading state to consider (boolean) """ self.reloadAct.setEnabled(not b) self.stopAct.setEnabled(b) def __addBookmark(self): """ Private slot called to add the displayed file to the bookmarks. """ view = self.currentBrowser() url = QString(view.url().toEncoded()) title = view.title() dlg = AddBookmarkDialog() dlg.setUrl(url) dlg.setTitle(title) menu = self.bookmarksManager().menu() idx = self.bookmarksManager().bookmarksModel().nodeIndex(menu) dlg.setCurrentIndex(idx) dlg.exec_() def __addBookmarkFolder(self): """ Private slot to add a new bookmarks folder. """ dlg = AddBookmarkDialog() menu = self.bookmarksManager().menu() idx = self.bookmarksManager().bookmarksModel().nodeIndex(menu) dlg.setCurrentIndex(idx) dlg.setFolder(True) dlg.exec_() def __showBookmarksDialog(self): """ Private slot to show the bookmarks dialog. """ self.__bookmarksDialog = BookmarksDialog(self) self.__bookmarksDialog.setAttribute(Qt.WA_DeleteOnClose) self.connect(self.__bookmarksDialog, SIGNAL("openUrl(const QUrl&, const QString&)"), self.__openUrl) self.connect(self.__bookmarksDialog, SIGNAL("newUrl(const QUrl&, const QString&)"), self.__openUrlNewTab) self.__bookmarksDialog.show() def __bookmarkAll(self): """ Private slot to bookmark all open tabs. """ dlg = AddBookmarkDialog() dlg.setFolder(True) dlg.setTitle(self.trUtf8("Saved Tabs")) dlg.exec_() folder = dlg.addedNode() if folder is None: return for index in range(self.tabWidget.count()): tab = self.tabWidget.widget(index) if tab is None: continue bookmark = BookmarkNode(BookmarkNode.Bookmark) bookmark.url = QString.fromUtf8(tab.url().toEncoded()) bookmark.title = tab.title() self.bookmarksManager().addBookmark(folder, bookmark) def __find(self): """ Private slot to handle the find action. It opens the search dialog in order to perform the various search actions and to collect the various search info. """ self.findDlg.showFind() def closeEvent(self, e): """ Private event handler for the close event. @param e the close event (QCloseEvent)
    This event is simply accepted after the history has been saved and all window references have been deleted. """ self.__closeNetworkMonitor() self.cookieJar().close() self.bookmarksManager().close() self.historyManager().close() self.passwordManager().close() self.adblockManager().close() self.searchEdit.openSearchManager().close() self.__searchEngine.cancelIndexing() self.__searchEngine.cancelSearching() if self.__helpInstaller: self.__helpInstaller.stop() self.searchEdit.saveSearches() state = self.saveState() Preferences.setHelp("HelpViewerState", state) if Preferences.getHelp("SaveGeometry"): if not self.__isFullScreen(): Preferences.setGeometry("HelpViewerGeometry", self.saveGeometry()) else: Preferences.setGeometry("HelpViewerGeometry", QByteArray()) try: del self.__class__.helpwindows[self.__class__.helpwindows.index(self)] except ValueError: pass if not self.fromEric: Preferences.syncPreferences() e.accept() self.emit(SIGNAL("helpClosed")) def __backward(self): """ Private slot called to handle the backward action. """ self.currentBrowser().backward() def __forward(self): """ Private slot called to handle the forward action. """ self.currentBrowser().forward() def __home(self): """ Private slot called to handle the home action. """ self.currentBrowser().home() def __reload(self): """ Private slot called to handle the reload action. """ self.currentBrowser().reload() def __stopLoading(self): """ Private slot called to handle loading of the current page. """ self.currentBrowser().stop() def __zoomIn(self): """ Private slot called to handle the zoom in action. """ self.currentBrowser().zoomIn() def __zoomOut(self): """ Private slot called to handle the zoom out action. """ self.currentBrowser().zoomOut() def __zoomReset(self): """ Private slot called to handle the zoom reset action. """ self.currentBrowser().zoomReset() def __zoomTextOnly(self, textOnly): """ Private slot called to handle the zoom text only action. @param textOnly flag indicating to zoom text only (boolean) """ QWebSettings.globalSettings().setAttribute(QWebSettings.ZoomTextOnly, textOnly) self.emit(SIGNAL("zoomTextOnlyChanged(bool)"), textOnly) def __viewFullScreen(self,): """ Private slot called to toggle fullscreen mode. """ if self.__isFullScreen(): # switch back to normal self.setWindowState(self.windowState() & ~Qt.WindowFullScreen) self.menuBar().show() self.fullScreenAct.setIcon(UI.PixmapCache.getIcon("windowFullscreen.png")) self.fullScreenAct.setIconText(self.trUtf8('Full Screen')) else: # switch to full screen self.setWindowState(self.windowState() | Qt.WindowFullScreen) self.menuBar().hide() self.fullScreenAct.setIcon(UI.PixmapCache.getIcon("windowRestore.png")) self.fullScreenAct.setIconText(self.trUtf8('Restore Window')) def __isFullScreen(self): """ Private method to determine, if the window is in full screen mode. @return flag indicating full screen mode (boolean) """ return self.windowState() & Qt.WindowFullScreen def __copy(self): """ Private slot called to handle the copy action. """ self.currentBrowser().copy() def __close(self): """ Private slot called to handle the close action. """ browser = self.currentBrowser() self.tabWidget.removeTab(self.tabWidget.currentIndex()) del browser if self.tabWidget.count() == 0: self.newTab() else: self.__currentChanged(self.tabWidget.currentIndex()) def __closeAll(self): """ Private slot called to handle the close all action. """ for index in range(self.tabWidget.count() - 1, -1, -1): self.__closeAt(index) def __closeAt(self, index): """ Private slot to close a window based on its index. @param index index of window to close (integer) """ browser = self.tabWidget.widget(index) self.tabWidget.removeTab(index) del browser if self.tabWidget.count() == 0: self.newTab() else: self.__currentChanged(self.tabWidget.currentIndex()) def __windowCloseRequested(self): """ Private slot to handle the windowCloseRequested signal of a browser. """ page = self.sender() if page is None: return browser = page.view() if browser is None: return index = self.tabWidget.indexOf(browser) self.tabWidget.removeTab(index) del browser if self.tabWidget.count() == 0: self.newTab() else: self.__currentChanged(self.tabWidget.currentIndex()) def __privateBrowsing(self): """ Private slot to switch private browsing. """ settings = QWebSettings.globalSettings() pb = settings.testAttribute(QWebSettings.PrivateBrowsingEnabled) if not pb: txt = self.trUtf8("""Are you sure you want to turn on private""" """ browsing?

    When private browsing is turned on,""" """ web pages are not added to the history, searches""" """ are not added to the list of recent searches and""" """ web site icons and cookies are not stored.""" """ Until you close the window, you can still click""" """ the Back and Forward buttons to return to the""" """ web pages you have opened.

    """) res = KQMessageBox.question(self, "", txt, QMessageBox.StandardButtons(\ QMessageBox.Cancel | \ QMessageBox.Ok), QMessageBox.Ok) if res == QMessageBox.Ok: settings.setAttribute(QWebSettings.PrivateBrowsingEnabled, True) self.pathCombo.setInsertPolicy(QComboBox.NoInsert) self.privacyLabel.setPixmap( UI.PixmapCache.getPixmap("privateBrowsing.png")) self.__setIconDatabasePath(False) else: settings.setAttribute(QWebSettings.PrivateBrowsingEnabled, False) self.pathCombo.setInsertPolicy(QComboBox.InsertAtTop) self.privacyLabel.setPixmap(QPixmap()) self.__setIconDatabasePath(True) def currentBrowser(self): """ Public method to get a reference to the current help browser. @return reference to the current help browser (HelpBrowser) """ return self.tabWidget.currentWidget() def browsers(self): """ Public method to get a list of references to all help browsers. @return list of references to help browsers (list of HelpBrowser) """ l = [] for index in range(self.tabWidget.count()): l.append(self.tabWidget.widget(index)) return l def newBrowser(self, link): """ Public method to create a new help browser tab. @param link link to be shown (string or QString) """ browser = HelpBrowser(self) self.connect(browser, SIGNAL('sourceChanged(const QUrl &)'), self.__sourceChanged) self.connect(browser, SIGNAL("titleChanged(const QString&)"), self.__titleChanged) index = self.tabWidget.addTab(browser, self.trUtf8("...")) self.tabWidget.setCurrentIndex(index) link = QString(link) if link.isEmpty() and Preferences.getHelp("StartupBehavior") == 0: link = Preferences.getHelp("HomePage") if not link.isEmpty(): browser.setSource(QUrl(link)) if browser.documentTitle().isNull(): self.tabWidget.setTabText(index, self.__elide(link, Qt.ElideMiddle)) self.tabWidget.setTabToolTip(index, link) else: self.tabWidget.setTabText(index, self.__elide(browser.documentTitle().replace("&", "&&"))) self.tabWidget.setTabToolTip(index, browser.documentTitle()) self.connect(browser, SIGNAL('highlighted(const QString&)'), self.statusBar(), SLOT('showMessage(const QString&)')) self.connect(browser, SIGNAL('backwardAvailable(bool)'), self.__setBackwardAvailable) self.connect(browser, SIGNAL('forwardAvailable(bool)'), self.__setForwardAvailable) self.connect(browser.page(), SIGNAL('windowCloseRequested()'), self.__windowCloseRequested) self.connect(browser.page(), SIGNAL('printRequested(QWebFrame*)'), self.__printRequested) self.connect(browser, SIGNAL("search(const QUrl &)"), self.newTab) self.closeAct.setEnabled(True) self.closeAllAct.setEnabled(True) self.closeButton and self.closeButton.setEnabled(True) self.navigationButton.setEnabled(True) def __currentChanged(self, index): """ Private slot to handle the currentChanged signal. @param index index of the current tab """ if index > -1: cb = self.currentBrowser() if cb is not None: self.__setForwardAvailable(cb.isForwardAvailable()) self.__setBackwardAvailable(cb.isBackwardAvailable()) self.__setLoadingActions(cb.isLoading()) url = cb.source().toString() index2 = self.pathCombo.findText(url) if index2 > -1: self.pathCombo.setCurrentIndex(index2) else: self.pathCombo.clearEditText() self.__setPathComboBackground() self.printAct.setEnabled(hasattr(cb, 'print_')) if self.printPreviewAct: self.printPreviewAct.setEnabled(hasattr(cb, 'print_')) self.iconChanged(cb.icon()) def __showContextMenu(self, coord, index): """ Private slot to show the tab context menu. @param coord the position of the mouse pointer (QPoint) @param index index of the tab the menu is requested for (integer) """ self.tabContextMenuIndex = index self.leftMenuAct.setEnabled(index > 0) self.rightMenuAct.setEnabled(index < self.tabWidget.count() - 1) self.tabContextCloseOthersAct.setEnabled(self.tabWidget.count() > 1) coord = self.tabWidget.mapToGlobal(coord) self.__tabContextMenu.popup(coord) def __tabContextMenuMoveLeft(self): """ Private method to move a tab one position to the left. """ self.tabWidget.moveTab(self.tabContextMenuIndex, self.tabContextMenuIndex - 1) def __tabContextMenuMoveRight(self): """ Private method to move a tab one position to the right. """ self.tabWidget.moveTab(self.tabContextMenuIndex, self.tabContextMenuIndex + 1) def __tabContextMenuClone(self): """ Private method to clone the selected tab. """ idx = self.tabContextMenuIndex if idx < 0: idx = self.tabWidget.currentIndex() if idx < 0 or idx > self.tabWidget.count(): return self.newTab(self.tabWidget.widget(idx).url()) def __tabContextMenuClose(self): """ Private method to close the selected tab. """ self.__closeAt(self.tabContextMenuIndex) def __tabContextMenuCloseOthers(self): """ Private slot to close all other tabs. """ index = self.tabContextMenuIndex for i in range(self.tabWidget.count() - 1, index, -1) + range(index - 1, -1, -1): self.__closeAt(i) def __tabContextMenuPrint(self): """ Private method to print the selected tab. """ browser = self.tabWidget.widget(self.tabContextMenuIndex) self.__printFile(browser) def __tabContextMenuPrintPreview(self): """ Private method to show a print preview of the selected tab. """ browser = self.tabWidget.widget(self.tabContextMenuIndex) self.__printPreviewFile(browser) def __showPreferences(self): """ Private slot to set the preferences. """ dlg = ConfigurationDialog(self, 'Configuration', True, fromEric = self.fromEric, displayMode = ConfigurationDialog.HelpBrowserMode) self.connect(dlg, SIGNAL('preferencesChanged'), self.preferencesChanged) dlg.show() dlg.showConfigurationPageByName("empty") dlg.exec_() QApplication.processEvents() if dlg.result() == QDialog.Accepted: dlg.setPreferences() Preferences.syncPreferences() self.preferencesChanged() def preferencesChanged(self): """ Public slot to handle a change of preferences. """ self.__setPathComboBackground() self.__initWebSettings() self.networkAccessManager().preferencesChanged() self.historyManager().preferencesChanged() for index in range(self.tabWidget.count()): self.tabWidget.widget(index).preferencesChanged() self.searchEdit.preferencesChanged() def __showAcceptedLanguages(self): """ Private slot to configure the accepted languages for web pages. """ dlg = HelpLanguagesDialog(self) dlg.exec_() self.networkAccessManager().languagesChanged() def __showCookiesConfiguration(self): """ Private slot to configure the cookies handling. """ dlg = CookiesConfigurationDialog(self) dlg.exec_() def setLoading(self, widget): """ Public method to set the loading icon. @param widget reference to the widget to set the icon for (QWidget) """ index = self.tabWidget.indexOf(widget) anim = self.tabWidget.animationLabel( index, os.path.join(getConfig("ericPixDir"), "loading.gif")) if not anim: loading = QIcon(os.path.join(getConfig("ericPixDir"), "loading.gif")) self.tabWidget.setTabIcon(index, loading) self.statusBar().showMessage(self.trUtf8("Loading...")) self.__setLoadingActions(True) def resetLoading(self, widget, ok): """ Public method to reset the loading icon. @param widget reference to the widget to reset the icon for (QWidget) @param ok flag indicating the result (boolean) """ index = self.tabWidget.indexOf(widget) self.tabWidget.resetAnimation(index) self.tabWidget.setTabIcon(index, widget.icon()) if ok: self.statusBar().showMessage(self.trUtf8("Finished loading")) else: self.statusBar().showMessage(self.trUtf8("Failed to load")) self.__setLoadingActions(False) ############################################################################ ## Methods to support Webkit based browser below. ############################################################################ def progressBar(self): """ Public method to get a reference to the load progress bar. @return reference to the load progress bar (QProgressBar) """ if self.__progressBar is None: self.__progressBar = QProgressBar() self.statusBar().addPermanentWidget(self.__progressBar) self.__progressBar.setMaximumWidth(100) self.__progressBar.setFixedHeight(16) self.__progressBar.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed) self.__progressBar.hide() return self.__progressBar @classmethod def helpEngine(cls): """ Class method to get a reference to the help engine. @return reference to the help engine (QHelpEngine) """ if cls._helpEngine is None: cls._helpEngine = \ QHelpEngine(os.path.join(Utilities.getConfigDir(), "browser", "eric4help.qhc")) return cls._helpEngine @classmethod def networkAccessManager(cls): """ Class method to get a reference to the network access manager. @return reference to the network access manager (NetworkAccessManager) """ if cls._networkAccessManager is None: cls._networkAccessManager = \ NetworkAccessManager(cls.helpEngine()) cls._cookieJar = CookieJar() cls._networkAccessManager.setCookieJar(cls._cookieJar) return cls._networkAccessManager @classmethod def cookieJar(cls): """ Class method to get a reference to the cookie jar. @return reference to the cookie jar (CookieJar) """ return cls.networkAccessManager().cookieJar() def iconChanged(self, icon): """ Public slot to change the icon shown to the left of the URL entry. @param icon icon to be shown (QIcon) """ self.tabWidget.setTabIcon(self.tabWidget.currentIndex(), icon) self.iconLabel.setPixmap(icon.pixmap(16, 16)) def __clearIconsDatabase(self): """ Private slot to clear the icons databse. """ QWebSettings.clearIconDatabase() @pyqtSignature("QUrl") def __linkActivated(self, url): """ Private slot to handle the selection of a link in the TOC window. @param url URL to be shown (QUrl) """ self.currentBrowser().setSource(url) def __linksActivated(self, links, keyword): """ Private slot to select a topic to be shown. @param links dictionary with help topic as key (QString) and URL as value (QUrl) @param keyword keyword for the link set (QString) """ dlg = HelpTopicDialog(self, keyword, links) if dlg.exec_() == QDialog.Accepted: self.currentBrowser().setSource(dlg.link()) def __activateCurrentBrowser(self): """ Private slot to activate the current browser. """ self.currentBrowser().setFocus() def __syncTOC(self): """ Private slot to synchronize the TOC with the currently shown page. """ QApplication.setOverrideCursor(Qt.WaitCursor) url = self.currentBrowser().source() self.__showTocWindow() if not self.__tocWindow.syncToContent(url): self.statusBar().showMessage( self.trUtf8("Could not find an associated content."), 5000) QApplication.restoreOverrideCursor() def __showTocWindow(self): """ Private method to show the table of contents window. """ self.__activateDock(self.__tocWindow) def __hideTocWindow(self): """ Private method to hide the table of contents window. """ self.__tocDock.hide() def __showIndexWindow(self): """ Private method to show the index window. """ self.__activateDock(self.__indexWindow) def __hideIndexWindow(self): """ Private method to hide the index window. """ self.__indexDock.hide() def __showSearchWindow(self): """ Private method to show the search window. """ self.__activateDock(self.__searchWindow) def __hideSearchWindow(self): """ Private method to hide the search window. """ self.__searchDock.hide() def __activateDock(self, widget): """ Private method to activate the dock widget of the given widget. @param widget reference to the widget to be activated (QWidget) """ widget.parent().show() widget.parent().raise_() widget.setFocus() def __setupFilterCombo(self): """ Private slot to setup the filter combo box. """ curFilter = self.filterCombo.currentText() if curFilter.isEmpty(): curFilter = self.__helpEngine.currentFilter() self.filterCombo.clear() self.filterCombo.addItems(self.__helpEngine.customFilters()) idx = self.filterCombo.findText(curFilter) if idx < 0: idx = 0 self.filterCombo.setCurrentIndex(idx) def __filterQtHelpDocumentation(self, customFilter): """ Private slot to filter the QtHelp documentation. @param customFilter name of filter to be applied (QString) """ self.__helpEngine.setCurrentFilter(customFilter) def __manageQtHelpDocumentation(self): """ Private slot to manage the QtHelp documentation database. """ dlg = QtHelpDocumentationDialog(self.__helpEngine, self) dlg.exec_() if dlg.hasChanges(): for i in sorted(dlg.getTabsToClose(), reverse = True): self.__closeAt(i) self.__helpEngine.setupData() def getSourceFileList(self): """ Public method to get a list of all opened source files. @return dictionary with tab id as key and host/namespace as value """ sourceList = {} for i in range(self.tabWidget.count()): viewer = self.tabWidget.widget(i) if viewer is not None and \ viewer.source().isValid(): sourceList[i] = viewer.source().host() return sourceList def __manageQtHelpFilters(self): """ Private slot to manage the QtHelp filters. """ dlg = QtHelpFiltersDialog(self.__helpEngine, self) dlg.exec_() def __indexingStarted(self): """ Private slot to handle the start of the indexing process. """ self.__indexing = True if self.__indexingProgress is None: self.__indexingProgress = QWidget() layout = QHBoxLayout(self.__indexingProgress) layout.setMargin(0) sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Maximum) label = QLabel(self.trUtf8("Updating search index")) label.setSizePolicy(sizePolicy) layout.addWidget(label) progressBar = QProgressBar() progressBar.setRange(0, 0) progressBar.setTextVisible(False) progressBar.setFixedHeight(16) progressBar.setSizePolicy(sizePolicy) layout.addWidget(progressBar) self.statusBar().addPermanentWidget(self.__indexingProgress) def __indexingFinished(self): """ Private slot to handle the start of the indexing process. """ self.statusBar().removeWidget(self.__indexingProgress) self.__indexingProgress = None self.__indexing = False if self.__searchWord is not None: self.__searchForWord() def __searchForWord(self): """ Private slot to search for a word. """ if not self.__indexing and self.__searchWord is not None: self.__searchDock.show() self.__searchDock.raise_() query = QHelpSearchQuery(QHelpSearchQuery.DEFAULT, [self.__searchWord]) self.__searchEngine.search([query]) self.__searchWord = None def search(self, word): """ Public method to search for a word. @param word word to search for (string or QString) """ self.__searchWord = word self.__searchForWord() def __lookForNewDocumentation(self): """ Private slot to look for new documentation to be loaded into the help database. """ self.__helpInstaller = HelpDocsInstaller(self.__helpEngine.collectionFile()) self.connect(self.__helpInstaller, SIGNAL("errorMessage(const QString&)"), self.__showInstallationError) self.connect(self.__helpInstaller, SIGNAL("docsInstalled(bool)"), self.__docsInstalled) self.statusBar().showMessage(self.trUtf8("Looking for Documentation...")) self.__helpInstaller.installDocs() def __showInstallationError(self, message): """ Private slot to show installation errors. @param message message to be shown (QString) """ KQMessageBox.warning(self, self.trUtf8("eric4 Web Browser"), message) def __docsInstalled(self, installed): """ Private slot handling the end of documentation installation. @param installed flag indicating that documents were installed (boolean) """ if installed: self.__helpEngine.setupData() self.statusBar().clearMessage() def __initHelpDb(self): """ Private slot to initialize the documentation database. """ if not self.__helpEngine.setupData(): return unfiltered = self.trUtf8("Unfiltered") if unfiltered not in self.__helpEngine.customFilters(): hc = QHelpEngineCore(self.__helpEngine.collectionFile()) hc.setupData() hc.addCustomFilter(unfiltered, QStringList()) hc = None del hc self.__helpEngine.blockSignals(True) self.__helpEngine.setCurrentFilter(unfiltered) self.__helpEngine.blockSignals(False) self.__helpEngine.setupData() def __warning(self, msg): """ Private slot handling warnings from the help engine. @param msg message sent by the help engine (QString) """ KQMessageBox.warning(self, self.trUtf8("Help Engine"), msg) def __showNavigationMenu(self): """ Private slot to show the navigation button menu. """ self.__navigationMenu.clear() for index in range(self.tabWidget.count()): act = self.__navigationMenu.addAction(self.tabWidget.tabIcon(index), self.tabWidget.tabText(index)) act.setData(QVariant(index)) def __navigationMenuTriggered(self, act): """ Private slot called to handle the navigation button menu selection. @param act reference to the selected action (QAction) """ index, ok = act.data().toInt() if ok: self.tabWidget.setCurrentIndex(index) def __showBackMenu(self): """ Private slot showing the backwards navigation menu. """ self.backMenu.clear() history = self.currentBrowser().history() historyCount = history.count() backItems = history.backItems(historyCount) for index in range(len(backItems) - 1, -1, -1): item = backItems[index] act = QAction(self) act.setData(QVariant(-1 * (index + 1))) icon = HelpWindow.__getWebIcon(item.url()) act.setIcon(icon) act.setText(item.title()) self.backMenu.addAction(act) def __showForwardMenu(self): """ Private slot showing the forwards navigation menu. """ self.forwardMenu.clear() history = self.currentBrowser().history() historyCount = history.count() forwardItems = history.forwardItems(historyCount) for index in range(len(forwardItems)): item = forwardItems[index] act = QAction(self) act.setData(QVariant(index + 1)) icon = HelpWindow.__getWebIcon(item.url()) act.setIcon(icon) act.setText(item.title()) self.forwardMenu.addAction(act) def __navigationMenuActionTriggered(self, act): """ Private slot to go to the selected page. @param act reference to the action selected in the navigation menu (QAction) """ offset = act.data().toInt()[0] history = self.currentBrowser().history() historyCount = history.count() if offset < 0: # go back history.goToItem(history.backItems(historyCount)[-1 * offset - 1]) else: # go forward history.goToItem(history.forwardItems(historyCount)[offset - 1]) def __clearPrivateData(self): """ Private slot to clear the private data. """ dlg = HelpClearPrivateDataDialog(self) if dlg.exec_() == QDialog.Accepted: history, searches, favicons, cache, cookies, passwords = dlg.getData() # browsing history, search history, favicons, disk cache, cookies, passwords if history: self.historyManager().clear() if searches: self.searchEdit.clear() if favicons: self.__clearIconsDatabase() if cache: try: self.networkAccessManager().cache().clear() except AttributeError: pass if cookies: self.cookieJar().clear() if passwords: self.passwordManager().clear() def __showEnginesConfigurationDialog(self): """ Private slot to show the search engines configuration dialog. """ from OpenSearch.OpenSearchDialog import OpenSearchDialog dlg = OpenSearchDialog(self) dlg.exec_() def searchEnginesAction(self): """ Public method to get a reference to the search engines configuration action. @return reference to the search engines configuration action (QAction) """ return self.searchEnginesAct def __showPasswordsDialog(self): """ Private slot to show the passwords management dialog. """ from Passwords.PasswordsDialog import PasswordsDialog dlg = PasswordsDialog(self) dlg.exec_() def __showAdBlockDialog(self): """ Private slot to show the AdBlock configuration dialog. """ self.adblockManager().showDialog() def __showNetworkMonitor(self): """ Private slot to show the network monitor dialog. """ monitor = E4NetworkMonitor.instance(self.networkAccessManager()) monitor.show() def __closeNetworkMonitor(self): """ Private slot to close the network monitor dialog. """ E4NetworkMonitor.closeMonitor() def __showPageSource(self): """ Private slot to show the source of the current page in an editor. """ from QScintilla.MiniEditor import MiniEditor src = self.currentBrowser().page().mainFrame().toHtml() editor = MiniEditor(parent = self) editor.setText(src, "Html") editor.setLanguage("dummy.html") editor.show() @classmethod def icon(cls, url): """ Class method to get the icon for an URL. @param url URL to get icon for (QUrl) @return icon for the URL (QIcon) """ icon = HelpWindow.__getWebIcon(url) if icon.isNull(): pixmap = QWebSettings.webGraphic(QWebSettings.DefaultFrameIconGraphic) if pixmap.isNull(): pixmap = UI.PixmapCache.getPixmap("defaultIcon.png") QWebSettings.setWebGraphic(QWebSettings.DefaultFrameIconGraphic, pixmap) return QIcon(pixmap) return icon @staticmethod def __getWebIcon(url): """ Private static method to fetch the icon for a URL. @param url URL to get icon for (QUrl) @return icon for the URL (QIcon) """ icon = QWebSettings.iconForUrl(url) if icon.isNull(): # try again QThread.usleep(10) icon = QWebSettings.iconForUrl(url) if not icon.isNull(): icon = QIcon(icon.pixmap(22, 22)) return icon @classmethod def bookmarksManager(cls): """ Class method to get a reference to the bookmarks manager. @return reference to the bookmarks manager (BookmarksManager) """ if cls._bookmarksManager is None: cls._bookmarksManager = BookmarksManager() return cls._bookmarksManager def __openUrl(self, url, title): """ Private slot to load a URL from the bookmarks menu or bookmarks toolbar in the current tab. @param url url to be opened (QUrl) @param title title of the bookmark (QString) """ self.__linkActivated(url) def __openUrlNewTab(self, url, title): """ Private slot to load a URL from the bookmarks menu or bookmarks toolbar in a new tab. @param url url to be opened (QUrl) @param title title of the bookmark (QString) """ self.newTab(url) @classmethod def historyManager(cls): """ Class method to get a reference to the history manager. @return reference to the history manager (HistoryManager) """ if cls._historyManager is None: cls._historyManager = HistoryManager() return cls._historyManager @classmethod def passwordManager(cls): """ Class method to get a reference to the password manager. @return reference to the password manager (PasswordManager) """ if cls._passwordManager is None: cls._passwordManager = PasswordManager() return cls._passwordManager @classmethod def adblockManager(cls): """ Class method to get a reference to the AdBlock manager. @return reference to the AdBlock manager (AdBlockManager) """ if cls._adblockManager is None: cls._adblockManager = AdBlockManager() return cls._adblockManager def openSearchManager(self): """ Public method to get a reference to the opensearch manager object. @return reference to the opensearch manager object (OpenSearchManager) """ return self.searchEdit.openSearchManager() def mousePressEvent(self, evt): """ Protected method called by a mouse press event. @param evt reference to the mouse event (QMouseEvent) """ if evt.button() == Qt.XButton1: self.currentBrowser().pageAction(QWebPage.Back).trigger() elif evt.button() == Qt.XButton2: self.currentBrowser().pageAction(QWebPage.Forward).trigger() else: KQMainWindow.mousePressEvent(self, evt) eric4-4.5.18/eric/Helpviewer/PaxHeaders.8617/Network0000644000175000001440000000013112261012661020173 xustar000000000000000030 mtime=1388582321.133192088 29 atime=1389081086.01472434 30 ctime=1389081086.315724332 eric4-4.5.18/eric/Helpviewer/Network/0000755000175000001440000000000012261012661020003 5ustar00detlevusers00000000000000eric4-4.5.18/eric/Helpviewer/Network/PaxHeaders.8617/NetworkReply.py0000644000175000001440000000013212261012651023267 xustar000000000000000030 mtime=1388582313.675098316 30 atime=1389081084.524724373 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/Network/NetworkReply.py0000644000175000001440000000427512261012651023031 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a network reply object for special data. """ from PyQt4.QtCore import * from PyQt4.QtNetwork import QNetworkReply, QNetworkRequest class NetworkReply(QNetworkReply): """ Class implementing a QNetworkReply subclass for special data. """ def __init__(self, request, fileData, mimeType, parent = None): """ Constructor @param request reference to the request object (QNetworkRequest) @param fileData reference to the data buffer (QByteArray) @param mimeType for the reply (string) @param parent reference to the parent object (QObject) """ QNetworkReply.__init__(self, parent) self.__data = fileData self.setRequest(request) self.setOpenMode(QIODevice.ReadOnly) self.setHeader(QNetworkRequest.ContentTypeHeader, QVariant(mimeType)) self.setHeader(QNetworkRequest.ContentLengthHeader, QVariant(QByteArray.number(fileData.length()))) QTimer.singleShot(0, self, SIGNAL("metaDataChanged()")) QTimer.singleShot(0, self, SIGNAL("readyRead()")) def abort(self): """ Public slot to abort the operation. """ # do nothing pass def bytesAvailable(self): """ Public method to determined the bytes available for being read. @return bytes available (integer) """ if self.__data.length() == 0: QTimer.singleShot(0, self, SIGNAL("finished()")) return self.__data.length() + QNetworkReply.bytesAvailable(self) def readData(self, maxlen): """ Protected method to retrieve data from the reply object. @param maxlen maximum number of bytes to read (integer) @return string containing the data (string) """ len_ = min(maxlen, self.__data.length()) buffer = str(self.__data[:len_]) self.__data.remove(0, len_) if self.__data.length() == 0: QTimer.singleShot(0, self, SIGNAL("finished()")) return buffer eric4-4.5.18/eric/Helpviewer/Network/PaxHeaders.8617/SchemeAccessHandler.py0000644000175000001440000000013212261012651024446 xustar000000000000000030 mtime=1388582313.677098342 30 atime=1389081084.524724373 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/Network/SchemeAccessHandler.py0000644000175000001440000000203012261012651024173 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing the base class for specific scheme access handlers. """ from PyQt4.QtCore import QObject class SchemeAccessHandler(QObject): """ Clase implementing the base class for specific scheme access handlers. """ def __init__(self, parent = None): """ Constructor @param parent reference to the parent object (QObject) """ QObject.__init__(self, parent) def createRequest(self, op, request, outgoingData = None): """ Protected method to create a request. @param op the operation to be performed (QNetworkAccessManager.Operation) @param request reference to the request object (QNetworkRequest) @param outgoingData reference to an IODevice containing data to be sent (QIODevice) @return reference to the created reply object (QNetworkReply) """ raise NotImplementedError() eric4-4.5.18/eric/Helpviewer/Network/PaxHeaders.8617/NetworkDiskCache.py0000644000175000001440000000013212261012651024012 xustar000000000000000030 mtime=1388582313.680098381 30 atime=1389081084.525724373 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/Network/NetworkDiskCache.py0000644000175000001440000000165112261012651023547 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a disk cache respecting privacy. """ from PyQt4.QtWebKit import QWebSettings try: from PyQt4.QtNetwork import QNetworkDiskCache class NetworkDiskCache(QNetworkDiskCache): """ Class implementing a disk cache respecting privacy. """ def prepare(self, metaData): """ Public method to prepare the disk cache file. @param metaData meta data for a URL (QNetworkCacheMetaData) @return reference to the IO device (QIODevice) """ if QWebSettings.globalSettings().testAttribute( QWebSettings.PrivateBrowsingEnabled): return None return QNetworkDiskCache.prepare(self, metaData) except ImportError: NetworkDiskCache = None eric4-4.5.18/eric/Helpviewer/Network/PaxHeaders.8617/__init__.py0000644000175000001440000000013212261012651022361 xustar000000000000000030 mtime=1388582313.682098405 30 atime=1389081084.525724373 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/Network/__init__.py0000644000175000001440000000023012261012651022106 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Package containing network related modules. """ eric4-4.5.18/eric/Helpviewer/Network/PaxHeaders.8617/NetworkProtocolUnknownErrorReply.py0000644000175000001440000000013212261012651027403 xustar000000000000000030 mtime=1388582313.684098431 30 atime=1389081084.525724373 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/Network/NetworkProtocolUnknownErrorReply.py0000644000175000001440000000274512261012651027145 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a QNetworkReply subclass reporting an unknown protocol error. """ from PyQt4.QtCore import * from PyQt4.QtNetwork import QNetworkReply, QNetworkRequest class NetworkProtocolUnknownErrorReply(QNetworkReply): """ Class implementing a QNetworkReply subclass reporting an unknown protocol error. """ def __init__(self, protocol, parent = None): """ Constructor @param protocol protocol name (string or QString) @param parent reference to the parent object (QObject) """ QNetworkReply.__init__(self, parent) self.setError(QNetworkReply.ProtocolUnknownError, self.trUtf8("Protocol '%1' not supported.").arg(protocol)) QTimer.singleShot(0, self.__fireSignals) def __fireSignals(self): """ Private method to send some signals to end the connection. """ self.emit(SIGNAL("error(QNetworkReply::NetworkError)"), QNetworkReply.ProtocolUnknownError) self.emit(SIGNAL("finished()")) def abort(self): """ Public slot to abort the operation. """ # do nothing pass def bytesAvailable(self): """ Public method to determined the bytes available for being read. @return bytes available (integer) """ return 0 eric4-4.5.18/eric/Helpviewer/Network/PaxHeaders.8617/EmptyNetworkReply.py0000644000175000001440000000013212261012651024306 xustar000000000000000030 mtime=1388582313.686098457 30 atime=1389081084.525724373 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/Network/EmptyNetworkReply.py0000644000175000001440000000231612261012651024042 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2012 - 2014 Detlev Offenbach # """ Module implementing a network reply class for an empty reply (i.e. request was handle other way). """ from PyQt4.QtCore import QTimer, SIGNAL from PyQt4.QtNetwork import QNetworkReply, QNetworkAccessManager class EmptyNetworkReply(QNetworkReply): """ Class implementing an empty network reply. """ def __init__(self, parent=None): """ Constructor @param parent reference to the parent object (QObject) """ QNetworkReply.__init__(self, parent) self.setOperation(QNetworkAccessManager.GetOperation) self.setError(QNetworkReply.OperationCanceledError, "eric4:No Error") QTimer.singleShot(0, self, SIGNAL("finished()")) def abort(self): """ Public slot to abort the operation. """ # do nothing pass def readData(self, maxlen): """ Protected method to retrieve data from the reply object. @param maxlen maximum number of bytes to read (integer) @return string containing the data (string) """ return str() eric4-4.5.18/eric/Helpviewer/Network/PaxHeaders.8617/AboutAccessHandler.py0000644000175000001440000000013212261012651024314 xustar000000000000000030 mtime=1388582313.689098495 30 atime=1389081084.525724373 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/Network/AboutAccessHandler.py0000644000175000001440000000172012261012651024046 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a scheme access handler for about schemes. """ from SchemeAccessHandler import SchemeAccessHandler from NetworkProtocolUnknownErrorReply import NetworkProtocolUnknownErrorReply class AboutAccessHandler(SchemeAccessHandler): """ Class implementing a scheme access handler for about schemes. """ def createRequest(self, op, request, outgoingData = None): """ Protected method to create a request. @param op the operation to be performed (QNetworkAccessManager.Operation) @param request reference to the request object (QNetworkRequest) @param outgoingData reference to an IODevice containing data to be sent (QIODevice) @return reference to the created reply object (QNetworkReply) """ return NetworkProtocolUnknownErrorReply("about", self.parent()) eric4-4.5.18/eric/Helpviewer/Network/PaxHeaders.8617/NetworkAccessManagerProxy.py0000644000175000001440000000013112261012651025731 xustar000000000000000029 mtime=1388582313.69109852 30 atime=1389081084.525724373 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/Network/NetworkAccessManagerProxy.py0000644000175000001440000000651512261012651025473 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a network access manager proxy for web pages. """ from PyQt4.QtCore import SIGNAL from PyQt4.QtNetwork import QNetworkAccessManager, QNetworkRequest try: from PyQt4.QtNetwork import QSslError SSL_AVAILABLE = True except ImportError: SSL_AVAILABLE = False class NetworkAccessManagerProxy(QNetworkAccessManager): """ Class implementing a network access manager proxy for web pages. """ primaryManager = None def __init__(self, parent = None): """ Constructor @param parent reference to the parent object (QObject) """ QNetworkAccessManager.__init__(self, parent) self.__webPage = None def setWebPage(self, page): """ Public method to set the reference to a web page. @param page reference to the web page object (HelpWebPage) """ assert page is not None self.__webPage = page def setPrimaryNetworkAccessManager(self, manager): """ Public method to set the primary network access manager. @param manager reference to the network access manager object (QNetworkAccessManager) """ assert manager is not None if self.__class__.primaryManager is None: self.__class__.primaryManager = manager self.setCookieJar(self.__class__.primaryManager.cookieJar()) # do not steal ownership self.cookieJar().setParent(self.__class__.primaryManager) if SSL_AVAILABLE: self.connect(self, SIGNAL('sslErrors(QNetworkReply *, const QList &)'), self.__class__.primaryManager, SIGNAL('sslErrors(QNetworkReply *, const QList &)')) self.connect(self, SIGNAL('proxyAuthenticationRequired(const QNetworkProxy &, QAuthenticator *)'), self.__class__.primaryManager, SIGNAL('proxyAuthenticationRequired(const QNetworkProxy &, QAuthenticator *)')) self.connect(self, SIGNAL('authenticationRequired(QNetworkReply *, QAuthenticator *)'), self.__class__.primaryManager, SIGNAL('authenticationRequired(QNetworkReply *, QAuthenticator *)')) self.connect(self, SIGNAL("finished(QNetworkReply *)"), self.__class__.primaryManager, SIGNAL("finished(QNetworkReply *)")) def createRequest(self, op, request, outgoingData = None): """ Protected method to create a request. @param op the operation to be performed (QNetworkAccessManager.Operation) @param request reference to the request object (QNetworkRequest) @param outgoingData reference to an IODevice containing data to be sent (QIODevice) @return reference to the created reply object (QNetworkReply) """ if self.primaryManager is not None and \ self.__webPage is not None: pageRequest = QNetworkRequest(request) self.__webPage.populateNetworkRequest(pageRequest) return self.primaryManager.createRequest(op, pageRequest, outgoingData) else: return QNetworkAccessManager.createRequest(self, op, request, outgoingData) eric4-4.5.18/eric/Helpviewer/Network/PaxHeaders.8617/PyrcAccessHandler.py0000644000175000001440000000013212261012651024157 xustar000000000000000030 mtime=1388582313.693098545 30 atime=1389081084.525724373 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/Network/PyrcAccessHandler.py0000644000175000001440000000316312261012651023714 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a scheme access handler for Python resources. """ from PyQt4.QtCore import QBuffer, QIODevice, QString from Helpviewer.HTMLResources import startPage_html from SchemeAccessHandler import SchemeAccessHandler from NetworkReply import NetworkReply from NetworkProtocolUnknownErrorReply import NetworkProtocolUnknownErrorReply import UI.PixmapCache class PyrcAccessHandler(SchemeAccessHandler): """ Class implementing a scheme access handler for Python resources. """ def createRequest(self, op, request, outgoingData = None): """ Protected method to create a request. @param op the operation to be performed (QNetworkAccessManager.Operation) @param request reference to the request object (QNetworkRequest) @param outgoingData reference to an IODevice containing data to be sent (QIODevice) @return reference to the created reply object (QNetworkReply) """ if request.url().toString() == "pyrc:home": html = startPage_html pixmap = UI.PixmapCache.getPixmap("ericWeb32.png") imageBuffer = QBuffer() imageBuffer.open(QIODevice.ReadWrite) if pixmap.save(imageBuffer, "PNG"): html.replace("IMAGE_BINARY_DATA_HERE", QString(imageBuffer.buffer().toBase64())) return NetworkReply(request, html.toUtf8(), "text/html", self.parent()) return NetworkProtocolUnknownErrorReply("pyrc", self.parent()) eric4-4.5.18/eric/Helpviewer/Network/PaxHeaders.8617/NetworkAccessManager.py0000644000175000001440000000013112261012651024667 xustar000000000000000029 mtime=1388582313.69509857 30 atime=1389081084.525724373 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/Network/NetworkAccessManager.py0000644000175000001440000003320112261012651024421 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a QNetworkAccessManager subclass. """ import os from PyQt4.QtCore import * from PyQt4.QtGui import QDialog, QMessageBox from PyQt4.QtNetwork import QNetworkAccessManager, QNetworkRequest try: from PyQt4.QtNetwork import QSslCertificate, QSslConfiguration, QSslSocket, QSsl SSL_AVAILABLE = True except ImportError: SSL_AVAILABLE = False from KdeQt import KQMessageBox from E4Network.E4NetworkProxyFactory import E4NetworkProxyFactory from UI.AuthenticationDialog import AuthenticationDialog from Helpviewer.HelpLanguagesDialog import HelpLanguagesDialog import Helpviewer.HelpWindow from NetworkProtocolUnknownErrorReply import NetworkProtocolUnknownErrorReply from NetworkDiskCache import NetworkDiskCache from QtHelpAccessHandler import QtHelpAccessHandler from PyrcAccessHandler import PyrcAccessHandler from AboutAccessHandler import AboutAccessHandler from Helpviewer.AdBlock.AdBlockAccessHandler import AdBlockAccessHandler import Preferences import Utilities class NetworkAccessManager(QNetworkAccessManager): """ Class implementing a QNetworkAccessManager subclass. @signal requestCreated(QNetworkAccessManager::Operation, const QNetworkRequest&, QNetworkReply*) emitted after the request has been created """ NoCacheHosts = [ "qt-project.org", ] def __init__(self, engine, parent = None): """ Constructor @param engine reference to the help engine (QHelpEngine) @param parent reference to the parent object (QObject) """ QNetworkAccessManager.__init__(self, parent) self.__adblockNetwork = None self.__schemeHandlers = {} # dictionary of scheme handlers self.__proxyFactory = E4NetworkProxyFactory() self.setProxyFactory(self.__proxyFactory) self.__setDiskCache() self.languagesChanged() if SSL_AVAILABLE: sslCfg = QSslConfiguration.defaultConfiguration() caList = sslCfg.caCertificates() caNew = QSslCertificate.fromData(Preferences.Prefs.settings\ .value("Help/CaCertificates").toByteArray()) for cert in caNew: caList.append(cert) sslCfg.setCaCertificates(caList) sslCfg.setProtocol(QSsl.AnyProtocol) try: sslCfg.setSslOption(QSsl.SslOptionDisableCompression, True) except AttributeError: pass QSslConfiguration.setDefaultConfiguration(sslCfg) self.connect(self, SIGNAL('sslErrors(QNetworkReply *, const QList &)'), self.__sslErrors) self.connect(self, SIGNAL('proxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*)'), self.__proxyAuthenticationRequired) self.connect(self, SIGNAL('authenticationRequired(QNetworkReply *, QAuthenticator *)'), self.__authenticationRequired) # register scheme handlers self.setSchemeHandler("qthelp", QtHelpAccessHandler(engine, self)) self.setSchemeHandler("pyrc", PyrcAccessHandler(self)) self.setSchemeHandler("about", AboutAccessHandler(self)) self.setSchemeHandler("abp", AdBlockAccessHandler(self)) def setSchemeHandler(self, scheme, handler): """ Public method to register a scheme handler. @param scheme access scheme (string or QString) @param handler reference to the scheme handler object (SchemeAccessHandler) """ self.__schemeHandlers[unicode(scheme)] = handler def createRequest(self, op, request, outgoingData = None): """ Protected method to create a request. @param op the operation to be performed (QNetworkAccessManager.Operation) @param request reference to the request object (QNetworkRequest) @param outgoingData reference to an IODevice containing data to be sent (QIODevice) @return reference to the created reply object (QNetworkReply) """ scheme = request.url().scheme() if scheme == "https" and (not SSL_AVAILABLE or not QSslSocket.supportsSsl()): return NetworkProtocolUnknownErrorReply(scheme, self) if op == QNetworkAccessManager.PostOperation and outgoingData is not None: outgoingDataByteArray = outgoingData.peek(1024 * 1024) Helpviewer.HelpWindow.HelpWindow.passwordManager().post( request, outgoingDataByteArray) reply = None if unicode(scheme) in self.__schemeHandlers: reply = self.__schemeHandlers[unicode(scheme)]\ .createRequest(op, request, outgoingData) if reply is not None: return reply if not self.__acceptLanguage.isEmpty(): req = QNetworkRequest(request) req.setRawHeader("Accept-Language", self.__acceptLanguage) else: req = request # AdBlock code if op == QNetworkAccessManager.GetOperation: if self.__adblockNetwork is None: self.__adblockNetwork = \ Helpviewer.HelpWindow.HelpWindow.adblockManager().network() reply = self.__adblockNetwork.block(req) if reply is not None: reply.setParent(self) return reply # set cache policy if op == QNetworkAccessManager.GetOperation: urlHost = req.url().host() for host in self.NoCacheHosts: if host in urlHost: req.setAttribute(QNetworkRequest.CacheLoadControlAttribute, QNetworkRequest.AlwaysNetwork) break else: req.setAttribute(QNetworkRequest.CacheLoadControlAttribute, QNetworkRequest.AlwaysNetwork) reply = QNetworkAccessManager.createRequest(self, op, req, outgoingData) self.emit(SIGNAL("requestCreated(QNetworkAccessManager::Operation, const QNetworkRequest&, QNetworkReply*)"), op, req, reply) return reply def __authenticationRequired(self, reply, auth): """ Private slot to handle an authentication request. @param reply reference to the reply object (QNetworkReply) @param auth reference to the authenticator object (QAuthenticator) """ urlRoot = QString("%1://%2")\ .arg(reply.url().scheme()).arg(reply.url().authority()) if auth.realm().isEmpty(): info = self.trUtf8("Enter username and password for '%1'")\ .arg(urlRoot) else: info = self.trUtf8("Enter username and password for '%1', realm '%2'")\ .arg(urlRoot).arg(auth.realm()) dlg = AuthenticationDialog(info, auth.user(), Preferences.getHelp("SavePasswords"), Preferences.getHelp("SavePasswords")) if Preferences.getHelp("SavePasswords"): username, password = \ Helpviewer.HelpWindow.HelpWindow.passwordManager().getLogin( reply.url(), auth.realm()) if username: dlg.setData(username, password) if dlg.exec_() == QDialog.Accepted: username, password = dlg.getData() auth.setUser(username) auth.setPassword(password) if Preferences.getHelp("SavePasswords"): Helpviewer.HelpWindow.HelpWindow.passwordManager().setLogin( reply.url(), auth.realm(), username, password) def __proxyAuthenticationRequired(self, proxy, auth): """ Private slot to handle a proxy authentication request. @param proxy reference to the proxy object (QNetworkProxy) @param auth reference to the authenticator object (QAuthenticator) """ info = self.trUtf8("Connect to proxy '%1' using:")\ .arg(Qt.escape(proxy.hostName())) dlg = AuthenticationDialog(info, proxy.user(), True) dlg.setData(proxy.user(), proxy.password()) if dlg.exec_() == QDialog.Accepted: username, password = dlg.getData() auth.setUser(username) auth.setPassword(password) if dlg.shallSave(): Preferences.setUI("ProxyUser", username) Preferences.setUI("ProxyPassword", password) proxy.setUser(username) proxy.setPassword(password) def __sslErrors(self, reply, errors): """ Private slot to handle SSL errors. @param reply reference to the reply object (QNetworkReply) @param errors list of SSL errors (list of QSslError) """ caMerge = QSslCertificate.fromData(Preferences.Prefs.settings\ .value("Help/CaCertificates").toByteArray()) caNew = [] errorStrings = QStringList() for err in errors: if err.certificate() in caMerge: continue errorStrings.append(err.errorString()) if not err.certificate().isNull(): caNew.append(err.certificate()) if errorStrings.isEmpty(): reply.ignoreSslErrors() return errorString = errorStrings.join('.
  • ') ret = KQMessageBox.warning(None, self.trUtf8("SSL Errors"), self.trUtf8("""

    SSL Errors for
    %1""" """

    • %2

    """ """

    Do you want to ignore these errors?

    """)\ .arg(reply.url().toString()).arg(errorString), QMessageBox.StandardButtons( QMessageBox.No | \ QMessageBox.Yes), QMessageBox.No) if ret == QMessageBox.Yes: if len(caNew) > 0: certinfos = QStringList() for cert in caNew: certinfos.append(self.__certToString(cert)) ret = KQMessageBox.question(None, self.trUtf8("Certificates"), self.trUtf8("""

    Certificates:
    %1
    """ """Do you want to accept all these certificates?

    """)\ .arg(certinfos.join("")), QMessageBox.StandardButtons(\ QMessageBox.No | \ QMessageBox.Yes), QMessageBox.No) if ret == QMessageBox.Yes: for cert in caNew: caMerge.append(cert) sslCfg = QSslConfiguration.defaultConfiguration() caList = sslCfg.caCertificates() for cert in caNew: caList.append(cert) sslCfg.setCaCertificates(caList) sslCfg.setProtocol(QSsl.AnyProtocol) QSslConfiguration.setDefaultConfiguration(sslCfg) reply.setSslConfiguration(sslCfg) pems = QByteArray() for cert in caMerge: pems.append(cert.toPem() + '\n') Preferences.Prefs.settings.setValue("Help/CaCertificates", QVariant(pems)) reply.ignoreSslErrors() def __certToString(self, cert): """ Private method to convert a certificate to a formatted string. @param cert certificate to convert (QSslCertificate) @return formatted string (QString) """ result = QString("

    ") result.append(self.trUtf8("Name: %1")\ .arg(cert.subjectInfo(QSslCertificate.CommonName))) result.append(self.trUtf8("
    Organization: %1")\ .arg(cert.subjectInfo(QSslCertificate.Organization))) result.append(self.trUtf8("
    Issuer: %1")\ .arg(cert.issuerInfo(QSslCertificate.CommonName))) result.append(self.trUtf8("
    Not valid before: %1
    Valid Until: %2")\ .arg(cert.effectiveDate().toString("yyyy-MM-dd"))\ .arg(cert.expiryDate().toString("yyyy-MM-dd"))) result.append("

    ") return result def preferencesChanged(self): """ Public slot to signal a change of preferences. """ self.__setDiskCache() def languagesChanged(self): """ Public slot to (re-)load the list of accepted languages. """ languages = Preferences.Prefs.settings.value( "Help/AcceptLanguages", QVariant(HelpLanguagesDialog.defaultAcceptLanguages()))\ .toStringList() self.__acceptLanguage = HelpLanguagesDialog.httpString(languages) def __setDiskCache(self): """ Private method to set the disk cache. """ if NetworkDiskCache is not None: if Preferences.getHelp("DiskCacheEnabled"): diskCache = NetworkDiskCache(self) location = os.path.join(Utilities.getConfigDir(), "browser", 'cache') size = Preferences.getHelp("DiskCacheSize") * 1024 * 1024 diskCache.setCacheDirectory(location) diskCache.setMaximumCacheSize(size) else: diskCache = None self.setCache(diskCache) eric4-4.5.18/eric/Helpviewer/Network/PaxHeaders.8617/QtHelpAccessHandler.py0000644000175000001440000000013212261012651024437 xustar000000000000000030 mtime=1388582313.698098609 30 atime=1389081084.525724373 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/Network/QtHelpAccessHandler.py0000644000175000001440000000770112261012651024176 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a scheme access handler for QtHelp. """ import mimetypes import os from PyQt4.QtCore import QString from SchemeAccessHandler import SchemeAccessHandler from NetworkReply import NetworkReply QtDocPath = "qthelp://com.trolltech." ExtensionMap = { ".bmp" : "image/bmp", ".css" : "text/css", ".gif" : "image/gif", ".html" : "text/html", ".htm" : "text/html", ".ico" : "image/x-icon", ".jpeg" : "image/jpeg", ".jpg" : "image/jpeg", ".js" : "application/x-javascript", ".mng" : "video/x-mng", ".pbm" : "image/x-portable-bitmap", ".pgm" : "image/x-portable-graymap", ".pdf" : "application/pdf", ".png" : "image/png", ".ppm" : "image/x-portable-pixmap", ".rss" : "application/rss+xml", ".svg" : "image/svg+xml", ".svgz" : "image/svg+xml", ".text" : "text/plain", ".tif" : "image/tiff", ".tiff" : "image/tiff", ".txt" : "text/plain", ".xbm" : "image/x-xbitmap", ".xml" : "text/xml", ".xpm" : "image/x-xpm", ".xsl" : "text/xsl", ".xhtml" : "application/xhtml+xml", ".wml" : "text/vnd.wap.wml", ".wmlc" : "application/vnd.wap.wmlc", } class QtHelpAccessHandler(SchemeAccessHandler): """ Class implementing a scheme access handler for QtHelp. """ def __init__(self, engine, parent = None): """ Constructor @param engine reference to the help engine (QHelpEngine) @param parent reference to the parent object (QObject) """ SchemeAccessHandler.__init__(self, parent) self.__engine = engine def __mimeFromUrl(self, url): """ Private method to guess the mime type given an URL. @param url URL to guess the mime type from (QUrl) """ path = unicode(url.path()) ext = os.path.splitext(path)[1].lower() if ext in ExtensionMap: return ExtensionMap[ext] else: return "application/octet-stream" def createRequest(self, op, request, outgoingData = None): """ Protected method to create a request. @param op the operation to be performed (QNetworkAccessManager.Operation) @param request reference to the request object (QNetworkRequest) @param outgoingData reference to an IODevice containing data to be sent (QIODevice) @return reference to the created reply object (QNetworkReply) """ url = request.url() strUrl = url.toString() # For some reason the url to load is already wrong (passed from webkit) # though the css file and the references inside should work that way. One # possible problem might be that the css is loaded at the same level as the # html, thus a path inside the css like (../images/foo.png) might cd out of # the virtual folder if not self.__engine.findFile(url).isValid(): if strUrl.startsWith(QtDocPath): newUrl = request.url() if not newUrl.path().startsWith("/qdoc/"): newUrl.setPath(QString("qdoc") + newUrl.path()) url = newUrl strUrl = url.toString() mimeType = mimetypes.guess_type(unicode(strUrl))[0] if mimeType is None: # do our own (limited) guessing mimeType = self.__mimeFromUrl(url) if self.__engine.findFile(url).isValid(): data = self.__engine.fileData(url) else: data = self.trUtf8("""Error 404...""" """


    """ """

    The page could not be found


    """ """

    '%1'

    """).arg(strUrl).toUtf8() return NetworkReply(request, data, mimeType, self.parent()) eric4-4.5.18/eric/Helpviewer/PaxHeaders.8617/QtHelpDocumentationDialog.ui0000644000175000001440000000013112070331142024221 xustar000000000000000030 mtime=1356968546.204089014 29 atime=1389081084.54272437 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/QtHelpDocumentationDialog.ui0000644000175000001440000000631012070331142023754 0ustar00detlevusers00000000000000 QtHelpDocumentationDialog 0 0 425 391 Manage QtHelp Documentation Database true Registered Documents QAbstractItemView::ExtendedSelection Press to select QtHelp documents to add to the database Add... Press to remove the selected documents from the database Remove Qt::Vertical 20 98 Qt::Horizontal QDialogButtonBox::Close documentsList addButton removeButton buttonBox buttonBox accepted() QtHelpDocumentationDialog accept() 248 254 157 274 buttonBox rejected() QtHelpDocumentationDialog reject() 316 260 286 274 eric4-4.5.18/eric/Helpviewer/PaxHeaders.8617/SearchWidget.ui0000644000175000001440000000007311235767151021547 xustar000000000000000029 atime=1389081084.54272437 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/SearchWidget.ui0000644000175000001440000000555311235767151021305 0ustar00detlevusers00000000000000 SearchWidget 0 0 718 25 Find 0 Press to close the window Find: 0 0 true QComboBox::InsertAtTop false false Press to find the previous occurrence Press to find the next occurrence Match case Wrap around Qt::Vertical 200 0 findtextCombo caseCheckBox wrapCheckBox findNextButton findPrevButton closeButton eric4-4.5.18/eric/Helpviewer/PaxHeaders.8617/HelpIndexWidget.py0000644000175000001440000000013112261012651022214 xustar000000000000000030 mtime=1388582313.702098659 29 atime=1389081084.54272437 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/HelpIndexWidget.py0000644000175000001440000001561312261012651021755 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a window for showing the QtHelp index. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from HelpTopicDialog import HelpTopicDialog class HelpIndexWidget(QWidget): """ Class implementing a window for showing the QtHelp index. @signal linkActivated(const QUrl&) emitted when an index entry is activated @signal linksActivated(links, keyword) emitted when an index entry referencing multiple targets is activated @signal escapePressed() emitted when the ESC key was pressed """ def __init__(self, engine, mainWindow, parent = None): """ Constructor @param engine reference to the help engine (QHelpEngine) @param mainWindow reference to the main window object (KQMainWindow) @param parent reference to the parent widget (QWidget) """ QWidget.__init__(self, parent) self.__engine = engine self.__mw = mainWindow self.__searchEdit = None self.__index = None self.__layout = QVBoxLayout(self) l = QLabel(self.trUtf8("&Look for:")) self.__layout.addWidget(l) self.__searchEdit = QLineEdit() l.setBuddy(self.__searchEdit) self.connect(self.__searchEdit, SIGNAL("textChanged(QString)"), self.__filterIndices) self.__searchEdit.installEventFilter(self) self.__layout.addWidget(self.__searchEdit) self.__index = self.__engine.indexWidget() self.__index.installEventFilter(self) self.connect(self.__engine.indexModel(), SIGNAL("indexCreationStarted()"), self.__disableSearchEdit) self.connect(self.__engine.indexModel(), SIGNAL("indexCreated()"), self.__enableSearchEdit) self.connect(self.__index, SIGNAL("activated(const QModelIndex&)"), self.__activated) self.connect(self.__searchEdit, SIGNAL("returnPressed()"), self.__index, SLOT("activateCurrentItem()")) self.__layout.addWidget(self.__index) self.__index.viewport().installEventFilter(self) def __activated(self, idx): """ Private slot to handle the activation of a keyword entry. @param idx index of the activated entry (QModelIndex) """ model = self.__index.model() if model is not None: keyword = model.data(idx, Qt.DisplayRole).toString() links = model.linksForKeyword(keyword) if len(links) == 1: self.emit(SIGNAL("linkActivated(const QUrl&)"), QUrl(links[links.keys()[0]])) else: self.emit(SIGNAL("linksActivated"), links, keyword) def __filterIndices(self, filter): """ Private slot to filter the indices according to the given filter. @param filter filter to be used (QString) """ if '*' in filter: self.__index.filterIndices(filter, filter) else: self.__index.filterIndices(filter) def __enableSearchEdit(self): """ Private slot to enable the search edit. """ self.__searchEdit.setEnabled(True) self.__filterIndices(self.__searchEdit.text()) def __disableSearchEdit(self): """ Private slot to enable the search edit. """ self.__searchEdit.setEnabled(False) def focusInEvent(self, evt): """ Protected method handling focus in events. @param evt reference to the focus event object (QFocusEvent) """ if evt.reason() != Qt.MouseFocusReason: self.__searchEdit.selectAll() self.__searchEdit.setFocus() def eventFilter(self, watched, event): """ Public method called to filter the event queue. @param watched the QObject being watched (QObject) @param event the event that occurred (QEvent) @return flag indicating whether the event was handled (boolean) """ if self.__searchEdit and watched == self.__searchEdit and \ event.type() == QEvent.KeyPress: idx = self.__index.currentIndex() if event.key() == Qt.Key_Up: idx = self.__index.model().index( idx.row() - 1, idx.column(), idx.parent()) if idx.isValid(): self.__index.setCurrentIndex(idx) elif event.key() == Qt.Key_Down: idx = self.__index.model().index( idx.row() + 1, idx.column(), idx.parent()) if idx.isValid(): self.__index.setCurrentIndex(idx) elif event.key() == Qt.Key_Escape: self.emit(SIGNAL("escapePressed()")) elif self.__index and watched == self.__index and \ event.type() == QEvent.ContextMenu: idx = self.__index.indexAt(event.pos()) if idx.isValid(): menu = QMenu() curTab = menu.addAction(self.trUtf8("Open Link")) newTab = menu.addAction(self.trUtf8("Open Link in New Tab")) menu.move(self.__index.mapToGlobal(event.pos())) act = menu.exec_() if act == curTab: self.__activated(idx) elif act == newTab: model = self.__index.model() if model is not None: keyword = model.data(idx, Qt.DisplayRole).toString() links = model.linksForKeyword(keyword) if len(links) == 1: self.__mw.newTab(links.values()[0]) elif len(links) > 1: dlg = HelpTopicDialog(self, keyword, links) if dlg.exec_() == QDialog.Accepted: self.__mw.newTab(dlg.link()) elif self.__index and watched == self.__index.viewport() and \ event.type() == QEvent.MouseButtonRelease: idx = self.__index.indexAt(event.pos()) if idx.isValid() and event.button() == Qt.MidButton: model = self.__index.model() if model is not None: keyword = model.data(idx, Qt.DisplayRole).toString() links = model.linksForKeyword(keyword) if len(links) == 1: self.__mw.newTab(links.values()[0]) elif len(links) > 1: dlg = HelpTopicDialog(self, keyword, links) if dlg.exec_() == QDialog.Accepted: self.__mw.newTab(dlg.link()) return QWidget.eventFilter(self, watched, event) eric4-4.5.18/eric/Helpviewer/PaxHeaders.8617/HelpBrowserWV.py0000644000175000001440000000013112261012651021701 xustar000000000000000030 mtime=1388582313.704098684 29 atime=1389081084.54272437 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/HelpBrowserWV.py0000644000175000001440000011374412261012651021446 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2008 - 2014 Detlev Offenbach # """ Module implementing the helpbrowser using QWebView. """ import os from PyQt4.QtCore import * from PyQt4.QtGui import * from PyQt4.QtWebKit import QWebView, QWebPage, QWebSettings from PyQt4.QtNetwork import QNetworkReply, QNetworkRequest import sip from KdeQt import KQMessageBox import Preferences import Utilities import UI.PixmapCache from DownloadDialog import DownloadDialog from Bookmarks.AddBookmarkDialog import AddBookmarkDialog from JavaScriptResources import fetchLinks_js from HTMLResources import notFoundPage_html import Helpviewer.HelpWindow from Network.NetworkAccessManagerProxy import NetworkAccessManagerProxy from OpenSearch.OpenSearchEngineAction import OpenSearchEngineAction ########################################################################################## class JavaScriptExternalObject(QObject): """ Class implementing an external javascript object to add search providers. """ def __init__(self, mw, parent = None): """ Constructor @param mw reference to the main window 8HelpWindow) @param parent reference to the parent object (QObject) """ QObject.__init__(self, parent) self.__mw = mw @pyqtSignature("QString") def AddSearchProvider(self, url): """ Public slot to add a search provider. @param url url of the XML file defining the search provider (QString) """ self.__mw.openSearchManager().addEngine(QUrl(url)); class LinkedResource(object): """ Class defining a data structure for linked resources. """ def __init__(self): """ Constructor """ self.rel = QString() self.type_ = QString() self.href = QString() self.title = QString() ########################################################################################## class JavaScriptEricObject(QObject): """ Class implementing an external javascript object to search via the startpage. """ # these must be in line with the strings used by the javascript part of the start page translations = [ QT_TRANSLATE_NOOP("JavaScriptEricObject", "Welcome to eric4 Web Browser!"), QT_TRANSLATE_NOOP("JavaScriptEricObject", "eric4 Web Browser"), QT_TRANSLATE_NOOP("JavaScriptEricObject", "Search!"), QT_TRANSLATE_NOOP("JavaScriptEricObject", "About eric4"), ] def __init__(self, mw, parent = None): """ Constructor @param mw reference to the main window 8HelpWindow) @param parent reference to the parent object (QObject) """ QObject.__init__(self, parent) self.__mw = mw @pyqtSignature("QString", "QString") def translate(self, trans): """ Public method to translate the given string. @param trans string to be translated (QString) @return translation (QString) """ if trans == "QT_LAYOUT_DIRECTION": # special handling to detect layout direction if qApp.isLeftToRight(): return "LTR" else: return "RTL" return self.trUtf8(trans.toUtf8()) @pyqtSignature("", "QString") def providerString(self): """ Public method to get a string for the search provider. @return string for the search provider (QString) """ return self.trUtf8("Search results provided by %1")\ .arg(self.__mw.openSearchManager().currentEngineName()) @pyqtSignature("QString", "QString") def searchUrl(self, searchStr): """ Public method to get the search URL for the given search term. @param searchStr search term (QString) @return search URL (QString) """ return QString.fromUtf8( self.__mw.openSearchManager().currentEngine()\ .searchUrl(searchStr).toEncoded()) ########################################################################################## class HelpWebPage(QWebPage): """ Class implementing an enhanced web page. """ def __init__(self, parent = None): """ Constructor @param parent parent widget of this window (QWidget) """ QWebPage.__init__(self, parent) self.__lastRequest = None self.__lastRequestType = QWebPage.NavigationTypeOther self.__proxy = NetworkAccessManagerProxy(self) self.__proxy.setWebPage(self) self.__proxy.setPrimaryNetworkAccessManager( Helpviewer.HelpWindow.HelpWindow.networkAccessManager()) self.setNetworkAccessManager(self.__proxy) def acceptNavigationRequest(self, frame, request, type_): """ Protected method to determine, if a request may be accepted. @param frame reference to the frame sending the request (QWebFrame) @param request reference to the request object (QNetworkRequest) @param type_ type of the navigation request (QWebPage.NavigationType) @return flag indicating acceptance (boolean) """ self.__lastRequest = request self.__lastRequestType = type_ scheme = request.url().scheme() if scheme in ["mailto", "ftp"]: QDesktopServices.openUrl(request.url()) return False return QWebPage.acceptNavigationRequest(self, frame, request, type_) def populateNetworkRequest(self, request): """ Public method to add data to a network request. @param request reference to the network request object (QNetworkRequest) """ try: request.setAttribute(QNetworkRequest.User + 100, QVariant(self)) request.setAttribute(QNetworkRequest.User + 101, QVariant(self.__lastRequestType)) except TypeError: pass def pageAttributeId(self): """ Public method to get the attribute id of the page attribute. @return attribute id of the page attribute (integer) """ return QNetworkRequest.User + 100 def supportsExtension(self, extension): """ Public method to check the support for an extension. @param extension extension to test for (QWebPage.Extension) @return flag indicating the support of extension (boolean) """ try: if extension == QWebPage.ErrorPageExtension: return True except AttributeError: pass return QWebPage.supportsExtension(self, extension) def extension(self, extension, option, output): """ Public method to implement a specific extension. @param extension extension to be executed (QWebPage.Extension) @param option provides input to the extension (QWebPage.ExtensionOption) @param output stores the output results (QWebPage.ExtensionReturn) @return flag indicating a successful call of the extension (boolean) """ try: if extension == QWebPage.ErrorPageExtension: info = sip.cast(option, QWebPage.ErrorPageExtensionOption) if info.error == 102: # this is something of a hack; hopefully it will work in the future return False if info.domain == QWebPage.QtNetwork and \ info.error == QNetworkReply.OperationCanceledError and \ info.errorString == "eric4:No Error": return False errorPage = sip.cast(output, QWebPage.ErrorPageExtensionReturn) html = QString(notFoundPage_html) urlString = QString.fromUtf8(info.url.toEncoded()) title = self.trUtf8("Error loading page: %1").arg(urlString) pixmap = qApp.style()\ .standardIcon(QStyle.SP_MessageBoxWarning, None, self.parent())\ .pixmap(32, 32) imageBuffer = QBuffer() imageBuffer.open(QIODevice.ReadWrite) if pixmap.save(imageBuffer, "PNG"): html = html.replace("IMAGE_BINARY_DATA_HERE", QString(imageBuffer.buffer().toBase64())) errorPage.content = html.arg( title, info.errorString, self.trUtf8("When connecting to: %1.").arg(urlString), self.trUtf8("Check the address for errors such as " "ww.example.org instead of " "www.example.org"), self.trUtf8("If the address is correct, try checking the network " "connection."), self.trUtf8("If your computer or network is protected by a firewall " "or proxy, make sure that the browser is permitted to " "access the network.") ).toUtf8() return True except AttributeError: pass return QWebPage.extension(self, extension, option, output) def userAgentForUrl(self, url): """ Protected method to determine the user agent for the given URL. @param url URL to determine user agent for (QUrl) @return user agent string (string) """ agentList = QWebPage.userAgentForUrl(self, url).split(" ") agentList[0] = "Mozilla/9.0" return agentList.join(" ") ########################################################################################## class HelpBrowser(QWebView): """ Class implementing the helpbrowser widget. This is a subclass of the Qt QWebView to implement an interface compatible with the QTextBrowser based variant. @signal sourceChanged(const QUrl &) emitted after the current URL has changed @signal forwardAvailable(bool) emitted after the current URL has changed @signal backwardAvailable(bool) emitted after the current URL has changed @signal highlighted(const QString&) emitted, when the mouse hovers over a link @signal search(const QUrl &) emitted, when a search is requested """ def __init__(self, parent = None, name = QString("")): """ Constructor @param parent parent widget of this window (QWidget) @param name name of this window (string or QString) """ QWebView.__init__(self, parent) self.setObjectName(name) self.setWhatsThis(self.trUtf8( """Help Window""" """

    This window displays the selected help information.

    """ )) self.__page = HelpWebPage(self) self.setPage(self.__page) self.mw = parent self.ctrlPressed = False self.__downloadWindows = [] self.__isLoading = False self.__currentZoom = 100 self.__zoomLevels = [ 30, 50, 67, 80, 90, 100, 110, 120, 133, 150, 170, 200, 240, 300, ] self.__javaScriptBinding = None self.__javaScriptEricObject = None self.connect(self.mw, SIGNAL("zoomTextOnlyChanged(bool)"), self.__applyZoom) self.page().setLinkDelegationPolicy(QWebPage.DelegateAllLinks) self.connect(self, SIGNAL('linkClicked(const QUrl &)'), self.setSource) self.connect(self, SIGNAL('iconChanged()'), self.__iconChanged) self.connect(self, SIGNAL('urlChanged(const QUrl &)'), self.__urlChanged) self.connect(self, SIGNAL('statusBarMessage(const QString &)'), self.__statusBarMessage) self.connect(self.page(), SIGNAL('linkHovered(const QString &, const QString &, const QString &)'), self.__linkHovered) self.connect(self, SIGNAL('loadStarted()'), self.__loadStarted) self.connect(self, SIGNAL('loadProgress(int)'), self.__loadProgress) self.connect(self, SIGNAL('loadFinished(bool)'), self.__loadFinished) self.page().setForwardUnsupportedContent(True) self.connect(self.page(), SIGNAL('unsupportedContent(QNetworkReply *)'), self.__unsupportedContent) self.connect(self.page(), SIGNAL('downloadRequested(const QNetworkRequest &)'), self.__downloadRequested) self.connect(self.page(), SIGNAL("frameCreated(QWebFrame *)"), self.__addExternalBinding) self.__addExternalBinding(self.page().mainFrame()) self.connect(self.mw.openSearchManager(), SIGNAL("currentEngineChanged()"), self.__currentEngineChanged) def __addExternalBinding(self, frame = None): """ Private slot to add javascript bindings for adding search providers. @param frame reference to the web frame (QWebFrame) """ self.page().settings().setAttribute(QWebSettings.JavascriptEnabled, True) if self.__javaScriptBinding is None: self.__javaScriptBinding = JavaScriptExternalObject(self.mw, self) if frame is None: # called from QWebFrame.javaScriptWindowObjectCleared frame = self.sender() if isinstance(frame, HelpWebPage): frame = frame.mainFrame() if frame.url().scheme() == "pyrc" and frame.url().path() == "home": if self.__javaScriptEricObject is None: self.__javaScriptEricObject = JavaScriptEricObject(self.mw, self) frame.addToJavaScriptWindowObject("eric", self.__javaScriptEricObject) else: # called from QWebPage.frameCreated self.connect(frame, SIGNAL("javaScriptWindowObjectCleared()"), self.__addExternalBinding) frame.addToJavaScriptWindowObject("external", self.__javaScriptBinding) def linkedResources(self, relation = QString()): """ Public method to extract linked resources. @param relation relation to extract (QString) @return list of linked resources (list of LinkedResource) """ relation = QString(relation) resources = [] lst = self.page().mainFrame().evaluateJavaScript(fetchLinks_js).toList() for variant in lst: m = variant.toMap() rel = m[QString("rel")].toString() type_ = m[QString("type")].toString() href = m[QString("href")].toString() title = m[QString("title")].toString() if href.isEmpty() or type_.isEmpty(): continue if not relation.isEmpty() and rel != relation: continue resource = LinkedResource() resource.rel = rel resource.type_ = type_ resource.href = href resource.title = title resources.append(resource) return resources def __currentEngineChanged(self): """ Private slot to track a change of the current search engine. """ if self.url().toString() == "pyrc:home": self.reload() def setSource(self, name): """ Public method used to set the source to be displayed. @param name filename to be shown (QUrl) """ if name is None or not name.isValid(): return if self.ctrlPressed: # open in a new window self.mw.newTab(name) self.ctrlPressed = False return if name.scheme().isEmpty(): name.setUrl(Preferences.getHelp("DefaultScheme") + name.toString()) if name.scheme().length() == 1 or \ name.scheme() == "file": # name is a local file if not name.scheme().isEmpty() and \ name.scheme().length() == 1: # it is a local path on win os name = QUrl.fromLocalFile(name.toString()) if not QFileInfo(name.toLocalFile()).exists(): QMessageBox.critical(None, self.trUtf8("eric4 Web Browser"), self.trUtf8("""

    The file %1 does not exist.

    """)\ .arg(name.toLocalFile()), QMessageBox.StandardButtons(\ QMessageBox.Ok)) return if name.toLocalFile().endsWith(".pdf") or \ name.toLocalFile().endsWith(".PDF") or \ name.toLocalFile().endsWith(".chm") or \ name.toLocalFile().endsWith(".CHM"): started = QDesktopServices.openUrl(name) if not started: KQMessageBox.critical(self, self.trUtf8("eric4 Web Browser"), self.trUtf8("""

    Could not start a viewer""" """ for file %1.

    """).arg(name.path())) return elif name.scheme() in ["mailto", "ftp"]: started = QDesktopServices.openUrl(name) if not started: KQMessageBox.critical(self, self.trUtf8("eric4 Web Browser"), self.trUtf8("""

    Could not start an application""" """ for URL %1.

    """).arg(name.toString())) return elif name.scheme() == "javascript": scriptSource = QUrl.fromPercentEncoding(name.toString( QUrl.FormattingOptions(QUrl.TolerantMode | QUrl.RemoveScheme)).toAscii()) self.page().mainFrame().evaluateJavaScript(scriptSource) return else: if name.toString().endsWith(".pdf") or \ name.toString().endsWith(".PDF") or \ name.toString().endsWith(".chm") or \ name.toString().endsWith(".CHM"): started = QDesktopServices.openUrl(name) if not started: KQMessageBox.critical(self, self.trUtf8("eric4 Web Browser"), self.trUtf8("""

    Could not start a viewer""" """ for file %1.

    """).arg(name.path())) return self.load(name) def source(self): """ Public method to return the URL of the loaded page. @return URL loaded in the help browser (QUrl) """ return self.url() def documentTitle(self): """ Public method to return the title of the loaded page. @return title (QString) """ return self.title() def backward(self): """ Public slot to move backwards in history. """ self.triggerPageAction(QWebPage.Back) self.__urlChanged(self.history().currentItem().url()) def forward(self): """ Public slot to move forward in history. """ self.triggerPageAction(QWebPage.Forward) self.__urlChanged(self.history().currentItem().url()) def home(self): """ Public slot to move to the first page loaded. """ homeUrl = QUrl(Preferences.getHelp("HomePage")) self.setSource(homeUrl) self.__urlChanged(self.history().currentItem().url()) def reload(self): """ Public slot to reload the current page. """ self.triggerPageAction(QWebPage.Reload) def copy(self): """ Public slot to copy the selected text. """ self.triggerPageAction(QWebPage.Copy) def isForwardAvailable(self): """ Public method to determine, if a forward move in history is possible. @return flag indicating move forward is possible (boolean) """ return self.history().canGoForward() def isBackwardAvailable(self): """ Public method to determine, if a backwards move in history is possible. @return flag indicating move backwards is possible (boolean) """ return self.history().canGoBack() def __levelForZoom(self, zoom): """ Private method determining the zoom level index given a zoom factor. @param zoom zoom factor (integer) @return index of zoom factor (integer) """ try: index = self.__zoomLevels.index(zoom) except ValueError: for index in range(len(self.__zoomLevels)): if zoom <= self.__zoomLevels[index]: break return index def __applyZoom(self): """ Private slot to apply the current zoom factor. """ try: self.setZoomFactor(self.__currentZoom / 100.0) except AttributeError: self.setTextSizeMultiplier(self.__currentZoom / 100.0) def zoomIn(self): """ Public slot to zoom into the page. """ index = self.__levelForZoom(self.__currentZoom) if index < len(self.__zoomLevels) - 1: self.__currentZoom = self.__zoomLevels[index + 1] self.__applyZoom() def zoomOut(self): """ Public slot to zoom out of the page. """ index = self.__levelForZoom(self.__currentZoom) if index > 0: self.__currentZoom = self.__zoomLevels[index - 1] self.__applyZoom() def zoomReset(self): """ Public method to reset the zoom factor. """ self.__currentZoom = 100 self.__applyZoom() def wheelEvent(self, evt): """ Protected method to handle wheel events. @param evt reference to the wheel event (QWheelEvent) """ if evt.modifiers() & Qt.ControlModifier: degrees = evt.delta() / 8 steps = degrees / 15 self.__currentZoom += steps * 10 self.__applyZoom() evt.accept() return if evt.modifiers() & Qt.ShiftModifier: if evt.delta() < 0: self.backward() else: self.forward() evt.accept() return QWebView.wheelEvent(self, evt) def hasSelection(self): """ Public method to determine, if there is some text selected. @return flag indicating text has been selected (boolean) """ return not self.selectedText().isEmpty() def findNextPrev(self, txt, case, backwards, wrap): """ Public slot to find the next occurrence of a text. @param txt text to search for (QString) @param case flag indicating a case sensitive search (boolean) @param backwards flag indicating a backwards search (boolean) @param wrap flag indicating to wrap around (boolean) """ findFlags = QWebPage.FindFlags() if case: findFlags |= QWebPage.FindCaseSensitively if backwards: findFlags |= QWebPage.FindBackward if wrap: findFlags |= QWebPage.FindWrapsAroundDocument return self.findText(txt, findFlags) def contextMenuEvent(self, evt): """ Protected method called to create a context menu. This method is overridden from QWebView. @param evt reference to the context menu event object (QContextMenuEvent) """ pos = evt.pos() menu = QMenu(self) hit = self.page().mainFrame().hitTestContent(evt.pos()) if not hit.linkUrl().isEmpty(): act = menu.addAction(self.trUtf8("Open Link in New Tab\tCtrl+LMB"), self.__openLinkInNewTab) act.setData(QVariant(hit.linkUrl())) menu.addSeparator() menu.addAction(self.trUtf8("Save Lin&k"), self.__downloadLink) act = menu.addAction(self.trUtf8("Bookmark this Link"), self.__bookmarkLink) act.setData(QVariant(hit.linkUrl())) menu.addSeparator() menu.addAction(self.trUtf8("Copy Link to Clipboard"), self.__copyLink) if not hit.imageUrl().isEmpty(): if not menu.isEmpty(): menu.addSeparator() act = menu.addAction(self.trUtf8("Open Image in New Tab"), self.__openLinkInNewTab) act.setData(QVariant(hit.imageUrl())) menu.addSeparator() menu.addAction(self.trUtf8("Save Image"), self.__downloadImage) menu.addAction(self.trUtf8("Copy Image to Clipboard"), self.__copyImage) act = menu.addAction(self.trUtf8("Copy Image Location to Clipboard"), self.__copyImageLocation) act.setData(QVariant(hit.imageUrl().toString())) menu.addSeparator() act = menu.addAction(self.trUtf8("Block Image"), self.__blockImage) act.setData(QVariant(hit.imageUrl().toString())) if not menu.isEmpty(): menu.addSeparator() menu.addAction(self.mw.newTabAct) menu.addAction(self.mw.newAct) menu.addSeparator() menu.addAction(self.mw.saveAsAct) menu.addSeparator() menu.addAction(self.trUtf8("Bookmark this Page"), self.__addBookmark) menu.addSeparator() menu.addAction(self.mw.backAct) menu.addAction(self.mw.forwardAct) menu.addAction(self.mw.homeAct) menu.addSeparator() menu.addAction(self.mw.zoomInAct) menu.addAction(self.mw.zoomOutAct) menu.addSeparator() if not self.selectedText().isEmpty(): menu.addAction(self.mw.copyAct) menu.addAction(self.mw.findAct) menu.addSeparator() if not self.selectedText().isEmpty(): self.__searchMenu = menu.addMenu(self.trUtf8("Search with...")) engineNames = self.mw.openSearchManager().allEnginesNames() for engineName in engineNames: engine = self.mw.openSearchManager().engine(engineName) act = OpenSearchEngineAction(engine, self.__searchMenu) self.__searchMenu.addAction(act) act.setData(QVariant(engineName)) self.connect(self.__searchMenu, SIGNAL("triggered(QAction *)"), self.__searchRequested) menu.addSeparator() menu.addAction(self.trUtf8("Web Inspector..."), self.__webInspector) menu.exec_(evt.globalPos()) def __openLinkInNewTab(self): """ Private method called by the context menu to open a link in a new window. """ act = self.sender() url = act.data().toUrl() if url.isEmpty(): return oldCtrlPressed = self.ctrlPressed self.ctrlPressed = True self.setSource(url) self.ctrlPressed = oldCtrlPressed def __bookmarkLink(self): """ Private slot to bookmark a link via the context menu. """ act = self.sender() url = act.data().toUrl() if url.isEmpty(): return dlg = AddBookmarkDialog() dlg.setUrl(QString(url.toEncoded())) dlg.exec_() def __downloadLink(self): """ Private slot to download a link and save it to disk. """ self.pageAction(QWebPage.DownloadLinkToDisk).trigger() def __copyLink(self): """ Private slot to copy a link to the clipboard. """ self.pageAction(QWebPage.CopyLinkToClipboard).trigger() def __downloadImage(self): """ Private slot to download an image and save it to disk. """ self.pageAction(QWebPage.DownloadImageToDisk).trigger() def __copyImage(self): """ Private slot to copy an image to the clipboard. """ self.pageAction(QWebPage.CopyImageToClipboard).trigger() def __copyImageLocation(self): """ Private slot to copy an image location to the clipboard. """ act = self.sender() url = act.data().toString() QApplication.clipboard().setText(url) def __blockImage(self): """ Private slot to add a block rule for an image URL. """ act = self.sender() url = act.data().toString() dlg = Helpviewer.HelpWindow.HelpWindow.adblockManager().showDialog() dlg.addCustomRule(url) def __searchRequested(self, act): """ Private slot to search for some text with a selected search engine. @param act reference to the action that triggered this slot (QAction) """ searchText = self.selectedText() if searchText.isEmpty(): return engineName = act.data().toString() if not engineName.isEmpty(): engine = self.mw.openSearchManager().engine(engineName) self.emit(SIGNAL("search(const QUrl &)"), engine.searchUrl(searchText)) def __webInspector(self): """ Private slot to show the web inspector window. """ self.triggerPageAction(QWebPage.InspectElement) def __addBookmark(self): """ Private slot to bookmark the current link. """ dlg = AddBookmarkDialog() dlg.setUrl(QString(self.url().toEncoded())) dlg.setTitle(self.title()) dlg.exec_() def mousePressEvent(self, evt): """ Protected method called by a mouse press event. @param evt reference to the mouse event (QMouseEvent) """ if evt.button() == Qt.XButton1: self.pageAction(QWebPage.Back).trigger() elif evt.button() == Qt.XButton2: self.pageAction(QWebPage.Forward).trigger() else: QWebView.mousePressEvent(self, evt) def keyPressEvent(self, evt): """ Protected method called by a key press. This method is overridden from QTextBrowser. @param evt the key event (QKeyEvent) """ self.ctrlPressed = (evt.key() == Qt.Key_Control) QWebView.keyPressEvent(self, evt) def keyReleaseEvent(self, evt): """ Protected method called by a key release. This method is overridden from QTextBrowser. @param evt the key event (QKeyEvent) """ self.ctrlPressed = False QWebView.keyReleaseEvent(self, evt) def clearHistory(self): """ Public slot to clear the history. """ self.history().clear() self.__urlChanged(self.history().currentItem().url()) ############################################################################ ## Signal converters below ############################################################################ def __urlChanged(self, url): """ Private slot to handle the urlChanged signal. @param url the new url (QUrl) """ self.emit(SIGNAL('sourceChanged(const QUrl &)'), url) self.emit(SIGNAL('forwardAvailable(bool)'), self.isForwardAvailable()) self.emit(SIGNAL('backwardAvailable(bool)'), self.isBackwardAvailable()) def __statusBarMessage(self, text): """ Private slot to handle the statusBarMessage signal. @param text text to be shown in the status bar (QString) """ self.mw.statusBar().showMessage(text) def __linkHovered(self, link, title, textContent): """ Private slot to handle the linkHovered signal. @param link the URL of the link (QString) @param title the link title (QString) @param textContent text content of the link (QString) """ self.emit(SIGNAL('highlighted(const QString&)'), link) ############################################################################ ## Signal handlers below ############################################################################ def __loadStarted(self): """ Private method to handle the loadStarted signal. """ self.__isLoading = True self.mw.setLoading(self) self.mw.progressBar().show() def __loadProgress(self, progress): """ Private method to handle the loadProgress signal. @param progress progress value (integer) """ self.mw.progressBar().setValue(progress) def __loadFinished(self, ok): """ Private method to handle the loadFinished signal. @param ok flag indicating the result (boolean) """ self.__isLoading = False self.mw.progressBar().hide() self.mw.resetLoading(self, ok) self.__iconChanged() if ok: self.mw.passwordManager().fill(self.page()) def isLoading(self): """ Public method to get the loading state. @return flag indicating the loading state (boolean) """ return self.__isLoading def saveAs(self): """ Public method to save the current page to a file. """ url = self.url() if url.isEmpty(): return req = QNetworkRequest(url) reply = self.mw.networkAccessManager().get(req) self.__unsupportedContent(reply, requestFilename = True, download = True) def __unsupportedContent(self, reply, requestFilename = None, download = False): """ Private slot to handle the unsupportedContent signal. @param reply reference to the reply object (QNetworkReply) @keyparam requestFilename indicating to ask for a filename (boolean or None). If it is None, the behavior is determined by a configuration option. @keyparam download flag indicating a download operation (boolean) """ if reply is None: return replyUrl = reply.url() if replyUrl.scheme() == "abp": return if reply.error() == QNetworkReply.NoError: if reply.url().isEmpty(): return header = reply.header(QNetworkRequest.ContentLengthHeader) size, ok = header.toInt() if ok and size == 0: return if requestFilename is None: requestFilename = Preferences.getUI("RequestDownloadFilename") dlg = DownloadDialog(reply, requestFilename, self.page(), download) if dlg.initialize(): self.connect(dlg, SIGNAL("done()"), self.__downloadDone) self.__downloadWindows.append(dlg) dlg.show() else: if reply.error() == QNetworkReply.OperationCanceledError and \ reply.errorString() == "eric4:No Error": return replyUrl = reply.url() if replyUrl.isEmpty(): return html = QString(notFoundPage_html) urlString = QString.fromUtf8(replyUrl.toEncoded()) title = self.trUtf8("Error loading page: %1").arg(urlString) pixmap = qApp.style()\ .standardIcon(QStyle.SP_MessageBoxWarning, None, self)\ .pixmap(32, 32) imageBuffer = QBuffer() imageBuffer.open(QIODevice.ReadWrite) if pixmap.save(imageBuffer, "PNG"): html.replace("IMAGE_BINARY_DATA_HERE", QString(imageBuffer.buffer().toBase64())) html = html.arg( title, reply.errorString(), self.trUtf8("When connecting to: %1.").arg(urlString), self.trUtf8("Check the address for errors such as ww.example.org " "instead of www.example.org"), self.trUtf8("If the address is correct, try checking the network " "connection."), self.trUtf8("If your computer or network is protected by a firewall or " "proxy, make sure that the browser is permitted to access " "the network.") ) self.setHtml(html, replyUrl) self.mw.historyManager().removeHistoryEntry(replyUrl, self.title()) self.emit(SIGNAL('loadFinished(bool)'), False) def __downloadDone(self): """ Private slot to handle the done signal of the download dialogs. """ dlg = self.sender() if dlg in self.__downloadWindows: self.disconnect(dlg, SIGNAL("done()"), self.__downloadDone) def __downloadRequested(self, request): """ Private slot to handle a download request. @param request reference to the request object (QNetworkRequest) """ if request.url().isEmpty(): return mgr = self.page().networkAccessManager() self.__unsupportedContent(mgr.get(request), download = True) def __iconChanged(self): """ Private slot to handle the icon change. """ self.mw.iconChanged(self.icon()) ############################################################################ ## Miscellaneous methods below ############################################################################ def createWindow(self, windowType): """ Protected method called, when a new window should be created. @param windowType type of the requested window (QWebPage.WebWindowType) """ self.mw.newTab() return self.mw.currentBrowser() def preferencesChanged(self): """ Public method to indicate a change of the settings. """ self.reload() eric4-4.5.18/eric/Helpviewer/PaxHeaders.8617/HelpDocsInstaller.py0000644000175000001440000000013112261012651022547 xustar000000000000000030 mtime=1388582313.707098722 29 atime=1389081084.54272437 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/HelpDocsInstaller.py0000644000175000001440000001561112261012651022306 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a thread class populating and updating the QtHelp documentation database. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from PyQt4.QtHelp import QHelpEngineCore from eric4config import getConfig class HelpDocsInstaller(QThread): """ Class implementing the worker thread populating and updating the QtHelp documentation database. @signal errorMessage(const QString&) emitted, if an error occurred during the installation of the documentation @signal docsInstalled(bool) emitted after the installation has finished """ def __init__(self, collection): """ Constructor @param collection full pathname of the collection file (QString) """ QThread.__init__(self) self.__abort = False self.__collection = collection self.__mutex = QMutex() def stop(self): """ Public slot to stop the installation procedure. """ if not self.isRunning(): return self.__mutex.lock() self.__abort = True self.__mutex.unlock() self.wait() def installDocs(self): """ Public method to start the installation procedure. """ self.start(QThread.LowPriority) def run(self): """ Protected method executed by the thread. """ engine = QHelpEngineCore(self.__collection) engine.setupData() changes = False qtDocs = ["designer", "linguist", "qt"] for doc in qtDocs: changes |= self.__installQtDoc(doc, engine) self.__mutex.lock() if self.__abort: engine = None self.__mutex.unlock() return self.__mutex.unlock() changes |= self.__installEric4Doc(engine) engine = None del engine self.emit(SIGNAL("docsInstalled(bool)"), changes) def __installQtDoc(self, name, engine): """ Private method to install/update a Qt help document. @param name name of the Qt help document (string or QString) @param engine reference to the help engine (QHelpEngineCore) @return flag indicating success (boolean) """ versionKey = QString("qt_version_%1@@%2").arg(qVersion()).arg(name) info = engine.customValue(versionKey, QVariant("")).toString() lst = info.split('|') dt = QDateTime() if len(lst) and not lst[0].isEmpty(): dt = QDateTime.fromString(lst[0], Qt.ISODate) qchFile = QString() if len(lst) == 2: qchFile = lst[1] docsPath = QDir(QLibraryInfo.location(QLibraryInfo.DocumentationPath) + \ QDir.separator() + "qch") files = docsPath.entryList(QStringList("*.qch")) if files.isEmpty(): engine.setCustomValue(versionKey, QVariant(QDateTime().toString(Qt.ISODate) + '|')) return False for f in files: if f.startsWith(name): fi = QFileInfo(docsPath.absolutePath() + QDir.separator() + f) namespace = QHelpEngineCore.namespaceName(fi.absoluteFilePath()) if namespace.isEmpty(): continue if dt.isValid() and \ namespace in engine.registeredDocumentations() and \ fi.lastModified().toString(Qt.ISODate) == dt.toString(Qt.ISODate) and \ qchFile == fi.absoluteFilePath(): return False if namespace in engine.registeredDocumentations(): engine.unregisterDocumentation(namespace) if not engine.registerDocumentation(fi.absoluteFilePath()): self.emit(SIGNAL("errorMessage(const QString&)"), self.trUtf8("""

    The file %1 could not be registered.""" """
    Reason: %2

    """)\ .arg(fi.absoluteFilePath)\ .arg(engine.error()) ) return False engine.setCustomValue(versionKey, QVariant(fi.lastModified().toString(Qt.ISODate) + '|' + \ fi.absoluteFilePath())) return True return False def __installEric4Doc(self, engine): """ Private method to install/update the eric4 help documentation. @param engine reference to the help engine (QHelpEngineCore) @return flag indicating success (boolean) """ versionKey = QString("eric4_ide") info = engine.customValue(versionKey, QVariant("")).toString() lst = info.split('|') dt = QDateTime() if len(lst) and not lst[0].isEmpty(): dt = QDateTime.fromString(lst[0], Qt.ISODate) qchFile = QString() if len(lst) == 2: qchFile = lst[1] docsPath = QDir(QString(getConfig("ericDocDir")) + QDir.separator() + "Help") files = docsPath.entryList(QStringList("*.qch")) if files.isEmpty(): engine.setCustomValue(versionKey, QVariant(QDateTime().toString(Qt.ISODate) + '|')) return False for f in files: if f == "source.qch": fi = QFileInfo(docsPath.absolutePath() + QDir.separator() + f) if dt.isValid() and \ fi.lastModified().toString(Qt.ISODate) == dt.toString(Qt.ISODate) and \ qchFile == fi.absoluteFilePath(): return False namespace = QHelpEngineCore.namespaceName(fi.absoluteFilePath()) if namespace.isEmpty(): continue if namespace in engine.registeredDocumentations(): engine.unregisterDocumentation(namespace) if not engine.registerDocumentation(fi.absoluteFilePath()): self.emit(SIGNAL("errorMessage(const QString&)"), self.trUtf8("""

    The file %1 could not be registered.""" """
    Reason: %2

    """)\ .arg(fi.absoluteFilePath)\ .arg(engine.error()) ) return False engine.setCustomValue(versionKey, QVariant(fi.lastModified().toString(Qt.ISODate) + '|' + \ fi.absoluteFilePath())) return True return False eric4-4.5.18/eric/Helpviewer/PaxHeaders.8617/OpenSearch0000644000175000001440000000013212262730776020611 xustar000000000000000030 mtime=1389081086.301724332 30 atime=1389081086.306724332 30 ctime=1389081086.315724332 eric4-4.5.18/eric/Helpviewer/OpenSearch/0000755000175000001440000000000012262730776020420 5ustar00detlevusers00000000000000eric4-4.5.18/eric/Helpviewer/OpenSearch/PaxHeaders.8617/OpenSearchEngine.py0000644000175000001440000000013112261012651024374 xustar000000000000000030 mtime=1388582313.709098748 29 atime=1389081084.54272437 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/OpenSearch/OpenSearchEngine.py0000644000175000001440000003701112261012651024131 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing the open search engine. """ try: import json except ImportError: try: import simplejson as json except ImportError: import ThirdParty.SimpleJSON.simplejson as json from PyQt4.QtCore import * from PyQt4.QtGui import * from PyQt4.QtNetwork import QNetworkRequest, QNetworkAccessManager from UI.Info import Program import Preferences import Utilities class OpenSearchEngine(QObject): """ Class implementing the open search engine. @signal imageChanged() emitted after the icon has been changed @signal suggestions(const QStringList&) emitted after the suggestions have been received """ def __init__(self, parent = None): """ Constructor @param parent reference to the parent object (QObject) """ QObject.__init__(self, parent) self.__suggestionsReply = None self.__networkAccessManager = None self._name = QString() self._description = QString() self._searchUrlTemplate = QString() self._suggestionsUrlTemplate = QString() self._searchParameters = [] # list of two tuples self._suggestionsParameters = [] # list of two tuples self._imageUrl = QString() self.__image = QImage() self.__iconMoved = False self.__searchMethod = QString("get") self.__suggestionsMethod = QString("get") self.__requestMethods = { QString("get") : QNetworkAccessManager.GetOperation, QString("post") : QNetworkAccessManager.PostOperation, } self.__replies = [] @classmethod def parseTemplate(cls, searchTerm, searchTemplate): """ Class method to parse a search template. @param searchTerm term to search for (string or QString) @param searchTemplate template to be parsed (string or QString) @return parsed template (QString) """ locale = QLocale(Preferences.getHelp("SearchLanguage")) language = locale.name().split("_")[0] country = language.toLower() result = QString(searchTemplate) result.replace("{count}", "20") result.replace("{startIndex}", "0") result.replace("{startPage}", "0") result.replace("{language}", language) result.replace("{country}", country) result.replace("{inputEncoding}", "UTF-8") result.replace("{outputEncoding}", "UTF-8") result.replace("{searchTerms}", QString(QUrl.toPercentEncoding(searchTerm))) result.replace(QRegExp(r"""\{([^\}]*:|)source\??\}"""), Program) return result @pyqtSignature("", "QString") def name(self): """ Public method to get the name of the engine. @return name of the engine (QString) """ return QString(self._name) def setName(self, name): """ Public method to set the engine name. @param name name of the engine (string or QString) """ self._name = QString(name) def description(self): """ Public method to get the description of the engine. @return description of the engine (QString) """ return QString(self._description) def setDescription(self, description): """ Public method to set the engine description. @param description description of the engine (string or QString) """ self._description = QString(description) def searchUrlTemplate(self): """ Public method to get the search URL template of the engine. @return search URL template of the engine (QString) """ return QString(self._searchUrlTemplate) def setSearchUrlTemplate(self, searchUrlTemplate): """ Public method to set the engine search URL template. @param searchUrlTemplate search URL template of the engine (string or QString) """ self._searchUrlTemplate = QString(searchUrlTemplate) def searchUrl(self, searchTerm): """ Public method to get a URL ready for searching. @param searchTerm term to search for (string or QString) @return URL (QUrl) """ if self._searchUrlTemplate.isEmpty(): return QUrl() ret = QUrl.fromEncoded( self.parseTemplate(searchTerm, self._searchUrlTemplate).toUtf8()) if self.__searchMethod != "post": for parameter in self._searchParameters: ret.addQueryItem(parameter[0], self.parseTemplate(searchTerm, parameter[1])) return ret def providesSuggestions(self): """ Public method to check, if the engine provides suggestions. @return flag indicating suggestions are provided (boolean) """ return not self._suggestionsUrlTemplate.isEmpty() def suggestionsUrlTemplate(self): """ Public method to get the search URL template of the engine. @return search URL template of the engine (QString) """ return QString(self._suggestionsUrlTemplate) def setSuggestionsUrlTemplate(self, suggestionsUrlTemplate): """ Public method to set the engine suggestions URL template. @param suggestionsUrlTemplate suggestions URL template of the engine (string or QString) """ self._suggestionsUrlTemplate = QString(suggestionsUrlTemplate) def suggestionsUrl(self, searchTerm): """ Public method to get a URL ready for suggestions. @param searchTerm term to search for (string or QString) @return URL (QUrl) """ if self._suggestionsUrlTemplate.isEmpty(): return QUrl() ret = QUrl.fromEncoded( self.parseTemplate(searchTerm, self._suggestionsUrlTemplate).toUtf8()) if self.__searchMethod != "post": for parameter in self._suggestionsParameters: ret.addQueryItem(parameter[0], self.parseTemplate(searchTerm, parameter[1])) return ret def searchParameters(self): """ Public method to get the search parameters of the engine. @return search parameters of the engine (list of two tuples) """ return self._searchParameters[:] def setSearchParameters(self, searchParameters): """ Public method to set the engine search parameters. @param searchParameters search parameters of the engine (list of two tuples) """ self._searchParameters = searchParameters[:] def suggestionsParameters(self): """ Public method to get the suggestions parameters of the engine. @return suggestions parameters of the engine (list of two tuples) """ return self._suggestionsParameters[:] def setSuggestionsParameters(self, suggestionsParameters): """ Public method to set the engine suggestions parameters. @param suggestionsParameters suggestions parameters of the engine (list of two tuples) """ self._suggestionsParameters = suggestionsParameters[:] def searchMethod(self): """ Public method to get the HTTP request method used to perform search requests. @return HTTP request method (QString) """ return self.__searchMethod def setSearchMethod(self, method): """ Public method to set the HTTP request method used to perform search requests. @param method HTTP request method (QString) """ requestMethod = QString(method).toLower() if requestMethod not in self.__requestMethods: return self.__searchMethod = requestMethod def suggestionsMethod(self): """ Public method to get the HTTP request method used to perform suggestions requests. @return HTTP request method (QString) """ return self.__suggestionsMethod def setSuggestionsMethod(self, method): """ Public method to set the HTTP request method used to perform suggestions requests. @param method HTTP request method (QString) """ requestMethod = QString(method).toLower() if requestMethod not in self.__requestMethods: return self.__suggestionsMethod = requestMethod def imageUrl(self): """ Public method to get the image URL of the engine. @return image URL of the engine (QString) """ return QString(self._imageUrl) def setImageUrl(self, imageUrl): """ Public method to set the engine image URL. @param description image URL of the engine (string or QString) """ self._imageUrl = QString(imageUrl) def setImageUrlAndLoad(self, imageUrl): """ Public method to set the engine image URL. @param description image URL of the engine (string or QString) """ self.setImageUrl(imageUrl) self.__iconMoved = False self.loadImage() def loadImage(self): """ Public method to load the image of the engine. """ if self.__networkAccessManager is None or self._imageUrl.isEmpty(): return reply = self.__networkAccessManager.get( QNetworkRequest(QUrl.fromEncoded(self._imageUrl.toUtf8()))) self.connect(reply, SIGNAL("finished()"), self.__imageObtained) self.__replies.append(reply) def __imageObtained(self): """ Private slot to receive the image of the engine. """ reply = self.sender() if reply is None: return response = reply.readAll() reply.close() if reply in self.__replies: self.__replies.remove(reply) reply.deleteLater() if response.isEmpty(): return if response.startsWith("") or response.startsWith("HTML"): self.__iconMoved = True self.__image = QImage() else: self.__image.loadFromData(response) self.emit(SIGNAL("imageChanged()")) def image(self): """ Public method to get the image of the engine. @return image of the engine (QImage) """ if not self.__iconMoved and self.__image.isNull(): self.loadImage() return self.__image def setImage(self, image): """ Public method to set the image of the engine. @param image image to be set (QImage) """ if self._imageUrl.isEmpty(): imageBuffer = QBuffer() imageBuffer.open(QIODevice.ReadWrite) if image.save(imageBuffer, "PNG"): self._imageUrl = QString("data:image/png;base64,%1")\ .arg(QString(imageBuffer.buffer().toBase64())) self.__image = QImage(image) self.emit(SIGNAL("imageChanged()")) def isValid(self): """ Public method to check, if the engine is valid. @return flag indicating validity (boolean) """ return not self._name.isEmpty() and not self._searchUrlTemplate.isEmpty() def __eq__(self, other): """ Public method implementing the == operator. @param other reference to an open search engine (OpenSearchEngine) @return flag indicating equality (boolean) """ if not isinstance(other, OpenSearchEngine): return NotImplemented return self._name == other._name and \ self._description == other._description and \ self._imageUrl == other._imageUrl and \ self._searchUrlTemplate == other._searchUrlTemplate and \ self._suggestionsUrlTemplate ==other._suggestionsUrlTemplate and \ self._searchParameters == other._searchParameters and \ self._suggestionsParameters == other._suggestionsParameters def __lt__(self, other): """ Public method implementing the < operator. @param other reference to an open search engine (OpenSearchEngine) @return flag indicating less than (boolean) """ if not isinstance(other, OpenSearchEngine): return NotImplemented return self._name < other._name def requestSuggestions(self, searchTerm): """ Public method to request suggestions. @param searchTerm term to get suggestions for (string or QString) """ searchTerm = QString(searchTerm) if searchTerm.isEmpty() or not self.providesSuggestions(): return if self.__networkAccessManager is None: return if self.__suggestionsReply is not None: self.disconnect(self.__suggestionsReply, SIGNAL("finished()"), self.__suggestionsObtained) self.__suggestionsReply.abort() self.__suggestionsReply = None if self.__suggestionsMethod not in self.__requestMethods: # ignore return if self.__suggestionsMethod == "get": self.__suggestionsReply = self.networkAccessManager().get( QNetworkRequest(self.suggestionsUrl(searchTerm))) else: parameters = QStringList() for parameter in self._suggestionsParameters: parameters.append(parameter[0] + "=" + parameter[1]) data = parameters.join("&").toUtf8() self.__suggestionsReply = self.networkAccessManager().post( QNetworkRequest(self.suggestionsUrl(searchTerm)), data) self.connect(self.__suggestionsReply, SIGNAL("finished()"), self.__suggestionsObtained) def __suggestionsObtained(self): """ Private slot to receive the suggestions. """ buffer = str(self.__suggestionsReply.readAll()) response = Utilities.decodeBytes(buffer) response = response.strip() self.__suggestionsReply.close() self.__suggestionsReply = None if len(response) == 0: return try: result = json.loads(response) except ValueError: return try: suggestions = QStringList(result[1]) except IndexError: return self.emit(SIGNAL("suggestions(const QStringList&)"), suggestions) def networkAccessManager(self): """ Public method to get a reference to the network access manager object. @return reference to the network access manager object (QNetworkAccessManager) """ return self.__networkAccessManager def setNetworkAccessManager(self, networkAccessManager): """ Public method to set the reference to the network access manager. @param networkAccessManager reference to the network access manager object (QNetworkAccessManager) """ self.__networkAccessManager = networkAccessManager eric4-4.5.18/eric/Helpviewer/OpenSearch/PaxHeaders.8617/OpenSearchDialog.py0000644000175000001440000000013112261012651024366 xustar000000000000000030 mtime=1388582313.712098786 29 atime=1389081084.54272437 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/OpenSearch/OpenSearchDialog.py0000644000175000001440000000770012261012651024125 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a dialog for the configuration of search engines. """ from PyQt4.QtGui import QDialog from PyQt4.QtCore import pyqtSignature, QString, SIGNAL from KdeQt import KQFileDialog, KQMessageBox from E4Gui.E4ListView import E4ListView from OpenSearchEngineModel import OpenSearchEngineModel from OpenSearchEditDialog import OpenSearchEditDialog from Ui_OpenSearchDialog import Ui_OpenSearchDialog class OpenSearchDialog(QDialog, Ui_OpenSearchDialog): """ Class implementing a dialog for the configuration of search engines. """ def __init__(self, parent = None): """ Constructor """ QDialog.__init__(self, parent) self.setupUi(self) self.setModal(True) self.__mw = parent self.__model = \ OpenSearchEngineModel(self.__mw.openSearchManager(), self) self.enginesTable.setModel(self.__model) self.enginesTable.horizontalHeader().resizeSection(0, 200) self.enginesTable.horizontalHeader().setStretchLastSection(True) self.enginesTable.verticalHeader().hide() self.enginesTable.verticalHeader().setDefaultSectionSize( 1.2 * self.fontMetrics().height()) self.connect(self.enginesTable.selectionModel(), SIGNAL("selectionChanged(const QItemSelection&, const QItemSelection&)"), self.__selectionChanged) self.editButton.setEnabled(False) @pyqtSignature("") def on_addButton_clicked(self): """ Private slot to add a new search engine. """ fileNames = KQFileDialog.getOpenFileNames(\ self, self.trUtf8("Add search engine"), QString(), self.trUtf8("OpenSearch (*.xml);;All Files (*)"), None) osm = self.__mw.openSearchManager() for fileName in fileNames: if not osm.addEngine(fileName): KQMessageBox.critical(self, self.trUtf8("Add search engine"), self.trUtf8("""%1 is not a valid OpenSearch 1.1 description or""" """ is already on your list.""").arg(fileName)) @pyqtSignature("") def on_deleteButton_clicked(self): """ Private slot to delete the selected search engines. """ if self.enginesTable.model().rowCount() == 1: KQMessageBox.critical(self, self.trUtf8("Delete selected engines"), self.trUtf8("""You must have at least one search engine.""")) self.enginesTable.removeSelected() @pyqtSignature("") def on_restoreButton_clicked(self): """ Private slot to restore the default search engines. """ self.__mw.openSearchManager().restoreDefaults() @pyqtSignature("") def on_editButton_clicked(self): """ Private slot to edit the data of the current search engine. """ rows = self.enginesTable.selectionModel().selectedRows() if len(rows) == 0: row = self.enginesTable.selectionModel().currentIndex().row() else: row = rows[0].row() osm = self.__mw.openSearchManager() engineName = osm.allEnginesNames()[row] engine = osm.engine(engineName) dlg = OpenSearchEditDialog(engine, self) if dlg.exec_() == QDialog.Accepted: osm.enginesChanged() def __selectionChanged(self, selected, deselected): """ Private slot to handle a change of the selection. @param selected item selection of selected items (QItemSelection) @param deselected item selection of deselected items (QItemSelection) """ self.editButton.setEnabled( len(self.enginesTable.selectionModel().selectedRows()) <= 1) eric4-4.5.18/eric/Helpviewer/OpenSearch/PaxHeaders.8617/OpenSearchWriter.py0000644000175000001440000000013112261012651024443 xustar000000000000000030 mtime=1388582313.716098837 29 atime=1389081084.54372437 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/OpenSearch/OpenSearchWriter.py0000644000175000001440000000650512261012651024204 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a writer for open search engine descriptions. """ from PyQt4.QtCore import * class OpenSearchWriter(QXmlStreamWriter): """ Class implementing a writer for open search engine descriptions. """ def __init__(self): """ Constructor """ QXmlStreamWriter.__init__(self) self.setAutoFormatting(True) def write(self, device, engine): """ Public method to write the description of an engine. @param device reference to the device to write to (QIODevice) @param engine reference to the engine (OpenSearchEngine) """ if engine is None: return False if not device.isOpen(): if not device.open(QIODevice.WriteOnly): return False self.setDevice(device) self.__write(engine) return True def __write(self, engine): """ Private method to write the description of an engine. @param engine reference to the engine (OpenSearchEngine) """ self.writeStartDocument() self.writeStartElement("OpenSearchDescription") self.writeDefaultNamespace("http://a9.com/-/spec/opensearch/1.1/") if not engine.name().isEmpty(): self.writeTextElement("ShortName", engine.name()) if not engine.description().isEmpty(): self.writeTextElement("Description", engine.description()) if not engine.searchUrlTemplate().isEmpty(): self.writeStartElement("Url") self.writeAttribute("method", engine.searchMethod()) self.writeAttribute("type", "text/html") self.writeAttribute("template", engine.searchUrlTemplate()) if len(engine.searchParameters()) > 0: self.writeNamespace( "http://a9.com/-/spec/opensearch/extensions/parameters/1.0/", "p") for parameter in engine.searchParameters(): self.writeStartElement("p:Parameter") self.writeAttribute("name", parameter[0]) self.writeAttribute("value", parameter[1]) self.writeEndElement() if not engine.suggestionsUrlTemplate().isEmpty(): self.writeStartElement("Url") self.writeAttribute("method", engine.suggestionsMethod()) self.writeAttribute("type", "application/x-suggestions+json") self.writeAttribute("template", engine.suggestionsUrlTemplate()) if len(engine.suggestionsParameters()) > 0: self.writeNamespace( "http://a9.com/-/spec/opensearch/extensions/parameters/1.0/", "p") for parameter in engine.suggestionsParameters(): self.writeStartElement("p:Parameter") self.writeAttribute("name", parameter[0]) self.writeAttribute("value", parameter[1]) self.writeEndElement() if not engine.imageUrl().isEmpty(): self.writeTextElement("Image", engine.imageUrl()) self.writeEndElement() self.writeEndDocument() eric4-4.5.18/eric/Helpviewer/OpenSearch/PaxHeaders.8617/OpenSearchEditDialog.py0000644000175000001440000000013112261012651025174 xustar000000000000000030 mtime=1388582313.718098862 29 atime=1389081084.54372437 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/OpenSearch/OpenSearchEditDialog.py0000644000175000001440000000253112261012651024730 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a dialog to edit the data of a search engine. """ from PyQt4.QtGui import QDialog from Ui_OpenSearchEditDialog import Ui_OpenSearchEditDialog class OpenSearchEditDialog(QDialog, Ui_OpenSearchEditDialog): """ Class implementing a dialog to edit the data of a search engine. """ def __init__(self, engine, parent = None): """ Constructor """ QDialog.__init__(self, parent) self.setupUi(self) self.__engine = engine self.nameEdit.setText(engine.name()) self.descriptionEdit.setText(engine.description()) self.imageEdit.setText(engine.imageUrl()) self.searchEdit.setText(engine.searchUrlTemplate()) self.suggestionsEdit.setText(engine.suggestionsUrlTemplate()) def accept(self): """ Public slot to accept the data entered. """ self.__engine.setName(self.nameEdit.text()) self.__engine.setDescription(self.descriptionEdit.text()) self.__engine.setImageUrlAndLoad(self.imageEdit.text()) self.__engine.setSearchUrlTemplate(self.searchEdit.text()) self.__engine.setSuggestionsUrlTemplate(self.suggestionsEdit.text()) QDialog.accept(self) eric4-4.5.18/eric/Helpviewer/OpenSearch/PaxHeaders.8617/OpenSearchManager.py0000644000175000001440000000013212261012651024542 xustar000000000000000030 mtime=1388582313.729099001 30 atime=1389081084.558724374 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/OpenSearch/OpenSearchManager.py0000644000175000001440000003747412261012651024313 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a manager for open search engines. """ import os from PyQt4.QtCore import * from PyQt4.QtGui import QMessageBox from PyQt4.QtNetwork import QNetworkRequest, QNetworkReply from KdeQt import KQMessageBox from KdeQt.KQApplication import e4App from OpenSearchDefaultEngines import OpenSearchDefaultEngines from OpenSearchEngine import OpenSearchEngine from OpenSearchReader import OpenSearchReader from OpenSearchWriter import OpenSearchWriter from Utilities.AutoSaver import AutoSaver import Utilities import Preferences class OpenSearchManager(QObject): """ Class implementing a manager for open search engines. @signal changed() emitted to indicate a change @signal currentEngineChanged emitted to indicate a change of the current search engine """ def __init__(self, parent = None): """ Constructor @param parent reference to the parent object (QObject) """ if parent is None: parent = e4App() QObject.__init__(self, parent) self.__replies = [] self.__engines = {} self.__keywords = {} self.__current = QString() self.__loading = False self.__saveTimer = AutoSaver(self, self.save) self.connect(self, SIGNAL("changed()"), self.__saveTimer.changeOccurred) self.load() def close(self): """ Public method to close the open search engines manager. """ self.__saveTimer.saveIfNeccessary() def currentEngineName(self): """ Public method to get the name of the current search engine. @return name of the current search engine (QString) """ return self.__current def setCurrentEngineName(self, name): """ Public method to set the current engine by name. @param name name of the new current engine (string or QString) """ if unicode(name) not in self.__engines: return self.__current = QString(name) self.emit(SIGNAL("currentEngineChanged()")) self.emit(SIGNAL("changed()")) def currentEngine(self): """ Public method to get a reference to the current engine. @return reference to the current engine (OpenSearchEngine) """ if self.__current.isEmpty() or unicode(self.__current) not in self.__engines: return None return self.__engines[unicode(self.__current)] def setCurrentEngine(self, engine): """ Public method to set the current engine. @param engine reference to the new current engine (OpenSearchEngine) """ if engine is None: return for engineName in self.__engines: if self.__engines[engineName] == engine: self.setCurrentEngineName(engineName) break def engine(self, name): """ Public method to get a reference to the named engine. @param name name of the engine (string or QString) @return reference to the engine (OpenSearchEngine) """ if unicode(name) not in self.__engines: return None return self.__engines[unicode(name)] def engineExists(self, name): """ Public method to check, if an engine exists. @param name name of the engine (string or QString) """ return unicode(name) in self.__engines def allEnginesNames(self): """ Public method to get a list of all engine names. @return sorted list of all engine names (QStringList) """ return QStringList(sorted(self.__engines.keys())) def enginesCount(self): """ Public method to get the number of available engines. @return number of engines (integer) """ return len(self.__engines) def addEngine(self, engine): """ Public method to add a new search engine. @param engine URL of the engine definition file (QUrl) or name of a file containing the engine definition (string or QString) or reference to an engine object (OpenSearchEngine) @return flag indicating success (boolean) """ if isinstance(engine, QUrl): return self.__addEngineByUrl(engine) elif isinstance(engine, OpenSearchEngine): return self.__addEngineByEngine(engine) else: return self.__addEngineByFile(engine) def __addEngineByUrl(self, url): """ Private method to add a new search engine given its URL. @param url URL of the engine definition file (QUrl) @return flag indicating success (boolean) """ if not url.isValid(): return from Helpviewer.HelpWindow import HelpWindow reply = HelpWindow.networkAccessManager().get(QNetworkRequest(url)) self.connect(reply, SIGNAL("finished()"), self.__engineFromUrlAvailable) reply.setParent(self) self.__replies.append(reply) return True def __addEngineByFile(self, filename): """ Private method to add a new search engine given a filename. @param filename name of a file containing the engine definition (string or QString) @return flag indicating success (boolean) """ file_ = QFile(filename) if not file_.open(QIODevice.ReadOnly): return False reader = OpenSearchReader() engine = reader.read(file_) if not self.__addEngineByEngine(engine): return False return True def __addEngineByEngine(self, engine): """ Private method to add a new search engine given a reference to an engine. @param engine reference to an engine object (OpenSearchEngine) @return flag indicating success (boolean) """ if engine is None: return False if not engine.isValid(): return False if unicode(engine.name()) in self.__engines: return False engine.setParent(self) self.__engines[unicode(engine.name())] = engine self.emit(SIGNAL("changed()")) return True def removeEngine(self, name): """ Public method to remove an engine. @param name name of the engine (string or QString) """ if len(self.__engines) <= 1: return if unicode(name) not in self.__engines: return engine = self.__engines[unicode(name)] for keyword in [k for k in self.__keywords if self.__keywords[k] == engine]: del self.__keywords[keyword] del self.__engines[unicode(name)] file_ = QDir(self.enginesDirectory()).filePath(self.generateEngineFileName(name)) QFile.remove(file_) if name == self.__current: self.setCurrentEngineName(self.__engines.keys()[0]) self.emit(SIGNAL("changed()")) def generateEngineFileName(self, engineName): """ Public method to generate a valid engine file name. @param engineName name of the engine (string or QString) @return valid engine file name (QString) """ fileName = QString() # strip special characters for c in unicode(engineName): if c.isspace(): fileName.append('_') continue if c.isalnum(): fileName.append(c) fileName.append(".xml") return fileName def saveDirectory(self, dirName): """ Public method to save the search engine definitions to files. @param dirName name of the directory to write the files to (string or QString) """ dir = QDir() if not dir.mkpath(dirName): return dir.setPath(dirName) writer = OpenSearchWriter() for engine in self.__engines.values(): name = self.generateEngineFileName(engine.name()) fileName = dir.filePath(name) file = QFile(fileName) if not file.open(QIODevice.WriteOnly): continue writer.write(file, engine) def save(self): """ Public method to save the search engines configuration. """ if self.__loading: return self.saveDirectory(self.enginesDirectory()) Preferences.setHelp("WebSearchEngine", self.__current) keywords = [] for k in self.__keywords: if self.__keywords[k]: keywords.append((k, self.__keywords[k].name())) Preferences.setHelp("WebSearchKeywords", keywords) def loadDirectory(self, dirName): """ Public method to load the search engine definitions from files. @param dirName name of the directory to load the files from (string or QString) @return flag indicating success (boolean) """ if not QFile.exists(dirName): return False success = False dir = QDir(dirName) for name in dir.entryList(["*.xml"]): fileName = dir.filePath(name) if self.__addEngineByFile(fileName): success = True return success def load(self): """ Public method to load the search engines configuration. """ self.__loading = True self.__current = Preferences.getHelp("WebSearchEngine") keywords = Preferences.getHelp("WebSearchKeywords") if not self.loadDirectory(self.enginesDirectory()): self.restoreDefaults() for keyword, engineName in keywords: self.__keywords[unicode(keyword)] = self.engine(engineName) if unicode(self.__current) not in self.__engines and \ len(self.__engines) > 0: self.__current = QString(self.__engines.keys()[0]) self.__loading = False self.emit(SIGNAL("currentEngineChanged()")) def restoreDefaults(self): """ Public method to restore the default search engines. """ reader = OpenSearchReader() for engine in OpenSearchDefaultEngines: engineDescription = QByteArray(OpenSearchDefaultEngines[engine]) buffer_ = QBuffer(engineDescription) if not buffer_.open(QIODevice.ReadOnly): continue engine = reader.read(buffer_) self.__addEngineByEngine(engine) def enginesDirectory(self): """ Public method to determine the directory containing the search engine descriptions. @return directory name (QString) """ return QString(os.path.join(Utilities.getConfigDir(), "browser", "searchengines")) def __confirmAddition(self, engine): """ Private method to confirm the addition of a new search engine. @param engine reference to the engine to be added (OpenSearchEngine) @return flag indicating the engine shall be added (boolean) """ if engine is None or not engine.isValid(): return False host = QUrl(engine.searchUrlTemplate()).host() res = KQMessageBox.question(None, QString(""), self.trUtf8("""

    Do you want to add the following engine to your list of""" """ search engines?

    Name: %1
    Searches on: %2

    """)\ .arg(engine.name()).arg(host), QMessageBox.StandardButtons(\ QMessageBox.No | \ QMessageBox.Yes), QMessageBox.No) return res == QMessageBox.Yes def __engineFromUrlAvailable(self): """ Private slot to add a search engine from the net. """ reply = self.sender() if reply is None: return if reply.error() != QNetworkReply.NoError: reply.close() if reply in self.__replies: self.__replies.remove(reply) return reader = OpenSearchReader() engine = reader.read(reply) reply.close() if reply in self.__replies: self.__replies.remove(reply) if not engine.isValid(): return if self.engineExists(engine.name()): return if not self.__confirmAddition(engine): return if not self.__addEngineByEngine(engine): return def convertKeywordSearchToUrl(self, keywordSearch): """ Public method to get the search URL for a keyword search. @param keywordSearch search string for keyword search (string or QString) @return search URL (QUrl) """ try: keyword, term = unicode(keywordSearch).split(" ", 1) except ValueError: return QUrl() if not term: return QUrl() engine = self.engineForKeyword(keyword) if engine: return engine.searchUrl(term) return QUrl() def engineForKeyword(self, keyword): """ Public method to get the engine for a keyword. @param keyword keyword to get engine for (string or QString) @return reference to the search engine object (OpenSearchEngine) """ keyword = unicode(keyword) if keyword and keyword in self.__keywords: return self.__keywords[keyword] return None def setEngineForKeyword(self, keyword, engine): """ Public method to set the engine for a keyword. @param keyword keyword to get engine for (string or QString) @param engine reference to the search engine object (OpenSearchEngine) or None to remove the keyword """ keyword = unicode(keyword) if not keyword: return if engine is None: try: del self.__keywords[keyword] except KeyError: pass else: self.__keywords[keyword] = engine self.emit(SIGNAL("changed()")) def keywordsForEngine(self, engine): """ Public method to get the keywords for a given engine. @param engine reference to the search engine object (OpenSearchEngine) @return list of keywords (list of strings) """ return [k for k in self.__keywords if self.__keywords[k] == engine] def setKeywordsForEngine(self, engine, keywords): """ Public method to set the keywords for an engine. @param engine reference to the search engine object (OpenSearchEngine) @param keywords list of keywords (QStringList) """ if engine is None: return for keyword in self.keywordsForEngine(engine): del self.__keywords[keyword] for keyword in keywords: if keyword.isEmpty(): continue self.__keywords[unicode(keyword)] = engine self.emit(SIGNAL("changed()")) def enginesChanged(self): """ Public slot to tell the search engine manager, that something has changed. """ self.emit(SIGNAL("changed()")) eric4-4.5.18/eric/Helpviewer/OpenSearch/PaxHeaders.8617/OpenSearchReader.py0000644000175000001440000000013212261012651024372 xustar000000000000000030 mtime=1388582313.734099064 30 atime=1389081084.558724374 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/OpenSearch/OpenSearchReader.py0000644000175000001440000001042012261012651024121 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a reader for open search engine descriptions. """ from PyQt4.QtCore import * from OpenSearchEngine import OpenSearchEngine class OpenSearchReader(QXmlStreamReader): """ Class implementing a reader for open search engine descriptions. """ def read(self, device): """ Public method to read the description. @param device device to read the description from (QIODevice) @return search engine object (OpenSearchEngine) """ self.clear() if not device.isOpen(): device.open(QIODevice.ReadOnly) self.setDevice(device) return self.__read() def __read(self): """ Private method to read and parse the description. @return search engine object (OpenSearchEngine) """ engine = OpenSearchEngine() while not self.isStartElement() and not self.atEnd(): self.readNext() if self.name() != "OpenSearchDescription" or \ self.namespaceUri() != "http://a9.com/-/spec/opensearch/1.1/": self.raiseError(self.trUtf8("The file is not an OpenSearch 1.1 file.")) return engine while not self.atEnd(): self.readNext() if not self.isStartElement(): continue if self.name() == "ShortName": engine.setName(self.readElementText()) elif self.name() == "Description": engine.setDescription(self.readElementText()) elif self.name() == "Url": type_ = self.attributes().value("type").toString() url = self.attributes().value("template").toString() method = self.attributes().value("method").toString() if type_ == "application/x-suggestions+json" and \ not engine.suggestionsUrlTemplate().isEmpty(): continue if (type_.isEmpty() or \ type_ == "text/html" or \ type_ == "application/xhtml+xml") and \ not engine.suggestionsUrlTemplate().isEmpty(): continue if url.isEmpty(): continue parameters = [] self.readNext() while not (self.isEndElement() and self.name() == "Url"): if not self.isStartElement() or \ (self.name() != "Param" and self.name() != "Parameter"): self.readNext() continue key = self.attributes().value("name").toString() value = self.attributes().value("value").toString() if not key.isEmpty() and not value.isEmpty(): parameters.append((key, value)) while not self.isEndElement(): self.readNext() if type_ == "application/x-suggestions+json": engine.setSuggestionsUrlTemplate(url) engine.setSuggestionsParameters(parameters) engine.setSuggestionsMethod(method) elif type_.isEmpty() or \ type_ == "text/html" or \ type_ == "application/xhtml+xml": engine.setSearchUrlTemplate(url) engine.setSearchParameters(parameters) engine.setSearchMethod(method) elif self.name() == "Image": engine.setImageUrl(self.readElementText()) if not engine.name().isEmpty() and \ not engine.description().isEmpty() and \ not engine.suggestionsUrlTemplate().isEmpty() and \ not engine.searchUrlTemplate().isEmpty() and \ not engine.imageUrl().isEmpty(): break return engine eric4-4.5.18/eric/Helpviewer/OpenSearch/PaxHeaders.8617/__init__.py0000644000175000001440000000013112261012651022756 xustar000000000000000029 mtime=1388582313.73609909 30 atime=1389081084.558724374 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/OpenSearch/__init__.py0000644000175000001440000000025212261012651022510 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Package implementing the opensearch search engine interfaces. """ eric4-4.5.18/eric/Helpviewer/OpenSearch/PaxHeaders.8617/OpenSearchEngineModel.py0000644000175000001440000000013212261012651025356 xustar000000000000000030 mtime=1388582313.739099128 30 atime=1389081084.558724374 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/OpenSearch/OpenSearchEngineModel.py0000644000175000001440000001445412261012651025120 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a model for search engines. """ from PyQt4.QtCore import * from PyQt4.QtGui import QPixmap, QIcon class OpenSearchEngineModel(QAbstractTableModel): """ Class implementing a model for search engines. """ def __init__(self, manager, parent = None): """ Constructor @param manager reference to the search engine manager (OpenSearchManager) @param parent reference to the parent object (QObject) """ QAbstractTableModel.__init__(self, parent) self.__manager = manager self.connect(manager, SIGNAL("changed()"), self.__enginesChanged) self.__headers = [ self.trUtf8("Name"), self.trUtf8("Keywords"), ] def removeRows(self, row, count, parent = QModelIndex()): """ Public method to remove entries from the model. @param row start row (integer) @param count number of rows to remove (integer) @param parent parent index (QModelIndex) @return flag indicating success (boolean) """ if parent.isValid(): return False if count <= 0: return False if self.rowCount() <= 1: return False lastRow = row + count - 1 self.beginRemoveRows(parent, row, lastRow) nameList = self.__manager.allEnginesNames() for index in range(row, lastRow + 1): self.__manager.removeEngine(nameList[index]) # removeEngine emits changed() #self.endRemoveRows() return True def rowCount(self, parent = QModelIndex()): """ Public method to get the number of rows of the model. @param parent parent index (QModelIndex) @return number of rows (integer) """ if parent.isValid(): return 0 else: return self.__manager.enginesCount() def columnCount(self, parent = QModelIndex()): """ Public method to get the number of columns of the model. @param parent parent index (QModelIndex) @return number of columns (integer) """ return 2 def flags(self, index): """ Public method to get flags for a model cell. @param index index of the model cell (QModelIndex) @return flags (Qt.ItemFlags) """ if index.column() == 1: return Qt.ItemIsEnabled | Qt.ItemIsSelectable | Qt.ItemIsEditable else: return Qt.ItemIsEnabled | Qt.ItemIsSelectable def data(self, index, role): """ Public method to get data from the model. @param index index to get data for (QModelIndex) @param role role of the data to retrieve (integer) @return requested data (QVariant) """ if index.row() >= self.__manager.enginesCount() or index.row() < 0: return QVariant() engine = self.__manager.engine(self.__manager.allEnginesNames()[index.row()]) if engine is None: return QVariant() if index.column() == 0: if role == Qt.DisplayRole: return QVariant(engine.name()) elif role == Qt.DecorationRole: image = engine.image() if image.isNull(): from Helpviewer.HelpWindow import HelpWindow icon = HelpWindow.icon(QUrl(engine.imageUrl())) else: icon = QIcon(QPixmap.fromImage(image)) return QVariant(icon) elif role == Qt.ToolTipRole: description = self.trUtf8("Description: %1")\ .arg(engine.description()) if engine.providesSuggestions(): description.append("
    ") description.append( self.trUtf8("Provides contextual suggestions")) return QVariant(description) elif index.column() == 1: if role in [Qt.EditRole, Qt.DisplayRole]: return QVariant( QStringList(self.__manager.keywordsForEngine(engine)).join(",")) elif role == Qt.ToolTipRole: return QVariant(self.trUtf8("Comma-separated list of keywords that may" " be entered in the location bar followed by search terms to search" " with this engine")) return QVariant() def setData(self, index, value, role = Qt.EditRole): """ Public method to set the data of a model cell. @param index index of the model cell (QModelIndex) @param value value to be set (QVariant) @param role role of the data (integer) @return flag indicating success (boolean) """ if not index.isValid() or index.column() != 1: return False if index.row() >= self.rowCount() or index.row() < 0: return False if role != Qt.EditRole: return False engineName = self.__manager.allEnginesNames()[index.row()] keywords = value.toString().split(QRegExp("[ ,]+"), QString.SkipEmptyParts) self.__manager.setKeywordsForEngine(self.__manager.engine(engineName), keywords) return True def headerData(self, section, orientation, role = Qt.DisplayRole): """ Public method to get the header data. @param section section number (integer) @param orientation header orientation (Qt.Orientation) @param role data role (integer) @return header data (QVariant) """ if orientation == Qt.Horizontal and role == Qt.DisplayRole: try: return QVariant(self.__headers[section]) except IndexError: pass return QVariant() def __enginesChanged(self): """ Private slot handling a change of the registered engines. """ QAbstractTableModel.reset(self) eric4-4.5.18/eric/Helpviewer/OpenSearch/PaxHeaders.8617/OpenSearchDialog.ui0000644000175000001440000000013212033057465024365 xustar000000000000000030 mtime=1349279541.689547851 30 atime=1389081084.559724374 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/OpenSearch/OpenSearchDialog.ui0000644000175000001440000001040412033057465024116 0ustar00detlevusers00000000000000 OpenSearchDialog 0 0 650 350 Open Search Engines Configuration true true QAbstractItemView::SelectRows false Press to add a new search engine from file &Add... false Press to delete the selected engines &Delete false Press to edit the data of the current engine Edit... false Press to restore the default engines &Restore Defaults false Qt::Vertical 20 38 Qt::Horizontal QDialogButtonBox::Close E4TableView QTableView
    E4Gui/E4TableView.h
    enginesTable addButton deleteButton editButton restoreButton buttonBox buttonBox accepted() OpenSearchDialog accept() 248 254 157 274 buttonBox rejected() OpenSearchDialog reject() 316 260 286 274
    eric4-4.5.18/eric/Helpviewer/OpenSearch/PaxHeaders.8617/OpenSearchEditDialog.ui0000644000175000001440000000007411311223456025171 xustar000000000000000030 atime=1389081084.559724374 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/OpenSearch/OpenSearchEditDialog.ui0000644000175000001440000001052011311223456024714 0ustar00detlevusers00000000000000 OpenSearchEditDialog 0 0 690 218 Edit search engine data true &Name: nameEdit Qt::NoFocus Shows the name of the search engine true &Description: descriptionEdit Enter a description &Image URL: imageEdit Enter the URL of the image &Search URL Template: searchEdit Enter the template of the search URL Su&ggestions URL Template: suggestionsEdit Enter the template of the suggestions URL Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok nameEdit descriptionEdit imageEdit searchEdit suggestionsEdit buttonBox buttonBox accepted() OpenSearchEditDialog accept() 222 232 157 246 buttonBox rejected() OpenSearchEditDialog reject() 290 238 286 246 eric4-4.5.18/eric/Helpviewer/OpenSearch/PaxHeaders.8617/OpenSearchDefaultEngines.py0000644000175000001440000000013212261012651026065 xustar000000000000000030 mtime=1388582313.741099153 30 atime=1389081084.559724374 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/OpenSearch/OpenSearchDefaultEngines.py0000644000175000001440000002264712261012651025632 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module defining the default search engines. """ OpenSearchDefaultEngines = { "Amazon_com": """ Amazon.com Amazon.com Search http://www.amazon.com/favicon.ico """, "Beolingus": """ De-En Beolingus Beolingus: German-English Dictionary http://dict.tu-chemnitz.de/pics/beo-de.png """, "Bing": """ Bing Bing Web Search http://www.bing.com/s/wlflag.ico """, "Facebook": """ Facebook Search Facebook http://www.facebook.com/favicon.ico """, "Google": """ Google Google Web Search http://www.google.com/favicon.ico """, "Google_Im_Feeling_Lucky": """ Google (I'm Feeling Lucky) Google Web Search http://www.google.com/favicon.ico """, "Leo_de_en": """ LEO Deu-Eng Deutsch-Englisch Woerterbuch von LEO http://dict.leo.org/favicon_en.ico """, "LinuxMagazin_de": """ Linux-Magazin Suche auf www.linux-magazin.de http://www.linux-magazin.de/extension/lnm/design/linux_magazin/images/favicon.ico """, "Reddit": """ Reddit Reddit Site Search http://www.reddit.com/favicon.ico """, "Wikia": """ Wikia Wikia Site Search http://images.wikia.com/wikiaglobal/images/6/64/Favicon.ico """, "Wikia_en": """ Wikia (en) Wikia Site Search English http://images.wikia.com/wikiaglobal/images/6/64/Favicon.ico """, "Wikipedia": """ Wikipedia Full text search in Wikipedia http://en.wikipedia.org/favicon.ico """, "Wiktionary": """ Wiktionary Wiktionary http://en.wiktionary.org/favicon.ico """, "Yahoo": """ Yahoo! Yahoo! Web Search http://m.www.yahoo.com/favicon.ico """, "YouTube": """ YouTube YouTube http://www.youtube.com/favicon.ico """, } eric4-4.5.18/eric/Helpviewer/OpenSearch/PaxHeaders.8617/OpenSearchEngineAction.py0000644000175000001440000000013112261012651025532 xustar000000000000000030 mtime=1388582313.743099179 29 atime=1389081084.56672437 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/OpenSearch/OpenSearchEngineAction.py0000644000175000001440000000263412261012651025272 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a QAction subclass for open search. """ from PyQt4.QtCore import SIGNAL, QUrl from PyQt4.QtGui import QPixmap, QIcon, QAction import Helpviewer.HelpWindow class OpenSearchEngineAction(QAction): """ Class implementing a QAction subclass for open search. """ def __init__(self, engine, parent = None): """ Constructor @param engine reference to the open search engine object (OpenSearchEngine) @param parent reference to the parent object (QObject) """ QAction.__init__(self, parent) self.__engine = engine if self.__engine.networkAccessManager() is None: self.__engine.setNetworkAccessManager( Helpviewer.HelpWindow.HelpWindow.networkAccessManager()) self.setText(engine.name()) self.__imageChanged() self.connect(engine, SIGNAL("imageChanged()"), self.__imageChanged) def __imageChanged(self): """ Private slot handling a change of the associated image. """ image = self.__engine.image() if image.isNull(): self.setIcon( Helpviewer.HelpWindow.HelpWindow.icon(QUrl(self.__engine.imageUrl()))) else: self.setIcon(QIcon(QPixmap.fromImage(image))) eric4-4.5.18/eric/Helpviewer/PaxHeaders.8617/JavaScriptResources.py0000644000175000001440000000013112261012651023131 xustar000000000000000030 mtime=1388582313.746099216 29 atime=1389081084.56672437 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/JavaScriptResources.py0000644000175000001440000000270012261012651022663 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module containing some HTML resources. """ fetchLinks_js = """ (function (){ var links = new Array; var it = document.evaluate('/html/head/link', document, null, XPathResult.ANY_TYPE, null); var link = it.iterateNext(); while (link) { var obj = new Object; obj.rel = link.rel; obj.type = link.type; obj.href = link.href; obj.title = link.title; links.push(obj); link = it.iterateNext(); } return links; })(); """ parseForms_js = """ (function (){ var forms = new Array; for (var i = 0; i < document.forms.length; ++i) { var form = document.forms[i]; var formObject = new Object; formObject.name = form.name; formObject.index = i var elements = new Array; for (var j = 0; j < form.elements.length; ++j) { var e = form.elements[j]; var element = new Object; element.name = e.name; element.value = e.value; element.type = e.type; element.autocomplete = e.attributes.getNamedItem("autocomplete"); if (element.autocomplete != null) element.autocomplete = element.autocomplete.value; elements.push(element); } formObject.elements = elements; forms.push(formObject); } return forms; }()); """ eric4-4.5.18/eric/Helpviewer/PaxHeaders.8617/HelpLanguagesDialog.py0000644000175000001440000000013112261012651023027 xustar000000000000000030 mtime=1388582313.748099242 29 atime=1389081084.56672437 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/HelpLanguagesDialog.py0000644000175000001440000001474412261012651022574 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a dialog to configure the preferred languages. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from Ui_HelpLanguagesDialog import Ui_HelpLanguagesDialog import Preferences class HelpLanguagesDialog(QDialog, Ui_HelpLanguagesDialog): """ Class implementing a dialog to configure the preferred languages. """ def __init__(self, parent = None): """ Constructor @param parent reference to the parent widget (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.__model = QStringListModel() self.languagesList.setModel(self.__model) self.connect(self.languagesList.selectionModel(), SIGNAL("currentChanged(const QModelIndex&, const QModelIndex&)"), self.__currentChanged) languages = Preferences.Prefs.settings.value( "Help/AcceptLanguages", QVariant(self.defaultAcceptLanguages()))\ .toStringList() self.__model.setStringList(languages) allLanguages = QStringList() for index in range(QLocale.C + 1, QLocale.LastLanguage + 1): allLanguages += self.expand(QLocale.Language(index)) self.__allLanguagesModel = QStringListModel() self.__allLanguagesModel.setStringList(allLanguages) self.addCombo.setModel(self.__allLanguagesModel) def __currentChanged(self, current, previous): """ Private slot to handle a change of the current selection. @param current index of the currently selected item (QModelIndex) @param previous index of the previously selected item (QModelIndex) """ self.removeButton.setEnabled(current.isValid()) row = current.row() self.upButton.setEnabled(row > 0) self.downButton.setEnabled(row != -1 and row < self.__model.rowCount() - 1) @pyqtSignature("") def on_upButton_clicked(self): """ Private slot to move a language up. """ currentRow = self.languagesList.currentIndex().row() data = self.languagesList.currentIndex().data() self.__model.removeRow(currentRow) self.__model.insertRow(currentRow - 1) self.__model.setData(self.__model.index(currentRow - 1), data) self.languagesList.setCurrentIndex(self.__model.index(currentRow - 1)) @pyqtSignature("") def on_downButton_clicked(self): """ Private slot to move a language down. """ currentRow = self.languagesList.currentIndex().row() data = self.languagesList.currentIndex().data() self.__model.removeRow(currentRow) self.__model.insertRow(currentRow + 1) self.__model.setData(self.__model.index(currentRow + 1), data) self.languagesList.setCurrentIndex(self.__model.index(currentRow + 1)) @pyqtSignature("") def on_removeButton_clicked(self): """ Private slot to remove a language from the list of acceptable languages. """ currentRow = self.languagesList.currentIndex().row() self.__model.removeRow(currentRow) @pyqtSignature("") def on_addButton_clicked(self): """ Private slot to add a language to the list of acceptable languages. """ language = self.addCombo.currentText() if language in self.__model.stringList(): return self.__model.insertRow(self.__model.rowCount()) self.__model.setData(self.__model.index(self.__model.rowCount() - 1), QVariant(language)) self.languagesList.setCurrentIndex( self.__model.index(self.__model.rowCount() - 1)) def accept(self): """ Public method to accept the data entered. """ result = self.__model.stringList() if result == self.defaultAcceptLanguages(): Preferences.Prefs.settings.remove("Help/AcceptLanguages") else: Preferences.Prefs.settings.setValue("Help/AcceptLanguages", QVariant(result)) QDialog.accept(self) @classmethod def httpString(cls, languages): """ Class method to convert a list of acceptable languages into a byte array that can be sent along with the Accept-Language http header (see RFC 2616). @param languages list of acceptable languages (QStringList) @return converted list (QByteArray) """ processed = QStringList() qvalue = 1.0 for language in languages: leftBracket = language.indexOf('[') rightBracket = language.indexOf(']') tag = language.mid(leftBracket + 1, rightBracket - leftBracket - 1) if processed.isEmpty(): processed.append(tag) else: processed.append( QString("%1;q=%2").arg(tag).arg(QString.number(qvalue, 'f', 1))) if qvalue > 0.1: qvalue -= 0.1 return processed.join(", ").toLatin1() @classmethod def defaultAcceptLanguages(cls): """ Class method to get the list of default accept languages. @return list of acceptable languages (QStringList) """ language = QLocale.system().name() if language.isEmpty(): return QStringList() else: return cls.expand(QLocale(language).language()) @classmethod def expand(self, language): """ Class method to expand a language enum to a readable languages list. @param language language number (QLocale.Language) @return list of expanded language names (QStringList) """ allLanguages = QStringList() countries = QLocale.countriesForLanguage(language) languageString = QString("%1 [%2]")\ .arg(QLocale.languageToString(language))\ .arg(QLocale(language).name().split('_')[0]) allLanguages.append(languageString) for country in countries: languageString = QString("%1/%2 [%3]")\ .arg(QLocale.languageToString(language))\ .arg(QLocale.countryToString(country))\ .arg(QLocale(language, country).name().split('_').join('-').toLower()) if languageString not in allLanguages: allLanguages.append(languageString) return allLanguages eric4-4.5.18/eric/Helpviewer/PaxHeaders.8617/HelpLanguagesDialog.ui0000644000175000001440000000007411204311323023014 xustar000000000000000030 atime=1389081084.567724371 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/HelpLanguagesDialog.ui0000644000175000001440000000613411204311323022545 0ustar00detlevusers00000000000000 HelpLanguagesDialog 0 0 400 300 Languages Languages in order of preference: &Up &Down &Remove Qt::Vertical 20 77 &Add Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok languagesList upButton downButton removeButton addCombo addButton buttonBox buttonBox accepted() HelpLanguagesDialog accept() 248 254 157 274 buttonBox rejected() HelpLanguagesDialog reject() 316 260 286 274 eric4-4.5.18/eric/Helpviewer/PaxHeaders.8617/DownloadDialog.ui0000644000175000001440000000007411072435330022054 xustar000000000000000030 atime=1389081084.567724371 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/DownloadDialog.ui0000644000175000001440000000335311072435330021605 0ustar00detlevusers00000000000000 DownloadDialog 0 0 400 148 Eric4 Download Icon Filename Info Select to keep the dialog open when finished Keep open when finished QDialogButtonBox::Close|QDialogButtonBox::Open eric4-4.5.18/eric/Helpviewer/PaxHeaders.8617/HTMLResources.py0000644000175000001440000000013212261012651021630 xustar000000000000000030 mtime=1388582313.750099267 30 atime=1389081084.567724371 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/HTMLResources.py0000644000175000001440000001101312261012651021356 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module containing some HTML resources. """ from PyQt4.QtCore import QString notFoundPage_html = QString("""\ %1

    %2

    %3

    • %4
    • %5
    • %6
    """) ########################################################################################## startPage_html = QString("""\ """) eric4-4.5.18/eric/Helpviewer/PaxHeaders.8617/QtHelpFiltersDialog.ui0000644000175000001440000000007411735633774023055 xustar000000000000000030 atime=1389081084.584724371 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Helpviewer/QtHelpFiltersDialog.ui0000644000175000001440000000631511735633774022607 0ustar00detlevusers00000000000000 QtHelpFiltersDialog 0 0 570 391 Manage QtHelp Filters true Filters: Attributes: false 1 Press to add a new filter Add Filter ... Press to remove the selected filter Remove Filter Press to remove the selected attribute Remove Attribute Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok filtersList attributesList addButton removeButton removeAttributeButton buttonBox buttonBox rejected() QtHelpFiltersDialog reject() 320 386 286 274 eric4-4.5.18/eric/PaxHeaders.8617/eric4_pluginuninstall.py0000644000175000001440000000013212261012651021375 xustar000000000000000030 mtime=1388582313.754099318 30 atime=1389081084.584724371 30 ctime=1389081086.309724333 eric4-4.5.18/eric/eric4_pluginuninstall.py0000644000175000001440000000337612261012651021140 0ustar00detlevusers00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # """ Eric4 Plugin Uninstaller This is the main Python script to uninstall eric4 plugins from outside of the IDE. """ import sys import os # disable the usage of KDE widgets, if requested sys.e4nokde = False if "--nokde" in sys.argv: del sys.argv[sys.argv.index("--nokde")] sys.e4nokde = True else: sys.e4nokde = os.getenv("e4nokde") is not None and os.getenv("e4nokde") == "1" for arg in sys.argv: if arg.startswith("--config="): import Utilities configDir = arg.replace("--config=", "") Utilities.setConfigDir(configDir) sys.argv.remove(arg) break from Utilities import Startup def createMainWidget(argv): """ Function to create the main widget. @param argv list of commandline parameters (list of strings) @return reference to the main widget (QWidget) """ from PluginManager.PluginUninstallDialog import PluginUninstallWindow return PluginUninstallWindow() def main(): """ Main entry point into the application. """ options = [\ ("--config=configDir", "use the given directory as the one containing the config files"), ("--nokde" , "don't use KDE widgets"), ] appinfo = Startup.makeAppInfo(sys.argv, "Eric4 Plugin Uninstaller", "", "Plugin uninstallation utility for eric4", options) res = Startup.simpleAppStartup(sys.argv, appinfo, createMainWidget) sys.exit(res) if __name__ == '__main__': main() eric4-4.5.18/eric/PaxHeaders.8617/eric4.e4p0000644000175000001440000000013212117132641016127 xustar000000000000000030 mtime=1362933153.699734354 30 atime=1389081084.584724371 30 ctime=1389081086.309724333 eric4-4.5.18/eric/eric4.e4p0000644000175000001440000022155212117132641015670 0ustar00detlevusers00000000000000 en_US Dictionaries/words.dic Dictionaries/excludes.dic Python Qt4 eric4 is an integrated development environment for
the Python and Ruby language. It uses the PyQt4
bindings and the QScintilla2 editor widget. 4.5.x Detlev Offenbach detlev@die-offenbachs.de i18n/eric4_%language%.ts __init__.py Preferences/__init__.py ViewManager/__init__.py KdeQt/KQPrinter.py KdeQt/KQFontDialog.py KdeQt/KQProgressDialog.py KdeQt/KQFileDialog.py KdeQt/KQApplication.py KdeQt/KQMessageBox.py KdeQt/KQInputDialog.py KdeQt/KQColorDialog.py KdeQt/__init__.py Helpviewer/HelpWindow.py Helpviewer/__init__.py UI/PixmapCache.py UI/__init__.py Utilities/Startup.py Utilities/__init__.py eric4config.py UI/Info.py Tools/UIPreviewer.py Tools/__init__.py Utilities/SingleApplication.py Tools/TRSingleApplication.py Tools/TRPreviewer.py PyUnit/UnittestDialog.py PyUnit/__init__.py DebugClients/Python/__init__.py DebugClients/__init__.py Utilities/ModuleParser.py Utilities/ClassBrowsers/idlclbr.py Utilities/ClassBrowsers/pyclbr.py Utilities/ClassBrowsers/ClbrBaseClasses.py Utilities/ClassBrowsers/rbclbr.py Utilities/ClassBrowsers/__init__.py DocumentationTools/APIGenerator.py DocumentationTools/__init__.py DocumentationTools/TemplatesListsStyle.py DocumentationTools/ModuleDocumentor.py DocumentationTools/TemplatesListsStyleCSS.py DocumentationTools/IndexGenerator.py DebugClients/Ruby/DebugProtocol.rb DebugClients/Ruby/AsyncFile.rb DebugClients/Ruby/DebugClientCapabilities.rb DebugClients/Ruby/Debuggee.rb DebugClients/Ruby/DebugClient.rb DebugClients/Ruby/DebugQuit.rb DebugClients/Ruby/Completer.rb DebugClients/Ruby/DebugClientBaseModule.rb DebugClients/Ruby/Config.rb DebugClients/Ruby/__init__.rb DebugClients/Ruby/AsyncIO.rb Examples/modpython.py Examples/hallo.py Examples/rhallo.py Examples/modpython_dbg.py patch_modpython.py eric4.pyw UI/DiffDialog.py UI/CompareDialog.py DebugClients/Python/DebugProtocol.py DebugClients/Python/eric4dbgstub.py DebugClients/Python/PyProfile.py DebugClients/Python/FlexCompleter.py DebugClients/Python/getpass.py DebugClients/Python/DCTestResult.py DebugClients/Python/AsyncFile.py DebugClients/Python/AsyncIO.py DebugClients/Python/DebugClientCapabilities.py DebugClients/Python/DebugBase.py DebugClients/Python/DebugClientBase.py DebugClients/Python/DebugClientThreads.py DebugClients/Python/DebugThread.py DebugClients/Python/DebugClient.py Debugger/DebugServer.py Debugger/Config.py Debugger/__init__.py Debugger/EditBreakpointDialog.py Debugger/EditWatchpointDialog.py Debugger/ExceptionsFilterDialog.py Debugger/StartDialog.py Debugger/VariableDetailDialog.py Debugger/VariablesFilterDialog.py Debugger/BreakPointViewer.py Debugger/BreakPointModel.py Debugger/DebugUI.py Debugger/WatchPointViewer.py Debugger/WatchPointModel.py UI/Config.py Debugger/DebugViewer.py Debugger/ExceptionLogger.py Debugger/VariablesViewer.py Preferences/ConfigurationDialog.py Preferences/ConfigurationPages/__init__.py Preferences/PreferencesLexer.py Preferences/ViewProfileDialog.py Preferences/ShortcutsDialog.py Preferences/Shortcuts.py Preferences/ShortcutDialog.py UI/Browser.py Preferences/ToolConfigurationDialog.py UI/DeleteFilesConfirmationDialog.py UI/EmailDialog.py UI/FindFileDialog.py UI/FindFileNameDialog.py UI/LogView.py UI/SplashScreen.py DataViews/__init__.py DataViews/CodeMetrics.py DataViews/CodeMetricsDialog.py DataViews/PyCoverageDialog.py DataViews/PyProfileDialog.py Tasks/TaskPropertiesDialog.py Tasks/TaskViewer.py Templates/TemplateViewer.py Templates/TemplateMultipleVariablesDialog.py Templates/TemplatePropertiesDialog.py Templates/TemplateSingleVariableDialog.py Tasks/__init__.py Templates/__init__.py UI/BrowserModel.py UI/BrowserSortFilterProxyModel.py install-i18n.py Project/AddFileDialog.py Project/AddFoundFilesDialog.py Project/AddLanguageDialog.py Project/PropertiesDialog.py Project/__init__.py Project/AddDirectoryDialog.py Project/FiletypeAssociationDialog.py Project/DebuggerPropertiesDialog.py VCS/RepositoryInfoDialog.py VCS/CommandOptionsDialog.py VCS/__init__.py Project/Project.py UI/UserInterface.py eric4.py ViewManager/ViewManager.py Project/ProjectBrowserModel.py Project/ProjectBrowserSortFilterProxyModel.py Project/ProjectBrowser.py Project/ProjectBaseBrowser.py Project/ProjectSourcesBrowser.py Project/ProjectFormsBrowser.py Project/ProjectTranslationsBrowser.py Project/ProjectInterfacesBrowser.py Project/ProjectOthersBrowser.py VCS/VersionControl.py VCS/ProjectBrowserHelper.py VCS/ProjectHelper.py ViewManager/BookmarkedFilesDialog.py QScintilla/__init__.py QScintilla/GotoDialog.py QScintilla/ZoomDialog.py install.py uninstall.py Graphics/PixmapDiagram.py Graphics/__init__.py Graphics/ZoomDialog.py KdeQt/KQPrintDialog.py E4Gui/__init__.py E4Gui/E4Action.py E4Gui/E4Led.py E4Gui/E4SingleApplication.py E4Gui/E4TabWidget.py Graphics/GraphicsUtilities.py Graphics/UMLClassDiagram.py Graphics/PackageDiagram.py Graphics/ImportsDiagram.py Graphics/ApplicationDiagram.py Project/ProjectResourcesBrowser.py Preferences/ToolGroupConfigurationDialog.py VCS/StatusMonitorThread.py DocumentationTools/Config.py Preferences/ConfigurationPages/CorbaPage.py Preferences/ConfigurationPages/ApplicationPage.py Preferences/ConfigurationPages/EmailPage.py Preferences/ConfigurationPages/IconsPage.py Preferences/ConfigurationPages/IconsPreviewDialog.py Preferences/ConfigurationPages/PrinterPage.py Preferences/ConfigurationPages/PythonPage.py Preferences/ConfigurationPages/QtPage.py Preferences/ConfigurationPages/ShellPage.py Preferences/ConfigurationPages/TasksPage.py Preferences/ConfigurationPages/TemplatesPage.py Preferences/ConfigurationPages/VcsPage.py Preferences/ConfigurationPages/ViewmanagerPage.py Preferences/ConfigurationPages/HelpDocumentationPage.py Preferences/ConfigurationPages/HelpViewersPage.py Preferences/ConfigurationPages/ProjectBrowserPage.py Preferences/ConfigurationPages/ProjectPage.py Preferences/ConfigurationPages/DebuggerPythonPage.py Preferences/ConfigurationPages/DebuggerRubyPage.py Preferences/ConfigurationPages/EditorAPIsPage.py Preferences/ConfigurationPages/EditorAutocompletionPage.py Preferences/ConfigurationPages/EditorCalltipsPage.py Preferences/ConfigurationPages/EditorGeneralPage.py Preferences/ConfigurationPages/EditorHighlightersPage.py Preferences/ConfigurationPages/EditorHighlightingStylesPage.py Tasks/TaskFilterConfigDialog.py QScintilla/Printer.py QScintilla/QsciScintillaCompat.py QScintilla/Editor.py QScintilla/Shell.py Tools/TrayStarter.py Globals/__init__.py Preferences/ConfigurationPages/ConfigurationPageBase.py Project/TranslationPropertiesDialog.py Project/UserPropertiesDialog.py Preferences/ConfigurationPages/GraphicsPage.py QScintilla/APIsManager.py E4Graphics/E4ArrowItem.py E4Graphics/E4GraphicsView.py Graphics/AssociationItem.py Graphics/ClassItem.py Graphics/UMLGraphicsView.py Graphics/UMLItem.py Graphics/UMLSceneSizeDialog.py Graphics/UMLDialog.py E4Graphics/__init__.py Graphics/PackageItem.py Graphics/ModuleItem.py patch_pyxml.py Debugger/DebuggerInterfacePython.py Debugger/DebuggerInterfaceRuby.py Debugger/DebuggerInterfaceNone.py Debugger/DebugClientCapabilities.py Debugger/DebugProtocol.py E4Gui/E4Completers.py Preferences/ProgramsDialog.py Project/CreateDialogCodeDialog.py Project/NewDialogClassDialog.py Preferences/ConfigurationPages/EditorTypingPage.py QScintilla/Lexers/__init__.py QScintilla/Lexers/Lexer.py QScintilla/Lexers/LexerBash.py QScintilla/Lexers/LexerBatch.py QScintilla/Lexers/LexerCPP.py QScintilla/Lexers/LexerCSS.py QScintilla/Lexers/LexerCSharp.py QScintilla/Lexers/LexerD.py QScintilla/Lexers/LexerDiff.py QScintilla/Lexers/LexerHTML.py QScintilla/Lexers/LexerIDL.py QScintilla/Lexers/LexerJava.py QScintilla/Lexers/LexerJavaScript.py QScintilla/Lexers/LexerLua.py QScintilla/Lexers/LexerMakefile.py QScintilla/Lexers/LexerPOV.py QScintilla/Lexers/LexerPerl.py QScintilla/Lexers/LexerProperties.py QScintilla/Lexers/LexerPython.py QScintilla/Lexers/LexerRuby.py QScintilla/Lexers/LexerSQL.py QScintilla/Lexers/LexerTeX.py QScintilla/TypingCompleters/__init__.py QScintilla/TypingCompleters/CompleterBase.py QScintilla/TypingCompleters/CompleterPython.py QScintilla/Lexers/LexerVHDL.py QScintilla/Lexers/LexerCMake.py QScintilla/TypingCompleters/CompleterRuby.py VCS/StatusMonitorLed.py PluginManager/__init__.py PluginManager/PluginManager.py PluginManager/PluginExceptions.py Plugins/__init__.py Plugins/PluginAbout.py Plugins/PluginVmTabview.py Plugins/PluginVmListspace.py Plugins/PluginVmWorkspace.py PluginManager/PluginInfoDialog.py PluginManager/PluginDetailsDialog.py Plugins/PluginTabnanny.py Plugins/PluginSyntaxChecker.py Plugins/PluginEricapi.py Plugins/PluginEricdoc.py Plugins/DocumentationPlugins/__init__.py Plugins/DocumentationPlugins/Ericdoc/__init__.py Plugins/DocumentationPlugins/Ericapi/__init__.py Plugins/DocumentationPlugins/Ericapi/EricapiConfigDialog.py Plugins/DocumentationPlugins/Ericdoc/EricdocConfigDialog.py Plugins/DocumentationPlugins/Ericapi/EricapiExecDialog.py Plugins/DocumentationPlugins/Ericdoc/EricdocExecDialog.py PluginManager/PluginInstallDialog.py PluginManager/PluginUninstallDialog.py Plugins/VcsPlugins/__init__.py Plugins/PluginVcsSubversion.py Plugins/PluginVcsPySvn.py Plugins/VcsPlugins/vcsSubversion/subversion.py Plugins/VcsPlugins/vcsSubversion/__init__.py Plugins/VcsPlugins/vcsSubversion/ProjectHelper.py Plugins/VcsPlugins/vcsSubversion/ProjectBrowserHelper.py Plugins/VcsPlugins/vcsSubversion/SvnDialog.py Plugins/VcsPlugins/vcsSubversion/SvnNewProjectOptionsDialog.py Plugins/VcsPlugins/vcsSubversion/Config.py Plugins/VcsPlugins/vcsSubversion/SvnCommitDialog.py Plugins/VcsPlugins/vcsSubversion/SvnTagDialog.py Plugins/VcsPlugins/vcsSubversion/SvnSwitchDialog.py Plugins/VcsPlugins/vcsSubversion/SvnMergeDialog.py Plugins/VcsPlugins/vcsSubversion/SvnOptionsDialog.py Plugins/VcsPlugins/vcsSubversion/SvnCommandDialog.py Plugins/VcsPlugins/vcsSubversion/SvnTagBranchListDialog.py Plugins/VcsPlugins/vcsSubversion/SvnCopyDialog.py Plugins/VcsPlugins/vcsSubversion/SvnRevisionSelectionDialog.py Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py Plugins/VcsPlugins/vcsSubversion/SvnDiffDialog.py Plugins/VcsPlugins/vcsSubversion/SvnLogDialog.py Plugins/VcsPlugins/vcsSubversion/SvnPropSetDialog.py Plugins/VcsPlugins/vcsSubversion/SvnPropListDialog.py Plugins/VcsPlugins/vcsSubversion/SvnBlameDialog.py Plugins/VcsPlugins/vcsSubversion/SvnStatusMonitorThread.py Plugins/VcsPlugins/vcsSubversion/SvnUrlSelectionDialog.py Plugins/VcsPlugins/vcsPySvn/subversion.py Plugins/VcsPlugins/vcsPySvn/__init__.py Plugins/VcsPlugins/vcsPySvn/SvnStatusMonitorThread.py Plugins/VcsPlugins/vcsPySvn/ProjectBrowserHelper.py Plugins/VcsPlugins/vcsPySvn/ProjectHelper.py Plugins/VcsPlugins/vcsPySvn/SvnLoginDialog.py Plugins/VcsPlugins/vcsPySvn/SvnDialog.py Plugins/VcsPlugins/vcsPySvn/SvnNewProjectOptionsDialog.py Plugins/VcsPlugins/vcsPySvn/SvnOptionsDialog.py Plugins/VcsPlugins/vcsPySvn/Config.py Plugins/VcsPlugins/vcsPySvn/SvnCommitDialog.py Plugins/VcsPlugins/vcsPySvn/SvnTagDialog.py Plugins/VcsPlugins/vcsPySvn/SvnSwitchDialog.py Plugins/VcsPlugins/vcsPySvn/SvnMergeDialog.py Plugins/VcsPlugins/vcsPySvn/SvnDialogMixin.py Plugins/VcsPlugins/vcsPySvn/SvnPropSetDialog.py Plugins/VcsPlugins/vcsPySvn/SvnCopyDialog.py Plugins/VcsPlugins/vcsPySvn/SvnPropDelDialog.py Plugins/VcsPlugins/vcsPySvn/SvnRevisionSelectionDialog.py Plugins/VcsPlugins/vcsPySvn/SvnPropListDialog.py Plugins/VcsPlugins/vcsPySvn/SvnTagBranchListDialog.py Plugins/VcsPlugins/vcsPySvn/SvnLogDialog.py Plugins/VcsPlugins/vcsPySvn/SvnDiffDialog.py Plugins/VcsPlugins/vcsPySvn/SvnUtilities.py Plugins/VcsPlugins/vcsPySvn/SvnConst.py Plugins/VcsPlugins/vcsPySvn/SvnStatusDialog.py Plugins/VcsPlugins/vcsPySvn/SvnBlameDialog.py Plugins/VcsPlugins/vcsPySvn/SvnCommandDialog.py Plugins/VcsPlugins/vcsPySvn/SvnInfoDialog.py Plugins/VcsPlugins/vcsPySvn/SvnRelocateDialog.py Plugins/VcsPlugins/vcsPySvn/SvnUrlSelectionDialog.py Plugins/AboutPlugin/__init__.py Plugins/AboutPlugin/AboutDialog.py Plugins/CheckerPlugins/__init__.py Plugins/CheckerPlugins/Tabnanny/__init__.py Plugins/CheckerPlugins/SyntaxChecker/__init__.py Plugins/CheckerPlugins/Tabnanny/Tabnanny.py Plugins/CheckerPlugins/Tabnanny/TabnannyDialog.py Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py Plugins/ViewManagerPlugins/__init__.py Plugins/ViewManagerPlugins/Tabview/__init__.py Plugins/ViewManagerPlugins/Listspace/__init__.py Plugins/ViewManagerPlugins/Workspace/__init__.py Plugins/ViewManagerPlugins/Tabview/Tabview.py Plugins/ViewManagerPlugins/Listspace/Listspace.py Plugins/ViewManagerPlugins/Workspace/Workspace.py Plugins/WizardPlugins/__init__.py Plugins/WizardPlugins/ColorDialogWizard/ColorDialogWizardDialog.py Plugins/WizardPlugins/ColorDialogWizard/__init__.py Plugins/PluginWizardQColorDialog.py Plugins/WizardPlugins/FileDialogWizard/FileDialogWizardDialog.py Plugins/WizardPlugins/FileDialogWizard/__init__.py Plugins/PluginWizardQFileDialog.py Plugins/WizardPlugins/FontDialogWizard/FontDialogWizardDialog.py Plugins/WizardPlugins/FontDialogWizard/__init__.py Plugins/PluginWizardQFontDialog.py Plugins/WizardPlugins/InputDialogWizard/InputDialogWizardDialog.py Plugins/WizardPlugins/InputDialogWizard/__init__.py Plugins/PluginWizardQInputDialog.py Plugins/WizardPlugins/MessageBoxWizard/MessageBoxWizardDialog.py Plugins/WizardPlugins/MessageBoxWizard/__init__.py Plugins/PluginWizardQMessageBox.py Plugins/WizardPlugins/QRegExpWizard/QRegExpWizardDialog.py Plugins/WizardPlugins/QRegExpWizard/QRegExpWizardCharactersDialog.py Plugins/WizardPlugins/QRegExpWizard/QRegExpWizardRepeatDialog.py Plugins/WizardPlugins/QRegExpWizard/__init__.py Plugins/WizardPlugins/PyRegExpWizard/__init__.py Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardCharactersDialog.py Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardRepeatDialog.py Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardDialog.py Plugins/PluginWizardQRegExp.py Plugins/PluginWizardPyRegExp.py Project/NewPythonPackageDialog.py QScintilla/Exporters/__init__.py QScintilla/Exporters/ExporterHTML.py QScintilla/Exporters/ExporterBase.py Preferences/ConfigurationPages/EditorExportersPage.py QScintilla/Exporters/ExporterRTF.py QScintilla/Exporters/ExporterPDF.py QScintilla/Exporters/ExporterTEX.py DebugClients/Python/DebugConfig.py Preferences/ConfigurationPages/PluginManagerPage.py PluginManager/PluginRepositoryDialog.py Plugins/VcsPlugins/vcsPySvn/SvnRepoBrowserDialog.py Plugins/VcsPlugins/vcsSubversion/SvnRepoBrowserDialog.py Plugins/VcsPlugins/vcsPySvn/SvnLogBrowserDialog.py Plugins/VcsPlugins/vcsSubversion/SvnLogBrowserDialog.py Plugins/VcsPlugins/vcsPySvn/ConfigurationPage/SubversionPage.py Plugins/VcsPlugins/vcsPySvn/ConfigurationPage/__init__.py Plugins/VcsPlugins/vcsSubversion/ConfigurationPage/__init__.py Plugins/VcsPlugins/vcsSubversion/ConfigurationPage/SubversionPage.py Plugins/VcsPlugins/vcsSubversion/SvnUtilities.py QScintilla/MiniEditor.py E4Gui/E4ToolBarManager.py E4Gui/E4ToolBarDialog.py MultiProject/__init__.py MultiProject/MultiProject.py MultiProject/PropertiesDialog.py MultiProject/AddProjectDialog.py MultiProject/MultiProjectBrowser.py Preferences/ConfigurationPages/MultiProjectPage.py Plugins/ViewManagerPlugins/MdiArea/__init__.py Plugins/ViewManagerPlugins/MdiArea/MdiArea.py Plugins/PluginVmMdiArea.py QScintilla/Lexers/LexerTCL.py Graphics/SvgDiagram.py KdeQt/KQMainWindow.py Project/ProjectBrowserFlags.py Preferences/ConfigurationPages/EditorFilePage.py Preferences/ConfigurationPages/EditorSearchPage.py Plugins/VcsPlugins/vcsSubversion/SvnRelocateDialog.py Helpviewer/HelpBrowserWV.py Helpviewer/DownloadDialog.py UI/AuthenticationDialog.py QScintilla/ShellHistoryDialog.py Preferences/ConfigurationPages/HelpAppearancePage.py E4Gui/E4SqueezeLabels.py Preferences/ConfigurationPages/EditorAutocompletionQScintillaPage.py Preferences/ConfigurationPages/EditorCalltipsQScintillaPage.py Preferences/ConfigurationPages/EditorPropertiesPage.py Preferences/ConfigurationPages/EditorStylesPage.py Preferences/ConfigurationPages/DebuggerGeneralPage.py Preferences/ConfigurationPages/InterfacePage.py QScintilla/Lexers/LexerPascal.py QScintilla/Lexers/LexerFortran.py QScintilla/Lexers/LexerFortran77.py QScintilla/Lexers/LexerXML.py QScintilla/Lexers/LexerPostScript.py QScintilla/Lexers/LexerYAML.py QScintilla/SearchReplaceWidget.py E4Gui/E4ToolBox.py ThirdParty/__init__.py ThirdParty/CharDet/__init__.py ThirdParty/CharDet/chardet/gb2312freq.py ThirdParty/CharDet/chardet/langthaimodel.py ThirdParty/CharDet/chardet/escsm.py ThirdParty/CharDet/chardet/sjisprober.py ThirdParty/CharDet/chardet/mbcsgroupprober.py ThirdParty/CharDet/chardet/jpcntx.py ThirdParty/CharDet/chardet/big5freq.py ThirdParty/CharDet/chardet/euckrfreq.py ThirdParty/CharDet/chardet/jisfreq.py ThirdParty/CharDet/chardet/langcyrillicmodel.py ThirdParty/CharDet/chardet/universaldetector.py ThirdParty/CharDet/chardet/sbcsgroupprober.py ThirdParty/CharDet/chardet/chardistribution.py ThirdParty/CharDet/chardet/langgreekmodel.py ThirdParty/CharDet/chardet/codingstatemachine.py ThirdParty/CharDet/chardet/hebrewprober.py ThirdParty/CharDet/chardet/langbulgarianmodel.py ThirdParty/CharDet/chardet/big5prober.py ThirdParty/CharDet/chardet/euctwprober.py ThirdParty/CharDet/chardet/euckrprober.py ThirdParty/CharDet/chardet/constants.py ThirdParty/CharDet/chardet/euctwfreq.py ThirdParty/CharDet/chardet/langhungarianmodel.py ThirdParty/CharDet/chardet/latin1prober.py ThirdParty/CharDet/chardet/utf8prober.py ThirdParty/CharDet/chardet/escprober.py ThirdParty/CharDet/chardet/sbcharsetprober.py ThirdParty/CharDet/chardet/charsetprober.py ThirdParty/CharDet/chardet/charsetgroupprober.py ThirdParty/CharDet/chardet/mbcssm.py ThirdParty/CharDet/chardet/gb2312prober.py ThirdParty/CharDet/chardet/__init__.py ThirdParty/CharDet/chardet/langhebrewmodel.py ThirdParty/CharDet/chardet/mbcharsetprober.py ThirdParty/CharDet/chardet/eucjpprober.py Preferences/ConfigurationPages/NetworkPage.py QScintilla/Lexers/LexerContainer.py QScintilla/Lexers/LexerPygments.py E4XML/ProjectWriter.py E4XML/SessionWriter.py E4XML/ProjectHandler.py E4XML/ShortcutsWriter.py E4XML/DebuggerPropertiesWriter.py E4XML/TemplatesWriter.py E4XML/DebuggerPropertiesHandler.py E4XML/ShortcutsHandler.py E4XML/TasksHandler.py E4XML/Config.py E4XML/__init__.py E4XML/TasksWriter.py E4XML/TemplatesHandler.py E4XML/SessionHandler.py E4XML/UserProjectWriter.py E4XML/UserProjectHandler.py E4XML/PluginRepositoryHandler.py E4XML/MultiProjectWriter.py E4XML/MultiProjectHandler.py E4XML/HighlightingStylesWriter.py E4XML/HighlightingStylesHandler.py E4XML/XMLUtilities.py E4XML/XMLHandlerBase.py E4XML/XMLWriterBase.py E4XML/XMLMessageDialog.py E4XML/XMLEntityResolver.py E4XML/XMLErrorHandler.py QScintilla/SpellChecker.py Preferences/ConfigurationPages/EditorSpellCheckingPage.py QScintilla/SpellCheckingDialog.py Project/SpellingPropertiesDialog.py E4Gui/E4SideBar.py Project/LexerAssociationDialog.py ThirdParty/Pygments/__init__.py ThirdParty/Pygments/pygments/style.py ThirdParty/Pygments/pygments/scanner.py ThirdParty/Pygments/pygments/cmdline.py ThirdParty/Pygments/pygments/filter.py ThirdParty/Pygments/pygments/console.py ThirdParty/Pygments/pygments/unistring.py ThirdParty/Pygments/pygments/lexer.py ThirdParty/Pygments/pygments/token.py ThirdParty/Pygments/pygments/util.py ThirdParty/Pygments/pygments/formatter.py ThirdParty/Pygments/pygments/__init__.py ThirdParty/Pygments/pygments/plugin.py ThirdParty/Pygments/pygments/filters/__init__.py ThirdParty/Pygments/pygments/lexers/agile.py ThirdParty/Pygments/pygments/lexers/_mapping.py ThirdParty/Pygments/pygments/lexers/functional.py ThirdParty/Pygments/pygments/lexers/compiled.py ThirdParty/Pygments/pygments/lexers/_clbuiltins.py ThirdParty/Pygments/pygments/lexers/other.py ThirdParty/Pygments/pygments/lexers/math.py ThirdParty/Pygments/pygments/lexers/special.py ThirdParty/Pygments/pygments/lexers/text.py ThirdParty/Pygments/pygments/lexers/asm.py ThirdParty/Pygments/pygments/lexers/_vimbuiltins.py ThirdParty/Pygments/pygments/lexers/_phpbuiltins.py ThirdParty/Pygments/pygments/lexers/web.py ThirdParty/Pygments/pygments/lexers/templates.py ThirdParty/Pygments/pygments/lexers/dotnet.py ThirdParty/Pygments/pygments/lexers/_luabuiltins.py ThirdParty/Pygments/pygments/lexers/__init__.py ThirdParty/Pygments/pygments/formatters/_mapping.py ThirdParty/Pygments/pygments/formatters/terminal.py ThirdParty/Pygments/pygments/formatters/other.py ThirdParty/Pygments/pygments/formatters/bbcode.py ThirdParty/Pygments/pygments/formatters/terminal256.py ThirdParty/Pygments/pygments/formatters/img.py ThirdParty/Pygments/pygments/formatters/rtf.py ThirdParty/Pygments/pygments/formatters/svg.py ThirdParty/Pygments/pygments/formatters/html.py ThirdParty/Pygments/pygments/formatters/__init__.py ThirdParty/Pygments/pygments/formatters/latex.py ThirdParty/Pygments/pygments/styles/native.py ThirdParty/Pygments/pygments/styles/bw.py ThirdParty/Pygments/pygments/styles/vs.py ThirdParty/Pygments/pygments/styles/emacs.py ThirdParty/Pygments/pygments/styles/colorful.py ThirdParty/Pygments/pygments/styles/pastie.py ThirdParty/Pygments/pygments/styles/murphy.py ThirdParty/Pygments/pygments/styles/perldoc.py ThirdParty/Pygments/pygments/styles/manni.py ThirdParty/Pygments/pygments/styles/borland.py ThirdParty/Pygments/pygments/styles/trac.py ThirdParty/Pygments/pygments/styles/default.py ThirdParty/Pygments/pygments/styles/vim.py ThirdParty/Pygments/pygments/styles/autumn.py ThirdParty/Pygments/pygments/styles/__init__.py ThirdParty/Pygments/pygments/styles/fruity.py ThirdParty/Pygments/pygments/styles/friendly.py ThirdParty/Pygments/pygments/styles/tango.py DocumentationTools/QtHelpGenerator.py Helpviewer/HelpTocWidget.py Helpviewer/QtHelpDocumentationDialog.py Helpviewer/QtHelpFiltersDialog.py Helpviewer/HelpIndexWidget.py Helpviewer/HelpTopicDialog.py Helpviewer/HelpSearchWidget.py Helpviewer/HelpDocsInstaller.py DebugClients/Python/coverage/data.py DebugClients/Python/coverage/cmdline.py DebugClients/Python/coverage/collector.py DebugClients/Python/coverage/misc.py DebugClients/Python/coverage/control.py DebugClients/Python/coverage/__init__.py Debugger/DebuggerInterfacePython3.py Preferences/ConfigurationPages/DebuggerPython3Page.py DebugClients/Python3/AsyncFile.py DebugClients/Python3/__init__.py DebugClients/Python3/DebugProtocol.py DebugClients/Python3/AsyncIO.py DebugClients/Python3/DebugClientCapabilities.py DebugClients/Python3/DebugConfig.py DebugClients/Python3/getpass.py DebugClients/Python3/DebugBase.py DebugClients/Python3/DebugClientBase.py DebugClients/Python3/DebugClient.py DebugClients/Python3/FlexCompleter.py DebugClients/Python3/eric4dbgstub.py DebugClients/Python3/PyProfile.py DebugClients/Python3/DebugThread.py DebugClients/Python3/DebugClientThreads.py DebugClients/Python3/DCTestResult.py E4Gui/E4LineEdit.py Helpviewer/HelpWebSearchWidget.py ThirdParty/SimpleJSON/__init__.py ThirdParty/SimpleJSON/simplejson/__init__.py ThirdParty/SimpleJSON/simplejson/decoder.py ThirdParty/SimpleJSON/simplejson/encoder.py ThirdParty/SimpleJSON/simplejson/scanner.py ThirdParty/SimpleJSON/simplejson/tool.py Helpviewer/HelpClearPrivateDataDialog.py E4Gui/E4TableView.py E4Network/__init__.py E4Network/E4NetworkMonitor.py E4Network/E4NetworkHeaderDetailsDialog.py Helpviewer/HelpLanguagesDialog.py DebugClients/Python/coverage/html.py DebugClients/Python/coverage/report.py DebugClients/Python/coverage/templite.py DebugClients/Python/coverage/codeunit.py DebugClients/Python/coverage/summary.py DebugClients/Python/coverage/files.py DebugClients/Python/coverage/annotate.py DebugClients/Python/coverage/parser.py DebugClients/Python/coverage/execfile.py Helpviewer/CookieJar/__init__.py Helpviewer/CookieJar/CookiesExceptionsDialog.py Helpviewer/CookieJar/CookieModel.py Helpviewer/CookieJar/CookiesDialog.py Helpviewer/CookieJar/CookieJar.py Helpviewer/CookieJar/CookiesConfigurationDialog.py Helpviewer/CookieJar/CookieExceptionsModel.py Helpviewer/CookieJar/CookieDetailsDialog.py Helpviewer/OpenSearch/__init__.py E4Gui/E4ListView.py Helpviewer/OpenSearch/OpenSearchEngineAction.py Helpviewer/OpenSearch/OpenSearchManager.py Helpviewer/OpenSearch/OpenSearchDefaultEngines.py Helpviewer/OpenSearch/OpenSearchEngine.py Helpviewer/OpenSearch/OpenSearchReader.py Helpviewer/OpenSearch/OpenSearchWriter.py Helpviewer/OpenSearch/OpenSearchDialog.py Helpviewer/OpenSearch/OpenSearchEngineModel.py SqlBrowser/__init__.py SqlBrowser/SqlConnectionWidget.py SqlBrowser/SqlBrowserWidget.py SqlBrowser/SqlBrowser.py SqlBrowser/SqlConnectionDialog.py Helpviewer/Bookmarks/__init__.py Helpviewer/Bookmarks/BookmarkNode.py Helpviewer/Bookmarks/XbelWriter.py Helpviewer/Bookmarks/XbelReader.py Helpviewer/Bookmarks/BookmarksModel.py Utilities/AutoSaver.py Helpviewer/Bookmarks/DefaultBookmarks.py Helpviewer/Bookmarks/BookmarksManager.py E4Gui/E4ModelMenu.py Helpviewer/Bookmarks/BookmarksMenu.py Helpviewer/Bookmarks/BookmarksToolBar.py Helpviewer/Bookmarks/AddBookmarkDialog.py E4Gui/E4TreeView.py Helpviewer/Bookmarks/BookmarksDialog.py Preferences/ConfigurationPages/HelpWebBrowserPage.py Helpviewer/HTMLResources.py Helpviewer/JavaScriptResources.py Helpviewer/SearchWidget.py Helpviewer/History/__init__.py Helpviewer/History/HistoryManager.py Helpviewer/History/HistoryModel.py Helpviewer/History/HistoryFilterModel.py Helpviewer/History/HistoryTreeModel.py Helpviewer/History/HistoryMenu.py Helpviewer/History/HistoryDialog.py Helpviewer/History/HistoryCompleter.py IconEditor/__init__.py IconEditor/IconSizeDialog.py IconEditor/cursors/cursors_rc.py IconEditor/cursors/__init__.py IconEditor/IconEditorGrid.py IconEditor/IconEditorWindow.py IconEditor/IconZoomDialog.py IconEditor/IconEditorPalette.py DebugClients/Python/coverage/backward.py DebugClients/Python3/coverage/__init__.py DebugClients/Python3/coverage/annotate.py DebugClients/Python3/coverage/backward.py DebugClients/Python3/coverage/cmdline.py DebugClients/Python3/coverage/codeunit.py DebugClients/Python3/coverage/collector.py DebugClients/Python3/coverage/control.py DebugClients/Python3/coverage/data.py DebugClients/Python3/coverage/execfile.py DebugClients/Python3/coverage/files.py DebugClients/Python3/coverage/html.py DebugClients/Python3/coverage/misc.py DebugClients/Python3/coverage/parser.py DebugClients/Python3/coverage/report.py DebugClients/Python3/coverage/summary.py DebugClients/Python3/coverage/templite.py E4Gui/E4ModelToolBar.py E4Gui/E4TreeSortFilterProxyModel.py ThirdParty/Pygments/pygments/lexers/parsers.py Helpviewer/Passwords/__init__.py Helpviewer/Passwords/PasswordManager.py Helpviewer/Passwords/PasswordModel.py Helpviewer/Passwords/PasswordsDialog.py Utilities/uic.py Helpviewer/Network/__init__.py Helpviewer/Network/SchemeAccessHandler.py Helpviewer/Network/NetworkReply.py Helpviewer/Network/NetworkProtocolUnknownErrorReply.py Helpviewer/Network/NetworkDiskCache.py Helpviewer/Network/NetworkAccessManagerProxy.py Helpviewer/Network/NetworkAccessManager.py Helpviewer/Network/QtHelpAccessHandler.py Helpviewer/Network/PyrcAccessHandler.py Helpviewer/Network/AboutAccessHandler.py Helpviewer/AdBlock/__init__.py Helpviewer/AdBlock/AdBlockSubscription.py Helpviewer/AdBlock/AdBlockRule.py Helpviewer/AdBlock/AdBlockBlockedNetworkReply.py Helpviewer/AdBlock/AdBlockManager.py Helpviewer/AdBlock/AdBlockAccessHandler.py Helpviewer/AdBlock/AdBlockDialog.py Helpviewer/AdBlock/AdBlockModel.py Helpviewer/AdBlock/AdBlockNetwork.py Helpviewer/AdBlock/AdBlockPage.py compileUiFiles.py ThirdParty/CharDet/chardet/test.py Helpviewer/OpenSearch/OpenSearchEditDialog.py E4Network/E4NetworkProxyFactory.py ThirdParty/Pygments/pygments/lexers/_asybuiltins.py ThirdParty/Pygments/pygments/styles/monokai.py Preferences/ConfigurationPages/TrayStarterPage.py eric4_compare.py eric4_configure.py eric4_diff.py eric4_editor.py eric4_iconeditor.py eric4_plugininstall.py eric4_pluginrepository.py eric4_pluginuninstall.py eric4_qregexp.py eric4_re.py eric4_sqlbrowser.py eric4_tray.py eric4_trpreviewer.py eric4_uipreviewer.py eric4_unittest.py eric4_webbrowser.py eric4_compare.pyw eric4_configure.pyw eric4_diff.pyw eric4_editor.pyw eric4_iconeditor.pyw eric4_plugininstall.pyw eric4_pluginrepository.pyw eric4_pluginuninstall.pyw eric4_qregexp.pyw eric4_re.pyw eric4_sqlbrowser.pyw eric4_tray.pyw eric4_trpreviewer.pyw eric4_uipreviewer.pyw eric4_unittest.pyw eric4_webbrowser.pyw eric4_api.py eric4_doc.py QScintilla/Lexers/LexerMatlab.py QScintilla/Lexers/LexerOctave.py Preferences/ConfigurationPages/EditorKeywordsPage.py ThirdParty/Pygments/pygments/lexers/hdl.py ThirdParty/Pygments/pygments/lexers/sql.py ThirdParty/Pygments/pygments/lexers/_postgres_builtins.py ThirdParty/Pygments/pygments/lexers/jvm.py ThirdParty/Pygments/pygments/lexers/_scilab_builtins.py ThirdParty/Pygments/pygments/lexers/shell.py ThirdParty/Pygments/pygments/styles/rrt.py UI/ErrorLogDialog.py Plugins/VcsPlugins/vcsPySvn/SvnChangeListsDialog.py Plugins/VcsPlugins/vcsSubversion/SvnChangeListsDialog.py Helpviewer/Network/EmptyNetworkReply.py
    PyUnit/UnittestDialog.ui
    PyUnit/UnittestStacktraceDialog.ui
    UI/DiffDialog.ui
    UI/CompareDialog.ui
    Debugger/EditBreakpointDialog.ui
    Debugger/EditWatchpointDialog.ui
    Debugger/ExceptionsFilterDialog.ui
    Debugger/StartDebugDialog.ui
    Debugger/StartCoverageDialog.ui
    Debugger/StartRunDialog.ui
    Debugger/StartProfileDialog.ui
    Debugger/VariableDetailDialog.ui
    Debugger/VariablesFilterDialog.ui
    Preferences/ConfigurationPages/ProjectPage.ui
    Preferences/ConfigurationPages/VcsPage.ui
    Preferences/ConfigurationPages/PrinterPage.ui
    Preferences/ConfigurationPages/TemplatesPage.ui
    Preferences/ConfigurationPages/PythonPage.ui
    Preferences/ConfigurationPages/EmailPage.ui
    Preferences/ConfigurationPages/CorbaPage.ui
    Preferences/ConfigurationPages/ShellPage.ui
    Preferences/ConfigurationPages/ApplicationPage.ui
    Preferences/ConfigurationPages/TasksPage.ui
    Preferences/ConfigurationPages/ViewmanagerPage.ui
    Preferences/ConfigurationPages/QtPage.ui
    Preferences/ConfigurationPages/IconsPage.ui
    Preferences/ConfigurationPages/HelpViewersPage.ui
    Preferences/ConfigurationPages/HelpDocumentationPage.ui
    Preferences/ConfigurationPages/DebuggerRubyPage.ui
    Preferences/ConfigurationPages/DebuggerPythonPage.ui
    Preferences/ConfigurationPages/EditorCalltipsPage.ui
    Preferences/ConfigurationPages/EditorGeneralPage.ui
    Preferences/ConfigurationPages/EditorAutocompletionPage.ui
    Preferences/ConfigurationPages/EditorAPIsPage.ui
    Preferences/ConfigurationPages/EditorHighlightersPage.ui
    Preferences/ConfigurationPages/EditorHighlightingStylesPage.ui
    Preferences/ViewProfileDialog.ui
    Preferences/ShortcutsDialog.ui
    Preferences/ShortcutDialog.ui
    Preferences/ToolConfigurationDialog.ui
    UI/DeleteFilesConfirmationDialog.ui
    UI/EmailDialog.ui
    UI/FindFileDialog.ui
    UI/FindFileNameDialog.ui
    DataViews/CodeMetricsDialog.ui
    DataViews/PyCoverageDialog.ui
    DataViews/PyProfileDialog.ui
    Tasks/TaskPropertiesDialog.ui
    Templates/TemplatePropertiesDialog.ui
    Templates/TemplateSingleVariableDialog.ui
    Project/AddFileDialog.ui
    Project/AddFoundFilesDialog.ui
    Project/AddLanguageDialog.ui
    Project/PropertiesDialog.ui
    Project/AddDirectoryDialog.ui
    Project/FiletypeAssociationDialog.ui
    Project/DebuggerPropertiesDialog.ui
    VCS/RepositoryInfoDialog.ui
    VCS/CommandOptionsDialog.ui
    ViewManager/BookmarkedFilesDialog.ui
    QScintilla/GotoDialog.ui
    QScintilla/ZoomDialog.ui
    Graphics/ZoomDialog.ui
    Preferences/ToolGroupConfigurationDialog.ui
    Preferences/ConfigurationPages/ProjectBrowserPage.ui
    Preferences/ConfigurationPages/IconsPreviewDialog.ui
    Tasks/TaskFilterConfigDialog.ui
    Project/TranslationPropertiesDialog.ui
    Project/UserPropertiesDialog.ui
    Preferences/ConfigurationPages/GraphicsPage.ui
    Graphics/UMLSceneSizeDialog.ui
    Preferences/ProgramsDialog.ui
    Project/CreateDialogCodeDialog.ui
    Project/NewDialogClassDialog.ui
    Preferences/ConfigurationPages/EditorTypingPage.ui
    PluginManager/PluginInfoDialog.ui
    PluginManager/PluginDetailsDialog.ui
    Plugins/DocumentationPlugins/Ericapi/EricapiConfigDialog.ui
    Plugins/DocumentationPlugins/Ericdoc/EricdocConfigDialog.ui
    Plugins/DocumentationPlugins/Ericapi/EricapiExecDialog.ui
    Plugins/DocumentationPlugins/Ericdoc/EricdocExecDialog.ui
    PluginManager/PluginInstallDialog.ui
    PluginManager/PluginUninstallDialog.ui
    Plugins/VcsPlugins/vcsSubversion/SvnDialog.ui
    Plugins/VcsPlugins/vcsSubversion/SvnNewProjectOptionsDialog.ui
    Plugins/VcsPlugins/vcsSubversion/SvnCommitDialog.ui
    Plugins/VcsPlugins/vcsSubversion/SvnTagDialog.ui
    Plugins/VcsPlugins/vcsSubversion/SvnSwitchDialog.ui
    Plugins/VcsPlugins/vcsSubversion/SvnMergeDialog.ui
    Plugins/VcsPlugins/vcsSubversion/SvnOptionsDialog.ui
    Plugins/VcsPlugins/vcsSubversion/SvnCommandDialog.ui
    Plugins/VcsPlugins/vcsSubversion/SvnTagBranchListDialog.ui
    Plugins/VcsPlugins/vcsSubversion/SvnCopyDialog.ui
    Plugins/VcsPlugins/vcsSubversion/SvnPropListDialog.ui
    Plugins/VcsPlugins/vcsSubversion/SvnPropSetDialog.ui
    Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.ui
    Plugins/VcsPlugins/vcsSubversion/SvnRevisionSelectionDialog.ui
    Plugins/VcsPlugins/vcsSubversion/SvnLogDialog.ui
    Plugins/VcsPlugins/vcsSubversion/SvnDiffDialog.ui
    Plugins/VcsPlugins/vcsSubversion/SvnBlameDialog.ui
    Plugins/VcsPlugins/vcsSubversion/SvnUrlSelectionDialog.ui
    Plugins/VcsPlugins/vcsPySvn/SvnLoginDialog.ui
    Plugins/VcsPlugins/vcsPySvn/SvnDialog.ui
    Plugins/VcsPlugins/vcsPySvn/SvnNewProjectOptionsDialog.ui
    Plugins/VcsPlugins/vcsPySvn/SvnOptionsDialog.ui
    Plugins/VcsPlugins/vcsPySvn/SvnCommitDialog.ui
    Plugins/VcsPlugins/vcsPySvn/SvnTagDialog.ui
    Plugins/VcsPlugins/vcsPySvn/SvnSwitchDialog.ui
    Plugins/VcsPlugins/vcsPySvn/SvnMergeDialog.ui
    Plugins/VcsPlugins/vcsPySvn/SvnPropSetDialog.ui
    Plugins/VcsPlugins/vcsPySvn/SvnCopyDialog.ui
    Plugins/VcsPlugins/vcsPySvn/SvnPropDelDialog.ui
    Plugins/VcsPlugins/vcsPySvn/SvnRevisionSelectionDialog.ui
    Plugins/VcsPlugins/vcsPySvn/SvnPropListDialog.ui
    Plugins/VcsPlugins/vcsPySvn/SvnTagBranchListDialog.ui
    Plugins/VcsPlugins/vcsPySvn/SvnLogDialog.ui
    Plugins/VcsPlugins/vcsPySvn/SvnDiffDialog.ui
    Plugins/VcsPlugins/vcsPySvn/SvnStatusDialog.ui
    Plugins/VcsPlugins/vcsPySvn/SvnBlameDialog.ui
    Plugins/VcsPlugins/vcsPySvn/SvnCommandDialog.ui
    Plugins/VcsPlugins/vcsPySvn/SvnRelocateDialog.ui
    Plugins/VcsPlugins/vcsPySvn/SvnUrlSelectionDialog.ui
    Plugins/AboutPlugin/AboutDialog.ui
    Plugins/CheckerPlugins/Tabnanny/TabnannyDialog.ui
    Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.ui
    Plugins/WizardPlugins/ColorDialogWizard/ColorDialogWizardDialog.ui
    Plugins/WizardPlugins/FileDialogWizard/FileDialogWizardDialog.ui
    Plugins/WizardPlugins/FontDialogWizard/FontDialogWizardDialog.ui
    Plugins/WizardPlugins/InputDialogWizard/InputDialogWizardDialog.ui
    Plugins/WizardPlugins/MessageBoxWizard/MessageBoxWizardDialog.ui
    Plugins/WizardPlugins/QRegExpWizard/QRegExpWizardDialog.ui
    Plugins/WizardPlugins/QRegExpWizard/QRegExpWizardCharactersDialog.ui
    Plugins/WizardPlugins/QRegExpWizard/QRegExpWizardRepeatDialog.ui
    Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardCharactersDialog.ui
    Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardRepeatDialog.ui
    Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardDialog.ui
    Project/NewPythonPackageDialog.ui
    Preferences/ConfigurationPages/EditorExportersPage.ui
    Preferences/ConfigurationPages/PluginManagerPage.ui
    PluginManager/PluginRepositoryDialog.ui
    Plugins/VcsPlugins/vcsPySvn/SvnRepoBrowserDialog.ui
    Plugins/VcsPlugins/vcsSubversion/SvnRepoBrowserDialog.ui
    Plugins/VcsPlugins/vcsPySvn/SvnLogBrowserDialog.ui
    Plugins/VcsPlugins/vcsSubversion/SvnLogBrowserDialog.ui
    Plugins/VcsPlugins/vcsPySvn/ConfigurationPage/SubversionPage.ui
    Plugins/VcsPlugins/vcsSubversion/ConfigurationPage/SubversionPage.ui
    E4Gui/E4ToolBarDialog.ui
    MultiProject/PropertiesDialog.ui
    MultiProject/AddProjectDialog.ui
    Preferences/ConfigurationPages/MultiProjectPage.ui
    Preferences/ConfigurationPages/EditorFilePage.ui
    Preferences/ConfigurationPages/EditorSearchPage.ui
    Plugins/VcsPlugins/vcsSubversion/SvnRelocateDialog.ui
    Helpviewer/DownloadDialog.ui
    UI/AuthenticationDialog.ui
    QScintilla/ShellHistoryDialog.ui
    Preferences/ConfigurationPages/HelpAppearancePage.ui
    Preferences/ConfigurationPages/EditorAutocompletionQScintillaPage.ui
    Preferences/ConfigurationPages/EditorCalltipsQScintillaPage.ui
    Preferences/ConfigurationPages/EditorPropertiesPage.ui
    Preferences/ConfigurationPages/EditorStylesPage.ui
    Preferences/ConfigurationPages/DebuggerGeneralPage.ui
    Preferences/ConfigurationPages/InterfacePage.ui
    QScintilla/ReplaceWidget.ui
    QScintilla/SearchWidget.ui
    Preferences/ViewProfileToolboxesDialog.ui
    Preferences/ConfigurationPages/NetworkPage.ui
    E4XML/XMLMessageDialog.ui
    Preferences/ConfigurationPages/EditorSpellCheckingPage.ui
    QScintilla/SpellCheckingDialog.ui
    Project/SpellingPropertiesDialog.ui
    Preferences/ViewProfileSidebarsDialog.ui
    Project/LexerAssociationDialog.ui
    Helpviewer/QtHelpDocumentationDialog.ui
    Helpviewer/QtHelpFiltersDialog.ui
    Helpviewer/HelpTopicDialog.ui
    Preferences/ConfigurationPages/DebuggerPython3Page.ui
    Helpviewer/HelpClearPrivateDataDialog.ui
    E4Network/E4NetworkMonitor.ui
    E4Network/E4NetworkHeaderDetailsDialog.ui
    Helpviewer/HelpLanguagesDialog.ui
    Helpviewer/CookieJar/CookiesExceptionsDialog.ui
    Helpviewer/CookieJar/CookiesDialog.ui
    Helpviewer/CookieJar/CookiesConfigurationDialog.ui
    Helpviewer/CookieJar/CookieDetailsDialog.ui
    Helpviewer/OpenSearch/OpenSearchDialog.ui
    SqlBrowser/SqlBrowserWidget.ui
    SqlBrowser/SqlConnectionDialog.ui
    Helpviewer/Bookmarks/AddBookmarkDialog.ui
    Helpviewer/Bookmarks/BookmarksDialog.ui
    Preferences/ConfigurationPages/HelpWebBrowserPage.ui
    Helpviewer/SearchWidget.ui
    Helpviewer/History/HistoryDialog.ui
    IconEditor/IconSizeDialog.ui
    IconEditor/IconZoomDialog.ui
    Helpviewer/Passwords/PasswordsDialog.ui
    Helpviewer/AdBlock/AdBlockDialog.ui
    Helpviewer/OpenSearch/OpenSearchEditDialog.ui
    Preferences/ConfigurationPages/TrayStarterPage.ui
    Preferences/ConfigurationPages/EditorKeywordsPage.ui
    UI/ErrorLogDialog.ui
    Plugins/VcsPlugins/vcsPySvn/SvnChangeListsDialog.ui
    Plugins/VcsPlugins/vcsSubversion/SvnChangeListsDialog.ui
    i18n/eric4_de.qm i18n/eric4_de.ts i18n/eric4_fr.qm i18n/eric4_fr.ts i18n/eric4_ru.qm i18n/eric4_ru.ts i18n/eric4_cs.qm i18n/eric4_cs.ts i18n/eric4_es.ts i18n/eric4_es.qm i18n/eric4_tr.ts i18n/eric4_tr.qm i18n/eric4_zh_CN.GB2312.ts i18n/eric4_zh_CN.GB2312.qm i18n/eric4_it.ts i18n/eric4_it.qm i18n/eric4_en.ts i18n/eric4_en.qm IconEditor/cursors/cursors.qrc icons CSSs DTDs Documentation/mod_python.pdf DesignerTemplates pixmaps README-eric4-doc.txt README-PyXML.txt THANKS eric4config.linux pylint.rc README-i18n.txt README-passive-debugging.txt README Documentation/Source Documentation/mod_python.odt eric4.e4p default.e4k Styles CodeTemplates Plugins/ViewManagerPlugins/Listspace/preview.png Plugins/ViewManagerPlugins/Tabview/preview.png Plugins/ViewManagerPlugins/Workspace/preview.png Documentation/eric4-plugin.odt Documentation/eric4-plugin.pdf Plugins/ViewManagerPlugins/MdiArea/preview.png Plugins/VcsPlugins/vcsPySvn/icons/pysvn.png Plugins/VcsPlugins/vcsSubversion/icons/subversion.png Plugins/VcsPlugins/vcsPySvn/icons/preferences-subversion.png Plugins/VcsPlugins/vcsSubversion/icons/preferences-subversion.png changelog APIs/Ruby/Ruby-1.8.7.api APIs/Python/zope-3.3.1.api APIs/Python/eric4.api APIs/Ruby/eric4.api LICENSE.GPL3 ThirdParty/CharDet/docs ThirdParty/CharDet/COPYING eric4.pth patches Dictionaries APIs/Python/zope-2.11.2.api APIs/Python/zope-2.10.7.api ThirdParty/Pygments/pygments/LICENSE ThirdParty/Pygments/pygments/CHANGES ThirdParty/Pygments/pygments/AUTHORS ThirdParty/Pygments/pygments/PKG-INFO ThirdParty/SimpleJSON/simplejson/LICENSE.txt ThirdParty/SimpleJSON/simplejson/PKG-INFO DebugClients/Python/coverage/htmlfiles IconEditor/cursors/aim-cursor.xpm IconEditor/cursors/colorpicker-cursor.xpm IconEditor/cursors/eraser-cursor.xpm IconEditor/cursors/fill-cursor.xpm IconEditor/cursors/paintbrush-cursor.xpm DebugClients/Python/coverage/doc DebugClients/Python3/coverage/doc DebugClients/Python3/coverage/htmlfiles Documentation/Help README-MacOSX.txt default_Mac.e4k eric4.py PySvn add checkout commit diff export global history log remove status --show-updates tag update standardLayout True ERIC4API ignoreDirectories CSSs DTDs DesignerTemplates Documentation Examples ThirdParty corbatests i18n icons pixmaps tests unittests Styles CodeTemplates .ropeproject .svn _svn .eric4project _eric4project patches Dictionaries coverage ignoreFilePatterns Ui_* languages Ruby Python outputFile APIs/%L/eric4.api useRecursion True ERIC4DOC CFBgColor #4fa4ff CFColor #ffffff Level1HeaderBgColor #4fa4ff Level1HeaderColor #ffffff Level2HeaderBgColor #00557f Level2HeaderColor #ffffff LinkColor #aa5500 cssFile CSSs/default.css ignoreDirectories CSSs DTDs DesignerTemplates Documentation Examples ThirdParty corbatests i18n icons pixmaps tests unittests rb_tests Styles CodeTemplates .ropeproject .svn _svn .eric4project _eric4project patches Dictionaries coverage ignoreFilePatterns Ui_* outputDirectory Documentation/Source qtHelpEnabled True qtHelpFilterAttributes eric4:ide:4.5 qtHelpFilterName eric4 qtHelpNamespace org.eric4.ide.45 qtHelpOutputDirectory Documentation/Help qtHelpTitle The eric4 IDE qtHelpVirtualFolder eric4 sourceExtensions useRecursion True PYLINT configFile /home/detlev/Development/Python/Eric4/eric4_4/eric4/pylint.rc dialogReport True enableBasic True enableClasses False enableDesign False enableExceptions False enableFormat False enableImports False enableMetrics False enableMiscellaneous False enableNewstyle False enableRPython False enableSimilarities False enableTypecheck False enableVariables False htmlReport False txtReport False
    eric4-4.5.18/eric/PaxHeaders.8617/IconEditor0000644000175000001440000000013212262730776016507 xustar000000000000000030 mtime=1389081086.301724332 30 atime=1389081086.306724332 30 ctime=1389081086.315724332 eric4-4.5.18/eric/IconEditor/0000755000175000001440000000000012262730776016316 5ustar00detlevusers00000000000000eric4-4.5.18/eric/IconEditor/PaxHeaders.8617/IconZoomDialog.py0000644000175000001440000000013112261012651021772 xustar000000000000000030 mtime=1388582313.757099356 29 atime=1389081084.59272437 30 ctime=1389081086.309724333 eric4-4.5.18/eric/IconEditor/IconZoomDialog.py0000644000175000001440000000166212261012651021532 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a dialog to select the zoom factor. """ from PyQt4.QtGui import QDialog from Ui_IconZoomDialog import Ui_IconZoomDialog class IconZoomDialog(QDialog, Ui_IconZoomDialog): """ Class implementing a dialog to select the zoom factor. """ def __init__(self, zoom, parent = None): """ Constructor @param zoom zoom factor to show in the spinbox @param parent parent widget of this dialog (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.zoomSpinBox.setValue(zoom * 100) self.zoomSpinBox.selectAll() def getZoomFactor(self): """ Public method to retrieve the zoom factor. @return zoom factor (int) """ return self.zoomSpinBox.value() / 100 eric4-4.5.18/eric/IconEditor/PaxHeaders.8617/IconZoomDialog.ui0000644000175000001440000000007311244011721021761 xustar000000000000000029 atime=1389081084.59272437 30 ctime=1389081086.309724333 eric4-4.5.18/eric/IconEditor/IconZoomDialog.ui0000644000175000001440000000553011244011721021512 0ustar00detlevusers00000000000000 IconZoomDialog 0 0 206 78 Zoom Zoom &Factor: zoomSpinBox Enter zoom factor <b>Zoom Factor</b> <p>Enter the desired zoom factor here. The zoom factor may be between -10 and +20 and is the increment that is added to the size of the fonts used in the editor windows.</p> Qt::AlignRight % 100 10000 100 1200 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok qPixmapFromMimeSource zoomSpinBox buttonBox buttonBox accepted() IconZoomDialog accept() 50 53 49 76 buttonBox rejected() IconZoomDialog reject() 140 57 140 68 eric4-4.5.18/eric/IconEditor/PaxHeaders.8617/IconEditorWindow.py0000644000175000001440000000013112261012651022344 xustar000000000000000030 mtime=1388582313.760099394 29 atime=1389081084.59272437 30 ctime=1389081086.309724333 eric4-4.5.18/eric/IconEditor/IconEditorWindow.py0000644000175000001440000014751512261012651022114 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2002 - 2014 Detlev Offenbach # """ Module implementing the icon editor main window. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQMessageBox, KQFileDialog from KdeQt.KQMainWindow import KQMainWindow import KdeQt from E4Gui.E4Action import E4Action, createActionGroup from IconEditorGrid import IconEditorGrid from IconZoomDialog import IconZoomDialog from IconEditorPalette import IconEditorPalette import UI.PixmapCache import UI.Config import Preferences from eric4config import getConfig class IconEditorWindow(KQMainWindow): """ Class implementing the web browser main window. @signal editorClosed() emitted after the window was requested to close down """ windows = [] def __init__(self, fileName = "", parent = None, fromEric = False, initShortcutsOnly = False): """ Constructor @param fileName name of a file to load on startup (string or QString) @param parent parent widget of this window (QWidget) @keyparam fromEric flag indicating whether it was called from within eric4 (boolean) @keyparam initShortcutsOnly flag indicating to just initialize the keyboard shortcuts (boolean) """ KQMainWindow.__init__(self, parent) self.setObjectName("eric4_icon_editor") self.setAttribute(Qt.WA_DeleteOnClose) self.fromEric = fromEric self.initShortcutsOnly = initShortcutsOnly self.setWindowIcon(UI.PixmapCache.getIcon("iconEditor.png")) if self.initShortcutsOnly: self.__initActions() else: self.__editor = IconEditorGrid() self.__scrollArea = QScrollArea() self.__scrollArea.setWidget(self.__editor) self.__scrollArea.viewport().setBackgroundRole(QPalette.Dark) self.__scrollArea.viewport().setAutoFillBackground(True) self.setCentralWidget(self.__scrollArea) g = Preferences.getGeometry("IconEditorGeometry") if g.isEmpty(): s = QSize(600, 500) self.resize(s) else: self.restoreGeometry(g) self.__initActions() self.__initMenus() self.__initToolbars() self.__createStatusBar() self.__initFileFilters() self.__createPaletteDock() self.__palette.previewChanged(self.__editor.previewPixmap()) self.__palette.colorChanged(self.__editor.penColor()) self.__class__.windows.append(self) state = Preferences.getIconEditor("IconEditorState") self.restoreState(state) self.connect(self.__editor, SIGNAL("imageChanged(bool)"), self.__modificationChanged) self.connect(self.__editor, SIGNAL("positionChanged(int, int)"), self.__updatePosition) self.connect(self.__editor, SIGNAL("sizeChanged(int, int)"), self.__updateSize) self.connect(self.__editor, SIGNAL("previewChanged(const QPixmap&)"), self.__palette.previewChanged) self.connect(self.__editor, SIGNAL("colorChanged(const QColor&)"), self.__palette.colorChanged) self.connect(self.__palette, SIGNAL("colorSelected(QColor)"), self.__editor.setPenColor) self.__setCurrentFile(QString("")) if fileName: self.__loadIconFile(fileName) self.__checkActions() def __initFileFilters(self): """ Private method to define the supported image file filters. """ filters = { 'bmp' : self.trUtf8("Windows Bitmap File (*.bmp)"), 'gif' : self.trUtf8("Graphic Interchange Format File (*.gif)"), 'ico' : self.trUtf8("Windows Icon File (*.ico)"), 'jpg' : self.trUtf8("JPEG File (*.jpg)"), 'mng' : self.trUtf8("Multiple-Image Network Graphics File (*.mng)"), 'pbm' : self.trUtf8("Portable Bitmap File (*.pbm)"), 'pgm' : self.trUtf8("Portable Graymap File (*.pgm)"), 'png' : self.trUtf8("Portable Network Graphics File (*.png)"), 'ppm' : self.trUtf8("Portable Pixmap File (*.ppm)"), 'svg' : self.trUtf8("Scalable Vector Graphics File (*.svg)"), 'tif' : self.trUtf8("TIFF File (*.tif)"), 'xbm' : self.trUtf8("X11 Bitmap File (*.xbm)"), 'xpm' : self.trUtf8("X11 Pixmap File (*.xpm)"), } inputFormats = [] readFormats = QImageReader.supportedImageFormats() for readFormat in readFormats: try: inputFormats.append(unicode(filters[unicode(readFormat)])) except KeyError: pass inputFormats.sort() inputFormats.append(unicode(self.trUtf8("All Files (*)"))) self.__inputFilter = ';;'.join(inputFormats) outputFormats = [] writeFormats = QImageWriter.supportedImageFormats() for writeFormat in writeFormats: try: outputFormats.append(unicode(filters[unicode(writeFormat)])) except KeyError: pass outputFormats.sort() self.__outputFilter = ';;'.join(outputFormats) self.__defaultFilter = filters['png'] def __initActions(self): """ Private method to define the user interface actions. """ # list of all actions self.__actions = [] self.__initFileActions() self.__initEditActions() self.__initViewActions() self.__initToolsActions() self.__initHelpActions() def __initFileActions(self): """ Private method to define the file related user interface actions. """ self.newAct = E4Action(self.trUtf8('New'), UI.PixmapCache.getIcon("new.png"), self.trUtf8('&New'), QKeySequence(self.trUtf8("Ctrl+N","File|New")), 0, self, 'iconEditor_file_new') self.newAct.setStatusTip(self.trUtf8('Create a new icon')) self.newAct.setWhatsThis(self.trUtf8( """New""" """

    This creates a new icon.

    """ )) self.connect(self.newAct, SIGNAL('triggered()'), self.__newIcon) self.__actions.append(self.newAct) self.newWindowAct = E4Action(self.trUtf8('New Window'), UI.PixmapCache.getIcon("newWindow.png"), self.trUtf8('New &Window'), 0, 0, self, 'iconEditor_file_new_window') self.newWindowAct.setStatusTip(self.trUtf8('Open a new icon editor window')) self.newWindowAct.setWhatsThis(self.trUtf8( """New Window""" """

    This opens a new icon editor window.

    """ )) self.connect(self.newWindowAct, SIGNAL('triggered()'), self.__newWindow) self.__actions.append(self.newWindowAct) self.openAct = E4Action(self.trUtf8('Open'), UI.PixmapCache.getIcon("open.png"), self.trUtf8('&Open...'), QKeySequence(self.trUtf8("Ctrl+O","File|Open")), 0, self, 'iconEditor_file_open') self.openAct.setStatusTip(self.trUtf8('Open an icon file for editing')) self.openAct.setWhatsThis(self.trUtf8( """Open File""" """

    This opens a new icon file for editing.""" """ It pops up a file selection dialog.

    """ )) self.connect(self.openAct, SIGNAL('triggered()'), self.__openIcon) self.__actions.append(self.openAct) self.saveAct = E4Action(self.trUtf8('Save'), UI.PixmapCache.getIcon("fileSave.png"), self.trUtf8('&Save'), QKeySequence(self.trUtf8("Ctrl+S", "File|Save")), 0, self, 'iconEditor_file_save') self.saveAct.setStatusTip(self.trUtf8('Save the current icon')) self.saveAct.setWhatsThis(self.trUtf8( """Save File""" """

    Save the contents of the icon editor window.

    """ )) self.connect(self.saveAct, SIGNAL('triggered()'), self.__saveIcon) self.__actions.append(self.saveAct) self.saveAsAct = E4Action(self.trUtf8('Save As'), UI.PixmapCache.getIcon("fileSaveAs.png"), self.trUtf8('Save &As...'), QKeySequence(self.trUtf8("Shift+Ctrl+S","File|Save As")), 0, self, 'iconEditor_file_save_as') self.saveAsAct.setStatusTip(\ self.trUtf8('Save the current icon to a new file')) self.saveAsAct.setWhatsThis(self.trUtf8( """Save As...""" """

    Saves the current icon to a new file.

    """ )) self.connect(self.saveAsAct, SIGNAL('triggered()'), self.__saveIconAs) self.__actions.append(self.saveAsAct) self.closeAct = E4Action(self.trUtf8('Close'), UI.PixmapCache.getIcon("close.png"), self.trUtf8('&Close'), QKeySequence(self.trUtf8("Ctrl+W","File|Close")), 0, self, 'iconEditor_file_close') self.closeAct.setStatusTip(self.trUtf8('Close the current icon editor window')) self.closeAct.setWhatsThis(self.trUtf8( """Close""" """

    Closes the current icon editor window.

    """ )) self.connect(self.closeAct, SIGNAL('triggered()'), self.close) self.__actions.append(self.closeAct) self.closeAllAct = E4Action(self.trUtf8('Close All'), self.trUtf8('Close &All'), 0, 0, self, 'iconEditor_file_close_all') self.closeAllAct.setStatusTip(self.trUtf8('Close all icon editor windows')) self.closeAllAct.setWhatsThis(self.trUtf8( """Close All""" """

    Closes all icon editor windows except the first one.

    """ )) self.connect(self.closeAllAct, SIGNAL('triggered()'), self.__closeAll) self.__actions.append(self.closeAllAct) self.exitAct = E4Action(self.trUtf8('Quit'), UI.PixmapCache.getIcon("exit.png"), self.trUtf8('&Quit'), QKeySequence(self.trUtf8("Ctrl+Q","File|Quit")), 0, self, 'iconEditor_file_quit') self.exitAct.setStatusTip(self.trUtf8('Quit the icon editor')) self.exitAct.setWhatsThis(self.trUtf8( """Quit""" """

    Quit the icon editor.

    """ )) if self.fromEric: self.connect(self.exitAct, SIGNAL('triggered()'), self.close) else: self.connect(self.exitAct, SIGNAL('triggered()'), qApp, SLOT('closeAllWindows()')) self.__actions.append(self.exitAct) def __initEditActions(self): """ Private method to create the Edit actions. """ self.undoAct = E4Action(self.trUtf8('Undo'), UI.PixmapCache.getIcon("editUndo.png"), self.trUtf8('&Undo'), QKeySequence(self.trUtf8("Ctrl+Z", "Edit|Undo")), QKeySequence(self.trUtf8("Alt+Backspace", "Edit|Undo")), self, 'iconEditor_edit_undo') self.undoAct.setStatusTip(self.trUtf8('Undo the last change')) self.undoAct.setWhatsThis(self.trUtf8(\ """Undo""" """

    Undo the last change done.

    """ )) self.connect(self.undoAct, SIGNAL('triggered()'), self.__editor.editUndo) self.__actions.append(self.undoAct) self.redoAct = E4Action(self.trUtf8('Redo'), UI.PixmapCache.getIcon("editRedo.png"), self.trUtf8('&Redo'), QKeySequence(self.trUtf8("Ctrl+Shift+Z", "Edit|Redo")), 0, self, 'iconEditor_edit_redo') self.redoAct.setStatusTip(self.trUtf8('Redo the last change')) self.redoAct.setWhatsThis(self.trUtf8(\ """Redo""" """

    Redo the last change done.

    """ )) self.connect(self.redoAct, SIGNAL('triggered()'), self.__editor.editRedo) self.__actions.append(self.redoAct) self.cutAct = E4Action(self.trUtf8('Cut'), UI.PixmapCache.getIcon("editCut.png"), self.trUtf8('Cu&t'), QKeySequence(self.trUtf8("Ctrl+X", "Edit|Cut")), QKeySequence(self.trUtf8("Shift+Del", "Edit|Cut")), self, 'iconEditor_edit_cut') self.cutAct.setStatusTip(self.trUtf8('Cut the selection')) self.cutAct.setWhatsThis(self.trUtf8(\ """Cut""" """

    Cut the selected image area to the clipboard.

    """ )) self.connect(self.cutAct, SIGNAL('triggered()'), self.__editor.editCut) self.__actions.append(self.cutAct) self.copyAct = E4Action(self.trUtf8('Copy'), UI.PixmapCache.getIcon("editCopy.png"), self.trUtf8('&Copy'), QKeySequence(self.trUtf8("Ctrl+C", "Edit|Copy")), QKeySequence(self.trUtf8("Ctrl+Ins", "Edit|Copy")), self, 'iconEditor_edit_copy') self.copyAct.setStatusTip(self.trUtf8('Copy the selection')) self.copyAct.setWhatsThis(self.trUtf8(\ """Copy""" """

    Copy the selected image area to the clipboard.

    """ )) self.connect(self.copyAct, SIGNAL('triggered()'), self.__editor.editCopy) self.__actions.append(self.copyAct) self.pasteAct = E4Action(self.trUtf8('Paste'), UI.PixmapCache.getIcon("editPaste.png"), self.trUtf8('&Paste'), QKeySequence(self.trUtf8("Ctrl+V", "Edit|Paste")), QKeySequence(self.trUtf8("Shift+Ins", "Edit|Paste")), self, 'iconEditor_edit_paste') self.pasteAct.setStatusTip(self.trUtf8('Paste the clipboard image')) self.pasteAct.setWhatsThis(self.trUtf8(\ """Paste""" """

    Paste the clipboard image.

    """ )) self.connect(self.pasteAct, SIGNAL('triggered()'), self.__editor.editPaste) self.__actions.append(self.pasteAct) self.pasteNewAct = E4Action(self.trUtf8('Paste as New'), self.trUtf8('Paste as &New'), 0, 0, self, 'iconEditor_edit_paste_as_new') self.pasteNewAct.setStatusTip(self.trUtf8( 'Paste the clipboard image replacing the current one')) self.pasteNewAct.setWhatsThis(self.trUtf8(\ """Paste as New""" """

    Paste the clipboard image replacing the current one.

    """ )) self.connect(self.pasteNewAct, SIGNAL('triggered()'), self.__editor.editPasteAsNew) self.__actions.append(self.pasteNewAct) self.deleteAct = E4Action(self.trUtf8('Clear'), UI.PixmapCache.getIcon("editDelete.png"), self.trUtf8('Cl&ear'), QKeySequence(self.trUtf8("Alt+Shift+C", "Edit|Clear")), 0, self, 'iconEditor_edit_clear') self.deleteAct.setStatusTip(self.trUtf8('Clear the icon image')) self.deleteAct.setWhatsThis(self.trUtf8(\ """Clear""" """

    Clear the icon image and set it to be completely transparent.

    """ )) self.connect(self.deleteAct, SIGNAL('triggered()'), self.__editor.editClear) self.__actions.append(self.deleteAct) self.selectAllAct = E4Action(self.trUtf8('Select All'), self.trUtf8('&Select All'), QKeySequence(self.trUtf8("Ctrl+A", "Edit|Select All")), 0, self, 'iconEditor_edit_select_all') self.selectAllAct.setStatusTip(self.trUtf8('Select the complete icon image')) self.selectAllAct.setWhatsThis(self.trUtf8(\ """Select All""" """

    Selects the complete icon image.

    """ )) self.connect(self.selectAllAct, SIGNAL('triggered()'), self.__editor.editSelectAll) self.__actions.append(self.selectAllAct) self.resizeAct = E4Action(self.trUtf8('Change Size'), UI.PixmapCache.getIcon("transformResize.png"), self.trUtf8('Change Si&ze...'), 0, 0, self, 'iconEditor_edit_change_size') self.resizeAct.setStatusTip(self.trUtf8('Change the icon size')) self.resizeAct.setWhatsThis(self.trUtf8(\ """Change Size...""" """

    Changes the icon size.

    """ )) self.connect(self.resizeAct, SIGNAL('triggered()'), self.__editor.editResize) self.__actions.append(self.resizeAct) self.grayscaleAct = E4Action(self.trUtf8('Grayscale'), UI.PixmapCache.getIcon("grayscale.png"), self.trUtf8('&Grayscale'), 0, 0, self, 'iconEditor_edit_grayscale') self.grayscaleAct.setStatusTip(self.trUtf8('Change the icon to grayscale')) self.grayscaleAct.setWhatsThis(self.trUtf8(\ """Grayscale""" """

    Changes the icon to grayscale.

    """ )) self.connect(self.grayscaleAct, SIGNAL('triggered()'), self.__editor.grayScale) self.__actions.append(self.grayscaleAct) self.redoAct.setEnabled(False) self.connect(self.__editor, SIGNAL("canRedoChanged(bool)"), self.redoAct, SLOT("setEnabled(bool)")) self.undoAct.setEnabled(False) self.connect(self.__editor, SIGNAL("canUndoChanged(bool)"), self.undoAct, SLOT("setEnabled(bool)")) self.cutAct.setEnabled(False) self.copyAct.setEnabled(False) self.connect(self.__editor, SIGNAL("selectionAvailable(bool)"), self.cutAct, SLOT("setEnabled(bool)")) self.connect(self.__editor, SIGNAL("selectionAvailable(bool)"), self.copyAct, SLOT("setEnabled(bool)")) self.pasteAct.setEnabled(self.__editor.canPaste()) self.pasteNewAct.setEnabled(self.__editor.canPaste()) self.connect(self.__editor, SIGNAL("clipboardImageAvailable(bool)"), self.pasteAct, SLOT("setEnabled(bool)")) self.connect(self.__editor, SIGNAL("clipboardImageAvailable(bool)"), self.pasteNewAct, SLOT("setEnabled(bool)")) def __initViewActions(self): """ Private method to create the View actions. """ self.zoomInAct = E4Action(self.trUtf8('Zoom in'), UI.PixmapCache.getIcon("zoomIn.png"), self.trUtf8('Zoom &in'), QKeySequence(self.trUtf8("Ctrl++", "View|Zoom in")), 0, self, 'iconEditor_view_zoom_in') self.zoomInAct.setStatusTip(self.trUtf8('Zoom in on the icon')) self.zoomInAct.setWhatsThis(self.trUtf8( """Zoom in""" """

    Zoom in on the icon. This makes the grid bigger.

    """ )) self.connect(self.zoomInAct, SIGNAL('triggered()'), self.__zoomIn) self.__actions.append(self.zoomInAct) self.zoomOutAct = E4Action(self.trUtf8('Zoom out'), UI.PixmapCache.getIcon("zoomOut.png"), self.trUtf8('Zoom &out'), QKeySequence(self.trUtf8("Ctrl+-", "View|Zoom out")), 0, self, 'iconEditor_view_zoom_out') self.zoomOutAct.setStatusTip(self.trUtf8('Zoom out on the icon')) self.zoomOutAct.setWhatsThis(self.trUtf8( """Zoom out""" """

    Zoom out on the icon. This makes the grid smaller.

    """ )) self.connect(self.zoomOutAct, SIGNAL('triggered()'), self.__zoomOut) self.__actions.append(self.zoomOutAct) self.zoomResetAct = E4Action(self.trUtf8('Zoom reset'), UI.PixmapCache.getIcon("zoomReset.png"), self.trUtf8('Zoom &reset'), QKeySequence(self.trUtf8("Ctrl+0", "View|Zoom reset")), 0, self, 'iconEditor_view_zoom_reset') self.zoomResetAct.setStatusTip(self.trUtf8('Reset the zoom of the icon')) self.zoomResetAct.setWhatsThis(self.trUtf8( """Zoom reset""" """

    Reset the zoom of the icon. """ """This sets the zoom factor to 100%.

    """ )) self.connect(self.zoomResetAct, SIGNAL('triggered()'), self.__zoomReset) self.__actions.append(self.zoomResetAct) self.zoomToAct = E4Action(self.trUtf8('Zoom'), UI.PixmapCache.getIcon("zoomTo.png"), self.trUtf8('&Zoom...'), QKeySequence(self.trUtf8("Ctrl+#", "View|Zoom")), 0, self, 'iconEditor_view_zoom') self.zoomToAct.setStatusTip(self.trUtf8('Zoom the icon')) self.zoomToAct.setWhatsThis(self.trUtf8( """Zoom""" """

    Zoom the icon. This opens a dialog where the""" """ desired zoom factor can be entered.

    """ )) self.connect(self.zoomToAct, SIGNAL('triggered()'), self.__zoom) self.__actions.append(self.zoomToAct) self.showGridAct = E4Action(self.trUtf8('Show Grid'), UI.PixmapCache.getIcon("grid.png"), self.trUtf8('Show &Grid'), 0, 0, self, 'iconEditor_view_show_grid') self.showGridAct.setStatusTip(self.trUtf8('Toggle the display of the grid')) self.showGridAct.setWhatsThis(self.trUtf8( """Show Grid""" """

    Toggle the display of the grid.

    """ )) self.connect(self.showGridAct, SIGNAL('triggered(bool)'), self.__editor.setGridEnabled) self.__actions.append(self.showGridAct) self.showGridAct.setCheckable(True) self.showGridAct.setChecked(self.__editor.isGridEnabled()) def __initToolsActions(self): """ Private method to create the View actions. """ self.esm = QSignalMapper(self) self.connect(self.esm, SIGNAL('mapped(int)'), self.__editor.setTool) self.drawingActGrp = createActionGroup(self) self.drawingActGrp.setExclusive(True) self.drawPencilAct = E4Action(self.trUtf8('Freehand'), UI.PixmapCache.getIcon("drawBrush.png"), self.trUtf8('&Freehand'), 0, 0, self.drawingActGrp, 'iconEditor_tools_pencil') self.drawPencilAct.setWhatsThis(self.trUtf8( """Free hand""" """

    Draws non linear lines.

    """ )) self.drawPencilAct.setCheckable(True) self.esm.setMapping(self.drawPencilAct, IconEditorGrid.Pencil) self.connect(self.drawPencilAct, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.__actions.append(self.drawPencilAct) self.drawColorPickerAct = E4Action(self.trUtf8('Color Picker'), UI.PixmapCache.getIcon("colorPicker.png"), self.trUtf8('&Color Picker'), 0, 0, self.drawingActGrp, 'iconEditor_tools_color_picker') self.drawColorPickerAct.setWhatsThis(self.trUtf8( """Color Picker""" """

    The color of the pixel clicked on will become """ """the current draw color.

    """ )) self.drawColorPickerAct.setCheckable(True) self.esm.setMapping(self.drawColorPickerAct, IconEditorGrid.ColorPicker) self.connect(self.drawColorPickerAct, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.__actions.append(self.drawColorPickerAct) self.drawRectangleAct = E4Action(self.trUtf8('Rectangle'), UI.PixmapCache.getIcon("drawRectangle.png"), self.trUtf8('&Rectangle'), 0, 0, self.drawingActGrp, 'iconEditor_tools_rectangle') self.drawRectangleAct.setWhatsThis(self.trUtf8( """Rectangle""" """

    Draw a rectangle.

    """ )) self.drawRectangleAct.setCheckable(True) self.esm.setMapping(self.drawRectangleAct, IconEditorGrid.Rectangle) self.connect(self.drawRectangleAct, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.__actions.append(self.drawRectangleAct) self.drawFilledRectangleAct = E4Action(self.trUtf8('Filled Rectangle'), UI.PixmapCache.getIcon("drawRectangleFilled.png"), self.trUtf8('F&illed Rectangle'), 0, 0, self.drawingActGrp, 'iconEditor_tools_filled_rectangle') self.drawFilledRectangleAct.setWhatsThis(self.trUtf8( """Filled Rectangle""" """

    Draw a filled rectangle.

    """ )) self.drawFilledRectangleAct.setCheckable(True) self.esm.setMapping(self.drawFilledRectangleAct, IconEditorGrid.FilledRectangle) self.connect(self.drawFilledRectangleAct, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.__actions.append(self.drawFilledRectangleAct) self.drawCircleAct = E4Action(self.trUtf8('Circle'), UI.PixmapCache.getIcon("drawCircle.png"), self.trUtf8('Circle'), 0, 0, self.drawingActGrp, 'iconEditor_tools_circle') self.drawCircleAct.setWhatsThis(self.trUtf8( """Circle""" """

    Draw a circle.

    """ )) self.drawCircleAct.setCheckable(True) self.esm.setMapping(self.drawCircleAct, IconEditorGrid.Circle) self.connect(self.drawCircleAct, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.__actions.append(self.drawCircleAct) self.drawFilledCircleAct = E4Action(self.trUtf8('Filled Circle'), UI.PixmapCache.getIcon("drawCircleFilled.png"), self.trUtf8('Fille&d Circle'), 0, 0, self.drawingActGrp, 'iconEditor_tools_filled_circle') self.drawFilledCircleAct.setWhatsThis(self.trUtf8( """Filled Circle""" """

    Draw a filled circle.

    """ )) self.drawFilledCircleAct.setCheckable(True) self.esm.setMapping(self.drawFilledCircleAct, IconEditorGrid.FilledCircle) self.connect(self.drawFilledCircleAct, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.__actions.append(self.drawFilledCircleAct) self.drawEllipseAct = E4Action(self.trUtf8('Ellipse'), UI.PixmapCache.getIcon("drawEllipse.png"), self.trUtf8('&Ellipse'), 0, 0, self.drawingActGrp, 'iconEditor_tools_ellipse') self.drawEllipseAct.setWhatsThis(self.trUtf8( """Ellipse""" """

    Draw an ellipse.

    """ )) self.drawEllipseAct.setCheckable(True) self.esm.setMapping(self.drawEllipseAct, IconEditorGrid.Ellipse) self.connect(self.drawEllipseAct, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.__actions.append(self.drawEllipseAct) self.drawFilledEllipseAct = E4Action(self.trUtf8('Filled Ellipse'), UI.PixmapCache.getIcon("drawEllipseFilled.png"), self.trUtf8('Fille&d Elli&pse'), 0, 0, self.drawingActGrp, 'iconEditor_tools_filled_ellipse') self.drawFilledEllipseAct.setWhatsThis(self.trUtf8( """Filled Ellipse""" """

    Draw a filled ellipse.

    """ )) self.drawFilledEllipseAct.setCheckable(True) self.esm.setMapping(self.drawFilledEllipseAct, IconEditorGrid.FilledEllipse) self.connect(self.drawFilledEllipseAct, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.__actions.append(self.drawFilledEllipseAct) self.drawFloodFillAct = E4Action(self.trUtf8('Flood Fill'), UI.PixmapCache.getIcon("drawFill.png"), self.trUtf8('Fl&ood Fill'), 0, 0, self.drawingActGrp, 'iconEditor_tools_flood_fill') self.drawFloodFillAct.setWhatsThis(self.trUtf8( """Flood Fill""" """

    Fill adjoining pixels with the same color with """ """the current color.

    """ )) self.drawFloodFillAct.setCheckable(True) self.esm.setMapping(self.drawFloodFillAct, IconEditorGrid.Fill) self.connect(self.drawFloodFillAct, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.__actions.append(self.drawFloodFillAct) self.drawLineAct = E4Action(self.trUtf8('Line'), UI.PixmapCache.getIcon("drawLine.png"), self.trUtf8('&Line'), 0, 0, self.drawingActGrp, 'iconEditor_tools_line') self.drawLineAct.setWhatsThis(self.trUtf8( """Line""" """

    Draw a line.

    """ )) self.drawLineAct.setCheckable(True) self.esm.setMapping(self.drawLineAct, IconEditorGrid.Line) self.connect(self.drawLineAct, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.__actions.append(self.drawLineAct) self.drawEraserAct = E4Action(self.trUtf8('Eraser (Transparent)'), UI.PixmapCache.getIcon("drawEraser.png"), self.trUtf8('Eraser (&Transparent)'), 0, 0, self.drawingActGrp, 'iconEditor_tools_eraser') self.drawEraserAct.setWhatsThis(self.trUtf8( """Eraser (Transparent)""" """

    Erase pixels by setting them to transparent.

    """ )) self.drawEraserAct.setCheckable(True) self.esm.setMapping(self.drawEraserAct, IconEditorGrid.Rubber) self.connect(self.drawEraserAct, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.__actions.append(self.drawEraserAct) self.drawRectangleSelectionAct = E4Action(self.trUtf8('Rectangular Selection'), UI.PixmapCache.getIcon("selectRectangle.png"), self.trUtf8('Rect&angular Selection'), 0, 0, self.drawingActGrp, 'iconEditor_tools_selection_rectangle') self.drawRectangleSelectionAct.setWhatsThis(self.trUtf8( """Rectangular Selection""" """

    Select a rectangular section of the icon using the mouse.

    """ )) self.drawRectangleSelectionAct.setCheckable(True) self.esm.setMapping(self.drawRectangleSelectionAct, IconEditorGrid.RectangleSelection) self.connect(self.drawRectangleSelectionAct, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.__actions.append(self.drawRectangleSelectionAct) self.drawCircleSelectionAct = E4Action(self.trUtf8('Circular Selection'), UI.PixmapCache.getIcon("selectCircle.png"), self.trUtf8('Rect&angular Selection'), 0, 0, self.drawingActGrp, 'iconEditor_tools_selection_circle') self.drawCircleSelectionAct.setWhatsThis(self.trUtf8( """Circular Selection""" """

    Select a circular section of the icon using the mouse.

    """ )) self.drawCircleSelectionAct.setCheckable(True) self.esm.setMapping(self.drawCircleSelectionAct, IconEditorGrid.CircleSelection) self.connect(self.drawCircleSelectionAct, SIGNAL('triggered()'), self.esm, SLOT('map()')) self.__actions.append(self.drawCircleSelectionAct) self.drawPencilAct.setChecked(True) def __initHelpActions(self): """ Private method to create the Help actions. """ self.aboutAct = E4Action(self.trUtf8('About'), self.trUtf8('&About'), 0, 0, self, 'iconEditor_help_about') self.aboutAct.setStatusTip(self.trUtf8('Display information about this software')) self.aboutAct.setWhatsThis(self.trUtf8( """About""" """

    Display some information about this software.

    """)) self.connect(self.aboutAct, SIGNAL('triggered()'), self.__about) self.__actions.append(self.aboutAct) self.aboutQtAct = E4Action(self.trUtf8('About Qt'), self.trUtf8('About &Qt'), 0, 0, self, 'iconEditor_help_about_qt') self.aboutQtAct.setStatusTip(\ self.trUtf8('Display information about the Qt toolkit')) self.aboutQtAct.setWhatsThis(self.trUtf8( """About Qt""" """

    Display some information about the Qt toolkit.

    """ )) self.connect(self.aboutQtAct, SIGNAL('triggered()'), self.__aboutQt) self.__actions.append(self.aboutQtAct) if KdeQt.isKDE(): self.aboutKdeAct = E4Action(self.trUtf8('About KDE'), self.trUtf8('About &KDE'), 0, 0, self, 'iconEditor_help_about_kde') self.aboutKdeAct.setStatusTip(self.trUtf8('Display information about KDE')) self.aboutKdeAct.setWhatsThis(self.trUtf8( """About KDE""" """

    Display some information about KDE.

    """ )) self.connect(self.aboutKdeAct, SIGNAL('triggered()'), self.__aboutKde) self.__actions.append(self.aboutKdeAct) else: self.aboutKdeAct = None self.whatsThisAct = E4Action(self.trUtf8('What\'s This?'), UI.PixmapCache.getIcon("whatsThis.png"), self.trUtf8('&What\'s This?'), QKeySequence(self.trUtf8("Shift+F1","Help|What's This?'")), 0, self, 'iconEditor_help_whats_this') self.whatsThisAct.setStatusTip(self.trUtf8('Context sensitive help')) self.whatsThisAct.setWhatsThis(self.trUtf8( """Display context sensitive help""" """

    In What's This? mode, the mouse cursor shows an arrow with a""" """ question mark, and you can click on the interface elements to get""" """ a short description of what they do and how to use them. In""" """ dialogs, this feature can be accessed using the context help button""" """ in the titlebar.

    """ )) self.connect(self.whatsThisAct, SIGNAL('triggered()'), self.__whatsThis) self.__actions.append(self.whatsThisAct) def __initMenus(self): """ Private method to create the menus. """ mb = self.menuBar() menu = mb.addMenu(self.trUtf8('&File')) menu.setTearOffEnabled(True) menu.addAction(self.newAct) menu.addAction(self.newWindowAct) menu.addAction(self.openAct) menu.addSeparator() menu.addAction(self.saveAct) menu.addAction(self.saveAsAct) menu.addSeparator() menu.addAction(self.closeAct) menu.addAction(self.closeAllAct) menu.addSeparator() menu.addAction(self.exitAct) menu = mb.addMenu(self.trUtf8("&Edit")) menu.setTearOffEnabled(True) menu.addAction(self.undoAct) menu.addAction(self.redoAct) menu.addSeparator() menu.addAction(self.cutAct) menu.addAction(self.copyAct) menu.addAction(self.pasteAct) menu.addAction(self.pasteNewAct) menu.addAction(self.deleteAct) menu.addSeparator() menu.addAction(self.selectAllAct) menu.addSeparator() menu.addAction(self.resizeAct) menu.addAction(self.grayscaleAct) menu = mb.addMenu(self.trUtf8('&View')) menu.setTearOffEnabled(True) menu.addAction(self.zoomInAct) menu.addAction(self.zoomResetAct) menu.addAction(self.zoomOutAct) menu.addAction(self.zoomToAct) menu.addSeparator() menu.addAction(self.showGridAct) menu = mb.addMenu(self.trUtf8('&Tools')) menu.setTearOffEnabled(True) menu.addAction(self.drawPencilAct) menu.addAction(self.drawColorPickerAct) menu.addAction(self.drawRectangleAct) menu.addAction(self.drawFilledRectangleAct) menu.addAction(self.drawCircleAct) menu.addAction(self.drawFilledCircleAct) menu.addAction(self.drawEllipseAct) menu.addAction(self.drawFilledEllipseAct) menu.addAction(self.drawFloodFillAct) menu.addAction(self.drawLineAct) menu.addAction(self.drawEraserAct) menu.addSeparator() menu.addAction(self.drawRectangleSelectionAct) menu.addAction(self.drawCircleSelectionAct) mb.addSeparator() menu = mb.addMenu(self.trUtf8("&Help")) menu.addAction(self.aboutAct) menu.addAction(self.aboutQtAct) if self.aboutKdeAct is not None: menu.addAction(self.aboutKdeAct) menu.addSeparator() menu.addAction(self.whatsThisAct) def __initToolbars(self): """ Private method to create the toolbars. """ filetb = self.addToolBar(self.trUtf8("File")) filetb.setObjectName("FileToolBar") filetb.setIconSize(UI.Config.ToolBarIconSize) filetb.addAction(self.newAct) filetb.addAction(self.newWindowAct) filetb.addAction(self.openAct) filetb.addSeparator() filetb.addAction(self.saveAct) filetb.addAction(self.saveAsAct) filetb.addSeparator() filetb.addAction(self.closeAct) filetb.addAction(self.exitAct) edittb = self.addToolBar(self.trUtf8("Edit")) edittb.setObjectName("EditToolBar") edittb.setIconSize(UI.Config.ToolBarIconSize) edittb.addAction(self.undoAct) edittb.addAction(self.redoAct) edittb.addSeparator() edittb.addAction(self.cutAct) edittb.addAction(self.copyAct) edittb.addAction(self.pasteAct) edittb.addSeparator() edittb.addAction(self.resizeAct) edittb.addAction(self.grayscaleAct) viewtb = self.addToolBar(self.trUtf8("View")) viewtb.setObjectName("ViewToolBar") viewtb.setIconSize(UI.Config.ToolBarIconSize) viewtb.addAction(self.zoomInAct) viewtb.addAction(self.zoomResetAct) viewtb.addAction(self.zoomOutAct) viewtb.addAction(self.zoomToAct) viewtb.addSeparator() viewtb.addAction(self.showGridAct) toolstb = self.addToolBar(self.trUtf8("Tools")) toolstb.setObjectName("ToolsToolBar") toolstb.setIconSize(UI.Config.ToolBarIconSize) toolstb.addAction(self.drawPencilAct) toolstb.addAction(self.drawColorPickerAct) toolstb.addAction(self.drawRectangleAct) toolstb.addAction(self.drawFilledRectangleAct) toolstb.addAction(self.drawCircleAct) toolstb.addAction(self.drawFilledCircleAct) toolstb.addAction(self.drawEllipseAct) toolstb.addAction(self.drawFilledEllipseAct) toolstb.addAction(self.drawFloodFillAct) toolstb.addAction(self.drawLineAct) toolstb.addAction(self.drawEraserAct) toolstb.addSeparator() toolstb.addAction(self.drawRectangleSelectionAct) toolstb.addAction(self.drawCircleSelectionAct) helptb = self.addToolBar(self.trUtf8("Help")) helptb.setObjectName("HelpToolBar") helptb.setIconSize(UI.Config.ToolBarIconSize) helptb.addAction(self.whatsThisAct) def __createStatusBar(self): """ Private method to initialize the status bar. """ self.__statusBar = self.statusBar() self.__statusBar.setSizeGripEnabled(True) self.__sbZoom = QLabel(self.__statusBar) self.__statusBar.addPermanentWidget(self.__sbZoom) self.__sbZoom.setWhatsThis(self.trUtf8( """

    This part of the status bar displays the current zoom factor.

    """ )) self.__updateZoom() self.__sbSize = QLabel(self.__statusBar) self.__statusBar.addPermanentWidget(self.__sbSize) self.__sbSize.setWhatsThis(self.trUtf8( """

    This part of the status bar displays the icon size.

    """ )) self.__updateSize(*self.__editor.iconSize()) self.__sbPos = QLabel(self.__statusBar) self.__statusBar.addPermanentWidget(self.__sbPos) self.__sbPos.setWhatsThis(self.trUtf8( """

    This part of the status bar displays the cursor position.

    """ )) self.__updatePosition(0, 0) def __createPaletteDock(self): """ Private method to initialize the palette dock widget. """ self.__paletteDock = QDockWidget(self) self.__paletteDock.setObjectName("paletteDock") self.__paletteDock.setFeatures( QDockWidget.DockWidgetFeatures(QDockWidget.AllDockWidgetFeatures)) self.__paletteDock.setWindowTitle("Palette") self.__palette = IconEditorPalette() self.__paletteDock.setWidget(self.__palette) self.addDockWidget(Qt.RightDockWidgetArea, self.__paletteDock) def closeEvent(self, evt): """ Private event handler for the close event. @param evt the close event (QCloseEvent)
    This event is simply accepted after the history has been saved and all window references have been deleted. """ if self.__maybeSave(): self.__editor.shutdown() state = self.saveState() Preferences.setIconEditor("IconEditorState", state) Preferences.setGeometry("IconEditorGeometry", self.saveGeometry()) try: del self.__class__.windows[self.__class__.windows.index(self)] except ValueError: pass if not self.fromEric: Preferences.syncPreferences() evt.accept() self.emit(SIGNAL("editorClosed")) else: evt.ignore() def __newIcon(self): """ Private slot to create a new icon. """ if self.__maybeSave(): self.__editor.editNew() self.__setCurrentFile(QString("")) self.__checkActions() def __newWindow(self): """ Public slot called to open a new icon editor window. """ ie = IconEditorWindow(parent = self.parent(), fromEric = self.fromEric) ie.show() def __openIcon(self): """ Private slot to open an icon file. """ if self.__maybeSave(): selectedFilter = QString(self.__defaultFilter) fileName = KQFileDialog.getOpenFileName(\ self, self.trUtf8("Open icon file"), QString(), self.__inputFilter, selectedFilter) if not fileName.isEmpty(): self.__loadIconFile(fileName) self.__checkActions() def __saveIcon(self): """ Private slot to save the icon. """ if self.__fileName.isEmpty(): return self.__saveIconAs() else: return self.__saveIconFile(self.__fileName) def __saveIconAs(self): """ Private slot to save the icon with a new name. """ selectedFilter = QString(self.__defaultFilter) fileName = KQFileDialog.getSaveFileName(\ self, self.trUtf8("Save icon file"), QString(), self.__outputFilter, selectedFilter, QFileDialog.Options(QFileDialog.DontConfirmOverwrite)) if fileName.isEmpty(): return False ext = QFileInfo(fileName).suffix() if ext.isEmpty(): ex = selectedFilter.section('(*',1,1).section(')',0,0) if not ex.isEmpty(): fileName.append(ex) if QFileInfo(fileName).exists(): res = KQMessageBox.warning(self, self.trUtf8("Save icon file"), self.trUtf8("

    The file %1 already exists.

    ") .arg(fileName), QMessageBox.StandardButtons(\ QMessageBox.Abort | \ QMessageBox.Save), QMessageBox.Abort) if res == QMessageBox.Abort or res == QMessageBox.Cancel: return False return self.__saveIconFile(fileName) def __closeAll(self): """ Private slot to close all other windows. """ for win in self.__class__.windows[:]: if win != self: win.close() def __loadIconFile(self, fileName): """ Private method to load an icon file. @param fileName name of the icon file to load (string or QString). """ file= QFile(fileName) if not file.exists(): KQMessageBox.warning(self, self.trUtf8("eric4 Icon Editor"), self.trUtf8("The file %1 does not exist.")\ .arg(fileName)) return if not file.open(QFile.ReadOnly): KQMessageBox.warning(self, self.trUtf8("eric4 Icon Editor"), self.trUtf8("Cannot read file %1:\n%2.")\ .arg(fileName)\ .arg(file.errorString())) return file.close() img = QImage(fileName) self.__editor.setIconImage(img, clearUndo = True) self.__setCurrentFile(fileName) def __saveIconFile(self, fileName): """ Private method to save to the given file. @param fileName name of the file to save to (string or QString) @return flag indicating success (boolean) """ file = QFile(fileName) if not file.open(QFile.WriteOnly): KQMessageBox.warning(self, self.trUtf8("eric4 Icon Editor"), self.trUtf8("Cannot write file %1:\n%2.")\ .arg(fileName)\ .arg(file.errorString())) self.__checkActions() return False img = self.__editor.iconImage() res = img.save(file) file.close() if not res: KQMessageBox.warning(self, self.trUtf8("eric4 Icon Editor"), self.trUtf8("Cannot write file %1:\n%2.")\ .arg(fileName)\ .arg(file.errorString())) self.__checkActions() return False self.__editor.setDirty(False, setCleanState = True) self.__setCurrentFile(fileName) self.__statusBar.showMessage(self.trUtf8("Icon saved"), 2000) self.__checkActions() return True def __setCurrentFile(self, fileName): """ Private method to register the file name of the current file. @param fileName name of the file to register (string or QString) """ self.__fileName = QString(fileName) if self.__fileName.isEmpty(): shownName = self.trUtf8("Untitled") else: shownName = self.__strippedName(self.__fileName) self.setWindowTitle(self.trUtf8("%1[*] - %2")\ .arg(shownName)\ .arg(self.trUtf8("Icon Editor"))) self.setWindowModified(self.__editor.isDirty()) def __strippedName(self, fullFileName): """ Private method to return the filename part of the given path. @param fullFileName full pathname of the given file (QString) @return filename part (QString) """ return QFileInfo(fullFileName).fileName() def __maybeSave(self): """ Private method to ask the user to save the file, if it was modified. @return flag indicating, if it is ok to continue (boolean) """ if self.__editor.isDirty(): ret = KQMessageBox.warning(self, self.trUtf8("eric4 Icon Editor"), self.trUtf8("""The icon image has been modified.\n""" """Do you want to save your changes?"""), QMessageBox.StandardButtons(\ QMessageBox.Cancel | \ QMessageBox.No | \ QMessageBox.Yes), QMessageBox.Cancel) if ret == QMessageBox.Yes: return self.__saveIcon() elif ret == QMessageBox.Cancel: return False return True def __checkActions(self): """ Private slot to check some actions for their enable/disable status. """ self.saveAct.setEnabled(self.__editor.isDirty()) def __modificationChanged(self, m): """ Private slot to handle the modificationChanged signal. @param m modification status """ self.setWindowModified(m) self.__checkActions() def __updatePosition(self, x, y): """ Private slot to show the current cursor position. @param x x-coordinate (integer) @param y y-coordinate (integer) """ self.__sbPos.setText("%d, %d" % (x + 1, y + 1)) def __updateSize(self, w, h): """ Private slot to show the current icon size. @param w width of the icon (integer) @param h height of the icon (integer) """ self.__sbSize.setText("%d x %d" % (w, h)) def __updateZoom(self): """ Private slot to show the current zoom factor. """ zoom = self.__editor.zoomFactor() self.__sbZoom.setText("%d %%" % (zoom * 100, )) self.zoomOutAct.setEnabled(self.__editor.zoomFactor() > 1) def __zoomIn(self): """ Private slot called to handle the zoom in action. """ self.__editor.setZoomFactor(self.__editor.zoomFactor() + 1) self.__updateZoom() def __zoomOut(self): """ Private slot called to handle the zoom out action. """ self.__editor.setZoomFactor(self.__editor.zoomFactor() - 1) self.__updateZoom() def __zoomReset(self): """ Private slot called to handle the zoom reset action. """ self.__editor.setZoomFactor(1) self.__updateZoom() def __zoom(self): """ Private method to handle the zoom action. """ dlg = IconZoomDialog(self.__editor.zoomFactor(), self) if dlg.exec_() == QDialog.Accepted: self.__editor.setZoomFactor(dlg.getZoomFactor()) self.__updateZoom() def __about(self): """ Private slot to show a little About message. """ KQMessageBox.about(self, self.trUtf8("About eric4 Icon Editor"), self.trUtf8("The eric4 Icon Editor is a simple editor component" " to perform icon drawing tasks.")) def __aboutQt(self): """ Private slot to handle the About Qt dialog. """ QMessageBox.aboutQt(self, "eric4 Icon Editor") def __aboutKde(self): """ Private slot to handle the About KDE dialog. """ from PyKDE4.kdeui import KHelpMenu menu = KHelpMenu(self) menu.aboutKDE() def __whatsThis(self): """ Private slot called in to enter Whats This mode. """ QWhatsThis.enterWhatsThisMode() eric4-4.5.18/eric/IconEditor/PaxHeaders.8617/IconSizeDialog.ui0000644000175000001440000000007311245267332021763 xustar000000000000000029 atime=1389081084.59572437 30 ctime=1389081086.309724333 eric4-4.5.18/eric/IconEditor/IconSizeDialog.ui0000644000175000001440000000661211245267332021516 0ustar00detlevusers00000000000000 IconSizeDialog 0 0 232 78 Icon Size true Size: Enter the width of the icon Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 1 256 32 X Qt::AlignCenter Enter the height of the icon Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 1 256 32 Qt::Horizontal 42 20 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok widthSpin heightSpin buttonBox buttonBox accepted() IconSizeDialog accept() 248 254 157 274 buttonBox rejected() IconSizeDialog reject() 316 260 286 274 eric4-4.5.18/eric/IconEditor/PaxHeaders.8617/__init__.py0000644000175000001440000000013112261012651020654 xustar000000000000000030 mtime=1388582313.762099419 29 atime=1389081084.59572437 30 ctime=1389081086.309724333 eric4-4.5.18/eric/IconEditor/__init__.py0000644000175000001440000000022712261012651020410 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Package implementing the icon editor tool. """ eric4-4.5.18/eric/IconEditor/PaxHeaders.8617/IconSizeDialog.py0000644000175000001440000000013012261012651021757 xustar000000000000000029 mtime=1388582313.76609947 29 atime=1389081084.59572437 30 ctime=1389081086.309724333 eric4-4.5.18/eric/IconEditor/IconSizeDialog.py0000644000175000001440000000201212261012651021506 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- """ Module implementing a dialog to enter the icon size. """ from PyQt4.QtGui import QDialog from PyQt4.QtCore import pyqtSignature from Ui_IconSizeDialog import Ui_IconSizeDialog class IconSizeDialog(QDialog, Ui_IconSizeDialog): """ Class implementing a dialog to enter the icon size. """ def __init__(self, width, height, parent = None): """ Constructor @param width width to be set (integer) @param height height to be set (integer) @param parent reference to the parent widget (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.widthSpin.setValue(width) self.heightSpin.setValue(height) self.widthSpin.selectAll() def getData(self): """ Public method to get the entered data. @return tuple with width and height (tuple of two integers) """ return self.widthSpin.value(), self.heightSpin.value() eric4-4.5.18/eric/IconEditor/PaxHeaders.8617/cursors0000644000175000001440000000013112261012661020167 xustar000000000000000030 mtime=1388582321.178192649 29 atime=1389081086.01472434 30 ctime=1389081086.315724332 eric4-4.5.18/eric/IconEditor/cursors/0000755000175000001440000000000012261012661017777 5ustar00detlevusers00000000000000eric4-4.5.18/eric/IconEditor/cursors/PaxHeaders.8617/paintbrush-cursor.xpm0000644000175000001440000000007310310513414024464 xustar000000000000000029 atime=1389081084.59572437 30 ctime=1389081086.309724333 eric4-4.5.18/eric/IconEditor/cursors/paintbrush-cursor.xpm0000644000175000001440000000142310310513414024212 0ustar00detlevusers00000000000000/* XPM */ static char *paintbrush[]={ "22 22 11 1", ". c None", "a c #000000", "d c #272727", "i c #2c2c2c", "h c #303030", "c c #3b3b3b", "g c #aaaaaa", "e c #c8c8c8", "b c #d5d5d5", "f c #ececec", "# c #ffffff", ".................#abcc", "................#abccc", "...............#abcccd", "..............#abcccdd", ".............#abcccdda", "............#abcccdda#", "...........#abcccdda#.", "..........#abcccdda#..", "..........abcccdda#...", ".........##cccdda#....", ".........#eecdda#.....", "......##f#eegda#......", ".....#aabeggga#.......", "....#abbchgaa#........", "...#abcccda##.........", "...abcccdda#..........", "..#abccddia#..........", ".#abccdiaa#...........", "#abdddaa##............", "aaaaaa##..............", "######................", "......................"}; eric4-4.5.18/eric/IconEditor/cursors/PaxHeaders.8617/fill-cursor.xpm0000644000175000001440000000007310310513414023233 xustar000000000000000029 atime=1389081084.59572437 30 ctime=1389081086.309724333 eric4-4.5.18/eric/IconEditor/cursors/fill-cursor.xpm0000644000175000001440000000141510310513414022762 0ustar00detlevusers00000000000000/* XPM */ static char *fill[]={ "22 22 11 1", ". c None", "a c #000000", "i c #222222", "c c #2a2a2a", "e c #333333", "g c #3a3a3a", "d c #404040", "h c #555555", "f c #aaaaaa", "b c #d5d5d5", "# c #ffffff", "......................", "............#.........", "...........#a#........", "..........#aba#.......", ".........#abcca#......", "........#adceca#......", ".......#afdcecca#.....", "......#abcedcecca#....", ".....#afcgeedeeca#....", "...##fddcggeeeecca#...", "..#fdccddcggeeeecca#..", ".#ddcdcdddcggeeeeca#..", ".#dccbdddddcggeeecca#.", ".#ddcddbbdddgggeeccba#", ".#ddhadddbddggggeebia#", ".#fda#adddbdddggebca#.", ".#fda##aaddbbddgbca#..", ".#fda#.##adddbdbca#...", "..#da#...#aaddbca#....", "..#fa#....##abca#.....", "..#f#.......#aa#......", "...#.........##......."}; eric4-4.5.18/eric/IconEditor/cursors/PaxHeaders.8617/__init__.py0000644000175000001440000000013112261012651022354 xustar000000000000000030 mtime=1388582313.771099533 29 atime=1389081084.60272437 30 ctime=1389081086.309724333 eric4-4.5.18/eric/IconEditor/cursors/__init__.py0000644000175000001440000000021312261012651022103 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Package defining some cursors. """ eric4-4.5.18/eric/IconEditor/cursors/PaxHeaders.8617/aim-cursor.xpm0000644000175000001440000000007310310513414023053 xustar000000000000000029 atime=1389081084.60272437 30 ctime=1389081086.309724333 eric4-4.5.18/eric/IconEditor/cursors/aim-cursor.xpm0000644000175000001440000000122310310513414022577 0ustar00detlevusers00000000000000/* XPM */ static char *aim[]={ "22 22 3 1", ". c None", "a c #000000", "# c #ffffff", "......................", "..........#...........", ".........#a#..........", ".........#a#..........", ".........#a#..........", ".........#a#..........", ".........#a#..........", ".........#a#..........", ".........#a#..........", "..#######...#######...", ".#aaaaaaa...aaaaaaa#..", "..#######...#######...", "..........a...........", ".........#a#..........", ".........#a#..........", ".........#a#..........", ".........#a#..........", ".........#a#..........", ".........#a#..........", "..........#...........", "......................", "......................"}; eric4-4.5.18/eric/IconEditor/cursors/PaxHeaders.8617/colorpicker-cursor.xpm0000644000175000001440000000007310310513414024621 xustar000000000000000029 atime=1389081084.60272437 30 ctime=1389081086.309724333 eric4-4.5.18/eric/IconEditor/cursors/colorpicker-cursor.xpm0000644000175000001440000000142410310513414024350 0ustar00detlevusers00000000000000/* XPM */ static char *colorpicker[]={ "22 22 11 1", ". c None", "# c #000000", "f c #151515", "e c #2a2a2a", "c c #333333", "d c #3a3a3a", "i c #808080", "g c #aaaaaa", "b c #d5d5d5", "h c #dcdcdc", "a c #ffffff", "..................##a.", ".................#bc#a", "................#bdcc#", "...............#bddce#", "..............#bddcef#", "............##bddcef#a", "...........#bdddcef#a.", "............#becef#a..", "...........#agbee#a...", "..........#ahgibf#a...", ".........#ahgi#.#a....", "........#ahgi#........", ".......#ahgi#.........", "......#ahgi#..........", ".....#ahgi#...........", "....#ahgi#............", "...#ahgi#.............", "..#ahgi#..............", ".#ahgi#...............", ".#hgi#................", "#ig##.................", "#i#..................."}; eric4-4.5.18/eric/IconEditor/cursors/PaxHeaders.8617/eraser-cursor.xpm0000644000175000001440000000007311243001200023555 xustar000000000000000029 atime=1389081084.60272437 30 ctime=1389081086.309724333 eric4-4.5.18/eric/IconEditor/cursors/eraser-cursor.xpm0000644000175000001440000000134111243001200023302 0ustar00detlevusers00000000000000/* XPM */ static char *eraser[]={ "22 22 8 1", ". c None", "c c #141414", "f c #2c2c2c", "e c #424242", "b c #939393", "a c #c9c9c9", "d c #d5d5d5", "# c #ffffff", "...............###....", "..............#abb#...", ".............#abbbb#..", "............#abbbbbb#.", "...........#abbbbbbbb#", "..........#abbbbbbbbb#", ".........#abbbbbbbbbc#", "........#abbbbbbbbbc#.", ".......#abbbbbbbbbc#..", "......#daabbbbbbbc#...", ".....#deeaabbbbbc#....", "....#deeeeaabbbc#.....", "...#deeeeeeaabc#......", "..#deeeeeeeeac#.......", ".#deeeeeeeeef#........", "#deeeeeeeeef#.........", "#ddeeeeeeef#..........", "#dddeeeeef#...........", ".#dddeeef#............", "..#dddef#.............", "...#ddf#..............", "....###..............."}; eric4-4.5.18/eric/IconEditor/cursors/PaxHeaders.8617/cursors.qrc0000644000175000001440000000007311242775362022474 xustar000000000000000029 atime=1389081084.60272437 30 ctime=1389081086.309724333 eric4-4.5.18/eric/IconEditor/cursors/cursors.qrc0000644000175000001440000000040711242775362022223 0ustar00detlevusers00000000000000 aim-cursor.xpm colorpicker-cursor.xpm cursors.qrc eraser-cursor.xpm fill-cursor.xpm paintbrush-cursor.xpm eric4-4.5.18/eric/IconEditor/cursors/PaxHeaders.8617/cursors_rc.py0000644000175000001440000000013112261012651023001 xustar000000000000000030 mtime=1388582313.774099571 29 atime=1389081084.60272437 30 ctime=1389081086.309724333 eric4-4.5.18/eric/IconEditor/cursors/cursors_rc.py0000644000175000001440000004433512261012651022545 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Resource object code # # Created: Mi. Aug 19 15:47:59 2009 # by: The Resource Compiler for PyQt (Qt v4.5.2) # # WARNING! All changes made in this file will be lost! from PyQt4 import QtCore qt_resource_data = "\ \x00\x00\x03\x14\ \x2f\ \x2a\x20\x58\x50\x4d\x20\x2a\x2f\x0a\x73\x74\x61\x74\x69\x63\x20\ \x63\x68\x61\x72\x20\x2a\x63\x6f\x6c\x6f\x72\x70\x69\x63\x6b\x65\ \x72\x5b\x5d\x3d\x7b\x0a\x22\x32\x32\x20\x32\x32\x20\x31\x31\x20\ \x31\x22\x2c\x0a\x22\x2e\x20\x63\x20\x4e\x6f\x6e\x65\x22\x2c\x0a\ \x22\x23\x20\x63\x20\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x0a\x22\ \x66\x20\x63\x20\x23\x31\x35\x31\x35\x31\x35\x22\x2c\x0a\x22\x65\ \x20\x63\x20\x23\x32\x61\x32\x61\x32\x61\x22\x2c\x0a\x22\x63\x20\ \x63\x20\x23\x33\x33\x33\x33\x33\x33\x22\x2c\x0a\x22\x64\x20\x63\ \x20\x23\x33\x61\x33\x61\x33\x61\x22\x2c\x0a\x22\x69\x20\x63\x20\ \x23\x38\x30\x38\x30\x38\x30\x22\x2c\x0a\x22\x67\x20\x63\x20\x23\ \x61\x61\x61\x61\x61\x61\x22\x2c\x0a\x22\x62\x20\x63\x20\x23\x64\ \x35\x64\x35\x64\x35\x22\x2c\x0a\x22\x68\x20\x63\x20\x23\x64\x63\ \x64\x63\x64\x63\x22\x2c\x0a\x22\x61\x20\x63\x20\x23\x66\x66\x66\ \x66\x66\x66\x22\x2c\x0a\x22\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\ \x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x23\x23\x61\x2e\x22\x2c\x0a\ \x22\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\ \x2e\x2e\x23\x62\x63\x23\x61\x22\x2c\x0a\x22\x2e\x2e\x2e\x2e\x2e\ \x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x23\x62\x64\x63\x63\ \x23\x22\x2c\x0a\x22\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\ \x2e\x2e\x2e\x2e\x23\x62\x64\x64\x63\x65\x23\x22\x2c\x0a\x22\x2e\ \x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x23\x62\x64\ \x64\x63\x65\x66\x23\x22\x2c\x0a\x22\x2e\x2e\x2e\x2e\x2e\x2e\x2e\ \x2e\x2e\x2e\x2e\x2e\x23\x23\x62\x64\x64\x63\x65\x66\x23\x61\x22\ \x2c\x0a\x22\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x23\x62\ \x64\x64\x64\x63\x65\x66\x23\x61\x2e\x22\x2c\x0a\x22\x2e\x2e\x2e\ \x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x23\x62\x65\x63\x65\x66\x23\ \x61\x2e\x2e\x22\x2c\x0a\x22\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\ \x2e\x2e\x23\x61\x67\x62\x65\x65\x23\x61\x2e\x2e\x2e\x22\x2c\x0a\ \x22\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x23\x61\x68\x67\x69\ \x62\x66\x23\x61\x2e\x2e\x2e\x22\x2c\x0a\x22\x2e\x2e\x2e\x2e\x2e\ \x2e\x2e\x2e\x2e\x23\x61\x68\x67\x69\x23\x2e\x23\x61\x2e\x2e\x2e\ \x2e\x22\x2c\x0a\x22\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x23\x61\x68\ \x67\x69\x23\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x22\x2c\x0a\x22\x2e\ \x2e\x2e\x2e\x2e\x2e\x2e\x23\x61\x68\x67\x69\x23\x2e\x2e\x2e\x2e\ \x2e\x2e\x2e\x2e\x2e\x22\x2c\x0a\x22\x2e\x2e\x2e\x2e\x2e\x2e\x23\ \x61\x68\x67\x69\x23\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x22\ \x2c\x0a\x22\x2e\x2e\x2e\x2e\x2e\x23\x61\x68\x67\x69\x23\x2e\x2e\ \x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x22\x2c\x0a\x22\x2e\x2e\x2e\ \x2e\x23\x61\x68\x67\x69\x23\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\ \x2e\x2e\x2e\x22\x2c\x0a\x22\x2e\x2e\x2e\x23\x61\x68\x67\x69\x23\ \x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x22\x2c\x0a\ \x22\x2e\x2e\x23\x61\x68\x67\x69\x23\x2e\x2e\x2e\x2e\x2e\x2e\x2e\ \x2e\x2e\x2e\x2e\x2e\x2e\x2e\x22\x2c\x0a\x22\x2e\x23\x61\x68\x67\ \x69\x23\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\ \x2e\x22\x2c\x0a\x22\x2e\x23\x68\x67\x69\x23\x2e\x2e\x2e\x2e\x2e\ \x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x22\x2c\x0a\x22\x23\ \x69\x67\x23\x23\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\ \x2e\x2e\x2e\x2e\x2e\x22\x2c\x0a\x22\x23\x69\x23\x2e\x2e\x2e\x2e\ \x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x22\ \x7d\x3b\x0a\ \x00\x00\x02\x93\ \x2f\ \x2a\x20\x58\x50\x4d\x20\x2a\x2f\x0a\x73\x74\x61\x74\x69\x63\x20\ \x63\x68\x61\x72\x20\x2a\x61\x69\x6d\x5b\x5d\x3d\x7b\x0a\x22\x32\ \x32\x20\x32\x32\x20\x33\x20\x31\x22\x2c\x0a\x22\x2e\x20\x63\x20\ \x4e\x6f\x6e\x65\x22\x2c\x0a\x22\x61\x20\x63\x20\x23\x30\x30\x30\ \x30\x30\x30\x22\x2c\x0a\x22\x23\x20\x63\x20\x23\x66\x66\x66\x66\ \x66\x66\x22\x2c\x0a\x22\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\ \x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x22\x2c\x0a\x22\ \x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x23\x2e\x2e\x2e\x2e\x2e\ \x2e\x2e\x2e\x2e\x2e\x2e\x22\x2c\x0a\x22\x2e\x2e\x2e\x2e\x2e\x2e\ \x2e\x2e\x2e\x23\x61\x23\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\ \x22\x2c\x0a\x22\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x23\x61\x23\ \x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x22\x2c\x0a\x22\x2e\x2e\ \x2e\x2e\x2e\x2e\x2e\x2e\x2e\x23\x61\x23\x2e\x2e\x2e\x2e\x2e\x2e\ \x2e\x2e\x2e\x2e\x22\x2c\x0a\x22\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\ \x2e\x23\x61\x23\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x22\x2c\ \x0a\x22\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x23\x61\x23\x2e\x2e\ \x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x22\x2c\x0a\x22\x2e\x2e\x2e\x2e\ \x2e\x2e\x2e\x2e\x2e\x23\x61\x23\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\ \x2e\x2e\x22\x2c\x0a\x22\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x23\ \x61\x23\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x22\x2c\x0a\x22\ \x2e\x2e\x23\x23\x23\x23\x23\x23\x23\x2e\x2e\x2e\x23\x23\x23\x23\ \x23\x23\x23\x2e\x2e\x2e\x22\x2c\x0a\x22\x2e\x23\x61\x61\x61\x61\ \x61\x61\x61\x2e\x2e\x2e\x61\x61\x61\x61\x61\x61\x61\x23\x2e\x2e\ \x22\x2c\x0a\x22\x2e\x2e\x23\x23\x23\x23\x23\x23\x23\x2e\x2e\x2e\ \x23\x23\x23\x23\x23\x23\x23\x2e\x2e\x2e\x22\x2c\x0a\x22\x2e\x2e\ \x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x61\x2e\x2e\x2e\x2e\x2e\x2e\x2e\ \x2e\x2e\x2e\x2e\x22\x2c\x0a\x22\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\ \x2e\x23\x61\x23\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x22\x2c\ \x0a\x22\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x23\x61\x23\x2e\x2e\ \x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x22\x2c\x0a\x22\x2e\x2e\x2e\x2e\ \x2e\x2e\x2e\x2e\x2e\x23\x61\x23\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\ \x2e\x2e\x22\x2c\x0a\x22\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x23\ \x61\x23\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x22\x2c\x0a\x22\ \x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x23\x61\x23\x2e\x2e\x2e\x2e\ \x2e\x2e\x2e\x2e\x2e\x2e\x22\x2c\x0a\x22\x2e\x2e\x2e\x2e\x2e\x2e\ \x2e\x2e\x2e\x23\x61\x23\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\ \x22\x2c\x0a\x22\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x23\x2e\ \x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x22\x2c\x0a\x22\x2e\x2e\ \x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\ \x2e\x2e\x2e\x2e\x22\x2c\x0a\x22\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\ \x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x22\x7d\ \x3b\x0a\ \x00\x00\x02\xe1\ \x2f\ \x2a\x20\x58\x50\x4d\x20\x2a\x2f\x0a\x73\x74\x61\x74\x69\x63\x20\ \x63\x68\x61\x72\x20\x2a\x65\x72\x61\x73\x65\x72\x5b\x5d\x3d\x7b\ \x0a\x22\x32\x32\x20\x32\x32\x20\x38\x20\x31\x22\x2c\x0a\x22\x2e\ \x20\x63\x20\x4e\x6f\x6e\x65\x22\x2c\x0a\x22\x63\x20\x63\x20\x23\ \x31\x34\x31\x34\x31\x34\x22\x2c\x0a\x22\x66\x20\x63\x20\x23\x32\ \x63\x32\x63\x32\x63\x22\x2c\x0a\x22\x65\x20\x63\x20\x23\x34\x32\ \x34\x32\x34\x32\x22\x2c\x0a\x22\x62\x20\x63\x20\x23\x39\x33\x39\ \x33\x39\x33\x22\x2c\x0a\x22\x61\x20\x63\x20\x23\x63\x39\x63\x39\ \x63\x39\x22\x2c\x0a\x22\x64\x20\x63\x20\x23\x64\x35\x64\x35\x64\ \x35\x22\x2c\x0a\x22\x23\x20\x63\x20\x23\x66\x66\x66\x66\x66\x66\ \x22\x2c\x0a\x22\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\ \x2e\x2e\x2e\x23\x23\x23\x2e\x2e\x2e\x2e\x22\x2c\x0a\x22\x2e\x2e\ \x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x23\x61\x62\x62\ \x23\x2e\x2e\x2e\x22\x2c\x0a\x22\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\ \x2e\x2e\x2e\x2e\x2e\x23\x61\x62\x62\x62\x62\x23\x2e\x2e\x22\x2c\ \x0a\x22\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x23\x61\ \x62\x62\x62\x62\x62\x62\x23\x2e\x22\x2c\x0a\x22\x2e\x2e\x2e\x2e\ \x2e\x2e\x2e\x2e\x2e\x2e\x2e\x23\x61\x62\x62\x62\x62\x62\x62\x62\ \x62\x23\x22\x2c\x0a\x22\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\ \x23\x61\x62\x62\x62\x62\x62\x62\x62\x62\x62\x23\x22\x2c\x0a\x22\ \x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x23\x61\x62\x62\x62\x62\x62\ \x62\x62\x62\x62\x63\x23\x22\x2c\x0a\x22\x2e\x2e\x2e\x2e\x2e\x2e\ \x2e\x2e\x23\x61\x62\x62\x62\x62\x62\x62\x62\x62\x62\x63\x23\x2e\ \x22\x2c\x0a\x22\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x23\x61\x62\x62\x62\ \x62\x62\x62\x62\x62\x62\x63\x23\x2e\x2e\x22\x2c\x0a\x22\x2e\x2e\ \x2e\x2e\x2e\x2e\x23\x64\x61\x61\x62\x62\x62\x62\x62\x62\x62\x63\ \x23\x2e\x2e\x2e\x22\x2c\x0a\x22\x2e\x2e\x2e\x2e\x2e\x23\x64\x65\ \x65\x61\x61\x62\x62\x62\x62\x62\x63\x23\x2e\x2e\x2e\x2e\x22\x2c\ \x0a\x22\x2e\x2e\x2e\x2e\x23\x64\x65\x65\x65\x65\x61\x61\x62\x62\ \x62\x63\x23\x2e\x2e\x2e\x2e\x2e\x22\x2c\x0a\x22\x2e\x2e\x2e\x23\ \x64\x65\x65\x65\x65\x65\x65\x61\x61\x62\x63\x23\x2e\x2e\x2e\x2e\ \x2e\x2e\x22\x2c\x0a\x22\x2e\x2e\x23\x64\x65\x65\x65\x65\x65\x65\ \x65\x65\x61\x63\x23\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x22\x2c\x0a\x22\ \x2e\x23\x64\x65\x65\x65\x65\x65\x65\x65\x65\x65\x66\x23\x2e\x2e\ \x2e\x2e\x2e\x2e\x2e\x2e\x22\x2c\x0a\x22\x23\x64\x65\x65\x65\x65\ \x65\x65\x65\x65\x65\x66\x23\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\ \x22\x2c\x0a\x22\x23\x64\x64\x65\x65\x65\x65\x65\x65\x65\x66\x23\ \x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x22\x2c\x0a\x22\x23\x64\ \x64\x64\x65\x65\x65\x65\x65\x66\x23\x2e\x2e\x2e\x2e\x2e\x2e\x2e\ \x2e\x2e\x2e\x2e\x22\x2c\x0a\x22\x2e\x23\x64\x64\x64\x65\x65\x65\ \x66\x23\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x22\x2c\ \x0a\x22\x2e\x2e\x23\x64\x64\x64\x65\x66\x23\x2e\x2e\x2e\x2e\x2e\ \x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x22\x2c\x0a\x22\x2e\x2e\x2e\x23\ \x64\x64\x66\x23\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\ \x2e\x2e\x22\x2c\x0a\x22\x2e\x2e\x2e\x2e\x23\x23\x23\x2e\x2e\x2e\ \x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x22\x7d\x3b\x0a\ \ \x00\x00\x03\x0d\ \x2f\ \x2a\x20\x58\x50\x4d\x20\x2a\x2f\x0a\x73\x74\x61\x74\x69\x63\x20\ \x63\x68\x61\x72\x20\x2a\x66\x69\x6c\x6c\x5b\x5d\x3d\x7b\x0a\x22\ \x32\x32\x20\x32\x32\x20\x31\x31\x20\x31\x22\x2c\x0a\x22\x2e\x20\ \x63\x20\x4e\x6f\x6e\x65\x22\x2c\x0a\x22\x61\x20\x63\x20\x23\x30\ \x30\x30\x30\x30\x30\x22\x2c\x0a\x22\x69\x20\x63\x20\x23\x32\x32\ \x32\x32\x32\x32\x22\x2c\x0a\x22\x63\x20\x63\x20\x23\x32\x61\x32\ \x61\x32\x61\x22\x2c\x0a\x22\x65\x20\x63\x20\x23\x33\x33\x33\x33\ \x33\x33\x22\x2c\x0a\x22\x67\x20\x63\x20\x23\x33\x61\x33\x61\x33\ \x61\x22\x2c\x0a\x22\x64\x20\x63\x20\x23\x34\x30\x34\x30\x34\x30\ \x22\x2c\x0a\x22\x68\x20\x63\x20\x23\x35\x35\x35\x35\x35\x35\x22\ \x2c\x0a\x22\x66\x20\x63\x20\x23\x61\x61\x61\x61\x61\x61\x22\x2c\ \x0a\x22\x62\x20\x63\x20\x23\x64\x35\x64\x35\x64\x35\x22\x2c\x0a\ \x22\x23\x20\x63\x20\x23\x66\x66\x66\x66\x66\x66\x22\x2c\x0a\x22\ \x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\ \x2e\x2e\x2e\x2e\x2e\x2e\x22\x2c\x0a\x22\x2e\x2e\x2e\x2e\x2e\x2e\ \x2e\x2e\x2e\x2e\x2e\x2e\x23\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\ \x22\x2c\x0a\x22\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x23\ \x61\x23\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x22\x2c\x0a\x22\x2e\x2e\ \x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x23\x61\x62\x61\x23\x2e\x2e\x2e\ \x2e\x2e\x2e\x2e\x22\x2c\x0a\x22\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\ \x2e\x23\x61\x62\x63\x63\x61\x23\x2e\x2e\x2e\x2e\x2e\x2e\x22\x2c\ \x0a\x22\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x23\x61\x64\x63\x65\x63\ \x61\x23\x2e\x2e\x2e\x2e\x2e\x2e\x22\x2c\x0a\x22\x2e\x2e\x2e\x2e\ \x2e\x2e\x2e\x23\x61\x66\x64\x63\x65\x63\x63\x61\x23\x2e\x2e\x2e\ \x2e\x2e\x22\x2c\x0a\x22\x2e\x2e\x2e\x2e\x2e\x2e\x23\x61\x62\x63\ \x65\x64\x63\x65\x63\x63\x61\x23\x2e\x2e\x2e\x2e\x22\x2c\x0a\x22\ \x2e\x2e\x2e\x2e\x2e\x23\x61\x66\x63\x67\x65\x65\x64\x65\x65\x63\ \x61\x23\x2e\x2e\x2e\x2e\x22\x2c\x0a\x22\x2e\x2e\x2e\x23\x23\x66\ \x64\x64\x63\x67\x67\x65\x65\x65\x65\x63\x63\x61\x23\x2e\x2e\x2e\ \x22\x2c\x0a\x22\x2e\x2e\x23\x66\x64\x63\x63\x64\x64\x63\x67\x67\ \x65\x65\x65\x65\x63\x63\x61\x23\x2e\x2e\x22\x2c\x0a\x22\x2e\x23\ \x64\x64\x63\x64\x63\x64\x64\x64\x63\x67\x67\x65\x65\x65\x65\x63\ \x61\x23\x2e\x2e\x22\x2c\x0a\x22\x2e\x23\x64\x63\x63\x62\x64\x64\ \x64\x64\x64\x63\x67\x67\x65\x65\x65\x63\x63\x61\x23\x2e\x22\x2c\ \x0a\x22\x2e\x23\x64\x64\x63\x64\x64\x62\x62\x64\x64\x64\x67\x67\ \x67\x65\x65\x63\x63\x62\x61\x23\x22\x2c\x0a\x22\x2e\x23\x64\x64\ \x68\x61\x64\x64\x64\x62\x64\x64\x67\x67\x67\x67\x65\x65\x62\x69\ \x61\x23\x22\x2c\x0a\x22\x2e\x23\x66\x64\x61\x23\x61\x64\x64\x64\ \x62\x64\x64\x64\x67\x67\x65\x62\x63\x61\x23\x2e\x22\x2c\x0a\x22\ \x2e\x23\x66\x64\x61\x23\x23\x61\x61\x64\x64\x62\x62\x64\x64\x67\ \x62\x63\x61\x23\x2e\x2e\x22\x2c\x0a\x22\x2e\x23\x66\x64\x61\x23\ \x2e\x23\x23\x61\x64\x64\x64\x62\x64\x62\x63\x61\x23\x2e\x2e\x2e\ \x22\x2c\x0a\x22\x2e\x2e\x23\x64\x61\x23\x2e\x2e\x2e\x23\x61\x61\ \x64\x64\x62\x63\x61\x23\x2e\x2e\x2e\x2e\x22\x2c\x0a\x22\x2e\x2e\ \x23\x66\x61\x23\x2e\x2e\x2e\x2e\x23\x23\x61\x62\x63\x61\x23\x2e\ \x2e\x2e\x2e\x2e\x22\x2c\x0a\x22\x2e\x2e\x23\x66\x23\x2e\x2e\x2e\ \x2e\x2e\x2e\x2e\x23\x61\x61\x23\x2e\x2e\x2e\x2e\x2e\x2e\x22\x2c\ \x0a\x22\x2e\x2e\x2e\x23\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x23\ \x23\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x22\x7d\x3b\x0a\ \x00\x00\x01\x07\ \x3c\ \x21\x44\x4f\x43\x54\x59\x50\x45\x20\x52\x43\x43\x3e\x0a\x3c\x52\ \x43\x43\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x30\x22\ \x3e\x0a\x3c\x71\x72\x65\x73\x6f\x75\x72\x63\x65\x3e\x0a\x20\x20\ \x3c\x66\x69\x6c\x65\x3e\x61\x69\x6d\x2d\x63\x75\x72\x73\x6f\x72\ \x2e\x78\x70\x6d\x3c\x2f\x66\x69\x6c\x65\x3e\x0a\x20\x20\x3c\x66\ \x69\x6c\x65\x3e\x63\x6f\x6c\x6f\x72\x70\x69\x63\x6b\x65\x72\x2d\ \x63\x75\x72\x73\x6f\x72\x2e\x78\x70\x6d\x3c\x2f\x66\x69\x6c\x65\ \x3e\x0a\x20\x20\x3c\x66\x69\x6c\x65\x3e\x63\x75\x72\x73\x6f\x72\ \x73\x2e\x71\x72\x63\x3c\x2f\x66\x69\x6c\x65\x3e\x0a\x20\x20\x3c\ \x66\x69\x6c\x65\x3e\x65\x72\x61\x73\x65\x72\x2d\x63\x75\x72\x73\ \x6f\x72\x2e\x78\x70\x6d\x3c\x2f\x66\x69\x6c\x65\x3e\x0a\x20\x20\ \x3c\x66\x69\x6c\x65\x3e\x66\x69\x6c\x6c\x2d\x63\x75\x72\x73\x6f\ \x72\x2e\x78\x70\x6d\x3c\x2f\x66\x69\x6c\x65\x3e\x0a\x20\x20\x3c\ \x66\x69\x6c\x65\x3e\x70\x61\x69\x6e\x74\x62\x72\x75\x73\x68\x2d\ \x63\x75\x72\x73\x6f\x72\x2e\x78\x70\x6d\x3c\x2f\x66\x69\x6c\x65\ \x3e\x0a\x3c\x2f\x71\x72\x65\x73\x6f\x75\x72\x63\x65\x3e\x0a\x3c\ \x2f\x52\x43\x43\x3e\x0a\ \x00\x00\x03\x13\ \x2f\ \x2a\x20\x58\x50\x4d\x20\x2a\x2f\x0a\x73\x74\x61\x74\x69\x63\x20\ \x63\x68\x61\x72\x20\x2a\x70\x61\x69\x6e\x74\x62\x72\x75\x73\x68\ \x5b\x5d\x3d\x7b\x0a\x22\x32\x32\x20\x32\x32\x20\x31\x31\x20\x31\ \x22\x2c\x0a\x22\x2e\x20\x63\x20\x4e\x6f\x6e\x65\x22\x2c\x0a\x22\ \x61\x20\x63\x20\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x0a\x22\x64\ \x20\x63\x20\x23\x32\x37\x32\x37\x32\x37\x22\x2c\x0a\x22\x69\x20\ \x63\x20\x23\x32\x63\x32\x63\x32\x63\x22\x2c\x0a\x22\x68\x20\x63\ \x20\x23\x33\x30\x33\x30\x33\x30\x22\x2c\x0a\x22\x63\x20\x63\x20\ \x23\x33\x62\x33\x62\x33\x62\x22\x2c\x0a\x22\x67\x20\x63\x20\x23\ \x61\x61\x61\x61\x61\x61\x22\x2c\x0a\x22\x65\x20\x63\x20\x23\x63\ \x38\x63\x38\x63\x38\x22\x2c\x0a\x22\x62\x20\x63\x20\x23\x64\x35\ \x64\x35\x64\x35\x22\x2c\x0a\x22\x66\x20\x63\x20\x23\x65\x63\x65\ \x63\x65\x63\x22\x2c\x0a\x22\x23\x20\x63\x20\x23\x66\x66\x66\x66\ \x66\x66\x22\x2c\x0a\x22\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\ \x2e\x2e\x2e\x2e\x2e\x2e\x2e\x23\x61\x62\x63\x63\x22\x2c\x0a\x22\ \x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\ \x23\x61\x62\x63\x63\x63\x22\x2c\x0a\x22\x2e\x2e\x2e\x2e\x2e\x2e\ \x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x23\x61\x62\x63\x63\x63\x64\ \x22\x2c\x0a\x22\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\ \x2e\x2e\x23\x61\x62\x63\x63\x63\x64\x64\x22\x2c\x0a\x22\x2e\x2e\ \x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x23\x61\x62\x63\x63\ \x63\x64\x64\x61\x22\x2c\x0a\x22\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\ \x2e\x2e\x2e\x2e\x23\x61\x62\x63\x63\x63\x64\x64\x61\x23\x22\x2c\ \x0a\x22\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x23\x61\x62\ \x63\x63\x63\x64\x64\x61\x23\x2e\x22\x2c\x0a\x22\x2e\x2e\x2e\x2e\ \x2e\x2e\x2e\x2e\x2e\x2e\x23\x61\x62\x63\x63\x63\x64\x64\x61\x23\ \x2e\x2e\x22\x2c\x0a\x22\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\ \x61\x62\x63\x63\x63\x64\x64\x61\x23\x2e\x2e\x2e\x22\x2c\x0a\x22\ \x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x23\x23\x63\x63\x63\x64\x64\ \x61\x23\x2e\x2e\x2e\x2e\x22\x2c\x0a\x22\x2e\x2e\x2e\x2e\x2e\x2e\ \x2e\x2e\x2e\x23\x65\x65\x63\x64\x64\x61\x23\x2e\x2e\x2e\x2e\x2e\ \x22\x2c\x0a\x22\x2e\x2e\x2e\x2e\x2e\x2e\x23\x23\x66\x23\x65\x65\ \x67\x64\x61\x23\x2e\x2e\x2e\x2e\x2e\x2e\x22\x2c\x0a\x22\x2e\x2e\ \x2e\x2e\x2e\x23\x61\x61\x62\x65\x67\x67\x67\x61\x23\x2e\x2e\x2e\ \x2e\x2e\x2e\x2e\x22\x2c\x0a\x22\x2e\x2e\x2e\x2e\x23\x61\x62\x62\ \x63\x68\x67\x61\x61\x23\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x22\x2c\ \x0a\x22\x2e\x2e\x2e\x23\x61\x62\x63\x63\x63\x64\x61\x23\x23\x2e\ \x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x22\x2c\x0a\x22\x2e\x2e\x2e\x61\ \x62\x63\x63\x63\x64\x64\x61\x23\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\ \x2e\x2e\x22\x2c\x0a\x22\x2e\x2e\x23\x61\x62\x63\x63\x64\x64\x69\ \x61\x23\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x22\x2c\x0a\x22\ \x2e\x23\x61\x62\x63\x63\x64\x69\x61\x61\x23\x2e\x2e\x2e\x2e\x2e\ \x2e\x2e\x2e\x2e\x2e\x2e\x22\x2c\x0a\x22\x23\x61\x62\x64\x64\x64\ \x61\x61\x23\x23\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\ \x22\x2c\x0a\x22\x61\x61\x61\x61\x61\x61\x23\x23\x2e\x2e\x2e\x2e\ \x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x22\x2c\x0a\x22\x23\x23\ \x23\x23\x23\x23\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\ \x2e\x2e\x2e\x2e\x22\x2c\x0a\x22\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\ \x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x22\x7d\ \x3b\x0a\ " qt_resource_name = "\ \x00\x16\ \x0c\xac\xdf\x8d\ \x00\x63\ \x00\x6f\x00\x6c\x00\x6f\x00\x72\x00\x70\x00\x69\x00\x63\x00\x6b\x00\x65\x00\x72\x00\x2d\x00\x63\x00\x75\x00\x72\x00\x73\x00\x6f\ \x00\x72\x00\x2e\x00\x78\x00\x70\x00\x6d\ \x00\x0e\ \x0a\x62\x1c\x4d\ \x00\x61\ \x00\x69\x00\x6d\x00\x2d\x00\x63\x00\x75\x00\x72\x00\x73\x00\x6f\x00\x72\x00\x2e\x00\x78\x00\x70\x00\x6d\ \x00\x11\ \x03\x70\x24\x2d\ \x00\x65\ \x00\x72\x00\x61\x00\x73\x00\x65\x00\x72\x00\x2d\x00\x63\x00\x75\x00\x72\x00\x73\x00\x6f\x00\x72\x00\x2e\x00\x78\x00\x70\x00\x6d\ \ \x00\x0f\ \x0f\x83\xb2\x4d\ \x00\x66\ \x00\x69\x00\x6c\x00\x6c\x00\x2d\x00\x63\x00\x75\x00\x72\x00\x73\x00\x6f\x00\x72\x00\x2e\x00\x78\x00\x70\x00\x6d\ \x00\x0b\ \x06\x43\xcb\xc3\ \x00\x63\ \x00\x75\x00\x72\x00\x73\x00\x6f\x00\x72\x00\x73\x00\x2e\x00\x71\x00\x72\x00\x63\ \x00\x15\ \x0c\x6b\xd5\x6d\ \x00\x70\ \x00\x61\x00\x69\x00\x6e\x00\x74\x00\x62\x00\x72\x00\x75\x00\x73\x00\x68\x00\x2d\x00\x63\x00\x75\x00\x72\x00\x73\x00\x6f\x00\x72\ \x00\x2e\x00\x78\x00\x70\x00\x6d\ " qt_resource_struct = "\ \x00\x00\x00\x00\x00\x02\x00\x00\x00\x06\x00\x00\x00\x01\ \x00\x00\x00\x54\x00\x00\x00\x00\x00\x01\x00\x00\x05\xaf\ \x00\x00\x00\xa0\x00\x00\x00\x00\x00\x01\x00\x00\x0b\xa5\ \x00\x00\x00\x32\x00\x00\x00\x00\x00\x01\x00\x00\x03\x18\ \x00\x00\x00\xbc\x00\x00\x00\x00\x00\x01\x00\x00\x0c\xb0\ \x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ \x00\x00\x00\x7c\x00\x00\x00\x00\x00\x01\x00\x00\x08\x94\ " def qInitResources(): QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) def qCleanupResources(): QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) qInitResources() eric4-4.5.18/eric/IconEditor/PaxHeaders.8617/IconEditorPalette.py0000644000175000001440000000013112261012651022473 xustar000000000000000030 mtime=1388582313.776099597 29 atime=1389081084.60372437 30 ctime=1389081086.309724333 eric4-4.5.18/eric/IconEditor/IconEditorPalette.py0000644000175000001440000001051412261012651022227 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a palette widget for the icon editor. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQColorDialog class IconEditorPalette(QWidget): """ Class implementing a palette widget for the icon editor. @signal colorSelected(QColor) emitted after a new color has been selected """ def __init__(self, parent = None): """ Constructor @param parent reference to the parent widget (QWidget) """ QWidget.__init__(self, parent) if self.layoutDirection == Qt.Horizontal: direction = QBoxLayout.LeftToRight else: direction = QBoxLayout.TopToBottom self.__layout = QBoxLayout(direction, self) self.setLayout(self.__layout) self.__preview = QLabel(self) self.__preview.setFrameStyle(QFrame.Panel | QFrame.Sunken) self.__preview.setFixedHeight(64) self.__preview.setAlignment(Qt.AlignHCenter | Qt.AlignVCenter) self.__preview.setWhatsThis(self.trUtf8( """Preview""" """

    This is a 1:1 preview of the current icon.

    """ )) self.__layout.addWidget(self.__preview) self.__color = QLabel(self) self.__color.setFrameStyle(QFrame.Panel | QFrame.Sunken) self.__color.setFixedHeight(24) self.__color.setAlignment(Qt.AlignHCenter | Qt.AlignVCenter) self.__color.setWhatsThis(self.trUtf8( """Current Color""" """

    This is the currently selected color used for drawing.

    """ )) self.__layout.addWidget(self.__color) self.__colorTxt = QLabel(self) self.__colorTxt.setAlignment(Qt.AlignHCenter | Qt.AlignVCenter) self.__colorTxt.setWhatsThis(self.trUtf8( """Current Color Value""" """

    This is the currently selected color value used for drawing.

    """ )) self.__layout.addWidget(self.__colorTxt) self.__colorButton = QPushButton(self.trUtf8("Select Color"), self) self.__colorButton.setWhatsThis(self.trUtf8( """Select Color""" """

    Select the current drawing color via a color selection dialog.

    """ )) self.connect(self.__colorButton, SIGNAL("clicked()"), self.__selectColor) self.__layout.addWidget(self.__colorButton) self.__colorAlpha = QSpinBox(self) self.__colorAlpha.setRange(0, 255) self.__colorAlpha.setWhatsThis(self.trUtf8( """Select alpha channel value""" """

    Select the value for the alpha channel of the current color.

    """ )) self.__layout.addWidget(self.__colorAlpha) self.connect(self.__colorAlpha, SIGNAL("valueChanged(int)"), self.__alphaChanged) spacer = QSpacerItem(10, 10, QSizePolicy.Minimum, QSizePolicy.Expanding) self.__layout.addItem(spacer) def previewChanged(self, pixmap): """ Public slot to update the preview. """ self.__preview.setPixmap(pixmap) def colorChanged(self, color): """ Public slot to update the color preview. """ self.__currentColor = color self.__currentAlpha = color.alpha() pm = QPixmap(90, 18) pm.fill(color) self.__color.setPixmap(pm) self.__colorTxt.setText( "%d, %d, %d, %d" % (color.red(), color.green(), color.blue(), color.alpha())) self.__colorAlpha.setValue(self.__currentAlpha) def __selectColor(self): """ Private slot to select a new drawing color. """ col = KQColorDialog.getColor(self.__currentColor) col.setAlpha(self.__currentAlpha) if col.isValid(): self.emit(SIGNAL("colorSelected(QColor)"), col) def __alphaChanged(self, val): """ Private slot to track changes of the alpha channel. @param val value of the alpha channel """ if val != self.__currentAlpha: col = QColor(self.__currentColor) col.setAlpha(val) self.emit(SIGNAL("colorSelected(QColor)"), col) eric4-4.5.18/eric/IconEditor/PaxHeaders.8617/IconEditorGrid.py0000644000175000001440000000013112261012651021762 xustar000000000000000030 mtime=1388582313.779099635 29 atime=1389081084.60372437 30 ctime=1389081086.309724333 eric4-4.5.18/eric/IconEditor/IconEditorGrid.py0000644000175000001440000011457212261012651021527 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing the icon editor grid. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from KdeQt import KQMessageBox import cursors.cursors_rc from IconSizeDialog import IconSizeDialog class IconEditCommand(QUndoCommand): """ Class implementing an undo command for the icon editor. """ def __init__(self, grid, text, oldImage, parent = None): """ Constructor @param grid reference to the icon editor grid (IconEditorGrid) @param text text for the undo command (QString) @param oldImage copy of the icon before the changes were applied (QImage) @param parent reference to the parent command (QUndoCommand) """ QUndoCommand.__init__(self, text, parent) self.__grid = grid self.__imageBefore = QImage(oldImage) self.__imageAfter = None def setAfterImage(self, image): """ Public method to set the image after the changes were applied. @param image copy of the icon after the changes were applied (QImage) """ self.__imageAfter = QImage(image) def undo(self): """ Public method to perform the undo. """ self.__grid.setIconImage(self.__imageBefore, undoRedo = True) def redo(self): """ Public method to perform the redo. """ if self.__imageAfter: self.__grid.setIconImage(self.__imageAfter, undoRedo = True) class IconEditorGrid(QWidget): """ Class implementing the icon editor grid. @signal canRedoChanged(bool) emitted after the redo status has changed @signal canUndoChanged(bool) emitted after the undo status has changed @signal clipboardImageAvailable(bool) emitted to signal the availability of an image to be pasted @signal colorChanged(const QColor&) emitted after the drawing color was changed @signal imageChanged(bool) emitted after the image was modified @signal positionChanged(int, int) emitted after the cursor poition was changed @signal previewChanged(const QPixmap&) emitted to signal a new preview pixmap @signal selectionAvailable(bool) emitted to signal a change of the selection @signal sizeChanged(int, int) emitted after the size has been changed """ Pencil = 1 Rubber = 2 Line = 3 Rectangle = 4 FilledRectangle = 5 Circle = 6 FilledCircle = 7 Ellipse = 8 FilledEllipse = 9 Fill = 10 ColorPicker = 11 RectangleSelection = 20 CircleSelection = 21 MarkColor = QColor(255, 255, 255, 255) NoMarkColor = QColor(0, 0, 0, 0) def __init__(self, parent = None): """ Constructor @param parent reference to the parent widget (QWidget) """ QWidget.__init__(self, parent) self.setAttribute(Qt.WA_StaticContents) self.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum) self.__curColor = Qt.black self.__zoom = 12 self.__curTool = self.Pencil self.__startPos = QPoint() self.__endPos = QPoint() self.__dirty = False self.__selecting = False self.__selRect = QRect() self.__isPasting = False self.__clipboardSize = QSize() self.__pasteRect = QRect() self.__undoStack = QUndoStack(self) self.__currentUndoCmd = None self.__image = QImage(32, 32, QImage.Format_ARGB32) self.__image.fill(qRgba(0, 0, 0, 0)) self.__markImage = QImage(self.__image) self.__markImage.fill(self.NoMarkColor.rgba()) self.__gridEnabled = True self.__selectionAvailable = False self.__initCursors() self.__initUndoTexts() self.setMouseTracking(True) self.connect(self.__undoStack, SIGNAL("canRedoChanged(bool)"), self, SIGNAL("canRedoChanged(bool)")) self.connect(self.__undoStack, SIGNAL("canUndoChanged(bool)"), self, SIGNAL("canUndoChanged(bool)")) self.connect(self.__undoStack, SIGNAL("cleanChanged(bool)"), self.__cleanChanged) self.connect(self, SIGNAL("imageChanged(bool)"), self.__updatePreviewPixmap) self.connect(QApplication.clipboard(), SIGNAL("dataChanged()"), self.__checkClipboard) self.__checkClipboard() def __initCursors(self): """ Private method to initialize the various cursors. """ self.__normalCursor = QCursor(Qt.ArrowCursor) pix = QPixmap(":colorpicker-cursor.xpm") mask = pix.createHeuristicMask() pix.setMask(mask) self.__colorPickerCursor = QCursor(pix, 1, 21) pix = QPixmap(":paintbrush-cursor.xpm") mask = pix.createHeuristicMask() pix.setMask(mask) self.__paintCursor = QCursor(pix, 0, 19) pix = QPixmap(":fill-cursor.xpm") mask = pix.createHeuristicMask() pix.setMask(mask) self.__fillCursor = QCursor(pix, 3, 20) pix = QPixmap(":aim-cursor.xpm") mask = pix.createHeuristicMask() pix.setMask(mask) self.__aimCursor = QCursor(pix, 10, 10) pix = QPixmap(":eraser-cursor.xpm") mask = pix.createHeuristicMask() pix.setMask(mask) self.__rubberCursor = QCursor(pix, 1, 16) def __initUndoTexts(self): """ Private method to initialize texts to be associated with undo commands for the various drawing tools. """ self.__undoTexts = { self.Pencil : self.trUtf8("Set Pixel"), self.Rubber : self.trUtf8("Erase Pixel"), self.Line : self.trUtf8("Draw Line"), self.Rectangle : self.trUtf8("Draw Rectangle"), self.FilledRectangle : self.trUtf8("Draw Filled Rectangle"), self.Circle : self.trUtf8("Draw Circle"), self.FilledCircle : self.trUtf8("Draw Filled Circle"), self.Ellipse : self.trUtf8("Draw Ellipse"), self.FilledEllipse : self.trUtf8("Draw Filled Ellipse"), self.Fill : self.trUtf8("Fill Region"), } def isDirty(self): """ Public method to check the dirty status. @return flag indicating a modified status (boolean) """ return self.__dirty def setDirty(self, dirty, setCleanState = False): """ Public slot to set the dirty flag. @param dirty flag indicating the new modification status (boolean) @param setCleanState flag indicating to set the undo stack to clean (boolean) """ self.__dirty = dirty self.emit(SIGNAL("imageChanged(bool)"), dirty) if not dirty and setCleanState: self.__undoStack.setClean() def sizeHint(self): """ Public method to report the size hint. @return size hint (QSize) """ size = self.__zoom * self.__image.size() if self.__zoom >= 3 and self.__gridEnabled: size += QSize(1, 1) return size def setPenColor(self, newColor): """ Public method to set the drawing color. @param newColor reference to the new color (QColor) """ self.__curColor = QColor(newColor) self.emit(SIGNAL("colorChanged(const QColor&)"), QColor(newColor)) def penColor(self): """ Public method to get the current drawing color. @return current drawing color (QColor) """ return QColor(self.__curColor) def setTool(self, tool): """ Public method to set the current drawing tool. @param tool drawing tool to be used (IconEditorGrid.Pencil ... IconEditorGrid.CircleSelection) """ self.__curTool = tool if self.__curTool in [self.RectangleSelection, self.CircleSelection]: self.__selecting = True else: self.__selecting = False if self.__curTool in [self.RectangleSelection, self.CircleSelection, self.Line, self.Rectangle, self.FilledRectangle, self.Circle, self.FilledCircle, self.Ellipse, self.FilledEllipse]: self.setCursor(self.__aimCursor) elif self.__curTool == self.Fill: self.setCursor(self.__fillCursor) elif self.__curTool == self.ColorPicker: self.setCursor(self.__colorPickerCursor) elif self.__curTool == self.Pencil: self.setCursor(self.__paintCursor) elif self.__curTool == self.Rubber: self.setCursor(self.__rubberCursor) else: self.setCursor(self.__normalCursor) def tool(self): """ Public method to get the current drawing tool. @return current drawing tool (IconEditorGrid.Pencil ... IconEditorGrid.CircleSelection) """ return self.__curTool def setIconImage(self, newImage, undoRedo = False, clearUndo = False): """ Public method to set a new icon image. @param newImage reference to the new image (QImage) @keyparam undoRedo flag indicating an undo or redo operation (boolean) @keyparam clearUndo flag indicating to clear the undo stack (boolean) """ if newImage != self.__image: self.__image = newImage.convertToFormat(QImage.Format_ARGB32) self.update() self.updateGeometry() self.resize(self.sizeHint()) self.__markImage = QImage(self.__image) self.__markImage.fill(self.NoMarkColor.rgba()) if undoRedo: self.setDirty(not self.__undoStack.isClean()) else: self.setDirty(False) if clearUndo: self.__undoStack.clear() self.emit(SIGNAL("sizeChanged(int, int)"), *self.iconSize()) def iconImage(self): """ Public method to get a copy of the icon image. @return copy of the icon image (QImage) """ return QImage(self.__image) def iconSize(self): """ Public method to get the size of the icon. @return width and height of the image as a tuple (integer, integer) """ return self.__image.width(), self.__image.height() def setZoomFactor(self, newZoom): """ Public method to set the zoom factor. @param newZoom zoom factor (integer >= 1) """ newZoom = max(1, newZoom) # must not be less than 1 if newZoom != self.__zoom: self.__zoom = newZoom self.update() self.updateGeometry() self.resize(self.sizeHint()) def zoomFactor(self): """ Public method to get the current zoom factor. @return zoom factor (integer) """ return self.__zoom def setGridEnabled(self, enable): """ Public method to enable the display of grid lines. @param enable enabled status of the grid lines (boolean) """ if enable != self.__gridEnabled: self.__gridEnabled = enable self.update() def isGridEnabled(self): """ Public method to get the grid lines status. @return enabled status of the grid lines (boolean) """ return self.__gridEnabled def paintEvent(self, evt): """ Protected method called to repaint some of the widget. @param evt reference to the paint event object (QPaintEvent) """ painter = QPainter(self) if self.__zoom >= 3 and self.__gridEnabled: painter.setPen(self.palette().foreground().color()) i = 0 while i <= self.__image.width(): painter.drawLine(self.__zoom * i, 0, self.__zoom * i, self.__zoom * self.__image.height()) i += 1 j = 0 while j <= self.__image.height(): painter.drawLine(0, self.__zoom * j, self.__zoom * self.__image.width(), self.__zoom * j) j += 1 painter.setPen(Qt.DashLine) for i in range(0, self.__image.width()): for j in range(0, self.__image.height()): rect = self.__pixelRect(i, j) if evt.region().intersects(rect): color = QColor.fromRgba(self.__image.pixel(i, j)) painter.fillRect(rect, QBrush(Qt.white)) painter.fillRect(rect, QBrush(Qt.Dense5Pattern)) painter.fillRect(rect, QBrush(color)) if self.__isMarked(i, j): painter.drawRect(rect.adjusted(0, 0, -1, -1)) painter.end() def __pixelRect(self, i, j): """ Private method to determine the rectangle for a given pixel coordinate. @param i x-coordinate of the pixel in the image (integer) @param j y-coordinate of the pixel in the image (integer) return rectangle for the given pixel coordinates (QRect) """ if self.__zoom >= 3 and self.__gridEnabled: return QRect(self.__zoom * i + 1, self.__zoom * j + 1, self.__zoom - 1, self.__zoom - 1) else: return QRect(self.__zoom * i, self.__zoom * j, self.__zoom, self.__zoom) def mousePressEvent(self, evt): """ Protected method to handle mouse button press events. @param evt reference to the mouse event object (QMouseEvent) """ if evt.button() == Qt.LeftButton: if self.__isPasting: self.__isPasting = False self.editPaste(True) self.__markImage.fill(self.NoMarkColor.rgba()) self.update(self.__pasteRect) self.__pasteRect = QRect() return if self.__curTool == self.Pencil: cmd = IconEditCommand(self, self.__undoTexts[self.__curTool], self.__image) self.__setImagePixel(evt.pos(), True) self.setDirty(True) self.__undoStack.push(cmd) self.__currentUndoCmd = cmd elif self.__curTool == self.Rubber: cmd = IconEditCommand(self, self.__undoTexts[self.__curTool], self.__image) self.__setImagePixel(evt.pos(), False) self.setDirty(True) self.__undoStack.push(cmd) self.__currentUndoCmd = cmd elif self.__curTool == self.Fill: i, j = self.__imageCoordinates(evt.pos()) col = QColor() col.setRgba(self.__image.pixel(i, j)) cmd = IconEditCommand(self, self.__undoTexts[self.__curTool], self.__image) self.__drawFlood(i, j, col) self.setDirty(True) self.__undoStack.push(cmd) cmd.setAfterImage(self.__image) elif self.__curTool == self.ColorPicker: i, j = self.__imageCoordinates(evt.pos()) col = QColor() col.setRgba(self.__image.pixel(i, j)) self.setPenColor(col) else: self.__unMark() self.__startPos = evt.pos() self.__endPos = evt.pos() def mouseMoveEvent(self, evt): """ Protected method to handle mouse move events. @param evt reference to the mouse event object (QMouseEvent) """ self.emit(SIGNAL("positionChanged(int, int)"), *self.__imageCoordinates(evt.pos())) if self.__isPasting and not (evt.buttons() & Qt.LeftButton): self.__drawPasteRect(evt.pos()) return if evt.buttons() & Qt.LeftButton: if self.__curTool == self.Pencil: self.__setImagePixel(evt.pos(), True) self.setDirty(True) elif self.__curTool == self.Rubber: self.__setImagePixel(evt.pos(), False) self.setDirty(True) elif self.__curTool in [self.Fill, self.ColorPicker]: pass # do nothing else: self.__drawTool(evt.pos(), True) def mouseReleaseEvent(self, evt): """ Protected method to handle mouse button release events. @param evt reference to the mouse event object (QMouseEvent) """ if evt.button() == Qt.LeftButton: if self.__curTool in [self.Pencil, self.Rubber]: if self.__currentUndoCmd: self.__currentUndoCmd.setAfterImage(self.__image) self.__currentUndoCmd = None if self.__curTool not in [self.Pencil, self.Rubber, self.Fill, self.ColorPicker, self.RectangleSelection, self.CircleSelection]: cmd = IconEditCommand(self, self.__undoTexts[self.__curTool], self.__image) if self.__drawTool(evt.pos(), False): self.__undoStack.push(cmd) cmd.setAfterImage(self.__image) self.setDirty(True) def __setImagePixel(self, pos, opaque): """ Private slot to set or erase a pixel. @param pos position of the pixel in the widget (QPoint) @param opaque flag indicating a set operation (boolean) """ i, j = self.__imageCoordinates(pos) if self.__image.rect().contains(i, j): if opaque: self.__image.setPixel(i, j, self.penColor().rgba()) else: self.__image.setPixel(i, j, qRgba(0, 0, 0, 0)) self.update(self.__pixelRect(i, j)) def __imageCoordinates(self, pos): """ Private method to convert from widget to image coordinates. @param pos widget coordinate (QPoint) @return tuple with the image coordinates (tuple of two integers) """ i = pos.x() // self.__zoom j = pos.y() // self.__zoom return i, j def __drawPasteRect(self, pos): """ Private slot to draw a rectangle for signaling a paste operation. @param pos widget position of the paste rectangle (QPoint) """ self.__markImage.fill(self.NoMarkColor.rgba()) if self.__pasteRect.isValid(): self.__updateImageRect(self.__pasteRect.topLeft(), self.__pasteRect.bottomRight() + QPoint(1, 1)) x, y = self.__imageCoordinates(pos) isize = self.__image.size() if x + self.__clipboardSize.width() <= isize.width(): sx = self.__clipboardSize.width() else: sx = isize.width() - x if y + self.__clipboardSize.height() <= isize.height(): sy = self.__clipboardSize.height() else: sy = isize.height() - y self.__pasteRect = QRect(QPoint(x, y), QSize(sx - 1, sy - 1)) painter = QPainter(self.__markImage) painter.setPen(self.MarkColor) painter.drawRect(self.__pasteRect) painter.end() self.__updateImageRect(self.__pasteRect.topLeft(), self.__pasteRect.bottomRight() + QPoint(1, 1)) def __drawTool(self, pos, mark): """ Public method to perform a draw operation depending of the current tool. @param pos widget coordinate to perform the draw operation at (QPoint) @param mark flag indicating a mark operation (boolean) @param flag indicating a successful draw (boolean) """ self.__unMark() if mark: self.__endPos = QPoint(pos) drawColor = self.MarkColor img = self.__markImage else: drawColor = self.penColor() img = self.__image start = QPoint(*self.__imageCoordinates(self.__startPos)) end = QPoint(*self.__imageCoordinates(pos)) painter = QPainter(img) painter.setPen(drawColor) painter.setCompositionMode(QPainter.CompositionMode_Source) if self.__curTool == self.Line: painter.drawLine(start, end) elif self.__curTool in [self.Rectangle, self.FilledRectangle, self.RectangleSelection]: l = min(start.x(), end.x()) t = min(start.y(), end.y()) r = max(start.x(), end.x()) b = max(start.y(), end.y()) if self.__curTool == self.RectangleSelection: painter.setBrush(QBrush(drawColor)) if self.__curTool == self.FilledRectangle: for y in range(t, b + 1): painter.drawLine(l, y, r, y) else: painter.drawRect(l, t, r - l, b - t) if self.__selecting: self.__selRect = QRect(l, t, r - l + 1, b - t + 1) self.__selectionAvailable = True self.emit(SIGNAL("selectionAvailable(bool)"), True) elif self.__curTool in [self.Circle, self.FilledCircle, self.CircleSelection]: r = max(abs(start.x() - end.x()), abs(start.y() - end.y())) if self.__curTool in [self.FilledCircle, self.CircleSelection]: painter.setBrush(QBrush(drawColor)) painter.drawEllipse(start, r, r) if self.__selecting: self.__selRect = QRect(start.x() - r, start.y() - r, 2 * r + 1, 2 * r + 1) self.__selectionAvailable = True self.emit(SIGNAL("selectionAvailable(bool)"), True) elif self.__curTool in [self.Ellipse, self.FilledEllipse]: r1 = abs(start.x() - end.x()) r2 = abs(start.y() - end.y()) if r1 == 0 or r2 == 0: return False if self.__curTool == self.FilledEllipse: painter.setBrush(QBrush(drawColor)) painter.drawEllipse(start, r1, r2) painter.end() if self.__curTool in [self.Circle, self.FilledCircle, self.Ellipse, self.FilledEllipse]: self.update() else: self.__updateRect(self.__startPos, pos) return True def __drawFlood(self, i, j, oldColor, doUpdate = True): """ Private method to perform a flood fill operation. @param i x-value in image coordinates (integer) @param j y-value in image coordinates (integer) @param oldColor reference to the color at position i, j (QColor) @param doUpdate flag indicating an update is requested (boolean) (used for speed optimizations) """ if not self.__image.rect().contains(i, j) or \ self.__image.pixel(i, j) != oldColor.rgba() or \ self.__image.pixel(i, j) == self.penColor().rgba(): return self.__image.setPixel(i, j, self.penColor().rgba()) self.__drawFlood(i, j - 1, oldColor, False) self.__drawFlood(i, j + 1, oldColor, False) self.__drawFlood(i - 1, j, oldColor, False) self.__drawFlood(i + 1, j, oldColor, False) if doUpdate: self.update() def __updateRect(self, pos1, pos2): """ Private slot to update parts of the widget. @param pos1 top, left position for the update in widget coordinates (QPoint) @param pos2 bottom, right position for the update in widget coordinates (QPoint) """ self.__updateImageRect(QPoint(*self.__imageCoordinates(pos1)), QPoint(*self.__imageCoordinates(pos2))) def __updateImageRect(self, ipos1, ipos2): """ Private slot to update parts of the widget. @param ipos1 top, left position for the update in image coordinates (QPoint) @param ipos2 bottom, right position for the update in image coordinates (QPoint) """ r1 = self.__pixelRect(ipos1.x(), ipos1.y()) r2 = self.__pixelRect(ipos2.x(), ipos2.y()) left = min(r1.x(), r2.x()) top = min(r1.y(), r2.y()) right = max(r1.x() + r1.width(), r2.x() + r2.width()) bottom = max(r1.y() + r1.height(), r2.y() + r2.height()) self.update(left, top, right - left + 1, bottom - top + 1) def __unMark(self): """ Private slot to remove the mark indicator. """ self.__markImage.fill(self.NoMarkColor.rgba()) if self.__curTool in [self.Circle, self.FilledCircle, self.Ellipse, self.FilledEllipse, self.CircleSelection]: self.update() else: self.__updateRect(self.__startPos, self.__endPos) if self.__selecting: self.__selRect = QRect() self.__selectionAvailable = False self.emit(SIGNAL("selectionAvailable(bool)"), False) def __isMarked(self, i, j): """ Private method to check, if a pixel is marked. @param i x-value in image coordinates (integer) @param j y-value in image coordinates (integer) @return flag indicating a marked pixel (boolean) """ return self.__markImage.pixel(i, j) == self.MarkColor.rgba() def __updatePreviewPixmap(self): """ Private slot to generate and signal an updated preview pixmap. """ p = QPixmap.fromImage(self.__image) self.emit(SIGNAL("previewChanged(const QPixmap&)"), p) def previewPixmap(self): """ Public method to generate a preview pixmap. @return preview pixmap (QPixmap) """ p = QPixmap.fromImage(self.__image) return p def __checkClipboard(self): """ Private slot to check, if the clipboard contains a valid image, and signal the result. """ ok = self.__clipboardImage()[1] self.__clipboardImageAvailable = ok self.emit(SIGNAL("clipboardImageAvailable(bool)"), ok) def canPaste(self): """ Public slot to check the availability of the paste operation. @return flag indicating availability of paste (boolean) """ return self.__clipboardImageAvailable def __clipboardImage(self): """ Private method to get an image from the clipboard. @return tuple with the image (QImage) and a flag indicating a valid image (boolean) """ img = QApplication.clipboard().image() ok = not img.isNull() if ok: img = img.convertToFormat(QImage.Format_ARGB32) return img, ok def __getSelectionImage(self, cut): """ Private method to get an image from the selection. @param cut flag indicating to cut the selection (boolean) @return image of the selection (QImage) """ if cut: cmd = IconEditCommand(self, self.trUtf8("Cut Selection"), self.__image) img = QImage(self.__selRect.size(), QImage.Format_ARGB32) img.fill(qRgba(0, 0, 0, 0)) for i in range(0, self.__selRect.width()): for j in range(0, self.__selRect.height()): if self.__image.rect().contains(self.__selRect.x() + i, self.__selRect.y() + j): if self.__isMarked(self.__selRect.x() + i, self.__selRect.y() + j): img.setPixel(i, j, self.__image.pixel(self.__selRect.x() + i, self.__selRect.y() + j)) if cut: self.__image.setPixel(self.__selRect.x() + i, self.__selRect.y() + j, qRgba(0, 0, 0, 0)) if cut: self.__undoStack.push(cmd) cmd.setAfterImage(self.__image) self.__unMark() if cut: self.update(self.__selRect) return img def editCopy(self): """ Public slot to copy the selection. """ if self.__selRect.isValid(): img = self.__getSelectionImage(False) QApplication.clipboard().setImage(img) def editCut(self): """ Public slot to cut the selection. """ if self.__selRect.isValid(): img = self.__getSelectionImage(True) QApplication.clipboard().setImage(img) def editPaste(self, pasting = False): """ Public slot to paste an image from the clipboard. @param pasting flag indicating part two of the paste operation (boolean) """ img, ok = self.__clipboardImage() if ok: if img.width() > self.__image.width() or img.height() > self.__image.height(): res = KQMessageBox.question(self, self.trUtf8("Paste"), self.trUtf8("""

    The clipboard image is larger than the current """ """image.
    Paste as new image?

    """), QMessageBox.StandardButtons(\ QMessageBox.No | \ QMessageBox.Yes), QMessageBox.No) if res == QMessageBox.Yes: self.editPasteAsNew() return elif not pasting: self.__isPasting = True self.__clipboardSize = img.size() else: cmd = IconEditCommand(self, self.trUtf8("Paste Clipboard"), self.__image) self.__markImage.fill(self.NoMarkColor.rgba()) for sx in range(self.__pasteRect.width() + 1): for sy in range(self.__pasteRect.height() + 1): dx = self.__pasteRect.x() + sx dy = self.__pasteRect.y() + sy if True: # TODO: insert code to test for compositing # Porter-Duff Over composition colorS = img.pixel(sx, sy) colorD = self.__image.pixel(dx, dy) alphaS = qAlpha(colorS) / 255.0 alphaD = qAlpha(colorD) / 255.0 r = qRed(colorS) * alphaS + \ (1 - alphaS) * qRed(colorD) * alphaD g = qGreen(colorS) * alphaS + \ (1 - alphaS) * qGreen(colorD) * alphaD b = qBlue(colorS) * alphaS + \ (1 - alphaS) * qBlue(colorD) * alphaD a = alphaS + \ (1 - alphaS) * alphaD # Remove multiplication by alpha if a > 0: r /= a g /= a b /= a else: r = 0 g = 0 b = 0 ir = int(r + 0.5) if ir < 0: ir = 0 elif ir > 255: ir = 255 ig = int(g + 0.5) if ig < 0: ig = 0 elif ig > 255: ig = 255 ib = int(b + 0.5) if ib < 0: ib = 0 elif ib > 255: ib = 255 ia = int(a * 255 + 0.5) if ia < 0: ia = 0 elif ia > 255: ia = 255 self.__image.setPixel(dx, dy, qRgba(ir, ig, ib, ia)) else: self.__image.setPixel(dx, dy, img.pixel(sx, sy)) self.__undoStack.push(cmd) cmd.setAfterImage(self.__image) self.__updateImageRect(self.__pasteRect.topLeft(), self.__pasteRect.bottomRight() + QPoint(1, 1)) else: KQMessageBox.warning(self, self.trUtf8("Pasting Image"), self.trUtf8("""Invalid image data in clipboard.""")) def editPasteAsNew(self): """ Public slot to paste the clipboard as a new image. """ img, ok = self.__clipboardImage() if ok: cmd = IconEditCommand(self, self.trUtf8("Paste Clipboard as New Image"), self.__image) self.setIconImage(img) self.setDirty(True) self.__undoStack.push(cmd) cmd.setAfterImage(self.__image) def editSelectAll(self): """ Public slot to select the complete image. """ self.__unMark() self.__startPos = QPoint(0, 0) self.__endPos = QPoint(self.rect().bottomRight()) self.__markImage.fill(self.MarkColor.rgba()) self.__selRect = self.__image.rect() self.__selectionAvailable = True self.emit(SIGNAL("selectionAvailable(bool)"), True) self.update() def editClear(self): """ Public slot to clear the image. """ self.__unMark() cmd = IconEditCommand(self, self.trUtf8("Clear Image"), self.__image) self.__image.fill(qRgba(0, 0, 0, 0)) self.update() self.setDirty(True) self.__undoStack.push(cmd) cmd.setAfterImage(self.__image) def editResize(self): """ Public slot to resize the image. """ dlg = IconSizeDialog(self.__image.width(), self.__image.height()) res = dlg.exec_() if res == QDialog.Accepted: newWidth, newHeight = dlg.getData() if newWidth != self.__image.width() or newHeight != self.__image.height(): cmd = IconEditCommand(self, self.trUtf8("Resize Image"), self.__image) img = self.__image.scaled(newWidth, newHeight, Qt.IgnoreAspectRatio, Qt.SmoothTransformation) self.setIconImage(img) self.setDirty(True) self.__undoStack.push(cmd) cmd.setAfterImage(self.__image) def editNew(self): """ Public slot to generate a new, empty image. """ dlg = IconSizeDialog(self.__image.width(), self.__image.height()) res = dlg.exec_() if res == QDialog.Accepted: width, height = dlg.getData() img = QImage(width, height, QImage.Format_ARGB32) img.fill(qRgba(0, 0, 0, 0)) self.setIconImage(img) def grayScale(self): """ Public slot to convert the image to gray preserving transparency. """ cmd = IconEditCommand(self, self.trUtf8("Convert to Grayscale"), self.__image) for x in range(self.__image.width()): for y in range(self.__image.height()): col = self.__image.pixel(x, y) if col != qRgba(0, 0, 0, 0): gray = qGray(col) self.__image.setPixel(x, y, qRgba(gray, gray, gray, qAlpha(col))) self.update() self.setDirty(True) self.__undoStack.push(cmd) cmd.setAfterImage(self.__image) def editUndo(self): """ Public slot to perform an undo operation. """ if self.__undoStack.canUndo(): self.__undoStack.undo() def editRedo(self): """ Public slot to perform a redo operation. """ if self.__undoStack.canRedo(): self.__undoStack.redo() def canUndo(self): """ Public method to return the undo status. @return flag indicating the availability of undo (boolean) """ return self.__undoStack.canUndo() def canRedo(self): """ Public method to return the redo status. @return flag indicating the availability of redo (boolean) """ return self.__undoStack.canRedo() def __cleanChanged(self, clean): """ Private slot to handle the undo stack clean state change. @param clean flag indicating the clean state (boolean) """ self.setDirty(not clean) def shutdown(self): """ Public slot to perform some shutdown actions. """ self.disconnect(self.__undoStack, SIGNAL("canRedoChanged(bool)"), self, SIGNAL("canRedoChanged(bool)")) self.disconnect(self.__undoStack, SIGNAL("canUndoChanged(bool)"), self, SIGNAL("canUndoChanged(bool)")) self.disconnect(self.__undoStack, SIGNAL("cleanChanged(bool)"), self.__cleanChanged) def isSelectionAvailable(self): """ Public method to check the availability of a selection. @return flag indicating the availability of a selection (boolean) """ return self.__selectionAvailable eric4-4.5.18/eric/PaxHeaders.8617/eric4.pth0000644000175000001440000000007311543152745016247 xustar000000000000000029 atime=1389081084.61372437 30 ctime=1389081086.309724333 eric4-4.5.18/eric/eric4.pth0000644000175000001440000000015311543152745015774 0ustar00detlevusers00000000000000# save a valuable function of the sys module import sys sys.setappdefaultencoding = sys.setdefaultencoding eric4-4.5.18/eric/PaxHeaders.8617/E4Network0000644000175000001440000000013212262730776016272 xustar000000000000000030 mtime=1389081086.301724332 30 atime=1389081086.306724332 30 ctime=1389081086.315724332 eric4-4.5.18/eric/E4Network/0000755000175000001440000000000012262730776016101 5ustar00detlevusers00000000000000eric4-4.5.18/eric/E4Network/PaxHeaders.8617/E4NetworkHeaderDetailsDialog.ui0000644000175000001440000000007411203315370024253 xustar000000000000000030 atime=1389081084.700724368 30 ctime=1389081086.309724333 eric4-4.5.18/eric/E4Network/E4NetworkHeaderDetailsDialog.ui0000644000175000001440000000430611203315370024003 0ustar00detlevusers00000000000000 E4NetworkHeaderDetailsDialog 0 0 500 350 Header Details true Name: true Value: true true Qt::Horizontal QDialogButtonBox::Close buttonBox accepted() E4NetworkHeaderDetailsDialog accept() 248 254 157 274 buttonBox rejected() E4NetworkHeaderDetailsDialog reject() 316 260 286 274 eric4-4.5.18/eric/E4Network/PaxHeaders.8617/E4NetworkProxyFactory.py0000644000175000001440000000013212261012651023115 xustar000000000000000030 mtime=1388582313.784099698 30 atime=1389081084.700724368 30 ctime=1389081086.309724333 eric4-4.5.18/eric/E4Network/E4NetworkProxyFactory.py0000644000175000001440000000736612261012651022663 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2010 - 2014 Detlev Offenbach # """ Module implementing a network proxy factory. """ import sys import os from PyQt4.QtCore import QUrl from PyQt4.QtGui import QMessageBox from PyQt4.QtNetwork import QNetworkProxyFactory, QNetworkProxy, QNetworkProxyQuery import Preferences class E4NetworkProxyFactory(QNetworkProxyFactory): """ Class implementing a network proxy factory. """ def __init__(self): """ Constructor """ QNetworkProxyFactory.__init__(self) def queryProxy(self, query): """ Public method to determine a proxy for a given query. @param query reference to the query object (QNetworkProxyQuery) @return list of proxies in order of preference (list of QNetworkProxy) """ if query.queryType() == QNetworkProxyQuery.UrlRequest and \ query.protocolTag() in ["http", "https", "ftp"] and \ Preferences.getUI("UseProxy"): if Preferences.getUI("UseSystemProxy"): proxyList = QNetworkProxyFactory.systemProxyForQuery(query) if sys.platform not in ["darwin", "nt"] and \ len(proxyList) == 1 and \ proxyList[0].type() == QNetworkProxy.NoProxy: # try it the Python way # scan the environment for variables named _proxy # scan over whole environment to make this case insensitive for name, value in os.environ.items(): name = name.lower() if value and name[-6:] == '_proxy' and \ name[:-6] == query.protocolTag().toLower(): url = QUrl(value) if url.scheme() in ["http", "https"]: proxyType = QNetworkProxy.HttpProxy else: proxyType = QNetworkProxy.FtpCachingProxy proxy = QNetworkProxy(proxyType, url.host(), url.port(), url.userName(), url.password()) proxyList = [proxy] break if proxyList: proxyList[0].setUser(Preferences.getUI("ProxyUser")) proxyList[0].setPassword(Preferences.getUI("ProxyPassword")) return proxyList else: return [QNetworkProxy(QNetworkProxy.NoProxy)] else: host = Preferences.getUI("ProxyHost") if not host: QMessageBox.critical(None, self.trUtf8("Proxy Configuration Error"), self.trUtf8("""Proxy usage was activated""" """ but no proxy host configured.""")) return [QNetworkProxy(QNetworkProxy.DefaultProxy)] else: pProxyType = Preferences.getUI("ProxyType") if pProxyType == 0: proxyType = QNetworkProxy.HttpProxy elif pProxyType == 1: proxyType = QNetworkProxy.HttpCachingProxy elif pProxyType == 2: proxyType = QNetworkProxy.Socks5Proxy proxy = QNetworkProxy(proxyType, host, Preferences.getUI("ProxyPort"), Preferences.getUI("ProxyUser"), Preferences.getUI("ProxyPassword")) return [proxy, QNetworkProxy(QNetworkProxy.DefaultProxy)] else: return [QNetworkProxy(QNetworkProxy.NoProxy)] eric4-4.5.18/eric/E4Network/PaxHeaders.8617/__init__.py0000644000175000001440000000013212261012651020440 xustar000000000000000030 mtime=1388582313.788099749 30 atime=1389081084.710724368 30 ctime=1389081086.309724333 eric4-4.5.18/eric/E4Network/__init__.py0000644000175000001440000000024712261012651020175 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Package implementing some special network related objects. """ eric4-4.5.18/eric/E4Network/PaxHeaders.8617/E4NetworkMonitor.ui0000644000175000001440000000013212033056726022070 xustar000000000000000030 mtime=1349279190.005386198 30 atime=1389081084.710724368 30 ctime=1389081086.309724333 eric4-4.5.18/eric/E4Network/E4NetworkMonitor.ui0000644000175000001440000001503712033056726021630 0ustar00detlevusers00000000000000 E4NetworkMonitor 0 0 800 600 Network Monitor true Network Requests Qt::Horizontal 40 20 0 Enter search term for requests ... true QAbstractItemView::SelectRows false false Press to remove the selected requests &Remove false Press to remove all requests Remove &All false Qt::Horizontal 40 20 Qt::Horizontal Request Headers true false false Response Headers true false false Qt::Horizontal QDialogButtonBox::Close E4TableView QTableView
    E4Gui/E4TableView.h
    searchEdit clearButton requestsList removeButton removeAllButton requestHeadersList responseHeadersList buttonBox buttonBox accepted() E4NetworkMonitor accept() 252 595 157 274 buttonBox rejected() E4NetworkMonitor reject() 320 595 286 274 clearButton clicked() searchEdit clear() 780 14 753 20
    eric4-4.5.18/eric/E4Network/PaxHeaders.8617/E4NetworkHeaderDetailsDialog.py0000644000175000001440000000013212261012651024262 xustar000000000000000030 mtime=1388582313.790099774 30 atime=1389081084.710724368 30 ctime=1389081086.309724333 eric4-4.5.18/eric/E4Network/E4NetworkHeaderDetailsDialog.py0000644000175000001440000000203512261012651024014 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a dialog to show the data of a response or reply header. """ from PyQt4.QtGui import QDialog from PyQt4.QtCore import pyqtSignature from Ui_E4NetworkHeaderDetailsDialog import Ui_E4NetworkHeaderDetailsDialog class E4NetworkHeaderDetailsDialog(QDialog, Ui_E4NetworkHeaderDetailsDialog): """ Class implementing a dialog to show the data of a response or reply header. """ def __init__(self, parent = None): """ Constructor @param parent reference to the parent object (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) def setData(self, name, value): """ Public method to set the data to display. @param name name of the header (string or QString) @param value value of the header (string or QString) """ self.nameEdit.setText(name) self.valueEdit.setPlainText(value) eric4-4.5.18/eric/E4Network/PaxHeaders.8617/E4NetworkMonitor.py0000644000175000001440000000013212261012651022073 xustar000000000000000030 mtime=1388582313.795099837 30 atime=1389081084.710724368 30 ctime=1389081086.309724333 eric4-4.5.18/eric/E4Network/E4NetworkMonitor.py0000644000175000001440000003327412261012651021636 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a network monitor dialog. """ from PyQt4.QtGui import * from PyQt4.QtCore import * from PyQt4.QtNetwork import QNetworkRequest, QNetworkAccessManager import UI.PixmapCache from E4NetworkHeaderDetailsDialog import E4NetworkHeaderDetailsDialog from Ui_E4NetworkMonitor import Ui_E4NetworkMonitor class E4NetworkRequest(object): """ Class for storing all data related to a specific request. """ def __init__(self): """ Constructor """ self.op = -1 self.request = None self.reply = None self.response = "" self.length = 0 self.contentType = "" self.info = "" self.replyHeaders = [] # list of tuple of two items class E4NetworkMonitor(QDialog, Ui_E4NetworkMonitor): """ Class implementing a network monitor dialog. """ _monitor = None @classmethod def instance(cls, networkAccessManager): """ Class method to get a reference to our singleton. @param networkAccessManager reference to the network access manager (QNetworkAccessManager) """ if cls._monitor is None: cls._monitor = E4NetworkMonitor(networkAccessManager) cls._monitor.setAttribute(Qt.WA_DeleteOnClose, True) return cls._monitor @classmethod def closeMonitor(cls): """ Class method to close the monitor dialog. """ if cls._monitor is not None: cls._monitor.close() def __init__(self, networkAccessManager, parent = None): """ Constructor @param networkAccessManager reference to the network access manager (QNetworkAccessManager) @param parent reference to the parent widget (QWidget) """ QDialog.__init__(self, parent) self.setupUi(self) self.clearButton.setIcon(UI.PixmapCache.getIcon("clearLeft.png")) self.__requestHeaders = QStandardItemModel(self) self.__requestHeaders.setHorizontalHeaderLabels( [self.trUtf8("Name"), self.trUtf8("Value")]) self.requestHeadersList.setModel(self.__requestHeaders) self.requestHeadersList.horizontalHeader().setStretchLastSection(True) self.connect(self.requestHeadersList, SIGNAL("doubleClicked(const QModelIndex&)"), self.__showHeaderDetails) self.__replyHeaders = QStandardItemModel(self) self.__replyHeaders.setHorizontalHeaderLabels( [self.trUtf8("Name"), self.trUtf8("Value")]) self.responseHeadersList.setModel(self.__replyHeaders) self.responseHeadersList.horizontalHeader().setStretchLastSection(True) self.connect(self.responseHeadersList, SIGNAL("doubleClicked(const QModelIndex&)"), self.__showHeaderDetails) self.requestsList.horizontalHeader().setStretchLastSection(True) self.requestsList.verticalHeader().setMinimumSectionSize(-1) self.__proxyModel = QSortFilterProxyModel(self) self.__proxyModel.setFilterKeyColumn(-1) self.connect(self.searchEdit, SIGNAL("textChanged(QString)"), self.__proxyModel.setFilterFixedString) self.connect(self.removeButton, SIGNAL("clicked()"), self.requestsList.removeSelected) self.connect(self.removeAllButton, SIGNAL("clicked()"), self.requestsList.removeAll) self.__model = E4RequestModel(networkAccessManager, self) self.__proxyModel.setSourceModel(self.__model) self.requestsList.setModel(self.__proxyModel) self.connect(self.requestsList.selectionModel(), SIGNAL("currentChanged(const QModelIndex&, const QModelIndex&)"), self.__currentChanged) fm = self.fontMetrics() em = fm.width("m") self.requestsList.horizontalHeader().resizeSection(0, em * 5) self.requestsList.horizontalHeader().resizeSection(1, em * 20) self.requestsList.horizontalHeader().resizeSection(3, em * 5) self.requestsList.horizontalHeader().resizeSection(4, em * 15) self.__headersDlg = None def closeEvent(self, evt): """ Protected method called upon closing the dialog. @param evt reference to the close event object (QCloseEvent) """ self.__class__._monitor = None QDialog.closeEvent(self, evt) def reject(self): """ Public slot to close the dialog with a Reject status. """ self.__class__._monitor = None QDialog.reject(self) def __currentChanged(self, current, previous): """ Private slot to handle a change of the current index. @param current new current index (QModelIndex) @param previous old current index (QModelIndex) """ self.__requestHeaders.setRowCount(0) self.__replyHeaders.setRowCount(0) if not current.isValid(): return row = self.__proxyModel.mapToSource(current).row() req = self.__model.requests[row].request for header in req.rawHeaderList(): self.__requestHeaders.insertRows(0, 1, QModelIndex()) self.__requestHeaders.setData( self.__requestHeaders.index(0, 0), QVariant(QString(header))) self.__requestHeaders.setData( self.__requestHeaders.index(0, 1), QVariant(QString(req.rawHeader(header)))) self.__requestHeaders.item(0, 0).setFlags( Qt.ItemIsSelectable | Qt.ItemIsEnabled) self.__requestHeaders.item(0, 1).setFlags( Qt.ItemIsSelectable | Qt.ItemIsEnabled) for header in self.__model.requests[row].replyHeaders: self.__replyHeaders.insertRows(0, 1, QModelIndex()) self.__replyHeaders.setData( self.__replyHeaders.index(0, 0), QVariant(QString(header[0]))) self.__replyHeaders.setData( self.__replyHeaders.index(0, 1), QVariant(QString(header[1]))) self.__replyHeaders.item(0, 0).setFlags( Qt.ItemIsSelectable | Qt.ItemIsEnabled) self.__replyHeaders.item(0, 1).setFlags( Qt.ItemIsSelectable | Qt.ItemIsEnabled) def __showHeaderDetails(self, index): """ Private slot to show a dialog with the header details. @param index index of the entry to show (QModelIndex) """ if not index.isValid(): return headerList = self.sender() if headerList is None: return row = index.row() name = headerList.model().data(headerList.model().index(row, 0)).toString() value = headerList.model().data(headerList.model().index(row, 1)).toString() if self.__headersDlg is None: self.__headersDlg = E4NetworkHeaderDetailsDialog(self) self.__headersDlg.setData(name, value) self.__headersDlg.show() class E4RequestModel(QAbstractTableModel): """ Class implementing a model storing request objects. """ def __init__(self, networkAccessManager, parent = None): """ Constructor @param networkAccessManager reference to the network access manager (QNetworkAccessManager) @param parent reference to the parent object (QObject) """ QAbstractTableModel.__init__(self, parent) self.__headerData = [ self.trUtf8("Method"), self.trUtf8("Address"), self.trUtf8("Response"), self.trUtf8("Length"), self.trUtf8("Content Type"), self.trUtf8("Info"), ] self.__operations = { QNetworkAccessManager.HeadOperation : "HEAD", QNetworkAccessManager.GetOperation : "GET", QNetworkAccessManager.PutOperation : "PUT", QNetworkAccessManager.PostOperation : "POST", } self.requests = [] self.connect(networkAccessManager, SIGNAL("requestCreated(QNetworkAccessManager::Operation, const QNetworkRequest&, QNetworkReply*)"), self.__requestCreated) def __requestCreated(self, operation, request, reply): """ Private slot handling the creation of a network request. @param operation network operation (QNetworkAccessManager.Operation) @param request reference to the request object (QNetworkRequest) @param reply reference to the reply object(QNetworkReply) """ req = E4NetworkRequest() req.op = operation req.request = QNetworkRequest(request) req.reply = reply self.__addRequest(req) def __addRequest(self, req): """ Private method to add a request object to the model. @param req reference to the request object (E4NetworkRequest) """ self.beginInsertRows(QModelIndex(), len(self.requests), len(self.requests)) self.requests.append(req) self.connect(req.reply, SIGNAL("finished()"), self.__addReply) self.endInsertRows() def __addReply(self): """ Private slot to add the reply data to the model. """ reply = self.sender() if reply is None: return offset = len(self.requests) - 1 while offset >= 0: if self.requests[offset].reply is reply: break offset -= 1 if offset < 0: return # save the reply header data for header in reply.rawHeaderList(): self.requests[offset].replyHeaders.append((header, reply.rawHeader(header))) # save reply info to be displayed status = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute).toInt()[0] reason = reply.attribute(QNetworkRequest.HttpReasonPhraseAttribute).toString() self.requests[offset].response = "%d %s" % (status, reason) self.requests[offset].length = \ reply.header(QNetworkRequest.ContentLengthHeader).toInt()[0] self.requests[offset].contentType = \ reply.header(QNetworkRequest.ContentTypeHeader).toString() if status == 302: target = reply.attribute(QNetworkRequest.RedirectionTargetAttribute).toUrl() self.requests[offset].info = \ self.trUtf8("Redirect: %1").arg(target.toString()) def headerData(self, section, orientation, role): """ Public method to get header data from the model. @param section section number (integer) @param orientation orientation (Qt.Orientation) @param role role of the data to retrieve (integer) @return requested data """ if orientation == Qt.Horizontal and role == Qt.DisplayRole: return QVariant(self.__headerData[section]) return QAbstractTableModel.headerData(self, section, orientation, role) def data(self, index, role): """ Public method to get data from the model. @param index index to get data for (QModelIndex) @param role role of the data to retrieve (integer) @return requested data """ if index.row() < 0 or index.row() >= len(self.requests): return QVariant() if role == Qt.DisplayRole or role == Qt.EditRole: col = index.column() if col == 0: try: return QVariant(self.__operations[self.requests[index.row()].op]) except KeyError: return QVariant(self.trUtf8("Unknown")) elif col == 1: return QVariant(self.requests[index.row()].request.url().toEncoded()) elif col == 2: return QVariant(self.requests[index.row()].response) elif col == 3: return QVariant(self.requests[index.row()].length) elif col == 4: return QVariant(self.requests[index.row()].contentType) elif col == 5: return QVariant(self.requests[index.row()].info) return QVariant() def columnCount(self, parent): """ Public method to get the number of columns of the model. @param parent parent index (QModelIndex) @return number of columns (integer) """ if parent.column() > 0: return 0 else: return len(self.__headerData) def rowCount(self, parent): """ Public method to get the number of rows of the model. @param parent parent index (QModelIndex) @return number of columns (integer) """ if parent.isValid(): return 0 else: return len(self.requests) def removeRows(self, row, count, parent): """ Public method to remove entries from the model. @param row start row (integer) @param count number of rows to remove (integer) @param parent parent index (QModelIndex) @return flag indicating success (boolean) """ if parent.isValid(): return False lastRow = row + count - 1 self.beginRemoveRows(parent, row, lastRow) del self.requests[row:lastRow + 1] self.endRemoveRows() return True eric4-4.5.18/eric/PaxHeaders.8617/Documentation0000644000175000001440000000007311706605624017260 xustar000000000000000029 atime=1389081086.01472434 30 ctime=1389081086.315724332 eric4-4.5.18/eric/Documentation/0000755000175000001440000000000011706605624017063 5ustar00detlevusers00000000000000eric4-4.5.18/eric/Documentation/PaxHeaders.8617/eric4-plugin.odt0000644000175000001440000000007411140633217022337 xustar000000000000000030 atime=1389081084.719724368 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/eric4-plugin.odt0000644000175000001440000176577311140633217022116 0ustar00detlevusers00000000000000PK9>:^2 ''mimetypeapplication/vnd.oasis.opendocument.textPK9>:Configurations2/statusbar/PK9>:'Configurations2/accelerator/current.xmlPKPK9>:Configurations2/floater/PK9>:Configurations2/popupmenu/PK9>:Configurations2/progressbar/PK9>:Configurations2/menubar/PK9>:Configurations2/toolbar/PK9>:Configurations2/images/Bitmaps/PK9>:}VV-Pictures/10000201000001A000000147A261748B.pngPNG  IHDRGwc IDATxy|? G9Eт֓SmQ?E~UD+O("ZmUě V* \IȝM;1;#lcšTZZp۶m#O>$n6(5M]w݅. O=Ν IR>!~F-yK}A BQWĶN /})lr˴xF}.@cẃ{ ^^  $t͇ $WE!|JHB :t԰~I,I(?;>,w>?]!4@hzgHeG !AtO >}JGїޯˆ*LIPZV MQU$}@ gy&b|O?wy6ј4n e%Bgޖîw[w޼yp"+m۶M}Qݰ-ו!Cuu5ݺ5Zn YQ I8 ǗV K߰M6D;-jsp[}|x'z>KG@~nlkSπ"gp]Eml@i}}ߵK`@@dY,+eCRdU"ɀP t Ȓ )$I6[ ׅ]\/4-c)c# m^ ve$ (jl@t9t,K G(#X-p4s416)UD2_Jf|7o0  !PWWm_|s0D\|e8(H֛o:ry>˼ѣG[M믿5jTDFrIxM#H^cͷag>< 1lchÖM/VxIRL$PKkyb#7AdEPTCV$F!CT@PQN2~CFQY$#@0$ BF Mu{8=r ^:FU2 $AVRYPӠ ! HMP__]4;(rq?X%7`0l~gt0аǣ l]fm&(s4~E}V6V,{Y)+F0yTɉܤIx\ppmw@&''e l;&ckӦ ***~Iٶm[+HǕ)BEYY*F9eKqM7Ŝ/\QRR}4e]gtо=CˇθUxOhԵ /*k\ht)ص~ ?)lVA$7#I2$I 8CdIjZ%YJa *.E3l tj8M6`hFH NP4 =M!+23t]m,f.|i0t*z.0vX_,AƎ n:Ȓl-PxX*B۶mwͿۙ[. طz6(_Zoqt68s{TىrɁ$}a8gy\p TWW;7%|1-T. yhӦMԝJ-< $D( D٣FN# K0^uY}hݺ5\6.] h۶ **qƙ}Y#DDLDF/2 r& fѷ9֦6,&n}/#^} [qK[EڷA U[IvZMBA<ǫ0u kWtx*P huAdi?Kj0$%k 2$YlTAY6ȐBp|d"/t`W B4Vox B!:Wet(^VEUiFS$"(ԂC%( M7%٨Jv4 n6ͦz<^U X5kF9ׯqi:֯[CӍjPP Ow[ h8#5n_8رz!u}GMG !ix:xH#QF|=T%7lo9޷mn]⥗^•W\ ͬB ?w\̜9ࡇ–-[oDCՆsM7̈́x-c$o2a( |lٲ}ziӦ裏iؾ};.]^z%}ڵ+f̘>}@QX|9nuv튙3g:d2lݺhK/3OƝqޫ G$IxXb#ٰ֬qͳ*&?7n%a4 DuR<IBeP;idxdȚMA TIE0"+FC@_IB$+ +03o.3 ]/@Z XBCu:4f :xT@:^](ͩQ}8NǏgV'esRU>f1cF[ݵkX'+ jhTu]vw}x8:桠woW52Z{ ?z(|>L8=hAYEY_{ 8n-[c9ƚnVE{q=܃k~L"A0`/Y.Ƶ\klH3Mm0X|b,g1f>CSN6mpc޼y=z<'M̙3/ϟ={{ٳq%$-2{.d#L4*@vP\RML²eÕW^z< <ߋ%KuMLJ~8+akiũbDxJE;ޔt0"+%+|f__ IHx,A@V 2$ݨ@B%!AC%Pe?#탰an%X#F@7Jd.e҅@ct `q珐e_GUM% ]󻡤 vڅݻvCP=Ȳ G` vڅvzˣzLhdٳ}ҏ$G࠭:쇼k.ٳ%rw><:cN%' d.+ h~AF/T xЪ]d5]1xժUB׿# F&aÆ>#3Lh~mT,  * Q&KUPGV hGRU I$BnBG闞2d@V%xzHlQH MBPed!CT*Ѕ?j(r.zPۑ,AdȊ UvmAcY=*I3FTuMZٕ+qE_r V>,B=.y U5|^[ ] FtqPu?hc :=/+2 I&ecK«%jߩAEeR*++Q[[kc0FTM3+++Q㯶擥ȆI>mce˖a8#1c \qxᇱqƈ&L˗{(/ĉq5࣏>#<ŋ['Cj v!##ڷv{ 7`D2^Z,/$cDsEi\ }yyy ϭ|EEXs/ϭ\<;m1)aii@M PRTUG*_|hVC0oBQsg~fEQҁ]EErrr}=JJJХKdggCYYM.|Çc9r$zvK/C%U}8e?wN,ܹ3P4/))q6Dxi'^@J6x$?rQ~MJlM+=@]P[[olZ>5*r ERˀ=B~Jrh YBUp<^>)D-TTI6:x^EMQ/0ڋM.ɀ***|^dYVAQJ?j(]tE$ z(%!t%IV ,ƶYM1Pii)^xk҃P=񥥥Q#b\㺨~vF.(k!*+a+Q2En߿]tAAA1Qq '裏n56n܈K.ǏǓO>iufx]9ꡇB޽?O?4FrdffZBff&=z ??목ҥKtI7/'lU[:hLdnⵁ4<EiQҎ5޺HY:ѦUkȒ7Z ֨@%(Ȳ]z(,ȡdUY U*bUA_H nגꧠmU<С, a\8H*d]$ddZJ$H5 j( !4ҋV.jd f@0**xݰ.-kQ8p7j [4laM@ƽ-D?W55Fܫ? lInFM,GqQ)uM.>m_EYYZlYՇ,_Tx/h_>t(q"CQYTlz^sxxzxxeH@WkTy _G׫UxгGOIfd䢨 t]@QTx<^(ښ e(//GYyJDqI1JKPUuhw,Zn<1iYGFDv7m$e֭o7.B-/;Z(--+,~~S]q)ckqSNղ2׳VuLYE$Afq^S[lklVPVe]fz3ۉ*++!އO ] ffx_^ HB5߇.̴>4MizD0DUU<A! ZesCvBoN^3}^[e# sKˀ@]mjjjb/:С B-c4Exsz<(U} /̌ TWנ3u"#i% ǺvIdܕnO?e)03B`ݘ0a`+fv{ϕTm:oVik|ۭ*8jg7ENcPpTsA#X燯Uk׼F9e <`U +_Ƴ>֢GQ_:Mcyfoa>{`UB@!xo2\LqU5U ]m0]uM5V ݽ.+4w䡑5q1b>4~2q@YjfB4TU_W@nSeZP̸&$AtEUx& n0n@*Y]u$Ÿki ?2 - +:Q=Ʉ"+x饗GeeC$vBw^,4]aKPU<ыvy|}_tĩ @z Y,h 9 wWh͓wV$m]@u%2“x2b3w{'rp`W˧BӂOc_Du(uKaԘ'uDDI~xKHuٓSI:R[ۺ%HP$Į@Uu%*[BVv+x<*dCV%iP_0zBu$71zsm),AYqı~lP1ہjС ԃ A-U2dEue[2:ufkxU/N:i8 @~cC+IBe.@ҡ ng;u5 ['6EdGwQacsbkc{h] o ;cf)~6m裏˄ٕڬKv,FDkdPmPb4V7d3mL#{}wz!63n߄.$I PU]l6ڴn h ]h(+AmiŋYAB&814#>hꈠیUQu (#Cm)RGQ%#7+P$BQTWWAãȐq8n:dȒqzF[Qfq'` dΆG5JwA-t9.7gsc=Q h0B~oHigqwXAT+C˻GT׍'*֖$shhv5-3$`Bۘ/Ao7FXlHOؾᚺX%fJlz@'Mӌ.(*PVQVY1>ჀB׃+uV ףmV" ɊqC8 IKlU= {h0WӶЂ@Vfku*j5T5^ '2Ld2!2,/CIi ڴ2ڛD e2 54Mced@UUPգZ]u?8uwصJc$Hq'nЪU-DDc k3ك X%@!fBDD/G 1 #DD N1(P5FDD,CDD- @ >DDԒB|e]€DDDv+ ""J=$2&9FD@`=̛1+ ZC׮]1qD3ו*kDD2{, /@3JKKQ # IDATZZm۶aꪫhITMDD.C3Vof_|:ݭ$`W[[kݻ7xO< ~s+;ضmdeM޽{uV|駟`y0ax k;#CW^1(bޡӦMb…Α+WF]~VO<{u`͵q}ѣGC.*~tEE6^v-z رc 5/;w0`VZ>}8#G믿* \Qv{Xv->h+?{.o]vaܸqOx0sL9SNe!&N1|Daav2xtzfLiy{3Ec>w^1u]wMӮ1="=Gy$N8˘8q"}],Z :ޛ[;޽֝]vYѩS'|(..FII JKKԩvܙpz;vtaΝСCeO˗? DD--^o @ǃ>ߏ{b̙&Lފ=qDEEE3gN:u*f̘~`۷oW\aMF埈(& {l=ꄰhѢ ꄐJ~-.|giYÞ={0o޼tg(QFAUUkP* ͙3J@;w.p:J***裏B_"P[[jTTT^pͩ{8Q[[1c8RBQ,^8ѡ*GuTUUAUsHW_}uqawk":\tH ""u;y<+Rm@DDQ__ox;boyEQbPHvv6Ui| ""Jvڡ ""JΝ;Gmmm$I!""xP[[ ߏ*ԠҺ1#źkw};vha 5۶mVZ!##dWQ" /ĉZǖ@ MӬpB$x^Mhڱc.d *+MҬ_q&bͫ/D @E@udeeYp~d6~D3;*g=!|dU1Sr 6 DDt0ٓ첱X] Q%vMw6p7RY @pUpZ9!g#Ο#6>]󝬖.3ߩ\YQ*PuuxG\xJ8 ]m\\yO-]RC"ѣH2Xgz7l6\9u{ffDžߴi#ƌ:}SGs+A,Y'?PS]mM/?#N^Gws]WAϮX28l gD]]k^ zvu]|qM7~0AX2<N9}sƏ/vuuuuz⑨v'c wb2/GgW:jkk1w4 ¹P[[5Æ%p@Gf8~NxjjjP]]jXy!j 1Z9n3f|}}՚Ȳmۧxe:Ozq |1owF]ׇM[P\\?ݿ5/nbTVV`7GF].Vz[?g5 sJhÇ.%ظi V}~oKx?~5^]7m}{ ov|cٱ˚ֆwۛqQ0s޿0p Ff8CE@uuuy_8 1e\ ݃Eܹ ^p5W[@^^gdffᦛf;ҹeέissoCnn;ܹaW]_uk`vh}99p˜[.wܵ;vϗS—۷'ÚկZЮ]{̽ '+/[oyy̙s]ڑyw`Qpٔ+ʧQ_ 8F^8g"7;]_}3lݰ{r L,R$ɺd7}xdكxdCed[g ؿo;wL(y]#M1/՚爮PTtL㊋ХK>1o6zȀpEmڵ[xvu?/))v⢨y8∮4h֭[Ň9soQˊV?G9އlv6k7D/FuױcvGs蘗gۿy ٌ¹qgٕ/SNuN7?ݻiСk}j(++sLo߾~'tJ+V~vСc~qWo?vwDGMxz;{NoOM_qcǐ$Q1zm;s4]Rnθ⨂ktU,΍wuv܉@ ;wbwbyn9~-i4-hM‹qصk +̼zk:^gEQR\,Z8cǝF>Ɀ@MM ݇;n+tL3v߳%%QRr,۸X>{ XF7~<1;w^cִ֭s7zX,\p7Q\\˜bo}݋sMګ8p98}GeTOA5c}D'I @7v1ѻϱrd S.cŴfXvq58~H,b,ִW ? 7|#8,G11^<9ms뷧qǝ q[8q I8ēӯ~2p#q91` Ꚗ[bmwpЦM[y)͹cqm5NGϞGߌèNC.]iM &} q_?۷ǘQc̨1/ӧsr8? =>Ɓ4 Sc (b=k mڴI,YDC3O& OQ* 딤ګkolHI4ϭ|3nLwVkbI-:uL2uɓ 0ݰU aE͙%z,Y|N;Cv%UUxc_EtEx% {m9so'FW~~>? u8קk;dP1x`_Ȳ[Ft!CH蚞M @K@n '}Ѭ|09}(/WD.![|Qj \_$)% F.FPAA^y9$MDD dgg'/ tczAUN% ׾lDDf2?D}7 A45@ۀ0bĈ+'"]^Cei#""jnf HeG1{^3QJ̪73DDD)(:S{(ETUiDDD)a8[R""j"GQ(J6 =d|RPļQu74KmrDDtx `VYTj"rssk׮8q"vYoX>ܞ *%ضm*Y>;aA|>PڷoYf/pV5\|K,IjDDf[`~())(\$\m3@nݬݻw9| 33ӱl/"":4TWW555ɱj[񨪊ZdddU3u?#zؽ{wKeR`ǎuYYYhӦ <ON)п<ػw/fΜ>az())AII ^ۀү]vܹ3:v순m999VA$dИzn:tF)^XXVZ8餓0l0xo\p>쳴m@UU(#F\\"Ν28p7n\DDDIRU"33> >4ϡ{8Q[[1c`ܹ%IUU)Aee% 46󊫯W_}u˯]QQ~?~? ѦMB|*%ᅬWRR@zDD,+Ȳ $l=ለ+q }ZNDDm4QK?DD[O?5KC{w 3%KQצzZ.z ,ةjCq V Bp`bǎ͔U"":`ĈQKl{O1+x(VaII-c f2 z\{ӎ;p%SPYYH>TM8~y {(MǛ/4vX&QfoRpod""Ãyqhƛ/-%G?uњկ;oCqqaw"XR] /ejr HguVV8~0~8ꨞ ˉ)5qs5h`~똸.\x?W z|ޘ /t\te&G9'1%'yDT⛽gŴf૯N/5by8ߏo' ŠG9~psL3~_fggʫƎo`K/ Da4TW;nݻwW]{o:w(..X0N :C_{mm-ι}P8wjkkc+0autFo{h7lصkgBΜ>vָͫz*!8p8tFe\g 9M{$Bw hOc]_bTVV`7GF].Vz[?g5 sr+]c:Ym^ ^/w͎]ov7;vAr L?ճ'.J?~5^]7m}{%[ooƞK;gFvg1ߟz о3_Kˠt]C.ť]sz-%' .2 !C?9:|ܺkgV!'9bƷ.] :*|@ǎyX%ϯĊO /3ছfsGcmwg^7x3N?W<"3Vz̙s׮Yc%rs,w.qG2VKjُ} x)?+onӽ{%Cѯى>ov:m|r!%}.gmys\qqtɷ5mX}дc_!~ܽsތ/#>w+=]׭nӭ{}v5v _RR#lwͪ3u\۞~4?ZZ,-O}e}g%/]-[nOKJD-#ZUڗ_c{xf(ܦ+zWXpx<~I2D>"F/_}}k߱\ۀn`F b\555طw1}qX|DIAܳhcz׉Lԩ 5_Ņ^Ů]W_aG]?͛޽{Q^^E [ZnΑ1cp(..Fqq1ο cƎKz5f?xUڵ[B>]zW'}Czgl#J@n6\zLs6nx ']2 'xcuo@fV <15NGϞGߌèNC.]iM &} q_?۷ǘQc̨1/ӧؤmk~߷`+/c=Kw>x8yho4X@yai&t'tMoΟ8 e9ZlD܏DdzmZ;>eu]?7)SN2c=]gμlJ*X]OmŋWOC}}=,~fKHDnt^p_2;oo o`ǹGt\su)_/# ]ӓԢ VEӴ^pL.b8܏DFi @͑""J i @x0vo""J dgg'/ u'G_r+'"q ciR܈#r""մa%҂RBr^҂Rx{IH5gťDDԜ܂K@DDnA^"b""`""NͶ ""jn$YDכy@DDDtkPWa/ۀK@ @DDb퇈R)j5#Qc]muB`!"$ >DD\vB "c3l""p}"*Q*Z@DD)avy@DDr _JDDԒ(-XGDD-((%dYy)$Iݱ ZDDDicث Z=DDDivB "`""1 j}m""Pwk[< (-IDAT(-(- Z#"4s/DDDŒ%bdۀ(%=c% ""J  ""J  ""J #".((-(-Bm@aqH!Bu-B-DDDi;!QhM$DDD)v[m"bF""ƈw/8 8 @DD"m@N @DDb-(L,QŐ% ޔRUpDD1(Y: #"- R >nA' H_% ""J dN7QS{H6;ET1QK`*^PDb=(CxyQbiC;!1QDHGDD< ""J kYlb[%K q "JDDi$5!n_xE H`Ix( CDD-'R-ʭx(\ۀX""Ts @GDD(B^pDDB UjkH9]cYډr7g'Q縔‹E5=qm@DDtDT""dŋ%,QZ0QZH熝(5─DDD*8""J  ""J ^JDDi 8DD"*8""J(%"""J% !""J8Up BDD(VZb""Tb/8""JHuȆ,Q6IZ5{K@DDRv; ""jAR"^gݰ R)H(Ux!*$Iwf/=¯뉨 $C˱ytguꩧꫯn2.vؑ 0bĈ-cc^NwVYM-$s ZKxl9 B{͚ UpD͛7㉧EeeUrzx_pݵW%v؁.}9MĚW_H(Zbᇿ7ܧ5v߄Nt%oOcoܦDZ }tњx\ۀql,5dJ@vV t]gGѱ (R~瞤{Q9^2<=a,wܒÆ oa٧w#1Ӱqێ={;vqly_-tn܀qcD^Gק.mUH>7?ۀ~!s٧`-?=Ca֏pӍ0pcxG0`9QͱO?c2{&/t2݃??ΟpAdҹy/8_!?0nl ~<Çgތ3!"tUl1Nqtl8ҥKߟEϣNK^ӱO~1N=Q1exO>Q={b;y~o˻X%lsu(̝;ۚokc-طo5ec۶u{:n}jps'ۭ(G۶mirǸ;<ӒϦ,UYY6mFMgkoY}>ny3NL*鯼"|t0gUrK/%x6 v<ۻ9+S3z1rAB}Z H($H(.`C f (yHEy ( JڻuPˬk[LWӧOKUMw-PD. xW; ˻_|{Sbȏ޻|nXN@x+x?#89<}Ҵ4}g~+]Ǿs''bii /~{}x'qs|~vH.PDDNe@oϝS'qGƯsiy緐& |(^{,nϝʀz7߂ϟƙW^‡_t?"^~y\#x7ם=qy%| "X|/~ͯq'?nFa׋8&31؅ء9 8|x5ةxQ>w펁zW&$Cfql;7w;nw}ySvcJ)ݵodv~ȣ~AR {@Q f6c8@eK ˊ@QXg{.n}Rp4ۅ'F#?W/*-^̰yW<<它ڲzn5 /x;L bWstSؓå kɍN`pSx%J%CJmA ,J0J<] A4K^w]7{l'YJH!L(R9! 2X :$XBҟt+Ȗ \pLmfT+ fRY!˲Z1m Ֆ=m6P^'q֣> QDDDDD$:tP? IENDB`PK9>:鶚ZZ-Pictures/1000020100000330000002BE5151AA03.pngPNG  IHDR0} IDATxy|E=G;!@!bT .reT@QYqA9KTNAQQXO@.$"rdI8dr2fyHf2=3ݓ\|zꧪ[#0rq=^v-f͚Zd2aܹ1bDgaa~x嗡j!BGDDff[C 5&{O-0ˋNJ/ȨF9#"L&\+>'~~~iAVK*Οp!42B6ùƨ_]aɷ< d&r_]_k92G*3,@%]zqY|~XouՒFNwByy9N9y"--Vzxmt gYg5u@]<1La}Rjc R]IeŶOk=}d¶m ۷/@]ʷFW۶mR/WA< l^}^?˗nMXNvHتMfTVTJ 3¹0\:[{h2C :CeEeuaj5Z ;V?`kcYoI쀳igDV@b[I;4T8 SN6mC2{#ܩ#ڷKDb[5Vqy-g*ywO˖ ]LeQvIV?UM<)hK<%*S}<-u07ʶ_2Kf"  $jUO_/j\n {ĬzXy\egOlA\g2h VwA'{gs{mrDN*yjYBgۧS_SAvuJO  X`2fZ$ªT*~}6,& f~pR U2-\ UUJGe lvz6ΰ4}4Ǐǻ*0L7@V;> B[[}ݖ-HǚlFܘ`lr8 ahtTT/ 7EYB T`?h:1`lfJo(i.Æ=Ν`ѽ/-{O{+]&JBϞ!bШ;v,&3|Mk={aʕ:u*f2Lȑ`Xlsl2c%XMhFBll,fϞŋ`ذ'2/;-0|,[2 K-۷o?> >>Xr{_ǎCmp|ajAf3[&5۶}ZaRW!flڼ٥~9ѹ&CtTQQo7nc:ifT**heS/^ę3gĆV@h(`0*|,%0a0]B;ڪ_U| ]êS;t[{ѣصge7(D7X pa]Hy4lj̺c{㣏?߰a ]܅fQcUǏ>7=y|٧+??p"yNq&4,YR-wɴ⥋رc;.] (0pA,3`M.5R20u $a}_Y~㵡6bIh44ir(1faߧ|2%öG^^.\g6̥үmVV/)\fJ0rc WFlpEE#@f@ǎ0DcnPUI餭/v§~ .e^rBqq1t:UΝ;cĉ+q%;5kXFEE!$8z\RRK.lPPJJJ @Xh.z3^+x m6y˼"i h׾=t8bOClӮ|dܙ}iw^H b&O8{m^?|'`ycۧ 8Rƾ(H]tsD|ZቡC^z<'uemWc[/!#FWY/ pIKUGk%PU `1p@oC(lJZX,"""  l6>VԈ0ՙCTT31CBBjVT͸A`֭_Э[73^22d~9 0T*o00&~i?ci '~QJSxcŦdj3@{)iYWTw*1M&El,b=^~=tXaO,$R5}?|3#q1EEEr5YGbE2سgtXB?|)!XbVa]hKgL7}7T3ʐzŝk"UCgKޔuM%I[>*4 TEy;*:cjj O }!lFmM 5?6RjNϋcKcɷoC0ԌlT̕+U Dc@_ ()O`30Jx13f fxOb4Yor7ėavo4Vl_jSVo;/f|a|e,mY`ee%]SYY 3ji;ΖYlS|mZpvNf`,VgOn?lr64~w?2J^͗UuĉjԩڵkWt\w,?]x"3 Zۼ}{Cϝ;3E2l Nw&lY䓏i&4j0̞*}]ARٺ+[nڵ ""eυda+(**DAA>|~bb#?P^^]N۰o^D7G-u9__jE/sȇZªUPQQrwI>Mq S;)x|@;*º+_6ggO쿃`yAniB]?aw.!gξ4}9i;SbW[`f6:y}*BYCg,STW}ݭu}~ɂ+BUFKoEvjKbe;Μ${}[Wi3]0iȕYf],f61JJJpĚ9ZQڪTO˷ /!kς)=z!$$$T'w>OMV$$$H`bY`j5 зFƁt9CHMMƹIr\='rsw E@@@O*}biJK!UIROi;5k1v WCR3UxaF[j)7L{Dwchi%ni jL=tUqyk?^l  4Nmb [[wׯcDѡWv!f&DV%o:0L&`kmJ È:0Lc&F660bN0 ᶉih{+CSW_'gבmap`1mӸ[,08z04 QT\Za`1ԉVqRvj0 S߯&u2i;am0[+JD~؁GRCQq BCa0ZֺucVIQ޳}E]1v1;;sg޽{PVVNzKJFF(uWWqkRWuQ;Y*, #`0P|yMye8a9v>>HL%%e / !X-\t qqDo%+j]1[K9oBBBqaz]ou32.\l^۷bg~R;`ԩڄWKgBt…xHf$KSÇ"7Woo+/AѵKGxԱv鈽c k4йmcO\V,҉3a),,FXhR6メO k>pњ0j׫MB pNm "®];P¬Mq]ذߢeee6%ܞ'iPVV& k㞻xXtgF`ph{M?o(l^^.8&Mq/ 7WK`Wa{w9wl=~;|~~~xv:wǏWϾzP @@60ll޼W^-M1l׫jfhq.#᥉/b„ǟg/ѣ%ހN]rVP/כp?Z^=5~~;\/wוm*mz~> ~>+f=%o#l=+W믿`;gd""5=`ih}ݸ;xmc?"">Cv3"((/M-⸉ccƎ/ְ_g=^=1͛# N;7(1ٗs~ v{m9=<]^3<ܧ/et->-:~wjb-]`̜9KVVZ!W+iW'%&6E|z=3_~ƕm*mzc="Wg]O>Zr-[YERr=`װ3ApZ>rz 詧E#ÓÞјLW:8::_~11] U IDATg "b='*Cp\ HJ [ "mݎe߁U׀{.W^ hęӧ0XSr? ڵOtZ iW6@D(p5|#zI?n ΢d&&My\̟;<ϥlsƹ=eeeA[DqY~ƶCBB~DɄ} /[Ƽh #Wg]Ξ+W.͟8`\"//͟~9:5;v弅uC0`@ :5)…󯿾6oÞΝ;s-x?GK0bܞ^C.<;@dƮ& uw ___;tz9z pmEK%Oxi== _r)[;vq $.y;݆ӧĒJɫ]~QhsKߜ7~gǭj #Wg]ϱ/M7ߌG@Xy]>q߽q'ϳ2>ǎ]Sw4>n\T8q" ^~޹K)8v wS#qi:ٍ)Sɮ/DF"wa 60:m۵ƙ 4ymb [8U:t(%w*cK_:n~ƛBLAV+ _Px9F 2dijlB4NZr^60bNx!xWLSq̋MD4aF O8u .z4M,? 5F a#61Mw`lf]ji\uaML~)"S<x uaMLS~\ `0>f` 4Nmb X+L.]ݦ=4Qtl S a#61*[< `3(CwݻGJ0MuaMLcAzlFQ0xaaaKTj5D\u, ^_qןaaaA 0t𒕕 <<~~~իlR6aaz`2!T}EEE7oV\daaMwBDK_@bꫯ"&&{u_ۙtC>}#h" 00#GDyyd& ӧOGtt40x`{+aaa 1Z oIx2ܹ3Ot?KD$RJJ Ət:$&&bĉ{'NYfI`>|GN?NAaai(_Kj;q5!!!8p .]2ɓ'qX`~QK"::Xt)֭[')k͚5Xb7x|M-s0 0 0LCb6AfˌPALll,>Cdee!== 4h8GϞ=A\Q6mڈ~gggKBRR4 j57oaaaƉD 3  6^"** sC\8p ƌ,f9 222ϟ?IY-Z `4a2@D2 0 0 ӸQPT __  `yȣ>ݻw X`aaa8s(Nii)燌 5Aĉ1a :T2F¹s`4q <|1 0 0 SXNիWqUu03zh̜9aaa馛pq_?i$tE ٚ5k0qDCvZnH̝;W2iӦGxC&0 0 0u)"Bnn.J \J'e?ӏ;%cǎa_~ 0 0 \1,DJeһ * ())A~A4 >Zh#^XF0 0 0 Sj5Fc%?* 0^ rի <<~~~իl>k f<4xtKTd>AO~Pn-ڰ}k$^ yEnqn-)0uT#""ӧO!oJkǎxH<ɱ˕PI'o[Ý~oĆz4!4E jk/04xOf`ߏgy .Dqq1{޽Ç_?!w^ >M7݄ӧOʕ+= #Ǫ(`@ʕ+)!!Z-%''ѣGΝ "___zIӉ/\) ~i*++JڥRHHs=GָN)%%%뫸,-]Rffy:Ŀ6 74m4j֬ӠAի"/8ARUTTЄ (**護R}^ʐmw$˱cǨm۶d6f3mۖ?%o,ȕ\N}:k /4CB#ea|~%eO>cǎEbbu?y]tw'Ot~3gg8p@䟚} `ɁNCbb"&N(g8qt5kWҞ1c._4={/^̙3<%7g~G~t7oތ$lR>r)K[sv} pa9r::uHqfI9r67{lk6ϥ^ʢ%__8 OӋc cQD]\>ps=d2HwT*U6d"Z4|VhŊt%4%%%h*))f͚⧥Քٳg)..+iٳggΜ-[ѣGM6t9tvJ]󯭭9vO]]lr6紌ҷG*m9S"Cճ>/ 8z<`zw-u} J;m+;4-g>aܹsODD]qi)2cW0 r30pRSSq Y `j1r퉌r(!!*++E?[z=M4uXo=6Ӄ3U֪ec3+E5,֤^q$ik֭:uzLHH,c+,,0#"_)%%"##m۶yfiڞ۷oу2-#,am;V'iwe;ow vx:x\Y[ضm8wkkkJ>Rj5jRTJ&ͩj_.}-]ٝrճ>/Bzrrr($$ -om@m3\ىi)ե6XpUn?hݺud6)11Ѻ<)w0#Mb LJJ }.ߟ>sϨ.ÖV>kJwM̤i57k~ #21ۓRm'YY<%^L[n͛L\˖-iÆ TXXHfn4ɧյI;66V$̙326lXLnh޽Nup+kkkJM'UV)I$os˥D9S"CzeȐ!oҢEhСve{rm@m껫f`CDuVر#7,kLn$lB={$___ G}y㚷@}ggҨi{F]NgVXΤAnO읫f&OLaaaFSNd)114 %%%ю;ʶ?R۶mIVS||<-_I.d#FIFIL#G4| rPlPqqTRֽz7*N]_md2т 7vma2mƍGN/V=Ry;%2鮞D{1Ժukjݺks}rvlqe'& ʍhƍ'zGUoWWǞ= XtFHMMSk*?d%>رc%bC%/<`DZޑr|S> YExkdڵnF`z7&K 0ϪU 6* s]sİ*:͒}:lrYdFBpi̜b\ї _@a_/aB /AFV! F(0 0 FQQ,Yc6* P/=FOށa&-É7aՖPb48 (,.Gv]۩1!%ma+AJ²e0 #/ȃPLgfsҗ@y1 2La caF<Ъ0 0 0 STTæ8V SC0 0 4A4@,g`nL fٞ_Vq&,-#4G~aaQ2;07yWxni(/ġG5BJ‘ᣝixٖ>5~-ذaƏNwCcң.m,e0 zYBE ?g*yO25xni:"##S!薨 |܌[ZaHAJJ{>"ԩSL>+);v?"##O"''/WrBCC%B 8h֬fϞɓ74XG1Ȩ0 S4w`D tCHSښ2 Sբ-2"Ȉ[Œ"#{B":\hT$ڵZF)Wƞ={pIHMMŚ5kǿXx1&M^SN!44C ˕YW_}QF9ו~GF@@.]3g ==Vdee[n uSaT.VD@/@r5Dǥj)??H[***YfI@+WjLG:F&5-ݔK;勜,_iwcIϧx:}4\nhΝ;wRݝ߶m%%%VDi:-"sQJJ /=äD.\H@O?4y%Rzg)$$BBB瞣Rk}II *.Kw˺k׮p^D56G=zP;FMF͚5#4h]zU$sG Hʑ 0aEEEQXX[ӷϫT\ٝRr펞yR̝)mСCԲeKZt"NY!g3NC .t2ͣ0j޼9mڴ,X@Լys^;as _:8#SG3RSSITbWxk\̟?wq1x`^k.tъeb߾}(((@OyF*& "gPfЈsYeX3n2bYӧOرc}OD.]ǝ;wɓ'>|8̙bٳ;-HII㑓NDL8QϞ=8q2220k,=c \|iii8{,.^3g㏢reNYo޼IIIhٲb}}wŸq Wm 99s&py8q{uH^7''?> N/bal5LMMuuil30H{SNQՓx "֯_oL\ps=d2HQNRYeL&RN÷jՊVXA.]LӕmǴ IDATSRRB͚5OK)gR\\WҎgZϜ9C-[wGR6m̙3sreNYwڕOI?%F4rHϧ|z]^?9,233QZZ7bΜ9 1j(;wF'N]3%܈#0vXdff&LuRy;%2M9g޾(ɓ \daXf ^ur⪬㥗^Bnn.rssU o0/!/]E1#ƍ)..N'%)((//Pٙ4|^>qәV3iPaa[_c)pl6ɓ),,hԩd6~zJLL$FCIIIc}Զm[RO˗/wM{F!}Ǔ 9)88Fi]C+*K%eݫW/ڸqߚ5k(66wteOD ,>umц $ 7nEDDPxx8-^XqHAȐ˧z3"R-W+}С͝;W\%H!g3%%%O?EGGkFZ֥L%mΎo0Gn Y;EvGTRSSiң;/9 :7ǎ,_Z XpaC(6Tb3FDu .'?*UFF]h\/#Qb3Lݣ;Gvi۷K?\C2 ?p~.^aɒ%;vlCT;c"3W%PXlė{˩kظKU9C&./ 4*0a ^z ?xC0_Bj>:uiJO}AJ²e06l'ބU[.C9 |/FtmƄH_a4 Znۣ ܹsZ%az0A`?:iҏ`F$2S%p\1 "DC+?D 00g^$`fU=:]<Ǎg&07sdF<Ъ0 0 0aaaƂɿ0 0 0̍CFjuܬ:1 0 0L30$`aaan\x 0 0 0Mr:>Zn t ǎo߾v|||кuk|x31ׯ>} ''GE@9咺L&L>Q\\"`aaLvl&55CAAQFY9s核{#o?999tHLLĉEٳ'N@FFt:f͚%ׂ pa9r::u0 0 0Bl'/T:}ڱmS~sq1¥>Xe{^!""`0J@||GqaX,>|&L>j8#F8΄#--i2!(( ɓ'#//yyy4iFqaر8r, RSS1|pi'"""":= *~5)wxW_ 7܀;AAA;гgO̙3pwxbڴiOa=z˗c ŝwމ^zٻwot +ӧw޸뮻#GbȐ!ՖkŵbJNN3^} ~""""""5z}`%0ۿyQc39R4{`<  3zODDDDDTWm|C6fK]>\7bWF1/V5u4h*ի/16C^Šbն( CJXl=cEVAMT""""Ҁ:th5bL&WmĔ_T6nvcL6 hժf̘qYЌ׺up]w!885jrsszykٲbxCCEhh(0{lCyƖրbذaسg2;+lJ G{ˀ<9| 0bRA]l۶ O>$P\\㧟~t)4O> ʥ9#E-m0v(h" .X-ЮM>Xs P -q[l6oތc߾}HNN 9Yd {9hٲ%FaKpߝ`ժU;v[xC3BBBpIѣg" ݻ7?b׮]N;+$"e* 99YUi[$ywJCl'̚5 EEE8vRSSet5T߿?T@Yi&z^k{FGxx8~Gw7nDDD:'Oٳgcؽ{7233^CuңVH-^.=ORX,$??>_RR"fYurZvP)nOȰϧK\\b\+""gΜh|孷ޒ'On[} x,^-K}Jf)XsrߢR=GlϓmF"۷o[oUDw嵎S}KTmHzz}>--Mbccݻ+4wzyI^tMr0#iMz!3f;wNΝ;'O<ӣJ8=olgll9r>*[k׮#FH矗СCw7yoo :>;C'@)MyR9e8|^z\h"cyM7|}JNNFi<Æ>DFFJnnjމa֭һwo w9;vKkUl6[\;wAIddtQV^Fo<33[3wշʪڗY,2S2Ez}Ēm/OXaW'?O~򓟍1m=3 /Fw)~o{ ٿoLOtKͰ59)D%,BvQ3õRh~JDDDD$rSi)d .{^/ B{wc`8psL? j[bx8ٮ{I1re.}ʃ7˥nAGtq|ҫ%\lD|0xXwq#5O'KŊfG#|%k``"l] .9@IgO!g1؋G!mG3rKo$~O_ h [¼ {^^+~G}+.ī#wވo`|A9ΓeS1[zZg7e^Q1!"NkuHD]z`/MaM`,7~YCnxioEUe<|IΗTOp .V ΗT܊kB<7 X??*~YQ&~r܍vߍ 9YF IDAT|5}/>n Q;zy}yd[xCv#0ČGcEj_,_8&gO[":k⹚g&ʗ:B=0\uEϻan懘l/?ؗݻ9/޿M3>_oƈ+=*G3po7;j'J-uzzTY*gW1e(*اwK-ބv0X1 [vC?ǘW"]"a+]\zl@U .#WC6"{z[|: |=}{#ⱻPYa5m۾X^%No18[,y&˫۵}j] MZ703£þKO^мU34o ,vh ׫O\>_BeRi{SŃkpJUhmO]}V;(嫷SꐺG)~Æ(Bғވopӝ^\ұ+F5N#?bhض4>_!`hH1Wu|ʭzY}$.=0U wxoj*,VTYMM3ӍsxCyϒҐRw:y/k;^% gt8/UۢaVT9M6_ķ{p$,pd |>+cp=qy^oc鏷sN{7?ݎs}1XL=lUYb{xoN߳hw# r*b΁z/@r|r//rOamW?=ڵ1\sUZ//=mkN#hl8=uMRgeSjG-'Rh;qh坧gsZUԥ=gaxKѹ4CQimcj& @F?RPf PxN]1wCxx+(`ApXͫB5p6 Gr@!s7uL0B:jSh[z` v/=u DxT y:dl&^Yf98>+&^^zן-JT(P=ZGĵ^sW~}aŠi坧Tgs+o=h!u)GV:x7}eϯQ4Ax{^RIkFfuAP}Fv@yx}ġb$fF:?hQzP|b}(/BwԮ GsU2<}+b8f^xr9q~n[%yڌ=Ð_ 9]f>>AΠ~_ddpe,iQݨ*- y `?oW"Ey:$[s"wlx;||>S?]GP&\N}..ȭ@+jnwE( rkV6{7!i.͈< ٹ>m6}ꁥϤ`k܌:ezSZGĵ^sWϔ; O6NVyN}:sVRT3h<:p^/s9RxmӸ<܏^58y#c@ق`QmFPDxOW]oG:(z3M eUxn=އVmPEE+ŠvbTEDBUH]wen5ʪJоt`92x^eBa%{>{OzHz-:.bdm|Qx?Qt"ޟj G&.}Ngս<HP]A1=tNW7nj7Ns܀J:&C'_9+O؀ n0ܥ^=敮xٽe=ĜkO $nBj~|Iz=bFpY7/a/zǶzK+ *-1AD)>+sμ˦؞zy}}+wFi:o9h!u)6?๾EE0kt}bX{N?&. n#GGO?s *aO *Cþ@Tyyo/PWꐓiŘ1x>MjSrr̜9ayn!t 6ń A>֮=/bBXbAeh\Ş"""H妆af~ok3 8"nfDci0+O~'?br/~lr[̟oQ7C_|]RJ4{`uqWguc/DDDDDd[Dm5o} ;uT|L}&00{Ưw& ~[ןTov4:"iӦ!""ZŒ3K׺up]w!885jrsszy}"44۷/ w?O_ۯKQ]U}l}|CD^dҀiJ=0ޠ,qx?:mĶ)((}݇#G*ݲePUEk7X,>^{{n{xii=ZBBB$::ZwTQQ!>enn͚52n8uŹsCr!i4\bblܸ>qFիk׮]J@@ˇ~McWHRRiFBBB'zٶVU+zJJJʞ^^9oYY^1/xz]S1G:uCHVVL&JNOzi;>ZuR;wNZn-yyyNEEEINN1q[,Ire[W1RG9ߵ(v=9Dv,meTJT2.ꑩ10EEEXhw?>vڅ 88ӦMPsuH4>,rssΝ;cgϞcDVVj\0sL:u HOOlj'0k,4ر)))Z_Ԙ[C رcafBQQ;TlٲE5ooo4w6_d߯9s`ĉij3f йsz{ٳ}=߯ѣ1gcؾ}Sֱ+yf"33999x饚'ueZVz R/|HJJBQQ pB{fW#99zjEi& T&-zuRFDD`Xl}M6ᦛnB6mT+ǓreUvk{ll}Qqj׮dffH||jș3g$::i]-%%%e4tt|ZZ:czwJlʑ#Gn;Naaak.pǼsLeժUzjׯ6۷˭*UUU"b*6*o]K1/']+ŭ[J޽%44^;./p/>_YYTX+ů~iir+c? =znA֭[(wERTTd/,,pxlΝ;eРA);vիWkn;@le۵-ni&Сر{ ӧ̚5^̜9Scx}}d}1zQii\yR\\,RPP ZIHHpS ӪKm=|gbZsRZZczeAmږ+nR^Z7lדwL]VL'Om}exXYrj"CW֔rx+--Mbbb4… c`5K.ҥKZikjWV[OEXVm۶tN,^p*^mצ*Yr?V10nc`<c/F?O3#"ү_?YpWDDnYp߿VN-L.۷7,[n:qt{Z#uZ:Ҫudl [oO5c`j}2qqqݻ7>37cǎő#G`X"Weee BPP233}0adee&M#--iaÆĉ5Çcʔ)8{,Ξ=yqYY>#tQuǼsu8pg)nl汞Fmp)̜9?#FPYY 1d4'OF^^0i$"ezVZd ylذi,^^_{X` QXX[nף1uǂ зo_@߾}`_qy#zuV| /G}:<- <-WZu:7uݮ7È8׫n󓓓mT'oY~p RUU%Ϸ?[nrJu+رK7tZŋ2qDiժDDDȒ%KasΕ0[ ƌ#͛7͛˘1c \I*))QFIppiF͛'N&,={tZwjZz4*ͻNZ[V:uKxxL6~P.;w,]vwzep~Bc=dl[*ubCy~;%88Xzڬb=^JOOw^ٳg[ocJ&0uV|4JkǸʂ}\i1F(tIR'ۭmZ$62Srr|Eз߬Q`+سg|ˏR:t G6uRL&%Kť^}8z(:)XQSJ)MB_~P"N-cɻL4 8s L￿DD˥+**ҥK1a„N %.~`GM+!!W_}5*W^i$yrL&Zj#..CDtI5bM1qD~$5 Aˡ߬o!#"""""tEl0ɡne"""""j*~..VP3=0DDDDD\o"c|0DDDDDeH""""">a y6`gCDDDDD>m 4DDDDDTL&?M)}_= y=M yɤtd6`+)5byv {`kbkؾ1}"""""bkd &1ɯ:|2aO 5.q  [BDDDDDFm c=bx y(a|0DDDDD5Lza\z^lsCDDDDD>1-KDDDDD^&S{*S"K^3[ ~""""":BFDDDDD> """""Z&Լ`|,ѥ=0DDDDD5Di)!"""""   _jIDDDDDDu /DDDDD!|j"""""'.=0&v LDDDDD^2B]C 0DDDDDL]dlp#CDDDDD>f{`g󅈈fa  '"""""e?9|{`kw8s y=>F|o!#"""""e=0DDDDD L{`ț>=0DDDDD䕔/BGt IDAT^""""":Ƌk """"".xR QcSk """""j,z[ؐ!"""""oeorDDDDDDMQ&"""""P6`k7+}IDDDDD \[*CDDDDD> """""^&S6`) 7L| 5??>"""""J+~ADDDDD s{ 2DDDDD6ZȻQ,DDDDDDؔ'CDDDDD^C]§Wj/DDDDD%nO!#"""""1l12""""";O #"""""o`k>]2"""""*,-c,o!#"""""c(S{0DDDDD510DDDDD䕔3!"""""hcgCDDDDD>t7ꟈ!ĬQSQP"""""jzzw| """""q {c[ ==ADDDDDg ADDDDD6u_q y%3ؿNF y3ٿc[ql:DDDDDDn\3~[Ȉ[5`b 70""""""o 1FJDĩQ"""""!"""""8.=0DDDDD5Ԟl """""Z|2y-wTV~0 θ"""""bz{Qcrk`}CDDDDD0" ovQ2j CDDDDDMDn0cv+Qc02j1&"""""֎qd^Q1bi!dDDDDDԘ ~ """""c| ~""""""o"""""XeBFDDDDD>ý{ȈK)CDDDDD^z C3dD`8ω[DDDDDDނg^^"""""Jnaㅈ{`̮_y  """""Nnx!"""""oc2 x"""""jTz*N  /DDDDDm2"""""nc`؀!"""""oր؈!"""""e>^D1ʎO$#"""""BDDDDD T7Xl^4DDDDDD u<}bo4zjCDDDDD=0BDDDDDM㧐5%%DDDDD 1n FFDDDDDފPdDDDDD\smp y6 o!#"""""  3|o!#"""""o:&m QSzB| y3[lؘ!"""""oz Qs~[Ϗ&#""""" y ,n=0udK\3!"""""ç7Pz {`gCDDDDD> 8?:6Xz +DDDDD y[㳗-dJ>RJu{DF y6^nsy[ ǽQSk {` &buwQS{jQTq_5b4LDDDDDԘ8wp  !"""""  [Ȉ;*]cEi|>{`ȫh=X=0DDDDD3e"""""|% BFDDDDD> """""nǘLzwݻ)I <"""""TeKXjE{k]fZV]ooKFSy_6NDDDDD !"""""  6`gCDDDDD> """""f@/Pڲe > """"j:uB޽ /o291T7˵^I!""""jFR#6`ҷoߦN QԩV^Q/#10zDDD ** ]t1cZԇ:-DDDDDTL&Jc27^l M6[ngϞ:% t}"""""jXn  Hжm[;/^{5{XUU̙ ڵÓO> .7l؀Di]w>{Xee%^|Et xaxwѵkWjc_W\}ՈQQQᴜq L8:t@׷-C6mpm5iѥ@D&Wcǎ%K`޽駟 qaƌ8y$֮]_~pB:t7o޽{q)mڵ ?Ν;m۶a֭ػw/rss`5=-.sӧk./¼yٲe ֯_cǎaxga q;RZch6K}]Nj<{5ֱa 7W30(**GRRbbb_~k֬!''Ûoi[r}ݖ-[bNۚ7oZn  ** QQQX`ޏUVoӦ .\UV9-xbk!!!0a~W+qO?]] W꺿_k׮EN:aŊԶ{+_Mp=}F\ P޸}>}T &k?f̋|O>Dnܹ3| ~G@=n:{XNNTնm[ʹ;?77~9m;!!)݀s/Kpp0,}6i\ʴvuI/f۶mx'b_?u}/r9vޞ>-]|246S=0W-bFjj*Ξ=|8u 7?Çh"L8icǎ:-Ǐĉ2nTTǎi,>ЬY3 WZ{t ͚5CBB>#8M&-Zhb̘1N}\ =BCCѶm[,Z)ZɄs"""ڵի`DFF]vذaC 3f@6mÇV5 㪶>]*)) .=܃f͚+ ۷/֯_o_699T˖ޥK}3&pOO<\;mѣhx Hdlݺ2dƎѣ1gcؾ}f7oFjj*233^zV5kp1b˖-?Jrsssbȑ'0w\L=6je@uW=kmH^={6ߏݻw#33YYYnY;co}uۧzi*((Ph2dlٲi|y饗} ]t˗×/_.W]ufkdժU\7nDDDHxx̛7iJqٳ%**JeĈr{̙3%44mO>-F0 QFӧ=ھVҥKew1͊o^z-9ybfdd%..N1^tʑ#Gv-//ww/ϟ9sFk]OR*}M4Ţ>j(Yx,YDN}vvSzi2m۶)//~:4߅MIIDEE).#N:mWIypuԋK/zHZʎ+TÕovnÕ'u2V~\5n*LmZuqqqo-111sN8kYqYtȏ4tŔ,jgٲeB&""b \{۷[drgضmZl7x RLdb?b 88PJlFEES\G}՛d*"Z0LelӸ䏧2fW[Uoo0c `kTӡ^O:oElllӓrm6L6 wFII=\+X6IypuԋZҨw\Ef]ڬo㯷 Oh9Jm}OϞJ/zyo6Q^^٬wǎ1l08.eѣGzj{ﺫӼc);vl!p7b[o iclFii}>??)<::m70ڵaXPUUej>z4zNptRL<SLE$MZL84JhRtT yD@w'xJ;ł)xwybbAPZj@JIvlM |޼g>kZp2LJJriCί :Tv'ݮzVff\:NsLy4Ӟv<-U2sT6`nj*mҟ`L |_ٷjJ^^z^} [m]0#Fh˖-";yn2eFq={GѣGo>M8e5uTkkkS8q&L;wT6m+gUj֬n^0N]wݥK|?;wjܸqʯM7ݤ?ڸqc/MO8Q7p.*sĈVuy擻"կ__WVV/5Æ UZZK:OڃSs4Ӟ$粿_[Uewxws>JՍ6P_*m__ُ3F&M޽{uM2e{۶mzj-^z_ V]0C0_y,_*3{ί-[f:wlL׮]{1q=IHH0 64cƌ1EEEݸqݻ2:t0O?#GQF 3w\7 X_䯬̛7tDGGnݺ˗W*`roΜ9QFWO_=ywLϞ=MLLIII1K,13`ꫯZ}/oK2_#|ѣG[z^70;v4}'ѣG͸qLƍMƍ͸qѣG'_׹p*]euFɝs_q-U2;W<;`u_m2Vkf*7WzMZZi޼3=xotbf͚P5Qe7C>VW&_׸V?+0qM)'hK򷕶3e*;;[SNՐ!CB$|Bu-TA[?EHwap,@U%''3PNԬY3͚5+I,'TN_{9O^CsjzNKK8hǨ|BE[Bu 翭KȸpuFec #0<@*>" :aLFk&QI6zKV'Σ."7zz#王cn F]t`lb(@u aY$n$|Rԧ < C,EG@vi*ޮrI Tl6yJGI\6n8q s B.d.~#2B1n[t `~:0>*t`| @8q > : ] |D~Ԗ}DDDxez .!B@A@M:3D<}8b$@6[J l`\2u" H1V!pg]|JJ:? rHUKO<ll)6miذWا.鮬~eyM什:Udɖ#B*ḻ8Ckݺ(5\ 8J6|ᯪz޷/G\;df0@j:A&֬Y5{S6_Q}wuB11g*9y_.͟H)6ƍK=Ɨf7WSnn *> }KJJW>wHc3CszeĩL3fW}w}tK,xQڥ*"KՅq~}XƏ[MRӦ4a=:ve__Wx6[1sdW]}ի| _TFꊊi̘iV/ڦm3 .r]ѣСof2}W.׬YM W7)7K|Ν;*=}jAZh}{*!¯_h+]{o5a=ֶy ƍ+4{-3(/geeeo֪Ulڼy-eeehlkmܸBvviV{O?jmۇڳ'͜ r &<驭Uo_o-= Ys` b0>O?ZLΩeɒ%:묳6I)f|9*Kaii48K%%[+Ӿ}y rڶMr ;E۷wiQOph(7Kef/A;vRttӀ}5| WklWͬx6e59yV|Q;w$gAcm^Xy޶-K;_f/<_i.U}TgqǼZNԅ{mSF?ԩSGi޵@uQmԥs;pkP IDAT^/<mS m fruNcnuti38'LXBcǎOί &g5zOXoeiuzNyӍ5.-Eݭ:vl}{ޕ1F4%I 6Piio_vBQQyWnnװ]ܱc{*̹IuINNԑ|}|ce«K_uLXW zR,;;_:֓;6Ό1"-85Jq[>=b"…p HV^]{c8CNmݨ}>ݾ]~wO,g} . Ujݻרtʶɘ^/ђ.y1|Uxeft^ O[G -*/֥<,[= mDEE"kڽ'zfYvSO-?3o߈eRs~֔)s5r5)**VT~=ee9>w?opΚ5k[3-Iĉ#5a=ڹsJK˴iV u#[ɓ{MցhʔAW]+aîs[Ⴢ:ë^o__)ې6IiϞ]#"ۗu>| M:O/Tzzpm*k[*-E11]t9CӪUw<;xn>}^y1[+<@-Z4ӬY=x_>Wu7 ϩwܢ;袋 8~=wHPϢ[z.F5lU#GNѵz6{5UQW5|]]gAboZUfܩJLlJI֭5gNzPWgxQ"^=_xڠ'=7Ojڴ.peSԨQCo_]N[Q~b1}{"v}v23CYma*.pɶ;u7+33R38uJiueJ҂/jҤѡN Lƒԩѐ!:INΓ%dtd͖mVB+98Rut5kY:IN^/V-Ԅ\R(CxSm#-mVkϻ1 c\F^PA}9:1 '`nE Pܧ_ ہS@]aLy/Bʒvp2& NFc:0t^~ɯ`16QdeIB@d٬""\;&&@x KGgfUO}(o TOv0@X4B@A@0%ɺDz)0Π luVБ @A@A@Qa}9%sPgЁPgЁPgЁPgЁPgЁPgЁPgD3a_Pgx@(0Πΰ:0Ƙ q p!yyn @ҁq<1( pRaYW\B`@ :ByԅI #0 F`Q+&M$\BΠΈ O9 ޡΠΠ 9.%0W:/YD@uܯ lwXl6:a˽Cu#0†KPgЁ1.2\BB)))ڲeRRRBVXR:0!*SAJJ=2Xjjj*80@Qae.Nt`lZO/,Q;1 a'|;v:@(3K߾}CV|嗒TN #0!/IjEΝtҪu` 9n8+ى绐у"f9k9tBVwJJJw_WmYU סB ]4k瞫s=7x樤hiFÆ _tVnT^=uMiӦ})==]:uRz+R~aadZi[z܁/[:8n:jڰaCU'/'|RǏ_|ao>]p^^>C}jРVXÇk۶m=z&MS^Mv&h[z;F5-[#GjĈZl6O#,w_T=7ڴiXiiij߾ڷoɓ'%~Z]vU̓LP֭5i$͚5Kg϶iƌJHHPÆ 5|p:tHүx,|N?t/~o+j޼y8pիjΜ9z4cay_^a<3JNNVLLz]aDjJLLTllƍ&233u5רqƪ_ ZKJJxGu __^stbW\\nIJJJ?rLw׮]9r^{5͝;W]tQtt5|p[N}^xᅀFuرc?~6mMj„ :vܶ}]uM111JNN?ﵜҞ$K.{Gy1&LqqVXCjذaz7]RXXhx'hʕڵk ɓ'[̙kÆ Z~ݫsa^Z?R뮻Nk׮͛ 6hƍQ 4}tIm뷷{f͚iժU־}ԣG ]VW]u{W]uVxJ8dddhڵ*,,Ե^ &l_f6mڤ,]}՚̞=l޼~mڴqI֭[G<5}ov̮]1t<'?~ 8/]֭Ͷm\nӦr8Vv… ͏?5>'g}5kի77|F~~Y`ȃ!C5C 166Js`-[#FX.#  ZSrr<㓒\Gxꢼ>^P t 7[o՟L 6̚cF]n[#FЖ-[TRR"c^Uۓm+ڽ{x ]tE 8Tcn'\uvmZ׮][oU~tիW=z(Ӯ];裏G{Mlll@boFe5jd5jdFe#DFFVZCoe23o<ӡCmuf/_nm3giԨ׹&99$'':7|ӜuY&::ڜuYfŊk_ZwOy衇LBBiذ3f)**cǎ&22Ҵoe>1s:LM\\yѣM LBB?~PSSߛ-[uU[^IGqƙƍƍqƙGz z]n[˖-3;w6QQQk׮zlUkZ첞alf…^{@n݉YdV@M+--M#FP핓W_}Uk׮FX*@K.رc=n3fKȌ۱8 2Dk׮Ν;5`sիu-:yb3tg_ u2)/'rmGi"nL@҃,6E5%%%E_~:wbҥJIIyg+Ӂ TI RRRB&RSS}V _1@A@%d†I33*\BfۭaTO>D;vu2Z6 v]90l6`F8:/} uRZ_JR%%X jү_P';wҥK+݁a opkQ/sNLhԥ'VZ/_$+>|Tg6)-O<j1cJ}?..Zڶm!Ch֭~ÀwT73l˴iji0mޓ`ʢqUVu֗sl64nXm۶jYy^z^zJIIђ%K}kbZSXXBmٲE?~|mDJx5h dgb߾} #Nd0mޓ`ʢqUVu֗{eeesȑ#-.gO?7߬zHʕ+zq^ꚺfB&?4iI&gyFɊQ޽_K3zܟ f󕘘X7N>}w\8릛nRllwYYf̘5lPÇסC{1?^M6UӦM5a;v +gټ5\ƍ~+km/))QzzG}%l_q֭bbbk9 W9:aΜ9SVb /Q-ԪU+}ᇕCv+Fjʕ^ ]v(+**Ҙ1c6< qn+8. |7 /ԗвeK͜9S~mC_~z%swmvo#=¨3j.d|IuᄃeZv uj„ ~`:W֬YM6)++K999m_ rssm6̙3,}7Zjϛ7O6lƍ h^{O?iڶm٣3gz̟2 jM2p9<_=`We/ԗ)%66\vey"##Miii9_8=ջg⧟~jo;1p/`> x>c9ooO?A魷R6m:Ɲ0RPPKz-{w_BV;$&&jΝ.eff*))¾6Mv-ZSAŅʲ^ڵK+))G}d]f.IIII.9vתU+޽[*++:]TBBB_ |СCumi߾}:xVZ)333+V(//O . r+OZΪL=ѣGuǏ ,PzzN{ 2yMLLݻ]vY=v).)_gOoyTm_~zn⯭^\\Çk…V#0y ]m ‰wFρ:tNeffT;5l0ǴnZ\p^}Uas`|i֬Y!xzOӕ| f1UZZ'ʪHWU1fM4I{Ձ4eʔ1bl٢cTZZjm G(SOzGyDGվ}4qDk[FFuM76nܨM6IX5uT+??eΏ6_2.<%n||[@f.u]tqܹSƍ_[}ĉt9- w1GIcŽg"Iw}zA)))I R^4c Ǎ=Z/:.q:s]xyzORSSխ[7%''E5k0~m]uU^%iيSԽ{w]tE^x]w)55U\r6l#Gkܹsu֚3gbR|*ŋ+==]+|I.]gϞرڷop{jzWJ(SO{9?QӦMujֶ_sQddkڴiéL^gϞF}ڵ?|EGGKZڅW_e/>!P~ӴiӬ 0@Rpmm%Khĉy ]m BɹoRތ cYo88va_os`ѝq?޽{{\NF?JeffjW0kY]j3&p67fԨQ^6mwٶmud1e*;;[SNՐ!C$n峺 y'?#E@%''3PNԬY!'Cկ=q`$ (--MiiiNF}k>q2!7@s  ~ }ܹsԊK*%%%}= Ё TI RRRx2,}cOFդTNt`;-́*#^G`5#~Yr)aq P0'yR2:1~ "E{ρ׿UC8}c$_}v`|xB'&9&6lj]fx bNtl<^B PWq:2‰It^Y% V*=ڰavޭIVRR:t蠳>[1111X-~ƍm6 :TZl0N}uc!_6Xk.:/֪U+ 6L?cè0h&'' nZ{񕾄 j/*B*lw.щN(\BΠcO85o\3f̰~%{$\:WNtP%PсTʢEfm޼Y}222xbIRZZ/^Eo$jʔ)zG>}̯&3^zIsU֭պuk͝;WK,$ܹS]v.reffJM6kBj@]W906 ͛7sϵ9m޼Yti飏>$uQ?̙UV$Kl6[mP>|X57nCIq;VcǎO;-E':0y`err/_~)T8۷O?չsg{=o֭90lVddz-eggp6mڨo߾:3}|ݚ誸Lf$&&&F}Q>}>cud*܅2@urKG^lzG`IdQv]e'^p ...S~Dͦ*ɚC@p *Bnp1+y ~W"-¸]fms` )-111*--Fbt.xuZz6СGvuq?nkz?οI} WU3N͝=_/x8tTWz+1LJ=սk'M3]Ǭt)޵K-z={viѭ:ƍ<+lIJV)ZǔܞvV&D[efI qM|ر"=cz8Sz{Sǎ.8U;R)'{kTl5y:d]=rmټc_R5].F}λ@gTx>|կ#c:t>^R Z{**:jk-zez7sPVV>ӫ|EZleWԫ|E#?yk>+)gsRWTTڵkzR&##]q@yF?O\Jv{bկJ2˯І l}jo[]li _me]{c:|Ú.@ܜuUthv/QNn1Xv?6Mzڵk-}+Gu;C=wWTLL1tun=MQ65kXm[Q7*=}jfGUWeaz pQ@_6unOK~/{M_$Koב#+%>'猿=p9Jy1a(p=yj޼>Mk[+޴hBgywW5j)Lë.Pbb6lwL+߭?)SOk_~ZǩLy~k1o.җ_|.cVP7I>*|o.JHHT 4ڲyt/:W5].%%մi>Rq=uHSrڵ+K-[4}UWeYI+''G eQV]zj}Y֑#G_Ge PѣO\Q~KT~R+>CDUکCttJJ\}?}bַnРvdQY]6[DXOU6oJJʏYTt_s"F*'2mܸ8͛_yg_'Wƍu=⁗H }:^q7ݨgw.L^p?܏y.\2qCgT~ OЮ]Y:{ve)!!%̽?:X[lHVii]w+5jHGQszb|]InY2u߶wu9}[hR&{V-eQzԡCK޽7nݺi%:ĸj+@ׁ:T:׶m8Neeed;zƍD>ǡXǗ СC:~BZ7hު&MxȚ*g5vӭ[w=d֬=wO~!)sCqN^f#ua=7_焯z:6ϦTy.\2eQYYl6Û1dScM2n${; $Tj4~ڵkJJJk.͙uZkI_(?@7otʫu{^͙%9رcGw 7Ν;]5lHwڽkJJJ?(}J屲z ϑ2蕥/驅kf+Ҽ|͝󀮸r=-zo/UvQ~Zߔ@x<_|_tyf7}ч*,WiirH_|^VVq:xH_}Y2+~GɧX_mXgwg護Ư7k; KLarD=|}T\|\w3T:vm߾]Ǐ^~#ʞ^[7srssuA饿UrrG[ 焯zw^;TA]:zoN+_1LpzbmOQjճƌݺOYHgWN]5kLmaL&MKk5WON$|9C9gw1#s\4 `urͷܪgq7ٽҝwL%Ry2]NWgkuzWt]}ռEK/V||n}=ot!]p2~СCJx<鵿Ձ:2 tiޢ;BmXx}֬PZVs?P/>h[9EK{^1rVw5jDy 6jĄ2ƨ]բeV^)j:kءh={95aX{nJ^'U=|Jy7o\~s>#=܋jF=Pnƒ&0DZǓғt~N4͛7/[oog`-~Pt~N0ucnyC`oWnnnF~R}_I ~|>Z.2ʺ‡@ܸi49j!%q}}i H ~|>/N"/~GxJw?&,@ @F_ w`z }u2@ @xf ;06A@ 0/Ɛ1Ȉ@ g\ R0HC @ a yyMŎ/C @ NT|Ƃw`4y×_X} Vʘ:vYdӖ}M)>N2?64t} vMMvf}: u2AˮjYzg^}luuWdǺQӮR;&9f:hG볶~7{]iTyzڐ9͍o6sל3Sw8C|v]q//}޶r$[(Ϋ 4us>Эvy}PC`Z!".PB p/b#a@pYP ycyR aF IDAT/_9<;2K)_dmXaan(a"eʢC PAx||D$PJA8E(P%̭gre^61PjX^e_鳺P;o1?S3 Xp紵{+kYrJ_3zǀNCzu>oO„8A\l.6>G3?K熣X# O5f۱sG\G\E2mkHvOuGQu8N2R"cnMةZvzf !"#DF"R EYJ! Q08ijRaCX e4I$ @ll6矱^qyy q)9194Eex-$nk0 !DebkBR <#E[EVΎrp$WݲHi %jar$pZI ɮI90%"ZN!>cۖ 6F0{wT! ڙ~ˡl-*jhu<΍8rI[LeG^&)ٖ00ȨqߩrqFRh"qxAʸ>`Up8 Me0 1P!"%^A"FpR,*o+eU4])H)HeYVv)l1...EMyEY!Iv;v;iڴ Pegt6HD@%4E 8p;@qc\"0ϱ^!pȚ(EQ IW^iᡑ$/\qd\_}:r5-60D#b$޽{G0αX,q1IhJ)OF_ͯ8CXX@ͼ>[r)qnȶ[L8ׂEc{10Α)pwB6=& <A}5nnnSYpvyjeT-FF0T܊<\NԎ6so(]졫!~j;v:~b8Wo(`;Vb$8Dse? M)q72.ut)s\86j#PS6Ispܱ['T4mCu#e;0`==}Kdbjt4YkǠ̅< F ( Q~ p.L"H#*M$j2&$INMYg9RIjLNT}a3(<קT s6B WWWXȲ wwwȲ @ɲ!a]s/^ sl[l[$i %%cȋ 8w?k4~:ü Ƽ=E89޽vSXsl=mK,L[?l#y(:Z_dLPv];d-rcnc3.x./C}^k!:'숧n/3N;U+08K`9)>qe{yǝeq7VϯqU9/0f-]+hk96y.`{Ɩ#aUݵe[;I)[_ٻbY?*;YS8a6]}ݖ8^v=BIy2 vO8sYyZ{K[_]F 8S1m]VGzyo̹4ʾذru;/q,6b![nG:)^=ACcH;sN'uУi7Ta]GEeRJpƚ-Z%,+&YM8bjr[l7[dye`mlȟQ&[AP;0ZԤqR) Kv * VEnp~8quuo!)^B(A#I4nj鶼yoNZkWdma;.CV1yEUoswsUA0DEȘs~XFC@ @W$.L٫eƥ3IENDB`PK9>:@:MM-Pictures/10000201000002040000007EF354E1A5.pngPNG  IHDR~[$  IDATxycvݕC " @Q"(j୹@ĈFOx ^/%rr,{{{fzݝ0;Uo]][UJYY[NH$d?'O5KBB۶mkuO=3f(Jt]o/ 80N@e̙s"Y "+=0$YEQB (v1ׂ\nXǢ&nĄH+l"=^Q8)XYUU%=LUE0NU~OXǣQ.ǑEqYlZWJ D}c"ewxӒ%z%$6WH'byEMzޙu@("~ݷ|GIOT^E! sϥHú^?beBUU4Mf;";)o̞={7xh6֭[',C©_\⚈P @uu5մ#//UP#GF5NM%Jř"e% 3 2aKM9{?Yʍ%qZԇ: `X_V_ k}ncv;ϴbآ i':'I%AP0 #Ab [.31L# :m QUpXG5pp84 0 3zْd=7Oٳ0}M'{>n9 s.찞BQ￟r^z%F 2JO#L+|l/$r8c#F$ ^y~_WHr%k6دr$ݑRܱFKt\X5al3OM^_qa*W#)99x-}d>+,j搢"]q%mdرx^FŘ1c4isO~@ ~S M'OV@ dgg X:j,K1}ɞ>r'$Ǹq3sQ 64o'н{wf͚Evv6r 3o޼ĩZ]H 50&5(0<$yxR7WtD_kĆ:DxRb[moTlk(* u62UXb=F{a.Gwv(Ajx^gq櫯.C!PQ7QZQ=Fe?SބǣF(7tyA]7瞻yŗXzuOSt]i5n+9 $_L:rkr?ҙ>ظsνMC;`$\YmaB{E/O}=^??Nv,[=˖ƙgFYg+,s&( ˖9!`Ae6( B׮i|.]W]K^SL@x)iEUxdc;θM! HhԻG(JZh׮-SNsμKLJk v=k,:4M>htK/F⼕뮻6*N*TX2r-L2?O>}ꪫѣ_3o,X;_r$;wfҤkӧm6,XgKtԉIwhy?ul=ta$5u+||;SX\B>}V}<TUҽw,~7Ǣ׬YWbE-W\A~GӫWC?p̙ÝwɄ Xz5'핥?OT}QO]]o߾̙3˖aԩ0yd5kӦ#F˦1vX_;{n+ǧ|\"wy'ݺOr&L`m`رQ\p9?~<5,Z8*>}z1g\v7^Èرc8sh۶-[laѢE|Gq?77 0 ~]w?~8Ceĉ7e^cbspU@tK*t8|s,::FJ{R͋h nƀ5I%o8MD׶ЃWm4nʆ p7}„rg ~ߣa0;voEUUHp87UUС{1 !7ot1tVcA99j:ϼdd%05ŘŋBP]]ͻ?kÐ!Xz51vZ˩Ո7/ֺsԇ1Lgufxk2eQQ\?+K1 /Znw$\2{SPP롮.ڝx8#7 h_imUBV© G}aƏϩs=/_*;b^q./Y b;n:v~o|6.|g]G1ydƍ~Izeɉ?6&ʥnn):zHz|96:’!ruRST#$?KgAHW؆&V8#I*byTE`JuDʺutW:TU-ʭ碋.JEL r"oBkTL&3h JJJag}c"/fѢE[5鑈jNHEM'Bҥ#o6|f(s&O9.? Kc;BTBěiTU$XNIsH*wX&+zztЁ/gg߾r{H^TƍGqq}ixwDtWtXsEL.ۡ!ZZJme5յ~GIZɧGii):tgϞ[sqһw lrJ.";<.|O??x XSҿՋӧh"?xz=ԐCvv6uujkkʢ{t֭y{ygzP[mժwwqz-{,nj[,_=F>^zoƞ`haYf !"+?5|K015nuK:a=^49wD܆biuqJ=<>|;<_L61ǭx"t]gbùœnw3y9d`+++c !W0~Ml!hv\+]AL(ށKᥗ!EK.o7{W@]Fr>|]~cDzi7KgdN>d-zQFtR.\UW{O?[oeΜ9|̙3!?0@S( =UUUL:Qc=kG^,-W_eܸq\r%,Y"/ru`|3gl? G=kŋ GL>իW5vP[/GzM#Q#D}7644|2׿=o\HvIr='D/w1.I[ݻ't*++SYYI ptϭ Mg@Ӣ6^^+}Mؿ}>~'AQhO5dн{sXb;~jɢgazsQrCyg|= y(#/#O8nɆ uTUsGW:(Dh"jkkVB=lͨEh"굶,$@o+y+Smm- B@dEA0DI,nc浵)G0/FOkxN"{ (4MµzVى oOMst'0@NYwMϟӦ sj1bY/W@}a_xsy_}UTWNǞpi zm VVu]$%W} ⼿aDY@:˺aBo|2JDG~76)f[u5&c { 3OZcH)ziuznc̱ǓZv#dԆH7V8!z$$.)**d܏pa=> vM>gӒ)7;x7;]:9|`zmۖۧdC-YEQo׎cϽPu%Ym )q9ᄍ\vٯ_:} ,Pz 5:CL\%H!@9-[ aI*ć3v{%Qc`-UJOz$sznkzDCGS TI6ɐ7!,!ƕ*gc30[$v5q9>1Poo-v|nd hlENetuK/؉PRg=ݡx T;tG"UàPRjc)6њlhkc 9nhu$D"B!jkkuVmĮ`%$D"9xB!p8ߞ[7 zsD"H$ & چ!D"H~Jvv6999" $D"9p8'4QPVQ+>-?i֍>B.wTƜ1vyY&D"H$?^/a:B~?YYY-:d [|~%9a+lCn݀:v./~|3קy D"4ǃCӴ(Zpa~:u̘2t)% oXWZͪu gгkQ˚BAA@mx_ofǎ!{њ:_8댦R^xONiiiZͤ[O]]555 C(Ȅ]3P;n<ϣ W`8δ$Q8l]:ɣgyX9C=mtJUqD4ꥰs9ロLQ*B^^;_~i3m4JKK83*ہPbszMVK.|0*I&3N!Sār-<{챭-Jyf{2V[߬{WG;rU԰cwk)2@0UAUQQ`_UְcW5\{~/BVo"sYYq} W [aj**@um6^-nC\: U6?TԱsnwUxx  @II 'p_|}Nun6zEǎ0a555 *((`ܹݛN:1yd{[d~GNӧs΍:w|$ruk%[̱ǂ _=:uņIoߞC& /`֭q!> ~q}e? ?v>}멬J_'p:to߾n L4ɮ?͛4dLP(̙3ٳ'ݻwH\<$)F<۷={gϞ|Ջݻw'z(B8a=,N+bPj QUQR5b!mWY˾U!2/ IDATUؾC 6?)+W7`͜wyL2>7{l>V\ƍ̚5+i|>֭{Qru]TTT{6:H`L_|I.rvUW] կضm?ٰamy8餓?7|3Çg˖-Wn㡇{y=RVXۙ1cO>$7t}GkSN|;_>iw~;>=#G;`ܹqyo~ömRD騡7 _|>5L"][L4g}[e}Y&O4N;6dx |>:~:_|1شiի3gδ8q"ӧOgٲeY&ih,l"bTuwݻYnVJ_Sy_j*֭[ǎ;:*djB~~>G'Z!CPTԺޜB!Baoa{b B78g__6qUҭN}G)GPE[f#Wxeu19kpeL񻂂 k׮>`/^lKKK9ٰaC4֮]K=o1bdH$uo߾,[ݻ2dSMN0P(Ľٳ=z4=X\뷦iQrl~}v+:tΝ;۷o\cnV^Mmm-k׮e^>Ν;SPP@N\O=+W䤓N_~IMECda*W|&"UTZZUYC"1aΥC22}c֭{,K,0 }]9県T à*CMx2>/ ɷ5cQY&DEuH#_&7e.6گd{RTTXCTԄ)QU:8CZeNcMC/`ٳǮHduքc:wlQnSj~-<m۶M^u{ ܭaСEh1;7o-+ݰaCTc~ox|9+AҷF=4Tpn:0tꫯ"ʢgϞ`РAk׎A1|zmC}W{u֨{2x`.\ȦMNMeTuSIIIT]r!͛ʙ\<$%^#<ի:t]6 YYYoߞ{ބey=JNTзo/*ji+jTY(_G^+n:UBvHغ`Oe5߳o\ZA5!JLw}G8f?>53gd޽3f0fpc޼yֲsθ=zhnfÞ={WlN,+_{7._ Eb8 6oҥKsL[o*/__km\s5Q6|u@\g$ؓ.d9% սUva ùI~~>۶mc۶mB*N?t̙cK8䓙3g=IYYY~l_ٰa`?MDg-$]vPE|&"UtuѮ]>}zNq1m4vAyy93fH\<$%QGENNf⢋.J뚖$//6mڐG۶mm啴=N@CuA}a?籷"@emP&̾;]&̮ +ÄF@iTtUشŒwOw}|C%O̔_ϰa9r$:ub„ v*CcF=NΝ˫J׮]939Ϝ9\ǰa8clWqkpӻwo.2:w:{ԩ׿ftؑG}7nN89sӻwo4iRx}Qz͹K.]x\uƯ7۷ӿ~_лwosv8ꨣo&z{9:w̒%K1c7pCTECto"&MİaØ?~ҸcuTN;4eTTTpia~fΜIΝ/8=\,Κ5+iR=k$\&M⤓N*'Tu̙3Ϸ˫5SoڴiݛÇ3hР1dR!L-uZvq5-E~~>ҹsD&:{^L*|/7Ẁ(G8!d4|^,/>6^:-.PP( r*juP- 5+`nX<9ٸq#cƌ>k*tB^^^ yH#u/4 cn%'KVVНx{4emARQ0'( ( F0P !? zG-B쫬bW 5A ]x4| BP Ն}աF}01c NJ0d̙)SLamۖo5i u/d ϟ/ڢRXXHnn.~ߏ$Q^B7 !we] 3Gч.ޭ?V\ESAS54Uo ^(  [A>Xڵ+G}4uuu} 'Ygر#]w!ԽD׬v7m ["{y:0 *W (kAܿ~]ՄM#ۧƇߣyU?7c[x[uȺu(dRlp2z^T2)KK! u?!49@QغkٹEa) ^M1VTE FA GW! = k̙3=zЧO~rQ O<())N/eR]׹ի;vd„ $-0i$:uD>}J;Y|N&=&/dqnuQѱ:LW.K{1 1sLzIݷow}w¥{,̝;޽{өS'&OUvb&;VWW~;,̝;7|6l%%% 0ukD0 P`0H]]Rdgy53l|9 +2\` x5 jQE(3O#jPym}T~-FqX^ڵkYr՝wΝ;Yv-k֬a۶mu]Qqڵs73a~Knf{7vŦM6l}lʕl޼;)S2)ٳOXr%7n3k֬}޽u;jժtŗH\߯_?xw찫V"??#uGtR{׷M61b֯_o_7PXXH CQ;wpgy7|qq91k׮>e,^?0=ٰal}eҥNc*>ǒ]>.Ǐcqrƒ\)בGK/DϞ=^f 3g^CUո<֚vZ}718çW}eٲe.~-C q>Uׯ'O΋F"4kY ~]yqGP[=GAEVa{ZHߧr9|jTB:A~Qef1]̭~ª=m6l] 5IYvir&0+[ii)ݺuJIR1cpwRVV?̞=UΆkl1.3f%V֔ݺu4adҥKw׮ɗOVz)׿,?rH$3nus5bWMX\2 G' ^OSyRBB:DB Ucx2@qq1[l{V7on P+Wʹ,ro;&[IIIT[lI;ʓϩʢEBpӮ]t 6o+9cYc7ZK ۺu+Ůx<2b{8iʎf…9`ҤI H2jlMSpוGvj|" iCS7 ڵESTTLq}Qm y<ѧ{^v0.Oή]صk7tGnr>zJX)7,W^y%SL#~zƏP /3g{nvӎ]vlܸQ\z/]У=mk>6 c̵ JJJf_"4K/4TG [G߱:BFl۠Qt;ǹC80o>?,aDr ѵkW>h8?H$YpJĭ#Typĉ8qbFH$2E_E3W%[i9D"HZMӢ w"5hD"H$͈e QG&$H$Dr xWLm,H$uqzb b$jA H$e8 ,H$D"98p2Zr}D"H$͇^A D"H$?  cH"H$I4د BbOe5H$D"98pN&t!-D"H$?b -,D"H$V0 È~K@"H$\0W!BH$DZj D"H~B!Mk@UU!H$䧄 < Hos#D"H$^EQu6oD 蹅F\P"iyV\b췜xL8ŐH*v6~EEQT@`5=rC$X(-=@I EzY~@H$-ʕ+y⩅TVV(-<&_[iH$@@ H($S[[:rs#ٰ=^D"q!%tܙ:RTTDAA!ʊ+ܹGXs.Xc!Dr2n8B'?{iG Puf…-Dr?0#[s2HZ !oZ+{>$#''0fe0_GLvIIs`O9aHqC"d`0 躎aCȷ $fCρ$#7 YY~x<~^X(#H$f!v1- 3NOnyɼQ{tsyw]6>$If ۷~[7߰aظq#C JyכoԢg~Œ`ȐcXc~õ<:^L?ind0``H~7sD#H ! 8a瑇Сz= :n#<ƒזrӴ|DҜXN]]HD"i,oႵkpID;SXvM4g'^Hk1H$͇UUPC BBpiǵAPQQNv緣4MCQv8D>IyƖn6m۶,X2ڵkq=\?e2۰E!HkC]FP&smp:j+cm:* F_—_~b9!H#[T(VcK0~L:v!G'koߘ{Qr_BxpyG9jf҇4$1Mp؜CsFB:$f8D^^8(fv'wy+[l[z] 8(>sz<\96*iH$G%C**B7W*HDD/N:N:%Fzƨߧz:zz\5!T-%ƒCB0ܓZtqC"dXܐDd#4# $%I3y婭+ߟ>N}H$Ee ֤|H}H$G%@"i "葧z|8!H2e$xA B[:!u-yC?I3RVX!Ν~RQX`As%7n={(57# .lm1$[Q(u$O䚉eWs'O iH$-ĉѓs'zH$-4$V`ĉH$rBD"H$ H$D" D"H$H@"H$ 1 vA2 D" (Z@AZ,nCBW=H$Drbak4 $D"9p[8 2#D"XQT$J$D"9xgXF4$D"9q{'!0pXvBy>MC!NLvi4TzBijjjʟ5Թaq2nmFqP M69m3j V`xu"TEEQQ ^<Mм^4MūyT UU4 ASUTEEU=TTEAUU@U"RU688Eym(`)ˆlƟi!U%[6Qn ICuC UGzEQ0r-!].uta 1Ac:a=a0!"$BfY7@U<RJC-ٞTfʟjHwK杍=n@4ڶmKvPUp8gz&U)Nzs nK ͈.mܽ)iӖ:$|@ڌzqkCbY!{h=RUESgy  B@XA5"x7UQPD jlR<*QߨɬLnϋ(lb g#0>B0Ht Hr>`+ J%Haf,H OKT^@1 lTM 툯d-] >SQ(EF*8ۯja<>/z(DeMv~rr,U:;V<:P(ʨ2b6!Idv3g_=J9Y[֦a fe-pd*6{B0M pbsKM6 #z" 1ӑϭ7( `@yy9%UczҍՏHCRTWWR7G#0޲n5TEn'l-b `?ۏP BBGWMj foyTջcj2sYh#b8l#Dn( qtV40]3}Av'b4SU529lj{+]"yxv: '%!vOl)lsVZNTEtԿ9"}!y`O#4gffeJyS`XeH@ղ4u+hA*pYZDjAa 7?nؘ |۟n,ߌ^x6v1XGl%B%Q",Y#jb֤B\lP~X0`YhB$cȇu "J, 9hYYpZeJ-/0 5vƗ+4Rjk/KxW _uR"!:'}nGEbƯ-N'Frkx>_s8p7Da*IENDB`PK9>:K ""-Pictures/1000020100000273000001857917EB2D.pngPNG  IHDRsu IDATxyxUUd#@$,,2B" **@Apdx'Q8/0bPΠ/3Nd "<($L!dtwTUI'Tݺ瞻ԭS.\zrΞ=KuyVqB^^_FYx~"q 욌38s͆7ofM f&yq#yYNM@95`4 'R'Nʦ%ڿ~+ @-<{Ԑp{?EMXrb"W%0x=:K qYa6]!Z_ AMm-`2\\F0\M&&L&.(p:nt,˂8x6~Q[xv۔:N8Ng!p:>|G؞=_d2 />J=~N}zlNK#&fo"qƍۨ^sBڵJKxc7̀ː{饗<|U!l8OqӸSnJ|7ǡNªUpu!<99YVk̼49!W9QfpCMM U^ v̰bg?˲W|`K!=(ug9:-cWNzr6nNZѨA}mշ1Ymvېt*/1-so#-naV zIхB8jt:ao o1, sts{z4CPvb TUUat:Zò ty#5-_[' qy9`p:ؽ{7`ȑCaϞ/Q(%$p;5J-X®/vi6C4fPȘs:P$\=ؒZ yYd`ЙAnn;@YV+g6w?|^1 SUb„ X,x0~x,]/be,;)) ŕuvfYbtġJmFyE9oTĚe`~dY֮tlBH%2"bPRzZ_/ <=UV`CC(46 >J72sȮs+Q<|r?"`zPp/Z8/BV=H]zƸ '7hVx ^&qѰPl%bi[tͪ< ?60o Х> ,]d˗n:Q2ǂ Kg_H?8$spyL&8Hac8W0qDDGEaMVf}/u„12Yj x /E)J*#-9P. uH[p>y_yA^`kRVEyfq˳@pNv&udnh};jh1b#U1 nӉ c.''G}v')ozF佯|:Z8NpίJ9 й3V+H|<#P ];0N;, ظ7qS xbcc1}ts=Xn(4+=q&y{ Ι s(1wbڵEWqqk?񏈉˱ЇU.1&*2^Ƨ~LtK7x/-} &NP-eODw/#~=_GG53*2 #Gĉ~zXx`6;{x7ٳG`$7}ilŧDNq<1,GqOj#Ftׅnwenv{{]SfT88:â"5&0hs^fxǼ%1ԍo/|y~`a`|pN'XFY >R#w˖q-?(!~9V{H>//ܹsF"f3aCOSj@t~(+$ k)_>!4uAe&O4Jax*<+JeMEZ%!Wt^P+;*Cز2TjȓO5"g;y8^%ɺ*Qxa8hREtyoEM0w Um٬LJ|?Pj]oqLzgԲ J޸5ve0d 7m #DߠP4[@4MD8Ҩ~ TF[pxkcAi'rfȘT=3 `qAQZ,bc=źKtH^o!l61M8?2lݺii'O?O(;Ԇ[4qcjk M`(ap/'Cp[`mgp(Lf W\ CnЧOIءC !eX1w*9޼}pHNNFUUBBBQSS 5 @BB" $% ˗{SS AP[Wسg={x\g@o5.vPx4,2ϫtc^G8|⒥x5`YgΜ-[qd. /g֭_ pBpﰭ0?}>.\(#?{- ~A}1`Њ]S3<)!Ic FV 5a=„:FrNJW8xRdc;oJzT5TՍb7.ʉ&wY9 k4zz.C=GO781,8p` q" 6Xϼ/0`{/S弦ۭ#^kyegg ]ϧ%3͊:k6mkռhM}twT^"˦-3%c55300+Sjk]ì#O4]%Pp fS;mDVDttj2Šԃѣ !Æ Cܘ|?dyyy $F\IV~HNNG]wO=~V :JJK0| pQ}{А0۷Fppݿ 9lCzPcnCW_ڔqۇ!$$!!xvGZ7 @]}jkkC{":6#<4]%/岺=oDQ+(1VyꧣlEGfTU ^&%[z><إg H wz$Ҽ>rUғx*<({){y RYF1!bmu=v"h2ioZ7.`o<+_H&Ly \~sXgNB;B!w:u1kDxja[cFUd3.[bE.Az6qGWj,V ptU$k@)rްz$/*+,)rikUXE+Y/?ǺQj㞹@ࡇ\wBCh D(k312l]{/e;R W͆RLOsxؼy+ZzpEŅ q.C7oUg,ldɲdasRol øEKo!z[=Esnqzx7oVjK}"N8Cbyk&yLA>P75a2F}ٶ6k ].UN;{FaZͽ+;u$I_s%2\4ſh7iz[d;3Y?P7j`kxn,À8]o ^dnlbq_4w+ݵ<o|M)+[a75<ߨOcSsQjujs2 ^)m#_ Aת+)W"0k)ǁprN!$N8T<8-qobUdrmab`Y0pq'c[K[QT&xB7E_Q ?oS-5C+?r#)?{e`YVfeq0ͰZX,f 焇ܓmUh Z35*-C'IKێ77QmS z=Y|aM d/gF:5/]=QbT$Uu)mHWՋ9$zm1})ǹqoh2 q9]{z2.}zĵ0,XpcֵO\?'L 03` L&8~ݛkЪ6 >:tw܁|CP( m@@4JTVVx:?;v`Æ (..ƿotҥӥP( Ҷ`Dd^-סC8xp͡C0|p"&&O<'ėM۳gO̝;^%C+}1qB߾}>}`͚58#Vy???s=%(/::IIIѱcG ;vhze$3<<۷G.]pM@~~>q} BP(ﳺ~BSO=Bdggܹs,?M6dž @R򄕖"77-[xbtӒwy+Vq/Gʕ+ū }PXXs!22W^E^pyٵkΝRb5kSO rM&U/_DDD.]`o߾Y{SѡC.ljj*pI$''ٳسg^E B7nt{z//.&&ҥKa61yd}v]~-Fxo;vUd2^o\rZ򐓒3g`ΝXt)vXk 88fs4!!!ozoʒ7DZ(**Bff&Ξ=( 0IP( 巂ǜ9~<5k w^((( tM>~-6mڄh2ZBOdd$1_pkf<,X 7nܐ\t:yJdKӜ|@=zf{ BPZ 9s}q=V/^ l&yPK_NZZ`lXn`ڴi^%f̘1׿R444~<5 /xכfShN}<ܹpLQ( l<$O:u*/_Gaw}Xr /7D4ڰa-Z1c4Y#2җxbp[bƋ/y5I7vW^AII v;:tI&Ihڵ?>~i֤9a20k,z BP( :&77,_PXS@P(MèQ޻P( rX!<]egVz(,X,gP( &O}cdfp;DR( Fo*1GfU>FP(dUfQcBP( 6B>rjV:IP( B=4BP( vsaV BP(6֜9ꙣP( BP3GP( BimKu3GP( r"oKP( B-֭ixou]MP( rO?@ :5sxCnĈMP( rҭ[74ɘQڦΙP( B ( BPnqsԘP( Bih}B۬ǵF2ViPFP(op*"4=s&7*0 ƨQpyVJ9q~J򛚯=zGM() BP(Ɯ/B!(((0ydɖӜ+K1Çd2d2omF^; BP~hs-a t&aڴi Btt4V^9{wՊɓuO?aʕϖ-[0m4L:[l1 , TݎtDDD <<o$VS(KB?tbɒ%D`` P]]-\k.V شinYP( Bi=43W^^L۷I322PUU/8x8t*++1n8̜9P:ƍmCi$_6 ۶mSO=~?l65}?.q8q(,,*CXX+ܾ}}^ñcpq -:u*^yTWW8rFq) BiԦy: !!=>&?5k ""Xf_ ,X'NM#//֭[y7wԩ:u#''Gr 7>k׮EN,7c lذA8ްaf̘xxK6 W\AYY:wL=s B2zΓVۚ[vM|嗸;$իҥpy}텿p84Ĕ)SeDFF꣕/L6c566Vr|tڵY2e wldBtt4JKK۶m×_~{%yP( rk缚lFmm-(\tI0p.^賴v;&NLիNII KܹO=pl6QQQ2bbb߬կaaa3f AAjj*~-8999 `׮]xgqʕ&BP( ŷ@$[yORk3'_~x뭷P[["̚5K磼HOOY3gg2ySLX-;uT|ǪMٳgׯ_Ǽy3qFlڴIbYfa̙˃ӧ&O4 ?v;!3GP(JkH~/ ftjƍg!44СC%+WDvйsg}ݸaX|vvv6fΜ\Sٲe yJZżի뇮]sMJذahhh@CCL/^$ 6 BP( { 88F[$]oxΝ{nݺ!;;EM[IW r"k5V+L&f3VOm߾>Kڲnb|x_A#lٲE9/1r!l8z(0tP;vY(!0`&O"zSLJƳ>7xؽ{7"z?ہIW ???#gZCΗ܎;$w} Z߿sS__{ ̙3Q__/3 L#&&999Xj:t耘ݻWtbɒ%D`` P]]fh曒kwA-Sqsbb"~G24SVVzhۑߖȯIJe˰yftcY={6VX+W aZuܽ{w;wPTTeQ\\ ŏݻ k#1zm*??< zb׮]ݻ7V+i&;"##Cc9ZnuôiV^- U^o^u9Vx%ik+C6Xz53ff)һ/MP^FP(_Ǚf𪯆JKKqy$'' rssq!TVVbܸq9sK/.\qedddx,,,Dff&&O\|HOO{p1?~%%%ETu@YY p)|Wt= Jׯ$۷۷bՋqG˗̙38q PXX( _d fϞ={z x :tH8֪㔔rrr۷k=ZՎ赩cbܹ(--EII z)iGzbԩxWP]]ȑ#ʧ۷ji*\xO5*CIzehAo8pOFAAJJJl2EYzV{ 7mڤ)zQ(O%$<y{2|pJ~YYYdDO|IkjjlcccsΑ8bY]t!gϞ^JTu#.\ >]/ʇÇYQoG .+/DGzFˑRTӈq]?tIQ}UoJ>|$''zP(aaa3f T*C_蕟ߢW^smې$kq@@wc ÀvZ e$=0ay8TUUIv1p@䠬 k׮Řf,PQQᑯK. /^lR:0h |MW#./"**JQ}Vorl6ҰvZũnT/ B8 r-ٳWĉ933gҚY0sLpӂ,%&Mts5,pd}o3f`ƍشif̘1m4̞=~:͛'Hܘ8\r֭%s8%%Vˆ##FUb8Obҫ?QPPPk&MO?B)_L~[oEEE5k$<-- Gyy9=yŋxbٳ ڠЗr(++üyTWjHYfaʔ) K/.\qeGyɓQRR˗/#33S^{ ǎQRR,ZHU NW_}%IWKxe7}CXX$}!<<}U,Cz|w8~88|r9s'N@AA %K,ٳѳgOzOwS___q,եKrYի$**JU8rI _tN+uȄ Ǔ+)Lj^EEEzuԉ;wNQ#GȠAṬRʱxΝdҤIBRRR' IDAT /@RSS !L0ڵKHGkSrjjjHDDp.ڵk/!K|_PP>|8kOqqq$//O8pj|2LpxSOzY,\P1??/oszT/B>LI}}8r2$ϓN:iʣP(#呬,m_nn.arssɫ8q>lu]1bp'Djj 9 p8nWulX$30)릔X|xw0vXc$j7:v숟z?%KPSSݻw%rrrTjhͫ^h0/_v;ۧ:|DTT |DFF6)\t NSt-[O^s Ø1cl",,PB|ŰozRcd~mۆ$Xн{w_DXX kעW^7/# ϣǡJb赋"''eeeXv0|ٔ/l6V8ץK/6)eYYYHOOz&Nm6ҰvZ3"S 9x"_ Bi 41w+clĉR̙3iiiMJ֬Y9s&p8piAn&MBzz:PZZs 2~3qFlڴ 3fPS^7zr6mfϞB\~ˆJE_8W\u|r5:NIIU#j*Γx̽k&MO?B)_L~[oEEE5k$<-- Gyy9%eXx1ك m077W^? ǏӧNCjϚ5 SL)Wd뺬 k \KnI2f꫈BnЭ[7"33I/^III6l1yd7NU+W"<<]tA>}C ,ޫZz 444`Сzz+W_~zB~еkWtP<5jŀ7૯Bp:NIIAUU>|8l{!==AAAx=zG? ,Z}feƍ mBWvйsg}ݸaX֠AqF,\PnȐ!\ d233a2`6;`…^N³1k,޴}5rлwo$$$CXbyP(ւ%VR $`֭^ ϙѣn*yڲnbڲmY@kٳg1zh!s>zs) Ԝ6kKl ڲnbڲmY@kϼyl2l6̟?=XIP(C}΋B ѣw0:$HP(1T=stB=3g̙s@= ֐;3'ǁ( BPn-thoMB9 BP([֨1GQ( BM:c3nv﯅.O BPvPPսip+pqѣjԭ%ľ.æ:dxbfX'ɓvF|6m-L6/B- 5=sH|im߾>Kڲnb|l"|J\7Bl6=$ :ǎk3JCAAA b}Wk +O)oذx$ZhÎ;$w} Z߿sS__{ ̙3Q__/Hff&Z :t@LL +\t:dDFF"00iiiVfa Btt4|MɵZW?u%'B?*Qxe%§#""x%+++l2l޼Y1}%XEll,fϞ+V`ʕBVw]mQQXEqq1w.Վ赩|<#?RRRPZZ*뵋]vwްZHHHMt:v숌 (#񹺺:L6Mk7o%֫(//v;"##%eVFy%#fՈBPPf̘ͦB.h}̘k)CϟGrrp.77Bee%ƍ'K/b\pϟ˗%ie"33'OFII ._L_{5;v ǏGII h"U222PVV:u _}$]-yЫy aaaۇpW w8#q8q(,,/YgFϞ==O<:$kqJJ rss999_5F-jGbرc1w\={#v1uT+ƁpCS^^LW@UU.^ӧO-/^HKKÆ w"## 몖#`ӦM9pN>`ٲeP(ܐt$e(ߨ2*TVVz"w&b}O HEEp\SSCfpKΟ?/;w)Ư8ҥ 9{p|U[\\p$m副U:ݺud„ BcD"U:uDΝ;(ȑ#dРAt*Q~vusN2i$B!)))^ B&L@v%Վz)9555$""B8kdڵ_~T>/(( >ϊz뵧8'_pA5R+//tܙ444B5k?cS6ÇIrr2WLC\Gϟ':u2$BPZ$RSSi |sf6 & p8ݮ_bH90wJRbzҥ @Anp%y)zfl(ȠAyfy睊+WЯ_?aXNЧO/? Eĉ.=+W ;#c.#yP7-#-- z‰'ϗi@qq1RSS#..NQPc B#''GYO?-yƋr .4v۷O24ٻ h"+(&^T\LK4\jeQ6im]5ruYFkbF j`r[D|~f3W׳<̙s$00t^^Msʕ+Ph4Rc*Ν;?ƍ4a*+//Ovމ'%{#&&F6ѣGl۶ ?TDEE?1c.\BhZTTT#==%%%HMM!ڳSTו+W˗/Տ5.]_'N!Cl}E||ݟ%K.Ennnvޤ!!!b111ӧСC[X0AQ7C,96}3 Z:?.\رcM2oƍ;"ԔsLYt)`ug{Gp9s3h,^VBmm-,YI&5K?زe}5aV"j^aaaٳ'zf9P(о}{,\]tqxDDdSYT |\KRRW8| 1v$Ƥì,䈈*rDDDDV)\m$);վ+/?йsgյX1={Tw6qdl9'Xc]m̜9~muerQ(h۶-zf-8xYYYV-_C.Bp#s鉘|wrP(sFc?f۷oGXX<<<п99;vD@@6ol~yy9VZݻw/RDpp0n:_^gnCzNgaa!J%] =z7鳴OF۶m典8K-D>}ၰ0ڵb~஻ʕ+ FyGUWWcܹR\6m}nó>+.YP*Rij3;dwҺ[ʣ>$%%ҥKVN'66퓦?c}ݲm_i&Gmm65YzT5_\\l >\z/##ǏGyy9&Ol`^x׮]CNNqU,((@JJ fϞ"\z)))饗pdffXlV\ܹs8rA=Z>::>|۷lKԩS̄Vm5kٳGAA+V 11L:Ǐm㸸8ddd ;Vj~>5a,Z(**Bdd~di3g֮]J=z'O*?HIIA߾}MΜ+W/_W_MЯ_?ij3;dwҺےjlݺ*w:qFi֮]k!k.9z(Ο?|aժU&$"פj ^n !رcرcE\\;v(//eq!oϞ=bڴi4QVV&MߺuKT*i:88XdggK/^!!!4o[n… E``BBBDNNAnOr[~֭bƌҼӧm۶i̚ MեKqEٶO<)*4:m_cVoO>D̚5K!D\\xB̘1C\Ȯ~-tb="j=b˖-6VǏ7xM0Azedd)N*#M[&j4m\/onZR 777&J  =KfnrѮ];QRR"EvDyylƚm{Ȑ!& vss۸JJ Eŭ[DXXjl٧?.bbbY??b„ C{"==ݦX֮bΚZt针׿_& -y7oNg}&/  MP_\/sy!"bo1_222D3W__Ç$00t^^:udWAAAr j54 a:wlзϖkj<7nҐߪ:">K,Aii)JKK Kk.] &&m޿,&;9䱺vBM~F?wƲe▄<#6lueII /^lWFQ1u[5Ɂ0n8yDDD 88)))v|r`ԨQٳ1yd_֭1`ҥ4hbFB]]0rHqڮ%WFTTѽ{wZ <<<0p@;v GAq\\***0zhѣQQQaw1g7|bĉ2e |}}l2ݻl~sN|ðaä}B?6m 44{}www3SOaǎ6_inrwkl׮݋~l+-- >} ,, :tu\"##ClڴIi?&7LKKC^={bȝ3Ǧϙt؜AK… ;vM01Wɣ{\C^^M^nܹsMKNNJn#0\wwgM3̱9ŋj*bɒ%4iRy'bU53'P JA!Vh ?S CϞ=ѣG0G"r^J3/ȏHJJ2{Y+摇XhyQ o~;8pY ѝŊ`-՝M96}+z-1UƌcBOFLL F3g4)^W&!1pf{5xΜ98vH/_ s̱;O<6n܈J:t_~#<<.\@EE֯_/6>NP)/ m߾aaa@ FnjjjSO~~~X`jjj )))@PPӱatAAAϥj4X:u=Z?Z̛7ܹ3^yϚkOFL-9B <<}lKӖ-[еkW(J=z$''cǎ͛ ///ǪU{nbS*Fbb"֭[Km=zH,,,Rĵk4ܙGR#}<W6ƥs)dffB6Z~͚5qY磠`+FZ NǏKq\\222};vԎH}j„ ҃܋iY/̙kעGɓ'Oii)RRRзo_3gʕ˗qy|Wf?o*_< ۇ 7n}30[Ǐl3};p@XªGk~صkG=zϟG~~>j*m9 1~r^[l#M&Meee[JEvv4}E"|MMMiu&.\ M_~]-$$D ?+n*f̘!͛>}ضmlƬd\]t/^mɓbСBȮ5V__o6OĬYBʼn{N?^!Č3~GqXڧݺuKtQ_tUQ[rѽ|}}ѣ? )$$DJ999&~ZlڴI޸qx駥iswssjZv9k-,,O<m۶ӧOW^5ٞB|bᢦF82;;[tl{DD+lbsm5id镑!!&XbnԩbϞ=Ҵ?P_ƅU*pssnnnBT BPMo[ڳn///ڵ%%%XkNiqzٶ bؐMk׮GqUU" @ۋ[n0Q]]m:ٲO?~\___ϟ?0aС޽HOO)?֬e3VNN֭uuu"44Ԡ1[:bk_}%%%bҥbȐ!&+,, @D\/榘|edd4WqaY"??_CN?((W\ZFB:([Ν R{MƍCZZ0~x[CGe0։'%{GLL4mn{{{Gضm  8eM@Õ .Daa!Z-*** [/t 55U:|iORJ.++k^W\.&VDD c8p """SCſow]waڵod">> 1٧|2M~5{1wQDFFT͜9S:III,XP8Ԗ\lfBrr2JJJP\\EYPN޷5?>v܉]va&4>1R̝;(((7xbi;IWonjZOغu+֬Ycpm 6`̘11c`Æ zY꯺^^^B~~~s,fBVV!gW_}UUU(,,DBBx,Y(--58K.͛yf,]`}˱|r|gCnno[_x饗Я_?iBBBy 6zeII /^lWŜ#t7Φe^|E"""FJJ]/_1115j|||0{lLDDDDD\AìDDDD.oMBDDDDMg.9sDDDDNL\As戈\~S0xL9>sJ * Bz;91777jh4(Jh4!T6\ s+ ӇY9ΗjG8*GDDDtYu" bbb頠 \rE:,01l3f`…(,,VEEEMV`` 鼼gN⧟~֭[f`BV󈏏Ϛ5 YYY`d/^;jxyy EKϜ9S:箸III[s戈ȔzTWWPYYZ[T*}K]`( xxx`8v9K/_5 >>>={6&O,͟8q"L___,[ {-] ;7|ߏaÆ̷/@DDD ""HII+""""}ck222믿nPbܽ{M]ADDDkgO<ܤϴZ-ݡh(5s3*uDDDDOW) T*@+4,STjjP*M 28""""_)Jj(9""""'zUP@BP@H,ꈈZW}}=@zWyyXP@jXf fΜir{Su9㶘1c֭[aQ3P*FYYpuhZiӦa~Ka֫9mu*++o^{LٳEc#ck|;:+\Scsd,-Q}oٲqC#"///㮻BPPڷooooY\;ocԩ 2x?~|+Ee3Ǧqں߽[KKqmHH&Mdt"shsD>}ၰ0ڵKhb t >>>Gee4_P`˖-ڵ 6mڄ@b5YsUWWcܹEΝi&?o߾aaa@Zjkk1ok)wƱYV3ok?w !wڸt1W1ڇt˱j*Oя5cqӧ㣏>\rEi9s`ڵѣGqIiK/3g 33EEEƲe ?u233 lѣ8##ǏGyy9&O Xr ??ΝÑ#GkKy\f {={(((`L8"^kאl\z+W4C||\z\nHIIٳQTTW"%%,86K\{m7@߾}eshm\:~LC:+V@bb""##-k[k ?"3T*xzz>>>pwwRFi@FF:uWyyM-[C }v*RSSŏ?sݺu.\_. ),,C3999tvvҥl,r"rss霜eee[Jͭux~sb)]t/^[.'";; 1PQWW'"!!A۷O?J% ۳g6mArkM|kjjMe)wƱYVƬ]~֭bƌҼӧm۶i̞5C'OCFvckX\BV wwwyDrssŖ-[lN*fΜ)}Q1g1o<㏋9s戌 &As䤥W^3f j4xxxHUӧ~z|k & F+tË&F0t j4$V-]֫߆\{T*-m[ocMRU*jjjǃ\|cǎmL1;,mǸq㐖4?VqڇN8(subqL9KȬZF]]txs<.\K.AVҥKHLLc=&}f֬YʒrYBB,X\j?6Ǒ`Ř={碣ꫯ HHH0%KVz}VXhM}Yܹsܸq/ŋ͜9-Bqq1dq{pww?o74}QDFFT)r'mei[ۖϟ;wb׮]?8 ۇsu/{bkXt\s+6FZ[~= #F #FAvZ3'NĔ)Se˖\^|r`ԨQٳ1yd㈉A>}:Ν;Æ ȑ#O6m޽{l+sml@np=`Ĉ6e)WFTTѽ{wJ.]ADDD 88)))Xt)rss?w\|v[V7Φ7>9r'mei[ۖG:I59l}Z+Wv>gbs3gwv_uKDs|Ii/LL4lV2mXjjkkdL4Cr زe=LYzsvvvs$>gәcsؿ$"4s5aaaٳ'z> ۷… ѥKӯfdчL6tu؊}ADWS ìDDDD.L>:M1G戈\s8*GDDD|ʎ̱#"""r *@8,9atϙ#"""rA2{998g\ 0='w9""""j9 G戈 ,戈\X[DDDD΍#sDDDD.l1 G戈\ϙ#"""racGDDDxȅ""""Ƒ9""""bȅ#"""ra,戈\/ """ra*7uE7GDDDڌL DDDD.0ìDDDDO c1GDDDX0sDDDD. c1GDDDX0sDDDD. c1GDDDX0sDDDD.d1'Ba(W""""r&&9rDDDDΏY\9""""  !Z-"""" vDDDDC 4p3ǂȵéo9&"""rI m^N7*`}/t:i""""`sA_ ! Es *-Ne]ŽB1O7GwCDDDRVX 6U\jtek3w**.9F#{TՖ膈莣B; :ޚȉߖD ]Ubȉ4,ݻDdd$KΜ9h#::gϞhZDGG?lR Zb\cč7Gŧ~ 7o~iTTT駟?ؽ{7ڷoI&bDDnKVej3PW""ge… ?B3~ܹs9s ++ ?3V^͛7fDDVBHXm.戈i3׽z xwлwox0` j!V ohݻo]vx7vZl߾ӦMC~KGDlP__o)9"ri~~~Z@MM w}z;w.yOBBBBs鈈FVۯf5@W""g1h ˗W6ܤ\q9O_|e˖5:~hlQUUBNEmۆjl۶ /nd[ݻtzjЉbipcơCCw>h{7oļy4KE:nϞ=>Ebz/@A9c={gMiӦI s;4"&rFX91M[).""""X91V+s B@z,戈+ 9g^- GeMkbNW+Ctkn~^ 4ߋ+V#"""mÆ SkŜ:6lptDDDD.kРA 0 lëY\9""""!wȕ Y\ 4sDDDD. c1GDDDT#LhGDDDD΁#sDDDD. }9SSy端¥KZ; aNcNϞn߾_~e3Ebcc`4oLD-Br澰~CɜZƜ:9rK1,t^@DҥKqTVڡ8OŁ#ɜZƜ:9/}̩v  l( /\9sDb|Yx1̩+a[SQǜ:sxB?|8 !,#bcM-3GD-Z4eă1ה9zգGSsrZ_ٛ4QpojV"j-wG`]搶SGԑ)M]6؛w]>%0gR*wd‰ÂWdn>m"~!!mÁZ9};m>9h5yk{޷#ܤ8r@dn;サU](G|qR^{Iâ?>8mG(п_;ܼQ~w=,Mjmث5sO)~lls5%9e`dlz57d(~m}SN=Ggth6I4|iio՗1ft4𳗗'>>W\޻z2<8Dc㏢D___S`Яv.0l e{byrcƌѣ_}i4jݿǾ<}k?J]^#o]{6.={ee%M^gɩOѽۈ~/ De?qq=;^ 2Nkt{۷as+3|8T*7t/o|UoRxeKhħ7-ncK_b\HSgj:u׭bÒ?BW\Fj7ZzoO2qT&~ӽ;^zq4l>~Fm997׮ǜ^)t :uF~%Mw(++#>% Bܹ3PAS;,}9իzjDt*СC۶8q(>IFukL'O?/9{G??ig]LJƷ{ߞʹG=9_oAl-[ʍ󿼱y|1Nʄ6m`q)xZN29k[׼{Ft~޿>ϤyX,F&G``gW/۰cnHl1CӫO4>̘Uյz]\tSLEq=zb#h+sQ^QAM7tDj# [TW!;"Ν=ʛ{sŜ˷5k0m""(()/mVq;qgj&ڵ3.~1{=H,]5V7%XQѝme |kۻ}{xg?g3W^FVVnwE`%%ҵɾޅI=}~,crr<==GDU]U}=hEegϢOĭj7)5EE ܼ3P(h:zQ]9Rz9:4l1[m{ m۶ZGjJN?+ci۶nܸη{ ύ1.ntúVۨm{KhVʋ/C̙Cxbxc0zC3]7鉙3gaW%-IJ#fx,ڴi[na_ ;+ loΙv'ؽ~vƁHB~z퍄ڵ]…ѫ=@!`e( ~ Vna3={;~IXŜ,Hn~>ǎ~?= ǎjJN=8:fW xxd~MnyNK#srٓ]>}x@Mz)J t/V< | / !M6 ?G{555pw~#V`b5OݩS z{7^7{G~ʼnSؽ; YPt:jqoаpBh {l'O|777<7ILɓr\̹ŸJ\.?S}%Cm8vjJN?:x~|2_݄::\|ϯxNoRnϜ9^xW._A}.\@&XW~,һ=$-ZbQ777 622.e6nLAR5v K~&2&O!^_;vž? Z:t=Mrt ьG?/>Eee%ڵC /;nV{aXv؁:Ll>4ᡨE\qG>?&>^o~/oM9}xl,?Ү&ǚu/M/#/?X{ܘ=];0ޣ(..o~ݠoSm[b}>.oG m6رaʴYyCqZ_7q>Ȝf]2x/7]e~ǻ>*jQR?T A*p__otW]xWJe>[kNekNg͚LcNhXb۷OvO>i0pNiC1s戨4ljw(ˇ9x$!3Z2d̩)̩5%|tգf%"cN9u<]N<yk4`z5#"j^XeFNœ:^Srգˇ=Y(~֢R`N)96i SGtS=gZ_|ɿS^M´Ic ': Bz5!RSS T*Rwi׆#"җgk]_=lm4SSdz5fdNB`埞$LޚʛȔv(N7'aS˘Sdz5x& <5{5{y/ "GEDDHysjsx4!!@CBbcc6m;R )i\Tsvnao><>%]ղK}=kKiEg_58Rhɏ(%8躞QJ뚪'D_M 8z=#^n+շ( =}r0/B\ٿ$e |Y~7{"i%x09mSUBY!ƘWxbĥEe,2JۘO> p)tۛ$9u29b/.ɡA7M1ⶏ+vI/gV~k]s7篿>p#x;OAڂrX7" F~Mh0n&4"z#NY >py1JZ͠ԜX }Krו\~ݬtK$ ~.J&_*IKI4pfmx5fS6~) W }߳PJQU^2KN)&6"]O+Z6U p0\wRl,o`PQf6#q :''isqb]" XQ̷$~H6%Rɶg\pY<: ٢qq-Pictures/10000201000000A70000008A052E8087.pngPNG  IHDR$Z8IDATxytTU?2Td0A 6 .`{Ͼt`w_ 5!28!zCA罈P!D$Ԝ#T%UHV>w~ԏ}Nw$'Av:RI||Oյa2HQ(;eBvX @2 L&yذaaq\Ȳ,CG$$IBPdd2+"##5 .SqqqXVrbb"C`Hq\8hnnZB!S\. ZN`Q) Q;1^18v8dUˤ5$ G"[tf<asZ?eL򽩖3ƓXX9K  '[8; Naz7>P兽3!iㆭ[hp4Rkhfk!)6|u_yZڋ'>>$JJJw|VGy~ߵ #9t2"V aDkoav1:mYO&6c6 V^{8\uUf_p99mf:\ts-;50:?&YEnNJ֫(nVjkkf'NP\\Lzz:=W+"77;vW6ȲLBBuuuBYY}λKQQL0͛7zns@M7|fl@`tvSIn,a nyV+7o&??[oyg?v;ǏgՔSOmz=z^,,Z뮻JKKYh]wŋ/ٳgٽ{7_~erx"UWWӧOd2+8T Šɡ420`pct8:зĐd5gt;v,?< -SSSCBB:lhii!::IJJ :ίO)=='NVeر={r>3f̘7HYY!茅Xܜ4h-z,X\,3FG;&S $p8]LvN_H*׵_p $ItT*~:/@pK_/_N]]w零7|M6DPsNEϷ8Ñ9ga0P"QZ#Q#1;hs: Nfee}vf3k֬+..fڵXV֮]; %%%n?^z%fΜ鮻QTOݻwAgFh4mv4mV46,fu(YX=?V fl:Ӻ3vT*~ʕlٲQFNddd}YO>guq 7… yu]S`˗A9MWQ;7 Ot]]H,(WgNl6֯_ϖ-[سgϠO08<猋WvG>;vd=d2N=8$<6l0\8~P(P*UFf Y6\nok_W(XŃWpv7$1z\rL) \I#'_&}^2N&O: rBR7<;d18%Ib,F ,7bE l)[Dp E/a_ݺ@n-֭éݺ 3n]0 +Uc^vݺ`@yېde 9FnFhe $cG2,"ɯk&L~,4TTTp3nܸn+Verrrj}n/Vs`l~1J"ea޿;s8tw}〈KfcÆ lݺ?xݹ(;9gQRtE-L8n*u( IIIA$rssYnx$/ ѡ- oVQpL f{Ⱥr]¥֟ FBXJkibd{5QL蝝I |u벬 )5ѯM z#SY'A!yx!7蹙 7ed\C4aI<|+aNA"ԗEE l)[Dp –~֍v>ǥ,c3>~:qWݺ[nSܺa}[ !儇Nݺю$KX0X=Gdn?hm 0}NeuZ(7pNqqȜim;o6lcLMM j_mCe lKMM%==ٳg(m w}&iPQH`x׹ٻwھInwMTV^Mnn.ܹӫ.{=Qox{e͚5|رG!F5"i4ZZZX~=K,67|Or~ӟR[[~| 6+n NH5n=ɚiᗹ&ƣV՜;w.y{ܹ<UU=uuun{5uiޟy潧#GrQ=//o|1RHLL ^C]-Ղ gE`qILBoK̴tbK?u&$$h>seF!1oȲ(Qz)멪bŊgݺu~mu] ̞=FNNNok#IK{gBLw_}G^T#j\Xᬪf>;'_fmU^ZZʪU0  VZŜ9s;>J%x'rpiwf5O?IVV;wl6{ફbÆ _Ҳio>C\{h z0MOXg|b]bMMML8'rY/_>`NM7ȑ#;yu5kiii d1?} :8=_K`ۿukO#/"A"SuA\I6VC˅"F\I~ӯ:=CɄ1<>:ȕ$B9vwsfLv{\I'Ǽr%ũZ9vKs%}zngʹE1:}B\Icsqv{_jj5YYY̙3ǝ`P}jSii)_~//B N\II1)DThٚisބV+:,X=ӯvw{PBr&\IΎϕɂ 8uzQó\[[Kii)999TTTmj5>,L8]vSDD7|׻[ZZf̙^ZʼR__O~;wV~̜֭9#G2}tzn{ɦZf̙3q\zFQQuuu=^+8=3Mx~vG9lO:f㭷"77[oyɒ%̛7cǎ5lv+*++y{waر|S[[ҥK{EEEq1n,Yn$]>g՜:u[rn45uhjj&ɓ'裏hlldĈlݺ]ƌOnzkk+voqu􄴠r%iHdbuYCv322BW\q+Wdƌ/s۷7|CBBzcmA}};Pvv6}7n7o&;;<>S$aSL?9cƌaѢE^گ/viGO6QRRBbb"qqqL8kZ s\{$Ji-O~@ְ g]OJϜ>e;bٴi۷oN|0v 2nܸv' ~=-؜>!IRa "-a 6ŀ6<D$rrrxlK.DTzj OLct>;#Q\;i$_nnNw`J^;u>g| ٷ*8rO=j$C;r MϕrI$%ϕ\_JPϯ^gȸ:*XpH$g ˈSHIsrI LCƈ-"8aNA"S X$D=~o?ͣޟL](y|_r%y'M|JT>ps"r% 1-"8aNA"S-dpn۶ɓ'xX yp{1zhy~\t)6mr/Azq2k.VX˩?fM.'Ck׮e1cx̛7ѣGs7z333y(,,dҤI|,1=GZ̙C^^˖-a}6li\¯~+FͬY#Xp1rAw>SrIs$s>5j;h233ӳiSSXX57 .334/r'u 9Ǐ_|> LߜL s'u"0! ΅ R^^Nuu5vz<>lܸ{ ӧOwVڸqW]O9;; ipx,^ŋς ()9.+P~~>~)>gEE۷ogܸqhZy?Β%K:ujLXr%F"ϟ;+eAwt9tVڱc;wjw?9{.V|s+ “28C!@E l)[V+@0tšjElW8l("##1ͽf_.$a6FejZ$K 9$DQQ!JEDDJB!FS#2. ӉfpWI]euurP(^o. ӉJbxgUUUr EJJ 7pׯCHIENDB`PK9>:__-Pictures/1000020100000273000001851CD62038.pngPNG  IHDRsu IDATxydO23{ t_("&j *k*eS\P-@YYPPqAA* K\pmtf$'dp/{&˓'OfKI2MSx91H!ߛFS|tx ۬T]ۿpe􉈟$=ft8gi2 CY$igtٿ+NuaD6o~ pV|BFtkG╊ӂ? /X|2WͻʕA .3O?U][lі-[4p 4Hf*%0~Us}4L$ ֦M7k˖-2 )(NJ[Rԥ-8A BǠCa\mNTryF"r/Ck:vW|pVݢA|at:/E >/5@.R<n;\.q3*g: _*Oi;l6"dvb>RRVrmb8N,͓aȶʋUB\Z ~̝-IrUYrE7joo^O7O;NN]8jmmŋuUWigyF4}D?-2q~ae],I4hLP*"I6sޯ} 5B?U)I$i//IzzJ߳=7IBVՆkTٚ.RdA ]J_fb^?YtrA[0qH& tJΤeYxZHtxf&Cr~Иl6/|p=z/Qڱ P΅jU. V,+1MHf,_칳uU>p͒-Y#'J _WsjXFoӌ'iСEk|=Xi9͝;W~$=zV\Y4KNf` Gч_eY577kӦM3R)eM1j2 3?E.`ϐ4uT8DuYJ#jͪ}ooٳ"piZt`Ѭhv(m̙|D2r.`kMKR%LN |bA9hauȏ |Ty.أSKNW ĔD/(פ|Rɵnu]jxam3zZ+ݔiC'WJ)qOUj\sۋ; A!M® ӐeB/Rt 3sn%Λ*a$T.3؎Y/H<'Pn6+̓љS7$COp;T#ڶHi%~r-?kńv>:C%yCCyu/i0LŋͽxlV?Q?3x֏G߽j]vnvavXM6hС_ /_;Cs>OiȐ!Zn]T(l|ng5v̸`z8kiiѦ͛&˲NN*T }|} 7I u{n? ooFʶz.!B̭`.՘TW_SPvk%ɌޓeTU±++=+w e א ;+0 "Sm˵]َ\6k^?J?$HH^2e^fbJTm|_3x#BzW(d2ضl6=R ۶䒃9O^lV#+%Η< /e=#:CyGR__;gI*Z#9a҄ Ғ%RCպ~v0B[Mk2f҆>PAgWQ&I\&꿟l:tP]q0aptiK\ZsOJ.]ϳ52SΙ;fZiK YUйӐ4wsteY~t3 wYgɓe۶^{5!HYa7^;{?T*˗떟ޢ^xdֿ5D+Ig}oO͗$}KN:[:eˣ?|~}wy,K7pyqBx=tz/k?p)TgYJl/Qm :o#q^m;r/#הl$ٹd^Amllٕ)SBrWz엘NW>˕ |i#8zKimp;TJ*?<߿._XrDV4->;\t5=P\ss\AņW=ږ7G mK˗K/,54;V ;﬎ͯԠiVM$ :TIIL&3fH^xfɐѣG? ޏ5F+W9CSN7߬]v%?jYUYW|"x}>sfwR]#8\[ZȲJ74x_[W]}u,-ZH^zFO?]#Gԥ^~pzɧ$yM#E]OW\qvqG]s5;{q\ a]t[:~qc n4f|M{ne2:Sѡ;#=C\s:yZh;M&x/nYj* ڹ +9}k],*UjpD"݋sI8RUtA.UvVHSzv;DrZd5jTZ*3<? {r]W7oւ twV$J^|E=}_nf-<2'o%In4zh-{otmG^͚ Ҁ%I\p?#WL? 4$5oK~z_͘1Cԧ$IÆ ӐACyMt}6$} Qڦ^M_|Emii)t=jimgSsST|yD 'ivK , ,S55}rA]>t4+~?[OEѤ@XĞj54PA]az#NvH uyַΑ\+PJ(e^:k6 PRޭR%Lɐ![Zj/nllw-\nHT%)-5 ȯWX"~ͬiE.L穥k.:V\gѣ5{~O_=7]" vv~Wm)˷eY:%I~,;ΜG놶ט1cϯaLR^ây+\p07rHwZfpt|~f|MU*17\~ڹqJ̵߇4BbRK,m,}˒ahsf^~~m3V1i5Ubɴq_eX0Æ 6l!5`Onظ1>^~sApL%hhM;Ϋf6*k_WumihM/ʕ+5vXM<]>Pzgm?qi"p\W%ʼ۴.Yg_ӧkÆ v.}i kC~}⫵3y)|Dc;1xyK['?L^Vl۩"Y7o'\Jw>+~7ϟ^|EٍO>)w w=j֭۠?J-ߗo5kq:_';D;j(IYeVڗ3nܨaÆyiZ)ueR6tYO:eڸivu7I?C >,KcF 3l#{5_{? #24M 4D醴 ڸi\NF {UUİprFU/L_ŞZjE.hfUL^Rʶn.QN9jhW6$c2ie2i32wTazGvVG.l6v)zGk*mzlH54RJɒL"eA?p WI_O\I feE7y1yݺuJҗT`iU0]O<٬v[=uQ߿7ZxOҢE-P-aQG}573R5%;U] ~ud5dh Ynf5KihFa:cP ܎[0(h>x2ZzuΪUr_ݿ[=vk}786nڤM7LF e ~L J4 y'4u߰.rlTԶ-Մm:rǷ4uڼest3KzWN$du#蝍xveJS*IAi2{ߙ`ZR`UltXx|ەHbYLLW*/*WnuJ] *, ~b7߉'ɞ~?~k!Chƍ"x`oDZ IߌZ[5:S?~\W}[H%oX$]ϓ2蹹>s !Cϡ_Wv&5tAJRp4kOm[a+Ӿo-ٶ_|AڲeZ[[d2dihskWFޔݓIҗ0~+~YM{dYmze?ltC wj4 O܊-nEy˗Oc9M:.[UWl"%Qx[%}J-_ueוckS 庎VΩ=ۮMNdjgiׯL&~nqt$;ݬ=ۮֶm޼E7m6jkkWGkrN5\KJL#VX⣼=PV4M :TCT*ddx$L7~\dTe7Dje (VL| {-IrѫnaGE_ԿQ/ 㺲LS {N??Eo\j2}>r/ݨ OySik= 6Usݭ9AI]`Rsy_ɠ4KJ_ီ oN{E7ٍ?R.]e5UT 6Ww{sGbվ7ڑr IDATP{]V*ݐր4` 0PҐACԿ?PtZ חH̔߄pM9vV\NY;~/t-[dXRE[ַU\lk61w"o3ѭ~Q]Kƺ '9dn]Wq/[i`_I}jZ|LG6~z]NV~USV:LCR]ģ|,+]ہ]xOm2~Z2=igb;aӊԜDc_]m-](~6tB+%ƒTl?6$-ؤc\Ixr3hdzgltw]?/Fkvru#.۵%UCA~ _ Ԡ4h` 2D!-+ՠtʿo[ϥkR)2d Ӓ!xͪFW-m:Y) I;pѕigԴY7)PMc2iM׍gꅡ %WQQI-#6+葚[dE5)TO|}^WOڏ #G|[@N_ `pnj7mV{Cv[ToT~4`@ 8PP`m^+9-S&oɔeAdzOpJ9\JJÕT˥w0Q.O=L$8GRMۈ+價xj=>`NpXeYkv(>sufV:q:@v}?O9y,\"3G@P?͌N$'Y E P15gnذa>֫Z.Z#(MW\3gjĉ5j9=㽱*8)=O~_״ǔnI_]wI'ivТEl2͝;WwqG֭[Wo-2xv^z6/?_#FP&>9{|۶@;FSN9E---i[6jܹ1BSLw]2KҥK5c 7NFG5kT~{{f͚ &h„ :^ nI4f}ߍ_Դ6~AtM].r4ުO|fm$纒ɓN; ^if'?+B˖-K륗^O?~[LF\rIS ,ŋb I5#֭+ZKRj~Z?.];LfR%+TSS/^gyF ,jO;4͞=[}Q c}9ukɒ%z뭷N;iܹWhʕz /׼y*~{N .ŋzj]uU%/f޼yڸq^y-\PK._M>Ӹ_|QO?֮]+?וp:(y h=vmWr?}ÿH0tW?PW^yx _QFIL{W첋$i՚>}|MI^-*'> =̰a;(0aBPcU.Oq~aM4Idn~:4nܸO+/q2e~?~X;coGq^.mذazzwtG^KܷRyu]裏jĉw}W{g1o?וp-[C=T?Nu9hWsQGw{f鑬F V^믿^3gc=& 1m4I^=qܲV .=ɿKR~*Sի-w߭kV]wu5C}Yh.+A3_55kDgĉP' oիWWիWk &\|;q@Nu%!^쳏~}zg\ [6b]r%z饗i#Gԫ&577kݺuAS\eGKnT#FDc=t=hɒ%u9ؾ̜9Szx ]V˗/j0#tn7Յ[|eYjkk Ǐ{E)i9=q83L-ҾL&S>>3wqi…jooڵku7jwtI5k)_'Veg̘?_+VІ 4gΜ`ސ!Cb*Y<}њ;wf͞=N>d8m[kkkScc2-[>;2\_W5{lYFk֬\P:~Y555iΜ9:cmXZreA{QG /Tss=1-?]9ԧԿ]r%:?`*gWO>YoSj/~?|FGyƌSN9hae?|}cӴi4uH38CKޗeSܹs5tP>4Uޡo|;v.vmO~͝;WcǎOӑҿ袋4bc=4zh]x]ʋo}g?YM2ElM$ 馛#h„ :蠃~Eϝ;W n|3{uNpڥi9=q83rJ}*Sp绗^zi2Jtoc9F/r_XB]tQ_gPD0tE~9/͙3Gׯի5wܪ|mܸQvN=Ծ 6a^c=4dȐM 6L&MiV0P[-fmtiN;G(qcP_u݂9:Fw@ +g`ƕz Dg:;9@ͩWd\*L' =}}\R>,Yҥu>&O\+Q2J9?;dn >Z{uvi;$u) [NKs~Gj,YD}6m\1Gc\no8/r-@rVl++nk>z\rӫ\*mr]7tg^kv~le_gjoMEY #%I\N L&ӥM*ݤc -6U[{|vkX]zfq`0JѵT]WSi˒wߪo[K )T9S,*؈jnnR:!Ցi?:@|lrUgOj]'Yge˖`I;n״vɓnէ??'eq瞭?gn߿cuau3oi|'IrfwS]%I'lMsf_S좩Sv9穭hs֮mlo>榢̋/^xKnr%/rxӍ?ozTO_?\!u֒e,[K_kjՇ-O>|a<vogɩS5lذ̋/^xk}EfVu`.iӦMZn]f1+Wh5=f.wM0~oS#F${:/뢋/ ҹ`:t՟s\aö >_ӹ߻ 1ᑇo~w&SO=YtK/CIN:Tr+︇|@;KKn7^&Iw`/*Y&?`$?s/T'|cޜ<0d}SOeYzt_P\ZϷjM,Xo-,SaA&ł6m޼Y---~um+ UaȶH.U+z=K2MS4|1ydA,@_jll߯ɓ'W_V,.$ɲ +B9ӦM 2 Qb1ɓ8b2KRA ]ӦMRfPSRO9lY3b0[N1I+@3%/pf娉?_:pPʵ԰rY9ԦxVp`9ԟ>s?%JPۂ[8sorlff Pǂ97+waԖͬm< %s зuY˕8~oҷ&!sZK 9Ԧ.3GPǯƛZ-@V7? K5W(O0T3WgA5 d0G P{\8%q49ufVueцբO@+U9W*+ԎpPM@H5su"` PqmJ|$F[I‚99 3%9z:F0P Px@90:jjX& }e+@r'4 ԑ'@6k)e@$/'P;+QCP99sMᛛI2DPзJ@#c[u6P ?~ 5\ͬu`1\Z7 }O@+q\r JW PX`X+jaʵK\9[/G%g԰rcJg}0fqk:P,.$5,Ěg)y7+֩}Ƕ̙)0dY Ðx R)r9ٶ-4e۶\וizC`V,Km+)I@MrrG[lƍ庮,˒eyur4԰7E7nT*E0P:::N;iСP6mjmmD0PӦN555 ɕ KзZ[[aeYi)u[f%7n$Y%uX-JI*lVrL8Z?ARԇ"A@moA"usaA0G P{Q/8N9jjߊD<5s5.*˩`%uض-4eYl<@7 t:-qiD Pr\_ Q٬[*J0 !۶eYV8/9~z9ond2d2jرcevЬyf9Ie9t:t:-˲4x`Uoe٠&0 R^Rl4?}+|[0fef$Mq`/>q^v u\R} ÐeYR9˲8 ʅ_Gm@fi*4;3Pòl0տ%m[CPз٬$Zn٬}ijmmU[[٬lV&%Jب`C@ R?[0rmi*Q3P,˒eYr]WʶmI %alVe)N4MR)<`ٶo4 jX:8rr]7+#a~s_0Y@#csu`1Աf0w-\7`k i~|Of3G@퉷&KJn@qc3P yQ]QKP[ G@5pIcѺ7j>BXIPۨlNPIDATc%9@6j}X}ͬuu9:F0P@c@&Ak;N=Occͬ x{*5su`19:F0P@#csu`19:V4s]W+jI`@ P%ET]:V|@0%/c@#/5Ҥ P![P3G@$u5t#f>pk:F9:}X{È6 P@#c PAnd5suH@+IA3[ߛ@%5'p>P u~$f hg%s9jJ-jj"YP\7f!j[fΉN% [IL3Z @3\9:19V"s50A@H x6+@ m~܄sY[7;iA[f0L9+qԚJ0PL`9 0۶%2MnMPwl;b$98\ Igo9-DZW8?rf{6kfpdaDa9PgL,@L3?!^+om :~@')y[9/a~6kfJ@5Z948Ng\5s54>s54oϯ+vk9\וA@Yܚ~T*7jXxa ԰mIrʏjX*$ٶ8`Y%u0$\.%Ru@s]7hb:@rEX%9ѡl6[Ŕ`ٶ-q$Ѭ E7 Ћ9Vr`buC/9rj謭Tǿiߑ}/TT998N!Uj*%?j>s54;lVitEE_Lv}szuʴ=P0WQ4GwN5SuWi]>#>u)(w=Kn44׿yop~'Zq.{F,{J]{,y[njw{:nu ?rY'͒wߗ$7Kgz$t{e(IϞ]wَ}岺Wj>vg-庎N e:ojqɓiqE׏Z?}U%y_hɻu_7_Gz3^{[oD /Mݢ7[ӦOe4~x]}urɓw[OvD~AzW>(S٬};\.o]~%oھ޹8넷ڪ_}v`ڷN9Q3g/zIKa$]9n^oxQ=5>peAڏ?zL]v7gvyL%iwў{{~r7k?t5Wu]}ٺKeeui܋֒e,[K qu9gi/r\.Ӥ'M(1FH( MJj< UE]T+]J[%=ٻ̙3sso"OV=w~|ogvvF}S(ޣ>NuZL>z3cvxr)ob Qx~ޫ'b4y`0,* Z۸^;8Ӹ+J+^}T|k߈{Rŗ|Q?l5=E\o:/qnj\ž/E_ʟ-9&'';Ҿ۸#\ 94.ĕuJ^WZׯ/}Y$׋c=c=K.0<0]6])zלp5^y_W\qEsmW^gqy_eKx:ZD ͯ| !l{(C3˦{aztc+Xw_ſn~ޫQ\\V"I7`0Ř+P)%BJV q\ov4 ntU|嫷ӟH?{=(빻֭[;/T 7tC`[nsz{E9`Qvk׮(irE_O~$˗/X(j9)s;̸y=6-(Nw T*QT(J!PJu=x~iAKl<\᠄DXbzj-o/nF`IeI&4M-Ze٠%h @V!G%4W^fk'MSz :E:bYkң5t4/CG{]Ӛ`L~Nu=R!R@y]ۨ6]= * NmzZM@t8@N])aDD}h.Ba@C(P,cH,5aRH-G-Ǻp8LLh44-RE*2b)%mB| "\J/RXFej^zu]7p!275Q;Vϼb+WWN=zzoq_X{!ȴUJM`e#3s F }-$J %fR(MV('J5h2uH{.Zhxy(B<4qq'=aX{U.թGg=e³ӊkǮzn!~-{#$zFZ[1ס}[jXqFeձ(RH -)X6JW直j/\9ߢY\!5@˅mbm8YגcqxMJRfIV M[L^Ui>.L=mv6XLMMRNbmopZJnY%m+tA?"&+llEsdf^Zsss%:hESS圚]їG"a{3 ˕%VdR(/i+Q==h4(  nfy{.!@WJ#[ &]'fryI.Ӭϳl&' O7pؖK`O[톚i0 ׀:X7E0 =;ނQ -971'gEH7%8m(ןlYfޜnU) .j8pZ-l ,Kxh[EMyciG ZFVc{-G C^_g;E`>k7cۜ=_@xq**mQTP勱p6?ҁܮp>Zl֚9~E޹ 4jzYb#:k`ު{T9ur46w!"N/@$t7پ  .m5x|} ׯG_"@kZ4(Hriri UPϣ+dba TY%bdž/OZ㠱)pl6pvk {웯SPqVض@HE Hl? }MZI4!hϞ=88Qz-];ED\ȾVM-_uɪ '#׎<ύڛhu]Z& X,R,4UJRJ\us#q(hgEG:+ vL$n:ri,%:\") Jȁ$Bh }/zaT1Kޓ>&ZH1痣S *BA֤099IZŲ.1mdx|H<ZD ppC \+(Q)Lc 0¥FefriBYc$6|&2< /DLۇ:H]G>+%D Mm2|~t4q\1HI/j :ۗ%\{:l{PhK@ߪՄoNkBIl X@owflNp<.5i4JDX%CH,l$ZBOsfe.=\)1!BsgeFqI) i|~"]AbeSY i/itB;CZhP^`Qm=le oߎ*K.eҥT*U,K8N سg۶7;2=ׯ ?x133w `0 O)IENDB`PK9>:7:r-II-Pictures/1000020100000273000001855742E8BA.pngPNG  IHDRsu IDATxy|K6B ID"H)~%,n(T6+ZAk!-S֔E(VA$L"Y0@֛{dflfǕ9{gPs p  ۶mʕ+aZEի1sLkxGp8q\FqqqPBPȰa'&&J{ecNpʹX;gBp8 {p8$lBh v? %S?꾤{ܐ_7?p`kND7RzJ.޻IFN n EhDGGq~@)UD H. 558v!1{fԌtԝjsd`1ƂCjI&F'qUj_1)zQ:X9'7׬^ )^D|oSCP`8&R^Ax œNvx<0An jk HN2\m6lv;l:}uPW Ƃ_Z)3g5 Z8B9V+g#=iGF7v52O]appXLgy\. =åѝzxn^dGWDiqWĊ(ڰF:z}yyy 3sǎz)tzpݚ\ԥIS}^/Լ7L`|^^dЍ7;wĄ !x`v%ÀucNZ]飿{O=i|Z8@N'Xj*/^սV.@B.n8xqoQIAtWDGG+tW_7xW_}tK+*Z;=joᇗ{Ñ#G:9p@Xj.Xc/{1$$$ ;;Xh~37=gKϟ.Qј<=lذRb \,YD7?zhyWsW4ɗy"#q-`ܸq ÎS»ygyv2L6 GU.^ +|qpe9LQº IK޹PȽ?7FMb@l?pH+'{HSKQuFyiY ' ;!%ka >O zq&@ RJ -|0C)iec0!: gZkSy8{G&Qyvmyyyaz==n7܍jmw?ix'Mİ2= :Ѩ fヒI&233!? `6H5_ڲ<447N't둀hu<@z k|sff&ѣa :p|W9ra_ 3, 55s└u x衇_] 0k`ȉ$r!M"27dӖ*o;7oჸExηOBYRlca6mQ edC·bv̞5 /djƘ&>ueݩ?]M𢡩7EEGDdM͒|MTTT୿%>m:|M/ӑm93Kuuu @M 0nq KG/<88ݼ}DBB0dŵÇ?9:m8p͜kpU}ڧwqףaᨯGDDQW_z!55II=-餈pMߠF&N'߆olX4j ikzk^#TQ$CE={!ЀxojNnл;UV_,4)u TEKa9k`Ƚ&C= cX"sT}+% @`L9AܿËF3*hCۀR$Ylvn)-OyݴDoe$WOFFRA?8QI>t겖mƜ ddSsݺ1˗.GѹrWע> ?˂پ};fϞ3f_Ƙ1cko61qD2`&/hzQƆMl2<ӧoV6̞5=>qL<8xQo?2\DCdDo%=|Mma:b:ȀJ !#scEm(5 7NdX9: =|({]U4q4Rߥ#TFw< 1U4ICUq)ESq/pqv ?(T]R98x1'pA*z8f}2R-<&ȽMfayW\\)Sf)gj:!Zs^zRSݹs뮻PYYi1\TP7vTW׭P SRzG{#'3  ccc Q]D ] \} L5UuǣX1#^{1e=S [M(k.Qj擢[]s D]]=jP_'_ťs:}yÌ p4+\_{wiB]}O끧ݍ&7|Jj(R Q7#5\Pi t1#"tcg齢+)d. qMWŢK\7Fx\\KW__#ִ׋WRya3F7jqep<0V>ufSt/+(Z{R?\'skӼ޸E=9!`u+aHyf0;][dԿsg*4oZMʁ <& WBdk'L``*/86p{yi.\m*bC1Ɵ֧+պ1@4Wi}& {pj`ZA8i-&=n|h9_jllD]]/_9N8 FcؘX[!t|toKiպdf@hM;ë;21CzQ)Z{Ѵ5utW[|VDB 9ѣO+^%m̩if˶/gq6\E[7ugn AuO/LKSO,\N as<kQUuv [NpjooKT[E_er-\@S1NOQ{8-NCĚَ=,z >,ZV7/z*g1I%F0(Q0!U! 81x8 H3x!V2^hpf j sfPj]y-AÕ-fB,Wu410m̩#Ԭj+y0GFԠg`w8|p9sЧڰJU-tiV5wuY T(yYiy3TZj]P]=rpΛ^8oķx=nxXӰdWɊ_qx'q9}7;> >_l^`hhUe^l#4EN+}DeŐL=s#,AAJLmbӁ6s㿭AAQo  x^1jkl'\MABk߿GFrr20yd|R|,9ӟ$XhHQcA~z :=z^ jkÇGXX:0Zyٳ'222p5נ{4hvrxԒnݺO>".._nAĕqy<|M=sw'O7tWKl޼EEEXt)^~ePxĉÇcԨQ8q}?ՔMAWwuY#VZxz撒W~;vL>CO~رTg}#55ݺuC@(j-"L!?}@XPcǎa׮]~ nWZG޴3M׮] zV!<ÇGII rrrp $&&bĈ!AA\)tCQQ><(**²eL͞=}6oތ2h22ZCHBBH1_pkv7p-[&/_Vz<-iN^Ο?!ӆAat/@8vZ5 @ y̙3xҵkW\O>\};Xh|o-t(zњxpuU"*TgӒVkw[5PiIZ3[:Co֌'M|q8HIIԩSqfۙqơU wڅ뮻aaa߿?rss[E/@3cIW04x; _رc&NتiJGMNKlo۶ GZ7\. ddd[nogF+c(**ˆ#0}VI72OgAuu5ك{^nO3Йt%+ Ck5Y9K/48N >\ؽ{7 Ӊ4l޼Y'+;,,,m݆h#33S}}=fΜ(֭3}Cݹsaf$> bbbs碡A_NN␔<]HJJ| zxGHdeeZW7˅ٳgK*++9~)1_fZKiHMM^J:n,Y=z@\\~+WUUaʕxW5ҍy$''cXz5֬Y#]3*ɓeee8wrrrSO8t˗ꖝ ȑ#裏++ XEz~!0tP<CiZ ǎW_}"+?#X`'Oc2D~~> //aaaرc?%9FHY2k7fBOee%rrr0tPݼ3"ضh_Wm=Fu09ѣGQTT2\RSY0*79r͛1k,pV"ui[nEWUUolϞ=L.\kkknSSSن w}Q[[z衛v(:ӧOKǧN2e֭,?99H'Od)))N8!?%&&ꖒN:H[~ofj7)SHi&M=XѫDW^z'Oj>pռGUv-]شiceff~M81ؔ)Sݻt\:FnQ;F;MY[ ]l6xҳ_VߣZzZ#/֫W/MYf¨ܴO٨QXCCC@Zfzӧ냶F~И[[ŘS#?M4dz}<øg,**Jz`pgv0:;}mOkeA1.ìF9yyy tDL磤 ҥK-wbb"Ξ=+9sF7Ƈ~h:|_TT$"!!!$]pYx<x^0Ƥ!-zH[ & 778q"bcc-aKUXXy>àA4 Y-wyG2i&91b6l؀A!<<}YI0o7fBRvI.\/mьo^["GgΜAbb,vau\† Uh]xiժ؁?L6 ǏcL066V(.R__p ,,]4o>eM:U3S^^ "+++$]͛sx<8z$KKiӦaɒ%@yy9-ZdY]&ğ3g^yl޼sS=1L3gĂ P\\/b5&/$_=6n܈UV)標qff&֮]+}x̘1Xv-233-ߓڍYk9Æ s=:`޼yE3VX+VGcc#N>-A+TcEXXxj`vaԿؼyp⦛n2ݪ^jV hlk#<cyǁ1 ~뮻˗7ސ-[ ?O~˖-Xd _Ҵ 5k֠K.ݻ7g?͛;v`„ A'HNNFNNNHX[ӧ;m͚5C>}peyv[oEcc#q-\3q 4Æ C߾}ѻwoKt8N#Fo|G>|tݬ333q%=0zh\t)dc,=vcV/i(_+M7$ ^Vۢ7x#^y-oNJ 2iiiի5e UNnn.͛gUh]|㏃㸀1o J`nn.,y~8qǏ8p z-ŃБuӑȺu:"Ѻ/AXyyy+:U=}QߗX+++CGŋrJ\.,]wqfپ%Ⱥzvd:m?V"Aďw\"%͙=s<ϣ/^ lJ&-- ĀK NP[$Pbq^/jjj?nr b…A\P[+Ai k555q!m@AAv7Cmm-qvJK  ڙ@{)s0 pel68DDDAA Ƽ]ap8p8`;̜9ZOAĕD\uu58CXXN'NdAAzn]<0l6vAA)j@2k "&&111;w.4R.cdffbӦMAAW4a'yąmپ};^x$$$ 11}vEM6ᡇΝ;q~AA腓f 4X> mAYY+eee0?lDAP{HƜڅזL:-Byy9˱pBdee) {Ŗ-[v6ב  #qzc͓O>DGrr2rrr%''#??:֬YfAAtToW"""elٲE\={mAADBs`@i0P+AA.\AAAtN9=AADk$OL?rx0Я_?|ךyhU/Q#55<+ۍ%KG{*\fZH<2ذaU"..CCz|8tAj*;v _}P\\#`HOOkL<833}'NHϟgSN)Җߛ<|ƍlʔ)ҵ{mڴISO5V*))իW^ɓ8nFz5Q|ոnek.6m4cf'Nd16e{n)z$ìNQzaNGEEEѣGoFSodi6ysϱռ'W9zjv1>S6j(`9 u>˺PAqi~mL_~~> 0Ǝƍƍƌ*Ɯ?lҤI,>>ۗݿ?`QQQRqin17yduf{Hvf٘fc<Z7{3gvoF񫪪X׮]YEE+//g]veUUUzi^6nM7pVZ ȨX~Xuu5cUUU[nzKL2k7f¨Z+`Bm񬼼\WlРAwކY=5^RR†Ί-Q%COFu bȑCEE6lؠ;$2e̟?%%%.]jɽ8{t|ݰn~"鸰 !隔g1& hֳgOE5WXL0ĉk)[BBk} 9j;Ȑ8"" M0rHbĈذa pe%=ݘ vJcQWW'_p!ྫྷE3nF{ׯ_%K`ҥXn]HiS. YYYذaRRR,˔'C|Ϝ9Đ AӘc9|}ڴi8~8n7cՄDqz#<<EEE_(deeaҥDee᜼}!===(clԩr,\YYY!:o<̝;OѣG%YZM6 K,AEE˱h"2 &9s+`͘3gh&׌3gb(..ŋxbXşxNO7AcƍXjbYgffbڵ3f k"33=1KϬݘ vJ3l0v֧O?1Lf;waÆ1rssc|ߖ}lرuެ]gE:d<3,!!EFF3gJCV &Bf?~fڵk5 =z뭠\ |x;hfLGMNGֳ#h1j58k)AhSXX<ݕz{jcy]|yӷYnrjM,^+WҥKqwhk[gG֭#c-A\)̙쟩i-0p@ 0Xzu{DW$ (j{Ln1?  `;ȏ#AAD#Ʃ ;9sAAD@3ב8Z:OAĕ8ܪ|s:!GAq%#Ӵi3'Ε#   \\CC|A &&sECCf؃W^xXK  l8^uCii)N:;wNr;v 336m} b0ߚ oߎ^x HLLl߾]fӦMx衇sN~mAAD;3Fo߾q߾}QVVc̙9rd[GAnȽp̵(** w^xgZ=  vC܎DoaM:-Byy9˱pBdee) {Ŗ-[vvҔ  uc'Dbb"#99999ᒓ_k֬iM  8kc"""elٲE&zǏjAAaAAڨ 8'N;0+AA>Ϝf+AADG AAD9  N^% x~l'0Z@slcS}!h1gRr[R~:tl4B%uk|l< EכoY3\78`ԩ8|phqƸqPPP*Sơ꥗FiAhWfޣٱc&NتiJGMNKlo۶ GZ7\. ddd[nogF+c(**ˆ#0}VI72nIZOi49|qx饗ӉÇ+wƐ!Ct:͛7K7RXXn Gff&-aUz̜9QQQٳ'֭[gjܹS03Ѐ|111ܹsР/''qqqHJJB^^֮]x$%%>z^<#HHH@dd$P]]ٳ{{ga镉GA~>Qү_?|ךyhU/Q#55<+ۍ%KG{*\fZeee8wrrrSO8t˗ꖝ ȑ#裏++ XEz~!0tP<CAV±cW_Ŋ<,Xfɓ~ب333CXXv1~xIQ=cVڍYkfSYY :T7-Z/^qqq/,]q#!!zi[i756oތYfi۷o="aʕ# f|6~x6a6a6~x6~x&L_ٳ ZfۥTaw15r9zֲ=zN)))S uٺu+-ONNfɓ'YJJfc>}'NHϟgSN)Җߛ<|ƍlʔ)ҵ{mڴISO5V*))իW^ɓ8nFz5Q|ոnek.6m4cf'Nd16e{n)z$ìNQzaNGEEEѣGoFSodiFz>}ݛ56627o۾}mO?5544h!/֫W/Kr hN>֯_m5i$_~~>5sa̩&MY߾}Y^^a %uǙN6y<vvƓ'Of[nm|n3l6y> ?Ժݛ<{3_UUźv***Xyy9ڵ+SMslvkʾt -ݴ*--UGFe\WWǪY\\bݺuc,--[`Y1FJXj6fA`鬮0^Kc%%%lᬸXWQh-cmsnXۍ?P14fE~QQt\XXp$={^1iQK={*Җm&b„ Enn.&NXKyzj^0h ͹JVwAFFtlT0`6mڄ#G"66#F 0h [/+Ƭ^Pݎ:… e-6e˖_g}n˅,lذ)))r$&&zAt0լLo6m? Ƙb5all4Q\GQQ YYYXt)*++QYYi8'o߾}HOO:u4 .DVVVHΛ7sӧxpQInӦMÒ%KPQQr,ZȲ<@L?g+ؼy3̙>5c̙X`qE,^X&'MD|ظq#VZfVƙXv-ƌ3f ֮]L$,=vcV/i(_ΰasϡ%%%7oz0m}Q-*[yp⦛n2#QEE/^lW݆̎ 8h-j3w㮻BTT/_7xCl2?Ut:[l%K_򗦝_(Y]tA޽q5g?f;v`„ A'HNNFNNNHX޽GQF$"B4 "bQkE!`XU^""TZJ}|R}@Q@&C$;^M̙3gΙ9sڵĉq뭷mѢEHIIA^pEꫯ:=x^ ݎ#F3tyGѯ_? 8ٳgP˙M$bرcn݊Ai\TWWcȑ#G\j7Y;mJ[j~m$%%aذaZ+ضáCm4tuaב ##:uO<r^(4ҽP,[Ly=h胩`[zEǍ7h8LקOlܸoj{A1~x|Wo43*IСCp (**j}uu}|?)"␓pQIUV5Jw˖-!3Q`2FWEnڴ Fju4U$M/ ukp:|&@}}=>s`ĈصkW͌GR <'Nl|;v W_}5Π+++W\є,pԲѣ@e+ry}t&NQSXKì$_FFFbcc1h ^-[`EFFV^-VRR[n:t@||S]]&MDtK. kq^_fҷl:u*iӦfy/??)))֭ xbt ݺu￯r0|tڵC^^jjjLV__[۶e˖y/=}{AVVׁZ, ͗˗Ge+p80gt)))xgү… ꫯ(o,#-- 3fO<9w8pw 2?ؿ?z_= T@¬+8`^=z,P[ ]%%%z{!dY@Cۋx7c֬Y@yy99s5O ,@uu5>{⣏>VEEpUW#<ǏEEE8z(,X(cǎ!??'NDyy9=|}ꩧk.޽HHHC=d سgn^`8p  %%_|a/է~ݻwkh{1|/QZZcǎyM?>f̘}6Z6P`رعs>Eaa!qqqشi?č7ިSMzaNω'/ش -[^Xt).@iVP0;жRuuux饗0tРNK,Ѷ̙3MףWɓ ۾};݋Rc…i+dYbAll,bccaZ!rQaa[F-F-Bz-_\{B'Oޟ={VXV}=Ċ+/|1sYѹsgu7%OݻwڵktiiiH{ѽ{wm6[z%߯Ejji޺w.֭߶@C˿Kbܸqڴ;C\0WYYiŁ OĕW^)\.6__#}; &!ŨQB7NlٲE[zG:˷کQD1rHw;P} Ci|ݺuB{=Wߌ ~7[6۷v2/;}^nCnt{Jl6ˢ"7=Hr!|c1cƈoY1B 2D 2D\ve"''GFĵd0Kg}&nfѩS') .sN#$IJ,p:{4vXvfo%jEX,!r[m ^m|UUرcǎ0/"aW\qia7u?~>YYYF*qy牳gϊ QWW6R@_; |ن`Z[QqA1|pSz C=&cmmxgM7*;bРAK/iTeeebРAرc\"]S#F/\ >\3Fu]bʔ)bڴiPx3 W :Ċ+LETƍ<2(갟0#Gh>l:|54LtҥIy֭9 !6 c]z[wdtMXn֭[QF!9992 GJJJ }ׯy;߷z 999{8!!{ʕ+1tP$''cXb+MzaNRV+jkk'Ol]`I,_?jjjB__}3cYcBB^tQ]wul_7OÊ+н{wraM\`ۑ/X,p:Zks0aۧ䧿099Y;Q\UWWxǣ4`yyy;w.N8'N='o۷oHkTTT`̙kR^OiӦСCp:ػwQ&L9s栲5kV$LUVa՘2ei>}gt4if̘cǎԩS={6MQ_EQ?ॗ^c=uS}ŋk_x_=/^ܠI/@¬6 8< jkkQVVӧ{M-*==999_r TQ 1H(XWWիW#33t}ڷoӧ;İa]={+}=QKЮ];8q?qvi>zhvmHLLC=k͛!Cxk͚53gq5<4ŢEо}{^x!.rλi&tM!O"55FZZׇ~999kѮ];L8zi-Z ]tI(_{1bi>CM7G}={Y$IBll,;v`֭4h6=>Euu5F 9r$Z_v^ӦUVFRR  }mM1uT+!ׯ@鯾pSjtǎ~z~Tˮ֭[ӧiNN  t O<1! IDATDI-jkkqIjWЮh MڵkCZuп]l M郍7z}GHΛ^$3 Z|E ^z[hURRӫL:@dY(e<8p={6?bܹ3f|EEEEyӋ|Fr"AkOmc9EݮojaVj>}wHNNf>Qa[ #QX,ZK-lo3g{K"jl$X,Fp=uDDDDtBQ ߀Q0gC""""jjgtK^ADDDVYq{qO0""""j iM'EYaXrWQSfUϙ( 7pk ol6L:IIIHJJ´i` ݵk /Jވڒ:Ī( ZzIZ>.k+FˑDyy<=&M@~Vw˥]ZSSEQpY`,k/55htm۶kAJJ |VQ$ELL V+:v숺:YǏYfW_~f`^^<ضmFӉEVZ@}}=$ V.K. Tdgg#;;iiio4_ZZ o`ѢE?"""q;fs8^#g.!!k֬5k ofܵkW۷FDDDԦEbў 4{Y"zs`}0p8g"$I  s 戈"bBoY^:-k ?}l&2\.WsEө¹\.Hөk~fePGDDDԶv;bbb I\.ES L!t+?UAsm{hroY_euuulp:p:Cbb{zkd"\=|)l^ݻwO>- gZ]M M=4&&ݻwW_5;̨|$IBp 7E>~W0~xƍ+Ҭ|;Kl[.;@JJ _6m iU!:X,$$$ %%>u; ~WtOM0jԨ]GSErPkua͛ϑ#F`׮]o43*!JKK1x`L8E>뮻c>|ѴÇ㣏>]wRRRЭ[7`ԩu_raҥ ڵk<Ԙ歾w}m˖-_zf$ك,/!_aR|rC;e@GÁ9ssHII>~UU.\=/ؗQdYFZZf̘'xsq޽q@YYdYG޽GzTv^S>,Xc_FHYL /4Z?ӧ#>>oK,O?_WEVV֮]z?S#iUTTW]uUP?#8~8QTTGb f"99k}|RRRpaR}ؽ{vl{ ~-Kرc^ϟ3fo߾ 7;v,vܩsssQXX(((@\\6oWթ@&P0kĉ_lZvdž P]]{)lذ?uܹkc()) XjB`՘yٳjj{!VX!{KgϊΝ;)y޽8to^֮]+nOKKEEEݻ.oקիW/~?(RSSMֽ{wQ\\nJϨ]^ƍӦqbʕLL󕞞.8`'|"Jr hr8AwyGL0A!Dnn/F%bܸqb˖-z#}>)_&PNG}%&&#G0߁SJҥKK,w_E8NYoYY{DZZС;ѣGMB?⪫6MѸHMZơCCnv'~_I&)Sɓ'I&B&/g}ENDff(((Ν;ENNHLLԾ0$I P{pv8~cNJk6+}/@VX,bYom[m嫪DǎEee;vUUU|Y,p8 Ӿ+L ^}\[[+DMMHIIUUUgϞ.m Nj7ꅿvL nWSuqqիp8n={z=ꈿԩ0@իW\qizeeebРAرc o] `n̘1nƍyyy"//OL0Ay睢PDCEAA*++b a$ոq :'ȑ#{U|0YtҥIy֭9 !6h]z[wdtMXn֭[QF!9992 Ğ>c`[o}޽{cʕ:t(1x`XC|||&P0kMzV'O6ڮ`b ٸKqFlܸFvv6_w+6yz>q|둗+V{Ç#55t^"<111eNp8M0N_M(C|| e)S`ժUXz5LbOȤI0c ;v NٳiBwۿ~K/{@877/_xbMzf)_oxgP[[2L>kz(m1ó>g}毎;N=xvv05jm͆'N੧%\M׷ӧ;İan/+++1{lW@Aլ?x~G\07zhvmHLLC=k͛!CxL֬Y9s 11\sMZS,Z۷GϞ=q/GLLἛ6mM7RO>$RSSl!??Iy}ᇑkڵĉq뭷mѢEHIIA^pEꫯ:=x^ ݎ#F3tyGѯ_? 8ٳgP˙M$bرcn݊Ai\TWWcȑ#G\j7Y;mJ[j~m$%%aذaZ+ض+HHHW^5_w+j*<}z>,Xž={a[ӧOl휜 0ԩx≐ʉ"TXX(VXx砰jժ\n0ߏopO>ظqyEr>#9o_[$7>a(rs3SN@פgRٳgc…ܹs1fZyӋ|Fr"AkOm"Y#UFF޽{#99Dmm{4sL̜9AǶEk8JDDDŬDDDDg&1O%"""lQ3GDDDD""l:u*iӦfλk.^h\EI`5Xy?~(**ѣGRڴirssrJg~<sj Z݆ ϣK.HMMŋ/+WĽދ͛7cѭ/"""#IZ D0kyy9233(//äI0tQ2 $I$I։RSSQZZ/))A.]ٶm|M,[UDDDDd$^67~x̚5 ̙35Ozz:mۆ5k`mS"""ܓO>Tdgg#;;iiio4_ZZ o`ѢEmS"""bm @BB֬Y5kN_ѵkW۷FDDD"gQc0GDDDŬV$FZ)DDDD:+(Zq(1#"""b 戈9"""(`(1#"""b~9Qd5~'@E33GDDDE1sDDDDQE1E1sDDDDQ DDDD=sDDDDQQc0GDDDE1sDDDDQQc0GDDDL9EQx9"""g1#"""|2Eo@g/""""V;cGDDD=0#"""5 Qc0GDDDŴaV!U^JDDDa|b6gQitES7sx`"""b3t5 QjfvEsDDDDQ@E@@hf}戈"wLq((Q0 E QլDDDDQB i0Q9sDDDDQլV ,f%"""j{3'&DDDD`Q0i^DDDDF\ʠ(6*I ꈈ"aVpVa<799C#"""hAi|KeٻO """b 戈"E9"""(`(9""" 戈Q@gE0EqX$sY[9?DDDDI! 0#"""$P  c0GDDD$I6 T 戈"#>gIs 戈"҂9# 戈"\`1#"""`@ιoM"dǶQ[EqB='ũ{戈"7μgNRZ-CDDDD:ysZl۷N(j4)>earrr3LDDDDnZ 'N"fiRfț,ˆë 戈(<|9$({jV QS/e. jǜ9f%"""`jϜYY",˰X,Z#B&?_|ѤeEC СCC^Ne 01N(jq=Щ=s}:`N *k|h'"""*+x␃9I9[;NNK* G}]P1=czLEjzj]-DD~W\Пs(]78 3P$ 8|$ᚁ=#.>V!YX>q&dšx Y8[,nm""r(̓3GDQml{(ԆxE{Eաp! 1ip+Q[7 9"rIàBȀ($p.$u[vcr9gŒ;s-qåۧ7rrn)9"jէO#%9@Y>}{:\BVFR_*FƖ_b"Xl!9NGzy73(|~@p36מϿwԺ^ dQ:pmj !"2Q[>nɲ !$ 9sDu04dЌB=aqzyM{X_!\sz%FQV&""=w'i0+E4̽`(1#"""b 戈9"""(`(1#"""bI&>'" G}u6"Vvv6rrrBZe4XL},I}qi0 `~=:+k횗 /Ji`,c_e+@Qx%ǂ^O(tk2ݽ <,]<.Jq|6f.پ ED+T 믿³9s:>n2c0GDN~1=(~s9EeMѯo]n2UqZO3Z[4\wא[y}{ikݨͿy˿iqqq=Az6y Wvu5xeիZjE?` w0n|&ju8xnm,:w~8e۸p\HNNÇPU]Ґ^J-GLכr^'t Clu(*:=_BMiu. ZTpgU yEHJJLg*Vt8TT֭ZR:m" eZSs;&_;Ϳյoh{o>HmW 戨ը'A7yyuYIlzJ6 6|{Y4ۇZ*$- aƘ[bEgBYCVVo|dfW]m- }v(8/p8pӨ8[[zflգN>!$IFH ?h6uCכ*p܋/?|+^|:t{!qm4W[iq)wyck?rGE((nz 戨4yOra׮{L ẑc7`ڽ޸8?˟]}6kx? h߾=Ξ=Ν;#aگ&5;v=kRلI} ]y|B{/:vhߢ!!> NGpp).ꙁa9WOވ3kBa TFF *!c6ŽNsUR^[Fj8=P;vgül]ozk`QE4%I2 l~Bp2Э߸=zjl6!&& 1cP]]O.JKT/斩JQdق~/}yVV_ŷǟƫþ%(Gpzfd Bq@QbbbqI`XpC1ٳ'*+p~25fc6}ߡv.}qJVeLdz,G@}G^*|Xp8N߿sf[g(2!pEpE9kߴ/X,_,^3Db,Y3#K*&O l٬MxfӸuMB`}4E޹s}/2p:~aNSa=}/Ǿ/Ŷ5551 i]0x!&6ࢋcG;0,?^yv>׆ 7#;'jjXY9lfu݌#/2BJML^2=$Y4JJ[4;Acw6_;7bW0_E׺?B*,,Mb#u'隶Jrw1yg蟍o,HH)8/% Vv*+B3EFwO$&&s>zOAS ru,s4ԩSxks3f9sDzZsI[F,g?Fz̙Z9Sw)@KXl>UeBDDM"pyk,S3,c_S]5Nc:?iLÏe>!Vߞ9"j%rs 4Xl٘Ǟ9"jUix}\.e1$wH]n=%I@n/  g[ A I2 ,P;eY$!e!Sy%HuMi Pe}]kmyT\굤-OnuFTS.ڶCVׯό (^+#r(g; $y-=dء(B1p) $rA@lVԟq'@'"NJTB}m==#iʲ Yn"!u>ﲾ|۶աN0!{_fNi۶旟zg/XtJ~$CQ8v8HXh%;[=(AMr݄o0LbV?ߺڊAhYt`o-mP ?s8B &&Vk?>Dl5`{EQ`wԣ$;C\LOCw Yn vW-E$ d!CD@H!'a '2:$HZO?ʷ{^X4D62S%P$@֞L}uJ hͦWYNz!n2H}o< Kw&I-VEW"\p@!9 1xHJH8 A{k{H.Vs{="k_iSՐo@qS{O %wI";'6qJTS{M=Z4~$@Qp+V+dYx=z ?^R>ZubŊf'e4ڜh٬fbk xQ:5=ZŊӧP$@LuθH dBr Oo${<; ˺^$OφWz շ ]%k*[_!I $5Pj:V=-3߰9 |VC? =}E}"D3GC,C N}^K5_S Pr(1;-PW% lh'C Gm-kj٪qЧvr4߿}9Ţ Kɲ ժ!s"<=m@.@-?3xw…=*tA\CDBT-(>U( w^F=Wm~m@GuI> tnjzrPebԋԡV@P 1Ȁpl=hmU?ԡ}x,ƹ9?<9!|\}#E\i[෭zLjcA5{Br2ϾFN#Q/At?x&Ke" a6S 턀*p@X YP,# jO)& 1Xԝ P$Xd zF=rWml6SUEei"-K6BO `FR70 Ȳ˥ Yv'gϓ~PiFvZ;L`;=҂:Jl ,6|/ep8`%xaCD 'vF!-1p9I Μ9 3;&g;)9j$5>SG ɱIENDB`PK9>:*!~-Pictures/10000000000002CB0000001C9D94A0AE.pngPNG  IHDRe2sRGB7MS siCCPiccxgPi&0 Qs YT` # I+$EQW b@0;"1t_nO_U 3IJ H\앂CBc $V'5D %F$(% 4Vpt2n`<0^y,A!uH2ؐ5yB~P@<(ʁvCP)TAM/92tB,7F`̀a Xfvoc8 ΃p=| /÷X&"lFBhlG riE~"@( RB,Qڎ*BUN:P}{ < C-n`t :.G7W#); İ0fWL&)ƴa.a0,+Za4l>{ {;¾q8#3.q͸0nǫ-x.~+߀OT`E'v*q"B4'; Mr IH'HHIodٖJN##7ߋĸb;Ī:Ć^Que#%RN9KCNjk;Go?'>&@S $jz:C4hN4.-vv6IGt:@Jb`,#Q1ȘIKJl !`"L 3Y<e~+*9,(%+e+%U &5"QZII:AztL2s YKYlGr\1yydJ+s L[x2YEbbEJJvJJJ}JrʮuʃK*,\6'Ujjj꼚ZZ#u:[=VzK#HcF Kb5ɚ6)0ZlZwamXj;:NaUUxWtt3t[t'zzzzC101H4h0xlH3t756HۈcTmt5yV612>bneǤ䳩)ߴtL,ܬl`;ϛ0H8c񗥮ee֚5 k&T"JG6666lUmvZvv^,9\rD] hNNUNOUc[]L\].]=\ɻqܚܷy3_G_i]w4z)aMAAA`mBdBBB \?f6aˆe6&n)bptxPxsHȚy%ז[Ɲ*.93k[;W:56~1;DrbPb[.)<KmVؼePNr~ "`<߃ߘ nHJc|5HȰΨxyv u oV{Ng9gFes{ssvLlVwꎼS;]vEؕvAniAvMCKX>?lQ?8wʽ_ 7 ?qndSO )JF?YJ-*84c4s~y/^&\g+We|k忋H9mwI K?cOO>w2,r \@"D. r \@"]뿛 x h(aFV޶h zTXtauthorxsI-I-SOKKKJL2;IDATx]tgҨ %!DPh :(<>$bjQ= (MA"Di@$!R %͎o\;fRsw޿3_Nx 9wIO7=ʢPP@_FqA|EfsDsPs(J4(Ohޜ;vŨ([:& m@߅ ͛[ A FP1 @DHJ`),D%}6 "jQ(-נ++Q,t'4' !!\|u,hAyyA@@@@@pܰcϙl?//1(oR^>:ZBD*RlK8 -/" %)&?_Q3$ȵm=*(0 &{e_oT6PS'Csg!* ˿[&yyٳے m=zxu+ȇ5wZ5jԡCr-TQjxb-G9rŋϟv:t'ի{֭FWs8?ޡC'囵}8lذ>L.8q᧟~o1W3 &C|fdOA/Ν;ţu@//S[npd8uGw<ȫΉ-yW^5júmyB^0LSNmܸqVVXQM ]SOXW"T+5CܹQtR PF RٳgS(r|)8rQQ2 ^ll,x*0A&M7oޛoT˗/vMM9+++~iY [...ٳgOeƮN0Dׯ_!$$d֬YJgMOis=g;j#*۲eKVQ`k <r#FRmDjfl;ú9]Rd2dW_}q?hgbPo]M-`5'C__)Sdgg;Amۮ^Z[o{Ơm۶tҨ(wzTk\Ukee^?HsVLN7 ɩ[ZF !!TUa6u :]!ȯð;ݻ _pFrrrqq1gyWalڴL>,//!*W^rlݱcQx{vWW_}A9u9(ulx׮]28p?T:x SXXk9nsŘde hMPf <裈_fvԆp9wܼѣ%%%qDt-Yٳpʕ+: l_~yΜ90H^Gfƶ3MSKpjQjq XkٳexODn|B3'))IoLc(6oρ;0oRjj*[,ehV)#zN!mWӚK/ 0bt$/5<]sP6ǎlݫƒyfH<6-[65.1̞;G=`tXdf,b |ǎ.v#M1O>=;; +##ڭ 1tPaLjܹ'1 10mڴUVwK.DFٳ+#F8xda+۷;(X'ntBTXX gɒ%3gt_Y5y{<80!pak2deJz5k'Çwڡ0Q̬(9v,3g|+9jԨٳg_r z!kH!rnyq/jflwu#)rl Nf"[}z!3ݻw+%`^La%Uׁy7nd^z|HIڵ38*5`FQ_+\D_a"##+++`o嬷J۷ϛw w <[%{`yO(E tv?1n' ~m,[^Ր-ndwIIaOޭ%4iR5jiiS{-HUg8YcJLi)XGGs; [s={єGy2Ϝ;gHOg/\oܐ+50ӧgG+U p˗c]uJ0Y3sBХtѨsUUt^/#Gg.^di G;\|g)z2[a QJK v7ndrrk7Grl# @ 7ڷCCp Tx8)enޤKJB~.(`ӧJKx4Z0f? m0 *:7p{0ۨ)zyI)E@ 1GY-02<Ȝ9c8q)(oܐ%ڠCiZ ,+Q | /8/*VÈ Ep>,AhӆKJ[0 tfߘ (Iږ(*eB玊 X#FhA0 i{#,LŐ*(!*J[S8OA kXnJKbir.)4)aC'|Da;w$z' n^) IENDB`PK9>:Hk-Pictures/10000000000000860000001A5035CD76.pngPNG  IHDRIDATh[ogf/$W(%Kd+N 6K~Ew?CS@ ?cMĶdR#"eJu/sݝ>HbE&c ̒9ف%ƈ8PC%!PJ_l48355H$^l4{VlBlBK W''NgްQ _اenwb>/~M}W F;IbbrZh%{ZX&k!avA dv[=n}F^~߾9 N21~q*򏎼s:{veٳfگksݙSL(2#Q*Ix/~ym,zT"Tb*105 U|yqqɄ^ɡ6̨XTa0Մi,PE%ګ 5^5m)Lu@5fp@9j0 A(n>6:*+ۓG'L',>`XLa5XF.Oi>4ZXeIBeeGSKO@` : @5Em㚑/GGxTIȭ5˼ZNHkk6$a5;6ՃrxC0=N2gfoSh]q}E #P O 1&S^̈9uP'9_3 cKyb262{'c -0tT.M]MOO2 *BKCxrBm`?`YV._-|***B[D*B2B@ze.CC19H*:S)'7я8LL<vc;'ZJ*"+dlY$]hb8|ό Sh,'xr^[WGN7 | Po\4Th*4 5 7.UHmF] #9=8䪮hI]+殯$#Tp7Q!W{lSvUHk!b `^mt\d]oPw^k4 zP$/5W9Drל,D(Ȅdkgdv}I?%p Hr2'l-d6zݚ+̉nr#8\=:5L.HLMMmo(H%ɴ)'#%膹%ν{e|\C$QRyc,_[ß\_ Esc"叻CVئú==4Iɸ-nqlϫIF( AVk.dAQf[ak<3KaW JJ{eO~J@=ckCTz%>k|ɥ]ϸ d?_\$޾>VL#cí2Ө}I9¸` :ڶ@Q0g?S _Mum΍rgb=혐0X13st=QJw{Co=xRB@׉tYH}u7qXQ.^B~^ɖKe0-7o:`G-Pictures/10000201000000FA000000479E5A79BA.pngPNG  IHDRG.ZsRGB7MS tiCCPiccxgPi CD HIdQ20$L "AD\]"QP ."**}xWO?UOU x"')6 sg2c $x'5D %F$48~FoQy_|t VC 4 T&F X[܁7!`#X ] pTZ@+8:yp\]0/w[,_ @QFt6x#H4G#H9R"H?r sEC1Q(K+*APUTj5&:h :DэvUz 00,dc01mK!$f`uVXol6 Ğ^cqD pr\37-x 7ߊ/7wS%E" VU8 HT!}qĝ iuJ&9H}K7d2YlK%WOhbzbnb\bbbb(x:ŎE)ܡ̉5#ķW_IJxK$II4KܐbT'*G=FB!4UCMk]M1tݍO/LKR%%%HVK^0Í(fa2>J)HIEIjZ.n(ÔqI/)D%-+){D]R#W wF<,-'-L~@~AAQE!YRœ"CV1^LGqVdTtQSiLdV0ʮuʃK*,\6'Ujjj꼚ZZ#u:[=VzK#HcF Kb5ɚ6)0ZlZwamXj;:NaUUxWtt3t[t'zzzzC101H4h0xlH5t756HۈcTmt5yV612>bfeǤ䳩)ߴtL,ܬlMg;ϛ0H8c񗥮ee֚5 k&T"Lpezg\Fi;-xSv .9".NT**1-.&..\Ѯ]8nMnf)>b|}|}۴y;{b Ǡ A~[!!q!]ЅN 3 ڰeÍ7^Dl8:<(9SwD}B[dM<ǁsk-FYEFMG[EFX-s{_p"a91(- tG%6+n޲y(Y'9?Ybr0eoLR7vW>?OdXgTg ?lQ?8wʽ_ 7 ?qndSO )JF?Y*QU:y@GMo"J?$T,T[5Rm_V#_f0# }PRQQ_~ s,MONNk2kjjo.n[[fO]umt2zLY_it@[;;c;]!]Cv[vۉ/H^(!,_̺p)˓z_ rϷoל]x7dezcdA;fwZ33l3|kY;240`,lL`a׏2-=9/x"ߵ~o .L8N <[$g|{N~^>44c4s~y/^&\SϚW~ys--yCǠK*>k}e|9iyY"D. r \@"D. r 7+A˱1 @eP7(m zTXtauthorxsI-I-SOKKKJL2; $IDATxgh_OLbO-&QnTTAػ QƂ(**T$hlXbow5{y繼w>?vs=n晠,BxIHH佴$55!ӧWutz^B::!ttBBG/**T()ߙ66UG5J֭+UV^zɁ0ٹi:رc%&&F^*^ˆ ؿ}N xϝ;'s̑ڵkKr[ntzf$<<\:u BwINN:uejhѢܾ}[?}T*V(/^P؏L8QjԨ! 4yITTT^]˗/NQC2dԪUKZ 7oFCIw5ظq8m76UGo۶,X@=zT{9t.ΤIY~\vMu… ձ>}:RAN ;&}u|XΞ=wN ,Y0O+˃$ìό*UÇWqt\۷ovz sf7"""ݻ 3uCjۼƞ={\>oS8m\pmvaFNl=j֬3HcŊƝ;wZ_im>Nt\rE/.GvzR# R߿;_~-5rlc@UOV؏@ذaC6 NuQ*W,*UR5s~Ϟ=Ch}v5tY4i"6k-Z$Eu5僱5ңKv-+yR|Bfftϟ?  0\W!l׮]3YnL:կ'h޳:AĉjݻwrJiժǟ̙3U42c :txBBI~1 0 &gV5DV&L&|R, 1s1 ΨahyO7nܼyS~)uڀlYFFѵkWüFxxrrr:}aFXXZ}8j7Lvvvڶ_|Ì9Ƞk[q3樣P#..زexZZasNٹsaFppe\hMf]߼yaH&5w5:m{6` |)ޢ'"vN?= !ttBBG' !ttBBG'NB: pmQ|GJqAN6me˖E+AMm;:6Pc!0BPlٲOmtvvt@ K~~1\ _˥G]ZG`]e7nPǠ! 2]t $B>HuV3f[º_~)H%fQ2GqqqNRMXUNzvI߁:4𴖑#GJFFڧYx 4]PV@*,,LI:k FyNzvIlJ="9QׯQVMCu hh*֠PXց#""B޿O/-狎V};o۶MVZ?ؠ q;:/J=MC36mRzv8Ri%ě #Up*D^붢v )@D=m` r˞ Ceeeڵk1x: J7~cZYl3t;1Ç*XHHZ#M* uu46:*c6<wIQʪ mvH9.GM M؈,e˖I޽գA88Wuku=2&È Ե:Q3*lT> <h5=އـG FᨇGܱccOIIQ}A*JV`NuNzUvtt7u : ΎYskh(woDjtFo jA=] +E ]d r;Rl̫tA4ӦM.]7<혷+څ^Sqɓ'?ҥK> >iݺR}i?lORw@099Ydҥcv2{K5E?A+zm֟lx (Nrl캓 .}:CFc'NP6::.Ry̮t/Ktvrvޔ wq}yyyNzlv2vҽ .} ֪r'm'M虙jRNc'k'KF9hܶ7eKHꎈșRT1;];^0a h-mIxS68:\OlT?hdv{)\ѿc)qƍܶ7e ==` B::!NB,wY">>^D?g/7 `6IENDB`PK9>:9\ S88-Pictures/10000201000002160000022C197F3884.pngPNG  IHDR,sRGB7MS tiCCPiccxgPi CD HIdQ20$L "AD\]"QP ."**7}y>?UoU x"')6 sg2c Nj'J/z7 =?ύJ9Mȱ$J>™i v2/@!p7N\okb2 G~e}kk3E$jv^b+<2=.1M7?ʼ|7V_bT|6 HL0t|"YSN:?[ZYЀ(d 4.0f'?Ă$  ԂZ ΃x ;A"C4HR!bC֐ A!P8t( BPT5A@ hzM@GI0V5`} ?S,8W) ߂G`^@BD2 E>)@ʑzF{C>0(EY\Q(*UBDuPPy4-A[t&:]nDGSw aa0L<&S9i\ a&1 X,Vzc#i|l%"v;}#pF8g\(ŕq=a4n /W[\V|1ߍ/$,OE  oD ќK#$VO'HT6ɁFJ'# ]"=$!d[r(9DB~J~/Fs{ES)v,J9,eN/! !]ZMP["IHY Kՠ:Q<1$ hnZ*mnxz!g }^*i,(EZ򂤀04nDF1 cQJAN*JjT԰ԢtttGL~N'(YmY_L#Werr3raymy?lc . We=J4%k82J/L;f"ǜWWvUNWST^Ra䪴aQ>30--[:u<Qٕ3n[vh{;vLtyraW®۹owSۙ7-b={jD{+~),4(,/T)O?-7XlZ|S+odDiVe̲7Qn\^{p(³RSUlH}u[|ޚGl*~<wAK]GF}1̱c7566~>;!8wɬYnIo=vώ?wֵ1 O_3gg[U^ultt s?mo'+ yГ׳|1¥Ksc.On}|%>߾W_sv߮uoX8w}魎&M;k~{hPϰ{wkdh胱1_?xx8zOM`*081lݳǓɗi*9ytӌYٻ/ֿzri.O?k^i/ۿ^_/]F͉o{|KzX^>N/e~~Ǘe \@"D. r \@"D._ YY m*ЈHJr zTXtauthorxsI-I-SOKKKJL2; IDATx]Ŷ=3a%$I*C`DI*oVL_|**<@Q$w qf~g{gv6߃tuO{J"ڹ==tݜ`0 >f̘AV@sC=Ti9NΦsҔ)S($$$I*дN:sq-I7ߜ'6ҥMV iB; K~<_zlځA=(ָ&5Gy^7|x0{ .%P];>uA@M]V'].M0#NMB?lgdtʕ/O`&>v`E1ac*KO +D %8Zjz"fޝSj4u\j2M$ _OleWԝ 7{|)_sP#׬ޥ}KT[;%iAߏM!]>#f#; K8L8P~S߹_V'L|M0r!7pJ!9tL*vlJ,vEeQ ݙPǷu6 OOOy!ڷ57)ßIϖːXJ%|Ոu QTAڬd&si8ȭq&r ($IG| E.J~NI57ȅd0.4FpBXXt}h5=zW\";^ieX磓QRȒ`ѽ;]b!ys&PNN#ϼɀͦ"K9>IɫOQ r7lejE "#i?;oM6pzU\N11ٻロ^zgirMzKzAi݆=>.ìP#Z,sדQJT7~W^˗/ 2}46[Z+Lf57ލߗ X֫)Y (DgdF'$YlW "ͱVnG0 wx)%X>%o_Z 6ǻMKSK`7_ĢWUV;^zίXgx/֮]|f⿌cGT:ѹs䈎꯿3Ah^-jP]9sRB~S֭[SJ… BS8fE|ͷjg}{g*WL/7*gYV?JvQꔩȅMK~٬Ļ,|qzY4uE,+~ $\"SH&@%{H?DN/oF/uݻ rRlٜZI'M8mKʩS!p֮MSI e:Cjr$ٳ)ĒI!Q{n" M(&6 &-4zۧ(؊,^MAr-*J}A6t[/-=ӗ҄VTc- }D~s̐ZZa˗K}dY,h?h\MvLglz/OF.SȉD۷ baU*VJ 7t骅ʇSu5կD<0Doݺ5Ogi&QfMb?^}UA@F%H;y<GiLB`{W3LBvF?1<ʄ:XbSLMK.(=\3G1w TzuzGDaB=N,T,Vh*S7KΫcFZ%[,˱W$'IP#S5YΗy,zI9u:K8}S Nz=Iq;N`N7չߗZiu߿g!?5護ZM3e9*--U}oHyFŝgΜGh>]+.N<irrP;i)^^fi,*o"VfّSO ̰i,ڷ'jWd$E#F*C(<:lv C\[Uhڵb2MO'mMvGz=$ ݙ{!j>GQ˼3m|r 6>ʝZ)FrZ޹؍R3x`x~u '%h%7H&f V?K.uא!C3g!W{OZ Uufdd\Iw yd/p9*=yz3%$_TYE#hhrʌ\@H @VBu_}> ZXdy1E,Dɺv%~Bi#HINl{:=qSЕ0jzya G]7 3͛wߥ 5iСԱcGр{=aB>|0m@S8Eaau?t{}UhGVY\,sy|`TN2݀&t .ݭVs)R̆)I 2T:r§Dy*+DW9Nğ!'& G&\JcGpѽ]k͵WJS?6|4~Cy8>2-Tb$%>zՠ:%H{a]{AAwe3@3<,N1H K~SAhEMlh<V=\ufu mظ>"j;{3o@ Z{r SG233B 0~h,` ɝNS:jX/V$, s2Ђ0HxQӠ~%?:SC5u [Ci<9\:Zk}oGJWt.y4_$mMRGHSG]eQBv &i.Y~- noFp[<ִL2ǔ4<4M,:tlNU:fhX 9 rn,_X@ u\N/B+zs y*ԑ+TSJų Ɋh[.}3C6tFHR*gfTAX3 lFGAv1R}fHa Oz T? T% ?ğ~(}F MH4@SR&xfǒ= +0I; 6?U60+_vAa0ҞVϑ:O*̇wgo]96_vVzknth./~UMͶk &MȊ| km7 ^sWYAoifU1s=Kß 򣰅ca qԤŒs_!9!a_⧐o/ M>L7 vN7Mux.]w9sL3Y\*r(ߚ=E2;|xb?`0 гwO5r ^`0 2?ڸZ `K&Y `&ґ9B `G0Ԏ'k, `#cQq&d9%[wpE0R T3WD k)`([Z1(|rRv;̕`0JyiB'X0 `0̃5 `09  0 "GCQ~ ă{CI&J(_C3`qPKOOzDAkmS[.CCCoԝ )ڑB 3xh,o.]j*jҤ   -F0EBB-\P5mF֭D{tYq~֭bd9g8_z% p9syh߾}믿Μ9P)дiS֭{ D?`0̨6m49r$]po[}Qy ҥK❵h"AJA۵k_ b6l{GyD>vi^G 1Ix'inM  `0qS;rĉu#u!F:t6r}޽b+W }u,B ̖-[$`7H˅B+oFBog!А/%#Gмt(s079u,Zh:wL{dEQs(?48F1ݺzxLiiGʕ+'HZ֭5C+qFQʃ>("Ш)>UQru,RsNRӌ\>z9qM7͏㚑 T ettզ5ԩSnp86:߿?M`GNZ65k ^z\wuBxIDݷz_3> xׄfZO>$P$B|u҅n6u_OLǎ)$$$.F?y?Mb`0 i'Tmr^&4zyJ錂fAxz)| Λ F;o<>vӃpFY0Y>1ۏ`0%nbN,050 F`n(fݔP_`0! `0 \ظJ.*[Ҁ5``F6FсEF~o2ʧ IDAT`0fmƒXc(w &L.#d0 F> `0X0 0`b`0 #X2 (@Ƃ`0 F`X0(fl`0 6- K\w 1.ˤqe0b/g aq+* Ƣ bQjjW(6H_w\EE&o`0U$IKܟ1`Ly Q"~Eq!5QV?խAGf0~X HY!㨨(ر#͛7Ox IIIB?ϑAZHmӎfzի3*M/8p(Qں^& -ӻڵkN֍`J}ZxEFFRhBH*+F 6mJ+W T`۷/ٳGn֬^#GP6m&8}EzzN@H+!m U0Ot};}qeu}֭߿t?CxryhDDDҍдR AOfggNv;R^}s?S 1.M\6o{]}Ե}T7^&(=4t0m Fê+AL<}>';;~a 6+pO{HX<;X@0+Yvmos8-[WVK"""(''ǯ|'}ԩlY: ٻ2.6%}*)͛~yP]}>,<KT+7tGzzva~oÅѣG&$8p[/\kuϩ7$F/z}|h:ra\s{sK.0wsԣg/sEЉ,֭[7P Uv($$$_iBȪjժE}!(űj*뮻Ĭ57D'f9z/֬0t j۶ǹog\s?Ōw&Bm9pP ɇC8oNἹj"<^ھ}{gA{ Oŗ_|NN?_*[zг5YP;oJczHP7 SLkbdee{ #qLetQ-`ߥKbϢ_ Ѥ'Hob0 dwOHY m۶GB <{(W>B!olٌ, =3a0i%~% r yRcctUϢ?f0'oBVۦ FqL,%؅v7_P2 FAfF] d#۶^v.ĢX0 "`Ɣ_(h38 `ir!`0 W`0 & `0X0 `b`0 avd0 4ft3 `"y`0 `0` & `0O2|,e۷o,Zj%`0z$N ;v_ybK,bcc)))_*;(pV cQơln& >(~I\S(|`0J;$(@,v9h9m`k,XXt҅-[?PF4Gׯ_̚5K<[F 1b̤'|j֬I7W_}psu׉gF-P_7yTbEw0թSGqy%(K[@J˟7jw_bKh=.fL,͚&y1C>}{'իW믿v*g%ãï["(|A}?N/ju<_vmoHoxǹeQ71Zߞ"tf'{"""<5S.=S`m&}L .yQttzuޝ;FUK`b4Sp-[6FvyP;yVVMaHHH#JŜ}qo8qT~\W?}ʕ=C%5Jh2P<lb_R`(m&ڕu0QFuִtRZ`_SA,Ny?ؼy4ac9d$۶bf>|贏=*F8{)sh`6r?”)S{y?K/G4i 0}eBӠ v{h@Z+X3J^{M hƏWF;, |32&Zj0au]bV?op8T&gP)Loŕ+d )hd4$ $ sKmIFLBr\dDdq{AɲgYrVH))[7re RȺy ~-d(jQ*9˗ǮX2C r,A9D˴%+"1p#5E&?\e{,p =~,rRR\3O@@4VFsu됽KۇmE6`0]5 A- S'2,II$ 'I̼Rpd''Bj "RU&-FCrY`9|Ǐe>=*$ëNgga9JPNvurtҦ0 k)nڊ2t'l?rh$ do֌r{NlژqqDY\mIݺdG] (\nɓdٵK.v;sa:33_VSNcsS7n? I/S`b-<[~YϞվ >*^~9Z2ood~DS9sd9pl~%_z0Y.s1$5?3Qأ'`0B֢"3Aa_YVfMb8ʄ,pE(^'OQPBB" '/х+< F@Æ Mx8›H!%BZFaA<ߵh 6TSxt]:t?IQΪ$ZEݻ\rP!K_NgPAܾ ᫯ %%2(f F)DF|b$$z rӕA)ר2`:uF>B֞)=je$v`JϠԴw\ FUQ+y h)՞=)1ӸmUq6ʩSr;},JV+RƝݹ|@5i/\Ye-[)|0AE*R1qӟQHqT`LsSƍ(f" 9wM. œS2eؚ+'p1`:1ޠ>xmirdfX E5񳅪2>WJAǎEȑ0o>9*W`ƢԾXb\DEEQǎi޼y+7?q&%%F`_lNM=֧WJS&$$>`ϑAZq9vZ7<7ldHmӎfzիjѴS](QYϒ ۿkJjMwJՋ{#pwĢh,!@o5~|WP,2S`|}AYrI$p9}}]˾iF)yIJJƎy]T_eX)(d~ym,#~=]ǝ}R pSk,J=+J*ф hdyT1w!L;v,թSGqƉsZ,g͚E55jЈ#(-횧pvv6M:UhH_}i&Ը, _i_xQ+u]G5k֤ѣG{(EakQewX$*UՎjS֏;Եs;jԠr6g,jצnՌޓyѼ R_'G}h^WA\zz:=8y#ؾ׽?nuԧ]gߞ$-y@ʪWZC"I&Ł߽rߨuTJ{ƍaօ ^0W'/d9tP\ Px=Aqѷ+V<?ܹ3/Z }p dKBM4ռNeyB@+W@[آ(4TT9^0jsO>gTI7nC -LW/.ܪO?B[)?g \ >J&5jcg,bIL ({2h%L, AnH|,Pzu0+lU ՀfSNƂGjty զMZb^_ރԭ[Z y- gZ2!rkTk d>miUT W[3>Gs.hFQ^]tjԨ]V磣+ݞ7aکjjvGGs`L,R<~wVt"o$b/0?~8կ?v옇FCjժя?(|B|'&OLkצv uO8^kQ޾9r`C-{nSɻS#3O8&zyןԫQwد[e~E~g\UzJSNޱ9sv`{*/Xʪ['hU2G,| A_ѬIWeQBxR&Z I&р4>|pHfi`MVZQ\\$nր:A^kttܙZh!fQ^Z(w/r*3@پ_[iyT_߬akֈOP{]̬^v?RvC:y\=fEuqݨ_{l%HV\FeDTBK$ڔn7g? ijBJ)׍]ZvSq@7|Sh_ )E%K^JZii1i [)# IDATu_V~+8RT,#c5l*q՜?BO0\ޝLA`0ԣg?aÆqE<­<:x-sN(h`+3n|MoKG ̱cȶ{7Yf9vn]-eե {j @>$edjyt\vfoXe?T>{͋ šC)|4Vއt$^ k'~8V KUkYUЅ&M又6I./]_2;D53ΖWIEsE4;?"5%zorz$x9RR\ӚF"vM}nlRJ0?O鈠n5U\O$q=bE0t(]1Քg0)ěŢ!fĂQJ!쇆 7,'N<|zbez({wʪSGhrԭMedL0Ό ڿZmՆ Ɏ<,]?Y#kUuEBbg^愆RJtjJiҥ,a҂L/mA]ۈMrC wjL,:Z-wDW_[LaGٟ~Fq4z~.љzt~=T&e]'ORǨډT*U'j-EZhwc+٥ R6юܨ "6 B(LRRŦ'k,jS2M!MȲ#I #s jr?@GcNrԎ#{Vө[ gd.aڌWI:sMd۰,2$$*]FʔݭPmQrܐ F2 ʇts4˕/Ģ_Joߎ,6Qo\B<\s"ضI5k#>uj`oT@dD8h23I@#GnKSd9Ar99X/5doBLe0 X8)55M̦0Ă eqĐ{wJ&K_.իɂMֲssGۀAj*Y? a*'H^=rʣ{B#JQ"9E3"Hf򹊱uY4a#4)1ȒBFERrrkϔ,aպŪ2rVJ9]:S!h5S QM>S3|ty s;ց"`XL䢌Ar5l# d=rc& ň?C@j@. -gh F9ȣ~gEl@ubU&s{NܤcW1^J gF:I9v\qMbr99p0ӊ'.͚RNd 9GD ȅܿ_x p'r  ѣ YFڰeh>eFk;6m&[I:A&.AbX_W S5|uw!usMfw?)M >hQb+R )޹T2 Cտ ߊ A$0TYƒXUcQQ9Z!{?rY6o!ێ$?Agr:_|7 D+sk\DZu7ިٱ|d`0 " BM,Z F` :uDȹw 1QM=d.'LBEZiaNoV-JN@ʭ:en gQ5kv7mr0Z`04:)o)22Rp6 !.*SH ]of #t:Y ID.IW2d~$$=+bE~ "f'COgtˡR>献@9gdqVD\ϲ%PH#ȅ==fhmUos D-A0>Wd,d^>(,2 Ƞ+W(j:feM&9K)\e\C.p(`G@7h01M}t VIb尩rN L,h߾=W(زeѶzЯ_pPCb\\G%z7O)(s\ Tq'."p( ?n xv#!!RRRE8{3 șXN `(nbR# yJ`0  O}3Br7"""M, h*@`bf ~_\S;*ӭ P8_#0@cA*u88p`g `L ;w4]8 8N"& Ar*Oș3gx5bM":/¬,aǎԲeK5jTaa;*,_~;R߾}iE+WR޽=Tr4z;>Hx8KՉxG6m$SHJh„ {noA͛7+رcN:"7Nţ!͚55jD5jԠ#Fxd:uOGF G)S… 5U`Lx!/ sxjժQ୷=Hs@,C@}zy`ժU9{嗩vn/3~xByH3>Ќ_ɓ' pРA|XXy+?:jժ ['4nb42Ubx=U_>15{zǕ+Wӧ{f f6-2Fiy9"2ѣ]mF4jFubTfzAS&oҥmI&$p\@orD;E[v 8](&`(2۶mu f̞=Ξ=+oݺU09shK/ M?xfΜ>o<ڷo>dZEo޼YwyG3CHWoF[H *J]6l |=KiDPPg8qB ϣSsݺu3g+ֵ6{g믿hu1c4oxeܹޑ4\f&NX(y+'r𞒓رc">q >(6*i&SҥKhѢ`H µUVmDӧ8Np?=Q>|ڨQ[Z9]vTO>Iw 5EgQPV$UnHN \W_}z &ڡC1bVݻW[e*&Z  C3El2w|!߿_Y|k͈ThU44ʈ_}VyG3>rtP,1 ͉Q?CA$\ 0^]i ~9a`dԪUKtLJ]sF"_~OzAk֬G:Ff5I:XB/Zy(n͚5nA߹s  Xbذa1?Y[P>`0-ރDȲMXल_YG93>j! @`+ F+6Ie:Opqh111<upv+VF9yDC_P:L}PVpx y^˧RwZG5z)avyz_WDZ"[G h?b xbA~}EQ3#]2@Q@Zfڈhy,J-d}-|Q:~14o AFu4z #qVO75|ED_PNM! Pʨ Vf j0{LiO"y~mV{9E,дq}~v0K,@&` QbvXxk(qpBX9h֠9r$}G4B8 oVC| 0rH`џVs2Z_ ׿Dgi^s ,|p2Ũ6*ruG1$td<.Tpn+y H~+l.]] .D·.- g#P_, 3106 zB?2m3Zg~?3O*.lN P_~7Mf$ GqΛh|z_|QhvhRVq2d],M6mQV(Ny1 NL0Y/nZe`5`yt/Qv{uYMD`1flR( `z0Uz4N3S`+EG@(OEZZm0U; *o(iZe((-ΛF uM eqMfFQXr5 p;`F) !Fz@FJ7 SU@g=JqF0Pu^ZYYz2S.RES적"Gcq F}/5Q&oI3X_RLWȅ2eU`02&X\+BN e?& `nQ;3(-[?`W`F ނE^BEg`0JˀɌFpLo; &Ƒ`0|Amv`A,en E `"<׀dB #ZsĂ`0e\6Pzyo4T`0f\&`0섮PBXc`0 4`0 6Z 6-`0 eMeF7XcQƁ:`0J.P ab ۷`0ئ`rQpBq_e +&;w`00(XxO;e `08lD[zo`0 =(efb.~5`0 aJjrrQ 3Dc~aZ$}wj%7|a[P Q h0 _D7n'N9s; <8HJJ*J[ }blFc0G,CEDX[yο-f͢FQ5hĈ x7yTbEq~N:QժUEkj233iرTNƍ'Ω]dqtMk.yiܹy(3f|_`05FQXl%''sK/ю;hݺutA 3gzım6q=11Q~htIZz5mݺU3ٳgٳgԩS4g{FÚ5kرcԻwoA|iӦԭ[7zNSnF{3f`0 8Ȅb A ja^^R%!վ8ӧyϧ5kRrXrG̕+Wv8<%$$P\\꫚iW /P*UFb޼y-H! wiJB H7o`0 (>ABcrO>aqŋW^7L?xkxݿqZcaWaذa/Rxꩧ1 X""W\+$ׯ_ZlI|hժ8TV~G50֭[ҥKE\=z4߿?}?~ܝjG~OFUhi7!o W7Z e )DM!c 8VN8;=zTh #|/|A$S2 4&M`8q"=s~SQ},+dBM*xZ)`](ߐ! s@VofgIB',FIz:jժ%|2~mO.p @+2mڴU!*4K2f3^ς`0J7@$MB1Hk׮ua5mЕ>|)b)my2QL`Ehh̙3B jة5ՍxźڵkG]tg0 BN+Λ1OOkJ y`0J!B$\TۦŮ `-bSVoetu, `0\sX)Cc69(@#4t"]sU밻a\%r}pU\|f9\9]1*2+.xBl{B]Xr)_+`0!ଉ饘z9q=},e 6-[@NpRRH,+WH4$%ʤA{d AMtu=T\jLIHHΖwd_ʱHݑ:| (+"ną!!T- qMŕqL&TH3<uPd\ IoAjpFfoc@ 80֞,e&eXaTUvtL"\S\r2ǡeeSܠ*$ [Nv8$AUPD/lrpc2 LFdfGPz( yVx8UCʈ2 Fi0)}40{`"L,,PfRb"IΓ)>MRR2+$Y9f )C ch p:%o$ۚkt!(=CF&NP8eA2pTB5<,9pM&5Y69W'gX`0tH˗P2`<`ZHJ"s.qY".' rafm y5]hCBHu|PXZea^q qb>Q+(xII_զx`.+0ƐreXT$L>hԐu뒣Fu`i(V1^#R)!%'r8Yea9q\&2v"!Q:C4yN IDATWt2&KvcE)Wtr\y÷ChfPG nye 0QdWD9@8YV )WN&)L8ja#r4Eׅ’sQdTD$@dQAA% bV~HQrFr93gg'l>>t]u֭jq,<~ L o>nI"$P`>Dڵzm;sZI1xzW! FAM PȑU.P@ նU3U :j""&"4Ap#0!ji0Da^))ڃс\ϻPa_MvϞs-SB&N.7#Y6}FHǎכX0/A|(!ukKBz([و櫅,,!$(z_طm+žeD-}~츫E(MlFPޅY @ȑC$),N_zp'\ /[fFv혜_Mob7Zb8NŰ؎.5$-B"@ EQǎ`JYN |YI(_AVGZR[aHbBgOdNDk7n[$z:m~*l(st'nur-%Up xD6"r=?X `_L%J~۠CS'~&BT0-Ƒ F^qj߶Fil8!p_˖uqc IDBM$BsǞXtNTcAWVDD>_ۉbCo 3xH,TlB@R8h"&g2TA sbKB%0;ľs5`;v„+H0p@+IѣϿ.S$фFf^Mt ҥKelj9V#oMG$蹱fDHw[D" bE]5R (RX;*&(ԠMi#xL5.8|rطow9rDlJ֭8,]݈} ?^yb%H]wH\{%F tqe(IAQѱswgMU} Л@Ih gI%cErr.~9U JʉbJ7>z5 )UBdq8|X/4IsnuX_&Q{] }.U*ɞnZ~Ǩ$Sm':h:m}k3DN.6(,2!$ْRA8%.w.+P@-* k(WJy$F[_\ۮ8͚9'ΞSH$M{Ĝ:%1Vx3ͱkؿ_^+gדUР$$mft2П}G<"J}*Yߝ y^ujiSZdZEr+&9"# kL4!֋,]&J`]jYN%َl?"E5+}{t(!Ao3jXnhхc,2܆;g 1!hr4Z toK \WRd"}]_5Ӂ",^*ڵIk.),2 .I(Q'd pRM7i/"M*HdA`&'iXQ#M<mծy&ٸQCEm$E O7z,>7dzPGmZBɪ M;>e8t>O9ۦzHʮ,NgܹsO>rQP҂(]ZK'4iW_|Ⱦ}%\w$R%'az,=E9y|?L|j]0 ÇKlٲRhQ{_ R")d6Sb'!*g_\{e^gEj0r%-Z/YxNםw)7o/,|MD^&ܑF۠[Ϙ1#q`qS1D%L {]|ȼzs)66+GB8Rt~q`ԩ+WNEݻW,f x%-/<Ä./{U.7EN,0޽[ի'?x(c_:p4mTx K}zgyܸq)@,"sg|kӜl5jQT`hK̐kww m СC=jje/_gyFPqS%KS]yQ^֍q*dϞ]}Q9AzӍq ]vI۶mUe˖r,zׯ*TH7|#sڵJnݺek8q*U: w>GN&M>sR%@Oi)RJ>ĉ61ԃѫԯ)i3|pp9n {$ҥL4ɝcs= ^X\(}МAҺuk6Zjնf3Fn*/uɡC?S}[ތK-[ q 7z9҂Ȱo٪Q6; Ke&pA È# gϪ{E){æ*1QF-WcԨQ^^ZQd˖M Ng۴i)G5 aÆɦMd͚5kZc!C}vۧȊ+T^]-\{0vnР% կ J l!Mlꫯ= :tMJ\Xh"}r/VD, =豀lxi/3/w'6xy%+^"i͜9S+:_/>Tx FmR/mҥ=<F9 ]\Pm(Kp,[lQ5@k*_߹sl"V6uW۵+fx| tΜ9E뭷8j 4 4. nCKKɓnѥKT5]3HbŔC-(@щ+Fp.CMó`2{.a{ .7o$1 .`̙݊S u1-hByճ ocvXX׽~7kL/ T./ty)DZ˒X z s|pРA~Nb[㨛Edp~Ԭ*w[W3^(xr'XtP32$D =Q tѽLY?;2 3ʔ)ۯWFS˫lbU+8" v ^.}{‚ >< 6D$\tPҸ ƍ#m`q{2#ŋڭQgxm0z`HϞ=eȑcShߺ \Q᱀p w8!a#c,BPo}, <7 `hOwozMp'GW vvc4~}5X:H7ڍ:5ő;uQzĪ 2Q{ Fhp\BM{U,j8 c(g(pf<#*fۡy'q<Ըmpc_K. oՎ>ߖlg?Y-xHҪK/8˗l4+ |/P+kBR T8D 9Ƹ36k7aڏ1E9(քо}{. 5xNnFz(< Ă& >upU9fޖ"V-fEԁW_/E&hn0a(wb /ۆ޵p@U~𜡹 m\(8'1`@$jh8s׽.o޼m۶$P. cG\$y\A -h;{ܬC 'NʩSwC@ўJNёXwU4B4MܹrMH7Dܾx"X /`[TbB6 x68y-Fȿz+T5vMYTenݺCzbt1yIpnb|EbǎW{~d~҄ӅCG4EGT{]\w}ǛI h`\;D]dWwpҒكDa!V3@®?z\xAbciˋ AHsO/q-*NJ}>->-J"ujn%4G4 p9 yu]$cQMFK\މ+\f/J5EGG]Ȕj (p:c$4ȑ=AxX‚/֑SHKi3~ؼ,tn*ڹ~}7@Lu̡3+~bu\41:^+"rVKH@E %q5 LYkzH|$sO?K.(LuϿ_\]C-+DA7nYuB!DGe b~^IeNeGry(YWD_(7i"zt}/ţ~с$ɉǟġ R%š,Vz%Z5q aC-aJ{qohr3}9i/$G|P\kT[A!Iʃ!fp.8),xmIZfd.:uˬ PjRA_nVyD%$$)lB#J+WIc%t-\H#rsZqH'MG:'5y9qBrish!R@Y4aU $C g }*hra!*sdvʖH̽-\RGI*BoHc`>&:SM<@Ƶ˵]b߼E׭~`rq._N  ƅdGV7qf*Μ9Y$*%N֊gB(QXk "8B'IM[.& cb;tXGh~(M\N&mxhڑ7jpT& UHBꮦ<6JR2@I|/+^zCB+8jTSvطn;DƖmcwjz׮-x:Ԅw׈^U+ܹĩ gX|E%PaM|\ )ZD-S]a *tBD!i~v Җ>O)oZKU{@HbP8jhbA}MXTVyMa$` NKPC_MaAey%ᖛ8;%j*ڰQ+jI5xmOp$Uca 0Ĉ3KQKl%KVq˫UJ`^481`&Tߙ?+_D/X&*./k|IͻDW_mѧ5w:I!78%T(zu%re1>G$$ oCz SWM#Gž˛j̧r?j6x+Ph (>k|Yפ ' @4^9\"D/c9ڔK[=ކ]9lUL @kC[Mm's_,vwڴQ}651p+-ס/kb%mK2m_\MGS-HjPDIwH<ɺP6˥ 9^;dU$//ʕ$Dqq)#N?? FHf5E⋘ !Pզ:w4s-GA&;]jOϞjWU Kr鱍0#$bO!tJeמC4!)JL A J\s4Ef,={_: )W|if'8&W,_c>mES6;}|0k|74lg;EB|Shˆ̚.@*U(۷Gu 5k ժN'{'I7KeM{d -4Ws?1=d<ʕ2hRf5 ZtY޼yd~h%}ӧMԒWWqFһsr9b@ &"9QX9aAQYP&ڵkm[ҡCgղgA IDAT|j)W9c^.sFV wu <Jd-g_5M<ثLf89z`6O9tL|k|DfN)ߑ*U eeJTM8&ƍ1a2nhb@ &"\4 , ((*2(b!/_~]nd͚Ur)},K,g7p"M:u*7mr*ǎ'OHbdĨriiBUɟ?(P@ E"f\H֯[+ߜ׎V7(q=&lw˹2RHQɞ=Rן33pHyB# IFMPkV ͛KʸMyZ7BKgTyo;;$W\l$r/CWd)|RR"No;(;ZI_%cGHwa}@6 t`mB"<4(,HXȼȼm٧w?`ָ$\xQԫiQFyj~?edي$ۅ{ ʁtd۫E*[Iq=~,XȽP2w ,1 (iz,''1OLlyɪMYdꐁ1.{o/پ}\' Z^'WܲsNiѲ8~BM#G H:gu=BN8QސV۸׷ofAw^[J>=3ӟMP㸁9Y(,҈ǂcAc2v)\D:t"?rwJibaaطL t#K.;߻w?-i^իoJ֭'ڴPxOB><+fNNTqH_{}lVyB E9'MsٳgJ9s=&Ν1H]L7lNCc/ҡC#mk&~GEmfD2J^f>&)wGS EZ "?|IP16B;B&d Ѽ1 f-`H!2DE@aX *|Bco TXQ W!AZ\HMAy"!d n#ɇz,(*2CH!$XQK7B [d ~ݔB! Be|u=B¸n\Ho!BB:Vɸ,]TvACB2n_7n d"Y%᷅7)*2[i BHn?"F4!B,K+)*!H*,=*7%;w-Z}~|]NC}a_("2#%Jڵkl?H5$k֬?_o'Ov]M/-իW=ETeժUi.tUy9w+V9x4l%{LЗ{o7{lY.\Xnvٰa{ ޽{KҥԧOx{OW.gŋKϞ=_7xý.!!AQG{XݺuRBo~cg̘12j(%|#Fz?EOq>еǘ:u-[Vd"uI7n)RDr!:uȓv풶mJ\$66VZl)ǎs~IBT}7=?`9s&3.!$IFX/y#< Ov`|_U#[VAÇUyʕr9rXʩS| >,[=v^z=zTe&w _תUK+ .to`u!6AZj zZb6עh"uL_u~J޽[W_ukӦXp:Æ M6ɚ5kVOÕB!!.lK_ oU^ {gsޢzt1pe8~ZjSG `,7o˖-*8:s1BW.jc?&D#G|øSLQA6mT$lTTϴz{ʵ xT09 ̀ŻM4kh0I[ңG%`pܳgz<8?tРA ϣw !$6da_?쎑'}WjeqZ] q0<*/RL PV= :(q&O^׽{wUܹSȈ/ׁضmc3fPMq B 4H k׮);x$1+ oyo߾mb.|YV9sFox oO !$pzooB֛C~mU{D;=ܣzx˴YfA(_n]57d=zԫWO,Y nHЁ;PyKjl_B  x&M>}zPI BMs Phtf͚@5jkbׁ&}:ɔ$qInݺ-[67o\pA?y駥gϞ/`$jذyBɈ}\,ܗ.j&Le˪HݟY&N(˗W-rogyǤdɒ]CH^*;v9r{1~x 2p@)\dϞ]}Q9_S׭['*TweׯWyJF)UV)T:ƿ+˗/≯rtUɣnݺeqvqԩS%KS]# ƍ"Eԩ^]vI۶m%W\+-[cǎ)78sYQZmfΜ,:~'{&͛eȐ!ҥKb۸qug nkoPX1Uأ@^XZRS֭2X6>Hy 4k 溼5`<qbh4oSf8ֹ;>SM!6@M'g}V^xLi߾;?mЯ S߾}UpD)L(̽ gyFA l#wB7?B.'ª8 Xp|ͼc\ܸhUq }:/ԯ_g ?_vMMAg\R5ߠ BwS\K0ASeĈ蝁8 믿^7k,U7FfͤQF3&Ү];yԱ/!$}b,0gl4v>}:AcT 0Dߗ_~z0+*!$cлwOMebzא BV=Z4i\ c) !$3h ?NȟMG ?49{lB ! B!$aT~6B!E1Ч BHĈ 2/"O !$!$G5"B2JI-.BBCa27 !1 Bu^ oBcA!A!BKʎ;hBHMS PBl޼YH>8,(,23i BHyQX"v%9K̗/ *$UVN:Ɇ Rbp fB!$34Lp_xKz>}Z=*r-Ҷm[Yvm\,ҒB!t7ghѢҭ[74h?޽.!!A.*UbŊIΝ… ϗ J…f͚Gklٲ2yd{'իW'8o-+WŋK=ի3ݻ.]ZM}qo;{lfoOUo !徯VcŊ+o[NOپ}k^߽{w8p߿_~'Yr{ݘ1cd֭xbuCykժU긧N2M_%˖-S;vLF_^#FÇ9ȑ#=A㯿*{֭[+a&R!$,G\X(P@Ξ=Ǘ3ǎ9sT~p@Sɓ'dɒ;͝;׽o)B! XB!$d!Mq[#!B2(,!B`4vobB!Ĩ|h !Bp8~3xB!1BqX V B! 6B!$"‚B!‚B!B B!B!B(,!BaA! cBϦB!Xg !B:XB!$bPXB!‚B!c,!lB B!DD BH@vkq,!ƒ& BUcA!B BHD BecA!nE}B!xcԔDXB!D~+B!!7 !cA! }9=BؠǂB!a z,!1]AKB!$l B!B(,!BaA!v7%BHPx)=B BHD6SV'B fz B!D { 5B!0XFA!`6 B!XM BH0ƂB!+,(.!QaAqA! B! B!PXB!$}ϦB!2ƻǂB!‚B!B BH1B 4+B!! XB!$bb‚B!‚B!aa d!BB7 BHDP 3!BH@{xcA! B!X&M),21+V͛77oi)`Y‚-"n BHF06:DR$ >BEo"aS!B{ 6B!DhoA! \)B!aaHXB!$ta IDAT[$ q!$tRٱc AL .B!$ĔٳVąq BɄ@Tll?Bvid6HɴuFD^xer!oL2S}_ŋ%J =\pA?4gaҫsRZCS֮*},|a c5-[Rn#ՅғZv |Gu|PTX gϖ5kJ…UmjÆ u 2|pT+VL:w5ӷ~[*W,ŋ=zիW=ֿ{Rzuɟ?Z{ҥKO>I8'O{$ G5ڵk)W>՗#Mӵkĉ7)RD-zIԚ֭ըQC&Mo}y5-[&wu:'l}>p8dĉ*/*THnFy뭷r_7[nqˌ_~E}h۷|!]vn&1|]Z=k1]Zz- k1k{=I㛕GM{d W\A_VLan];GJJ#z̙Ct}VvlOqF[F.so_|I>mܠX]^L-4W׊k|'חY96`th8u{}\5u]'Nk=qǩ-POH ٳGZn^:x![NOkxzX߱cdWZw)5?b9|ZrJ9p9؁̭҃[ŋv%kԮw.O? ^yQAͫ L+󶇕Z{/ۅ{.'//FAm,YqǸ<|p<(DA5^wȑ$YqtI K{Q"Ws(QhBweȐ!ۻwjcǎҥ3gΔݻwˋ/<0`yU<ܮ];y7P̙#۶m^z<"͊] n9w~}V>+vrzz뱨QF0~۷g ᅲ/Uk6h07ǩ +ǡe[պۛ4US8 W˗/&Mӧ/UUW7Ynޏ|jɪ=ƎV?. -S,/^[ϾkV'I;ڵkTڷm#Z}^ԬUK X6wO(]T"}s^'\2MŻ/UqkSS~ϡ yuj5[lاhѢj;}uj5tJ΅^mJ(7nsӦM~^bN%0ayb7{gp+81_|fgɒ%PZA5kq>SSLLS+=׊I~jv< Ν5Q[l?s5_tikğjIαc̙SK\V8ʘVƴyyf5[b^X> ҀmNLƩP΅u5B˖tjc/r#mE^Lx:2m/\P={❶@ҧ|+iM "Y=F7fl$>>=ZPpl5blCoh<׻~:G Xxp@g…ZVpV 7*UVknY/E\ AcG|c[^=7o1SsC+T3?MЖ#KTN/x`s㞇.!!= )Q{dR|4fY~eAM۳իK~ZWye˶]Z {M]Z~h.VT4jX_+(Q=?~Rz13y .vm;. 5NwcTmoYK~Gմ/D; tO(]pX? \:3u{nt3/>L?n8vVQܧK$Y=o0vz}.D^&_Mx\P1b.N*4h@(|B 祗^rXp{Lj1fQx\~ **J}QA:u?*6",Y(]n6@7oެDL R5z1x9`0` %=xjhVq"F 7/_w8z`f \Vmy$=_8G +C}m|vm^i֬Y 3Djw(<5@!X9sTA8^8c~z頰qh+!XQp7+Fa ĹUO+AA8ǬY|n1_A 7wKU&%]Xna5H'Qn4EGwߞ(T[ZT+ ,׎{'o{P"ҫW_.ϟמFj᭍<ӵ˗_|&<+u֗N+/;cߺuI6-;nW =XNow.T&1c2MWN]䑇I,0uEy7ɒMXJUoEmm@//-#} ڊ˖KP({m۶.TsVXzr#OExicKf=Lx19w|bat/}ҷ+xgXttrׯ_VjXz-!iHw)<< "\%S2ǷB5^p^>1TOwZij $%A-b!B.RjBw3H:(q݃-UjXuZLGV< *LuHk6!)K+=x,00U8O/ fOR{e9B!HH2p7ЭZZ_fⱰQ\BH&/<F q M!x  \DK.;vx>ԢFyBR[T[>roU\袢c4fϚ*.} B! D>/>xwtB7':Ц~hAa>Z7B!?>i4~ B2֋Цe??CzBI/pilj-!vlC&mi`BIoy#]fp/[\v9j‚CzBHZ.8> ~{n&7T*/\0c= 0w6eKXSӦ,\ ZީӴICS^y$mJ!dZy]Z xIޚ4Yk V+/)O%jI6奾jZjXS)d2?7~V9|L<>τcA!qQt:R|dyr- %&&Ze\ƕ>Wy>RfN3Ul:my镁r[%J1c'۷Gu 5k ժN'W,_R>#ifRi}l޴>.1Lԫ)ukW3qFһsr¹$%%mJaA!N\jJiҴ2ceر#eGHŊR6]RO>wQ:t,ZX-ʗQ#{ᅲ/Uk6]w#p{[I.Z&Gv{ɲqnޏYccek HfZqBI2Nsg%O<Λ7={c0/D܈Mϟ?'sy;k֬Ӽi# Cq^S2e;}|ѧRHQ5?pP/+ؽvmZkH28vq< }y !RJܹsӧ@eO (ۧ̚X7'5l+Wn9sϟtիd1yf|\5(Lbcc%!!=1)Yi:9"Z~Ñc[/p B" uԓE,|ȽE rcz~DG3O?.ӧ ժH"6S,YHڶt}=Ar[&3gNx񢊗T *$핲e%٦P2 T 4p8)>uL|k,/z|LzktҖHbڶ{@ *;=-WJt]t7'K(ݳW |Žʕ+U}!28Ayara4zu?o:g\\lݺUؑ{+^ z,!$KkG {2eʰ#t%lJy.Eޜ4l(CH0nڵC+.v}GcGHއH"ҡS-{,{jJVjYzA͚9]:u|R;*ʕ8w$1*!$-SH4m\MҲav;[M)һq&j2;nw?^m;eQQQ`5yeuϪfǎm<l'B!(*"-h]f.%joyG$B mM9 ^|'ӦiyÑW\0xBv`k4r6xG#d444!M4i"w,1|0j0e'TXQ W!U++; ~SBC\ފ80``d7XQH\䶻/#Cdu e'juzi#p}{#9F ZBf!ܗ} ,/p ~()\;x3w`r^bC\8U%ry~S{=[BUzZ*BmK\$:]$^)`{ [=Yifb&rbv>xE%JEDiQ]-%*))e,fp<$3IN[P#{خڵ8v 7Z 1s9ѻ eZo^vZ<"Tv])L638}L7mC)~{B}FoVϗIPWz=4N,o{WilN5X|7JZ^Oh;9[]VL_ En&Ts.$U{ P y=:r=C˗%>>^FPm\2)zҪ2BqĽH{{'%-ǔBnص&iu mZ֍ei%7Bü!YnUsJ`5$vfo&$8_~3Ȫ;wL~@EUUEQ `p4Mxm[L&6%rwf6r8CWf#gU/WBct( Ba}ٯ.X԰e~.Eh?.4?\ WS,b{ ޏΏ9ZE~qW@ylۖ,˂*I8 ÀwxЄ"C.T`XLs3d9X `AIuWl3B+L}d:gA| d . ,bcpQyN~LVFCq ]'HweT绮k*~bJhѢEh2PBpJIENDB`PK9>:Zd66-Pictures/100002010000027300000185067EF33F.pngPNG  IHDRsu IDATxw|3[PR @D:HAi*B *HoR " *DQj\JQ#͂(=R7;cw&36|3=̙gSIII BPVlذχdN'-Z#GbƍxaX0LGnǭ[ w7d+ iݺ搐̙Q ˊ0`qL&8N,0  L&B,0@d2S~:9#rWhTN]ͯ^\Z_7VWZ<2?|YfRՋG a$y3,/<,+ |w~e)A%cBx2ˏf8`!(Gzz:4h`J8!BZV_`χnLӛ>Eɧ^<7Ԟ%|!V:(S8B`Y Âeݲ<|0]ERR2$bHunۛQB|&<.brZ}HW-?tJY|8<,!lG~~>jԬ5k50 u.|9>J3s͆<||}aa1[`X`X`2]I 0/$2*_ :n\:_y(Q (/~ P =5D U$\OQiSS/Djt B8^NF4A 9p88V+fK#R 0!/(L&K9KdddBQW_s,˂8p6~Qexj49t:p:Bt8ѫW/={vd2 />J-~N}z*lNK#&fk"qƍ["^+sB_%3A,[ p)rsuD!fS-qع?? 5VСCoPXX_K._%wMVk|]^CG\a=$\lG8#+; PFM , ڷk_|^eEo-{<,~ m۴Ũѣ1qk?& ʉzH"'{& rsy+{z]m:ʹ7ʑZV=ȣG$bqp:ۅWǹQ{q1j׮ ܹ-{|=fF TV Y!,tc :eh#*J~M$eq+..VV8^ztb׮]гسg0 9/O@>}Ԝ%8fQ F*R朎%l6 ^8y VeĂG^~bfΞ)(tfaY{HOU ի#ac8zA}QWBF?0PU!Cb`xg1g̘1Cp CrrJ2Pk׮Gxh8na;`6%JgxXo'Qiddf N.L `XV7Iezj@Zu!ԎZ"9$8TԴ|k!+;{tGHpBCZ(T(ȰR㯉R \YY.3~E VP5w> Y] -w)2+\aP /_F]2\ e+EoVA8! _8.Uヴ%Q~]{iKT'*?P\ +WP_|Wh V5$s&5JӨQ# /ǼwNPTXBΝ;XM؊K?Fyw^."j >z] x#V)8Umyx [qFn˙[1' vC2pGq%4-NҋCWyߘ%)Q܄O8߱{w#׿Jˏݿ愄U8 RRP|(LFuѢaF~5?0PC~:>SY+]I'ĉ(..=CvUfG[gNV!<</°pB,}- a!?o6oqqqhܨ1-[sb!0o|l޼qqqh31ٽW?4$!!x1tPcŘ{|N駟ڄ 8q8l6׼/twǸ5y{3҇E-$RP*О| G0IВQa:!6#y35̈b]+k-jDYl5PlJQDzcN!0,EqofE5 dj;^ԍVT> M7eC"k8eO8lnj#Ftׅnw+env[{oۮ'p?-4Pmv}O<1зoaNmawHDT_Я~k*st7nX`#"Pn07iߐQȻSur`Z1l0Szܹ38|B eԩSHMM&અILLԫ5j^u|k?!0@jULMKؗƠs1|0m ((r 3lpmV/ #~ 呗17?8嗒dfe Y6[:rW#o~+%n҃W4gQ~ 2Iߠ34+Ԝ?3Dy/R'Oˇ&}+ qIucaۋ<_^_&Fr ( eQeeC%Amn\J_}^=$- ypII"f3^8OPPP? @&M$ɸzbY#33 ׯ_G4pdff$)evr2\%Hx""בU$W(? k׬xHXc^Ӡj@LD_j0 11k۷O?48> 6Mտ|L[!*((^yrrss_2\nn.߸&1x{(,,D 0}tlrZlLi`!Ce?$mV}?0pFu##å֪U իUΝQ (>ari*[ !ϯBҰ«܇?gɚփFcOEOwE]}HqSqz+f_ !lY*ԈZ6PZ5ժUCTTBB $ "q/ ۋF<.]gC{͏g@~o.vPx(,2ϫt,EeQ\BJi*!5P%dɹ)8E(rc2u -^f"_O]ɚLXmuOd2ʬCJ-7=\VV6o,9X, 35˙q @Ϝ2WVkW`PuV-Bp'B$HCan> }>/S]Yz5fΜ#..NbC7hBQ#`WCW޼ys9x`YΝÆ qV|3Č30~«X SLqнönWcꔩ>}+78 K֯߀597o֭[QTd"X!EŮ4)ݔVMTqq*Y'+j,z au .JWxQc;oJ~B*JY1 sD~E^gJj=-!V~/FbbL , XC\{rs² |G2_S度-#^kY_^OSJf6u8fxE~լh}dwd-Mvv-3%e55300+S \ì3π "Tבx-fS mEDVFhhj2ݺuV>|'OD@@!xGQvm.3/6?IvBuhMXI8"9w:9aG5A֮Vvzi:m*ovɽ{@۷GE͚֬k[ {u;B0M?\aۇÇpvG1[| QPtGp]GH[W(1*y)՝0Nϥox& ZC͗0S>VT|dJ)qPa\ sqVɬ7vUp¼9jÝ 4>\d ިJ9VJ}CdTu̢{)-NY)]ʔ:%_U mBGW{>{.k9fx ?`9 L2'~!|v X;epۏH|˳R3}kL3JlVG+L%$2AR- w8"WPPܼ<ɟ\XZqŸF,J68's;뢢0\?'܎HMO‰يP$cwû)# E^^\i Z!F8Cyk,&^ 0_|=can{_FիWǮ]лwoỹQl6vލ~%r5h@=nD)((0ټQty<̗_5__to@"'鰬VM; иa j).Vv>|'OMa(n#N" 7ɄbΝ;`U 3E$ZuEVose]Vצkt׷nݗ_ƶUid^CGCzwIourCb-)kXL`>H;ܟ?"}9v!.ō+Yte&`ZȀQ5U{?xJ@ܹs7oߟ 5{NøbW[aTRĊpMkzt{e PŴ1%@BhXQgT^ %<ZV>f>h c?5abt5dNF!=$G˯esUSYYY(,*˲ZaX\z6[`Z]XPe+q:37XfjI6_aJ+&Z-#ʃa0՗-e@a IBF2H7] da”!2v:]sNNX%C#mcל=8"ό-l15lM0?V8-j9Fڙ,ߥQXE``pyeUR$~g o/F_ֻ^z5W"ES~#UPJqY01&̀130L'e]^])Si͟(g~_x/(szŀD(Ɵ+*s:^]6zw:a̡6_aP׵2̹Y9]ëniek4L , Re*Smna:^(OK h5>mPxIDpp8–#x,hNisLDB=|aXL,X ,ڼ52ZpjX<0|8~lڴ {6T7(**ƍѢE DFFjUln… ,idd$~7CqɿFiՙZ[P(ʽeРAIDY.X(f-o o%P|,K8!Jd@v(͛7=j)rFВ9ԭ[W755Lr%M;v Cdd$jժ:u'/$@,c=?Avv6ߏ<͜9s`61|pj <o߮*|e۷K+כ:P(Jc?[Y\pA(fffV9@hw:,%%!44T_ZZ\xǨQp1[,FpnܸQf9L&bcciӦfaذa0LfܸqHLL޽{`$&&bڴi^+|yŬ(e3 BT Tkp5q.\a޽} )) aaaxk( Bp9/^6l VaS( BwHYeU( BPSE BP(Jc` BP(JAFY) BP*9ZseBP( 8gBP( R9QۖWeBP( S!=?_Y5BP({ЫmM?}8p$ztƍ:ҦrWxE_~)) B3B+r_}߻)T"v (B\+|mY1P( rXq8poywYêR)s}ŋuߣM6Aƍ~ *T%Y)C(-Z} {P:[޾}; PqY61-ua8E7ll6B=_|˖-Cnn.vU+\ytxw$+r7Re?J˚&N2g2J2;v<>#DEEjm۶MQQƌ`ر(**A\\[bҥ]6°w^ٳի#66l65 ~~~ %~ X˺_EF$MAFo)QxV\H,+v;Lu"(($l̟?}bJ,pL0-ŋ7: III`Y#&&F_kSW^œO>5k}EZZ.~hVQQQXnn@:u0o<(#B9Rߖkײe[ojEFK WJmP xFHH0zhl6Ÿ zˮd=Q(%PIj L[FS+ჴ4\xݺu%$$ȑ#ƠA0vXmܹHNNƥKpEܸq֭[Ñ7n ..SL8}4Μ9TTV 3gTm޼yHOOGbb"~W߿_V||EiUZ֭[#00P޾}VZ)Qx~'9sy_p!Ν;u}٘0a4iVO6z^z8x /_FLLbx2ͰlVyzed$K. uq%7oKЪ7%;3gbϞ=(_-(̚o#N!&=1;wDFFӱk.a.Rz+CySա1= ==AAA¹V'N@^^?ٳgѣ((('УG!V;צ=nݺF`~~~Ŗ-[{ni5¶m4ˇSݻE[RRRРAɾOQQQ+00YY_o Wv&q]4lPPZ&'99~GQ(#~+|AO?c˖%n6[fLcйc|CwQ> =499-`۱o>1!!!HLLί^Rׯpt"(JJ֋X~=֯_ 00P\W^Ut;v6m8Whnٲ]vεZjA||<:t@kVBӦMk8_F\V#)) !''Gr鵋:`֭HOOǪUҴ1fyffG_._vT@.]sR+G\׮]CHHb\zZɱlŪU*Q(+1iٰsxxj {l6}#غ}=*I[Ͻ M{+[|C=$ \5j@ѼystTiu| O.׽{wʰ<ڵ+Zh(Ԯ]-RKP79ׯǸqt3*w@-8i|7[tDDEF7wS蘄' ?CB׻*-i&ɃPeS̲Uv?S2T3F@]eJ'3#~NSrd2c]z<_>{ ~O^a1cD@ "ecpΜ9.˜P8j-qJ̲rVf*w|&Ol`ԩ8p`GP(JGtl-<yEr<5il8_'ti2227\p>=wѴIW=*eueN:IaL&WH |}݇ҡ= ro(ao䓃!'L?{z/:tNrW2 p8גْ=LǪ9 R98q"&NxR(e|M1v;?l!VK|K|[pa a=wIw^ZJ]3a, eQTT|ܹsS( B_AQG+s.ӷYR( BC_'H)/eeyyyժU+D) B{ @#++ lCCC+,V]ri{P(UJ[e?JxKW2t:,L&ar̝={]t)8ˋ"]uIJ"44C6m0vXe*T>hԨ +WTH}裏"22;wƦM !?UQf 2r~s5|Mx@VV`6R9sJ޽[ͿQeSrzc#Gl)))qv܉N:a$oUF|RRRpIj /rM V;צ_5B1|pdddzb޽;"##Ѿ}{_-UL?SQnv$VTT^{M+>>^.U^Wܹs#b ** >׷mGѣGs),NOکd4reRC^NhѢ6lI&}7)kAɇ\YV+L&f3VE ##W^ENkGŶmpӦMz-رc8z(l28g̚5 /2q̚5 ,߰w^|S.[oL}k֬ANPXXVi#1zmɓٳgyF IDAT.>3X˗/?/^޽{OyJKKCzHMZ kV ;`,Y ##oszԈٳqFTCׯP(OƍW*eR6X9ɤ:Ѯv:tHuFuƍQNRSN!)) HII|d -_Y c= 6mB^` Cׯ+:u ]vUcd~w!fԪc___DGG?G۶m֭[O?ELL ||| Hz0vX= n߾Kokmڴƍ7/KŘf -kpR:tU?c7/2V^]4ک{qq1^z%,YDb!G\7oDݺuK_ BheG/wq4j+e쩧¼y󐑑 ̛7,U#GĴip58x饗Te4h,XL!m.Lk Æ ÿ/_°aT[ ˗/ɓ7:ٳ'>a~AZ)K>>>ō7<鵋qŋp8 Ҵ1͚5Ç~Bܾ}ӧO8 .DVV$e„ Xd 8ݎk׮aҤI\s^xgϞU]^;r>}:;z^QC_י?> u^) <3͟.+o+Z9{c=Uٳgnݺܹ3:w̚5TO0:u3< _F~Te9s&Ѯ];=_F޽U4w (..F׮]U6^=<:v숈Cd Edd$zǏc˖-hٲW={ĝ;w$ܝ;wгgOyʕ+`4lO?^]FBÆ xbkQ}]ܹ111x'6!<~ak׮+;tw}-Btt4 &썷|r̞=[xbC S-M6aƌ+Qijqԩw#((3g: R譄eo!(qrkTZѥK|ǒye2&2Ye |2.Y9LE':F@P*C "ct{AeMLe2V3|L:6 ,@߾}+|/_bTZ7n1U<0?"GT]ƌ1ck16!V {xEnԋtk5>#ZOlf2G-u BPreĎxʟң[u TRQ( B$(TTìGP( P]# ʩʨjcYjP^QBP"2MiFN>>`3gI}ŋ7u\Z6PB^Q}RwW۷cw3ITfĔ6 6~^.!6 'OD׮]ѳgO>}LVeʇDkÇ]znS+RRe?JC9eaǎG}(XVmVb)**˜1c;EEE0lݺK.Eڵ{ ~N'fϞ`T^UfaԨQChh(/_._fZ_EF$MAFo)QxV\Hۻbv;Lu"(($l̟?}bJ,pL0-ŋ7: III`Y#&&F_kSW^œO>5k}EZZ.~hVQQQXnn@:u0o<(#B9Rߖ-/\٨[.222wݎ`IiɩFޙÈ F ͦ*B)_Jg b܈!t=W*"P*j"-- /^Dn݄k 8r1h ;Vp;w.q%\x7nyZZnݺ8 >q0eߛoӧO̙3HMMEj$Y6o<#11+/IW+>*N-|֭(Io߾} BVШ\{lL0M4' <Gεo߾HHHlݺ>>>ؾ};|wSkSO<&M4I&v.yqqC哑8jJ촘7orrrp5={or!66k׮GteUK}#׭[^xAqY$&&"557,B);Ur._WoȱSAL4+_Y@zEzxdgg{u,ڰ<=y矓gyF8@233|b6prE… $""B1|QQǹ8  )))$$$DUr%Iڮi,>_kZW^M "=$>>^QN9FJJJR^z… q?~t҅8N<*կn{2l0B!}%3f  2d?h#zmJN~~>[p."##ɪU͛7=R*#z"z)""\rE8tjx#&ו+WHIqq1!qƑ/RUҤmGnݺ"4utER^=CR(m>1h~ʕ+tr s^&\rH^ U6%?A~ISRn]ǟf@Rn]aq :ԨQԨQ N~ٶ}'O.^.x:Oإ+ܟʕ+֭z$$$;oߎKժUK]zu\TDGG HMMU q.+)) ͛7ldBhhdhH.[JJ 6l(I[^|zh1bv܉ c׮]œ%2Vpo+ɓ駟 órdt ZuܣG8qyyy8~8fϞG'N@=pZH^:z(u5jaIŖ-[{ni5¶m4ˇ{nCJJ 4h GEEi+/5ѱcG?!?#z)d5ZWj$''W_ŗ_~)ru԰aC5 .CHU;w`kдYsBv ||}8t'L2'M@FF::IScɒEヘw@rRVX&7?="=z0Ф2xFsDy)yv Ē ^p0\~NaQIPIzU@ׯ1`*իnǎCӦM*-[^kqjxth׮VZMpC 㑔㐓#EuVcժUbiڿٌ<33#_ׯ_ί]Vt0m4}GQnzФ *%Pz6D/zrXAz,xg? D*)@!fw;̖dz/3~ٷoo`NTj5=fǀog|<022Z")) w͚ϲwN$$$bP^^n~]~1ФI4my~1bxwy{\1ʐА +0 'Gn &O_*((1eʔ?''r v ۍ7i̙3QXXy!x2m~Sbɒ%xW0uT| w܁C3fЧYʛFUU9r=z!1jѣpB5 0j(,\Gy HHH޽{% V/*lٲ. Bթ&ߨo߾xQVV<>pʔ)뮻PTT"q~v9põ^Ѵ;7:kC 1cƌ:Jm^lݾ_};bMB Q=gt:a8vϲiiBpT{(n}cNJ٦M۶(**c]8v~XƌR: P=#@VVкuk̟?F{ .IIIq[m޼yhܸ1ڷo޽{tK^ 8в-8-n<ѣN:]v!-g7I`ŊXlOG90rH8 W_}3gDrr2;jACzq饗b„ HNNٳ[o,P-Y}1tPN󕒒vڡgϞ4h~@ fݻmKCI7fҥ l :t@ӦM1wܰBD5T9mvXSx9(--E-شe'6o݅`˶ݦ]7m 8M6><?Gjj*A+,XP +g?ހ_~>YժӵkW>'hy3|FsޢA}϶mp%XvK/={`ѢEu~mDu煏֠d9o~,[t)&LJNgؼug3Eq lX3hݻwOt@=ۋx_; ;wݳ^>\ 4KP., ˫a={q^ZWW}$Dsތ9ќhP3c <p:뮻pezJJJSOǑHW'&Nz x1? ;vsnYӧ33. pكoǠyhHvVh$֡Ct?~|t-JY3ϠM6O~j;lܼr !.n#G/}\|<[_~$C*1}:]G,<i@z j""" "2w=$y[ 7|+_Ű2W7 rss ^:JZ 7["""J};5z5e&s;TU_jV ={v'@ݭgq rc 얉9b2DX%![{/@Vfp9i֨]tL3,2+Hř'gHaMzוCХMjUUTǗkw`Ɉ;8]n;oD_o8?_{pة^qxu}xjG$C.ƭ؟_w݈=! >-dټ-O IҒqfV1ip5*ϱʬ| %1 7]2 > wk';p^zəx.(5{"ER-8 #uMoVnUvǪMƣf8D8f.ږ 8ޛ*mSf-s;e?lߟۧ=.> SqX)a1ح5`xFܞ~g+vxкi*F EQ@!@$C{CÆ_w㭯EE4ovk.Zҍoޕ:Pzگsk|$? s^̻O+0V݁Qgu6ݯf0vʓ`°tWӅ%޿`ӪY}B9&=X9U,۰v7geq꞉[ԉ'JѵmSt̺sL_+bNcxVxE!EN(-sYYYϿKbV#++pM oMEȥ&ţEd:T˽kfX(wpθfd_< (%s^[ ![|Ҽ1[&nLܸ-8 s}F:ʝnL>.~4ovGJbʷ\q?m L˜.tk k  Oaj:lo}SՖ;+Z5K#o}g1}ODg {Z 6<4M{ еmS(E-v)+~ۏnma=@(XMXϰdk_חT/n?7lܓxU2W+ݐo_xpEjy%;p~8 v­ӪY}B9&=rtm޷=5_v~ه?]z6~z7K܀s7MXC{CVfd6\an }D5J\vv6OB沲r #-s> #^[`"(+07<6u1+nxUoČIC|ܟKڭpl5ګp N{Vp=3?燜^0_is}aejlytF[<?ݬOت1Z7K;,op܉Ǜm)7уmbզz:Q:VV-^ ғW,Rq= Y2+Afa92wW+@L(DŽ@;ضRxtciJPTr8]Qǃ?DzSܳ-??s7WM1q9Pegg(XZ]P To)8+59Ee’2%ś.u'jom)IyKKDZuK/@5e@Jb$=;_fpՔVX._m[5F?e@jbvtj}nqv:l_nЗ T|Nun끶-O/} qC?oĬ|"5)-9O4߇`'4kkGEi8v,z<73o RƮ}c∞x| 0>2a.?ѲX/Jʐo:QM3foQ=ĉZ3d5l1sMӓPX칺yz3\%+Plr7Iu7KO 9=ܳ-$GR:_N4OO2SxqrZWXV؝Wh OcDؗ_2 q^8rT'`um}pgӷ֧ ;uQ7RU8 nWm%{BoT-p ŧqbہW TD`O IDAT~r+X~\ݣ43z{/ nqxo٦n,iI8r!BoaJXY\ՆeK&?^ցwørDO)W ?m?\|~ad_4o Y, O0iDO&y=W,qJ6Dvڻ=VyX?8:XrƩ Hw`҈'?}f7$IHON~1nHW|f>->޼/ggaj E96*\nMӓ`bژ3Ѫi*l6Pz)hPIqv$ !=8V['NU`Wq=3<7P$ f)G݆끟c{hr^ \ nn|n7zulRzg,}xݴ+-nޱsatt\qnH> qY8sT\qrDd=QI7z_qݨ3+K+ߟv̮r Za/zvh^a~\6"<7P$ fB)G/6%nok=bp϶>1eWqvǫ7tbˑf 6fֲ{lF̋rd+nuz5W|+_cFY\裏3{睚]3jc""":/|@4kS 4fͪf t+5'0nֆb-xm~cm{/*}"" U3~ztjɼ8eX>t9c޴~}ÁLL<KG$/Ǝ9_~'O~W_U>>sҥKC^o^^&Mƍ#!!{.>Ӱ~5O1v\eȢ9oFgf[3on4 !t:O?!;;>~Z7{ŀpWzC]wVX}Uo>jUVᦛn¢Ep)w}zLΝ;c۶m())y /p:Q`>9Сп |HOOGzz:nTTT=hZ$̟?7FVc…hڴ)ZjoFWQ{hѢ0e:u2oN7x#ѲeKJOouIWt#@ΝoaSOm۶Czyt\9s&7oƍ'Iĉxk,o,uָ;0w\̛7Ohw۷{񕗗Yq9۶mC.]GFԞ={0~x"!!GFAAcՋ/zB\\:tW^y%h@f0g}3rYyy9z=_/Yy%$$ ''}ey]_/FFF1uT8|8=E/cv\`;varssrJ8q_~9n}ߏÇcΝرc89sTKСC?>j?>fΜϷ`X~=󑘘ٳg[mΜ9(,,޽{믿bٲe> i.f۷/5j䳾o7F>}L0|i֮]CUj?Cؼy36l؀{СC>^q֭[e \Rh=?zq%GFԸqpw֭O= V/:<8u{Y&)**ѧOjB1g`߾}ظq#~ᇀ[ן'()zZEqq1}]O+W3P;`{س'= n{lܸ{E~~>xi5 EbіN8ֿo,f<)bĉ{رcӧO ݮoݺرc~"33tjio^l۶MQaLsNu9=fZW^y>mҤI7ͧP򕗗g6mڈ۷f1d(6_.+}矋J!ѣw-Ǝ++_|񅾞@Ș`uӧEE۶mų>+{b*$I[fnc m/..F{n!QF鯶^ C kݻ=rw]ݻ7~k{AΝqA[nEBBBm NZ gƆ pi}yՋ~ êU~ƍ |B(_ᤵk.\xصk^[dee벪#Yfغu+7onkTTTEaʕXjizرc' 33Ӵne] xs׆J̙3맛rof1{ك-ZhZv(Xe˖>6,QF3f .]KbرhԨQHe|Yuc^=z0ѥK<8묳ШQ# 0>,z聄++'ovAUU>Yg?xg˚#ݎ2cǪmf*++ gy&}0`O@Xm?1_xF͚5?u֙Nw:2e }Y=3cCFFDDD4fGn &O_*((1eʔ?''r v ۍ7i̙3QXXy!x2m~Sbɒ%xW0uT|K7믿wq:b̘Qպj8?iTUő#Gsᡇl= .ĨQF… 1z萷(ˑݻػ`⪫–-[r ЯI7۷/q!//999>ӧL EEE(**WfO<'xfXm?s={_wv(;v,;TTT ,@~BNN :4vj3f̨j+%O1f̘yG,deeu֘?~= ;;\ppW/ۼyиqco{ƈ#BNhy5k/TVVe>M7|=z@߾}ѩS'k.&I0`X˖-CUѣQRR#GFsꫯb̙HNNyW-V/.RL0ɘ={6z뭀%K࣏>Bzz: cRRRЮ]; $&&bȐ!>\d >|x[1g4j;wƯw}4K.ENNNdggW^С6msUNDDB/Kb1s]vs"ќ7hg4-wl۶ \rIHW~ 6f㘹s[N9s&buugHEs>9oѠ>gƌxt:q]w.uQtfobGеkWt5b!Ӗ9rDe>}zCg#f~O zuDDDD +lV"""",sDDDD1T"""ork""""`nf%"""a 戈b9"""3gk5s}ϖ9"""8=K>sA_HDDD7(1#"""a9W""""|Qo\j刈B&p:0sDDDDQ,5 3GDDDD O$e($DDDD1*.I,9"""o2ՠ:""""j8Ϝ,ː$ v$AU= f7+QlpP,CQ! ˞K`]DDDDgۡ( n7n7#"""jn8y$=mrf%"""b'ODYYЦMf1#"""ҥ 5jJ\.(r 戈Z~PYY"}$I05rrp@e![TQ8y$nCj6 @gQê+[HGDDD'?П`|rOxǠ(h 9#=c GDDD}KdJDDDDI/u[刈ͪ݊xڸ9E9ۍj@l#""".@ev(rDDDDGY0is8PUU0#"""Vn6^N"Ya !` I$I(Ebo.99񈏏`(effBQ[ @`c鈈nGZZ***B 戈a\.%N$l6^լګv+5,mI$I,˾&إJDDDTUկ\ߛ>΋Qt.|Z{`,xeBDDDD K $In_9""""vBUU}q̜i-ql#"""LenrU{E1˥_ɪݒDQ[XaPGDDD԰\.:q\.1#"""jx,p\PHII'@E5͆$$$?1#"""rƋT[E1ri՞ e(vv! (2#"""b. v,fA?QSE޴dYf0GDDDTUB+a0GDDDŴT%N(1#"""a 戈b9"""`(jV""""޳e(-s@؏1N3301sl#""">-s 䈈b0%"""#.s9"""$[鈈i2GDDDu ٽ爈Ho[戈~GŰj&1DDDDэ-sDDDD1,`0 [戈b01#""" f%"""a(e(1#"""a 戈b9""" bC-戈U=ADDD8f(vQt)OeQ c0GDDD0sDDDD1Q c0GDDD0sDDDD1Q c0GDDD0sDDDD12B@JDDDD2c GDDDJDDD0;ۥ*hQx0#"""2 xQ3ǀ(Ow*TȦ̱U($DDDD1ژ9Ӗ9uDDDD&!"""a3GDDDx9"""f8/s $v(1#"""a 戈b9"""V""""NTgl#"""F1#"""rVwJ~3j2[DDDD %x """VQ0*c?+Q4?mckQL6Y%0#"""r~-s>W 󙉈( a2W/ """nޖ9SpDDDDQpK9, DDDD1Q$}\5 戈bY@`(1#"""b.`(Id1#"""fJDDDEat.{f!Z'Q4$*f 戈,[_0#"""j* ]1s 戈($2oMBDDDs sDDDDQMUUs:I'QRU@kmqZƖ9"""(٬ޖWFQÓ$'?vl#"""bƖ9>(Ȳ\ugz=燈 [!"""" Ѓ8}Z=煈 ImS);DDDDUNeZ0Cǖ9"""(&˲ E1jVUϸ9^ADDDV9[0#"""b`N -sDDDDOf$DDDDCel6qsQ3^*IZ'+1t 戈mIThQ9"""(f^`(v!vM3#"""bmIn3ZsJDDDDuOwQrݖ]9"""VYY ec`()UU YJDDDD BOP'e(k\c0GDDDŪ_* E5-jgf((_DDDD@E1UU`N$`(i]V9f(rUۛ(2GDDD"2׽mGk"45sÐ,X2pp-sDToWϓ-22 rĚUaePYHخJKOǧcƎx y.AiԡuHn8u[ Uׯ=gbcOc!8r0LbRҍl_DZ戈g4+¡q>Eyw9hѲ-XqQº Q-[csPU{vCzC3zmǏ!w٫u?#mڗ=ޏnIDAT#G]aHߓ(x?GYi\pH`F.QF^k-F Yyp͵S>g6oeeehԸ F&M{!_#N,ARRz.t׭[\t"ǬEamE~aӦϰzz'$`Ba#srv`\c~]c~?SPU3g܁avjZo[CU|[݈n k~\kףcNX>y^f59"ӟyIܱs,]GT+YQAk횕;t)бb"ڵkU(=]G,v.p*BC((\</=pĉhҤ1CVמd}]?~\ /^=#8JOx;'?OI/ń |^{Mdd5k6.w1|hw3zK_,2$w9ҫw3;w_}G=8xdZo_X"TFW]sauu3nEтhٺVX͛#>l2l2w(; qaS"PNDZZe:}w||7^oNHj9fDb,ˈs %9 *p0/?qo1s֭ÏkW#9ӺVTXoǏe @yydFޑB\V^=zqp**5ڶM !дiSL|^{}>y?zcF?SUB.'X2?HGsZV,S#1sJLLĮ=(*$I7if{>ގ\88̳r %h2MMMCqq141picb˖-(/ &$$@Qi4yMebG-Og=͛ĉcزe >Ͽ`: ڴm&Am۱֨ͽ+ }z"55 n >(l6HLLĩSPY2 7܀K"77muըl"2]?:ϛhPo_nWqÍ7,y,X\m+6m_}/*Q}_1`Y>vPhv+>ƍUkyyOХK`FCi3Ċs1M9v̾>d>}g 4x8p`?:tXm`*PGn&" VCE%л8u&LFiX*ř.QUJv܉$&CU=7kSf>˴9 8Nl'0Qغu UmiGm4'xɓ߇rc۶myPUk֠^v\l޼۶m a_fB`'ͷ+pϽs0p9Vm[CUlW~G:ۍBJ'LM/?Y{֧WTTሇn}}eW`܇p`#BViu٫ٯ qtյ0)eqŤ6fI$4n 8k#11 gfYk|*zꋌMq4HOfw#o ;dEd;p\2fz oG˘zPP;9A{wL Ysxxqir(++æ-Lɧ5GUij?YCKEL돇>?={vUzbѢ>02Zd\.<أ1B CҎ+e*r_~FD3.] ɓdΨ (/oKKMFˌfp9vQtZl $eFS4JO 8+m>%'K}ՅBQX헸B4DKfXMOOKAMp҅#E(-- )ڊ2= VӦMy/Ѓ;c戨Pmܼ3(9YY7X<>|LrW =2汚^\r %Qtj+Z$ܲ$>^|`9 4XǫY(fyL#ey,Ӻe ؿVxaU@t iL#&ݬe2GDtk5-5iL#/X٘'9"7QL#ey, [jͪ+OD5xD4XlM7mcQeee?' YZ?[o62 ey, L xEJvv6Aeee ip,cF^e/9Q$eggEձL#ey,Ӻ%[M` GDDD,9vE?=eDDDD-sDDDD1L?xc+Q iӦYN$)hh'} f0;͸ y '6 VV}7,럙W߆h* I2o861M3n@||<:lyAr0- !v!ffGzZc28@J%lTR)NB$A&2T@H dϼ[Um>eügʘV/DT_=+UOͿB˿ m6u'@596Q?:V/zK{<2?aXL?\R P!8[TH. lY, */@r*p)Y!˲ݐ${m~25~'-=U(++Gyy9]xXViwYmk3GdB[4rgVBX*UH,ί,AUUTVr p8GfIUPdf}.'@J :AF@h 6Tq5=kRZUvgYOu줥hW;B2W=a,0IPe /YoT3-ʆvC P$ܐ$BV` QqREY܆8HepUO&2lU(Yg;tV~U:%BUlXkcld!*б;`1e  ID8oϣVEH Ԯ5'PBpknd7PO+kJ+Bʛ]t/n+۵̦e,c P+NI C *pl2HK6*l잳'xSK6j&{?Zi唴mԂ @NV8cmھP-Tz?il ᓷneͪ%z]-gZ'Ղ?-PݻeTIH'@VQ~JƩ.́[ d8u JjUf ?B93f ni'&u欎o܅#95Dk\3tԦH@NepHTv{v^wycec>|@<5P&ԃI 6P3f]p8ng9͞auz5vWAUaI$95j$)%qZq"] Evy[d}M T@)ZAOS,N a5Υ7]C(۰I VK_wZ[1W=mXҙ87͂$\J g, u{FzܰɊ')U;N(?"R2D*Oy z Hk۪ 9;"2vRYG UtD|R(q)PCGV߁\muQFzUVVtBQp8숏,K@cXM*fiewmo߾R1s:2G}ј~8-O2"K-嚧`zfSEnG\\EIr0Ʈ%EQd]P+TD||lpUƉHiI PUlؚ%-:Z ]Uhzk m{Z绌V}r曦12Bjͯ')ٲV̓ɘ@]  f .I{M[XM0C_~O>=׻hَjj/5}qz gX ӵ*dxh8BE*pQ~\쌇]$B68+P^V(DO}i?R4ƀθ?]˷6t . A{@=5LYYP߀TkPwfU6NNϿANirjV-o+LAVeN竮ӯoѴZVfFee,_F;?$Iq@u)I K`OH@8vI 6R{:<8P z Я$oI6-˱ZH"AVԷo9zQ$_UͮJiVX4jWGIaSw'2.ouvƏ<-pz g BCE2dUvJpS6$:(/@ũ2@f O}WZX^,\p8pUfs@A]wǙh`=&WF[+W+*ap2Vznv9$ހh𜈈,8Ւ1^:IENDB`PK9>:8k-Pictures/1000020100000330000002731A299B26.pngPNG  IHDR0sгm IDATxw|E?{-H$(DR* + <D@@h*:8 !"~!97Q;ϑK's+RP~֩B/0w̅232Ѫu+Yf haQvSO"3#qqrYq)..._DQ6kׯ8u$/~L ր9{,QL&L& !())+Wqضu+"""0䭷l60 (**zfñV'xF(Wr[ s?+xT^lW~\>m4;HUԍ1YFy7$û 7)0w//9܄5w6P`NL%%9-!0HJLfh47Z%d6i6a6IFhj$qU?lmk3L _$V#F/Zahn€K@5Ÿ/bؼm+J [_nFYcSǎ5Uʵði4u*Ԏ91((( wKt4 wGQ9pFMKb(IWÓ;Ur{zsa{uvU\aW*z)3,8=1VVAb"A*ICD紂T`2m6@.]:apN[RR"l&HNNV%m[1qV\f\Ë5746V"jXQ!d*lk,.n|}Q\u 7.0?3P{w$ NZuוjt_P+"^}Uz &MF[Ή<6EKxNA"+pԊj|) \I.o4._ibE˝۲Ŕ;Ho1"Cyi_r_$t_Nm@0EYe_9+))~ȅsڒhFuݛL&q2CNDeShЭ[7-٭ݺnc))tꋬԪƂ 6O?cu=!7;!Q5+0tZ3ݻwhO?"uN*f3j?ZǏG jqU̜%:0̘>XWPa䈑ֵf3nۊYfD6q_0 6mpp5Ӧf͚Xb>]X׿)S`hРƌzb`2piL4 ~tpsBBd'h pO!?ߙ2*ULC|_0Ff ;pprU"̹9 .aae)1`'EC85L(n!cġgpZ1,(i#J~'ֈlFl޲L^;*$ZWa[ 0EE@@y)Ԯ[k Dp`Ftɮd*/(G,~9sR!Cd2a9HI5kVcɨW/ӧOǤI9b$5jsICwޘ={6Z-ɄYgaQhԨ1̝c[~6l6?@4\:Ѽ՟E4sAxnpVڴnEc;>|ӦNGdd$|MDFFb„ /0`+XK#âBrwĺ)ۄC†u @m !mx;-Fܨ={9!^.uו!e$jR`TL+om00XX@\5lIkcla8~Hw"XaN<~ߢCt6mU+d)@Ίbp/`K٨@̪*P:QJ wN+F^xf6lɬllp D"l6cƍtmv;Jed.]E$(۫1`D?#wḪlܴQ|%{66*րQ\\~.^z|j@p0Ph4G̓ɔ|s7gLǶs7j?,o9'P6!uTk j ܊1auXJ3d/⏟HoS&@, >l?{P?Wd`0NSf|w;@ 4Z-t U+LanpLZꬷFFc䱺kpiJ?q齼lJ<#xkkVkV-o[OI/,Rh1&(0 sp\qzASX4)3v!33:o}hZ撝^8+YYY ÀPPP{WM& alFVe 19UDO}`[mGбCGlm۶Ÿ~ÃUũҞ;2z(3(8I:jX@^^h` 68`2+6Rq+ݮ^;fOOԢEGɗLZr+\a&nJG)Vo8.YGi:!$ROt'09cN,\ƿ^z^Ҁ)kԪUKRa㱤_KlrDFFO>5kΝ;XZ}b5c6bj733_~""4`8| ÝZ:|*{Q93i W۷cЪU+<FII1{ A|`֭Zh6qm۶Łlr?~ C QN *ۨY&|ynE=ѼysԬeժP2tΜ9m"''aa0w#2,j8~o]$OQBq4SXar#O{ڋ" 5wue&?*B a` xS:&Jj_1PӉk_ h$V V2h Pxc574C/z w{z^ɠ&4Z)1- %F>`(> UTpeXn-Y,g ѧOBflܸc/1nx=vΙu_~Xd mVzXl"K4be:k,|xwɧwy~zW_v?%bc٧ayh48s kUQ0dTG;&WA<,w"鉳$Cwn9g!~K^zU.%l&NzmE$I/U RQ{w 7-|FW_^tJi8mH#Ȯ6bl /q2/I4Du+s^h4>XrA+b~_-dԘ룜B=ցV`t=35jD@cM `yIa 0(,,;0LDԈNǦ͛VǸEI{ȑ# lF۶mÏXr~""#!8?pш VrEQeĨؕP^pon~ϘaRFn-]OK\~!4LHmk/*Ҷ1+Z;W!޿y{Vr%ߜ=į3]Ɖ"KV ʉ>;a *?? Gz[f7f5`&P SȤk;йsgԮ]_"BFXuC[kx+F;wM\WKtc!fdff sZYyyxpnd2-O22ґn#dͿŖI =??o۸}:Sxo~mf:u +Whcpq+))?O's 5Q\ٹ9iDEAqEU?5ګvր1 xE$VI- aaW8pP}̱d,["zVx"UoxX Q%ᝅ]!`BEw;Ӻ ш;vS6e:i $뵠 wh_6)q2pQg ELZZK,rXh,C :yk8Ӵܭ'"K8; /be<6&!]ΔSꓜ5eBPșZN-͔u/3 b[t `yr." U/}TnO`H3eY]`T D'p9:YW w ]#,t%UQ37|ܼ_Vt_ֿ;DD\YaJKPFض;#s%ho3J&&j0 P/2U)86UDf^iI͋p7-p pN+)f ЊX"SL_b(@ b{9dh$̰b Oa+2x)xe_W/kpw~DG2bȆ%c]q+ q J,UF+qxᅳ0S=JG{&h(ևn5P6\:DTs6sg o鼳wS(wW+  * r騕*(fb:&* /! +ULTp~w#)܎cq{e{ʇTܶ~1`0`\{SB%R6fpPʙoS BP( )}J OP( BP(*ܗ'fg,D8EEE [y[١IP(JDш_爐ݜ6Hlٲ%9đ#Gн{wԬY#Gč7$V3 +Jmjk(šw![lATT>vˡFyM[N+P-7BP4 4  ÀhpƑE Zt)z-1̙3߿?K.axwtRQ,tGVDםz6?>31`{%yMa߇?S( Ea ]bѢE֬YKcΜ9hԨ \>/ѦMh׮]cֲeKѼ[?˖-[kWM^o֬+3g#GoȐ^x?8U(̯R!WGr2qHkqq1 aT׍zzŋe~B=P^=,^XruJNϕtPb:oEJG[AJ%ׯ=rsé3=ՖՖZQ[j,BP\(>!D avb УG\v ݺuÄ Tǵl2ڵ ÇĉEL8&LkЯ_?L:U2;wVvm̛7OQ'>}8wÇcĈ1n8|;p?Dzz:N9((Kzbg\N:EAPP@;w.`e˖y9bL D1/^{SLuݻ7A߾}zjŴĐʧh4tӧOGfWchh(6mڄ)))ӧ*yO?˗I&Z*6l9sA+<<+^-GGL.n9Emݸ!!!칁tT3#x:ZȭV>ohSmBP(0==Rf˖-x뭷xOر#v؁blذYc˖-(((YlOa4{n$''K.| t")oܹFΝèQ0l0ż5o6m‘#GD8Oƹsl.^N:Yf䓋V|tHHHP +W\ZnZ!!!Wر#f͚:{9,^XR.]`ݺu(**Bjj*Mu▓Y֍ȵ.]`0={C{@Nd[K{V+7ew6KP(e?16`iT9rH-'ȕ+]!NǏ۷駟F͚5-7Vg9ݗ“mVM;sFnyC[v7YN B)?FuƩCo>iiiR)..ڵk8 BP*0]mwX|>S}bR6lv܉|4msH BP*9z_mʉr,X"P( Bd0O!P( BP(wQ:KP( BP(º=̯{(_( BP( Eax[t=&BP( Ba5N_0P( BP(J#BS( BP(zcPBP( BTJXY?lLP( BP(qe0 Bf9πQegr\#)BP( BT35ByIwS8 7ҡ~r5`( BP(:5E#$29z8X:9cq1GdP"66QWCuq*RU$Y)WP)D@ڀ ̈Ycǎa࠷xOP!+/wCjN9NE*$+ncNg!foXhV_l``6 C8­[7Q< G:8*!fC}f1=+zG&>R\ )ǩHeWdPS8gaC/ܰZ  p8wo#PrTvIV .Vh!f\7jCMP}WTqq1z q_ٲsg }Gy=q]:_+Թ=7WZ5\^޽ 0V׬& zBp%<۬1L_Bh2gΜrIT+%ӏߣvTkokdtmٹ*oZV Uر}PR_*Y*E݃ ?^F@@`\ܾu jUԻ& nDExh8Tw0k:&z(w@Aݺxvmۻ۳nhРK^?x˖M蜘[6{|O 7ngt2:[vʛq_޻٩m2W,#|vGB 4iCCIXL}U]999pumTZ(,,XUUUһ?~O?&≺y\c|n-OZMGmIۍq]Ql߾x>8EkзYyH̝3 A[]QԭS ];<вE.>.//g`!??_T{4r"?} :'ģQ'q[?=W B^/ѲsEYi,~YdKO˫5ܾO=͛~B1xH-#%=}Z)-dVC{E(T\g@CfyLDrr7pIIɘ2u6-{đcpI^8|8{Ob+^EEEH{Q]ax3xPUg1K2;lBeujDD @;ħ&⏋W=z$ϯ_1vMƢFh$w*W\zKQWiRлO_,] &}*5oBo^$t,0GWGyWfLs$ғ7jMpe{Б޽'O"[FJzF$zY^Vj׬̀;b޽ ݞVĮ_av`00wywnt]hZtNL=^Y"u&B`0ߊ ժڭb0?76zHLJ`@^ݵw t?x>t:<|Oli!yt?ˊdwŷǮݿZO#gK۶m ,NmQ}~W+rCѣhi˦߾N۷:)ѲsEYX&FMry=¼3==[p}EENl# Sn4￯y/;,Vdgc23giDaa6 sBߵZSFq‚BdFm"^.Y9P\\:N1] [19e_VV&׸;&BhT(@>aԈۯ?- BgΞ&^5kףA6PjU>Xh4b_eF|4@@@ + _NW=Jy0h$T_Wj5ysNf].=~C.ܾG(CDD$3ݓG$V\2> àil,-F@'UZ <@jA[Xx߿HwOڭjj߸|._^u"7Wp-TQZSa2!\Vbbd߻#~ ~۷Ư(+rc`` ;.+ѨQc,Z8qqZquTvțDŽ;C;ғ7+\IW# B,!kD\\s<׮v yOhϺ%$tƆ a4h<^8N;!??qo?/]DII1}e}#<<\OvN.|} 1%;ɧ1ud^ۣIXZ\RSU'}Ⓩ㵾baI;`Mj5O^uIԶm[Ыk<۶m!cVEVVMc}?~=.Gvԙб8ڿ:Zvț23ر zsJOߐʫ x|Fli:uJT,#'K3!0{۶B EEE))#xwF{}%9u|,7#GK zMlǨ𡃨S7fϵ([]b2de 4$7oQY +S'ߧMFGl5lN"P:usЩj2u}0#GF9 ;TL.Bq1L:Ww:'a/PTT$;6w@Vq"?!~s0rrr0qso___iVU<]Կ-;WY~(NC᠔\!W1#"",Zj_R,#'Q܅RaƔ~clR\ )ǩHeWdy1MrGQs1]Ұ2ttR̛`LBzjUB*zG&>R\ )ǩHez|b*7E NbK,uwo#PrTv,녋WZ>JEn W=7jrS<;7AjN9NE*$+RX !ěMZO@MP}SSʮ"J cddo1vBPxT)THR(3GT(G:8*Jy0`^(w擙|CS(gzG4T)THR(@si-&wd&66\@H 1bcc+Hq5T"]EBq5OiocĤ-%-Z>KZjasedd^ 'J?'~OI?'GL%珐3)}Ebb"222J*=ztRqa';A#1^KUZh߾=*i)3 ӧG` XN>>ʕ+mROn mś0\ c/vhk㑜7n~ܹ .oE^߷n݊-[GA-lϟcǎa̘1GW^yc6L^B|G4hwosRRƌ+V?VMsu>_j<ҥ ~ ڵ }v$%%Ҕ++2>xp=zT2_~!rrr0yd5Jԟ|rcxEo+wK04ҲeKҲeKidKSȸ:-[3g~GHVV!7nHՋ,ZB… I޽ynܸA!T^u^:!MU,tRޤϱ{nҮ];B:III!?Fa7ͼ;Xx1Z*Yd [DD)..&RRRBj֬ɺuԉܹٓ啻򜑑A|MKZ-!ǏgLw+R֭[/L!K.dܸqCBvJ6nh#pJS|xIrss !*"Irɍᕡ=׮6eO!f h-S3u~(**00Lt(,,Dxx8[*Up]a@ՂbNCII l6Cd2)ʬw{xxL0̙3Xr%KQ@dggCӡ;DPXCV ƲYCӱ#hZLOO/BcϞ={N* ޖl,\k֬ӧRYAAx _xqԮ]׮]?7n qF|ՎXp!N>'Nʕ+K2W_zAwB&M?#\,',,Ky۱c7o{ A\\v9vK^:{HHG377!!!dxP׮gٳgڷoԍ70gL2EOZm$wE͚5]+0":~@pp0~;Q Ǟ={ٳg[n.xCCBB~PPF?SuX 6… ѬY3TV M4ѸqcFmy\v a0h lڴIҟ|rcxeh+9`˝QBcÆ GJJ ϭGX|9 1uT^~=mpGFaa!v܉=˞7͛7k׮E.]TɬjQ*j]S);X[w^HMMd|-ZˑK>w('99ϟGII -[VZnǺu;\)<+/qcƌh׮rY.]D@ǎjsŊ1N|{聯FӦM瑜VZ>QN>1#FZjEZjEZjas9rF?@z= & .eddvڑ 2c (0=h4 IDATus+(( u!F gϞ%O>$ILL$٬;wxCIzz*wN|||dOq-VޠBj֬;7%U Dדz'N_pCPw޽K^' 6$gϞeOz)h^K. 'l:'L& 6 xǐfWdlݺۖ-[еkWI~-Rc=bܱ|ēwU Wʸx #r9uE'//C6~_={<Ҿpi 㰖+a\QLu-ÝMpM$&&֭[ :999֭[,ȵ`ԩ_u+'9?GAARRR0p@Umoj,\AAA{.RSS1d]̚5 cƌa aر5k%sޖg5c+{>N\+\(--jrnisI!d6oք-yyy`0 rgddxJfϞ-6mUM@{… ѣ6=#RcR3l0K;ҰaC2ydr}q[_~͗qoA.]J [o%KzU2`svLjqc|||H˖-ə3g+KG!YYYBnܸ!;!Ջ,Zbi\{f:uDzIvɻáƍ_?.EEE/vqݭ0lXXPZ;ݛkeD)l6;e]USb{UBe:=r^:a WKHJJ Ρ\9ɹ:t zraU1U;A"FCƎK ƍIΝd\Yx1Z*Yd [DDk̕5knrzPQ<ˍeRbc};w={B,})#\zR"ߏHJ}u% rHԏrdg>Y8sQ3ǐW{ vϕ0#Ztl6B,Ԑ H`` oVJRPP@!ݻ#Gqȹqӳg}F^z%RN=*jٲTzZYQ_@@;Fh?1V +d"b2xwMOղL&a`'?+Of([fHZZ)))!;w(ڵkI^l*Be'FQvESL&^b3npPN* γX&՗ɨ:2~Y7$**'x-79ybG@FI~ёnϹHt5`[x/t!~G} Cvv6Ν;vǷc4oΝ;سgrrr0{lt֍ +E]a 46WǝTZ999nyAZwֻJZ{SˤquފZ]srrtz!!!"$$ƏXƍ3gL]<Μ9mB">>Vmۆ$Uych4f3||| _h4'Q=&>DI_HBYd{+'9gϒXHll,9{p/yE y饗/iݺ5{~]@z=iذ!"<ˤ 9\}p>b֭[Ϗ>:t(]p\rH]JqCVFoh3iiieevw!ΝC\\|||вeK\xѕbR(,غu+-[k׮xS` lpgZ6xv&L ~M$&&֭[#F ;;}]'$a֬Y3f {cǎŬY<,>͝iӦ!%%/"O`ҥ8z(/5k ,,&CػQQQXr%/ɓ'Ae |XRyBy+5B_oԫGbL&={6͞=f͚c3͂ۧg&|noo;wҴi垿}׮]Kdh4=_Z[[8ew}7=lsƍ:tSyy9{o۷ Eǚ5k>ZjHuuud۩֭[8br:^wZخp;t:yd2ƍDԳJ6m`aXhرTWWGz,  X$@q͊+v;ʕ+yXb_< iȐ!yf""z駟_o~*..&"ڰarH-W*,^ԩS4vXI_ҊF;egZҧg32fxl^d"֗{h44c pႠb;zhy&׋N|eǑao~mrc{ EG}}=uttPbb#G~8NJJJeYYYTPP@Ǐ6yvX]{%>xrIJOO'"i!%MKK %&&ZCDCR6l{,Ͻ]x"w$&&j%ڈ#xXb_ǎ%KQNN 4w\""ˣÇ /HTPP@DO>G@s*_NU9J+!Wo0sX(L&K=/ rf?OM?u\P)Mqv; V1zhFˉn݂V x~SSJJJPWWZ\~otBRCZFWWSRt,Y> ǡSL[Vީddd`ӦMȐT)bÆ  . * ]]]P*6H>K7}]jr8/1‿[~\rw;СCv~:RSSP*H-@s)mGVpގXZ)yP(pu+: H A|ɿ{&M¶mېCJ?0m4+5k_}'UjY6 VU=@|K+%o_q o! 5ǡ 6 [lc޽֭[xqQtttF=/_\̜9zlcÆ QPP #77/_Dyy9fΜ&L j$$$x=@v'oީs{Ejرw̞=;f2NE O<yAؕGpeR+wNNl7o-I'RæMh"X_bWe9k,{_j"_*_1T*U4?Sa2?߭?͍x*))fJOO8*,,XA/TR4j(ھ}hz JNN&NG;wt@:.^H< X6668JMM/ӧOSJJ )J8*++`u-n| tԩSBќ9s NE0ۗ@h`0PSS/=Wl"t5>t9A]bHƍC&_K.^:z$zXZy/Z4 E>3w^62k㟁+ D Lq8طoߏ'B 1,c`cE+|{ C/21-[VX۷eee6`}`0?e,~0~J?ɼ[6a}`0?e,~0~GG0߲`0 `0 `0 `0 `D l`0 6% DEEa8{<yH2dF#;I}7u-&)`޼yIIIi.]SB`ƌ/i&cǎy{&B|믑C"!!F|봴9c/IU>ɕ\@ш5k]jkk#׿5aZ ӟ$1`k'Fٴiᅦ`7D=xgaXcŊ3`׮]xvlܸv eCN>򗿄`lիWq]waÆ nǕ+Wo0hDHHo!8˖-åK徫NfdffBӡVP`۶m{W^y[lŋ1tP7{3gt壏>|XhQ@ 6oތ'nݺlDGG`0bi|Rbs'uwLiN*iAZ[['x111x'qܹ X`$99 ,@QQ`0 ?~UUU(p4|'r'DLL Z- q!4N1FfdeeA ++ qBkנcglX6XclƼy0|p #|UQF7O8ϘL&Ow3͂ۧg&|noo;wҴi垿}׮]Kdh4=_Z[[8ew}7=ltseJKKvO~B_}]6tm""2TWWGv***hݺu|Z1?i& ֺSbt:yhqCOZ[[ IDATiӦM !, ;Hדb!"q8*..&I.p'sAA=Sw^rJ9ڸq#WXAd۩V\IDD< iȐ!yf""z駟GJRc`ѫW={P{{;WRRСCN/_HgZҧg3e緹zm&Bqof̘A.\ =z4ݼyE'\t2puhٴ~zAltlDD#Gp:$IFDgQ^^uuuIJ`k9'tN, Skkklh~~37a"Z̝?Ot#(f}Ns'sf|8&Mm۶!-- CRc`w}7V+ɯmyyyP(Xj97:`B_@8TUUfa˖-^|ݻغuk_/"=h4ӧO㣏>‰'j\\|N9sf@ف3fHuC:A=2vXr;fϞ 3^!6nM0PHHHz8h}Qر l(,,DzzsqQ8*w8=#///L9_#;;CEBBF#Z[[y@iiiA3bX JJ B?~ Fk֬ Coo+Prгi&Q˱uVXV?ʕ+ӽ0ZXp藜k.<v;6n܈]vٲ!'_`0l6ի뮻aÆʕ+A 1:0Kn!/aٲe~k~ss3233PTTw%P(m6{hBUUd 6oތ'{UL8Z:u*4 F7|K_EE0g4661ȭ7d2L7FLL ~ܹsΜ9˗#::Wl-Mrr2,X"ݻa00~xܺu و`bϫBTT8CZZ>pkO"&&Z8tW@f3hfqpu@mm- jjj׮]^/<ʧ7!Ff̛7ÇGyyyO>8})\L&JOOfS۳T\ItM{{;ܹM&(vZ*,,$FFyhJq_Bt/^LEEEt);v,<%%:DT^^N^V^M6iժUmaHk9 FIOO'OJ?(55UPK:::(&&&hv2X,;v,Ց^'BDDFnSEE[?8*..&I.p'sAA=Sw^rJ9ڸq#WXAd۩V\IDD< iȐ!yf""z駟GJbO?ycիiϞ=Nկ@WDqjii!"(_7H<$.`&?S {OC6xj B^AOoZ}`ۡP(Z-x⻯Vp8z\jljjBII P[[ׯ{R ˅h@0G$Ե#ddd`ӦMȐT.\o;vcccaXVaۑ۷otrRq+4* N@xd|g8՘2eJXl+rb@]]mqB{{;ƍ?\}~cС^yK%bOrRck|GC_mSـdKcϻ_|>f׾Nlhhp{ x^^ VZ#G755V+Fr;Gu-Luu5233%wGiƌ÷F$%%`a='#F@uu5V+^{5,\pm/rYos=WJ>fZZZj111HMMEII |A >&M¶mېc'X T| (_7メ/ a]p*l6lٲK{[npf͚{555^]|9smۆN߿i2ȱ7qs?SO="h4O{ {cȟ\\|N9s&/0a***Vr$3>?رc`PXXtIfggѣp88x rrrxYNNl7o-KRb,*FFgg'^yF>`KA' )w? O%%%^2LG+7?_&K.^:z(IΝ;{۱cR~~>raHk9 !VIIIlMM z8ƏO7qviqŋyӧ)%%J%qy.no߾Mk֬!VK111?Oy744PFFi42 ˾+@׮]m@ΝcѢEh)V>=F[,ΦD*++k_|݈ՇXkW)z&++cg`}~8ڼ {AuI}`0B1Z wr c= _30,[ Zطom! X`0 #raqy~d &Vκľ`0 @!! ~SE`0 `0lT*Ul`0 `0dQ7{c `0 !+r=-` `0<3B+-TQ(ɓ'ٳ^`[[<9iu-~&I>cL8QQQ4i.]$ܹsHNNFɓqP̸űcǼ EGN>СCшV^>PzZZZP-7sPF?#RVs}}Z[[F#֬Yts ^S?aM6ʗ/_[j?9V\)W_hj… E`]vo۱qFڵ+̖9_fW^]w݅ 6 W\ Hm*@gg'Bq-[SfdffBӡWP`۶m{*) l޼'Nի8q"Z->7͘7or/}fYYYh4Bsss@}Au-~&)`o?0bbbΝLw,_Xz5Ο?dkn`v ֭[Ftt4 , ^UUq'˅^#'ϟ?'|111j(,,ġC8p:X/.7ׯ_BPp5z/C)V>An1ZLm9N FQF7ϟ=bqSO=E{+W7R[[[_\zgoNC ͛7믿NO?`>R+t{NIICQ{{;S||`:1{x+1δnOm]g̚=>8&ɓhCҌd,`ܛF3fЅ B}GM7o$"zщ;Lh)su:577{AjQ`8bĈ!ZN|NfZv-M2T*%''ٳgy9"%.;v,YBDD999 /ܹs(//>/OI1ZL1nM'fX 0SJSJ͘Nf͠tedܹd2Ha2H>mKnϟSOxW(z}zsB/p '7j8٥V/\.p.Q}iu-~>شi222$ obǎXX,jv$$$ۡ0=T*tuuA\VA98Ԅ%K>qƔ)Sb{_%%%8peBqƍ_W\}݇?1tPOh %%%Cmm-_.NCmSـdKlpMt4* /|^l6u:/eCCÀ3l0XnxSSLfZZZjcHk0ܗz޽3f \ x_n1հZxװpgV˿u,..=^*\T1i$l۶ iii=/A|E8bnOP(j*9ro:1{`W}%&f4 8.W*;0ǡ 6 [lc޽֭[ܶYfCMMnxىW^yl=zDNNN@}#s?az EEEh4~M>{E[[3hLj,rssqe8Nc̙l„ ZFBBCʑ@裏bǎhhhfCaa!%+rrre yPTTlA]*?̄+`-ۓ˗/#773g};=bq|+)pQW&+p/bpʇ/ltBᛟLhrKHSBB=z?nX(;;뜆 FCcHk9Fh+$Imz=qGǏθm4|8RSSŋӔBJ8< Ϸoߦ5k֐Vz_ƥеkxйsXhi4y9t{dtsNbm,xg`223(cn&ʢy4\7{ 30p`߾}ؿ?Nm^ F `0˝=BP ^G/|eٲejž}PVVn `0 pZ xܒݽ龕Lf[oC~`0 F0]B(J(o`0 `8B{ⵀa(a0 `0rAry}G0 `0;~\( v%p`K`!m>:;;qbcc W`܋!B(L<gϞ#`<&h۶wIe*vW.8Ry&DӜ;wh4/} FűcǼ EGN>GB|3lFo>뎤yFKh42dj5,`|+_wш5kzmKoʕ+vy<^݉DRʵ]K?4{ ܸqC4ݫ Պ T} Fٵky?v7nĮ]lY萛ϑ?.]bI` 6hP( pe˖ҥKr~ss3233PTT%m6{ba1[ 6oތ'f3hf$''c(**޽Ǐc㐖O>$\., Xß KHz IDAT/B/rg*p!vj5`}d2ܹsnfYp,d/sN6mڵkl6FSkk+UVVq7ޠ۷oъ+v;ʕ+uF#Nn:^xb***SNرc%(MJJ :t۩%/VbF"Trmџ`HƍD|ƒ ">#X,;v,Ց^'BDc qT\\LN}]2OHb~zjlT\\LV$ gyHiOn=+p!vsu+}j{:#;;)77{1*((Sd2L&effRfff0MЌ3… +wtM"" jQ`6bA#G'NxNfrwovH$\eom#8 R\.c0Eii) 6cbcLVVǩm r9⃘߁0~-oȑ#%YR'?c0JBWWƘ&,Y}8Cuu5L| w9l].dR}ٷ,Rrgu8Pv: H$XޫVB{{;n߾ Ӊ.DEEᮻK/$f}N_0 6hZl6@KK Z`xvu?@6lQoq<( Z GS  2 g-rǑĘ1chlldoccFjXVkXp_"p~xgZ1rHI``qGtE^v%@G/Z4 s8*++VQQAɤhΝ+C1_#H*S˾~yz=qGǏZ2Ʒ1OR*on#!>-Ў;(66.ɤ(fgI dڐo LNN=_h֬YEYYYzPo 6qDh~!.]: _x E~.p3te wy1 Ɲ\C_/6oyDg`~_---hmmEgg'Յ_~Y>l2hZb߾}(++ o{1土\0 2vWR^ q)a01rhChjj⟃3f T*0 `0C+0?O1|p$&&щhDEE[|0 `0;VJJ, *ga0 `0aшbAtj5^0 `0 C6DEEap8p:߁a9 hXg0"H!Lss3nݺV J7oBT QLB(L<gϞ#`<&m mBTT q> 7Lc+"ܼyIIIiΝ;dh4L<O>رc^}ɢ#'#aܖ3lFo>e󌁧A95U(mmm0XfM-}?+Wq<KDطo,Y!2ڿ?r/7n{Wa4aZpB_k/v?'ncƍصkW- r9mKؾ}{yrj8(\*,=8˖-åK= N"/m۶{ETT$ۢP(yfL8`6F,477 y-dgg#::]z'NVÇΕRbek/ &`ܹhjj⏋tR#<ٳ$?sL:F›oF 8CZZ>䓀elXFFx_N*iq,_Xz5Ο?/} FINNƂ PTTؽ{7 Ə/0,q[@񶢢qqq3g%.6+ 8,^ Bp3թX[СCa5}d2ܹsnfYp,d/sN6mڵkl6FSkk+UVVq7ޠ۷oъ+v;ʕ+uF#Nn:^xb***SNرc*5kP{{;}j*>T_!cJJ :t۩qw}z}+Sa?OGNj`r A}%ADD/} F0X,4vX#^O@F.>G¸-wxzjlT\\_d|Bx@=bu*VϴnOm]gKRAA$-xeͥL& ƽi41c]poftM"" jQ`6bA#G'NxNfr1_<@D=ILL/}&GOvYYYTPP@Ǐ6A rlRm#E(_T].~_1 Feee1?c}(ϑ0n(~#G$ o xo؝4ShSPP@?0-Xf̜Nd^/`&~ǿϟSOxW(z}zsB.jtPp:8`gZZJşV?#p9)t:R@D/󱩩 %%%Cmm-_Ʀ&,Y}8Cuu5L#`T,{kcNjPHll,, j5v;p>c0JBWWea9և9 㶘߁⭻l].dRcqocyrbu*Vk ѩl@%r^b95(|^l6u:^CCÀؠjat@ nQ\ aÆj2/ttt 11?. q=_MBUVȑ#1հZxװp€>V[CE03f scc#{C6'xߗX"pRjbȑdR}Jr3_ߤP(V1<.Ç ǰa!]6 [lc޽֭[Ğl=zDNN`\\|N9s&/5k{=@U*F-V&Blذ8~8 $;';-xeb̙~ߚf„ ZFBBi+Siȡ!"L>{E[[qfY}9@>c;Pݶm:;;~*&꣘͞FTyXz[ N'N'\.읝lhmmE[[[wD!~!xYP@H籚q?jkk%`&z9m1;vPll,CIQft'gx"VlΦ]C-0dy?? se牿g`}~8ڼhooLJ~K/28"{`0p#q[|_dҟzg`/_ . P(`?,[ Zطob[o{BDJx`0&RmC ˅.t\J{1 `0 ?]Ylٿ(l|A HB<`0 ` (ټF`0 `00 `0 #b` "o w;,T N$HYG "y}2o!<7** 'OٳgE@"O?+++P(PYY0fQ[z;n^rlBz͛7$ܹsHNNFɓq~c0Knn.;uG^^^, =r9|9檪*h4`?Sހ]!"`4f͚h[~+Wf̘p99sȑ#gbƌ_={Yʭ ->/{ ܸqC4ݫ Պ :T} Fٵky?v7nĮ]lY萛ϑ06/]آn>Cz qXl.]$(]y777#33:EEE^2۶mýދ(TUUIEP`͘8q"l6#++ YYYhnn֭[Ftt4 , /z*&NVÇ{P(0. ~!??@G}hѢ~=~:oKJJWn8Nףhƍ\[[ BkנEYʥ FOχSJt9s˗/Gtt4V^K_`v NjUUUqHKK'|.z\}/P(PQQ8̙3d|t? /^ B!Y'y^Bz^&ϟw3͂ۧg&|noo;wҴi垿}׮]Kdh4=_Z[[8-oݾ}VXAd۩V\)h4R]]vuŋSQQ:uƎӧOSAA{ܹDDI~)=#TSSC/_4joo'W_矧"""***{N6nHmmm=,P+p3Pii)m߾ B7o&"_~-K9OG\q/37p8bbbƎKuuubqw}z}r9|1xzjlT\\LV$ gyHSf3%TLVu… )77maB#D!Y7FC3f̠ .:(GM7o$"zɌ;,-A(11V+uf#F;rH~t:)))t:jnn,I;!6nHDDIDD֭ٳg%駟RVVegg7rS u89v-Yrrr^yyyta"̲ctˍ@)J>#XҰaè?&6ndeeQAA?~` #a;om9r$Y =C7 yXf0wR'3j\.dF@T*wWWd3JjT*nyM>hҤIDDDMMMPss3͜9OW_o$Ecƌ#N/2d@bhAsY,>|8Y,V"̲kr#mCN>#Xtuu⏉4gCҙ3gavϑ0hN.ۮw;F>Okf׾NkhhZ-l6ZV0]||‰'_J#??^{2999زe `޼y(**Bvv6;, p3}tݻmmmسgLn &L@EEj5ds8|1xضm:;;~H&JS}̓y!V/}OJ{7&nPQ||}RRRHTqTYY9p cbc<ڱcR~~>,E Yob8} yXx&=,߹mS1H$ q;1ۦG4IzJL +sԐDNbZme$UƈFbbBL :2032ۙaaa6>ϳa^wZ]k_%Z\m8pOٳgc+^ى}a8v̿e _hѢ~eJ梦&Т{.[tg0X|D{KP@'q&tHc|e%K`Z!,ޚ5w`zŋ۷v *~^ Hސ7c@0t_ڰX<`g˘袿3g`0 1ppw??!a6!D}`0 ` N `0 7 `0  >0~@Lo`fk` 4o(ގ&H@acLRS(4oOˍ(wbjڵkSUUɓ'CTbʔ)p/d08RSSqac.$S/_ F`#''njܷmWbBd6/W`l>kmmENNVX!y]{fk1F` ꫯVqUxK,ƍa0裏bҥ>۱vZ̵dºu}ֻ IDATK?T{ j:;f͚>?E+z Bŋy: e҂ٳg#""cD͛7{J%=eĉu[OubdZLwhZqOϑ <8s$d0y桰sNj}ݸ~:4 Z ^ϥ+//RB@||<@ULjgϞ/~ !,, x78pzNdT*$''0a@"駟"::!WL!!Ca(--?ӡR0f+.= s7iޒ~]ī[^|E/^؈:kXhGdee{!552*׶rg+!6[0+W(ߖL81EII Ν;ǖ-[pMX{-Baa!K/aٲe+RgFkb޽ Lf8gϞŗ_~m_f .\[naܕСCqX7׿B8ʷ)>ࣟyg?Ccc#N:śҥK_ׯGnnx|x7}As0TҵV1Zy7Nr;a|g3{FR<@Νswyرt5""jhhM*O'NPrr2i4:zKsW.o}Oee%%&&g艽СCފ`xDII 6v5juvvl(.,99ȑ#1Yʕ+iڴi$(&&N>ͅ}#G$@DDz"##ô`""JII^x̙CDDiiiowٿ)GM7n "ajdǧ{"a?>N]gdddPFFSzjIj)??ws?gϞŪ95p & re:'OիWT*\}ORR򐔔-<׹s+`֭pjL&bTu\.bd2f@ss3,X> ǏǴi"z8pjkkP(`Xֆ &˸뮻PWW/p]we{_×3ўf555\ӽB[7CڈK.;N&՚_5:a?""IRj!!!Je0Au_8~8fϞgsNlذy1Mm 44&{~Ǐ`0`ǎHOOs{ƽulĈE}}iF#ƍ !..Ÿ{1|pL27oF|||KOҏGy0 ={ Hl2;toE@0 0p ={7nKYYY(--EJJOd&"f[0|͙βjXUUVZBT*_`T\xfHHH&M2r;<ܟ:/\[nEcc#F# QZF tvv.%%PzݞoOOk/Mx_xHHH/OHB~|bxFCBP*..vtH#F qsyBaz@W\qHjIRfZLXFJJJ"JEjK.O9Й3g\aۄ_Whhȑk.(&&"""h۶mt/Dž@=NiiiF驎 rqN۷ޚ+*++ `=qG=dk nߟj(/^ bƌػwľ}|/C|W[E?`0 #W ̏Dr1;@áa!ꫯ7o 8诶~`0 F >D7[71,\ `0 arB`0 ` D /ؾt#`0 `""+'L&? W__f0)еzDRS>ޫtґmST1cF7;=܃b|q=Z>_3m__]L}^lhZ_v QQQq0yd(JL2.\ Gjj*>pwEZZZ$[$ ?)۷oڵka2t^no`ݻwo X̗/wzzS'{hZ!J]I@&9lRzBŋy:[ZZ0{lDDD!͛}J >?<>cסh0djz.N̟?~!OJ1cW^򨯯ɓ~AFNdT*$''šׯɓ{T?!+W N\~TUU: |!& Vug->sddd ((>,Μ9 `޼y(,,ܹjw}7 tW*P(*<3Bcl„ 555H$|駈v)}^@DD>•ϕ&NY__X޸%!zlu(++È#0k,455qaBٞv|A!QSR T \m%%%^]|\xQ0ncc#kaѢEL&vڅӧsǞylٲ7oĊ+@7-]a0~z:䑓wy;~͚5Xp!nݺc͚5EEE>Qt,TTT{=u__'Ƒ#G7?)~_sDžڇ3Bv7_I9H]@Dr{VKIYYY6Nr;a|g3]%um*x:wCcǎk׮QCCo:\W^ӧs㵧c/ô`""JII^x̙CDDiiio,}z/m׉'(994 =z7s~B6ћp"Q\>Y9uk#0>ǻHOOHT-Z-Aպ\f#\NV "Xw[,:tG?ׯ;ėdC&̫~#?~gvyo444`ΝذaCb0a}_h a0c̾fhii1ޙ˂b{>|8L͛7#>>! ֗T*ZF^^8{[Omh_`00j(P *Ҹ_X( h4"??!,++ {A{{;6n|I RSSqEf"!!eڋ/"55 x|A曨.^`i4TTTDJJJ㩎L&q3g/൵=b{_@as$]'po7TUUaժU(,,db 1tҤI(++\.Gxx_lK^~n~ccCVz!v{ŕ_+++ k6tƛyfttt` "4_" $luVl͟:t RqqCND1bPHHGˆ._L=MMM4w\R(Gϟwbbb(""mvpgffJ""FJJJ"JEjCOtdۆ BIIIT__#|?Λ6 f[;kϋOuw,**b3c`΄Г'ORll,IRR(9-W}/tO?:s|G_Kp9 Н=m[ni"naBrBFmiܖNZ$Zlwwueݎ'CٳXu1ᾢ0a:< [:2 `f󕕕EMMMEqD"M6"%K@*j~y"H߯o! 4/FXXBBBo>ڵ+"``#` f8+=yf8_fܗ;ꫯa0z0ԑ`03myfEDW_ģPTկ~啜^zS`s~ƀ@r5DEE$ޙ3gJSɓӯxk'TUUɓ'CTbʔ)p&'/bP*p%97{mhRSSqac.$S/^enf_b@.W@*J?~ϱݣڊXwpOe!"|3g.]QEزeWryWoM#ybW_}ZW$`0 ==_M;Biɒ%ظq# }Q-'%K`˖-hkkC~~>q / VfXv-wd2aݺu}/n ":3_=[}!m/XQ(JeZZZZyU*VR*}~_QRRӎ;i&7n\:ODd4vjRT4o<~:ֶ}4m4R*4zhڻw/ǥKhҤIJo4w\R*4w\trI&~ꈯdzh4sLjllt@2mS=bŝwI-ċᾂ}{!R(${*.LHWB^]+oޭ?O?~?8d"ZtC{͛7{T?OuWww2-_F#Ѳe+{=_] ;1@~I)tJJC)=-3m*x:w[9;]FDD s,OJJ }\QFql6STT|6L&CXDDԅ#G` 222!mI]t.lԨQ\`uOoi 4.T*~[V}g);;9BDW^]+ϾxB~~YP!= }ᇤT* ) ׿Q:"[nѸq88A,аah׮]11@Pg\~ݘ/93oc }4":Y3rH0{{_8qHѣGx0 ,̇)5%33R(= ?m?k-d*y_.j%.C)]:D?я]RdI&̫~#H?~;v@zzGe{]x['U;wĆ ]عs0sLd2$%%_GރFΞA,p*ޞ&޶1!:3_vg ڿ?Gv97;aC*BV#// P*=G.A.W@P|Z FPFaYYYسg۱qF‹ IDATO`0;/l6 .^xHHH|o&d\h4@gg'<^ק':rUww2m޼ؿ?, f[#v_gbݘ6moI& rhii v ojə*Z PTaBz >}:>#fӧOΞA޶:V_&|wO?GY8rCθdeebZr2(*H2]߅ -dBCC!LQbb"1 .Kzd|2rM655ܹsIPP\\?e2ڶmC؅ (::é;I*)))T*j6=7:⫻;nJ!!!ݏNgb0ۺz4WxsIPwM555e v}y8q"jg {z=ݱ,;aZ`!-ZzJjIjiήՓUzkw*q2dz={?2Wtvvb߾}ؿ?oYH"tmxhw61 ˸.9>P]]$ :999/}xLQڞnw1V[UU&O R)S… .9s111PT:u*N|ػヒITgwJ{2_~B{ZV]o%sZj999Xb{ j:;f˭:mMM ~a<3hnnƚ5kl2:Omdk{ҧyyyK,ƍa0裏bҥ.@NN ~۷cڵnɄuaξe+hП}+@#<»}!9*-O"VR*n꼯())iǎ_ݴi7Y dLDDC/_&"K.ĉ?6m)J=z4ݻRRRѣDDta "G}vP>,YPSxxx\vj5T*7o]~ tM4BCC魷r 6Pnnۼ{4i'dk{ԧW[[[IP | 3W""ڲeGcr ": 2"aLs%RIs%NGDDќ<}4'OQ}}=?Ag譏^GG777Ӝ9shذa{n^ʧ'x|H؏S6 s댬,ʢ JOO,Φlj䰀?eZѶmhƌ.Å&;+W2#8Yz5ݺuLldggӪUhϞ=TWWPڵk $}oP[[Rhh(]x㩭?.]DDDwy'}7-TuQkkksrrL&O?͟ͅ? @dw˖-h"Zn@{uhb=bDx/)..eXHHuvvQ{{;LN^OǏZ&^ODcB"2Sttt Yȗ JJJd2QQQ-]~_RII uC뉈_ze9)O|t|iFO<oӓs;hQ^?!&[3.>_]}!\|ޫMRmZ PRRBÆ ]vqDŽƐdΦ#GPkkk Pg!_F$/FIdDuaDuU^9sQZZpQ֋hy ѣGӍ7Hط'O)^_.`q PdG.sR,8ׯӆ 3ƍG~-EDDPGG755~;zG?CإK}ܱ1cիWZy_&9L$e2CMWQTT544xW,:h[3.>-flW_<;`αuttPHHOd0X,, wLh ijjYfR`:uT b/#r/b;a4iرNG&^OÇ'^Ot֭ne{:& z1>/!?oғ']Y=œy#Yt:z@ccWyqo1brssQ__JPCBBJeNKKD"e;8ܹ?QXX5kVTWWPL&~aÆ`0LxK/yWELg0}pq̞={Q / عs'6lgܸqhnn455!**ʷ3NpopǏ`0`ǎHOOs{,zj⋨@{{;jkk\NMMŋa6QZZ.ěojDGGwKO8{ۼ+b=y QUUUV*7{Akk+vލiӦEnC1dҤI(++\.Gxx8ZZZ(:eBh4TTTtw)))χZ ?q&tHc|e˹tCnn.@΁fŨ@kk+f̘{L۷2u>`0&rDW_{7o{ qlxO3 |t/j\-d `0 #. `0 ~20 `0 J F"2 `0 h A\.`zp-|$ J%NӧO$a/ۼb0Z,3Z^0yd(JL2.\p̙3JԩSqI䤦v2ヒIT˗/C 88`82v^vOџo\S @ڊXy: `g /Y7n`>K?9990 HOO2oߎkrgM&֭[۷X2!:?cPtw܁5kuuu>kh>K=5A_P(xb޳eﷴ`و@aa!jV"`Rrr}ᇘ>}:T*ƌW^y!̙34i̙fS(_ĉg^ D[_1jn|@PP}Y9seSNaɒ%2d/_gXZ̛7;wBVסh0djz.]yy9J%  =FLu>{,~_ ((aaa(((o66t:$''CR!99--- &p>O?|O+SH?0P|NC=Ç!^k+[~| ӭZ.\Ȼt: sTT=nkkm۶ь3\v_r%htht-:t) Abcc7ޠ6*--P+V6zhٲe.Ot|ak׮B""*,,nbtgZ!Lbb"UVVv_~%Ź N""joo `8iT[[KѤ뉈(''jkkd2QYY=\BAEEEd6_@bsvv6ZCuuuкu먵SII L&***K/K*))!"-[СCiDD/SO=Oҏ+^|9޽'dgK"a?ޟ8uk#0>ǻⶌL~Sff6iZƶT*zܹs~;;]FDD -[|,X@DD))) /М9s(--~nr82㊁GM7n "aN6|$,`ӻ0YYٔIZ$Z?Z(..vyqYqD"x}s\}BD\2P|ǚQ\\Z>sl6C&T*,wy Z~>'OիWT*ybZORR򐔔Ν;W^y[nu^\Ʉpj_ZdX,J6X,\L k\\`>( ?~ӦM ":z <6rN6 Bł6L0/_]w݅:|_| v(S W ToT6>[+?q&tHc|eeX\=f ֮x#""{)}ZVZZ$ -[wy[ hooȑ#}gOJPCBB[x`u_+m?ٳgܙܹ6l3n8簾&DEEV` BCCa2'8~8 v؁>aaa[F\{h4nܸ0@PPP\\{Çǔ)Syfw[!x@wy' 8Thh(;t:JLL#FPAAùSNvtrdffJr[~\1P}^'FC#G]vlBԏds[VV60VV5طoߏc[بDnn.jjj- sb0 'q>g`sR) T*A'RzŋQQQV̘1{ H}Nff&h1}@_ٚ+`0zcُw=acnjD6W_}5"C_ٚ+`0zcǏ~l@&B"pooa0 `0:k ׷ `0 <]ȱX,Z],`…`0 `.RVVHq<`0 L>I}WyT:DEEq\AD뮻/zCuu50tP/˗/C 88Ᾰ=}e1qF@պk%믿vhw}0D?.T]g#&{*2rb+5VBFuz ԭ+΋/!bcc1~x=zcWkjjgAss3֬Ye˖Ge>cPtw܁5kx% ÑM8'W_AVի>cdddp펵F_{n|7Ou+$e.'v?KqIeHp woWw /ƅ \;o҂ٳg#"".޼y3ATOt{7={j*@}}=&O0\r(J( 6mڄ|̟?0avލSNyTٳg_AAA CAAx 7ZdxBl67Zmӧ{1}tH`􌂂<3:PTHNNFKKKJRgD"DFF"2273/H$(++È#0k,455h42dj5zWǕr[ ͷ@DDDd &L˗/_ĉ=1yd:׉Pt7/&og9Kӹ"D"T*TcZ}t="ZqO~B:vU&g颭mF3fpnyʕTPP@FrrrxիWӭ[СCP(ڵkDDi̘1d4hTXXH?i\~ l6믿N\؝wI|M:pWfvv6ZCuuu0zN_F,m!n[իDԽ8N{/ :MF/_ +l2''#F IDAT˻'"zǩL&ҥK\N_:;O>$ݸq^u͛7|r2TTTD˖-sgNN֒d2z駽*]>|>^N֭[G=ɞ/}Z0?gm⤲3{3zh:z(fyBLC[4}tljFI@yoll$"N@7n{NQF7j(WfwGeqo1brssQ__U31{l=OhjŐ!C| GKK h4nܸ@P瞌QF Ľ l6{U|T":-d?nm?Oz 큟P*..vtH#F 貔~gg'M2.\h  ɓ')66R)) :tCzH.Ә1ch˖-W͛7iŊFAAAA_5=l#67ݱ*!BA)))3U,))q8HIIIRHVSsss_s]瞌qnJ!!!=ΝK ^m>R|Uoer W^ uGr:OHGIO|bo[cc[222)++yd!-X,X@CVK%YB*_v2dz={?v:;;o>߿ǎ,#6`0`k u:12|eJP*Hnֆݞuŋ#,, !!!طovh 8`0 k#'0jE`0 k  c!H`v=#`6! ,`HWa `0 C"$+/2 ry-d[3 `0b2^x0 `0 W+v-X `0d2I@r( r[k`ZR*:u*N>[QWW(X,D}r˗/C 88b#hZA;UUUaP*2e .\2ޙ3gJSɓH$@"55ۗ}],Э߫4b/1پtnZt=o{g`lV`Ŋ^ŗ?~<=pرcĴizUvOcAVCӡwqG2|l~1&;A&Qɷ`Zk+TPSlY ,@{w}]؅󚹳s{ʂN… tRt۶mCzz:t:fϞ-}.ݻ>֬Q[[+ylnd?K.fq-dVyZR)/^, f͂RDnn./|?;;FL&CII `ժUؿ?O~aa!V^ u"""P(pQ.MII d2R)p96~xܽ{ƯkAP ''_}`رs։a7}9}ZÜ9s7xUUU*++db娮v 0999XvhFA\\r9ԋ90ܹ7n=z">>ZgS$  oAHHu^"1ceZ#ْ#d6kOCAT:}/վ7oFDDv4m7kc^Bwvl!'/ƥd7ffnz=e; )) uuu~մŗ_~4Q^^Gt:j5-Zذaq1_\zlڴ ˖-n_HHHoƍFcc# 99SNaܹVİw뛾#33S8eƽ{!aX( |ׂx܌TWZ?(((իWQPP?}O<+ryܽ{Dee%n޼)x/--Ń+`ƍǑlGFkO': X^[uQTonGXLJ!ۜHՁv?Z4Mn[Q^,2rW͏GA>$":|tq{n""ˣuqqJ,􏋋*--vy#":ui4Zr%?'ooo K.Qii)Qjj*;wf¸[߸8`>gΜX"/lBłq^^^~WWpsWҤIH‰N:K:2dٳ &@DDR8kBO1` cѴ#~Lg>gK=2ݷnd.]8lFU{}1߹'+|:yK/miiirJo~C+W$ZM.X^LJ9nb2nݺESL!"ɓ'Ӎ78oooN) 4c d4h n4rHMJ,ٶ&0)))6|Zlj5Gh4cRɭP 2 2:"OPPΞ= N;v`vxdffbڴidB" ׯǭ[2 SL֭[1}t I}q}Ξ=Yf 6;w{'fȑrT**` 55MMM(+++ ?~ B9F&@s}wttpq=H:iǑlɱg3tmA,#u1V|gW_Dd-dT*EII Z[[e^ܼyPXX^rJY{xqTTT 44 0aaÆ9@yo>$&&ra/2oߎz"''\|rr2233yk&ǝ7w1XmJYYV^\rQySNEaa!ZZZwާz"Sve=!!Ǐ`_|puttt`߾}6m4+F[[<4=QgoqN בێb o"חKȊI*R`` 4 R@@LۉD8Fjjj(44 FǏ)<ήmX߸cQV۬ dFMM`*A.cĉ(//w D"'|"_:wꯨ㌺0ZW|܁|Xb[#<<cƌSxOFPPPbk!>>n-Jn 7̾{ >V,Y,t:,\K.Lm6Caصk e0,ٻw/t:iZ kGO{Ι3g(66o-[Pqq`;f0\j4i$f:_c뉈`0zh{q: e-ϖ1`o>ZkS^LZٜE[׉3^ziV%kDPWWא֜(1nݢ)Sɓƍ\7'ߔ1cd24hUVV ѣG{Qdd]"v@|||BBBHرc!-ǚΦiMetvv k{oi tbcc̙3Dd_\r֯_/?h ΰSd0az9r-­]<5Oenj6R`:[bv^^cM'1.>m^hxJ[W__#2d>#,,2dt:E ={:;vٳ8B" ׯǭ[gzÇd2L2[nӹ{(Ct6EPc( Q뛞㊱79{,f͚%~ۜ:ܹh#GrKR0aT455ޟ;ّ7::il/{sa}{u*oɃ/`5\T*EII Z[[e^ܼyPXX^rJY{xqTTT 44 0aaÆ8z嗱}vף999>@Z@^Rp!@RR_۷ӦM5MIHHa0_ 11Jyo7@h[YʰzjB.ʛ:u* ҂{M Ӱk.5ٮUl<;f#=M 쵏yk { Y/ށa0 `0 s `0 xTz)2`0 `0<6%Z X1 :zbg6NW G0e2&NK.Q5jkkR '"=3ʳ>QQQpG0ViYY""" tUUU \.ĉQ^^* DO>D0uvE9_=y IDATy\m ;`TWLo܁|Xb[#<<cƌSxOFPPSbm?jkkV&1Sb8Fff%K ++ : .ҥKm۶ t={6vm K݋@so;ۛ? x}7a+KIR,^X_EsL0k,(J1j(d2VZb\<!((o“c S]JJJ Js! 3f@CCwL4 r!!!O[n!"" G=z">>Z֮z'cb؇ZÜ9s7xUUU*++db娮v 0999XvhFA\\r9ԋڹw#~5d5{HyG쬩,_8tJC:KƎ;wܹ[MLرcq]˗!HPQQ}6BCCƴ!&Z4JKKW^y-ZD-"F#o]Gy?@|M2E0txʕC.wf*..&TJDDmmmRÇDDj)$$Z[[|k֬ǏÇ)226oLO<SLgTJyyyA[|9R^^-[ ~ڷorqKi̘1\xzz:]r۩~ߊœ}.cat)=EFF ` ""^O~~~NӓxSIIE8ѯ~+*((vˣKΤl~ vOK2Gʳ%Gvkg[oE---$&Z oQ~~>eddX,&_""zg͛7Ѯ]7`{ޘֹ9ηgO߽JmjVɊ&0M.SLL ]zUӭ9Y#F&uuuV,c:󸌌 ڽ{7Ѻux뉈`0z]zG)))TZZJ---=Nw="t ΓT*"]pp0tttJ'3ȝ:gΜX"ݶlBłq^^^~WWpsWҤIH‰N:K:5?E.fo)ϖ1a&v^YTRRR{"t9 8q,X@DDos=GDDtQ9oL&55r#=!u|||k\kN[nqPO?4'3ȝ:ƻ/Dە+Wh M[[;EO#G(=="z뾮5?E..fo)ϖkzfgNbyyF!!!iر\Ukk+1z=?&VKC%VK,f7uvdj5k5 XTrk{$344C Ç1x`F ={:;vٳ{̅'''C"`ٲe8v/ϐ!C, D{{;xjz4\19{,f͚%~ۜ:ܹh#Gr\CCT*sf0l& Z[[?B \;?E.b[3얽^mK=_d2e n݊ӧHc:t(( 4H =oL >^ 7W"JQRRVlٲ7o<B#++e\k֬w%&L@QQ|||0l0ރ}ޜ#i-dgg DJJ ~u$%%aڴio!>}:9 CVIII~::::o>L6UJbc~ a͵PԩSQXXݻשoRd0e׮]%$$0 /GڹO]2YrBy\/$''#33s&'11[lA||<Gnn.i61}_hs2=ϋh4K[2;o'uNj_؛ϼ <]yy9IRzs\.m߾i޼y:["" #RI|욚 aÆǹzH*Rdd$]v#ml1Z;T*s<]EET*q˗]8c#4 x4sLO:;r 6O+fLY7S9YSLT'<_>|V7o$tm~J==6.!j޽[0lFuu5VO=- 8pӮ-H$.x:K `0b_Ĺزm^k$2}e%jDk׺;0OŋP(`Ϟ=}/`c`0 'b|Ƨ>k6Sw<b0ۥ 뗞ý@"P+`0 0M` `0 &0 `0 c``0 ioo<'0d2&NK.Q5jkkR '"=/^tg0t~~>~٥D"C҃!JƒbH$sa<ȑ#p/>J aaa8q"˟*L$ >J_SEEE=UgԞmjII /.}S; : ---HOONJ+.3f N: ?}4+W}v477uV\rG~WHIIW_} abbbxc0c ;v tbbbB^q}mۆtt:̞=k̎c0޽{y b{^c {}:=%"|/i1}jI#.]B&JxbԈ*#vԄYfAT"77WD"Avv6Fś!Z /,,ի|yyy BPP7 $$Dp=uT0uT^F?Cb߾}jiiZG}ӧOn͈ɓ'?h4\.G\\8Y}`JVV~JJJ Jsd! 3f@CCgnݺ( =z vїcL4ɮcee%,Y___,_Op6999Xvh멧.uvOfwLfO)ϖ!`_kvT/:tJ!̱әK/f5]oxcǎŝ;wwrlرcq]˗!HPQQ}6BCC-sxZٚs&z=e; )) uuu~մŗ_~ɝ\Gyy9=ztPXhwE~~>233QYY7oyg>}>,/~Æ xWQ__JQ]O81SNʼn'x* ~-'Ǔ'Ob \Kbƍtؼy3֯_o3 .p-/_M`222/3#۶mCuu5mHKKCnn.z=6mڄe˖җxWqF.Zmذ8vEy F_=Fyʕ6ݿ`ܻw1&66 _`'NuvO;ز'gKm00ڲBy:b˧⥗^`7}dN:sZ+#11_3pqI$$$ÖVt3ơVi…pBJKK4vuU"sL˓CW^ 1>|HDDuuup222hDDG֭㥫'""@ǢePTTEGG˗yi~s雖F1ӢExZ-wL:::HRm9JDD7n""魷""0jkk#"ÇN#""VKAAA,>@;v절\x\\Pii)@ moJ,{ctcM.qO1xjZ4iwm4=]O=5?EfO)ϖ1`o͎ZkS;iNltbn[iz+--""JMMsY%VƉ'hDDHo6=sDDLG5Geso]':Ϙ?VIV)//C2wͨꩧy;xRH$섏`>k2n߾^{ .\)S#,,KŻ=)&ǘG?Ο?_h4vH_^ n% < LJ"ooottt+W˸{n]h1118v^|EBTBg1g?@w۱ RkgW_EYY***`|J8{,lBWW|}}X7 qh<0ŝV cذaxI15.)(([z"}]g!^?E.fO)ϖkzQkmĮtmGݻw7nˮ6%hGFmm-~'F: 4H9?oLwe+ڼֺɢX]믻k5 XTrk$Dhh( Çcň#ojH$6m_^^я~No0eޭI&q D{{;t &''C"`ٲe*111شiR 5j֭[[ߪP(u?B*O6l؀M;ȂpYt:رg1:\~2dwb}`Cdd$1yd :FTTňGo^(lR)JJJڊ-[͛Bzdee+Wb͚5Oó> 7o>sa֭+VX!$\~طoM]~III6m{#'0k@Ǐ`0/@bbMV¥K'L"`ذaqfgg DJJ nߦO#Gcfԩ(,,DKK +D{1d׮]{zIxR)β'=ifˎ qN|:sJJJ__~h񒓓)2ey>⣪jg_kT*@i4!A ڛO .:{EVK 4|pڳgE63f ~~ӟR[[ /T*HvWTTDaaaT*>ՑT*G>|HR기z9s&rF.yPZZJ/"Sxx8yyyT*b^۷?͛7[+Mdjjj(44 FǏ­bڊnӰ %TJƍ˗/;pBoAA/:;r5O+fwLY'S9s%\ND)yzPk>̞!4}_x'???jnnvMn޼IDjslMS1D>H0Ngc0p`0Q|z`0 `0oc 6`0 `w` `0 ݰxL>`0 `8^&0ΘH$nd8q".]ċwF֨JBgg'/0zh\xѡĶi3;kPV۾ dFMM`*A.cĉ(//w D"'|"ޟHJJ‰'xa󟑜뺸mݩ*.˝}=*NKK ӱbŊ+(&3f N: ?}4)WݡbwzN裾3 אi5~ɒ%ʂN… tRt۶mCzz:t:fϞ/3fݻ>֬Q[[+yB_N&0~T*ŋEU4/ f͂RDnn./|?;;FL&CII `ժUؿ?O~aa!V^CPPP\\o!!!<9ָp&M\|駼*L0=cǎŝ;ww-#$$$j\޻w._ D ۷jS灆Q_sQ6|w3goJ0]ee%,Y___,_N֖&''k׮h4\.G\\zQ;_|;w">>ƍ@II d2R)p9刟"HPTT̘1 2Ǒl1>=':tJ!M9|ۜ1(((-wyIII׭Gmm-Kϟr1p.6$s߿@pp0ݻ  BP믿/f"##5tQPPW_ -- شi-[tSJKK+ظq\:󸌌 ڽ{7Ѻux뉈`0znbaF-#""^OÇ'"RJII!"T:w`2 DDA*N8A , "Dz#"d:z~O#w3 p%"w˖-T\\,wuu WaRPP`q-нC*Z@Sꂷ7:;;% IDAT]n`|J8{C a~O1^___{lْcMO㾽g6B_&N(ŖhGX&YjO_>q30hxJ[W__#2d>s#O[dH$,[ ǎ7LcL)S`֭>}:F=Xf~~~D~~>&OC"::و!sb0ٳg1k,uuuعs'{=4#G\744@R9WahjjBYY/\Pc(P)|k=ٳtرcfϞtSN`4Hy؃iurw/|{[m DBHR[l͛7q+WĚ5kבiӦ ީȀ^Gii)RRRddff __xuttt`߾}6m-[ >>#77="B3h<:݁)++ի \.*oԩ(,,DKK 2=a׮]ϸ$$$0 /Gڹk &>>>6lX ;;mmm8x Ϟb>S9ܟoiWdwMl]O0>c|t300/..&TJϋh4KC23?6 ͭ 7P=Ê(,,J%}z]vƏOa"577 nhh^xR)EFFҵk׸7o}6w }nc\J=%OJRƍG/_vе^__O3g$\N؛*::[֗Sxx8yyyT*};۷?͛7{.<8R^O̝;r9~yz/obV L/{FV8 8l0 =4l=rJ#1g`܉ŋCP={Z%íac`0 F@"p>?7Zã`c`0& ?c:17sa0 `0 `0 `x l`0 `0<6a0 `^8}cL'ҥKxgaZT*tvv‰G澦j* jj!""2 ѨLWUU0rL8RH$O+}]gWNTy._??_liiAzz:VXLmm#<<cƌSxOFPPC_9ǎÌ3p1.ҥK[&ù>/}=|233/YYYYtXp!.]*n۶mHOONٳc{9|XޢWq<;t T*ŋEU4755a֬YP*řgggcԨQd())Z /,,ի|yyy BPP7 $$'dɓ'Gɓ?5 &7oFDDE[dee=2 RQQQ8wOFQQ0c 444pq.\I O?u"""P(pQ.ѣGHHH/j-tswXYҗcэZÜ9s7xUUU*++db娮v 0999Xvh멧.uO1;X'gKm05;j*:RNF;wܹsǏhc19cǎݻw/_D"AEE (Ozjj5ʫFηYdn~>L"oo~rJɡVJOO~Qss3T*%"6RTC""jB\5kǏI7o'O䔗SJJ sѬYDDK/QEEWjoo&OC"::و Ao83H,6W"JQRRVlٲ7o<B#++e\k֬ 111(((@ZZ/<-- 9m 8~8  $&&ڔj*\t{0w„ (** f`vv6pApׯ_GRRMfӧȑ#=dׯôio7c/6A.eeeXz5rss!EM:hii޽{z",vڅ ^XO'Y,{S9ܟfPgQff&Ν+oMNbb"lقx?\$$$lbW_\V`` 4 R@@LۉD3=#TJ=y!IRޭz9s&rnO*^|E"~,<ɯP6l?~ ohh^xR)EFFҵka}~cэvRTb[QQA$Jiܸqte+邂^'uvkVfO)rΝKrQSLT'S@t}--o޼I\PUU`YbK$j ųsglFuu5VO=mD 8pӮ-H$2܃Gl1 g_@c ŖhGX&UWN22Y`ŋCP={Lc `0 wƧ>kܒ:S$1L&ĉq% [T*Sܹ 4Æ Czz:޺:>Gm/}a.c|sKK ӱb ˷ELL op;v 3fcǸK.q_\7A}L_m=.]T}OZ[[K w>MqdffZ_d pB1m6Ca_ef0Ň~7|o>>uS_{5C֭[s4=njj¬YT*kqt?;;FL&CII Յ'O⣏>ɓ':6S(N7… 4ir9BBB駟tؼy3"""?<}>ǏݻwnBxx`CbÆ x"#$$$jv5׿s[TT̘1 v-iW6r!(Jy;=7GHr;H' SÜjR[q~PjXWtͻ4k|k,іP+J՝X=<=p}{绿Ϥ$h4$%%U;,ш2<#?x뭷с+W߆eKslقW_}-[ȲO>xgp##v5]12rEO^}U,X'a?[X#p lܸq;0洶) _W'h(7@ii)k>DoeeeذaVX.9%%}|||ҢH3X*_O1f|g'N %%EQP#̒J]o_^]]E~E~g^t:a w&hǯZ!n=i$^v$`79$\$wד$###cS/jhA'Nd{{]ٳLJJ"I뿬򥦦 coo/Ib_~;]V+IR3,,F#pjUm"44mmm$owt?[#jeSavyx4N:EVKqYYYiS- (WPZZʻロeee>5L~'q}'YqժU9s&}||ɺ:Y>Xuq>$T|'H<|GGb)o-F;jWwہsc"&&EEEu4qc['0$  YFFݍaRgo>w/Z.]4 ۷===(,,سgRSSg)^FKKKåKׇ={ >>^Qplyeɓm.**BOOߏ!زՉ-RRRpQ?TGQ/snc)s9sWFII 4bccQ^^.޽3gtj~DEEFq)^6/X[lASS jʫRSSdYPRRb G㣣l0n=zjlmq#d$AAAܹsBjb#pbCC%Izڵk$ VL`dd$CBBuVUz=SRRʲ!= <=M&?wٳgS$FEEofK[ yNӳ1<[la@@322gOpSOQoɊ[j9x ;^[rWwOEMp}e$SN]g(~ӦM7%I>6wttpʕ Ν_~Ů~*W^u .h,hG)痞ƭ>BU]]]rx6'>/bug6΢{;9u֭[;lgeOŕv8;m @;*Dw" lW~ޛ/BnKѣc=*O=2T[ 8FEhPQL`/;_.>pne:ۖ5v8;u @h=G1_!@ b#@ nF @ 6@ s1VA `~&^^^3fN!wFFy^^^566bNe8q=$I?O?*Omm-q3999a7|ggC)ە1bpV-̙3>}:|}}of . 223f@MMTᤥ}ǎCzz4r=)))Ǹq㐓NY>R5::uG-=\Ү.`ʕN/0':GABB9"﫫u@}WƶmсB,^.\Ӝ? M IDATÿ˿*VX{$<%K(ީv::F,2\6nܨ*_l ֆ b6ӽA[[̙35 e۶mx+FׯǶmܬ6/^tr .#˗ZѮÓus)zYYpѢ3\CYMgMXhWW}}}m-Ӛot:>7ny'OV-[$~aaa'I;nݪ(M/8sLrĉ|:lڴ> IO<n޽[oVV?EwE .ݻi~.[LniiٳٳgSٴ`OU`6qD~ ®Cs<ş SNQ:|Lwuu) s"##_iӦ [/`0֮]b[ou֑$]dj4>䓼~FŇ~gΜqS=h#6;s3|gh"y ̍7uV>c6j'Vbqq1 srrTO8֮]NWSSLy' I&&&ٳ$y汶֦.$i&nܸ$9m4:t7n={ߗNvv6w7nWfE=?3 &Js}Yh4rǎ\|M \oGN"#:Pv]=uس;pj~GpSڜիW/_eń^z$oNƌü<^xf=ԩfsDzv` 駟,.ZiӢhǯZ!n=i$^v$РzaJg.Inn|ڵׯ'yfOOM] W1V:IN86u$}}}V;I{M;~x+8\b6KZ?aסSLj9OPϷ{t%$+(--wͲ2y_XXC.˒O>]]]#36t:Z3gΤ###YWW'Um^L8~8~idjj*_uUzz:>l_W}1z1~sGlv߁=ydee9-=5jHj'ʈeKK cbb/ZZZ6󵷷SyHo&ϟ{WU5ԤH &sgE'49ֶDM5[ aLj= &w? /Q__/?b 90 `Xz O Es̄ߟΝsڷܼyά 'MnN8zcǎ^gPP;;;v/7wfg0fbk1!!!a 6 44!!!rSL5kk3ڵkQPP txyyaŊm1aZZZ2Vcǎi&;v r/` @{{;mh:{TUUA$2Gm3v]=q8Wpi$&&_NQKCCoߎ͛7M3ydNwފ_ hye羾>Y6~x>}mmmxw0gΜV6_ ĺupڊ ~~~Ν;裏bرAQQ?l}cC7Ot|o_!V ؑB$TUU`0 ??_!@yy9QPP0PZZ,,۷O9@``ҥKHKKC||_}ӃB,776lɓ'ÇW^AnnfڵW=zݨGNN֭['IIIѣGۋ?6uq4-dٳDEEFqơՍ:n e455`0Z֡j1!55HNN̚5 %%%HIIYՅ [o]+_ⷅ2XPPwܩt:jZX@Iq5JĆ|k IVTT022!!!ܺuz))) eYY?)IҘǴ4E`TTG{oBɊۅ9δm yGmZ?aסSLj|jrWVfxxM[ZeDD%IԩSy[K  cgϦ$I7|#jjj8m4z{{܉+W288~~~;w.9;իWe… 6xꩧhS>=HTlvF<4g(Y.]ͮ_ŋXM޽{~|kr''OٳݭpU? Q=s1΍IU&D6ؔZnޗ^z#d4{SXt){*;u]3@y-bpe100@ӑ>p @kvU"!OAĤ[cB&@ asi @ rFLb@ !!@ Fw :]///yŌ3PWW*Fy^^^566bNe8q=$I?O?*b,Gu,UUU::OB&|?jU8s O___o… F3PSS*w8iiiV~1I#Im7999#ע^Cv%w`LeBNNV\#..NqBt$$$ȑ#򾺺:KGꑹ ضm:::PXXŋ… t&Z~zzuA,YD1oG]S}KB&I.]j | AIILSLQ̮Op {8qh8S3v_~Gys?)t:fرcgElقB̚5 GFjj*x 9dS{ׯ#%%GFrr2z2͛?ʲYZ[tHJJFARRZ[[eZa_cz4?#Ν ???VĹsl2=ٸx񢓵n'|%%%۷#99SNUUUU$I& Ojŋs(..ơCi8+_f/vϟjkkW^EDD|0XHpwlxe,Z-N5DZ@^qn{̦|r{ժU,..``NN|vZvvv$$kjj)?$D={$9o<ԅ$7mč7$MCƍܳg: IfggsݼqyEaaalnnV?3,,̮]|=''4/8hy&}Yh4rǎ\|,S?W +z۳;+j3""z?$;v`__?#FDDKa)mիY^^˗/[pebK/R[o1c0//$^Y#upGlIuay.tƴh4믿Vm[nO4׮]#I644ҙ˺eg+,vI鱩_|t[h4Z`rv$9qD]$Ygmf#ˉ69R`m5ʶ67eZa_cOԩSjC+??6eb[ pYVV&SIII'|®xBu:WZř3gLJڪ6a/v?~O?4I255|a+==ګS>+;bH5=15jH<(NL˖İ$xZVC|79|{ェ:Ʀ&EFN0nyg>>>g,Gj^GJ@U'l4~8ZW}}=׭[gW/鞞8EO8YRLHH/y9w}KxZ_͛7+̪2{`0pҤIĉ9vXzӪnG}1WwV'0?0:N"?42a"$$D.wʔ)Xf bccm[v- <///XB2-&L6@KKBjq1@^^6mڄcǎ!!!aXm4j}}}髪 IMm `#88X9O<++8}4m>KnICCoߎ͛7M3ydٞwފ_@?OF[[y̙3guUԞ/=s V^h4Ƣ]]]ؽ{7fΜ5> 5 ƍS|;3m^`lق& C:W-v"??Yf)))6`d GcJG*SG.\h(+!3 ĝ;w*d:Z,..V<2om644P$^~]ڵk$ VL`dd$CBBuVUz=SRRʲ2+ӧS$1//iiiv˳>X={6%IbTTE:E$grMMM|ǩhBW<طOMj?jist$I:u*ϟ?zw<Ǯ?im.\r%ǹs_~#^zU/\`Szf:cѿHTlxhP!'R]]MjܹSX>?l/cpE̦Yb޽ؿ?>̵u'ObV鸻] =C;*Dw" lWZ%)q K.Epp0w^[%[®m=Ehpe? |U\a@ x "&9˻.x@ @ DL`@ m@ 1C0V7@ ~kVbok>___̘1uuu 3p466ەBee'Ov^,ĉx衇 I~a|V-[%::nRaWxX0 ~TWW{L>~k3݅  F3fU* ppqžcǎ!==MOjcܸqAgg,)?fۜѷ;b';0?evuu!''+Wtz8:rpy_]]Ϧ +dggc۶m@aa!/^ .(ҙlhZn˗/-Xdb =}\v-;;;YYYIIH555̔ןx dbb"Ϟ=K7okkkmB6mƍIӦMCx ٳAAA }vtt${n޸q?찰0677+f.<,--h;|Amaff;Z:aWvԱ`FDԩS?lK,X__ψzdNNi4YQQ_|Q#Iw>~GpSڜիW/_eŊ^z$ɷzcƌa^^Iw /`GT9"Fۏю;b+9Y5vͳTWW%ӢhǯZ!n=i$^v$Рz"bJg.Inn|pڵׯ'IFFFǦ._|oFhّĉnSwIgU3_ e[[ɛwBmGj#3voWO xpNVR)+(--wͲ2y_XX>>d]],VŶ {|I| Y<|^j1Gh1qGlv%N,\ .<QFq``Ai˖İ$xZVC|79|{ェ:Ʀ&EFN0ny5[ vjǂ= &wp/]__uٕ' === p= @qr84MLHH/y9w}KxZ_͛7+̪.{`0pҤIĉ9vXzӪnG}1~ t]ɭN`ㅑ"NSlR655 ̸8lذ ˝2e ֬YX֮]󱊐 IDAT9 +VPl & ҢiZ;v M6رcHHHpM0 v;o0 IMmW]=q,8W gpi$&& 6444`ؼy4'O܌p*,X F7_eǏӧֆwysqoOhsppձ@[W\q8X燨(ܹ>(Ǝ!::W>m?& <=6/4$  YFFݍaR Z}/-sZ.]4 ۷===(,,Trssa=UUUXd ٳDEEFq)^d6/X[lASS jʫ+RSSdYPRRe6sc1i(㩱yQ{Տ^ Ν;2NGV@+6(I_Hs5JĆ|n IVTT022!!!ܺuz))) eYY?)IҘǴ4Ɋۇjxꩧh$IVޛujvoWO ]7Z]6ml$SN]@`mnnٳ)I7ȲN66}킻+W288~~~;w.9+;իWe… 6mT%"FۏюHfWCsn2jܹlo oƼ?ڜeL.^ձٔ;^ݻg.wrI̞=jOa;a@ |DsBx7!Ұ瞳_v K.Epp0w^[%[Oa; a@ }1Z0\FQbq>p '"5* b;0@ @`@ 1@  bsb4ݭoaW@ -Ƴb~,QL`Lhi 󼾾1c[ő2(oWVV FL$aҥv*Z̷[[[(dEEE2ebm~600'NÉ'00p'j2-g>>>/<4 OR萗ӧt:f͚cbϞ=6nٲ5kFT(**k#[3***477j[_K͛?ʲYtHJJFARRZ[[eZaW!Juui~G̝;~~~xsaٲe=z4qE(X'|%%%۷#99SNבѣG#99z^WUU___Hh|j6_x=b:tH Wߏ~pyxyypUDDD(ʷթfsDv,F;WAuu51++N5DZ@^qn{̦|r{ժU,..``NN|vZvvv$$kjj)?$D={$9o<ԅ$7mč7$MCƍܳg: IfggsݼqyEaaalnnV?3,,lH3ɲi0cX!۪`ig}4ܱc/_.v:fWOlNrhZ:u~bTTMY@@{{{Is-z=>3""z$zFVTT_H;v}#""ܥ6gffr,//˗~zvuuY+{ᥗ^bii)I1cG|w /جǑ:cюhGٜ,YLKuu56ɲ gcZ4 _+-'Mk׮$TBS:sYwwLrssb׮]\~=I222===6u/~6F+LΎ$'NvKľ>,`3%ysK74`"44mmmnǏej};\] s<Ň NVRy)+(--wͲ2y_XX>>d]],VŶ {|I|W<|>^j1Ghb}lX:2:߯8Rpvuܮ8.h0}p1}qz[ή_>Ia@@-(߯Mc~5773!!sܡ-im~:7oެ3I&'N^رcNj1Ghb}lnu1Qt퐐Yʦa 6 44!!!rSL5kk3ڵkQPP txyyaŊm1aZZZ2Vcǎi&;v j6Lci$I6e!88ގ`Y挾Dqzp!HLLkhhh۱yfi&O,۬UX [ AAA0 o'ƏӧO ̙3:*`cXn\p^[QQQعs'}Q;111(**Btt4}1ڱ4*:$ UUU0 W222P^^n 8*^,۷O~Qٜ 00Jv%!>>~/edd`߾}AaaB 6ɓHOOÇ+ 77wXm,**BOOߏLym}||쪪*,Y)w)))8z(z{{"55U9o-vuܮ8.}p1 Zr^%%%h4vˋEyy9{n̜9%z jҥKÞ={/|ATTT`ԨQ7nۙn e455`0Z֡j!55HNN̚5 %%%HIIYZ<3G>xLJ_yjlŬ ܹS!tj dqq 8x$4׮]$IlhhgfdEE###­[뙒PY?cN>$1--yyyLKKrp˖- `FF%nۧzF.|$9|ڡ?85 6Vvu̮:.Sڇ8m2]mm-#""(IN;UGnss3gϞMIoFpڴin掎\ܹs/w^*.\eU:s O___o… F3PSSKpqžcǎ!==MOjcܸqAgg,w5'::us{ߎe܁ 999Xr8r$$$ȑ#򾺺:KG_}m6ttt/ƅ 4زe:;;QXX٘^%K`ɒ%NC9vqc'Gظq|ٲe(((@[[.\˗Lo#''mmm3gΠ, m۶^F_۶msfÓڼxb$''Cʕ+뮻ꫯ/_vjy"FGťIKڽh93nmmEbb"BBBPRRYaʔ)EUUN8{'N剘LY|||_~%yh4s=ӟ!//ӧOt:̚5 cǎŞ={mܲe 1k,=x7PTTH3gy666V!~:RRR0zh$''C˲*B$DGG?wHFP???Z ?O!)) IIIhmmpɓ'zf®ε{ Fuui~G̝;~~~xܜsaٲe=z4qEtJdd$|IoߎdL:u6_x=b:tH Gߏ~pyxyypUDDD(7h191Ѿtwl f1+k N5DZ@^qn{̦|r{ժU,..``NN|vZvvv$$kjj)?$D={$9o<ԅ$7mč7$MCƍܳg: IfggsݼqyEaaalnnV?3,,LQޮ]+$_yrrrrX__OȊ ⋲L$ر}}}裏LjyndQQgeii)F#w˗$/]h޸q=;1G9vqcj]]]djmT5]̏Ӳm6Yʶ67eً/w\v]=M:Ǯ:nƩSjNO)+(--wͲ2yp'YqժU9s&}||ɺ:YmO$SSSya+=,}:cΉю;bPq晿-νc GO.FŁ7 {eƲ111lii!I`kk+mkooVdss3|MΟ?{jI&LP700cPP(BׄߟΝsXfjmR<]OO;{GD# aWǍ9cahz[ή_=== LV0FOk׹yfŝY5d N4ݜ8q"z=ǎK^Ϡ vvvZT9"F;'F;ڗCV'0eN 'ljjVqqqذaBCC";eYJk׮EAA+V(^hń hiiQȴZ-;æMp1$$$(yyy!>>{x{+*((FQ~O?OF[[y̙3!ZCMs|}}z@pp0 l~'?HLL,% ؾ};6ol7ɓe477#<<ܩ |]6/bݺurym}???DEEaΝxG1vXĠ)ӗ['0$  YFFݍaRdee)geea߾}8pVK.!-- ~(##COO \lذ'ODzz:>W^yV?#ߏҥKÞ={/|ATTT`ԨQ7nbШڨjc4c?/%%GEoo/>Cp4N=;!3 ĝ;w*d:Z,..V<2om644P$^~]ڵk$ VL`dd$CBBuVUz=SRRʲ2+ӧS$1//iiiV}ӧO[ٳgS$=J_ 3AEGIDQ#yÍͺbD|!nLDy( !JDh]j0B \`FS5UU9^n[ջwoa6l^z, K~Di1cdk.c޽{e dFСC孷2˜?nW7n%cL*M߽{w|qFѣٳlٲ%4e¾fz|lK ·[nEJKKHF!|k̟ݎ"-͒>S#d֭9rBL?vUV .@ ^~;n|󫨨W\qE҇9W{۱{/^: IDATT]]0ׯ矏`0.}x[nEyy9B.blذ!_IܰaoX[r%^埗>Ð!CP\\2L8G1ֱO>9_f{;}^uTVV_7{Vm{g &`޼y8|0fΜn [n硈J7.'i0ϻԴ|vl}ދ~ǎ3f?я\'x'ND]]ڤON&ԼypW0Ly8eu馛0x``׮]wӱsΜίY6V^B0f׫8p v[5k8 A?MӰj*׿ƪUikO=:|w}\r BN=T>W]u:ug}ֲs̙3qUWC:t(~_`֬YةS'<ؼyݡC0dtFmmmJyȰaðzjG9X˗sΨľ}R_kjM!yN:_|#F?NM6aرС&Lm۶8D1k0| 0x`3W_E0D @>}?P6/mp뭷={6^y8/vwA 0h 8pp?lٲ`ƍO?=z|IDc^ѩmmQZj\_555wGܹs.snyҤI2{lihh'N@&O,G+VH  6ѣJ8p;""ruƍ""#?,""zW^yE=*>tŒra0a<3rQO~bwnd߾}|ҭ[7|ill'|Rg|7qDپ}aY|qiݎ;O>rQ O>10a444… e(^ݎͼ{MUU]6aһwoa%%%$""ǎȮV9پ}CjkkE$1… %/,=z(T3u=zvmtRٹsgp2e;|Ͳxb òpB7ny睲xbyǥcǎ2}tyꩧow\N*L?fju̐wr3F%GѣG˨Qȑ#ZP($}>2N;M<(""wNX3;vq0:u7)SHyy466:/ >\h:4;SN9E[ǴD"q3yСC/0֭QD"ҽ{饻;2yd4_~W|vl}K֮]+UUU"z}QYb0UU5M|&ʇŋ ' K,1Kt|4h=Z?I}}}75552i$'ȁ,u'tՉHr'o!_ :T|Ab^KDc^ѩm!^,9r职[H/Hl#MTq_..H/"";O8`}RUUeL#"o>/)?NDi֭ݻ2={O_4+V=9teg }>_yO>c'FݞՋ۱yk_DRKv^\\l$'$rF-(}IeeA)..M6"Y::tH{1Kl9mhԸ v;vLN9N:ImmtE9TǬSB.F90y]mݛߎ &XupDa݂ п-N_:t-y^܎s!W[tlKn{n,X=8~۷ݻwmlTU'x"֭[:<䓸k[=:wܹ3nڵ+i~-JKKEEEݻ7-ZK/:uE]YfO>(..8Ǭ3[H4hfBA@ W_} xG-FKرc1cFF۷//^o7ވ^xlK/sqv؁aÆ_~I4j( hll̙3-æNiӦa>|8^{5s=:u~ӟqnذaرc"}YϲLnΝذaV^5kXn]8k,466_ѣSgki8SB?Zn0|B!]~Xt)3Ϡ"/&J$>/_ߏ2y[| 7`Μ9ػw/0{lTUU4!C?MMM~CÆG}\uU?> 8/wI1kt֫r.-d23X.]dѢEa555RUU%;wٳg[L ŪݻwK ] :?>Lzeݷo\}wwN/XͷzH&2g)))QFmlWD6<%Jo'x7n=zH ={ʖ-[p:ٷD 6H^DUU |a[TdĈ7߸y޽2` B2x`K%ԧ~jlݺ1#GP(tǮS:7{|hJ'~Ӿ?Luu(OF;-rӱm6vis ˖-Ë/5kBZz53Wy(dc=>ODt9~&ս(o8|„ q7Ǟ2QkSŸ^ӱcG!"""""㡖f `S}` ~ьρ!"""""Ok_4M3nNDDDDDY!#0DDDDD9z20`""""" L$ `Cw hll4^ꈈLxDUUaD"` yC$cnj Fk]X CDDDDD*"=F0!"""""/4 0GEObw$>7!cCDDDDD( 4M(^ 0,SH,DiDbu/ `sEk yG*#Ltz CDDDDD{5&qaBDDDDDW{d8p6m͛Ӟ2]vEEE6owuY)WTTK.:>MbR]]- ,phɒ%q:mۆ`͸' i[|A8peee|oYSQ݋i7Yi;g_}sSSSI!"""曯s'U=]#G_~ OQb~stEѴƷӫڢmT\/'ڪB]m=݈NdV50q[AIgCDm]qќ}&"j ]8{w]wNEQ`d݉_'u"j.23Q[U9߳Inkwwm[U( hBM1 ~N^"""Ѕsg^n-N YKc"S8\aCDmG~s򙈨*tdR~wne 5WYKZV{p8s mġCr-*td_~w{Rލ[4-=˿쳺;sJZy8p&gڪBY ~iϿ{NNR*<04+sJϾ¹&dDDDDljBz Lw8>*Vֻ D_sK> { 8^9LDVpk`t:MjZ HDba Lv"j={g"ЅsS];ӥWQ6ɲڲ3{.9LDVpk`/NvM,-L&***'0r㫯xZ""""BP~ ***lIyMӌipiBN@s% JWl2eeeؼy3***BeeTWWܹs]'Zt:6H6սG8Fs"|>B̟ӭq|2g/v' TU`jB(J}a5@7p"""""tHy/DDDDDDW455!# !݅,eKDC$E$UU-/ 4MFj| s`r%@b^FUUۋQ )R󢪪Xn (;/ ϪĤI\kZ~ ^Ei4 @Q&""""z_/Io >@ 0DDDDD~Ç:);~zk*"Ѩ S kcҧ?=%˛P(ECT EI""""c.YUUA4NDDDDDdGQ%y? @""""`.;k"3a&@s:ׯ͛7OU]L}^-ÿ{)yYn>^I2"DbA4Wʰ(0 ߹GUطo/o2<cƌkYv _Ă(Ơk`ƌưy/]1͞Ly[ 7ǘ;K*M4M=E^͓Y=*4-]tNZz χkG5o~]Aei:co9> l>0MMhUU U#PLn e|ijk90(..cǎ3u0q-N:útCIN8|. |V^EQ,q1j` QD8Wca޼DZvj;v 0rXUXv5X5\Q9vASѩSڙذʪtLjD˿ÏoK8Ckiz}kc2""""MrWz O}w~aű2w L^̚=Gfߦ={ bμư{{g}d%Qcρ!""""ʥJg+1`E,]JKq /^_8K.gs]F.$C+-c6Og( k^$y^4MT[G40 3( \DK!D%!""""̰<.QޔAݏshBfdDDDDDc򦬬 /$`͌R֘9/@s`bZfHDDDD|<=˕'_?DDDDD>V 3=x)++sh>>_KG1DDDDD马mi,tR<@eec7ߍq2g܉7i$B:9ă>1&d;1!""""JߤI@ռ蟟Y0~hjj烢(|vr'YRVV.m(4MiPU L*KρFZUUjODDDDDNjtD0* `"Qc2Q& ^ρIze]2;Q6 ^ρqTWW˭ފ@ :  ! UWLjk(M\&˰~v R~ipUM04b?{IQ@4Ԥ/YC(F8g9]̍7i۶h>zyU_^KNNuI%ߒmZtƐjeRL }S|h&ۧӾ"-MKp,%;TTυNN64VMlN<\Dj\/ns[GiQ q'9>m: _Ie{m@q Җu8FFjykك!l }ܴ.9,<].&Wg*߼$ǍnKK[Ɏ17mξ>KRbY,˱1}niݯϥ$WyS0u bL2,fz+~(..FQQQIFF%eMyF# oflӃ@ `ݾL#~5`0h4j~;e}<^tOpUьj\wۘh3*Fҏg=~b-DSA% (ovgC6YB58^v)P~c+nߥ+M-qeϭ'@[ 4kHg^Cj>a{IDAT$8<3{_K Z,7+,ifqD̟ ͅ|}O}p8l܁X>YС"0jA#illD(h4LDn:?~EEEd ?%sls%mÓ5ɺŔMk*m \` dTzWףhLLq둠CZ'$uI ~ۼҭ[j9 +gDOwX&)N#5E \˾*?(NjT5KMv V&M:6O9I~ж=g{ҕr=B09m{)]ض XXZ}O:jKQE-mES{aw;'w>92?WQe;ǭ==l1v?bEs\7>W4-4 MMM8| # "  MJJJ,XKIJn㚢(GaFhhh@8F}}jllDcc#4MC 0Ҡozz \춏t , K.ҝ<|qn)0m$ .-x`MJ3t褒6cO9/XoBD9_eh"oj;{Z+(z/9{(љ_Fn^t;> {k =8ѧco(z:EA 0*Hk_1K.ۍj*sg~E1Vt\J҉4 8t}|N3q@}<}B%jbc: &vۢf˥MfI˩lEal -'qۑ7udZPL*WځcNAAeƙ19hWP`+Ro6}ܧIg6onҔy-S26l~tSfk1$]5 we|c3 kr1V&\,e2ǩ|T;bozќ^*z3F31<:**-Pictures/100002010000014B000000778C728882.pngPNG  IHDRKwxb IDATxwxTU?LREH R\D º+. ,/d]ˊеb15X@\)$d&s)̝$<}2srU^xÊ+P\D"ĐkײrJ, :>\.w}7 .6lX[nEߵkw}7wK.ZzS .#(JpOX$*EZ2֫K!~ ԈC^˘"LrhLz@; HD1>fn#,BT5r1m~O= DHcXR\ˆ#X,ff6o̧>O 36 }ժU%K"Cf"Y]pDRR( C3 4Q463c(zˋe $nqlB~N"!>9 jOSkO3%}4M\zF!ܚ{'R 6L8p :7"]x;L~uBN;O aTTT#žCOpC Bޘ1c+MA,?(P7k'S|lk>G-傂JZIH {f3l۹Ԅ8*J ұ# ))a͛7…^ܹsp|ĞF_b?fa)^xEz Q5= _x gv͆ س[YW֑6O@L^ye|gg#={D#Ͽ 7n w/>"9_ګ3~y ϿȮ4ׁi,y9;ΏƬ"GP>L$h\.555 >*x7p\\.f>`s}| *,rEZt1dzÇ={R^ٿ8ztRKgjP%Abbb07/gdҤ!:e*k֬Cd#III _~ V+juL)MaJdCӉ …Wk׮&N/[t /`[yp86)Њ GQIeeeOwTVVһwon94yzYY /W,䡇w3qЙ趄͛rpT88vX@0PUM|KII iii$$$U\EQظq#~)fÄ 4ivl߁n:y,=N3D|H45 @AA>IHHu󋊊w .$1]tɧ$%9L}]vKԓOIi&vAw trwfڷwYsDQUlQlgYh˅Mo(;;[,ÒL/H$!(H$0TcD፥H$rR"%{XJR"H|1KD"i,%$ ZmP|Ǿh0 }zvbˆ>̝5䤸RQ"Unxs Y:kO-ZI`XN̜:i2QűRv~ul7)&IJ+7D,~?w s zvogyk|oE^[J吤R\rj$:5kkb *o,14u λܹdǦcj. K{;~E) ϐ3YrG%m4a~ T cUSNnv^~eƎڪDu'WNQm`Q-b{.nf!44Uƅe*J~ؑ;投y6j7ͩTP;8vcƌim5|(j_wG5[ +Oj‘eUՔWthGD;[Z5NeQMb3ʢ?=Ë/Hff&;wf|W0]wE~֭W_}uzjOzz:K,:lH窪HOOg^: it9-ZĊ+ٴiv )cƌ wj}vfΜ DW/999l۶'ND&zׯYYY:{殺\oG}Q^%?{壏>"77GFfVH:5BJJ _|1/9r$:ujH(7, aۇ/^(ֿ~ktyssk]:'=sZwv%n#oٹnbյc 1BuSSS9pWYYI^|OL^}U@~~>&M GNN}`oC8} ĦM5*dzr 2e˖1gі-[X~==seݻsUWq3}tzIMMeϞ=t'1uE3RYYIffϫw0h 6n?cƌ C?7x`|M[On02Dҩ!C8ϱX,tML8/8dEbʴa{/Ju q.9]qQh‰‰׉qGJ8^\AyU-Jg]|ORJNa#b]S?vǏcǎtЁv z;??QzӳgOz?R9֮]֭[4i#FyL8?]O$'''Ջ6Ms˧~ٳ޽;taV}ЅzO?)̬ tjѐQx뭷Bc=ܘ%u C)N[W:0qVGTB x !UUTMqqQTB.)S8t҅͛7ӭ[<ÇBNee%N:?ÇQ7#Gdݺu!زe K, ѧO}YFIrr2Çgl6qҘ4m\ys=̘1$MF`^Ν;\Fm>t¡CBzfaIԳXd +VgϞ3y%e~;^^II{e-ZUߕyK8x E募bY&q 70~x.ӹk3gN4ƍc„ dffPYz5իs'deeѮ]; 3f Q3go޽;wqШu1KrYgߏ'X.fU98?PASqZtroQ_]K$I=)jbO6|g ,USy|û]P4i qM= ynR]"HѬ^t 3z0zftȁօESIk*!! .ZA;FW"4qY*xAk}YSi)擝_9IcDtH͂Mװh*VqZ5jW$2t`'_X4Uy5AZr;~{PT7~Ci.tHMKy>n (˫(+/‚d\WfOR"pn),(*++w{U8]锒8P%"ʜQgزՑ4 ,^Ydڤ|V[UaYn]k$iF8;l}Dv%u֏r凷>dH@v%=yT@׳!HR%3iև HR.!3iq6sάi כsfMc[d5c yC"g)arO˶E_|[Ï>Qco\ʚg|ƭoG`ذͮ>}W!;^7/qc7o<`Xsdff~u!Ĥ.fA[vh<'gSpnԳm:U}?۷__ g,g_̘Тn/%999\JJ2FYǪU{->$ =<Ѣƨ}+>QLrrcyןo-}HO{`= Wwp-jFE[}#7Ν{7x3 |U_EC !nH&a~# en9j4_|ã?a_^p1W]O=#]?o}HcنrQY)6|wuCw,{9Xt]_yjVZ>$'7>cY)m !o;ŽSf u}O13fՋxCzmϵ6 ]QTW oH`<-TMm(,%m!?\>l{(KMEOouod:!iCx 0PUU}]s)\o77K>d1E !sUwR-\rVNÿ>$>VOuEAM ¿^K/Bpz=i((RQ˗/=ZLAI˳`zyN8ڪ!=V S3Lz'x4MC_z=f){m)SpYugkrr;2eJk!ifm``pPXXȥCmﷰ]ug*r3e6BB`QQQn R`Jc Mv;kjv_/[FF%IDAaQ!UUU( X6@zDᕕ8v;cٰ k-%I[rp88q:nA+,g)H$@qq1EQŹłJc)H$>N8(omV]wI`}DҖ,X,KMPU7${`3!,%IB5TMC44]GSUU bK(=KDҖt]Ӱx6PT5pw?ҳH$m łnT(֜qq!e)H$P Kֳn6iӡ_81\[x/B`6sf0HMNLnRB^B`_kn۲ ʢz ֡[K''d^!7_9:P^[/ALas4 jw4+rECGSV"YvH1l݋C oM ucVk"+_!}ݣ/X-#0`YBxceP[e5z*Gcp׃T&nNց; 4&8L%>@Ҷh3좢@`PvLUUfX,5TlB]`O&GJUC5Hܝ&VLL<#,g'<KL 7o ~0{7COsSU3 0:W-Pictures/1000020100000243000001FA43B6CF36.pngPNG  IHDRCH IDATx\_? q $(ROMbLy!h&~cYз[Z.Z Š cafwfvQ|?}Cf9>gΜy橿 zG`cAA"o6/_V!V+}YL>xa:$?e܌R]ڂ86o~q4rt fBssyXx1Mm_~6Xβ`Y,X0ooXV\ 4qjF0vXV MMZ{{CB=@тhrqum9tWl|y}B1 ܪ9٬c\r c|ۤ(D|%${HϣH֏2czYE9UurVr*\[jJ;{yy&ql Lh4`4 4s+ 'Ol9FKVwB[ۜ,ʊJ >U7AFrTK p78z2Ere ,&9x_5F Ǵ?mw:ؿo?fl/AVVΟ7#`Ĉӟb2|K\RRn޽{e񽩲^ZVh4lhhhoyo'F Fk=B߀Qެʳ쇆i'eh7 /ƩCkr%]ut,Hb?`ȫ-xBV5,q+yT wM=1ܔUqZy,fcq% V_|{~ꫯd^?zX,Qر8]#b.hmrsR[-8j'!dZL4Z j[j&^/-;^X";ctF7j\׸Vjn%__~56ozy냆F3q]@ɓ' ?~aX 6׺p"#Gg$DitCjj*֮ygc<)));w *?Z$oZ#22۷o-bdPR`YF&t:֮]ܼ\׳'O5޽;.Y#Gb/vaÆX,~)Fddd`j8u/_ݺué<9MiMx2=11Z8z((//GhyNMƎKeZEʒ'JHȒ G#GB ٯ kkу"sR,F-3V `e Wc.o#|GlŔ x{C}KuؠAoQ⺀7M8xK q،;^`nf꫈m I'ի~,\w8p !*9={^7o>nlܸ bbÆ 1boM<xg VBLL ֮]^{ cƌAcc#׍nDqI(U9s 88< z)"h0WFK9JB 33sMaTR SYZ亮9r*@`9tnw9ϡH縪=?pGNָ|*H GAZRR' CNii͛a67H# bo>{,N>-9-",,8s JˤƇIˢo߾/#22ylYnC2Aij$t~ZO)5!//`0` P__i ^:o+|pt2|eQWW\hl4VGȑ#?3pwJ7ߠݛһwo =%GPQY `̘1x뭷P[[+JWRR3g"11&M؍}P__ѽ{wҥK1nXt=  vBɛqr9!ʣQ^ sR56Zp;)u]YBkUSJ+bV'#19*ՙ˂zsUnRK ^6ܜ&YF΋{I ;;}$,-r;?l:FY?)/%NC>[|a-{w}Ӧ%Gl%4"$@ Qo 56;weev(1M7C~Dum%G?N(n6 q=[j?uH/^V.?n~ ֭[s{10 LT|wX~=6mayc_~%,ZzLC.:WWT9ݍV%5L! t0NP 7P([8R̰DDm]D?Hˌ]N KG}ס{ K, r6KFAxX̖8JCcdqTDHI{g l>y{8P{iTn0YCP] 0 !8|o ݽZP!+% Z`/oEœ[?ίp0}tͭ%܌od,)m_|~3JW@ι9Joo 12,B4[(*b=zy,/S_^^0DGGcرNq݋ &`ذaTΣC>>>xIX,&a0=z4<͛6ӧOFA]]wnݺ/^/+y{K5V&y=z4jkko@,Cs'M"cSfxLj~Ȋ ".: )0|`32FA,Tm[n2X4ZU*ð%ÄuWs$;rڹTΥ˟΃!Y,XNHMߣBʘ9/qu,m-:3P䛓->%5^e4㣏>V%,7Me^urFG!c/]~uHVQ_>j aO?^}8~  PoZLhnj9 maÆ 8<͛_~)^ñc0yd_} dee/^ҋꫯn': /"SO+V@]]z)CWe8z(֭[ǯNg(IwEON1`ȹx h\6ra: y!yNWBW6-{A/Oٴ%mEJEI/5yȆ9U_&sDm^#A`ȳ2F*1W8f!** :NƾfZ W(~/:qHl&U?lP2 v!uZ(S%IYx^USsss%Kl ?Ǐ7\n `LP|0T#.:|A#G%8Ɋ{oJJ7Tlݺu`˲0Lӧ(\Ѡw‡~ٌӧyD:o9p87_ FFƖ%vfhh(.^B`f~~~R0 0qaFAϞp%5㡵 2mKicZo^h'd@ɖBLH\uڮ޶dvY~'rK9i+| ~OJT9ڌ(|$p7|5ǎ|IS%\5h[IZɖ7(Om!qIꘌ2[y\rm?mۿz?o://ou]з|3>MMMꫯ܌CJCs(%U\CC~- gᡇd}9F_Sc#N6ޚNomLϐ71 `/] _u?V‡X^-QP޺7[o1oٿՒg4q7w hGHbcYil6L58dPf^ 6TWŋ8SR ^z:}4]m/)_Wy#]벳ea6JWcmÕfѮkCJlAGa!QB,+JW :'NY4i!c>rk5ii- FɀV02{RC$5i[рr\ $'8]0W UF!3<[^θ=X{iZ,X @ipOߛh] Iԏ@;ZŋE_pr|sa?# =Zo2v2X $,ıЭ: rnjnM9'G'An>ޣ倁sm3Ԏ1G\>ZkAmUO,jm[<.WP-1;aZm6` `6켽OP+y*vpx+jx;9SJ|Yd z8֯;,u@Tp%oWFdK-^dMP@e[6{Ftxgʱ#0`Q9UJ|:ABBC^;ISl_yd ]\sQ|?koӥ& m64[Pw}^@^{{-_ pNY͇ n*QJŝ .e~ KyܐT}+QZN'B*:ˊ<6jfbb ՊD6'kVH~ vႃ'Y}̏`q#N/XxU+ss&* yF M!ö|Cp55hllaۛyyy߰3Hj\0>;&0c#f48C-RCt=x e9!rU%ۮǍ+Z1F7ߑ@!AVi+bBc%TI>WZq%DŢ JOryyCd6fZc.]|] @iLvLi.Mj{5ik{D2}mQʠrUi.b矻Ȓ  e{yϼ RAAUhn.7d Aq }!b;AA2\\pܦ  px4LFAD. 2+ uiz}ZV  څ5Uŕ~@q!&pÇ;[ hܧS]DrV4.ve3U! vqԲ8"k 9v8  t_ AAtm?VeL  Kq|UNAx[z E{ix ~m| (W)\Ca=z=܃˫zq8~-9p֍^Gbb"~Wpc[lqk.2 蒰;Q{,;;VUtnKt"\#)**!C0mڴ˧-z[o#<*]YYڢb \ݘL&L8隹-[8k׮AW*6F??޵knFQ&"22HKKCSS(| Ell,6l J/e 6Lnn.OKa\V`dԩSy;#cΝ'O}ǿΝ;ѷo_>|С|z,Ǽ|{*++1zh8qB NBϞ=&"ٌ8:ojjBpp8,, FQnR(~yVr!#GĆ x;wJ)<={kLLdza`4ѫW/@CC`߾}BTT>3ޓQQQx;wNVO! Cؽ{7WJVXXrss(((1cx#a!44TRG!ݻwG^^L0>(7Ν;]AĕQ:\%Ǎ'>!מg(%%VbAVVSxUU@TTب_/ o+HLL`l.'rt ?>pVX_rǥNyt\+<;w[ו3p:pz,SNa̙8|0PVVx>ko>,^h87 $WZZ0qDb֬Y{۬ƍ0L0Ço,Olٲ| 1j(3Fj*t0`F///?{ll޼K,Abb"nv~5< n֭HOOn65Jb ۷/"##t 2D4zj!:: .n+jQPvv6eruGq-ʹ8 &PW/r;ƍskp B L=y,^|IL&;w .*]P=A^"P+ѡDEE_~A@@}V骄 s8EYZOr} D" ˣ4G9CAAtq#r4>  f.Z5e<;2tFsQB'jq5! ok.ab"B'o<AEpLMAA]c,T{ F#11dT1 -[8ݵkW13 *:~lcС1g]ܹǏl5$ui=}0۰X,a͓\.<2ֱX˲(**!C0m4%2pz[o#<*]YYڢb\ݘL&L8隹-[8=֮]Q P M;rH|]p7455!55DZZDGhh(bccaQzwV+V\`֬Yhhhk0,zk\m۶!..HJJB~~>^\\d#88&MBUU(/(b׮]XnX|m*c[DMooo|8|0؈gFcc#0 `0;vG^JTK"006meukjj£> ???^Uǵo!aGAttaY7pXjtZn"""hD@ss3ѧO K"& ˗/Ǜo)Pԅa]AAA̙3Ec\sfӧOڵkE+]vaFTTx һwodff U!Xhpu_, Fwiw}ѣ|||0vXTVVڀ=Pjs"55Uv5ǺHJJ;v`2zKwɄ>}h4400P ÀiiR큟3ZK|֬YxWxKz͚53g(NVV?(--ի{FGw}={UF!/2:<BcŊq9/drR#7//_~%1~xaSNܹsqI &&UUU8~8-[Yfܹs8z(-[e˖֥=C}(((ѣswɄx)))|زepY%%%tYZZ,L6 ())իpB>s=СC^ŋeuDUUpJ׾v+\x\wuoa0'Yjq!l6< ;_~EEE(--/] ,@llSZG:SسgQTT ,_\2+233Q[[bc޽bʕx"كaJh4"++ qqq^!Xv- b„ HKKCee%***t^\JmUݩGٌW_}U4:Twǚ5k\R! i&>޷~ÇO>.eneG-KLLdM&k2ػロfٻKf2`O?Ć!!!?, -uNwDD?'N`]rNϞ=t:|Ϟ=[2s眎Z[(]7Į[YGmN4?Ftqhh([PP8q Ltj_={QܹslPPnaaalaa(o JSJqF699:u*SROGUVV&Wxx8{ IgGZV2:֙]6<<\2W*,,=u\XX(U`_y̙3NyJϏ;~ ,۶BH}}=ۧOX HRg(9WeWS_ٟY6\XwB]Ə~GG}{イkOf#""K.,˲?8"1udyI&IfG'%~IfsssYIIINFPbb";zhUЇ~dz `;=Z-k4㪪* VcHӱZjFa ôr%ו_~%;bחɔ+[FwzݶmjbᏛ:erM*ow*RߟfF#L&I=i^Zmnn 0ҭ3u*J8N0ݻ7rr/gm6XȎ=/gY???Q%[ HnnݩdžW^aopٸ8믿MNܓ'OfsrrXƲfYVጻP-_nn.OvugV1cP__͆[o)O>8s \\\޽{ǁpDc555!??F0L^3f@JJ ~7Ԡ͓;ؽ{7ƍ.EEEӧئCBBpX,XV,˻ɥt -ەc0pw#''9997nTա':}d?a):K5+..FPP,NWWWƒ2tPرUUUx1w\m?\2p0 h;7oܾ'OO<2l6֊.6 ' 9j[nHII rH՝ uuul;T-Zc߾}HLL*{6HmY0 ~'۷O2ҥKQUU*,Y=>i$dddh4 K.8p 6lٌrx#3gDjj*`XpqJx hhh@YYӼĩSb…00}+qq\t 6_ זHdd$}f3|||モ"̞=[1ORSغu++GXwB'D eQj_ŋ\p!6`EDt133?ym?: R̞=7ovoݺm݆QF•ڀ=>C 5(G(;;ي2k/w)>㈶DR+;sssY,bǎ)[Njׯ}|͝4WnBd=4ݸeqƹ5|]Qk+մ^{ eeeք:3fHDoX7}Y:C".:j\Op%&JJѱ# ;ƐW]>|@li9[~==L O t =R?ŢeYXVf={6N Æ _ a0N,:?5uT]AZ=CV?8m1gVkRj? W&UpF|ԩ;w.N< ##?{#GpY`ѣ;ܞ={()'_ơCBzXBUݸSƐuّBA\[(r\nnFQM7݄kתz~0`"""xڵe|xѧO>C>|HJJ:,_۷c͚5 ?{9UEvv6"''ף{XbvNU)c눺z! -4@p h-8,=w\GMjn#99i]GEE8c",, +**D믿dBMM vލI&Sr$&&wիbccEh2\]ˎ k0?LX,` [Qb?nB~~>`W^yEVFUUvލ/t:TVV"00:Ը,x>}p}P޽3f ++ wqz聺:DFFAAA(..Ftt˼oeqw_UR믿FHH[z\ˎ B@ϲ,o577+&fO<#%%EO ?0?oM:8p 6lٌrdPtҥKQUU*,Y=WzgΜAZZ(}rr2/^gϢO?b~Bydgg#''Qܙ3g"55EEEX,8~8{1ټ!5ׯ## &l0V] XnRRR0o|Hŋѯ_?$&&bРAWOm݆ .^<䦥!!!'NDhh(f͚{W>ƐuّBAtmLnn.3ψa z6  CAAtmxϐN=B" #2hw&c  nWٝB6AAW?:jVߝёݻ'Ol5 ]DGG#11yϐLk,. g 6U! vqhA3?X; #Gv*A.bcc#k )t d/` " K 4$MzRGb*# ?i4!L CW ۷oGpp˝> Ba(K, l*`4iRN" 4{;ǏWvѢE=Q# a]z$&&_ Kae'vRQ=܃NADWño,}uGh2`2p#%%3JC\Xn [o#<*]YY:X;^L&&NiӦI-[`ZE֮]:ߢ" 2)_OACAt5C1B^SOرcRF̝;Eo۶ qqq DRReusGpp0&M*Q_|QQQŮ]n:oV+WDLL BBB0k,444+,ZfXV,]ŴiP__q i8}4>>>>;v,*++yHOOG>}`0K/ycc#RRR̞=|80Xn"""Z6uvnڴ QQQ7ߌÇfӧOvZ՞___zF#)) ۷ow؁zLGJsNA\=?@3ԚX-xȅ^.\W/?~/C!//Xb~5 bڵ4hÁp!TTT@c ؚҞ0aPYY "==3رc_PTTRYYl2={(((@II 233E:8tl6wލ& <ȓZ#??{U]Wf*.9ϟ5ke]r˶,h4"++ qqqqJGq沫Vj9l| X`ñfoazܟg|爊`* 2D2`SгgOQddț㘏;f3PXX蔾 㰰0F@\\>xJ='N୷ޒg }(|g[QQx;wO4Ѐ(;ݻw_~Nqd!77o_3f oD1 2JaFzGss3 <<{A߾}b-c]uyyyȸzX8磼eY÷W! Kq)̜9FTTq,#ŋ/8***D틊 Q!$ ;w_=-Jpl͛\QT] y'ObCjm/Y Va2no!'t555>}?KJJ<3f@JJ ~7Ԡ h4&ɩW ::͛:̙3X,ZA$ɓO 6 z ӧU" l[e9s?...V[nHIIޕK!wu`pwY)t:f3\]]- oO <afC=e˖Nsv:F@̙3HKKk3g"55EEEX,8~8{1>j3=t xw1g̞=NbA~~l6>>>(**ٳEӧOǂ PZZ'E)Ss*++L: .hhtjJ466b֭.a] a'NP\V /eee3g(=e&*xl5+֯_> $ Ȁ :^^^E7"##aaa0afYiiiHHHĉYf{ٳgcXd qxt[nEzz:pmaԨQ+VG߾}EC2d0_z5h"++c\jwH 0#Fpdgg#;;[1>W-[O>?F1cƈRf d\vղ&Pw$xin!7hǸqʻڹLՏ Ӓ8Na,]yO󨬬DFFUQ!>|IL&;w .*u8b Fe EFF/  <ӝq~!&&xg;[Z,3AR.ќ9s&x$55խMb "Ec  jG h@poHAU: ]DGGlU ] ::F>ɚADkja+DAA\8NAA\nh  . R *3  rf Aq eg  . e{ ]ݻ'Ol5 ]YZπ ICd ]pаa:[ h6oc7ZÄ4B#GlU ]"''G9zFdqKA `DAՐ YDAĵ>?W̜9S1쭷z #\s-^aexb K.oAY% 1ʃfCII۷mRXQy2o6,x,˺el޼{cpQb֭Q  BՇZռ?c?6m̙3rJ $$fBCC`0^ÀгgO7|"..٢MMMHMMEdd$"##&Qm۶!..HJJB~~2vL&/_7|~m^ ի=E$ wp2w#}W?ofh*?zq^ӟo={Ė-[OwHKK?R:JJJЫW/}:)) 'O@߾}~zmo۶ O<2335k`۶m<3EJJ ͛Pvލ ϟ?4}[n8w\lȌcXٜ9sꫯvW_Ŝ9s555(,,D^гgO 4ð|NNaz(// 7܀Cw1ݮ@~~>bZ$''ڿQ` ,M fZZΟ?O;wݺukmhMG.??\s mۆ 6  dggF[hn?4gvm-^Ǐ۪2d># <$Imvא!Cw^=@sU!CdDDDf̾ZTEcܹx/b޼yӦMCQQ*++xpAL>=躦OCrAUUx^yXt),Y+2P`Z7{ۦ,L+Vɓ8y$VX{7rV5\tl6àu]qơwޘ1cim݆gӧ~alܸu+WDVVF#F 77+VvW|ۚߏB 2C _2H&""jk?2k_)QGy9P+Y™3ge˖5 'OŋcYM0<``H΃cF1"""6Cqq?FDDԑlقCu`(NhbYAAz0EM6L0 Q5 (55""""KRU<3CDDDwBvCDDD/XMv܉/ADDHoO fO֢B;(DDDQ bx'`fUe֦B?:(DDDQ4hlހZLMFDDDqſKZeљUdmj?uMѷ?ܯ暈cHI`ѧOL0~i(o6D :aE?AȵFqq1 $&&"##z+{h՞eEdQWݻ^v{i2Q'BtbϞ=(,,ѣo߾.V 1sL_׿~z̜9w_S]]뮻.4u-Fd8|0Lya…=^[D֡W֭[1i$L8[n53h^{ Æ CVVzTTTN'<̟?NӰ^z C A=ZOȲ޽{c޼yx^/.],`ɸpKă]S?p _`BۿXϚ5kzj==z4VZ5keBUӡE[dž \uU-2ek׮Evv6RSS1m4x1;ݺuCRRn>}ZvQ\\Lddd駟6;ԶCٻw//_9Nw}HMMENNz)2u~0ydl۶ %%%^}Հ) ˗w\d]aA3C$Ӊz &L ?f ^_[S^^w}UUUQTT[jjjjo>ݻ'N@IIa}| VE뮻®]իW?Q[[D,^_N qe>_###Æ k]vn3Aee%N8Ѷy^?~A͛7Yr%*++qut]f 0rH޽PRRIu {_/3+Vɓ'q>|_}V\izvmM2>(Ν;;v{7os磼^76ڊ甕o=ࣾ>_#GԧoFkZ,\GէO<)l6>#ݫOٳG?p|4?֭['v%h6M߿SN}.?4i>oĉ_l>!PEx|X״򙙙t߾}šCL_jO.233W_-JJJM_קOC:eVpv~'BX~8X~~%ޗH_޽Ç ӧO`k_~gǏ=MדUVZdffӧ>BՉu3fLGYY͐VE4iRJNNѧ|8999iEpk>|8l6EANN!=Jӟ/ 9s0ydddd̙3Μ9Q&0}ٳwJJz/S?#GDZZ$IBjj*5550`@ڶ/EQ 2\.nw_֧N2u~O:>}<ӧCJ憽/엖6~)7`ֶqtk=oߎyyyx뭷-'Y(JVC۷o/~ ϬYfV骪*+R` zx\.>,_*$I2eI&e>}4ϟoXGgߛnI,oܸO=233"99?OqcΜ9aK$7aMӧQTTѵ֤IpA\.j/D{=M2,c֭ºu0rH2И1cֿ :Tno-*Eyy6ll_~駟6YlHII wMM{DZZHKKs {y>B E0իW .*x }c=&RSSBUՠӟĕW^)v+Eiii 6,x'EVVHIISN?bBQgh"Ds"ѣG!y晰Zbʔ)"99YdeekFt~z{i}\ĴiDnDnĴiDCCͦcںu4hlbȐ!o[eB6Ccǎ (++RYY/i(ɲ_m}QsVrz-̜9EEE4iP[[7|vҳDDΜ9-[{5?uԀWEQkqصk=QF!55W_}51cƌ.Y ADԙ^{ADqDQ<҇ """Gw^M&.v񡠠1 E!""ʖ-[PPP[b l%!""NAAaH@񪰰0 >cYU~44 MFDDDq-`0Ńcӱ Ň;w/bE%ԭZ!Y6 ؀M . QT<.PoBDD( IDAT $I´K} BUedd ##^{-ƎO?mKAY:sy"""z|cNf%2rrr0k,,[ O=>GW\\̘1 {]w0l0l޼Yv|r ??/>/##/ =z0p@s΅4Nl.q:(**B^^0|}y ,\#""iNǎݻw< ߏr9rxgҥK_/ ݫ[f رɓ' ڷo7ߘ?Į]p>}O<K٠UV޽{q ^S^^w}UUUQTTϳZ[gah;x77$71+WC={ٳg-['D޽~$]SSB ={ĠAp87oFyy9n :>,7}po(7zxXk{O|WMcab]uu5.A{κ{+!Zs}}=ƍɓ'摑R\{tvv6***PWW3gΠP5blݺ_~%}Y ǏW {LUUUAP`Æ GBB*CCy_"_1tP$$$ ??juJk";;6mmk=؈S"55999Xvm_$ݟ`ۑ$ VBFFrssQZZ'x={DNNUztRdee!%%'Oƅ Zph} Fz^׭[~靜+v˫,6;cǢ[nHJJ-bAvQ\\Lddd駟Z&̜9HOOǬY̑\3?㿿PۏxDzlm;Թ2'r#33uuu}jC4zmOm#5:ݶuXES,c&d ֬YEM"TVV>}>8t\.TUM4 /ɓ'qY,[,r-_uuuòeD#G\;ҥKp8p8du]aojm`صk1~x̜9uSL>saǎt;v@EE*++Q[[zU[r%Ξ=*TTT`Νm?fN>'N`ժU +W ZfH@e %#=96\s 2220i$lذAᅬ臬&#km~ /7.B@גhBVcNJcNJqƉqƉ;Cqbܸq> EbbΝל9sF}aLׯxgM#GӇ}5]ori#=O9r$'v|mjjj1(J>ӧO:%[Hef:Z]]mx.2sOW:t([>|X>tӧO2Gr̈́B1j96_Ucǎ~ %ZO׎2.pHݞ=*֭[;Oo;C L<3I__=dedd\ZKG{?>X~=rHEQpAaViXn7]>} #?߲$Iҳl7us|"=GZ?/'|bN^oeGf7>pI$_2#9ɱ uz'L1c`ɸ+駟")))} vvy P`hll/?(++3-"бZرc(--Žk:_{,C4dlN}p8ظq#~}}eewUUM_gبO9s0?;;E; xzhui"=іܹsQ]] UUqYJnn.; رcʊhB?/JW&ԹĢEs?Daai >^^\3g v]:^K9ӞڽI&z;0߻m,X`+SO՘={aĉpBX6 %={6f͚G񠢢'Nl6]Wq!sh؈$$%%f2̟:u*͛'Noł „ zӧOL_;HhMsYb~pP+Uy uD~mjj¦M0`@:2mU*c`Udgܸq;7o~󛠯/,,СC={3}+z ѣG?HKKC^^ kvݿ%K?я;3ƏߪmFb\}ՆHkeڴio? ~a <Çǀ%%%FAA лwoZ*}&/JW&Թ $P|ATWWl:fZ~X֭6olW0?֡]TVV&֭[g|$k]& u`t_[omuA[h+\꥗^Buuu^׮|#}gs`ԩSXpaD_Ξ=sz^,QZOԕc+н{URD_t$IBϞ=wޝ]kW=֝EoAuB***2 XE_kŊ絫Ҳ JL!뤲uV3źg(Q/'Cà ։֑M7݄vض#}+ *13DB!p p Oaۍ+kxnڵmU$""8-0 t,ZH y^,]YYYz@vZdgg#55ӦM;v cǎEnݐ[nO6,uЯ_?rxoObȐ!ׄ 6 ?? ꪫ駟fvQ\\Lddd駟6Ξ={зo__>666bԩHMMENN֮]k8ݢE cvY]wWXxa;vC=3f>dmm- tݻwcAG@3g|I=裏 $n߾vB}}=Ə3g=6#/*~_udM?D~~>;虗Z >Nҗ=r Gѣ_nzv÷IP]]WTcƌǜկ~~;x`fۭCϞ=p~۷oM׽vZ|8l6EANN.r߾_~!F4HT,Gϝ;%%%xG1ٮ@JJ <OmF555zbfÆ {[B{)_7,#"@M $AH$7 ~_xzWeewUUsEuu5TUٳgnśoϟ馛ZoFAG.//~;IIIHJJBee%f͚&e$ BEEn49uT̛7'N~ شix≰;qD,\uuuk.*gYo dv^M@_f/%K?яƏoxmaa!|0MP\\Tx!oF?0Çck޽{ [l?zq!//C ^ ݮYɲ?|QKeeebodր:-[I_|[o5hUj@=c =e˼y;]匈 N… qwtv ǬtAQqW{;"xx IdY6ۚ3q O,TEEE-:$""rfAe=0j2"""4mҷ 3Cը Ue?"#""'I^/TU5"@ZvH0SDDDD1OWHUUx)`$ u*51fςbY;!Rw)!"""":]4V)-c*#""اE(C 4=Q,SUՐ'A3BDDDdBd .]eDDDEB&(Ӧـ,O Ғ?s,Ϸ?o'""o;`,M `Hk`₢(z6zCDDDdi6PMe؀iI ١!Q\b(HLL \.,MQ(W QleY6CDDDdq UUO`cQz@zz\s l6=x<-泚,MttzCDDDdiZB.E?C21MFDDD.!!NϟP:!\.i{!b?CJ33DDDDr 4dDDDdiϟNkcb5Yx1""""Kw !"""4["""2 2DDD$dن(yk=>EӾC TLc`K HkI-h""""u澆pqB?DDDd5&3s1ˀC*HUm\&Z32"""}BhUdy75ADDDq-@0x03""""+ r7 n2"""kl3DDDDq-@Y """qz1[퉈$<=4Ɉ(1"""`!"""k (1"""`MlPVJDDDNIZax!"""+!"""k (1""""I Q|1"""` OH$H~(%x H3CDDDC@`l"""X%-Cf5a0DDDD&#""X'2C Q\1""""jCZBA"""X%2<vd6 p kCDDDTUn5j2"""4!l6^oɘ""""s؀$Ix!"""4 Yj Қ#(ֹ\/6Ѳ=Q4QeN@ d13DDDDf٠^x<^lڰY\BBTUvzn 1N"""g١(2<OK ɲDH@@b0DDDD&I@BvB4D@`tQP P\.7^~'=3CDDDvx.` 1l03"""Xb)cd8.x<͐-DDDD(2$I,KHNNm() $AUUx<^숱yq/,!"""m-68- EQ' 0!"""u,fk*s:HLLLYnB6EI( %%%A\l#$t:!mXFDDDִ{HJJBRR"t͆$ yn44xpPSS Y YVUUY֟$I$ .0b06CDDDdMn@̐!"""AY^/DsCnz6rA$CDDDzUUzt5ŇLx^Ѐ$9Pk]vvY .`f,.33񠡡N3N9Jź!jPɈ(ɲ 9ޑeY_{dDDDdi. ,} iwz""" z-BC f(CLYܹsZd*2Y܅ 1 \ |. "K`,rɈ(>ntj2BODDD֤u4@3CDDDdqZ&(CqDAAAg(*a}ib02S/ ""XVPPMQ080CDDd6ۥpG fvi`₢(zD .HDDD !zf(.WE 13DDDDn2!TUe5;wė_~ ""J[<dY3D!taZo]Z tWvvQrAi R^?xB7|sg(*(--  lc&0}>-3z47VUU:32!-$I)Pa\^z C A=>t:QTT3.2CjmoDDDDDVhh#*RRR 26C{X$""" cmLIDDDd5IY!DQhl6HۭCrebtBBn.Cl8MDDDV(nװYoߐd&#"""$s:zs@N%6Ery\PhUgDDDypVUm0""""KS^5`( !rv{L3""""Ks=pB5~,DjWFDDD . j* b0DDDDllYMFDDDN(Jk!MFDDDME[taf!"""{)af,MKJC""""!BDDDd5f o'"""K3՗E5If bEwQ\XmFDDDV%bf!"""k ( x7Y3CDDD Q\c0DDDDq-h0~jD x !!"""zf?b@DDDD ($Il (:DDDD!P.YMNv=GDDDde- 1""""+ ۘb@DDDDV*dDDDdii/ x{CI I 3CDDDdiZ𣪪i(D06ާ"f򂍹"bDDDD,#aCDDD[Mq!7DDDDV9!n'"""mZi3CDDDdiTM_]Y,ːvHZFJ"&&""r Uel@{ɚ pAtvQRZZvf!A!֞YWaa! (kfTU녢(= G][aaaЋ*<O`(pjVQl$ BUU >PBxۿtDDDDH$rimy<Y,o3C|Hi [@Kɾ 6e5 g@} AP3KDDD@].k `@EQ뉈k*//kܹ].녗^_  iUdZ5$IɈaM``H{=3CDDD1"P8,Ա?+0""" #˲א$IzC!"". ɲ? !""Ѐ8VuCZC0~|vvMtE0:l{w,T{l6 b@&_wP(APqËx𿖢pHl 5ORͦF,[|ww|Q_Vx430F~<7Z߿f8^YEsp|OHQl6C! NEDDD=)ŨQ7Ͷh?Z֞n߁y'.Eo݆O?ٯ?/>['\ݡ!ͦD33DDD:x8w_\B=гgOXs>?))N@nn.V~Ro`G,|p1_:4e6 m|x7 mL$u ~-zd xx瑔+M7 =u ܢOUUӎۓn$IPr 1z"".Nk@ݖ1wGƎxٳg/kٳ>KeXt1~7~{dg瘮-ZfeXMFDD Umnj/b ӅUDZl-aucsԡQU[o/\9WM0XUv{_x6ݗp Ikh7Q߽ o՗1{pt-.|@D+ԺTU)b0DDDյC!9rF巩T|~D;!1==ym[n3'If̼3fo:#(EQx`H+p1 \ ZODDtdk !t:v[bfk&SC.^Ӏ `(S5U;6ݻw(p\p:Cr\&3_"""|р:tw}7233 GoH-#f:f2;6Z  z1NQ h+8<^oQfupߢfPt:@a5Q6j(btacgz`5ji twaʋM""hܨQd@! i33DDD͞=[@!m ŁZ( w43C§c!IFt%"""J ʴ}!Ib∈H!,#F;DDDS" ^~{^CY~XMFDDD]GP[Қ~tm w'HZ*p*햻@ӑ]޿pB-]tι|vʯH:Ѷ X0ۻCPǧ5oShcH?65v/2 tGziv ^GvE1iݎt ]vmYEQL傢($ NgϞř3gp96̆]dPhA# |/gk>yEx,Xia~Y)2ڧ`ׄh$ [~Lu{Rocv_;GZ0>(!E :H~ -DԶ}ٙhCm既tk47ϑvO׶͘ir2|tŠ[F~ΗՏ,zfG444HHHh5싶2LZfHknJ}}=8`ZUm"jm 忽h}ek45y솖& Tvm-2+f0N8e ,E6P[[n5H[SI0dV_u`V@e|{TڏPY&]Vnus5Ỵ;/д*0UU( l6>nzZbbb̼h!<\.\.W*`WQC0O|>,\k֬̐YMV_.hd :y`oͯP˷!͇M/JyYNW4⧕YUH:f_P][fd̾c*hiMn9 Dt;K8@i"ς@mߚ@1k}> xzj~ GRAl-ժ|?3| z466o;$z-֭[o>|(Л"S]vx}Zl] GkoV"ZYЕ?+]Am,NkaY*X?4/86ML-EQgpefٳpv Op$ > .4_2(+_Ŭ I*1H[8F˜:_gȲK}*c[_mqWcV5ڣ fU5P6%~յ'I"B =C$PGm:og-Pictures/10000201000000E20000004A237AF0BF.pngPNG  IHDRJ_TIDATx{TT׽?57|GQVV橨@ +**~6ޱ,(;@HD (j,ފaFfnV3id"t("e@":Z]}CӆV*SsF70=ffrt4ZxaPdYFBLDD<|Oq@q(ɚ HӅiGFǥ3h:*p_KW4(dgg3yd tҘ4,33sut:Osr̙CPlL#CIDkw;/_bb6ۑe'@Qv;q2$!\%6 g}w]~S__s~ozjkkGTl6c6iiig'?(G6i O":]Nln$YvPDN.8dJ6]bG(:LfLvɆ xGb֬Y޽J>:[`:;;yǘ4i999L&゚~)wٳgk?Chx'p , ))w}wP;v hh4o}d^{5l$mO_{zĉ>׈~;vbueup:iLmkSx _y%3k7XS6^Ύ?Nvv϶3gM?^x6o̵kXj/w5k_&^x~_PvIMM 7 W^ f˖-mmڴ,jkk3#//۷κuXf 0cb͞;k.)rU.E8ٴ61y$ߙZVP5(* =p'Fc'^_gzV'ku:MMM0k,jkkQո\.̙3%@{ON?X}?¸9s1cgΜAm6LXXX@[)))eEEE={!'?>>r)L&mmmL6-bccHLLq[+Wb 4 eee̛7l ϥB۰Y[ENKTKn #S3o j={>N<<0d8:::(}=( ~i؟_tt4]]]+..e?[&M2&m%>>Ç֭[Yb  q\HdalnՉmV`Fi˭BkIwtvZ6mᅬnٳ]Cʢ޽{y衇e555deeh"^uz*6?:trΝ;>˙3ghGa߾}vvt JJJP Fo Ɩ$!*%n.&":\DGI:W_eƍ$&&SO=!lٲɓ'kꫯz^uV^Mjj*gMJJJ@^z;w|۷Rxֆ x5kӧO'***Ou޿޽͛7c0c޽޲}([|&kO>d[6hZ q?i"9=t%mNTp| )/?9rp8ؿ?pcĀɚsVX]FϱAt6]C톺;a:0 nUDY]Վ/XVAhᓈ_ȝw5g9gg*CCḾR!6R+Fnrǫ B0 7k*.EFF6ޥb-3]8LU0Q__O͵kX,tqw>D@ Aqt=uՊZfʔ)$$$0oCVO}O[$''Ojj*uuuyFCGUaikF UXMt^نfE$.w@g]4X K^^ހ#GpBN=Ñ#G|?mjjjjѣG8z(?00:k S&\""\Fֈ,Hv{ϫ,!I~Mt]Ӿ6k~}OF<`:yyyIAAA`5VjhTJL='IHX*c?] =rYYou:vpiO,^HĿ/.\`p*V[FYHnnc$GPr]t(K%|޸f3^Bǟj Z-ܹLX=4'j뗢7.-kFCii)Vm۶%b>VZšC?j زe }v PT룟,]ON j Je'i_z'=RRR;},˔l2>(| }HLL䡇Q]难x/Y?ϣRhhhC^=ʅ x'ذaw{^^۷ouֱf͚`LNNwoE݋5̙3`yDh4i&*++;`Ϟ=sHNNyqV~~>-"222>۩०R__?`vӽeňtM&+m1 Q'tMr+vttx `0(,,d2QTT~=qMJJz2+Wb 4 eeeKl}`4f_Fk-46wRs7AE3%'iDq׼4Sun,\XSkS%;r"qmkkx>LSS[neŊAC&dMV|ćPi%Ǜ(a*69uuuun5: Lkӧ/_Naa!---XV^y/^T+]$#xgddPRRZ`0 9gɒ%p88x K.=N>wW״U"0YvPWWGgg'B1Lx<, :3tM/_/Dzz:3f̠rФ z&9vdݻټy3<-[PTTDbb"e}ϣz+Qv5-fiTUUq9j/F^_|1&ANTn%]S΂ 8rh3ԤXsU8uԨiSXX;"ΞY%z|8J}k$&&P蝺\'knIJJ"!!⋬[nC֭[K/4f5w}yw.RRRDGGt:q8B۴k:%777F:}Ծ_]Ӄ%ݾ f(n6BшxzcP |G444VERFcc#jhZ->͊Y 7 (((Y,^ ("@QVV橨8[tU~55IENDB`PK9>: layout-cacheuT[HTQ]w,((", P(YDJ, R$^F}!Oc= 򯢒ֽwC =~`!;Vo YNβ*/@ @eY7#t! 0?QMz DjwH%Mٴ"^14wE.tx'.v+ޑ2%IBE~X>&0U_a@>ڕRR :Q Ҝ&eM?Vˎ ρ^ʃ||9 +oyC>U)<ƩD;ƻp@3S@=$I#1]@#4pz7 Ġ(dK Eբrf{7(m#"0!`{=,l9Ǣ@-8s}o nQDTzU)X5sv]Gvy鰛ƮIJF._ Вi ض?˸Co$}nБkXMKB#"DJR'\PT8aTZ8>w_7K݅xDr?IrRNPbu$V5-8 iu|8 gJ Ml Qd(: content.xmlrH&xOnPIZ(KRI%צMLDf$)̘^9f{O? dU86S-&_-]{/f Էo觻G6sOKESߋk/|Vŷs,|7ŻKYeC JƊ̪q?!tay_N..C[viE5x>|xB, 4pVV}_>`;F_ӍO-w*)/uD7N=d| D9{,_ܦo ◝O/,(EZBB<|.Qy:&S7|g zVhyaȠ.^[:vn#+}\N|Wӌ򰠙k8$0=MAZw7ٯG ~y4sjǻk~é{;P8&f89HͲmx[ʝXޣq.w<+roxE),?wnA˶\qRJ9𗖖euE_sul;|pH"(ٷiB{( j 'z:!eN*lQ7O5-?t"ӥ:z\gRkEN=c:A4Mso=ƻmX?ݨ2z]4.rw! RaX0wMFI h&Fɗo&k `M=oؔ[R1Tvն& Kfm7 w=sG_ Y>8Cdc&'lW$NV@{cmuʾP7:mm5*s8ݭc:fܞ7^xs[&`n{n0VI/7ݖͫ!xrW0TQ*Mi;`ʱQuO6x*eUlP8JQ(L.An8l܍䑼}w? uMmsr,oY?о7gYp{xXU5y.vZ@ؘQQ^<6j]uFJl;K4yzmGM^u׃-LYOZr/ן5ebl201Dx[ :/$({!.6䚦} *5@O5y^[pd5[At VQS"fNFfMj$}Λ[u7 +ҡ\7H&q랧C&Qb[CJx2;.#ïI.#u .DN3dh-k[$%PxwcT0!Mby` vxi9 #Qx; bm@GN߬nG#J 3a%9fAqReh-DNi[rA;i?ktSLUkMthISnnZB Lʶwc-|'Z-bcT%x] r\t:XɗۊTcr7o;+_u̝0f̯{ &w.C c~ћi1ZTJ"ߋbN[?EH X-t;˳;[;DӍѩFrOng֔D4tMNz-5ѝﻯ:O*6RK֧v!86FJ֏$m.*fwDM!ўPַcR?N/r\2ߓo]@n M6F-'uny{&1J9wL˕/LmSakƋ [1- 768s=!4܍SVcݮ_O;t_oKq6(ycNj4WkoM)"bjLy[rށD;VDBVK)% 3A mJBU~h,,&܌6Xk􊞳X]-Gp*Ɋ0yqSF~ƆƲg'yoQzJ!j-E,1 tde/+Q~WR :J0R{T_zČ#] ֹ_&Ű\Yzgw@D[ր )gLjOö_Fd\pʞJSh8\6 GE8@fƂ>>OQhVԙH_-*lX.o/ d MsPbB@`K˫Jg,G֣γ|=)NMvP!W' ;tf2J&h2"š5Pr4a7{ vw   z6A𑊞xLݛӸP%JZ14/ M %&Zνcf4UZ+HG>Av-Pb #zt_uXn|¼+JɣɔA#sW'L L:33/`vﺴʨS,cg #; <xC)ѩMdI%:* Ϗ:$0W#L%υL|'ZXS~q8䚆lѳ\Z3Qq=9X1 E@B4]rꭽu};6 YlhnfGf= ( cq:nw'-"2-I*ư/}*Y:Db$T<{U|e"#[50BoX Wg#0ƀ |aL2r_ƝDCl#1|.#3[JHPQK#R2oۚ]ZfgQArRAw?E@%? _Ok9(!=*O"7~ѿ|s9]ݘ+0D< b(xy{UyL`äIƉNfa?\^GW+ 6%R_eo_ce0S׼)M1()Yv_ ]nEiFp.܈NJGey\}5f{q;\fye@M 8gvVaA3E7ǃؽGe{9Wg}P =kw*cM|(̖ޒŠ:a9@YZ0-њ>bH2흫^ 4A/V`Ӟ (yC+' q@oƇǺ;K(ʇQ$ij؈'!=N4D/8a>7pTl(kn!W6:qI'|n[2^ޅ'p/)y/,>e%x?Potg/wA4>Qeh Pl \9uWFH4lDu ↷R=gqEHސ] ZnOtGszLj@@s_ecUT7AѰ*7?5(mz ]7NY OjMWC|C$ W?/A 4-!TYUd_CL$D?qC:NWG!CF~W9qz)}M'68^pUyR5+n(V sI] vm?_(}Y2Wdh|<<2Sepl@j.v$?C`ނ6tmڨmHmθ:xX{FW-ێZ(aRY& SpJ\a{M nbXݭ`jMU#a i:U5lJ]502JY"egxoƗ7gWW6Y9` mi.zp{ㄉx1ir=PlsBCHR|c|I]VS/%bT+.glfס9Dᰳd]A+89prVeE^i[ySoFojy"/pט6'0KEUչa%uLs)urE_0sK̏ ڭK+%z[N;hgB)[cu(5bj woB~ tH(nӨAɛ!tIw*e~ɧBvɒGMX6/a/A8\ JQ*i$Ư2빰P^_ٶ딶a,s`lBɗYRFE75|7' 1`G#]9$ a a6W=И . =sp٘V3Hbxzgq9 NcZ?)d!i0+J)M^ۓ ۑc(!:)t#j0sK)$H|+COKG-g;SbQ;5ˠIvsߘĥP,R D$́.].ų Z<@`,"9o`H~r ӯQj \bP(@dUs~URjN?t`?V0X% ?@ ؏И](qvGp1ʛ>WjOzޢif}A{Vm~΍¯.l<\&Y)ӝVfGrzk#;7 @\~P0Y~Q|ϝ)2=YI[֋g`,+>bEB oxVh^-Lj.BBd|4*c;hDAU/!9zÃ2!S!h 4nv3W+”4d Ihӣ@%t3<ڛHmڌ{!O6<YZ@'.);yLmLY:iXH=޲pL:'FT7|AɩS ||lשK$ů]y{kNYH k31eZA[8IH/QZH&=_QS-gg gԜ/cܓ؊PۉCB*!#5:Qry4M"uOaag?H-z }܈) UbiW1P݈L562F8F͌l ɔ A9^&|P?o7E+[nQڄU2RQ88й;hqߘ=LFͲ92bZ  }s0_/.Fue秳X$_Ϳb#8jaA7)8ғ̒H풾o$"EBR'$*hjcsIO;(̼>"!f)wn^^f.H#FONs5^<_W.WCjIw6QwPP(Lś#;} 6<0:g2a1AuCS8Ex0P*u##XS<$4DVh643AqWO'S@ ҥhp^6?;(Wyq<]$6LfRӟ_lHϯUݙϓ/O te/R 4JmZxݺ`ESa&]YڎmUwp-$XZ#? 1'. 8g,<%$>a$i!;RjjX,7+iv8%.NF* JuH*7+Ȁ|L1nνLDjYM߉h OMՇ OI )ix?+/U 0G:_hY Rob'KnRWpvYv2ҠTL(Q,F|3AI68M'EWF:JgxUWAl8,1]tb*균2ܲ8DGfvءo++ f/sh4s"):eĐiƽ 6I~ei^82qqoJu7(a8 ˊ(p Hũ։|~n0L;KAa9mݒP͸g߫|QV]?~" *8Ta*}DoHD8omAhڈ̶4_Ҹ{b q,DlՆb#oL?o>7Uoײ¯㔒3YYNuͭzU[ס;Pi+Ɍ?WV,Yr~WuCLg j;7Ƴ1bT/o#Xcuϊկֵ!~"&OJUZXەPU*tY6dI֠T)+] ^_{I.=_<Sl|22#Aº'HL6m}\c O ;~_!O8%"*ǐb e[j[X %3mIRp15R=29WX|.*g<` UOTn9U*P+wԟwg$}spY!Y`IֽCۙd odMMnejfjd`(D'%0n]H`FӸfHˎ(}!? W|ņѩS_'xA-HvEڢIvf 9oj~¼BJ|zB[PXdfSEvOܩ}*<6fJzP²)'>f艉+5tI,V7穑jryZS6zp[~_pAfH /x@(ȶ"n  ) H"pb`¤ԎJ磺ˢʝӵd%΢Rx!tcD V:7!{U7 ˒H? 5?9ƙ49b*ͦQnƕD*lX$Zr! `[_s7Vd:`AoI7L;Vk+ky5eM-oL3wD[R^}0C<WVhوQ!=FɞH/{2k+-6N2.Y&P-L,߲zN;<1!@J%]/vO!P4n1ağocw1ha!^B}$cpȸb֞zšДUlgK|6ѹ|nvdj,wfsSohסָℵ!>Mue5jAi6SUVnw&Kbj:]B׌L!mEt8C@!fpdo_#d:g*%3*:`>8ljݎ$q T"}$z"&N"nb=Q,Ƌ(+\&VrVb5.o$ X j\Aq!6kaYr8 ey!$ʷ5p N%=(#^%QL5iAf7 6@S<aۜYjf,qG%|>@]>4 d(s T) EYi/+ZSx(H DN@ceZk 0#@iRQ,H~-C@A[ &&s im-DV^;6u!ǗKƮy"A'`(ӑc /vqƎ1/";ƹU;F֖}5-|/({p.O:-no,:%T5bVmQu!:n(xݛv(<&e]B"sُ>w>wsbEX30-UUX_S Tv62%G*ˍWSL\u8@zA_t;5>13&eُpK39=cRJ6ț[sH0@8o{o`۸ǽ:YE>8K9le f (6Εmbjb/邼[lwĈĄ0'Zxo61Tl3}5cMk"uᰬEal bu1C=A~ש^3*tE! Ӕ#'dW" ֭s BK߮܏nq"T8,3\;K/fI)ALqb"1 ݺN@ `KW[W"elMv=VS*qVz֕TKWˆD@{϶Tf,H^#+fҫjuS%aK]{($CoSWpMzfBұ$6Sfulk%Ҍ*܌jrrT">S0:]w+++_{8%F^ 'zK0Z<d8m"G$7}@}ѮvF{gƾjdg{7v$؛k&iWM~yTm\\/,oH$W)Ǩ;H2O&)t-Zf ,7#YSwB5=:f\ܚC ]M.n WwMY 9>PO %}2B w$b^x\YcU5p7+'L΋͢&~(ά9W$ { 𼕗"᝼Y`j6;/{`i!3>Vatӝ%,x)ATW{+7}8xw>sM-y oōj|^&='ް_th˅x: PC# &ג&` Al۫=ڗgKO hؤg԰]ޓ!_= 3zb&MX}j|c2QϮe 7q5b/Ò-uba}F(g yJJ ?ݕd8%#e-y>H*RKWΌèTFhڙ| Zʹm mUoPoXlK뢝/,~vqh/=E%f%)1]it3H!lRL3MĢC ,},z<1S?`' 11 &KuiC_ Yܜa6~XA?9M2[R)LiɎ繕r^lQ.dT;(]]mւ9Yb6ZOނpiIh`_Efz qq_lLL:x=6wu9%';r=al"6A2._qW&vLĈ׶.8?Ah$bnJ0&>udv8Tp/L;܋K[=e"l t|C;uu'9<,+-`}mءPnM{ף}:Z6Mݑ=OS"󚰌Vu BXc E {M-XSB$IUR=1ef|7T({E<]=(N3/uN:܍ ?t9ǎILj|5 TLN(י)0;.٤8&8Ɏ3B|%TqcCQn/Hs)):?)!֖&iA;?9zvcdCKŠâm,wIa4i&QRYd-ʰ[s+r`Ä꜠QnBT^xi<GFIt8'l'7vk)<yW}dS4nSH2·5'̑_d-|8bZd,V$ۧaNX0}&=͠?,- vD3o¾4/fSY| Ϙb%N7A#Hh=DCVO$GoQFQ 3{'s@Tu0@ {'JPIwhW--L Q4@КSq,:ds9eźC"Ln ƳVQVE4ZcEK>pf^q s_VKNXAA&VX b(E: )$SsSf\/n*Q}ZpV^ym!KWT);J1ۻs*D ewM0tф]()0\$cx*cSxz.M˦Ys72t(Zֲn YW"( wԖ]^d ^*QCG x$Ebh|R28,/kj^f!nQ+*Di:Eb'g~ŝZ̪:C> ʞ T-]!d.(,%Lv.if r;&iKk`r!):d9eǿ"_͗& i4kN Ѹ$/EN,jOc5SixHTBJCQvJ"J뢴Դl[8<*X} TěѢVV0e֒Yf"婔ψdO0XQ0hO-G4F ["s݃E$cMD KfDmvI`2=fecacb1`?\ Sf!o O_)V461M%4z"; d?[Ç|Lμt^鴸LN2vT" b_#L+M1 .WPU2t P]»9L gj3 pUb{LG~'Ծ B*>8@&dgZo0=/ÃPaJ(&.ýZ9]r,v8Xt_3˯2 `Բ_ȩ91 VT_SUv"f՜kVGrZ˯ԵuD|R^ L'C1 3Q ڏj>T|`} S8}bT~bJU)i+Ja||0Un!$0Xşxx#_+ijO)|n7oo|-K1]XhI:!lmHgi\>y PO?(! (lĀj81졺q='HX?>UxP7}P"oqA汴_mV|bM<5DQ5̂&=+?|r9@3ץT4z_AGfHǺ @eN uDR5$}V3 0.pG4Nxay%oy+eANkDϲvE@u &Ti8aF )b3tf ATB~+ah*koMX0*lt9G%v_ep`cFݢ%py`c bM"=:ޠƳR>M15t}sQ>/ ,^rɐi?utFX4|NDUdoj^ ٬Yk x4Utg]ClFbO"2DEcq8>`d9ނ*=BADez+()sҵYefR7rH}8Rzu"#Bdi!:h̙y h:D(@'N'DŽ!eofT,!ʪR^T(A ͵&eO|ߩ'TNdI&NZ,Ga36.XϾ+BP! 4a/:Eg)*mY#\ý4eX*ٕ|ńsgQot9{pJ:]'bȞby4JV7o?]}pO!1L ͔ ՟A>pwuH2(﾿|Bjї~DQcE9CV w3$ Tm|qEUl!¶U] ) z: (q٤JdQ'~ӲhЦnk%3 Ev|m873!evuYpSiڄyVI~M>,H,QXm!N^\yV7P8zt0BrB9A @( Nx Bt|#o^*+R2QFp909pg\k_K`H*Ky*3tONr[+"X$)*D'")"?60U:ý~6Yk7B o;GԀnJU%cQO%w]QNKO㮜w \scJgS6I063E2+VaHnJW0 #QpCb:lp&M ^HԿVi^/l &35&P ]6ycQoD.!m@Jt ̒sD~P R-á ŗe^)c䊽k Ar6U% |k$ID.AF<) KJi lqo"5v9.UgK6*6NzlTg균):sϒy t:|ȍCCue%C.'*Ȳ5#UPy\f}lllXɘO_r,Z R m"Kd_dɕs5{jg4y]Vʌ. gmyC1Id{t%k W=ƫ& PWcc-<#o{drDbZGX^e 57wOX:&f== Sh)L?Pl1%|:8lQJ } >h ^Ы55lTZ( 4-&FZy ב Y(@J'Pv(}'S:k)Oi?nvr7v'~%GtI'M23'Jw_#+Y'_mrZ" d!X|`c-F5u߃S+x^B5[-K}1%WS0/#AӸ0Pr >}[Xo-oJEIuh)S_LW<  *00xk LK-gd A%3WI2PJ`wYe>[Fv, |UQs;¢~0,.1(eʐItUb8c [C=1onh: styles.xml\s۸_a)˶ƾIfHHbC"OQ!bb81Bĵ-$ͽgawd}|?qœ#Y8d彝䎠,w$ʼnntgR߉d`6 6[3†6洕h5gAl( miAf5%5q|5)^0zooKn7]MLr9~A4T?eSoM5m*5EJx` fϛPEtm*WpxmضT>},mCU4LSR !BܙΧA%ѐaj>B$nSySp37SR.ZOkc'~=U[7ѽ1e(<CdqZ{ C>^Qy$!ZCoۄ+JI:,-{uc;>_"'  hZđ'`1 0MF >Zdo)OIҍ3!_Oug`} P{UfJbԪbm޾](٦]LK!kG*(ӜmۚVvR Θ8e[f˽Nn*1 d)!qT?@tq٢7IaʵAS%qBudظFQfXC(2#8rFx`"a$EQE!Ɗb!YqkeގV3嚇`ZFCifN.ȹ܍5$UѹO"9,k"%?@Ro2Qd D$OsKe$Jtk@X(N_4//&Ϣ *̙!бk,>Q8 `q,vB8,hSi, wP 1Licq^;&kmf9=x ZS3vRY. 3Xt_HMz 7-ںf 4϶5fn(¦mPnܚeD(͸ڱCɮ9ԦWS f[SPfE,_]@ }>ItQ ;Y~dL\=ܧ {iNIa՝#"k!# WrWSc|7FNJ‘0 T9z̅@$vh kyvFyG>XXv+V7Hy3F7sr`RBf Ht#!no[bѺ ǀ4ivy ͆4W,- "잎Į>`Tf9vE}7ѿGп8O@4<AZnW̿(OGݞPGG}c-Z\B7в!|cyݶ{yy[c1mY,e{L8^#HKQNwYV$E0!}%m $ ^̗ĄSaӃr7D  C! Fgο/ ttsJG\gdmSAnՓxi菉?~<XB] ҪTV$Ox#|~./%0]<(,@Afi^iaZ'p(z`t?c-ȫ¥ jMq^#. ŅU(YScRi盓Get612/_CE"ndK4juۅ+|^ IFfrzOv:{5D2?/;tD`*8(,FNX[LǪ}_䀆m+䖠?|MNYܒܣp;>\~Ez76?QL)0}-&8Ǩ P{2`$֙ÙW}vg`îǒ5s7Ա|&ڑ +(YqQQ~$Yo'ue>jisUö6/dhy LrH7ᓢLAO^م?U c*_X##Qt€>)TO#l+CD$e:݋^F`73nF }Q/7?C( _%xe9k4OT{(1Y#:YQAwT[O%"jvѧ(_p'޵҈|ËVe t6o wU|+0 Cy,tNĩi}L\Pdh$ȟ:߷€AϖYf!b~@ SG5||Nz5#}^g櫂i Ϫh ܜU7۳j48Y5 gTq9Ze*&! g<]4ʬ awߐYQsTn9eVs*mf_#.!N.v5{Rn:6ƙrvR |Kħz|I4#;r ; ]ѵ<3l7Iǂb?~7E>&/̦i-451Dʱ<9تrriP W"QF-K2k͐gەkpbRho{2DS%mm.cĝqOXYgA/R fꧠAkn#A739ė少/l|`f*v҃lj"4@vŐFN[>"̯YX eG\ Q.#U@dOX~4Tw괎*ij\T:.zP oΚS%*H ,[lͭ47NXUL֬j7=gg.\"HP8>3"\`R5DBNJ-q1PK0 ZPK9>:]Աmeta.xml OpenOffice.org/2.0$Linux OpenOffice.org_project/680m5$Build-9073The eric4 plugin systemThis documents the eric4 plugin system, which was introduces with erid 4.1.2006-01-05T16:37:142009-01-30T08:14:42eric4 pluginen-US221PT22H11M8SPK9>:Thumbnails/thumbnail.png͖i4DMUFehXPұZbi5TQoUA(m*SM"U2Xj j}{}s~os.b²<<uFCN`yèa5Ҡw%磕V斱%74g&>nsggeo}9Eܶ;CErѹDUEiiږ?7ʕ Q?7_k8(ARRR.﹁G+ӝ41OizGBatI.glUqqQ{HgOϫB85kp}on m ~"*b Uy(M1{&QlxHU,hhbBzKkk[f6;nu @XOG7\~8:xG]R25s0*v/tjt .tʹw#y*)$##: settings.xmlYmS:~; a3M^DzHNZMGBff"g Y)ae΀ٴkי_ndPԹp_(\lxttࡏ3#l rKs eJDNFU%4'ʃ̃x_m5byޖR LYr>Isa*26 xN-߫H N5LJvt"!S$?{<YP1ŕCB dɀ ty`\MKc]\^Sb?zH>,P訦tiL]d;L\p$` 8>}l8ت>>޷̞^lR]FjuM\x1R'256>Ã0oGᘾorTdF}5kZ@& Ow8uHE Yh6?C< 9N7ئɎԺ2 qS#)yjKu͐u\5eɐ{[/W<PK@PK9>:META-INF/manifest.xmlŗ͎ $+@ `Xm޾v>m6H bfu5yJgeBnbJˬfRl6y0I}D1-t"YubD5\Uik.M'-^&W፨['W_ 654(=\wolUMfvss`U2%7bkۃy0cȳ寧J۶]g T>xt)`oնzML(U &.jKYeܩ{ok[~ w&{V&Jc @ }) H#}FiR G6 ? rH6$!!S (>a!:S:4PnW/$:i0[h4+NoJ<8>G` iYRC8E5 N10"^O2"_9+k%+wND_x}1pSU f_qpٚmgdҞ9XnLWq_B;~+?PK/FPK9>:^2 ''mimetypePK9>:MConfigurations2/statusbar/PK9>:'Configurations2/accelerator/current.xmlPK9>:Configurations2/floater/PK9>:Configurations2/popupmenu/PK9>:JConfigurations2/progressbar/PK9>:Configurations2/menubar/PK9>:Configurations2/toolbar/PK9>:Configurations2/images/Bitmaps/PK9>:}VV--Pictures/10000201000001A000000147A261748B.pngPK9>:鶚ZZ-PYPictures/1000020100000330000002BE5151AA03.pngPK9>:@:MM-FPictures/10000201000002040000007EF354E1A5.pngPK9>:K ""-Pictures/1000020100000273000001857917EB2D.pngPK9>: ٢qq-f5Pictures/10000201000000A70000008A052E8087.pngPK9>:__-"RPictures/1000020100000273000001851CD62038.pngPK9>:7:r-II-Pictures/1000020100000273000001855742E8BA.pngPK9>:*!~-HPictures/10000000000002CB0000001C9D94A0AE.pngPK9>:Hk-pfPictures/10000000000000860000001A5035CD76.pngPK9>:`G-mPictures/10000201000000FA000000479E5A79BA.pngPK9>:9\ S88-6Pictures/10000201000002160000022C197F3884.pngPK9>:Zd66-LPictures/100002010000027300000185067EF33F.pngPK9>:8k-:Pictures/1000020100000330000002731A299B26.pngPK9>:**-<Pictures/100002010000014B000000778C728882.pngPK9>:W-Pictures/1000020100000243000001FA43B6CF36.pngPK9>:og-GPictures/10000201000000E20000004A237AF0BF.pngPK9>:{@  [layout-cachePK9>:=_}a ]^content.xmlPK9>:0 Z styles.xmlPK9>:]Աmeta.xmlPK9>:L9Thumbnails/thumbnail.pngPK9>:@ settings.xmlPK9>:/FMETA-INF/manifest.xmlPK eric4-4.5.18/eric/Documentation/PaxHeaders.8617/mod_python.odt0000644000175000001440000000007410563426120022216 xustar000000000000000030 atime=1389081084.731724368 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/mod_python.odt0000644000175000001440000004441410563426120021752 0ustar00detlevusers00000000000000PKaX4^2 ''mimetypeapplication/vnd.oasis.opendocument.textPKaX4Configurations2/PKaX4 Pictures/PKaX4 content.xmlZr۸SdgBO;wMvukgt 1pP*E-OsdIal7g2O6'T$-\ȍbi0kc t^$+\Y8X*0Q34=&n/d0<&,JY"[O2߱ KŬ+1 @Fb87L6 qov'Uk5aUǵ(gi-Uʴ\Ma關kN(9l;]y,诮; K?DθL ENy^X絾oIeL)v][V%]{8̉Uc1rw޹rcUw&&]gimF9;$p>B4״*'3%jҤxk$Je*5^lUfnn˨anP7Ľ}auzHhTٯw^͢g3.T[`7_}f]Klof'LNV}B[0r> %;'ʼ9K07f6`*07sڂZk9c5Q6nϔaz\ܼ2 `&`=NH!1%3nե0|eG,L݊ʚ )?`\ IZě+u?53uU)p5P hFS ~1 F6@XK(1lV|kH̚92 ɴ`ҭ4@0HPP+@dvtmW80%ېuEZ3`i:VH7³Ù1` r3>Q~p[P!o5qZ8Z(Hu MܼBwкKX RiSI.?e;-eC#КBcM`({ >fk͓k]30nYb;izb;`YB)6ZkH"uY4͕wMONFUNZ!<#M5B̒ZRXwaf cu`AiDKA7Xb;Wb]ԁ KȎ1b)J k)\d U@np+?~x`kӿ8u Q9hPou9Q86P>P81;JZMa|(HS?]V9H6y鷢cRT}Cov$i;ik k{A~:L#(`~FxC@ ͶnXs8Oiӝ*}m~aܩn9tl&쥶]o,eFsHuN9+C\WH&W9ɨ\x L+Ҫ̈6]mnEOj,3b;d3^܉ DZ̈[>$`˃gQg)eokTϏx7b7_,˹6 (EQI<)Eer-56IymETa7:#{"Fw{]bfDb0 D6D6Vb;+FOӠm~yc*2͍~n>[UQ0Ecƍyrs@i{U 锭urO[ q*߿3 {3hQD|9gQXz[!(O4u%?R0tɅb#-ќ xBEށLŐ^[v- FRAQ/+F .Q(,[?}>%Nܓ?8pvgxbȂ w0hF| >V!rK 82LoDiż h1$TU@"r%ioBJm j hּ@m:Y▆-=$ jh^HLa8mfW1O9t0߄C~QXJ]Iv0Dsw,G6gܕ/*5-yS*Y.R+;6T.uUgY?oIٟ=͡Syv@[6@D3Lad.e<;d$HD(|.n:v+T aj.:)\{:IG{Z~R άTr߃L~}.KOJ0 IPp%5Yq FzE=pYRl+lzehD:|)̃ҮKyO@5 iH`))9-³Ƀ*aV*SPCcPOB؆+ǔpv\u }$ҔX{l˕/>>&t&Gr֝h޷EbJsyQBI 2b -^zq uB'v+=vfduHQЪFG .e( a^_/PVn`,^W!xB'8avς=Q&8c۫6ҳa0ŽW,F1r5B^)NAt27>Yu9bYal9Z|H=}8QyC,[+ЭZjTV-w`+7!\=X9 gQ +[E7wHh0}P H9vUΕ,/*ݢcU vǶ-K[b>=.'.)]m{ӜNPKBo-PKaX4xn[[meta.xml OpenOffice.org/2.0$Linux OpenOffice.org_project/680$Build-8825Detlev Offenbach2003-01-12T18:43:152006-04-06T13:03:03en-GB3PT25M5SPKaX4Thumbnails/thumbnail.pngZUC\-6Skqw/w nSA s~}8pdHeE)DDiq(XLF\D3p\O*d(\CRik1oHK(]flSSjOBoO.{w+ngfx}j5 c>0.ZSm↰a\(k`ҿ:EI}`C 32O eUADv=([i2"Yn1Y5}6|ȡz/dE5tZTdp %։no0Eγs7v;.%Bp{%"K\\[6; 7NDl rW\2p\5+JuWwIU,`}sxrt#ཐ8f:(m-=\-C&Пٷm*Po)X' :q7Y [cn/:For]󒤝$mhKJGxc ?.mMÊޅ =F}٣!)g9S~Ȣ{91:EBh⌤ *hD~mJ7~ŢEnqh4!gG|X:Fqv~{#xc@͚)QL+PJQŧJZ o_=EQꑥ?tMKG (rnVΙ#j~ <[l8 Q Me->޻ZxŢ:I4|4ADŸy/g1k4wn}92gyUdz<)z3ǠMY8ޣI#hNJ݊e}2VӀǎz$+t-ŲU4xhx߁;|N~N>FS:cw v!/FIh$Wv3zEDcMWY[gdH36DϙTޔC?h3U9©>Ed^3s֋H/ m< ?1/=v˝pz3RWORkӕS1Cu(O&O@k P>_|ebYDؗ_VlDG=GYmUmo3Ḧ́`-'T8,SJIvc iv+RsĚSSCR1sDڴbxד;dQ(|o@cqI٭.ݼʹBy?O5F J4)l#/  8c =hD9&\8A }A2eύxY ~M~kϳN|h7:$oϣx%rkȸ'D\z.Zg\ghTc8 !46~ir&ԼxrFFȺz%g% أ4u\!1r1v'I9/º} ɳʷ+F ~C"+P~B-sXNT@G{[iR‡Pd靍|$xy–*xGkO-V f0(.!"~ tΗ1J̈́6)7WAVqd=Cz?חQhϩ5+#^\4ɋх?'y$^ -k~&#'ȱ~zܱ|ٜL>F<*B]FMD;(<O}ܒvmul 랢ugr_?|4KsPh]<Qo䖉g*ԀlfT Tl`N#Rۋy_^f/t](Zn "VZ-;j#qH#Lzc׬{ӯ+=79Y=^nZiX@nږi:,O˘Xc@Oefn.k̛){dQw\;o.ߙ|Vwi9 :{koߡ_*͗ @ 7'QnlJg(O?ٍbSz-Jc h/:+f]a2X&@_Ժkvj  N`p#:",U6gN@c.W{ʼnWo KmE|=Q"KugjєgG?[GZ]pPs/Sj#ymZ'^ES3SM~7喊vZLcoXh%}4?N>t:e{efsd-XH].Jw dNE$+% ]~J\AD8jg)\&Ea^ȸ?̜VũdUydwF#QănFdH7yv-KwTDw{ދ*zbf(CӱN"V2d_D(If WGH6ԲYbrv]kV7q$^y-(Wɝ`||.(`.VOښI-ТQR^ϺȤ_@=N,}uC]c5;'xHD %(|qnQX¡T=֔id⎞D;@;_7Х^z j6Ŧ 5+b-#fNIiX`3O%(ϙ famd`>ݡ?(>`.-ik|,㹆Dr9o]T.x۹v Ѣ%c(8 B2$<ƾL׾:'ZӲ4ךNſg<:<[dd^4o;QAFFGȃteXx.-a '-5.)#j =J`ĚZK#®Z$7ꔳ)gUł|(UPG6>RhF4*v($ +-# N}Ŋ0P j$%-=Nnd&xc)Rq(L*y2@h/ 7n{ Pۛ (K}0"QN3LCr[(M$MiVL3!}|ve Iw{yv) *P+`,;Z28>TQP~dߓHɱP_EVw*yQ~eZ4 xe;L!QRRV w/Fk&6nA^\{N5jE"ˡ'z l0y93h_ y;3J!KL$5D0Q|i8"^|ąivMH,L"rnLO*E(}6X}\V뎓l;LVɘh#YԦWرm%ݘ";2vr5a2kO9ѵ팭 0ry{ ]OΦ7laSsU$4ݓ8~j%wv^bKxMcFF(P+ AB7%݀QmooC!L8| ,Do6;@J@Olb0zz~yMyFi;GEKe/5$ZfPד,´2X6T7\g7J15PgP Ŗ m"LHi`S`eW rEg1'a7$˭Bݨ8A 'ܖp4);o(~i nG7V2++z-}cH h?s[Gxg?]dQF_^Zc ,Q4`DƤ e"J$tabn>Hv*1!.:Y>#{B9= Z TS]B -w ifsl@c0mGi}-%Wt C ,) ?%%8um~,wWOҾ+ zWr:EGgْ{ɺ# >Rl M ! U?UF#yBލ"yiQ*fl%K*[*Y9p | PumK5x/@Ѩ_ZҴ +ìcV|.΂o.Ȥ>FWh)'/Sc}v"JY^ِdkָ7U䠳c~P֚CAmh~:>ܺ 7HgAjYD_VV~pfQƜa&b^ƶXvboV_^@OzEܙmo+J)4 I0ٜ ,51-=\h¥ 6JԭZx,_$4YzO\9("*!yXcoDl{q @ X15akηhkNO-8]#Ŗ,d6iX ;:Wb]]LA[IZ۪R\ҕ~pD⓪@U"P@$~>EYe(fD\Y^F;4,Iǖk}MhGB[YyN-~Tʢ!TxL uL6:GFCk Jdch+Y#X+pL]Gd`yH gN)lGQ5rTxiCbOi[ V.u2}>rj`Ǖ1.-YT;>,u~HjYx*餺."RL> Ԓ9tLXiWj{JɵȮ IH XGĿD;7O[Ko`b)FB0[ {nt Jdž> F?l7iw*cp5gv$HPςLe(P<"t psxQ[$:VgVMTP̭e>%/ԧ>T1_$4~zέ_Zj[-PTv-?K~U*Y?Иj>".bݎ{xHtm1ڈV_M*1EvgQ`gN,I A`xmgR=f5Hq;nꨓ/s,i#^EZS厼ڱ @gyHzdд|#$:A'1hz\JmVȢ?*68ni,IFgoW~.#V״]vyjb.-F8B%mFM h3c:Wwk%!.Z'XԌw˷'V-07޽0qWC]\FSX!}J]V_7FyIXn.%8( 0,L)#yJJ雭_Nus43KĦ5l#vD2*1/HIʂ%4 8% Q;ރ0u p˧xUN@8QM(,w|׵vxNM<dQ7inw!‰\_4'69`28E#1EPxpt+뷳N(Gs#R޾P ^E-[ЃjXN7k (wxAuwʼn?2"ʯ-(SsWP.[nlٕqMڋ dtm4/XkXY3km!m;hOhca3Ǫ]t{KLd>!FlgY%vӑ9'a3eڶO^9;&lMN<;A*/rZlN)jٹL^Czn'vr6d\eB' Y%.}&;t]˿?f4LhjTһ#9ƙ;^R%z86&CSfN< gP 2.4;KُIDF-? ^!yd/FyJ:%_IG0xj3N$ہk80\ rf.nZ_W {,"dZ7TEu5Xut1aO;1nGo,?4a0ݑf9E1%ְ¢ǀ¯F&2Y|PKQzmdHtBfaQqMH򪑲=I:s\eQA ^xY ,ЫrYSt%p;3fl߁]d.&f ¸/gݵy&U2  b4;#2P?jinJGcOnMB` NbL^*xbDM){_ěL>[7/ Ncgi1u=$b"r>n*0#᤹ACsy3m+-3B˪I4fFw=D Ԭ")F[>n߯~.te)<:lj+`bz 4NǴ38ǜDDfy1ndg'ÞR]!{ؤh?Ӗ +T?r@l[Tb.Sa۸)bqM=N]KR+<^X7- b Gpvs 'vךAĐKM酽Q^D Uz @KWqޮ#x`tqUMt"rO÷j~1h񿁫b%>X\e@Mӧ9 o7iz?TR^S㿴C EQPKs((PKaX4 settings.xmlYIs8ϯH:`H:S ]6 YaM-KnI t3W 0ZަmEHހ+zbG@}:2Mu8*H#rʈ93$Q(Q~E@W3fˑ +c.eTT$9INOUeURi0ەrGVwFzRY4*J_LXa~r`sHmVZ+C[랑Zos@Fj&hTkgTvSG܏8rGeG X% T|f3s΍R4~ o"?q?/VzT*m~hkE:J/mjxrγFi3H=&[qw ;o~S|/Hw`{c7He(޿˄xj݇w2C׹yYZLuɰF'(M)Yߞ Fpf|rG]DˢBvڏBEATNbGI5 2[hyD2f"CzuCRZmqݘ2ܤs'*%L%iƜ+sipt,'_6fc˺oUZGrb;dUiWrQDڥ5{.jQG p-Zq=r@[Tig"R5oYj)_lBXPZQHH!8~u rh8!B:u,/gՀ~[ JY u Ɓ^ +Dpz8=\9J[rLeWuE ʧOmPKw+7#PKaX4META-INF/manifest.xml1o0 {Se T0ttK\A P6~ݓn2WƔ?M[,S^g>My^J- ޼O\5DݖR.u-3_r1EUkoB]WdTڄ oƘޱ3(l@nuBRY) w{Ep.i4mS.("Xaj,lRn5Ђօ"c8 uu1 H: ˶FmԗrlQ\SyPKbi42PKaX4^2 ''mimetypePKaX4MConfigurations2/PKaX4 {Pictures/PKaX4w G+ content.xmlPKaX4Bo- styles.xmlPKaX4xn[[meta.xmlPKaX4s((TThumbnails/thumbnail.pngPKaX4w+7# @settings.xmlPKaX4bi42jEMETA-INF/manifest.xmlPK Feric4-4.5.18/eric/Documentation/PaxHeaders.8617/Source0000644000175000001440000000013112261331355020505 xustar000000000000000030 mtime=1388688109.162230395 29 atime=1389081086.01472434 30 ctime=1389081086.315724332 eric4-4.5.18/eric/Documentation/Source/0000755000175000001440000000000012261331355020315 5ustar00detlevusers00000000000000eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.ViewManager.ViewManager.html0000644000175000001440000000013112261331350027061 xustar000000000000000029 mtime=1388688104.33122797 30 atime=1389081084.754724366 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.ViewManager.ViewManager.html0000644000175000001440000025651012261331350026625 0ustar00detlevusers00000000000000 eric4.ViewManager.ViewManager

    eric4.ViewManager.ViewManager

    Module implementing the viewmanager base class.

    Global Attributes

    None

    Classes

    QuickSearchLineEdit Class implementing a line edit that reacts to newline and cancel commands.
    ViewManager Base class inherited by all specific viewmanager classes.

    Functions

    None


    QuickSearchLineEdit

    Class implementing a line edit that reacts to newline and cancel commands.

    Signals

    escPressed()
    emitted after the cancel command was activated
    gotFocus()
    emitted when the focus is changed to this widget
    returnPressed()
    emitted after a newline command was activated

    Derived from

    QLineEdit

    Class Attributes

    None

    Class Methods

    None

    Methods

    editorCommand Public method to perform an editor command.
    focusInEvent Re-implemented to record the current editor widget.
    keyPressEvent Re-implemented to handle the press of the ESC key.

    Static Methods

    None

    QuickSearchLineEdit.editorCommand

    editorCommand(cmd)

    Public method to perform an editor command.

    cmd
    the scintilla command to be performed

    QuickSearchLineEdit.focusInEvent

    focusInEvent(evt)

    Re-implemented to record the current editor widget.

    evt
    focus event (QFocusEvent)

    QuickSearchLineEdit.keyPressEvent

    keyPressEvent(evt)

    Re-implemented to handle the press of the ESC key.

    evt
    key event (QKeyPressEvent)


    ViewManager

    Base class inherited by all specific viewmanager classes.

    It defines the interface to be implemented by specific viewmanager classes and all common methods.

    Signals

    bookmarkToggled(editor)
    emitted when a bookmark is toggled.
    breakpointToggled(editor)
    emitted when a breakpoint is toggled.
    checkActions(editor)
    emitted when some actions should be checked for their status
    cursorChanged(editor)
    emitted after the cursor position of the active window has changed
    editorClosed(string)
    emitted just before an editor window gets closed
    editorClosedEd(editor)
    emitted just before an editor window gets closed
    editorOpened(string)
    emitted after an editor window was opened
    editorOpenedEd(editor)
    emitted after an editor window was opened
    editorSaved(string)
    emitted after an editor window was saved
    lastEditorClosed
    emitted after the last editor window was closed

    Derived from

    QObject

    Class Attributes

    None

    Class Methods

    None

    Methods

    ViewManager Constructor
    __addBookmarked Private method to add the current file to the list of bookmarked files.
    __autosave Private slot to save the contents of all editors automatically.
    __bookmarkSelected Private method to handle the bookmark selected signal.
    __bookmarkToggled Private slot to handle the bookmarkToggled signal.
    __breakpointToggled Private slot to handle the breakpointToggled signal.
    __clearAllBookmarks Private method to handle the clear all bookmarks action.
    __clearAllSyntaxErrors Private method to handle the clear all syntax errors action.
    __clearBookmarked Private method to clear the bookmarked files menu.
    __clearRecent Private method to clear the recent files menu.
    __connectEditor Private method to establish all editor connections.
    __convertEOL Private method to handle the convert line end characters action.
    __coverageMarkersShown Private slot to handle the coverageMarkersShown signal.
    __cursorChanged Private slot to handle the cursorChanged signal.
    __editAutoComplete Private method to handle the autocomplete action.
    __editAutoCompleteFromAPIs Private method to handle the autocomplete from APIs action.
    __editAutoCompleteFromAll Private method to handle the autocomplete from All action.
    __editAutoCompleteFromDoc Private method to handle the autocomplete from document action.
    __editBookmarked Private method to edit the list of bookmarked files.
    __editBoxComment Private method to handle the box comment action.
    __editComment Private method to handle the comment action.
    __editCopy Private method to handle the copy action.
    __editCut Private method to handle the cut action.
    __editDelete Private method to handle the delete action.
    __editDeselectAll Private method to handle the select all action.
    __editIndent Private method to handle the indent action.
    __editPaste Private method to handle the paste action.
    __editRedo Private method to handle the redo action.
    __editRevert Private method to handle the revert action.
    __editSelectAll Private method to handle the select all action.
    __editSelectBrace Private method to handle the select to brace action.
    __editShowCallTips Private method to handle the calltips action.
    __editSmartIndent Private method to handle the smart indent action
    __editStreamComment Private method to handle the stream comment action.
    __editUncomment Private method to handle the uncomment action.
    __editUndo Private method to handle the undo action.
    __editUnindent Private method to handle the unindent action.
    __editorAutoCompletionAPIsAvailable Private method to handle the availability of API autocompletion signal.
    __editorCommand Private method to send an editor command to the active window.
    __editorConfigChanged Private method to handle changes of an editors configuration (e.g.
    __editorOpened Private slot to handle the editorOpened signal.
    __editorSaved Private slot to handle the editorSaved signal.
    __enableSpellingActions Private method to set the enabled state of the spelling actions.
    __exportMenuTriggered Private method to handle the selection of an export format.
    __findFileName Private method to handle the search for file action.
    __goto Private method to handle the goto action.
    __gotoBrace Private method to handle the goto brace action.
    __gotoSyntaxError Private method to handle the goto syntax error action.
    __initBookmarkActions Private method defining the user interface actions for the bookmarks commands.
    __initContextMenuExporters Private method used to setup the Exporters sub menu.
    __initEditActions Private method defining the user interface actions for the edit commands.
    __initFileActions Private method defining the user interface actions for file handling.
    __initMacroActions Private method defining the user interface actions for the macro commands.
    __initSearchActions Private method defining the user interface actions for the search commands.
    __initSpellingActions Private method to initialize the spell checking actions.
    __initViewActions Private method defining the user interface actions for the view commands.
    __lastEditorClosed Private slot to handle the lastEditorClosed signal.
    __loadRecent Private method to load the recently opened filenames.
    __macroDelete Private method to handle the delete macro action.
    __macroLoad Private method to handle the load macro action.
    __macroRun Private method to handle the run macro action.
    __macroSave Private method to handle the save macro action.
    __macroStartRecording Private method to handle the start macro recording action.
    __macroStopRecording Private method to handle the stop macro recording action.
    __newLineBelow Private method to insert a new line below the current one even if cursor is not at the end of the line.
    __nextBookmark Private method to handle the next bookmark action.
    __nextTask Private method to handle the next task action.
    __nextUncovered Private method to handle the next uncovered action.
    __openSourceFile Private method to open a file from the list of rencently opened files.
    __previousBookmark Private method to handle the previous bookmark action.
    __previousTask Private method to handle the previous task action.
    __previousUncovered Private method to handle the previous uncovered action.
    __quickSearch Private slot to handle the incremental quick search.
    __quickSearchEnter Private slot to handle the incremental quick search return pressed (jump back to text)
    __quickSearchEscape Private slot to handle the incremental quick search escape pressed (jump back to text)
    __quickSearchExtend Private method to handle the quicksearch extend action.
    __quickSearchFocusIn Private method to handle a focus in signal of the quicksearch lineedit.
    __quickSearchInEditor Private slot to perform a quick search.
    __quickSearchMarkOccurrences Private method to mark all occurrences of the search text.
    __quickSearchPrev Private slot to handle the quickFindPrev toolbutton action.
    __quickSearchSetEditColors Private method to set the quick search edit colors.
    __quickSearchText Private slot to handle the textChanged signal of the quicksearch edit.
    __replace Private method to handle the replace action.
    __replaceFiles Private method to handle the replace in files action.
    __saveRecent Private method to save the list of recently opened filenames.
    __search Private method to handle the search action.
    __searchClearMarkers Private method to clear the search markers of the active window.
    __searchFiles Private method to handle the search in files action.
    __setAutoSpellChecking Private slot to set the automatic spell checking of all editors.
    __setSbFile Private method to set the file info in the status bar.
    __shortenEmptyLines Private method to handle the shorten empty lines action.
    __showBookmarkMenu Private method to set up the bookmark menu.
    __showBookmarkedMenu Private method to set up bookmarked files menu.
    __showBookmarksMenu Private method to handle the show bookmarks menu signal.
    __showFileMenu Private method to set up the file menu.
    __showRecentMenu Private method to set up recent files menu.
    __spellCheck Private slot to perform a spell check of the current editor.
    __splitOrientation Private method to handle the split orientation action.
    __splitView Private method to handle the split view action.
    __taskMarkersUpdated Protected slot to handle the syntaxerrorToggled signal.
    __toggleAll Private method to handle the toggle all folds action.
    __toggleAllChildren Private method to handle the toggle all folds (including children) action.
    __toggleBookmark Private method to handle the toggle bookmark action.
    __toggleCurrent Private method to handle the toggle current fold action.
    __zoom Private method to handle the zoom action.
    __zoomIn Private method to handle the zoom in action.
    __zoomOut Private method to handle the zoom out action.
    __zoomReset Private method to reset the zoom factor.
    _addView Protected method to add a view (i.e.
    _checkActions Protected slot to check some actions for their enable/disable status and set the statusbar info.
    _getOpenFileFilter Protected method to return the active filename filter for a file open dialog.
    _getOpenStartDir Protected method to return the starting directory for a file open dialog.
    _initWindowActions Protected method to define the user interface actions for window handling.
    _modificationStatusChanged Protected slot to handle the modificationStatusChanged signal.
    _removeAllViews Protected method to remove all views (i.e.
    _removeView Protected method to remove a view (i.e.
    _showView Protected method to show a view (i.e.
    _syntaxErrorToggled Protected slot to handle the syntaxerrorToggled signal.
    activeWindow Public method to return the active (i.e.
    addSplit Public method used to split the current view.
    addToExtrasMenu Public method to add some actions to the extras menu.
    addToRecentList Public slot to add a filename to the list of recently opened files.
    appFocusChanged Public method to handle the global change of focus.
    canCascade Public method to signal if cascading of managed windows is available.
    canSplit Public method to signal if splitting of the view is available.
    canTile Public method to signal if tiling of managed windows is available.
    cascade Public method to cascade the managed windows.
    checkAllDirty Public method to check the dirty status of all editors.
    checkDirty Public method to check dirty status and open a message window.
    cloneEditor Public method to clone an editor displaying the given document.
    closeAllWindows Private method to close all editor windows via file menu.
    closeCurrentWindow Public method to close the current window.
    closeEditor Public method to close an editor window.
    closeEditorWindow Public method to close an arbitrary source editor.
    closeViewManager Public method to shutdown the viewmanager.
    closeWindow Public method to close an arbitrary source editor.
    editorsCheckFocusInEnabled Public method returning the flag indicating editors should perform focus in checks.
    enableEditorsCheckFocusIn Public method to set a flag enabling the editors to perform focus in checks.
    eventFilter Public method called to filter an event.
    exit Public method to handle the debugged program terminating.
    getAPIsManager Public method to get a reference to the APIs manager.
    getActions Public method to get a list of all actions.
    getActiveName Public method to retrieve the filename of the active window.
    getEditor Public method to return the editor displaying the given file.
    getMostRecent Public method to get the most recently opened file.
    getOpenEditor Public method to return the editor displaying the given file.
    getOpenEditorCount Public method to return the count of editors displaying the given file.
    getOpenEditors Public method to get references to all open editors.
    getOpenEditorsCount Public method to get the number of open editors.
    getOpenFilenames Public method returning a list of the filenames of all editors.
    getSRHistory Public method to get the search or replace history list.
    handleResetUI Public slot to handle the resetUI signal.
    initActions Public method defining the user interface actions.
    initBookmarkMenu Public method to create the Bookmark menu
    initBookmarkToolbar Public method to create the Bookmark toolbar
    initEditMenu Public method to create the Edit menu
    initEditToolbar Public method to create the Edit toolbar
    initFileMenu Public method to create the File menu.
    initFileToolbar Public method to create the File toolbar.
    initMacroMenu Public method to create the Macro menu
    initSearchToolbars Public method to create the Search toolbars
    initSpellingToolbar Public method to create the Spelling toolbar
    initViewMenu Public method to create the View menu
    initViewToolbar Public method to create the View toolbar
    newEditor Public slot to generate a new empty editor.
    newEditorView Public method to create a new editor displaying the given document.
    nextSplit Public slot used to move to the next split.
    openFiles Public slot to open some files.
    openSourceFile Public slot to display a file in an editor.
    preferencesChanged Public slot to handle the preferencesChanged signal.
    prevSplit Public slot used to move to the previous split.
    printCurrentEditor Public slot to print the contents of the current editor.
    printEditor Public slot to print an editor.
    printPreviewCurrentEditor Public slot to show a print preview of the current editor.
    projectClosed Public slot to handle the projectClosed signal.
    projectFileRenamed Public slot to handle the projectFileRenamed signal.
    projectLexerAssociationsChanged Public slot to handle changes of the project lexer associations.
    projectOpened Public slot to handle the projectOpened signal.
    removeSplit Public method used to remove the current split view.
    saveAllEditors Public slot to save the contents of all editors.
    saveAsCurrentEditor Public slot to save the contents of the current editor to a new file.
    saveAsEditorEd Public slot to save the contents of an editor to a new file.
    saveCurrentEditor Public slot to save the contents of the current editor.
    saveEditor Public method to save a named editor file.
    saveEditorEd Public slot to save the contents of an editor.
    saveEditorsList Public slot to save a list of editors.
    setEditorName Public method to change the displayed name of the editor.
    setFileLine Public method to update the user interface when the current program or line changes.
    setReferences Public method to set some references needed later on.
    setSbInfo Public method to transfer statusbar info from the user interface to viewmanager.
    setSplitOrientation Public method used to set the orientation of the split view.
    showDebugSource Public method to open the given file and highlight the given line in it.
    showWindowMenu Public method to set up the viewmanager part of the Window menu.
    textForFind Public method to determine the selection or the current word for the next find operation.
    tile Public method to tile the managed windows.
    unhighlight Public method to switch off all highlights.

    Static Methods

    None

    ViewManager (Constructor)

    ViewManager()

    Constructor

    ui
    reference to the main user interface
    dbs
    reference to the debug server object

    ViewManager.__addBookmarked

    __addBookmarked()

    Private method to add the current file to the list of bookmarked files.

    ViewManager.__autosave

    __autosave()

    Private slot to save the contents of all editors automatically.

    Only named editors will be saved by the autosave timer.

    ViewManager.__bookmarkSelected

    __bookmarkSelected(act)

    Private method to handle the bookmark selected signal.

    act
    reference to the action that triggered (QAction)

    ViewManager.__bookmarkToggled

    __bookmarkToggled(editor)

    Private slot to handle the bookmarkToggled signal.

    It checks some bookmark actions and reemits the signal.

    editor
    editor that sent the signal

    ViewManager.__breakpointToggled

    __breakpointToggled(editor)

    Private slot to handle the breakpointToggled signal.

    It simply reemits the signal.

    editor
    editor that sent the signal

    ViewManager.__clearAllBookmarks

    __clearAllBookmarks()

    Private method to handle the clear all bookmarks action.

    ViewManager.__clearAllSyntaxErrors

    __clearAllSyntaxErrors()

    Private method to handle the clear all syntax errors action.

    ViewManager.__clearBookmarked

    __clearBookmarked()

    Private method to clear the bookmarked files menu.

    ViewManager.__clearRecent

    __clearRecent()

    Private method to clear the recent files menu.

    ViewManager.__connectEditor

    __connectEditor(editor)

    Private method to establish all editor connections.

    editor
    reference to the editor object to be connected

    ViewManager.__convertEOL

    __convertEOL()

    Private method to handle the convert line end characters action.

    ViewManager.__coverageMarkersShown

    __coverageMarkersShown(shown)

    Private slot to handle the coverageMarkersShown signal.

    shown
    flag indicating whether the markers were shown or cleared

    ViewManager.__cursorChanged

    __cursorChanged(fn, line, pos)

    Private slot to handle the cursorChanged signal.

    It emits the signal cursorChanged with parameter editor.

    fn
    filename (string)
    line
    line number of the cursor (int)
    pos
    position in line of the cursor (int)

    ViewManager.__editAutoComplete

    __editAutoComplete()

    Private method to handle the autocomplete action.

    ViewManager.__editAutoCompleteFromAPIs

    __editAutoCompleteFromAPIs()

    Private method to handle the autocomplete from APIs action.

    ViewManager.__editAutoCompleteFromAll

    __editAutoCompleteFromAll()

    Private method to handle the autocomplete from All action.

    ViewManager.__editAutoCompleteFromDoc

    __editAutoCompleteFromDoc()

    Private method to handle the autocomplete from document action.

    ViewManager.__editBookmarked

    __editBookmarked()

    Private method to edit the list of bookmarked files.

    ViewManager.__editBoxComment

    __editBoxComment()

    Private method to handle the box comment action.

    ViewManager.__editComment

    __editComment()

    Private method to handle the comment action.

    ViewManager.__editCopy

    __editCopy()

    Private method to handle the copy action.

    ViewManager.__editCut

    __editCut()

    Private method to handle the cut action.

    ViewManager.__editDelete

    __editDelete()

    Private method to handle the delete action.

    ViewManager.__editDeselectAll

    __editDeselectAll()

    Private method to handle the select all action.

    ViewManager.__editIndent

    __editIndent()

    Private method to handle the indent action.

    ViewManager.__editPaste

    __editPaste()

    Private method to handle the paste action.

    ViewManager.__editRedo

    __editRedo()

    Private method to handle the redo action.

    ViewManager.__editRevert

    __editRevert()

    Private method to handle the revert action.

    ViewManager.__editSelectAll

    __editSelectAll()

    Private method to handle the select all action.

    ViewManager.__editSelectBrace

    __editSelectBrace()

    Private method to handle the select to brace action.

    ViewManager.__editShowCallTips

    __editShowCallTips()

    Private method to handle the calltips action.

    ViewManager.__editSmartIndent

    __editSmartIndent()

    Private method to handle the smart indent action

    ViewManager.__editStreamComment

    __editStreamComment()

    Private method to handle the stream comment action.

    ViewManager.__editUncomment

    __editUncomment()

    Private method to handle the uncomment action.

    ViewManager.__editUndo

    __editUndo()

    Private method to handle the undo action.

    ViewManager.__editUnindent

    __editUnindent()

    Private method to handle the unindent action.

    ViewManager.__editorAutoCompletionAPIsAvailable

    __editorAutoCompletionAPIsAvailable(available)

    Private method to handle the availability of API autocompletion signal.

    ViewManager.__editorCommand

    __editorCommand(cmd)

    Private method to send an editor command to the active window.

    cmd
    the scintilla command to be sent

    ViewManager.__editorConfigChanged

    __editorConfigChanged()

    Private method to handle changes of an editors configuration (e.g. language).

    ViewManager.__editorOpened

    __editorOpened()

    Private slot to handle the editorOpened signal.

    ViewManager.__editorSaved

    __editorSaved(fn)

    Private slot to handle the editorSaved signal.

    It simply reemits the signal.

    fn
    filename of the saved editor

    ViewManager.__enableSpellingActions

    __enableSpellingActions()

    Private method to set the enabled state of the spelling actions.

    ViewManager.__exportMenuTriggered

    __exportMenuTriggered(act)

    Private method to handle the selection of an export format.

    act
    reference to the action that was triggered (QAction)

    ViewManager.__findFileName

    __findFileName()

    Private method to handle the search for file action.

    ViewManager.__goto

    __goto()

    Private method to handle the goto action.

    ViewManager.__gotoBrace

    __gotoBrace()

    Private method to handle the goto brace action.

    ViewManager.__gotoSyntaxError

    __gotoSyntaxError()

    Private method to handle the goto syntax error action.

    ViewManager.__initBookmarkActions

    __initBookmarkActions()

    Private method defining the user interface actions for the bookmarks commands.

    ViewManager.__initContextMenuExporters

    __initContextMenuExporters()

    Private method used to setup the Exporters sub menu.

    ViewManager.__initEditActions

    __initEditActions()

    Private method defining the user interface actions for the edit commands.

    ViewManager.__initFileActions

    __initFileActions()

    Private method defining the user interface actions for file handling.

    ViewManager.__initMacroActions

    __initMacroActions()

    Private method defining the user interface actions for the macro commands.

    ViewManager.__initSearchActions

    __initSearchActions()

    Private method defining the user interface actions for the search commands.

    ViewManager.__initSpellingActions

    __initSpellingActions()

    Private method to initialize the spell checking actions.

    ViewManager.__initViewActions

    __initViewActions()

    Private method defining the user interface actions for the view commands.

    ViewManager.__lastEditorClosed

    __lastEditorClosed()

    Private slot to handle the lastEditorClosed signal.

    ViewManager.__loadRecent

    __loadRecent()

    Private method to load the recently opened filenames.

    ViewManager.__macroDelete

    __macroDelete()

    Private method to handle the delete macro action.

    ViewManager.__macroLoad

    __macroLoad()

    Private method to handle the load macro action.

    ViewManager.__macroRun

    __macroRun()

    Private method to handle the run macro action.

    ViewManager.__macroSave

    __macroSave()

    Private method to handle the save macro action.

    ViewManager.__macroStartRecording

    __macroStartRecording()

    Private method to handle the start macro recording action.

    ViewManager.__macroStopRecording

    __macroStopRecording()

    Private method to handle the stop macro recording action.

    ViewManager.__newLineBelow

    __newLineBelow()

    Private method to insert a new line below the current one even if cursor is not at the end of the line.

    ViewManager.__nextBookmark

    __nextBookmark()

    Private method to handle the next bookmark action.

    ViewManager.__nextTask

    __nextTask()

    Private method to handle the next task action.

    ViewManager.__nextUncovered

    __nextUncovered()

    Private method to handle the next uncovered action.

    ViewManager.__openSourceFile

    __openSourceFile(act)

    Private method to open a file from the list of rencently opened files.

    act
    reference to the action that triggered (QAction)

    ViewManager.__previousBookmark

    __previousBookmark()

    Private method to handle the previous bookmark action.

    ViewManager.__previousTask

    __previousTask()

    Private method to handle the previous task action.

    ViewManager.__previousUncovered

    __previousUncovered()

    Private method to handle the previous uncovered action.

    ViewManager.__quickSearch

    __quickSearch()

    Private slot to handle the incremental quick search.

    ViewManager.__quickSearchEnter

    __quickSearchEnter()

    Private slot to handle the incremental quick search return pressed (jump back to text)

    ViewManager.__quickSearchEscape

    __quickSearchEscape()

    Private slot to handle the incremental quick search escape pressed (jump back to text)

    ViewManager.__quickSearchExtend

    __quickSearchExtend()

    Private method to handle the quicksearch extend action.

    ViewManager.__quickSearchFocusIn

    __quickSearchFocusIn()

    Private method to handle a focus in signal of the quicksearch lineedit.

    ViewManager.__quickSearchInEditor

    __quickSearchInEditor(again, back)

    Private slot to perform a quick search.

    again
    flag indicating a repeat of the last search (boolean)
    back
    flag indicating a backwards search operation (boolean)

    Author(s): Maciek Fijalkowski, 2005-07-23

    ViewManager.__quickSearchMarkOccurrences

    __quickSearchMarkOccurrences(txt)

    Private method to mark all occurrences of the search text.

    txt
    text to search for (QString)

    ViewManager.__quickSearchPrev

    __quickSearchPrev()

    Private slot to handle the quickFindPrev toolbutton action.

    ViewManager.__quickSearchSetEditColors

    __quickSearchSetEditColors(error)

    Private method to set the quick search edit colors.

    error
    flag indicating an error (boolean)

    ViewManager.__quickSearchText

    __quickSearchText()

    Private slot to handle the textChanged signal of the quicksearch edit.

    ViewManager.__replace

    __replace()

    Private method to handle the replace action.

    ViewManager.__replaceFiles

    __replaceFiles()

    Private method to handle the replace in files action.

    ViewManager.__saveRecent

    __saveRecent()

    Private method to save the list of recently opened filenames.

    ViewManager.__search

    __search()

    Private method to handle the search action.

    ViewManager.__searchClearMarkers

    __searchClearMarkers()

    Private method to clear the search markers of the active window.

    ViewManager.__searchFiles

    __searchFiles()

    Private method to handle the search in files action.

    ViewManager.__setAutoSpellChecking

    __setAutoSpellChecking()

    Private slot to set the automatic spell checking of all editors.

    ViewManager.__setSbFile

    __setSbFile(fn = None, line = None, pos = None, encoding = None, language = None, eol = None)

    Private method to set the file info in the status bar.

    fn
    filename to display (string)
    line
    line number to display (int)
    pos
    character position to display (int)
    encoding
    encoding name to display (string)
    language
    language to display (string)
    eol
    eol indicator to display (string)

    ViewManager.__shortenEmptyLines

    __shortenEmptyLines()

    Private method to handle the shorten empty lines action.

    ViewManager.__showBookmarkMenu

    __showBookmarkMenu()

    Private method to set up the bookmark menu.

    ViewManager.__showBookmarkedMenu

    __showBookmarkedMenu()

    Private method to set up bookmarked files menu.

    ViewManager.__showBookmarksMenu

    __showBookmarksMenu()

    Private method to handle the show bookmarks menu signal.

    ViewManager.__showFileMenu

    __showFileMenu()

    Private method to set up the file menu.

    ViewManager.__showRecentMenu

    __showRecentMenu()

    Private method to set up recent files menu.

    ViewManager.__spellCheck

    __spellCheck()

    Private slot to perform a spell check of the current editor.

    ViewManager.__splitOrientation

    __splitOrientation(checked)

    Private method to handle the split orientation action.

    ViewManager.__splitView

    __splitView()

    Private method to handle the split view action.

    ViewManager.__taskMarkersUpdated

    __taskMarkersUpdated(editor)

    Protected slot to handle the syntaxerrorToggled signal.

    It checks some syntax error actions and reemits the signal.

    editor
    editor that sent the signal

    ViewManager.__toggleAll

    __toggleAll()

    Private method to handle the toggle all folds action.

    ViewManager.__toggleAllChildren

    __toggleAllChildren()

    Private method to handle the toggle all folds (including children) action.

    ViewManager.__toggleBookmark

    __toggleBookmark()

    Private method to handle the toggle bookmark action.

    ViewManager.__toggleCurrent

    __toggleCurrent()

    Private method to handle the toggle current fold action.

    ViewManager.__zoom

    __zoom()

    Private method to handle the zoom action.

    ViewManager.__zoomIn

    __zoomIn()

    Private method to handle the zoom in action.

    ViewManager.__zoomOut

    __zoomOut()

    Private method to handle the zoom out action.

    ViewManager.__zoomReset

    __zoomReset()

    Private method to reset the zoom factor.

    ViewManager._addView

    _addView(win, fn=None, noName="")

    Protected method to add a view (i.e. window)

    win
    editor window to be added
    fn
    filename of this editor
    noName
    name to be used for an unnamed editor (string or QString)
    Raises RuntimeError:
    Not implemented

    ViewManager._checkActions

    _checkActions(editor, setSb = True)

    Protected slot to check some actions for their enable/disable status and set the statusbar info.

    editor
    editor window
    setSb
    flag indicating an update of the status bar is wanted (boolean)

    ViewManager._getOpenFileFilter

    _getOpenFileFilter()

    Protected method to return the active filename filter for a file open dialog.

    The appropriate filename filter is determined by file extension of the currently active editor.

    Returns:
    name of the filename filter (QString) or None

    ViewManager._getOpenStartDir

    _getOpenStartDir()

    Protected method to return the starting directory for a file open dialog.

    The appropriate starting directory is calculated using the following search order, until a match is found:
    1: Directory of currently active editor
    2: Directory of currently active Project
    3: CWD

    Returns:
    name of directory to start (string) or None

    ViewManager._initWindowActions

    _initWindowActions()

    Protected method to define the user interface actions for window handling.

    Raises RuntimeError:
    Not implemented

    ViewManager._modificationStatusChanged

    _modificationStatusChanged(m, editor)

    Protected slot to handle the modificationStatusChanged signal.

    m
    flag indicating the modification status (boolean)
    editor
    editor window changed
    Raises RuntimeError:
    Not implemented

    ViewManager._removeAllViews

    _removeAllViews()

    Protected method to remove all views (i.e. windows)

    Raises RuntimeError:
    Not implemented

    ViewManager._removeView

    _removeView(win)

    Protected method to remove a view (i.e. window)

    win
    editor window to be removed
    Raises RuntimeError:
    Not implemented

    ViewManager._showView

    _showView(win, fn=None)

    Protected method to show a view (i.e. window)

    win
    editor window to be shown
    fn
    filename of this editor
    Raises RuntimeError:
    Not implemented

    ViewManager._syntaxErrorToggled

    _syntaxErrorToggled(editor)

    Protected slot to handle the syntaxerrorToggled signal.

    It checks some syntax error actions and reemits the signal.

    editor
    editor that sent the signal

    ViewManager.activeWindow

    activeWindow()

    Public method to return the active (i.e. current) window.

    Returns:
    reference to the active editor
    Raises RuntimeError:
    Not implemented

    ViewManager.addSplit

    addSplit()

    Public method used to split the current view.

    ViewManager.addToExtrasMenu

    addToExtrasMenu(menu)

    Public method to add some actions to the extras menu.

    ViewManager.addToRecentList

    addToRecentList(fn)

    Public slot to add a filename to the list of recently opened files.

    fn
    name of the file to be added

    ViewManager.appFocusChanged

    appFocusChanged(old, now)

    Public method to handle the global change of focus.

    old
    reference to the widget loosing focus (QWidget)
    now
    reference to the widget gaining focus (QWidget)

    ViewManager.canCascade

    canCascade()

    Public method to signal if cascading of managed windows is available.

    Returns:
    flag indicating cascading of windows is available
    Raises RuntimeError:
    Not implemented

    ViewManager.canSplit

    canSplit()

    Public method to signal if splitting of the view is available.

    Returns:
    flag indicating splitting of the view is available.

    ViewManager.canTile

    canTile()

    Public method to signal if tiling of managed windows is available.

    Returns:
    flag indicating tiling of windows is available
    Raises RuntimeError:
    Not implemented

    ViewManager.cascade

    cascade()

    Public method to cascade the managed windows.

    Raises RuntimeError:
    Not implemented

    ViewManager.checkAllDirty

    checkAllDirty()

    Public method to check the dirty status of all editors.

    Returns:
    flag indicating successful reset of all dirty flags (boolean)

    ViewManager.checkDirty

    checkDirty(editor, autosave = False)

    Public method to check dirty status and open a message window.

    editor
    editor window to check
    autosave
    flag indicating that the file should be saved automatically (boolean)
    Returns:
    flag indicating successful reset of the dirty flag (boolean)

    ViewManager.cloneEditor

    cloneEditor(caller, filetype, fn)

    Public method to clone an editor displaying the given document.

    caller
    reference to the editor calling this method
    filetype
    type of the source file (string)
    fn
    filename of this view
    Returns:
    reference to the new editor object (Editor.Editor)

    ViewManager.closeAllWindows

    closeAllWindows()

    Private method to close all editor windows via file menu.

    ViewManager.closeCurrentWindow

    closeCurrentWindow()

    Public method to close the current window.

    Returns:
    flag indicating success (boolean)

    ViewManager.closeEditor

    closeEditor(editor)

    Public method to close an editor window.

    editor
    editor window to be closed
    Returns:
    flag indicating success (boolean)

    ViewManager.closeEditorWindow

    closeEditorWindow(editor)

    Public method to close an arbitrary source editor.

    editor
    editor to be closed

    ViewManager.closeViewManager

    closeViewManager()

    Public method to shutdown the viewmanager.

    If it cannot close all editor windows, it aborts the shutdown process.

    Returns:
    flag indicating success (boolean)

    ViewManager.closeWindow

    closeWindow(fn)

    Public method to close an arbitrary source editor.

    fn
    filename of editor to be closed
    Returns:
    flag indicating success (boolean)

    ViewManager.editorsCheckFocusInEnabled

    editorsCheckFocusInEnabled()

    Public method returning the flag indicating editors should perform focus in checks.

    Returns:
    flag indicating focus in checks should be performed (boolean)

    ViewManager.enableEditorsCheckFocusIn

    enableEditorsCheckFocusIn(enabled)

    Public method to set a flag enabling the editors to perform focus in checks.

    enabled
    flag indicating focus in checks should be performed (boolean)

    ViewManager.eventFilter

    eventFilter(object, event)

    Public method called to filter an event.

    object
    object, that generated the event (QObject)
    event
    the event, that was generated by object (QEvent)
    Returns:
    flag indicating if event was filtered out

    ViewManager.exit

    exit()

    Public method to handle the debugged program terminating.

    ViewManager.getAPIsManager

    getAPIsManager()

    Public method to get a reference to the APIs manager.

    Returns:
    the APIs manager object (eric4.QScintilla.APIsManager)

    ViewManager.getActions

    getActions(type)

    Public method to get a list of all actions.

    type
    string denoting the action set to get. It must be one of "edit", "file", "search", "view", "window", "macro" or "bookmark"
    Returns:
    list of all actions (list of E4Action)

    ViewManager.getActiveName

    getActiveName()

    Public method to retrieve the filename of the active window.

    Returns:
    filename of active window (string)

    ViewManager.getEditor

    getEditor(fn, filetype = "")

    Public method to return the editor displaying the given file.

    If there is no editor with the given file, a new editor window is created.

    fn
    filename to look for
    filetype
    type of the source file (string)
    Returns:
    tuple of two values giving a flag indicating a new window creation and a reference to the editor displaying this file

    ViewManager.getMostRecent

    getMostRecent()

    Public method to get the most recently opened file.

    Returns:
    path of the most recently opened file (string)

    ViewManager.getOpenEditor

    getOpenEditor(fn)

    Public method to return the editor displaying the given file.

    fn
    filename to look for
    Returns:
    a reference to the editor displaying this file or None, if no editor was found

    ViewManager.getOpenEditorCount

    getOpenEditorCount(fn)

    Public method to return the count of editors displaying the given file.

    fn
    filename to look for
    Returns:
    count of editors displaying this file (integer)

    ViewManager.getOpenEditors

    getOpenEditors()

    Public method to get references to all open editors.

    Returns:
    list of references to all open editors (list of QScintilla.editor)

    ViewManager.getOpenEditorsCount

    getOpenEditorsCount()

    Public method to get the number of open editors.

    Returns:
    number of open editors (integer)

    ViewManager.getOpenFilenames

    getOpenFilenames()

    Public method returning a list of the filenames of all editors.

    Returns:
    list of all opened filenames (list of strings)

    ViewManager.getSRHistory

    getSRHistory(key)

    Public method to get the search or replace history list.

    key
    list to return (must be 'search' or 'replace')
    Returns:
    the requested history list (QStringList)

    ViewManager.handleResetUI

    handleResetUI()

    Public slot to handle the resetUI signal.

    ViewManager.initActions

    initActions()

    Public method defining the user interface actions.

    ViewManager.initBookmarkMenu

    initBookmarkMenu()

    Public method to create the Bookmark menu

    Returns:
    the generated menu

    ViewManager.initBookmarkToolbar

    initBookmarkToolbar(toolbarManager)

    Public method to create the Bookmark toolbar

    toolbarManager
    reference to a toolbar manager object (E4ToolBarManager)
    Returns:
    the generated toolbar

    ViewManager.initEditMenu

    initEditMenu()

    Public method to create the Edit menu

    Returns:
    the generated menu

    ViewManager.initEditToolbar

    initEditToolbar(toolbarManager)

    Public method to create the Edit toolbar

    toolbarManager
    reference to a toolbar manager object (E4ToolBarManager)
    Returns:
    the generated toolbar

    ViewManager.initFileMenu

    initFileMenu()

    Public method to create the File menu.

    Returns:
    the generated menu

    ViewManager.initFileToolbar

    initFileToolbar(toolbarManager)

    Public method to create the File toolbar.

    toolbarManager
    reference to a toolbar manager object (E4ToolBarManager)
    Returns:
    the generated toolbar

    ViewManager.initMacroMenu

    initMacroMenu()

    Public method to create the Macro menu

    Returns:
    the generated menu

    ViewManager.initSearchToolbars

    initSearchToolbars(toolbarManager)

    Public method to create the Search toolbars

    toolbarManager
    reference to a toolbar manager object (E4ToolBarManager)
    Returns:
    a tuple of the generated toolbar (search, quicksearch)

    ViewManager.initSpellingToolbar

    initSpellingToolbar(toolbarManager)

    Public method to create the Spelling toolbar

    toolbarManager
    reference to a toolbar manager object (E4ToolBarManager)
    Returns:
    the generated toolbar

    ViewManager.initViewMenu

    initViewMenu()

    Public method to create the View menu

    Returns:
    the generated menu

    ViewManager.initViewToolbar

    initViewToolbar(toolbarManager)

    Public method to create the View toolbar

    toolbarManager
    reference to a toolbar manager object (E4ToolBarManager)
    Returns:
    the generated toolbar

    ViewManager.newEditor

    newEditor()

    Public slot to generate a new empty editor.

    ViewManager.newEditorView

    newEditorView(fn, caller, filetype = "")

    Public method to create a new editor displaying the given document.

    fn
    filename of this view
    caller
    reference to the editor calling this method
    filetype
    type of the source file (string)

    ViewManager.nextSplit

    nextSplit()

    Public slot used to move to the next split.

    ViewManager.openFiles

    openFiles(prog = None)

    Public slot to open some files.

    prog
    name of file to be opened (string or QString)

    ViewManager.openSourceFile

    openSourceFile(fn, lineno = -1, filetype = "", selection = None)

    Public slot to display a file in an editor.

    fn
    name of file to be opened
    lineno
    line number to place the cursor at
    filetype
    type of the source file (string)
    selection
    tuple (start, end) of an area to be selected

    ViewManager.preferencesChanged

    preferencesChanged()

    Public slot to handle the preferencesChanged signal.

    This method performs the following actions

    • reread the colours for the syntax highlighting
    • reloads the already created API objetcs
    • starts or stops the autosave timer
    • Note: changes in viewmanager type are activated on an application restart.

    ViewManager.prevSplit

    prevSplit()

    Public slot used to move to the previous split.

    ViewManager.printCurrentEditor

    printCurrentEditor()

    Public slot to print the contents of the current editor.

    ViewManager.printEditor

    printEditor(editor)

    Public slot to print an editor.

    editor
    editor to be printed

    ViewManager.printPreviewCurrentEditor

    printPreviewCurrentEditor()

    Public slot to show a print preview of the current editor.

    ViewManager.projectClosed

    projectClosed()

    Public slot to handle the projectClosed signal.

    ViewManager.projectFileRenamed

    projectFileRenamed(oldfn, newfn)

    Public slot to handle the projectFileRenamed signal.

    oldfn
    old filename of the file (string)
    newfn
    new filename of the file (string)

    ViewManager.projectLexerAssociationsChanged

    projectLexerAssociationsChanged()

    Public slot to handle changes of the project lexer associations.

    ViewManager.projectOpened

    projectOpened()

    Public slot to handle the projectOpened signal.

    ViewManager.removeSplit

    removeSplit()

    Public method used to remove the current split view.

    Returns:
    Flag indicating successful deletion

    ViewManager.saveAllEditors

    saveAllEditors()

    Public slot to save the contents of all editors.

    ViewManager.saveAsCurrentEditor

    saveAsCurrentEditor()

    Public slot to save the contents of the current editor to a new file.

    ViewManager.saveAsEditorEd

    saveAsEditorEd(ed)

    Public slot to save the contents of an editor to a new file.

    ed
    editor to be saved

    ViewManager.saveCurrentEditor

    saveCurrentEditor()

    Public slot to save the contents of the current editor.

    ViewManager.saveEditor

    saveEditor(fn)

    Public method to save a named editor file.

    fn
    filename of editor to be saved (string)
    Returns:
    flag indicating success (boolean)

    ViewManager.saveEditorEd

    saveEditorEd(ed)

    Public slot to save the contents of an editor.

    ed
    editor to be saved
    Returns:
    flag indicating success (boolean)

    ViewManager.saveEditorsList

    saveEditorsList(editors)

    Public slot to save a list of editors.

    editors
    list of editors to be saved

    ViewManager.setEditorName

    setEditorName(editor, newName)

    Public method to change the displayed name of the editor.

    editor
    editor window to be changed
    newName
    new name to be shown (string or QString)
    Raises RuntimeError:
    Not implemented

    ViewManager.setFileLine

    setFileLine(fn, line, error = False, syntaxError = False)

    Public method to update the user interface when the current program or line changes.

    fn
    filename of editor to update (string)
    line
    line number to highlight (int)
    error
    flag indicating an error highlight (boolean)
    syntaxError
    flag indicating a syntax error

    ViewManager.setReferences

    setReferences(ui, dbs)

    Public method to set some references needed later on.

    ui
    reference to the main user interface
    dbs
    reference to the debug server object

    ViewManager.setSbInfo

    setSbInfo(sbFile, sbLine, sbPos, sbWritable, sbEncoding, sbLanguage, sbEol)

    Public method to transfer statusbar info from the user interface to viewmanager.

    sbFile
    reference to the file part of the statusbar (E4SqueezeLabelPath)
    sbLine
    reference to the line number part of the statusbar (QLabel)
    sbPos
    reference to the character position part of the statusbar (QLabel)
    sbWritable
    reference to the writability indicator part of the statusbar (QLabel)
    sbEncoding
    reference to the encoding indicator part of the statusbar (QLabel)
    sbLanguage
    reference to the language indicator part of the statusbar (QLabel)
    sbEol
    reference to the eol indicator part of the statusbar (QLabel)

    ViewManager.setSplitOrientation

    setSplitOrientation(orientation)

    Public method used to set the orientation of the split view.

    orientation
    orientation of the split (Qt.Horizontal or Qt.Vertical)

    ViewManager.showDebugSource

    showDebugSource(fn, line)

    Public method to open the given file and highlight the given line in it.

    fn
    filename of editor to update (string)
    line
    line number to highlight (int)

    ViewManager.showWindowMenu

    showWindowMenu(windowMenu)

    Public method to set up the viewmanager part of the Window menu.

    windowMenu
    reference to the window menu
    Raises RuntimeError:
    Not implemented

    ViewManager.textForFind

    textForFind(getCurrentWord = True)

    Public method to determine the selection or the current word for the next find operation.

    getCurrentWord
    flag indicating to return the current word, if no selected text was found (boolean)
    Returns:
    selection or current word (QString)

    ViewManager.tile

    tile()

    Public method to tile the managed windows.

    Raises RuntimeError:
    Not implemented

    ViewManager.unhighlight

    unhighlight(current = False)

    Public method to switch off all highlights.

    current
    flag indicating only the current editor should be unhighlighted (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.Lexers.LexerCMake.html0000644000175000001440000000013212261331354027740 xustar000000000000000030 mtime=1388688108.503230064 30 atime=1389081084.783724366 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.Lexers.LexerCMake.html0000644000175000001440000000657212261331354027504 0ustar00detlevusers00000000000000 eric4.QScintilla.Lexers.LexerCMake

    eric4.QScintilla.Lexers.LexerCMake

    Module implementing a CMake lexer with some additional methods.

    Global Attributes

    None

    Classes

    LexerCMake Subclass to implement some additional lexer dependant methods.

    Functions

    None


    LexerCMake

    Subclass to implement some additional lexer dependant methods.

    Derived from

    QsciLexerCMake, Lexer

    Class Attributes

    None

    Class Methods

    None

    Methods

    LexerCMake Constructor
    defaultKeywords Public method to get the default keywords.
    initProperties Public slot to initialize the properties.
    isCommentStyle Public method to check, if a style is a comment style.
    isStringStyle Public method to check, if a style is a string style.

    Static Methods

    None

    LexerCMake (Constructor)

    LexerCMake(parent=None)

    Constructor

    parent
    parent widget of this lexer

    LexerCMake.defaultKeywords

    defaultKeywords(kwSet)

    Public method to get the default keywords.

    kwSet
    number of the keyword set (integer)
    Returns:
    string giving the keywords (string) or None

    LexerCMake.initProperties

    initProperties()

    Public slot to initialize the properties.

    LexerCMake.isCommentStyle

    isCommentStyle(style)

    Public method to check, if a style is a comment style.

    Returns:
    flag indicating a comment style (boolean)

    LexerCMake.isStringStyle

    isStringStyle(style)

    Public method to check, if a style is a string style.

    Returns:
    flag indicating a string style (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Project.ProjectFormsBrowser.html0000644000175000001440000000013212261331351030040 xustar000000000000000030 mtime=1388688105.887228751 30 atime=1389081084.783724366 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Project.ProjectFormsBrowser.html0000644000175000001440000004031312261331351027573 0ustar00detlevusers00000000000000 eric4.Project.ProjectFormsBrowser

    eric4.Project.ProjectFormsBrowser

    Module implementing a class used to display the forms part of the project.

    Global Attributes

    None

    Classes

    ProjectFormsBrowser A class used to display the forms part of the project.

    Functions

    None


    ProjectFormsBrowser

    A class used to display the forms part of the project.

    Signals

    appendStderr(string)
    emitted after something was received from a QProcess on stderr
    closeSourceWindow(string)
    emitted after a file has been removed/deleted from the project
    menusAboutToBeCreated
    emitted when the context menu are about to be created. This is the right moment to add or remove hook methods.
    showMenu(string, QMenu)
    emitted when a menu is about to be shown. The name of the menu and a reference to the menu are given.
    sourceFile(string)
    emitted to open a forms file in an editor
    trpreview(string list)
    emitted to preview form files in the translations previewer
    uipreview(string)
    emitted to preview a forms file

    Derived from

    ProjectBaseBrowser

    Class Attributes

    None

    Class Methods

    None

    Methods

    ProjectFormsBrowser Constructor
    __TRPreview Private slot to handle the Preview translations action.
    __UIPreview Private slot to handle the Preview menu action.
    __addFormFiles Private method to add form files to the project.
    __addFormsDirectory Private method to add form files of a directory to the project.
    __compileAllForms Private method to compile all forms to source files.
    __compileForm Private method to compile a form to a source file.
    __compileSelectedForms Private method to compile selected forms to source files.
    __compileUI Privat method to compile a .ui file to a .py/.rb file.
    __compileUIDone Private slot to handle the finished signal of the pyuic/rbuic process.
    __deleteFile Private method to delete a form file from the project.
    __generateDialogCode Private method to generate dialog code for the form (Qt4 only)
    __generateSubclass Private method to generate a subclass for the form (Qt3 only).
    __itemsHaveDesignerHeaderFiles Private method to check, if items contain designer header files.
    __newForm Private slot to handle the New Form menu action.
    __newUiForm Private slot to handle the New Form menu action for Qt-related projects.
    __openFile Private slot to handle the Open menu action.
    __openFileInEditor Private slot to handle the Open in Editor menu action.
    __readStderr Private slot to handle the readyReadStandardError signal of the pyuic/rbuic process.
    __readStdout Private slot to handle the readyReadStandardOutput signal of the pyuic/rbuic process.
    __showContextMenu Private slot called by the menu aboutToShow signal.
    __showContextMenuBack Private slot called by the backMenu aboutToShow signal.
    __showContextMenuDir Private slot called by the dirMenu aboutToShow signal.
    __showContextMenuDirMulti Private slot called by the dirMultiMenu aboutToShow signal.
    __showContextMenuMulti Private slot called by the multiMenu aboutToShow signal.
    _contextMenuRequested Protected slot to show the context menu.
    _createPopupMenus Protected overloaded method to generate the popup menu.
    _initHookMethods Protected method to initialize the hooks dictionary.
    _openItem Protected slot to handle the open popup menu entry.
    compileChangedForms Public method to compile all changed forms to source files.
    handlePreferencesChanged Public slot used to handle the preferencesChanged signal.

    Static Methods

    None

    ProjectFormsBrowser (Constructor)

    ProjectFormsBrowser(project, parent = None)

    Constructor

    project
    reference to the project object
    parent
    parent widget of this browser (QWidget)

    ProjectFormsBrowser.__TRPreview

    __TRPreview()

    Private slot to handle the Preview translations action.

    ProjectFormsBrowser.__UIPreview

    __UIPreview()

    Private slot to handle the Preview menu action.

    ProjectFormsBrowser.__addFormFiles

    __addFormFiles()

    Private method to add form files to the project.

    ProjectFormsBrowser.__addFormsDirectory

    __addFormsDirectory()

    Private method to add form files of a directory to the project.

    ProjectFormsBrowser.__compileAllForms

    __compileAllForms()

    Private method to compile all forms to source files.

    ProjectFormsBrowser.__compileForm

    __compileForm()

    Private method to compile a form to a source file.

    ProjectFormsBrowser.__compileSelectedForms

    __compileSelectedForms()

    Private method to compile selected forms to source files.

    ProjectFormsBrowser.__compileUI

    __compileUI(fn, noDialog = False, progress = None)

    Privat method to compile a .ui file to a .py/.rb file.

    fn
    filename of the .ui file to be compiled
    noDialog
    flag indicating silent operations
    progress
    reference to the progress dialog
    Returns:
    reference to the compile process (QProcess)

    ProjectFormsBrowser.__compileUIDone

    __compileUIDone(exitCode, exitStatus)

    Private slot to handle the finished signal of the pyuic/rbuic process.

    exitCode
    exit code of the process (integer)
    exitStatus
    exit status of the process (QProcess.ExitStatus)

    ProjectFormsBrowser.__deleteFile

    __deleteFile()

    Private method to delete a form file from the project.

    ProjectFormsBrowser.__generateDialogCode

    __generateDialogCode()

    Private method to generate dialog code for the form (Qt4 only)

    ProjectFormsBrowser.__generateSubclass

    __generateSubclass()

    Private method to generate a subclass for the form (Qt3 only).

    ProjectFormsBrowser.__itemsHaveDesignerHeaderFiles

    __itemsHaveDesignerHeaderFiles(items)

    Private method to check, if items contain designer header files.

    items
    items to check (list of ProjectBrowserFileItems)
    Returns:
    flag indicating designer header files were found (boolean)

    ProjectFormsBrowser.__newForm

    __newForm()

    Private slot to handle the New Form menu action.

    ProjectFormsBrowser.__newUiForm

    __newUiForm(path)

    Private slot to handle the New Form menu action for Qt-related projects.

    path
    full directory path for the new form file (string)

    ProjectFormsBrowser.__openFile

    __openFile()

    Private slot to handle the Open menu action.

    This uses the projects UI type to determine the Qt Designer version to use.

    ProjectFormsBrowser.__openFileInEditor

    __openFileInEditor()

    Private slot to handle the Open in Editor menu action.

    ProjectFormsBrowser.__readStderr

    __readStderr()

    Private slot to handle the readyReadStandardError signal of the pyuic/rbuic process.

    ProjectFormsBrowser.__readStdout

    __readStdout()

    Private slot to handle the readyReadStandardOutput signal of the pyuic/rbuic process.

    ProjectFormsBrowser.__showContextMenu

    __showContextMenu()

    Private slot called by the menu aboutToShow signal.

    ProjectFormsBrowser.__showContextMenuBack

    __showContextMenuBack()

    Private slot called by the backMenu aboutToShow signal.

    ProjectFormsBrowser.__showContextMenuDir

    __showContextMenuDir()

    Private slot called by the dirMenu aboutToShow signal.

    ProjectFormsBrowser.__showContextMenuDirMulti

    __showContextMenuDirMulti()

    Private slot called by the dirMultiMenu aboutToShow signal.

    ProjectFormsBrowser.__showContextMenuMulti

    __showContextMenuMulti()

    Private slot called by the multiMenu aboutToShow signal.

    ProjectFormsBrowser._contextMenuRequested

    _contextMenuRequested(coord)

    Protected slot to show the context menu.

    coord
    the position of the mouse pointer (QPoint)

    ProjectFormsBrowser._createPopupMenus

    _createPopupMenus()

    Protected overloaded method to generate the popup menu.

    ProjectFormsBrowser._initHookMethods

    _initHookMethods()

    Protected method to initialize the hooks dictionary.

    Supported hook methods are:

    • compileForm: takes filename as parameter
    • compileAllForms: takes list of filenames as parameter
    • compileSelectedForms: takes list of filenames as parameter
    • compileChangedForms: takes list of filenames as parameter
    • generateDialogCode: takes filename as parameter
    • newForm: takes full directory path of new file as parameter

    Note: Filenames are relative to the project directory, if not specified differently.

    ProjectFormsBrowser._openItem

    _openItem()

    Protected slot to handle the open popup menu entry.

    ProjectFormsBrowser.compileChangedForms

    compileChangedForms()

    Public method to compile all changed forms to source files.

    ProjectFormsBrowser.handlePreferencesChanged

    handlePreferencesChanged()

    Public slot used to handle the preferencesChanged signal.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Utilities.__init__.html0000644000175000001440000000013112261331351026162 xustar000000000000000029 mtime=1388688105.64722863 30 atime=1389081084.790724366 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Utilities.__init__.html0000644000175000001440000011014012261331351025712 0ustar00detlevusers00000000000000 eric4.Utilities.__init__

    eric4.Utilities.__init__

    Package implementing various functions/classes needed everywhere within eric4.

    Global Attributes

    _escape
    _escape_map
    _uescape
    coding_regexps
    configDir
    supportedCodecs

    Classes

    CodingError Class implementing an exception, which is raised, if a given coding is incorrect.

    Functions

    __showwarning Module function to raise a SyntaxError for a SyntaxWarning.
    _percentReplacementFunc Protected function called for replacing % codes.
    checkBlacklistedVersions Module functions to check for blacklisted versions of the prerequisites.
    compactPath Function to return a compacted path fitting inside the given width.
    compile Function to compile one Python source file to Python bytecode.
    convertLineEnds Function to convert the end of line characters.
    decode Function to decode a text.
    decodeBytes Function to decode some text into a unicode string.
    decodeWithHash Function to decode a text and calculate the MD5 hash.
    direntries Function returning a list of all files and directories.
    encode Function to encode a text.
    escape_entities Function to encode html entities.
    escape_uentities Function to encode html entities.
    fromNativeSeparators Function returning a path, that is using "/" separator characters.
    generateDistroInfo Module function to generate a string with distribution infos.
    generatePluginsVersionInfo Module function to generate a string with plugins version infos.
    generatePySideToolPath Module function to generate the executable path for a PySide tool.
    generateQtToolName Module function to generate the executable name for a Qt tool like designer.
    generateVersionInfo Module function to generate a string with various version infos.
    getConfigDir Module function to get the name of the directory storing the config data.
    getDirs Function returning a list of all directories below path.
    getEnvironmentEntry Module function to get an environment entry.
    getExecutablePath Function to build the full path of an executable file from the environment.
    getHomeDir Function to get a users home directory
    getPercentReplacement Function to get the replacement for code.
    getPercentReplacementHelp Function to get the help text for the supported %-codes.
    getPythonLibPath Function to determine the path to Python's library.
    getPythonVersion Function to get the Python version (major, minor) as an integer value.
    getQtMacBundle Module function to determine the correct Mac OS X bundle name for Qt tools.
    getTestFileName Function to build the filename of a unittest file.
    getUserName Function to get the user name.
    get_coding Function to get the coding of a text.
    hasEnvironmentEntry Module function to check, if the environment contains an entry.
    html_encode Function to correctly encode a text for html.
    html_uencode Function to correctly encode a unicode text for html.
    isExecutable Function to check, if a file is executable.
    isinpath Function to check for an executable file.
    joinext Function to join a file extension to a path.
    linesep Function to return the lineseparator used by the editor.
    normabsjoinpath Function returning a normalized, absolute path of the joined parts passed into it.
    normabspath Function returning a normalized, absolute path.
    normcaseabspath Function returning an absolute path, that is normalized with respect to its case and references.
    normcasepath Function returning a path, that is normalized with respect to its case and references.
    normjoinpath Function returning a normalized path of the joined parts passed into it.
    parseEnvironmentString Function used to convert an environment string into a list of environment settings.
    parseOptionString Function used to convert an option string into a list of options.
    parseString Function used to convert a string into a list.
    posix_GetUserName Function to get the user name under Posix systems.
    prepareQtMacBundle Module function for starting Qt tools that are Mac OS X bundles.
    pwDecode Module function to decode a password.
    pwEncode Module function to encode a password.
    readEncodedFile Function to read a file and decode its contents into proper text.
    relpath Return a relative version of a path.
    samepath Function to compare two paths.
    setConfigDir Module function to set the name of the directory storing the config data.
    splitPath Function to split a pathname into a directory part and a file part.
    toNativeSeparators Function returning a path, that is using native separator characters.
    toUnicode Public method to convert a string to unicode.
    win32_GetUserName Function to get the user name under Win32.
    win32_Kill Function to provide an os.kill equivalent for Win32.
    writeEncodedFile Function to write a file with properly encoded text.


    CodingError

    Class implementing an exception, which is raised, if a given coding is incorrect.

    Derived from

    Exception

    Class Attributes

    None

    Class Methods

    None

    Methods

    CodingError Constructor
    __repr__ Private method returning a representation of the exception.
    __str__ Private method returning a string representation of the exception.

    Static Methods

    None

    CodingError (Constructor)

    CodingError(coding)

    Constructor

    CodingError.__repr__

    __repr__()

    Private method returning a representation of the exception.

    Returns:
    string representing the error message

    CodingError.__str__

    __str__()

    Private method returning a string representation of the exception.

    Returns:
    string representing the error message


    __showwarning

    __showwarning(message, category, filename, lineno, file = None, line = "")

    Module function to raise a SyntaxError for a SyntaxWarning.

    message
    warning object
    category
    type object of the warning
    filename
    name of the file causing the warning (string)
    lineno
    line number causing the warning (integer)
    file
    file to write the warning message to (ignored)
    line
    line causing the warning (ignored)
    Raises SyntaxError:


    _percentReplacementFunc

    _percentReplacementFunc(matchobj)

    Protected function called for replacing % codes.

    matchobj
    matchobject for the code
    Returns:
    replacement string


    checkBlacklistedVersions

    checkBlacklistedVersions()

    Module functions to check for blacklisted versions of the prerequisites.

    Returns:
    flag indicating good versions were found (boolean)


    compactPath

    compactPath(path, width, measure = len)

    Function to return a compacted path fitting inside the given width.

    path
    path to be compacted (string)
    width
    width for the compacted path (integer)
    measure
    reference to a function used to measure the length of the string
    Returns:
    compacted path (string)


    compile

    compile(file, codestring = "")

    Function to compile one Python source file to Python bytecode.

    file
    source filename (string)
    codestring
    string containing the code to compile (string)
    Returns:
    A tuple indicating status (1 = an error was found), the filename, the linenumber, the index number, the code string and the error message (boolean, string, string, string, string, string). The values are only valid, if the status equals 1.


    convertLineEnds

    convertLineEnds(text, eol)

    Function to convert the end of line characters.

    text
    text to be converted (string)
    eol
    new eol setting (string)
    Returns:
    text with converted eols (string)


    decode

    decode(text)

    Function to decode a text.

    text
    text to decode (string)
    Returns:
    decoded text and encoding


    decodeBytes

    decodeBytes(buffer)

    Function to decode some text into a unicode string.

    buffer
    string buffer to decode (string)
    Returns:
    decoded text (unicode)


    decodeWithHash

    decodeWithHash(text)

    Function to decode a text and calculate the MD5 hash.

    text
    text to decode (string)
    Returns:
    decoded text, encoding and MD5 hash


    direntries

    direntries(path, filesonly=False, pattern=None, followsymlinks=True, checkStop=None)

    Function returning a list of all files and directories.

    path
    root of the tree to check
    filesonly
    flag indicating that only files are wanted
    pattern
    a filename pattern to check against
    followsymlinks
    flag indicating whether symbolic links should be followed
    checkStop
    function to be called to check for a stop
    Returns:
    list of all files and directories in the tree rooted at path. The names are expanded to start with path.


    encode

    encode(text, orig_coding)

    Function to encode a text.

    text
    text to encode (string)
    orig_coding
    type of the original coding (string)
    Returns:
    encoded text and encoding


    escape_entities

    escape_entities(m, map=_escape_map)

    Function to encode html entities.

    m
    the match object
    map
    the map of entities to encode
    Returns:
    the converted text (string)


    escape_uentities

    escape_uentities(m)

    Function to encode html entities.

    m
    the match object
    Returns:
    the converted text (string)


    fromNativeSeparators

    fromNativeSeparators(path)

    Function returning a path, that is using "/" separator characters.

    path
    path to be converted (QString)
    Returns:
    path with converted separator characters (QString)


    generateDistroInfo

    generateDistroInfo(linesep = '\n')

    Module function to generate a string with distribution infos.

    linesep
    string to be used to separate lines (string)
    Returns:
    string with plugins version infos (string)


    generatePluginsVersionInfo

    generatePluginsVersionInfo(linesep = '\n')

    Module function to generate a string with plugins version infos.

    linesep
    string to be used to separate lines (string)
    Returns:
    string with plugins version infos (string)


    generatePySideToolPath

    generatePySideToolPath(toolname)

    Module function to generate the executable path for a PySide tool.

    toolname
    base name of the tool (string or QString)
    Returns:
    the PySide tool path with extension (string)


    generateQtToolName

    generateQtToolName(toolname)

    Module function to generate the executable name for a Qt tool like designer.

    toolname
    base name of the tool (string or QString)
    Returns:
    the Qt tool name without extension (string)


    generateVersionInfo

    generateVersionInfo(linesep = '\n')

    Module function to generate a string with various version infos.

    linesep
    string to be used to separate lines (string)
    Returns:
    string with version infos (string)


    getConfigDir

    getConfigDir()

    Module function to get the name of the directory storing the config data.

    Returns:
    directory name of the config dir (string)


    getDirs

    getDirs(path, excludeDirs)

    Function returning a list of all directories below path.

    path
    root of the tree to check
    excludeDirs
    basename of directories to ignore
    Returns:
    list of all directories found


    getEnvironmentEntry

    getEnvironmentEntry(key, default = None)

    Module function to get an environment entry.

    key
    key of the requested environment entry (string)
    default
    value to be returned, if the environment doesn't contain the requested entry (string)
    Returns:
    the requested entry or the default value, if the entry wasn't found (string or None)


    getExecutablePath

    getExecutablePath(file)

    Function to build the full path of an executable file from the environment.

    file
    filename of the executable to check (string)
    Returns:
    full executable name, if the executable file is accessible via the searchpath defined by the PATH environment variable, or an empty string otherwise.


    getHomeDir

    getHomeDir()

    Function to get a users home directory

    Returns:
    home directory (string)


    getPercentReplacement

    getPercentReplacement(code)

    Function to get the replacement for code.

    code
    code indicator (string or QString)
    Returns:
    replacement string (string)


    getPercentReplacementHelp

    getPercentReplacementHelp()

    Function to get the help text for the supported %-codes.

    Returns:
    help text (QString)


    getPythonLibPath

    getPythonLibPath()

    Function to determine the path to Python's library.

    Returns:
    path to the Python library (string)


    getPythonVersion

    getPythonVersion()

    Function to get the Python version (major, minor) as an integer value.

    Returns:
    An integer representing major and minor version number (integer)


    getQtMacBundle

    getQtMacBundle(toolname)

    Module function to determine the correct Mac OS X bundle name for Qt tools.

    toolname
    plain name of the tool (e.g. "designer") (string or QString)
    Returns:
    bundle name of the Qt tool (string)


    getTestFileName

    getTestFileName(fn)

    Function to build the filename of a unittest file.

    The filename for the unittest file is built by prepending the string "test" to the filename passed into this function.

    fn
    filename basis to be used for the unittest filename (string)
    Returns:
    filename of the corresponding unittest file (string)


    getUserName

    getUserName()

    Function to get the user name.

    Returns:
    user name (string)


    get_coding

    get_coding(text)

    Function to get the coding of a text.

    text
    text to inspect (string)
    Returns:
    coding string


    hasEnvironmentEntry

    hasEnvironmentEntry(key)

    Module function to check, if the environment contains an entry.

    key
    key of the requested environment entry (string)
    Returns:
    flag indicating the presence of the requested entry (boolean)


    html_encode

    html_encode(text, pattern=_escape)

    Function to correctly encode a text for html.

    text
    text to be encoded (string)
    pattern
    search pattern for text to be encoded (string)
    Returns:
    the encoded text (string)


    html_uencode

    html_uencode(text, pattern=_uescape)

    Function to correctly encode a unicode text for html.

    text
    text to be encoded (string)
    pattern
    search pattern for text to be encoded (string)
    Returns:
    the encoded text (string)


    isExecutable

    isExecutable(exe)

    Function to check, if a file is executable.

    exe
    filename of the executable to check (string)
    Returns:
    flag indicating executable status (boolean)


    isinpath

    isinpath(file)

    Function to check for an executable file.

    file
    filename of the executable to check (string)
    Returns:
    flag to indicate, if the executable file is accessible via the searchpath defined by the PATH environment variable.


    joinext

    joinext(prefix, ext)

    Function to join a file extension to a path.

    The leading "." of ext is replaced by a platform specific extension separator if necessary.

    prefix
    the basepart of the filename (string)
    ext
    the extension part (string)
    Returns:
    the complete filename (string)


    linesep

    linesep()

    Function to return the lineseparator used by the editor.

    Returns:
    line separator used by the editor (string)


    normabsjoinpath

    normabsjoinpath(a, *p)

    Function returning a normalized, absolute path of the joined parts passed into it.

    a
    first path to be joined (string)
    p
    variable number of path parts to be joind (string)
    Returns:
    absolute, normalized path (string)


    normabspath

    normabspath(path)

    Function returning a normalized, absolute path.

    path
    file path (string)
    Returns:
    absolute, normalized path (string)


    normcaseabspath

    normcaseabspath(path)

    Function returning an absolute path, that is normalized with respect to its case and references.

    path
    file path (string)
    Returns:
    absolute, normalized path (string)


    normcasepath

    normcasepath(path)

    Function returning a path, that is normalized with respect to its case and references.

    path
    file path (string)
    Returns:
    case normalized path (string)


    normjoinpath

    normjoinpath(a, *p)

    Function returning a normalized path of the joined parts passed into it.

    a
    first path to be joined (string)
    p
    variable number of path parts to be joind (string)
    Returns:
    normalized path (string)


    parseEnvironmentString

    parseEnvironmentString(s)

    Function used to convert an environment string into a list of environment settings.

    s
    environment string (string or QString)
    Returns:
    list of environment settings (list of strings)


    parseOptionString

    parseOptionString(s)

    Function used to convert an option string into a list of options.

    s
    option string (string or QString)
    Returns:
    list of options (list of strings)


    parseString

    parseString(s, rx)

    Function used to convert a string into a list.

    s
    string to be parsed (string or QString)
    rx
    regex defining the parse pattern (QRegExp)
    Returns:
    list of parsed data (list of strings)


    posix_GetUserName

    posix_GetUserName()

    Function to get the user name under Posix systems.

    Returns:
    user name (string)


    prepareQtMacBundle

    prepareQtMacBundle(toolname, version, args)

    Module function for starting Qt tools that are Mac OS X bundles.

    toolname
    plain name of the tool (e.g. "designer") (string or QString)
    version
    indication for the requested version (Qt 4) (integer)
    args
    name of input file for tool, if any (QStringList)
    Returns:
    command-name and args for QProcess (tuple)


    pwDecode

    pwDecode(epw)

    Module function to decode a password.

    pw
    encoded password to decode (string or QString)
    Returns:
    decoded password (string)


    pwEncode

    pwEncode(pw)

    Module function to encode a password.

    pw
    password to encode (string or QString)
    Returns:
    encoded password (string)


    readEncodedFile

    readEncodedFile(filename)

    Function to read a file and decode its contents into proper text.

    filename
    name of the file to read (string)
    Returns:
    tuple of decoded text and encoding (string, string)


    relpath

    relpath(path, start = os.path.curdir)

    Return a relative version of a path.

    path
    path to make relative (string)
    start
    path to make relative from (string)


    samepath

    samepath(f1, f2)

    Function to compare two paths.

    f1
    first path for the compare (string)
    f2
    second path for the compare (string)
    Returns:
    flag indicating whether the two paths represent the same path on disk.


    setConfigDir

    setConfigDir(d)

    Module function to set the name of the directory storing the config data.

    d
    name of an existing directory (string)


    splitPath

    splitPath(name)

    Function to split a pathname into a directory part and a file part.

    name
    path name (string or QString)
    Returns:
    a tuple of 2 strings (dirname, filename).


    toNativeSeparators

    toNativeSeparators(path)

    Function returning a path, that is using native separator characters.

    path
    path to be converted (QString)
    Returns:
    path with converted separator characters (QString)


    toUnicode

    toUnicode(s)

    Public method to convert a string to unicode.

    If the passed in string is of type QString, it is simply returned unaltered, assuming, that it is already a unicode string. For all other strings, various codes are tried until one converts the string without an error. If all codecs fail, the string is returned unaltered.

    s
    string to be converted (string or QString)
    Returns:
    converted string (unicode or QString)


    win32_GetUserName

    win32_GetUserName()

    Function to get the user name under Win32.

    Returns:
    user name (string)


    win32_Kill

    win32_Kill(pid)

    Function to provide an os.kill equivalent for Win32.

    pid
    process id


    writeEncodedFile

    writeEncodedFile(filename, text, orig_coding)

    Function to write a file with properly encoded text.

    filename
    name of the file to read (string)
    text
    text to be written (string)
    orig_coding
    type of the original encoding (string)
    Returns:
    encoding used for writing the file (string)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.Lexers.LexerTeX.html0000644000175000001440000000013112261331354027457 xustar000000000000000029 mtime=1388688108.51523007 30 atime=1389081084.795724367 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.Lexers.LexerTeX.html0000644000175000001440000000647412261331354027225 0ustar00detlevusers00000000000000 eric4.QScintilla.Lexers.LexerTeX

    eric4.QScintilla.Lexers.LexerTeX

    Module implementing a Tex lexer with some additional methods.

    Global Attributes

    None

    Classes

    LexerTeX Subclass to implement some additional lexer dependant methods.

    Functions

    None


    LexerTeX

    Subclass to implement some additional lexer dependant methods.

    Derived from

    QsciLexerTeX, Lexer

    Class Attributes

    None

    Class Methods

    None

    Methods

    LexerTeX Constructor
    defaultKeywords Public method to get the default keywords.
    initProperties Public slot to initialize the properties.
    isCommentStyle Public method to check, if a style is a comment style.
    isStringStyle Public method to check, if a style is a string style.

    Static Methods

    None

    LexerTeX (Constructor)

    LexerTeX(parent=None)

    Constructor

    parent
    parent widget of this lexer

    LexerTeX.defaultKeywords

    defaultKeywords(kwSet)

    Public method to get the default keywords.

    kwSet
    number of the keyword set (integer)
    Returns:
    string giving the keywords (string) or None

    LexerTeX.initProperties

    initProperties()

    Public slot to initialize the properties.

    LexerTeX.isCommentStyle

    isCommentStyle(style)

    Public method to check, if a style is a comment style.

    Returns:
    flag indicating a comment style (boolean)

    LexerTeX.isStringStyle

    isStringStyle(style)

    Public method to check, if a style is a string style.

    Returns:
    flag indicating a string style (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.E4XML.TemplatesHandler.html0000644000175000001440000000013212261331352026537 xustar000000000000000030 mtime=1388688106.497229057 30 atime=1389081084.795724367 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.E4XML.TemplatesHandler.html0000644000175000001440000001175712261331352026304 0ustar00detlevusers00000000000000 eric4.E4XML.TemplatesHandler

    eric4.E4XML.TemplatesHandler

    Module implementing the handler class for reading an XML templates file.

    Global Attributes

    None

    Classes

    TemplatesHandler Class implementing a sax handler to read an XML templates file.

    Functions

    None


    TemplatesHandler

    Class implementing a sax handler to read an XML templates file.

    Derived from

    XMLHandlerBase

    Class Attributes

    None

    Class Methods

    None

    Methods

    TemplatesHandler Constructor
    endTemplate Handler method for the "Template" end tag.
    endTemplateDescription Handler method for the "TemplateDescription" end tag.
    endTemplateText Handler method for the "TemplateText" end tag.
    getVersion Public method to retrieve the version of the templates.
    startDocumentTemplates Handler called, when the document parsing is started.
    startTemplate Handler method for the "Template" start tag.
    startTemplateGroup Handler method for the "TemplateGroup" start tag.
    startTemplates Handler method for the "Templates" start tag.

    Static Methods

    None

    TemplatesHandler (Constructor)

    TemplatesHandler(templateViewer=None)

    Constructor

    templateViewer
    reference to the template viewer object

    TemplatesHandler.endTemplate

    endTemplate()

    Handler method for the "Template" end tag.

    TemplatesHandler.endTemplateDescription

    endTemplateDescription()

    Handler method for the "TemplateDescription" end tag.

    TemplatesHandler.endTemplateText

    endTemplateText()

    Handler method for the "TemplateText" end tag.

    TemplatesHandler.getVersion

    getVersion()

    Public method to retrieve the version of the templates.

    Returns:
    String containing the version number.

    TemplatesHandler.startDocumentTemplates

    startDocumentTemplates()

    Handler called, when the document parsing is started.

    TemplatesHandler.startTemplate

    startTemplate(attrs)

    Handler method for the "Template" start tag.

    attrs
    list of tag attributes

    TemplatesHandler.startTemplateGroup

    startTemplateGroup(attrs)

    Handler method for the "TemplateGroup" start tag.

    attrs
    list of tag attributes

    TemplatesHandler.startTemplates

    startTemplates(attrs)

    Handler method for the "Templates" start tag.

    attrs
    list of tag attributes

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.eric4_iconeditor.html0000644000175000001440000000013212261331350025676 xustar000000000000000030 mtime=1388688104.218227913 30 atime=1389081084.821724366 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.eric4_iconeditor.html0000644000175000001440000000332012261331350025426 0ustar00detlevusers00000000000000 eric4.eric4_iconeditor

    eric4.eric4_iconeditor

    Eric4 Icon Editor

    This is the main Python script that performs the necessary initialization of the icon editor and starts the Qt event loop. This is a standalone version of the integrated icon editor.

    Global Attributes

    None

    Classes

    None

    Functions

    createMainWidget Function to create the main widget.
    main Main entry point into the application.


    createMainWidget

    createMainWidget(argv)

    Function to create the main widget.

    argv
    list of commandline parameters (list of strings)
    Returns:
    reference to the main widget (QWidget)


    main

    main()

    Main entry point into the application.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.Lexers.LexerPygments.html0000644000175000001440000000013012261331354030564 xustar000000000000000028 mtime=1388688108.5742301 30 atime=1389081084.821724366 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.Lexers.LexerPygments.html0000644000175000001440000001727012261331354030327 0ustar00detlevusers00000000000000 eric4.QScintilla.Lexers.LexerPygments

    eric4.QScintilla.Lexers.LexerPygments

    Module implementing a custom lexer using pygments.

    Global Attributes

    PYGMENTS_ERROR
    PYGMENTS_INSERTED
    TOKEN_MAP

    Classes

    LexerPygments Class implementing a custom lexer using pygments.

    Functions

    None


    LexerPygments

    Class implementing a custom lexer using pygments.

    Derived from

    LexerContainer

    Class Attributes

    None

    Class Methods

    None

    Methods

    LexerPygments Constructor
    __guessLexer Private method to guess a pygments lexer.
    canStyle Public method to check, if the lexer is able to style the text.
    defaultColor Public method to get the default foreground color for a style.
    defaultFont Public method to get the default font for a style.
    defaultKeywords Public method to get the default keywords.
    defaultPaper Public method to get the default background color for a style.
    description Public method returning the descriptions of the styles supported by the lexer.
    isCommentStyle Public method to check, if a style is a comment style.
    isStringStyle Public method to check, if a style is a string style.
    language Public method returning the language of the lexer.
    name Public method to get the name of the pygments lexer.
    styleBitsNeeded Public method to get the number of style bits needed by the lexer.
    styleText Public method to perform the styling.

    Static Methods

    None

    LexerPygments (Constructor)

    LexerPygments(parent = None, name = "")

    Constructor

    parent
    parent widget of this lexer
    name=
    name of the pygments lexer to use (string)

    LexerPygments.__guessLexer

    __guessLexer(text)

    Private method to guess a pygments lexer.

    text
    text to base guessing on (string)
    Returns:
    reference to the guessed lexer (pygments.lexer)

    LexerPygments.canStyle

    canStyle()

    Public method to check, if the lexer is able to style the text.

    Returns:
    flag indicating the lexer capability (boolean)

    LexerPygments.defaultColor

    defaultColor(style)

    Public method to get the default foreground color for a style.

    style
    style number (integer)
    Returns:
    foreground color (QColor)

    LexerPygments.defaultFont

    defaultFont(style)

    Public method to get the default font for a style.

    style
    style number (integer)
    Returns:
    font (QFont)

    LexerPygments.defaultKeywords

    defaultKeywords(kwSet)

    Public method to get the default keywords.

    kwSet
    number of the keyword set (integer)
    Returns:
    string giving the keywords (string) or None

    LexerPygments.defaultPaper

    defaultPaper(style)

    Public method to get the default background color for a style.

    style
    style number (integer)
    Returns:
    background color (QColor)

    LexerPygments.description

    description(style)

    Public method returning the descriptions of the styles supported by the lexer.

    style
    style number (integer)

    LexerPygments.isCommentStyle

    isCommentStyle(style)

    Public method to check, if a style is a comment style.

    Returns:
    flag indicating a comment style (boolean)

    LexerPygments.isStringStyle

    isStringStyle(style)

    Public method to check, if a style is a string style.

    Returns:
    flag indicating a string style (boolean)

    LexerPygments.language

    language()

    Public method returning the language of the lexer.

    Returns:
    language of the lexer (string)

    LexerPygments.name

    name()

    Public method to get the name of the pygments lexer.

    Returns:
    name of the pygments lexer (string)

    LexerPygments.styleBitsNeeded

    styleBitsNeeded()

    Public method to get the number of style bits needed by the lexer.

    Returns:
    number of style bits needed (integer)

    LexerPygments.styleText

    styleText(start, end)

    Public method to perform the styling.

    start
    position of first character to be styled (integer)
    end
    position of last character to be styled (integer)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.VCS.RepositoryInfoDialog.html0000644000175000001440000000013212261331351027217 xustar000000000000000030 mtime=1388688105.185228398 30 atime=1389081084.826724366 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.VCS.RepositoryInfoDialog.html0000644000175000001440000000337312261331351026757 0ustar00detlevusers00000000000000 eric4.VCS.RepositoryInfoDialog

    eric4.VCS.RepositoryInfoDialog

    Module implemting a dialog to show repository information.

    Global Attributes

    None

    Classes

    VcsRepositoryInfoDialog Class implemting a dialog to show repository information.

    Functions

    None


    VcsRepositoryInfoDialog

    Class implemting a dialog to show repository information.

    Derived from

    QDialog, Ui_VcsRepositoryInfoDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    VcsRepositoryInfoDialog

    Static Methods

    None

    VcsRepositoryInfoDialog (Constructor)

    VcsRepositoryInfoDialog(parent, info)
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.History.HistoryFilterModel.h0000644000175000001440000000013212261331353031300 xustar000000000000000030 mtime=1388688107.806229714 30 atime=1389081084.826724366 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.History.HistoryFilterModel.html0000644000175000001440000003323612261331353031556 0ustar00detlevusers00000000000000 eric4.Helpviewer.History.HistoryFilterModel

    eric4.Helpviewer.History.HistoryFilterModel

    Module implementing the history filter model.

    Global Attributes

    None

    Classes

    HistoryData Class storing some history data.
    HistoryFilterModel Class implementing the history filter model.

    Functions

    None


    HistoryData

    Class storing some history data.

    Derived from

    object

    Class Attributes

    None

    Class Methods

    None

    Methods

    HistoryData Constructor
    __eq__ Special method implementing equality.
    __lt__ Special method determining less relation.

    Static Methods

    None

    HistoryData (Constructor)

    HistoryData(offset, frequency = 0)

    Constructor

    offset
    tail offset (integer)
    frequency
    frequency (integer)

    HistoryData.__eq__

    __eq__(other)

    Special method implementing equality.

    other
    reference to the object to check against (HistoryData)
    Returns:
    flag indicating equality (boolean)

    HistoryData.__lt__

    __lt__(other)

    Special method determining less relation.

    Note: Like the actual history entries the index mapping is sorted in reverse order by offset

    other
    reference to the history data object to compare against (HistoryEntry)
    Returns:
    flag indicating less (boolean)


    HistoryFilterModel

    Class implementing the history filter model.

    Derived from

    QAbstractProxyModel

    Class Attributes

    FrequencyRole
    MaxRole

    Class Methods

    None

    Methods

    HistoryFilterModel Constructor
    __frequencyScore Private method to calculate the frequency score.
    __load Private method to load the model data.
    __sourceDataChanged Private slot to handle the change of data of the source model.
    __sourceReset Private slot to handle a reset of the source model.
    __sourceRowsInserted Private slot to handle the insertion of data in the source model.
    __sourceRowsRemoved Private slot to handle the removal of data in the source model.
    columnCount Public method to get the number of columns.
    data Public method to get data from the model.
    headerData Public method to get the header data.
    historyContains Public method to check the history for an entry.
    historyLocation Public method to get the row number of an entry in the source model.
    index Public method to create an index.
    mapFromSource Public method to map an index to the proxy model index.
    mapToSource Public method to map an index to the source model index.
    parent Public method to get the parent index.
    recalculateFrequencies Public method to recalculate the frequencies.
    removeRows Public method to remove entries from the model.
    rowCount Public method to determine the number of rows.
    setSourceModel Public method to set the source model.

    Static Methods

    None

    HistoryFilterModel (Constructor)

    HistoryFilterModel(sourceModel, parent = None)

    Constructor

    sourceModel
    reference to the source model (QAbstractItemModel)
    parent
    reference to the parent object (QObject)

    HistoryFilterModel.__frequencyScore

    __frequencyScore(sourceIndex)

    Private method to calculate the frequency score.

    sourceIndex
    index of the source model (QModelIndex)
    Returns:
    frequency score (integer)

    HistoryFilterModel.__load

    __load()

    Private method to load the model data.

    HistoryFilterModel.__sourceDataChanged

    __sourceDataChanged(topLeft, bottomRight)

    Private slot to handle the change of data of the source model.

    topLeft
    index of top left data element (QModelIndex)
    bottomRight
    index of bottom right data element (QModelIndex)

    HistoryFilterModel.__sourceReset

    __sourceReset()

    Private slot to handle a reset of the source model.

    HistoryFilterModel.__sourceRowsInserted

    __sourceRowsInserted(parent, start, end)

    Private slot to handle the insertion of data in the source model.

    parent
    reference to the parent index (QModelIndex)
    start
    start row (integer)
    end
    end row (integer)

    HistoryFilterModel.__sourceRowsRemoved

    __sourceRowsRemoved(parent, start, end)

    Private slot to handle the removal of data in the source model.

    parent
    reference to the parent index (QModelIndex)
    start
    start row (integer)
    end
    end row (integer)

    HistoryFilterModel.columnCount

    columnCount(parent = QModelIndex())

    Public method to get the number of columns.

    parent
    index of parent (QModelIndex)
    Returns:
    number of columns (integer)

    HistoryFilterModel.data

    data(index, role = Qt.DisplayRole)

    Public method to get data from the model.

    index
    index of history entry to get data for (QModelIndex)
    role
    data role (integer)
    Returns:
    history entry data (QVariant)

    HistoryFilterModel.headerData

    headerData(section, orientation, role = Qt.DisplayRole)

    Public method to get the header data.

    section
    section number (integer)
    orientation
    header orientation (Qt.Orientation)
    role
    data role (integer)
    Returns:
    header data (QVariant)

    HistoryFilterModel.historyContains

    historyContains(url)

    Public method to check the history for an entry.

    url
    URL to check for (QString)
    Returns:
    flag indicating success (boolean)

    HistoryFilterModel.historyLocation

    historyLocation(url)

    Public method to get the row number of an entry in the source model.

    url
    URL to check for (QString)
    Returns:
    row number in the source model (integer)

    HistoryFilterModel.index

    index(row, column, parent = QModelIndex())

    Public method to create an index.

    row
    row number for the index (integer)
    column
    column number for the index (integer)
    parent
    index of the parent item (QModelIndex)
    Returns:
    requested index (QModelIndex)

    HistoryFilterModel.mapFromSource

    mapFromSource(sourceIndex)

    Public method to map an index to the proxy model index.

    sourceIndex
    reference to a source model index (QModelIndex)
    Returns:
    proxy model index (QModelIndex)

    HistoryFilterModel.mapToSource

    mapToSource(proxyIndex)

    Public method to map an index to the source model index.

    proxyIndex
    reference to a proxy model index (QModelIndex)
    Returns:
    source model index (QModelIndex)

    HistoryFilterModel.parent

    parent(index)

    Public method to get the parent index.

    index
    index of item to get parent (QModelIndex)
    Returns:
    index of parent (QModelIndex)

    HistoryFilterModel.recalculateFrequencies

    recalculateFrequencies()

    Public method to recalculate the frequencies.

    HistoryFilterModel.removeRows

    removeRows(row, count, parent = QModelIndex())

    Public method to remove entries from the model.

    row
    row of the first entry to remove (integer)
    count
    number of entries to remove (integer)
    index
    of the parent entry (QModelIndex)
    Returns:
    flag indicating successful removal (boolean)

    HistoryFilterModel.rowCount

    rowCount(parent = QModelIndex())

    Public method to determine the number of rows.

    parent
    index of parent (QModelIndex)
    Returns:
    number of rows (integer)

    HistoryFilterModel.setSourceModel

    setSourceModel(sourceModel)

    Public method to set the source model.

    sourceModel
    reference to the source model (QAbstractItemModel)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.OpenSearch.OpenSearchEngine.0000644000175000001440000000013212261331353031103 xustar000000000000000030 mtime=1388688107.967229795 30 atime=1389081084.832724366 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.OpenSearch.OpenSearchEngine.html0000644000175000001440000004324712261331353031534 0ustar00detlevusers00000000000000 eric4.Helpviewer.OpenSearch.OpenSearchEngine

    eric4.Helpviewer.OpenSearch.OpenSearchEngine

    Module implementing the open search engine.

    Global Attributes

    None

    Classes

    OpenSearchEngine Class implementing the open search engine.

    Functions

    None


    OpenSearchEngine

    Class implementing the open search engine.

    Signals

    imageChanged()
    emitted after the icon has been changed
    suggestions(const QStringList&)
    emitted after the suggestions have been received

    Derived from

    QObject

    Class Attributes

    None

    Class Methods

    parseTemplate Class method to parse a search template.

    Methods

    OpenSearchEngine Constructor
    __eq__ Public method implementing the == operator.
    __imageObtained Private slot to receive the image of the engine.
    __lt__ Public method implementing the < operator.
    __suggestionsObtained Private slot to receive the suggestions.
    description Public method to get the description of the engine.
    image Public method to get the image of the engine.
    imageUrl Public method to get the image URL of the engine.
    isValid Public method to check, if the engine is valid.
    loadImage Public method to load the image of the engine.
    name Public method to get the name of the engine.
    networkAccessManager Public method to get a reference to the network access manager object.
    providesSuggestions Public method to check, if the engine provides suggestions.
    requestSuggestions Public method to request suggestions.
    searchMethod Public method to get the HTTP request method used to perform search requests.
    searchParameters Public method to get the search parameters of the engine.
    searchUrl Public method to get a URL ready for searching.
    searchUrlTemplate Public method to get the search URL template of the engine.
    setDescription Public method to set the engine description.
    setImage Public method to set the image of the engine.
    setImageUrl Public method to set the engine image URL.
    setImageUrlAndLoad Public method to set the engine image URL.
    setName Public method to set the engine name.
    setNetworkAccessManager Public method to set the reference to the network access manager.
    setSearchMethod Public method to set the HTTP request method used to perform search requests.
    setSearchParameters Public method to set the engine search parameters.
    setSearchUrlTemplate Public method to set the engine search URL template.
    setSuggestionsMethod Public method to set the HTTP request method used to perform suggestions requests.
    setSuggestionsParameters Public method to set the engine suggestions parameters.
    setSuggestionsUrlTemplate Public method to set the engine suggestions URL template.
    suggestionsMethod Public method to get the HTTP request method used to perform suggestions requests.
    suggestionsParameters Public method to get the suggestions parameters of the engine.
    suggestionsUrl Public method to get a URL ready for suggestions.
    suggestionsUrlTemplate Public method to get the search URL template of the engine.

    Static Methods

    None

    OpenSearchEngine.parseTemplate (class method)

    parseTemplate(searchTerm, searchTemplate)

    Class method to parse a search template.

    searchTerm
    term to search for (string or QString)
    searchTemplate
    template to be parsed (string or QString)
    Returns:
    parsed template (QString)

    OpenSearchEngine (Constructor)

    OpenSearchEngine(parent = None)

    Constructor

    parent
    reference to the parent object (QObject)

    OpenSearchEngine.__eq__

    __eq__(other)

    Public method implementing the == operator.

    other
    reference to an open search engine (OpenSearchEngine)
    Returns:
    flag indicating equality (boolean)

    OpenSearchEngine.__imageObtained

    __imageObtained()

    Private slot to receive the image of the engine.

    OpenSearchEngine.__lt__

    __lt__(other)

    Public method implementing the < operator.

    other
    reference to an open search engine (OpenSearchEngine)
    Returns:
    flag indicating less than (boolean)

    OpenSearchEngine.__suggestionsObtained

    __suggestionsObtained()

    Private slot to receive the suggestions.

    OpenSearchEngine.description

    description()

    Public method to get the description of the engine.

    Returns:
    description of the engine (QString)

    OpenSearchEngine.image

    image()

    Public method to get the image of the engine.

    Returns:
    image of the engine (QImage)

    OpenSearchEngine.imageUrl

    imageUrl()

    Public method to get the image URL of the engine.

    Returns:
    image URL of the engine (QString)

    OpenSearchEngine.isValid

    isValid()

    Public method to check, if the engine is valid.

    Returns:
    flag indicating validity (boolean)

    OpenSearchEngine.loadImage

    loadImage()

    Public method to load the image of the engine.

    OpenSearchEngine.name

    name()

    Public method to get the name of the engine.

    Returns:
    name of the engine (QString)

    OpenSearchEngine.networkAccessManager

    networkAccessManager()

    Public method to get a reference to the network access manager object.

    Returns:
    reference to the network access manager object (QNetworkAccessManager)

    OpenSearchEngine.providesSuggestions

    providesSuggestions()

    Public method to check, if the engine provides suggestions.

    Returns:
    flag indicating suggestions are provided (boolean)

    OpenSearchEngine.requestSuggestions

    requestSuggestions(searchTerm)

    Public method to request suggestions.

    searchTerm
    term to get suggestions for (string or QString)

    OpenSearchEngine.searchMethod

    searchMethod()

    Public method to get the HTTP request method used to perform search requests.

    Returns:
    HTTP request method (QString)

    OpenSearchEngine.searchParameters

    searchParameters()

    Public method to get the search parameters of the engine.

    Returns:
    search parameters of the engine (list of two tuples)

    OpenSearchEngine.searchUrl

    searchUrl(searchTerm)

    Public method to get a URL ready for searching.

    searchTerm
    term to search for (string or QString)
    Returns:
    URL (QUrl)

    OpenSearchEngine.searchUrlTemplate

    searchUrlTemplate()

    Public method to get the search URL template of the engine.

    Returns:
    search URL template of the engine (QString)

    OpenSearchEngine.setDescription

    setDescription(description)

    Public method to set the engine description.

    description
    description of the engine (string or QString)

    OpenSearchEngine.setImage

    setImage(image)

    Public method to set the image of the engine.

    image
    image to be set (QImage)

    OpenSearchEngine.setImageUrl

    setImageUrl(imageUrl)

    Public method to set the engine image URL.

    description
    image URL of the engine (string or QString)

    OpenSearchEngine.setImageUrlAndLoad

    setImageUrlAndLoad(imageUrl)

    Public method to set the engine image URL.

    description
    image URL of the engine (string or QString)

    OpenSearchEngine.setName

    setName(name)

    Public method to set the engine name.

    name
    name of the engine (string or QString)

    OpenSearchEngine.setNetworkAccessManager

    setNetworkAccessManager(networkAccessManager)

    Public method to set the reference to the network access manager.

    networkAccessManager
    reference to the network access manager object (QNetworkAccessManager)

    OpenSearchEngine.setSearchMethod

    setSearchMethod(method)

    Public method to set the HTTP request method used to perform search requests.

    method
    HTTP request method (QString)

    OpenSearchEngine.setSearchParameters

    setSearchParameters(searchParameters)

    Public method to set the engine search parameters.

    searchParameters
    search parameters of the engine (list of two tuples)

    OpenSearchEngine.setSearchUrlTemplate

    setSearchUrlTemplate(searchUrlTemplate)

    Public method to set the engine search URL template.

    searchUrlTemplate
    search URL template of the engine (string or QString)

    OpenSearchEngine.setSuggestionsMethod

    setSuggestionsMethod(method)

    Public method to set the HTTP request method used to perform suggestions requests.

    method
    HTTP request method (QString)

    OpenSearchEngine.setSuggestionsParameters

    setSuggestionsParameters(suggestionsParameters)

    Public method to set the engine suggestions parameters.

    suggestionsParameters
    suggestions parameters of the engine (list of two tuples)

    OpenSearchEngine.setSuggestionsUrlTemplate

    setSuggestionsUrlTemplate(suggestionsUrlTemplate)

    Public method to set the engine suggestions URL template.

    suggestionsUrlTemplate
    suggestions URL template of the engine (string or QString)

    OpenSearchEngine.suggestionsMethod

    suggestionsMethod()

    Public method to get the HTTP request method used to perform suggestions requests.

    Returns:
    HTTP request method (QString)

    OpenSearchEngine.suggestionsParameters

    suggestionsParameters()

    Public method to get the suggestions parameters of the engine.

    Returns:
    suggestions parameters of the engine (list of two tuples)

    OpenSearchEngine.suggestionsUrl

    suggestionsUrl(searchTerm)

    Public method to get a URL ready for suggestions.

    searchTerm
    term to search for (string or QString)
    Returns:
    URL (QUrl)

    OpenSearchEngine.suggestionsUrlTemplate

    suggestionsUrlTemplate()

    Public method to get the search URL template of the engine.

    Returns:
    search URL template of the engine (QString)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.eric4_re.html0000644000175000001440000000013212261331350024145 xustar000000000000000030 mtime=1388688104.220227914 30 atime=1389081084.840724365 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.eric4_re.html0000644000175000001440000000330712261331350023702 0ustar00detlevusers00000000000000 eric4.eric4_re

    eric4.eric4_re

    Eric4 Re

    This is the main Python script that performs the necessary initialization of the PyRegExp wizard module and starts the Qt event loop. This is a standalone version of the integrated PyRegExp wizard.

    Global Attributes

    None

    Classes

    None

    Functions

    createMainWidget Function to create the main widget.
    main Main entry point into the application.


    createMainWidget

    createMainWidget(argv)

    Function to create the main widget.

    argv
    list of commandline parameters (list of strings)
    Returns:
    reference to the main widget (QWidget)


    main

    main()

    Main entry point into the application.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Debugger.DebuggerInterfaceRuby.html0000644000175000001440000000013212261331350030403 xustar000000000000000030 mtime=1388688104.806228208 30 atime=1389081084.840724365 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Debugger.DebuggerInterfaceRuby.html0000644000175000001440000006623412261331350030150 0ustar00detlevusers00000000000000 eric4.Debugger.DebuggerInterfaceRuby

    eric4.Debugger.DebuggerInterfaceRuby

    Module implementing the Ruby debugger interface for the debug server.

    Global Attributes

    ClientDefaultCapabilities
    ClientTypeAssociations

    Classes

    DebuggerInterfaceRuby Class implementing the Ruby debugger interface for the debug server.

    Functions

    getRegistryData Module function to get characterising data for the debugger interface.


    DebuggerInterfaceRuby

    Class implementing the Ruby debugger interface for the debug server.

    Derived from

    QObject

    Class Attributes

    None

    Class Methods

    None

    Methods

    DebuggerInterfaceRuby Constructor
    __identityTranslation Private method to perform the identity path translation.
    __parseClientLine Private method to handle data from the client.
    __remoteTranslation Private method to perform the path translation.
    __sendCommand Private method to send a single line command to the client.
    __startProcess Private method to start the debugger client process.
    flush Public slot to flush the queue.
    getClientCapabilities Public method to retrieve the debug clients capabilities.
    isConnected Public method to test, if a debug client has connected.
    newConnection Public slot to handle a new connection.
    remoteBanner Public slot to get the banner info of the remote client.
    remoteBreakpoint Public method to set or clear a breakpoint.
    remoteBreakpointEnable Public method to enable or disable a breakpoint.
    remoteBreakpointIgnore Public method to ignore a breakpoint the next couple of occurrences.
    remoteCapabilities Public slot to get the debug clients capabilities.
    remoteClientSetFilter Public method to set a variables filter list.
    remoteClientVariable Public method to request the variables of the debugged program.
    remoteClientVariables Public method to request the variables of the debugged program.
    remoteCompletion Public slot to get the a list of possible commandline completions from the remote client.
    remoteContinue Public method to continue the debugged program.
    remoteCoverage Public method to load a new program to collect coverage data.
    remoteEnvironment Public method to set the environment for a program to debug, run, ...
    remoteEval Public method to evaluate arg in the current context of the debugged program.
    remoteExec Public method to execute stmt in the current context of the debugged program.
    remoteLoad Public method to load a new program to debug.
    remoteProfile Public method to load a new program to collect profiling data.
    remoteRawInput Public method to send the raw input to the debugged program.
    remoteRun Public method to load a new program to run.
    remoteSetThread Public method to request to set the given thread as current thread.
    remoteStatement Public method to execute a Ruby statement.
    remoteStep Public method to single step the debugged program.
    remoteStepOut Public method to step out the debugged program.
    remoteStepOver Public method to step over the debugged program.
    remoteStepQuit Public method to stop the debugged program.
    remoteThreadList Public method to request the list of threads from the client.
    remoteUTPrepare Public method to prepare a new unittest run.
    remoteUTRun Public method to start a unittest run.
    remoteUTStop public method to stop a unittest run.
    remoteWatchpoint Public method to set or clear a watch expression.
    remoteWatchpointEnable Public method to enable or disable a watch expression.
    remoteWatchpointIgnore Public method to ignore a watch expression the next couple of occurrences.
    shutdown Public method to cleanly shut down.
    startRemote Public method to start a remote Ruby interpreter.
    startRemoteForProject Public method to start a remote Ruby interpreter for a project.

    Static Methods

    None

    DebuggerInterfaceRuby (Constructor)

    DebuggerInterfaceRuby(debugServer, passive)

    Constructor

    debugServer
    reference to the debug server (DebugServer)
    passive
    flag indicating passive connection mode (boolean)

    DebuggerInterfaceRuby.__identityTranslation

    __identityTranslation(fn, remote2local = True)

    Private method to perform the identity path translation.

    fn
    filename to be translated (string or QString)
    remote2local
    flag indicating the direction of translation (False = local to remote, True = remote to local [default])
    Returns:
    translated filename (string)

    DebuggerInterfaceRuby.__parseClientLine

    __parseClientLine()

    Private method to handle data from the client.

    DebuggerInterfaceRuby.__remoteTranslation

    __remoteTranslation(fn, remote2local = True)

    Private method to perform the path translation.

    fn
    filename to be translated (string or QString)
    remote2local
    flag indicating the direction of translation (False = local to remote, True = remote to local [default])
    Returns:
    translated filename (string)

    DebuggerInterfaceRuby.__sendCommand

    __sendCommand(cmd)

    Private method to send a single line command to the client.

    cmd
    command to send to the debug client (string)

    DebuggerInterfaceRuby.__startProcess

    __startProcess(program, arguments, environment = None)

    Private method to start the debugger client process.

    program
    name of the executable to start (string)
    arguments
    arguments to be passed to the program (list of string)
    environment
    dictionary of environment settings to pass (dict of string)
    Returns:
    the process object (QProcess) or None and an error string (QString)

    DebuggerInterfaceRuby.flush

    flush()

    Public slot to flush the queue.

    DebuggerInterfaceRuby.getClientCapabilities

    getClientCapabilities()

    Public method to retrieve the debug clients capabilities.

    Returns:
    debug client capabilities (integer)

    DebuggerInterfaceRuby.isConnected

    isConnected()

    Public method to test, if a debug client has connected.

    Returns:
    flag indicating the connection status (boolean)

    DebuggerInterfaceRuby.newConnection

    newConnection(sock)

    Public slot to handle a new connection.

    sock
    reference to the socket object (QTcpSocket)
    Returns:
    flag indicating success (boolean)

    DebuggerInterfaceRuby.remoteBanner

    remoteBanner()

    Public slot to get the banner info of the remote client.

    DebuggerInterfaceRuby.remoteBreakpoint

    remoteBreakpoint(fn, line, set, cond = None, temp = False)

    Public method to set or clear a breakpoint.

    fn
    filename the breakpoint belongs to (string)
    line
    linenumber of the breakpoint (int)
    set
    flag indicating setting or resetting a breakpoint (boolean)
    cond
    condition of the breakpoint (string)
    temp
    flag indicating a temporary breakpoint (boolean)

    DebuggerInterfaceRuby.remoteBreakpointEnable

    remoteBreakpointEnable(fn, line, enable)

    Public method to enable or disable a breakpoint.

    fn
    filename the breakpoint belongs to (string)
    line
    linenumber of the breakpoint (int)
    enable
    flag indicating enabling or disabling a breakpoint (boolean)

    DebuggerInterfaceRuby.remoteBreakpointIgnore

    remoteBreakpointIgnore(fn, line, count)

    Public method to ignore a breakpoint the next couple of occurrences.

    fn
    filename the breakpoint belongs to (string)
    line
    linenumber of the breakpoint (int)
    count
    number of occurrences to ignore (int)

    DebuggerInterfaceRuby.remoteCapabilities

    remoteCapabilities()

    Public slot to get the debug clients capabilities.

    DebuggerInterfaceRuby.remoteClientSetFilter

    remoteClientSetFilter(scope, filter)

    Public method to set a variables filter list.

    scope
    the scope of the variables (0 = local, 1 = global)
    filter
    regexp string for variable names to filter out (string)

    DebuggerInterfaceRuby.remoteClientVariable

    remoteClientVariable(scope, filter, var, framenr = 0)

    Public method to request the variables of the debugged program.

    scope
    the scope of the variables (0 = local, 1 = global)
    filter
    list of variable types to filter out (list of int)
    var
    list encoded name of variable to retrieve (string)
    framenr
    framenumber of the variables to retrieve (int)

    DebuggerInterfaceRuby.remoteClientVariables

    remoteClientVariables(scope, filter, framenr = 0)

    Public method to request the variables of the debugged program.

    scope
    the scope of the variables (0 = local, 1 = global)
    filter
    list of variable types to filter out (list of int)
    framenr
    framenumber of the variables to retrieve (int)

    DebuggerInterfaceRuby.remoteCompletion

    remoteCompletion(text)

    Public slot to get the a list of possible commandline completions from the remote client.

    text
    the text to be completed (string or QString)

    DebuggerInterfaceRuby.remoteContinue

    remoteContinue(special = False)

    Public method to continue the debugged program.

    special
    flag indicating a special continue operation

    DebuggerInterfaceRuby.remoteCoverage

    remoteCoverage(fn, argv, wd, erase = False)

    Public method to load a new program to collect coverage data.

    fn
    the filename to run (string)
    argv
    the commandline arguments to pass to the program (string or QString)
    wd
    the working directory for the program (string)
    erase=
    flag indicating that coverage info should be cleared first (boolean)

    DebuggerInterfaceRuby.remoteEnvironment

    remoteEnvironment(env)

    Public method to set the environment for a program to debug, run, ...

    env
    environment settings (dictionary)

    DebuggerInterfaceRuby.remoteEval

    remoteEval(arg)

    Public method to evaluate arg in the current context of the debugged program.

    arg
    the arguments to evaluate (string)

    DebuggerInterfaceRuby.remoteExec

    remoteExec(stmt)

    Public method to execute stmt in the current context of the debugged program.

    stmt
    statement to execute (string)

    DebuggerInterfaceRuby.remoteLoad

    remoteLoad(fn, argv, wd, traceInterpreter = False, autoContinue = True, autoFork = False, forkChild = False)

    Public method to load a new program to debug.

    fn
    the filename to debug (string)
    argv
    the commandline arguments to pass to the program (string or QString)
    wd
    the working directory for the program (string)
    traceInterpreter=
    flag indicating if the interpreter library should be traced as well (boolean)
    autoContinue=
    flag indicating, that the debugger should not stop at the first executable line (boolean)
    autoFork=
    flag indicating the automatic fork mode (boolean) (ignored)
    forkChild=
    flag indicating to debug the child after forking (boolean) (ignored)

    DebuggerInterfaceRuby.remoteProfile

    remoteProfile(fn, argv, wd, erase = False)

    Public method to load a new program to collect profiling data.

    fn
    the filename to run (string)
    argv
    the commandline arguments to pass to the program (string or QString)
    wd
    the working directory for the program (string)
    erase=
    flag indicating that timing info should be cleared first (boolean)

    DebuggerInterfaceRuby.remoteRawInput

    remoteRawInput(s)

    Public method to send the raw input to the debugged program.

    s
    the raw input (string)

    DebuggerInterfaceRuby.remoteRun

    remoteRun(fn, argv, wd, autoFork = False, forkChild = False)

    Public method to load a new program to run.

    fn
    the filename to run (string)
    argv
    the commandline arguments to pass to the program (string or QString)
    wd
    the working directory for the program (string)
    autoFork=
    flag indicating the automatic fork mode (boolean)
    forkChild=
    flag indicating to debug the child after forking (boolean)

    DebuggerInterfaceRuby.remoteSetThread

    remoteSetThread(tid)

    Public method to request to set the given thread as current thread.

    tid
    id of the thread (integer)

    DebuggerInterfaceRuby.remoteStatement

    remoteStatement(stmt)

    Public method to execute a Ruby statement.

    stmt
    the Ruby statement to execute (string). It should not have a trailing newline.

    DebuggerInterfaceRuby.remoteStep

    remoteStep()

    Public method to single step the debugged program.

    DebuggerInterfaceRuby.remoteStepOut

    remoteStepOut()

    Public method to step out the debugged program.

    DebuggerInterfaceRuby.remoteStepOver

    remoteStepOver()

    Public method to step over the debugged program.

    DebuggerInterfaceRuby.remoteStepQuit

    remoteStepQuit()

    Public method to stop the debugged program.

    DebuggerInterfaceRuby.remoteThreadList

    remoteThreadList()

    Public method to request the list of threads from the client.

    DebuggerInterfaceRuby.remoteUTPrepare

    remoteUTPrepare(fn, tn, tfn, cov, covname, coverase)

    Public method to prepare a new unittest run.

    fn
    the filename to load (string)
    tn
    the testname to load (string)
    tfn
    the test function name to load tests from (string)
    cov
    flag indicating collection of coverage data is requested
    covname
    filename to be used to assemble the coverage caches filename
    coverase
    flag indicating erasure of coverage data is requested

    DebuggerInterfaceRuby.remoteUTRun

    remoteUTRun()

    Public method to start a unittest run.

    DebuggerInterfaceRuby.remoteUTStop

    remoteUTStop()

    public method to stop a unittest run.

    DebuggerInterfaceRuby.remoteWatchpoint

    remoteWatchpoint(cond, set, temp = False)

    Public method to set or clear a watch expression.

    cond
    expression of the watch expression (string)
    set
    flag indicating setting or resetting a watch expression (boolean)
    temp
    flag indicating a temporary watch expression (boolean)

    DebuggerInterfaceRuby.remoteWatchpointEnable

    remoteWatchpointEnable(cond, enable)

    Public method to enable or disable a watch expression.

    cond
    expression of the watch expression (string)
    enable
    flag indicating enabling or disabling a watch expression (boolean)

    DebuggerInterfaceRuby.remoteWatchpointIgnore

    remoteWatchpointIgnore(cond, count)

    Public method to ignore a watch expression the next couple of occurrences.

    cond
    expression of the watch expression (string)
    count
    number of occurrences to ignore (int)

    DebuggerInterfaceRuby.shutdown

    shutdown()

    Public method to cleanly shut down.

    It closes our socket and shuts down the debug client. (Needed on Win OS)

    DebuggerInterfaceRuby.startRemote

    startRemote(port, runInConsole)

    Public method to start a remote Ruby interpreter.

    port
    portnumber the debug server is listening on (integer)
    runInConsole
    flag indicating to start the debugger in a console window (boolean)
    Returns:
    client process object (QProcess) and a flag to indicate a network connection (boolean)

    DebuggerInterfaceRuby.startRemoteForProject

    startRemoteForProject(port, runInConsole)

    Public method to start a remote Ruby interpreter for a project.

    port
    portnumber the debug server is listening on (integer)
    runInConsole
    flag indicating to start the debugger in a console window (boolean)
    Returns:
    pid of the client process (integer) and a flag to indicate a network connection (boolean)


    getRegistryData

    getRegistryData()

    Module function to get characterising data for the debugger interface.

    Returns:
    list of the following data. Client type (string), client capabilities (integer), client type association (list of strings)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.OpenSearch.OpenSearchWriter.0000644000175000001440000000013212261331353031152 xustar000000000000000030 mtime=1388688107.975229799 30 atime=1389081084.840724365 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.OpenSearch.OpenSearchWriter.html0000644000175000001440000000517412261331353031600 0ustar00detlevusers00000000000000 eric4.Helpviewer.OpenSearch.OpenSearchWriter

    eric4.Helpviewer.OpenSearch.OpenSearchWriter

    Module implementing a writer for open search engine descriptions.

    Global Attributes

    None

    Classes

    OpenSearchWriter Class implementing a writer for open search engine descriptions.

    Functions

    None


    OpenSearchWriter

    Class implementing a writer for open search engine descriptions.

    Derived from

    QXmlStreamWriter

    Class Attributes

    None

    Class Methods

    None

    Methods

    OpenSearchWriter Constructor
    __write Private method to write the description of an engine.
    write Public method to write the description of an engine.

    Static Methods

    None

    OpenSearchWriter (Constructor)

    OpenSearchWriter()

    Constructor

    OpenSearchWriter.__write

    __write(engine)

    Private method to write the description of an engine.

    engine
    reference to the engine (OpenSearchEngine)

    OpenSearchWriter.write

    write(device, engine)

    Public method to write the description of an engine.

    device
    reference to the device to write to (QIODevice)
    engine
    reference to the engine (OpenSearchEngine)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.E4Gui.E4ModelToolBar.html0000644000175000001440000000013212261331350026101 xustar000000000000000030 mtime=1388688104.443228026 30 atime=1389081084.851724366 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.E4Gui.E4ModelToolBar.html0000644000175000001440000001660112261331350025637 0ustar00detlevusers00000000000000 eric4.E4Gui.E4ModelToolBar

    eric4.E4Gui.E4ModelToolBar

    Module implementing a tool bar populated from a QAbstractItemModel.

    Global Attributes

    None

    Classes

    E4ModelToolBar Class implementing a tool bar populated from a QAbstractItemModel.

    Functions

    None


    E4ModelToolBar

    Class implementing a tool bar populated from a QAbstractItemModel.

    Derived from

    QToolBar

    Class Attributes

    None

    Class Methods

    None

    Methods

    E4ModelToolBar Constructor
    _build Protected slot to build the tool bar.
    _createMenu Protected method to create the menu for a tool bar action.
    dragEnterEvent Protected method to handle drag enter events.
    dropEvent Protected method to handle drop events.
    eventFilter Public method to handle event for other objects.
    hideEvent Protected method to handle hide events.
    index Public method to get the index of an action.
    model Public method to get a reference to the model.
    mouseMoveEvent Protected method to handle mouse move events.
    resetFlags Public method to reset the saved internal state.
    rootIndex Public method to get the root index.
    setModel Public method to set the model for the tool bar.
    setRootIndex Public method to set the root index.
    showEvent Protected method to handle show events.

    Static Methods

    None

    E4ModelToolBar (Constructor)

    E4ModelToolBar(title = None, parent = None)

    Constructor

    title
    title for the tool bar (QString)
    parent
    reference to the parent widget (QWidget)

    E4ModelToolBar._build

    _build()

    Protected slot to build the tool bar.

    E4ModelToolBar._createMenu

    _createMenu()

    Protected method to create the menu for a tool bar action.

    Returns:
    menu for a tool bar action (E4ModelMenu)

    E4ModelToolBar.dragEnterEvent

    dragEnterEvent(evt)

    Protected method to handle drag enter events.

    evt
    reference to the event (QDragEnterEvent)

    E4ModelToolBar.dropEvent

    dropEvent(evt)

    Protected method to handle drop events.

    evt
    reference to the event (QDropEvent)

    E4ModelToolBar.eventFilter

    eventFilter(obj, evt)

    Public method to handle event for other objects.

    obj
    reference to the object (QObject)
    evt
    reference to the event (QEvent)
    Returns:
    flag indicating that the event should be filtered out (boolean)

    E4ModelToolBar.hideEvent

    hideEvent(evt)

    Protected method to handle hide events.

    evt
    reference to the hide event (QHideEvent)

    E4ModelToolBar.index

    index(action)

    Public method to get the index of an action.

    action
    reference to the action to get the index for (QAction)
    Returns:
    index of the action (QModelIndex)

    E4ModelToolBar.model

    model()

    Public method to get a reference to the model.

    Returns:
    reference to the model (QAbstractItemModel)

    E4ModelToolBar.mouseMoveEvent

    mouseMoveEvent(evt)

    Protected method to handle mouse move events.

    evt
    reference to the event (QMouseEvent)

    E4ModelToolBar.resetFlags

    resetFlags()

    Public method to reset the saved internal state.

    E4ModelToolBar.rootIndex

    rootIndex()

    Public method to get the root index.

    Returns:
    root index (QModelIndex)

    E4ModelToolBar.setModel

    setModel(model)

    Public method to set the model for the tool bar.

    model
    reference to the model (QAbstractItemModel)

    E4ModelToolBar.setRootIndex

    setRootIndex(idx)

    Public method to set the root index.

    idx
    index to be set as the root index (QModelIndex)

    E4ModelToolBar.showEvent

    showEvent(evt)

    Protected method to handle show events.

    evt
    reference to the hide event (QHideEvent)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.Network.NetworkReply.html0000644000175000001440000000013112261331353030661 xustar000000000000000029 mtime=1388688107.91722977 30 atime=1389081084.858724365 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.Network.NetworkReply.html0000644000175000001440000000624312261331353030421 0ustar00detlevusers00000000000000 eric4.Helpviewer.Network.NetworkReply

    eric4.Helpviewer.Network.NetworkReply

    Module implementing a network reply object for special data.

    Global Attributes

    None

    Classes

    NetworkReply Class implementing a QNetworkReply subclass for special data.

    Functions

    None


    NetworkReply

    Class implementing a QNetworkReply subclass for special data.

    Derived from

    QNetworkReply

    Class Attributes

    None

    Class Methods

    None

    Methods

    NetworkReply Constructor
    abort Public slot to abort the operation.
    bytesAvailable Public method to determined the bytes available for being read.
    readData Protected method to retrieve data from the reply object.

    Static Methods

    None

    NetworkReply (Constructor)

    NetworkReply(request, fileData, mimeType, parent = None)

    Constructor

    request
    reference to the request object (QNetworkRequest)
    fileData
    reference to the data buffer (QByteArray)
    mimeType
    for the reply (string)
    parent
    reference to the parent object (QObject)

    NetworkReply.abort

    abort()

    Public slot to abort the operation.

    NetworkReply.bytesAvailable

    bytesAvailable()

    Public method to determined the bytes available for being read.

    Returns:
    bytes available (integer)

    NetworkReply.readData

    readData(maxlen)

    Protected method to retrieve data from the reply object.

    maxlen
    maximum number of bytes to read (integer)
    Returns:
    string containing the data (string)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.E4Gui.E4SqueezeLabels.html0000644000175000001440000000013212261331350026322 xustar000000000000000030 mtime=1388688104.386227997 30 atime=1389081084.858724365 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.E4Gui.E4SqueezeLabels.html0000644000175000001440000001374612261331350026067 0ustar00detlevusers00000000000000 eric4.E4Gui.E4SqueezeLabels

    eric4.E4Gui.E4SqueezeLabels

    Module implementing labels that squeeze their contents to fit the size of the label.

    Global Attributes

    None

    Classes

    E4SqueezeLabel Class implementing a label that squeezes its contents to fit its size.
    E4SqueezeLabelPath Class implementing a label showing a file path compacted to fit its size.

    Functions

    None


    E4SqueezeLabel

    Class implementing a label that squeezes its contents to fit its size.

    Derived from

    QLabel

    Class Attributes

    None

    Class Methods

    None

    Methods

    E4SqueezeLabel Constructor
    paintEvent Protected method called when some painting is required.
    setText Public method to set the label's text.

    Static Methods

    None

    E4SqueezeLabel (Constructor)

    E4SqueezeLabel(parent = None)

    Constructor

    parent
    reference to the parent Widget (QWidget)

    E4SqueezeLabel.paintEvent

    paintEvent(event)

    Protected method called when some painting is required.

    event
    reference to the paint event (QPaintEvent)

    E4SqueezeLabel.setText

    setText(txt)

    Public method to set the label's text.

    txt
    the text to be shown (string or QString)


    E4SqueezeLabelPath

    Class implementing a label showing a file path compacted to fit its size.

    Derived from

    QLabel

    Class Attributes

    None

    Class Methods

    None

    Methods

    E4SqueezeLabelPath Constructor
    length Public method to return the length of a text in pixels.
    paintEvent Protected method called when some painting is required.
    setPath Public method to set the path of the label.
    setSurrounding Public method to set the surrounding of the path string.
    setTextPath Public method to set the surrounding and the path of the label.

    Static Methods

    None

    E4SqueezeLabelPath (Constructor)

    E4SqueezeLabelPath(parent = None)

    Constructor

    parent
    reference to the parent Widget (QWidget)

    E4SqueezeLabelPath.length

    length(txt)

    Public method to return the length of a text in pixels.

    txt
    text to calculate the length for after wrapped (string or QString)
    Returns:
    length of the wrapped text in pixels (integer)

    E4SqueezeLabelPath.paintEvent

    paintEvent(event)

    Protected method called when some painting is required.

    event
    reference to the paint event (QPaintEvent)

    E4SqueezeLabelPath.setPath

    setPath(path)

    Public method to set the path of the label.

    path
    path to be shown (string or QString)

    E4SqueezeLabelPath.setSurrounding

    setSurrounding(surrounding)

    Public method to set the surrounding of the path string.

    surrounding
    the a string containg placeholders for the path (QString)

    E4SqueezeLabelPath.setTextPath

    setTextPath(surrounding, path)

    Public method to set the surrounding and the path of the label.

    surrounding
    the a string containg placeholders for the path (QString)
    path
    path to be shown (string or QString)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DebugClients.Python.getpass.html0000644000175000001440000000013212261331354027752 xustar000000000000000030 mtime=1388688108.183229904 30 atime=1389081084.868724365 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.DebugClients.Python.getpass.html0000644000175000001440000000437112261331354027511 0ustar00detlevusers00000000000000 eric4.DebugClients.Python.getpass

    eric4.DebugClients.Python.getpass

    Module implementing utilities to get a password and/or the current user name.

    getpass(prompt) - prompt for a password, with echo turned off getuser() - get the user name from the environment or password database

    This module is a replacement for the one found in the Python distribution. It is to provide a debugger compatible variant of the a.m. functions.

    Global Attributes

    __all__
    default_getpass
    unix_getpass
    win_getpass

    Classes

    None

    Functions

    getpass Function to prompt for a password, with echo turned off.
    getuser Function to get the username from the environment or password database.


    getpass

    getpass(prompt='Password: ')

    Function to prompt for a password, with echo turned off.

    prompt
    Prompt to be shown to the user (string)
    Returns:
    Password entered by the user (string)


    getuser

    getuser()

    Function to get the username from the environment or password database.

    First try various environment variables, then the password database. This works on Windows as long as USERNAME is set.

    Returns:
    username (string)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.OpenSearch.OpenSearchReader.0000644000175000001440000000013212261331353031100 xustar000000000000000030 mtime=1388688107.999229811 30 atime=1389081084.868724365 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.OpenSearch.OpenSearchReader.html0000644000175000001440000000445212261331353031524 0ustar00detlevusers00000000000000 eric4.Helpviewer.OpenSearch.OpenSearchReader

    eric4.Helpviewer.OpenSearch.OpenSearchReader

    Module implementing a reader for open search engine descriptions.

    Global Attributes

    None

    Classes

    OpenSearchReader Class implementing a reader for open search engine descriptions.

    Functions

    None


    OpenSearchReader

    Class implementing a reader for open search engine descriptions.

    Derived from

    QXmlStreamReader

    Class Attributes

    None

    Class Methods

    None

    Methods

    __read Private method to read and parse the description.
    read Public method to read the description.

    Static Methods

    None

    OpenSearchReader.__read

    __read()

    Private method to read and parse the description.

    Returns:
    search engine object (OpenSearchEngine)

    OpenSearchReader.read

    read(device)

    Public method to read the description.

    device
    device to read the description from (QIODevice)
    Returns:
    search engine object (OpenSearchEngine)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Utilities.ClassBrowsers.pyclbr.html0000644000175000001440000000013212261331354030515 xustar000000000000000030 mtime=1388688108.404230014 30 atime=1389081084.868724365 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Utilities.ClassBrowsers.pyclbr.html0000644000175000001440000001765212261331354030262 0ustar00detlevusers00000000000000 eric4.Utilities.ClassBrowsers.pyclbr

    eric4.Utilities.ClassBrowsers.pyclbr

    Parse a Python file and retrieve classes, functions/methods and attributes.

    Parse enough of a Python file to recognize class and method definitions and to find out the superclasses of a class as well as its attributes.

    This is module is based on pyclbr found in the Python 2.2.2 distribution.

    Global Attributes

    SUPPORTED_TYPES
    TABWIDTH
    _commentsub
    _getnext
    _modules

    Classes

    Attribute Class to represent a class attribute.
    Class Class to represent a Python class.
    Function Class to represent a Python function.
    Publics Class to represent the list of public identifiers.
    VisibilityMixin Mixin class implementing the notion of visibility.

    Functions

    _indent Module function to return the indentation depth.
    readmodule_ex Read a module file and return a dictionary of classes.


    Attribute

    Class to represent a class attribute.

    Derived from

    ClbrBaseClasses.Attribute, VisibilityMixin

    Class Attributes

    None

    Class Methods

    None

    Methods

    Attribute Constructor

    Static Methods

    None

    Attribute (Constructor)

    Attribute(module, name, file, lineno)

    Constructor

    module
    name of the module containing this class
    name
    name of this class
    file
    filename containing this attribute
    lineno
    linenumber of the class definition


    Class

    Class to represent a Python class.

    Derived from

    ClbrBaseClasses.Class, VisibilityMixin

    Class Attributes

    None

    Class Methods

    None

    Methods

    Class Constructor

    Static Methods

    None

    Class (Constructor)

    Class(module, name, super, file, lineno)

    Constructor

    module
    name of the module containing this class
    name
    name of this class
    super
    list of class names this class is inherited from
    file
    filename containing this class
    lineno
    linenumber of the class definition


    Function

    Class to represent a Python function.

    Derived from

    ClbrBaseClasses.Function, VisibilityMixin

    Class Attributes

    None

    Class Methods

    None

    Methods

    Function Constructor

    Static Methods

    None

    Function (Constructor)

    Function(module, name, file, lineno, signature = '', separator = ', ', modifierType=ClbrBaseClasses.Function.General)

    Constructor

    module
    name of the module containing this function
    name
    name of this function
    file
    filename containing this class
    lineno
    linenumber of the class definition
    signature
    parameterlist of the method
    separator
    string separating the parameters
    modifierType
    type of the function


    Publics

    Class to represent the list of public identifiers.

    Derived from

    object

    Class Attributes

    None

    Class Methods

    None

    Methods

    Publics Constructor

    Static Methods

    None

    Publics (Constructor)

    Publics(module, file, lineno, idents)

    Constructor

    module
    name of the module containing this function
    file
    filename containing this class
    lineno
    linenumber of the class definition
    idents
    list of public identifiers


    VisibilityMixin

    Mixin class implementing the notion of visibility.

    Derived from

    ClbrBaseClasses.ClbrVisibilityMixinBase

    Class Attributes

    None

    Class Methods

    None

    Methods

    VisibilityMixin Method to initialize the visibility.

    Static Methods

    None

    VisibilityMixin (Constructor)

    VisibilityMixin()

    Method to initialize the visibility.



    _indent

    _indent(ws)

    Module function to return the indentation depth.

    ws
    the whitespace to be checked (string)
    Returns:
    length of the whitespace string (integer)


    readmodule_ex

    readmodule_ex(module, path=[], inpackage = False, isPyFile = False)

    Read a module file and return a dictionary of classes.

    Search for MODULE in PATH and sys.path, read and parse the module and return a dictionary with one entry for each class found in the module.

    module
    name of the module file (string)
    path
    path the module should be searched in (list of strings)
    inpackage
    flag indicating a module inside a package is scanned
    Returns:
    the resulting dictionary

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsSubversion.SvnCop0000644000175000001440000000013212261331352031306 xustar000000000000000030 mtime=1388688106.858229238 30 atime=1389081084.868724365 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsSubversion.SvnCopyDialog.html0000644000175000001440000000667712261331352033334 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsSubversion.SvnCopyDialog

    eric4.Plugins.VcsPlugins.vcsSubversion.SvnCopyDialog

    Module implementing a dialog to enter the data for a copy operation.

    Global Attributes

    None

    Classes

    SvnCopyDialog Class implementing a dialog to enter the data for a copy or rename operation.

    Functions

    None


    SvnCopyDialog

    Class implementing a dialog to enter the data for a copy or rename operation.

    Derived from

    QDialog, Ui_SvnCopyDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnCopyDialog Constructor
    getData Public method to retrieve the copy data.
    on_dirButton_clicked Private slot to handle the button press for selecting the target via a selection dialog.
    on_targetEdit_textChanged Private slot to handle changes of the target.

    Static Methods

    None

    SvnCopyDialog (Constructor)

    SvnCopyDialog(source, parent = None, move = False, force = False)

    Constructor

    source
    name of the source file/directory (QString)
    parent
    parent widget (QWidget)
    move
    flag indicating a move operation
    force
    flag indicating a forced operation (boolean)

    SvnCopyDialog.getData

    getData()

    Public method to retrieve the copy data.

    Returns:
    the target name (QString) and a flag indicating the operation should be enforced (boolean)

    SvnCopyDialog.on_dirButton_clicked

    on_dirButton_clicked()

    Private slot to handle the button press for selecting the target via a selection dialog.

    SvnCopyDialog.on_targetEdit_textChanged

    on_targetEdit_textChanged(txt)

    Private slot to handle changes of the target.

    txt
    contents of the target edit (QString)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.E4XML.XMLHandlerBase.html0000644000175000001440000000013212261331352026034 xustar000000000000000030 mtime=1388688106.491229054 30 atime=1389081084.868724365 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.E4XML.XMLHandlerBase.html0000644000175000001440000002550112261331352025571 0ustar00detlevusers00000000000000 eric4.E4XML.XMLHandlerBase

    eric4.E4XML.XMLHandlerBase

    Module implementing a base class for all of eric4s XML handlers.

    Global Attributes

    None

    Classes

    XMLHandlerBase Class implementing the base class for al of eric4s XML handlers.

    Functions

    None


    XMLHandlerBase

    Class implementing the base class for al of eric4s XML handlers.

    Derived from

    ContentHandler

    Class Attributes

    None

    Class Methods

    None

    Methods

    XMLHandlerBase Constructor
    _prepareBasics Protected method to prepare the parsing of XML for basic python types.
    characters Handler called for ordinary text.
    decodedNewLines Public method to decode newlines and paragraph breaks.
    defaultEndElement Handler method for the common end tags.
    defaultStartElement Handler method for common start tags.
    endBool Handler method for the "bool" end tag.
    endComplex Handler method for the "complex" end tag.
    endDictionary Handler method for the "dictionary" end tag.
    endElement Handler called, when an ending tag is found.
    endFloat Handler method for the "float" end tag.
    endInt Handler method for the "int" end tag.
    endList Handler method for the "list" end tag.
    endLong Handler method for the "long" end tag.
    endNone Handler method for the "none" end tag.
    endPickle Handler method for the "pickle" end tag.
    endString Handler method for the "string" end tag.
    endTuple Handler method for the "tuple" end tag.
    endUnicode Handler method for the "unicode" end tag.
    startDictionary Handler method for the "dictionary" start tag.
    startDocument Handler called, when the document parsing is started.
    startElement Handler called, when a starting tag is found.
    startList Handler method for the "list" start tag.
    startPickle Handler method for the "pickle" start tag.
    startTuple Handler method for the "tuple" start tag.
    unescape Public method used to unescape certain characters.
    utf8_to_code Public method to convert a string to unicode and encode it for XML.

    Static Methods

    None

    XMLHandlerBase (Constructor)

    XMLHandlerBase()

    Constructor

    XMLHandlerBase._prepareBasics

    _prepareBasics()

    Protected method to prepare the parsing of XML for basic python types.

    XMLHandlerBase.characters

    characters(chars)

    Handler called for ordinary text.

    chars
    the scanned text (string)

    XMLHandlerBase.decodedNewLines

    decodedNewLines(text)

    Public method to decode newlines and paragraph breaks.

    text
    text to decode (string or QString)

    XMLHandlerBase.defaultEndElement

    defaultEndElement()

    Handler method for the common end tags.

    XMLHandlerBase.defaultStartElement

    defaultStartElement(attrs)

    Handler method for common start tags.

    attrs
    list of tag attributes

    XMLHandlerBase.endBool

    endBool()

    Handler method for the "bool" end tag.

    XMLHandlerBase.endComplex

    endComplex()

    Handler method for the "complex" end tag.

    XMLHandlerBase.endDictionary

    endDictionary()

    Handler method for the "dictionary" end tag.

    XMLHandlerBase.endElement

    endElement(name)

    Handler called, when an ending tag is found.

    name
    name of the tag (string)

    XMLHandlerBase.endFloat

    endFloat()

    Handler method for the "float" end tag.

    XMLHandlerBase.endInt

    endInt()

    Handler method for the "int" end tag.

    XMLHandlerBase.endList

    endList()

    Handler method for the "list" end tag.

    XMLHandlerBase.endLong

    endLong()

    Handler method for the "long" end tag.

    XMLHandlerBase.endNone

    endNone()

    Handler method for the "none" end tag.

    XMLHandlerBase.endPickle

    endPickle()

    Handler method for the "pickle" end tag.

    XMLHandlerBase.endString

    endString()

    Handler method for the "string" end tag.

    XMLHandlerBase.endTuple

    endTuple()

    Handler method for the "tuple" end tag.

    XMLHandlerBase.endUnicode

    endUnicode()

    Handler method for the "unicode" end tag.

    XMLHandlerBase.startDictionary

    startDictionary(attrs)

    Handler method for the "dictionary" start tag.

    attrs
    list of tag attributes

    XMLHandlerBase.startDocument

    startDocument()

    Handler called, when the document parsing is started.

    XMLHandlerBase.startElement

    startElement(name, attrs)

    Handler called, when a starting tag is found.

    name
    name of the tag (string)
    attrs
    list of tag attributes

    XMLHandlerBase.startList

    startList(attrs)

    Handler method for the "list" start tag.

    attrs
    list of tag attributes

    XMLHandlerBase.startPickle

    startPickle(attrs)

    Handler method for the "pickle" start tag.

    attrs
    list of tag attributes

    XMLHandlerBase.startTuple

    startTuple(attrs)

    Handler method for the "tuple" start tag.

    attrs
    list of tag attributes

    XMLHandlerBase.unescape

    unescape(text, attribute = False)

    Public method used to unescape certain characters.

    text
    the text to unescape (string)
    attribute
    flag indicating unescaping is done for an attribute

    XMLHandlerBase.utf8_to_code

    utf8_to_code(text)

    Public method to convert a string to unicode and encode it for XML.

    text
    the text to encode (string)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ConfigurationPages.EditorCa0000644000175000001440000000013212261331353031231 xustar000000000000000030 mtime=1388688107.537229579 30 atime=1389081084.871724365 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.EditorCalltipsPage.html0000644000175000001440000000570212261331353033757 0ustar00detlevusers00000000000000 eric4.Preferences.ConfigurationPages.EditorCalltipsPage

    eric4.Preferences.ConfigurationPages.EditorCalltipsPage

    Module implementing the Editor Calltips configuration page.

    Global Attributes

    None

    Classes

    EditorCalltipsPage Class implementing the Editor Calltips configuration page.

    Functions

    create Module function to create the configuration page.


    EditorCalltipsPage

    Class implementing the Editor Calltips configuration page.

    Derived from

    ConfigurationPageBase, Ui_EditorCalltipsPage

    Class Attributes

    None

    Class Methods

    None

    Methods

    EditorCalltipsPage Constructor
    on_calltipsBackgroundButton_clicked Private slot to set the background colour for calltips.
    save Public slot to save the EditorCalltips configuration.

    Static Methods

    None

    EditorCalltipsPage (Constructor)

    EditorCalltipsPage()

    Constructor

    EditorCalltipsPage.on_calltipsBackgroundButton_clicked

    on_calltipsBackgroundButton_clicked()

    Private slot to set the background colour for calltips.

    EditorCalltipsPage.save

    save()

    Public slot to save the EditorCalltips configuration.



    create

    create(dlg)

    Module function to create the configuration page.

    dlg
    reference to the configuration dialog

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.Templates.html0000644000175000001440000000013212261331354025520 xustar000000000000000030 mtime=1388688108.660230143 30 atime=1389081084.871724365 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/index-eric4.Templates.html0000644000175000001440000000250612261331354025255 0ustar00detlevusers00000000000000 eric4.Templates

    eric4.Templates

    Package containing modules for the templating system.

    Modules

    TemplateMultipleVariablesDialog Module implementing a dialog for entering multiple template variables.
    TemplatePropertiesDialog Module implementing the templates properties dialog.
    TemplateSingleVariableDialog Module implementing a dialog for entering a single template variable.
    TemplateViewer Module implementing a template viewer and associated classes.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ConfigurationPages.Interfac0000644000175000001440000000013212261331353031272 xustar000000000000000030 mtime=1388688107.613229617 30 atime=1389081084.871724365 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.InterfacePage.html0000644000175000001440000001100712261331353032730 0ustar00detlevusers00000000000000 eric4.Preferences.ConfigurationPages.InterfacePage

    eric4.Preferences.ConfigurationPages.InterfacePage

    Module implementing the Interface configuration page.

    Global Attributes

    None

    Classes

    InterfacePage Class implementing the Interface configuration page.

    Functions

    create Module function to create the configuration page.


    InterfacePage

    Class implementing the Interface configuration page.

    Derived from

    ConfigurationPageBase, Ui_InterfacePage

    Class Attributes

    None

    Class Methods

    None

    Methods

    InterfacePage Constructor
    __populateLanguageCombo Private method to initialize the language combobox of the Interface configuration page.
    __populateStyleCombo Private method to populate the style combo box.
    on_resetLayoutButton_clicked Private method to reset layout to factory defaults
    on_stderrTextColourButton_clicked Private slot to set the foreground colour of the caret.
    on_styleSheetButton_clicked Private method to select the style sheet file via a dialog.
    save Public slot to save the Interface configuration.

    Static Methods

    None

    InterfacePage (Constructor)

    InterfacePage()

    Constructor

    InterfacePage.__populateLanguageCombo

    __populateLanguageCombo()

    Private method to initialize the language combobox of the Interface configuration page.

    InterfacePage.__populateStyleCombo

    __populateStyleCombo()

    Private method to populate the style combo box.

    InterfacePage.on_resetLayoutButton_clicked

    on_resetLayoutButton_clicked()

    Private method to reset layout to factory defaults

    InterfacePage.on_stderrTextColourButton_clicked

    on_stderrTextColourButton_clicked()

    Private slot to set the foreground colour of the caret.

    InterfacePage.on_styleSheetButton_clicked

    on_styleSheetButton_clicked()

    Private method to select the style sheet file via a dialog.

    InterfacePage.save

    save()

    Public slot to save the Interface configuration.



    create

    create(dlg)

    Module function to create the configuration page.

    dlg
    reference to the configuration dialog

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DebugClients.Python.DebugConfig.html0000644000175000001440000000013212261331354030460 xustar000000000000000030 mtime=1388688108.207229916 30 atime=1389081084.872724365 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.DebugClients.Python.DebugConfig.html0000644000175000001440000000156712261331354030223 0ustar00detlevusers00000000000000 eric4.DebugClients.Python.DebugConfig

    eric4.DebugClients.Python.DebugConfig

    Module defining type strings for the different Python types.

    Global Attributes

    ConfigVarTypeStrings

    Classes

    None

    Functions

    None

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DebugClients.Python3.DebugClientBase.ht0000644000175000001440000000013212261331354031016 xustar000000000000000030 mtime=1388688108.132229878 30 atime=1389081084.872724365 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.DebugClients.Python3.DebugClientBase.html0000644000175000001440000006220412261331354031105 0ustar00detlevusers00000000000000 eric4.DebugClients.Python3.DebugClientBase

    eric4.DebugClients.Python3.DebugClientBase

    Module implementing a debug client base class.

    Global Attributes

    DebugClientInstance

    Classes

    DebugClientBase Class implementing the client side of the debugger.

    Functions

    DebugClientClose Replacement for the standard os.close(fd).
    DebugClientFork Replacement for the standard os.fork().
    DebugClientInput Replacement for the standard input builtin.
    DebugClientSetRecursionLimit Replacement for the standard sys.setrecursionlimit(limit).


    DebugClientBase

    Class implementing the client side of the debugger.

    It provides access to the Python interpeter from a debugger running in another process whether or not the Qt event loop is running.

    The protocol between the debugger and the client assumes that there will be a single source of debugger commands and a single source of Python statements. Commands and statement are always exactly one line and may be interspersed.

    The protocol is as follows. First the client opens a connection to the debugger and then sends a series of one line commands. A command is either >Load<, >Step<, >StepInto<, ... or a Python statement. See DebugProtocol.py for a listing of valid protocol tokens.

    A Python statement consists of the statement to execute, followed (in a separate line) by >OK?<. If the statement was incomplete then the response is >Continue<. If there was an exception then the response is >Exception<. Otherwise the response is >OK<. The reason for the >OK?< part is to provide a sentinal (ie. the responding >OK<) after any possible output as a result of executing the command.

    The client may send any other lines at any other time which should be interpreted as program output.

    If the debugger closes the session there is no response from the client. The client may close the session at any time as a result of the script being debugged closing or crashing.

    Note: This class is meant to be subclassed by individual DebugClient classes. Do not instantiate it directly.

    Derived from

    object

    Class Attributes

    clientCapabilities

    Class Methods

    None

    Methods

    DebugClientBase Constructor
    __clientCapabilities Private method to determine the clients capabilities.
    __compileFileSource Private method to compile source code read from a file.
    __completionList Private slot to handle the request for a commandline completion list.
    __dumpThreadList Public method to send the list of threads.
    __dumpVariable Private method to return the variables of a frame to the debug server.
    __dumpVariables Private method to return the variables of a frame to the debug server.
    __exceptionRaised Private method called in the case of an exception
    __formatQt4Variable Private method to produce a formatted output of a simple Qt4 type.
    __formatVariablesList Private method to produce a formated variables list.
    __generateFilterObjects Private slot to convert a filter string to a list of filter objects.
    __getSysPath Private slot to calculate a path list including the PYTHONPATH environment variable.
    __interact Private method to Interact with the debugger.
    __resolveHost Private method to resolve a hostname to an IP address.
    __setCoding Private method to set the coding used by a python file.
    __unhandled_exception Private method called to report an uncaught exception.
    absPath Public method to convert a filename to an absolute name.
    attachThread Public method to setup a thread for DebugClient to debug.
    close Private method implementing a close method as a replacement for os.close().
    connectDebugger Public method to establish a session with the debugger.
    eventLoop Public method implementing our event loop.
    eventPoll Public method to poll for events like 'set break point'.
    fork Public method implementing a fork routine deciding which branch to follow.
    getCoding Public method to return the current coding.
    getRunning Public method to return the main script we are currently running.
    handleLine Public method to handle the receipt of a complete line.
    input Public method to implement input() using the event loop.
    main Public method implementing the main method.
    progTerminated Public method to tell the debugger that the program has terminated.
    run_call Public method used to start the remote debugger and call a function.
    sessionClose Public method to close the session with the debugger and optionally terminate.
    shouldSkip Public method to check if a file should be skipped.
    startDebugger Public method used to start the remote debugger.
    startProgInDebugger Public method used to start the remote debugger.
    write Public method to write data to the output stream.

    Static Methods

    None

    DebugClientBase (Constructor)

    DebugClientBase()

    Constructor

    DebugClientBase.__clientCapabilities

    __clientCapabilities()

    Private method to determine the clients capabilities.

    Returns:
    client capabilities (integer)

    DebugClientBase.__compileFileSource

    __compileFileSource(filename, mode = 'exec')

    Private method to compile source code read from a file.

    filename
    name of the source file (string)
    mode
    kind of code to be generated (string, exec or eval)
    Returns:
    compiled code object (None in case of errors)

    DebugClientBase.__completionList

    __completionList(text)

    Private slot to handle the request for a commandline completion list.

    text
    the text to be completed (string)

    DebugClientBase.__dumpThreadList

    __dumpThreadList()

    Public method to send the list of threads.

    DebugClientBase.__dumpVariable

    __dumpVariable(var, frmnr, scope, filter)

    Private method to return the variables of a frame to the debug server.

    var
    list encoded name of the requested variable (list of strings)
    frmnr
    distance of frame reported on. 0 is the current frame (int)
    scope
    1 to report global variables, 0 for local variables (int)
    filter
    the indices of variable types to be filtered (list of int)

    DebugClientBase.__dumpVariables

    __dumpVariables(frmnr, scope, filter)

    Private method to return the variables of a frame to the debug server.

    frmnr
    distance of frame reported on. 0 is the current frame (int)
    scope
    1 to report global variables, 0 for local variables (int)
    filter
    the indices of variable types to be filtered (list of int)

    DebugClientBase.__exceptionRaised

    __exceptionRaised()

    Private method called in the case of an exception

    It ensures that the debug server is informed of the raised exception.

    DebugClientBase.__formatQt4Variable

    __formatQt4Variable(value, vtype)

    Private method to produce a formatted output of a simple Qt4 type.

    value
    variable to be formatted
    vtype
    type of the variable to be formatted (string)
    Returns:
    A tuple consisting of a list of formatted variables. Each variable entry is a tuple of three elements, the variable name, its type and value.

    DebugClientBase.__formatVariablesList

    __formatVariablesList(keylist, dict, scope, filter = [], formatSequences = False)

    Private method to produce a formated variables list.

    The dictionary passed in to it is scanned. Variables are only added to the list, if their type is not contained in the filter list and their name doesn't match any of the filter expressions. The formated variables list (a list of tuples of 3 values) is returned.

    keylist
    keys of the dictionary
    dict
    the dictionary to be scanned
    scope
    1 to filter using the globals filter, 0 using the locals filter (int). Variables are only added to the list, if their name do not match any of the filter expressions.
    filter
    the indices of variable types to be filtered. Variables are only added to the list, if their type is not contained in the filter list.
    formatSequences
    flag indicating, that sequence or dictionary variables should be formatted. If it is 0 (or false), just the number of items contained in these variables is returned. (boolean)
    Returns:
    A tuple consisting of a list of formatted variables. Each variable entry is a tuple of three elements, the variable name, its type and value.

    DebugClientBase.__generateFilterObjects

    __generateFilterObjects(scope, filterString)

    Private slot to convert a filter string to a list of filter objects.

    scope
    1 to generate filter for global variables, 0 for local variables (int)
    filterString
    string of filter patterns separated by ';'

    DebugClientBase.__getSysPath

    __getSysPath(firstEntry)

    Private slot to calculate a path list including the PYTHONPATH environment variable.

    firstEntry
    entry to be put first in sys.path (string)
    Returns:
    path list for use as sys.path (list of strings)

    DebugClientBase.__interact

    __interact()

    Private method to Interact with the debugger.

    DebugClientBase.__resolveHost

    __resolveHost(host)

    Private method to resolve a hostname to an IP address.

    host
    hostname of the debug server (string)
    Returns:
    IP address (string)

    DebugClientBase.__setCoding

    __setCoding(filename)

    Private method to set the coding used by a python file.

    filename
    name of the file to inspect (string)

    DebugClientBase.__unhandled_exception

    __unhandled_exception(exctype, excval, exctb)

    Private method called to report an uncaught exception.

    exctype
    the type of the exception
    excval
    data about the exception
    exctb
    traceback for the exception

    DebugClientBase.absPath

    absPath(fn)

    Public method to convert a filename to an absolute name.

    sys.path is used as a set of possible prefixes. The name stays relative if a file could not be found.

    fn
    filename (string)
    Returns:
    the converted filename (string)

    DebugClientBase.attachThread

    attachThread(target = None, args = None, kwargs = None, mainThread = False)

    Public method to setup a thread for DebugClient to debug.

    If mainThread is non-zero, then we are attaching to the already started mainthread of the app and the rest of the args are ignored.

    target
    the start function of the target thread (i.e. the user code)
    args
    arguments to pass to target
    kwargs
    keyword arguments to pass to target
    mainThread
    True, if we are attaching to the already started mainthread of the app
    Returns:
    The identifier of the created thread

    DebugClientBase.close

    close(fd)

    Private method implementing a close method as a replacement for os.close().

    It prevents the debugger connections from being closed.

    fd
    file descriptor to be closed (integer)

    DebugClientBase.connectDebugger

    connectDebugger(port, remoteAddress = None, redirect = True)

    Public method to establish a session with the debugger.

    It opens a network connection to the debugger, connects it to stdin, stdout and stderr and saves these file objects in case the application being debugged redirects them itself.

    port
    the port number to connect to (int)
    remoteAddress
    the network address of the debug server host (string)
    redirect
    flag indicating redirection of stdin, stdout and stderr (boolean)

    DebugClientBase.eventLoop

    eventLoop(disablePolling = False)

    Public method implementing our event loop.

    disablePolling
    flag indicating to enter an event loop with polling disabled (boolean)

    DebugClientBase.eventPoll

    eventPoll()

    Public method to poll for events like 'set break point'.

    DebugClientBase.fork

    fork()

    Public method implementing a fork routine deciding which branch to follow.

    DebugClientBase.getCoding

    getCoding()

    Public method to return the current coding.

    Returns:
    codec name (string)

    DebugClientBase.getRunning

    getRunning()

    Public method to return the main script we are currently running.

    DebugClientBase.handleLine

    handleLine(line)

    Public method to handle the receipt of a complete line.

    It first looks for a valid protocol token at the start of the line. Thereafter it trys to execute the lines accumulated so far.

    line
    the received line

    DebugClientBase.input

    input(prompt)

    Public method to implement input() using the event loop.

    prompt
    the prompt to be shown (string)
    Returns:
    the entered string

    DebugClientBase.main

    main()

    Public method implementing the main method.

    DebugClientBase.progTerminated

    progTerminated(status)

    Public method to tell the debugger that the program has terminated.

    status
    the return status

    DebugClientBase.run_call

    run_call(scriptname, func, *args)

    Public method used to start the remote debugger and call a function.

    scriptname
    name of the script to be debugged (string)
    func
    function to be called
    *args
    arguments being passed to func
    Returns:
    result of the function call

    DebugClientBase.sessionClose

    sessionClose(exit = True)

    Public method to close the session with the debugger and optionally terminate.

    exit
    flag indicating to terminate (boolean)

    DebugClientBase.shouldSkip

    shouldSkip(fn)

    Public method to check if a file should be skipped.

    fn
    filename to be checked
    Returns:
    non-zero if fn represents a file we are 'skipping', zero otherwise.

    DebugClientBase.startDebugger

    startDebugger(filename = None, host = None, port = None, enableTrace = True, exceptions = True, tracePython = False, redirect = True)

    Public method used to start the remote debugger.

    filename
    the program to be debugged (string)
    host
    hostname of the debug server (string)
    port
    portnumber of the debug server (int)
    enableTrace
    flag to enable the tracing function (boolean)
    exceptions
    flag to enable exception reporting of the IDE (boolean)
    tracePython
    flag to enable tracing into the Python library (boolean)
    redirect
    flag indicating redirection of stdin, stdout and stderr (boolean)

    DebugClientBase.startProgInDebugger

    startProgInDebugger(progargs, wd = '', host = None, port = None, exceptions = True, tracePython = False, redirect = True)

    Public method used to start the remote debugger.

    progargs
    commandline for the program to be debugged (list of strings)
    wd
    working directory for the program execution (string)
    host
    hostname of the debug server (string)
    port
    portnumber of the debug server (int)
    exceptions
    flag to enable exception reporting of the IDE (boolean)
    tracePython
    flag to enable tracing into the Python library (boolean)
    redirect
    flag indicating redirection of stdin, stdout and stderr (boolean)

    DebugClientBase.write

    write(s)

    Public method to write data to the output stream.

    s
    data to be written (string)


    DebugClientClose

    DebugClientClose(fd)

    Replacement for the standard os.close(fd).

    fd
    open file descriptor to be closed (integer)


    DebugClientFork

    DebugClientFork()

    Replacement for the standard os.fork().



    DebugClientInput

    DebugClientInput(prompt = "")

    Replacement for the standard input builtin.

    This function works with the split debugger.

    prompt
    The prompt to be shown. (string)


    DebugClientSetRecursionLimit

    DebugClientSetRecursionLimit(limit)

    Replacement for the standard sys.setrecursionlimit(limit).

    limit
    recursion limit (integer)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Project.NewDialogClassDialog.html0000644000175000001440000000013212261331351030036 xustar000000000000000030 mtime=1388688105.755228685 30 atime=1389081084.872724365 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Project.NewDialogClassDialog.html0000644000175000001440000001214312261331351027571 0ustar00detlevusers00000000000000 eric4.Project.NewDialogClassDialog

    eric4.Project.NewDialogClassDialog

    Module implementing a dialog to ente the data for a new dialog class file.

    Global Attributes

    None

    Classes

    NewDialogClassDialog Class implementing a dialog to ente the data for a new dialog class file.

    Functions

    None


    NewDialogClassDialog

    Class implementing a dialog to ente the data for a new dialog class file.

    Derived from

    QDialog, Ui_NewDialogClassDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    NewDialogClassDialog Constructor
    __enableOkButton Private slot to set the enable state of theok button.
    getData Public method to retrieve the data entered into the dialog.
    on_classnameEdit_textChanged Private slot called, when thext of the classname edit has changed.
    on_filenameEdit_textChanged Private slot called, when thext of the filename edit has changed.
    on_pathButton_clicked Private slot called to open a directory selection dialog.
    on_pathnameEdit_textChanged Private slot called, when thext of the pathname edit has changed.

    Static Methods

    None

    NewDialogClassDialog (Constructor)

    NewDialogClassDialog(defaultClassName, defaultFile, defaultPath, parent = None)

    Constructor

    defaultClassName
    proposed name for the new class (string or QString)
    defaultFile
    proposed name for the source file (string or QString)
    defaultPath
    default path for the new file (string or QString)
    parent
    parent widget if the dialog (QWidget)

    NewDialogClassDialog.__enableOkButton

    __enableOkButton()

    Private slot to set the enable state of theok button.

    NewDialogClassDialog.getData

    getData()

    Public method to retrieve the data entered into the dialog.

    Returns:
    tuple giving the classname (string) and the file name (string)

    NewDialogClassDialog.on_classnameEdit_textChanged

    on_classnameEdit_textChanged(text)

    Private slot called, when thext of the classname edit has changed.

    text
    changed text (QString)

    NewDialogClassDialog.on_filenameEdit_textChanged

    on_filenameEdit_textChanged(text)

    Private slot called, when thext of the filename edit has changed.

    text
    changed text (QString)

    NewDialogClassDialog.on_pathButton_clicked

    on_pathButton_clicked()

    Private slot called to open a directory selection dialog.

    NewDialogClassDialog.on_pathnameEdit_textChanged

    on_pathnameEdit_textChanged(text)

    Private slot called, when thext of the pathname edit has changed.

    text
    changed text (QString)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.patch_pyxml.html0000644000175000001440000000013212261331350025001 xustar000000000000000030 mtime=1388688104.181227894 30 atime=1389081084.872724365 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.patch_pyxml.html0000644000175000001440000000472412261331350024542 0ustar00detlevusers00000000000000 eric4.patch_pyxml

    eric4.patch_pyxml

    Script to patch pyXML to correct a bug.

    Global Attributes

    progName
    pyxmlModDir

    Classes

    None

    Functions

    initGlobals Sets the values of globals that need more than a simple assignment.
    isPatched Function to check, if pyXML is already patched.
    main The main function of the script.
    patchPyXML The patch function.
    usage Display a usage message and exit.


    initGlobals

    initGlobals()

    Sets the values of globals that need more than a simple assignment.



    isPatched

    isPatched()

    Function to check, if pyXML is already patched.

    Returns:
    flag indicating patch status (boolean)


    main

    main(argv)

    The main function of the script.

    argv is the list of command line arguments.



    patchPyXML

    patchPyXML()

    The patch function.



    usage

    usage(rcode = 2)

    Display a usage message and exit.

    rcode is the return code passed back to the calling process.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsPySvn.SvnStatusMo0000644000175000001440000000013212261331353031265 xustar000000000000000030 mtime=1388688107.131229375 30 atime=1389081084.872724365 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsPySvn.SvnStatusMonitorThread.html0000644000175000001440000001311112261331353034163 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsPySvn.SvnStatusMonitorThread

    eric4.Plugins.VcsPlugins.vcsPySvn.SvnStatusMonitorThread

    Module implementing the VCS status monitor thread class for Subversion.

    Global Attributes

    None

    Classes

    SvnStatusMonitorThread Class implementing the VCS status monitor thread class for Subversion.

    Functions

    None


    SvnStatusMonitorThread

    Class implementing the VCS status monitor thread class for Subversion.

    Derived from

    VcsStatusMonitorThread

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnStatusMonitorThread Constructor
    __clientLoginCallback Private method called by the client to get login information.
    __clientSslServerTrustPromptCallback Private method called by the client to request acceptance for a ssl server certificate.
    _performMonitor Protected method implementing the monitoring action.

    Static Methods

    None

    SvnStatusMonitorThread (Constructor)

    SvnStatusMonitorThread(interval, projectDir, vcs, parent = None)

    Constructor

    interval
    new interval in seconds (integer)
    projectDir
    project directory to monitor (string or QString)
    vcs
    reference to the version control object
    parent
    reference to the parent object (QObject)

    SvnStatusMonitorThread.__clientLoginCallback

    __clientLoginCallback(realm, username, may_save)

    Private method called by the client to get login information.

    realm
    name of the realm of the requested credentials (string)
    username
    username as supplied by subversion (string)
    may_save
    flag indicating, that subversion is willing to save the answers returned (boolean)
    Returns:
    tuple of four values (retcode, username, password, save). Retcode should be True, if username and password should be used by subversion, username and password contain the relevant data as strings and save is a flag indicating, that username and password should be saved. Always returns (False, "", "", False).

    SvnStatusMonitorThread.__clientSslServerTrustPromptCallback

    __clientSslServerTrustPromptCallback(trust_dict)

    Private method called by the client to request acceptance for a ssl server certificate.

    trust_dict
    dictionary containing the trust data
    Returns:
    tuple of three values (retcode, acceptedFailures, save). Retcode should be true, if the certificate should be accepted, acceptedFailures should indicate the accepted certificate failures and save should be True, if subversion should save the certificate. Always returns (False, 0, False).

    SvnStatusMonitorThread._performMonitor

    _performMonitor()

    Protected method implementing the monitoring action.

    This method populates the statusList member variable with a list of strings giving the status in the first column and the path relative to the project directory starting with the third column. The allowed status flags are:

    • "A" path was added but not yet comitted
    • "M" path has local changes
    • "O" path was removed
    • "R" path was deleted and then re-added
    • "U" path needs an update
    • "Z" path contains a conflict
    • " " path is back at normal

    Returns:
    tuple of flag indicating successful operation (boolean) and a status message in case of non successful operation (QString)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.E4Gui.E4TreeSortFilterProxyModel.html0000644000175000001440000000013212261331350030516 xustar000000000000000030 mtime=1388688104.418228013 30 atime=1389081084.873724365 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.E4Gui.E4TreeSortFilterProxyModel.html0000644000175000001440000000640012261331350030250 0ustar00detlevusers00000000000000 eric4.E4Gui.E4TreeSortFilterProxyModel

    eric4.E4Gui.E4TreeSortFilterProxyModel

    Module implementing a modified QSortFilterProxyModel.

    Global Attributes

    None

    Classes

    E4TreeSortFilterProxyModel Class implementing a modified QSortFilterProxyModel.

    Functions

    None


    E4TreeSortFilterProxyModel

    Class implementing a modified QSortFilterProxyModel.

    It always accepts the root nodes in the tree so filtering is only done on the children.

    Derived from

    QSortFilterProxyModel

    Class Attributes

    None

    Class Methods

    None

    Methods

    E4TreeSortFilterProxyModel Constructor
    filterAcceptsRow Protected method to determine, if the row is acceptable.
    hasChildren Public method to check, if a parent node has some children.

    Static Methods

    None

    E4TreeSortFilterProxyModel (Constructor)

    E4TreeSortFilterProxyModel(parent = None)

    Constructor

    parent
    reference to the parent object (QObject)

    E4TreeSortFilterProxyModel.filterAcceptsRow

    filterAcceptsRow(sourceRow, sourceParent)

    Protected method to determine, if the row is acceptable.

    sourceRow
    row number in the source model (integer)
    sourceParent
    index of the source item (QModelIndex)
    Returns:
    flag indicating acceptance (boolean)

    E4TreeSortFilterProxyModel.hasChildren

    hasChildren(parent = QModelIndex())

    Public method to check, if a parent node has some children.

    parent
    index of the parent node (QModelIndex)
    Returns:
    flag indicating the presence of children (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.History.HistoryCompleter.htm0000644000175000001440000000013212261331353031365 xustar000000000000000030 mtime=1388688107.787229705 30 atime=1389081084.873724365 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.History.HistoryCompleter.html0000644000175000001440000002415112261331353031276 0ustar00detlevusers00000000000000 eric4.Helpviewer.History.HistoryCompleter

    eric4.Helpviewer.History.HistoryCompleter

    Module implementing a special completer for the history.

    Global Attributes

    None

    Classes

    HistoryCompleter
    HistoryCompletionModel Class implementing a special model for history based completions.
    HistoryCompletionView Class implementing a special completer view for history based completions.

    Functions

    None


    HistoryCompleter

    Derived from

    QCompleter

    Class Attributes

    None

    Class Methods

    None

    Methods

    HistoryCompleter Constructor
    __updateFilter Private slot to update the search string.
    pathFromIndex Public method to get a path for a given index.
    splitPath Public method to split the given path into strings, that are used to match at each level in the model.

    Static Methods

    None

    HistoryCompleter (Constructor)

    HistoryCompleter(model, parent = None)

    Constructor

    model
    reference to the model (QAbstractItemModel)
    parent
    reference to the parent object (QObject)

    HistoryCompleter.__updateFilter

    __updateFilter()

    Private slot to update the search string.

    HistoryCompleter.pathFromIndex

    pathFromIndex(idx)

    Public method to get a path for a given index.

    idx
    reference to the index (QModelIndex)
    Returns:
    the actual URL from the history (QString)

    HistoryCompleter.splitPath

    splitPath(path)

    Public method to split the given path into strings, that are used to match at each level in the model.

    path
    path to be split (QString)
    Returns:
    list of path elements (QStringList)


    HistoryCompletionModel

    Class implementing a special model for history based completions.

    Derived from

    QSortFilterProxyModel

    Class Attributes

    HistoryCompletionRole

    Class Methods

    None

    Methods

    HistoryCompletionModel Constructor
    data Public method to get data from the model.
    filterAcceptsRow Protected method to determine, if the row is acceptable.
    isValid Public method to check the model for validity.
    lessThan Protected method used to sort the displayed items.
    searchString Public method to get the current search string.
    setSearchString Public method to set the current search string.
    setValid Public method to set the model's validity.

    Static Methods

    None

    HistoryCompletionModel (Constructor)

    HistoryCompletionModel(parent = None)

    Constructor

    parent
    reference to the parent object (QObject)

    HistoryCompletionModel.data

    data(index, role = Qt.DisplayRole)

    Public method to get data from the model.

    index
    index of history entry to get data for (QModelIndex)
    role
    data role (integer)
    Returns:
    history entry data (QVariant)

    HistoryCompletionModel.filterAcceptsRow

    filterAcceptsRow(sourceRow, sourceParent)

    Protected method to determine, if the row is acceptable.

    sourceRow
    row number in the source model (integer)
    sourceParent
    index of the source item (QModelIndex)
    Returns:
    flag indicating acceptance (boolean)

    HistoryCompletionModel.isValid

    isValid()

    Public method to check the model for validity.

    flag
    indicating a valid status (boolean)

    HistoryCompletionModel.lessThan

    lessThan(left, right)

    Protected method used to sort the displayed items.

    It implements a special sorting function based on the history entry's frequency giving a bonus to hits that match on a word boundary so that e.g. "dot.python-projects.org" is a better result for typing "dot" than "slashdot.org". However, it only looks for the string in the host name, not the entire URL, since while it makes sense to e.g. give "www.phoronix.com" a bonus for "ph", it does NOT make sense to give "www.yadda.com/foo.php" the bonus.

    left
    index of left item (QModelIndex)
    right
    index of right item (QModelIndex)
    Returns:
    true, if left is less than right (boolean)

    HistoryCompletionModel.searchString

    searchString()

    Public method to get the current search string.

    Returns:
    current search string (QString)

    HistoryCompletionModel.setSearchString

    setSearchString(string)

    Public method to set the current search string.

    string
    new search string (QString)

    HistoryCompletionModel.setValid

    setValid(valid)

    Public method to set the model's validity.

    valid
    flag indicating the new valid status (boolean)


    HistoryCompletionView

    Class implementing a special completer view for history based completions.

    Derived from

    QTableView

    Class Attributes

    None

    Class Methods

    None

    Methods

    HistoryCompletionView Constructor
    resizeEvent Protected method handling resize events.
    sizeHintForRow Public method to give a size hint for rows.

    Static Methods

    None

    HistoryCompletionView (Constructor)

    HistoryCompletionView(parent = None)

    Constructor

    parent
    reference to the parent widget (QWidget)

    HistoryCompletionView.resizeEvent

    resizeEvent(evt)

    Protected method handling resize events.

    evt
    reference to the resize event (QResizeEvent)

    HistoryCompletionView.sizeHintForRow

    sizeHintForRow(row)

    Public method to give a size hint for rows.

    row
    row number (integer)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.eric4_qregexp.html0000644000175000001440000000013212261331350025212 xustar000000000000000030 mtime=1388688104.220227914 30 atime=1389081084.873724365 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.eric4_qregexp.html0000644000175000001440000000332412261331350024746 0ustar00detlevusers00000000000000 eric4.eric4_qregexp

    eric4.eric4_qregexp

    Eric4 QRegExp

    This is the main Python script that performs the necessary initialization of the QRegExp wizard module and starts the Qt event loop. This is a standalone version of the integrated QRegExp wizard.

    Global Attributes

    None

    Classes

    None

    Functions

    createMainWidget Function to create the main widget.
    main Main entry point into the application.


    createMainWidget

    createMainWidget(argv)

    Function to create the main widget.

    argv
    list of commandline parameters (list of strings)
    Returns:
    reference to the main widget (QWidget)


    main

    main()

    Main entry point into the application.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.Network.PyrcAccessHandler.ht0000644000175000001440000000013212261331353031221 xustar000000000000000030 mtime=1388688107.935229779 30 atime=1389081084.874724365 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.Network.PyrcAccessHandler.html0000644000175000001440000000433012261331353031304 0ustar00detlevusers00000000000000 eric4.Helpviewer.Network.PyrcAccessHandler

    eric4.Helpviewer.Network.PyrcAccessHandler

    Module implementing a scheme access handler for Python resources.

    Global Attributes

    None

    Classes

    PyrcAccessHandler Class implementing a scheme access handler for Python resources.

    Functions

    None


    PyrcAccessHandler

    Class implementing a scheme access handler for Python resources.

    Derived from

    SchemeAccessHandler

    Class Attributes

    None

    Class Methods

    None

    Methods

    createRequest Protected method to create a request.

    Static Methods

    None

    PyrcAccessHandler.createRequest

    createRequest(op, request, outgoingData = None)

    Protected method to create a request.

    op
    the operation to be performed (QNetworkAccessManager.Operation)
    request
    reference to the request object (QNetworkRequest)
    outgoingData
    reference to an IODevice containing data to be sent (QIODevice)
    Returns:
    reference to the created reply object (QNetworkReply)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.Printer.html0000644000175000001440000000013212261331352026140 xustar000000000000000030 mtime=1388688106.353228985 30 atime=1389081084.874724365 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.Printer.html0000644000175000001440000000437312261331352025701 0ustar00detlevusers00000000000000 eric4.QScintilla.Printer

    eric4.QScintilla.Printer

    Module implementing the printer functionality.

    Global Attributes

    None

    Classes

    Printer Class implementing the QextScintillaPrinter with a header.

    Functions

    None


    Printer

    Class implementing the QextScintillaPrinter with a header.

    Derived from

    QsciPrinter

    Class Attributes

    None

    Class Methods

    None

    Methods

    Printer Constructor
    formatPage Private method to generate a header line.

    Static Methods

    None

    Printer (Constructor)

    Printer(mode = QPrinter.ScreenResolution)

    Constructor

    mode
    mode of the printer (QPrinter.PrinterMode)

    Printer.formatPage

    formatPage(painter, drawing, area, pagenr)

    Private method to generate a header line.

    painter
    the paint canvas (QPainter)
    drawing
    flag indicating that something should be drawn
    area
    the drawing area (QRect)
    pagenr
    the page number (int)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Graphics.SvgDiagram.html0000644000175000001440000000013212261331350026234 xustar000000000000000030 mtime=1388688104.879228245 30 atime=1389081084.874724365 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Graphics.SvgDiagram.html0000644000175000001440000001557112261331350025777 0ustar00detlevusers00000000000000 eric4.Graphics.SvgDiagram

    eric4.Graphics.SvgDiagram

    Module implementing a dialog showing a SVG graphic.

    Global Attributes

    None

    Classes

    SvgDiagram Class implementing a dialog showing a SVG graphic.

    Functions

    None


    SvgDiagram

    Class implementing a dialog showing a SVG graphic.

    Derived from

    KQMainWindow

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvgDiagram Constructor
    __adjustScrollBar Private method to adjust a scrollbar by a certain factor.
    __doZoom Private method to perform the zooming.
    __initActions Private method to initialize the view actions.
    __initContextMenu Private method to initialize the context menu.
    __initToolBars Private method to populate the toolbars with our actions.
    __print Private slot to the actual printing.
    __printDiagram Private slot called to print the diagram.
    __printPreviewDiagram Private slot called to show a print preview of the diagram.
    __showContextMenu Private slot to show the context menu of the listview.
    __zoom Private method to handle the zoom context menu action.
    __zoomIn Private method to handle the zoom in context menu entry.
    __zoomOut Private method to handle the zoom out context menu entry.
    __zoomReset Private method to handle the reset zoom context menu entry.
    getDiagramName Method to retrieve a name for the diagram.

    Static Methods

    None

    SvgDiagram (Constructor)

    SvgDiagram(svgFile, parent = None, name = None)

    Constructor

    svgFile
    filename of a SVG graphics file to show (QString or string)
    parent
    parent widget of the view (QWidget)
    name
    name of the view widget (QString or string)

    SvgDiagram.__adjustScrollBar

    __adjustScrollBar(scrollBar, factor)

    Private method to adjust a scrollbar by a certain factor.

    scrollBar
    reference to the scrollbar object (QScrollBar)
    factor
    factor to adjust by (float)

    SvgDiagram.__doZoom

    __doZoom(factor)

    Private method to perform the zooming.

    factor
    zoom factor (float)

    SvgDiagram.__initActions

    __initActions()

    Private method to initialize the view actions.

    SvgDiagram.__initContextMenu

    __initContextMenu()

    Private method to initialize the context menu.

    SvgDiagram.__initToolBars

    __initToolBars()

    Private method to populate the toolbars with our actions.

    SvgDiagram.__print

    __print(printer)

    Private slot to the actual printing.

    printer
    reference to the printer object (QPrinter)

    SvgDiagram.__printDiagram

    __printDiagram()

    Private slot called to print the diagram.

    SvgDiagram.__printPreviewDiagram

    __printPreviewDiagram()

    Private slot called to show a print preview of the diagram.

    SvgDiagram.__showContextMenu

    __showContextMenu(coord)

    Private slot to show the context menu of the listview.

    coord
    the position of the mouse pointer (QPoint)

    SvgDiagram.__zoom

    __zoom()

    Private method to handle the zoom context menu action.

    SvgDiagram.__zoomIn

    __zoomIn()

    Private method to handle the zoom in context menu entry.

    SvgDiagram.__zoomOut

    __zoomOut()

    Private method to handle the zoom out context menu entry.

    SvgDiagram.__zoomReset

    __zoomReset()

    Private method to handle the reset zoom context menu entry.

    SvgDiagram.getDiagramName

    getDiagramName()

    Method to retrieve a name for the diagram.

    Returns:
    name for the diagram

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.Lexers.LexerContainer.html0000644000175000001440000000013212261331354030702 xustar000000000000000030 mtime=1388688108.620230123 30 atime=1389081084.874724365 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.Lexers.LexerContainer.html0000644000175000001440000001070012261331354030432 0ustar00detlevusers00000000000000 eric4.QScintilla.Lexers.LexerContainer

    eric4.QScintilla.Lexers.LexerContainer

    Module implementing a base class for custom lexers.

    Global Attributes

    None

    Classes

    LexerContainer Subclass as a base for the implementation of custom lexers.

    Functions

    None


    LexerContainer

    Subclass as a base for the implementation of custom lexers.

    Derived from

    QsciLexer, Lexer

    Class Attributes

    None

    Class Methods

    None

    Methods

    LexerContainer Constructor
    description Public method returning the descriptions of the styles supported by the lexer.
    keywords Public method to get the list of keywords.
    language Public method returning the language of the lexer.
    lexer Public method returning the type of the lexer.
    styleBitsNeeded Public method to get the number of style bits needed by the lexer.
    styleText Public method to perform the styling.

    Static Methods

    None

    LexerContainer (Constructor)

    LexerContainer(parent = None)

    Constructor

    parent
    parent widget of this lexer

    LexerContainer.description

    description(style)

    Public method returning the descriptions of the styles supported by the lexer.

    Note: This methods needs to be overridden by the lexer class.

    style
    style number (integer)

    LexerContainer.keywords

    keywords(kwSet)

    Public method to get the list of keywords.

    kwSet
    number of keyword set (integer, one based)
    Returns:
    list of supported keywords (string) or None

    LexerContainer.language

    language()

    Public method returning the language of the lexer.

    Returns:
    language of the lexer (string)

    LexerContainer.lexer

    lexer()

    Public method returning the type of the lexer.

    Returns:
    type of the lexer (string)

    LexerContainer.styleBitsNeeded

    styleBitsNeeded()

    Public method to get the number of style bits needed by the lexer.

    Returns:
    number of style bits needed (integer)

    LexerContainer.styleText

    styleText(start, end)

    Public method to perform the styling.

    start
    position of first character to be styled (integer)
    end
    position of last character to be styled (integer)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.E4XML.XMLMessageDialog.html0000644000175000001440000000013212261331352026370 xustar000000000000000030 mtime=1388688106.547229082 30 atime=1389081084.875724365 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.E4XML.XMLMessageDialog.html0000644000175000001440000000463512261331352026132 0ustar00detlevusers00000000000000 eric4.E4XML.XMLMessageDialog

    eric4.E4XML.XMLMessageDialog

    Module implementing a dialog to display XML parse messages.

    Global Attributes

    None

    Classes

    XMLMessageDialog Class implementing a dialog to display XML parse messages.

    Functions

    None


    XMLMessageDialog

    Class implementing a dialog to display XML parse messages.

    Derived from

    QDialog, Ui_XMLMessageDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    XMLMessageDialog Constructor
    __appendText Private method to append text to the end of the messages pane.

    Static Methods

    None

    XMLMessageDialog (Constructor)

    XMLMessageDialog(msgs, parent = None)

    Constructor

    msgs
    list of tuples of (message type, system id, line no, column no, message)
    parent
    parent object of the dialog (QWidget)

    XMLMessageDialog.__appendText

    __appendText(txt, color)

    Private method to append text to the end of the messages pane.

    txt
    text to insert (QString)
    color
    text color to be used (QColor)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.UI.FindFileNameDialog.html0000644000175000001440000000013212261331350026366 xustar000000000000000030 mtime=1388688104.961228286 30 atime=1389081084.875724365 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.UI.FindFileNameDialog.html0000644000175000001440000002273112261331350026125 0ustar00detlevusers00000000000000 eric4.UI.FindFileNameDialog

    eric4.UI.FindFileNameDialog

    Module implementing a dialog to search for files.

    Global Attributes

    None

    Classes

    FindFileNameDialog Class implementing a dialog to search for files.

    Functions

    None


    FindFileNameDialog

    Class implementing a dialog to search for files.

    The occurrences found are displayed in a QTreeWidget showing the filename and the pathname. The file will be opened upon a double click onto the respective entry of the list.

    Signals

    designerFile(string)
    emitted to open a Qt-Designer file
    sourceFile(string)
    emitted to open a file in the editor

    Derived from

    QWidget, Ui_FindFileNameDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    FindFileNameDialog Constructor
    __openFile Private slot to open a file.
    __searchFile Private slot to handle the search.
    checkStop Public method to check, if the search should be stopped.
    on_buttonBox_clicked Private slot called by a button of the button box clicked.
    on_fileExtEdit_textChanged Private slot to handle the textChanged signal of the file extension edit.
    on_fileList_currentItemChanged Private slot handling a change of the current item.
    on_fileList_itemActivated Private slot to handle the double click on a file item.
    on_fileNameEdit_textChanged Private slot to handle the textChanged signal of the file name edit.
    on_projectCheckBox_toggled Private slot to handle the toggled signal of the project checkbox.
    on_searchDirButton_clicked Private slot to handle the clicked signal of the search directory selection button.
    on_searchDirCheckBox_toggled Private slot to handle the toggled signal of the search directory checkbox.
    on_searchDirEdit_textChanged Private slot to handle the textChanged signal of the search directory edit.
    on_syspathCheckBox_toggled Private slot to handle the toggled signal of the sys.path checkbox.
    show Overwritten method to enable/disable the project checkbox.

    Static Methods

    None

    FindFileNameDialog (Constructor)

    FindFileNameDialog(project, parent = None)

    Constructor

    project
    reference to the project object
    parent
    parent widget of this dialog (QWidget)

    FindFileNameDialog.__openFile

    __openFile(itm=None)

    Private slot to open a file.

    It emits the signal sourceFile or designerFile depending on the file extension.

    itm
    item to be opened (QTreeWidgetItem)

    FindFileNameDialog.__searchFile

    __searchFile()

    Private slot to handle the search.

    FindFileNameDialog.checkStop

    checkStop()

    Public method to check, if the search should be stopped.

    Returns:
    flag indicating the search should be stopped (boolean)

    FindFileNameDialog.on_buttonBox_clicked

    on_buttonBox_clicked(button)

    Private slot called by a button of the button box clicked.

    button
    button that was clicked (QAbstractButton)

    FindFileNameDialog.on_fileExtEdit_textChanged

    on_fileExtEdit_textChanged(text)

    Private slot to handle the textChanged signal of the file extension edit.

    text
    (ignored)

    FindFileNameDialog.on_fileList_currentItemChanged

    on_fileList_currentItemChanged(current, previous)

    Private slot handling a change of the current item.

    current
    current item (QTreeWidgetItem)
    previous
    prevoius current item (QTreeWidgetItem)

    FindFileNameDialog.on_fileList_itemActivated

    on_fileList_itemActivated(itm, column)

    Private slot to handle the double click on a file item.

    It emits the signal sourceFile or designerFile depending on the file extension.

    itm
    the double clicked listview item (QTreeWidgetItem)
    column
    column that was double clicked (integer) (ignored)

    FindFileNameDialog.on_fileNameEdit_textChanged

    on_fileNameEdit_textChanged(text)

    Private slot to handle the textChanged signal of the file name edit.

    text
    (ignored)

    FindFileNameDialog.on_projectCheckBox_toggled

    on_projectCheckBox_toggled(checked)

    Private slot to handle the toggled signal of the project checkbox.

    checked
    flag indicating the state of the checkbox (boolean)

    FindFileNameDialog.on_searchDirButton_clicked

    on_searchDirButton_clicked()

    Private slot to handle the clicked signal of the search directory selection button.

    FindFileNameDialog.on_searchDirCheckBox_toggled

    on_searchDirCheckBox_toggled(checked)

    Private slot to handle the toggled signal of the search directory checkbox.

    checked
    flag indicating the state of the checkbox (boolean)

    FindFileNameDialog.on_searchDirEdit_textChanged

    on_searchDirEdit_textChanged(text)

    Private slot to handle the textChanged signal of the search directory edit.

    text
    (ignored)

    FindFileNameDialog.on_syspathCheckBox_toggled

    on_syspathCheckBox_toggled(checked)

    Private slot to handle the toggled signal of the sys.path checkbox.

    checked
    flag indicating the state of the checkbox (boolean)

    FindFileNameDialog.show

    show()

    Overwritten method to enable/disable the project checkbox.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.PluginVmWorkspace.html0000644000175000001440000000013212261331350027511 xustar000000000000000030 mtime=1388688104.505228057 30 atime=1389081084.875724365 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.PluginVmWorkspace.html0000644000175000001440000000631212261331350027245 0ustar00detlevusers00000000000000 eric4.Plugins.PluginVmWorkspace

    eric4.Plugins.PluginVmWorkspace

    Module implementing the Tabview view manager plugin.

    Global Attributes

    author
    autoactivate
    className
    deactivateable
    displayString
    error
    longDescription
    name
    packageName
    pluginType
    pluginTypename
    shortDescription
    version

    Classes

    VmWorkspacePlugin Class implementing the Workspace view manager plugin.

    Functions

    previewPix Module function to return a preview pixmap.


    VmWorkspacePlugin

    Class implementing the Workspace view manager plugin.

    Derived from

    object

    Class Attributes

    None

    Class Methods

    None

    Methods

    VmWorkspacePlugin Constructor
    activate Public method to activate this plugin.
    deactivate Public method to deactivate this plugin.

    Static Methods

    None

    VmWorkspacePlugin (Constructor)

    VmWorkspacePlugin(ui)

    Constructor

    ui
    reference to the user interface object (UI.UserInterface)

    VmWorkspacePlugin.activate

    activate()

    Public method to activate this plugin.

    Returns:
    tuple of reference to instantiated viewmanager and activation status (boolean)

    VmWorkspacePlugin.deactivate

    deactivate()

    Public method to deactivate this plugin.



    previewPix

    previewPix()

    Module function to return a preview pixmap.

    Returns:
    preview pixmap (QPixmap)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.Plugins.CheckerPlugins.Tabnanny.h0000644000175000001440000000013212261331354031144 xustar000000000000000030 mtime=1388688108.659230143 30 atime=1389081084.875724365 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/index-eric4.Plugins.CheckerPlugins.Tabnanny.html0000644000175000001440000000176712261331354031426 0ustar00detlevusers00000000000000 eric4.Plugins.CheckerPlugins.Tabnanny

    eric4.Plugins.CheckerPlugins.Tabnanny

    Package containing the Tabnanny plugin.

    Modules

    Tabnanny The Tab Nanny despises ambiguous indentation.
    TabnannyDialog Module implementing a dialog to show the output of the tabnanny command process.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ConfigurationPages.NetworkP0000644000175000001440000000013212261331353031310 xustar000000000000000030 mtime=1388688107.590229606 30 atime=1389081084.875724365 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.NetworkPage.html0000644000175000001440000000534612261331353032472 0ustar00detlevusers00000000000000 eric4.Preferences.ConfigurationPages.NetworkPage

    eric4.Preferences.ConfigurationPages.NetworkPage

    Module implementing the Network configuration page.

    Global Attributes

    None

    Classes

    NetworkPage Class implementing the Network configuration page.

    Functions

    create Module function to create the configuration page.


    NetworkPage

    Class implementing the Network configuration page.

    Derived from

    ConfigurationPageBase, Ui_NetworkPage

    Class Attributes

    None

    Class Methods

    None

    Methods

    NetworkPage Constructor
    on_downloadDirButton_clicked Private slot to handle the directory selection via dialog.
    save Public slot to save the Application configuration.

    Static Methods

    None

    NetworkPage (Constructor)

    NetworkPage()

    Constructor

    NetworkPage.on_downloadDirButton_clicked

    on_downloadDirButton_clicked()

    Private slot to handle the directory selection via dialog.

    NetworkPage.save

    save()

    Public slot to save the Application configuration.



    create

    create(dlg)

    Module function to create the configuration page.

    dlg
    reference to the configuration dialog

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DebugClients.Python.DebugProtocol.html0000644000175000001440000000013212261331354031054 xustar000000000000000030 mtime=1388688108.185229905 30 atime=1389081084.879724365 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.DebugClients.Python.DebugProtocol.html0000644000175000001440000000550712261331354030615 0ustar00detlevusers00000000000000 eric4.DebugClients.Python.DebugProtocol

    eric4.DebugClients.Python.DebugProtocol

    Module defining the debug protocol tokens.

    Global Attributes

    DebugAddress
    EOT
    PassiveStartup
    RequestBanner
    RequestBreak
    RequestBreakEnable
    RequestBreakIgnore
    RequestCapabilities
    RequestCompletion
    RequestContinue
    RequestCoverage
    RequestEnv
    RequestEval
    RequestExec
    RequestForkMode
    RequestForkTo
    RequestLoad
    RequestOK
    RequestProfile
    RequestRun
    RequestSetFilter
    RequestShutdown
    RequestStep
    RequestStepOut
    RequestStepOver
    RequestStepQuit
    RequestThreadList
    RequestThreadSet
    RequestUTPrepare
    RequestUTRun
    RequestUTStop
    RequestVariable
    RequestVariables
    RequestWatch
    RequestWatchEnable
    RequestWatchIgnore
    ResponseBPConditionError
    ResponseBanner
    ResponseCapabilities
    ResponseClearBreak
    ResponseClearWatch
    ResponseCompletion
    ResponseContinue
    ResponseException
    ResponseExit
    ResponseForkTo
    ResponseLine
    ResponseOK
    ResponseRaw
    ResponseStack
    ResponseSyntax
    ResponseThreadList
    ResponseThreadSet
    ResponseUTFinished
    ResponseUTPrepared
    ResponseUTStartTest
    ResponseUTStopTest
    ResponseUTTestErrored
    ResponseUTTestFailed
    ResponseVariable
    ResponseVariables
    ResponseWPConditionError

    Classes

    None

    Functions

    None

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ConfigurationPages.EditorFi0000644000175000001440000000013212261331353031244 xustar000000000000000030 mtime=1388688107.534229578 30 atime=1389081084.879724365 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.EditorFilePage.html0000644000175000001440000001456612261331353033073 0ustar00detlevusers00000000000000 eric4.Preferences.ConfigurationPages.EditorFilePage

    eric4.Preferences.ConfigurationPages.EditorFilePage

    Module implementing the Editor General configuration page.

    Global Attributes

    None

    Classes

    EditorFilePage Class implementing the Editor File configuration page.

    Functions

    create Module function to create the configuration page.


    EditorFilePage

    Class implementing the Editor File configuration page.

    Derived from

    ConfigurationPageBase, Ui_EditorFilePage

    Class Attributes

    None

    Class Methods

    None

    Methods

    EditorFilePage Constructor
    __checkFileFilter Private method to check a file filter for validity.
    __extractFileFilters Private method to extract the file filters.
    __setDefaultFiltersLists Private slot to set the default file filter combo boxes.
    on_addFileFilterButton_clicked Private slot to add a file filter to the list.
    on_deleteFileFilterButton_clicked Private slot called to delete a file filter entry.
    on_editFileFilterButton_clicked Private slot called to edit a file filter entry.
    on_fileFiltersList_currentItemChanged Private slot to set the state of the edit and delete buttons.
    on_openFiltersButton_toggled Private slot to switch the list of file filters.
    save Public slot to save the Editor General configuration.

    Static Methods

    None

    EditorFilePage (Constructor)

    EditorFilePage()

    Constructor

    EditorFilePage.__checkFileFilter

    __checkFileFilter(filter)

    Private method to check a file filter for validity.

    filter
    file filter pattern to check (QString)
    Returns:
    flag indicating validity (boolean)

    EditorFilePage.__extractFileFilters

    __extractFileFilters()

    Private method to extract the file filters.

    EditorFilePage.__setDefaultFiltersLists

    __setDefaultFiltersLists(keepSelection = False)

    Private slot to set the default file filter combo boxes.

    keepSelection
    flag indicating to keep the current selection if possible (boolean)

    EditorFilePage.on_addFileFilterButton_clicked

    on_addFileFilterButton_clicked()

    Private slot to add a file filter to the list.

    EditorFilePage.on_deleteFileFilterButton_clicked

    on_deleteFileFilterButton_clicked()

    Private slot called to delete a file filter entry.

    EditorFilePage.on_editFileFilterButton_clicked

    on_editFileFilterButton_clicked()

    Private slot called to edit a file filter entry.

    EditorFilePage.on_fileFiltersList_currentItemChanged

    on_fileFiltersList_currentItemChanged(current, previous)

    Private slot to set the state of the edit and delete buttons.

    current
    new current item (QListWidgetItem)
    previous
    previous current item (QListWidgetItem)

    EditorFilePage.on_openFiltersButton_toggled

    on_openFiltersButton_toggled(checked)

    Private slot to switch the list of file filters.

    checked
    flag indicating the check state of the button (boolean)

    EditorFilePage.save

    save()

    Public slot to save the Editor General configuration.



    create

    create(dlg)

    Module function to create the configuration page.

    dlg
    reference to the configuration dialog

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ConfigurationPages.TasksPag0000644000175000001440000000013212261331353031254 xustar000000000000000030 mtime=1388688107.466229544 30 atime=1389081084.885724365 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.TasksPage.html0000644000175000001440000001001212261331353032110 0ustar00detlevusers00000000000000 eric4.Preferences.ConfigurationPages.TasksPage

    eric4.Preferences.ConfigurationPages.TasksPage

    Module implementing the Tasks configuration page.

    Global Attributes

    None

    Classes

    TasksPage Class implementing the Tasks configuration page.

    Functions

    create Module function to create the configuration page.


    TasksPage

    Class implementing the Tasks configuration page.

    Derived from

    ConfigurationPageBase, Ui_TasksPage

    Class Attributes

    None

    Class Methods

    None

    Methods

    TasksPage Constructor
    on_tasksBgColourButton_clicked Private slot to set the background colour for global tasks.
    on_tasksBugfixColourButton_clicked Private slot to set the colour for bugfix tasks.
    on_tasksColourButton_clicked Private slot to set the colour for standard tasks.
    on_tasksProjectBgColourButton_clicked Private slot to set the backgroundcolour for project tasks.
    save Public slot to save the Tasks configuration.

    Static Methods

    None

    TasksPage (Constructor)

    TasksPage()

    Constructor

    TasksPage.on_tasksBgColourButton_clicked

    on_tasksBgColourButton_clicked()

    Private slot to set the background colour for global tasks.

    TasksPage.on_tasksBugfixColourButton_clicked

    on_tasksBugfixColourButton_clicked()

    Private slot to set the colour for bugfix tasks.

    TasksPage.on_tasksColourButton_clicked

    on_tasksColourButton_clicked()

    Private slot to set the colour for standard tasks.

    TasksPage.on_tasksProjectBgColourButton_clicked

    on_tasksProjectBgColourButton_clicked()

    Private slot to set the backgroundcolour for project tasks.

    TasksPage.save

    save()

    Public slot to save the Tasks configuration.



    create

    create(dlg)

    Module function to create the configuration page.

    dlg
    reference to the configuration dialog

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsSubversion.Config0000644000175000001440000000032712261331353031312 xustar0000000000000000125 path=eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsSubversion.ConfigurationPage.SubversionPage.html 30 mtime=1388688107.273229447 30 atime=1389081084.885724365 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsSubversion.ConfigurationPage.Subv0000644000175000001440000000565112261331353034162 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsSubversion.ConfigurationPage.SubversionPage

    eric4.Plugins.VcsPlugins.vcsSubversion.ConfigurationPage.SubversionPage

    Module implementing the Subversion configuration page.

    Global Attributes

    None

    Classes

    SubversionPage Class implementing the Subversion configuration page.

    Functions

    None


    SubversionPage

    Class implementing the Subversion configuration page.

    Derived from

    ConfigurationPageBase, Ui_SubversionPage

    Class Attributes

    None

    Class Methods

    None

    Methods

    SubversionPage Constructor
    on_configButton_clicked Private slot to edit the Subversion config file.
    on_serversButton_clicked Private slot to edit the Subversion servers file.
    save Public slot to save the Subversion configuration.

    Static Methods

    None

    SubversionPage (Constructor)

    SubversionPage(plugin)

    Constructor

    plugin
    reference to the plugin object

    SubversionPage.on_configButton_clicked

    on_configButton_clicked()

    Private slot to edit the Subversion config file.

    SubversionPage.on_serversButton_clicked

    on_serversButton_clicked()

    Private slot to edit the Subversion servers file.

    SubversionPage.save

    save()

    Public slot to save the Subversion configuration.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.Plugins.html0000644000175000001440000000013212261331354025203 xustar000000000000000030 mtime=1388688108.658230142 30 atime=1389081084.886724365 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/index-eric4.Plugins.html0000644000175000001440000001017612261331354024742 0ustar00detlevusers00000000000000 eric4.Plugins

    eric4.Plugins

    Package containing all core plugins.

    Packages

    AboutPlugin Package containing the About plugin.
    CheckerPlugins Package containing the various core checker plugins.
    DocumentationPlugins Package containing the various core documentation tool plugins.
    VcsPlugins Package containing the various version control system plugins.
    ViewManagerPlugins Package containing the various view manager plugins.
    WizardPlugins Package containing the various core wizard plugins.

    Modules

    PluginAbout Module implementing the About plugin.
    PluginEricapi Module implementing the Ericapi plugin.
    PluginEricdoc Module implementing the Ericdoc plugin.
    PluginSyntaxChecker Module implementing the Tabnanny plugin.
    PluginTabnanny Module implementing the Tabnanny plugin.
    PluginVcsPySvn Module implementing the PySvn version control plugin.
    PluginVcsSubversion Module implementing the Subversion version control plugin.
    PluginVmListspace Module implementing the Tabview view manager plugin.
    PluginVmMdiArea Module implementing the mdi area view manager plugin.
    PluginVmTabview Module implementing the Tabview view manager plugin.
    PluginVmWorkspace Module implementing the Tabview view manager plugin.
    PluginWizardPyRegExp Module implementing the Python re wizard plugin.
    PluginWizardQColorDialog Module implementing the QColorDialog wizard plugin.
    PluginWizardQFileDialog Module implementing the QFileDialog wizard plugin.
    PluginWizardQFontDialog Module implementing the QFontDialog wizard plugin.
    PluginWizardQInputDialog Module implementing the QInputDialog wizard plugin.
    PluginWizardQMessageBox Module implementing the QMessageBox wizard plugin.
    PluginWizardQRegExp Module implementing the QRegExp wizard plugin.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.UI.UserInterface.html0000644000175000001440000000013212261331351025525 xustar000000000000000030 mtime=1388688105.087228349 30 atime=1389081084.886724365 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.UI.UserInterface.html0000644000175000001440000024143412261331351025267 0ustar00detlevusers00000000000000 eric4.UI.UserInterface

    eric4.UI.UserInterface

    Module implementing the main user interface.

    Global Attributes

    None

    Classes

    Redirector Helper class used to redirect stdout and stderr to the log window
    UserInterface Class implementing the main user interface.

    Functions

    None


    Redirector

    Helper class used to redirect stdout and stderr to the log window

    Signals

    appendStderr(string)
    emitted to write data to stderr logger
    appendStdout(string)
    emitted to write data to stdout logger

    Derived from

    QObject

    Class Attributes

    None

    Class Methods

    None

    Methods

    Redirector Constructor
    __bufferedWrite Private method returning number of characters to write.
    __nWrite Private method used to write data.
    flush Public method used to flush the buffered data.
    write Public method used to write data.

    Static Methods

    None

    Redirector (Constructor)

    Redirector(stderr)

    Constructor

    stderr
    flag indicating stderr is being redirected

    Redirector.__bufferedWrite

    __bufferedWrite()

    Private method returning number of characters to write.

    Returns:
    number of characters buffered or length of buffered line

    Redirector.__nWrite

    __nWrite(n)

    Private method used to write data.

    n
    max number of bytes to write

    Redirector.flush

    flush()

    Public method used to flush the buffered data.

    Redirector.write

    write(s)

    Public method used to write data.

    s
    data to be written (it must support the str-method)


    UserInterface

    Class implementing the main user interface.

    Signals

    appendStderr(QString)
    emitted to write data to stderr logger
    appendStdout(QString)
    emitted to write data to stdout logger
    preferencesChanged()
    emitted after the preferences were changed
    reloadAPIs()
    emitted to reload the api information
    showMenu(string, QMenu)
    emitted when a menu is about to be shown. The name of the menu and a reference to the menu are given.

    Derived from

    KQMainWindow

    Class Attributes

    maxFilePathLen
    maxMenuFilePathLen
    maxSbFilePathLen

    Class Methods

    None

    Methods

    UserInterface Constructor
    __TBMenuTriggered Private method to handle the toggle of a toolbar.
    __TRPreviewer Private slot to start the Translation Previewer executable.
    __UIPreviewer Private slot to start the UI Previewer executable.
    __activateBrowser Private slot to handle the activation of the file browser.
    __activateDebugViewer Private slot to handle the activation of the debug browser.
    __activateLogViewer Private slot to handle the activation of the Log Viewer.
    __activateMultiProjectBrowser Private slot to handle the activation of the project browser.
    __activateProjectBrowser Private slot to handle the activation of the project browser.
    __activateShell Private slot to handle the activation of the Shell window.
    __activateTaskViewer Private slot to handle the activation of the Task Viewer.
    __activateTemplateViewer Private slot to handle the activation of the Template Viewer.
    __activateViewProfile Private slot to activate a view profile.
    __activateViewmanager Private slot to handle the activation of the current editor.
    __assistant Private slot to start the Qt-Assistant executable.
    __assistant4 Private slot to start the Qt-Assistant 4 executable.
    __checkActions Private slot to check some actions for their enable/disable status.
    __chmViewer Private slot to start the win help viewer to show *.chm files.
    __compareFiles Private slot to handle the Compare Files dialog.
    __compareFilesSbs Private slot to handle the Compare Files dialog.
    __configShortcuts Private slot to configure the keyboard shortcuts.
    __configToolBars Private slot to configure the various toolbars.
    __configViewProfiles Private slot to configure the various view profiles.
    __configureDockareaCornerUsage Private method to configure the usage of the dockarea corners.
    __createDockWindow Private method to create a dock window with common properties.
    __createDockWindowsLayout Private method to create the DockWindows layout.
    __createFloatingWindowsLayout Private method to create the FloatingWindows layout.
    __createLayout Private method to create the layout of the various windows.
    __createSidebarsLayout Private method to create the Sidebars layout.
    __createToolboxesLayout Private method to create the Toolboxes layout.
    __customViewer Private slot to start a custom viewer.
    __debuggingStarted Private slot to handle the start of a debugging session.
    __deinstallPlugin Private slot to show a dialog to uninstall a plugin.
    __designer Private slot to start the Qt-Designer executable.
    __designer4 Private slot to start the Qt-Designer 4 executable.
    __editPixmap Private slot to show a pixmap in a dialog.
    __editorOpened Private slot to handle the editorOpened signal.
    __exportPreferences Private slot to export the current preferences.
    __exportShortcuts Private slot to export the keyboard shortcuts.
    __getFloatingGeometry Private method to get the geometry of a floating windows.
    __helpClosed Private slot to handle the helpClosed signal of the help window.
    __helpViewer Private slot to start an empty help viewer.
    __importPreferences Private slot to import preferences.
    __importShortcuts Private slot to import the keyboard shortcuts.
    __initActions Private method to define the user interface actions.
    __initDebugToolbarsLayout Private slot to initialize the toolbars layout for the debug profile.
    __initEricDocAction Private slot to initialize the action to show the eric4 documentation.
    __initExternalToolsActions Private slot to create actions for the configured external tools.
    __initKdeDocActions Private slot to initilize the action to show the KDE4 documentation.
    __initMenus Private slot to create the menus.
    __initPySideDocActions Private slot to initilize the action to show the PySide documentation.
    __initPythonDocAction Private slot to initilize the action to show the Python documentation.
    __initQtDocActions Private slot to initilize the action to show the Qt documentation.
    __initStatusbar Private slot to set up the status bar.
    __initToolbars Private slot to create the toolbars.
    __installPlugins Private slot to show a dialog to install a new plugin.
    __lastEditorClosed Private slot to handle the lastEditorClosed signal.
    __linguist Private slot to start the Qt-Linguist executable.
    __linguist4 Private slot to start the Qt-Linguist 4 executable.
    __newProject Private slot to handle the NewProject signal.
    __newWindow Private slot to start a new instance of eric4.
    __openMiniEditor Private slot to show a mini editor window.
    __openOnStartup Private method to open the last file, project or multiproject.
    __pluginsConfigure Private slot to show the plugin manager configuration page.
    __preferencesChanged Private slot to handle a change of the preferences.
    __processToolStderr Private slot to handle the readyReadStderr signal of a tool process.
    __processToolStdout Private slot to handle the readyReadStdout signal of a tool process.
    __programChange Private slot to handle the programChange signal.
    __projectClosed Private slot to handle the projectClosed signal.
    __projectOpened Private slot to handle the projectOpened signal.
    __proxyAuthenticationRequired Private slot to handle a proxy authentication request.
    __quit Private method to quit the application.
    __readSession Private slot to read in the session file (.e4s)
    __readTasks Private slot to read in the tasks file (.e4t)
    __reloadAPIs Private slot to reload the api information.
    __reportBug Private slot to handle the Report Bug dialog.
    __requestFeature Private slot to handle the Feature Request dialog.
    __restart Private method to restart the application.
    __saveCurrentViewProfile Private slot to save the window geometries of the active profile.
    __setEditProfile Private slot to activate the edit view profile.
    __setStyle Private slot to set the style of the interface.
    __setWindowCaption Private method to set the caption of the Main Window.
    __setupDockWindow Private method to configure the dock window created with __createDockWindow().
    __showAvailableVersionInfos Private method to show the versions available for download.
    __showEricDoc Private slot to show the Eric documentation.
    __showExternalTools Private slot to display a dialog show a list of external tools used by eric4.
    __showExtrasMenu Private slot to display the Extras menu.
    __showFileMenu Private slot to display the File menu.
    __showHelpMenu Private slot to display the Help menu.
    __showNext Private slot used to show the next tab or file.
    __showPixmap Private slot to show a pixmap in a dialog.
    __showPluginInfo Private slot to show the plugin info dialog.
    __showPluginsAvailable Private slot to show the plugins available for download.
    __showPrevious Private slot used to show the previous tab or file.
    __showPyKDE4Doc Private slot to show the PyKDE4 documentation.
    __showPyQt4Doc Private slot to show the PyQt4 documentation.
    __showPySideDoc Private slot to show the PySide documentation.
    __showPythonDoc Private slot to show the Python documentation.
    __showQt4Doc Private slot to show the Qt4 documentation.
    __showSvg Private slot to show a SVG file in a dialog.
    __showSystemEmailClient Private slot to show the system email dialog.
    __showToolGroupsMenu Private slot to display the Tool Groups menu.
    __showToolbarsMenu Private slot to display the Toolbars menu.
    __showToolsMenu Private slot to display the Tools menu.
    __showVersions Private slot to handle the Versions dialog.
    __showWindowMenu Private slot to display the Window menu.
    __showWizardsMenu Private slot to display the Wizards menu.
    __shutdown Private method to perform all necessary steps to close down the IDE.
    __sqlBrowser Private slot to start the SQL browser tool.
    __sslErrors Private slot to handle SSL errors.
    __startToolProcess Private slot to start an external tool process.
    __startWebBrowser Private slot to start the eric4 web browser.
    __switchTab Private slot used to switch between the current and the previous current tab.
    __toggleBottomSidebar Private slot to handle the toggle of the bottom sidebar window.
    __toggleBrowser Private slot to handle the toggle of the File Browser window.
    __toggleDebugViewer Private slot to handle the toggle of the debug viewer.
    __toggleHorizontalToolbox Private slot to handle the toggle of the Horizontal Toolbox window.
    __toggleLeftSidebar Private slot to handle the toggle of the left sidebar window.
    __toggleLogViewer Private slot to handle the toggle of the Log Viewer window.
    __toggleMultiProjectBrowser Private slot to handle the toggle of the Project Browser window.
    __toggleProjectBrowser Private slot to handle the toggle of the Project Browser window.
    __toggleShell Private slot to handle the toggle of the Shell window .
    __toggleTaskViewer Private slot to handle the toggle of the Task Viewer window.
    __toggleTemplateViewer Private slot to handle the toggle of the Template Viewer window.
    __toggleVerticalToolbox Private slot to handle the toggle of the Vertical Toolbox window.
    __toggleWindow Private method to toggle a workspace editor window.
    __toolActionTriggered Private slot called by external tools toolbar actions.
    __toolExecute Private slot to execute a particular tool.
    __toolFinished Private slot to handle the finished signal of a tool process.
    __toolGroupSelected Private slot to set the current tool group.
    __toolGroupsConfiguration Private slot to handle the tool groups configuration menu entry.
    __toolsConfiguration Private slot to handle the tools configuration menu entry.
    __unittest Private slot for displaying the unittest dialog.
    __unittestProject Private slot for displaying the unittest dialog and run the current project.
    __unittestRestart Private slot to display the unittest dialog and rerun the last test.
    __unittestScript Private slot for displaying the unittest dialog and run the current script.
    __updateExternalToolsActions Private method to update the external tools actions for the current tool group.
    __updateVersionsUrls Private method to update the URLs from which to retrieve the versions file.
    __versionCheckResult Private method to show the result of the version check action.
    __versionsDownloadCanceled Private method called to cancel the version check.
    __versionsDownloadDone Private method called, after the versions file has been downloaded from the internet.
    __webBrowser Private slot to start a web browser executable.
    __whatsThis Private slot called in to enter Whats This mode.
    __writeSession Private slot to write the session data to an XML file (.e4s).
    __writeTasks Private slot to write the tasks data to an XML file (.e4t).
    addE4Actions Public method to add actions to the list of actions.
    appendToStderr Public slot to append text to the stderr log viewer tab.
    appendToStdout Public slot to append text to the stdout log viewer tab.
    checkConfigurationStatus Public method to check, if eric4 has been configured.
    checkForErrorLog Public method to check for the presence of an error log and ask the user, what to do with it.
    checkProjectsWorkspace Public method to check, if a projects workspace has been configured.
    closeEvent Private event handler for the close event.
    dragEnterEvent Protected method to handle the drag enter event.
    dragLeaveEvent Protected method to handle the drag leave event.
    dragMoveEvent Protected method to handle the drag move event.
    dropEvent Protected method to handle the drop event.
    getActions Public method to get a list of all actions.
    getLocale Public method to get the locale of the IDE.
    getMenu Public method to get a reference to a specific menu.
    getMenuAction Public method to get a reference to an action of a menu.
    getMenuBarAction Public method to get a reference to an action of the main menu.
    getToolBarIconSize Public method to get the toolbar icon size.
    getToolbar Public method to get a reference to a specific toolbar.
    getViewProfile Public method to get the current view profile.
    launchHelpViewer Public slot to start the help viewer.
    performVersionCheck Public method to check the internet for an eric4 update.
    processArgs Public method to process the command line args passed to the UI.
    registerToolbar Public method to register a toolbar.
    removeE4Actions Public method to remove actions from the list of actions.
    reregisterToolbar Public method to change the visible text for the named toolbar.
    setDebugProfile Public slot to activate the debug view profile.
    showAvailableVersionsInfo Public method to show the eric4 versions available for download.
    showEmailDialog Private slot to show the email dialog in a given mode.
    showEvent Protected method to handle the show event.
    showLogTab Public method to show a particular Log-Viewer tab.
    showPreferences Public slot to set the preferences.
    unregisterToolbar Public method to unregister a toolbar.
    versionIsNewer Public method to check, if the eric4 version is good compared to the required version.

    Static Methods

    None

    UserInterface (Constructor)

    UserInterface(app, locale, splash, plugin, noOpenAtStartup, restartArguments)

    Constructor

    app
    reference to the application object (KQApplication)
    locale
    locale to be used by the UI (string)
    splash
    reference to the splashscreen (UI.SplashScreen.SplashScreen)
    plugin
    filename of a plugin to be loaded (used for plugin development)
    noOpenAtStartup
    flag indicating that the open at startup option should not be executed (boolean)
    restartArguments
    list of command line parameters to be used for a restart (list of strings)

    UserInterface.__TBMenuTriggered

    __TBMenuTriggered(act)

    Private method to handle the toggle of a toolbar.

    act
    reference to the action that was triggered (QAction)

    UserInterface.__TRPreviewer

    __TRPreviewer(fileNames = None, ignore = False)

    Private slot to start the Translation Previewer executable.

    fileNames
    filenames of forms and/or translations to be previewed
    ignore
    flag indicating non existing files should be ignored (boolean)

    UserInterface.__UIPreviewer

    __UIPreviewer(fn=None)

    Private slot to start the UI Previewer executable.

    fn
    filename of the form to be previewed

    UserInterface.__activateBrowser

    __activateBrowser()

    Private slot to handle the activation of the file browser.

    UserInterface.__activateDebugViewer

    __activateDebugViewer()

    Private slot to handle the activation of the debug browser.

    UserInterface.__activateLogViewer

    __activateLogViewer()

    Private slot to handle the activation of the Log Viewer.

    UserInterface.__activateMultiProjectBrowser

    __activateMultiProjectBrowser()

    Private slot to handle the activation of the project browser.

    UserInterface.__activateProjectBrowser

    __activateProjectBrowser()

    Private slot to handle the activation of the project browser.

    UserInterface.__activateShell

    __activateShell()

    Private slot to handle the activation of the Shell window.

    UserInterface.__activateTaskViewer

    __activateTaskViewer()

    Private slot to handle the activation of the Task Viewer.

    UserInterface.__activateTemplateViewer

    __activateTemplateViewer()

    Private slot to handle the activation of the Template Viewer.

    UserInterface.__activateViewProfile

    __activateViewProfile(name, save = True)

    Private slot to activate a view profile.

    name
    name of the profile to be activated (string)
    save
    flag indicating that the current profile should be saved (boolean)

    UserInterface.__activateViewmanager

    __activateViewmanager()

    Private slot to handle the activation of the current editor.

    UserInterface.__assistant

    __assistant(home = None, version = 0)

    Private slot to start the Qt-Assistant executable.

    home
    full pathname of a file to display (string or QString)
    version
    indication for the requested version (Qt 4) (integer)

    UserInterface.__assistant4

    __assistant4()

    Private slot to start the Qt-Assistant 4 executable.

    UserInterface.__checkActions

    __checkActions(editor)

    Private slot to check some actions for their enable/disable status.

    editor
    editor window

    UserInterface.__chmViewer

    __chmViewer(home=None)

    Private slot to start the win help viewer to show *.chm files.

    home
    full pathname of a file to display (string or QString)

    UserInterface.__compareFiles

    __compareFiles()

    Private slot to handle the Compare Files dialog.

    UserInterface.__compareFilesSbs

    __compareFilesSbs()

    Private slot to handle the Compare Files dialog.

    UserInterface.__configShortcuts

    __configShortcuts()

    Private slot to configure the keyboard shortcuts.

    UserInterface.__configToolBars

    __configToolBars()

    Private slot to configure the various toolbars.

    UserInterface.__configViewProfiles

    __configViewProfiles()

    Private slot to configure the various view profiles.

    UserInterface.__configureDockareaCornerUsage

    __configureDockareaCornerUsage()

    Private method to configure the usage of the dockarea corners.

    UserInterface.__createDockWindow

    __createDockWindow(name)

    Private method to create a dock window with common properties.

    name
    object name of the new dock window (string or QString)
    Returns:
    the generated dock window (QDockWindow)

    UserInterface.__createDockWindowsLayout

    __createDockWindowsLayout(debugServer)

    Private method to create the DockWindows layout.

    debugServer
    reference to the debug server object

    UserInterface.__createFloatingWindowsLayout

    __createFloatingWindowsLayout(debugServer)

    Private method to create the FloatingWindows layout.

    debugServer
    reference to the debug server object

    UserInterface.__createLayout

    __createLayout(debugServer)

    Private method to create the layout of the various windows.

    debugServer
    reference to the debug server object

    UserInterface.__createSidebarsLayout

    __createSidebarsLayout(debugServer)

    Private method to create the Sidebars layout.

    debugServer
    reference to the debug server object

    UserInterface.__createToolboxesLayout

    __createToolboxesLayout(debugServer)

    Private method to create the Toolboxes layout.

    debugServer
    reference to the debug server object

    UserInterface.__customViewer

    __customViewer(home = None)

    Private slot to start a custom viewer.

    home
    full pathname of a file to display (string or QString)

    UserInterface.__debuggingStarted

    __debuggingStarted()

    Private slot to handle the start of a debugging session.

    UserInterface.__deinstallPlugin

    __deinstallPlugin()

    Private slot to show a dialog to uninstall a plugin.

    UserInterface.__designer

    __designer(fn = None, version = 0)

    Private slot to start the Qt-Designer executable.

    fn
    filename of the form to be opened
    version
    indication for the requested version (Qt 4) (integer)

    UserInterface.__designer4

    __designer4()

    Private slot to start the Qt-Designer 4 executable.

    UserInterface.__editPixmap

    __editPixmap(fn = "")

    Private slot to show a pixmap in a dialog.

    fn
    filename of the file to show (string or QString)

    UserInterface.__editorOpened

    __editorOpened(fn)

    Private slot to handle the editorOpened signal.

    fn
    filename of the opened editor (QString)

    UserInterface.__exportPreferences

    __exportPreferences()

    Private slot to export the current preferences.

    UserInterface.__exportShortcuts

    __exportShortcuts()

    Private slot to export the keyboard shortcuts.

    UserInterface.__getFloatingGeometry

    __getFloatingGeometry(w)

    Private method to get the geometry of a floating windows.

    w
    reference to the widget to be saved (QWidget)
    Returns:
    list giving the widget's geometry and its visibility

    UserInterface.__helpClosed

    __helpClosed()

    Private slot to handle the helpClosed signal of the help window.

    UserInterface.__helpViewer

    __helpViewer()

    Private slot to start an empty help viewer.

    UserInterface.__importPreferences

    __importPreferences()

    Private slot to import preferences.

    UserInterface.__importShortcuts

    __importShortcuts()

    Private slot to import the keyboard shortcuts.

    UserInterface.__initActions

    __initActions()

    Private method to define the user interface actions.

    UserInterface.__initDebugToolbarsLayout

    __initDebugToolbarsLayout()

    Private slot to initialize the toolbars layout for the debug profile.

    UserInterface.__initEricDocAction

    __initEricDocAction()

    Private slot to initialize the action to show the eric4 documentation.

    UserInterface.__initExternalToolsActions

    __initExternalToolsActions()

    Private slot to create actions for the configured external tools.

    UserInterface.__initKdeDocActions

    __initKdeDocActions()

    Private slot to initilize the action to show the KDE4 documentation.

    UserInterface.__initMenus

    __initMenus()

    Private slot to create the menus.

    UserInterface.__initPySideDocActions

    __initPySideDocActions()

    Private slot to initilize the action to show the PySide documentation.

    UserInterface.__initPythonDocAction

    __initPythonDocAction()

    Private slot to initilize the action to show the Python documentation.

    UserInterface.__initQtDocActions

    __initQtDocActions()

    Private slot to initilize the action to show the Qt documentation.

    UserInterface.__initStatusbar

    __initStatusbar()

    Private slot to set up the status bar.

    UserInterface.__initToolbars

    __initToolbars()

    Private slot to create the toolbars.

    UserInterface.__installPlugins

    __installPlugins(pluginFileNames = QStringList())

    Private slot to show a dialog to install a new plugin.

    pluginFileNames
    list of plugin files suggested for installation (QStringList)

    UserInterface.__lastEditorClosed

    __lastEditorClosed()

    Private slot to handle the lastEditorClosed signal.

    UserInterface.__linguist

    __linguist(fn = None, version = 0)

    Private slot to start the Qt-Linguist executable.

    fn
    filename of the translation file to be opened
    version
    indication for the requested version (Qt 4) (integer)

    UserInterface.__linguist4

    __linguist4(fn = None)

    Private slot to start the Qt-Linguist 4 executable.

    fn
    filename of the translation file to be opened

    UserInterface.__newProject

    __newProject()

    Private slot to handle the NewProject signal.

    UserInterface.__newWindow

    __newWindow()

    Private slot to start a new instance of eric4.

    UserInterface.__openMiniEditor

    __openMiniEditor()

    Private slot to show a mini editor window.

    UserInterface.__openOnStartup

    __openOnStartup(startupType = None)

    Private method to open the last file, project or multiproject.

    startupType
    type of startup requested (string, one of "Nothing", "File", "Project", "MultiProject" or "Session")

    UserInterface.__pluginsConfigure

    __pluginsConfigure()

    Private slot to show the plugin manager configuration page.

    UserInterface.__preferencesChanged

    __preferencesChanged()

    Private slot to handle a change of the preferences.

    UserInterface.__processToolStderr

    __processToolStderr()

    Private slot to handle the readyReadStderr signal of a tool process.

    UserInterface.__processToolStdout

    __processToolStdout()

    Private slot to handle the readyReadStdout signal of a tool process.

    UserInterface.__programChange

    __programChange(fn)

    Private slot to handle the programChange signal.

    This primarily is here to set the currentProg variable.

    fn
    filename to be set as current prog (QString)

    UserInterface.__projectClosed

    __projectClosed()

    Private slot to handle the projectClosed signal.

    UserInterface.__projectOpened

    __projectOpened()

    Private slot to handle the projectOpened signal.

    UserInterface.__proxyAuthenticationRequired

    __proxyAuthenticationRequired(proxy, auth)

    Private slot to handle a proxy authentication request.

    proxy
    reference to the proxy object (QNetworkProxy)
    auth
    reference to the authenticator object (QAuthenticator)

    UserInterface.__quit

    __quit()

    Private method to quit the application.

    UserInterface.__readSession

    __readSession()

    Private slot to read in the session file (.e4s)

    UserInterface.__readTasks

    __readTasks()

    Private slot to read in the tasks file (.e4t)

    UserInterface.__reloadAPIs

    __reloadAPIs()

    Private slot to reload the api information.

    UserInterface.__reportBug

    __reportBug()

    Private slot to handle the Report Bug dialog.

    UserInterface.__requestFeature

    __requestFeature()

    Private slot to handle the Feature Request dialog.

    UserInterface.__restart

    __restart()

    Private method to restart the application.

    UserInterface.__saveCurrentViewProfile

    __saveCurrentViewProfile(save)

    Private slot to save the window geometries of the active profile.

    save
    flag indicating that the current profile should be saved (boolean)

    UserInterface.__setEditProfile

    __setEditProfile(save = True)

    Private slot to activate the edit view profile.

    save
    flag indicating that the current profile should be saved (boolean)

    UserInterface.__setStyle

    __setStyle()

    Private slot to set the style of the interface.

    UserInterface.__setWindowCaption

    __setWindowCaption(editor = None, project = None)

    Private method to set the caption of the Main Window.

    editor
    filename to be displayed (string or QString)
    project
    project name to be displayed (string or QString)

    UserInterface.__setupDockWindow

    __setupDockWindow(dock, where, widget, caption)

    Private method to configure the dock window created with __createDockWindow().

    dock
    the dock window (QDockWindow)
    where
    dock area to be docked to (Qt.DockWidgetArea)
    widget
    widget to be shown in the dock window (QWidget)
    caption
    caption of the dock window (string or QString)

    UserInterface.__showAvailableVersionInfos

    __showAvailableVersionInfos(versions)

    Private method to show the versions available for download.

    versions
    contents of the downloaded versions file (list of strings)

    UserInterface.__showEricDoc

    __showEricDoc()

    Private slot to show the Eric documentation.

    UserInterface.__showExternalTools

    __showExternalTools()

    Private slot to display a dialog show a list of external tools used by eric4.

    UserInterface.__showExtrasMenu

    __showExtrasMenu()

    Private slot to display the Extras menu.

    UserInterface.__showFileMenu

    __showFileMenu()

    Private slot to display the File menu.

    UserInterface.__showHelpMenu

    __showHelpMenu()

    Private slot to display the Help menu.

    UserInterface.__showNext

    __showNext()

    Private slot used to show the next tab or file.

    UserInterface.__showPixmap

    __showPixmap(fn)

    Private slot to show a pixmap in a dialog.

    fn
    filename of the file to show (string or QString)

    UserInterface.__showPluginInfo

    __showPluginInfo()

    Private slot to show the plugin info dialog.

    UserInterface.__showPluginsAvailable

    __showPluginsAvailable()

    Private slot to show the plugins available for download.

    UserInterface.__showPrevious

    __showPrevious()

    Private slot used to show the previous tab or file.

    UserInterface.__showPyKDE4Doc

    __showPyKDE4Doc()

    Private slot to show the PyKDE4 documentation.

    UserInterface.__showPyQt4Doc

    __showPyQt4Doc()

    Private slot to show the PyQt4 documentation.

    UserInterface.__showPySideDoc

    __showPySideDoc()

    Private slot to show the PySide documentation.

    UserInterface.__showPythonDoc

    __showPythonDoc()

    Private slot to show the Python documentation.

    UserInterface.__showQt4Doc

    __showQt4Doc()

    Private slot to show the Qt4 documentation.

    UserInterface.__showSvg

    __showSvg(fn)

    Private slot to show a SVG file in a dialog.

    fn
    filename of the file to show (string or QString)

    UserInterface.__showSystemEmailClient

    __showSystemEmailClient(mode, attachFile = None, deleteAttachFile = False)

    Private slot to show the system email dialog.

    mode
    mode of the email dialog (string, "bug" or "feature")
    attachFile
    name of a file to put into the body of the email (string or QString)
    deleteAttachFile
    flag indicating to delete the file after it has been read (boolean)

    UserInterface.__showToolGroupsMenu

    __showToolGroupsMenu()

    Private slot to display the Tool Groups menu.

    UserInterface.__showToolbarsMenu

    __showToolbarsMenu()

    Private slot to display the Toolbars menu.

    UserInterface.__showToolsMenu

    __showToolsMenu()

    Private slot to display the Tools menu.

    UserInterface.__showVersions

    __showVersions()

    Private slot to handle the Versions dialog.

    UserInterface.__showWindowMenu

    __showWindowMenu()

    Private slot to display the Window menu.

    UserInterface.__showWizardsMenu

    __showWizardsMenu()

    Private slot to display the Wizards menu.

    UserInterface.__shutdown

    __shutdown()

    Private method to perform all necessary steps to close down the IDE.

    Returns:
    flag indicating success

    UserInterface.__sqlBrowser

    __sqlBrowser()

    Private slot to start the SQL browser tool.

    UserInterface.__sslErrors

    __sslErrors(reply, errors)

    Private slot to handle SSL errors.

    reply
    reference to the reply object (QNetworkReply)
    errors
    list of SSL errors (list of QSslError)

    UserInterface.__startToolProcess

    __startToolProcess(tool)

    Private slot to start an external tool process.

    tool
    list of tool entries

    UserInterface.__startWebBrowser

    __startWebBrowser()

    Private slot to start the eric4 web browser.

    UserInterface.__switchTab

    __switchTab()

    Private slot used to switch between the current and the previous current tab.

    UserInterface.__toggleBottomSidebar

    __toggleBottomSidebar()

    Private slot to handle the toggle of the bottom sidebar window.

    UserInterface.__toggleBrowser

    __toggleBrowser()

    Private slot to handle the toggle of the File Browser window.

    UserInterface.__toggleDebugViewer

    __toggleDebugViewer()

    Private slot to handle the toggle of the debug viewer.

    UserInterface.__toggleHorizontalToolbox

    __toggleHorizontalToolbox()

    Private slot to handle the toggle of the Horizontal Toolbox window.

    UserInterface.__toggleLeftSidebar

    __toggleLeftSidebar()

    Private slot to handle the toggle of the left sidebar window.

    UserInterface.__toggleLogViewer

    __toggleLogViewer()

    Private slot to handle the toggle of the Log Viewer window.

    UserInterface.__toggleMultiProjectBrowser

    __toggleMultiProjectBrowser()

    Private slot to handle the toggle of the Project Browser window.

    UserInterface.__toggleProjectBrowser

    __toggleProjectBrowser()

    Private slot to handle the toggle of the Project Browser window.

    UserInterface.__toggleShell

    __toggleShell()

    Private slot to handle the toggle of the Shell window .

    UserInterface.__toggleTaskViewer

    __toggleTaskViewer()

    Private slot to handle the toggle of the Task Viewer window.

    UserInterface.__toggleTemplateViewer

    __toggleTemplateViewer()

    Private slot to handle the toggle of the Template Viewer window.

    UserInterface.__toggleVerticalToolbox

    __toggleVerticalToolbox()

    Private slot to handle the toggle of the Vertical Toolbox window.

    UserInterface.__toggleWindow

    __toggleWindow(w)

    Private method to toggle a workspace editor window.

    w
    reference to the workspace editor window
    Returns:
    flag indicating, if the window was shown (boolean)

    UserInterface.__toolActionTriggered

    __toolActionTriggered()

    Private slot called by external tools toolbar actions.

    UserInterface.__toolExecute

    __toolExecute(act)

    Private slot to execute a particular tool.

    act
    reference to the action that was triggered (QAction)

    UserInterface.__toolFinished

    __toolFinished(exitCode, exitStatus)

    Private slot to handle the finished signal of a tool process.

    exitCode
    exit code of the process (integer)
    exitStatus
    exit status of the process (QProcess.ExitStatus)

    UserInterface.__toolGroupSelected

    __toolGroupSelected(act)

    Private slot to set the current tool group.

    act
    reference to the action that was triggered (QAction)

    UserInterface.__toolGroupsConfiguration

    __toolGroupsConfiguration()

    Private slot to handle the tool groups configuration menu entry.

    UserInterface.__toolsConfiguration

    __toolsConfiguration()

    Private slot to handle the tools configuration menu entry.

    UserInterface.__unittest

    __unittest()

    Private slot for displaying the unittest dialog.

    UserInterface.__unittestProject

    __unittestProject()

    Private slot for displaying the unittest dialog and run the current project.

    UserInterface.__unittestRestart

    __unittestRestart()

    Private slot to display the unittest dialog and rerun the last test.

    UserInterface.__unittestScript

    __unittestScript(prog = None)

    Private slot for displaying the unittest dialog and run the current script.

    prog
    the python program to be opened

    UserInterface.__updateExternalToolsActions

    __updateExternalToolsActions()

    Private method to update the external tools actions for the current tool group.

    UserInterface.__updateVersionsUrls

    __updateVersionsUrls(versions)

    Private method to update the URLs from which to retrieve the versions file.

    versions
    contents of the downloaded versions file (list of strings)

    UserInterface.__versionCheckResult

    __versionCheckResult(versions)

    Private method to show the result of the version check action.

    versions
    contents of the downloaded versions file (list of strings)

    UserInterface.__versionsDownloadCanceled

    __versionsDownloadCanceled()

    Private method called to cancel the version check.

    UserInterface.__versionsDownloadDone

    __versionsDownloadDone()

    Private method called, after the versions file has been downloaded from the internet.

    UserInterface.__webBrowser

    __webBrowser(home = None)

    Private slot to start a web browser executable.

    home
    full pathname of a file to display (string or QString)

    UserInterface.__whatsThis

    __whatsThis()

    Private slot called in to enter Whats This mode.

    UserInterface.__writeSession

    __writeSession()

    Private slot to write the session data to an XML file (.e4s).

    UserInterface.__writeTasks

    __writeTasks()

    Private slot to write the tasks data to an XML file (.e4t).

    UserInterface.addE4Actions

    addE4Actions(actions, type)

    Public method to add actions to the list of actions.

    type
    string denoting the action set to get. It must be one of "ui" or "wizards".
    actions
    list of actions to be added (list of E4Action)

    UserInterface.appendToStderr

    appendToStderr(s)

    Public slot to append text to the stderr log viewer tab.

    s
    output to be appended (string or QString)

    UserInterface.appendToStdout

    appendToStdout(s)

    Public slot to append text to the stdout log viewer tab.

    s
    output to be appended (string or QString)

    UserInterface.checkConfigurationStatus

    checkConfigurationStatus()

    Public method to check, if eric4 has been configured. If it is not, the configuration dialog is shown.

    UserInterface.checkForErrorLog

    checkForErrorLog()

    Public method to check for the presence of an error log and ask the user, what to do with it.

    UserInterface.checkProjectsWorkspace

    checkProjectsWorkspace()

    Public method to check, if a projects workspace has been configured. If it has not, a dialog is shown.

    UserInterface.closeEvent

    closeEvent(event)

    Private event handler for the close event.

    This event handler saves the preferences.

    event
    close event (QCloseEvent)

    UserInterface.dragEnterEvent

    dragEnterEvent(event)

    Protected method to handle the drag enter event.

    event
    the drag enter event (QDragEnterEvent)

    UserInterface.dragLeaveEvent

    dragLeaveEvent(event)

    Protected method to handle the drag leave event.

    event
    the drag leave event (QDragLeaveEvent)

    UserInterface.dragMoveEvent

    dragMoveEvent(event)

    Protected method to handle the drag move event.

    event
    the drag move event (QDragMoveEvent)

    UserInterface.dropEvent

    dropEvent(event)

    Protected method to handle the drop event.

    event
    the drop event (QDropEvent)

    UserInterface.getActions

    getActions(type)

    Public method to get a list of all actions.

    type
    string denoting the action set to get. It must be one of "ui" or "wizards".
    Returns:
    list of all actions (list of E4Action)

    UserInterface.getLocale

    getLocale()

    Public method to get the locale of the IDE.

    Returns:
    locale of the IDE (string or None)

    UserInterface.getMenu

    getMenu(name)

    Public method to get a reference to a specific menu.

    name
    name of the menu (string)
    Returns:
    reference to the menu (QMenu)

    UserInterface.getMenuAction

    getMenuAction(menuName, actionName)

    Public method to get a reference to an action of a menu.

    menuName
    name of the menu to search in (string)
    actionName
    object name of the action to search for (string or QString)

    UserInterface.getMenuBarAction

    getMenuBarAction(menuName)

    Public method to get a reference to an action of the main menu.

    menuName
    name of the menu to search in (string)

    UserInterface.getToolBarIconSize

    getToolBarIconSize()

    Public method to get the toolbar icon size.

    Returns:
    toolbar icon size (QSize)

    UserInterface.getToolbar

    getToolbar(name)

    Public method to get a reference to a specific toolbar.

    name
    name of the toolbar (string)
    Returns:
    reference to the toolbar entry (tuple of QString and QToolBar)

    UserInterface.getViewProfile

    getViewProfile()

    Public method to get the current view profile.

    Returns:
    the name of the current view profile (string)

    UserInterface.launchHelpViewer

    launchHelpViewer(home, searchWord = None)

    Public slot to start the help viewer.

    home
    filename of file to be shown (string or QString)
    searchWord=
    word to search for (string or QString)

    UserInterface.performVersionCheck

    performVersionCheck(manual = True, alternative = 0, showVersions = False)

    Public method to check the internet for an eric4 update.

    manual
    flag indicating an invocation via the menu (boolean)
    alternative
    index of server to download from (integer)
    showVersion=
    flag indicating the show versions mode (boolean)

    UserInterface.processArgs

    processArgs(args)

    Public method to process the command line args passed to the UI.

    args
    list of files to open
    The args are processed one at a time. All arguments after a '--' option are considered debug arguments to the program for the debugger. All files named before the '--' option are opened in a text editor, unless the argument ends in .e3p, .e3pz, .e4p or .e4pz, then it is opened as a project file. If it ends in .e4m or .e4mz, it is opened as a multiproject.

    UserInterface.registerToolbar

    registerToolbar(name, text, toolbar)

    Public method to register a toolbar.

    This method must be called in order to make a toolbar manageable by the UserInterface object.

    name
    name of the toolbar (string). This is used as the key into the dictionary of toolbar references.
    text
    user visible text for the toolbar entry (QString)
    toolbar
    reference to the toolbar to be registered (QToolBar)
    Raises KeyError:
    raised, if a toolbar with the given name was already registered

    UserInterface.removeE4Actions

    removeE4Actions(actions, type = 'ui')

    Public method to remove actions from the list of actions.

    type
    string denoting the action set to get. It must be one of "ui" or "wizards".
    actions
    list of actions (list of E4Action)

    UserInterface.reregisterToolbar

    reregisterToolbar(name, text)

    Public method to change the visible text for the named toolbar.

    name
    name of the toolbar to be changed (string)
    text
    new user visible text for the toolbar entry (QString)

    UserInterface.setDebugProfile

    setDebugProfile(save = True)

    Public slot to activate the debug view profile.

    save
    flag indicating that the current profile should be saved (boolean)

    UserInterface.showAvailableVersionsInfo

    showAvailableVersionsInfo()

    Public method to show the eric4 versions available for download.

    UserInterface.showEmailDialog

    showEmailDialog(mode, attachFile = None, deleteAttachFile = False)

    Private slot to show the email dialog in a given mode.

    mode
    mode of the email dialog (string, "bug" or "feature")
    attachFile
    name of a file to attach to the email (string or QString)
    deleteAttachFile
    flag indicating to delete the attached file after it has been sent (boolean)

    UserInterface.showEvent

    showEvent(evt)

    Protected method to handle the show event.

    evt
    reference to the show event (QShowEvent)

    UserInterface.showLogTab

    showLogTab(tabname)

    Public method to show a particular Log-Viewer tab.

    tabname
    string naming the tab to be shown (string)

    UserInterface.showPreferences

    showPreferences(pageName = None)

    Public slot to set the preferences.

    pageName
    name of the configuration page to show (string or QString)

    UserInterface.unregisterToolbar

    unregisterToolbar(name)

    Public method to unregister a toolbar.

    name
    name of the toolbar (string).

    UserInterface.versionIsNewer

    versionIsNewer(required, snapshot = None)

    Public method to check, if the eric4 version is good compared to the required version.

    required
    required version (string or QString)
    snapshot
    required snapshot version (string or QString)
    Returns:
    flag indicating, that the version is newer than the required one (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.E4XML.HighlightingStylesHandler.html0000644000175000001440000000013212261331352030412 xustar000000000000000030 mtime=1388688106.550229083 30 atime=1389081084.891724365 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.E4XML.HighlightingStylesHandler.html0000644000175000001440000001037212261331352030147 0ustar00detlevusers00000000000000 eric4.E4XML.HighlightingStylesHandler

    eric4.E4XML.HighlightingStylesHandler

    Module implementing the handler class for handling a highlighting styles XML file.

    Global Attributes

    None

    Classes

    HighlightingStylesHandler Class implementing a sax handler to read a highlighting styles file.

    Functions

    None


    HighlightingStylesHandler

    Class implementing a sax handler to read a highlighting styles file.

    Derived from

    XMLHandlerBase

    Class Attributes

    None

    Class Methods

    None

    Methods

    HighlightingStylesHandler Constructor
    getVersion Public method to retrieve the version of the shortcuts.
    startDocumentHighlightingStyles Handler called, when the document parsing is started.
    startHighlightingStyles Handler method for the "HighlightingStyles" start tag.
    startLexer Handler method for the "Lexer" start tag.
    startStyle Handler method for the "Style" start tag.

    Static Methods

    None

    HighlightingStylesHandler (Constructor)

    HighlightingStylesHandler(lexers)

    Constructor

    lexers
    dictionary of lexer objects for which to import the styles

    HighlightingStylesHandler.getVersion

    getVersion()

    Public method to retrieve the version of the shortcuts.

    Returns:
    String containing the version number.

    HighlightingStylesHandler.startDocumentHighlightingStyles

    startDocumentHighlightingStyles()

    Handler called, when the document parsing is started.

    HighlightingStylesHandler.startHighlightingStyles

    startHighlightingStyles(attrs)

    Handler method for the "HighlightingStyles" start tag.

    attrs
    list of tag attributes

    HighlightingStylesHandler.startLexer

    startLexer(attrs)

    Handler method for the "Lexer" start tag.

    attrs
    list of tag attributes

    HighlightingStylesHandler.startStyle

    startStyle(attrs)

    Handler method for the "Style" start tag.

    attrs
    list of tag attributes

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.OpenSearch.OpenSearchEngineM0000644000175000001440000000013212261331354031143 xustar000000000000000030 mtime=1388688108.005229814 30 atime=1389081084.891724365 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.OpenSearch.OpenSearchEngineModel.html0000644000175000001440000001432312261331354032507 0ustar00detlevusers00000000000000 eric4.Helpviewer.OpenSearch.OpenSearchEngineModel

    eric4.Helpviewer.OpenSearch.OpenSearchEngineModel

    Module implementing a model for search engines.

    Global Attributes

    None

    Classes

    OpenSearchEngineModel Class implementing a model for search engines.

    Functions

    None


    OpenSearchEngineModel

    Class implementing a model for search engines.

    Derived from

    QAbstractTableModel

    Class Attributes

    None

    Class Methods

    None

    Methods

    OpenSearchEngineModel Constructor
    __enginesChanged Private slot handling a change of the registered engines.
    columnCount Public method to get the number of columns of the model.
    data Public method to get data from the model.
    flags Public method to get flags for a model cell.
    headerData Public method to get the header data.
    removeRows Public method to remove entries from the model.
    rowCount Public method to get the number of rows of the model.
    setData Public method to set the data of a model cell.

    Static Methods

    None

    OpenSearchEngineModel (Constructor)

    OpenSearchEngineModel(manager, parent = None)

    Constructor

    manager
    reference to the search engine manager (OpenSearchManager)
    parent
    reference to the parent object (QObject)

    OpenSearchEngineModel.__enginesChanged

    __enginesChanged()

    Private slot handling a change of the registered engines.

    OpenSearchEngineModel.columnCount

    columnCount(parent = QModelIndex())

    Public method to get the number of columns of the model.

    parent
    parent index (QModelIndex)
    Returns:
    number of columns (integer)

    OpenSearchEngineModel.data

    data(index, role)

    Public method to get data from the model.

    index
    index to get data for (QModelIndex)
    role
    role of the data to retrieve (integer)
    Returns:
    requested data (QVariant)

    OpenSearchEngineModel.flags

    flags(index)

    Public method to get flags for a model cell.

    index
    index of the model cell (QModelIndex)
    Returns:
    flags (Qt.ItemFlags)

    OpenSearchEngineModel.headerData

    headerData(section, orientation, role = Qt.DisplayRole)

    Public method to get the header data.

    section
    section number (integer)
    orientation
    header orientation (Qt.Orientation)
    role
    data role (integer)
    Returns:
    header data (QVariant)

    OpenSearchEngineModel.removeRows

    removeRows(row, count, parent = QModelIndex())

    Public method to remove entries from the model.

    row
    start row (integer)
    count
    number of rows to remove (integer)
    parent
    parent index (QModelIndex)
    Returns:
    flag indicating success (boolean)

    OpenSearchEngineModel.rowCount

    rowCount(parent = QModelIndex())

    Public method to get the number of rows of the model.

    parent
    parent index (QModelIndex)
    Returns:
    number of rows (integer)

    OpenSearchEngineModel.setData

    setData(index, value, role = Qt.EditRole)

    Public method to set the data of a model cell.

    index
    index of the model cell (QModelIndex)
    value
    value to be set (QVariant)
    role
    role of the data (integer)
    Returns:
    flag indicating success (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.Plugins.WizardPlugins.MessageBoxW0000644000175000001440000000013212261331354031224 xustar000000000000000030 mtime=1388688108.659230143 30 atime=1389081084.891724365 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/index-eric4.Plugins.WizardPlugins.MessageBoxWizard.html0000644000175000001440000000155612261331354032762 0ustar00detlevusers00000000000000 eric4.Plugins.WizardPlugins.MessageBoxWizard

    eric4.Plugins.WizardPlugins.MessageBoxWizard

    Package implementing the message box wizard.

    Modules

    MessageBoxWizardDialog Module implementing the message box wizard dialog.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Graphics.PixmapDiagram.html0000644000175000001440000000013212261331350026733 xustar000000000000000030 mtime=1388688104.886228248 30 atime=1389081084.891724365 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Graphics.PixmapDiagram.html0000644000175000001440000001763012261331350026474 0ustar00detlevusers00000000000000 eric4.Graphics.PixmapDiagram

    eric4.Graphics.PixmapDiagram

    Module implementing a dialog showing a pixmap.

    Global Attributes

    None

    Classes

    PixmapDiagram Class implementing a dialog showing a pixmap.

    Functions

    None


    PixmapDiagram

    Class implementing a dialog showing a pixmap.

    Derived from

    KQMainWindow

    Class Attributes

    None

    Class Methods

    None

    Methods

    PixmapDiagram Constructor
    __adjustScrollBar Private method to adjust a scrollbar by a certain factor.
    __doZoom Private method to perform the zooming.
    __initActions Private method to initialize the view actions.
    __initContextMenu Private method to initialize the context menu.
    __initToolBars Private method to populate the toolbars with our actions.
    __print Private slot to the actual printing.
    __printDiagram Private slot called to print the diagram.
    __printPreviewDiagram Private slot called to show a print preview of the diagram.
    __showContextMenu Private slot to show the context menu of the listview.
    __showPixmap Private method to show a file.
    __zoom Private method to handle the zoom context menu action.
    __zoomIn Private method to handle the zoom in context menu entry.
    __zoomOut Private method to handle the zoom out context menu entry.
    __zoomReset Private method to handle the reset zoom context menu entry.
    getDiagramName Method to retrieve a name for the diagram.
    getStatus Method to retrieve the status of the canvas.

    Static Methods

    None

    PixmapDiagram (Constructor)

    PixmapDiagram(pixmap, parent = None, name = None)

    Constructor

    pixmap
    filename of a graphics file to show (QString or string)
    parent
    parent widget of the view (QWidget)
    name
    name of the view widget (QString or string)

    PixmapDiagram.__adjustScrollBar

    __adjustScrollBar(scrollBar, factor)

    Private method to adjust a scrollbar by a certain factor.

    scrollBar
    reference to the scrollbar object (QScrollBar)
    factor
    factor to adjust by (float)

    PixmapDiagram.__doZoom

    __doZoom(factor)

    Private method to perform the zooming.

    factor
    zoom factor (float)

    PixmapDiagram.__initActions

    __initActions()

    Private method to initialize the view actions.

    PixmapDiagram.__initContextMenu

    __initContextMenu()

    Private method to initialize the context menu.

    PixmapDiagram.__initToolBars

    __initToolBars()

    Private method to populate the toolbars with our actions.

    PixmapDiagram.__print

    __print(printer)

    Private slot to the actual printing.

    printer
    reference to the printer object (QPrinter)

    PixmapDiagram.__printDiagram

    __printDiagram()

    Private slot called to print the diagram.

    PixmapDiagram.__printPreviewDiagram

    __printPreviewDiagram()

    Private slot called to show a print preview of the diagram.

    PixmapDiagram.__showContextMenu

    __showContextMenu(coord)

    Private slot to show the context menu of the listview.

    coord
    the position of the mouse pointer (QPoint)

    PixmapDiagram.__showPixmap

    __showPixmap(filename)

    Private method to show a file.

    filename
    name of the file to be shown (string or QString)
    Returns:
    flag indicating success

    PixmapDiagram.__zoom

    __zoom()

    Private method to handle the zoom context menu action.

    PixmapDiagram.__zoomIn

    __zoomIn()

    Private method to handle the zoom in context menu entry.

    PixmapDiagram.__zoomOut

    __zoomOut()

    Private method to handle the zoom out context menu entry.

    PixmapDiagram.__zoomReset

    __zoomReset()

    Private method to handle the reset zoom context menu entry.

    PixmapDiagram.getDiagramName

    getDiagramName()

    Method to retrieve a name for the diagram.

    Returns:
    name for the diagram

    PixmapDiagram.getStatus

    getStatus()

    Method to retrieve the status of the canvas.

    Returns:
    flag indicating a successful pixmap loading (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Debugger.VariableDetailDialog.html0000644000175000001440000000013212261331350030164 xustar000000000000000030 mtime=1388688104.779228195 30 atime=1389081084.891724365 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Debugger.VariableDetailDialog.html0000644000175000001440000000417012261331350027720 0ustar00detlevusers00000000000000 eric4.Debugger.VariableDetailDialog

    eric4.Debugger.VariableDetailDialog

    Module implementing the variable detail dialog.

    Global Attributes

    None

    Classes

    VariableDetailDialog Class implementing the variable detail dialog.

    Functions

    None


    VariableDetailDialog

    Class implementing the variable detail dialog.

    This dialog shows the name, the type and the value of a variable in a read only dialog. It is opened upon a double click in the variables viewer widget.

    Derived from

    QDialog, Ui_VariableDetailDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    VariableDetailDialog Constructor

    Static Methods

    None

    VariableDetailDialog (Constructor)

    VariableDetailDialog(var, vtype, value)

    Constructor

    var
    the variables name (string or QString)
    vtype
    the variables type (string or QString)
    value
    the variables value (string or QString)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.Exporters.ExporterPDF.html0000644000175000001440000000013112261331354030652 xustar000000000000000029 mtime=1388688108.45423004 30 atime=1389081084.891724365 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.Exporters.ExporterPDF.html0000644000175000001440000002333212261331354030410 0ustar00detlevusers00000000000000 eric4.QScintilla.Exporters.ExporterPDF

    eric4.QScintilla.Exporters.ExporterPDF

    Module implementing an exporter for PDF.

    Global Attributes

    PDF_ENCODING
    PDF_FONTSIZE_DEFAULT
    PDF_FONT_DEFAULT
    PDF_MARGIN_DEFAULT
    PDF_SPACING_DEFAULT
    PDFfontAscenders
    PDFfontDescenders
    PDFfontNames
    PDFfontWidths
    PDFpageSizes

    Classes

    ExporterPDF Class implementing an exporter for PDF.
    PDFObjectTracker Class to conveniently handle the tracking of PDF objects so that the cross-reference table can be built (PDF1.4Ref(p39)) All writes to the file are passed through a PDFObjectTracker object.
    PDFRender Class to manage line and page rendering.
    PDFStyle Simple class to store the values of a PDF style.

    Functions

    None


    ExporterPDF

    Class implementing an exporter for PDF.

    Derived from

    ExporterBase

    Class Attributes

    None

    Class Methods

    None

    Methods

    ExporterPDF Constructor
    __getPDFRGB Private method to convert a color object to the correct PDF color.
    exportSource Public method performing the export.

    Static Methods

    None

    ExporterPDF (Constructor)

    ExporterPDF(editor, parent = None)

    Constructor

    editor
    reference to the editor object (QScintilla.Editor.Editor)
    parent
    parent object of the exporter (QObject)

    ExporterPDF.__getPDFRGB

    __getPDFRGB(color)

    Private method to convert a color object to the correct PDF color.

    color
    color object to convert (QColor)
    Returns:
    PDF color description (string)

    ExporterPDF.exportSource

    exportSource()

    Public method performing the export.



    PDFObjectTracker

    Class to conveniently handle the tracking of PDF objects so that the cross-reference table can be built (PDF1.4Ref(p39)) All writes to the file are passed through a PDFObjectTracker object.

    Derived from

    object

    Class Attributes

    None

    Class Methods

    None

    Methods

    PDFObjectTracker Constructor
    add Public method to add a new object.
    write Public method to write the data to the file.
    xref Public method to build the xref table.

    Static Methods

    None

    PDFObjectTracker (Constructor)

    PDFObjectTracker(file)

    Constructor

    file
    file object open for writing (file)

    PDFObjectTracker.add

    add(objectData)

    Public method to add a new object.

    objectData
    data to be added (integer or string)
    Returns:
    object number assigned to the supplied data (integer)

    PDFObjectTracker.write

    write(objectData)

    Public method to write the data to the file.

    objectData
    data to be written (integer or string)

    PDFObjectTracker.xref

    xref()

    Public method to build the xref table.

    Returns:
    file offset of the xref table (integer)


    PDFRender

    Class to manage line and page rendering.

    Apart from startPDF, endPDF everything goes in via add() and nextLine() so that line formatting and pagination can be done properly.

    Derived from

    object

    Class Attributes

    None

    Class Methods

    None

    Methods

    PDFRender Constructor
    add Public method to add a character to the page.
    endPDF Public method to end the PDF document.
    endPage Public method to end a page.
    flushSegment Public method to flush a segment of data.
    fontToPoints Public method to convert the font size to points.
    nextLine Public method to start a new line.
    setStyle Public method to set a style.
    startPDF Public method to start the PDF document.
    startPage Public method to start a new page.

    Static Methods

    None

    PDFRender (Constructor)

    PDFRender()

    Constructor

    PDFRender.add

    add(ch, style_)

    Public method to add a character to the page.

    ch
    character to add (string)
    style_
    number of the style of the character (integer)

    PDFRender.endPDF

    endPDF()

    Public method to end the PDF document.

    PDFRender.endPage

    endPage()

    Public method to end a page.

    PDFRender.flushSegment

    flushSegment()

    Public method to flush a segment of data.

    PDFRender.fontToPoints

    fontToPoints(thousandths)

    Public method to convert the font size to points.

    Returns:
    point size of the font (integer)

    PDFRender.nextLine

    nextLine()

    Public method to start a new line.

    PDFRender.setStyle

    setStyle(style_)

    Public method to set a style.

    style_
    style to be set (integer)
    Returns:
    the PDF string to set the given style (string)

    PDFRender.startPDF

    startPDF()

    Public method to start the PDF document.

    PDFRender.startPage

    startPage()

    Public method to start a new page.



    PDFStyle

    Simple class to store the values of a PDF style.

    Derived from

    object

    Class Attributes

    None

    Class Methods

    None

    Methods

    PDFStyle Constructor

    Static Methods

    None

    PDFStyle (Constructor)

    PDFStyle()

    Constructor


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.PluginWizardQColorDialog.html0000644000175000001440000000013212261331350030750 xustar000000000000000030 mtime=1388688104.495228052 30 atime=1389081084.913724364 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.PluginWizardQColorDialog.html0000644000175000001440000001033612261331350030505 0ustar00detlevusers00000000000000 eric4.Plugins.PluginWizardQColorDialog

    eric4.Plugins.PluginWizardQColorDialog

    Module implementing the QColorDialog wizard plugin.

    Global Attributes

    author
    autoactivate
    className
    deactivateable
    error
    longDescription
    name
    packageName
    shortDescription
    version

    Classes

    ColorDialogWizard Class implementing the QColorDialog wizard plugin.

    Functions

    None


    ColorDialogWizard

    Class implementing the QColorDialog wizard plugin.

    Derived from

    QObject

    Class Attributes

    None

    Class Methods

    None

    Methods

    ColorDialogWizard Constructor
    __callForm Private method to display a dialog and get the code.
    __handle Private method to handle the wizards action
    __initAction Private method to initialize the action.
    __initMenu Private method to add the actions to the right menu.
    activate Public method to activate this plugin.
    deactivate Public method to deactivate this plugin.

    Static Methods

    None

    ColorDialogWizard (Constructor)

    ColorDialogWizard(ui)

    Constructor

    ui
    reference to the user interface object (UI.UserInterface)

    ColorDialogWizard.__callForm

    __callForm(editor)

    Private method to display a dialog and get the code.

    editor
    reference to the current editor
    Returns:
    the generated code (string) and a success flag (boolean)

    ColorDialogWizard.__handle

    __handle()

    Private method to handle the wizards action

    ColorDialogWizard.__initAction

    __initAction()

    Private method to initialize the action.

    ColorDialogWizard.__initMenu

    __initMenu()

    Private method to add the actions to the right menu.

    ColorDialogWizard.activate

    activate()

    Public method to activate this plugin.

    Returns:
    tuple of None and activation status (boolean)

    ColorDialogWizard.deactivate

    deactivate()

    Public method to deactivate this plugin.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.Editor.html0000644000175000001440000000013212261331352025743 xustar000000000000000030 mtime=1388688106.336228976 30 atime=1389081084.913724364 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.Editor.html0000644000175000001440000033337612261331352025514 0ustar00detlevusers00000000000000 eric4.QScintilla.Editor

    eric4.QScintilla.Editor

    Module implementing the editor component of the eric4 IDE.

    Global Attributes

    EditorAutoCompletionListID
    TemplateCompletionListID

    Classes

    Editor Class implementing the editor component of the eric4 IDE.

    Functions

    None


    Editor

    Class implementing the editor component of the eric4 IDE.

    Signals

    autoCompletionAPIsAvailable(avail)
    emitted after the autocompletion function has been configured
    bookmarkToggled(editor)
    emitted when a bookmark is toggled
    breakpointToggled(editor)
    emitted when a breakpoint is toggled
    captionChanged(string, editor)
    emitted when the caption is updated. Typically due to a readOnly attribute change.
    coverageMarkersShown(boolean)
    emitted after the coverage markers have been shown or cleared
    cursorChanged(string, int, int)
    emitted when the cursor position was changed
    editorAboutToBeSaved(string)
    emitted before the editor is saved
    editorRenamed(string)
    emitted after the editor got a new name (i.e. after a 'Save As')
    editorSaved(string)
    emitted after the editor has been saved
    encodingChanged(encoding)
    emitted when the editors encoding was set. The encoding name is passed as a parameter.
    eolChanged(eol)
    emitted when the editors eol type was set. The eol string is passed as a parameter.
    languageChanged(language)
    emitted when the editors language was set. The language is passed as a parameter.
    modificationStatusChanged(boolean, editor)
    emitted when the modification status has changed
    redoAvailable(boolean)
    emitted to signal the redo availability
    showMenu(string, QMenu, editor)
    emitted when a menu is about to be shown. The name of the menu, a reference to the menu and a reference to the editor are given.
    syntaxerrorToggled(editor)
    emitted when a syntax error was discovered
    taskMarkersUpdated(editor)
    emitted when the task markers were updated
    undoAvailable(boolean)
    emitted to signal the undo availability

    Derived from

    QsciScintillaCompat

    Class Attributes

    AttributeID
    AttributePrivateID
    AttributeProtectedID
    ClassID
    ClassPrivateID
    ClassProtectedID
    EnumID
    FromDocumentID
    MethodID
    MethodPrivateID
    MethodProtectedID
    TemplateImageID

    Class Methods

    None

    Methods

    Editor Constructor
    __addBreakPoint Private method to add a new breakpoint.
    __addBreakPoints Private slot to add breakpoints.
    __addFileAliasResource Private method to handle the Add aliased file context menu action.
    __addFileResource Private method to handle the Add file context menu action.
    __addFileResources Private method to handle the Add files context menu action.
    __addLocalizedResource Private method to handle the Add localized resource context menu action.
    __addResourceFrame Private method to handle the Add resource frame context menu action.
    __addToSpellingDictionary Private slot to add the word below the spelling context menu to the dictionary.
    __adjustedCallTipPosition Private method to calculate an adjusted position for showing calltips.
    __applyTemplate Private method to apply a template by name.
    __autoSyntaxCheck Private method to perform an automatic syntax check of the file.
    __autosaveEnable Private slot handling the autosave enable context menu action.
    __bindCompleter Private slot to set the correct typing completer depending on language.
    __bindLexer Private slot to set the correct lexer depending on language.
    __bindName Private method to generate a dummy filename for binding a lexer.
    __breakPointDataAboutToBeChanged Private slot to handle the dataAboutToBeChanged signal of the breakpoint model.
    __callTip Private method to show call tips provided by a plugin.
    __changeBreakPoints Private slot to set changed breakpoints.
    __charAdded Public slot called to handle the user entering a character.
    __checkEncoding Private method to check the selected encoding of the encodings submenu.
    __checkEol Private method to check the selected eol type of the eol submenu.
    __checkLanguage Private method to check the selected language of the language submenu.
    __checkSpellingSelection Private slot to spell check the current selection.
    __checkSpellingWord Private slot to check the word below the spelling context menu.
    __clearBreakpoints Private slot to clear all breakpoints.
    __codeCoverageHideAnnotations Private method to handle the hide code coverage annotations context menu action.
    __completionListSelected Private slot to handle the selection from the completion list.
    __contextClose Private slot handling the close context menu entry.
    __contextMenuSpellingTriggered Private slot to handle the selection of a suggestion of the spelling context menu.
    __contextSave Private slot handling the save context menu entry.
    __contextSaveAs Private slot handling the save as context menu entry.
    __cursorPositionChanged Private slot to handle the cursorPositionChanged signal.
    __deleteBreakPoints Private slot to delete breakpoints.
    __deselectAll Private slot handling the deselect all context menu action.
    __encodingChanged Private slot to handle a change of the encoding.
    __encodingsMenuTriggered Private method to handle the selection of an encoding.
    __eolChanged Private slot to handle a change of the eol mode.
    __eolMenuTriggered Private method to handle the selection of an eol type.
    __exportMenuTriggered Private method to handle the selection of an export format.
    __getCharacter Private method to get the character to the left of the current position in the current line.
    __getCodeCoverageFile Private method to get the filename of the file containing coverage info.
    __getMacroName Private method to select a macro name from the list of macros.
    __ignoreSpellingAlways Private to always ignore the word below the spelling context menu.
    __indentLine Private method to indent or unindent the current line.
    __indentSelection Private method to indent or unindent the current selection.
    __initContextMenu Private method used to setup the context menu
    __initContextMenuAutocompletion Private method used to setup the Checks context sub menu.
    __initContextMenuChecks Private method used to setup the Checks context sub menu.
    __initContextMenuEncodings Private method used to setup the Encodings context sub menu.
    __initContextMenuEol Private method to setup the eol context sub menu.
    __initContextMenuExporters Private method used to setup the Exporters context sub menu.
    __initContextMenuGraphics Private method used to setup the diagrams context sub menu.
    __initContextMenuLanguages Private method used to setup the Languages context sub menu.
    __initContextMenuMargins Private method used to setup the context menu for the margins
    __initContextMenuResources Private method used to setup the Resources context sub menu.
    __initContextMenuSeparateMargins Private method used to setup the context menu for the separated margins
    __initContextMenuShow Private method used to setup the Show context sub menu.
    __initContextMenuUnifiedMargins Private method used to setup the context menu for the unified margins
    __isStartChar Private method to check, if a character is an autocompletion start character.
    __languageMenuTriggered Private method to handle the selection of a lexer language.
    __linesChanged Private method to track text changes.
    __lmBbookmarks Private method to handle the 'LMB toggles bookmark' context menu action.
    __lmBbreakpoints Private method to handle the 'LMB toggles breakpoint' context menu action.
    __marginClicked Private slot to handle the marginClicked signal.
    __marginNumber Private method to calculate the margin number based on a x position.
    __markOccurrences Private method to mark all occurrences of the current word.
    __menuClearBreakpoints Private slot to handle the 'Clear all breakpoints' context menu action.
    __menuToggleBreakpointEnabled Private slot to handle the 'Enable/Disable breakpoint' context menu action.
    __menuToggleTemporaryBreakpoint Private slot to handle the 'Toggle temporary breakpoint' context menu action.
    __modificationChanged Private slot to handle the modificationChanged signal.
    __modificationReadOnly Private slot to handle the modificationAttempted signal.
    __newView Private slot to create a new view to an open document.
    __newViewNewSplit Private slot to create a new view to an open document.
    __normalizedEncoding Private method to calculate the normalized encoding string.
    __printPreview Private slot to generate a print preview.
    __projectPropertiesChanged Private slot to handle changes of the project properties.
    __registerImages Private method to register images for autocompletion lists.
    __removeFromSpellingDictionary Private slot to remove the word below the context menu to the dictionary.
    __removeTrailingWhitespace Private method to remove trailing whitespace.
    __resetLanguage Private method used to reset the language selection.
    __resizeLinenoMargin Private slot to resize the line numbers margin.
    __restoreBreakpoints Private method to restore the breakpoints.
    __selectAll Private slot handling the select all context menu action.
    __selectPygmentsLexer Private method to select a specific pygments lexer.
    __setAutoCompletion Private method to configure the autocompletion function.
    __setCallTips Private method to configure the calltips function.
    __setEolMode Private method to configure the eol mode of the editor.
    __setLineMarkerColours Private method to set the line marker colours.
    __setMarginsDisplay Private method to configure margins 0 and 2.
    __setSpelling Private method to initialize the spell checking functionality.
    __setSpellingLanguage Private slot to set the spell checking language.
    __setTextDisplay Private method to configure the text display.
    __showApplicationDiagram Private method to handle the Imports Diagram context menu action.
    __showClassDiagram Private method to handle the Class Diagram context menu action.
    __showCodeCoverage Private method to handle the code coverage context menu action.
    __showCodeMetrics Private method to handle the code metrics context menu action.
    __showContextMenu Private slot handling the aboutToShow signal of the context menu.
    __showContextMenuAutocompletion Private slot called before the autocompletion menu is shown.
    __showContextMenuChecks Private slot handling the aboutToShow signal of the checks context menu.
    __showContextMenuEncodings Private slot handling the aboutToShow signal of the encodings context menu.
    __showContextMenuEol Private slot handling the aboutToShow signal of the eol context menu.
    __showContextMenuGraphics Private slot handling the aboutToShow signal of the diagrams context menu.
    __showContextMenuLanguages Private slot handling the aboutToShow signal of the languages context menu.
    __showContextMenuMargin Private slot handling the aboutToShow signal of the margins context menu.
    __showContextMenuResources Private slot handling the aboutToShow signal of the resources context menu.
    __showContextMenuShow Private slot called before the show menu is shown.
    __showContextMenuSpelling Private slot to set up the spelling menu before it is shown.
    __showImportsDiagram Private method to handle the Imports Diagram context menu action.
    __showPackageDiagram Private method to handle the Package Diagram context menu action.
    __showProfileData Private method to handle the show profile data context menu action.
    __showSyntaxError Private slot to handle the 'Show syntax error message' context menu action.
    __spellCharAdded Public slot called to handle the user entering a character.
    __styleNeeded Private slot to handle the need for more styling.
    __toggleAutoCompletionEnable Private slot to handle the Enable Autocompletion context menu entry.
    __toggleBreakpoint Private method to toggle a breakpoint.
    __toggleBreakpointEnabled Private method to toggle a breakpoints enabled status.
    __toggleTypingAids Private slot to toggle the typing aids.
    __updateReadOnly Private method to update the readOnly information for this editor.
    addClone Public method to add a clone to our list.
    addedToProject Public method to signal, that this editor has been added to a project.
    autoComplete Public method to start autocompletion.
    autoCompleteQScintilla Public method to perform an autocompletion using QScintilla methods.
    autoCompletionHook Public method to get the autocompletion hook function.
    boxCommentLine Public slot to box comment the current line.
    boxCommentLineOrSelection Public slot to box comment the current line or current selection.
    boxCommentSelection Public slot to box comment the current selection.
    callTip Public method to show calltips.
    callTipHook Public method to get the calltip hook function.
    canAutoCompleteFromAPIs Public method to check for API availablity.
    changeEvent Protected method called to process an event.
    checkDirty Public method to check dirty status and open a message window.
    checkSpelling Public slot to perform an interactive spell check of the document.
    clearBookmarks Public slot to handle the 'Clear all bookmarks' context menu action.
    clearBreakpoint Public method to clear a breakpoint.
    clearSearchIndicators Public method to clear all search indicators.
    clearSyntaxError Public slot to handle the 'Clear all syntax error' context menu action.
    close Public method called when the window gets closed.
    closeIt Public method called by the viewmanager to finally get rid of us.
    codeCoverageShowAnnotations Public method to handle the show code coverage annotations context menu action.
    commentLine Public slot to comment the current line.
    commentLineOrSelection Public slot to comment the current line or current selection.
    commentSelection Public slot to comment the current selection.
    contextMenuEvent Private method implementing the context menu event.
    curLineHasBreakpoint Public method to check for the presence of a breakpoint at the current line.
    dragEnterEvent Protected method to handle the drag enter event.
    dragLeaveEvent Protected method to handle the drag leave event.
    dragMoveEvent Protected method to handle the drag move event.
    dropEvent Protected method to handle the drop event.
    editorCommand Public method to perform a simple editor command.
    ensureVisible Public slot to ensure, that the specified line is visible.
    ensureVisibleTop Public slot to ensure, that the specified line is visible at the top of the editor.
    exportFile Public method to export the file.
    extractTasks Public slot to extract all tasks.
    fileRenamed Public slot to handle the editorRenamed signal.
    focusInEvent Protected method called when the editor receives focus.
    focusOutEvent Public method called when the editor loses focus.
    getBookmarks Public method to retrieve the bookmarks.
    getCompleter Public method to retrieve a reference to the completer object.
    getCurrentWord Public method to get the word at the current position.
    getEncoding Public method to return the current encoding.
    getFileName Public method to return the name of the file being displayed.
    getFileType Public method to return the type of the file being displayed.
    getFolds Public method to get a list line numbers of collapsed folds.
    getHighlightPosition Public method to return the position of the highlight bar.
    getLanguage Public method to retrieve the language of the editor.
    getLexer Public method to retrieve a reference to the lexer object.
    getMenu Public method to get a reference to the main context menu or a submenu.
    getNoName Public method to get the display string for an unnamed editor.
    getSearchText Public method to determine the selection or the current word for the next search operation.
    getSyntaxErrors Public method to retrieve the syntax error markers.
    getWord Public method to get the word at a position.
    getWordBoundaries Public method to get the word boundaries at a position.
    getWordLeft Public method to get the word to the left of a position.
    getWordRight Public method to get the word to the right of a position.
    gotoLine Public slot to jump to the beginning of a line.
    gotoSyntaxError Public slot to handle the 'Goto syntax error' context menu action.
    handleMonospacedEnable Private slot to handle the Use Monospaced Font context menu entry.
    handleRenamed Public slot to handle the editorRenamed signal.
    hasBookmarks Public method to check for the presence of bookmarks.
    hasBreakpoints Public method to check for the presence of breakpoints.
    hasCoverageMarkers Public method to test, if there are coverage markers.
    hasMiniMenu Public method to check the miniMenu flag.
    hasSyntaxErrors Public method to check for the presence of bookmarks.
    hasTaskMarkers Public method to determine, if this editor contains any task markers.
    highlight Public method to highlight (or de-highlight) a particular line.
    highlightVisible Public method to make sure that the highlight is visible.
    indentLineOrSelection Public slot to indent the current line or current selection
    isPy3File Public method to return a flag indicating a Python3 file.
    isPyFile Public method to return a flag indicating a Python file.
    isRubyFile Public method to return a flag indicating a Ruby file.
    isSpellCheckRegion Public method to check, if the given position is within a region, that should be spell checked.
    keyPressEvent Re-implemented to handle the user input a key at a time.
    languageChanged Public slot handling a change of a connected editor's language.
    macroDelete Public method to delete a macro.
    macroLoad Public method to load a macro from a file.
    macroRecordingStart Public method to start macro recording.
    macroRecordingStop Public method to stop macro recording.
    macroRun Public method to execute a macro.
    macroSave Public method to save a macro to a file.
    menuEditBreakpoint Public slot to handle the 'Edit breakpoint' context menu action.
    menuNextBreakpoint Public slot to handle the 'Next breakpoint' context menu action.
    menuPreviousBreakpoint Public slot to handle the 'Previous breakpoint' context menu action.
    menuToggleBookmark Public slot to handle the 'Toggle bookmark' context menu action.
    menuToggleBreakpoint Public slot to handle the 'Toggle breakpoint' context menu action.
    mousePressEvent Protected method to handle the mouse press event.
    newBreakpointWithProperties Private method to set a new breakpoint and its properties.
    nextBookmark Public slot to handle the 'Next bookmark' context menu action.
    nextTask Public slot to handle the 'Next task' context menu action.
    nextUncovered Public slot to handle the 'Next uncovered' context menu action.
    previousBookmark Public slot to handle the 'Previous bookmark' context menu action.
    previousTask Public slot to handle the 'Previous task' context menu action.
    previousUncovered Public slot to handle the 'Previous uncovered' context menu action.
    printFile Public slot to print the text.
    printPreviewFile Public slot to show a print preview of the text.
    projectClosed Public slot to handle the closing of a project.
    projectLexerAssociationsChanged Public slot to handle changes of the project lexer associations.
    projectOpened Public slot to handle the opening of a project.
    readFile Public slot to read the text from a file.
    readLine0 Public slot to read the first line from a file.
    readSettings Public slot to read the settings into our lexer.
    redo Public method to redo the last recorded change.
    refresh Public slot to refresh the editor contents.
    removeClone Public method to remove a clone from our list.
    revertToUnmodified Public method to revert back to the last saved state.
    saveFile Public slot to save the text to a file.
    saveFileAs Public slot to save a file with a new name.
    selectCurrentWord Public method to select the current word.
    selectWord Public method to select the word at a position.
    setAutoCompletionEnabled Public method to enable/disable autocompletion.
    setAutoCompletionHook Public method to set an autocompletion hook.
    setAutoSpellChecking Public method to set the automatic spell checking.
    setCallTipHook Public method to set a calltip hook.
    setEolModeByEolString Public method to set the eol mode given the eol string.
    setLanguage Public method to set a lexer language.
    setMonospaced Public method to set/reset a monospaced font.
    setNoName Public method to set the display string for an unnamed editor.
    setSearchIndicator Public method to set a search indicator for the given range.
    setSpellingForProject Public method to set the spell checking options for files belonging to the current project.
    shortenEmptyLines Public slot to compress lines consisting solely of whitespace characters.
    shouldAutosave Public slot to check the autosave flags.
    smartIndentLineOrSelection Public slot to indent current line smartly.
    streamCommentLine Public slot to stream comment the current line.
    streamCommentLineOrSelection Public slot to stream comment the current line or current selection.
    streamCommentSelection Public slot to comment the current selection.
    toggleBookmark Public method to toggle a bookmark.
    toggleSyntaxError Public method to toggle a syntax error indicator.
    uncommentLine Public slot to uncomment the current line.
    uncommentLineOrSelection Public slot to uncomment the current line or current selection.
    uncommentSelection Public slot to uncomment the current selection.
    undo Public method to undo the last recorded change.
    unindentLineOrSelection Public slot to unindent the current line or current selection.
    unsetAutoCompletionHook Public method to unset a previously installed autocompletion hook.
    unsetCallTipHook Public method to unset a calltip hook.
    writeFile Public slot to write the text to a file.

    Static Methods

    None

    Editor (Constructor)

    Editor(dbs, fn = None, vm = None, filetype = "", editor = None, tv = None)

    Constructor

    dbs
    reference to the debug server object
    fn
    name of the file to be opened (string). If it is None, a new (empty) editor is opened
    vm
    reference to the view manager object (ViewManager.ViewManager)
    filetype
    type of the source file (string)
    editor
    reference to an Editor object, if this is a cloned view
    tv
    reference to the task viewer object

    Editor.__addBreakPoint

    __addBreakPoint(line, temporary)

    Private method to add a new breakpoint.

    line
    line number of the breakpoint
    temporary
    flag indicating a temporary breakpoint

    Editor.__addBreakPoints

    __addBreakPoints(parentIndex, start, end)

    Private slot to add breakpoints.

    parentIndex
    index of parent item (QModelIndex)
    start
    start row (integer)
    end
    end row (integer)

    Editor.__addFileAliasResource

    __addFileAliasResource()

    Private method to handle the Add aliased file context menu action.

    Editor.__addFileResource

    __addFileResource()

    Private method to handle the Add file context menu action.

    Editor.__addFileResources

    __addFileResources()

    Private method to handle the Add files context menu action.

    Editor.__addLocalizedResource

    __addLocalizedResource()

    Private method to handle the Add localized resource context menu action.

    Editor.__addResourceFrame

    __addResourceFrame()

    Private method to handle the Add resource frame context menu action.

    Editor.__addToSpellingDictionary

    __addToSpellingDictionary()

    Private slot to add the word below the spelling context menu to the dictionary.

    Editor.__adjustedCallTipPosition

    __adjustedCallTipPosition(ctshift, pos)

    Private method to calculate an adjusted position for showing calltips.

    ctshift
    amount the calltip shall be shifted (integer)
    pos
    position into the text (integer)
    Returns:
    new position for the calltip (integer)

    Editor.__applyTemplate

    __applyTemplate(templateName, language)

    Private method to apply a template by name.

    templateName
    name of the template to apply (string or QString)
    language
    name of the language (group) to get the template from (string)

    Editor.__autoSyntaxCheck

    __autoSyntaxCheck()

    Private method to perform an automatic syntax check of the file.

    Editor.__autosaveEnable

    __autosaveEnable()

    Private slot handling the autosave enable context menu action.

    Editor.__bindCompleter

    __bindCompleter(filename)

    Private slot to set the correct typing completer depending on language.

    filename
    filename used to determine the associated typing completer language (string)

    Editor.__bindLexer

    __bindLexer(filename, pyname = "")

    Private slot to set the correct lexer depending on language.

    filename
    filename used to determine the associated lexer language (string)
    pyname=
    name of the pygments lexer to use (string)

    Editor.__bindName

    __bindName(txt)

    Private method to generate a dummy filename for binding a lexer.

    txt
    first line of text to use in the generation process (QString or string)

    Editor.__breakPointDataAboutToBeChanged

    __breakPointDataAboutToBeChanged(startIndex, endIndex)

    Private slot to handle the dataAboutToBeChanged signal of the breakpoint model.

    startIndex
    start index of the rows to be changed (QModelIndex)
    endIndex
    end index of the rows to be changed (QModelIndex)

    Editor.__callTip

    __callTip()

    Private method to show call tips provided by a plugin.

    Editor.__changeBreakPoints

    __changeBreakPoints(startIndex, endIndex)

    Private slot to set changed breakpoints.

    indexes
    indexes of changed breakpoints.

    Editor.__charAdded

    __charAdded(charNumber)

    Public slot called to handle the user entering a character.

    charNumber
    value of the character entered (integer)

    Editor.__checkEncoding

    __checkEncoding()

    Private method to check the selected encoding of the encodings submenu.

    Editor.__checkEol

    __checkEol()

    Private method to check the selected eol type of the eol submenu.

    Editor.__checkLanguage

    __checkLanguage()

    Private method to check the selected language of the language submenu.

    Editor.__checkSpellingSelection

    __checkSpellingSelection()

    Private slot to spell check the current selection.

    Editor.__checkSpellingWord

    __checkSpellingWord()

    Private slot to check the word below the spelling context menu.

    Editor.__clearBreakpoints

    __clearBreakpoints(fileName)

    Private slot to clear all breakpoints.

    Editor.__codeCoverageHideAnnotations

    __codeCoverageHideAnnotations()

    Private method to handle the hide code coverage annotations context menu action.

    Editor.__completionListSelected

    __completionListSelected(id, txt)

    Private slot to handle the selection from the completion list.

    id
    the ID of the user list (should be 1) (integer)
    txt
    the selected text (QString)

    Editor.__contextClose

    __contextClose()

    Private slot handling the close context menu entry.

    Editor.__contextMenuSpellingTriggered

    __contextMenuSpellingTriggered(action)

    Private slot to handle the selection of a suggestion of the spelling context menu.

    action
    reference to the action that was selected (QAction)

    Editor.__contextSave

    __contextSave()

    Private slot handling the save context menu entry.

    Editor.__contextSaveAs

    __contextSaveAs()

    Private slot handling the save as context menu entry.

    Editor.__cursorPositionChanged

    __cursorPositionChanged(line, index)

    Private slot to handle the cursorPositionChanged signal.

    It emits the signal cursorChanged with parameters fileName, line and pos.

    line
    line number of the cursor
    index
    position in line of the cursor

    Editor.__deleteBreakPoints

    __deleteBreakPoints(parentIndex, start, end)

    Private slot to delete breakpoints.

    parentIndex
    index of parent item (QModelIndex)
    start
    start row (integer)
    end
    end row (integer)

    Editor.__deselectAll

    __deselectAll()

    Private slot handling the deselect all context menu action.

    Editor.__encodingChanged

    __encodingChanged(encoding, propagate = True)

    Private slot to handle a change of the encoding.

    propagate=
    flag indicating to propagate the change (boolean)

    Editor.__encodingsMenuTriggered

    __encodingsMenuTriggered(act)

    Private method to handle the selection of an encoding.

    act
    reference to the action that was triggered (QAction)

    Editor.__eolChanged

    __eolChanged()

    Private slot to handle a change of the eol mode.

    Editor.__eolMenuTriggered

    __eolMenuTriggered(act)

    Private method to handle the selection of an eol type.

    act
    reference to the action that was triggered (QAction)

    Editor.__exportMenuTriggered

    __exportMenuTriggered(act)

    Private method to handle the selection of an export format.

    act
    reference to the action that was triggered (QAction)

    Editor.__getCharacter

    __getCharacter(pos)

    Private method to get the character to the left of the current position in the current line.

    pos
    position to get character at (integer)
    Returns:
    requested character or "", if there are no more (string) and the next position (i.e. pos - 1)

    Editor.__getCodeCoverageFile

    __getCodeCoverageFile()

    Private method to get the filename of the file containing coverage info.

    Editor.__getMacroName

    __getMacroName()

    Private method to select a macro name from the list of macros.

    Returns:
    Tuple of macro name and a flag, indicating, if the user pressed ok or canceled the operation. (QString, boolean)

    Editor.__ignoreSpellingAlways

    __ignoreSpellingAlways()

    Private to always ignore the word below the spelling context menu.

    Editor.__indentLine

    __indentLine(indent = True)

    Private method to indent or unindent the current line.

    indent
    flag indicating an indent operation
    If the flag is true, an indent operation is performed. Otherwise the current line is unindented.

    Editor.__indentSelection

    __indentSelection(indent = True)

    Private method to indent or unindent the current selection.

    indent
    flag indicating an indent operation
    If the flag is true, an indent operation is performed. Otherwise the current line is unindented.

    Editor.__initContextMenu

    __initContextMenu()

    Private method used to setup the context menu

    Editor.__initContextMenuAutocompletion

    __initContextMenuAutocompletion()

    Private method used to setup the Checks context sub menu.

    Editor.__initContextMenuChecks

    __initContextMenuChecks()

    Private method used to setup the Checks context sub menu.

    Editor.__initContextMenuEncodings

    __initContextMenuEncodings()

    Private method used to setup the Encodings context sub menu.

    Editor.__initContextMenuEol

    __initContextMenuEol()

    Private method to setup the eol context sub menu.

    Editor.__initContextMenuExporters

    __initContextMenuExporters()

    Private method used to setup the Exporters context sub menu.

    Editor.__initContextMenuGraphics

    __initContextMenuGraphics()

    Private method used to setup the diagrams context sub menu.

    Editor.__initContextMenuLanguages

    __initContextMenuLanguages()

    Private method used to setup the Languages context sub menu.

    Editor.__initContextMenuMargins

    __initContextMenuMargins()

    Private method used to setup the context menu for the margins

    Editor.__initContextMenuResources

    __initContextMenuResources()

    Private method used to setup the Resources context sub menu.

    Editor.__initContextMenuSeparateMargins

    __initContextMenuSeparateMargins()

    Private method used to setup the context menu for the separated margins

    Editor.__initContextMenuShow

    __initContextMenuShow()

    Private method used to setup the Show context sub menu.

    Editor.__initContextMenuUnifiedMargins

    __initContextMenuUnifiedMargins()

    Private method used to setup the context menu for the unified margins

    Editor.__isStartChar

    __isStartChar(ch)

    Private method to check, if a character is an autocompletion start character.

    ch
    character to be checked (one character string)
    Returns:
    flag indicating the result (boolean)

    Editor.__languageMenuTriggered

    __languageMenuTriggered(act)

    Private method to handle the selection of a lexer language.

    act
    reference to the action that was triggered (QAction)

    Editor.__linesChanged

    __linesChanged()

    Private method to track text changes.

    This method checks, if lines have been inserted or removed in order to update the breakpoints.

    Editor.__lmBbookmarks

    __lmBbookmarks()

    Private method to handle the 'LMB toggles bookmark' context menu action.

    Editor.__lmBbreakpoints

    __lmBbreakpoints()

    Private method to handle the 'LMB toggles breakpoint' context menu action.

    Editor.__marginClicked

    __marginClicked(margin, line, modifiers)

    Private slot to handle the marginClicked signal.

    margin
    id of the clicked margin
    line
    line number of the click
    modifiers
    keyboard modifiers (Qt.KeyboardModifiers)

    Editor.__marginNumber

    __marginNumber(xPos)

    Private method to calculate the margin number based on a x position.

    xPos
    x position (integer)
    Returns:
    margin number (integer, -1 for no margin)

    Editor.__markOccurrences

    __markOccurrences()

    Private method to mark all occurrences of the current word.

    Editor.__menuClearBreakpoints

    __menuClearBreakpoints()

    Private slot to handle the 'Clear all breakpoints' context menu action.

    Editor.__menuToggleBreakpointEnabled

    __menuToggleBreakpointEnabled()

    Private slot to handle the 'Enable/Disable breakpoint' context menu action.

    Editor.__menuToggleTemporaryBreakpoint

    __menuToggleTemporaryBreakpoint()

    Private slot to handle the 'Toggle temporary breakpoint' context menu action.

    Editor.__modificationChanged

    __modificationChanged(m)

    Private slot to handle the modificationChanged signal.

    It emits the signal modificationStatusChanged with parameters m and self.

    m
    modification status

    Editor.__modificationReadOnly

    __modificationReadOnly()

    Private slot to handle the modificationAttempted signal.

    Editor.__newView

    __newView()

    Private slot to create a new view to an open document.

    Editor.__newViewNewSplit

    __newViewNewSplit()

    Private slot to create a new view to an open document.

    Editor.__normalizedEncoding

    __normalizedEncoding()

    Private method to calculate the normalized encoding string.

    Returns:
    normalized encoding (string)

    Editor.__printPreview

    __printPreview(printer)

    Private slot to generate a print preview.

    printer
    reference to the printer object (QScintilla.Printer.Printer)

    Editor.__projectPropertiesChanged

    __projectPropertiesChanged()

    Private slot to handle changes of the project properties.

    Editor.__registerImages

    __registerImages()

    Private method to register images for autocompletion lists.

    Editor.__removeFromSpellingDictionary

    __removeFromSpellingDictionary()

    Private slot to remove the word below the context menu to the dictionary.

    Editor.__removeTrailingWhitespace

    __removeTrailingWhitespace()

    Private method to remove trailing whitespace.

    Editor.__resetLanguage

    __resetLanguage(propagate = True)

    Private method used to reset the language selection.

    propagate=
    flag indicating to propagate the change (boolean)

    Editor.__resizeLinenoMargin

    __resizeLinenoMargin()

    Private slot to resize the line numbers margin.

    Editor.__restoreBreakpoints

    __restoreBreakpoints()

    Private method to restore the breakpoints.

    Editor.__selectAll

    __selectAll()

    Private slot handling the select all context menu action.

    Editor.__selectPygmentsLexer

    __selectPygmentsLexer()

    Private method to select a specific pygments lexer.

    Returns:
    name of the selected pygments lexer (string)

    Editor.__setAutoCompletion

    __setAutoCompletion()

    Private method to configure the autocompletion function.

    Editor.__setCallTips

    __setCallTips()

    Private method to configure the calltips function.

    Editor.__setEolMode

    __setEolMode()

    Private method to configure the eol mode of the editor.

    Editor.__setLineMarkerColours

    __setLineMarkerColours()

    Private method to set the line marker colours.

    Editor.__setMarginsDisplay

    __setMarginsDisplay()

    Private method to configure margins 0 and 2.

    Editor.__setSpelling

    __setSpelling()

    Private method to initialize the spell checking functionality.

    Editor.__setSpellingLanguage

    __setSpellingLanguage(language, pwl = "", pel = "")

    Private slot to set the spell checking language.

    language
    spell checking language to be set (string)
    pwl=
    name of the personal/project word list (string)
    pel=
    name of the personal/project exclude list (string)

    Editor.__setTextDisplay

    __setTextDisplay()

    Private method to configure the text display.

    Editor.__showApplicationDiagram

    __showApplicationDiagram()

    Private method to handle the Imports Diagram context menu action.

    Editor.__showClassDiagram

    __showClassDiagram()

    Private method to handle the Class Diagram context menu action.

    Editor.__showCodeCoverage

    __showCodeCoverage()

    Private method to handle the code coverage context menu action.

    Editor.__showCodeMetrics

    __showCodeMetrics()

    Private method to handle the code metrics context menu action.

    Editor.__showContextMenu

    __showContextMenu()

    Private slot handling the aboutToShow signal of the context menu.

    Editor.__showContextMenuAutocompletion

    __showContextMenuAutocompletion()

    Private slot called before the autocompletion menu is shown.

    Editor.__showContextMenuChecks

    __showContextMenuChecks()

    Private slot handling the aboutToShow signal of the checks context menu.

    Editor.__showContextMenuEncodings

    __showContextMenuEncodings()

    Private slot handling the aboutToShow signal of the encodings context menu.

    Editor.__showContextMenuEol

    __showContextMenuEol()

    Private slot handling the aboutToShow signal of the eol context menu.

    Editor.__showContextMenuGraphics

    __showContextMenuGraphics()

    Private slot handling the aboutToShow signal of the diagrams context menu.

    Editor.__showContextMenuLanguages

    __showContextMenuLanguages()

    Private slot handling the aboutToShow signal of the languages context menu.

    Editor.__showContextMenuMargin

    __showContextMenuMargin()

    Private slot handling the aboutToShow signal of the margins context menu.

    Editor.__showContextMenuResources

    __showContextMenuResources()

    Private slot handling the aboutToShow signal of the resources context menu.

    Editor.__showContextMenuShow

    __showContextMenuShow()

    Private slot called before the show menu is shown.

    Editor.__showContextMenuSpelling

    __showContextMenuSpelling()

    Private slot to set up the spelling menu before it is shown.

    Editor.__showImportsDiagram

    __showImportsDiagram()

    Private method to handle the Imports Diagram context menu action.

    Editor.__showPackageDiagram

    __showPackageDiagram()

    Private method to handle the Package Diagram context menu action.

    Editor.__showProfileData

    __showProfileData()

    Private method to handle the show profile data context menu action.

    Editor.__showSyntaxError

    __showSyntaxError(line = -1)

    Private slot to handle the 'Show syntax error message' context menu action.

    line
    line number to show the syntax error for (integer)

    Editor.__spellCharAdded

    __spellCharAdded(charNumber)

    Public slot called to handle the user entering a character.

    charNumber
    value of the character entered (integer)

    Editor.__styleNeeded

    __styleNeeded(position)

    Private slot to handle the need for more styling.

    position
    end position, that needs styling (integer)

    Editor.__toggleAutoCompletionEnable

    __toggleAutoCompletionEnable()

    Private slot to handle the Enable Autocompletion context menu entry.

    Editor.__toggleBreakpoint

    __toggleBreakpoint(line, temporary = False)

    Private method to toggle a breakpoint.

    line
    line number of the breakpoint
    temporary
    flag indicating a temporary breakpoint

    Editor.__toggleBreakpointEnabled

    __toggleBreakpointEnabled(line)

    Private method to toggle a breakpoints enabled status.

    line
    line number of the breakpoint

    Editor.__toggleTypingAids

    __toggleTypingAids()

    Private slot to toggle the typing aids.

    Editor.__updateReadOnly

    __updateReadOnly(bForce = True)

    Private method to update the readOnly information for this editor.

    If bForce is True, then updates everything regardless if the attributes have actually changed, such as during initialization time. A signal is emitted after the caption change.

    bForce
    True to force change, False to only update and emit signal if there was an attribute change.

    Editor.addClone

    addClone(editor)

    Public method to add a clone to our list.

    clone
    reference to the cloned editor (Editor)

    Editor.addedToProject

    addedToProject()

    Public method to signal, that this editor has been added to a project.

    Editor.autoComplete

    autoComplete(auto = False, context = True)

    Public method to start autocompletion.

    auto=
    flag indicating a call from the __charAdded method (boolean)
    context=
    flag indicating to complete a context (boolean)

    Editor.autoCompleteQScintilla

    autoCompleteQScintilla()

    Public method to perform an autocompletion using QScintilla methods.

    Editor.autoCompletionHook

    autoCompletionHook()

    Public method to get the autocompletion hook function.

    Returns:
    function set by setAutoCompletionHook()

    Editor.boxCommentLine

    boxCommentLine()

    Public slot to box comment the current line.

    Editor.boxCommentLineOrSelection

    boxCommentLineOrSelection()

    Public slot to box comment the current line or current selection.

    Editor.boxCommentSelection

    boxCommentSelection()

    Public slot to box comment the current selection.

    Editor.callTip

    callTip()

    Public method to show calltips.

    Editor.callTipHook

    callTipHook()

    Public method to get the calltip hook function.

    Returns:
    function set by setCallTipHook()

    Editor.canAutoCompleteFromAPIs

    canAutoCompleteFromAPIs()

    Public method to check for API availablity.

    Returns:
    flag indicating autocompletion from APIs is available (boolean)

    Editor.changeEvent

    changeEvent(evt)

    Protected method called to process an event.

    This implements special handling for the events showMaximized, showMinimized and showNormal. The windows caption is shortened for the minimized mode and reset to the full filename for the other modes. This is to make the editor windows work nicer with the QWorkspace.

    evt
    the event, that was generated (QEvent)
    Returns:
    flag indicating if the event could be processed (bool)

    Editor.checkDirty

    checkDirty()

    Public method to check dirty status and open a message window.

    Returns:
    flag indicating successful reset of the dirty flag (boolean)

    Editor.checkSpelling

    checkSpelling()

    Public slot to perform an interactive spell check of the document.

    Editor.clearBookmarks

    clearBookmarks()

    Public slot to handle the 'Clear all bookmarks' context menu action.

    Editor.clearBreakpoint

    clearBreakpoint(line)

    Public method to clear a breakpoint.

    Note: This doesn't clear the breakpoint in the debugger, it just deletes it from the editor internal list of breakpoints.

    line
    linenumber of the breakpoint

    Editor.clearSearchIndicators

    clearSearchIndicators()

    Public method to clear all search indicators.

    Editor.clearSyntaxError

    clearSyntaxError()

    Public slot to handle the 'Clear all syntax error' context menu action.

    Editor.close

    close(alsoDelete = False)

    Public method called when the window gets closed.

    This overwritten method redirects the action to our ViewManager.closeEditor, which in turn calls our closeIt method.

    alsoDelete
    ignored

    Editor.closeIt

    closeIt()

    Public method called by the viewmanager to finally get rid of us.

    Editor.codeCoverageShowAnnotations

    codeCoverageShowAnnotations()

    Public method to handle the show code coverage annotations context menu action.

    Editor.commentLine

    commentLine()

    Public slot to comment the current line.

    Editor.commentLineOrSelection

    commentLineOrSelection()

    Public slot to comment the current line or current selection.

    Editor.commentSelection

    commentSelection()

    Public slot to comment the current selection.

    Editor.contextMenuEvent

    contextMenuEvent(evt)

    Private method implementing the context menu event.

    evt
    the context menu event (QContextMenuEvent)

    Editor.curLineHasBreakpoint

    curLineHasBreakpoint()

    Public method to check for the presence of a breakpoint at the current line.

    Returns:
    flag indicating the presence of a breakpoint (boolean)

    Editor.dragEnterEvent

    dragEnterEvent(event)

    Protected method to handle the drag enter event.

    event
    the drag enter event (QDragEnterEvent)

    Editor.dragLeaveEvent

    dragLeaveEvent(event)

    Protected method to handle the drag leave event.

    event
    the drag leave event (QDragLeaveEvent)

    Editor.dragMoveEvent

    dragMoveEvent(event)

    Protected method to handle the drag move event.

    event
    the drag move event (QDragMoveEvent)

    Editor.dropEvent

    dropEvent(event)

    Protected method to handle the drop event.

    event
    the drop event (QDropEvent)

    Editor.editorCommand

    editorCommand(cmd)

    Public method to perform a simple editor command.

    cmd
    the scintilla command to be performed

    Editor.ensureVisible

    ensureVisible(line)

    Public slot to ensure, that the specified line is visible.

    line
    line number to make visible

    Editor.ensureVisibleTop

    ensureVisibleTop(line)

    Public slot to ensure, that the specified line is visible at the top of the editor.

    line
    line number to make visible

    Editor.exportFile

    exportFile(exporterFormat)

    Public method to export the file.

    exporterFormat
    format the file should be exported into (string or QString)

    Editor.extractTasks

    extractTasks()

    Public slot to extract all tasks.

    Editor.fileRenamed

    fileRenamed(fn)

    Public slot to handle the editorRenamed signal.

    fn
    filename to be set for the editor (QString or string).

    Editor.focusInEvent

    focusInEvent(event)

    Protected method called when the editor receives focus.

    This method checks for modifications of the current file and rereads it upon request. The cursor is placed at the current position assuming, that it is in the vicinity of the old position after the reread.

    event
    the event object (QFocusEvent)

    Editor.focusOutEvent

    focusOutEvent(event)

    Public method called when the editor loses focus.

    event
    the event object (QFocusEvent)

    Editor.getBookmarks

    getBookmarks()

    Public method to retrieve the bookmarks.

    Returns:
    sorted list of all lines containing a bookmark (list of integer)

    Editor.getCompleter

    getCompleter()

    Public method to retrieve a reference to the completer object.

    Returns:
    the completer object (CompleterBase)

    Editor.getCurrentWord

    getCurrentWord()

    Public method to get the word at the current position.

    Returns:
    the word at that current position (QString)

    Editor.getEncoding

    getEncoding()

    Public method to return the current encoding.

    Returns:
    current encoding (string)

    Editor.getFileName

    getFileName()

    Public method to return the name of the file being displayed.

    Returns:
    filename of the displayed file (string)

    Editor.getFileType

    getFileType()

    Public method to return the type of the file being displayed.

    Returns:
    type of the displayed file (string)

    Editor.getFolds

    getFolds()

    Public method to get a list line numbers of collapsed folds.

    Returns:
    list of line numbers of folded lines (list of integer)

    Editor.getHighlightPosition

    getHighlightPosition()

    Public method to return the position of the highlight bar.

    Returns:
    line number of the highlight bar

    Editor.getLanguage

    getLanguage()

    Public method to retrieve the language of the editor.

    Returns:
    language of the editor (QString)

    Editor.getLexer

    getLexer()

    Public method to retrieve a reference to the lexer object.

    Returns:
    the lexer object (Lexer)

    Editor.getMenu

    getMenu(menuName)

    Public method to get a reference to the main context menu or a submenu.

    menuName
    name of the menu (string)
    Returns:
    reference to the requested menu (QMenu) or None

    Editor.getNoName

    getNoName()

    Public method to get the display string for an unnamed editor.

    Returns:
    display string for this unnamed editor (QString)

    Editor.getSearchText

    getSearchText(selectionOnly = False)

    Public method to determine the selection or the current word for the next search operation.

    selectionOnly
    flag indicating that only selected text should be returned (boolean)
    Returns:
    selection or current word (QString)

    Editor.getSyntaxErrors

    getSyntaxErrors()

    Public method to retrieve the syntax error markers.

    Returns:
    sorted list of all lines containing a syntax error (list of integer)

    Editor.getWord

    getWord(line, index, direction = 0, useWordChars = True)

    Public method to get the word at a position.

    line
    number of line to look at (int)
    index
    position to look at (int)
    direction
    direction to look in (0 = whole word, 1 = left, 2 = right)
    useWordChars=
    flag indicating to use the wordCharacters method (boolean)
    Returns:
    the word at that position (QString)

    Editor.getWordBoundaries

    getWordBoundaries(line, index, useWordChars = True)

    Public method to get the word boundaries at a position.

    line
    number of line to look at (int)
    index
    position to look at (int)
    useWordChars=
    flag indicating to use the wordCharacters method (boolean)
    Returns:
    tuple with start and end indices of the word at the position (integer, integer)

    Editor.getWordLeft

    getWordLeft(line, index)

    Public method to get the word to the left of a position.

    line
    number of line to look at (int)
    index
    position to look at (int)
    Returns:
    the word to the left of that position (QString)

    Editor.getWordRight

    getWordRight(line, index)

    Public method to get the word to the right of a position.

    line
    number of line to look at (int)
    index
    position to look at (int)
    Returns:
    the word to the right of that position (QString)

    Editor.gotoLine

    gotoLine(line)

    Public slot to jump to the beginning of a line.

    line
    line number to go to

    Editor.gotoSyntaxError

    gotoSyntaxError()

    Public slot to handle the 'Goto syntax error' context menu action.

    Editor.handleMonospacedEnable

    handleMonospacedEnable()

    Private slot to handle the Use Monospaced Font context menu entry.

    Editor.handleRenamed

    handleRenamed(fn)

    Public slot to handle the editorRenamed signal.

    fn
    filename to be set for the editor (QString or string).

    Editor.hasBookmarks

    hasBookmarks()

    Public method to check for the presence of bookmarks.

    Returns:
    flag indicating the presence of bookmarks (boolean)

    Editor.hasBreakpoints

    hasBreakpoints()

    Public method to check for the presence of breakpoints.

    Returns:
    flag indicating the presence of breakpoints (boolean)

    Editor.hasCoverageMarkers

    hasCoverageMarkers()

    Public method to test, if there are coverage markers.

    Editor.hasMiniMenu

    hasMiniMenu()

    Public method to check the miniMenu flag.

    Returns:
    flag indicating a minimized context menu (boolean)

    Editor.hasSyntaxErrors

    hasSyntaxErrors()

    Public method to check for the presence of bookmarks.

    Returns:
    flag indicating the presence of bookmarks (boolean)

    Editor.hasTaskMarkers

    hasTaskMarkers()

    Public method to determine, if this editor contains any task markers.

    Returns:
    flag indicating the presence of task markers (boolean)

    Editor.highlight

    highlight(line = None, error = False, syntaxError = False)

    Public method to highlight (or de-highlight) a particular line.

    line
    line number to highlight
    error
    flag indicating whether the error highlight should be used
    syntaxError
    flag indicating a syntax error

    Editor.highlightVisible

    highlightVisible()

    Public method to make sure that the highlight is visible.

    Editor.indentLineOrSelection

    indentLineOrSelection()

    Public slot to indent the current line or current selection

    Editor.isPy3File

    isPy3File()

    Public method to return a flag indicating a Python3 file.

    Returns:
    flag indicating a Python3 file (boolean)

    Editor.isPyFile

    isPyFile()

    Public method to return a flag indicating a Python file.

    Returns:
    flag indicating a Python file (boolean)

    Editor.isRubyFile

    isRubyFile()

    Public method to return a flag indicating a Ruby file.

    Returns:
    flag indicating a Ruby file (boolean)

    Editor.isSpellCheckRegion

    isSpellCheckRegion(pos)

    Public method to check, if the given position is within a region, that should be spell checked.

    pos
    position to be checked (integer)
    Returns:
    flag indicating pos is in a spell check region (boolean)

    Editor.keyPressEvent

    keyPressEvent(ev)

    Re-implemented to handle the user input a key at a time.

    ev
    key event (QKeyEvent)

    Editor.languageChanged

    languageChanged(language, propagate = True)

    Public slot handling a change of a connected editor's language.

    language
    language to be set (string or QString)
    propagate=
    flag indicating to propagate the change (boolean)

    Editor.macroDelete

    macroDelete()

    Public method to delete a macro.

    Editor.macroLoad

    macroLoad()

    Public method to load a macro from a file.

    Editor.macroRecordingStart

    macroRecordingStart()

    Public method to start macro recording.

    Editor.macroRecordingStop

    macroRecordingStop()

    Public method to stop macro recording.

    Editor.macroRun

    macroRun()

    Public method to execute a macro.

    Editor.macroSave

    macroSave()

    Public method to save a macro to a file.

    Editor.menuEditBreakpoint

    menuEditBreakpoint(line = None)

    Public slot to handle the 'Edit breakpoint' context menu action.

    line
    linenumber of the breakpoint to edit

    Editor.menuNextBreakpoint

    menuNextBreakpoint()

    Public slot to handle the 'Next breakpoint' context menu action.

    Editor.menuPreviousBreakpoint

    menuPreviousBreakpoint()

    Public slot to handle the 'Previous breakpoint' context menu action.

    Editor.menuToggleBookmark

    menuToggleBookmark()

    Public slot to handle the 'Toggle bookmark' context menu action.

    Editor.menuToggleBreakpoint

    menuToggleBreakpoint()

    Public slot to handle the 'Toggle breakpoint' context menu action.

    Editor.mousePressEvent

    mousePressEvent(event)

    Protected method to handle the mouse press event.

    event
    the mouse press event (QMouseEvent)

    Editor.newBreakpointWithProperties

    newBreakpointWithProperties(line, properties)

    Private method to set a new breakpoint and its properties.

    line
    line number of the breakpoint
    properties
    properties for the breakpoint (tuple) (condition, temporary flag, enabled flag, ignore count)

    Editor.nextBookmark

    nextBookmark()

    Public slot to handle the 'Next bookmark' context menu action.

    Editor.nextTask

    nextTask()

    Public slot to handle the 'Next task' context menu action.

    Editor.nextUncovered

    nextUncovered()

    Public slot to handle the 'Next uncovered' context menu action.

    Editor.previousBookmark

    previousBookmark()

    Public slot to handle the 'Previous bookmark' context menu action.

    Editor.previousTask

    previousTask()

    Public slot to handle the 'Previous task' context menu action.

    Editor.previousUncovered

    previousUncovered()

    Public slot to handle the 'Previous uncovered' context menu action.

    Editor.printFile

    printFile()

    Public slot to print the text.

    Editor.printPreviewFile

    printPreviewFile()

    Public slot to show a print preview of the text.

    Editor.projectClosed

    projectClosed()

    Public slot to handle the closing of a project.

    Editor.projectLexerAssociationsChanged

    projectLexerAssociationsChanged()

    Public slot to handle changes of the project lexer associations.

    Editor.projectOpened

    projectOpened()

    Public slot to handle the opening of a project.

    Editor.readFile

    readFile(fn, createIt = False)

    Public slot to read the text from a file.

    fn
    filename to read from (string or QString)
    createIt
    flag indicating the creation of a new file, if the given one doesn't exist (boolean)

    Editor.readLine0

    readLine0(fn, createIt = False)

    Public slot to read the first line from a file.

    fn
    filename to read from (string or QString)
    createIt
    flag indicating the creation of a new file, if the given one doesn't exist (boolean)
    Returns:
    first line of the file (string)

    Editor.readSettings

    readSettings()

    Public slot to read the settings into our lexer.

    Editor.redo

    redo()

    Public method to redo the last recorded change.

    Editor.refresh

    refresh()

    Public slot to refresh the editor contents.

    Editor.removeClone

    removeClone(editor)

    Public method to remove a clone from our list.

    clone
    reference to the cloned editor (Editor)

    Editor.revertToUnmodified

    revertToUnmodified()

    Public method to revert back to the last saved state.

    Editor.saveFile

    saveFile(saveas = False, path = None)

    Public slot to save the text to a file.

    saveas
    flag indicating a 'save as' action
    path
    directory to save the file in (string or QString)
    Returns:
    tuple of two values (boolean, string) giving a success indicator and the name of the saved file

    Editor.saveFileAs

    saveFileAs(path = None)

    Public slot to save a file with a new name.

    path
    directory to save the file in (string or QString)
    Returns:
    tuple of two values (boolean, string) giving a success indicator and the name of the saved file

    Editor.selectCurrentWord

    selectCurrentWord()

    Public method to select the current word.

    Editor.selectWord

    selectWord(line, index)

    Public method to select the word at a position.

    line
    number of line to look at (int)
    index
    position to look at (int)

    Editor.setAutoCompletionEnabled

    setAutoCompletionEnabled(enable)

    Public method to enable/disable autocompletion.

    enable
    flag indicating the desired autocompletion status

    Editor.setAutoCompletionHook

    setAutoCompletionHook(func)

    Public method to set an autocompletion hook.

    func
    Function to be set to handle autocompletion. func should be a function taking a reference to the editor and a boolean indicating to complete a context.

    Editor.setAutoSpellChecking

    setAutoSpellChecking()

    Public method to set the automatic spell checking.

    Editor.setCallTipHook

    setCallTipHook(func)

    Public method to set a calltip hook.

    func
    Function to be set to determine calltips. func should be a function taking a reference to the editor, a position into the text and the amount of commas to the left of the cursor. It should return the possible calltips as a list of strings.

    Editor.setEolModeByEolString

    setEolModeByEolString(eolStr)

    Public method to set the eol mode given the eol string.

    eolStr
    eol string (string)

    Editor.setLanguage

    setLanguage(filename, initTextDisplay = True, propagate = True, pyname = "")

    Public method to set a lexer language.

    filename
    filename used to determine the associated lexer language (string)
    initTextDisplay
    flag indicating an initialization of the text display is required as well (boolean)
    propagate=
    flag indicating to propagate the change (boolean)
    pyname=
    name of the pygments lexer to use (string)

    Editor.setMonospaced

    setMonospaced(on)

    Public method to set/reset a monospaced font.

    on
    flag to indicate usage of a monospace font (boolean)

    Editor.setNoName

    setNoName(noName)

    Public method to set the display string for an unnamed editor.

    noName
    display string for this unnamed editor (QString)

    Editor.setSearchIndicator

    setSearchIndicator(startPos, indicLength)

    Public method to set a search indicator for the given range.

    startPos
    start position of the indicator (integer)
    indicLength
    length of the indicator (integer)

    Editor.setSpellingForProject

    setSpellingForProject()

    Public method to set the spell checking options for files belonging to the current project.

    Editor.shortenEmptyLines

    shortenEmptyLines()

    Public slot to compress lines consisting solely of whitespace characters.

    Editor.shouldAutosave

    shouldAutosave()

    Public slot to check the autosave flags.

    Returns:
    flag indicating this editor should be saved (boolean)

    Editor.smartIndentLineOrSelection

    smartIndentLineOrSelection()

    Public slot to indent current line smartly.

    Editor.streamCommentLine

    streamCommentLine()

    Public slot to stream comment the current line.

    Editor.streamCommentLineOrSelection

    streamCommentLineOrSelection()

    Public slot to stream comment the current line or current selection.

    Editor.streamCommentSelection

    streamCommentSelection()

    Public slot to comment the current selection.

    Editor.toggleBookmark

    toggleBookmark(line)

    Public method to toggle a bookmark.

    line
    line number of the bookmark

    Editor.toggleSyntaxError

    toggleSyntaxError(line, index, error, msg = "", show = False)

    Public method to toggle a syntax error indicator.

    line
    line number of the syntax error (integer)
    index
    index number of the syntax error (integer)
    error
    flag indicating if the error marker should be set or deleted (boolean)
    msg
    error message (string)
    show=
    flag indicating to set the cursor to the error position (boolean)

    Editor.uncommentLine

    uncommentLine()

    Public slot to uncomment the current line.

    This happens only, if it was commented by using the commentLine() or commentSelection() slots

    Editor.uncommentLineOrSelection

    uncommentLineOrSelection()

    Public slot to uncomment the current line or current selection.

    This happens only, if it was commented by using the commentLine() or commentSelection() slots

    Editor.uncommentSelection

    uncommentSelection()

    Public slot to uncomment the current selection.

    This happens only, if it was commented by using the commentLine() or commentSelection() slots

    Editor.undo

    undo()

    Public method to undo the last recorded change.

    Editor.unindentLineOrSelection

    unindentLineOrSelection()

    Public slot to unindent the current line or current selection.

    Editor.unsetAutoCompletionHook

    unsetAutoCompletionHook()

    Public method to unset a previously installed autocompletion hook.

    Editor.unsetCallTipHook

    unsetCallTipHook()

    Public method to unset a calltip hook.

    Editor.writeFile

    writeFile(fn)

    Public slot to write the text to a file.

    fn
    filename to write to (string or QString)
    Returns:
    flag indicating success

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.SearchReplaceWidget.html0000644000175000001440000000013212261331352030362 xustar000000000000000030 mtime=1388688106.368228992 30 atime=1389081084.914724366 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.SearchReplaceWidget.html0000644000175000001440000002453012261331352030120 0ustar00detlevusers00000000000000 eric4.QScintilla.SearchReplaceWidget

    eric4.QScintilla.SearchReplaceWidget

    Module implementing the search and replace widget.

    Global Attributes

    None

    Classes

    SearchReplaceWidget Class implementing the search and replace widget.

    Functions

    None


    SearchReplaceWidget

    Class implementing the search and replace widget.

    Signals

    searchListChanged
    emitted to indicate a change of the search list

    Derived from

    QWidget

    Class Attributes

    None

    Class Methods

    None

    Methods

    SearchReplaceWidget Constructor
    __doReplace Private method to replace one occurrence of text.
    __findByReturnPressed Private slot to handle the returnPressed signal of the findtext combobox.
    __findNextPrev Private method to find the next occurrence of the search text.
    __markOccurrences Private method to mark all occurrences of the search text.
    __showFind Private method to display this widget in find mode.
    __showReplace Private slot to display this widget in replace mode.
    findNext Public slot to find the next occurrence of text.
    findPrev Public slot to find the next previous of text.
    keyPressEvent Protected slot to handle key press events.
    on_closeButton_clicked Private slot to close the widget.
    on_findNextButton_clicked Private slot to find the next occurrence of text.
    on_findPrevButton_clicked Private slot to find the previous occurrence of text.
    on_findtextCombo_editTextChanged Private slot to enable/disable the find buttons.
    on_replaceAllButton_clicked Private slot to replace all occurrences of text.
    on_replaceButton_clicked Private slot to replace one occurrence of text.
    on_replaceSearchButton_clicked Private slot to replace one occurrence of text and search for the next one.
    selectionChanged Public slot tracking changes of selected text.
    show Overridden slot from QWidget.
    updateSelectionCheckBox Public slot to update the selection check box.

    Static Methods

    None

    SearchReplaceWidget (Constructor)

    SearchReplaceWidget(replace, vm, parent = None)

    Constructor

    replace
    flag indicating a replace widget is called
    vm
    reference to the viewmanager object
    parent
    parent widget of this widget (QWidget)

    SearchReplaceWidget.__doReplace

    __doReplace(searchNext)

    Private method to replace one occurrence of text.

    searchNext
    flag indicating to search for the next occurrence (boolean).

    SearchReplaceWidget.__findByReturnPressed

    __findByReturnPressed()

    Private slot to handle the returnPressed signal of the findtext combobox.

    SearchReplaceWidget.__findNextPrev

    __findNextPrev(txt, backwards)

    Private method to find the next occurrence of the search text.

    txt
    text to search for (QString)
    backwards
    flag indicating a backwards search (boolean)
    Returns:
    flag indicating success (boolean)

    SearchReplaceWidget.__markOccurrences

    __markOccurrences(txt)

    Private method to mark all occurrences of the search text.

    txt
    text to search for (QString)

    SearchReplaceWidget.__showFind

    __showFind(text = '')

    Private method to display this widget in find mode.

    text
    text to be shown in the findtext edit

    SearchReplaceWidget.__showReplace

    __showReplace(text='')

    Private slot to display this widget in replace mode.

    text
    text to be shown in the findtext edit

    SearchReplaceWidget.findNext

    findNext()

    Public slot to find the next occurrence of text.

    SearchReplaceWidget.findPrev

    findPrev()

    Public slot to find the next previous of text.

    SearchReplaceWidget.keyPressEvent

    keyPressEvent(event)

    Protected slot to handle key press events.

    event
    reference to the key press event (QKeyEvent)

    SearchReplaceWidget.on_closeButton_clicked

    on_closeButton_clicked()

    Private slot to close the widget.

    SearchReplaceWidget.on_findNextButton_clicked

    on_findNextButton_clicked()

    Private slot to find the next occurrence of text.

    SearchReplaceWidget.on_findPrevButton_clicked

    on_findPrevButton_clicked()

    Private slot to find the previous occurrence of text.

    SearchReplaceWidget.on_findtextCombo_editTextChanged

    on_findtextCombo_editTextChanged(txt)

    Private slot to enable/disable the find buttons.

    SearchReplaceWidget.on_replaceAllButton_clicked

    on_replaceAllButton_clicked()

    Private slot to replace all occurrences of text.

    SearchReplaceWidget.on_replaceButton_clicked

    on_replaceButton_clicked()

    Private slot to replace one occurrence of text.

    SearchReplaceWidget.on_replaceSearchButton_clicked

    on_replaceSearchButton_clicked()

    Private slot to replace one occurrence of text and search for the next one.

    SearchReplaceWidget.selectionChanged

    selectionChanged()

    Public slot tracking changes of selected text.

    SearchReplaceWidget.show

    show(text = '')

    Overridden slot from QWidget.

    text
    text to be shown in the findtext edit

    SearchReplaceWidget.updateSelectionCheckBox

    updateSelectionCheckBox(editor)

    Public slot to update the selection check box.

    editor
    reference to the editor (Editor)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.CookieJar.CookiesDialog.html0000644000175000001440000000013212261331353031146 xustar000000000000000030 mtime=1388688107.695229659 30 atime=1389081084.914724366 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.CookieJar.CookiesDialog.html0000644000175000001440000000712012261331353030700 0ustar00detlevusers00000000000000 eric4.Helpviewer.CookieJar.CookiesDialog

    eric4.Helpviewer.CookieJar.CookiesDialog

    Module implementing a dialog to show all cookies.

    Global Attributes

    None

    Classes

    CookiesDialog Class implementing a dialog to show all cookies.

    Functions

    None


    CookiesDialog

    Class implementing a dialog to show all cookies.

    Derived from

    QDialog, Ui_CookiesDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    CookiesDialog Constructor
    __showCookieDetails Private slot to show a dialog with the cookie details.
    __tableModelReset Private slot to handle a reset of the cookies table.
    __tableSelectionChanged Private slot to handle a change of selected items.
    on_addButton_clicked Private slot to add a new exception.

    Static Methods

    None

    CookiesDialog (Constructor)

    CookiesDialog(cookieJar, parent = None)

    Constructor

    cookieJar
    reference to the cookie jar (CookieJar)
    parent
    reference to the parent widget (QWidget)

    CookiesDialog.__showCookieDetails

    __showCookieDetails(index)

    Private slot to show a dialog with the cookie details.

    index
    index of the entry to show (QModelIndex)

    CookiesDialog.__tableModelReset

    __tableModelReset()

    Private slot to handle a reset of the cookies table.

    CookiesDialog.__tableSelectionChanged

    __tableSelectionChanged(selected, deselected)

    Private slot to handle a change of selected items.

    selected
    selected indexes (QItemSelection)
    deselected
    deselected indexes (QItemSelection)

    CookiesDialog.on_addButton_clicked

    on_addButton_clicked()

    Private slot to add a new exception.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.E4Gui.E4SingleApplication.html0000644000175000001440000000013212261331350027163 xustar000000000000000030 mtime=1388688104.462228035 30 atime=1389081084.914724366 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.E4Gui.E4SingleApplication.html0000644000175000001440000001547412261331350026730 0ustar00detlevusers00000000000000 eric4.E4Gui.E4SingleApplication

    eric4.E4Gui.E4SingleApplication

    Module implementing the single application server and client.

    Global Attributes

    SAArguments
    SAFile
    SAOpenFile
    SAOpenProject

    Classes

    E4SingleApplicationClient Class implementing the single application client of the IDE.
    E4SingleApplicationServer Class implementing the single application server embedded within the IDE.

    Functions

    None


    E4SingleApplicationClient

    Class implementing the single application client of the IDE.

    Derived from

    SingleApplicationClient

    Class Attributes

    None

    Class Methods

    None

    Methods

    E4SingleApplicationClient Constructor
    __openFile Private method to open a file in the application server.
    __openProject Private method to open a project in the application server.
    __sendArguments Private method to set the command arguments in the application server.
    processArgs Public method to process the command line args passed to the UI.

    Static Methods

    None

    E4SingleApplicationClient (Constructor)

    E4SingleApplicationClient()

    Constructor

    E4SingleApplicationClient.__openFile

    __openFile(fname)

    Private method to open a file in the application server.

    fname
    name of file to be opened (string)

    E4SingleApplicationClient.__openProject

    __openProject(pfname)

    Private method to open a project in the application server.

    pfname
    name of the projectfile to be opened (string)

    E4SingleApplicationClient.__sendArguments

    __sendArguments(argsStr)

    Private method to set the command arguments in the application server.

    argsStr
    space delimited list of command args (string)

    E4SingleApplicationClient.processArgs

    processArgs(args)

    Public method to process the command line args passed to the UI.

    args
    list of files to open


    E4SingleApplicationServer

    Class implementing the single application server embedded within the IDE.

    Derived from

    SingleApplicationServer

    Class Attributes

    None

    Class Methods

    None

    Methods

    E4SingleApplicationServer Constructor
    __saArguments Private method used to handle the "Arguments" command.
    __saOpenFile Private method used to handle the "Open File" command.
    __saOpenProject Private method used to handle the "Open Project" command.
    handleCommand Public slot to handle the command sent by the client.

    Static Methods

    None

    E4SingleApplicationServer (Constructor)

    E4SingleApplicationServer()

    Constructor

    E4SingleApplicationServer.__saArguments

    __saArguments(argsStr)

    Private method used to handle the "Arguments" command.

    argsStr
    space delimited list of command args(string)

    E4SingleApplicationServer.__saOpenFile

    __saOpenFile(fname)

    Private method used to handle the "Open File" command.

    fname
    filename to be opened (string)

    E4SingleApplicationServer.__saOpenProject

    __saOpenProject(pfname)

    Private method used to handle the "Open Project" command.

    pfname
    filename of the project to be opened (string)

    E4SingleApplicationServer.handleCommand

    handleCommand(cmd, params)

    Public slot to handle the command sent by the client.

    cmd
    commandstring (string)
    params
    parameterstring (string)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ConfigurationPages.CorbaPag0000644000175000001440000000013212261331353031215 xustar000000000000000030 mtime=1388688107.604229613 30 atime=1389081084.914724366 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.CorbaPage.html0000644000175000001440000000515012261331353032060 0ustar00detlevusers00000000000000 eric4.Preferences.ConfigurationPages.CorbaPage

    eric4.Preferences.ConfigurationPages.CorbaPage

    Module implementing the Corba configuration page.

    Global Attributes

    None

    Classes

    CorbaPage Class implementing the Corba configuration page.

    Functions

    create Module function to create the configuration page.


    CorbaPage

    Class implementing the Corba configuration page.

    Derived from

    ConfigurationPageBase, Ui_CorbaPage

    Class Attributes

    None

    Class Methods

    None

    Methods

    CorbaPage Constructor
    on_idlButton_clicked Private slot to handle the IDL compiler selection.
    save Public slot to save the Corba configuration.

    Static Methods

    None

    CorbaPage (Constructor)

    CorbaPage()

    Constructor

    CorbaPage.on_idlButton_clicked

    on_idlButton_clicked()

    Private slot to handle the IDL compiler selection.

    CorbaPage.save

    save()

    Public slot to save the Corba configuration.



    create

    create(dlg)

    Module function to create the configuration page.

    dlg
    reference to the configuration dialog

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsPySvn.ProjectBrow0000644000175000001440000000013212261331353031257 xustar000000000000000030 mtime=1388688107.055229337 30 atime=1389081084.915724366 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsPySvn.ProjectBrowserHelper.html0000644000175000001440000004204312261331353033631 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsPySvn.ProjectBrowserHelper

    eric4.Plugins.VcsPlugins.vcsPySvn.ProjectBrowserHelper

    Module implementing the VCS project browser helper for subversion.

    Global Attributes

    None

    Classes

    SvnProjectBrowserHelper Class implementing the VCS project browser helper for subversion.

    Functions

    None


    SvnProjectBrowserHelper

    Class implementing the VCS project browser helper for subversion.

    Derived from

    VcsProjectBrowserHelper

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnProjectBrowserHelper Constructor
    __SVNAddToChangelist Private slot called by the context menu to add files to a changelist.
    __SVNBlame Private slot called by the context menu to show the blame of a file.
    __SVNBreakLock Private slot called by the context menu to break lock files in the repository.
    __SVNConfigure Private method to open the configuration dialog.
    __SVNCopy Private slot called by the context menu to copy the selected file.
    __SVNDelProp Private slot called by the context menu to delete a subversion property of a file.
    __SVNExtendedDiff Private slot called by the context menu to show the difference of a file to the repository.
    __SVNInfo Private slot called by the context menu to show repository information of a file or directory.
    __SVNListProps Private slot called by the context menu to list the subversion properties of a file.
    __SVNLock Private slot called by the context menu to lock files in the repository.
    __SVNLogBrowser Private slot called by the context menu to show the log browser for a file.
    __SVNLogLimited Private slot called by the context menu to show the limited log of a file.
    __SVNMove Private slot called by the context menu to move the selected file.
    __SVNRemoveFromChangelist Private slot called by the context menu to remove files from their changelist.
    __SVNResolve Private slot called by the context menu to resolve conflicts of a file.
    __SVNSetProp Private slot called by the context menu to set a subversion property of a file.
    __SVNStealLock Private slot called by the context menu to steal lock files in the repository.
    __SVNUnlock Private slot called by the context menu to unlock files in the repository.
    __SVNUrlDiff Private slot called by the context menu to show the difference of a file of two repository URLs.
    __itemsHaveFiles Private method to check, if items contain file type items.
    _addVCSMenu Protected method used to add the VCS menu to all project browsers.
    _addVCSMenuBack Protected method used to add the VCS menu to all project browsers.
    _addVCSMenuDir Protected method used to add the VCS menu to all project browsers.
    _addVCSMenuDirMulti Protected method used to add the VCS menu to all project browsers.
    _addVCSMenuMulti Protected method used to add the VCS menu for multi selection to all project browsers.
    showContextMenu Slot called before the context menu is shown.
    showContextMenuDir Slot called before the context menu is shown.
    showContextMenuDirMulti Slot called before the context menu is shown.
    showContextMenuMulti Slot called before the context menu (multiple selections) is shown.

    Static Methods

    None

    SvnProjectBrowserHelper (Constructor)

    SvnProjectBrowserHelper(vcsObject, browserObject, projectObject, isTranslationsBrowser, parent = None, name = None)

    Constructor

    vcsObject
    reference to the vcs object
    browserObject
    reference to the project browser object
    projectObject
    reference to the project object
    isTranslationsBrowser
    flag indicating, the helper is requested for the translations browser (this needs some special treatment)
    parent
    parent widget (QWidget)
    name
    name of this object (string or QString)

    SvnProjectBrowserHelper.__SVNAddToChangelist

    __SVNAddToChangelist()

    Private slot called by the context menu to add files to a changelist.

    SvnProjectBrowserHelper.__SVNBlame

    __SVNBlame()

    Private slot called by the context menu to show the blame of a file.

    SvnProjectBrowserHelper.__SVNBreakLock

    __SVNBreakLock()

    Private slot called by the context menu to break lock files in the repository.

    SvnProjectBrowserHelper.__SVNConfigure

    __SVNConfigure()

    Private method to open the configuration dialog.

    SvnProjectBrowserHelper.__SVNCopy

    __SVNCopy()

    Private slot called by the context menu to copy the selected file.

    SvnProjectBrowserHelper.__SVNDelProp

    __SVNDelProp()

    Private slot called by the context menu to delete a subversion property of a file.

    SvnProjectBrowserHelper.__SVNExtendedDiff

    __SVNExtendedDiff()

    Private slot called by the context menu to show the difference of a file to the repository.

    This gives the chance to enter the revisions to compare.

    SvnProjectBrowserHelper.__SVNInfo

    __SVNInfo()

    Private slot called by the context menu to show repository information of a file or directory.

    SvnProjectBrowserHelper.__SVNListProps

    __SVNListProps()

    Private slot called by the context menu to list the subversion properties of a file.

    SvnProjectBrowserHelper.__SVNLock

    __SVNLock()

    Private slot called by the context menu to lock files in the repository.

    SvnProjectBrowserHelper.__SVNLogBrowser

    __SVNLogBrowser()

    Private slot called by the context menu to show the log browser for a file.

    SvnProjectBrowserHelper.__SVNLogLimited

    __SVNLogLimited()

    Private slot called by the context menu to show the limited log of a file.

    SvnProjectBrowserHelper.__SVNMove

    __SVNMove()

    Private slot called by the context menu to move the selected file.

    SvnProjectBrowserHelper.__SVNRemoveFromChangelist

    __SVNRemoveFromChangelist()

    Private slot called by the context menu to remove files from their changelist.

    SvnProjectBrowserHelper.__SVNResolve

    __SVNResolve()

    Private slot called by the context menu to resolve conflicts of a file.

    SvnProjectBrowserHelper.__SVNSetProp

    __SVNSetProp()

    Private slot called by the context menu to set a subversion property of a file.

    SvnProjectBrowserHelper.__SVNStealLock

    __SVNStealLock()

    Private slot called by the context menu to steal lock files in the repository.

    SvnProjectBrowserHelper.__SVNUnlock

    __SVNUnlock()

    Private slot called by the context menu to unlock files in the repository.

    SvnProjectBrowserHelper.__SVNUrlDiff

    __SVNUrlDiff()

    Private slot called by the context menu to show the difference of a file of two repository URLs.

    This gives the chance to enter the repository URLs to compare.

    SvnProjectBrowserHelper.__itemsHaveFiles

    __itemsHaveFiles(items)

    Private method to check, if items contain file type items.

    items
    items to check (list of QTreeWidgetItems)
    Returns:
    flag indicating items contain file type items (boolean)

    SvnProjectBrowserHelper._addVCSMenu

    _addVCSMenu(mainMenu)

    Protected method used to add the VCS menu to all project browsers.

    mainMenu
    reference to the menu to be amended

    SvnProjectBrowserHelper._addVCSMenuBack

    _addVCSMenuBack(mainMenu)

    Protected method used to add the VCS menu to all project browsers.

    mainMenu
    reference to the menu to be amended

    SvnProjectBrowserHelper._addVCSMenuDir

    _addVCSMenuDir(mainMenu)

    Protected method used to add the VCS menu to all project browsers.

    mainMenu
    reference to the menu to be amended

    SvnProjectBrowserHelper._addVCSMenuDirMulti

    _addVCSMenuDirMulti(mainMenu)

    Protected method used to add the VCS menu to all project browsers.

    mainMenu
    reference to the menu to be amended

    SvnProjectBrowserHelper._addVCSMenuMulti

    _addVCSMenuMulti(mainMenu)

    Protected method used to add the VCS menu for multi selection to all project browsers.

    mainMenu
    reference to the menu to be amended

    SvnProjectBrowserHelper.showContextMenu

    showContextMenu(menu, standardItems)

    Slot called before the context menu is shown.

    It enables/disables the VCS menu entries depending on the overall VCS status and the file status.

    menu
    reference to the menu to be shown
    standardItems
    array of standard items that need activation/deactivation depending on the overall VCS status

    SvnProjectBrowserHelper.showContextMenuDir

    showContextMenuDir(menu, standardItems)

    Slot called before the context menu is shown.

    It enables/disables the VCS menu entries depending on the overall VCS status and the directory status.

    menu
    reference to the menu to be shown
    standardItems
    array of standard items that need activation/deactivation depending on the overall VCS status

    SvnProjectBrowserHelper.showContextMenuDirMulti

    showContextMenuDirMulti(menu, standardItems)

    Slot called before the context menu is shown.

    It enables/disables the VCS menu entries depending on the overall VCS status and the directory status.

    menu
    reference to the menu to be shown
    standardItems
    array of standard items that need activation/deactivation depending on the overall VCS status

    SvnProjectBrowserHelper.showContextMenuMulti

    showContextMenuMulti(menu, standardItems)

    Slot called before the context menu (multiple selections) is shown.

    It enables/disables the VCS menu entries depending on the overall VCS status and the files status.

    menu
    reference to the menu to be shown
    standardItems
    array of standard items that need activation/deactivation depending on the overall VCS status

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.WizardPlugins.MessageBoxWizard.0000644000175000001440000000032312261331353031230 xustar0000000000000000121 path=eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.WizardPlugins.MessageBoxWizard.MessageBoxWizardDialog.html 30 mtime=1388688107.384229502 30 atime=1389081084.915724366 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.WizardPlugins.MessageBoxWizard.MessageBoxWizard0000644000175000001440000002211112261331353034114 0ustar00detlevusers00000000000000 eric4.Plugins.WizardPlugins.MessageBoxWizard.MessageBoxWizardDialog

    eric4.Plugins.WizardPlugins.MessageBoxWizard.MessageBoxWizardDialog

    Module implementing the message box wizard dialog.

    Global Attributes

    None

    Classes

    MessageBoxWizardDialog Class implementing the message box wizard dialog.

    Functions

    None


    MessageBoxWizardDialog

    Class implementing the message box wizard dialog.

    It displays a dialog for entering the parameters for the QMessageBox code generator.

    Derived from

    QDialog, Ui_MessageBoxWizardDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    MessageBoxWizardDialog Constructor
    __enabledGroups Private method to enable/disable some group boxes.
    __getQt40ButtonCode Private method to generate the button code for Qt3 and Qt 4.0.
    __getQt42ButtonCode Private method to generate the button code for Qt 4.2.0.
    __testQt40 Private method to test the selected options for Qt3 and Qt 4.0.
    __testQt42 Private method to test the selected options for Qt 4.2.0.
    getCode Public method to get the source code.
    on_bTest_clicked Private method to test the selected options.
    on_buttonBox_clicked Private slot called by a button of the button box clicked.
    on_cButton0_editTextChanged Private slot to enable/disable the other button combos depending on its contents.
    on_cButton1_editTextChanged Private slot to enable/disable the other button combos depending on its contents.
    on_cButton2_editTextChanged Private slot to enable/disable the other button combos depending on its contents.
    on_rAboutQt_toggled Private slot to handle the toggled signal of the rAboutQt radio button.
    on_rAbout_toggled Private slot to handle the toggled signal of the rAbout radio button.
    on_rQt42_toggled Private slot to handle the toggled signal of the rQt42 radio button.

    Static Methods

    None

    MessageBoxWizardDialog (Constructor)

    MessageBoxWizardDialog(parent=None)

    Constructor

    parent
    parent widget (QWidget)

    MessageBoxWizardDialog.__enabledGroups

    __enabledGroups()

    Private method to enable/disable some group boxes.

    MessageBoxWizardDialog.__getQt40ButtonCode

    __getQt40ButtonCode(istring)

    Private method to generate the button code for Qt3 and Qt 4.0.

    istring
    indentation string (string)
    Returns:
    the button code (string)

    MessageBoxWizardDialog.__getQt42ButtonCode

    __getQt42ButtonCode(istring, indString)

    Private method to generate the button code for Qt 4.2.0.

    istring
    indentation string (string)
    indString
    string used for indentation (space or tab) (string)
    Returns:
    the button code (string)

    MessageBoxWizardDialog.__testQt40

    __testQt40()

    Private method to test the selected options for Qt3 and Qt 4.0.

    MessageBoxWizardDialog.__testQt42

    __testQt42()

    Private method to test the selected options for Qt 4.2.0.

    MessageBoxWizardDialog.getCode

    getCode(indLevel, indString)

    Public method to get the source code.

    indLevel
    indentation level (int)
    indString
    string used for indentation (space or tab) (string)
    Returns:
    generated code (string)

    MessageBoxWizardDialog.on_bTest_clicked

    on_bTest_clicked()

    Private method to test the selected options.

    MessageBoxWizardDialog.on_buttonBox_clicked

    on_buttonBox_clicked(button)

    Private slot called by a button of the button box clicked.

    button
    button that was clicked (QAbstractButton)

    MessageBoxWizardDialog.on_cButton0_editTextChanged

    on_cButton0_editTextChanged(text)

    Private slot to enable/disable the other button combos depending on its contents.

    text
    the new text (QString)

    MessageBoxWizardDialog.on_cButton1_editTextChanged

    on_cButton1_editTextChanged(text)

    Private slot to enable/disable the other button combos depending on its contents.

    text
    the new text (QString)

    MessageBoxWizardDialog.on_cButton2_editTextChanged

    on_cButton2_editTextChanged(text)

    Private slot to enable/disable the other button combos depending on its contents.

    text
    the new text (QString)

    MessageBoxWizardDialog.on_rAboutQt_toggled

    on_rAboutQt_toggled(on)

    Private slot to handle the toggled signal of the rAboutQt radio button.

    on
    toggle state (boolean) (ignored)

    MessageBoxWizardDialog.on_rAbout_toggled

    on_rAbout_toggled(on)

    Private slot to handle the toggled signal of the rAbout radio button.

    on
    toggle state (boolean) (ignored)

    MessageBoxWizardDialog.on_rQt42_toggled

    on_rQt42_toggled(on)

    Private slot to handle the toggled signal of the rQt42 radio button.

    on
    toggle state (boolean) (ignored)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ConfigurationPages.EditorSp0000644000175000001440000000031312261331353031271 xustar0000000000000000114 path=eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.EditorSpellCheckingPage.html 29 mtime=1388688107.41822952 30 atime=1389081084.915724366 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.EditorSpellCheckingPage.0000644000175000001440000000761712261331353034041 0ustar00detlevusers00000000000000 eric4.Preferences.ConfigurationPages.EditorSpellCheckingPage

    eric4.Preferences.ConfigurationPages.EditorSpellCheckingPage

    Module implementing the Editor Spellchecking configuration page.

    Global Attributes

    None

    Classes

    EditorSpellCheckingPage Class implementing the Editor Spellchecking configuration page.

    Functions

    create Module function to create the configuration page.


    EditorSpellCheckingPage

    Class implementing the Editor Spellchecking configuration page.

    Derived from

    ConfigurationPageBase, Ui_EditorSpellCheckingPage

    Class Attributes

    None

    Class Methods

    None

    Methods

    EditorSpellCheckingPage Constructor
    on_pelButton_clicked Private method to select the personal exclude list file.
    on_pwlButton_clicked Private method to select the personal word list file.
    on_spellingMarkerButton_clicked Private slot to set the colour of the spelling markers.
    save Public slot to save the Editor Search configuration.

    Static Methods

    None

    EditorSpellCheckingPage (Constructor)

    EditorSpellCheckingPage()

    Constructor

    EditorSpellCheckingPage.on_pelButton_clicked

    on_pelButton_clicked()

    Private method to select the personal exclude list file.

    EditorSpellCheckingPage.on_pwlButton_clicked

    on_pwlButton_clicked()

    Private method to select the personal word list file.

    EditorSpellCheckingPage.on_spellingMarkerButton_clicked

    on_spellingMarkerButton_clicked()

    Private slot to set the colour of the spelling markers.

    EditorSpellCheckingPage.save

    save()

    Public slot to save the Editor Search configuration.



    create

    create(dlg)

    Module function to create the configuration page.

    dlg
    reference to the configuration dialog

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.PluginWizardQFontDialog.html0000644000175000001440000000013212261331350030600 xustar000000000000000030 mtime=1388688104.482228045 30 atime=1389081084.915724366 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.PluginWizardQFontDialog.html0000644000175000001440000001023112261331350030327 0ustar00detlevusers00000000000000 eric4.Plugins.PluginWizardQFontDialog

    eric4.Plugins.PluginWizardQFontDialog

    Module implementing the QFontDialog wizard plugin.

    Global Attributes

    author
    autoactivate
    className
    deactivateable
    error
    longDescription
    name
    packageName
    shortDescription
    version

    Classes

    FontDialogWizard Class implementing the QFontDialog wizard plugin.

    Functions

    None


    FontDialogWizard

    Class implementing the QFontDialog wizard plugin.

    Derived from

    QObject

    Class Attributes

    None

    Class Methods

    None

    Methods

    FontDialogWizard Constructor
    __callForm Private method to display a dialog and get the code.
    __handle Private method to handle the wizards action
    __initAction Private method to initialize the action.
    __initMenu Private method to add the actions to the right menu.
    activate Public method to activate this plugin.
    deactivate Public method to deactivate this plugin.

    Static Methods

    None

    FontDialogWizard (Constructor)

    FontDialogWizard(ui)

    Constructor

    ui
    reference to the user interface object (UI.UserInterface)

    FontDialogWizard.__callForm

    __callForm(editor)

    Private method to display a dialog and get the code.

    editor
    reference to the current editor
    Returns:
    the generated code (string)

    FontDialogWizard.__handle

    __handle()

    Private method to handle the wizards action

    FontDialogWizard.__initAction

    __initAction()

    Private method to initialize the action.

    FontDialogWizard.__initMenu

    __initMenu()

    Private method to add the actions to the right menu.

    FontDialogWizard.activate

    activate()

    Public method to activate this plugin.

    Returns:
    tuple of None and activation status (boolean)

    FontDialogWizard.deactivate

    deactivate()

    Public method to deactivate this plugin.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.Lexers.LexerBatch.html0000644000175000001440000000013212261331354030001 xustar000000000000000030 mtime=1388688108.523230074 30 atime=1389081084.916724365 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.Lexers.LexerBatch.html0000644000175000001440000000607512261331354027543 0ustar00detlevusers00000000000000 eric4.QScintilla.Lexers.LexerBatch

    eric4.QScintilla.Lexers.LexerBatch

    Module implementing a Batch file lexer with some additional methods.

    Global Attributes

    None

    Classes

    LexerBatch Subclass to implement some additional lexer dependant methods.

    Functions

    None


    LexerBatch

    Subclass to implement some additional lexer dependant methods.

    Derived from

    QsciLexerBatch, Lexer

    Class Attributes

    None

    Class Methods

    None

    Methods

    LexerBatch Constructor
    defaultKeywords Public method to get the default keywords.
    isCommentStyle Public method to check, if a style is a comment style.
    isStringStyle Public method to check, if a style is a string style.

    Static Methods

    None

    LexerBatch (Constructor)

    LexerBatch(parent=None)

    Constructor

    parent
    parent widget of this lexer

    LexerBatch.defaultKeywords

    defaultKeywords(kwSet)

    Public method to get the default keywords.

    kwSet
    number of the keyword set (integer)
    Returns:
    string giving the keywords (string) or None

    LexerBatch.isCommentStyle

    isCommentStyle(style)

    Public method to check, if a style is a comment style.

    Returns:
    flag indicating a comment style (boolean)

    LexerBatch.isStringStyle

    isStringStyle(style)

    Public method to check, if a style is a string style.

    Returns:
    flag indicating a string style (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Utilities.Startup.html0000644000175000001440000000013112261331351026065 xustar000000000000000029 mtime=1388688105.68622865 30 atime=1389081084.916724365 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Utilities.Startup.html0000644000175000001440000001575212261331351025632 0ustar00detlevusers00000000000000 eric4.Utilities.Startup

    eric4.Utilities.Startup

    Module implementing some startup helper funcions

    Global Attributes

    loaded_translators

    Classes

    None

    Functions

    handleArgs Function to handle the always present commandline options.
    initializeResourceSearchPath Function to initialize the default mime source factory.
    loadTranslatorForLocale Function to find and load a specific translation.
    loadTranslators Function to load all required translations.
    makeAppInfo Function to generate a dictionary describing the application.
    setLibraryPaths Module function to set the Qt library paths correctly for windows systems.
    simpleAppStartup Function to start up an application that doesn't need a specialized start up.
    usage Function to show the usage information.
    version Function to show the version information.


    handleArgs

    handleArgs(argv, appinfo)

    Function to handle the always present commandline options.

    argv
    list of commandline parameters (list of strings)
    appinfo
    dictionary describing the application
    Returns:
    index of the '--' option (integer). This is used to tell the application, that all additional option don't belong to the application.


    initializeResourceSearchPath

    initializeResourceSearchPath()

    Function to initialize the default mime source factory.



    loadTranslatorForLocale

    loadTranslatorForLocale(dirs, tn)

    Function to find and load a specific translation.

    dirs
    Searchpath for the translations. (list of strings)
    tn
    The translation to be loaded. (string)
    Returns:
    Tuple of a status flag and the loaded translator. (int, QTranslator)


    loadTranslators

    loadTranslators(qtTransDir, app, translationFiles = ())

    Function to load all required translations.

    qtTransDir
    directory of the Qt translations files (string)
    app
    reference to the application object (QApplication)
    translationFiles
    tuple of additional translations to be loaded (tuple of strings)
    Returns:
    the requested locale (string)


    makeAppInfo

    makeAppInfo(argv, name, arg, description, options = [])

    Function to generate a dictionary describing the application.

    argv
    list of commandline parameters (list of strings)
    name
    name of the application (string)
    arg
    commandline arguments (string)
    description
    text describing the application (string)
    options
    list of additional commandline options (list of tuples of two strings (commandline option, option description)). The options --version, --help and -h are always present and must not be repeated in this list.
    Returns:
    dictionary describing the application


    setLibraryPaths

    setLibraryPaths()

    Module function to set the Qt library paths correctly for windows systems.



    simpleAppStartup

    simpleAppStartup(argv, appinfo, mwFactory, kqOptions = [], quitOnLastWindowClosed = True, raiseIt = True)

    Function to start up an application that doesn't need a specialized start up.

    This function is used by all of eric4's helper programs.

    argv
    list of commandline parameters (list of strings)
    appinfo
    dictionary describing the application
    mwFactory
    factory function generating the main widget. This function must accept the following parameter.
    argv
    list of commandline parameters (list of strings)
    kqOptions=
    list of acceptable command line options. This is only used, if the application is running under KDE and pyKDE can be loaded successfully.
    quitOnLastWindowClosed=
    flag indicating to quit the application, if the last window was closed (boolean)
    raiseIt=
    flag indicating to raise the generated application window (boolean)


    usage

    usage(appinfo, optlen = 12)

    Function to show the usage information.

    appinfo
    dictionary describing the application
    optlen
    length of the field for the commandline option (integer)


    version

    version(appinfo)

    Function to show the version information.

    appinfo
    dictionary describing the application

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Tools.TrayStarter.html0000644000175000001440000000013212261331351026035 xustar000000000000000030 mtime=1388688105.598228606 30 atime=1389081084.916724365 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Tools.TrayStarter.html0000644000175000001440000003044112261331351025571 0ustar00detlevusers00000000000000 eric4.Tools.TrayStarter

    eric4.Tools.TrayStarter

    Module implementing a starter for the system tray.

    Global Attributes

    None

    Classes

    TrayStarter Class implementing a starter for the system tray.

    Functions

    None


    TrayStarter

    Class implementing a starter for the system tray.

    Derived from

    QSystemTrayIcon

    Class Attributes

    None

    Class Methods

    None

    Methods

    TrayStarter Constructor
    __about Private slot to handle the About dialog.
    __activated Private slot to handle the activated signal.
    __loadRecentFiles Private method to load the recently opened filenames.
    __loadRecentMultiProjects Private method to load the recently opened multi project filenames.
    __loadRecentProjects Private method to load the recently opened project filenames.
    __openRecent Private method to open a project or file from the list of rencently opened projects or files.
    __showContextMenu Private slot to show the context menu.
    __showPreferences Private slot to set the preferences.
    __showRecentFilesMenu Private method to set up the recent files menu.
    __showRecentMultiProjectsMenu Private method to set up the recent multi projects menu.
    __showRecentProjectsMenu Private method to set up the recent projects menu.
    __startCompare Private slot to start the eric4 compare dialog.
    __startDiff Private slot to start the eric4 diff dialog.
    __startEric Private slot to start the eric4 IDE.
    __startHelpViewer Private slot to start the eric4 web browser.
    __startIconEditor Private slot to start the eric4 icon editor dialog.
    __startMiniEditor Private slot to start the eric4 Mini Editor.
    __startPluginInstall Private slot to start the eric4 plugin installation dialog.
    __startPluginRepository Private slot to start the eric4 plugin repository dialog.
    __startPluginUninstall Private slot to start the eric4 plugin uninstallation dialog.
    __startPreferences Private slot to start the eric4 configuration dialog.
    __startProc Private method to start an eric4 application.
    __startPyRe Private slot to start the eric4 Python re editor dialog.
    __startQRegExp Private slot to start the eric4 QRegExp editor dialog.
    __startSqlBrowser Private slot to start the eric4 sql browser dialog.
    __startTRPreviewer Private slot to start the eric4 translations previewer.
    __startUIPreviewer Private slot to start the eric4 UI previewer.
    __startUnittest Private slot to start the eric4 unittest dialog.
    preferencesChanged Public slot to handle a change of preferences.

    Static Methods

    None

    TrayStarter (Constructor)

    TrayStarter()

    Constructor

    TrayStarter.__about

    __about()

    Private slot to handle the About dialog.

    TrayStarter.__activated

    __activated(reason)

    Private slot to handle the activated signal.

    reason
    reason code of the signal (QSystemTrayIcon.ActivationReason)

    TrayStarter.__loadRecentFiles

    __loadRecentFiles()

    Private method to load the recently opened filenames.

    TrayStarter.__loadRecentMultiProjects

    __loadRecentMultiProjects()

    Private method to load the recently opened multi project filenames.

    TrayStarter.__loadRecentProjects

    __loadRecentProjects()

    Private method to load the recently opened project filenames.

    TrayStarter.__openRecent

    __openRecent(act)

    Private method to open a project or file from the list of rencently opened projects or files.

    act
    reference to the action that triggered (QAction)

    TrayStarter.__showContextMenu

    __showContextMenu()

    Private slot to show the context menu.

    TrayStarter.__showPreferences

    __showPreferences()

    Private slot to set the preferences.

    TrayStarter.__showRecentFilesMenu

    __showRecentFilesMenu()

    Private method to set up the recent files menu.

    TrayStarter.__showRecentMultiProjectsMenu

    __showRecentMultiProjectsMenu()

    Private method to set up the recent multi projects menu.

    TrayStarter.__showRecentProjectsMenu

    __showRecentProjectsMenu()

    Private method to set up the recent projects menu.

    TrayStarter.__startCompare

    __startCompare()

    Private slot to start the eric4 compare dialog.

    TrayStarter.__startDiff

    __startDiff()

    Private slot to start the eric4 diff dialog.

    TrayStarter.__startEric

    __startEric()

    Private slot to start the eric4 IDE.

    TrayStarter.__startHelpViewer

    __startHelpViewer()

    Private slot to start the eric4 web browser.

    TrayStarter.__startIconEditor

    __startIconEditor()

    Private slot to start the eric4 icon editor dialog.

    TrayStarter.__startMiniEditor

    __startMiniEditor()

    Private slot to start the eric4 Mini Editor.

    TrayStarter.__startPluginInstall

    __startPluginInstall()

    Private slot to start the eric4 plugin installation dialog.

    TrayStarter.__startPluginRepository

    __startPluginRepository()

    Private slot to start the eric4 plugin repository dialog.

    TrayStarter.__startPluginUninstall

    __startPluginUninstall()

    Private slot to start the eric4 plugin uninstallation dialog.

    TrayStarter.__startPreferences

    __startPreferences()

    Private slot to start the eric4 configuration dialog.

    TrayStarter.__startProc

    __startProc(applName, *applArgs)

    Private method to start an eric4 application.

    applName
    name of the eric4 application script (string)
    *applArgs
    variable list of application arguments

    TrayStarter.__startPyRe

    __startPyRe()

    Private slot to start the eric4 Python re editor dialog.

    TrayStarter.__startQRegExp

    __startQRegExp()

    Private slot to start the eric4 QRegExp editor dialog.

    TrayStarter.__startSqlBrowser

    __startSqlBrowser()

    Private slot to start the eric4 sql browser dialog.

    TrayStarter.__startTRPreviewer

    __startTRPreviewer()

    Private slot to start the eric4 translations previewer.

    TrayStarter.__startUIPreviewer

    __startUIPreviewer()

    Private slot to start the eric4 UI previewer.

    TrayStarter.__startUnittest

    __startUnittest()

    Private slot to start the eric4 unittest dialog.

    TrayStarter.preferencesChanged

    preferencesChanged()

    Public slot to handle a change of preferences.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Utilities.uic.html0000644000175000001440000000013212261331351025204 xustar000000000000000030 mtime=1388688105.689228651 30 atime=1389081084.916724365 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Utilities.uic.html0000644000175000001440000001000112261331351024726 0ustar00detlevusers00000000000000 eric4.Utilities.uic

    eric4.Utilities.uic

    Module implementing a function to compile all user interface files of a directory or directory tree.

    Global Attributes

    None

    Classes

    None

    Functions

    compileUiDir Creates Python modules from Qt Designer .ui files in a directory or directory tree.
    compileUiFiles Module function to compile the .ui files of a directory tree to Python sources.
    compile_ui Local function to compile a single .ui file.
    pyName Local function to create the Python source file name for the compiled .ui file.


    compileUiDir

    compileUiDir(dir, recurse = False, map = None, **compileUi_args)

    Creates Python modules from Qt Designer .ui files in a directory or directory tree.

    Note: This function is a modified version of the one found in PyQt4.

    dir
    Name of the directory to scan for files whose name ends with '.ui'. By default the generated Python module is created in the same directory ending with '.py'.
    recurse
    flag indicating that any sub-directories should be scanned.
    map
    an optional callable that is passed the name of the directory containing the '.ui' file and the name of the Python module that will be created. The callable should return a tuple of the name of the directory in which the Python module will be created and the (possibly modified) name of the module.
    compileUi_args
    any additional keyword arguments that are passed to the compileUi() function that is called to create each Python module.


    compileUiFiles

    compileUiFiles(dir, recurse = False)

    Module function to compile the .ui files of a directory tree to Python sources.

    dir
    name of a directory to scan for .ui files (string or QString)
    recurse
    flag indicating to recurse into subdirectories (boolean)


    compile_ui

    compile_ui(ui_dir, ui_file)

    Local function to compile a single .ui file.

    ui_dir
    directory containing the .ui file (string)
    ui_file
    file name of the .ui file (string)


    pyName

    pyName(py_dir, py_file)

    Local function to create the Python source file name for the compiled .ui file.

    py_dir
    suggested name of the directory (string)
    py_file
    suggested name for the compile source file (string)
    Returns:
    tuple of directory name (string) and source file name (string)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.Lexers.LexerTCL.html0000644000175000001440000000013212261331354027402 xustar000000000000000030 mtime=1388688108.587230106 30 atime=1389081084.916724365 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.Lexers.LexerTCL.html0000644000175000001440000000647712261331354027152 0ustar00detlevusers00000000000000 eric4.QScintilla.Lexers.LexerTCL

    eric4.QScintilla.Lexers.LexerTCL

    Module implementing a TCL/Tk lexer with some additional methods.

    Global Attributes

    None

    Classes

    LexerTCL Subclass to implement some additional lexer dependant methods.

    Functions

    None


    LexerTCL

    Subclass to implement some additional lexer dependant methods.

    Derived from

    QsciLexerTCL, Lexer

    Class Attributes

    None

    Class Methods

    None

    Methods

    LexerTCL Constructor
    defaultKeywords Public method to get the default keywords.
    initProperties Public slot to initialize the properties.
    isCommentStyle Public method to check, if a style is a comment style.
    isStringStyle Public method to check, if a style is a string style.

    Static Methods

    None

    LexerTCL (Constructor)

    LexerTCL(parent=None)

    Constructor

    parent
    parent widget of this lexer

    LexerTCL.defaultKeywords

    defaultKeywords(kwSet)

    Public method to get the default keywords.

    kwSet
    number of the keyword set (integer)
    Returns:
    string giving the keywords (string) or None

    LexerTCL.initProperties

    initProperties()

    Public slot to initialize the properties.

    LexerTCL.isCommentStyle

    isCommentStyle(style)

    Public method to check, if a style is a comment style.

    Returns:
    flag indicating a comment style (boolean)

    LexerTCL.isStringStyle

    isStringStyle(style)

    Public method to check, if a style is a string style.

    Returns:
    flag indicating a string style (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.E4XML.DebuggerPropertiesWriter.html0000644000175000001440000000013212261331352030301 xustar000000000000000030 mtime=1388688106.608229113 30 atime=1389081084.916724365 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.E4XML.DebuggerPropertiesWriter.html0000644000175000001440000000456412261331352030044 0ustar00detlevusers00000000000000 eric4.E4XML.DebuggerPropertiesWriter

    eric4.E4XML.DebuggerPropertiesWriter

    Module implementing the writer class for writing an XML project debugger properties file.

    Global Attributes

    None

    Classes

    DebuggerPropertiesWriter Class implementing the writer class for writing an XML project debugger properties file.

    Functions

    None


    DebuggerPropertiesWriter

    Class implementing the writer class for writing an XML project debugger properties file.

    Derived from

    XMLWriterBase

    Class Attributes

    None

    Class Methods

    None

    Methods

    DebuggerPropertiesWriter Constructor
    writeXML Public method to write the XML to the file.

    Static Methods

    None

    DebuggerPropertiesWriter (Constructor)

    DebuggerPropertiesWriter(file, projectName)

    Constructor

    file
    open file (like) object for writing
    projectName
    name of the project (string)

    DebuggerPropertiesWriter.writeXML

    writeXML()

    Public method to write the XML to the file.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DataViews.PyProfileDialog.html0000644000175000001440000000013212261331352027372 xustar000000000000000030 mtime=1388688106.123228869 30 atime=1389081084.916724365 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.DataViews.PyProfileDialog.html0000644000175000001440000002274512261331352027136 0ustar00detlevusers00000000000000 eric4.DataViews.PyProfileDialog

    eric4.DataViews.PyProfileDialog

    Module implementing a dialog to display profile data.

    Global Attributes

    None

    Classes

    ProfileTreeWidgetItem Class implementing a custom QTreeWidgetItem to allow sorting on numeric values.
    PyProfileDialog Class implementing a dialog to display the results of a syntax check run.

    Functions

    None


    ProfileTreeWidgetItem

    Class implementing a custom QTreeWidgetItem to allow sorting on numeric values.

    Derived from

    QTreeWidgetItem

    Class Attributes

    None

    Class Methods

    None

    Methods

    __getNC Private method to get the value to compare on for the first column.
    __lt__ Public method to check, if the item is less than the other one.

    Static Methods

    None

    ProfileTreeWidgetItem.__getNC

    __getNC(itm)

    Private method to get the value to compare on for the first column.

    itm
    item to operate on (ProfileTreeWidgetItem)

    ProfileTreeWidgetItem.__lt__

    __lt__(other)

    Public method to check, if the item is less than the other one.

    other
    reference to item to compare against (ProfileTreeWidgetItem)
    Returns:
    true, if this item is less than other (boolean)


    PyProfileDialog

    Class implementing a dialog to display the results of a syntax check run.

    Derived from

    QDialog, Ui_PyProfileDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    PyProfileDialog Constructor
    __createResultItem Private method to create an entry in the result list.
    __createSummaryItem Private method to create an entry in the summary list.
    __eraseAll Private slot to handle the Erase All context menu action.
    __eraseProfile Private slot to handle the Erase Profile context menu action.
    __eraseTiming Private slot to handle the Erase Timing context menu action.
    __filter Private slot to handle the Exclude/Include Python Library context menu action.
    __finish Private slot called when the action finished or the user pressed the button.
    __populateLists Private method used to populate the listviews.
    __resortResultList Private method to resort the tree.
    __showContextMenu Private slot to show the context menu of the listview.
    __unfinish Private slot called to revert the effects of the __finish slot.
    on_buttonBox_clicked Private slot called by a button of the button box clicked.
    start Public slot to start the calculation of the profile data.

    Static Methods

    None

    PyProfileDialog (Constructor)

    PyProfileDialog(parent = None)

    Constructor

    parent
    parent widget (QWidget)

    PyProfileDialog.__createResultItem

    __createResultItem(calls, totalTime, totalTimePerCall, cumulativeTime, cumulativeTimePerCall, file, line, functionName)

    Private method to create an entry in the result list.

    calls
    number of calls (integer)
    totalTime
    total time (double)
    totalTimePerCall
    total time per call (double)
    cumulativeTime
    cumulative time (double)
    cumulativeTimePerCall
    cumulative time per call (double)
    file
    filename of file (string or QString)
    line
    linenumber (integer)
    functionName
    function name (string or QString)

    PyProfileDialog.__createSummaryItem

    __createSummaryItem(label, contents)

    Private method to create an entry in the summary list.

    label
    text of the first column (string or QString)
    contents
    text of the second column (string or QString)

    PyProfileDialog.__eraseAll

    __eraseAll()

    Private slot to handle the Erase All context menu action.

    PyProfileDialog.__eraseProfile

    __eraseProfile()

    Private slot to handle the Erase Profile context menu action.

    PyProfileDialog.__eraseTiming

    __eraseTiming()

    Private slot to handle the Erase Timing context menu action.

    PyProfileDialog.__filter

    __filter()

    Private slot to handle the Exclude/Include Python Library context menu action.

    PyProfileDialog.__finish

    __finish()

    Private slot called when the action finished or the user pressed the button.

    PyProfileDialog.__populateLists

    __populateLists(exclude = False)

    Private method used to populate the listviews.

    exclude
    flag indicating whether files residing in the Python library should be excluded

    PyProfileDialog.__resortResultList

    __resortResultList()

    Private method to resort the tree.

    PyProfileDialog.__showContextMenu

    __showContextMenu(coord)

    Private slot to show the context menu of the listview.

    coord
    the position of the mouse pointer (QPoint)

    PyProfileDialog.__unfinish

    __unfinish()

    Private slot called to revert the effects of the __finish slot.

    PyProfileDialog.on_buttonBox_clicked

    on_buttonBox_clicked(button)

    Private slot called by a button of the button box clicked.

    button
    button that was clicked (QAbstractButton)

    PyProfileDialog.start

    start(pfn, fn=None)

    Public slot to start the calculation of the profile data.

    pfn
    basename of the profiling file (string)
    fn
    file to display the profiling data for (string)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.Preferences.ConfigurationPages.ht0000644000175000001440000000013212261331354031260 xustar000000000000000030 mtime=1388688108.661230144 30 atime=1389081084.940724364 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/index-eric4.Preferences.ConfigurationPages.html0000644000175000001440000002120012261331354031336 0ustar00detlevusers00000000000000 eric4.Preferences.ConfigurationPages

    eric4.Preferences.ConfigurationPages

    Package implementing the various pages of the configuration dialog.

    Modules

    ApplicationPage Module implementing the Application configuration page.
    ConfigurationPageBase Module implementing the base class for all configuration pages.
    CorbaPage Module implementing the Corba configuration page.
    DebuggerGeneralPage Module implementing the Debugger General configuration page.
    DebuggerPython3Page Module implementing the Debugger Python3 configuration page.
    DebuggerPythonPage Module implementing the Debugger Python configuration page.
    DebuggerRubyPage Module implementing the Debugger Ruby configuration page.
    EditorAPIsPage Module implementing the Editor APIs configuration page.
    EditorAutocompletionPage Module implementing the Editor Autocompletion configuration page.
    EditorAutocompletionQScintillaPage Module implementing the QScintilla Autocompletion configuration page.
    EditorCalltipsPage Module implementing the Editor Calltips configuration page.
    EditorCalltipsQScintillaPage Module implementing the QScintilla Calltips configuration page.
    EditorExportersPage Module implementing the Editor Exporters configuration page.
    EditorFilePage Module implementing the Editor General configuration page.
    EditorGeneralPage Module implementing the Editor General configuration page.
    EditorHighlightersPage Module implementing the Editor Highlighter Associations configuration page.
    EditorHighlightingStylesPage Module implementing the Editor Highlighting Styles configuration page.
    EditorKeywordsPage Module implementing the editor highlighter keywords configuration page.
    EditorPropertiesPage Module implementing the Editor Properties configuration page.
    EditorSearchPage Module implementing the Editor Search configuration page.
    EditorSpellCheckingPage Module implementing the Editor Spellchecking configuration page.
    EditorStylesPage Module implementing the Editor Styles configuration page.
    EditorTypingPage Module implementing the Editor Typing configuration page.
    EmailPage Module implementing the Email configuration page.
    GraphicsPage Module implementing the Printer configuration page.
    HelpAppearancePage Module implementing the Help Viewers configuration page.
    HelpDocumentationPage Module implementing the Help Documentation configuration page.
    HelpViewersPage Module implementing the Help Viewers configuration page.
    HelpWebBrowserPage Module implementing the Help web browser configuration page.
    IconsPage Module implementing the Icons configuration page.
    IconsPreviewDialog Module implementing a dialog to preview the contents of an icon directory.
    InterfacePage Module implementing the Interface configuration page.
    MultiProjectPage Module implementing the Multi Project configuration page.
    NetworkPage Module implementing the Network configuration page.
    PluginManagerPage Module implementing the Plugin Manager configuration page.
    PrinterPage Module implementing the Printer configuration page.
    ProjectBrowserPage Module implementing the Project Browser configuration page.
    ProjectPage Module implementing the Project configuration page.
    PythonPage Module implementing the Python configuration page.
    QtPage Module implementing the Qt configuration page.
    ShellPage Module implementing the Shell configuration page.
    TasksPage Module implementing the Tasks configuration page.
    TemplatesPage Module implementing the Templates configuration page.
    TrayStarterPage Module implementing the tray starter configuration page.
    VcsPage Module implementing the VCS configuration page.
    ViewmanagerPage Module implementing the Viewmanager configuration page.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DebugClients.Python.eric4dbgstub.html0000644000175000001440000000013212261331354030665 xustar000000000000000030 mtime=1388688108.147229886 30 atime=1389081084.941724364 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.DebugClients.Python.eric4dbgstub.html0000644000175000001440000000630212261331354030420 0ustar00detlevusers00000000000000 eric4.DebugClients.Python.eric4dbgstub

    eric4.DebugClients.Python.eric4dbgstub

    Module implementing a debugger stub for remote debugging.

    Global Attributes

    __scriptname
    debugger
    ericpath
    modDir

    Classes

    None

    Functions

    initDebugger Module function to initialize a debugger for remote debugging.
    runcall Module function mimicing the Pdb interface.
    setScriptname Module function to set the scriptname to be reported back to the IDE.
    startDebugger Module function used to start the remote debugger.


    initDebugger

    initDebugger(kind = "standard")

    Module function to initialize a debugger for remote debugging.

    kind
    type of debugger ("standard" or "threads")
    Returns:
    flag indicating success (boolean)


    runcall

    runcall(func, *args)

    Module function mimicing the Pdb interface.

    func
    function to be called (function object)
    *args
    arguments being passed to func
    Returns:
    the function result


    setScriptname

    setScriptname(name)

    Module function to set the scriptname to be reported back to the IDE.

    name
    absolute pathname of the script (string)


    startDebugger

    startDebugger(enableTrace = True, exceptions = True, tracePython = False, redirect = True)

    Module function used to start the remote debugger.

    enableTrace=
    flag to enable the tracing function (boolean)
    exceptions=
    flag to enable exception reporting of the IDE (boolean)
    tracePython=
    flag to enable tracing into the Python library (boolean)
    redirect=
    flag indicating redirection of stdin, stdout and stderr (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Project.LexerAssociationDialog.html0000644000175000001440000000013112261331351030452 xustar000000000000000029 mtime=1388688105.76622869 30 atime=1389081084.941724364 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Project.LexerAssociationDialog.html0000644000175000001440000001252412261331351030211 0ustar00detlevusers00000000000000 eric4.Project.LexerAssociationDialog

    eric4.Project.LexerAssociationDialog

    Module implementing a dialog to enter lexer associations for the project.

    Global Attributes

    None

    Classes

    LexerAssociationDialog Class implementing a dialog to enter lexer associations for the project.

    Functions

    None


    LexerAssociationDialog

    Class implementing a dialog to enter lexer associations for the project.

    Derived from

    QDialog, Ui_LexerAssociationDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    LexerAssociationDialog Constructor
    on_addLexerButton_clicked Private slot to add the lexer association displayed to the list.
    on_deleteLexerButton_clicked Private slot to delete the currently selected lexer association of the list.
    on_editorLexerCombo_currentIndexChanged Private slot to handle the selection of a lexer.
    on_editorLexerList_itemActivated Private slot to handle the activated signal of the lexer association list.
    on_editorLexerList_itemClicked Private slot to handle the clicked signal of the lexer association list.
    transferData Public slot to transfer the associations into the projects data structure.

    Static Methods

    None

    LexerAssociationDialog (Constructor)

    LexerAssociationDialog(project, parent = None)

    Constructor

    project
    reference to the project object
    parent
    reference to the parent widget (QWidget)

    LexerAssociationDialog.on_addLexerButton_clicked

    on_addLexerButton_clicked()

    Private slot to add the lexer association displayed to the list.

    LexerAssociationDialog.on_deleteLexerButton_clicked

    on_deleteLexerButton_clicked()

    Private slot to delete the currently selected lexer association of the list.

    LexerAssociationDialog.on_editorLexerCombo_currentIndexChanged

    on_editorLexerCombo_currentIndexChanged(text)

    Private slot to handle the selection of a lexer.

    LexerAssociationDialog.on_editorLexerList_itemActivated

    on_editorLexerList_itemActivated(itm, column)

    Private slot to handle the activated signal of the lexer association list.

    itm
    reference to the selecte item (QTreeWidgetItem)
    column
    column the item was clicked or activated (integer) (ignored)

    LexerAssociationDialog.on_editorLexerList_itemClicked

    on_editorLexerList_itemClicked(itm, column)

    Private slot to handle the clicked signal of the lexer association list.

    itm
    reference to the selecte item (QTreeWidgetItem)
    column
    column the item was clicked or activated (integer) (ignored)

    LexerAssociationDialog.transferData

    transferData()

    Public slot to transfer the associations into the projects data structure.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.VCS.ProjectHelper.html0000644000175000001440000000013212261331351025652 xustar000000000000000030 mtime=1388688105.200228406 30 atime=1389081084.941724364 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.VCS.ProjectHelper.html0000644000175000001440000002507412261331351025414 0ustar00detlevusers00000000000000 eric4.VCS.ProjectHelper

    eric4.VCS.ProjectHelper

    Module implementing the base class of the VCS project helper.

    Global Attributes

    None

    Classes

    VcsProjectHelper Class implementing the base class of the VCS project helper.

    Functions

    None


    VcsProjectHelper

    Class implementing the base class of the VCS project helper.

    Derived from

    QObject

    Class Attributes

    None

    Class Methods

    None

    Methods

    VcsProjectHelper Constructor
    _vcsCheckout Protected slot used to create a local project from the repository.
    _vcsCleanup Protected slot used to cleanup the local project.
    _vcsCommand Protected slot used to execute an arbitrary vcs command.
    _vcsCommandOptions Protected slot to edit the VCS command options.
    _vcsCommit Protected slot used to commit changes to the local project to the repository.
    _vcsDiff Protected slot used to show the difference of the local project to the repository.
    _vcsExport Protected slot used to export a project from the repository.
    _vcsImport Protected slot used to import the local project into the repository.
    _vcsInfoDisplay Protected slot called to show some vcs information.
    _vcsLog Protected slot used to show the log of the local project.
    _vcsMerge Protected slot used to merge changes of a tag/revision into the local project.
    _vcsRemove Protected slot used to remove the local project from the repository.
    _vcsRevert Protected slot used to revert changes made to the local project.
    _vcsStatus Protected slot used to show the status of the local project.
    _vcsSwitch Protected slot used to switch the local project to another tag/branch.
    _vcsTag Protected slot used to tag the local project in the repository.
    _vcsUpdate Protected slot used to update the local project from the repository.
    initActions Public method to generate the action objects.
    initMenu Public method to generate the VCS menu.
    revertChanges Local function do revert the changes made to the project object.
    setObjects Public method to set references to the vcs and project objects.
    showMenu Public slot called before the vcs menu is shown.

    Static Methods

    None

    VcsProjectHelper (Constructor)

    VcsProjectHelper(vcsObject, projectObject, parent = None, name = None)

    Constructor

    vcsObject
    reference to the vcs object
    projectObject
    reference to the project object
    parent
    parent widget (QWidget)
    name
    name of this object (string or QString)

    VcsProjectHelper._vcsCheckout

    _vcsCheckout(export = False)

    Protected slot used to create a local project from the repository.

    export
    flag indicating whether an export or a checkout should be performed

    VcsProjectHelper._vcsCleanup

    _vcsCleanup()

    Protected slot used to cleanup the local project.

    VcsProjectHelper._vcsCommand

    _vcsCommand()

    Protected slot used to execute an arbitrary vcs command.

    VcsProjectHelper._vcsCommandOptions

    _vcsCommandOptions()

    Protected slot to edit the VCS command options.

    VcsProjectHelper._vcsCommit

    _vcsCommit()

    Protected slot used to commit changes to the local project to the repository.

    VcsProjectHelper._vcsDiff

    _vcsDiff()

    Protected slot used to show the difference of the local project to the repository.

    VcsProjectHelper._vcsExport

    _vcsExport()

    Protected slot used to export a project from the repository.

    VcsProjectHelper._vcsImport

    _vcsImport()

    Protected slot used to import the local project into the repository.

    NOTE: This does not necessarily make the local project a vcs controlled project. You may have to checkout the project from the repository in order to accomplish that.

    VcsProjectHelper._vcsInfoDisplay

    _vcsInfoDisplay()

    Protected slot called to show some vcs information.

    VcsProjectHelper._vcsLog

    _vcsLog()

    Protected slot used to show the log of the local project.

    VcsProjectHelper._vcsMerge

    _vcsMerge()

    Protected slot used to merge changes of a tag/revision into the local project.

    VcsProjectHelper._vcsRemove

    _vcsRemove()

    Protected slot used to remove the local project from the repository.

    Depending on the parameters set in the vcs object the project may be removed from the local disk as well.

    VcsProjectHelper._vcsRevert

    _vcsRevert()

    Protected slot used to revert changes made to the local project.

    VcsProjectHelper._vcsStatus

    _vcsStatus()

    Protected slot used to show the status of the local project.

    VcsProjectHelper._vcsSwitch

    _vcsSwitch()

    Protected slot used to switch the local project to another tag/branch.

    VcsProjectHelper._vcsTag

    _vcsTag()

    Protected slot used to tag the local project in the repository.

    VcsProjectHelper._vcsUpdate

    _vcsUpdate()

    Protected slot used to update the local project from the repository.

    VcsProjectHelper.initActions

    initActions()

    Public method to generate the action objects.

    VcsProjectHelper.initMenu

    initMenu(menu)

    Public method to generate the VCS menu.

    menu
    reference to the menu to be populated (QMenu)

    VcsProjectHelper.revertChanges

    revertChanges()

    Local function do revert the changes made to the project object.

    VcsProjectHelper.setObjects

    setObjects(vcsObject, projectObject)

    Public method to set references to the vcs and project objects.

    vcsObject
    reference to the vcs object
    projectObject
    reference to the project object

    VcsProjectHelper.showMenu

    showMenu()

    Public slot called before the vcs menu is shown.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.KdeQt.KQColorDialog.html0000644000175000001440000000013212261331351026113 xustar000000000000000030 mtime=1388688105.518228566 30 atime=1389081084.941724364 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.KdeQt.KQColorDialog.html0000644000175000001440000000422712261331351025652 0ustar00detlevusers00000000000000 eric4.KdeQt.KQColorDialog

    eric4.KdeQt.KQColorDialog

    Compatibility module to use the KDE Color Dialog instead of the Qt Color Dialog.

    Global Attributes

    __qtGetColor

    Classes

    None

    Functions

    __kdeGetColor Public function to pop up a modal dialog to select a color.
    getColor Public function to pop up a modal dialog to select a color.


    __kdeGetColor

    __kdeGetColor(initial = Qt.white, parent = None)

    Public function to pop up a modal dialog to select a color.

    initial
    initial color to select (QColor)
    parent
    parent widget of the dialog (QWidget)
    Returns:
    the selected color or the invalid color, if the user canceled the dialog (QColor)


    getColor

    getColor(initial = QColor(Qt.white), parent = None)

    Public function to pop up a modal dialog to select a color.

    initial
    initial color to select (QColor)
    parent
    parent widget of the dialog (QWidget)
    Returns:
    the selected color or the invalid color, if the user canceled the dialog (QColor)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.E4Gui.E4Led.html0000644000175000001440000000013212261331350024262 xustar000000000000000030 mtime=1388688104.359227984 30 atime=1389081084.941724364 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.E4Gui.E4Led.html0000644000175000001440000002150012261331350024012 0ustar00detlevusers00000000000000 eric4.E4Gui.E4Led

    eric4.E4Gui.E4Led

    Module implementing a LED widget.

    It was inspired by KLed.

    Global Attributes

    E4LedCircular
    E4LedRectangular

    Classes

    E4Led Class implementing a LED widget.

    Functions

    None


    E4Led

    Class implementing a LED widget.

    Derived from

    QWidget

    Class Attributes

    None

    Class Methods

    None

    Methods

    E4Led Constructor
    __getBestRoundSize Private method to calculate the width of the LED.
    __paintRectangular Private method to paint a rectangular raised LED.
    __paintRound Private method to paint a round raised LED.
    color Public method to return the LED color.
    darkFactor Public method to return the dark factor.
    isFramed Public method to return the framed state.
    isOn Public method to return the LED state.
    minimumSizeHint Public method to give a hint about our minimum size.
    off Public slot to set the LED to off.
    on Public slot to set the LED to on.
    paintEvent Protected slot handling the paint event.
    ratio Public method to return the LED rectangular ratio (width / height).
    setColor Public method to set the LED color.
    setDarkFactor Public method to set the dark factor.
    setFramed Public slot to set the __framedLed attribute.
    setOn Public method to set the LED to on.
    setRatio Public method to set the LED rectangular ratio (width / height).
    setShape Public method to set the LED shape.
    shape Public method to return the LED shape.
    sizeHint Public method to give a hint about our desired size.
    toggle Public slot to toggle the LED state.

    Static Methods

    None

    E4Led (Constructor)

    E4Led(parent = None, color = None, shape = E4LedCircular, rectRatio = 1)

    Constructor

    parent
    reference to parent widget (QWidget)
    color
    color of the LED (QColor)
    shape
    shape of the LED (E4LedCircular, E4LedRectangular)
    rectRation
    ratio width to height, if shape is rectangular (float)

    E4Led.__getBestRoundSize

    __getBestRoundSize()

    Private method to calculate the width of the LED.

    Returns:
    new width of the LED (integer)

    E4Led.__paintRectangular

    __paintRectangular()

    Private method to paint a rectangular raised LED.

    E4Led.__paintRound

    __paintRound()

    Private method to paint a round raised LED.

    E4Led.color

    color()

    Public method to return the LED color.

    Returns:
    color of the LED (QColor)

    E4Led.darkFactor

    darkFactor()

    Public method to return the dark factor.

    Returns:
    the current dark factor (integer)

    E4Led.isFramed

    isFramed()

    Public method to return the framed state.

    Returns:
    flag indicating the current framed state (boolean)

    E4Led.isOn

    isOn()

    Public method to return the LED state.

    Returns:
    flag indicating the light state (boolean)

    E4Led.minimumSizeHint

    minimumSizeHint()

    Public method to give a hint about our minimum size.

    Returns:
    size hint (QSize)

    E4Led.off

    off()

    Public slot to set the LED to off.

    E4Led.on

    on()

    Public slot to set the LED to on.

    E4Led.paintEvent

    paintEvent(evt)

    Protected slot handling the paint event.

    evt
    paint event object (QPaintEvent)
    Raises TypeError:
    The E4Led has an unsupported shape type.

    E4Led.ratio

    ratio()

    Public method to return the LED rectangular ratio (width / height).

    Returns:
    LED rectangular ratio (float)

    E4Led.setColor

    setColor(color)

    Public method to set the LED color.

    color
    color for the LED (QColor)

    E4Led.setDarkFactor

    setDarkFactor(darkfactor)

    Public method to set the dark factor.

    darkfactor
    value to set for the dark factor (integer)

    E4Led.setFramed

    setFramed(framed)

    Public slot to set the __framedLed attribute.

    framed
    flag indicating the framed state (boolean)

    E4Led.setOn

    setOn(state)

    Public method to set the LED to on.

    state
    new state of the LED (boolean)

    E4Led.setRatio

    setRatio(ratio)

    Public method to set the LED rectangular ratio (width / height).

    ratio
    new LED rectangular ratio (float)

    E4Led.setShape

    setShape(shape)

    Public method to set the LED shape.

    shape
    new LED shape (E4LedCircular, E4LedRectangular)

    E4Led.shape

    shape()

    Public method to return the LED shape.

    Returns:
    LED shape (E4LedCircular, E4LedRectangular)

    E4Led.sizeHint

    sizeHint()

    Public method to give a hint about our desired size.

    Returns:
    size hint (QSize)

    E4Led.toggle

    toggle()

    Public slot to toggle the LED state.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.Lexers.LexerOctave.html0000644000175000001440000000013212261331354030201 xustar000000000000000030 mtime=1388688108.552230089 30 atime=1389081084.941724364 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.Lexers.LexerOctave.html0000644000175000001440000000611212261331354027733 0ustar00detlevusers00000000000000 eric4.QScintilla.Lexers.LexerOctave

    eric4.QScintilla.Lexers.LexerOctave

    Module implementing a Octave lexer with some additional methods.

    Global Attributes

    None

    Classes

    LexerOctave Subclass to implement some additional lexer dependent methods.

    Functions

    None


    LexerOctave

    Subclass to implement some additional lexer dependent methods.

    Derived from

    QsciLexerOctave, Lexer

    Class Attributes

    None

    Class Methods

    None

    Methods

    LexerOctave Constructor
    defaultKeywords Public method to get the default keywords.
    isCommentStyle Public method to check, if a style is a comment style.
    isStringStyle Public method to check, if a style is a string style.

    Static Methods

    None

    LexerOctave (Constructor)

    LexerOctave(parent=None)

    Constructor

    parent
    parent widget of this lexer

    LexerOctave.defaultKeywords

    defaultKeywords(kwSet)

    Public method to get the default keywords.

    kwSet
    number of the keyword set (integer)
    Returns:
    string giving the keywords (string) or None

    LexerOctave.isCommentStyle

    isCommentStyle(style)

    Public method to check, if a style is a comment style.

    Returns:
    flag indicating a comment style (boolean)

    LexerOctave.isStringStyle

    isStringStyle(style)

    Public method to check, if a style is a string style.

    Returns:
    flag indicating a string style (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Graphics.UMLGraphicsView.html0000644000175000001440000000013212261331350027161 xustar000000000000000030 mtime=1388688104.862228236 30 atime=1389081084.942724364 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Graphics.UMLGraphicsView.html0000644000175000001440000002343012261331350026715 0ustar00detlevusers00000000000000 eric4.Graphics.UMLGraphicsView

    eric4.Graphics.UMLGraphicsView

    Module implementing a subclass of E4GraphicsView for our diagrams.

    Global Attributes

    None

    Classes

    UMLGraphicsView Class implementing a specialized E4GraphicsView for our diagrams.

    Functions

    None


    UMLGraphicsView

    Class implementing a specialized E4GraphicsView for our diagrams.

    Signals

    relayout()
    emitted to indicate a relayout of the diagram is requested

    Derived from

    E4GraphicsView

    Class Attributes

    None

    Class Methods

    None

    Methods

    UMLGraphicsView Constructor
    __alignShapes Private slot to align the selected shapes.
    __checkSizeActions Private slot to set the enabled state of the size actions.
    __decHeight Private method to handle the decrease height context menu entry.
    __decWidth Private method to handle the decrease width context menu entry.
    __deleteShape Private method to delete the selected shapes from the display.
    __incHeight Private method to handle the increase height context menu entry.
    __incWidth Private method to handle the increase width context menu entry.
    __initActions Private method to initialize the view actions.
    __printDiagram Private slot called to print the diagram.
    __printPreviewDiagram Private slot called to show a print preview of the diagram.
    __relayout Private method to handle the re-layout context menu entry.
    __saveImage Private method to handle the save context menu entry.
    __sceneChanged Private slot called when the scene changes.
    __setSize Private method to handle the set size context menu entry.
    __zoom Private method to handle the zoom context menu action.
    filteredItems Public method to filter a list of items.
    initToolBar Public method to populate a toolbar with our actions.
    selectItem Public method to select an item.
    selectItems Public method to select the given items.
    setDiagramName Public slot to set the diagram name.

    Static Methods

    None

    UMLGraphicsView (Constructor)

    UMLGraphicsView(scene, diagramName = "Unnamed", parent = None, name = None)

    Constructor

    scene
    reference to the scene object (QGraphicsScene)
    diagramName
    name of the diagram (string or QString)
    parent
    parent widget of the view (QWidget)
    name
    name of the view widget (QString or string)

    UMLGraphicsView.__alignShapes

    __alignShapes(alignment)

    Private slot to align the selected shapes.

    alignment
    alignment type (Qt.AlignmentFlag)

    UMLGraphicsView.__checkSizeActions

    __checkSizeActions()

    Private slot to set the enabled state of the size actions.

    UMLGraphicsView.__decHeight

    __decHeight()

    Private method to handle the decrease height context menu entry.

    UMLGraphicsView.__decWidth

    __decWidth()

    Private method to handle the decrease width context menu entry.

    UMLGraphicsView.__deleteShape

    __deleteShape()

    Private method to delete the selected shapes from the display.

    UMLGraphicsView.__incHeight

    __incHeight()

    Private method to handle the increase height context menu entry.

    UMLGraphicsView.__incWidth

    __incWidth()

    Private method to handle the increase width context menu entry.

    UMLGraphicsView.__initActions

    __initActions()

    Private method to initialize the view actions.

    UMLGraphicsView.__printDiagram

    __printDiagram()

    Private slot called to print the diagram.

    UMLGraphicsView.__printPreviewDiagram

    __printPreviewDiagram()

    Private slot called to show a print preview of the diagram.

    UMLGraphicsView.__relayout

    __relayout()

    Private method to handle the re-layout context menu entry.

    UMLGraphicsView.__saveImage

    __saveImage()

    Private method to handle the save context menu entry.

    UMLGraphicsView.__sceneChanged

    __sceneChanged(areas)

    Private slot called when the scene changes.

    areas
    list of rectangles that contain changes (list of QRectF)

    UMLGraphicsView.__setSize

    __setSize()

    Private method to handle the set size context menu entry.

    UMLGraphicsView.__zoom

    __zoom()

    Private method to handle the zoom context menu action.

    UMLGraphicsView.filteredItems

    filteredItems(items)

    Public method to filter a list of items.

    items
    list of items as returned by the scene object (QGraphicsItem)
    Returns:
    list of interesting collision items (QGraphicsItem)

    UMLGraphicsView.initToolBar

    initToolBar()

    Public method to populate a toolbar with our actions.

    Returns:
    the populated toolBar (QToolBar)

    UMLGraphicsView.selectItem

    selectItem(item)

    Public method to select an item.

    item
    item to be selected (QGraphicsItemItem)

    UMLGraphicsView.selectItems

    selectItems(items)

    Public method to select the given items.

    items
    list of items to be selected (list of QGraphicsItemItem)

    UMLGraphicsView.setDiagramName

    setDiagramName(name)

    Public slot to set the diagram name.

    name
    diagram name (string or QString)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Templates.TemplatePropertiesDialog.html0000644000175000001440000000013212261331350031356 xustar000000000000000030 mtime=1388688104.335227972 30 atime=1389081084.942724364 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Templates.TemplatePropertiesDialog.html0000644000175000001440000000767612261331350031130 0ustar00detlevusers00000000000000 eric4.Templates.TemplatePropertiesDialog

    eric4.Templates.TemplatePropertiesDialog

    Module implementing the templates properties dialog.

    Global Attributes

    None

    Classes

    TemplatePropertiesDialog Class implementing the templates properties dialog.

    Functions

    None


    TemplatePropertiesDialog

    Class implementing the templates properties dialog.

    Derived from

    QDialog, Ui_TemplatePropertiesDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    TemplatePropertiesDialog Constructor
    getData Public method to get the data entered into the dialog.
    keyPressEvent Re-implemented to handle the user pressing the escape key.
    on_helpButton_clicked Public slot to show some help.
    setSelectedGroup Public method to select a group.

    Static Methods

    None

    TemplatePropertiesDialog (Constructor)

    TemplatePropertiesDialog(parent, groupMode = False, itm = None)

    Constructor

    parent
    the parent widget (QWidget)
    groupMode
    flag indicating group mode (boolean)
    itm
    item (TemplateEntry or TemplateGroup) to read the data from

    TemplatePropertiesDialog.getData

    getData()

    Public method to get the data entered into the dialog.

    Returns:
    a tuple of two strings (name, language), if the dialog is in group mode, and a tuple of four strings (name, description,group name, template) otherwise.

    TemplatePropertiesDialog.keyPressEvent

    keyPressEvent(ev)

    Re-implemented to handle the user pressing the escape key.

    ev
    key event (QKeyEvent)

    TemplatePropertiesDialog.on_helpButton_clicked

    on_helpButton_clicked()

    Public slot to show some help.

    TemplatePropertiesDialog.setSelectedGroup

    setSelectedGroup(name)

    Public method to select a group.

    name
    name of the group to be selected (string or QString)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.UI.Info.html0000644000175000001440000000013112261331351023660 xustar000000000000000029 mtime=1388688105.08822835 30 atime=1389081084.942724364 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.UI.Info.html0000644000175000001440000000166312261331351023421 0ustar00detlevusers00000000000000 eric4.UI.Info

    eric4.UI.Info

    Module defining some informational strings.

    Global Attributes

    BugAddress
    Copyright
    FeatureAddress
    Homepage
    Program
    Version

    Classes

    None

    Functions

    None

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.Helpviewer.html0000644000175000001440000000013212261331354025674 xustar000000000000000030 mtime=1388688108.658230142 30 atime=1389081084.943724364 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/index-eric4.Helpviewer.html0000644000175000001440000001056412261331354025434 0ustar00detlevusers00000000000000 eric4.Helpviewer

    eric4.Helpviewer

    Package implementing a little web browser.

    The web browser is a little HTML browser for the display of HTML help files like the Qt Online Documentation and for browsing the internet. It may be used as a standalone version as well by using the eric4_helpviewer.py script found in the main eric4 installation directory.

    Packages

    AdBlock Package implementing the advertisments blocker functionality.
    Bookmarks Package implementing the bookmarks system.
    CookieJar Package implementing a cookie jar and related dialogs with models.
    History Package implementing the history system.
    Network Package containing network related modules.
    OpenSearch Package implementing the opensearch search engine interfaces.
    Passwords Package implementing the password management interface.

    Modules

    DownloadDialog Module implementing the download dialog.
    HTMLResources Module containing some HTML resources.
    HelpBrowserWV Module implementing the helpbrowser using QWebView.
    HelpClearPrivateDataDialog Module implementing a dialog to select which private data to clear.
    HelpDocsInstaller Module implementing a thread class populating and updating the QtHelp documentation database.
    HelpIndexWidget Module implementing a window for showing the QtHelp index.
    HelpLanguagesDialog Module implementing a dialog to configure the preferred languages.
    HelpSearchWidget Module implementing a window for showing the QtHelp index.
    HelpTocWidget Module implementing a window for showing the QtHelp TOC.
    HelpTopicDialog Module implementing a dialog to select a help topic to display.
    HelpWebSearchWidget Module implementing a web search widget for the web browser.
    HelpWindow Module implementing the helpviewer main window.
    JavaScriptResources Module containing some HTML resources.
    QtHelpDocumentationDialog Module implementing a dialog to manage the QtHelp documentation database.
    QtHelpFiltersDialog Module implementing a dialog to manage the QtHelp filters.
    SearchWidget Module implementing the search bar for the web browser.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.eric4_diff.html0000644000175000001440000000013212261331350024447 xustar000000000000000030 mtime=1388688104.220227914 30 atime=1389081084.943724364 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.eric4_diff.html0000644000175000001440000000327612261331350024211 0ustar00detlevusers00000000000000 eric4.eric4_diff

    eric4.eric4_diff

    Eric4 Diff

    This is the main Python script that performs the necessary initialization of the Diff module and starts the Qt event loop. This is a standalone version of the integrated Diff module.

    Global Attributes

    None

    Classes

    None

    Functions

    createMainWidget Function to create the main widget.
    main Main entry point into the application.


    createMainWidget

    createMainWidget(argv)

    Function to create the main widget.

    argv
    list of commandline parameters (list of strings)
    Returns:
    reference to the main widget (QWidget)


    main

    main()

    Main entry point into the application.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.Lexers.LexerXML.html0000644000175000001440000000013212261331354027420 xustar000000000000000030 mtime=1388688108.532230079 30 atime=1389081084.943724364 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.Lexers.LexerXML.html0000644000175000001440000000647412261331354027165 0ustar00detlevusers00000000000000 eric4.QScintilla.Lexers.LexerXML

    eric4.QScintilla.Lexers.LexerXML

    Module implementing a XML lexer with some additional methods.

    Global Attributes

    None

    Classes

    LexerXML Subclass to implement some additional lexer dependant methods.

    Functions

    None


    LexerXML

    Subclass to implement some additional lexer dependant methods.

    Derived from

    QsciLexerXML, Lexer

    Class Attributes

    None

    Class Methods

    None

    Methods

    LexerXML Constructor
    defaultKeywords Public method to get the default keywords.
    initProperties Public slot to initialize the properties.
    isCommentStyle Public method to check, if a style is a comment style.
    isStringStyle Public method to check, if a style is a string style.

    Static Methods

    None

    LexerXML (Constructor)

    LexerXML(parent=None)

    Constructor

    parent
    parent widget of this lexer

    LexerXML.defaultKeywords

    defaultKeywords(kwSet)

    Public method to get the default keywords.

    kwSet
    number of the keyword set (integer)
    Returns:
    string giving the keywords (string) or None

    LexerXML.initProperties

    initProperties()

    Public slot to initialize the properties.

    LexerXML.isCommentStyle

    isCommentStyle(style)

    Public method to check, if a style is a comment style.

    Returns:
    flag indicating a comment style (boolean)

    LexerXML.isStringStyle

    isStringStyle(style)

    Public method to check, if a style is a string style.

    Returns:
    flag indicating a string style (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.UI.Browser.html0000644000175000001440000000013112261331351024410 xustar000000000000000029 mtime=1388688105.12922837 30 atime=1389081084.945724364 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.UI.Browser.html0000644000175000001440000003115112261331351024144 0ustar00detlevusers00000000000000 eric4.UI.Browser

    eric4.UI.Browser

    Module implementing a browser with class browsing capabilities.

    Global Attributes

    None

    Classes

    Browser Class used to display a file system tree.

    Functions

    None


    Browser

    Class used to display a file system tree.

    Via the context menu that is displayed by a right click the user can select various actions on the selected file.

    Signals

    designerFile(string)
    emitted to open a Qt-Designer file
    linguistFile(string)
    emitted to open a Qt-Linguist (*.ts) file
    multiProjectFile(string)
    emitted to open an eric4 multi project file
    pixmapEditFile(string)
    emitted to edit a pixmap file
    pixmapFile(string)
    emitted to open a pixmap file
    projectFile(string)
    emitted to open an eric4 project file
    sourceFile(string, int, string)
    emitted to open a Python file at a line
    svgFile(string)
    emitted to open a SVG file
    trpreview(string list)
    emitted to preview a Qt-Linguist (*.qm) file
    unittestOpen(string)
    emitted to open a Python file for a unittest

    Derived from

    QTreeView

    Class Attributes

    None

    Class Methods

    None

    Methods

    Browser Constructor
    __addAsToplevelDir Private slot to handle the Add as toplevel directory popup menu entry.
    __configure Private method to open the configuration dialog.
    __createPopupMenus Private method to generate the various popup menus.
    __findInDirectory Private slot to handle the Find in directory popup menu entry.
    __newToplevelDir Private slot to handle the New toplevel directory popup menu entry.
    __refreshDirectory Private slot to refresh a directory entry.
    __removeToplevel Private slot to handle the Remove from toplevel popup menu entry.
    __replaceInDirectory Private slot to handle the Find&Replace in directory popup menu entry.
    _contextMenuRequested Protected slot to show the context menu of the listview.
    _copyToClipboard Protected method to copy the text shown for an entry to the clipboard.
    _editPixmap Protected slot to handle the open in icon editor popup menu entry.
    _init Protected method to perform initialization tasks common to this base class and all derived classes.
    _openItem Protected slot to handle the open popup menu entry.
    _resizeColumns Protected slot to resize the view when items get expanded or collapsed.
    _resort Protected slot to resort the tree.
    getSelectedItems Public method to get the selected items.
    getSelectedItemsCount Public method to get the count of items selected.
    getSelectedItemsCountCategorized Public method to get a categorized count of selected items.
    handlePreferencesChanged Public slot used to handle the preferencesChanged signal.
    handleProgramChange Public slot to handle the programChange signal.
    handleUnittest Public slot to handle the unittest popup menu entry.
    layoutDisplay Public slot to perform a layout operation.
    mouseDoubleClickEvent Protected method of QAbstractItemView.
    saveToplevelDirs Public slot to save the toplevel directories.
    wantedItem Public method to check type of an item.

    Static Methods

    None

    Browser (Constructor)

    Browser(parent = None)

    Constructor

    parent
    parent widget (QWidget)

    Browser.__addAsToplevelDir

    __addAsToplevelDir()

    Private slot to handle the Add as toplevel directory popup menu entry.

    Browser.__configure

    __configure()

    Private method to open the configuration dialog.

    Browser.__createPopupMenus

    __createPopupMenus()

    Private method to generate the various popup menus.

    Browser.__findInDirectory

    __findInDirectory()

    Private slot to handle the Find in directory popup menu entry.

    Browser.__newToplevelDir

    __newToplevelDir()

    Private slot to handle the New toplevel directory popup menu entry.

    Browser.__refreshDirectory

    __refreshDirectory()

    Private slot to refresh a directory entry.

    Browser.__removeToplevel

    __removeToplevel()

    Private slot to handle the Remove from toplevel popup menu entry.

    Browser.__replaceInDirectory

    __replaceInDirectory()

    Private slot to handle the Find&Replace in directory popup menu entry.

    Browser._contextMenuRequested

    _contextMenuRequested(coord)

    Protected slot to show the context menu of the listview.

    coord
    the position of the mouse pointer (QPoint)

    Browser._copyToClipboard

    _copyToClipboard()

    Protected method to copy the text shown for an entry to the clipboard.

    Browser._editPixmap

    _editPixmap()

    Protected slot to handle the open in icon editor popup menu entry.

    Browser._init

    _init()

    Protected method to perform initialization tasks common to this base class and all derived classes.

    Browser._openItem

    _openItem()

    Protected slot to handle the open popup menu entry.

    Browser._resizeColumns

    _resizeColumns(index)

    Protected slot to resize the view when items get expanded or collapsed.

    index
    index of item (QModelIndex)

    Browser._resort

    _resort()

    Protected slot to resort the tree.

    Browser.getSelectedItems

    getSelectedItems(filter=None)

    Public method to get the selected items.

    filter
    list of classes to check against
    Returns:
    list of selected items (list of BroweserItem)

    Browser.getSelectedItemsCount

    getSelectedItemsCount(filter=None)

    Public method to get the count of items selected.

    filter
    list of classes to check against
    Returns:
    count of items selected (integer)

    Browser.getSelectedItemsCountCategorized

    getSelectedItemsCountCategorized(filter=None)

    Public method to get a categorized count of selected items.

    filter
    list of classes to check against
    Returns:
    a dictionary containing the counts of items belonging to the individual filter classes. The keys of the dictionary are the unicode representation of the classes given in the filter (i.e. unicode(filterClass)). The dictionary contains an additional entry with key "sum", that stores the sum of all selected entries fulfilling the filter criteria.

    Browser.handlePreferencesChanged

    handlePreferencesChanged()

    Public slot used to handle the preferencesChanged signal.

    Browser.handleProgramChange

    handleProgramChange(fn)

    Public slot to handle the programChange signal.

    Browser.handleUnittest

    handleUnittest()

    Public slot to handle the unittest popup menu entry.

    Browser.layoutDisplay

    layoutDisplay()

    Public slot to perform a layout operation.

    Browser.mouseDoubleClickEvent

    mouseDoubleClickEvent(mouseEvent)

    Protected method of QAbstractItemView.

    Reimplemented to disable expanding/collapsing of items when double-clicking. Instead the double-clicked entry is opened.

    mouseEvent
    the mouse event (QMouseEvent)

    Browser.saveToplevelDirs

    saveToplevelDirs()

    Public slot to save the toplevel directories.

    Browser.wantedItem

    wantedItem(itm, filter=None)

    Public method to check type of an item.

    itm
    the item to check (BrowserItem)
    filter
    list of classes to check against
    Returns:
    flag indicating item is a valid type (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.DebugClients.Python.html0000644000175000001440000000013212261331354027412 xustar000000000000000030 mtime=1388688108.657230142 30 atime=1389081084.945724364 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/index-eric4.DebugClients.Python.html0000644000175000001440000000576012261331354027154 0ustar00detlevusers00000000000000 eric4.DebugClients.Python

    eric4.DebugClients.Python

    Package implementing the Python debugger

    It consists of different kinds of debug clients.

    Modules

    AsyncFile Module implementing an asynchronous file like socket interface for the debugger.
    AsyncIO Module implementing a base class of an asynchronous interface for the debugger.
    DCTestResult Module implementing a TestResult derivative for the eric4 debugger.
    DebugBase Module implementing the debug base class.
    DebugClient Module implementing a Qt free version of the debug client.
    DebugClientBase Module implementing a debug client base class.
    DebugClientCapabilities Module defining the debug clients capabilities.
    DebugClientThreads Module implementing the multithreaded version of the debug client.
    DebugConfig Module defining type strings for the different Python types.
    DebugProtocol Module defining the debug protocol tokens.
    DebugThread Module implementing the debug thread.
    FlexCompleter Word completion for the eric4 shell
    PyProfile Module defining additions to the standard Python profile.py.
    eric4dbgstub Module implementing a debugger stub for remote debugging.
    getpass Module implementing utilities to get a password and/or the current user name.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ConfigurationPages.Debugger0000644000175000001440000000013212261331353031263 xustar000000000000000030 mtime=1388688107.449229535 30 atime=1389081084.945724364 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.DebuggerGeneralPage.html0000644000175000001440000001110312261331353034047 0ustar00detlevusers00000000000000 eric4.Preferences.ConfigurationPages.DebuggerGeneralPage

    eric4.Preferences.ConfigurationPages.DebuggerGeneralPage

    Module implementing the Debugger General configuration page.

    Global Attributes

    None

    Classes

    DebuggerGeneralPage Class implementing the Debugger General configuration page.

    Functions

    create Module function to create the configuration page.


    DebuggerGeneralPage

    Class implementing the Debugger General configuration page.

    Derived from

    ConfigurationPageBase, Ui_DebuggerGeneralPage

    Class Attributes

    None

    Class Methods

    None

    Methods

    DebuggerGeneralPage Constructor
    on_addAllowedHostButton_clicked Private slot called to add a new allowed host.
    on_allowedHostsList_currentItemChanged Private method set the state of the edit and delete button.
    on_deleteAllowedHostButton_clicked Private slot called to delete an allowed host.
    on_editAllowedHostButton_clicked Private slot called to edit an allowed host.
    save Public slot to save the Debugger General (1) configuration.

    Static Methods

    None

    DebuggerGeneralPage (Constructor)

    DebuggerGeneralPage()

    Constructor

    DebuggerGeneralPage.on_addAllowedHostButton_clicked

    on_addAllowedHostButton_clicked()

    Private slot called to add a new allowed host.

    DebuggerGeneralPage.on_allowedHostsList_currentItemChanged

    on_allowedHostsList_currentItemChanged(current, previous)

    Private method set the state of the edit and delete button.

    current
    new current item (QListWidgetItem)
    previous
    previous current item (QListWidgetItem)

    DebuggerGeneralPage.on_deleteAllowedHostButton_clicked

    on_deleteAllowedHostButton_clicked()

    Private slot called to delete an allowed host.

    DebuggerGeneralPage.on_editAllowedHostButton_clicked

    on_editAllowedHostButton_clicked()

    Private slot called to edit an allowed host.

    DebuggerGeneralPage.save

    save()

    Public slot to save the Debugger General (1) configuration.



    create

    create(dlg)

    Module function to create the configuration page.

    dlg
    reference to the configuration dialog

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.uninstall.html0000644000175000001440000000013212261331350024462 xustar000000000000000030 mtime=1388688104.177227892 30 atime=1389081084.945724364 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.uninstall.html0000644000175000001440000000532212261331350024216 0ustar00detlevusers00000000000000 eric4.uninstall

    eric4.uninstall

    Uninstallation script for the eric4 IDE and all eric4 related tools.

    Global Attributes

    progName
    pyModDir

    Classes

    None

    Functions

    exit Exit the install script.
    initGlobals Sets the values of globals that need more than a simple assignment.
    main The main function of the script.
    uninstallEric Uninstall the eric files.
    usage Display a usage message and exit.
    wrapperName Create the platform specific name for the wrapper script.


    exit

    exit(rcode=0)

    Exit the install script.



    initGlobals

    initGlobals()

    Sets the values of globals that need more than a simple assignment.



    main

    main(argv)

    The main function of the script.

    argv is the list of command line arguments.



    uninstallEric

    uninstallEric()

    Uninstall the eric files.



    usage

    usage(rcode = 2)

    Display a usage message and exit.

    rcode is the return code passed back to the calling process.



    wrapperName

    wrapperName(dname, wfile)

    Create the platform specific name for the wrapper script.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.PluginManager.PluginInfoDialog.html0000644000175000001440000000013212261331351030374 xustar000000000000000030 mtime=1388688105.247228429 30 atime=1389081084.945724364 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.PluginManager.PluginInfoDialog.html0000644000175000001440000001155112261331351030131 0ustar00detlevusers00000000000000 eric4.PluginManager.PluginInfoDialog

    eric4.PluginManager.PluginInfoDialog

    Module implementing the Plugin Info Dialog.

    Global Attributes

    None

    Classes

    PluginInfoDialog Class implementing the Plugin Info Dialog.

    Functions

    None


    PluginInfoDialog

    Class implementing the Plugin Info Dialog.

    Derived from

    QDialog, Ui_PluginInfoDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    PluginInfoDialog Constructor
    __activatePlugin Private slot to handle the "Deactivate" context menu action.
    __createEntry Private method to create a list entry based on the provided info.
    __deactivatePlugin Private slot to handle the "Activate" context menu action.
    __populateList Private method to (re)populate the list of plugins.
    __showContextMenu Private slot to show the context menu of the listview.
    __showDetails Private slot to handle the "Show details" context menu action.
    on_pluginList_itemActivated Private slot to show details about a plugin.

    Static Methods

    None

    PluginInfoDialog (Constructor)

    PluginInfoDialog(pluginManager, parent = None)

    Constructor

    pluginManager
    reference to the plugin manager object
    parent
    parent of this dialog (QWidget)

    PluginInfoDialog.__activatePlugin

    __activatePlugin()

    Private slot to handle the "Deactivate" context menu action.

    PluginInfoDialog.__createEntry

    __createEntry(info)

    Private method to create a list entry based on the provided info.

    info
    tuple giving the info for the entry

    PluginInfoDialog.__deactivatePlugin

    __deactivatePlugin()

    Private slot to handle the "Activate" context menu action.

    PluginInfoDialog.__populateList

    __populateList()

    Private method to (re)populate the list of plugins.

    PluginInfoDialog.__showContextMenu

    __showContextMenu(coord)

    Private slot to show the context menu of the listview.

    coord
    the position of the mouse pointer (QPoint)

    PluginInfoDialog.__showDetails

    __showDetails()

    Private slot to handle the "Show details" context menu action.

    PluginInfoDialog.on_pluginList_itemActivated

    on_pluginList_itemActivated(item, column)

    Private slot to show details about a plugin.

    item
    reference to the selected item (QTreeWidgetItem)
    column
    column number (integer)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DebugClients.Python3.AsyncIO.html0000644000175000001440000000013112261331354027673 xustar000000000000000029 mtime=1388688108.01722982 30 atime=1389081084.945724364 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.DebugClients.Python3.AsyncIO.html0000644000175000001440000000714412261331354027434 0ustar00detlevusers00000000000000 eric4.DebugClients.Python3.AsyncIO

    eric4.DebugClients.Python3.AsyncIO

    Module implementing a base class of an asynchronous interface for the debugger.

    Global Attributes

    None

    Classes

    AsyncIO Class implementing asynchronous reading and writing.

    Functions

    None


    AsyncIO

    Class implementing asynchronous reading and writing.

    Derived from

    object

    Class Attributes

    None

    Class Methods

    None

    Methods

    AsyncIO Constructor
    disconnect Public method to disconnect any current connection.
    readReady Public method called when there is data ready to be read.
    setDescriptors Public method called to set the descriptors for the connection.
    write Public method to write a string.
    writeReady Public method called when we are ready to write data.

    Static Methods

    None

    AsyncIO (Constructor)

    AsyncIO()

    Constructor

    parent
    the optional parent of this object (QObject) (ignored)

    AsyncIO.disconnect

    disconnect()

    Public method to disconnect any current connection.

    AsyncIO.readReady

    readReady(fd)

    Public method called when there is data ready to be read.

    fd
    file descriptor of the file that has data to be read (int)

    AsyncIO.setDescriptors

    setDescriptors(rfd, wfd)

    Public method called to set the descriptors for the connection.

    rfd
    file descriptor of the input file (int)
    wfd
    file descriptor of the output file (int)

    AsyncIO.write

    write(s)

    Public method to write a string.

    s
    the data to be written (string)

    AsyncIO.writeReady

    writeReady(fd)

    Public method called when we are ready to write data.

    fd
    file descriptor of the file that has data to be written (int)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.KdeQt.KQProgressDialog.html0000644000175000001440000000013212261331351026641 xustar000000000000000030 mtime=1388688105.533228573 30 atime=1389081084.945724364 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.KdeQt.KQProgressDialog.html0000644000175000001440000001542512261331351026402 0ustar00detlevusers00000000000000 eric4.KdeQt.KQProgressDialog

    eric4.KdeQt.KQProgressDialog

    Compatibility module to use the KDE Progress Dialog instead of the Qt Progress Dialog.

    Global Attributes

    None

    Classes

    __kdeKQProgressDialog Compatibility class to use the KDE Progress Dialog instead of the Qt Progress Dialog.
    __qtKQProgressDialog Compatibility class to use the Qt Progress Dialog.

    Functions

    KQProgressDialog Public function to instantiate a progress dialog object.


    __kdeKQProgressDialog

    Compatibility class to use the KDE Progress Dialog instead of the Qt Progress Dialog.

    Derived from

    KProgressDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    __kdeKQProgressDialog Constructor
    reset Public slot to reset the progress bar.
    setLabel Public method to set the dialog's label.
    setMaximum Public slot to set the maximum value of the progress bar.
    setMinimum Public slot to set the minimum value of the progress bar.
    setValue Public slot to set the current value of the progress bar.
    wasCanceled Public slot to check, if the dialog was canceled.

    Static Methods

    None

    __kdeKQProgressDialog (Constructor)

    __kdeKQProgressDialog(labelText, cancelButtonText, minimum, maximum, parent = None, f = Qt.WindowFlags(Qt.Widget))

    Constructor

    labelText
    text to show in the progress dialog (QString)
    cancelButtonText
    text to show for the cancel button or None to disallow cancellation and to hide the cancel button (QString)
    minimum
    minimum value for the progress indicator (integer)
    maximum
    maximum value for the progress indicator (integer)
    parent
    parent of the progress dialog (QWidget)
    f
    window flags (ignored) (Qt.WindowFlags)

    __kdeKQProgressDialog.reset

    reset()

    Public slot to reset the progress bar.

    __kdeKQProgressDialog.setLabel

    setLabel(label)

    Public method to set the dialog's label.

    Note: This is doing nothing.

    label
    label to be set (QLabel)

    __kdeKQProgressDialog.setMaximum

    setMaximum(maximum)

    Public slot to set the maximum value of the progress bar.

    maximum
    maximum value for the progress indicator (integer)

    __kdeKQProgressDialog.setMinimum

    setMinimum(minimum)

    Public slot to set the minimum value of the progress bar.

    minimum
    minimum value for the progress indicator (integer)

    __kdeKQProgressDialog.setValue

    setValue(value)

    Public slot to set the current value of the progress bar.

    value
    progress value to set

    __kdeKQProgressDialog.wasCanceled

    wasCanceled()

    Public slot to check, if the dialog was canceled.

    Returns:
    flag indicating, if the dialog was canceled (boolean)


    __qtKQProgressDialog

    Compatibility class to use the Qt Progress Dialog.

    Derived from

    QProgressDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    None

    Static Methods

    None


    KQProgressDialog

    KQProgressDialog(labelText, cancelButtonText, minimum, maximum, parent = None, f = Qt.WindowFlags(Qt.Widget))

    Public function to instantiate a progress dialog object.

    labelText
    text to show in the progress dialog (QString)
    cancelButtonText
    text to show for the cancel button or None to disallow cancellation and to hide the cancel button (QString)
    minimum
    minimum value for the progress indicator (integer)
    maximum
    maximum value for the progress indicator (integer)
    parent
    reference to the parent widget (QWidget)
    f
    window flags for the dialog (Qt.WindowFlags)
    Returns:
    reference to the progress dialog object

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsPySvn.Config.html0000644000175000001440000000013212261331353031167 xustar000000000000000030 mtime=1388688107.218229419 30 atime=1389081084.945724364 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsPySvn.Config.html0000644000175000001440000000170012261331353030717 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsPySvn.Config

    eric4.Plugins.VcsPlugins.vcsPySvn.Config

    Module defining configuration variables for the subversion package

    Global Attributes

    ConfigSvnProtocols
    DefaultConfig
    DefaultIgnores

    Classes

    None

    Functions

    None

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.eric4.html0000644000175000001440000000013212261331350023457 xustar000000000000000030 mtime=1388688104.219227913 30 atime=1389081084.945724364 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.eric4.html0000644000175000001440000000520612261331350023214 0ustar00detlevusers00000000000000 eric4.eric4

    eric4.eric4

    Eric4 Python IDE

    This is the main Python script that performs the necessary initialization of the IDE and starts the Qt event loop.

    Global Attributes

    args
    mainWindow
    restartArgs
    restartArgsList
    splash

    Classes

    None

    Functions

    excepthook Global function to catch unhandled exceptions.
    handleSingleApplication Global function to handle the single application mode.
    main Main entry point into the application.
    uiStartUp Global function to finalize the start up of the main UI.


    excepthook

    excepthook(excType, excValue, tracebackobj)

    Global function to catch unhandled exceptions.

    excType
    exception type
    excValue
    exception value
    tracebackobj
    traceback object


    handleSingleApplication

    handleSingleApplication(ddindex)

    Global function to handle the single application mode.

    ddindex
    index of a '--' option in the options list


    main

    main()

    Main entry point into the application.



    uiStartUp

    uiStartUp()

    Global function to finalize the start up of the main UI.

    Note: It is activated by a zero timeout single-shot timer.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.E4Gui.E4SideBar.html0000644000175000001440000000013212261331350025067 xustar000000000000000030 mtime=1388688104.396228002 30 atime=1389081084.945724364 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.E4Gui.E4SideBar.html0000644000175000001440000005133612261331350024631 0ustar00detlevusers00000000000000 eric4.E4Gui.E4SideBar

    eric4.E4Gui.E4SideBar

    Module implementing a sidebar class.

    Global Attributes

    None

    Classes

    E4SideBar Class implementing a sidebar with a widget area, that is hidden or shown, if the current tab is clicked again.

    Functions

    None


    E4SideBar

    Class implementing a sidebar with a widget area, that is hidden or shown, if the current tab is clicked again.

    Derived from

    QWidget

    Class Attributes

    East
    North
    South
    Version
    West

    Class Methods

    None

    Methods

    E4SideBar Constructor
    __appFocusChanged Private slot to handle a change of the focus.
    __autoHideToggled Private slot to handle the toggling of the autohide button.
    __cancelDelayTimer Private method to cancel the current delay timer.
    __delayedAction Private slot to handle the firing of the delay timer.
    __expandIt Public method to expand the sidebar.
    __shrinkIt Private method to shrink the sidebar.
    __splitterMoved Private slot to react on splitter moves.
    addTab Public method to add a tab to the sidebar.
    clear Public method to remove all tabs.
    count Public method to get the number of tabs.
    currentIndex Public method to get the index of the current tab.
    currentWidget Public method to get a reference to the current widget.
    delay Public method to get the delay value for the expand/shrink delay in milliseconds.
    enterEvent Protected method to handle the mouse entering this widget.
    eventFilter Protected method to handle some events for the tabbar.
    expand Private method to record a expand request.
    indexOf Public method to get the index of the given widget.
    insertTab Public method to insert a tab into the sidebar.
    isAutoHiding Public method to check, if the auto hide function is active.
    isMinimized Public method to check the minimized state.
    isTabEnabled Public method to check, if a tab is enabled.
    leaveEvent Protected method to handle the mouse leaving this widget.
    nextTab Public slot used to show the next tab.
    orientation Public method to get the orientation of the sidebar.
    prevTab Public slot used to show the previous tab.
    removeTab Public method to remove a tab.
    restoreState Public method to restore the state of the sidebar.
    saveState Public method to save the state of the sidebar.
    setCurrentIndex Public slot to set the current index.
    setCurrentWidget Public slot to set the current widget.
    setDelay Public method to set the delay value for the expand/shrink delay in milliseconds.
    setOrientation Public method to set the orientation of the sidebar.
    setSplitter Public method to set the splitter managing the sidebar.
    setTabEnabled Public method to set the enabled state of a tab.
    setTabIcon Public method to set the icon of a tab.
    setTabText Public method to set the text of a tab.
    setTabToolTip Public method to set the tooltip text of a tab.
    setTabWhatsThis Public method to set the WhatsThis text of a tab.
    shrink Public method to record a shrink request.
    shutdown Public method to shut down the object.
    tabIcon Public method to get the icon of a tab.
    tabText Public method to get the text of a tab.
    tabToolTip Public method to get the tooltip text of a tab.
    tabWhatsThis Public method to get the WhatsThis text of a tab.
    widget Public method to get a reference to the widget associated with a tab.

    Static Methods

    None

    E4SideBar (Constructor)

    E4SideBar(orientation = None, delay = 200, parent = None)

    Constructor

    orientation
    orientation of the sidebar widget (North, East, South, West)
    delay
    value for the expand/shrink delay in milliseconds (integer)
    parent
    parent widget (QWidget)

    E4SideBar.__appFocusChanged

    __appFocusChanged(old, now)

    Private slot to handle a change of the focus.

    old
    reference to the widget, that lost focus (QWidget or None)
    now
    reference to the widget having the focus (QWidget or None)

    E4SideBar.__autoHideToggled

    __autoHideToggled(checked)

    Private slot to handle the toggling of the autohide button.

    checked
    flag indicating the checked state of the button (boolean)

    E4SideBar.__cancelDelayTimer

    __cancelDelayTimer()

    Private method to cancel the current delay timer.

    E4SideBar.__delayedAction

    __delayedAction()

    Private slot to handle the firing of the delay timer.

    E4SideBar.__expandIt

    __expandIt()

    Public method to expand the sidebar.

    E4SideBar.__shrinkIt

    __shrinkIt()

    Private method to shrink the sidebar.

    E4SideBar.__splitterMoved

    __splitterMoved(pos, index)

    Private slot to react on splitter moves.

    pos
    new position of the splitter handle (integer)
    index
    index of the splitter handle (integer)

    E4SideBar.addTab

    addTab(widget, iconOrLabel, label = None)

    Public method to add a tab to the sidebar.

    widget
    reference to the widget to add (QWidget)
    iconOrLabel
    reference to the icon or the labeltext of the tab (QIcon, string or QString)
    label
    the labeltext of the tab (string or QString) (only to be used, if the second parameter is a QIcon)

    E4SideBar.clear

    clear()

    Public method to remove all tabs.

    E4SideBar.count

    count()

    Public method to get the number of tabs.

    Returns:
    number of tabs in the sidebar (integer)

    E4SideBar.currentIndex

    currentIndex()

    Public method to get the index of the current tab.

    Returns:
    index of the current tab (integer)

    E4SideBar.currentWidget

    currentWidget()

    Public method to get a reference to the current widget.

    Returns:
    reference to the current widget (QWidget)

    E4SideBar.delay

    delay()

    Public method to get the delay value for the expand/shrink delay in milliseconds.

    Returns:
    value for the expand/shrink delay in milliseconds (integer)

    E4SideBar.enterEvent

    enterEvent(event)

    Protected method to handle the mouse entering this widget.

    event
    reference to the event (QEvent)

    E4SideBar.eventFilter

    eventFilter(obj, evt)

    Protected method to handle some events for the tabbar.

    obj
    reference to the object (QObject)
    evt
    reference to the event object (QEvent)
    Returns:
    flag indicating, if the event was handled (boolean)

    E4SideBar.expand

    expand()

    Private method to record a expand request.

    E4SideBar.indexOf

    indexOf(widget)

    Public method to get the index of the given widget.

    widget
    reference to the widget to get the index of (QWidget)
    Returns:
    index of the given widget (integer)

    E4SideBar.insertTab

    insertTab(index, widget, iconOrLabel, label = None)

    Public method to insert a tab into the sidebar.

    index
    the index to insert the tab at (integer)
    widget
    reference to the widget to insert (QWidget)
    iconOrLabel
    reference to the icon or the labeltext of the tab (QIcon, string or QString)
    label
    the labeltext of the tab (string or QString) (only to be used, if the second parameter is a QIcon)

    E4SideBar.isAutoHiding

    isAutoHiding()

    Public method to check, if the auto hide function is active.

    Returns:
    flag indicating the state of auto hiding (boolean)

    E4SideBar.isMinimized

    isMinimized()

    Public method to check the minimized state.

    Returns:
    flag indicating the minimized state (boolean)

    E4SideBar.isTabEnabled

    isTabEnabled(index)

    Public method to check, if a tab is enabled.

    index
    index of the tab to check (integer)
    Returns:
    flag indicating the enabled state (boolean)

    E4SideBar.leaveEvent

    leaveEvent(event)

    Protected method to handle the mouse leaving this widget.

    event
    reference to the event (QEvent)

    E4SideBar.nextTab

    nextTab()

    Public slot used to show the next tab.

    E4SideBar.orientation

    orientation()

    Public method to get the orientation of the sidebar.

    Returns:
    orientation of the sidebar (North, East, South, West)

    E4SideBar.prevTab

    prevTab()

    Public slot used to show the previous tab.

    E4SideBar.removeTab

    removeTab(index)

    Public method to remove a tab.

    index
    the index of the tab to remove (integer)

    E4SideBar.restoreState

    restoreState(state)

    Public method to restore the state of the sidebar.

    state
    byte array containing the saved state (QByteArray)
    Returns:
    flag indicating success (boolean)

    E4SideBar.saveState

    saveState()

    Public method to save the state of the sidebar.

    Returns:
    saved state as a byte array (QByteArray)

    E4SideBar.setCurrentIndex

    setCurrentIndex(index)

    Public slot to set the current index.

    index
    the index to set as the current index (integer)

    E4SideBar.setCurrentWidget

    setCurrentWidget(widget)

    Public slot to set the current widget.

    widget
    reference to the widget to become the current widget (QWidget)

    E4SideBar.setDelay

    setDelay(delay)

    Public method to set the delay value for the expand/shrink delay in milliseconds.

    delay
    value for the expand/shrink delay in milliseconds (integer)

    E4SideBar.setOrientation

    setOrientation(orient)

    Public method to set the orientation of the sidebar.

    orient
    orientation of the sidebar (North, East, South, West)

    E4SideBar.setSplitter

    setSplitter(splitter)

    Public method to set the splitter managing the sidebar.

    splitter
    reference to the splitter (QSplitter)

    E4SideBar.setTabEnabled

    setTabEnabled(index, enabled)

    Public method to set the enabled state of a tab.

    index
    index of the tab to set (integer)
    enabled
    enabled state to set (boolean)

    E4SideBar.setTabIcon

    setTabIcon(index, icon)

    Public method to set the icon of a tab.

    index
    index of the tab (integer)
    icon
    icon to be set (QIcon)

    E4SideBar.setTabText

    setTabText(index, text)

    Public method to set the text of a tab.

    index
    index of the tab (integer)
    text
    text to set (QString)

    E4SideBar.setTabToolTip

    setTabToolTip(index, tip)

    Public method to set the tooltip text of a tab.

    index
    index of the tab (integer)
    tooltip
    text text to set (QString)

    E4SideBar.setTabWhatsThis

    setTabWhatsThis(index, text)

    Public method to set the WhatsThis text of a tab.

    index
    index of the tab (integer)
    WhatsThis
    text text to set (QString)

    E4SideBar.shrink

    shrink()

    Public method to record a shrink request.

    E4SideBar.shutdown

    shutdown()

    Public method to shut down the object.

    This method does some preparations so the object can be deleted properly. It disconnects from the focusChanged signal in order to avoid trouble later on.

    E4SideBar.tabIcon

    tabIcon(index)

    Public method to get the icon of a tab.

    index
    index of the tab (integer)
    Returns:
    icon of the tab (QIcon)

    E4SideBar.tabText

    tabText(index)

    Public method to get the text of a tab.

    index
    index of the tab (integer)
    Returns:
    text of the tab (QString)

    E4SideBar.tabToolTip

    tabToolTip(index)

    Public method to get the tooltip text of a tab.

    index
    index of the tab (integer)
    Returns:
    tooltip text of the tab (QString)

    E4SideBar.tabWhatsThis

    tabWhatsThis(index)

    Public method to get the WhatsThis text of a tab.

    index
    index of the tab (integer)
    Returns:
    WhatsThis text of the tab (QString)

    E4SideBar.widget

    widget(index)

    Public method to get a reference to the widget associated with a tab.

    index
    index of the tab (integer)
    Returns:
    reference to the widget (QWidget)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DebugClients.Python3.DebugProtocol.html0000644000175000001440000000013212261331354031137 xustar000000000000000030 mtime=1388688108.058229841 30 atime=1389081084.945724364 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.DebugClients.Python3.DebugProtocol.html0000644000175000001440000000551112261331354030673 0ustar00detlevusers00000000000000 eric4.DebugClients.Python3.DebugProtocol

    eric4.DebugClients.Python3.DebugProtocol

    Module defining the debug protocol tokens.

    Global Attributes

    DebugAddress
    EOT
    PassiveStartup
    RequestBanner
    RequestBreak
    RequestBreakEnable
    RequestBreakIgnore
    RequestCapabilities
    RequestCompletion
    RequestContinue
    RequestCoverage
    RequestEnv
    RequestEval
    RequestExec
    RequestForkMode
    RequestForkTo
    RequestLoad
    RequestOK
    RequestProfile
    RequestRun
    RequestSetFilter
    RequestShutdown
    RequestStep
    RequestStepOut
    RequestStepOver
    RequestStepQuit
    RequestThreadList
    RequestThreadSet
    RequestUTPrepare
    RequestUTRun
    RequestUTStop
    RequestVariable
    RequestVariables
    RequestWatch
    RequestWatchEnable
    RequestWatchIgnore
    ResponseBPConditionError
    ResponseBanner
    ResponseCapabilities
    ResponseClearBreak
    ResponseClearWatch
    ResponseCompletion
    ResponseContinue
    ResponseException
    ResponseExit
    ResponseForkTo
    ResponseLine
    ResponseOK
    ResponseRaw
    ResponseStack
    ResponseSyntax
    ResponseThreadList
    ResponseThreadSet
    ResponseUTFinished
    ResponseUTPrepared
    ResponseUTStartTest
    ResponseUTStopTest
    ResponseUTTestErrored
    ResponseUTTestFailed
    ResponseVariable
    ResponseVariables
    ResponseWPConditionError

    Classes

    None

    Functions

    None

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsSubversion.SvnUti0000644000175000001440000000013212261331352031326 xustar000000000000000030 mtime=1388688106.768229193 30 atime=1389081084.945724364 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsSubversion.SvnUtilities.html0000644000175000001440000000470512261331352033243 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsSubversion.SvnUtilities

    eric4.Plugins.VcsPlugins.vcsSubversion.SvnUtilities

    Module implementing some common utility functions for the subversion package.

    Global Attributes

    None

    Classes

    None

    Functions

    amendConfig Module function to amend the config file.
    createDefaultConfig Module function to create a default config file suitable for eric.
    getConfigPath Module function to get the filename of the config file.
    getServersPath Module function to get the filename of the servers file.


    amendConfig

    amendConfig()

    Module function to amend the config file.



    createDefaultConfig

    createDefaultConfig()

    Module function to create a default config file suitable for eric.



    getConfigPath

    getConfigPath()

    Module function to get the filename of the config file.

    Returns:
    filename of the config file (string)


    getServersPath

    getServersPath()

    Module function to get the filename of the servers file.

    Returns:
    filename of the servers file (string)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsPySvn.SvnRepoBrow0000644000175000001440000000013212261331353031245 xustar000000000000000030 mtime=1388688107.256229438 30 atime=1389081084.946724363 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsPySvn.SvnRepoBrowserDialog.html0000644000175000001440000002110112261331353033567 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsPySvn.SvnRepoBrowserDialog

    eric4.Plugins.VcsPlugins.vcsPySvn.SvnRepoBrowserDialog

    Module implementing the subversion repository browser dialog.

    Global Attributes

    None

    Classes

    SvnRepoBrowserDialog Class implementing the subversion repository browser dialog.

    Functions

    None


    SvnRepoBrowserDialog

    Class implementing the subversion repository browser dialog.

    Derived from

    QDialog, SvnDialogMixin, Ui_SvnRepoBrowserDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnRepoBrowserDialog Constructor
    __generateItem Private method to generate a tree item in the repository tree.
    __listRepo Private method to perform the svn list command.
    __normalizeUrl Private method to normalite the url.
    __resizeColumns Private method to resize the tree columns.
    __resort Private method to resort the tree.
    __showError Private slot to show an error message.
    accept Public slot called when the dialog is accepted.
    getSelectedUrl Public method to retrieve the selected repository URL.
    on_repoTree_itemCollapsed Private slot called when an item is collapsed.
    on_repoTree_itemExpanded Private slot called when an item is expanded.
    on_repoTree_itemSelectionChanged Private slot called when the selection changes.
    on_urlCombo_currentIndexChanged Private slot called, when a new repository URL is entered or selected.
    start Public slot to start the svn info command.

    Static Methods

    None

    SvnRepoBrowserDialog (Constructor)

    SvnRepoBrowserDialog(vcs, mode = "browse", parent = None)

    Constructor

    vcs
    reference to the vcs object
    mode
    mode of the dialog (string, "browse" or "select")
    parent
    parent widget (QWidget)

    SvnRepoBrowserDialog.__generateItem

    __generateItem(parent, repopath, revision, author, size, date, nodekind, url)

    Private method to generate a tree item in the repository tree.

    parent
    parent of the item to be created (QTreeWidget or QTreeWidgetItem)
    repopath
    path of the item (string or QString)
    revision
    revision info (string or pysvn.opt_revision_kind)
    author
    author info (string or QString)
    size
    size info (integer)
    date
    date info (integer)
    nodekind
    node kind info (pysvn.node_kind)
    url
    url of the entry (string or QString)
    Returns:
    reference to the generated item (QTreeWidgetItem)

    SvnRepoBrowserDialog.__listRepo

    __listRepo(url, parent = None)

    Private method to perform the svn list command.

    url
    the repository URL to browser (string or QString)
    parent
    reference to the item, the data should be appended to (QTreeWidget or QTreeWidgetItem)

    SvnRepoBrowserDialog.__normalizeUrl

    __normalizeUrl(url)

    Private method to normalite the url.

    url
    the url to normalize (string or QString)
    Returns:
    normalized URL (QString)

    SvnRepoBrowserDialog.__resizeColumns

    __resizeColumns()

    Private method to resize the tree columns.

    SvnRepoBrowserDialog.__resort

    __resort()

    Private method to resort the tree.

    SvnRepoBrowserDialog.__showError

    __showError(msg)

    Private slot to show an error message.

    msg
    error message to show (string or QString)

    SvnRepoBrowserDialog.accept

    accept()

    Public slot called when the dialog is accepted.

    SvnRepoBrowserDialog.getSelectedUrl

    getSelectedUrl()

    Public method to retrieve the selected repository URL.

    Returns:
    the selected repository URL (QString)

    SvnRepoBrowserDialog.on_repoTree_itemCollapsed

    on_repoTree_itemCollapsed(item)

    Private slot called when an item is collapsed.

    item
    reference to the item to be collapsed (QTreeWidgetItem)

    SvnRepoBrowserDialog.on_repoTree_itemExpanded

    on_repoTree_itemExpanded(item)

    Private slot called when an item is expanded.

    item
    reference to the item to be expanded (QTreeWidgetItem)

    SvnRepoBrowserDialog.on_repoTree_itemSelectionChanged

    on_repoTree_itemSelectionChanged()

    Private slot called when the selection changes.

    SvnRepoBrowserDialog.on_urlCombo_currentIndexChanged

    on_urlCombo_currentIndexChanged(text)

    Private slot called, when a new repository URL is entered or selected.

    text
    the text of the current item (QString)

    SvnRepoBrowserDialog.start

    start(url)

    Public slot to start the svn info command.

    url
    the repository URL to browser (string or QString)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsSubversion.SvnPro0000644000175000001440000000013212261331352031325 xustar000000000000000030 mtime=1388688106.770229194 30 atime=1389081084.946724363 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsSubversion.SvnPropSetDialog.html0000644000175000001440000000550512261331352034003 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsSubversion.SvnPropSetDialog

    eric4.Plugins.VcsPlugins.vcsSubversion.SvnPropSetDialog

    Module implementing a dialog to enter the data for a new property.

    Global Attributes

    None

    Classes

    SvnPropSetDialog Class implementing a dialog to enter the data for a new property.

    Functions

    None


    SvnPropSetDialog

    Class implementing a dialog to enter the data for a new property.

    Derived from

    QDialog, Ui_SvnPropSetDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnPropSetDialog Constructor
    getData Public slot used to retrieve the data entered into the dialog.
    on_fileButton_clicked Private slot called by pressing the file selection button.

    Static Methods

    None

    SvnPropSetDialog (Constructor)

    SvnPropSetDialog(parent = None)

    Constructor

    parent
    parent widget (QWidget)

    SvnPropSetDialog.getData

    getData()

    Public slot used to retrieve the data entered into the dialog.

    Returns:
    tuple of three values giving the property name, a flag indicating a file was selected and the text of the property or the selected filename. (QString, boolean, QString)

    SvnPropSetDialog.on_fileButton_clicked

    on_fileButton_clicked()

    Private slot called by pressing the file selection button.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ShortcutsDialog.html0000644000175000001440000000013212261331350030027 xustar000000000000000030 mtime=1388688104.607228108 30 atime=1389081084.946724363 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ShortcutsDialog.html0000644000175000001440000002571012261331350027566 0ustar00detlevusers00000000000000 eric4.Preferences.ShortcutsDialog

    eric4.Preferences.ShortcutsDialog

    Module implementing a dialog for the configuration of eric4s keyboard shortcuts.

    Global Attributes

    None

    Classes

    ShortcutsDialog Class implementing a dialog for the configuration of eric4s keyboard shortcuts.

    Functions

    None


    ShortcutsDialog

    Class implementing a dialog for the configuration of eric4s keyboard shortcuts.

    Derived from

    QDialog, Ui_ShortcutsDialog

    Class Attributes

    noCheckRole
    objectNameRole
    objectTypeRole

    Class Methods

    None

    Methods

    ShortcutsDialog Constructor
    __checkShortcut Private method to check a keysequence for uniqueness.
    __generateCategoryItem Private method to generate a category item.
    __generateShortcutItem Private method to generate a keyboard shortcut item.
    __resizeColumns Private method to resize the list columns.
    __resort Private method to resort the tree.
    __saveCategoryActions Private method to save the actions for a category.
    __shortcutChanged Private slot to handle the shortcutChanged signal of the shortcut dialog.
    on_actionButton_toggled Private slot called, when the action radio button is toggled.
    on_buttonBox_accepted Private slot to handle the OK button press.
    on_clearSearchButton_clicked Private slot called by a click of the clear search button.
    on_searchEdit_textChanged Private slot called, when the text in the search edit changes.
    on_shortcutButton_toggled Private slot called, when the shortcuts radio button is toggled.
    on_shortcutsList_itemChanged Private slot to handle the edit of a shortcut key.
    on_shortcutsList_itemClicked Private slot to handle a click in the shortcuts list.
    on_shortcutsList_itemDoubleClicked Private slot to handle a double click in the shortcuts list.
    populate Public method to populate the dialog.

    Static Methods

    None

    ShortcutsDialog (Constructor)

    ShortcutsDialog(parent = None, name = None, modal = False)

    Constructor

    parent
    The parent widget of this dialog. (QWidget)
    name
    The name of this dialog. (QString)
    modal
    Flag indicating a modal dialog. (boolean)

    ShortcutsDialog.__checkShortcut

    __checkShortcut(keysequence, objectType, origTopItem)

    Private method to check a keysequence for uniqueness.

    keysequence
    the keysequence to check (QKeySequence)
    objectType
    type of the object (string). Entries with the same object type are not checked for uniqueness.
    origTopItem
    refrence to the parent of the item to be checked (QTreeWidgetItem)
    Returns:
    flag indicating uniqueness (boolean)

    ShortcutsDialog.__generateCategoryItem

    __generateCategoryItem(title)

    Private method to generate a category item.

    title
    title for the item (QString)
    Returns:
    reference to the category item (QTreeWidgetItem)

    ShortcutsDialog.__generateShortcutItem

    __generateShortcutItem(category, action, noCheck = False, objectType = None)

    Private method to generate a keyboard shortcut item.

    category
    reference to the category item (QTreeWidgetItem)
    action
    reference to the keyboard action (E4Action)
    noCheck=
    flag indicating that no uniqueness check should be performed (boolean)
    objectType=
    type of the object (string). Objects of the same type are not checked for duplicate shortcuts.

    ShortcutsDialog.__resizeColumns

    __resizeColumns()

    Private method to resize the list columns.

    ShortcutsDialog.__resort

    __resort()

    Private method to resort the tree.

    ShortcutsDialog.__saveCategoryActions

    __saveCategoryActions(category, actions)

    Private method to save the actions for a category.

    category
    reference to the category item (QTreeWidgetItem)
    actions
    list of actions for the category (list of E4Action)

    ShortcutsDialog.__shortcutChanged

    __shortcutChanged(keysequence, altKeysequence, noCheck, objectType)

    Private slot to handle the shortcutChanged signal of the shortcut dialog.

    keysequence
    the keysequence of the changed action (QKeySequence)
    altKeysequence
    the alternative keysequence of the changed action (QKeySequence)
    noCheck
    flag indicating that no uniqueness check should be performed (boolean)
    objectType
    type of the object (string).

    ShortcutsDialog.on_actionButton_toggled

    on_actionButton_toggled(checked)

    Private slot called, when the action radio button is toggled.

    checked
    state of the action radio button (boolean)

    ShortcutsDialog.on_buttonBox_accepted

    on_buttonBox_accepted()

    Private slot to handle the OK button press.

    ShortcutsDialog.on_clearSearchButton_clicked

    on_clearSearchButton_clicked()

    Private slot called by a click of the clear search button.

    ShortcutsDialog.on_searchEdit_textChanged

    on_searchEdit_textChanged(txt)

    Private slot called, when the text in the search edit changes.

    txt
    text of the search edit (QString)

    ShortcutsDialog.on_shortcutButton_toggled

    on_shortcutButton_toggled(checked)

    Private slot called, when the shortcuts radio button is toggled.

    checked
    state of the shortcuts radio button (boolean)

    ShortcutsDialog.on_shortcutsList_itemChanged

    on_shortcutsList_itemChanged(itm, column)

    Private slot to handle the edit of a shortcut key.

    itm
    reference to the item changed (QTreeWidgetItem)
    column
    column changed (integer)

    ShortcutsDialog.on_shortcutsList_itemClicked

    on_shortcutsList_itemClicked(itm, column)

    Private slot to handle a click in the shortcuts list.

    itm
    the list item that was clicked (QTreeWidgetItem)
    column
    the list item was clicked in (integer)

    ShortcutsDialog.on_shortcutsList_itemDoubleClicked

    on_shortcutsList_itemDoubleClicked(itm, column)

    Private slot to handle a double click in the shortcuts list.

    itm
    the list item that was double clicked (QTreeWidgetItem)
    column
    the list item was double clicked in (integer)

    ShortcutsDialog.populate

    populate()

    Public method to populate the dialog.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.Lexers.LexerSQL.html0000644000175000001440000000013212261331354027417 xustar000000000000000030 mtime=1388688108.544230085 30 atime=1389081084.946724363 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.Lexers.LexerSQL.html0000644000175000001440000000647412261331354027164 0ustar00detlevusers00000000000000 eric4.QScintilla.Lexers.LexerSQL

    eric4.QScintilla.Lexers.LexerSQL

    Module implementing a SQL lexer with some additional methods.

    Global Attributes

    None

    Classes

    LexerSQL Subclass to implement some additional lexer dependant methods.

    Functions

    None


    LexerSQL

    Subclass to implement some additional lexer dependant methods.

    Derived from

    QsciLexerSQL, Lexer

    Class Attributes

    None

    Class Methods

    None

    Methods

    LexerSQL Constructor
    defaultKeywords Public method to get the default keywords.
    initProperties Public slot to initialize the properties.
    isCommentStyle Public method to check, if a style is a comment style.
    isStringStyle Public method to check, if a style is a string style.

    Static Methods

    None

    LexerSQL (Constructor)

    LexerSQL(parent=None)

    Constructor

    parent
    parent widget of this lexer

    LexerSQL.defaultKeywords

    defaultKeywords(kwSet)

    Public method to get the default keywords.

    kwSet
    number of the keyword set (integer)
    Returns:
    string giving the keywords (string) or None

    LexerSQL.initProperties

    initProperties()

    Public slot to initialize the properties.

    LexerSQL.isCommentStyle

    isCommentStyle(style)

    Public method to check, if a style is a comment style.

    Returns:
    flag indicating a comment style (boolean)

    LexerSQL.isStringStyle

    isStringStyle(style)

    Public method to check, if a style is a string style.

    Returns:
    flag indicating a string style (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ToolConfigurationDialog.htm0000644000175000001440000000013212261331350031322 xustar000000000000000030 mtime=1388688104.596228103 30 atime=1389081084.946724363 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ToolConfigurationDialog.html0000644000175000001440000002616612261331350031243 0ustar00detlevusers00000000000000 eric4.Preferences.ToolConfigurationDialog

    eric4.Preferences.ToolConfigurationDialog

    Module implementing a configuration dialog for the tools menu.

    Global Attributes

    None

    Classes

    ToolConfigurationDialog Class implementing a configuration dialog for the tools menu.

    Functions

    None


    ToolConfigurationDialog

    Class implementing a configuration dialog for the tools menu.

    Derived from

    QDialog, Ui_ToolConfigurationDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    ToolConfigurationDialog Constructor
    __findModeIndex Private method to find the mode index by its short name.
    __swap Private method used two swap two list entries given by their index.
    __toolEntryChanged Private slot to perform actions when a tool entry was changed.
    getToollist Public method to retrieve the tools list.
    on_addButton_clicked Private slot to add a new entry.
    on_argumentsEdit_textChanged Private slot called, when the arguments string was changed.
    on_changeButton_clicked Private slot to change an entry.
    on_deleteButton_clicked Private slot to delete the selected entry.
    on_downButton_clicked Private slot to move an entry down in the list.
    on_executableButton_clicked Private slot to handle the executable selection via a file selection dialog.
    on_executableEdit_textChanged Private slot called, when the executable was changed.
    on_iconButton_clicked Private slot to handle the icon selection via a file selection dialog.
    on_iconEdit_textChanged Private slot called, when the icon path was changed.
    on_menuEdit_textChanged Private slot called, when the menu text was changed.
    on_newButton_clicked Private slot to clear all entry fields.
    on_redirectCombo_currentIndexChanged Private slot called, when the redirection mode was changed.
    on_separatorButton_clicked Private slot to add a menu separator.
    on_toolsList_currentRowChanged Private slot to set the lineedits depending on the selected entry.
    on_upButton_clicked Private slot to move an entry up in the list.

    Static Methods

    None

    ToolConfigurationDialog (Constructor)

    ToolConfigurationDialog(toollist, parent=None)

    Constructor

    toollist
    list of configured tools
    parent
    parent widget (QWidget)

    ToolConfigurationDialog.__findModeIndex

    __findModeIndex(shortName)

    Private method to find the mode index by its short name.

    shortName
    short name of the mode (string)
    Returns:
    index of the mode (integer)

    ToolConfigurationDialog.__swap

    __swap(itm1, itm2)

    Private method used two swap two list entries given by their index.

    itm1
    index of first entry (int)
    itm2
    index of second entry (int)

    ToolConfigurationDialog.__toolEntryChanged

    __toolEntryChanged()

    Private slot to perform actions when a tool entry was changed.

    ToolConfigurationDialog.getToollist

    getToollist()

    Public method to retrieve the tools list.

    Returns:
    a list of tuples containing the menu text, the executable, the executables arguments and a redirection flag

    ToolConfigurationDialog.on_addButton_clicked

    on_addButton_clicked()

    Private slot to add a new entry.

    ToolConfigurationDialog.on_argumentsEdit_textChanged

    on_argumentsEdit_textChanged(text)

    Private slot called, when the arguments string was changed.

    text
    the new text (QString) (ignored)

    ToolConfigurationDialog.on_changeButton_clicked

    on_changeButton_clicked()

    Private slot to change an entry.

    ToolConfigurationDialog.on_deleteButton_clicked

    on_deleteButton_clicked()

    Private slot to delete the selected entry.

    ToolConfigurationDialog.on_downButton_clicked

    on_downButton_clicked()

    Private slot to move an entry down in the list.

    ToolConfigurationDialog.on_executableButton_clicked

    on_executableButton_clicked()

    Private slot to handle the executable selection via a file selection dialog.

    ToolConfigurationDialog.on_executableEdit_textChanged

    on_executableEdit_textChanged(text)

    Private slot called, when the executable was changed.

    text
    the new text (QString) (ignored)

    ToolConfigurationDialog.on_iconButton_clicked

    on_iconButton_clicked()

    Private slot to handle the icon selection via a file selection dialog.

    ToolConfigurationDialog.on_iconEdit_textChanged

    on_iconEdit_textChanged(text)

    Private slot called, when the icon path was changed.

    text
    the new text (QString) (ignored)

    ToolConfigurationDialog.on_menuEdit_textChanged

    on_menuEdit_textChanged(text)

    Private slot called, when the menu text was changed.

    text
    the new text (QString) (ignored)

    ToolConfigurationDialog.on_newButton_clicked

    on_newButton_clicked()

    Private slot to clear all entry fields.

    ToolConfigurationDialog.on_redirectCombo_currentIndexChanged

    on_redirectCombo_currentIndexChanged(index)

    Private slot called, when the redirection mode was changed.

    index
    the selected mode index (integer) (ignored)

    ToolConfigurationDialog.on_separatorButton_clicked

    on_separatorButton_clicked()

    Private slot to add a menu separator.

    ToolConfigurationDialog.on_toolsList_currentRowChanged

    on_toolsList_currentRowChanged(row)

    Private slot to set the lineedits depending on the selected entry.

    row
    the row of the selected entry (integer)

    ToolConfigurationDialog.on_upButton_clicked

    on_upButton_clicked()

    Private slot to move an entry up in the list.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.Helpviewer.OpenSearch.html0000644000175000001440000000013212261331354027722 xustar000000000000000030 mtime=1388688108.660230143 30 atime=1389081084.947724363 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/index-eric4.Helpviewer.OpenSearch.html0000644000175000001440000000530612261331354027460 0ustar00detlevusers00000000000000 eric4.Helpviewer.OpenSearch

    eric4.Helpviewer.OpenSearch

    Package implementing the opensearch search engine interfaces.

    Modules

    OpenSearchDefaultEngines YouTube YouTube http://www.youtube.com/favicon.ico
    OpenSearchDialog Module implementing a dialog for the configuration of search engines.
    OpenSearchEditDialog Module implementing a dialog to edit the data of a search engine.
    OpenSearchEngine Module implementing the open search engine.
    OpenSearchEngineAction Module implementing a QAction subclass for open search.
    OpenSearchEngineModel Module implementing a model for search engines.
    OpenSearchManager Module implementing a manager for open search engines.
    OpenSearchReader Module implementing a reader for open search engine descriptions.
    OpenSearchWriter Module implementing a writer for open search engine descriptions.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsPySvn.Configurati0000644000175000001440000000032212261331353031272 xustar0000000000000000120 path=eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsPySvn.ConfigurationPage.SubversionPage.html 30 mtime=1388688107.276229448 30 atime=1389081084.948724363 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsPySvn.ConfigurationPage.Subversio0000644000175000001440000000563712261331353034150 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsPySvn.ConfigurationPage.SubversionPage

    eric4.Plugins.VcsPlugins.vcsPySvn.ConfigurationPage.SubversionPage

    Module implementing the Subversion configuration page.

    Global Attributes

    None

    Classes

    SubversionPage Class implementing the Subversion configuration page.

    Functions

    None


    SubversionPage

    Class implementing the Subversion configuration page.

    Derived from

    ConfigurationPageBase, Ui_SubversionPage

    Class Attributes

    None

    Class Methods

    None

    Methods

    SubversionPage Constructor
    on_configButton_clicked Private slot to edit the Subversion config file.
    on_serversButton_clicked Private slot to edit the Subversion servers file.
    save Public slot to save the Subversion configuration.

    Static Methods

    None

    SubversionPage (Constructor)

    SubversionPage(plugin)

    Constructor

    plugin
    reference to the plugin object

    SubversionPage.on_configButton_clicked

    on_configButton_clicked()

    Private slot to edit the Subversion config file.

    SubversionPage.on_serversButton_clicked

    on_serversButton_clicked()

    Private slot to edit the Subversion servers file.

    SubversionPage.save

    save()

    Public slot to save the Subversion configuration.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.History.HistoryMenu.html0000644000175000001440000000013212261331353030513 xustar000000000000000030 mtime=1388688107.816229719 30 atime=1389081084.948724363 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.History.HistoryMenu.html0000644000175000001440000002235212261331353030251 0ustar00detlevusers00000000000000 eric4.Helpviewer.History.HistoryMenu

    eric4.Helpviewer.History.HistoryMenu

    Module implementing the history menu.

    Global Attributes

    None

    Classes

    HistoryMenu Class implementing the history menu.
    HistoryMenuModel Class implementing a model for the history menu.

    Functions

    None


    HistoryMenu

    Class implementing the history menu.

    Signals

    newUrl(const QUrl&, const QString&)
    emitted to open a URL in a new tab
    openUrl(const QUrl&, const QString&)
    emitted to open a URL in the current tab

    Derived from

    E4ModelMenu

    Class Attributes

    None

    Class Methods

    None

    Methods

    HistoryMenu Constructor
    __activated Private slot handling the activated signal.
    __clearHistoryDialog Private slot to clear the history.
    __showHistoryDialog Private slot to show the history dialog.
    postPopulated Public method to add any actions after the tree.
    prePopulated Public method to add any actions before the tree.
    setInitialActions Public method to set the list of actions that should appear first in the menu.

    Static Methods

    None

    HistoryMenu (Constructor)

    HistoryMenu(parent = None)

    Constructor

    parent
    reference to the parent widget (QWidget)

    HistoryMenu.__activated

    __activated(idx)

    Private slot handling the activated signal.

    idx
    index of the activated item (QModelIndex)

    HistoryMenu.__clearHistoryDialog

    __clearHistoryDialog()

    Private slot to clear the history.

    HistoryMenu.__showHistoryDialog

    __showHistoryDialog()

    Private slot to show the history dialog.

    HistoryMenu.postPopulated

    postPopulated()

    Public method to add any actions after the tree.

    HistoryMenu.prePopulated

    prePopulated()

    Public method to add any actions before the tree.

    Returns:
    flag indicating if any actions were added

    HistoryMenu.setInitialActions

    setInitialActions(actions)

    Public method to set the list of actions that should appear first in the menu.

    actions
    list of initial actions (list of QAction)


    HistoryMenuModel

    Class implementing a model for the history menu.

    It maps the first bunch of items of the source model to the root.

    Derived from

    QAbstractProxyModel

    Class Attributes

    MOVEDROWS

    Class Methods

    None

    Methods

    HistoryMenuModel Constructor
    bumpedRows Public method to determine the number of rows moved to the root.
    columnCount Public method to get the number of columns.
    index Public method to create an index.
    mapFromSource Public method to map an index to the proxy model index.
    mapToSource Public method to map an index to the source model index.
    mimeData Public method to return the mime data.
    parent Public method to get the parent index.
    rowCount Public method to determine the number of rows.

    Static Methods

    None

    HistoryMenuModel (Constructor)

    HistoryMenuModel(sourceModel, parent = None)

    Constructor

    sourceModel
    reference to the source model (QAbstractItemModel)
    parent
    reference to the parent object (QObject)

    HistoryMenuModel.bumpedRows

    bumpedRows()

    Public method to determine the number of rows moved to the root.

    Returns:
    number of rows moved to the root (integer)

    HistoryMenuModel.columnCount

    columnCount(parent = QModelIndex())

    Public method to get the number of columns.

    parent
    index of parent (QModelIndex)
    Returns:
    number of columns (integer)

    HistoryMenuModel.index

    index(row, column, parent = QModelIndex())

    Public method to create an index.

    row
    row number for the index (integer)
    column
    column number for the index (integer)
    parent
    index of the parent item (QModelIndex)
    Returns:
    requested index (QModelIndex)

    HistoryMenuModel.mapFromSource

    mapFromSource(sourceIndex)

    Public method to map an index to the proxy model index.

    sourceIndex
    reference to a source model index (QModelIndex)
    Returns:
    proxy model index (QModelIndex)

    HistoryMenuModel.mapToSource

    mapToSource(proxyIndex)

    Public method to map an index to the source model index.

    proxyIndex
    reference to a proxy model index (QModelIndex)
    Returns:
    source model index (QModelIndex)

    HistoryMenuModel.mimeData

    mimeData(indexes)

    Public method to return the mime data.

    indexes
    list of indexes (QModelIndexList)
    Returns:
    mime data (QMimeData)

    HistoryMenuModel.parent

    parent(index)

    Public method to get the parent index.

    index
    index of item to get parent (QModelIndex)
    Returns:
    index of parent (QModelIndex)

    HistoryMenuModel.rowCount

    rowCount(parent = QModelIndex())

    Public method to determine the number of rows.

    parent
    index of parent (QModelIndex)
    Returns:
    number of rows (integer)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsPySvn.SvnMergeDia0000644000175000001440000000013212261331353031163 xustar000000000000000030 mtime=1388688107.221229421 30 atime=1389081084.948724363 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsPySvn.SvnMergeDialog.html0000644000175000001440000001001512261331353032357 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsPySvn.SvnMergeDialog

    eric4.Plugins.VcsPlugins.vcsPySvn.SvnMergeDialog

    Module implementing a dialog to enter the data for a merge operation.

    Global Attributes

    None

    Classes

    SvnMergeDialog Class implementing a dialog to enter the data for a merge operation.

    Functions

    None


    SvnMergeDialog

    Class implementing a dialog to enter the data for a merge operation.

    Derived from

    QDialog, Ui_SvnMergeDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnMergeDialog Constructor
    __enableOkButton Private method used to enable/disable the OK-button.
    getParameters Public method to retrieve the tag data.
    on_tag1Combo_editTextChanged Private slot to handle the tag1Combo editTextChanged signal.
    on_tag2Combo_editTextChanged Private slot to handle the tag2Combo editTextChanged signal.

    Static Methods

    None

    SvnMergeDialog (Constructor)

    SvnMergeDialog(mergelist1, mergelist2, targetlist, force = False, parent = None)

    Constructor

    mergelist1
    list of previously entered URLs/revisions (QStringList)
    mergelist2
    list of previously entered URLs/revisions (QStringList)
    targetlist
    list of previously entered targets (QStringList)
    force
    flag indicating a forced merge (boolean)
    parent
    parent widget (QWidget)

    SvnMergeDialog.__enableOkButton

    __enableOkButton()

    Private method used to enable/disable the OK-button.

    text
    ignored

    SvnMergeDialog.getParameters

    getParameters()

    Public method to retrieve the tag data.

    Returns:
    tuple naming two tag names or two revisions, a target and a flag indicating a forced merge (QString, QString, QString, boolean)

    SvnMergeDialog.on_tag1Combo_editTextChanged

    on_tag1Combo_editTextChanged(text)

    Private slot to handle the tag1Combo editTextChanged signal.

    SvnMergeDialog.on_tag2Combo_editTextChanged

    on_tag2Combo_editTextChanged(text)

    Private slot to handle the tag2Combo editTextChanged signal.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.E4XML.SessionWriter.html0000644000175000001440000000013212261331352026123 xustar000000000000000030 mtime=1388688106.515229066 30 atime=1389081084.948724363 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.E4XML.SessionWriter.html0000644000175000001440000000427412261331352025664 0ustar00detlevusers00000000000000 eric4.E4XML.SessionWriter

    eric4.E4XML.SessionWriter

    Module implementing the writer class for writing an XML project session file.

    Global Attributes

    None

    Classes

    SessionWriter Class implementing the writer class for writing an XML project session file.

    Functions

    None


    SessionWriter

    Class implementing the writer class for writing an XML project session file.

    Derived from

    XMLWriterBase

    Class Attributes

    None

    Class Methods

    None

    Methods

    SessionWriter Constructor
    writeXML Public method to write the XML to the file.

    Static Methods

    None

    SessionWriter (Constructor)

    SessionWriter(file, projectName)

    Constructor

    file
    open file (like) object for writing
    projectName
    name of the project (string) or None for the global session

    SessionWriter.writeXML

    writeXML()

    Public method to write the XML to the file.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ConfigurationPages.MultiPro0000644000175000001440000000013212261331353031312 xustar000000000000000030 mtime=1388688107.586229604 30 atime=1389081084.948724363 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.MultiProjectPage.html0000644000175000001440000000551012261331353033453 0ustar00detlevusers00000000000000 eric4.Preferences.ConfigurationPages.MultiProjectPage

    eric4.Preferences.ConfigurationPages.MultiProjectPage

    Module implementing the Multi Project configuration page.

    Global Attributes

    None

    Classes

    MultiProjectPage Class implementing the Multi Project configuration page.

    Functions

    create Module function to create the configuration page.


    MultiProjectPage

    Class implementing the Multi Project configuration page.

    Derived from

    ConfigurationPageBase, Ui_MultiProjectPage

    Class Attributes

    None

    Class Methods

    None

    Methods

    MultiProjectPage Constructor
    on_workspaceButton_clicked Private slot to display a directory selection dialog.
    save Public slot to save the Project configuration.

    Static Methods

    None

    MultiProjectPage (Constructor)

    MultiProjectPage()

    Constructor

    MultiProjectPage.on_workspaceButton_clicked

    on_workspaceButton_clicked()

    Private slot to display a directory selection dialog.

    MultiProjectPage.save

    save()

    Public slot to save the Project configuration.



    create

    create(dlg)

    Module function to create the configuration page.

    dlg
    reference to the configuration dialog

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DataViews.CodeMetrics.html0000644000175000001440000000013212261331352026542 xustar000000000000000030 mtime=1388688106.140228878 30 atime=1389081084.948724363 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.DataViews.CodeMetrics.html0000644000175000001440000002177212261331352026305 0ustar00detlevusers00000000000000 eric4.DataViews.CodeMetrics

    eric4.DataViews.CodeMetrics

    Module implementing a simple Python code metrics analyzer.

    Raises ValueError:
    the tokenize module is too old

    Global Attributes

    COMMENT
    DEDENT
    EMPTY
    INDENT
    KEYWORD
    NEWLINE
    spacer

    Classes

    Parser Class used to parse the source code of a Python file.
    SourceStat Class used to calculate and store the source code statistics.
    Token Class to store the token related infos.

    Functions

    analyze Module function used analyze the source of a Python file.
    main Modules main function used when called as a script.
    summarize Module function used to collect overall statistics.


    Parser

    Class used to parse the source code of a Python file.

    Derived from

    object

    Class Attributes

    None

    Class Methods

    None

    Methods

    __addToken Private method used to add a token to our list of tokens.
    __tokeneater Private method called by tokenize.tokenize.
    parse Public method used to parse the source code.

    Static Methods

    None

    Parser.__addToken

    __addToken(toktype, toktext, srow, scol, line)

    Private method used to add a token to our list of tokens.

    toktype
    the type of the token (int)
    toktext
    the text of the token (string)
    srow
    starting row of the token (int)
    scol
    starting column of the token (int)
    line
    logical line the token was found (string)

    Parser.__tokeneater

    __tokeneater(toktype, toktext, (srow, scol), (erow, ecol), line)

    Private method called by tokenize.tokenize.

    toktype
    the type of the token (int)
    toktext
    the text of the token (string)
    srow
    starting row of the token (int)
    scol
    starting column of the token (int)
    erow
    ending row of the token (int)
    ecol
    ending column of the token (int)
    line
    logical line the token was found (string)

    Parser.parse

    parse(text)

    Public method used to parse the source code.

    text
    the source code as read from a Python source file


    SourceStat

    Class used to calculate and store the source code statistics.

    Derived from

    object

    Class Attributes

    None

    Class Methods

    None

    Methods

    SourceStat Constructor
    dedent Public method used to decrement the indentation level.
    dump Public method used to format and print the collected statistics.
    getCounter Public method used to get a specific counter value.
    inc Public method used to increment the value of a key.
    indent Public method used to increment the indentation level.
    push Public method used to store an identifier.

    Static Methods

    None

    SourceStat (Constructor)

    SourceStat()

    Constructor

    SourceStat.dedent

    dedent(tok)

    Public method used to decrement the indentation level.

    tok
    the token to be processed (Token)

    SourceStat.dump

    dump()

    Public method used to format and print the collected statistics.

    SourceStat.getCounter

    getCounter(id, key)

    Public method used to get a specific counter value.

    id
    id of the counter (string)
    key
    key of the value to be retrieved (string)
    Returns:
    the value of the requested counter (int)

    SourceStat.inc

    inc(key, value=1)

    Public method used to increment the value of a key.

    key
    the key to be incremented
    value
    the increment (int)

    SourceStat.indent

    indent(tok)

    Public method used to increment the indentation level.

    tok
    a token (Token, ignored)

    SourceStat.push

    push(identifier, row)

    Public method used to store an identifier.

    identifier
    the identifier to be remembered (string)
    row
    the row, the identifier is defined in (int)


    Token

    Class to store the token related infos.

    Derived from

    object

    Class Attributes

    None

    Class Methods

    None

    Methods

    Token Constructor

    Static Methods

    None

    Token (Constructor)

    Token(**kw)

    Constructor

    **kw
    list of key, value pairs


    analyze

    analyze(filename, total)

    Module function used analyze the source of a Python file.

    filename
    name of the Python file to be analyzed (string)
    total
    dictionary receiving the overall code statistics
    Returns:
    a statistics object with the collected code statistics (SourceStat)


    main

    main()

    Modules main function used when called as a script.

    This function simply loops over all files given on the commandline and collects the individual and overall source code statistics.



    summarize

    summarize(total, key, value)

    Module function used to collect overall statistics.

    total
    the dictionary for the overall statistics
    key
    the key to be summarize
    value
    the value to be added to the overall statistics
    Returns:
    the value added to the overall statistics

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.Helpviewer.CookieJar.html0000644000175000001440000000013212261331354027541 xustar000000000000000030 mtime=1388688108.661230144 30 atime=1389081084.948724363 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/index-eric4.Helpviewer.CookieJar.html0000644000175000001440000000347012261331354027277 0ustar00detlevusers00000000000000 eric4.Helpviewer.CookieJar

    eric4.Helpviewer.CookieJar

    Package implementing a cookie jar and related dialogs with models.

    Modules

    CookieDetailsDialog Module implementing a dialog showing the cookie data.
    CookieExceptionsModel Module implementing the cookie exceptions model.
    CookieJar Module implementing a QNetworkCookieJar subclass with various accept policies.
    CookieModel Module implementing the cookie model.
    CookiesConfigurationDialog Module implementing the cookies configuration dialog.
    CookiesDialog Module implementing a dialog to show all cookies.
    CookiesExceptionsDialog Module implementing a dialog for the configuration of cookie exceptions.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.QtHelpFiltersDialog.html0000644000175000001440000000013212261331351030431 xustar000000000000000030 mtime=1388688105.289228451 30 atime=1389081084.948724363 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.QtHelpFiltersDialog.html0000644000175000001440000001247212261331351030171 0ustar00detlevusers00000000000000 eric4.Helpviewer.QtHelpFiltersDialog

    eric4.Helpviewer.QtHelpFiltersDialog

    Module implementing a dialog to manage the QtHelp filters.

    Global Attributes

    None

    Classes

    QtHelpFiltersDialog Class implementing a dialog to manage the QtHelp filters

    Functions

    None


    QtHelpFiltersDialog

    Class implementing a dialog to manage the QtHelp filters

    Derived from

    QDialog, Ui_QtHelpFiltersDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    QtHelpFiltersDialog Constructor
    __removeAttributes Private method to remove attributes from the Qt Help database.
    on_addButton_clicked Private slot to add a new filter.
    on_attributesList_itemChanged Private slot to handle a change of an attribute.
    on_buttonBox_accepted Private slot to update the database, if the dialog is accepted.
    on_filtersList_currentItemChanged Private slot to update the attributes depending on the current filter.
    on_removeAttributeButton_clicked Private slot to remove a filter attribute.
    on_removeButton_clicked Private slot to remove a filter.

    Static Methods

    None

    QtHelpFiltersDialog (Constructor)

    QtHelpFiltersDialog(engine, parent = None)

    Constructor

    engine
    reference to the help engine (QHelpEngine)
    parent
    reference to the parent widget (QWidget)

    QtHelpFiltersDialog.__removeAttributes

    __removeAttributes()

    Private method to remove attributes from the Qt Help database.

    QtHelpFiltersDialog.on_addButton_clicked

    on_addButton_clicked()

    Private slot to add a new filter.

    QtHelpFiltersDialog.on_attributesList_itemChanged

    on_attributesList_itemChanged(item, column)

    Private slot to handle a change of an attribute.

    item
    reference to the changed item (QTreeWidgetItem)
    column
    column containing the change (integer)

    QtHelpFiltersDialog.on_buttonBox_accepted

    on_buttonBox_accepted()

    Private slot to update the database, if the dialog is accepted.

    QtHelpFiltersDialog.on_filtersList_currentItemChanged

    on_filtersList_currentItemChanged(current, previous)

    Private slot to update the attributes depending on the current filter.

    current
    reference to the current item (QListWidgetitem)
    previous
    reference to the previous current item (QListWidgetItem)

    QtHelpFiltersDialog.on_removeAttributeButton_clicked

    on_removeAttributeButton_clicked()

    Private slot to remove a filter attribute.

    QtHelpFiltersDialog.on_removeButton_clicked

    on_removeButton_clicked()

    Private slot to remove a filter.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsSubversion.SvnSwi0000644000175000001440000000013212261331352031327 xustar000000000000000030 mtime=1388688106.958229289 30 atime=1389081084.949724364 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsSubversion.SvnSwitchDialog.html0000644000175000001440000000504512261331352033647 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsSubversion.SvnSwitchDialog

    eric4.Plugins.VcsPlugins.vcsSubversion.SvnSwitchDialog

    Module implementing a dialog to enter the data for a switch operation.

    Global Attributes

    None

    Classes

    SvnSwitchDialog Class implementing a dialog to enter the data for a switch operation.

    Functions

    None


    SvnSwitchDialog

    Class implementing a dialog to enter the data for a switch operation.

    Derived from

    QDialog, Ui_SvnSwitchDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnSwitchDialog Constructor
    getParameters Public method to retrieve the tag data.

    Static Methods

    None

    SvnSwitchDialog (Constructor)

    SvnSwitchDialog(taglist, reposURL, standardLayout, parent = None)

    Constructor

    taglist
    list of previously entered tags (QStringList)
    reposURL
    repository path (QString or string) or None
    standardLayout
    flag indicating the layout of the repository (boolean)
    parent
    parent widget (QWidget)

    SvnSwitchDialog.getParameters

    getParameters()

    Public method to retrieve the tag data.

    Returns:
    tuple of QString and int (tag, tag type)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.DebugClients.Python3.html0000644000175000001440000000013212261331354027475 xustar000000000000000030 mtime=1388688108.658230142 30 atime=1389081084.949724364 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/index-eric4.DebugClients.Python3.html0000644000175000001440000000600712261331354027232 0ustar00detlevusers00000000000000 eric4.DebugClients.Python3

    eric4.DebugClients.Python3

    Package implementing the Python3 debugger

    It consists of different kinds of debug clients.

    Modules

    AsyncFile Module implementing an asynchronous file like socket interface for the debugger.
    AsyncIO Module implementing a base class of an asynchronous interface for the debugger.
    DCTestResult Module implementing a TestResult derivative for the eric4 debugger.
    DebugBase Module implementing the debug base class.
    DebugClient Module implementing a non-threaded variant of the debug client.
    DebugClientBase Module implementing a debug client base class.
    DebugClientCapabilities Module defining the debug clients capabilities.
    DebugClientThreads Module implementing the multithreaded version of the debug client.
    DebugConfig Module defining type strings for the different Python types.
    DebugProtocol Module defining the debug protocol tokens.
    DebugThread Module implementing the debug thread.
    FlexCompleter Word completion for the eric4 shell
    PyProfile Module defining additions to the standard Python profile.py.
    eric4dbgstub Module implementing a debugger stub for remote debugging.
    getpass Module implementing utilities to get a password and/or the current user name.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.Utilities.ClassBrowsers.html0000644000175000001440000000013212261331354030330 xustar000000000000000030 mtime=1388688108.660230143 30 atime=1389081084.949724364 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/index-eric4.Utilities.ClassBrowsers.html0000644000175000001440000000321212261331354030060 0ustar00detlevusers00000000000000 eric4.Utilities.ClassBrowsers

    eric4.Utilities.ClassBrowsers

    Package implementing class browsers for various languages.

    Currently it offers class browser support for the following programming languages.

    • CORBA IDL
    • Python
    • Ruby

    Modules

    ClbrBaseClasses Module implementing base classes used by the various class browsers.
    ClassBrowsers Package implementing class browsers for various languages.
    idlclbr Parse a CORBA IDL file and retrieve modules, interfaces, methods and attributes.
    pyclbr Parse a Python file and retrieve classes, functions/methods and attributes.
    rbclbr Parse a Ruby file and retrieve classes, modules, methods and attributes.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.Bookmarks.DefaultBookmarks.h0000644000175000001440000000013212261331353031234 xustar000000000000000030 mtime=1388688107.866229744 30 atime=1389081084.949724364 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.Bookmarks.DefaultBookmarks.html0000644000175000001440000000155112261331353031505 0ustar00detlevusers00000000000000 eric4.Helpviewer.Bookmarks.DefaultBookmarks

    eric4.Helpviewer.Bookmarks.DefaultBookmarks

    Module defining the default bookmarks.

    Global Attributes

    DefaultBookmarks

    Classes

    None

    Functions

    None

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.E4Gui.E4TreeView.html0000644000175000001440000000013212261331350025310 xustar000000000000000030 mtime=1388688104.459228034 30 atime=1389081084.949724364 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.E4Gui.E4TreeView.html0000644000175000001440000000454712261331350025054 0ustar00detlevusers00000000000000 eric4.E4Gui.E4TreeView

    eric4.E4Gui.E4TreeView

    Module implementing specialized tree views.

    Global Attributes

    None

    Classes

    E4TreeView Class implementing a tree view supporting removal of entries.

    Functions

    None


    E4TreeView

    Class implementing a tree view supporting removal of entries.

    Derived from

    QTreeView

    Class Attributes

    None

    Class Methods

    None

    Methods

    keyPressEvent Protected method implementing special key handling.
    removeAll Public method to clear the view.
    removeSelected Public method to remove the selected entries.

    Static Methods

    None

    E4TreeView.keyPressEvent

    keyPressEvent(evt)

    Protected method implementing special key handling.

    evt
    reference to the event (QKeyEvent)

    E4TreeView.removeAll

    removeAll()

    Public method to clear the view.

    E4TreeView.removeSelected

    removeSelected()

    Public method to remove the selected entries.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.Helpviewer.AdBlock.html0000644000175000001440000000013212261331354027172 xustar000000000000000030 mtime=1388688108.660230143 30 atime=1389081084.951724364 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/index-eric4.Helpviewer.AdBlock.html0000644000175000001440000000406612261331354026732 0ustar00detlevusers00000000000000 eric4.Helpviewer.AdBlock

    eric4.Helpviewer.AdBlock

    Package implementing the advertisments blocker functionality.

    Modules

    AdBlockAccessHandler Module implementing a scheme access handler for AdBlock URLs.
    AdBlockBlockedNetworkReply Module implementing a QNetworkReply subclass reporting a blocked request.
    AdBlockDialog Module implementing the AdBlock configuration dialog.
    AdBlockManager Module implementing the AdBlock manager.
    AdBlockModel Module implementing a model for the AdBlock dialog.
    AdBlockNetwork Module implementing the network block class.
    AdBlockPage Module implementing a class to apply AdBlock rules to a web page.
    AdBlockRule Module implementing the AdBlock rule class.
    AdBlockSubscription Module implementing the AdBlock subscription class.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ConfigurationPages.Configur0000644000175000001440000000031212261331353031313 xustar0000000000000000112 path=eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.ConfigurationPageBase.html 30 mtime=1388688107.481229551 30 atime=1389081084.951724364 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.ConfigurationPageBase.ht0000644000175000001440000001171212261331353034104 0ustar00detlevusers00000000000000 eric4.Preferences.ConfigurationPages.ConfigurationPageBase

    eric4.Preferences.ConfigurationPages.ConfigurationPageBase

    Module implementing the base class for all configuration pages.

    Global Attributes

    None

    Classes

    ConfigurationPageBase Class implementing the base class for all configuration pages.

    Functions

    None


    ConfigurationPageBase

    Class implementing the base class for all configuration pages.

    Derived from

    QWidget

    Class Attributes

    None

    Class Methods

    None

    Methods

    ConfigurationPageBase Constructor
    initColour Public method to initialize a colour selection button.
    polishPage Public slot to perform some polishing actions.
    saveState Public method to save the current state of the widget.
    selectColour Public method used by the colour selection buttons.
    selectFont Public method used by the font selection buttons.
    setState Public method to set the state of the widget.

    Static Methods

    None

    ConfigurationPageBase (Constructor)

    ConfigurationPageBase()

    Constructor

    ConfigurationPageBase.initColour

    initColour(colourstr, button, prefMethod)

    Public method to initialize a colour selection button.

    colourstr
    colour to be set (string)
    button
    reference to a QButton to show the colour on
    prefMethod
    preferences method to get the colour
    Returns:
    reference to the created colour (QColor)

    ConfigurationPageBase.polishPage

    polishPage()

    Public slot to perform some polishing actions.

    ConfigurationPageBase.saveState

    saveState()

    Public method to save the current state of the widget.

    ConfigurationPageBase.selectColour

    selectColour(button, colourVar)

    Public method used by the colour selection buttons.

    button
    reference to a QButton to show the colour on
    colourVar
    reference to the variable containing the colour (QColor)
    Returns:
    selected colour (QColor)

    ConfigurationPageBase.selectFont

    selectFont(fontSample, fontVar, showFontInfo = False)

    Public method used by the font selection buttons.

    fontSample
    reference to the font sample widget (QLineEdit)
    fontVar
    reference to the variable containing the font (QFont)
    showFontInfo
    flag indicating to show some font info as the sample (boolean)
    Returns:
    selected font (QFont)

    ConfigurationPageBase.setState

    setState(state)

    Public method to set the state of the widget.

    state
    state data generated by saveState

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.WizardPlugins.PyRegExpWizard.Py0000644000175000001440000000031712261331353031212 xustar0000000000000000117 path=eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.WizardPlugins.PyRegExpWizard.PyRegExpWizardDialog.html 30 mtime=1388688107.338229479 30 atime=1389081084.951724364 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.WizardPlugins.PyRegExpWizard.PyRegExpWizardDial0000644000175000001440000004441312261331353034033 0ustar00detlevusers00000000000000 eric4.Plugins.WizardPlugins.PyRegExpWizard.PyRegExpWizardDialog

    eric4.Plugins.WizardPlugins.PyRegExpWizard.PyRegExpWizardDialog

    Module implementing the Python re wizard dialog.

    Global Attributes

    None

    Classes

    PyRegExpWizardDialog Class for the dialog variant.
    PyRegExpWizardWidget Class implementing the Python re wizard dialog.
    PyRegExpWizardWindow Main window class for the standalone dialog.

    Functions

    None


    PyRegExpWizardDialog

    Class for the dialog variant.

    Derived from

    QDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    PyRegExpWizardDialog Constructor
    getCode Public method to get the source code.

    Static Methods

    None

    PyRegExpWizardDialog (Constructor)

    PyRegExpWizardDialog(parent = None, fromEric = True)

    Constructor

    parent
    parent widget (QWidget)
    fromEric
    flag indicating a call from within eric4

    PyRegExpWizardDialog.getCode

    getCode(indLevel, indString)

    Public method to get the source code.

    indLevel
    indentation level (int)
    indString
    string used for indentation (space or tab) (string)
    Returns:
    generated code (string)


    PyRegExpWizardWidget

    Class implementing the Python re wizard dialog.

    Derived from

    QWidget, Ui_PyRegExpWizardDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    PyRegExpWizardWidget Constructor
    __insertString Private method to insert a string into line edit and move cursor.
    getCode Public method to get the source code.
    on_altnButton_clicked Private slot to handle the alternatives toolbutton.
    on_anycharButton_clicked Private slot to handle the any character toolbutton.
    on_beglineButton_clicked Private slot to handle the begin line toolbutton.
    on_buttonBox_clicked Private slot called by a button of the button box clicked.
    on_charButton_clicked Private slot to handle the characters toolbutton.
    on_commentButton_clicked Private slot to handle the comment toolbutton.
    on_copyButton_clicked Private slot to copy the regexp string into the clipboard.
    on_endlineButton_clicked Private slot to handle the end line toolbutton.
    on_executeButton_clicked Private slot to execute the entered regexp on the test text.
    on_groupButton_clicked Private slot to handle the group toolbutton.
    on_loadButton_clicked Private slot to load a regexp from a file.
    on_namedGroupButton_clicked Private slot to handle the named group toolbutton.
    on_namedReferenceButton_clicked Private slot to handle the named reference toolbutton.
    on_neglookaheadButton_clicked Private slot to handle the negative lookahead toolbutton.
    on_neglookbehindButton_clicked Private slot to handle the negative lookbehind toolbutton.
    on_nextButton_clicked Private slot to find the next match.
    on_nonGroupButton_clicked Private slot to handle the non group toolbutton.
    on_nonwordboundButton_clicked Private slot to handle the non word boundary toolbutton.
    on_poslookaheadButton_clicked Private slot to handle the positive lookahead toolbutton.
    on_poslookbehindButton_clicked Private slot to handle the positive lookbehind toolbutton.
    on_py2Button_toggled Private slot called when the Python version was selected.
    on_redoButton_clicked Private slot to handle the redo action.
    on_regexpTextEdit_textChanged Private slot called when the regexp changes.
    on_repeatButton_clicked Private slot to handle the repeat toolbutton.
    on_saveButton_clicked Private slot to save the regexp to a file.
    on_undoButton_clicked Private slot to handle the undo action.
    on_validateButton_clicked Private slot to validate the entered regexp.
    on_wordboundButton_clicked Private slot to handle the word boundary toolbutton.

    Static Methods

    None

    PyRegExpWizardWidget (Constructor)

    PyRegExpWizardWidget(parent = None, fromEric = True)

    Constructor

    parent
    parent widget (QWidget)
    fromEric
    flag indicating a call from within eric4

    PyRegExpWizardWidget.__insertString

    __insertString(s, steps = 0)

    Private method to insert a string into line edit and move cursor.

    s
    string to be inserted into the regexp line edit (string or QString)
    steps
    number of characters to move the cursor (integer). Negative steps moves cursor back, positives forward.

    PyRegExpWizardWidget.getCode

    getCode(indLevel, indString)

    Public method to get the source code.

    indLevel
    indentation level (int)
    indString
    string used for indentation (space or tab) (string)
    Returns:
    generated code (string)

    PyRegExpWizardWidget.on_altnButton_clicked

    on_altnButton_clicked()

    Private slot to handle the alternatives toolbutton.

    PyRegExpWizardWidget.on_anycharButton_clicked

    on_anycharButton_clicked()

    Private slot to handle the any character toolbutton.

    PyRegExpWizardWidget.on_beglineButton_clicked

    on_beglineButton_clicked()

    Private slot to handle the begin line toolbutton.

    PyRegExpWizardWidget.on_buttonBox_clicked

    on_buttonBox_clicked(button)

    Private slot called by a button of the button box clicked.

    button
    button that was clicked (QAbstractButton)

    PyRegExpWizardWidget.on_charButton_clicked

    on_charButton_clicked()

    Private slot to handle the characters toolbutton.

    PyRegExpWizardWidget.on_commentButton_clicked

    on_commentButton_clicked()

    Private slot to handle the comment toolbutton.

    PyRegExpWizardWidget.on_copyButton_clicked

    on_copyButton_clicked()

    Private slot to copy the regexp string into the clipboard.

    This slot is only available, if not called from within eric4.

    PyRegExpWizardWidget.on_endlineButton_clicked

    on_endlineButton_clicked()

    Private slot to handle the end line toolbutton.

    PyRegExpWizardWidget.on_executeButton_clicked

    on_executeButton_clicked(startpos = 0)

    Private slot to execute the entered regexp on the test text.

    This slot will execute the entered regexp on the entered test data and will display the result in the table part of the dialog.

    startpos
    starting position for the regexp matching

    PyRegExpWizardWidget.on_groupButton_clicked

    on_groupButton_clicked()

    Private slot to handle the group toolbutton.

    PyRegExpWizardWidget.on_loadButton_clicked

    on_loadButton_clicked()

    Private slot to load a regexp from a file.

    PyRegExpWizardWidget.on_namedGroupButton_clicked

    on_namedGroupButton_clicked()

    Private slot to handle the named group toolbutton.

    PyRegExpWizardWidget.on_namedReferenceButton_clicked

    on_namedReferenceButton_clicked()

    Private slot to handle the named reference toolbutton.

    PyRegExpWizardWidget.on_neglookaheadButton_clicked

    on_neglookaheadButton_clicked()

    Private slot to handle the negative lookahead toolbutton.

    PyRegExpWizardWidget.on_neglookbehindButton_clicked

    on_neglookbehindButton_clicked()

    Private slot to handle the negative lookbehind toolbutton.

    PyRegExpWizardWidget.on_nextButton_clicked

    on_nextButton_clicked()

    Private slot to find the next match.

    PyRegExpWizardWidget.on_nonGroupButton_clicked

    on_nonGroupButton_clicked()

    Private slot to handle the non group toolbutton.

    PyRegExpWizardWidget.on_nonwordboundButton_clicked

    on_nonwordboundButton_clicked()

    Private slot to handle the non word boundary toolbutton.

    PyRegExpWizardWidget.on_poslookaheadButton_clicked

    on_poslookaheadButton_clicked()

    Private slot to handle the positive lookahead toolbutton.

    PyRegExpWizardWidget.on_poslookbehindButton_clicked

    on_poslookbehindButton_clicked()

    Private slot to handle the positive lookbehind toolbutton.

    PyRegExpWizardWidget.on_py2Button_toggled

    on_py2Button_toggled(checked)

    Private slot called when the Python version was selected.

    checked
    state of the Python 2 button (boolean)

    PyRegExpWizardWidget.on_redoButton_clicked

    on_redoButton_clicked()

    Private slot to handle the redo action.

    PyRegExpWizardWidget.on_regexpTextEdit_textChanged

    on_regexpTextEdit_textChanged()

    Private slot called when the regexp changes.

    PyRegExpWizardWidget.on_repeatButton_clicked

    on_repeatButton_clicked()

    Private slot to handle the repeat toolbutton.

    PyRegExpWizardWidget.on_saveButton_clicked

    on_saveButton_clicked()

    Private slot to save the regexp to a file.

    PyRegExpWizardWidget.on_undoButton_clicked

    on_undoButton_clicked()

    Private slot to handle the undo action.

    PyRegExpWizardWidget.on_validateButton_clicked

    on_validateButton_clicked()

    Private slot to validate the entered regexp.

    PyRegExpWizardWidget.on_wordboundButton_clicked

    on_wordboundButton_clicked()

    Private slot to handle the word boundary toolbutton.



    PyRegExpWizardWindow

    Main window class for the standalone dialog.

    Derived from

    KQMainWindow

    Class Attributes

    None

    Class Methods

    None

    Methods

    PyRegExpWizardWindow Constructor

    Static Methods

    None

    PyRegExpWizardWindow (Constructor)

    PyRegExpWizardWindow(parent = None)

    Constructor

    parent
    reference to the parent widget (QWidget)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DocumentationTools.ModuleDocumentor.htm0000644000175000001440000000013212261331352031415 xustar000000000000000030 mtime=1388688106.113228864 30 atime=1389081084.951724364 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.DocumentationTools.ModuleDocumentor.html0000644000175000001440000004737712261331352031345 0ustar00detlevusers00000000000000 eric4.DocumentationTools.ModuleDocumentor

    eric4.DocumentationTools.ModuleDocumentor

    Module implementing the builtin documentation generator.

    The different parts of the module document are assembled from the parsed Python file. The appearance is determined by several templates defined within this module.

    Global Attributes

    _event
    _signal

    Classes

    ModuleDocument Class implementing the builtin documentation generator.
    TagError Exception class raised, if an invalid documentation tag was found.

    Functions

    None


    ModuleDocument

    Class implementing the builtin documentation generator.

    Derived from

    object

    Class Attributes

    None

    Class Methods

    None

    Methods

    ModuleDocument Constructor
    __checkDeprecated Private method to check, if the object to be documented contains a deprecated flag.
    __formatCrossReferenceEntry Private method to format a cross reference entry.
    __formatDescription Private method to format the contents of the documentation string.
    __genClassListSection Private method to generate the section listing all classes of the module.
    __genClassesSection Private method to generate the document section with details about classes.
    __genDescriptionListSection Private method to generate the list section of a description.
    __genFunctionListSection Private method to generate the section listing all functions of the module.
    __genFunctionsSection Private method to generate the document section with details about functions.
    __genGlobalsListSection Private method to generate the section listing all global attributes of the module.
    __genListSection Private method to generate a list section of the document.
    __genMethodSection Private method to generate the method details section.
    __genMethodsListSection Private method to generate the methods list section of a class.
    __genModuleSection Private method to generate the body of the document.
    __genParagraphs Private method to assemble the descriptive paragraphs of a docstring.
    __genParamDescriptionListSection Private method to generate the list section of a description.
    __genRbModulesClassesListSection Private method to generate the classes list section of a Ruby module.
    __genRbModulesClassesSection Private method to generate the Ruby module classes details section.
    __genRbModulesListSection Private method to generate the section listing all modules of the file (Ruby only).
    __genRbModulesSection Private method to generate the document section with details about Ruby modules.
    __genSeeListSection Private method to generate the "see also" list section of a description.
    __getShortDescription Private method to determine the short description of an object.
    __processInlineTags Private method to process inline tags.
    description Public method used to get the description of the module.
    genDocument Public method to generate the source code documentation.
    getQtHelpKeywords Public method to retrieve the parts for the QtHelp keywords section.
    isEmpty Public method to determine, if the module contains any classes or functions.
    name Public method used to get the module name.
    shortDescription Public method used to get the short description of the module.

    Static Methods

    None

    ModuleDocument (Constructor)

    ModuleDocument(module, colors, stylesheet = None)

    Constructor

    module
    the information of the parsed Python file
    colors
    dictionary specifying the various colors for the output (dictionary of strings)
    stylesheet
    the style to be used for the generated pages (string)

    ModuleDocument.__checkDeprecated

    __checkDeprecated(descr)

    Private method to check, if the object to be documented contains a deprecated flag.

    desc
    The documentation string. (string)
    Returns:
    Flag indicating the deprecation status. (boolean)

    ModuleDocument.__formatCrossReferenceEntry

    __formatCrossReferenceEntry(entry)

    Private method to format a cross reference entry.

    This cross reference entry looks like "package.module#member label".

    entry
    the entry to be formatted (string)
    Returns:
    formatted entry (string)

    ModuleDocument.__formatDescription

    __formatDescription(descr)

    Private method to format the contents of the documentation string.

    descr
    The contents of the documentation string. (string)
    Returns:
    The formated contents of the documentation string. (string)
    Raises TagError:
    A tag doesn't have the correct number of arguments.

    ModuleDocument.__genClassListSection

    __genClassListSection()

    Private method to generate the section listing all classes of the module.

    Returns:
    The classes list section. (string)

    ModuleDocument.__genClassesSection

    __genClassesSection()

    Private method to generate the document section with details about classes.

    Returns:
    The classes details section. (string)

    ModuleDocument.__genDescriptionListSection

    __genDescriptionListSection(dictionary, template)

    Private method to generate the list section of a description.

    dictionary
    Dictionary containing the info for the list section.
    template
    The template to be used for the list. (string)
    Returns:
    The list section. (string)

    ModuleDocument.__genFunctionListSection

    __genFunctionListSection()

    Private method to generate the section listing all functions of the module.

    Returns:
    The functions list section. (string)

    ModuleDocument.__genFunctionsSection

    __genFunctionsSection()

    Private method to generate the document section with details about functions.

    Returns:
    The functions details section. (string)

    ModuleDocument.__genGlobalsListSection

    __genGlobalsListSection(class_ = None)

    Private method to generate the section listing all global attributes of the module.

    class_
    reference to a class object (Class)
    Returns:
    The globals list section. (string)

    ModuleDocument.__genListSection

    __genListSection(names, dict, kwSuffix = "")

    Private method to generate a list section of the document.

    names
    The names to appear in the list. (list of strings)
    dict
    A dictionary containing all relevant information.
    kwSuffix
    suffix to be used for the QtHelp keywords (string)
    Returns:
    The list section. (string)

    ModuleDocument.__genMethodSection

    __genMethodSection(obj, className, filter)

    Private method to generate the method details section.

    obj
    reference to the object being formatted
    className
    name of the class containing the method (string)
    filter
    filter value designating the method types
    Returns:
    method list and method details section (tuple of two string)

    ModuleDocument.__genMethodsListSection

    __genMethodsListSection(names, dict, className, clsName, includeInit=True)

    Private method to generate the methods list section of a class.

    names
    names to appear in the list (list of strings)
    dict
    dictionary containing all relevant information
    className
    class name containing the names
    clsName
    visible class name containing the names
    includeInit
    flag indicating to include the __init__ method (boolean)
    Returns:
    methods list section (string)

    ModuleDocument.__genModuleSection

    __genModuleSection()

    Private method to generate the body of the document.

    Returns:
    The body of the document. (string)

    ModuleDocument.__genParagraphs

    __genParagraphs(lines)

    Private method to assemble the descriptive paragraphs of a docstring.

    A paragraph is made up of a number of consecutive lines without an intermediate empty line. Empty lines are treated as a paragraph delimiter.

    lines
    A list of individual lines. (list of strings)
    Returns:
    Ready formatted paragraphs. (string)

    ModuleDocument.__genParamDescriptionListSection

    __genParamDescriptionListSection(_list, template)

    Private method to generate the list section of a description.

    _list
    List containing the info for the list section.
    template
    The template to be used for the list. (string)
    Returns:
    The list section. (string)

    ModuleDocument.__genRbModulesClassesListSection

    __genRbModulesClassesListSection(names, dict, moduleName)

    Private method to generate the classes list section of a Ruby module.

    names
    The names to appear in the list. (list of strings)
    dict
    A dictionary containing all relevant information.
    moduleName
    Name of the Ruby module containing the classes. (string)
    Returns:
    The list section. (string)

    ModuleDocument.__genRbModulesClassesSection

    __genRbModulesClassesSection(obj, modName)

    Private method to generate the Ruby module classes details section.

    obj
    Reference to the object being formatted.
    modName
    Name of the Ruby module containing the classes. (string)
    Returns:
    The classes list and classes details section. (tuple of two string)

    ModuleDocument.__genRbModulesListSection

    __genRbModulesListSection()

    Private method to generate the section listing all modules of the file (Ruby only).

    Returns:
    The modules list section. (string)

    ModuleDocument.__genRbModulesSection

    __genRbModulesSection()

    Private method to generate the document section with details about Ruby modules.

    Returns:
    The Ruby modules details section. (string)

    ModuleDocument.__genSeeListSection

    __genSeeListSection(_list, template)

    Private method to generate the "see also" list section of a description.

    _list
    List containing the info for the section.
    template
    The template to be used for the list. (string)
    Returns:
    The list section. (string)

    ModuleDocument.__getShortDescription

    __getShortDescription(desc)

    Private method to determine the short description of an object.

    The short description is just the first non empty line of the documentation string.

    desc
    The documentation string. (string)
    Returns:
    The short description. (string)

    ModuleDocument.__processInlineTags

    __processInlineTags(desc)

    Private method to process inline tags.

    desc
    One line of the description (string)
    Returns:
    processed line with inline tags expanded (string)

    ModuleDocument.description

    description()

    Public method used to get the description of the module.

    Returns:
    The description of the module. (string)

    ModuleDocument.genDocument

    genDocument()

    Public method to generate the source code documentation.

    Returns:
    The source code documentation. (string)

    ModuleDocument.getQtHelpKeywords

    getQtHelpKeywords()

    Public method to retrieve the parts for the QtHelp keywords section.

    Returns:
    list of tuples containing the name (string) and the ref (string). The ref is without the filename part.

    ModuleDocument.isEmpty

    isEmpty()

    Public method to determine, if the module contains any classes or functions.

    Returns:
    Flag indicating an empty module (i.e. __init__.py without any contents)

    ModuleDocument.name

    name()

    Public method used to get the module name.

    Returns:
    The name of the module. (string)

    ModuleDocument.shortDescription

    shortDescription()

    Public method used to get the short description of the module.

    The short description is just the first line of the modules description.

    Returns:
    The short description of the module. (string)


    TagError

    Exception class raised, if an invalid documentation tag was found.

    Derived from

    Exception

    Class Attributes

    None

    Class Methods

    None

    Methods

    None

    Static Methods

    None

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.SqlBrowser.SqlConnectionWidget.html0000644000175000001440000000013212261331351030477 xustar000000000000000030 mtime=1388688105.611228612 30 atime=1389081084.951724364 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.SqlBrowser.SqlConnectionWidget.html0000644000175000001440000001335312261331351030236 0ustar00detlevusers00000000000000 eric4.SqlBrowser.SqlConnectionWidget

    eric4.SqlBrowser.SqlConnectionWidget

    Module implementing a widget showing the SQL connections.

    Global Attributes

    None

    Classes

    SqlConnectionWidget Class implementing a widget showing the SQL connections.

    Functions

    None


    SqlConnectionWidget

    Class implementing a widget showing the SQL connections.

    Signals

    cleared()
    emitted after the connection tree has been cleared
    schemaRequested(QString)
    emitted when the schema display is requested
    tableActivated(QString)
    emitted after the entry for a table has been activated

    Derived from

    QWidget

    Class Attributes

    None

    Class Methods

    None

    Methods

    SqlConnectionWidget Constructor
    __currentItemChanged Private slot handling a change of the current item.
    __dbCaption Private method to assemble a string for the caption.
    __itemActivated Private slot handling the activation of an item.
    __setActive Private slot to set an item to active.
    __setBold Private slot to set the font to bold.
    currentDatabase Public method to get the current database.
    refresh Public slot to refresh the connection tree.
    showSchema Public slot to show schema data of a database.

    Static Methods

    None

    SqlConnectionWidget (Constructor)

    SqlConnectionWidget(parent = None)

    Constructor

    parent
    reference to the parent widget (QWidget)

    SqlConnectionWidget.__currentItemChanged

    __currentItemChanged(current, previous)

    Private slot handling a change of the current item.

    current
    reference to the new current item (QTreeWidgetItem)
    previous
    reference to the previous current item (QTreeWidgetItem)

    SqlConnectionWidget.__dbCaption

    __dbCaption(db)

    Private method to assemble a string for the caption.

    db
    reference to the database object (QSqlDatabase)
    Returns:
    caption string (QString)

    SqlConnectionWidget.__itemActivated

    __itemActivated(itm, column)

    Private slot handling the activation of an item.

    itm
    reference to the item (QTreeWidgetItem)
    column
    column that was activated (integer)

    SqlConnectionWidget.__setActive

    __setActive(itm)

    Private slot to set an item to active.

    itm
    reference to the item to set as the active item (QTreeWidgetItem)

    SqlConnectionWidget.__setBold

    __setBold(itm, bold)

    Private slot to set the font to bold.

    itm
    reference to the item to be changed (QTreeWidgetItem)
    bold
    flag indicating bold (boolean)

    SqlConnectionWidget.currentDatabase

    currentDatabase()

    Public method to get the current database.

    Returns:
    reference to the current database (QSqlDatabase)

    SqlConnectionWidget.refresh

    refresh()

    Public slot to refresh the connection tree.

    SqlConnectionWidget.showSchema

    showSchema()

    Public slot to show schema data of a database.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.HelpLanguagesDialog.html0000644000175000001440000000013212261331351030422 xustar000000000000000030 mtime=1388688105.435228524 30 atime=1389081084.952724363 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.HelpLanguagesDialog.html0000644000175000001440000001423712261331351030163 0ustar00detlevusers00000000000000 eric4.Helpviewer.HelpLanguagesDialog

    eric4.Helpviewer.HelpLanguagesDialog

    Module implementing a dialog to configure the preferred languages.

    Global Attributes

    None

    Classes

    HelpLanguagesDialog Class implementing a dialog to configure the preferred languages.

    Functions

    None


    HelpLanguagesDialog

    Class implementing a dialog to configure the preferred languages.

    Derived from

    QDialog, Ui_HelpLanguagesDialog

    Class Attributes

    None

    Class Methods

    defaultAcceptLanguages Class method to get the list of default accept languages.
    expand Class method to expand a language enum to a readable languages list.
    httpString Class method to convert a list of acceptable languages into a byte array that can be sent along with the Accept-Language http header (see RFC 2616).

    Methods

    HelpLanguagesDialog Constructor
    __currentChanged Private slot to handle a change of the current selection.
    accept Public method to accept the data entered.
    on_addButton_clicked Private slot to add a language to the list of acceptable languages.
    on_downButton_clicked Private slot to move a language down.
    on_removeButton_clicked Private slot to remove a language from the list of acceptable languages.
    on_upButton_clicked Private slot to move a language up.

    Static Methods

    None

    HelpLanguagesDialog.defaultAcceptLanguages (class method)

    defaultAcceptLanguages()

    Class method to get the list of default accept languages.

    Returns:
    list of acceptable languages (QStringList)

    HelpLanguagesDialog.expand (class method)

    expand(language)

    Class method to expand a language enum to a readable languages list.

    language
    language number (QLocale.Language)
    Returns:
    list of expanded language names (QStringList)

    HelpLanguagesDialog.httpString (class method)

    httpString(languages)

    Class method to convert a list of acceptable languages into a byte array that can be sent along with the Accept-Language http header (see RFC 2616).

    languages
    list of acceptable languages (QStringList)
    Returns:
    converted list (QByteArray)

    HelpLanguagesDialog (Constructor)

    HelpLanguagesDialog(parent = None)

    Constructor

    parent
    reference to the parent widget (QWidget)

    HelpLanguagesDialog.__currentChanged

    __currentChanged(current, previous)

    Private slot to handle a change of the current selection.

    current
    index of the currently selected item (QModelIndex)
    previous
    index of the previously selected item (QModelIndex)

    HelpLanguagesDialog.accept

    accept()

    Public method to accept the data entered.

    HelpLanguagesDialog.on_addButton_clicked

    on_addButton_clicked()

    Private slot to add a language to the list of acceptable languages.

    HelpLanguagesDialog.on_downButton_clicked

    on_downButton_clicked()

    Private slot to move a language down.

    HelpLanguagesDialog.on_removeButton_clicked

    on_removeButton_clicked()

    Private slot to remove a language from the list of acceptable languages.

    HelpLanguagesDialog.on_upButton_clicked

    on_upButton_clicked()

    Private slot to move a language up.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.SqlBrowser.html0000644000175000001440000000013212261331354025665 xustar000000000000000030 mtime=1388688108.659230143 30 atime=1389081084.952724363 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/index-eric4.SqlBrowser.html0000644000175000001440000000234012261331354025416 0ustar00detlevusers00000000000000 eric4.SqlBrowser

    eric4.SqlBrowser

    Package containing module for the SQL browser tool.

    Modules

    SqlBrowser Module implementing the SQL Browser main window.
    SqlBrowserWidget Module implementing the SQL Browser widget.
    SqlConnectionDialog Module implementing a dialog to enter the connection parameters.
    SqlConnectionWidget Module implementing a widget showing the SQL connections.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.E4XML.ShortcutsHandler.html0000644000175000001440000000013212261331352026577 xustar000000000000000030 mtime=1388688106.601229109 30 atime=1389081084.952724363 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.E4XML.ShortcutsHandler.html0000644000175000001440000001231412261331352026332 0ustar00detlevusers00000000000000 eric4.E4XML.ShortcutsHandler

    eric4.E4XML.ShortcutsHandler

    Module implementing the handler class for reading a keyboard shortcuts file.

    Global Attributes

    None

    Classes

    ShortcutsHandler Class implementing a sax handler to read a keyboard shortcuts file.

    Functions

    None


    ShortcutsHandler

    Class implementing a sax handler to read a keyboard shortcuts file.

    Derived from

    XMLHandlerBase

    Class Attributes

    None

    Class Methods

    None

    Methods

    ShortcutsHandler Constructor
    endAccel Handler method for the "Accel" end tag.
    endAltAccel Handler method for the "AltAccel" end tag.
    endName Handler method for the "Name" end tag.
    endShortcut Handler method for the "Shortcut" end tag.
    getShortcuts Public method to retrieve the shortcuts.
    getVersion Public method to retrieve the version of the shortcuts.
    startDocumentShortcuts Handler called, when the document parsing is started.
    startShortcut Handler method for the "Shortcut" start tag.
    startShortcuts Handler method for the "Shortcuts" start tag.

    Static Methods

    None

    ShortcutsHandler (Constructor)

    ShortcutsHandler()

    Constructor

    ShortcutsHandler.endAccel

    endAccel()

    Handler method for the "Accel" end tag.

    ShortcutsHandler.endAltAccel

    endAltAccel()

    Handler method for the "AltAccel" end tag.

    ShortcutsHandler.endName

    endName()

    Handler method for the "Name" end tag.

    ShortcutsHandler.endShortcut

    endShortcut()

    Handler method for the "Shortcut" end tag.

    ShortcutsHandler.getShortcuts

    getShortcuts()

    Public method to retrieve the shortcuts.

    Returns:
    Dictionary of dictionaries of shortcuts. The keys of the dictionary are the categories, the values are dictionaries. These dictionaries have the shortcut name as their key and a tuple of accelerators as their value.

    ShortcutsHandler.getVersion

    getVersion()

    Public method to retrieve the version of the shortcuts.

    Returns:
    String containing the version number.

    ShortcutsHandler.startDocumentShortcuts

    startDocumentShortcuts()

    Handler called, when the document parsing is started.

    ShortcutsHandler.startShortcut

    startShortcut(attrs)

    Handler method for the "Shortcut" start tag.

    attrs
    list of tag attributes

    ShortcutsHandler.startShortcuts

    startShortcuts(attrs)

    Handler method for the "Shortcuts" start tag.

    attrs
    list of tag attributes

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.WizardPlugins.FontDialogWizard.0000644000175000001440000000032312261331353031221 xustar0000000000000000121 path=eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.WizardPlugins.FontDialogWizard.FontDialogWizardDialog.html 30 mtime=1388688107.311229466 30 atime=1389081084.953724363 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.WizardPlugins.FontDialogWizard.FontDialogWizard0000644000175000001440000001071412261331353034104 0ustar00detlevusers00000000000000 eric4.Plugins.WizardPlugins.FontDialogWizard.FontDialogWizardDialog

    eric4.Plugins.WizardPlugins.FontDialogWizard.FontDialogWizardDialog

    Module implementing the font dialog wizard dialog.

    Global Attributes

    None

    Classes

    FontDialogWizardDialog Class implementing the font dialog wizard dialog.

    Functions

    None


    FontDialogWizardDialog

    Class implementing the font dialog wizard dialog.

    It displays a dialog for entering the parameters for the QFontDialog code generator.

    Derived from

    QDialog, Ui_FontDialogWizardDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    FontDialogWizardDialog Constructor
    getCode Public method to get the source code.
    on_bTest_clicked Private method to test the selected options.
    on_buttonBox_clicked Private slot called by a button of the button box clicked.
    on_eVariable_textChanged Private slot to handle the textChanged signal of eVariable.
    on_fontButton_clicked Private slot to handle the button press to select a font via a font selection dialog.

    Static Methods

    None

    FontDialogWizardDialog (Constructor)

    FontDialogWizardDialog(parent=None)

    Constructor

    parent
    parent widget (QWidget)

    FontDialogWizardDialog.getCode

    getCode(indLevel, indString)

    Public method to get the source code.

    indLevel
    indentation level (int)
    indString
    string used for indentation (space or tab) (string)
    Returns:
    generated code (string)

    FontDialogWizardDialog.on_bTest_clicked

    on_bTest_clicked()

    Private method to test the selected options.

    FontDialogWizardDialog.on_buttonBox_clicked

    on_buttonBox_clicked(button)

    Private slot called by a button of the button box clicked.

    button
    button that was clicked (QAbstractButton)

    FontDialogWizardDialog.on_eVariable_textChanged

    on_eVariable_textChanged(text)

    Private slot to handle the textChanged signal of eVariable.

    text
    the new text (QString)

    FontDialogWizardDialog.on_fontButton_clicked

    on_fontButton_clicked()

    Private slot to handle the button press to select a font via a font selection dialog.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.Shortcuts.html0000644000175000001440000000013212261331350026707 xustar000000000000000030 mtime=1388688104.567228088 30 atime=1389081084.953724363 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.Shortcuts.html0000644000175000001440000001476612261331350026457 0ustar00detlevusers00000000000000 eric4.Preferences.Shortcuts

    eric4.Preferences.Shortcuts

    Module implementing functions dealing with keyboard shortcuts.

    Global Attributes

    None

    Classes

    None

    Functions

    __readShortcut Private function to read a single keyboard shortcut from the settings.
    __saveShortcut Private function to write a single keyboard shortcut to the settings.
    __setAction Private function to write a single keyboard shortcut to the settings.
    __setAction35 Private function to write a single keyboard shortcut to the settings (old format).
    exportShortcuts Module function to export the keyboard shortcuts for the defined QActions.
    importShortcuts Module function to import the keyboard shortcuts for the defined E4Actions.
    readShortcuts Module function to read the keyboard shortcuts for the defined QActions.
    saveShortcuts Module function to write the keyboard shortcuts for the defined QActions.
    setActions Module function to set actions based on new format shortcuts file.
    setActions_35 Module function to set actions based on old format shortcuts file.


    __readShortcut

    __readShortcut(act, category, prefClass)

    Private function to read a single keyboard shortcut from the settings.

    act
    reference to the action object (E4Action)
    category
    category the action belongs to (string or QString)
    prefClass
    preferences class used as the storage area


    __saveShortcut

    __saveShortcut(act, category, prefClass)

    Private function to write a single keyboard shortcut to the settings.

    act
    reference to the action object (E4Action)
    category
    category the action belongs to (string or QString)
    prefClass
    preferences class used as the storage area


    __setAction

    __setAction(actions, sdict)

    Private function to write a single keyboard shortcut to the settings.

    actions
    list of actions to set (list of E4Action)
    sdict
    dictionary containg accelerator information for one category


    __setAction35

    __setAction35(actions, sdict)

    Private function to write a single keyboard shortcut to the settings (old format).

    actions
    list of actions to set (list of E4Action)
    sdict
    dictionary containg accelerator information for one category


    exportShortcuts

    exportShortcuts(fn)

    Module function to export the keyboard shortcuts for the defined QActions.

    fn
    filename of the export file (string)
    Returns:
    flag indicating success


    importShortcuts

    importShortcuts(fn)

    Module function to import the keyboard shortcuts for the defined E4Actions.

    fn
    filename of the import file (string)
    Returns:
    flag indicating success


    readShortcuts

    readShortcuts(prefClass = Prefs, helpViewer = None, pluginName = None)

    Module function to read the keyboard shortcuts for the defined QActions.

    prefClass=
    preferences class used as the storage area
    helpViewer=
    reference to the help window object
    pluginName=
    name of the plugin for which to load shortcuts (string)


    saveShortcuts

    saveShortcuts(prefClass = Prefs)

    Module function to write the keyboard shortcuts for the defined QActions.

    prefClass
    preferences class used as the storage area


    setActions

    setActions(shortcuts)

    Module function to set actions based on new format shortcuts file.

    shortcuts
    dictionary containing the accelerator information read from a XML file


    setActions_35

    setActions_35(shortcuts)

    Module function to set actions based on old format shortcuts file.

    shortcuts
    dictionary containing the accelerator information read from a XML file

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.UI.LogView.html0000644000175000001440000000013212261331350024341 xustar000000000000000030 mtime=1388688104.956228283 30 atime=1389081084.953724363 30 ctime=1389081086.309724333 eric4-4.5.18/eric/Documentation/Source/eric4.UI.LogView.html0000644000175000001440000001011112261331350024065 0ustar00detlevusers00000000000000 eric4.UI.LogView

    eric4.UI.LogView

    Module implementing the log viewer widget and the log widget.

    Global Attributes

    None

    Classes

    LogViewer Class providing a specialized text edit for displaying logging information.

    Functions

    None


    LogViewer

    Class providing a specialized text edit for displaying logging information.

    Derived from

    QTextEdit

    Class Attributes

    None

    Class Methods

    None

    Methods

    LogViewer Constructor
    __appendText Public method to append text to the end.
    __configure Private method to open the configuration dialog.
    __handleShowContextMenu Private slot to show the context menu.
    appendToStderr Public slot to appand text to the "stderr" tab.
    appendToStdout Public slot to appand text to the "stdout" tab.
    preferencesChanged Public slot to handle a change of the preferences.

    Static Methods

    None

    LogViewer (Constructor)

    LogViewer(parent = None)

    Constructor

    parent
    reference to the parent widget (QWidget)

    LogViewer.__appendText

    __appendText(txt, error = False)

    Public method to append text to the end.

    txt
    text to insert (QString)
    error
    flag indicating to insert error text (boolean)

    LogViewer.__configure

    __configure()

    Private method to open the configuration dialog.

    LogViewer.__handleShowContextMenu

    __handleShowContextMenu(coord)

    Private slot to show the context menu.

    coord
    the position of the mouse pointer (QPoint)

    LogViewer.appendToStderr

    appendToStderr(txt)

    Public slot to appand text to the "stderr" tab.

    txt
    text to be appended (string or QString)

    LogViewer.appendToStdout

    appendToStdout(txt)

    Public slot to appand text to the "stdout" tab.

    txt
    text to be appended (string or QString)

    LogViewer.preferencesChanged

    preferencesChanged()

    Public slot to handle a change of the preferences.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.E4Gui.E4Completers.html0000644000175000001440000000013212261331350025673 xustar000000000000000030 mtime=1388688104.438228023 30 atime=1389081084.954724364 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.E4Gui.E4Completers.html0000644000175000001440000001067112261331350025432 0ustar00detlevusers00000000000000 eric4.E4Gui.E4Completers

    eric4.E4Gui.E4Completers

    Module implementing various kinds of completers.

    Global Attributes

    None

    Classes

    E4DirCompleter Class implementing a completer for directory names.
    E4FileCompleter Class implementing a completer for file names.
    E4StringListCompleter Class implementing a completer for string lists.

    Functions

    None


    E4DirCompleter

    Class implementing a completer for directory names.

    Derived from

    QCompleter

    Class Attributes

    None

    Class Methods

    None

    Methods

    E4DirCompleter Constructor

    Static Methods

    None

    E4DirCompleter (Constructor)

    E4DirCompleter(parent = None, completionMode = QCompleter.PopupCompletion, showHidden = False)

    Constructor

    parent
    parent widget of the completer (QWidget)
    completionMode=
    completion mode of the completer (QCompleter.CompletionMode)
    showHidden=
    flag indicating to show hidden entries as well (boolean)


    E4FileCompleter

    Class implementing a completer for file names.

    Derived from

    QCompleter

    Class Attributes

    None

    Class Methods

    None

    Methods

    E4FileCompleter Constructor

    Static Methods

    None

    E4FileCompleter (Constructor)

    E4FileCompleter(parent = None, completionMode = QCompleter.PopupCompletion, showHidden = False)

    Constructor

    parent
    parent widget of the completer (QWidget)
    completionMode=
    completion mode of the completer (QCompleter.CompletionMode)
    showHidden=
    flag indicating to show hidden entries as well (boolean)


    E4StringListCompleter

    Class implementing a completer for string lists.

    Derived from

    QCompleter

    Class Attributes

    None

    Class Methods

    None

    Methods

    E4StringListCompleter Constructor

    Static Methods

    None

    E4StringListCompleter (Constructor)

    E4StringListCompleter(parent = None, strings = QStringList(), completionMode = QCompleter.PopupCompletion)

    Constructor

    parent
    parent widget of the completer (QWidget)
    strings
    list of string to load into the completer (QStringList)
    completionMode=
    completion mode of the completer (QCompleter.CompletionMode)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.Lexers.LexerPostScript.html0000644000175000001440000000013212261331354031072 xustar000000000000000030 mtime=1388688108.492230059 30 atime=1389081084.954724364 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.Lexers.LexerPostScript.html0000644000175000001440000000702712261331354030632 0ustar00detlevusers00000000000000 eric4.QScintilla.Lexers.LexerPostScript

    eric4.QScintilla.Lexers.LexerPostScript

    Module implementing a PostScript lexer with some additional methods.

    Global Attributes

    None

    Classes

    LexerPostScript Subclass to implement some additional lexer dependant methods.

    Functions

    None


    LexerPostScript

    Subclass to implement some additional lexer dependant methods.

    Derived from

    QsciLexerPostScript, Lexer

    Class Attributes

    None

    Class Methods

    None

    Methods

    LexerPostScript Constructor
    defaultKeywords Public method to get the default keywords.
    initProperties Public slot to initialize the properties.
    isCommentStyle Public method to check, if a style is a comment style.
    isStringStyle Public method to check, if a style is a string style.

    Static Methods

    None

    LexerPostScript (Constructor)

    LexerPostScript(parent = None)

    Constructor

    parent
    parent widget of this lexer

    LexerPostScript.defaultKeywords

    defaultKeywords(kwSet)

    Public method to get the default keywords.

    kwSet
    number of the keyword set (integer)
    Returns:
    string giving the keywords (string) or None

    LexerPostScript.initProperties

    initProperties()

    Public slot to initialize the properties.

    LexerPostScript.isCommentStyle

    isCommentStyle(style)

    Public method to check, if a style is a comment style.

    Returns:
    flag indicating a comment style (boolean)

    LexerPostScript.isStringStyle

    isStringStyle(style)

    Public method to check, if a style is a string style.

    Returns:
    flag indicating a string style (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.E4Graphics.html0000644000175000001440000000013212261331354025513 xustar000000000000000030 mtime=1388688108.661230144 30 atime=1389081084.954724364 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.E4Graphics.html0000644000175000001440000000165612261331354025255 0ustar00detlevusers00000000000000 eric4.E4Graphics

    eric4.E4Graphics

    Package implementing some QGraphicsView related general purpoe classes.

    Modules

    E4ArrowItem Module implementing a graphics item subclass for an arrow.
    E4GraphicsView Module implementing a canvas view class.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DebugClients.Python3.eric4dbgstub.html0000644000175000001440000000013212261331354030750 xustar000000000000000030 mtime=1388688108.020229822 30 atime=1389081084.954724364 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.DebugClients.Python3.eric4dbgstub.html0000644000175000001440000000630412261331354030505 0ustar00detlevusers00000000000000 eric4.DebugClients.Python3.eric4dbgstub

    eric4.DebugClients.Python3.eric4dbgstub

    Module implementing a debugger stub for remote debugging.

    Global Attributes

    __scriptname
    debugger
    ericpath
    modDir

    Classes

    None

    Functions

    initDebugger Module function to initialize a debugger for remote debugging.
    runcall Module function mimicing the Pdb interface.
    setScriptname Module function to set the scriptname to be reported back to the IDE.
    startDebugger Module function used to start the remote debugger.


    initDebugger

    initDebugger(kind = "standard")

    Module function to initialize a debugger for remote debugging.

    kind
    type of debugger ("standard" or "threads")
    Returns:
    flag indicating success (boolean)


    runcall

    runcall(func, *args)

    Module function mimicing the Pdb interface.

    func
    function to be called (function object)
    *args
    arguments being passed to func
    Returns:
    the function result


    setScriptname

    setScriptname(name)

    Module function to set the scriptname to be reported back to the IDE.

    name
    absolute pathname of the script (string)


    startDebugger

    startDebugger(enableTrace = True, exceptions = True, tracePython = False, redirect = True)

    Module function used to start the remote debugger.

    enableTrace=
    flag to enable the tracing function (boolean)
    exceptions=
    flag to enable exception reporting of the IDE (boolean)
    tracePython=
    flag to enable tracing into the Python library (boolean)
    redirect=
    flag indicating redirection of stdin, stdout and stderr (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.E4XML.PluginRepositoryHandler.html0000644000175000001440000000013212261331352030137 xustar000000000000000030 mtime=1388688106.510229063 30 atime=1389081084.954724364 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.E4XML.PluginRepositoryHandler.html0000644000175000001440000001525612261331352027702 0ustar00detlevusers00000000000000 eric4.E4XML.PluginRepositoryHandler

    eric4.E4XML.PluginRepositoryHandler

    Module implementing the handler class for reading an XML tasks file.

    Global Attributes

    None

    Classes

    PluginRepositoryHandler Class implementing a sax handler to read an XML tasks file.

    Functions

    None


    PluginRepositoryHandler

    Class implementing a sax handler to read an XML tasks file.

    Derived from

    XMLHandlerBase

    Class Attributes

    None

    Class Methods

    None

    Methods

    PluginRepositoryHandler Constructor
    endAuthor Handler method for the "Author" end tag.
    endDescription Handler method for the "Description" end tag.
    endFilename Handler method for the "Filename" end tag.
    endName Handler method for the "Name" end tag.
    endPlugin Handler method for the "Plugin" end tag.
    endRepositoryUrl Handler method for the "RepositoryUrl" end tag.
    endShort Handler method for the "Short" end tag.
    endUrl Handler method for the "Url" end tag.
    endVersion Handler method for the "Version" end tag.
    getVersion Public method to retrieve the version of the tasks file.
    startDocumentPlugins Handler called, when the document parsing is started.
    startPlugin Handler method for the "Plugin" start tag.
    startPlugins Handler method for the "Plugins" start tag.

    Static Methods

    None

    PluginRepositoryHandler (Constructor)

    PluginRepositoryHandler(parent)

    Constructor

    parent
    reference to the parent dialog (PluginRepositoryDialog)

    PluginRepositoryHandler.endAuthor

    endAuthor()

    Handler method for the "Author" end tag.

    PluginRepositoryHandler.endDescription

    endDescription()

    Handler method for the "Description" end tag.

    PluginRepositoryHandler.endFilename

    endFilename()

    Handler method for the "Filename" end tag.

    PluginRepositoryHandler.endName

    endName()

    Handler method for the "Name" end tag.

    PluginRepositoryHandler.endPlugin

    endPlugin()

    Handler method for the "Plugin" end tag.

    PluginRepositoryHandler.endRepositoryUrl

    endRepositoryUrl()

    Handler method for the "RepositoryUrl" end tag.

    PluginRepositoryHandler.endShort

    endShort()

    Handler method for the "Short" end tag.

    PluginRepositoryHandler.endUrl

    endUrl()

    Handler method for the "Url" end tag.

    PluginRepositoryHandler.endVersion

    endVersion()

    Handler method for the "Version" end tag.

    PluginRepositoryHandler.getVersion

    getVersion()

    Public method to retrieve the version of the tasks file.

    Returns:
    String containing the version number.

    PluginRepositoryHandler.startDocumentPlugins

    startDocumentPlugins()

    Handler called, when the document parsing is started.

    PluginRepositoryHandler.startPlugin

    startPlugin(attrs)

    Handler method for the "Plugin" start tag.

    attrs
    list of tag attributes

    PluginRepositoryHandler.startPlugins

    startPlugins(attrs)

    Handler method for the "Plugins" start tag.

    attrs
    list of tag attributes

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.Plugins.VcsPlugins.vcsSubversion.0000644000175000001440000000013212261331354031264 xustar000000000000000030 mtime=1388688108.657230142 30 atime=1389081084.954724364 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.Plugins.VcsPlugins.vcsSubversion.html0000644000175000001440000001434312261331354031710 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsSubversion

    eric4.Plugins.VcsPlugins.vcsSubversion

    Package implementing the vcs interface to Subversion

    It consists of the subversion class, the project helper classes and some Subversion specific dialogs.

    Packages

    ConfigurationPage Package implementing the the subversion configuration page.

    Modules

    Config Module defining configuration variables for the subversion package
    ProjectBrowserHelper Module implementing the VCS project browser helper for subversion.
    ProjectHelper Module implementing the VCS project helper for Subversion.
    SvnBlameDialog Module implementing a dialog to show the output of the svn blame command.
    SvnChangeListsDialog Module implementing a dialog to browse the change lists.
    SvnCommandDialog Module implementing the Subversion command dialog.
    SvnCommitDialog Module implementing a dialog to enter the commit message.
    SvnCopyDialog Module implementing a dialog to enter the data for a copy operation.
    SvnDialog Module implementing a dialog starting a process and showing its output.
    SvnDiffDialog Module implementing a dialog to show the output of the svn diff command process.
    SvnLogBrowserDialog Module implementing a dialog to browse the log history.
    SvnLogDialog Module implementing a dialog to show the output of the svn log command process.
    SvnMergeDialog Module implementing a dialog to enter the data for a merge operation.
    SvnNewProjectOptionsDialog Module implementing the Subversion Options Dialog for a new project from the repository.
    SvnOptionsDialog Module implementing a dialog to enter options used to start a project in the VCS.
    SvnPropListDialog Module implementing a dialog to show the output of the svn proplist command process.
    SvnPropSetDialog Module implementing a dialog to enter the data for a new property.
    SvnRelocateDialog Module implementing a dialog to enter the data to relocate the workspace.
    SvnRepoBrowserDialog Module implementing the subversion repository browser dialog.
    SvnRevisionSelectionDialog Module implementing a dialog to enter the revisions for the svn diff command.
    SvnStatusDialog Module implementing a dialog to show the output of the svn status command process.
    SvnStatusMonitorThread Module implementing the VCS status monitor thread class for Subversion.
    SvnSwitchDialog Module implementing a dialog to enter the data for a switch operation.
    SvnTagBranchListDialog Module implementing a dialog to show a list of tags or branches.
    SvnTagDialog Module implementing a dialog to enter the data for a tagging operation.
    SvnUrlSelectionDialog Module implementing a dialog to enter the URLs for the svn diff command.
    SvnUtilities Module implementing some common utility functions for the subversion package.
    subversion Module implementing the version control systems interface to Subversion.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Debugger.BreakPointViewer.html0000644000175000001440000000013212261331350027414 xustar000000000000000030 mtime=1388688104.693228151 30 atime=1389081084.971724364 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Debugger.BreakPointViewer.html0000644000175000001440000003445512261331350027161 0ustar00detlevusers00000000000000 eric4.Debugger.BreakPointViewer

    eric4.Debugger.BreakPointViewer

    Module implementing the Breakpoint viewer widget.

    Global Attributes

    None

    Classes

    BreakPointViewer Class implementing the Breakpoint viewer widget.

    Functions

    None


    BreakPointViewer

    Class implementing the Breakpoint viewer widget.

    Breakpoints will be shown with all their details. They can be modified through the context menu of this widget.

    Signals

    sourceFile(string, int)
    emitted to show the source of a breakpoint

    Derived from

    QTreeView

    Class Attributes

    None

    Class Methods

    None

    Methods

    BreakPointViewer Constructor
    __addBreak Private slot to handle the add breakpoint context menu entry.
    __clearSelection Private slot to clear the selection.
    __configure Private method to open the configuration dialog.
    __createPopupMenus Private method to generate the popup menus.
    __deleteAllBreaks Private slot to handle the delete all breakpoints context menu entry.
    __deleteBreak Private slot to handle the delete breakpoint context menu entry.
    __deleteSelectedBreaks Private slot to handle the delete selected breakpoints context menu entry.
    __disableAllBreaks Private slot to handle the disable all breakpoints context menu entry.
    __disableBreak Private slot to handle the disable breakpoint context menu entry.
    __disableSelectedBreaks Private slot to handle the disable selected breakpoints context menu entry.
    __doubleClicked Private slot to handle the double clicked signal.
    __editBreak Private slot to handle the edit breakpoint context menu entry.
    __editBreakpoint Private slot to edit a breakpoint.
    __enableAllBreaks Private slot to handle the enable all breakpoints context menu entry.
    __enableBreak Private slot to handle the enable breakpoint context menu entry.
    __enableSelectedBreaks Private slot to handle the enable selected breakpoints context menu entry.
    __fromSourceIndex Private slot to convert a source index to an index.
    __getSelectedItemsCount Private method to get the count of items selected.
    __layoutDisplay Private slot to perform a layout operation.
    __resizeColumns Private slot to resize the view when items get added, edited or deleted.
    __resort Private slot to resort the tree.
    __setBpEnabled Private method to set the enabled status of a breakpoint.
    __setRowSelected Private slot to select a complete row.
    __showBackMenu Private slot to handle the aboutToShow signal of the background menu.
    __showContextMenu Private slot to show the context menu.
    __showSource Private slot to handle the goto context menu entry.
    __toSourceIndex Private slot to convert an index to a source index.
    handleResetUI Public slot to reset the breakpoint viewer.
    highlightBreakpoint Public slot to handle the clientLine signal.
    setModel Public slot to set the breakpoint model.

    Static Methods

    None

    BreakPointViewer (Constructor)

    BreakPointViewer(parent = None)

    Constructor

    parent
    the parent (QWidget)

    BreakPointViewer.__addBreak

    __addBreak()

    Private slot to handle the add breakpoint context menu entry.

    BreakPointViewer.__clearSelection

    __clearSelection()

    Private slot to clear the selection.

    BreakPointViewer.__configure

    __configure()

    Private method to open the configuration dialog.

    BreakPointViewer.__createPopupMenus

    __createPopupMenus()

    Private method to generate the popup menus.

    BreakPointViewer.__deleteAllBreaks

    __deleteAllBreaks()

    Private slot to handle the delete all breakpoints context menu entry.

    BreakPointViewer.__deleteBreak

    __deleteBreak()

    Private slot to handle the delete breakpoint context menu entry.

    BreakPointViewer.__deleteSelectedBreaks

    __deleteSelectedBreaks()

    Private slot to handle the delete selected breakpoints context menu entry.

    BreakPointViewer.__disableAllBreaks

    __disableAllBreaks()

    Private slot to handle the disable all breakpoints context menu entry.

    BreakPointViewer.__disableBreak

    __disableBreak()

    Private slot to handle the disable breakpoint context menu entry.

    BreakPointViewer.__disableSelectedBreaks

    __disableSelectedBreaks()

    Private slot to handle the disable selected breakpoints context menu entry.

    BreakPointViewer.__doubleClicked

    __doubleClicked(index)

    Private slot to handle the double clicked signal.

    index
    index of the entry that was double clicked (QModelIndex)

    BreakPointViewer.__editBreak

    __editBreak()

    Private slot to handle the edit breakpoint context menu entry.

    BreakPointViewer.__editBreakpoint

    __editBreakpoint(index)

    Private slot to edit a breakpoint.

    index
    index of breakpoint to be edited (QModelIndex)

    BreakPointViewer.__enableAllBreaks

    __enableAllBreaks()

    Private slot to handle the enable all breakpoints context menu entry.

    BreakPointViewer.__enableBreak

    __enableBreak()

    Private slot to handle the enable breakpoint context menu entry.

    BreakPointViewer.__enableSelectedBreaks

    __enableSelectedBreaks()

    Private slot to handle the enable selected breakpoints context menu entry.

    BreakPointViewer.__fromSourceIndex

    __fromSourceIndex(sindex)

    Private slot to convert a source index to an index.

    sindex
    source index to be converted (QModelIndex)

    BreakPointViewer.__getSelectedItemsCount

    __getSelectedItemsCount()

    Private method to get the count of items selected.

    Returns:
    count of items selected (integer)

    BreakPointViewer.__layoutDisplay

    __layoutDisplay()

    Private slot to perform a layout operation.

    BreakPointViewer.__resizeColumns

    __resizeColumns()

    Private slot to resize the view when items get added, edited or deleted.

    BreakPointViewer.__resort

    __resort()

    Private slot to resort the tree.

    BreakPointViewer.__setBpEnabled

    __setBpEnabled(index, enabled)

    Private method to set the enabled status of a breakpoint.

    index
    index of breakpoint to be enabled/disabled (QModelIndex)
    enabled
    flag indicating the enabled status to be set (boolean)

    BreakPointViewer.__setRowSelected

    __setRowSelected(index, selected = True)

    Private slot to select a complete row.

    index
    index determining the row to be selected (QModelIndex)
    selected
    flag indicating the action (bool)

    BreakPointViewer.__showBackMenu

    __showBackMenu()

    Private slot to handle the aboutToShow signal of the background menu.

    BreakPointViewer.__showContextMenu

    __showContextMenu(coord)

    Private slot to show the context menu.

    coord
    the position of the mouse pointer (QPoint)

    BreakPointViewer.__showSource

    __showSource()

    Private slot to handle the goto context menu entry.

    BreakPointViewer.__toSourceIndex

    __toSourceIndex(index)

    Private slot to convert an index to a source index.

    index
    index to be converted (QModelIndex)

    BreakPointViewer.handleResetUI

    handleResetUI()

    Public slot to reset the breakpoint viewer.

    BreakPointViewer.highlightBreakpoint

    highlightBreakpoint(fn, lineno)

    Public slot to handle the clientLine signal.

    fn
    filename of the breakpoint (QString)
    lineno
    line number of the breakpoint (integer)

    BreakPointViewer.setModel

    setModel(model)

    Public slot to set the breakpoint model.

    reference
    to the breakpoint model (BreakPointModel)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.E4XML.UserProjectWriter.html0000644000175000001440000000013212261331352026745 xustar000000000000000030 mtime=1388688106.559229088 30 atime=1389081084.971724364 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.E4XML.UserProjectWriter.html0000644000175000001440000000435712261331352026510 0ustar00detlevusers00000000000000 eric4.E4XML.UserProjectWriter

    eric4.E4XML.UserProjectWriter

    Module implementing the writer class for writing an XML user project properties file.

    Global Attributes

    None

    Classes

    UserProjectWriter Class implementing the writer class for writing an XML user project properties file.

    Functions

    None


    UserProjectWriter

    Class implementing the writer class for writing an XML user project properties file.

    Derived from

    XMLWriterBase

    Class Attributes

    None

    Class Methods

    None

    Methods

    UserProjectWriter Constructor
    writeXML Public method to write the XML to the file.

    Static Methods

    None

    UserProjectWriter (Constructor)

    UserProjectWriter(file, projectName)

    Constructor

    file
    open file (like) object for writing
    projectName
    name of the project (string)

    UserProjectWriter.writeXML

    writeXML()

    Public method to write the XML to the file.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsSubversion.SvnSta0000644000175000001440000000031412261331352031316 xustar0000000000000000115 path=eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsSubversion.SvnStatusMonitorThread.html 29 mtime=1388688106.86122924 30 atime=1389081084.971724364 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsSubversion.SvnStatusMonitorThread0000644000175000001440000000660212261331352034306 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsSubversion.SvnStatusMonitorThread

    eric4.Plugins.VcsPlugins.vcsSubversion.SvnStatusMonitorThread

    Module implementing the VCS status monitor thread class for Subversion.

    Global Attributes

    None

    Classes

    SvnStatusMonitorThread Class implementing the VCS status monitor thread class for Subversion.

    Functions

    None


    SvnStatusMonitorThread

    Class implementing the VCS status monitor thread class for Subversion.

    Derived from

    VcsStatusMonitorThread

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnStatusMonitorThread Constructor
    _performMonitor Protected method implementing the monitoring action.

    Static Methods

    None

    SvnStatusMonitorThread (Constructor)

    SvnStatusMonitorThread(interval, projectDir, vcs, parent = None)

    Constructor

    interval
    new interval in seconds (integer)
    projectDir
    project directory to monitor (string or QString)
    vcs
    reference to the version control object
    parent
    reference to the parent object (QObject)

    SvnStatusMonitorThread._performMonitor

    _performMonitor()

    Protected method implementing the monitoring action.

    This method populates the statusList member variable with a list of strings giving the status in the first column and the path relative to the project directory starting with the third column. The allowed status flags are:

    • "A" path was added but not yet comitted
    • "M" path has local changes
    • "O" path was removed
    • "R" path was deleted and then re-added
    • "U" path needs an update
    • "Z" path contains a conflict
    • " " path is back at normal

    Returns:
    tuple of flag indicating successful operation (boolean) and a status message in case of non successful operation (QString)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Project.ProjectBrowserFlags.html0000644000175000001440000000013212261331351030006 xustar000000000000000030 mtime=1388688105.775228694 30 atime=1389081084.971724364 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Project.ProjectBrowserFlags.html0000644000175000001440000000206712261331351027545 0ustar00detlevusers00000000000000 eric4.Project.ProjectBrowserFlags

    eric4.Project.ProjectBrowserFlags

    Module defining the project browser flags.

    Global Attributes

    AllBrowsersFlag
    FormsBrowserFlag
    InterfacesBrowserFlag
    OthersBrowserFlag
    ResourcesBrowserFlag
    SourcesBrowserFlag
    TranslationsBrowserFlag

    Classes

    None

    Functions

    None

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.Plugins.ViewManagerPlugins.Listsp0000644000175000001440000000013212261331354031263 xustar000000000000000030 mtime=1388688108.659230143 30 atime=1389081084.971724364 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.Plugins.ViewManagerPlugins.Listspace.html0000644000175000001440000000153112261331354032431 0ustar00detlevusers00000000000000 eric4.Plugins.ViewManagerPlugins.Listspace

    eric4.Plugins.ViewManagerPlugins.Listspace

    Package containing the listspace view manager plugin.

    Modules

    Listspace Module implementing the listspace viewmanager class.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.Exporters.ExporterBase.html0000644000175000001440000000013212261331354031114 xustar000000000000000030 mtime=1388688108.418230022 30 atime=1389081084.971724364 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.Exporters.ExporterBase.html0000644000175000001440000000530212261331354030646 0ustar00detlevusers00000000000000 eric4.QScintilla.Exporters.ExporterBase

    eric4.QScintilla.Exporters.ExporterBase

    Module implementing the exporter base class.

    Global Attributes

    None

    Classes

    ExporterBase Class implementing the exporter base class.

    Functions

    None


    ExporterBase

    Class implementing the exporter base class.

    Derived from

    QObject

    Class Attributes

    None

    Class Methods

    None

    Methods

    ExporterBase Constructor
    _getFileName Protected method to get the file name of the export file from the user.
    exportSource Public method performing the export.

    Static Methods

    None

    ExporterBase (Constructor)

    ExporterBase(editor, parent = None)

    Constructor

    editor
    reference to the editor object (QScintilla.Editor.Editor)
    parent
    parent object of the exporter (QObject)

    ExporterBase._getFileName

    _getFileName(filter)

    Protected method to get the file name of the export file from the user.

    filter
    the filter string to be used (QString). The filter for "All Files (*)" is appended by this method.

    ExporterBase.exportSource

    exportSource()

    Public method performing the export.

    This method must be overridden by the real exporters.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.ZoomDialog.html0000644000175000001440000000013212261331352026561 xustar000000000000000030 mtime=1388688106.149228882 30 atime=1389081084.971724364 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.ZoomDialog.html0000644000175000001440000000432112261331352026313 0ustar00detlevusers00000000000000 eric4.QScintilla.ZoomDialog

    eric4.QScintilla.ZoomDialog

    Module implementing a dialog to select the zoom scale.

    Global Attributes

    None

    Classes

    ZoomDialog Class implementing a dialog to select the zoom scale.

    Functions

    None


    ZoomDialog

    Class implementing a dialog to select the zoom scale.

    Derived from

    QDialog, Ui_ZoomDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    ZoomDialog Constructor
    getZoomSize Public method to retrieve the zoom size.

    Static Methods

    None

    ZoomDialog (Constructor)

    ZoomDialog(zoom, parent, name = None, modal = False)

    Constructor

    zoom
    zoom factor to show in the spinbox
    parent
    parent widget of this dialog (QWidget)
    name
    name of this dialog (string or QString)

    ZoomDialog.getZoomSize

    getZoomSize()

    Public method to retrieve the zoom size.

    Returns:
    zoom size (int)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Tools.UIPreviewer.html0000644000175000001440000000013212261331351025757 xustar000000000000000030 mtime=1388688105.564228589 30 atime=1389081084.971724364 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Tools.UIPreviewer.html0000644000175000001440000002121512261331351025512 0ustar00detlevusers00000000000000 eric4.Tools.UIPreviewer

    eric4.Tools.UIPreviewer

    Module implementing the UI Previewer main window.

    Global Attributes

    None

    Classes

    UIPreviewer Class implementing the UI Previewer main window.

    Functions

    None


    UIPreviewer

    Class implementing the UI Previewer main window.

    Derived from

    KQMainWindow

    Class Attributes

    None

    Class Methods

    None

    Methods

    UIPreviewer Constructor
    __about Private slot to show the about information.
    __aboutQt Private slot to show info about Qt.
    __copyImageToClipboard Private slot to handle the Copy Image menu action.
    __guiStyleSelected Private slot to handle the selection of a GUI style.
    __handleCloseEvent Private slot to handle the close event of a viewed QMainWidget.
    __initActions Private method to define the user interface actions.
    __initMenus Private method to create the menus.
    __initToolbars Private method to create the toolbars.
    __loadFile Private slot to load a ui file.
    __openFile Private slot to load a new file.
    __print Private slot to the actual printing.
    __printImage Private slot to handle the Print Image menu action.
    __printPreviewImage Private slot to handle the Print Preview menu action.
    __saveImage Private slot to handle the Save Image menu action.
    __updateActions Private slot to update the actions state.
    __updateChildren Private slot to change the style of the show UI.
    __whatsThis Private slot called in to enter Whats This mode.
    eventFilter Protected method called to filter an event.
    show Public slot to show this dialog.

    Static Methods

    None

    UIPreviewer (Constructor)

    UIPreviewer(filename = None, parent = None, name = None)

    Constructor

    filename
    name of a UI file to load
    parent
    parent widget of this window (QWidget)
    name
    name of this window (string or QString)

    UIPreviewer.__about

    __about()

    Private slot to show the about information.

    UIPreviewer.__aboutQt

    __aboutQt()

    Private slot to show info about Qt.

    UIPreviewer.__copyImageToClipboard

    __copyImageToClipboard()

    Private slot to handle the Copy Image menu action.

    UIPreviewer.__guiStyleSelected

    __guiStyleSelected(selectedStyle)

    Private slot to handle the selection of a GUI style.

    selectedStyle
    name of the selected style (QString)

    UIPreviewer.__handleCloseEvent

    __handleCloseEvent()

    Private slot to handle the close event of a viewed QMainWidget.

    UIPreviewer.__initActions

    __initActions()

    Private method to define the user interface actions.

    UIPreviewer.__initMenus

    __initMenus()

    Private method to create the menus.

    UIPreviewer.__initToolbars

    __initToolbars()

    Private method to create the toolbars.

    UIPreviewer.__loadFile

    __loadFile(fn)

    Private slot to load a ui file.

    fn
    name of the ui file to be laoded (string or QString)

    UIPreviewer.__openFile

    __openFile()

    Private slot to load a new file.

    UIPreviewer.__print

    __print(printer)

    Private slot to the actual printing.

    printer
    reference to the printer object (QPrinter)

    UIPreviewer.__printImage

    __printImage()

    Private slot to handle the Print Image menu action.

    UIPreviewer.__printPreviewImage

    __printPreviewImage()

    Private slot to handle the Print Preview menu action.

    UIPreviewer.__saveImage

    __saveImage()

    Private slot to handle the Save Image menu action.

    UIPreviewer.__updateActions

    __updateActions()

    Private slot to update the actions state.

    UIPreviewer.__updateChildren

    __updateChildren(sstyle)

    Private slot to change the style of the show UI.

    sstyle
    name of the selected style (QString)

    UIPreviewer.__whatsThis

    __whatsThis()

    Private slot called in to enter Whats This mode.

    UIPreviewer.eventFilter

    eventFilter(obj, ev)

    Protected method called to filter an event.

    object
    object, that generated the event (QObject)
    event
    the event, that was generated by object (QEvent)
    Returns:
    flag indicating if event was filtered out

    UIPreviewer.show

    show()

    Public slot to show this dialog.

    This overloaded slot loads a UI file to be previewed after the main window has been shown. This way, previewing a dialog doesn't interfere with showing the main window.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsSubversion.SvnUrl0000644000175000001440000000031412261331352031331 xustar0000000000000000114 path=eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsSubversion.SvnUrlSelectionDialog.html 30 mtime=1388688106.956229288 30 atime=1389081084.971724364 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsSubversion.SvnUrlSelectionDialog.0000644000175000001440000001073412261331352034132 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsSubversion.SvnUrlSelectionDialog

    eric4.Plugins.VcsPlugins.vcsSubversion.SvnUrlSelectionDialog

    Module implementing a dialog to enter the URLs for the svn diff command.

    Global Attributes

    None

    Classes

    SvnUrlSelectionDialog Class implementing a dialog to enter the URLs for the svn diff command.

    Functions

    None


    SvnUrlSelectionDialog

    Class implementing a dialog to enter the URLs for the svn diff command.

    Derived from

    QDialog, Ui_SvnUrlSelectionDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnUrlSelectionDialog Constructor
    __changeLabelCombo Private method used to change the label combo depending on the selected type.
    getURLs Public method to get the entered URLs.
    on_typeCombo1_currentIndexChanged Private slot called when the selected type was changed.
    on_typeCombo2_currentIndexChanged Private slot called when the selected type was changed.

    Static Methods

    None

    SvnUrlSelectionDialog (Constructor)

    SvnUrlSelectionDialog(vcs, tagsList, branchesList, path, parent = None)

    Constructor

    vcs
    reference to the vcs object
    tagsList
    list of tags (QStringList)
    branchesList
    list of branches (QStringList)
    path
    pathname to determine the repository URL from (string or QString)
    parent
    parent widget of the dialog (QWidget)

    SvnUrlSelectionDialog.__changeLabelCombo

    __changeLabelCombo(labelCombo, type_)

    Private method used to change the label combo depending on the selected type.

    labelCombo
    reference to the labelCombo object (QComboBox)
    type
    type string (QString)

    SvnUrlSelectionDialog.getURLs

    getURLs()

    Public method to get the entered URLs.

    Returns:
    tuple of list of two URL strings (list of strings) and a flag indicating a diff summary (boolean)

    SvnUrlSelectionDialog.on_typeCombo1_currentIndexChanged

    on_typeCombo1_currentIndexChanged(type_)

    Private slot called when the selected type was changed.

    type_
    selected type (QString)

    SvnUrlSelectionDialog.on_typeCombo2_currentIndexChanged

    on_typeCombo2_currentIndexChanged(type_)

    Private slot called when the selected type was changed.

    type_
    selected type (QString)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.MultiProject.MultiProject.html0000644000175000001440000000013212261331351027513 xustar000000000000000030 mtime=1388688105.151228381 30 atime=1389081084.972724364 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.MultiProject.MultiProject.html0000644000175000001440000005314212261331351027252 0ustar00detlevusers00000000000000 eric4.MultiProject.MultiProject

    eric4.MultiProject.MultiProject

    Module implementing the multi project management functionality.

    Global Attributes

    None

    Classes

    MultiProject Class implementing the project management functionality.

    Functions

    None


    MultiProject

    Class implementing the project management functionality.

    Signals

    dirty(int)
    emitted when the dirty state changes
    multiProjectClosed()
    emitted after a multi project was closed
    multiProjectOpened()
    emitted after a multi project file was read
    multiProjectPropertiesChanged()
    emitted after the multi project properties were changed
    newMultiProject()
    emitted after a new multi project was generated
    projectAdded(project data dict)
    emitted after a project entry has been added
    projectDataChanged(project data dict)
    emitted after a project entry has been changed
    projectOpened(filename)
    emitted after the project has been opened
    projectRemoved(project data dict)
    emitted after a project entry has been removed
    showMenu(string, QMenu)
    emitted when a menu is about to be shown. The name of the menu and a reference to the menu are given.

    Derived from

    QObject

    Class Attributes

    None

    Class Methods

    None

    Methods

    MultiProject Constructor
    __checkFilesExist Private method to check, if the files in a list exist.
    __clearRecent Private method to clear the recent multi projects menu.
    __initData Private method to initialize the multi project data part.
    __loadRecent Private method to load the recently opened multi project filenames.
    __openMasterProject Public slot to open the master project.
    __openRecent Private method to open a multi project from the list of rencently opened multi projects.
    __readMultiProject Private method to read in a multi project (.e4m, .e4mz) file.
    __readXMLMultiProject Private method to read the multi project data from an XML file.
    __saveRecent Private method to save the list of recently opened filenames.
    __showContextMenuRecent Private method to set up the recent multi projects menu.
    __showMenu Private method to set up the multi project menu.
    __showProperties Private slot to display the properties dialog.
    __syncRecent Private method to synchronize the list of recently opened multi projects with the central store.
    __writeMultiProject Private method to save the multi project infos to a multi project file.
    __writeXMLMultiProject Private method to write the multi project data to an XML file.
    addE4Actions Public method to add actions to the list of actions.
    addProject Public slot used to add files to the project.
    changeProjectProperties Public method to change the data of a project entry.
    checkDirty Public method to check the dirty status and open a message window.
    closeMultiProject Public slot to close the current multi project.
    getActions Public method to get a list of all actions.
    getDependantProjectFiles Public method to get the filenames of the dependant projects.
    getMasterProjectFile Public method to get the filename of the master project.
    getMenu Public method to get a reference to the main menu or a submenu.
    getMostRecent Public method to get the most recently opened multiproject.
    getMultiProjectFile Public method to get the path of the multi project file.
    getMultiProjectPath Public method to get the multi project path.
    getProject Public method to get a reference to a project entry.
    getProjects Public method to get all project entries.
    initActions Public slot to initialize the multi project related actions.
    initMenu Public slot to initialize the multi project menu.
    initToolbar Public slot to initialize the multi project toolbar.
    isDirty Public method to return the dirty state.
    isOpen Public method to return the opened state.
    newMultiProject Public slot to build a new multi project.
    openMultiProject Public slot to open a multi project.
    openProject Public slot to open a project.
    removeE4Actions Public method to remove actions from the list of actions.
    removeProject Public slot to remove a project from the multi project.
    saveMultiProject Public slot to save the current multi project.
    saveMultiProjectAs Public slot to save the current multi project to a different file.
    setDirty Public method to set the dirty state.

    Static Methods

    None

    MultiProject (Constructor)

    MultiProject(project, parent = None, filename = None)

    Constructor

    project
    reference to the project object (Project.Project)
    parent
    parent widget (usually the ui object) (QWidget)
    filename
    optional filename of a multi project file to open (string)

    MultiProject.__checkFilesExist

    __checkFilesExist()

    Private method to check, if the files in a list exist.

    The project files are checked for existance in the filesystem. Non existant projects are removed from the list and the dirty state of the multi project is changed accordingly.

    MultiProject.__clearRecent

    __clearRecent()

    Private method to clear the recent multi projects menu.

    MultiProject.__initData

    __initData()

    Private method to initialize the multi project data part.

    MultiProject.__loadRecent

    __loadRecent()

    Private method to load the recently opened multi project filenames.

    MultiProject.__openMasterProject

    __openMasterProject(reopen = True)

    Public slot to open the master project.

    reopen
    flag indicating, that the master project should be reopened, if it has been opened already (boolean)

    MultiProject.__openRecent

    __openRecent(act)

    Private method to open a multi project from the list of rencently opened multi projects.

    act
    reference to the action that triggered (QAction)

    MultiProject.__readMultiProject

    __readMultiProject(fn)

    Private method to read in a multi project (.e4m, .e4mz) file.

    fn
    filename of the multi project file to be read (string or QString)
    Returns:
    flag indicating success

    MultiProject.__readXMLMultiProject

    __readXMLMultiProject(fn, validating)

    Private method to read the multi project data from an XML file.

    fn
    filename of the multi project file to be read (string or QString)
    validating
    flag indicating a validation of the XML file is requested (boolean)
    Returns:
    flag indicating success

    MultiProject.__saveRecent

    __saveRecent()

    Private method to save the list of recently opened filenames.

    MultiProject.__showContextMenuRecent

    __showContextMenuRecent()

    Private method to set up the recent multi projects menu.

    MultiProject.__showMenu

    __showMenu()

    Private method to set up the multi project menu.

    MultiProject.__showProperties

    __showProperties()

    Private slot to display the properties dialog.

    MultiProject.__syncRecent

    __syncRecent()

    Private method to synchronize the list of recently opened multi projects with the central store.

    MultiProject.__writeMultiProject

    __writeMultiProject(fn = None)

    Private method to save the multi project infos to a multi project file.

    fn
    optional filename of the multi project file to be written. If fn is None, the filename stored in the multi project object is used. This is the 'save' action. If fn is given, this filename is used instead of the one in the multi project object. This is the 'save as' action.
    Returns:
    flag indicating success

    MultiProject.__writeXMLMultiProject

    __writeXMLMultiProject(fn = None)

    Private method to write the multi project data to an XML file.

    fn
    the filename of the multi project file (string)

    MultiProject.addE4Actions

    addE4Actions(actions)

    Public method to add actions to the list of actions.

    actions
    list of actions (list of E4Action)

    MultiProject.addProject

    addProject(startdir = None)

    Public slot used to add files to the project.

    startdir
    start directory for the selection dialog

    MultiProject.changeProjectProperties

    changeProjectProperties(pro)

    Public method to change the data of a project entry.

    pro
    dictionary with the project data

    MultiProject.checkDirty

    checkDirty()

    Public method to check the dirty status and open a message window.

    Returns:
    flag indicating whether this operation was successful

    MultiProject.closeMultiProject

    closeMultiProject()

    Public slot to close the current multi project.

    Returns:
    flag indicating success (boolean)

    MultiProject.getActions

    getActions()

    Public method to get a list of all actions.

    Returns:
    list of all actions (list of E4Action)

    MultiProject.getDependantProjectFiles

    getDependantProjectFiles()

    Public method to get the filenames of the dependant projects.

    Returns:
    names of the dependant project files (list of strings)

    MultiProject.getMasterProjectFile

    getMasterProjectFile()

    Public method to get the filename of the master project.

    Returns:
    name of the master project file (string)

    MultiProject.getMenu

    getMenu(menuName)

    Public method to get a reference to the main menu or a submenu.

    menuName
    name of the menu (string)
    Returns:
    reference to the requested menu (QMenu) or None

    MultiProject.getMostRecent

    getMostRecent()

    Public method to get the most recently opened multiproject.

    Returns:
    path of the most recently opened multiproject (string)

    MultiProject.getMultiProjectFile

    getMultiProjectFile()

    Public method to get the path of the multi project file.

    Returns:
    path of the multi project file (string)

    MultiProject.getMultiProjectPath

    getMultiProjectPath()

    Public method to get the multi project path.

    Returns:
    multi project path (string)

    MultiProject.getProject

    getProject(fn)

    Public method to get a reference to a project entry.

    fn
    filename of the project to be removed from the multi project
    Returns:
    dictionary containing the project data

    MultiProject.getProjects

    getProjects()

    Public method to get all project entries.

    MultiProject.initActions

    initActions()

    Public slot to initialize the multi project related actions.

    MultiProject.initMenu

    initMenu()

    Public slot to initialize the multi project menu.

    Returns:
    the menu generated (QMenu)

    MultiProject.initToolbar

    initToolbar(toolbarManager)

    Public slot to initialize the multi project toolbar.

    toolbarManager
    reference to a toolbar manager object (E4ToolBarManager)
    Returns:
    the toolbar generated (QToolBar)

    MultiProject.isDirty

    isDirty()

    Public method to return the dirty state.

    Returns:
    dirty state (boolean)

    MultiProject.isOpen

    isOpen()

    Public method to return the opened state.

    Returns:
    open state (boolean)

    MultiProject.newMultiProject

    newMultiProject()

    Public slot to build a new multi project.

    This method displays the new multi project dialog and initializes the multi project object with the data entered.

    MultiProject.openMultiProject

    openMultiProject(fn = None, openMaster = True)

    Public slot to open a multi project.

    fn
    optional filename of the multi project file to be read
    openMaster
    flag indicating, that the master project should be opened depending on the configuration(boolean)

    MultiProject.openProject

    openProject(filename)

    Public slot to open a project.

    filename
    filename of the project file (string)

    MultiProject.removeE4Actions

    removeE4Actions(actions)

    Public method to remove actions from the list of actions.

    actions
    list of actions (list of E4Action)

    MultiProject.removeProject

    removeProject(fn)

    Public slot to remove a project from the multi project.

    fn
    filename of the project to be removed from the multi project

    MultiProject.saveMultiProject

    saveMultiProject()

    Public slot to save the current multi project.

    Returns:
    flag indicating success

    MultiProject.saveMultiProjectAs

    saveMultiProjectAs()

    Public slot to save the current multi project to a different file.

    Returns:
    flag indicating success

    MultiProject.setDirty

    setDirty(b)

    Public method to set the dirty state.

    It emits the signal dirty(int).

    b
    dirty state (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ConfigurationPages.Viewmana0000644000175000001440000000013212261331353031306 xustar000000000000000030 mtime=1388688107.522229572 30 atime=1389081084.972724364 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.ViewmanagerPage.html0000644000175000001440000000566612261331353033313 0ustar00detlevusers00000000000000 eric4.Preferences.ConfigurationPages.ViewmanagerPage

    eric4.Preferences.ConfigurationPages.ViewmanagerPage

    Module implementing the Viewmanager configuration page.

    Global Attributes

    None

    Classes

    ViewmanagerPage Class implementing the Viewmanager configuration page.

    Functions

    create Module function to create the configuration page.


    ViewmanagerPage

    Class implementing the Viewmanager configuration page.

    Derived from

    ConfigurationPageBase, Ui_ViewmanagerPage

    Class Attributes

    None

    Class Methods

    None

    Methods

    ViewmanagerPage Constructor
    on_windowComboBox_activated Private slot to show a preview of the selected workspace view type.
    save Public slot to save the Viewmanager configuration.

    Static Methods

    None

    ViewmanagerPage (Constructor)

    ViewmanagerPage()

    Constructor

    ViewmanagerPage.on_windowComboBox_activated

    on_windowComboBox_activated(index)

    Private slot to show a preview of the selected workspace view type.

    index
    index of selected workspace view type (integer)

    ViewmanagerPage.save

    save()

    Public slot to save the Viewmanager configuration.



    create

    create(dlg)

    Module function to create the configuration page.

    dlg
    reference to the configuration dialog

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.HelpTopicDialog.html0000644000175000001440000000013112261331351027571 xustar000000000000000029 mtime=1388688105.30822846 30 atime=1389081084.973724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.HelpTopicDialog.html0000644000175000001440000000453112261331351027327 0ustar00detlevusers00000000000000 eric4.Helpviewer.HelpTopicDialog

    eric4.Helpviewer.HelpTopicDialog

    Module implementing a dialog to select a help topic to display.

    Global Attributes

    None

    Classes

    HelpTopicDialog Class implementing a dialog to select a help topic to display.

    Functions

    None


    HelpTopicDialog

    Class implementing a dialog to select a help topic to display.

    Derived from

    QDialog, Ui_HelpTopicDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    HelpTopicDialog Constructor
    link Public method to the link of the selected topic.

    Static Methods

    None

    HelpTopicDialog (Constructor)

    HelpTopicDialog(parent, keyword, links)

    Constructor

    parent
    reference to the parent widget (QWidget)
    keyword
    keyword for the link set (QString)
    links
    dictionary with help topic as key (QString) and URL as value (QUrl)

    HelpTopicDialog.link

    link()

    Public method to the link of the selected topic.

    Returns:
    URL of the selected topic (QUrl)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsPySvn.SvnRelocate0000644000175000001440000000013212261331353031244 xustar000000000000000030 mtime=1388688107.232229426 30 atime=1389081084.973724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsPySvn.SvnRelocateDialog.html0000644000175000001440000000470312261331353033065 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsPySvn.SvnRelocateDialog

    eric4.Plugins.VcsPlugins.vcsPySvn.SvnRelocateDialog

    Module implementing a dialog to enter the data to relocate the workspace.

    Global Attributes

    None

    Classes

    SvnRelocateDialog Class implementing a dialog to enter the data to relocate the workspace.

    Functions

    None


    SvnRelocateDialog

    Class implementing a dialog to enter the data to relocate the workspace.

    Derived from

    QDialog, Ui_SvnRelocateDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnRelocateDialog Constructor
    getData Public slot used to retrieve the data entered into the dialog.

    Static Methods

    None

    SvnRelocateDialog (Constructor)

    SvnRelocateDialog(currUrl, parent = None)

    Constructor

    currUrl
    current repository URL (string or QString)
    parent
    parent widget (QWidget)

    SvnRelocateDialog.getData

    getData()

    Public slot used to retrieve the data entered into the dialog.

    Returns:
    the new repository URL (string) and an indication, if the relocate is inside the repository (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.OpenSearch.OpenSearchEngineA0000644000175000001440000000013212261331354031127 xustar000000000000000030 mtime=1388688108.009229816 30 atime=1389081084.973724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.OpenSearch.OpenSearchEngineAction.html0000644000175000001440000000454512261331354032671 0ustar00detlevusers00000000000000 eric4.Helpviewer.OpenSearch.OpenSearchEngineAction

    eric4.Helpviewer.OpenSearch.OpenSearchEngineAction

    Module implementing a QAction subclass for open search.

    Global Attributes

    None

    Classes

    OpenSearchEngineAction Class implementing a QAction subclass for open search.

    Functions

    None


    OpenSearchEngineAction

    Class implementing a QAction subclass for open search.

    Derived from

    QAction

    Class Attributes

    None

    Class Methods

    None

    Methods

    OpenSearchEngineAction Constructor
    __imageChanged Private slot handling a change of the associated image.

    Static Methods

    None

    OpenSearchEngineAction (Constructor)

    OpenSearchEngineAction(engine, parent = None)

    Constructor

    engine
    reference to the open search engine object (OpenSearchEngine)
    parent
    reference to the parent object (QObject)

    OpenSearchEngineAction.__imageChanged

    __imageChanged()

    Private slot handling a change of the associated image.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsSubversion.SvnLog0000644000175000001440000000013212261331352031306 xustar000000000000000030 mtime=1388688106.907229263 30 atime=1389081084.973724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsSubversion.SvnLogDialog.html0000644000175000001440000001457612261331352033140 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsSubversion.SvnLogDialog

    eric4.Plugins.VcsPlugins.vcsSubversion.SvnLogDialog

    Module implementing a dialog to show the output of the svn log command process.

    Global Attributes

    None

    Classes

    SvnLogDialog Class implementing a dialog to show the output of the svn log command process.

    Functions

    None


    SvnLogDialog

    Class implementing a dialog to show the output of the svn log command process.

    The dialog is nonmodal. Clicking a link in the upper text pane shows a diff of the versions.

    Derived from

    QWidget, Ui_SvnLogDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnLogDialog Constructor
    __procFinished Private slot connected to the finished signal.
    __readStderr Private slot to handle the readyReadStandardError signal.
    __readStdout Private slot to handle the readyReadStandardOutput signal.
    __sourceChanged Private slot to handle the sourceChanged signal of the contents pane.
    closeEvent Private slot implementing a close event handler.
    keyPressEvent Protected slot to handle a key press event.
    on_input_returnPressed Private slot to handle the press of the return key in the input field.
    on_passwordCheckBox_toggled Private slot to handle the password checkbox toggled.
    on_sendButton_clicked Private slot to send the input to the subversion process.
    start Public slot to start the cvs log command.

    Static Methods

    None

    SvnLogDialog (Constructor)

    SvnLogDialog(vcs, parent = None)

    Constructor

    vcs
    reference to the vcs object
    parent
    parent widget (QWidget)

    SvnLogDialog.__procFinished

    __procFinished(exitCode, exitStatus)

    Private slot connected to the finished signal.

    exitCode
    exit code of the process (integer)
    exitStatus
    exit status of the process (QProcess.ExitStatus)

    SvnLogDialog.__readStderr

    __readStderr()

    Private slot to handle the readyReadStandardError signal.

    It reads the error output of the process and inserts it into the error pane.

    SvnLogDialog.__readStdout

    __readStdout()

    Private slot to handle the readyReadStandardOutput signal.

    It reads the output of the process and inserts it into a buffer.

    SvnLogDialog.__sourceChanged

    __sourceChanged(url)

    Private slot to handle the sourceChanged signal of the contents pane.

    url
    the url that was clicked (QUrl)

    SvnLogDialog.closeEvent

    closeEvent(e)

    Private slot implementing a close event handler.

    e
    close event (QCloseEvent)

    SvnLogDialog.keyPressEvent

    keyPressEvent(evt)

    Protected slot to handle a key press event.

    evt
    the key press event (QKeyEvent)

    SvnLogDialog.on_input_returnPressed

    on_input_returnPressed()

    Private slot to handle the press of the return key in the input field.

    SvnLogDialog.on_passwordCheckBox_toggled

    on_passwordCheckBox_toggled(isOn)

    Private slot to handle the password checkbox toggled.

    isOn
    flag indicating the status of the check box (boolean)

    SvnLogDialog.on_sendButton_clicked

    on_sendButton_clicked()

    Private slot to send the input to the subversion process.

    SvnLogDialog.start

    start(fn, noEntries = 0)

    Public slot to start the cvs log command.

    fn
    filename to show the log for (string)
    noEntries
    number of entries to show (integer)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.DocumentationPlugins.Ericdoc.Er0000644000175000001440000000031412261331352031221 xustar0000000000000000114 path=eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.DocumentationPlugins.Ericdoc.EricdocExecDialog.html 30 mtime=1388688106.667229143 30 atime=1389081084.973724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.DocumentationPlugins.Ericdoc.EricdocExecDialog.0000644000175000001440000001100712261331352033755 0ustar00detlevusers00000000000000 eric4.Plugins.DocumentationPlugins.Ericdoc.EricdocExecDialog

    eric4.Plugins.DocumentationPlugins.Ericdoc.EricdocExecDialog

    Module implementing a dialog to show the output of the ericdoc process.

    Global Attributes

    None

    Classes

    EricdocExecDialog Class implementing a dialog to show the output of the ericdoc process.

    Functions

    None


    EricdocExecDialog

    Class implementing a dialog to show the output of the ericdoc process.

    This class starts a QProcess and displays a dialog that shows the output of the documentation command process.

    Derived from

    QDialog, Ui_EricdocExecDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    EricdocExecDialog Constructor
    __finish Private slot called when the process finished.
    __readStderr Private slot to handle the readyReadStandardError signal.
    __readStdout Private slot to handle the readyReadStandardOutput signal.
    on_buttonBox_clicked Private slot called by a button of the button box clicked.
    start Public slot to start the ericdoc command.

    Static Methods

    None

    EricdocExecDialog (Constructor)

    EricdocExecDialog(cmdname, parent = None)

    Constructor

    cmdname
    name of the documentation generator (string)
    parent
    parent widget of this dialog (QWidget)

    EricdocExecDialog.__finish

    __finish()

    Private slot called when the process finished.

    It is called when the process finished or the user pressed the button.

    EricdocExecDialog.__readStderr

    __readStderr()

    Private slot to handle the readyReadStandardError signal.

    It reads the error output of the process and inserts it into the error pane.

    EricdocExecDialog.__readStdout

    __readStdout()

    Private slot to handle the readyReadStandardOutput signal.

    It reads the output of the process, formats it and inserts it into the contents pane.

    EricdocExecDialog.on_buttonBox_clicked

    on_buttonBox_clicked(button)

    Private slot called by a button of the button box clicked.

    button
    button that was clicked (QAbstractButton)

    EricdocExecDialog.start

    start(args, fn)

    Public slot to start the ericdoc command.

    args
    commandline arguments for ericdoc program (QStringList)
    fn
    filename or dirname to be processed by ericdoc program
    Returns:
    flag indicating the successful start of the process

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.VCS.html0000644000175000001440000000013212261331354024215 xustar000000000000000030 mtime=1388688108.659230143 30 atime=1389081084.973724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.VCS.html0000644000175000001440000000427512261331354023757 0ustar00detlevusers00000000000000 eric4.VCS

    eric4.VCS

    Module implementing the general part of the interface to version control systems.

    The general part of the VCS interface defines classes to implement common dialogs. These are a dialog to enter command options, a dialog to display some repository information and an abstract base class. The individual interfaces (i.e. CVS) have to be subclasses of this base class.

    Modules

    CommandOptionsDialog Module implementing the VCS command options dialog.
    ProjectBrowserHelper Module implementing the base class of the VCS project browser helper.
    ProjectHelper Module implementing the base class of the VCS project helper.
    RepositoryInfoDialog Module implemting a dialog to show repository information.
    StatusMonitorLed Module implementing a LED to indicate the status of the VCS status monitor thread.
    StatusMonitorThread Module implementing the VCS status monitor thread base class.
    VersionControl Module implementing an abstract base class to be subclassed by all specific VCS interfaces.
    VCS Module implementing the general part of the interface to version control systems.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.E4Gui.E4ModelMenu.html0000644000175000001440000000013212261331350025443 xustar000000000000000030 mtime=1388688104.424228016 30 atime=1389081084.973724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.E4Gui.E4ModelMenu.html0000644000175000001440000003301712261331350025201 0ustar00detlevusers00000000000000 eric4.E4Gui.E4ModelMenu

    eric4.E4Gui.E4ModelMenu

    Module implementing a menu populated from a QAbstractItemModel.

    Global Attributes

    None

    Classes

    E4ModelMenu Class implementing a menu populated from a QAbstractItemModel.

    Functions

    None


    E4ModelMenu

    Class implementing a menu populated from a QAbstractItemModel.

    Signals

    activated(const QModelIndex&)
    emitted when an action has been triggered

    Derived from

    QMenu

    Class Attributes

    None

    Class Methods

    None

    Methods

    E4ModelMenu Constructor
    __aboutToShow Private slot to show the menu.
    __actionTriggered Private slot to handle the triggering of an action.
    __makeAction Private method to create an action.
    createBaseMenu Public method to get the menu that is used to populate sub menu's.
    createMenu Public method to put all the children of a parent into a menu of a given length.
    dragEnterEvent Protected method to handle drag enter events.
    dropEvent Protected method to handle drop events.
    firstSeparator Public method to get the first separator.
    index Public method to get the index of an action.
    makeAction Public method to create an action.
    maxRows Public method to get the maximum number of entries to show.
    model Public method to get a reference to the model.
    mouseMoveEvent Protected method to handle mouse move events.
    mousePressEvent Protected method handling mouse press events.
    mouseReleaseEvent Protected method handling mouse release events.
    postPopulated Public method to add any actions after the tree.
    prePopulated Public method to add any actions before the tree.
    removeEntry Public method to remove a menu entry.
    resetFlags Public method to reset the saved internal state.
    rootIndex Public method to get the index of the root item.
    separatorRole Public method to get the role of the separator.
    setFirstSeparator Public method to set the first separator.
    setMaxRows Public method to set the maximum number of entries to show.
    setModel Public method to set the model for the menu.
    setRootIndex Public method to set the index of the root item.
    setSeparatorRole Public method to set the role of the separator.
    setStatusBarTextRole Public method to set the role of the status bar text.
    statusBarTextRole Public method to get the role of the status bar text.

    Static Methods

    None

    E4ModelMenu (Constructor)

    E4ModelMenu(parent = None)

    Constructor

    parent
    reference to the parent widget (QWidget)

    E4ModelMenu.__aboutToShow

    __aboutToShow()

    Private slot to show the menu.

    E4ModelMenu.__actionTriggered

    __actionTriggered(action)

    Private slot to handle the triggering of an action.

    action
    reference to the action that was triggered (QAction)

    E4ModelMenu.__makeAction

    __makeAction(idx)

    Private method to create an action.

    idx
    index of the item to create an action for (QModelIndex)
    Returns:
    reference to the created action (QAction)

    E4ModelMenu.createBaseMenu

    createBaseMenu()

    Public method to get the menu that is used to populate sub menu's.

    Returns:
    reference to the menu (E4ModelMenu)

    E4ModelMenu.createMenu

    createMenu(parent, max_, parentMenu = None, menu = None)

    Public method to put all the children of a parent into a menu of a given length.

    parent
    index of the parent item (QModelIndex)
    max_
    maximum number of entries (integer)
    parentMenu
    reference to the parent menu (QMenu)
    menu
    reference to the menu to be populated (QMenu)

    E4ModelMenu.dragEnterEvent

    dragEnterEvent(evt)

    Protected method to handle drag enter events.

    evt
    reference to the event (QDragEnterEvent)

    E4ModelMenu.dropEvent

    dropEvent(evt)

    Protected method to handle drop events.

    evt
    reference to the event (QDropEvent)

    E4ModelMenu.firstSeparator

    firstSeparator()

    Public method to get the first separator.

    Returns:
    row number of the first separator (integer)

    E4ModelMenu.index

    index(action)

    Public method to get the index of an action.

    action
    reference to the action to get the index for (QAction)
    Returns:
    index of the action (QModelIndex)

    E4ModelMenu.makeAction

    makeAction(icon, text, parent)

    Public method to create an action.

    icon
    icon of the action (QIcon)
    text
    text of the action (QString)
    reference
    to the parent object (QObject)
    Returns:
    reference to the created action (QAction)

    E4ModelMenu.maxRows

    maxRows()

    Public method to get the maximum number of entries to show.

    Returns:
    maximum number of entries to show (integer)

    E4ModelMenu.model

    model()

    Public method to get a reference to the model.

    Returns:
    reference to the model (QAbstractItemModel)

    E4ModelMenu.mouseMoveEvent

    mouseMoveEvent(evt)

    Protected method to handle mouse move events.

    evt
    reference to the event (QMouseEvent)

    E4ModelMenu.mousePressEvent

    mousePressEvent(evt)

    Protected method handling mouse press events.

    evt
    reference to the event object (QMouseEvent)

    E4ModelMenu.mouseReleaseEvent

    mouseReleaseEvent(evt)

    Protected method handling mouse release events.

    evt
    reference to the event object (QMouseEvent)

    E4ModelMenu.postPopulated

    postPopulated()

    Public method to add any actions after the tree.

    E4ModelMenu.prePopulated

    prePopulated()

    Public method to add any actions before the tree.

    Returns:
    flag indicating if any actions were added

    E4ModelMenu.removeEntry

    removeEntry(idx)

    Public method to remove a menu entry.

    idx
    index of the entry to be removed (QModelIndex)

    E4ModelMenu.resetFlags

    resetFlags()

    Public method to reset the saved internal state.

    E4ModelMenu.rootIndex

    rootIndex()

    Public method to get the index of the root item.

    Returns:
    index of the root item (QModelIndex)

    E4ModelMenu.separatorRole

    separatorRole()

    Public method to get the role of the separator.

    Returns:
    role of the separator (integer)

    E4ModelMenu.setFirstSeparator

    setFirstSeparator(offset)

    Public method to set the first separator.

    offset
    row number of the first separator (integer)

    E4ModelMenu.setMaxRows

    setMaxRows(rows)

    Public method to set the maximum number of entries to show.

    rows
    maximum number of entries to show (integer)

    E4ModelMenu.setModel

    setModel(model)

    Public method to set the model for the menu.

    model
    reference to the model (QAbstractItemModel)

    E4ModelMenu.setRootIndex

    setRootIndex(index)

    Public method to set the index of the root item.

    index
    index of the root item (QModelIndex)

    E4ModelMenu.setSeparatorRole

    setSeparatorRole(role)

    Public method to set the role of the separator.

    role
    role of the separator (integer)

    E4ModelMenu.setStatusBarTextRole

    setStatusBarTextRole(role)

    Public method to set the role of the status bar text.

    role
    role of the status bar text (integer)

    E4ModelMenu.statusBarTextRole

    statusBarTextRole()

    Public method to get the role of the status bar text.

    Returns:
    role of the status bar text (integer)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Debugger.EditWatchpointDialog.html0000644000175000001440000000013212261331350030242 xustar000000000000000030 mtime=1388688104.755228182 30 atime=1389081084.974724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Debugger.EditWatchpointDialog.html0000644000175000001440000000623712261331350030004 0ustar00detlevusers00000000000000 eric4.Debugger.EditWatchpointDialog

    eric4.Debugger.EditWatchpointDialog

    Module implementing a dialog to edit watch expression properties.

    Global Attributes

    None

    Classes

    EditWatchpointDialog Class implementing a dialog to edit watch expression properties.

    Functions

    None


    EditWatchpointDialog

    Class implementing a dialog to edit watch expression properties.

    Derived from

    QDialog, Ui_EditWatchpointDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    EditWatchpointDialog Constructor
    __textChanged Private slot to handle the text changed signal of the condition line edit.
    getData Public method to retrieve the entered data.

    Static Methods

    None

    EditWatchpointDialog (Constructor)

    EditWatchpointDialog(properties, parent = None, name = None, modal = False)

    Constructor

    properties
    properties for the watch expression (tuple) (expression, temporary flag, enabled flag, ignore count, special condition)
    parent
    the parent of this dialog
    name
    the widget name of this dialog
    modal
    flag indicating a modal dialog

    EditWatchpointDialog.__textChanged

    __textChanged(txt)

    Private slot to handle the text changed signal of the condition line edit.

    txt
    text of the line edit (QString)

    EditWatchpointDialog.getData

    getData()

    Public method to retrieve the entered data.

    Returns:
    a tuple containing the watch expressions new properties (expression, temporary flag, enabled flag, ignore count, special condition)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DebugClients.Ruby.AsyncIO.html0000644000175000001440000000013212261331354027251 xustar000000000000000030 mtime=1388688108.273229949 30 atime=1389081084.974724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.DebugClients.Ruby.AsyncIO.html0000644000175000001440000000667412261331354027020 0ustar00detlevusers00000000000000 eric4.DebugClients.Ruby.AsyncIO

    eric4.DebugClients.Ruby.AsyncIO

    File implementing an asynchronous interface for the debugger.

    Global Attributes

    None

    Classes

    None

    Modules

    AsyncIO Module implementing asynchronous reading and writing.

    Functions

    None


    AsyncIO

    Module implementing asynchronous reading and writing.

    Module Attributes

    None

    Classes

    None

    Functions

    disconnect Function to disconnect any current connection.
    initializeAsyncIO Function to initialize the module.
    readReady Function called when there is data ready to be read.
    setDescriptors Function called to set the descriptors for the connection.
    write Function to write a string.
    writeReady Function called when we are ready to write data.

    AsyncIO.disconnect

    disconnect()

    Function to disconnect any current connection.

    AsyncIO.initializeAsyncIO

    initializeAsyncIO()

    Function to initialize the module.

    AsyncIO.readReady

    readReady()

    Function called when there is data ready to be read.

    fd
    file descriptor of the file that has data to be read (int)

    AsyncIO.setDescriptors

    setDescriptors(wfd)

    Function called to set the descriptors for the connection.

    fd
    file descriptor of the input file (int)
    wfd
    file descriptor of the output file (int)

    AsyncIO.write

    write()

    Function to write a string.

    s
    the data to be written (string)

    AsyncIO.writeReady

    writeReady()

    Function called when we are ready to write data.

    fd
    file descriptor of the file that has data to be written (int)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.QScintilla.Lexers.html0000644000175000001440000000013212261331354027066 xustar000000000000000030 mtime=1388688108.660230143 30 atime=1389081084.974724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.QScintilla.Lexers.html0000644000175000001440000001377512261331354026635 0ustar00detlevusers00000000000000 eric4.QScintilla.Lexers

    eric4.QScintilla.Lexers

    Package implementing lexers for the various supported programming languages.

    Modules

    Lexer Module implementing the lexer base class.
    LexerBash Module implementing a Bash lexer with some additional methods.
    LexerBatch Module implementing a Batch file lexer with some additional methods.
    LexerCMake Module implementing a CMake lexer with some additional methods.
    LexerCPP Module implementing a CPP lexer with some additional methods.
    LexerCSS Module implementing a CSS lexer with some additional methods.
    LexerCSharp Module implementing a C# lexer with some additional methods.
    LexerContainer Module implementing a base class for custom lexers.
    LexerD Module implementing a D lexer with some additional methods.
    LexerDiff Module implementing a Diff lexer with some additional methods.
    LexerFortran Module implementing a Fortran lexer with some additional methods.
    LexerFortran77 Module implementing a Fortran lexer with some additional methods.
    LexerHTML Module implementing a HTML lexer with some additional methods.
    LexerIDL Module implementing an IDL lexer with some additional methods.
    LexerJava Module implementing a Java lexer with some additional methods.
    LexerJavaScript Module implementing a JavaScript lexer with some additional methods.
    LexerLua Module implementing a Lua lexer with some additional methods.
    LexerMakefile Module implementing a Makefile lexer with some additional methods.
    LexerMatlab Module implementing a Matlab lexer with some additional methods.
    LexerOctave Module implementing a Octave lexer with some additional methods.
    LexerPOV Module implementing a Povray lexer with some additional methods.
    LexerPascal Module implementing a Pascal lexer with some additional methods.
    LexerPerl Module implementing a Perl lexer with some additional methods.
    LexerPostScript Module implementing a PostScript lexer with some additional methods.
    LexerProperties Module implementing a Properties lexer with some additional methods.
    LexerPygments Module implementing a custom lexer using pygments.
    LexerPython Module implementing a Python lexer with some additional methods.
    LexerRuby Module implementing a Ruby lexer with some additional methods.
    LexerSQL Module implementing a SQL lexer with some additional methods.
    LexerTCL Module implementing a TCL/Tk lexer with some additional methods.
    LexerTeX Module implementing a Tex lexer with some additional methods.
    LexerVHDL Module implementing a VHDL lexer with some additional methods.
    LexerXML Module implementing a XML lexer with some additional methods.
    LexerYAML Module implementing a YAML lexer with some additional methods.
    Lexers Package implementing lexers for the various supported programming languages.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.html0000644000175000001440000000013212261331354023563 xustar000000000000000030 mtime=1388688108.659230143 30 atime=1389081084.975724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.html0000644000175000001440000001651412261331354023324 0ustar00detlevusers00000000000000 eric4

    eric4

    Package implementing the eric4 Python IDE (version 4.5).

    To get more information about eric4 please see the eric web site.

    Packages

    DataViews Package containing modules for viewing various data.
    DebugClients Package implementing debug clients for various languages.
    Debugger Package implementing the Debugger frontend
    DocumentationTools Package implementing the source code documentation tools.
    E4Graphics Package implementing some QGraphicsView related general purpoe classes.
    E4Gui Package implementing some special GUI elements.
    E4Network Package implementing some special network related objects.
    E4XML Package implementing the XML handling module of eric4.
    Globals Module defining common data to be used by all modules.
    Graphics Package implementing various graphical representations.
    Helpviewer Package implementing a little web browser.
    IconEditor Package implementing the icon editor tool.
    KdeQt Package implementing compatibility modules for using KDE dialogs instead og Qt dialogs.
    MultiProject Package implementing the multi project management module of eric4.
    PluginManager Package containing the code for the Plugin Manager and related parts.
    Plugins Package containing all core plugins.
    Preferences Package implementing the preferences interface.
    Project Package implementing the project management module of eric4.
    PyUnit Package implementing an interface to the pyunit unittest package.
    QScintilla Package implementing the editor and shell components of the eric4 IDE.
    SqlBrowser Package containing module for the SQL browser tool.
    Tasks Package containing modules for the task management tool.
    Templates Package containing modules for the templating system.
    Tools Package implementing some useful tools used by the IDE.
    UI Package implementing the main user interface and general purpose dialogs.
    Utilities Package implementing various functions/classes needed everywhere within eric4.
    VCS Module implementing the general part of the interface to version control systems.
    ViewManager Package implementing the viewmanager of the eric4 IDE.

    Modules

    compileUiFiles Script for eric4 to compile all .ui files to Python source.
    eric4 Eric4 Python IDE
    eric4_api Eric4 API Generator
    eric4_compare Eric4 Compare
    eric4_configure Eric4 Configure
    eric4_diff Eric4 Diff
    eric4_doc Eric4 Documentation Generator
    eric4_editor Eric4 Editor
    eric4_iconeditor Eric4 Icon Editor
    eric4_plugininstall Eric4 Plugin Installer
    eric4_pluginrepository Eric4 Plugin Installer
    eric4_pluginuninstall Eric4 Plugin Uninstaller
    eric4_qregexp Eric4 QRegExp
    eric4_re Eric4 Re
    eric4_sqlbrowser Eric4 SQL Browser
    eric4_tray Eric4 Tray
    eric4_trpreviewer Eric4 TR Previewer
    eric4_uipreviewer Eric4 UI Previewer
    eric4_unittest Eric4 Unittest
    eric4_webbrowser Eric4 Web Browser
    eric4config Module containing the default configuration of the eric4 installation
    install Installation script for the eric4 IDE and all eric4 related tools.
    install-i18n Installation script for the eric4 IDE translation files.
    patch_modpython Script to patch mod_python for usage with the eric4 IDE.
    patch_pyxml Script to patch pyXML to correct a bug.
    uninstall Uninstallation script for the eric4 IDE and all eric4 related tools.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.Passwords.PasswordModel.html0000644000175000001440000000013212261331353031334 xustar000000000000000030 mtime=1388688107.636229629 30 atime=1389081084.975724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.Passwords.PasswordModel.html0000644000175000001440000001333712261331353031075 0ustar00detlevusers00000000000000 eric4.Helpviewer.Passwords.PasswordModel

    eric4.Helpviewer.Passwords.PasswordModel

    Module implementing a model for password management.

    Global Attributes

    None

    Classes

    PasswordModel Class implementing a model for password management.

    Functions

    None


    PasswordModel

    Class implementing a model for password management.

    Derived from

    QAbstractTableModel

    Class Attributes

    None

    Class Methods

    None

    Methods

    PasswordModel Constructor
    __passwordsChanged Private slot handling a change of the registered passwords.
    columnCount Public method to get the number of columns of the model.
    data Public method to get data from the model.
    headerData Public method to get the header data.
    removeRows Public method to remove entries from the model.
    rowCount Public method to get the number of rows of the model.
    setShowPasswords Public methods to show passwords.
    showPasswords Public method to indicate, if passwords shall be shown.

    Static Methods

    None

    PasswordModel (Constructor)

    PasswordModel(manager, parent = None)

    Constructor

    manager
    reference to the password manager (PasswordManager)
    parent
    reference to the parent object (QObject)

    PasswordModel.__passwordsChanged

    __passwordsChanged()

    Private slot handling a change of the registered passwords.

    PasswordModel.columnCount

    columnCount(parent = QModelIndex())

    Public method to get the number of columns of the model.

    parent
    parent index (QModelIndex)
    Returns:
    number of columns (integer)

    PasswordModel.data

    data(index, role)

    Public method to get data from the model.

    index
    index to get data for (QModelIndex)
    role
    role of the data to retrieve (integer)
    Returns:
    requested data (QVariant)

    PasswordModel.headerData

    headerData(section, orientation, role = Qt.DisplayRole)

    Public method to get the header data.

    section
    section number (integer)
    orientation
    header orientation (Qt.Orientation)
    role
    data role (integer)
    Returns:
    header data (QVariant)

    PasswordModel.removeRows

    removeRows(row, count, parent = QModelIndex())

    Public method to remove entries from the model.

    row
    start row (integer)
    count
    number of rows to remove (integer)
    parent
    parent index (QModelIndex)
    Returns:
    flag indicating success (boolean)

    PasswordModel.rowCount

    rowCount(parent = QModelIndex())

    Public method to get the number of rows of the model.

    parent
    parent index (QModelIndex)
    Returns:
    number of rows (integer)

    PasswordModel.setShowPasswords

    setShowPasswords(on)

    Public methods to show passwords.

    on
    flag indicating if passwords shall be shown (boolean)

    PasswordModel.showPasswords

    showPasswords()

    Public method to indicate, if passwords shall be shown.

    Returns:
    flag indicating if passwords shall be shown (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.E4Gui.E4TableView.html0000644000175000001440000000013212261331350025440 xustar000000000000000030 mtime=1388688104.455228032 30 atime=1389081084.975724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.E4Gui.E4TableView.html0000644000175000001440000000457612261331350025206 0ustar00detlevusers00000000000000 eric4.E4Gui.E4TableView

    eric4.E4Gui.E4TableView

    Module implementing specialized table views.

    Global Attributes

    None

    Classes

    E4TableView Class implementing a table view supporting removal of entries.

    Functions

    None


    E4TableView

    Class implementing a table view supporting removal of entries.

    Derived from

    QTableView

    Class Attributes

    None

    Class Methods

    None

    Methods

    keyPressEvent Protected method implementing special key handling.
    removeAll Public method to clear the view.
    removeSelected Public method to remove the selected entries.

    Static Methods

    None

    E4TableView.keyPressEvent

    keyPressEvent(evt)

    Protected method implementing special key handling.

    evt
    reference to the event (QKeyEvent)

    E4TableView.removeAll

    removeAll()

    Public method to clear the view.

    E4TableView.removeSelected

    removeSelected()

    Public method to remove the selected entries.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.UI.html0000644000175000001440000000013212261331354024077 xustar000000000000000030 mtime=1388688108.657230142 30 atime=1389081084.975724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.UI.html0000644000175000001440000000616112261331354023635 0ustar00detlevusers00000000000000 eric4.UI

    eric4.UI

    Package implementing the main user interface and general purpose dialogs.

    This package contains the main user interface and some general purpose dialogs as well as dialogs not fitting the other more specific categories.

    Modules

    AuthenticationDialog Module implementing the authentication dialog for the help browser.
    Browser Module implementing a browser with class browsing capabilities.
    BrowserModel Module implementing the browser model.
    BrowserSortFilterProxyModel Module implementing the browser sort filter proxy model.
    CompareDialog Module implementing a dialog to compare two files and show the result side by side.
    Config Module defining common data to be used by all windows..
    DeleteFilesConfirmationDialog Module implementing a dialog to confirm deletion of multiple files.
    DiffDialog Module implementing a dialog to compare two files.
    EmailDialog Module implementing a dialog to send bug reports.
    ErrorLogDialog Module implementing a dialog to display an error log.
    FindFileDialog Module implementing a dialog to search for text in files.
    FindFileNameDialog Module implementing a dialog to search for files.
    Info Module defining some informational strings.
    LogView Module implementing the log viewer widget and the log widget.
    PixmapCache Module implementing a pixmap cache for icons.
    SplashScreen Module implementing a splashscreen for eric4.
    UserInterface Module implementing the main user interface.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.E4XML.ShortcutsWriter.html0000644000175000001440000000013212261331352026476 xustar000000000000000030 mtime=1388688106.532229075 30 atime=1389081084.975724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.E4XML.ShortcutsWriter.html0000644000175000001440000000412112261331352026226 0ustar00detlevusers00000000000000 eric4.E4XML.ShortcutsWriter

    eric4.E4XML.ShortcutsWriter

    Module implementing the writer class for writing an XML shortcuts file.

    Global Attributes

    None

    Classes

    ShortcutsWriter Class implementing the writer class for writing an XML shortcuts file.

    Functions

    None


    ShortcutsWriter

    Class implementing the writer class for writing an XML shortcuts file.

    Derived from

    XMLWriterBase

    Class Attributes

    None

    Class Methods

    None

    Methods

    ShortcutsWriter Constructor
    writeXML Public method to write the XML to the file.

    Static Methods

    None

    ShortcutsWriter (Constructor)

    ShortcutsWriter(file)

    Constructor

    file
    open file (like) object for writing

    ShortcutsWriter.writeXML

    writeXML()

    Public method to write the XML to the file.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.KdeQt.KQPrinter.html0000644000175000001440000000013212261331351025340 xustar000000000000000030 mtime=1388688105.535228574 30 atime=1389081084.976724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.KdeQt.KQPrinter.html0000644000175000001440000000524112261331351025074 0ustar00detlevusers00000000000000 eric4.KdeQt.KQPrinter

    eric4.KdeQt.KQPrinter

    Compatibility module to use the KDE Printer instead of the Qt Printer.

    Global Attributes

    Color
    FirstPageFirst
    GrayScale
    HighResolution
    Landscape
    LastPageFirst
    Portrait
    PrinterResolution
    ScreenResolution

    Classes

    __kdeKQPrinter Compatibility class to use the Qt Printer.
    __qtKQPrinter Compatibility class to use the Qt Printer.

    Functions

    KQPrinter Public function to instantiate a printer object.


    __kdeKQPrinter

    Compatibility class to use the Qt Printer.

    Derived from

    QPrinter

    Class Attributes

    None

    Class Methods

    None

    Methods

    None

    Static Methods

    None


    __qtKQPrinter

    Compatibility class to use the Qt Printer.

    Derived from

    QPrinter

    Class Attributes

    None

    Class Methods

    None

    Methods

    None

    Static Methods

    None


    KQPrinter

    KQPrinter(mode = QPrinter.ScreenResolution)

    Public function to instantiate a printer object.

    mode
    printer mode (QPrinter.PrinterMode)
    Returns:
    reference to the printer object

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DebugClients.Python3.getpass.html0000644000175000001440000000013112261331354030034 xustar000000000000000029 mtime=1388688108.05622984 30 atime=1389081084.976724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.DebugClients.Python3.getpass.html0000644000175000001440000000437512261331354027600 0ustar00detlevusers00000000000000 eric4.DebugClients.Python3.getpass

    eric4.DebugClients.Python3.getpass

    Module implementing utilities to get a password and/or the current user name.

    getpass(prompt) - prompt for a password, with echo turned off getuser() - get the user name from the environment or password database

    This module is a replacement for the one found in the Python distribution. It is to provide a debugger compatible variant of the a.m. functions.

    Global Attributes

    __all__
    default_getpass
    unix_getpass
    win_getpass

    Classes

    None

    Functions

    getpass Function to prompt for a password, with echo turned off.
    getuser Function to get the username from the environment or password database.


    getpass

    getpass(prompt = 'Password: ')

    Function to prompt for a password, with echo turned off.

    prompt
    Prompt to be shown to the user (string)
    Returns:
    Password entered by the user (string)


    getuser

    getuser()

    Function to get the username from the environment or password database.

    First try various environment variables, then the password database. This works on Windows as long as USERNAME is set.

    Returns:
    username (string)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.Lexers.LexerFortran.html0000644000175000001440000000013212261331354030373 xustar000000000000000030 mtime=1388688108.511230068 30 atime=1389081084.976724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.Lexers.LexerFortran.html0000644000175000001440000000772212261331354030135 0ustar00detlevusers00000000000000 eric4.QScintilla.Lexers.LexerFortran

    eric4.QScintilla.Lexers.LexerFortran

    Module implementing a Fortran lexer with some additional methods.

    Global Attributes

    None

    Classes

    LexerFortran Subclass to implement some additional lexer dependant methods.

    Functions

    None


    LexerFortran

    Subclass to implement some additional lexer dependant methods.

    Derived from

    QsciLexerFortran, Lexer

    Class Attributes

    None

    Class Methods

    None

    Methods

    LexerFortran Constructor
    autoCompletionWordSeparators Public method to return the list of separators for autocompletion.
    defaultKeywords Public method to get the default keywords.
    initProperties Public slot to initialize the properties.
    isCommentStyle Public method to check, if a style is a comment style.
    isStringStyle Public method to check, if a style is a string style.

    Static Methods

    None

    LexerFortran (Constructor)

    LexerFortran(parent = None)

    Constructor

    parent
    parent widget of this lexer

    LexerFortran.autoCompletionWordSeparators

    autoCompletionWordSeparators()

    Public method to return the list of separators for autocompletion.

    Returns:
    list of separators (QStringList)

    LexerFortran.defaultKeywords

    defaultKeywords(kwSet)

    Public method to get the default keywords.

    kwSet
    number of the keyword set (integer)
    Returns:
    string giving the keywords (string) or None

    LexerFortran.initProperties

    initProperties()

    Public slot to initialize the properties.

    LexerFortran.isCommentStyle

    isCommentStyle(style)

    Public method to check, if a style is a comment style.

    Returns:
    flag indicating a comment style (boolean)

    LexerFortran.isStringStyle

    isStringStyle(style)

    Public method to check, if a style is a string style.

    Returns:
    flag indicating a string style (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.Bookmarks.BookmarkNode.html0000644000175000001440000000013212261331353031067 xustar000000000000000030 mtime=1388688107.880229751 30 atime=1389081084.976724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.Bookmarks.BookmarkNode.html0000644000175000001440000001017712261331353030627 0ustar00detlevusers00000000000000 eric4.Helpviewer.Bookmarks.BookmarkNode

    eric4.Helpviewer.Bookmarks.BookmarkNode

    Module implementing the bookmark node.

    Global Attributes

    None

    Classes

    BookmarkNode Class implementing the bookmark node type.

    Functions

    None


    BookmarkNode

    Class implementing the bookmark node type.

    Derived from

    object

    Class Attributes

    Bookmark
    Folder
    Root
    Separator

    Class Methods

    None

    Methods

    BookmarkNode Constructor
    add Public method to add/insert a child node.
    children Public method to get the list of child nodes.
    parent Public method to get a reference to the parent node.
    remove Public method to remove a child node.
    setType Public method to set the bookmark's type.
    type Public method to get the bookmark's type.

    Static Methods

    None

    BookmarkNode (Constructor)

    BookmarkNode(type_ = Root, parent = None)

    Constructor

    type_
    type of the bookmark node (BookmarkNode.Type)
    parent
    reference to the parent node (BookmarkNode)

    BookmarkNode.add

    add(child, offset = -1)

    Public method to add/insert a child node.

    child
    reference to the node to add (BookmarkNode)
    offset
    position where to insert child (integer, -1 = append)

    BookmarkNode.children

    children()

    Public method to get the list of child nodes.

    Returns:
    list of all child nodes (list of BookmarkNode)

    BookmarkNode.parent

    parent()

    Public method to get a reference to the parent node.

    Returns:
    reference to the parent node (BookmarkNode)

    BookmarkNode.remove

    remove(child)

    Public method to remove a child node.

    child
    reference to the child node (BookmarkNode)

    BookmarkNode.setType

    setType(type_)

    Public method to set the bookmark's type.

    type_
    type of the bookmark node (BookmarkNode.Type)

    BookmarkNode.type

    type()

    Public method to get the bookmark's type.

    Returns:
    bookmark type (BookmarkNode.Type)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Project.FiletypeAssociationDialog.html0000644000175000001440000000013212261331351031155 xustar000000000000000030 mtime=1388688105.798228706 30 atime=1389081084.976724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Project.FiletypeAssociationDialog.html0000644000175000001440000001441512261331351030714 0ustar00detlevusers00000000000000 eric4.Project.FiletypeAssociationDialog

    eric4.Project.FiletypeAssociationDialog

    Module implementing a dialog to enter filetype associations for the project.

    Global Attributes

    None

    Classes

    FiletypeAssociationDialog Class implementing a dialog to enter filetype associations for the project.

    Functions

    None


    FiletypeAssociationDialog

    Class implementing a dialog to enter filetype associations for the project.

    Derived from

    QDialog, Ui_FiletypeAssociationDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    FiletypeAssociationDialog Constructor
    __createItem Private slot to create a new entry in the association list.
    __reformat Private method to reformat the tree.
    __resort Private method to resort the tree.
    on_addAssociationButton_clicked Private slot to add the association displayed to the list.
    on_deleteAssociationButton_clicked Private slot to delete the currently selected association of the listbox.
    on_filePatternEdit_textChanged Private slot to handle the textChanged signal of the pattern lineedit.
    on_filetypeAssociationList_currentItemChanged Private slot to handle the currentItemChanged signal of the association list.
    transferData Public slot to transfer the associations into the projects data structure.

    Static Methods

    None

    FiletypeAssociationDialog (Constructor)

    FiletypeAssociationDialog(project, parent = None)

    Constructor

    project
    reference to the project object
    parent
    reference to the parent widget (QWidget)

    FiletypeAssociationDialog.__createItem

    __createItem(pattern, filetype)

    Private slot to create a new entry in the association list.

    pattern
    pattern of the entry (string or QString)
    filetype
    file type of the entry (string or QString)
    Returns:
    reference to the newly generated entry (QTreeWidgetItem)

    FiletypeAssociationDialog.__reformat

    __reformat()

    Private method to reformat the tree.

    FiletypeAssociationDialog.__resort

    __resort()

    Private method to resort the tree.

    FiletypeAssociationDialog.on_addAssociationButton_clicked

    on_addAssociationButton_clicked()

    Private slot to add the association displayed to the list.

    FiletypeAssociationDialog.on_deleteAssociationButton_clicked

    on_deleteAssociationButton_clicked()

    Private slot to delete the currently selected association of the listbox.

    FiletypeAssociationDialog.on_filePatternEdit_textChanged

    on_filePatternEdit_textChanged(txt)

    Private slot to handle the textChanged signal of the pattern lineedit.

    txt
    text of the lineedit (QString)

    FiletypeAssociationDialog.on_filetypeAssociationList_currentItemChanged

    on_filetypeAssociationList_currentItemChanged(itm, prevItm)

    Private slot to handle the currentItemChanged signal of the association list.

    itm
    reference to the new current item (QTreeWidgetItem)
    prevItm
    reference to the previous current item (QTreeWidgetItem)

    FiletypeAssociationDialog.transferData

    transferData()

    Public slot to transfer the associations into the projects data structure.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ConfigurationPages.EditorAu0000644000175000001440000000031512261331353031256 xustar0000000000000000115 path=eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.EditorAutocompletionPage.html 30 mtime=1388688107.580229601 30 atime=1389081084.984724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.EditorAutocompletionPage0000644000175000001440000000512212261331353034237 0ustar00detlevusers00000000000000 eric4.Preferences.ConfigurationPages.EditorAutocompletionPage

    eric4.Preferences.ConfigurationPages.EditorAutocompletionPage

    Module implementing the Editor Autocompletion configuration page.

    Global Attributes

    None

    Classes

    EditorAutocompletionPage Class implementing the Editor Autocompletion configuration page.

    Functions

    create Module function to create the configuration page.


    EditorAutocompletionPage

    Class implementing the Editor Autocompletion configuration page.

    Derived from

    ConfigurationPageBase, Ui_EditorAutocompletionPage

    Class Attributes

    None

    Class Methods

    None

    Methods

    EditorAutocompletionPage Constructor
    save Public slot to save the Editor Autocompletion configuration.

    Static Methods

    None

    EditorAutocompletionPage (Constructor)

    EditorAutocompletionPage()

    Constructor

    EditorAutocompletionPage.save

    save()

    Public slot to save the Editor Autocompletion configuration.



    create

    create(dlg)

    Module function to create the configuration page.

    dlg
    reference to the configuration dialog

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Project.ProjectInterfacesBrowser.html0000644000175000001440000000013212261331351031035 xustar000000000000000030 mtime=1388688105.820228717 30 atime=1389081084.984724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Project.ProjectInterfacesBrowser.html0000644000175000001440000002622312261331351030574 0ustar00detlevusers00000000000000 eric4.Project.ProjectInterfacesBrowser

    eric4.Project.ProjectInterfacesBrowser

    Module implementing the a class used to display the interfaces (IDL) part of the project.

    Global Attributes

    None

    Classes

    ProjectInterfacesBrowser A class used to display the interfaces (IDL) part of the project.

    Functions

    None


    ProjectInterfacesBrowser

    A class used to display the interfaces (IDL) part of the project.

    Signals

    appendStderr(string)
    emitted after something was received from a QProcess on stderr
    appendStdout(string)
    emitted after something was received from a QProcess on stdout
    closeSourceWindow(string)
    emitted after a file has been removed/deleted from the project
    showMenu(string, QMenu)
    emitted when a menu is about to be shown. The name of the menu and a reference to the menu are given.

    Derived from

    ProjectBaseBrowser

    Class Attributes

    None

    Class Methods

    None

    Methods

    ProjectInterfacesBrowser Constructor
    __addInterfaceFiles Private method to add interface files to the project.
    __addInterfacesDirectory Private method to add interface files of a directory to the project.
    __compileAllInterfaces Private method to compile all interfaces to python.
    __compileIDL Privat method to compile a .idl file to python.
    __compileIDLDone Private slot to handle the finished signal of the omniidl process.
    __compileInterface Private method to compile an interface to python.
    __compileSelectedInterfaces Private method to compile selected interfaces to python.
    __configureCorba Private method to open the configuration dialog.
    __deleteFile Private method to delete files from the project.
    __readStderr Private slot to handle the readyReadStandardError signal of the omniidl process.
    __readStdout Private slot to handle the readyReadStandardOutput signal of the omniidl process.
    __showContextMenu Private slot called by the menu aboutToShow signal.
    __showContextMenuBack Private slot called by the backMenu aboutToShow signal.
    __showContextMenuDir Private slot called by the dirMenu aboutToShow signal.
    __showContextMenuDirMulti Private slot called by the dirMultiMenu aboutToShow signal.
    __showContextMenuMulti Private slot called by the multiMenu aboutToShow signal.
    _contextMenuRequested Protected slot to show the context menu.
    _createPopupMenus Protected overloaded method to generate the popup menu.
    _openItem Protected slot to handle the open popup menu entry.

    Static Methods

    None

    ProjectInterfacesBrowser (Constructor)

    ProjectInterfacesBrowser(project, parent = None)

    Constructor

    project
    reference to the project object
    parent
    parent widget of this browser (QWidget)

    ProjectInterfacesBrowser.__addInterfaceFiles

    __addInterfaceFiles()

    Private method to add interface files to the project.

    ProjectInterfacesBrowser.__addInterfacesDirectory

    __addInterfacesDirectory()

    Private method to add interface files of a directory to the project.

    ProjectInterfacesBrowser.__compileAllInterfaces

    __compileAllInterfaces()

    Private method to compile all interfaces to python.

    ProjectInterfacesBrowser.__compileIDL

    __compileIDL(fn, noDialog = False, progress = None)

    Privat method to compile a .idl file to python.

    fn
    filename of the .idl file to be compiled
    noDialog
    flag indicating silent operations
    progress
    reference to the progress dialog
    Returns:
    reference to the compile process (QProcess)

    ProjectInterfacesBrowser.__compileIDLDone

    __compileIDLDone(exitCode, exitStatus)

    Private slot to handle the finished signal of the omniidl process.

    exitCode
    exit code of the process (integer)
    exitStatus
    exit status of the process (QProcess.ExitStatus)

    ProjectInterfacesBrowser.__compileInterface

    __compileInterface()

    Private method to compile an interface to python.

    ProjectInterfacesBrowser.__compileSelectedInterfaces

    __compileSelectedInterfaces()

    Private method to compile selected interfaces to python.

    ProjectInterfacesBrowser.__configureCorba

    __configureCorba()

    Private method to open the configuration dialog.

    ProjectInterfacesBrowser.__deleteFile

    __deleteFile()

    Private method to delete files from the project.

    ProjectInterfacesBrowser.__readStderr

    __readStderr()

    Private slot to handle the readyReadStandardError signal of the omniidl process.

    ProjectInterfacesBrowser.__readStdout

    __readStdout()

    Private slot to handle the readyReadStandardOutput signal of the omniidl process.

    ProjectInterfacesBrowser.__showContextMenu

    __showContextMenu()

    Private slot called by the menu aboutToShow signal.

    ProjectInterfacesBrowser.__showContextMenuBack

    __showContextMenuBack()

    Private slot called by the backMenu aboutToShow signal.

    ProjectInterfacesBrowser.__showContextMenuDir

    __showContextMenuDir()

    Private slot called by the dirMenu aboutToShow signal.

    ProjectInterfacesBrowser.__showContextMenuDirMulti

    __showContextMenuDirMulti()

    Private slot called by the dirMultiMenu aboutToShow signal.

    ProjectInterfacesBrowser.__showContextMenuMulti

    __showContextMenuMulti()

    Private slot called by the multiMenu aboutToShow signal.

    ProjectInterfacesBrowser._contextMenuRequested

    _contextMenuRequested(coord)

    Protected slot to show the context menu.

    coord
    the position of the mouse pointer (QPoint)

    ProjectInterfacesBrowser._createPopupMenus

    _createPopupMenus()

    Protected overloaded method to generate the popup menu.

    ProjectInterfacesBrowser._openItem

    _openItem()

    Protected slot to handle the open popup menu entry.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.Network.AboutAccessHandler.h0000644000175000001440000000013212261331353031172 xustar000000000000000030 mtime=1388688107.929229776 30 atime=1389081084.984724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.Network.AboutAccessHandler.html0000644000175000001440000000433212261331353031443 0ustar00detlevusers00000000000000 eric4.Helpviewer.Network.AboutAccessHandler

    eric4.Helpviewer.Network.AboutAccessHandler

    Module implementing a scheme access handler for about schemes.

    Global Attributes

    None

    Classes

    AboutAccessHandler Class implementing a scheme access handler for about schemes.

    Functions

    None


    AboutAccessHandler

    Class implementing a scheme access handler for about schemes.

    Derived from

    SchemeAccessHandler

    Class Attributes

    None

    Class Methods

    None

    Methods

    createRequest Protected method to create a request.

    Static Methods

    None

    AboutAccessHandler.createRequest

    createRequest(op, request, outgoingData = None)

    Protected method to create a request.

    op
    the operation to be performed (QNetworkAccessManager.Operation)
    request
    reference to the request object (QNetworkRequest)
    outgoingData
    reference to an IODevice containing data to be sent (QIODevice)
    Returns:
    reference to the created reply object (QNetworkReply)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DebugClients.Python3.PyProfile.html0000644000175000001440000000013212261331354030300 xustar000000000000000030 mtime=1388688108.069229846 30 atime=1389081084.984724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.DebugClients.Python3.PyProfile.html0000644000175000001440000001171312261331354030035 0ustar00detlevusers00000000000000 eric4.DebugClients.Python3.PyProfile

    eric4.DebugClients.Python3.PyProfile

    Module defining additions to the standard Python profile.py.

    Global Attributes

    None

    Classes

    PyProfile Class extending the standard Python profiler with additional methods.

    Functions

    None


    PyProfile

    Class extending the standard Python profiler with additional methods.

    This class extends the standard Python profiler by the functionality to save the collected timing data in a timing cache, to restore these data on subsequent calls, to store a profile dump to a standard filename and to erase these caches.

    Derived from

    profile.Profile

    Class Attributes

    dispatch

    Class Methods

    None

    Methods

    PyProfile Constructor
    __restore Private method to restore the timing data from the timing cache.
    dump_stats Public method to dump the statistics data.
    erase Public method to erase the collected timing data.
    fix_frame_filename Public method used to fixup the filename for a given frame.
    save Public method to store the collected profile data.
    trace_dispatch_call Private method used to trace functions calls.

    Static Methods

    None

    PyProfile (Constructor)

    PyProfile(basename, timer = None, bias = None)

    Constructor

    basename
    name of the script to be profiled (string)
    timer
    function defining the timing calculation
    bias
    calibration value (float)

    PyProfile.__restore

    __restore()

    Private method to restore the timing data from the timing cache.

    PyProfile.dump_stats

    dump_stats(file)

    Public method to dump the statistics data.

    file
    name of the file to write to (string)

    PyProfile.erase

    erase()

    Public method to erase the collected timing data.

    PyProfile.fix_frame_filename

    fix_frame_filename(frame)

    Public method used to fixup the filename for a given frame.

    The logic employed here is that if a module was loaded from a .pyc file, then the correct .py to operate with should be in the same path as the .pyc. The reason this logic is needed is that when a .pyc file is generated, the filename embedded and thus what is readable in the code object of the frame object is the fully qualified filepath when the pyc is generated. If files are moved from machine to machine this can break debugging as the .pyc will refer to the .py on the original machine. Another case might be sharing code over a network... This logic deals with that.

    frame
    the frame object

    PyProfile.save

    save()

    Public method to store the collected profile data.

    PyProfile.trace_dispatch_call

    trace_dispatch_call(frame, t)

    Private method used to trace functions calls.

    This is a variant of the one found in the standard Python profile.py calling fix_frame_filename above.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.UI.CompareDialog.html0000644000175000001440000000013212261331351025474 xustar000000000000000030 mtime=1388688105.113228362 30 atime=1389081084.984724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.UI.CompareDialog.html0000644000175000001440000002726712261331351025244 0ustar00detlevusers00000000000000 eric4.UI.CompareDialog

    eric4.UI.CompareDialog

    Module implementing a dialog to compare two files and show the result side by side.

    Global Attributes

    None

    Classes

    CompareDialog Class implementing a dialog to compare two files and show the result side by side.
    CompareWindow Main window class for the standalone dialog.

    Functions

    removeMarkers Internal function to remove all diff markers.
    sbsdiff Compare two sequences of lines; generate the delta for display side by side.


    CompareDialog

    Class implementing a dialog to compare two files and show the result side by side.

    Derived from

    QWidget, Ui_CompareDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    CompareDialog Constructor
    __appendText Private method to append text to the end of the contents pane.
    __fileChanged Private slot to enable/disable the Compare button.
    __moveTextToCurrentDiffPos Private slot to move the text display to the current diff position.
    __scrollBarMoved Private slot to enable the buttons and set the current diff position depending on scrollbar position.
    __selectFile Private slot to display a file selection dialog.
    on_buttonBox_clicked Private slot called by a button of the button box clicked.
    on_diffButton_clicked Private slot to handle the Compare button press.
    on_downButton_clicked Private slot to go to the next difference.
    on_file1Button_clicked Private slot to handle the file 1 file selection button press.
    on_file2Button_clicked Private slot to handle the file 2 file selection button press.
    on_firstButton_clicked Private slot to go to the first difference.
    on_lastButton_clicked Private slot to go to the last difference.
    on_synchronizeCheckBox_toggled Private slot to connect or disconnect the scrollbars of the displays.
    on_upButton_clicked Private slot to go to the previous difference.
    show Public slot to show the dialog.

    Static Methods

    None

    CompareDialog (Constructor)

    CompareDialog(files = [], parent = None)

    Constructor

    files
    list of files to compare and their label (list of two tuples of two strings)
    parent
    parent widget (QWidget)

    CompareDialog.__appendText

    __appendText(pane, linenumber, line, format, interLine = False)

    Private method to append text to the end of the contents pane.

    pane
    text edit widget to append text to (QTextedit)
    linenumber
    number of line to insert (string)
    line
    text to insert (string)
    format
    text format to be used (QTextCharFormat)
    interLine
    flag indicating interline changes (boolean)

    CompareDialog.__fileChanged

    __fileChanged()

    Private slot to enable/disable the Compare button.

    CompareDialog.__moveTextToCurrentDiffPos

    __moveTextToCurrentDiffPos()

    Private slot to move the text display to the current diff position.

    CompareDialog.__scrollBarMoved

    __scrollBarMoved(value)

    Private slot to enable the buttons and set the current diff position depending on scrollbar position.

    value
    scrollbar position (integer)

    CompareDialog.__selectFile

    __selectFile(lineEdit)

    Private slot to display a file selection dialog.

    lineEdit
    field for the display of the selected filename (QLineEdit)

    CompareDialog.on_buttonBox_clicked

    on_buttonBox_clicked(button)

    Private slot called by a button of the button box clicked.

    button
    button that was clicked (QAbstractButton)

    CompareDialog.on_diffButton_clicked

    on_diffButton_clicked()

    Private slot to handle the Compare button press.

    CompareDialog.on_downButton_clicked

    on_downButton_clicked()

    Private slot to go to the next difference.

    CompareDialog.on_file1Button_clicked

    on_file1Button_clicked()

    Private slot to handle the file 1 file selection button press.

    CompareDialog.on_file2Button_clicked

    on_file2Button_clicked()

    Private slot to handle the file 2 file selection button press.

    CompareDialog.on_firstButton_clicked

    on_firstButton_clicked()

    Private slot to go to the first difference.

    CompareDialog.on_lastButton_clicked

    on_lastButton_clicked()

    Private slot to go to the last difference.

    CompareDialog.on_synchronizeCheckBox_toggled

    on_synchronizeCheckBox_toggled(sync)

    Private slot to connect or disconnect the scrollbars of the displays.

    sync
    flag indicating synchronisation status (boolean)

    CompareDialog.on_upButton_clicked

    on_upButton_clicked()

    Private slot to go to the previous difference.

    CompareDialog.show

    show(filename = None)

    Public slot to show the dialog.

    filename
    name of a file to use as the first file (string or QString)


    CompareWindow

    Main window class for the standalone dialog.

    Derived from

    KQMainWindow

    Class Attributes

    None

    Class Methods

    None

    Methods

    CompareWindow Constructor
    eventFilter Public method to filter events.

    Static Methods

    None

    CompareWindow (Constructor)

    CompareWindow(files = [], parent = None)

    Constructor

    files
    list of files to compare and their label (list of two tuples of two strings)
    parent
    reference to the parent widget (QWidget)

    CompareWindow.eventFilter

    eventFilter(obj, event)

    Public method to filter events.

    obj
    reference to the object the event is meant for (QObject)
    event
    reference to the event object (QEvent)
    Returns:
    flag indicating, whether the event was handled (boolean)


    removeMarkers

    removeMarkers(line)

    Internal function to remove all diff markers.

    line
    line to work on (string)
    Returns:
    line without diff markers (string)


    sbsdiff

    sbsdiff(a, b, linenumberwidth = 4)

    Compare two sequences of lines; generate the delta for display side by side.

    a
    first sequence of lines (list of strings)
    b
    second sequence of lines (list of strings)
    linenumberwidth
    width (in characters) of the linenumbers (integer)
    Returns:
    a generator yielding tuples of differences. The tuple is composed of strings as follows.
    • opcode -- one of e, d, i, r for equal, delete, insert, replace
    • lineno a -- linenumber of sequence a
    • line a -- line of sequence a
    • lineno b -- linenumber of sequence b
    • line b -- line of sequence b

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.QtHelpDocumentationDialog.ht0000644000175000001440000000013112261331351031300 xustar000000000000000029 mtime=1388688105.32822847 30 atime=1389081084.984724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.QtHelpDocumentationDialog.html0000644000175000001440000001055412261331351031371 0ustar00detlevusers00000000000000 eric4.Helpviewer.QtHelpDocumentationDialog

    eric4.Helpviewer.QtHelpDocumentationDialog

    Module implementing a dialog to manage the QtHelp documentation database.

    Global Attributes

    None

    Classes

    QtHelpDocumentationDialog Class implementing a dialog to manage the QtHelp documentation database.

    Functions

    None


    QtHelpDocumentationDialog

    Class implementing a dialog to manage the QtHelp documentation database.

    Derived from

    QDialog, Ui_QtHelpDocumentationDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    QtHelpDocumentationDialog Constructor
    getTabsToClose Public method to get the list of tabs to close.
    hasChanges Public slot to test the dialog for changes.
    on_addButton_clicked Private slot to add documents to the help database.
    on_documentsList_itemSelectionChanged Private slot handling a change of the documents selection.
    on_removeButton_clicked Private slot to remove a document from the help database.

    Static Methods

    None

    QtHelpDocumentationDialog (Constructor)

    QtHelpDocumentationDialog(engine, parent)

    Constructor

    engine
    reference to the help engine (QHelpEngine)
    parent
    reference to the parent widget (QWidget)

    QtHelpDocumentationDialog.getTabsToClose

    getTabsToClose()

    Public method to get the list of tabs to close.

    Returns:
    list of tab ids to be closed (list of integers)

    QtHelpDocumentationDialog.hasChanges

    hasChanges()

    Public slot to test the dialog for changes.

    Returns:
    flag indicating presence of changes

    QtHelpDocumentationDialog.on_addButton_clicked

    on_addButton_clicked()

    Private slot to add documents to the help database.

    QtHelpDocumentationDialog.on_documentsList_itemSelectionChanged

    on_documentsList_itemSelectionChanged()

    Private slot handling a change of the documents selection.

    QtHelpDocumentationDialog.on_removeButton_clicked

    on_removeButton_clicked()

    Private slot to remove a document from the help database.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ConfigurationPages.HelpAppe0000644000175000001440000000013212261331353031235 xustar000000000000000030 mtime=1388688107.441229531 30 atime=1389081084.984724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.HelpAppearancePage.html0000644000175000001440000001141112261331353033677 0ustar00detlevusers00000000000000 eric4.Preferences.ConfigurationPages.HelpAppearancePage

    eric4.Preferences.ConfigurationPages.HelpAppearancePage

    Module implementing the Help Viewers configuration page.

    Global Attributes

    None

    Classes

    HelpAppearancePage Class implementing the Help Viewer Appearance page.

    Functions

    create Module function to create the configuration page.


    HelpAppearancePage

    Class implementing the Help Viewer Appearance page.

    Derived from

    ConfigurationPageBase, Ui_HelpAppearancePage

    Class Attributes

    None

    Class Methods

    None

    Methods

    HelpAppearancePage Constructor
    on_fixedFontButton_clicked Private method used to select the fixed-width font.
    on_secureURLsColourButton_clicked Private slot to set the colour for secure URLs.
    on_standardFontButton_clicked Private method used to select the standard font.
    on_styleSheetButton_clicked Private slot to handle the user style sheet selection.
    save Public slot to save the Help Viewers configuration.
    setMode Public method to perform mode dependent setups.

    Static Methods

    None

    HelpAppearancePage (Constructor)

    HelpAppearancePage()

    Constructor

    HelpAppearancePage.on_fixedFontButton_clicked

    on_fixedFontButton_clicked()

    Private method used to select the fixed-width font.

    HelpAppearancePage.on_secureURLsColourButton_clicked

    on_secureURLsColourButton_clicked()

    Private slot to set the colour for secure URLs.

    HelpAppearancePage.on_standardFontButton_clicked

    on_standardFontButton_clicked()

    Private method used to select the standard font.

    HelpAppearancePage.on_styleSheetButton_clicked

    on_styleSheetButton_clicked()

    Private slot to handle the user style sheet selection.

    HelpAppearancePage.save

    save()

    Public slot to save the Help Viewers configuration.

    HelpAppearancePage.setMode

    setMode(displayMode)

    Public method to perform mode dependent setups.

    displayMode
    mode of the configuration dialog (ConfigurationWidget.DefaultMode, ConfigurationWidget.HelpBrowserMode, ConfigurationWidget.TrayStarterMode)


    create

    create(dlg)

    Module function to create the configuration page.

    dlg
    reference to the configuration dialog

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.E4XML.HighlightingStylesWriter.html0000644000175000001440000000013212261331352030311 xustar000000000000000030 mtime=1388688106.612229115 30 atime=1389081084.984724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.E4XML.HighlightingStylesWriter.html0000644000175000001440000000454312261331352030051 0ustar00detlevusers00000000000000 eric4.E4XML.HighlightingStylesWriter

    eric4.E4XML.HighlightingStylesWriter

    Module implementing the writer class for writing a highlighting styles XML file.

    Global Attributes

    None

    Classes

    HighlightingStylesWriter Class implementing the writer class for writing a highlighting styles XML file.

    Functions

    None


    HighlightingStylesWriter

    Class implementing the writer class for writing a highlighting styles XML file.

    Derived from

    XMLWriterBase

    Class Attributes

    None

    Class Methods

    None

    Methods

    HighlightingStylesWriter Constructor
    writeXML Public method to write the XML to the file.

    Static Methods

    None

    HighlightingStylesWriter (Constructor)

    HighlightingStylesWriter(file, lexers)

    Constructor

    file
    open file (like) object for writing
    lexers
    list of lexer objects for which to export the styles

    HighlightingStylesWriter.writeXML

    writeXML()

    Public method to write the XML to the file.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.QsciScintillaCompat.html0000644000175000001440000000013012261331352030421 xustar000000000000000028 mtime=1388688106.1842289 30 atime=1389081084.984724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.QsciScintillaCompat.html0000644000175000001440000012565412261331352030172 0ustar00detlevusers00000000000000 eric4.QScintilla.QsciScintillaCompat

    eric4.QScintilla.QsciScintillaCompat

    Module implementing a compatability interface class to QsciScintilla.

    Global Attributes

    None

    Classes

    QsciScintillaCompat Class implementing a compatability interface to QsciScintilla.

    Functions

    QSCINTILLA_VERSION Module function to return the QScintilla version.


    QsciScintillaCompat

    Class implementing a compatability interface to QsciScintilla.

    This class implements all the functions, that were added to QsciScintilla incrementally. This class ensures compatibility to older versions of QsciScintilla.

    Derived from

    QsciScintilla

    Class Attributes

    UserSeparator

    Class Methods

    None

    Methods

    QsciScintillaCompat Constructor
    __doSearchTarget Private method to perform the search in target.
    charAt Public method to get the character at a position in the text observing multibyte characters.
    clearAllIndicators Public method to clear all occurrences of an indicator.
    clearAlternateKeys Protected method to clear the alternate key commands.
    clearIndicator Public method to clear an indicator for the given range.
    clearIndicatorRange Public method to clear an indicator for the given range.
    clearKeys Protected method to clear the key commands.
    clearStyles Public method to set the styles according the selected Qt style.
    currentPosition Public method to get the current position.
    currentStyle Public method to get the style at the current position.
    delete Public method to delete the character to the right of the cursor.
    deleteBack Public method to delete the character to the left of the cursor.
    deleteLineLeft Public method to delete the line to the left of the cursor.
    deleteLineRight Public method to delete the line to the right of the cursor.
    deleteWordLeft Public method to delete the word to the left of the cursor.
    deleteWordRight Public method to delete the word to the right of the cursor.
    detectEolString Public method to determine the eol string used.
    editorCommand Public method to perform a simple editor command.
    event Public method to handle events.
    extendSelectionLeft Public method to extend the selection one character to the left.
    extendSelectionRight Public method to extend the selection one character to the right.
    extendSelectionToBOL Public method to extend the selection to the beginning of the line.
    extendSelectionToEOL Public method to extend the selection to the end of the line.
    extendSelectionWordLeft Public method to extend the selection one word to the left.
    extendSelectionWordRight Public method to extend the selection one word to the right.
    findFirstTarget Public method to search in a specified range of text without setting the selection.
    findNextTarget Public method to find the next occurrence in the target range.
    focusOutEvent Public method called when the editor loses focus.
    foldExpandedAt Public method to determine, if a fold is expanded.
    foldFlagsAt Public method to get the fold flags of a line of the document.
    foldHeaderAt Public method to determine, if a line of the document is a fold header line.
    foldLevelAt Public method to get the fold level of a line of the document.
    getCursorFlashTime Public method to get the flash (blink) time of the cursor in milliseconds.
    getEndStyled Public method to get the last styled position.
    getEolIndicator Public method to get the eol indicator for the current eol mode.
    getFileName Public method to return the name of the file being displayed.
    getFoundTarget Public method to get the recently found target.
    getLineSeparator Public method to get the line separator for the current eol mode.
    getZoom Public method used to retrieve the current zoom factor.
    hasIndicator Public method to test for the existence of an indicator.
    hasSelectedText Public method to indicate the presence of selected text.
    hasSelection Public method to check for a selection.
    indentationGuideView Public method to get the indentation guide view.
    indicatorDefine Public method to define the appearance of an indicator.
    lineAt Public method to calculate the line at a position.
    lineEndPosition Public method to determine the line end position of the given line.
    lineIndexFromPosition Public method to convert an absolute position to line and index.
    linesOnScreen Public method to get the amount of visible lines.
    monospacedStyles Public method to set the current style to be monospaced.
    moveCursorLeft Public method to move the cursor left.
    moveCursorRight Public method to move the cursor right.
    moveCursorToEOL Public method to move the cursor to the end of line.
    moveCursorWordLeft Public method to move the cursor left one word.
    moveCursorWordRight Public method to move the cursor right one word.
    newLineBelow Public method to insert a new line below the current one.
    positionAfter Public method to get the position after the given position taking into account multibyte characters.
    positionBefore Public method to get the position before the given position taking into account multibyte characters.
    positionFromLineIndex Public method to convert line and index to an absolute position.
    positionFromPoint Public method to calculate the scintilla position from a point in the window.
    rawCharAt Public method to get the raw character at a position in the text.
    replaceTarget Public method to replace the string found by the last search in target.
    scrollVertical Public method to scroll the text area.
    selectionIsRectangle Public method to check, if the current selection is rectangular.
    setCurrentIndicator Public method to set the current indicator.
    setCursorFlashTime Public method to get the flash (blink) time of the cursor in milliseconds.
    setEolModeByEolString Public method to set the eol mode given the eol string.
    setIndentationGuideView Public method to set the view of the indentation guides.
    setIndicator Public method to set an indicator for the given range.
    setIndicatorRange Public method to set an indicator for the given range.
    setLexer Public method to set the lexer.
    setStyleBits Public method to set the number of bits to be used for styling.
    setStyling Public method to style some text.
    showUserList Public method to show a user supplied list.
    startStyling Public method to prepare styling.
    styleAt Public method to get the style at a position in the text.
    zoomIn Public method used to increase the zoom factor.
    zoomOut Public method used to decrease the zoom factor.
    zoomTo Public method used to zoom to a specific zoom factor.

    Static Methods

    None

    QsciScintillaCompat (Constructor)

    QsciScintillaCompat(parent = None)

    Constructor

    parent
    parent widget (QWidget)
    name
    name of this instance (string or QString)
    flags
    window flags

    QsciScintillaCompat.__doSearchTarget

    __doSearchTarget()

    Private method to perform the search in target.

    Returns:
    flag indicating a successful search (boolean)

    QsciScintillaCompat.charAt

    charAt(pos)

    Public method to get the character at a position in the text observing multibyte characters.

    pos
    position in the text (integer)
    Returns:
    raw character at the requested position or empty string, if the position is negative or past the end of the document (string)

    QsciScintillaCompat.clearAllIndicators

    clearAllIndicators(indicator)

    Public method to clear all occurrences of an indicator.

    indicator
    number of the indicator (integer, QsciScintilla.INDIC_CONTAINER .. QsciScintilla.INDIC_MAX)

    QsciScintillaCompat.clearAlternateKeys

    clearAlternateKeys()

    Protected method to clear the alternate key commands.

    QsciScintillaCompat.clearIndicator

    clearIndicator(indicator, sline, sindex, eline, eindex)

    Public method to clear an indicator for the given range.

    indicator
    number of the indicator (integer, QsciScintilla.INDIC_CONTAINER .. QsciScintilla.INDIC_MAX)
    sline
    line number of the indicator start (integer)
    sindex
    index of the indicator start (integer)
    eline
    line number of the indicator end (integer)
    eindex
    index of the indicator end (integer)

    QsciScintillaCompat.clearIndicatorRange

    clearIndicatorRange(indicator, spos, length)

    Public method to clear an indicator for the given range.

    indicator
    number of the indicator (integer, QsciScintilla.INDIC_CONTAINER .. QsciScintilla.INDIC_MAX)
    spos
    position of the indicator start (integer)
    length
    length of the indicator (integer)

    QsciScintillaCompat.clearKeys

    clearKeys()

    Protected method to clear the key commands.

    QsciScintillaCompat.clearStyles

    clearStyles()

    Public method to set the styles according the selected Qt style.

    QsciScintillaCompat.currentPosition

    currentPosition()

    Public method to get the current position.

    Returns:
    absolute position of the cursor (integer)

    QsciScintillaCompat.currentStyle

    currentStyle()

    Public method to get the style at the current position.

    Returns:
    style at the current position (integer)

    QsciScintillaCompat.delete

    delete()

    Public method to delete the character to the right of the cursor.

    QsciScintillaCompat.deleteBack

    deleteBack()

    Public method to delete the character to the left of the cursor.

    QsciScintillaCompat.deleteLineLeft

    deleteLineLeft()

    Public method to delete the line to the left of the cursor.

    QsciScintillaCompat.deleteLineRight

    deleteLineRight()

    Public method to delete the line to the right of the cursor.

    QsciScintillaCompat.deleteWordLeft

    deleteWordLeft()

    Public method to delete the word to the left of the cursor.

    QsciScintillaCompat.deleteWordRight

    deleteWordRight()

    Public method to delete the word to the right of the cursor.

    QsciScintillaCompat.detectEolString

    detectEolString(txt)

    Public method to determine the eol string used.

    txt
    text from which to determine the eol string (string)
    Returns:
    eol string (string)

    QsciScintillaCompat.editorCommand

    editorCommand(cmd)

    Public method to perform a simple editor command.

    cmd
    the scintilla command to be performed

    QsciScintillaCompat.event

    event(evt)

    Public method to handle events.

    Note: We are not interested in the standard QsciScintilla event handling because we do it our self.

    evt
    event object to handle (QEvent)

    QsciScintillaCompat.extendSelectionLeft

    extendSelectionLeft()

    Public method to extend the selection one character to the left.

    QsciScintillaCompat.extendSelectionRight

    extendSelectionRight()

    Public method to extend the selection one character to the right.

    QsciScintillaCompat.extendSelectionToBOL

    extendSelectionToBOL()

    Public method to extend the selection to the beginning of the line.

    QsciScintillaCompat.extendSelectionToEOL

    extendSelectionToEOL()

    Public method to extend the selection to the end of the line.

    QsciScintillaCompat.extendSelectionWordLeft

    extendSelectionWordLeft()

    Public method to extend the selection one word to the left.

    QsciScintillaCompat.extendSelectionWordRight

    extendSelectionWordRight()

    Public method to extend the selection one word to the right.

    QsciScintillaCompat.findFirstTarget

    findFirstTarget(expr_, re_, cs_, wo_, begline = -1, begindex = -1, endline = -1, endindex = -1, ws_ = False)

    Public method to search in a specified range of text without setting the selection.

    expr_
    search expression (string or QString)
    re_
    flag indicating a regular expression (boolean)
    cs_
    flag indicating a case sensitive search (boolean)
    wo_
    flag indicating a word only search (boolean)
    begline=
    line number to start from (-1 to indicate current position) (integer)
    begindex=
    index to start from (-1 to indicate current position) (integer)
    endline=
    line number to stop at (-1 to indicate end of document) (integer)
    endindex=
    index number to stop at (-1 to indicate end of document) (integer)
    ws_=
    flag indicating a word start search (boolean)
    Returns:
    flag indicating a successful search (boolean)

    QsciScintillaCompat.findNextTarget

    findNextTarget()

    Public method to find the next occurrence in the target range.

    Returns:
    flag indicating a successful search (boolean)

    QsciScintillaCompat.focusOutEvent

    focusOutEvent(event)

    Public method called when the editor loses focus.

    event
    event object (QFocusEvent)

    QsciScintillaCompat.foldExpandedAt

    foldExpandedAt(line)

    Public method to determine, if a fold is expanded.

    line
    line number (integer)
    Returns:
    flag indicating the fold expansion state of the line (boolean)

    QsciScintillaCompat.foldFlagsAt

    foldFlagsAt(line)

    Public method to get the fold flags of a line of the document.

    line
    line number (integer)
    Returns:
    fold flags of the given line (integer)

    QsciScintillaCompat.foldHeaderAt

    foldHeaderAt(line)

    Public method to determine, if a line of the document is a fold header line.

    line
    line number (integer)
    Returns:
    flag indicating a fold header line (boolean)

    QsciScintillaCompat.foldLevelAt

    foldLevelAt(line)

    Public method to get the fold level of a line of the document.

    line
    line number (integer)
    Returns:
    fold level of the given line (integer)

    QsciScintillaCompat.getCursorFlashTime

    getCursorFlashTime()

    Public method to get the flash (blink) time of the cursor in milliseconds.

    The flash time is the time required to display, invert and restore the caret display. Usually the text cursor is displayed for half the cursor flash time, then hidden for the same amount of time.

    Returns:
    flash time of the cursor in milliseconds (integer)

    QsciScintillaCompat.getEndStyled

    getEndStyled()

    Public method to get the last styled position.

    QsciScintillaCompat.getEolIndicator

    getEolIndicator()

    Public method to get the eol indicator for the current eol mode.

    Returns:
    eol indicator (string)

    QsciScintillaCompat.getFileName

    getFileName()

    Public method to return the name of the file being displayed.

    Returns:
    filename of the displayed file (QString)

    QsciScintillaCompat.getFoundTarget

    getFoundTarget()

    Public method to get the recently found target.

    Returns:
    found target as a tuple of starting position and target length (integer, integer)

    QsciScintillaCompat.getLineSeparator

    getLineSeparator()

    Public method to get the line separator for the current eol mode.

    Returns:
    eol string (string)

    QsciScintillaCompat.getZoom

    getZoom()

    Public method used to retrieve the current zoom factor.

    Returns:
    zoom factor (int)

    QsciScintillaCompat.hasIndicator

    hasIndicator(indicator, pos)

    Public method to test for the existence of an indicator.

    indicator
    number of the indicator (integer, QsciScintilla.INDIC_CONTAINER .. QsciScintilla.INDIC_MAX)
    pos
    position to test (integer)
    Returns:
    flag indicating the existence of the indicator (boolean)

    QsciScintillaCompat.hasSelectedText

    hasSelectedText()

    Public method to indicate the presence of selected text.

    This is an overriding method to cope with a bug in QsciScintilla.

    Returns:
    flag indicating the presence of selected text (boolean)

    QsciScintillaCompat.hasSelection

    hasSelection()

    Public method to check for a selection.

    Returns:
    flag indicating the presence of a selection (boolean)

    QsciScintillaCompat.indentationGuideView

    indentationGuideView()

    Public method to get the indentation guide view.

    Returns:
    indentation guide view (SC_IV_NONE, SC_IV_REAL, SC_IV_LOOKFORWARD or SC_IV_LOOKBOTH)

    QsciScintillaCompat.indicatorDefine

    indicatorDefine(indicator, style, color)

    Public method to define the appearance of an indicator.

    indicator
    number of the indicator (integer, QsciScintilla.INDIC_CONTAINER .. QsciScintilla.INDIC_MAX)
    style
    style to be used for the indicator (QsciScintilla.INDIC_PLAIN, QsciScintilla.INDIC_SQUIGGLE, QsciScintilla.INDIC_TT, QsciScintilla.INDIC_DIAGONAL, QsciScintilla.INDIC_STRIKE, QsciScintilla.INDIC_HIDDEN, QsciScintilla.INDIC_BOX, QsciScintilla.INDIC_ROUNDBOX)
    color
    color to be used by the indicator (QColor)
    Raises ValueError:
    the indicator or style are not valid

    QsciScintillaCompat.lineAt

    lineAt(pos)

    Public method to calculate the line at a position.

    This variant is able to calculate the line for positions in the margins and for empty lines.

    pos
    position to calculate the line for (integer or QPoint)
    Returns:
    linenumber at position or -1, if there is no line at pos (integer, zero based)

    QsciScintillaCompat.lineEndPosition

    lineEndPosition(line)

    Public method to determine the line end position of the given line.

    line
    line number (integer)
    Returns:
    position of the line end disregarding line end characters (integer)

    QsciScintillaCompat.lineIndexFromPosition

    lineIndexFromPosition(pos)

    Public method to convert an absolute position to line and index.

    pos
    absolute position in the editor (integer)
    Returns:
    tuple of line number (integer) and index number (integer)

    QsciScintillaCompat.linesOnScreen

    linesOnScreen()

    Public method to get the amount of visible lines.

    Returns:
    amount of visible lines (integer)

    QsciScintillaCompat.monospacedStyles

    monospacedStyles(font)

    Public method to set the current style to be monospaced.

    font
    font to be used (QFont)

    QsciScintillaCompat.moveCursorLeft

    moveCursorLeft()

    Public method to move the cursor left.

    QsciScintillaCompat.moveCursorRight

    moveCursorRight()

    Public method to move the cursor right.

    QsciScintillaCompat.moveCursorToEOL

    moveCursorToEOL()

    Public method to move the cursor to the end of line.

    QsciScintillaCompat.moveCursorWordLeft

    moveCursorWordLeft()

    Public method to move the cursor left one word.

    QsciScintillaCompat.moveCursorWordRight

    moveCursorWordRight()

    Public method to move the cursor right one word.

    QsciScintillaCompat.newLineBelow

    newLineBelow()

    Public method to insert a new line below the current one.

    QsciScintillaCompat.positionAfter

    positionAfter(pos)

    Public method to get the position after the given position taking into account multibyte characters.

    pos
    position (integer)
    Returns:
    position after the given one (integer)

    QsciScintillaCompat.positionBefore

    positionBefore(pos)

    Public method to get the position before the given position taking into account multibyte characters.

    pos
    position (integer)
    Returns:
    position before the given one (integer)

    QsciScintillaCompat.positionFromLineIndex

    positionFromLineIndex(line, index)

    Public method to convert line and index to an absolute position.

    line
    line number (integer)
    index
    index number (integer)
    Returns:
    absolute position in the editor (integer)

    QsciScintillaCompat.positionFromPoint

    positionFromPoint(point)

    Public method to calculate the scintilla position from a point in the window.

    point
    point in the window (QPoint)
    Returns:
    scintilla position (integer) or -1 to indicate, that the point is not near any character

    QsciScintillaCompat.rawCharAt

    rawCharAt(pos)

    Public method to get the raw character at a position in the text.

    pos
    position in the text (integer)
    Returns:
    raw character at the requested position or empty string, if the position is negative or past the end of the document (string)

    QsciScintillaCompat.replaceTarget

    replaceTarget(replaceStr)

    Public method to replace the string found by the last search in target.

    replaceStr
    replacement string or regexp (string or QString)

    QsciScintillaCompat.scrollVertical

    scrollVertical(lines)

    Public method to scroll the text area.

    lines
    number of lines to scroll (negative scrolls up, positive scrolls down) (integer)

    QsciScintillaCompat.selectionIsRectangle

    selectionIsRectangle()

    Public method to check, if the current selection is rectangular.

    Returns:
    flag indicating a rectangular selection (boolean)

    QsciScintillaCompat.setCurrentIndicator

    setCurrentIndicator(indicator)

    Public method to set the current indicator.

    indicator
    number of the indicator (integer, QsciScintilla.INDIC_CONTAINER .. QsciScintilla.INDIC_MAX)
    Raises ValueError:
    the indicator or style are not valid

    QsciScintillaCompat.setCursorFlashTime

    setCursorFlashTime(time)

    Public method to get the flash (blink) time of the cursor in milliseconds.

    The flash time is the time required to display, invert and restore the caret display. Usually the text cursor is displayed for half the cursor flash time, then hidden for the same amount of time.

    time
    flash time of the cursor in milliseconds (integer)

    QsciScintillaCompat.setEolModeByEolString

    setEolModeByEolString(eolStr)

    Public method to set the eol mode given the eol string.

    eolStr
    eol string (string)

    QsciScintillaCompat.setIndentationGuideView

    setIndentationGuideView(view)

    Public method to set the view of the indentation guides.

    view
    view of the indentation guides (SC_IV_NONE, SC_IV_REAL, SC_IV_LOOKFORWARD or SC_IV_LOOKBOTH)

    QsciScintillaCompat.setIndicator

    setIndicator(indicator, sline, sindex, eline, eindex)

    Public method to set an indicator for the given range.

    indicator
    number of the indicator (integer, QsciScintilla.INDIC_CONTAINER .. QsciScintilla.INDIC_MAX)
    sline
    line number of the indicator start (integer)
    sindex
    index of the indicator start (integer)
    eline
    line number of the indicator end (integer)
    eindex
    index of the indicator end (integer)
    Raises ValueError:
    the indicator or style are not valid

    QsciScintillaCompat.setIndicatorRange

    setIndicatorRange(indicator, spos, length)

    Public method to set an indicator for the given range.

    indicator
    number of the indicator (integer, QsciScintilla.INDIC_CONTAINER .. QsciScintilla.INDIC_MAX)
    spos
    position of the indicator start (integer)
    length
    length of the indicator (integer)
    Raises ValueError:
    the indicator or style are not valid

    QsciScintillaCompat.setLexer

    setLexer(lex = None)

    Public method to set the lexer.

    lex
    the lexer to be set or None to reset it.

    QsciScintillaCompat.setStyleBits

    setStyleBits(bits)

    Public method to set the number of bits to be used for styling.

    QsciScintillaCompat.setStyling

    setStyling(length, style)

    Public method to style some text.

    length
    length of text to style (integer)
    style
    style to set for text (integer)

    QsciScintillaCompat.showUserList

    showUserList(id, lst)

    Public method to show a user supplied list.

    id
    id of the list (integer)
    lst
    list to be show (QStringList)

    QsciScintillaCompat.startStyling

    startStyling(pos, mask)

    Public method to prepare styling.

    pos
    styling positition to start at (integer)
    mask
    mask of bits to use for styling (integer)

    QsciScintillaCompat.styleAt

    styleAt(pos)

    Public method to get the style at a position in the text.

    pos
    position in the text (integer)
    Returns:
    style at the requested position or 0, if the position is negative or past the end of the document (integer)

    QsciScintillaCompat.zoomIn

    zoomIn(zoom = 1)

    Public method used to increase the zoom factor.

    zoom
    zoom factor increment

    QsciScintillaCompat.zoomOut

    zoomOut(zoom = 1)

    Public method used to decrease the zoom factor.

    zoom
    zoom factor decrement

    QsciScintillaCompat.zoomTo

    zoomTo(zoom)

    Public method used to zoom to a specific zoom factor.

    zoom
    zoom factor


    QSCINTILLA_VERSION

    QSCINTILLA_VERSION()

    Module function to return the QScintilla version.

    If the installed QScintilla is a snapshot version, then assume it is of the latest release and return a version number of 0x99999.

    Returns:
    QScintilla version (integer)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DocumentationTools.APIGenerator.html0000644000175000001440000000013212261331352030564 xustar000000000000000030 mtime=1388688106.082228849 30 atime=1389081084.985724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.DocumentationTools.APIGenerator.html0000644000175000001440000001205112261331352030315 0ustar00detlevusers00000000000000 eric4.DocumentationTools.APIGenerator

    eric4.DocumentationTools.APIGenerator

    Module implementing the builtin API generator.

    Global Attributes

    None

    Classes

    APIGenerator Class implementing the builtin documentation generator.

    Functions

    None


    APIGenerator

    Class implementing the builtin documentation generator.

    Derived from

    object

    Class Attributes

    None

    Class Methods

    None

    Methods

    APIGenerator Constructor
    __addClassVariablesAPI Private method to generate class api section for class variables.
    __addClassesAPI Private method to generate the api section for classes.
    __addFunctionsAPI Private method to generate the api section for functions.
    __addGlobalsAPI Private method to generate the api section for global variables.
    __addMethodsAPI Private method to generate the api section for class methods.
    __isPrivate Private method to check, if an object is considered private.
    genAPI Method to generate the source code documentation.

    Static Methods

    None

    APIGenerator (Constructor)

    APIGenerator(module)

    Constructor

    module
    The information of the parsed Python file.

    APIGenerator.__addClassVariablesAPI

    __addClassVariablesAPI(className)

    Private method to generate class api section for class variables.

    classname
    Name of the class containing the class variables. (string)

    APIGenerator.__addClassesAPI

    __addClassesAPI()

    Private method to generate the api section for classes.

    APIGenerator.__addFunctionsAPI

    __addFunctionsAPI()

    Private method to generate the api section for functions.

    APIGenerator.__addGlobalsAPI

    __addGlobalsAPI()

    Private method to generate the api section for global variables.

    APIGenerator.__addMethodsAPI

    __addMethodsAPI(className)

    Private method to generate the api section for class methods.

    classname
    Name of the class containing the method. (string)

    APIGenerator.__isPrivate

    __isPrivate(obj)

    Private method to check, if an object is considered private.

    obj
    reference to the object to be checked
    Returns:
    flag indicating, that object is considered private (boolean)

    APIGenerator.genAPI

    genAPI(newStyle, basePackage, includePrivate)

    Method to generate the source code documentation.

    newStyle
    flag indicating the api generation for QScintilla 1.7 and newer (boolean)
    basePackage
    name of the base package (string)
    includePrivate
    flag indicating to include private methods/functions (boolean)
    Returns:
    The API information. (string)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.DebugClients.Ruby.html0000644000175000001440000000013212261331354027052 xustar000000000000000030 mtime=1388688108.657230142 30 atime=1389081084.985724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.DebugClients.Ruby.html0000644000175000001440000000411512261331354026605 0ustar00detlevusers00000000000000 eric4.DebugClients.Ruby

    eric4.DebugClients.Ruby

    Package implementing the Ruby debugger.

    Modules

    AsyncFile File implementing an asynchronous file like socket interface for the debugger.
    AsyncIO File implementing an asynchronous interface for the debugger.
    Completer File implementing a command line completer class.
    Config File defining the different Ruby types
    DebugClient File implementing a debug client.
    DebugClientBaseModule File implementing a debug client base module.
    DebugClientCapabilities File defining the debug clients capabilities.
    DebugProtocol File defining the debug protocol tokens
    DebugQuit File implementing a debug quit exception class.
    Debuggee File implementing the real debugger, which is connected to the IDE frontend.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ConfigurationPages.Applicat0000644000175000001440000000013212261331353031274 xustar000000000000000030 mtime=1388688107.477229549 30 atime=1389081084.985724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.ApplicationPage.html0000644000175000001440000000457612261331353033310 0ustar00detlevusers00000000000000 eric4.Preferences.ConfigurationPages.ApplicationPage

    eric4.Preferences.ConfigurationPages.ApplicationPage

    Module implementing the Application configuration page.

    Global Attributes

    None

    Classes

    ApplicationPage Class implementing the Application configuration page.

    Functions

    create Module function to create the configuration page.


    ApplicationPage

    Class implementing the Application configuration page.

    Derived from

    ConfigurationPageBase, Ui_ApplicationPage

    Class Attributes

    None

    Class Methods

    None

    Methods

    ApplicationPage Constructor
    save Public slot to save the Application configuration.

    Static Methods

    None

    ApplicationPage (Constructor)

    ApplicationPage()

    Constructor

    ApplicationPage.save

    save()

    Public slot to save the Application configuration.



    create

    create(dlg)

    Module function to create the configuration page.

    dlg
    reference to the configuration dialog

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.UI.FindFileDialog.html0000644000175000001440000000013212261331351025566 xustar000000000000000030 mtime=1388688105.103228357 30 atime=1389081084.985724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.UI.FindFileDialog.html0000644000175000001440000003164712261331351025333 0ustar00detlevusers00000000000000 eric4.UI.FindFileDialog

    eric4.UI.FindFileDialog

    Module implementing a dialog to search for text in files.

    Global Attributes

    None

    Classes

    FindFileDialog Class implementing a dialog to search for text in files.

    Functions

    None


    FindFileDialog

    Class implementing a dialog to search for text in files.

    The occurrences found are displayed in a QTreeWidget showing the filename, the linenumber and the found text. The file will be opened upon a double click onto the respective entry of the list.

    Signals

    designerFile(string)
    emitted to open a Qt-Designer file
    sourceFile(string, int, string, (int, int)
    ) emitted to open a source file at a line

    Derived from

    QDialog, Ui_FindFileDialog

    Class Attributes

    endRole
    lineRole
    md5Role
    replaceRole
    startRole

    Class Methods

    None

    Methods

    FindFileDialog Constructor
    __contextMenuRequested Private slot to handle the context menu request.
    __copyToClipboard Private method to copy the path of an entry to the clipboard.
    __createItem Private method to create an entry in the file list.
    __doSearch Private slot to handle the find button being pressed.
    __enableFindButton Private slot called to enable the find button.
    __getFileList Private method to get a list of files to search.
    __openFile Private slot to open the currently selected entry.
    __stopSearch Private slot to handle the stop button being pressed.
    __stripEol Private method to strip the eol part.
    on_buttonBox_clicked Private slot called by a button of the button box clicked.
    on_dirButton_clicked Private slot to handle the selection of the project radio button.
    on_dirCombo_editTextChanged Private slot to handle the textChanged signal of the directory combo box.
    on_dirSelectButton_clicked Private slot to display a directory selection dialog.
    on_filterCheckBox_clicked Private slot to handle the selection of the file filter check box.
    on_filterEdit_textEdited Private slot to handle the textChanged signal of the file filter edit.
    on_findList_itemDoubleClicked Private slot to handle the double click on a file item.
    on_findtextCombo_editTextChanged Private slot to handle the editTextChanged signal of the find text combo.
    on_projectButton_clicked Private slot to handle the selection of the project radio button.
    on_replaceButton_clicked Private slot to perform the requested replace actions.
    on_replacetextCombo_editTextChanged Private slot to handle the editTextChanged signal of the replace text combo.
    setSearchDirectory Public slot to set the name of the directory to search in.
    show Overwritten method to enable/disable the project button.

    Static Methods

    None

    FindFileDialog (Constructor)

    FindFileDialog(project, replaceMode = False, parent=None)

    Constructor

    project
    reference to the project object
    parent
    parent widget of this dialog (QWidget)

    FindFileDialog.__contextMenuRequested

    __contextMenuRequested(pos)

    Private slot to handle the context menu request.

    pos
    position the context menu shall be shown (QPoint)

    FindFileDialog.__copyToClipboard

    __copyToClipboard()

    Private method to copy the path of an entry to the clipboard.

    FindFileDialog.__createItem

    __createItem(file, line, text, start, end, replTxt = "", md5 = "")

    Private method to create an entry in the file list.

    file
    filename of file (string or QString)
    line
    line number (integer)
    text
    text found (string or QString)
    start
    start position of match (integer)
    end
    end position of match (integer)
    replTxt
    text with replacements applied (string or QString)
    md5
    MD5 hash of the file (string or QString)

    FindFileDialog.__doSearch

    __doSearch()

    Private slot to handle the find button being pressed.

    FindFileDialog.__enableFindButton

    __enableFindButton()

    Private slot called to enable the find button.

    FindFileDialog.__getFileList

    __getFileList(path, filterRe)

    Private method to get a list of files to search.

    path
    the root directory to search in (string)
    filterRe
    regular expression defining the filter criteria (regexp object)
    Returns:
    list of files to be processed (list of strings)

    FindFileDialog.__openFile

    __openFile()

    Private slot to open the currently selected entry.

    FindFileDialog.__stopSearch

    __stopSearch()

    Private slot to handle the stop button being pressed.

    FindFileDialog.__stripEol

    __stripEol(txt)

    Private method to strip the eol part.

    txt
    line of text that should be treated (string)
    Returns:
    text with eol stripped (string)

    FindFileDialog.on_buttonBox_clicked

    on_buttonBox_clicked(button)

    Private slot called by a button of the button box clicked.

    button
    button that was clicked (QAbstractButton)

    FindFileDialog.on_dirButton_clicked

    on_dirButton_clicked()

    Private slot to handle the selection of the project radio button.

    FindFileDialog.on_dirCombo_editTextChanged

    on_dirCombo_editTextChanged(text)

    Private slot to handle the textChanged signal of the directory combo box.

    text
    (ignored)

    FindFileDialog.on_dirSelectButton_clicked

    on_dirSelectButton_clicked()

    Private slot to display a directory selection dialog.

    FindFileDialog.on_filterCheckBox_clicked

    on_filterCheckBox_clicked()

    Private slot to handle the selection of the file filter check box.

    FindFileDialog.on_filterEdit_textEdited

    on_filterEdit_textEdited(p0)

    Private slot to handle the textChanged signal of the file filter edit.

    text
    (ignored)

    FindFileDialog.on_findList_itemDoubleClicked

    on_findList_itemDoubleClicked(itm, column)

    Private slot to handle the double click on a file item.

    It emits the signal sourceFile or designerFile depending on the file extension.

    itm
    the double clicked tree item (QTreeWidgetItem)
    column
    column that was double clicked (integer) (ignored)

    FindFileDialog.on_findtextCombo_editTextChanged

    on_findtextCombo_editTextChanged(text)

    Private slot to handle the editTextChanged signal of the find text combo.

    text
    (ignored)

    FindFileDialog.on_projectButton_clicked

    on_projectButton_clicked()

    Private slot to handle the selection of the project radio button.

    FindFileDialog.on_replaceButton_clicked

    on_replaceButton_clicked()

    Private slot to perform the requested replace actions.

    FindFileDialog.on_replacetextCombo_editTextChanged

    on_replacetextCombo_editTextChanged(text)

    Private slot to handle the editTextChanged signal of the replace text combo.

    text
    (ignored)

    FindFileDialog.setSearchDirectory

    setSearchDirectory(searchDir)

    Public slot to set the name of the directory to search in.

    searchDir
    name of the directory to search in (string or QString)

    FindFileDialog.show

    show(txt = "")

    Overwritten method to enable/disable the project button.

    txt
    text to be shown in the searchtext combo (string or QString)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DebugClients.Python3.DebugClientCapabil0000644000175000001440000000013212261331354031065 xustar000000000000000030 mtime=1388688108.031229827 30 atime=1389081084.986724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.DebugClients.Python3.DebugClientCapabilities.html0000644000175000001440000000210212261331354032613 0ustar00detlevusers00000000000000 eric4.DebugClients.Python3.DebugClientCapabilities

    eric4.DebugClients.Python3.DebugClientCapabilities

    Module defining the debug clients capabilities.

    Global Attributes

    HasAll
    HasCompleter
    HasCoverage
    HasDebugger
    HasInterpreter
    HasProfiler
    HasShell
    HasUnittest

    Classes

    None

    Functions

    None

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.TypingCompleters.CompleterBa0000644000175000001440000000013212261331354031260 xustar000000000000000030 mtime=1388688108.642230134 30 atime=1389081084.986724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.TypingCompleters.CompleterBase.html0000644000175000001440000000757112261331354032317 0ustar00detlevusers00000000000000 eric4.QScintilla.TypingCompleters.CompleterBase

    eric4.QScintilla.TypingCompleters.CompleterBase

    Module implementing a base class for all typing completers.

    Typing completers are classes that implement some convenience actions, that are performed while the user is typing (e.g. insert ')' when the user types '(').

    Global Attributes

    None

    Classes

    CompleterBase Class implementing the base class for all completers.

    Functions

    None


    CompleterBase

    Class implementing the base class for all completers.

    Derived from

    QObject

    Class Attributes

    None

    Class Methods

    None

    Methods

    CompleterBase Constructor
    charAdded Public slot called to handle the user entering a character.
    isEnabled Public method to get the enabled state.
    readSettings Public slot called to reread the configuration parameters.
    setEnabled Public slot to set the enabled state.

    Static Methods

    None

    CompleterBase (Constructor)

    CompleterBase(editor, parent = None)

    Constructor

    editor
    reference to the editor object (QScintilla.Editor)
    parent
    reference to the parent object (QObject) If parent is None, we set the editor as the parent.

    CompleterBase.charAdded

    charAdded(charNumber)

    Public slot called to handle the user entering a character.

    Note 1: this slot must be overridden by subclasses implementing the specific behavior for the language.

    Note 2: charNumber can be greater than 255 because the editor is in UTF-8 mode by default.

    charNumber
    value of the character entered (integer)

    CompleterBase.isEnabled

    isEnabled()

    Public method to get the enabled state.

    CompleterBase.readSettings

    readSettings()

    Public slot called to reread the configuration parameters.

    Note: this slot should be overridden by subclasses having configurable parameters.

    CompleterBase.setEnabled

    setEnabled(enable)

    Public slot to set the enabled state.

    enabled
    flag indicating the new state (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ConfigurationPages.Graphics0000644000175000001440000000013212261331353031277 xustar000000000000000030 mtime=1388688107.469229545 30 atime=1389081084.988724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.GraphicsPage.html0000644000175000001440000000607612261331353032602 0ustar00detlevusers00000000000000 eric4.Preferences.ConfigurationPages.GraphicsPage

    eric4.Preferences.ConfigurationPages.GraphicsPage

    Module implementing the Printer configuration page.

    Global Attributes

    None

    Classes

    GraphicsPage Class implementing the Printer configuration page.

    Functions

    create Module function to create the configuration page.


    GraphicsPage

    Class implementing the Printer configuration page.

    Derived from

    ConfigurationPageBase, Ui_GraphicsPage

    Class Attributes

    None

    Class Methods

    None

    Methods

    GraphicsPage Constructor
    on_graphicsFontButton_clicked Private method used to select the font for the graphics items.
    polishPage Public slot to perform some polishing actions.
    save Public slot to save the Printer configuration.

    Static Methods

    None

    GraphicsPage (Constructor)

    GraphicsPage()

    Constructor

    GraphicsPage.on_graphicsFontButton_clicked

    on_graphicsFontButton_clicked()

    Private method used to select the font for the graphics items.

    GraphicsPage.polishPage

    polishPage()

    Public slot to perform some polishing actions.

    GraphicsPage.save

    save()

    Public slot to save the Printer configuration.



    create

    create(dlg)

    Module function to create the configuration page.

    dlg
    reference to the configuration dialog

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.KdeQt.KQFileDialog.html0000644000175000001440000000013212261331351025714 xustar000000000000000030 mtime=1388688105.530228572 30 atime=1389081084.988724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.KdeQt.KQFileDialog.html0000644000175000001440000003561712261331351025462 0ustar00detlevusers00000000000000 eric4.KdeQt.KQFileDialog

    eric4.KdeQt.KQFileDialog

    Compatibility module to use the KDE File Dialog instead of the Qt File Dialog.

    Global Attributes

    None

    Classes

    None

    Functions

    __convertFilter Private function to convert a Qt file filter to a KDE file filter.
    __kdeGetExistingDirectory Module function to get the name of a directory.
    __kdeGetOpenFileName Module function to get the name of a file for opening it.
    __kdeGetOpenFileNames Module function to get a list of names of files for opening.
    __kdeGetSaveFileName Module function to get the name of a file for saving it.
    __qtGetExistingDirectory Module function to get the name of a directory.
    __qtGetOpenFileName Module function to get the name of a file for opening it.
    __qtGetOpenFileNames Module function to get a list of names of files for opening.
    __qtGetSaveFileName Module function to get the name of a file for saving it.
    __qtReorderFilter Private function to reorder the file filter to cope with a KDE issue introduced by distributors usage of KDE file dialogs.
    __workingDirectory Private function to determine working directory for the file dialog.
    getExistingDirectory Module function to get the name of a directory.
    getOpenFileName Module function to get the name of a file for opening it.
    getOpenFileNames Module function to get a list of names of files for opening.
    getSaveFileName Module function to get the name of a file for saving it.


    __convertFilter

    __convertFilter(filter, selectedFilter = None)

    Private function to convert a Qt file filter to a KDE file filter.

    filter
    Qt file filter (QString or string)
    selectedFilter
    this is set to the selected filter
    Returns:
    the corresponding KDE file filter (QString)


    __kdeGetExistingDirectory

    __kdeGetExistingDirectory(parent = None, caption = QString(), dir_ = QString(), options = QFileDialog.Options(QFileDialog.ShowDirsOnly))

    Module function to get the name of a directory.

    parent
    parent widget of the dialog (QWidget)
    caption
    window title of the dialog (QString)
    dir_
    working directory of the dialog (QString)
    options
    various options for the dialog (QFileDialog.Options)
    Returns:
    name of selected directory (QString)


    __kdeGetOpenFileName

    __kdeGetOpenFileName(parent = None, caption = QString(), dir_ = QString(), filter = QString(), selectedFilter = None, options = QFileDialog.Options())

    Module function to get the name of a file for opening it.

    parent
    parent widget of the dialog (QWidget)
    caption
    window title of the dialog (QString)
    dir_
    working directory of the dialog (QString)
    filter
    filter string for the dialog (QString)
    selectedFilter
    selected filter for the dialog (QString)
    options
    various options for the dialog (QFileDialog.Options)
    Returns:
    name of file to be opened (QString)


    __kdeGetOpenFileNames

    __kdeGetOpenFileNames(parent = None, caption = QString(), dir_ = QString(), filter = QString(), selectedFilter = None, options = QFileDialog.Options())

    Module function to get a list of names of files for opening.

    parent
    parent widget of the dialog (QWidget)
    caption
    window title of the dialog (QString)
    dir_
    working directory of the dialog (QString)
    filter
    filter string for the dialog (QString)
    selectedFilter
    selected filter for the dialog (QString)
    options
    various options for the dialog (QFileDialog.Options)
    Returns:
    list of filenames to be opened (QStringList)


    __kdeGetSaveFileName

    __kdeGetSaveFileName(parent = None, caption = QString(), dir_ = QString(), filter = QString(), selectedFilter = None, options = QFileDialog.Options())

    Module function to get the name of a file for saving it.

    parent
    parent widget of the dialog (QWidget)
    caption
    window title of the dialog (QString)
    dir_
    working directory of the dialog (QString)
    filter
    filter string for the dialog (QString)
    selectedFilter
    selected filter for the dialog (QString)
    options
    various options for the dialog (QFileDialog.Options)
    Returns:
    name of file to be saved (QString)


    __qtGetExistingDirectory

    __qtGetExistingDirectory(parent = None, caption = QString(), dir_ = QString(), options = QFileDialog.Options(QFileDialog.ShowDirsOnly))

    Module function to get the name of a directory.

    parent
    parent widget of the dialog (QWidget)
    caption
    window title of the dialog (QString)
    dir_
    working directory of the dialog (QString)
    options
    various options for the dialog (QFileDialog.Options)
    Returns:
    name of selected directory (QString)


    __qtGetOpenFileName

    __qtGetOpenFileName(parent = None, caption = QString(), dir_ = QString(), filter = QString(), selectedFilter = None, options = QFileDialog.Options())

    Module function to get the name of a file for opening it.

    parent
    parent widget of the dialog (QWidget)
    caption
    window title of the dialog (QString)
    dir_
    working directory of the dialog (QString)
    filter
    filter string for the dialog (QString)
    selectedFilter
    selected filter for the dialog (QString)
    options
    various options for the dialog (QFileDialog.Options)
    Returns:
    name of file to be opened (QString)


    __qtGetOpenFileNames

    __qtGetOpenFileNames(parent = None, caption = QString(), dir_ = QString(), filter = QString(), selectedFilter = None, options = QFileDialog.Options())

    Module function to get a list of names of files for opening.

    parent
    parent widget of the dialog (QWidget)
    caption
    window title of the dialog (QString)
    dir_
    working directory of the dialog (QString)
    filter
    filter string for the dialog (QString)
    selectedFilter
    selected filter for the dialog (QString)
    options
    various options for the dialog (QFileDialog.Options)
    Returns:
    list of filenames to be opened (QStringList)


    __qtGetSaveFileName

    __qtGetSaveFileName(parent = None, caption = QString(), dir_ = QString(), filter = QString(), selectedFilter = None, options = QFileDialog.Options())

    Module function to get the name of a file for saving it.

    parent
    parent widget of the dialog (QWidget)
    caption
    window title of the dialog (QString)
    dir_
    working directory of the dialog (QString)
    filter
    filter string for the dialog (QString)
    selectedFilter
    selected filter for the dialog (QString)
    options
    various options for the dialog (QFileDialog.Options)
    Returns:
    name of file to be saved (QString)


    __qtReorderFilter

    __qtReorderFilter(filter, selectedFilter = None)

    Private function to reorder the file filter to cope with a KDE issue introduced by distributors usage of KDE file dialogs.

    filter
    Qt file filter (QString or string)
    selectedFilter
    this is set to the selected filter (QString or string)
    Returns:
    the rearranged Qt file filter (QString)


    __workingDirectory

    __workingDirectory(path_)

    Private function to determine working directory for the file dialog.

    path_
    path of the intended working directory (string or QString)
    Returns:
    calculated working directory (QString)


    getExistingDirectory

    getExistingDirectory(parent = None, caption = QString(), dir_ = QString(), options = QFileDialog.Options(QFileDialog.ShowDirsOnly))

    Module function to get the name of a directory.

    parent
    parent widget of the dialog (QWidget)
    caption
    window title of the dialog (QString)
    dir_
    working directory of the dialog (QString)
    options
    various options for the dialog (QFileDialog.Options)
    Returns:
    name of selected directory (QString)


    getOpenFileName

    getOpenFileName(parent = None, caption = QString(), dir_ = QString(), filter = QString(), selectedFilter = None, options = QFileDialog.Options())

    Module function to get the name of a file for opening it.

    parent
    parent widget of the dialog (QWidget)
    caption
    window title of the dialog (QString)
    dir_
    working directory of the dialog (QString)
    filter
    filter string for the dialog (QString)
    selectedFilter
    selected filter for the dialog (QString)
    options
    various options for the dialog (QFileDialog.Options)
    Returns:
    name of file to be opened (QString)


    getOpenFileNames

    getOpenFileNames(parent = None, caption = QString(), dir_ = QString(), filter = QString(), selectedFilter = None, options = QFileDialog.Options())

    Module function to get a list of names of files for opening.

    parent
    parent widget of the dialog (QWidget)
    caption
    window title of the dialog (QString)
    dir_
    working directory of the dialog (QString)
    filter
    filter string for the dialog (QString)
    selectedFilter
    selected filter for the dialog (QString)
    options
    various options for the dialog (QFileDialog.Options)
    Returns:
    list of filenames to be opened (QStringList)


    getSaveFileName

    getSaveFileName(parent = None, caption = QString(), dir_ = QString(), filter = QString(), selectedFilter = None, options = QFileDialog.Options())

    Module function to get the name of a file for saving it.

    parent
    parent widget of the dialog (QWidget)
    caption
    window title of the dialog (QString)
    dir_
    working directory of the dialog (QString)
    filter
    filter string for the dialog (QString)
    selectedFilter
    selected filter for the dialog (QString)
    options
    various options for the dialog (QFileDialog.Options)
    Returns:
    name of file to be saved (QString)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.TypingCompleters.__init__.ht0000644000175000001440000000013212261331354031234 xustar000000000000000030 mtime=1388688108.631230128 30 atime=1389081084.988724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.TypingCompleters.__init__.html0000644000175000001440000000311212261331354031314 0ustar00detlevusers00000000000000 eric4.QScintilla.TypingCompleters.__init__

    eric4.QScintilla.TypingCompleters.__init__

    Package implementing lexers for the various supported programming languages.

    Global Attributes

    None

    Classes

    None

    Functions

    getCompleter Module function to instantiate a lexer object for a given language.


    getCompleter

    getCompleter(language, editor, parent = None)

    Module function to instantiate a lexer object for a given language.

    language
    language of the lexer (string)
    editor
    reference to the editor object (QScintilla.Editor)
    parent
    reference to the parent object (QObject)
    Returns:
    reference to the instanciated lexer object (QsciLexer)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsSubversion.SvnDia0000644000175000001440000000013212261331352031262 xustar000000000000000030 mtime=1388688106.914229266 30 atime=1389081084.988724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsSubversion.SvnDialog.html0000644000175000001440000001651312261331352032467 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsSubversion.SvnDialog

    eric4.Plugins.VcsPlugins.vcsSubversion.SvnDialog

    Module implementing a dialog starting a process and showing its output.

    Global Attributes

    None

    Classes

    SvnDialog Class implementing a dialog starting a process and showing its output.

    Functions

    None


    SvnDialog

    Class implementing a dialog starting a process and showing its output.

    It starts a QProcess and displays a dialog that shows the output of the process. The dialog is modal, which causes a synchronized execution of the process.

    Derived from

    QDialog, Ui_SvnDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnDialog Constructor
    __finish Private slot called when the process finished or the user pressed the button.
    __procFinished Private slot connected to the finished signal.
    __readStderr Private slot to handle the readyReadStderr signal.
    __readStdout Private slot to handle the readyReadStdout signal.
    hasAddOrDelete Public method to check, if the last action contained an add or delete.
    keyPressEvent Protected slot to handle a key press event.
    normalExit Public method to check for a normal process termination.
    on_buttonBox_clicked Private slot called by a button of the button box clicked.
    on_input_returnPressed Private slot to handle the press of the return key in the input field.
    on_passwordCheckBox_toggled Private slot to handle the password checkbox toggled.
    on_sendButton_clicked Private slot to send the input to the subversion process.
    startProcess Public slot used to start the process.

    Static Methods

    None

    SvnDialog (Constructor)

    SvnDialog(text, parent = None)

    Constructor

    text
    text to be shown by the label (string or QString)
    parent
    parent widget (QWidget)

    SvnDialog.__finish

    __finish()

    Private slot called when the process finished or the user pressed the button.

    SvnDialog.__procFinished

    __procFinished(exitCode, exitStatus)

    Private slot connected to the finished signal.

    exitCode
    exit code of the process (integer)
    exitStatus
    exit status of the process (QProcess.ExitStatus)

    SvnDialog.__readStderr

    __readStderr()

    Private slot to handle the readyReadStderr signal.

    It reads the error output of the process and inserts it into the error pane.

    SvnDialog.__readStdout

    __readStdout()

    Private slot to handle the readyReadStdout signal.

    It reads the output of the process, formats it and inserts it into the contents pane.

    SvnDialog.hasAddOrDelete

    hasAddOrDelete()

    Public method to check, if the last action contained an add or delete.

    SvnDialog.keyPressEvent

    keyPressEvent(evt)

    Protected slot to handle a key press event.

    evt
    the key press event (QKeyEvent)

    SvnDialog.normalExit

    normalExit()

    Public method to check for a normal process termination.

    Returns:
    flag indicating normal process termination (boolean)

    SvnDialog.on_buttonBox_clicked

    on_buttonBox_clicked(button)

    Private slot called by a button of the button box clicked.

    button
    button that was clicked (QAbstractButton)

    SvnDialog.on_input_returnPressed

    on_input_returnPressed()

    Private slot to handle the press of the return key in the input field.

    SvnDialog.on_passwordCheckBox_toggled

    on_passwordCheckBox_toggled(isOn)

    Private slot to handle the password checkbox toggled.

    isOn
    flag indicating the status of the check box (boolean)

    SvnDialog.on_sendButton_clicked

    on_sendButton_clicked()

    Private slot to send the input to the subversion process.

    SvnDialog.startProcess

    startProcess(args, workingDir = None, setLanguage = False)

    Public slot used to start the process.

    args
    list of arguments for the process (QStringList)
    workingDir
    working directory for the process (string or QString)
    setLanguage
    flag indicating to set the language to "C" (boolean)
    Returns:
    flag indicating a successful start of the process

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.AdBlock.AdBlockManager.html0000644000175000001440000000013212261331353030655 xustar000000000000000030 mtime=1388688107.751229687 30 atime=1389081084.988724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.AdBlock.AdBlockManager.html0000644000175000001440000001747112261331353030421 0ustar00detlevusers00000000000000 eric4.Helpviewer.AdBlock.AdBlockManager

    eric4.Helpviewer.AdBlock.AdBlockManager

    Module implementing the AdBlock manager.

    Global Attributes

    None

    Classes

    AdBlockManager Class implementing the AdBlock manager.

    Functions

    None


    AdBlockManager

    Class implementing the AdBlock manager.

    Signals

    rulesChanged()
    emitted after some rule has changed

    Derived from

    QObject

    Class Attributes

    None

    Class Methods

    None

    Methods

    AdBlockManager Constructor
    __customSubscriptionLocation Private method to generate the path for custom subscriptions.
    __customSubscriptionUrl Private method to generate the URL for custom subscriptions.
    __loadSubscriptions Private method to load the set of subscriptions.
    addSubscription Public method to add an AdBlock subscription.
    close Public method to close the open search engines manager.
    customRules Public method to get a subscription for custom rules.
    isEnabled Public method to check, if blocking ads is enabled.
    load Public method to load the AdBlock subscriptions.
    network Public method to get a reference to the network block object.
    page Public method to get a reference to the page block object.
    removeSubscription Public method to remove an AdBlock subscription.
    save Public method to save the AdBlock subscriptions.
    setEnabled Public slot to set the enabled state.
    showDialog Public slot to show the AdBlock subscription management dialog.
    subscriptions Public method to get all subscriptions.

    Static Methods

    None

    AdBlockManager (Constructor)

    AdBlockManager(parent = None)

    Constructor

    parent
    reference to the parent object (QObject)

    AdBlockManager.__customSubscriptionLocation

    __customSubscriptionLocation()

    Private method to generate the path for custom subscriptions.

    Returns:
    URL for custom subscriptions (QUrl)

    AdBlockManager.__customSubscriptionUrl

    __customSubscriptionUrl()

    Private method to generate the URL for custom subscriptions.

    Returns:
    URL for custom subscriptions (QUrl)

    AdBlockManager.__loadSubscriptions

    __loadSubscriptions()

    Private method to load the set of subscriptions.

    AdBlockManager.addSubscription

    addSubscription(subscription)

    Public method to add an AdBlock subscription.

    subscription
    AdBlock subscription to be added (AdBlockSubscription)

    AdBlockManager.close

    close()

    Public method to close the open search engines manager.

    AdBlockManager.customRules

    customRules()

    Public method to get a subscription for custom rules.

    Returns:
    subscription object for custom rules (AdBlockSubscription)

    AdBlockManager.isEnabled

    isEnabled()

    Public method to check, if blocking ads is enabled.

    Returns:
    flag indicating the enabled state (boolean)

    AdBlockManager.load

    load()

    Public method to load the AdBlock subscriptions.

    AdBlockManager.network

    network()

    Public method to get a reference to the network block object.

    Returns:
    reference to the network block object (AdBlockNetwork)

    AdBlockManager.page

    page()

    Public method to get a reference to the page block object.

    Returns:
    reference to the page block object (AdBlockPage)

    AdBlockManager.removeSubscription

    removeSubscription(subscription)

    Public method to remove an AdBlock subscription.

    subscription
    AdBlock subscription to be removed (AdBlockSubscription)

    AdBlockManager.save

    save()

    Public method to save the AdBlock subscriptions.

    AdBlockManager.setEnabled

    setEnabled(enabled)

    Public slot to set the enabled state.

    enabled
    flag indicating the enabled state (boolean)

    AdBlockManager.showDialog

    showDialog()

    Public slot to show the AdBlock subscription management dialog.

    AdBlockManager.subscriptions

    subscriptions()

    Public method to get all subscriptions.

    Returns:
    list of subscriptions (list of AdBlockSubscription)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.SqlBrowser.SqlConnectionDialog.html0000644000175000001440000000013212261331351030453 xustar000000000000000030 mtime=1388688105.619228616 30 atime=1389081084.988724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.SqlBrowser.SqlConnectionDialog.html0000644000175000001440000001011412261331351030202 0ustar00detlevusers00000000000000 eric4.SqlBrowser.SqlConnectionDialog

    eric4.SqlBrowser.SqlConnectionDialog

    Module implementing a dialog to enter the connection parameters.

    Global Attributes

    None

    Classes

    SqlConnectionDialog Class implementing a dialog to enter the connection parameters.

    Functions

    None


    SqlConnectionDialog

    Class implementing a dialog to enter the connection parameters.

    Derived from

    QDialog, Ui_SqlConnectionDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    SqlConnectionDialog Constructor
    __updateDialog Private slot to update the dialog depending on its contents.
    getData Public method to retrieve the connection data.
    on_databaseEdit_textChanged Private slot handling the change of the database name.
    on_databaseFileButton_clicked Private slot to open a database file via a file selection dialog.
    on_driverCombo_activated Private slot handling the selection of a database driver.

    Static Methods

    None

    SqlConnectionDialog (Constructor)

    SqlConnectionDialog(parent = None)

    Constructor

    SqlConnectionDialog.__updateDialog

    __updateDialog()

    Private slot to update the dialog depending on its contents.

    SqlConnectionDialog.getData

    getData()

    Public method to retrieve the connection data.

    Returns:
    tuple giving the driver name (QString), the database name (QString), the user name (QString), the password (QString), the host name (QString) and the port (integer)

    SqlConnectionDialog.on_databaseEdit_textChanged

    on_databaseEdit_textChanged(p0)

    Private slot handling the change of the database name.

    SqlConnectionDialog.on_databaseFileButton_clicked

    on_databaseFileButton_clicked()

    Private slot to open a database file via a file selection dialog.

    SqlConnectionDialog.on_driverCombo_activated

    on_driverCombo_activated(txt)

    Private slot handling the selection of a database driver.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DebugClients.Python.DebugClientBase.htm0000644000175000001440000000013212261331354031110 xustar000000000000000030 mtime=1388688108.259229942 30 atime=1389081084.988724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.DebugClients.Python.DebugClientBase.html0000644000175000001440000006333112261331354031024 0ustar00detlevusers00000000000000 eric4.DebugClients.Python.DebugClientBase

    eric4.DebugClients.Python.DebugClientBase

    Module implementing a debug client base class.

    Global Attributes

    DebugClientInstance

    Classes

    DebugClientBase Class implementing the client side of the debugger.

    Functions

    DebugClientClose Replacement for the standard os.close(fd).
    DebugClientFork Replacement for the standard os.fork().
    DebugClientInput Replacement for the standard input builtin.
    DebugClientRawInput Replacement for the standard raw_input builtin.
    DebugClientSetRecursionLimit Replacement for the standard sys.setrecursionlimit(limit).


    DebugClientBase

    Class implementing the client side of the debugger.

    It provides access to the Python interpeter from a debugger running in another process whether or not the Qt event loop is running.

    The protocol between the debugger and the client assumes that there will be a single source of debugger commands and a single source of Python statements. Commands and statement are always exactly one line and may be interspersed.

    The protocol is as follows. First the client opens a connection to the debugger and then sends a series of one line commands. A command is either >Load<, >Step<, >StepInto<, ... or a Python statement. See DebugProtocol.py for a listing of valid protocol tokens.

    A Python statement consists of the statement to execute, followed (in a separate line) by >OK?<. If the statement was incomplete then the response is >Continue<. If there was an exception then the response is >Exception<. Otherwise the response is >OK<. The reason for the >OK?< part is to provide a sentinal (ie. the responding >OK<) after any possible output as a result of executing the command.

    The client may send any other lines at any other time which should be interpreted as program output.

    If the debugger closes the session there is no response from the client. The client may close the session at any time as a result of the script being debugged closing or crashing.

    Note: This class is meant to be subclassed by individual DebugClient classes. Do not instantiate it directly.

    Derived from

    object

    Class Attributes

    clientCapabilities

    Class Methods

    None

    Methods

    DebugClientBase Constructor
    __clientCapabilities Private method to determine the clients capabilities.
    __completionList Private slot to handle the request for a commandline completion list.
    __dumpThreadList Public method to send the list of threads.
    __dumpVariable Private method to return the variables of a frame to the debug server.
    __dumpVariables Private method to return the variables of a frame to the debug server.
    __exceptionRaised Private method called in the case of an exception
    __formatQt4Variable Private method to produce a formated output of a simple Qt4 type.
    __formatVariablesList Private method to produce a formated variables list.
    __generateFilterObjects Private slot to convert a filter string to a list of filter objects.
    __getSysPath Private slot to calculate a path list including the PYTHONPATH environment variable.
    __interact Private method to Interact with the debugger.
    __resolveHost Private method to resolve a hostname to an IP address.
    __setCoding Private method to set the coding used by a python file.
    __unhandled_exception Private method called to report an uncaught exception.
    absPath Public method to convert a filename to an absolute name.
    attachThread Public method to setup a thread for DebugClient to debug.
    close Private method implementing a close method as a replacement for os.close().
    connectDebugger Public method to establish a session with the debugger.
    eventLoop Public method implementing our event loop.
    eventPoll Public method to poll for events like 'set break point'.
    fork Public method implementing a fork routine deciding which branch to follow.
    getCoding Public method to return the current coding.
    getRunning Public method to return the main script we are currently running.
    handleLine Public method to handle the receipt of a complete line.
    input Public method to implement input() using the event loop.
    main Public method implementing the main method.
    progTerminated Public method to tell the debugger that the program has terminated.
    raw_input Public method to implement raw_input() using the event loop.
    run_call Public method used to start the remote debugger and call a function.
    sessionClose Public method to close the session with the debugger and optionally terminate.
    shouldSkip Public method to check if a file should be skipped.
    startDebugger Public method used to start the remote debugger.
    startProgInDebugger Public method used to start the remote debugger.
    write Public method to write data to the output stream.

    Static Methods

    None

    DebugClientBase (Constructor)

    DebugClientBase()

    Constructor

    DebugClientBase.__clientCapabilities

    __clientCapabilities()

    Private method to determine the clients capabilities.

    Returns:
    client capabilities (integer)

    DebugClientBase.__completionList

    __completionList(text)

    Private slot to handle the request for a commandline completion list.

    text
    the text to be completed (string)

    DebugClientBase.__dumpThreadList

    __dumpThreadList()

    Public method to send the list of threads.

    DebugClientBase.__dumpVariable

    __dumpVariable(var, frmnr, scope, filter)

    Private method to return the variables of a frame to the debug server.

    var
    list encoded name of the requested variable (list of strings)
    frmnr
    distance of frame reported on. 0 is the current frame (int)
    scope
    1 to report global variables, 0 for local variables (int)
    filter
    the indices of variable types to be filtered (list of int)

    DebugClientBase.__dumpVariables

    __dumpVariables(frmnr, scope, filter)

    Private method to return the variables of a frame to the debug server.

    frmnr
    distance of frame reported on. 0 is the current frame (int)
    scope
    1 to report global variables, 0 for local variables (int)
    filter
    the indices of variable types to be filtered (list of int)

    DebugClientBase.__exceptionRaised

    __exceptionRaised()

    Private method called in the case of an exception

    It ensures that the debug server is informed of the raised exception.

    DebugClientBase.__formatQt4Variable

    __formatQt4Variable(value, vtype)

    Private method to produce a formated output of a simple Qt4 type.

    value
    variable to be formated
    vtype
    type of the variable to be formatted (string)
    Returns:
    A tuple consisting of a list of formatted variables. Each variable entry is a tuple of three elements, the variable name, its type and value.

    DebugClientBase.__formatVariablesList

    __formatVariablesList(keylist, dict, scope, filter = [], formatSequences = 0)

    Private method to produce a formated variables list.

    The dictionary passed in to it is scanned. Variables are only added to the list, if their type is not contained in the filter list and their name doesn't match any of the filter expressions. The formated variables list (a list of tuples of 3 values) is returned.

    keylist
    keys of the dictionary
    dict
    the dictionary to be scanned
    scope
    1 to filter using the globals filter, 0 using the locals filter (int). Variables are only added to the list, if their name do not match any of the filter expressions.
    filter
    the indices of variable types to be filtered. Variables are only added to the list, if their type is not contained in the filter list.
    formatSequences
    flag indicating, that sequence or dictionary variables should be formatted. If it is 0 (or false), just the number of items contained in these variables is returned. (boolean)
    Returns:
    A tuple consisting of a list of formatted variables. Each variable entry is a tuple of three elements, the variable name, its type and value.

    DebugClientBase.__generateFilterObjects

    __generateFilterObjects(scope, filterString)

    Private slot to convert a filter string to a list of filter objects.

    scope
    1 to generate filter for global variables, 0 for local variables (int)
    filterString
    string of filter patterns separated by ';'

    DebugClientBase.__getSysPath

    __getSysPath(firstEntry)

    Private slot to calculate a path list including the PYTHONPATH environment variable.

    firstEntry
    entry to be put first in sys.path (string)
    Returns:
    path list for use as sys.path (list of strings)

    DebugClientBase.__interact

    __interact()

    Private method to Interact with the debugger.

    DebugClientBase.__resolveHost

    __resolveHost(host)

    Private method to resolve a hostname to an IP address.

    host
    hostname of the debug server (string)
    Returns:
    IP address (string)

    DebugClientBase.__setCoding

    __setCoding(filename)

    Private method to set the coding used by a python file.

    filename
    name of the file to inspect (string)

    DebugClientBase.__unhandled_exception

    __unhandled_exception(exctype, excval, exctb)

    Private method called to report an uncaught exception.

    exctype
    the type of the exception
    excval
    data about the exception
    exctb
    traceback for the exception

    DebugClientBase.absPath

    absPath(fn)

    Public method to convert a filename to an absolute name.

    sys.path is used as a set of possible prefixes. The name stays relative if a file could not be found.

    fn
    filename (string)
    Returns:
    the converted filename (string)

    DebugClientBase.attachThread

    attachThread(target = None, args = None, kwargs = None, mainThread = 0)

    Public method to setup a thread for DebugClient to debug.

    If mainThread is non-zero, then we are attaching to the already started mainthread of the app and the rest of the args are ignored.

    This is just an empty function and is overridden in the threaded debugger.

    target
    the start function of the target thread (i.e. the user code)
    args
    arguments to pass to target
    kwargs
    keyword arguments to pass to target
    mainThread
    non-zero, if we are attaching to the already started mainthread of the app
    Returns:
    The identifier of the created thread

    DebugClientBase.close

    close(fd)

    Private method implementing a close method as a replacement for os.close().

    It prevents the debugger connections from being closed.

    fd
    file descriptor to be closed (integer)

    DebugClientBase.connectDebugger

    connectDebugger(port, remoteAddress=None, redirect=1)

    Public method to establish a session with the debugger.

    It opens a network connection to the debugger, connects it to stdin, stdout and stderr and saves these file objects in case the application being debugged redirects them itself.

    port
    the port number to connect to (int)
    remoteAddress
    the network address of the debug server host (string)
    redirect
    flag indicating redirection of stdin, stdout and stderr (boolean)

    DebugClientBase.eventLoop

    eventLoop(disablePolling = False)

    Public method implementing our event loop.

    disablePolling
    flag indicating to enter an event loop with polling disabled (boolean)

    DebugClientBase.eventPoll

    eventPoll()

    Public method to poll for events like 'set break point'.

    DebugClientBase.fork

    fork()

    Public method implementing a fork routine deciding which branch to follow.

    DebugClientBase.getCoding

    getCoding()

    Public method to return the current coding.

    Returns:
    codec name (string)

    DebugClientBase.getRunning

    getRunning()

    Public method to return the main script we are currently running.

    DebugClientBase.handleLine

    handleLine(line)

    Public method to handle the receipt of a complete line.

    It first looks for a valid protocol token at the start of the line. Thereafter it trys to execute the lines accumulated so far.

    line
    the received line

    DebugClientBase.input

    input(prompt)

    Public method to implement input() using the event loop.

    prompt
    the prompt to be shown (string)
    Returns:
    the entered string evaluated as a Python expresion

    DebugClientBase.main

    main()

    Public method implementing the main method.

    DebugClientBase.progTerminated

    progTerminated(status)

    Public method to tell the debugger that the program has terminated.

    status
    the return status

    DebugClientBase.raw_input

    raw_input(prompt, echo)

    Public method to implement raw_input() using the event loop.

    prompt
    the prompt to be shown (string)
    echo
    Flag indicating echoing of the input (boolean)
    Returns:
    the entered string

    DebugClientBase.run_call

    run_call(scriptname, func, *args)

    Public method used to start the remote debugger and call a function.

    scriptname
    name of the script to be debugged (string)
    func
    function to be called
    *args
    arguments being passed to func
    Returns:
    result of the function call

    DebugClientBase.sessionClose

    sessionClose(exit = 1)

    Public method to close the session with the debugger and optionally terminate.

    exit
    flag indicating to terminate (boolean)

    DebugClientBase.shouldSkip

    shouldSkip(fn)

    Public method to check if a file should be skipped.

    fn
    filename to be checked
    Returns:
    non-zero if fn represents a file we are 'skipping', zero otherwise.

    DebugClientBase.startDebugger

    startDebugger(filename = None, host = None, port = None, enableTrace = 1, exceptions = 1, tracePython = 0, redirect = 1)

    Public method used to start the remote debugger.

    filename
    the program to be debugged (string)
    host
    hostname of the debug server (string)
    port
    portnumber of the debug server (int)
    enableTrace
    flag to enable the tracing function (boolean)
    exceptions
    flag to enable exception reporting of the IDE (boolean)
    tracePython
    flag to enable tracing into the Python library (boolean)
    redirect
    flag indicating redirection of stdin, stdout and stderr (boolean)

    DebugClientBase.startProgInDebugger

    startProgInDebugger(progargs, wd = '', host = None, port = None, exceptions = 1, tracePython = 0, redirect = 1)

    Public method used to start the remote debugger.

    progargs
    commandline for the program to be debugged (list of strings)
    wd
    working directory for the program execution (string)
    host
    hostname of the debug server (string)
    port
    portnumber of the debug server (int)
    exceptions
    flag to enable exception reporting of the IDE (boolean)
    tracePython
    flag to enable tracing into the Python library (boolean)
    redirect
    flag indicating redirection of stdin, stdout and stderr (boolean)

    DebugClientBase.write

    write(s)

    Public method to write data to the output stream.

    s
    data to be written (string)


    DebugClientClose

    DebugClientClose(fd)

    Replacement for the standard os.close(fd).

    fd
    open file descriptor to be closed (integer)


    DebugClientFork

    DebugClientFork()

    Replacement for the standard os.fork().



    DebugClientInput

    DebugClientInput(prompt="")

    Replacement for the standard input builtin.

    This function works with the split debugger.

    prompt
    The prompt to be shown. (string)


    DebugClientRawInput

    DebugClientRawInput(prompt="", echo=1)

    Replacement for the standard raw_input builtin.

    This function works with the split debugger.

    prompt
    The prompt to be shown. (string)
    echo
    Flag indicating echoing of the input (boolean)


    DebugClientSetRecursionLimit

    DebugClientSetRecursionLimit(limit)

    Replacement for the standard sys.setrecursionlimit(limit).

    limit
    recursion limit (integer)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.AdBlock.AdBlockModel.html0000644000175000001440000000013212261331353030343 xustar000000000000000030 mtime=1388688107.742229682 30 atime=1389081084.988724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.AdBlock.AdBlockModel.html0000644000175000001440000002136612261331353030105 0ustar00detlevusers00000000000000 eric4.Helpviewer.AdBlock.AdBlockModel

    eric4.Helpviewer.AdBlock.AdBlockModel

    Module implementing a model for the AdBlock dialog.

    Global Attributes

    None

    Classes

    AdBlockModel Class implementing a model for the AdBlock dialog.

    Functions

    None


    AdBlockModel

    Class implementing a model for the AdBlock dialog.

    Derived from

    QAbstractItemModel

    Class Attributes

    None

    Class Methods

    None

    Methods

    AdBlockModel Constructor
    __rulesChanged Private slot to handle changes in rules.
    columnCount Public method to get the number of columns.
    data Public method to get data from the model.
    flags Public method to get flags for a node cell.
    hasChildren Public method to check, if a parent node has some children.
    headerData Public method to get the header data.
    index Public method to get a model index for a node cell.
    parent Public method to get the index of the parent node.
    removeRows Public method to remove bookmarks from the model.
    rowCount Public method to determine the number of rows.
    rule Public method to get the rule given its index.
    setData Public method to set the data of a node cell.
    subscription Public method to get the subscription given its index.
    subscriptionIndex Public method to get the index of a subscription.

    Static Methods

    None

    AdBlockModel (Constructor)

    AdBlockModel(parent = None)

    Constructor

    parent
    reference to the parent object (QObject)

    AdBlockModel.__rulesChanged

    __rulesChanged()

    Private slot to handle changes in rules.

    AdBlockModel.columnCount

    columnCount(parent = QModelIndex())

    Public method to get the number of columns.

    parent
    index of parent (QModelIndex)
    Returns:
    number of columns (integer)

    AdBlockModel.data

    data(index, role = Qt.DisplayRole)

    Public method to get data from the model.

    index
    index of bookmark to get data for (QModelIndex)
    role
    data role (integer)
    Returns:
    bookmark data (QVariant)

    AdBlockModel.flags

    flags(index)

    Public method to get flags for a node cell.

    index
    index of the node cell (QModelIndex)
    Returns:
    flags (Qt.ItemFlags)

    AdBlockModel.hasChildren

    hasChildren(parent = QModelIndex())

    Public method to check, if a parent node has some children.

    parent
    index of the parent node (QModelIndex)
    Returns:
    flag indicating the presence of children (boolean)

    AdBlockModel.headerData

    headerData(section, orientation, role = Qt.DisplayRole)

    Public method to get the header data.

    section
    section number (integer)
    orientation
    header orientation (Qt.Orientation)
    role
    data role (integer)
    Returns:
    header data (QVariant)

    AdBlockModel.index

    index(row, column, parent = QModelIndex())

    Public method to get a model index for a node cell.

    row
    row number (integer)
    column
    column number (integer)
    parent
    index of the parent (QModelIndex)
    Returns:
    index (QModelIndex)

    AdBlockModel.parent

    parent(index = QModelIndex())

    Public method to get the index of the parent node.

    index
    index of the child node (QModelIndex)
    Returns:
    index of the parent node (QModelIndex)

    AdBlockModel.removeRows

    removeRows(row, count, parent = QModelIndex())

    Public method to remove bookmarks from the model.

    row
    row of the first bookmark to remove (integer)
    count
    number of bookmarks to remove (integer)
    index
    of the parent bookmark node (QModelIndex)
    Returns:
    flag indicating successful removal (boolean)

    AdBlockModel.rowCount

    rowCount(parent = QModelIndex())

    Public method to determine the number of rows.

    parent
    index of parent (QModelIndex)
    Returns:
    number of rows (integer)

    AdBlockModel.rule

    rule(index)

    Public method to get the rule given its index.

    index
    index of the rule (QModelIndex)
    Returns:
    reference to the rule (AdBlockRule)

    AdBlockModel.setData

    setData(index, value, role = Qt.EditRole)

    Public method to set the data of a node cell.

    index
    index of the node cell (QModelIndex)
    value
    value to be set (QVariant)
    role
    role of the data (integer)
    Returns:
    flag indicating success (boolean)

    AdBlockModel.subscription

    subscription(index)

    Public method to get the subscription given its index.

    index
    index of the subscription (QModelIndex)
    Returns:
    reference to the subscription (AdBlockSubscription)

    AdBlockModel.subscriptionIndex

    subscriptionIndex(subscription)

    Public method to get the index of a subscription.

    subscription
    reference to the subscription (AdBlockSubscription)
    Returns:
    index of the subscription (QModelIndex)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.KdeQt.KQInputDialog.html0000644000175000001440000000013212261331351026134 xustar000000000000000030 mtime=1388688105.522228568 30 atime=1389081084.988724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.KdeQt.KQInputDialog.html0000644000175000001440000002364212261331351025675 0ustar00detlevusers00000000000000 eric4.KdeQt.KQInputDialog

    eric4.KdeQt.KQInputDialog

    Compatibility module to use the KDE Input Dialog instead of the Qt Input Dialog.

    Global Attributes

    __qtGetDouble
    __qtGetInt
    __qtGetItem
    __qtGetText

    Classes

    None

    Functions

    __kdeGetDouble Function to get a double value from the user.
    __kdeGetInt Function to get an integer value from the user.
    __kdeGetItem Function to get an item of a list from the user.
    __kdeGetText Function to get some text from the user.
    getDouble Function to get a double value from the user.
    getInt Function to get an integer value from the user.
    getItem Function to get an item of a list from the user.
    getText Function to get some text from the user.


    __kdeGetDouble

    __kdeGetDouble(parent, title, label, value = 0.0, minValue = -2147483647.0, maxValue = 2147483647.0, decimals = 1, f = Qt.WindowFlags(Qt.Widget))

    Function to get a double value from the user.

    parent
    parent widget of the dialog (QWidget)
    title
    window title of the dialog (QString)
    label
    text of the label for the line edit (QString)
    value
    initial value of the spin box (double)
    minValue
    minimal value of the spin box (double)
    maxValue
    maximal value of the spin box (double)
    decimals
    maximum number of decimals the value may have (integer)
    f
    window flags for the dialog (Qt.WindowFlags)
    Returns:
    tuple of (value, ok). value contains the double entered by the user, ok indicates a valid input. (double, boolean)


    __kdeGetInt

    __kdeGetInt(parent, title, label, value = 0, minValue = -2147483647, maxValue = 2147483647, step = 1, f = Qt.WindowFlags(Qt.Widget))

    Function to get an integer value from the user.

    parent
    parent widget of the dialog (QWidget)
    title
    window title of the dialog (QString)
    label
    text of the label for the line edit (QString)
    value
    initial value of the spin box (integer)
    minValue
    minimal value of the spin box (integer)
    maxValue
    maximal value of the spin box (integer)
    step
    step size of the spin box (integer)
    f
    window flags for the dialog (Qt.WindowFlags)
    Returns:
    tuple of (value, ok). value contains the integer entered by the user, ok indicates a valid input. (integer, boolean)


    __kdeGetItem

    __kdeGetItem(parent, title, label, slist, current = 0, editable = True, f = Qt.WindowFlags(Qt.Widget))

    Function to get an item of a list from the user.

    parent
    parent widget of the dialog (QWidget)
    title
    window title of the dialog (QString)
    label
    text of the label for the line edit (QString)
    slist
    list of strings to select from (QStringList)
    current
    number of item, that should be selected as a default (integer)
    editable
    indicates whether the user can input their own text (boolean)
    f
    window flags for the dialog (Qt.WindowFlags)
    Returns:
    tuple of (value, ok). value contains the double entered by the user, ok indicates a valid input. (QString, boolean)


    __kdeGetText

    __kdeGetText(parent, title, label, mode = QLineEdit.Normal, text = QString(), f = Qt.WindowFlags(Qt.Widget))

    Function to get some text from the user.

    parent
    parent widget of the dialog (QWidget)
    title
    window title of the dialog (QString)
    label
    text of the label for the line edit (QString)
    mode
    mode of the line edit (QLineEdit.EchoMode)
    text
    initial text of the line edit (QString)
    f
    window flags for the dialog (Qt.WindowFlags)
    Returns:
    tuple of (text, ok). text contains the text entered by the user, ok indicates a valid input. (QString, boolean)


    getDouble

    getDouble(parent, title, label, value = 0.0, minValue = -2147483647.0, maxValue = 2147483647.0, decimals = 1, f = Qt.WindowFlags(Qt.Widget))

    Function to get a double value from the user.

    parent
    parent widget of the dialog (QWidget)
    title
    window title of the dialog (QString)
    label
    text of the label for the line edit (QString)
    value
    initial value of the spin box (double)
    minValue
    minimal value of the spin box (double)
    maxValue
    maximal value of the spin box (double)
    decimals
    maximum number of decimals the value may have (integer)
    f
    window flags for the dialog (Qt.WindowFlags)
    Returns:
    tuple of (value, ok). value contains the double entered by the user, ok indicates a valid input. (double, boolean)


    getInt

    getInt(parent, title, label, value = 0, minValue = -2147483647, maxValue = 2147483647, step = 1, f = Qt.WindowFlags(Qt.Widget))

    Function to get an integer value from the user.

    parent
    parent widget of the dialog (QWidget)
    title
    window title of the dialog (QString)
    label
    text of the label for the line edit (QString)
    value
    initial value of the spin box (integer)
    minValue
    minimal value of the spin box (integer)
    maxValue
    maximal value of the spin box (integer)
    step
    step size of the spin box (integer)
    f
    window flags for the dialog (Qt.WindowFlags)
    Returns:
    tuple of (value, ok). value contains the integer entered by the user, ok indicates a valid input. (integer, boolean)


    getItem

    getItem(parent, title, label, slist, current = 0, editable = True, f = Qt.WindowFlags(Qt.Widget))

    Function to get an item of a list from the user.

    parent
    parent widget of the dialog (QWidget)
    title
    window title of the dialog (QString)
    label
    text of the label for the line edit (QString)
    slist
    list of strings to select from (QStringList)
    current
    number of item, that should be selected as a default (integer)
    editable
    indicates whether the user can input their own text (boolean)
    f
    window flags for the dialog (Qt.WindowFlags)
    Returns:
    tuple of (value, ok). value contains the double entered by the user, ok indicates a valid input. (QString, boolean)


    getText

    getText(parent, title, label, mode = QLineEdit.Normal, text = QString(), f = Qt.WindowFlags(Qt.Widget))

    Function to get some text from the user.

    parent
    parent widget of the dialog (QWidget)
    title
    window title of the dialog (QString)
    label
    text of the label for the line edit (QString)
    mode
    mode of the line edit (QLineEdit.EchoMode)
    text
    initial text of the line edit (QString)
    f
    window flags for the dialog (Qt.WindowFlags)
    Returns:
    tuple of (text, ok). text contains the text entered by the user, ok indicates a valid input. (QString, boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.PluginWizardQFileDialog.html0000644000175000001440000000013212261331350030551 xustar000000000000000030 mtime=1388688104.476228042 30 atime=1389081084.988724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.PluginWizardQFileDialog.html0000644000175000001440000001023112261331350030300 0ustar00detlevusers00000000000000 eric4.Plugins.PluginWizardQFileDialog

    eric4.Plugins.PluginWizardQFileDialog

    Module implementing the QFileDialog wizard plugin.

    Global Attributes

    author
    autoactivate
    className
    deactivateable
    error
    longDescription
    name
    packageName
    shortDescription
    version

    Classes

    FileDialogWizard Class implementing the QFileDialog wizard plugin.

    Functions

    None


    FileDialogWizard

    Class implementing the QFileDialog wizard plugin.

    Derived from

    QObject

    Class Attributes

    None

    Class Methods

    None

    Methods

    FileDialogWizard Constructor
    __callForm Private method to display a dialog and get the code.
    __handle Private method to handle the wizards action
    __initAction Private method to initialize the action.
    __initMenu Private method to add the actions to the right menu.
    activate Public method to activate this plugin.
    deactivate Public method to deactivate this plugin.

    Static Methods

    None

    FileDialogWizard (Constructor)

    FileDialogWizard(ui)

    Constructor

    ui
    reference to the user interface object (UI.UserInterface)

    FileDialogWizard.__callForm

    __callForm(editor)

    Private method to display a dialog and get the code.

    editor
    reference to the current editor
    Returns:
    the generated code (string)

    FileDialogWizard.__handle

    __handle()

    Private method to handle the wizards action

    FileDialogWizard.__initAction

    __initAction()

    Private method to initialize the action.

    FileDialogWizard.__initMenu

    __initMenu()

    Private method to add the actions to the right menu.

    FileDialogWizard.activate

    activate()

    Public method to activate this plugin.

    Returns:
    tuple of None and activation status (boolean)

    FileDialogWizard.deactivate

    deactivate()

    Public method to deactivate this plugin.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Debugger.WatchPointViewer.html0000644000175000001440000000013212261331350027436 xustar000000000000000030 mtime=1388688104.702228156 30 atime=1389081084.988724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Debugger.WatchPointViewer.html0000644000175000001440000003462612261331350027203 0ustar00detlevusers00000000000000 eric4.Debugger.WatchPointViewer

    eric4.Debugger.WatchPointViewer

    Module implementing the watch expression viewer widget.

    Global Attributes

    None

    Classes

    WatchPointViewer Class implementing the watch expression viewer widget.

    Functions

    None


    WatchPointViewer

    Class implementing the watch expression viewer widget.

    Watch expressions will be shown with all their details. They can be modified through the context menu of this widget.

    Derived from

    QTreeView

    Class Attributes

    None

    Class Methods

    None

    Methods

    WatchPointViewer Constructor
    __addWatchPoint Private slot to handle the add watch expression context menu entry.
    __clearSelection Private slot to clear the selection.
    __configure Private method to open the configuration dialog.
    __createPopupMenus Private method to generate the popup menus.
    __deleteAllWatchPoints Private slot to handle the delete all watch expressions context menu entry.
    __deleteSelectedWatchPoints Private slot to handle the delete selected watch expressions context menu entry.
    __deleteWatchPoint Private slot to handle the delete watch expression context menu entry.
    __disableAllWatchPoints Private slot to handle the disable all watch expressions context menu entry.
    __disableSelectedWatchPoints Private slot to handle the disable selected watch expressions context menu entry.
    __disableWatchPoint Private slot to handle the disable watch expression context menu entry.
    __doEditWatchPoint Private slot to edit a watch expression.
    __doubleClicked Private slot to handle the double clicked signal.
    __editWatchPoint Private slot to handle the edit watch expression context menu entry.
    __enableAllWatchPoints Private slot to handle the enable all watch expressions context menu entry.
    __enableSelectedWatchPoints Private slot to handle the enable selected watch expressions context menu entry.
    __enableWatchPoint Private slot to handle the enable watch expression context menu entry.
    __findDuplicates Private method to check, if an entry already exists.
    __fromSourceIndex Private slot to convert a source index to an index.
    __getSelectedItemsCount Private method to get the count of items selected.
    __layoutDisplay Private slot to perform a layout operation.
    __resizeColumns Private slot to resize the view when items get added, edited or deleted.
    __resort Private slot to resort the tree.
    __setRowSelected Private slot to select a complete row.
    __setWpEnabled Private method to set the enabled status of a watch expression.
    __showBackMenu Private slot to handle the aboutToShow signal of the background menu.
    __showContextMenu Private slot to show the context menu.
    __toSourceIndex Private slot to convert an index to a source index.
    setModel Public slot to set the watch expression model.

    Static Methods

    None

    WatchPointViewer (Constructor)

    WatchPointViewer(parent = None)

    Constructor

    parent
    the parent (QWidget)

    WatchPointViewer.__addWatchPoint

    __addWatchPoint()

    Private slot to handle the add watch expression context menu entry.

    WatchPointViewer.__clearSelection

    __clearSelection()

    Private slot to clear the selection.

    WatchPointViewer.__configure

    __configure()

    Private method to open the configuration dialog.

    WatchPointViewer.__createPopupMenus

    __createPopupMenus()

    Private method to generate the popup menus.

    WatchPointViewer.__deleteAllWatchPoints

    __deleteAllWatchPoints()

    Private slot to handle the delete all watch expressions context menu entry.

    WatchPointViewer.__deleteSelectedWatchPoints

    __deleteSelectedWatchPoints()

    Private slot to handle the delete selected watch expressions context menu entry.

    WatchPointViewer.__deleteWatchPoint

    __deleteWatchPoint()

    Private slot to handle the delete watch expression context menu entry.

    WatchPointViewer.__disableAllWatchPoints

    __disableAllWatchPoints()

    Private slot to handle the disable all watch expressions context menu entry.

    WatchPointViewer.__disableSelectedWatchPoints

    __disableSelectedWatchPoints()

    Private slot to handle the disable selected watch expressions context menu entry.

    WatchPointViewer.__disableWatchPoint

    __disableWatchPoint()

    Private slot to handle the disable watch expression context menu entry.

    WatchPointViewer.__doEditWatchPoint

    __doEditWatchPoint(index)

    Private slot to edit a watch expression.

    index
    index of watch expression to be edited (QModelIndex)

    WatchPointViewer.__doubleClicked

    __doubleClicked(index)

    Private slot to handle the double clicked signal.

    index
    index of the entry that was double clicked (QModelIndex)

    WatchPointViewer.__editWatchPoint

    __editWatchPoint()

    Private slot to handle the edit watch expression context menu entry.

    WatchPointViewer.__enableAllWatchPoints

    __enableAllWatchPoints()

    Private slot to handle the enable all watch expressions context menu entry.

    WatchPointViewer.__enableSelectedWatchPoints

    __enableSelectedWatchPoints()

    Private slot to handle the enable selected watch expressions context menu entry.

    WatchPointViewer.__enableWatchPoint

    __enableWatchPoint()

    Private slot to handle the enable watch expression context menu entry.

    WatchPointViewer.__findDuplicates

    __findDuplicates(cond, special, showMessage = False, index = QModelIndex())

    Private method to check, if an entry already exists.

    cond
    condition to check (string or QString)
    special
    special condition to check (string or QString)
    showMessage
    flag indicating a message should be shown, if a duplicate entry is found (boolean)
    index
    index that should not be considered duplicate (QModelIndex)
    Returns:
    flag indicating a duplicate entry (boolean)

    WatchPointViewer.__fromSourceIndex

    __fromSourceIndex(sindex)

    Private slot to convert a source index to an index.

    sindex
    source index to be converted (QModelIndex)

    WatchPointViewer.__getSelectedItemsCount

    __getSelectedItemsCount()

    Private method to get the count of items selected.

    Returns:
    count of items selected (integer)

    WatchPointViewer.__layoutDisplay

    __layoutDisplay()

    Private slot to perform a layout operation.

    WatchPointViewer.__resizeColumns

    __resizeColumns()

    Private slot to resize the view when items get added, edited or deleted.

    WatchPointViewer.__resort

    __resort()

    Private slot to resort the tree.

    WatchPointViewer.__setRowSelected

    __setRowSelected(index, selected = True)

    Private slot to select a complete row.

    index
    index determining the row to be selected (QModelIndex)
    selected
    flag indicating the action (bool)

    WatchPointViewer.__setWpEnabled

    __setWpEnabled(index, enabled)

    Private method to set the enabled status of a watch expression.

    index
    index of watch expression to be enabled/disabled (QModelIndex)
    enabled
    flag indicating the enabled status to be set (boolean)

    WatchPointViewer.__showBackMenu

    __showBackMenu()

    Private slot to handle the aboutToShow signal of the background menu.

    WatchPointViewer.__showContextMenu

    __showContextMenu(coord)

    Private slot to show the context menu.

    coord
    the position of the mouse pointer (QPoint)

    WatchPointViewer.__toSourceIndex

    __toSourceIndex(index)

    Private slot to convert an index to a source index.

    index
    index to be converted (QModelIndex)

    WatchPointViewer.setModel

    setModel(model)

    Public slot to set the watch expression model.

    reference
    to the watch expression model (WatchPointModel)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.Bookmarks.AddBookmarkDialog.0000644000175000001440000000013212261331353031125 xustar000000000000000030 mtime=1388688107.899229761 30 atime=1389081084.989724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.Bookmarks.AddBookmarkDialog.html0000644000175000001440000002257412261331353031556 0ustar00detlevusers00000000000000 eric4.Helpviewer.Bookmarks.AddBookmarkDialog

    eric4.Helpviewer.Bookmarks.AddBookmarkDialog

    Module implementing a dialog to add a bookmark or a bookmark folder.

    Global Attributes

    None

    Classes

    AddBookmarkDialog Class implementing a dialog to add a bookmark or a bookmark folder.
    AddBookmarkProxyModel Class implementing a proxy model used by the AddBookmarkDialog dialog.

    Functions

    None


    AddBookmarkDialog

    Class implementing a dialog to add a bookmark or a bookmark folder.

    Derived from

    QDialog, Ui_AddBookmarkDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    AddBookmarkDialog Constructor
    accept Public slot handling the acceptance of the dialog.
    addedNode Public method to get a reference to the added bookmark node.
    currentIndex Public method to get the current index.
    isFolder Public method to test, if the dialog is in "Add Folder" mode.
    setCurrentIndex Public method to set the current index.
    setFolder Public method to set the dialog to "Add Folder" mode.
    setTitle Public method to set the title of the new bookmark.
    setUrl Public slot to set the URL of the new bookmark.
    title Public method to get the title of the bookmark.
    url Public method to get the URL of the bookmark.

    Static Methods

    None

    AddBookmarkDialog (Constructor)

    AddBookmarkDialog(parent = None, bookmarksManager = None)

    Constructor

    parent
    reference to the parent widget (QWidget)
    bookmarksManager
    reference to the bookmarks manager object (BookmarksManager)

    AddBookmarkDialog.accept

    accept()

    Public slot handling the acceptance of the dialog.

    AddBookmarkDialog.addedNode

    addedNode()

    Public method to get a reference to the added bookmark node.

    Returns:
    reference to the added bookmark node (BookmarkNode)

    AddBookmarkDialog.currentIndex

    currentIndex()

    Public method to get the current index.

    Returns:
    current index (QModelIndex)

    AddBookmarkDialog.isFolder

    isFolder()

    Public method to test, if the dialog is in "Add Folder" mode.

    Returns:
    flag indicating "Add Folder" mode (boolean)

    AddBookmarkDialog.setCurrentIndex

    setCurrentIndex(idx)

    Public method to set the current index.

    idx
    current index to be set (QModelIndex)

    AddBookmarkDialog.setFolder

    setFolder(folder)

    Public method to set the dialog to "Add Folder" mode.

    folder
    flag indicating "Add Folder" mode (boolean)

    AddBookmarkDialog.setTitle

    setTitle(title)

    Public method to set the title of the new bookmark.

    title
    title of the bookmark (QString)

    AddBookmarkDialog.setUrl

    setUrl(url)

    Public slot to set the URL of the new bookmark.

    url
    URL of the bookmark (QString)

    AddBookmarkDialog.title

    title()

    Public method to get the title of the bookmark.

    Returns:
    title of the bookmark (QString)

    AddBookmarkDialog.url

    url()

    Public method to get the URL of the bookmark.

    Returns:
    URL of the bookmark (QString)


    AddBookmarkProxyModel

    Class implementing a proxy model used by the AddBookmarkDialog dialog.

    Derived from

    QSortFilterProxyModel

    Class Attributes

    None

    Class Methods

    None

    Methods

    AddBookmarkProxyModel Constructor
    columnCount Public method to return the number of columns.
    filterAcceptsColumn Protected method to determine, if the column is acceptable.
    filterAcceptsRow Protected method to determine, if the row is acceptable.
    hasChildren Public method to check, if a parent node has some children.

    Static Methods

    None

    AddBookmarkProxyModel (Constructor)

    AddBookmarkProxyModel(parent = None)

    Constructor

    parent
    reference to the parent object (QObject)

    AddBookmarkProxyModel.columnCount

    columnCount(parent)

    Public method to return the number of columns.

    parent
    index of the parent (QModelIndex)
    Returns:
    number of columns (integer)

    AddBookmarkProxyModel.filterAcceptsColumn

    filterAcceptsColumn(sourceColumn, sourceParent)

    Protected method to determine, if the column is acceptable.

    sourceColumn
    column number in the source model (integer)
    sourceParent
    index of the source item (QModelIndex)
    Returns:
    flag indicating acceptance (boolean)

    AddBookmarkProxyModel.filterAcceptsRow

    filterAcceptsRow(sourceRow, sourceParent)

    Protected method to determine, if the row is acceptable.

    sourceRow
    row number in the source model (integer)
    sourceParent
    index of the source item (QModelIndex)
    Returns:
    flag indicating acceptance (boolean)

    AddBookmarkProxyModel.hasChildren

    hasChildren(parent = QModelIndex())

    Public method to check, if a parent node has some children.

    parent
    index of the parent node (QModelIndex)
    Returns:
    flag indicating the presence of children (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.IconEditor.cursors.html0000644000175000001440000000013212261331354027320 xustar000000000000000030 mtime=1388688108.660230143 30 atime=1389081084.989724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.IconEditor.cursors.html0000644000175000001440000000133212261331354027051 0ustar00detlevusers00000000000000 eric4.IconEditor.cursors

    eric4.IconEditor.cursors

    Package defining some cursors.

    Modules

    cursors_rc
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsPySvn.SvnStatusDi0000644000175000001440000000013212261331353031246 xustar000000000000000030 mtime=1388688107.202229411 30 atime=1389081084.989724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsPySvn.SvnStatusDialog.html0000644000175000001440000004450212261331353032613 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsPySvn.SvnStatusDialog

    eric4.Plugins.VcsPlugins.vcsPySvn.SvnStatusDialog

    Module implementing a dialog to show the output of the svn status command process.

    Global Attributes

    None

    Classes

    SvnStatusDialog Class implementing a dialog to show the output of the svn status command process.

    Functions

    None


    SvnStatusDialog

    Class implementing a dialog to show the output of the svn status command process.

    Derived from

    QWidget, SvnDialogMixin, Ui_SvnStatusDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnStatusDialog Constructor
    __add Private slot to handle the Add context menu entry.
    __addToChangelist Private slot to add entries to a changelist.
    __breakLock Private slot to handle the Break Lock context menu entry.
    __commit Private slot to handle the Commit context menu entry.
    __committed Private slot called after the commit has finished.
    __diff Private slot to handle the Diff context menu entry.
    __finish Private slot called when the process finished or the user pressed the button.
    __generateItem Private method to generate a status item in the status list.
    __getChangelistItems Private method to retrieve all entries, that are members of a changelist.
    __getCommitableItems Private method to retrieve all entries the user wants to commit.
    __getLockActionItems Private method to retrieve all entries, that have a locked status.
    __getMissingItems Private method to retrieve all entries, that have a missing status.
    __getModifiedItems Private method to retrieve all entries, that have a modified status.
    __getNonChangelistItems Private method to retrieve all entries, that are not members of a changelist.
    __getUnversionedItems Private method to retrieve all entries, that have an unversioned status.
    __lock Private slot to handle the Lock context menu entry.
    __removeFromChangelist Private slot to remove entries from their changelists.
    __resizeColumns Private method to resize the list columns.
    __resort Private method to resort the tree.
    __restoreMissing Private slot to handle the Restore Missing context menu entry.
    __revert Private slot to handle the Revert context menu entry.
    __showContextMenu Protected slot to show the context menu of the status list.
    __showError Private slot to show an error message.
    __stealLock Private slot to handle the Break Lock context menu entry.
    __unlock Private slot to handle the Unlock context menu entry.
    __updateButtons Private method to update the VCS buttons status.
    __updateCommitButton Private method to update the Commit button status.
    on_addButton_clicked Private slot to handle the press of the Add button.
    on_buttonBox_clicked Private slot called by a button of the button box clicked.
    on_commitButton_clicked Private slot to handle the press of the Commit button.
    on_diffButton_clicked Private slot to handle the press of the Differences button.
    on_refreshButton_clicked Private slot to refresh the status display.
    on_restoreButton_clicked Private slot to handle the press of the Restore button.
    on_revertButton_clicked Private slot to handle the press of the Revert button.
    on_statusFilterCombo_activated Private slot to react to the selection of a status filter.
    on_statusList_itemChanged Private slot to act upon item changes.
    on_statusList_itemSelectionChanged Private slot to act upon changes of selected items.
    start Public slot to start the svn status command.

    Static Methods

    None

    SvnStatusDialog (Constructor)

    SvnStatusDialog(vcs, parent = None)

    Constructor

    vcs
    reference to the vcs object
    parent
    parent widget (QWidget)

    SvnStatusDialog.__add

    __add()

    Private slot to handle the Add context menu entry.

    SvnStatusDialog.__addToChangelist

    __addToChangelist()

    Private slot to add entries to a changelist.

    SvnStatusDialog.__breakLock

    __breakLock()

    Private slot to handle the Break Lock context menu entry.

    SvnStatusDialog.__commit

    __commit()

    Private slot to handle the Commit context menu entry.

    SvnStatusDialog.__committed

    __committed()

    Private slot called after the commit has finished.

    SvnStatusDialog.__diff

    __diff()

    Private slot to handle the Diff context menu entry.

    SvnStatusDialog.__finish

    __finish()

    Private slot called when the process finished or the user pressed the button.

    SvnStatusDialog.__generateItem

    __generateItem(changelist, status, propStatus, locked, history, switched, lockinfo, uptodate, revision, change, author, path)

    Private method to generate a status item in the status list.

    changelist
    name of the changelist (string)
    status
    text status (pysvn.wc_status_kind)
    propStatus
    property status (pysvn.wc_status_kind)
    locked
    locked flag (boolean)
    history
    history flag (boolean)
    switched
    switched flag (boolean)
    lockinfo
    lock indicator (string)
    uptodate
    up to date flag (boolean)
    revision
    revision (integer)
    change
    revision of last change (integer)
    author
    author of the last change (string or QString)
    path
    path of the file or directory (string or QString)

    SvnStatusDialog.__getChangelistItems

    __getChangelistItems()

    Private method to retrieve all entries, that are members of a changelist.

    Returns:
    list of all items belonging to a changelist

    SvnStatusDialog.__getCommitableItems

    __getCommitableItems()

    Private method to retrieve all entries the user wants to commit.

    Returns:
    list of all items, the user has checked

    SvnStatusDialog.__getLockActionItems

    __getLockActionItems(indicators)

    Private method to retrieve all entries, that have a locked status.

    Returns:
    list of all items with a locked status

    SvnStatusDialog.__getMissingItems

    __getMissingItems()

    Private method to retrieve all entries, that have a missing status.

    Returns:
    list of all items with a missing status

    SvnStatusDialog.__getModifiedItems

    __getModifiedItems()

    Private method to retrieve all entries, that have a modified status.

    Returns:
    list of all items with a modified status

    SvnStatusDialog.__getNonChangelistItems

    __getNonChangelistItems()

    Private method to retrieve all entries, that are not members of a changelist.

    Returns:
    list of all items not belonging to a changelist

    SvnStatusDialog.__getUnversionedItems

    __getUnversionedItems()

    Private method to retrieve all entries, that have an unversioned status.

    Returns:
    list of all items with an unversioned status

    SvnStatusDialog.__lock

    __lock()

    Private slot to handle the Lock context menu entry.

    SvnStatusDialog.__removeFromChangelist

    __removeFromChangelist()

    Private slot to remove entries from their changelists.

    SvnStatusDialog.__resizeColumns

    __resizeColumns()

    Private method to resize the list columns.

    SvnStatusDialog.__resort

    __resort()

    Private method to resort the tree.

    SvnStatusDialog.__restoreMissing

    __restoreMissing()

    Private slot to handle the Restore Missing context menu entry.

    SvnStatusDialog.__revert

    __revert()

    Private slot to handle the Revert context menu entry.

    SvnStatusDialog.__showContextMenu

    __showContextMenu(coord)

    Protected slot to show the context menu of the status list.

    coord
    the position of the mouse pointer (QPoint)

    SvnStatusDialog.__showError

    __showError(msg)

    Private slot to show an error message.

    msg
    error message to show (string or QString)

    SvnStatusDialog.__stealLock

    __stealLock()

    Private slot to handle the Break Lock context menu entry.

    SvnStatusDialog.__unlock

    __unlock()

    Private slot to handle the Unlock context menu entry.

    SvnStatusDialog.__updateButtons

    __updateButtons()

    Private method to update the VCS buttons status.

    SvnStatusDialog.__updateCommitButton

    __updateCommitButton()

    Private method to update the Commit button status.

    SvnStatusDialog.on_addButton_clicked

    on_addButton_clicked()

    Private slot to handle the press of the Add button.

    SvnStatusDialog.on_buttonBox_clicked

    on_buttonBox_clicked(button)

    Private slot called by a button of the button box clicked.

    button
    button that was clicked (QAbstractButton)

    SvnStatusDialog.on_commitButton_clicked

    on_commitButton_clicked()

    Private slot to handle the press of the Commit button.

    SvnStatusDialog.on_diffButton_clicked

    on_diffButton_clicked()

    Private slot to handle the press of the Differences button.

    SvnStatusDialog.on_refreshButton_clicked

    on_refreshButton_clicked()

    Private slot to refresh the status display.

    SvnStatusDialog.on_restoreButton_clicked

    on_restoreButton_clicked()

    Private slot to handle the press of the Restore button.

    SvnStatusDialog.on_revertButton_clicked

    on_revertButton_clicked()

    Private slot to handle the press of the Revert button.

    SvnStatusDialog.on_statusFilterCombo_activated

    on_statusFilterCombo_activated(txt)

    Private slot to react to the selection of a status filter.

    txt
    selected status filter (QString)

    SvnStatusDialog.on_statusList_itemChanged

    on_statusList_itemChanged(item, column)

    Private slot to act upon item changes.

    item
    reference to the changed item (QTreeWidgetItem)
    column
    index of column that changed (integer)

    SvnStatusDialog.on_statusList_itemSelectionChanged

    on_statusList_itemSelectionChanged()

    Private slot to act upon changes of selected items.

    SvnStatusDialog.start

    start(fn)

    Public slot to start the svn status command.

    fn
    filename(s)/directoryname(s) to show the status of (string or list of strings)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.CheckerPlugins.SyntaxChecker.Sy0000644000175000001440000000031612261331352031206 xustar0000000000000000116 path=eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheckerDialog.html 30 mtime=1388688106.632229125 30 atime=1389081084.989724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheckerDialo0000644000175000001440000001355012261331352034071 0ustar00detlevusers00000000000000 eric4.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheckerDialog

    eric4.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheckerDialog

    Module implementing a simple Python syntax checker.

    Global Attributes

    None

    Classes

    SyntaxCheckerDialog Class implementing a dialog to display the results of a syntax check run.

    Functions

    None


    SyntaxCheckerDialog

    Class implementing a dialog to display the results of a syntax check run.

    Derived from

    QDialog, Ui_SyntaxCheckerDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    SyntaxCheckerDialog Constructor
    __clearErrors Private method to clear all error markers of open editors.
    __createResultItem Private method to create an entry in the result list.
    __finish Private slot called when the syntax check finished or the user pressed the button.
    __resort Private method to resort the tree.
    on_buttonBox_clicked Private slot called by a button of the button box clicked.
    on_resultList_itemActivated Private slot to handle the activation of an item.
    on_showButton_clicked Private slot to handle the "Show" button press.
    start Public slot to start the syntax check.

    Static Methods

    None

    SyntaxCheckerDialog (Constructor)

    SyntaxCheckerDialog(parent = None)

    Constructor

    parent
    The parent widget. (QWidget)

    SyntaxCheckerDialog.__clearErrors

    __clearErrors()

    Private method to clear all error markers of open editors.

    SyntaxCheckerDialog.__createResultItem

    __createResultItem(file, line, index, error, sourcecode)

    Private method to create an entry in the result list.

    file
    file name of file (string or QString)
    line
    line number of faulty source (integer or string)
    index
    index number of fault (integer)
    error
    error text (string or QString)
    sourcecode
    faulty line of code (string)

    SyntaxCheckerDialog.__finish

    __finish()

    Private slot called when the syntax check finished or the user pressed the button.

    SyntaxCheckerDialog.__resort

    __resort()

    Private method to resort the tree.

    SyntaxCheckerDialog.on_buttonBox_clicked

    on_buttonBox_clicked(button)

    Private slot called by a button of the button box clicked.

    button
    button that was clicked (QAbstractButton)

    SyntaxCheckerDialog.on_resultList_itemActivated

    on_resultList_itemActivated(itm, col)

    Private slot to handle the activation of an item.

    itm
    reference to the activated item (QTreeWidgetItem)
    col
    column the item was activated in (integer)

    SyntaxCheckerDialog.on_showButton_clicked

    on_showButton_clicked()

    Private slot to handle the "Show" button press.

    SyntaxCheckerDialog.start

    start(fn, codestring = "")

    Public slot to start the syntax check.

    fn
    file or list of files or directory to be checked (string or list of strings)
    codestring
    string containing the code to be checked (string). If this is given, file must be a single file name.

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Graphics.UMLSceneSizeDialog.html0000644000175000001440000000013212261331350027576 xustar000000000000000030 mtime=1388688104.826228218 30 atime=1389081084.990724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Graphics.UMLSceneSizeDialog.html0000644000175000001440000000505512261331350027335 0ustar00detlevusers00000000000000 eric4.Graphics.UMLSceneSizeDialog

    eric4.Graphics.UMLSceneSizeDialog

    Module implementing a dialog to set the scene sizes.

    Global Attributes

    None

    Classes

    UMLSceneSizeDialog Class implementing a dialog to set the scene sizes.

    Functions

    None


    UMLSceneSizeDialog

    Class implementing a dialog to set the scene sizes.

    Derived from

    QDialog, Ui_UMLSceneSizeDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    UMLSceneSizeDialog Constructor
    getData Method to retrieve the entered data.

    Static Methods

    None

    UMLSceneSizeDialog (Constructor)

    UMLSceneSizeDialog(w, h, minW, minH, parent = None, name = None)

    Constructor

    w
    current width of scene (integer)
    h
    current height of scene (integer)
    minW
    minimum width allowed (integer)
    minH
    minimum height allowed (integer)
    parent
    parent widget of this dialog (QWidget)
    name
    name of this widget (QString or string)

    UMLSceneSizeDialog.getData

    getData()

    Method to retrieve the entered data.

    Returns:
    tuple giving the selected width and height (integer, integer)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ConfigurationPages.PrinterP0000644000175000001440000000013112261331353031301 xustar000000000000000029 mtime=1388688107.45822954 30 atime=1389081084.990724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.PrinterPage.html0000644000175000001440000000606012261331353032456 0ustar00detlevusers00000000000000 eric4.Preferences.ConfigurationPages.PrinterPage

    eric4.Preferences.ConfigurationPages.PrinterPage

    Module implementing the Printer configuration page.

    Global Attributes

    None

    Classes

    PrinterPage Class implementing the Printer configuration page.

    Functions

    create Module function to create the configuration page.


    PrinterPage

    Class implementing the Printer configuration page.

    Derived from

    ConfigurationPageBase, Ui_PrinterPage

    Class Attributes

    None

    Class Methods

    None

    Methods

    PrinterPage Constructor
    on_printheaderFontButton_clicked Private method used to select the font for the page header.
    polishPage Public slot to perform some polishing actions.
    save Public slot to save the Printer configuration.

    Static Methods

    None

    PrinterPage (Constructor)

    PrinterPage()

    Constructor

    PrinterPage.on_printheaderFontButton_clicked

    on_printheaderFontButton_clicked()

    Private method used to select the font for the page header.

    PrinterPage.polishPage

    polishPage()

    Public slot to perform some polishing actions.

    PrinterPage.save

    save()

    Public slot to save the Printer configuration.



    create

    create(dlg)

    Module function to create the configuration page.

    dlg
    reference to the configuration dialog

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Project.CreateDialogCodeDialog.html0000644000175000001440000000013212261331351030315 xustar000000000000000030 mtime=1388688105.787228701 30 atime=1389081084.990724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Project.CreateDialogCodeDialog.html0000644000175000001440000002034412261331351030052 0ustar00detlevusers00000000000000 eric4.Project.CreateDialogCodeDialog

    eric4.Project.CreateDialogCodeDialog

    Module implementing a dialog to generate code for a Qt4 dialog.

    Global Attributes

    pyqtSignatureRole
    pythonSignatureRole
    rubySignatureRole

    Classes

    CreateDialogCodeDialog Class implementing a dialog to generate code for a Qt4 dialog.

    Functions

    None


    CreateDialogCodeDialog

    Class implementing a dialog to generate code for a Qt4 dialog.

    Derived from

    QDialog, Ui_CreateDialogCodeDialog

    Class Attributes

    DialogClasses

    Class Methods

    None

    Methods

    CreateDialogCodeDialog Constructor
    __className Private method to get the class name of the dialog.
    __generateCode Private slot to generate the code as requested by the user.
    __generatePythonCode Private slot to generate Python code as requested by the user.
    __mapType Private method to map a type as reported by Qt's meta object to the correct Python type.
    __objectName Private method to get the object name of the dialog.
    __signatures Private slot to get the signatures.
    __updateSlotsModel Private slot to update the slots tree display.
    initError Public method to determine, if there was an initialzation error.
    on_buttonBox_clicked Private slot to handle the buttonBox clicked signal.
    on_classNameCombo_activated Private slot to handle the activated signal of the classname combo.
    on_clearFilterButton_clicked Private slot called by a click of the clear filter button.
    on_filterEdit_textChanged Private slot called, when thext of the filter edit has changed.
    on_newButton_clicked Private slot called to enter the data for a new dialog class.

    Static Methods

    None

    CreateDialogCodeDialog (Constructor)

    CreateDialogCodeDialog(formName, project, parent = None)

    Constructor

    formName
    name of the file containing the form (string or QString)
    project
    reference to the project object
    parent
    parent widget if the dialog (QWidget)

    CreateDialogCodeDialog.__className

    __className()

    Private method to get the class name of the dialog.

    Returns:
    class name (QSting)

    CreateDialogCodeDialog.__generateCode

    __generateCode()

    Private slot to generate the code as requested by the user.

    CreateDialogCodeDialog.__generatePythonCode

    __generatePythonCode()

    Private slot to generate Python code as requested by the user.

    CreateDialogCodeDialog.__mapType

    __mapType(type_)

    Private method to map a type as reported by Qt's meta object to the correct Python type.

    type_
    type as reported by Qt (QByteArray)
    Returns:
    mapped Python type (string)

    CreateDialogCodeDialog.__objectName

    __objectName()

    Private method to get the object name of the dialog.

    Returns:
    object name (QString)

    CreateDialogCodeDialog.__signatures

    __signatures()

    Private slot to get the signatures.

    Returns:
    list of signatures (list of strings)

    CreateDialogCodeDialog.__updateSlotsModel

    __updateSlotsModel()

    Private slot to update the slots tree display.

    CreateDialogCodeDialog.initError

    initError()

    Public method to determine, if there was an initialzation error.

    Returns:
    flag indicating an initialzation error (boolean)

    CreateDialogCodeDialog.on_buttonBox_clicked

    on_buttonBox_clicked(button)

    Private slot to handle the buttonBox clicked signal.

    button
    reference to the button that was clicked (QAbstractButton)

    CreateDialogCodeDialog.on_classNameCombo_activated

    on_classNameCombo_activated(index)

    Private slot to handle the activated signal of the classname combo.

    index
    index of the activated item (integer)

    CreateDialogCodeDialog.on_clearFilterButton_clicked

    on_clearFilterButton_clicked()

    Private slot called by a click of the clear filter button.

    CreateDialogCodeDialog.on_filterEdit_textChanged

    on_filterEdit_textChanged(text)

    Private slot called, when thext of the filter edit has changed.

    text
    changed text (QString)

    CreateDialogCodeDialog.on_newButton_clicked

    on_newButton_clicked()

    Private slot called to enter the data for a new dialog class.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.Plugins.VcsPlugins.vcsPySvn.Confi0000644000175000001440000000031112261331354031162 xustar0000000000000000111 path=eric4-4.5.18/eric/Documentation/Source/index-eric4.Plugins.VcsPlugins.vcsPySvn.ConfigurationPage.html 30 mtime=1388688108.657230142 30 atime=1389081084.990724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.Plugins.VcsPlugins.vcsPySvn.ConfigurationPage.htm0000644000175000001440000000160612261331354034055 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsPySvn.ConfigurationPage

    eric4.Plugins.VcsPlugins.vcsPySvn.ConfigurationPage

    Package implementing the the subversion configuration page.

    Modules

    SubversionPage Module implementing the Subversion configuration page.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsSubversion.SvnTag0000644000175000001440000000013212261331352031300 xustar000000000000000030 mtime=1388688106.883229251 30 atime=1389081084.990724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsSubversion.SvnTagDialog.html0000644000175000001440000000573312261331352033125 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsSubversion.SvnTagDialog

    eric4.Plugins.VcsPlugins.vcsSubversion.SvnTagDialog

    Module implementing a dialog to enter the data for a tagging operation.

    Global Attributes

    None

    Classes

    SvnTagDialog Class implementing a dialog to enter the data for a tagging operation.

    Functions

    None


    SvnTagDialog

    Class implementing a dialog to enter the data for a tagging operation.

    Derived from

    QDialog, Ui_SvnTagDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnTagDialog Constructor
    getParameters Public method to retrieve the tag data.
    on_tagCombo_editTextChanged Private method used to enable/disable the OK-button.

    Static Methods

    None

    SvnTagDialog (Constructor)

    SvnTagDialog(taglist, reposURL, standardLayout, parent = None)

    Constructor

    taglist
    list of previously entered tags (QStringList)
    reposURL
    repository path (QString or string) or None
    standardLayout
    flag indicating the layout of the repository (boolean)
    parent
    parent widget (QWidget)

    SvnTagDialog.getParameters

    getParameters()

    Public method to retrieve the tag data.

    Returns:
    tuple of QString and int (tag, tag operation)

    SvnTagDialog.on_tagCombo_editTextChanged

    on_tagCombo_editTextChanged(text)

    Private method used to enable/disable the OK-button.

    text
    ignored

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.E4Gui.E4ListView.html0000644000175000001440000000013212261331350025324 xustar000000000000000030 mtime=1388688104.360227984 30 atime=1389081084.990724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.E4Gui.E4ListView.html0000644000175000001440000000454712261331350025070 0ustar00detlevusers00000000000000 eric4.E4Gui.E4ListView

    eric4.E4Gui.E4ListView

    Module implementing specialized list views.

    Global Attributes

    None

    Classes

    E4ListView Class implementing a list view supporting removal of entries.

    Functions

    None


    E4ListView

    Class implementing a list view supporting removal of entries.

    Derived from

    QListView

    Class Attributes

    None

    Class Methods

    None

    Methods

    keyPressEvent Protected method implementing special key handling.
    removeAll Public method to clear the view.
    removeSelected Public method to remove the selected entries.

    Static Methods

    None

    E4ListView.keyPressEvent

    keyPressEvent(evt)

    Protected method implementing special key handling.

    evt
    reference to the event (QKeyEvent)

    E4ListView.removeAll

    removeAll()

    Public method to clear the view.

    E4ListView.removeSelected

    removeSelected()

    Public method to remove the selected entries.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.Plugins.CheckerPlugins.html0000644000175000001440000000013212261331354030110 xustar000000000000000030 mtime=1388688108.660230143 30 atime=1389081084.990724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.Plugins.CheckerPlugins.html0000644000175000001440000000170212261331354027642 0ustar00detlevusers00000000000000 eric4.Plugins.CheckerPlugins

    eric4.Plugins.CheckerPlugins

    Package containing the various core checker plugins.

    Packages

    SyntaxChecker Package containing the Syntax Checker plugin.
    Tabnanny Package containing the Tabnanny plugin.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ProgramsDialog.html0000644000175000001440000000013212261331350027623 xustar000000000000000030 mtime=1388688104.554228082 30 atime=1389081084.990724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ProgramsDialog.html0000644000175000001440000001173012261331350027357 0ustar00detlevusers00000000000000 eric4.Preferences.ProgramsDialog

    eric4.Preferences.ProgramsDialog

    Module implementing the Programs page.

    Global Attributes

    None

    Classes

    ProgramsDialog Class implementing the Programs page.

    Functions

    None


    ProgramsDialog

    Class implementing the Programs page.

    Derived from

    QDialog, Ui_ProgramsDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    ProgramsDialog Constructor
    __createEntry Private method to generate a program entry.
    __createProgramEntry Private method to generate a program entry.
    on_buttonBox_clicked Private slot called by a button of the button box clicked.
    on_programsSearchButton_clicked Private slot to search for all supported/required programs.
    show Public slot to show the dialog.

    Static Methods

    None

    ProgramsDialog (Constructor)

    ProgramsDialog(parent = None)

    Constructor

    parent
    The parent widget of this dialog. (QWidget)

    ProgramsDialog.__createEntry

    __createEntry(description, entryText, entryVersion)

    Private method to generate a program entry.

    description
    descriptive text (string or QString)
    entryText
    text to show (string or QString)
    entryVersion
    version string to show (string or QString).

    ProgramsDialog.__createProgramEntry

    __createProgramEntry(description, exe, versionCommand = "", versionStartsWith = "", versionPosition = 0, version = "", versionCleanup = None, versionRe = None)

    Private method to generate a program entry.

    description
    descriptive text (string or QString)
    exe
    name of the executable program (string)
    versionCommand
    command line switch to get the version info (string) if this is empty, the given version will be shown.
    versionStartsWith
    start of line identifying version info (string)
    versionPosition
    index of part containing the version info (integer)
    version=
    version string to show (string)
    versionCleanup=
    tuple of two integers giving string positions start and stop for the version string (tuple of integers)
    versionRe=
    regexp to determine the line identifying version info (string). Takes precedence over versionStartsWith.
    Returns:
    version string of detected or given version (string)

    ProgramsDialog.on_buttonBox_clicked

    on_buttonBox_clicked(button)

    Private slot called by a button of the button box clicked.

    button
    button that was clicked (QAbstractButton)

    ProgramsDialog.on_programsSearchButton_clicked

    on_programsSearchButton_clicked()

    Private slot to search for all supported/required programs.

    ProgramsDialog.show

    show()

    Public slot to show the dialog.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsPySvn.SvnOptionsD0000644000175000001440000000013212261331353031245 xustar000000000000000030 mtime=1388688107.063229341 30 atime=1389081084.991724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsPySvn.SvnOptionsDialog.html0000644000175000001440000000745612261331353032772 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsPySvn.SvnOptionsDialog

    eric4.Plugins.VcsPlugins.vcsPySvn.SvnOptionsDialog

    Module implementing a dialog to enter options used to start a project in the VCS.

    Global Attributes

    None

    Classes

    SvnOptionsDialog Class implementing a dialog to enter options used to start a project in the repository.

    Functions

    None


    SvnOptionsDialog

    Class implementing a dialog to enter options used to start a project in the repository.

    Derived from

    QDialog, Ui_SvnOptionsDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnOptionsDialog Constructor
    getData Public slot to retrieve the data entered into the dialog.
    on_protocolCombo_activated Private slot to switch the status of the directory selection button.
    on_vcsUrlButton_clicked Private slot to display a selection dialog.
    on_vcsUrlEdit_textChanged Private slot to handle changes of the URL.

    Static Methods

    None

    SvnOptionsDialog (Constructor)

    SvnOptionsDialog(vcs, project, parent = None)

    Constructor

    vcs
    reference to the version control object
    project
    reference to the project object
    parent
    parent widget (QWidget)

    SvnOptionsDialog.getData

    getData()

    Public slot to retrieve the data entered into the dialog.

    Returns:
    a dictionary containing the data entered

    SvnOptionsDialog.on_protocolCombo_activated

    on_protocolCombo_activated(protocol)

    Private slot to switch the status of the directory selection button.

    SvnOptionsDialog.on_vcsUrlButton_clicked

    on_vcsUrlButton_clicked()

    Private slot to display a selection dialog.

    SvnOptionsDialog.on_vcsUrlEdit_textChanged

    on_vcsUrlEdit_textChanged(txt)

    Private slot to handle changes of the URL.

    txt
    current text of the line edit (QString)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.IconEditor.IconEditorPalette.html0000644000175000001440000000013212261331351030066 xustar000000000000000030 mtime=1388688105.473228543 30 atime=1389081084.991724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.IconEditor.IconEditorPalette.html0000644000175000001440000000652012261331351027623 0ustar00detlevusers00000000000000 eric4.IconEditor.IconEditorPalette

    eric4.IconEditor.IconEditorPalette

    Module implementing a palette widget for the icon editor.

    Global Attributes

    None

    Classes

    IconEditorPalette Class implementing a palette widget for the icon editor.

    Functions

    None


    IconEditorPalette

    Class implementing a palette widget for the icon editor.

    Signals

    colorSelected(QColor)
    emitted after a new color has been selected

    Derived from

    QWidget

    Class Attributes

    None

    Class Methods

    None

    Methods

    IconEditorPalette Constructor
    __alphaChanged Private slot to track changes of the alpha channel.
    __selectColor Private slot to select a new drawing color.
    colorChanged Public slot to update the color preview.
    previewChanged Public slot to update the preview.

    Static Methods

    None

    IconEditorPalette (Constructor)

    IconEditorPalette(parent = None)

    Constructor

    parent
    reference to the parent widget (QWidget)

    IconEditorPalette.__alphaChanged

    __alphaChanged(val)

    Private slot to track changes of the alpha channel.

    val
    value of the alpha channel

    IconEditorPalette.__selectColor

    __selectColor()

    Private slot to select a new drawing color.

    IconEditorPalette.colorChanged

    colorChanged(color)

    Public slot to update the color preview.

    IconEditorPalette.previewChanged

    previewChanged(pixmap)

    Public slot to update the preview.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.DocumentationPlugins.Ericapi.Er0000644000175000001440000000031612261331352031227 xustar0000000000000000116 path=eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.DocumentationPlugins.Ericapi.EricapiConfigDialog.html 30 mtime=1388688106.675229147 30 atime=1389081084.991724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.DocumentationPlugins.Ericapi.EricapiConfigDialo0000644000175000001440000001447612261331352034076 0ustar00detlevusers00000000000000 eric4.Plugins.DocumentationPlugins.Ericapi.EricapiConfigDialog

    eric4.Plugins.DocumentationPlugins.Ericapi.EricapiConfigDialog

    Module implementing a dialog to enter the parameters for eric4_api.

    Global Attributes

    None

    Classes

    EricapiConfigDialog Class implementing a dialog to enter the parameters for eric4_api.

    Functions

    None


    EricapiConfigDialog

    Class implementing a dialog to enter the parameters for eric4_api.

    Derived from

    QDialog, Ui_EricapiConfigDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    EricapiConfigDialog Constructor
    __initializeDefaults Private method to set the default values.
    accept Protected slot called by the Ok button.
    generateParameters Public method that generates the commandline parameters.
    on_addButton_clicked Private slot to add the directory displayed to the listview.
    on_deleteButton_clicked Private slot to delete the currently selected directory of the listbox.
    on_ignoreDirButton_clicked Private slot to select a directory to be ignored.
    on_outputFileButton_clicked Private slot to select the output file.
    on_outputFileEdit_textChanged Private slot to enable/disable the "OK" button.

    Static Methods

    None

    EricapiConfigDialog (Constructor)

    EricapiConfigDialog(project, parms = None, parent = None)

    Constructor

    project
    reference to the project object (Project.Project)
    parms
    parameters to set in the dialog
    parent
    parent widget of this dialog

    EricapiConfigDialog.__initializeDefaults

    __initializeDefaults()

    Private method to set the default values.

    These are needed later on to generate the commandline parameters.

    EricapiConfigDialog.accept

    accept()

    Protected slot called by the Ok button.

    It saves the values in the parameters dictionary.

    EricapiConfigDialog.generateParameters

    generateParameters()

    Public method that generates the commandline parameters.

    It generates a QStringList to be used to set the QProcess arguments for the ericapi call and a list containing the non default parameters. The second list can be passed back upon object generation to overwrite the default settings.

    Returns:
    a tuple of the commandline parameters and non default parameters (QStringList, dictionary)

    EricapiConfigDialog.on_addButton_clicked

    on_addButton_clicked()

    Private slot to add the directory displayed to the listview.

    The directory in the ignore directories line edit is moved to the listbox above and the edit is cleared.

    EricapiConfigDialog.on_deleteButton_clicked

    on_deleteButton_clicked()

    Private slot to delete the currently selected directory of the listbox.

    EricapiConfigDialog.on_ignoreDirButton_clicked

    on_ignoreDirButton_clicked()

    Private slot to select a directory to be ignored.

    It displays a directory selection dialog to select a directory to be ignored.

    EricapiConfigDialog.on_outputFileButton_clicked

    on_outputFileButton_clicked()

    Private slot to select the output file.

    It displays a file selection dialog to select the file the api is written to.

    EricapiConfigDialog.on_outputFileEdit_textChanged

    on_outputFileEdit_textChanged(filename)

    Private slot to enable/disable the "OK" button.

    filename
    name of the file (QString)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.E4Network.E4NetworkMonitor.html0000644000175000001440000000013212261331351027465 xustar000000000000000030 mtime=1388688105.512228563 30 atime=1389081084.991724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.E4Network.E4NetworkMonitor.html0000644000175000001440000002461212261331351027224 0ustar00detlevusers00000000000000 eric4.E4Network.E4NetworkMonitor

    eric4.E4Network.E4NetworkMonitor

    Module implementing a network monitor dialog.

    Global Attributes

    None

    Classes

    E4NetworkMonitor Class implementing a network monitor dialog.
    E4NetworkRequest Class for storing all data related to a specific request.
    E4RequestModel Class implementing a model storing request objects.

    Functions

    None


    E4NetworkMonitor

    Class implementing a network monitor dialog.

    Derived from

    QDialog, Ui_E4NetworkMonitor

    Class Attributes

    _monitor

    Class Methods

    closeMonitor Class method to close the monitor dialog.
    instance Class method to get a reference to our singleton.

    Methods

    E4NetworkMonitor Constructor
    __currentChanged Private slot to handle a change of the current index.
    __showHeaderDetails Private slot to show a dialog with the header details.
    closeEvent Protected method called upon closing the dialog.
    reject Public slot to close the dialog with a Reject status.

    Static Methods

    None

    E4NetworkMonitor.closeMonitor (class method)

    closeMonitor()

    Class method to close the monitor dialog.

    E4NetworkMonitor.instance (class method)

    instance(networkAccessManager)

    Class method to get a reference to our singleton.

    networkAccessManager
    reference to the network access manager (QNetworkAccessManager)

    E4NetworkMonitor (Constructor)

    E4NetworkMonitor(networkAccessManager, parent = None)

    Constructor

    networkAccessManager
    reference to the network access manager (QNetworkAccessManager)
    parent
    reference to the parent widget (QWidget)

    E4NetworkMonitor.__currentChanged

    __currentChanged(current, previous)

    Private slot to handle a change of the current index.

    current
    new current index (QModelIndex)
    previous
    old current index (QModelIndex)

    E4NetworkMonitor.__showHeaderDetails

    __showHeaderDetails(index)

    Private slot to show a dialog with the header details.

    index
    index of the entry to show (QModelIndex)

    E4NetworkMonitor.closeEvent

    closeEvent(evt)

    Protected method called upon closing the dialog.

    evt
    reference to the close event object (QCloseEvent)

    E4NetworkMonitor.reject

    reject()

    Public slot to close the dialog with a Reject status.



    E4NetworkRequest

    Class for storing all data related to a specific request.

    Derived from

    object

    Class Attributes

    None

    Class Methods

    None

    Methods

    E4NetworkRequest Constructor

    Static Methods

    None

    E4NetworkRequest (Constructor)

    E4NetworkRequest()

    Constructor



    E4RequestModel

    Class implementing a model storing request objects.

    Derived from

    QAbstractTableModel

    Class Attributes

    None

    Class Methods

    None

    Methods

    E4RequestModel Constructor
    __addReply Private slot to add the reply data to the model.
    __addRequest Private method to add a request object to the model.
    __requestCreated Private slot handling the creation of a network request.
    columnCount Public method to get the number of columns of the model.
    data Public method to get data from the model.
    headerData Public method to get header data from the model.
    removeRows Public method to remove entries from the model.
    rowCount Public method to get the number of rows of the model.

    Static Methods

    None

    E4RequestModel (Constructor)

    E4RequestModel(networkAccessManager, parent = None)

    Constructor

    networkAccessManager
    reference to the network access manager (QNetworkAccessManager)
    parent
    reference to the parent object (QObject)

    E4RequestModel.__addReply

    __addReply()

    Private slot to add the reply data to the model.

    E4RequestModel.__addRequest

    __addRequest(req)

    Private method to add a request object to the model.

    req
    reference to the request object (E4NetworkRequest)

    E4RequestModel.__requestCreated

    __requestCreated(operation, request, reply)

    Private slot handling the creation of a network request.

    operation
    network operation (QNetworkAccessManager.Operation)
    request
    reference to the request object (QNetworkRequest)
    reply
    reference to the reply object(QNetworkReply)

    E4RequestModel.columnCount

    columnCount(parent)

    Public method to get the number of columns of the model.

    parent
    parent index (QModelIndex)
    Returns:
    number of columns (integer)

    E4RequestModel.data

    data(index, role)

    Public method to get data from the model.

    index
    index to get data for (QModelIndex)
    role
    role of the data to retrieve (integer)
    Returns:
    requested data

    E4RequestModel.headerData

    headerData(section, orientation, role)

    Public method to get header data from the model.

    section
    section number (integer)
    orientation
    orientation (Qt.Orientation)
    role
    role of the data to retrieve (integer)
    Returns:
    requested data

    E4RequestModel.removeRows

    removeRows(row, count, parent)

    Public method to remove entries from the model.

    row
    start row (integer)
    count
    number of rows to remove (integer)
    parent
    parent index (QModelIndex)
    Returns:
    flag indicating success (boolean)

    E4RequestModel.rowCount

    rowCount(parent)

    Public method to get the number of rows of the model.

    parent
    parent index (QModelIndex)
    Returns:
    number of columns (integer)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.PluginVmMdiArea.html0000644000175000001440000000013212261331350027055 xustar000000000000000030 mtime=1388688104.466228037 30 atime=1389081084.991724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.PluginVmMdiArea.html0000644000175000001440000000624112261331350026612 0ustar00detlevusers00000000000000 eric4.Plugins.PluginVmMdiArea

    eric4.Plugins.PluginVmMdiArea

    Module implementing the mdi area view manager plugin.

    Global Attributes

    author
    autoactivate
    className
    deactivateable
    displayString
    error
    longDescription
    name
    packageName
    pluginType
    pluginTypename
    shortDescription
    version

    Classes

    VmMdiAreaPlugin Class implementing the Workspace view manager plugin.

    Functions

    previewPix Module function to return a preview pixmap.


    VmMdiAreaPlugin

    Class implementing the Workspace view manager plugin.

    Derived from

    object

    Class Attributes

    None

    Class Methods

    None

    Methods

    VmMdiAreaPlugin Constructor
    activate Public method to activate this plugin.
    deactivate Public method to deactivate this plugin.

    Static Methods

    None

    VmMdiAreaPlugin (Constructor)

    VmMdiAreaPlugin(ui)

    Constructor

    ui
    reference to the user interface object (UI.UserInterface)

    VmMdiAreaPlugin.activate

    activate()

    Public method to activate this plugin.

    Returns:
    tuple of reference to instantiated viewmanager and activation status (boolean)

    VmMdiAreaPlugin.deactivate

    deactivate()

    Public method to deactivate this plugin.



    previewPix

    previewPix()

    Module function to return a preview pixmap.

    Returns:
    preview pixmap (QPixmap)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ConfigurationPages.PythonPa0000644000175000001440000000013212261331353031301 xustar000000000000000030 mtime=1388688107.525229573 30 atime=1389081084.991724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.PythonPage.html0000644000175000001440000000441312261331353032314 0ustar00detlevusers00000000000000 eric4.Preferences.ConfigurationPages.PythonPage

    eric4.Preferences.ConfigurationPages.PythonPage

    Module implementing the Python configuration page.

    Global Attributes

    None

    Classes

    PythonPage Class implementing the Python configuration page.

    Functions

    create Module function to create the configuration page.


    PythonPage

    Class implementing the Python configuration page.

    Derived from

    ConfigurationPageBase, Ui_PythonPage

    Class Attributes

    None

    Class Methods

    None

    Methods

    PythonPage Constructor
    save Public slot to save the Python configuration.

    Static Methods

    None

    PythonPage (Constructor)

    PythonPage()

    Constructor

    PythonPage.save

    save()

    Public slot to save the Python configuration.



    create

    create(dlg)

    Module function to create the configuration page.

    dlg
    reference to the configuration dialog

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.eric4_compare.html0000644000175000001440000000013212261331350025165 xustar000000000000000030 mtime=1388688104.220227914 30 atime=1389081084.992724362 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.eric4_compare.html0000644000175000001440000000331512261331350024721 0ustar00detlevusers00000000000000 eric4.eric4_compare

    eric4.eric4_compare

    Eric4 Compare

    This is the main Python script that performs the necessary initialization of the Compare module and starts the Qt event loop. This is a standalone version of the integrated Compare module.

    Global Attributes

    None

    Classes

    None

    Functions

    createMainWidget Function to create the main widget.
    main Main entry point into the application.


    createMainWidget

    createMainWidget(argv)

    Function to create the main widget.

    argv
    list of commandline parameters (list of strings)
    Returns:
    reference to the main widget (QWidget)


    main

    main()

    Main entry point into the application.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.HelpWebSearchWidget.html0000644000175000001440000000013212261331351030403 xustar000000000000000030 mtime=1388688105.299228456 30 atime=1389081084.992724362 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.HelpWebSearchWidget.html0000644000175000001440000002564212261331351030146 0ustar00detlevusers00000000000000 eric4.Helpviewer.HelpWebSearchWidget

    eric4.Helpviewer.HelpWebSearchWidget

    Module implementing a web search widget for the web browser.

    Global Attributes

    None

    Classes

    HelpWebSearchEdit Class implementing the web search line edit.
    HelpWebSearchWidget Class implementing a web search widget for the web browser.

    Functions

    None


    HelpWebSearchEdit

    Class implementing the web search line edit.

    Derived from

    E4LineEdit

    Class Attributes

    None

    Class Methods

    None

    Methods

    HelpWebSearchEdit Constructor
    mousePressEvent Protected method called by a mouse press event.

    Static Methods

    None

    HelpWebSearchEdit (Constructor)

    HelpWebSearchEdit(mainWindow, parent=None)

    Constructor

    mainWindow
    reference to the main window (HelpWindow)
    parent
    reference to the parent widget (QWidget)

    HelpWebSearchEdit.mousePressEvent

    mousePressEvent(evt)

    Protected method called by a mouse press event.

    evt
    reference to the mouse event (QMouseEvent)


    HelpWebSearchWidget

    Class implementing a web search widget for the web browser.

    Signals

    search(url)
    emitted when the search should be done

    Derived from

    QWidget

    Class Attributes

    None

    Class Methods

    None

    Methods

    HelpWebSearchWidget Constructor
    __addEngineFromUrl Private slot to add a search engine given its URL.
    __changeCurrentEngine Private slot to handle the selection of a search engine.
    __completerActivated Private slot handling the selection of an entry from the completer.
    __completerHighlighted Private slot handling the highlighting of an entry of the completer.
    __currentEngineChanged Private slot to track a change of the current search engine.
    __engineImageChanged Private slot to handle a change of the current search engine icon.
    __getSuggestions Private slot to get search suggestions from the configured search engine.
    __loadSearches Public method to load the recently performed web searches.
    __newSuggestions Private slot to receive a new list of suggestions.
    __searchButtonClicked Private slot to show the search menu via the search button.
    __searchNow Private slot to perform the web search.
    __setupCompleterMenu Private method to create the completer menu.
    __showEnginesMenu Private slot to handle the display of the engines menu.
    __textEdited Private slot to handle changes of the search text.
    clear Public method to clear all private data.
    openSearchManager Public method to get a reference to the opensearch manager object.
    preferencesChanged Public method to handle the change of preferences.
    saveSearches Public method to save the recently performed web searches.

    Static Methods

    None

    HelpWebSearchWidget (Constructor)

    HelpWebSearchWidget(parent = None)

    Constructor

    parent
    reference to the parent widget (QWidget)

    HelpWebSearchWidget.__addEngineFromUrl

    __addEngineFromUrl()

    Private slot to add a search engine given its URL.

    HelpWebSearchWidget.__changeCurrentEngine

    __changeCurrentEngine()

    Private slot to handle the selection of a search engine.

    HelpWebSearchWidget.__completerActivated

    __completerActivated(index)

    Private slot handling the selection of an entry from the completer.

    index
    index of the item (QModelIndex)

    HelpWebSearchWidget.__completerHighlighted

    __completerHighlighted(index)

    Private slot handling the highlighting of an entry of the completer.

    index
    index of the item (QModelIndex)

    HelpWebSearchWidget.__currentEngineChanged

    __currentEngineChanged()

    Private slot to track a change of the current search engine.

    HelpWebSearchWidget.__engineImageChanged

    __engineImageChanged()

    Private slot to handle a change of the current search engine icon.

    HelpWebSearchWidget.__getSuggestions

    __getSuggestions()

    Private slot to get search suggestions from the configured search engine.

    HelpWebSearchWidget.__loadSearches

    __loadSearches()

    Public method to load the recently performed web searches.

    HelpWebSearchWidget.__newSuggestions

    __newSuggestions(suggestions)

    Private slot to receive a new list of suggestions.

    suggestions
    list of suggestions (QStringList)

    HelpWebSearchWidget.__searchButtonClicked

    __searchButtonClicked()

    Private slot to show the search menu via the search button.

    HelpWebSearchWidget.__searchNow

    __searchNow()

    Private slot to perform the web search.

    HelpWebSearchWidget.__setupCompleterMenu

    __setupCompleterMenu()

    Private method to create the completer menu.

    HelpWebSearchWidget.__showEnginesMenu

    __showEnginesMenu()

    Private slot to handle the display of the engines menu.

    HelpWebSearchWidget.__textEdited

    __textEdited(txt)

    Private slot to handle changes of the search text.

    txt
    search text (QString)

    HelpWebSearchWidget.clear

    clear()

    Public method to clear all private data.

    HelpWebSearchWidget.openSearchManager

    openSearchManager()

    Public method to get a reference to the opensearch manager object.

    Returns:
    reference to the opensearch manager object (OpenSearchManager)

    HelpWebSearchWidget.preferencesChanged

    preferencesChanged()

    Public method to handle the change of preferences.

    HelpWebSearchWidget.saveSearches

    saveSearches()

    Public method to save the recently performed web searches.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.E4Gui.E4Action.html0000644000175000001440000000013212261331350024773 xustar000000000000000030 mtime=1388688104.458228033 30 atime=1389081084.992724362 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.E4Gui.E4Action.html0000644000175000001440000002060212261331350024525 0ustar00detlevusers00000000000000 eric4.E4Gui.E4Action

    eric4.E4Gui.E4Action

    Module implementing an Action class extending QAction.

    This extension is necessary in order to support alternate keyboard shortcuts.

    Global Attributes

    None

    Classes

    ArgumentsError Class implementing an exception, which is raised, if the wrong number of arguments are given.
    E4Action Class implementing an Action class extending QAction.

    Functions

    addActions Module function to add a list of actions to a widget.
    createActionGroup Module function to create an action group.


    ArgumentsError

    Class implementing an exception, which is raised, if the wrong number of arguments are given.

    Derived from

    RuntimeError

    Class Attributes

    None

    Class Methods

    None

    Methods

    ArgumentsError Constructor
    __repr__ Private method returning a representation of the exception.
    __str__ Private method returning a string representation of the exception.

    Static Methods

    None

    ArgumentsError (Constructor)

    ArgumentsError(error)

    Constructor

    ArgumentsError.__repr__

    __repr__()

    Private method returning a representation of the exception.

    Returns:
    string representing the error message

    ArgumentsError.__str__

    __str__()

    Private method returning a string representation of the exception.

    Returns:
    string representing the error message


    E4Action

    Class implementing an Action class extending QAction.

    Derived from

    QAction

    Class Attributes

    None

    Class Methods

    None

    Methods

    E4Action Constructor
    __ammendToolTip Private slot to add the primary keyboard accelerator to the tooltip.
    alternateShortcut Public method to retrieve the alternative keyboard shortcut.
    setAlternateShortcut Public slot to set the alternative keyboard shortcut.
    setIconText Public slot to set the icon text of the action.
    setShortcut Public slot to set the keyboard shortcut.
    setShortcuts Public slot to set the list of keyboard shortcuts.

    Static Methods

    None

    E4Action (Constructor)

    E4Action(*args)

    Constructor

    args
    argument list of the constructor. This list is one of
    • text (string or QString), icon (QIcon), menu text (string or QString), accelarator (QKeySequence), alternative accelerator (QKeySequence), parent (QObject), name (string or QString), toggle (boolean)
    • text (string or QString), icon (QIcon), menu text (string or QString), accelarator (QKeySequence), alternative accelerator (QKeySequence), parent (QObject), name (string or QString)
    • text (string or QString), menu text (string or QString), accelarator (QKeySequence), alternative accelerator (QKeySequence), parent (QObject), name (string or QString), toggle (boolean)
    • text (string or QString), menu text (string or QString), accelarator (QKeySequence), alternative accelerator (QKeySequence), parent (QObject), name (string or QString)

    E4Action.__ammendToolTip

    __ammendToolTip()

    Private slot to add the primary keyboard accelerator to the tooltip.

    E4Action.alternateShortcut

    alternateShortcut()

    Public method to retrieve the alternative keyboard shortcut.

    Returns:
    the alternative accelerator (QKeySequence)

    E4Action.setAlternateShortcut

    setAlternateShortcut(shortcut, removeEmpty=False)

    Public slot to set the alternative keyboard shortcut.

    shortcut
    the alternative accelerator (QKeySequence)
    removeEmpty
    flag indicating to remove the alternate shortcut, if it is empty (boolean)

    E4Action.setIconText

    setIconText(text)

    Public slot to set the icon text of the action.

    text
    new tool tip (string or QString)

    E4Action.setShortcut

    setShortcut(shortcut)

    Public slot to set the keyboard shortcut.

    shortcut
    the accelerator (QKeySequence)

    E4Action.setShortcuts

    setShortcuts(shortcuts)

    Public slot to set the list of keyboard shortcuts.

    shortcuts
    list of keyboard accelerators (list of QKeySequence) or key for a platform dependent list of accelerators (QKeySequence.StandardKey)


    addActions

    addActions(target, actions)

    Module function to add a list of actions to a widget.

    target
    reference to the target widget (QWidget)
    actions
    list of actions to be added to the target. A None indicates a separator (list of QActions)


    createActionGroup

    createActionGroup(parent, name = None, exclusive = False)

    Module function to create an action group.

    parent
    parent object of the action group (QObject)
    name
    name of the action group object (string or QString)
    exclusive
    flag indicating an exclusive action group (boolean)
    Returns:
    reference to the created action group (QActionGroup)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.eric4_configure.html0000644000175000001440000000013212261331350025520 xustar000000000000000030 mtime=1388688104.217227912 30 atime=1389081084.992724362 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.eric4_configure.html0000644000175000001440000000314112261331350025251 0ustar00detlevusers00000000000000 eric4.eric4_configure

    eric4.eric4_configure

    Eric4 Configure

    This is the main Python script to configure the eric4 IDE from the outside.

    Global Attributes

    None

    Classes

    None

    Functions

    createMainWidget Function to create the main widget.
    main Main entry point into the application.


    createMainWidget

    createMainWidget(argv)

    Function to create the main widget.

    argv
    list of commandline parameters (list of strings)
    Returns:
    reference to the main widget (QWidget)


    main

    main()

    Main entry point into the application.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.Plugins.DocumentationPlugins.Eric0000644000175000001440000000013212261331354031273 xustar000000000000000030 mtime=1388688108.657230142 30 atime=1389081084.992724362 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.Plugins.DocumentationPlugins.Ericapi.html0000644000175000001440000000206312261331354032463 0ustar00detlevusers00000000000000 eric4.Plugins.DocumentationPlugins.Ericapi

    eric4.Plugins.DocumentationPlugins.Ericapi

    Package containing the Ericapi plugin.

    Modules

    EricapiConfigDialog Module implementing a dialog to enter the parameters for eric4_api.
    EricapiExecDialog Module implementing a dialog to show the output of the ericapi process.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsSubversion.SvnSta0000644000175000001440000000013212261331352031314 xustar000000000000000030 mtime=1388688106.944229282 30 atime=1389081084.992724362 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsSubversion.SvnStatusDialog.html0000644000175000001440000005274712261331352033704 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsSubversion.SvnStatusDialog

    eric4.Plugins.VcsPlugins.vcsSubversion.SvnStatusDialog

    Module implementing a dialog to show the output of the svn status command process.

    Global Attributes

    None

    Classes

    SvnStatusDialog Class implementing a dialog to show the output of the svn status command process.

    Functions

    None


    SvnStatusDialog

    Class implementing a dialog to show the output of the svn status command process.

    Derived from

    QWidget, Ui_SvnStatusDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnStatusDialog Constructor
    __add Private slot to handle the Add context menu entry.
    __addToChangelist Private slot to add entries to a changelist.
    __breakLock Private slot to handle the Break Lock context menu entry.
    __commit Private slot to handle the Commit context menu entry.
    __committed Private slot called after the commit has finished.
    __diff Private slot to handle the Diff context menu entry.
    __finish Private slot called when the process finished or the user pressed the button.
    __generateItem Private method to generate a status item in the status list.
    __getChangelistItems Private method to retrieve all entries, that are members of a changelist.
    __getCommitableItems Private method to retrieve all entries the user wants to commit.
    __getLockActionItems Private method to retrieve all emtries, that have a locked status.
    __getMissingItems Private method to retrieve all entries, that have a missing status.
    __getModifiedItems Private method to retrieve all entries, that have a modified status.
    __getNonChangelistItems Private method to retrieve all entries, that are not members of a changelist.
    __getUnversionedItems Private method to retrieve all entries, that have an unversioned status.
    __lock Private slot to handle the Lock context menu entry.
    __procFinished Private slot connected to the finished signal.
    __readStderr Private slot to handle the readyReadStandardError signal.
    __readStdout Private slot to handle the readyReadStandardOutput signal.
    __removeFromChangelist Private slot to remove entries from their changelists.
    __resizeColumns Private method to resize the list columns.
    __resort Private method to resort the tree.
    __restoreMissing Private slot to handle the Restore Missing context menu entry.
    __revert Private slot to handle the Revert context menu entry.
    __showContextMenu Protected slot to show the context menu of the status list.
    __stealLock Private slot to handle the Break Lock context menu entry.
    __unlock Private slot to handle the Unlock context menu entry.
    __updateButtons Private method to update the VCS buttons status.
    __updateCommitButton Private method to update the Commit button status.
    closeEvent Private slot implementing a close event handler.
    keyPressEvent Protected slot to handle a key press event.
    on_addButton_clicked Private slot to handle the press of the Add button.
    on_buttonBox_clicked Private slot called by a button of the button box clicked.
    on_commitButton_clicked Private slot to handle the press of the Commit button.
    on_diffButton_clicked Private slot to handle the press of the Differences button.
    on_input_returnPressed Private slot to handle the press of the return key in the input field.
    on_passwordCheckBox_toggled Private slot to handle the password checkbox toggled.
    on_refreshButton_clicked Private slot to refresh the status display.
    on_restoreButton_clicked Private slot to handle the press of the Restore button.
    on_revertButton_clicked Private slot to handle the press of the Revert button.
    on_sendButton_clicked Private slot to send the input to the subversion process.
    on_statusFilterCombo_activated Private slot to react to the selection of a status filter.
    on_statusList_itemChanged Private slot to act upon item changes.
    on_statusList_itemSelectionChanged Private slot to act upon changes of selected items.
    start Public slot to start the svn status command.

    Static Methods

    None

    SvnStatusDialog (Constructor)

    SvnStatusDialog(vcs, parent = None)

    Constructor

    vcs
    reference to the vcs object
    parent
    parent widget (QWidget)

    SvnStatusDialog.__add

    __add()

    Private slot to handle the Add context menu entry.

    SvnStatusDialog.__addToChangelist

    __addToChangelist()

    Private slot to add entries to a changelist.

    SvnStatusDialog.__breakLock

    __breakLock()

    Private slot to handle the Break Lock context menu entry.

    SvnStatusDialog.__commit

    __commit()

    Private slot to handle the Commit context menu entry.

    SvnStatusDialog.__committed

    __committed()

    Private slot called after the commit has finished.

    SvnStatusDialog.__diff

    __diff()

    Private slot to handle the Diff context menu entry.

    SvnStatusDialog.__finish

    __finish()

    Private slot called when the process finished or the user pressed the button.

    SvnStatusDialog.__generateItem

    __generateItem(status, propStatus, locked, history, switched, lockinfo, uptodate, revision, change, author, path)

    Private method to generate a status item in the status list.

    status
    status indicator (string)
    propStatus
    property status indicator (string)
    locked
    locked indicator (string)
    history
    history indicator (string)
    switched
    switched indicator (string)
    lockinfo
    lock indicator (string)
    uptodate
    up to date indicator (string)
    revision
    revision string (string or QString)
    change
    revision of last change (string or QString)
    author
    author of the last change (string or QString)
    path
    path of the file or directory (string or QString)

    SvnStatusDialog.__getChangelistItems

    __getChangelistItems()

    Private method to retrieve all entries, that are members of a changelist.

    Returns:
    list of all items belonging to a changelist

    SvnStatusDialog.__getCommitableItems

    __getCommitableItems()

    Private method to retrieve all entries the user wants to commit.

    Returns:
    list of all items, the user has checked

    SvnStatusDialog.__getLockActionItems

    __getLockActionItems(indicators)

    Private method to retrieve all emtries, that have a locked status.

    Returns:
    list of all items with a locked status

    SvnStatusDialog.__getMissingItems

    __getMissingItems()

    Private method to retrieve all entries, that have a missing status.

    Returns:
    list of all items with a missing status

    SvnStatusDialog.__getModifiedItems

    __getModifiedItems()

    Private method to retrieve all entries, that have a modified status.

    Returns:
    list of all items with a modified status

    SvnStatusDialog.__getNonChangelistItems

    __getNonChangelistItems()

    Private method to retrieve all entries, that are not members of a changelist.

    Returns:
    list of all items not belonging to a changelist

    SvnStatusDialog.__getUnversionedItems

    __getUnversionedItems()

    Private method to retrieve all entries, that have an unversioned status.

    Returns:
    list of all items with an unversioned status

    SvnStatusDialog.__lock

    __lock()

    Private slot to handle the Lock context menu entry.

    SvnStatusDialog.__procFinished

    __procFinished(exitCode, exitStatus)

    Private slot connected to the finished signal.

    exitCode
    exit code of the process (integer)
    exitStatus
    exit status of the process (QProcess.ExitStatus)

    SvnStatusDialog.__readStderr

    __readStderr()

    Private slot to handle the readyReadStandardError signal.

    It reads the error output of the process and inserts it into the error pane.

    SvnStatusDialog.__readStdout

    __readStdout()

    Private slot to handle the readyReadStandardOutput signal.

    It reads the output of the process, formats it and inserts it into the contents pane.

    SvnStatusDialog.__removeFromChangelist

    __removeFromChangelist()

    Private slot to remove entries from their changelists.

    SvnStatusDialog.__resizeColumns

    __resizeColumns()

    Private method to resize the list columns.

    SvnStatusDialog.__resort

    __resort()

    Private method to resort the tree.

    SvnStatusDialog.__restoreMissing

    __restoreMissing()

    Private slot to handle the Restore Missing context menu entry.

    SvnStatusDialog.__revert

    __revert()

    Private slot to handle the Revert context menu entry.

    SvnStatusDialog.__showContextMenu

    __showContextMenu(coord)

    Protected slot to show the context menu of the status list.

    coord
    the position of the mouse pointer (QPoint)

    SvnStatusDialog.__stealLock

    __stealLock()

    Private slot to handle the Break Lock context menu entry.

    SvnStatusDialog.__unlock

    __unlock()

    Private slot to handle the Unlock context menu entry.

    SvnStatusDialog.__updateButtons

    __updateButtons()

    Private method to update the VCS buttons status.

    SvnStatusDialog.__updateCommitButton

    __updateCommitButton()

    Private method to update the Commit button status.

    SvnStatusDialog.closeEvent

    closeEvent(e)

    Private slot implementing a close event handler.

    e
    close event (QCloseEvent)

    SvnStatusDialog.keyPressEvent

    keyPressEvent(evt)

    Protected slot to handle a key press event.

    evt
    the key press event (QKeyEvent)

    SvnStatusDialog.on_addButton_clicked

    on_addButton_clicked()

    Private slot to handle the press of the Add button.

    SvnStatusDialog.on_buttonBox_clicked

    on_buttonBox_clicked(button)

    Private slot called by a button of the button box clicked.

    button
    button that was clicked (QAbstractButton)

    SvnStatusDialog.on_commitButton_clicked

    on_commitButton_clicked()

    Private slot to handle the press of the Commit button.

    SvnStatusDialog.on_diffButton_clicked

    on_diffButton_clicked()

    Private slot to handle the press of the Differences button.

    SvnStatusDialog.on_input_returnPressed

    on_input_returnPressed()

    Private slot to handle the press of the return key in the input field.

    SvnStatusDialog.on_passwordCheckBox_toggled

    on_passwordCheckBox_toggled(isOn)

    Private slot to handle the password checkbox toggled.

    isOn
    flag indicating the status of the check box (boolean)

    SvnStatusDialog.on_refreshButton_clicked

    on_refreshButton_clicked()

    Private slot to refresh the status display.

    SvnStatusDialog.on_restoreButton_clicked

    on_restoreButton_clicked()

    Private slot to handle the press of the Restore button.

    SvnStatusDialog.on_revertButton_clicked

    on_revertButton_clicked()

    Private slot to handle the press of the Revert button.

    SvnStatusDialog.on_sendButton_clicked

    on_sendButton_clicked()

    Private slot to send the input to the subversion process.

    SvnStatusDialog.on_statusFilterCombo_activated

    on_statusFilterCombo_activated(txt)

    Private slot to react to the selection of a status filter.

    txt
    selected status filter (QString)

    SvnStatusDialog.on_statusList_itemChanged

    on_statusList_itemChanged(item, column)

    Private slot to act upon item changes.

    item
    reference to the changed item (QTreeWidgetItem)
    column
    index of column that changed (integer)

    SvnStatusDialog.on_statusList_itemSelectionChanged

    on_statusList_itemSelectionChanged()

    Private slot to act upon changes of selected items.

    SvnStatusDialog.start

    start(fn)

    Public slot to start the svn status command.

    fn
    filename(s)/directoryname(s) to show the status of (string or list of strings)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DebugClients.Python.DebugClientThreads.0000644000175000001440000000013212261331354031117 xustar000000000000000030 mtime=1388688108.157229891 30 atime=1389081084.993724362 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.DebugClients.Python.DebugClientThreads.html0000644000175000001440000001533412261331354031544 0ustar00detlevusers00000000000000 eric4.DebugClients.Python.DebugClientThreads

    eric4.DebugClients.Python.DebugClientThreads

    Module implementing the multithreaded version of the debug client.

    Global Attributes

    _original_start_thread

    Classes

    DebugClientThreads Class implementing the client side of the debugger.

    Functions

    _debugclient_start_new_thread Module function used to allow for debugging of multiple threads.


    DebugClientThreads

    Class implementing the client side of the debugger.

    This variant of the debugger implements a threaded debugger client by subclassing all relevant base classes.

    Derived from

    DebugClientBase.DebugClientBase, AsyncIO

    Class Attributes

    debugClient

    Class Methods

    None

    Methods

    DebugClientThreads Constructor
    attachThread Public method to setup a thread for DebugClient to debug.
    eventLoop Public method implementing our event loop.
    lockClient Public method to acquire the lock for this client.
    setCurrentThread Private method to set the current thread.
    set_quit Private method to do a 'set quit' on all threads.
    threadTerminated Public method called when a DebugThread has exited.
    unlockClient Public method to release the lock for this client.

    Static Methods

    None

    DebugClientThreads (Constructor)

    DebugClientThreads()

    Constructor

    DebugClientThreads.attachThread

    attachThread(target = None, args = None, kwargs = None, mainThread = 0)

    Public method to setup a thread for DebugClient to debug.

    If mainThread is non-zero, then we are attaching to the already started mainthread of the app and the rest of the args are ignored.

    target
    the start function of the target thread (i.e. the user code)
    args
    arguments to pass to target
    kwargs
    keyword arguments to pass to target
    mainThread
    non-zero, if we are attaching to the already started mainthread of the app
    Returns:
    The identifier of the created thread

    DebugClientThreads.eventLoop

    eventLoop(disablePolling = False)

    Public method implementing our event loop.

    disablePolling
    flag indicating to enter an event loop with polling disabled (boolean)

    DebugClientThreads.lockClient

    lockClient(blocking = 1)

    Public method to acquire the lock for this client.

    blocking
    flag to indicating a blocking lock
    Returns:
    flag indicating successful locking

    DebugClientThreads.setCurrentThread

    setCurrentThread(id)

    Private method to set the current thread.

    id
    the id the current thread should be set to.

    DebugClientThreads.set_quit

    set_quit()

    Private method to do a 'set quit' on all threads.

    DebugClientThreads.threadTerminated

    threadTerminated(dbgThread)

    Public method called when a DebugThread has exited.

    dbgThread
    the DebugThread that has exited

    DebugClientThreads.unlockClient

    unlockClient()

    Public method to release the lock for this client.



    _debugclient_start_new_thread

    _debugclient_start_new_thread(target, args, kwargs={})

    Module function used to allow for debugging of multiple threads.

    The way it works is that below, we reset thread._start_new_thread to this function object. Thus, providing a hook for us to see when threads are started. From here we forward the request onto the DebugClient which will create a DebugThread object to allow tracing of the thread then start up the thread. These actions are always performed in order to allow dropping into debug mode.

    See DebugClientThreads.attachThread and DebugThread.DebugThread in DebugThread.py

    target
    the start function of the target thread (i.e. the user code)
    args
    arguments to pass to target
    kwargs
    keyword arguments to pass to target
    Returns:
    The identifier of the created thread

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.ViewManager.__init__.html0000644000175000001440000000013212261331350026414 xustar000000000000000030 mtime=1388688104.222227915 30 atime=1389081084.993724362 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.ViewManager.__init__.html0000644000175000001440000000372712261331350026157 0ustar00detlevusers00000000000000 eric4.ViewManager.__init__

    eric4.ViewManager.__init__

    Package implementing the viewmanager of the eric4 IDE.

    The viewmanager is responsible for the layout of the editor windows. This is the central part of the IDE. In additon to this, the viewmanager provides all editor related actions, menus and toolbars.

    View managers are provided as plugins and loaded via the factory function. If the requested view manager type is not available, tabview will be used by default.

    Global Attributes

    None

    Classes

    None

    Functions

    factory Modul factory function to generate the right viewmanager type.


    factory

    factory(parent, ui, dbs, pluginManager)

    Modul factory function to generate the right viewmanager type.

    The viewmanager is instantiated depending on the data set in the current preferences.

    parent
    parent widget (QWidget)
    ui
    reference to the main UI object
    dbs
    reference to the debug server object
    pluginManager
    reference to the plugin manager object
    Returns:
    the instantiated viewmanager

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.E4XML.XMLEntityResolver.html0000644000175000001440000000013212261331352026662 xustar000000000000000030 mtime=1388688106.610229114 30 atime=1389081084.993724362 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.E4XML.XMLEntityResolver.html0000644000175000001440000000427112261331352026420 0ustar00detlevusers00000000000000 eric4.E4XML.XMLEntityResolver

    eric4.E4XML.XMLEntityResolver

    Module implementing a specialized entity resolver to find our DTDs.

    Global Attributes

    None

    Classes

    XMLEntityResolver Class implementing a specialized entity resolver to find our DTDs.

    Functions

    None


    XMLEntityResolver

    Class implementing a specialized entity resolver to find our DTDs.

    Derived from

    EntityResolver

    Class Attributes

    None

    Class Methods

    None

    Methods

    resolveEntity Public method to resolve the system identifier of an entity and return either the system identifier to read from as a string.

    Static Methods

    None

    XMLEntityResolver.resolveEntity

    resolveEntity(publicId, systemId)

    Public method to resolve the system identifier of an entity and return either the system identifier to read from as a string.

    publicId
    publicId of an entity (string)
    systemId
    systemId of an entity to reslove (string)
    Returns:
    resolved systemId (string)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.E4Gui.E4TabWidget.html0000644000175000001440000000013212261331350025430 xustar000000000000000030 mtime=1388688104.365227987 30 atime=1389081084.993724362 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.E4Gui.E4TabWidget.html0000644000175000001440000002551212261331350025167 0ustar00detlevusers00000000000000 eric4.E4Gui.E4TabWidget

    eric4.E4Gui.E4TabWidget

    Module implementing a TabWidget class substituting QTabWidget.

    Global Attributes

    None

    Classes

    E4DnDTabBar Class implementing a tab bar class substituting QTabBar.
    E4TabWidget Class implementing a tab widget class substituting QTabWidget.
    E4WheelTabBar Class implementing a tab bar class substituting QTabBar to support wheel events.

    Functions

    None


    E4DnDTabBar

    Class implementing a tab bar class substituting QTabBar.

    Signals

    tabMoveRequested(int, int)
    emitted to signal a tab move request giving the old and new index position

    Derived from

    E4WheelTabBar

    Class Attributes

    None

    Class Methods

    None

    Methods

    E4DnDTabBar Constructor
    dragEnterEvent Protected method to handle drag enter events.
    dropEvent Protected method to handle drop events.
    mouseMoveEvent Protected method to handle mouse move events.
    mousePressEvent Protected method to handle mouse press events.

    Static Methods

    None

    E4DnDTabBar (Constructor)

    E4DnDTabBar(parent = None)

    Constructor

    parent
    reference to the parent widget (QWidget)

    E4DnDTabBar.dragEnterEvent

    dragEnterEvent(event)

    Protected method to handle drag enter events.

    event
    reference to the drag enter event (QDragEnterEvent)

    E4DnDTabBar.dropEvent

    dropEvent(event)

    Protected method to handle drop events.

    event
    reference to the drop event (QDropEvent)

    E4DnDTabBar.mouseMoveEvent

    mouseMoveEvent(event)

    Protected method to handle mouse move events.

    event
    reference to the mouse move event (QMouseEvent)

    E4DnDTabBar.mousePressEvent

    mousePressEvent(event)

    Protected method to handle mouse press events.

    event
    reference to the mouse press event (QMouseEvent)


    E4TabWidget

    Class implementing a tab widget class substituting QTabWidget.

    It provides slots to show the previous and next tab and give them the input focus and it allows to have a context menu for the tabs.

    Signals

    customTabContextMenuRequested(const QPoint & point, int index)
    emitted when a context menu for a tab is requested

    Derived from

    QTabWidget

    Class Attributes

    None

    Class Methods

    None

    Methods

    E4TabWidget Constructor
    __currentChanged Private slot to handle the currentChanged signal.
    __freeSide Private method to determine the free side of a tab.
    __handleTabCustomContextMenuRequested Private slot to handle the context menu request for the tabbar.
    animationLabel Public slot to set an animated icon.
    moveTab Public method to move a tab to a new index.
    nextTab Public slot used to show the next tab.
    prevTab Public slot used to show the previous tab.
    resetAnimation Public slot to reset an animated icon.
    selectTab Public method to get the index of a tab given a position.
    setTabContextMenuPolicy Public method to set the context menu policy of the tab.
    switchTab Public slot used to switch between the current and the previous current tab.

    Static Methods

    None

    E4TabWidget (Constructor)

    E4TabWidget(parent = None, dnd = False)

    Constructor

    parent
    reference to the parent widget (QWidget)
    dnd=
    flag indicating the support for Drag & Drop (boolean)

    E4TabWidget.__currentChanged

    __currentChanged(index)

    Private slot to handle the currentChanged signal.

    index
    index of the current tab

    E4TabWidget.__freeSide

    __freeSide()

    Private method to determine the free side of a tab.

    Returns:
    free side (QTabBar.ButtonPosition)

    E4TabWidget.__handleTabCustomContextMenuRequested

    __handleTabCustomContextMenuRequested(point)

    Private slot to handle the context menu request for the tabbar.

    point
    point the context menu was requested (QPoint)

    E4TabWidget.animationLabel

    animationLabel(index, animationFile)

    Public slot to set an animated icon.

    index
    tab index (integer)
    animationFile
    name of the file containing the animation (string)
    Returns:
    reference to the created label (QLabel)

    E4TabWidget.moveTab

    moveTab(curIndex, newIndex)

    Public method to move a tab to a new index.

    curIndex
    index of tab to be moved (integer)
    newIndex
    index the tab should be moved to (integer)

    E4TabWidget.nextTab

    nextTab()

    Public slot used to show the next tab.

    E4TabWidget.prevTab

    prevTab()

    Public slot used to show the previous tab.

    E4TabWidget.resetAnimation

    resetAnimation(index)

    Public slot to reset an animated icon.

    index
    tab index (integer)

    E4TabWidget.selectTab

    selectTab(pos)

    Public method to get the index of a tab given a position.

    pos
    position determining the tab index (QPoint)
    Returns:
    index of the tab (integer)

    E4TabWidget.setTabContextMenuPolicy

    setTabContextMenuPolicy(policy)

    Public method to set the context menu policy of the tab.

    policy
    context menu policy to set (Qt.ContextMenuPolicy)

    E4TabWidget.switchTab

    switchTab()

    Public slot used to switch between the current and the previous current tab.



    E4WheelTabBar

    Class implementing a tab bar class substituting QTabBar to support wheel events.

    Derived from

    QTabBar

    Class Attributes

    None

    Class Methods

    None

    Methods

    E4WheelTabBar Constructor
    wheelEvent Protected slot to support wheel events.

    Static Methods

    None

    E4WheelTabBar (Constructor)

    E4WheelTabBar(parent = None)

    Constructor

    parent
    reference to the parent widget (QWidget)

    E4WheelTabBar.wheelEvent

    wheelEvent(event)

    Protected slot to support wheel events.

    reference
    to the wheel event (QWheelEvent)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.HelpClearPrivateDataDialog.h0000644000175000001440000000013212261331351031152 xustar000000000000000030 mtime=1388688105.324228468 30 atime=1389081084.993724362 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.HelpClearPrivateDataDialog.html0000644000175000001440000000476312261331351031433 0ustar00detlevusers00000000000000 eric4.Helpviewer.HelpClearPrivateDataDialog

    eric4.Helpviewer.HelpClearPrivateDataDialog

    Module implementing a dialog to select which private data to clear.

    Global Attributes

    None

    Classes

    HelpClearPrivateDataDialog Class implementing a dialog to select which private data to clear.

    Functions

    None


    HelpClearPrivateDataDialog

    Class implementing a dialog to select which private data to clear.

    Derived from

    QDialog, Ui_HelpClearPrivateDataDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    HelpClearPrivateDataDialog Constructor
    getData Public method to get the data from the dialog.

    Static Methods

    None

    HelpClearPrivateDataDialog (Constructor)

    HelpClearPrivateDataDialog(parent = None)

    Constructor

    parent
    reference to the parent widget (QWidget)

    HelpClearPrivateDataDialog.getData

    getData()

    Public method to get the data from the dialog.

    Returns:
    tuple of flags indicating which data to clear (browsing history, search history, favicons, disk cache, cookies, passwords) (list of boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Templates.TemplateMultipleVariablesDial0000644000175000001440000000013212261331350031355 xustar000000000000000030 mtime=1388688104.338227973 30 atime=1389081084.993724362 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Templates.TemplateMultipleVariablesDialog.html0000644000175000001440000000513112261331350032400 0ustar00detlevusers00000000000000 eric4.Templates.TemplateMultipleVariablesDialog

    eric4.Templates.TemplateMultipleVariablesDialog

    Module implementing a dialog for entering multiple template variables.

    Global Attributes

    None

    Classes

    TemplateMultipleVariablesDialog Class implementing a dialog for entering multiple template variables.

    Functions

    None


    TemplateMultipleVariablesDialog

    Class implementing a dialog for entering multiple template variables.

    Derived from

    QDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    TemplateMultipleVariablesDialog Constructor
    getVariables Public method to get the values for all variables.

    Static Methods

    None

    TemplateMultipleVariablesDialog (Constructor)

    TemplateMultipleVariablesDialog(variables, parent = None)

    Constructor

    variables
    list of template variable names (list of strings)
    parent
    parent widget of this dialog (QWidget)

    TemplateMultipleVariablesDialog.getVariables

    getVariables()

    Public method to get the values for all variables.

    Returns:
    dictionary with the variable as a key and its value (string)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DataViews.PyCoverageDialog.html0000644000175000001440000000013212261331352027525 xustar000000000000000030 mtime=1388688106.132228874 30 atime=1389081084.993724362 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.DataViews.PyCoverageDialog.html0000644000175000001440000002131612261331352027262 0ustar00detlevusers00000000000000 eric4.DataViews.PyCoverageDialog

    eric4.DataViews.PyCoverageDialog

    Module implementing a Python code coverage dialog.

    Global Attributes

    None

    Classes

    PyCoverageDialog Class implementing a dialog to display the collected code coverage data.

    Functions

    None


    PyCoverageDialog

    Class implementing a dialog to display the collected code coverage data.

    Derived from

    QDialog, Ui_PyCoverageDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    PyCoverageDialog Constructor
    __annotate Private slot to handle the annotate context menu action.
    __annotateAll Private slot to handle the annotate all context menu action.
    __createResultItem Private method to create an entry in the result list.
    __deleteAnnotated Private slot to handle the delete annotated context menu action.
    __erase Private slot to handle the erase context menu action.
    __finish Private slot called when the action finished or the user pressed the button.
    __format_lines Private method to format a list of integers into string by coalescing groups.
    __openFile Private slot to open the selected file.
    __showContextMenu Private slot to show the context menu of the listview.
    on_buttonBox_clicked Private slot called by a button of the button box clicked.
    on_reloadButton_clicked Private slot to reload the coverage info.
    on_resultList_itemActivated Private slot to handle the activation of an item.
    start Public slot to start the coverage data evaluation.
    stringify Private helper function to generate a string representation of a pair

    Static Methods

    None

    PyCoverageDialog (Constructor)

    PyCoverageDialog(parent = None)

    Constructor

    parent
    parent widget (QWidget)

    PyCoverageDialog.__annotate

    __annotate()

    Private slot to handle the annotate context menu action.

    This method produce an annotated coverage file of the selected file.

    PyCoverageDialog.__annotateAll

    __annotateAll()

    Private slot to handle the annotate all context menu action.

    This method produce an annotated coverage file of every file listed in the listview.

    PyCoverageDialog.__createResultItem

    __createResultItem(file, statements, executed, coverage, excluded, missing)

    Private method to create an entry in the result list.

    file
    filename of file (string or QString)
    statements
    amount of statements (integer)
    executed
    amount of executed statements (integer)
    coverage
    percent of coverage (integer)
    excluded
    list of excluded lines (string)
    missing
    list of lines without coverage (string)

    PyCoverageDialog.__deleteAnnotated

    __deleteAnnotated()

    Private slot to handle the delete annotated context menu action.

    This method deletes all annotated files. These are files ending with ',cover'.

    PyCoverageDialog.__erase

    __erase()

    Private slot to handle the erase context menu action.

    This method erases the collected coverage data that is stored in the .coverage file.

    PyCoverageDialog.__finish

    __finish()

    Private slot called when the action finished or the user pressed the button.

    PyCoverageDialog.__format_lines

    __format_lines(lines)

    Private method to format a list of integers into string by coalescing groups.

    lines
    list of integers
    Returns:
    string representing the list

    PyCoverageDialog.__openFile

    __openFile(itm=None)

    Private slot to open the selected file.

    itm
    reference to the item to be opened (QTreeWidgetItem)

    PyCoverageDialog.__showContextMenu

    __showContextMenu(coord)

    Private slot to show the context menu of the listview.

    coord
    the position of the mouse pointer (QPoint)

    PyCoverageDialog.on_buttonBox_clicked

    on_buttonBox_clicked(button)

    Private slot called by a button of the button box clicked.

    button
    button that was clicked (QAbstractButton)

    PyCoverageDialog.on_reloadButton_clicked

    on_reloadButton_clicked()

    Private slot to reload the coverage info.

    PyCoverageDialog.on_resultList_itemActivated

    on_resultList_itemActivated(item, column)

    Private slot to handle the activation of an item.

    item
    reference to the activated item (QTreeWidgetItem)
    column
    column the item was activated in (integer)

    PyCoverageDialog.start

    start(cfn, fn)

    Public slot to start the coverage data evaluation.

    cfn
    basename of the coverage file (string)
    fn
    file or list of files or directory to be checked (string or list of strings)

    PyCoverageDialog.stringify

    stringify()

    Private helper function to generate a string representation of a pair

    pair
    pair of integers

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Debugger.ExceptionsFilterDialog.html0000644000175000001440000000013212261331350030603 xustar000000000000000030 mtime=1388688104.704228157 30 atime=1389081084.994724362 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Debugger.ExceptionsFilterDialog.html0000644000175000001440000001202312261331350030333 0ustar00detlevusers00000000000000 eric4.Debugger.ExceptionsFilterDialog

    eric4.Debugger.ExceptionsFilterDialog

    Module implementing the exceptions filter dialog.

    Global Attributes

    None

    Classes

    ExceptionsFilterDialog Class implementing the exceptions filter dialog.

    Functions

    None


    ExceptionsFilterDialog

    Class implementing the exceptions filter dialog.

    Derived from

    QDialog, Ui_ExceptionsFilterDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    ExceptionsFilterDialog Constructor
    getExceptionsList Public method to retrieve the list of exception types.
    on_addButton_clicked Private slot to handle the Add button press.
    on_deleteAllButton_clicked Private slot to delete all exceptions of the listbox.
    on_deleteButton_clicked Private slot to delete the currently selected exception of the listbox.
    on_exceptionEdit_textChanged Private slot to handle the textChanged signal of exceptionEdit.
    on_exceptionList_itemSelectionChanged Private slot to handle the change of the selection.

    Static Methods

    None

    ExceptionsFilterDialog (Constructor)

    ExceptionsFilterDialog(excList, ignore, parent=None)

    Constructor

    excList
    list of exceptions to be edited (QStringList)
    ignore
    flag indicating the ignore exceptions mode (boolean)
    parent
    the parent widget (QWidget)

    ExceptionsFilterDialog.getExceptionsList

    getExceptionsList()

    Public method to retrieve the list of exception types.

    Returns:
    list of exception types (list of strings)

    ExceptionsFilterDialog.on_addButton_clicked

    on_addButton_clicked()

    Private slot to handle the Add button press.

    ExceptionsFilterDialog.on_deleteAllButton_clicked

    on_deleteAllButton_clicked()

    Private slot to delete all exceptions of the listbox.

    ExceptionsFilterDialog.on_deleteButton_clicked

    on_deleteButton_clicked()

    Private slot to delete the currently selected exception of the listbox.

    ExceptionsFilterDialog.on_exceptionEdit_textChanged

    on_exceptionEdit_textChanged(txt)

    Private slot to handle the textChanged signal of exceptionEdit.

    This slot sets the enabled status of the add button and sets the forms default button.

    txt
    the text entered into exceptionEdit (QString)

    ExceptionsFilterDialog.on_exceptionList_itemSelectionChanged

    on_exceptionList_itemSelectionChanged()

    Private slot to handle the change of the selection.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Project.Project.html0000644000175000001440000000013212261331352025466 xustar000000000000000030 mtime=1388688106.001228808 30 atime=1389081085.017724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Project.Project.html0000644000175000001440000023510412261331352025225 0ustar00detlevusers00000000000000 eric4.Project.Project

    eric4.Project.Project

    Module implementing the project management functionality.

    Global Attributes

    None

    Classes

    Project Class implementing the project management functionality.

    Functions

    None


    Project

    Class implementing the project management functionality.

    Signals

    completeRepopulateItem(string)
    emitted after an item of the model was repopulated
    directoryRemoved(string)
    emitted after a directory has been removed from the project
    dirty(int)
    emitted when the dirty state changes
    lexerAssociationsChanged()
    emitted after the lexer associations have been changed
    newProject()
    emitted after a new project was generated
    newProjectHooks()
    emitted after a new project was generated but before the newProject() signal is sent
    prepareRepopulateItem(string)
    emitted before an item of the model is repopulated
    projectAboutToBeCreated()
    emitted just before the project will be created
    projectClosed()
    emitted after a project was closed
    projectClosedHooks()
    emitted after a project file was clsoed but before the projectClosed() signal is sent
    projectFileRenamed(string, string)
    emitted after a file of the project has been renamed
    projectFormAdded(string)
    emitted after a new form was added
    projectFormRemoved(string)
    emitted after a form was removed
    projectInterfaceAdded(string)
    emitted after a new IDL file was added
    projectInterfaceRemoved(string)
    emitted after a IDL file was removed
    projectLanguageAdded(string)
    emitted after a new language was added
    projectLanguageAddedByCode(string)
    emitted after a new language was added. The language code is sent by this signal.
    projectLanguageRemoved(string)
    emitted after a language was removed
    projectOpened()
    emitted after a project file was read
    projectOpenedHooks()
    emitted after a project file was read but before the projectOpened() signal is sent
    projectOthersAdded(string)
    emitted after a file or directory was added to the OTHERS project data area
    projectOthersRemoved(string)
    emitted after a file was removed from the OTHERS project data area
    projectPropertiesChanged()
    emitted after the project properties were changed
    projectResourceAdded(string)
    emitted after a new resource file was added
    projectResourceRemoved(string)
    emitted after a resource was removed
    projectSessionLoaded()
    emitted after a project session file was loaded
    projectSourceAdded(string)
    emitted after a new source file was added
    projectSourceRemoved(string)
    emitted after a source was removed
    reinitVCS()
    emitted after the VCS has been reinitialized
    showMenu(string, QMenu)
    emitted when a menu is about to be shown. The name of the menu and a reference to the menu are given.
    sourceFile(string)
    emitted after a project file was read to open the main script
    vcsStatusMonitorStatus(QString, QString)
    emitted to signal the status of the monitoring thread (ok, nok, op, off) and a status message

    Derived from

    QObject

    Class Attributes

    dbgKeynames
    keynames
    securityCheckPatterns
    userKeynames

    Class Methods

    None

    Methods

    Project Constructor
    __addRecursiveDirectory Private method used to add all files of a directory tree.
    __addSingleDirectory Private method used to add all files of a single directory to the project.
    __addToOthers Private method to add file/directory to the OTHERS project data.
    __binaryTranslationFile Private method to calculate the filename of the binary translations file given the name of the raw translations file.
    __checkFilesExist Private method to check, if the files in a list exist.
    __checkProjectFileGroup Private method to check, if a file is in a specific file group of the project.
    __clearRecent Private method to clear the recent projects menu.
    __closeAllWindows Private method to close all project related windows.
    __createSnapshotSource Private method to create a snapshot plugin version.
    __createZipDirEntries Private method to create dir entries in the zip file.
    __deleteDebugProperties Private method to delete the project debugger properties file (.e3d)
    __deleteSession Private method to delete the session file.
    __doSearchNewFiles Private method to search for new files in the project directory.
    __initData Private method to initialize the project data part.
    __initDebugProperties Private method to initialize the debug properties.
    __initProjectTypes Private method to initialize the list of supported project types.
    __loadRecent Private method to load the recently opened project filenames.
    __migrate Private method to migrate the supporting project files to their own management directory.
    __openRecent Private method to open a project from the list of rencently opened projects.
    __pluginCreateArchive Private slot to create an eric4 plugin archive.
    __pluginCreatePkgList Private slot to create a PKGLIST file needed for archive file creation.
    __pluginCreateSnapshotArchive Private slot to create an eric4 plugin archive snapshot release.
    __pluginExtractVersion Private method to extract the version number entry.
    __readDebugProperties Private method to read in the project debugger properties file (.e4d, .e3d)
    __readProject Private method to read in a project (.e4p, .e4pz, .e3p, .e3pz) file.
    __readSession Private method to read in the project session file (.e4s, .e3s)
    __readTasks Private method to read in the project tasks file (.e4t, .e3t)
    __readUserProperties Private method to read in the user specific project file (.e4q)
    __readXMLDebugProperties Public method to read the debugger properties from an XML file.
    __readXMLProject Private method to read the project data from an XML file.
    __readXMLSession Private method to read the session data from an XML file.
    __readXMLTasks Private method to read the project tasks data from an XML file.
    __saveRecent Private method to save the list of recently opened filenames.
    __searchNewFiles Private slot used to handle the search new files action.
    __showCodeCoverage Private slot used to show the code coverage information for the project files.
    __showCodeMetrics Private slot used to calculate some code metrics for the project files.
    __showContextMenuApiDoc Private slot called before the apidoc menu is shown.
    __showContextMenuChecks Private slot called before the checks menu is shown.
    __showContextMenuGraphics Private slot called before the graphics menu is shown.
    __showContextMenuPackagers Private slot called before the packagers menu is shown.
    __showContextMenuRecent Private method to set up the recent projects menu.
    __showContextMenuShow Private slot called before the show menu is shown.
    __showContextMenuVCS Private slot called before the vcs menu is shown.
    __showDebugProperties Private slot to display the debugger properties dialog.
    __showFiletypeAssociations Public slot to display the filetype association dialog.
    __showLexerAssociations Public slot to display the lexer association dialog.
    __showMenu Private method to set up the project menu.
    __showProfileData Private slot used to show the profiling information for the project.
    __showProperties Private slot to display the properties dialog.
    __showUserProperties Private slot to display the user specific properties dialog.
    __statusMonitorStatus Private method to receive the status monitor status.
    __syncRecent Private method to synchronize the list of recently opened projects with the central store.
    __writeDebugProperties Private method to write the project debugger properties file (.e4d)
    __writeProject Private method to save the project infos to a project file.
    __writeSession Private method to write the session data to an XML file (.e4s).
    __writeTasks Private method to write the tasks data to an XML file (.e4t).
    __writeUserProperties Private method to write the project data to an XML file.
    __writeXMLProject Private method to write the project data to an XML file.
    addDirectory Public method used to add all files of a directory to the project.
    addE4Actions Public method to add actions to the list of actions.
    addFiles Public slot used to add files to the project.
    addIdlDir Public slot to add all IDL interfaces of a directory to the current project.
    addIdlFiles Public slot to add IDL interfaces to the current project.
    addLanguage Public slot used to add a language to the project.
    addOthersDir Private slot to add a directory to the OTHERS project data.
    addOthersFiles Private slot to add files to the OTHERS project data.
    addResourceDir Public slot to add all Qt resource files of a directory to the current project.
    addResourceFiles Public slot to add Qt resources to the current project.
    addSourceDir Public slot to add all source files of a directory to the current project.
    addSourceFiles Public slot to add source files to the current project.
    addUiDir Public slot to add all forms of a directory to the current project.
    addUiFiles Public slot to add forms to the current project.
    appendFile Public method to append a file to the project.
    checkDirty Public method to check dirty status and open a message window.
    checkLanguageFiles Public slot to check the language files after a release process.
    checkSecurityString Public method to check a string for security problems.
    checkVCSStatus Public method to wake up the VCS status monitor thread.
    clearStatusMonitorCachedState Public method to clear the cached VCS state of a file/directory.
    closeProject Public slot to close the current project.
    copyDirectory Public slot to copy a directory.
    deleteDirectory Public slot to delete a directory from the project directory.
    deleteFile Public slot to delete a file from the project directory.
    deleteLanguageFile Public slot to delete a translation from the project directory.
    getAbsoluteUniversalPath Public method to convert a project relative file path with universal separators to an absolute file path.
    getActions Public method to get a list of all actions.
    getData Public method to get data out of the project data store.
    getDebugProperty Public method to retrieve a debugger property.
    getDefaultSourceExtension Public method to get the default extension for the project's programming language.
    getEditorLexerAssoc Public method to retrieve a lexer association.
    getFiles Public method to get all files starting with a common prefix.
    getMainScript Public method to return the main script filename.
    getMenu Public method to get a reference to the main menu or a submenu.
    getModel Public method to get a reference to the project browser model.
    getMostRecent Public method to get the most recently opened project.
    getProjectDictionaries Public method to get the names of the project specific dictionaries.
    getProjectFile Public method to get the path of the project file.
    getProjectLanguage Public method to get the project's programming language.
    getProjectManagementDir Public method to get the path of the management directory.
    getProjectPath Public method to get the project path.
    getProjectSpellLanguage Public method to get the project's programming language.
    getProjectType Public method to get the type of the project.
    getProjectTypes Public method to get the list of supported project types.
    getRelativePath Public method to convert a file path to a project relative file path.
    getRelativeUniversalPath Public method to convert a file path to a project relative file path with universal separators.
    getSources Public method to return the source script files.
    getStatusMonitorAutoUpdate Public method to retrieve the status of the auto update function.
    getStatusMonitorInterval Public method to get the monitor interval.
    getTranslationPattern Public method to get the translation pattern.
    getVcs Public method to get a reference to the VCS object.
    handleApplicationDiagram Private method to handle the application diagram context menu action.
    handlePreferencesChanged Public slot used to handle the preferencesChanged signal.
    hasEntry Public method to check the project for a file.
    hasProjectType Public method to check, if a project type is already registered.
    initActions Public slot to initialize the project related actions.
    initFileTypes Public method to initialize the filetype associations with default values.
    initMenu Public slot to initialize the project menu.
    initToolbar Public slot to initialize the project toolbar.
    initVCS Public method used to instantiate a vcs system.
    isDebugPropertiesLoaded Public method to return the status of the debug properties.
    isDirty Public method to return the dirty state.
    isOpen Public method to return the opened state.
    isProjectFile Public method used to check, if the passed in filename belongs to the project.
    isProjectForm Public method used to check, if the passed in filename belongs to the project forms.
    isProjectInterface Public method used to check, if the passed in filename belongs to the project interfaces.
    isProjectResource Public method used to check, if the passed in filename belongs to the project resources.
    isProjectSource Public method used to check, if the passed in filename belongs to the project sources.
    moveDirectory Public slot to move a directory.
    newProject Public slot to built a new project.
    newProjectAddFiles Public method to add files to a new project.
    openProject Public slot to open a project.
    othersAdded Public slot to be called, if something was added to the OTHERS project data area.
    registerProjectType Public method to register a project type.
    removeDirectory Public slot to remove a directory from the project.
    removeE4Actions Public method to remove actions from the list of actions.
    removeFile Public slot to remove a file from the project.
    removeLanguageFile Public slot to remove a translation from the project.
    renameFile Public slot to rename a file of the project.
    renameFileInPdata Public method to rename a file in the pdata structure.
    renameMainScript Public method to rename the main script.
    reopenProject Public slot to reopen the current project.
    repopulateItem Public slot to repopulate a named item.
    saveAllScripts Public method to save all scripts belonging to the project.
    saveProject Public slot to save the current project.
    saveProjectAs Public slot to save the current project to a different file.
    setData Public method to store data in the project data store.
    setDbgInfo Public method to set the debugging information.
    setDirty Public method to set the dirty state.
    setStatusMonitorAutoUpdate Public method to enable the auto update function.
    setStatusMonitorInterval Public method to se the interval of the VCS status monitor thread.
    startStatusMonitor Public method to start the VCS status monitor thread.
    startswithProjectPath Public method to check, if a path starts with the project path.
    stopStatusMonitor Public method to stop the VCS status monitor thread.
    unregisterProjectType Public method to unregister a project type.
    updateFileTypes Public method to update the filetype associations with new default values.
    vcsSoftwareAvailable Public method to check, if some supported VCS software is available to the IDE.

    Static Methods

    None

    Project (Constructor)

    Project(parent = None, filename = None)

    Constructor

    parent
    parent widget (usually the ui object) (QWidget)
    filename
    optional filename of a project file to open (string)

    Project.__addRecursiveDirectory

    __addRecursiveDirectory(filetype, source, target)

    Private method used to add all files of a directory tree.

    The tree is rooted at source to another one rooted at target. This method decents down to the lowest subdirectory.

    filetype
    type of files to add (string)
    source
    source directory (string)
    target
    target directory (string)

    Project.__addSingleDirectory

    __addSingleDirectory(filetype, source, target, quiet = False)

    Private method used to add all files of a single directory to the project.

    filetype
    type of files to add (string)
    source
    source directory (string)
    target
    target directory (string)
    quiet
    flag indicating quiet operations (boolean)

    Project.__addToOthers

    __addToOthers(fn)

    Private method to add file/directory to the OTHERS project data.

    fn
    filename or directoryname to add

    Project.__binaryTranslationFile

    __binaryTranslationFile(langFile)

    Private method to calculate the filename of the binary translations file given the name of the raw translations file.

    langFile
    name of the raw translations file (string)
    Returns:
    name of the binary translations file (string)

    Project.__checkFilesExist

    __checkFilesExist(index)

    Private method to check, if the files in a list exist.

    The files in the indicated list are checked for existance in the filesystem. Non existant files are removed from the list and the dirty state of the project is changed accordingly.

    index
    key of the list to be checked (string)

    Project.__checkProjectFileGroup

    __checkProjectFileGroup(fn, group)

    Private method to check, if a file is in a specific file group of the project.

    fn
    filename to be checked (string or QString)
    group
    group to check (string)
    Returns:
    flag indicating membership (boolean)

    Project.__clearRecent

    __clearRecent()

    Private method to clear the recent projects menu.

    Project.__closeAllWindows

    __closeAllWindows()

    Private method to close all project related windows.

    Project.__createSnapshotSource

    __createSnapshotSource(filename)

    Private method to create a snapshot plugin version.

    The version entry in the plugin module is modified to signify a snapshot version. This method appends the string "-snapshot-" and date indicator to the version string.

    filename
    name of the plugin file to modify (string)
    Returns:
    modified source (string), snapshot version string (string)

    Project.__createZipDirEntries

    __createZipDirEntries(path, zipFile)

    Private method to create dir entries in the zip file.

    path
    name of the directory entry to create (string)
    zipFile
    open ZipFile object (zipfile.ZipFile)

    Project.__deleteDebugProperties

    __deleteDebugProperties()

    Private method to delete the project debugger properties file (.e3d)

    Project.__deleteSession

    __deleteSession()

    Private method to delete the session file.

    Project.__doSearchNewFiles

    __doSearchNewFiles(AI = True, onUserDemand = False)

    Private method to search for new files in the project directory.

    If new files were found, it shows a dialog listing these files and gives the user the opportunity to select the ones he wants to include. If 'Automatic Inclusion' is enabled, the new files are automatically added to the project.

    AI
    flag indicating whether the automatic inclusion should be honoured (boolean)
    onUserDemand
    flag indicating whether this method was requested by the user via a menu action (boolean)

    Project.__initData

    __initData()

    Private method to initialize the project data part.

    Project.__initDebugProperties

    __initDebugProperties()

    Private method to initialize the debug properties.

    Project.__initProjectTypes

    __initProjectTypes()

    Private method to initialize the list of supported project types.

    Project.__loadRecent

    __loadRecent()

    Private method to load the recently opened project filenames.

    Project.__migrate

    __migrate()

    Private method to migrate the supporting project files to their own management directory.

    Project.__openRecent

    __openRecent(act)

    Private method to open a project from the list of rencently opened projects.

    act
    reference to the action that triggered (QAction)

    Project.__pluginCreateArchive

    __pluginCreateArchive(snapshot = False)

    Private slot to create an eric4 plugin archive.

    snapshot
    flag indicating a snapshot archive (boolean)

    Project.__pluginCreatePkgList

    __pluginCreatePkgList()

    Private slot to create a PKGLIST file needed for archive file creation.

    Project.__pluginCreateSnapshotArchive

    __pluginCreateSnapshotArchive()

    Private slot to create an eric4 plugin archive snapshot release.

    Project.__pluginExtractVersion

    __pluginExtractVersion(filename)

    Private method to extract the version number entry.

    filename
    name of the plugin file to modify (string)
    Returns:
    version string (string)

    Project.__readDebugProperties

    __readDebugProperties(quiet=0)

    Private method to read in the project debugger properties file (.e4d, .e3d)

    quiet
    flag indicating quiet operations. If this flag is true, no errors are reported.

    Project.__readProject

    __readProject(fn)

    Private method to read in a project (.e4p, .e4pz, .e3p, .e3pz) file.

    fn
    filename of the project file to be read (string or QString)
    Returns:
    flag indicating success

    Project.__readSession

    __readSession(quiet = False, indicator = "")

    Private method to read in the project session file (.e4s, .e3s)

    quiet
    flag indicating quiet operations. If this flag is true, no errors are reported.
    indicator=
    indicator string (string)

    Project.__readTasks

    __readTasks()

    Private method to read in the project tasks file (.e4t, .e3t)

    Project.__readUserProperties

    __readUserProperties()

    Private method to read in the user specific project file (.e4q)

    Project.__readXMLDebugProperties

    __readXMLDebugProperties(fn, validating, quiet)

    Public method to read the debugger properties from an XML file.

    fn
    filename of the project debugger properties file to be read (string or QString)
    validating
    flag indicating a validation of the XML file is requested (boolean)
    quiet
    flag indicating quiet operations. If this flag is true, no errors are reported.

    Project.__readXMLProject

    __readXMLProject(fn, validating)

    Private method to read the project data from an XML file.

    fn
    filename of the project file to be read (string or QString)
    validating
    flag indicating a validation of the XML file is requested (boolean)
    Returns:
    flag indicating success

    Project.__readXMLSession

    __readXMLSession(fn, validating, quiet)

    Private method to read the session data from an XML file.

    The data read is:

    • all open source filenames
    • the active window
    • all breakpoints
    • the commandline
    • the working directory
    • the exception reporting flag
    • the list of exception types to be highlighted
    • all bookmarks

    fn
    filename of the project session file to be read (string or QString)
    validating
    flag indicating a validation of the XML file is requested (boolean)
    quiet
    flag indicating quiet operations. If this flag is true, no errors are reported.

    Project.__readXMLTasks

    __readXMLTasks(fn, validating)

    Private method to read the project tasks data from an XML file.

    fn
    filename of the project tasks file to be read (string or QString)
    validating
    flag indicating a validation of the XML file is requested (boolean)

    Project.__saveRecent

    __saveRecent()

    Private method to save the list of recently opened filenames.

    Project.__searchNewFiles

    __searchNewFiles()

    Private slot used to handle the search new files action.

    Project.__showCodeCoverage

    __showCodeCoverage()

    Private slot used to show the code coverage information for the project files.

    Project.__showCodeMetrics

    __showCodeMetrics()

    Private slot used to calculate some code metrics for the project files.

    Project.__showContextMenuApiDoc

    __showContextMenuApiDoc()

    Private slot called before the apidoc menu is shown.

    Project.__showContextMenuChecks

    __showContextMenuChecks()

    Private slot called before the checks menu is shown.

    Project.__showContextMenuGraphics

    __showContextMenuGraphics()

    Private slot called before the graphics menu is shown.

    Project.__showContextMenuPackagers

    __showContextMenuPackagers()

    Private slot called before the packagers menu is shown.

    Project.__showContextMenuRecent

    __showContextMenuRecent()

    Private method to set up the recent projects menu.

    Project.__showContextMenuShow

    __showContextMenuShow()

    Private slot called before the show menu is shown.

    Project.__showContextMenuVCS

    __showContextMenuVCS()

    Private slot called before the vcs menu is shown.

    Project.__showDebugProperties

    __showDebugProperties()

    Private slot to display the debugger properties dialog.

    Project.__showFiletypeAssociations

    __showFiletypeAssociations()

    Public slot to display the filetype association dialog.

    Project.__showLexerAssociations

    __showLexerAssociations()

    Public slot to display the lexer association dialog.

    Project.__showMenu

    __showMenu()

    Private method to set up the project menu.

    Project.__showProfileData

    __showProfileData()

    Private slot used to show the profiling information for the project.

    Project.__showProperties

    __showProperties()

    Private slot to display the properties dialog.

    Project.__showUserProperties

    __showUserProperties()

    Private slot to display the user specific properties dialog.

    Project.__statusMonitorStatus

    __statusMonitorStatus(status, statusMsg)

    Private method to receive the status monitor status.

    It simply reemits the received status.

    status
    status of the monitoring thread (QString, ok, nok or off)
    statusMsg
    explanotory text for the signaled status (QString)

    Project.__syncRecent

    __syncRecent()

    Private method to synchronize the list of recently opened projects with the central store.

    Project.__writeDebugProperties

    __writeDebugProperties(quiet=0)

    Private method to write the project debugger properties file (.e4d)

    quiet
    flag indicating quiet operations. If this flag is true, no errors are reported.

    Project.__writeProject

    __writeProject(fn = None)

    Private method to save the project infos to a project file.

    fn
    optional filename of the project file to be written. If fn is None, the filename stored in the project object is used. This is the 'save' action. If fn is given, this filename is used instead of the one in the project object. This is the 'save as' action.
    Returns:
    flag indicating success

    Project.__writeSession

    __writeSession(quiet = False, indicator = "")

    Private method to write the session data to an XML file (.e4s).

    The data saved is:

    • all open source filenames belonging to the project
    • the active window, if it belongs to the project
    • all breakpoints
    • the commandline
    • the working directory
    • the exception reporting flag
    • the list of exception types to be highlighted
    • all bookmarks of files belonging to the project

    quiet
    flag indicating quiet operations. If this flag is true, no errors are reported.
    indicator=
    indicator string (string)

    Project.__writeTasks

    __writeTasks()

    Private method to write the tasks data to an XML file (.e4t).

    Project.__writeUserProperties

    __writeUserProperties()

    Private method to write the project data to an XML file.

    Project.__writeXMLProject

    __writeXMLProject(fn = None)

    Private method to write the project data to an XML file.

    fn
    the filename of the project file (string)

    Project.addDirectory

    addDirectory(filter = None, startdir = None)

    Public method used to add all files of a directory to the project.

    filter
    filter to be used by the add directory dialog (string out of source, form, resource, interface, others)
    startdir
    start directory for the selection dialog

    Project.addE4Actions

    addE4Actions(actions)

    Public method to add actions to the list of actions.

    actions
    list of actions (list of E4Action)

    Project.addFiles

    addFiles(filter = None, startdir = None)

    Public slot used to add files to the project.

    filter
    filter to be used by the add file dialog (string out of source, form, resource, interface, others)
    startdir
    start directory for the selection dialog

    Project.addIdlDir

    addIdlDir()

    Public slot to add all IDL interfaces of a directory to the current project.

    Project.addIdlFiles

    addIdlFiles()

    Public slot to add IDL interfaces to the current project.

    Project.addLanguage

    addLanguage()

    Public slot used to add a language to the project.

    Project.addOthersDir

    addOthersDir()

    Private slot to add a directory to the OTHERS project data.

    Project.addOthersFiles

    addOthersFiles()

    Private slot to add files to the OTHERS project data.

    Project.addResourceDir

    addResourceDir()

    Public slot to add all Qt resource files of a directory to the current project.

    Project.addResourceFiles

    addResourceFiles()

    Public slot to add Qt resources to the current project.

    Project.addSourceDir

    addSourceDir()

    Public slot to add all source files of a directory to the current project.

    Project.addSourceFiles

    addSourceFiles()

    Public slot to add source files to the current project.

    Project.addUiDir

    addUiDir()

    Public slot to add all forms of a directory to the current project.

    Project.addUiFiles

    addUiFiles()

    Public slot to add forms to the current project.

    Project.appendFile

    appendFile(fn, isSourceFile = False, updateModel = True)

    Public method to append a file to the project.

    fn
    filename to be added to the project (string or QString)
    isSourceFile
    flag indicating that this is a source file even if it doesn't have the source extension (boolean)
    updateModel
    flag indicating an update of the model is requested (boolean)

    Project.checkDirty

    checkDirty()

    Public method to check dirty status and open a message window.

    Returns:
    flag indicating whether this operation was successful

    Project.checkLanguageFiles

    checkLanguageFiles()

    Public slot to check the language files after a release process.

    Project.checkSecurityString

    checkSecurityString(stringToCheck, tag)

    Public method to check a string for security problems.

    stringToCheck
    string that should be checked for security problems (string)
    tag
    tag that contained the string (string)
    Returns:
    flag indicating a security problem (boolean)

    Project.checkVCSStatus

    checkVCSStatus()

    Public method to wake up the VCS status monitor thread.

    Project.clearStatusMonitorCachedState

    clearStatusMonitorCachedState(name)

    Public method to clear the cached VCS state of a file/directory.

    name
    name of the entry to be cleared (QString or string)

    Project.closeProject

    closeProject(reopen = False, noSave = False)

    Public slot to close the current project.

    reopen=
    flag indicating a reopening of the project (boolean)
    noSave=
    flag indicating to not perform save actions (boolean)
    Returns:
    flag indicating success (boolean)

    Project.copyDirectory

    copyDirectory(olddn, newdn)

    Public slot to copy a directory.

    olddn
    original directory name (string or QString)
    newdn
    new directory name (string or QString)

    Project.deleteDirectory

    deleteDirectory(dn)

    Public slot to delete a directory from the project directory.

    dn
    directory name to be removed from the project
    Returns:
    flag indicating success

    Project.deleteFile

    deleteFile(fn)

    Public slot to delete a file from the project directory.

    fn
    filename to be deleted from the project
    Returns:
    flag indicating success

    Project.deleteLanguageFile

    deleteLanguageFile(langFile)

    Public slot to delete a translation from the project directory.

    langFile
    the translation file to be removed (string)

    Project.getAbsoluteUniversalPath

    getAbsoluteUniversalPath(path)

    Public method to convert a project relative file path with universal separators to an absolute file path.

    path
    file or directory name to convert (string or QString)
    Returns:
    absolute path (string)

    Project.getActions

    getActions()

    Public method to get a list of all actions.

    Returns:
    list of all actions (list of E4Action)

    Project.getData

    getData(category, key)

    Public method to get data out of the project data store.

    category
    category of the data to get (string, one of PROJECTTYPESPECIFICDATA, CHECKERSPARMS, PACKAGERSPARMS, DOCUMENTATIONPARMS or OTHERTOOLSPARMS)
    key
    key of the data entry to get (string).
    Returns:
    a copy of the requested data or None

    Project.getDebugProperty

    getDebugProperty(key)

    Public method to retrieve a debugger property.

    key
    key of the property (string)
    Returns:
    value of the property

    Project.getDefaultSourceExtension

    getDefaultSourceExtension()

    Public method to get the default extension for the project's programming language.

    Returns:
    default extension (including the dot) (string)

    Project.getEditorLexerAssoc

    getEditorLexerAssoc(filename)

    Public method to retrieve a lexer association.

    filename
    filename used to determine the associated lexer language (string)
    Returns:
    the requested lexer language (string)

    Project.getFiles

    getFiles(start)

    Public method to get all files starting with a common prefix.

    start
    prefix (string or QString)

    Project.getMainScript

    getMainScript(normalized = False)

    Public method to return the main script filename.

    normalized
    flag indicating a normalized filename is wanted (boolean)
    Returns:
    filename of the projects main script (string)

    Project.getMenu

    getMenu(menuName)

    Public method to get a reference to the main menu or a submenu.

    menuName
    name of the menu (string)
    Returns:
    reference to the requested menu (QMenu) or None

    Project.getModel

    getModel()

    Public method to get a reference to the project browser model.

    Returns:
    reference to the project browser model (ProjectBrowserModel)

    Project.getMostRecent

    getMostRecent()

    Public method to get the most recently opened project.

    Returns:
    path of the most recently opened project (string)

    Project.getProjectDictionaries

    getProjectDictionaries()

    Public method to get the names of the project specific dictionaries.

    Returns:
    tuple of two strings giving the absolute path names of the project specific word and exclude list

    Project.getProjectFile

    getProjectFile()

    Public method to get the path of the project file.

    Returns:
    path of the project file (string)

    Project.getProjectLanguage

    getProjectLanguage()

    Public method to get the project's programming language.

    Returns:
    programming language (string)

    Project.getProjectManagementDir

    getProjectManagementDir()

    Public method to get the path of the management directory.

    Returns:
    path of the management directory (string)

    Project.getProjectPath

    getProjectPath()

    Public method to get the project path.

    Returns:
    project path (string)

    Project.getProjectSpellLanguage

    getProjectSpellLanguage()

    Public method to get the project's programming language.

    Returns:
    programming language (string)

    Project.getProjectType

    getProjectType()

    Public method to get the type of the project.

    Returns:
    UI type of the project (string)

    Project.getProjectTypes

    getProjectTypes()

    Public method to get the list of supported project types.

    Returns:
    reference to the dictionary of project types.

    Project.getRelativePath

    getRelativePath(path)

    Public method to convert a file path to a project relative file path.

    path
    file or directory name to convert (string or QString)
    Returns:
    project relative path or unchanged path, if path doesn't belong to the project (string or QString)

    Project.getRelativeUniversalPath

    getRelativeUniversalPath(path)

    Public method to convert a file path to a project relative file path with universal separators.

    path
    file or directory name to convert (string or QString)
    Returns:
    project relative path or unchanged path, if path doesn't belong to the project (string or QString)

    Project.getSources

    getSources(normalized = False)

    Public method to return the source script files.

    normalized
    flag indicating a normalized filename is wanted (boolean)
    Returns:
    list of the projects scripts (list of string)

    Project.getStatusMonitorAutoUpdate

    getStatusMonitorAutoUpdate()

    Public method to retrieve the status of the auto update function.

    Returns:
    status of the auto update function (boolean)

    Project.getStatusMonitorInterval

    getStatusMonitorInterval()

    Public method to get the monitor interval.

    Returns:
    interval in seconds (integer)

    Project.getTranslationPattern

    getTranslationPattern()

    Public method to get the translation pattern.

    Returns:
    translation pattern (string)

    Project.getVcs

    getVcs()

    Public method to get a reference to the VCS object.

    Returns:
    reference to the VCS object

    Project.handleApplicationDiagram

    handleApplicationDiagram()

    Private method to handle the application diagram context menu action.

    Project.handlePreferencesChanged

    handlePreferencesChanged()

    Public slot used to handle the preferencesChanged signal.

    Project.hasEntry

    hasEntry(fn)

    Public method to check the project for a file.

    fn
    filename to be checked (string or QString)
    Returns:
    flag indicating, if the project contains the file (boolean)

    Project.hasProjectType

    hasProjectType(type_)

    Public method to check, if a project type is already registered.

    type_
    internal type designator to be unregistered (string)

    Project.initActions

    initActions()

    Public slot to initialize the project related actions.

    Project.initFileTypes

    initFileTypes()

    Public method to initialize the filetype associations with default values.

    Project.initMenu

    initMenu()

    Public slot to initialize the project menu.

    Returns:
    the menu generated (QMenu)

    Project.initToolbar

    initToolbar(toolbarManager)

    Public slot to initialize the project toolbar.

    toolbarManager
    reference to a toolbar manager object (E4ToolBarManager)
    Returns:
    the toolbar generated (QToolBar)

    Project.initVCS

    initVCS(vcsSystem = None, nooverride = False)

    Public method used to instantiate a vcs system.

    vcsSystem
    type of VCS to be used
    nooverride
    flag indicating to ignore an override request (boolean)
    Returns:
    a reference to the vcs object

    Project.isDebugPropertiesLoaded

    isDebugPropertiesLoaded()

    Public method to return the status of the debug properties.

    Returns:
    load status of debug properties (boolean)

    Project.isDirty

    isDirty()

    Public method to return the dirty state.

    Returns:
    dirty state (boolean)

    Project.isOpen

    isOpen()

    Public method to return the opened state.

    Returns:
    open state (boolean)

    Project.isProjectFile

    isProjectFile(fn)

    Public method used to check, if the passed in filename belongs to the project.

    fn
    filename to be checked (string or QString)
    Returns:
    flag indicating membership (boolean)

    Project.isProjectForm

    isProjectForm(fn)

    Public method used to check, if the passed in filename belongs to the project forms.

    fn
    filename to be checked (string or QString)
    Returns:
    flag indicating membership (boolean)

    Project.isProjectInterface

    isProjectInterface(fn)

    Public method used to check, if the passed in filename belongs to the project interfaces.

    fn
    filename to be checked (string or QString)
    Returns:
    flag indicating membership (boolean)

    Project.isProjectResource

    isProjectResource(fn)

    Public method used to check, if the passed in filename belongs to the project resources.

    fn
    filename to be checked (string or QString)
    Returns:
    flag indicating membership (boolean)

    Project.isProjectSource

    isProjectSource(fn)

    Public method used to check, if the passed in filename belongs to the project sources.

    fn
    filename to be checked (string or QString)
    Returns:
    flag indicating membership (boolean)

    Project.moveDirectory

    moveDirectory(olddn, newdn)

    Public slot to move a directory.

    olddn
    old directory name (string or QString)
    newdn
    new directory name (string or QString)

    Project.newProject

    newProject()

    Public slot to built a new project.

    This method displays the new project dialog and initializes the project object with the data entered.

    Project.newProjectAddFiles

    newProjectAddFiles(mainscript)

    Public method to add files to a new project.

    mainscript
    name of the mainscript (string)

    Project.openProject

    openProject(fn = None, restoreSession = True, reopen = False)

    Public slot to open a project.

    fn
    optional filename of the project file to be read
    restoreSession
    flag indicating to restore the project session (boolean)
    reopen=
    flag indicating a reopening of the project (boolean)

    Project.othersAdded

    othersAdded(fn, updateModel = True)

    Public slot to be called, if something was added to the OTHERS project data area.

    fn
    filename or directory name added (string or QString)
    updateModel
    flag indicating an update of the model is requested (boolean)

    Project.registerProjectType

    registerProjectType(type_, description, fileTypeCallback = None, binaryTranslationsCallback = None, lexerAssociationCallback = None)

    Public method to register a project type.

    type_
    internal type designator to be registered (string)
    description
    more verbose type name (display string) (QString)
    fileTypeCallback=
    reference to a method returning a dictionary of filetype associations.
    binaryTranslationsCallback=
    reference to a method returning the name of the binary translation file given the name of the raw translation file
    lexerAssociationCallback=
    reference to a method returning the lexer type to be used for syntax highlighting given the name of a file

    Project.removeDirectory

    removeDirectory(dn)

    Public slot to remove a directory from the project.

    The directory is not deleted from the project directory.

    dn
    directory name to be removed from the project

    Project.removeE4Actions

    removeE4Actions(actions)

    Public method to remove actions from the list of actions.

    actions
    list of actions (list of E4Action)

    Project.removeFile

    removeFile(fn, updateModel = True)

    Public slot to remove a file from the project.

    The file is not deleted from the project directory.

    fn
    filename to be removed from the project
    updateModel
    flag indicating an update of the model is requested (boolean)

    Project.removeLanguageFile

    removeLanguageFile(langFile)

    Public slot to remove a translation from the project.

    The translation file is not deleted from the project directory.

    langFile
    the translation file to be removed (string)

    Project.renameFile

    renameFile(oldfn, newfn = None)

    Public slot to rename a file of the project.

    oldfn
    old filename of the file (string)
    newfn
    new filename of the file (string)
    Returns:
    flag indicating success

    Project.renameFileInPdata

    renameFileInPdata(oldname, newname, isSourceFile = False)

    Public method to rename a file in the pdata structure.

    oldname
    old filename (string)
    newname
    new filename (string)
    isSourceFile
    flag indicating that this is a source file even if it doesn't have the source extension (boolean)

    Project.renameMainScript

    renameMainScript(oldfn, newfn)

    Public method to rename the main script.

    oldfn
    old filename (string)
    newfn
    new filename of the main script (string)

    Project.reopenProject

    reopenProject()

    Public slot to reopen the current project.

    Project.repopulateItem

    repopulateItem(fullname)

    Public slot to repopulate a named item.

    fullname
    full name of the item to repopulate (string or QString)

    Project.saveAllScripts

    saveAllScripts(reportSyntaxErrors = False)

    Public method to save all scripts belonging to the project.

    reportSyntaxErrors=
    flag indicating special reporting for syntax errors (boolean)
    Returns:
    flag indicating success

    Project.saveProject

    saveProject()

    Public slot to save the current project.

    Returns:
    flag indicating success

    Project.saveProjectAs

    saveProjectAs()

    Public slot to save the current project to a different file.

    Returns:
    flag indicating success

    Project.setData

    setData(category, key, data)

    Public method to store data in the project data store.

    category
    category of the data to get (string, one of PROJECTTYPESPECIFICDATA, CHECKERSPARMS, PACKAGERSPARMS, DOCUMENTATIONPARMS or OTHERTOOLSPARMS)
    key
    key of the data entry to get (string).
    data
    data to be stored
    Returns:
    flag indicating success (boolean)

    Project.setDbgInfo

    setDbgInfo(argv, wd, env, excReporting, excList, excIgnoreList, autoClearShell, tracePython = None, autoContinue = None)

    Public method to set the debugging information.

    argv
    command line arguments to be used (string or QString)
    wd
    working directory (string or QString)
    env
    environment setting (string or QString)
    excReporting
    flag indicating the highlighting of exceptions
    excList
    list of exceptions to be highlighted (QStringList)
    excIgnoreList
    list of exceptions to be ignored (QStringList)
    autoClearShell
    flag indicating, that the interpreter window should be cleared (boolean)
    tracePython=
    flag to indicate if the Python library should be traced as well (boolean)
    autoContinue=
    flag indicating, that the debugger should not stop at the first executable line (boolean)

    Project.setDirty

    setDirty(b)

    Public method to set the dirty state.

    It emits the signal dirty(int).

    b
    dirty state (boolean)

    Project.setStatusMonitorAutoUpdate

    setStatusMonitorAutoUpdate(auto)

    Public method to enable the auto update function.

    auto
    status of the auto update function (boolean)

    Project.setStatusMonitorInterval

    setStatusMonitorInterval(interval)

    Public method to se the interval of the VCS status monitor thread.

    interval
    status monitor interval in seconds (integer)

    Project.startStatusMonitor

    startStatusMonitor()

    Public method to start the VCS status monitor thread.

    Project.startswithProjectPath

    startswithProjectPath(path)

    Public method to check, if a path starts with the project path.

    path
    path to be checked (string)

    Project.stopStatusMonitor

    stopStatusMonitor()

    Public method to stop the VCS status monitor thread.

    Project.unregisterProjectType

    unregisterProjectType(type_)

    Public method to unregister a project type.

    type_
    internal type designator to be unregistered (string)

    Project.updateFileTypes

    updateFileTypes()

    Public method to update the filetype associations with new default values.

    Project.vcsSoftwareAvailable

    vcsSoftwareAvailable()

    Public method to check, if some supported VCS software is available to the IDE.

    Returns:
    flag indicating availability of VCS software (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.eric4_plugininstall.html0000644000175000001440000000013212261331350026424 xustar000000000000000030 mtime=1388688104.218227913 30 atime=1389081085.019724364 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.eric4_plugininstall.html0000644000175000001440000000316512261331350026163 0ustar00detlevusers00000000000000 eric4.eric4_plugininstall

    eric4.eric4_plugininstall

    Eric4 Plugin Installer

    This is the main Python script to install eric4 plugins from outside of the IDE.

    Global Attributes

    None

    Classes

    None

    Functions

    createMainWidget Function to create the main widget.
    main Main entry point into the application.


    createMainWidget

    createMainWidget(argv)

    Function to create the main widget.

    argv
    list of commandline parameters (list of strings)
    Returns:
    reference to the main widget (QWidget)


    main

    main()

    Main entry point into the application.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.QScintilla.Exporters.html0000644000175000001440000000013212261331354027617 xustar000000000000000030 mtime=1388688108.659230143 30 atime=1389081085.019724364 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.QScintilla.Exporters.html0000644000175000001440000000275712261331354027364 0ustar00detlevusers00000000000000 eric4.QScintilla.Exporters

    eric4.QScintilla.Exporters

    Package implementing exporters for various file formats.

    Modules

    ExporterBase Module implementing the exporter base class.
    ExporterHTML Module implementing an exporter for HTML.
    ExporterPDF Module implementing an exporter for PDF.
    ExporterRTF Module implementing an exporter for RTF.
    ExporterTEX Module implementing an exporter for TeX.
    Exporters Package implementing exporters for various file formats.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.UI.DeleteFilesConfirmationDialog.html0000644000175000001440000000013212261331351030644 xustar000000000000000030 mtime=1388688105.114228363 30 atime=1389081085.019724364 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.UI.DeleteFilesConfirmationDialog.html0000644000175000001440000000573512261331351030410 0ustar00detlevusers00000000000000 eric4.UI.DeleteFilesConfirmationDialog

    eric4.UI.DeleteFilesConfirmationDialog

    Module implementing a dialog to confirm deletion of multiple files.

    Global Attributes

    None

    Classes

    DeleteFilesConfirmationDialog Class implementing a dialog to confirm deletion of multiple files.

    Functions

    None


    DeleteFilesConfirmationDialog

    Class implementing a dialog to confirm deletion of multiple files.

    Derived from

    QDialog, Ui_DeleteFilesConfirmationDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    DeleteFilesConfirmationDialog Constructor
    on_buttonBox_clicked Private slot called by a button of the button box clicked.

    Static Methods

    None

    DeleteFilesConfirmationDialog (Constructor)

    DeleteFilesConfirmationDialog(parent, caption, message, files)

    Constructor

    parent
    parent of this dialog (QWidget)
    caption
    window title for the dialog (string or QString)
    message
    message to be shown (string or QString)
    okLabel
    label for the OK button (string or QString)
    cancelLabel
    label for the Cancel button (string or QString)
    files
    list of filenames to be shown (list of strings or QStrings or a QStringList)

    DeleteFilesConfirmationDialog.on_buttonBox_clicked

    on_buttonBox_clicked(button)

    Private slot called by a button of the button box clicked.

    button
    button that was clicked (QAbstractButton)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.ViewManager.html0000644000175000001440000000013212261331354025767 xustar000000000000000030 mtime=1388688108.660230143 30 atime=1389081085.019724364 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.ViewManager.html0000644000175000001440000000271212261331354025523 0ustar00detlevusers00000000000000 eric4.ViewManager

    eric4.ViewManager

    Package implementing the viewmanager of the eric4 IDE.

    The viewmanager is responsible for the layout of the editor windows. This is the central part of the IDE. In additon to this, the viewmanager provides all editor related actions, menus and toolbars.

    View managers are provided as plugins and loaded via the factory function. If the requested view manager type is not available, tabview will be used by default.

    Modules

    BookmarkedFilesDialog Module implementing a configuration dialog for the bookmarked files menu.
    ViewManager Module implementing the viewmanager base class.
    ViewManager Package implementing the viewmanager of the eric4 IDE.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.Exporters.ExporterHTML.html0000644000175000001440000000013212261331354031006 xustar000000000000000030 mtime=1388688108.436230031 30 atime=1389081085.019724364 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.Exporters.ExporterHTML.html0000644000175000001440000000413512261331354030543 0ustar00detlevusers00000000000000 eric4.QScintilla.Exporters.ExporterHTML

    eric4.QScintilla.Exporters.ExporterHTML

    Module implementing an exporter for HTML.

    Global Attributes

    None

    Classes

    ExporterHTML Class implementing an exporter for HTML.

    Functions

    None


    ExporterHTML

    Class implementing an exporter for HTML.

    Derived from

    ExporterBase

    Class Attributes

    None

    Class Methods

    None

    Methods

    ExporterHTML Constructor
    exportSource Public method performing the export.

    Static Methods

    None

    ExporterHTML (Constructor)

    ExporterHTML(editor, parent = None)

    Constructor

    editor
    reference to the editor object (QScintilla.Editor.Editor)
    parent
    parent object of the exporter (QObject)

    ExporterHTML.exportSource

    exportSource()

    Public method performing the export.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ConfigurationPages.HelpWebB0000644000175000001440000000013212261331353031167 xustar000000000000000030 mtime=1388688107.629229625 30 atime=1389081085.019724364 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.HelpWebBrowserPage.html0000644000175000001440000000673112261331353033732 0ustar00detlevusers00000000000000 eric4.Preferences.ConfigurationPages.HelpWebBrowserPage

    eric4.Preferences.ConfigurationPages.HelpWebBrowserPage

    Module implementing the Help web browser configuration page.

    Global Attributes

    None

    Classes

    HelpWebBrowserPage Class implementing the Help web browser configuration page.

    Functions

    create Module function to create the configuration page.


    HelpWebBrowserPage

    Class implementing the Help web browser configuration page.

    Derived from

    ConfigurationPageBase, Ui_HelpWebBrowserPage

    Class Attributes

    None

    Class Methods

    None

    Methods

    HelpWebBrowserPage Constructor
    on_defaultHomeButton_clicked Private slot to set the default home page.
    on_setCurrentPageButton_clicked Private slot to set the current page as the home page.
    save Public slot to save the Help Viewers configuration.

    Static Methods

    None

    HelpWebBrowserPage (Constructor)

    HelpWebBrowserPage(configDialog)

    Constructor

    configDialog
    reference to the configuration dialog (ConfigurationDialog)

    HelpWebBrowserPage.on_defaultHomeButton_clicked

    on_defaultHomeButton_clicked()

    Private slot to set the default home page.

    HelpWebBrowserPage.on_setCurrentPageButton_clicked

    on_setCurrentPageButton_clicked()

    Private slot to set the current page as the home page.

    HelpWebBrowserPage.save

    save()

    Public slot to save the Help Viewers configuration.



    create

    create(dlg)

    Module function to create the configuration page.

    dlg
    reference to the configuration dialog

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ConfigurationPages.ProjectB0000644000175000001440000000013112261331353031246 xustar000000000000000029 mtime=1388688107.61922962 30 atime=1389081085.019724364 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.ProjectBrowserPage.html0000644000175000001440000001140412261331353034003 0ustar00detlevusers00000000000000 eric4.Preferences.ConfigurationPages.ProjectBrowserPage

    eric4.Preferences.ConfigurationPages.ProjectBrowserPage

    Module implementing the Project Browser configuration page.

    Global Attributes

    None

    Classes

    ProjectBrowserPage Class implementing the Project Browser configuration page.

    Functions

    create Module function to create the configuration page.


    ProjectBrowserPage

    Class implementing the Project Browser configuration page.

    Derived from

    ConfigurationPageBase, Ui_ProjectBrowserPage

    Class Attributes

    None

    Class Methods

    None

    Methods

    ProjectBrowserPage Constructor
    __setProjectBrowsersCheckBoxes Private method to set the checkboxes according to the selected project type.
    __storeProjectBrowserFlags Private method to store the flags for the selected project type.
    on_pbHighlightedButton_clicked Private slot to set the colour for highlighted entries of the project others browser.
    on_projectTypeCombo_activated Private slot to set the browser checkboxes according to the selected project type.
    save Public slot to save the Project Browser configuration.

    Static Methods

    None

    ProjectBrowserPage (Constructor)

    ProjectBrowserPage()

    Constructor

    ProjectBrowserPage.__setProjectBrowsersCheckBoxes

    __setProjectBrowsersCheckBoxes(projectType)

    Private method to set the checkboxes according to the selected project type.

    projectType
    type of the selected project (QString)

    ProjectBrowserPage.__storeProjectBrowserFlags

    __storeProjectBrowserFlags(projectType)

    Private method to store the flags for the selected project type.

    projectType
    type of the selected project (QString)

    ProjectBrowserPage.on_pbHighlightedButton_clicked

    on_pbHighlightedButton_clicked()

    Private slot to set the colour for highlighted entries of the project others browser.

    ProjectBrowserPage.on_projectTypeCombo_activated

    on_projectTypeCombo_activated(index)

    Private slot to set the browser checkboxes according to the selected project type.

    index
    index of the selected project type (integer)

    ProjectBrowserPage.save

    save()

    Public slot to save the Project Browser configuration.



    create

    create(dlg)

    Module function to create the configuration page.

    dlg
    reference to the configuration dialog

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Project.PropertiesDialog.html0000644000175000001440000000013212261331352027334 xustar000000000000000030 mtime=1388688106.014228815 30 atime=1389081085.019724364 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Project.PropertiesDialog.html0000644000175000001440000001246712261331352027100 0ustar00detlevusers00000000000000 eric4.Project.PropertiesDialog

    eric4.Project.PropertiesDialog

    Module implementing the project properties dialog.

    Global Attributes

    None

    Classes

    PropertiesDialog Class implementing the project properties dialog.

    Functions

    None


    PropertiesDialog

    Class implementing the project properties dialog.

    Derived from

    QDialog, Ui_PropertiesDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    PropertiesDialog Constructor
    getPPath Public method to get the project path.
    getProjectType Public method to get the selected project type.
    on_dirButton_clicked Private slot to display a directory selection dialog.
    on_mainscriptButton_clicked Private slot to display a file selection dialog.
    on_spellPropertiesButton_clicked Private slot to display the spelling properties dialog.
    on_transPropertiesButton_clicked Private slot to display the translations properties dialog.
    on_vcsInfoButton_clicked Private slot to display a vcs information dialog.
    storeData Public method to store the entered/modified data.

    Static Methods

    None

    PropertiesDialog (Constructor)

    PropertiesDialog(project, new = True, parent = None, name = None)

    Constructor

    project
    reference to the project object
    new
    flag indicating the generation of a new project
    parent
    parent widget of this dialog (QWidget)
    name
    name of this dialog (string or QString)

    PropertiesDialog.getPPath

    getPPath()

    Public method to get the project path.

    Returns:
    data of the project directory edit (string)

    PropertiesDialog.getProjectType

    getProjectType()

    Public method to get the selected project type.

    Returns:
    selected UI type (string)

    PropertiesDialog.on_dirButton_clicked

    on_dirButton_clicked()

    Private slot to display a directory selection dialog.

    PropertiesDialog.on_mainscriptButton_clicked

    on_mainscriptButton_clicked()

    Private slot to display a file selection dialog.

    PropertiesDialog.on_spellPropertiesButton_clicked

    on_spellPropertiesButton_clicked()

    Private slot to display the spelling properties dialog.

    PropertiesDialog.on_transPropertiesButton_clicked

    on_transPropertiesButton_clicked()

    Private slot to display the translations properties dialog.

    PropertiesDialog.on_vcsInfoButton_clicked

    on_vcsInfoButton_clicked()

    Private slot to display a vcs information dialog.

    PropertiesDialog.storeData

    storeData()

    Public method to store the entered/modified data.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.Network.NetworkProtocolUnkno0000644000175000001440000000031112261331353031437 xustar0000000000000000111 path=eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.Network.NetworkProtocolUnknownErrorReply.html 30 mtime=1388688107.924229774 30 atime=1389081085.019724364 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.Network.NetworkProtocolUnknownErrorReply.htm0000644000175000001440000000664412261331353034366 0ustar00detlevusers00000000000000 eric4.Helpviewer.Network.NetworkProtocolUnknownErrorReply

    eric4.Helpviewer.Network.NetworkProtocolUnknownErrorReply

    Module implementing a QNetworkReply subclass reporting an unknown protocol error.

    Global Attributes

    None

    Classes

    NetworkProtocolUnknownErrorReply Class implementing a QNetworkReply subclass reporting an unknown protocol error.

    Functions

    None


    NetworkProtocolUnknownErrorReply

    Class implementing a QNetworkReply subclass reporting an unknown protocol error.

    Derived from

    QNetworkReply

    Class Attributes

    None

    Class Methods

    None

    Methods

    NetworkProtocolUnknownErrorReply Constructor
    __fireSignals Private method to send some signals to end the connection.
    abort Public slot to abort the operation.
    bytesAvailable Public method to determined the bytes available for being read.

    Static Methods

    None

    NetworkProtocolUnknownErrorReply (Constructor)

    NetworkProtocolUnknownErrorReply(protocol, parent = None)

    Constructor

    protocol
    protocol name (string or QString)
    parent
    reference to the parent object (QObject)

    NetworkProtocolUnknownErrorReply.__fireSignals

    __fireSignals()

    Private method to send some signals to end the connection.

    NetworkProtocolUnknownErrorReply.abort

    abort()

    Public slot to abort the operation.

    NetworkProtocolUnknownErrorReply.bytesAvailable

    bytesAvailable()

    Public method to determined the bytes available for being read.

    Returns:
    bytes available (integer)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.CookieJar.CookieExceptionsMo0000644000175000001440000000013212261331353031236 xustar000000000000000030 mtime=1388688107.663229642 30 atime=1389081085.019724364 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.CookieJar.CookieExceptionsModel.html0000644000175000001440000001374412261331353032431 0ustar00detlevusers00000000000000 eric4.Helpviewer.CookieJar.CookieExceptionsModel

    eric4.Helpviewer.CookieJar.CookieExceptionsModel

    Module implementing the cookie exceptions model.

    Global Attributes

    None

    Classes

    CookieExceptionsModel Class implementing the cookie exceptions model.

    Functions

    None


    CookieExceptionsModel

    Class implementing the cookie exceptions model.

    Derived from

    QAbstractTableModel

    Class Attributes

    None

    Class Methods

    None

    Methods

    CookieExceptionsModel Constructor
    __addHost Private method to add a host to an exception list.
    addRule Public method to add an exception rule.
    columnCount Public method to get the number of columns of the model.
    data Public method to get data from the model.
    headerData Public method to get header data from the model.
    removeRows Public method to remove entries from the model.
    rowCount Public method to get the number of rows of the model.

    Static Methods

    None

    CookieExceptionsModel (Constructor)

    CookieExceptionsModel(cookieJar, parent = None)

    Constructor

    cookieJar
    reference to the cookie jar (CookieJar)
    parent
    reference to the parent object (QObject)

    CookieExceptionsModel.__addHost

    __addHost(host, addList, removeList1, removeList2)

    Private method to add a host to an exception list.

    host
    name of the host to add (QString)
    addList
    reference to the list to add it to (QStringList)
    removeList1
    reference to first list to remove it from (QStringList)
    removeList2
    reference to second list to remove it from (QStringList)

    CookieExceptionsModel.addRule

    addRule(host, rule)

    Public method to add an exception rule.

    host
    name of the host to add a rule for (QString)
    rule
    type of rule to add (CookieJar.Allow, CookieJar.Block or CookieJar.AllowForSession)

    CookieExceptionsModel.columnCount

    columnCount(parent = QModelIndex())

    Public method to get the number of columns of the model.

    parent
    parent index (QModelIndex)
    Returns:
    number of columns (integer)

    CookieExceptionsModel.data

    data(index, role)

    Public method to get data from the model.

    index
    index to get data for (QModelIndex)
    role
    role of the data to retrieve (integer)
    Returns:
    requested data

    CookieExceptionsModel.headerData

    headerData(section, orientation, role)

    Public method to get header data from the model.

    section
    section number (integer)
    orientation
    orientation (Qt.Orientation)
    role
    role of the data to retrieve (integer)
    Returns:
    requested data

    CookieExceptionsModel.removeRows

    removeRows(row, count, parent = QModelIndex())

    Public method to remove entries from the model.

    row
    start row (integer)
    count
    number of rows to remove (integer)
    parent
    parent index (QModelIndex)
    Returns:
    flag indicating success (boolean)

    CookieExceptionsModel.rowCount

    rowCount(parent = QModelIndex())

    Public method to get the number of rows of the model.

    parent
    parent index (QModelIndex)
    Returns:
    number of columns (integer)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsSubversion.SvnMer0000644000175000001440000000013212261331352031310 xustar000000000000000030 mtime=1388688106.964229292 30 atime=1389081085.019724364 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsSubversion.SvnMergeDialog.html0000644000175000001440000001002712261331352033441 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsSubversion.SvnMergeDialog

    eric4.Plugins.VcsPlugins.vcsSubversion.SvnMergeDialog

    Module implementing a dialog to enter the data for a merge operation.

    Global Attributes

    None

    Classes

    SvnMergeDialog Class implementing a dialog to enter the data for a merge operation.

    Functions

    None


    SvnMergeDialog

    Class implementing a dialog to enter the data for a merge operation.

    Derived from

    QDialog, Ui_SvnMergeDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnMergeDialog Constructor
    __enableOkButton Private method used to enable/disable the OK-button.
    getParameters Public method to retrieve the tag data.
    on_tag1Combo_editTextChanged Private slot to handle the tag1Combo editTextChanged signal.
    on_tag2Combo_editTextChanged Private slot to handle the tag2Combo editTextChanged signal.

    Static Methods

    None

    SvnMergeDialog (Constructor)

    SvnMergeDialog(mergelist1, mergelist2, targetlist, force = False, parent = None)

    Constructor

    mergelist1
    list of previously entered URLs/revisions (QStringList)
    mergelist2
    list of previously entered URLs/revisions (QStringList)
    targetlist
    list of previously entered targets (QStringList)
    force
    flag indicating a forced merge (boolean)
    parent
    parent widget (QWidget)

    SvnMergeDialog.__enableOkButton

    __enableOkButton()

    Private method used to enable/disable the OK-button.

    text
    ignored

    SvnMergeDialog.getParameters

    getParameters()

    Public method to retrieve the tag data.

    Returns:
    tuple naming two tag names or two revisions, a target and a flag indicating a forced merge (QString, QString, QString, boolean)

    SvnMergeDialog.on_tag1Combo_editTextChanged

    on_tag1Combo_editTextChanged(text)

    Private slot to handle the tag1Combo editTextChanged signal.

    SvnMergeDialog.on_tag2Combo_editTextChanged

    on_tag2Combo_editTextChanged(text)

    Private slot to handle the tag2Combo editTextChanged signal.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Project.AddDirectoryDialog.html0000644000175000001440000000013212261331351027554 xustar000000000000000030 mtime=1388688105.793228704 30 atime=1389081085.019724364 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Project.AddDirectoryDialog.html0000644000175000001440000001257612261331351027321 0ustar00detlevusers00000000000000 eric4.Project.AddDirectoryDialog

    eric4.Project.AddDirectoryDialog

    Module implementing a dialog to add files of a directory to the project.

    Global Attributes

    None

    Classes

    AddDirectoryDialog Class implementing a dialog to add files of a directory to the project.

    Functions

    None


    AddDirectoryDialog

    Class implementing a dialog to add files of a directory to the project.

    Derived from

    QDialog, Ui_AddDirectoryDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    AddDirectoryDialog Constructor
    __dirDialog Private slot to display a directory selection dialog.
    getData Public slot to retrieve the dialogs data.
    on_filterComboBox_highlighted Private slot to handle the selection of a file type.
    on_sourceDirButton_clicked Private slot to handle the source dir button press.
    on_sourceDirEdit_textChanged Private slot to handle the source dir text changed.
    on_targetDirButton_clicked Private slot to handle the target dir button press.

    Static Methods

    None

    AddDirectoryDialog (Constructor)

    AddDirectoryDialog(pro, filter = 'source', parent = None, name = None, startdir = None)

    Constructor

    pro
    reference to the project object
    filter
    file type filter (string or QString)
    parent
    parent widget of this dialog (QWidget)
    name
    name of this dialog (string or QString)
    startdir
    start directory for the selection dialog

    AddDirectoryDialog.__dirDialog

    __dirDialog(textEdit)

    Private slot to display a directory selection dialog.

    textEdit
    field for the display of the selected directory name (QLineEdit)

    AddDirectoryDialog.getData

    getData()

    Public slot to retrieve the dialogs data.

    Returns:
    tuple of four values (string, string, string, boolean) giving the selected file type, the source and target directory and a flag indicating a recursive add

    AddDirectoryDialog.on_filterComboBox_highlighted

    on_filterComboBox_highlighted(fileType)

    Private slot to handle the selection of a file type.

    fileType
    the selected file type (QString)

    AddDirectoryDialog.on_sourceDirButton_clicked

    on_sourceDirButton_clicked()

    Private slot to handle the source dir button press.

    AddDirectoryDialog.on_sourceDirEdit_textChanged

    on_sourceDirEdit_textChanged(dir)

    Private slot to handle the source dir text changed.

    If the entered source directory is a subdirectory of the current projects main directory, the target directory path is synchronized. It is assumed, that the user wants to add a bunch of files to the project in place.

    dir
    the text of the source directory line edit

    AddDirectoryDialog.on_targetDirButton_clicked

    on_targetDirButton_clicked()

    Private slot to handle the target dir button press.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DebugClients.Ruby.Debuggee.html0000644000175000001440000000013212261331354027453 xustar000000000000000030 mtime=1388688108.365229995 30 atime=1389081085.020724364 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.DebugClients.Ruby.Debuggee.html0000644000175000001440000010051312261331354027205 0ustar00detlevusers00000000000000 eric4.DebugClients.Ruby.Debuggee

    eric4.DebugClients.Ruby.Debuggee

    File implementing the real debugger, which is connected to the IDE frontend.

    Global Attributes

    None

    Classes

    Client Class handling the connection to the IDE.
    Context Class defining the current execution context.
    DEBUGGER__ Class defining a singleton object for the debugger.
    Mutex Class implementing a mutex.
    SilentObject Class defining an object that ignores all messages.

    Modules

    None

    Functions

    context Method returning the context of a thread.
    debug_thread_info Method handling the thread related debug commands.
    eventLoop Method calling the main event loop.
    eventPoll Method calling the main function polling for an event sent by the IDE.
    get_thread Method returning a thread by number.
    interrupt Method to stop execution at the next instruction.
    make_thread_list Method to create a thread list.
    thread_list Method to list the state of a thread.
    thread_list_all Method to list the state of all threads.
    traceRuby? Method to check, if we should trace into the Ruby interpreter libraries.


    Client

    Class handling the connection to the IDE.

    Derived from

    None

    Class Attributes

    None

    Class Methods

    None

    Methods

    eventLoop Method calling the main event loop.
    eventPoll Method calling the main function polling for an event sent by the IDE.
    initialize Constructor
    printf Method to print something to the IDE.
    printf_clear_breakpoint Method to report the deletion of a temporary breakpoint to the IDE.
    printf_clear_watchexpression Method to report the deletion of a temporary watch expression to the IDE.
    printf_excn Method to report an exception to the IDE.
    printf_exit Method to report the exit status to the IDE.
    printf_line Method to report the current line and the current stack trace to the IDE.
    printf_scriptExcn Method to report a ScriptError to the IDE.
    traceRuby? Method to check, if we should trace into the Ruby interpreter libraries.

    Static Methods

    None

    Client.eventLoop

    eventLoop()

    Method calling the main event loop.

    Client.eventPoll

    eventPoll()

    Method calling the main function polling for an event sent by the IDE.

    Client.initialize

    initialize()

    Constructor

    debugger
    reference to the object having the IDE connection.

    Client.printf

    printf()

    Method to print something to the IDE.

    *args
    Arguments to be printed.

    Client.printf_clear_breakpoint

    printf_clear_breakpoint(line)

    Method to report the deletion of a temporary breakpoint to the IDE.

    file
    filename of the breakpoint (String)
    line
    line number of the breakpoint (int)

    Client.printf_clear_watchexpression

    printf_clear_watchexpression()

    Method to report the deletion of a temporary watch expression to the IDE.

    cond
    expression of the watch expression (String)

    Client.printf_excn

    printf_excn()

    Method to report an exception to the IDE.

    exclist
    info about the exception to be reported

    Client.printf_exit

    printf_exit()

    Method to report the exit status to the IDE.

    status
    exit status of the program (int)

    Client.printf_line

    printf_line()

    Method to report the current line and the current stack trace to the IDE.

    frames
    reference to the array containing the stack trace.

    Client.printf_scriptExcn

    printf_scriptExcn()

    Method to report a ScriptError to the IDE.

    exclist
    info about the exception to be reported

    Client.traceRuby?

    traceRuby?()

    Method to check, if we should trace into the Ruby interpreter libraries.



    Context

    Class defining the current execution context.

    Derived from

    None

    Class Attributes

    None

    Class Methods

    None

    Methods

    clear_suspend Method to clear the suspend state.
    current_binding Method returning the binding object of the current execution frame.
    current_frame Method returning the current execution frame.
    eventLoop Method calling the main event loop.
    eventPoll Method calling the main function polling for an event sent by the IDE.
    get_binding Method returning the binding object of a specific execution frame.
    get_frame Method returning a specific execution frame.
    initialize Constructor
    set_suspend Method to suspend all threads.
    step_continue Method to continue execution until next breakpoint or watch expression.
    step_out Method to set the next stop point after the function call returns.
    step_over Method to set the next stop point skipping function calls.
    step_quit Method to stop debugging.
    stop_next Method to set the next stop point (i.e.
    suspend_all Method to suspend all threads.
    traceRuby? Method to check, if we should trace into the Ruby interpreter libraries.

    Static Methods

    None

    Context.clear_suspend

    clear_suspend()

    Method to clear the suspend state.

    Context.current_binding

    current_binding()

    Method returning the binding object of the current execution frame.

    Returns:
    binding object of the current execution frame

    Context.current_frame

    current_frame()

    Method returning the current execution frame.

    Returns:
    current execution frame

    Context.eventLoop

    eventLoop()

    Method calling the main event loop.

    Context.eventPoll

    eventPoll()

    Method calling the main function polling for an event sent by the IDE.

    Context.get_binding

    get_binding()

    Method returning the binding object of a specific execution frame.

    frameno
    frame number of the frame (int)
    Returns:
    the requested binding object

    Context.get_frame

    get_frame()

    Method returning a specific execution frame.

    frameno
    frame number of the frame to be returned (int)
    Returns:
    the requested execution frame

    Context.initialize

    initialize()

    Constructor

    Context.set_suspend

    set_suspend()

    Method to suspend all threads.

    Context.step_continue

    step_continue()

    Method to continue execution until next breakpoint or watch expression.

    Context.step_out

    step_out()

    Method to set the next stop point after the function call returns.

    Context.step_over

    step_over()

    Method to set the next stop point skipping function calls.

    counter
    defining the stop point (int)

    Context.step_quit

    step_quit()

    Method to stop debugging.

    Context.stop_next

    stop_next()

    Method to set the next stop point (i.e. stop at next line).

    counter
    defining the stop point (int)

    Context.suspend_all

    suspend_all()

    Method to suspend all threads.

    Context.traceRuby?

    traceRuby?()

    Method to check, if we should trace into the Ruby interpreter libraries.



    DEBUGGER__

    Class defining a singleton object for the debugger.

    Derived from

    None

    Class Attributes

    MUTEX
    SilentClient

    Class Methods

    None

    Methods

    add_break_point Method to add a breakpoint.
    add_watch_point Method to add a watch expression.
    attach Method to connect the debugger to the IDE.
    attached? Method returning the attached state.
    break_points Method to return the list of breakpoints
    check_break_points Method to check, if the given position contains an active breakpoint.
    check_suspend Method to check the suspend state.
    clear_break_point Method to delete a specific breakpoint.
    clear_watch_point Method to delete a specific watch expression.
    client Method returning a reference to the client object.
    context Method returning the context of a thread.
    debug_command Method to execute the next debug command.
    debug_silent_eval Method to eval a string without output.
    delete_break_point Method to delete a breakpoint.
    delete_watch_point Method to delete a watch expression.
    enable_break_point Method to set the enabled state of a breakpoint.
    enable_watch_point Method to set the enabled state of a watch expression.
    excn_handle Method to handle an exception
    frame_set_pos Method to set the frame position of the current frame.
    ignore_break_point Method to set the ignore count of a breakpoint.
    ignore_watch_point Method to set the ignore count of a watch expression.
    last_thread Method returning the last active thread.
    quit Method to quit the debugger.
    resume Method to resume the program being debugged.
    resume_all Method to resume all threads.
    set_client Method to set the client handling the connection.
    set_last_thread Method to remember the last thread.
    skip_it? Method to filter out debugger files.
    stdout Method returning the stdout object.
    stdout= Method to set the stdout object.
    suspend Method to suspend the program being debugged.
    thnum Method returning the thread number of the current thread.
    trace_func Method executed by the tracing facility.
    waiting Method returning the waiting list.

    Static Methods

    None

    DEBUGGER__.add_break_point

    add_break_point(pos, temp = false, cond = nil)

    Method to add a breakpoint.

    file
    filename for the breakpoint (String)
    pos
    line number for the breakpoint (int)
    temp
    flag indicating a temporary breakpoint (boolean)
    cond
    condition of a conditional breakpoint (String)

    DEBUGGER__.add_watch_point

    add_watch_point(temp = false)

    Method to add a watch expression.

    cond
    expression of the watch expression (String)
    temp
    flag indicating a temporary watch expression (boolean)

    DEBUGGER__.attach

    attach()

    Method to connect the debugger to the IDE.

    debugger
    reference to the object handling the communication with the IDE.

    DEBUGGER__.attached?

    attached?()

    Method returning the attached state.

    Returns:
    flag indicating, whether the debugger is attached to the IDE.

    DEBUGGER__.break_points

    break_points()

    Method to return the list of breakpoints

    Returns:
    Array containing all breakpoints.

    DEBUGGER__.check_break_points

    check_break_points(pos, binding_, id)

    Method to check, if the given position contains an active breakpoint.

    file
    filename containing the currently executed line (String)
    pos
    line number currently executed (int)
    binding_
    current binding object
    id
    (ignored)
    Returns:
    flag indicating an active breakpoint (boolean)

    DEBUGGER__.check_suspend

    check_suspend()

    Method to check the suspend state.

    DEBUGGER__.clear_break_point

    clear_break_point(pos)

    Method to delete a specific breakpoint.

    file
    filename containing the breakpoint (String)
    pos
    line number containing the breakpoint (int)

    DEBUGGER__.clear_watch_point

    clear_watch_point()

    Method to delete a specific watch expression.

    cond
    expression specifying the watch expression (String)

    DEBUGGER__.client

    client()

    Method returning a reference to the client object.

    Returns:
    reference to the client object.

    DEBUGGER__.context

    context()

    Method returning the context of a thread.

    th
    thread object to get the context for
    Returns:
    the context for the thread

    DEBUGGER__.debug_command

    debug_command(line, id, binding_)

    Method to execute the next debug command.

    DEBUGGER__.debug_silent_eval

    debug_silent_eval(binding_)

    Method to eval a string without output.

    str
    String containing the expression to be evaluated
    binding_
    the binding for the evaluation
    Returns:
    the result of the evaluation

    DEBUGGER__.delete_break_point

    delete_break_point(pos)

    Method to delete a breakpoint.

    file
    filename of the breakpoint (String)
    pos
    line number of the breakpoint (int)

    DEBUGGER__.delete_watch_point

    delete_watch_point()

    Method to delete a watch expression.

    cond
    expression of the watch expression (String)

    DEBUGGER__.enable_break_point

    enable_break_point(pos, enable)

    Method to set the enabled state of a breakpoint.

    file
    filename of the breakpoint (String)
    pos
    line number of the breakpoint (int)
    enable
    flag indicating the new enabled state (boolean)

    DEBUGGER__.enable_watch_point

    enable_watch_point(enable)

    Method to set the enabled state of a watch expression.

    cond
    expression of the watch expression (String)
    enable
    flag indicating the new enabled state (boolean)

    DEBUGGER__.excn_handle

    excn_handle(line, id, binding_)

    Method to handle an exception

    file
    filename containing the currently executed line (String)
    pos
    line number currently executed (int)
    id
    (ignored)
    binding_
    current binding object

    DEBUGGER__.frame_set_pos

    frame_set_pos(line)

    Method to set the frame position of the current frame.

    DEBUGGER__.ignore_break_point

    ignore_break_point(pos, count)

    Method to set the ignore count of a breakpoint.

    file
    filename of the breakpoint (String)
    pos
    line number of the breakpoint (int)
    count
    ignore count to be set (int)

    DEBUGGER__.ignore_watch_point

    ignore_watch_point(count)

    Method to set the ignore count of a watch expression.

    cond
    expression of the watch expression (String)
    count
    ignore count to be set (int)

    DEBUGGER__.last_thread

    last_thread()

    Method returning the last active thread.

    Returns:
    active thread

    DEBUGGER__.quit

    quit()

    Method to quit the debugger.

    status
    exit status of the program

    DEBUGGER__.resume

    resume()

    Method to resume the program being debugged.

    DEBUGGER__.resume_all

    resume_all()

    Method to resume all threads.

    DEBUGGER__.set_client

    set_client()

    Method to set the client handling the connection.

    debugger
    reference to the object handling the connection

    DEBUGGER__.set_last_thread

    set_last_thread()

    Method to remember the last thread.

    th
    thread to be remembered.

    DEBUGGER__.skip_it?

    skip_it?()

    Method to filter out debugger files.

    Tracing is turned off for files that are part of the debugger that are called from the application being debugged.

    file
    name of the file to be checked (String)
    Returns:
    flag indicating, whether the file should be skipped (boolean)

    DEBUGGER__.stdout

    stdout()

    Method returning the stdout object.

    Returns:
    reference to the stdout object

    DEBUGGER__.stdout=

    stdout=()

    Method to set the stdout object.

    s
    reference to the stdout object

    DEBUGGER__.suspend

    suspend()

    Method to suspend the program being debugged.

    DEBUGGER__.thnum

    thnum()

    Method returning the thread number of the current thread.

    Returns:
    thread number of the current thread.

    DEBUGGER__.trace_func

    trace_func(file, line, id, binding_, klass)

    Method executed by the tracing facility.

    event
    the tracing event (String)
    file
    the name of the file being traced (String)
    line
    the line number being traced (int)
    id
    object id
    binding_
    a binding object
    klass
    name of a class

    DEBUGGER__.waiting

    waiting()

    Method returning the waiting list.

    Returns:
    the waiting list


    Mutex

    Class implementing a mutex.

    Derived from

    None

    Class Attributes

    None

    Class Methods

    None

    Methods

    initialize Constructor
    lock Method to lock the mutex.
    locked? Method returning the locked state.
    unlock Method to unlock the mutex.

    Static Methods

    None

    Mutex.initialize

    initialize()

    Constructor

    Mutex.lock

    lock()

    Method to lock the mutex.

    Returns:
    the mutex

    Mutex.locked?

    locked?()

    Method returning the locked state.

    Returns:
    flag indicating the locked state (boolean)

    Mutex.unlock

    unlock()

    Method to unlock the mutex.

    Returns:
    the mutex


    SilentObject

    Class defining an object that ignores all messages.

    Derived from

    None

    Class Attributes

    None

    Class Methods

    None

    Methods

    method_missing Method invoked for all messages it cannot handle.

    Static Methods

    None

    SilentObject.method_missing

    method_missing(*a, &b)

    Method invoked for all messages it cannot handle.

    msg_id
    symbol for the method called
    *a
    arguments passed to the missing method
    &b
    unknown


    context

    context(thread=Thread.current)

    Method returning the context of a thread.

    th
    threat the context is requested for
    Returns:
    context object for the thread


    debug_thread_info

    debug_thread_info(input, binding_)

    Method handling the thread related debug commands.

    input
    debug command (String)
    binding_
    reference to the binding object


    eventLoop

    eventLoop()

    Method calling the main event loop.



    eventPoll

    eventPoll()

    Method calling the main function polling for an event sent by the IDE.



    get_thread

    get_thread(num)

    Method returning a thread by number.

    num
    thread number (int)
    Returns:
    thread with the requested number


    interrupt

    interrupt()

    Method to stop execution at the next instruction.



    make_thread_list

    make_thread_list()

    Method to create a thread list.



    thread_list

    thread_list(num)

    Method to list the state of a thread.

    num
    thread number (int)


    thread_list_all

    thread_list_all()

    Method to list the state of all threads.



    traceRuby?

    traceRuby?()

    Method to check, if we should trace into the Ruby interpreter libraries.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.QScintilla.TypingCompleters.html0000644000175000001440000000013212261331354031134 xustar000000000000000030 mtime=1388688108.657230142 30 atime=1389081085.020724364 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.QScintilla.TypingCompleters.html0000644000175000001440000000253612261331354030674 0ustar00detlevusers00000000000000 eric4.QScintilla.TypingCompleters

    eric4.QScintilla.TypingCompleters

    Package implementing lexers for the various supported programming languages.

    Modules

    CompleterBase Module implementing a base class for all typing completers.
    CompleterPython Module implementing a typing completer for Python.
    CompleterRuby Module implementing a typing completer for Ruby.
    TypingCompleters Package implementing lexers for the various supported programming languages.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.Plugins.WizardPlugins.html0000644000175000001440000000013212261331354030004 xustar000000000000000030 mtime=1388688108.661230144 30 atime=1389081085.020724364 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.Plugins.WizardPlugins.html0000644000175000001440000000335512261331354027544 0ustar00detlevusers00000000000000 eric4.Plugins.WizardPlugins

    eric4.Plugins.WizardPlugins

    Package containing the various core wizard plugins.

    Packages

    ColorDialogWizard Package implementing the color dialog wizard.
    FileDialogWizard Package implementing the file dialog wizard.
    FontDialogWizard Package implementing the font dialog wizard.
    InputDialogWizard Package implementing the input dialog wizard.
    MessageBoxWizard Package implementing the message box wizard.
    PyRegExpWizard Package implementing the Python re wizard.
    QRegExpWizard Package implementing the QRegExp wizard.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.IconEditor.IconSizeDialog.html0000644000175000001440000000013212261331351027353 xustar000000000000000030 mtime=1388688105.469228541 30 atime=1389081085.020724364 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.IconEditor.IconSizeDialog.html0000644000175000001440000000437612261331351027117 0ustar00detlevusers00000000000000 eric4.IconEditor.IconSizeDialog

    eric4.IconEditor.IconSizeDialog

    Module implementing a dialog to enter the icon size.

    Global Attributes

    None

    Classes

    IconSizeDialog Class implementing a dialog to enter the icon size.

    Functions

    None


    IconSizeDialog

    Class implementing a dialog to enter the icon size.

    Derived from

    QDialog, Ui_IconSizeDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    IconSizeDialog Constructor
    getData Public method to get the entered data.

    Static Methods

    None

    IconSizeDialog (Constructor)

    IconSizeDialog(width, height, parent = None)

    Constructor

    width
    width to be set (integer)
    height
    height to be set (integer)
    parent
    reference to the parent widget (QWidget)

    IconSizeDialog.getData

    getData()

    Public method to get the entered data.

    Returns:
    tuple with width and height (tuple of two integers)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DocumentationTools.TemplatesListsStyleC0000644000175000001440000000013212261331352031442 xustar000000000000000030 mtime=1388688106.070228843 30 atime=1389081085.020724364 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.DocumentationTools.TemplatesListsStyleCSS.html0000644000175000001440000000420012261331352032401 0ustar00detlevusers00000000000000 eric4.DocumentationTools.TemplatesListsStyleCSS

    eric4.DocumentationTools.TemplatesListsStyleCSS

    Module implementing templates for the documentation generator (lists style).

    Global Attributes

    authorInfoTemplate
    classTemplate
    constructorTemplate
    deprecatedTemplate
    eventsListEntryTemplate
    eventsListTemplate
    exceptionsListEntryTemplate
    exceptionsListTemplate
    footerTemplate
    functionTemplate
    headerTemplate
    indexBodyTemplate
    indexListEntryTemplate
    indexListModulesTemplate
    indexListPackagesTemplate
    listEntryDeprecatedTemplate
    listEntryNoneTemplate
    listEntrySimpleTemplate
    listEntryTemplate
    listTemplate
    methodTemplate
    moduleTemplate
    paragraphTemplate
    parametersListEntryTemplate
    parametersListTemplate
    rbFileTemplate
    rbModuleTemplate
    rbModulesClassTemplate
    returnsTemplate
    seeLinkTemplate
    seeListEntryTemplate
    seeListTemplate
    signalsListEntryTemplate
    signalsListTemplate
    sinceInfoTemplate

    Classes

    None

    Functions

    None

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.PluginManager.PluginRepositoryDialog.ht0000644000175000001440000000013212261331351031327 xustar000000000000000030 mtime=1388688105.237228425 30 atime=1389081085.021724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.PluginManager.PluginRepositoryDialog.html0000644000175000001440000004343712261331351031425 0ustar00detlevusers00000000000000 eric4.PluginManager.PluginRepositoryDialog

    eric4.PluginManager.PluginRepositoryDialog

    Module implementing a dialog showing the available plugins.

    Global Attributes

    authorRole
    descrRole
    filenameRole
    urlRole

    Classes

    PluginRepositoryDialog Class for the dialog variant.
    PluginRepositoryWidget Class implementing a dialog showing the available plugins.
    PluginRepositoryWindow Main window class for the standalone dialog.

    Functions

    None


    PluginRepositoryDialog

    Class for the dialog variant.

    Derived from

    QDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    PluginRepositoryDialog Constructor
    __closeAndInstall Private slot to handle the closeAndInstall signal.
    getDownloadedPlugins Public method to get the list of recently downloaded plugin files.

    Static Methods

    None

    PluginRepositoryDialog (Constructor)

    PluginRepositoryDialog(parent = None)

    Constructor

    parent
    reference to the parent widget (QWidget)

    PluginRepositoryDialog.__closeAndInstall

    __closeAndInstall()

    Private slot to handle the closeAndInstall signal.

    PluginRepositoryDialog.getDownloadedPlugins

    getDownloadedPlugins()

    Public method to get the list of recently downloaded plugin files.

    Returns:
    list of plugin filenames (QStringList)


    PluginRepositoryWidget

    Class implementing a dialog showing the available plugins.

    Signals

    closeAndInstall
    emitted when the Close & Install button is pressed

    Derived from

    QWidget, Ui_PluginRepositoryDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    PluginRepositoryWidget Constructor
    __downloadCancel Private slot to cancel the current download.
    __downloadFile Private slot to download the given file.
    __downloadFileDone Private method called, after the file has been downloaded from the internet.
    __downloadPlugin Private method to download the next plugin.
    __downloadPluginDone Private method called, when the download of a plugin is finished.
    __downloadPlugins Private slot to download the selected plugins.
    __downloadPluginsDone Private method called, when the download of the plugins is finished.
    __downloadProgress Private slot to show the download progress.
    __downloadRepositoryFileDone Private method called after the repository file was downloaded.
    __formatDescription Private method to format the description.
    __isUpToDate Private method to check, if the given archive is up-to-date.
    __populateList Private method to populate the list of available plugins.
    __proxyAuthenticationRequired Private slot to handle a proxy authentication request.
    __resortRepositoryList Private method to resort the tree.
    __selectedItems Private method to get all selected items without the toplevel ones.
    __sslErrors Private slot to handle SSL errors.
    __updateList Private slot to download a new list and display the contents.
    addEntry Public method to add an entry to the list.
    getDownloadedPlugins Public method to get the list of recently downloaded plugin files.
    on_buttonBox_clicked Private slot to handle the click of a button of the button box.
    on_repositoryList_currentItemChanged Private slot to handle the change of the current item.
    on_repositoryList_itemSelectionChanged Private slot to handle a change of the selection.
    on_repositoryUrlEditButton_toggled Private slot to set the read only status of the repository URL line edit.

    Static Methods

    None

    PluginRepositoryWidget (Constructor)

    PluginRepositoryWidget(parent = None)

    Constructor

    parent
    parent of this dialog (QWidget)

    PluginRepositoryWidget.__downloadCancel

    __downloadCancel()

    Private slot to cancel the current download.

    PluginRepositoryWidget.__downloadFile

    __downloadFile(url, filename, doneMethod = None)

    Private slot to download the given file.

    url
    URL for the download (string or QString)
    filename
    local name of the file (string or QString)
    doneMethod
    method to be called when done

    PluginRepositoryWidget.__downloadFileDone

    __downloadFileDone()

    Private method called, after the file has been downloaded from the internet.

    PluginRepositoryWidget.__downloadPlugin

    __downloadPlugin()

    Private method to download the next plugin.

    PluginRepositoryWidget.__downloadPluginDone

    __downloadPluginDone(status, filename)

    Private method called, when the download of a plugin is finished.

    status
    flaging indicating a successful download (boolean)
    filename
    full path of the downloaded file (QString)

    PluginRepositoryWidget.__downloadPlugins

    __downloadPlugins()

    Private slot to download the selected plugins.

    PluginRepositoryWidget.__downloadPluginsDone

    __downloadPluginsDone()

    Private method called, when the download of the plugins is finished.

    PluginRepositoryWidget.__downloadProgress

    __downloadProgress(done, total)

    Private slot to show the download progress.

    done
    number of bytes downloaded so far (integer)
    total
    total bytes to be downloaded (integer)

    PluginRepositoryWidget.__downloadRepositoryFileDone

    __downloadRepositoryFileDone(status, filename)

    Private method called after the repository file was downloaded.

    status
    flaging indicating a successful download (boolean)
    filename
    full path of the downloaded file (QString)

    PluginRepositoryWidget.__formatDescription

    __formatDescription(lines)

    Private method to format the description.

    lines
    lines of the description (QStringList)
    Returns:
    formatted description (QString)

    PluginRepositoryWidget.__isUpToDate

    __isUpToDate(filename, version)

    Private method to check, if the given archive is up-to-date.

    filename
    data for the filename field (string or QString)
    version
    data for the version field (string or QString)
    Returns:
    flag indicating up-to-date (boolean)

    PluginRepositoryWidget.__populateList

    __populateList()

    Private method to populate the list of available plugins.

    PluginRepositoryWidget.__proxyAuthenticationRequired

    __proxyAuthenticationRequired(proxy, auth)

    Private slot to handle a proxy authentication request.

    proxy
    reference to the proxy object (QNetworkProxy)
    auth
    reference to the authenticator object (QAuthenticator)

    PluginRepositoryWidget.__resortRepositoryList

    __resortRepositoryList()

    Private method to resort the tree.

    PluginRepositoryWidget.__selectedItems

    __selectedItems()

    Private method to get all selected items without the toplevel ones.

    Returns:
    list of selected items (QList)

    PluginRepositoryWidget.__sslErrors

    __sslErrors(reply, errors)

    Private slot to handle SSL errors.

    reply
    reference to the reply object (QNetworkReply)
    errors
    list of SSL errors (list of QSslError)

    PluginRepositoryWidget.__updateList

    __updateList()

    Private slot to download a new list and display the contents.

    PluginRepositoryWidget.addEntry

    addEntry(name, short, description, url, author, version, filename, status)

    Public method to add an entry to the list.

    name
    data for the name field (string or QString)
    short
    data for the short field (string or QString)
    description
    data for the description field (list of string or QStringList)
    url
    data for the url field (string or QString)
    author
    data for the author field (string or QString)
    version
    data for the version field (string or QString)
    filename
    data for the filename field (string or QString)
    status
    status of the plugin (string [stable, unstable, unknown])

    PluginRepositoryWidget.getDownloadedPlugins

    getDownloadedPlugins()

    Public method to get the list of recently downloaded plugin files.

    Returns:
    list of plugin filenames (QStringList)

    PluginRepositoryWidget.on_buttonBox_clicked

    on_buttonBox_clicked(button)

    Private slot to handle the click of a button of the button box.

    PluginRepositoryWidget.on_repositoryList_currentItemChanged

    on_repositoryList_currentItemChanged(current, previous)

    Private slot to handle the change of the current item.

    current
    reference to the new current item (QTreeWidgetItem)
    previous
    reference to the old current item (QTreeWidgetItem)

    PluginRepositoryWidget.on_repositoryList_itemSelectionChanged

    on_repositoryList_itemSelectionChanged()

    Private slot to handle a change of the selection.

    PluginRepositoryWidget.on_repositoryUrlEditButton_toggled

    on_repositoryUrlEditButton_toggled(checked)

    Private slot to set the read only status of the repository URL line edit.

    checked
    state of the push button (boolean)


    PluginRepositoryWindow

    Main window class for the standalone dialog.

    Derived from

    KQMainWindow

    Class Attributes

    None

    Class Methods

    None

    Methods

    PluginRepositoryWindow Constructor
    __startPluginInstall Private slot to start the eric4 plugin installation dialog.

    Static Methods

    None

    PluginRepositoryWindow (Constructor)

    PluginRepositoryWindow(parent = None)

    Constructor

    parent
    reference to the parent widget (QWidget)

    PluginRepositoryWindow.__startPluginInstall

    __startPluginInstall()

    Private slot to start the eric4 plugin installation dialog.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Tasks.TaskViewer.html0000644000175000001440000000013212261331352025623 xustar000000000000000030 mtime=1388688106.068228842 30 atime=1389081085.021724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Tasks.TaskViewer.html0000644000175000001440000005701512261331352025365 0ustar00detlevusers00000000000000 eric4.Tasks.TaskViewer

    eric4.Tasks.TaskViewer

    Module implementing a task viewer and associated classes.

    Tasks can be defined manually or automatically. Automatically generated tasks are derived from a comment with a special introductory text. This text is configurable.

    Global Attributes

    None

    Classes

    Task Class implementing the task data structure.
    TaskFilter Class implementing a filter for tasks.
    TaskViewer Class implementing the task viewer.

    Functions

    None


    Task

    Class implementing the task data structure.

    Derived from

    QTreeWidgetItem

    Class Attributes

    None

    Class Methods

    None

    Methods

    Task Constructor
    colorizeTask Public slot to set the colors of the task item.
    getFilename Public method to retrieve the tasks filename.
    getLineno Public method to retrieve the tasks linenumber.
    isCompleted Public slot to return the completion status.
    isProjectFileTask Public slot to get an indication, if this task is related to a project file.
    isProjectTask Public slot to return the project relation status.
    setCompleted Public slot to update the completed flag.
    setDescription Public slot to update the description.
    setLongText Public slot to update the longtext field.
    setPriority Public slot to update the priority.
    setProjectTask Public method to set the project relation flag.

    Static Methods

    None

    Task (Constructor)

    Task(description, priority = 1, filename = "", lineno = 0, completed = False, _time = 0, isProjectTask = False, isBugfixTask = False, project = None, longtext = "")

    Constructor

    parent
    parent widget of the task (QWidget)
    description
    descriptive text of the task (string or QString)
    priority
    priority of the task (0=high, 1=normal, 2=low)
    filename
    filename containing the task (string or QString)
    lineno
    line number containing the task (integer)
    completed
    flag indicating completion status (boolean)
    _time
    creation time of the task (float, if 0 use current time)
    isProjectTask
    flag indicating a task related to the current project (boolean)
    isBugfixTask
    flag indicating a bugfix task (boolean)
    project
    reference to the project object (Project)
    longtext
    explanatory text of the task (string or QString)

    Task.colorizeTask

    colorizeTask()

    Public slot to set the colors of the task item.

    Task.getFilename

    getFilename()

    Public method to retrieve the tasks filename.

    Returns:
    filename (string)

    Task.getLineno

    getLineno()

    Public method to retrieve the tasks linenumber.

    Returns:
    linenumber (integer)

    Task.isCompleted

    isCompleted()

    Public slot to return the completion status.

    Returns:
    flag indicating the completion status (boolean)

    Task.isProjectFileTask

    isProjectFileTask()

    Public slot to get an indication, if this task is related to a project file.

    Returns:
    flag indicating a project file task (boolean)

    Task.isProjectTask

    isProjectTask()

    Public slot to return the project relation status.

    Returns:
    flag indicating the project relation status (boolean)

    Task.setCompleted

    setCompleted(completed)

    Public slot to update the completed flag.

    completed
    flag indicating completion status (boolean)

    Task.setDescription

    setDescription(description)

    Public slot to update the description.

    longtext
    explanatory text of the task (string or QString)

    Task.setLongText

    setLongText(longtext)

    Public slot to update the longtext field.

    longtext
    descriptive text of the task (string or QString)

    Task.setPriority

    setPriority(priority)

    Public slot to update the priority.

    priority
    priority of the task (0=high, 1=normal, 2=low)

    Task.setProjectTask

    setProjectTask(pt)

    Public method to set the project relation flag.

    pt
    flag indicating a project task (boolean)


    TaskFilter

    Class implementing a filter for tasks.

    Derived from

    object

    Class Attributes

    None

    Class Methods

    None

    Methods

    TaskFilter Constructor
    hasActiveFilter Public method to check for active filters.
    setActive Public method to activate the filter.
    setDescriptionFilter Public method to set the description filter.
    setFileNameFilter Public method to set the filename filter.
    setPrioritiesFilter Public method to set the priorities filter.
    setScopeFilter Public method to set the scope filter.
    setStatusFilter Public method to set the status filter.
    setTypeFilter Public method to set the type filter.
    showTask Public method to check, if a task should be shown.

    Static Methods

    None

    TaskFilter (Constructor)

    TaskFilter()

    Constructor

    TaskFilter.hasActiveFilter

    hasActiveFilter()

    Public method to check for active filters.

    Returns:
    flag indicating an active filter was found (boolean)

    TaskFilter.setActive

    setActive(enabled)

    Public method to activate the filter.

    enabled
    flag indicating the activation state (boolean)

    TaskFilter.setDescriptionFilter

    setDescriptionFilter(filter)

    Public method to set the description filter.

    filter
    a regular expression for the description filter to set (string or QString) or None

    TaskFilter.setFileNameFilter

    setFileNameFilter(filter)

    Public method to set the filename filter.

    filter
    a wildcard expression for the filename filter to set (string or QString) or None

    TaskFilter.setPrioritiesFilter

    setPrioritiesFilter(priorities)

    Public method to set the priorities filter.

    priorities
    list of task priorities (list of integer) or None

    TaskFilter.setScopeFilter

    setScopeFilter(scope)

    Public method to set the scope filter.

    scope
    flag indicating a project task (boolean) or None

    TaskFilter.setStatusFilter

    setStatusFilter(status)

    Public method to set the status filter.

    status
    flag indicating a completed task (boolean) or None

    TaskFilter.setTypeFilter

    setTypeFilter(type_)

    Public method to set the type filter.

    type_
    flag indicating a bugfix task (boolean) or None

    TaskFilter.showTask

    showTask(task)

    Public method to check, if a task should be shown.

    task
    reference to the task object to check (Task)
    Returns:
    flag indicatin whether the task should be shown (boolean)


    TaskViewer

    Class implementing the task viewer.

    Signals

    displayFile(string, integer)
    emitted to go to a file task

    Derived from

    QTreeWidget

    Class Attributes

    None

    Class Methods

    None

    Methods

    TaskViewer Constructor
    __activateFilter Private slot to handle the "Filtered display" context menu entry.
    __configure Private method to open the configuration dialog.
    __configureFilter Private slot to handle the "Configure filter" context menu entry.
    __copyTask Private slot to handle the "Copy" context menu entry.
    __deleteCompleted Private slot to handle the "Delete Completed Tasks" context menu entry.
    __deleteTask Private slot to handle the "Delete Task" context menu entry.
    __editTaskProperties Private slot to handle the "Properties" context menu entry
    __goToTask Private slot to handle the "Go To" context menu entry.
    __markCompleted Private slot to handle the "Mark Completed" context menu entry.
    __newTask Private slot to handle the "New Task" context menu entry.
    __pasteTask Private slot to handle the "Paste" context menu entry.
    __refreshDisplay Private method to refresh the display.
    __regenerateProjectTasks Private slot to handle the "Regenerated projet tasks" context menu entry.
    __resizeColumns Private method to resize the list columns.
    __resort Private method to resort the tree.
    __showContextMenu Private slot to show the context menu of the list.
    __taskItemActivated Private slot to handle the activation of an item.
    addFileTask Public slot to add a file related task.
    addTask Public slot to add a task.
    clearFileTasks Public slot to clear all tasks related to a file.
    clearProjectTasks Public slot to clear project related tasks.
    clearTasks Public slot to clear all tasks from display.
    getGlobalTasks Public method to retrieve all non project related tasks.
    getProjectTasks Public method to retrieve all project related tasks.
    handlePreferencesChanged Public slot to react to changes of the preferences.
    setProjectOpen Public slot to set the project status.

    Static Methods

    None

    TaskViewer (Constructor)

    TaskViewer(parent, project)

    Constructor

    parent
    the parent (QWidget)
    project
    reference to the project object

    TaskViewer.__activateFilter

    __activateFilter(on)

    Private slot to handle the "Filtered display" context menu entry.

    on
    flag indicating the filter state (boolean)

    TaskViewer.__configure

    __configure()

    Private method to open the configuration dialog.

    TaskViewer.__configureFilter

    __configureFilter()

    Private slot to handle the "Configure filter" context menu entry.

    TaskViewer.__copyTask

    __copyTask()

    Private slot to handle the "Copy" context menu entry.

    TaskViewer.__deleteCompleted

    __deleteCompleted()

    Private slot to handle the "Delete Completed Tasks" context menu entry.

    TaskViewer.__deleteTask

    __deleteTask()

    Private slot to handle the "Delete Task" context menu entry.

    TaskViewer.__editTaskProperties

    __editTaskProperties()

    Private slot to handle the "Properties" context menu entry

    TaskViewer.__goToTask

    __goToTask()

    Private slot to handle the "Go To" context menu entry.

    TaskViewer.__markCompleted

    __markCompleted()

    Private slot to handle the "Mark Completed" context menu entry.

    TaskViewer.__newTask

    __newTask()

    Private slot to handle the "New Task" context menu entry.

    TaskViewer.__pasteTask

    __pasteTask()

    Private slot to handle the "Paste" context menu entry.

    TaskViewer.__refreshDisplay

    __refreshDisplay()

    Private method to refresh the display.

    TaskViewer.__regenerateProjectTasks

    __regenerateProjectTasks()

    Private slot to handle the "Regenerated projet tasks" context menu entry.

    TaskViewer.__resizeColumns

    __resizeColumns()

    Private method to resize the list columns.

    TaskViewer.__resort

    __resort()

    Private method to resort the tree.

    TaskViewer.__showContextMenu

    __showContextMenu(coord)

    Private slot to show the context menu of the list.

    coord
    the position of the mouse pointer (QPoint)

    TaskViewer.__taskItemActivated

    __taskItemActivated(itm, col)

    Private slot to handle the activation of an item.

    itm
    reference to the activated item (QTreeWidgetItem)
    col
    column the item was activated in (integer)

    TaskViewer.addFileTask

    addFileTask(description, filename, lineno, isBugfixTask = False, longtext = "")

    Public slot to add a file related task.

    description
    descriptive text of the task (string or QString)
    filename
    filename containing the task (string or QString)
    lineno
    line number containing the task (integer)
    isBugfixTask
    flag indicating a bugfix task (boolean)
    longtext
    explanatory text of the task (string or QString)

    TaskViewer.addTask

    addTask(description, priority = 1, filename = "", lineno = 0, completed = False, _time = 0, isProjectTask = False, isBugfixTask = False, longtext = "")

    Public slot to add a task.

    description
    descriptive text of the task (string or QString)
    priority
    priority of the task (0=high, 1=normal, 2=low)
    filename
    filename containing the task (string or QString)
    lineno
    line number containing the task (integer)
    completed
    flag indicating completion status (boolean)
    _time
    creation time of the task (float, if 0 use current time)
    isProjectTask
    flag indicating a task related to the current project (boolean)
    isBugfixTask
    flag indicating a bugfix task (boolean)
    longtext
    explanatory text of the task (string or QString)

    TaskViewer.clearFileTasks

    clearFileTasks(filename, conditionally=False)

    Public slot to clear all tasks related to a file.

    filename
    name of the file (string or QString)
    conditionally
    flag indicating to clear the tasks of the file checking some conditions (boolean)

    TaskViewer.clearProjectTasks

    clearProjectTasks(fileOnly=False)

    Public slot to clear project related tasks.

    fileOnly=
    flag indicating to clear only file related project tasks (boolean)

    TaskViewer.clearTasks

    clearTasks()

    Public slot to clear all tasks from display.

    TaskViewer.getGlobalTasks

    getGlobalTasks()

    Public method to retrieve all non project related tasks.

    Returns:
    copy of tasks (list of Task)

    TaskViewer.getProjectTasks

    getProjectTasks()

    Public method to retrieve all project related tasks.

    Returns:
    copy of tasks (list of Task)

    TaskViewer.handlePreferencesChanged

    handlePreferencesChanged()

    Public slot to react to changes of the preferences.

    TaskViewer.setProjectOpen

    setProjectOpen(o = False)

    Public slot to set the project status.

    o
    flag indicating the project status

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DocumentationTools.__init__.html0000644000175000001440000000007410636722256030063 xustar000000000000000030 atime=1389081085.042724365 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.DocumentationTools.__init__.html0000644000175000001440000000733310636722256027616 0ustar00detlevusers00000000000000 eric4.DocumentationTools.__init__

    eric4.DocumentationTools.__init__

    Package implementing interfaces to source code documentation tools.

    It implements the high level interface and all the supporting dialogs for the supported source code documentors.

    Classes

    DocumentationTools Class implementing the high level interface.

    Functions

    None


    DocumentationTools

    Class implementing the high level interface.

    Derived from

    QObject

    Methods

    DocumentationTools Constructor
    __doEricapi Private slot to perform the eric4-api api generation.
    __doEricdoc Private slot to perform the eric4-doc api documentation generation.
    getActions Public method to get a list of all actions.
    initActions Public method to initialize the API documentation actions.
    initMenu Public method called to build the project API documentation submenu.

    DocumentationTools (Constructor)

    DocumentationTools(project, parent)

    Constructor

    project
    project object of the current project
    parent
    parent object of this class (QObject)

    DocumentationTools.__doEricapi

    __doEricapi()

    Private slot to perform the eric4-api api generation.

    DocumentationTools.__doEricdoc

    __doEricdoc()

    Private slot to perform the eric4-doc api documentation generation.

    DocumentationTools.getActions

    getActions()

    Public method to get a list of all actions.

    Returns:
    list of all actions (list of E4Action)

    DocumentationTools.initActions

    initActions()

    Public method to initialize the API documentation actions.

    DocumentationTools.initMenu

    initMenu()

    Public method called to build the project API documentation submenu.

    Returns:
    the menu or None


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DebugClients.Python3.DebugBase.html0000644000175000001440000000013212261331354030210 xustar000000000000000030 mtime=1388688108.054229839 30 atime=1389081085.042724365 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.DebugClients.Python3.DebugBase.html0000644000175000001440000004665612261331354027763 0ustar00detlevusers00000000000000 eric4.DebugClients.Python3.DebugBase

    eric4.DebugClients.Python3.DebugBase

    Module implementing the debug base class.

    Global Attributes

    gRecursionLimit

    Classes

    DebugBase Class implementing base class of the debugger.

    Functions

    printerr Module function used for debugging the debug client.
    setRecursionLimit Module function to set the recursion limit.


    DebugBase

    Class implementing base class of the debugger.

    Provides simple wrapper methods around bdb for the 'owning' client to call to step etc.

    Derived from

    bdb.Bdb

    Class Attributes

    None

    Class Methods

    None

    Methods

    DebugBase Constructor
    __do_clear Private method called to clear a temporary breakpoint.
    __do_clearWatch Private method called to clear a temporary watch expression.
    __effective Private method to determine, if a watch expression is effective.
    __extractExceptionName Private method to extract the exception name given the exception type object.
    __extract_stack Private member to return a list of stack frames.
    __skip_it Private method to filter out debugger files.
    break_anywhere Reimplemented from bdb.py to do some special things.
    break_here Reimplemented from bdb.py to fix the filename from the frame.
    clear_watch Public method to clear a watch expression.
    dispatch_exception Reimplemented from bdb.py to always call user_exception.
    dispatch_line Reimplemented from bdb.py to do some special things.
    dispatch_return Reimplemented from bdb.py to handle passive mode cleanly.
    fix_frame_filename Public method used to fixup the filename for a given frame.
    getCurrentFrame Public method to return the current frame.
    getCurrentFrameLocals Public method to return the locals dictionary of the current frame.
    getEvent Public method to return the last debugger event.
    getStack Public method to get the stack.
    get_break Reimplemented from bdb.py to get the first breakpoint of a particular line.
    get_watch Public method to get a watch expression.
    go Public method to resume the thread.
    isBroken Public method to return the broken state of the debugger.
    profile Public method used to trace some stuff independent of the debugger trace function.
    setRecursionDepth Public method to determine the current recursion depth.
    set_continue Reimplemented from bdb.py to always get informed of exceptions.
    set_quit Public method to quit.
    set_trace Overridden method of bdb.py to do some special setup.
    set_watch Public method to set a watch expression.
    step Public method to perform a step operation in this thread.
    stepOut Public method to perform a step out of the current call.
    stop_here Reimplemented to filter out debugger files.
    trace_dispatch Reimplemented from bdb.py to do some special things.
    user_exception Reimplemented to report an exception to the debug server.
    user_line Reimplemented to handle the program about to execute a particular line.
    user_return Reimplemented to report program termination to the debug server.

    Static Methods

    None

    DebugBase (Constructor)

    DebugBase(dbgClient)

    Constructor

    dbgClient
    the owning client

    DebugBase.__do_clear

    __do_clear(filename, lineno)

    Private method called to clear a temporary breakpoint.

    filename
    name of the file the bp belongs to
    lineno
    linenumber of the bp

    DebugBase.__do_clearWatch

    __do_clearWatch(cond)

    Private method called to clear a temporary watch expression.

    cond
    expression of the watch expression to be cleared (string)

    DebugBase.__effective

    __effective(frame)

    Private method to determine, if a watch expression is effective.

    frame
    the current execution frame
    Returns:
    tuple of watch expression and a flag to indicate, that a temporary watch expression may be deleted (bdb.Breakpoint, boolean)

    DebugBase.__extractExceptionName

    __extractExceptionName(exctype)

    Private method to extract the exception name given the exception type object.

    exctype
    type of the exception

    DebugBase.__extract_stack

    __extract_stack(exctb)

    Private member to return a list of stack frames.

    exctb
    exception traceback
    Returns:
    list of stack frames

    DebugBase.__skip_it

    __skip_it(frame)

    Private method to filter out debugger files.

    Tracing is turned off for files that are part of the debugger that are called from the application being debugged.

    frame
    the frame object
    Returns:
    flag indicating whether the debugger should skip this frame

    DebugBase.break_anywhere

    break_anywhere(frame)

    Reimplemented from bdb.py to do some special things.

    These speciality is to fix the filename from the frame (see fix_frame_filename for more info).

    frame
    the frame object
    Returns:
    flag indicating the break status (boolean)

    DebugBase.break_here

    break_here(frame)

    Reimplemented from bdb.py to fix the filename from the frame.

    See fix_frame_filename for more info.

    frame
    the frame object
    Returns:
    flag indicating the break status (boolean)

    DebugBase.clear_watch

    clear_watch(cond)

    Public method to clear a watch expression.

    cond
    expression of the watch expression to be cleared (string)

    DebugBase.dispatch_exception

    dispatch_exception(frame, arg)

    Reimplemented from bdb.py to always call user_exception.

    frame
    The current stack frame.
    arg
    The arguments
    Returns:
    local trace function

    DebugBase.dispatch_line

    dispatch_line(frame)

    Reimplemented from bdb.py to do some special things.

    This speciality is to check the connection to the debug server for new events (i.e. new breakpoints) while we are going through the code.

    frame
    The current stack frame.
    Returns:
    local trace function

    DebugBase.dispatch_return

    dispatch_return(frame, arg)

    Reimplemented from bdb.py to handle passive mode cleanly.

    frame
    The current stack frame.
    arg
    The arguments
    Returns:
    local trace function

    DebugBase.fix_frame_filename

    fix_frame_filename(frame)

    Public method used to fixup the filename for a given frame.

    The logic employed here is that if a module was loaded from a .pyc file, then the correct .py to operate with should be in the same path as the .pyc. The reason this logic is needed is that when a .pyc file is generated, the filename embedded and thus what is readable in the code object of the frame object is the fully qualified filepath when the pyc is generated. If files are moved from machine to machine this can break debugging as the .pyc will refer to the .py on the original machine. Another case might be sharing code over a network... This logic deals with that.

    frame
    the frame object

    DebugBase.getCurrentFrame

    getCurrentFrame()

    Public method to return the current frame.

    Returns:
    the current frame

    DebugBase.getCurrentFrameLocals

    getCurrentFrameLocals()

    Public method to return the locals dictionary of the current frame.

    Returns:
    locals dictionary of the current frame

    DebugBase.getEvent

    getEvent()

    Public method to return the last debugger event.

    Returns:
    last debugger event (string)

    DebugBase.getStack

    getStack()

    Public method to get the stack.

    Returns:
    list of lists with file name (string), line number (integer) and function name (string)

    DebugBase.get_break

    get_break(filename, lineno)

    Reimplemented from bdb.py to get the first breakpoint of a particular line.

    Because eric4 supports only one breakpoint per line, this overwritten method will return this one and only breakpoint.

    filename
    the filename of the bp to retrieve (string)
    lineno
    the linenumber of the bp to retrieve (integer)
    Returns:
    breakpoint or None, if there is no bp

    DebugBase.get_watch

    get_watch(cond)

    Public method to get a watch expression.

    cond
    expression of the watch expression to be cleared (string)

    DebugBase.go

    go(special)

    Public method to resume the thread.

    It resumes the thread stopping only at breakpoints or exceptions.

    special
    flag indicating a special continue operation

    DebugBase.isBroken

    isBroken()

    Public method to return the broken state of the debugger.

    Returns:
    flag indicating the broken state (boolean)

    DebugBase.profile

    profile(frame, event, arg)

    Public method used to trace some stuff independent of the debugger trace function.

    frame
    The current stack frame.
    event
    The trace event (string)
    arg
    The arguments

    DebugBase.setRecursionDepth

    setRecursionDepth(frame)

    Public method to determine the current recursion depth.

    frame
    The current stack frame.

    DebugBase.set_continue

    set_continue(special)

    Reimplemented from bdb.py to always get informed of exceptions.

    special
    flag indicating a special continue operation

    DebugBase.set_quit

    set_quit()

    Public method to quit.

    It wraps call to bdb to clear the current frame properly.

    DebugBase.set_trace

    set_trace(frame = None)

    Overridden method of bdb.py to do some special setup.

    frame
    frame to start debugging from

    DebugBase.set_watch

    set_watch(cond, temporary = False)

    Public method to set a watch expression.

    cond
    expression of the watch expression (string)
    temporary
    flag indicating a temporary watch expression (boolean)

    DebugBase.step

    step(traceMode)

    Public method to perform a step operation in this thread.

    traceMode
    If it is True, then the step is a step into, otherwise it is a step over.

    DebugBase.stepOut

    stepOut()

    Public method to perform a step out of the current call.

    DebugBase.stop_here

    stop_here(frame)

    Reimplemented to filter out debugger files.

    Tracing is turned off for files that are part of the debugger that are called from the application being debugged.

    frame
    the frame object
    Returns:
    flag indicating whether the debugger should stop here

    DebugBase.trace_dispatch

    trace_dispatch(frame, event, arg)

    Reimplemented from bdb.py to do some special things.

    This specialty is to check the connection to the debug server for new events (i.e. new breakpoints) while we are going through the code.

    frame
    The current stack frame.
    event
    The trace event (string)
    arg
    The arguments
    Returns:
    local trace function

    DebugBase.user_exception

    user_exception(frame, excinfo, unhandled = False)

    Reimplemented to report an exception to the debug server.

    frame
    the frame object
    excinfo
    information about the exception
    unhandled
    flag indicating an uncaught exception

    DebugBase.user_line

    user_line(frame)

    Reimplemented to handle the program about to execute a particular line.

    frame
    the frame object

    DebugBase.user_return

    user_return(frame, retval)

    Reimplemented to report program termination to the debug server.

    frame
    the frame object
    retval
    the return value of the program


    printerr

    printerr(s)

    Module function used for debugging the debug client.

    s
    data to be printed


    setRecursionLimit

    setRecursionLimit(limit)

    Module function to set the recursion limit.

    limit
    recursion limit (integer)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsSubversion.Config0000644000175000001440000000013112261331352031302 xustar000000000000000029 mtime=1388688106.96022929 30 atime=1389081085.043724364 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsSubversion.Config.html0000644000175000001440000000171212261331352032001 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsSubversion.Config

    eric4.Plugins.VcsPlugins.vcsSubversion.Config

    Module defining configuration variables for the subversion package

    Global Attributes

    ConfigSvnProtocols
    DefaultConfig
    DefaultIgnores

    Classes

    None

    Functions

    None

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.Lexers.LexerJava.html0000644000175000001440000000013212261331354027641 xustar000000000000000030 mtime=1388688108.560230093 30 atime=1389081085.043724364 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.Lexers.LexerJava.html0000644000175000001440000000653312261331354027402 0ustar00detlevusers00000000000000 eric4.QScintilla.Lexers.LexerJava

    eric4.QScintilla.Lexers.LexerJava

    Module implementing a Java lexer with some additional methods.

    Global Attributes

    None

    Classes

    LexerJava Subclass to implement some additional lexer dependant methods.

    Functions

    None


    LexerJava

    Subclass to implement some additional lexer dependant methods.

    Derived from

    QsciLexerJava, Lexer

    Class Attributes

    None

    Class Methods

    None

    Methods

    LexerJava Constructor
    defaultKeywords Public method to get the default keywords.
    initProperties Public slot to initialize the properties.
    isCommentStyle Public method to check, if a style is a comment style.
    isStringStyle Public method to check, if a style is a string style.

    Static Methods

    None

    LexerJava (Constructor)

    LexerJava(parent=None)

    Constructor

    parent
    parent widget of this lexer

    LexerJava.defaultKeywords

    defaultKeywords(kwSet)

    Public method to get the default keywords.

    kwSet
    number of the keyword set (integer)
    Returns:
    string giving the keywords (string) or None

    LexerJava.initProperties

    initProperties()

    Public slot to initialize the properties.

    LexerJava.isCommentStyle

    isCommentStyle(style)

    Public method to check, if a style is a comment style.

    Returns:
    flag indicating a comment style (boolean)

    LexerJava.isStringStyle

    isStringStyle(style)

    Public method to check, if a style is a string style.

    Returns:
    flag indicating a string style (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.Bookmarks.BookmarksMenu.html0000644000175000001440000000013212261331353031271 xustar000000000000000030 mtime=1388688107.849229736 30 atime=1389081085.043724364 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.Bookmarks.BookmarksMenu.html0000644000175000001440000001573412261331353031035 0ustar00detlevusers00000000000000 eric4.Helpviewer.Bookmarks.BookmarksMenu

    eric4.Helpviewer.Bookmarks.BookmarksMenu

    Module implementing the bookmarks menu.

    Global Attributes

    None

    Classes

    BookmarksMenu Class implementing the bookmarks menu base class.
    BookmarksMenuBarMenu Class implementing a dynamically populated menu for bookmarks.

    Functions

    None


    BookmarksMenu

    Class implementing the bookmarks menu base class.

    Signals

    newUrl(const QUrl&, const QString&)
    emitted to open a URL in a new tab
    openUrl(const QUrl&, const QString&)
    emitted to open a URL in the current tab

    Derived from

    E4ModelMenu

    Class Attributes

    None

    Class Methods

    None

    Methods

    BookmarksMenu Constructor
    __activated Private slot handling the activated signal.
    __contextMenuRequested Private slot to handle the context menu request.
    __openAll Private slot to open all the menu's items.
    __openBookmark Private slot to open a bookmark in the current browser tab.
    __openBookmarkInNewTab Private slot to open a bookmark in a new browser tab.
    __removeBookmark Private slot to remove a bookmark.
    createBaseMenu Public method to get the menu that is used to populate sub menu's.
    postPopulated Public method to add any actions after the tree.

    Static Methods

    None

    BookmarksMenu (Constructor)

    BookmarksMenu(parent = None)

    Constructor

    parent
    reference to the parent widget (QWidget)

    BookmarksMenu.__activated

    __activated(idx)

    Private slot handling the activated signal.

    idx
    index of the activated item (QModelIndex)

    BookmarksMenu.__contextMenuRequested

    __contextMenuRequested(pos)

    Private slot to handle the context menu request.

    pos
    position the context menu shall be shown (QPoint)

    BookmarksMenu.__openAll

    __openAll()

    Private slot to open all the menu's items.

    BookmarksMenu.__openBookmark

    __openBookmark()

    Private slot to open a bookmark in the current browser tab.

    BookmarksMenu.__openBookmarkInNewTab

    __openBookmarkInNewTab()

    Private slot to open a bookmark in a new browser tab.

    BookmarksMenu.__removeBookmark

    __removeBookmark()

    Private slot to remove a bookmark.

    BookmarksMenu.createBaseMenu

    createBaseMenu()

    Public method to get the menu that is used to populate sub menu's.

    Returns:
    reference to the menu (BookmarksMenu)

    BookmarksMenu.postPopulated

    postPopulated()

    Public method to add any actions after the tree.



    BookmarksMenuBarMenu

    Class implementing a dynamically populated menu for bookmarks.

    Derived from

    BookmarksMenu

    Class Attributes

    None

    Class Methods

    None

    Methods

    BookmarksMenuBarMenu Constructor
    prePopulated Public method to add any actions before the tree.
    setInitialActions Public method to set the list of actions that should appear first in the menu.

    Static Methods

    None

    BookmarksMenuBarMenu (Constructor)

    BookmarksMenuBarMenu(parent = None)

    Constructor

    parent
    reference to the parent widget (QWidget)

    BookmarksMenuBarMenu.prePopulated

    prePopulated()

    Public method to add any actions before the tree.

    Returns:
    flag indicating if any actions were added

    BookmarksMenuBarMenu.setInitialActions

    setInitialActions(actions)

    Public method to set the list of actions that should appear first in the menu.

    actions
    list of initial actions (list of QAction)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ConfigurationPages.EditorSe0000644000175000001440000000013212261331353031255 xustar000000000000000030 mtime=1388688107.541229581 30 atime=1389081085.043724364 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.EditorSearchPage.html0000644000175000001440000000554612261331353033417 0ustar00detlevusers00000000000000 eric4.Preferences.ConfigurationPages.EditorSearchPage

    eric4.Preferences.ConfigurationPages.EditorSearchPage

    Module implementing the Editor Search configuration page.

    Global Attributes

    None

    Classes

    EditorSearchPage Class implementing the Editor Search configuration page.

    Functions

    create Module function to create the configuration page.


    EditorSearchPage

    Class implementing the Editor Search configuration page.

    Derived from

    ConfigurationPageBase, Ui_EditorSearchPage

    Class Attributes

    None

    Class Methods

    None

    Methods

    EditorSearchPage Constructor
    on_searchMarkerButton_clicked Private slot to set the colour of the search markers.
    save Public slot to save the Editor Search configuration.

    Static Methods

    None

    EditorSearchPage (Constructor)

    EditorSearchPage()

    Constructor

    EditorSearchPage.on_searchMarkerButton_clicked

    on_searchMarkerButton_clicked()

    Private slot to set the colour of the search markers.

    EditorSearchPage.save

    save()

    Public slot to save the Editor Search configuration.



    create

    create(dlg)

    Module function to create the configuration page.

    dlg
    reference to the configuration dialog

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.Helpviewer.History.html0000644000175000001440000000013212261331354027334 xustar000000000000000030 mtime=1388688108.658230142 30 atime=1389081085.043724364 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.Helpviewer.History.html0000644000175000001440000000321412261331354027066 0ustar00detlevusers00000000000000 eric4.Helpviewer.History

    eric4.Helpviewer.History

    Package implementing the history system.

    Modules

    HistoryCompleter Module implementing a special completer for the history.
    HistoryDialog Module implementing a dialog to manage history.
    HistoryFilterModel Module implementing the history filter model.
    HistoryManager Module implementing the history manager.
    HistoryMenu Module implementing the history menu.
    HistoryModel Module implementing the history model.
    HistoryTreeModel Module implementing the history tree model.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.E4Network.html0000644000175000001440000000013212261331354025404 xustar000000000000000030 mtime=1388688108.659230143 30 atime=1389081085.043724364 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.E4Network.html0000644000175000001440000000216212261331354025137 0ustar00detlevusers00000000000000 eric4.E4Network

    eric4.E4Network

    Package implementing some special network related objects.

    Modules

    E4NetworkHeaderDetailsDialog Module implementing a dialog to show the data of a response or reply header.
    E4NetworkMonitor Module implementing a network monitor dialog.
    E4NetworkProxyFactory Module implementing a network proxy factory.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.eric4_pluginrepository.html0000644000175000001440000000013212261331350027175 xustar000000000000000030 mtime=1388688104.221227914 30 atime=1389081085.043724364 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.eric4_pluginrepository.html0000644000175000001440000000317312261331350026733 0ustar00detlevusers00000000000000 eric4.eric4_pluginrepository

    eric4.eric4_pluginrepository

    Eric4 Plugin Installer

    This is the main Python script to install eric4 plugins from outside of the IDE.

    Global Attributes

    None

    Classes

    None

    Functions

    createMainWidget Function to create the main widget.
    main Main entry point into the application.


    createMainWidget

    createMainWidget(argv)

    Function to create the main widget.

    argv
    list of commandline parameters (list of strings)
    Returns:
    reference to the main widget (QWidget)


    main

    main()

    Main entry point into the application.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.Lexers.LexerIDL.html0000644000175000001440000000013212261331354027370 xustar000000000000000030 mtime=1388688108.540230083 30 atime=1389081085.043724364 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.Lexers.LexerIDL.html0000644000175000001440000000647512261331354027136 0ustar00detlevusers00000000000000 eric4.QScintilla.Lexers.LexerIDL

    eric4.QScintilla.Lexers.LexerIDL

    Module implementing an IDL lexer with some additional methods.

    Global Attributes

    None

    Classes

    LexerIDL Subclass to implement some additional lexer dependant methods.

    Functions

    None


    LexerIDL

    Subclass to implement some additional lexer dependant methods.

    Derived from

    QsciLexerIDL, Lexer

    Class Attributes

    None

    Class Methods

    None

    Methods

    LexerIDL Constructor
    defaultKeywords Public method to get the default keywords.
    initProperties Public slot to initialize the properties.
    isCommentStyle Public method to check, if a style is a comment style.
    isStringStyle Public method to check, if a style is a string style.

    Static Methods

    None

    LexerIDL (Constructor)

    LexerIDL(parent=None)

    Constructor

    parent
    parent widget of this lexer

    LexerIDL.defaultKeywords

    defaultKeywords(kwSet)

    Public method to get the default keywords.

    kwSet
    number of the keyword set (integer)
    Returns:
    string giving the keywords (string) or None

    LexerIDL.initProperties

    initProperties()

    Public slot to initialize the properties.

    LexerIDL.isCommentStyle

    isCommentStyle(style)

    Public method to check, if a style is a comment style.

    Returns:
    flag indicating a comment style (boolean)

    LexerIDL.isStringStyle

    isStringStyle(style)

    Public method to check, if a style is a string style.

    Returns:
    flag indicating a string style (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Debugger.WatchPointModel.html0000644000175000001440000000013212261331350027235 xustar000000000000000030 mtime=1388688104.779228195 30 atime=1389081085.043724364 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Debugger.WatchPointModel.html0000644000175000001440000002525112261331350026774 0ustar00detlevusers00000000000000 eric4.Debugger.WatchPointModel

    eric4.Debugger.WatchPointModel

    Module implementing the Watch expression model.

    Global Attributes

    None

    Classes

    WatchPointModel Class implementing a custom model for watch expressions.

    Functions

    None


    WatchPointModel

    Class implementing a custom model for watch expressions.

    Derived from

    QAbstractItemModel

    Class Attributes

    None

    Class Methods

    None

    Methods

    WatchPointModel Constructor
    addWatchPoint Public method to add a new watch expression to the list.
    columnCount Public method to get the current column count.
    data Public method to get the requested data.
    deleteAll Public method to delete all watch expressions.
    deleteWatchPointByIndex Public method to set the values of a watch expression given by index.
    deleteWatchPoints Public method to delete a list of watch expressions given by their indexes.
    flags Public method to get item flags.
    getWatchPointByIndex Public method to get the values of a watch expression given by index.
    getWatchPointIndex Public method to get the index of a watch expression given by expression.
    hasChildren Public method to check for the presence of child items.
    headerData Public method to get header data.
    index Public method to create an index.
    parent Public method to get the parent index.
    rowCount Public method to get the current row count.
    setWatchPointByIndex Public method to set the values of a watch expression given by index.
    setWatchPointEnabledByIndex Public method to set the enabled state of a watch expression given by index.

    Static Methods

    None

    WatchPointModel (Constructor)

    WatchPointModel(parent = None)

    Constructor

    reference
    to the parent widget (QObject)

    WatchPointModel.addWatchPoint

    addWatchPoint(cond, special, properties)

    Public method to add a new watch expression to the list.

    cond
    expression of the watch expression (string or QString)
    special
    special condition of the watch expression (string or QString)
    properties
    properties of the watch expression (tuple of temporary flag (bool), enabled flag (bool), ignore count (integer))

    WatchPointModel.columnCount

    columnCount(parent = QModelIndex())

    Public method to get the current column count.

    Returns:
    column count (integer)

    WatchPointModel.data

    data(index, role)

    Public method to get the requested data.

    index
    index of the requested data (QModelIndex)
    role
    role of the requested data (Qt.ItemDataRole)
    Returns:
    the requested data (QVariant)

    WatchPointModel.deleteAll

    deleteAll()

    Public method to delete all watch expressions.

    WatchPointModel.deleteWatchPointByIndex

    deleteWatchPointByIndex(index)

    Public method to set the values of a watch expression given by index.

    index
    index of the watch expression (QModelIndex)

    WatchPointModel.deleteWatchPoints

    deleteWatchPoints(idxList)

    Public method to delete a list of watch expressions given by their indexes.

    idxList
    list of watch expression indexes (list of QModelIndex)

    WatchPointModel.flags

    flags(index)

    Public method to get item flags.

    index
    index of the requested flags (QModelIndex)
    Returns:
    item flags for the given index (Qt.ItemFlags)

    WatchPointModel.getWatchPointByIndex

    getWatchPointByIndex(index)

    Public method to get the values of a watch expression given by index.

    index
    index of the watch expression (QModelIndex)
    Returns:
    watch expression (list of six values (expression, special condition, temporary flag, enabled flag, ignore count, index))

    WatchPointModel.getWatchPointIndex

    getWatchPointIndex(cond, special = "")

    Public method to get the index of a watch expression given by expression.

    cond
    expression of the watch expression (string or QString)
    special
    special condition of the watch expression (string or QString)
    Returns:
    index (QModelIndex)

    WatchPointModel.hasChildren

    hasChildren(parent = QModelIndex())

    Public method to check for the presence of child items.

    parent
    index of parent item (QModelIndex)
    Returns:
    flag indicating the presence of child items (boolean)

    WatchPointModel.headerData

    headerData(section, orientation, role = Qt.DisplayRole)

    Public method to get header data.

    section
    section number of the requested header data (integer)
    orientation
    orientation of the header (Qt.Orientation)
    role
    role of the requested data (Qt.ItemDataRole)
    Returns:
    header data (QVariant)

    WatchPointModel.index

    index(row, column, parent = QModelIndex())

    Public method to create an index.

    row
    row number for the index (integer)
    column
    column number for the index (integer)
    parent
    index of the parent item (QModelIndex)
    Returns:
    requested index (QModelIndex)

    WatchPointModel.parent

    parent(index)

    Public method to get the parent index.

    index
    index of item to get parent (QModelIndex)
    Returns:
    index of parent (QModelIndex)

    WatchPointModel.rowCount

    rowCount(parent = QModelIndex())

    Public method to get the current row count.

    Returns:
    row count (integer)

    WatchPointModel.setWatchPointByIndex

    setWatchPointByIndex(index, cond, special, properties)

    Public method to set the values of a watch expression given by index.

    index
    index of the watch expression (QModelIndex)
    cond
    expression of the watch expression (string or QString)
    special
    special condition of the watch expression (string or QString)
    properties
    properties of the watch expression (tuple of temporary flag (bool), enabled flag (bool), ignore count (integer))

    WatchPointModel.setWatchPointEnabledByIndex

    setWatchPointEnabledByIndex(index, enabled)

    Public method to set the enabled state of a watch expression given by index.

    index
    index of the watch expression (QModelIndex)
    enabled
    flag giving the enabled state (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsPySvn.SvnPropDelD0000644000175000001440000000013212261331353031157 xustar000000000000000030 mtime=1388688107.214229417 30 atime=1389081085.043724364 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsPySvn.SvnPropDelDialog.html0000644000175000001440000000570412261331353032676 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsPySvn.SvnPropDelDialog

    eric4.Plugins.VcsPlugins.vcsPySvn.SvnPropDelDialog

    Module implementing a dialog to enter the data for a new property.

    Global Attributes

    None

    Classes

    SvnPropDelDialog Class implementing a dialog to enter the data for a new property.

    Functions

    None


    SvnPropDelDialog

    Class implementing a dialog to enter the data for a new property.

    Derived from

    QDialog, Ui_SvnPropDelDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnPropDelDialog Constructor
    getData Public slot used to retrieve the data entered into the dialog.
    on_propNameEdit_textChanged Private method used to enable/disable the OK-button.

    Static Methods

    None

    SvnPropDelDialog (Constructor)

    SvnPropDelDialog(recursive, parent = None)

    Constructor

    recursive
    flag indicating a recursive set is requested
    parent
    parent widget (QWidget)

    SvnPropDelDialog.getData

    getData()

    Public slot used to retrieve the data entered into the dialog.

    Returns:
    tuple of two values giving the property name and a flag indicating, that this property should be applied recursively. (string, boolean)

    SvnPropDelDialog.on_propNameEdit_textChanged

    on_propNameEdit_textChanged(text)

    Private method used to enable/disable the OK-button.

    text
    ignored

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.PluginEricdoc.html0000644000175000001440000000013212261331350026620 xustar000000000000000030 mtime=1388688104.508228058 30 atime=1389081085.043724364 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.PluginEricdoc.html0000644000175000001440000001050212261331350026350 0ustar00detlevusers00000000000000 eric4.Plugins.PluginEricdoc

    eric4.Plugins.PluginEricdoc

    Module implementing the Ericdoc plugin.

    Global Attributes

    author
    autoactivate
    className
    deactivateable
    error
    longDescription
    name
    packageName
    shortDescription
    version

    Classes

    EricdocPlugin Class implementing the Ericdoc plugin.

    Functions

    exeDisplayData Public method to support the display of some executable info.


    EricdocPlugin

    Class implementing the Ericdoc plugin.

    Derived from

    QObject

    Class Attributes

    None

    Class Methods

    None

    Methods

    EricdocPlugin Constructor
    __doEricdoc Private slot to perform the eric4_doc api documentation generation.
    __initialize Private slot to (re)initialize the plugin.
    __projectShowMenu Private slot called, when the the project menu or a submenu is about to be shown.
    activate Public method to activate this plugin.
    deactivate Public method to deactivate this plugin.

    Static Methods

    None

    EricdocPlugin (Constructor)

    EricdocPlugin(ui)

    Constructor

    ui
    reference to the user interface object (UI.UserInterface)

    EricdocPlugin.__doEricdoc

    __doEricdoc()

    Private slot to perform the eric4_doc api documentation generation.

    EricdocPlugin.__initialize

    __initialize()

    Private slot to (re)initialize the plugin.

    EricdocPlugin.__projectShowMenu

    __projectShowMenu(menuName, menu)

    Private slot called, when the the project menu or a submenu is about to be shown.

    menuName
    name of the menu to be shown (string)
    menu
    reference to the menu (QMenu)

    EricdocPlugin.activate

    activate()

    Public method to activate this plugin.

    Returns:
    tuple of None and activation status (boolean)

    EricdocPlugin.deactivate

    deactivate()

    Public method to deactivate this plugin.



    exeDisplayData

    exeDisplayData()

    Public method to support the display of some executable info.

    Returns:
    dictionary containing the data to query the presence of the executable

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.Lexers.LexerProperties.html0000644000175000001440000000013212261331354031114 xustar000000000000000030 mtime=1388688108.489230057 30 atime=1389081085.044724362 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.Lexers.LexerProperties.html0000644000175000001440000000702512261331354030652 0ustar00detlevusers00000000000000 eric4.QScintilla.Lexers.LexerProperties

    eric4.QScintilla.Lexers.LexerProperties

    Module implementing a Properties lexer with some additional methods.

    Global Attributes

    None

    Classes

    LexerProperties Subclass to implement some additional lexer dependant methods.

    Functions

    None


    LexerProperties

    Subclass to implement some additional lexer dependant methods.

    Derived from

    QsciLexerProperties, Lexer

    Class Attributes

    None

    Class Methods

    None

    Methods

    LexerProperties Constructor
    defaultKeywords Public method to get the default keywords.
    initProperties Public slot to initialize the properties.
    isCommentStyle Public method to check, if a style is a comment style.
    isStringStyle Public method to check, if a style is a string style.

    Static Methods

    None

    LexerProperties (Constructor)

    LexerProperties(parent=None)

    Constructor

    parent
    parent widget of this lexer

    LexerProperties.defaultKeywords

    defaultKeywords(kwSet)

    Public method to get the default keywords.

    kwSet
    number of the keyword set (integer)
    Returns:
    string giving the keywords (string) or None

    LexerProperties.initProperties

    initProperties()

    Public slot to initialize the properties.

    LexerProperties.isCommentStyle

    isCommentStyle(style)

    Public method to check, if a style is a comment style.

    Returns:
    flag indicating a comment style (boolean)

    LexerProperties.isStringStyle

    isStringStyle(style)

    Public method to check, if a style is a string style.

    Returns:
    flag indicating a string style (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.IconEditor.html0000644000175000001440000000013212261331354025621 xustar000000000000000030 mtime=1388688108.658230142 30 atime=1389081085.044724362 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.IconEditor.html0000644000175000001440000000276212261331354025362 0ustar00detlevusers00000000000000 eric4.IconEditor

    eric4.IconEditor

    Package implementing the icon editor tool.

    Packages

    cursors Package defining some cursors.

    Modules

    IconEditorGrid Module implementing the icon editor grid.
    IconEditorPalette Module implementing a palette widget for the icon editor.
    IconEditorWindow Module implementing the icon editor main window.
    IconSizeDialog Module implementing a dialog to enter the icon size.
    IconZoomDialog Module implementing a dialog to select the zoom factor.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.SpellChecker.html0000644000175000001440000000013212261331352027061 xustar000000000000000030 mtime=1388688106.351228984 30 atime=1389081085.044724362 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.SpellChecker.html0000644000175000001440000003742312261331352026624 0ustar00detlevusers00000000000000 eric4.QScintilla.SpellChecker

    eric4.QScintilla.SpellChecker

    Module implementing the spell checker for the editor component.

    The spell checker is based on pyenchant.

    Global Attributes

    None

    Classes

    SpellChecker Class implementing a pyenchant based spell checker.

    Functions

    None


    SpellChecker

    Class implementing a pyenchant based spell checker.

    Derived from

    QObject

    Class Attributes

    _spelling_dict
    _spelling_lang

    Class Methods

    _getDict Protected classmethod to get a new dictionary.
    getAvailableLanguages Public classmethod to get all available languages.
    isAvailable Public classmethod to check, if spellchecking is available.
    setDefaultLanguage Public classmethod to set the default language.

    Methods

    SpellChecker Constructor
    __checkDocumentPart Private method to check some part of the document.
    __getNextWord Private method to get the next word in the text after the given position.
    __incrementalCheck Private method to check the document incrementally.
    __iter__ Private method to create an iterator.
    __next__ Private method to advance to the next error.
    add Public method to add a word to the personal word list.
    checkCurrentPage Private method to check the currently visible page.
    checkDocument Public method to check the complete document
    checkDocumentIncrementally Public method to check the document incrementally.
    checkLines Public method to check some lines of text.
    checkSelection Private method to check the current selection.
    checkWord Public method to check the word at position pos.
    clearAll Public method to clear all spelling markers.
    getContext Public method to get the context of a faulty word.
    getError Public method to get information about the last error found.
    getLanguage Public method to get the current language.
    getSuggestions Public method to get suggestions for the given word.
    ignoreAlways Public method to tell the checker, to always ignore the given word or the current word.
    initCheck Public method to initialize a spell check.
    next Public method to advance to the next error.
    remove Public method to add a word to the personal exclude list.
    replace Public method to tell the checker to replace the current word with the replacement string.
    replaceAlways Public method to tell the checker to always replace the current word with the replacement string.
    setLanguage Public method to set the current language.
    setMinimumWordSize Public method to set the minimum word size.
    stopIncrementalCheck Public method to stop an incremental check.

    Static Methods

    None

    SpellChecker._getDict (class method)

    _getDict(lang, pwl = "", pel = "")

    Protected classmethod to get a new dictionary.

    lang
    the language to be used as the default (string). The string should be in language locale format (e.g. en_US, de).
    pwl=
    name of the personal/project word list (string)
    pel=
    name of the personal/project exclude list (string)
    Returns:
    reference to the dictionary (enchant.Dict)

    SpellChecker.getAvailableLanguages (class method)

    getAvailableLanguages()

    Public classmethod to get all available languages.

    Returns:
    list of available languages (list of strings)

    SpellChecker.isAvailable (class method)

    isAvailable()

    Public classmethod to check, if spellchecking is available.

    Returns:
    flag indicating availability (boolean)

    SpellChecker.setDefaultLanguage (class method)

    setDefaultLanguage(language)

    Public classmethod to set the default language.

    language
    the language to be used as the default (string). The string should be in language locale format (e.g. en_US, de).

    SpellChecker (Constructor)

    SpellChecker(editor, indicator, defaultLanguage = None, checkRegion = None)

    Constructor

    editor
    reference to the editor object (QScintilla.Editor)
    indicator
    spell checking indicator
    defaultLanguage=
    the language to be used as the default (string). The string should be in language locale format (e.g. en_US, de).
    checkRegion=
    reference to a function to check for a valid region

    SpellChecker.__checkDocumentPart

    __checkDocumentPart(startPos, endPos)

    Private method to check some part of the document.

    startPos
    position to start at (integer)
    endPos
    position to end at (integer)

    SpellChecker.__getNextWord

    __getNextWord(pos, endPosition)

    Private method to get the next word in the text after the given position.

    pos
    position to start word extraction (integer)
    endPosition
    position to stop word extraction (integer)
    Returns:
    tuple of three values (the extracted word (string), start position (integer), end position (integer))

    SpellChecker.__incrementalCheck

    __incrementalCheck()

    Private method to check the document incrementally.

    SpellChecker.__iter__

    __iter__()

    Private method to create an iterator.

    SpellChecker.__next__

    __next__()

    Private method to advance to the next error.

    SpellChecker.add

    add(word = None)

    Public method to add a word to the personal word list.

    word
    word to add (string or QString)

    SpellChecker.checkCurrentPage

    checkCurrentPage()

    Private method to check the currently visible page.

    SpellChecker.checkDocument

    checkDocument()

    Public method to check the complete document

    SpellChecker.checkDocumentIncrementally

    checkDocumentIncrementally()

    Public method to check the document incrementally.

    SpellChecker.checkLines

    checkLines(firstLine, lastLine)

    Public method to check some lines of text.

    firstLine
    line number of first line to check (integer)
    lastLine
    line number of last line to check (integer)

    SpellChecker.checkSelection

    checkSelection()

    Private method to check the current selection.

    SpellChecker.checkWord

    checkWord(pos, atEnd = False)

    Public method to check the word at position pos.

    pos
    position to check at (integer)
    atEnd=
    flag indicating the position is at the end of the word to check (boolean)

    SpellChecker.clearAll

    clearAll()

    Public method to clear all spelling markers.

    SpellChecker.getContext

    getContext(wordStart, wordEnd)

    Public method to get the context of a faulty word.

    wordStart
    the starting position of the word (integer)
    wordEnd
    the ending position of the word (integer)
    Returns:
    tuple of the leading and trailing context (QString, QString)

    SpellChecker.getError

    getError()

    Public method to get information about the last error found.

    Returns:
    tuple of last faulty word (QString), starting position of the faulty word (integer) and ending position of the faulty word (integer)

    SpellChecker.getLanguage

    getLanguage()

    Public method to get the current language.

    Returns:
    current language in language locale format (string)

    SpellChecker.getSuggestions

    getSuggestions(word)

    Public method to get suggestions for the given word.

    word
    word to get suggestions for (string or QString)
    Returns:
    list of suggestions (list of strings)

    SpellChecker.ignoreAlways

    ignoreAlways(word = None)

    Public method to tell the checker, to always ignore the given word or the current word.

    word
    word to be ignored (string or QString)

    SpellChecker.initCheck

    initCheck(startPos, endPos)

    Public method to initialize a spell check.

    startPos
    position to start at (integer)
    endPos
    position to end at (integer)
    Returns:
    flag indicating successful initialization (boolean)

    SpellChecker.next

    next()

    Public method to advance to the next error.

    Returns:
    self

    SpellChecker.remove

    remove(word)

    Public method to add a word to the personal exclude list.

    word
    word to add (string or QString)

    SpellChecker.replace

    replace(replacement)

    Public method to tell the checker to replace the current word with the replacement string.

    replacement
    replacement string (string or QString)

    SpellChecker.replaceAlways

    replaceAlways(replacement)

    Public method to tell the checker to always replace the current word with the replacement string.

    replacement
    replacement string (string or QString)

    SpellChecker.setLanguage

    setLanguage(language, pwl = "", pel = "")

    Public method to set the current language.

    language
    the language to be used as the default (string). The string should be in language locale format (e.g. en_US, de).
    pwl=
    name of the personal/project word list (string)
    pel=
    name of the personal/project exclude list (string)

    SpellChecker.setMinimumWordSize

    setMinimumWordSize(size)

    Public method to set the minimum word size.

    size
    minimum word size (integer)

    SpellChecker.stopIncrementalCheck

    stopIncrementalCheck()

    Public method to stop an incremental check.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.PluginManager.PluginManager.html0000644000175000001440000000013212261331351027733 xustar000000000000000030 mtime=1388688105.267228439 30 atime=1389081085.044724362 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.PluginManager.PluginManager.html0000644000175000001440000006042412261331351027473 0ustar00detlevusers00000000000000 eric4.PluginManager.PluginManager

    eric4.PluginManager.PluginManager

    Module implementing the Plugin Manager.

    Global Attributes

    None

    Classes

    PluginManager Class implementing the Plugin Manager.

    Functions

    None


    PluginManager

    Class implementing the Plugin Manager.

    Signals

    allPlugginsActivated()
    emitted at startup after all plugins have been activated
    pluginAboutToBeActivated(modulName, pluginObject)
    emitted just before a plugin is activated
    pluginAboutToBeDeactivated(modulName, pluginObject)
    emitted just before a plugin is deactivated
    pluginActivated(modulName, pluginObject)
    emitted just after a plugin was activated
    pluginDeactivated(modulName, pluginObject)
    emitted just after a plugin was deactivated
    shutdown()
    emitted at shutdown of the IDE

    Derived from

    QObject

    Class Attributes

    None

    Class Methods

    None

    Methods

    PluginManager Constructor
    __canActivatePlugin Private method to check, if a plugin can be activated.
    __canDeactivatePlugin Private method to check, if a plugin can be deactivated.
    __checkPluginsDownloadDirectory Private slot to check for the existance of the plugins download directory.
    __getShortInfo Private method to extract the short info from a module.
    __insertPluginsPaths Private method to insert the valid plugin paths intos the search path.
    __loadPlugins Private method to load the plugins found.
    __pluginDirectoriesExist Private method to check, if the plugin folders exist.
    __pluginModulesExist Private method to check, if there are plugins available.
    activatePlugin Public method to activate a plugin.
    activatePlugins Public method to activate all plugins having the "autoactivate" attribute set to True.
    deactivatePlugin Public method to deactivate a plugin.
    deactivateVcsPlugins Public method to deactivated all activated VCS plugins.
    finalizeSetup Public method to finalize the setup of the plugin manager.
    getPluginApiFiles Public method to get the list of API files installed by a plugin.
    getPluginConfigData Public method to get the config data of all active, non on-demand plugins used by the configuration dialog.
    getPluginDetails Public method to get detailed information about a plugin.
    getPluginDir Public method to get the path of a plugin directory.
    getPluginDisplayStrings Public method to get the display strings of all plugins of a specific type.
    getPluginExeDisplayData Public method to get data to display information about a plugins external tool.
    getPluginInfos Public method to get infos about all loaded plugins.
    getPluginModules Public method to get a list of plugin modules.
    getPluginObject Public method to activate an ondemand plugin given by type and typename.
    getPluginPreviewPixmap Public method to get a preview pixmap of a plugin of a specific type.
    getVcsSystemIndicators Public method to get the Vcs System indicators.
    initOnDemandPlugin Public method to create a plugin object for the named on demand plugin.
    initOnDemandPlugins Public method to create plugin objects for all on demand plugins.
    isPluginActive Public method to check, if a certain plugin is active.
    isPluginLoaded Public method to check, if a certain plugin is loaded.
    isValidPluginName Public methode to check, if a file name is a valid plugin name.
    loadPlugin Public method to load a plugin module.
    preferencesChanged Public slot to react to changes in configuration.
    removePluginFromSysModules Public method to remove a plugin and all related modules from sys.modules.
    shutdown Public method called to perform actions upon shutdown of the IDE.
    unloadPlugin Public method to unload a plugin module.

    Static Methods

    None

    PluginManager (Constructor)

    PluginManager(parent = None, doLoadPlugins = True, develPlugin = None)

    Constructor

    The Plugin Manager deals with three different plugin directories. The first is the one, that is part of eric4 (eric4/Plugins). The second one is the global plugin directory called 'eric4plugins', which is located inside the site-packages directory. The last one is the user plugin directory located inside the .eric4 directory of the users home directory.

    parent
    reference to the parent object (QObject)
    doLoadPlugins=
    flag indicating, that plugins should be loaded (boolean)
    develPlugin=
    filename of a plugin to be loaded for development (string)

    PluginManager.__canActivatePlugin

    __canActivatePlugin(module)

    Private method to check, if a plugin can be activated.

    module
    reference to the module to be activated
    Returns:
    flag indicating, if the module satisfies all requirements for being activated (boolean)

    PluginManager.__canDeactivatePlugin

    __canDeactivatePlugin(module)

    Private method to check, if a plugin can be deactivated.

    module
    reference to the module to be deactivated
    Returns:
    flag indicating, if the module satisfies all requirements for being deactivated (boolean)

    PluginManager.__checkPluginsDownloadDirectory

    __checkPluginsDownloadDirectory()

    Private slot to check for the existance of the plugins download directory.

    PluginManager.__getShortInfo

    __getShortInfo(module)

    Private method to extract the short info from a module.

    module
    module to extract short info from
    Returns:
    short info as a tuple giving plugin name (string), short description (string), error flag (boolean) and version (string)

    PluginManager.__insertPluginsPaths

    __insertPluginsPaths()

    Private method to insert the valid plugin paths intos the search path.

    PluginManager.__loadPlugins

    __loadPlugins()

    Private method to load the plugins found.

    PluginManager.__pluginDirectoriesExist

    __pluginDirectoriesExist()

    Private method to check, if the plugin folders exist.

    If the plugin folders don't exist, they are created (if possible).

    Returns:
    tuple of a flag indicating existence of any of the plugin directories (boolean) and a message (QString)

    PluginManager.__pluginModulesExist

    __pluginModulesExist()

    Private method to check, if there are plugins available.

    Returns:
    flag indicating the availability of plugins (boolean)

    PluginManager.activatePlugin

    activatePlugin(name, onDemand = False)

    Public method to activate a plugin.

    name
    name of the module to be activated
    onDemand=
    flag indicating activation of an on demand plugin (boolean)
    Returns:
    reference to the initialized plugin object

    PluginManager.activatePlugins

    activatePlugins()

    Public method to activate all plugins having the "autoactivate" attribute set to True.

    PluginManager.deactivatePlugin

    deactivatePlugin(name, onDemand = False)

    Public method to deactivate a plugin.

    name
    name of the module to be deactivated
    onDemand=
    flag indicating deactivation of an on demand plugin (boolean)

    PluginManager.deactivateVcsPlugins

    deactivateVcsPlugins()

    Public method to deactivated all activated VCS plugins.

    PluginManager.finalizeSetup

    finalizeSetup()

    Public method to finalize the setup of the plugin manager.

    PluginManager.getPluginApiFiles

    getPluginApiFiles(language)

    Public method to get the list of API files installed by a plugin.

    language
    language of the requested API files (QString)
    Returns:
    list of API filenames (list of string)

    PluginManager.getPluginConfigData

    getPluginConfigData()

    Public method to get the config data of all active, non on-demand plugins used by the configuration dialog.

    Plugins supporting this functionality must provide the plugin module function 'getConfigData' returning a dictionary with unique keys of lists with the following list contents:

    display string
    string shown in the selection area of the configuration page. This should be a localized string
    pixmap name
    filename of the pixmap to be shown next to the display string
    page creation function
    plugin module function to be called to create the configuration page. The page must be subclasses from Preferences.ConfigurationPages.ConfigurationPageBase and must implement a method called 'save' to save the settings. A parent entry will be created in the selection list, if this value is None.
    parent key
    dictionary key of the parent entry or None, if this defines a toplevel entry.
    reference to configuration page
    This will be used by the configuration dialog and must always be None

    PluginManager.getPluginDetails

    getPluginDetails(name)

    Public method to get detailed information about a plugin.

    name
    name of the module to get detailed infos about (string)
    Returns:
    details of the plugin as a dictionary

    PluginManager.getPluginDir

    getPluginDir(key)

    Public method to get the path of a plugin directory.

    Returns:
    path of the requested plugin directory (string)

    PluginManager.getPluginDisplayStrings

    getPluginDisplayStrings(type_)

    Public method to get the display strings of all plugins of a specific type.

    type_
    type of the plugins (string)
    Returns:
    dictionary with name as key and display string as value (dictionary of QString)

    PluginManager.getPluginExeDisplayData

    getPluginExeDisplayData()

    Public method to get data to display information about a plugins external tool.

    Returns:
    list of dictionaries containing the data. Each dictionary must either contain data for the determination or the data to be displayed.
    A dictionary of the first form must have the following entries:
    • programEntry - indicator for this dictionary form (boolean), always True
    • header - string to be diplayed as a header (QString)
    • exe - the executable (string)
    • versionCommand - commandline parameter for the exe (string)
    • versionStartsWith - indicator for the output line containing the version (string)
    • versionPosition - number of element containing the version (integer)
    • version - version to be used as default (string)
    • versionCleanup - tuple of two integers giving string positions start and stop for the version string (tuple of integers)
    A dictionary of the second form must have the following entries:
    • programEntry - indicator for this dictionary form (boolean), always False
    • header - string to be diplayed as a header (QString)
    • text - entry text to be shown (string or QString)
    • version - version text to be shown (string or QString)

    PluginManager.getPluginInfos

    getPluginInfos()

    Public method to get infos about all loaded plugins.

    Returns:
    list of tuples giving module name (string), plugin name (string), version (string), autoactivate (boolean), active (boolean), short description (string), error flag (boolean)

    PluginManager.getPluginModules

    getPluginModules(pluginPath)

    Public method to get a list of plugin modules.

    pluginPath
    name of the path to search (string)
    Returns:
    list of plugin module names (list of string)

    PluginManager.getPluginObject

    getPluginObject(type_, typename, maybeActive = False)

    Public method to activate an ondemand plugin given by type and typename.

    type_
    type of the plugin to be activated (string)
    typename
    name of the plugin within the type category (string)
    maybeActive=
    flag indicating, that the plugin may be active already (boolean)
    Returns:
    reference to the initialized plugin object

    PluginManager.getPluginPreviewPixmap

    getPluginPreviewPixmap(type_, name)

    Public method to get a preview pixmap of a plugin of a specific type.

    type_
    type of the plugin (string)
    name
    name of the plugin type (string)
    Returns:
    preview pixmap (QPixmap)

    PluginManager.getVcsSystemIndicators

    getVcsSystemIndicators()

    Public method to get the Vcs System indicators.

    Plugins supporting this functionality must support the module function getVcsSystemIndicator returning a dictionary with indicator as key and a tuple with the vcs name (string) and vcs display string (QString).

    Returns:
    dictionary with indicator as key and a list of tuples as values. Each tuple contains the vcs name (string) and vcs display string (QString).

    PluginManager.initOnDemandPlugin

    initOnDemandPlugin(name)

    Public method to create a plugin object for the named on demand plugin.

    Note: The plugin is not activated.

    PluginManager.initOnDemandPlugins

    initOnDemandPlugins()

    Public method to create plugin objects for all on demand plugins.

    Note: The plugins are not activated.

    PluginManager.isPluginActive

    isPluginActive(pluginName)

    Public method to check, if a certain plugin is active.

    pluginName
    name of the plugin to check for (string or QString)
    Returns:
    flag indicating, if the plugin is active (boolean)

    PluginManager.isPluginLoaded

    isPluginLoaded(pluginName)

    Public method to check, if a certain plugin is loaded.

    pluginName
    name of the plugin to check for (string or QString)
    Returns:
    flag indicating, if the plugin is loaded (boolean)

    PluginManager.isValidPluginName

    isValidPluginName(pluginName)

    Public methode to check, if a file name is a valid plugin name.

    Plugin modules must start with "Plugin" and have the extension ".py".

    pluginName
    name of the file to be checked (string)
    Returns:
    flag indicating a valid plugin name (boolean)

    PluginManager.loadPlugin

    loadPlugin(name, directory, reload_ = False)

    Public method to load a plugin module.

    Initially all modules are inactive. Modules that are requested on demand are sorted out and are added to the on demand list. Some basic validity checks are performed as well. Modules failing these checks are added to the failed modules list.

    name
    name of the module to be loaded (string)
    directory
    name of the plugin directory (string)
    reload_
    flag indicating to reload the module (boolean)

    PluginManager.preferencesChanged

    preferencesChanged()

    Public slot to react to changes in configuration.

    PluginManager.removePluginFromSysModules

    removePluginFromSysModules(pluginName, package, internalPackages)

    Public method to remove a plugin and all related modules from sys.modules.

    pluginName
    name of the plugin module (string)
    package
    name of the plugin package (string)
    internalPackages
    list of intenal packages (list of string)
    Returns:
    flag indicating the plugin module was found in sys.modules (boolean)

    PluginManager.shutdown

    shutdown()

    Public method called to perform actions upon shutdown of the IDE.

    PluginManager.unloadPlugin

    unloadPlugin(name, directory)

    Public method to unload a plugin module.

    name
    name of the module to be unloaded (string)
    directory
    name of the plugin directory (string)
    Returns:
    flag indicating success (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsPySvn.SvnUtilitie0000644000175000001440000000013212261331353031276 xustar000000000000000030 mtime=1388688107.023229321 30 atime=1389081085.044724362 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsPySvn.SvnUtilities.html0000644000175000001440000000663512261331353032170 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsPySvn.SvnUtilities

    eric4.Plugins.VcsPlugins.vcsPySvn.SvnUtilities

    Module implementing some common utility functions for the pysvn package.

    Global Attributes

    None

    Classes

    None

    Functions

    amendConfig Module function to amend the config file.
    createDefaultConfig Module function to create a default config file suitable for eric.
    dateFromTime_t Module function to return the date.
    formatTime Module function to return a formatted time string.
    getConfigPath Module function to get the filename of the config file.
    getServersPath Module function to get the filename of the servers file.


    amendConfig

    amendConfig()

    Module function to amend the config file.



    createDefaultConfig

    createDefaultConfig()

    Module function to create a default config file suitable for eric.



    dateFromTime_t

    dateFromTime_t(seconds)

    Module function to return the date.

    seconds
    time in seconds since epoch to be formatted (float or long)
    Returns:
    date (QDate)


    formatTime

    formatTime(seconds)

    Module function to return a formatted time string.

    seconds
    time in seconds since epoch to be formatted (float or long)
    Returns:
    formatted time string (QString)


    getConfigPath

    getConfigPath()

    Module function to get the filename of the config file.

    Returns:
    filename of the config file (string)


    getServersPath

    getServersPath()

    Module function to get the filename of the servers file.

    Returns:
    filename of the servers file (string)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DebugClients.Ruby.DebugClient.html0000644000175000001440000000013212261331354030131 xustar000000000000000030 mtime=1388688108.269229947 30 atime=1389081085.045724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.DebugClients.Ruby.DebugClient.html0000644000175000001440000000320612261331354027664 0ustar00detlevusers00000000000000 eric4.DebugClients.Ruby.DebugClient

    eric4.DebugClients.Ruby.DebugClient

    File implementing a debug client.

    Global Attributes

    None

    Classes

    DebugClient Class implementing the client side of the debugger.

    Modules

    None

    Functions

    None


    DebugClient

    Class implementing the client side of the debugger.

    Derived from

    None

    Class Attributes

    None

    Class Methods

    None

    Methods

    initialize Constructor

    Static Methods

    None

    DebugClient.initialize

    initialize()

    Constructor


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Project.AddLanguageDialog.html0000644000175000001440000000013212261331351027333 xustar000000000000000030 mtime=1388688105.789228702 30 atime=1389081085.045724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Project.AddLanguageDialog.html0000644000175000001440000000455512261331351027076 0ustar00detlevusers00000000000000 eric4.Project.AddLanguageDialog

    eric4.Project.AddLanguageDialog

    Module implementing a dialog to add a new language to the project.

    Global Attributes

    None

    Classes

    AddLanguageDialog Class implementing a dialog to add a new language to the project.

    Functions

    None


    AddLanguageDialog

    Class implementing a dialog to add a new language to the project.

    Derived from

    QDialog, Ui_AddLanguageDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    AddLanguageDialog Constructor
    getSelectedLanguage Public method to retrieve the selected language.

    Static Methods

    None

    AddLanguageDialog (Constructor)

    AddLanguageDialog(parent = None, name = None)

    Constructor

    parent
    parent widget of this dialog (QWidget)
    name
    name of this dialog (string or QString)

    AddLanguageDialog.getSelectedLanguage

    getSelectedLanguage()

    Public method to retrieve the selected language.

    Returns:
    the selected language (QString)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Utilities.AutoSaver.html0000644000175000001440000000013212261331351026335 xustar000000000000000030 mtime=1388688105.682228648 30 atime=1389081085.045724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Utilities.AutoSaver.html0000644000175000001440000000533112261331351026071 0ustar00detlevusers00000000000000 eric4.Utilities.AutoSaver

    eric4.Utilities.AutoSaver

    Module implementing an auto saver class.

    Global Attributes

    None

    Classes

    AutoSaver Class implementing the auto saver.

    Functions

    None


    AutoSaver

    Class implementing the auto saver.

    Derived from

    QObject

    Class Attributes

    AUTOSAVE_IN
    MAXWAIT

    Class Methods

    None

    Methods

    AutoSaver Constructor
    changeOccurred Public slot handling a change.
    saveIfNeccessary Public method to activate the save operation.
    timerEvent Protected method handling timer events.

    Static Methods

    None

    AutoSaver (Constructor)

    AutoSaver(parent, save)

    Constructor

    parent
    reference to the parent object (QObject)
    save
    slot to be called to perform the save operation

    AutoSaver.changeOccurred

    changeOccurred()

    Public slot handling a change.

    AutoSaver.saveIfNeccessary

    saveIfNeccessary()

    Public method to activate the save operation.

    AutoSaver.timerEvent

    timerEvent(evt)

    Protected method handling timer events.

    evt
    reference to the timer event (QTimerEvent)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.Bookmarks.BookmarksToolBar.h0000644000175000001440000000013212261331353031212 xustar000000000000000030 mtime=1388688107.887229755 30 atime=1389081085.045724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.Bookmarks.BookmarksToolBar.html0000644000175000001440000001336612261331353031472 0ustar00detlevusers00000000000000 eric4.Helpviewer.Bookmarks.BookmarksToolBar

    eric4.Helpviewer.Bookmarks.BookmarksToolBar

    Module implementing a tool bar showing bookmarks.

    Global Attributes

    None

    Classes

    BookmarksToolBar Class implementing a tool bar showing bookmarks.

    Functions

    None


    BookmarksToolBar

    Class implementing a tool bar showing bookmarks.

    Signals

    newUrl(const QUrl&, const QString&)
    emitted to open a URL in a new tab
    openUrl(const QUrl&, const QString&)
    emitted to open a URL in the current tab

    Derived from

    E4ModelToolBar

    Class Attributes

    None

    Class Methods

    None

    Methods

    BookmarksToolBar Constructor
    __bookmarkActivated Private slot handling the activation of a bookmark.
    __contextMenuRequested Private slot to handle the context menu request.
    __newBookmark Private slot to add a new bookmark.
    __newFolder Private slot to add a new bookmarks folder.
    __openBookmark Private slot to open a bookmark in the current browser tab.
    __openBookmarkInNewTab Private slot to open a bookmark in a new browser tab.
    __openToolBarBookmark Private slot to open a bookmark in the current browser tab.
    __removeBookmark Private slot to remove a bookmark.
    _createMenu Protected method to create the menu for a tool bar action.

    Static Methods

    None

    BookmarksToolBar (Constructor)

    BookmarksToolBar(mainWindow, model, parent = None)

    Constructor

    mainWindow
    reference to the main window (HelpWindow)
    model
    reference to the bookmarks model (BookmarksModel)
    parent
    reference to the parent widget (QWidget)

    BookmarksToolBar.__bookmarkActivated

    __bookmarkActivated(idx)

    Private slot handling the activation of a bookmark.

    idx
    index of the activated bookmark (QModelIndex)

    BookmarksToolBar.__contextMenuRequested

    __contextMenuRequested(pos)

    Private slot to handle the context menu request.

    pos
    position the context menu shall be shown (QPoint)

    BookmarksToolBar.__newBookmark

    __newBookmark()

    Private slot to add a new bookmark.

    BookmarksToolBar.__newFolder

    __newFolder()

    Private slot to add a new bookmarks folder.

    BookmarksToolBar.__openBookmark

    __openBookmark()

    Private slot to open a bookmark in the current browser tab.

    BookmarksToolBar.__openBookmarkInNewTab

    __openBookmarkInNewTab()

    Private slot to open a bookmark in a new browser tab.

    BookmarksToolBar.__openToolBarBookmark

    __openToolBarBookmark()

    Private slot to open a bookmark in the current browser tab.

    BookmarksToolBar.__removeBookmark

    __removeBookmark()

    Private slot to remove a bookmark.

    BookmarksToolBar._createMenu

    _createMenu()

    Protected method to create the menu for a tool bar action.

    Returns:
    menu for a tool bar action (E4ModelMenu)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.PluginVmTabview.html0000644000175000001440000000013212261331350027154 xustar000000000000000030 mtime=1388688104.477228043 30 atime=1389081085.045724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.PluginVmTabview.html0000644000175000001440000000623412261331350026713 0ustar00detlevusers00000000000000 eric4.Plugins.PluginVmTabview

    eric4.Plugins.PluginVmTabview

    Module implementing the Tabview view manager plugin.

    Global Attributes

    author
    autoactivate
    className
    deactivateable
    displayString
    error
    longDescription
    name
    packageName
    pluginType
    pluginTypename
    shortDescription
    version

    Classes

    VmTabviewPlugin Class implementing the Tabview view manager plugin.

    Functions

    previewPix Module function to return a preview pixmap.


    VmTabviewPlugin

    Class implementing the Tabview view manager plugin.

    Derived from

    object

    Class Attributes

    None

    Class Methods

    None

    Methods

    VmTabviewPlugin Constructor
    activate Public method to activate this plugin.
    deactivate Public method to deactivate this plugin.

    Static Methods

    None

    VmTabviewPlugin (Constructor)

    VmTabviewPlugin(ui)

    Constructor

    ui
    reference to the user interface object (UI.UserInterface)

    VmTabviewPlugin.activate

    activate()

    Public method to activate this plugin.

    Returns:
    tuple of reference to instantiated viewmanager and activation status (boolean)

    VmTabviewPlugin.deactivate

    deactivate()

    Public method to deactivate this plugin.



    previewPix

    previewPix()

    Module function to return a preview pixmap.

    Returns:
    preview pixmap (QPixmap)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsSubversion.SvnTag0000644000175000001440000000031512261331352031303 xustar0000000000000000115 path=eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsSubversion.SvnTagBranchListDialog.html 30 mtime=1388688106.765229192 30 atime=1389081085.045724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsSubversion.SvnTagBranchListDialog0000644000175000001440000002146212261331352034131 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsSubversion.SvnTagBranchListDialog

    eric4.Plugins.VcsPlugins.vcsSubversion.SvnTagBranchListDialog

    Module implementing a dialog to show a list of tags or branches.

    Global Attributes

    None

    Classes

    SvnTagBranchListDialog Class implementing a dialog to show a list of tags or branches.

    Functions

    None


    SvnTagBranchListDialog

    Class implementing a dialog to show a list of tags or branches.

    Derived from

    QDialog, Ui_SvnTagBranchListDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnTagBranchListDialog Constructor
    __finish Private slot called when the process finished or the user pressed the button.
    __generateItem Private method to generate a tag item in the taglist.
    __procFinished Private slot connected to the finished signal.
    __readStderr Private slot to handle the readyReadStderr signal.
    __readStdout Private slot to handle the readyReadStdout signal.
    __resizeColumns Private method to resize the list columns.
    __resort Private method to resort the tree.
    closeEvent Private slot implementing a close event handler.
    keyPressEvent Protected slot to handle a key press event.
    on_buttonBox_clicked Private slot called by a button of the button box clicked.
    on_input_returnPressed Private slot to handle the press of the return key in the input field.
    on_passwordCheckBox_toggled Private slot to handle the password checkbox toggled.
    on_sendButton_clicked Private slot to send the input to the subversion process.
    start Public slot to start the svn status command.

    Static Methods

    None

    SvnTagBranchListDialog (Constructor)

    SvnTagBranchListDialog(vcs, parent = None)

    Constructor

    vcs
    reference to the vcs object
    parent
    parent widget (QWidget)

    SvnTagBranchListDialog.__finish

    __finish()

    Private slot called when the process finished or the user pressed the button.

    SvnTagBranchListDialog.__generateItem

    __generateItem(revision, author, date, name)

    Private method to generate a tag item in the taglist.

    revision
    revision string (string or QString)
    author
    author of the tag (string or QString)
    date
    date of the tag (string or QString)
    name
    name (path) of the tag (string or QString)

    SvnTagBranchListDialog.__procFinished

    __procFinished(exitCode, exitStatus)

    Private slot connected to the finished signal.

    exitCode
    exit code of the process (integer)
    exitStatus
    exit status of the process (QProcess.ExitStatus)

    SvnTagBranchListDialog.__readStderr

    __readStderr()

    Private slot to handle the readyReadStderr signal.

    It reads the error output of the process and inserts it into the error pane.

    SvnTagBranchListDialog.__readStdout

    __readStdout()

    Private slot to handle the readyReadStdout signal.

    It reads the output of the process, formats it and inserts it into the contents pane.

    SvnTagBranchListDialog.__resizeColumns

    __resizeColumns()

    Private method to resize the list columns.

    SvnTagBranchListDialog.__resort

    __resort()

    Private method to resort the tree.

    SvnTagBranchListDialog.closeEvent

    closeEvent(e)

    Private slot implementing a close event handler.

    e
    close event (QCloseEvent)

    SvnTagBranchListDialog.keyPressEvent

    keyPressEvent(evt)

    Protected slot to handle a key press event.

    evt
    the key press event (QKeyEvent)

    SvnTagBranchListDialog.on_buttonBox_clicked

    on_buttonBox_clicked(button)

    Private slot called by a button of the button box clicked.

    button
    button that was clicked (QAbstractButton)

    SvnTagBranchListDialog.on_input_returnPressed

    on_input_returnPressed()

    Private slot to handle the press of the return key in the input field.

    SvnTagBranchListDialog.on_passwordCheckBox_toggled

    on_passwordCheckBox_toggled(isOn)

    Private slot to handle the password checkbox toggled.

    isOn
    flag indicating the status of the check box (boolean)

    SvnTagBranchListDialog.on_sendButton_clicked

    on_sendButton_clicked()

    Private slot to send the input to the subversion process.

    SvnTagBranchListDialog.start

    start(path, tags, tagsList, allTagsList)

    Public slot to start the svn status command.

    path
    name of directory to be listed (string)
    tags
    flag indicating a list of tags is requested (False = branches, True = tags)
    tagsList
    reference to string list receiving the tags (QStringList)
    allsTagsLisr
    reference to string list all tags (QStringList)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.Lexers.LexerPascal.html0000644000175000001440000000013112261331354030162 xustar000000000000000030 mtime=1388688108.604230115 29 atime=1389081085.04672436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.Lexers.LexerPascal.html0000644000175000001440000000765712261331354027734 0ustar00detlevusers00000000000000 eric4.QScintilla.Lexers.LexerPascal

    eric4.QScintilla.Lexers.LexerPascal

    Module implementing a Pascal lexer with some additional methods.

    Global Attributes

    None

    Classes

    LexerPascal Subclass to implement some additional lexer dependant methods.

    Functions

    None


    LexerPascal

    Subclass to implement some additional lexer dependant methods.

    Derived from

    QsciLexerPascal, Lexer

    Class Attributes

    None

    Class Methods

    None

    Methods

    LexerPascal Constructor
    autoCompletionWordSeparators Public method to return the list of separators for autocompletion.
    defaultKeywords Public method to get the default keywords.
    initProperties Public slot to initialize the properties.
    isCommentStyle Public method to check, if a style is a comment style.
    isStringStyle Public method to check, if a style is a string style.

    Static Methods

    None

    LexerPascal (Constructor)

    LexerPascal(parent = None)

    Constructor

    parent
    parent widget of this lexer

    LexerPascal.autoCompletionWordSeparators

    autoCompletionWordSeparators()

    Public method to return the list of separators for autocompletion.

    Returns:
    list of separators (QStringList)

    LexerPascal.defaultKeywords

    defaultKeywords(kwSet)

    Public method to get the default keywords.

    kwSet
    number of the keyword set (integer)
    Returns:
    string giving the keywords (string) or None

    LexerPascal.initProperties

    initProperties()

    Public slot to initialize the properties.

    LexerPascal.isCommentStyle

    isCommentStyle(style)

    Public method to check, if a style is a comment style.

    Returns:
    flag indicating a comment style (boolean)

    LexerPascal.isStringStyle

    isStringStyle(style)

    Public method to check, if a style is a string style.

    Returns:
    flag indicating a string style (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.UI.DiffDialog.html0000644000175000001440000000013112261331350024754 xustar000000000000000030 mtime=1388688104.916228263 29 atime=1389081085.04672436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.UI.DiffDialog.html0000644000175000001440000003273312261331350024517 0ustar00detlevusers00000000000000 eric4.UI.DiffDialog

    eric4.UI.DiffDialog

    Module implementing a dialog to compare two files.

    Global Attributes

    None

    Classes

    DiffDialog Class implementing a dialog to compare two files.
    DiffWindow Main window class for the standalone dialog.

    Functions

    context_diff Compare two sequences of lines; generate the delta as a context diff.
    unified_diff Compare two sequences of lines; generate the delta as a unified diff.


    DiffDialog

    Class implementing a dialog to compare two files.

    Derived from

    QWidget, Ui_DiffDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    DiffDialog Constructor
    __appendText Private method to append text to the end of the contents pane.
    __fileChanged Private slot to enable/disable the Compare button.
    __generateContextDiff Private slot to generate a context diff output.
    __generateUnifiedDiff Private slot to generate a unified diff output.
    __selectFile Private slot to display a file selection dialog.
    on_buttonBox_clicked Private slot called by a button of the button box clicked.
    on_diffButton_clicked Private slot to handle the Compare button press.
    on_file1Button_clicked Private slot to handle the file 1 file selection button press.
    on_file2Button_clicked Private slot to handle the file 2 file selection button press.
    on_saveButton_clicked Private slot to handle the Save button press.
    show Public slot to show the dialog.

    Static Methods

    None

    DiffDialog (Constructor)

    DiffDialog(parent = None)

    Constructor

    DiffDialog.__appendText

    __appendText(txt, format)

    Private method to append text to the end of the contents pane.

    txt
    text to insert (QString)
    format
    text format to be used (QTextCharFormat)

    DiffDialog.__fileChanged

    __fileChanged()

    Private slot to enable/disable the Compare button.

    DiffDialog.__generateContextDiff

    __generateContextDiff(a, b, fromfile, tofile, fromfiledate, tofiledate)

    Private slot to generate a context diff output.

    a
    first sequence of lines (list of strings)
    b
    second sequence of lines (list of strings)
    fromfile
    filename of the first file (string)
    tofile
    filename of the second file (string)
    fromfiledate
    modification time of the first file (string)
    tofiledate
    modification time of the second file (string)

    DiffDialog.__generateUnifiedDiff

    __generateUnifiedDiff(a, b, fromfile, tofile, fromfiledate, tofiledate)

    Private slot to generate a unified diff output.

    a
    first sequence of lines (list of strings)
    b
    second sequence of lines (list of strings)
    fromfile
    filename of the first file (string)
    tofile
    filename of the second file (string)
    fromfiledate
    modification time of the first file (string)
    tofiledate
    modification time of the second file (string)

    DiffDialog.__selectFile

    __selectFile(lineEdit)

    Private slot to display a file selection dialog.

    lineEdit
    field for the display of the selected filename (QLineEdit)

    DiffDialog.on_buttonBox_clicked

    on_buttonBox_clicked(button)

    Private slot called by a button of the button box clicked.

    button
    button that was clicked (QAbstractButton)

    DiffDialog.on_diffButton_clicked

    on_diffButton_clicked()

    Private slot to handle the Compare button press.

    DiffDialog.on_file1Button_clicked

    on_file1Button_clicked()

    Private slot to handle the file 1 file selection button press.

    DiffDialog.on_file2Button_clicked

    on_file2Button_clicked()

    Private slot to handle the file 2 file selection button press.

    DiffDialog.on_saveButton_clicked

    on_saveButton_clicked()

    Private slot to handle the Save button press.

    It saves the diff shown in the dialog to a file in the local filesystem.

    DiffDialog.show

    show(filename = None)

    Public slot to show the dialog.

    filename
    name of a file to use as the first file (string or QString)


    DiffWindow

    Main window class for the standalone dialog.

    Derived from

    KQMainWindow

    Class Attributes

    None

    Class Methods

    None

    Methods

    DiffWindow Constructor
    eventFilter Public method to filter events.

    Static Methods

    None

    DiffWindow (Constructor)

    DiffWindow(parent = None)

    Constructor

    parent
    reference to the parent widget (QWidget)

    DiffWindow.eventFilter

    eventFilter(obj, event)

    Public method to filter events.

    obj
    reference to the object the event is meant for (QObject)
    event
    reference to the event object (QEvent)
    Returns:
    flag indicating, whether the event was handled (boolean)


    context_diff

    context_diff(a, b, fromfile='', tofile='', fromfiledate='', tofiledate='', n=3, lineterm='\n')

    Compare two sequences of lines; generate the delta as a context diff.

    Context diffs are a compact way of showing line changes and a few lines of context. The number of context lines is set by 'n' which defaults to three.

    By default, the diff control lines (those with *** or ---) are created with a trailing newline. This is helpful so that inputs created from file.readlines() result in diffs that are suitable for file.writelines() since both the inputs and outputs have trailing newlines.

    For inputs that do not have trailing newlines, set the lineterm argument to "" so that the output will be uniformly newline free.

    The context diff format normally has a header for filenames and modification times. Any or all of these may be specified using strings for 'fromfile', 'tofile', 'fromfiledate', and 'tofiledate'. The modification times are normally expressed in the format returned by time.ctime(). If not specified, the strings default to blanks.

    Example:

        >>> print ''.join(context_diff('one\ntwo\nthree\nfour\n'.splitlines(1),
        ...       'zero\none\ntree\nfour\n'.splitlines(1), 'Original', 'Current',
        ...       'Sat Jan 26 23:30:50 1991', 'Fri Jun 06 10:22:46 2003')),
        *** Original Sat Jan 26 23:30:50 1991
        --- Current Fri Jun 06 10:22:46 2003
        ***************
        *** 1,4 ****
          one
        ! two
        ! three
          four
        --- 1,4 ----
        + zero
          one
        ! tree
          four
        

    a
    first sequence of lines (list of strings)
    b
    second sequence of lines (list of strings)
    fromfile
    filename of the first file (string)
    tofile
    filename of the second file (string)
    fromfiledate
    modification time of the first file (string)
    tofiledate
    modification time of the second file (string)
    n
    number of lines of context (integer)
    lineterm
    line termination string (string)
    Returns:
    a generator yielding lines of differences


    unified_diff

    unified_diff(a, b, fromfile='', tofile='', fromfiledate='', tofiledate='', n=3, lineterm='\n')

    Compare two sequences of lines; generate the delta as a unified diff.

    Unified diffs are a compact way of showing line changes and a few lines of context. The number of context lines is set by 'n' which defaults to three.

    By default, the diff control lines (those with ---, +++, or @@) are created with a trailing newline. This is helpful so that inputs created from file.readlines() result in diffs that are suitable for file.writelines() since both the inputs and outputs have trailing newlines.

    For inputs that do not have trailing newlines, set the lineterm argument to "" so that the output will be uniformly newline free.

    The unidiff format normally has a header for filenames and modification times. Any or all of these may be specified using strings for 'fromfile', 'tofile', 'fromfiledate', and 'tofiledate'. The modification times are normally expressed in the format returned by time.ctime().

    Example:

        >>> for line in unified_diff('one two three four'.split(),
        ...             'zero one tree four'.split(), 'Original', 'Current',
        ...             'Sat Jan 26 23:30:50 1991', 'Fri Jun 06 10:20:52 2003',
        ...             lineterm=''):
        ...     print line
        --- Original Sat Jan 26 23:30:50 1991
        +++ Current Fri Jun 06 10:20:52 2003
    @ -1,4 +1,4 @@
        +zero
         one
        -two
        -three
        +tree
         four
        

    a
    first sequence of lines (list of strings)
    b
    second sequence of lines (list of strings)
    fromfile
    filename of the first file (string)
    tofile
    filename of the second file (string)
    fromfiledate
    modification time of the first file (string)
    tofiledate
    modification time of the second file (string)
    n
    number of lines of context (integer)
    lineterm
    line termination string (string)
    Returns:
    a generator yielding lines of differences

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ConfigurationPages.IconsPre0000644000175000001440000000013112261331353031260 xustar000000000000000030 mtime=1388688107.497229559 29 atime=1389081085.04672436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.IconsPreviewDialog.html0000644000175000001440000000371312261331353033775 0ustar00detlevusers00000000000000 eric4.Preferences.ConfigurationPages.IconsPreviewDialog

    eric4.Preferences.ConfigurationPages.IconsPreviewDialog

    Module implementing a dialog to preview the contents of an icon directory.

    Global Attributes

    None

    Classes

    IconsPreviewDialog Class implementing a dialog to preview the contents of an icon directory.

    Functions

    None


    IconsPreviewDialog

    Class implementing a dialog to preview the contents of an icon directory.

    Derived from

    QDialog, Ui_IconsPreviewDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    IconsPreviewDialog Constructor

    Static Methods

    None

    IconsPreviewDialog (Constructor)

    IconsPreviewDialog(parent, dirName)

    Constructor

    parent
    parent widget (QWidget)
    dirName
    name of directory to show

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index.html0000644000175000001440000000013112261331354022556 xustar000000000000000030 mtime=1388688108.659230143 29 atime=1389081085.04672436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index.html0000644000175000001440000000130112261331354022304 0ustar00detlevusers00000000000000 Table of contents

    Table of contents

    Packages

    eric4 Package implementing the eric4 Python IDE (version 4.5).
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Graphics.ClassItem.html0000644000175000001440000000013212261331350026074 xustar000000000000000030 mtime=1388688104.866228238 30 atime=1389081085.047724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Graphics.ClassItem.html0000644000175000001440000001613012261331350025627 0ustar00detlevusers00000000000000 eric4.Graphics.ClassItem

    eric4.Graphics.ClassItem

    Module implementing an UML like class item.

    Global Attributes

    None

    Classes

    ClassItem Class implementing an UML like class item.
    ClassModel Class implementing the class model.

    Functions

    None


    ClassItem

    Class implementing an UML like class item.

    Derived from

    UMLItem

    Class Attributes

    None

    Class Methods

    None

    Methods

    ClassItem Constructor
    __calculateSize Private method to calculate the size of the class item.
    __createTexts Private method to create the text items of the class item.
    isExternal Method returning the external state.
    paint Public method to paint the item in local coordinates.
    setModel Method to set the class model.

    Static Methods

    None

    ClassItem (Constructor)

    ClassItem(model = None, external = False, x = 0, y = 0, rounded = False, noAttrs = False, parent = None, scene = None)

    Constructor

    model
    class model containing the class data (ClassModel)
    external
    flag indicating a class defined outside our scope (boolean)
    x
    x-coordinate (integer)
    y
    y-coordinate (integer)
    rounded=
    flag indicating a rounded corner (boolean)
    noAttrs=
    flag indicating, that no attributes should be shown (boolean)
    parent=
    reference to the parent object (QGraphicsItem)
    scene=
    reference to the scene object (QGraphicsScene)

    ClassItem.__calculateSize

    __calculateSize()

    Private method to calculate the size of the class item.

    ClassItem.__createTexts

    __createTexts()

    Private method to create the text items of the class item.

    ClassItem.isExternal

    isExternal()

    Method returning the external state.

    Returns:
    external state (boolean)

    ClassItem.paint

    paint(painter, option, widget = None)

    Public method to paint the item in local coordinates.

    painter
    reference to the painter object (QPainter)
    option
    style options (QStyleOptionGraphicsItem)
    widget
    optional reference to the widget painted on (QWidget)

    ClassItem.setModel

    setModel(model)

    Method to set the class model.

    model
    class model containing the class data (ClassModel)


    ClassModel

    Class implementing the class model.

    Derived from

    object

    Class Attributes

    None

    Class Methods

    None

    Methods

    ClassModel Constructor
    addAttribute Method to add an attribute to the class model.
    addMethod Method to add a method to the class model.
    getAttributes Method to retrieve the attributes of the class.
    getMethods Method to retrieve the methods of the class.
    getName Method to retrieve the class name.

    Static Methods

    None

    ClassModel (Constructor)

    ClassModel(name, methods = [], attributes = [])

    Constructor

    name
    the class name (string)
    methods
    list of method names of the class (list of strings)
    attributes
    list of attribute names of the class (list of strings)

    ClassModel.addAttribute

    addAttribute(attribute)

    Method to add an attribute to the class model.

    attribute
    attribute name to be added (string)

    ClassModel.addMethod

    addMethod(method)

    Method to add a method to the class model.

    method
    method name to be added (string)

    ClassModel.getAttributes

    getAttributes()

    Method to retrieve the attributes of the class.

    Returns:
    list of class attributes (list of strings)

    ClassModel.getMethods

    getMethods()

    Method to retrieve the methods of the class.

    Returns:
    list of class methods (list of strings)

    ClassModel.getName

    getName()

    Method to retrieve the class name.

    Returns:
    class name (string)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.E4XML.XMLUtilities.html0000644000175000001440000000013212261331352025637 xustar000000000000000030 mtime=1388688106.534229076 30 atime=1389081085.047724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.E4XML.XMLUtilities.html0000644000175000001440000000261012261331352025370 0ustar00detlevusers00000000000000 eric4.E4XML.XMLUtilities

    eric4.E4XML.XMLUtilities

    Module implementing various XML utility functions.

    Global Attributes

    None

    Classes

    None

    Functions

    make_parser Function to generate an XML parser.


    make_parser

    make_parser(validating)

    Function to generate an XML parser.

    First it will be tried to generate a validating parser. If this attempt fails, a non validating parser is tried next.

    validating
    flag indicating a validating parser is requested
    Returns:
    XML parser object

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DebugClients.Python.AsyncIO.html0000644000175000001440000000013212261331354027611 xustar000000000000000030 mtime=1388688108.144229884 30 atime=1389081085.047724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.DebugClients.Python.AsyncIO.html0000644000175000001440000000714212261331354027347 0ustar00detlevusers00000000000000 eric4.DebugClients.Python.AsyncIO

    eric4.DebugClients.Python.AsyncIO

    Module implementing a base class of an asynchronous interface for the debugger.

    Global Attributes

    None

    Classes

    AsyncIO Class implementing asynchronous reading and writing.

    Functions

    None


    AsyncIO

    Class implementing asynchronous reading and writing.

    Derived from

    object

    Class Attributes

    None

    Class Methods

    None

    Methods

    AsyncIO Constructor
    disconnect Public method to disconnect any current connection.
    readReady Public method called when there is data ready to be read.
    setDescriptors Public method called to set the descriptors for the connection.
    write Public method to write a string.
    writeReady Public method called when we are ready to write data.

    Static Methods

    None

    AsyncIO (Constructor)

    AsyncIO()

    Constructor

    parent
    the optional parent of this object (QObject) (ignored)

    AsyncIO.disconnect

    disconnect()

    Public method to disconnect any current connection.

    AsyncIO.readReady

    readReady(fd)

    Public method called when there is data ready to be read.

    fd
    file descriptor of the file that has data to be read (int)

    AsyncIO.setDescriptors

    setDescriptors(rfd, wfd)

    Public method called to set the descriptors for the connection.

    rfd
    file descriptor of the input file (int)
    wfd
    file descriptor of the output file (int)

    AsyncIO.write

    write(s)

    Public method to write a string.

    s
    the data to be written (string)

    AsyncIO.writeReady

    writeReady(fd)

    Public method called when we are ready to write data.

    fd
    file descriptor of the file that has data to be written (int)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.PluginEricapi.html0000644000175000001440000000013212261331350026624 xustar000000000000000030 mtime=1388688104.500228054 30 atime=1389081085.047724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.PluginEricapi.html0000644000175000001440000001044612261331350026363 0ustar00detlevusers00000000000000 eric4.Plugins.PluginEricapi

    eric4.Plugins.PluginEricapi

    Module implementing the Ericapi plugin.

    Global Attributes

    author
    autoactivate
    className
    deactivateable
    error
    longDescription
    name
    packageName
    shortDescription
    version

    Classes

    EricapiPlugin Class implementing the Ericapi plugin.

    Functions

    exeDisplayData Public method to support the display of some executable info.


    EricapiPlugin

    Class implementing the Ericapi plugin.

    Derived from

    QObject

    Class Attributes

    None

    Class Methods

    None

    Methods

    EricapiPlugin Constructor
    __doEricapi Private slot to perform the eric4_api api generation.
    __initialize Private slot to (re)initialize the plugin.
    __projectShowMenu Private slot called, when the the project menu or a submenu is about to be shown.
    activate Public method to activate this plugin.
    deactivate Public method to deactivate this plugin.

    Static Methods

    None

    EricapiPlugin (Constructor)

    EricapiPlugin(ui)

    Constructor

    ui
    reference to the user interface object (UI.UserInterface)

    EricapiPlugin.__doEricapi

    __doEricapi()

    Private slot to perform the eric4_api api generation.

    EricapiPlugin.__initialize

    __initialize()

    Private slot to (re)initialize the plugin.

    EricapiPlugin.__projectShowMenu

    __projectShowMenu(menuName, menu)

    Private slot called, when the the project menu or a submenu is about to be shown.

    menuName
    name of the menu to be shown (string)
    menu
    reference to the menu (QMenu)

    EricapiPlugin.activate

    activate()

    Public method to activate this plugin.

    Returns:
    tuple of None and activation status (boolean)

    EricapiPlugin.deactivate

    deactivate()

    Public method to deactivate this plugin.



    exeDisplayData

    exeDisplayData()

    Public method to support the display of some executable info.

    Returns:
    dictionary containing the data to query the presence of the executable

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsPySvn.SvnSwitchDi0000644000175000001440000000013212261331353031224 xustar000000000000000030 mtime=1388688107.216229418 30 atime=1389081085.048724362 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsPySvn.SvnSwitchDialog.html0000644000175000001440000000503312261331353032565 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsPySvn.SvnSwitchDialog

    eric4.Plugins.VcsPlugins.vcsPySvn.SvnSwitchDialog

    Module implementing a dialog to enter the data for a switch operation.

    Global Attributes

    None

    Classes

    SvnSwitchDialog Class implementing a dialog to enter the data for a switch operation.

    Functions

    None


    SvnSwitchDialog

    Class implementing a dialog to enter the data for a switch operation.

    Derived from

    QDialog, Ui_SvnSwitchDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnSwitchDialog Constructor
    getParameters Public method to retrieve the tag data.

    Static Methods

    None

    SvnSwitchDialog (Constructor)

    SvnSwitchDialog(taglist, reposURL, standardLayout, parent = None)

    Constructor

    taglist
    list of previously entered tags (QStringList)
    reposURL
    repository path (QString or string) or None
    standardLayout
    flag indicating the layout of the repository (boolean)
    parent
    parent widget (QWidget)

    SvnSwitchDialog.getParameters

    getParameters()

    Public method to retrieve the tag data.

    Returns:
    tuple of QString and int (tag, tag type)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsPySvn.SvnDialog.h0000644000175000001440000000013212261331353031133 xustar000000000000000030 mtime=1388688107.177229399 30 atime=1389081085.049724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsPySvn.SvnDialog.html0000644000175000001440000001076312261331353031411 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsPySvn.SvnDialog

    eric4.Plugins.VcsPlugins.vcsPySvn.SvnDialog

    Module implementing a dialog to show the output of a pysvn action.

    Global Attributes

    None

    Classes

    SvnDialog Class implementing a dialog to show the output of a pysvn action.

    Functions

    None


    SvnDialog

    Class implementing a dialog to show the output of a pysvn action.

    Derived from

    QDialog, SvnDialogMixin, Ui_SvnDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnDialog Constructor
    _clientNotifyCallback Protected method called by the client to send events
    finish Public slot called when the process finished or the user pressed the button.
    hasAddOrDelete Public method to check, if the last action contained an add or delete.
    on_buttonBox_clicked Private slot called by a button of the button box clicked.
    showError Public slot to show an error message.
    showMessage Public slot to show a message.

    Static Methods

    None

    SvnDialog (Constructor)

    SvnDialog(text, command, pysvnClient, parent = None, log = "")

    Constructor

    text
    text to be shown by the label (string or QString)
    command
    svn command to be executed (display purposes only) (string or QString)
    pysvnClient
    reference to the pysvn client object (pysvn.Client)
    parent=
    parent widget (QWidget)
    log=
    optional log message (string or QString)

    SvnDialog._clientNotifyCallback

    _clientNotifyCallback(eventDict)

    Protected method called by the client to send events

    eventDict
    dictionary containing the notification event

    SvnDialog.finish

    finish()

    Public slot called when the process finished or the user pressed the button.

    SvnDialog.hasAddOrDelete

    hasAddOrDelete()

    Public method to check, if the last action contained an add or delete.

    SvnDialog.on_buttonBox_clicked

    on_buttonBox_clicked(button)

    Private slot called by a button of the button box clicked.

    button
    button that was clicked (QAbstractButton)

    SvnDialog.showError

    showError(msg)

    Public slot to show an error message.

    msg
    error message to show (string or QString)

    SvnDialog.showMessage

    showMessage(msg)

    Public slot to show a message.

    msg
    message to show (string or QString)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.KdeQt.KQMessageBox.html0000644000175000001440000000013212261331351025752 xustar000000000000000030 mtime=1388688105.549228581 30 atime=1389081085.049724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.KdeQt.KQMessageBox.html0000644000175000001440000002674312261331351025520 0ustar00detlevusers00000000000000 eric4.KdeQt.KQMessageBox

    eric4.KdeQt.KQMessageBox

    Compatibility module to use the KDE Message Box instead of the Qt Message Box.

    Global Attributes

    KQMessageBox
    __qtAbout
    __qtAboutQt
    __qtCritical
    __qtInformation
    __qtQuestion
    __qtWarning

    Classes

    None

    Functions

    __getGuiItem Private function to create a KGuiItem for a button.
    __getLowestFlag Private function to get the lowest flag.
    __kdeAbout Function to show a modal about message box.
    __kdeCritical Function to show a modal critical message box.
    __kdeInformation Function to show a modal information message box.
    __kdeQuestion Function to show a modal critical message box.
    __kdeWarning Function to show a modal warning message box.
    __nrButtons Private function to determine the number of buttons defined.
    about Function to show a modal about message box.
    aboutQt Function to show a modal about message box.
    critical Function to show a modal critical message box.
    information Function to show a modal information message box.
    question Function to show a modal critical message box.
    warning Function to show a modal warning message box.


    __getGuiItem

    __getGuiItem(button)

    Private function to create a KGuiItem for a button.

    button
    flag indicating the button (QMessageBox.StandardButton)
    Returns:
    item for the button (KGuiItem)


    __getLowestFlag

    __getLowestFlag(flags)

    Private function to get the lowest flag.

    flags
    flags to be checked (integer)
    Returns:
    lowest flag (integer)


    __kdeAbout

    __kdeAbout(parent, title, text)

    Function to show a modal about message box.

    parent
    parent widget of the message box
    title
    caption of the message box
    text
    text to be shown by the message box


    __kdeCritical

    __kdeCritical(parent, title, text, buttons = QMessageBox.Ok, defaultButton = QMessageBox.NoButton)

    Function to show a modal critical message box.

    parent
    parent widget of the message box
    title
    caption of the message box
    text
    text to be shown by the message box
    buttons
    flags indicating which buttons to show (QMessageBox.StandardButtons)
    defaultButton
    flag indicating the default button (QMessageBox.StandardButton)
    Returns:
    button pressed by the user (QMessageBox.StandardButton)


    __kdeInformation

    __kdeInformation(parent, title, text, buttons = QMessageBox.Ok, defaultButton = QMessageBox.NoButton)

    Function to show a modal information message box.

    parent
    parent widget of the message box
    title
    caption of the message box
    text
    text to be shown by the message box
    buttons
    flags indicating which buttons to show (QMessageBox.StandardButtons)
    defaultButton
    flag indicating the default button (QMessageBox.StandardButton)
    Returns:
    button pressed by the user (QMessageBox.StandardButton, always QMessageBox.NoButton)


    __kdeQuestion

    __kdeQuestion(parent, title, text, buttons = QMessageBox.Ok, defaultButton = QMessageBox.NoButton)

    Function to show a modal critical message box.

    parent
    parent widget of the message box
    title
    caption of the message box
    text
    text to be shown by the message box
    buttons
    flags indicating which buttons to show (QMessageBox.StandardButtons)
    defaultButton
    flag indicating the default button (QMessageBox.StandardButton)
    Returns:
    button pressed by the user (QMessageBox.StandardButton)


    __kdeWarning

    __kdeWarning(parent, title, text, buttons = QMessageBox.Ok, defaultButton = QMessageBox.NoButton)

    Function to show a modal warning message box.

    parent
    parent widget of the message box
    title
    caption of the message box
    text
    text to be shown by the message box
    buttons
    flags indicating which buttons to show (QMessageBox.StandardButtons)
    defaultButton
    flag indicating the default button (QMessageBox.StandardButton)
    Returns:
    button pressed by the user (QMessageBox.StandardButton)


    __nrButtons

    __nrButtons(buttons)

    Private function to determine the number of buttons defined.

    buttons
    flags indicating which buttons to show (QMessageBox.StandardButtons)
    Returns:
    number of buttons defined (integer)


    about

    about(parent, title, text)

    Function to show a modal about message box.

    parent
    parent widget of the message box
    title
    caption of the message box
    text
    text to be shown by the message box


    aboutQt

    aboutQt(parent, title)

    Function to show a modal about message box.

    parent
    parent widget of the message box
    title
    caption of the message box


    critical

    critical(parent, title, text, buttons = QMessageBox.Ok, defaultButton = QMessageBox.NoButton)

    Function to show a modal critical message box.

    parent
    parent widget of the message box
    title
    caption of the message box
    text
    text to be shown by the message box
    buttons
    flags indicating which buttons to show (QMessageBox.StandardButtons)
    defaultButton
    flag indicating the default button (QMessageBox.StandardButton)
    Returns:
    button pressed by the user (QMessageBox.StandardButton)


    information

    information(parent, title, text, buttons = QMessageBox.Ok, defaultButton = QMessageBox.NoButton)

    Function to show a modal information message box.

    parent
    parent widget of the message box
    title
    caption of the message box
    text
    text to be shown by the message box
    buttons
    flags indicating which buttons to show (QMessageBox.StandardButtons)
    defaultButton
    flag indicating the default button (QMessageBox.StandardButton)
    Returns:
    button pressed by the user (QMessageBox.StandardButton, always QMessageBox.NoButton)


    question

    question(parent, title, text, buttons = QMessageBox.Ok, defaultButton = QMessageBox.NoButton)

    Function to show a modal critical message box.

    parent
    parent widget of the message box
    title
    caption of the message box
    text
    text to be shown by the message box
    buttons
    flags indicating which buttons to show (QMessageBox.StandardButtons)
    defaultButton
    flag indicating the default button (QMessageBox.StandardButton)
    Returns:
    button pressed by the user (QMessageBox.StandardButton)


    warning

    warning(parent, title, text, buttons = QMessageBox.Ok, defaultButton = QMessageBox.NoButton)

    Function to show a modal warning message box.

    parent
    parent widget of the message box
    title
    caption of the message box
    text
    text to be shown by the message box
    buttons
    flags indicating which buttons to show (QMessageBox.StandardButtons)
    defaultButton
    flag indicating the default button (QMessageBox.StandardButton)
    Returns:
    button pressed by the user (QMessageBox.StandardButton)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Debugger.DebugUI.html0000644000175000001440000000013212261331350025460 xustar000000000000000030 mtime=1388688104.684228147 30 atime=1389081085.049724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Debugger.DebugUI.html0000644000175000001440000007743712261331350025234 0ustar00detlevusers00000000000000 eric4.Debugger.DebugUI

    eric4.Debugger.DebugUI

    Module implementing the debugger UI.

    Global Attributes

    None

    Classes

    DebugUI Class implementing the debugger part of the UI.

    Functions

    None


    DebugUI

    Class implementing the debugger part of the UI.

    Signals

    appendStdout(msg)
    emitted when the client program has terminated and the display of the termination dialog is suppressed
    clientStack(stack)
    emitted at breaking after a reported exception
    compileForms()
    emitted if changed project forms should be compiled
    compileResources()
    emitted if changed project resources should be compiled
    debuggingStarted(filename)
    emitted when a debugging session was started
    exceptionInterrupt()
    emitted after the execution was interrupted by an exception and acknowledged by the user
    resetUI()
    emitted to reset the UI

    Derived from

    QObject

    Class Attributes

    None

    Class Methods

    None

    Methods

    DebugUI Constructor
    __breakpointSelected Private method to handle the breakpoint selected signal.
    __checkActions Private slot to check some actions for their enable/disable status.
    __clearBreakpoints Private slot to handle the 'Clear breakpoints' action.
    __clientBreakConditionError Private method to handle a condition error of a breakpoint.
    __clientException Private method to handle an exception of the debugged program.
    __clientExit Private method to handle the debugged program terminating.
    __clientGone Private method to handle the disconnection of the debugger client.
    __clientLine Private method to handle a change to the current line.
    __clientSyntaxError Private method to handle a syntax error in the debugged program.
    __clientThreadSet Private method to handle a change of the client's current thread.
    __clientVariable Private method to write the contents of a clients classvariable to the user interface.
    __clientVariables Private method to write the clients variables to the user interface.
    __clientWatchConditionError Public method to handle a expression error of a watch expression.
    __compileChangedProjectFiles Private method to signal compilation of changed forms and resources is wanted.
    __configureExceptionsFilter Private slot for displaying the exception filter dialog.
    __configureIgnoredExceptions Private slot for displaying the ignored exceptions dialog.
    __configureVariablesFilters Private slot for displaying the variables filter configuration dialog.
    __continue Private method to handle the Continue action.
    __coverageProject Private slot to handle the coverage of project action.
    __coverageScript Private slot to handle the coverage of script action.
    __cursorChanged Private slot handling the cursorChanged signal of the viewmanager.
    __debugProject Private slot to handle the debug project action.
    __debugScript Private slot to handle the debug script action.
    __doCoverage Private method to handle the coverage actions.
    __doDebug Private method to handle the debug actions.
    __doProfile Private method to handle the profile actions.
    __doRestart Private slot to handle the restart action to restart the last debugged file.
    __doRun Private method to handle the run actions.
    __editBreakpoint Private slot to handle the 'Edit breakpoint' action.
    __editorOpened Private slot to handle the editorOpened signal.
    __enterRemote Private method to update the user interface.
    __eval Private method to handle the Eval action.
    __exec Private method to handle the Exec action.
    __getClientVariables Private method to request the global and local variables.
    __getThreadList Private method to get the list of threads from the client.
    __lastEditorClosed Private slot to handle the closeProgram signal.
    __nextBreakpoint Private slot to handle the 'Next breakpoint' action.
    __passiveDebugStarted Private slot to handle a passive debug session start.
    __previousBreakpoint Private slot to handle the 'Previous breakpoint' action.
    __profileProject Private slot to handle the profile project action.
    __profileScript Private slot to handle the profile script action.
    __projectClosed Private slot to handle the projectClosed signal.
    __projectOpened Private slot to handle the projectOpened signal.
    __projectSessionLoaded Private slot to handle the projectSessionLoaded signal.
    __resetUI Private slot to reset the user interface.
    __runProject Private slot to handle the run project action.
    __runScript Private slot to handle the run script action.
    __runToCursor Private method to handle the Run to Cursor action.
    __showBreakpointsMenu Private method to handle the show breakpoints menu signal.
    __showDebugMenu Private method to set up the debug menu.
    __specialContinue Private method to handle the Special Continue action.
    __step Private method to handle the Step action.
    __stepOut Private method to handle the Step Out action.
    __stepOver Private method to handle the Step Over action.
    __stepQuit Private method to handle the Step Quit action.
    __stopScript Private slot to stop the running script.
    __toggleBreakpoint Private slot to handle the 'Set/Reset breakpoint' action.
    getActions Public method to get a list of all actions.
    initActions Method defining the user interface actions.
    initMenus Public slot to initialize the project menu.
    initToolbars Public slot to initialize the debug toolbars.
    setArgvHistory Public slot to initialize the argv history.
    setAutoClearShell Public slot to initialize the autoClearShell flag.
    setAutoContinue Public slot to initialize the autoContinue flag.
    setEnvHistory Public slot to initialize the env history.
    setExcIgnoreList Public slot to initialize the ignored exceptions type list.
    setExcList Public slot to initialize the exceptions type list.
    setExceptionReporting Public slot to initialize the exception reporting flag.
    setTracePython Public slot to initialize the trace Python flag.
    setWdHistory Public slot to initialize the wd history.
    shutdown Public method to perform shutdown actions.
    shutdownServer Public method to shut down the debug server.
    variablesFilter Public method to get the variables filter for a scope.

    Static Methods

    None

    DebugUI (Constructor)

    DebugUI(ui, vm, debugServer, debugViewer, project)

    Constructor

    ui
    reference to the main UI
    vm
    reference to the viewmanager
    debugServer
    reference to the debug server
    debugViewer
    reference to the debug viewer widget
    project
    reference to the project object

    DebugUI.__breakpointSelected

    __breakpointSelected(act)

    Private method to handle the breakpoint selected signal.

    act
    reference to the action that triggered (QAction)

    DebugUI.__checkActions

    __checkActions(editor)

    Private slot to check some actions for their enable/disable status.

    editor
    editor window

    DebugUI.__clearBreakpoints

    __clearBreakpoints()

    Private slot to handle the 'Clear breakpoints' action.

    DebugUI.__clientBreakConditionError

    __clientBreakConditionError(filename, lineno)

    Private method to handle a condition error of a breakpoint.

    filename
    filename of the breakpoint
    lineno
    linenumber of the breakpoint

    DebugUI.__clientException

    __clientException(exceptionType, exceptionMessage, stackTrace)

    Private method to handle an exception of the debugged program.

    exceptionType
    type of exception raised (string)
    exceptionMessage
    message given by the exception (string)
    stackTrace
    list of stack entries.

    DebugUI.__clientExit

    __clientExit(status)

    Private method to handle the debugged program terminating.

    status
    exit code of the debugged program (int)

    DebugUI.__clientGone

    __clientGone(unplanned)

    Private method to handle the disconnection of the debugger client.

    unplanned
    1 if the client died, 0 otherwise

    DebugUI.__clientLine

    __clientLine(fn, line, forStack)

    Private method to handle a change to the current line.

    fn
    filename (string)
    line
    linenumber (int)
    forStack
    flag indicating this is for a stack dump (boolean)

    DebugUI.__clientSyntaxError

    __clientSyntaxError(message, filename, lineNo, characterNo)

    Private method to handle a syntax error in the debugged program.

    message
    message of the syntax error (string)
    filename
    translated filename of the syntax error position (string)
    lineNo
    line number of the syntax error position (integer)
    characterNo
    character number of the syntax error position (integer)

    DebugUI.__clientThreadSet

    __clientThreadSet()

    Private method to handle a change of the client's current thread.

    DebugUI.__clientVariable

    __clientVariable(scope, variables)

    Private method to write the contents of a clients classvariable to the user interface.

    scope
    scope of the variables (-1 = empty global, 1 = global, 0 = local)
    variables
    the list of members of a classvariable from the client

    DebugUI.__clientVariables

    __clientVariables(scope, variables)

    Private method to write the clients variables to the user interface.

    scope
    scope of the variables (-1 = empty global, 1 = global, 0 = local)
    variables
    the list of variables from the client

    DebugUI.__clientWatchConditionError

    __clientWatchConditionError(cond)

    Public method to handle a expression error of a watch expression.

    Note: This can only happen for normal watch expressions

    cond
    expression of the watch expression (string or QString)

    DebugUI.__compileChangedProjectFiles

    __compileChangedProjectFiles()

    Private method to signal compilation of changed forms and resources is wanted.

    DebugUI.__configureExceptionsFilter

    __configureExceptionsFilter()

    Private slot for displaying the exception filter dialog.

    DebugUI.__configureIgnoredExceptions

    __configureIgnoredExceptions()

    Private slot for displaying the ignored exceptions dialog.

    DebugUI.__configureVariablesFilters

    __configureVariablesFilters()

    Private slot for displaying the variables filter configuration dialog.

    DebugUI.__continue

    __continue()

    Private method to handle the Continue action.

    DebugUI.__coverageProject

    __coverageProject()

    Private slot to handle the coverage of project action.

    DebugUI.__coverageScript

    __coverageScript()

    Private slot to handle the coverage of script action.

    DebugUI.__cursorChanged

    __cursorChanged(editor)

    Private slot handling the cursorChanged signal of the viewmanager.

    editor
    editor window

    DebugUI.__debugProject

    __debugProject()

    Private slot to handle the debug project action.

    DebugUI.__debugScript

    __debugScript()

    Private slot to handle the debug script action.

    DebugUI.__doCoverage

    __doCoverage(runProject)

    Private method to handle the coverage actions.

    runProject
    flag indicating coverage of the current project (True) or script (false)

    DebugUI.__doDebug

    __doDebug(debugProject)

    Private method to handle the debug actions.

    debugProject
    flag indicating debugging the current project (True) or script (False)

    DebugUI.__doProfile

    __doProfile(runProject)

    Private method to handle the profile actions.

    runProject
    flag indicating profiling of the current project (True) or script (False)

    DebugUI.__doRestart

    __doRestart()

    Private slot to handle the restart action to restart the last debugged file.

    DebugUI.__doRun

    __doRun(runProject)

    Private method to handle the run actions.

    runProject
    flag indicating running the current project (True) or script (False)

    DebugUI.__editBreakpoint

    __editBreakpoint()

    Private slot to handle the 'Edit breakpoint' action.

    DebugUI.__editorOpened

    __editorOpened(fn)

    Private slot to handle the editorOpened signal.

    fn
    filename of the opened editor

    DebugUI.__enterRemote

    __enterRemote()

    Private method to update the user interface.

    This method is called just prior to executing some of the program being debugged.

    DebugUI.__eval

    __eval()

    Private method to handle the Eval action.

    DebugUI.__exec

    __exec()

    Private method to handle the Exec action.

    DebugUI.__getClientVariables

    __getClientVariables()

    Private method to request the global and local variables.

    In the first step, the global variables are requested from the client. Once these have been received, the local variables are requested. This happens in the method '__clientVariables'.

    DebugUI.__getThreadList

    __getThreadList()

    Private method to get the list of threads from the client.

    DebugUI.__lastEditorClosed

    __lastEditorClosed()

    Private slot to handle the closeProgram signal.

    DebugUI.__nextBreakpoint

    __nextBreakpoint()

    Private slot to handle the 'Next breakpoint' action.

    DebugUI.__passiveDebugStarted

    __passiveDebugStarted(fn, exc)

    Private slot to handle a passive debug session start.

    fn
    filename of the debugged script
    exc
    flag to enable exception reporting of the IDE (boolean)

    DebugUI.__previousBreakpoint

    __previousBreakpoint()

    Private slot to handle the 'Previous breakpoint' action.

    DebugUI.__profileProject

    __profileProject()

    Private slot to handle the profile project action.

    DebugUI.__profileScript

    __profileScript()

    Private slot to handle the profile script action.

    DebugUI.__projectClosed

    __projectClosed()

    Private slot to handle the projectClosed signal.

    DebugUI.__projectOpened

    __projectOpened()

    Private slot to handle the projectOpened signal.

    DebugUI.__projectSessionLoaded

    __projectSessionLoaded()

    Private slot to handle the projectSessionLoaded signal.

    DebugUI.__resetUI

    __resetUI()

    Private slot to reset the user interface.

    DebugUI.__runProject

    __runProject()

    Private slot to handle the run project action.

    DebugUI.__runScript

    __runScript()

    Private slot to handle the run script action.

    DebugUI.__runToCursor

    __runToCursor()

    Private method to handle the Run to Cursor action.

    DebugUI.__showBreakpointsMenu

    __showBreakpointsMenu()

    Private method to handle the show breakpoints menu signal.

    DebugUI.__showDebugMenu

    __showDebugMenu()

    Private method to set up the debug menu.

    DebugUI.__specialContinue

    __specialContinue()

    Private method to handle the Special Continue action.

    DebugUI.__step

    __step()

    Private method to handle the Step action.

    DebugUI.__stepOut

    __stepOut()

    Private method to handle the Step Out action.

    DebugUI.__stepOver

    __stepOver()

    Private method to handle the Step Over action.

    DebugUI.__stepQuit

    __stepQuit()

    Private method to handle the Step Quit action.

    DebugUI.__stopScript

    __stopScript()

    Private slot to stop the running script.

    DebugUI.__toggleBreakpoint

    __toggleBreakpoint()

    Private slot to handle the 'Set/Reset breakpoint' action.

    DebugUI.getActions

    getActions()

    Public method to get a list of all actions.

    Returns:
    list of all actions (list of E4Action)

    DebugUI.initActions

    initActions()

    Method defining the user interface actions.

    DebugUI.initMenus

    initMenus()

    Public slot to initialize the project menu.

    Returns:
    the generated menu

    DebugUI.initToolbars

    initToolbars(toolbarManager)

    Public slot to initialize the debug toolbars.

    toolbarManager
    reference to a toolbar manager object (E4ToolBarManager)
    Returns:
    the generated toolbars (list of QToolBar)

    DebugUI.setArgvHistory

    setArgvHistory(argsStr, clearHistories = False)

    Public slot to initialize the argv history.

    argsStr
    the commandline arguments (string or QString)
    clearHistories
    flag indicating, that the list should be cleared (boolean)

    DebugUI.setAutoClearShell

    setAutoClearShell(autoClearShell)

    Public slot to initialize the autoClearShell flag.

    autoClearShell
    flag indicating, that the interpreter window should be cleared (boolean)

    DebugUI.setAutoContinue

    setAutoContinue(autoContinue)

    Public slot to initialize the autoContinue flag.

    autoContinue
    flag indicating, that the debugger should not stop at the first executable line (boolean)

    DebugUI.setEnvHistory

    setEnvHistory(envStr, clearHistories = False)

    Public slot to initialize the env history.

    envStr
    the environment settings (string or QString)
    clearHistories
    flag indicating, that the list should be cleared (boolean)

    DebugUI.setExcIgnoreList

    setExcIgnoreList(excIgnoreList)

    Public slot to initialize the ignored exceptions type list.

    excIgnoreList
    list of ignored exception types (QStringList)

    DebugUI.setExcList

    setExcList(excList)

    Public slot to initialize the exceptions type list.

    excList
    list of exception types (QStringList)

    DebugUI.setExceptionReporting

    setExceptionReporting(exceptions)

    Public slot to initialize the exception reporting flag.

    exceptions
    flag indicating exception reporting status (boolean)

    DebugUI.setTracePython

    setTracePython(tracePython)

    Public slot to initialize the trace Python flag.

    tracePython
    flag indicating if the Python library should be traced as well (boolean)

    DebugUI.setWdHistory

    setWdHistory(wdStr, clearHistories = False)

    Public slot to initialize the wd history.

    wdStr
    the working directory (string or QString)
    clearHistories
    flag indicating, that the list should be cleared (boolean)

    DebugUI.shutdown

    shutdown()

    Public method to perform shutdown actions.

    DebugUI.shutdownServer

    shutdownServer()

    Public method to shut down the debug server.

    This is needed to cleanly close the sockets on Win OS.

    Returns:
    always true

    DebugUI.variablesFilter

    variablesFilter(scope)

    Public method to get the variables filter for a scope.

    scope
    flag indicating global (True) or local (False) scope

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsPySvn.SvnLogDialo0000644000175000001440000000013212261331353031200 xustar000000000000000030 mtime=1388688107.172229396 30 atime=1389081085.049724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsPySvn.SvnLogDialog.html0000644000175000001440000001006012261331353032041 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsPySvn.SvnLogDialog

    eric4.Plugins.VcsPlugins.vcsPySvn.SvnLogDialog

    Module implementing a dialog to show the output of the svn log command process.

    Global Attributes

    None

    Classes

    SvnLogDialog Class implementing a dialog to show the output of the svn log command.

    Functions

    None


    SvnLogDialog

    Class implementing a dialog to show the output of the svn log command.

    The dialog is nonmodal. Clicking a link in the upper text pane shows a diff of the versions.

    Derived from

    QWidget, SvnDialogMixin, Ui_SvnLogDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnLogDialog Constructor
    __finish Private slot called when the user pressed the button.
    __showError Private slot to show an error message.
    __sourceChanged Private slot to handle the sourceChanged signal of the contents pane.
    on_buttonBox_clicked Private slot called by a button of the button box clicked.
    start Public slot to start the svn log command.

    Static Methods

    None

    SvnLogDialog (Constructor)

    SvnLogDialog(vcs, parent = None)

    Constructor

    vcs
    reference to the vcs object
    parent
    parent widget (QWidget)

    SvnLogDialog.__finish

    __finish()

    Private slot called when the user pressed the button.

    SvnLogDialog.__showError

    __showError(msg)

    Private slot to show an error message.

    msg
    error message to show (string or QString)

    SvnLogDialog.__sourceChanged

    __sourceChanged(url)

    Private slot to handle the sourceChanged signal of the contents pane.

    url
    the url that was clicked (QUrl)

    SvnLogDialog.on_buttonBox_clicked

    on_buttonBox_clicked(button)

    Private slot called by a button of the button box clicked.

    button
    button that was clicked (QAbstractButton)

    SvnLogDialog.start

    start(fn, noEntries = 0)

    Public slot to start the svn log command.

    fn
    filename to show the log for (string)
    noEntries
    number of entries to show (integer)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ConfigurationDialog.html0000644000175000001440000000013212261331350030640 xustar000000000000000030 mtime=1388688104.586228098 30 atime=1389081085.049724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationDialog.html0000644000175000001440000004127512261331350030403 0ustar00detlevusers00000000000000 eric4.Preferences.ConfigurationDialog

    eric4.Preferences.ConfigurationDialog

    Module implementing a dialog for the configuration of eric4.

    Global Attributes

    None

    Classes

    ConfigurationDialog Class for the dialog variant.
    ConfigurationPageItem Class implementing a QTreeWidgetItem holding the configuration page data.
    ConfigurationWidget Class implementing a dialog for the configuration of eric4.
    ConfigurationWindow Main window class for the standalone dialog.

    Functions

    None


    ConfigurationDialog

    Class for the dialog variant.

    Signals

    preferencesChanged
    emitted after settings have been changed

    Derived from

    QDialog

    Class Attributes

    DefaultMode
    HelpBrowserMode
    TrayStarterMode

    Class Methods

    None

    Methods

    ConfigurationDialog Constructor
    __preferencesChanged Private slot to handle a change of the preferences.
    setPreferences Public method called to store the selected values into the preferences storage.
    showConfigurationPageByName Public slot to show a named configuration page.

    Static Methods

    None

    ConfigurationDialog (Constructor)

    ConfigurationDialog(parent = None, name = None, modal = False, fromEric = True, displayMode = ConfigurationWidget.DefaultMode)

    Constructor

    parent
    The parent widget of this dialog. (QWidget)
    name
    The name of this dialog. (QString)
    modal
    Flag indicating a modal dialog. (boolean)
    fromEric=
    flag indicating a dialog generation from within the eric4 ide (boolean)
    displayMode=
    mode of the configuration dialog (DefaultMode, HelpBrowserMode, TrayStarterMode)

    ConfigurationDialog.__preferencesChanged

    __preferencesChanged()

    Private slot to handle a change of the preferences.

    ConfigurationDialog.setPreferences

    setPreferences()

    Public method called to store the selected values into the preferences storage.

    ConfigurationDialog.showConfigurationPageByName

    showConfigurationPageByName(pageName)

    Public slot to show a named configuration page.

    pageName
    name of the configuration page to show (string or QString)


    ConfigurationPageItem

    Class implementing a QTreeWidgetItem holding the configuration page data.

    Derived from

    QTreeWidgetItem

    Class Attributes

    None

    Class Methods

    None

    Methods

    ConfigurationPageItem Constructor
    getPageName Public method to get the name of the associated configuration page.

    Static Methods

    None

    ConfigurationPageItem (Constructor)

    ConfigurationPageItem(parent, text, pageName, iconFile)

    Constructor

    parent
    parent widget of the item (QTreeWidget or QTreeWidgetItem)
    text
    text to be displayed (string or QString)
    pageName
    name of the configuration page (string or QString)
    iconFile
    file name of the icon to be shown (string)

    ConfigurationPageItem.getPageName

    getPageName()

    Public method to get the name of the associated configuration page.

    Returns:
    name of the configuration page (string)


    ConfigurationWidget

    Class implementing a dialog for the configuration of eric4.

    Signals

    accepted()
    emitted to indicate acceptance of the changes
    preferencesChanged
    emitted after settings have been changed
    rejected()
    emitted to indicate rejection of the changes

    Derived from

    QWidget

    Class Attributes

    DefaultMode
    HelpBrowserMode
    TrayStarterMode

    Class Methods

    None

    Methods

    ConfigurationWidget Constructor
    __filterChildItems Private method to filter child items based on a filter string.
    __filterTextChanged Private slot to handle a change of the filter.
    __importConfigurationPage Private method to import a configuration page module.
    __initLexers Private method to initialize the dictionary of preferences lexers.
    __initPage Private method to initialize a configuration page.
    __setupUi Private method to perform the general setup of the configuration widget.
    __showConfigurationPage Private slot to show a selected configuration page.
    accept Public slot to accept the buttonBox accept signal.
    calledFromEric Public method to check, if invoked from within eric.
    getLexers Public method to get a reference to the lexers dictionary.
    getPage Public method to get a reference to the named page.
    on_applyButton_clicked Private slot called to apply the settings of the current page.
    on_buttonBox_clicked Private slot called by a button of the button box clicked.
    on_resetButton_clicked Private slot called to reset the settings of the current page.
    setPreferences Public method called to store the selected values into the preferences storage.
    showConfigurationPageByName Public slot to show a named configuration page.

    Static Methods

    None

    ConfigurationWidget (Constructor)

    ConfigurationWidget(parent = None, fromEric = True, displayMode = DefaultMode)

    Constructor

    parent
    The parent widget of this dialog. (QWidget)
    fromEric=
    flag indicating a dialog generation from within the eric4 ide (boolean)
    displayMode=
    mode of the configuration dialog (DefaultMode, HelpBrowserMode, TrayStarterMode)

    ConfigurationWidget.__filterChildItems

    __filterChildItems(parent, filter)

    Private method to filter child items based on a filter string.

    parent
    reference to the parent item (QTreeWidgetItem)
    filter
    filter string (string)
    Returns:
    flag indicating a visible child item (boolean)

    ConfigurationWidget.__filterTextChanged

    __filterTextChanged(filter)

    Private slot to handle a change of the filter.

    filter
    text of the filter line edit (string)

    ConfigurationWidget.__importConfigurationPage

    __importConfigurationPage(name)

    Private method to import a configuration page module.

    name
    name of the configuration page module (string)
    Returns:
    reference to the configuration page module

    ConfigurationWidget.__initLexers

    __initLexers()

    Private method to initialize the dictionary of preferences lexers.

    ConfigurationWidget.__initPage

    __initPage(pageData)

    Private method to initialize a configuration page.

    pageData
    data structure for the page to initialize
    Returns:
    reference to the initialized page

    ConfigurationWidget.__setupUi

    __setupUi()

    Private method to perform the general setup of the configuration widget.

    ConfigurationWidget.__showConfigurationPage

    __showConfigurationPage(itm, column)

    Private slot to show a selected configuration page.

    itm
    reference to the selected item (QTreeWidgetItem)
    column
    column that was selected (integer) (ignored)

    ConfigurationWidget.accept

    accept()

    Public slot to accept the buttonBox accept signal.

    ConfigurationWidget.calledFromEric

    calledFromEric()

    Public method to check, if invoked from within eric.

    Returns:
    flag indicating invocation from within eric (boolean)

    ConfigurationWidget.getLexers

    getLexers()

    Public method to get a reference to the lexers dictionary.

    Returns:
    reference to the lexers dictionary

    ConfigurationWidget.getPage

    getPage(pageName)

    Public method to get a reference to the named page.

    pageName
    name of the configuration page (string)
    Returns:
    reference to the page or None, indicating page was not loaded yet

    ConfigurationWidget.on_applyButton_clicked

    on_applyButton_clicked()

    Private slot called to apply the settings of the current page.

    ConfigurationWidget.on_buttonBox_clicked

    on_buttonBox_clicked(button)

    Private slot called by a button of the button box clicked.

    button
    button that was clicked (QAbstractButton)

    ConfigurationWidget.on_resetButton_clicked

    on_resetButton_clicked()

    Private slot called to reset the settings of the current page.

    ConfigurationWidget.setPreferences

    setPreferences()

    Public method called to store the selected values into the preferences storage.

    ConfigurationWidget.showConfigurationPageByName

    showConfigurationPageByName(pageName)

    Public slot to show a named configuration page.

    pageName
    name of the configuration page to show (string or QString)


    ConfigurationWindow

    Main window class for the standalone dialog.

    Derived from

    KQMainWindow

    Class Attributes

    None

    Class Methods

    None

    Methods

    ConfigurationWindow Constructor
    accept Protected slot called by the Ok button.
    showConfigurationPageByName Public slot to show a named configuration page.

    Static Methods

    None

    ConfigurationWindow (Constructor)

    ConfigurationWindow(parent = None)

    Constructor

    parent
    reference to the parent widget (QWidget)

    ConfigurationWindow.accept

    accept()

    Protected slot called by the Ok button.

    ConfigurationWindow.showConfigurationPageByName

    showConfigurationPageByName(pageName)

    Public slot to show a named configuration page.

    pageName
    name of the configuration page to show (string or QString)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.PluginWizardQInputDialog.html0000644000175000001440000000013212261331350030771 xustar000000000000000030 mtime=1388688104.489228049 30 atime=1389081085.050724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.PluginWizardQInputDialog.html0000644000175000001440000001030112261331350030516 0ustar00detlevusers00000000000000 eric4.Plugins.PluginWizardQInputDialog

    eric4.Plugins.PluginWizardQInputDialog

    Module implementing the QInputDialog wizard plugin.

    Global Attributes

    author
    autoactivate
    className
    deactivateable
    error
    longDescription
    name
    packageName
    shortDescription
    version

    Classes

    InputDialogWizard Class implementing the QInputDialog wizard plugin.

    Functions

    None


    InputDialogWizard

    Class implementing the QInputDialog wizard plugin.

    Derived from

    QObject

    Class Attributes

    None

    Class Methods

    None

    Methods

    InputDialogWizard Constructor
    __callForm Private method to display a dialog and get the code.
    __handle Private method to handle the wizards action
    __initAction Private method to initialize the action.
    __initMenu Private method to add the actions to the right menu.
    activate Public method to activate this plugin.
    deactivate Public method to deactivate this plugin.

    Static Methods

    None

    InputDialogWizard (Constructor)

    InputDialogWizard(ui)

    Constructor

    ui
    reference to the user interface object (UI.UserInterface)

    InputDialogWizard.__callForm

    __callForm(editor)

    Private method to display a dialog and get the code.

    editor
    reference to the current editor
    Returns:
    the generated code (string)

    InputDialogWizard.__handle

    __handle()

    Private method to handle the wizards action

    InputDialogWizard.__initAction

    __initAction()

    Private method to initialize the action.

    InputDialogWizard.__initMenu

    __initMenu()

    Private method to add the actions to the right menu.

    InputDialogWizard.activate

    activate()

    Public method to activate this plugin.

    Returns:
    tuple of None and activation status (boolean)

    InputDialogWizard.deactivate

    deactivate()

    Public method to deactivate this plugin.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.Bookmarks.BookmarksDialog.ht0000644000175000001440000000013112261331353031232 xustar000000000000000029 mtime=1388688107.87622975 30 atime=1389081085.050724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.Bookmarks.BookmarksDialog.html0000644000175000001440000001670112261331353031323 0ustar00detlevusers00000000000000 eric4.Helpviewer.Bookmarks.BookmarksDialog

    eric4.Helpviewer.Bookmarks.BookmarksDialog

    Module implementing a dialog to manage bookmarks.

    Global Attributes

    None

    Classes

    BookmarksDialog Class implementing a dialog to manage bookmarks.

    Functions

    None


    BookmarksDialog

    Class implementing a dialog to manage bookmarks.

    Signals

    newUrl(const QUrl&, const QString&)
    emitted to open a URL in a new tab
    openUrl(const QUrl&, const QString&)
    emitted to open a URL in the current tab

    Derived from

    QDialog, Ui_BookmarksDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    BookmarksDialog Constructor
    __activated Private slot to handle the activation of an entry.
    __customContextMenuRequested Private slot to handle the context menu request for the bookmarks tree.
    __editAddress Private slot to edit the address part of a bookmark.
    __editName Private slot to edit the name part of a bookmark.
    __expandNodes Private method to expand all child nodes of a node.
    __newFolder Private slot to add a new bookmarks folder.
    __openBookmark Private method to open a bookmark.
    __openBookmarkInCurrentTab Private slot to open a bookmark in the current browser tab.
    __openBookmarkInNewTab Private slot to open a bookmark in a new browser tab.
    __saveExpandedNodes Private method to save the child nodes of an expanded node.
    __shutdown Private method to perform shutdown actions for the dialog.
    closeEvent Protected method to handle the closing of the dialog.
    reject Protected method called when the dialog is rejected.

    Static Methods

    None

    BookmarksDialog (Constructor)

    BookmarksDialog(parent = None, manager = None)

    Constructor

    parent
    reference to the parent widget (QWidget
    manager
    reference to the bookmarks manager object (BookmarksManager)

    BookmarksDialog.__activated

    __activated(idx)

    Private slot to handle the activation of an entry.

    idx
    reference to the entry index (QModelIndex)

    BookmarksDialog.__customContextMenuRequested

    __customContextMenuRequested(pos)

    Private slot to handle the context menu request for the bookmarks tree.

    pos
    position the context menu was requested (QPoint)

    BookmarksDialog.__editAddress

    __editAddress()

    Private slot to edit the address part of a bookmark.

    BookmarksDialog.__editName

    __editName()

    Private slot to edit the name part of a bookmark.

    BookmarksDialog.__expandNodes

    __expandNodes(node)

    Private method to expand all child nodes of a node.

    node
    reference to the bookmark node to expand (BookmarkNode)

    BookmarksDialog.__newFolder

    __newFolder()

    Private slot to add a new bookmarks folder.

    BookmarksDialog.__openBookmark

    __openBookmark(newTab)

    Private method to open a bookmark.

    newTab
    flag indicating to open the bookmark in a new tab (boolean)

    BookmarksDialog.__openBookmarkInCurrentTab

    __openBookmarkInCurrentTab()

    Private slot to open a bookmark in the current browser tab.

    BookmarksDialog.__openBookmarkInNewTab

    __openBookmarkInNewTab()

    Private slot to open a bookmark in a new browser tab.

    BookmarksDialog.__saveExpandedNodes

    __saveExpandedNodes(parent)

    Private method to save the child nodes of an expanded node.

    parent
    index of the parent node (QModelIndex)
    Returns:
    flag indicating a change (boolean)

    BookmarksDialog.__shutdown

    __shutdown()

    Private method to perform shutdown actions for the dialog.

    BookmarksDialog.closeEvent

    closeEvent(evt)

    Protected method to handle the closing of the dialog.

    evt
    reference to the event object (QCloseEvent) (ignored)

    BookmarksDialog.reject

    reject()

    Protected method called when the dialog is rejected.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.VCS.StatusMonitorLed.html0000644000175000001440000000013012261331351026362 xustar000000000000000028 mtime=1388688105.1882284 30 atime=1389081085.050724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.VCS.StatusMonitorLed.html0000644000175000001440000001136612261331351026125 0ustar00detlevusers00000000000000 eric4.VCS.StatusMonitorLed

    eric4.VCS.StatusMonitorLed

    Module implementing a LED to indicate the status of the VCS status monitor thread.

    Global Attributes

    None

    Classes

    StatusMonitorLed Class implementing a LED to indicate the status of the VCS status monitor thread.

    Functions

    None


    StatusMonitorLed

    Class implementing a LED to indicate the status of the VCS status monitor thread.

    Derived from

    E4Led

    Class Attributes

    None

    Class Methods

    None

    Methods

    StatusMonitorLed Constructor
    __checkActions Private method to set the enabled status of the context menu actions.
    __checkStatus Private slot to initiate a new status check.
    __projectVcsMonitorStatus Private method to receive the status monitor status.
    __setInterval Private slot to change the status check interval.
    __switchOff Private slot to switch the status monitor thread to Off.
    __switchOn Private slot to switch the status monitor thread to On.
    _showContextMenu Protected slot to show the context menu.

    Static Methods

    None

    StatusMonitorLed (Constructor)

    StatusMonitorLed(project, parent)

    Constructor

    project
    reference to the project object (Project.Project)
    parent
    reference to the parent object (QWidget)

    StatusMonitorLed.__checkActions

    __checkActions()

    Private method to set the enabled status of the context menu actions.

    StatusMonitorLed.__checkStatus

    __checkStatus()

    Private slot to initiate a new status check.

    StatusMonitorLed.__projectVcsMonitorStatus

    __projectVcsMonitorStatus(status, statusMsg)

    Private method to receive the status monitor status.

    status
    status of the monitoring thread (QString, ok, nok or off)
    statusMsg
    explanotory text for the signaled status (QString)

    StatusMonitorLed.__setInterval

    __setInterval()

    Private slot to change the status check interval.

    StatusMonitorLed.__switchOff

    __switchOff()

    Private slot to switch the status monitor thread to Off.

    StatusMonitorLed.__switchOn

    __switchOn()

    Private slot to switch the status monitor thread to On.

    StatusMonitorLed._showContextMenu

    _showContextMenu(coord)

    Protected slot to show the context menu.

    coord
    the position of the mouse pointer (QPoint)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ConfigurationPages.EditorPr0000644000175000001440000000031112261331353031266 xustar0000000000000000111 path=eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.EditorPropertiesPage.html 30 mtime=1388688107.564229593 30 atime=1389081085.050724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.EditorPropertiesPage.htm0000644000175000001440000000512312261331353034161 0ustar00detlevusers00000000000000 eric4.Preferences.ConfigurationPages.EditorPropertiesPage

    eric4.Preferences.ConfigurationPages.EditorPropertiesPage

    Module implementing the Editor Properties configuration page.

    Global Attributes

    None

    Classes

    EditorPropertiesPage Class implementing the Editor Properties configuration page.

    Functions

    create Module function to create the configuration page.


    EditorPropertiesPage

    Class implementing the Editor Properties configuration page.

    Derived from

    ConfigurationPageBase, Ui_EditorPropertiesPage

    Class Attributes

    None

    Class Methods

    None

    Methods

    EditorPropertiesPage Constructor
    save Public slot to save the Editor Properties (1) configuration.

    Static Methods

    None

    EditorPropertiesPage (Constructor)

    EditorPropertiesPage(lexers)

    Constructor

    lexers
    reference to the lexers dictionary

    EditorPropertiesPage.save

    save()

    Public slot to save the Editor Properties (1) configuration.



    create

    create(dlg)

    Module function to create the configuration page.

    dlg
    reference to the configuration dialog

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DebugClients.Ruby.AsyncFile.html0000644000175000001440000000013212261331354027621 xustar000000000000000030 mtime=1388688108.284229954 30 atime=1389081085.051724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.DebugClients.Ruby.AsyncFile.html0000644000175000001440000002101712261331354027354 0ustar00detlevusers00000000000000 eric4.DebugClients.Ruby.AsyncFile

    eric4.DebugClients.Ruby.AsyncFile

    File implementing an asynchronous file like socket interface for the debugger.

    Global Attributes

    None

    Classes

    AsyncFile Class wrapping a socket object with a file interface.

    Modules

    None

    Functions

    << Synonym for write(s).
    AsyncPendingWrite Module function to check for data to be written.
    close Public method to close the file.
    fileno Public method returning the file number.
    flush Public method to write all pending bytes.
    getSock Public method to get the socket object.
    isatty Public method to indicate whether a tty interface is supported.
    pendingWrite Public method that returns the number of bytes waiting to be written.
    read Public method to read bytes from this file.
    readline Public method to read a line from this file.
    readlines Public method to read all lines from this file.
    seek Public method to move the filepointer.
    tell Public method to get the filepointer position.
    write Public method to write a string to the file.
    writelines Public method to write a list of strings to the file.


    AsyncFile

    Class wrapping a socket object with a file interface.

    Derived from

    None

    Class Attributes

    @@maxbuffersize
    @@maxtries

    Class Methods

    None

    Methods

    checkMode Private method to check the mode.
    initialize Constructor
    nWrite Private method to write a specific number of pending bytes.

    Static Methods

    None

    AsyncFile.checkMode

    checkMode()

    Private method to check the mode.

    This method checks, if an operation is permitted according to the mode of the file. If it is not, an IOError is raised.

    mode
    the mode to be checked (string)

    AsyncFile.initialize

    initialize(mode, name)

    Constructor

    sock
    the socket object being wrapped
    mode
    mode of this file (string)
    name
    name of this file (string)

    AsyncFile.nWrite

    nWrite()

    Private method to write a specific number of pending bytes.

    n
    the number of bytes to be written (int)


    <<

    <<(s)

    Synonym for write(s).

    s
    bytes to be written (string)


    AsyncPendingWrite

    AsyncPendingWrite(file)

    Module function to check for data to be written.

    file
    The file object to be checked (file)
    Returns:
    Flag indicating if there is data wating (int)


    close

    close()

    Public method to close the file.



    fileno

    fileno()

    Public method returning the file number.

    Returns:
    file number (int)


    flush

    flush()

    Public method to write all pending bytes.



    getSock

    getSock()

    Public method to get the socket object.

    Returns:
    the socket object


    isatty

    isatty()

    Public method to indicate whether a tty interface is supported.

    Returns:
    always false


    pendingWrite

    pendingWrite()

    Public method that returns the number of bytes waiting to be written.

    Returns:
    the number of bytes to be written (int)


    read

    read(size = -1)

    Public method to read bytes from this file.

    size
    maximum number of bytes to be read (int)
    Returns:
    the bytes read (any)


    readline

    readline(size = -1)

    Public method to read a line from this file.

    Note: This method will not block and may return only a part of a line if that is all that is available.

    size
    maximum number of bytes to be read (int)
    Returns:
    one line of text up to size bytes (string)


    readlines

    readlines(sizehint = -1)

    Public method to read all lines from this file.

    sizehint
    hint of the numbers of bytes to be read (int)
    Returns:
    list of lines read (list of strings)


    seek

    seek(offset, whence=IO::SEEK_SET)

    Public method to move the filepointer.

    Raises IOError:
    This method is not supported and always raises an IOError.


    tell

    tell()

    Public method to get the filepointer position.

    Raises IOError:
    This method is not supported and always raises an IOError.


    write

    write(s)

    Public method to write a string to the file.

    s
    bytes to be written (string)


    writelines

    writelines(list)

    Public method to write a list of strings to the file.

    list
    the list to be written (list of string)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.AdBlock.AdBlockAccessHandler0000644000175000001440000000013212261331353031037 xustar000000000000000030 mtime=1388688107.753229688 30 atime=1389081085.052724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.AdBlock.AdBlockAccessHandler.html0000644000175000001440000000435512261331353031543 0ustar00detlevusers00000000000000 eric4.Helpviewer.AdBlock.AdBlockAccessHandler

    eric4.Helpviewer.AdBlock.AdBlockAccessHandler

    Module implementing a scheme access handler for AdBlock URLs.

    Global Attributes

    None

    Classes

    AdBlockAccessHandler Class implementing a scheme access handler for AdBlock URLs.

    Functions

    None


    AdBlockAccessHandler

    Class implementing a scheme access handler for AdBlock URLs.

    Derived from

    SchemeAccessHandler

    Class Attributes

    None

    Class Methods

    None

    Methods

    createRequest Protected method to create a request.

    Static Methods

    None

    AdBlockAccessHandler.createRequest

    createRequest(op, request, outgoingData = None)

    Protected method to create a request.

    op
    the operation to be performed (QNetworkAccessManager.Operation)
    request
    reference to the request object (QNetworkRequest)
    outgoingData
    reference to an IODevice containing data to be sent (QIODevice)
    Returns:
    reference to the created reply object (QNetworkReply)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.install-i18n.html0000644000175000001440000000013212261331350024674 xustar000000000000000030 mtime=1388688104.169227888 30 atime=1389081085.052724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.install-i18n.html0000644000175000001440000000462112261331350024431 0ustar00detlevusers00000000000000 eric4.install-i18n

    eric4.install-i18n

    Installation script for the eric4 IDE translation files.

    Global Attributes

    configDir
    privateInstall
    progName

    Classes

    None

    Functions

    getConfigDir Global function to get the name of the directory storing the config data.
    installTranslations Install the translation files into the right place.
    main The main function of the script.
    usage Display a usage message and exit.


    getConfigDir

    getConfigDir()

    Global function to get the name of the directory storing the config data.

    Returns:
    directory name of the config dir (string)


    installTranslations

    installTranslations()

    Install the translation files into the right place.



    main

    main(argv)

    The main function of the script.

    argv
    list of command line arguments (list of strings)


    usage

    usage(rcode = 2)

    Display a usage message and exit.

    rcode
    return code passed back to the calling process (integer)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DebugClients.Python.DebugClient.html0000644000175000001440000000013212261331354030471 xustar000000000000000030 mtime=1388688108.266229945 30 atime=1389081085.052724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.DebugClients.Python.DebugClient.html0000644000175000001440000000345212261331354030227 0ustar00detlevusers00000000000000 eric4.DebugClients.Python.DebugClient

    eric4.DebugClients.Python.DebugClient

    Module implementing a Qt free version of the debug client.

    Global Attributes

    None

    Classes

    DebugClient Class implementing the client side of the debugger.

    Functions

    None


    DebugClient

    Class implementing the client side of the debugger.

    This variant of the debugger implements the standard debugger client by subclassing all relevant base classes.

    Derived from

    DebugClientBase.DebugClientBase, AsyncIO, DebugBase

    Class Attributes

    debugClient

    Class Methods

    None

    Methods

    DebugClient Constructor

    Static Methods

    None

    DebugClient (Constructor)

    DebugClient()

    Constructor


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsPySvn.SvnCommitDi0000644000175000001440000000013212261331353031213 xustar000000000000000030 mtime=1388688107.230229425 30 atime=1389081085.052724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsPySvn.SvnCommitDialog.html0000644000175000001440000001321012261331353032550 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsPySvn.SvnCommitDialog

    eric4.Plugins.VcsPlugins.vcsPySvn.SvnCommitDialog

    Module implementing a dialog to enter the commit message.

    Global Attributes

    None

    Classes

    SvnCommitDialog Class implementing a dialog to enter the commit message.

    Functions

    None


    SvnCommitDialog

    Class implementing a dialog to enter the commit message.

    Signals

    accepted()
    emitted, if the dialog was accepted
    rejected()
    emitted, if the dialog was rejected

    Derived from

    QWidget, Ui_SvnCommitDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnCommitDialog Constructor
    changelistsData Public method to retrieve the changelists data.
    hasChangelists Public method to check, if the user entered some changelists.
    logMessage Public method to retrieve the log message.
    on_buttonBox_accepted Private slot called by the buttonBox accepted signal.
    on_buttonBox_clicked Private slot called by a button of the button box clicked.
    on_buttonBox_rejected Private slot called by the buttonBox rejected signal.
    on_recentComboBox_activated Private slot to select a commit message from recent ones.
    showEvent Public method called when the dialog is about to be shown.

    Static Methods

    None

    SvnCommitDialog (Constructor)

    SvnCommitDialog(changelists, parent = None)

    Constructor

    changelists
    list of available change lists (list of strings)
    parent
    parent widget (QWidget)

    SvnCommitDialog.changelistsData

    changelistsData()

    Public method to retrieve the changelists data.

    Returns:
    tuple containing the changelists (list of strings) and a flag indicating to keep changelists (boolean)

    SvnCommitDialog.hasChangelists

    hasChangelists()

    Public method to check, if the user entered some changelists.

    Returns:
    flag indicating availability of changelists (boolean)

    SvnCommitDialog.logMessage

    logMessage()

    Public method to retrieve the log message.

    This method has the side effect of saving the 20 most recent commit messages for reuse.

    Returns:
    the log message (QString)

    SvnCommitDialog.on_buttonBox_accepted

    on_buttonBox_accepted()

    Private slot called by the buttonBox accepted signal.

    SvnCommitDialog.on_buttonBox_clicked

    on_buttonBox_clicked(button)

    Private slot called by a button of the button box clicked.

    button
    button that was clicked (QAbstractButton)

    SvnCommitDialog.on_buttonBox_rejected

    on_buttonBox_rejected()

    Private slot called by the buttonBox rejected signal.

    SvnCommitDialog.on_recentComboBox_activated

    on_recentComboBox_activated(txt)

    Private slot to select a commit message from recent ones.

    SvnCommitDialog.showEvent

    showEvent(evt)

    Public method called when the dialog is about to be shown.

    evt
    the event (QShowEvent)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsPySvn.SvnDiffDial0000644000175000001440000000013212261331353031150 xustar000000000000000030 mtime=1388688107.247229434 30 atime=1389081085.052724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsPySvn.SvnDiffDialog.html0000644000175000001440000001362112261331353032176 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsPySvn.SvnDiffDialog

    eric4.Plugins.VcsPlugins.vcsPySvn.SvnDiffDialog

    Module implementing a dialog to show the output of the svn diff command process.

    Global Attributes

    None

    Classes

    SvnDiffDialog Class implementing a dialog to show the output of the svn diff command.

    Functions

    None


    SvnDiffDialog

    Class implementing a dialog to show the output of the svn diff command.

    Derived from

    QWidget, SvnDialogMixin, Ui_SvnDiffDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnDiffDialog Constructor
    __appendText Private method to append text to the end of the contents pane.
    __finish Private slot called when the user pressed the button.
    __getDiffSummaryKind Private method to get a string descripion of the diff summary.
    __getVersionArg Private method to get a pysvn revision object for the given version number.
    __showError Private slot to show an error message.
    on_buttonBox_clicked Private slot called by a button of the button box clicked.
    on_saveButton_clicked Private slot to handle the Save button press.
    start Public slot to start the svn diff command.

    Static Methods

    None

    SvnDiffDialog (Constructor)

    SvnDiffDialog(vcs, parent = None)

    Constructor

    vcs
    reference to the vcs object
    parent
    parent widget (QWidget)

    SvnDiffDialog.__appendText

    __appendText(line)

    Private method to append text to the end of the contents pane.

    line
    line of text to insert (string)

    SvnDiffDialog.__finish

    __finish()

    Private slot called when the user pressed the button.

    SvnDiffDialog.__getDiffSummaryKind

    __getDiffSummaryKind(summaryKind)

    Private method to get a string descripion of the diff summary.

    summaryKind
    (pysvn.diff_summarize.summarize_kind)
    Returns:
    one letter string indicating the change type (QString)

    SvnDiffDialog.__getVersionArg

    __getVersionArg(version)

    Private method to get a pysvn revision object for the given version number.

    version
    revision (integer or string)
    Returns:
    revision object (pysvn.Revision)

    SvnDiffDialog.__showError

    __showError(msg)

    Private slot to show an error message.

    msg
    error message to show (string or QString)

    SvnDiffDialog.on_buttonBox_clicked

    on_buttonBox_clicked(button)

    Private slot called by a button of the button box clicked.

    button
    button that was clicked (QAbstractButton)

    SvnDiffDialog.on_saveButton_clicked

    on_saveButton_clicked()

    Private slot to handle the Save button press.

    It saves the diff shown in the dialog to a file in the local filesystem.

    SvnDiffDialog.start

    start(fn, versions = None, urls = None, summary = False, pegRev = None)

    Public slot to start the svn diff command.

    fn
    filename to be diffed (string)
    versions
    list of versions to be diffed (list of up to 2 integer or None)
    urls=
    list of repository URLs (list of 2 strings)
    summary=
    flag indicating a summarizing diff (only valid for URL diffs) (boolean)
    pegRev=
    revision number the filename is valid (integer)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.E4XML.SessionHandler.html0000644000175000001440000000013212261331352026224 xustar000000000000000030 mtime=1388688106.597229107 30 atime=1389081085.052724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.E4XML.SessionHandler.html0000644000175000001440000003446712261331352025774 0ustar00detlevusers00000000000000 eric4.E4XML.SessionHandler

    eric4.E4XML.SessionHandler

    Module implementing the handler class for reading an XML project session file.

    Global Attributes

    None

    Classes

    SessionHandler Class implementing a sax handler to read an XML project session file.

    Functions

    None


    SessionHandler

    Class implementing a sax handler to read an XML project session file.

    Derived from

    XMLHandlerBase

    Class Attributes

    None

    Class Methods

    None

    Methods

    SessionHandler Constructor
    endBFilename Handler method for the "BFilename" end tag.
    endBookmark Handler method for the "Bookmark" end tag.
    endBreakpoint Handler method for the "Breakpoint" end tag.
    endCommandLine Handler method for the "CommandLine" end tag.
    endCondition Handler method for the "Condition" end tag.
    endEnvironment Handler method for the "Environment" end tag.
    endException Handler method for the "Exception" end tag.
    endExceptions Handler method for the "Exceptions" end tag.
    endFilename Handler method for the "Filename" end tag.
    endIgnoredException Handler method for the "IgnoredException" end tag.
    endIgnoredExceptions Handler method for the "IgnoredExceptions" end tag.
    endMultiProject Handler method for the "MultiProject" end tag.
    endProject Handler method for the "Project" end tag.
    endSpecial Handler method for the "Special" end tag.
    endWatchexpression Handler method for the "Watchexpression" end tag.
    endWorkingDirectory Handler method for the "WorkinDirectory" end tag.
    getVersion Public method to retrieve the version of the session.
    startAutoClearShell Handler method for the "AutoClearShell" start tag.
    startAutoContinue Handler method for the "AutoContinue" start tag.
    startBookmark Handler method for the "Bookmark" start tag.
    startBreakpoint Handler method for the "Breakpoint" start tag.
    startCount Handler method for the "Count" start tag.
    startDocumentSession Handler called, when the document parsing is started.
    startEnabled Handler method for the "Enabled" start tag.
    startExceptions Handler method for the "Exceptions" start tag.
    startFilename Handler method for the "Filename" start tag.
    startIgnoredExceptions Handler method for the "IgnoredExceptions" start tag.
    startLinenumber Handler method for the "Linenumber" start tag.
    startReportExceptions Handler method for the "ReportExceptions" start tag.
    startSession Handler method for the "Session" start tag.
    startTemporary Handler method for the "Temporary" start tag.
    startTracePython Handler method for the "TracePython" start tag.
    startWatchexpression Handler method for the "Watchexpression" start tag.

    Static Methods

    None

    SessionHandler (Constructor)

    SessionHandler(project)

    Constructor

    project
    Reference to the project object to store the information into.

    SessionHandler.endBFilename

    endBFilename()

    Handler method for the "BFilename" end tag.

    SessionHandler.endBookmark

    endBookmark()

    Handler method for the "Bookmark" end tag.

    SessionHandler.endBreakpoint

    endBreakpoint()

    Handler method for the "Breakpoint" end tag.

    SessionHandler.endCommandLine

    endCommandLine()

    Handler method for the "CommandLine" end tag.

    SessionHandler.endCondition

    endCondition()

    Handler method for the "Condition" end tag.

    SessionHandler.endEnvironment

    endEnvironment()

    Handler method for the "Environment" end tag.

    SessionHandler.endException

    endException()

    Handler method for the "Exception" end tag.

    SessionHandler.endExceptions

    endExceptions()

    Handler method for the "Exceptions" end tag.

    SessionHandler.endFilename

    endFilename()

    Handler method for the "Filename" end tag.

    SessionHandler.endIgnoredException

    endIgnoredException()

    Handler method for the "IgnoredException" end tag.

    SessionHandler.endIgnoredExceptions

    endIgnoredExceptions()

    Handler method for the "IgnoredExceptions" end tag.

    SessionHandler.endMultiProject

    endMultiProject()

    Handler method for the "MultiProject" end tag.

    SessionHandler.endProject

    endProject()

    Handler method for the "Project" end tag.

    SessionHandler.endSpecial

    endSpecial()

    Handler method for the "Special" end tag.

    SessionHandler.endWatchexpression

    endWatchexpression()

    Handler method for the "Watchexpression" end tag.

    SessionHandler.endWorkingDirectory

    endWorkingDirectory()

    Handler method for the "WorkinDirectory" end tag.

    SessionHandler.getVersion

    getVersion()

    Public method to retrieve the version of the session.

    Returns:
    String containing the version number.

    SessionHandler.startAutoClearShell

    startAutoClearShell(attrs)

    Handler method for the "AutoClearShell" start tag.

    attrs
    list of tag attributes

    SessionHandler.startAutoContinue

    startAutoContinue(attrs)

    Handler method for the "AutoContinue" start tag.

    attrs
    list of tag attributes

    SessionHandler.startBookmark

    startBookmark(attrs)

    Handler method for the "Bookmark" start tag.

    attrs
    list of tag attributes

    SessionHandler.startBreakpoint

    startBreakpoint(attrs)

    Handler method for the "Breakpoint" start tag.

    attrs
    list of tag attributes

    SessionHandler.startCount

    startCount(attrs)

    Handler method for the "Count" start tag.

    attrs
    list of tag attributes

    SessionHandler.startDocumentSession

    startDocumentSession()

    Handler called, when the document parsing is started.

    SessionHandler.startEnabled

    startEnabled(attrs)

    Handler method for the "Enabled" start tag.

    attrs
    list of tag attributes

    SessionHandler.startExceptions

    startExceptions(attrs)

    Handler method for the "Exceptions" start tag.

    attrs
    list of tag attributes

    SessionHandler.startFilename

    startFilename(attrs)

    Handler method for the "Filename" start tag.

    attrs
    list of tag attributes

    SessionHandler.startIgnoredExceptions

    startIgnoredExceptions(attrs)

    Handler method for the "IgnoredExceptions" start tag.

    attrs
    list of tag attributes

    SessionHandler.startLinenumber

    startLinenumber(attrs)

    Handler method for the "Linenumber" start tag.

    attrs
    list of tag attributes

    SessionHandler.startReportExceptions

    startReportExceptions(attrs)

    Handler method for the "ReportExceptions" start tag.

    attrs
    list of tag attributes

    SessionHandler.startSession

    startSession(attrs)

    Handler method for the "Session" start tag.

    attrs
    list of tag attributes

    SessionHandler.startTemporary

    startTemporary(attrs)

    Handler method for the "Temporary" start tag.

    attrs
    list of tag attributes

    SessionHandler.startTracePython

    startTracePython(attrs)

    Handler method for the "TracePython" start tag.

    attrs
    list of tag attributes

    SessionHandler.startWatchexpression

    startWatchexpression(attrs)

    Handler method for the "Watchexpression" start tag.

    attrs
    list of tag attributes

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ConfigurationPages.QtPage.h0000644000175000001440000000013212261331353031146 xustar000000000000000030 mtime=1388688107.623229622 30 atime=1389081085.052724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.QtPage.html0000644000175000001440000001040112261331353031411 0ustar00detlevusers00000000000000 eric4.Preferences.ConfigurationPages.QtPage

    eric4.Preferences.ConfigurationPages.QtPage

    Module implementing the Qt configuration page.

    Global Attributes

    None

    Classes

    QtPage Class implementing the Qt configuration page.

    Functions

    create Module function to create the configuration page.


    QtPage

    Class implementing the Qt configuration page.

    Derived from

    ConfigurationPageBase, Ui_QtPage

    Class Attributes

    None

    Class Methods

    None

    Methods

    QtPage Constructor
    __updateQt4Sample Private slot to update the Qt4 tools sample label.
    on_qt4Button_clicked Private slot to handle the Qt4 directory selection.
    on_qt4PostfixEdit_textChanged Private slot to handle a change in the entered Qt directory.
    on_qt4PrefixEdit_textChanged Private slot to handle a change in the entered Qt directory.
    on_qt4TransButton_clicked Private slot to handle the Qt4 translations directory selection.
    save Public slot to save the Qt configuration.

    Static Methods

    None

    QtPage (Constructor)

    QtPage()

    Constructor

    QtPage.__updateQt4Sample

    __updateQt4Sample()

    Private slot to update the Qt4 tools sample label.

    QtPage.on_qt4Button_clicked

    on_qt4Button_clicked()

    Private slot to handle the Qt4 directory selection.

    QtPage.on_qt4PostfixEdit_textChanged

    on_qt4PostfixEdit_textChanged(txt)

    Private slot to handle a change in the entered Qt directory.

    txt
    the entered string (QString)

    QtPage.on_qt4PrefixEdit_textChanged

    on_qt4PrefixEdit_textChanged(txt)

    Private slot to handle a change in the entered Qt directory.

    txt
    the entered string (QString)

    QtPage.on_qt4TransButton_clicked

    on_qt4TransButton_clicked()

    Private slot to handle the Qt4 translations directory selection.

    QtPage.save

    save()

    Public slot to save the Qt configuration.



    create

    create(dlg)

    Module function to create the configuration page.

    dlg
    reference to the configuration dialog

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.CookieJar.CookieModel.html0000644000175000001440000000013212261331353030624 xustar000000000000000030 mtime=1388688107.688229655 30 atime=1389081085.053724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.CookieJar.CookieModel.html0000644000175000001440000001140712261331353030361 0ustar00detlevusers00000000000000 eric4.Helpviewer.CookieJar.CookieModel

    eric4.Helpviewer.CookieJar.CookieModel

    Module implementing the cookie model.

    Global Attributes

    None

    Classes

    CookieModel Class implementing the cookie model.

    Functions

    None


    CookieModel

    Class implementing the cookie model.

    Derived from

    QAbstractTableModel

    Class Attributes

    None

    Class Methods

    None

    Methods

    CookieModel Constructor
    __cookiesChanged Private slot handling changes of the cookies list in the cookie jar.
    columnCount Public method to get the number of columns of the model.
    data Public method to get data from the model.
    headerData Public method to get header data from the model.
    removeRows Public method to remove entries from the model.
    rowCount Public method to get the number of rows of the model.

    Static Methods

    None

    CookieModel (Constructor)

    CookieModel(cookieJar, parent = None)

    Constructor

    cookieJar
    reference to the cookie jar (CookieJar)
    parent
    reference to the parent object (QObject)

    CookieModel.__cookiesChanged

    __cookiesChanged()

    Private slot handling changes of the cookies list in the cookie jar.

    CookieModel.columnCount

    columnCount(parent = QModelIndex())

    Public method to get the number of columns of the model.

    parent
    parent index (QModelIndex)
    Returns:
    number of columns (integer)

    CookieModel.data

    data(index, role)

    Public method to get data from the model.

    index
    index to get data for (QModelIndex)
    role
    role of the data to retrieve (integer)
    Returns:
    requested data (QVariant)

    CookieModel.headerData

    headerData(section, orientation, role)

    Public method to get header data from the model.

    section
    section number (integer)
    orientation
    orientation (Qt.Orientation)
    role
    role of the data to retrieve (integer)
    Returns:
    requested data

    CookieModel.removeRows

    removeRows(row, count, parent = QModelIndex())

    Public method to remove entries from the model.

    row
    start row (integer)
    count
    number of rows to remove (integer)
    parent
    parent index (QModelIndex)
    Returns:
    flag indicating success (boolean)

    CookieModel.rowCount

    rowCount(parent = QModelIndex())

    Public method to get the number of rows of the model.

    parent
    parent index (QModelIndex)
    Returns:
    number of columns (integer)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.Lexers.LexerDiff.html0000644000175000001440000000013212261331354027630 xustar000000000000000030 mtime=1388688108.485230055 30 atime=1389081085.053724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.Lexers.LexerDiff.html0000644000175000001440000000603512261331354027366 0ustar00detlevusers00000000000000 eric4.QScintilla.Lexers.LexerDiff

    eric4.QScintilla.Lexers.LexerDiff

    Module implementing a Diff lexer with some additional methods.

    Global Attributes

    None

    Classes

    LexerDiff Subclass to implement some additional lexer dependant methods.

    Functions

    None


    LexerDiff

    Subclass to implement some additional lexer dependant methods.

    Derived from

    QsciLexerDiff, Lexer

    Class Attributes

    None

    Class Methods

    None

    Methods

    LexerDiff Constructor
    defaultKeywords Public method to get the default keywords.
    isCommentStyle Public method to check, if a style is a comment style.
    isStringStyle Public method to check, if a style is a string style.

    Static Methods

    None

    LexerDiff (Constructor)

    LexerDiff(parent=None)

    Constructor

    parent
    parent widget of this lexer

    LexerDiff.defaultKeywords

    defaultKeywords(kwSet)

    Public method to get the default keywords.

    kwSet
    number of the keyword set (integer)
    Returns:
    string giving the keywords (string) or None

    LexerDiff.isCommentStyle

    isCommentStyle(style)

    Public method to check, if a style is a comment style.

    Returns:
    flag indicating a comment style (boolean)

    LexerDiff.isStringStyle

    isStringStyle(style)

    Public method to check, if a style is a string style.

    Returns:
    flag indicating a string style (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.Bookmarks.BookmarksManager.h0000644000175000001440000000013212261331353031222 xustar000000000000000030 mtime=1388688107.865229744 30 atime=1389081085.053724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.Bookmarks.BookmarksManager.html0000644000175000001440000003365612261331353031506 0ustar00detlevusers00000000000000 eric4.Helpviewer.Bookmarks.BookmarksManager

    eric4.Helpviewer.Bookmarks.BookmarksManager

    Module implementing the bookmarks manager.

    Global Attributes

    BOOKMARKBAR
    BOOKMARKMENU
    extract_js

    Classes

    BookmarksManager Class implementing the bookmarks manager.
    ChangeBookmarkCommand Class implementing the Insert undo command.
    InsertBookmarksCommand Class implementing the Insert undo command.
    RemoveBookmarksCommand Class implementing the Remove undo command.

    Functions

    None


    BookmarksManager

    Class implementing the bookmarks manager.

    Signals

    entryAdded
    emitted after a bookmark node has been added
    entryChanged
    emitted after a bookmark node has been changed
    entryRemoved
    emitted after a bookmark node has been removed

    Derived from

    QObject

    Class Attributes

    None

    Class Methods

    None

    Methods

    BookmarksManager Constructor
    __convertFromOldBookmarks Private method to convert the old bookmarks into the new ones.
    addBookmark Public method to add a bookmark.
    bookmarks Public method to get a reference to the root bookmark node.
    bookmarksModel Public method to get a reference to the bookmarks model.
    changeExpanded Public method to handle a change of the expanded state.
    close Public method to close the bookmark manager.
    exportBookmarks Public method to export the bookmarks.
    importBookmarks Public method to import bookmarks.
    load Public method to load the bookmarks.
    menu Public method to get a reference to the bookmarks menu node.
    removeBookmark Public method to remove a bookmark.
    save Public method to save the bookmarks.
    setTitle Public method to set the title of a bookmark.
    setUrl Public method to set the URL of a bookmark.
    toolbar Public method to get a reference to the bookmarks toolbar node.
    undoRedoStack Public method to get a reference to the undo stack.

    Static Methods

    None

    BookmarksManager (Constructor)

    BookmarksManager(parent = None)

    Constructor

    parent
    reference to the parent object (QObject)

    BookmarksManager.__convertFromOldBookmarks

    __convertFromOldBookmarks()

    Private method to convert the old bookmarks into the new ones.

    BookmarksManager.addBookmark

    addBookmark(parent, node, row = -1)

    Public method to add a bookmark.

    parent
    reference to the node to add to (BookmarkNode)
    node
    reference to the node to add (BookmarkNode)
    row
    row number (integer)

    BookmarksManager.bookmarks

    bookmarks()

    Public method to get a reference to the root bookmark node.

    Returns:
    reference to the root bookmark node (BookmarkNode)

    BookmarksManager.bookmarksModel

    bookmarksModel()

    Public method to get a reference to the bookmarks model.

    Returns:
    reference to the bookmarks model (BookmarksModel)

    BookmarksManager.changeExpanded

    changeExpanded()

    Public method to handle a change of the expanded state.

    BookmarksManager.close

    close()

    Public method to close the bookmark manager.

    BookmarksManager.exportBookmarks

    exportBookmarks()

    Public method to export the bookmarks.

    BookmarksManager.importBookmarks

    importBookmarks()

    Public method to import bookmarks.

    BookmarksManager.load

    load()

    Public method to load the bookmarks.

    BookmarksManager.menu

    menu()

    Public method to get a reference to the bookmarks menu node.

    Returns:
    reference to the bookmarks menu node (BookmarkNode)

    BookmarksManager.removeBookmark

    removeBookmark(node)

    Public method to remove a bookmark.

    node
    reference to the node to be removed (BookmarkNode)

    BookmarksManager.save

    save()

    Public method to save the bookmarks.

    BookmarksManager.setTitle

    setTitle(node, newTitle)

    Public method to set the title of a bookmark.

    node
    reference to the node to be changed (BookmarkNode)
    newTitle
    title to be set (QString)

    BookmarksManager.setUrl

    setUrl(node, newUrl)

    Public method to set the URL of a bookmark.

    node
    reference to the node to be changed (BookmarkNode)
    newUrl
    URL to be set (QString)

    BookmarksManager.toolbar

    toolbar()

    Public method to get a reference to the bookmarks toolbar node.

    Returns:
    reference to the bookmarks toolbar node (BookmarkNode)

    BookmarksManager.undoRedoStack

    undoRedoStack()

    Public method to get a reference to the undo stack.

    Returns:
    reference to the undo stack (QUndoStack)


    ChangeBookmarkCommand

    Class implementing the Insert undo command.

    Derived from

    QUndoCommand

    Class Attributes

    None

    Class Methods

    None

    Methods

    ChangeBookmarkCommand Constructor
    redo Public slot to perform the redo action.
    undo Public slot to perform the undo action.

    Static Methods

    None

    ChangeBookmarkCommand (Constructor)

    ChangeBookmarkCommand(bookmarksManager, node, newValue, title)

    Constructor

    bookmarksManager
    reference to the bookmarks manager (BookmarksManager)
    node
    reference to the node to be changed (BookmarkNode)
    newValue
    new value to be set (QString)
    title
    flag indicating a change of the title (True) or the URL (False) (boolean)

    ChangeBookmarkCommand.redo

    redo()

    Public slot to perform the redo action.

    ChangeBookmarkCommand.undo

    undo()

    Public slot to perform the undo action.



    InsertBookmarksCommand

    Class implementing the Insert undo command.

    Derived from

    RemoveBookmarksCommand

    Class Attributes

    None

    Class Methods

    None

    Methods

    InsertBookmarksCommand Constructor
    redo Public slot to perform the redo action.
    undo Public slot to perform the undo action.

    Static Methods

    None

    InsertBookmarksCommand (Constructor)

    InsertBookmarksCommand(bookmarksManager, parent, node, row)

    Constructor

    bookmarksManager
    reference to the bookmarks manager (BookmarksManager)
    parent
    reference to the parent node (BookmarkNode)
    node
    reference to the node to be inserted (BookmarkNode)
    row
    row number of bookmark (integer)

    InsertBookmarksCommand.redo

    redo()

    Public slot to perform the redo action.

    InsertBookmarksCommand.undo

    undo()

    Public slot to perform the undo action.



    RemoveBookmarksCommand

    Class implementing the Remove undo command.

    Derived from

    QUndoCommand

    Class Attributes

    None

    Class Methods

    None

    Methods

    RemoveBookmarksCommand Constructor
    redo Public slot to perform the redo action.
    undo Public slot to perform the undo action.

    Static Methods

    None

    RemoveBookmarksCommand (Constructor)

    RemoveBookmarksCommand(bookmarksManager, parent, row)

    Constructor

    bookmarksManager
    reference to the bookmarks manager (BookmarksManager)
    parent
    reference to the parent node (BookmarkNode)
    row
    row number of bookmark (integer)

    RemoveBookmarksCommand.redo

    redo()

    Public slot to perform the redo action.

    RemoveBookmarksCommand.undo

    undo()

    Public slot to perform the undo action.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Graphics.GraphicsUtilities.html0000644000175000001440000000013212261331350027644 xustar000000000000000030 mtime=1388688104.833228222 30 atime=1389081085.053724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Graphics.GraphicsUtilities.html0000644000175000001440000000560412261331350027403 0ustar00detlevusers00000000000000 eric4.Graphics.GraphicsUtilities

    eric4.Graphics.GraphicsUtilities

    Module implementing some graphical utility functions.

    Global Attributes

    None

    Classes

    RecursionError Unable to calculate result because of recursive structure.

    Functions

    _buildChildrenLists Function to build up parent - child relationships.
    sort Function to sort widgets topographically.


    RecursionError

    Unable to calculate result because of recursive structure.

    Derived from

    OverflowError, ValueError

    Class Attributes

    None

    Class Methods

    None

    Methods

    None

    Static Methods

    None


    _buildChildrenLists

    _buildChildrenLists(routes)

    Function to build up parent - child relationships.

    Taken from Boa Constructor.

    routes
    list of routes between nodes
    Returns:
    dictionary of child and dictionary of parent relationships


    sort

    sort(nodes, routes, noRecursion = False)

    Function to sort widgets topographically.

    Passed a list of nodes and a list of source, dest routes, it attempts to create a list of stages, where each sub list is one stage in a process.

    The algorithm was taken from Boa Constructor.

    nodes
    list of nodes to be sorted
    routes
    list of routes between the nodes
    noRecursion
    flag indicating, if recursion errors should be raised
    Returns:
    list of stages
    Raises RecursionError:
    a recursion error was detected

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.UI.ErrorLogDialog.html0000644000175000001440000000013212261331350025640 xustar000000000000000030 mtime=1388688104.906228258 30 atime=1389081085.053724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.UI.ErrorLogDialog.html0000644000175000001440000000564412261331350025403 0ustar00detlevusers00000000000000 eric4.UI.ErrorLogDialog

    eric4.UI.ErrorLogDialog

    Module implementing a dialog to display an error log.

    Global Attributes

    None

    Classes

    ErrorLogDialog Class implementing a dialog to display an error log.

    Functions

    None


    ErrorLogDialog

    Class implementing a dialog to display an error log.

    Derived from

    QDialog, Ui_ErrorLogDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    ErrorLogDialog Constructor
    on_deleteButton_clicked Private slot to delete the log file.
    on_emailButton_clicked Private slot to send an email.
    on_keepButton_clicked Private slot to just do nothing.

    Static Methods

    None

    ErrorLogDialog (Constructor)

    ErrorLogDialog(logFile, parent=None)

    Constructor

    logFile
    name of the log file containing the error info (string)
    parent
    reference to the parent widget (QWidget)

    ErrorLogDialog.on_deleteButton_clicked

    on_deleteButton_clicked()

    Private slot to delete the log file.

    ErrorLogDialog.on_emailButton_clicked

    on_emailButton_clicked()

    Private slot to send an email.

    ErrorLogDialog.on_keepButton_clicked

    on_keepButton_clicked()

    Private slot to just do nothing.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.install.html0000644000175000001440000000013212261331350024117 xustar000000000000000030 mtime=1388688104.217227912 30 atime=1389081085.053724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.install.html0000644000175000001440000002610512261331350023655 0ustar00detlevusers00000000000000 eric4.install

    eric4.install

    Installation script for the eric4 IDE and all eric4 related tools.

    Global Attributes

    BlackLists
    PlatformsBlackLists
    apisDir
    cfg
    configLength
    configName
    currDir
    distDir
    doCleanup
    doCompile
    modDir
    platBinDir
    progLanguages
    progName
    pyModDir
    sourceDir

    Classes

    None

    Functions

    cleanUp Uninstall the old eric files.
    compileUiDir Creates Python modules from Qt Designer .ui files in a directory or directory tree.
    compileUiFiles Compile the .ui files to Python sources.
    compile_ui Local function to compile a single .ui file.
    copyToFile Copy a string to a file.
    copyTree Copy Python, translation, documentation, wizards configuration, designer template files and DTDs of a directory tree.
    createConfig Create a config file with the respective config entries.
    createGlobalPluginsDir Create the global plugins directory, if it doesn't exist.
    createInstallConfig Create the installation config dictionary.
    createMacAppBundle Create a Mac application bundle.
    createPyWrapper Create an executable wrapper for a Python script.
    doDependancyChecks Perform some dependency checks.
    exit Exit the install script.
    initGlobals Sets the values of globals that need more than a simple assignment.
    installEric Actually perform the installation steps.
    main The main function of the script.
    pyName Local function to create the Python source file name for the compiled .ui file.
    shutilCopy Wrapper function around shutil.copy() to ensure the permissions.
    usage Display a usage message and exit.
    wrapperName Create the platform specific name for the wrapper script.


    cleanUp

    cleanUp()

    Uninstall the old eric files.



    compileUiDir

    compileUiDir(dir, recurse = False, map = None, **compileUi_args)

    Creates Python modules from Qt Designer .ui files in a directory or directory tree.

    Note: This function is a modified version of the one found in PyQt4.

    dir
    Name of the directory to scan for files whose name ends with '.ui'. By default the generated Python module is created in the same directory ending with '.py'.
    recurse
    flag indicating that any sub-directories should be scanned.
    map
    an optional callable that is passed the name of the directory containing the '.ui' file and the name of the Python module that will be created. The callable should return a tuple of the name of the directory in which the Python module will be created and the (possibly modified) name of the module.
    compileUi_args
    any additional keyword arguments that are passed to the compileUi() function that is called to create each Python module.


    compileUiFiles

    compileUiFiles()

    Compile the .ui files to Python sources.



    compile_ui

    compile_ui(ui_dir, ui_file)

    Local function to compile a single .ui file.

    ui_dir
    directory containing the .ui file (string)
    ui_file
    file name of the .ui file (string)


    copyToFile

    copyToFile(name, text)

    Copy a string to a file.

    name
    the name of the file.
    text
    the contents to copy to the file.


    copyTree

    copyTree(src, dst, filters, excludeDirs=[], excludePatterns=[])

    Copy Python, translation, documentation, wizards configuration, designer template files and DTDs of a directory tree.

    src
    name of the source directory
    dst
    name of the destination directory
    filters
    list of filter pattern determining the files to be copied
    excludeDirs
    list of (sub)directories to exclude from copying
    excludePatterns=
    list of filter pattern determining the files to be skipped


    createConfig

    createConfig()

    Create a config file with the respective config entries.



    createGlobalPluginsDir

    createGlobalPluginsDir()

    Create the global plugins directory, if it doesn't exist.



    createInstallConfig

    createInstallConfig()

    Create the installation config dictionary.



    createMacAppBundle

    createMacAppBundle(pydir)

    Create a Mac application bundle.

    pydir
    the name of the directory where the Python script will eventually be installed


    createPyWrapper

    createPyWrapper(pydir, wfile, isGuiScript = True)

    Create an executable wrapper for a Python script.

    pydir
    the name of the directory where the Python script will eventually be installed
    wfile
    the basename of the wrapper
    isGuiScript
    flag indicating a wrapper script for a GUI application (boolean)
    Returns:
    the platform specific name of the wrapper


    doDependancyChecks

    doDependancyChecks()

    Perform some dependency checks.



    exit

    exit(rcode=0)

    Exit the install script.



    initGlobals

    initGlobals()

    Sets the values of globals that need more than a simple assignment.



    installEric

    installEric()

    Actually perform the installation steps.



    main

    main(argv)

    The main function of the script.

    argv
    the list of command line arguments.


    pyName

    pyName(py_dir, py_file)

    Local function to create the Python source file name for the compiled .ui file.

    py_dir
    suggested name of the directory (string)
    py_file
    suggested name for the compile source file (string)
    Returns:
    tuple of directory name (string) and source file name (string)


    shutilCopy

    shutilCopy(src, dst, perm=0o644)

    Wrapper function around shutil.copy() to ensure the permissions.

    src
    source file name (string)
    dst
    destination file name or directory name (string)
    perm=
    permissions to be set (integer)


    usage

    usage(rcode = 2)

    Display a usage message and exit.

    rcode
    the return code passed back to the calling process.


    wrapperName

    wrapperName(dname, wfile)

    Create the platform specific name for the wrapper script.

    dname
    name of the directory to place the wrapper into
    wfile
    basename (without extension) of the wrapper script
    Returns:
    the name of the wrapper script

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DocumentationTools.QtHelpGenerator.html0000644000175000001440000000013112261331352031347 xustar000000000000000030 mtime=1388688106.089228852 29 atime=1389081085.05472436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.DocumentationTools.QtHelpGenerator.html0000644000175000001440000001171112261331352031103 0ustar00detlevusers00000000000000 eric4.DocumentationTools.QtHelpGenerator

    eric4.DocumentationTools.QtHelpGenerator

    Module implementing the QtHelp generator for the builtin documentation generator.

    Global Attributes

    HelpCollection
    HelpCollectionFile
    HelpCollectionProjectFile
    HelpHelpFile
    HelpProject
    HelpProjectFile

    Classes

    QtHelpGenerator Class implementing the QtHelp generator for the builtin documentation generator.

    Functions

    None


    QtHelpGenerator

    Class implementing the QtHelp generator for the builtin documentation generator.

    Derived from

    object

    Class Attributes

    None

    Class Methods

    None

    Methods

    QtHelpGenerator Constructor
    __generateKeywords Private method to generate the keywords section.
    __generateSections Private method to generate the sections part.
    generateFiles Public method to generate all index files.
    remember Public method to remember a documentation file.

    Static Methods

    None

    QtHelpGenerator (Constructor)

    QtHelpGenerator(htmlDir, outputDir, namespace, virtualFolder, filterName, filterAttributes, title, createCollection)

    Constructor

    htmlDir
    directory containing the HTML files (string)
    outputDir
    output directory for the files (string)
    namespace
    namespace to be used (string)
    virtualFolder
    virtual folder to be used (string)
    filterName
    name of the custom filter (string)
    filterAttributes
    ':' separated list of filter attributes (string)
    title
    title to be used for the generated help (string)
    createCollection
    flag indicating the generation of the collection files (boolean)

    QtHelpGenerator.__generateKeywords

    __generateKeywords()

    Private method to generate the keywords section.

    Returns:
    keywords section (string)

    QtHelpGenerator.__generateSections

    __generateSections(package, level)

    Private method to generate the sections part.

    package
    name of the package to process (string)
    level
    indentation level (integer)
    Returns:
    sections part (string)

    QtHelpGenerator.generateFiles

    generateFiles(basename = "")

    Public method to generate all index files.

    basename
    The basename of the file hierarchy to be documented. The basename is stripped off the filename if it starts with the basename.

    QtHelpGenerator.remember

    remember(file, moduleDocument, basename="")

    Public method to remember a documentation file.

    file
    The filename to be remembered. (string)
    moduleDocument
    The ModuleDocument object containing the information for the file.
    basename
    The basename of the file hierarchy to be documented. The basename is stripped off the filename if it starts with the basename.

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.WizardPlugins.QRegExpWizard.QRe0000644000175000001440000000032212261331353031115 xustar0000000000000000121 path=eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.WizardPlugins.QRegExpWizard.QRegExpWizardRepeatDialog.html 30 mtime=1388688107.307229464 29 atime=1389081085.05472436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.WizardPlugins.QRegExpWizard.QRegExpWizardRepeat0000644000175000001440000000673112261331353034023 0ustar00detlevusers00000000000000 eric4.Plugins.WizardPlugins.QRegExpWizard.QRegExpWizardRepeatDialog

    eric4.Plugins.WizardPlugins.QRegExpWizard.QRegExpWizardRepeatDialog

    Module implementing a dialog for entering repeat counts.

    Global Attributes

    None

    Classes

    QRegExpWizardRepeatDialog Class implementing a dialog for entering repeat counts.

    Functions

    None


    QRegExpWizardRepeatDialog

    Class implementing a dialog for entering repeat counts.

    Derived from

    QDialog, Ui_QRegExpWizardRepeatDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    QRegExpWizardRepeatDialog Constructor
    getRepeat Public method to retrieve the dialog's result.
    on_lowerSpin_valueChanged Private slot to handle the lowerSpin valueChanged signal.
    on_upperSpin_valueChanged Private slot to handle the upperSpin valueChanged signal.

    Static Methods

    None

    QRegExpWizardRepeatDialog (Constructor)

    QRegExpWizardRepeatDialog(parent = None)

    Constructor

    parent
    parent widget (QWidget)

    QRegExpWizardRepeatDialog.getRepeat

    getRepeat()

    Public method to retrieve the dialog's result.

    Returns:
    ready formatted repeat string (string)

    QRegExpWizardRepeatDialog.on_lowerSpin_valueChanged

    on_lowerSpin_valueChanged(value)

    Private slot to handle the lowerSpin valueChanged signal.

    value
    value of the spinbox (integer)

    QRegExpWizardRepeatDialog.on_upperSpin_valueChanged

    on_upperSpin_valueChanged(value)

    Private slot to handle the upperSpin valueChanged signal.

    value
    value of the spinbox (integer)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.DocumentationPlugins.Ericapi.Er0000644000175000001440000000031312261331352031224 xustar0000000000000000114 path=eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.DocumentationPlugins.Ericapi.EricapiExecDialog.html 30 mtime=1388688106.679229148 29 atime=1389081085.05472436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.DocumentationPlugins.Ericapi.EricapiExecDialog.0000644000175000001440000001100112261331352033757 0ustar00detlevusers00000000000000 eric4.Plugins.DocumentationPlugins.Ericapi.EricapiExecDialog

    eric4.Plugins.DocumentationPlugins.Ericapi.EricapiExecDialog

    Module implementing a dialog to show the output of the ericapi process.

    Global Attributes

    None

    Classes

    EricapiExecDialog Class implementing a dialog to show the output of the ericapi process.

    Functions

    None


    EricapiExecDialog

    Class implementing a dialog to show the output of the ericapi process.

    This class starts a QProcess and displays a dialog that shows the output of the documentation command process.

    Derived from

    QDialog, Ui_EricapiExecDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    EricapiExecDialog Constructor
    __finish Private slot called when the process finished.
    __readStderr Private slot to handle the readyReadStandardError signal.
    __readStdout Private slot to handle the readyReadStandardOutput signal.
    on_buttonBox_clicked Private slot called by a button of the button box clicked.
    start Public slot to start the ericapi command.

    Static Methods

    None

    EricapiExecDialog (Constructor)

    EricapiExecDialog(cmdname, parent = None)

    Constructor

    cmdname
    name of the ericapi generator (string)
    parent
    parent widget of this dialog (QWidget)

    EricapiExecDialog.__finish

    __finish()

    Private slot called when the process finished.

    It is called when the process finished or the user pressed the button.

    EricapiExecDialog.__readStderr

    __readStderr()

    Private slot to handle the readyReadStandardError signal.

    It reads the error output of the process and inserts it into the error pane.

    EricapiExecDialog.__readStdout

    __readStdout()

    Private slot to handle the readyReadStandardOutput signal.

    It reads the output of the process, formats it and inserts it into the contents pane.

    EricapiExecDialog.on_buttonBox_clicked

    on_buttonBox_clicked(button)

    Private slot called by a button of the button box clicked.

    button
    button that was clicked (QAbstractButton)

    EricapiExecDialog.start

    start(args, fn)

    Public slot to start the ericapi command.

    args
    commandline arguments for ericapi program (QStringList)
    fn
    filename or dirname to be processed by ericapi program
    Returns:
    flag indicating the successful start of the process

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Graphics.UMLClassDiagram.html0000644000175000001440000000013112261331350027117 xustar000000000000000030 mtime=1388688104.872228241 29 atime=1389081085.05472436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Graphics.UMLClassDiagram.html0000644000175000001440000001357012261331350026660 0ustar00detlevusers00000000000000 eric4.Graphics.UMLClassDiagram

    eric4.Graphics.UMLClassDiagram

    Module implementing a dialog showing a UML like class diagram.

    Global Attributes

    None

    Classes

    UMLClassDiagram Class implementing a dialog showing a UML like class diagram.

    Functions

    None


    UMLClassDiagram

    Class implementing a dialog showing a UML like class diagram.

    Derived from

    UMLDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    UMLClassDiagram Constructor
    __addExternalClass Private method to add a class defined outside the module.
    __addLocalClass Private method to add a class defined in the module.
    __arrangeClasses Private method to arrange the shapes on the canvas.
    __buildClasses Private method to build the class shapes of the class diagram.
    __createAssociations Private method to generate the associations between the class shapes.
    __getCurrentShape Private method to get the named shape.
    relayout Public method to relayout the diagram.
    show Overriden method to show the dialog.

    Static Methods

    None

    UMLClassDiagram (Constructor)

    UMLClassDiagram(file, parent = None, name = None, noAttrs = False)

    Constructor

    file
    filename of a python module to be shown (string)
    parent
    parent widget of the view (QWidget)
    name
    name of the view widget (QString or string)
    noAttrs=
    flag indicating, that no attributes should be shown (boolean)

    UMLClassDiagram.__addExternalClass

    __addExternalClass(_class, x, y)

    Private method to add a class defined outside the module.

    If the canvas is too small to take the shape, it is enlarged.

    _class
    class to be shown (string)
    x
    x-coordinate (float)
    y
    y-coordinate (float)

    UMLClassDiagram.__addLocalClass

    __addLocalClass(className, _class, x, y, isRbModule = False)

    Private method to add a class defined in the module.

    className
    name of the class to be as a dictionary key (string)
    _class
    class to be shown (ModuleParser.Class)
    x
    x-coordinate (float)
    y
    y-coordinate (float)
    isRbModule
    flag indicating a Ruby module (boolean)

    UMLClassDiagram.__arrangeClasses

    __arrangeClasses(nodes, routes, whiteSpaceFactor = 1.2)

    Private method to arrange the shapes on the canvas.

    The algorithm is borrowed from Boa Constructor.

    UMLClassDiagram.__buildClasses

    __buildClasses()

    Private method to build the class shapes of the class diagram.

    The algorithm is borrowed from Boa Constructor.

    UMLClassDiagram.__createAssociations

    __createAssociations(routes)

    Private method to generate the associations between the class shapes.

    routes
    list of relationsships

    UMLClassDiagram.__getCurrentShape

    __getCurrentShape(name)

    Private method to get the named shape.

    name
    name of the shape (string)
    Returns:
    shape (QGraphicsItem)

    UMLClassDiagram.relayout

    relayout()

    Public method to relayout the diagram.

    UMLClassDiagram.show

    show()

    Overriden method to show the dialog.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.Lexers.__init__.html0000644000175000001440000000013112261331354027516 xustar000000000000000030 mtime=1388688108.479230052 29 atime=1389081085.05472436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.Lexers.__init__.html0000644000175000001440000001573512261331354027264 0ustar00detlevusers00000000000000 eric4.QScintilla.Lexers.__init__

    eric4.QScintilla.Lexers.__init__

    Package implementing lexers for the various supported programming languages.

    Global Attributes

    LexerRegistry

    Classes

    None

    Functions

    __getPygmentsLexer Private module function to instantiate a pygments lexer.
    getDefaultLexerAssociations Module function to get a dictionary with the default associations.
    getLexer Module function to instantiate a lexer object for a given language.
    getOpenFileFiltersList Module function to get the file filter list for an open file operation.
    getSaveFileFiltersList Module function to get the file filter list for a save file operation.
    getSupportedLanguages Module function to get a dictionary of supported lexer languages.
    registerLexer Module function to register a custom QScintilla lexer.
    unregisterLexer Module function to unregister a custom QScintilla lexer.


    __getPygmentsLexer

    __getPygmentsLexer(parent, name = "")

    Private module function to instantiate a pygments lexer.

    parent
    reference to the parent widget
    name=
    name of the pygments lexer to use (string)
    Returns:
    reference to the lexer (LexerPygments) or None


    getDefaultLexerAssociations

    getDefaultLexerAssociations()

    Module function to get a dictionary with the default associations.

    Returns:
    dictionary with the default lexer associations


    getLexer

    getLexer(language, parent = None, pyname = "")

    Module function to instantiate a lexer object for a given language.

    language
    language of the lexer (string)
    parent
    reference to the parent object (QObject)
    pyname=
    name of the pygments lexer to use (string)
    Returns:
    reference to the instanciated lexer object (QsciLexer)


    getOpenFileFiltersList

    getOpenFileFiltersList(includeAll = False, asString = False, withAdditional = True)

    Module function to get the file filter list for an open file operation.

    includeAll
    flag indicating the inclusion of the All Files filter (boolean)
    asString
    flag indicating the list should be returned as a string (boolean)
    withAdditional=
    flag indicating to include additional filters defined by the user (boolean)
    Returns:
    file filter list (QStringList or QString)


    getSaveFileFiltersList

    getSaveFileFiltersList(includeAll = False, asString = False, withAdditional = True)

    Module function to get the file filter list for a save file operation.

    includeAll
    flag indicating the inclusion of the All Files filter (boolean)
    asString
    flag indicating the list should be returned as a string (boolean)
    withAdditional=
    flag indicating to include additional filters defined by the user (boolean)
    Returns:
    file filter list (QStringList or QString)


    getSupportedLanguages

    getSupportedLanguages()

    Module function to get a dictionary of supported lexer languages.

    Returns:
    dictionary of supported lexer languages. The keys are the internal language names. The items are lists of two entries. The first is the display string for the language, the second is a dummy file name, which can be used to derive the lexer. (QString, string)


    registerLexer

    registerLexer(name, displayString, filenameSample, getLexerFunc, openFilters = QStringList(), saveFilters = QStringList(), defaultAssocs = [])

    Module function to register a custom QScintilla lexer.

    name
    lexer language name (string)
    displayString
    display string (QString)
    filenameSample
    dummy filename to derive lexer name (string)
    getLexerFunc
    reference to a function instantiating the specific lexer. This function must take a reference to the parent as its only argument.
    openFilters=
    list of open file filters (QStringList)
    saveFilters=
    list of save file filters (QStringList)
    defaultAssocs=
    default lexer associations (list of strings of filename wildcard patterns to be associated with the lexer)
    Raises KeyError:
    raised when the given name is already in use


    unregisterLexer

    unregisterLexer(name)

    Module function to unregister a custom QScintilla lexer.

    name
    lexer language name (string)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Graphics.UMLItem.html0000644000175000001440000000013112261331350025463 xustar000000000000000030 mtime=1388688104.844228227 29 atime=1389081085.05572436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Graphics.UMLItem.html0000644000175000001440000001322012261331350025214 0ustar00detlevusers00000000000000 eric4.Graphics.UMLItem

    eric4.Graphics.UMLItem

    Module implementing the UMLItem base class.

    Global Attributes

    None

    Classes

    UMLItem Class implementing the UMLItem base class.

    Functions

    None


    UMLItem

    Class implementing the UMLItem base class.

    Derived from

    QGraphicsRectItem

    Class Attributes

    None

    Class Methods

    None

    Methods

    UMLItem Constructor
    addAssociation Method to add an association to this widget.
    adjustAssociations Method to adjust the associations to widget movements.
    itemChange Protected method called when an items state changes.
    moveBy Overriden method to move the widget relative.
    paint Public method to paint the item in local coordinates.
    removeAssociation Method to remove an association to this widget.
    removeAssociations Method to remove all associations of this widget.
    setPos Overriden method to set the items position.
    setSize Public method to set the rectangles size.

    Static Methods

    None

    UMLItem (Constructor)

    UMLItem(x = 0, y = 0, rounded = False, parent = None)

    Constructor

    x
    x-coordinate (integer)
    y
    y-coordinate (integer)
    rounded
    flag indicating a rounded corner (boolean)
    parent=
    reference to the parent object (QGraphicsItem)

    UMLItem.addAssociation

    addAssociation(assoc)

    Method to add an association to this widget.

    assoc
    association to be added (AssociationWidget)

    UMLItem.adjustAssociations

    adjustAssociations()

    Method to adjust the associations to widget movements.

    UMLItem.itemChange

    itemChange(change, value)

    Protected method called when an items state changes.

    change
    the item's change (QGraphicsItem.GraphicsItemChange)
    value
    the value of the change (QVariant)
    Returns:
    adjusted values (QVariant)

    UMLItem.moveBy

    moveBy(dx, dy)

    Overriden method to move the widget relative.

    dx
    relative movement in x-direction (float)
    dy
    relative movement in y-direction (float)

    UMLItem.paint

    paint(painter, option, widget = None)

    Public method to paint the item in local coordinates.

    painter
    reference to the painter object (QPainter)
    option
    style options (QStyleOptionGraphicsItem)
    widget
    optional reference to the widget painted on (QWidget)

    UMLItem.removeAssociation

    removeAssociation(assoc)

    Method to remove an association to this widget.

    assoc
    association to be removed (AssociationWidget)

    UMLItem.removeAssociations

    removeAssociations()

    Method to remove all associations of this widget.

    UMLItem.setPos

    setPos(x, y)

    Overriden method to set the items position.

    x
    absolute x-position (float)
    y
    absolute y-position (float)

    UMLItem.setSize

    setSize(width, height)

    Public method to set the rectangles size.

    width
    width of the rectangle (float)
    height
    height of the rectangle (float)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.Lexers.LexerMakefile.html0000644000175000001440000000013112261331354030474 xustar000000000000000030 mtime=1388688108.482230054 29 atime=1389081085.05572436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.Lexers.LexerMakefile.html0000644000175000001440000000621112261331354030227 0ustar00detlevusers00000000000000 eric4.QScintilla.Lexers.LexerMakefile

    eric4.QScintilla.Lexers.LexerMakefile

    Module implementing a Makefile lexer with some additional methods.

    Global Attributes

    None

    Classes

    LexerMakefile Subclass to implement some additional lexer dependant methods.

    Functions

    None


    LexerMakefile

    Subclass to implement some additional lexer dependant methods.

    Derived from

    QsciLexerMakefile, Lexer

    Class Attributes

    None

    Class Methods

    None

    Methods

    LexerMakefile Constructor
    defaultKeywords Public method to get the default keywords.
    isCommentStyle Public method to check, if a style is a comment style.
    isStringStyle Public method to check, if a style is a string style.

    Static Methods

    None

    LexerMakefile (Constructor)

    LexerMakefile(parent=None)

    Constructor

    parent
    parent widget of this lexer

    LexerMakefile.defaultKeywords

    defaultKeywords(kwSet)

    Public method to get the default keywords.

    kwSet
    number of the keyword set (integer)
    Returns:
    string giving the keywords (string) or None

    LexerMakefile.isCommentStyle

    isCommentStyle(style)

    Public method to check, if a style is a comment style.

    Returns:
    flag indicating a comment style (boolean)

    LexerMakefile.isStringStyle

    isStringStyle(style)

    Public method to check, if a style is a string style.

    Returns:
    flag indicating a string style (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Utilities.ClassBrowsers.rbclbr.html0000644000175000001440000000013112261331354030467 xustar000000000000000030 mtime=1388688108.380230003 29 atime=1389081085.05572436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Utilities.ClassBrowsers.rbclbr.html0000644000175000001440000001610112261331354030221 0ustar00detlevusers00000000000000 eric4.Utilities.ClassBrowsers.rbclbr

    eric4.Utilities.ClassBrowsers.rbclbr

    Parse a Ruby file and retrieve classes, modules, methods and attributes.

    Parse enough of a Ruby file to recognize class, module and method definitions and to find out the superclasses of a class as well as its attributes.

    It is based on the Python class browser found in this package.

    Global Attributes

    SUPPORTED_TYPES
    _commentsub
    _getnext
    _modules

    Classes

    Attribute Class to represent a class or module attribute.
    Class Class to represent a Ruby class.
    Function Class to represent a Ruby function.
    Module Class to represent a Ruby module.
    VisibilityMixin Mixin class implementing the notion of visibility.

    Functions

    readmodule_ex Read a Ruby file and return a dictionary of classes, functions and modules.


    Attribute

    Class to represent a class or module attribute.

    Derived from

    ClbrBaseClasses.Attribute, VisibilityMixin

    Class Attributes

    None

    Class Methods

    None

    Methods

    Attribute Constructor

    Static Methods

    None

    Attribute (Constructor)

    Attribute(module, name, file, lineno)

    Constructor

    module
    name of the module containing this class
    name
    name of this class
    file
    filename containing this attribute
    lineno
    linenumber of the class definition


    Class

    Class to represent a Ruby class.

    Derived from

    ClbrBaseClasses.Class, VisibilityMixin

    Class Attributes

    None

    Class Methods

    None

    Methods

    Class Constructor

    Static Methods

    None

    Class (Constructor)

    Class(module, name, super, file, lineno)

    Constructor

    module
    name of the module containing this class
    name
    name of this class
    super
    list of class names this class is inherited from
    file
    filename containing this class
    lineno
    linenumber of the class definition


    Function

    Class to represent a Ruby function.

    Derived from

    ClbrBaseClasses.Function, VisibilityMixin

    Class Attributes

    None

    Class Methods

    None

    Methods

    Function Constructor

    Static Methods

    None

    Function (Constructor)

    Function(module, name, file, lineno, signature = '', separator = ', ')

    Constructor

    module
    name of the module containing this function
    name
    name of this function
    file
    filename containing this class
    lineno
    linenumber of the class definition
    signature
    parameterlist of the method
    separator
    string separating the parameters


    Module

    Class to represent a Ruby module.

    Derived from

    ClbrBaseClasses.Module, VisibilityMixin

    Class Attributes

    None

    Class Methods

    None

    Methods

    Module Constructor

    Static Methods

    None

    Module (Constructor)

    Module(module, name, file, lineno)

    Constructor

    module
    name of the module containing this class
    name
    name of this class
    file
    filename containing this class
    lineno
    linenumber of the class definition


    VisibilityMixin

    Mixin class implementing the notion of visibility.

    Derived from

    ClbrBaseClasses.ClbrVisibilityMixinBase

    Class Attributes

    None

    Class Methods

    None

    Methods

    VisibilityMixin Method to initialize the visibility.

    Static Methods

    None

    VisibilityMixin (Constructor)

    VisibilityMixin()

    Method to initialize the visibility.



    readmodule_ex

    readmodule_ex(module, path=[])

    Read a Ruby file and return a dictionary of classes, functions and modules.

    module
    name of the Ruby file (string)
    path
    path the file should be searched in (list of strings)
    Returns:
    the resulting dictionary

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.AdBlock.AdBlockRule.html0000644000175000001440000000013012261331353030210 xustar000000000000000029 mtime=1388688107.71822967 29 atime=1389081085.05572436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.AdBlock.AdBlockRule.html0000644000175000001440000001447012261331353027752 0ustar00detlevusers00000000000000 eric4.Helpviewer.AdBlock.AdBlockRule

    eric4.Helpviewer.AdBlock.AdBlockRule

    Module implementing the AdBlock rule class.

    Global Attributes

    None

    Classes

    AdBlockRule Class implementing the AdBlock rule.

    Functions

    None


    AdBlockRule

    Class implementing the AdBlock rule.

    Derived from

    object

    Class Attributes

    None

    Class Methods

    None

    Methods

    AdBlockRule Constructor
    __convertPatternToRegExp Private method to convert a wildcard pattern to a regular expression.
    filter Public method to get the rule filter string.
    isCSSRule Public method to check, if the rule is a CSS rule.
    isEnabled Public method to check, if the rule is enabled.
    isException Public method to check, if the rule defines an exception.
    networkMatch Public method to check the rule for a match.
    regExpPattern Public method to get the regexp pattern of the rule.
    setEnabled Public method to set the rule's enabled state.
    setException Public method to set the rule's exception flag.
    setFilter Public method to set the rule filter string.
    setPattern Public method to set the rule pattern.

    Static Methods

    None

    AdBlockRule (Constructor)

    AdBlockRule(filter = QString())

    Constructor

    AdBlockRule.__convertPatternToRegExp

    __convertPatternToRegExp(wildcardPattern)

    Private method to convert a wildcard pattern to a regular expression.

    wildcardPattern
    string containing the wildcard pattern (string or QString)
    Returns:
    string containing a regular expression (QString)

    AdBlockRule.filter

    filter()

    Public method to get the rule filter string.

    Returns:
    rule filter string (QString)

    AdBlockRule.isCSSRule

    isCSSRule()

    Public method to check, if the rule is a CSS rule.

    Returns:
    flag indicating a CSS rule (boolean)

    AdBlockRule.isEnabled

    isEnabled()

    Public method to check, if the rule is enabled.

    Returns:
    flag indicating enabled state (boolean)

    AdBlockRule.isException

    isException()

    Public method to check, if the rule defines an exception.

    Returns:
    flag indicating an exception (boolean)

    AdBlockRule.networkMatch

    networkMatch(encodedUrl)

    Public method to check the rule for a match.

    encodedUrl
    string encoded URL to be checked (string or QString)
    Returns:
    flag indicating a match (boolean)

    AdBlockRule.regExpPattern

    regExpPattern()

    Public method to get the regexp pattern of the rule.

    Returns:
    regexp pattern (QRegExp)

    AdBlockRule.setEnabled

    setEnabled(enabled)

    Public method to set the rule's enabled state.

    enabled
    flag indicating the new enabled state (boolean)

    AdBlockRule.setException

    setException(exception)

    Public method to set the rule's exception flag.

    exception
    flag indicating an exception rule (boolean)

    AdBlockRule.setFilter

    setFilter(filter)

    Public method to set the rule filter string.

    filter
    rule filter string (string or QString)

    AdBlockRule.setPattern

    setPattern(pattern, isRegExp)

    Public method to set the rule pattern.

    pattern
    string containing the pattern (string or QString)
    isRegExp
    flag indicating a reg exp pattern (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsSubversion.SvnRep0000644000175000001440000000031212261331353031314 xustar0000000000000000113 path=eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsSubversion.SvnRepoBrowserDialog.html 30 mtime=1388688107.003229311 29 atime=1389081085.05572436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsSubversion.SvnRepoBrowserDialog.h0000644000175000001440000003153712261331353034150 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsSubversion.SvnRepoBrowserDialog

    eric4.Plugins.VcsPlugins.vcsSubversion.SvnRepoBrowserDialog

    Module implementing the subversion repository browser dialog.

    Global Attributes

    None

    Classes

    SvnRepoBrowserDialog Class implementing the subversion repository browser dialog.

    Functions

    None


    SvnRepoBrowserDialog

    Class implementing the subversion repository browser dialog.

    Derived from

    QDialog, Ui_SvnRepoBrowserDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnRepoBrowserDialog Constructor
    __finish Private slot called when the process finished or the user pressed the button.
    __generateItem Private method to generate a tree item in the repository tree.
    __listRepo Private method to perform the svn list command.
    __normalizeUrl Private method to normalite the url.
    __procFinished Private slot connected to the finished signal.
    __readStderr Private slot to handle the readyReadStandardError signal.
    __readStdout Private slot to handle the readyReadStandardOutput signal.
    __repoRoot Private method to get the repository root using the svn info command.
    __resizeColumns Private method to resize the tree columns.
    __resort Private method to resort the tree.
    accept Public slot called when the dialog is accepted.
    closeEvent Private slot implementing a close event handler.
    getSelectedUrl Public method to retrieve the selected repository URL.
    keyPressEvent Protected slot to handle a key press event.
    on_input_returnPressed Private slot to handle the press of the return key in the input field.
    on_passwordCheckBox_toggled Private slot to handle the password checkbox toggled.
    on_repoTree_itemCollapsed Private slot called when an item is collapsed.
    on_repoTree_itemExpanded Private slot called when an item is expanded.
    on_repoTree_itemSelectionChanged Private slot called when the selection changes.
    on_sendButton_clicked Private slot to send the input to the subversion process.
    on_urlCombo_currentIndexChanged Private slot called, when a new repository URL is entered or selected.
    start Public slot to start the svn info command.

    Static Methods

    None

    SvnRepoBrowserDialog (Constructor)

    SvnRepoBrowserDialog(vcs, mode = "browse", parent = None)

    Constructor

    vcs
    reference to the vcs object
    mode
    mode of the dialog (string, "browse" or "select")
    parent
    parent widget (QWidget)

    SvnRepoBrowserDialog.__finish

    __finish()

    Private slot called when the process finished or the user pressed the button.

    SvnRepoBrowserDialog.__generateItem

    __generateItem(repopath, revision, author, size, date, nodekind, url)

    Private method to generate a tree item in the repository tree.

    parent
    parent of the item to be created (QTreeWidget or QTreeWidgetItem)
    repopath
    path of the item (string or QString)
    revision
    revision info (string or QString)
    author
    author info (string or QString)
    size
    size info (string or QString)
    date
    date info (string or QString)
    nodekind
    node kind info (string, "dir" or "file")
    url
    url of the entry (string or QString)
    Returns:
    reference to the generated item (QTreeWidgetItem)

    SvnRepoBrowserDialog.__listRepo

    __listRepo(url, parent = None)

    Private method to perform the svn list command.

    url
    the repository URL to browser (string or QString)
    parent
    reference to the item, the data should be appended to (QTreeWidget or QTreeWidgetItem)

    SvnRepoBrowserDialog.__normalizeUrl

    __normalizeUrl(url)

    Private method to normalite the url.

    url
    the url to normalize (string or QString)
    Returns:
    normalized URL (QString)

    SvnRepoBrowserDialog.__procFinished

    __procFinished(exitCode, exitStatus)

    Private slot connected to the finished signal.

    exitCode
    exit code of the process (integer)
    exitStatus
    exit status of the process (QProcess.ExitStatus)

    SvnRepoBrowserDialog.__readStderr

    __readStderr()

    Private slot to handle the readyReadStandardError signal.

    It reads the error output of the process and inserts it into the error pane.

    SvnRepoBrowserDialog.__readStdout

    __readStdout()

    Private slot to handle the readyReadStandardOutput signal.

    It reads the output of the process, formats it and inserts it into the contents pane.

    SvnRepoBrowserDialog.__repoRoot

    __repoRoot(url)

    Private method to get the repository root using the svn info command.

    url
    the repository URL to browser (string or QString)
    Returns:
    repository root (string)

    SvnRepoBrowserDialog.__resizeColumns

    __resizeColumns()

    Private method to resize the tree columns.

    SvnRepoBrowserDialog.__resort

    __resort()

    Private method to resort the tree.

    SvnRepoBrowserDialog.accept

    accept()

    Public slot called when the dialog is accepted.

    SvnRepoBrowserDialog.closeEvent

    closeEvent(e)

    Private slot implementing a close event handler.

    e
    close event (QCloseEvent)

    SvnRepoBrowserDialog.getSelectedUrl

    getSelectedUrl()

    Public method to retrieve the selected repository URL.

    Returns:
    the selected repository URL (QString)

    SvnRepoBrowserDialog.keyPressEvent

    keyPressEvent(evt)

    Protected slot to handle a key press event.

    evt
    the key press event (QKeyEvent)

    SvnRepoBrowserDialog.on_input_returnPressed

    on_input_returnPressed()

    Private slot to handle the press of the return key in the input field.

    SvnRepoBrowserDialog.on_passwordCheckBox_toggled

    on_passwordCheckBox_toggled(isOn)

    Private slot to handle the password checkbox toggled.

    isOn
    flag indicating the status of the check box (boolean)

    SvnRepoBrowserDialog.on_repoTree_itemCollapsed

    on_repoTree_itemCollapsed(item)

    Private slot called when an item is collapsed.

    item
    reference to the item to be collapsed (QTreeWidgetItem)

    SvnRepoBrowserDialog.on_repoTree_itemExpanded

    on_repoTree_itemExpanded(item)

    Private slot called when an item is expanded.

    item
    reference to the item to be expanded (QTreeWidgetItem)

    SvnRepoBrowserDialog.on_repoTree_itemSelectionChanged

    on_repoTree_itemSelectionChanged()

    Private slot called when the selection changes.

    SvnRepoBrowserDialog.on_sendButton_clicked

    on_sendButton_clicked()

    Private slot to send the input to the subversion process.

    SvnRepoBrowserDialog.on_urlCombo_currentIndexChanged

    on_urlCombo_currentIndexChanged(text)

    Private slot called, when a new repository URL is entered or selected.

    text
    the text of the current item (QString)

    SvnRepoBrowserDialog.start

    start(url)

    Public slot to start the svn info command.

    url
    the repository URL to browser (string or QString)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Debugger.Config.html0000644000175000001440000000013112261331350025400 xustar000000000000000030 mtime=1388688104.758228184 29 atime=1389081085.05572436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Debugger.Config.html0000644000175000001440000000152012261331350025131 0ustar00detlevusers00000000000000 eric4.Debugger.Config

    eric4.Debugger.Config

    Module defining the different Python types and their display strings.

    Global Attributes

    None

    Classes

    None

    Functions

    None

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.E4XML.TasksHandler.html0000644000175000001440000000013012261331352025664 xustar000000000000000029 mtime=1388688106.52222907 29 atime=1389081085.05572436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.E4XML.TasksHandler.html0000644000175000001440000001473312261331352025430 0ustar00detlevusers00000000000000 eric4.E4XML.TasksHandler

    eric4.E4XML.TasksHandler

    Module implementing the handler class for reading an XML tasks file.

    Global Attributes

    None

    Classes

    TasksHandler Class implementing a sax handler to read an XML tasks file.

    Functions

    None


    TasksHandler

    Class implementing a sax handler to read an XML tasks file.

    Derived from

    XMLHandlerBase

    Class Attributes

    None

    Class Methods

    None

    Methods

    TasksHandler Constructor
    __buildPath Private method to assemble a path.
    endCreated Handler method for the "Created" end tag.
    endDescription Handler method for the "Description" end tag.
    endDir Handler method for the "Dir" end tag.
    endFilename Handler method for the "Filename" end tag.
    endLinenumber Handler method for the "Linenumber" end tag.
    endName Handler method for the "Name" end tag.
    endSummary Handler method for the "Summary" end tag.
    endTask Handler method for the "Task" end tag.
    getVersion Public method to retrieve the version of the tasks file.
    startDocumentTasks Handler called, when the document parsing is started.
    startFilename Handler method for the "Filename" start tag.
    startTask Handler method for the "Task" start tag.
    startTasks Handler method for the "Tasks" start tag.

    Static Methods

    None

    TasksHandler (Constructor)

    TasksHandler(forProject = False, taskViewer=None)

    Constructor

    forProject
    flag indicating project related mode (boolean)
    taskViewer
    reference to the task viewer object

    TasksHandler.__buildPath

    __buildPath()

    Private method to assemble a path.

    Returns:
    The ready assembled path. (string)

    TasksHandler.endCreated

    endCreated()

    Handler method for the "Created" end tag.

    TasksHandler.endDescription

    endDescription()

    Handler method for the "Description" end tag.

    TasksHandler.endDir

    endDir()

    Handler method for the "Dir" end tag.

    TasksHandler.endFilename

    endFilename()

    Handler method for the "Filename" end tag.

    TasksHandler.endLinenumber

    endLinenumber()

    Handler method for the "Linenumber" end tag.

    TasksHandler.endName

    endName()

    Handler method for the "Name" end tag.

    TasksHandler.endSummary

    endSummary()

    Handler method for the "Summary" end tag.

    TasksHandler.endTask

    endTask()

    Handler method for the "Task" end tag.

    TasksHandler.getVersion

    getVersion()

    Public method to retrieve the version of the tasks file.

    Returns:
    String containing the version number.

    TasksHandler.startDocumentTasks

    startDocumentTasks()

    Handler called, when the document parsing is started.

    TasksHandler.startFilename

    startFilename(attrs)

    Handler method for the "Filename" start tag.

    attrs
    list of tag attributes

    TasksHandler.startTask

    startTask(attrs)

    Handler method for the "Task" start tag.

    attrs
    list of tag attributes

    TasksHandler.startTasks

    startTasks(attrs)

    Handler method for the "Tasks" start tag.

    attrs
    list of tag attributes

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.HelpTocWidget.html0000644000175000001440000000013112261331351027264 xustar000000000000000030 mtime=1388688105.303228458 29 atime=1389081085.05572436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.HelpTocWidget.html0000644000175000001440000001307312261331351027023 0ustar00detlevusers00000000000000 eric4.Helpviewer.HelpTocWidget

    eric4.Helpviewer.HelpTocWidget

    Module implementing a window for showing the QtHelp TOC.

    Global Attributes

    None

    Classes

    HelpTocWidget Class implementing a window for showing the QtHelp TOC.

    Functions

    None


    HelpTocWidget

    Class implementing a window for showing the QtHelp TOC.

    Signals

    escapePressed()
    emitted when the ESC key was pressed
    linkActivated(const QUrl&)
    emitted when a TOC entry is activated

    Derived from

    QWidget

    Class Attributes

    None

    Class Methods

    None

    Methods

    HelpTocWidget Constructor
    __expandTOC Private slot to expand the table of contents.
    __showContextMenu Private slot showing the context menu.
    eventFilter Public method called to filter the event queue.
    expandToDepth Public slot to expand the table of contents to a specific depth.
    focusInEvent Protected method handling focus in events.
    itemClicked Public slot handling a click of a TOC entry.
    keyPressEvent Protected method handling key press events.
    syncToContent Public method to sync the TOC to the displayed page.

    Static Methods

    None

    HelpTocWidget (Constructor)

    HelpTocWidget(engine, mainWindow, parent = None)

    Constructor

    engine
    reference to the help engine (QHelpEngine)
    mainWindow
    reference to the main window object (KQMainWindow)
    parent
    reference to the parent widget (QWidget)

    HelpTocWidget.__expandTOC

    __expandTOC()

    Private slot to expand the table of contents.

    HelpTocWidget.__showContextMenu

    __showContextMenu(pos)

    Private slot showing the context menu.

    pos
    position to show the menu at (QPoint)

    HelpTocWidget.eventFilter

    eventFilter(watched, event)

    Public method called to filter the event queue.

    watched
    the QObject being watched (QObject)
    event
    the event that occurred (QEvent)
    Returns:
    flag indicating whether the event was handled (boolean)

    HelpTocWidget.expandToDepth

    expandToDepth(depth)

    Public slot to expand the table of contents to a specific depth.

    depth
    depth to expand to (integer)

    HelpTocWidget.focusInEvent

    focusInEvent(evt)

    Protected method handling focus in events.

    evt
    reference to the focus event object (QFocusEvent)

    HelpTocWidget.itemClicked

    itemClicked(index)

    Public slot handling a click of a TOC entry.

    index
    index of the TOC clicked (QModelIndex)

    HelpTocWidget.keyPressEvent

    keyPressEvent(evt)

    Protected method handling key press events.

    evt
    reference to the key press event (QKeyEvent)

    HelpTocWidget.syncToContent

    syncToContent(url)

    Public method to sync the TOC to the displayed page.

    url
    URL of the displayed page (QUrl)
    Returns:
    flag indicating a successful synchronization (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Graphics.PackageDiagram.html0000644000175000001440000000013112261331350027027 xustar000000000000000029 mtime=1388688104.85022823 30 atime=1389081085.056724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Graphics.PackageDiagram.html0000644000175000001440000001455212261331350026571 0ustar00detlevusers00000000000000 eric4.Graphics.PackageDiagram

    eric4.Graphics.PackageDiagram

    Module implementing a dialog showing a UML like class diagram of a package.

    Global Attributes

    None

    Classes

    PackageDiagram Class implementing a dialog showing a UML like class diagram of a package.

    Functions

    None


    PackageDiagram

    Class implementing a dialog showing a UML like class diagram of a package.

    Derived from

    UMLDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    PackageDiagram Constructor
    __addExternalClass Private method to add a class defined outside the module.
    __addLocalClass Private method to add a class defined in the module.
    __arrangeClasses Private method to arrange the shapes on the canvas.
    __buildClasses Private method to build the class shapes of the package diagram.
    __buildModulesDict Private method to build a dictionary of modules contained in the package.
    __createAssociations Private method to generate the associations between the class shapes.
    __getCurrentShape Private method to get the named shape.
    relayout Method to relayout the diagram.
    show Overriden method to show the dialog.

    Static Methods

    None

    PackageDiagram (Constructor)

    PackageDiagram(package, parent = None, name = None, noAttrs = False)

    Constructor

    package
    name of a python package to be shown (string)
    parent
    parent widget of the view (QWidget)
    name
    name of the view widget (QString or string)
    noAttrs=
    flag indicating, that no attributes should be shown (boolean)

    PackageDiagram.__addExternalClass

    __addExternalClass(_class, x, y)

    Private method to add a class defined outside the module.

    If the canvas is too small to take the shape, it is enlarged.

    _class
    class to be shown (string)
    x
    x-coordinate (float)
    y
    y-coordinate (float)

    PackageDiagram.__addLocalClass

    __addLocalClass(className, _class, x, y, isRbModule = False)

    Private method to add a class defined in the module.

    className
    name of the class to be as a dictionary key (string)
    _class
    class to be shown (ModuleParser.Class)
    x
    x-coordinate (float)
    y
    y-coordinate (float)
    isRbModule
    flag indicating a Ruby module (boolean)

    PackageDiagram.__arrangeClasses

    __arrangeClasses(nodes, routes, whiteSpaceFactor = 1.2)

    Private method to arrange the shapes on the canvas.

    The algorithm is borrowed from Boa Constructor.

    PackageDiagram.__buildClasses

    __buildClasses()

    Private method to build the class shapes of the package diagram.

    The algorithm is borrowed from Boa Constructor.

    PackageDiagram.__buildModulesDict

    __buildModulesDict()

    Private method to build a dictionary of modules contained in the package.

    Returns:
    dictionary of modules contained in the package.

    PackageDiagram.__createAssociations

    __createAssociations(routes)

    Private method to generate the associations between the class shapes.

    routes
    list of relationsships

    PackageDiagram.__getCurrentShape

    __getCurrentShape(name)

    Private method to get the named shape.

    name
    name of the shape (string)
    Returns:
    shape (QCanvasItem)

    PackageDiagram.relayout

    relayout()

    Method to relayout the diagram.

    PackageDiagram.show

    show()

    Overriden method to show the dialog.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.Lexers.LexerPerl.html0000644000175000001440000000013212261331354027662 xustar000000000000000030 mtime=1388688108.527230076 30 atime=1389081085.056724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.Lexers.LexerPerl.html0000644000175000001440000000754712261331354027431 0ustar00detlevusers00000000000000 eric4.QScintilla.Lexers.LexerPerl

    eric4.QScintilla.Lexers.LexerPerl

    Module implementing a Perl lexer with some additional methods.

    Global Attributes

    None

    Classes

    LexerPerl Subclass to implement some additional lexer dependant methods.

    Functions

    None


    LexerPerl

    Subclass to implement some additional lexer dependant methods.

    Derived from

    QsciLexerPerl, Lexer

    Class Attributes

    None

    Class Methods

    None

    Methods

    LexerPerl Constructor
    autoCompletionWordSeparators Public method to return the list of separators for autocompletion.
    defaultKeywords Public method to get the default keywords.
    initProperties Public slot to initialize the properties.
    isCommentStyle Public method to check, if a style is a comment style.
    isStringStyle Public method to check, if a style is a string style.

    Static Methods

    None

    LexerPerl (Constructor)

    LexerPerl(parent=None)

    Constructor

    parent
    parent widget of this lexer

    LexerPerl.autoCompletionWordSeparators

    autoCompletionWordSeparators()

    Public method to return the list of separators for autocompletion.

    Returns:
    list of separators (QStringList)

    LexerPerl.defaultKeywords

    defaultKeywords(kwSet)

    Public method to get the default keywords.

    kwSet
    number of the keyword set (integer)
    Returns:
    string giving the keywords (string) or None

    LexerPerl.initProperties

    initProperties()

    Public slot to initialize the properties.

    LexerPerl.isCommentStyle

    isCommentStyle(style)

    Public method to check, if a style is a comment style.

    Returns:
    flag indicating a comment style (boolean)

    LexerPerl.isStringStyle

    isStringStyle(style)

    Public method to check, if a style is a string style.

    Returns:
    flag indicating a string style (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.Helpviewer.Bookmarks.html0000644000175000001440000000013212261331354027623 xustar000000000000000030 mtime=1388688108.659230143 30 atime=1389081085.057724362 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.Helpviewer.Bookmarks.html0000644000175000001440000000420412261331354027355 0ustar00detlevusers00000000000000 eric4.Helpviewer.Bookmarks

    eric4.Helpviewer.Bookmarks

    Package implementing the bookmarks system.

    Modules

    AddBookmarkDialog Module implementing a dialog to add a bookmark or a bookmark folder.
    BookmarkNode Module implementing the bookmark node.
    BookmarksDialog Module implementing a dialog to manage bookmarks.
    BookmarksManager Module implementing the bookmarks manager.
    BookmarksMenu Module implementing the bookmarks menu.
    BookmarksModel Module implementing the bookmark model class.
    BookmarksToolBar Module implementing a tool bar showing bookmarks.
    DefaultBookmarks Module defining the default bookmarks.
    XbelReader Module implementing a class to read XBEL bookmark files.
    XbelWriter Module implementing a class to write XBEL bookmark files.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.WizardPlugins.QRegExpWizard.QRe0000644000175000001440000000031512261331353031117 xustar0000000000000000115 path=eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.WizardPlugins.QRegExpWizard.QRegExpWizardDialog.html 30 mtime=1388688107.295229458 30 atime=1389081085.057724362 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.WizardPlugins.QRegExpWizard.QRegExpWizardDialog0000644000175000001440000003516012261331353034000 0ustar00detlevusers00000000000000 eric4.Plugins.WizardPlugins.QRegExpWizard.QRegExpWizardDialog

    eric4.Plugins.WizardPlugins.QRegExpWizard.QRegExpWizardDialog

    Module implementing the QRegExp wizard dialog.

    Global Attributes

    None

    Classes

    QRegExpWizardDialog Class for the dialog variant.
    QRegExpWizardWidget Class implementing the QRegExp wizard dialog.
    QRegExpWizardWindow Main window class for the standalone dialog.

    Functions

    None


    QRegExpWizardDialog

    Class for the dialog variant.

    Derived from

    QDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    QRegExpWizardDialog Constructor
    getCode Public method to get the source code.

    Static Methods

    None

    QRegExpWizardDialog (Constructor)

    QRegExpWizardDialog(parent = None, fromEric = True)

    Constructor

    parent
    parent widget (QWidget)
    fromEric
    flag indicating a call from within eric4

    QRegExpWizardDialog.getCode

    getCode(indLevel, indString)

    Public method to get the source code.

    indLevel
    indentation level (int)
    indString
    string used for indentation (space or tab) (string)
    Returns:
    generated code (string)


    QRegExpWizardWidget

    Class implementing the QRegExp wizard dialog.

    Derived from

    QWidget, Ui_QRegExpWizardDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    QRegExpWizardWidget Constructor
    __insertString Private method to insert a string into line edit and move cursor.
    getCode Public method to get the source code.
    on_altnButton_clicked Private slot to handle the alternatives toolbutton.
    on_anycharButton_clicked Private slot to handle the any character toolbutton.
    on_beglineButton_clicked Private slot to handle the begin line toolbutton.
    on_buttonBox_clicked Private slot called by a button of the button box clicked.
    on_charButton_clicked Private slot to handle the characters toolbutton.
    on_copyButton_clicked Private slot to copy the regexp string into the clipboard.
    on_endlineButton_clicked Private slot to handle the end line toolbutton.
    on_executeButton_clicked Private slot to execute the entered regexp on the test text.
    on_groupButton_clicked Private slot to handle the group toolbutton.
    on_loadButton_clicked Private slot to load a regexp from a file.
    on_neglookaheadButton_clicked Private slot to handle the negative lookahead toolbutton.
    on_nextButton_clicked Private slot to find the next match.
    on_nonGroupButton_clicked Private slot to handle the non group toolbutton.
    on_nonwordboundButton_clicked Private slot to handle the non word boundary toolbutton.
    on_poslookaheadButton_clicked Private slot to handle the positive lookahead toolbutton.
    on_regexpLineEdit_textChanged Private slot called when the regexp changes.
    on_repeatButton_clicked Private slot to handle the repeat toolbutton.
    on_saveButton_clicked Private slot to save the regexp to a file.
    on_validateButton_clicked Private slot to validate the entered regexp.
    on_wordboundButton_clicked Private slot to handle the word boundary toolbutton.

    Static Methods

    None

    QRegExpWizardWidget (Constructor)

    QRegExpWizardWidget(parent = None, fromEric = True)

    Constructor

    parent
    parent widget (QWidget)
    fromEric
    flag indicating a call from within eric4

    QRegExpWizardWidget.__insertString

    __insertString(s, steps=0)

    Private method to insert a string into line edit and move cursor.

    s
    string to be inserted into the regexp line edit (string or QString)
    steps
    number of characters to move the cursor (integer). Negative steps moves cursor back, positives forward.

    QRegExpWizardWidget.getCode

    getCode(indLevel, indString)

    Public method to get the source code.

    indLevel
    indentation level (int)
    indString
    string used for indentation (space or tab) (string)
    Returns:
    generated code (string)

    QRegExpWizardWidget.on_altnButton_clicked

    on_altnButton_clicked()

    Private slot to handle the alternatives toolbutton.

    QRegExpWizardWidget.on_anycharButton_clicked

    on_anycharButton_clicked()

    Private slot to handle the any character toolbutton.

    QRegExpWizardWidget.on_beglineButton_clicked

    on_beglineButton_clicked()

    Private slot to handle the begin line toolbutton.

    QRegExpWizardWidget.on_buttonBox_clicked

    on_buttonBox_clicked(button)

    Private slot called by a button of the button box clicked.

    button
    button that was clicked (QAbstractButton)

    QRegExpWizardWidget.on_charButton_clicked

    on_charButton_clicked()

    Private slot to handle the characters toolbutton.

    QRegExpWizardWidget.on_copyButton_clicked

    on_copyButton_clicked()

    Private slot to copy the regexp string into the clipboard.

    This slot is only available, if not called from within eric4.

    QRegExpWizardWidget.on_endlineButton_clicked

    on_endlineButton_clicked()

    Private slot to handle the end line toolbutton.

    QRegExpWizardWidget.on_executeButton_clicked

    on_executeButton_clicked(startpos = 0)

    Private slot to execute the entered regexp on the test text.

    This slot will execute the entered regexp on the entered test data and will display the result in the table part of the dialog.

    startpos
    starting position for the regexp matching

    QRegExpWizardWidget.on_groupButton_clicked

    on_groupButton_clicked()

    Private slot to handle the group toolbutton.

    QRegExpWizardWidget.on_loadButton_clicked

    on_loadButton_clicked()

    Private slot to load a regexp from a file.

    QRegExpWizardWidget.on_neglookaheadButton_clicked

    on_neglookaheadButton_clicked()

    Private slot to handle the negative lookahead toolbutton.

    QRegExpWizardWidget.on_nextButton_clicked

    on_nextButton_clicked()

    Private slot to find the next match.

    QRegExpWizardWidget.on_nonGroupButton_clicked

    on_nonGroupButton_clicked()

    Private slot to handle the non group toolbutton.

    QRegExpWizardWidget.on_nonwordboundButton_clicked

    on_nonwordboundButton_clicked()

    Private slot to handle the non word boundary toolbutton.

    QRegExpWizardWidget.on_poslookaheadButton_clicked

    on_poslookaheadButton_clicked()

    Private slot to handle the positive lookahead toolbutton.

    QRegExpWizardWidget.on_regexpLineEdit_textChanged

    on_regexpLineEdit_textChanged(txt)

    Private slot called when the regexp changes.

    txt
    the new text of the line edit (QString)

    QRegExpWizardWidget.on_repeatButton_clicked

    on_repeatButton_clicked()

    Private slot to handle the repeat toolbutton.

    QRegExpWizardWidget.on_saveButton_clicked

    on_saveButton_clicked()

    Private slot to save the regexp to a file.

    QRegExpWizardWidget.on_validateButton_clicked

    on_validateButton_clicked()

    Private slot to validate the entered regexp.

    QRegExpWizardWidget.on_wordboundButton_clicked

    on_wordboundButton_clicked()

    Private slot to handle the word boundary toolbutton.



    QRegExpWizardWindow

    Main window class for the standalone dialog.

    Derived from

    KQMainWindow

    Class Attributes

    None

    Class Methods

    None

    Methods

    QRegExpWizardWindow Constructor

    Static Methods

    None

    QRegExpWizardWindow (Constructor)

    QRegExpWizardWindow(parent = None)

    Constructor

    parent
    reference to the parent widget (QWidget)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Graphics.ApplicationDiagram.html0000644000175000001440000000013212261331350027740 xustar000000000000000030 mtime=1388688104.820228215 30 atime=1389081085.057724362 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Graphics.ApplicationDiagram.html0000644000175000001440000001140512261331350027473 0ustar00detlevusers00000000000000 eric4.Graphics.ApplicationDiagram

    eric4.Graphics.ApplicationDiagram

    Module implementing a dialog showing an imports diagram of the application.

    Global Attributes

    None

    Classes

    ApplicationDiagram Class implementing a dialog showing an imports diagram of the application.

    Functions

    None


    ApplicationDiagram

    Class implementing a dialog showing an imports diagram of the application.

    Derived from

    UMLDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    ApplicationDiagram Constructor
    __addPackage Private method to add a package to the diagram.
    __buildModulesDict Private method to build a dictionary of modules contained in the application.
    __buildPackages Private method to build the packages shapes of the diagram.
    __createAssociations Private method to generate the associations between the package shapes.
    relayout Method to relayout the diagram.
    show Overriden method to show the dialog.

    Static Methods

    None

    ApplicationDiagram (Constructor)

    ApplicationDiagram(project, parent = None, name = None, noModules = False)

    Constructor

    project
    reference to the project object
    parent
    parent widget of the view (QWidget)
    name
    name of the view widget (QString or string)
    noModules=
    flag indicating, that no module names should be shown (boolean)

    ApplicationDiagram.__addPackage

    __addPackage(name, modules, x, y)

    Private method to add a package to the diagram.

    name
    package name to be shown (string)
    modules
    list of module names contained in the package (list of strings)
    x
    x-coordinate (float)
    y
    y-coordinate (float)

    ApplicationDiagram.__buildModulesDict

    __buildModulesDict()

    Private method to build a dictionary of modules contained in the application.

    Returns:
    dictionary of modules contained in the application.

    ApplicationDiagram.__buildPackages

    __buildPackages()

    Private method to build the packages shapes of the diagram.

    ApplicationDiagram.__createAssociations

    __createAssociations(shapes)

    Private method to generate the associations between the package shapes.

    shapes
    list of shapes

    ApplicationDiagram.relayout

    relayout()

    Method to relayout the diagram.

    ApplicationDiagram.show

    show()

    Overriden method to show the dialog.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Utilities.ClassBrowsers.ClbrBaseClasses0000644000175000001440000000013212261331354031252 xustar000000000000000030 mtime=1388688108.393230009 30 atime=1389081085.057724362 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Utilities.ClassBrowsers.ClbrBaseClasses.html0000644000175000001440000003474012261331354031757 0ustar00detlevusers00000000000000 eric4.Utilities.ClassBrowsers.ClbrBaseClasses

    eric4.Utilities.ClassBrowsers.ClbrBaseClasses

    Module implementing base classes used by the various class browsers.

    Global Attributes

    None

    Classes

    Attribute Class to represent an attribute.
    Class Class to represent a class.
    ClbrBase Class implementing the base of all complex class browser objects.
    ClbrVisibilityMixinBase Class implementing the base class of all visibility mixins.
    Coding Class to represent a source coding.
    Function Class to represent a function or method.
    Module Class to represent a module.
    _ClbrBase Class implementing the base of all class browser objects.

    Functions

    None


    Attribute

    Class to represent an attribute.

    Derived from

    _ClbrBase

    Class Attributes

    None

    Class Methods

    None

    Methods

    Attribute Constructor

    Static Methods

    None

    Attribute (Constructor)

    Attribute(module, name, file, lineno)

    Constructor

    module
    name of the module containing this class
    name
    name of this class
    file
    filename containing this attribute
    lineno
    linenumber of the class definition


    Class

    Class to represent a class.

    Derived from

    ClbrBase

    Class Attributes

    None

    Class Methods

    None

    Methods

    Class Constructor

    Static Methods

    None

    Class (Constructor)

    Class(module, name, super, file, lineno)

    Constructor

    module
    name of the module containing this class
    name
    name of this class
    super
    list of class names this class is inherited from
    file
    filename containing this class
    lineno
    linenumber of the class definition


    ClbrBase

    Class implementing the base of all complex class browser objects.

    Derived from

    _ClbrBase

    Class Attributes

    None

    Class Methods

    None

    Methods

    ClbrBase Constructor
    _addattribute Protected method to add information about attributes.
    _addclass Protected method method to add a nested class to this class.
    _addglobal Protected method to add information about global variables.
    _addmethod Protected method to add information about a method.
    _getattribute Protected method to retrieve an attribute by name.
    _getglobal Protected method to retrieve a global variable by name.
    _getmethod Protected method to retrieve a method by name.

    Static Methods

    None

    ClbrBase (Constructor)

    ClbrBase(module, name, file, lineno)

    Constructor

    module
    name of the module containing this class
    name
    name of this class
    file
    filename containing this object
    lineno
    linenumber of the class definition

    ClbrBase._addattribute

    _addattribute(attr)

    Protected method to add information about attributes.

    attr
    Attribute object to be added (Attribute)

    ClbrBase._addclass

    _addclass(name, _class)

    Protected method method to add a nested class to this class.

    name
    name of the class
    _class
    Class object to be added (Class)

    ClbrBase._addglobal

    _addglobal(attr)

    Protected method to add information about global variables.

    attr
    Attribute object to be added (Attribute)

    ClbrBase._addmethod

    _addmethod(name, function)

    Protected method to add information about a method.

    name
    name of method to be added (string)
    function
    Function object to be added

    ClbrBase._getattribute

    _getattribute(name)

    Protected method to retrieve an attribute by name.

    name
    name of the attribute (string)
    Returns:
    the named attribute or None

    ClbrBase._getglobal

    _getglobal(name)

    Protected method to retrieve a global variable by name.

    name
    name of the global variable (string)
    Returns:
    the named global variable or None

    ClbrBase._getmethod

    _getmethod(name)

    Protected method to retrieve a method by name.

    name
    name of the method (string)
    Returns:
    the named method or None


    ClbrVisibilityMixinBase

    Class implementing the base class of all visibility mixins.

    Derived from

    object

    Class Attributes

    None

    Class Methods

    None

    Methods

    isPrivate Public method to check, if the visibility is Private.
    isProtected Public method to check, if the visibility is Protected.
    isPublic Public method to check, if the visibility is Public.
    setPrivate Public method to set the visibility to Private.
    setProtected Public method to set the visibility to Protected.
    setPublic Public method to set the visibility to Public.

    Static Methods

    None

    ClbrVisibilityMixinBase.isPrivate

    isPrivate()

    Public method to check, if the visibility is Private.

    Returns:
    flag indicating Private visibility (boolean)

    ClbrVisibilityMixinBase.isProtected

    isProtected()

    Public method to check, if the visibility is Protected.

    Returns:
    flag indicating Protected visibility (boolean)

    ClbrVisibilityMixinBase.isPublic

    isPublic()

    Public method to check, if the visibility is Public.

    Returns:
    flag indicating Public visibility (boolean)

    ClbrVisibilityMixinBase.setPrivate

    setPrivate()

    Public method to set the visibility to Private.

    ClbrVisibilityMixinBase.setProtected

    setProtected()

    Public method to set the visibility to Protected.

    ClbrVisibilityMixinBase.setPublic

    setPublic()

    Public method to set the visibility to Public.



    Coding

    Class to represent a source coding.

    Derived from

    ClbrBase

    Class Attributes

    None

    Class Methods

    None

    Methods

    Coding Constructor

    Static Methods

    None

    Coding (Constructor)

    Coding(module, file, lineno, coding)

    Constructor

    module
    name of the module containing this module
    file
    filename containing this module
    lineno
    linenumber of the module definition
    coding
    character coding of the source file


    Function

    Class to represent a function or method.

    Derived from

    ClbrBase

    Class Attributes

    Class
    General
    Static

    Class Methods

    None

    Methods

    Function Constructor

    Static Methods

    None

    Function (Constructor)

    Function(module, name, file, lineno, signature = '', separator = ', ', modifierType=General)

    Constructor

    module
    name of the module containing this function
    name
    name of this function
    file
    filename containing this class
    lineno
    linenumber of the class definition
    signature
    parameterlist of the method
    separator
    string separating the parameters
    modifierType
    type of the function


    Module

    Class to represent a module.

    Derived from

    ClbrBase

    Class Attributes

    None

    Class Methods

    None

    Methods

    Module Constructor

    Static Methods

    None

    Module (Constructor)

    Module(module, name, file, lineno)

    Constructor

    module
    name of the module containing this module
    name
    name of this module
    file
    filename containing this module
    lineno
    linenumber of the module definition


    _ClbrBase

    Class implementing the base of all class browser objects.

    Derived from

    object

    Class Attributes

    None

    Class Methods

    None

    Methods

    _ClbrBase Constructor

    Static Methods

    None

    _ClbrBase (Constructor)

    _ClbrBase(module, name, file, lineno)

    Constructor

    module
    name of the module containing this class
    name
    name of this class
    file
    filename containing this object
    lineno
    linenumber of the class definition

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsPySvn.SvnNewProje0000644000175000001440000000031412261331353031241 xustar0000000000000000114 path=eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsPySvn.SvnNewProjectOptionsDialog.html 30 mtime=1388688107.266229443 30 atime=1389081085.057724362 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsPySvn.SvnNewProjectOptionsDialog.0000644000175000001440000001215112261331353034072 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsPySvn.SvnNewProjectOptionsDialog

    eric4.Plugins.VcsPlugins.vcsPySvn.SvnNewProjectOptionsDialog

    Module implementing the Subversion Options Dialog for a new project from the repository.

    Global Attributes

    None

    Classes

    SvnNewProjectOptionsDialog Class implementing the Options Dialog for a new project from the repository.

    Functions

    None


    SvnNewProjectOptionsDialog

    Class implementing the Options Dialog for a new project from the repository.

    Derived from

    QDialog, Ui_SvnNewProjectOptionsDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnNewProjectOptionsDialog Constructor
    getData Public slot to retrieve the data entered into the dialog.
    on_layoutCheckBox_toggled Private slot to handle the change of the layout checkbox.
    on_projectDirButton_clicked Private slot to display a directory selection dialog.
    on_protocolCombo_activated Private slot to switch the status of the directory selection button.
    on_vcsUrlButton_clicked Private slot to display a selection dialog.
    on_vcsUrlEdit_textChanged Private slot to handle changes of the URL.

    Static Methods

    None

    SvnNewProjectOptionsDialog (Constructor)

    SvnNewProjectOptionsDialog(vcs, parent = None)

    Constructor

    vcs
    reference to the version control object
    parent
    parent widget (QWidget)

    SvnNewProjectOptionsDialog.getData

    getData()

    Public slot to retrieve the data entered into the dialog.

    Returns:
    a tuple of a string (project directory) and a dictionary containing the data entered.

    SvnNewProjectOptionsDialog.on_layoutCheckBox_toggled

    on_layoutCheckBox_toggled(checked)

    Private slot to handle the change of the layout checkbox.

    checked
    flag indicating the state of the checkbox (boolean)

    SvnNewProjectOptionsDialog.on_projectDirButton_clicked

    on_projectDirButton_clicked()

    Private slot to display a directory selection dialog.

    SvnNewProjectOptionsDialog.on_protocolCombo_activated

    on_protocolCombo_activated(protocol)

    Private slot to switch the status of the directory selection button.

    SvnNewProjectOptionsDialog.on_vcsUrlButton_clicked

    on_vcsUrlButton_clicked()

    Private slot to display a selection dialog.

    SvnNewProjectOptionsDialog.on_vcsUrlEdit_textChanged

    on_vcsUrlEdit_textChanged(txt)

    Private slot to handle changes of the URL.

    txt
    current text of the line edit (QString)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.TypingCompleters.CompleterPy0000644000175000001440000000013212261331354031326 xustar000000000000000030 mtime=1388688108.656230141 30 atime=1389081085.058724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.TypingCompleters.CompleterPython.html0000644000175000001440000002247312261331354032724 0ustar00detlevusers00000000000000 eric4.QScintilla.TypingCompleters.CompleterPython

    eric4.QScintilla.TypingCompleters.CompleterPython

    Module implementing a typing completer for Python.

    Global Attributes

    None

    Classes

    CompleterPython Class implementing typing completer for Python.

    Functions

    None


    CompleterPython

    Class implementing typing completer for Python.

    Derived from

    CompleterBase

    Class Attributes

    None

    Class Methods

    None

    Methods

    CompleterPython Constructor
    __dedentDefStatement Private method to dedent the line of the def statement to a previous def statement or class statement.
    __dedentElseToIfWhileForTry Private method to dedent the line of the else statement to the last if, while, for or try statement with less (or equal) indentation.
    __dedentExceptToTry Private method to dedent the line of the except statement to the last try statement with less (or equal) indentation.
    __dedentFinallyToTry Private method to dedent the line of the except statement to the last try statement with less (or equal) indentation.
    __dedentToIf Private method to dedent the last line to the last if statement with less (or equal) indentation.
    __inComment Private method to check, if the cursor is inside a comment
    __inDoubleQuotedString Private method to check, if the cursor is within a double quoted string.
    __inSingleQuotedString Private method to check, if the cursor is within a single quoted string.
    __inTripleDoubleQuotedString Private method to check, if the cursor is within a triple double quoted string.
    __inTripleSingleQuotedString Private method to check, if the cursor is within a triple single quoted string.
    __isClassMethod Private method to check, if the user is defining a class method.
    __isClassmethodDef Private method to check, if the user is defing a classmethod (@classmethod) method.
    charAdded Public slot called to handle the user entering a character.
    readSettings Public slot called to reread the configuration parameters.

    Static Methods

    None

    CompleterPython (Constructor)

    CompleterPython(editor, parent = None)

    Constructor

    editor
    reference to the editor object (QScintilla.Editor)
    parent
    reference to the parent object (QObject)

    CompleterPython.__dedentDefStatement

    __dedentDefStatement()

    Private method to dedent the line of the def statement to a previous def statement or class statement.

    CompleterPython.__dedentElseToIfWhileForTry

    __dedentElseToIfWhileForTry()

    Private method to dedent the line of the else statement to the last if, while, for or try statement with less (or equal) indentation.

    CompleterPython.__dedentExceptToTry

    __dedentExceptToTry(hasColon)

    Private method to dedent the line of the except statement to the last try statement with less (or equal) indentation.

    hasColon
    flag indicating the except type (boolean)

    CompleterPython.__dedentFinallyToTry

    __dedentFinallyToTry()

    Private method to dedent the line of the except statement to the last try statement with less (or equal) indentation.

    CompleterPython.__dedentToIf

    __dedentToIf()

    Private method to dedent the last line to the last if statement with less (or equal) indentation.

    CompleterPython.__inComment

    __inComment(line, col)

    Private method to check, if the cursor is inside a comment

    line
    current line (integer)
    col
    current position within line (integer)
    Returns:
    flag indicating, if the cursor is inside a comment (boolean)

    CompleterPython.__inDoubleQuotedString

    __inDoubleQuotedString()

    Private method to check, if the cursor is within a double quoted string.

    Returns:
    flag indicating, if the cursor is inside a double quoted string (boolean)

    CompleterPython.__inSingleQuotedString

    __inSingleQuotedString()

    Private method to check, if the cursor is within a single quoted string.

    Returns:
    flag indicating, if the cursor is inside a single quoted string (boolean)

    CompleterPython.__inTripleDoubleQuotedString

    __inTripleDoubleQuotedString()

    Private method to check, if the cursor is within a triple double quoted string.

    Returns:
    flag indicating, if the cursor is inside a triple double quoted string (boolean)

    CompleterPython.__inTripleSingleQuotedString

    __inTripleSingleQuotedString()

    Private method to check, if the cursor is within a triple single quoted string.

    Returns:
    flag indicating, if the cursor is inside a triple single quoted string (boolean)

    CompleterPython.__isClassMethod

    __isClassMethod()

    Private method to check, if the user is defining a class method.

    Returns:
    flag indicating the definition of a class method (boolean)

    CompleterPython.__isClassmethodDef

    __isClassmethodDef()

    Private method to check, if the user is defing a classmethod (@classmethod) method.

    Returns:
    flag indicating the definition of a classmethod method (boolean)

    CompleterPython.charAdded

    charAdded(charNumber)

    Public slot called to handle the user entering a character.

    charNumber
    value of the character entered (integer)

    CompleterPython.readSettings

    readSettings()

    Public slot called to reread the configuration parameters.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DebugClients.Ruby.DebugClientCapabiliti0000644000175000001440000000013212261331354031150 xustar000000000000000030 mtime=1388688108.293229959 30 atime=1389081085.058724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.DebugClients.Ruby.DebugClientCapabilities.html0000644000175000001440000000216312261331354032177 0ustar00detlevusers00000000000000 eric4.DebugClients.Ruby.DebugClientCapabilities

    eric4.DebugClients.Ruby.DebugClientCapabilities

    File defining the debug clients capabilities.

    Global Attributes

    HasAll
    HasCompleter
    HasCoverage
    HasDebugger
    HasInterpreter
    HasProfiler
    HasShell
    HasUnittest

    Classes

    None

    Modules

    None

    Functions

    None

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.Tasks.html0000644000175000001440000000013212261331354024647 xustar000000000000000030 mtime=1388688108.659230143 30 atime=1389081085.058724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.Tasks.html0000644000175000001440000000207612261331354024406 0ustar00detlevusers00000000000000 eric4.Tasks

    eric4.Tasks

    Package containing modules for the task management tool.

    Modules

    TaskFilterConfigDialog Module implementing the task filter configuration dialog.
    TaskPropertiesDialog Module implementing the task properties dialog.
    TaskViewer Module implementing a task viewer and associated classes.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.Plugins.WizardPlugins.QRegExpWiza0000644000175000001440000000013212261331354031206 xustar000000000000000030 mtime=1388688108.661230144 30 atime=1389081085.058724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.Plugins.WizardPlugins.QRegExpWizard.html0000644000175000001440000000235712261331354032240 0ustar00detlevusers00000000000000 eric4.Plugins.WizardPlugins.QRegExpWizard

    eric4.Plugins.WizardPlugins.QRegExpWizard

    Package implementing the QRegExp wizard.

    Modules

    QRegExpWizardCharactersDialog Module implementing a dialog for entering character classes.
    QRegExpWizardDialog Module implementing the QRegExp wizard dialog.
    QRegExpWizardRepeatDialog Module implementing a dialog for entering repeat counts.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.Plugins.WizardPlugins.PyRegExpWiz0000644000175000001440000000013212261331354031235 xustar000000000000000030 mtime=1388688108.659230143 30 atime=1389081085.059724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.Plugins.WizardPlugins.PyRegExpWizard.html0000644000175000001440000000237612261331354032431 0ustar00detlevusers00000000000000 eric4.Plugins.WizardPlugins.PyRegExpWizard

    eric4.Plugins.WizardPlugins.PyRegExpWizard

    Package implementing the Python re wizard.

    Modules

    PyRegExpWizardCharactersDialog Module implementing a dialog for entering character classes.
    PyRegExpWizardDialog Module implementing the Python re wizard dialog.
    PyRegExpWizardRepeatDialog Module implementing a dialog for entering repeat counts.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.PluginManager.PluginExceptions.html0000644000175000001440000000013212261331351030502 xustar000000000000000030 mtime=1388688105.283228448 30 atime=1389081085.059724363 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.PluginManager.PluginExceptions.html0000644000175000001440000002130612261331351030236 0ustar00detlevusers00000000000000 eric4.PluginManager.PluginExceptions

    eric4.PluginManager.PluginExceptions

    Module implementing the exceptions raised by the plugin system.

    Global Attributes

    None

    Classes

    PluginActivationError Class defining an error raised, when there was an error during plugin activation.
    PluginClassFormatError Class defining an error raised, when the plugin module's class is invalid.
    PluginError Class defining a special error for the plugin classes.
    PluginLoadError Class defining an error raised, when there was an error during plugin loading.
    PluginModuleFormatError Class defining an error raised, when the plugin module is invalid.
    PluginModulesError Class defining an error raised, when no plugin modules were found.
    PluginPathError Class defining an error raised, when the plugin paths were not found and could not be created.

    Functions

    None


    PluginActivationError

    Class defining an error raised, when there was an error during plugin activation.

    Derived from

    PluginError

    Class Attributes

    None

    Class Methods

    None

    Methods

    PluginActivationError Constructor

    Static Methods

    None

    PluginActivationError (Constructor)

    PluginActivationError(name)

    Constructor

    name
    name of the plugin module (string)


    PluginClassFormatError

    Class defining an error raised, when the plugin module's class is invalid.

    Derived from

    PluginError

    Class Attributes

    None

    Class Methods

    None

    Methods

    PluginClassFormatError Constructor

    Static Methods

    None

    PluginClassFormatError (Constructor)

    PluginClassFormatError(name, class_, missing)

    Constructor

    name
    name of the plugin module (string)
    class_
    name of the class not satisfying the requirements (string)
    missing
    description of the missing element (string)


    PluginError

    Class defining a special error for the plugin classes.

    Derived from

    Exception

    Class Attributes

    None

    Class Methods

    None

    Methods

    PluginError Constructor
    __repr__ Private method returning a representation of the exception.
    __str__ Private method returning a string representation of the exception.

    Static Methods

    None

    PluginError (Constructor)

    PluginError()

    Constructor

    PluginError.__repr__

    __repr__()

    Private method returning a representation of the exception.

    Returns:
    string representing the error message

    PluginError.__str__

    __str__()

    Private method returning a string representation of the exception.

    Returns:
    string representing the error message


    PluginLoadError

    Class defining an error raised, when there was an error during plugin loading.

    Derived from

    PluginError

    Class Attributes

    None

    Class Methods

    None

    Methods

    PluginLoadError Constructor

    Static Methods

    None

    PluginLoadError (Constructor)

    PluginLoadError(name)

    Constructor

    name
    name of the plugin module (string)


    PluginModuleFormatError

    Class defining an error raised, when the plugin module is invalid.

    Derived from

    PluginError

    Class Attributes

    None

    Class Methods

    None

    Methods

    PluginModuleFormatError Constructor

    Static Methods

    None

    PluginModuleFormatError (Constructor)

    PluginModuleFormatError(name, missing)

    Constructor

    name
    name of the plugin module (string)
    missing
    description of the missing element (string)


    PluginModulesError

    Class defining an error raised, when no plugin modules were found.

    Derived from

    PluginError

    Class Attributes

    None

    Class Methods

    None

    Methods

    PluginModulesError Constructor

    Static Methods

    None

    PluginModulesError (Constructor)

    PluginModulesError()

    Constructor



    PluginPathError

    Class defining an error raised, when the plugin paths were not found and could not be created.

    Derived from

    PluginError

    Class Attributes

    None

    Class Methods

    None

    Methods

    PluginPathError Constructor

    Static Methods

    None

    PluginPathError (Constructor)

    PluginPathError(msg = None)

    Constructor

    msg
    message to be used by the exception (string or QString)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.PluginManager.PluginDetailsDialog.html0000644000175000001440000000013212261331351031066 xustar000000000000000030 mtime=1388688105.243228428 30 atime=1389081085.060724362 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.PluginManager.PluginDetailsDialog.html0000644000175000001440000000550712261331351030627 0ustar00detlevusers00000000000000 eric4.PluginManager.PluginDetailsDialog

    eric4.PluginManager.PluginDetailsDialog

    Module implementing the Plugin Details Dialog.

    Global Attributes

    None

    Classes

    PluginDetailsDialog Class implementing the Plugin Details Dialog.

    Functions

    None


    PluginDetailsDialog

    Class implementing the Plugin Details Dialog.

    Derived from

    QDialog, Ui_PluginDetailsDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    PluginDetailsDialog Constructor
    on_activeCheckBox_clicked Private slot called, when the activeCheckBox was clicked.
    on_autoactivateCheckBox_clicked Private slot called, when the autoactivateCheckBox was clicked.

    Static Methods

    None

    PluginDetailsDialog (Constructor)

    PluginDetailsDialog(details, parent = None)

    Constructor

    details
    dictionary containing the info to be displayed
    parent
    parent of this dialog (QWidget)

    PluginDetailsDialog.on_activeCheckBox_clicked

    on_activeCheckBox_clicked()

    Private slot called, when the activeCheckBox was clicked.

    PluginDetailsDialog.on_autoactivateCheckBox_clicked

    on_autoactivateCheckBox_clicked()

    Private slot called, when the autoactivateCheckBox was clicked.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsPySvn.SvnBlameDia0000644000175000001440000000013212261331353031144 xustar000000000000000030 mtime=1388688107.207229413 30 atime=1389081085.060724362 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsPySvn.SvnBlameDialog.html0000644000175000001440000001076312261331353032352 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsPySvn.SvnBlameDialog

    eric4.Plugins.VcsPlugins.vcsPySvn.SvnBlameDialog

    Module implementing a dialog to show the output of the svn blame command.

    Global Attributes

    None

    Classes

    SvnBlameDialog Class implementing a dialog to show the output of the svn blame command.

    Functions

    None


    SvnBlameDialog

    Class implementing a dialog to show the output of the svn blame command.

    Derived from

    QDialog, SvnDialogMixin, Ui_SvnBlameDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnBlameDialog Constructor
    __finish Private slot called when the process finished or the user pressed the button.
    __generateItem Private method to generate a tag item in the taglist.
    __resizeColumns Private method to resize the list columns.
    __showError Private slot to show an error message.
    on_buttonBox_clicked Private slot called by a button of the button box clicked.
    start Public slot to start the svn status command.

    Static Methods

    None

    SvnBlameDialog (Constructor)

    SvnBlameDialog(vcs, parent = None)

    Constructor

    vcs
    reference to the vcs object
    parent
    parent widget (QWidget)

    SvnBlameDialog.__finish

    __finish()

    Private slot called when the process finished or the user pressed the button.

    SvnBlameDialog.__generateItem

    __generateItem(revision, author, lineno, text)

    Private method to generate a tag item in the taglist.

    revision
    revision string (integer)
    author
    author of the tag (string or QString)
    lineno
    line number (integer)
    text
    text of the line (string or QString)

    SvnBlameDialog.__resizeColumns

    __resizeColumns()

    Private method to resize the list columns.

    SvnBlameDialog.__showError

    __showError(msg)

    Private slot to show an error message.

    msg
    error message to show (string or QString)

    SvnBlameDialog.on_buttonBox_clicked

    on_buttonBox_clicked(button)

    Private slot called by a button of the button box clicked.

    button
    button that was clicked (QAbstractButton)

    SvnBlameDialog.start

    start(fn)

    Public slot to start the svn status command.

    fn
    filename to show the log for (string)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.Lexers.LexerFortran77.html0000644000175000001440000000013212261331354030551 xustar000000000000000030 mtime=1388688108.615230121 30 atime=1389081085.060724362 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.Lexers.LexerFortran77.html0000644000175000001440000001002612261331354030302 0ustar00detlevusers00000000000000 eric4.QScintilla.Lexers.LexerFortran77

    eric4.QScintilla.Lexers.LexerFortran77

    Module implementing a Fortran lexer with some additional methods.

    Global Attributes

    None

    Classes

    LexerFortran77 Subclass to implement some additional lexer dependant methods.

    Functions

    None


    LexerFortran77

    Subclass to implement some additional lexer dependant methods.

    Derived from

    QsciLexerFortran77, Lexer

    Class Attributes

    None

    Class Methods

    None

    Methods

    LexerFortran77 Constructor
    autoCompletionWordSeparators Public method to return the list of separators for autocompletion.
    defaultKeywords Public method to get the default keywords.
    initProperties Public slot to initialize the properties.
    isCommentStyle Public method to check, if a style is a comment style.
    isStringStyle Public method to check, if a style is a string style.

    Static Methods

    None

    LexerFortran77 (Constructor)

    LexerFortran77(parent = None)

    Constructor

    parent
    parent widget of this lexer

    LexerFortran77.autoCompletionWordSeparators

    autoCompletionWordSeparators()

    Public method to return the list of separators for autocompletion.

    Returns:
    list of separators (QStringList)

    LexerFortran77.defaultKeywords

    defaultKeywords(kwSet)

    Public method to get the default keywords.

    kwSet
    number of the keyword set (integer)
    Returns:
    string giving the keywords (string) or None

    LexerFortran77.initProperties

    initProperties()

    Public slot to initialize the properties.

    LexerFortran77.isCommentStyle

    isCommentStyle(style)

    Public method to check, if a style is a comment style.

    Returns:
    flag indicating a comment style (boolean)

    LexerFortran77.isStringStyle

    isStringStyle(style)

    Public method to check, if a style is a string style.

    Returns:
    flag indicating a string style (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.Lexers.LexerBash.html0000644000175000001440000000013212261331354027635 xustar000000000000000030 mtime=1388688108.608230117 30 atime=1389081085.060724362 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.Lexers.LexerBash.html0000644000175000001440000000653512261331354027400 0ustar00detlevusers00000000000000 eric4.QScintilla.Lexers.LexerBash

    eric4.QScintilla.Lexers.LexerBash

    Module implementing a Bash lexer with some additional methods.

    Global Attributes

    None

    Classes

    LexerBash Subclass to implement some additional lexer dependant methods.

    Functions

    None


    LexerBash

    Subclass to implement some additional lexer dependant methods.

    Derived from

    QsciLexerBash, Lexer

    Class Attributes

    None

    Class Methods

    None

    Methods

    LexerBash Constructor
    defaultKeywords Public method to get the default keywords.
    initProperties Public slot to initialize the properties.
    isCommentStyle Public method to check, if a style is a comment style.
    isStringStyle Public method to check, if a style is a string style.

    Static Methods

    None

    LexerBash (Constructor)

    LexerBash(parent = None)

    Constructor

    parent
    parent widget of this lexer

    LexerBash.defaultKeywords

    defaultKeywords(kwSet)

    Public method to get the default keywords.

    kwSet
    number of the keyword set (integer)
    Returns:
    string giving the keywords (string) or None

    LexerBash.initProperties

    initProperties()

    Public slot to initialize the properties.

    LexerBash.isCommentStyle

    isCommentStyle(style)

    Public method to check, if a style is a comment style.

    Returns:
    flag indicating a comment style (boolean)

    LexerBash.isStringStyle

    isStringStyle(style)

    Public method to check, if a style is a string style.

    Returns:
    flag indicating a string style (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Utilities.ModuleParser.html0000644000175000001440000000013212261331351027026 xustar000000000000000030 mtime=1388688105.680228647 30 atime=1389081085.060724362 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Utilities.ModuleParser.html0000644000175000001440000006066412261331351026574 0ustar00detlevusers00000000000000 eric4.Utilities.ModuleParser

    eric4.Utilities.ModuleParser

    Parse a Python module file.

    This module is based on pyclbr.py as of Python 2.2.2

    BUGS (from pyclbr.py)

    • Code that doesn't pass tabnanny or python -t will confuse it, unless you set the module TABWIDTH variable (default 8) to the correct tab width for the file.

    Global Attributes

    PTL_SOURCE
    RB_SOURCE
    SUPPORTED_TYPES
    TABWIDTH
    __all__
    _commentsub
    _hashsub
    _modules
    _py_getnext
    _rb_getnext

    Classes

    Attribute Class to represent a Python function or method.
    Class Class to represent a Python class.
    Function Class to represent a Python function or method.
    Module Class to represent a Python module.
    RbModule Class to represent a Ruby module.
    VisibilityBase Class implementing the visibility aspect of all objects.

    Functions

    _indent Protected function to determine the indent width of a whitespace string.
    find_module Module function to extend the Python module finding mechanism.
    readModule Function to read a module file and parse it.
    resetParsedModule Module function to clear one module from the list of parsed modules.
    resetParsedModules Module function to reset the list of modules already parsed.


    Attribute

    Class to represent a Python function or method.

    Derived from

    VisibilityBase

    Class Attributes

    None

    Class Methods

    None

    Methods

    Attribute Constructor

    Static Methods

    None

    Attribute (Constructor)

    Attribute(module, name, file, lineno)

    Constructor

    module
    name of module containing this function (string)
    name
    name of the function (string)
    file
    name of file containing this function (string)
    lineno
    linenumber of the function definition (integer)


    Class

    Class to represent a Python class.

    Derived from

    VisibilityBase

    Class Attributes

    None

    Class Methods

    None

    Methods

    Class Constructor
    addAttribute Public method to add information about attributes.
    addDescription Public method to store the class docstring.
    addGlobal Public method to add information about global (class) variables.
    addMethod Public method to add information about a method.
    getAttribute Public method to retrieve an attribute by name.
    getMethod Public method to retrieve a method by name.
    setEndLine Public method to record the number of the last line of a class.

    Static Methods

    None

    Class (Constructor)

    Class(module, name, super, file, lineno)

    Constructor

    module
    name of module containing this class (string)
    name
    name of the class (string)
    super
    list of classnames this class is inherited from (list of strings)
    file
    name of file containing this class (string)
    lineno
    linenumber of the class definition (integer)

    Class.addAttribute

    addAttribute(name, attr)

    Public method to add information about attributes.

    name
    name of the attribute to add (string)
    attr
    Attribute object to be added

    Class.addDescription

    addDescription(description)

    Public method to store the class docstring.

    description
    the docstring to be stored (string)

    Class.addGlobal

    addGlobal(name, attr)

    Public method to add information about global (class) variables.

    name
    name of the global to add (string)
    attr
    Attribute object to be added

    Class.addMethod

    addMethod(name, function)

    Public method to add information about a method.

    name
    name of method to be added (string)
    function
    Function object to be added

    Class.getAttribute

    getAttribute(name)

    Public method to retrieve an attribute by name.

    name
    name of the attribute (string)
    Returns:
    the named attribute or None

    Class.getMethod

    getMethod(name)

    Public method to retrieve a method by name.

    name
    name of the method (string)
    Returns:
    the named method or None

    Class.setEndLine

    setEndLine(endLineNo)

    Public method to record the number of the last line of a class.

    endLineNo
    number of the last line (integer)


    Function

    Class to represent a Python function or method.

    Derived from

    VisibilityBase

    Class Attributes

    Class
    General
    Static

    Class Methods

    None

    Methods

    Function Constructor
    addDescription Public method to store the functions docstring.

    Static Methods

    None

    Function (Constructor)

    Function(module, name, file, lineno, signature = '', pyqtSignature = None, modifierType=General)

    Constructor

    module
    name of module containing this function (string)
    name
    name of the function (string)
    file
    name of file containing this function (string)
    lineno
    linenumber of the function definition (integer)
    signature
    the functions call signature (string)
    pyqtSignature
    the functions PyQt signature (string)
    modifierType
    type of the function

    Function.addDescription

    addDescription(description)

    Public method to store the functions docstring.

    description
    the docstring to be stored (string)


    Module

    Class to represent a Python module.

    Derived from

    object

    Class Attributes

    None

    Class Methods

    None

    Methods

    Module Constructor
    __py_scan Private method to scan the source text of a Python module and retrieve the relevant information.
    __py_setVisibility Private method to set the visibility of an object.
    __rb_scan Private method to scan the source text of a Python module and retrieve the relevant information.
    addClass Public method to add information about a class.
    addDescription Protected method to store the modules docstring.
    addFunction Public method to add information about a function.
    addGlobal Public method to add information about global variables.
    addModule Public method to add information about a Ruby module.
    addPathToHierarchy Public method to put the exhausted path into the result dictionary.
    assembleHierarchy Public method to assemble the inheritance hierarchy.
    createHierarchy Public method to build the inheritance hierarchy for all classes of this module.
    getFileName Public method to retrieve the modules filename.
    getName Public method to retrieve the modules name.
    getType Public method to get the type of the module's source.
    scan Public method to scan the source text and retrieve the relevant information.

    Static Methods

    None

    Module (Constructor)

    Module(name, file=None, type=None)

    Constructor

    name
    name of this module (string)
    file
    filename of file containing this module (string)
    type
    type of this module

    Module.__py_scan

    __py_scan(src)

    Private method to scan the source text of a Python module and retrieve the relevant information.

    src
    the source text to be scanned (string)

    Module.__py_setVisibility

    __py_setVisibility(object)

    Private method to set the visibility of an object.

    object
    reference to the object (Attribute, Class or Function)

    Module.__rb_scan

    __rb_scan(src)

    Private method to scan the source text of a Python module and retrieve the relevant information.

    src
    the source text to be scanned (string)

    Module.addClass

    addClass(name, _class)

    Public method to add information about a class.

    name
    name of class to be added (string)
    _class
    Class object to be added

    Module.addDescription

    addDescription(description)

    Protected method to store the modules docstring.

    description
    the docstring to be stored (string)

    Module.addFunction

    addFunction(name, function)

    Public method to add information about a function.

    name
    name of function to be added (string)
    function
    Function object to be added

    Module.addGlobal

    addGlobal(name, attr)

    Public method to add information about global variables.

    name
    name of the global to add (string)
    attr
    Attribute object to be added

    Module.addModule

    addModule(name, module)

    Public method to add information about a Ruby module.

    name
    name of module to be added (string)
    module
    Module object to be added

    Module.addPathToHierarchy

    addPathToHierarchy(path, result, fn)

    Public method to put the exhausted path into the result dictionary.

    path
    the exhausted path of classes
    result
    the result dictionary
    fn
    function to call for classe that are already part of the result dictionary

    Module.assembleHierarchy

    assembleHierarchy(name, classes, path, result)

    Public method to assemble the inheritance hierarchy.

    This method will traverse the class hierarchy, from a given class and build up a nested dictionary of super-classes. The result is intended to be inverted, i.e. the highest level are the super classes.

    This code is borrowed from Boa Constructor.

    name
    name of class to assemble hierarchy (string)
    classes
    A dictionary of classes to look in.
    path
    result
    The resultant hierarchy

    Module.createHierarchy

    createHierarchy()

    Public method to build the inheritance hierarchy for all classes of this module.

    Returns:
    A dictionary with inheritance hierarchies.

    Module.getFileName

    getFileName()

    Public method to retrieve the modules filename.

    Returns:
    module filename (string)

    Module.getName

    getName()

    Public method to retrieve the modules name.

    Returns:
    module name (string)

    Module.getType

    getType()

    Public method to get the type of the module's source.

    Returns:
    type of the modules's source (string)

    Module.scan

    scan(src)

    Public method to scan the source text and retrieve the relevant information.

    src
    the source text to be scanned (string)


    RbModule

    Class to represent a Ruby module.

    Derived from

    Class

    Class Attributes

    None

    Class Methods

    None

    Methods

    RbModule Constructor
    addClass Public method to add information about a class.

    Static Methods

    None

    RbModule (Constructor)

    RbModule(module, name, file, lineno)

    Constructor

    module
    name of module containing this class (string)
    name
    name of the class (string)
    file
    name of file containing this class (string)
    lineno
    linenumber of the class definition (integer)

    RbModule.addClass

    addClass(name, _class)

    Public method to add information about a class.

    name
    name of class to be added (string)
    _class
    Class object to be added


    VisibilityBase

    Class implementing the visibility aspect of all objects.

    Derived from

    object

    Class Attributes

    None

    Class Methods

    None

    Methods

    isPrivate Public method to check, if the visibility is Private.
    isProtected Public method to check, if the visibility is Protected.
    isPublic Public method to check, if the visibility is Public.
    setPrivate Public method to set the visibility to Private.
    setProtected Public method to set the visibility to Protected.
    setPublic Public method to set the visibility to Public.

    Static Methods

    None

    VisibilityBase.isPrivate

    isPrivate()

    Public method to check, if the visibility is Private.

    Returns:
    flag indicating Private visibility (boolean)

    VisibilityBase.isProtected

    isProtected()

    Public method to check, if the visibility is Protected.

    Returns:
    flag indicating Protected visibility (boolean)

    VisibilityBase.isPublic

    isPublic()

    Public method to check, if the visibility is Public.

    Returns:
    flag indicating Public visibility (boolean)

    VisibilityBase.setPrivate

    setPrivate()

    Public method to set the visibility to Private.

    VisibilityBase.setProtected

    setProtected()

    Public method to set the visibility to Protected.

    VisibilityBase.setPublic

    setPublic()

    Public method to set the visibility to Public.



    _indent

    _indent(ws)

    Protected function to determine the indent width of a whitespace string.

    ws
    The whitespace string to be cheked. (string)
    Returns:
    Length of the whitespace string after tab expansion.


    find_module

    find_module(name, path, extensions)

    Module function to extend the Python module finding mechanism.

    This function searches for files in the given path. If the filename doesn't have an extension or an extension of .py, the normal search implemented in the imp module is used. For all other supported files only path is searched.

    name
    filename or modulename to search for (string)
    path
    search path (list of strings)
    extensions
    list of extensions, which should be considered valid source file extensions (list of strings)
    Returns:
    tuple of the open file, pathname and description. Description is a tuple of file suffix, file mode and file type)
    Raises ImportError:
    The file or module wasn't found.


    readModule

    readModule(module, path = [], inpackage = False, basename = "", extensions = None, caching = True)

    Function to read a module file and parse it.

    The module is searched in path and sys.path, read and parsed. If the module was parsed before, the information is taken from a cache in order to speed up processing.

    module
    Name of the module to be parsed (string)
    path
    Searchpath for the module (list of strings)
    inpackage
    Flag indicating that module is inside a package (boolean)
    basename
    a path basename. This basename is deleted from the filename of the module file to be read. (string)
    extensions
    list of extensions, which should be considered valid source file extensions (list of strings)
    caching
    flag indicating that the parsed module should be cached (boolean)
    Returns:
    reference to a Module object containing the parsed module information (Module)


    resetParsedModule

    resetParsedModule(module, basename = "")

    Module function to clear one module from the list of parsed modules.

    module
    Name of the module to be parsed (string)
    basename
    a path basename. This basename is deleted from the filename of the module file to be cleared. (string)


    resetParsedModules

    resetParsedModules()

    Module function to reset the list of modules already parsed.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.E4Gui.E4LineEdit.html0000644000175000001440000000013212261331350025253 xustar000000000000000030 mtime=1388688104.355227982 30 atime=1389081085.061724362 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.E4Gui.E4LineEdit.html0000644000175000001440000000571212261331350025012 0ustar00detlevusers00000000000000 eric4.E4Gui.E4LineEdit

    eric4.E4Gui.E4LineEdit

    Module implementing specialized line edits.

    Global Attributes

    None

    Classes

    E4LineEdit Class implementing a line edit widget showing some inactive text.

    Functions

    None


    E4LineEdit

    Class implementing a line edit widget showing some inactive text.

    Derived from

    QLineEdit

    Class Attributes

    None

    Class Methods

    None

    Methods

    E4LineEdit Constructor
    inactiveText Public method to get the inactive text.
    paintEvent Protected method handling a paint event.
    setInactiveText Public method to set the inactive text.

    Static Methods

    None

    E4LineEdit (Constructor)

    E4LineEdit(parent = None, inactiveText = QString())

    Constructor

    parent
    reference to the parent widget (QWidget)
    inactiveText
    text to be shown on inactivity (string or QString)

    E4LineEdit.inactiveText

    inactiveText()

    Public method to get the inactive text.

    return inactive text (QString)

    E4LineEdit.paintEvent

    paintEvent(evt)

    Protected method handling a paint event.

    evt
    reference to the paint event (QPaintEvent)

    E4LineEdit.setInactiveText

    setInactiveText(inactiveText)

    Public method to set the inactive text.

    inactiveText
    text to be shown on inactivity (string or QString)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DebugClients.Python.DCTestResult.html0000644000175000001440000000013212261331354030631 xustar000000000000000030 mtime=1388688108.151229888 30 atime=1389081085.061724362 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.DebugClients.Python.DCTestResult.html0000644000175000001440000000650012261331354030364 0ustar00detlevusers00000000000000 eric4.DebugClients.Python.DCTestResult

    eric4.DebugClients.Python.DCTestResult

    Module implementing a TestResult derivative for the eric4 debugger.

    Global Attributes

    None

    Classes

    DCTestResult A TestResult derivative to work with eric4's debug client.

    Functions

    None


    DCTestResult

    A TestResult derivative to work with eric4's debug client.

    For more details see unittest.py of the standard python distribution.

    Derived from

    TestResult

    Class Attributes

    None

    Class Methods

    None

    Methods

    DCTestResult Constructor
    addError Method called if a test errored.
    addFailure Method called if a test failed.
    startTest Method called at the start of a test.
    stopTest Method called at the end of a test.

    Static Methods

    None

    DCTestResult (Constructor)

    DCTestResult(parent)

    Constructor

    parent
    The parent widget.

    DCTestResult.addError

    addError(test, err)

    Method called if a test errored.

    test
    Reference to the test object
    err
    The error traceback

    DCTestResult.addFailure

    addFailure(test, err)

    Method called if a test failed.

    test
    Reference to the test object
    err
    The error traceback

    DCTestResult.startTest

    startTest(test)

    Method called at the start of a test.

    test
    Reference to the test object

    DCTestResult.stopTest

    stopTest(test)

    Method called at the end of a test.

    test
    Reference to the test object

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.E4Graphics.E4GraphicsView.html0000644000175000001440000000013212261331350027165 xustar000000000000000030 mtime=1388688104.896228253 30 atime=1389081085.061724362 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.E4Graphics.E4GraphicsView.html0000644000175000001440000001741512261331350026727 0ustar00detlevusers00000000000000 eric4.E4Graphics.E4GraphicsView

    eric4.E4Graphics.E4GraphicsView

    Module implementing a canvas view class.

    Global Attributes

    None

    Classes

    E4GraphicsView Class implementing a graphics view.

    Functions

    None


    E4GraphicsView

    Class implementing a graphics view.

    Derived from

    QGraphicsView

    Class Attributes

    None

    Class Methods

    None

    Methods

    E4GraphicsView Constructor
    __getDiagram Private method to retrieve the diagram from the scene fitting it in the minimum rectangle.
    _getDiagramRect Protected method to calculate the minimum rectangle fitting the diagram.
    _getDiagramSize Protected method to calculate the minimum size fitting the diagram.
    filteredItems Public method to filter a list of items.
    printDiagram Public method to print the diagram.
    resizeScene Public method to resize the scene.
    saveImage Public method to save the scene to a file.
    setSceneSize Public method to set the scene size.
    setZoom Public method to set the zoom factor.
    zoom Public method to get the current zoom factor.
    zoomIn Public method to zoom in.
    zoomOut Public method to zoom out.
    zoomReset Public method to handle the reset zoom context menu entry.

    Static Methods

    None

    E4GraphicsView (Constructor)

    E4GraphicsView(scene, parent = None)

    Constructor

    scene
    reference to the scene object (QGraphicsScene)
    parent
    parent widget (QWidget)

    E4GraphicsView.__getDiagram

    __getDiagram(rect, format = "PNG", filename = None)

    Private method to retrieve the diagram from the scene fitting it in the minimum rectangle.

    rect
    minimum rectangle fitting the diagram (QRectF)
    format
    format for the image file (string or QString)
    filename
    name of the file for non pixmaps (string or QString)
    Returns:
    diagram pixmap to receive the diagram (QPixmap)

    E4GraphicsView._getDiagramRect

    _getDiagramRect(border = 0)

    Protected method to calculate the minimum rectangle fitting the diagram.

    border
    border width to include in the calculation (integer)
    Returns:
    the minimum rectangle (QRectF)

    E4GraphicsView._getDiagramSize

    _getDiagramSize(border = 0)

    Protected method to calculate the minimum size fitting the diagram.

    border
    border width to include in the calculation (integer)
    Returns:
    the minimum size (QSizeF)

    E4GraphicsView.filteredItems

    filteredItems(items)

    Public method to filter a list of items.

    items
    list of items as returned by the scene object (QGraphicsItem)
    Returns:
    list of interesting collision items (QGraphicsItem)

    E4GraphicsView.printDiagram

    printDiagram(printer, diagramName = "")

    Public method to print the diagram.

    printer
    reference to a ready configured printer object (QPrinter)
    diagramName
    name of the diagram (string or QString)

    E4GraphicsView.resizeScene

    resizeScene(amount, isWidth = True)

    Public method to resize the scene.

    isWidth
    flag indicating width is to be resized (boolean)
    amount
    size increment (integer)

    E4GraphicsView.saveImage

    saveImage(filename, format = "PNG")

    Public method to save the scene to a file.

    filename
    name of the file to write the image to (string or QString)
    format
    format for the image file (string or QString)
    Returns:
    flag indicating success (boolean)

    E4GraphicsView.setSceneSize

    setSceneSize(width, height)

    Public method to set the scene size.

    width
    width for the scene (float)
    height
    height for the scene (float)

    E4GraphicsView.setZoom

    setZoom(zoomFactor)

    Public method to set the zoom factor.

    zoomFactor
    new zoom factor (float)

    E4GraphicsView.zoom

    zoom()

    Public method to get the current zoom factor.

    Returns:
    current zoom factor (float)

    E4GraphicsView.zoomIn

    zoomIn()

    Public method to zoom in.

    E4GraphicsView.zoomOut

    zoomOut()

    Public method to zoom out.

    E4GraphicsView.zoomReset

    zoomReset()

    Public method to handle the reset zoom context menu entry.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ConfigurationPages.Template0000644000175000001440000000013212261331353031312 xustar000000000000000030 mtime=1388688107.515229568 30 atime=1389081085.062724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.TemplatesPage.html0000644000175000001440000000452012261331353032770 0ustar00detlevusers00000000000000 eric4.Preferences.ConfigurationPages.TemplatesPage

    eric4.Preferences.ConfigurationPages.TemplatesPage

    Module implementing the Templates configuration page.

    Global Attributes

    None

    Classes

    TemplatesPage Class implementing the Templates configuration page.

    Functions

    create Module function to create the configuration page.


    TemplatesPage

    Class implementing the Templates configuration page.

    Derived from

    ConfigurationPageBase, Ui_TemplatesPage

    Class Attributes

    None

    Class Methods

    None

    Methods

    TemplatesPage Constructor
    save Public slot to save the Templates configuration.

    Static Methods

    None

    TemplatesPage (Constructor)

    TemplatesPage()

    Constructor

    TemplatesPage.save

    save()

    Public slot to save the Templates configuration.



    create

    create(dlg)

    Module function to create the configuration page.

    dlg
    reference to the configuration dialog

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Graphics.ZoomDialog.html0000644000175000001440000000013212261331350026254 xustar000000000000000030 mtime=1388688104.812228211 30 atime=1389081085.062724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Graphics.ZoomDialog.html0000644000175000001440000000432612261331350026013 0ustar00detlevusers00000000000000 eric4.Graphics.ZoomDialog

    eric4.Graphics.ZoomDialog

    Module implementing a zoom dialog for a graphics canvas.

    Global Attributes

    None

    Classes

    ZoomDialog Class implementing a zoom dialog for a graphics canvas.

    Functions

    None


    ZoomDialog

    Class implementing a zoom dialog for a graphics canvas.

    Derived from

    QDialog, Ui_ZoomDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    ZoomDialog Constructor
    getZoomSize Public method to retrieve the zoom size.

    Static Methods

    None

    ZoomDialog (Constructor)

    ZoomDialog(zoom, parent = None, name = None)

    Constructor

    zoom
    zoom factor to show in the spinbox (float)
    parent
    parent widget of this dialog (QWidget)
    name
    name of this dialog (string or QString)

    ZoomDialog.getZoomSize

    getZoomSize()

    Public method to retrieve the zoom size.

    Returns:
    zoom size (double)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ConfigurationPages.EditorCa0000644000175000001440000000032112261331353031231 xustar0000000000000000119 path=eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.EditorCalltipsQScintillaPage.html 30 mtime=1388688107.414229518 30 atime=1389081085.062724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.EditorCalltipsQScintilla0000644000175000001440000000520612261331353034202 0ustar00detlevusers00000000000000 eric4.Preferences.ConfigurationPages.EditorCalltipsQScintillaPage

    eric4.Preferences.ConfigurationPages.EditorCalltipsQScintillaPage

    Module implementing the QScintilla Calltips configuration page.

    Global Attributes

    None

    Classes

    EditorCalltipsQScintillaPage Class implementing the QScintilla Calltips configuration page.

    Functions

    create Module function to create the configuration page.


    EditorCalltipsQScintillaPage

    Class implementing the QScintilla Calltips configuration page.

    Derived from

    ConfigurationPageBase, Ui_EditorCalltipsQScintillaPage

    Class Attributes

    None

    Class Methods

    None

    Methods

    EditorCalltipsQScintillaPage Constructor
    save Public slot to save the EditorCalltips configuration.

    Static Methods

    None

    EditorCalltipsQScintillaPage (Constructor)

    EditorCalltipsQScintillaPage()

    Constructor

    EditorCalltipsQScintillaPage.save

    save()

    Public slot to save the EditorCalltips configuration.



    create

    create(dlg)

    Module function to create the configuration page.

    dlg
    reference to the configuration dialog

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.Lexers.LexerPOV.html0000644000175000001440000000013112261331354027423 xustar000000000000000030 mtime=1388688108.496230061 29 atime=1389081085.06372436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.Lexers.LexerPOV.html0000644000175000001440000000647712261331354027174 0ustar00detlevusers00000000000000 eric4.QScintilla.Lexers.LexerPOV

    eric4.QScintilla.Lexers.LexerPOV

    Module implementing a Povray lexer with some additional methods.

    Global Attributes

    None

    Classes

    LexerPOV Subclass to implement some additional lexer dependant methods.

    Functions

    None


    LexerPOV

    Subclass to implement some additional lexer dependant methods.

    Derived from

    QsciLexerPOV, Lexer

    Class Attributes

    None

    Class Methods

    None

    Methods

    LexerPOV Constructor
    defaultKeywords Public method to get the default keywords.
    initProperties Public slot to initialize the properties.
    isCommentStyle Public method to check, if a style is a comment style.
    isStringStyle Public method to check, if a style is a string style.

    Static Methods

    None

    LexerPOV (Constructor)

    LexerPOV(parent=None)

    Constructor

    parent
    parent widget of this lexer

    LexerPOV.defaultKeywords

    defaultKeywords(kwSet)

    Public method to get the default keywords.

    kwSet
    number of the keyword set (integer)
    Returns:
    string giving the keywords (string) or None

    LexerPOV.initProperties

    initProperties()

    Public slot to initialize the properties.

    LexerPOV.isCommentStyle

    isCommentStyle(style)

    Public method to check, if a style is a comment style.

    Returns:
    flag indicating a comment style (boolean)

    LexerPOV.isStringStyle

    isStringStyle(style)

    Public method to check, if a style is a string style.

    Returns:
    flag indicating a string style (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.Helpviewer.Network.html0000644000175000001440000000013112261331354027323 xustar000000000000000030 mtime=1388688108.659230143 29 atime=1389081085.06372436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.Helpviewer.Network.html0000644000175000001440000000456212261331354027065 0ustar00detlevusers00000000000000 eric4.Helpviewer.Network

    eric4.Helpviewer.Network

    Package containing network related modules.

    Modules

    AboutAccessHandler Module implementing a scheme access handler for about schemes.
    EmptyNetworkReply Module implementing a network reply class for an empty reply (i.e.
    NetworkAccessManager Module implementing a QNetworkAccessManager subclass.
    NetworkAccessManagerProxy Module implementing a network access manager proxy for web pages.
    NetworkDiskCache Module implementing a disk cache respecting privacy.
    NetworkProtocolUnknownErrorReply Module implementing a QNetworkReply subclass reporting an unknown protocol error.
    NetworkReply Module implementing a network reply object for special data.
    PyrcAccessHandler Module implementing a scheme access handler for Python resources.
    QtHelpAccessHandler Module implementing a scheme access handler for QtHelp.
    SchemeAccessHandler Module implementing the base class for specific scheme access handlers.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.DebugClients.html0000644000175000001440000000013112261331354026131 xustar000000000000000030 mtime=1388688108.660230143 29 atime=1389081085.06372436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.DebugClients.html0000644000175000001440000000200612261331354025662 0ustar00detlevusers00000000000000 eric4.DebugClients

    eric4.DebugClients

    Package implementing debug clients for various languages.

    Packages

    Python Package implementing the Python debugger
    Python3 Package implementing the Python3 debugger
    Ruby Package implementing the Ruby debugger.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.Plugins.WizardPlugins.FileDialogW0000644000175000001440000000013112261331354031165 xustar000000000000000030 mtime=1388688108.658230142 29 atime=1389081085.06372436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.Plugins.WizardPlugins.FileDialogWizard.html0000644000175000001440000000155612261331354032724 0ustar00detlevusers00000000000000 eric4.Plugins.WizardPlugins.FileDialogWizard

    eric4.Plugins.WizardPlugins.FileDialogWizard

    Package implementing the file dialog wizard.

    Modules

    FileDialogWizardDialog Module implementing the file dialog wizard dialog.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.DocumentationPlugins.Ericdoc.Er0000644000175000001440000000031412261331352031221 xustar0000000000000000116 path=eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.DocumentationPlugins.Ericdoc.EricdocConfigDialog.html 29 mtime=1388688106.66222914 29 atime=1389081085.06372436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.DocumentationPlugins.Ericdoc.EricdocConfigDialo0000644000175000001440000003306312261331352034057 0ustar00detlevusers00000000000000 eric4.Plugins.DocumentationPlugins.Ericdoc.EricdocConfigDialog

    eric4.Plugins.DocumentationPlugins.Ericdoc.EricdocConfigDialog

    Module implementing a dialog to enter the parameters for eric4_doc.

    Global Attributes

    None

    Classes

    EricdocConfigDialog Class implementing a dialog to enter the parameters for eric4_doc.

    Functions

    None


    EricdocConfigDialog

    Class implementing a dialog to enter the parameters for eric4_doc.

    Derived from

    QDialog, Ui_EricdocConfigDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    EricdocConfigDialog Constructor
    __checkQtHelpOptions Private slot to check the QtHelp options and set the ok button accordingly.
    __initializeDefaults Private method to set the default values.
    __selectColor Private method to select a color.
    accept Protected slot called by the Ok button.
    generateParameters Public method that generates the commandline parameters.
    on_addButton_clicked Private slot to add the directory displayed to the listview.
    on_bodyBgButton_clicked Private slot to select the body background color.
    on_bodyFgButton_clicked Private slot to select the body foreground color.
    on_cfBgButton_clicked Private slot to select the class/function header background color.
    on_cfFgButton_clicked Private slot to select the class/function header foreground color.
    on_cssButton_clicked Private slot to select a css style sheet.
    on_deleteButton_clicked Private slot to delete the currently selected directory of the listbox.
    on_ignoreDirButton_clicked Private slot to select a directory to be ignored.
    on_l1BgButton_clicked Private slot to select the level 1 header background color.
    on_l1FgButton_clicked Private slot to select the level 1 header foreground color.
    on_l2BgButton_clicked Private slot to select the level 2 header background color.
    on_l2FgButton_clicked Private slot to select the level 2 header foreground color.
    on_linkFgButton_clicked Private slot to select the foreground color of links.
    on_outputDirButton_clicked Private slot to select the output directory.
    on_qtHelpDirButton_clicked Private slot to select the output directory for the QtHelp files.
    on_qtHelpFolderEdit_textChanged Private slot to check the virtual folder.
    on_qtHelpGroup_toggled Private slot to toggle the generation of QtHelp files.
    on_qtHelpNamespaceEdit_textChanged Private slot to check the namespace.
    on_qtHelpTitleEdit_textChanged Private slot to check the title.

    Static Methods

    None

    EricdocConfigDialog (Constructor)

    EricdocConfigDialog(project, parms = None, parent = None)

    Constructor

    project
    reference to the project object (Project.Project)
    parms
    parameters to set in the dialog
    parent
    parent widget of this dialog

    EricdocConfigDialog.__checkQtHelpOptions

    __checkQtHelpOptions()

    Private slot to check the QtHelp options and set the ok button accordingly.

    EricdocConfigDialog.__initializeDefaults

    __initializeDefaults()

    Private method to set the default values.

    These are needed later on to generate the commandline parameters.

    EricdocConfigDialog.__selectColor

    __selectColor(colorKey)

    Private method to select a color.

    colorKey
    key of the color to select (string)

    EricdocConfigDialog.accept

    accept()

    Protected slot called by the Ok button.

    It saves the values in the parameters dictionary.

    EricdocConfigDialog.generateParameters

    generateParameters()

    Public method that generates the commandline parameters.

    It generates a QStringList to be used to set the QProcess arguments for the ericdoc call and a list containing the non default parameters. The second list can be passed back upon object generation to overwrite the default settings.

    Returns:
    a tuple of the commandline parameters and non default parameters (QStringList, dictionary)

    EricdocConfigDialog.on_addButton_clicked

    on_addButton_clicked()

    Private slot to add the directory displayed to the listview.

    The directory in the ignore directories line edit is moved to the listbox above and the edit is cleared.

    EricdocConfigDialog.on_bodyBgButton_clicked

    on_bodyBgButton_clicked()

    Private slot to select the body background color.

    EricdocConfigDialog.on_bodyFgButton_clicked

    on_bodyFgButton_clicked()

    Private slot to select the body foreground color.

    EricdocConfigDialog.on_cfBgButton_clicked

    on_cfBgButton_clicked()

    Private slot to select the class/function header background color.

    EricdocConfigDialog.on_cfFgButton_clicked

    on_cfFgButton_clicked()

    Private slot to select the class/function header foreground color.

    EricdocConfigDialog.on_cssButton_clicked

    on_cssButton_clicked()

    Private slot to select a css style sheet.

    EricdocConfigDialog.on_deleteButton_clicked

    on_deleteButton_clicked()

    Private slot to delete the currently selected directory of the listbox.

    EricdocConfigDialog.on_ignoreDirButton_clicked

    on_ignoreDirButton_clicked()

    Private slot to select a directory to be ignored.

    It displays a directory selection dialog to select a directory to be ignored.

    EricdocConfigDialog.on_l1BgButton_clicked

    on_l1BgButton_clicked()

    Private slot to select the level 1 header background color.

    EricdocConfigDialog.on_l1FgButton_clicked

    on_l1FgButton_clicked()

    Private slot to select the level 1 header foreground color.

    EricdocConfigDialog.on_l2BgButton_clicked

    on_l2BgButton_clicked()

    Private slot to select the level 2 header background color.

    EricdocConfigDialog.on_l2FgButton_clicked

    on_l2FgButton_clicked()

    Private slot to select the level 2 header foreground color.

    EricdocConfigDialog.on_linkFgButton_clicked

    on_linkFgButton_clicked()

    Private slot to select the foreground color of links.

    EricdocConfigDialog.on_outputDirButton_clicked

    on_outputDirButton_clicked()

    Private slot to select the output directory.

    It displays a directory selection dialog to select the directory the documentations is written to.

    EricdocConfigDialog.on_qtHelpDirButton_clicked

    on_qtHelpDirButton_clicked()

    Private slot to select the output directory for the QtHelp files.

    It displays a directory selection dialog to select the directory the QtHelp files are written to.

    EricdocConfigDialog.on_qtHelpFolderEdit_textChanged

    on_qtHelpFolderEdit_textChanged(txt)

    Private slot to check the virtual folder.

    txt
    text of the line edit (QString)

    EricdocConfigDialog.on_qtHelpGroup_toggled

    on_qtHelpGroup_toggled(enabled)

    Private slot to toggle the generation of QtHelp files.

    enabled
    flag indicating the state (boolean)

    EricdocConfigDialog.on_qtHelpNamespaceEdit_textChanged

    on_qtHelpNamespaceEdit_textChanged(txt)

    Private slot to check the namespace.

    txt
    text of the line edit (QString)

    EricdocConfigDialog.on_qtHelpTitleEdit_textChanged

    on_qtHelpTitleEdit_textChanged(p0)

    Private slot to check the title.

    txt
    text of the line edit (QString)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsPySvn.SvnUrlSelec0000644000175000001440000000013112261331353031223 xustar000000000000000030 mtime=1388688107.211229416 29 atime=1389081085.06472436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsPySvn.SvnUrlSelectionDialog.html0000644000175000001440000001072212261331353033735 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsPySvn.SvnUrlSelectionDialog

    eric4.Plugins.VcsPlugins.vcsPySvn.SvnUrlSelectionDialog

    Module implementing a dialog to enter the URLs for the svn diff command.

    Global Attributes

    None

    Classes

    SvnUrlSelectionDialog Class implementing a dialog to enter the URLs for the svn diff command.

    Functions

    None


    SvnUrlSelectionDialog

    Class implementing a dialog to enter the URLs for the svn diff command.

    Derived from

    QDialog, Ui_SvnUrlSelectionDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnUrlSelectionDialog Constructor
    __changeLabelCombo Private method used to change the label combo depending on the selected type.
    getURLs Public method to get the entered URLs.
    on_typeCombo1_currentIndexChanged Private slot called when the selected type was changed.
    on_typeCombo2_currentIndexChanged Private slot called when the selected type was changed.

    Static Methods

    None

    SvnUrlSelectionDialog (Constructor)

    SvnUrlSelectionDialog(vcs, tagsList, branchesList, path, parent = None)

    Constructor

    vcs
    reference to the vcs object
    tagsList
    list of tags (QStringList)
    branchesList
    list of branches (QStringList)
    path
    pathname to determine the repository URL from (string or QString)
    parent
    parent widget of the dialog (QWidget)

    SvnUrlSelectionDialog.__changeLabelCombo

    __changeLabelCombo(labelCombo, type_)

    Private method used to change the label combo depending on the selected type.

    labelCombo
    reference to the labelCombo object (QComboBox)
    type
    type string (QString)

    SvnUrlSelectionDialog.getURLs

    getURLs()

    Public method to get the entered URLs.

    Returns:
    tuple of list of two URL strings (list of strings) and a flag indicating a diff summary (boolean)

    SvnUrlSelectionDialog.on_typeCombo1_currentIndexChanged

    on_typeCombo1_currentIndexChanged(type_)

    Private slot called when the selected type was changed.

    type_
    selected type (QString)

    SvnUrlSelectionDialog.on_typeCombo2_currentIndexChanged

    on_typeCombo2_currentIndexChanged(type_)

    Private slot called when the selected type was changed.

    type_
    selected type (QString)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Project.ProjectTranslationsBrowser.html0000644000175000001440000000013112261331351031432 xustar000000000000000030 mtime=1388688105.738228676 29 atime=1389081085.06472436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Project.ProjectTranslationsBrowser.html0000644000175000001440000004663212261331351031200 0ustar00detlevusers00000000000000 eric4.Project.ProjectTranslationsBrowser

    eric4.Project.ProjectTranslationsBrowser

    Module implementing a class used to display the translations part of the project.

    Global Attributes

    None

    Classes

    ProjectTranslationsBrowser A class used to display the translations part of the project.

    Functions

    None


    ProjectTranslationsBrowser

    A class used to display the translations part of the project.

    Signals

    appendStderr(string)
    emitted after something was received from a QProcess on stderr
    appendStdout(string)
    emitted after something was received from a QProcess on stdout
    closeSourceWindow(string)
    emitted after a file has been removed/deleted from the project
    linguistFile(string)
    emitted to open a translation file with Qt-Linguist
    showMenu(string, QMenu)
    emitted when a menu is about to be shown. The name of the menu and a reference to the menu are given.
    sourceFile(string)
    emitted to open a translation file in an editor
    trpreview(string list)
    emitted to preview translations in the translations previewer

    Derived from

    ProjectBaseBrowser

    Class Attributes

    None

    Class Methods

    None

    Methods

    ProjectTranslationsBrowser Constructor
    __TRPreview Private slot to handle the Preview translations action.
    __TRPreviewAll Private slot to handle the Preview all translations action.
    __addTranslationFiles Private method to add translation files to the project.
    __deleteLanguageFile Private method to delete a translation file from the project.
    __extractMessages Private slot to extract the messages to form a messages template file.
    __generateAll Private method to generate all translation files (.ts) for Qt Linguist.
    __generateObsoleteAll Private method to generate all translation files (.ts) for Qt Linguist.
    __generateObsoleteSelected Private method to generate selected translation files (.ts) for Qt Linguist.
    __generateSelected Private method to generate selected translation files (.ts) for Qt Linguist.
    __generateTSFile Private method used to run pylupdate/pylupdate4 to generate the .ts files.
    __generateTSFileDone Private slot to handle the finished signal of the pylupdate process.
    __openFileInEditor Private slot to handle the Open in Editor menu action.
    __readStderr Private method to read from a process' stderr channel.
    __readStderrLrelease Private slot to handle the readyReadStandardError signal of the lrelease process.
    __readStderrLupdate Private slot to handle the readyReadStandardError signal of the pylupdate process.
    __readStdout Private method to read from a process' stdout channel.
    __readStdoutLrelease Private slot to handle the readyReadStandardOutput signal of the lrelease process.
    __readStdoutLupdate Private slot to handle the readyReadStandardOutput signal of the pylupdate process.
    __releaseAll Private method to release the translation files (.qm).
    __releaseSelected Private method to release the translation files (.qm).
    __releaseTSFile Private method to run lrelease to release the translation files (.qm).
    __releaseTSFileDone Private slot to handle the finished signal of the lrelease process.
    __removeLanguageFile Private method to remove a translation from the project.
    __showContextMenu Private slot called by the menu aboutToShow signal.
    __showContextMenuBack Private slot called by the backMenu aboutToShow signal.
    __showContextMenuDir Private slot called by the dirMenu aboutToShow signal.
    __showContextMenuMulti Private slot called by the multiMenu aboutToShow signal.
    __writeTempProjectFile Private method to write a temporary project file suitable for pylupdate and lrelease.
    _contextMenuRequested Protected slot to show the context menu.
    _createPopupMenus Protected overloaded method to generate the popup menu.
    _initHookMethods Protected method to initialize the hooks dictionary.
    _openItem Protected slot to handle the open popup menu entry.

    Static Methods

    None

    ProjectTranslationsBrowser (Constructor)

    ProjectTranslationsBrowser(project, parent=None)

    Constructor

    project
    reference to the project object
    parent
    parent widget of this browser (QWidget)

    ProjectTranslationsBrowser.__TRPreview

    __TRPreview(previewAll = False)

    Private slot to handle the Preview translations action.

    previewAll
    flag indicating, that all translations should be previewed (boolean)

    ProjectTranslationsBrowser.__TRPreviewAll

    __TRPreviewAll()

    Private slot to handle the Preview all translations action.

    ProjectTranslationsBrowser.__addTranslationFiles

    __addTranslationFiles()

    Private method to add translation files to the project.

    ProjectTranslationsBrowser.__deleteLanguageFile

    __deleteLanguageFile()

    Private method to delete a translation file from the project.

    ProjectTranslationsBrowser.__extractMessages

    __extractMessages()

    Private slot to extract the messages to form a messages template file.

    ProjectTranslationsBrowser.__generateAll

    __generateAll()

    Private method to generate all translation files (.ts) for Qt Linguist.

    All obsolete strings are removed from the .ts file.

    ProjectTranslationsBrowser.__generateObsoleteAll

    __generateObsoleteAll()

    Private method to generate all translation files (.ts) for Qt Linguist.

    Obsolete strings are kept.

    ProjectTranslationsBrowser.__generateObsoleteSelected

    __generateObsoleteSelected()

    Private method to generate selected translation files (.ts) for Qt Linguist.

    Obsolete strings are kept.

    ProjectTranslationsBrowser.__generateSelected

    __generateSelected()

    Private method to generate selected translation files (.ts) for Qt Linguist.

    All obsolete strings are removed from the .ts file.

    ProjectTranslationsBrowser.__generateTSFile

    __generateTSFile(noobsolete = False, generateAll = True)

    Private method used to run pylupdate/pylupdate4 to generate the .ts files.

    noobsolete
    flag indicating whether obsolete entries should be kept (boolean)
    generateAll
    flag indicating whether all translations should be generated (boolean)

    ProjectTranslationsBrowser.__generateTSFileDone

    __generateTSFileDone(exitCode, exitStatus)

    Private slot to handle the finished signal of the pylupdate process.

    exitCode
    exit code of the process (integer)
    exitStatus
    exit status of the process (QProcess.ExitStatus)

    ProjectTranslationsBrowser.__openFileInEditor

    __openFileInEditor()

    Private slot to handle the Open in Editor menu action.

    ProjectTranslationsBrowser.__readStderr

    __readStderr(proc, ps)

    Private method to read from a process' stderr channel.

    proc
    process to read from (QProcess)
    ps
    propmt string (string or QString)

    ProjectTranslationsBrowser.__readStderrLrelease

    __readStderrLrelease()

    Private slot to handle the readyReadStandardError signal of the lrelease process.

    ProjectTranslationsBrowser.__readStderrLupdate

    __readStderrLupdate()

    Private slot to handle the readyReadStandardError signal of the pylupdate process.

    ProjectTranslationsBrowser.__readStdout

    __readStdout(proc, ps)

    Private method to read from a process' stdout channel.

    proc
    process to read from (QProcess)
    ps
    propmt string (string or QString)

    ProjectTranslationsBrowser.__readStdoutLrelease

    __readStdoutLrelease()

    Private slot to handle the readyReadStandardOutput signal of the lrelease process.

    ProjectTranslationsBrowser.__readStdoutLupdate

    __readStdoutLupdate()

    Private slot to handle the readyReadStandardOutput signal of the pylupdate process.

    ProjectTranslationsBrowser.__releaseAll

    __releaseAll()

    Private method to release the translation files (.qm).

    ProjectTranslationsBrowser.__releaseSelected

    __releaseSelected()

    Private method to release the translation files (.qm).

    ProjectTranslationsBrowser.__releaseTSFile

    __releaseTSFile(generateAll = False)

    Private method to run lrelease to release the translation files (.qm).

    generateAll
    flag indicating whether all translations should be released (boolean)

    ProjectTranslationsBrowser.__releaseTSFileDone

    __releaseTSFileDone(exitCode, exitStatus)

    Private slot to handle the finished signal of the lrelease process.

    ProjectTranslationsBrowser.__removeLanguageFile

    __removeLanguageFile()

    Private method to remove a translation from the project.

    ProjectTranslationsBrowser.__showContextMenu

    __showContextMenu()

    Private slot called by the menu aboutToShow signal.

    ProjectTranslationsBrowser.__showContextMenuBack

    __showContextMenuBack()

    Private slot called by the backMenu aboutToShow signal.

    ProjectTranslationsBrowser.__showContextMenuDir

    __showContextMenuDir()

    Private slot called by the dirMenu aboutToShow signal.

    ProjectTranslationsBrowser.__showContextMenuMulti

    __showContextMenuMulti()

    Private slot called by the multiMenu aboutToShow signal.

    ProjectTranslationsBrowser.__writeTempProjectFile

    __writeTempProjectFile(langs, filter)

    Private method to write a temporary project file suitable for pylupdate and lrelease.

    langs
    list of languages to include in the process. An empty list (default) means that all translations should be included. (list of ProjectBrowserFileItem)
    filter
    list of source file extension that should be considered (list of strings)
    Returns:
    flag indicating success

    ProjectTranslationsBrowser._contextMenuRequested

    _contextMenuRequested(coord)

    Protected slot to show the context menu.

    coord
    the position of the mouse pointer (QPoint)

    ProjectTranslationsBrowser._createPopupMenus

    _createPopupMenus()

    Protected overloaded method to generate the popup menu.

    ProjectTranslationsBrowser._initHookMethods

    _initHookMethods()

    Protected method to initialize the hooks dictionary.

    Supported hook methods are:

    • extractMessages: takes no parameters
    • generateAll: takes list of filenames as parameter
    • generateAllWithObsolete: takes list of filenames as parameter
    • generateSelected: takes list of filenames as parameter
    • generateSelectedWithObsolete: takes list of filenames as parameter
    • releaseAll: takes list of filenames as parameter
    • releaseSelected: takes list of filenames as parameter

    Note: Filenames are relative to the project directory.

    ProjectTranslationsBrowser._openItem

    _openItem()

    Protected slot to handle the open popup menu entry.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.Network.QtHelpAccessHandler.0000644000175000001440000000013112261331353031144 xustar000000000000000030 mtime=1388688107.948229785 29 atime=1389081085.06472436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.Network.QtHelpAccessHandler.html0000644000175000001440000000622112261331353031565 0ustar00detlevusers00000000000000 eric4.Helpviewer.Network.QtHelpAccessHandler

    eric4.Helpviewer.Network.QtHelpAccessHandler

    Module implementing a scheme access handler for QtHelp.

    Global Attributes

    ExtensionMap
    QtDocPath

    Classes

    QtHelpAccessHandler Class implementing a scheme access handler for QtHelp.

    Functions

    None


    QtHelpAccessHandler

    Class implementing a scheme access handler for QtHelp.

    Derived from

    SchemeAccessHandler

    Class Attributes

    None

    Class Methods

    None

    Methods

    QtHelpAccessHandler Constructor
    __mimeFromUrl Private method to guess the mime type given an URL.
    createRequest Protected method to create a request.

    Static Methods

    None

    QtHelpAccessHandler (Constructor)

    QtHelpAccessHandler(engine, parent = None)

    Constructor

    engine
    reference to the help engine (QHelpEngine)
    parent
    reference to the parent object (QObject)

    QtHelpAccessHandler.__mimeFromUrl

    __mimeFromUrl(url)

    Private method to guess the mime type given an URL.

    url
    URL to guess the mime type from (QUrl)

    QtHelpAccessHandler.createRequest

    createRequest(op, request, outgoingData = None)

    Protected method to create a request.

    op
    the operation to be performed (QNetworkAccessManager.Operation)
    request
    reference to the request object (QNetworkRequest)
    outgoingData
    reference to an IODevice containing data to be sent (QIODevice)
    Returns:
    reference to the created reply object (QNetworkReply)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.HelpDocsInstaller.html0000644000175000001440000000013112261331351030141 xustar000000000000000030 mtime=1388688105.429228521 29 atime=1389081085.06472436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.HelpDocsInstaller.html0000644000175000001440000001035412261331351027677 0ustar00detlevusers00000000000000 eric4.Helpviewer.HelpDocsInstaller

    eric4.Helpviewer.HelpDocsInstaller

    Module implementing a thread class populating and updating the QtHelp documentation database.

    Global Attributes

    None

    Classes

    HelpDocsInstaller Class implementing the worker thread populating and updating the QtHelp documentation database.

    Functions

    None


    HelpDocsInstaller

    Class implementing the worker thread populating and updating the QtHelp documentation database.

    Signals

    docsInstalled(bool)
    emitted after the installation has finished
    errorMessage(const QString&)
    emitted, if an error occurred during the installation of the documentation

    Derived from

    QThread

    Class Attributes

    None

    Class Methods

    None

    Methods

    HelpDocsInstaller Constructor
    __installEric4Doc Private method to install/update the eric4 help documentation.
    __installQtDoc Private method to install/update a Qt help document.
    installDocs Public method to start the installation procedure.
    run Protected method executed by the thread.
    stop Public slot to stop the installation procedure.

    Static Methods

    None

    HelpDocsInstaller (Constructor)

    HelpDocsInstaller(collection)

    Constructor

    collection
    full pathname of the collection file (QString)

    HelpDocsInstaller.__installEric4Doc

    __installEric4Doc(engine)

    Private method to install/update the eric4 help documentation.

    engine
    reference to the help engine (QHelpEngineCore)
    Returns:
    flag indicating success (boolean)

    HelpDocsInstaller.__installQtDoc

    __installQtDoc(name, engine)

    Private method to install/update a Qt help document.

    name
    name of the Qt help document (string or QString)
    engine
    reference to the help engine (QHelpEngineCore)
    Returns:
    flag indicating success (boolean)

    HelpDocsInstaller.installDocs

    installDocs()

    Public method to start the installation procedure.

    HelpDocsInstaller.run

    run()

    Protected method executed by the thread.

    HelpDocsInstaller.stop

    stop()

    Public slot to stop the installation procedure.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Tools.TRSingleApplication.html0000644000175000001440000000013012261331351027422 xustar000000000000000029 mtime=1388688105.56722859 29 atime=1389081085.06472436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Tools.TRSingleApplication.html0000644000175000001440000001231712261331351027162 0ustar00detlevusers00000000000000 eric4.Tools.TRSingleApplication

    eric4.Tools.TRSingleApplication

    Module implementing the single application server and client.

    Global Attributes

    SAFile
    SALoadForm
    SALoadTranslation

    Classes

    TRSingleApplicationClient Class implementing the single application client of the Translations Previewer.
    TRSingleApplicationServer Class implementing the single application server embedded within the Translations Previewer.

    Functions

    None


    TRSingleApplicationClient

    Class implementing the single application client of the Translations Previewer.

    Derived from

    SingleApplicationClient

    Class Attributes

    None

    Class Methods

    None

    Methods

    TRSingleApplicationClient Constructor
    processArgs Public method to process the command line args passed to the UI.

    Static Methods

    None

    TRSingleApplicationClient (Constructor)

    TRSingleApplicationClient()

    Constructor

    TRSingleApplicationClient.processArgs

    processArgs(args)

    Public method to process the command line args passed to the UI.

    args
    list of files to open


    TRSingleApplicationServer

    Class implementing the single application server embedded within the Translations Previewer.

    Signals

    loadForm(fname)
    emitted to load a form file
    loadTranslation(fname, first)
    emitted to load a translation file

    Derived from

    SingleApplicationServer

    Class Attributes

    None

    Class Methods

    None

    Methods

    TRSingleApplicationServer Constructor
    __saLoadForm Private method used to handle the "Load Form" command.
    __saLoadTranslation Private method used to handle the "Load Translation" command.
    handleCommand Public slot to handle the command sent by the client.

    Static Methods

    None

    TRSingleApplicationServer (Constructor)

    TRSingleApplicationServer(parent)

    Constructor

    parent
    parent widget (QWidget)

    TRSingleApplicationServer.__saLoadForm

    __saLoadForm(fnames)

    Private method used to handle the "Load Form" command.

    fnames
    filenames of the forms to be loaded (list of strings)

    TRSingleApplicationServer.__saLoadTranslation

    __saLoadTranslation(fnames)

    Private method used to handle the "Load Translation" command.

    fnames
    filenames of the translations to be loaded (list of strings)

    TRSingleApplicationServer.handleCommand

    handleCommand(cmd, params)

    Public slot to handle the command sent by the client.

    cmd
    commandstring (string)
    params
    parameterstring (string)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ConfigurationPages.IconsPag0000644000175000001440000000013112261331353031241 xustar000000000000000030 mtime=1388688107.577229599 29 atime=1389081085.06472436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.IconsPage.html0000644000175000001440000001370112261331353032106 0ustar00detlevusers00000000000000 eric4.Preferences.ConfigurationPages.IconsPage

    eric4.Preferences.ConfigurationPages.IconsPage

    Module implementing the Icons configuration page.

    Global Attributes

    None

    Classes

    IconsPage Class implementing the Icons configuration page.

    Functions

    create Module function to create the configuration page.


    IconsPage

    Class implementing the Icons configuration page.

    Derived from

    ConfigurationPageBase, Ui_IconsPage

    Class Attributes

    None

    Class Methods

    None

    Methods

    IconsPage Constructor
    on_addIconDirectoryButton_clicked Private slot to add the icon directory displayed to the listbox.
    on_deleteIconDirectoryButton_clicked Private slot to delete the currently selected directory of the listbox.
    on_downButton_clicked Private slot called to move the selected item down in the list.
    on_iconDirectoryButton_clicked Private slot to select an icon directory.
    on_iconDirectoryEdit_textChanged Private slot to handle the textChanged signal of the directory edit.
    on_iconDirectoryList_currentRowChanged Private slot to handle the currentRowChanged signal of the icons directory list.
    on_showIconsButton_clicked Private slot to display a preview of an icons directory.
    on_upButton_clicked Private slot called to move the selected item up in the list.
    save Public slot to save the Icons configuration.

    Static Methods

    None

    IconsPage (Constructor)

    IconsPage()

    Constructor

    IconsPage.on_addIconDirectoryButton_clicked

    on_addIconDirectoryButton_clicked()

    Private slot to add the icon directory displayed to the listbox.

    IconsPage.on_deleteIconDirectoryButton_clicked

    on_deleteIconDirectoryButton_clicked()

    Private slot to delete the currently selected directory of the listbox.

    IconsPage.on_downButton_clicked

    on_downButton_clicked()

    Private slot called to move the selected item down in the list.

    IconsPage.on_iconDirectoryButton_clicked

    on_iconDirectoryButton_clicked()

    Private slot to select an icon directory.

    IconsPage.on_iconDirectoryEdit_textChanged

    on_iconDirectoryEdit_textChanged(txt)

    Private slot to handle the textChanged signal of the directory edit.

    txt
    the text of the directory edit (QString)

    IconsPage.on_iconDirectoryList_currentRowChanged

    on_iconDirectoryList_currentRowChanged(row)

    Private slot to handle the currentRowChanged signal of the icons directory list.

    row
    the current row (integer)

    IconsPage.on_showIconsButton_clicked

    on_showIconsButton_clicked()

    Private slot to display a preview of an icons directory.

    IconsPage.on_upButton_clicked

    on_upButton_clicked()

    Private slot called to move the selected item up in the list.

    IconsPage.save

    save()

    Public slot to save the Icons configuration.



    create

    create(dlg)

    Module function to create the configuration page.

    dlg
    reference to the configuration dialog

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.E4XML.XMLWriterBase.html0000644000175000001440000000013012261331352025731 xustar000000000000000029 mtime=1388688106.54322908 29 atime=1389081085.06472436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.E4XML.XMLWriterBase.html0000644000175000001440000002356212261331352025475 0ustar00detlevusers00000000000000 eric4.E4XML.XMLWriterBase

    eric4.E4XML.XMLWriterBase

    Module implementing a base class for all of eric4s XML writers.

    Global Attributes

    None

    Classes

    XMLWriterBase Class implementing a base class for all of eric4s XML writers.

    Functions

    None


    XMLWriterBase

    Class implementing a base class for all of eric4s XML writers.

    Derived from

    object

    Class Attributes

    None

    Class Methods

    None

    Methods

    XMLWriterBase Constructor
    _write Protected method used to do the real write operation.
    _writeBasics Protected method to dump an object of a basic Python type.
    _write_bool Protected method to dump a BooleanType object.
    _write_complex Protected method to dump a ComplexType object.
    _write_dictionary Protected method to dump a DictType object.
    _write_float Protected method to dump a FloatType object.
    _write_int Protected method to dump an IntType object.
    _write_list Protected method to dump a ListType object.
    _write_long Protected method to dump a LongType object.
    _write_none Protected method to dump a NoneType object.
    _write_string Protected method to dump a StringType object.
    _write_tuple Protected method to dump a TupleType object.
    _write_unicode Protected method to dump an UnicodeType object.
    _write_unimplemented Protected method to dump a type, that has no special method.
    encodedNewLines Public method to encode newlines and paragraph breaks.
    escape Function to escape &, <, and > in a string of data.
    writeXML Public method to write the XML to the file.

    Static Methods

    None

    XMLWriterBase (Constructor)

    XMLWriterBase(file)

    Constructor

    file
    open file (like) object for writing

    XMLWriterBase._write

    _write(s, newline = True)

    Protected method used to do the real write operation.

    s
    string to be written to the XML file
    newline
    flag indicating a linebreak

    XMLWriterBase._writeBasics

    _writeBasics(pyobject, indent = 0)

    Protected method to dump an object of a basic Python type.

    pyobject
    object to be dumped
    indent
    indentation level for prettier output (integer)

    XMLWriterBase._write_bool

    _write_bool(value, indent)

    Protected method to dump a BooleanType object.

    value
    value to be dumped (boolean)
    indent
    indentation level for prettier output (integer)

    XMLWriterBase._write_complex

    _write_complex(value, indent)

    Protected method to dump a ComplexType object.

    value
    value to be dumped (complex)
    indent
    indentation level for prettier output (integer)

    XMLWriterBase._write_dictionary

    _write_dictionary(value, indent)

    Protected method to dump a DictType object.

    value
    value to be dumped (dictionary)
    indent
    indentation level for prettier output (integer)

    XMLWriterBase._write_float

    _write_float(value, indent)

    Protected method to dump a FloatType object.

    value
    value to be dumped (float)
    indent
    indentation level for prettier output (integer)

    XMLWriterBase._write_int

    _write_int(value, indent)

    Protected method to dump an IntType object.

    value
    value to be dumped (integer)
    indent
    indentation level for prettier output (integer)

    XMLWriterBase._write_list

    _write_list(value, indent)

    Protected method to dump a ListType object.

    value
    value to be dumped (list)
    indent
    indentation level for prettier output (integer)

    XMLWriterBase._write_long

    _write_long(value, indent)

    Protected method to dump a LongType object.

    value
    value to be dumped (long)
    indent
    indentation level for prettier output (integer)

    XMLWriterBase._write_none

    _write_none(value, indent)

    Protected method to dump a NoneType object.

    value
    value to be dumped (None) (ignored)
    indent
    indentation level for prettier output (integer)

    XMLWriterBase._write_string

    _write_string(value, indent)

    Protected method to dump a StringType object.

    value
    value to be dumped (string)
    indent
    indentation level for prettier output (integer)

    XMLWriterBase._write_tuple

    _write_tuple(value, indent)

    Protected method to dump a TupleType object.

    value
    value to be dumped (tuple)
    indent
    indentation level for prettier output (integer)

    XMLWriterBase._write_unicode

    _write_unicode(value, indent)

    Protected method to dump an UnicodeType object.

    value
    value to be dumped (unicode)
    indent
    indentation level for prettier output (integer)

    XMLWriterBase._write_unimplemented

    _write_unimplemented(value, indent)

    Protected method to dump a type, that has no special method.

    value
    value to be dumped (any pickleable object)
    indent
    indentation level for prettier output (integer)

    XMLWriterBase.encodedNewLines

    encodedNewLines(text)

    Public method to encode newlines and paragraph breaks.

    text
    text to encode (string or QString)

    XMLWriterBase.escape

    escape(data, attribute=False)

    Function to escape &, <, and > in a string of data.

    data
    data to be escaped (string)
    attribute
    flag indicating escaping is done for an attribute
    Returns:
    the escaped data (string)

    XMLWriterBase.writeXML

    writeXML()

    Public method to write the XML to the file.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsPySvn.SvnTagDialo0000644000175000001440000000013212261331353031172 xustar000000000000000030 mtime=1388688107.149229384 30 atime=1389081085.065724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsPySvn.SvnTagDialog.html0000644000175000001440000000572112261331353032043 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsPySvn.SvnTagDialog

    eric4.Plugins.VcsPlugins.vcsPySvn.SvnTagDialog

    Module implementing a dialog to enter the data for a tagging operation.

    Global Attributes

    None

    Classes

    SvnTagDialog Class implementing a dialog to enter the data for a tagging operation.

    Functions

    None


    SvnTagDialog

    Class implementing a dialog to enter the data for a tagging operation.

    Derived from

    QDialog, Ui_SvnTagDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnTagDialog Constructor
    getParameters Public method to retrieve the tag data.
    on_tagCombo_editTextChanged Private method used to enable/disable the OK-button.

    Static Methods

    None

    SvnTagDialog (Constructor)

    SvnTagDialog(taglist, reposURL, standardLayout, parent = None)

    Constructor

    taglist
    list of previously entered tags (QStringList)
    reposURL
    repository path (QString or string) or None
    standardLayout
    flag indicating the layout of the repository (boolean)
    parent
    parent widget (QWidget)

    SvnTagDialog.getParameters

    getParameters()

    Public method to retrieve the tag data.

    Returns:
    tuple of QString and int (tag, tag operation)

    SvnTagDialog.on_tagCombo_editTextChanged

    on_tagCombo_editTextChanged(text)

    Private method used to enable/disable the OK-button.

    text
    ignored

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.Plugins.AboutPlugin.html0000644000175000001440000000013212261331354027433 xustar000000000000000030 mtime=1388688108.657230142 30 atime=1389081085.065724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.Plugins.AboutPlugin.html0000644000175000001440000000142012261331354027162 0ustar00detlevusers00000000000000 eric4.Plugins.AboutPlugin

    eric4.Plugins.AboutPlugin

    Package containing the About plugin.

    Modules

    AboutDialog Module implementing an 'About Eric' dialog.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.E4XML.MultiProjectWriter.html0000644000175000001440000000013212261331352027121 xustar000000000000000030 mtime=1388688106.615229116 30 atime=1389081085.065724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.E4XML.MultiProjectWriter.html0000644000175000001440000000446412261331352026663 0ustar00detlevusers00000000000000 eric4.E4XML.MultiProjectWriter

    eric4.E4XML.MultiProjectWriter

    Module implementing the writer class for writing an XML multi project file.

    Global Attributes

    None

    Classes

    MultiProjectWriter Class implementing the writer class for writing an XML project file.

    Functions

    None


    MultiProjectWriter

    Class implementing the writer class for writing an XML project file.

    Derived from

    XMLWriterBase

    Class Attributes

    None

    Class Methods

    None

    Methods

    MultiProjectWriter Constructor
    writeXML Public method to write the XML to the file.

    Static Methods

    None

    MultiProjectWriter (Constructor)

    MultiProjectWriter(multiProject, file, multiProjectName)

    Constructor

    multiProject
    Reference to the multi project object
    file
    open file (like) object for writing
    projectName
    name of the project (string)

    MultiProjectWriter.writeXML

    writeXML()

    Public method to write the XML to the file.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.Lexers.LexerPython.html0000644000175000001440000000013212261331354030241 xustar000000000000000030 mtime=1388688108.592230109 30 atime=1389081085.065724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.Lexers.LexerPython.html0000644000175000001440000001111712261331354027774 0ustar00detlevusers00000000000000 eric4.QScintilla.Lexers.LexerPython

    eric4.QScintilla.Lexers.LexerPython

    Module implementing a Python lexer with some additional methods.

    Global Attributes

    None

    Classes

    LexerPython Subclass to implement some additional lexer dependant methods.

    Functions

    None


    LexerPython

    Subclass to implement some additional lexer dependant methods.

    Derived from

    QsciLexerPython, Lexer

    Class Attributes

    None

    Class Methods

    None

    Methods

    LexerPython Constructor
    autoCompletionWordSeparators Public method to return the list of separators for autocompletion.
    defaultKeywords Public method to get the default keywords.
    getIndentationDifference Private method to determine the difference for the new indentation.
    initProperties Public slot to initialize the properties.
    isCommentStyle Public method to check, if a style is a comment style.
    isStringStyle Public method to check, if a style is a string style.

    Static Methods

    None

    LexerPython (Constructor)

    LexerPython(parent=None)

    Constructor

    parent
    parent widget of this lexer

    LexerPython.autoCompletionWordSeparators

    autoCompletionWordSeparators()

    Public method to return the list of separators for autocompletion.

    Returns:
    list of separators (QStringList)

    LexerPython.defaultKeywords

    defaultKeywords(kwSet)

    Public method to get the default keywords.

    kwSet
    number of the keyword set (integer)
    Returns:
    string giving the keywords (string) or None

    LexerPython.getIndentationDifference

    getIndentationDifference(line, editor)

    Private method to determine the difference for the new indentation.

    line
    line to perform the calculation for (integer)
    editor
    QScintilla editor
    Returns:
    amount of difference in indentation (integer)

    LexerPython.initProperties

    initProperties()

    Public slot to initialize the properties.

    LexerPython.isCommentStyle

    isCommentStyle(style)

    Public method to check, if a style is a comment style.

    Returns:
    flag indicating a comment style (boolean)

    LexerPython.isStringStyle

    isStringStyle(style)

    Public method to check, if a style is a string style.

    Returns:
    flag indicating a string style (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DebugClients.Ruby.DebugProtocol.html0000644000175000001440000000013212261331354030514 xustar000000000000000030 mtime=1388688108.286229955 30 atime=1389081085.066724362 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.DebugClients.Ruby.DebugProtocol.html0000644000175000001440000000503212261331354030246 0ustar00detlevusers00000000000000 eric4.DebugClients.Ruby.DebugProtocol

    eric4.DebugClients.Ruby.DebugProtocol

    File defining the debug protocol tokens

    Global Attributes

    DebugAddress
    EOT
    PassiveStartup
    RequestBanner
    RequestBreak
    RequestBreakEnable
    RequestBreakIgnore
    RequestCapabilities
    RequestCompletion
    RequestContinue
    RequestCoverage
    RequestEnv
    RequestEval
    RequestExec
    RequestLoad
    RequestOK
    RequestProfile
    RequestRun
    RequestSetFilter
    RequestShutdown
    RequestStep
    RequestStepOut
    RequestStepOver
    RequestStepQuit
    RequestUTPrepare
    RequestUTRun
    RequestUTStop
    RequestVariable
    RequestVariables
    RequestWatch
    RequestWatchEnable
    RequestWatchIgnore
    ResponseBanner
    ResponseCapabilities
    ResponseClearBreak
    ResponseClearWatch
    ResponseCompletion
    ResponseContinue
    ResponseException
    ResponseExit
    ResponseLine
    ResponseOK
    ResponseRaw
    ResponseSyntax
    ResponseUTFinished
    ResponseUTPrepared
    ResponseUTStartTest
    ResponseUTStopTest
    ResponseUTTestErrored
    ResponseUTTestFailed
    ResponseVariable
    ResponseVariables

    Classes

    None

    Modules

    None

    Functions

    None

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsPySvn.SvnPropSetD0000644000175000001440000000013212261331353031206 xustar000000000000000030 mtime=1388688107.025229322 30 atime=1389081085.066724362 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsPySvn.SvnPropSetDialog.html0000644000175000001440000000476512261331353032733 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsPySvn.SvnPropSetDialog

    eric4.Plugins.VcsPlugins.vcsPySvn.SvnPropSetDialog

    Module implementing a dialog to enter the data for a new property.

    Global Attributes

    None

    Classes

    SvnPropSetDialog Class implementing a dialog to enter the data for a new property.

    Functions

    None


    SvnPropSetDialog

    Class implementing a dialog to enter the data for a new property.

    Derived from

    QDialog, Ui_SvnPropSetDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnPropSetDialog Constructor
    getData Public slot used to retrieve the data entered into the dialog.

    Static Methods

    None

    SvnPropSetDialog (Constructor)

    SvnPropSetDialog(recursive, parent = None)

    Constructor

    recursive
    flag indicating a recursive set is requested
    parent
    parent widget (QWidget)

    SvnPropSetDialog.getData

    getData()

    Public slot used to retrieve the data entered into the dialog.

    Returns:
    tuple of three values giving the property name, the text of the property and a flag indicating, that this property should be applied recursively. (string, string, boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsSubversion.Projec0000644000175000001440000000031312261331352031321 xustar0000000000000000113 path=eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsSubversion.ProjectBrowserHelper.html 30 mtime=1388688106.795229207 30 atime=1389081085.066724362 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsSubversion.ProjectBrowserHelper.h0000644000175000001440000004114212261331352034172 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsSubversion.ProjectBrowserHelper

    eric4.Plugins.VcsPlugins.vcsSubversion.ProjectBrowserHelper

    Module implementing the VCS project browser helper for subversion.

    Global Attributes

    None

    Classes

    SvnProjectBrowserHelper Class implementing the VCS project browser helper for subversion.

    Functions

    None


    SvnProjectBrowserHelper

    Class implementing the VCS project browser helper for subversion.

    Derived from

    VcsProjectBrowserHelper

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnProjectBrowserHelper Constructor
    __SVNAddToChangelist Private slot called by the context menu to add files to a changelist.
    __SVNBlame Private slot called by the context menu to show the blame of a file.
    __SVNBreakLock Private slot called by the context menu to break lock files in the repository.
    __SVNConfigure Private method to open the configuration dialog.
    __SVNCopy Private slot called by the context menu to copy the selected file.
    __SVNDelProp Private slot called by the context menu to delete a subversion property of a file.
    __SVNExtendedDiff Private slot called by the context menu to show the difference of a file to the repository.
    __SVNListProps Private slot called by the context menu to list the subversion properties of a file.
    __SVNLock Private slot called by the context menu to lock files in the repository.
    __SVNLogBrowser Private slot called by the context menu to show the log browser for a file.
    __SVNLogLimited Private slot called by the context menu to show the limited log of a file.
    __SVNMove Private slot called by the context menu to move the selected file.
    __SVNRemoveFromChangelist Private slot called by the context menu to remove files from their changelist.
    __SVNResolve Private slot called by the context menu to resolve conflicts of a file.
    __SVNSetProp Private slot called by the context menu to set a subversion property of a file.
    __SVNStealLock Private slot called by the context menu to steal lock files in the repository.
    __SVNUnlock Private slot called by the context menu to unlock files in the repository.
    __SVNUrlDiff Private slot called by the context menu to show the difference of a file of two repository URLs.
    __itemsHaveFiles Private method to check, if items contain file type items.
    _addVCSMenu Protected method used to add the VCS menu to all project browsers.
    _addVCSMenuBack Protected method used to add the VCS menu to all project browsers.
    _addVCSMenuDir Protected method used to add the VCS menu to all project browsers.
    _addVCSMenuDirMulti Protected method used to add the VCS menu to all project browsers.
    _addVCSMenuMulti Protected method used to add the VCS menu for multi selection to all project browsers.
    showContextMenu Slot called before the context menu is shown.
    showContextMenuDir Slot called before the context menu is shown.
    showContextMenuDirMulti Slot called before the context menu is shown.
    showContextMenuMulti Slot called before the context menu (multiple selections) is shown.

    Static Methods

    None

    SvnProjectBrowserHelper (Constructor)

    SvnProjectBrowserHelper(vcsObject, browserObject, projectObject, isTranslationsBrowser, parent = None, name = None)

    Constructor

    vcsObject
    reference to the vcs object
    browserObject
    reference to the project browser object
    projectObject
    reference to the project object
    isTranslationsBrowser
    flag indicating, the helper is requested for the translations browser (this needs some special treatment)
    parent
    parent widget (QWidget)
    name
    name of this object (string or QString)

    SvnProjectBrowserHelper.__SVNAddToChangelist

    __SVNAddToChangelist()

    Private slot called by the context menu to add files to a changelist.

    SvnProjectBrowserHelper.__SVNBlame

    __SVNBlame()

    Private slot called by the context menu to show the blame of a file.

    SvnProjectBrowserHelper.__SVNBreakLock

    __SVNBreakLock()

    Private slot called by the context menu to break lock files in the repository.

    SvnProjectBrowserHelper.__SVNConfigure

    __SVNConfigure()

    Private method to open the configuration dialog.

    SvnProjectBrowserHelper.__SVNCopy

    __SVNCopy()

    Private slot called by the context menu to copy the selected file.

    SvnProjectBrowserHelper.__SVNDelProp

    __SVNDelProp()

    Private slot called by the context menu to delete a subversion property of a file.

    SvnProjectBrowserHelper.__SVNExtendedDiff

    __SVNExtendedDiff()

    Private slot called by the context menu to show the difference of a file to the repository.

    This gives the chance to enter the revisions to compare.

    SvnProjectBrowserHelper.__SVNListProps

    __SVNListProps()

    Private slot called by the context menu to list the subversion properties of a file.

    SvnProjectBrowserHelper.__SVNLock

    __SVNLock()

    Private slot called by the context menu to lock files in the repository.

    SvnProjectBrowserHelper.__SVNLogBrowser

    __SVNLogBrowser()

    Private slot called by the context menu to show the log browser for a file.

    SvnProjectBrowserHelper.__SVNLogLimited

    __SVNLogLimited()

    Private slot called by the context menu to show the limited log of a file.

    SvnProjectBrowserHelper.__SVNMove

    __SVNMove()

    Private slot called by the context menu to move the selected file.

    SvnProjectBrowserHelper.__SVNRemoveFromChangelist

    __SVNRemoveFromChangelist()

    Private slot called by the context menu to remove files from their changelist.

    SvnProjectBrowserHelper.__SVNResolve

    __SVNResolve()

    Private slot called by the context menu to resolve conflicts of a file.

    SvnProjectBrowserHelper.__SVNSetProp

    __SVNSetProp()

    Private slot called by the context menu to set a subversion property of a file.

    SvnProjectBrowserHelper.__SVNStealLock

    __SVNStealLock()

    Private slot called by the context menu to steal lock files in the repository.

    SvnProjectBrowserHelper.__SVNUnlock

    __SVNUnlock()

    Private slot called by the context menu to unlock files in the repository.

    SvnProjectBrowserHelper.__SVNUrlDiff

    __SVNUrlDiff()

    Private slot called by the context menu to show the difference of a file of two repository URLs.

    This gives the chance to enter the repository URLs to compare.

    SvnProjectBrowserHelper.__itemsHaveFiles

    __itemsHaveFiles(items)

    Private method to check, if items contain file type items.

    items
    items to check (list of QTreeWidgetItems)
    Returns:
    flag indicating items contain file type items (boolean)

    SvnProjectBrowserHelper._addVCSMenu

    _addVCSMenu(mainMenu)

    Protected method used to add the VCS menu to all project browsers.

    mainMenu
    reference to the menu to be amended

    SvnProjectBrowserHelper._addVCSMenuBack

    _addVCSMenuBack(mainMenu)

    Protected method used to add the VCS menu to all project browsers.

    mainMenu
    reference to the menu to be amended

    SvnProjectBrowserHelper._addVCSMenuDir

    _addVCSMenuDir(mainMenu)

    Protected method used to add the VCS menu to all project browsers.

    mainMenu
    reference to the menu to be amended

    SvnProjectBrowserHelper._addVCSMenuDirMulti

    _addVCSMenuDirMulti(mainMenu)

    Protected method used to add the VCS menu to all project browsers.

    mainMenu
    reference to the menu to be amended

    SvnProjectBrowserHelper._addVCSMenuMulti

    _addVCSMenuMulti(mainMenu)

    Protected method used to add the VCS menu for multi selection to all project browsers.

    mainMenu
    reference to the menu to be amended

    SvnProjectBrowserHelper.showContextMenu

    showContextMenu(menu, standardItems)

    Slot called before the context menu is shown.

    It enables/disables the VCS menu entries depending on the overall VCS status and the file status.

    menu
    reference to the menu to be shown
    standardItems
    array of standard items that need activation/deactivation depending on the overall VCS status

    SvnProjectBrowserHelper.showContextMenuDir

    showContextMenuDir(menu, standardItems)

    Slot called before the context menu is shown.

    It enables/disables the VCS menu entries depending on the overall VCS status and the directory status.

    menu
    reference to the menu to be shown
    standardItems
    array of standard items that need activation/deactivation depending on the overall VCS status

    SvnProjectBrowserHelper.showContextMenuDirMulti

    showContextMenuDirMulti(menu, standardItems)

    Slot called before the context menu is shown.

    It enables/disables the VCS menu entries depending on the overall VCS status and the directory status.

    menu
    reference to the menu to be shown
    standardItems
    array of standard items that need activation/deactivation depending on the overall VCS status

    SvnProjectBrowserHelper.showContextMenuMulti

    showContextMenuMulti(menu, standardItems)

    Slot called before the context menu (multiple selections) is shown.

    It enables/disables the VCS menu entries depending on the overall VCS status and the files status.

    menu
    reference to the menu to be shown
    standardItems
    array of standard items that need activation/deactivation depending on the overall VCS status

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Debugger.DebuggerInterfacePython3.html0000644000175000001440000000013212261331350031026 xustar000000000000000030 mtime=1388688104.733228171 30 atime=1389081085.066724362 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Debugger.DebuggerInterfacePython3.html0000644000175000001440000007004712261331350030570 0ustar00detlevusers00000000000000 eric4.Debugger.DebuggerInterfacePython3

    eric4.Debugger.DebuggerInterfacePython3

    Module implementing the Python3 debugger interface for the debug server.

    Global Attributes

    ClientDefaultCapabilities

    Classes

    DebuggerInterfacePython3 Class implementing the Python debugger interface for the debug server.

    Functions

    getRegistryData Module function to get characterising data for the debugger interface.


    DebuggerInterfacePython3

    Class implementing the Python debugger interface for the debug server.

    Derived from

    QObject

    Class Attributes

    None

    Class Methods

    None

    Methods

    DebuggerInterfacePython3 Constructor
    __askForkTo Private method to ask the user which branch of a fork to follow.
    __identityTranslation Private method to perform the identity path translation.
    __parseClientLine Private method to handle data from the client.
    __remoteTranslation Private method to perform the path translation.
    __sendCommand Private method to send a single line command to the client.
    __startProcess Private method to start the debugger client process.
    flush Public slot to flush the queue.
    getClientCapabilities Public method to retrieve the debug clients capabilities.
    isConnected Public method to test, if a debug client has connected.
    newConnection Public slot to handle a new connection.
    remoteBanner Public slot to get the banner info of the remote client.
    remoteBreakpoint Public method to set or clear a breakpoint.
    remoteBreakpointEnable Public method to enable or disable a breakpoint.
    remoteBreakpointIgnore Public method to ignore a breakpoint the next couple of occurrences.
    remoteCapabilities Public slot to get the debug clients capabilities.
    remoteClientSetFilter Public method to set a variables filter list.
    remoteClientVariable Public method to request the variables of the debugged program.
    remoteClientVariables Public method to request the variables of the debugged program.
    remoteCompletion Public slot to get the a list of possible commandline completions from the remote client.
    remoteContinue Public method to continue the debugged program.
    remoteCoverage Public method to load a new program to collect coverage data.
    remoteEnvironment Public method to set the environment for a program to debug, run, ...
    remoteEval Public method to evaluate arg in the current context of the debugged program.
    remoteExec Public method to execute stmt in the current context of the debugged program.
    remoteLoad Public method to load a new program to debug.
    remoteProfile Public method to load a new program to collect profiling data.
    remoteRawInput Public method to send the raw input to the debugged program.
    remoteRun Public method to load a new program to run.
    remoteSetThread Public method to request to set the given thread as current thread.
    remoteStatement Public method to execute a Python statement.
    remoteStep Public method to single step the debugged program.
    remoteStepOut Public method to step out the debugged program.
    remoteStepOver Public method to step over the debugged program.
    remoteStepQuit Public method to stop the debugged program.
    remoteThreadList Public method to request the list of threads from the client.
    remoteUTPrepare Public method to prepare a new unittest run.
    remoteUTRun Public method to start a unittest run.
    remoteUTStop Public method to stop a unittest run.
    remoteWatchpoint Public method to set or clear a watch expression.
    remoteWatchpointEnable Public method to enable or disable a watch expression.
    remoteWatchpointIgnore Public method to ignore a watch expression the next couple of occurrences.
    shutdown Public method to cleanly shut down.
    startRemote Public method to start a remote Python interpreter.
    startRemoteForProject Public method to start a remote Python interpreter for a project.

    Static Methods

    None

    DebuggerInterfacePython3 (Constructor)

    DebuggerInterfacePython3(debugServer, passive)

    Constructor

    debugServer
    reference to the debug server (DebugServer)
    passive
    flag indicating passive connection mode (boolean)

    DebuggerInterfacePython3.__askForkTo

    __askForkTo()

    Private method to ask the user which branch of a fork to follow.

    DebuggerInterfacePython3.__identityTranslation

    __identityTranslation(fn, remote2local = True)

    Private method to perform the identity path translation.

    fn
    filename to be translated (string or QString)
    remote2local
    flag indicating the direction of translation (False = local to remote, True = remote to local [default])
    Returns:
    translated filename (string)

    DebuggerInterfacePython3.__parseClientLine

    __parseClientLine()

    Private method to handle data from the client.

    DebuggerInterfacePython3.__remoteTranslation

    __remoteTranslation(fn, remote2local = True)

    Private method to perform the path translation.

    fn
    filename to be translated (string or QString)
    remote2local
    flag indicating the direction of translation (False = local to remote, True = remote to local [default])
    Returns:
    translated filename (string)

    DebuggerInterfacePython3.__sendCommand

    __sendCommand(cmd)

    Private method to send a single line command to the client.

    cmd
    command to send to the debug client (string)

    DebuggerInterfacePython3.__startProcess

    __startProcess(program, arguments, environment = None)

    Private method to start the debugger client process.

    program
    name of the executable to start (string)
    arguments
    arguments to be passed to the program (list of string)
    environment
    dictionary of environment settings to pass (dict of string)
    Returns:
    the process object (QProcess) or None and an error string (QString)

    DebuggerInterfacePython3.flush

    flush()

    Public slot to flush the queue.

    DebuggerInterfacePython3.getClientCapabilities

    getClientCapabilities()

    Public method to retrieve the debug clients capabilities.

    Returns:
    debug client capabilities (integer)

    DebuggerInterfacePython3.isConnected

    isConnected()

    Public method to test, if a debug client has connected.

    Returns:
    flag indicating the connection status (boolean)

    DebuggerInterfacePython3.newConnection

    newConnection(sock)

    Public slot to handle a new connection.

    sock
    reference to the socket object (QTcpSocket)
    Returns:
    flag indicating success (boolean)

    DebuggerInterfacePython3.remoteBanner

    remoteBanner()

    Public slot to get the banner info of the remote client.

    DebuggerInterfacePython3.remoteBreakpoint

    remoteBreakpoint(fn, line, set, cond = None, temp = False)

    Public method to set or clear a breakpoint.

    fn
    filename the breakpoint belongs to (string)
    line
    linenumber of the breakpoint (int)
    set
    flag indicating setting or resetting a breakpoint (boolean)
    cond
    condition of the breakpoint (string)
    temp
    flag indicating a temporary breakpoint (boolean)

    DebuggerInterfacePython3.remoteBreakpointEnable

    remoteBreakpointEnable(fn, line, enable)

    Public method to enable or disable a breakpoint.

    fn
    filename the breakpoint belongs to (string)
    line
    linenumber of the breakpoint (int)
    enable
    flag indicating enabling or disabling a breakpoint (boolean)

    DebuggerInterfacePython3.remoteBreakpointIgnore

    remoteBreakpointIgnore(fn, line, count)

    Public method to ignore a breakpoint the next couple of occurrences.

    fn
    filename the breakpoint belongs to (string)
    line
    linenumber of the breakpoint (int)
    count
    number of occurrences to ignore (int)

    DebuggerInterfacePython3.remoteCapabilities

    remoteCapabilities()

    Public slot to get the debug clients capabilities.

    DebuggerInterfacePython3.remoteClientSetFilter

    remoteClientSetFilter(scope, filter)

    Public method to set a variables filter list.

    scope
    the scope of the variables (0 = local, 1 = global)
    filter
    regexp string for variable names to filter out (string)

    DebuggerInterfacePython3.remoteClientVariable

    remoteClientVariable(scope, filter, var, framenr = 0)

    Public method to request the variables of the debugged program.

    scope
    the scope of the variables (0 = local, 1 = global)
    filter
    list of variable types to filter out (list of int)
    var
    list encoded name of variable to retrieve (string)
    framenr
    framenumber of the variables to retrieve (int)

    DebuggerInterfacePython3.remoteClientVariables

    remoteClientVariables(scope, filter, framenr = 0)

    Public method to request the variables of the debugged program.

    scope
    the scope of the variables (0 = local, 1 = global)
    filter
    list of variable types to filter out (list of int)
    framenr
    framenumber of the variables to retrieve (int)

    DebuggerInterfacePython3.remoteCompletion

    remoteCompletion(text)

    Public slot to get the a list of possible commandline completions from the remote client.

    text
    the text to be completed (string or QString)

    DebuggerInterfacePython3.remoteContinue

    remoteContinue(special = False)

    Public method to continue the debugged program.

    special
    flag indicating a special continue operation

    DebuggerInterfacePython3.remoteCoverage

    remoteCoverage(fn, argv, wd, erase = False)

    Public method to load a new program to collect coverage data.

    fn
    the filename to run (string)
    argv
    the commandline arguments to pass to the program (string or QString)
    wd
    the working directory for the program (string)
    erase=
    flag indicating that coverage info should be cleared first (boolean)

    DebuggerInterfacePython3.remoteEnvironment

    remoteEnvironment(env)

    Public method to set the environment for a program to debug, run, ...

    env
    environment settings (dictionary)

    DebuggerInterfacePython3.remoteEval

    remoteEval(arg)

    Public method to evaluate arg in the current context of the debugged program.

    arg
    the arguments to evaluate (string)

    DebuggerInterfacePython3.remoteExec

    remoteExec(stmt)

    Public method to execute stmt in the current context of the debugged program.

    stmt
    statement to execute (string)

    DebuggerInterfacePython3.remoteLoad

    remoteLoad(fn, argv, wd, traceInterpreter = False, autoContinue = True, autoFork = False, forkChild = False)

    Public method to load a new program to debug.

    fn
    the filename to debug (string)
    argv
    the commandline arguments to pass to the program (string or QString)
    wd
    the working directory for the program (string)
    traceInterpreter=
    flag indicating if the interpreter library should be traced as well (boolean)
    autoContinue=
    flag indicating, that the debugger should not stop at the first executable line (boolean)
    autoFork=
    flag indicating the automatic fork mode (boolean)
    forkChild=
    flag indicating to debug the child after forking (boolean)

    DebuggerInterfacePython3.remoteProfile

    remoteProfile(fn, argv, wd, erase = False)

    Public method to load a new program to collect profiling data.

    fn
    the filename to run (string)
    argv
    the commandline arguments to pass to the program (string or QString)
    wd
    the working directory for the program (string)
    erase=
    flag indicating that timing info should be cleared first (boolean)

    DebuggerInterfacePython3.remoteRawInput

    remoteRawInput(s)

    Public method to send the raw input to the debugged program.

    s
    the raw input (string)

    DebuggerInterfacePython3.remoteRun

    remoteRun(fn, argv, wd, autoFork = False, forkChild = False)

    Public method to load a new program to run.

    fn
    the filename to run (string)
    argv
    the commandline arguments to pass to the program (string or QString)
    wd
    the working directory for the program (string)
    autoFork=
    flag indicating the automatic fork mode (boolean)
    forkChild=
    flag indicating to debug the child after forking (boolean)

    DebuggerInterfacePython3.remoteSetThread

    remoteSetThread(tid)

    Public method to request to set the given thread as current thread.

    tid
    id of the thread (integer)

    DebuggerInterfacePython3.remoteStatement

    remoteStatement(stmt)

    Public method to execute a Python statement.

    stmt
    the Python statement to execute (string). It should not have a trailing newline.

    DebuggerInterfacePython3.remoteStep

    remoteStep()

    Public method to single step the debugged program.

    DebuggerInterfacePython3.remoteStepOut

    remoteStepOut()

    Public method to step out the debugged program.

    DebuggerInterfacePython3.remoteStepOver

    remoteStepOver()

    Public method to step over the debugged program.

    DebuggerInterfacePython3.remoteStepQuit

    remoteStepQuit()

    Public method to stop the debugged program.

    DebuggerInterfacePython3.remoteThreadList

    remoteThreadList()

    Public method to request the list of threads from the client.

    DebuggerInterfacePython3.remoteUTPrepare

    remoteUTPrepare(fn, tn, tfn, cov, covname, coverase)

    Public method to prepare a new unittest run.

    fn
    the filename to load (string)
    tn
    the testname to load (string)
    tfn
    the test function name to load tests from (string)
    cov
    flag indicating collection of coverage data is requested
    covname
    filename to be used to assemble the coverage caches filename
    coverase
    flag indicating erasure of coverage data is requested

    DebuggerInterfacePython3.remoteUTRun

    remoteUTRun()

    Public method to start a unittest run.

    DebuggerInterfacePython3.remoteUTStop

    remoteUTStop()

    Public method to stop a unittest run.

    DebuggerInterfacePython3.remoteWatchpoint

    remoteWatchpoint(cond, set, temp = False)

    Public method to set or clear a watch expression.

    cond
    expression of the watch expression (string)
    set
    flag indicating setting or resetting a watch expression (boolean)
    temp
    flag indicating a temporary watch expression (boolean)

    DebuggerInterfacePython3.remoteWatchpointEnable

    remoteWatchpointEnable(cond, enable)

    Public method to enable or disable a watch expression.

    cond
    expression of the watch expression (string)
    enable
    flag indicating enabling or disabling a watch expression (boolean)

    DebuggerInterfacePython3.remoteWatchpointIgnore

    remoteWatchpointIgnore(cond, count)

    Public method to ignore a watch expression the next couple of occurrences.

    cond
    expression of the watch expression (string)
    count
    number of occurrences to ignore (int)

    DebuggerInterfacePython3.shutdown

    shutdown()

    Public method to cleanly shut down.

    It closes our socket and shuts down the debug client. (Needed on Win OS)

    DebuggerInterfacePython3.startRemote

    startRemote(port, runInConsole)

    Public method to start a remote Python interpreter.

    port
    portnumber the debug server is listening on (integer)
    runInConsole
    flag indicating to start the debugger in a console window (boolean)
    Returns:
    client process object (QProcess) and a flag to indicate a network connection (boolean)

    DebuggerInterfacePython3.startRemoteForProject

    startRemoteForProject(port, runInConsole)

    Public method to start a remote Python interpreter for a project.

    port
    portnumber the debug server is listening on (integer)
    runInConsole
    flag indicating to start the debugger in a console window (boolean)
    Returns:
    client process object (QProcess) and a flag to indicate a network connection (boolean)


    getRegistryData

    getRegistryData()

    Module function to get characterising data for the debugger interface.

    Returns:
    list of the following data. Client type (string), client capabilities (integer), client type association (list of strings)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Debugger.DebugViewer.html0000644000175000001440000000013212261331350026404 xustar000000000000000030 mtime=1388688104.713228161 30 atime=1389081085.066724362 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Debugger.DebugViewer.html0000644000175000001440000002721612261331350026146 0ustar00detlevusers00000000000000 eric4.Debugger.DebugViewer

    eric4.Debugger.DebugViewer

    Module implementing a widget containing various debug related views.

    The views avaliable are:

    • variables viewer for global variables
    • variables viewer for local variables
    • viewer for breakpoints
    • viewer for watch expressions
    • viewer for exceptions
    • viewer for threads
    • a file browser (optional)
    • an interpreter shell (optional)

    Global Attributes

    None

    Classes

    DebugViewer Class implementing a widget conatining various debug related views.

    Functions

    None


    DebugViewer

    Class implementing a widget conatining various debug related views.

    The individual tabs contain the interpreter shell (optional), the filesystem browser (optional), the two variables viewers (global and local), a breakpoint viewer, a watch expression viewer and the exception logger. Additionally a list of all threads is shown.

    Signals

    sourceFile(string, int)
    emitted to open a source file at a line

    Derived from

    QWidget

    Class Attributes

    None

    Class Methods

    None

    Methods

    DebugViewer Constructor
    __frameSelected Private slot to handle the selection of a new stack frame number.
    __setGlobalsFilter Private slot to set the global variable filter
    __setLocalsFilter Private slot to set the local variable filter
    __showSource Private slot to handle the source button press to show the selected file.
    __threadSelected Private slot to handle the selection of a thread in the thread list.
    currentWidget Public method to get a reference to the current widget.
    handleClientStack Public slot to show the call stack of the program being debugged.
    handleDebuggingStarted Public slot to handle the start of a debugging session.
    handleRawInput Pulic slot to handle the switch to the shell in raw input mode.
    handleResetUI Public method to reset the SBVviewer.
    preferencesChanged Public slot to handle the preferencesChanged signal.
    restoreCurrentPage Public slot to restore the previously saved page.
    saveCurrentPage Public slot to save the current page.
    setCurrentWidget Public slot to set the current page based on the given widget.
    setDebugger Public method to set a reference to the Debug UI.
    setVariablesFilter Public slot to set the local variables filter.
    showThreadList Public method to show the thread list.
    showVariable Public method to show the variables in the respective window.
    showVariables Public method to show the variables in the respective window.
    showVariablesTab Public method to make a variables tab visible.

    Static Methods

    None

    DebugViewer (Constructor)

    DebugViewer(debugServer, docked, vm, parent = None, embeddedShell = True, embeddedBrowser = True)

    Constructor

    debugServer
    reference to the debug server object
    docked
    flag indicating a dock window
    vm
    reference to the viewmanager object
    parent
    parent widget (QWidget)
    embeddedShell
    flag indicating whether the shell should be included. This flag is set to False by those layouts, that have the interpreter shell in a separate window.
    embeddedBrowser
    flag indicating whether the file browser should be included. This flag is set to False by those layouts, that have the file browser in a separate window or embedded in the project browser instead.

    DebugViewer.__frameSelected

    __frameSelected(frmnr)

    Private slot to handle the selection of a new stack frame number.

    frmnr
    frame number (0 is the current frame) (int)

    DebugViewer.__setGlobalsFilter

    __setGlobalsFilter()

    Private slot to set the global variable filter

    DebugViewer.__setLocalsFilter

    __setLocalsFilter()

    Private slot to set the local variable filter

    DebugViewer.__showSource

    __showSource()

    Private slot to handle the source button press to show the selected file.

    DebugViewer.__threadSelected

    __threadSelected(current, previous)

    Private slot to handle the selection of a thread in the thread list.

    current
    reference to the new current item (QTreeWidgetItem)
    previous
    reference to the previous current item (QTreeWidgetItem)

    DebugViewer.currentWidget

    currentWidget()

    Public method to get a reference to the current widget.

    Returns:
    reference to the current widget (QWidget)

    DebugViewer.handleClientStack

    handleClientStack(stack)

    Public slot to show the call stack of the program being debugged.

    DebugViewer.handleDebuggingStarted

    handleDebuggingStarted()

    Public slot to handle the start of a debugging session.

    This slot sets the variables filter expressions.

    DebugViewer.handleRawInput

    handleRawInput()

    Pulic slot to handle the switch to the shell in raw input mode.

    DebugViewer.handleResetUI

    handleResetUI()

    Public method to reset the SBVviewer.

    DebugViewer.preferencesChanged

    preferencesChanged()

    Public slot to handle the preferencesChanged signal.

    DebugViewer.restoreCurrentPage

    restoreCurrentPage()

    Public slot to restore the previously saved page.

    DebugViewer.saveCurrentPage

    saveCurrentPage()

    Public slot to save the current page.

    DebugViewer.setCurrentWidget

    setCurrentWidget(widget)

    Public slot to set the current page based on the given widget.

    widget
    reference to the widget (QWidget)

    DebugViewer.setDebugger

    setDebugger(debugUI)

    Public method to set a reference to the Debug UI.

    debugUI
    reference to the DebugUI objectTrees

    DebugViewer.setVariablesFilter

    setVariablesFilter(globalsFilter, localsFilter)

    Public slot to set the local variables filter.

    globalsFilter
    filter list for global variable types (list of int)
    localsFilter
    filter list for local variable types (list of int)

    DebugViewer.showThreadList

    showThreadList(currentID, threadList)

    Public method to show the thread list.

    currentID
    id of the current thread (integer)
    threadList
    list of dictionaries containing the thread data

    DebugViewer.showVariable

    showVariable(vlist, globals)

    Public method to show the variables in the respective window.

    vlist
    list of variables to display
    globals
    flag indicating global/local state

    DebugViewer.showVariables

    showVariables(vlist, globals)

    Public method to show the variables in the respective window.

    vlist
    list of variables to display
    globals
    flag indicating global/local state

    DebugViewer.showVariablesTab

    showVariablesTab(globals)

    Public method to make a variables tab visible.

    globals
    flag indicating global/local state

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsSubversion.SvnCom0000644000175000001440000000013212261331353031304 xustar000000000000000030 mtime=1388688107.006229313 30 atime=1389081085.066724362 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsSubversion.SvnCommandDialog.html0000644000175000001440000000707412261331353033771 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsSubversion.SvnCommandDialog

    eric4.Plugins.VcsPlugins.vcsSubversion.SvnCommandDialog

    Module implementing the Subversion command dialog.

    Global Attributes

    None

    Classes

    SvnCommandDialog Class implementing the Subversion command dialog.

    Functions

    None


    SvnCommandDialog

    Class implementing the Subversion command dialog.

    It implements a dialog that is used to enter an arbitrary subversion command. It asks the user to enter the commandline parameters and the working directory.

    Derived from

    QDialog, Ui_SvnCommandDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnCommandDialog Constructor
    getData Public method to retrieve the data entered into this dialog.
    on_commandCombo_editTextChanged Private method used to enable/disable the OK-button.
    on_dirButton_clicked Private method used to open a directory selection dialog.

    Static Methods

    None

    SvnCommandDialog (Constructor)

    SvnCommandDialog(argvList, wdList, ppath, parent = None)

    Constructor

    argvList
    history list of commandline arguments (QStringList)
    wdList
    history list of working directories (QStringList)
    ppath
    pathname of the project directory (string)
    parent
    parent widget of this dialog (QWidget)

    SvnCommandDialog.getData

    getData()

    Public method to retrieve the data entered into this dialog.

    Returns:
    a tuple of argv, workdir

    SvnCommandDialog.on_commandCombo_editTextChanged

    on_commandCombo_editTextChanged(text)

    Private method used to enable/disable the OK-button.

    text
    ignored

    SvnCommandDialog.on_dirButton_clicked

    on_dirButton_clicked()

    Private method used to open a directory selection dialog.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DocumentationTools.IndexGenerator.html0000644000175000001440000000013212261331352031222 xustar000000000000000030 mtime=1388688106.077228846 30 atime=1389081085.067724362 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.DocumentationTools.IndexGenerator.html0000644000175000001440000000764512261331352030770 0ustar00detlevusers00000000000000 eric4.DocumentationTools.IndexGenerator

    eric4.DocumentationTools.IndexGenerator

    Module implementing the index generator for the builtin documentation generator.

    Global Attributes

    None

    Classes

    IndexGenerator Class implementing the index generator for the builtin documentation generator.

    Functions

    None


    IndexGenerator

    Class implementing the index generator for the builtin documentation generator.

    Derived from

    object

    Class Attributes

    None

    Class Methods

    None

    Methods

    IndexGenerator Constructor
    __writeIndex Private method to generate an index file for a package.
    remember Public method to remember a documentation file.
    writeIndices Public method to generate all index files.

    Static Methods

    None

    IndexGenerator (Constructor)

    IndexGenerator(outputDir, colors, stylesheet = None)

    Constructor

    outputDir
    The output directory for the files. (string)
    colors
    Dictionary specifying the various colors for the output. (dictionary of strings)
    stylesheet
    the style to be used for the generated pages (string)

    IndexGenerator.__writeIndex

    __writeIndex(packagename, package)

    Private method to generate an index file for a package.

    packagename
    The name of the package. (string)
    package
    A dictionary with information about the package.
    Returns:
    The name of the generated index file.

    IndexGenerator.remember

    remember(file, moduleDocument, basename="")

    Public method to remember a documentation file.

    file
    The filename to be remembered. (string)
    moduleDocument
    The ModuleDocument object containing the information for the file.
    basename
    The basename of the file hierarchy to be documented. The basename is stripped off the filename if it starts with the basename.

    IndexGenerator.writeIndices

    writeIndices(basename = "")

    Public method to generate all index files.

    basename
    The basename of the file hierarchy to be documented. The basename is stripped off the filename if it starts with the basename.

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ConfigurationPages.HelpView0000644000175000001440000000013212261331353031262 xustar000000000000000030 mtime=1388688107.474229548 30 atime=1389081085.067724362 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.HelpViewersPage.html0000644000175000001440000001021112261331353033261 0ustar00detlevusers00000000000000 eric4.Preferences.ConfigurationPages.HelpViewersPage

    eric4.Preferences.ConfigurationPages.HelpViewersPage

    Module implementing the Help Viewers configuration page.

    Global Attributes

    None

    Classes

    HelpViewersPage Class implementing the Help Viewers configuration page.

    Functions

    create Module function to create the configuration page.


    HelpViewersPage

    Class implementing the Help Viewers configuration page.

    Derived from

    ConfigurationPageBase, Ui_HelpViewersPage

    Class Attributes

    None

    Class Methods

    None

    Methods

    HelpViewersPage Constructor
    on_chmviewerButton_clicked Private slot to handle the CHM viewer selection.
    on_customViewerSelectionButton_clicked Private slot to handle the custom viewer selection.
    on_pdfviewerButton_clicked Private slot to handle the PDF viewer selection.
    on_webbrowserButton_clicked Private slot to handle the Web browser selection.
    save Public slot to save the Help Viewers configuration.

    Static Methods

    None

    HelpViewersPage (Constructor)

    HelpViewersPage()

    Constructor

    HelpViewersPage.on_chmviewerButton_clicked

    on_chmviewerButton_clicked()

    Private slot to handle the CHM viewer selection.

    HelpViewersPage.on_customViewerSelectionButton_clicked

    on_customViewerSelectionButton_clicked()

    Private slot to handle the custom viewer selection.

    HelpViewersPage.on_pdfviewerButton_clicked

    on_pdfviewerButton_clicked()

    Private slot to handle the PDF viewer selection.

    HelpViewersPage.on_webbrowserButton_clicked

    on_webbrowserButton_clicked()

    Private slot to handle the Web browser selection.

    HelpViewersPage.save

    save()

    Public slot to save the Help Viewers configuration.



    create

    create(dlg)

    Module function to create the configuration page.

    dlg
    reference to the configuration dialog

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ToolGroupConfigurationDialo0000644000175000001440000000013212261331350031401 xustar000000000000000030 mtime=1388688104.558228084 30 atime=1389081085.068724362 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ToolGroupConfigurationDialog.html0000644000175000001440000001445612261331350032257 0ustar00detlevusers00000000000000 eric4.Preferences.ToolGroupConfigurationDialog

    eric4.Preferences.ToolGroupConfigurationDialog

    Module implementing a configuration dialog for the tools menu.

    Global Attributes

    None

    Classes

    ToolGroupConfigurationDialog Class implementing a configuration dialog for the tool groups.

    Functions

    None


    ToolGroupConfigurationDialog

    Class implementing a configuration dialog for the tool groups.

    Derived from

    QDialog, Ui_ToolGroupConfigurationDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    ToolGroupConfigurationDialog Constructor
    __swap Private method used two swap two list entries given by their index.
    getToolGroups Public method to retrieve the tool groups.
    on_addButton_clicked Private slot to add a new entry.
    on_changeButton_clicked Private slot to change an entry.
    on_deleteButton_clicked Private slot to delete the selected entry.
    on_downButton_clicked Private slot to move an entry down in the list.
    on_groupsList_currentRowChanged Private slot to set the lineedits depending on the selected entry.
    on_newButton_clicked Private slot to clear all entry fields.
    on_upButton_clicked Private slot to move an entry up in the list.

    Static Methods

    None

    ToolGroupConfigurationDialog (Constructor)

    ToolGroupConfigurationDialog(toolGroups, currentGroup, parent = None)

    Constructor

    toolGroups
    list of configured tool groups
    currentGroup
    number of the active group (integer)
    parent
    parent widget (QWidget)

    ToolGroupConfigurationDialog.__swap

    __swap(itm1, itm2)

    Private method used two swap two list entries given by their index.

    itm1
    index of first entry (int)
    itm2
    index of second entry (int)

    ToolGroupConfigurationDialog.getToolGroups

    getToolGroups()

    Public method to retrieve the tool groups.

    Returns:
    a list of lists containing the group name and the tool group entries

    ToolGroupConfigurationDialog.on_addButton_clicked

    on_addButton_clicked()

    Private slot to add a new entry.

    ToolGroupConfigurationDialog.on_changeButton_clicked

    on_changeButton_clicked()

    Private slot to change an entry.

    ToolGroupConfigurationDialog.on_deleteButton_clicked

    on_deleteButton_clicked()

    Private slot to delete the selected entry.

    ToolGroupConfigurationDialog.on_downButton_clicked

    on_downButton_clicked()

    Private slot to move an entry down in the list.

    ToolGroupConfigurationDialog.on_groupsList_currentRowChanged

    on_groupsList_currentRowChanged(row)

    Private slot to set the lineedits depending on the selected entry.

    row
    the row of the selected entry (integer)

    ToolGroupConfigurationDialog.on_newButton_clicked

    on_newButton_clicked()

    Private slot to clear all entry fields.

    ToolGroupConfigurationDialog.on_upButton_clicked

    on_upButton_clicked()

    Private slot to move an entry up in the list.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.E4Gui.E4ToolBox.html0000644000175000001440000000013212261331350025144 xustar000000000000000030 mtime=1388688104.417228012 30 atime=1389081085.068724362 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.E4Gui.E4ToolBox.html0000644000175000001440000001224012261331350024675 0ustar00detlevusers00000000000000 eric4.E4Gui.E4ToolBox

    eric4.E4Gui.E4ToolBox

    Module implementing a horizontal and a vertical toolbox class.

    Global Attributes

    None

    Classes

    E4HorizontalToolBox Class implementing a vertical QToolBox like widget.
    E4VerticalToolBox Class implementing a ToolBox class substituting QToolBox to support wheel events.

    Functions

    None


    E4HorizontalToolBox

    Class implementing a vertical QToolBox like widget.

    Derived from

    E4TabWidget

    Class Attributes

    None

    Class Methods

    None

    Methods

    E4HorizontalToolBox Constructor
    addItem Public method to add a widget to the toolbox.
    insertItem Public method to add a widget to the toolbox.
    setItemEnabled Public method to set the enabled state of an item.
    setItemToolTip Public method to set the tooltip of an item.

    Static Methods

    None

    E4HorizontalToolBox (Constructor)

    E4HorizontalToolBox(parent = None)

    Constructor

    parent
    reference to the parent widget (QWidget)

    E4HorizontalToolBox.addItem

    addItem(widget, icon, text)

    Public method to add a widget to the toolbox.

    widget
    reference to the widget to be added (QWidget)
    icon
    the icon to be shown (QIcon)
    text
    the text to be shown (QString)
    Returns:
    index of the added widget (integer)

    E4HorizontalToolBox.insertItem

    insertItem(index, widget, icon, text)

    Public method to add a widget to the toolbox.

    index
    position at which the widget should be inserted (integer)
    widget
    reference to the widget to be added (QWidget)
    icon
    the icon to be shown (QIcon)
    text
    the text to be shown (QString)
    Returns:
    index of the added widget (integer)

    E4HorizontalToolBox.setItemEnabled

    setItemEnabled(index, enabled)

    Public method to set the enabled state of an item.

    index
    index of the item (integer)
    enabled
    flag indicating the enabled state (boolean)

    E4HorizontalToolBox.setItemToolTip

    setItemToolTip(index, toolTip)

    Public method to set the tooltip of an item.

    index
    index of the item (integer)
    toolTip
    tooltip text to be set (QString)


    E4VerticalToolBox

    Class implementing a ToolBox class substituting QToolBox to support wheel events.

    Derived from

    QToolBox

    Class Attributes

    None

    Class Methods

    None

    Methods

    E4VerticalToolBox Constructor

    Static Methods

    None

    E4VerticalToolBox (Constructor)

    E4VerticalToolBox(parent = None)

    Constructor

    parent
    reference to the parent widget (QWidget)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DebugClients.Python.AsyncFile.html0000644000175000001440000000013212261331354030161 xustar000000000000000030 mtime=1388688108.206229915 30 atime=1389081085.068724362 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.DebugClients.Python.AsyncFile.html0000644000175000001440000002223012261331354027712 0ustar00detlevusers00000000000000 eric4.DebugClients.Python.AsyncFile

    eric4.DebugClients.Python.AsyncFile

    Module implementing an asynchronous file like socket interface for the debugger.

    Global Attributes

    None

    Classes

    AsyncFile Class wrapping a socket object with a file interface.

    Functions

    AsyncPendingWrite Module function to check for data to be written.


    AsyncFile

    Class wrapping a socket object with a file interface.

    Derived from

    object

    Class Attributes

    maxbuffersize
    maxtries

    Class Methods

    None

    Methods

    AsyncFile Constructor
    __checkMode Private method to check the mode.
    __nWrite Private method to write a specific number of pending bytes.
    close Public method to close the file.
    fileno Public method returning the file number.
    flush Public method to write all pending bytes.
    isatty Public method to indicate whether a tty interface is supported.
    pendingWrite Public method that returns the number of bytes waiting to be written.
    read Public method to read bytes from this file.
    read_p Public method to read bytes from this file.
    readline Public method to read one line from this file.
    readline_p Public method to read a line from this file.
    readlines Public method to read all lines from this file.
    seek Public method to move the filepointer.
    tell Public method to get the filepointer position.
    truncate Public method to truncate the file.
    write Public method to write a string to the file.
    writelines Public method to write a list of strings to the file.

    Static Methods

    None

    AsyncFile (Constructor)

    AsyncFile(sock, mode, name)

    Constructor

    sock
    the socket object being wrapped
    mode
    mode of this file (string)
    name
    name of this file (string)

    AsyncFile.__checkMode

    __checkMode(mode)

    Private method to check the mode.

    This method checks, if an operation is permitted according to the mode of the file. If it is not, an IOError is raised.

    mode
    the mode to be checked (string)

    AsyncFile.__nWrite

    __nWrite(n)

    Private method to write a specific number of pending bytes.

    n
    the number of bytes to be written (int)

    AsyncFile.close

    close(closeit=0)

    Public method to close the file.

    closeit
    flag to indicate a close ordered by the debugger code (boolean)

    AsyncFile.fileno

    fileno()

    Public method returning the file number.

    Returns:
    file number (int)

    AsyncFile.flush

    flush()

    Public method to write all pending bytes.

    AsyncFile.isatty

    isatty()

    Public method to indicate whether a tty interface is supported.

    Returns:
    always false

    AsyncFile.pendingWrite

    pendingWrite()

    Public method that returns the number of bytes waiting to be written.

    Returns:
    the number of bytes to be written (int)

    AsyncFile.read

    read(size=-1)

    Public method to read bytes from this file.

    size
    maximum number of bytes to be read (int)
    Returns:
    the bytes read (any)

    AsyncFile.read_p

    read_p(size=-1)

    Public method to read bytes from this file.

    size
    maximum number of bytes to be read (int)
    Returns:
    the bytes read (any)

    AsyncFile.readline

    readline(sizehint=-1)

    Public method to read one line from this file.

    sizehint
    hint of the numbers of bytes to be read (int)
    Returns:
    one line read (string)

    AsyncFile.readline_p

    readline_p(size=-1)

    Public method to read a line from this file.

    Note: This method will not block and may return only a part of a line if that is all that is available.

    size
    maximum number of bytes to be read (int)
    Returns:
    one line of text up to size bytes (string)

    AsyncFile.readlines

    readlines(sizehint=-1)

    Public method to read all lines from this file.

    sizehint
    hint of the numbers of bytes to be read (int)
    Returns:
    list of lines read (list of strings)

    AsyncFile.seek

    seek(offset, whence=0)

    Public method to move the filepointer.

    Raises IOError:
    This method is not supported and always raises an IOError.

    AsyncFile.tell

    tell()

    Public method to get the filepointer position.

    Raises IOError:
    This method is not supported and always raises an IOError.

    AsyncFile.truncate

    truncate(size=-1)

    Public method to truncate the file.

    Raises IOError:
    This method is not supported and always raises an IOError.

    AsyncFile.write

    write(s)

    Public method to write a string to the file.

    s
    bytes to be written (string)

    AsyncFile.writelines

    writelines(list)

    Public method to write a list of strings to the file.

    list
    the list to be written (list of string)


    AsyncPendingWrite

    AsyncPendingWrite(file)

    Module function to check for data to be written.

    file
    The file object to be checked (file)
    Returns:
    Flag indicating if there is data wating (int)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.Plugins.ViewManagerPlugins.html0000644000175000001440000000013212261331354030751 xustar000000000000000030 mtime=1388688108.660230143 30 atime=1389081085.068724362 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.Plugins.ViewManagerPlugins.html0000644000175000001440000000242712261331354030510 0ustar00detlevusers00000000000000 eric4.Plugins.ViewManagerPlugins

    eric4.Plugins.ViewManagerPlugins

    Package containing the various view manager plugins.

    Packages

    Listspace Package containing the listspace view manager plugin.
    MdiArea Package containing the mdi area view manager plugin.
    Tabview Package containing the tabview view manager plugin.
    Workspace Package containing the workspace view manager plugin.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.WizardPlugins.PyRegExpWizard.Py0000644000175000001440000000032512261331353031211 xustar0000000000000000123 path=eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.WizardPlugins.PyRegExpWizard.PyRegExpWizardRepeatDialog.html 30 mtime=1388688107.316229468 30 atime=1389081085.069724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.WizardPlugins.PyRegExpWizard.PyRegExpWizardRepe0000644000175000001440000000676512261331353034065 0ustar00detlevusers00000000000000 eric4.Plugins.WizardPlugins.PyRegExpWizard.PyRegExpWizardRepeatDialog

    eric4.Plugins.WizardPlugins.PyRegExpWizard.PyRegExpWizardRepeatDialog

    Module implementing a dialog for entering repeat counts.

    Global Attributes

    None

    Classes

    PyRegExpWizardRepeatDialog Class implementing a dialog for entering repeat counts.

    Functions

    None


    PyRegExpWizardRepeatDialog

    Class implementing a dialog for entering repeat counts.

    Derived from

    QDialog, Ui_PyRegExpWizardRepeatDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    PyRegExpWizardRepeatDialog Constructor
    getRepeat Public method to retrieve the dialog's result.
    on_lowerSpin_valueChanged Private slot to handle the lowerSpin valueChanged signal.
    on_upperSpin_valueChanged Private slot to handle the upperSpin valueChanged signal.

    Static Methods

    None

    PyRegExpWizardRepeatDialog (Constructor)

    PyRegExpWizardRepeatDialog(parent = None)

    Constructor

    parent
    parent widget (QWidget)

    PyRegExpWizardRepeatDialog.getRepeat

    getRepeat()

    Public method to retrieve the dialog's result.

    Returns:
    ready formatted repeat string (string)

    PyRegExpWizardRepeatDialog.on_lowerSpin_valueChanged

    on_lowerSpin_valueChanged(value)

    Private slot to handle the lowerSpin valueChanged signal.

    value
    value of the spinbox (integer)

    PyRegExpWizardRepeatDialog.on_upperSpin_valueChanged

    on_upperSpin_valueChanged(value)

    Private slot to handle the upperSpin valueChanged signal.

    value
    value of the spinbox (integer)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.SpellCheckingDialog.html0000644000175000001440000000013212261331352030350 xustar000000000000000030 mtime=1388688106.189228902 30 atime=1389081085.069724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.SpellCheckingDialog.html0000644000175000001440000001343312261331352030106 0ustar00detlevusers00000000000000 eric4.QScintilla.SpellCheckingDialog

    eric4.QScintilla.SpellCheckingDialog

    Module implementing the spell checking dialog.

    Global Attributes

    None

    Classes

    SpellCheckingDialog Class implementing the spell checking dialog.

    Functions

    None


    SpellCheckingDialog

    Class implementing the spell checking dialog.

    Derived from

    QDialog, Ui_SpellCheckingDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    SpellCheckingDialog Constructor
    __advance Private method to advance to the next error.
    __enableButtons Private method to set the buttons enabled state.
    on_addButton_clicked Private slot to add the current word to the personal word list.
    on_changeEdit_textChanged Private method to handle a change of the replacement text.
    on_ignoreAllButton_clicked Private slot to always ignore the found error.
    on_ignoreButton_clicked Private slot to ignore the found error.
    on_replaceAllButton_clicked Private slot to replace the current word with the given replacement.
    on_replaceButton_clicked Private slot to replace the current word with the given replacement.
    on_suggestionsList_currentTextChanged Private method to handle the selection of a suggestion.

    Static Methods

    None

    SpellCheckingDialog (Constructor)

    SpellCheckingDialog(spellChecker, startPos, endPos, parent = None)

    Constructor

    SpellCheckingDialog.__advance

    __advance()

    Private method to advance to the next error.

    SpellCheckingDialog.__enableButtons

    __enableButtons(enable)

    Private method to set the buttons enabled state.

    SpellCheckingDialog.on_addButton_clicked

    on_addButton_clicked()

    Private slot to add the current word to the personal word list.

    SpellCheckingDialog.on_changeEdit_textChanged

    on_changeEdit_textChanged(text)

    Private method to handle a change of the replacement text.

    text
    contents of the line edit (QString)

    SpellCheckingDialog.on_ignoreAllButton_clicked

    on_ignoreAllButton_clicked()

    Private slot to always ignore the found error.

    SpellCheckingDialog.on_ignoreButton_clicked

    on_ignoreButton_clicked()

    Private slot to ignore the found error.

    SpellCheckingDialog.on_replaceAllButton_clicked

    on_replaceAllButton_clicked()

    Private slot to replace the current word with the given replacement.

    SpellCheckingDialog.on_replaceButton_clicked

    on_replaceButton_clicked()

    Private slot to replace the current word with the given replacement.

    SpellCheckingDialog.on_suggestionsList_currentTextChanged

    on_suggestionsList_currentTextChanged(currentText)

    Private method to handle the selection of a suggestion.

    currentText
    the currently selected text (QString)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsSubversion.SvnBla0000644000175000001440000000013212261331352031263 xustar000000000000000030 mtime=1388688106.952229286 30 atime=1389081085.069724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsSubversion.SvnBlameDialog.html0000644000175000001440000001724512261331352033433 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsSubversion.SvnBlameDialog

    eric4.Plugins.VcsPlugins.vcsSubversion.SvnBlameDialog

    Module implementing a dialog to show the output of the svn blame command.

    Global Attributes

    None

    Classes

    SvnBlameDialog Class implementing a dialog to show the output of the svn blame command.

    Functions

    None


    SvnBlameDialog

    Class implementing a dialog to show the output of the svn blame command.

    Derived from

    QDialog, Ui_SvnBlameDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnBlameDialog Constructor
    __finish Private slot called when the process finished or the user pressed the button.
    __generateItem Private method to generate a tag item in the taglist.
    __procFinished Private slot connected to the finished signal.
    __readStderr Private slot to handle the readyReadStderr signal.
    __readStdout Private slot to handle the readyReadStdout signal.
    __resizeColumns Private method to resize the list columns.
    closeEvent Private slot implementing a close event handler.
    keyPressEvent Protected slot to handle a key press event.
    on_buttonBox_clicked Private slot called by a button of the button box clicked.
    on_input_returnPressed Private slot to handle the press of the return key in the input field.
    on_passwordCheckBox_toggled Private slot to handle the password checkbox toggled.
    on_sendButton_clicked Private slot to send the input to the subversion process.
    start Public slot to start the svn status command.

    Static Methods

    None

    SvnBlameDialog (Constructor)

    SvnBlameDialog(vcs, parent = None)

    Constructor

    vcs
    reference to the vcs object
    parent
    parent widget (QWidget)

    SvnBlameDialog.__finish

    __finish()

    Private slot called when the process finished or the user pressed the button.

    SvnBlameDialog.__generateItem

    __generateItem(revision, author, text)

    Private method to generate a tag item in the taglist.

    revision
    revision string (string or QString)
    author
    author of the tag (string or QString)
    date
    date of the tag (string or QString)
    name
    name (path) of the tag (string or QString)

    SvnBlameDialog.__procFinished

    __procFinished(exitCode, exitStatus)

    Private slot connected to the finished signal.

    exitCode
    exit code of the process (integer)
    exitStatus
    exit status of the process (QProcess.ExitStatus)

    SvnBlameDialog.__readStderr

    __readStderr()

    Private slot to handle the readyReadStderr signal.

    It reads the error output of the process and inserts it into the error pane.

    SvnBlameDialog.__readStdout

    __readStdout()

    Private slot to handle the readyReadStdout signal.

    It reads the output of the process, formats it and inserts it into the contents pane.

    SvnBlameDialog.__resizeColumns

    __resizeColumns()

    Private method to resize the list columns.

    SvnBlameDialog.closeEvent

    closeEvent(e)

    Private slot implementing a close event handler.

    e
    close event (QCloseEvent)

    SvnBlameDialog.keyPressEvent

    keyPressEvent(evt)

    Protected slot to handle a key press event.

    evt
    the key press event (QKeyEvent)

    SvnBlameDialog.on_buttonBox_clicked

    on_buttonBox_clicked(button)

    Private slot called by a button of the button box clicked.

    button
    button that was clicked (QAbstractButton)

    SvnBlameDialog.on_input_returnPressed

    on_input_returnPressed()

    Private slot to handle the press of the return key in the input field.

    SvnBlameDialog.on_passwordCheckBox_toggled

    on_passwordCheckBox_toggled(isOn)

    Private slot to handle the password checkbox toggled.

    isOn
    flag indicating the status of the check box (boolean)

    SvnBlameDialog.on_sendButton_clicked

    on_sendButton_clicked()

    Private slot to send the input to the subversion process.

    SvnBlameDialog.start

    start(fn)

    Public slot to start the svn status command.

    fn
    filename to show the log for (string)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Debugger.StartDialog.html0000644000175000001440000000013112261331350026410 xustar000000000000000029 mtime=1388688104.81022821 30 atime=1389081085.069724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Debugger.StartDialog.html0000644000175000001440000002006712261331350026150 0ustar00detlevusers00000000000000 eric4.Debugger.StartDialog

    eric4.Debugger.StartDialog

    Module implementing the Start Program dialog.

    Global Attributes

    None

    Classes

    StartDialog Class implementing the Start Program dialog.

    Functions

    None


    StartDialog

    Class implementing the Start Program dialog.

    It implements a dialog that is used to start an application for debugging. It asks the user to enter the commandline parameters, the working directory and whether exception reporting should be disabled.

    Derived from

    QDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    StartDialog Constructor
    __clearHistories Private slot to clear the combo boxes lists and record a flag to clear the lists.
    getCoverageData Public method to retrieve the coverage related data entered into this dialog.
    getData Public method to retrieve the data entered into this dialog.
    getDebugData Public method to retrieve the debug related data entered into this dialog.
    getProfilingData Public method to retrieve the profiling related data entered into this dialog.
    getRunData Public method to retrieve the debug related data entered into this dialog.
    on_buttonBox_clicked Private slot called by a button of the button box clicked.
    on_dirButton_clicked Private method used to open a directory selection dialog.
    on_modFuncCombo_editTextChanged Private slot to enable/disable the OK button.

    Static Methods

    None

    StartDialog (Constructor)

    StartDialog(caption, argvList, wdList, envList, exceptions, parent = None, type = 0, modfuncList = None, tracePython = False, autoClearShell = True, autoContinue = True, autoFork = False, forkChild = False)

    Constructor

    caption
    the caption to be displayed (QString)
    argvList
    history list of commandline arguments (QStringList)
    wdList
    history list of working directories (QStringList)
    envList
    history list of environment settings (QStringList)
    exceptions
    exception reporting flag (boolean)
    parent
    parent widget of this dialog (QWidget)
    type
    type of the start dialog
    • 0 = start debug dialog
    • 1 = start run dialog
    • 2 = start coverage dialog
    • 3 = start profile dialog
    modfuncList=
    history list of module functions (QStringList)
    tracePython=
    flag indicating if the Python library should be traced as well (boolean)
    autoClearShell=
    flag indicating, that the interpreter window should be cleared automatically (boolean)
    autoContinue=
    flag indicating, that the debugger should not stop at the first executable line (boolean)
    autoFork=
    flag indicating the automatic fork mode (boolean)
    forkChild=
    flag indicating to debug the child after forking (boolean)

    StartDialog.__clearHistories

    __clearHistories()

    Private slot to clear the combo boxes lists and record a flag to clear the lists.

    StartDialog.getCoverageData

    getCoverageData()

    Public method to retrieve the coverage related data entered into this dialog.

    Returns:
    flag indicating erasure of coverage info (boolean)

    StartDialog.getData

    getData()

    Public method to retrieve the data entered into this dialog.

    Returns:
    a tuple of argv (QString), workdir (QString), environment (QString), exceptions flag (boolean), clear interpreter flag (boolean), clear histories flag (boolean) and run in console flag (boolean)

    StartDialog.getDebugData

    getDebugData()

    Public method to retrieve the debug related data entered into this dialog.

    Returns:
    a tuple of a flag indicating, if the Python library should be traced as well, a flag indicating, that the debugger should not stop at the first executable line (boolean), a flag indicating, that the debugger should fork automatically (boolean) and a flag indicating, that the debugger should debug the child process after forking automatically (boolean)

    StartDialog.getProfilingData

    getProfilingData()

    Public method to retrieve the profiling related data entered into this dialog.

    Returns:
    flag indicating erasure of profiling info (boolean)

    StartDialog.getRunData

    getRunData()

    Public method to retrieve the debug related data entered into this dialog.

    Returns:
    a tuple of a flag indicating, that the debugger should fork automatically (boolean) and a flag indicating, that the debugger should debug the child process after forking automatically (boolean)

    StartDialog.on_buttonBox_clicked

    on_buttonBox_clicked(button)

    Private slot called by a button of the button box clicked.

    button
    button that was clicked (QAbstractButton)

    StartDialog.on_dirButton_clicked

    on_dirButton_clicked()

    Private method used to open a directory selection dialog.

    StartDialog.on_modFuncCombo_editTextChanged

    on_modFuncCombo_editTextChanged()

    Private slot to enable/disable the OK button.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.patch_modpython.html0000644000175000001440000000013112261331350025650 xustar000000000000000030 mtime=1388688104.158227883 29 atime=1389081085.08372436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.patch_modpython.html0000644000175000001440000000351612261331350025410 0ustar00detlevusers00000000000000 eric4.patch_modpython

    eric4.patch_modpython

    Script to patch mod_python for usage with the eric4 IDE.

    Global Attributes

    modDir
    progName

    Classes

    None

    Functions

    initGlobals Sets the values of globals that need more than a simple assignment.
    main The main function of the script.
    usage Display a usage message and exit.


    initGlobals

    initGlobals()

    Sets the values of globals that need more than a simple assignment.



    main

    main(argv)

    The main function of the script.

    argv is the list of command line arguments.



    usage

    usage(rcode = 2)

    Display a usage message and exit.

    rcode is the return code passed back to the calling process.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Project.AddFileDialog.html0000644000175000001440000000013112261331351026466 xustar000000000000000030 mtime=1388688105.752228683 29 atime=1389081085.08372436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Project.AddFileDialog.html0000644000175000001440000001032312261331351026220 0ustar00detlevusers00000000000000 eric4.Project.AddFileDialog

    eric4.Project.AddFileDialog

    Module implementing a dialog to add a file to the project.

    Global Attributes

    None

    Classes

    AddFileDialog Class implementing a dialog to add a file to the project.

    Functions

    None


    AddFileDialog

    Class implementing a dialog to add a file to the project.

    Derived from

    QDialog, Ui_AddFileDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    AddFileDialog Constructor
    getData Public slot to retrieve the dialogs data.
    on_sourceFileButton_clicked Private slot to display a file selection dialog.
    on_sourceFileEdit_textChanged Private slot to handle the source file text changed.
    on_targetDirButton_clicked Private slot to display a directory selection dialog.

    Static Methods

    None

    AddFileDialog (Constructor)

    AddFileDialog(pro, parent = None, filter = None, name = None, startdir = None)

    Constructor

    pro
    reference to the project object
    parent
    parent widget of this dialog (QWidget)
    filter
    filter specification for the file to add (string or QString)
    name
    name of this dialog (string or QString)
    startdir
    start directory for the selection dialog

    AddFileDialog.getData

    getData()

    Public slot to retrieve the dialogs data.

    Returns:
    tuple of three values (list of string, string, boolean) giving the source files, the target directory and a flag telling, whether the files shall be added as source code

    AddFileDialog.on_sourceFileButton_clicked

    on_sourceFileButton_clicked()

    Private slot to display a file selection dialog.

    AddFileDialog.on_sourceFileEdit_textChanged

    on_sourceFileEdit_textChanged(sfile)

    Private slot to handle the source file text changed.

    If the entered source directory is a subdirectory of the current projects main directory, the target directory path is synchronized. It is assumed, that the user wants to add a bunch of files to the project in place.

    sfile
    the text of the source file line edit

    AddFileDialog.on_targetDirButton_clicked

    on_targetDirButton_clicked()

    Private slot to display a directory selection dialog.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsSubversion.Projec0000644000175000001440000000013112261331352031317 xustar000000000000000030 mtime=1388688106.899229259 29 atime=1389081085.08472436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsSubversion.ProjectHelper.html0000644000175000001440000002052512261331352033345 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsSubversion.ProjectHelper

    eric4.Plugins.VcsPlugins.vcsSubversion.ProjectHelper

    Module implementing the VCS project helper for Subversion.

    Global Attributes

    None

    Classes

    SvnProjectHelper Class implementing the VCS project helper for Subversion.

    Functions

    None


    SvnProjectHelper

    Class implementing the VCS project helper for Subversion.

    Derived from

    VcsProjectHelper

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnProjectHelper Constructor
    __svnBranchList Private slot used to list the branches of the project.
    __svnChangeLists Private slot used to show a list of change lists.
    __svnConfigure Private slot to open the configuration dialog.
    __svnExtendedDiff Private slot used to perform a svn diff with the selection of revisions.
    __svnLogBrowser Private slot used to browse the log of the current project.
    __svnLogLimited Private slot used to perform a svn log --limit.
    __svnPropDel Private slot used to delete a property for the project files.
    __svnPropList Private slot used to list the properties of the project files.
    __svnPropSet Private slot used to set a property for the project files.
    __svnRelocate Private slot used to relocate the working copy to a new repository URL.
    __svnRepoBrowser Private slot to open the repository browser.
    __svnResolve Private slot used to resolve conflicts of the local project.
    __svnTagList Private slot used to list the tags of the project.
    __svnUrlDiff Private slot used to perform a svn diff with the selection of repository URLs.
    getActions Public method to get a list of all actions.
    initActions Public method to generate the action objects.
    initMenu Public method to generate the VCS menu.

    Static Methods

    None

    SvnProjectHelper (Constructor)

    SvnProjectHelper(vcsObject, projectObject, parent = None, name = None)

    Constructor

    vcsObject
    reference to the vcs object
    projectObject
    reference to the project object
    parent
    parent widget (QWidget)
    name
    name of this object (string or QString)

    SvnProjectHelper.__svnBranchList

    __svnBranchList()

    Private slot used to list the branches of the project.

    SvnProjectHelper.__svnChangeLists

    __svnChangeLists()

    Private slot used to show a list of change lists.

    SvnProjectHelper.__svnConfigure

    __svnConfigure()

    Private slot to open the configuration dialog.

    SvnProjectHelper.__svnExtendedDiff

    __svnExtendedDiff()

    Private slot used to perform a svn diff with the selection of revisions.

    SvnProjectHelper.__svnLogBrowser

    __svnLogBrowser()

    Private slot used to browse the log of the current project.

    SvnProjectHelper.__svnLogLimited

    __svnLogLimited()

    Private slot used to perform a svn log --limit.

    SvnProjectHelper.__svnPropDel

    __svnPropDel()

    Private slot used to delete a property for the project files.

    SvnProjectHelper.__svnPropList

    __svnPropList()

    Private slot used to list the properties of the project files.

    SvnProjectHelper.__svnPropSet

    __svnPropSet()

    Private slot used to set a property for the project files.

    SvnProjectHelper.__svnRelocate

    __svnRelocate()

    Private slot used to relocate the working copy to a new repository URL.

    SvnProjectHelper.__svnRepoBrowser

    __svnRepoBrowser()

    Private slot to open the repository browser.

    SvnProjectHelper.__svnResolve

    __svnResolve()

    Private slot used to resolve conflicts of the local project.

    SvnProjectHelper.__svnTagList

    __svnTagList()

    Private slot used to list the tags of the project.

    SvnProjectHelper.__svnUrlDiff

    __svnUrlDiff()

    Private slot used to perform a svn diff with the selection of repository URLs.

    SvnProjectHelper.getActions

    getActions()

    Public method to get a list of all actions.

    Returns:
    list of all actions (list of E4Action)

    SvnProjectHelper.initActions

    initActions()

    Public method to generate the action objects.

    SvnProjectHelper.initMenu

    initMenu(menu)

    Public method to generate the VCS menu.

    menu
    reference to the menu to be populated (QMenu)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsPySvn.SvnCommandD0000644000175000001440000000013012261331353031166 xustar000000000000000029 mtime=1388688107.25922944 29 atime=1389081085.08472436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsPySvn.SvnCommandDialog.html0000644000175000001440000000706212261331353032706 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsPySvn.SvnCommandDialog

    eric4.Plugins.VcsPlugins.vcsPySvn.SvnCommandDialog

    Module implementing the Subversion command dialog.

    Global Attributes

    None

    Classes

    SvnCommandDialog Class implementing the Subversion command dialog.

    Functions

    None


    SvnCommandDialog

    Class implementing the Subversion command dialog.

    It implements a dialog that is used to enter an arbitrary subversion command. It asks the user to enter the commandline parameters and the working directory.

    Derived from

    QDialog, Ui_SvnCommandDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnCommandDialog Constructor
    getData Public method to retrieve the data entered into this dialog.
    on_commandCombo_editTextChanged Private method used to enable/disable the OK-button.
    on_dirButton_clicked Private method used to open a directory selection dialog.

    Static Methods

    None

    SvnCommandDialog (Constructor)

    SvnCommandDialog(argvList, wdList, ppath, parent = None)

    Constructor

    argvList
    history list of commandline arguments (QStringList)
    wdList
    history list of working directories (QStringList)
    ppath
    pathname of the project directory (string)
    parent
    parent widget of this dialog (QWidget)

    SvnCommandDialog.getData

    getData()

    Public method to retrieve the data entered into this dialog.

    Returns:
    a tuple of argv, workdir

    SvnCommandDialog.on_commandCombo_editTextChanged

    on_commandCombo_editTextChanged(text)

    Private method used to enable/disable the OK-button.

    text
    ignored

    SvnCommandDialog.on_dirButton_clicked

    on_dirButton_clicked()

    Private method used to open a directory selection dialog.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ConfigurationPages.HelpDocu0000644000175000001440000000031112261331353031241 xustar0000000000000000112 path=eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.HelpDocumentationPage.html 30 mtime=1388688107.454229538 29 atime=1389081085.08472436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.HelpDocumentationPage.ht0000644000175000001440000001157712261331353034135 0ustar00detlevusers00000000000000 eric4.Preferences.ConfigurationPages.HelpDocumentationPage

    eric4.Preferences.ConfigurationPages.HelpDocumentationPage

    Module implementing the Help Documentation configuration page.

    Global Attributes

    None

    Classes

    HelpDocumentationPage Class implementing the Help Documentation configuration page.

    Functions

    create Module function to create the configuration page.


    HelpDocumentationPage

    Class implementing the Help Documentation configuration page.

    Derived from

    ConfigurationPageBase, Ui_HelpDocumentationPage

    Class Attributes

    None

    Class Methods

    None

    Methods

    HelpDocumentationPage Constructor
    on_pykde4DocDirButton_clicked Private slot to select the PyKDE4 documentation directory.
    on_pyqt4DocDirButton_clicked Private slot to select the PyQt4 documentation directory.
    on_pysideDocDirButton_clicked Private slot to select the PySide documentation directory.
    on_pythonDocDirButton_clicked Private slot to select the Python documentation directory.
    on_qt4DocDirButton_clicked Private slot to select the Qt4 documentation directory.
    save Public slot to save the Help Documentation configuration.

    Static Methods

    None

    HelpDocumentationPage (Constructor)

    HelpDocumentationPage()

    Constructor

    HelpDocumentationPage.on_pykde4DocDirButton_clicked

    on_pykde4DocDirButton_clicked()

    Private slot to select the PyKDE4 documentation directory.

    HelpDocumentationPage.on_pyqt4DocDirButton_clicked

    on_pyqt4DocDirButton_clicked()

    Private slot to select the PyQt4 documentation directory.

    HelpDocumentationPage.on_pysideDocDirButton_clicked

    on_pysideDocDirButton_clicked()

    Private slot to select the PySide documentation directory.

    HelpDocumentationPage.on_pythonDocDirButton_clicked

    on_pythonDocDirButton_clicked()

    Private slot to select the Python documentation directory.

    HelpDocumentationPage.on_qt4DocDirButton_clicked

    on_qt4DocDirButton_clicked()

    Private slot to select the Qt4 documentation directory.

    HelpDocumentationPage.save

    save()

    Public slot to save the Help Documentation configuration.



    create

    create(dlg)

    Module function to create the configuration page.

    dlg
    reference to the configuration dialog

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.Tools.html0000644000175000001440000000013112261331354024661 xustar000000000000000030 mtime=1388688108.658230142 29 atime=1389081085.08472436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.Tools.html0000644000175000001440000000225312261331354024416 0ustar00detlevusers00000000000000 eric4.Tools

    eric4.Tools

    Package implementing some useful tools used by the IDE.

    Modules

    TRPreviewer Module implementing the TR Previewer main window.
    TRSingleApplication Module implementing the single application server and client.
    TrayStarter Module implementing a starter for the system tray.
    UIPreviewer Module implementing the UI Previewer main window.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Project.TranslationPropertiesDialog.htm0000644000175000001440000000013112261331351031375 xustar000000000000000030 mtime=1388688105.761228688 29 atime=1389081085.08472436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Project.TranslationPropertiesDialog.html0000644000175000001440000002000512261331351031301 0ustar00detlevusers00000000000000 eric4.Project.TranslationPropertiesDialog

    eric4.Project.TranslationPropertiesDialog

    Module implementing the Translations Properties dialog.

    Global Attributes

    None

    Classes

    TranslationPropertiesDialog Class implementing the Translations Properties dialog.

    Functions

    None


    TranslationPropertiesDialog

    Class implementing the Translations Properties dialog.

    Derived from

    QDialog, Ui_TranslationPropertiesDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    TranslationPropertiesDialog Constructor
    initDialog Public method to initialize the dialogs data.
    initFilters Public method to initialize the filters.
    on_addExceptionButton_clicked Private slot to add the shown exception to the listwidget.
    on_deleteExceptionButton_clicked Private slot to delete the currently selected entry of the listwidget.
    on_exceptDirButton_clicked Private slot to select a file to exempt from translation.
    on_exceptFileButton_clicked Private slot to select a file to exempt from translation.
    on_exceptionEdit_textChanged Private slot to handle the textChanged signal of the exception edit.
    on_exceptionsList_currentRowChanged Private slot to handle the currentRowChanged signal of the exceptions list.
    on_transBinPathButton_clicked Private slot to display a directory selection dialog.
    on_transPatternButton_clicked Private slot to display a file selection dialog.
    on_transPatternEdit_textChanged Private slot to check the translation pattern for correctness.
    storeData Public method to store the entered/modified data.

    Static Methods

    None

    TranslationPropertiesDialog (Constructor)

    TranslationPropertiesDialog(project, new, parent)

    Constructor

    project
    reference to the project object
    new
    flag indicating the generation of a new project
    parent
    parent widget of this dialog (QWidget)

    TranslationPropertiesDialog.initDialog

    initDialog()

    Public method to initialize the dialogs data.

    TranslationPropertiesDialog.initFilters

    initFilters()

    Public method to initialize the filters.

    TranslationPropertiesDialog.on_addExceptionButton_clicked

    on_addExceptionButton_clicked()

    Private slot to add the shown exception to the listwidget.

    TranslationPropertiesDialog.on_deleteExceptionButton_clicked

    on_deleteExceptionButton_clicked()

    Private slot to delete the currently selected entry of the listwidget.

    TranslationPropertiesDialog.on_exceptDirButton_clicked

    on_exceptDirButton_clicked()

    Private slot to select a file to exempt from translation.

    TranslationPropertiesDialog.on_exceptFileButton_clicked

    on_exceptFileButton_clicked()

    Private slot to select a file to exempt from translation.

    TranslationPropertiesDialog.on_exceptionEdit_textChanged

    on_exceptionEdit_textChanged(txt)

    Private slot to handle the textChanged signal of the exception edit.

    txt
    the text of the exception edit (QString)

    TranslationPropertiesDialog.on_exceptionsList_currentRowChanged

    on_exceptionsList_currentRowChanged(row)

    Private slot to handle the currentRowChanged signal of the exceptions list.

    row
    the current row (integer)

    TranslationPropertiesDialog.on_transBinPathButton_clicked

    on_transBinPathButton_clicked()

    Private slot to display a directory selection dialog.

    TranslationPropertiesDialog.on_transPatternButton_clicked

    on_transPatternButton_clicked()

    Private slot to display a file selection dialog.

    TranslationPropertiesDialog.on_transPatternEdit_textChanged

    on_transPatternEdit_textChanged(txt)

    Private slot to check the translation pattern for correctness.

    txt
    text of the transPatternEdit lineedit (QString)

    TranslationPropertiesDialog.storeData

    storeData()

    Public method to store the entered/modified data.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.E4XML.UserProjectHandler.html0000644000175000001440000000013112261331352027045 xustar000000000000000030 mtime=1388688106.536229077 29 atime=1389081085.08472436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.E4XML.UserProjectHandler.html0000644000175000001440000001004612261331352026601 0ustar00detlevusers00000000000000 eric4.E4XML.UserProjectHandler

    eric4.E4XML.UserProjectHandler

    Module implementing the handler class for reading an XML user project properties file.

    Global Attributes

    None

    Classes

    UserProjectHandler Class implementing a sax handler to read an XML user project properties file.

    Functions

    None


    UserProjectHandler

    Class implementing a sax handler to read an XML user project properties file.

    Derived from

    XMLHandlerBase

    Class Attributes

    None

    Class Methods

    None

    Methods

    UserProjectHandler Constructor
    endVcsType Handler method for the "VcsType" end tag.
    getVersion Public method to retrieve the version of the user project file.
    startDocumentProject Handler called, when the document parsing is started.
    startUserProject Handler method for the "UserProject" start tag.
    startVcsStatusMonitorInterval Handler method for the "VcsStatusMonitorInterval" start tag.

    Static Methods

    None

    UserProjectHandler (Constructor)

    UserProjectHandler(project)

    Constructor

    project
    Reference to the project object to store the information into.

    UserProjectHandler.endVcsType

    endVcsType()

    Handler method for the "VcsType" end tag.

    UserProjectHandler.getVersion

    getVersion()

    Public method to retrieve the version of the user project file.

    Returns:
    String containing the version number.

    UserProjectHandler.startDocumentProject

    startDocumentProject()

    Handler called, when the document parsing is started.

    UserProjectHandler.startUserProject

    startUserProject(attrs)

    Handler method for the "UserProject" start tag.

    attrs
    list of tag attributes

    UserProjectHandler.startVcsStatusMonitorInterval

    startVcsStatusMonitorInterval(attrs)

    Handler method for the "VcsStatusMonitorInterval" start tag.

    attrs
    list of tag attributes

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Utilities.SingleApplication.html0000644000175000001440000000013112261331351030030 xustar000000000000000030 mtime=1388688105.652228633 29 atime=1389081085.08572436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Utilities.SingleApplication.html0000644000175000001440000001727412261331351027576 0ustar00detlevusers00000000000000 eric4.Utilities.SingleApplication

    eric4.Utilities.SingleApplication

    Module implementing the single application server and client.

    Global Attributes

    SAAddress
    SALckPID
    SALckSocket

    Classes

    SingleApplicationClient Class implementing the single application client base class.
    SingleApplicationServer Class implementing the single application server base class.

    Functions

    None


    SingleApplicationClient

    Class implementing the single application client base class.

    Derived from

    object

    Class Attributes

    None

    Class Methods

    None

    Methods

    SingleApplicationClient Constructor
    connect Public method to connect the single application client to its server.
    disconnect Public method to disconnect from the Single Appliocation server.
    errstr Public method to return a meaningful error string for the last error.
    processArgs Public method to process the command line args passed to the UI.
    sendCommand Public method to send the command to the application server.

    Static Methods

    None

    SingleApplicationClient (Constructor)

    SingleApplicationClient(pidFile)

    Constructor

    pidFile
    filename of the PID file used to get some interface informations

    SingleApplicationClient.connect

    connect()

    Public method to connect the single application client to its server.

    Returns:
    value indicating success or an error number. Value is one of:
    0No application is running
    1Application is already running
    -1The lock file could not be read
    -2The lock file is corrupt

    SingleApplicationClient.disconnect

    disconnect()

    Public method to disconnect from the Single Appliocation server.

    SingleApplicationClient.errstr

    errstr()

    Public method to return a meaningful error string for the last error.

    Returns:
    error string for the last error (string)

    SingleApplicationClient.processArgs

    processArgs(args)

    Public method to process the command line args passed to the UI.

    Note: This method must be overridden by subclasses.

    args
    command line args (list of strings)

    SingleApplicationClient.sendCommand

    sendCommand(cmd)

    Public method to send the command to the application server.

    cmd
    command to be sent (string)


    SingleApplicationServer

    Class implementing the single application server base class.

    Derived from

    QTcpServer

    Class Attributes

    None

    Class Methods

    None

    Methods

    SingleApplicationServer Constructor
    __disconnected Private method to handle the closure of the socket.
    __newConnection Private slot to handle a new connection.
    __parseLine Private method to handle data from the client.
    handleCommand Public slot to handle the command sent by the client.
    shutdown Public method used to shut down the server.

    Static Methods

    None

    SingleApplicationServer (Constructor)

    SingleApplicationServer(pidFile)

    Constructor

    pidFile
    filename of the PID file used to record some interface informations

    SingleApplicationServer.__disconnected

    __disconnected()

    Private method to handle the closure of the socket.

    SingleApplicationServer.__newConnection

    __newConnection()

    Private slot to handle a new connection.

    SingleApplicationServer.__parseLine

    __parseLine()

    Private method to handle data from the client.

    SingleApplicationServer.handleCommand

    handleCommand(cmd, params)

    Public slot to handle the command sent by the client.

    Note: This method must be overridden by subclasses.

    cmd
    commandstring (string)
    params
    parameterstring (string)

    SingleApplicationServer.shutdown

    shutdown()

    Public method used to shut down the server.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.OpenSearch.OpenSearchEditDia0000644000175000001440000000013112261331353031122 xustar000000000000000030 mtime=1388688107.978229801 29 atime=1389081085.08572436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.OpenSearch.OpenSearchEditDialog.html0000644000175000001440000000416612261331353032331 0ustar00detlevusers00000000000000 eric4.Helpviewer.OpenSearch.OpenSearchEditDialog

    eric4.Helpviewer.OpenSearch.OpenSearchEditDialog

    Module implementing a dialog to edit the data of a search engine.

    Global Attributes

    None

    Classes

    OpenSearchEditDialog Class implementing a dialog to edit the data of a search engine.

    Functions

    None


    OpenSearchEditDialog

    Class implementing a dialog to edit the data of a search engine.

    Derived from

    QDialog, Ui_OpenSearchEditDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    OpenSearchEditDialog Constructor
    accept Public slot to accept the data entered.

    Static Methods

    None

    OpenSearchEditDialog (Constructor)

    OpenSearchEditDialog(engine, parent = None)

    Constructor

    OpenSearchEditDialog.accept

    accept()

    Public slot to accept the data entered.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.E4Gui.html0000644000175000001440000000013112261331354024476 xustar000000000000000030 mtime=1388688108.657230142 29 atime=1389081085.08572436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.E4Gui.html0000644000175000001440000000577012261331354024242 0ustar00detlevusers00000000000000 eric4.E4Gui

    eric4.E4Gui

    Package implementing some special GUI elements.

    They extend or ammend the standard elements as found in QtGui.

    Modules

    E4Action Module implementing an Action class extending QAction.
    E4Completers Module implementing various kinds of completers.
    E4Led Module implementing a LED widget.
    E4LineEdit Module implementing specialized line edits.
    E4ListView Module implementing specialized list views.
    E4ModelMenu Module implementing a menu populated from a QAbstractItemModel.
    E4ModelToolBar Module implementing a tool bar populated from a QAbstractItemModel.
    E4SideBar Module implementing a sidebar class.
    E4SingleApplication Module implementing the single application server and client.
    E4SqueezeLabels Module implementing labels that squeeze their contents to fit the size of the label.
    E4TabWidget Module implementing a TabWidget class substituting QTabWidget.
    E4TableView Module implementing specialized table views.
    E4ToolBarDialog Module implementing a toolbar configuration dialog.
    E4ToolBarManager Module implementing a toolbar manager class.
    E4ToolBox Module implementing a horizontal and a vertical toolbox class.
    E4TreeSortFilterProxyModel Module implementing a modified QSortFilterProxyModel.
    E4TreeView Module implementing specialized tree views.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Graphics.ImportsDiagram.html0000644000175000001440000000013112261331350027131 xustar000000000000000030 mtime=1388688104.825228218 29 atime=1389081085.08572436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Graphics.ImportsDiagram.html0000644000175000001440000001135012261331350026664 0ustar00detlevusers00000000000000 eric4.Graphics.ImportsDiagram

    eric4.Graphics.ImportsDiagram

    Module implementing a dialog showing an imports diagram of a package.

    Global Attributes

    None

    Classes

    ImportsDiagram Class implementing a dialog showing an imports diagram of a package.

    Functions

    None


    ImportsDiagram

    Class implementing a dialog showing an imports diagram of a package.

    Note: Only package internal imports are show in order to maintain some readability.

    Derived from

    UMLDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    ImportsDiagram Constructor
    __addModule Private method to add a module to the diagram.
    __buildImports Private method to build the modules shapes of the diagram.
    __buildModulesDict Private method to build a dictionary of modules contained in the package.
    __createAssociations Private method to generate the associations between the module shapes.
    relayout Method to relayout the diagram.
    show Overriden method to show the dialog.

    Static Methods

    None

    ImportsDiagram (Constructor)

    ImportsDiagram(package, parent = None, name = None, showExternalImports = False)

    Constructor

    package
    name of a python package to show the import relationships (string)
    parent
    parent widget of the view (QWidget)
    name
    name of the view widget (QString or string)
    showExternalImports=
    flag indicating to show exports from outside the package (boolean)

    ImportsDiagram.__addModule

    __addModule(name, classes, x, y)

    Private method to add a module to the diagram.

    name
    module name to be shown (string)
    classes
    list of class names contained in the module (list of strings)
    x
    x-coordinate (float)
    y
    y-coordinate (float)

    ImportsDiagram.__buildImports

    __buildImports()

    Private method to build the modules shapes of the diagram.

    ImportsDiagram.__buildModulesDict

    __buildModulesDict()

    Private method to build a dictionary of modules contained in the package.

    Returns:
    dictionary of modules contained in the package.

    ImportsDiagram.__createAssociations

    __createAssociations(shapes)

    Private method to generate the associations between the module shapes.

    shapes
    list of shapes

    ImportsDiagram.relayout

    relayout()

    Method to relayout the diagram.

    ImportsDiagram.show

    show()

    Overriden method to show the dialog.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.Plugins.WizardPlugins.FontDialogW0000644000175000001440000000013112261331354031214 xustar000000000000000030 mtime=1388688108.659230143 29 atime=1389081085.08572436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.Plugins.WizardPlugins.FontDialogWizard.html0000644000175000001440000000155612261331354032753 0ustar00detlevusers00000000000000 eric4.Plugins.WizardPlugins.FontDialogWizard

    eric4.Plugins.WizardPlugins.FontDialogWizard

    Package implementing the font dialog wizard.

    Modules

    FontDialogWizardDialog Module implementing the font dialog wizard dialog.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.Plugins.ViewManagerPlugins.Tabvie0000644000175000001440000000013212261331354031217 xustar000000000000000030 mtime=1388688108.659230143 30 atime=1389081085.086724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.Plugins.ViewManagerPlugins.Tabview.html0000644000175000001440000000151012261331354032100 0ustar00detlevusers00000000000000 eric4.Plugins.ViewManagerPlugins.Tabview

    eric4.Plugins.ViewManagerPlugins.Tabview

    Package containing the tabview view manager plugin.

    Modules

    Tabview Module implementing a tabbed viewmanager class.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DebugClients.Python.PyProfile.html0000644000175000001440000000013112261331354030214 xustar000000000000000029 mtime=1388688108.19622991 30 atime=1389081085.086724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.DebugClients.Python.PyProfile.html0000644000175000001440000001170512261331354027753 0ustar00detlevusers00000000000000 eric4.DebugClients.Python.PyProfile

    eric4.DebugClients.Python.PyProfile

    Module defining additions to the standard Python profile.py.

    Global Attributes

    None

    Classes

    PyProfile Class extending the standard Python profiler with additional methods.

    Functions

    None


    PyProfile

    Class extending the standard Python profiler with additional methods.

    This class extends the standard Python profiler by the functionality to save the collected timing data in a timing cache, to restore these data on subsequent calls, to store a profile dump to a standard filename and to erase these caches.

    Derived from

    profile.Profile

    Class Attributes

    dispatch

    Class Methods

    None

    Methods

    PyProfile Constructor
    __restore Private method to restore the timing data from the timing cache.
    dump_stats Public method to dump the statistics data.
    erase Public method to erase the collected timing data.
    fix_frame_filename Public method used to fixup the filename for a given frame.
    save Public method to store the collected profile data.
    trace_dispatch_call Private method used to trace functions calls.

    Static Methods

    None

    PyProfile (Constructor)

    PyProfile(basename, timer=None, bias=None)

    Constructor

    basename
    name of the script to be profiled (string)
    timer
    function defining the timing calculation
    bias
    calibration value (float)

    PyProfile.__restore

    __restore()

    Private method to restore the timing data from the timing cache.

    PyProfile.dump_stats

    dump_stats(file)

    Public method to dump the statistics data.

    file
    name of the file to write to (string)

    PyProfile.erase

    erase()

    Public method to erase the collected timing data.

    PyProfile.fix_frame_filename

    fix_frame_filename(frame)

    Public method used to fixup the filename for a given frame.

    The logic employed here is that if a module was loaded from a .pyc file, then the correct .py to operate with should be in the same path as the .pyc. The reason this logic is needed is that when a .pyc file is generated, the filename embedded and thus what is readable in the code object of the frame object is the fully qualified filepath when the pyc is generated. If files are moved from machine to machine this can break debugging as the .pyc will refer to the .py on the original machine. Another case might be sharing code over a network... This logic deals with that.

    frame
    the frame object

    PyProfile.save

    save()

    Public method to store the collected profile data.

    PyProfile.trace_dispatch_call

    trace_dispatch_call(frame, t)

    Private method used to trace functions calls.

    This is a variant of the one found in the standard Python profile.py calling fix_frame_filename above.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.PyUnit.UnittestDialog.html0000644000175000001440000000013212261331351026640 xustar000000000000000030 mtime=1388688105.175228393 30 atime=1389081085.086724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.PyUnit.UnittestDialog.html0000644000175000001440000003641312261331351026401 0ustar00detlevusers00000000000000 eric4.PyUnit.UnittestDialog

    eric4.PyUnit.UnittestDialog

    Module implementing the UI to the pyunit package.

    Global Attributes

    None

    Classes

    QtTestResult A TestResult derivative to work with a graphical GUI.
    UnittestDialog Class implementing the UI to the pyunit package.
    UnittestWindow Main window class for the standalone dialog.

    Functions

    None


    QtTestResult

    A TestResult derivative to work with a graphical GUI.

    For more details see pyunit.py of the standard python distribution.

    Derived from

    unittest.TestResult

    Class Attributes

    None

    Class Methods

    None

    Methods

    QtTestResult Constructor
    addError Method called if a test errored.
    addFailure Method called if a test failed.
    startTest Method called at the start of a test.
    stopTest Method called at the end of a test.

    Static Methods

    None

    QtTestResult (Constructor)

    QtTestResult(parent)

    Constructor

    parent
    The parent widget.

    QtTestResult.addError

    addError(test, err)

    Method called if a test errored.

    test
    Reference to the test object
    err
    The error traceback

    QtTestResult.addFailure

    addFailure(test, err)

    Method called if a test failed.

    test
    Reference to the test object
    err
    The error traceback

    QtTestResult.startTest

    startTest(test)

    Method called at the start of a test.

    test
    Reference to the test object

    QtTestResult.stopTest

    stopTest(test)

    Method called at the end of a test.

    test
    Reference to the test object


    UnittestDialog

    Class implementing the UI to the pyunit package.

    Signals

    unittestFile(string,int,int)
    emitted to show the source of a unittest file

    Derived from

    QWidget, Ui_UnittestDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    UnittestDialog Constructor
    __UTPrepared Private slot to handle the utPrepared signal.
    __setProgressColor Private methode to set the color of the progress color label.
    __setRunningMode Private method to set the GUI in running mode.
    __setStoppedMode Private method to set the GUI in stopped mode.
    __showSource Private slot to show the source of a traceback in an eric4 editor.
    insertProg Public slot to insert the filename prog into the testsuiteComboBox object.
    insertTestName Public slot to insert a test name into the testComboBox object.
    keyPressEvent Protected slot to handle key press events.
    on_buttonBox_clicked Private slot called by a button of the button box clicked.
    on_errorsListWidget_currentTextChanged Private slot to handle the highlighted(const QString&) signal.
    on_errorsListWidget_itemDoubleClicked Private slot called by doubleclicking an errorlist entry.
    on_fileDialogButton_clicked Private slot to open a file dialog.
    on_startButton_clicked Public slot to start the test.
    on_stopButton_clicked Private slot to stop the test.
    on_testsuiteComboBox_editTextChanged Private slot to handle changes of the test file name.
    testErrored Public method called if a test errors.
    testFailed Public method called if a test fails.
    testFinished Public method called if a test has finished.
    testStarted Public method called if a test is about to be run.

    Static Methods

    None

    UnittestDialog (Constructor)

    UnittestDialog(prog = None, dbs = None, ui = None, fromEric=False, parent = None, name = None)

    Constructor

    prog
    filename of the program to open
    dbs
    reference to the debug server object. It is an indication whether we were called from within the eric4 IDE
    ui
    reference to the UI object
    fromEric
    flag indicating an instantiation from within the eric IDE (boolean)
    parent
    parent widget of this dialog (QWidget)
    name
    name of this dialog (string or QString)

    UnittestDialog.__UTPrepared

    __UTPrepared(nrTests, exc_type, exc_value)

    Private slot to handle the utPrepared signal.

    If the unittest suite was loaded successfully, we ask the client to run the test suite.

    nrTests
    number of tests contained in the test suite (integer)
    exc_type
    type of exception occured during preparation (string)
    exc_value
    value of exception occured during preparation (string)

    UnittestDialog.__setProgressColor

    __setProgressColor(color)

    Private methode to set the color of the progress color label.

    color
    colour to be shown

    UnittestDialog.__setRunningMode

    __setRunningMode()

    Private method to set the GUI in running mode.

    UnittestDialog.__setStoppedMode

    __setStoppedMode()

    Private method to set the GUI in stopped mode.

    UnittestDialog.__showSource

    __showSource()

    Private slot to show the source of a traceback in an eric4 editor.

    UnittestDialog.insertProg

    insertProg(prog)

    Public slot to insert the filename prog into the testsuiteComboBox object.

    prog
    filename to be inserted (string or QString)

    UnittestDialog.insertTestName

    insertTestName(testName)

    Public slot to insert a test name into the testComboBox object.

    testName
    name of the test to be inserted (string or QString)

    UnittestDialog.keyPressEvent

    keyPressEvent(evt)

    Protected slot to handle key press events.

    evt
    key press event to handle (QKeyEvent)

    UnittestDialog.on_buttonBox_clicked

    on_buttonBox_clicked(button)

    Private slot called by a button of the button box clicked.

    button
    button that was clicked (QAbstractButton)

    UnittestDialog.on_errorsListWidget_currentTextChanged

    on_errorsListWidget_currentTextChanged(text)

    Private slot to handle the highlighted(const QString&) signal.

    UnittestDialog.on_errorsListWidget_itemDoubleClicked

    on_errorsListWidget_itemDoubleClicked(lbitem)

    Private slot called by doubleclicking an errorlist entry.

    It will popup a dialog showing the stacktrace. If called from eric, an additional button is displayed to show the python source in an eric source viewer (in erics main window.

    lbitem
    the listbox item that was double clicked

    UnittestDialog.on_fileDialogButton_clicked

    on_fileDialogButton_clicked()

    Private slot to open a file dialog.

    UnittestDialog.on_startButton_clicked

    on_startButton_clicked()

    Public slot to start the test.

    UnittestDialog.on_stopButton_clicked

    on_stopButton_clicked()

    Private slot to stop the test.

    UnittestDialog.on_testsuiteComboBox_editTextChanged

    on_testsuiteComboBox_editTextChanged(txt)

    Private slot to handle changes of the test file name.

    txt
    name of the test file (string)

    UnittestDialog.testErrored

    testErrored(test, exc)

    Public method called if a test errors.

    test
    name of the failed test (string)
    exc
    string representation of the exception (list of strings)

    UnittestDialog.testFailed

    testFailed(test, exc)

    Public method called if a test fails.

    test
    name of the failed test (string)
    exc
    string representation of the exception (list of strings)

    UnittestDialog.testFinished

    testFinished()

    Public method called if a test has finished.

    Note: It is also called if it has already failed or errored.

    UnittestDialog.testStarted

    testStarted(test, doc)

    Public method called if a test is about to be run.

    test
    name of the started test (string)
    doc
    documentation of the started test (string)


    UnittestWindow

    Main window class for the standalone dialog.

    Derived from

    KQMainWindow

    Class Attributes

    None

    Class Methods

    None

    Methods

    UnittestWindow Constructor
    eventFilter Public method to filter events.

    Static Methods

    None

    UnittestWindow (Constructor)

    UnittestWindow(prog = None, parent = None)

    Constructor

    prog
    filename of the program to open
    parent
    reference to the parent widget (QWidget)

    UnittestWindow.eventFilter

    eventFilter(obj, event)

    Public method to filter events.

    obj
    reference to the object the event is meant for (QObject)
    event
    reference to the event object (QEvent)
    Returns:
    flag indicating, whether the event was handled (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ConfigurationPages.EditorHi0000644000175000001440000000031312261331353031247 xustar0000000000000000113 path=eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.EditorHighlightersPage.html 30 mtime=1388688107.411229516 30 atime=1389081085.086724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.EditorHighlightersPage.h0000644000175000001440000001316112261331353034106 0ustar00detlevusers00000000000000 eric4.Preferences.ConfigurationPages.EditorHighlightersPage

    eric4.Preferences.ConfigurationPages.EditorHighlightersPage

    Module implementing the Editor Highlighter Associations configuration page.

    Global Attributes

    None

    Classes

    EditorHighlightersPage Class implementing the Editor Highlighter Associations configuration page.

    Functions

    create Module function to create the configuration page.


    EditorHighlightersPage

    Class implementing the Editor Highlighter Associations configuration page.

    Derived from

    ConfigurationPageBase, Ui_EditorHighlightersPage

    Class Attributes

    None

    Class Methods

    None

    Methods

    EditorHighlightersPage Constructor
    on_addLexerButton_clicked Private slot to add the lexer association displayed to the list.
    on_deleteLexerButton_clicked Private slot to delete the currently selected lexer association of the list.
    on_editorLexerCombo_currentIndexChanged Private slot to handle the selection of a lexer.
    on_editorLexerList_itemActivated Private slot to handle the activated signal of the lexer association list.
    on_editorLexerList_itemClicked Private slot to handle the clicked signal of the lexer association list.
    save Public slot to save the Editor Highlighter Associations configuration.

    Static Methods

    None

    EditorHighlightersPage (Constructor)

    EditorHighlightersPage(lexers)

    Constructor

    lexers
    reference to the lexers dictionary

    EditorHighlightersPage.on_addLexerButton_clicked

    on_addLexerButton_clicked()

    Private slot to add the lexer association displayed to the list.

    EditorHighlightersPage.on_deleteLexerButton_clicked

    on_deleteLexerButton_clicked()

    Private slot to delete the currently selected lexer association of the list.

    EditorHighlightersPage.on_editorLexerCombo_currentIndexChanged

    on_editorLexerCombo_currentIndexChanged(text)

    Private slot to handle the selection of a lexer.

    EditorHighlightersPage.on_editorLexerList_itemActivated

    on_editorLexerList_itemActivated(itm, column)

    Private slot to handle the activated signal of the lexer association list.

    itm
    reference to the selecte item (QTreeWidgetItem)
    column
    column the item was clicked or activated (integer) (ignored)

    EditorHighlightersPage.on_editorLexerList_itemClicked

    on_editorLexerList_itemClicked(itm, column)

    Private slot to handle the clicked signal of the lexer association list.

    itm
    reference to the selecte item (QTreeWidgetItem)
    column
    column the item was clicked or activated (integer) (ignored)

    EditorHighlightersPage.save

    save()

    Public slot to save the Editor Highlighter Associations configuration.



    create

    create(dlg)

    Module function to create the configuration page.

    dlg
    reference to the configuration dialog

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DebugClients.Ruby.DebugClientBaseModule0000644000175000001440000000013212261331354031127 xustar000000000000000030 mtime=1388688108.323229974 30 atime=1389081085.086724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.DebugClients.Ruby.DebugClientBaseModule.html0000644000175000001440000003764412261331354031642 0ustar00detlevusers00000000000000 eric4.DebugClients.Ruby.DebugClientBaseModule

    eric4.DebugClients.Ruby.DebugClientBaseModule

    File implementing a debug client base module.

    Global Attributes

    None

    Classes

    None

    Modules

    DebugClientBase Module implementing the client side of the debugger.

    Functions

    None


    DebugClientBase

    Module implementing the client side of the debugger.

    It provides access to the Ruby interpeter from a debugger running in another process.

    The protocol between the debugger and the client assumes that there will be a single source of debugger commands and a single source of Ruby statements. Commands and statement are always exactly one line and may be interspersed.

    The protocol is as follows. First the client opens a connection to the debugger and then sends a series of one line commands. A command is either >Load<, >Step<, >StepInto<, ... or a Ruby statement. See DebugProtocol.rb for a listing of valid protocol tokens.

    A Ruby statement consists of the statement to execute, followed (in a separate line) by >OK?<. If the statement was incomplete then the response is >Continue<. If there was an exception then the response is >Exception<. Otherwise the response is >OK<. The reason for the >OK?< part is to provide a sentinal (ie. the responding >OK<) after any possible output as a result of executing the command.

    The client may send any other lines at any other time which should be interpreted as program output.

    If the debugger closes the session there is no response from the client. The client may close the session at any time as a result of the script being debugged closing or crashing.

    Note: This module is meant to be mixed in by individual DebugClient classes. Do not use it directly.

    Module Attributes

    @@clientCapabilities

    Classes

    None

    Functions

    canEval? Private method to check if the buffer's contents can be evaluated.
    completionList Method used to handle the command completion request
    connectDebugger Public method to establish a session with the debugger.
    dumpVariable Private method to return the variables of a frame to the debug server.
    dumpVariables Private method to return the variables of a frame to the debug server.
    eventLoop Private method implementing our event loop.
    eventPoll Private method to poll for events like 'set break point'.
    extractAddress Private method to extract the address part of an object description.
    extractTypeAndAddress Private method to extract the address and type parts of an object description.
    formatVariablesList Private method to produce a formated variables list.
    generateFilterObjects Private method to convert a filter string to a list of filter objects.
    handleException Private method called in the case of an exception
    handleLine Private method to handle the receipt of a complete line.
    inFilter? Private method to check, if a variable is to be filtered based on its type.
    initializeDebugClient Method to initialize the module
    interact Private method to Interact with the debugger.
    main Public method implementing the main method.
    progTerminated Private method to tell the debugger that the program has terminated.
    sessionClose Privat method to close the session with the debugger and terminate.
    startProgInDebugger Method used to start the remote debugger.
    trace_func Method executed by the tracing facility.
    unhandled_exception Private method to report an unhandled exception.
    write Private method to write data to the output stream.

    DebugClientBase.canEval?

    canEval?()

    Private method to check if the buffer's contents can be evaluated.

    Returns:
    flag indicating if an eval might succeed (boolean)

    DebugClientBase.completionList

    completionList()

    Method used to handle the command completion request

    text
    the text to be completed (string)

    DebugClientBase.connectDebugger

    connectDebugger(remoteAddress=nil, redirect=true)

    Public method to establish a session with the debugger.

    It opens a network connection to the debugger, connects it to stdin, stdout and stderr and saves these file objects in case the application being debugged redirects them itself.

    port
    the port number to connect to (int)
    remoteAddress
    the network address of the debug server host (string)
    redirect
    flag indicating redirection of stdin, stdout and stderr (boolean)

    DebugClientBase.dumpVariable

    dumpVariable(frmnr, scope, filter)

    Private method to return the variables of a frame to the debug server.

    var
    list encoded name of the requested variable (list of strings)
    frmnr
    distance of frame reported on. 0 is the current frame (int)
    scope
    1 to report global variables, 0 for local variables (int)
    filter
    the indices of variable types to be filtered (list of int)

    DebugClientBase.dumpVariables

    dumpVariables(scope, filter)

    Private method to return the variables of a frame to the debug server.

    frmnr
    distance of frame reported on. 0 is the current frame (int)
    scope
    1 to report global variables, 0 for local variables (int)
    filter
    the indices of variable types to be filtered (list of int)

    DebugClientBase.eventLoop

    eventLoop()

    Private method implementing our event loop.

    DebugClientBase.eventPoll

    eventPoll()

    Private method to poll for events like 'set break point'.

    DebugClientBase.extractAddress

    extractAddress()

    Private method to extract the address part of an object description.

    var
    object description (String)
    Returns:
    the address contained in the object description (String)

    DebugClientBase.extractTypeAndAddress

    extractTypeAndAddress()

    Private method to extract the address and type parts of an object description.

    var
    object description (String)
    Returns:
    list containing the type and address contained in the object description (Array of two String)

    DebugClientBase.formatVariablesList

    formatVariablesList(binding_, scope, filter = [], excludeSelf = false, access = nil)

    Private method to produce a formated variables list.

    The binding passed in to it is scanned. Variables are only added to the list, if their type is not contained in the filter list and their name doesn't match any of the filter expressions. The formated variables list (a list of lists of 3 values) is returned.

    keylist
    keys of the dictionary
    binding_
    the binding to be scanned
    scope
    1 to filter using the globals filter, 0 using the locals filter (int). Variables are only added to the list, if their name do not match any of the filter expressions.
    filter
    the indices of variable types to be filtered. Variables are only added to the list, if their type is not contained in the filter list.
    excludeSelf
    flag indicating if the self object should be excluded from the listing (boolean)
    access
    String specifying the access path to (String)
    Returns:
    A list consisting of a list of formatted variables. Each variable entry is a list of three elements, the variable name, its type and value.

    DebugClientBase.generateFilterObjects

    generateFilterObjects(filterString)

    Private method to convert a filter string to a list of filter objects.

    scope
    1 to generate filter for global variables, 0 for local variables (int)
    filterString
    string of filter patterns separated by ';'

    DebugClientBase.handleException

    handleException()

    Private method called in the case of an exception

    It ensures that the debug server is informed of the raised exception.

    DebugClientBase.handleLine

    handleLine()

    Private method to handle the receipt of a complete line.

    It first looks for a valid protocol token at the start of the line. Thereafter it trys to execute the lines accumulated so far.

    line
    the received line

    DebugClientBase.inFilter?

    inFilter?(otype, oval)

    Private method to check, if a variable is to be filtered based on its type.

    filter
    the indices of variable types to be filtered (Array of int.
    otype
    type of the variable to be checked (String)
    oval
    variable value to be checked (String)
    Returns:
    flag indicating, whether the variable should be filtered (boolean)

    DebugClientBase.initializeDebugClient

    initializeDebugClient()

    Method to initialize the module

    DebugClientBase.interact

    interact()

    Private method to Interact with the debugger.

    DebugClientBase.main

    main()

    Public method implementing the main method.

    DebugClientBase.progTerminated

    progTerminated()

    Private method to tell the debugger that the program has terminated.

    status
    the return status

    DebugClientBase.sessionClose

    sessionClose()

    Privat method to close the session with the debugger and terminate.

    DebugClientBase.startProgInDebugger

    startProgInDebugger(wd = '', host = nil, port = nil, exceptions = true, traceRuby = false, redirect=true)

    Method used to start the remote debugger.

    progargs
    commandline for the program to be debugged (list of strings)
    wd
    working directory for the program execution (string)
    host
    hostname of the debug server (string)
    port
    portnumber of the debug server (int)
    exceptions
    flag to enable exception reporting of the IDE (boolean)
    traceRuby
    flag to enable tracing into the Ruby library
    redirect
    flag indicating redirection of stdin, stdout and stderr (boolean)

    DebugClientBase.trace_func

    trace_func(file, line, id, binding_, klass)

    Method executed by the tracing facility.

    It is used to save the execution context of an exception.

    event
    the tracing event (String)
    file
    the name of the file being traced (String)
    line
    the line number being traced (int)
    id
    object id
    binding_
    a binding object
    klass
    name of a class

    DebugClientBase.unhandled_exception

    unhandled_exception()

    Private method to report an unhandled exception.

    exc
    the exception object

    DebugClientBase.write

    write()

    Private method to write data to the output stream.

    s
    data to be written (string)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Project.ProjectBaseBrowser.html0000644000175000001440000000013212261331351027624 xustar000000000000000030 mtime=1388688105.836228725 30 atime=1389081085.087724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Project.ProjectBaseBrowser.html0000644000175000001440000004771312261331351027372 0ustar00detlevusers00000000000000 eric4.Project.ProjectBaseBrowser

    eric4.Project.ProjectBaseBrowser

    Module implementing the baseclass for the various project browsers.

    Global Attributes

    None

    Classes

    ProjectBaseBrowser Baseclass implementing common functionality for the various project browsers.

    Functions

    None


    ProjectBaseBrowser

    Baseclass implementing common functionality for the various project browsers.

    Derived from

    Browser

    Class Attributes

    None

    Class Methods

    None

    Methods

    ProjectBaseBrowser Constructor
    __checkHookKey Private method to check a hook key
    __modelRowsInserted Private slot called after rows have been inserted into the model.
    _collapseAllDirs Protected slot to handle the 'Collapse all directories' menu action.
    _completeRepopulateItem Protected slot to handle the completeRepopulateItem signal.
    _configure Protected method to open the configuration dialog.
    _connectExpandedCollapsed Protected method to connect the expanded and collapsed signals.
    _contextMenuRequested Protected slot to show the context menu.
    _copyToClipboard Protected method to copy the path of an entry to the clipboard.
    _createPopupMenus Protected overloaded method to generate the popup menus.
    _disconnectExpandedCollapsed Protected method to disconnect the expanded and collapsed signals.
    _expandAllDirs Protected slot to handle the 'Expand all directories' menu action.
    _initHookMethods Protected method to initialize the hooks dictionary.
    _initMenusAndVcs Protected slot to initialize the menus and the Vcs interface.
    _newProject Protected slot to handle the newProject signal.
    _prepareRepopulateItem Protected slot to handle the prepareRepopulateItem signal.
    _projectClosed Protected slot to handle the projectClosed signal.
    _projectOpened Protected slot to handle the projectOpened signal.
    _removeDir Protected method to remove a (single) directory from the project.
    _removeFile Protected method to remove a file or files from the project.
    _renameFile Protected method to rename a file of the project.
    _selectEntries Protected method to select entries based on their VCS status.
    _selectSingleItem Protected method to select a single item.
    _setItemRangeSelected Protected method to set the selection status of a range of items.
    _setItemSelected Protected method to set the selection status of an item.
    _showContextMenu Protected slot called before the context menu is shown.
    _showContextMenuBack Protected slot called before the context menu is shown.
    _showContextMenuDir Protected slot called before the context menu is shown.
    _showContextMenuDirMulti Protected slot called before the context menu is shown.
    _showContextMenuMulti Protected slot called before the context menu (multiple selections) is shown.
    addHookMethod Public method to add a hook method to the dictionary.
    addHookMethodAndMenuEntry Public method to add a hook method to the dictionary.
    currentItem Public method to get a reference to the current item.
    removeHookMethod Public method to remove a hook method from the dictionary.
    selectFile Public method to highlight a node given its filename.
    selectLocalDirEntries Public slot to handle the select local directories context menu entries
    selectLocalEntries Public slot to handle the select local files context menu entries
    selectVCSDirEntries Public slot to handle the select VCS directories context menu entries
    selectVCSEntries Public slot to handle the select VCS files context menu entries

    Static Methods

    None

    ProjectBaseBrowser (Constructor)

    ProjectBaseBrowser(project, type_, parent = None)

    Constructor

    project
    reference to the project object
    type
    project browser type (string)
    parent
    parent widget of this browser

    ProjectBaseBrowser.__checkHookKey

    __checkHookKey(key)

    Private method to check a hook key

    ProjectBaseBrowser.__modelRowsInserted

    __modelRowsInserted(parent, start, end)

    Private slot called after rows have been inserted into the model.

    parent
    parent index of inserted rows (QModelIndex)
    start
    start row number (integer)
    end
    end row number (integer)

    ProjectBaseBrowser._collapseAllDirs

    _collapseAllDirs()

    Protected slot to handle the 'Collapse all directories' menu action.

    ProjectBaseBrowser._completeRepopulateItem

    _completeRepopulateItem(name)

    Protected slot to handle the completeRepopulateItem signal.

    name
    relative name of file item to be repopulated

    ProjectBaseBrowser._configure

    _configure()

    Protected method to open the configuration dialog.

    ProjectBaseBrowser._connectExpandedCollapsed

    _connectExpandedCollapsed()

    Protected method to connect the expanded and collapsed signals.

    ProjectBaseBrowser._contextMenuRequested

    _contextMenuRequested(coord)

    Protected slot to show the context menu.

    coord
    the position of the mouse pointer (QPoint)

    ProjectBaseBrowser._copyToClipboard

    _copyToClipboard()

    Protected method to copy the path of an entry to the clipboard.

    ProjectBaseBrowser._createPopupMenus

    _createPopupMenus()

    Protected overloaded method to generate the popup menus.

    ProjectBaseBrowser._disconnectExpandedCollapsed

    _disconnectExpandedCollapsed()

    Protected method to disconnect the expanded and collapsed signals.

    ProjectBaseBrowser._expandAllDirs

    _expandAllDirs()

    Protected slot to handle the 'Expand all directories' menu action.

    ProjectBaseBrowser._initHookMethods

    _initHookMethods()

    Protected method to initialize the hooks dictionary.

    This method should be overridden by subclasses. All supported hook methods should be initialized with a None value. The keys must be strings.

    ProjectBaseBrowser._initMenusAndVcs

    _initMenusAndVcs()

    Protected slot to initialize the menus and the Vcs interface.

    ProjectBaseBrowser._newProject

    _newProject()

    Protected slot to handle the newProject signal.

    ProjectBaseBrowser._prepareRepopulateItem

    _prepareRepopulateItem(name)

    Protected slot to handle the prepareRepopulateItem signal.

    name
    relative name of file item to be repopulated

    ProjectBaseBrowser._projectClosed

    _projectClosed()

    Protected slot to handle the projectClosed signal.

    ProjectBaseBrowser._projectOpened

    _projectOpened()

    Protected slot to handle the projectOpened signal.

    ProjectBaseBrowser._removeDir

    _removeDir()

    Protected method to remove a (single) directory from the project.

    ProjectBaseBrowser._removeFile

    _removeFile()

    Protected method to remove a file or files from the project.

    ProjectBaseBrowser._renameFile

    _renameFile()

    Protected method to rename a file of the project.

    ProjectBaseBrowser._selectEntries

    _selectEntries(local = True, filter = None)

    Protected method to select entries based on their VCS status.

    local
    flag indicating local (i.e. non VCS controlled) file/directory entries should be selected (boolean)
    filter
    list of classes to check against

    ProjectBaseBrowser._selectSingleItem

    _selectSingleItem(index)

    Protected method to select a single item.

    index
    index of item to be selected (QModelIndex)

    ProjectBaseBrowser._setItemRangeSelected

    _setItemRangeSelected(startIndex, endIndex, selected)

    Protected method to set the selection status of a range of items.

    startIndex
    start index of range of items to set (QModelIndex)
    endIndex
    end index of range of items to set (QModelIndex)
    selected
    flag giving the new selection status (boolean)

    ProjectBaseBrowser._setItemSelected

    _setItemSelected(index, selected)

    Protected method to set the selection status of an item.

    index
    index of item to set (QModelIndex)
    selected
    flag giving the new selection status (boolean)

    ProjectBaseBrowser._showContextMenu

    _showContextMenu(menu)

    Protected slot called before the context menu is shown.

    It enables/disables the VCS menu entries depending on the overall VCS status and the file status.

    menu
    reference to the menu to be shown

    ProjectBaseBrowser._showContextMenuBack

    _showContextMenuBack(menu)

    Protected slot called before the context menu is shown.

    menu
    reference to the menu to be shown

    ProjectBaseBrowser._showContextMenuDir

    _showContextMenuDir(menu)

    Protected slot called before the context menu is shown.

    It enables/disables the VCS menu entries depending on the overall VCS status and the directory status.

    menu
    reference to the menu to be shown

    ProjectBaseBrowser._showContextMenuDirMulti

    _showContextMenuDirMulti(menu)

    Protected slot called before the context menu is shown.

    It enables/disables the VCS menu entries depending on the overall VCS status and the directory status.

    menu
    reference to the menu to be shown

    ProjectBaseBrowser._showContextMenuMulti

    _showContextMenuMulti(menu)

    Protected slot called before the context menu (multiple selections) is shown.

    It enables/disables the VCS menu entries depending on the overall VCS status and the files status.

    menu
    reference to the menu to be shown

    ProjectBaseBrowser.addHookMethod

    addHookMethod(key, method)

    Public method to add a hook method to the dictionary.

    key
    for the hook method (string)
    method
    reference to the hook method (method object)

    ProjectBaseBrowser.addHookMethodAndMenuEntry

    addHookMethodAndMenuEntry(key, method, menuEntry)

    Public method to add a hook method to the dictionary.

    key
    for the hook method (string)
    method
    reference to the hook method (method object)
    menuEntry
    entry to be shown in the context menu (QString)

    ProjectBaseBrowser.currentItem

    currentItem()

    Public method to get a reference to the current item.

    Returns:
    reference to the current item

    ProjectBaseBrowser.removeHookMethod

    removeHookMethod(key)

    Public method to remove a hook method from the dictionary.

    key
    for the hook method (string)

    ProjectBaseBrowser.selectFile

    selectFile(fn)

    Public method to highlight a node given its filename.

    fn
    filename of file to be highlighted (string or QString)

    ProjectBaseBrowser.selectLocalDirEntries

    selectLocalDirEntries()

    Public slot to handle the select local directories context menu entries

    ProjectBaseBrowser.selectLocalEntries

    selectLocalEntries()

    Public slot to handle the select local files context menu entries

    ProjectBaseBrowser.selectVCSDirEntries

    selectVCSDirEntries()

    Public slot to handle the select VCS directories context menu entries

    ProjectBaseBrowser.selectVCSEntries

    selectVCSEntries()

    Public slot to handle the select VCS files context menu entries


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.DownloadDialog.html0000644000175000001440000000013212261331351027452 xustar000000000000000030 mtime=1388688105.323228468 30 atime=1389081085.087724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.DownloadDialog.html0000644000175000001440000002153112261331351027206 0ustar00detlevusers00000000000000 eric4.Helpviewer.DownloadDialog

    eric4.Helpviewer.DownloadDialog

    Module implementing the download dialog.

    Global Attributes

    None

    Classes

    DownloadDialog Class implementing the download dialog.

    Functions

    None


    DownloadDialog

    Class implementing the download dialog.

    Signals

    done()
    emitted just before the dialog is closed

    Derived from

    QWidget, Ui_DownloadDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    DownloadDialog Constructor
    __dataString Private method to generate a formatted data string.
    __downloadProgress Private method show the download progress.
    __downloadedSuccessfully Private method to determine the download status.
    __downloading Private method to determine, if a download is in progress.
    __finished Private slot to handle the download finished.
    __getFileName Private method to get the filename to save to from the user.
    __metaDataChanged Private slot to handle a change of the meta data.
    __networkError Private slot to handle a network error.
    __open Private slot to open the downloaded file.
    __readyRead Private slot to read the available data.
    __saveFileName Private method to calculate a name for the file to download.
    __stop Private slot to stop the download.
    __tryAgain Private slot to retry the download.
    __updateInfoLabel Private method to update the info label.
    closeEvent Protected method called when the dialog is closed.
    initialize Public method to (re)initialize the dialog.
    on_buttonBox_clicked Private slot called by a button of the button box clicked.

    Static Methods

    None

    DownloadDialog (Constructor)

    DownloadDialog(reply = None, requestFilename = False, webPage = None, download = False, parent = None)

    Constructor

    reply
    reference to the network reply object (QNetworkReply)
    requestFilename
    flag indicating to ask the user for a filename (boolean)
    webPage
    reference to the web page object the download originated from (QWebPage)
    download
    flag indicating a download operation (boolean)
    parent
    reference to the parent widget (QWidget)

    DownloadDialog.__dataString

    __dataString(size)

    Private method to generate a formatted data string.

    size
    size to be formatted (integer)
    Returns:
    formatted data string (QString)

    DownloadDialog.__downloadProgress

    __downloadProgress(received, total)

    Private method show the download progress.

    received
    number of bytes received (integer)
    total
    number of total bytes (integer)

    DownloadDialog.__downloadedSuccessfully

    __downloadedSuccessfully()

    Private method to determine the download status.

    Returns:
    download status (boolean)

    DownloadDialog.__downloading

    __downloading()

    Private method to determine, if a download is in progress.

    Returns:
    flag indicating a download is in progress (boolean)

    DownloadDialog.__finished

    __finished()

    Private slot to handle the download finished.

    DownloadDialog.__getFileName

    __getFileName()

    Private method to get the filename to save to from the user.

    Returns:
    flag indicating success (boolean)

    DownloadDialog.__metaDataChanged

    __metaDataChanged()

    Private slot to handle a change of the meta data.

    DownloadDialog.__networkError

    __networkError()

    Private slot to handle a network error.

    DownloadDialog.__open

    __open()

    Private slot to open the downloaded file.

    DownloadDialog.__readyRead

    __readyRead()

    Private slot to read the available data.

    DownloadDialog.__saveFileName

    __saveFileName(directory)

    Private method to calculate a name for the file to download.

    directory
    name of the directory to store the file into (QString)
    Returns:
    proposed filename (QString)

    DownloadDialog.__stop

    __stop()

    Private slot to stop the download.

    DownloadDialog.__tryAgain

    __tryAgain()

    Private slot to retry the download.

    DownloadDialog.__updateInfoLabel

    __updateInfoLabel()

    Private method to update the info label.

    DownloadDialog.closeEvent

    closeEvent(evt)

    Protected method called when the dialog is closed.

    DownloadDialog.initialize

    initialize()

    Public method to (re)initialize the dialog.

    Returns:
    flag indicating success (boolean)

    DownloadDialog.on_buttonBox_clicked

    on_buttonBox_clicked(button)

    Private slot called by a button of the button box clicked.

    button
    button that was clicked (QAbstractButton)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DebugClients.Python3.AsyncFile.html0000644000175000001440000000013212261331354030244 xustar000000000000000030 mtime=1388688108.079229851 30 atime=1389081085.100724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.DebugClients.Python3.AsyncFile.html0000644000175000001440000002261612261331354030005 0ustar00detlevusers00000000000000 eric4.DebugClients.Python3.AsyncFile

    eric4.DebugClients.Python3.AsyncFile

    Module implementing an asynchronous file like socket interface for the debugger.

    Global Attributes

    None

    Classes

    AsyncFile Class wrapping a socket object with a file interface.

    Functions

    AsyncPendingWrite Module function to check for data to be written.


    AsyncFile

    Class wrapping a socket object with a file interface.

    Derived from

    object

    Class Attributes

    maxbuffersize
    maxtries

    Class Methods

    None

    Methods

    AsyncFile Constructor
    __checkMode Private method to check the mode.
    __nWrite Private method to write a specific number of pending bytes.
    close Public method to close the file.
    fileno Public method returning the file number.
    flush Public method to write all pending bytes.
    isatty Public method to indicate whether a tty interface is supported.
    pendingWrite Public method that returns the number of bytes waiting to be written.
    read Public method to read bytes from this file.
    read_p Public method to read bytes from this file.
    readline Public method to read one line from this file.
    readline_p Public method to read a line from this file.
    readlines Public method to read all lines from this file.
    seek Public method to move the filepointer.
    tell Public method to get the filepointer position.
    truncate Public method to truncate the file.
    write Public method to write a string to the file.
    writelines Public method to write a list of strings to the file.

    Static Methods

    None

    AsyncFile (Constructor)

    AsyncFile(sock, mode, name)

    Constructor

    sock
    the socket object being wrapped
    mode
    mode of this file (string)
    name
    name of this file (string)

    AsyncFile.__checkMode

    __checkMode(mode)

    Private method to check the mode.

    This method checks, if an operation is permitted according to the mode of the file. If it is not, an IOError is raised.

    mode
    the mode to be checked (string)

    AsyncFile.__nWrite

    __nWrite(n)

    Private method to write a specific number of pending bytes.

    n
    the number of bytes to be written (int)

    AsyncFile.close

    close(closeit = False)

    Public method to close the file.

    closeit
    flag to indicate a close ordered by the debugger code (boolean)

    AsyncFile.fileno

    fileno()

    Public method returning the file number.

    Returns:
    file number (int)

    AsyncFile.flush

    flush()

    Public method to write all pending bytes.

    AsyncFile.isatty

    isatty()

    Public method to indicate whether a tty interface is supported.

    Returns:
    always false

    AsyncFile.pendingWrite

    pendingWrite()

    Public method that returns the number of bytes waiting to be written.

    Returns:
    the number of bytes to be written (int)

    AsyncFile.read

    read(size = -1)

    Public method to read bytes from this file.

    size
    maximum number of bytes to be read (int)
    Returns:
    the bytes read (any)

    AsyncFile.read_p

    read_p(size = -1)

    Public method to read bytes from this file.

    size
    maximum number of bytes to be read (int)
    Returns:
    the bytes read (any)

    AsyncFile.readline

    readline(sizehint = -1)

    Public method to read one line from this file.

    sizehint
    hint of the numbers of bytes to be read (int)
    Returns:
    one line read (string)

    AsyncFile.readline_p

    readline_p(size = -1)

    Public method to read a line from this file.

    Note: This method will not block and may return only a part of a line if that is all that is available.

    size
    maximum number of bytes to be read (int)
    Returns:
    one line of text up to size bytes (string)

    AsyncFile.readlines

    readlines(sizehint = -1)

    Public method to read all lines from this file.

    sizehint
    hint of the numbers of bytes to be read (int)
    Returns:
    list of lines read (list of strings)

    AsyncFile.seek

    seek(offset, whence = 0)

    Public method to move the filepointer.

    offset
    offset to move the filepointer to (integer)
    whence
    position the offset relates to
    Raises IOError:
    This method is not supported and always raises an IOError.

    AsyncFile.tell

    tell()

    Public method to get the filepointer position.

    Raises IOError:
    This method is not supported and always raises an IOError.

    AsyncFile.truncate

    truncate(size = -1)

    Public method to truncate the file.

    size
    size to truncaze to (integer)
    Raises IOError:
    This method is not supported and always raises an IOError.

    AsyncFile.write

    write(s)

    Public method to write a string to the file.

    s
    bytes to be written (string)

    AsyncFile.writelines

    writelines(list)

    Public method to write a list of strings to the file.

    list
    the list to be written (list of string)


    AsyncPendingWrite

    AsyncPendingWrite(file)

    Module function to check for data to be written.

    file
    The file object to be checked (file)
    Returns:
    Flag indicating if there is data wating (int)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.Lexers.Lexer.html0000644000175000001440000000013212261331354027037 xustar000000000000000030 mtime=1388688108.583230104 30 atime=1389081085.100724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.Lexers.Lexer.html0000644000175000001440000001747112261331354026603 0ustar00detlevusers00000000000000 eric4.QScintilla.Lexers.Lexer

    eric4.QScintilla.Lexers.Lexer

    Module implementing the lexer base class.

    Global Attributes

    None

    Classes

    Lexer Class to implement the lexer mixin class.

    Functions

    None


    Lexer

    Class to implement the lexer mixin class.

    Derived from

    object

    Class Attributes

    None

    Class Methods

    None

    Methods

    Lexer Constructor
    alwaysKeepTabs Public method to check, if tab conversion is allowed.
    autoCompletionWordSeparators Public method to return the list of separators for autocompletion.
    boxCommentStr Public method to return the box comment strings.
    canBlockComment Public method to determine, whether the lexer language supports a block comment.
    canBoxComment Public method to determine, whether the lexer language supports a box comment.
    canStreamComment Public method to determine, whether the lexer language supports a stream comment.
    commentStr Public method to return the comment string.
    hasSmartIndent Public method indicating whether lexer can do smart indentation.
    initProperties Public slot to initialize the properties.
    isCommentStyle Public method to check, if a style is a comment style.
    isStringStyle Public method to check, if a style is a string style.
    keywords Public method to get the keywords.
    smartIndentLine Public method to handle smart indentation for a line.
    smartIndentSelection Public method to handle smart indentation for a selection of lines.
    streamCommentStr Public method to return the stream comment strings.

    Static Methods

    None

    Lexer (Constructor)

    Lexer()

    Constructor

    Lexer.alwaysKeepTabs

    alwaysKeepTabs()

    Public method to check, if tab conversion is allowed.

    Returns:
    flag indicating to keep tabs (boolean)

    Lexer.autoCompletionWordSeparators

    autoCompletionWordSeparators()

    Public method to return the list of separators for autocompletion.

    Returns:
    list of separators (QStringList)

    Lexer.boxCommentStr

    boxCommentStr()

    Public method to return the box comment strings.

    Returns:
    box comment strings (dictionary with three QStrings)

    Lexer.canBlockComment

    canBlockComment()

    Public method to determine, whether the lexer language supports a block comment.

    Returns:
    flag (boolean)

    Lexer.canBoxComment

    canBoxComment()

    Public method to determine, whether the lexer language supports a box comment.

    Returns:
    flag (boolean)

    Lexer.canStreamComment

    canStreamComment()

    Public method to determine, whether the lexer language supports a stream comment.

    Returns:
    flag (boolean)

    Lexer.commentStr

    commentStr()

    Public method to return the comment string.

    Returns:
    comment string (QString)

    Lexer.hasSmartIndent

    hasSmartIndent()

    Public method indicating whether lexer can do smart indentation.

    Returns:
    flag indicating availability of smartIndentLine and smartIndentSelection methods (boolean)

    Lexer.initProperties

    initProperties()

    Public slot to initialize the properties.

    Lexer.isCommentStyle

    isCommentStyle(style)

    Public method to check, if a style is a comment style.

    Returns:
    flag indicating a comment style (boolean)

    Lexer.isStringStyle

    isStringStyle(style)

    Public method to check, if a style is a string style.

    Returns:
    flag indicating a string style (boolean)

    Lexer.keywords

    keywords(kwSet)

    Public method to get the keywords.

    kwSet
    number of the keyword set (integer)
    Returns:
    string giving the keywords (string) or None

    Lexer.smartIndentLine

    smartIndentLine(editor)

    Public method to handle smart indentation for a line.

    editor
    reference to the QScintilla editor object

    Lexer.smartIndentSelection

    smartIndentSelection(editor)

    Public method to handle smart indentation for a selection of lines.

    Note: The assumption is, that the first line determines the new indentation level.

    editor
    reference to the QScintilla editor object

    Lexer.streamCommentStr

    streamCommentStr()

    Public method to return the stream comment strings.

    Returns:
    stream comment strings (dictionary with two QStrings)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.Network.NetworkAccessManager0000644000175000001440000000013212261331353031320 xustar000000000000000030 mtime=1388688107.932229778 30 atime=1389081085.100724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.Network.NetworkAccessManagerProxy.html0000644000175000001440000000747112261331353033070 0ustar00detlevusers00000000000000 eric4.Helpviewer.Network.NetworkAccessManagerProxy

    eric4.Helpviewer.Network.NetworkAccessManagerProxy

    Module implementing a network access manager proxy for web pages.

    Global Attributes

    None

    Classes

    NetworkAccessManagerProxy Class implementing a network access manager proxy for web pages.

    Functions

    None


    NetworkAccessManagerProxy

    Class implementing a network access manager proxy for web pages.

    Derived from

    QNetworkAccessManager

    Class Attributes

    primaryManager

    Class Methods

    None

    Methods

    NetworkAccessManagerProxy Constructor
    createRequest Protected method to create a request.
    setPrimaryNetworkAccessManager Public method to set the primary network access manager.
    setWebPage Public method to set the reference to a web page.

    Static Methods

    None

    NetworkAccessManagerProxy (Constructor)

    NetworkAccessManagerProxy(parent = None)

    Constructor

    parent
    reference to the parent object (QObject)

    NetworkAccessManagerProxy.createRequest

    createRequest(op, request, outgoingData = None)

    Protected method to create a request.

    op
    the operation to be performed (QNetworkAccessManager.Operation)
    request
    reference to the request object (QNetworkRequest)
    outgoingData
    reference to an IODevice containing data to be sent (QIODevice)
    Returns:
    reference to the created reply object (QNetworkReply)

    NetworkAccessManagerProxy.setPrimaryNetworkAccessManager

    setPrimaryNetworkAccessManager(manager)

    Public method to set the primary network access manager.

    manager
    reference to the network access manager object (QNetworkAccessManager)

    NetworkAccessManagerProxy.setWebPage

    setWebPage(page)

    Public method to set the reference to a web page.

    page
    reference to the web page object (HelpWebPage)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.CheckerPlugins.Tabnanny.Tabnann0000644000175000001440000000013212261331352031167 xustar000000000000000030 mtime=1388688106.647229132 30 atime=1389081085.100724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.CheckerPlugins.Tabnanny.Tabnanny.html0000644000175000001440000002254612261331352032066 0ustar00detlevusers00000000000000 eric4.Plugins.CheckerPlugins.Tabnanny.Tabnanny

    eric4.Plugins.CheckerPlugins.Tabnanny.Tabnanny

    The Tab Nanny despises ambiguous indentation. She knows no mercy.

    tabnanny -- Detection of ambiguous indentation

    For the time being this module is intended to be called as a script. However it is possible to import it into an IDE and use the function check() described below.

    Warning: The API provided by this module is likely to change in future releases; such changes may not be backward compatible.

    This is a modified version to make the original tabnanny better suitable for being called from within the eric4 IDE.

    Raises ValueError:
    The tokenize module is too old.

    Global Attributes

    __all__
    __version__

    Classes

    NannyNag Raised by tokeneater() if detecting an ambiguous indent.
    Whitespace Class implementing the whitespace checker.

    Functions

    check Private function to check one Python source file for whitespace related problems.
    format_witnesses Function to format the witnesses as a readable string.
    process_tokens Function processing all tokens generated by a tokenizer run.


    NannyNag

    Raised by tokeneater() if detecting an ambiguous indent. Captured and handled in check().

    Derived from

    Exception

    Class Attributes

    None

    Class Methods

    None

    Methods

    NannyNag Constructor
    get_line Method to retrieve the offending line.
    get_lineno Method to retrieve the line number.
    get_msg Method to retrieve the message.

    Static Methods

    None

    NannyNag (Constructor)

    NannyNag(lineno, msg, line)

    Constructor

    lineno
    Line number of the ambiguous indent.
    msg
    Descriptive message assigned to this problem.
    line
    The offending source line.

    NannyNag.get_line

    get_line()

    Method to retrieve the offending line.

    Returns:
    The line of code (string)

    NannyNag.get_lineno

    get_lineno()

    Method to retrieve the line number.

    Returns:
    The line number (integer)

    NannyNag.get_msg

    get_msg()

    Method to retrieve the message.

    Returns:
    The error message (string)


    Whitespace

    Class implementing the whitespace checker.

    Derived from

    object

    Class Attributes

    None

    Class Methods

    None

    Methods

    Whitespace Constructor
    equal Method to compare the indentation levels of two Whitespace objects for equality.
    indent_level Method to determine the indentation level.
    less Method to compare the indentation level against another Whitespace objects to be smaller.
    longest_run_of_spaces Method to calculate the length of longest contiguous run of spaces.
    not_equal_witness Method to calculate a tuple of witnessing tab size.
    not_less_witness Method to calculate a tuple of witnessing tab size.

    Static Methods

    None

    Whitespace (Constructor)

    Whitespace(ws)

    Constructor

    ws
    The string to be checked.

    Whitespace.equal

    equal(other)

    Method to compare the indentation levels of two Whitespace objects for equality.

    other
    Whitespace object to compare against.
    Returns:
    True, if we compare equal against the other Whitespace object.

    Whitespace.indent_level

    indent_level(tabsize)

    Method to determine the indentation level.

    tabsize
    The length of a tab stop. (integer)
    Returns:
    indentation level (integer)

    Whitespace.less

    less(other)

    Method to compare the indentation level against another Whitespace objects to be smaller.

    other
    Whitespace object to compare against.
    Returns:
    True, if we compare less against the other Whitespace object.

    Whitespace.longest_run_of_spaces

    longest_run_of_spaces()

    Method to calculate the length of longest contiguous run of spaces.

    Returns:
    The length of longest contiguous run of spaces (whether or not preceding a tab)

    Whitespace.not_equal_witness

    not_equal_witness(other)

    Method to calculate a tuple of witnessing tab size.

    Intended to be used after not self.equal(other) is known, in which case it will return at least one witnessing tab size.

    other
    Whitespace object to calculate against.
    Returns:
    A list of tuples (ts, i1, i2) such that i1 == self.indent_level(ts) != other.indent_level(ts) == i2.

    Whitespace.not_less_witness

    not_less_witness(other)

    Method to calculate a tuple of witnessing tab size.

    Intended to be used after not self.less(other is known, in which case it will return at least one witnessing tab size.

    other
    Whitespace object to calculate against.
    Returns:
    A list of tuples (ts, i1, i2) such that i1 == self.indent_level(ts) >= other.indent_level(ts) == i2.


    check

    check(file)

    Private function to check one Python source file for whitespace related problems.

    file
    source filename (string)
    Returns:
    A tuple indicating status (True = an error was found), the filename, the linenumber and the error message (boolean, string, string, string). The values are only valid, if the status is True.


    format_witnesses

    format_witnesses(w)

    Function to format the witnesses as a readable string.

    w
    A list of witnesses
    Returns:
    A formated string of the witnesses.


    process_tokens

    process_tokens(tokens)

    Function processing all tokens generated by a tokenizer run.

    tokens
    list of tokens

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.VCS.__init__.html0000644000175000001440000000013212261331351024643 xustar000000000000000030 mtime=1388688105.176228394 30 atime=1389081085.101724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.VCS.__init__.html0000644000175000001440000000310112261331351024370 0ustar00detlevusers00000000000000 eric4.VCS.__init__

    eric4.VCS.__init__

    Module implementing the general part of the interface to version control systems.

    The general part of the VCS interface defines classes to implement common dialogs. These are a dialog to enter command options, a dialog to display some repository information and an abstract base class. The individual interfaces (i.e. CVS) have to be subclasses of this base class.

    Global Attributes

    None

    Classes

    None

    Functions

    factory Modul factory function to generate the right vcs object.


    factory

    factory(vcs)

    Modul factory function to generate the right vcs object.

    vcs
    name of the VCS system to be used (string)
    Returns:
    the instantiated VCS object

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.eric4_webbrowser.html0000644000175000001440000000013212261331350025720 xustar000000000000000030 mtime=1388688104.219227913 30 atime=1389081085.101724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.eric4_webbrowser.html0000644000175000001440000000331712261331350025456 0ustar00detlevusers00000000000000 eric4.eric4_webbrowser

    eric4.eric4_webbrowser

    Eric4 Web Browser

    This is the main Python script that performs the necessary initialization of the web browser and starts the Qt event loop. This is a standalone version of the integrated helpviewer.

    Global Attributes

    None

    Classes

    None

    Functions

    createMainWidget Function to create the main widget.
    main Main entry point into the application.


    createMainWidget

    createMainWidget(argv)

    Function to create the main widget.

    argv
    list of commandline parameters (list of strings)
    Returns:
    reference to the main widget (QWidget)


    main

    main()

    Main entry point into the application.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.Lexers.LexerJavaScript.html0000644000175000001440000000013212261331354031026 xustar000000000000000030 mtime=1388688108.624230125 30 atime=1389081085.101724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.Lexers.LexerJavaScript.html0000644000175000001440000000702512261331354030564 0ustar00detlevusers00000000000000 eric4.QScintilla.Lexers.LexerJavaScript

    eric4.QScintilla.Lexers.LexerJavaScript

    Module implementing a JavaScript lexer with some additional methods.

    Global Attributes

    None

    Classes

    LexerJavaScript Subclass to implement some additional lexer dependant methods.

    Functions

    None


    LexerJavaScript

    Subclass to implement some additional lexer dependant methods.

    Derived from

    QsciLexerJavaScript, Lexer

    Class Attributes

    None

    Class Methods

    None

    Methods

    LexerJavaScript Constructor
    defaultKeywords Public method to get the default keywords.
    initProperties Public slot to initialize the properties.
    isCommentStyle Public method to check, if a style is a comment style.
    isStringStyle Public method to check, if a style is a string style.

    Static Methods

    None

    LexerJavaScript (Constructor)

    LexerJavaScript(parent=None)

    Constructor

    parent
    parent widget of this lexer

    LexerJavaScript.defaultKeywords

    defaultKeywords(kwSet)

    Public method to get the default keywords.

    kwSet
    number of the keyword set (integer)
    Returns:
    string giving the keywords (string) or None

    LexerJavaScript.initProperties

    initProperties()

    Public slot to initialize the properties.

    LexerJavaScript.isCommentStyle

    isCommentStyle(style)

    Public method to check, if a style is a comment style.

    Returns:
    flag indicating a comment style (boolean)

    LexerJavaScript.isStringStyle

    isStringStyle(style)

    Public method to check, if a style is a string style.

    Returns:
    flag indicating a string style (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.SearchWidget.html0000644000175000001440000000013212261331351027134 xustar000000000000000030 mtime=1388688105.312228462 30 atime=1389081085.101724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.SearchWidget.html0000644000175000001440000001400412261331351026665 0ustar00detlevusers00000000000000 eric4.Helpviewer.SearchWidget

    eric4.Helpviewer.SearchWidget

    Module implementing the search bar for the web browser.

    Global Attributes

    None

    Classes

    SearchWidget Class implementing the search bar for the web browser.

    Functions

    None


    SearchWidget

    Class implementing the search bar for the web browser.

    Derived from

    QWidget, Ui_SearchWidget

    Class Attributes

    None

    Class Methods

    None

    Methods

    SearchWidget Constructor
    __findByReturnPressed Private slot to handle the returnPressed signal of the findtext combobox.
    __findNextPrev Private slot to find the next occurrence of text.
    __setFindtextComboBackground Private slot to change the findtext combo background to indicate errors.
    findNext Public slot to find the next occurrence.
    findPrevious Public slot to find the previous occurrence.
    keyPressEvent Protected slot to handle key press events.
    on_closeButton_clicked Private slot to close the widget.
    on_findNextButton_clicked Private slot to find the next occurrence.
    on_findPrevButton_clicked Private slot to find the previous occurrence.
    on_findtextCombo_editTextChanged Private slot to enable/disable the find buttons.
    showFind Public method to display this dialog.

    Static Methods

    None

    SearchWidget (Constructor)

    SearchWidget(mainWindow, parent = None)

    Constructor

    mainWindow
    reference to the main window (QMainWindow)
    parent
    parent widget of this dialog (QWidget)

    SearchWidget.__findByReturnPressed

    __findByReturnPressed()

    Private slot to handle the returnPressed signal of the findtext combobox.

    SearchWidget.__findNextPrev

    __findNextPrev()

    Private slot to find the next occurrence of text.

    SearchWidget.__setFindtextComboBackground

    __setFindtextComboBackground(error)

    Private slot to change the findtext combo background to indicate errors.

    error
    flag indicating an error condition (boolean)

    SearchWidget.findNext

    findNext()

    Public slot to find the next occurrence.

    SearchWidget.findPrevious

    findPrevious()

    Public slot to find the previous occurrence.

    SearchWidget.keyPressEvent

    keyPressEvent(event)

    Protected slot to handle key press events.

    event
    reference to the key press event (QKeyEvent)

    SearchWidget.on_closeButton_clicked

    on_closeButton_clicked()

    Private slot to close the widget.

    SearchWidget.on_findNextButton_clicked

    on_findNextButton_clicked()

    Private slot to find the next occurrence.

    SearchWidget.on_findPrevButton_clicked

    on_findPrevButton_clicked()

    Private slot to find the previous occurrence.

    SearchWidget.on_findtextCombo_editTextChanged

    on_findtextCombo_editTextChanged(txt)

    Private slot to enable/disable the find buttons.

    SearchWidget.showFind

    showFind()

    Public method to display this dialog.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.PluginSyntaxChecker.html0000644000175000001440000000013212261331350030023 xustar000000000000000030 mtime=1388688104.486228047 30 atime=1389081085.101724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.PluginSyntaxChecker.html0000644000175000001440000001655312261331350027567 0ustar00detlevusers00000000000000 eric4.Plugins.PluginSyntaxChecker

    eric4.Plugins.PluginSyntaxChecker

    Module implementing the Tabnanny plugin.

    Global Attributes

    author
    autoactivate
    className
    deactivateable
    error
    longDescription
    name
    packageName
    shortDescription
    version

    Classes

    SyntaxCheckerPlugin Class implementing the Syntax Checker plugin.

    Functions

    None


    SyntaxCheckerPlugin

    Class implementing the Syntax Checker plugin.

    Derived from

    QObject

    Class Attributes

    None

    Class Methods

    None

    Methods

    SyntaxCheckerPlugin Constructor
    __editorClosed Private slot called, when an editor was closed.
    __editorOpened Private slot called, when a new editor was opened.
    __editorShowMenu Private slot called, when the the editor context menu or a submenu is about to be shown.
    __editorSyntaxCheck Private slot to handle the syntax check context menu action of the editors.
    __initialize Private slot to (re)initialize the plugin.
    __projectBrowserShowMenu Private slot called, when the the project browser menu or a submenu is about to be shown.
    __projectBrowserSyntaxCheck Private method to handle the syntax check context menu action of the project sources browser.
    __projectShowMenu Private slot called, when the the project menu or a submenu is about to be shown.
    __projectSyntaxCheck Public slot used to check the project files for bad indentations.
    activate Public method to activate this plugin.
    deactivate Public method to deactivate this plugin.

    Static Methods

    None

    SyntaxCheckerPlugin (Constructor)

    SyntaxCheckerPlugin(ui)

    Constructor

    ui
    reference to the user interface object (UI.UserInterface)

    SyntaxCheckerPlugin.__editorClosed

    __editorClosed(editor)

    Private slot called, when an editor was closed.

    editor
    reference to the editor (QScintilla.Editor)

    SyntaxCheckerPlugin.__editorOpened

    __editorOpened(editor)

    Private slot called, when a new editor was opened.

    editor
    reference to the new editor (QScintilla.Editor)

    SyntaxCheckerPlugin.__editorShowMenu

    __editorShowMenu(menuName, menu, editor)

    Private slot called, when the the editor context menu or a submenu is about to be shown.

    menuName
    name of the menu to be shown (string)
    menu
    reference to the menu (QMenu)
    editor
    reference to the editor

    SyntaxCheckerPlugin.__editorSyntaxCheck

    __editorSyntaxCheck()

    Private slot to handle the syntax check context menu action of the editors.

    SyntaxCheckerPlugin.__initialize

    __initialize()

    Private slot to (re)initialize the plugin.

    SyntaxCheckerPlugin.__projectBrowserShowMenu

    __projectBrowserShowMenu(menuName, menu)

    Private slot called, when the the project browser menu or a submenu is about to be shown.

    menuName
    name of the menu to be shown (string)
    menu
    reference to the menu (QMenu)

    SyntaxCheckerPlugin.__projectBrowserSyntaxCheck

    __projectBrowserSyntaxCheck()

    Private method to handle the syntax check context menu action of the project sources browser.

    SyntaxCheckerPlugin.__projectShowMenu

    __projectShowMenu(menuName, menu)

    Private slot called, when the the project menu or a submenu is about to be shown.

    menuName
    name of the menu to be shown (string)
    menu
    reference to the menu (QMenu)

    SyntaxCheckerPlugin.__projectSyntaxCheck

    __projectSyntaxCheck()

    Public slot used to check the project files for bad indentations.

    SyntaxCheckerPlugin.activate

    activate()

    Public method to activate this plugin.

    Returns:
    tuple of None and activation status (boolean)

    SyntaxCheckerPlugin.deactivate

    deactivate()

    Public method to deactivate this plugin.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.DataViews.html0000644000175000001440000000013112261331354025450 xustar000000000000000030 mtime=1388688108.661230144 29 atime=1389081085.10272436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.DataViews.html0000644000175000001440000000231012261331354025177 0ustar00detlevusers00000000000000 eric4.DataViews

    eric4.DataViews

    Package containing modules for viewing various data.

    Modules

    CodeMetrics Module implementing a simple Python code metrics analyzer.
    CodeMetricsDialog Module implementing a code metrics dialog.
    PyCoverageDialog Module implementing a Python code coverage dialog.
    PyProfileDialog Module implementing a dialog to display profile data.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.KdeQt.KQPrintDialog.html0000644000175000001440000000013112261331351026130 xustar000000000000000030 mtime=1388688105.550228582 29 atime=1389081085.10272436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.KdeQt.KQPrintDialog.html0000644000175000001440000000510112261331351025660 0ustar00detlevusers00000000000000 eric4.KdeQt.KQPrintDialog

    eric4.KdeQt.KQPrintDialog

    Compatibility module to use the KDE Print Dialog instead of the Qt Print Dialog.

    Global Attributes

    None

    Classes

    __qtKQPrintDialog Compatibility class to use the Qt Print Dialog.

    Functions

    KQPrintDialog Public function to instantiate a printer dialog object.
    __kdeKQPrintDialog Compatibility function to use the KDE4 print dialog.


    __qtKQPrintDialog

    Compatibility class to use the Qt Print Dialog.

    Derived from

    QPrintDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    None

    Static Methods

    None


    KQPrintDialog

    KQPrintDialog(printer, parent = None)

    Public function to instantiate a printer dialog object.

    printer
    reference to the printer object (QPrinter)
    parent
    reference to the parent widget (QWidget)
    Returns:
    reference to the printer dialog object


    __kdeKQPrintDialog

    __kdeKQPrintDialog(printer, parent)

    Compatibility function to use the KDE4 print dialog.

    printer
    reference to the printer object (QPrinter)
    parent
    reference to the parent widget (QWidget)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.PluginVcsPySvn.html0000644000175000001440000000013112261331350027002 xustar000000000000000030 mtime=1388688104.504228056 29 atime=1389081085.10272436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.PluginVcsPySvn.html0000644000175000001440000002050612261331350026540 0ustar00detlevusers00000000000000 eric4.Plugins.PluginVcsPySvn

    eric4.Plugins.PluginVcsPySvn

    Module implementing the PySvn version control plugin.

    Global Attributes

    author
    autoactivate
    className
    deactivateable
    error
    longDescription
    name
    packageName
    pluginType
    pluginTypename
    shortDescription
    subversionCfgPluginObject
    version

    Classes

    VcsPySvnPlugin Class implementing the PySvn version control plugin.

    Functions

    createConfigurationPage Module function to create the configuration page.
    displayString Public function to get the display string.
    exeDisplayData Public method to support the display of some executable info.
    getConfigData Module function returning data as required by the configuration dialog.
    getVcsSystemIndicator Public function to get the indicators for this version control system.
    prepareUninstall Module function to prepare for an uninstallation.


    VcsPySvnPlugin

    Class implementing the PySvn version control plugin.

    Derived from

    object

    Class Attributes

    None

    Class Methods

    None

    Methods

    VcsPySvnPlugin Constructor
    activate Public method to activate this plugin.
    deactivate Public method to deactivate this plugin.
    getConfigPath Public method to get the filename of the config file.
    getPreferences Public method to retrieve the various refactoring settings.
    getProjectHelper Public method to get a reference to the project helper object.
    getServersPath Public method to get the filename of the servers file.
    prepareUninstall Public method to prepare for an uninstallation.
    setPreferences Public method to store the various refactoring settings.

    Static Methods

    None

    VcsPySvnPlugin (Constructor)

    VcsPySvnPlugin(ui)

    Constructor

    ui
    reference to the user interface object (UI.UserInterface)

    VcsPySvnPlugin.activate

    activate()

    Public method to activate this plugin.

    Returns:
    tuple of reference to instantiated viewmanager and activation status (boolean)

    VcsPySvnPlugin.deactivate

    deactivate()

    Public method to deactivate this plugin.

    VcsPySvnPlugin.getConfigPath

    getConfigPath()

    Public method to get the filename of the config file.

    Returns:
    filename of the config file (string)

    VcsPySvnPlugin.getPreferences

    getPreferences(key)

    Public method to retrieve the various refactoring settings.

    key
    the key of the value to get
    prefClass
    preferences class used as the storage area
    Returns:
    the requested refactoring setting

    VcsPySvnPlugin.getProjectHelper

    getProjectHelper()

    Public method to get a reference to the project helper object.

    Returns:
    reference to the project helper object

    VcsPySvnPlugin.getServersPath

    getServersPath()

    Public method to get the filename of the servers file.

    Returns:
    filename of the servers file (string)

    VcsPySvnPlugin.prepareUninstall

    prepareUninstall()

    Public method to prepare for an uninstallation.

    VcsPySvnPlugin.setPreferences

    setPreferences(key, value)

    Public method to store the various refactoring settings.

    key
    the key of the setting to be set
    value
    the value to be set
    prefClass
    preferences class used as the storage area


    createConfigurationPage

    createConfigurationPage(configDlg)

    Module function to create the configuration page.

    Returns:
    reference to the configuration page


    displayString

    displayString()

    Public function to get the display string.

    Returns:
    display string (QString)


    exeDisplayData

    exeDisplayData()

    Public method to support the display of some executable info.

    Returns:
    dictionary containing the data to be shown


    getConfigData

    getConfigData()

    Module function returning data as required by the configuration dialog.

    Returns:
    dictionary with key "zzz_subversionPage" containing the relevant data


    getVcsSystemIndicator

    getVcsSystemIndicator()

    Public function to get the indicators for this version control system.

    Returns:
    dictionary with indicator as key and a tuple with the vcs name (string) and vcs display string (QString)


    prepareUninstall

    prepareUninstall()

    Module function to prepare for an uninstallation.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsSubversion.SvnRel0000644000175000001440000000013112261331352031306 xustar000000000000000030 mtime=1388688106.973229296 29 atime=1389081085.10272436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsSubversion.SvnRelocateDialog.html0000644000175000001440000000471512261331352034147 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsSubversion.SvnRelocateDialog

    eric4.Plugins.VcsPlugins.vcsSubversion.SvnRelocateDialog

    Module implementing a dialog to enter the data to relocate the workspace.

    Global Attributes

    None

    Classes

    SvnRelocateDialog Class implementing a dialog to enter the data to relocate the workspace.

    Functions

    None


    SvnRelocateDialog

    Class implementing a dialog to enter the data to relocate the workspace.

    Derived from

    QDialog, Ui_SvnRelocateDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnRelocateDialog Constructor
    getData Public slot used to retrieve the data entered into the dialog.

    Static Methods

    None

    SvnRelocateDialog (Constructor)

    SvnRelocateDialog(currUrl, parent = None)

    Constructor

    currUrl
    current repository URL (string or QString)
    parent
    parent widget (QWidget)

    SvnRelocateDialog.getData

    getData()

    Public slot used to retrieve the data entered into the dialog.

    Returns:
    the new repository URL (string) and an indication, if the relocate is inside the repository (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.Lexers.LexerD.html0000644000175000001440000000013112261331354027142 xustar000000000000000030 mtime=1388688108.597230111 29 atime=1389081085.10272436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.Lexers.LexerD.html0000644000175000001440000000737612261331354026712 0ustar00detlevusers00000000000000 eric4.QScintilla.Lexers.LexerD

    eric4.QScintilla.Lexers.LexerD

    Module implementing a D lexer with some additional methods.

    Global Attributes

    None

    Classes

    LexerD Subclass to implement some additional lexer dependant methods.

    Functions

    None


    LexerD

    Subclass to implement some additional lexer dependant methods.

    Derived from

    QsciLexerD, Lexer

    Class Attributes

    None

    Class Methods

    None

    Methods

    LexerD Constructor
    autoCompletionWordSeparators Public method to return the list of separators for autocompletion.
    defaultKeywords Public method to get the default keywords.
    initProperties Public slot to initialize the properties.
    isCommentStyle Public method to check, if a style is a comment style.
    isStringStyle Public method to check, if a style is a string style.

    Static Methods

    None

    LexerD (Constructor)

    LexerD(parent=None)

    Constructor

    parent
    parent widget of this lexer

    LexerD.autoCompletionWordSeparators

    autoCompletionWordSeparators()

    Public method to return the list of separators for autocompletion.

    Returns:
    list of separators (QStringList)

    LexerD.defaultKeywords

    defaultKeywords(kwSet)

    Public method to get the default keywords.

    kwSet
    number of the keyword set (integer)
    Returns:
    string giving the keywords (string) or None

    LexerD.initProperties

    initProperties()

    Public slot to initialize the properties.

    LexerD.isCommentStyle

    isCommentStyle(style)

    Public method to check, if a style is a comment style.

    Returns:
    flag indicating a comment style (boolean)

    LexerD.isStringStyle

    isStringStyle(style)

    Public method to check, if a style is a string style.

    Returns:
    flag indicating a string style (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.AdBlock.AdBlockDialog.html0000644000175000001440000000013112261331353030501 xustar000000000000000030 mtime=1388688107.707229665 29 atime=1389081085.10272436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.AdBlock.AdBlockDialog.html0000644000175000001440000001155212261331353030240 0ustar00detlevusers00000000000000 eric4.Helpviewer.AdBlock.AdBlockDialog

    eric4.Helpviewer.AdBlock.AdBlockDialog

    Module implementing the AdBlock configuration dialog.

    Global Attributes

    None

    Classes

    AdBlockDialog Class implementing the AdBlock configuration dialog.

    Functions

    None


    AdBlockDialog

    Class implementing the AdBlock configuration dialog.

    Derived from

    QDialog, Ui_AdBlockDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    AdBlockDialog Constructor
    __aboutToShowActionMenu Private slot to show the actions menu.
    __browseSubscriptions Private slot to browse the list of available AdBlock subscriptions.
    __learnAboutWritingFilters Private slot to show the web page about how to write filters.
    __removeSubscription Private slot to remove the selected subscription.
    __updateSubscription Private slot to update the selected subscription.
    addCustomRule Public slot to add a custom AdBlock rule.
    model Public method to return a reference to the subscriptions tree model.
    setCurrentIndex Private slot to set the current index of the subscriptions tree.

    Static Methods

    None

    AdBlockDialog (Constructor)

    AdBlockDialog(parent = None)

    Constructor

    AdBlockDialog.__aboutToShowActionMenu

    __aboutToShowActionMenu()

    Private slot to show the actions menu.

    AdBlockDialog.__browseSubscriptions

    __browseSubscriptions()

    Private slot to browse the list of available AdBlock subscriptions.

    AdBlockDialog.__learnAboutWritingFilters

    __learnAboutWritingFilters()

    Private slot to show the web page about how to write filters.

    AdBlockDialog.__removeSubscription

    __removeSubscription()

    Private slot to remove the selected subscription.

    AdBlockDialog.__updateSubscription

    __updateSubscription()

    Private slot to update the selected subscription.

    AdBlockDialog.addCustomRule

    addCustomRule(rule = "")

    Public slot to add a custom AdBlock rule.

    rule
    string defining the rule to be added (string or QString)

    AdBlockDialog.model

    model()

    Public method to return a reference to the subscriptions tree model.

    AdBlockDialog.setCurrentIndex

    setCurrentIndex(index)

    Private slot to set the current index of the subscriptions tree.

    index
    index to be set (QModelIndex)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.Preferences.html0000644000175000001440000000013112261331354026022 xustar000000000000000030 mtime=1388688108.659230143 29 atime=1389081085.10272436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.Preferences.html0000644000175000001440000000574112261331354025564 0ustar00detlevusers00000000000000 eric4.Preferences

    eric4.Preferences

    Package implementing the preferences interface.

    The preferences interface consists of a class, which defines the default values for all configuration items and stores the actual values. These values are read and written to the eric4 preferences file by module functions. The data is stored in a file in a subdirectory of the users home directory. The individual configuration data is accessed by accessor functions defined on the module level. The module is simply imported wherever it is needed with the statement 'import Preferences'. Do not use 'from Preferences import *' to import it.

    Packages

    ConfigurationPages Package implementing the various pages of the configuration dialog.

    Modules

    ConfigurationDialog Module implementing a dialog for the configuration of eric4.
    PreferencesLexer Module implementing a special QextScintilla lexer to handle the preferences.
    ProgramsDialog Module implementing the Programs page.
    ShortcutDialog Module implementing a dialog for the configuration of a keyboard shortcut.
    Shortcuts Module implementing functions dealing with keyboard shortcuts.
    ShortcutsDialog Module implementing a dialog for the configuration of eric4s keyboard shortcuts.
    ToolConfigurationDialog Module implementing a configuration dialog for the tools menu.
    ToolGroupConfigurationDialog Module implementing a configuration dialog for the tools menu.
    ViewProfileDialog Module implementing a dialog to configure the various view profiles.
    Preferences Package implementing the preferences interface.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ConfigurationPages.EmailPag0000644000175000001440000000013112261331353031215 xustar000000000000000030 mtime=1388688107.601229611 29 atime=1389081085.10272436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.EmailPage.html0000644000175000001440000001115612261331353032064 0ustar00detlevusers00000000000000 eric4.Preferences.ConfigurationPages.EmailPage

    eric4.Preferences.ConfigurationPages.EmailPage

    Module implementing the Email configuration page.

    Global Attributes

    None

    Classes

    EmailPage Class implementing the Email configuration page.

    Functions

    create Module function to create the configuration page.


    EmailPage

    Class implementing the Email configuration page.

    Derived from

    ConfigurationPageBase, Ui_EmailPage

    Class Attributes

    None

    Class Methods

    None

    Methods

    EmailPage Constructor
    __updateTestButton Private slot to update the enabled state of the test button.
    on_mailAuthenticationCheckBox_toggled Private slot to handle a change of the state of the authentication selector.
    on_mailPasswordEdit_textChanged Private slot to handle a change of the text of the user edit.
    on_mailUserEdit_textChanged Private slot to handle a change of the text of the user edit.
    on_testButton_clicked Private slot to test the mail server login data.
    save Public slot to save the Email configuration.

    Static Methods

    None

    EmailPage (Constructor)

    EmailPage()

    Constructor

    EmailPage.__updateTestButton

    __updateTestButton()

    Private slot to update the enabled state of the test button.

    EmailPage.on_mailAuthenticationCheckBox_toggled

    on_mailAuthenticationCheckBox_toggled(checked)

    Private slot to handle a change of the state of the authentication selector.

    checked
    state of the checkbox (boolean)

    EmailPage.on_mailPasswordEdit_textChanged

    on_mailPasswordEdit_textChanged(txt)

    Private slot to handle a change of the text of the user edit.

    txt
    current text of the edit (QString)

    EmailPage.on_mailUserEdit_textChanged

    on_mailUserEdit_textChanged(txt)

    Private slot to handle a change of the text of the user edit.

    txt
    current text of the edit (QString)

    EmailPage.on_testButton_clicked

    on_testButton_clicked()

    Private slot to test the mail server login data.

    EmailPage.save

    save()

    Public slot to save the Email configuration.



    create

    create(dlg)

    Module function to create the configuration page.

    dlg
    reference to the configuration dialog

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Tasks.TaskFilterConfigDialog.html0000644000175000001440000000013112261331352030054 xustar000000000000000029 mtime=1388688106.04422883 30 atime=1389081085.103724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Tasks.TaskFilterConfigDialog.html0000644000175000001440000000473312261331352027616 0ustar00detlevusers00000000000000 eric4.Tasks.TaskFilterConfigDialog

    eric4.Tasks.TaskFilterConfigDialog

    Module implementing the task filter configuration dialog.

    Global Attributes

    None

    Classes

    TaskFilterConfigDialog Class implementing the task filter configuration dialog.

    Functions

    None


    TaskFilterConfigDialog

    Class implementing the task filter configuration dialog.

    Derived from

    QDialog, Ui_TaskFilterConfigDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    TaskFilterConfigDialog Constructor
    configureTaskFilter Public method to set the parameters of the task filter object..

    Static Methods

    None

    TaskFilterConfigDialog (Constructor)

    TaskFilterConfigDialog(taskFilter, parent = None)

    Constructor

    taskFilter
    the task filter object to be configured
    parent
    the parent widget (QWidget)

    TaskFilterConfigDialog.configureTaskFilter

    configureTaskFilter(taskFilter)

    Public method to set the parameters of the task filter object..

    taskFilter
    the task filter object to be configured

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsPySvn.SvnRevision0000644000175000001440000000031412261331353031306 xustar0000000000000000114 path=eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsPySvn.SvnRevisionSelectionDialog.html 30 mtime=1388688107.225229423 30 atime=1389081085.103724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsPySvn.SvnRevisionSelectionDialog.0000644000175000001440000000571112261331353034106 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsPySvn.SvnRevisionSelectionDialog

    eric4.Plugins.VcsPlugins.vcsPySvn.SvnRevisionSelectionDialog

    Module implementing a dialog to enter the revisions for the svn diff command.

    Global Attributes

    None

    Classes

    SvnRevisionSelectionDialog Class implementing a dialog to enter the revisions for the svn diff command.

    Functions

    None


    SvnRevisionSelectionDialog

    Class implementing a dialog to enter the revisions for the svn diff command.

    Derived from

    QDialog, Ui_SvnRevisionSelectionDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnRevisionSelectionDialog Constructor
    __getRevision Private method to generate the revision.
    getRevisions Public method to get the revisions.

    Static Methods

    None

    SvnRevisionSelectionDialog (Constructor)

    SvnRevisionSelectionDialog(parent = None)

    Constructor

    parent
    parent widget of the dialog (QWidget)

    SvnRevisionSelectionDialog.__getRevision

    __getRevision(no)

    Private method to generate the revision.

    no
    revision number to generate (1 or 2)
    Returns:
    revision (integer or string)

    SvnRevisionSelectionDialog.getRevisions

    getRevisions()

    Public method to get the revisions.

    Returns:
    list two integers or strings

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.OpenSearch.OpenSearchDefault0000644000175000001440000000013212261331354031205 xustar000000000000000030 mtime=1388688108.007229815 30 atime=1389081085.108724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.OpenSearch.OpenSearchDefaultEngines.html0000644000175000001440000000276212261331354033222 0ustar00detlevusers00000000000000 eric4.Helpviewer.OpenSearch.OpenSearchDefaultEngines

    eric4.Helpviewer.OpenSearch.OpenSearchDefaultEngines

    YouTube YouTube http://www.youtube.com/favicon.ico

    Global Attributes

    OpenSearchDefaultEngines

    Classes

    None

    Functions

    None

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.AdBlock.AdBlockNetwork.html0000644000175000001440000000013212261331353030734 xustar000000000000000030 mtime=1388688107.709229666 30 atime=1389081085.108724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.AdBlock.AdBlockNetwork.html0000644000175000001440000000333712261331353030474 0ustar00detlevusers00000000000000 eric4.Helpviewer.AdBlock.AdBlockNetwork

    eric4.Helpviewer.AdBlock.AdBlockNetwork

    Module implementing the network block class.

    Global Attributes

    None

    Classes

    AdBlockNetwork Class implementing a network block.

    Functions

    None


    AdBlockNetwork

    Class implementing a network block.

    Derived from

    QObject

    Class Attributes

    None

    Class Methods

    None

    Methods

    block Public method to check for a network block.

    Static Methods

    None

    AdBlockNetwork.block

    block(request)

    Public method to check for a network block.

    Returns:
    reply object (QNetworkReply) or None

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.Network.SchemeAccessHandler.0000644000175000001440000000013212261331353031154 xustar000000000000000030 mtime=1388688107.919229771 30 atime=1389081085.108724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.Network.SchemeAccessHandler.html0000644000175000001440000000516712261331353031604 0ustar00detlevusers00000000000000 eric4.Helpviewer.Network.SchemeAccessHandler

    eric4.Helpviewer.Network.SchemeAccessHandler

    Module implementing the base class for specific scheme access handlers.

    Global Attributes

    None

    Classes

    SchemeAccessHandler Clase implementing the base class for specific scheme access handlers.

    Functions

    None


    SchemeAccessHandler

    Clase implementing the base class for specific scheme access handlers.

    Derived from

    QObject

    Class Attributes

    None

    Class Methods

    None

    Methods

    SchemeAccessHandler Constructor
    createRequest Protected method to create a request.

    Static Methods

    None

    SchemeAccessHandler (Constructor)

    SchemeAccessHandler(parent = None)

    Constructor

    parent
    reference to the parent object (QObject)

    SchemeAccessHandler.createRequest

    createRequest(op, request, outgoingData = None)

    Protected method to create a request.

    op
    the operation to be performed (QNetworkAccessManager.Operation)
    request
    reference to the request object (QNetworkRequest)
    outgoingData
    reference to an IODevice containing data to be sent (QIODevice)
    Returns:
    reference to the created reply object (QNetworkReply)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.Passwords.PasswordsDialog.ht0000644000175000001440000000013212261331353031325 xustar000000000000000030 mtime=1388688107.655229638 30 atime=1389081085.108724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.Passwords.PasswordsDialog.html0000644000175000001440000000522412261331353031413 0ustar00detlevusers00000000000000 eric4.Helpviewer.Passwords.PasswordsDialog

    eric4.Helpviewer.Passwords.PasswordsDialog

    Module implementing a dialog to show all saved logins.

    Global Attributes

    None

    Classes

    PasswordsDialog Class implementing a dialog to show all saved logins.

    Functions

    None


    PasswordsDialog

    Class implementing a dialog to show all saved logins.

    Derived from

    QDialog, Ui_PasswordsDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    PasswordsDialog Constructor
    __calculateHeaderSizes Private method to calculate the section sizes of the horizontal header.
    on_passwordsButton_clicked Private slot to switch the password display mode.

    Static Methods

    None

    PasswordsDialog (Constructor)

    PasswordsDialog(parent = None)

    Constructor

    parent
    reference to the parent widget (QWidget)

    PasswordsDialog.__calculateHeaderSizes

    __calculateHeaderSizes()

    Private method to calculate the section sizes of the horizontal header.

    PasswordsDialog.on_passwordsButton_clicked

    on_passwordsButton_clicked()

    Private slot to switch the password display mode.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.E4XML.ProjectHandler.html0000644000175000001440000000013212261331352026207 xustar000000000000000030 mtime=1388688106.584229101 30 atime=1389081085.108724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.E4XML.ProjectHandler.html0000644000175000001440000006515512261331352025755 0ustar00detlevusers00000000000000 eric4.E4XML.ProjectHandler

    eric4.E4XML.ProjectHandler

    Module implementing the handler class for reading an XML project file.

    Global Attributes

    None

    Classes

    ProjectHandler Class implementing a sax handler to read an XML project file.

    Functions

    None


    ProjectHandler

    Class implementing a sax handler to read an XML project file.

    Derived from

    XMLHandlerBase

    Class Attributes

    None

    Class Methods

    None

    Methods

    ProjectHandler Constructor
    __buildPath Private method to assemble a path.
    endAuthor Handler method for the "Author" end tag.
    endCheckersParams Handler method for the "CheckersParams" end tag.
    endCxfreezeParams Handler method for the "CxfreezeParams" end tag.
    endDescription Handler method for the "Description" end tag.
    endDir Handler method for the "Dir" end tag.
    endDocumentationParams Handler method for the "DocumentationParams" end tag.
    endEmail Handler method for the "Email" end tag.
    endEric3ApiParams Handler method for the "Eric3ApiParams" end tag.
    endEric3DocParams Handler method for the "Eric3DocParams" end tag.
    endEric4ApiParams Handler method for the "Eric4ApiParams" end tag.
    endEric4DocParams Handler method for the "Eric4DocParams" end tag.
    endForm Handler method for the "Form" end tag.
    endInterface Handler method for the "Interface" end tag.
    endLanguage Handler method for the "Language" end tag.
    endMainScript Handler method for the "MainScript" end tag.
    endName Handler method for the "Name" end tag.
    endOther Handler method for the "Other" end tag.
    endOtherToolsParams Handler method for the "OtherToolsParams" end tag.
    endPackagersParams Handler method for the "PackagersParams" end tag.
    endProgLanguage Handler method for the "ProgLanguage" end tag.
    endProjectExcludeList Handler method for the "ProjectExcludeList" end tag.
    endProjectType Handler method for the "ProjectType" end tag.
    endProjectTypeSpecificData Handler method for the "ProjectTypeSpecificData" end tag.
    endProjectWordList Handler method for the "ProjectWordList" end tag.
    endPyLintParams Handler method for the "PyLintParams" end tag.
    endResource Handler method for the "Resource" end tag.
    endSource Handler method for the "Source" end tag.
    endTranslation Handler method for the "Translation" end tag.
    endTranslationException Handler method for the "TranslationException" end tag.
    endTranslationPattern Handler method for the "TranslationPattern" end tag.
    endTranslationPrefix Handler method for the "TranslationPrefix" end tag.
    endTranslationsBinPath Handler method for the "TranslationsBinPath" end tag.
    endUIType Handler method for the "UIType" end tag.
    endVcsOptions Handler method for the "VcsOptions" end tag.
    endVcsOtherData Handler method for the "VcsOtherData" end tag.
    endVcsType Handler method for the "VcsType" end tag.
    endVersion Handler method for the "Version" end tag.
    getVersion Public method to retrieve the version of the project.
    startCheckersParams Handler method for the "CheckersParams" start tag.
    startCxfreezeParams Handler method for the "CxfreezeParams" start tag.
    startDocumentProject Handler called, when the document parsing is started.
    startDocumentationParams Handler method for the "DocumentationParams" start tag.
    startEric4ApiParams Handler method for the "Eric4ApiParams" start tag.
    startEric4DocParams Handler method for the "Eric4DocParams" start tag.
    startFiletypeAssociation Handler method for the "FiletypeAssociation" start tag.
    startForm Handler method for the "Form" start tag.
    startInterface Handler method for the "Interface" start tag.
    startLexerAssociation Handler method for the "LexerAssociation" start tag.
    startMainScript Handler method for the "MainScript" start tag.
    startOther Handler method for the "Other" start tag.
    startOtherToolsParams Handler method for the "OtherToolsParams" start tag.
    startPackagersParams Handler method for the "PackagersParams" start tag.
    startProgLanguage Handler method for the "Source" start tag.
    startProject Handler method for the "Project" start tag.
    startProjectTypeSpecificData Handler method for the "ProjectTypeSpecificData" start tag.
    startPyLintParams Handler method for the "PyLintParams" start tag.
    startResource Handler method for the "Resource" start tag.
    startSource Handler method for the "Source" start tag.
    startTranslation Handler method for the "Translation" start tag.
    startTranslationException Handler method for the "TranslationException" start tag.
    startTranslationPrefix Handler method for the "TranslationPrefix" start tag.
    startTranslationsBinPath Handler method for the "TranslationsBinPath" start tag.
    startVcsOptions Handler method for the "VcsOptions" start tag.
    startVcsOtherData Handler method for the "VcsOtherData" start tag.

    Static Methods

    None

    ProjectHandler (Constructor)

    ProjectHandler(project)

    Constructor

    project
    Reference to the project object to store the information into.

    ProjectHandler.__buildPath

    __buildPath()

    Private method to assemble a path.

    Returns:
    The ready assembled path. (string)

    ProjectHandler.endAuthor

    endAuthor()

    Handler method for the "Author" end tag.

    ProjectHandler.endCheckersParams

    endCheckersParams()

    Handler method for the "CheckersParams" end tag.

    ProjectHandler.endCxfreezeParams

    endCxfreezeParams()

    Handler method for the "CxfreezeParams" end tag.

    ProjectHandler.endDescription

    endDescription()

    Handler method for the "Description" end tag.

    ProjectHandler.endDir

    endDir()

    Handler method for the "Dir" end tag.

    ProjectHandler.endDocumentationParams

    endDocumentationParams()

    Handler method for the "DocumentationParams" end tag.

    ProjectHandler.endEmail

    endEmail()

    Handler method for the "Email" end tag.

    ProjectHandler.endEric3ApiParams

    endEric3ApiParams()

    Handler method for the "Eric3ApiParams" end tag.

    ProjectHandler.endEric3DocParams

    endEric3DocParams()

    Handler method for the "Eric3DocParams" end tag.

    ProjectHandler.endEric4ApiParams

    endEric4ApiParams()

    Handler method for the "Eric4ApiParams" end tag.

    ProjectHandler.endEric4DocParams

    endEric4DocParams()

    Handler method for the "Eric4DocParams" end tag.

    ProjectHandler.endForm

    endForm()

    Handler method for the "Form" end tag.

    ProjectHandler.endInterface

    endInterface()

    Handler method for the "Interface" end tag.

    ProjectHandler.endLanguage

    endLanguage()

    Handler method for the "Language" end tag.

    ProjectHandler.endMainScript

    endMainScript()

    Handler method for the "MainScript" end tag.

    ProjectHandler.endName

    endName()

    Handler method for the "Name" end tag.

    ProjectHandler.endOther

    endOther()

    Handler method for the "Other" end tag.

    ProjectHandler.endOtherToolsParams

    endOtherToolsParams()

    Handler method for the "OtherToolsParams" end tag.

    ProjectHandler.endPackagersParams

    endPackagersParams()

    Handler method for the "PackagersParams" end tag.

    ProjectHandler.endProgLanguage

    endProgLanguage()

    Handler method for the "ProgLanguage" end tag.

    ProjectHandler.endProjectExcludeList

    endProjectExcludeList()

    Handler method for the "ProjectExcludeList" end tag.

    ProjectHandler.endProjectType

    endProjectType()

    Handler method for the "ProjectType" end tag.

    ProjectHandler.endProjectTypeSpecificData

    endProjectTypeSpecificData()

    Handler method for the "ProjectTypeSpecificData" end tag.

    ProjectHandler.endProjectWordList

    endProjectWordList()

    Handler method for the "ProjectWordList" end tag.

    ProjectHandler.endPyLintParams

    endPyLintParams()

    Handler method for the "PyLintParams" end tag.

    ProjectHandler.endResource

    endResource()

    Handler method for the "Resource" end tag.

    ProjectHandler.endSource

    endSource()

    Handler method for the "Source" end tag.

    ProjectHandler.endTranslation

    endTranslation()

    Handler method for the "Translation" end tag.

    ProjectHandler.endTranslationException

    endTranslationException()

    Handler method for the "TranslationException" end tag.

    ProjectHandler.endTranslationPattern

    endTranslationPattern()

    Handler method for the "TranslationPattern" end tag.

    ProjectHandler.endTranslationPrefix

    endTranslationPrefix()

    Handler method for the "TranslationPrefix" end tag.

    ProjectHandler.endTranslationsBinPath

    endTranslationsBinPath()

    Handler method for the "TranslationsBinPath" end tag.

    ProjectHandler.endUIType

    endUIType()

    Handler method for the "UIType" end tag.

    ProjectHandler.endVcsOptions

    endVcsOptions()

    Handler method for the "VcsOptions" end tag.

    ProjectHandler.endVcsOtherData

    endVcsOtherData()

    Handler method for the "VcsOtherData" end tag.

    ProjectHandler.endVcsType

    endVcsType()

    Handler method for the "VcsType" end tag.

    ProjectHandler.endVersion

    endVersion()

    Handler method for the "Version" end tag.

    ProjectHandler.getVersion

    getVersion()

    Public method to retrieve the version of the project.

    Returns:
    String containing the version number.

    ProjectHandler.startCheckersParams

    startCheckersParams(attrs)

    Handler method for the "CheckersParams" start tag.

    attrs
    list of tag attributes

    ProjectHandler.startCxfreezeParams

    startCxfreezeParams(attrs)

    Handler method for the "CxfreezeParams" start tag.

    attrs
    list of tag attributes

    ProjectHandler.startDocumentProject

    startDocumentProject()

    Handler called, when the document parsing is started.

    ProjectHandler.startDocumentationParams

    startDocumentationParams(attrs)

    Handler method for the "DocumentationParams" start tag.

    attrs
    list of tag attributes

    ProjectHandler.startEric4ApiParams

    startEric4ApiParams(attrs)

    Handler method for the "Eric4ApiParams" start tag.

    attrs
    list of tag attributes

    ProjectHandler.startEric4DocParams

    startEric4DocParams(attrs)

    Handler method for the "Eric4DocParams" start tag.

    attrs
    list of tag attributes

    ProjectHandler.startFiletypeAssociation

    startFiletypeAssociation(attrs)

    Handler method for the "FiletypeAssociation" start tag.

    attrs
    list of tag attributes

    ProjectHandler.startForm

    startForm(attrs)

    Handler method for the "Form" start tag.

    attrs
    list of tag attributes

    ProjectHandler.startInterface

    startInterface(attrs)

    Handler method for the "Interface" start tag.

    attrs
    list of tag attributes

    ProjectHandler.startLexerAssociation

    startLexerAssociation(attrs)

    Handler method for the "LexerAssociation" start tag.

    attrs
    list of tag attributes

    ProjectHandler.startMainScript

    startMainScript(attrs)

    Handler method for the "MainScript" start tag.

    attrs
    list of tag attributes

    ProjectHandler.startOther

    startOther(attrs)

    Handler method for the "Other" start tag.

    attrs
    list of tag attributes

    ProjectHandler.startOtherToolsParams

    startOtherToolsParams(attrs)

    Handler method for the "OtherToolsParams" start tag.

    attrs
    list of tag attributes

    ProjectHandler.startPackagersParams

    startPackagersParams(attrs)

    Handler method for the "PackagersParams" start tag.

    attrs
    list of tag attributes

    ProjectHandler.startProgLanguage

    startProgLanguage(attrs)

    Handler method for the "Source" start tag.

    attrs
    list of tag attributes

    ProjectHandler.startProject

    startProject(attrs)

    Handler method for the "Project" start tag.

    attrs
    list of tag attributes

    ProjectHandler.startProjectTypeSpecificData

    startProjectTypeSpecificData(attrs)

    Handler method for the "ProjectTypeSpecificData" start tag.

    attrs
    list of tag attributes

    ProjectHandler.startPyLintParams

    startPyLintParams(attrs)

    Handler method for the "PyLintParams" start tag.

    attrs
    list of tag attributes

    ProjectHandler.startResource

    startResource(attrs)

    Handler method for the "Resource" start tag.

    attrs
    list of tag attributes

    ProjectHandler.startSource

    startSource(attrs)

    Handler method for the "Source" start tag.

    attrs
    list of tag attributes

    ProjectHandler.startTranslation

    startTranslation(attrs)

    Handler method for the "Translation" start tag.

    attrs
    list of tag attributes

    ProjectHandler.startTranslationException

    startTranslationException(attrs)

    Handler method for the "TranslationException" start tag.

    attrs
    list of tag attributes

    ProjectHandler.startTranslationPrefix

    startTranslationPrefix(attrs)

    Handler method for the "TranslationPrefix" start tag.

    attrs
    list of tag attributes

    ProjectHandler.startTranslationsBinPath

    startTranslationsBinPath(attrs)

    Handler method for the "TranslationsBinPath" start tag.

    attrs
    list of tag attributes

    ProjectHandler.startVcsOptions

    startVcsOptions(attrs)

    Handler method for the "VcsOptions" start tag.

    attrs
    list of tag attributes

    ProjectHandler.startVcsOtherData

    startVcsOtherData(attrs)

    Handler method for the "VcsOtherData" start tag.

    attrs
    list of tag attributes

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.E4XML.MultiProjectHandler.html0000644000175000001440000000013212261331352027222 xustar000000000000000030 mtime=1388688106.606229112 30 atime=1389081085.108724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.E4XML.MultiProjectHandler.html0000644000175000001440000001266312261331352026764 0ustar00detlevusers00000000000000 eric4.E4XML.MultiProjectHandler

    eric4.E4XML.MultiProjectHandler

    Module implementing the handler class for reading an XML multi project file.

    Global Attributes

    None

    Classes

    MultiProjectHandler Class implementing a sax handler to read an XML multi project file.

    Functions

    None


    MultiProjectHandler

    Class implementing a sax handler to read an XML multi project file.

    Derived from

    XMLHandlerBase

    Class Attributes

    None

    Class Methods

    None

    Methods

    MultiProjectHandler Constructor
    endDescription Handler method for the "Description" end tag.
    endProject Handler method for the "Project" end tag.
    endProjectDescription Handler method for the "ProjectDescription" end tag.
    endProjectFile Handler method for the "ProjectFile" end tag.
    endProjectName Handler method for the "ProjectName" end tag.
    getVersion Public method to retrieve the version of the project.
    startDocumentMultiProject Handler called, when the document parsing is started.
    startMultiProject Handler method for the "MultiProject" start tag.
    startProject Handler method for the "Project" start tag.

    Static Methods

    None

    MultiProjectHandler (Constructor)

    MultiProjectHandler(multiProject)

    Constructor

    multiProject
    Reference to the multi project object to store the information into.

    MultiProjectHandler.endDescription

    endDescription()

    Handler method for the "Description" end tag.

    MultiProjectHandler.endProject

    endProject()

    Handler method for the "Project" end tag.

    MultiProjectHandler.endProjectDescription

    endProjectDescription()

    Handler method for the "ProjectDescription" end tag.

    MultiProjectHandler.endProjectFile

    endProjectFile()

    Handler method for the "ProjectFile" end tag.

    MultiProjectHandler.endProjectName

    endProjectName()

    Handler method for the "ProjectName" end tag.

    MultiProjectHandler.getVersion

    getVersion()

    Public method to retrieve the version of the project.

    Returns:
    String containing the version number.

    MultiProjectHandler.startDocumentMultiProject

    startDocumentMultiProject()

    Handler called, when the document parsing is started.

    MultiProjectHandler.startMultiProject

    startMultiProject(attrs)

    Handler method for the "MultiProject" start tag.

    attrs
    list of tag attributes

    MultiProjectHandler.startProject

    startProject(attrs)

    Handler method for the "Project" start tag.

    attrs
    list of tag attributes

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.PluginWizardQRegExp.html0000644000175000001440000000013212261331350027744 xustar000000000000000030 mtime=1388688104.480228044 30 atime=1389081085.108724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.PluginWizardQRegExp.html0000644000175000001440000001003412261331350027474 0ustar00detlevusers00000000000000 eric4.Plugins.PluginWizardQRegExp

    eric4.Plugins.PluginWizardQRegExp

    Module implementing the QRegExp wizard plugin.

    Global Attributes

    author
    autoactivate
    className
    deactivateable
    error
    longDescription
    name
    packageName
    shortDescription
    version

    Classes

    QRegExpWizard Class implementing the QRegExp wizard plugin.

    Functions

    None


    QRegExpWizard

    Class implementing the QRegExp wizard plugin.

    Derived from

    QObject

    Class Attributes

    None

    Class Methods

    None

    Methods

    QRegExpWizard Constructor
    __callForm Private method to display a dialog and get the code.
    __handle Private method to handle the wizards action
    __initAction Private method to initialize the action.
    __initMenu Private method to add the actions to the right menu.
    activate Public method to activate this plugin.
    deactivate Public method to deactivate this plugin.

    Static Methods

    None

    QRegExpWizard (Constructor)

    QRegExpWizard(ui)

    Constructor

    ui
    reference to the user interface object (UI.UserInterface)

    QRegExpWizard.__callForm

    __callForm(editor)

    Private method to display a dialog and get the code.

    editor
    reference to the current editor
    Returns:
    the generated code (string)

    QRegExpWizard.__handle

    __handle()

    Private method to handle the wizards action

    QRegExpWizard.__initAction

    __initAction()

    Private method to initialize the action.

    QRegExpWizard.__initMenu

    __initMenu()

    Private method to add the actions to the right menu.

    QRegExpWizard.activate

    activate()

    Public method to activate this plugin.

    Returns:
    tuple of None and activation status (boolean)

    QRegExpWizard.deactivate

    deactivate()

    Public method to deactivate this plugin.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.VCS.StatusMonitorThread.html0000644000175000001440000000013212261331351027067 xustar000000000000000030 mtime=1388688105.221228416 30 atime=1389081085.108724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.VCS.StatusMonitorThread.html0000644000175000001440000001554612261331351026634 0ustar00detlevusers00000000000000 eric4.VCS.StatusMonitorThread

    eric4.VCS.StatusMonitorThread

    Module implementing the VCS status monitor thread base class.

    Global Attributes

    None

    Classes

    VcsStatusMonitorThread Class implementing the VCS status monitor thread base class.

    Functions

    None


    VcsStatusMonitorThread

    Class implementing the VCS status monitor thread base class.

    Signals

    vcsStatusMonitorData(QStringList)
    emitted to update the VCS status
    vcsStatusMonitorStatus(QString, QString)
    emitted to signal the status of the monitoring thread (ok, nok, op) and a status message

    Derived from

    QThread

    Class Attributes

    None

    Class Methods

    None

    Methods

    VcsStatusMonitorThread Constructor
    _performMonitor Protected method implementing the real monitoring action.
    checkStatus Public method to wake up the status monitor thread.
    clearCachedState Public method to clear the cached VCS state of a file/directory.
    getAutoUpdate Public method to retrieve the status of the auto update function.
    getInterval Public method to get the monitor interval.
    run Protected method implementing the tasks action.
    setAutoUpdate Public method to enable the auto update function.
    setInterval Public method to change the monitor interval.
    stop Public method to stop the monitor thread.

    Static Methods

    None

    VcsStatusMonitorThread (Constructor)

    VcsStatusMonitorThread(interval, projectDir, vcs, parent = None)

    Constructor

    interval
    new interval in seconds (integer)
    projectDir
    project directory to monitor (string or QString)
    vcs
    reference to the version control object
    parent
    reference to the parent object (QObject)

    VcsStatusMonitorThread._performMonitor

    _performMonitor()

    Protected method implementing the real monitoring action.

    This method must be overridden and populate the statusList member variable with a list of strings giving the status in the first column and the path relative to the project directory starting with the third column. The allowed status flags are:

    • "A" path was added but not yet comitted
    • "M" path has local changes
    • "O" path was removed
    • "R" path was deleted and then re-added
    • "U" path needs an update
    • "Z" path contains a conflict
    • " " path is back at normal

    Returns:
    tuple of flag indicating successful operation (boolean) and a status message in case of non successful operation (QString)

    VcsStatusMonitorThread.checkStatus

    checkStatus()

    Public method to wake up the status monitor thread.

    VcsStatusMonitorThread.clearCachedState

    clearCachedState(name)

    Public method to clear the cached VCS state of a file/directory.

    name
    name of the entry to be cleared (QString or string)

    VcsStatusMonitorThread.getAutoUpdate

    getAutoUpdate()

    Public method to retrieve the status of the auto update function.

    Returns:
    status of the auto update function (boolean)

    VcsStatusMonitorThread.getInterval

    getInterval()

    Public method to get the monitor interval.

    Returns:
    interval in seconds (integer)

    VcsStatusMonitorThread.run

    run()

    Protected method implementing the tasks action.

    VcsStatusMonitorThread.setAutoUpdate

    setAutoUpdate(auto)

    Public method to enable the auto update function.

    auto
    status of the auto update function (boolean)

    VcsStatusMonitorThread.setInterval

    setInterval(interval)

    Public method to change the monitor interval.

    interval
    new interval in seconds (integer)

    VcsStatusMonitorThread.stop

    stop()

    Public method to stop the monitor thread.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Debugger.DebugClientCapabilities.html0000644000175000001440000000013112261331350030672 xustar000000000000000029 mtime=1388688104.61122811 30 atime=1389081085.108724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Debugger.DebugClientCapabilities.html0000644000175000001440000000205212261331350030424 0ustar00detlevusers00000000000000 eric4.Debugger.DebugClientCapabilities

    eric4.Debugger.DebugClientCapabilities

    Module defining the debug clients capabilities.

    Global Attributes

    HasAll
    HasCompleter
    HasCoverage
    HasDebugger
    HasInterpreter
    HasProfiler
    HasShell
    HasUnittest

    Classes

    None

    Functions

    None

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.AboutPlugin.AboutDialog.html0000644000175000001440000000013212261331352030515 xustar000000000000000030 mtime=1388688106.625229121 30 atime=1389081085.109724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.AboutPlugin.AboutDialog.html0000644000175000001440000000347712261331352030262 0ustar00detlevusers00000000000000 eric4.Plugins.AboutPlugin.AboutDialog

    eric4.Plugins.AboutPlugin.AboutDialog

    Module implementing an 'About Eric' dialog.

    Global Attributes

    aboutText
    authorsText
    licenseText
    thanksText
    titleText

    Classes

    AboutDialog Class implementing an 'About Eric' dialog.

    Functions

    None


    AboutDialog

    Class implementing an 'About Eric' dialog.

    Derived from

    QDialog, Ui_AboutDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    AboutDialog Constructor

    Static Methods

    None

    AboutDialog (Constructor)

    AboutDialog(parent = None)

    Constructor

    parent
    reference to the parent widget (QWidget)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Debugger.VariablesFilterDialog.html0000644000175000001440000000013212261331350030372 xustar000000000000000030 mtime=1388688104.781228196 30 atime=1389081085.109724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Debugger.VariablesFilterDialog.html0000644000175000001440000000726112261331350030132 0ustar00detlevusers00000000000000 eric4.Debugger.VariablesFilterDialog

    eric4.Debugger.VariablesFilterDialog

    Module implementing the variables filter dialog.

    Global Attributes

    None

    Classes

    VariablesFilterDialog Class implementing the variables filter dialog.

    Functions

    None


    VariablesFilterDialog

    Class implementing the variables filter dialog.

    It opens a dialog window for the configuration of the variables type filter to be applied during a debugging session.

    Derived from

    QDialog, Ui_VariablesFilterDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    VariablesFilterDialog Constructor
    getSelection Public slot to retrieve the current selections.
    on_buttonBox_clicked Private slot called by a button of the button box clicked.
    setSelection Public slot to set the current selection.

    Static Methods

    None

    VariablesFilterDialog (Constructor)

    VariablesFilterDialog(parent = None, name = None, modal = False)

    Constructor

    parent
    parent widget of this dialog (QWidget)
    name
    name of this dialog (string or QString)
    modal
    flag to indicate a modal dialog (boolean)

    VariablesFilterDialog.getSelection

    getSelection()

    Public slot to retrieve the current selections.

    Returns:
    A tuple of lists of integer values. The first list is the locals variables filter, the second the globals variables filter.

    VariablesFilterDialog.on_buttonBox_clicked

    on_buttonBox_clicked(button)

    Private slot called by a button of the button box clicked.

    button
    button that was clicked (QAbstractButton)

    VariablesFilterDialog.setSelection

    setSelection(lList, gList)

    Public slot to set the current selection.

    lList
    local variables filter (list of int)
    gList
    global variables filter (list of int)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.Plugins.VcsPlugins.vcsSubversion.0000644000175000001440000000031612261331354031270 xustar0000000000000000116 path=eric4-4.5.18/eric/Documentation/Source/index-eric4.Plugins.VcsPlugins.vcsSubversion.ConfigurationPage.html 30 mtime=1388688108.659230143 30 atime=1389081085.109724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.Plugins.VcsPlugins.vcsSubversion.ConfigurationPag0000644000175000001440000000162512261331354034202 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsSubversion.ConfigurationPage

    eric4.Plugins.VcsPlugins.vcsSubversion.ConfigurationPage

    Package implementing the the subversion configuration page.

    Modules

    SubversionPage Module implementing the Subversion configuration page.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.UI.SplashScreen.html0000644000175000001440000000013212261331350025357 xustar000000000000000030 mtime=1388688104.953228282 30 atime=1389081085.109724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.UI.SplashScreen.html0000644000175000001440000001070012261331350025107 0ustar00detlevusers00000000000000 eric4.UI.SplashScreen

    eric4.UI.SplashScreen

    Module implementing a splashscreen for eric4.

    Global Attributes

    None

    Classes

    NoneSplashScreen Class implementing a "None" splashscreen for eric4.
    SplashScreen Class implementing a splashscreen for eric4.

    Functions

    None


    NoneSplashScreen

    Class implementing a "None" splashscreen for eric4.

    This class implements the same interface as the real splashscreen, but simply does nothing.

    Derived from

    object

    Class Attributes

    None

    Class Methods

    None

    Methods

    NoneSplashScreen Constructor
    clearMessage Public method to clear the message shown.
    finish Public method to finish the splash screen.
    showMessage Public method to show a message in the bottom part of the splashscreen.

    Static Methods

    None

    NoneSplashScreen (Constructor)

    NoneSplashScreen()

    Constructor

    NoneSplashScreen.clearMessage

    clearMessage()

    Public method to clear the message shown.

    NoneSplashScreen.finish

    finish(widget)

    Public method to finish the splash screen.

    widget
    widget to wait for (QWidget)

    NoneSplashScreen.showMessage

    showMessage(msg)

    Public method to show a message in the bottom part of the splashscreen.

    msg
    message to be shown (string or QString)


    SplashScreen

    Class implementing a splashscreen for eric4.

    Derived from

    QSplashScreen

    Class Attributes

    None

    Class Methods

    None

    Methods

    SplashScreen Constructor
    clearMessage Public method to clear the message shown.
    showMessage Public method to show a message in the bottom part of the splashscreen.

    Static Methods

    None

    SplashScreen (Constructor)

    SplashScreen()

    Constructor

    SplashScreen.clearMessage

    clearMessage()

    Public method to clear the message shown.

    SplashScreen.showMessage

    showMessage(msg)

    Public method to show a message in the bottom part of the splashscreen.

    msg
    message to be shown (string or QString)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Tools.TRPreviewer.html0000644000175000001440000000013012261331351025765 xustar000000000000000028 mtime=1388688105.5872286 30 atime=1389081085.109724361 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Tools.TRPreviewer.html0000644000175000001440000005326612261331351025535 0ustar00detlevusers00000000000000 eric4.Tools.TRPreviewer

    eric4.Tools.TRPreviewer

    Module implementing the TR Previewer main window.

    Global Attributes

    noTranslationName

    Classes

    TRPreviewer Class implementing the UI Previewer main window.
    Translation Class to store the properties of a translation
    TranslationsDict Class to store all loaded translations.
    WidgetView Class to show a dynamically loaded widget (or dialog).
    WidgetWorkspace Specialized workspace to show the loaded widgets.

    Functions

    _filename Protected module function to chop off the path.


    TRPreviewer

    Class implementing the UI Previewer main window.

    Derived from

    KQMainWindow

    Class Attributes

    None

    Class Methods

    None

    Methods

    TRPreviewer Constructor
    __about Private slot to show the about information.
    __aboutQt Private slot to show info about Qt.
    __initActions Private method to define the user interface actions.
    __initMenus Private method to create the menus.
    __initToolbars Private method to create the toolbars.
    __openTranslation Private slot to handle the Open Translation action.
    __openWidget Private slot to handle the Open Dialog action.
    __showWindowMenu Private slot to handle the aboutToShow signal of the window menu.
    __updateActions Private slot to update the actions state.
    __whatsThis Private slot called in to enter Whats This mode.
    closeEvent Private event handler for the close event.
    reloadTranslations Public slot to reload all translations.
    setTranslation Public slot to activate a translation.
    show Public slot to show this dialog.

    Static Methods

    None

    TRPreviewer (Constructor)

    TRPreviewer(filenames = [], parent = None, name = None)

    Constructor

    filenames
    filenames of form and/or translation files to load
    parent
    parent widget of this window (QWidget)
    name
    name of this window (string or QString)

    TRPreviewer.__about

    __about()

    Private slot to show the about information.

    TRPreviewer.__aboutQt

    __aboutQt()

    Private slot to show info about Qt.

    TRPreviewer.__initActions

    __initActions()

    Private method to define the user interface actions.

    TRPreviewer.__initMenus

    __initMenus()

    Private method to create the menus.

    TRPreviewer.__initToolbars

    __initToolbars()

    Private method to create the toolbars.

    TRPreviewer.__openTranslation

    __openTranslation()

    Private slot to handle the Open Translation action.

    TRPreviewer.__openWidget

    __openWidget()

    Private slot to handle the Open Dialog action.

    TRPreviewer.__showWindowMenu

    __showWindowMenu()

    Private slot to handle the aboutToShow signal of the window menu.

    TRPreviewer.__updateActions

    __updateActions()

    Private slot to update the actions state.

    TRPreviewer.__whatsThis

    __whatsThis()

    Private slot called in to enter Whats This mode.

    TRPreviewer.closeEvent

    closeEvent(event)

    Private event handler for the close event.

    event
    close event (QCloseEvent)

    TRPreviewer.reloadTranslations

    reloadTranslations()

    Public slot to reload all translations.

    TRPreviewer.setTranslation

    setTranslation(name)

    Public slot to activate a translation.

    name
    name (language) of the translation (string or QString)

    TRPreviewer.show

    show()

    Public slot to show this dialog.

    This overloaded slot loads a UI file to be previewed after the main window has been shown. This way, previewing a dialog doesn't interfere with showing the main window.



    Translation

    Class to store the properties of a translation

    Derived from

    object

    Class Attributes

    None

    Class Methods

    None

    Methods

    Translation Constructor

    Static Methods

    None

    Translation (Constructor)

    Translation()

    Constructor



    TranslationsDict

    Class to store all loaded translations.

    Signals

    translationChanged()
    emit after a translator was set

    Derived from

    QObject

    Class Attributes

    None

    Class Methods

    None

    Methods

    TranslationsDict Constructor
    __del Private method to delete a translator from the list of available translators.
    __findFileName Private method to find a translation by file name.
    __findName Private method to find a translation by name.
    __haveFileName Private method to check for the presence of a translation.
    __haveName Private method to check for the presence of a named translation.
    __uniqueName Private method to generate a unique name.
    add Public method to add a translation to the list.
    hasTranslations Public method to check for loaded translations.
    loadTransFile Public slot to load a translation file.
    reload Public method to reload all translators.
    set Public slot to set a translator by name.

    Static Methods

    None

    TranslationsDict (Constructor)

    TranslationsDict(selector, parent)

    Constructor

    selector
    reference to the QComboBox used to show the available languages (QComboBox)
    parent
    parent widget (QWidget)

    TranslationsDict.__del

    __del(name)

    Private method to delete a translator from the list of available translators.

    name
    name of the translator to delete (string or QString)

    TranslationsDict.__findFileName

    __findFileName(transFileName)

    Private method to find a translation by file name.

    transFileName
    file name of the translation file (string or QString)
    Returns:
    reference to a translation object or None

    TranslationsDict.__findName

    __findName(name)

    Private method to find a translation by name.

    name
    name (language) of the translation (string or QString)
    Returns:
    reference to a translation object or None

    TranslationsDict.__haveFileName

    __haveFileName(transFileName)

    Private method to check for the presence of a translation.

    transFileName
    file name of the translation file (string or QString)
    Returns:
    flag indicating the presence of the translation (boolean)

    TranslationsDict.__haveName

    __haveName(name)

    Private method to check for the presence of a named translation.

    name
    name (language) of the translation (string or QString)
    Returns:
    flag indicating the presence of the translation (boolean)

    TranslationsDict.__uniqueName

    __uniqueName(transFileName)

    Private method to generate a unique name.

    transFileName
    file name of the translation file (string or QString)
    Returns:
    unique name (QString)

    TranslationsDict.add

    add(transFileName, setTranslation = True)

    Public method to add a translation to the list.

    If the translation file (*.qm) has not been loaded yet, it will be loaded automatically.

    transFileName
    name of the translation file to be added (string or QString)
    setTranslation
    flag indicating, if this should be set as the active translation (boolean)

    TranslationsDict.hasTranslations

    hasTranslations()

    Public method to check for loaded translations.

    Returns:
    flag signaling if any translation was loaded (boolean)

    TranslationsDict.loadTransFile

    loadTransFile(transFileName)

    Public slot to load a translation file.

    transFileName
    file name of the translation file (string or QString)
    Returns:
    reference to the new translator object (QTranslator)

    TranslationsDict.reload

    reload()

    Public method to reload all translators.

    TranslationsDict.set

    set(name)

    Public slot to set a translator by name.

    name
    name (language) of the translator to set (string or QString)


    WidgetView

    Class to show a dynamically loaded widget (or dialog).

    Derived from

    QWidget

    Class Attributes

    None

    Class Methods

    None

    Methods

    WidgetView Constructor
    __rebuildWidget Private method to schedule a rebuild of the widget.
    buildWidget Public slot to load a UI file.
    isValid Public method to return the validity of this widget view.
    uiFileName Public method to retrieve the name of the UI file.

    Static Methods

    None

    WidgetView (Constructor)

    WidgetView(uiFileName, parent = None, name = None)

    Constructor

    uiFileName
    name of the UI file to load (string or QString)
    parent
    parent widget (QWidget)
    name
    name of this widget (string)

    WidgetView.__rebuildWidget

    __rebuildWidget()

    Private method to schedule a rebuild of the widget.

    WidgetView.buildWidget

    buildWidget()

    Public slot to load a UI file.

    WidgetView.isValid

    isValid()

    Public method to return the validity of this widget view.

    Returns:
    flag indicating the validity (boolean)

    WidgetView.uiFileName

    uiFileName()

    Public method to retrieve the name of the UI file.

    Returns:
    filename of the loaded UI file (QString)


    WidgetWorkspace

    Specialized workspace to show the loaded widgets.

    Signals

    lastWidgetClosed()
    emitted after last widget was closed

    Derived from

    QWorkspace

    Class Attributes

    None

    Class Methods

    None

    Methods

    WidgetWorkspace Constructor
    __findWidget Private method to find a specific widget view.
    __toggleWidget Private method to toggle a workspace window.
    closeAllWidgets Public slot to close all windows.
    closeWidget Public slot to close the active window.
    eventFilter Protected method called to filter an event.
    hasWidgets Public method to check for loaded widgets.
    loadWidget Public slot to load a UI file.
    showWindowMenu Public method to set up the widgets part of the Window menu.
    toggleSelectedWidget Public method to handle the toggle of a window.

    Static Methods

    None

    WidgetWorkspace (Constructor)

    WidgetWorkspace(parent = None)

    Constructor

    parent
    parent widget (QWidget)

    WidgetWorkspace.__findWidget

    __findWidget(uiFileName)

    Private method to find a specific widget view.

    uiFileName
    filename of the loaded UI file (string or QString)
    Returns:
    reference to the widget (WidgetView) or None

    WidgetWorkspace.__toggleWidget

    __toggleWidget(w)

    Private method to toggle a workspace window.

    w
    window to be toggled

    WidgetWorkspace.closeAllWidgets

    closeAllWidgets()

    Public slot to close all windows.

    WidgetWorkspace.closeWidget

    closeWidget()

    Public slot to close the active window.

    WidgetWorkspace.eventFilter

    eventFilter(obj, ev)

    Protected method called to filter an event.

    object
    object, that generated the event (QObject)
    event
    the event, that was generated by object (QEvent)
    Returns:
    flag indicating if event was filtered out

    WidgetWorkspace.hasWidgets

    hasWidgets()

    Public method to check for loaded widgets.

    Returns:
    flag signaling if any widget was loaded (boolean)

    WidgetWorkspace.loadWidget

    loadWidget(uiFileName)

    Public slot to load a UI file.

    uiFileName
    name of the UI file to load (string or QString)

    WidgetWorkspace.showWindowMenu

    showWindowMenu(windowMenu)

    Public method to set up the widgets part of the Window menu.

    windowMenu
    reference to the window menu

    WidgetWorkspace.toggleSelectedWidget

    toggleSelectedWidget(act)

    Public method to handle the toggle of a window.

    act
    reference to the action that triggered (QAction)


    _filename

    _filename(path)

    Protected module function to chop off the path.

    path
    path to extract the filename from (string or QString)
    Returns:
    extracted filename (QString)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.Globals.html0000644000175000001440000000013112261331354025144 xustar000000000000000030 mtime=1388688108.660230143 29 atime=1389081085.11072436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.Globals.html0000644000175000001440000000140212261331354024674 0ustar00detlevusers00000000000000 eric4.Globals

    eric4.Globals

    Module defining common data to be used by all modules.

    Modules

    Globals Module defining common data to be used by all modules.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.AdBlock.AdBlockSubscription.0000644000175000001440000000013112261331353031101 xustar000000000000000030 mtime=1388688107.732229677 29 atime=1389081085.11072436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.AdBlock.AdBlockSubscription.html0000644000175000001440000002606612261331353031533 0ustar00detlevusers00000000000000 eric4.Helpviewer.AdBlock.AdBlockSubscription

    eric4.Helpviewer.AdBlock.AdBlockSubscription

    Module implementing the AdBlock subscription class.

    Global Attributes

    None

    Classes

    AdBlockSubscription Class implementing the AdBlock subscription.

    Functions

    None


    AdBlockSubscription

    Class implementing the AdBlock subscription.

    Signals

    changed()
    emitted after the subscription has changed
    rulesChanged()
    emitted after the subscription's rules have changed

    Derived from

    QObject

    Class Attributes

    None

    Class Methods

    None

    Methods

    AdBlockSubscription Constructor
    __loadRules Private method to load the rules of the subscription.
    __parseUrl Private method to parse the AdBlock URL for the subscription.
    __populateCache Private method to populate the various rule caches.
    __rulesDownloaded Private slot to deal with the downloaded rules.
    addRule Public method to add a rule.
    allRules Public method to get the list of rules.
    allow Public method to check, if the given URL is allowed.
    block Public method to check, if the given URL should be blocked.
    isEnabled Public method to check, if the subscription is enabled.
    lastUpdate Public method to get the date and time of the last update.
    location Public method to get the subscription location.
    pageRules Public method to get the page rules of the subscription.
    removeRule Public method to remove a rule given the offset.
    replaceRule Public method to replace a rule given the offset.
    rulesFileName Public method to get the name of the rules file.
    saveRules Public method to save the subscription rules.
    setEnabled Public method to set the enabled status.
    setLocation Public method to set the subscription location.
    setTitle Public method to set the subscription title.
    title Public method to get the subscription title.
    updateNow Public method to update the subscription immediately.
    url Public method to generate the url for this subscription.

    Static Methods

    None

    AdBlockSubscription (Constructor)

    AdBlockSubscription(url, parent = None, default = False)

    Constructor

    url
    AdBlock URL for the subscription (QUrl)
    parent
    reference to the parent object (QObject)
    default
    flag indicating a default subscription (Boolean)

    AdBlockSubscription.__loadRules

    __loadRules()

    Private method to load the rules of the subscription.

    AdBlockSubscription.__parseUrl

    __parseUrl(url)

    Private method to parse the AdBlock URL for the subscription.

    url
    AdBlock URL for the subscription (QUrl)

    AdBlockSubscription.__populateCache

    __populateCache()

    Private method to populate the various rule caches.

    AdBlockSubscription.__rulesDownloaded

    __rulesDownloaded()

    Private slot to deal with the downloaded rules.

    AdBlockSubscription.addRule

    addRule(rule)

    Public method to add a rule.

    rule
    reference to the rule to add (AdBlockRule)

    AdBlockSubscription.allRules

    allRules()

    Public method to get the list of rules.

    Returns:
    list of rules (list of AdBlockRule)

    AdBlockSubscription.allow

    allow(urlString)

    Public method to check, if the given URL is allowed.

    Returns:
    reference to the rule object or None (AdBlockRule)

    AdBlockSubscription.block

    block(urlString)

    Public method to check, if the given URL should be blocked.

    Returns:
    reference to the rule object or None (AdBlockRule)

    AdBlockSubscription.isEnabled

    isEnabled()

    Public method to check, if the subscription is enabled.

    Returns:
    flag indicating the enabled status (boolean)

    AdBlockSubscription.lastUpdate

    lastUpdate()

    Public method to get the date and time of the last update.

    Returns:
    date and time of the last update (QDateTime)

    AdBlockSubscription.location

    location()

    Public method to get the subscription location.

    Returns:
    URL of the subscription location (QUrl)

    AdBlockSubscription.pageRules

    pageRules()

    Public method to get the page rules of the subscription.

    Returns:
    list of rule objects (list of AdBlockRule)

    AdBlockSubscription.removeRule

    removeRule(offset)

    Public method to remove a rule given the offset.

    offset
    offset of the rule to remove (integer)

    AdBlockSubscription.replaceRule

    replaceRule(rule, offset)

    Public method to replace a rule given the offset.

    rule
    reference to the rule to set (AdBlockRule)
    offset
    offset of the rule to remove (integer)

    AdBlockSubscription.rulesFileName

    rulesFileName()

    Public method to get the name of the rules file.

    Returns:
    name of the rules file (QString)

    AdBlockSubscription.saveRules

    saveRules()

    Public method to save the subscription rules.

    AdBlockSubscription.setEnabled

    setEnabled(enabled)

    Public method to set the enabled status.

    enabled
    flag indicating the enabled status (boolean)

    AdBlockSubscription.setLocation

    setLocation(url)

    Public method to set the subscription location.

    url
    URL of the subscription location (QUrl)

    AdBlockSubscription.setTitle

    setTitle(title)

    Public method to set the subscription title.

    title
    subscription title (string or QString)

    AdBlockSubscription.title

    title()

    Public method to get the subscription title.

    Returns:
    subscription title (QString)

    AdBlockSubscription.updateNow

    updateNow()

    Public method to update the subscription immediately.

    AdBlockSubscription.url

    url()

    Public method to generate the url for this subscription.

    Returns:
    AdBlock URL for the subscription (QUrl)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.Plugins.DocumentationPlugins.Eric0000644000175000001440000000013112261331354031272 xustar000000000000000030 mtime=1388688108.661230144 29 atime=1389081085.11572436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.Plugins.DocumentationPlugins.Ericdoc.html0000644000175000001440000000206312261331354032457 0ustar00detlevusers00000000000000 eric4.Plugins.DocumentationPlugins.Ericdoc

    eric4.Plugins.DocumentationPlugins.Ericdoc

    Package containing the Ericdoc plugin.

    Modules

    EricdocConfigDialog Module implementing a dialog to enter the parameters for eric4_doc.
    EricdocExecDialog Module implementing a dialog to show the output of the ericdoc process.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.UI.Config.html0000644000175000001440000000013012261331351024171 xustar000000000000000029 mtime=1388688105.08822835 29 atime=1389081085.11572436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.UI.Config.html0000644000175000001440000000150112261331351023722 0ustar00detlevusers00000000000000 eric4.UI.Config

    eric4.UI.Config

    Module defining common data to be used by all windows..

    Global Attributes

    ToolBarIconSize

    Classes

    None

    Functions

    None

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.E4XML.TasksWriter.html0000644000175000001440000000013112261331352025564 xustar000000000000000030 mtime=1388688106.556229087 29 atime=1389081085.11572436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.E4XML.TasksWriter.html0000644000175000001440000000427412261331352025326 0ustar00detlevusers00000000000000 eric4.E4XML.TasksWriter

    eric4.E4XML.TasksWriter

    Module implementing the writer class for writing an XML tasks file.

    Global Attributes

    None

    Classes

    TasksWriter Class implementing the writer class for writing an XML tasks file.

    Functions

    None


    TasksWriter

    Class implementing the writer class for writing an XML tasks file.

    Derived from

    XMLWriterBase

    Class Attributes

    None

    Class Methods

    None

    Methods

    TasksWriter Constructor
    writeXML Public method to write the XML to the file.

    Static Methods

    None

    TasksWriter (Constructor)

    TasksWriter(file, forProject = False, projectName="")

    Constructor

    file
    open file (like) object for writing
    forProject
    flag indicating project related mode (boolean)
    projectName
    name of the project (string)

    TasksWriter.writeXML

    writeXML()

    Public method to write the XML to the file.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Graphics.ModuleItem.html0000644000175000001440000000013112261331350026253 xustar000000000000000030 mtime=1388688104.815228213 29 atime=1389081085.11572436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Graphics.ModuleItem.html0000644000175000001440000001317412261331350026014 0ustar00detlevusers00000000000000 eric4.Graphics.ModuleItem

    eric4.Graphics.ModuleItem

    Module implementing a module item.

    Global Attributes

    None

    Classes

    ModuleItem Class implementing a module item.
    ModuleModel Class implementing the module model.

    Functions

    None


    ModuleItem

    Class implementing a module item.

    Derived from

    UMLItem

    Class Attributes

    None

    Class Methods

    None

    Methods

    ModuleItem Constructor
    __calculateSize Private method to calculate the size of the module item.
    __createTexts Private method to create the text items of the module item.
    paint Public method to paint the item in local coordinates.
    setModel Method to set the module model.

    Static Methods

    None

    ModuleItem (Constructor)

    ModuleItem(model = None, x = 0, y = 0, rounded = False, parent = None, scene = None)

    Constructor

    model
    module model containing the module data (ModuleModel)
    x
    x-coordinate (integer)
    y
    y-coordinate (integer)
    rounded=
    flag indicating a rounded corner (boolean)
    parent=
    reference to the parent object (QGraphicsItem)
    scene=
    reference to the scene object (QGraphicsScene)

    ModuleItem.__calculateSize

    __calculateSize()

    Private method to calculate the size of the module item.

    ModuleItem.__createTexts

    __createTexts()

    Private method to create the text items of the module item.

    ModuleItem.paint

    paint(painter, option, widget = None)

    Public method to paint the item in local coordinates.

    painter
    reference to the painter object (QPainter)
    option
    style options (QStyleOptionGraphicsItem)
    widget
    optional reference to the widget painted on (QWidget)

    ModuleItem.setModel

    setModel(model)

    Method to set the module model.

    model
    module model containing the module data (ModuleModel)


    ModuleModel

    Class implementing the module model.

    Derived from

    object

    Class Attributes

    None

    Class Methods

    None

    Methods

    ModuleModel Constructor
    addClass Method to add a class to the module model.
    getClasses Method to retrieve the classes of the module.
    getName Method to retrieve the module name.

    Static Methods

    None

    ModuleModel (Constructor)

    ModuleModel(name, classlist=[])

    Constructor

    name
    the module name (string)
    classlist
    list of class names (list of strings)

    ModuleModel.addClass

    addClass(classname)

    Method to add a class to the module model.

    classname
    class name to be added (string)

    ModuleModel.getClasses

    getClasses()

    Method to retrieve the classes of the module.

    Returns:
    list of class names (list of strings)

    ModuleModel.getName

    getName()

    Method to retrieve the module name.

    Returns:
    module name (string)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.VCS.VersionControl.html0000644000175000001440000000013112261331351026071 xustar000000000000000030 mtime=1388688105.215228413 29 atime=1389081085.11572436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.VCS.VersionControl.html0000644000175000001440000010643112261331351025631 0ustar00detlevusers00000000000000 eric4.VCS.VersionControl

    eric4.VCS.VersionControl

    Module implementing an abstract base class to be subclassed by all specific VCS interfaces.

    Global Attributes

    None

    Classes

    VersionControl Class implementing an abstract base class to be subclassed by all specific VCS interfaces.

    Functions

    None


    VersionControl

    Class implementing an abstract base class to be subclassed by all specific VCS interfaces.

    It defines the vcs interface to be implemented by subclasses and the common methods.

    Signals

    vcsStatusMonitorData(QStringList)
    emitted to update the VCS status
    vcsStatusMonitorStatus(QString, QString)
    emitted to signal the status of the monitoring thread (ok, nok, op, off) and a status message

    Derived from

    QObject

    Class Attributes

    canBeAdded
    canBeCommitted

    Class Methods

    None

    Methods

    VersionControl Constructor
    __statusMonitorData Private method to receive the status monitor status.
    __statusMonitorStatus Private method to receive the status monitor status.
    _createStatusMonitorThread Protected method to create an instance of the VCS status monitor thread.
    addArguments Protected method to add an argument list to the already present arguments.
    checkVCSStatus Public method to wake up the VCS status monitor thread.
    clearStatusCache Public method to clear the status cache.
    clearStatusMonitorCachedState Public method to clear the cached VCS state of a file/directory.
    getStatusMonitorAutoUpdate Public method to retrieve the status of the auto update function.
    getStatusMonitorInterval Public method to get the monitor interval.
    setStatusMonitorAutoUpdate Public method to enable the auto update function.
    setStatusMonitorInterval Public method to change the monitor interval.
    splitPath Public method splitting name into a directory part and a file part.
    splitPathList Public method splitting the list of names into a common directory part and a file list.
    startStatusMonitor Public method to start the VCS status monitor thread.
    startSynchronizedProcess Public method to start a synchroneous process
    stopStatusMonitor Public method to stop the VCS status monitor thread.
    vcsAdd Public method used to add a file/directory in the vcs.
    vcsAddBinary Public method used to add a file/directory in binary mode in the vcs.
    vcsAddTree Public method to add a directory tree rooted at path in the vcs.
    vcsAllRegisteredStates Public method used to get the registered states of a number of files in the vcs.
    vcsCheckout Public method used to check the project out of the vcs.
    vcsCleanup Public method used to cleanup the local copy.
    vcsCommandLine Public method used to execute arbitrary vcs commands.
    vcsCommit Public method used to make the change of a file/directory permanent in the vcs.
    vcsConvertProject Public method to convert an uncontrolled project to a version controlled project.
    vcsDefaultOptions Public method used to retrieve the default options for the vcs.
    vcsDiff Public method used to view the diff of a file/directory in the vcs.
    vcsExists Public method used to test for the presence of the vcs.
    vcsExport Public method used to export a directory from the vcs.
    vcsGetOptions Public method used to retrieve the options of the vcs.
    vcsGetOtherData Public method used to retrieve vcs specific data.
    vcsGetProjectBrowserHelper Public method to instanciate a helper object for the different project browsers.
    vcsGetProjectHelper Public method to instanciate a helper object for the project.
    vcsHistory Public method used to view the history of a file/directory in the vcs.
    vcsImport Public method used to import the project into the vcs.
    vcsInit Public method used to initialize the vcs.
    vcsInitConfig Public method to initialize the VCS configuration.
    vcsLog Public method used to view the log of a file/directory in the vcs.
    vcsMerge Public method used to merge a tag/branch into the local project.
    vcsMove Public method used to move a file/directory.
    vcsName Public method returning the name of the vcs.
    vcsNewProjectOptionsDialog Public method to get a dialog to enter repository info for getting a new project.
    vcsOptionsDialog Public method to get a dialog to enter repository info.
    vcsRegisteredState Public method used to get the registered state of a file in the vcs.
    vcsRemove Public method used to add a file/directory in the vcs.
    vcsRepositoryInfos Public method to retrieve information about the repository.
    vcsRevert Public method used to revert changes made to a file/directory.
    vcsSetData Public method used to set an entry in the otherData dictionary.
    vcsSetDataFromDict Public method used to set entries in the otherData dictionary.
    vcsSetOptions Public method used to set the options for the vcs.
    vcsSetOtherData Public method used to set vcs specific data.
    vcsShutdown Public method used to shutdown the vcs interface.
    vcsStatus Public method used to view the status of a file/directory in the vcs.
    vcsSwitch Public method used to switch a directory to a different tag/branch.
    vcsTag Public method used to set the tag of a file/directory in the vcs.
    vcsUpdate Public method used to update a file/directory in the vcs.

    Static Methods

    None

    VersionControl (Constructor)

    VersionControl(parent=None, name=None)

    Constructor

    parent
    parent widget (QWidget)
    name
    name of this object (string or QString)

    VersionControl.__statusMonitorData

    __statusMonitorData(statusList)

    Private method to receive the status monitor status.

    It simply reemits the received status list.

    statusList
    list of status records (QStringList)

    VersionControl.__statusMonitorStatus

    __statusMonitorStatus(status, statusMsg)

    Private method to receive the status monitor status.

    It simply reemits the received status.

    status
    status of the monitoring thread (QString, ok, nok or off)
    statusMsg
    explanotory text for the signaled status (QString)

    VersionControl._createStatusMonitorThread

    _createStatusMonitorThread(interval, project)

    Protected method to create an instance of the VCS status monitor thread.

    Note: This method should be overwritten in subclasses in order to support VCS status monitoring.

    interval
    check interval for the monitor thread in seconds (integer)
    project
    reference to the project object
    Returns:
    reference to the monitor thread (QThread)

    VersionControl.addArguments

    addArguments(args, argslist)

    Protected method to add an argument list to the already present arguments.

    args
    current arguments list (QStringList)
    argslist
    list of arguments (list of strings or list of QStrings or a QStringList)

    VersionControl.checkVCSStatus

    checkVCSStatus()

    Public method to wake up the VCS status monitor thread.

    VersionControl.clearStatusCache

    clearStatusCache()

    Public method to clear the status cache.

    VersionControl.clearStatusMonitorCachedState

    clearStatusMonitorCachedState(name)

    Public method to clear the cached VCS state of a file/directory.

    name
    name of the entry to be cleared (QString or string)

    VersionControl.getStatusMonitorAutoUpdate

    getStatusMonitorAutoUpdate()

    Public method to retrieve the status of the auto update function.

    Returns:
    status of the auto update function (boolean)

    VersionControl.getStatusMonitorInterval

    getStatusMonitorInterval()

    Public method to get the monitor interval.

    Returns:
    interval in seconds (integer)

    VersionControl.setStatusMonitorAutoUpdate

    setStatusMonitorAutoUpdate(auto)

    Public method to enable the auto update function.

    auto
    status of the auto update function (boolean)

    VersionControl.setStatusMonitorInterval

    setStatusMonitorInterval(interval, project)

    Public method to change the monitor interval.

    interval
    new interval in seconds (integer)
    project
    reference to the project object

    VersionControl.splitPath

    splitPath(name)

    Public method splitting name into a directory part and a file part.

    name
    path name (string)
    Returns:
    a tuple of 2 strings (dirname, filename).

    VersionControl.splitPathList

    splitPathList(names)

    Public method splitting the list of names into a common directory part and a file list.

    names
    list of paths (list of strings)
    Returns:
    a tuple of string and list of strings (dirname, filenamelist)

    VersionControl.startStatusMonitor

    startStatusMonitor(project)

    Public method to start the VCS status monitor thread.

    project
    reference to the project object
    Returns:
    reference to the monitor thread (QThread)

    VersionControl.startSynchronizedProcess

    startSynchronizedProcess(proc, program, arguments, workingDir = None)

    Public method to start a synchroneous process

    This method starts a process and waits for its end while still serving the Qt event loop.

    proc
    process to start (QProcess)
    program
    path of the executable to start (string or QString)
    arguments
    list of arguments for the process (QStringList)
    workingDir
    working directory for the process (string or QString)
    Returns:
    flag indicating normal exit (boolean)

    VersionControl.stopStatusMonitor

    stopStatusMonitor()

    Public method to stop the VCS status monitor thread.

    VersionControl.vcsAdd

    vcsAdd(name, isDir = False, noDialog = False)

    Public method used to add a file/directory in the vcs.

    It must not return anything.

    name
    file/directory name to be added (string)
    isDir
    flag indicating name is a directory (boolean)
    noDialog
    flag indicating quiet operations (boolean)
    Raises RuntimeError:
    not implemented

    VersionControl.vcsAddBinary

    vcsAddBinary(name, isDir = False)

    Public method used to add a file/directory in binary mode in the vcs.

    It must not return anything.

    name
    file/directory name to be added (string)
    isDir
    flag indicating name is a directory (boolean)
    Raises RuntimeError:
    not implemented

    VersionControl.vcsAddTree

    vcsAddTree(path)

    Public method to add a directory tree rooted at path in the vcs.

    It must not return anything.

    path
    root directory of the tree to be added (string)
    Raises RuntimeError:
    not implemented

    VersionControl.vcsAllRegisteredStates

    vcsAllRegisteredStates(names, dname)

    Public method used to get the registered states of a number of files in the vcs.

    names
    dictionary with all filenames to be checked as keys
    dname
    directory to check in (string)
    Returns:
    the received dictionary completed with a combination of canBeCommited and canBeAdded or None in order to signal an error
    Raises RuntimeError:
    not implemented

    VersionControl.vcsCheckout

    vcsCheckout(vcsDataDict, projectDir, noDialog = False)

    Public method used to check the project out of the vcs.

    vcsDataDict
    dictionary of data required for the checkout
    projectDir
    project directory to create (string)
    noDialog
    flag indicating quiet operations
    Returns:
    flag indicating an execution without errors (boolean)
    Raises RuntimeError:
    not implemented

    VersionControl.vcsCleanup

    vcsCleanup(name)

    Public method used to cleanup the local copy.

    name
    directory name to be cleaned up (string)
    Raises RuntimeError:
    not implemented

    VersionControl.vcsCommandLine

    vcsCommandLine(name)

    Public method used to execute arbitrary vcs commands.

    name
    directory name of the working directory (string)
    Raises RuntimeError:
    not implemented

    VersionControl.vcsCommit

    vcsCommit(name, message, noDialog = False)

    Public method used to make the change of a file/directory permanent in the vcs.

    It must return a boolean to indicate an execution without errors.

    name
    file/directory name to be committed (string)
    message
    message for this operation (string)
    noDialog
    flag indicating quiet operations
    Raises RuntimeError:
    not implemented

    VersionControl.vcsConvertProject

    vcsConvertProject(vcsDataDict, project)

    Public method to convert an uncontrolled project to a version controlled project.

    vcsDataDict
    dictionary of data required for the conversion
    project
    reference to the project object
    Raises RuntimeError:
    not implemented

    VersionControl.vcsDefaultOptions

    vcsDefaultOptions()

    Public method used to retrieve the default options for the vcs.

    Returns:
    a dictionary with the vcs operations as key and the respective options as values. The key 'global' must contain the global options. The other keys must be 'commit', 'update', 'add', 'remove', 'diff', 'log', 'history', 'tag', 'status' and 'export'.

    VersionControl.vcsDiff

    vcsDiff(name)

    Public method used to view the diff of a file/directory in the vcs.

    It must not return anything.

    name
    file/directory name to be diffed (string)
    Raises RuntimeError:
    not implemented

    VersionControl.vcsExists

    vcsExists()

    Public method used to test for the presence of the vcs.

    It must return a bool to indicate the existance and a QString giving an error message in case of failure.

    Raises RuntimeError:
    not implemented

    VersionControl.vcsExport

    vcsExport(vcsDataDict, projectDir)

    Public method used to export a directory from the vcs.

    It must return a boolean to indicate an execution without errors.

    vcsDataDict
    dictionary of data required for the export
    projectDir
    project directory to create (string)
    Returns:
    flag indicating an execution without errors (boolean)
    Raises RuntimeError:
    not implemented

    VersionControl.vcsGetOptions

    vcsGetOptions()

    Public method used to retrieve the options of the vcs.

    Returns:
    a dictionary of option strings that can be passed to vcsSetOptions.

    VersionControl.vcsGetOtherData

    vcsGetOtherData()

    Public method used to retrieve vcs specific data.

    Returns:
    a dictionary of vcs specific data

    VersionControl.vcsGetProjectBrowserHelper

    vcsGetProjectBrowserHelper(browser, project, isTranslationsBrowser = False)

    Public method to instanciate a helper object for the different project browsers.

    browser
    reference to the project browser object
    project
    reference to the project object
    isTranslationsBrowser
    flag indicating, the helper is requested for the translations browser (this needs some special treatment)
    Returns:
    the project browser helper object

    VersionControl.vcsGetProjectHelper

    vcsGetProjectHelper(project)

    Public method to instanciate a helper object for the project.

    project
    reference to the project object
    Returns:
    the project helper object

    VersionControl.vcsHistory

    vcsHistory(name)

    Public method used to view the history of a file/directory in the vcs.

    It must not return anything.

    name
    file/directory name to show the history for (string)
    Raises RuntimeError:
    not implemented

    VersionControl.vcsImport

    vcsImport(vcsDataDict, projectDir, noDialog = False)

    Public method used to import the project into the vcs.

    vcsDataDict
    dictionary of data required for the import
    projectDir
    project directory (string)
    noDialog
    flag indicating quiet operations
    Returns:
    flag indicating an execution without errors (boolean) and a flag indicating the version controll status (boolean)
    Raises RuntimeError:
    not implemented

    VersionControl.vcsInit

    vcsInit(vcsDir, noDialog = False)

    Public method used to initialize the vcs.

    It must return a boolean to indicate an execution without errors.

    vcsDir
    name of the VCS directory (string)
    noDialog
    flag indicating quiet operations (boolean)
    Raises RuntimeError:
    not implemented

    VersionControl.vcsInitConfig

    vcsInitConfig(project)

    Public method to initialize the VCS configuration.

    This method could ensure, that certain files or directories are exclude from being version controlled.

    project
    reference to the project (Project)

    VersionControl.vcsLog

    vcsLog(name)

    Public method used to view the log of a file/directory in the vcs.

    It must not return anything.

    name
    file/directory name to show the log for (string)
    Raises RuntimeError:
    not implemented

    VersionControl.vcsMerge

    vcsMerge(name)

    Public method used to merge a tag/branch into the local project.

    It must not return anything.

    name
    file/directory name to be merged (string)
    Raises RuntimeError:
    not implemented

    VersionControl.vcsMove

    vcsMove(name, project, target = None, noDialog = False)

    Public method used to move a file/directory.

    name
    file/directory name to be moved (string)
    project
    reference to the project object
    target
    new name of the file/directory (string)
    noDialog
    flag indicating quiet operations
    Returns:
    flag indicating successfull operation (boolean)
    Raises RuntimeError:
    not implemented

    VersionControl.vcsName

    vcsName()

    Public method returning the name of the vcs.

    Returns:
    name of the vcs (string)
    Raises RuntimeError:
    not implemented

    VersionControl.vcsNewProjectOptionsDialog

    vcsNewProjectOptionsDialog(parent = None)

    Public method to get a dialog to enter repository info for getting a new project.

    parent
    parent widget (QWidget)

    VersionControl.vcsOptionsDialog

    vcsOptionsDialog(project, archive, editable = False, parent = None)

    Public method to get a dialog to enter repository info.

    project
    reference to the project object
    archive
    name of the project in the repository (string)
    editable
    flag indicating that the project name is editable (boolean)
    parent
    parent widget (QWidget)

    VersionControl.vcsRegisteredState

    vcsRegisteredState(name)

    Public method used to get the registered state of a file in the vcs.

    name
    filename to check (string)
    Returns:
    a combination of canBeCommited and canBeAdded or 0 in order to signal an error
    Raises RuntimeError:
    not implemented

    VersionControl.vcsRemove

    vcsRemove(name, project = False, noDialog = False)

    Public method used to add a file/directory in the vcs.

    It must return a flag indicating successfull operation

    name
    file/directory name to be removed (string)
    project
    flag indicating deletion of a project tree (boolean)
    noDialog
    flag indicating quiet operations
    Raises RuntimeError:
    not implemented

    VersionControl.vcsRepositoryInfos

    vcsRepositoryInfos(ppath)

    Public method to retrieve information about the repository.

    ppath
    local path to get the repository infos (string)
    Returns:
    string with ready formated info for display (QString)

    VersionControl.vcsRevert

    vcsRevert(name)

    Public method used to revert changes made to a file/directory.

    It must not return anything.

    name
    file/directory name to be reverted (string)
    Raises RuntimeError:
    not implemented

    VersionControl.vcsSetData

    vcsSetData(key, value)

    Public method used to set an entry in the otherData dictionary.

    key
    the key of the data (string)
    value
    the value of the data

    VersionControl.vcsSetDataFromDict

    vcsSetDataFromDict(dict)

    Public method used to set entries in the otherData dictionary.

    dict
    dictionary to pick entries from

    VersionControl.vcsSetOptions

    vcsSetOptions(options)

    Public method used to set the options for the vcs.

    options
    a dictionary of option strings with keys as defined by the default options

    VersionControl.vcsSetOtherData

    vcsSetOtherData(data)

    Public method used to set vcs specific data.

    data
    a dictionary of vcs specific data

    VersionControl.vcsShutdown

    vcsShutdown()

    Public method used to shutdown the vcs interface.

    VersionControl.vcsStatus

    vcsStatus(name)

    Public method used to view the status of a file/directory in the vcs.

    It must not return anything.

    name
    file/directory name to show the status for (string)
    Raises RuntimeError:
    not implemented

    VersionControl.vcsSwitch

    vcsSwitch(name)

    Public method used to switch a directory to a different tag/branch.

    It must not return anything.

    name
    directory name to be switched (string)
    Raises RuntimeError:
    not implemented

    VersionControl.vcsTag

    vcsTag(name)

    Public method used to set the tag of a file/directory in the vcs.

    It must not return anything.

    name
    file/directory name to be tagged (string)
    Raises RuntimeError:
    not implemented

    VersionControl.vcsUpdate

    vcsUpdate(name, noDialog = False)

    Public method used to update a file/directory in the vcs.

    It must not return anything.

    name
    file/directory name to be updated (string)
    noDialog
    flag indicating quiet operations (boolean)
    Returns:
    flag indicating, that the update contained an add or delete (boolean)
    Raises RuntimeError:
    not implemented

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DebugClients.Python.DebugThread.html0000644000175000001440000000013112261331354030461 xustar000000000000000030 mtime=1388688108.264229944 29 atime=1389081085.11872436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.DebugClients.Python.DebugThread.html0000644000175000001440000001131312261331354030213 0ustar00detlevusers00000000000000 eric4.DebugClients.Python.DebugThread

    eric4.DebugClients.Python.DebugThread

    Module implementing the debug thread.

    Global Attributes

    None

    Classes

    DebugThread Class implementing a debug thread.

    Functions

    None


    DebugThread

    Class implementing a debug thread.

    It represents a thread in the python interpreter that we are tracing.

    Provides simple wrapper methods around bdb for the 'owning' client to call to step etc.

    Derived from

    DebugBase

    Class Attributes

    None

    Class Methods

    None

    Methods

    DebugThread Constructor
    bootstrap Private method to bootstrap the thread.
    get_ident Public method to return the id of this thread.
    get_name Public method to return the name of this thread.
    set_ident Public method to set the id for this thread.
    traceThread Private method to setup tracing for this thread.
    trace_dispatch Private method wrapping the trace_dispatch of bdb.py.

    Static Methods

    None

    DebugThread (Constructor)

    DebugThread(dbgClient, targ = None, args = None, kwargs = None, mainThread = 0)

    Constructor

    dbgClient
    the owning client
    targ
    the target method in the run thread
    args
    arguments to be passed to the thread
    kwargs
    arguments to be passed to the thread
    mainThread
    0 if this thread is not the mainscripts thread

    DebugThread.bootstrap

    bootstrap()

    Private method to bootstrap the thread.

    It wraps the call to the user function to enable tracing before hand.

    DebugThread.get_ident

    get_ident()

    Public method to return the id of this thread.

    Returns:
    the id of this thread (int)

    DebugThread.get_name

    get_name()

    Public method to return the name of this thread.

    Returns:
    name of this thread (string)

    DebugThread.set_ident

    set_ident(id)

    Public method to set the id for this thread.

    id
    id for this thread (int)

    DebugThread.traceThread

    traceThread()

    Private method to setup tracing for this thread.

    DebugThread.trace_dispatch

    trace_dispatch(frame, event, arg)

    Private method wrapping the trace_dispatch of bdb.py.

    It wraps the call to dispatch tracing into bdb to make sure we have locked the client to prevent multiple threads from entering the client event loop.

    frame
    The current stack frame.
    event
    The trace event (string)
    arg
    The arguments
    Returns:
    local trace function

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.KdeQt.html0000644000175000001440000000013112261331354024571 xustar000000000000000030 mtime=1388688108.658230142 29 atime=1389081085.11872436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.KdeQt.html0000644000175000001440000000544612261331354024335 0ustar00detlevusers00000000000000 eric4.KdeQt

    eric4.KdeQt

    Package implementing compatibility modules for using KDE dialogs instead og Qt dialogs.

    The different modules try to import the KDE dialogs and implement interfaces, that are compatible with the standard Qt dialog APIs. If the import fails, the modules fall back to the standard Qt dialogs.

    In order for this package to work PyKDE must be installed (see http://www.riverbankcomputing.co.uk/pykde.

    Modules

    KQApplication Compatibility module to use KApplication instead of QApplication.
    KQColorDialog Compatibility module to use the KDE Color Dialog instead of the Qt Color Dialog.
    KQFileDialog Compatibility module to use the KDE File Dialog instead of the Qt File Dialog.
    KQFontDialog Compatibility module to use the KDE Font Dialog instead of the Qt Font Dialog.
    KQInputDialog Compatibility module to use the KDE Input Dialog instead of the Qt Input Dialog.
    KQMainWindow Compatibility module to use the KDE main window instead of the Qt main window.
    KQMessageBox Compatibility module to use the KDE Message Box instead of the Qt Message Box.
    KQPrintDialog Compatibility module to use the KDE Print Dialog instead of the Qt Print Dialog.
    KQPrinter Compatibility module to use the KDE Printer instead of the Qt Printer.
    KQProgressDialog Compatibility module to use the KDE Progress Dialog instead of the Qt Progress Dialog.
    KdeQt Package implementing compatibility modules for using KDE dialogs instead og Qt dialogs.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Debugger.BreakPointModel.html0000644000175000001440000000013112261331350027212 xustar000000000000000030 mtime=1388688104.643228126 29 atime=1389081085.11872436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Debugger.BreakPointModel.html0000644000175000001440000002623612261331350026756 0ustar00detlevusers00000000000000 eric4.Debugger.BreakPointModel

    eric4.Debugger.BreakPointModel

    Module implementing the Breakpoint model.

    Global Attributes

    None

    Classes

    BreakPointModel Class implementing a custom model for breakpoints.

    Functions

    None


    BreakPointModel

    Class implementing a custom model for breakpoints.

    Derived from

    QAbstractItemModel

    Class Attributes

    None

    Class Methods

    None

    Methods

    BreakPointModel Constructor
    addBreakPoint Public method to add a new breakpoint to the list.
    columnCount Public method to get the current column count.
    data Public method to get the requested data.
    deleteAll Public method to delete all breakpoints.
    deleteBreakPointByIndex Public method to set the values of a breakpoint given by index.
    deleteBreakPoints Public method to delete a list of breakpoints given by their indexes.
    flags Public method to get item flags.
    getBreakPointByIndex Public method to get the values of a breakpoint given by index.
    getBreakPointIndex Public method to get the index of a breakpoint given by filename and line number.
    hasChildren Public method to check for the presence of child items.
    headerData Public method to get header data.
    index Public method to create an index.
    isBreakPointTemporaryByIndex Public method to test, if a breakpoint given by it's index is temporary.
    parent Public method to get the parent index.
    rowCount Public method to get the current row count.
    setBreakPointByIndex Public method to set the values of a breakpoint given by index.
    setBreakPointEnabledByIndex Public method to set the enabled state of a breakpoint given by index.

    Static Methods

    None

    BreakPointModel (Constructor)

    BreakPointModel(parent = None)

    Constructor

    reference
    to the parent widget (QObject)

    BreakPointModel.addBreakPoint

    addBreakPoint(fn, line, properties)

    Public method to add a new breakpoint to the list.

    fn
    filename of the breakpoint (string or QString)
    line
    line number of the breakpoint (integer)
    properties
    properties of the breakpoint (tuple of condition (string or QString), temporary flag (bool), enabled flag (bool), ignore count (integer))

    BreakPointModel.columnCount

    columnCount(parent = QModelIndex())

    Public method to get the current column count.

    Returns:
    column count (integer)

    BreakPointModel.data

    data(index, role)

    Public method to get the requested data.

    index
    index of the requested data (QModelIndex)
    role
    role of the requested data (Qt.ItemDataRole)
    Returns:
    the requested data (QVariant)

    BreakPointModel.deleteAll

    deleteAll()

    Public method to delete all breakpoints.

    BreakPointModel.deleteBreakPointByIndex

    deleteBreakPointByIndex(index)

    Public method to set the values of a breakpoint given by index.

    index
    index of the breakpoint (QModelIndex)

    BreakPointModel.deleteBreakPoints

    deleteBreakPoints(idxList)

    Public method to delete a list of breakpoints given by their indexes.

    idxList
    list of breakpoint indexes (list of QModelIndex)

    BreakPointModel.flags

    flags(index)

    Public method to get item flags.

    index
    index of the requested flags (QModelIndex)
    Returns:
    item flags for the given index (Qt.ItemFlags)

    BreakPointModel.getBreakPointByIndex

    getBreakPointByIndex(index)

    Public method to get the values of a breakpoint given by index.

    index
    index of the breakpoint (QModelIndex)
    Returns:
    breakpoint (list of seven values (filename, line number, condition, temporary flag, enabled flag, ignore count))

    BreakPointModel.getBreakPointIndex

    getBreakPointIndex(fn, lineno)

    Public method to get the index of a breakpoint given by filename and line number.

    fn
    filename of the breakpoint (string or QString)
    line
    line number of the breakpoint (integer)
    Returns:
    index (QModelIndex)

    BreakPointModel.hasChildren

    hasChildren(parent = QModelIndex())

    Public method to check for the presence of child items.

    parent
    index of parent item (QModelIndex)
    Returns:
    flag indicating the presence of child items (boolean)

    BreakPointModel.headerData

    headerData(section, orientation, role = Qt.DisplayRole)

    Public method to get header data.

    section
    section number of the requested header data (integer)
    orientation
    orientation of the header (Qt.Orientation)
    role
    role of the requested data (Qt.ItemDataRole)
    Returns:
    header data (QVariant)

    BreakPointModel.index

    index(row, column, parent = QModelIndex())

    Public method to create an index.

    row
    row number for the index (integer)
    column
    column number for the index (integer)
    parent
    index of the parent item (QModelIndex)
    Returns:
    requested index (QModelIndex)

    BreakPointModel.isBreakPointTemporaryByIndex

    isBreakPointTemporaryByIndex(index)

    Public method to test, if a breakpoint given by it's index is temporary.

    index
    index of the breakpoint to test (QModelIndex)
    Returns:
    flag indicating a temporary breakpoint (boolean)

    BreakPointModel.parent

    parent(index)

    Public method to get the parent index.

    index
    index of item to get parent (QModelIndex)
    Returns:
    index of parent (QModelIndex)

    BreakPointModel.rowCount

    rowCount(parent = QModelIndex())

    Public method to get the current row count.

    Returns:
    row count (integer)

    BreakPointModel.setBreakPointByIndex

    setBreakPointByIndex(index, fn, line, properties)

    Public method to set the values of a breakpoint given by index.

    index
    index of the breakpoint (QModelIndex)
    fn
    filename of the breakpoint (string or QString)
    line
    line number of the breakpoint (integer)
    properties
    properties of the breakpoint (tuple of condition (string or QString), temporary flag (bool), enabled flag (bool), ignore count (integer))

    BreakPointModel.setBreakPointEnabledByIndex

    setBreakPointEnabledByIndex(index, enabled)

    Public method to set the enabled state of a breakpoint given by index.

    index
    index of the breakpoint (QModelIndex)
    enabled
    flag giving the enabled state (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ConfigurationPages.ShellPag0000644000175000001440000000013112261331353031235 xustar000000000000000030 mtime=1388688107.502229562 29 atime=1389081085.11872436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.ShellPage.html0000644000175000001440000000673412261331353032112 0ustar00detlevusers00000000000000 eric4.Preferences.ConfigurationPages.ShellPage

    eric4.Preferences.ConfigurationPages.ShellPage

    Module implementing the Shell configuration page.

    Global Attributes

    None

    Classes

    ShellPage Class implementing the Shell configuration page.

    Functions

    create Module function to create the configuration page.


    ShellPage

    Class implementing the Shell configuration page.

    Derived from

    ConfigurationPageBase, Ui_ShellPage

    Class Attributes

    None

    Class Methods

    None

    Methods

    ShellPage Constructor
    on_linenumbersFontButton_clicked Private method used to select the font for the editor margins.
    on_monospacedFontButton_clicked Private method used to select the font to be used as the monospaced font.
    polishPage Public slot to perform some polishing actions.
    save Public slot to save the Shell configuration.

    Static Methods

    None

    ShellPage (Constructor)

    ShellPage()

    Constructor

    ShellPage.on_linenumbersFontButton_clicked

    on_linenumbersFontButton_clicked()

    Private method used to select the font for the editor margins.

    ShellPage.on_monospacedFontButton_clicked

    on_monospacedFontButton_clicked()

    Private method used to select the font to be used as the monospaced font.

    ShellPage.polishPage

    polishPage()

    Public slot to perform some polishing actions.

    ShellPage.save

    save()

    Public slot to save the Shell configuration.



    create

    create(dlg)

    Module function to create the configuration page.

    dlg
    reference to the configuration dialog

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Templates.TemplateViewer.html0000644000175000001440000000013112261331350027342 xustar000000000000000030 mtime=1388688104.353227981 29 atime=1389081085.11872436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Templates.TemplateViewer.html0000644000175000001440000006635112261331350027110 0ustar00detlevusers00000000000000 eric4.Templates.TemplateViewer

    eric4.Templates.TemplateViewer

    Module implementing a template viewer and associated classes.

    Global Attributes

    None

    Classes

    TemplateEntry Class immplementing a template entry.
    TemplateGroup Class implementing a template group.
    TemplateViewer Class implementing the template viewer.

    Functions

    None


    TemplateEntry

    Class immplementing a template entry.

    Derived from

    QTreeWidgetItem

    Class Attributes

    None

    Class Methods

    None

    Methods

    TemplateEntry Constructor
    __displayText Private method to generate the display text.
    __expandFormattedVariable Private method to expand a template variable with special formatting.
    __extractVariables Private method to retrieve the list of variables.
    getDescription Public method to get the description of the entry.
    getExpandedText Public method to get the template text with all variables expanded.
    getGroupName Public method to get the name of the group this entry belongs to.
    getName Public method to get the name of the entry.
    getTemplateText Public method to get the template text.
    getVariables Public method to get the list of variables.
    setDescription Public method to update the description of the entry.
    setName Public method to update the name of the entry.
    setTemplateText Public method to update the template text.

    Static Methods

    None

    TemplateEntry (Constructor)

    TemplateEntry(parent, name, description, templateText)

    Constructor

    parent
    parent widget of the template entry (QWidget)
    name
    name of the entry (string or QString)
    description
    descriptive text for the template (string or QString)
    templateText
    text of the template entry (string or QString)

    TemplateEntry.__displayText

    __displayText()

    Private method to generate the display text.

    Returns:
    display text (QString)

    TemplateEntry.__expandFormattedVariable

    __expandFormattedVariable(var, val, txt)

    Private method to expand a template variable with special formatting.

    var
    template variable name (string)
    val
    value of the template variable (string)
    txt
    template text (string)

    TemplateEntry.__extractVariables

    __extractVariables()

    Private method to retrieve the list of variables.

    TemplateEntry.getDescription

    getDescription()

    Public method to get the description of the entry.

    Returns:
    description of the entry (string)

    TemplateEntry.getExpandedText

    getExpandedText(varDict, indent)

    Public method to get the template text with all variables expanded.

    varDict
    dictionary containing the texts of each variable with the variable name as key.
    indent
    indentation of the line receiving he expanded template text (string)
    Returns:
    a tuple of the expanded template text (string), the number of lines (integer) and the length of the last line (integer)

    TemplateEntry.getGroupName

    getGroupName()

    Public method to get the name of the group this entry belongs to.

    Returns:
    name of the group containing this entry (string)

    TemplateEntry.getName

    getName()

    Public method to get the name of the entry.

    Returns:
    name of the entry (string)

    TemplateEntry.getTemplateText

    getTemplateText()

    Public method to get the template text.

    Returns:
    the template text (string)

    TemplateEntry.getVariables

    getVariables()

    Public method to get the list of variables.

    Returns:
    list of variables (list of strings)

    TemplateEntry.setDescription

    setDescription(description)

    Public method to update the description of the entry.

    description
    description of the entry (string or QString)

    TemplateEntry.setName

    setName(name)

    Public method to update the name of the entry.

    name
    name of the entry (string or QString)

    TemplateEntry.setTemplateText

    setTemplateText(templateText)

    Public method to update the template text.

    templateText
    text of the template entry (string or QString)


    TemplateGroup

    Class implementing a template group.

    Derived from

    QTreeWidgetItem

    Class Attributes

    None

    Class Methods

    None

    Methods

    TemplateGroup Constructor
    addEntry Public method to add a template entry to this group.
    getAllEntries Public method to retrieve all entries.
    getEntry Public method to get an entry.
    getEntryNames Public method to get the names of all entries, who's name starts with the given string.
    getLanguage Public method to get the name of the group.
    getName Public method to get the name of the group.
    hasEntry Public method to check, if the group has an entry with the given name.
    removeAllEntries Public method to remove all template entries of this group.
    removeEntry Public method to remove a template entry from this group.
    setLanguage Public method to update the name of the group.
    setName Public method to update the name of the group.

    Static Methods

    None

    TemplateGroup (Constructor)

    TemplateGroup(parent, name, language = "All")

    Constructor

    parent
    parent widget of the template group (QWidget)
    name
    name of the group (string or QString)
    language
    programming language for the group (string or QString)

    TemplateGroup.addEntry

    addEntry(name, description, template, quiet = False)

    Public method to add a template entry to this group.

    name
    name of the entry (string or QString)
    description
    description of the entry to add (string or QString)
    template
    template text of the entry (string or QString)
    quiet
    flag indicating quiet operation (boolean)

    TemplateGroup.getAllEntries

    getAllEntries()

    Public method to retrieve all entries.

    Returns:
    list of all entries (list of TemplateEntry)

    TemplateGroup.getEntry

    getEntry(name)

    Public method to get an entry.

    name
    name of the entry to retrieve (string or QString)
    Returns:
    reference to the entry (TemplateEntry)

    TemplateGroup.getEntryNames

    getEntryNames(beginning)

    Public method to get the names of all entries, who's name starts with the given string.

    beginning
    string denoting the beginning of the template name (string or QString)
    Returns:
    list of entry names found (list of strings)

    TemplateGroup.getLanguage

    getLanguage()

    Public method to get the name of the group.

    Returns:
    language of the group (string)

    TemplateGroup.getName

    getName()

    Public method to get the name of the group.

    Returns:
    name of the group (string)

    TemplateGroup.hasEntry

    hasEntry(name)

    Public method to check, if the group has an entry with the given name.

    name
    name of the entry to check for (string or QString)
    Returns:
    flag indicating existence (boolean)

    TemplateGroup.removeAllEntries

    removeAllEntries()

    Public method to remove all template entries of this group.

    TemplateGroup.removeEntry

    removeEntry(name)

    Public method to remove a template entry from this group.

    name
    name of the entry to be removed (string or QString)

    TemplateGroup.setLanguage

    setLanguage(language)

    Public method to update the name of the group.

    language
    programming language for the group (string or QString)

    TemplateGroup.setName

    setName(name)

    Public method to update the name of the group.

    name
    name of the group (string or QString)


    TemplateViewer

    Class implementing the template viewer.

    Derived from

    QTreeWidget

    Class Attributes

    None

    Class Methods

    None

    Methods

    TemplateViewer Constructor
    __addEntry Private slot to handle the Add Entry context menu action.
    __addGroup Private slot to handle the Add Group context menu action.
    __configure Private method to open the configuration dialog.
    __edit Private slot to handle the Edit context menu action.
    __export Private slot to handle the Export context menu action.
    __getPredefinedVars Private method to return predefined variables.
    __import Private slot to handle the Import context menu action.
    __remove Private slot to handle the Remove context menu action.
    __resort Private method to resort the tree.
    __save Private slot to handle the Save context menu action.
    __showContextMenu Private slot to show the context menu of the list.
    __showHelp Private method to show some help.
    __templateItemActivated Private slot to handle the activation of an item.
    addEntry Public method to add a template entry.
    addGroup Public method to add a group.
    applyNamedTemplate Public method to apply a template given a template name.
    applyTemplate Public method to apply the template.
    changeEntry Public method to change a template entry.
    changeGroup Public method to rename a group.
    getAllGroups Public method to get all groups.
    getGroupNames Public method to get all group names.
    getTemplateNames Public method to get the names of templates starting with the given string.
    hasGroup Public method to check, if a group with the given name exists.
    hasTemplate Public method to check, if an entry of the given name exists.
    readTemplates Public method to read in the templates file (.e4c)
    removeEntry Public method to remove a template entry.
    removeGroup Public method to remove a group.
    writeTemplates Public method to write the templates data to an XML file (.e4c).

    Static Methods

    None

    TemplateViewer (Constructor)

    TemplateViewer(parent, viewmanager)

    Constructor

    parent
    the parent (QWidget)
    viewmanager
    reference to the viewmanager object

    TemplateViewer.__addEntry

    __addEntry()

    Private slot to handle the Add Entry context menu action.

    TemplateViewer.__addGroup

    __addGroup()

    Private slot to handle the Add Group context menu action.

    TemplateViewer.__configure

    __configure()

    Private method to open the configuration dialog.

    TemplateViewer.__edit

    __edit()

    Private slot to handle the Edit context menu action.

    TemplateViewer.__export

    __export()

    Private slot to handle the Export context menu action.

    TemplateViewer.__getPredefinedVars

    __getPredefinedVars()

    Private method to return predefined variables.

    Returns:
    dictionary of predefined variables and their values

    TemplateViewer.__import

    __import()

    Private slot to handle the Import context menu action.

    TemplateViewer.__remove

    __remove()

    Private slot to handle the Remove context menu action.

    TemplateViewer.__resort

    __resort()

    Private method to resort the tree.

    TemplateViewer.__save

    __save()

    Private slot to handle the Save context menu action.

    TemplateViewer.__showContextMenu

    __showContextMenu(coord)

    Private slot to show the context menu of the list.

    coord
    the position of the mouse pointer (QPoint)

    TemplateViewer.__showHelp

    __showHelp()

    Private method to show some help.

    TemplateViewer.__templateItemActivated

    __templateItemActivated(itm = None, col = 0)

    Private slot to handle the activation of an item.

    itm
    reference to the activated item (QTreeWidgetItem)
    col
    column the item was activated in (integer)

    TemplateViewer.addEntry

    addEntry(groupName, name, description, template, quiet = False)

    Public method to add a template entry.

    groupName
    name of the group to add to (string or QString)
    name
    name of the entry to add (string or QString)
    description
    description of the entry to add (string or QString)
    template
    template text of the entry (string or QString)
    quiet
    flag indicating quiet operation (boolean)

    TemplateViewer.addGroup

    addGroup(name, language = "All")

    Public method to add a group.

    name
    name of the group to be added (string or QString)
    language
    programming language for the group (string or QString)

    TemplateViewer.applyNamedTemplate

    applyNamedTemplate(templateName, groupName="")

    Public method to apply a template given a template name.

    templateName
    name of the template item to apply (string or QString)
    groupName
    name of the group to get the entry from (string or QString). Empty means to apply the first template found with the given name.

    TemplateViewer.applyTemplate

    applyTemplate(itm)

    Public method to apply the template.

    itm
    reference to the template item to apply (TemplateEntry)

    TemplateViewer.changeEntry

    changeEntry(itm, name, groupName, description, template)

    Public method to change a template entry.

    itm
    template entry to be changed (TemplateEntry)
    name
    new name for the entry (string or QString)
    groupName
    name of the group the entry should belong to (string or QString)
    description
    description of the entry (string or QString)
    template
    template text of the entry (string or QString)

    TemplateViewer.changeGroup

    changeGroup(oldname, newname, language = "All")

    Public method to rename a group.

    oldname
    old name of the group (string or QString)
    newname
    new name of the group (string or QString)
    language
    programming language for the group (string or QString)

    TemplateViewer.getAllGroups

    getAllGroups()

    Public method to get all groups.

    Returns:
    list of all groups (list of TemplateGroup)

    TemplateViewer.getGroupNames

    getGroupNames()

    Public method to get all group names.

    Returns:
    list of all group names (list of strings)

    TemplateViewer.getTemplateNames

    getTemplateNames(start, groupName="")

    Public method to get the names of templates starting with the given string.

    start
    start string of the name (string or QString)
    groupName
    name of the group to get the entry from (string or QString). Empty means to look in all groups.
    Returns:
    sorted list of matching template names (list of strings)

    TemplateViewer.hasGroup

    hasGroup(name)

    Public method to check, if a group with the given name exists.

    name
    name of the group to be checked for (string or QString)
    Returns:
    flag indicating an existing group (boolean)

    TemplateViewer.hasTemplate

    hasTemplate(entryName, groupName="")

    Public method to check, if an entry of the given name exists.

    entryName
    name of the entry to check for (string or QString)
    groupName
    name of the group to check the entry (string or QString). Empty means to check all groups.
    Returns:
    flag indicating the existence (boolean)

    TemplateViewer.readTemplates

    readTemplates(filename = None)

    Public method to read in the templates file (.e4c)

    filename
    name of a templates file to read (string or QString)

    TemplateViewer.removeEntry

    removeEntry(itm)

    Public method to remove a template entry.

    itm
    template entry to be removed (TemplateEntry)

    TemplateViewer.removeGroup

    removeGroup(itm)

    Public method to remove a group.

    itm
    template group to be removed (TemplateGroup)

    TemplateViewer.writeTemplates

    writeTemplates(filename = None)

    Public method to write the templates data to an XML file (.e4c).

    filename
    name of a templates file to read (string or QString)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.CookieJar.CookieDetailsDialo0000644000175000001440000000013112261331353031156 xustar000000000000000030 mtime=1388688107.690229656 29 atime=1389081085.11872436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.CookieJar.CookieDetailsDialog.html0000644000175000001440000000512712261331353032030 0ustar00detlevusers00000000000000 eric4.Helpviewer.CookieJar.CookieDetailsDialog

    eric4.Helpviewer.CookieJar.CookieDetailsDialog

    Module implementing a dialog showing the cookie data.

    Global Attributes

    None

    Classes

    CookieDetailsDialog Class implementing a dialog showing the cookie data.

    Functions

    None


    CookieDetailsDialog

    Class implementing a dialog showing the cookie data.

    Derived from

    QDialog, Ui_CookieDetailsDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    CookieDetailsDialog Constructor
    setData Public method to set the data to be shown.

    Static Methods

    None

    CookieDetailsDialog (Constructor)

    CookieDetailsDialog(parent = None)

    Constructor

    parent
    reference to the parent object (QWidget)

    CookieDetailsDialog.setData

    setData(domain, name, path, secure, expires, value)

    Public method to set the data to be shown.

    domain
    domain of the cookie (QString)
    name
    name of the cookie (QString)
    path
    path of the cookie (QString)
    secure
    flag indicating a secure cookie (boolean)
    expires
    expiration time of the cookie (QString)
    value
    value of the cookie (QString)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.ViewManagerPlugins.Workspace.Wo0000644000175000001440000000013112261331352031217 xustar000000000000000030 mtime=1388688106.690229154 29 atime=1389081085.11872436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.ViewManagerPlugins.Workspace.Workspace.html0000644000175000001440000002320512261331352033270 0ustar00detlevusers00000000000000 eric4.Plugins.ViewManagerPlugins.Workspace.Workspace

    eric4.Plugins.ViewManagerPlugins.Workspace.Workspace

    Module implementing the workspace viewmanager class.

    Global Attributes

    None

    Classes

    Workspace Class implementing the workspace viewmanager class.

    Functions

    None


    Workspace

    Class implementing the workspace viewmanager class.

    Signals

    editorChanged(string)
    emitted when the current editor has changed

    Derived from

    QWorkspace, ViewManager

    Class Attributes

    None

    Class Methods

    None

    Methods

    Workspace Constructor
    __iconizeAllWindows Private slot to iconize all windows.
    __restoreAllWindows Private slot to restore all windows.
    __windowActivated Private slot to handle the windowActivated signal.
    _addView Protected method to add a view (i.e.
    _initWindowActions Protected method to define the user interface actions for window handling.
    _modificationStatusChanged Protected slot to handle the modificationStatusChanged signal.
    _removeAllViews Protected method to remove all views (i.e.
    _removeView Protected method to remove a view (i.e.
    _showView Private method to show a view (i.e.
    _syntaxErrorToggled Protected slot to handle the syntaxerrorToggled signal.
    activeWindow Private method to return the active (i.e.
    canCascade Public method to signal if cascading of managed windows is available.
    canSplit public method to signal if splitting of the view is available.
    canTile Public method to signal if tiling of managed windows is available.
    cascade Public method to cascade the managed windows.
    eventFilter Public method called to filter the event queue.
    setEditorName Public method to change the displayed name of the editor.
    showWindowMenu Public method to set up the viewmanager part of the Window menu.
    tile Public method to tile the managed windows.

    Static Methods

    None

    Workspace (Constructor)

    Workspace(parent)

    Constructor

    parent
    parent widget (QWidget)
    ui
    reference to the main user interface
    dbs
    reference to the debug server object

    Workspace.__iconizeAllWindows

    __iconizeAllWindows()

    Private slot to iconize all windows.

    Workspace.__restoreAllWindows

    __restoreAllWindows()

    Private slot to restore all windows.

    Workspace.__windowActivated

    __windowActivated(editor)

    Private slot to handle the windowActivated signal.

    editor
    the activated editor window

    Workspace._addView

    _addView(win, fn = None, noName = "")

    Protected method to add a view (i.e. window)

    win
    editor window to be added
    fn
    filename of this editor
    noName
    name to be used for an unnamed editor (string or QString)

    Workspace._initWindowActions

    _initWindowActions()

    Protected method to define the user interface actions for window handling.

    Workspace._modificationStatusChanged

    _modificationStatusChanged(m, editor)

    Protected slot to handle the modificationStatusChanged signal.

    m
    flag indicating the modification status (boolean)
    editor
    editor window changed

    Workspace._removeAllViews

    _removeAllViews()

    Protected method to remove all views (i.e. windows)

    Workspace._removeView

    _removeView(win)

    Protected method to remove a view (i.e. window)

    win
    editor window to be removed

    Workspace._showView

    _showView(win, fn = None)

    Private method to show a view (i.e. window)

    win
    editor window to be shown
    fn
    filename of this editor

    Workspace._syntaxErrorToggled

    _syntaxErrorToggled(editor)

    Protected slot to handle the syntaxerrorToggled signal.

    editor
    editor that sent the signal

    Workspace.activeWindow

    activeWindow()

    Private method to return the active (i.e. current) window.

    Returns:
    reference to the active editor

    Workspace.canCascade

    canCascade()

    Public method to signal if cascading of managed windows is available.

    Returns:
    flag indicating cascading of windows is available

    Workspace.canSplit

    canSplit()

    public method to signal if splitting of the view is available.

    Returns:
    flag indicating splitting of the view is available.

    Workspace.canTile

    canTile()

    Public method to signal if tiling of managed windows is available.

    Returns:
    flag indicating tiling of windows is available

    Workspace.cascade

    cascade()

    Public method to cascade the managed windows.

    Workspace.eventFilter

    eventFilter(watched, event)

    Public method called to filter the event queue.

    watched
    the QObject being watched
    event
    the event that occurred
    Returns:
    always False

    Workspace.setEditorName

    setEditorName(editor, newName)

    Public method to change the displayed name of the editor.

    editor
    editor window to be changed
    newName
    new name to be shown (string or QString)

    Workspace.showWindowMenu

    showWindowMenu(windowMenu)

    Public method to set up the viewmanager part of the Window menu.

    windowMenu
    reference to the window menu

    Workspace.tile

    tile()

    Public method to tile the managed windows.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.HelpIndexWidget.html0000644000175000001440000000013112261331351027606 xustar000000000000000030 mtime=1388688105.400228506 29 atime=1389081085.11872436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.HelpIndexWidget.html0000644000175000001440000001154712261331351027351 0ustar00detlevusers00000000000000 eric4.Helpviewer.HelpIndexWidget

    eric4.Helpviewer.HelpIndexWidget

    Module implementing a window for showing the QtHelp index.

    Global Attributes

    None

    Classes

    HelpIndexWidget Class implementing a window for showing the QtHelp index.

    Functions

    None


    HelpIndexWidget

    Class implementing a window for showing the QtHelp index.

    Signals

    escapePressed()
    emitted when the ESC key was pressed
    linkActivated(const QUrl&)
    emitted when an index entry is activated
    linksActivated(links, keyword)
    emitted when an index entry referencing multiple targets is activated

    Derived from

    QWidget

    Class Attributes

    None

    Class Methods

    None

    Methods

    HelpIndexWidget Constructor
    __activated Private slot to handle the activation of a keyword entry.
    __disableSearchEdit Private slot to enable the search edit.
    __enableSearchEdit Private slot to enable the search edit.
    __filterIndices Private slot to filter the indices according to the given filter.
    eventFilter Public method called to filter the event queue.
    focusInEvent Protected method handling focus in events.

    Static Methods

    None

    HelpIndexWidget (Constructor)

    HelpIndexWidget(engine, mainWindow, parent = None)

    Constructor

    engine
    reference to the help engine (QHelpEngine)
    mainWindow
    reference to the main window object (KQMainWindow)
    parent
    reference to the parent widget (QWidget)

    HelpIndexWidget.__activated

    __activated(idx)

    Private slot to handle the activation of a keyword entry.

    idx
    index of the activated entry (QModelIndex)

    HelpIndexWidget.__disableSearchEdit

    __disableSearchEdit()

    Private slot to enable the search edit.

    HelpIndexWidget.__enableSearchEdit

    __enableSearchEdit()

    Private slot to enable the search edit.

    HelpIndexWidget.__filterIndices

    __filterIndices(filter)

    Private slot to filter the indices according to the given filter.

    filter
    filter to be used (QString)

    HelpIndexWidget.eventFilter

    eventFilter(watched, event)

    Public method called to filter the event queue.

    watched
    the QObject being watched (QObject)
    event
    the event that occurred (QEvent)
    Returns:
    flag indicating whether the event was handled (boolean)

    HelpIndexWidget.focusInEvent

    focusInEvent(evt)

    Protected method handling focus in events.

    evt
    reference to the focus event object (QFocusEvent)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ConfigurationPages.Debugger0000644000175000001440000000013112261331353031262 xustar000000000000000030 mtime=1388688107.544229583 29 atime=1389081085.11872436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.DebuggerRubyPage.html0000644000175000001440000000557212261331353033430 0ustar00detlevusers00000000000000 eric4.Preferences.ConfigurationPages.DebuggerRubyPage

    eric4.Preferences.ConfigurationPages.DebuggerRubyPage

    Module implementing the Debugger Ruby configuration page.

    Global Attributes

    None

    Classes

    DebuggerRubyPage Class implementing the Debugger Ruby configuration page.

    Functions

    create Module function to create the configuration page.


    DebuggerRubyPage

    Class implementing the Debugger Ruby configuration page.

    Derived from

    ConfigurationPageBase, Ui_DebuggerRubyPage

    Class Attributes

    None

    Class Methods

    None

    Methods

    DebuggerRubyPage Constructor
    on_rubyInterpreterButton_clicked Private slot to handle the Ruby interpreter selection.
    save Public slot to save the Debugger Ruby configuration.

    Static Methods

    None

    DebuggerRubyPage (Constructor)

    DebuggerRubyPage()

    Constructor

    DebuggerRubyPage.on_rubyInterpreterButton_clicked

    on_rubyInterpreterButton_clicked()

    Private slot to handle the Ruby interpreter selection.

    DebuggerRubyPage.save

    save()

    Public slot to save the Debugger Ruby configuration.



    create

    create(dlg)

    Module function to create the configuration page.

    dlg
    reference to the configuration dialog

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.TypingCompleters.CompleterRu0000644000175000001440000000013112261331354031323 xustar000000000000000030 mtime=1388688108.638230132 29 atime=1389081085.11872436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.TypingCompleters.CompleterRuby.html0000644000175000001440000001245312261331354032361 0ustar00detlevusers00000000000000 eric4.QScintilla.TypingCompleters.CompleterRuby

    eric4.QScintilla.TypingCompleters.CompleterRuby

    Module implementing a typing completer for Ruby.

    Global Attributes

    None

    Classes

    CompleterRuby Class implementing typing completer for Ruby.

    Functions

    None


    CompleterRuby

    Class implementing typing completer for Ruby.

    Derived from

    CompleterBase

    Class Attributes

    None

    Class Methods

    None

    Methods

    CompleterRuby Constructor
    __inComment Private method to check, if the cursor is inside a comment
    __inDoubleQuotedString Private method to check, if the cursor is within a double quoted string.
    __inHereDocument Private method to check, if the cursor is within a here document.
    __inInlineDocument Private method to check, if the cursor is within an inline document.
    __inSingleQuotedString Private method to check, if the cursor is within a single quoted string.
    charAdded Public slot called to handle the user entering a character.
    readSettings Public slot called to reread the configuration parameters.

    Static Methods

    None

    CompleterRuby (Constructor)

    CompleterRuby(editor, parent = None)

    Constructor

    editor
    reference to the editor object (QScintilla.Editor)
    parent
    reference to the parent object (QObject)

    CompleterRuby.__inComment

    __inComment(line, col)

    Private method to check, if the cursor is inside a comment

    line
    current line (integer)
    col
    current position within line (integer)
    Returns:
    flag indicating, if the cursor is inside a comment (boolean)

    CompleterRuby.__inDoubleQuotedString

    __inDoubleQuotedString()

    Private method to check, if the cursor is within a double quoted string.

    Returns:
    flag indicating, if the cursor is inside a double quoted string (boolean)

    CompleterRuby.__inHereDocument

    __inHereDocument()

    Private method to check, if the cursor is within a here document.

    Returns:
    flag indicating, if the cursor is inside a here document (boolean)

    CompleterRuby.__inInlineDocument

    __inInlineDocument()

    Private method to check, if the cursor is within an inline document.

    Returns:
    flag indicating, if the cursor is inside an inline document (boolean)

    CompleterRuby.__inSingleQuotedString

    __inSingleQuotedString()

    Private method to check, if the cursor is within a single quoted string.

    Returns:
    flag indicating, if the cursor is inside a single quoted string (boolean)

    CompleterRuby.charAdded

    charAdded(charNumber)

    Public slot called to handle the user entering a character.

    charNumber
    value of the character entered (integer)

    CompleterRuby.readSettings

    readSettings()

    Public slot called to reread the configuration parameters.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.Plugins.DocumentationPlugins.html0000644000175000001440000000013112261331354031354 xustar000000000000000030 mtime=1388688108.658230142 29 atime=1389081085.12272436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.Plugins.DocumentationPlugins.html0000644000175000001440000000171712261331354031115 0ustar00detlevusers00000000000000 eric4.Plugins.DocumentationPlugins

    eric4.Plugins.DocumentationPlugins

    Package containing the various core documentation tool plugins.

    Packages

    Ericapi Package containing the Ericapi plugin.
    Ericdoc Package containing the Ericdoc plugin.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.CookieJar.CookiesExceptionsD0000644000175000001440000000013112261331353031230 xustar000000000000000030 mtime=1388688107.683229653 29 atime=1389081085.12272436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.CookieJar.CookiesExceptionsDialog.html0000644000175000001440000001062412261331353032745 0ustar00detlevusers00000000000000 eric4.Helpviewer.CookieJar.CookiesExceptionsDialog

    eric4.Helpviewer.CookieJar.CookiesExceptionsDialog

    Module implementing a dialog for the configuration of cookie exceptions.

    Global Attributes

    None

    Classes

    CookiesExceptionsDialog Class implementing a dialog for the configuration of cookie exceptions.

    Functions

    None


    CookiesExceptionsDialog

    Class implementing a dialog for the configuration of cookie exceptions.

    Derived from

    QDialog, Ui_CookiesExceptionsDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    CookiesExceptionsDialog Constructor
    on_allowButton_clicked Private slot to allow cookies of a domain.
    on_allowForSessionButton_clicked Private slot to allow cookies of a domain for the current session only.
    on_blockButton_clicked Private slot to block cookies of a domain.
    on_domainEdit_textChanged Private slot to handle a change of the domain edit text.
    setDomainName Public method to set the domain to be displayed.

    Static Methods

    None

    CookiesExceptionsDialog (Constructor)

    CookiesExceptionsDialog(cookieJar, parent = None)

    Constructor

    cookieJar
    reference to the cookie jar (CookieJar)
    parent
    reference to the parent widget (QWidget)

    CookiesExceptionsDialog.on_allowButton_clicked

    on_allowButton_clicked()

    Private slot to allow cookies of a domain.

    CookiesExceptionsDialog.on_allowForSessionButton_clicked

    on_allowForSessionButton_clicked()

    Private slot to allow cookies of a domain for the current session only.

    CookiesExceptionsDialog.on_blockButton_clicked

    on_blockButton_clicked()

    Private slot to block cookies of a domain.

    CookiesExceptionsDialog.on_domainEdit_textChanged

    on_domainEdit_textChanged(txt)

    Private slot to handle a change of the domain edit text.

    txt
    current text of the edit (QString)

    CookiesExceptionsDialog.setDomainName

    setDomainName(domain)

    Public method to set the domain to be displayed.

    domain
    domain name to be displayed (string or QString)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.Plugins.WizardPlugins.InputDialog0000644000175000001440000000013112261331354031256 xustar000000000000000030 mtime=1388688108.658230142 29 atime=1389081085.12272436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.Plugins.WizardPlugins.InputDialogWizard.html0000644000175000001440000000156512261331354033144 0ustar00detlevusers00000000000000 eric4.Plugins.WizardPlugins.InputDialogWizard

    eric4.Plugins.WizardPlugins.InputDialogWizard

    Package implementing the input dialog wizard.

    Modules

    InputDialogWizardDialog Module implementing the input dialog wizard dialog.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsPySvn.SvnLoginDia0000644000175000001440000000013112261331353031173 xustar000000000000000030 mtime=1388688107.261229441 29 atime=1389081085.12272436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsPySvn.SvnLoginDialog.html0000644000175000001440000000461112261331353032375 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsPySvn.SvnLoginDialog

    eric4.Plugins.VcsPlugins.vcsPySvn.SvnLoginDialog

    Module implementing the login dialog for pysvn.

    Global Attributes

    None

    Classes

    SvnLoginDialog Class implementing the login dialog for pysvn.

    Functions

    None


    SvnLoginDialog

    Class implementing the login dialog for pysvn.

    Derived from

    QDialog, Ui_SvnLoginDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnLoginDialog Constructor
    getData Public method to retrieve the login data.

    Static Methods

    None

    SvnLoginDialog (Constructor)

    SvnLoginDialog(realm, username, may_save, parent = None)

    Constructor

    realm
    name of the realm of the requested credentials (string)
    username
    username as supplied by subversion (string)
    may_save
    flag indicating, that subversion is willing to save the answers returned (boolean)

    SvnLoginDialog.getData

    getData()

    Public method to retrieve the login data.

    Returns:
    tuple of three values (username, password, save)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.Plugins.VcsPlugins.vcsPySvn.html0000644000175000001440000000013112261331354031070 xustar000000000000000030 mtime=1388688108.660230143 29 atime=1389081085.12272436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.Plugins.VcsPlugins.vcsPySvn.html0000644000175000001440000001576712261331354030643 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsPySvn

    eric4.Plugins.VcsPlugins.vcsPySvn

    Package implementing the vcs interface to Subversion

    It consists of the subversion class, the project helper classes and some Subversion specific dialogs. This package is based upon the pysvn interface.

    Packages

    ConfigurationPage Package implementing the the subversion configuration page.

    Modules

    Config Module defining configuration variables for the subversion package
    ProjectBrowserHelper Module implementing the VCS project browser helper for subversion.
    ProjectHelper Module implementing the VCS project helper for Subversion.
    SvnBlameDialog Module implementing a dialog to show the output of the svn blame command.
    SvnChangeListsDialog Module implementing a dialog to browse the change lists.
    SvnCommandDialog Module implementing the Subversion command dialog.
    SvnCommitDialog Module implementing a dialog to enter the commit message.
    SvnConst Module implementing some constants for the pysvn package.
    SvnCopyDialog Module implementing a dialog to enter the data for a copy operation.
    SvnDialog Module implementing a dialog to show the output of a pysvn action.
    SvnDialogMixin Module implementing a dialog mixin class providing common callback methods for the pysvn client.
    SvnDiffDialog Module implementing a dialog to show the output of the svn diff command process.
    SvnInfoDialog Module implementing a dialog to show repository related information for a file/directory.
    SvnLogBrowserDialog Module implementing a dialog to browse the log history.
    SvnLogDialog Module implementing a dialog to show the output of the svn log command process.
    SvnLoginDialog Module implementing the login dialog for pysvn.
    SvnMergeDialog Module implementing a dialog to enter the data for a merge operation.
    SvnNewProjectOptionsDialog Module implementing the Subversion Options Dialog for a new project from the repository.
    SvnOptionsDialog Module implementing a dialog to enter options used to start a project in the VCS.
    SvnPropDelDialog Module implementing a dialog to enter the data for a new property.
    SvnPropListDialog Module implementing a dialog to show the output of the svn proplist command process.
    SvnPropSetDialog Module implementing a dialog to enter the data for a new property.
    SvnRelocateDialog Module implementing a dialog to enter the data to relocate the workspace.
    SvnRepoBrowserDialog Module implementing the subversion repository browser dialog.
    SvnRevisionSelectionDialog Module implementing a dialog to enter the revisions for the svn diff command.
    SvnStatusDialog Module implementing a dialog to show the output of the svn status command process.
    SvnStatusMonitorThread Module implementing the VCS status monitor thread class for Subversion.
    SvnSwitchDialog Module implementing a dialog to enter the data for a switch operation.
    SvnTagBranchListDialog Module implementing a dialog to show a list of tags or branches.
    SvnTagDialog Module implementing a dialog to enter the data for a tagging operation.
    SvnUrlSelectionDialog Module implementing a dialog to enter the URLs for the svn diff command.
    SvnUtilities Module implementing some common utility functions for the pysvn package.
    subversion Module implementing the version control systems interface to Subversion.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.SqlBrowser.SqlBrowser.html0000644000175000001440000000013112261331351026656 xustar000000000000000030 mtime=1388688105.616228615 29 atime=1389081085.12272436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.SqlBrowser.SqlBrowser.html0000644000175000001440000000717312261331351026421 0ustar00detlevusers00000000000000 eric4.SqlBrowser.SqlBrowser

    eric4.SqlBrowser.SqlBrowser

    Module implementing the SQL Browser main window.

    Global Attributes

    None

    Classes

    SqlBrowser Class implementing the SQL Browser main window.

    Functions

    None


    SqlBrowser

    Class implementing the SQL Browser main window.

    Derived from

    KQMainWindow

    Class Attributes

    None

    Class Methods

    None

    Methods

    SqlBrowser Constructor
    __about Private slot to show the about information.
    __aboutQt Private slot to show info about Qt.
    __initActions Private method to define the user interface actions.
    __initMenus Private method to create the menus.
    __initToolbars Private method to create the toolbars.
    __uiStartUp Private slot to do some actions after the UI has started and the main loop is up.

    Static Methods

    None

    SqlBrowser (Constructor)

    SqlBrowser(connections = [], parent = None)

    Constructor

    connections
    list of database connections to add (list of strings)
    reference
    to the parent widget (QWidget)

    SqlBrowser.__about

    __about()

    Private slot to show the about information.

    SqlBrowser.__aboutQt

    __aboutQt()

    Private slot to show info about Qt.

    SqlBrowser.__initActions

    __initActions()

    Private method to define the user interface actions.

    SqlBrowser.__initMenus

    __initMenus()

    Private method to create the menus.

    SqlBrowser.__initToolbars

    __initToolbars()

    Private method to create the toolbars.

    SqlBrowser.__uiStartUp

    __uiStartUp()

    Private slot to do some actions after the UI has started and the main loop is up.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.WizardPlugins.QRegExpWizard.QRe0000644000175000001440000000032612261331353031121 xustar0000000000000000125 path=eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.WizardPlugins.QRegExpWizard.QRegExpWizardCharactersDialog.html 30 mtime=1388688107.303229462 29 atime=1389081085.12372436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.WizardPlugins.QRegExpWizard.QRegExpWizardCharac0000644000175000001440000001377512261331353033772 0ustar00detlevusers00000000000000 eric4.Plugins.WizardPlugins.QRegExpWizard.QRegExpWizardCharactersDialog

    eric4.Plugins.WizardPlugins.QRegExpWizard.QRegExpWizardCharactersDialog

    Module implementing a dialog for entering character classes.

    Global Attributes

    None

    Classes

    QRegExpWizardCharactersDialog Class implementing a dialog for entering character classes.

    Functions

    None


    QRegExpWizardCharactersDialog

    Class implementing a dialog for entering character classes.

    Derived from

    QDialog, Ui_QRegExpWizardCharactersDialog

    Class Attributes

    predefinedClasses
    specialChars

    Class Methods

    None

    Methods

    QRegExpWizardCharactersDialog Constructor
    __addRangesLine Private slot to add a line of entry widgets for character ranges.
    __addSinglesLine Private slot to add a line of entry widgets for single characters.
    __formatCharacter Private method to format the characters entered into the dialog.
    __performSelectedAction Private method performing some actions depending on the input.
    __rangesCharTypeSelected Private slot to handle the activated(int) signal of the char ranges combo boxes.
    __singlesCharTypeSelected Private slot to handle the activated(int) signal of the single chars combo boxes.
    getCharacters Public method to return the character string assembled via the dialog.

    Static Methods

    None

    QRegExpWizardCharactersDialog (Constructor)

    QRegExpWizardCharactersDialog(parent = None)

    Constructor

    parent
    parent widget (QWidget)

    QRegExpWizardCharactersDialog.__addRangesLine

    __addRangesLine()

    Private slot to add a line of entry widgets for character ranges.

    QRegExpWizardCharactersDialog.__addSinglesLine

    __addSinglesLine()

    Private slot to add a line of entry widgets for single characters.

    QRegExpWizardCharactersDialog.__formatCharacter

    __formatCharacter(index, char)

    Private method to format the characters entered into the dialog.

    index
    selected list index (integer)
    char
    character string enetered into the dialog (string)
    Returns:
    formated character string (string)

    QRegExpWizardCharactersDialog.__performSelectedAction

    __performSelectedAction(index, lineedit)

    Private method performing some actions depending on the input.

    index
    selected list index (integer)
    lineedit
    line edit widget to act on (QLineEdit)

    QRegExpWizardCharactersDialog.__rangesCharTypeSelected

    __rangesCharTypeSelected(index)

    Private slot to handle the activated(int) signal of the char ranges combo boxes.

    index
    selected list index (integer)

    QRegExpWizardCharactersDialog.__singlesCharTypeSelected

    __singlesCharTypeSelected(index)

    Private slot to handle the activated(int) signal of the single chars combo boxes.

    index
    selected list index (integer)

    QRegExpWizardCharactersDialog.getCharacters

    getCharacters()

    Public method to return the character string assembled via the dialog.

    Returns:
    formatted string for character classes (string)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.ViewManagerPlugins.MdiArea.MdiA0000644000175000001440000000013112261331352031010 xustar000000000000000030 mtime=1388688106.754229186 29 atime=1389081085.12372436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.ViewManagerPlugins.MdiArea.MdiArea.html0000644000175000001440000002410612261331352032201 0ustar00detlevusers00000000000000 eric4.Plugins.ViewManagerPlugins.MdiArea.MdiArea

    eric4.Plugins.ViewManagerPlugins.MdiArea.MdiArea

    Module implementing the mdi area viewmanager class.

    Global Attributes

    None

    Classes

    MdiArea Class implementing the mdi area viewmanager class.

    Functions

    None


    MdiArea

    Class implementing the mdi area viewmanager class.

    Signals

    editorChanged(string)
    emitted when the current editor has changed

    Derived from

    QMdiArea, ViewManager

    Class Attributes

    None

    Class Methods

    None

    Methods

    MdiArea Constructor
    __iconizeAllWindows Private slot to iconize all windows.
    __restoreAllWindows Private slot to restore all windows.
    __setSubWindowIcon Private method to set the icon of a subwindow given its internal widget.
    __subWindowActivated Private slot to handle the windowActivated signal.
    _addView Protected method to add a view (i.e.
    _initWindowActions Protected method to define the user interface actions for window handling.
    _modificationStatusChanged Protected slot to handle the modificationStatusChanged signal.
    _removeAllViews Protected method to remove all views (i.e.
    _removeView Protected method to remove a view (i.e.
    _showView Private method to show a view (i.e.
    _syntaxErrorToggled Protected slot to handle the syntaxerrorToggled signal.
    activeWindow Private method to return the active (i.e.
    canCascade Public method to signal if cascading of managed windows is available.
    canSplit public method to signal if splitting of the view is available.
    canTile Public method to signal if tiling of managed windows is available.
    cascade Public method to cascade the managed windows.
    eventFilter Public method called to filter the event queue.
    setEditorName Public method to change the displayed name of the editor.
    showWindowMenu Public method to set up the viewmanager part of the Window menu.
    tile Public method to tile the managed windows.

    Static Methods

    None

    MdiArea (Constructor)

    MdiArea(parent)

    Constructor

    parent
    parent widget (QWidget)
    ui
    reference to the main user interface
    dbs
    reference to the debug server object

    MdiArea.__iconizeAllWindows

    __iconizeAllWindows()

    Private slot to iconize all windows.

    MdiArea.__restoreAllWindows

    __restoreAllWindows()

    Private slot to restore all windows.

    MdiArea.__setSubWindowIcon

    __setSubWindowIcon(widget, icon)

    Private method to set the icon of a subwindow given its internal widget.

    widget
    reference to the internal widget (QWidget)
    icon
    reference to the icon (QIcon)

    MdiArea.__subWindowActivated

    __subWindowActivated(subWindow)

    Private slot to handle the windowActivated signal.

    subWindow
    the activated subwindow (QMdiSubWindow)

    MdiArea._addView

    _addView(win, fn = None, noName = "")

    Protected method to add a view (i.e. window)

    win
    editor window to be added
    fn
    filename of this editor
    noName
    name to be used for an unnamed editor (string or QString)

    MdiArea._initWindowActions

    _initWindowActions()

    Protected method to define the user interface actions for window handling.

    MdiArea._modificationStatusChanged

    _modificationStatusChanged(m, editor)

    Protected slot to handle the modificationStatusChanged signal.

    m
    flag indicating the modification status (boolean)
    editor
    editor window changed

    MdiArea._removeAllViews

    _removeAllViews()

    Protected method to remove all views (i.e. windows)

    MdiArea._removeView

    _removeView(win)

    Protected method to remove a view (i.e. window)

    win
    editor window to be removed

    MdiArea._showView

    _showView(win, fn = None)

    Private method to show a view (i.e. window)

    win
    editor window to be shown
    fn
    filename of this editor

    MdiArea._syntaxErrorToggled

    _syntaxErrorToggled(editor)

    Protected slot to handle the syntaxerrorToggled signal.

    editor
    editor that sent the signal

    MdiArea.activeWindow

    activeWindow()

    Private method to return the active (i.e. current) window.

    Returns:
    reference to the active editor

    MdiArea.canCascade

    canCascade()

    Public method to signal if cascading of managed windows is available.

    Returns:
    flag indicating cascading of windows is available

    MdiArea.canSplit

    canSplit()

    public method to signal if splitting of the view is available.

    Returns:
    flag indicating splitting of the view is available.

    MdiArea.canTile

    canTile()

    Public method to signal if tiling of managed windows is available.

    Returns:
    flag indicating tiling of windows is available

    MdiArea.cascade

    cascade()

    Public method to cascade the managed windows.

    MdiArea.eventFilter

    eventFilter(watched, event)

    Public method called to filter the event queue.

    watched
    the QObject being watched
    event
    the event that occurred
    Returns:
    flag indicating, whether the event was handled (boolean)

    MdiArea.setEditorName

    setEditorName(editor, newName)

    Public method to change the displayed name of the editor.

    editor
    editor window to be changed
    newName
    new name to be shown (string or QString)

    MdiArea.showWindowMenu

    showWindowMenu(windowMenu)

    Public method to set up the viewmanager part of the Window menu.

    windowMenu
    reference to the window menu

    MdiArea.tile

    tile()

    Public method to tile the managed windows.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.KdeQt.KQMainWindow.html0000644000175000001440000000013112261331351025770 xustar000000000000000030 mtime=1388688105.536228575 29 atime=1389081085.12372436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.KdeQt.KQMainWindow.html0000644000175000001440000000622712261331351025532 0ustar00detlevusers00000000000000 eric4.KdeQt.KQMainWindow

    eric4.KdeQt.KQMainWindow

    Compatibility module to use the KDE main window instead of the Qt main window.

    Global Attributes

    None

    Classes

    KQMainWindow Compatibility class for the main window.
    KQMainWindow Compatibility class for the main window.
    __kdeKQMainWindow Compatibility class to use KMainWindow.
    __qtKQMainWindow Compatibility class to use QMainWindow.

    Functions

    None


    KQMainWindow

    Compatibility class for the main window.

    Derived from

    __kdeKQMainWindow

    Class Attributes

    None

    Class Methods

    None

    Methods

    None

    Static Methods

    None


    KQMainWindow

    Compatibility class for the main window.

    Derived from

    __qtKQMainWindow

    Class Attributes

    None

    Class Methods

    None

    Methods

    None

    Static Methods

    None


    __kdeKQMainWindow

    Compatibility class to use KMainWindow.

    Derived from

    KMainWindow

    Class Attributes

    None

    Class Methods

    None

    Methods

    None

    Static Methods

    None


    __qtKQMainWindow

    Compatibility class to use QMainWindow.

    Derived from

    QMainWindow

    Class Attributes

    None

    Class Methods

    None

    Methods

    None

    Static Methods

    None

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.Exporters.ExporterRTF.html0000644000175000001440000000013112261331354030674 xustar000000000000000030 mtime=1388688108.464230045 29 atime=1389081085.12372436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.Exporters.ExporterRTF.html0000644000175000001440000001017512261331354030433 0ustar00detlevusers00000000000000 eric4.QScintilla.Exporters.ExporterRTF

    eric4.QScintilla.Exporters.ExporterRTF

    Module implementing an exporter for RTF.

    Global Attributes

    None

    Classes

    ExporterRTF Class implementing an exporter for RTF.

    Functions

    None


    ExporterRTF

    Class implementing an exporter for RTF.

    Derived from

    ExporterBase

    Class Attributes

    RTF_BODYCLOSE
    RTF_BODYOPEN
    RTF_BOLD_OFF
    RTF_BOLD_ON
    RTF_COLOR
    RTF_COLORDEF
    RTF_COLORDEFCLOSE
    RTF_COLORDEFOPEN
    RTF_COMMENT
    RTF_CREATED
    RTF_EOLN
    RTF_FONTDEF
    RTF_FONTDEFCLOSE
    RTF_FONTDEFOPEN
    RTF_HEADERCLOSE
    RTF_HEADEROPEN
    RTF_INFOCLOSE
    RTF_INFOOPEN
    RTF_ITALIC_OFF
    RTF_ITALIC_ON
    RTF_SETBACKGROUND
    RTF_SETCOLOR
    RTF_SETFONTFACE
    RTF_SETFONTSIZE
    RTF_TAB

    Class Methods

    None

    Methods

    ExporterRTF Constructor
    __GetRTFNextControl Private method to extract the next RTF control word from style.
    __GetRTFStyleChange Private method to extract control words that are different between two styles.
    exportSource Public method performing the export.

    Static Methods

    None

    ExporterRTF (Constructor)

    ExporterRTF(editor, parent = None)

    Constructor

    editor
    reference to the editor object (QScintilla.Editor.Editor)
    parent
    parent object of the exporter (QObject)

    ExporterRTF.__GetRTFNextControl

    __GetRTFNextControl(pos, style)

    Private method to extract the next RTF control word from style.

    pos
    position to start search (integer)
    style
    style definition to search in (string)
    Returns:
    tuple of new start position and control word found (integer, string)

    ExporterRTF.__GetRTFStyleChange

    __GetRTFStyleChange(last, current)

    Private method to extract control words that are different between two styles.

    last
    least recently used style (string)
    current
    current style (string)
    Returns:
    string containing the delta between these styles (string)

    ExporterRTF.exportSource

    exportSource()

    Public method performing the export.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Utilities.ClassBrowsers.__init__.html0000644000175000001440000000013112261331354030760 xustar000000000000000030 mtime=1388688108.368229996 29 atime=1389081085.12472436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Utilities.ClassBrowsers.__init__.html0000644000175000001440000000560412261331354030520 0ustar00detlevusers00000000000000 eric4.Utilities.ClassBrowsers.__init__

    eric4.Utilities.ClassBrowsers.__init__

    Package implementing class browsers for various languages.

    Currently it offers class browser support for the following programming languages.

    • CORBA IDL
    • Python
    • Ruby

    Global Attributes

    IDL_SOURCE
    PTL_SOURCE
    PY_SOURCE
    RB_SOURCE
    SUPPORTED_TYPES
    __extensions

    Classes

    None

    Functions

    find_module Module function to extend the Python module finding mechanism.
    readmodule Read a source file and return a dictionary of classes, functions, modules, etc.


    find_module

    find_module(name, path, isPyFile = False)

    Module function to extend the Python module finding mechanism.

    This function searches for files in the given path. If the filename doesn't have an extension or an extension of .py, the normal search implemented in the imp module is used. For all other supported files only path is searched.

    name
    filename or modulename to search for (string)
    path
    search path (list of strings)
    Returns:
    tuple of the open file, pathname and description. Description is a tuple of file suffix, file mode and file type)
    Raises ImportError:
    The file or module wasn't found.


    readmodule

    readmodule(module, path=[], isPyFile = False)

    Read a source file and return a dictionary of classes, functions, modules, etc. .

    The real work of parsing the source file is delegated to the individual file parsers.

    module
    name of the source file (string)
    path
    path the file should be searched in (list of strings)
    Returns:
    the resulting dictionary

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DebugClients.Ruby.Config.html0000644000175000001440000000013112261331354027150 xustar000000000000000030 mtime=1388688108.294229959 29 atime=1389081085.12472436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.DebugClients.Ruby.Config.html0000644000175000001440000000161412261331354026705 0ustar00detlevusers00000000000000 eric4.DebugClients.Ruby.Config

    eric4.DebugClients.Ruby.Config

    File defining the different Ruby types

    Global Attributes

    ConfigVarTypeStrings

    Classes

    None

    Modules

    None

    Functions

    None

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.Lexers.LexerHTML.html0000644000175000001440000000013112261331354027523 xustar000000000000000030 mtime=1388688108.629230127 29 atime=1389081085.12572436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.Lexers.LexerHTML.html0000644000175000001440000000653312261331354027265 0ustar00detlevusers00000000000000 eric4.QScintilla.Lexers.LexerHTML

    eric4.QScintilla.Lexers.LexerHTML

    Module implementing a HTML lexer with some additional methods.

    Global Attributes

    None

    Classes

    LexerHTML Subclass to implement some additional lexer dependant methods.

    Functions

    None


    LexerHTML

    Subclass to implement some additional lexer dependant methods.

    Derived from

    QsciLexerHTML, Lexer

    Class Attributes

    None

    Class Methods

    None

    Methods

    LexerHTML Constructor
    defaultKeywords Public method to get the default keywords.
    initProperties Public slot to initialize the properties.
    isCommentStyle Public method to check, if a style is a comment style.
    isStringStyle Public method to check, if a style is a string style.

    Static Methods

    None

    LexerHTML (Constructor)

    LexerHTML(parent=None)

    Constructor

    parent
    parent widget of this lexer

    LexerHTML.defaultKeywords

    defaultKeywords(kwSet)

    Public method to get the default keywords.

    kwSet
    number of the keyword set (integer)
    Returns:
    string giving the keywords (string) or None

    LexerHTML.initProperties

    initProperties()

    Public slot to initialize the properties.

    LexerHTML.isCommentStyle

    isCommentStyle(style)

    Public method to check, if a style is a comment style.

    Returns:
    flag indicating a comment style (boolean)

    LexerHTML.isStringStyle

    isStringStyle(style)

    Public method to check, if a style is a string style.

    Returns:
    flag indicating a string style (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsPySvn.SvnDialogMi0000644000175000001440000000013112261331353031172 xustar000000000000000030 mtime=1388688107.030229325 29 atime=1389081085.12572436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsPySvn.SvnDialogMixin.html0000644000175000001440000001307212261331353032412 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsPySvn.SvnDialogMixin

    eric4.Plugins.VcsPlugins.vcsPySvn.SvnDialogMixin

    Module implementing a dialog mixin class providing common callback methods for the pysvn client.

    Global Attributes

    None

    Classes

    SvnDialogMixin Class implementing a dialog mixin providing common callback methods for the pysvn client.

    Functions

    None


    SvnDialogMixin

    Class implementing a dialog mixin providing common callback methods for the pysvn client.

    Derived from

    object

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnDialogMixin Constructor
    _cancel Protected method to request a cancellation of the current action.
    _clientCancelCallback Protected method called by the client to check for cancellation.
    _clientLogCallback Protected method called by the client to request a log message.
    _clientLoginCallback Protected method called by the client to get login information.
    _clientSslServerTrustPromptCallback Protected method called by the client to request acceptance for a ssl server certificate.
    _reset Protected method to reset the internal state of the dialog.

    Static Methods

    None

    SvnDialogMixin (Constructor)

    SvnDialogMixin(log = "")

    Constructor

    log
    optional log message (string or QString)

    SvnDialogMixin._cancel

    _cancel()

    Protected method to request a cancellation of the current action.

    SvnDialogMixin._clientCancelCallback

    _clientCancelCallback()

    Protected method called by the client to check for cancellation.

    Returns:
    flag indicating a cancellation

    SvnDialogMixin._clientLogCallback

    _clientLogCallback()

    Protected method called by the client to request a log message.

    Returns:
    a flag indicating success and the log message (string)

    SvnDialogMixin._clientLoginCallback

    _clientLoginCallback(realm, username, may_save)

    Protected method called by the client to get login information.

    realm
    name of the realm of the requested credentials (string)
    username
    username as supplied by subversion (string)
    may_save
    flag indicating, that subversion is willing to save the answers returned (boolean)
    Returns:
    tuple of four values (retcode, username, password, save). Retcode should be True, if username and password should be used by subversion, username and password contain the relevant data as strings and save is a flag indicating, that username and password should be saved.

    SvnDialogMixin._clientSslServerTrustPromptCallback

    _clientSslServerTrustPromptCallback(trust_dict)

    Protected method called by the client to request acceptance for a ssl server certificate.

    trust_dict
    dictionary containing the trust data
    Returns:
    tuple of three values (retcode, acceptedFailures, save). Retcode should be true, if the certificate should be accepted, acceptedFailures should indicate the accepted certificate failures and save should be True, if subversion should save the certificate.

    SvnDialogMixin._reset

    _reset()

    Protected method to reset the internal state of the dialog.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsSubversion.SvnPro0000644000175000001440000000012712261331352031331 xustar000000000000000028 mtime=1388688106.9802293 29 atime=1389081085.12572436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsSubversion.SvnPropListDialog.html0000644000175000001440000001477312261331352034172 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsSubversion.SvnPropListDialog

    eric4.Plugins.VcsPlugins.vcsSubversion.SvnPropListDialog

    Module implementing a dialog to show the output of the svn proplist command process.

    Global Attributes

    None

    Classes

    SvnPropListDialog Class implementing a dialog to show the output of the svn proplist command process.

    Functions

    None


    SvnPropListDialog

    Class implementing a dialog to show the output of the svn proplist command process.

    Derived from

    QWidget, Ui_SvnPropListDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnPropListDialog Constructor
    __finish Private slot called when the process finished or the user pressed the button.
    __generateItem Private method to generate a properties item in the properties list.
    __procFinished Private slot connected to the finished signal.
    __readStderr Private slot to handle the readyReadStandardError signal.
    __readStdout Private slot to handle the readyReadStandardOutput signal.
    __resizeColumns Private method to resize the list columns.
    __resort Private method to resort the tree.
    closeEvent Private slot implementing a close event handler.
    on_buttonBox_clicked Private slot called by a button of the button box clicked.
    start Public slot to start the svn status command.

    Static Methods

    None

    SvnPropListDialog (Constructor)

    SvnPropListDialog(vcs, parent = None)

    Constructor

    vcs
    reference to the vcs object
    parent
    parent widget (QWidget)

    SvnPropListDialog.__finish

    __finish()

    Private slot called when the process finished or the user pressed the button.

    SvnPropListDialog.__generateItem

    __generateItem(path, propName, propValue)

    Private method to generate a properties item in the properties list.

    path
    file/directory name the property applies to (string or QString)
    propName
    name of the property (string or QString)
    propValue
    value of the property (string or QString)

    SvnPropListDialog.__procFinished

    __procFinished(exitCode, exitStatus)

    Private slot connected to the finished signal.

    exitCode
    exit code of the process (integer)
    exitStatus
    exit status of the process (QProcess.ExitStatus)

    SvnPropListDialog.__readStderr

    __readStderr()

    Private slot to handle the readyReadStandardError signal.

    It reads the error output of the process and inserts it into the error pane.

    SvnPropListDialog.__readStdout

    __readStdout()

    Private slot to handle the readyReadStandardOutput signal.

    It reads the output of the process, formats it and inserts it into the contents pane.

    SvnPropListDialog.__resizeColumns

    __resizeColumns()

    Private method to resize the list columns.

    SvnPropListDialog.__resort

    __resort()

    Private method to resort the tree.

    SvnPropListDialog.closeEvent

    closeEvent(e)

    Private slot implementing a close event handler.

    e
    close event (QCloseEvent)

    SvnPropListDialog.on_buttonBox_clicked

    on_buttonBox_clicked(button)

    Private slot called by a button of the button box clicked.

    button
    button that was clicked (QAbstractButton)

    SvnPropListDialog.start

    start(fn, recursive = False)

    Public slot to start the svn status command.

    fn
    filename(s) (string or list of string)
    recursive
    flag indicating a recursive list is requested

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.WizardPlugins.PyRegExpWizard.Py0000644000175000001440000000033012261331353031205 xustar0000000000000000127 path=eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.WizardPlugins.PyRegExpWizard.PyRegExpWizardCharactersDialog.html 30 mtime=1388688107.347229484 29 atime=1389081085.12572436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.WizardPlugins.PyRegExpWizard.PyRegExpWizardChar0000644000175000001440000001405112261331353034032 0ustar00detlevusers00000000000000 eric4.Plugins.WizardPlugins.PyRegExpWizard.PyRegExpWizardCharactersDialog

    eric4.Plugins.WizardPlugins.PyRegExpWizard.PyRegExpWizardCharactersDialog

    Module implementing a dialog for entering character classes.

    Global Attributes

    None

    Classes

    PyRegExpWizardCharactersDialog Class implementing a dialog for entering character classes.

    Functions

    None


    PyRegExpWizardCharactersDialog

    Class implementing a dialog for entering character classes.

    Derived from

    QDialog, Ui_PyRegExpWizardCharactersDialog

    Class Attributes

    predefinedClasses
    specialChars

    Class Methods

    None

    Methods

    PyRegExpWizardCharactersDialog Constructor
    __addRangesLine Private slot to add a line of entry widgets for character ranges.
    __addSinglesLine Private slot to add a line of entry widgets for single characters.
    __formatCharacter Private method to format the characters entered into the dialog.
    __performSelectedAction Private method performing some actions depending on the input.
    __rangesCharTypeSelected Private slot to handle the activated(int) signal of the char ranges combo boxes.
    __singlesCharTypeSelected Private slot to handle the activated(int) signal of the single chars combo boxes.
    getCharacters Public method to return the character string assembled via the dialog.

    Static Methods

    None

    PyRegExpWizardCharactersDialog (Constructor)

    PyRegExpWizardCharactersDialog(parent = None)

    Constructor

    parent
    parent widget (QWidget)

    PyRegExpWizardCharactersDialog.__addRangesLine

    __addRangesLine()

    Private slot to add a line of entry widgets for character ranges.

    PyRegExpWizardCharactersDialog.__addSinglesLine

    __addSinglesLine()

    Private slot to add a line of entry widgets for single characters.

    PyRegExpWizardCharactersDialog.__formatCharacter

    __formatCharacter(index, char)

    Private method to format the characters entered into the dialog.

    index
    selected list index (integer)
    char
    character string enetered into the dialog (string)
    Returns:
    formated character string (string)

    PyRegExpWizardCharactersDialog.__performSelectedAction

    __performSelectedAction(index, lineedit)

    Private method performing some actions depending on the input.

    index
    selected list index (integer)
    lineedit
    line edit widget to act on (QLineEdit)

    PyRegExpWizardCharactersDialog.__rangesCharTypeSelected

    __rangesCharTypeSelected(index)

    Private slot to handle the activated(int) signal of the char ranges combo boxes.

    index
    selected list index (integer)

    PyRegExpWizardCharactersDialog.__singlesCharTypeSelected

    __singlesCharTypeSelected(index)

    Private slot to handle the activated(int) signal of the single chars combo boxes.

    index
    selected list index (integer)

    PyRegExpWizardCharactersDialog.getCharacters

    getCharacters()

    Public method to return the character string assembled via the dialog.

    Returns:
    formatted string for character classes (string)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.Plugins.CheckerPlugins.SyntaxChec0000644000175000001440000000013112261331354031214 xustar000000000000000030 mtime=1388688108.661230144 29 atime=1389081085.12572436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.Plugins.CheckerPlugins.SyntaxChecker.html0000644000175000001440000000154412261331354032420 0ustar00detlevusers00000000000000 eric4.Plugins.CheckerPlugins.SyntaxChecker

    eric4.Plugins.CheckerPlugins.SyntaxChecker

    Package containing the Syntax Checker plugin.

    Modules

    SyntaxCheckerDialog Module implementing a simple Python syntax checker.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Debugger.DebugProtocol.html0000644000175000001440000000013112261331350026743 xustar000000000000000030 mtime=1388688104.757228183 29 atime=1389081085.12672436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Debugger.DebugProtocol.html0000644000175000001440000000542312261331350026502 0ustar00detlevusers00000000000000 eric4.Debugger.DebugProtocol

    eric4.Debugger.DebugProtocol

    Module defining the debug protocol tokens.

    Global Attributes

    EOT
    PassiveStartup
    RequestBanner
    RequestBreak
    RequestBreakEnable
    RequestBreakIgnore
    RequestCapabilities
    RequestCompletion
    RequestContinue
    RequestCoverage
    RequestEnv
    RequestEval
    RequestExec
    RequestForkMode
    RequestForkTo
    RequestLoad
    RequestOK
    RequestProfile
    RequestRun
    RequestSetFilter
    RequestShutdown
    RequestStep
    RequestStepOut
    RequestStepOver
    RequestStepQuit
    RequestThreadList
    RequestThreadSet
    RequestUTPrepare
    RequestUTRun
    RequestUTStop
    RequestVariable
    RequestVariables
    RequestWatch
    RequestWatchEnable
    RequestWatchIgnore
    ResponseBPConditionError
    ResponseBanner
    ResponseCapabilities
    ResponseClearBreak
    ResponseClearWatch
    ResponseCompletion
    ResponseContinue
    ResponseException
    ResponseExit
    ResponseForkTo
    ResponseLine
    ResponseOK
    ResponseRaw
    ResponseStack
    ResponseSyntax
    ResponseThreadList
    ResponseThreadSet
    ResponseUTFinished
    ResponseUTPrepared
    ResponseUTStartTest
    ResponseUTStopTest
    ResponseUTTestErrored
    ResponseUTTestFailed
    ResponseVariable
    ResponseVariables
    ResponseWPConditionError

    Classes

    None

    Functions

    None

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.ShellHistoryDialog.html0000644000175000001440000000013112261331352030265 xustar000000000000000030 mtime=1388688106.193228904 29 atime=1389081085.12672436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.ShellHistoryDialog.html0000644000175000001440000001214312261331352030021 0ustar00detlevusers00000000000000 eric4.QScintilla.ShellHistoryDialog

    eric4.QScintilla.ShellHistoryDialog

    Module implementing the shell history dialog.

    Global Attributes

    None

    Classes

    ShellHistoryDialog Class implementing the shell history dialog.

    Functions

    None


    ShellHistoryDialog

    Class implementing the shell history dialog.

    Derived from

    QDialog, Ui_ShellHistoryDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    ShellHistoryDialog Constructor
    getHistory Public method to retrieve the history from the dialog.
    on_copyButton_clicked Private slot to copy the selected entries to the current editor.
    on_deleteButton_clicked Private slot to delete the selected entries from the history.
    on_executeButton_clicked Private slot to execute the selected entries in the shell.
    on_historyList_itemDoubleClicked Private slot to handle a double click of an item.
    on_historyList_itemSelectionChanged Private slot to handle a change of the selection.
    on_reloadButton_clicked Private slot to reload the history.

    Static Methods

    None

    ShellHistoryDialog (Constructor)

    ShellHistoryDialog(history, vm, shell)

    Constructor

    history
    reference to the current shell history (QStringList)
    vm
    reference to the viewmanager object
    shell
    reference to the shell object

    ShellHistoryDialog.getHistory

    getHistory()

    Public method to retrieve the history from the dialog.

    Returns:
    list of history entries (QStringList)

    ShellHistoryDialog.on_copyButton_clicked

    on_copyButton_clicked()

    Private slot to copy the selected entries to the current editor.

    ShellHistoryDialog.on_deleteButton_clicked

    on_deleteButton_clicked()

    Private slot to delete the selected entries from the history.

    ShellHistoryDialog.on_executeButton_clicked

    on_executeButton_clicked()

    Private slot to execute the selected entries in the shell.

    ShellHistoryDialog.on_historyList_itemDoubleClicked

    on_historyList_itemDoubleClicked(item)

    Private slot to handle a double click of an item.

    item
    reference to the item that was double clicked (QListWidgetItem)

    ShellHistoryDialog.on_historyList_itemSelectionChanged

    on_historyList_itemSelectionChanged()

    Private slot to handle a change of the selection.

    ShellHistoryDialog.on_reloadButton_clicked

    on_reloadButton_clicked()

    Private slot to reload the history.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ConfigurationPages.EditorGe0000644000175000001440000000013112261331353031240 xustar000000000000000030 mtime=1388688107.551229586 29 atime=1389081085.12672436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.EditorGeneralPage.html0000644000175000001440000000601112261331353033553 0ustar00detlevusers00000000000000 eric4.Preferences.ConfigurationPages.EditorGeneralPage

    eric4.Preferences.ConfigurationPages.EditorGeneralPage

    Module implementing the Editor General configuration page.

    Global Attributes

    None

    Classes

    EditorGeneralPage Class implementing the Editor General configuration page.

    Functions

    create Module function to create the configuration page.


    EditorGeneralPage

    Class implementing the Editor General configuration page.

    Derived from

    ConfigurationPageBase, Ui_EditorGeneralPage

    Class Attributes

    None

    Class Methods

    None

    Methods

    EditorGeneralPage Constructor
    on_tabforindentationCheckBox_toggled Private slot used to set the tab conversion check box.
    save Public slot to save the Editor General configuration.

    Static Methods

    None

    EditorGeneralPage (Constructor)

    EditorGeneralPage()

    Constructor

    EditorGeneralPage.on_tabforindentationCheckBox_toggled

    on_tabforindentationCheckBox_toggled(checked)

    Private slot used to set the tab conversion check box.

    checked
    flag received from the signal (boolean)

    EditorGeneralPage.save

    save()

    Public slot to save the Editor General configuration.



    create

    create(dlg)

    Module function to create the configuration page.

    dlg
    reference to the configuration dialog

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.Plugins.ViewManagerPlugins.MdiAre0000644000175000001440000000013112261331354031145 xustar000000000000000030 mtime=1388688108.658230142 29 atime=1389081085.12672436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.Plugins.ViewManagerPlugins.MdiArea.html0000644000175000001440000000151512261331354032006 0ustar00detlevusers00000000000000 eric4.Plugins.ViewManagerPlugins.MdiArea

    eric4.Plugins.ViewManagerPlugins.MdiArea

    Package containing the mdi area view manager plugin.

    Modules

    MdiArea Module implementing the mdi area viewmanager class.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.Plugins.ViewManagerPlugins.Worksp0000644000175000001440000000013112261331354031271 xustar000000000000000030 mtime=1388688108.661230144 29 atime=1389081085.12772436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.Plugins.ViewManagerPlugins.Workspace.html0000644000175000001440000000153112261331354032440 0ustar00detlevusers00000000000000 eric4.Plugins.ViewManagerPlugins.Workspace

    eric4.Plugins.ViewManagerPlugins.Workspace

    Package containing the workspace view manager plugin.

    Modules

    Workspace Module implementing the workspace viewmanager class.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.JavaScriptResources.html0000644000175000001440000000013112261331351030523 xustar000000000000000030 mtime=1388688105.430228521 29 atime=1389081085.12772436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.JavaScriptResources.html0000644000175000001440000000156712261331351030267 0ustar00detlevusers00000000000000 eric4.Helpviewer.JavaScriptResources

    eric4.Helpviewer.JavaScriptResources

    Module containing some HTML resources.

    Global Attributes

    fetchLinks_js
    parseForms_js

    Classes

    None

    Functions

    None

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ViewProfileDialog.html0000644000175000001440000000013112261331350030263 xustar000000000000000030 mtime=1388688104.589228099 29 atime=1389081085.12772436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ViewProfileDialog.html0000644000175000001440000000540412261331350030021 0ustar00detlevusers00000000000000 eric4.Preferences.ViewProfileDialog

    eric4.Preferences.ViewProfileDialog

    Module implementing a dialog to configure the various view profiles.

    Global Attributes

    None

    Classes

    ViewProfileDialog Class implementing a dialog to configure the various view profiles.

    Functions

    None


    ViewProfileDialog

    Class implementing a dialog to configure the various view profiles.

    Derived from

    QDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    ViewProfileDialog Constructor
    getProfiles Public method to retrieve the configured profiles.

    Static Methods

    None

    ViewProfileDialog (Constructor)

    ViewProfileDialog(layout, profiles, separateShell, separateBrowser, parent = None)

    Constructor

    layout
    type of the window layout (string)
    profiles
    dictionary of tuples containing the visibility of the windows for the various profiles
    separateShell
    flag indicating that the Python shell is a separate window
    separateBrowser
    flag indicating that the file browser is a separate window
    parent
    parent widget of this dialog (QWidget)

    ViewProfileDialog.getProfiles

    getProfiles()

    Public method to retrieve the configured profiles.

    Returns:
    dictionary of tuples containing the visibility of the windows for the various profiles

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.Debugger.html0000644000175000001440000000013112261331354025305 xustar000000000000000030 mtime=1388688108.658230142 29 atime=1389081085.12872436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.Debugger.html0000644000175000001440000001002012261331354025031 0ustar00detlevusers00000000000000 eric4.Debugger

    eric4.Debugger

    Package implementing the Debugger frontend

    This package implements the graphical debugger. It consists of the debugger related HMI part, supporting dialogs and the debug server.

    Modules

    BreakPointModel Module implementing the Breakpoint model.
    BreakPointViewer Module implementing the Breakpoint viewer widget.
    Config Module defining the different Python types and their display strings.
    DebugClientCapabilities Module defining the debug clients capabilities.
    DebugProtocol Module defining the debug protocol tokens.
    DebugServer Module implementing the debug server.
    DebugUI Module implementing the debugger UI.
    DebugViewer Module implementing a widget containing various debug related views.
    DebuggerInterfaceNone Module implementing a dummy debugger interface for the debug server.
    DebuggerInterfacePython Module implementing the Python debugger interface for the debug server.
    DebuggerInterfacePython3 Module implementing the Python3 debugger interface for the debug server.
    DebuggerInterfaceRuby Module implementing the Ruby debugger interface for the debug server.
    EditBreakpointDialog Module implementing a dialog to edit breakpoint properties.
    EditWatchpointDialog Module implementing a dialog to edit watch expression properties.
    ExceptionLogger Module implementing the Exception Logger widget.
    ExceptionsFilterDialog Module implementing the exceptions filter dialog.
    StartDialog Module implementing the Start Program dialog.
    VariableDetailDialog Module implementing the variable detail dialog.
    VariablesFilterDialog Module implementing the variables filter dialog.
    VariablesViewer Module implementing the variables viewer widget.
    WatchPointModel Module implementing the Watch expression model.
    WatchPointViewer Module implementing the watch expression viewer widget.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.E4XML.html0000644000175000001440000000013112261331354024412 xustar000000000000000030 mtime=1388688108.657230142 29 atime=1389081085.12872436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.E4XML.html0000644000175000001440000001235512261331354024153 0ustar00detlevusers00000000000000 eric4.E4XML

    eric4.E4XML

    Package implementing the XML handling module of eric4.

    This module includes XML handlers and writers for

    • Project files
    • User project data files
    • Multi-project files
    • Session files
    • Shortcuts files
    • Debugger Properties files
    • Tasks files
    • Templates files
    • Highlighting styles
    • Plugiin repository (handler only)

    Modules

    Config Module implementing some common configuration stuf for the XML package.
    DebuggerPropertiesHandler Module implementing the handler class for reading an XML project debugger properties file.
    DebuggerPropertiesWriter Module implementing the writer class for writing an XML project debugger properties file.
    HighlightingStylesHandler Module implementing the handler class for handling a highlighting styles XML file.
    HighlightingStylesWriter Module implementing the writer class for writing a highlighting styles XML file.
    MultiProjectHandler Module implementing the handler class for reading an XML multi project file.
    MultiProjectWriter Module implementing the writer class for writing an XML multi project file.
    PluginRepositoryHandler Module implementing the handler class for reading an XML tasks file.
    ProjectHandler Module implementing the handler class for reading an XML project file.
    ProjectWriter Module implementing the writer class for writing an XML project file.
    SessionHandler Module implementing the handler class for reading an XML project session file.
    SessionWriter Module implementing the writer class for writing an XML project session file.
    ShortcutsHandler Module implementing the handler class for reading a keyboard shortcuts file.
    ShortcutsWriter Module implementing the writer class for writing an XML shortcuts file.
    TasksHandler Module implementing the handler class for reading an XML tasks file.
    TasksWriter Module implementing the writer class for writing an XML tasks file.
    TemplatesHandler Module implementing the handler class for reading an XML templates file.
    TemplatesWriter Module implementing the writer class for writing an XML templates file.
    UserProjectHandler Module implementing the handler class for reading an XML user project properties file.
    UserProjectWriter Module implementing the writer class for writing an XML user project properties file.
    XMLEntityResolver Module implementing a specialized entity resolver to find our DTDs.
    XMLErrorHandler Module implementing an error handler class.
    XMLHandlerBase Module implementing a base class for all of eric4s XML handlers.
    XMLMessageDialog Module implementing a dialog to display XML parse messages.
    XMLUtilities Module implementing various XML utility functions.
    XMLWriterBase Module implementing a base class for all of eric4s XML writers.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.ViewManagerPlugins.Tabview.Tabv0000644000175000001440000000013012261331352031170 xustar000000000000000029 mtime=1388688106.72222917 29 atime=1389081085.13072436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.ViewManagerPlugins.Tabview.Tabview.html0000644000175000001440000007152112261331352032402 0ustar00detlevusers00000000000000 eric4.Plugins.ViewManagerPlugins.Tabview.Tabview

    eric4.Plugins.ViewManagerPlugins.Tabview.Tabview

    Module implementing a tabbed viewmanager class.

    Global Attributes

    None

    Classes

    TabBar Class implementing a customized tab bar supporting drag & drop.
    TabWidget Class implementing a custimized tab widget.
    Tabview Class implementing a tabbed viewmanager class embedded in a splitter.

    Functions

    None


    TabBar

    Class implementing a customized tab bar supporting drag & drop.

    Signals

    tabCopyRequested(int, int)
    emitted to signal a clone request giving the old and new index position
    tabCopyRequested(long, int, int)
    emitted to signal a clone request giving the id of the source tab widget, the index in the source tab widget and the new index position
    tabMoveRequested(int, int)
    emitted to signal a tab move request giving the old and new index position
    tabRelocateRequested(long, int, int)
    emitted to signal a tab relocation request giving the id of the old tab widget, the index in the old tab widget and the new index position

    Derived from

    E4WheelTabBar

    Class Attributes

    None

    Class Methods

    None

    Methods

    TabBar Constructor
    dragEnterEvent Protected method to handle drag enter events.
    dropEvent Protected method to handle drop events.
    mouseMoveEvent Protected method to handle mouse move events.
    mousePressEvent Protected method to handle mouse press events.

    Static Methods

    None

    TabBar (Constructor)

    TabBar(parent = None)

    Constructor

    parent
    reference to the parent widget (QWidget)

    TabBar.dragEnterEvent

    dragEnterEvent(event)

    Protected method to handle drag enter events.

    event
    reference to the drag enter event (QDragEnterEvent)

    TabBar.dropEvent

    dropEvent(event)

    Protected method to handle drop events.

    event
    reference to the drop event (QDropEvent)

    TabBar.mouseMoveEvent

    mouseMoveEvent(event)

    Protected method to handle mouse move events.

    event
    reference to the mouse move event (QMouseEvent)

    TabBar.mousePressEvent

    mousePressEvent(event)

    Protected method to handle mouse press events.

    event
    reference to the mouse press event (QMouseEvent)


    TabWidget

    Class implementing a custimized tab widget.

    Derived from

    E4TabWidget

    Class Attributes

    None

    Class Methods

    None

    Methods

    TabWidget Constructor
    __captionChange Private method to handle Caption change signals from the editor.
    __closeButtonClicked Private method to handle the press of the close button.
    __closeRequested Private method to handle the press of the individual tab close button.
    __contextMenuClose Private method to close the selected tab.
    __contextMenuCloseAll Private method to close all tabs.
    __contextMenuCloseOthers Private method to close the other tabs.
    __contextMenuCopyPathToClipboard Private method to copy the file name of the editor to the clipboard.
    __contextMenuMoveFirst Private method to move a tab to the first position.
    __contextMenuMoveLast Private method to move a tab to the last position.
    __contextMenuMoveLeft Private method to move a tab one position to the left.
    __contextMenuMoveRight Private method to move a tab one position to the right.
    __contextMenuPrintFile Private method to print the selected tab.
    __contextMenuSave Private method to save the selected tab.
    __contextMenuSaveAll Private method to save all tabs.
    __contextMenuSaveAs Private method to save the selected tab to a new file.
    __initMenu Private method to initialize the tab context menu.
    __navigationMenuTriggered Private slot called to handle the navigation button menu selection.
    __showContextMenu Private slot to show the tab context menu.
    __showNavigationMenu Private slot to show the navigation button menu.
    addTab Overwritten method to add a new tab.
    copyTab Public method to copy an editor.
    copyTabOther Public method to copy an editor from another TabWidget.
    currentWidget Overridden method to return a reference to the current page.
    hasEditor Public method to check for an editor.
    hasEditors Public method to test, if any editor is managed.
    insertWidget Overwritten method to insert a new tab.
    mouseDoubleClickEvent Protected method handling double click events.
    relocateTab Public method to relocate an editor from another TabWidget.
    removeWidget Public method to remove a widget.
    showIndicator Public slot to set the indicator on or off.

    Static Methods

    None

    TabWidget (Constructor)

    TabWidget(vm)

    Constructor

    vm
    view manager widget (Tabview)

    TabWidget.__captionChange

    __captionChange(cap, editor)

    Private method to handle Caption change signals from the editor.

    Updates the listview text to reflect the new caption information.

    cap
    Caption for the editor
    editor
    Editor to update the caption for

    TabWidget.__closeButtonClicked

    __closeButtonClicked()

    Private method to handle the press of the close button.

    TabWidget.__closeRequested

    __closeRequested(index)

    Private method to handle the press of the individual tab close button.

    index
    index of the tab (integer)

    TabWidget.__contextMenuClose

    __contextMenuClose()

    Private method to close the selected tab.

    TabWidget.__contextMenuCloseAll

    __contextMenuCloseAll()

    Private method to close all tabs.

    TabWidget.__contextMenuCloseOthers

    __contextMenuCloseOthers()

    Private method to close the other tabs.

    TabWidget.__contextMenuCopyPathToClipboard

    __contextMenuCopyPathToClipboard()

    Private method to copy the file name of the editor to the clipboard.

    TabWidget.__contextMenuMoveFirst

    __contextMenuMoveFirst()

    Private method to move a tab to the first position.

    TabWidget.__contextMenuMoveLast

    __contextMenuMoveLast()

    Private method to move a tab to the last position.

    TabWidget.__contextMenuMoveLeft

    __contextMenuMoveLeft()

    Private method to move a tab one position to the left.

    TabWidget.__contextMenuMoveRight

    __contextMenuMoveRight()

    Private method to move a tab one position to the right.

    TabWidget.__contextMenuPrintFile

    __contextMenuPrintFile()

    Private method to print the selected tab.

    TabWidget.__contextMenuSave

    __contextMenuSave()

    Private method to save the selected tab.

    TabWidget.__contextMenuSaveAll

    __contextMenuSaveAll()

    Private method to save all tabs.

    TabWidget.__contextMenuSaveAs

    __contextMenuSaveAs()

    Private method to save the selected tab to a new file.

    TabWidget.__initMenu

    __initMenu()

    Private method to initialize the tab context menu.

    TabWidget.__navigationMenuTriggered

    __navigationMenuTriggered(act)

    Private slot called to handle the navigation button menu selection.

    act
    reference to the selected action (QAction)

    TabWidget.__showContextMenu

    __showContextMenu(coord, index)

    Private slot to show the tab context menu.

    coord
    the position of the mouse pointer (QPoint)
    index
    index of the tab the menu is requested for (integer)

    TabWidget.__showNavigationMenu

    __showNavigationMenu()

    Private slot to show the navigation button menu.

    TabWidget.addTab

    addTab(editor, title)

    Overwritten method to add a new tab.

    editor
    the editor object to be added (QScintilla.Editor.Editor)
    title
    title for the new tab (string or QString)

    TabWidget.copyTab

    copyTab(sourceIndex, targetIndex)

    Public method to copy an editor.

    sourceIndex
    index of the tab (integer)
    targetIndex
    index position to place it to (integer)

    TabWidget.copyTabOther

    copyTabOther(sourceId, sourceIndex, targetIndex)

    Public method to copy an editor from another TabWidget.

    sourceId
    id of the TabWidget to get the editor from (long)
    sourceIndex
    index of the tab in the old tab widget (integer)
    targetIndex
    index position to place it to (integer)

    TabWidget.currentWidget

    currentWidget()

    Overridden method to return a reference to the current page.

    Returns:
    reference to the current page (QWidget)

    TabWidget.hasEditor

    hasEditor(editor)

    Public method to check for an editor.

    editor
    editor object to check for
    Returns:
    flag indicating, whether the editor to be checked belongs to the list of editors managed by this tab widget.

    TabWidget.hasEditors

    hasEditors()

    Public method to test, if any editor is managed.

    Returns:
    flag indicating editors are managed

    TabWidget.insertWidget

    insertWidget(index, editor, title)

    Overwritten method to insert a new tab.

    index
    index position for the new tab (integer)
    editor
    the editor object to be added (QScintilla.Editor.Editor)
    title
    title for the new tab (string or QString)
    Returns:
    index of the inserted tab (integer)

    TabWidget.mouseDoubleClickEvent

    mouseDoubleClickEvent(event)

    Protected method handling double click events.

    event
    reference to the event object (QMouseEvent)

    TabWidget.relocateTab

    relocateTab(sourceId, sourceIndex, targetIndex)

    Public method to relocate an editor from another TabWidget.

    sourceId
    id of the TabWidget to get the editor from (long)
    sourceIndex
    index of the tab in the old tab widget (integer)
    targetIndex
    index position to place it to (integer)

    TabWidget.removeWidget

    removeWidget(object)

    Public method to remove a widget.

    object
    object to be removed (QWidget)

    TabWidget.showIndicator

    showIndicator(on)

    Public slot to set the indicator on or off.

    on
    flag indicating the dtate of the indicator (boolean)


    Tabview

    Class implementing a tabbed viewmanager class embedded in a splitter.

    Signals

    changeCaption(string)
    emitted if a change of the caption is necessary
    editorChanged(string)
    emitted when the current editor has changed

    Derived from

    QSplitter, ViewManager

    Class Attributes

    None

    Class Methods

    None

    Methods

    Tabview Constructor
    __currentChanged Private slot to handle the currentChanged signal.
    _addView Protected method to add a view (i.e.
    _initWindowActions Protected method to define the user interface actions for window handling.
    _modificationStatusChanged Protected slot to handle the modificationStatusChanged signal.
    _removeAllViews Protected method to remove all views (i.e.
    _removeView Protected method to remove a view (i.e.
    _showView Protected method to show a view (i.e.
    _syntaxErrorToggled Protected slot to handle the syntaxerrorToggled signal.
    activeWindow Public method to return the active (i.e.
    addSplit Public method used to split the current view.
    canCascade Public method to signal if cascading of managed windows is available.
    canSplit public method to signal if splitting of the view is available.
    canTile Public method to signal if tiling of managed windows is available.
    cascade Public method to cascade the managed windows.
    eventFilter Public method called to filter the event queue.
    getTabWidgetById Public method to get a reference to a tab widget knowing its ID.
    insertView Protected method to add a view (i.e.
    nextSplit Public slot used to move to the next split.
    preferencesChanged Public slot to handle the preferencesChanged signal.
    prevSplit Public slot used to move to the previous split.
    removeSplit Public method used to remove the current split view.
    setEditorName Public method to change the displayed name of the editor.
    setSplitOrientation Public method used to set the orientation of the split view.
    showWindowMenu Public method to set up the viewmanager part of the Window menu.
    tile Public method to tile the managed windows.

    Static Methods

    None

    Tabview (Constructor)

    Tabview(parent)

    Constructor

    parent
    parent widget (QWidget)
    ui
    reference to the main user interface
    dbs
    reference to the debug server object

    Tabview.__currentChanged

    __currentChanged(index)

    Private slot to handle the currentChanged signal.

    index
    index of the current tab

    Tabview._addView

    _addView(win, fn = None, noName = "")

    Protected method to add a view (i.e. window)

    win
    editor window to be added
    fn
    filename of this editor
    noName
    name to be used for an unnamed editor (string or QString)

    Tabview._initWindowActions

    _initWindowActions()

    Protected method to define the user interface actions for window handling.

    Tabview._modificationStatusChanged

    _modificationStatusChanged(m, editor)

    Protected slot to handle the modificationStatusChanged signal.

    m
    flag indicating the modification status (boolean)
    editor
    editor window changed

    Tabview._removeAllViews

    _removeAllViews()

    Protected method to remove all views (i.e. windows)

    Tabview._removeView

    _removeView(win)

    Protected method to remove a view (i.e. window)

    win
    editor window to be removed

    Tabview._showView

    _showView(win, fn = None)

    Protected method to show a view (i.e. window)

    win
    editor window to be shown
    fn
    filename of this editor

    Tabview._syntaxErrorToggled

    _syntaxErrorToggled(editor)

    Protected slot to handle the syntaxerrorToggled signal.

    editor
    editor that sent the signal

    Tabview.activeWindow

    activeWindow()

    Public method to return the active (i.e. current) window.

    Returns:
    reference to the active editor

    Tabview.addSplit

    addSplit()

    Public method used to split the current view.

    Tabview.canCascade

    canCascade()

    Public method to signal if cascading of managed windows is available.

    Returns:
    flag indicating cascading of windows is available

    Tabview.canSplit

    canSplit()

    public method to signal if splitting of the view is available.

    Returns:
    flag indicating splitting of the view is available.

    Tabview.canTile

    canTile()

    Public method to signal if tiling of managed windows is available.

    Returns:
    flag indicating tiling of windows is available

    Tabview.cascade

    cascade()

    Public method to cascade the managed windows.

    Tabview.eventFilter

    eventFilter(watched, event)

    Public method called to filter the event queue.

    watched
    the QObject being watched
    event
    the event that occurred
    Returns:
    always False

    Tabview.getTabWidgetById

    getTabWidgetById(id_)

    Public method to get a reference to a tab widget knowing its ID.

    id_
    id of the tab widget (long)
    Returns:
    reference to the tab widget (TabWidget)

    Tabview.insertView

    insertView(win, tabWidget, index, fn = None, noName = "")

    Protected method to add a view (i.e. window)

    win
    editor window to be added
    tabWidget
    reference to the tab widget to insert the editor into (TabWidget)
    index
    index position to insert at (integer)
    fn
    filename of this editor
    noName
    name to be used for an unnamed editor (string or QString)

    Tabview.nextSplit

    nextSplit()

    Public slot used to move to the next split.

    Tabview.preferencesChanged

    preferencesChanged()

    Public slot to handle the preferencesChanged signal.

    Tabview.prevSplit

    prevSplit()

    Public slot used to move to the previous split.

    Tabview.removeSplit

    removeSplit()

    Public method used to remove the current split view.

    Returns:
    flag indicating successfull removal

    Tabview.setEditorName

    setEditorName(editor, newName)

    Public method to change the displayed name of the editor.

    editor
    editor window to be changed
    newName
    new name to be shown (string or QString)

    Tabview.setSplitOrientation

    setSplitOrientation(orientation)

    Public method used to set the orientation of the split view.

    orientation
    orientation of the split (Qt.Horizontal or Qt.Vertical)

    Tabview.showWindowMenu

    showWindowMenu(windowMenu)

    Public method to set up the viewmanager part of the Window menu.

    windowMenu
    reference to the window menu

    Tabview.tile

    tile()

    Public method to tile the managed windows.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Project.AddFoundFilesDialog.html0000644000175000001440000000013112261331352027646 xustar000000000000000030 mtime=1388688106.007228811 29 atime=1389081085.13072436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Project.AddFoundFilesDialog.html0000644000175000001440000001025612261331352027405 0ustar00detlevusers00000000000000 eric4.Project.AddFoundFilesDialog

    eric4.Project.AddFoundFilesDialog

    Module implementing a dialog to show the found files to the user.

    Global Attributes

    None

    Classes

    AddFoundFilesDialog Class implementing a dialog to show the found files to the user.

    Functions

    None


    AddFoundFilesDialog

    Class implementing a dialog to show the found files to the user.

    The found files are displayed in a listview. Pressing the 'Add All' button adds all files to the current project, the 'Add Selected' button adds only the selected files and the 'Cancel' button cancels the operation.

    Derived from

    QDialog, Ui_AddFoundFilesDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    AddFoundFilesDialog Constructor
    getSelection Public method to return the selected items.
    on_addAllButton_clicked Private slot to handle the 'Add All' button press.
    on_addSelectedButton_clicked Private slot to handle the 'Add Selected' button press.
    on_buttonBox_clicked Private slot called by a button of the button box clicked.

    Static Methods

    None

    AddFoundFilesDialog (Constructor)

    AddFoundFilesDialog(files, parent = None, name = None)

    Constructor

    files
    list of files, that have been found for addition (QStringList)
    parent
    parent widget of this dialog (QWidget)
    name
    name of this dialog (string or QString)

    AddFoundFilesDialog.getSelection

    getSelection()

    Public method to return the selected items.

    Returns:
    list of selected files (QStringList)

    AddFoundFilesDialog.on_addAllButton_clicked

    on_addAllButton_clicked()

    Private slot to handle the 'Add All' button press.

    Returns:
    always 1 (int)

    AddFoundFilesDialog.on_addSelectedButton_clicked

    on_addSelectedButton_clicked()

    Private slot to handle the 'Add Selected' button press.

    Returns:
    always 2 (int)

    AddFoundFilesDialog.on_buttonBox_clicked

    on_buttonBox_clicked(button)

    Private slot called by a button of the button box clicked.

    button
    button that was clicked (QAbstractButton)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.WizardPlugins.FileDialogWizard.0000644000175000001440000000032212261331353031171 xustar0000000000000000121 path=eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.WizardPlugins.FileDialogWizard.FileDialogWizardDialog.html 30 mtime=1388688107.371229496 29 atime=1389081085.13072436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.WizardPlugins.FileDialogWizard.FileDialogWizard0000644000175000001440000001164612261331353034033 0ustar00detlevusers00000000000000 eric4.Plugins.WizardPlugins.FileDialogWizard.FileDialogWizardDialog

    eric4.Plugins.WizardPlugins.FileDialogWizard.FileDialogWizardDialog

    Module implementing the file dialog wizard dialog.

    Global Attributes

    None

    Classes

    FileDialogWizardDialog Class implementing the color dialog wizard dialog.

    Functions

    None


    FileDialogWizardDialog

    Class implementing the color dialog wizard dialog.

    It displays a dialog for entering the parameters for the QFileDialog code generator.

    Derived from

    QDialog, Ui_FileDialogWizardDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    FileDialogWizardDialog Constructor
    __getCode4 Private method to get the source code for Qt4.
    __toggleConfirmCheckBox Private slot to enable/disable the confirmation check box.
    __toggleGroupsAndTest Private slot to enable/disable certain groups and the test button.
    getCode Public method to get the source code.
    on_bTest_clicked Private method to test the selected options.
    on_buttonBox_clicked Private slot called by a button of the button box clicked.

    Static Methods

    None

    FileDialogWizardDialog (Constructor)

    FileDialogWizardDialog(parent=None)

    Constructor

    parent
    parent widget (QWidget)

    FileDialogWizardDialog.__getCode4

    __getCode4(indLevel, indString)

    Private method to get the source code for Qt4.

    indLevel
    indentation level (int)
    indString
    string used for indentation (space or tab) (string)
    Returns:
    generated code (string)

    FileDialogWizardDialog.__toggleConfirmCheckBox

    __toggleConfirmCheckBox()

    Private slot to enable/disable the confirmation check box.

    FileDialogWizardDialog.__toggleGroupsAndTest

    __toggleGroupsAndTest()

    Private slot to enable/disable certain groups and the test button.

    FileDialogWizardDialog.getCode

    getCode(indLevel, indString)

    Public method to get the source code.

    indLevel
    indentation level (int)
    indString
    string used for indentation (space or tab) (string)
    Returns:
    generated code (string)

    FileDialogWizardDialog.on_bTest_clicked

    on_bTest_clicked()

    Private method to test the selected options.

    FileDialogWizardDialog.on_buttonBox_clicked

    on_buttonBox_clicked(button)

    Private slot called by a button of the button box clicked.

    button
    button that was clicked (QAbstractButton)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.KdeQt.KQApplication.html0000644000175000001440000000013112261331351026157 xustar000000000000000030 mtime=1388688105.541228577 29 atime=1389081085.13072436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.KdeQt.KQApplication.html0000644000175000001440000002213012261331351025710 0ustar00detlevusers00000000000000 eric4.KdeQt.KQApplication

    eric4.KdeQt.KQApplication

    Compatibility module to use KApplication instead of QApplication.

    Global Attributes

    e4App

    Classes

    KQApplicationMixin Private mixin class implementing methods common to both KQApplication bases.
    __kdeKQApplication Compatibility class to use KApplication instead of Qt's QApplication.
    __qtKQApplication Compatibility class to use QApplication.

    Functions

    KQApplication Public function to instantiate an application object.


    KQApplicationMixin

    Private mixin class implementing methods common to both KQApplication bases.

    Derived from

    object

    Class Attributes

    None

    Class Methods

    None

    Methods

    KQApplicationMixin Constructor
    _localeString Protected function to get the string for the configured locale.
    getObject Public method to get a reference to a registered object.
    getPluginObject Public method to get a reference to a registered plugin object.
    getPluginObjectType Public method to get the type of a registered plugin object.
    getPluginObjects Public method to get a list of (name, reference) pairs of all registered plugin objects.
    registerObject Public method to register an object in the object registry.
    registerPluginObject Public method to register a plugin object in the object registry.
    unregisterPluginObject Public method to unregister a plugin object in the object registry.

    Static Methods

    None

    KQApplicationMixin (Constructor)

    KQApplicationMixin()

    Constructor

    KQApplicationMixin._localeString

    _localeString()

    Protected function to get the string for the configured locale.

    Returns:
    locale name (string)

    KQApplicationMixin.getObject

    getObject(name)

    Public method to get a reference to a registered object.

    name
    name of the object (string)
    Returns:
    reference to the registered object
    Raises KeyError:
    raised when the given name is not known

    KQApplicationMixin.getPluginObject

    getPluginObject(name)

    Public method to get a reference to a registered plugin object.

    name
    name of the plugin object (string)
    Returns:
    reference to the registered plugin object
    Raises KeyError:
    raised when the given name is not known

    KQApplicationMixin.getPluginObjectType

    getPluginObjectType(name)

    Public method to get the type of a registered plugin object.

    name
    name of the plugin object (string)
    Returns:
    type of the plugin object (string)
    Raises KeyError:
    raised when the given name is not known

    KQApplicationMixin.getPluginObjects

    getPluginObjects()

    Public method to get a list of (name, reference) pairs of all registered plugin objects.

    Returns:
    list of (name, reference) pairs

    KQApplicationMixin.registerObject

    registerObject(name, object)

    Public method to register an object in the object registry.

    name
    name of the object (string)
    object
    reference to the object
    Raises KeyError:
    raised when the given name is already in use

    KQApplicationMixin.registerPluginObject

    registerPluginObject(name, object, pluginType = None)

    Public method to register a plugin object in the object registry.

    name
    name of the plugin object (string)
    object
    reference to the plugin object
    pluginType=
    type of the plugin object (string)
    Raises KeyError:
    raised when the given name is already in use

    KQApplicationMixin.unregisterPluginObject

    unregisterPluginObject(name)

    Public method to unregister a plugin object in the object registry.

    name
    name of the plugin object (string)


    __kdeKQApplication

    Compatibility class to use KApplication instead of Qt's QApplication.

    Derived from

    KApplication, KQApplicationMixin

    Class Attributes

    None

    Class Methods

    None

    Methods

    __kdeKQApplication Constructor

    Static Methods

    None

    __kdeKQApplication (Constructor)

    __kdeKQApplication(argv, opts)

    Constructor

    argv
    command line arguments
    opts
    acceptable command line options


    __qtKQApplication

    Compatibility class to use QApplication.

    Derived from

    QApplication, KQApplicationMixin

    Class Attributes

    None

    Class Methods

    None

    Methods

    __qtKQApplication Constructor

    Static Methods

    None

    __qtKQApplication (Constructor)

    __qtKQApplication(argv, opts)

    Constructor

    argv
    command line arguments
    opts
    acceptable command line options (ignored)


    KQApplication

    KQApplication(argv, opts)

    Public function to instantiate an application object.

    argv
    command line arguments
    opts
    acceptable command line options
    Returns:
    reference to the application object

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsPySvn.SvnPropList0000644000175000001440000000013112261331353031261 xustar000000000000000030 mtime=1388688107.237229429 29 atime=1389081085.13072436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsPySvn.SvnPropListDialog.html0000644000175000001440000001205312261331353033100 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsPySvn.SvnPropListDialog

    eric4.Plugins.VcsPlugins.vcsPySvn.SvnPropListDialog

    Module implementing a dialog to show the output of the svn proplist command process.

    Global Attributes

    None

    Classes

    SvnPropListDialog Class implementing a dialog to show the output of the svn proplist command process.

    Functions

    None


    SvnPropListDialog

    Class implementing a dialog to show the output of the svn proplist command process.

    Derived from

    QWidget, SvnDialogMixin, Ui_SvnPropListDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnPropListDialog Constructor
    __finish Private slot called when the process finished or the user pressed the button.
    __generateItem Private method to generate a properties item in the properties list.
    __resizeColumns Private method to resize the list columns.
    __resort Private method to resort the tree.
    __showError Private slot to show an error message.
    on_buttonBox_clicked Private slot called by a button of the button box clicked.
    start Public slot to start the svn status command.

    Static Methods

    None

    SvnPropListDialog (Constructor)

    SvnPropListDialog(vcs, parent = None)

    Constructor

    vcs
    reference to the vcs object
    parent
    parent widget (QWidget)

    SvnPropListDialog.__finish

    __finish()

    Private slot called when the process finished or the user pressed the button.

    SvnPropListDialog.__generateItem

    __generateItem(path, propName, propValue)

    Private method to generate a properties item in the properties list.

    path
    file/directory name the property applies to (string or QString)
    propName
    name of the property (string or QString)
    propValue
    value of the property (string or QString)

    SvnPropListDialog.__resizeColumns

    __resizeColumns()

    Private method to resize the list columns.

    SvnPropListDialog.__resort

    __resort()

    Private method to resort the tree.

    SvnPropListDialog.__showError

    __showError(msg)

    Private slot to show an error message.

    msg
    error message to show (string or QString)

    SvnPropListDialog.on_buttonBox_clicked

    on_buttonBox_clicked(button)

    Private slot called by a button of the button box clicked.

    button
    button that was clicked (QAbstractButton)

    SvnPropListDialog.start

    start(fn, recursive = False)

    Public slot to start the svn status command.

    fn
    filename(s) (string or list of string)
    recursive
    flag indicating a recursive list is requested

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.compileUiFiles.html0000644000175000001440000000013112261331350025361 xustar000000000000000030 mtime=1388688104.186227897 29 atime=1389081085.13072436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.compileUiFiles.html0000644000175000001440000001001112261331350025105 0ustar00detlevusers00000000000000 eric4.compileUiFiles

    eric4.compileUiFiles

    Script for eric4 to compile all .ui files to Python source.

    Global Attributes

    None

    Classes

    None

    Functions

    compileUiDir Creates Python modules from Qt Designer .ui files in a directory or directory tree.
    compileUiFiles Compile the .ui files to Python sources.
    compile_ui Local function to compile a single .ui file.
    main The main function of the script.
    pyName Local function to create the Python source file name for the compiled .ui file.


    compileUiDir

    compileUiDir(dir, recurse = False, map = None, **compileUi_args)

    Creates Python modules from Qt Designer .ui files in a directory or directory tree.

    Note: This function is a modified version of the one found in PyQt4.

    dir
    Name of the directory to scan for files whose name ends with '.ui'. By default the generated Python module is created in the same directory ending with '.py'.
    recurse
    flag indicating that any sub-directories should be scanned.
    map
    an optional callable that is passed the name of the directory containing the '.ui' file and the name of the Python module that will be created. The callable should return a tuple of the name of the directory in which the Python module will be created and the (possibly modified) name of the module.
    compileUi_args
    any additional keyword arguments that are passed to the compileUi() function that is called to create each Python module.


    compileUiFiles

    compileUiFiles()

    Compile the .ui files to Python sources.



    compile_ui

    compile_ui(ui_dir, ui_file)

    Local function to compile a single .ui file.

    ui_dir
    directory containing the .ui file (string)
    ui_file
    file name of the .ui file (string)


    main

    main(argv)

    The main function of the script.

    argv
    the list of command line arguments.


    pyName

    pyName(py_dir, py_file)

    Local function to create the Python source file name for the compiled .ui file.

    py_dir
    suggested name of the directory (string)
    py_file
    suggested name for the compile source file (string)
    Returns:
    tuple of directory name (string) and source file name (string)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.UI.PixmapCache.html0000644000175000001440000000013112261331350025146 xustar000000000000000030 mtime=1388688104.951228281 29 atime=1389081085.13072436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.UI.PixmapCache.html0000644000175000001440000001024412261331350024702 0ustar00detlevusers00000000000000 eric4.UI.PixmapCache

    eric4.UI.PixmapCache

    Module implementing a pixmap cache for icons.

    Global Attributes

    pixCache

    Classes

    PixmapCache Class implementing a pixmap cache for icons.

    Functions

    addSearchPath Module function to add a path to the search path.
    getIcon Module function to retrieve an icon.
    getPixmap Module function to retrieve a pixmap.
    getSymlinkIcon Module function to retrieve a symbolic link icon.


    PixmapCache

    Class implementing a pixmap cache for icons.

    Derived from

    object

    Class Attributes

    None

    Class Methods

    None

    Methods

    PixmapCache Constructor
    addSearchPath Public method to add a path to the search path.
    getPixmap Public method to retrieve a pixmap.

    Static Methods

    None

    PixmapCache (Constructor)

    PixmapCache()

    Constructor

    PixmapCache.addSearchPath

    addSearchPath(path)

    Public method to add a path to the search path.

    path
    path to add (QString)

    PixmapCache.getPixmap

    getPixmap(key)

    Public method to retrieve a pixmap.

    key
    name of the wanted pixmap (string)
    Returns:
    the requested pixmap (QPixmap)


    addSearchPath

    addSearchPath(path, cache = pixCache)

    Module function to add a path to the search path.

    path
    path to add (QString)


    getIcon

    getIcon(key, cache = pixCache)

    Module function to retrieve an icon.

    key
    name of the wanted icon (string)
    Returns:
    the requested icon (QIcon)


    getPixmap

    getPixmap(key, cache = pixCache)

    Module function to retrieve a pixmap.

    key
    name of the wanted pixmap (string)
    Returns:
    the requested pixmap (QPixmap)


    getSymlinkIcon

    getSymlinkIcon(key, cache = pixCache)

    Module function to retrieve a symbolic link icon.

    key
    name of the wanted icon (string)
    Returns:
    the requested icon (QIcon)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.OpenSearch.OpenSearchManager0000644000175000001440000000013112261331353031171 xustar000000000000000030 mtime=1388688107.994229809 29 atime=1389081085.13072436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.OpenSearch.OpenSearchManager.html0000644000175000001440000004015712261331353031676 0ustar00detlevusers00000000000000 eric4.Helpviewer.OpenSearch.OpenSearchManager

    eric4.Helpviewer.OpenSearch.OpenSearchManager

    Module implementing a manager for open search engines.

    Global Attributes

    None

    Classes

    OpenSearchManager Class implementing a manager for open search engines.

    Functions

    None


    OpenSearchManager

    Class implementing a manager for open search engines.

    Signals

    changed()
    emitted to indicate a change
    currentEngineChanged
    emitted to indicate a change of the current search engine

    Derived from

    QObject

    Class Attributes

    None

    Class Methods

    None

    Methods

    OpenSearchManager Constructor
    __addEngineByEngine Private method to add a new search engine given a reference to an engine.
    __addEngineByFile Private method to add a new search engine given a filename.
    __addEngineByUrl Private method to add a new search engine given its URL.
    __confirmAddition Private method to confirm the addition of a new search engine.
    __engineFromUrlAvailable Private slot to add a search engine from the net.
    addEngine Public method to add a new search engine.
    allEnginesNames Public method to get a list of all engine names.
    close Public method to close the open search engines manager.
    convertKeywordSearchToUrl Public method to get the search URL for a keyword search.
    currentEngine Public method to get a reference to the current engine.
    currentEngineName Public method to get the name of the current search engine.
    engine Public method to get a reference to the named engine.
    engineExists Public method to check, if an engine exists.
    engineForKeyword Public method to get the engine for a keyword.
    enginesChanged Public slot to tell the search engine manager, that something has changed.
    enginesCount Public method to get the number of available engines.
    enginesDirectory Public method to determine the directory containing the search engine descriptions.
    generateEngineFileName Public method to generate a valid engine file name.
    keywordsForEngine Public method to get the keywords for a given engine.
    load Public method to load the search engines configuration.
    loadDirectory Public method to load the search engine definitions from files.
    removeEngine Public method to remove an engine.
    restoreDefaults Public method to restore the default search engines.
    save Public method to save the search engines configuration.
    saveDirectory Public method to save the search engine definitions to files.
    setCurrentEngine Public method to set the current engine.
    setCurrentEngineName Public method to set the current engine by name.
    setEngineForKeyword Public method to set the engine for a keyword.
    setKeywordsForEngine Public method to set the keywords for an engine.

    Static Methods

    None

    OpenSearchManager (Constructor)

    OpenSearchManager(parent = None)

    Constructor

    parent
    reference to the parent object (QObject)

    OpenSearchManager.__addEngineByEngine

    __addEngineByEngine(engine)

    Private method to add a new search engine given a reference to an engine.

    engine
    reference to an engine object (OpenSearchEngine)
    Returns:
    flag indicating success (boolean)

    OpenSearchManager.__addEngineByFile

    __addEngineByFile(filename)

    Private method to add a new search engine given a filename.

    filename
    name of a file containing the engine definition (string or QString)
    Returns:
    flag indicating success (boolean)

    OpenSearchManager.__addEngineByUrl

    __addEngineByUrl(url)

    Private method to add a new search engine given its URL.

    url
    URL of the engine definition file (QUrl)
    Returns:
    flag indicating success (boolean)

    OpenSearchManager.__confirmAddition

    __confirmAddition(engine)

    Private method to confirm the addition of a new search engine.

    engine
    reference to the engine to be added (OpenSearchEngine)
    Returns:
    flag indicating the engine shall be added (boolean)

    OpenSearchManager.__engineFromUrlAvailable

    __engineFromUrlAvailable()

    Private slot to add a search engine from the net.

    OpenSearchManager.addEngine

    addEngine(engine)

    Public method to add a new search engine.

    engine
    URL of the engine definition file (QUrl) or name of a file containing the engine definition (string or QString) or reference to an engine object (OpenSearchEngine)
    Returns:
    flag indicating success (boolean)

    OpenSearchManager.allEnginesNames

    allEnginesNames()

    Public method to get a list of all engine names.

    Returns:
    sorted list of all engine names (QStringList)

    OpenSearchManager.close

    close()

    Public method to close the open search engines manager.

    OpenSearchManager.convertKeywordSearchToUrl

    convertKeywordSearchToUrl(keywordSearch)

    Public method to get the search URL for a keyword search.

    keywordSearch
    search string for keyword search (string or QString)
    Returns:
    search URL (QUrl)

    OpenSearchManager.currentEngine

    currentEngine()

    Public method to get a reference to the current engine.

    Returns:
    reference to the current engine (OpenSearchEngine)

    OpenSearchManager.currentEngineName

    currentEngineName()

    Public method to get the name of the current search engine.

    Returns:
    name of the current search engine (QString)

    OpenSearchManager.engine

    engine(name)

    Public method to get a reference to the named engine.

    name
    name of the engine (string or QString)
    Returns:
    reference to the engine (OpenSearchEngine)

    OpenSearchManager.engineExists

    engineExists(name)

    Public method to check, if an engine exists.

    name
    name of the engine (string or QString)

    OpenSearchManager.engineForKeyword

    engineForKeyword(keyword)

    Public method to get the engine for a keyword.

    keyword
    keyword to get engine for (string or QString)
    Returns:
    reference to the search engine object (OpenSearchEngine)

    OpenSearchManager.enginesChanged

    enginesChanged()

    Public slot to tell the search engine manager, that something has changed.

    OpenSearchManager.enginesCount

    enginesCount()

    Public method to get the number of available engines.

    Returns:
    number of engines (integer)

    OpenSearchManager.enginesDirectory

    enginesDirectory()

    Public method to determine the directory containing the search engine descriptions.

    Returns:
    directory name (QString)

    OpenSearchManager.generateEngineFileName

    generateEngineFileName(engineName)

    Public method to generate a valid engine file name.

    engineName
    name of the engine (string or QString)
    Returns:
    valid engine file name (QString)

    OpenSearchManager.keywordsForEngine

    keywordsForEngine(engine)

    Public method to get the keywords for a given engine.

    engine
    reference to the search engine object (OpenSearchEngine)
    Returns:
    list of keywords (list of strings)

    OpenSearchManager.load

    load()

    Public method to load the search engines configuration.

    OpenSearchManager.loadDirectory

    loadDirectory(dirName)

    Public method to load the search engine definitions from files.

    dirName
    name of the directory to load the files from (string or QString)
    Returns:
    flag indicating success (boolean)

    OpenSearchManager.removeEngine

    removeEngine(name)

    Public method to remove an engine.

    name
    name of the engine (string or QString)

    OpenSearchManager.restoreDefaults

    restoreDefaults()

    Public method to restore the default search engines.

    OpenSearchManager.save

    save()

    Public method to save the search engines configuration.

    OpenSearchManager.saveDirectory

    saveDirectory(dirName)

    Public method to save the search engine definitions to files.

    dirName
    name of the directory to write the files to (string or QString)

    OpenSearchManager.setCurrentEngine

    setCurrentEngine(engine)

    Public method to set the current engine.

    engine
    reference to the new current engine (OpenSearchEngine)

    OpenSearchManager.setCurrentEngineName

    setCurrentEngineName(name)

    Public method to set the current engine by name.

    name
    name of the new current engine (string or QString)

    OpenSearchManager.setEngineForKeyword

    setEngineForKeyword(keyword, engine)

    Public method to set the engine for a keyword.

    keyword
    keyword to get engine for (string or QString)
    engine
    reference to the search engine object (OpenSearchEngine) or None to remove the keyword

    OpenSearchManager.setKeywordsForEngine

    setKeywordsForEngine(engine, keywords)

    Public method to set the keywords for an engine.

    engine
    reference to the search engine object (OpenSearchEngine)
    keywords
    list of keywords (QStringList)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DebugClients.Python3.DebugThread.html0000644000175000001440000000013012261331354030543 xustar000000000000000029 mtime=1388688108.13722988 29 atime=1389081085.13072436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.DebugClients.Python3.DebugThread.html0000644000175000001440000001132112261331354030275 0ustar00detlevusers00000000000000 eric4.DebugClients.Python3.DebugThread

    eric4.DebugClients.Python3.DebugThread

    Module implementing the debug thread.

    Global Attributes

    None

    Classes

    DebugThread Class implementing a debug thread.

    Functions

    None


    DebugThread

    Class implementing a debug thread.

    It represents a thread in the python interpreter that we are tracing.

    Provides simple wrapper methods around bdb for the 'owning' client to call to step etc.

    Derived from

    DebugBase

    Class Attributes

    None

    Class Methods

    None

    Methods

    DebugThread Constructor
    bootstrap Private method to bootstrap the thread.
    get_ident Public method to return the id of this thread.
    get_name Public method to return the name of this thread.
    set_ident Public method to set the id for this thread.
    traceThread Private method to setup tracing for this thread.
    trace_dispatch Private method wrapping the trace_dispatch of bdb.py.

    Static Methods

    None

    DebugThread (Constructor)

    DebugThread(dbgClient, targ = None, args = None, kwargs = None, mainThread = False)

    Constructor

    dbgClient
    the owning client
    targ
    the target method in the run thread
    args
    arguments to be passed to the thread
    kwargs
    arguments to be passed to the thread
    mainThread
    0 if this thread is not the mainscripts thread

    DebugThread.bootstrap

    bootstrap()

    Private method to bootstrap the thread.

    It wraps the call to the user function to enable tracing before hand.

    DebugThread.get_ident

    get_ident()

    Public method to return the id of this thread.

    Returns:
    the id of this thread (int)

    DebugThread.get_name

    get_name()

    Public method to return the name of this thread.

    Returns:
    name of this thread (string)

    DebugThread.set_ident

    set_ident(id)

    Public method to set the id for this thread.

    id
    id for this thread (int)

    DebugThread.traceThread

    traceThread()

    Private method to setup tracing for this thread.

    DebugThread.trace_dispatch

    trace_dispatch(frame, event, arg)

    Private method wrapping the trace_dispatch of bdb.py.

    It wraps the call to dispatch tracing into bdb to make sure we have locked the client to prevent multiple threads from entering the client event loop.

    frame
    The current stack frame.
    event
    The trace event (string)
    arg
    The arguments
    Returns:
    local trace function

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Templates.TemplateSingleVariableDialog.0000644000175000001440000000013112261331350031223 xustar000000000000000029 mtime=1388688104.33222797 30 atime=1389081085.131724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Templates.TemplateSingleVariableDialog.html0000644000175000001440000000502212261331350031642 0ustar00detlevusers00000000000000 eric4.Templates.TemplateSingleVariableDialog

    eric4.Templates.TemplateSingleVariableDialog

    Module implementing a dialog for entering a single template variable.

    Global Attributes

    None

    Classes

    TemplateSingleVariableDialog Class implementing a dialog for entering a single template variable.

    Functions

    None


    TemplateSingleVariableDialog

    Class implementing a dialog for entering a single template variable.

    Derived from

    QDialog, Ui_TemplateSingleVariableDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    TemplateSingleVariableDialog Constructor
    getVariable Public method to get the value for the variable.

    Static Methods

    None

    TemplateSingleVariableDialog (Constructor)

    TemplateSingleVariableDialog(variable, parent = None)

    Constructor

    variable
    template variable name (string)
    parent
    parent widget of this dialog (QWidget)

    TemplateSingleVariableDialog.getVariable

    getVariable()

    Public method to get the value for the variable.

    Returns:
    value for the template variable (string)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Globals.__init__.html0000644000175000001440000000013212261331351025573 xustar000000000000000030 mtime=1388688105.131228371 30 atime=1389081085.131724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Globals.__init__.html0000644000175000001440000000643312261331351025333 0ustar00detlevusers00000000000000 eric4.Globals.__init__

    eric4.Globals.__init__

    Module defining common data to be used by all modules.

    Global Attributes

    recentNameFiles
    recentNameMultiProject
    recentNameProject
    settingsNameGlobal
    settingsNameOrganization
    settingsNameRecent

    Classes

    None

    Functions

    getPyQt4ModulesDirectory Function to determine the path to PyQt4's modules directory.
    getPythonModulesDirectory Function to determine the path to Python's modules directory.
    isLinuxPlatform Function to check, if this is a Linux platform.
    isMacPlatform Function to check, if this is a Mac platform.
    isWindowsPlatform Function to check, if this is a Windows platform.


    getPyQt4ModulesDirectory

    getPyQt4ModulesDirectory()

    Function to determine the path to PyQt4's modules directory.

    Returns:
    path to the PyQt4 modules directory (string)


    getPythonModulesDirectory

    getPythonModulesDirectory()

    Function to determine the path to Python's modules directory.

    Returns:
    path to the Python modules directory (string)


    isLinuxPlatform

    isLinuxPlatform()

    Function to check, if this is a Linux platform.

    Returns:
    flag indicating Linux platform (boolean)


    isMacPlatform

    isMacPlatform()

    Function to check, if this is a Mac platform.

    Returns:
    flag indicating Mac platform (boolean)


    isWindowsPlatform

    isWindowsPlatform()

    Function to check, if this is a Windows platform.

    Returns:
    flag indicating Windows platform (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsPySvn.subversion.0000644000175000001440000000013212261331353031274 xustar000000000000000030 mtime=1388688107.118229369 30 atime=1389081085.131724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsPySvn.subversion.html0000644000175000001440000011735512261331353031727 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsPySvn.subversion

    eric4.Plugins.VcsPlugins.vcsPySvn.subversion

    Module implementing the version control systems interface to Subversion.

    Global Attributes

    None

    Classes

    Subversion Class implementing the version control systems interface to Subversion.

    Functions

    None


    Subversion

    Class implementing the version control systems interface to Subversion.

    Signals

    committed()
    emitted after the commit action has completed

    Derived from

    VersionControl

    Class Attributes

    None

    Class Methods

    None

    Methods

    Subversion Constructor
    __isVersioned Private method to check, if the given status indicates a versioned state.
    __svnURL Private method to format a url for subversion.
    __vcsAllRegisteredStates_wc Private method used to get the registered states of a number of files in the vcs.
    __vcsAllRegisteredStates_wcng Private method used to get the registered states of a number of files in the vcs.
    __vcsCommit_Step2 Private slot performing the second step of the commit action.
    __vcsRegisteredState_wc Private method used to get the registered state of a file in the vcs.
    __vcsRegisteredState_wcng Private method used to get the registered state of a file in the vcs.
    _createStatusMonitorThread Protected method to create an instance of the VCS status monitor thread.
    clearStatusCache Public method to clear the status cache.
    getClient Public method to create and initialize the pysvn client object.
    getPlugin Public method to get a reference to the plugin object.
    svnAddToChangelist Public method to add a file or directory to a changelist.
    svnBlame Public method to show the output of the svn blame command.
    svnCopy Public method used to copy a file/directory.
    svnDelProp Public method used to delete a property of a file/directory.
    svnExtendedDiff Public method used to view the difference of a file/directory to the Subversion repository.
    svnGetChangelists Public method to get a list of all defined change lists.
    svnGetReposName Public method used to retrieve the URL of the subversion repository path.
    svnInfo Public method to show repository information about a file or directory.
    svnListProps Public method used to list the properties of a file/directory.
    svnListTagBranch Public method used to list the available tags or branches.
    svnLock Public method used to lock a file in the Subversion repository.
    svnLogBrowser Public method used to browse the log of a file/directory from the Subversion repository.
    svnLogLimited Public method used to view the (limited) log of a file/directory from the Subversion repository.
    svnNormalizeURL Public method to normalize a url for subversion.
    svnRelocate Public method to relocate the working copy to a new repository URL.
    svnRemoveFromChangelist Public method to remove a file or directory from its changelist.
    svnRepoBrowser Public method to open the repository browser.
    svnResolve Public method used to resolve conflicts of a file/directory.
    svnSetProp Public method used to add a property to a file/directory.
    svnShowChangelists Public method used to inspect the change lists defined for the project.
    svnUnlock Public method used to unlock a file in the Subversion repository.
    svnUrlDiff Public method used to view the difference of a file/directory of two repository URLs.
    vcsAdd Public method used to add a file/directory to the Subversion repository.
    vcsAddBinary Public method used to add a file/directory in binary mode to the Subversion repository.
    vcsAddTree Public method to add a directory tree rooted at path to the Subversion repository.
    vcsAllRegisteredStates Public method used to get the registered states of a number of files in the vcs.
    vcsCheckout Public method used to check the project out of the Subversion repository.
    vcsCleanup Public method used to cleanup the working copy.
    vcsCommandLine Public method used to execute arbitrary subversion commands.
    vcsCommit Public method used to make the change of a file/directory permanent in the Subversion repository.
    vcsConvertProject Public method to convert an uncontrolled project to a version controlled project.
    vcsDiff Public method used to view the difference of a file/directory to the Subversion repository.
    vcsExists Public method used to test for the presence of the svn executable.
    vcsExport Public method used to export a directory from the Subversion repository.
    vcsGetProjectBrowserHelper Public method to instanciate a helper object for the different project browsers.
    vcsGetProjectHelper Public method to instanciate a helper object for the project.
    vcsImport Public method used to import the project into the Subversion repository.
    vcsInit Public method used to initialize the subversion repository.
    vcsInitConfig Public method to initialize the VCS configuration.
    vcsLog Public method used to view the log of a file/directory from the Subversion repository.
    vcsMerge Public method used to merge a URL/revision into the local project.
    vcsMove Public method used to move a file/directory.
    vcsName Public method returning the name of the vcs.
    vcsNewProjectOptionsDialog Public method to get a dialog to enter repository info for getting a new project.
    vcsOptionsDialog Public method to get a dialog to enter repository info.
    vcsRegisteredState Public method used to get the registered state of a file in the vcs.
    vcsRemove Public method used to remove a file/directory from the Subversion repository.
    vcsRepositoryInfos Public method to retrieve information about the repository.
    vcsRevert Public method used to revert changes made to a file/directory.
    vcsShutdown Public method used to shutdown the Subversion interface.
    vcsStatus Public method used to view the status of files/directories in the Subversion repository.
    vcsSwitch Public method used to switch a directory to a different tag/branch.
    vcsTag Public method used to set the tag of a file/directory in the Subversion repository.
    vcsUpdate Public method used to update a file/directory with the Subversion repository.

    Static Methods

    None

    Subversion (Constructor)

    Subversion(plugin, parent = None, name = None)

    Constructor

    plugin
    reference to the plugin object
    parent
    parent widget (QWidget)
    name
    name of this object (string or QString)

    Subversion.__isVersioned

    __isVersioned(status)

    Private method to check, if the given status indicates a versioned state.

    status
    status object to check (pysvn.PysvnStatus)
    Returns:
    flag indicating a versioned state (boolean)

    Subversion.__svnURL

    __svnURL(url)

    Private method to format a url for subversion.

    url
    unformatted url string (string)
    Returns:
    properly formated url for subversion

    Subversion.__vcsAllRegisteredStates_wc

    __vcsAllRegisteredStates_wc(names, dname, shortcut = True)

    Private method used to get the registered states of a number of files in the vcs.

    This is the variant for subversion installations using the old working copy meta-data format.

    Note: If a shortcut is to be taken, the code will only check, if the named directory has been scanned already. If so, it is assumed, that the states for all files has been populated by the previous run.

    names
    dictionary with all filenames to be checked as keys
    dname
    directory to check in (string)
    shortcut
    flag indicating a shortcut should be taken (boolean)
    Returns:
    the received dictionary completed with a combination of canBeCommited and canBeAdded or None in order to signal an error

    Subversion.__vcsAllRegisteredStates_wcng

    __vcsAllRegisteredStates_wcng(names, dname, shortcut = True)

    Private method used to get the registered states of a number of files in the vcs.

    This is the variant for subversion installations using the new working copy meta-data format.

    Note: If a shortcut is to be taken, the code will only check, if the named directory has been scanned already. If so, it is assumed, that the states for all files has been populated by the previous run.

    names
    dictionary with all filenames to be checked as keys
    dname
    directory to check in (string)
    shortcut
    flag indicating a shortcut should be taken (boolean)
    Returns:
    the received dictionary completed with a combination of canBeCommited and canBeAdded or None in order to signal an error

    Subversion.__vcsCommit_Step2

    __vcsCommit_Step2()

    Private slot performing the second step of the commit action.

    Subversion.__vcsRegisteredState_wc

    __vcsRegisteredState_wc(name)

    Private method used to get the registered state of a file in the vcs.

    This is the variant for subversion installations using the old working copy meta-data format.

    name
    filename to check (string or QString)
    Returns:
    a combination of canBeCommited and canBeAdded

    Subversion.__vcsRegisteredState_wcng

    __vcsRegisteredState_wcng(name)

    Private method used to get the registered state of a file in the vcs.

    This is the variant for subversion installations using the new working copy meta-data format.

    name
    filename to check (string or QString)
    Returns:
    a combination of canBeCommited and canBeAdded

    Subversion._createStatusMonitorThread

    _createStatusMonitorThread(interval, project)

    Protected method to create an instance of the VCS status monitor thread.

    project
    reference to the project object
    interval
    check interval for the monitor thread in seconds (integer)
    Returns:
    reference to the monitor thread (QThread)

    Subversion.clearStatusCache

    clearStatusCache()

    Public method to clear the status cache.

    Subversion.getClient

    getClient()

    Public method to create and initialize the pysvn client object.

    Returns:
    the pysvn client object (pysvn.Client)

    Subversion.getPlugin

    getPlugin()

    Public method to get a reference to the plugin object.

    Returns:
    reference to the plugin object (VcsPySvnPlugin)

    Subversion.svnAddToChangelist

    svnAddToChangelist(names)

    Public method to add a file or directory to a changelist.

    Note: Directories will be added recursively.

    names
    name or list of names of file or directory to add (string or QString)

    Subversion.svnBlame

    svnBlame(name)

    Public method to show the output of the svn blame command.

    name
    file name to show the blame for (string)

    Subversion.svnCopy

    svnCopy(name, project)

    Public method used to copy a file/directory.

    name
    file/directory name to be copied (string)
    project
    reference to the project object
    Returns:
    flag indicating successfull operation (boolean)

    Subversion.svnDelProp

    svnDelProp(name, recursive = False)

    Public method used to delete a property of a file/directory.

    name
    file/directory name (string or list of strings)
    recursive
    flag indicating a recursive list is requested

    Subversion.svnExtendedDiff

    svnExtendedDiff(name)

    Public method used to view the difference of a file/directory to the Subversion repository.

    If name is a directory and is the project directory, all project files are saved first. If name is a file (or list of files), which is/are being edited and has unsaved modification, they can be saved or the operation may be aborted.

    This method gives the chance to enter the revisions to be compared.

    name
    file/directory name to be diffed (string)

    Subversion.svnGetChangelists

    svnGetChangelists()

    Public method to get a list of all defined change lists.

    Returns:
    list of defined change list names (list of strings)

    Subversion.svnGetReposName

    svnGetReposName(path)

    Public method used to retrieve the URL of the subversion repository path.

    path
    local path to get the svn repository path for (string)
    Returns:
    string with the repository path URL

    Subversion.svnInfo

    svnInfo(projectPath, name)

    Public method to show repository information about a file or directory.

    projectPath
    path name of the project (string)
    name
    file/directory name relative to the project (string)

    Subversion.svnListProps

    svnListProps(name, recursive = False)

    Public method used to list the properties of a file/directory.

    name
    file/directory name (string or list of strings)
    recursive
    flag indicating a recursive list is requested

    Subversion.svnListTagBranch

    svnListTagBranch(path, tags = True)

    Public method used to list the available tags or branches.

    path
    directory name of the project (string)
    tags
    flag indicating listing of branches or tags (False = branches, True = tags)

    Subversion.svnLock

    svnLock(name, stealIt=False, parent=None)

    Public method used to lock a file in the Subversion repository.

    name
    file/directory name to be locked (string or list of strings)
    stealIt
    flag indicating a forced operation (boolean)
    parent
    reference to the parent object of the subversion dialog (QWidget)

    Subversion.svnLogBrowser

    svnLogBrowser(path)

    Public method used to browse the log of a file/directory from the Subversion repository.

    path
    file/directory name to show the log of (string)

    Subversion.svnLogLimited

    svnLogLimited(name)

    Public method used to view the (limited) log of a file/directory from the Subversion repository.

    name
    file/directory name to show the log of (string)

    Subversion.svnNormalizeURL

    svnNormalizeURL(url)

    Public method to normalize a url for subversion.

    url
    url string (string)
    Returns:
    properly normalized url for subversion

    Subversion.svnRelocate

    svnRelocate(projectPath)

    Public method to relocate the working copy to a new repository URL.

    projectPath
    path name of the project (string)

    Subversion.svnRemoveFromChangelist

    svnRemoveFromChangelist(names)

    Public method to remove a file or directory from its changelist.

    Note: Directories will be removed recursively.

    names
    name or list of names of file or directory to remove (string or QString)

    Subversion.svnRepoBrowser

    svnRepoBrowser(projectPath = None)

    Public method to open the repository browser.

    projectPath
    path name of the project (string)

    Subversion.svnResolve

    svnResolve(name)

    Public method used to resolve conflicts of a file/directory.

    name
    file/directory name to be resolved (string)

    Subversion.svnSetProp

    svnSetProp(name, recursive = False)

    Public method used to add a property to a file/directory.

    name
    file/directory name (string or list of strings)
    recursive
    flag indicating a recursive set is requested

    Subversion.svnShowChangelists

    svnShowChangelists(path)

    Public method used to inspect the change lists defined for the project.

    path
    directory name to show change lists for (string)

    Subversion.svnUnlock

    svnUnlock(name, breakIt=False, parent=None)

    Public method used to unlock a file in the Subversion repository.

    name
    file/directory name to be unlocked (string or list of strings)
    breakIt
    flag indicating a forced operation (boolean)
    parent
    reference to the parent object of the subversion dialog (QWidget)

    Subversion.svnUrlDiff

    svnUrlDiff(name)

    Public method used to view the difference of a file/directory of two repository URLs.

    If name is a directory and is the project directory, all project files are saved first. If name is a file (or list of files), which is/are being edited and has unsaved modification, they can be saved or the operation may be aborted.

    This method gives the chance to enter the revisions to be compared.

    name
    file/directory name to be diffed (string)

    Subversion.vcsAdd

    vcsAdd(name, isDir = False, noDialog = False)

    Public method used to add a file/directory to the Subversion repository.

    name
    file/directory name to be added (string)
    isDir
    flag indicating name is a directory (boolean)
    noDialog
    flag indicating quiet operations (boolean)

    Subversion.vcsAddBinary

    vcsAddBinary(name, isDir = False)

    Public method used to add a file/directory in binary mode to the Subversion repository.

    name
    file/directory name to be added (string)
    isDir
    flag indicating name is a directory (boolean)

    Subversion.vcsAddTree

    vcsAddTree(path)

    Public method to add a directory tree rooted at path to the Subversion repository.

    path
    root directory of the tree to be added (string or list of strings))

    Subversion.vcsAllRegisteredStates

    vcsAllRegisteredStates(names, dname, shortcut = True)

    Public method used to get the registered states of a number of files in the vcs.

    Note: If a shortcut is to be taken, the code will only check, if the named directory has been scanned already. If so, it is assumed, that the states for all files has been populated by the previous run.

    names
    dictionary with all filenames to be checked as keys
    dname
    directory to check in (string)
    shortcut
    flag indicating a shortcut should be taken (boolean)
    Returns:
    the received dictionary completed with a combination of canBeCommited and canBeAdded or None in order to signal an error

    Subversion.vcsCheckout

    vcsCheckout(vcsDataDict, projectDir, noDialog = False)

    Public method used to check the project out of the Subversion repository.

    vcsDataDict
    dictionary of data required for the checkout
    projectDir
    project directory to create (string)
    noDialog
    flag indicating quiet operations
    Returns:
    flag indicating an execution without errors (boolean)

    Subversion.vcsCleanup

    vcsCleanup(name)

    Public method used to cleanup the working copy.

    name
    directory name to be cleaned up (string)

    Subversion.vcsCommandLine

    vcsCommandLine(name)

    Public method used to execute arbitrary subversion commands.

    name
    directory name of the working directory (string)

    Subversion.vcsCommit

    vcsCommit(name, message, noDialog = False)

    Public method used to make the change of a file/directory permanent in the Subversion repository.

    name
    file/directory name to be committed (string or list of strings)
    message
    message for this operation (string)
    noDialog
    flag indicating quiet operations

    Subversion.vcsConvertProject

    vcsConvertProject(vcsDataDict, project)

    Public method to convert an uncontrolled project to a version controlled project.

    vcsDataDict
    dictionary of data required for the conversion
    project
    reference to the project object

    Subversion.vcsDiff

    vcsDiff(name)

    Public method used to view the difference of a file/directory to the Subversion repository.

    If name is a directory and is the project directory, all project files are saved first. If name is a file (or list of files), which is/are being edited and has unsaved modification, they can be saved or the operation may be aborted.

    name
    file/directory name to be diffed (string)

    Subversion.vcsExists

    vcsExists()

    Public method used to test for the presence of the svn executable.

    Returns:
    flag indicating the existance (boolean) and an error message (QString)

    Subversion.vcsExport

    vcsExport(vcsDataDict, projectDir)

    Public method used to export a directory from the Subversion repository.

    vcsDataDict
    dictionary of data required for the checkout
    projectDir
    project directory to create (string)
    Returns:
    flag indicating an execution without errors (boolean)

    Subversion.vcsGetProjectBrowserHelper

    vcsGetProjectBrowserHelper(browser, project, isTranslationsBrowser = False)

    Public method to instanciate a helper object for the different project browsers.

    browser
    reference to the project browser object
    project
    reference to the project object
    isTranslationsBrowser
    flag indicating, the helper is requested for the translations browser (this needs some special treatment)
    Returns:
    the project browser helper object

    Subversion.vcsGetProjectHelper

    vcsGetProjectHelper(project)

    Public method to instanciate a helper object for the project.

    project
    reference to the project object
    Returns:
    the project helper object

    Subversion.vcsImport

    vcsImport(vcsDataDict, projectDir, noDialog = False)

    Public method used to import the project into the Subversion repository.

    vcsDataDict
    dictionary of data required for the import
    projectDir
    project directory (string)
    noDialog
    flag indicating quiet operations
    Returns:
    flag indicating an execution without errors (boolean) and a flag indicating the version controll status (boolean)

    Subversion.vcsInit

    vcsInit(vcsDir, noDialog = False)

    Public method used to initialize the subversion repository.

    The subversion repository has to be initialized from outside eric4 because the respective command always works locally. Therefore we always return TRUE without doing anything.

    vcsDir
    name of the VCS directory (string)
    noDialog
    flag indicating quiet operations (boolean)
    Returns:
    always TRUE

    Subversion.vcsInitConfig

    vcsInitConfig(project)

    Public method to initialize the VCS configuration.

    This method ensures, that eric specific files and directories are ignored.

    project
    reference to the project (Project)

    Subversion.vcsLog

    vcsLog(name)

    Public method used to view the log of a file/directory from the Subversion repository.

    name
    file/directory name to show the log of (string)

    Subversion.vcsMerge

    vcsMerge(name)

    Public method used to merge a URL/revision into the local project.

    name
    file/directory name to be merged (string)

    Subversion.vcsMove

    vcsMove(name, project, target = None, noDialog = False)

    Public method used to move a file/directory.

    name
    file/directory name to be moved (string)
    project
    reference to the project object
    target
    new name of the file/directory (string)
    noDialog
    flag indicating quiet operations
    Returns:
    flag indicating successfull operation (boolean)

    Subversion.vcsName

    vcsName()

    Public method returning the name of the vcs.

    Returns:
    always 'Subversion' (string)

    Subversion.vcsNewProjectOptionsDialog

    vcsNewProjectOptionsDialog(parent = None)

    Public method to get a dialog to enter repository info for getting a new project.

    parent
    parent widget (QWidget)

    Subversion.vcsOptionsDialog

    vcsOptionsDialog(project, archive, editable = False, parent = None)

    Public method to get a dialog to enter repository info.

    project
    reference to the project object
    archive
    name of the project in the repository (string)
    editable
    flag indicating that the project name is editable (boolean)
    parent
    parent widget (QWidget)

    Subversion.vcsRegisteredState

    vcsRegisteredState(name)

    Public method used to get the registered state of a file in the vcs.

    name
    filename to check (string or QString)
    Returns:
    a combination of canBeCommited and canBeAdded

    Subversion.vcsRemove

    vcsRemove(name, project = False, noDialog = False)

    Public method used to remove a file/directory from the Subversion repository.

    The default operation is to remove the local copy as well.

    name
    file/directory name to be removed (string or list of strings))
    project
    flag indicating deletion of a project tree (boolean) (not needed)
    noDialog
    flag indicating quiet operations
    Returns:
    flag indicating successfull operation (boolean)

    Subversion.vcsRepositoryInfos

    vcsRepositoryInfos(ppath)

    Public method to retrieve information about the repository.

    ppath
    local path to get the repository infos (string)
    Returns:
    string with ready formated info for display (QString)

    Subversion.vcsRevert

    vcsRevert(name)

    Public method used to revert changes made to a file/directory.

    name
    file/directory name to be reverted (string)

    Subversion.vcsShutdown

    vcsShutdown()

    Public method used to shutdown the Subversion interface.

    Subversion.vcsStatus

    vcsStatus(name)

    Public method used to view the status of files/directories in the Subversion repository.

    name
    file/directory name(s) to show the status of (string or list of strings)

    Subversion.vcsSwitch

    vcsSwitch(name)

    Public method used to switch a directory to a different tag/branch.

    name
    directory name to be switched (string)

    Subversion.vcsTag

    vcsTag(name)

    Public method used to set the tag of a file/directory in the Subversion repository.

    name
    file/directory name to be tagged (string)

    Subversion.vcsUpdate

    vcsUpdate(name, noDialog = False)

    Public method used to update a file/directory with the Subversion repository.

    name
    file/directory name to be updated (string or list of strings)
    noDialog
    flag indicating quiet operations (boolean)
    Returns:
    flag indicating, that the update contained an add or delete (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.HelpWindow.html0000644000175000001440000000013212261331351026643 xustar000000000000000030 mtime=1388688105.395228504 30 atime=1389081085.131724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.HelpWindow.html0000644000175000001440000015105112261331351026400 0ustar00detlevusers00000000000000 eric4.Helpviewer.HelpWindow

    eric4.Helpviewer.HelpWindow

    Module implementing the helpviewer main window.

    Global Attributes

    None

    Classes

    HelpWindow Class implementing the web browser main window.

    Functions

    None


    HelpWindow

    Class implementing the web browser main window.

    Signals

    helpClosed()
    emitted after the window was requested to close down
    zoomTextOnlyChanged(bool)
    emitted after the zoom text only setting was changed

    Derived from

    KQMainWindow

    Class Attributes

    _adblockManager
    _bookmarksManager
    _cookieJar
    _helpEngine
    _historyManager
    _networkAccessManager
    _passwordManager
    helpwindows
    maxMenuFilePathLen

    Class Methods

    adblockManager Class method to get a reference to the AdBlock manager.
    bookmarksManager Class method to get a reference to the bookmarks manager.
    cookieJar Class method to get a reference to the cookie jar.
    helpEngine Class method to get a reference to the help engine.
    historyManager Class method to get a reference to the history manager.
    icon Class method to get the icon for an URL.
    networkAccessManager Class method to get a reference to the network access manager.
    passwordManager Class method to get a reference to the password manager.

    Methods

    HelpWindow Constructor
    __about Private slot to show the about information.
    __aboutQt Private slot to show info about Qt.
    __activateCurrentBrowser Private slot to activate the current browser.
    __activateDock Private method to activate the dock widget of the given widget.
    __addBookmark Private slot called to add the displayed file to the bookmarks.
    __addBookmarkFolder Private slot to add a new bookmarks folder.
    __backward Private slot called to handle the backward action.
    __bookmarkAll Private slot to bookmark all open tabs.
    __clearIconsDatabase Private slot to clear the icons databse.
    __clearPrivateData Private slot to clear the private data.
    __close Private slot called to handle the close action.
    __closeAll Private slot called to handle the close all action.
    __closeAt Private slot to close a window based on its index.
    __closeNetworkMonitor Private slot to close the network monitor dialog.
    __copy Private slot called to handle the copy action.
    __currentChanged Private slot to handle the currentChanged signal.
    __docsInstalled Private slot handling the end of documentation installation.
    __elide Private method to elide some text.
    __filterQtHelpDocumentation Private slot to filter the QtHelp documentation.
    __find Private slot to handle the find action.
    __forward Private slot called to handle the forward action.
    __guessUrlFromPath Private method to guess an URL given a path string.
    __hideIndexWindow Private method to hide the index window.
    __hideSearchWindow Private method to hide the search window.
    __hideTocWindow Private method to hide the table of contents window.
    __home Private slot called to handle the home action.
    __indexingFinished Private slot to handle the start of the indexing process.
    __indexingStarted Private slot to handle the start of the indexing process.
    __initActions Private method to define the user interface actions.
    __initHelpDb Private slot to initialize the documentation database.
    __initMenus Private method to create the menus.
    __initTabContextMenu Private mezhod to create the tab context menu.
    __initToolbars Private method to create the toolbars.
    __initWebSettings Private method to set the global web settings.
    __isFullScreen Private method to determine, if the window is in full screen mode.
    __linkActivated Private slot to handle the selection of a link in the TOC window.
    __linksActivated Private slot to select a topic to be shown.
    __lookForNewDocumentation Private slot to look for new documentation to be loaded into the help database.
    __manageQtHelpDocumentation Private slot to manage the QtHelp documentation database.
    __manageQtHelpFilters Private slot to manage the QtHelp filters.
    __navigationMenuActionTriggered Private slot to go to the selected page.
    __navigationMenuTriggered Private slot called to handle the navigation button menu selection.
    __nextTab Private slot used to show the next tab.
    __openFile Private slot called to open a file.
    __openFileNewTab Private slot called to open a file in a new tab.
    __openUrl Private slot to load a URL from the bookmarks menu or bookmarks toolbar in the current tab.
    __openUrlNewTab Private slot to load a URL from the bookmarks menu or bookmarks toolbar in a new tab.
    __pathSelected Private slot called when a file is selected in the combobox.
    __prevTab Private slot used to show the previous tab.
    __printFile Private slot called to print the displayed file.
    __printPreview Public slot to generate a print preview.
    __printPreviewFile Private slot called to show a print preview of the displayed file.
    __printRequested Private slot to handle a print request.
    __privateBrowsing Private slot to switch private browsing.
    __reload Private slot called to handle the reload action.
    __removeOldHistory Private method to remove the old history from the eric4 preferences file.
    __savePageAs Private slot to save the current page.
    __searchForWord Private slot to search for a word.
    __setBackwardAvailable Private slot called when backward references are available.
    __setForwardAvailable Private slot called when forward references are available.
    __setIconDatabasePath Private method to set the favicons path.
    __setLoadingActions Private slot to set the loading dependent actions.
    __setPathComboBackground Private slot to change the path combo background to indicate save URLs.
    __setupFilterCombo Private slot to setup the filter combo box.
    __showAcceptedLanguages Private slot to configure the accepted languages for web pages.
    __showAdBlockDialog Private slot to show the AdBlock configuration dialog.
    __showBackMenu Private slot showing the backwards navigation menu.
    __showBookmarksDialog Private slot to show the bookmarks dialog.
    __showContextMenu Private slot to show the tab context menu.
    __showCookiesConfiguration Private slot to configure the cookies handling.
    __showEnginesConfigurationDialog Private slot to show the search engines configuration dialog.
    __showForwardMenu Private slot showing the forwards navigation menu.
    __showHistoryMenu Private slot called in order to show the history menu.
    __showIndexWindow Private method to show the index window.
    __showInstallationError Private slot to show installation errors.
    __showNavigationMenu Private slot to show the navigation button menu.
    __showNetworkMonitor Private slot to show the network monitor dialog.
    __showPageSource Private slot to show the source of the current page in an editor.
    __showPasswordsDialog Private slot to show the passwords management dialog.
    __showPreferences Private slot to set the preferences.
    __showSearchWindow Private method to show the search window.
    __showTocWindow Private method to show the table of contents window.
    __sourceChanged Private slot called when the displayed text of the combobox is changed.
    __stopLoading Private slot called to handle loading of the current page.
    __switchTab Private slot used to switch between the current and the previous current tab.
    __syncTOC Private slot to synchronize the TOC with the currently shown page.
    __tabContextMenuClone Private method to clone the selected tab.
    __tabContextMenuClose Private method to close the selected tab.
    __tabContextMenuCloseOthers Private slot to close all other tabs.
    __tabContextMenuMoveLeft Private method to move a tab one position to the left.
    __tabContextMenuMoveRight Private method to move a tab one position to the right.
    __tabContextMenuPrint Private method to print the selected tab.
    __tabContextMenuPrintPreview Private method to show a print preview of the selected tab.
    __titleChanged Private slot called to handle a change of the current browsers title.
    __viewFullScreen Private slot called to toggle fullscreen mode.
    __warning Private slot handling warnings from the help engine.
    __whatsThis Private slot called in to enter Whats This mode.
    __windowCloseRequested Private slot to handle the windowCloseRequested signal of a browser.
    __zoomIn Private slot called to handle the zoom in action.
    __zoomOut Private slot called to handle the zoom out action.
    __zoomReset Private slot called to handle the zoom reset action.
    __zoomTextOnly Private slot called to handle the zoom text only action.
    browsers Public method to get a list of references to all help browsers.
    closeEvent Private event handler for the close event.
    currentBrowser Public method to get a reference to the current help browser.
    getActions Public method to get a list of all actions.
    getSourceFileList Public method to get a list of all opened source files.
    iconChanged Public slot to change the icon shown to the left of the URL entry.
    mousePressEvent Protected method called by a mouse press event.
    newBrowser Public method to create a new help browser tab.
    newTab Public slot called to open a new help window tab.
    newWindow Public slot called to open a new help browser dialog.
    openSearchManager Public method to get a reference to the opensearch manager object.
    preferencesChanged Public slot to handle a change of preferences.
    progressBar Public method to get a reference to the load progress bar.
    resetLoading Public method to reset the loading icon.
    search Public method to search for a word.
    searchEnginesAction Public method to get a reference to the search engines configuration action.
    setLoading Public method to set the loading icon.

    Static Methods

    __getWebIcon Private static method to fetch the icon for a URL.

    HelpWindow.adblockManager (class method)

    adblockManager()

    Class method to get a reference to the AdBlock manager.

    Returns:
    reference to the AdBlock manager (AdBlockManager)

    HelpWindow.bookmarksManager (class method)

    bookmarksManager()

    Class method to get a reference to the bookmarks manager.

    Returns:
    reference to the bookmarks manager (BookmarksManager)

    HelpWindow.cookieJar (class method)

    cookieJar()

    Class method to get a reference to the cookie jar.

    Returns:
    reference to the cookie jar (CookieJar)

    HelpWindow.helpEngine (class method)

    helpEngine()

    Class method to get a reference to the help engine.

    Returns:
    reference to the help engine (QHelpEngine)

    HelpWindow.historyManager (class method)

    historyManager()

    Class method to get a reference to the history manager.

    Returns:
    reference to the history manager (HistoryManager)

    HelpWindow.icon (class method)

    icon(url)

    Class method to get the icon for an URL.

    url
    URL to get icon for (QUrl)
    Returns:
    icon for the URL (QIcon)

    HelpWindow.networkAccessManager (class method)

    networkAccessManager()

    Class method to get a reference to the network access manager.

    Returns:
    reference to the network access manager (NetworkAccessManager)

    HelpWindow.passwordManager (class method)

    passwordManager()

    Class method to get a reference to the password manager.

    Returns:
    reference to the password manager (PasswordManager)

    HelpWindow (Constructor)

    HelpWindow(home, path, parent, name, fromEric = False, initShortcutsOnly = False, searchWord = None)

    Constructor

    home
    the URL to be shown (string or QString)
    path
    the path of the working dir (usually '.') (string or QString)
    parent
    parent widget of this window (QWidget)
    name
    name of this window (string or QString)
    fromEric
    flag indicating whether it was called from within eric4 (boolean)
    initShortcutsOnly=
    flag indicating to just initialize the keyboard shortcuts (boolean)
    searchWord=
    word to search for (string or QString)

    HelpWindow.__about

    __about()

    Private slot to show the about information.

    HelpWindow.__aboutQt

    __aboutQt()

    Private slot to show info about Qt.

    HelpWindow.__activateCurrentBrowser

    __activateCurrentBrowser()

    Private slot to activate the current browser.

    HelpWindow.__activateDock

    __activateDock(widget)

    Private method to activate the dock widget of the given widget.

    widget
    reference to the widget to be activated (QWidget)

    HelpWindow.__addBookmark

    __addBookmark()

    Private slot called to add the displayed file to the bookmarks.

    HelpWindow.__addBookmarkFolder

    __addBookmarkFolder()

    Private slot to add a new bookmarks folder.

    HelpWindow.__backward

    __backward()

    Private slot called to handle the backward action.

    HelpWindow.__bookmarkAll

    __bookmarkAll()

    Private slot to bookmark all open tabs.

    HelpWindow.__clearIconsDatabase

    __clearIconsDatabase()

    Private slot to clear the icons databse.

    HelpWindow.__clearPrivateData

    __clearPrivateData()

    Private slot to clear the private data.

    HelpWindow.__close

    __close()

    Private slot called to handle the close action.

    HelpWindow.__closeAll

    __closeAll()

    Private slot called to handle the close all action.

    HelpWindow.__closeAt

    __closeAt(index)

    Private slot to close a window based on its index.

    index
    index of window to close (integer)

    HelpWindow.__closeNetworkMonitor

    __closeNetworkMonitor()

    Private slot to close the network monitor dialog.

    HelpWindow.__copy

    __copy()

    Private slot called to handle the copy action.

    HelpWindow.__currentChanged

    __currentChanged(index)

    Private slot to handle the currentChanged signal.

    index
    index of the current tab

    HelpWindow.__docsInstalled

    __docsInstalled(installed)

    Private slot handling the end of documentation installation.

    installed
    flag indicating that documents were installed (boolean)

    HelpWindow.__elide

    __elide(txt, mode = Qt.ElideRight, length = 40)

    Private method to elide some text.

    txt
    text to be elided (string or QString)
    mode=
    elide mode (Qt.TextElideMode)
    length=
    amount of characters to be used (integer)
    Returns:
    the elided text (QString)

    HelpWindow.__filterQtHelpDocumentation

    __filterQtHelpDocumentation(customFilter)

    Private slot to filter the QtHelp documentation.

    customFilter
    name of filter to be applied (QString)

    HelpWindow.__find

    __find()

    Private slot to handle the find action.

    It opens the search dialog in order to perform the various search actions and to collect the various search info.

    HelpWindow.__forward

    __forward()

    Private slot called to handle the forward action.

    HelpWindow.__guessUrlFromPath

    __guessUrlFromPath(path)

    Private method to guess an URL given a path string.

    path
    path string to guess an URL for (QString)
    Returns:
    guessed URL (QUrl)

    HelpWindow.__hideIndexWindow

    __hideIndexWindow()

    Private method to hide the index window.

    HelpWindow.__hideSearchWindow

    __hideSearchWindow()

    Private method to hide the search window.

    HelpWindow.__hideTocWindow

    __hideTocWindow()

    Private method to hide the table of contents window.

    HelpWindow.__home

    __home()

    Private slot called to handle the home action.

    HelpWindow.__indexingFinished

    __indexingFinished()

    Private slot to handle the start of the indexing process.

    HelpWindow.__indexingStarted

    __indexingStarted()

    Private slot to handle the start of the indexing process.

    HelpWindow.__initActions

    __initActions()

    Private method to define the user interface actions.

    HelpWindow.__initHelpDb

    __initHelpDb()

    Private slot to initialize the documentation database.

    HelpWindow.__initMenus

    __initMenus()

    Private method to create the menus.

    HelpWindow.__initTabContextMenu

    __initTabContextMenu()

    Private mezhod to create the tab context menu.

    HelpWindow.__initToolbars

    __initToolbars()

    Private method to create the toolbars.

    HelpWindow.__initWebSettings

    __initWebSettings()

    Private method to set the global web settings.

    HelpWindow.__isFullScreen

    __isFullScreen()

    Private method to determine, if the window is in full screen mode.

    Returns:
    flag indicating full screen mode (boolean)

    HelpWindow.__linkActivated

    __linkActivated(url)

    Private slot to handle the selection of a link in the TOC window.

    url
    URL to be shown (QUrl)

    HelpWindow.__linksActivated

    __linksActivated(links, keyword)

    Private slot to select a topic to be shown.

    links
    dictionary with help topic as key (QString) and URL as value (QUrl)
    keyword
    keyword for the link set (QString)

    HelpWindow.__lookForNewDocumentation

    __lookForNewDocumentation()

    Private slot to look for new documentation to be loaded into the help database.

    HelpWindow.__manageQtHelpDocumentation

    __manageQtHelpDocumentation()

    Private slot to manage the QtHelp documentation database.

    HelpWindow.__manageQtHelpFilters

    __manageQtHelpFilters()

    Private slot to manage the QtHelp filters.

    HelpWindow.__navigationMenuActionTriggered

    __navigationMenuActionTriggered(act)

    Private slot to go to the selected page.

    act
    reference to the action selected in the navigation menu (QAction)

    HelpWindow.__navigationMenuTriggered

    __navigationMenuTriggered(act)

    Private slot called to handle the navigation button menu selection.

    act
    reference to the selected action (QAction)

    HelpWindow.__nextTab

    __nextTab()

    Private slot used to show the next tab.

    HelpWindow.__openFile

    __openFile()

    Private slot called to open a file.

    HelpWindow.__openFileNewTab

    __openFileNewTab()

    Private slot called to open a file in a new tab.

    HelpWindow.__openUrl

    __openUrl(url, title)

    Private slot to load a URL from the bookmarks menu or bookmarks toolbar in the current tab.

    url
    url to be opened (QUrl)
    title
    title of the bookmark (QString)

    HelpWindow.__openUrlNewTab

    __openUrlNewTab(url, title)

    Private slot to load a URL from the bookmarks menu or bookmarks toolbar in a new tab.

    url
    url to be opened (QUrl)
    title
    title of the bookmark (QString)

    HelpWindow.__pathSelected

    __pathSelected(path)

    Private slot called when a file is selected in the combobox.

    path
    path to be shown (string or QString)

    HelpWindow.__prevTab

    __prevTab()

    Private slot used to show the previous tab.

    HelpWindow.__printFile

    __printFile(browser = None)

    Private slot called to print the displayed file.

    browser
    reference to the browser to be printed (QTextEdit)

    HelpWindow.__printPreview

    __printPreview(printer)

    Public slot to generate a print preview.

    printer
    reference to the printer object (QPrinter)

    HelpWindow.__printPreviewFile

    __printPreviewFile(browser = None)

    Private slot called to show a print preview of the displayed file.

    browser
    reference to the browser to be printed (QTextEdit)

    HelpWindow.__printRequested

    __printRequested(frame)

    Private slot to handle a print request.

    frame
    reference to the frame to be printed (QWebFrame)

    HelpWindow.__privateBrowsing

    __privateBrowsing()

    Private slot to switch private browsing.

    HelpWindow.__reload

    __reload()

    Private slot called to handle the reload action.

    HelpWindow.__removeOldHistory

    __removeOldHistory()

    Private method to remove the old history from the eric4 preferences file.

    HelpWindow.__savePageAs

    __savePageAs()

    Private slot to save the current page.

    HelpWindow.__searchForWord

    __searchForWord()

    Private slot to search for a word.

    HelpWindow.__setBackwardAvailable

    __setBackwardAvailable(b)

    Private slot called when backward references are available.

    b
    flag indicating availability of the backwards action (boolean)

    HelpWindow.__setForwardAvailable

    __setForwardAvailable(b)

    Private slot called when forward references are available.

    b
    flag indicating the availability of the forwards action (boolean)

    HelpWindow.__setIconDatabasePath

    __setIconDatabasePath(enable = True)

    Private method to set the favicons path.

    enable
    flag indicating to enabled icon storage

    HelpWindow.__setLoadingActions

    __setLoadingActions(b)

    Private slot to set the loading dependent actions.

    b
    flag indicating the loading state to consider (boolean)

    HelpWindow.__setPathComboBackground

    __setPathComboBackground()

    Private slot to change the path combo background to indicate save URLs.

    HelpWindow.__setupFilterCombo

    __setupFilterCombo()

    Private slot to setup the filter combo box.

    HelpWindow.__showAcceptedLanguages

    __showAcceptedLanguages()

    Private slot to configure the accepted languages for web pages.

    HelpWindow.__showAdBlockDialog

    __showAdBlockDialog()

    Private slot to show the AdBlock configuration dialog.

    HelpWindow.__showBackMenu

    __showBackMenu()

    Private slot showing the backwards navigation menu.

    HelpWindow.__showBookmarksDialog

    __showBookmarksDialog()

    Private slot to show the bookmarks dialog.

    HelpWindow.__showContextMenu

    __showContextMenu(coord, index)

    Private slot to show the tab context menu.

    coord
    the position of the mouse pointer (QPoint)
    index
    index of the tab the menu is requested for (integer)

    HelpWindow.__showCookiesConfiguration

    __showCookiesConfiguration()

    Private slot to configure the cookies handling.

    HelpWindow.__showEnginesConfigurationDialog

    __showEnginesConfigurationDialog()

    Private slot to show the search engines configuration dialog.

    HelpWindow.__showForwardMenu

    __showForwardMenu()

    Private slot showing the forwards navigation menu.

    HelpWindow.__showHistoryMenu

    __showHistoryMenu()

    Private slot called in order to show the history menu.

    HelpWindow.__showIndexWindow

    __showIndexWindow()

    Private method to show the index window.

    HelpWindow.__showInstallationError

    __showInstallationError(message)

    Private slot to show installation errors.

    message
    message to be shown (QString)

    HelpWindow.__showNavigationMenu

    __showNavigationMenu()

    Private slot to show the navigation button menu.

    HelpWindow.__showNetworkMonitor

    __showNetworkMonitor()

    Private slot to show the network monitor dialog.

    HelpWindow.__showPageSource

    __showPageSource()

    Private slot to show the source of the current page in an editor.

    HelpWindow.__showPasswordsDialog

    __showPasswordsDialog()

    Private slot to show the passwords management dialog.

    HelpWindow.__showPreferences

    __showPreferences()

    Private slot to set the preferences.

    HelpWindow.__showSearchWindow

    __showSearchWindow()

    Private method to show the search window.

    HelpWindow.__showTocWindow

    __showTocWindow()

    Private method to show the table of contents window.

    HelpWindow.__sourceChanged

    __sourceChanged(url)

    Private slot called when the displayed text of the combobox is changed.

    HelpWindow.__stopLoading

    __stopLoading()

    Private slot called to handle loading of the current page.

    HelpWindow.__switchTab

    __switchTab()

    Private slot used to switch between the current and the previous current tab.

    HelpWindow.__syncTOC

    __syncTOC()

    Private slot to synchronize the TOC with the currently shown page.

    HelpWindow.__tabContextMenuClone

    __tabContextMenuClone()

    Private method to clone the selected tab.

    HelpWindow.__tabContextMenuClose

    __tabContextMenuClose()

    Private method to close the selected tab.

    HelpWindow.__tabContextMenuCloseOthers

    __tabContextMenuCloseOthers()

    Private slot to close all other tabs.

    HelpWindow.__tabContextMenuMoveLeft

    __tabContextMenuMoveLeft()

    Private method to move a tab one position to the left.

    HelpWindow.__tabContextMenuMoveRight

    __tabContextMenuMoveRight()

    Private method to move a tab one position to the right.

    HelpWindow.__tabContextMenuPrint

    __tabContextMenuPrint()

    Private method to print the selected tab.

    HelpWindow.__tabContextMenuPrintPreview

    __tabContextMenuPrintPreview()

    Private method to show a print preview of the selected tab.

    HelpWindow.__titleChanged

    __titleChanged(title)

    Private slot called to handle a change of the current browsers title.

    title
    new title (QString)

    HelpWindow.__viewFullScreen

    __viewFullScreen()

    Private slot called to toggle fullscreen mode.

    HelpWindow.__warning

    __warning(msg)

    Private slot handling warnings from the help engine.

    msg
    message sent by the help engine (QString)

    HelpWindow.__whatsThis

    __whatsThis()

    Private slot called in to enter Whats This mode.

    HelpWindow.__windowCloseRequested

    __windowCloseRequested()

    Private slot to handle the windowCloseRequested signal of a browser.

    HelpWindow.__zoomIn

    __zoomIn()

    Private slot called to handle the zoom in action.

    HelpWindow.__zoomOut

    __zoomOut()

    Private slot called to handle the zoom out action.

    HelpWindow.__zoomReset

    __zoomReset()

    Private slot called to handle the zoom reset action.

    HelpWindow.__zoomTextOnly

    __zoomTextOnly(textOnly)

    Private slot called to handle the zoom text only action.

    textOnly
    flag indicating to zoom text only (boolean)

    HelpWindow.browsers

    browsers()

    Public method to get a list of references to all help browsers.

    Returns:
    list of references to help browsers (list of HelpBrowser)

    HelpWindow.closeEvent

    closeEvent(e)

    Private event handler for the close event.

    e
    the close event (QCloseEvent)
    This event is simply accepted after the history has been saved and all window references have been deleted.

    HelpWindow.currentBrowser

    currentBrowser()

    Public method to get a reference to the current help browser.

    Returns:
    reference to the current help browser (HelpBrowser)

    HelpWindow.getActions

    getActions()

    Public method to get a list of all actions.

    Returns:
    list of all actions (list of E4Action)

    HelpWindow.getSourceFileList

    getSourceFileList()

    Public method to get a list of all opened source files.

    Returns:
    dictionary with tab id as key and host/namespace as value

    HelpWindow.iconChanged

    iconChanged(icon)

    Public slot to change the icon shown to the left of the URL entry.

    icon
    icon to be shown (QIcon)

    HelpWindow.mousePressEvent

    mousePressEvent(evt)

    Protected method called by a mouse press event.

    evt
    reference to the mouse event (QMouseEvent)

    HelpWindow.newBrowser

    newBrowser(link)

    Public method to create a new help browser tab.

    link
    link to be shown (string or QString)

    HelpWindow.newTab

    newTab(link = None)

    Public slot called to open a new help window tab.

    link
    file to be displayed in the new window (string, QString or QUrl)

    HelpWindow.newWindow

    newWindow(link = None)

    Public slot called to open a new help browser dialog.

    link
    file to be displayed in the new window (QUrl)

    HelpWindow.openSearchManager

    openSearchManager()

    Public method to get a reference to the opensearch manager object.

    Returns:
    reference to the opensearch manager object (OpenSearchManager)

    HelpWindow.preferencesChanged

    preferencesChanged()

    Public slot to handle a change of preferences.

    HelpWindow.progressBar

    progressBar()

    Public method to get a reference to the load progress bar.

    Returns:
    reference to the load progress bar (QProgressBar)

    HelpWindow.resetLoading

    resetLoading(widget, ok)

    Public method to reset the loading icon.

    widget
    reference to the widget to reset the icon for (QWidget)
    ok
    flag indicating the result (boolean)

    HelpWindow.search

    search(word)

    Public method to search for a word.

    word
    word to search for (string or QString)

    HelpWindow.searchEnginesAction

    searchEnginesAction()

    Public method to get a reference to the search engines configuration action.

    Returns:
    reference to the search engines configuration action (QAction)

    HelpWindow.setLoading

    setLoading(widget)

    Public method to set the loading icon.

    widget
    reference to the widget to set the icon for (QWidget)

    HelpWindow.__getWebIcon (static)

    __getWebIcon()

    Private static method to fetch the icon for a URL.

    url
    URL to get icon for (QUrl)
    Returns:
    icon for the URL (QIcon)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.Exporters.__init__.html0000644000175000001440000000013012261331354030246 xustar000000000000000029 mtime=1388688108.41523002 29 atime=1389081085.13772436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.Exporters.__init__.html0000644000175000001440000000407012261331354030003 0ustar00detlevusers00000000000000 eric4.QScintilla.Exporters.__init__

    eric4.QScintilla.Exporters.__init__

    Package implementing exporters for various file formats.

    Global Attributes

    None

    Classes

    None

    Functions

    getExporter Module function to instantiate an exporter object for a given format.
    getSupportedFormats Module function to get a dictionary of supported exporters.


    getExporter

    getExporter(format, editor)

    Module function to instantiate an exporter object for a given format.

    format
    format of the exporter (string)
    editor
    reference to the editor object (QScintilla.Editor.Editor)
    Returns:
    reference to the instanciated exporter object (QScintilla.Exporter.Exporter)


    getSupportedFormats

    getSupportedFormats()

    Module function to get a dictionary of supported exporters.

    Returns:
    dictionary of supported exporters. The keys are the internal format names. The items are the display strings for the exporters (QString)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.KdeQt.__init__.html0000644000175000001440000000013212261331351025220 xustar000000000000000030 mtime=1388688105.515228564 30 atime=1389081085.139724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.KdeQt.__init__.html0000644000175000001440000001315112261331351024753 0ustar00detlevusers00000000000000 eric4.KdeQt.__init__

    eric4.KdeQt.__init__

    Package implementing compatibility modules for using KDE dialogs instead og Qt dialogs.

    The different modules try to import the KDE dialogs and implement interfaces, that are compatible with the standard Qt dialog APIs. If the import fails, the modules fall back to the standard Qt dialogs.

    In order for this package to work PyKDE must be installed (see http://www.riverbankcomputing.co.uk/pykde.

    Global Attributes

    None

    Classes

    None

    Functions

    __kdeIsKDE Public function to signal the availability of KDE4.
    __kdeKdeVersionString Public function to return the KDE4 version as a string.
    __kdePyKdeVersionString Public function to return the PyKDE4 version as a string.
    __qtIsKDE Private function to signal the availability of KDE.
    __qtKdeVersionString Private function to return the KDE version as a string.
    __qtPyKdeVersionString Private function to return the PyKDE version as a string.
    isKDE Public function to signal, if KDE usage is enabled.
    isKDEAvailable Public function to signal the availability of KDE.
    kdeVersionString Public function to return the KDE version as a string.
    pyKdeVersionString Public function to return the PyKDE version as a string.


    __kdeIsKDE

    __kdeIsKDE()

    Public function to signal the availability of KDE4.

    Returns:
    availability flag (always True)


    __kdeKdeVersionString

    __kdeKdeVersionString()

    Public function to return the KDE4 version as a string.

    Returns:
    KDE4 version as a string (QString)


    __kdePyKdeVersionString

    __kdePyKdeVersionString()

    Public function to return the PyKDE4 version as a string.

    Returns:
    PyKDE4 version as a string (QString)


    __qtIsKDE

    __qtIsKDE()

    Private function to signal the availability of KDE.

    Returns:
    availability flag (always False)


    __qtKdeVersionString

    __qtKdeVersionString()

    Private function to return the KDE version as a string.

    Returns:
    KDE version as a string (QString) (always empty)


    __qtPyKdeVersionString

    __qtPyKdeVersionString()

    Private function to return the PyKDE version as a string.

    Returns:
    PyKDE version as a string (QString) (always empty)


    isKDE

    isKDE()

    Public function to signal, if KDE usage is enabled.

    Returns:
    KDE support flag (always False)


    isKDEAvailable

    isKDEAvailable()

    Public function to signal the availability of KDE.

    Returns:
    availability flag (always False)


    kdeVersionString

    kdeVersionString()

    Public function to return the KDE version as a string.

    Returns:
    KDE version as a string (QString) (always empty)


    pyKdeVersionString

    pyKdeVersionString()

    Public function to return the PyKDE version as a string.

    Returns:
    PyKDE version as a string (QString) (always empty)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ConfigurationPages.EditorHi0000644000175000001440000000032112261331353031246 xustar0000000000000000119 path=eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.EditorHighlightingStylesPage.html 30 mtime=1388688107.435229528 30 atime=1389081085.139724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.EditorHighlightingStyles0000644000175000001440000003713212261331353034257 0ustar00detlevusers00000000000000 eric4.Preferences.ConfigurationPages.EditorHighlightingStylesPage

    eric4.Preferences.ConfigurationPages.EditorHighlightingStylesPage

    Module implementing the Editor Highlighting Styles configuration page.

    Global Attributes

    None

    Classes

    EditorHighlightingStylesPage Class implementing the Editor Highlighting Styles configuration page.

    Functions

    create Module function to create the configuration page.


    EditorHighlightingStylesPage

    Class implementing the Editor Highlighting Styles configuration page.

    Derived from

    ConfigurationPageBase, Ui_EditorHighlightingStylesPage

    Class Attributes

    FAMILYANDSIZE
    FAMILYONLY
    FONT
    SIZEONLY

    Class Methods

    None

    Methods

    EditorHighlightingStylesPage Constructor
    __allFontsButtonMenuTriggered Private slot used to change the font of all styles of a selected lexer.
    __changeFont Private slot to change the highlighter font.
    __exportStyles Private method to export the styles of the given lexers.
    __fontButtonMenuTriggered Private slot used to select the font of the selected style and lexer.
    __importStyles Private method to import the styles of the given lexers.
    __setToDefault Private method to set a specific style to its default values.
    on_allBackgroundColoursButton_clicked Private method used to select the background colour of all styles of a selected lexer.
    on_allDefaultButton_clicked Private method to set all styles to their default values.
    on_allEolFillButton_clicked Private method used to set the eolfill for all styles of a selected lexer.
    on_backgroundButton_clicked Private method used to select the background colour of the selected style and lexer.
    on_defaultButton_clicked Private method to set the current style to its default values.
    on_eolfillCheckBox_toggled Private method used to set the eolfill for the selected style and lexer.
    on_exportAllButton_clicked Private slot to export the styles of all lexers.
    on_exportCurrentButton_clicked Private slot to export the styles of the current lexer.
    on_foregroundButton_clicked Private method used to select the foreground colour of the selected style and lexer.
    on_importAllButton_clicked Private slot to import the styles of all lexers.
    on_importCurrentButton_clicked Private slot to import the styles of the current lexer.
    on_lexerLanguageComboBox_activated Private slot to fill the style combo of the source page.
    on_styleElementList_currentRowChanged Private method to set up the style element part of the source page.
    save Public slot to save the Editor Highlighting Styles configuration.
    saveState Public method to save the current state of the widget.
    setFont Local function to set the font.
    setSampleFont Local function to set the font of the sample text.
    setState Public method to set the state of the widget.

    Static Methods

    None

    EditorHighlightingStylesPage (Constructor)

    EditorHighlightingStylesPage(lexers)

    Constructor

    lexers
    reference to the lexers dictionary

    EditorHighlightingStylesPage.__allFontsButtonMenuTriggered

    __allFontsButtonMenuTriggered(act)

    Private slot used to change the font of all styles of a selected lexer.

    act
    reference to the triggering action (QAction)

    EditorHighlightingStylesPage.__changeFont

    __changeFont(doAll, familyOnly, sizeOnly)

    Private slot to change the highlighter font.

    doAll
    flag indicating to change the font for all styles (boolean)
    familyOnly
    flag indicating to set the font family only (boolean)
    sizeOnly
    flag indicating to set the font size only (boolean

    EditorHighlightingStylesPage.__exportStyles

    __exportStyles(lexers)

    Private method to export the styles of the given lexers.

    lexers
    list of lexer objects for which to export the styles

    EditorHighlightingStylesPage.__fontButtonMenuTriggered

    __fontButtonMenuTriggered(act)

    Private slot used to select the font of the selected style and lexer.

    act
    reference to the triggering action (QAction)

    EditorHighlightingStylesPage.__importStyles

    __importStyles(lexers)

    Private method to import the styles of the given lexers.

    lexers
    dictionary of lexer objects for which to import the styles

    EditorHighlightingStylesPage.__setToDefault

    __setToDefault(style)

    Private method to set a specific style to its default values.

    style
    style to be reset (integer)

    EditorHighlightingStylesPage.on_allBackgroundColoursButton_clicked

    on_allBackgroundColoursButton_clicked()

    Private method used to select the background colour of all styles of a selected lexer.

    EditorHighlightingStylesPage.on_allDefaultButton_clicked

    on_allDefaultButton_clicked()

    Private method to set all styles to their default values.

    EditorHighlightingStylesPage.on_allEolFillButton_clicked

    on_allEolFillButton_clicked()

    Private method used to set the eolfill for all styles of a selected lexer.

    EditorHighlightingStylesPage.on_backgroundButton_clicked

    on_backgroundButton_clicked()

    Private method used to select the background colour of the selected style and lexer.

    EditorHighlightingStylesPage.on_defaultButton_clicked

    on_defaultButton_clicked()

    Private method to set the current style to its default values.

    EditorHighlightingStylesPage.on_eolfillCheckBox_toggled

    on_eolfillCheckBox_toggled(b)

    Private method used to set the eolfill for the selected style and lexer.

    b
    Flag indicating enabled or disabled state.

    EditorHighlightingStylesPage.on_exportAllButton_clicked

    on_exportAllButton_clicked()

    Private slot to export the styles of all lexers.

    EditorHighlightingStylesPage.on_exportCurrentButton_clicked

    on_exportCurrentButton_clicked()

    Private slot to export the styles of the current lexer.

    EditorHighlightingStylesPage.on_foregroundButton_clicked

    on_foregroundButton_clicked()

    Private method used to select the foreground colour of the selected style and lexer.

    EditorHighlightingStylesPage.on_importAllButton_clicked

    on_importAllButton_clicked()

    Private slot to import the styles of all lexers.

    EditorHighlightingStylesPage.on_importCurrentButton_clicked

    on_importCurrentButton_clicked()

    Private slot to import the styles of the current lexer.

    EditorHighlightingStylesPage.on_lexerLanguageComboBox_activated

    on_lexerLanguageComboBox_activated(language)

    Private slot to fill the style combo of the source page.

    language
    The lexer language (string or QString)

    EditorHighlightingStylesPage.on_styleElementList_currentRowChanged

    on_styleElementList_currentRowChanged(index)

    Private method to set up the style element part of the source page.

    index
    the style index.

    EditorHighlightingStylesPage.save

    save()

    Public slot to save the Editor Highlighting Styles configuration.

    EditorHighlightingStylesPage.saveState

    saveState()

    Public method to save the current state of the widget.

    Returns:
    array containing the index of the selected lexer language (integer) and the index of the selected lexer entry (integer)

    EditorHighlightingStylesPage.setFont

    setFont(style, familyOnly, sizeOnly)

    Local function to set the font.

    font
    font to be set (QFont)
    style
    style to set the font for (integer)
    familyOnly
    flag indicating to set the font family only (boolean)
    sizeOnly
    flag indicating to set the font size only (boolean

    EditorHighlightingStylesPage.setSampleFont

    setSampleFont(familyOnly, sizeOnly)

    Local function to set the font of the sample text.

    font
    font to be set (QFont)
    familyOnly
    flag indicating to set the font family only (boolean)
    sizeOnly
    flag indicating to set the font size only (boolean

    EditorHighlightingStylesPage.setState

    setState(state)

    Public method to set the state of the widget.

    state
    state data generated by saveState


    create

    create(dlg)

    Module function to create the configuration page.

    dlg
    reference to the configuration dialog

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.UI.EmailDialog.html0000644000175000001440000000013212261331350025134 xustar000000000000000030 mtime=1388688104.905228258 30 atime=1389081085.140724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.UI.EmailDialog.html0000644000175000001440000001564412261331350024700 0ustar00detlevusers00000000000000 eric4.UI.EmailDialog

    eric4.UI.EmailDialog

    Module implementing a dialog to send bug reports.

    Global Attributes

    None

    Classes

    EmailDialog Class implementing a dialog to send bug reports.

    Functions

    None


    EmailDialog

    Class implementing a dialog to send bug reports.

    Derived from

    QDialog, Ui_EmailDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    EmailDialog Constructor
    __createMultipartMail Private method to create a multipart mail message.
    __createSimpleMail Private method to create a simple mail message.
    __sendmail Private method to actually send the message.
    attachFile Public method to add an attachment.
    keyPressEvent Re-implemented to handle the user pressing the escape key.
    on_addButton_clicked Private slot to handle the Add...
    on_buttonBox_clicked Private slot called by a button of the button box clicked.
    on_buttonBox_rejected Private slot to handle the rejected signal of the button box.
    on_deleteButton_clicked Private slot to handle the Delete button.
    on_message_textChanged Private slot to handle the textChanged signal of the message edit.
    on_sendButton_clicked Private slot to send the email message.
    on_subject_textChanged Private slot to handle the textChanged signal of the subject edit.

    Static Methods

    None

    EmailDialog (Constructor)

    EmailDialog(mode = "bug", parent = None)

    Constructor

    mode
    mode of this dialog (string, "bug" or "feature")
    parent
    parent widget of this dialog (QWidget)

    EmailDialog.__createMultipartMail

    __createMultipartMail()

    Private method to create a multipart mail message.

    Returns:
    string containing the mail message

    EmailDialog.__createSimpleMail

    __createSimpleMail()

    Private method to create a simple mail message.

    Returns:
    string containing the mail message

    EmailDialog.__sendmail

    __sendmail(msg)

    Private method to actually send the message.

    msg
    the message to be sent (string)
    Returns:
    flag indicating success (boolean)

    EmailDialog.attachFile

    attachFile(fname, deleteFile)

    Public method to add an attachment.

    fname
    name of the file to be attached (string or QString)
    deleteFile
    flag indicating to delete the file after it has been sent (boolean)

    EmailDialog.keyPressEvent

    keyPressEvent(ev)

    Re-implemented to handle the user pressing the escape key.

    ev
    key event (QKeyEvent)

    EmailDialog.on_addButton_clicked

    on_addButton_clicked()

    Private slot to handle the Add... button.

    EmailDialog.on_buttonBox_clicked

    on_buttonBox_clicked(button)

    Private slot called by a button of the button box clicked.

    button
    button that was clicked (QAbstractButton)

    EmailDialog.on_buttonBox_rejected

    on_buttonBox_rejected()

    Private slot to handle the rejected signal of the button box.

    EmailDialog.on_deleteButton_clicked

    on_deleteButton_clicked()

    Private slot to handle the Delete button.

    EmailDialog.on_message_textChanged

    on_message_textChanged()

    Private slot to handle the textChanged signal of the message edit.

    txt
    changed text (QString)

    EmailDialog.on_sendButton_clicked

    on_sendButton_clicked()

    Private slot to send the email message.

    EmailDialog.on_subject_textChanged

    on_subject_textChanged(txt)

    Private slot to handle the textChanged signal of the subject edit.

    txt
    changed text (QString)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.ViewManagerPlugins.Listspace.Li0000644000175000001440000000013112261331352031167 xustar000000000000000029 mtime=1388688106.74222918 30 atime=1389081085.140724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.ViewManagerPlugins.Listspace.Listspace.html0000644000175000001440000004524612261331352033263 0ustar00detlevusers00000000000000 eric4.Plugins.ViewManagerPlugins.Listspace.Listspace

    eric4.Plugins.ViewManagerPlugins.Listspace.Listspace

    Module implementing the listspace viewmanager class.

    Global Attributes

    None

    Classes

    Listspace Class implementing the listspace viewmanager class.
    StackedWidget Class implementing a custimized StackedWidget.

    Functions

    None


    Listspace

    Class implementing the listspace viewmanager class.

    Signals

    changeCaption(string)
    emitted if a change of the caption is necessary
    editorChanged(string)
    emitted when the current editor has changed

    Derived from

    QSplitter, ViewManager

    Class Attributes

    None

    Class Methods

    None

    Methods

    Listspace Constructor
    __captionChange Private method to handle caption change signals from the editor.
    __contextMenuClose Private method to close the selected tab.
    __contextMenuCloseAll Private method to close all tabs.
    __contextMenuPrintFile Private method to print the selected tab.
    __contextMenuSave Private method to save the selected tab.
    __contextMenuSaveAll Private method to save all tabs.
    __contextMenuSaveAs Private method to save the selected tab to a new file.
    __currentChanged Private slot to handle the currentChanged signal.
    __initMenu Private method to initialize the viewlist context menu.
    __showMenu Private slot to handle the customContextMenuRequested signal of the viewlist.
    __showSelectedView Private slot called to show a view selected in the list by a mouse click.
    _addView Protected method to add a view (i.e.
    _initWindowActions Protected method to define the user interface actions for window handling.
    _modificationStatusChanged Protected slot to handle the modificationStatusChanged signal.
    _removeAllViews Protected method to remove all views (i.e.
    _removeView Protected method to remove a view (i.e.
    _showView Protected method to show a view (i.e.
    _syntaxErrorToggled Protected slot to handle the syntaxerrorToggled signal.
    activeWindow Public method to return the active (i.e.
    addSplit Public method used to split the current view.
    canCascade Public method to signal if cascading of managed windows is available.
    canSplit public method to signal if splitting of the view is available.
    canTile Public method to signal if tiling of managed windows is available.
    cascade Public method to cascade the managed windows.
    eventFilter Method called to filter the event queue.
    nextSplit Public slot used to move to the next split.
    prevSplit Public slot used to move to the previous split.
    removeSplit Public method used to remove the current split view.
    setEditorName Change the displayed name of the editor.
    setSplitOrientation Public method used to set the orientation of the split view.
    showWindowMenu Public method to set up the viewmanager part of the Window menu.
    tile Public method to tile the managed windows.

    Static Methods

    None

    Listspace (Constructor)

    Listspace(parent)

    Constructor

    parent
    parent widget (QWidget)
    ui
    reference to the main user interface
    dbs
    reference to the debug server object

    Listspace.__captionChange

    __captionChange(cap, editor)

    Private method to handle caption change signals from the editor.

    Updates the listwidget text to reflect the new caption information.

    cap
    Caption for the editor
    editor
    Editor to update the caption for

    Listspace.__contextMenuClose

    __contextMenuClose()

    Private method to close the selected tab.

    Listspace.__contextMenuCloseAll

    __contextMenuCloseAll()

    Private method to close all tabs.

    Listspace.__contextMenuPrintFile

    __contextMenuPrintFile()

    Private method to print the selected tab.

    Listspace.__contextMenuSave

    __contextMenuSave()

    Private method to save the selected tab.

    Listspace.__contextMenuSaveAll

    __contextMenuSaveAll()

    Private method to save all tabs.

    Listspace.__contextMenuSaveAs

    __contextMenuSaveAs()

    Private method to save the selected tab to a new file.

    Listspace.__currentChanged

    __currentChanged(index)

    Private slot to handle the currentChanged signal.

    index
    index of the current editor

    Listspace.__initMenu

    __initMenu()

    Private method to initialize the viewlist context menu.

    Listspace.__showMenu

    __showMenu(point)

    Private slot to handle the customContextMenuRequested signal of the viewlist.

    Listspace.__showSelectedView

    __showSelectedView(itm)

    Private slot called to show a view selected in the list by a mouse click.

    itm
    item clicked on (QListWidgetItem)

    Listspace._addView

    _addView(win, fn = None, noName = "")

    Protected method to add a view (i.e. window)

    win
    editor window to be added
    fn
    filename of this editor
    noName
    name to be used for an unnamed editor (string or QString)

    Listspace._initWindowActions

    _initWindowActions()

    Protected method to define the user interface actions for window handling.

    Listspace._modificationStatusChanged

    _modificationStatusChanged(m, editor)

    Protected slot to handle the modificationStatusChanged signal.

    m
    flag indicating the modification status (boolean)
    editor
    editor window changed

    Listspace._removeAllViews

    _removeAllViews()

    Protected method to remove all views (i.e. windows)

    Listspace._removeView

    _removeView(win)

    Protected method to remove a view (i.e. window)

    win
    editor window to be removed

    Listspace._showView

    _showView(win, fn = None)

    Protected method to show a view (i.e. window)

    win
    editor window to be shown
    fn
    filename of this editor

    Listspace._syntaxErrorToggled

    _syntaxErrorToggled(editor)

    Protected slot to handle the syntaxerrorToggled signal.

    editor
    editor that sent the signal

    Listspace.activeWindow

    activeWindow()

    Public method to return the active (i.e. current) window.

    Returns:
    reference to the active editor

    Listspace.addSplit

    addSplit()

    Public method used to split the current view.

    Listspace.canCascade

    canCascade()

    Public method to signal if cascading of managed windows is available.

    Returns:
    flag indicating cascading of windows is available

    Listspace.canSplit

    canSplit()

    public method to signal if splitting of the view is available.

    Returns:
    flag indicating splitting of the view is available.

    Listspace.canTile

    canTile()

    Public method to signal if tiling of managed windows is available.

    Returns:
    flag indicating tiling of windows is available

    Listspace.cascade

    cascade()

    Public method to cascade the managed windows.

    Listspace.eventFilter

    eventFilter(watched, event)

    Method called to filter the event queue.

    watched
    the QObject being watched
    event
    the event that occurred
    Returns:
    flag indicating, if we handled the event

    Listspace.nextSplit

    nextSplit()

    Public slot used to move to the next split.

    Listspace.prevSplit

    prevSplit()

    Public slot used to move to the previous split.

    Listspace.removeSplit

    removeSplit()

    Public method used to remove the current split view.

    Returns:
    flag indicating successfull removal

    Listspace.setEditorName

    setEditorName(editor, newName)

    Change the displayed name of the editor.

    editor
    editor window to be changed
    newName
    new name to be shown (string or QString)

    Listspace.setSplitOrientation

    setSplitOrientation(orientation)

    Public method used to set the orientation of the split view.

    orientation
    orientation of the split (Qt.Horizontal or Qt.Vertical)

    Listspace.showWindowMenu

    showWindowMenu(windowMenu)

    Public method to set up the viewmanager part of the Window menu.

    windowMenu
    reference to the window menu

    Listspace.tile

    tile()

    Public method to tile the managed windows.



    StackedWidget

    Class implementing a custimized StackedWidget.

    Derived from

    QStackedWidget

    Class Attributes

    None

    Class Methods

    None

    Methods

    StackedWidget Constructor
    addWidget Overwritten method to add a new widget.
    firstEditor Public method to retrieve the first editor in the list of managed editors.
    hasEditor Public method to check for an editor.
    nextTab Public slot used to show the next tab.
    prevTab Public slot used to show the previous tab.
    removeWidget Overwritten method to remove a widget.
    setCurrentIndex Overwritten method to set the current widget by its index.
    setCurrentWidget Overwritten method to set the current widget.

    Static Methods

    None

    StackedWidget (Constructor)

    StackedWidget(parent)

    Constructor

    parent
    parent widget (QWidget)

    StackedWidget.addWidget

    addWidget(editor)

    Overwritten method to add a new widget.

    editor
    the editor object to be added (QScintilla.Editor.Editor)

    StackedWidget.firstEditor

    firstEditor()

    Public method to retrieve the first editor in the list of managed editors.

    Returns:
    first editor in list (QScintilla.Editor.Editor)

    StackedWidget.hasEditor

    hasEditor(editor)

    Public method to check for an editor.

    editor
    editor object to check for
    Returns:
    flag indicating, whether the editor to be checked belongs to the list of editors managed by this stacked widget.

    StackedWidget.nextTab

    nextTab()

    Public slot used to show the next tab.

    StackedWidget.prevTab

    prevTab()

    Public slot used to show the previous tab.

    StackedWidget.removeWidget

    removeWidget(widget)

    Overwritten method to remove a widget.

    widget
    widget to be removed (QWidget)

    StackedWidget.setCurrentIndex

    setCurrentIndex(index)

    Overwritten method to set the current widget by its index.

    index
    index of widget to be made current (integer)

    StackedWidget.setCurrentWidget

    setCurrentWidget(widget)

    Overwritten method to set the current widget.

    widget
    widget to be made current (QWidget)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsPySvn.SvnInfoDial0000644000175000001440000000013112261331353031172 xustar000000000000000030 mtime=1388688107.124229372 29 atime=1389081085.14172436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsPySvn.SvnInfoDialog.html0000644000175000001440000000545112261331353032223 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsPySvn.SvnInfoDialog

    eric4.Plugins.VcsPlugins.vcsPySvn.SvnInfoDialog

    Module implementing a dialog to show repository related information for a file/directory.

    Global Attributes

    None

    Classes

    SvnInfoDialog Class implementing a dialog to show repository related information for a file/directory.

    Functions

    None


    SvnInfoDialog

    Class implementing a dialog to show repository related information for a file/directory.

    Derived from

    QDialog, SvnDialogMixin, Ui_VcsRepositoryInfoDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnInfoDialog Constructor
    __showError Private slot to show an error message.
    start Public slot to start the svn info command.

    Static Methods

    None

    SvnInfoDialog (Constructor)

    SvnInfoDialog(vcs, parent = None)

    Constructor

    vcs
    reference to the vcs object
    parent
    parent widget (QWidget)

    SvnInfoDialog.__showError

    __showError(msg)

    Private slot to show an error message.

    msg
    error message to show (string or QString)

    SvnInfoDialog.start

    start(projectPath, fn)

    Public slot to start the svn info command.

    projectPath
    path name of the project (string)
    fn
    file or directory name relative to the project (string)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.PluginVmListspace.html0000644000175000001440000000013112261331350027501 xustar000000000000000030 mtime=1388688104.490228049 29 atime=1389081085.14172436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.PluginVmListspace.html0000644000175000001440000000631212261331350027236 0ustar00detlevusers00000000000000 eric4.Plugins.PluginVmListspace

    eric4.Plugins.PluginVmListspace

    Module implementing the Tabview view manager plugin.

    Global Attributes

    author
    autoactivate
    className
    deactivateable
    displayString
    error
    longDescription
    name
    packageName
    pluginType
    pluginTypename
    shortDescription
    version

    Classes

    VmListspacePlugin Class implementing the Listspace view manager plugin.

    Functions

    previewPix Module function to return a preview pixmap.


    VmListspacePlugin

    Class implementing the Listspace view manager plugin.

    Derived from

    object

    Class Attributes

    None

    Class Methods

    None

    Methods

    VmListspacePlugin Constructor
    activate Public method to activate this plugin.
    deactivate Public method to deactivate this plugin.

    Static Methods

    None

    VmListspacePlugin (Constructor)

    VmListspacePlugin(ui)

    Constructor

    ui
    reference to the user interface object (UI.UserInterface)

    VmListspacePlugin.activate

    activate()

    Public method to activate this plugin.

    Returns:
    tuple of reference to instantiated viewmanager and activation status (boolean)

    VmListspacePlugin.deactivate

    deactivate()

    Public method to deactivate this plugin.



    previewPix

    previewPix()

    Module function to return a preview pixmap.

    Returns:
    preview pixmap (QPixmap)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.eric4_tray.html0000644000175000001440000000013112261331350024515 xustar000000000000000030 mtime=1388688104.218227913 29 atime=1389081085.14172436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.eric4_tray.html0000644000175000001440000000332412261331350024252 0ustar00detlevusers00000000000000 eric4.eric4_tray

    eric4.eric4_tray

    Eric4 Tray

    This is the main Python script that performs the necessary initialization of the system-tray application. This acts as a quickstarter by providing a context menu to start the eric4 IDE and the eric4 tools.

    Global Attributes

    None

    Classes

    None

    Functions

    createMainWidget Function to create the main widget.
    main Main entry point into the application.


    createMainWidget

    createMainWidget(argv)

    Function to create the main widget.

    argv
    list of commandline parameters (list of strings)
    Returns:
    reference to the main widget (QWidget)


    main

    main()

    Main entry point into the application.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.GotoDialog.html0000644000175000001440000000013112261331352026544 xustar000000000000000030 mtime=1388688106.338228977 29 atime=1389081085.14172436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.GotoDialog.html0000644000175000001440000000451212261331352026301 0ustar00detlevusers00000000000000 eric4.QScintilla.GotoDialog

    eric4.QScintilla.GotoDialog

    Module implementing the Goto dialog.

    Global Attributes

    None

    Classes

    GotoDialog Class implementing the Goto dialog.

    Functions

    None


    GotoDialog

    Class implementing the Goto dialog.

    Derived from

    QDialog, Ui_GotoDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    GotoDialog Constructor
    getLinenumber Public method to retrieve the linenumber.

    Static Methods

    None

    GotoDialog (Constructor)

    GotoDialog(maximum, curLine, parent, name = None, modal = False)

    Constructor

    maximum
    maximum allowed for the spinbox (integer)
    curLine
    current line number (integer)
    parent
    parent widget of this dialog (QWidget)
    name
    name of this dialog (string or QString)
    modal
    flag indicating a modal dialog (boolean)

    GotoDialog.getLinenumber

    getLinenumber()

    Public method to retrieve the linenumber.

    Returns:
    line number (int)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.Lexers.LexerLua.html0000644000175000001440000000013112261331354027500 xustar000000000000000030 mtime=1388688108.536230081 29 atime=1389081085.14172436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.Lexers.LexerLua.html0000644000175000001440000000750412261331354027241 0ustar00detlevusers00000000000000 eric4.QScintilla.Lexers.LexerLua

    eric4.QScintilla.Lexers.LexerLua

    Module implementing a Lua lexer with some additional methods.

    Global Attributes

    None

    Classes

    LexerLua Subclass to implement some additional lexer dependant methods.

    Functions

    None


    LexerLua

    Subclass to implement some additional lexer dependant methods.

    Derived from

    QsciLexerLua, Lexer

    Class Attributes

    None

    Class Methods

    None

    Methods

    LexerLua Constructor
    autoCompletionWordSeparators Public method to return the list of separators for autocompletion.
    defaultKeywords Public method to get the default keywords.
    initProperties Public slot to initialize the properties.
    isCommentStyle Public method to check, if a style is a comment style.
    isStringStyle Public method to check, if a style is a string style.

    Static Methods

    None

    LexerLua (Constructor)

    LexerLua(parent=None)

    Constructor

    parent
    parent widget of this lexer

    LexerLua.autoCompletionWordSeparators

    autoCompletionWordSeparators()

    Public method to return the list of separators for autocompletion.

    Returns:
    list of separators (QStringList)

    LexerLua.defaultKeywords

    defaultKeywords(kwSet)

    Public method to get the default keywords.

    kwSet
    number of the keyword set (integer)
    Returns:
    string giving the keywords (string) or None

    LexerLua.initProperties

    initProperties()

    Public slot to initialize the properties.

    LexerLua.isCommentStyle

    isCommentStyle(style)

    Public method to check, if a style is a comment style.

    Returns:
    flag indicating a comment style (boolean)

    LexerLua.isStringStyle

    isStringStyle(style)

    Public method to check, if a style is a string style.

    Returns:
    flag indicating a string style (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.WizardPlugins.ColorDialogWizard0000644000175000001440000000032412261331353031314 xustar0000000000000000123 path=eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.WizardPlugins.ColorDialogWizard.ColorDialogWizardDialog.html 30 mtime=1388688107.354229487 29 atime=1389081085.14172436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.WizardPlugins.ColorDialogWizard.ColorDialogWiza0000644000175000001440000001176112261331353034101 0ustar00detlevusers00000000000000 eric4.Plugins.WizardPlugins.ColorDialogWizard.ColorDialogWizardDialog

    eric4.Plugins.WizardPlugins.ColorDialogWizard.ColorDialogWizardDialog

    Module implementing the color dialog wizard dialog.

    Global Attributes

    None

    Classes

    ColorDialogWizardDialog Class implementing the color dialog wizard dialog.

    Functions

    None


    ColorDialogWizardDialog

    Class implementing the color dialog wizard dialog.

    It displays a dialog for entering the parameters for the QColorDialog code generator.

    Derived from

    QDialog, Ui_ColorDialogWizardDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    ColorDialogWizardDialog Constructor
    getCode Public method to get the source code.
    on_bTest_clicked Private method to test the selected options.
    on_buttonBox_clicked Private slot called by a button of the button box clicked.
    on_eColor_editTextChanged Private slot to handle the editTextChanged signal of eColor.
    on_eRGB_textChanged Private slot to handle the textChanged signal of eRGB.
    on_rQt45_toggled Private slot to handle the toggled signal of the rQt45 radio button.

    Static Methods

    None

    ColorDialogWizardDialog (Constructor)

    ColorDialogWizardDialog(parent=None)

    Constructor

    parent
    parent widget (QWidget)

    ColorDialogWizardDialog.getCode

    getCode(indLevel, indString)

    Public method to get the source code.

    indLevel
    indentation level (int)
    indString
    string used for indentation (space or tab) (string)
    Returns:
    generated code (string)

    ColorDialogWizardDialog.on_bTest_clicked

    on_bTest_clicked()

    Private method to test the selected options.

    ColorDialogWizardDialog.on_buttonBox_clicked

    on_buttonBox_clicked(button)

    Private slot called by a button of the button box clicked.

    button
    button that was clicked (QAbstractButton)

    ColorDialogWizardDialog.on_eColor_editTextChanged

    on_eColor_editTextChanged(text)

    Private slot to handle the editTextChanged signal of eColor.

    text
    the new text (QString)

    ColorDialogWizardDialog.on_eRGB_textChanged

    on_eRGB_textChanged(text)

    Private slot to handle the textChanged signal of eRGB.

    text
    the new text (QString)

    ColorDialogWizardDialog.on_rQt45_toggled

    on_rQt45_toggled(on)

    Private slot to handle the toggled signal of the rQt45 radio button.

    on
    toggle state (boolean) (ignored)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.UI.BrowserSortFilterProxyModel.html0000644000175000001440000000013112261331351030451 xustar000000000000000030 mtime=1388688105.116228364 29 atime=1389081085.14272436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.UI.BrowserSortFilterProxyModel.html0000644000175000001440000001313612261331351030210 0ustar00detlevusers00000000000000 eric4.UI.BrowserSortFilterProxyModel

    eric4.UI.BrowserSortFilterProxyModel

    Module implementing the browser sort filter proxy model.

    Global Attributes

    None

    Classes

    BrowserSortFilterProxyModel Class implementing the browser sort filter proxy model.

    Functions

    None


    BrowserSortFilterProxyModel

    Class implementing the browser sort filter proxy model.

    Derived from

    QSortFilterProxyModel

    Class Attributes

    None

    Class Methods

    None

    Methods

    BrowserSortFilterProxyModel Constructor
    filterAcceptsRow Protected method to filter rows.
    hasChildren Public method to check for the presence of child items.
    item Public method to get a reference to an item.
    lessThan Protected method used to sort the displayed items.
    preferencesChanged Public slot called to handle a change of the preferences settings.
    sort Public method to sort the items.

    Static Methods

    None

    BrowserSortFilterProxyModel (Constructor)

    BrowserSortFilterProxyModel(parent = None)

    Constructor

    parent
    reference to the parent object (QObject)

    BrowserSortFilterProxyModel.filterAcceptsRow

    filterAcceptsRow(source_row, source_parent)

    Protected method to filter rows.

    It implements a filter to suppress the display of non public classes, methods and attributes.

    source_row
    row number (in the source model) of item (integer)
    source_parent
    index of parent item (in the source model) of item (QModelIndex)
    Returns:
    flag indicating, if the item should be shown (boolean)

    BrowserSortFilterProxyModel.hasChildren

    hasChildren(parent = QModelIndex())

    Public method to check for the presence of child items.

    We always return True for normal items in order to do lazy population of the tree.

    parent
    index of parent item (QModelIndex)
    Returns:
    flag indicating the presence of child items (boolean)

    BrowserSortFilterProxyModel.item

    item(index)

    Public method to get a reference to an item.

    index
    index of the data to retrieve (QModelIndex)
    Returns:
    requested item reference (BrowserItem)

    BrowserSortFilterProxyModel.lessThan

    lessThan(left, right)

    Protected method used to sort the displayed items.

    It implements a special sorting function that takes into account, if folders should be shown first, and that __init__ is always the first method of a class.

    left
    index of left item (QModelIndex)
    right
    index of right item (QModelIndex)
    Returns:
    true, if left is less than right (boolean)

    BrowserSortFilterProxyModel.preferencesChanged

    preferencesChanged()

    Public slot called to handle a change of the preferences settings.

    BrowserSortFilterProxyModel.sort

    sort(column, order)

    Public method to sort the items.

    column
    column number to sort on (integer)
    order
    sort order for the sort (Qt.SortOrder)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DocumentationTools.Config.html0000644000175000001440000000013212261331352027511 xustar000000000000000030 mtime=1388688106.071228843 30 atime=1389081085.149724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.DocumentationTools.Config.html0000644000175000001440000000165212261331352027247 0ustar00detlevusers00000000000000 eric4.DocumentationTools.Config

    eric4.DocumentationTools.Config

    Module defining different default values for the documentation tools package.

    Global Attributes

    eric4docColorParameterNames
    eric4docDefaultColors

    Classes

    None

    Functions

    None

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Graphics.UMLDialog.html0000644000175000001440000000013212261331350025765 xustar000000000000000030 mtime=1388688104.831228221 30 atime=1389081085.149724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Graphics.UMLDialog.html0000644000175000001440000000354112261331350025522 0ustar00detlevusers00000000000000 eric4.Graphics.UMLDialog

    eric4.Graphics.UMLDialog

    Module implementing a dialog showing UML like diagrams.

    Global Attributes

    None

    Classes

    UMLDialog Class implementing a dialog showing UML like diagrams.

    Functions

    None


    UMLDialog

    Class implementing a dialog showing UML like diagrams.

    Derived from

    KQMainWindow

    Class Attributes

    None

    Class Methods

    None

    Methods

    UMLDialog Constructor

    Static Methods

    None

    UMLDialog (Constructor)

    UMLDialog(diagramName = "Unnamed", parent = None, name = None)

    Constructor

    diagramName
    name of the diagram (string)
    parent
    parent widget of the view (QWidget)
    name
    name of the view widget (QString or string)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ConfigurationPages.EditorAP0000644000175000001440000000013212261331353031206 xustar000000000000000030 mtime=1388688107.491229556 30 atime=1389081085.149724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.EditorAPIsPage.html0000644000175000001440000002065512261331353033004 0ustar00detlevusers00000000000000 eric4.Preferences.ConfigurationPages.EditorAPIsPage

    eric4.Preferences.ConfigurationPages.EditorAPIsPage

    Module implementing the Editor APIs configuration page.

    Global Attributes

    None

    Classes

    EditorAPIsPage Class implementing the Editor APIs configuration page.

    Functions

    create Module function to create the configuration page.


    EditorAPIsPage

    Class implementing the Editor APIs configuration page.

    Derived from

    ConfigurationPageBase, Ui_EditorAPIsPage

    Class Attributes

    None

    Class Methods

    None

    Methods

    EditorAPIsPage Constructor
    __apiPreparationCancelled Private slot called after the API preparation has been cancelled.
    __apiPreparationFinished Private method called after the API preparation has finished.
    __apiPreparationStarted Private method called after the API preparation has started.
    __editorGetApisFromApiList Private slot to retrieve the api filenames from the list.
    on_addApiFileButton_clicked Private slot to add the api file displayed to the listbox.
    on_addInstalledApiFileButton_clicked Private slot to add an API file from the list of installed API files for the selected lexer language.
    on_addPluginApiFileButton_clicked Private slot to add an API file from the list of API files installed by plugins for the selected lexer language.
    on_apiFileButton_clicked Private method to select an api file.
    on_apiLanguageComboBox_activated Private slot to fill the api listbox of the api page.
    on_deleteApiFileButton_clicked Private slot to delete the currently selected file of the listbox.
    on_prepareApiButton_clicked Private slot to prepare the API file for the currently selected language.
    save Public slot to save the Editor APIs configuration.
    saveState Public method to save the current state of the widget.
    setState Public method to set the state of the widget.

    Static Methods

    None

    EditorAPIsPage (Constructor)

    EditorAPIsPage()

    Constructor

    EditorAPIsPage.__apiPreparationCancelled

    __apiPreparationCancelled()

    Private slot called after the API preparation has been cancelled.

    EditorAPIsPage.__apiPreparationFinished

    __apiPreparationFinished()

    Private method called after the API preparation has finished.

    EditorAPIsPage.__apiPreparationStarted

    __apiPreparationStarted()

    Private method called after the API preparation has started.

    EditorAPIsPage.__editorGetApisFromApiList

    __editorGetApisFromApiList()

    Private slot to retrieve the api filenames from the list.

    Returns:
    list of api filenames (QStringList)

    EditorAPIsPage.on_addApiFileButton_clicked

    on_addApiFileButton_clicked()

    Private slot to add the api file displayed to the listbox.

    EditorAPIsPage.on_addInstalledApiFileButton_clicked

    on_addInstalledApiFileButton_clicked()

    Private slot to add an API file from the list of installed API files for the selected lexer language.

    EditorAPIsPage.on_addPluginApiFileButton_clicked

    on_addPluginApiFileButton_clicked()

    Private slot to add an API file from the list of API files installed by plugins for the selected lexer language.

    EditorAPIsPage.on_apiFileButton_clicked

    on_apiFileButton_clicked()

    Private method to select an api file.

    EditorAPIsPage.on_apiLanguageComboBox_activated

    on_apiLanguageComboBox_activated(language)

    Private slot to fill the api listbox of the api page.

    language
    selected API language (QString)

    EditorAPIsPage.on_deleteApiFileButton_clicked

    on_deleteApiFileButton_clicked()

    Private slot to delete the currently selected file of the listbox.

    EditorAPIsPage.on_prepareApiButton_clicked

    on_prepareApiButton_clicked()

    Private slot to prepare the API file for the currently selected language.

    EditorAPIsPage.save

    save()

    Public slot to save the Editor APIs configuration.

    EditorAPIsPage.saveState

    saveState()

    Public method to save the current state of the widget.

    Returns:
    index of the selected lexer language (integer)

    EditorAPIsPage.setState

    setState(state)

    Public method to set the state of the widget.

    state
    state data generated by saveState


    create

    create(dlg)

    Module function to create the configuration page.

    dlg
    reference to the configuration dialog

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.E4Gui.E4ToolBarDialog.html0000644000175000001440000000013212261331350026240 xustar000000000000000030 mtime=1388688104.454228031 30 atime=1389081085.149724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.E4Gui.E4ToolBarDialog.html0000644000175000001440000002357412261331350026005 0ustar00detlevusers00000000000000 eric4.E4Gui.E4ToolBarDialog

    eric4.E4Gui.E4ToolBarDialog

    Module implementing a toolbar configuration dialog.

    Global Attributes

    None

    Classes

    E4ToolBarDialog Class implementing a toolbar configuration dialog.
    E4ToolBarItem Class storing data belonging to a toolbar entry of the toolbar dialog.

    Functions

    None


    E4ToolBarDialog

    Class implementing a toolbar configuration dialog.

    Derived from

    QDialog, Ui_E4ToolBarDialog

    Class Attributes

    ActionIdRole
    WidgetActionRole

    Class Methods

    None

    Methods

    E4ToolBarDialog Constructor
    __resetCurrentToolbar Private method to revert all changes made to the current toolbar.
    __restoreCurrentToolbar Private methdo to restore the current toolbar to the given list of actions.
    __restoreCurrentToolbarToDefault Private method to set the current toolbar to its default configuration.
    __saveToolBars Private method to save the configured toolbars.
    __setupButtons Private slot to set the buttons state.
    __toolbarComboBox_currentIndexChanged Private slot called upon a selection of the current toolbar.
    on_actionsTree_currentItemChanged Private slot called, when the currently selected action changes.
    on_buttonBox_clicked Private slot called, when a button of the button box was clicked.
    on_downButton_clicked Private slot used to move an action down in the list.
    on_leftButton_clicked Private slot to delete an action from the list.
    on_newButton_clicked Private slot to create a new toolbar.
    on_removeButton_clicked Private slot to remove a custom toolbar
    on_renameButton_clicked Private slot to rename a custom toolbar.
    on_rightButton_clicked Private slot to add an action to the list.
    on_toolbarActionsList_currentItemChanged Slot documentation goes here.
    on_upButton_clicked Private slot used to move an action up in the list.

    Static Methods

    None

    E4ToolBarDialog (Constructor)

    E4ToolBarDialog(toolBarManager, parent = None)

    Constructor

    toolBarManager
    reference to a toolbar manager object (E4ToolBarManager)
    parent
    reference to the parent widget (QWidget)

    E4ToolBarDialog.__resetCurrentToolbar

    __resetCurrentToolbar()

    Private method to revert all changes made to the current toolbar.

    E4ToolBarDialog.__restoreCurrentToolbar

    __restoreCurrentToolbar(actions)

    Private methdo to restore the current toolbar to the given list of actions.

    actions
    list of actions to set for the current toolbar (list of QAction)

    E4ToolBarDialog.__restoreCurrentToolbarToDefault

    __restoreCurrentToolbarToDefault()

    Private method to set the current toolbar to its default configuration.

    E4ToolBarDialog.__saveToolBars

    __saveToolBars()

    Private method to save the configured toolbars.

    E4ToolBarDialog.__setupButtons

    __setupButtons()

    Private slot to set the buttons state.

    E4ToolBarDialog.__toolbarComboBox_currentIndexChanged

    __toolbarComboBox_currentIndexChanged(index)

    Private slot called upon a selection of the current toolbar.

    index
    index of the new current toolbar (integer)

    E4ToolBarDialog.on_actionsTree_currentItemChanged

    on_actionsTree_currentItemChanged(current, previous)

    Private slot called, when the currently selected action changes.

    E4ToolBarDialog.on_buttonBox_clicked

    on_buttonBox_clicked(button)

    Private slot called, when a button of the button box was clicked.

    E4ToolBarDialog.on_downButton_clicked

    on_downButton_clicked()

    Private slot used to move an action down in the list.

    E4ToolBarDialog.on_leftButton_clicked

    on_leftButton_clicked()

    Private slot to delete an action from the list.

    E4ToolBarDialog.on_newButton_clicked

    on_newButton_clicked()

    Private slot to create a new toolbar.

    E4ToolBarDialog.on_removeButton_clicked

    on_removeButton_clicked()

    Private slot to remove a custom toolbar

    E4ToolBarDialog.on_renameButton_clicked

    on_renameButton_clicked()

    Private slot to rename a custom toolbar.

    E4ToolBarDialog.on_rightButton_clicked

    on_rightButton_clicked()

    Private slot to add an action to the list.

    E4ToolBarDialog.on_toolbarActionsList_currentItemChanged

    on_toolbarActionsList_currentItemChanged(current, previous)

    Slot documentation goes here.

    E4ToolBarDialog.on_upButton_clicked

    on_upButton_clicked()

    Private slot used to move an action up in the list.



    E4ToolBarItem

    Class storing data belonging to a toolbar entry of the toolbar dialog.

    Derived from

    object

    Class Attributes

    None

    Class Methods

    None

    Methods

    E4ToolBarItem Constructor

    Static Methods

    None

    E4ToolBarItem (Constructor)

    E4ToolBarItem(toolBarId, actionIDs, default)

    Constructor

    toolBarId
    id of the toolbar object (integer)
    actionIDs
    list of action IDs belonging to the toolbar (list of integer)
    default
    flag indicating a default toolbar (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.SqlBrowser.SqlBrowserWidget.html0000644000175000001440000000013112261331351030022 xustar000000000000000029 mtime=1388688105.60722861 30 atime=1389081085.149724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.SqlBrowser.SqlBrowserWidget.html0000644000175000001440000002041412261331351027556 0ustar00detlevusers00000000000000 eric4.SqlBrowser.SqlBrowserWidget

    eric4.SqlBrowser.SqlBrowserWidget

    Module implementing the SQL Browser widget.

    Global Attributes

    None

    Classes

    SqlBrowserWidget Class implementing the SQL Browser widget.

    Functions

    None


    SqlBrowserWidget

    Class implementing the SQL Browser widget.

    Signals

    statusMessage(QString)
    emitted to show a status message

    Derived from

    QWidget, Ui_SqlBrowserWidget

    Class Attributes

    cCount

    Class Methods

    None

    Methods

    SqlBrowserWidget Constructor
    __deleteRow Privat slot to delete a row from the database table.
    __insertRow Privat slot to insert a row into the database table.
    addConnection Public method to add a database connection.
    addConnectionByDialog Public slot to add a database connection via an input dialog.
    executeQuery Public slot to execute the entered query.
    on_clearButton_clicked Private slot to clear the SQL entry widget.
    on_connections_cleared Private slot to clear the table.
    on_connections_schemaRequested Private slot to show the schema of a table.
    on_connections_tableActivated Private slot to show the contents of a table.
    on_deleteRowAction_triggered Private slot handling the action to delete a row.
    on_executeButton_clicked Private slot to execute the entered SQL query.
    on_insertRowAction_triggered Private slot handling the action to insert a new row.
    showSchema Public slot to show the schema of a table.
    showTable Public slot to show the contents of a table.
    updateActions Public slot to update the actions.

    Static Methods

    None

    SqlBrowserWidget (Constructor)

    SqlBrowserWidget(parent = None)

    Constructor

    parent
    reference to the parent widget (QWidget)

    SqlBrowserWidget.__deleteRow

    __deleteRow()

    Privat slot to delete a row from the database table.

    SqlBrowserWidget.__insertRow

    __insertRow()

    Privat slot to insert a row into the database table.

    SqlBrowserWidget.addConnection

    addConnection(driver, dbName, user, password, host, port)

    Public method to add a database connection.

    driver
    name of the Qt database driver (QString)
    dbName
    name of the database (QString)
    user
    user name (QString)
    password
    password (QString)
    host
    host name (QString)
    port
    port number (integer)

    SqlBrowserWidget.addConnectionByDialog

    addConnectionByDialog()

    Public slot to add a database connection via an input dialog.

    SqlBrowserWidget.executeQuery

    executeQuery()

    Public slot to execute the entered query.

    SqlBrowserWidget.on_clearButton_clicked

    on_clearButton_clicked()

    Private slot to clear the SQL entry widget.

    SqlBrowserWidget.on_connections_cleared

    on_connections_cleared()

    Private slot to clear the table.

    SqlBrowserWidget.on_connections_schemaRequested

    on_connections_schemaRequested(table)

    Private slot to show the schema of a table.

    table
    name of the table for which to show the schema (QString)

    SqlBrowserWidget.on_connections_tableActivated

    on_connections_tableActivated(table)

    Private slot to show the contents of a table.

    table
    name of the table for which to show the contents (QString)

    SqlBrowserWidget.on_deleteRowAction_triggered

    on_deleteRowAction_triggered()

    Private slot handling the action to delete a row.

    SqlBrowserWidget.on_executeButton_clicked

    on_executeButton_clicked()

    Private slot to execute the entered SQL query.

    SqlBrowserWidget.on_insertRowAction_triggered

    on_insertRowAction_triggered()

    Private slot handling the action to insert a new row.

    SqlBrowserWidget.showSchema

    showSchema(table)

    Public slot to show the schema of a table.

    table
    name of the table to be shown (string or QString)

    SqlBrowserWidget.showTable

    showTable(table)

    Public slot to show the contents of a table.

    table
    name of the table to be shown (string or QString)

    SqlBrowserWidget.updateActions

    updateActions()

    Public slot to update the actions.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Utilities.ClassBrowsers.idlclbr.html0000644000175000001440000000013212261331354030635 xustar000000000000000030 mtime=1388688108.413230019 30 atime=1389081085.149724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Utilities.ClassBrowsers.idlclbr.html0000644000175000001440000001633612261331354030400 0ustar00detlevusers00000000000000 eric4.Utilities.ClassBrowsers.idlclbr

    eric4.Utilities.ClassBrowsers.idlclbr

    Parse a CORBA IDL file and retrieve modules, interfaces, methods and attributes.

    Parse enough of a CORBA IDL file to recognize module, interface and method definitions and to find out the superclasses of an interface as well as its attributes.

    It is based on the Python class browser found in this package.

    Global Attributes

    SUPPORTED_TYPES
    _commentsub
    _getnext
    _modules
    _normalize

    Classes

    Attribute Class to represent a CORBA IDL attribute.
    Function Class to represent a CORBA IDL function.
    Interface Class to represent a CORBA IDL interface.
    Module Class to represent a CORBA IDL module.
    VisibilityMixin Mixin class implementing the notion of visibility.

    Functions

    readmodule_ex Read a CORBA IDL file and return a dictionary of classes, functions and modules.


    Attribute

    Class to represent a CORBA IDL attribute.

    Derived from

    ClbrBaseClasses.Attribute, VisibilityMixin

    Class Attributes

    None

    Class Methods

    None

    Methods

    Attribute Constructor

    Static Methods

    None

    Attribute (Constructor)

    Attribute(module, name, file, lineno)

    Constructor

    module
    name of the module containing this class
    name
    name of this class
    file
    filename containing this attribute
    lineno
    linenumber of the class definition


    Function

    Class to represent a CORBA IDL function.

    Derived from

    ClbrBaseClasses.Function, VisibilityMixin

    Class Attributes

    None

    Class Methods

    None

    Methods

    Function Constructor

    Static Methods

    None

    Function (Constructor)

    Function(module, name, file, lineno, signature = '', separator = ', ')

    Constructor

    module
    name of the module containing this function
    name
    name of this function
    file
    filename containing this class
    lineno
    linenumber of the class definition
    signature
    parameterlist of the method
    separator
    string separating the parameters


    Interface

    Class to represent a CORBA IDL interface.

    Derived from

    ClbrBaseClasses.Class, VisibilityMixin

    Class Attributes

    None

    Class Methods

    None

    Methods

    Interface Constructor

    Static Methods

    None

    Interface (Constructor)

    Interface(module, name, super, file, lineno)

    Constructor

    module
    name of the module containing this class
    name
    name of this interface
    super
    list of interface names this interface is inherited from
    file
    filename containing this interface
    lineno
    linenumber of the interface definition


    Module

    Class to represent a CORBA IDL module.

    Derived from

    ClbrBaseClasses.Module, VisibilityMixin

    Class Attributes

    None

    Class Methods

    None

    Methods

    Module Constructor

    Static Methods

    None

    Module (Constructor)

    Module(module, name, file, lineno)

    Constructor

    module
    name of the module containing this class
    name
    name of this class
    file
    filename containing this class
    lineno
    linenumber of the class definition


    VisibilityMixin

    Mixin class implementing the notion of visibility.

    Derived from

    ClbrBaseClasses.ClbrVisibilityMixinBase

    Class Attributes

    None

    Class Methods

    None

    Methods

    VisibilityMixin Method to initialize the visibility.

    Static Methods

    None

    VisibilityMixin (Constructor)

    VisibilityMixin()

    Method to initialize the visibility.



    readmodule_ex

    readmodule_ex(module, path=[])

    Read a CORBA IDL file and return a dictionary of classes, functions and modules.

    module
    name of the CORBA IDL file (string)
    path
    path the file should be searched in (list of strings)
    Returns:
    the resulting dictionary

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.CheckerPlugins.Tabnanny.Tabnann0000644000175000001440000000013212261331352031167 xustar000000000000000030 mtime=1388688106.637229127 30 atime=1389081085.149724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.CheckerPlugins.Tabnanny.TabnannyDialog.html0000644000175000001440000001112012261331352033170 0ustar00detlevusers00000000000000 eric4.Plugins.CheckerPlugins.Tabnanny.TabnannyDialog

    eric4.Plugins.CheckerPlugins.Tabnanny.TabnannyDialog

    Module implementing a dialog to show the output of the tabnanny command process.

    Global Attributes

    None

    Classes

    TabnannyDialog Class implementing a dialog to show the results of the tabnanny check run.

    Functions

    None


    TabnannyDialog

    Class implementing a dialog to show the results of the tabnanny check run.

    Derived from

    QDialog, Ui_TabnannyDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    TabnannyDialog Constructor
    __createResultItem Private method to create an entry in the result list.
    __finish Private slot called when the action or the user pressed the button.
    __resort Private method to resort the tree.
    on_buttonBox_clicked Private slot called by a button of the button box clicked.
    on_resultList_itemActivated Private slot to handle the activation of an item.
    start Public slot to start the tabnanny check.

    Static Methods

    None

    TabnannyDialog (Constructor)

    TabnannyDialog(parent = None)

    Constructor

    parent
    The parent widget (QWidget).

    TabnannyDialog.__createResultItem

    __createResultItem(file, line, sourcecode)

    Private method to create an entry in the result list.

    file
    filename of file (string or QString)
    line
    linenumber of faulty source (integer or string)
    sourcecode
    faulty line of code (string)

    TabnannyDialog.__finish

    __finish()

    Private slot called when the action or the user pressed the button.

    TabnannyDialog.__resort

    __resort()

    Private method to resort the tree.

    TabnannyDialog.on_buttonBox_clicked

    on_buttonBox_clicked(button)

    Private slot called by a button of the button box clicked.

    button
    button that was clicked (QAbstractButton)

    TabnannyDialog.on_resultList_itemActivated

    on_resultList_itemActivated(itm, col)

    Private slot to handle the activation of an item.

    itm
    reference to the activated item (QTreeWidgetItem)
    col
    column the item was activated in (integer)

    TabnannyDialog.start

    start(fn)

    Public slot to start the tabnanny check.

    fn
    File or list of files or directory to be checked (string or list of strings)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ConfigurationPages.TrayStar0000644000175000001440000000013212261331353031310 xustar000000000000000030 mtime=1388688107.582229602 30 atime=1389081085.149724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.TrayStarterPage.html0000644000175000001440000000473112261331353033322 0ustar00detlevusers00000000000000 eric4.Preferences.ConfigurationPages.TrayStarterPage

    eric4.Preferences.ConfigurationPages.TrayStarterPage

    Module implementing the tray starter configuration page.

    Global Attributes

    None

    Classes

    TrayStarterPage Class implementing the tray starter configuration page.

    Functions

    create Module function to create the configuration page.


    TrayStarterPage

    Class implementing the tray starter configuration page.

    Derived from

    ConfigurationPageBase, Ui_TrayStarterPage

    Class Attributes

    None

    Class Methods

    None

    Methods

    TrayStarterPage Constructor
    save Public slot to save the Python configuration.

    Static Methods

    None

    TrayStarterPage (Constructor)

    TrayStarterPage(parent = None)

    Constructor

    parent
    reference to the parent widget (QWidget)

    TrayStarterPage.save

    save()

    Public slot to save the Python configuration.



    create

    create(dlg)

    Module function to create the configuration page.

    dlg
    reference to the configuration dialog

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Tasks.TaskPropertiesDialog.html0000644000175000001440000000013112261331352027635 xustar000000000000000029 mtime=1388688106.04622883 30 atime=1389081085.149724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Tasks.TaskPropertiesDialog.html0000644000175000001440000000537712261331352027404 0ustar00detlevusers00000000000000 eric4.Tasks.TaskPropertiesDialog

    eric4.Tasks.TaskPropertiesDialog

    Module implementing the task properties dialog.

    Global Attributes

    None

    Classes

    TaskPropertiesDialog Class implementing the task properties dialog.

    Functions

    None


    TaskPropertiesDialog

    Class implementing the task properties dialog.

    Derived from

    QDialog, Ui_TaskPropertiesDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    TaskPropertiesDialog Constructor
    getData Public method to retrieve the dialogs data.
    setReadOnly Public slot to set the dialog to read only mode.

    Static Methods

    None

    TaskPropertiesDialog (Constructor)

    TaskPropertiesDialog(task = None, parent = None, projectOpen = False)

    Constructor

    task
    the task object to be shown
    parent
    the parent widget (QWidget)
    projectOpen
    flag indicating status of the project (boolean)

    TaskPropertiesDialog.getData

    getData()

    Public method to retrieve the dialogs data.

    Returns:
    tuple of description, priority, completion flag and project flag

    TaskPropertiesDialog.setReadOnly

    setReadOnly()

    Public slot to set the dialog to read only mode.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Debugger.DebuggerInterfacePython.html0000644000175000001440000000013112261331350030742 xustar000000000000000030 mtime=1388688104.753228181 29 atime=1389081085.15072436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Debugger.DebuggerInterfacePython.html0000644000175000001440000006755112261331350030513 0ustar00detlevusers00000000000000 eric4.Debugger.DebuggerInterfacePython

    eric4.Debugger.DebuggerInterfacePython

    Module implementing the Python debugger interface for the debug server.

    Global Attributes

    ClientDefaultCapabilities

    Classes

    DebuggerInterfacePython Class implementing the Python debugger interface for the debug server.

    Functions

    getRegistryData Module function to get characterising data for the debugger interface.


    DebuggerInterfacePython

    Class implementing the Python debugger interface for the debug server.

    Derived from

    QObject

    Class Attributes

    None

    Class Methods

    None

    Methods

    DebuggerInterfacePython Constructor
    __askForkTo Private method to ask the user which branch of a fork to follow.
    __identityTranslation Private method to perform the identity path translation.
    __parseClientLine Private method to handle data from the client.
    __remoteTranslation Private method to perform the path translation.
    __sendCommand Private method to send a single line command to the client.
    __startProcess Private method to start the debugger client process.
    flush Public slot to flush the queue.
    getClientCapabilities Public method to retrieve the debug clients capabilities.
    isConnected Public method to test, if a debug client has connected.
    newConnection Public slot to handle a new connection.
    remoteBanner Public slot to get the banner info of the remote client.
    remoteBreakpoint Public method to set or clear a breakpoint.
    remoteBreakpointEnable Public method to enable or disable a breakpoint.
    remoteBreakpointIgnore Public method to ignore a breakpoint the next couple of occurrences.
    remoteCapabilities Public slot to get the debug clients capabilities.
    remoteClientSetFilter Public method to set a variables filter list.
    remoteClientVariable Public method to request the variables of the debugged program.
    remoteClientVariables Public method to request the variables of the debugged program.
    remoteCompletion Public slot to get the a list of possible commandline completions from the remote client.
    remoteContinue Public method to continue the debugged program.
    remoteCoverage Public method to load a new program to collect coverage data.
    remoteEnvironment Public method to set the environment for a program to debug, run, ...
    remoteEval Public method to evaluate arg in the current context of the debugged program.
    remoteExec Public method to execute stmt in the current context of the debugged program.
    remoteLoad Public method to load a new program to debug.
    remoteProfile Public method to load a new program to collect profiling data.
    remoteRawInput Public method to send the raw input to the debugged program.
    remoteRun Public method to load a new program to run.
    remoteSetThread Public method to request to set the given thread as current thread.
    remoteStatement Public method to execute a Python statement.
    remoteStep Public method to single step the debugged program.
    remoteStepOut Public method to step out the debugged program.
    remoteStepOver Public method to step over the debugged program.
    remoteStepQuit Public method to stop the debugged program.
    remoteThreadList Public method to request the list of threads from the client.
    remoteUTPrepare Public method to prepare a new unittest run.
    remoteUTRun Public method to start a unittest run.
    remoteUTStop Public method to stop a unittest run.
    remoteWatchpoint Public method to set or clear a watch expression.
    remoteWatchpointEnable Public method to enable or disable a watch expression.
    remoteWatchpointIgnore Public method to ignore a watch expression the next couple of occurrences.
    shutdown Public method to cleanly shut down.
    startRemote Public method to start a remote Python interpreter.
    startRemoteForProject Public method to start a remote Python interpreter for a project.

    Static Methods

    None

    DebuggerInterfacePython (Constructor)

    DebuggerInterfacePython(debugServer, passive)

    Constructor

    debugServer
    reference to the debug server (DebugServer)
    passive
    flag indicating passive connection mode (boolean)

    DebuggerInterfacePython.__askForkTo

    __askForkTo()

    Private method to ask the user which branch of a fork to follow.

    DebuggerInterfacePython.__identityTranslation

    __identityTranslation(fn, remote2local = True)

    Private method to perform the identity path translation.

    fn
    filename to be translated (string or QString)
    remote2local
    flag indicating the direction of translation (False = local to remote, True = remote to local [default])
    Returns:
    translated filename (string)

    DebuggerInterfacePython.__parseClientLine

    __parseClientLine()

    Private method to handle data from the client.

    DebuggerInterfacePython.__remoteTranslation

    __remoteTranslation(fn, remote2local = True)

    Private method to perform the path translation.

    fn
    filename to be translated (string or QString)
    remote2local
    flag indicating the direction of translation (False = local to remote, True = remote to local [default])
    Returns:
    translated filename (string)

    DebuggerInterfacePython.__sendCommand

    __sendCommand(cmd)

    Private method to send a single line command to the client.

    cmd
    command to send to the debug client (string)

    DebuggerInterfacePython.__startProcess

    __startProcess(program, arguments, environment = None)

    Private method to start the debugger client process.

    program
    name of the executable to start (string)
    arguments
    arguments to be passed to the program (list of string)
    environment
    dictionary of environment settings to pass (dict of string)
    Returns:
    the process object (QProcess) or None and an error string (QString)

    DebuggerInterfacePython.flush

    flush()

    Public slot to flush the queue.

    DebuggerInterfacePython.getClientCapabilities

    getClientCapabilities()

    Public method to retrieve the debug clients capabilities.

    Returns:
    debug client capabilities (integer)

    DebuggerInterfacePython.isConnected

    isConnected()

    Public method to test, if a debug client has connected.

    Returns:
    flag indicating the connection status (boolean)

    DebuggerInterfacePython.newConnection

    newConnection(sock)

    Public slot to handle a new connection.

    sock
    reference to the socket object (QTcpSocket)
    Returns:
    flag indicating success (boolean)

    DebuggerInterfacePython.remoteBanner

    remoteBanner()

    Public slot to get the banner info of the remote client.

    DebuggerInterfacePython.remoteBreakpoint

    remoteBreakpoint(fn, line, set, cond = None, temp = False)

    Public method to set or clear a breakpoint.

    fn
    filename the breakpoint belongs to (string)
    line
    linenumber of the breakpoint (int)
    set
    flag indicating setting or resetting a breakpoint (boolean)
    cond
    condition of the breakpoint (string)
    temp
    flag indicating a temporary breakpoint (boolean)

    DebuggerInterfacePython.remoteBreakpointEnable

    remoteBreakpointEnable(fn, line, enable)

    Public method to enable or disable a breakpoint.

    fn
    filename the breakpoint belongs to (string)
    line
    linenumber of the breakpoint (int)
    enable
    flag indicating enabling or disabling a breakpoint (boolean)

    DebuggerInterfacePython.remoteBreakpointIgnore

    remoteBreakpointIgnore(fn, line, count)

    Public method to ignore a breakpoint the next couple of occurrences.

    fn
    filename the breakpoint belongs to (string)
    line
    linenumber of the breakpoint (int)
    count
    number of occurrences to ignore (int)

    DebuggerInterfacePython.remoteCapabilities

    remoteCapabilities()

    Public slot to get the debug clients capabilities.

    DebuggerInterfacePython.remoteClientSetFilter

    remoteClientSetFilter(scope, filter)

    Public method to set a variables filter list.

    scope
    the scope of the variables (0 = local, 1 = global)
    filter
    regexp string for variable names to filter out (string)

    DebuggerInterfacePython.remoteClientVariable

    remoteClientVariable(scope, filter, var, framenr = 0)

    Public method to request the variables of the debugged program.

    scope
    the scope of the variables (0 = local, 1 = global)
    filter
    list of variable types to filter out (list of int)
    var
    list encoded name of variable to retrieve (string)
    framenr
    framenumber of the variables to retrieve (int)

    DebuggerInterfacePython.remoteClientVariables

    remoteClientVariables(scope, filter, framenr = 0)

    Public method to request the variables of the debugged program.

    scope
    the scope of the variables (0 = local, 1 = global)
    filter
    list of variable types to filter out (list of int)
    framenr
    framenumber of the variables to retrieve (int)

    DebuggerInterfacePython.remoteCompletion

    remoteCompletion(text)

    Public slot to get the a list of possible commandline completions from the remote client.

    text
    the text to be completed (string or QString)

    DebuggerInterfacePython.remoteContinue

    remoteContinue(special = False)

    Public method to continue the debugged program.

    special
    flag indicating a special continue operation

    DebuggerInterfacePython.remoteCoverage

    remoteCoverage(fn, argv, wd, erase = False)

    Public method to load a new program to collect coverage data.

    fn
    the filename to run (string)
    argv
    the commandline arguments to pass to the program (string or QString)
    wd
    the working directory for the program (string)
    erase=
    flag indicating that coverage info should be cleared first (boolean)

    DebuggerInterfacePython.remoteEnvironment

    remoteEnvironment(env)

    Public method to set the environment for a program to debug, run, ...

    env
    environment settings (dictionary)

    DebuggerInterfacePython.remoteEval

    remoteEval(arg)

    Public method to evaluate arg in the current context of the debugged program.

    arg
    the arguments to evaluate (string)

    DebuggerInterfacePython.remoteExec

    remoteExec(stmt)

    Public method to execute stmt in the current context of the debugged program.

    stmt
    statement to execute (string)

    DebuggerInterfacePython.remoteLoad

    remoteLoad(fn, argv, wd, traceInterpreter = False, autoContinue = True, autoFork = False, forkChild = False)

    Public method to load a new program to debug.

    fn
    the filename to debug (string)
    argv
    the commandline arguments to pass to the program (string or QString)
    wd
    the working directory for the program (string)
    traceInterpreter=
    flag indicating if the interpreter library should be traced as well (boolean)
    autoContinue=
    flag indicating, that the debugger should not stop at the first executable line (boolean)
    autoFork=
    flag indicating the automatic fork mode (boolean)
    forkChild=
    flag indicating to debug the child after forking (boolean)

    DebuggerInterfacePython.remoteProfile

    remoteProfile(fn, argv, wd, erase = False)

    Public method to load a new program to collect profiling data.

    fn
    the filename to run (string)
    argv
    the commandline arguments to pass to the program (string or QString)
    wd
    the working directory for the program (string)
    erase=
    flag indicating that timing info should be cleared first (boolean)

    DebuggerInterfacePython.remoteRawInput

    remoteRawInput(s)

    Public method to send the raw input to the debugged program.

    s
    the raw input (string)

    DebuggerInterfacePython.remoteRun

    remoteRun(fn, argv, wd, autoFork = False, forkChild = False)

    Public method to load a new program to run.

    fn
    the filename to run (string)
    argv
    the commandline arguments to pass to the program (string or QString)
    wd
    the working directory for the program (string)
    autoFork=
    flag indicating the automatic fork mode (boolean)
    forkChild=
    flag indicating to debug the child after forking (boolean)

    DebuggerInterfacePython.remoteSetThread

    remoteSetThread(tid)

    Public method to request to set the given thread as current thread.

    tid
    id of the thread (integer)

    DebuggerInterfacePython.remoteStatement

    remoteStatement(stmt)

    Public method to execute a Python statement.

    stmt
    the Python statement to execute (string). It should not have a trailing newline.

    DebuggerInterfacePython.remoteStep

    remoteStep()

    Public method to single step the debugged program.

    DebuggerInterfacePython.remoteStepOut

    remoteStepOut()

    Public method to step out the debugged program.

    DebuggerInterfacePython.remoteStepOver

    remoteStepOver()

    Public method to step over the debugged program.

    DebuggerInterfacePython.remoteStepQuit

    remoteStepQuit()

    Public method to stop the debugged program.

    DebuggerInterfacePython.remoteThreadList

    remoteThreadList()

    Public method to request the list of threads from the client.

    DebuggerInterfacePython.remoteUTPrepare

    remoteUTPrepare(fn, tn, tfn, cov, covname, coverase)

    Public method to prepare a new unittest run.

    fn
    the filename to load (string)
    tn
    the testname to load (string)
    tfn
    the test function name to load tests from (string)
    cov
    flag indicating collection of coverage data is requested
    covname
    filename to be used to assemble the coverage caches filename
    coverase
    flag indicating erasure of coverage data is requested

    DebuggerInterfacePython.remoteUTRun

    remoteUTRun()

    Public method to start a unittest run.

    DebuggerInterfacePython.remoteUTStop

    remoteUTStop()

    Public method to stop a unittest run.

    DebuggerInterfacePython.remoteWatchpoint

    remoteWatchpoint(cond, set, temp = False)

    Public method to set or clear a watch expression.

    cond
    expression of the watch expression (string)
    set
    flag indicating setting or resetting a watch expression (boolean)
    temp
    flag indicating a temporary watch expression (boolean)

    DebuggerInterfacePython.remoteWatchpointEnable

    remoteWatchpointEnable(cond, enable)

    Public method to enable or disable a watch expression.

    cond
    expression of the watch expression (string)
    enable
    flag indicating enabling or disabling a watch expression (boolean)

    DebuggerInterfacePython.remoteWatchpointIgnore

    remoteWatchpointIgnore(cond, count)

    Public method to ignore a watch expression the next couple of occurrences.

    cond
    expression of the watch expression (string)
    count
    number of occurrences to ignore (int)

    DebuggerInterfacePython.shutdown

    shutdown()

    Public method to cleanly shut down.

    It closes our socket and shuts down the debug client. (Needed on Win OS)

    DebuggerInterfacePython.startRemote

    startRemote(port, runInConsole)

    Public method to start a remote Python interpreter.

    port
    portnumber the debug server is listening on (integer)
    runInConsole
    flag indicating to start the debugger in a console window (boolean)
    Returns:
    client process object (QProcess) and a flag to indicate a network connection (boolean)

    DebuggerInterfacePython.startRemoteForProject

    startRemoteForProject(port, runInConsole)

    Public method to start a remote Python interpreter for a project.

    port
    portnumber the debug server is listening on (integer)
    runInConsole
    flag indicating to start the debugger in a console window (boolean)
    Returns:
    client process object (QProcess) and a flag to indicate a network connection (boolean)


    getRegistryData

    getRegistryData()

    Module function to get characterising data for the debugger interface.

    Returns:
    list of the following data. Client type (string), client capabilities (integer), client type association (list of strings)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ConfigurationPages.PluginMa0000644000175000001440000000013112261331353031252 xustar000000000000000030 mtime=1388688107.389229505 29 atime=1389081085.15072436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.PluginManagerPage.html0000644000175000001440000000557712261331353033600 0ustar00detlevusers00000000000000 eric4.Preferences.ConfigurationPages.PluginManagerPage

    eric4.Preferences.ConfigurationPages.PluginManagerPage

    Module implementing the Plugin Manager configuration page.

    Global Attributes

    None

    Classes

    PluginManagerPage Class implementing the Plugin Manager configuration page.

    Functions

    create Module function to create the configuration page.


    PluginManagerPage

    Class implementing the Plugin Manager configuration page.

    Derived from

    ConfigurationPageBase, Ui_PluginManagerPage

    Class Attributes

    None

    Class Methods

    None

    Methods

    PluginManagerPage Constructor
    on_downloadDirButton_clicked Private slot to handle the directory selection via dialog.
    save Public slot to save the Viewmanager configuration.

    Static Methods

    None

    PluginManagerPage (Constructor)

    PluginManagerPage()

    Constructor

    PluginManagerPage.on_downloadDirButton_clicked

    on_downloadDirButton_clicked()

    Private slot to handle the directory selection via dialog.

    PluginManagerPage.save

    save()

    Public slot to save the Viewmanager configuration.



    create

    create(dlg)

    Module function to create the configuration page.

    dlg
    reference to the configuration dialog

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.Network.NetworkDiskCache.htm0000644000175000001440000000013112261331353031230 xustar000000000000000030 mtime=1388688107.921229772 29 atime=1389081085.15072436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.Network.NetworkDiskCache.html0000644000175000001440000000363412261331353031145 0ustar00detlevusers00000000000000 eric4.Helpviewer.Network.NetworkDiskCache

    eric4.Helpviewer.Network.NetworkDiskCache

    Module implementing a disk cache respecting privacy.

    Global Attributes

    None

    Classes

    NetworkDiskCache Class implementing a disk cache respecting privacy.

    Functions

    None


    NetworkDiskCache

    Class implementing a disk cache respecting privacy.

    Derived from

    QNetworkDiskCache

    Class Attributes

    None

    Class Methods

    None

    Methods

    prepare Public method to prepare the disk cache file.

    Static Methods

    None

    NetworkDiskCache.prepare

    prepare(metaData)

    Public method to prepare the disk cache file.

    metaData
    meta data for a URL (QNetworkCacheMetaData)
    Returns:
    reference to the IO device (QIODevice)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.Lexers.LexerCSS.html0000644000175000001440000000013112261331354027407 xustar000000000000000030 mtime=1388688108.500230063 29 atime=1389081085.15072436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.Lexers.LexerCSS.html0000644000175000001440000000647412261331354027155 0ustar00detlevusers00000000000000 eric4.QScintilla.Lexers.LexerCSS

    eric4.QScintilla.Lexers.LexerCSS

    Module implementing a CSS lexer with some additional methods.

    Global Attributes

    None

    Classes

    LexerCSS Subclass to implement some additional lexer dependant methods.

    Functions

    None


    LexerCSS

    Subclass to implement some additional lexer dependant methods.

    Derived from

    QsciLexerCSS, Lexer

    Class Attributes

    None

    Class Methods

    None

    Methods

    LexerCSS Constructor
    defaultKeywords Public method to get the default keywords.
    initProperties Public slot to initialize the properties.
    isCommentStyle Public method to check, if a style is a comment style.
    isStringStyle Public method to check, if a style is a string style.

    Static Methods

    None

    LexerCSS (Constructor)

    LexerCSS(parent=None)

    Constructor

    parent
    parent widget of this lexer

    LexerCSS.defaultKeywords

    defaultKeywords(kwSet)

    Public method to get the default keywords.

    kwSet
    number of the keyword set (integer)
    Returns:
    string giving the keywords (string) or None

    LexerCSS.initProperties

    initProperties()

    Public slot to initialize the properties.

    LexerCSS.isCommentStyle

    isCommentStyle(style)

    Public method to check, if a style is a comment style.

    Returns:
    flag indicating a comment style (boolean)

    LexerCSS.isStringStyle

    isStringStyle(style)

    Public method to check, if a style is a string style.

    Returns:
    flag indicating a string style (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.PluginWizardPyRegExp.html0000644000175000001440000000013112261331350030133 xustar000000000000000030 mtime=1388688104.497228053 29 atime=1389081085.15172436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.PluginWizardPyRegExp.html0000644000175000001440000001010712261331350027665 0ustar00detlevusers00000000000000 eric4.Plugins.PluginWizardPyRegExp

    eric4.Plugins.PluginWizardPyRegExp

    Module implementing the Python re wizard plugin.

    Global Attributes

    author
    autoactivate
    className
    deactivateable
    error
    longDescription
    name
    packageName
    shortDescription
    version

    Classes

    PyRegExpWizard Class implementing the Python re wizard plugin.

    Functions

    None


    PyRegExpWizard

    Class implementing the Python re wizard plugin.

    Derived from

    QObject

    Class Attributes

    None

    Class Methods

    None

    Methods

    PyRegExpWizard Constructor
    __callForm Private method to display a dialog and get the code.
    __handle Private method to handle the wizards action
    __initAction Private method to initialize the action.
    __initMenu Private method to add the actions to the right menu.
    activate Public method to activate this plugin.
    deactivate Public method to deactivate this plugin.

    Static Methods

    None

    PyRegExpWizard (Constructor)

    PyRegExpWizard(ui)

    Constructor

    ui
    reference to the user interface object (UI.UserInterface)

    PyRegExpWizard.__callForm

    __callForm(editor)

    Private method to display a dialog and get the code.

    editor
    reference to the current editor
    Returns:
    the generated code (string)

    PyRegExpWizard.__handle

    __handle()

    Private method to handle the wizards action

    PyRegExpWizard.__initAction

    __initAction()

    Private method to initialize the action.

    PyRegExpWizard.__initMenu

    __initMenu()

    Private method to add the actions to the right menu.

    PyRegExpWizard.activate

    activate()

    Public method to activate this plugin.

    Returns:
    tuple of None and activation status (boolean)

    PyRegExpWizard.deactivate

    deactivate()

    Public method to deactivate this plugin.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.IconEditor.IconZoomDialog.html0000644000175000001440000000013112261331351027364 xustar000000000000000030 mtime=1388688105.438228525 29 atime=1389081085.15172436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.IconEditor.IconZoomDialog.html0000644000175000001440000000432212261331351027120 0ustar00detlevusers00000000000000 eric4.IconEditor.IconZoomDialog

    eric4.IconEditor.IconZoomDialog

    Module implementing a dialog to select the zoom factor.

    Global Attributes

    None

    Classes

    IconZoomDialog Class implementing a dialog to select the zoom factor.

    Functions

    None


    IconZoomDialog

    Class implementing a dialog to select the zoom factor.

    Derived from

    QDialog, Ui_IconZoomDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    IconZoomDialog Constructor
    getZoomFactor Public method to retrieve the zoom factor.

    Static Methods

    None

    IconZoomDialog (Constructor)

    IconZoomDialog(zoom, parent = None)

    Constructor

    zoom
    zoom factor to show in the spinbox
    parent
    parent widget of this dialog (QWidget)

    IconZoomDialog.getZoomFactor

    getZoomFactor()

    Public method to retrieve the zoom factor.

    Returns:
    zoom factor (int)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.IconEditor.IconEditorGrid.html0000644000175000001440000000013112261331351027354 xustar000000000000000030 mtime=1388688105.498228555 29 atime=1389081085.15172436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.IconEditor.IconEditorGrid.html0000644000175000001440000006575512261331351027131 0ustar00detlevusers00000000000000 eric4.IconEditor.IconEditorGrid

    eric4.IconEditor.IconEditorGrid

    Module implementing the icon editor grid.

    Global Attributes

    None

    Classes

    IconEditCommand Class implementing an undo command for the icon editor.
    IconEditorGrid Class implementing the icon editor grid.

    Functions

    None


    IconEditCommand

    Class implementing an undo command for the icon editor.

    Derived from

    QUndoCommand

    Class Attributes

    None

    Class Methods

    None

    Methods

    IconEditCommand Constructor
    redo Public method to perform the redo.
    setAfterImage Public method to set the image after the changes were applied.
    undo Public method to perform the undo.

    Static Methods

    None

    IconEditCommand (Constructor)

    IconEditCommand(grid, text, oldImage, parent = None)

    Constructor

    grid
    reference to the icon editor grid (IconEditorGrid)
    text
    text for the undo command (QString)
    oldImage
    copy of the icon before the changes were applied (QImage)
    parent
    reference to the parent command (QUndoCommand)

    IconEditCommand.redo

    redo()

    Public method to perform the redo.

    IconEditCommand.setAfterImage

    setAfterImage(image)

    Public method to set the image after the changes were applied.

    image
    copy of the icon after the changes were applied (QImage)

    IconEditCommand.undo

    undo()

    Public method to perform the undo.



    IconEditorGrid

    Class implementing the icon editor grid.

    Signals

    canRedoChanged(bool)
    emitted after the redo status has changed
    canUndoChanged(bool)
    emitted after the undo status has changed
    clipboardImageAvailable(bool)
    emitted to signal the availability of an image to be pasted
    colorChanged(const QColor&)
    emitted after the drawing color was changed
    imageChanged(bool)
    emitted after the image was modified
    positionChanged(int, int)
    emitted after the cursor poition was changed
    previewChanged(const QPixmap&)
    emitted to signal a new preview pixmap
    selectionAvailable(bool)
    emitted to signal a change of the selection
    sizeChanged(int, int)
    emitted after the size has been changed

    Derived from

    QWidget

    Class Attributes

    Circle
    CircleSelection
    ColorPicker
    Ellipse
    Fill
    FilledCircle
    FilledEllipse
    FilledRectangle
    Line
    MarkColor
    NoMarkColor
    Pencil
    Rectangle
    RectangleSelection
    Rubber

    Class Methods

    None

    Methods

    IconEditorGrid Constructor
    __checkClipboard Private slot to check, if the clipboard contains a valid image, and signal the result.
    __cleanChanged Private slot to handle the undo stack clean state change.
    __clipboardImage Private method to get an image from the clipboard.
    __drawFlood Private method to perform a flood fill operation.
    __drawPasteRect Private slot to draw a rectangle for signaling a paste operation.
    __drawTool Public method to perform a draw operation depending of the current tool.
    __getSelectionImage Private method to get an image from the selection.
    __imageCoordinates Private method to convert from widget to image coordinates.
    __initCursors Private method to initialize the various cursors.
    __initUndoTexts Private method to initialize texts to be associated with undo commands for the various drawing tools.
    __isMarked Private method to check, if a pixel is marked.
    __pixelRect Private method to determine the rectangle for a given pixel coordinate.
    __setImagePixel Private slot to set or erase a pixel.
    __unMark Private slot to remove the mark indicator.
    __updateImageRect Private slot to update parts of the widget.
    __updatePreviewPixmap Private slot to generate and signal an updated preview pixmap.
    __updateRect Private slot to update parts of the widget.
    canPaste Public slot to check the availability of the paste operation.
    canRedo Public method to return the redo status.
    canUndo Public method to return the undo status.
    editClear Public slot to clear the image.
    editCopy Public slot to copy the selection.
    editCut Public slot to cut the selection.
    editNew Public slot to generate a new, empty image.
    editPaste Public slot to paste an image from the clipboard.
    editPasteAsNew Public slot to paste the clipboard as a new image.
    editRedo Public slot to perform a redo operation.
    editResize Public slot to resize the image.
    editSelectAll Public slot to select the complete image.
    editUndo Public slot to perform an undo operation.
    grayScale Public slot to convert the image to gray preserving transparency.
    iconImage Public method to get a copy of the icon image.
    iconSize Public method to get the size of the icon.
    isDirty Public method to check the dirty status.
    isGridEnabled Public method to get the grid lines status.
    isSelectionAvailable Public method to check the availability of a selection.
    mouseMoveEvent Protected method to handle mouse move events.
    mousePressEvent Protected method to handle mouse button press events.
    mouseReleaseEvent Protected method to handle mouse button release events.
    paintEvent Protected method called to repaint some of the widget.
    penColor Public method to get the current drawing color.
    previewPixmap Public method to generate a preview pixmap.
    setDirty Public slot to set the dirty flag.
    setGridEnabled Public method to enable the display of grid lines.
    setIconImage Public method to set a new icon image.
    setPenColor Public method to set the drawing color.
    setTool Public method to set the current drawing tool.
    setZoomFactor Public method to set the zoom factor.
    shutdown Public slot to perform some shutdown actions.
    sizeHint Public method to report the size hint.
    tool Public method to get the current drawing tool.
    zoomFactor Public method to get the current zoom factor.

    Static Methods

    None

    IconEditorGrid (Constructor)

    IconEditorGrid(parent = None)

    Constructor

    parent
    reference to the parent widget (QWidget)

    IconEditorGrid.__checkClipboard

    __checkClipboard()

    Private slot to check, if the clipboard contains a valid image, and signal the result.

    IconEditorGrid.__cleanChanged

    __cleanChanged(clean)

    Private slot to handle the undo stack clean state change.

    clean
    flag indicating the clean state (boolean)

    IconEditorGrid.__clipboardImage

    __clipboardImage()

    Private method to get an image from the clipboard.

    Returns:
    tuple with the image (QImage) and a flag indicating a valid image (boolean)

    IconEditorGrid.__drawFlood

    __drawFlood(i, j, oldColor, doUpdate = True)

    Private method to perform a flood fill operation.

    i
    x-value in image coordinates (integer)
    j
    y-value in image coordinates (integer)
    oldColor
    reference to the color at position i, j (QColor)
    doUpdate
    flag indicating an update is requested (boolean) (used for speed optimizations)

    IconEditorGrid.__drawPasteRect

    __drawPasteRect(pos)

    Private slot to draw a rectangle for signaling a paste operation.

    pos
    widget position of the paste rectangle (QPoint)

    IconEditorGrid.__drawTool

    __drawTool(pos, mark)

    Public method to perform a draw operation depending of the current tool.

    pos
    widget coordinate to perform the draw operation at (QPoint)
    mark
    flag indicating a mark operation (boolean)
    flag
    indicating a successful draw (boolean)

    IconEditorGrid.__getSelectionImage

    __getSelectionImage(cut)

    Private method to get an image from the selection.

    cut
    flag indicating to cut the selection (boolean)
    Returns:
    image of the selection (QImage)

    IconEditorGrid.__imageCoordinates

    __imageCoordinates(pos)

    Private method to convert from widget to image coordinates.

    pos
    widget coordinate (QPoint)
    Returns:
    tuple with the image coordinates (tuple of two integers)

    IconEditorGrid.__initCursors

    __initCursors()

    Private method to initialize the various cursors.

    IconEditorGrid.__initUndoTexts

    __initUndoTexts()

    Private method to initialize texts to be associated with undo commands for the various drawing tools.

    IconEditorGrid.__isMarked

    __isMarked(i, j)

    Private method to check, if a pixel is marked.

    i
    x-value in image coordinates (integer)
    j
    y-value in image coordinates (integer)
    Returns:
    flag indicating a marked pixel (boolean)

    IconEditorGrid.__pixelRect

    __pixelRect(i, j)

    Private method to determine the rectangle for a given pixel coordinate.

    i
    x-coordinate of the pixel in the image (integer)
    j
    y-coordinate of the pixel in the image (integer) return rectangle for the given pixel coordinates (QRect)

    IconEditorGrid.__setImagePixel

    __setImagePixel(pos, opaque)

    Private slot to set or erase a pixel.

    pos
    position of the pixel in the widget (QPoint)
    opaque
    flag indicating a set operation (boolean)

    IconEditorGrid.__unMark

    __unMark()

    Private slot to remove the mark indicator.

    IconEditorGrid.__updateImageRect

    __updateImageRect(ipos1, ipos2)

    Private slot to update parts of the widget.

    ipos1
    top, left position for the update in image coordinates (QPoint)
    ipos2
    bottom, right position for the update in image coordinates (QPoint)

    IconEditorGrid.__updatePreviewPixmap

    __updatePreviewPixmap()

    Private slot to generate and signal an updated preview pixmap.

    IconEditorGrid.__updateRect

    __updateRect(pos1, pos2)

    Private slot to update parts of the widget.

    pos1
    top, left position for the update in widget coordinates (QPoint)
    pos2
    bottom, right position for the update in widget coordinates (QPoint)

    IconEditorGrid.canPaste

    canPaste()

    Public slot to check the availability of the paste operation.

    Returns:
    flag indicating availability of paste (boolean)

    IconEditorGrid.canRedo

    canRedo()

    Public method to return the redo status.

    Returns:
    flag indicating the availability of redo (boolean)

    IconEditorGrid.canUndo

    canUndo()

    Public method to return the undo status.

    Returns:
    flag indicating the availability of undo (boolean)

    IconEditorGrid.editClear

    editClear()

    Public slot to clear the image.

    IconEditorGrid.editCopy

    editCopy()

    Public slot to copy the selection.

    IconEditorGrid.editCut

    editCut()

    Public slot to cut the selection.

    IconEditorGrid.editNew

    editNew()

    Public slot to generate a new, empty image.

    IconEditorGrid.editPaste

    editPaste(pasting = False)

    Public slot to paste an image from the clipboard.

    pasting
    flag indicating part two of the paste operation (boolean)

    IconEditorGrid.editPasteAsNew

    editPasteAsNew()

    Public slot to paste the clipboard as a new image.

    IconEditorGrid.editRedo

    editRedo()

    Public slot to perform a redo operation.

    IconEditorGrid.editResize

    editResize()

    Public slot to resize the image.

    IconEditorGrid.editSelectAll

    editSelectAll()

    Public slot to select the complete image.

    IconEditorGrid.editUndo

    editUndo()

    Public slot to perform an undo operation.

    IconEditorGrid.grayScale

    grayScale()

    Public slot to convert the image to gray preserving transparency.

    IconEditorGrid.iconImage

    iconImage()

    Public method to get a copy of the icon image.

    Returns:
    copy of the icon image (QImage)

    IconEditorGrid.iconSize

    iconSize()

    Public method to get the size of the icon.

    Returns:
    width and height of the image as a tuple (integer, integer)

    IconEditorGrid.isDirty

    isDirty()

    Public method to check the dirty status.

    Returns:
    flag indicating a modified status (boolean)

    IconEditorGrid.isGridEnabled

    isGridEnabled()

    Public method to get the grid lines status.

    Returns:
    enabled status of the grid lines (boolean)

    IconEditorGrid.isSelectionAvailable

    isSelectionAvailable()

    Public method to check the availability of a selection.

    Returns:
    flag indicating the availability of a selection (boolean)

    IconEditorGrid.mouseMoveEvent

    mouseMoveEvent(evt)

    Protected method to handle mouse move events.

    evt
    reference to the mouse event object (QMouseEvent)

    IconEditorGrid.mousePressEvent

    mousePressEvent(evt)

    Protected method to handle mouse button press events.

    evt
    reference to the mouse event object (QMouseEvent)

    IconEditorGrid.mouseReleaseEvent

    mouseReleaseEvent(evt)

    Protected method to handle mouse button release events.

    evt
    reference to the mouse event object (QMouseEvent)

    IconEditorGrid.paintEvent

    paintEvent(evt)

    Protected method called to repaint some of the widget.

    evt
    reference to the paint event object (QPaintEvent)

    IconEditorGrid.penColor

    penColor()

    Public method to get the current drawing color.

    Returns:
    current drawing color (QColor)

    IconEditorGrid.previewPixmap

    previewPixmap()

    Public method to generate a preview pixmap.

    Returns:
    preview pixmap (QPixmap)

    IconEditorGrid.setDirty

    setDirty(dirty, setCleanState = False)

    Public slot to set the dirty flag.

    dirty
    flag indicating the new modification status (boolean)
    setCleanState
    flag indicating to set the undo stack to clean (boolean)

    IconEditorGrid.setGridEnabled

    setGridEnabled(enable)

    Public method to enable the display of grid lines.

    enable
    enabled status of the grid lines (boolean)

    IconEditorGrid.setIconImage

    setIconImage(newImage, undoRedo = False, clearUndo = False)

    Public method to set a new icon image.

    newImage
    reference to the new image (QImage)
    undoRedo=
    flag indicating an undo or redo operation (boolean)
    clearUndo=
    flag indicating to clear the undo stack (boolean)

    IconEditorGrid.setPenColor

    setPenColor(newColor)

    Public method to set the drawing color.

    newColor
    reference to the new color (QColor)

    IconEditorGrid.setTool

    setTool(tool)

    Public method to set the current drawing tool.

    tool
    drawing tool to be used (IconEditorGrid.Pencil ... IconEditorGrid.CircleSelection)

    IconEditorGrid.setZoomFactor

    setZoomFactor(newZoom)

    Public method to set the zoom factor.

    newZoom
    zoom factor (integer >= 1)

    IconEditorGrid.shutdown

    shutdown()

    Public slot to perform some shutdown actions.

    IconEditorGrid.sizeHint

    sizeHint()

    Public method to report the size hint.

    Returns:
    size hint (QSize)

    IconEditorGrid.tool

    tool()

    Public method to get the current drawing tool.

    Returns:
    current drawing tool (IconEditorGrid.Pencil ... IconEditorGrid.CircleSelection)

    IconEditorGrid.zoomFactor

    zoomFactor()

    Public method to get the current zoom factor.

    Returns:
    zoom factor (integer)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.E4Network.E4NetworkProxyFactory.html0000644000175000001440000000013112261331351030506 xustar000000000000000030 mtime=1388688105.501228557 29 atime=1389081085.15172436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.E4Network.E4NetworkProxyFactory.html0000644000175000001440000000441412261331351030244 0ustar00detlevusers00000000000000 eric4.E4Network.E4NetworkProxyFactory

    eric4.E4Network.E4NetworkProxyFactory

    Module implementing a network proxy factory.

    Global Attributes

    None

    Classes

    E4NetworkProxyFactory Class implementing a network proxy factory.

    Functions

    None


    E4NetworkProxyFactory

    Class implementing a network proxy factory.

    Derived from

    QNetworkProxyFactory

    Class Attributes

    None

    Class Methods

    None

    Methods

    E4NetworkProxyFactory Constructor
    queryProxy Public method to determine a proxy for a given query.

    Static Methods

    None

    E4NetworkProxyFactory (Constructor)

    E4NetworkProxyFactory()

    Constructor

    E4NetworkProxyFactory.queryProxy

    queryProxy(query)

    Public method to determine a proxy for a given query.

    query
    reference to the query object (QNetworkProxyQuery)
    Returns:
    list of proxies in order of preference (list of QNetworkProxy)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.E4XML.DebuggerPropertiesHandler.html0000644000175000001440000000013112261331352030401 xustar000000000000000030 mtime=1388688106.504229061 29 atime=1389081085.15172436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.E4XML.DebuggerPropertiesHandler.html0000644000175000001440000002200612261331352030134 0ustar00detlevusers00000000000000 eric4.E4XML.DebuggerPropertiesHandler

    eric4.E4XML.DebuggerPropertiesHandler

    Module implementing the handler class for reading an XML project debugger properties file.

    Global Attributes

    None

    Classes

    DebuggerPropertiesHandler Class implementing a sax handler to read an XML project debugger properties file.

    Functions

    None


    DebuggerPropertiesHandler

    Class implementing a sax handler to read an XML project debugger properties file.

    Derived from

    XMLHandlerBase

    Class Attributes

    None

    Class Methods

    None

    Methods

    DebuggerPropertiesHandler Constructor
    endConsoleDebugger Handler method for the "ConsoleDebugger" end tag.
    endDebugClient Handler method for the "DebugClient" end tag.
    endEnvironment Handler method for the "Environment" end tag.
    endInterpreter Handler method for the "Interpreter" end tag.
    endLocalPath Handler method for the "LocalPath" end tag.
    endRemoteCommand Handler method for the "RemoteCommand" end tag.
    endRemoteHost Handler method for the "RemoteHost" end tag.
    endRemotePath Handler method for the "RemotePath" end tag.
    getVersion Public method to retrieve the version of the debugger properties.
    startConsoleDebugger Handler method for the "ConsoleDebugger" start tag.
    startDebuggerProperties Handler method for the "DebuggerProperties" start tag.
    startDocumentDebuggerProperties Handler called, when the document parsing is started.
    startEnvironment Handler method for the "Environment" start tag.
    startNoencoding Handler method for the "Noencoding" start tag.
    startPathTranslation Handler method for the "PathTranslation" start tag.
    startRedirect Handler method for the "Redirect" start tag.
    startRemoteDebugger Handler method for the "RemoteDebugger" start tag.

    Static Methods

    None

    DebuggerPropertiesHandler (Constructor)

    DebuggerPropertiesHandler(project)

    Constructor

    project
    Reference to the project object to store the information into.

    DebuggerPropertiesHandler.endConsoleDebugger

    endConsoleDebugger()

    Handler method for the "ConsoleDebugger" end tag.

    DebuggerPropertiesHandler.endDebugClient

    endDebugClient()

    Handler method for the "DebugClient" end tag.

    DebuggerPropertiesHandler.endEnvironment

    endEnvironment()

    Handler method for the "Environment" end tag.

    DebuggerPropertiesHandler.endInterpreter

    endInterpreter()

    Handler method for the "Interpreter" end tag.

    DebuggerPropertiesHandler.endLocalPath

    endLocalPath()

    Handler method for the "LocalPath" end tag.

    DebuggerPropertiesHandler.endRemoteCommand

    endRemoteCommand()

    Handler method for the "RemoteCommand" end tag.

    DebuggerPropertiesHandler.endRemoteHost

    endRemoteHost()

    Handler method for the "RemoteHost" end tag.

    DebuggerPropertiesHandler.endRemotePath

    endRemotePath()

    Handler method for the "RemotePath" end tag.

    DebuggerPropertiesHandler.getVersion

    getVersion()

    Public method to retrieve the version of the debugger properties.

    Returns:
    String containing the version number.

    DebuggerPropertiesHandler.startConsoleDebugger

    startConsoleDebugger(attrs)

    Handler method for the "ConsoleDebugger" start tag.

    DebuggerPropertiesHandler.startDebuggerProperties

    startDebuggerProperties(attrs)

    Handler method for the "DebuggerProperties" start tag.

    attrs
    list of tag attributes

    DebuggerPropertiesHandler.startDocumentDebuggerProperties

    startDocumentDebuggerProperties()

    Handler called, when the document parsing is started.

    DebuggerPropertiesHandler.startEnvironment

    startEnvironment(attrs)

    Handler method for the "Environment" start tag.

    DebuggerPropertiesHandler.startNoencoding

    startNoencoding(attrs)

    Handler method for the "Noencoding" start tag.

    DebuggerPropertiesHandler.startPathTranslation

    startPathTranslation(attrs)

    Handler method for the "PathTranslation" start tag.

    DebuggerPropertiesHandler.startRedirect

    startRedirect(attrs)

    Handler method for the "Redirect" start tag.

    DebuggerPropertiesHandler.startRemoteDebugger

    startRemoteDebugger(attrs)

    Handler method for the "RemoteDebugger" start tag.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.E4XML.ProjectWriter.html0000644000175000001440000000013112261331352026105 xustar000000000000000030 mtime=1388688106.527229072 29 atime=1389081085.15272436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.E4XML.ProjectWriter.html0000644000175000001440000000417112261331352025643 0ustar00detlevusers00000000000000 eric4.E4XML.ProjectWriter

    eric4.E4XML.ProjectWriter

    Module implementing the writer class for writing an XML project file.

    Global Attributes

    None

    Classes

    ProjectWriter Class implementing the writer class for writing an XML project file.

    Functions

    None


    ProjectWriter

    Class implementing the writer class for writing an XML project file.

    Derived from

    XMLWriterBase

    Class Attributes

    None

    Class Methods

    None

    Methods

    ProjectWriter Constructor
    writeXML Public method to write the XML to the file.

    Static Methods

    None

    ProjectWriter (Constructor)

    ProjectWriter(file, projectName)

    Constructor

    file
    open file (like) object for writing
    projectName
    name of the project (string)

    ProjectWriter.writeXML

    writeXML()

    Public method to write the XML to the file.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.HelpSearchWidget.html0000644000175000001440000000013112261331351027744 xustar000000000000000030 mtime=1388688105.306228459 29 atime=1389081085.15272436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.HelpSearchWidget.html0000644000175000001440000001140412261331351027477 0ustar00detlevusers00000000000000 eric4.Helpviewer.HelpSearchWidget

    eric4.Helpviewer.HelpSearchWidget

    Module implementing a window for showing the QtHelp index.

    Global Attributes

    None

    Classes

    HelpSearchWidget Class implementing a window for showing the QtHelp index.

    Functions

    None


    HelpSearchWidget

    Class implementing a window for showing the QtHelp index.

    Signals

    escapePressed()
    emitted when the ESC key was pressed
    linkActivated(const QUrl&)
    emitted when a search result entry is activated

    Derived from

    QWidget

    Class Attributes

    None

    Class Methods

    None

    Methods

    HelpSearchWidget Constructor
    __search Private slot to perform a search of the database.
    __searchingFinished Private slot to handle the end of the search.
    __searchingStarted Private slot to handle the start of a search.
    contextMenuEvent Protected method handling context menu events.
    eventFilter Public method called to filter the event queue.
    keyPressEvent Protected method handling key press events.

    Static Methods

    None

    HelpSearchWidget (Constructor)

    HelpSearchWidget(engine, mainWindow, parent = None)

    Constructor

    engine
    reference to the help search engine (QHelpSearchEngine)
    mainWindow
    reference to the main window object (KQMainWindow)
    parent
    reference to the parent widget (QWidget)

    HelpSearchWidget.__search

    __search()

    Private slot to perform a search of the database.

    HelpSearchWidget.__searchingFinished

    __searchingFinished(hits)

    Private slot to handle the end of the search.

    hits
    number of hits (integer) (unused)

    HelpSearchWidget.__searchingStarted

    __searchingStarted()

    Private slot to handle the start of a search.

    HelpSearchWidget.contextMenuEvent

    contextMenuEvent(evt)

    Protected method handling context menu events.

    evt
    reference to the context menu event (QContextMenuEvent)

    HelpSearchWidget.eventFilter

    eventFilter(watched, event)

    Public method called to filter the event queue.

    watched
    the QObject being watched (QObject)
    event
    the event that occurred (QEvent)
    Returns:
    flag indicating whether the event was handled (boolean)

    HelpSearchWidget.keyPressEvent

    keyPressEvent(evt)

    Protected method handling key press events.

    evt
    reference to the key press event (QKeyEvent)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.eric4_trpreviewer.html0000644000175000001440000000013112261331350026114 xustar000000000000000030 mtime=1388688104.221227914 29 atime=1389081085.15272436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.eric4_trpreviewer.html0000644000175000001440000000332512261331350025652 0ustar00detlevusers00000000000000 eric4.eric4_trpreviewer

    eric4.eric4_trpreviewer

    Eric4 TR Previewer

    This is the main Python script that performs the necessary initialization of the tr previewer and starts the Qt event loop. This is a standalone version of the integrated tr previewer.

    Global Attributes

    None

    Classes

    None

    Functions

    createMainWidget Function to create the main widget.
    main Main entry point into the application.


    createMainWidget

    createMainWidget(argv)

    Function to create the main widget.

    argv
    list of commandline parameters (list of strings)
    Returns:
    reference to the main widget (QWidget)


    main

    main()

    Main entry point into the application.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.MultiProject.AddProjectDialog.html0000644000175000001440000000013112261331351030230 xustar000000000000000030 mtime=1388688105.154228383 29 atime=1389081085.15272436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.MultiProject.AddProjectDialog.html0000644000175000001440000001013012261331351027756 0ustar00detlevusers00000000000000 eric4.MultiProject.AddProjectDialog

    eric4.MultiProject.AddProjectDialog

    Module implementing the add project dialog.

    Global Attributes

    None

    Classes

    AddProjectDialog Class implementing the add project dialog.

    Functions

    None


    AddProjectDialog

    Class implementing the add project dialog.

    Derived from

    QDialog, Ui_AddProjectDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    AddProjectDialog Constructor
    __updateUi Private method to update the dialog.
    getData Public slot to retrieve the dialogs data.
    on_fileButton_clicked Private slot to display a file selection dialog.
    on_filenameEdit_textChanged Private slot called when the project filename has changed.
    on_nameEdit_textChanged Private slot called when the project name has changed.

    Static Methods

    None

    AddProjectDialog (Constructor)

    AddProjectDialog(parent = None, startdir = None, project = None)

    Constructor

    parent
    parent widget of this dialog (QWidget)
    startdir
    start directory for the selection dialog (string or QString)
    project
    dictionary containing project data

    AddProjectDialog.__updateUi

    __updateUi()

    Private method to update the dialog.

    AddProjectDialog.getData

    getData()

    Public slot to retrieve the dialogs data.

    Returns:
    tuple of four values (string, string, boolean, string) giving the project name, the name of the project file, a flag telling, whether the project shall be the master project and a short description for the project

    AddProjectDialog.on_fileButton_clicked

    on_fileButton_clicked()

    Private slot to display a file selection dialog.

    AddProjectDialog.on_filenameEdit_textChanged

    on_filenameEdit_textChanged(p0)

    Private slot called when the project filename has changed.

    AddProjectDialog.on_nameEdit_textChanged

    on_nameEdit_textChanged(p0)

    Private slot called when the project name has changed.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.PluginVcsSubversion.html0000644000175000001440000000013112261331350030062 xustar000000000000000030 mtime=1388688104.474228041 29 atime=1389081085.15272436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.PluginVcsSubversion.html0000644000175000001440000002113212261331350027614 0ustar00detlevusers00000000000000 eric4.Plugins.PluginVcsSubversion

    eric4.Plugins.PluginVcsSubversion

    Module implementing the Subversion version control plugin.

    Global Attributes

    author
    autoactivate
    className
    deactivateable
    error
    longDescription
    name
    packageName
    pluginType
    pluginTypename
    shortDescription
    subversionCfgPluginObject
    version

    Classes

    VcsSubversionPlugin Class implementing the Subversion version control plugin.

    Functions

    createConfigurationPage Module function to create the configuration page.
    displayString Public function to get the display string.
    exeDisplayData Public method to support the display of some executable info.
    getConfigData Module function returning data as required by the configuration dialog.
    getVcsSystemIndicator Public function to get the indicators for this version control system.
    prepareUninstall Module function to prepare for an uninstallation.


    VcsSubversionPlugin

    Class implementing the Subversion version control plugin.

    Derived from

    object

    Class Attributes

    None

    Class Methods

    None

    Methods

    VcsSubversionPlugin Constructor
    activate Public method to activate this plugin.
    deactivate Public method to deactivate this plugin.
    getConfigPath Public method to get the filename of the config file.
    getPreferences Public method to retrieve the various refactoring settings.
    getProjectHelper Public method to get a reference to the project helper object.
    getServersPath Public method to get the filename of the servers file.
    prepareUninstall Public method to prepare for an uninstallation.
    setPreferences Public method to store the various refactoring settings.

    Static Methods

    None

    VcsSubversionPlugin (Constructor)

    VcsSubversionPlugin(ui)

    Constructor

    ui
    reference to the user interface object (UI.UserInterface)

    VcsSubversionPlugin.activate

    activate()

    Public method to activate this plugin.

    Returns:
    tuple of reference to instantiated viewmanager and activation status (boolean)

    VcsSubversionPlugin.deactivate

    deactivate()

    Public method to deactivate this plugin.

    VcsSubversionPlugin.getConfigPath

    getConfigPath()

    Public method to get the filename of the config file.

    Returns:
    filename of the config file (string)

    VcsSubversionPlugin.getPreferences

    getPreferences(key)

    Public method to retrieve the various refactoring settings.

    key
    the key of the value to get
    prefClass
    preferences class used as the storage area
    Returns:
    the requested refactoring setting

    VcsSubversionPlugin.getProjectHelper

    getProjectHelper()

    Public method to get a reference to the project helper object.

    Returns:
    reference to the project helper object

    VcsSubversionPlugin.getServersPath

    getServersPath()

    Public method to get the filename of the servers file.

    Returns:
    filename of the servers file (string)

    VcsSubversionPlugin.prepareUninstall

    prepareUninstall()

    Public method to prepare for an uninstallation.

    VcsSubversionPlugin.setPreferences

    setPreferences(key, value)

    Public method to store the various refactoring settings.

    key
    the key of the setting to be set
    value
    the value to be set
    prefClass
    preferences class used as the storage area


    createConfigurationPage

    createConfigurationPage(configDlg)

    Module function to create the configuration page.

    Returns:
    reference to the configuration page


    displayString

    displayString()

    Public function to get the display string.

    Returns:
    display string (QString)


    exeDisplayData

    exeDisplayData()

    Public method to support the display of some executable info.

    Returns:
    dictionary containing the data to query the presence of the executable


    getConfigData

    getConfigData()

    Module function returning data as required by the configuration dialog.

    Returns:
    dictionary with key "zzz_subversionPage" containing the relevant data


    getVcsSystemIndicator

    getVcsSystemIndicator()

    Public function to get the indicators for this version control system.

    Returns:
    dictionary with indicator as key and a tuple with the vcs name (string) and vcs display string (QString)


    prepareUninstall

    prepareUninstall()

    Module function to prepare for an uninstallation.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DocumentationTools.TemplatesListsStyle.0000644000175000001440000000013112261331352031414 xustar000000000000000030 mtime=1388688106.073228844 29 atime=1389081085.15272436 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.DocumentationTools.TemplatesListsStyle.html0000644000175000001440000000417212261331352032040 0ustar00detlevusers00000000000000 eric4.DocumentationTools.TemplatesListsStyle

    eric4.DocumentationTools.TemplatesListsStyle

    Module implementing templates for the documentation generator (lists style).

    Global Attributes

    authorInfoTemplate
    classTemplate
    constructorTemplate
    deprecatedTemplate
    eventsListEntryTemplate
    eventsListTemplate
    exceptionsListEntryTemplate
    exceptionsListTemplate
    footerTemplate
    functionTemplate
    headerTemplate
    indexBodyTemplate
    indexListEntryTemplate
    indexListModulesTemplate
    indexListPackagesTemplate
    listEntryDeprecatedTemplate
    listEntryNoneTemplate
    listEntrySimpleTemplate
    listEntryTemplate
    listTemplate
    methodTemplate
    moduleTemplate
    paragraphTemplate
    parametersListEntryTemplate
    parametersListTemplate
    rbFileTemplate
    rbModuleTemplate
    rbModulesClassTemplate
    returnsTemplate
    seeLinkTemplate
    seeListEntryTemplate
    seeListTemplate
    signalsListEntryTemplate
    signalsListTemplate
    sinceInfoTemplate

    Classes

    None

    Functions

    None

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.PluginManager.html0000644000175000001440000000013212261331354026313 xustar000000000000000030 mtime=1388688108.658230142 30 atime=1389081085.153724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.PluginManager.html0000644000175000001440000000334212261331354026047 0ustar00detlevusers00000000000000 eric4.PluginManager

    eric4.PluginManager

    Package containing the code for the Plugin Manager and related parts.

    Modules

    PluginDetailsDialog Module implementing the Plugin Details Dialog.
    PluginExceptions Module implementing the exceptions raised by the plugin system.
    PluginInfoDialog Module implementing the Plugin Info Dialog.
    PluginInstallDialog Module implementing the Plugin installation dialog.
    PluginManager Module implementing the Plugin Manager.
    PluginRepositoryDialog Module implementing a dialog showing the available plugins.
    PluginUninstallDialog Module implementing a dialog for plugin deinstallation.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.Network.NetworkAccessManager0000644000175000001440000000013212261331353031320 xustar000000000000000030 mtime=1388688107.945229784 30 atime=1389081085.153724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.Network.NetworkAccessManager.html0000644000175000001440000001553412261331353032025 0ustar00detlevusers00000000000000 eric4.Helpviewer.Network.NetworkAccessManager

    eric4.Helpviewer.Network.NetworkAccessManager

    Module implementing a QNetworkAccessManager subclass.

    Global Attributes

    None

    Classes

    NetworkAccessManager Class implementing a QNetworkAccessManager subclass.

    Functions

    None


    NetworkAccessManager

    Class implementing a QNetworkAccessManager subclass.

    Signals

    requestCreated(QNetworkAccessManager::Operation, const QNetworkRequest&, QNetworkReply*)
    emitted after the request has been created

    Derived from

    QNetworkAccessManager

    Class Attributes

    NoCacheHosts

    Class Methods

    None

    Methods

    NetworkAccessManager Constructor
    __authenticationRequired Private slot to handle an authentication request.
    __certToString Private method to convert a certificate to a formatted string.
    __proxyAuthenticationRequired Private slot to handle a proxy authentication request.
    __setDiskCache Private method to set the disk cache.
    __sslErrors Private slot to handle SSL errors.
    createRequest Protected method to create a request.
    languagesChanged Public slot to (re-)load the list of accepted languages.
    preferencesChanged Public slot to signal a change of preferences.
    setSchemeHandler Public method to register a scheme handler.

    Static Methods

    None

    NetworkAccessManager (Constructor)

    NetworkAccessManager(engine, parent = None)

    Constructor

    engine
    reference to the help engine (QHelpEngine)
    parent
    reference to the parent object (QObject)

    NetworkAccessManager.__authenticationRequired

    __authenticationRequired(reply, auth)

    Private slot to handle an authentication request.

    reply
    reference to the reply object (QNetworkReply)
    auth
    reference to the authenticator object (QAuthenticator)

    NetworkAccessManager.__certToString

    __certToString(cert)

    Private method to convert a certificate to a formatted string.

    cert
    certificate to convert (QSslCertificate)
    Returns:
    formatted string (QString)

    NetworkAccessManager.__proxyAuthenticationRequired

    __proxyAuthenticationRequired(proxy, auth)

    Private slot to handle a proxy authentication request.

    proxy
    reference to the proxy object (QNetworkProxy)
    auth
    reference to the authenticator object (QAuthenticator)

    NetworkAccessManager.__setDiskCache

    __setDiskCache()

    Private method to set the disk cache.

    NetworkAccessManager.__sslErrors

    __sslErrors(reply, errors)

    Private slot to handle SSL errors.

    reply
    reference to the reply object (QNetworkReply)
    errors
    list of SSL errors (list of QSslError)

    NetworkAccessManager.createRequest

    createRequest(op, request, outgoingData = None)

    Protected method to create a request.

    op
    the operation to be performed (QNetworkAccessManager.Operation)
    request
    reference to the request object (QNetworkRequest)
    outgoingData
    reference to an IODevice containing data to be sent (QIODevice)
    Returns:
    reference to the created reply object (QNetworkReply)

    NetworkAccessManager.languagesChanged

    languagesChanged()

    Public slot to (re-)load the list of accepted languages.

    NetworkAccessManager.preferencesChanged

    preferencesChanged()

    Public slot to signal a change of preferences.

    NetworkAccessManager.setSchemeHandler

    setSchemeHandler(scheme, handler)

    Public method to register a scheme handler.

    scheme
    access scheme (string or QString)
    handler
    reference to the scheme handler object (SchemeAccessHandler)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.HTMLResources.html0000644000175000001440000000013212261331351027222 xustar000000000000000030 mtime=1388688105.436228524 30 atime=1389081085.153724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.HTMLResources.html0000644000175000001440000000156012261331351026756 0ustar00detlevusers00000000000000 eric4.Helpviewer.HTMLResources

    eric4.Helpviewer.HTMLResources

    Module containing some HTML resources.

    Global Attributes

    notFoundPage_html
    startPage_html

    Classes

    None

    Functions

    None

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.E4Network.E4NetworkHeaderDetailsDialog.0000644000175000001440000000013212261331351030767 xustar000000000000000030 mtime=1388688105.502228557 30 atime=1389081085.153724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.E4Network.E4NetworkHeaderDetailsDialog.html0000644000175000001440000000501212261331351031404 0ustar00detlevusers00000000000000 eric4.E4Network.E4NetworkHeaderDetailsDialog

    eric4.E4Network.E4NetworkHeaderDetailsDialog

    Module implementing a dialog to show the data of a response or reply header.

    Global Attributes

    None

    Classes

    E4NetworkHeaderDetailsDialog Class implementing a dialog to show the data of a response or reply header.

    Functions

    None


    E4NetworkHeaderDetailsDialog

    Class implementing a dialog to show the data of a response or reply header.

    Derived from

    QDialog, Ui_E4NetworkHeaderDetailsDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    E4NetworkHeaderDetailsDialog Constructor
    setData Public method to set the data to display.

    Static Methods

    None

    E4NetworkHeaderDetailsDialog (Constructor)

    E4NetworkHeaderDetailsDialog(parent = None)

    Constructor

    parent
    reference to the parent object (QWidget)

    E4NetworkHeaderDetailsDialog.setData

    setData(name, value)

    Public method to set the data to display.

    name
    name of the header (string or QString)
    value
    value of the header (string or QString)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DebugClients.Ruby.Completer.html0000644000175000001440000000013212261331354027676 xustar000000000000000030 mtime=1388688108.291229958 30 atime=1389081085.153724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.DebugClients.Ruby.Completer.html0000644000175000001440000000540412261331354027433 0ustar00detlevusers00000000000000 eric4.DebugClients.Ruby.Completer

    eric4.DebugClients.Ruby.Completer

    File implementing a command line completer class.

    Global Attributes

    None

    Classes

    Completer Class implementing a command completer.

    Modules

    None

    Functions

    None


    Completer

    Class implementing a command completer.

    Derived from

    None

    Class Attributes

    Operators
    ReservedWords

    Class Methods

    None

    Methods

    complete Public method to select the possible completions
    initialize constructor
    select_message Method used to pick completion candidates.

    Static Methods

    None

    Completer.complete

    complete()

    Public method to select the possible completions

    input
    text to be completed (String)
    Returns:
    list of possible completions (Array)

    Completer.initialize

    initialize()

    constructor

    binding
    binding object used to determine the possible completions

    Completer.select_message

    select_message(message, candidates)

    Method used to pick completion candidates.

    receiver
    object receiving the message
    message
    message to be sent to object
    candidates
    possible completion candidates
    Returns:
    filtered list of candidates

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.CookieJar.CookiesConfigurati0000644000175000001440000000013212261331353031256 xustar000000000000000030 mtime=1388688107.699229661 30 atime=1389081085.153724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.CookieJar.CookiesConfigurationDialog.html0000644000175000001440000000610112261331353033426 0ustar00detlevusers00000000000000 eric4.Helpviewer.CookieJar.CookiesConfigurationDialog

    eric4.Helpviewer.CookieJar.CookiesConfigurationDialog

    Module implementing the cookies configuration dialog.

    Global Attributes

    None

    Classes

    CookiesConfigurationDialog Class implementing the cookies configuration dialog.

    Functions

    None


    CookiesConfigurationDialog

    Class implementing the cookies configuration dialog.

    Derived from

    QDialog, Ui_CookiesConfigurationDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    CookiesConfigurationDialog Constructor
    accept Public slot to accept the dialog.
    on_cookiesButton_clicked Private slot to show the cookies dialog.
    on_exceptionsButton_clicked Private slot to show the cookies exceptions dialog.

    Static Methods

    None

    CookiesConfigurationDialog (Constructor)

    CookiesConfigurationDialog(parent)

    Constructor

    CookiesConfigurationDialog.accept

    accept()

    Public slot to accept the dialog.

    CookiesConfigurationDialog.on_cookiesButton_clicked

    on_cookiesButton_clicked()

    Private slot to show the cookies dialog.

    CookiesConfigurationDialog.on_exceptionsButton_clicked

    on_exceptionsButton_clicked()

    Private slot to show the cookies exceptions dialog.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.APIsManager.html0000644000175000001440000000013212261331352026604 xustar000000000000000030 mtime=1388688106.156228886 30 atime=1389081085.153724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.APIsManager.html0000644000175000001440000002005712261331352026342 0ustar00detlevusers00000000000000 eric4.QScintilla.APIsManager

    eric4.QScintilla.APIsManager

    Module implementing the APIsManager.

    Global Attributes

    None

    Classes

    APIs Class implementing an API storage entity.
    APIsManager Class implementing the APIsManager class, which is the central store for API information used by autocompletion and calltips.

    Functions

    None


    APIs

    Class implementing an API storage entity.

    Signals

    apiPreparationCancelled()
    emitted after the API preparation has been cancelled
    apiPreparationFinished()
    emitted after the API preparation has finished
    apiPreparationStarted()
    emitted after the API preparation has started

    Derived from

    QObject

    Class Attributes

    None

    Class Methods

    None

    Methods

    APIs Constructor
    __apiPreparationCancelled Private method called, after the API preparation process has been cancelled.
    __apiPreparationFinished Private method called to save an API, after it has been prepared.
    __apiPreparationStarted Private method called, when the API preparation process started.
    __defaultPreparedName Private method returning the default name of a prepared API file.
    __loadAPIs Private method to load the APIs.
    cancelPreparation Public slot to cancel the APIs preparation.
    getQsciAPIs Public method to get a reference to QsciAPIs object.
    installedAPIFiles Public method to get a list of installed API files.
    prepareAPIs Public method to prepare the APIs if necessary.
    reloadAPIs Public method to reload the API information.

    Static Methods

    None

    APIs (Constructor)

    APIs(language, forPreparation = False, parent = None)

    Constructor

    language
    language of the APIs object (string)
    forPreparation
    flag indicating this object is just needed for a preparation process (boolean)
    parent
    reference to the parent object (QObject)

    APIs.__apiPreparationCancelled

    __apiPreparationCancelled()

    Private method called, after the API preparation process has been cancelled.

    APIs.__apiPreparationFinished

    __apiPreparationFinished()

    Private method called to save an API, after it has been prepared.

    APIs.__apiPreparationStarted

    __apiPreparationStarted()

    Private method called, when the API preparation process started.

    APIs.__defaultPreparedName

    __defaultPreparedName()

    Private method returning the default name of a prepared API file.

    Returns:
    complete filename for the Prepared APIs file (QString)

    APIs.__loadAPIs

    __loadAPIs()

    Private method to load the APIs.

    APIs.cancelPreparation

    cancelPreparation()

    Public slot to cancel the APIs preparation.

    APIs.getQsciAPIs

    getQsciAPIs()

    Public method to get a reference to QsciAPIs object.

    Returns:
    reference to the QsciAPIs object (QsciAPIs)

    APIs.installedAPIFiles

    installedAPIFiles()

    Public method to get a list of installed API files.

    Returns:
    list of installed API files (QStringList)

    APIs.prepareAPIs

    prepareAPIs(ondemand = False, rawList = None)

    Public method to prepare the APIs if necessary.

    ondemand=
    flag indicating a requested preparation (boolean)
    rawList=
    list of raw API files (QStringList)

    APIs.reloadAPIs

    reloadAPIs()

    Public method to reload the API information.



    APIsManager

    Class implementing the APIsManager class, which is the central store for API information used by autocompletion and calltips.

    Derived from

    QObject

    Class Attributes

    None

    Class Methods

    None

    Methods

    APIsManager Constructor
    getAPIs Public method to get an apis object for autocompletion/calltips.
    reloadAPIs Public slot to reload the api information.

    Static Methods

    None

    APIsManager (Constructor)

    APIsManager(parent = None)

    Constructor

    parent
    reference to the parent object (QObject)

    APIsManager.getAPIs

    getAPIs(language, forPreparation = False)

    Public method to get an apis object for autocompletion/calltips.

    This method creates and loads an APIs object dynamically upon request. This saves memory for languages, that might not be needed at the moment.

    language
    the language of the requested api object (string or QString)
    forPreparation
    flag indicating the requested api object is just needed for a preparation process (boolean)
    Returns:
    the apis object (APIs)

    APIsManager.reloadAPIs

    reloadAPIs()

    Public slot to reload the api information.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.OpenSearch.OpenSearchDialog.0000644000175000001440000000013212261331353031075 xustar000000000000000030 mtime=1388688107.971229797 30 atime=1389081085.154724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.OpenSearch.OpenSearchDialog.html0000644000175000001440000000771512261331353031526 0ustar00detlevusers00000000000000 eric4.Helpviewer.OpenSearch.OpenSearchDialog

    eric4.Helpviewer.OpenSearch.OpenSearchDialog

    Module implementing a dialog for the configuration of search engines.

    Global Attributes

    None

    Classes

    OpenSearchDialog Class implementing a dialog for the configuration of search engines.

    Functions

    None


    OpenSearchDialog

    Class implementing a dialog for the configuration of search engines.

    Derived from

    QDialog, Ui_OpenSearchDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    OpenSearchDialog Constructor
    __selectionChanged Private slot to handle a change of the selection.
    on_addButton_clicked Private slot to add a new search engine.
    on_deleteButton_clicked Private slot to delete the selected search engines.
    on_editButton_clicked Private slot to edit the data of the current search engine.
    on_restoreButton_clicked Private slot to restore the default search engines.

    Static Methods

    None

    OpenSearchDialog (Constructor)

    OpenSearchDialog(parent = None)

    Constructor

    OpenSearchDialog.__selectionChanged

    __selectionChanged(selected, deselected)

    Private slot to handle a change of the selection.

    selected
    item selection of selected items (QItemSelection)
    deselected
    item selection of deselected items (QItemSelection)

    OpenSearchDialog.on_addButton_clicked

    on_addButton_clicked()

    Private slot to add a new search engine.

    OpenSearchDialog.on_deleteButton_clicked

    on_deleteButton_clicked()

    Private slot to delete the selected search engines.

    OpenSearchDialog.on_editButton_clicked

    on_editButton_clicked()

    Private slot to edit the data of the current search engine.

    OpenSearchDialog.on_restoreButton_clicked

    on_restoreButton_clicked()

    Private slot to restore the default search engines.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.eric4_sqlbrowser.html0000644000175000001440000000013212261331350025742 xustar000000000000000030 mtime=1388688104.219227913 30 atime=1389081085.154724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.eric4_sqlbrowser.html0000644000175000001440000000322412261331350025475 0ustar00detlevusers00000000000000 eric4.eric4_sqlbrowser

    eric4.eric4_sqlbrowser

    Eric4 SQL Browser

    This is the main Python script that performs the necessary initialization of the SQL browser and starts the Qt event loop.

    Global Attributes

    None

    Classes

    None

    Functions

    createMainWidget Function to create the main widget.
    main Main entry point into the application.


    createMainWidget

    createMainWidget(argv)

    Function to create the main widget.

    argv
    list of commandline parameters (list of strings)
    Returns:
    reference to the main widget (QWidget)


    main

    main()

    Main entry point into the application.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsSubversion.SvnRev0000644000175000001440000000032112261331352031321 xustar0000000000000000119 path=eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsSubversion.SvnRevisionSelectionDialog.html 30 mtime=1388688106.967229293 30 atime=1389081085.154724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsSubversion.SvnRevisionSelectionDi0000644000175000001440000000572312261331352034247 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsSubversion.SvnRevisionSelectionDialog

    eric4.Plugins.VcsPlugins.vcsSubversion.SvnRevisionSelectionDialog

    Module implementing a dialog to enter the revisions for the svn diff command.

    Global Attributes

    None

    Classes

    SvnRevisionSelectionDialog Class implementing a dialog to enter the revisions for the svn diff command.

    Functions

    None


    SvnRevisionSelectionDialog

    Class implementing a dialog to enter the revisions for the svn diff command.

    Derived from

    QDialog, Ui_SvnRevisionSelectionDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnRevisionSelectionDialog Constructor
    __getRevision Private method to generate the revision.
    getRevisions Public method to get the revisions.

    Static Methods

    None

    SvnRevisionSelectionDialog (Constructor)

    SvnRevisionSelectionDialog(parent = None)

    Constructor

    parent
    parent widget of the dialog (QWidget)

    SvnRevisionSelectionDialog.__getRevision

    __getRevision(no)

    Private method to generate the revision.

    no
    revision number to generate (1 or 2)
    Returns:
    revision (integer or string)

    SvnRevisionSelectionDialog.getRevisions

    getRevisions()

    Public method to get the revisions.

    Returns:
    list two integers or strings

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.IconEditor.IconEditorWindow.html0000644000175000001440000000013212261331351027737 xustar000000000000000030 mtime=1388688105.468228541 30 atime=1389081085.154724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.IconEditor.IconEditorWindow.html0000644000175000001440000003732412261331351027502 0ustar00detlevusers00000000000000 eric4.IconEditor.IconEditorWindow

    eric4.IconEditor.IconEditorWindow

    Module implementing the icon editor main window.

    Global Attributes

    None

    Classes

    IconEditorWindow Class implementing the web browser main window.

    Functions

    None


    IconEditorWindow

    Class implementing the web browser main window.

    Signals

    editorClosed()
    emitted after the window was requested to close down

    Derived from

    KQMainWindow

    Class Attributes

    windows

    Class Methods

    None

    Methods

    IconEditorWindow Constructor
    __about Private slot to show a little About message.
    __aboutKde Private slot to handle the About KDE dialog.
    __aboutQt Private slot to handle the About Qt dialog.
    __checkActions Private slot to check some actions for their enable/disable status.
    __closeAll Private slot to close all other windows.
    __createPaletteDock Private method to initialize the palette dock widget.
    __createStatusBar Private method to initialize the status bar.
    __initActions Private method to define the user interface actions.
    __initEditActions Private method to create the Edit actions.
    __initFileActions Private method to define the file related user interface actions.
    __initFileFilters Private method to define the supported image file filters.
    __initHelpActions Private method to create the Help actions.
    __initMenus Private method to create the menus.
    __initToolbars Private method to create the toolbars.
    __initToolsActions Private method to create the View actions.
    __initViewActions Private method to create the View actions.
    __loadIconFile Private method to load an icon file.
    __maybeSave Private method to ask the user to save the file, if it was modified.
    __modificationChanged Private slot to handle the modificationChanged signal.
    __newIcon Private slot to create a new icon.
    __newWindow Public slot called to open a new icon editor window.
    __openIcon Private slot to open an icon file.
    __saveIcon Private slot to save the icon.
    __saveIconAs Private slot to save the icon with a new name.
    __saveIconFile Private method to save to the given file.
    __setCurrentFile Private method to register the file name of the current file.
    __strippedName Private method to return the filename part of the given path.
    __updatePosition Private slot to show the current cursor position.
    __updateSize Private slot to show the current icon size.
    __updateZoom Private slot to show the current zoom factor.
    __whatsThis Private slot called in to enter Whats This mode.
    __zoom Private method to handle the zoom action.
    __zoomIn Private slot called to handle the zoom in action.
    __zoomOut Private slot called to handle the zoom out action.
    __zoomReset Private slot called to handle the zoom reset action.
    closeEvent Private event handler for the close event.

    Static Methods

    None

    IconEditorWindow (Constructor)

    IconEditorWindow(fileName = "", parent = None, fromEric = False, initShortcutsOnly = False)

    Constructor

    fileName
    name of a file to load on startup (string or QString)
    parent
    parent widget of this window (QWidget)
    fromEric=
    flag indicating whether it was called from within eric4 (boolean)
    initShortcutsOnly=
    flag indicating to just initialize the keyboard shortcuts (boolean)

    IconEditorWindow.__about

    __about()

    Private slot to show a little About message.

    IconEditorWindow.__aboutKde

    __aboutKde()

    Private slot to handle the About KDE dialog.

    IconEditorWindow.__aboutQt

    __aboutQt()

    Private slot to handle the About Qt dialog.

    IconEditorWindow.__checkActions

    __checkActions()

    Private slot to check some actions for their enable/disable status.

    IconEditorWindow.__closeAll

    __closeAll()

    Private slot to close all other windows.

    IconEditorWindow.__createPaletteDock

    __createPaletteDock()

    Private method to initialize the palette dock widget.

    IconEditorWindow.__createStatusBar

    __createStatusBar()

    Private method to initialize the status bar.

    IconEditorWindow.__initActions

    __initActions()

    Private method to define the user interface actions.

    IconEditorWindow.__initEditActions

    __initEditActions()

    Private method to create the Edit actions.

    IconEditorWindow.__initFileActions

    __initFileActions()

    Private method to define the file related user interface actions.

    IconEditorWindow.__initFileFilters

    __initFileFilters()

    Private method to define the supported image file filters.

    IconEditorWindow.__initHelpActions

    __initHelpActions()

    Private method to create the Help actions.

    IconEditorWindow.__initMenus

    __initMenus()

    Private method to create the menus.

    IconEditorWindow.__initToolbars

    __initToolbars()

    Private method to create the toolbars.

    IconEditorWindow.__initToolsActions

    __initToolsActions()

    Private method to create the View actions.

    IconEditorWindow.__initViewActions

    __initViewActions()

    Private method to create the View actions.

    IconEditorWindow.__loadIconFile

    __loadIconFile(fileName)

    Private method to load an icon file.

    fileName
    name of the icon file to load (string or QString).

    IconEditorWindow.__maybeSave

    __maybeSave()

    Private method to ask the user to save the file, if it was modified.

    Returns:
    flag indicating, if it is ok to continue (boolean)

    IconEditorWindow.__modificationChanged

    __modificationChanged(m)

    Private slot to handle the modificationChanged signal.

    m
    modification status

    IconEditorWindow.__newIcon

    __newIcon()

    Private slot to create a new icon.

    IconEditorWindow.__newWindow

    __newWindow()

    Public slot called to open a new icon editor window.

    IconEditorWindow.__openIcon

    __openIcon()

    Private slot to open an icon file.

    IconEditorWindow.__saveIcon

    __saveIcon()

    Private slot to save the icon.

    IconEditorWindow.__saveIconAs

    __saveIconAs()

    Private slot to save the icon with a new name.

    IconEditorWindow.__saveIconFile

    __saveIconFile(fileName)

    Private method to save to the given file.

    fileName
    name of the file to save to (string or QString)
    Returns:
    flag indicating success (boolean)

    IconEditorWindow.__setCurrentFile

    __setCurrentFile(fileName)

    Private method to register the file name of the current file.

    fileName
    name of the file to register (string or QString)

    IconEditorWindow.__strippedName

    __strippedName(fullFileName)

    Private method to return the filename part of the given path.

    fullFileName
    full pathname of the given file (QString)
    Returns:
    filename part (QString)

    IconEditorWindow.__updatePosition

    __updatePosition(x, y)

    Private slot to show the current cursor position.

    x
    x-coordinate (integer)
    y
    y-coordinate (integer)

    IconEditorWindow.__updateSize

    __updateSize(w, h)

    Private slot to show the current icon size.

    w
    width of the icon (integer)
    h
    height of the icon (integer)

    IconEditorWindow.__updateZoom

    __updateZoom()

    Private slot to show the current zoom factor.

    IconEditorWindow.__whatsThis

    __whatsThis()

    Private slot called in to enter Whats This mode.

    IconEditorWindow.__zoom

    __zoom()

    Private method to handle the zoom action.

    IconEditorWindow.__zoomIn

    __zoomIn()

    Private slot called to handle the zoom in action.

    IconEditorWindow.__zoomOut

    __zoomOut()

    Private slot called to handle the zoom out action.

    IconEditorWindow.__zoomReset

    __zoomReset()

    Private slot called to handle the zoom reset action.

    IconEditorWindow.closeEvent

    closeEvent(evt)

    Private event handler for the close event.

    evt
    the close event (QCloseEvent)
    This event is simply accepted after the history has been saved and all window references have been deleted.

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.E4XML.TemplatesWriter.html0000644000175000001440000000013212261331352026436 xustar000000000000000030 mtime=1388688106.494229056 30 atime=1389081085.162724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.E4XML.TemplatesWriter.html0000644000175000001440000000414212261331352026171 0ustar00detlevusers00000000000000 eric4.E4XML.TemplatesWriter

    eric4.E4XML.TemplatesWriter

    Module implementing the writer class for writing an XML templates file.

    Global Attributes

    None

    Classes

    TemplatesWriter Class implementing the writer class for writing an XML templates file.

    Functions

    None


    TemplatesWriter

    Class implementing the writer class for writing an XML templates file.

    Derived from

    XMLWriterBase

    Class Attributes

    None

    Class Methods

    None

    Methods

    TemplatesWriter Constructor
    writeXML Public method to write the XML to the file.

    Static Methods

    None

    TemplatesWriter (Constructor)

    TemplatesWriter(file, templatesViewer)

    Constructor

    file
    open file (like) object for writing

    TemplatesWriter.writeXML

    writeXML()

    Public method to write the XML to the file.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.Plugins.WizardPlugins.ColorDialog0000644000175000001440000000013212261331354031236 xustar000000000000000030 mtime=1388688108.661230144 30 atime=1389081085.162724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.Plugins.WizardPlugins.ColorDialogWizard.html0000644000175000001440000000156512261331354033123 0ustar00detlevusers00000000000000 eric4.Plugins.WizardPlugins.ColorDialogWizard

    eric4.Plugins.WizardPlugins.ColorDialogWizard

    Package implementing the color dialog wizard.

    Modules

    ColorDialogWizardDialog Module implementing the color dialog wizard dialog.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Debugger.EditBreakpointDialog.html0000644000175000001440000000013212261331350030220 xustar000000000000000030 mtime=1388688104.637228123 30 atime=1389081085.162724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Debugger.EditBreakpointDialog.html0000644000175000001440000001054212261331350027754 0ustar00detlevusers00000000000000 eric4.Debugger.EditBreakpointDialog

    eric4.Debugger.EditBreakpointDialog

    Module implementing a dialog to edit breakpoint properties.

    Global Attributes

    None

    Classes

    EditBreakpointDialog Class implementing a dialog to edit breakpoint properties.

    Functions

    None


    EditBreakpointDialog

    Class implementing a dialog to edit breakpoint properties.

    Derived from

    QDialog, Ui_EditBreakpointDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    EditBreakpointDialog Constructor
    getAddData Public method to retrieve the entered data for an add.
    getData Public method to retrieve the entered data.
    on_fileButton_clicked Private slot to select a file via a file selection dialog.
    on_filenameCombo_editTextChanged Private slot to handle the change of the filename.

    Static Methods

    None

    EditBreakpointDialog (Constructor)

    EditBreakpointDialog(id, properties, condHistory, parent = None, name = None, modal = False, addMode = False, filenameHistory = None)

    Constructor

    id
    id of the breakpoint (tuple) (filename, linenumber)
    properties
    properties for the breakpoint (tuple) (condition, temporary flag, enabled flag, ignore count)
    condHistory
    the list of conditionals history (QStringList)
    parent
    the parent of this dialog
    name
    the widget name of this dialog
    modal
    flag indicating a modal dialog

    EditBreakpointDialog.getAddData

    getAddData()

    Public method to retrieve the entered data for an add.

    Returns:
    a tuple containing the new breakpoints properties (filename, lineno, condition, temporary flag, enabled flag, ignore count)

    EditBreakpointDialog.getData

    getData()

    Public method to retrieve the entered data.

    Returns:
    a tuple containing the breakpoints new properties (condition, temporary flag, enabled flag, ignore count)

    EditBreakpointDialog.on_fileButton_clicked

    on_fileButton_clicked()

    Private slot to select a file via a file selection dialog.

    EditBreakpointDialog.on_filenameCombo_editTextChanged

    on_filenameCombo_editTextChanged(fn)

    Private slot to handle the change of the filename.

    fn
    text of the filename edit (QString)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsSubversion.SvnNew0000644000175000001440000000032112261331353031317 xustar0000000000000000119 path=eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsSubversion.SvnNewProjectOptionsDialog.html 30 mtime=1388688107.011229315 30 atime=1389081085.162724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsSubversion.SvnNewProjectOptionsDi0000644000175000001440000001216312261331353034234 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsSubversion.SvnNewProjectOptionsDialog

    eric4.Plugins.VcsPlugins.vcsSubversion.SvnNewProjectOptionsDialog

    Module implementing the Subversion Options Dialog for a new project from the repository.

    Global Attributes

    None

    Classes

    SvnNewProjectOptionsDialog Class implementing the Options Dialog for a new project from the repository.

    Functions

    None


    SvnNewProjectOptionsDialog

    Class implementing the Options Dialog for a new project from the repository.

    Derived from

    QDialog, Ui_SvnNewProjectOptionsDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnNewProjectOptionsDialog Constructor
    getData Public slot to retrieve the data entered into the dialog.
    on_layoutCheckBox_toggled Private slot to handle the change of the layout checkbox.
    on_projectDirButton_clicked Private slot to display a directory selection dialog.
    on_protocolCombo_activated Private slot to switch the status of the directory selection button.
    on_vcsUrlButton_clicked Private slot to display a selection dialog.
    on_vcsUrlEdit_textChanged Private slot to handle changes of the URL.

    Static Methods

    None

    SvnNewProjectOptionsDialog (Constructor)

    SvnNewProjectOptionsDialog(vcs, parent = None)

    Constructor

    vcs
    reference to the version control object
    parent
    parent widget (QWidget)

    SvnNewProjectOptionsDialog.getData

    getData()

    Public slot to retrieve the data entered into the dialog.

    Returns:
    a tuple of a string (project directory) and a dictionary containing the data entered.

    SvnNewProjectOptionsDialog.on_layoutCheckBox_toggled

    on_layoutCheckBox_toggled(checked)

    Private slot to handle the change of the layout checkbox.

    checked
    flag indicating the state of the checkbox (boolean)

    SvnNewProjectOptionsDialog.on_projectDirButton_clicked

    on_projectDirButton_clicked()

    Private slot to display a directory selection dialog.

    SvnNewProjectOptionsDialog.on_protocolCombo_activated

    on_protocolCombo_activated(protocol)

    Private slot to switch the status of the directory selection button.

    SvnNewProjectOptionsDialog.on_vcsUrlButton_clicked

    on_vcsUrlButton_clicked()

    Private slot to display a selection dialog.

    SvnNewProjectOptionsDialog.on_vcsUrlEdit_textChanged

    on_vcsUrlEdit_textChanged(txt)

    Private slot to handle changes of the URL.

    txt
    current text of the line edit (QString)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Project.ProjectBrowserSortFilterProxyMo0000644000175000001440000000013212261331352031443 xustar000000000000000030 mtime=1388688106.003228809 30 atime=1389081085.163724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Project.ProjectBrowserSortFilterProxyModel.html0000644000175000001440000000663512261331352032637 0ustar00detlevusers00000000000000 eric4.Project.ProjectBrowserSortFilterProxyModel

    eric4.Project.ProjectBrowserSortFilterProxyModel

    Module implementing the browser sort filter proxy model.

    Global Attributes

    None

    Classes

    ProjectBrowserSortFilterProxyModel Class implementing the browser sort filter proxy model.

    Functions

    None


    ProjectBrowserSortFilterProxyModel

    Class implementing the browser sort filter proxy model.

    Derived from

    BrowserSortFilterProxyModel

    Class Attributes

    None

    Class Methods

    None

    Methods

    ProjectBrowserSortFilterProxyModel Constructor
    filterAcceptsRow Protected method to filter rows.
    preferencesChanged Public slot called to handle a change of the preferences settings.

    Static Methods

    None

    ProjectBrowserSortFilterProxyModel (Constructor)

    ProjectBrowserSortFilterProxyModel(filterType, parent = None)

    Constructor

    filterType
    type of filter to apply
    parent
    reference to the parent object (QObject)

    ProjectBrowserSortFilterProxyModel.filterAcceptsRow

    filterAcceptsRow(source_row, source_parent)

    Protected method to filter rows.

    It implements a filter to suppress the display of non public classes, methods and attributes.

    source_row
    row number (in the source model) of item (integer)
    source_parent
    index of parent item (in the source model) of item (QModelIndex)
    Returns:
    flag indicating, if the item should be shown (boolean)

    ProjectBrowserSortFilterProxyModel.preferencesChanged

    preferencesChanged()

    Public slot called to handle a change of the preferences settings.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.PluginTabnanny.html0000644000175000001440000000013212261331350027022 xustar000000000000000030 mtime=1388688104.470228039 30 atime=1389081085.163724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.PluginTabnanny.html0000644000175000001440000001601412261331350026556 0ustar00detlevusers00000000000000 eric4.Plugins.PluginTabnanny

    eric4.Plugins.PluginTabnanny

    Module implementing the Tabnanny plugin.

    Global Attributes

    author
    autoactivate
    className
    deactivateable
    error
    longDescription
    name
    packageName
    shortDescription
    version

    Classes

    TabnannyPlugin Class implementing the Tabnanny plugin.

    Functions

    None


    TabnannyPlugin

    Class implementing the Tabnanny plugin.

    Derived from

    QObject

    Class Attributes

    None

    Class Methods

    None

    Methods

    TabnannyPlugin Constructor
    __editorClosed Private slot called, when an editor was closed.
    __editorOpened Private slot called, when a new editor was opened.
    __editorShowMenu Private slot called, when the the editor context menu or a submenu is about to be shown.
    __editorTabnanny Private slot to handle the tabnanny context menu action of the editors.
    __initialize Private slot to (re)initialize the plugin.
    __projectBrowserShowMenu Private slot called, when the the project browser context menu or a submenu is about to be shown.
    __projectBrowserTabnanny Private method to handle the tabnanny context menu action of the project sources browser.
    __projectShowMenu Private slot called, when the the project menu or a submenu is about to be shown.
    __projectTabnanny Public slot used to check the project files for bad indentations.
    activate Public method to activate this plugin.
    deactivate Public method to deactivate this plugin.

    Static Methods

    None

    TabnannyPlugin (Constructor)

    TabnannyPlugin(ui)

    Constructor

    ui
    reference to the user interface object (UI.UserInterface)

    TabnannyPlugin.__editorClosed

    __editorClosed(editor)

    Private slot called, when an editor was closed.

    editor
    reference to the editor (QScintilla.Editor)

    TabnannyPlugin.__editorOpened

    __editorOpened(editor)

    Private slot called, when a new editor was opened.

    editor
    reference to the new editor (QScintilla.Editor)

    TabnannyPlugin.__editorShowMenu

    __editorShowMenu(menuName, menu, editor)

    Private slot called, when the the editor context menu or a submenu is about to be shown.

    menuName
    name of the menu to be shown (string)
    menu
    reference to the menu (QMenu)
    editor
    reference to the editor

    TabnannyPlugin.__editorTabnanny

    __editorTabnanny()

    Private slot to handle the tabnanny context menu action of the editors.

    TabnannyPlugin.__initialize

    __initialize()

    Private slot to (re)initialize the plugin.

    TabnannyPlugin.__projectBrowserShowMenu

    __projectBrowserShowMenu(menuName, menu)

    Private slot called, when the the project browser context menu or a submenu is about to be shown.

    menuName
    name of the menu to be shown (string)
    menu
    reference to the menu (QMenu)

    TabnannyPlugin.__projectBrowserTabnanny

    __projectBrowserTabnanny()

    Private method to handle the tabnanny context menu action of the project sources browser.

    TabnannyPlugin.__projectShowMenu

    __projectShowMenu(menuName, menu)

    Private slot called, when the the project menu or a submenu is about to be shown.

    menuName
    name of the menu to be shown (string)
    menu
    reference to the menu (QMenu)

    TabnannyPlugin.__projectTabnanny

    __projectTabnanny()

    Public slot used to check the project files for bad indentations.

    TabnannyPlugin.activate

    activate()

    Public method to activate this plugin.

    Returns:
    tuple of None and activation status (boolean)

    TabnannyPlugin.deactivate

    deactivate()

    Public method to deactivate this plugin.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Project.ProjectBrowserModel.html0000644000175000001440000000013212261331352030013 xustar000000000000000030 mtime=1388688106.039228827 30 atime=1389081085.163724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Project.ProjectBrowserModel.html0000644000175000001440000005737012261331352027561 0ustar00detlevusers00000000000000 eric4.Project.ProjectBrowserModel

    eric4.Project.ProjectBrowserModel

    Module implementing the browser model.

    Global Attributes

    ProjectBrowserFormType
    ProjectBrowserInterfaceType
    ProjectBrowserItemDirectory
    ProjectBrowserItemFile
    ProjectBrowserItemSimpleDirectory
    ProjectBrowserNoType
    ProjectBrowserOthersType
    ProjectBrowserResourceType
    ProjectBrowserSourceType
    ProjectBrowserTranslationType

    Classes

    ProjectBrowserDirectoryItem Class implementing the data structure for project browser directory items.
    ProjectBrowserFileItem Class implementing the data structure for project browser file items.
    ProjectBrowserItemMixin Class implementing common methods of project browser items.
    ProjectBrowserModel Class implementing the project browser model.
    ProjectBrowserSimpleDirectoryItem Class implementing the data structure for project browser simple directory items.

    Functions

    None


    ProjectBrowserDirectoryItem

    Class implementing the data structure for project browser directory items.

    Derived from

    BrowserDirectoryItem, ProjectBrowserItemMixin

    Class Attributes

    None

    Class Methods

    None

    Methods

    ProjectBrowserDirectoryItem Constructor

    Static Methods

    None

    ProjectBrowserDirectoryItem (Constructor)

    ProjectBrowserDirectoryItem(parent, dinfo, projectType, full = True, bold = False)

    Constructor

    parent
    parent item
    dinfo
    dinfo is the string for the directory (string or QString)
    projectType
    type of file/directory in the project
    full
    flag indicating full pathname should be displayed (boolean)
    bold
    flag indicating a highlighted font (boolean)


    ProjectBrowserFileItem

    Class implementing the data structure for project browser file items.

    Derived from

    BrowserFileItem, ProjectBrowserItemMixin

    Class Attributes

    None

    Class Methods

    None

    Methods

    ProjectBrowserFileItem Constructor

    Static Methods

    None

    ProjectBrowserFileItem (Constructor)

    ProjectBrowserFileItem(parent, finfo, projectType, full = True, bold = False, sourceLanguage = "")

    Constructor

    parent
    parent item
    finfo
    the string for the file (string)
    projectType
    type of file/directory in the project
    full
    flag indicating full pathname should be displayed (boolean)
    bold
    flag indicating a highlighted font (boolean)
    sourceLanguage
    source code language of the project (string)


    ProjectBrowserItemMixin

    Class implementing common methods of project browser items.

    It is meant to be used as a mixin class.

    Derived from

    object

    Class Attributes

    None

    Class Methods

    None

    Methods

    ProjectBrowserItemMixin Constructor
    addProjectType Public method to add a type to the list.
    addVcsStatus Public method to add the VCS status.
    getProjectTypes Public method to get the project type.
    getTextColor Public method to get the items text color.
    setVcsState Public method to set the items VCS state.
    setVcsStatus Public method to set the VCS status.

    Static Methods

    None

    ProjectBrowserItemMixin (Constructor)

    ProjectBrowserItemMixin(type_, bold = False)

    Constructor

    type_
    type of file/directory in the project
    bold
    flag indicating a highlighted font

    ProjectBrowserItemMixin.addProjectType

    addProjectType(type_)

    Public method to add a type to the list.

    type_
    type to add to the list

    ProjectBrowserItemMixin.addVcsStatus

    addVcsStatus(vcsStatus)

    Public method to add the VCS status.

    vcsStatus
    VCS status text (string or QString)

    ProjectBrowserItemMixin.getProjectTypes

    getProjectTypes()

    Public method to get the project type.

    Returns:
    project type

    ProjectBrowserItemMixin.getTextColor

    getTextColor()

    Public method to get the items text color.

    Returns:
    text color (QVariant(QColor))

    ProjectBrowserItemMixin.setVcsState

    setVcsState(state)

    Public method to set the items VCS state.

    state
    VCS state (one of A, C, M, U or " ") (string)

    ProjectBrowserItemMixin.setVcsStatus

    setVcsStatus(vcsStatus)

    Public method to set the VCS status.

    vcsStatus
    VCS status text (string or QString)


    ProjectBrowserModel

    Class implementing the project browser model.

    Signals

    vcsStateChanged(string)
    emitted after the VCS state has changed

    Derived from

    BrowserModel

    Class Attributes

    None

    Class Methods

    None

    Methods

    ProjectBrowserModel Constructor
    __addVCSStatus Private method used to set the vcs status of a node.
    __changeParentsVCSState Private method to recursively change the parents VCS state.
    __updateVCSStatus Private method used to update the vcs status of a node.
    addNewItem Public method to add a new item to the model.
    changeVCSStates Public slot to record the (non normal) VCS states.
    data Public method to get data of an item.
    directoryChanged Public slot to handle the directoryChanged signal of the watcher.
    findChildItem Public method to find a child item given some text.
    findItem Public method to find an item given its name.
    findParentItemByName Public method to find an item given its name.
    itemIndexByName Public method to find an item's index given its name.
    populateItem Public method to populate an item's subtree.
    populateProjectDirectoryItem Public method to populate a directory item's subtree.
    preferencesChanged Public method used to handle a change in preferences.
    projectClosed Public method called after a project has been closed.
    projectOpened Public method used to populate the model after a project has been opened.
    projectPropertiesChanged Public method to react on a change of the project properties.
    removeItem Public method to remove a named item.
    renameItem Public method to rename an item.
    repopulateItem Public method to repopulate an item.
    updateVCSStatus Public method used to update the vcs status of a node.

    Static Methods

    None

    ProjectBrowserModel (Constructor)

    ProjectBrowserModel(parent)

    Constructor

    parent
    reference to parent object (Project.Project)

    ProjectBrowserModel.__addVCSStatus

    __addVCSStatus(item, name)

    Private method used to set the vcs status of a node.

    item
    item to work on
    name
    filename belonging to this item (string)

    ProjectBrowserModel.__changeParentsVCSState

    __changeParentsVCSState(path, itemCache)

    Private method to recursively change the parents VCS state.

    path
    pathname of parent item (string)
    itemCache
    reference to the item cache used to store references to named items

    ProjectBrowserModel.__updateVCSStatus

    __updateVCSStatus(item, name, recursive = True)

    Private method used to update the vcs status of a node.

    item
    item to work on
    name
    filename belonging to this item (string)
    recursive=
    flag indicating a recursive update (boolean)

    ProjectBrowserModel.addNewItem

    addNewItem(typeString, name, additionalTypeStrings = [])

    Public method to add a new item to the model.

    typeString
    string denoting the type of the new item (string)
    name
    name of the new item (string)
    additionalTypeStrings
    names of additional types (list of string)

    ProjectBrowserModel.changeVCSStates

    changeVCSStates(statesList)

    Public slot to record the (non normal) VCS states.

    statesList
    list of VCS state entries (QStringList) giving the states in the first column and the path relative to the project directory starting with the third column. The allowed status flags are:
    • "A" path was added but not yet comitted
    • "M" path has local changes
    • "R" path was deleted and then re-added
    • "U" path needs an update
    • "Z" path contains a conflict
    • " " path is back at normal

    ProjectBrowserModel.data

    data(index, role)

    Public method to get data of an item.

    index
    index of the data to retrieve (QModelIndex)
    role
    role of data (Qt.ItemDataRole)
    Returns:
    requested data (QVariant)

    ProjectBrowserModel.directoryChanged

    directoryChanged(path)

    Public slot to handle the directoryChanged signal of the watcher.

    path
    path of the directory (string)

    ProjectBrowserModel.findChildItem

    findChildItem(text, column, parentItem = None)

    Public method to find a child item given some text.

    text
    text to search for (string or QString)
    column
    column to search in (integer)
    parentItem
    reference to parent item
    Returns:
    reference to the item found

    ProjectBrowserModel.findItem

    findItem(name)

    Public method to find an item given its name.

    name
    name of the item (string or QString)
    Returns:
    reference to the item found

    ProjectBrowserModel.findParentItemByName

    findParentItemByName(type_, name, dontSplit = False)

    Public method to find an item given its name.

    Note: This method creates all necessary parent items, if they don't exist.

    type_
    type of the item
    name
    name of the item (string or QString)
    dontSplit
    flag indicating the name should not be split (boolean)
    Returns:
    reference to the item found and the new display name (QString)

    ProjectBrowserModel.itemIndexByName

    itemIndexByName(name)

    Public method to find an item's index given its name.

    name
    name of the item (string or QString)
    Returns:
    index of the item found (QModelIndex)

    ProjectBrowserModel.populateItem

    populateItem(parentItem, repopulate = False)

    Public method to populate an item's subtree.

    parentItem
    reference to the item to be populated
    repopulate
    flag indicating a repopulation (boolean)

    ProjectBrowserModel.populateProjectDirectoryItem

    populateProjectDirectoryItem(parentItem, repopulate = False)

    Public method to populate a directory item's subtree.

    parentItem
    reference to the directory item to be populated
    repopulate
    flag indicating a repopulation (boolean)

    ProjectBrowserModel.preferencesChanged

    preferencesChanged()

    Public method used to handle a change in preferences.

    ProjectBrowserModel.projectClosed

    projectClosed()

    Public method called after a project has been closed.

    ProjectBrowserModel.projectOpened

    projectOpened()

    Public method used to populate the model after a project has been opened.

    ProjectBrowserModel.projectPropertiesChanged

    projectPropertiesChanged()

    Public method to react on a change of the project properties.

    ProjectBrowserModel.removeItem

    removeItem(name)

    Public method to remove a named item.

    name
    file or directory name of the item (string or QString).

    ProjectBrowserModel.renameItem

    renameItem(name, newFilename)

    Public method to rename an item.

    name
    the old display name (string or QString)
    newFilename
    new filename of the item (string)

    ProjectBrowserModel.repopulateItem

    repopulateItem(name)

    Public method to repopulate an item.

    name
    name of the file relative to the project root (string)

    ProjectBrowserModel.updateVCSStatus

    updateVCSStatus(name, recursive = True)

    Public method used to update the vcs status of a node.

    name
    filename belonging to this item (string)
    recursive
    flag indicating a recursive update (boolean)


    ProjectBrowserSimpleDirectoryItem

    Class implementing the data structure for project browser simple directory items.

    Derived from

    BrowserItem, ProjectBrowserItemMixin

    Class Attributes

    None

    Class Methods

    None

    Methods

    ProjectBrowserSimpleDirectoryItem Constructor
    dirName Public method returning the directory name.
    lessThan Public method to check, if the item is less than the other one.
    setName Public method to set the directory name.

    Static Methods

    None

    ProjectBrowserSimpleDirectoryItem (Constructor)

    ProjectBrowserSimpleDirectoryItem(parent, projectType, text, path = "")

    Constructor

    parent
    parent item
    projectType
    type of file/directory in the project
    text
    text to be displayed (string or QString)
    path
    path of the directory (string or QString)

    ProjectBrowserSimpleDirectoryItem.dirName

    dirName()

    Public method returning the directory name.

    Returns:
    directory name (string)

    ProjectBrowserSimpleDirectoryItem.lessThan

    lessThan(other, column, order)

    Public method to check, if the item is less than the other one.

    other
    reference to item to compare against (BrowserItem)
    column
    column number to use for the comparison (integer)
    order
    sort order (Qt.SortOrder) (for special sorting)
    Returns:
    true, if this item is less than other (boolean)

    ProjectBrowserSimpleDirectoryItem.setName

    setName(dinfo, full = True)

    Public method to set the directory name.

    dinfo
    dinfo is the string for the directory (string or QString)
    full
    flag indicating full pathname should be displayed (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.Lexers.LexerVHDL.html0000644000175000001440000000013212261331354027515 xustar000000000000000030 mtime=1388688108.549230087 30 atime=1389081085.163724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.Lexers.LexerVHDL.html0000644000175000001440000000653312261331354027256 0ustar00detlevusers00000000000000 eric4.QScintilla.Lexers.LexerVHDL

    eric4.QScintilla.Lexers.LexerVHDL

    Module implementing a VHDL lexer with some additional methods.

    Global Attributes

    None

    Classes

    LexerVHDL Subclass to implement some additional lexer dependant methods.

    Functions

    None


    LexerVHDL

    Subclass to implement some additional lexer dependant methods.

    Derived from

    QsciLexerVHDL, Lexer

    Class Attributes

    None

    Class Methods

    None

    Methods

    LexerVHDL Constructor
    defaultKeywords Public method to get the default keywords.
    initProperties Public slot to initialize the properties.
    isCommentStyle Public method to check, if a style is a comment style.
    isStringStyle Public method to check, if a style is a string style.

    Static Methods

    None

    LexerVHDL (Constructor)

    LexerVHDL(parent=None)

    Constructor

    parent
    parent widget of this lexer

    LexerVHDL.defaultKeywords

    defaultKeywords(kwSet)

    Public method to get the default keywords.

    kwSet
    number of the keyword set (integer)
    Returns:
    string giving the keywords (string) or None

    LexerVHDL.initProperties

    initProperties()

    Public slot to initialize the properties.

    LexerVHDL.isCommentStyle

    isCommentStyle(style)

    Public method to check, if a style is a comment style.

    Returns:
    flag indicating a comment style (boolean)

    LexerVHDL.isStringStyle

    isStringStyle(style)

    Public method to check, if a style is a string style.

    Returns:
    flag indicating a string style (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.Bookmarks.XbelWriter.html0000644000175000001440000000013212261331353030603 xustar000000000000000030 mtime=1388688107.890229756 30 atime=1389081085.163724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.Bookmarks.XbelWriter.html0000644000175000001440000000566312261331353030347 0ustar00detlevusers00000000000000 eric4.Helpviewer.Bookmarks.XbelWriter

    eric4.Helpviewer.Bookmarks.XbelWriter

    Module implementing a class to write XBEL bookmark files.

    Global Attributes

    None

    Classes

    XbelWriter Class implementing a writer object to generate XBEL bookmark files.

    Functions

    None


    XbelWriter

    Class implementing a writer object to generate XBEL bookmark files.

    Derived from

    QXmlStreamWriter

    Class Attributes

    None

    Class Methods

    None

    Methods

    XbelWriter Constructor
    __write Private method to write an XBEL bookmark file.
    __writeItem Private method to write an entry for a node.
    write Public method to write an XBEL bookmark file.

    Static Methods

    None

    XbelWriter (Constructor)

    XbelWriter()

    Constructor

    XbelWriter.__write

    __write(root)

    Private method to write an XBEL bookmark file.

    root
    root node of the bookmark tree (BookmarkNode)

    XbelWriter.__writeItem

    __writeItem(node)

    Private method to write an entry for a node.

    node
    reference to the node to be written (BookmarkNode)

    XbelWriter.write

    write(fileNameOrDevice, root)

    Public method to write an XBEL bookmark file.

    fileNameOrDevice
    name of the file to write (string or QString) or device to write to (QIODevice)
    root
    root node of the bookmark tree (BookmarkNode)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.eric4_uipreviewer.html0000644000175000001440000000013212261331350026105 xustar000000000000000030 mtime=1388688104.221227914 30 atime=1389081085.164724358 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.eric4_uipreviewer.html0000644000175000001440000000332512261331350025642 0ustar00detlevusers00000000000000 eric4.eric4_uipreviewer

    eric4.eric4_uipreviewer

    Eric4 UI Previewer

    This is the main Python script that performs the necessary initialization of the ui previewer and starts the Qt event loop. This is a standalone version of the integrated ui previewer.

    Global Attributes

    None

    Classes

    None

    Functions

    createMainWidget Function to create the main widget.
    main Main entry point into the application.


    createMainWidget

    createMainWidget(argv)

    Function to create the main widget.

    argv
    list of commandline parameters (list of strings)
    Returns:
    reference to the main widget (QWidget)


    main

    main()

    Main entry point into the application.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Graphics.AssociationItem.html0000644000175000001440000000013212261331350027303 xustar000000000000000030 mtime=1388688104.841228226 30 atime=1389081085.164724358 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Graphics.AssociationItem.html0000644000175000001440000002424212261331350027041 0ustar00detlevusers00000000000000 eric4.Graphics.AssociationItem

    eric4.Graphics.AssociationItem

    Module implementing a graphics item for an association between two items.

    Global Attributes

    Center
    East
    Generalisation
    Imports
    NoRegion
    Normal
    North
    NorthEast
    NorthWest
    South
    SouthEast
    SouthWest
    West

    Classes

    AssociationItem Class implementing a graphics item for an association between two items.

    Functions

    None


    AssociationItem

    Class implementing a graphics item for an association between two items.

    The association is drawn as an arrow starting at the first items and ending at the second.

    Derived from

    E4ArrowItem

    Class Attributes

    None

    Class Methods

    None

    Methods

    AssociationItem Constructor
    __calculateEndingPoints_center Private method to calculate the ending points of the association item.
    __calculateEndingPoints_rectangle Private method to calculate the ending points of the association item.
    __findIntersection Method to calculate the intersection point of two lines.
    __findPointRegion Private method to find out, which region of rectangle rect contains the point (PosX, PosY) and returns the region number.
    __findRectIntersectionPoint Private method to find the intersetion point of a line with a rectangle.
    __mapRectFromItem Private method to map item's rectangle to this item's coordinate system.
    __updateEndPoint Private method to update an endpoint.
    unassociate Public method to unassociate from the widgets.
    widgetMoved Public method to recalculate the association after a widget was moved.

    Static Methods

    None

    AssociationItem (Constructor)

    AssociationItem(itemA, itemB, type = Normal, parent = None)

    Constructor

    itemA
    first widget of the association
    itemB
    second widget of the association
    type
    type of the association. This must be one of
    • Normal (default)
    • Generalisation
    • Imports
    parent=
    reference to the parent object (QGraphicsItem)

    AssociationItem.__calculateEndingPoints_center

    __calculateEndingPoints_center()

    Private method to calculate the ending points of the association item.

    The ending points are calculated from the centers of the two associated items.

    AssociationItem.__calculateEndingPoints_rectangle

    __calculateEndingPoints_rectangle()

    Private method to calculate the ending points of the association item.

    The ending points are calculated by the following method.

    For each item the diagram is divided in four Regions by its diagonals as indicated below

                       \  Region 2  /
                        \          /
                         |--------|
                         | \    / |
                         |  \  /  |
                         |   \/   |
                Region 1 |   /\   | Region 3
                         |  /  \  |
                         | /    \ |
                         |--------|
                        /          \
                       /  Region 4  \
            

    Each diagonal is defined by two corners of the bounding rectangle

    To calculate the start point we have to find out in which region (defined by itemA's diagonals) is itemB's TopLeft corner (lets call it region M). After that the start point will be the middle point of rectangle's side contained in region M.

    To calculate the end point we repeat the above but in the opposite direction (from itemB to itemA)

    AssociationItem.__findIntersection

    __findIntersection(p1, p2, p3, p4)

    Method to calculate the intersection point of two lines.

    The first line is determined by the points p1 and p2, the second line by p3 and p4. If the intersection point is not contained in the segment p1p2, then it returns (-1.0, -1.0).

    For the function's internal calculations remember:
    QT coordinates start with the point (0,0) as the topleft corner and x-values increase from left to right and y-values increase from top to bottom; it means the visible area is quadrant I in the regular XY coordinate system

                Quadrant II     |   Quadrant I
               -----------------|-----------------
                Quadrant III    |   Quadrant IV
            

    In order for the linear function calculations to work in this method we must switch x and y values (x values become y values and viceversa)

    p1
    first point of first line (QPointF)
    p2
    second point of first line (QPointF)
    p3
    first point of second line (QPointF)
    p4
    second point of second line (QPointF)
    Returns:
    the intersection point (QPointF)

    AssociationItem.__findPointRegion

    __findPointRegion(rect, posX, posY)

    Private method to find out, which region of rectangle rect contains the point (PosX, PosY) and returns the region number.

    rect
    rectangle to calculate the region for (QRectF)
    posX
    x position of point (float)
    posY
    y position of point (float)
    Returns:
    the calculated region number
    West = Region 1
    North = Region 2
    East = Region 3
    South = Region 4
    NorthWest = On diagonal 2 between Region 1 and 2
    NorthEast = On diagonal 1 between Region 2 and 3
    SouthEast = On diagonal 2 between Region 3 and 4
    SouthWest = On diagonal 1 between Region4 and 1
    Center = On diagonal 1 and On diagonal 2 (the center)

    AssociationItem.__findRectIntersectionPoint

    __findRectIntersectionPoint(item, p1, p2)

    Private method to find the intersetion point of a line with a rectangle.

    item
    item to check against
    p1
    first point of the line (QPointF)
    p2
    second point of the line (QPointF)
    Returns:
    the intersection point (QPointF)

    AssociationItem.__mapRectFromItem

    __mapRectFromItem(item)

    Private method to map item's rectangle to this item's coordinate system.

    item
    reference to the item to be mapped (QGraphicsRectItem)
    Returns:
    item's rectangle in local coordinates (QRectF)

    AssociationItem.__updateEndPoint

    __updateEndPoint(region, isWidgetA)

    Private method to update an endpoint.

    region
    the region for the endpoint (integer)
    isWidgetA
    flag indicating update for itemA is done (boolean)

    AssociationItem.unassociate

    unassociate()

    Public method to unassociate from the widgets.

    AssociationItem.widgetMoved

    widgetMoved()

    Public method to recalculate the association after a widget was moved.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.History.HistoryTreeModel.htm0000644000175000001440000000013212261331353031313 xustar000000000000000030 mtime=1388688107.770229696 30 atime=1389081085.164724358 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.History.HistoryTreeModel.html0000644000175000001440000002436312261331353031231 0ustar00detlevusers00000000000000 eric4.Helpviewer.History.HistoryTreeModel

    eric4.Helpviewer.History.HistoryTreeModel

    Module implementing the history tree model.

    Global Attributes

    None

    Classes

    HistoryTreeModel Class implementing the history tree model.

    Functions

    None


    HistoryTreeModel

    Class implementing the history tree model.

    Derived from

    QAbstractProxyModel

    Class Attributes

    None

    Class Methods

    None

    Methods

    HistoryTreeModel Constructor
    __sourceDateRow Private method to translate the top level date row into the offset where that date starts.
    __sourceReset Private slot to handle a reset of the source model.
    __sourceRowsInserted Private slot to handle the insertion of data in the source model.
    __sourceRowsRemoved Private slot to handle the removal of data in the source model.
    columnCount Public method to get the number of columns.
    data Public method to get data from the model.
    flags Public method to get the item flags.
    hasChildren Public method to check, if an entry has some children.
    headerData Public method to get the header data.
    index Public method to create an index.
    mapFromSource Public method to map an index to the proxy model index.
    mapToSource Public method to map an index to the source model index.
    parent Public method to get the parent index.
    removeRows Public method to remove entries from the model.
    rowCount Public method to determine the number of rows.
    setSourceModel Public method to set the source model.

    Static Methods

    None

    HistoryTreeModel (Constructor)

    HistoryTreeModel(sourceModel, parent = None)

    Constructor

    sourceModel
    reference to the source model (QAbstractItemModel)
    parent
    reference to the parent object (QObject)

    HistoryTreeModel.__sourceDateRow

    __sourceDateRow(row)

    Private method to translate the top level date row into the offset where that date starts.

    row
    row number of the date (integer)
    Returns:
    offset where that date starts (integer)

    HistoryTreeModel.__sourceReset

    __sourceReset()

    Private slot to handle a reset of the source model.

    HistoryTreeModel.__sourceRowsInserted

    __sourceRowsInserted(parent, start, end)

    Private slot to handle the insertion of data in the source model.

    parent
    reference to the parent index (QModelIndex)
    start
    start row (integer)
    end
    end row (integer)

    HistoryTreeModel.__sourceRowsRemoved

    __sourceRowsRemoved(parent, start, end)

    Private slot to handle the removal of data in the source model.

    parent
    reference to the parent index (QModelIndex)
    start
    start row (integer)
    end
    end row (integer)

    HistoryTreeModel.columnCount

    columnCount(parent = QModelIndex())

    Public method to get the number of columns.

    parent
    index of parent (QModelIndex)
    Returns:
    number of columns (integer)

    HistoryTreeModel.data

    data(index, role = Qt.DisplayRole)

    Public method to get data from the model.

    index
    index of history entry to get data for (QModelIndex)
    role
    data role (integer)
    Returns:
    history entry data (QVariant)

    HistoryTreeModel.flags

    flags(index)

    Public method to get the item flags.

    index
    index of the item (QModelIndex)
    Returns:
    flags (Qt.ItemFlags)

    HistoryTreeModel.hasChildren

    hasChildren(parent = QModelIndex())

    Public method to check, if an entry has some children.

    parent
    index of the entry to check (QModelIndex)
    Returns:
    flag indicating the presence of children (boolean)

    HistoryTreeModel.headerData

    headerData(section, orientation, role = Qt.DisplayRole)

    Public method to get the header data.

    section
    section number (integer)
    orientation
    header orientation (Qt.Orientation)
    role
    data role (integer)
    Returns:
    header data (QVariant)

    HistoryTreeModel.index

    index(row, column, parent = QModelIndex())

    Public method to create an index.

    row
    row number for the index (integer)
    column
    column number for the index (integer)
    parent
    index of the parent item (QModelIndex)
    Returns:
    requested index (QModelIndex)

    HistoryTreeModel.mapFromSource

    mapFromSource(sourceIndex)

    Public method to map an index to the proxy model index.

    sourceIndex
    reference to a source model index (QModelIndex)
    Returns:
    proxy model index (QModelIndex)

    HistoryTreeModel.mapToSource

    mapToSource(proxyIndex)

    Public method to map an index to the source model index.

    proxyIndex
    reference to a proxy model index (QModelIndex)
    Returns:
    source model index (QModelIndex)

    HistoryTreeModel.parent

    parent(index)

    Public method to get the parent index.

    index
    index of item to get parent (QModelIndex)
    Returns:
    index of parent (QModelIndex)

    HistoryTreeModel.removeRows

    removeRows(row, count, parent = QModelIndex())

    Public method to remove entries from the model.

    row
    row of the first entry to remove (integer)
    count
    number of entries to remove (integer)
    index
    of the parent entry (QModelIndex)
    Returns:
    flag indicating successful removal (boolean)

    HistoryTreeModel.rowCount

    rowCount(parent = QModelIndex())

    Public method to determine the number of rows.

    parent
    index of parent (QModelIndex)
    Returns:
    number of rows (integer)

    HistoryTreeModel.setSourceModel

    setSourceModel(sourceModel)

    Public method to set the source model.

    sourceModel
    reference to the source model (QAbstractItemModel)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsSubversion.SvnCom0000644000175000001440000000013212261331352031303 xustar000000000000000030 mtime=1388688106.971229295 30 atime=1389081085.164724358 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsSubversion.SvnCommitDialog.html0000644000175000001440000001277512261331352033646 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsSubversion.SvnCommitDialog

    eric4.Plugins.VcsPlugins.vcsSubversion.SvnCommitDialog

    Module implementing a dialog to enter the commit message.

    Global Attributes

    None

    Classes

    SvnCommitDialog Class implementing a dialog to enter the commit message.

    Functions

    None


    SvnCommitDialog

    Class implementing a dialog to enter the commit message.

    Signals

    accepted()
    emitted, if the dialog was accepted
    rejected()
    emitted, if the dialog was rejected

    Derived from

    QWidget, Ui_SvnCommitDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnCommitDialog Constructor
    changelistsData Public method to retrieve the changelists data.
    hasChangelists Public method to check, if the user entered some changelists.
    logMessage Public method to retrieve the log message.
    on_buttonBox_accepted Private slot called by the buttonBox accepted signal.
    on_buttonBox_clicked Private slot called by a button of the button box clicked.
    on_buttonBox_rejected Private slot called by the buttonBox rejected signal.
    on_recentComboBox_activated Private slot to select a commit message from recent ones.
    showEvent Public method called when the dialog is about to be shown.

    Static Methods

    None

    SvnCommitDialog (Constructor)

    SvnCommitDialog(vcs, parent = None)

    Constructor

    vcs
    reference to the vcs object
    parent
    parent widget (QWidget)

    SvnCommitDialog.changelistsData

    changelistsData()

    Public method to retrieve the changelists data.

    Returns:
    tuple containing the changelists (list of strings) and a flag indicating to keep changelists (boolean)

    SvnCommitDialog.hasChangelists

    hasChangelists()

    Public method to check, if the user entered some changelists.

    Returns:
    flag indicating availability of changelists (boolean)

    SvnCommitDialog.logMessage

    logMessage()

    Public method to retrieve the log message.

    Returns:
    the log message (QString)

    SvnCommitDialog.on_buttonBox_accepted

    on_buttonBox_accepted()

    Private slot called by the buttonBox accepted signal.

    SvnCommitDialog.on_buttonBox_clicked

    on_buttonBox_clicked(button)

    Private slot called by a button of the button box clicked.

    button
    button that was clicked (QAbstractButton)

    SvnCommitDialog.on_buttonBox_rejected

    on_buttonBox_rejected()

    Private slot called by the buttonBox rejected signal.

    SvnCommitDialog.on_recentComboBox_activated

    on_recentComboBox_activated(txt)

    Private slot to select a commit message from recent ones.

    SvnCommitDialog.showEvent

    showEvent(evt)

    Public method called when the dialog is about to be shown.

    evt
    the event (QShowEvent)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.MultiProject.PropertiesDialog.html0000644000175000001440000000013212261331351030346 xustar000000000000000030 mtime=1388688105.161228386 30 atime=1389081085.164724358 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.MultiProject.PropertiesDialog.html0000644000175000001440000000445512261331351030110 0ustar00detlevusers00000000000000 eric4.MultiProject.PropertiesDialog

    eric4.MultiProject.PropertiesDialog

    Module implementing the multi project properties dialog.

    Global Attributes

    None

    Classes

    PropertiesDialog Class implementing the multi project properties dialog.

    Functions

    None


    PropertiesDialog

    Class implementing the multi project properties dialog.

    Derived from

    QDialog, Ui_PropertiesDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    PropertiesDialog Constructor
    storeData Public method to store the entered/modified data.

    Static Methods

    None

    PropertiesDialog (Constructor)

    PropertiesDialog(multiProject, new = True, parent = None)

    Constructor

    multiProject
    reference to the multi project object
    new
    flag indicating the generation of a new multi project
    parent
    parent widget of this dialog (QWidget)

    PropertiesDialog.storeData

    storeData()

    Public method to store the entered/modified data.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.AdBlock.AdBlockPage.html0000644000175000001440000000013212261331353030157 xustar000000000000000030 mtime=1388688107.711229666 30 atime=1389081085.164724358 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.AdBlock.AdBlockPage.html0000644000175000001440000000462512261331353027720 0ustar00detlevusers00000000000000 eric4.Helpviewer.AdBlock.AdBlockPage

    eric4.Helpviewer.AdBlock.AdBlockPage

    Module implementing a class to apply AdBlock rules to a web page.

    Global Attributes

    None

    Classes

    AdBlockPage Class to apply AdBlock rules to a web page.

    Functions

    None


    AdBlockPage

    Class to apply AdBlock rules to a web page.

    Derived from

    QObject

    Class Attributes

    None

    Class Methods

    None

    Methods

    __checkRule Private method to check, if a rule applies to the given web page and host.
    applyRulesToPage Public method to applay AdBlock rules to a web page.

    Static Methods

    None

    AdBlockPage.__checkRule

    __checkRule(rule, page, host)

    Private method to check, if a rule applies to the given web page and host.

    rule
    reference to the rule to check (AdBlockRule)
    page
    reference to the web page (QWebPage)
    host
    host name (string or QString)

    AdBlockPage.applyRulesToPage

    applyRulesToPage(page)

    Public method to applay AdBlock rules to a web page.

    page
    reference to the web page (QWebPage)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Debugger.VariablesViewer.html0000644000175000001440000000013212261331350027266 xustar000000000000000030 mtime=1388688104.771228191 30 atime=1389081085.164724358 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Debugger.VariablesViewer.html0000644000175000001440000005356412261331350027035 0ustar00detlevusers00000000000000 eric4.Debugger.VariablesViewer

    eric4.Debugger.VariablesViewer

    Module implementing the variables viewer widget.

    Global Attributes

    None

    Classes

    ArrayElementVarItem Class implementing a VariableItem that represents an array element.
    SpecialArrayElementVarItem Class implementing a QTreeWidgetItem that represents a special array variable node.
    SpecialVarItem Class implementing a VariableItem that represents a special variable node.
    VariableItem Class implementing the data structure for variable items.
    VariablesViewer Class implementing the variables viewer widget.

    Functions

    None


    ArrayElementVarItem

    Class implementing a VariableItem that represents an array element.

    Derived from

    VariableItem

    Class Attributes

    None

    Class Methods

    None

    Methods

    ArrayElementVarItem Constructor
    key Public method generating the key for this item.

    Static Methods

    None

    ArrayElementVarItem (Constructor)

    ArrayElementVarItem(parent, dvar, dvalue, dtype)

    Constructor

    parent
    parent of this item
    dvar
    variable name (string or QString)
    dvalue
    value string (string or QString)
    dtype
    type string (string or QString)

    ArrayElementVarItem.key

    key(column)

    Public method generating the key for this item.

    column
    the column to sort on (integer)


    SpecialArrayElementVarItem

    Class implementing a QTreeWidgetItem that represents a special array variable node.

    Derived from

    SpecialVarItem

    Class Attributes

    None

    Class Methods

    None

    Methods

    SpecialArrayElementVarItem Constructor
    key Public method generating the key for this item.

    Static Methods

    None

    SpecialArrayElementVarItem (Constructor)

    SpecialArrayElementVarItem(parent, dvar, dvalue, dtype, frmnr, scope)

    Constructor

    parent
    parent of this item
    dvar
    variable name (string or QString)
    dvalue
    value string (string or QString)
    dtype
    type string (string or QString)
    frmnr
    frame number (0 is the current frame) (int)
    scope
    flag indicating global (1) or local (0) variables

    SpecialArrayElementVarItem.key

    key(column)

    Public method generating the key for this item.

    column
    the column to sort on (integer)


    SpecialVarItem

    Class implementing a VariableItem that represents a special variable node.

    These special variable nodes are generated for classes, lists, tuples and dictionaries.

    Derived from

    VariableItem

    Class Attributes

    None

    Class Methods

    None

    Methods

    SpecialVarItem Constructor
    expand Public method to expand the item.

    Static Methods

    None

    SpecialVarItem (Constructor)

    SpecialVarItem(parent, dvar, dvalue, dtype, frmnr, scope)

    Constructor

    parent
    parent of this item
    dvar
    variable name (string or QString)
    dvalue
    value string (string or QString)
    dtype
    type string (string or QString)
    frmnr
    frame number (0 is the current frame) (int)
    scope
    flag indicating global (1) or local (0) variables

    SpecialVarItem.expand

    expand()

    Public method to expand the item.



    VariableItem

    Class implementing the data structure for variable items.

    Derived from

    QTreeWidgetItem

    Class Attributes

    None

    Class Methods

    None

    Methods

    VariableItem Constructor.
    __lt__ Public method to check, if the item is less than the other one.
    attachDummy Public method to attach a dummy sub item to allow for lazy population.
    collapse Public method to collapse the item.
    data Public method to return the data for the requested role.
    deleteChildren Public method to delete all children (cleaning the subtree).
    expand Public method to expand the item.
    getValue Public method to return the value of the item.
    key Public method generating the key for this item.

    Static Methods

    None

    VariableItem (Constructor)

    VariableItem(parent, dvar, dvalue, dtype)

    Constructor.

    parent
    reference to the parent item
    dvar
    variable name (string or QString)
    dvalue
    value string (string or QString)
    dtype
    type string (string or QString)

    VariableItem.__lt__

    __lt__(other)

    Public method to check, if the item is less than the other one.

    other
    reference to item to compare against (QTreeWidgetItem)
    Returns:
    true, if this item is less than other (boolean)

    VariableItem.attachDummy

    attachDummy()

    Public method to attach a dummy sub item to allow for lazy population.

    VariableItem.collapse

    collapse()

    Public method to collapse the item.

    Note: This is just a do nothing and should be overwritten.

    VariableItem.data

    data(column, role)

    Public method to return the data for the requested role.

    This implementation changes the original behavior in a way, that the display data is returned as the tooltip for column 1.

    column
    column number (integer)
    role
    data role (Qt.ItemDataRole)
    Returns:
    requested data (QVariant)

    VariableItem.deleteChildren

    deleteChildren()

    Public method to delete all children (cleaning the subtree).

    VariableItem.expand

    expand()

    Public method to expand the item.

    Note: This is just a do nothing and should be overwritten.

    VariableItem.getValue

    getValue()

    Public method to return the value of the item.

    Returns:
    value of the item (QString)

    VariableItem.key

    key(column)

    Public method generating the key for this item.

    column
    the column to sort on (integer)


    VariablesViewer

    Class implementing the variables viewer widget.

    This widget is used to display the variables of the program being debugged in a tree. Compound types will be shown with their main entry first. Once the subtree has been expanded, the individual entries will be shown. Double clicking an entry will popup a dialog showing the variables parameters in a more readable form. This is especially useful for lengthy strings.

    This widget has two modes for displaying the global and the local variables.

    Derived from

    QTreeWidget

    Class Attributes

    None

    Class Methods

    None

    Methods

    VariablesViewer Constructor
    __addItem Private method used to add an item to the list.
    __buildTreePath Private method to build up a path from the top to an item.
    __configure Private method to open the configuration dialog.
    __createPopupMenus Private method to generate the popup menus.
    __expandItemSignal Private slot to handle the expanded signal.
    __findItem Private method to search for an item.
    __generateItem Private method used to generate a VariableItem.
    __getDispType Private method used to get the display string for type vtype.
    __resort Private method to resort the tree.
    __showContextMenu Private slot to show the context menu.
    __showDetails Private slot to show details about the selected variable.
    __showVariableDetails Private method to show details about a variable.
    __unicode Private method to convert a string to unicode.
    collapseItem Public slot to handle the collapsed signal.
    expandItem Public slot to handle the expanded signal.
    handleResetUI Public method to reset the VariablesViewer.
    mouseDoubleClickEvent Protected method of QAbstractItemView.
    showVariable Public method to show variables in a list.
    showVariables Public method to show variables in a list.

    Static Methods

    None

    VariablesViewer (Constructor)

    VariablesViewer(parent=None, scope=1)

    Constructor

    parent
    the parent (QWidget)
    scope
    flag indicating global (1) or local (0) variables

    VariablesViewer.__addItem

    __addItem(parent, vtype, var, value)

    Private method used to add an item to the list.

    If the item is of a type with subelements (i.e. list, dictionary, tuple), these subelements are added by calling this method recursively.

    parent
    the parent of the item to be added (QTreeWidgetItem or None)
    vtype
    the type of the item to be added (string)
    var
    the variable name (string)
    value
    the value string (string)
    Returns:
    The item that was added to the listview (QTreeWidgetItem).

    VariablesViewer.__buildTreePath

    __buildTreePath(itm)

    Private method to build up a path from the top to an item.

    itm
    item to build the path for (QTreeWidgetItem)
    Returns:
    list of names denoting the path from the top (list of strings)

    VariablesViewer.__configure

    __configure()

    Private method to open the configuration dialog.

    VariablesViewer.__createPopupMenus

    __createPopupMenus()

    Private method to generate the popup menus.

    VariablesViewer.__expandItemSignal

    __expandItemSignal(parentItem)

    Private slot to handle the expanded signal.

    parentItem
    reference to the item being expanded (QTreeWidgetItem)

    VariablesViewer.__findItem

    __findItem(slist, column, node=None)

    Private method to search for an item.

    It is used to find a specific item in column, that is a child of node. If node is None, a child of the QTreeWidget is searched.

    slist
    searchlist (list of strings or QStrings)
    column
    index of column to search in (int)
    node
    start point of the search
    Returns:
    the found item or None

    VariablesViewer.__generateItem

    __generateItem(parent, dvar, dvalue, dtype, isSpecial = False)

    Private method used to generate a VariableItem.

    parent
    parent of the item to be generated
    dvar
    variable name (string or QString)
    dvalue
    value string (string or QString)
    dtype
    type string (string or QString)
    isSpecial
    flag indicating that a special node should be generated (boolean)
    Returns:
    The item that was generated (VariableItem).

    VariablesViewer.__getDispType

    __getDispType(vtype)

    Private method used to get the display string for type vtype.

    vtype
    the type, the display string should be looked up for (string)
    Returns:
    displaystring (string or QString)

    VariablesViewer.__resort

    __resort()

    Private method to resort the tree.

    VariablesViewer.__showContextMenu

    __showContextMenu(coord)

    Private slot to show the context menu.

    coord
    the position of the mouse pointer (QPoint)

    VariablesViewer.__showDetails

    __showDetails()

    Private slot to show details about the selected variable.

    VariablesViewer.__showVariableDetails

    __showVariableDetails(itm)

    Private method to show details about a variable.

    itm
    reference to the variable item

    VariablesViewer.__unicode

    __unicode(s)

    Private method to convert a string to unicode.

    s
    the string to be converted (string)
    Returns:
    unicode representation of s (unicode object)

    VariablesViewer.collapseItem

    collapseItem(parentItem)

    Public slot to handle the collapsed signal.

    parentItem
    reference to the item being collapsed (QTreeWidgetItem)

    VariablesViewer.expandItem

    expandItem(parentItem)

    Public slot to handle the expanded signal.

    parentItem
    reference to the item being expanded (QTreeWidgetItem)

    VariablesViewer.handleResetUI

    handleResetUI()

    Public method to reset the VariablesViewer.

    VariablesViewer.mouseDoubleClickEvent

    mouseDoubleClickEvent(mouseEvent)

    Protected method of QAbstractItemView.

    Reimplemented to disable expanding/collapsing of items when double-clicking. Instead the double-clicked entry is opened.

    mouseEvent
    the mouse event object (QMouseEvent)

    VariablesViewer.showVariable

    showVariable(vlist)

    Public method to show variables in a list.

    vlist
    the list of subitems to be displayed. The first element gives the path of the parent variable. Each other listentry is a tuple of three values.
    • the variable name (string)
    • the variables type (string)
    • the variables value (string)

    VariablesViewer.showVariables

    showVariables(vlist, frmnr)

    Public method to show variables in a list.

    vlist
    the list of variables to be displayed. Each listentry is a tuple of three values.
    • the variable name (string)
    • the variables type (string)
    • the variables value (string)
    frmnr
    frame number (0 is the current frame) (int)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ConfigurationPages.EditorSt0000644000175000001440000000013212261331353031274 xustar000000000000000030 mtime=1388688107.405229513 30 atime=1389081085.165724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.EditorStylesPage.html0000644000175000001440000003234012261331353033465 0ustar00detlevusers00000000000000 eric4.Preferences.ConfigurationPages.EditorStylesPage

    eric4.Preferences.ConfigurationPages.EditorStylesPage

    Module implementing the Editor Styles configuration page.

    Global Attributes

    None

    Classes

    EditorStylesPage Class implementing the Editor Styles configuration page.

    Functions

    create Module function to create the configuration page.


    EditorStylesPage

    Class implementing the Editor Styles configuration page.

    Derived from

    ConfigurationPageBase, Ui_EditorStylesPage

    Class Attributes

    None

    Class Methods

    None

    Methods

    EditorStylesPage Constructor
    on_caretForegroundButton_clicked Private slot to set the foreground colour of the caret.
    on_caretlineBackgroundButton_clicked Private slot to set the background colour of the caretline.
    on_currentLineMarkerButton_clicked Private slot to set the colour for the highlight of the current line.
    on_defaultFontButton_clicked Private method used to select the default font for the editor.
    on_edgeBackgroundColorButton_clicked Private slot to set the colour for the edge background or line.
    on_editAreaBackgroundButton_clicked Private slot to set the background colour of the edit area.
    on_editAreaForegroundButton_clicked Private slot to set the foreground colour of the edit area.
    on_errorMarkerButton_clicked Private slot to set the colour for the highlight of the error line.
    on_foldmarginBackgroundButton_clicked Private slot to set the background colour for the foldmargin.
    on_linenumbersFontButton_clicked Private method used to select the font for the editor margins.
    on_marginsBackgroundButton_clicked Private slot to set the background colour for the margins.
    on_marginsForegroundButton_clicked Private slot to set the foreground colour for the margins.
    on_matchingBracesBackButton_clicked Private slot to set the background colour for highlighting matching braces.
    on_matchingBracesButton_clicked Private slot to set the colour for highlighting matching braces.
    on_monospacedFontButton_clicked Private method used to select the font to be used as the monospaced font.
    on_nonmatchingBracesBackButton_clicked Private slot to set the background colour for highlighting nonmatching braces.
    on_nonmatchingBracesButton_clicked Private slot to set the colour for highlighting nonmatching braces.
    on_selectionBackgroundButton_clicked Private slot to set the background colour of the selection.
    on_selectionForegroundButton_clicked Private slot to set the foreground colour of the selection.
    on_whitespaceBackgroundButton_clicked Private slot to set the background colour of visible whitespace.
    on_whitespaceForegroundButton_clicked Private slot to set the foreground colour of visible whitespace.
    polishPage Public slot to perform some polishing actions.
    save Public slot to save the Editor Styles configuration.

    Static Methods

    None

    EditorStylesPage (Constructor)

    EditorStylesPage()

    Constructor

    EditorStylesPage.on_caretForegroundButton_clicked

    on_caretForegroundButton_clicked()

    Private slot to set the foreground colour of the caret.

    EditorStylesPage.on_caretlineBackgroundButton_clicked

    on_caretlineBackgroundButton_clicked()

    Private slot to set the background colour of the caretline.

    EditorStylesPage.on_currentLineMarkerButton_clicked

    on_currentLineMarkerButton_clicked()

    Private slot to set the colour for the highlight of the current line.

    EditorStylesPage.on_defaultFontButton_clicked

    on_defaultFontButton_clicked()

    Private method used to select the default font for the editor.

    EditorStylesPage.on_edgeBackgroundColorButton_clicked

    on_edgeBackgroundColorButton_clicked()

    Private slot to set the colour for the edge background or line.

    EditorStylesPage.on_editAreaBackgroundButton_clicked

    on_editAreaBackgroundButton_clicked()

    Private slot to set the background colour of the edit area.

    EditorStylesPage.on_editAreaForegroundButton_clicked

    on_editAreaForegroundButton_clicked()

    Private slot to set the foreground colour of the edit area.

    EditorStylesPage.on_errorMarkerButton_clicked

    on_errorMarkerButton_clicked()

    Private slot to set the colour for the highlight of the error line.

    EditorStylesPage.on_foldmarginBackgroundButton_clicked

    on_foldmarginBackgroundButton_clicked()

    Private slot to set the background colour for the foldmargin.

    EditorStylesPage.on_linenumbersFontButton_clicked

    on_linenumbersFontButton_clicked()

    Private method used to select the font for the editor margins.

    EditorStylesPage.on_marginsBackgroundButton_clicked

    on_marginsBackgroundButton_clicked()

    Private slot to set the background colour for the margins.

    EditorStylesPage.on_marginsForegroundButton_clicked

    on_marginsForegroundButton_clicked()

    Private slot to set the foreground colour for the margins.

    EditorStylesPage.on_matchingBracesBackButton_clicked

    on_matchingBracesBackButton_clicked()

    Private slot to set the background colour for highlighting matching braces.

    EditorStylesPage.on_matchingBracesButton_clicked

    on_matchingBracesButton_clicked()

    Private slot to set the colour for highlighting matching braces.

    EditorStylesPage.on_monospacedFontButton_clicked

    on_monospacedFontButton_clicked()

    Private method used to select the font to be used as the monospaced font.

    EditorStylesPage.on_nonmatchingBracesBackButton_clicked

    on_nonmatchingBracesBackButton_clicked()

    Private slot to set the background colour for highlighting nonmatching braces.

    EditorStylesPage.on_nonmatchingBracesButton_clicked

    on_nonmatchingBracesButton_clicked()

    Private slot to set the colour for highlighting nonmatching braces.

    EditorStylesPage.on_selectionBackgroundButton_clicked

    on_selectionBackgroundButton_clicked()

    Private slot to set the background colour of the selection.

    EditorStylesPage.on_selectionForegroundButton_clicked

    on_selectionForegroundButton_clicked()

    Private slot to set the foreground colour of the selection.

    EditorStylesPage.on_whitespaceBackgroundButton_clicked

    on_whitespaceBackgroundButton_clicked()

    Private slot to set the background colour of visible whitespace.

    EditorStylesPage.on_whitespaceForegroundButton_clicked

    on_whitespaceForegroundButton_clicked()

    Private slot to set the foreground colour of visible whitespace.

    EditorStylesPage.polishPage

    polishPage()

    Public slot to perform some polishing actions.

    EditorStylesPage.save

    save()

    Public slot to save the Editor Styles configuration.



    create

    create(dlg)

    Module function to create the configuration page.

    dlg
    reference to the configuration dialog

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.WizardPlugins.InputDialogWizard0000644000175000001440000000032512261331353031336 xustar0000000000000000123 path=eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.WizardPlugins.InputDialogWizard.InputDialogWizardDialog.html 30 mtime=1388688107.361229491 30 atime=1389081085.165724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.WizardPlugins.InputDialogWizard.InputDialogWiza0000644000175000001440000001111212261331353034131 0ustar00detlevusers00000000000000 eric4.Plugins.WizardPlugins.InputDialogWizard.InputDialogWizardDialog

    eric4.Plugins.WizardPlugins.InputDialogWizard.InputDialogWizardDialog

    Module implementing the input dialog wizard dialog.

    Global Attributes

    None

    Classes

    InputDialogWizardDialog Class implementing the input dialog wizard dialog.

    Functions

    None


    InputDialogWizardDialog

    Class implementing the input dialog wizard dialog.

    It displays a dialog for entering the parameters for the QInputDialog code generator.

    Derived from

    QDialog, Ui_InputDialogWizardDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    InputDialogWizardDialog Constructor
    __getCode4 Private method to get the source code for Qt4.
    getCode Public method to get the source code.
    on_bTest_clicked Private method to test the selected options.
    on_buttonBox_clicked Private slot called by a button of the button box clicked.
    on_rItem_toggled Private slot to perform actions dependant on the item type selection.

    Static Methods

    None

    InputDialogWizardDialog (Constructor)

    InputDialogWizardDialog(parent=None)

    Constructor

    parent
    parent widget (QWidget)

    InputDialogWizardDialog.__getCode4

    __getCode4(indLevel, indString)

    Private method to get the source code for Qt4.

    indLevel
    indentation level (int)
    indString
    string used for indentation (space or tab) (string)
    Returns:
    generated code (string)

    InputDialogWizardDialog.getCode

    getCode(indLevel, indString)

    Public method to get the source code.

    indLevel
    indentation level (int)
    indString
    string used for indentation (space or tab) (string)
    Returns:
    generated code (string)

    InputDialogWizardDialog.on_bTest_clicked

    on_bTest_clicked()

    Private method to test the selected options.

    InputDialogWizardDialog.on_buttonBox_clicked

    on_buttonBox_clicked(button)

    Private slot called by a button of the button box clicked.

    button
    button that was clicked (QAbstractButton)

    InputDialogWizardDialog.on_rItem_toggled

    on_rItem_toggled(checked)

    Private slot to perform actions dependant on the item type selection.

    checked
    flag indicating the checked state (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ConfigurationPages.VcsPage.0000644000175000001440000000013212261331353031145 xustar000000000000000030 mtime=1388688107.508229565 30 atime=1389081085.165724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.VcsPage.html0000644000175000001440000001207412261331353031570 0ustar00detlevusers00000000000000 eric4.Preferences.ConfigurationPages.VcsPage

    eric4.Preferences.ConfigurationPages.VcsPage

    Module implementing the VCS configuration page.

    Global Attributes

    None

    Classes

    VcsPage Class implementing the VCS configuration page.

    Functions

    create Module function to create the configuration page.


    VcsPage

    Class implementing the VCS configuration page.

    Derived from

    ConfigurationPageBase, Ui_VcsPage

    Class Attributes

    None

    Class Methods

    None

    Methods

    VcsPage Constructor
    on_pbVcsAddedButton_clicked Private slot to set the background colour for entries with VCS status "added".
    on_pbVcsConflictButton_clicked Private slot to set the background colour for entries with VCS status "conflict".
    on_pbVcsModifiedButton_clicked Private slot to set the background colour for entries with VCS status "modified".
    on_pbVcsRemovedButton_clicked Private slot to set the background colour for entries with VCS status "removed".
    on_pbVcsReplacedButton_clicked Private slot to set the background colour for entries with VCS status "replaced".
    on_pbVcsUpdateButton_clicked Private slot to set the background colour for entries with VCS status "needs update".
    save Public slot to save the VCS configuration.

    Static Methods

    None

    VcsPage (Constructor)

    VcsPage()

    Constructor

    VcsPage.on_pbVcsAddedButton_clicked

    on_pbVcsAddedButton_clicked()

    Private slot to set the background colour for entries with VCS status "added".

    VcsPage.on_pbVcsConflictButton_clicked

    on_pbVcsConflictButton_clicked()

    Private slot to set the background colour for entries with VCS status "conflict".

    VcsPage.on_pbVcsModifiedButton_clicked

    on_pbVcsModifiedButton_clicked()

    Private slot to set the background colour for entries with VCS status "modified".

    VcsPage.on_pbVcsRemovedButton_clicked

    on_pbVcsRemovedButton_clicked()

    Private slot to set the background colour for entries with VCS status "removed".

    VcsPage.on_pbVcsReplacedButton_clicked

    on_pbVcsReplacedButton_clicked()

    Private slot to set the background colour for entries with VCS status "replaced".

    VcsPage.on_pbVcsUpdateButton_clicked

    on_pbVcsUpdateButton_clicked()

    Private slot to set the background colour for entries with VCS status "needs update".

    VcsPage.save

    save()

    Public slot to save the VCS configuration.



    create

    create(dlg)

    Module function to create the configuration page.

    dlg
    reference to the configuration dialog

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.Graphics.html0000644000175000001440000000013212261331354025322 xustar000000000000000030 mtime=1388688108.657230142 30 atime=1389081085.165724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.Graphics.html0000644000175000001440000000574512261331354025067 0ustar00detlevusers00000000000000 eric4.Graphics

    eric4.Graphics

    Package implementing various graphical representations.

    This package implements various graphical representations.

    Modules

    ApplicationDiagram Module implementing a dialog showing an imports diagram of the application.
    AssociationItem Module implementing a graphics item for an association between two items.
    ClassItem Module implementing an UML like class item.
    GraphicsUtilities Module implementing some graphical utility functions.
    ImportsDiagram Module implementing a dialog showing an imports diagram of a package.
    ModuleItem Module implementing a module item.
    PackageDiagram Module implementing a dialog showing a UML like class diagram of a package.
    PackageItem Module implementing a package item.
    PixmapDiagram Module implementing a dialog showing a pixmap.
    SvgDiagram Module implementing a dialog showing a SVG graphic.
    UMLClassDiagram Module implementing a dialog showing a UML like class diagram.
    UMLDialog Module implementing a dialog showing UML like diagrams.
    UMLGraphicsView Module implementing a subclass of E4GraphicsView for our diagrams.
    UMLItem Module implementing the UMLItem base class.
    UMLSceneSizeDialog Module implementing a dialog to set the scene sizes.
    ZoomDialog Module implementing a zoom dialog for a graphics canvas.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.Shell.html0000644000175000001440000000013212261331352025564 xustar000000000000000030 mtime=1388688106.481229049 30 atime=1389081085.165724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.Shell.html0000644000175000001440000010565412261331352025331 0ustar00detlevusers00000000000000 eric4.QScintilla.Shell

    eric4.QScintilla.Shell

    Module implementing a graphical Python shell.

    Global Attributes

    None

    Classes

    Shell Class implementing a graphical Python shell.

    Functions

    None


    Shell

    Class implementing a graphical Python shell.

    A user can enter commands that are executed in the remote Python interpreter.

    Derived from

    QsciScintillaCompat

    Class Attributes

    None

    Class Methods

    None

    Methods

    Shell Constructor
    __QScintillaAutoCompletionCommand Private method to handle a command for autocompletion only.
    __QScintillaCharLeft Private method to handle the Cursor Left command.
    __QScintillaCharLeftExtend Private method to handle the Extend Selection Left command.
    __QScintillaCharRight Private method to handle the Cursor Right command.
    __QScintillaDelete Private method to handle the delete command.
    __QScintillaDeleteBack Private method to handle the Backspace key.
    __QScintillaDeleteLineLeft Private method to handle the Delete Line Left command.
    __QScintillaDeleteLineRight Private method to handle the Delete Line Right command.
    __QScintillaDeleteWordLeft Private method to handle the Delete Word Left command.
    __QScintillaDeleteWordRight Private method to handle the Delete Word Right command.
    __QScintillaLeftCommand Private method to handle a QScintilla command working to the left.
    __QScintillaLeftDeleteCommand Private method to handle a QScintilla delete command working to the left.
    __QScintillaLineDown Private method to handle the Down key.
    __QScintillaLineEnd Private method to handle the End key.
    __QScintillaLineUp Private method to handle the Up key.
    __QScintillaNewline Private method to handle the Return key.
    __QScintillaRightCommand Private method to handle a QScintilla command working to the right.
    __QScintillaTab Private method to handle the Tab key.
    __QScintillaVCHome Private method to handle the Home key.
    __QScintillaVCHomeExtend Private method to handle the Extend Selection to start of line command.
    __QScintillaWordLeft Private method to handle the Cursor Word Left command.
    __QScintillaWordLeftExtend Private method to handle the Extend Selection Left one word command.
    __QScintillaWordRight Private method to handle the Cursor Word Right command.
    __bindLexer Private slot to set the lexer.
    __clearCurrentLine Private method to clear the line containing the cursor.
    __clearHistory Private slot to clear the current history.
    __clientCapabilities Private slot to handle the reporting of the clients capabilities.
    __clientError Private method to handle an error in the client.
    __clientStatement Private method to handle the response from the debugger client.
    __completionListSelected Private slot to handle the selection from the completion list.
    __configure Private method to open the configuration dialog.
    __executeCommand Private slot to execute a command.
    __getBanner Private method to get the banner for the remote interpreter.
    __getEndPos Private method to return the line and column of the last character.
    __initialise Private method to get ready for a new remote interpreter.
    __insertHistory Private method to insert a command selected from the history.
    __insertText Private method to insert some text at the current cursor position.
    __insertTextAtEnd Private method to insert some text at the end of the command line.
    __insertTextNoEcho Private method to insert some text at the end of the buffer without echoing it.
    __isCursorOnLastLine Private method to check, if the cursor is on the last line.
    __middleMouseButton Private method to handle the middle mouse button press.
    __raw_input Private method to handle raw input.
    __reset Private slot to handle the 'reset' context menu entry.
    __resetAndClear Private slot to handle the 'reset and clear' context menu entry.
    __resizeLinenoMargin Private slot to resize the line numbers margin.
    __rsearchHistory Private method used to reverse search the history.
    __searchHistory Private method used to search the history.
    __selectHistory Private slot to select a history entry to execute.
    __setAutoCompletion Private method to configure the autocompletion function.
    __setCallTips Private method to configure the calltips function.
    __setMargin0 Private method to configure margin 0.
    __setMonospaced Private method to set/reset a monospaced font.
    __setTextDisplay Private method to configure the text display.
    __showCompletions Private method to display the possible completions.
    __showHistory Private slot to show the shell history dialog.
    __startDebugClient Private slot to start a debug client accoding to the action triggered.
    __useHistory Private method to display a command from the history.
    __write Private method to display some text.
    __writeBanner Private method to write a banner with info from the debug client.
    __writePrompt Private method to write the prompt.
    __writeStdErr Private method to display some text with StdErr label.
    __writeStdOut Private method to display some text with StdOut label.
    clear Public slot to clear the display.
    closeShell Public method to shutdown the shell.
    contextMenuEvent Reimplemented to show our own context menu.
    dragEnterEvent Protected method to handle the drag enter event.
    dragLeaveEvent Protected method to handle the drag leave event.
    dragMoveEvent Protected method to handle the drag move event.
    dropEvent Protected method to handle the drop event.
    editorCommand Public method to perform an editor command.
    executeLines Public method to execute a set of lines as multiple commands.
    focusInEvent Public method called when the shell receives focus.
    focusNextPrevChild Reimplemented to stop Tab moving to the next window.
    focusOutEvent Public method called when the shell loses focus.
    getClientType Public slot to get the clients type.
    getHistory Public method to get the history for the given client type.
    handlePreferencesChanged Public slot to handle the preferencesChanged signal.
    insert Public slot to insert text at the current cursor position.
    keyPressEvent Re-implemented to handle the user input a key at a time.
    loadHistory Public method to load the history for the given client type.
    mousePressEvent Protected method to handle the mouse press event.
    paste Reimplemented slot to handle the paste action.
    reloadHistory Public method to reload the history of the currently selected client type.
    saveHistory Public method to save the history for the given client type.
    setDebuggerUI Public method to set the debugger UI.

    Static Methods

    None

    Shell (Constructor)

    Shell(dbs, vm, parent = None)

    Constructor

    dbs
    reference to the debug server object
    vm
    reference to the viewmanager object
    parent
    parent widget (QWidget)

    Shell.__QScintillaAutoCompletionCommand

    __QScintillaAutoCompletionCommand(cmd)

    Private method to handle a command for autocompletion only.

    cmd
    QScintilla command

    Shell.__QScintillaCharLeft

    __QScintillaCharLeft()

    Private method to handle the Cursor Left command.

    Shell.__QScintillaCharLeftExtend

    __QScintillaCharLeftExtend()

    Private method to handle the Extend Selection Left command.

    Shell.__QScintillaCharRight

    __QScintillaCharRight()

    Private method to handle the Cursor Right command.

    Shell.__QScintillaDelete

    __QScintillaDelete()

    Private method to handle the delete command.

    Shell.__QScintillaDeleteBack

    __QScintillaDeleteBack()

    Private method to handle the Backspace key.

    Shell.__QScintillaDeleteLineLeft

    __QScintillaDeleteLineLeft()

    Private method to handle the Delete Line Left command.

    Shell.__QScintillaDeleteLineRight

    __QScintillaDeleteLineRight()

    Private method to handle the Delete Line Right command.

    Shell.__QScintillaDeleteWordLeft

    __QScintillaDeleteWordLeft()

    Private method to handle the Delete Word Left command.

    Shell.__QScintillaDeleteWordRight

    __QScintillaDeleteWordRight()

    Private method to handle the Delete Word Right command.

    Shell.__QScintillaLeftCommand

    __QScintillaLeftCommand(method, allLinesAllowed = False)

    Private method to handle a QScintilla command working to the left.

    method
    shell method to execute

    Shell.__QScintillaLeftDeleteCommand

    __QScintillaLeftDeleteCommand(method)

    Private method to handle a QScintilla delete command working to the left.

    method
    shell method to execute

    Shell.__QScintillaLineDown

    __QScintillaLineDown(cmd)

    Private method to handle the Down key.

    cmd
    QScintilla command

    Shell.__QScintillaLineEnd

    __QScintillaLineEnd(cmd)

    Private method to handle the End key.

    cmd
    QScintilla command

    Shell.__QScintillaLineUp

    __QScintillaLineUp(cmd)

    Private method to handle the Up key.

    cmd
    QScintilla command

    Shell.__QScintillaNewline

    __QScintillaNewline(cmd)

    Private method to handle the Return key.

    cmd
    QScintilla command

    Shell.__QScintillaRightCommand

    __QScintillaRightCommand(method)

    Private method to handle a QScintilla command working to the right.

    method
    shell method to execute

    Shell.__QScintillaTab

    __QScintillaTab(cmd)

    Private method to handle the Tab key.

    cmd
    QScintilla command

    Shell.__QScintillaVCHome

    __QScintillaVCHome(cmd)

    Private method to handle the Home key.

    cmd
    QScintilla command

    Shell.__QScintillaVCHomeExtend

    __QScintillaVCHomeExtend()

    Private method to handle the Extend Selection to start of line command.

    Shell.__QScintillaWordLeft

    __QScintillaWordLeft()

    Private method to handle the Cursor Word Left command.

    Shell.__QScintillaWordLeftExtend

    __QScintillaWordLeftExtend()

    Private method to handle the Extend Selection Left one word command.

    Shell.__QScintillaWordRight

    __QScintillaWordRight()

    Private method to handle the Cursor Word Right command.

    Shell.__bindLexer

    __bindLexer(language = 'Python')

    Private slot to set the lexer.

    language
    lexer language to set

    Shell.__clearCurrentLine

    __clearCurrentLine()

    Private method to clear the line containing the cursor.

    Shell.__clearHistory

    __clearHistory()

    Private slot to clear the current history.

    Shell.__clientCapabilities

    __clientCapabilities(cap, clType)

    Private slot to handle the reporting of the clients capabilities.

    cap
    client capabilities (integer)
    clType
    type of the debug client (string)

    Shell.__clientError

    __clientError()

    Private method to handle an error in the client.

    Shell.__clientStatement

    __clientStatement(more)

    Private method to handle the response from the debugger client.

    more
    flag indicating that more user input is required

    Shell.__completionListSelected

    __completionListSelected(id, txt)

    Private slot to handle the selection from the completion list.

    id
    the ID of the user list (should be 1) (integer)
    txt
    the selected text (QString)

    Shell.__configure

    __configure()

    Private method to open the configuration dialog.

    Shell.__executeCommand

    __executeCommand(cmd)

    Private slot to execute a command.

    cmd
    command to be executed by debug client (string)

    Shell.__getBanner

    __getBanner()

    Private method to get the banner for the remote interpreter.

    It requests the interpreter version and platform running on the debug client side.

    Shell.__getEndPos

    __getEndPos()

    Private method to return the line and column of the last character.

    Returns:
    tuple of two values (int, int) giving the line and column

    Shell.__initialise

    __initialise()

    Private method to get ready for a new remote interpreter.

    Shell.__insertHistory

    __insertHistory(cmd)

    Private method to insert a command selected from the history.

    cmd
    history entry to be inserted (string or QString)

    Shell.__insertText

    __insertText(s)

    Private method to insert some text at the current cursor position.

    s
    text to be inserted (string or QString)

    Shell.__insertTextAtEnd

    __insertTextAtEnd(s)

    Private method to insert some text at the end of the command line.

    s
    text to be inserted (string or QString)

    Shell.__insertTextNoEcho

    __insertTextNoEcho(s)

    Private method to insert some text at the end of the buffer without echoing it.

    s
    text to be inserted (string or QString)

    Shell.__isCursorOnLastLine

    __isCursorOnLastLine()

    Private method to check, if the cursor is on the last line.

    Shell.__middleMouseButton

    __middleMouseButton()

    Private method to handle the middle mouse button press.

    Shell.__raw_input

    __raw_input(s, echo)

    Private method to handle raw input.

    s
    prompt to be displayed (string or QString)
    echo
    Flag indicating echoing of the input (boolean)

    Shell.__reset

    __reset()

    Private slot to handle the 'reset' context menu entry.

    Shell.__resetAndClear

    __resetAndClear()

    Private slot to handle the 'reset and clear' context menu entry.

    Shell.__resizeLinenoMargin

    __resizeLinenoMargin()

    Private slot to resize the line numbers margin.

    Shell.__rsearchHistory

    __rsearchHistory(txt, startIdx = -1)

    Private method used to reverse search the history.

    txt
    text to match at the beginning (string or QString)
    startIdx
    index to start search from (integer)
    Returns:
    index of

    Shell.__searchHistory

    __searchHistory(txt, startIdx = -1)

    Private method used to search the history.

    txt
    text to match at the beginning (string or QString)
    startIdx
    index to start search from (integer)
    Returns:
    index of

    Shell.__selectHistory

    __selectHistory()

    Private slot to select a history entry to execute.

    Shell.__setAutoCompletion

    __setAutoCompletion(language = 'Python')

    Private method to configure the autocompletion function.

    language
    of the autocompletion set to set

    Shell.__setCallTips

    __setCallTips(language = 'Python')

    Private method to configure the calltips function.

    language
    of the calltips set to set

    Shell.__setMargin0

    __setMargin0()

    Private method to configure margin 0.

    Shell.__setMonospaced

    __setMonospaced(on)

    Private method to set/reset a monospaced font.

    on
    flag to indicate usage of a monospace font (boolean)

    Shell.__setTextDisplay

    __setTextDisplay()

    Private method to configure the text display.

    Shell.__showCompletions

    __showCompletions(completions, text)

    Private method to display the possible completions.

    Shell.__showHistory

    __showHistory()

    Private slot to show the shell history dialog.

    Shell.__startDebugClient

    __startDebugClient(action)

    Private slot to start a debug client accoding to the action triggered.

    action
    context menu action that was triggered (QAction)

    Shell.__useHistory

    __useHistory()

    Private method to display a command from the history.

    Shell.__write

    __write(s)

    Private method to display some text.

    s
    text to be displayed (string or QString)

    Shell.__writeBanner

    __writeBanner(version, platform, dbgclient)

    Private method to write a banner with info from the debug client.

    version
    interpreter version string (string)
    platform
    platform of the remote interpreter (string)
    dbgclient
    debug client variant used (string)

    Shell.__writePrompt

    __writePrompt()

    Private method to write the prompt.

    Shell.__writeStdErr

    __writeStdErr(s)

    Private method to display some text with StdErr label.

    s
    text to be displayed (string or QString)

    Shell.__writeStdOut

    __writeStdOut(s)

    Private method to display some text with StdOut label.

    s
    text to be displayed (string or QString)

    Shell.clear

    clear()

    Public slot to clear the display.

    Shell.closeShell

    closeShell()

    Public method to shutdown the shell.

    Shell.contextMenuEvent

    contextMenuEvent(ev)

    Reimplemented to show our own context menu.

    ev
    context menu event (QContextMenuEvent)

    Shell.dragEnterEvent

    dragEnterEvent(event)

    Protected method to handle the drag enter event.

    event
    the drag enter event (QDragEnterEvent)

    Shell.dragLeaveEvent

    dragLeaveEvent(event)

    Protected method to handle the drag leave event.

    event
    the drag leave event (QDragLeaveEvent)

    Shell.dragMoveEvent

    dragMoveEvent(event)

    Protected method to handle the drag move event.

    event
    the drag move event (QDragMoveEvent)

    Shell.dropEvent

    dropEvent(event)

    Protected method to handle the drop event.

    event
    the drop event (QDropEvent)

    Shell.editorCommand

    editorCommand(cmd)

    Public method to perform an editor command.

    cmd
    the scintilla command to be performed

    Shell.executeLines

    executeLines(lines)

    Public method to execute a set of lines as multiple commands.

    lines
    multiple lines of text to be executed as single commands (string or QString)

    Shell.focusInEvent

    focusInEvent(event)

    Public method called when the shell receives focus.

    event
    the event object (QFocusEvent)

    Shell.focusNextPrevChild

    focusNextPrevChild(next)

    Reimplemented to stop Tab moving to the next window.

    While the user is entering a multi-line command, the movement to the next window by the Tab key being pressed is suppressed.

    next
    next window
    Returns:
    flag indicating the movement

    Shell.focusOutEvent

    focusOutEvent(event)

    Public method called when the shell loses focus.

    event
    the event object (QFocusEvent)

    Shell.getClientType

    getClientType()

    Public slot to get the clients type.

    Returns:
    client type (string)

    Shell.getHistory

    getHistory(clientType)

    Public method to get the history for the given client type.

    clientType
    type of the debug client (string). If it is None, the current history is returned.
    Returns:
    reference to the history list (QStringList)

    Shell.handlePreferencesChanged

    handlePreferencesChanged()

    Public slot to handle the preferencesChanged signal.

    Shell.insert

    insert(text)

    Public slot to insert text at the current cursor position.

    The cursor is advanced to the end of the inserted text.

    text
    text to be inserted (string or QString)

    Shell.keyPressEvent

    keyPressEvent(ev)

    Re-implemented to handle the user input a key at a time.

    ev
    key event (QKeyEvent)

    Shell.loadHistory

    loadHistory(clientType)

    Public method to load the history for the given client type.

    clientType
    type of the debug client (string)

    Shell.mousePressEvent

    mousePressEvent(event)

    Protected method to handle the mouse press event.

    event
    the mouse press event (QMouseEvent)

    Shell.paste

    paste()

    Reimplemented slot to handle the paste action.

    Shell.reloadHistory

    reloadHistory()

    Public method to reload the history of the currently selected client type.

    Shell.saveHistory

    saveHistory(clientType)

    Public method to save the history for the given client type.

    clientType
    type of the debug client (string)

    Shell.setDebuggerUI

    setDebuggerUI(ui)

    Public method to set the debugger UI.

    ui
    reference to the debugger UI object (DebugUI)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.Lexers.LexerCPP.html0000644000175000001440000000013212261331354027402 xustar000000000000000030 mtime=1388688108.520230073 30 atime=1389081085.165724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.Lexers.LexerCPP.html0000644000175000001440000000754512261331354027147 0ustar00detlevusers00000000000000 eric4.QScintilla.Lexers.LexerCPP

    eric4.QScintilla.Lexers.LexerCPP

    Module implementing a CPP lexer with some additional methods.

    Global Attributes

    None

    Classes

    LexerCPP Subclass to implement some additional lexer dependant methods.

    Functions

    None


    LexerCPP

    Subclass to implement some additional lexer dependant methods.

    Derived from

    QsciLexerCPP, Lexer

    Class Attributes

    None

    Class Methods

    None

    Methods

    LexerCPP Constructor
    autoCompletionWordSeparators Public method to return the list of separators for autocompletion.
    defaultKeywords Public method to get the default keywords.
    initProperties Public slot to initialize the properties.
    isCommentStyle Public method to check, if a style is a comment style.
    isStringStyle Public method to check, if a style is a string style.

    Static Methods

    None

    LexerCPP (Constructor)

    LexerCPP(parent=None, caseInsensitiveKeywords = False)

    Constructor

    parent
    parent widget of this lexer

    LexerCPP.autoCompletionWordSeparators

    autoCompletionWordSeparators()

    Public method to return the list of separators for autocompletion.

    Returns:
    list of separators (QStringList)

    LexerCPP.defaultKeywords

    defaultKeywords(kwSet)

    Public method to get the default keywords.

    kwSet
    number of the keyword set (integer)
    Returns:
    string giving the keywords (string) or None

    LexerCPP.initProperties

    initProperties()

    Public slot to initialize the properties.

    LexerCPP.isCommentStyle

    isCommentStyle(style)

    Public method to check, if a style is a comment style.

    Returns:
    flag indicating a comment style (boolean)

    LexerCPP.isStringStyle

    isStringStyle(style)

    Public method to check, if a style is a string style.

    Returns:
    flag indicating a string style (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Project.UserPropertiesDialog.html0000644000175000001440000000013212261331352030173 xustar000000000000000030 mtime=1388688106.017228816 30 atime=1389081085.166724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Project.UserPropertiesDialog.html0000644000175000001440000000454712261331352027737 0ustar00detlevusers00000000000000 eric4.Project.UserPropertiesDialog

    eric4.Project.UserPropertiesDialog

    Module implementing the user specific project properties dialog.

    Global Attributes

    None

    Classes

    UserPropertiesDialog Class implementing the user specific project properties dialog.

    Functions

    None


    UserPropertiesDialog

    Class implementing the user specific project properties dialog.

    Derived from

    QDialog, Ui_UserPropertiesDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    UserPropertiesDialog Constructor
    storeData Public method to store the entered/modified data.

    Static Methods

    None

    UserPropertiesDialog (Constructor)

    UserPropertiesDialog(project, parent = None, name = None)

    Constructor

    project
    reference to the project object
    parent
    parent widget of this dialog (QWidget)
    name
    name of this dialog (string or QString)

    UserPropertiesDialog.storeData

    storeData()

    Public method to store the entered/modified data.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.History.HistoryModel.html0000644000175000001440000000013212261331353030647 xustar000000000000000030 mtime=1388688107.776229699 30 atime=1389081085.166724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.History.HistoryModel.html0000644000175000001440000001323012261331353030400 0ustar00detlevusers00000000000000 eric4.Helpviewer.History.HistoryModel

    eric4.Helpviewer.History.HistoryModel

    Module implementing the history model.

    Global Attributes

    None

    Classes

    HistoryModel Class implementing the history model.

    Functions

    None


    HistoryModel

    Class implementing the history model.

    Derived from

    QAbstractTableModel

    Class Attributes

    DateRole
    DateTimeRole
    MaxRole
    TitleRole
    UrlRole
    UrlStringRole

    Class Methods

    None

    Methods

    HistoryModel Constructor
    columnCount Public method to get the number of columns.
    data Public method to get data from the model.
    entryAdded Public slot to handle the addition of a history entry.
    entryUpdated Public slot to handle the update of a history entry.
    headerData Public method to get the header data.
    historyReset Public slot to reset the model.
    removeRows Public method to remove history entries from the model.
    rowCount Public method to determine the number of rows.

    Static Methods

    None

    HistoryModel (Constructor)

    HistoryModel(historyManager, parent = None)

    Constructor

    historyManager
    reference to the history manager object (HistoryManager)
    parent
    reference to the parent object (QObject)

    HistoryModel.columnCount

    columnCount(parent = QModelIndex())

    Public method to get the number of columns.

    parent
    index of parent (QModelIndex)
    Returns:
    number of columns (integer)

    HistoryModel.data

    data(index, role = Qt.DisplayRole)

    Public method to get data from the model.

    index
    index of history entry to get data for (QModelIndex)
    role
    data role (integer)
    Returns:
    history entry data (QVariant)

    HistoryModel.entryAdded

    entryAdded()

    Public slot to handle the addition of a history entry.

    HistoryModel.entryUpdated

    entryUpdated(row)

    Public slot to handle the update of a history entry.

    row
    row number of the updated entry (integer)

    HistoryModel.headerData

    headerData(section, orientation, role = Qt.DisplayRole)

    Public method to get the header data.

    section
    section number (integer)
    orientation
    header orientation (Qt.Orientation)
    role
    data role (integer)
    Returns:
    header data (QVariant)

    HistoryModel.historyReset

    historyReset()

    Public slot to reset the model.

    HistoryModel.removeRows

    removeRows(row, count, parent = QModelIndex())

    Public method to remove history entries from the model.

    row
    row of the first history entry to remove (integer)
    count
    number of history entries to remove (integer)
    index
    of the parent entry (QModelIndex)
    Returns:
    flag indicating successful removal (boolean)

    HistoryModel.rowCount

    rowCount(parent = QModelIndex())

    Public method to determine the number of rows.

    parent
    index of parent (QModelIndex)
    Returns:
    number of rows (integer)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ConfigurationPages.EditorEx0000644000175000001440000000013212261331353031262 xustar000000000000000030 mtime=1388688107.596229609 30 atime=1389081085.166724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.EditorExportersPage.html0000644000175000001440000000673112261331353034202 0ustar00detlevusers00000000000000 eric4.Preferences.ConfigurationPages.EditorExportersPage

    eric4.Preferences.ConfigurationPages.EditorExportersPage

    Module implementing the Editor Exporters configuration page.

    Global Attributes

    None

    Classes

    EditorExportersPage Class implementing the Editor Typing configuration page.

    Functions

    create Module function to create the configuration page.


    EditorExportersPage

    Class implementing the Editor Typing configuration page.

    Derived from

    ConfigurationPageBase, Ui_EditorExportersPage

    Class Attributes

    None

    Class Methods

    None

    Methods

    EditorExportersPage Constructor
    on_exportersCombo_activated Private slot to select the page related to the selected exporter.
    on_rtfFontButton_clicked Private method used to select the font for the RTF export.
    save Public slot to save the Editor Typing configuration.

    Static Methods

    None

    EditorExportersPage (Constructor)

    EditorExportersPage()

    Constructor

    EditorExportersPage.on_exportersCombo_activated

    on_exportersCombo_activated(exporter)

    Private slot to select the page related to the selected exporter.

    exporter
    name of the selected exporter (QString)

    EditorExportersPage.on_rtfFontButton_clicked

    on_rtfFontButton_clicked()

    Private method used to select the font for the RTF export.

    EditorExportersPage.save

    save()

    Public slot to save the Editor Typing configuration.



    create

    create(dlg)

    Module function to create the configuration page.

    dlg
    reference to the configuration dialog

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.Utilities.html0000644000175000001440000000013212261331354025535 xustar000000000000000030 mtime=1388688108.658230142 30 atime=1389081085.166724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.Utilities.html0000644000175000001440000000327112261331354025272 0ustar00detlevusers00000000000000 eric4.Utilities

    eric4.Utilities

    Package implementing various functions/classes needed everywhere within eric4.

    Packages

    ClassBrowsers Package implementing class browsers for various languages.

    Modules

    AutoSaver Module implementing an auto saver class.
    ModuleParser Parse a Python module file.
    SingleApplication Module implementing the single application server and client.
    Startup Module implementing some startup helper funcions
    Utilities Package implementing various functions/classes needed everywhere within eric4.
    uic Module implementing a function to compile all user interface files of a directory or directory tree.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsPySvn.SvnLogBrows0000644000175000001440000000013212261331353031244 xustar000000000000000030 mtime=1388688107.147229383 30 atime=1389081085.166724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsPySvn.SvnLogBrowserDialog.html0000644000175000001440000003371012261331353033414 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsPySvn.SvnLogBrowserDialog

    eric4.Plugins.VcsPlugins.vcsPySvn.SvnLogBrowserDialog

    Module implementing a dialog to browse the log history.

    Global Attributes

    None

    Classes

    SvnLogBrowserDialog Class implementing a dialog to browse the log history.

    Functions

    None


    SvnLogBrowserDialog

    Class implementing a dialog to browse the log history.

    Derived from

    QDialog, SvnDialogMixin, Ui_SvnLogBrowserDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnLogBrowserDialog Constructor
    __diffRevisions Private method to do a diff of two revisions.
    __filterLogs Private method to filter the log entries.
    __finish Private slot called when the user pressed the button.
    __generateFileItem Private method to generate a changed files tree entry.
    __generateLogItem Private method to generate a log tree entry.
    __getLogEntries Private method to retrieve log entries from the repository.
    __resizeColumnsFiles Private method to resize the changed files tree columns.
    __resizeColumnsLog Private method to resize the log tree columns.
    __resortFiles Private method to resort the changed files tree.
    __resortLog Private method to resort the log tree.
    __showError Private slot to show an error message.
    _reset Protected method to reset the internal state of the dialog.
    on_buttonBox_clicked Private slot called by a button of the button box clicked.
    on_clearRxEditButton_clicked Private slot called by a click of the clear RX edit button.
    on_diffPreviousButton_clicked Private slot to handle the Diff to Previous button.
    on_diffRevisionsButton_clicked Private slot to handle the Compare Revisions button.
    on_fieldCombo_activated Private slot called, when a new filter field is selected.
    on_fromDate_dateChanged Private slot called, when the from date changes.
    on_logTree_currentItemChanged Private slot called, when the current item of the log tree changes.
    on_logTree_itemSelectionChanged Private slot called, when the selection has changed.
    on_nextButton_clicked Private slot to handle the Next button.
    on_rxEdit_textChanged Private slot called, when a filter expression is entered.
    on_stopCheckBox_clicked Private slot called, when the stop on copy/move checkbox is clicked
    on_toDate_dateChanged Private slot called, when the from date changes.
    start Public slot to start the svn log command.

    Static Methods

    None

    SvnLogBrowserDialog (Constructor)

    SvnLogBrowserDialog(vcs, parent = None)

    Constructor

    vcs
    reference to the vcs object
    parent
    parent widget (QWidget)

    SvnLogBrowserDialog.__diffRevisions

    __diffRevisions(rev1, rev2, peg_rev)

    Private method to do a diff of two revisions.

    rev1
    first revision number (integer)
    rev2
    second revision number (integer)
    peg_rev
    revision number to use as a reference (integer)

    SvnLogBrowserDialog.__filterLogs

    __filterLogs()

    Private method to filter the log entries.

    SvnLogBrowserDialog.__finish

    __finish()

    Private slot called when the user pressed the button.

    SvnLogBrowserDialog.__generateFileItem

    __generateFileItem(action, path, copyFrom, copyRev)

    Private method to generate a changed files tree entry.

    action
    indicator for the change action ("A", "D" or "M")
    path
    path of the file in the repository (string or QString)
    copyFrom
    path the file was copied from (None, string or QString)
    copyRev
    revision the file was copied from (None, string or QString)
    Returns:
    reference to the generated item (QTreeWidgetItem)

    SvnLogBrowserDialog.__generateLogItem

    __generateLogItem(author, date, message, revision, changedPaths)

    Private method to generate a log tree entry.

    author
    author info (string or QString)
    date
    date info (integer)
    message
    text of the log message (string or QString)
    revision
    revision info (string or pysvn.opt_revision_kind)
    changedPaths
    list of pysvn dictionary like objects containing info about the changed files/directories
    Returns:
    reference to the generated item (QTreeWidgetItem)

    SvnLogBrowserDialog.__getLogEntries

    __getLogEntries(startRev = None)

    Private method to retrieve log entries from the repository.

    startRev
    revision number to start from (integer, string or QString)

    SvnLogBrowserDialog.__resizeColumnsFiles

    __resizeColumnsFiles()

    Private method to resize the changed files tree columns.

    SvnLogBrowserDialog.__resizeColumnsLog

    __resizeColumnsLog()

    Private method to resize the log tree columns.

    SvnLogBrowserDialog.__resortFiles

    __resortFiles()

    Private method to resort the changed files tree.

    SvnLogBrowserDialog.__resortLog

    __resortLog()

    Private method to resort the log tree.

    SvnLogBrowserDialog.__showError

    __showError(msg)

    Private slot to show an error message.

    msg
    error message to show (string or QString)

    SvnLogBrowserDialog._reset

    _reset()

    Protected method to reset the internal state of the dialog.

    SvnLogBrowserDialog.on_buttonBox_clicked

    on_buttonBox_clicked(button)

    Private slot called by a button of the button box clicked.

    button
    button that was clicked (QAbstractButton)

    SvnLogBrowserDialog.on_clearRxEditButton_clicked

    on_clearRxEditButton_clicked()

    Private slot called by a click of the clear RX edit button.

    SvnLogBrowserDialog.on_diffPreviousButton_clicked

    on_diffPreviousButton_clicked()

    Private slot to handle the Diff to Previous button.

    SvnLogBrowserDialog.on_diffRevisionsButton_clicked

    on_diffRevisionsButton_clicked()

    Private slot to handle the Compare Revisions button.

    SvnLogBrowserDialog.on_fieldCombo_activated

    on_fieldCombo_activated(txt)

    Private slot called, when a new filter field is selected.

    txt
    text of the selected field (QString)

    SvnLogBrowserDialog.on_fromDate_dateChanged

    on_fromDate_dateChanged(date)

    Private slot called, when the from date changes.

    date
    new date (QDate)

    SvnLogBrowserDialog.on_logTree_currentItemChanged

    on_logTree_currentItemChanged(current, previous)

    Private slot called, when the current item of the log tree changes.

    current
    reference to the new current item (QTreeWidgetItem)
    previous
    reference to the old current item (QTreeWidgetItem)

    SvnLogBrowserDialog.on_logTree_itemSelectionChanged

    on_logTree_itemSelectionChanged()

    Private slot called, when the selection has changed.

    SvnLogBrowserDialog.on_nextButton_clicked

    on_nextButton_clicked()

    Private slot to handle the Next button.

    SvnLogBrowserDialog.on_rxEdit_textChanged

    on_rxEdit_textChanged(txt)

    Private slot called, when a filter expression is entered.

    txt
    filter expression (QString)

    SvnLogBrowserDialog.on_stopCheckBox_clicked

    on_stopCheckBox_clicked(checked)

    Private slot called, when the stop on copy/move checkbox is clicked

    SvnLogBrowserDialog.on_toDate_dateChanged

    on_toDate_dateChanged(date)

    Private slot called, when the from date changes.

    date
    new date (QDate)

    SvnLogBrowserDialog.start

    start(fn)

    Public slot to start the svn log command.

    fn
    filename to show the log for (string)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.eric4config.html0000644000175000001440000000013112261331350024644 xustar000000000000000029 mtime=1388688104.17322789 30 atime=1389081085.166724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.eric4config.html0000644000175000001440000000235112261331350024400 0ustar00detlevusers00000000000000 eric4.eric4config

    eric4.eric4config

    Module containing the default configuration of the eric4 installation

    Global Attributes

    __ericDir
    _pkg_config

    Classes

    None

    Functions

    getConfig Module function to get a configuration value.


    getConfig

    getConfig(name)

    Module function to get a configuration value.

    name
    the name of the configuration value (string).

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ConfigurationPages.EditorTy0000644000175000001440000000013212261331353031302 xustar000000000000000030 mtime=1388688107.570229596 30 atime=1389081085.167724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.EditorTypingPage.html0000644000175000001440000000571212261331353033457 0ustar00detlevusers00000000000000 eric4.Preferences.ConfigurationPages.EditorTypingPage

    eric4.Preferences.ConfigurationPages.EditorTypingPage

    Module implementing the Editor Typing configuration page.

    Global Attributes

    None

    Classes

    EditorTypingPage Class implementing the Editor Typing configuration page.

    Functions

    create Module function to create the configuration page.


    EditorTypingPage

    Class implementing the Editor Typing configuration page.

    Derived from

    ConfigurationPageBase, Ui_EditorTypingPage

    Class Attributes

    None

    Class Methods

    None

    Methods

    EditorTypingPage Constructor
    on_languageCombo_activated Private slot to select the page related to the selected language.
    save Public slot to save the Editor Typing configuration.

    Static Methods

    None

    EditorTypingPage (Constructor)

    EditorTypingPage()

    Constructor

    EditorTypingPage.on_languageCombo_activated

    on_languageCombo_activated(language)

    Private slot to select the page related to the selected language.

    language
    name of the selected language (QString)

    EditorTypingPage.save

    save()

    Public slot to save the Editor Typing configuration.



    create

    create(dlg)

    Module function to create the configuration page.

    dlg
    reference to the configuration dialog

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.eric4_editor.html0000644000175000001440000000013212261331350025025 xustar000000000000000030 mtime=1388688104.218227913 30 atime=1389081085.167724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.eric4_editor.html0000644000175000001440000000332012261331350024555 0ustar00detlevusers00000000000000 eric4.eric4_editor

    eric4.eric4_editor

    Eric4 Editor

    This is the main Python script that performs the necessary initialization of the MiniEditor module and starts the Qt event loop. This is a standalone version of the integrated MiniEditor module.

    Global Attributes

    None

    Classes

    None

    Functions

    createMainWidget Function to create the main widget.
    main Main entry point into the application.


    createMainWidget

    createMainWidget(argv)

    Function to create the main widget.

    argv
    list of commandline parameters (list of strings)
    Returns:
    reference to the main widget (QWidget)


    main

    main()

    Main entry point into the application.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.HelpBrowserWV.html0000644000175000001440000000013212261331351027274 xustar000000000000000030 mtime=1388688105.425228519 30 atime=1389081085.167724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.HelpBrowserWV.html0000644000175000001440000007670412261331351027044 0ustar00detlevusers00000000000000 eric4.Helpviewer.HelpBrowserWV

    eric4.Helpviewer.HelpBrowserWV

    Module implementing the helpbrowser using QWebView.

    Global Attributes

    None

    Classes

    HelpBrowser Class implementing the helpbrowser widget.
    HelpWebPage Class implementing an enhanced web page.
    JavaScriptEricObject Class implementing an external javascript object to search via the startpage.
    JavaScriptExternalObject Class implementing an external javascript object to add search providers.
    LinkedResource Class defining a data structure for linked resources.

    Functions

    None


    HelpBrowser

    Class implementing the helpbrowser widget.

    This is a subclass of the Qt QWebView to implement an interface compatible with the QTextBrowser based variant.

    Signals

    backwardAvailable(bool)
    emitted after the current URL has changed
    forwardAvailable(bool)
    emitted after the current URL has changed
    highlighted(const QString&)
    emitted, when the mouse hovers over a link
    search(const QUrl &)
    emitted, when a search is requested
    sourceChanged(const QUrl &)
    emitted after the current URL has changed

    Derived from

    QWebView

    Class Attributes

    None

    Class Methods

    None

    Methods

    HelpBrowser Constructor
    __addBookmark Private slot to bookmark the current link.
    __addExternalBinding Private slot to add javascript bindings for adding search providers.
    __applyZoom Private slot to apply the current zoom factor.
    __blockImage Private slot to add a block rule for an image URL.
    __bookmarkLink Private slot to bookmark a link via the context menu.
    __copyImage Private slot to copy an image to the clipboard.
    __copyImageLocation Private slot to copy an image location to the clipboard.
    __copyLink Private slot to copy a link to the clipboard.
    __currentEngineChanged Private slot to track a change of the current search engine.
    __downloadDone Private slot to handle the done signal of the download dialogs.
    __downloadImage Private slot to download an image and save it to disk.
    __downloadLink Private slot to download a link and save it to disk.
    __downloadRequested Private slot to handle a download request.
    __iconChanged Private slot to handle the icon change.
    __levelForZoom Private method determining the zoom level index given a zoom factor.
    __linkHovered Private slot to handle the linkHovered signal.
    __loadFinished Private method to handle the loadFinished signal.
    __loadProgress Private method to handle the loadProgress signal.
    __loadStarted Private method to handle the loadStarted signal.
    __openLinkInNewTab Private method called by the context menu to open a link in a new window.
    __searchRequested Private slot to search for some text with a selected search engine.
    __statusBarMessage Private slot to handle the statusBarMessage signal.
    __unsupportedContent Private slot to handle the unsupportedContent signal.
    __urlChanged Private slot to handle the urlChanged signal.
    __webInspector Private slot to show the web inspector window.
    backward Public slot to move backwards in history.
    clearHistory Public slot to clear the history.
    contextMenuEvent Protected method called to create a context menu.
    copy Public slot to copy the selected text.
    createWindow Protected method called, when a new window should be created.
    documentTitle Public method to return the title of the loaded page.
    findNextPrev Public slot to find the next occurrence of a text.
    forward Public slot to move forward in history.
    hasSelection Public method to determine, if there is some text selected.
    home Public slot to move to the first page loaded.
    isBackwardAvailable Public method to determine, if a backwards move in history is possible.
    isForwardAvailable Public method to determine, if a forward move in history is possible.
    isLoading Public method to get the loading state.
    keyPressEvent Protected method called by a key press.
    keyReleaseEvent Protected method called by a key release.
    linkedResources Public method to extract linked resources.
    mousePressEvent Protected method called by a mouse press event.
    preferencesChanged Public method to indicate a change of the settings.
    reload Public slot to reload the current page.
    saveAs Public method to save the current page to a file.
    setSource Public method used to set the source to be displayed.
    source Public method to return the URL of the loaded page.
    wheelEvent Protected method to handle wheel events.
    zoomIn Public slot to zoom into the page.
    zoomOut Public slot to zoom out of the page.
    zoomReset Public method to reset the zoom factor.

    Static Methods

    None

    HelpBrowser (Constructor)

    HelpBrowser(parent = None, name = QString(""))

    Constructor

    parent
    parent widget of this window (QWidget)
    name
    name of this window (string or QString)

    HelpBrowser.__addBookmark

    __addBookmark()

    Private slot to bookmark the current link.

    HelpBrowser.__addExternalBinding

    __addExternalBinding(frame = None)

    Private slot to add javascript bindings for adding search providers.

    frame
    reference to the web frame (QWebFrame)

    HelpBrowser.__applyZoom

    __applyZoom()

    Private slot to apply the current zoom factor.

    HelpBrowser.__blockImage

    __blockImage()

    Private slot to add a block rule for an image URL.

    HelpBrowser.__bookmarkLink

    __bookmarkLink()

    Private slot to bookmark a link via the context menu.

    HelpBrowser.__copyImage

    __copyImage()

    Private slot to copy an image to the clipboard.

    HelpBrowser.__copyImageLocation

    __copyImageLocation()

    Private slot to copy an image location to the clipboard.

    HelpBrowser.__copyLink

    __copyLink()

    Private slot to copy a link to the clipboard.

    HelpBrowser.__currentEngineChanged

    __currentEngineChanged()

    Private slot to track a change of the current search engine.

    HelpBrowser.__downloadDone

    __downloadDone()

    Private slot to handle the done signal of the download dialogs.

    HelpBrowser.__downloadImage

    __downloadImage()

    Private slot to download an image and save it to disk.

    HelpBrowser.__downloadLink

    __downloadLink()

    Private slot to download a link and save it to disk.

    HelpBrowser.__downloadRequested

    __downloadRequested(request)

    Private slot to handle a download request.

    request
    reference to the request object (QNetworkRequest)

    HelpBrowser.__iconChanged

    __iconChanged()

    Private slot to handle the icon change.

    HelpBrowser.__levelForZoom

    __levelForZoom(zoom)

    Private method determining the zoom level index given a zoom factor.

    zoom
    zoom factor (integer)
    Returns:
    index of zoom factor (integer)

    HelpBrowser.__linkHovered

    __linkHovered(link, title, textContent)

    Private slot to handle the linkHovered signal.

    link
    the URL of the link (QString)
    title
    the link title (QString)
    textContent
    text content of the link (QString)

    HelpBrowser.__loadFinished

    __loadFinished(ok)

    Private method to handle the loadFinished signal.

    ok
    flag indicating the result (boolean)

    HelpBrowser.__loadProgress

    __loadProgress(progress)

    Private method to handle the loadProgress signal.

    progress
    progress value (integer)

    HelpBrowser.__loadStarted

    __loadStarted()

    Private method to handle the loadStarted signal.

    HelpBrowser.__openLinkInNewTab

    __openLinkInNewTab()

    Private method called by the context menu to open a link in a new window.

    HelpBrowser.__searchRequested

    __searchRequested(act)

    Private slot to search for some text with a selected search engine.

    act
    reference to the action that triggered this slot (QAction)

    HelpBrowser.__statusBarMessage

    __statusBarMessage(text)

    Private slot to handle the statusBarMessage signal.

    text
    text to be shown in the status bar (QString)

    HelpBrowser.__unsupportedContent

    __unsupportedContent(reply, requestFilename = None, download = False)

    Private slot to handle the unsupportedContent signal.

    reply
    reference to the reply object (QNetworkReply)
    requestFilename=
    indicating to ask for a filename (boolean or None). If it is None, the behavior is determined by a configuration option.
    download=
    flag indicating a download operation (boolean)

    HelpBrowser.__urlChanged

    __urlChanged(url)

    Private slot to handle the urlChanged signal.

    url
    the new url (QUrl)

    HelpBrowser.__webInspector

    __webInspector()

    Private slot to show the web inspector window.

    HelpBrowser.backward

    backward()

    Public slot to move backwards in history.

    HelpBrowser.clearHistory

    clearHistory()

    Public slot to clear the history.

    HelpBrowser.contextMenuEvent

    contextMenuEvent(evt)

    Protected method called to create a context menu.

    This method is overridden from QWebView.

    evt
    reference to the context menu event object (QContextMenuEvent)

    HelpBrowser.copy

    copy()

    Public slot to copy the selected text.

    HelpBrowser.createWindow

    createWindow(windowType)

    Protected method called, when a new window should be created.

    windowType
    type of the requested window (QWebPage.WebWindowType)

    HelpBrowser.documentTitle

    documentTitle()

    Public method to return the title of the loaded page.

    Returns:
    title (QString)

    HelpBrowser.findNextPrev

    findNextPrev(txt, case, backwards, wrap)

    Public slot to find the next occurrence of a text.

    txt
    text to search for (QString)
    case
    flag indicating a case sensitive search (boolean)
    backwards
    flag indicating a backwards search (boolean)
    wrap
    flag indicating to wrap around (boolean)

    HelpBrowser.forward

    forward()

    Public slot to move forward in history.

    HelpBrowser.hasSelection

    hasSelection()

    Public method to determine, if there is some text selected.

    Returns:
    flag indicating text has been selected (boolean)

    HelpBrowser.home

    home()

    Public slot to move to the first page loaded.

    HelpBrowser.isBackwardAvailable

    isBackwardAvailable()

    Public method to determine, if a backwards move in history is possible.

    Returns:
    flag indicating move backwards is possible (boolean)

    HelpBrowser.isForwardAvailable

    isForwardAvailable()

    Public method to determine, if a forward move in history is possible.

    Returns:
    flag indicating move forward is possible (boolean)

    HelpBrowser.isLoading

    isLoading()

    Public method to get the loading state.

    Returns:
    flag indicating the loading state (boolean)

    HelpBrowser.keyPressEvent

    keyPressEvent(evt)

    Protected method called by a key press.

    This method is overridden from QTextBrowser.

    evt
    the key event (QKeyEvent)

    HelpBrowser.keyReleaseEvent

    keyReleaseEvent(evt)

    Protected method called by a key release.

    This method is overridden from QTextBrowser.

    evt
    the key event (QKeyEvent)

    HelpBrowser.linkedResources

    linkedResources(relation = QString())

    Public method to extract linked resources.

    relation
    relation to extract (QString)
    Returns:
    list of linked resources (list of LinkedResource)

    HelpBrowser.mousePressEvent

    mousePressEvent(evt)

    Protected method called by a mouse press event.

    evt
    reference to the mouse event (QMouseEvent)

    HelpBrowser.preferencesChanged

    preferencesChanged()

    Public method to indicate a change of the settings.

    HelpBrowser.reload

    reload()

    Public slot to reload the current page.

    HelpBrowser.saveAs

    saveAs()

    Public method to save the current page to a file.

    HelpBrowser.setSource

    setSource(name)

    Public method used to set the source to be displayed.

    name
    filename to be shown (QUrl)

    HelpBrowser.source

    source()

    Public method to return the URL of the loaded page.

    Returns:
    URL loaded in the help browser (QUrl)

    HelpBrowser.wheelEvent

    wheelEvent(evt)

    Protected method to handle wheel events.

    evt
    reference to the wheel event (QWheelEvent)

    HelpBrowser.zoomIn

    zoomIn()

    Public slot to zoom into the page.

    HelpBrowser.zoomOut

    zoomOut()

    Public slot to zoom out of the page.

    HelpBrowser.zoomReset

    zoomReset()

    Public method to reset the zoom factor.



    HelpWebPage

    Class implementing an enhanced web page.

    Derived from

    QWebPage

    Class Attributes

    None

    Class Methods

    None

    Methods

    HelpWebPage Constructor
    acceptNavigationRequest Protected method to determine, if a request may be accepted.
    extension Public method to implement a specific extension.
    pageAttributeId Public method to get the attribute id of the page attribute.
    populateNetworkRequest Public method to add data to a network request.
    supportsExtension Public method to check the support for an extension.
    userAgentForUrl Protected method to determine the user agent for the given URL.

    Static Methods

    None

    HelpWebPage (Constructor)

    HelpWebPage(parent = None)

    Constructor

    parent
    parent widget of this window (QWidget)

    HelpWebPage.acceptNavigationRequest

    acceptNavigationRequest(frame, request, type_)

    Protected method to determine, if a request may be accepted.

    frame
    reference to the frame sending the request (QWebFrame)
    request
    reference to the request object (QNetworkRequest)
    type_
    type of the navigation request (QWebPage.NavigationType)
    Returns:
    flag indicating acceptance (boolean)

    HelpWebPage.extension

    extension(extension, option, output)

    Public method to implement a specific extension.

    extension
    extension to be executed (QWebPage.Extension)
    option
    provides input to the extension (QWebPage.ExtensionOption)
    output
    stores the output results (QWebPage.ExtensionReturn)
    Returns:
    flag indicating a successful call of the extension (boolean)

    HelpWebPage.pageAttributeId

    pageAttributeId()

    Public method to get the attribute id of the page attribute.

    Returns:
    attribute id of the page attribute (integer)

    HelpWebPage.populateNetworkRequest

    populateNetworkRequest(request)

    Public method to add data to a network request.

    request
    reference to the network request object (QNetworkRequest)

    HelpWebPage.supportsExtension

    supportsExtension(extension)

    Public method to check the support for an extension.

    extension
    extension to test for (QWebPage.Extension)
    Returns:
    flag indicating the support of extension (boolean)

    HelpWebPage.userAgentForUrl

    userAgentForUrl(url)

    Protected method to determine the user agent for the given URL.

    url
    URL to determine user agent for (QUrl)
    Returns:
    user agent string (string)


    JavaScriptEricObject

    Class implementing an external javascript object to search via the startpage.

    Derived from

    QObject

    Class Attributes

    translations

    Class Methods

    None

    Methods

    JavaScriptEricObject Constructor
    providerString Public method to get a string for the search provider.
    searchUrl Public method to get the search URL for the given search term.
    translate Public method to translate the given string.

    Static Methods

    None

    JavaScriptEricObject (Constructor)

    JavaScriptEricObject(mw, parent = None)

    Constructor

    mw
    reference to the main window 8HelpWindow)
    parent
    reference to the parent object (QObject)

    JavaScriptEricObject.providerString

    providerString()

    Public method to get a string for the search provider.

    Returns:
    string for the search provider (QString)

    JavaScriptEricObject.searchUrl

    searchUrl(searchStr)

    Public method to get the search URL for the given search term.

    searchStr
    search term (QString)
    Returns:
    search URL (QString)

    JavaScriptEricObject.translate

    translate(trans)

    Public method to translate the given string.

    trans
    string to be translated (QString)
    Returns:
    translation (QString)


    JavaScriptExternalObject

    Class implementing an external javascript object to add search providers.

    Derived from

    QObject

    Class Attributes

    None

    Class Methods

    None

    Methods

    JavaScriptExternalObject Constructor
    AddSearchProvider Public slot to add a search provider.

    Static Methods

    None

    JavaScriptExternalObject (Constructor)

    JavaScriptExternalObject(mw, parent = None)

    Constructor

    mw
    reference to the main window 8HelpWindow)
    parent
    reference to the parent object (QObject)

    JavaScriptExternalObject.AddSearchProvider

    AddSearchProvider(url)

    Public slot to add a search provider.

    url
    url of the XML file defining the search provider (QString)


    LinkedResource

    Class defining a data structure for linked resources.

    Derived from

    object

    Class Attributes

    None

    Class Methods

    None

    Methods

    LinkedResource Constructor

    Static Methods

    None

    LinkedResource (Constructor)

    LinkedResource()

    Constructor


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.eric4_unittest.html0000644000175000001440000000013212261331350025416 xustar000000000000000030 mtime=1388688104.219227913 30 atime=1389081085.167724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.eric4_unittest.html0000644000175000001440000000332212261331350025150 0ustar00detlevusers00000000000000 eric4.eric4_unittest

    eric4.eric4_unittest

    Eric4 Unittest

    This is the main Python script that performs the necessary initialization of the unittest module and starts the Qt event loop. This is a standalone version of the integrated unittest module.

    Global Attributes

    None

    Classes

    None

    Functions

    createMainWidget Function to create the main widget.
    main Main entry point into the application.


    createMainWidget

    createMainWidget(argv)

    Function to create the main widget.

    argv
    list of commandline parameters (list of strings)
    Returns:
    reference to the main widget (QWidget)


    main

    main()

    Main entry point into the application.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DebugClients.Python.FlexCompleter.html0000644000175000001440000000013212261331354031055 xustar000000000000000030 mtime=1388688108.191229908 30 atime=1389081085.167724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.DebugClients.Python.FlexCompleter.html0000644000175000001440000001725312261331354030617 0ustar00detlevusers00000000000000 eric4.DebugClients.Python.FlexCompleter

    eric4.DebugClients.Python.FlexCompleter

    Word completion for the eric4 shell

    NOTE for eric4 variant

    This version is a re-implementation of FlexCompleter as found in the PyQwt package. It is modified to work with the eric4 debug clients.

    NOTE for the PyQwt variant

    This version is a re-implementation of FlexCompleter with readline support for PyQt&sip-3.6 and earlier.

    Full readline support is present in PyQt&sip-snapshot-20030531 and later.

    NOTE for FlexCompleter

    This version is a re-implementation of rlcompleter with selectable namespace.

    The problem with rlcompleter is that it's hardwired to work with __main__.__dict__, and in some cases one may have 'sandboxed' namespaces. So this class is a ripoff of rlcompleter, with the namespace to work in as an optional parameter.

    This class can be used just like rlcompleter, but the Completer class now has a constructor with the optional 'namespace' parameter.

    A patch has been submitted to Python@sourceforge for these changes to go in the standard Python distribution.

    Original rlcompleter documentation

    This requires the latest extension to the readline module (the completes keywords, built-ins and globals in __main__; when completing NAME.NAME..., it evaluates (!) the expression up to the last dot and completes its attributes.

    It's very cool to do "import string" type "string.", hit the completion key (twice), and see the list of names defined by the string module!

    Tip: to use the tab key as the completion key, call

    'readline.parse_and_bind("tab: complete")'

    Notes:

    • Exceptions raised by the completer function are *ignored* (and generally cause the completion to fail). This is a feature -- since readline sets the tty device in raw (or cbreak) mode, printing a traceback wouldn't work well without some complicated hoopla to save, reset and restore the tty state.
    • The evaluation of the NAME.NAME... form may cause arbitrary application defined code to be executed if an object with a __getattr__ hook is found. Since it is the responsibility of the application (or the user) to enable this feature, I consider this an acceptable risk. More complicated expressions (e.g. function calls or indexing operations) are *not* evaluated.
    • GNU readline is also used by the built-in functions input() and raw_input(), and thus these also benefit/suffer from the completer features. Clearly an interactive application can benefit by specifying its own completer function and using raw_input() for all its input.
    • When the original stdin is not a tty device, GNU readline is never used, and this module (and the readline module) are silently inactive.

    Global Attributes

    __all__

    Classes

    Completer Class implementing the command line completer object.

    Functions

    get_class_members Module function to retrieve the class members.


    Completer

    Class implementing the command line completer object.

    Derived from

    object

    Class Attributes

    None

    Class Methods

    None

    Methods

    Completer Create a new completer for the command line.
    attr_matches Compute matches when text contains a dot.
    complete Return the next possible completion for 'text'.
    global_matches Compute matches when text is a simple name.

    Static Methods

    None

    Completer (Constructor)

    Completer(namespace = None)

    Create a new completer for the command line.

    Completer([namespace]) -> completer instance.

    If unspecified, the default namespace where completions are performed is __main__ (technically, __main__.__dict__). Namespaces should be given as dictionaries.

    Completer instances should be used as the completion mechanism of readline via the set_completer() call:

    readline.set_completer(Completer(my_namespace).complete)

    namespace
    The namespace for the completer.

    Completer.attr_matches

    attr_matches(text)

    Compute matches when text contains a dot.

    Assuming the text is of the form NAME.NAME....[NAME], and is evaluatable in self.namespace, it will be evaluated and its attributes (as revealed by dir()) are used as possible completions. (For class instances, class members are are also considered.)

    WARNING: this can still invoke arbitrary C code, if an object with a __getattr__ hook is evaluated.

    text
    The text to be completed. (string)
    Returns:
    A list of all matches.

    Completer.complete

    complete(text, state)

    Return the next possible completion for 'text'.

    This is called successively with state == 0, 1, 2, ... until it returns None. The completion should begin with 'text'.

    text
    The text to be completed. (string)
    state
    The state of the completion. (integer)
    Returns:
    The possible completions as a list of strings.

    Completer.global_matches

    global_matches(text)

    Compute matches when text is a simple name.

    text
    The text to be completed. (string)
    Returns:
    A list of all keywords, built-in functions and names currently defined in self.namespace that match.


    get_class_members

    get_class_members(klass)

    Module function to retrieve the class members.

    klass
    The class object to be analysed.
    Returns:
    A list of all names defined in the class.

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ConfigurationPages.EditorKe0000644000175000001440000000013212261331353031245 xustar000000000000000030 mtime=1388688107.495229558 30 atime=1389081085.167724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.EditorKeywordsPage.html0000644000175000001440000000677712261331353034030 0ustar00detlevusers00000000000000 eric4.Preferences.ConfigurationPages.EditorKeywordsPage

    eric4.Preferences.ConfigurationPages.EditorKeywordsPage

    Module implementing the editor highlighter keywords configuration page.

    Global Attributes

    None

    Classes

    EditorKeywordsPage Class implementing the editor highlighter keywords configuration page.

    Functions

    create Module function to create the configuration page.


    EditorKeywordsPage

    Class implementing the editor highlighter keywords configuration page.

    Derived from

    ConfigurationPageBase, Ui_EditorKeywordsPage

    Class Attributes

    None

    Class Methods

    None

    Methods

    EditorKeywordsPage Constructor
    on_languageCombo_activated Private slot to fill the keywords edit.
    on_setSpinBox_valueChanged Private slot to fill the keywords edit.
    save Public slot to save the editor highlighter keywords configuration.

    Static Methods

    None

    EditorKeywordsPage (Constructor)

    EditorKeywordsPage()

    Constructor

    EditorKeywordsPage.on_languageCombo_activated

    on_languageCombo_activated(language)

    Private slot to fill the keywords edit.

    language
    selected language (QString)

    EditorKeywordsPage.on_setSpinBox_valueChanged

    on_setSpinBox_valueChanged(kwSet)

    Private slot to fill the keywords edit.

    kwSet
    number of the selected keyword set (integer)

    EditorKeywordsPage.save

    save()

    Public slot to save the editor highlighter keywords configuration.



    create

    create(dlg)

    Module function to create the configuration page.

    dlg
    reference to the configuration dialog

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.PluginWizardQMessageBox.html0000644000175000001440000000013212261331350030607 xustar000000000000000030 mtime=1388688104.465228037 30 atime=1389081085.167724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.PluginWizardQMessageBox.html0000644000175000001440000001023112261331350030336 0ustar00detlevusers00000000000000 eric4.Plugins.PluginWizardQMessageBox

    eric4.Plugins.PluginWizardQMessageBox

    Module implementing the QMessageBox wizard plugin.

    Global Attributes

    author
    autoactivate
    className
    deactivateable
    error
    longDescription
    name
    packageName
    shortDescription
    version

    Classes

    MessageBoxWizard Class implementing the QMessageBox wizard plugin.

    Functions

    None


    MessageBoxWizard

    Class implementing the QMessageBox wizard plugin.

    Derived from

    QObject

    Class Attributes

    None

    Class Methods

    None

    Methods

    MessageBoxWizard Constructor
    __callForm Private method to display a dialog and get the code.
    __handle Private method to handle the wizards action
    __initAction Private method to initialize the action.
    __initMenu Private method to add the actions to the right menu.
    activate Public method to activate this plugin.
    deactivate Public method to deactivate this plugin.

    Static Methods

    None

    MessageBoxWizard (Constructor)

    MessageBoxWizard(ui)

    Constructor

    ui
    reference to the user interface object (UI.UserInterface)

    MessageBoxWizard.__callForm

    __callForm(editor)

    Private method to display a dialog and get the code.

    editor
    reference to the current editor
    Returns:
    the generated code (string)

    MessageBoxWizard.__handle

    __handle()

    Private method to handle the wizards action

    MessageBoxWizard.__initAction

    __initAction()

    Private method to initialize the action.

    MessageBoxWizard.__initMenu

    __initMenu()

    Private method to add the actions to the right menu.

    MessageBoxWizard.activate

    activate()

    Public method to activate this plugin.

    Returns:
    tuple of None and activation status (boolean)

    MessageBoxWizard.deactivate

    deactivate()

    Public method to deactivate this plugin.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.VCS.ProjectBrowserHelper.html0000644000175000001440000000013212261331351027216 xustar000000000000000030 mtime=1388688105.184228398 30 atime=1389081085.168724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.VCS.ProjectBrowserHelper.html0000644000175000001440000002702612261331351026757 0ustar00detlevusers00000000000000 eric4.VCS.ProjectBrowserHelper

    eric4.VCS.ProjectBrowserHelper

    Module implementing the base class of the VCS project browser helper.

    Global Attributes

    None

    Classes

    VcsProjectBrowserHelper Class implementing the base class of the VCS project browser helper.

    Functions

    None


    VcsProjectBrowserHelper

    Class implementing the base class of the VCS project browser helper.

    Derived from

    QObject

    Class Attributes

    None

    Class Methods

    None

    Methods

    VcsProjectBrowserHelper Constructor
    _VCSAdd Protected slot called by the context menu to add the selected file to the VCS repository.
    _VCSAddTree Protected slot called by the context menu.
    _VCSCommit Protected slot called by the context menu to commit the changes to the VCS repository.
    _VCSDiff Protected slot called by the context menu to show the difference of a file/directory to the repository.
    _VCSInfoDisplay Protected slot called to show some vcs information.
    _VCSLog Protected slot called by the context menu to show the VCS log of a file/directory.
    _VCSMerge Protected slot called by the context menu to merge changes into to a file.
    _VCSRemove Protected slot called by the context menu to remove the selected file from the VCS repository.
    _VCSRevert Protected slot called by the context menu to revert changes made to a file.
    _VCSStatus Protected slot called by the context menu to show the status of a file.
    _VCSUpdate Protected slot called by the context menu to update a file from the VCS repository.
    _updateVCSStatus Protected method to update the VCS status of an item.
    addVCSMenus Public method to add the VCS entries to the various project browser menus.
    showContextMenu Slot called before the context menu is shown.
    showContextMenuDir Slot called before the context menu is shown.
    showContextMenuDirMulti Slot called before the context menu is shown.
    showContextMenuMulti Slot called before the context menu (multiple selections) is shown.

    Static Methods

    None

    VcsProjectBrowserHelper (Constructor)

    VcsProjectBrowserHelper(vcsObject, browserObject, projectObject, isTranslationsBrowser, parent = None, name = None)

    Constructor

    vcsObject
    reference to the vcs object
    browserObject
    reference to the project browser object
    projectObject
    reference to the project object
    isTranslationsBrowser
    flag indicating, the helper is requested for the translations browser (this needs some special treatment)
    parent
    parent widget (QWidget)
    name
    name of this object (string or QString)

    VcsProjectBrowserHelper._VCSAdd

    _VCSAdd()

    Protected slot called by the context menu to add the selected file to the VCS repository.

    VcsProjectBrowserHelper._VCSAddTree

    _VCSAddTree()

    Protected slot called by the context menu.

    It is used to add the selected directory tree to the VCS repository.

    VcsProjectBrowserHelper._VCSCommit

    _VCSCommit()

    Protected slot called by the context menu to commit the changes to the VCS repository.

    VcsProjectBrowserHelper._VCSDiff

    _VCSDiff()

    Protected slot called by the context menu to show the difference of a file/directory to the repository.

    VcsProjectBrowserHelper._VCSInfoDisplay

    _VCSInfoDisplay()

    Protected slot called to show some vcs information.

    VcsProjectBrowserHelper._VCSLog

    _VCSLog()

    Protected slot called by the context menu to show the VCS log of a file/directory.

    VcsProjectBrowserHelper._VCSMerge

    _VCSMerge()

    Protected slot called by the context menu to merge changes into to a file.

    VcsProjectBrowserHelper._VCSRemove

    _VCSRemove()

    Protected slot called by the context menu to remove the selected file from the VCS repository.

    VcsProjectBrowserHelper._VCSRevert

    _VCSRevert()

    Protected slot called by the context menu to revert changes made to a file.

    VcsProjectBrowserHelper._VCSStatus

    _VCSStatus()

    Protected slot called by the context menu to show the status of a file.

    VcsProjectBrowserHelper._VCSUpdate

    _VCSUpdate()

    Protected slot called by the context menu to update a file from the VCS repository.

    VcsProjectBrowserHelper._updateVCSStatus

    _updateVCSStatus(name)

    Protected method to update the VCS status of an item.

    name
    filename or directoryname of the item to be updated (string)

    VcsProjectBrowserHelper.addVCSMenus

    addVCSMenus(mainMenu, multiMenu, backMenu, dirMenu, dirMultiMenu)

    Public method to add the VCS entries to the various project browser menus.

    mainMenu
    reference to the main menu (QPopupMenu)
    multiMenu
    reference to the multiple selection menu (QPopupMenu)
    backMenu
    reference to the background menu (QPopupMenu)
    dirMenu
    reference to the directory menu (QPopupMenu)
    dirMultiMenu
    reference to the multiple selection directory menu (QPopupMenu)

    VcsProjectBrowserHelper.showContextMenu

    showContextMenu(menu, standardItems)

    Slot called before the context menu is shown.

    It enables/disables the VCS menu entries depending on the overall VCS status and the file status.

    menu
    reference to the menu to be shown
    standardItems
    array of standard items that need activation/deactivation depending on the overall VCS status

    VcsProjectBrowserHelper.showContextMenuDir

    showContextMenuDir(menu, standardItems)

    Slot called before the context menu is shown.

    It enables/disables the VCS menu entries depending on the overall VCS status and the directory status.

    menu
    reference to the menu to be shown
    standardItems
    array of standard items that need activation/deactivation depending on the overall VCS status

    VcsProjectBrowserHelper.showContextMenuDirMulti

    showContextMenuDirMulti(menu, standardItems)

    Slot called before the context menu is shown.

    It enables/disables the VCS menu entries depending on the overall VCS status and the directory status.

    menu
    reference to the menu to be shown
    standardItems
    array of standard items that need activation/deactivation depending on the overall VCS status

    VcsProjectBrowserHelper.showContextMenuMulti

    showContextMenuMulti(menu, standardItems)

    Slot called before the context menu (multiple selections) is shown.

    It enables/disables the VCS menu entries depending on the overall VCS status and the files status.

    menu
    reference to the menu to be shown
    standardItems
    array of standard items that need activation/deactivation depending on the overall VCS status

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Project.ProjectSourcesBrowser.html0000644000175000001440000000013212261331351030375 xustar000000000000000030 mtime=1388688105.862228738 30 atime=1389081085.168724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Project.ProjectSourcesBrowser.html0000644000175000001440000003225612261331351030137 0ustar00detlevusers00000000000000 eric4.Project.ProjectSourcesBrowser

    eric4.Project.ProjectSourcesBrowser

    Module implementing a class used to display the Sources part of the project.

    Global Attributes

    None

    Classes

    ProjectSourcesBrowser A class used to display the Sources part of the project.

    Functions

    None


    ProjectSourcesBrowser

    A class used to display the Sources part of the project.

    Signals

    closeSourceWindow(string)
    emitted after a file has been removed/deleted from the project
    showMenu(string, QMenu)
    emitted when a menu is about to be shown. The name of the menu and a reference to the menu are given.

    Derived from

    ProjectBaseBrowser

    Class Attributes

    None

    Class Methods

    None

    Methods

    ProjectSourcesBrowser Constructor
    __addNewPackage Private method to add a new package to the project.
    __addSourceDirectory Private method to add source files of a directory to the project.
    __addSourceFiles Private method to add a source file to the project.
    __closeAllWindows Private method to close all project related windows.
    __createPythonPopupMenus Privat method to generate the popup menus for a Python project.
    __createRubyPopupMenus Privat method to generate the popup menus for a Ruby project.
    __deleteFile Private method to delete files from the project.
    __showApplicationDiagram Private method to handle the application diagram context menu action.
    __showClassDiagram Private method to handle the class diagram context menu action.
    __showCodeCoverage Private method to handle the code coverage context menu action.
    __showCodeMetrics Private method to handle the code metrics context menu action.
    __showContextMenu Private slot called by the sourceMenu aboutToShow signal.
    __showContextMenuBack Private slot called by the backMenu aboutToShow signal.
    __showContextMenuCheck Private slot called before the checks menu is shown.
    __showContextMenuDir Private slot called by the dirMenu aboutToShow signal.
    __showContextMenuDirMulti Private slot called by the dirMultiMenu aboutToShow signal.
    __showContextMenuGraphics Private slot called before the checks menu is shown.
    __showContextMenuMulti Private slot called by the multiMenu aboutToShow signal.
    __showContextMenuShow Private slot called before the show menu is shown.
    __showImportsDiagram Private method to handle the imports diagram context menu action.
    __showPackageDiagram Private method to handle the package diagram context menu action.
    __showProfileData Private method to handle the show profile data context menu action.
    _contextMenuRequested Protected slot to show the context menu.
    _createPopupMenus Protected overloaded method to generate the popup menu.
    _openItem Protected slot to handle the open popup menu entry.
    _projectClosed Protected slot to handle the projectClosed signal.

    Static Methods

    None

    ProjectSourcesBrowser (Constructor)

    ProjectSourcesBrowser(project, parent = None)

    Constructor

    project
    reference to the project object
    parent
    parent widget of this browser (QWidget)

    ProjectSourcesBrowser.__addNewPackage

    __addNewPackage()

    Private method to add a new package to the project.

    ProjectSourcesBrowser.__addSourceDirectory

    __addSourceDirectory()

    Private method to add source files of a directory to the project.

    ProjectSourcesBrowser.__addSourceFiles

    __addSourceFiles()

    Private method to add a source file to the project.

    ProjectSourcesBrowser.__closeAllWindows

    __closeAllWindows()

    Private method to close all project related windows.

    ProjectSourcesBrowser.__createPythonPopupMenus

    __createPythonPopupMenus()

    Privat method to generate the popup menus for a Python project.

    ProjectSourcesBrowser.__createRubyPopupMenus

    __createRubyPopupMenus()

    Privat method to generate the popup menus for a Ruby project.

    ProjectSourcesBrowser.__deleteFile

    __deleteFile()

    Private method to delete files from the project.

    ProjectSourcesBrowser.__showApplicationDiagram

    __showApplicationDiagram()

    Private method to handle the application diagram context menu action.

    ProjectSourcesBrowser.__showClassDiagram

    __showClassDiagram()

    Private method to handle the class diagram context menu action.

    ProjectSourcesBrowser.__showCodeCoverage

    __showCodeCoverage()

    Private method to handle the code coverage context menu action.

    ProjectSourcesBrowser.__showCodeMetrics

    __showCodeMetrics()

    Private method to handle the code metrics context menu action.

    ProjectSourcesBrowser.__showContextMenu

    __showContextMenu()

    Private slot called by the sourceMenu aboutToShow signal.

    ProjectSourcesBrowser.__showContextMenuBack

    __showContextMenuBack()

    Private slot called by the backMenu aboutToShow signal.

    ProjectSourcesBrowser.__showContextMenuCheck

    __showContextMenuCheck()

    Private slot called before the checks menu is shown.

    ProjectSourcesBrowser.__showContextMenuDir

    __showContextMenuDir()

    Private slot called by the dirMenu aboutToShow signal.

    ProjectSourcesBrowser.__showContextMenuDirMulti

    __showContextMenuDirMulti()

    Private slot called by the dirMultiMenu aboutToShow signal.

    ProjectSourcesBrowser.__showContextMenuGraphics

    __showContextMenuGraphics()

    Private slot called before the checks menu is shown.

    ProjectSourcesBrowser.__showContextMenuMulti

    __showContextMenuMulti()

    Private slot called by the multiMenu aboutToShow signal.

    ProjectSourcesBrowser.__showContextMenuShow

    __showContextMenuShow()

    Private slot called before the show menu is shown.

    ProjectSourcesBrowser.__showImportsDiagram

    __showImportsDiagram()

    Private method to handle the imports diagram context menu action.

    ProjectSourcesBrowser.__showPackageDiagram

    __showPackageDiagram()

    Private method to handle the package diagram context menu action.

    ProjectSourcesBrowser.__showProfileData

    __showProfileData()

    Private method to handle the show profile data context menu action.

    ProjectSourcesBrowser._contextMenuRequested

    _contextMenuRequested(coord)

    Protected slot to show the context menu.

    coord
    the position of the mouse pointer (QPoint)

    ProjectSourcesBrowser._createPopupMenus

    _createPopupMenus()

    Protected overloaded method to generate the popup menu.

    ProjectSourcesBrowser._openItem

    _openItem()

    Protected slot to handle the open popup menu entry.

    ProjectSourcesBrowser._projectClosed

    _projectClosed()

    Protected slot to handle the projectClosed signal.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.Network.EmptyNetworkReply.ht0000644000175000001440000000013212261331353031350 xustar000000000000000030 mtime=1388688107.927229775 30 atime=1389081085.168724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.Network.EmptyNetworkReply.html0000644000175000001440000000513212261331353031434 0ustar00detlevusers00000000000000 eric4.Helpviewer.Network.EmptyNetworkReply

    eric4.Helpviewer.Network.EmptyNetworkReply

    Module implementing a network reply class for an empty reply (i.e. request was handle other way).

    Global Attributes

    None

    Classes

    EmptyNetworkReply Class implementing an empty network reply.

    Functions

    None


    EmptyNetworkReply

    Class implementing an empty network reply.

    Derived from

    QNetworkReply

    Class Attributes

    None

    Class Methods

    None

    Methods

    EmptyNetworkReply Constructor
    abort Public slot to abort the operation.
    readData Protected method to retrieve data from the reply object.

    Static Methods

    None

    EmptyNetworkReply (Constructor)

    EmptyNetworkReply(parent=None)

    Constructor

    parent
    reference to the parent object (QObject)

    EmptyNetworkReply.abort

    abort()

    Public slot to abort the operation.

    EmptyNetworkReply.readData

    readData(maxlen)

    Protected method to retrieve data from the reply object.

    maxlen
    maximum number of bytes to read (integer)
    Returns:
    string containing the data (string)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Project.ProjectResourcesBrowser.html0000644000175000001440000000013212261331351030724 xustar000000000000000030 mtime=1388688105.710228662 30 atime=1389081085.168724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Project.ProjectResourcesBrowser.html0000644000175000001440000003413512261331351030464 0ustar00detlevusers00000000000000 eric4.Project.ProjectResourcesBrowser

    eric4.Project.ProjectResourcesBrowser

    Module implementing a class used to display the resources part of the project.

    Global Attributes

    None

    Classes

    ProjectResourcesBrowser A class used to display the resources part of the project.

    Functions

    None


    ProjectResourcesBrowser

    A class used to display the resources part of the project.

    Signals

    appendStderr(string)
    emitted after something was received from a QProcess on stderr
    closeSourceWindow(string)
    emitted after a file has been removed/deleted from the project
    showMenu(string, QMenu)
    emitted when a menu is about to be shown. The name of the menu and a reference to the menu are given.
    sourceFile(string)
    emitted to open a resources file in an editor

    Derived from

    ProjectBaseBrowser

    Class Attributes

    RCFilenameFormatPython
    RCFilenameFormatRuby

    Class Methods

    None

    Methods

    ProjectResourcesBrowser Constructor
    __addResourceFiles Private method to add resource files to the project.
    __addResourcesDirectory Private method to add resource files of a directory to the project.
    __checkResourcesNewer Private method to check, if any file referenced in a resource file is newer than a given time.
    __compileAllResources Private method to compile all resources to source files.
    __compileQRC Privat method to compile a .qrc file to a .py file.
    __compileQRCDone Private slot to handle the finished signal of the compile process.
    __compileResource Private method to compile a resource to a source file.
    __compileSelectedResources Private method to compile selected resources to source files.
    __deleteFile Private method to delete a resource file from the project.
    __newResource Private slot to handle the New Resource menu action.
    __openFile Private slot to handle the Open menu action.
    __readStderr Private slot to handle the readyReadStandardError signal of the pyrcc4/rbrcc process.
    __readStdout Private slot to handle the readyReadStandardOutput signal of the pyrcc4/rbrcc process.
    __showContextMenu Private slot called by the menu aboutToShow signal.
    __showContextMenuBack Private slot called by the backMenu aboutToShow signal.
    __showContextMenuDir Private slot called by the dirMenu aboutToShow signal.
    __showContextMenuDirMulti Private slot called by the dirMultiMenu aboutToShow signal.
    __showContextMenuMulti Private slot called by the multiMenu aboutToShow signal.
    _contextMenuRequested Protected slot to show the context menu.
    _createPopupMenus Protected overloaded method to generate the popup menu.
    _initHookMethods Protected method to initialize the hooks dictionary.
    _openItem Protected slot to handle the open popup menu entry.
    compileChangedResources Public method to compile all changed resources to source files.
    handlePreferencesChanged Public slot used to handle the preferencesChanged signal.

    Static Methods

    None

    ProjectResourcesBrowser (Constructor)

    ProjectResourcesBrowser(project, parent = None)

    Constructor

    project
    reference to the project object
    parent
    parent widget of this browser (QWidget)

    ProjectResourcesBrowser.__addResourceFiles

    __addResourceFiles()

    Private method to add resource files to the project.

    ProjectResourcesBrowser.__addResourcesDirectory

    __addResourcesDirectory()

    Private method to add resource files of a directory to the project.

    ProjectResourcesBrowser.__checkResourcesNewer

    __checkResourcesNewer(filename, mtime)

    Private method to check, if any file referenced in a resource file is newer than a given time.

    filename
    filename of the resource file (string)
    mtime
    modification time to check against
    Returns:
    flag indicating some file is newer (boolean)

    ProjectResourcesBrowser.__compileAllResources

    __compileAllResources()

    Private method to compile all resources to source files.

    ProjectResourcesBrowser.__compileQRC

    __compileQRC(fn, noDialog = False, progress = None)

    Privat method to compile a .qrc file to a .py file.

    fn
    filename of the .ui file to be compiled
    noDialog
    flag indicating silent operations
    progress
    reference to the progress dialog
    Returns:
    reference to the compile process (QProcess)

    ProjectResourcesBrowser.__compileQRCDone

    __compileQRCDone(exitCode, exitStatus)

    Private slot to handle the finished signal of the compile process.

    exitCode
    exit code of the process (integer)
    exitStatus
    exit status of the process (QProcess.ExitStatus)

    ProjectResourcesBrowser.__compileResource

    __compileResource()

    Private method to compile a resource to a source file.

    ProjectResourcesBrowser.__compileSelectedResources

    __compileSelectedResources()

    Private method to compile selected resources to source files.

    ProjectResourcesBrowser.__deleteFile

    __deleteFile()

    Private method to delete a resource file from the project.

    ProjectResourcesBrowser.__newResource

    __newResource()

    Private slot to handle the New Resource menu action.

    ProjectResourcesBrowser.__openFile

    __openFile()

    Private slot to handle the Open menu action.

    ProjectResourcesBrowser.__readStderr

    __readStderr()

    Private slot to handle the readyReadStandardError signal of the pyrcc4/rbrcc process.

    ProjectResourcesBrowser.__readStdout

    __readStdout()

    Private slot to handle the readyReadStandardOutput signal of the pyrcc4/rbrcc process.

    ProjectResourcesBrowser.__showContextMenu

    __showContextMenu()

    Private slot called by the menu aboutToShow signal.

    ProjectResourcesBrowser.__showContextMenuBack

    __showContextMenuBack()

    Private slot called by the backMenu aboutToShow signal.

    ProjectResourcesBrowser.__showContextMenuDir

    __showContextMenuDir()

    Private slot called by the dirMenu aboutToShow signal.

    ProjectResourcesBrowser.__showContextMenuDirMulti

    __showContextMenuDirMulti()

    Private slot called by the dirMultiMenu aboutToShow signal.

    ProjectResourcesBrowser.__showContextMenuMulti

    __showContextMenuMulti()

    Private slot called by the multiMenu aboutToShow signal.

    ProjectResourcesBrowser._contextMenuRequested

    _contextMenuRequested(coord)

    Protected slot to show the context menu.

    coord
    the position of the mouse pointer (QPoint)

    ProjectResourcesBrowser._createPopupMenus

    _createPopupMenus()

    Protected overloaded method to generate the popup menu.

    ProjectResourcesBrowser._initHookMethods

    _initHookMethods()

    Protected method to initialize the hooks dictionary.

    Supported hook methods are:

    • compileResource: takes filename as parameter
    • compileAllResources: takes list of filenames as parameter
    • compileChangedResources: takes list of filenames as parameter
    • compileSelectedResources: takes list of all form filenames as parameter
    • newResource: takes full directory path of new file as parameter

    Note: Filenames are relative to the project directory, if not specified differently.

    ProjectResourcesBrowser._openItem

    _openItem()

    Protected slot to handle the open popup menu entry.

    ProjectResourcesBrowser.compileChangedResources

    compileChangedResources()

    Public method to compile all changed resources to source files.

    ProjectResourcesBrowser.handlePreferencesChanged

    handlePreferencesChanged()

    Public slot used to handle the preferencesChanged signal.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.PluginManager.PluginUninstallDialog.htm0000644000175000001440000000013212261331351031276 xustar000000000000000030 mtime=1388688105.241228427 30 atime=1389081085.168724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.PluginManager.PluginUninstallDialog.html0000644000175000001440000001306712261331351031213 0ustar00detlevusers00000000000000 eric4.PluginManager.PluginUninstallDialog

    eric4.PluginManager.PluginUninstallDialog

    Module implementing a dialog for plugin deinstallation.

    Global Attributes

    None

    Classes

    PluginUninstallDialog Class for the dialog variant.
    PluginUninstallWidget Class implementing a dialog for plugin deinstallation.
    PluginUninstallWindow Main window class for the standalone dialog.

    Functions

    None


    PluginUninstallDialog

    Class for the dialog variant.

    Derived from

    QDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    PluginUninstallDialog Constructor

    Static Methods

    None

    PluginUninstallDialog (Constructor)

    PluginUninstallDialog(pluginManager, parent = None)

    Constructor

    pluginManager
    reference to the plugin manager object
    parent
    reference to the parent widget (QWidget)


    PluginUninstallWidget

    Class implementing a dialog for plugin deinstallation.

    Derived from

    QWidget, Ui_PluginUninstallDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    PluginUninstallWidget Constructor
    __uninstallPlugin Private slot to uninstall the selected plugin.
    on_buttonBox_accepted Private slot to handle the accepted signal of the button box.
    on_pluginDirectoryCombo_currentIndexChanged Private slot to populate the plugin name combo upon a change of the plugin area.

    Static Methods

    None

    PluginUninstallWidget (Constructor)

    PluginUninstallWidget(pluginManager, parent = None)

    Constructor

    pluginManager
    reference to the plugin manager object
    parent
    parent of this dialog (QWidget)

    PluginUninstallWidget.__uninstallPlugin

    __uninstallPlugin()

    Private slot to uninstall the selected plugin.

    Returns:
    flag indicating success (boolean)

    PluginUninstallWidget.on_buttonBox_accepted

    on_buttonBox_accepted()

    Private slot to handle the accepted signal of the button box.

    PluginUninstallWidget.on_pluginDirectoryCombo_currentIndexChanged

    on_pluginDirectoryCombo_currentIndexChanged(index)

    Private slot to populate the plugin name combo upon a change of the plugin area.

    index
    index of the selected item (integer)


    PluginUninstallWindow

    Main window class for the standalone dialog.

    Derived from

    KQMainWindow

    Class Attributes

    None

    Class Methods

    None

    Methods

    PluginUninstallWindow Constructor

    Static Methods

    None

    PluginUninstallWindow (Constructor)

    PluginUninstallWindow(parent = None)

    Constructor

    parent
    reference to the parent widget (QWidget)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Project.DebuggerPropertiesDialog.html0000644000175000001440000000013212261331351031000 xustar000000000000000030 mtime=1388688105.803228709 30 atime=1389081085.168724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Project.DebuggerPropertiesDialog.html0000644000175000001440000000662412261331351030542 0ustar00detlevusers00000000000000 eric4.Project.DebuggerPropertiesDialog

    eric4.Project.DebuggerPropertiesDialog

    Module implementing a dialog for entering project specific debugger settings.

    Global Attributes

    None

    Classes

    DebuggerPropertiesDialog Class implementing a dialog for entering project specific debugger settings.

    Functions

    None


    DebuggerPropertiesDialog

    Class implementing a dialog for entering project specific debugger settings.

    Derived from

    QDialog, Ui_DebuggerPropertiesDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    DebuggerPropertiesDialog Constructor
    on_debugClientButton_clicked Private slot to handle the Debug Client selection.
    on_interpreterButton_clicked Private slot to handle the interpreter selection.
    storeData Public method to store the entered/modified data.

    Static Methods

    None

    DebuggerPropertiesDialog (Constructor)

    DebuggerPropertiesDialog(project, parent = None, name = None)

    Constructor

    project
    reference to the project object
    parent
    parent widget of this dialog (QWidget)
    name
    name of this dialog (string or QString)

    DebuggerPropertiesDialog.on_debugClientButton_clicked

    on_debugClientButton_clicked()

    Private slot to handle the Debug Client selection.

    DebuggerPropertiesDialog.on_interpreterButton_clicked

    on_interpreterButton_clicked()

    Private slot to handle the interpreter selection.

    DebuggerPropertiesDialog.storeData

    storeData()

    Public method to store the entered/modified data.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.PluginManager.PluginInstallDialog.html0000644000175000001440000000013212261331351031107 xustar000000000000000030 mtime=1388688105.280228446 30 atime=1389081085.168724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.PluginManager.PluginInstallDialog.html0000644000175000001440000002551512261331351030651 0ustar00detlevusers00000000000000 eric4.PluginManager.PluginInstallDialog

    eric4.PluginManager.PluginInstallDialog

    Module implementing the Plugin installation dialog.

    Global Attributes

    None

    Classes

    PluginInstallDialog Class for the dialog variant.
    PluginInstallWidget Class implementing the Plugin installation dialog.
    PluginInstallWindow Main window class for the standalone dialog.

    Functions

    None


    PluginInstallDialog

    Class for the dialog variant.

    Derived from

    QDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    PluginInstallDialog Constructor
    restartNeeded Public method to check, if a restart of the IDE is required.

    Static Methods

    None

    PluginInstallDialog (Constructor)

    PluginInstallDialog(pluginManager, pluginFileNames, parent = None)

    Constructor

    pluginManager
    reference to the plugin manager object
    pluginFileNames
    list of plugin files suggested for installation (QStringList)
    parent
    reference to the parent widget (QWidget)

    PluginInstallDialog.restartNeeded

    restartNeeded()

    Public method to check, if a restart of the IDE is required.

    Returns:
    flag indicating a restart is required (boolean)


    PluginInstallWidget

    Class implementing the Plugin installation dialog.

    Derived from

    QWidget, Ui_PluginInstallDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    PluginInstallWidget Constructor
    __createArchivesList Private method to create a list of plugin archive names.
    __installPlugin Private slot to install the selected plugin.
    __installPlugins Private method to install the selected plugin archives.
    __makedirs Private method to create a directory and all intermediate ones.
    __rollback Private method to rollback a failed installation.
    __selectPage Private method to show the right wizard page.
    __uninstallPackage Private method to uninstall an already installed plugin to prepare the update.
    on_addArchivesButton_clicked Private slot to select plugin ZIP-archives via a file selection dialog.
    on_archivesList_itemSelectionChanged Private slot called, when the selection of the archives list changes.
    on_buttonBox_clicked Private slot to handle the click of a button of the button box.
    on_removeArchivesButton_clicked Private slot to remove archives from the list.
    restartNeeded Public method to check, if a restart of the IDE is required.

    Static Methods

    None

    PluginInstallWidget (Constructor)

    PluginInstallWidget(pluginManager, pluginFileNames, parent = None)

    Constructor

    pluginManager
    reference to the plugin manager object
    pluginFileNames
    list of plugin files suggested for installation (QStringList)
    parent
    parent of this dialog (QWidget)

    PluginInstallWidget.__createArchivesList

    __createArchivesList()

    Private method to create a list of plugin archive names.

    Returns:
    list of plugin archive names (QStringList)

    PluginInstallWidget.__installPlugin

    __installPlugin(archiveFilename)

    Private slot to install the selected plugin.

    archiveFilename
    name of the plugin archive file (string or QString)
    Returns:
    flag indicating success (boolean), error message upon failure (QString) and flag indicating a restart of the IDE is required (boolean)

    PluginInstallWidget.__installPlugins

    __installPlugins()

    Private method to install the selected plugin archives.

    Returns:
    flag indicating success (boolean)

    PluginInstallWidget.__makedirs

    __makedirs(name, mode = 0777)

    Private method to create a directory and all intermediate ones.

    This is an extended version of the Python one in order to record the created directories.

    name
    name of the directory to create (string)
    mode
    permission to set for the new directory (integer)

    PluginInstallWidget.__rollback

    __rollback()

    Private method to rollback a failed installation.

    PluginInstallWidget.__selectPage

    __selectPage()

    Private method to show the right wizard page.

    PluginInstallWidget.__uninstallPackage

    __uninstallPackage(destination, pluginFileName, packageName)

    Private method to uninstall an already installed plugin to prepare the update.

    destination
    name of the plugin directory (string)
    pluginFileName
    name of the plugin file (string)
    packageName
    name of the plugin package (string)

    PluginInstallWidget.on_addArchivesButton_clicked

    on_addArchivesButton_clicked()

    Private slot to select plugin ZIP-archives via a file selection dialog.

    PluginInstallWidget.on_archivesList_itemSelectionChanged

    on_archivesList_itemSelectionChanged()

    Private slot called, when the selection of the archives list changes.

    PluginInstallWidget.on_buttonBox_clicked

    on_buttonBox_clicked(button)

    Private slot to handle the click of a button of the button box.

    PluginInstallWidget.on_removeArchivesButton_clicked

    on_removeArchivesButton_clicked()

    Private slot to remove archives from the list.

    PluginInstallWidget.restartNeeded

    restartNeeded()

    Public method to check, if a restart of the IDE is required.

    Returns:
    flag indicating a restart is required (boolean)


    PluginInstallWindow

    Main window class for the standalone dialog.

    Derived from

    KQMainWindow

    Class Attributes

    None

    Class Methods

    None

    Methods

    PluginInstallWindow Constructor

    Static Methods

    None

    PluginInstallWindow (Constructor)

    PluginInstallWindow(pluginFileNames, parent = None)

    Constructor

    pluginFileNames
    list of plugin files suggested for installation (QStringList)
    parent
    reference to the parent widget (QWidget)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.eric4_api.html0000644000175000001440000000013012261331350024306 xustar000000000000000028 mtime=1388688104.1932279 30 atime=1389081085.169724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.eric4_api.html0000644000175000001440000000355512261331350024052 0ustar00detlevusers00000000000000 eric4.eric4_api

    eric4.eric4_api

    Eric4 API Generator

    This is the main Python script of the API generator. It is this script that gets called via the API generation interface. This script can be used via the commandline as well.

    Global Attributes

    None

    Classes

    None

    Functions

    main Main entry point into the application.
    usage Function to print some usage information.
    version Function to show the version information.


    main

    main()

    Main entry point into the application.



    usage

    usage()

    Function to print some usage information.

    It prints a reference of all commandline parameters that may be used and ends the application.



    version

    version()

    Function to show the version information.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.Lexers.LexerYAML.html0000644000175000001440000000013212261331354027522 xustar000000000000000030 mtime=1388688108.611230118 30 atime=1389081085.169724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.Lexers.LexerYAML.html0000644000175000001440000000653512261331354027265 0ustar00detlevusers00000000000000 eric4.QScintilla.Lexers.LexerYAML

    eric4.QScintilla.Lexers.LexerYAML

    Module implementing a YAML lexer with some additional methods.

    Global Attributes

    None

    Classes

    LexerYAML Subclass to implement some additional lexer dependant methods.

    Functions

    None


    LexerYAML

    Subclass to implement some additional lexer dependant methods.

    Derived from

    QsciLexerYAML, Lexer

    Class Attributes

    None

    Class Methods

    None

    Methods

    LexerYAML Constructor
    defaultKeywords Public method to get the default keywords.
    initProperties Public slot to initialize the properties.
    isCommentStyle Public method to check, if a style is a comment style.
    isStringStyle Public method to check, if a style is a string style.

    Static Methods

    None

    LexerYAML (Constructor)

    LexerYAML(parent = None)

    Constructor

    parent
    parent widget of this lexer

    LexerYAML.defaultKeywords

    defaultKeywords(kwSet)

    Public method to get the default keywords.

    kwSet
    number of the keyword set (integer)
    Returns:
    string giving the keywords (string) or None

    LexerYAML.initProperties

    initProperties()

    Public slot to initialize the properties.

    LexerYAML.isCommentStyle

    isCommentStyle(style)

    Public method to check, if a style is a comment style.

    Returns:
    flag indicating a comment style (boolean)

    LexerYAML.isStringStyle

    isStringStyle(style)

    Public method to check, if a style is a string style.

    Returns:
    flag indicating a string style (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ShortcutDialog.html0000644000175000001440000000013212261331350027644 xustar000000000000000030 mtime=1388688104.570228089 30 atime=1389081085.169724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ShortcutDialog.html0000644000175000001440000001224112261331350027376 0ustar00detlevusers00000000000000 eric4.Preferences.ShortcutDialog

    eric4.Preferences.ShortcutDialog

    Module implementing a dialog for the configuration of a keyboard shortcut.

    Global Attributes

    None

    Classes

    ShortcutDialog Class implementing a dialog for the configuration of a keyboard shortcut.

    Functions

    None


    ShortcutDialog

    Class implementing a dialog for the configuration of a keyboard shortcut.

    Signals

    shortcutChanged(QKeySequence, QKeySequence, bool, objectType)
    emitted after the OK button was pressed

    Derived from

    QDialog, Ui_ShortcutDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    ShortcutDialog Constructor
    __clear Private slot to handle the Clear button press.
    __setKeyEditText Private method to set the text of a key edit.
    __typeChanged Private slot to handle the change of the shortcuts type.
    eventFilter Method called to filter the event queue.
    keyPressEvent Private method to handle a key press event.
    on_buttonBox_accepted Private slot to handle the OK button press.
    setKeys Public method to set the key to be configured.

    Static Methods

    None

    ShortcutDialog (Constructor)

    ShortcutDialog(parent = None, name = None, modal = False)

    Constructor

    parent
    The parent widget of this dialog. (QWidget)
    name
    The name of this dialog. (QString)
    modal
    Flag indicating a modal dialog. (boolean)

    ShortcutDialog.__clear

    __clear()

    Private slot to handle the Clear button press.

    ShortcutDialog.__setKeyEditText

    __setKeyEditText(txt)

    Private method to set the text of a key edit.

    txt
    text to be set (QString)

    ShortcutDialog.__typeChanged

    __typeChanged()

    Private slot to handle the change of the shortcuts type.

    ShortcutDialog.eventFilter

    eventFilter(watched, event)

    Method called to filter the event queue.

    watched
    the QObject being watched
    event
    the event that occurred
    Returns:
    always False

    ShortcutDialog.keyPressEvent

    keyPressEvent(evt)

    Private method to handle a key press event.

    evt
    the key event (QKeyEvent)

    ShortcutDialog.on_buttonBox_accepted

    on_buttonBox_accepted()

    Private slot to handle the OK button press.

    ShortcutDialog.setKeys

    setKeys(key, alternateKey, noCheck, objectType)

    Public method to set the key to be configured.

    key
    key sequence to be changed (QKeySequence)
    alternateKey
    alternate key sequence to be changed (QKeySequence)
    noCheck
    flag indicating that no uniqueness check should be performed (boolean)
    objectType
    type of the object (string).

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.UI.AuthenticationDialog.html0000644000175000001440000000013212261331350027064 xustar000000000000000030 mtime=1388688104.898228254 30 atime=1389081085.169724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.UI.AuthenticationDialog.html0000644000175000001440000000675012261331350026626 0ustar00detlevusers00000000000000 eric4.UI.AuthenticationDialog

    eric4.UI.AuthenticationDialog

    Module implementing the authentication dialog for the help browser.

    Global Attributes

    None

    Classes

    AuthenticationDialog Class implementing the authentication dialog for the help browser.

    Functions

    None


    AuthenticationDialog

    Class implementing the authentication dialog for the help browser.

    Derived from

    QDialog, Ui_AuthenticationDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    AuthenticationDialog Constructor
    getData Public method to retrieve the login data.
    setData Public method to set the login data.
    shallSave Public method to check, if the login data shall be saved.

    Static Methods

    None

    AuthenticationDialog (Constructor)

    AuthenticationDialog(info, username, showSave = False, saveIt = False, parent = None)

    Constructor

    info
    information to be shown (string or QString)
    username
    username as supplied by subversion (string or QString)
    showSave
    flag to indicate to show the save checkbox (boolean)
    saveIt
    flag indicating the value for the save checkbox (boolean)

    AuthenticationDialog.getData

    getData()

    Public method to retrieve the login data.

    Returns:
    tuple of two QString values (username, password)

    AuthenticationDialog.setData

    setData(username, password)

    Public method to set the login data.

    username
    username (string or QString)
    password
    password (string or QString)

    AuthenticationDialog.shallSave

    shallSave()

    Public method to check, if the login data shall be saved.

    Returns:
    flag indicating that the login data shall be saved (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.Project.html0000644000175000001440000000013212261331354025170 xustar000000000000000030 mtime=1388688108.660230143 30 atime=1389081085.169724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.Project.html0000644000175000001440000001257512261331354024734 0ustar00detlevusers00000000000000 eric4.Project

    eric4.Project

    Package implementing the project management module of eric4.

    The project management module consists of the main part, which is used for reading and writing of eric4 project files (*.e4p *.e4pz) and for performing all operations on the project. It is accompanied by various UI related modules implementing different dialogs and a tabbed tree browser for the display of files belonging to the current project as well as the project model related modules.

    Modules

    AddDirectoryDialog Module implementing a dialog to add files of a directory to the project.
    AddFileDialog Module implementing a dialog to add a file to the project.
    AddFoundFilesDialog Module implementing a dialog to show the found files to the user.
    AddLanguageDialog Module implementing a dialog to add a new language to the project.
    CreateDialogCodeDialog Module implementing a dialog to generate code for a Qt4 dialog.
    DebuggerPropertiesDialog Module implementing a dialog for entering project specific debugger settings.
    FiletypeAssociationDialog Module implementing a dialog to enter filetype associations for the project.
    LexerAssociationDialog Module implementing a dialog to enter lexer associations for the project.
    NewDialogClassDialog Module implementing a dialog to ente the data for a new dialog class file.
    NewPythonPackageDialog Module implementing a dialog to add a new Python package.
    Project Module implementing the project management functionality.
    ProjectBaseBrowser Module implementing the baseclass for the various project browsers.
    ProjectBrowser Module implementing the project browser part of the eric4 UI.
    ProjectBrowserFlags Module defining the project browser flags.
    ProjectBrowserModel Module implementing the browser model.
    ProjectBrowserSortFilterProxyModel Module implementing the browser sort filter proxy model.
    ProjectFormsBrowser Module implementing a class used to display the forms part of the project.
    ProjectInterfacesBrowser Module implementing the a class used to display the interfaces (IDL) part of the project.
    ProjectOthersBrowser Module implementing a class used to display the parts of the project, that don't fit the other categories.
    ProjectResourcesBrowser Module implementing a class used to display the resources part of the project.
    ProjectSourcesBrowser Module implementing a class used to display the Sources part of the project.
    ProjectTranslationsBrowser Module implementing a class used to display the translations part of the project.
    PropertiesDialog Module implementing the project properties dialog.
    SpellingPropertiesDialog Module implementing the Spelling Properties dialog.
    TranslationPropertiesDialog Module implementing the Translations Properties dialog.
    UserPropertiesDialog Module implementing the user specific project properties dialog.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.History.HistoryDialog.html0000644000175000001440000000013212261331353031006 xustar000000000000000030 mtime=1388688107.792229707 30 atime=1389081085.169724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.History.HistoryDialog.html0000644000175000001440000001176712261331353030554 0ustar00detlevusers00000000000000 eric4.Helpviewer.History.HistoryDialog

    eric4.Helpviewer.History.HistoryDialog

    Module implementing a dialog to manage history.

    Global Attributes

    None

    Classes

    HistoryDialog Class implementing a dialog to manage history.

    Functions

    None


    HistoryDialog

    Class implementing a dialog to manage history.

    Signals

    newUrl(const QUrl&, const QString&)
    emitted to open a URL in a new tab
    openUrl(const QUrl&, const QString&)
    emitted to open a URL in the current tab

    Derived from

    QDialog, Ui_HistoryDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    HistoryDialog Constructor
    __activated Private slot to handle the activation of an entry.
    __copyHistory Private slot to copy a history entry's URL to the clipboard.
    __customContextMenuRequested Private slot to handle the context menu request for the bookmarks tree.
    __modelReset Private slot handling a reset of the tree view's model.
    __openHistory Private method to open a history entry.
    __openHistoryInCurrentTab Private slot to open a history entry in the current browser tab.
    __openHistoryInNewTab Private slot to open a history entry in a new browser tab.

    Static Methods

    None

    HistoryDialog (Constructor)

    HistoryDialog(parent = None, manager = None)

    Constructor

    parent
    reference to the parent widget (QWidget
    manager
    reference to the history manager object (HistoryManager)

    HistoryDialog.__activated

    __activated(idx)

    Private slot to handle the activation of an entry.

    idx
    reference to the entry index (QModelIndex)

    HistoryDialog.__copyHistory

    __copyHistory()

    Private slot to copy a history entry's URL to the clipboard.

    HistoryDialog.__customContextMenuRequested

    __customContextMenuRequested(pos)

    Private slot to handle the context menu request for the bookmarks tree.

    pos
    position the context menu was requested (QPoint)

    HistoryDialog.__modelReset

    __modelReset()

    Private slot handling a reset of the tree view's model.

    HistoryDialog.__openHistory

    __openHistory(newTab)

    Private method to open a history entry.

    newTab
    flag indicating to open the history entry in a new tab (boolean)

    HistoryDialog.__openHistoryInCurrentTab

    __openHistoryInCurrentTab()

    Private slot to open a history entry in the current browser tab.

    HistoryDialog.__openHistoryInNewTab

    __openHistoryInNewTab()

    Private slot to open a history entry in a new browser tab.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DebugClients.Python.DebugClientCapabili0000644000175000001440000000013212261331354031153 xustar000000000000000030 mtime=1388688108.158229891 30 atime=1389081085.170724358 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.DebugClients.Python.DebugClientCapabilities.html0000644000175000001440000000210012261331354032526 0ustar00detlevusers00000000000000 eric4.DebugClients.Python.DebugClientCapabilities

    eric4.DebugClients.Python.DebugClientCapabilities

    Module defining the debug clients capabilities.

    Global Attributes

    HasAll
    HasCompleter
    HasCoverage
    HasDebugger
    HasInterpreter
    HasProfiler
    HasShell
    HasUnittest

    Classes

    None

    Functions

    None

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DataViews.CodeMetricsDialog.html0000644000175000001440000000013212261331352027662 xustar000000000000000030 mtime=1388688106.147228881 30 atime=1389081085.170724358 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.DataViews.CodeMetricsDialog.html0000644000175000001440000001570512261331352027424 0ustar00detlevusers00000000000000 eric4.DataViews.CodeMetricsDialog

    eric4.DataViews.CodeMetricsDialog

    Module implementing a code metrics dialog.

    Global Attributes

    None

    Classes

    CodeMetricsDialog Class implementing a dialog to display the code metrics.

    Functions

    None


    CodeMetricsDialog

    Class implementing a dialog to display the code metrics.

    Derived from

    QDialog, Ui_CodeMetricsDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    CodeMetricsDialog Constructor
    __createResultItem Private slot to create a new item in the result list.
    __createSummaryItem Private slot to create a new item in the summary list.
    __finish Private slot called when the action finished or the user pressed the button.
    __getValues Private method to extract the code metric values.
    __resizeResultColumns Private method to resize the list columns.
    __resizeSummaryColumns Private method to resize the list columns.
    __resultCollapse Private slot to collapse all entries of the resultlist.
    __resultExpand Private slot to expand all entries of the resultlist.
    __showContextMenu Private slot to show the context menu of the listview.
    on_buttonBox_clicked Private slot called by a button of the button box clicked.
    start Public slot to start the code metrics determination.

    Static Methods

    None

    CodeMetricsDialog (Constructor)

    CodeMetricsDialog(parent = None)

    Constructor

    parent
    parent widget (QWidget)

    CodeMetricsDialog.__createResultItem

    __createResultItem(parent, values)

    Private slot to create a new item in the result list.

    parent
    parent of the new item (QTreeWidget or QTreeWidgetItem)
    values
    values to be displayed (list)
    Returns:
    the generated item

    CodeMetricsDialog.__createSummaryItem

    __createSummaryItem(col0, col1)

    Private slot to create a new item in the summary list.

    col0
    string for column 0 (string or QString)
    col1
    string for column 1 (string or QString)

    CodeMetricsDialog.__finish

    __finish()

    Private slot called when the action finished or the user pressed the button.

    CodeMetricsDialog.__getValues

    __getValues(loc, stats, identifier)

    Private method to extract the code metric values.

    loc
    reference to the locale object (QLocale)
    stats
    reference to the code metric statistics object
    identifier
    identifier to get values for
    Returns:
    list of values suitable for display (QStringList)

    CodeMetricsDialog.__resizeResultColumns

    __resizeResultColumns()

    Private method to resize the list columns.

    CodeMetricsDialog.__resizeSummaryColumns

    __resizeSummaryColumns()

    Private method to resize the list columns.

    CodeMetricsDialog.__resultCollapse

    __resultCollapse()

    Private slot to collapse all entries of the resultlist.

    CodeMetricsDialog.__resultExpand

    __resultExpand()

    Private slot to expand all entries of the resultlist.

    CodeMetricsDialog.__showContextMenu

    __showContextMenu(coord)

    Private slot to show the context menu of the listview.

    coord
    the position of the mouse pointer (QPoint)

    CodeMetricsDialog.on_buttonBox_clicked

    on_buttonBox_clicked(button)

    Private slot called by a button of the button box clicked.

    button
    button that was clicked (QAbstractButton)

    CodeMetricsDialog.start

    start(fn)

    Public slot to start the code metrics determination.

    fn
    file or list of files or directory to be show the code metrics for (string or list of strings)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Debugger.DebugServer.html0000644000175000001440000000013212261331350026411 xustar000000000000000030 mtime=1388688104.634228122 30 atime=1389081085.170724358 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Debugger.DebugServer.html0000644000175000001440000015264112261331350026154 0ustar00detlevusers00000000000000 eric4.Debugger.DebugServer

    eric4.Debugger.DebugServer

    Module implementing the debug server.

    Global Attributes

    DebuggerInterfaces

    Classes

    DebugServer Class implementing the debug server embedded within the IDE.

    Functions

    None


    DebugServer

    Class implementing the debug server embedded within the IDE.

    Signals

    clientBanner(banner)
    emitted after the client banner was received
    clientBreakConditionError(fn, lineno)
    emitted after the client has signaled a syntax error in a breakpoint condition
    clientCapabilities(int capabilities, QString cltype)
    emitted after the clients capabilities were received
    clientClearBreak(filename, lineno)
    emitted after the debug client has decided to clear a temporary breakpoint
    clientClearWatch(condition)
    emitted after the debug client has decided to clear a temporary watch expression
    clientCompletionList(completionList, text)
    emitted after the client the commandline completion list and the reworked searchstring was received from the client
    clientException(exception)
    emitted after an exception occured on the client side
    clientExit(int)
    emitted with the exit status after the client has exited
    clientGone
    emitted if the client went away (planned or unplanned)
    clientLine(filename, lineno, forStack)
    emitted after the debug client has executed a line of code
    clientOutput
    emitted after the client has sent some output
    clientProcessStderr
    emitted after the client has sent some output via stderr
    clientProcessStdout
    emitted after the client has sent some output via stdout
    clientRawInput(prompt, echo)
    emitted after a raw input request was received
    clientRawInputSent
    emitted after the data was sent to the debug client
    clientStack(stack)
    emitted after the debug client has executed a line of code
    clientStatement(boolean)
    emitted after an interactive command has been executed. The parameter is 0 to indicate that the command is complete and 1 if it needs more input.
    clientSyntaxError(exception)
    emitted after a syntax error has been detected on the client side
    clientThreadList(currentId, threadList)
    emitted after a thread list has been received
    clientThreadSet
    emitted after the client has acknowledged the change of the current thread
    clientVariable(scope, variables)
    emitted after a dump for one class variable has been received
    clientVariables(scope, variables)
    emitted after a variables dump has been received
    clientWatchConditionError(condition)
    emitted after the client has signaled a syntax error in a watch expression
    passiveDebugStarted
    emitted after the debug client has connected in passive debug mode
    utFinished
    emitted after the client signalled the end of the unittest
    utPrepared(nrTests, exc_type, exc_value)
    emitted after the client has loaded a unittest suite
    utStartTest(testname, testdocu)
    emitted after the client has started a test
    utStopTest
    emitted after the client has finished a test
    utTestErrored(testname, exc_info)
    emitted after the client reported an errored test
    utTestFailed(testname, exc_info)
    emitted after the client reported a failed test

    Derived from

    QTcpServer

    Class Attributes

    None

    Class Methods

    None

    Methods

    DebugServer Constructor
    __addBreakPoints Private slot to add breakpoints.
    __addWatchPoints Private slot to set a watch expression.
    __breakPointDataAboutToBeChanged Private slot to handle the dataAboutToBeChanged signal of the breakpoint model.
    __changeBreakPoints Private slot to set changed breakpoints.
    __changeWatchPoints Private slot to set changed watch expressions.
    __clientClearBreakPoint Private slot to handle the clientClearBreak signal.
    __clientClearWatchPoint Private slot to handle the clientClearWatch signal.
    __clientProcessError Private slot to process client output received via stderr.
    __clientProcessOutput Private slot to process client output received via stdout.
    __createDebuggerInterface Private slot to create the debugger interface object.
    __deleteBreakPoints Private slot to delete breakpoints.
    __deleteWatchPoints Private slot to delete watch expressions.
    __getNetworkInterfaceAndIndex Private method to determine the network interface and the interface index.
    __makeWatchCondition Private method to construct the condition string.
    __newConnection Private slot to handle a new connection.
    __passiveShutDown Private method to shut down a passive debug connection.
    __registerDebuggerInterfaces Private method to register the available debugger interface modules.
    __remoteBreakpointEnable Private method to enable or disable a breakpoint.
    __remoteBreakpointIgnore Private method to ignore a breakpoint the next couple of occurrences.
    __remoteWatchpoint Private method to set or clear a watch expression.
    __remoteWatchpointEnable Private method to enable or disable a watch expression.
    __remoteWatchpointIgnore Private method to ignore a watch expression the next couple of occurrences.
    __restoreBreakpoints Private method to restore the breakpoints after a restart.
    __restoreWatchpoints Private method to restore the watch expressions after a restart.
    __setClientType Private method to set the client type.
    __splitWatchCondition Private method to split a remote watch expression.
    __watchPointDataAboutToBeChanged Private slot to handle the dataAboutToBeChanged signal of the watch expression model.
    clientBanner Public method to process the client banner info.
    clientBreakConditionError Public method to process the client breakpoint condition error info.
    clientCapabilities Public method to process the client capabilities info.
    clientClearBreak Public method to process the client clear breakpoint command.
    clientClearWatch Public slot to handle the clientClearWatch signal.
    clientCompletionList Public method to process the client auto completion info.
    clientException Public method to process the exception info from the client.
    clientExit Public method to process the client exit status.
    clientLine Public method to process client position feedback.
    clientOutput Public method to process a line of client output.
    clientRawInput Public method to process the client raw input command.
    clientStack Public method to process a client's stack information.
    clientStatement Public method to process the input response from the client.
    clientSyntaxError Public method to process the syntax error info from the client.
    clientThreadList Public method to process the client thread list info.
    clientThreadSet Public method to handle the change of the client thread.
    clientUtFinished Public method to process the client unit test finished info.
    clientUtPrepared Public method to process the client unittest prepared info.
    clientUtStartTest Public method to process the client start test info.
    clientUtStopTest Public method to process the client stop test info.
    clientUtTestErrored Public method to process the client test errored info.
    clientUtTestFailed Public method to process the client test failed info.
    clientVariable Public method to process the client variable info.
    clientVariables Public method to process the client variables info.
    clientWatchConditionError Public method to process the client watch expression error info.
    getBreakPointModel Public slot to get a reference to the breakpoint model object.
    getClientCapabilities Public method to retrieve the debug clients capabilities.
    getExtensions Public slot to get the extensions associated with the given language.
    getHostAddress Public method to get the IP address or hostname the debug server is listening.
    getSupportedLanguages Public slot to return the supported programming languages.
    getWatchPointModel Public slot to get a reference to the watch expression model object.
    isConnected Public method to test, if the debug server is connected to a backend.
    passiveStartUp Public method to handle a passive debug connection.
    preferencesChanged Public slot to handle the preferencesChanged signal.
    remoteBanner Public slot to get the banner info of the remote client.
    remoteBreakpoint Public method to set or clear a breakpoint.
    remoteCapabilities Public slot to get the debug clients capabilities.
    remoteClientSetFilter Public method to set a variables filter list.
    remoteClientVariable Public method to request the variables of the debugged program.
    remoteClientVariables Public method to request the variables of the debugged program.
    remoteCompletion Public slot to get the a list of possible commandline completions from the remote client.
    remoteContinue Public method to continue the debugged program.
    remoteCoverage Public method to load a new program to collect coverage data.
    remoteEnvironment Public method to set the environment for a program to debug, run, ...
    remoteEval Public method to evaluate arg in the current context of the debugged program.
    remoteExec Public method to execute stmt in the current context of the debugged program.
    remoteLoad Public method to load a new program to debug.
    remoteProfile Public method to load a new program to collect profiling data.
    remoteRawInput Public method to send the raw input to the debugged program.
    remoteRun Public method to load a new program to run.
    remoteSetThread Public method to request to set the given thread as current thread.
    remoteStatement Public method to execute a Python statement.
    remoteStep Public method to single step the debugged program.
    remoteStepOut Public method to step out the debugged program.
    remoteStepOver Public method to step over the debugged program.
    remoteStepQuit Public method to stop the debugged program.
    remoteThreadList Public method to request the list of threads from the client.
    remoteUTPrepare Public method to prepare a new unittest run.
    remoteUTRun Public method to start a unittest run.
    remoteUTStop public method to stop a unittest run.
    shutdownServer Public method to cleanly shut down.
    startClient Public method to start a debug client.

    Static Methods

    None

    DebugServer (Constructor)

    DebugServer()

    Constructor

    DebugServer.__addBreakPoints

    __addBreakPoints(parentIndex, start, end)

    Private slot to add breakpoints.

    parentIndex
    index of parent item (QModelIndex)
    start
    start row (integer)
    end
    end row (integer)

    DebugServer.__addWatchPoints

    __addWatchPoints(parentIndex, start, end)

    Private slot to set a watch expression.

    parentIndex
    index of parent item (QModelIndex)
    start
    start row (integer)
    end
    end row (integer)

    DebugServer.__breakPointDataAboutToBeChanged

    __breakPointDataAboutToBeChanged(startIndex, endIndex)

    Private slot to handle the dataAboutToBeChanged signal of the breakpoint model.

    startIndex
    start index of the rows to be changed (QModelIndex)
    endIndex
    end index of the rows to be changed (QModelIndex)

    DebugServer.__changeBreakPoints

    __changeBreakPoints(startIndex, endIndex)

    Private slot to set changed breakpoints.

    indexes
    indexes of changed breakpoints.

    DebugServer.__changeWatchPoints

    __changeWatchPoints(startIndex, endIndex)

    Private slot to set changed watch expressions.

    startIndex
    start index of the rows to be changed (QModelIndex)
    endIndex
    end index of the rows to be changed (QModelIndex)

    DebugServer.__clientClearBreakPoint

    __clientClearBreakPoint(fn, lineno)

    Private slot to handle the clientClearBreak signal.

    fn
    filename of breakpoint to clear (string or QString)
    lineno
    line number of breakpoint to clear (integer)

    DebugServer.__clientClearWatchPoint

    __clientClearWatchPoint(condition)

    Private slot to handle the clientClearWatch signal.

    condition
    expression of watch expression to clear (string or QString)

    DebugServer.__clientProcessError

    __clientProcessError()

    Private slot to process client output received via stderr.

    DebugServer.__clientProcessOutput

    __clientProcessOutput()

    Private slot to process client output received via stdout.

    DebugServer.__createDebuggerInterface

    __createDebuggerInterface(clientType = None)

    Private slot to create the debugger interface object.

    clientType
    type of the client interface to be created (string or QString)

    DebugServer.__deleteBreakPoints

    __deleteBreakPoints(parentIndex, start, end)

    Private slot to delete breakpoints.

    parentIndex
    index of parent item (QModelIndex)
    start
    start row (integer)
    end
    end row (integer)

    DebugServer.__deleteWatchPoints

    __deleteWatchPoints(parentIndex, start, end)

    Private slot to delete watch expressions.

    parentIndex
    index of parent item (QModelIndex)
    start
    start row (integer)
    end
    end row (integer)

    DebugServer.__getNetworkInterfaceAndIndex

    __getNetworkInterfaceAndIndex(address)

    Private method to determine the network interface and the interface index.

    address
    address to determine the info for (string or QString)
    Returns:
    tuple of network interface name (string) and index (integer)

    DebugServer.__makeWatchCondition

    __makeWatchCondition(cond, special)

    Private method to construct the condition string.

    cond
    condition (string or QString)
    special
    special condition (string or QString)
    Returns:
    condition string (QString)

    DebugServer.__newConnection

    __newConnection()

    Private slot to handle a new connection.

    DebugServer.__passiveShutDown

    __passiveShutDown()

    Private method to shut down a passive debug connection.

    DebugServer.__registerDebuggerInterfaces

    __registerDebuggerInterfaces()

    Private method to register the available debugger interface modules.

    DebugServer.__remoteBreakpointEnable

    __remoteBreakpointEnable(fn, line, enable)

    Private method to enable or disable a breakpoint.

    fn
    filename the breakpoint belongs to (string)
    line
    linenumber of the breakpoint (int)
    enable
    flag indicating enabling or disabling a breakpoint (boolean)

    DebugServer.__remoteBreakpointIgnore

    __remoteBreakpointIgnore(fn, line, count)

    Private method to ignore a breakpoint the next couple of occurrences.

    fn
    filename the breakpoint belongs to (string)
    line
    linenumber of the breakpoint (int)
    count
    number of occurrences to ignore (int)

    DebugServer.__remoteWatchpoint

    __remoteWatchpoint(cond, set, temp = False)

    Private method to set or clear a watch expression.

    cond
    expression of the watch expression (string)
    set
    flag indicating setting or resetting a watch expression (boolean)
    temp
    flag indicating a temporary watch expression (boolean)

    DebugServer.__remoteWatchpointEnable

    __remoteWatchpointEnable(cond, enable)

    Private method to enable or disable a watch expression.

    cond
    expression of the watch expression (string)
    enable
    flag indicating enabling or disabling a watch expression (boolean)

    DebugServer.__remoteWatchpointIgnore

    __remoteWatchpointIgnore(cond, count)

    Private method to ignore a watch expression the next couple of occurrences.

    cond
    expression of the watch expression (string)
    count
    number of occurrences to ignore (int)

    DebugServer.__restoreBreakpoints

    __restoreBreakpoints()

    Private method to restore the breakpoints after a restart.

    DebugServer.__restoreWatchpoints

    __restoreWatchpoints()

    Private method to restore the watch expressions after a restart.

    DebugServer.__setClientType

    __setClientType(clType)

    Private method to set the client type.

    clType
    type of client to be started (string)

    DebugServer.__splitWatchCondition

    __splitWatchCondition(cond)

    Private method to split a remote watch expression.

    cond
    remote expression (string or QString)
    Returns:
    tuple of local expression (string) and special condition (string)

    DebugServer.__watchPointDataAboutToBeChanged

    __watchPointDataAboutToBeChanged(startIndex, endIndex)

    Private slot to handle the dataAboutToBeChanged signal of the watch expression model.

    startIndex
    start index of the rows to be changed (QModelIndex)
    endIndex
    end index of the rows to be changed (QModelIndex)

    DebugServer.clientBanner

    clientBanner(version, platform, debugClient)

    Public method to process the client banner info.

    version
    interpreter version info (string)
    platform
    hostname of the client (string)
    debugClient
    additional debugger type info (string)

    DebugServer.clientBreakConditionError

    clientBreakConditionError(filename, lineno)

    Public method to process the client breakpoint condition error info.

    filename
    filename of the breakpoint (string)
    lineno
    line umber of the breakpoint (integer)

    DebugServer.clientCapabilities

    clientCapabilities(capabilities, clientType)

    Public method to process the client capabilities info.

    capabilities
    bitmaks with the client capabilities (integer)
    clientType
    type of the debug client (string)

    DebugServer.clientClearBreak

    clientClearBreak(filename, lineno)

    Public method to process the client clear breakpoint command.

    filename
    filename of the breakpoint (string)
    lineno
    line umber of the breakpoint (integer)

    DebugServer.clientClearWatch

    clientClearWatch(condition)

    Public slot to handle the clientClearWatch signal.

    condition
    expression of watch expression to clear (string or QString)

    DebugServer.clientCompletionList

    clientCompletionList(completionList, text)

    Public method to process the client auto completion info.

    completionList
    list of possible completions (list of strings)
    text
    the text to be completed (string)

    DebugServer.clientException

    clientException(exceptionType, exceptionMessage, stackTrace)

    Public method to process the exception info from the client.

    exceptionType
    type of exception raised (string)
    exceptionMessage
    message given by the exception (string)
    stackTrace
    list of stack entries with the exception position first. Each stack entry is a list giving the filename and the linenumber.

    DebugServer.clientExit

    clientExit(status)

    Public method to process the client exit status.

    status
    exit code as a string (string)

    DebugServer.clientLine

    clientLine(filename, lineno, forStack = False)

    Public method to process client position feedback.

    filename
    name of the file currently being executed (string)
    lineno
    line of code currently being executed (integer)
    forStack
    flag indicating this is for a stack dump (boolean)

    DebugServer.clientOutput

    clientOutput(line)

    Public method to process a line of client output.

    line
    client output (string)

    DebugServer.clientRawInput

    clientRawInput(prompt, echo)

    Public method to process the client raw input command.

    prompt
    the input prompt (string)
    echo
    flag indicating an echoing of the input (boolean)

    DebugServer.clientStack

    clientStack(stack)

    Public method to process a client's stack information.

    stack
    list of stack entries. Each entry is a tuple of three values giving the filename, linenumber and method (list of lists of (string, integer, string))

    DebugServer.clientStatement

    clientStatement(more)

    Public method to process the input response from the client.

    more
    flag indicating that more user input is required

    DebugServer.clientSyntaxError

    clientSyntaxError(message, filename, lineNo, characterNo)

    Public method to process the syntax error info from the client.

    message
    message of the syntax error (string)
    filename
    translated filename of the syntax error position (string)
    lineNo
    line number of the syntax error position (integer)
    characterNo
    character number of the syntax error position (integer)

    DebugServer.clientThreadList

    clientThreadList(currentId, threadList)

    Public method to process the client thread list info.

    currentID
    id of the current thread (integer)
    threadList
    list of dictionaries containing the thread data

    DebugServer.clientThreadSet

    clientThreadSet()

    Public method to handle the change of the client thread.

    DebugServer.clientUtFinished

    clientUtFinished()

    Public method to process the client unit test finished info.

    DebugServer.clientUtPrepared

    clientUtPrepared(result, exceptionType, exceptionValue)

    Public method to process the client unittest prepared info.

    result
    number of test cases (0 = error) (integer)
    exceptionType
    exception type (string)
    exceptionValue
    exception message (string)

    DebugServer.clientUtStartTest

    clientUtStartTest(testname, doc)

    Public method to process the client start test info.

    testname
    name of the test (string)
    doc
    short description of the test (string)

    DebugServer.clientUtStopTest

    clientUtStopTest()

    Public method to process the client stop test info.

    DebugServer.clientUtTestErrored

    clientUtTestErrored(testname, traceback)

    Public method to process the client test errored info.

    testname
    name of the test (string)
    traceback
    lines of traceback info (string)

    DebugServer.clientUtTestFailed

    clientUtTestFailed(testname, traceback)

    Public method to process the client test failed info.

    testname
    name of the test (string)
    traceback
    lines of traceback info (string)

    DebugServer.clientVariable

    clientVariable(scope, variables)

    Public method to process the client variable info.

    scope
    scope of the variables (-1 = empty global, 1 = global, 0 = local)
    variables
    the list of members of a classvariable from the client

    DebugServer.clientVariables

    clientVariables(scope, variables)

    Public method to process the client variables info.

    scope
    scope of the variables (-1 = empty global, 1 = global, 0 = local)
    variables
    the list of variables from the client

    DebugServer.clientWatchConditionError

    clientWatchConditionError(condition)

    Public method to process the client watch expression error info.

    condition
    expression of watch expression to clear (string or QString)

    DebugServer.getBreakPointModel

    getBreakPointModel()

    Public slot to get a reference to the breakpoint model object.

    Returns:
    reference to the breakpoint model object (BreakPointModel)

    DebugServer.getClientCapabilities

    getClientCapabilities(type)

    Public method to retrieve the debug clients capabilities.

    type
    debug client type (string)
    Returns:
    debug client capabilities (integer)

    DebugServer.getExtensions

    getExtensions(language)

    Public slot to get the extensions associated with the given language.

    language
    language to get extensions for (string)
    Returns:
    tuple of extensions associated with the language (tuple of strings)

    DebugServer.getHostAddress

    getHostAddress(localhost)

    Public method to get the IP address or hostname the debug server is listening.

    localhost
    flag indicating to return the address for localhost (boolean)
    Returns:
    IP address or hostname (string)

    DebugServer.getSupportedLanguages

    getSupportedLanguages(shellOnly = False)

    Public slot to return the supported programming languages.

    shellOnly
    flag indicating only languages supporting an interactive shell should be returned
    Returns:
    list of supported languages (list of strings)

    DebugServer.getWatchPointModel

    getWatchPointModel()

    Public slot to get a reference to the watch expression model object.

    Returns:
    reference to the watch expression model object (WatchPointModel)

    DebugServer.isConnected

    isConnected()

    Public method to test, if the debug server is connected to a backend.

    Returns:
    flag indicating a connection (boolean)

    DebugServer.passiveStartUp

    passiveStartUp(fn, exc)

    Public method to handle a passive debug connection.

    fn
    filename of the debugged script (string)
    exc
    flag to enable exception reporting of the IDE (boolean)

    DebugServer.preferencesChanged

    preferencesChanged()

    Public slot to handle the preferencesChanged signal.

    DebugServer.remoteBanner

    remoteBanner()

    Public slot to get the banner info of the remote client.

    DebugServer.remoteBreakpoint

    remoteBreakpoint(fn, line, set, cond=None, temp=False)

    Public method to set or clear a breakpoint.

    fn
    filename the breakpoint belongs to (string)
    line
    linenumber of the breakpoint (int)
    set
    flag indicating setting or resetting a breakpoint (boolean)
    cond
    condition of the breakpoint (string)
    temp
    flag indicating a temporary breakpoint (boolean)

    DebugServer.remoteCapabilities

    remoteCapabilities()

    Public slot to get the debug clients capabilities.

    DebugServer.remoteClientSetFilter

    remoteClientSetFilter(scope, filter)

    Public method to set a variables filter list.

    scope
    the scope of the variables (0 = local, 1 = global)
    filter
    regexp string for variable names to filter out (string)

    DebugServer.remoteClientVariable

    remoteClientVariable(scope, filter, var, framenr = 0)

    Public method to request the variables of the debugged program.

    scope
    the scope of the variables (0 = local, 1 = global)
    filter
    list of variable types to filter out (list of int)
    var
    list encoded name of variable to retrieve (string)
    framenr
    framenumber of the variables to retrieve (int)

    DebugServer.remoteClientVariables

    remoteClientVariables(scope, filter, framenr = 0)

    Public method to request the variables of the debugged program.

    scope
    the scope of the variables (0 = local, 1 = global)
    filter
    list of variable types to filter out (list of int)
    framenr
    framenumber of the variables to retrieve (int)

    DebugServer.remoteCompletion

    remoteCompletion(text)

    Public slot to get the a list of possible commandline completions from the remote client.

    text
    the text to be completed (string or QString)

    DebugServer.remoteContinue

    remoteContinue(special = False)

    Public method to continue the debugged program.

    special
    flag indicating a special continue operation

    DebugServer.remoteCoverage

    remoteCoverage(fn, argv, wd, env, autoClearShell = True, erase = False, forProject = False, runInConsole = False)

    Public method to load a new program to collect coverage data.

    fn
    the filename to run (string)
    argv
    the commandline arguments to pass to the program (string or QString)
    wd
    the working directory for the program (string)
    env
    environment settings (string)
    autoClearShell=
    flag indicating, that the interpreter window should be cleared (boolean)
    erase=
    flag indicating that coverage info should be cleared first (boolean)
    forProject=
    flag indicating a project related action (boolean)
    runInConsole=
    flag indicating to start the debugger in a console window (boolean)

    DebugServer.remoteEnvironment

    remoteEnvironment(env)

    Public method to set the environment for a program to debug, run, ...

    env
    environment settings (string)

    DebugServer.remoteEval

    remoteEval(arg)

    Public method to evaluate arg in the current context of the debugged program.

    arg
    the arguments to evaluate (string)

    DebugServer.remoteExec

    remoteExec(stmt)

    Public method to execute stmt in the current context of the debugged program.

    stmt
    statement to execute (string)

    DebugServer.remoteLoad

    remoteLoad(fn, argv, wd, env, autoClearShell = True, tracePython = False, autoContinue = True, forProject = False, runInConsole = False, autoFork = False, forkChild = False)

    Public method to load a new program to debug.

    fn
    the filename to debug (string)
    argv
    the commandline arguments to pass to the program (string or QString)
    wd
    the working directory for the program (string)
    env
    environment settings (string)
    autoClearShell=
    flag indicating, that the interpreter window should be cleared (boolean)
    tracePython=
    flag indicating if the Python library should be traced as well (boolean)
    autoContinue=
    flag indicating, that the debugger should not stop at the first executable line (boolean)
    forProject=
    flag indicating a project related action (boolean)
    runInConsole=
    flag indicating to start the debugger in a console window (boolean)
    autoFork=
    flag indicating the automatic fork mode (boolean)
    forkChild=
    flag indicating to debug the child after forking (boolean)

    DebugServer.remoteProfile

    remoteProfile(fn, argv, wd, env, autoClearShell = True, erase = False, forProject = False, runInConsole = False)

    Public method to load a new program to collect profiling data.

    fn
    the filename to run (string)
    argv
    the commandline arguments to pass to the program (string or QString)
    wd
    the working directory for the program (string)
    env
    environment settings (string)
    autoClearShell=
    flag indicating, that the interpreter window should be cleared (boolean)
    erase=
    flag indicating that timing info should be cleared first (boolean)
    forProject=
    flag indicating a project related action (boolean)
    runInConsole=
    flag indicating to start the debugger in a console window (boolean)

    DebugServer.remoteRawInput

    remoteRawInput(s)

    Public method to send the raw input to the debugged program.

    s
    the raw input (string)

    DebugServer.remoteRun

    remoteRun(fn, argv, wd, env, autoClearShell = True, forProject = False, runInConsole = False, autoFork = False, forkChild = False)

    Public method to load a new program to run.

    fn
    the filename to run (string)
    argv
    the commandline arguments to pass to the program (string or QString)
    wd
    the working directory for the program (string)
    env
    environment settings (string)
    autoClearShell=
    flag indicating, that the interpreter window should be cleared (boolean)
    forProject=
    flag indicating a project related action (boolean)
    runInConsole=
    flag indicating to start the debugger in a console window (boolean)
    autoFork=
    flag indicating the automatic fork mode (boolean)
    forkChild=
    flag indicating to debug the child after forking (boolean)

    DebugServer.remoteSetThread

    remoteSetThread(tid)

    Public method to request to set the given thread as current thread.

    tid
    id of the thread (integer)

    DebugServer.remoteStatement

    remoteStatement(stmt)

    Public method to execute a Python statement.

    stmt
    the Python statement to execute (string). It should not have a trailing newline.

    DebugServer.remoteStep

    remoteStep()

    Public method to single step the debugged program.

    DebugServer.remoteStepOut

    remoteStepOut()

    Public method to step out the debugged program.

    DebugServer.remoteStepOver

    remoteStepOver()

    Public method to step over the debugged program.

    DebugServer.remoteStepQuit

    remoteStepQuit()

    Public method to stop the debugged program.

    DebugServer.remoteThreadList

    remoteThreadList()

    Public method to request the list of threads from the client.

    DebugServer.remoteUTPrepare

    remoteUTPrepare(fn, tn, tfn, cov, covname, coverase)

    Public method to prepare a new unittest run.

    fn
    the filename to load (string)
    tn
    the testname to load (string)
    tfn
    the test function name to load tests from (string)
    cov
    flag indicating collection of coverage data is requested
    covname
    filename to be used to assemble the coverage caches filename
    coverase
    flag indicating erasure of coverage data is requested

    DebugServer.remoteUTRun

    remoteUTRun()

    Public method to start a unittest run.

    DebugServer.remoteUTStop

    remoteUTStop()

    public method to stop a unittest run.

    DebugServer.shutdownServer

    shutdownServer()

    Public method to cleanly shut down.

    It closes our socket and shuts down the debug client. (Needed on Win OS)

    DebugServer.startClient

    startClient(unplanned = True, clType = None, forProject = False, runInConsole = False)

    Public method to start a debug client.

    unplanned=
    flag indicating that the client has died (boolean)
    clType=
    type of client to be started (string)
    forProject=
    flag indicating a project related action (boolean)
    runInConsole=
    flag indicating to start the debugger in a console window (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.History.HistoryManager.html0000644000175000001440000000013212261331353031161 xustar000000000000000030 mtime=1388688107.832229727 30 atime=1389081085.170724358 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.History.HistoryManager.html0000644000175000001440000003230012261331353030711 0ustar00detlevusers00000000000000 eric4.Helpviewer.History.HistoryManager

    eric4.Helpviewer.History.HistoryManager

    Module implementing the history manager.

    Global Attributes

    HISTORY_VERSION

    Classes

    HistoryEntry Class implementing a history entry.
    HistoryManager Class implementing the history manager.

    Functions

    None


    HistoryEntry

    Class implementing a history entry.

    Derived from

    object

    Class Attributes

    None

    Class Methods

    None

    Methods

    HistoryEntry Constructor
    __eq__ Special method determining equality.
    __lt__ Special method determining less relation.
    userTitle Public method to get the title of the history entry.

    Static Methods

    None

    HistoryEntry (Constructor)

    HistoryEntry(url = None, dateTime = None, title = None)

    Constructor

    url
    URL of the history entry (QString)
    dateTime
    date and time this entry was created (QDateTime)
    title
    title string for the history entry (QString)

    HistoryEntry.__eq__

    __eq__(other)

    Special method determining equality.

    other
    reference to the history entry to compare against (HistoryEntry)
    Returns:
    flag indicating equality (boolean)

    HistoryEntry.__lt__

    __lt__(other)

    Special method determining less relation.

    Note: History is sorted in reverse order by date and time

    other
    reference to the history entry to compare against (HistoryEntry)
    Returns:
    flag indicating less (boolean)

    HistoryEntry.userTitle

    userTitle()

    Public method to get the title of the history entry.

    Returns:
    title of the entry (QString)


    HistoryManager

    Class implementing the history manager.

    Signals

    entryAdded
    emitted after a history entry has been added
    entryRemoved
    emitted after a history entry has been removed
    entryUpdated(int)
    emitted after a history entry has been updated
    historyCleared()
    emitted after the history has been cleared
    historyReset()
    emitted after the history has been reset

    Derived from

    QWebHistoryInterface

    Class Attributes

    None

    Class Methods

    None

    Methods

    HistoryManager Constructor
    __checkForExpired Private slot to check entries for expiration.
    __load Private method to load the saved history entries from disk.
    __refreshFrequencies Private slot to recalculate the refresh frequencies.
    __startFrequencyTimer Private method to start the timer to recalculate the frequencies.
    _addHistoryEntry Protected method to add a history item.
    _removeHistoryEntry Protected method to remove a history item.
    addHistoryEntry Public method to add a history entry.
    clear Public slot to clear the complete history.
    close Public method to close the history manager.
    daysToExpire Public method to get the days for entry expiration.
    history Public method to return the history.
    historyContains Public method to check the history for an entry.
    historyFilterModel Public method to get a reference to the history filter model.
    historyModel Public method to get a reference to the history model.
    historyTreeModel Public method to get a reference to the history tree model.
    preferencesChanged Public method to indicate a change of preferences.
    removeHistoryEntry Public method to remove a history entry.
    save Public slot to save the history entries to disk.
    setDaysToExpire Public method to set the days for entry expiration.
    setHistory Public method to set a new history.
    updateHistoryEntry Public method to update a history entry.

    Static Methods

    None

    HistoryManager (Constructor)

    HistoryManager(parent = None)

    Constructor

    parent
    reference to the parent object (QObject)

    HistoryManager.__checkForExpired

    __checkForExpired()

    Private slot to check entries for expiration.

    HistoryManager.__load

    __load()

    Private method to load the saved history entries from disk.

    HistoryManager.__refreshFrequencies

    __refreshFrequencies()

    Private slot to recalculate the refresh frequencies.

    HistoryManager.__startFrequencyTimer

    __startFrequencyTimer()

    Private method to start the timer to recalculate the frequencies.

    HistoryManager._addHistoryEntry

    _addHistoryEntry(itm)

    Protected method to add a history item.

    itm
    reference to the history item to add (HistoryEntry)

    HistoryManager._removeHistoryEntry

    _removeHistoryEntry(itm)

    Protected method to remove a history item.

    itm
    reference to the history item to remove (HistoryEntry)

    HistoryManager.addHistoryEntry

    addHistoryEntry(url)

    Public method to add a history entry.

    url
    URL to be added (QString)

    HistoryManager.clear

    clear()

    Public slot to clear the complete history.

    HistoryManager.close

    close()

    Public method to close the history manager.

    HistoryManager.daysToExpire

    daysToExpire()

    Public method to get the days for entry expiration.

    Returns:
    days for entry expiration (integer)

    HistoryManager.history

    history()

    Public method to return the history.

    Returns:
    reference to the list of history entries (list of HistoryEntry)

    HistoryManager.historyContains

    historyContains(url)

    Public method to check the history for an entry.

    url
    URL to check for (QString)
    Returns:
    flag indicating success (boolean)

    HistoryManager.historyFilterModel

    historyFilterModel()

    Public method to get a reference to the history filter model.

    Returns:
    reference to the history filter model (HistoryFilterModel)

    HistoryManager.historyModel

    historyModel()

    Public method to get a reference to the history model.

    Returns:
    reference to the history model (HistoryModel)

    HistoryManager.historyTreeModel

    historyTreeModel()

    Public method to get a reference to the history tree model.

    Returns:
    reference to the history tree model (HistoryTreeModel)

    HistoryManager.preferencesChanged

    preferencesChanged()

    Public method to indicate a change of preferences.

    HistoryManager.removeHistoryEntry

    removeHistoryEntry(url, title = QString())

    Public method to remove a history entry.

    url
    URL of the entry to remove (QUrl)
    title
    title of the entry to remove (QString)

    HistoryManager.save

    save()

    Public slot to save the history entries to disk.

    HistoryManager.setDaysToExpire

    setDaysToExpire(limit)

    Public method to set the days for entry expiration.

    limit
    days for entry expiration (integer)

    HistoryManager.setHistory

    setHistory(history, loadedAndSorted = False)

    Public method to set a new history.

    history
    reference to the list of history entries to be set (list of HistoryEntry)
    loadedAndSorted
    flag indicating that the list is sorted (boolean)

    HistoryManager.updateHistoryEntry

    updateHistoryEntry(url, title)

    Public method to update a history entry.

    url
    URL of the entry to update (QString)
    title
    title of the entry to update (QString)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.Lexers.LexerCSharp.html0000644000175000001440000000013212261331354030140 xustar000000000000000030 mtime=1388688108.556230091 30 atime=1389081085.170724358 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.Lexers.LexerCSharp.html0000644000175000001440000000662512261331354027703 0ustar00detlevusers00000000000000 eric4.QScintilla.Lexers.LexerCSharp

    eric4.QScintilla.Lexers.LexerCSharp

    Module implementing a C# lexer with some additional methods.

    Global Attributes

    None

    Classes

    LexerCSharp Subclass to implement some additional lexer dependant methods.

    Functions

    None


    LexerCSharp

    Subclass to implement some additional lexer dependant methods.

    Derived from

    QsciLexerCSharp, Lexer

    Class Attributes

    None

    Class Methods

    None

    Methods

    LexerCSharp Constructor
    defaultKeywords Public method to get the default keywords.
    initProperties Public slot to initialize the properties.
    isCommentStyle Public method to check, if a style is a comment style.
    isStringStyle Public method to check, if a style is a string style.

    Static Methods

    None

    LexerCSharp (Constructor)

    LexerCSharp(parent=None)

    Constructor

    parent
    parent widget of this lexer

    LexerCSharp.defaultKeywords

    defaultKeywords(kwSet)

    Public method to get the default keywords.

    kwSet
    number of the keyword set (integer)
    Returns:
    string giving the keywords (string) or None

    LexerCSharp.initProperties

    initProperties()

    Public slot to initialize the properties.

    LexerCSharp.isCommentStyle

    isCommentStyle(style)

    Public method to check, if a style is a comment style.

    Returns:
    flag indicating a comment style (boolean)

    LexerCSharp.isStringStyle

    isStringStyle(style)

    Public method to check, if a style is a string style.

    Returns:
    flag indicating a string style (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Graphics.PackageItem.html0000644000175000001440000000013112261331350026361 xustar000000000000000029 mtime=1388688104.83022822 30 atime=1389081085.170724358 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Graphics.PackageItem.html0000644000175000001440000001351012261331350026114 0ustar00detlevusers00000000000000 eric4.Graphics.PackageItem

    eric4.Graphics.PackageItem

    Module implementing a package item.

    Global Attributes

    None

    Classes

    PackageItem Class implementing a package item.
    PackageModel Class implementing the package model.

    Functions

    None


    PackageItem

    Class implementing a package item.

    Derived from

    UMLItem

    Class Attributes

    None

    Class Methods

    None

    Methods

    PackageItem Constructor
    __calculateSize Method to calculate the size of the package widget.
    __createTexts Private method to create the text items of the class item.
    paint Public method to paint the item in local coordinates.
    setModel Method to set the package model.

    Static Methods

    None

    PackageItem (Constructor)

    PackageItem(model = None, x = 0, y = 0, rounded = False, noModules = False, parent = None, scene = None)

    Constructor

    model
    module model containing the module data (ModuleModel)
    x
    x-coordinate (integer)
    y
    y-coordinate (integer)
    rounded
    flag indicating a rounded corner (boolean)
    noModules=
    flag indicating, that no module names should be shown (boolean)
    parent=
    reference to the parent object (QGraphicsItem)
    scene=
    reference to the scene object (QGraphicsScene)

    PackageItem.__calculateSize

    __calculateSize()

    Method to calculate the size of the package widget.

    PackageItem.__createTexts

    __createTexts()

    Private method to create the text items of the class item.

    PackageItem.paint

    paint(painter, option, widget = None)

    Public method to paint the item in local coordinates.

    painter
    reference to the painter object (QPainter)
    option
    style options (QStyleOptionGraphicsItem)
    widget
    optional reference to the widget painted on (QWidget)

    PackageItem.setModel

    setModel(model)

    Method to set the package model.

    model
    package model containing the package data (PackageModel)


    PackageModel

    Class implementing the package model.

    Derived from

    object

    Class Attributes

    None

    Class Methods

    None

    Methods

    PackageModel Constructor
    addModule Method to add a module to the package model.
    getModules Method to retrieve the modules of the package.
    getName Method to retrieve the package name.

    Static Methods

    None

    PackageModel (Constructor)

    PackageModel(name, moduleslist = [])

    Constructor

    name
    package name (string)
    moduleslist
    list of module names (list of strings)

    PackageModel.addModule

    addModule(modulename)

    Method to add a module to the package model.

    modulename
    module name to be added (string)

    PackageModel.getModules

    getModules()

    Method to retrieve the modules of the package.

    Returns:
    list of module names (list of strings)

    PackageModel.getName

    getName()

    Method to retrieve the package name.

    Returns:
    package name (string)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.eric4_doc.html0000644000175000001440000000013212261331350024304 xustar000000000000000030 mtime=1388688104.198227903 30 atime=1389081085.170724358 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.eric4_doc.html0000644000175000001440000000362612261331350024045 0ustar00detlevusers00000000000000 eric4.eric4_doc

    eric4.eric4_doc

    Eric4 Documentation Generator

    This is the main Python script of the documentation generator. It is this script that gets called via the source documentation interface. This script can be used via the commandline as well.

    Global Attributes

    supportedExtensions

    Classes

    None

    Functions

    main Main entry point into the application.
    usage Function to print some usage information.
    version Function to show the version information.


    main

    main()

    Main entry point into the application.



    usage

    usage()

    Function to print some usage information.

    It prints a reference of all commandline parameters that may be used and ends the application.



    version

    version()

    Function to show the version information.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ConfigurationPages.EditorAu0000644000175000001440000000032712261331353031261 xustar0000000000000000125 path=eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.EditorAutocompletionQScintillaPage.html 30 mtime=1388688107.462229542 30 atime=1389081085.171724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.EditorAutocompletionQSci0000644000175000001440000000542212261331353034225 0ustar00detlevusers00000000000000 eric4.Preferences.ConfigurationPages.EditorAutocompletionQScintillaPage

    eric4.Preferences.ConfigurationPages.EditorAutocompletionQScintillaPage

    Module implementing the QScintilla Autocompletion configuration page.

    Global Attributes

    None

    Classes

    EditorAutocompletionQScintillaPage Class implementing the QScintilla Autocompletion configuration page.

    Functions

    create Module function to create the configuration page.


    EditorAutocompletionQScintillaPage

    Class implementing the QScintilla Autocompletion configuration page.

    Derived from

    ConfigurationPageBase, Ui_EditorAutocompletionQScintillaPage

    Class Attributes

    None

    Class Methods

    None

    Methods

    EditorAutocompletionQScintillaPage Constructor
    save Public slot to save the Editor Autocompletion configuration.

    Static Methods

    None

    EditorAutocompletionQScintillaPage (Constructor)

    EditorAutocompletionQScintillaPage()

    Constructor

    EditorAutocompletionQScintillaPage.save

    save()

    Public slot to save the Editor Autocompletion configuration.



    create

    create(dlg)

    Module function to create the configuration page.

    dlg
    reference to the configuration dialog

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DebugClients.Python3.FlexCompleter.html0000644000175000001440000000013212261331354031140 xustar000000000000000030 mtime=1388688108.064229844 30 atime=1389081085.171724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.DebugClients.Python3.FlexCompleter.html0000644000175000001440000001577712261331354030713 0ustar00detlevusers00000000000000 eric4.DebugClients.Python3.FlexCompleter

    eric4.DebugClients.Python3.FlexCompleter

    Word completion for the eric4 shell

    NOTE for eric4 variant

    This version is a re-implementation of rlcompleter as found in the Python3 library. It is modified to work with the eric4 debug clients.

    Original rlcompleter documentation

    This requires the latest extension to the readline module. The completer completes keywords, built-ins and globals in a selectable namespace (which defaults to __main__); when completing NAME.NAME..., it evaluates (!) the expression up to the last dot and completes its attributes.

    It's very cool to do "import sys" type "sys.", hit the completion key (twice), and see the list of names defined by the sys module!

    Tip: to use the tab key as the completion key, call

    readline.parse_and_bind("tab: complete")

    Notes:

    • Exceptions raised by the completer function are *ignored* (and generally cause the completion to fail). This is a feature -- since readline sets the tty device in raw (or cbreak) mode, printing a traceback wouldn't work well without some complicated hoopla to save, reset and restore the tty state.
    • The evaluation of the NAME.NAME... form may cause arbitrary application defined code to be executed if an object with a __getattr__ hook is found. Since it is the responsibility of the application (or the user) to enable this feature, I consider this an acceptable risk. More complicated expressions (e.g. function calls or indexing operations) are *not* evaluated.
    • When the original stdin is not a tty device, GNU readline is never used, and this module (and the readline module) are silently inactive.

    Global Attributes

    __all__

    Classes

    Completer Class implementing the command line completer object.

    Functions

    get_class_members Module function to retrieve the class members.


    Completer

    Class implementing the command line completer object.

    Derived from

    object

    Class Attributes

    None

    Class Methods

    None

    Methods

    Completer Create a new completer for the command line.
    _callable_postfix Protected method to check for a callable.
    attr_matches Compute matches when text contains a dot.
    complete Return the next possible completion for 'text'.
    global_matches Compute matches when text is a simple name.

    Static Methods

    None

    Completer (Constructor)

    Completer(namespace = None)

    Create a new completer for the command line.

    Completer([namespace]) -> completer instance.

    If unspecified, the default namespace where completions are performed is __main__ (technically, __main__.__dict__). Namespaces should be given as dictionaries.

    Completer instances should be used as the completion mechanism of readline via the set_completer() call:

    readline.set_completer(Completer(my_namespace).complete)

    namespace
    The namespace for the completer.

    Completer._callable_postfix

    _callable_postfix(val, word)

    Protected method to check for a callable.

    val
    value to check (object)
    word
    word to ammend (string)
    Returns:
    ammended word (string)

    Completer.attr_matches

    attr_matches(text)

    Compute matches when text contains a dot.

    Assuming the text is of the form NAME.NAME....[NAME], and is evaluatable in self.namespace, it will be evaluated and its attributes (as revealed by dir()) are used as possible completions. (For class instances, class members are are also considered.)

    WARNING: this can still invoke arbitrary C code, if an object with a __getattr__ hook is evaluated.

    text
    The text to be completed. (string)
    Returns:
    A list of all matches.

    Completer.complete

    complete(text, state)

    Return the next possible completion for 'text'.

    This is called successively with state == 0, 1, 2, ... until it returns None. The completion should begin with 'text'.

    text
    The text to be completed. (string)
    state
    The state of the completion. (integer)
    Returns:
    The possible completions as a list of strings.

    Completer.global_matches

    global_matches(text)

    Compute matches when text is a simple name.

    text
    The text to be completed. (string)
    Returns:
    A list of all keywords, built-in functions and names currently defined in self.namespace that match.


    get_class_members

    get_class_members(klass)

    Module function to retrieve the class members.

    klass
    The class object to be analysed.
    Returns:
    A list of all names defined in the class.

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.Lexers.LexerMatlab.html0000644000175000001440000000013212261331354030160 xustar000000000000000030 mtime=1388688108.600230113 30 atime=1389081085.171724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.Lexers.LexerMatlab.html0000644000175000001440000000611212261331354027712 0ustar00detlevusers00000000000000 eric4.QScintilla.Lexers.LexerMatlab

    eric4.QScintilla.Lexers.LexerMatlab

    Module implementing a Matlab lexer with some additional methods.

    Global Attributes

    None

    Classes

    LexerMatlab Subclass to implement some additional lexer dependent methods.

    Functions

    None


    LexerMatlab

    Subclass to implement some additional lexer dependent methods.

    Derived from

    QsciLexerMatlab, Lexer

    Class Attributes

    None

    Class Methods

    None

    Methods

    LexerMatlab Constructor
    defaultKeywords Public method to get the default keywords.
    isCommentStyle Public method to check, if a style is a comment style.
    isStringStyle Public method to check, if a style is a string style.

    Static Methods

    None

    LexerMatlab (Constructor)

    LexerMatlab(parent=None)

    Constructor

    parent
    parent widget of this lexer

    LexerMatlab.defaultKeywords

    defaultKeywords(kwSet)

    Public method to get the default keywords.

    kwSet
    number of the keyword set (integer)
    Returns:
    string giving the keywords (string) or None

    LexerMatlab.isCommentStyle

    isCommentStyle(style)

    Public method to check, if a style is a comment style.

    Returns:
    flag indicating a comment style (boolean)

    LexerMatlab.isStringStyle

    isStringStyle(style)

    Public method to check, if a style is a string style.

    Returns:
    flag indicating a string style (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.VCS.CommandOptionsDialog.html0000644000175000001440000000013212261331351027156 xustar000000000000000030 mtime=1388688105.217228414 30 atime=1389081085.171724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.VCS.CommandOptionsDialog.html0000644000175000001440000000456012261331351026715 0ustar00detlevusers00000000000000 eric4.VCS.CommandOptionsDialog

    eric4.VCS.CommandOptionsDialog

    Module implementing the VCS command options dialog.

    Global Attributes

    None

    Classes

    vcsCommandOptionsDialog Class implementing the VCS command options dialog.

    Functions

    None


    vcsCommandOptionsDialog

    Class implementing the VCS command options dialog.

    Derived from

    QDialog, Ui_vcsCommandOptionsDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    vcsCommandOptionsDialog Constructor
    getOptions Public method used to retrieve the entered options.

    Static Methods

    None

    vcsCommandOptionsDialog (Constructor)

    vcsCommandOptionsDialog(vcs, parent=None)

    Constructor

    vcs
    reference to the vcs object
    parent
    parent widget (QWidget)

    vcsCommandOptionsDialog.getOptions

    getOptions()

    Public method used to retrieve the entered options.

    Returns:
    dictionary of strings giving the options for each supported vcs command

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DebugClients.Ruby.DebugQuit.html0000644000175000001440000000013112261331354027634 xustar000000000000000029 mtime=1388688108.27522995 30 atime=1389081085.171724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.DebugClients.Ruby.DebugQuit.html0000644000175000001440000000274312261331354027375 0ustar00detlevusers00000000000000 eric4.DebugClients.Ruby.DebugQuit

    eric4.DebugClients.Ruby.DebugQuit

    File implementing a debug quit exception class.

    Global Attributes

    None

    Classes

    DebugQuit Class implementing an exception to signal the end of a debugging session.

    Modules

    None

    Functions

    None


    DebugQuit

    Class implementing an exception to signal the end of a debugging session.

    Derived from

    Exception

    Class Attributes

    None

    Class Methods

    None

    Methods

    None

    Static Methods

    None

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsPySvn.ProjectHelp0000644000175000001440000000013212261331353031236 xustar000000000000000030 mtime=1388688107.165229392 30 atime=1389081085.171724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsPySvn.ProjectHelper.html0000644000175000001440000002130312261331353032261 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsPySvn.ProjectHelper

    eric4.Plugins.VcsPlugins.vcsPySvn.ProjectHelper

    Module implementing the VCS project helper for Subversion.

    Global Attributes

    None

    Classes

    SvnProjectHelper Class implementing the VCS project helper for Subversion.

    Functions

    None


    SvnProjectHelper

    Class implementing the VCS project helper for Subversion.

    Derived from

    VcsProjectHelper

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnProjectHelper Constructor
    __svnBranchList Private slot used to list the branches of the project.
    __svnChangeLists Private slot used to show a list of change lists.
    __svnConfigure Private slot to open the configuration dialog.
    __svnExtendedDiff Private slot used to perform a svn diff with the selection of revisions.
    __svnInfo Private slot used to show repository information for the local project.
    __svnLogBrowser Private slot used to browse the log of the current project.
    __svnLogLimited Private slot used to perform a svn log --limit.
    __svnPropDel Private slot used to delete a property for the project files.
    __svnPropList Private slot used to list the properties of the project files.
    __svnPropSet Private slot used to set a property for the project files.
    __svnRelocate Private slot used to relocate the working copy to a new repository URL.
    __svnRepoBrowser Private slot to open the repository browser.
    __svnResolve Private slot used to resolve conflicts of the local project.
    __svnTagList Private slot used to list the tags of the project.
    __svnUrlDiff Private slot used to perform a svn diff with the selection of repository URLs.
    getActions Public method to get a list of all actions.
    initActions Public method to generate the action objects.
    initMenu Public method to generate the VCS menu.

    Static Methods

    None

    SvnProjectHelper (Constructor)

    SvnProjectHelper(vcsObject, projectObject, parent = None, name = None)

    Constructor

    vcsObject
    reference to the vcs object
    projectObject
    reference to the project object
    parent
    parent widget (QWidget)
    name
    name of this object (string or QString)

    SvnProjectHelper.__svnBranchList

    __svnBranchList()

    Private slot used to list the branches of the project.

    SvnProjectHelper.__svnChangeLists

    __svnChangeLists()

    Private slot used to show a list of change lists.

    SvnProjectHelper.__svnConfigure

    __svnConfigure()

    Private slot to open the configuration dialog.

    SvnProjectHelper.__svnExtendedDiff

    __svnExtendedDiff()

    Private slot used to perform a svn diff with the selection of revisions.

    SvnProjectHelper.__svnInfo

    __svnInfo()

    Private slot used to show repository information for the local project.

    SvnProjectHelper.__svnLogBrowser

    __svnLogBrowser()

    Private slot used to browse the log of the current project.

    SvnProjectHelper.__svnLogLimited

    __svnLogLimited()

    Private slot used to perform a svn log --limit.

    SvnProjectHelper.__svnPropDel

    __svnPropDel()

    Private slot used to delete a property for the project files.

    SvnProjectHelper.__svnPropList

    __svnPropList()

    Private slot used to list the properties of the project files.

    SvnProjectHelper.__svnPropSet

    __svnPropSet()

    Private slot used to set a property for the project files.

    SvnProjectHelper.__svnRelocate

    __svnRelocate()

    Private slot used to relocate the working copy to a new repository URL.

    SvnProjectHelper.__svnRepoBrowser

    __svnRepoBrowser()

    Private slot to open the repository browser.

    SvnProjectHelper.__svnResolve

    __svnResolve()

    Private slot used to resolve conflicts of the local project.

    SvnProjectHelper.__svnTagList

    __svnTagList()

    Private slot used to list the tags of the project.

    SvnProjectHelper.__svnUrlDiff

    __svnUrlDiff()

    Private slot used to perform a svn diff with the selection of repository URLs.

    SvnProjectHelper.getActions

    getActions()

    Public method to get a list of all actions.

    Returns:
    list of all actions (list of E4Action)

    SvnProjectHelper.initActions

    initActions()

    Public method to generate the action objects.

    SvnProjectHelper.initMenu

    initMenu(menu)

    Public method to generate the VCS menu.

    menu
    reference to the menu to be populated (QMenu)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsPySvn.SvnChangeLi0000644000175000001440000000013212261331353031160 xustar000000000000000030 mtime=1388688107.059229339 30 atime=1389081085.172724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsPySvn.SvnChangeListsDialog.html0000644000175000001440000000747712261331353033546 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsPySvn.SvnChangeListsDialog

    eric4.Plugins.VcsPlugins.vcsPySvn.SvnChangeListsDialog

    Module implementing a dialog to browse the change lists.

    Global Attributes

    None

    Classes

    SvnChangeListsDialog Class implementing a dialog to browse the change lists.

    Functions

    None


    SvnChangeListsDialog

    Class implementing a dialog to browse the change lists.

    Derived from

    QDialog, SvnDialogMixin, Ui_SvnChangeListsDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnChangeListsDialog Constructor
    __finish Private slot called when the user pressed the button.
    on_buttonBox_clicked Private slot called by a button of the button box clicked.
    on_changeLists_currentItemChanged Private slot to handle the selection of a new item.
    start Public slot to populate the data.

    Static Methods

    None

    SvnChangeListsDialog (Constructor)

    SvnChangeListsDialog(vcs, parent=None)

    Constructor

    vcs
    reference to the vcs object
    parent
    parent widget (QWidget)

    SvnChangeListsDialog.__finish

    __finish()

    Private slot called when the user pressed the button.

    SvnChangeListsDialog.on_buttonBox_clicked

    on_buttonBox_clicked(button)

    Private slot called by a button of the button box clicked.

    button
    button that was clicked (QAbstractButton)

    SvnChangeListsDialog.on_changeLists_currentItemChanged

    on_changeLists_currentItemChanged(current, previous)

    Private slot to handle the selection of a new item.

    current
    current item (QListWidgetItem)
    previous
    previous current item (QListWidgetItem)

    SvnChangeListsDialog.start

    start(path)

    Public slot to populate the data.

    path
    directory name to show change lists for (string)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.Helpviewer.Passwords.html0000644000175000001440000000013212261331354027660 xustar000000000000000030 mtime=1388688108.660230143 30 atime=1389081085.172724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.Helpviewer.Passwords.html0000644000175000001440000000215012261331354027410 0ustar00detlevusers00000000000000 eric4.Helpviewer.Passwords

    eric4.Helpviewer.Passwords

    Package implementing the password management interface.

    Modules

    PasswordManager Module implementing the password manager.
    PasswordModel Module implementing a model for password management.
    PasswordsDialog Module implementing a dialog to show all saved logins.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ConfigurationPages.ProjectP0000644000175000001440000000013212261331353031265 xustar000000000000000030 mtime=1388688107.547229584 30 atime=1389081085.172724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.ProjectPage.html0000644000175000001440000000444212261331353032443 0ustar00detlevusers00000000000000 eric4.Preferences.ConfigurationPages.ProjectPage

    eric4.Preferences.ConfigurationPages.ProjectPage

    Module implementing the Project configuration page.

    Global Attributes

    None

    Classes

    ProjectPage Class implementing the Project configuration page.

    Functions

    create Module function to create the configuration page.


    ProjectPage

    Class implementing the Project configuration page.

    Derived from

    ConfigurationPageBase, Ui_ProjectPage

    Class Attributes

    None

    Class Methods

    None

    Methods

    ProjectPage Constructor
    save Public slot to save the Project configuration.

    Static Methods

    None

    ProjectPage (Constructor)

    ProjectPage()

    Constructor

    ProjectPage.save

    save()

    Public slot to save the Project configuration.



    create

    create(dlg)

    Module function to create the configuration page.

    dlg
    reference to the configuration dialog

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.IconEditor.cursors.cursors_rc.html0000644000175000001440000000013212261331354030376 xustar000000000000000030 mtime=1388688108.012229818 30 atime=1389081085.172724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.IconEditor.cursors.cursors_rc.html0000644000175000001440000000251412261331354030132 0ustar00detlevusers00000000000000 eric4.IconEditor.cursors.cursors_rc

    eric4.IconEditor.cursors.cursors_rc

    Global Attributes

    qt_resource_data
    qt_resource_name
    qt_resource_struct

    Classes

    None

    Functions

    qCleanupResources
    qInitResources


    qCleanupResources

    qCleanupResources()

    qInitResources

    qInitResources()
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DebugClients.Python3.DCTestResult.html0000644000175000001440000000013212261331354030714 xustar000000000000000030 mtime=1388688108.024229824 30 atime=1389081085.173724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.DebugClients.Python3.DCTestResult.html0000644000175000001440000000650212261331354030451 0ustar00detlevusers00000000000000 eric4.DebugClients.Python3.DCTestResult

    eric4.DebugClients.Python3.DCTestResult

    Module implementing a TestResult derivative for the eric4 debugger.

    Global Attributes

    None

    Classes

    DCTestResult A TestResult derivative to work with eric4's debug client.

    Functions

    None


    DCTestResult

    A TestResult derivative to work with eric4's debug client.

    For more details see unittest.py of the standard python distribution.

    Derived from

    TestResult

    Class Attributes

    None

    Class Methods

    None

    Methods

    DCTestResult Constructor
    addError Method called if a test errored.
    addFailure Method called if a test failed.
    startTest Method called at the start of a test.
    stopTest Method called at the end of a test.

    Static Methods

    None

    DCTestResult (Constructor)

    DCTestResult(parent)

    Constructor

    parent
    The parent widget.

    DCTestResult.addError

    addError(test, err)

    Method called if a test errored.

    test
    Reference to the test object
    err
    The error traceback

    DCTestResult.addFailure

    addFailure(test, err)

    Method called if a test failed.

    test
    Reference to the test object
    err
    The error traceback

    DCTestResult.startTest

    startTest(test)

    Method called at the start of a test.

    test
    Reference to the test object

    DCTestResult.stopTest

    stopTest(test)

    Method called at the end of a test.

    test
    Reference to the test object

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.E4Gui.E4ToolBarManager.html0000644000175000001440000000013212261331350026413 xustar000000000000000030 mtime=1388688104.436228022 30 atime=1389081085.173724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.E4Gui.E4ToolBarManager.html0000644000175000001440000004225512261331350026155 0ustar00detlevusers00000000000000 eric4.E4Gui.E4ToolBarManager

    eric4.E4Gui.E4ToolBarManager

    Module implementing a toolbar manager class.

    Global Attributes

    None

    Classes

    E4ToolBarManager Class implementing a toolbar manager.

    Functions

    None


    E4ToolBarManager

    Class implementing a toolbar manager.

    Derived from

    QObject

    Class Attributes

    CustomToolBarMarker
    ToolBarMarker
    VersionMarker

    Class Methods

    None

    Methods

    E4ToolBarManager Constructor
    __findAction Private method to find an action by name.
    __findDefaultToolBar Private method to find a default toolbar by name.
    __toolBarByName Private slot to get a toolbar by its object name.
    actionById Public method to get an action given its id.
    addAction Public method to add an action to be managed.
    addToolBar Public method to add a toolbar to be managed.
    categories Public method to get the list of categories.
    categoryActions Public method to get the actions belonging to a category.
    createToolBar Public method to create a custom toolbar.
    defaultToolBarActions Public method to get a default toolbar's actions given its id.
    defaultToolBars Public method to get all toolbars added with addToolBar().
    deleteToolBar Public method to remove a custom toolbar created with createToolBar().
    isDefaultToolBar Public method to check, if a toolbar was added with addToolBar().
    isWidgetAction Public method to check, if action is a widget action.
    mainWindow Public method to get the reference to the main window.
    removeAction Public method to remove an action from the manager.
    removeToolBar Public method to remove a toolbar added with addToolBar().
    removeWidgetActions Public method to remove widget actions.
    renameToolBar Public method to give a toolbar a new title.
    resetAllToolBars Public method to reset all toolbars to their default state.
    resetToolBar Public method to reset a toolbar to its default state.
    restoreState Public method to restore the state of the toolbar manager.
    saveState Public method to save the state of the toolbar manager.
    setMainWindow Public method to set the reference to the main window.
    setToolBar Public method to set the actions of a toolbar.
    setToolBars Public method to set the actions of several toolbars.
    toolBarActions Public method to get a toolbar's actions given its id.
    toolBarById Public method to get a toolbar given its id.
    toolBarWidgetAction Public method to get the toolbar for a widget action.
    toolBars Public method to get all toolbars.
    toolBarsActions Public method to get all toolbars and their actions.

    Static Methods

    None

    E4ToolBarManager (Constructor)

    E4ToolBarManager(ui = None, parent = None)

    Constructor

    ui
    reference to the user interface object (UI.UserInterface)
    parent
    reference to the parent object (QObject)

    E4ToolBarManager.__findAction

    __findAction(name)

    Private method to find an action by name.

    name
    name of the action to search for (string or QString)
    Returns:
    reference to the action (QAction)

    E4ToolBarManager.__findDefaultToolBar

    __findDefaultToolBar(name)

    Private method to find a default toolbar by name.

    name
    name of the default toolbar to search for (string or QString)
    Returns:
    reference to the default toolbar (QToolBar)

    E4ToolBarManager.__toolBarByName

    __toolBarByName(name)

    Private slot to get a toolbar by its object name.

    name
    object name of the toolbar (string or QString)
    Returns:
    reference to the toolbar (QToolBar)

    E4ToolBarManager.actionById

    actionById(aID)

    Public method to get an action given its id.

    aID
    id of the action object (integer)
    Returns:
    reference to the action (QAction)

    E4ToolBarManager.addAction

    addAction(action, category)

    Public method to add an action to be managed.

    action
    reference to the action to be managed (QAction)
    category
    category for the toolbar (QString)

    E4ToolBarManager.addToolBar

    addToolBar(toolBar, category)

    Public method to add a toolbar to be managed.

    toolBar
    reference to the toolbar to be managed (QToolBar)
    category
    category for the toolbar (QString)

    E4ToolBarManager.categories

    categories()

    Public method to get the list of categories.

    Returns:
    list of categories (list of string)

    E4ToolBarManager.categoryActions

    categoryActions(category)

    Public method to get the actions belonging to a category.

    category
    category for the toolbar (string or QString)
    Returns:
    list of actions (list of QAction)

    E4ToolBarManager.createToolBar

    createToolBar(title, name=None)

    Public method to create a custom toolbar.

    title
    title to be used for the toolbar (QString)
    name
    optional name for the new toolbar (QString)
    Returns:
    reference to the created toolbar (QToolBar)

    E4ToolBarManager.defaultToolBarActions

    defaultToolBarActions(tbID)

    Public method to get a default toolbar's actions given its id.

    tbID
    id of the default toolbar object (integer)
    Returns:
    list of actions (list of QAction)

    E4ToolBarManager.defaultToolBars

    defaultToolBars()

    Public method to get all toolbars added with addToolBar().

    Returns:
    list of all default toolbars (list of QToolBar)

    E4ToolBarManager.deleteToolBar

    deleteToolBar(toolBar)

    Public method to remove a custom toolbar created with createToolBar().

    toolBar
    reference to the toolbar to be managed (QToolBar)

    E4ToolBarManager.isDefaultToolBar

    isDefaultToolBar(toolBar)

    Public method to check, if a toolbar was added with addToolBar().

    toolBar
    reference to the toolbar to be checked (QToolBar)

    E4ToolBarManager.isWidgetAction

    isWidgetAction(action)

    Public method to check, if action is a widget action.

    action
    reference to the action to be checked (QAction)
    Returns:
    flag indicating a widget action (boolean)

    E4ToolBarManager.mainWindow

    mainWindow()

    Public method to get the reference to the main window.

    Returns:
    reference to the main window (QMainWindow)

    E4ToolBarManager.removeAction

    removeAction(action)

    Public method to remove an action from the manager.

    action
    reference to the action to be removed (QAction)

    E4ToolBarManager.removeToolBar

    removeToolBar(toolBar)

    Public method to remove a toolbar added with addToolBar().

    toolBar
    reference to the toolbar to be removed (QToolBar)

    E4ToolBarManager.removeWidgetActions

    removeWidgetActions(actions)

    Public method to remove widget actions.

    actions
    dictionary with toolbar id as key and a list of widget actions as value

    E4ToolBarManager.renameToolBar

    renameToolBar(toolBar, title)

    Public method to give a toolbar a new title.

    toolBar
    reference to the toolbar to be managed (QToolBar)
    title
    title to be used for the toolbar (QString)

    E4ToolBarManager.resetAllToolBars

    resetAllToolBars()

    Public method to reset all toolbars to their default state.

    E4ToolBarManager.resetToolBar

    resetToolBar(toolBar)

    Public method to reset a toolbar to its default state.

    toolBar
    reference to the toolbar to configure (QToolBar)

    E4ToolBarManager.restoreState

    restoreState(state, version = 0)

    Public method to restore the state of the toolbar manager.

    state
    byte array containing the saved state (QByteArray)
    version
    version number stored with the data (integer)
    Returns:
    flag indicating success (boolean)

    E4ToolBarManager.saveState

    saveState(version = 0)

    Public method to save the state of the toolbar manager.

    version
    version number stored with the data (integer)
    Returns:
    saved state as a byte array (QByteArray)

    E4ToolBarManager.setMainWindow

    setMainWindow(mainWindow)

    Public method to set the reference to the main window.

    mainWindow
    reference to the main window (QMainWindow)

    E4ToolBarManager.setToolBar

    setToolBar(toolBar, actions)

    Public method to set the actions of a toolbar.

    toolBar
    reference to the toolbar to configure (QToolBar)
    actions
    list of actions to be set (list of QAction)

    E4ToolBarManager.setToolBars

    setToolBars(toolBars)

    Public method to set the actions of several toolbars.

    toolBars
    dictionary with toolbar id as key and a list of actions as value

    E4ToolBarManager.toolBarActions

    toolBarActions(tbID)

    Public method to get a toolbar's actions given its id.

    tbID
    id of the toolbar object (integer)
    Returns:
    list of actions (list of QAction)

    E4ToolBarManager.toolBarById

    toolBarById(tbID)

    Public method to get a toolbar given its id.

    tbID
    id of the toolbar object (integer)
    Returns:
    reference to the toolbar (QToolBar)

    E4ToolBarManager.toolBarWidgetAction

    toolBarWidgetAction(action)

    Public method to get the toolbar for a widget action.

    action
    widget action to check for (QAction)
    Returns:
    reference to the toolbar containing action (QToolBar)

    E4ToolBarManager.toolBars

    toolBars()

    Public method to get all toolbars.

    Returns:
    list of all toolbars (list of QToolBar)

    E4ToolBarManager.toolBarsActions

    toolBarsActions()

    Public method to get all toolbars and their actions.

    Returns:
    reference to dictionary of toolbar IDs as key and list of actions as values

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DebugClients.Python3.DebugClientThreads0000644000175000001440000000013212261331354031124 xustar000000000000000030 mtime=1388688108.030229827 30 atime=1389081085.173724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.DebugClients.Python3.DebugClientThreads.html0000644000175000001440000001534012261331354031624 0ustar00detlevusers00000000000000 eric4.DebugClients.Python3.DebugClientThreads

    eric4.DebugClients.Python3.DebugClientThreads

    Module implementing the multithreaded version of the debug client.

    Global Attributes

    _original_start_thread

    Classes

    DebugClientThreads Class implementing the client side of the debugger.

    Functions

    _debugclient_start_new_thread Module function used to allow for debugging of multiple threads.


    DebugClientThreads

    Class implementing the client side of the debugger.

    This variant of the debugger implements a threaded debugger client by subclassing all relevant base classes.

    Derived from

    DebugClientBase.DebugClientBase, AsyncIO

    Class Attributes

    debugClient

    Class Methods

    None

    Methods

    DebugClientThreads Constructor
    attachThread Public method to setup a thread for DebugClient to debug.
    eventLoop Public method implementing our event loop.
    lockClient Public method to acquire the lock for this client.
    setCurrentThread Private method to set the current thread.
    set_quit Private method to do a 'set quit' on all threads.
    threadTerminated Public method called when a DebugThread has exited.
    unlockClient Public method to release the lock for this client.

    Static Methods

    None

    DebugClientThreads (Constructor)

    DebugClientThreads()

    Constructor

    DebugClientThreads.attachThread

    attachThread(target = None, args = None, kwargs = None, mainThread = False)

    Public method to setup a thread for DebugClient to debug.

    If mainThread is non-zero, then we are attaching to the already started mainthread of the app and the rest of the args are ignored.

    target
    the start function of the target thread (i.e. the user code)
    args
    arguments to pass to target
    kwargs
    keyword arguments to pass to target
    mainThread
    True, if we are attaching to the already started mainthread of the app
    Returns:
    identifier of the created thread

    DebugClientThreads.eventLoop

    eventLoop(disablePolling = False)

    Public method implementing our event loop.

    disablePolling
    flag indicating to enter an event loop with polling disabled (boolean)

    DebugClientThreads.lockClient

    lockClient(blocking = True)

    Public method to acquire the lock for this client.

    blocking
    flag to indicating a blocking lock
    Returns:
    flag indicating successful locking

    DebugClientThreads.setCurrentThread

    setCurrentThread(id)

    Private method to set the current thread.

    id
    the id the current thread should be set to.

    DebugClientThreads.set_quit

    set_quit()

    Private method to do a 'set quit' on all threads.

    DebugClientThreads.threadTerminated

    threadTerminated(dbgThread)

    Public method called when a DebugThread has exited.

    dbgThread
    the DebugThread that has exited

    DebugClientThreads.unlockClient

    unlockClient()

    Public method to release the lock for this client.



    _debugclient_start_new_thread

    _debugclient_start_new_thread(target, args, kwargs = {})

    Module function used to allow for debugging of multiple threads.

    The way it works is that below, we reset _thread._start_new_thread to this function object. Thus, providing a hook for us to see when threads are started. From here we forward the request onto the DebugClient which will create a DebugThread object to allow tracing of the thread then start up the thread. These actions are always performed in order to allow dropping into debug mode.

    See DebugClientThreads.attachThread and DebugThread.DebugThread in DebugThread.py

    target
    the start function of the target thread (i.e. the user code)
    args
    arguments to pass to target
    kwargs
    keyword arguments to pass to target
    Returns:
    The identifier of the created thread

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.MultiProject.MultiProjectBrowser.html0000644000175000001440000000013212261331351031057 xustar000000000000000030 mtime=1388688105.159228385 30 atime=1389081085.173724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.MultiProject.MultiProjectBrowser.html0000644000175000001440000002153412261331351030616 0ustar00detlevusers00000000000000 eric4.MultiProject.MultiProjectBrowser

    eric4.MultiProject.MultiProjectBrowser

    Module implementing the multi project browser.

    Global Attributes

    None

    Classes

    MultiProjectBrowser Class implementing the multi project browser.

    Functions

    None


    MultiProjectBrowser

    Class implementing the multi project browser.

    Derived from

    QListWidget

    Class Attributes

    None

    Class Methods

    None

    Methods

    MultiProjectBrowser Constructor
    __addProject Private method to add a project to the list.
    __configure Private method to open the configuration dialog.
    __contextMenuRequested Private slot to show the context menu.
    __createPopupMenu Private method to create the popup menu.
    __findProjectItem Private method to search a specific project item.
    __multiProjectClosed Private slot to handle the closing of a multi project.
    __multiProjectOpened Private slot to handle the opening of a multi project.
    __newMultiProject Private slot to handle the creation of a new multi project.
    __openItem Private slot to open a project.
    __projectAdded Private slot to handle the addition of a project to the multi project.
    __projectDataChanged Private slot to handle the change of a project of the multi project.
    __projectOpened Private slot to handle the opening of a project.
    __projectRemoved Private slot to handle the removal of a project from the multi project.
    __removeProject Private method to handle the Remove context menu entry.
    __setItemData Private method to set the data of a project item.
    __showProjectProperties Private method to show the data of a project entry.

    Static Methods

    None

    MultiProjectBrowser (Constructor)

    MultiProjectBrowser(multiProject, parent = None)

    Constructor

    project
    reference to the multi project object
    parent
    parent widget (QWidget)

    MultiProjectBrowser.__addProject

    __addProject(project)

    Private method to add a project to the list.

    project
    reference to the project data dictionary

    MultiProjectBrowser.__configure

    __configure()

    Private method to open the configuration dialog.

    MultiProjectBrowser.__contextMenuRequested

    __contextMenuRequested(coord)

    Private slot to show the context menu.

    coord
    the position of the mouse pointer (QPoint)

    MultiProjectBrowser.__createPopupMenu

    __createPopupMenu()

    Private method to create the popup menu.

    MultiProjectBrowser.__findProjectItem

    __findProjectItem(project)

    Private method to search a specific project item.

    project
    reference to the project data dictionary

    MultiProjectBrowser.__multiProjectClosed

    __multiProjectClosed()

    Private slot to handle the closing of a multi project.

    MultiProjectBrowser.__multiProjectOpened

    __multiProjectOpened()

    Private slot to handle the opening of a multi project.

    MultiProjectBrowser.__newMultiProject

    __newMultiProject()

    Private slot to handle the creation of a new multi project.

    MultiProjectBrowser.__openItem

    __openItem(itm = None)

    Private slot to open a project.

    itm
    reference to the project item to be opened (QListWidgetItem)

    MultiProjectBrowser.__projectAdded

    __projectAdded(project)

    Private slot to handle the addition of a project to the multi project.

    project
    reference to the project data dictionary

    MultiProjectBrowser.__projectDataChanged

    __projectDataChanged(project)

    Private slot to handle the change of a project of the multi project.

    project
    reference to the project data dictionary

    MultiProjectBrowser.__projectOpened

    __projectOpened(projectfile)

    Private slot to handle the opening of a project.

    MultiProjectBrowser.__projectRemoved

    __projectRemoved(project)

    Private slot to handle the removal of a project from the multi project.

    project
    reference to the project data dictionary

    MultiProjectBrowser.__removeProject

    __removeProject()

    Private method to handle the Remove context menu entry.

    MultiProjectBrowser.__setItemData

    __setItemData(itm, project)

    Private method to set the data of a project item.

    itm
    reference to the item to be set (QListWidgetItem)
    project
    reference to the project data dictionary

    MultiProjectBrowser.__showProjectProperties

    __showProjectProperties()

    Private method to show the data of a project entry.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Project.ProjectBrowser.html0000644000175000001440000000013212261331351027031 xustar000000000000000030 mtime=1388688105.748228681 30 atime=1389081085.173724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Project.ProjectBrowser.html0000644000175000001440000002010412261331351026560 0ustar00detlevusers00000000000000 eric4.Project.ProjectBrowser

    eric4.Project.ProjectBrowser

    Module implementing the project browser part of the eric4 UI.

    Global Attributes

    None

    Classes

    ProjectBrowser Class implementing the project browser part of the eric4 UI.

    Functions

    None


    ProjectBrowser

    Class implementing the project browser part of the eric4 UI.

    It generates a widget with up to seven tabs. The individual tabs contain the project sources browser, the project forms browser, the project resources browser, the project translations browser, the project interfaces (IDL) browser and a browser for stuff, that doesn't fit these categories. Optionally it contains an additional tab with the file system browser.

    Derived from

    E4TabWidget

    Class Attributes

    None

    Class Methods

    None

    Methods

    ProjectBrowser Constructor
    __currentChanged Private slot to handle the currentChanged(int) signal.
    __newProject Private slot to handle the newProject signal.
    __projectClosed Private slot to handle the projectClosed signal.
    __projectOpened Private slot to handle the projectOpened signal.
    __projectPropertiesChanged Private slot to handle the projectPropertiesChanged signal.
    __setBrowsersAvailable Private method to add selected browsers to the project browser
    __setSourcesIcon Private method to set the right icon for the sources browser tab.
    __vcsStateChanged Private slot to handle a change in the vcs state.
    getProjectBrowser Public method to get a reference to the named project browser.
    getProjectBrowsers Public method to get references to the individual project browsers.
    handleEditorChanged Public slot to handle the editorChanged signal.
    handlePreferencesChanged Public slot used to handle the preferencesChanged signal.
    showEvent Protected method handleing the show event.

    Static Methods

    None

    ProjectBrowser (Constructor)

    ProjectBrowser(project, parent = None, embeddedBrowser = True)

    Constructor

    project
    reference to the project object
    parent
    parent widget (QWidget)
    embeddedBrowser
    flag indicating whether the file browser should be included. This flag is set to False by those layouts, that have the file browser in a separate window or embedded in the debeug browser instead

    ProjectBrowser.__currentChanged

    __currentChanged(index)

    Private slot to handle the currentChanged(int) signal.

    ProjectBrowser.__newProject

    __newProject()

    Private slot to handle the newProject signal.

    ProjectBrowser.__projectClosed

    __projectClosed()

    Private slot to handle the projectClosed signal.

    ProjectBrowser.__projectOpened

    __projectOpened()

    Private slot to handle the projectOpened signal.

    ProjectBrowser.__projectPropertiesChanged

    __projectPropertiesChanged()

    Private slot to handle the projectPropertiesChanged signal.

    ProjectBrowser.__setBrowsersAvailable

    __setBrowsersAvailable(browserFlags)

    Private method to add selected browsers to the project browser

    browserFlags
    flags indicating the browsers to add (integer)

    ProjectBrowser.__setSourcesIcon

    __setSourcesIcon()

    Private method to set the right icon for the sources browser tab.

    ProjectBrowser.__vcsStateChanged

    __vcsStateChanged(state)

    Private slot to handle a change in the vcs state.

    state
    new vcs state (string)

    ProjectBrowser.getProjectBrowser

    getProjectBrowser(name)

    Public method to get a reference to the named project browser.

    name
    name of the requested project browser (string). Valid names are "sources, forms, resources, translations, interfaces, others".
    Returns:
    reference to the requested browser or None

    ProjectBrowser.getProjectBrowsers

    getProjectBrowsers()

    Public method to get references to the individual project browsers.

    Returns:
    list of references to project browsers

    ProjectBrowser.handleEditorChanged

    handleEditorChanged(fn)

    Public slot to handle the editorChanged signal.

    fn
    The filename of the saved files. (string or QString)

    ProjectBrowser.handlePreferencesChanged

    handlePreferencesChanged()

    Public slot used to handle the preferencesChanged signal.

    ProjectBrowser.showEvent

    showEvent(evt)

    Protected method handleing the show event.

    evt
    show event to handle (QShowEvent)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DebugClients.Python.DebugBase.html0000644000175000001440000000013212261331354030125 xustar000000000000000030 mtime=1388688108.181229902 30 atime=1389081085.173724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.DebugClients.Python.DebugBase.html0000644000175000001440000004603412261331354027666 0ustar00detlevusers00000000000000 eric4.DebugClients.Python.DebugBase

    eric4.DebugClients.Python.DebugBase

    Module implementing the debug base class.

    Global Attributes

    gRecursionLimit

    Classes

    DebugBase Class implementing base class of the debugger.

    Functions

    printerr Module function used for debugging the debug client.
    setRecursionLimit Module function to set the recursion limit.


    DebugBase

    Class implementing base class of the debugger.

    Provides simple wrapper methods around bdb for the 'owning' client to call to step etc.

    Derived from

    bdb.Bdb

    Class Attributes

    None

    Class Methods

    None

    Methods

    DebugBase Constructor
    __do_clear Private method called to clear a temporary breakpoint.
    __do_clearWatch Private method called to clear a temporary watch expression.
    __effective Private method to determine, if a watch expression is effective.
    __extract_stack Private member to return a list of stack frames.
    __skip_it Private method to filter out debugger files.
    break_anywhere Reimplemented from bdb.py to do some special things.
    break_here Reimplemented from bdb.py to fix the filename from the frame.
    clear_watch Public method to clear a watch expression.
    dispatch_exception Reimplemented from bdb.py to always call user_exception.
    dispatch_line Reimplemented from bdb.py to do some special things.
    dispatch_return Reimplemented from bdb.py to handle passive mode cleanly.
    fix_frame_filename Public method used to fixup the filename for a given frame.
    getCurrentFrame Public method to return the current frame.
    getCurrentFrameLocals Public method to return the locals dictionary of the current frame.
    getEvent Public method to return the last debugger event.
    getStack Public method to get the stack.
    get_break Reimplemented from bdb.py to get the first breakpoint of a particular line.
    get_watch Public method to get a watch expression.
    go Public method to resume the thread.
    isBroken Public method to return the broken state of the debugger.
    profile Public method used to trace some stuff independent of the debugger trace function.
    setRecursionDepth Public method to determine the current recursion depth.
    set_continue Reimplemented from bdb.py to always get informed of exceptions.
    set_quit Public method to quit.
    set_trace Overridden method of bdb.py to do some special setup.
    set_watch Public method to set a watch expression.
    step Public method to perform a step operation in this thread.
    stepOut Public method to perform a step out of the current call.
    stop_here Reimplemented to filter out debugger files.
    trace_dispatch Reimplemented from bdb.py to do some special things.
    user_exception Reimplemented to report an exception to the debug server.
    user_line Reimplemented to handle the program about to execute a particular line.
    user_return Reimplemented to report program termination to the debug server.

    Static Methods

    None

    DebugBase (Constructor)

    DebugBase(dbgClient)

    Constructor

    dbgClient
    the owning client

    DebugBase.__do_clear

    __do_clear(filename, lineno)

    Private method called to clear a temporary breakpoint.

    filename
    name of the file the bp belongs to
    lineno
    linenumber of the bp

    DebugBase.__do_clearWatch

    __do_clearWatch(cond)

    Private method called to clear a temporary watch expression.

    cond
    expression of the watch expression to be cleared (string)

    DebugBase.__effective

    __effective(frame)

    Private method to determine, if a watch expression is effective.

    frame
    the current execution frame
    Returns:
    tuple of watch expression and a flag to indicate, that a temporary watch expression may be deleted (bdb.Breakpoint, boolean)

    DebugBase.__extract_stack

    __extract_stack(exctb)

    Private member to return a list of stack frames.

    exctb
    exception traceback
    Returns:
    list of stack frames

    DebugBase.__skip_it

    __skip_it(frame)

    Private method to filter out debugger files.

    Tracing is turned off for files that are part of the debugger that are called from the application being debugged.

    frame
    the frame object
    Returns:
    flag indicating whether the debugger should skip this frame

    DebugBase.break_anywhere

    break_anywhere(frame)

    Reimplemented from bdb.py to do some special things.

    These speciality is to fix the filename from the frame (see fix_frame_filename for more info).

    frame
    the frame object
    Returns:
    flag indicating the break status (boolean)

    DebugBase.break_here

    break_here(frame)

    Reimplemented from bdb.py to fix the filename from the frame.

    See fix_frame_filename for more info.

    frame
    the frame object
    Returns:
    flag indicating the break status (boolean)

    DebugBase.clear_watch

    clear_watch(cond)

    Public method to clear a watch expression.

    cond
    expression of the watch expression to be cleared (string)

    DebugBase.dispatch_exception

    dispatch_exception(frame, arg)

    Reimplemented from bdb.py to always call user_exception.

    frame
    The current stack frame.
    arg
    The arguments
    Returns:
    local trace function

    DebugBase.dispatch_line

    dispatch_line(frame)

    Reimplemented from bdb.py to do some special things.

    This speciality is to check the connection to the debug server for new events (i.e. new breakpoints) while we are going through the code.

    frame
    The current stack frame.
    Returns:
    local trace function

    DebugBase.dispatch_return

    dispatch_return(frame, arg)

    Reimplemented from bdb.py to handle passive mode cleanly.

    frame
    The current stack frame.
    arg
    The arguments
    Returns:
    local trace function

    DebugBase.fix_frame_filename

    fix_frame_filename(frame)

    Public method used to fixup the filename for a given frame.

    The logic employed here is that if a module was loaded from a .pyc file, then the correct .py to operate with should be in the same path as the .pyc. The reason this logic is needed is that when a .pyc file is generated, the filename embedded and thus what is readable in the code object of the frame object is the fully qualified filepath when the pyc is generated. If files are moved from machine to machine this can break debugging as the .pyc will refer to the .py on the original machine. Another case might be sharing code over a network... This logic deals with that.

    frame
    the frame object

    DebugBase.getCurrentFrame

    getCurrentFrame()

    Public method to return the current frame.

    Returns:
    the current frame

    DebugBase.getCurrentFrameLocals

    getCurrentFrameLocals()

    Public method to return the locals dictionary of the current frame.

    Returns:
    locals dictionary of the current frame

    DebugBase.getEvent

    getEvent()

    Public method to return the last debugger event.

    Returns:
    last debugger event (string)

    DebugBase.getStack

    getStack()

    Public method to get the stack.

    Returns:
    list of lists with file name (string), line number (integer) and function name (string)

    DebugBase.get_break

    get_break(filename, lineno)

    Reimplemented from bdb.py to get the first breakpoint of a particular line.

    Because eric4 supports only one breakpoint per line, this overwritten method will return this one and only breakpoint.

    filename
    the filename of the bp to retrieve (string)
    ineno
    the linenumber of the bp to retrieve (integer)
    Returns:
    breakpoint or None, if there is no bp

    DebugBase.get_watch

    get_watch(cond)

    Public method to get a watch expression.

    cond
    expression of the watch expression to be cleared (string)

    DebugBase.go

    go(special)

    Public method to resume the thread.

    It resumes the thread stopping only at breakpoints or exceptions.

    special
    flag indicating a special continue operation

    DebugBase.isBroken

    isBroken()

    Public method to return the broken state of the debugger.

    Returns:
    flag indicating the broken state (boolean)

    DebugBase.profile

    profile(frame, event, arg)

    Public method used to trace some stuff independent of the debugger trace function.

    frame
    The current stack frame.
    event
    The trace event (string)
    arg
    The arguments

    DebugBase.setRecursionDepth

    setRecursionDepth(frame)

    Public method to determine the current recursion depth.

    frame
    The current stack frame.

    DebugBase.set_continue

    set_continue(special)

    Reimplemented from bdb.py to always get informed of exceptions.

    special
    flag indicating a special continue operation

    DebugBase.set_quit

    set_quit()

    Public method to quit.

    It wraps call to bdb to clear the current frame properly.

    DebugBase.set_trace

    set_trace(frame = None)

    Overridden method of bdb.py to do some special setup.

    frame
    frame to start debugging from

    DebugBase.set_watch

    set_watch(cond, temporary=0)

    Public method to set a watch expression.

    cond
    expression of the watch expression (string)
    temporary
    flag indicating a temporary watch expression (boolean)

    DebugBase.step

    step(traceMode)

    Public method to perform a step operation in this thread.

    traceMode
    If it is non-zero, then the step is a step into, otherwise it is a step over.

    DebugBase.stepOut

    stepOut()

    Public method to perform a step out of the current call.

    DebugBase.stop_here

    stop_here(frame)

    Reimplemented to filter out debugger files.

    Tracing is turned off for files that are part of the debugger that are called from the application being debugged.

    frame
    the frame object
    Returns:
    flag indicating whether the debugger should stop here

    DebugBase.trace_dispatch

    trace_dispatch(frame, event, arg)

    Reimplemented from bdb.py to do some special things.

    This specialty is to check the connection to the debug server for new events (i.e. new breakpoints) while we are going through the code.

    frame
    The current stack frame.
    event
    The trace event (string)
    arg
    The arguments
    Returns:
    local trace function

    DebugBase.user_exception

    user_exception(frame, (exctype, excval, exctb), unhandled=0)

    Reimplemented to report an exception to the debug server.

    frame
    the frame object
    exctype
    the type of the exception
    excval
    data about the exception
    exctb
    traceback for the exception
    unhandled
    flag indicating an uncaught exception

    DebugBase.user_line

    user_line(frame)

    Reimplemented to handle the program about to execute a particular line.

    frame
    the frame object

    DebugBase.user_return

    user_return(frame, retval)

    Reimplemented to report program termination to the debug server.

    frame
    the frame object
    retval
    the return value of the program


    printerr

    printerr(s)

    Module function used for debugging the debug client.

    s
    data to be printed


    setRecursionLimit

    setRecursionLimit(limit)

    Module function to set the recursion limit.

    limit
    recursion limit (integer)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.KdeQt.KQFontDialog.html0000644000175000001440000000013212261331351025743 xustar000000000000000030 mtime=1388688105.517228565 30 atime=1389081085.174724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.KdeQt.KQFontDialog.html0000644000175000001440000000437212261331351025503 0ustar00detlevusers00000000000000 eric4.KdeQt.KQFontDialog

    eric4.KdeQt.KQFontDialog

    Compatibility module to use the KDE Font Dialog instead of the Qt Font Dialog.

    Global Attributes

    __qtGetFont

    Classes

    None

    Functions

    __kdeGetFont Public function to pop up a modal dialog to select a font.
    getFont Public function to pop up a modal dialog to select a font.


    __kdeGetFont

    __kdeGetFont(initial, parent = None)

    Public function to pop up a modal dialog to select a font.

    initial
    initial font to select (QFont)
    parent
    parent widget of the dialog (QWidget)
    Returns:
    the selected font or the initial font, if the user canceled the dialog (QFont) and a flag indicating the user selection of the OK button (boolean)


    getFont

    getFont(initial, parent = None)

    Public function to pop up a modal dialog to select a font.

    initial
    initial font to select (QFont)
    parent
    parent widget of the dialog (QWidget)
    Returns:
    the selected font or the initial font, if the user canceled the dialog (QFont) and a flag indicating the user selection of the OK button (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.E4Graphics.E4ArrowItem.html0000644000175000001440000000013112261331350026502 xustar000000000000000029 mtime=1388688104.88922825 30 atime=1389081085.174724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.E4Graphics.E4ArrowItem.html0000644000175000001440000001142112261331350026234 0ustar00detlevusers00000000000000 eric4.E4Graphics.E4ArrowItem

    eric4.E4Graphics.E4ArrowItem

    Module implementing a graphics item subclass for an arrow.

    Global Attributes

    ArrowheadAngleFactor
    NormalArrow
    WideArrow

    Classes

    E4ArrowItem Class implementing an arrow graphics item subclass.

    Functions

    None


    E4ArrowItem

    Class implementing an arrow graphics item subclass.

    Derived from

    QAbstractGraphicsShapeItem

    Class Attributes

    None

    Class Methods

    None

    Methods

    E4ArrowItem Constructor
    boundingRect Public method to return the bounding rectangle.
    paint Public method to paint the item in local coordinates.
    setEndPoint Public method to set the end point.
    setPoints Public method to set the start and end points of the line.
    setStartPoint Public method to set the start point.

    Static Methods

    None

    E4ArrowItem (Constructor)

    E4ArrowItem(origin = QPointF(), end = QPointF(), filled = False, type = NormalArrow, parent = None)

    Constructor

    origin
    origin of the arrow (QPointF)
    end
    end point of the arrow (QPointF)
    filled
    flag indicating a filled arrow head (boolean)
    type
    arrow type (NormalArrow, WideArrow)
    parent=
    reference to the parent object (QGraphicsItem)

    E4ArrowItem.boundingRect

    boundingRect()

    Public method to return the bounding rectangle.

    Returns:
    bounding rectangle (QRectF)

    E4ArrowItem.paint

    paint(painter, option, widget = None)

    Public method to paint the item in local coordinates.

    painter
    reference to the painter object (QPainter)
    option
    style options (QStyleOptionGraphicsItem)
    widget
    optional reference to the widget painted on (QWidget)

    E4ArrowItem.setEndPoint

    setEndPoint(x, y)

    Public method to set the end point.

    Note: This method does not redraw the item.

    x
    x-coordinate of the end point (float)
    y
    y-coordinate of the end point (float)

    E4ArrowItem.setPoints

    setPoints(xa, ya, xb, yb)

    Public method to set the start and end points of the line.

    Note: This method does not redraw the item.

    xa
    x-coordinate of the start point (float)
    ya
    y-coordinate of the start point (float)
    xb
    x-coordinate of the end point (float)
    yb
    y-coordinate of the end point (float)

    E4ArrowItem.setStartPoint

    setStartPoint(x, y)

    Public method to set the start point.

    Note: This method does not redraw the item.

    x
    x-coordinate of the start point (float)
    y
    y-coordinate of the start point (float)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DebugClients.Python3.DebugClient.html0000644000175000001440000000013212261331354030554 xustar000000000000000030 mtime=1388688108.139229881 30 atime=1389081085.174724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.DebugClients.Python3.DebugClient.html0000644000175000001440000000346112261331354030312 0ustar00detlevusers00000000000000 eric4.DebugClients.Python3.DebugClient

    eric4.DebugClients.Python3.DebugClient

    Module implementing a non-threaded variant of the debug client.

    Global Attributes

    None

    Classes

    DebugClient Class implementing the client side of the debugger.

    Functions

    None


    DebugClient

    Class implementing the client side of the debugger.

    This variant of the debugger implements the standard debugger client by subclassing all relevant base classes.

    Derived from

    DebugClientBase.DebugClientBase, AsyncIO, DebugBase

    Class Attributes

    debugClient

    Class Methods

    None

    Methods

    DebugClient Constructor

    Static Methods

    None

    DebugClient (Constructor)

    DebugClient()

    Constructor


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.Bookmarks.BookmarksModel.htm0000644000175000001440000000013212261331353031251 xustar000000000000000030 mtime=1388688107.913229768 30 atime=1389081085.174724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.Bookmarks.BookmarksModel.html0000644000175000001440000003005212261331353031157 0ustar00detlevusers00000000000000 eric4.Helpviewer.Bookmarks.BookmarksModel

    eric4.Helpviewer.Bookmarks.BookmarksModel

    Module implementing the bookmark model class.

    Global Attributes

    None

    Classes

    BookmarksModel Class implementing the bookmark model.

    Functions

    None


    BookmarksModel

    Class implementing the bookmark model.

    Derived from

    QAbstractItemModel

    Class Attributes

    MIMETYPE
    SeparatorRole
    TypeRole
    UrlRole
    UrlStringRole

    Class Methods

    None

    Methods

    BookmarksModel Constructor
    bookmarksManager Public method to get a reference to the bookmarks manager.
    columnCount Public method to get the number of columns.
    data Public method to get data from the model.
    dropMimeData Public method to accept the mime data of a drop action.
    entryAdded Public slot to add a bookmark node.
    entryChanged Public method to change a node.
    entryRemoved Public slot to remove a bookmark node.
    flags Public method to get flags for a node cell.
    hasChildren Public method to check, if a parent node has some children.
    headerData Public method to get the header data.
    index Public method to get a model index for a node cell.
    mimeData Public method to return the mime data.
    mimeTypes Public method to report the supported mime types.
    node Public method to get a bookmark node given its index.
    nodeIndex Public method to get a model index.
    parent Public method to get the index of the parent node.
    removeRows Public method to remove bookmarks from the model.
    rowCount Public method to determine the number of rows.
    setData Public method to set the data of a node cell.
    supportedDropActions Public method to report the supported drop actions.

    Static Methods

    None

    BookmarksModel (Constructor)

    BookmarksModel(manager, parent = None)

    Constructor

    manager
    reference to the bookmark manager object (BookmarksManager)
    parent
    reference to the parent object (QObject)

    BookmarksModel.bookmarksManager

    bookmarksManager()

    Public method to get a reference to the bookmarks manager.

    Returns:
    reference to the bookmarks manager object (BookmarksManager)

    BookmarksModel.columnCount

    columnCount(parent = QModelIndex())

    Public method to get the number of columns.

    parent
    index of parent (QModelIndex)
    Returns:
    number of columns (integer)

    BookmarksModel.data

    data(index, role = Qt.DisplayRole)

    Public method to get data from the model.

    index
    index of bookmark to get data for (QModelIndex)
    role
    data role (integer)
    Returns:
    bookmark data (QVariant)

    BookmarksModel.dropMimeData

    dropMimeData(data, action, row, column, parent)

    Public method to accept the mime data of a drop action.

    data
    reference to the mime data (QMimeData)
    action
    drop action requested (Qt.DropAction)
    row
    row number (integer)
    column
    column number (integer)
    parent
    index of the parent node (QModelIndex)
    Returns:
    flag indicating successful acceptance of the data (boolean)

    BookmarksModel.entryAdded

    entryAdded(node)

    Public slot to add a bookmark node.

    node
    reference to the bookmark node to add (BookmarkNode)

    BookmarksModel.entryChanged

    entryChanged(node)

    Public method to change a node.

    node
    reference to the bookmark node to change (BookmarkNode)

    BookmarksModel.entryRemoved

    entryRemoved(parent, row, node)

    Public slot to remove a bookmark node.

    parent
    reference to the parent bookmark node (BookmarkNode)
    row
    row number of the node (integer)
    node
    reference to the bookmark node to remove (BookmarkNode)

    BookmarksModel.flags

    flags(index)

    Public method to get flags for a node cell.

    index
    index of the node cell (QModelIndex)
    Returns:
    flags (Qt.ItemFlags)

    BookmarksModel.hasChildren

    hasChildren(parent = QModelIndex())

    Public method to check, if a parent node has some children.

    parent
    index of the parent node (QModelIndex)
    Returns:
    flag indicating the presence of children (boolean)

    BookmarksModel.headerData

    headerData(section, orientation, role = Qt.DisplayRole)

    Public method to get the header data.

    section
    section number (integer)
    orientation
    header orientation (Qt.Orientation)
    role
    data role (integer)
    Returns:
    header data (QVariant)

    BookmarksModel.index

    index(row, column, parent = QModelIndex())

    Public method to get a model index for a node cell.

    row
    row number (integer)
    column
    column number (integer)
    parent
    index of the parent (QModelIndex)
    Returns:
    index (QModelIndex)

    BookmarksModel.mimeData

    mimeData(indexes)

    Public method to return the mime data.

    indexes
    list of indexes (QModelIndexList)
    Returns:
    mime data (QMimeData)

    BookmarksModel.mimeTypes

    mimeTypes()

    Public method to report the supported mime types.

    Returns:
    supported mime types (QStringList)

    BookmarksModel.node

    node(index)

    Public method to get a bookmark node given its index.

    index
    index of the node (QModelIndex)
    Returns:
    bookmark node (BookmarkNode)

    BookmarksModel.nodeIndex

    nodeIndex(node)

    Public method to get a model index.

    node
    reference to the node to get the index for (BookmarkNode)
    Returns:
    model index (QModelIndex)

    BookmarksModel.parent

    parent(index = QModelIndex())

    Public method to get the index of the parent node.

    index
    index of the child node (QModelIndex)
    Returns:
    index of the parent node (QModelIndex)

    BookmarksModel.removeRows

    removeRows(row, count, parent = QModelIndex())

    Public method to remove bookmarks from the model.

    row
    row of the first bookmark to remove (integer)
    count
    number of bookmarks to remove (integer)
    index
    of the parent bookmark node (QModelIndex)
    Returns:
    flag indicating successful removal (boolean)

    BookmarksModel.rowCount

    rowCount(parent = QModelIndex())

    Public method to determine the number of rows.

    parent
    index of parent (QModelIndex)
    Returns:
    number of rows (integer)

    BookmarksModel.setData

    setData(index, value, role = Qt.EditRole)

    Public method to set the data of a node cell.

    index
    index of the node cell (QModelIndex)
    value
    value to be set (QVariant)
    role
    role of the data (integer)
    Returns:
    flag indicating success (boolean)

    BookmarksModel.supportedDropActions

    supportedDropActions()

    Public method to report the supported drop actions.

    Returns:
    supported drop actions (Qt.DropAction)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Debugger.DebuggerInterfaceNone.html0000644000175000001440000000013212261331350030361 xustar000000000000000030 mtime=1388688104.788228199 30 atime=1389081085.174724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Debugger.DebuggerInterfaceNone.html0000644000175000001440000006000312261331350030112 0ustar00detlevusers00000000000000 eric4.Debugger.DebuggerInterfaceNone

    eric4.Debugger.DebuggerInterfaceNone

    Module implementing a dummy debugger interface for the debug server.

    Global Attributes

    ClientDefaultCapabilities
    ClientTypeAssociations

    Classes

    DebuggerInterfaceNone Class implementing a dummy debugger interface for the debug server.

    Functions

    getRegistryData Module functionto get characterising data for the debugger interface.


    DebuggerInterfaceNone

    Class implementing a dummy debugger interface for the debug server.

    Derived from

    QObject

    Class Attributes

    None

    Class Methods

    None

    Methods

    DebuggerInterfaceNone Constructor
    flush Public slot to flush the queue.
    getClientCapabilities Public method to retrieve the debug clients capabilities.
    isConnected Public method to test, if a debug client has connected.
    newConnection Public slot to handle a new connection.
    remoteBanner Public slot to get the banner info of the remote client.
    remoteBreakpoint Public method to set or clear a breakpoint.
    remoteBreakpointEnable Public method to enable or disable a breakpoint.
    remoteBreakpointIgnore Public method to ignore a breakpoint the next couple of occurrences.
    remoteCapabilities Public slot to get the debug clients capabilities.
    remoteClientSetFilter Public method to set a variables filter list.
    remoteClientVariable Public method to request the variables of the debugged program.
    remoteClientVariables Public method to request the variables of the debugged program.
    remoteCompletion Public slot to get the a list of possible commandline completions from the remote client.
    remoteContinue Public method to continue the debugged program.
    remoteCoverage Public method to load a new program to collect coverage data.
    remoteEnvironment Public method to set the environment for a program to debug, run, ...
    remoteEval Public method to evaluate arg in the current context of the debugged program.
    remoteExec Public method to execute stmt in the current context of the debugged program.
    remoteLoad Public method to load a new program to debug.
    remoteProfile Public method to load a new program to collect profiling data.
    remoteRawInput Public method to send the raw input to the debugged program.
    remoteRun Public method to load a new program to run.
    remoteSetThread Public method to request to set the given thread as current thread.
    remoteStatement Public method to execute a Python statement.
    remoteStep Public method to single step the debugged program.
    remoteStepOut Public method to step out the debugged program.
    remoteStepOver Public method to step over the debugged program.
    remoteStepQuit Public method to stop the debugged program.
    remoteThreadList Public method to request the list of threads from the client.
    remoteUTPrepare Public method to prepare a new unittest run.
    remoteUTRun Public method to start a unittest run.
    remoteUTStop public method to stop a unittest run.
    remoteWatchpoint Public method to set or clear a watch expression.
    remoteWatchpointEnable Public method to enable or disable a watch expression.
    remoteWatchpointIgnore Public method to ignore a watch expression the next couple of occurrences.
    shutdown Public method to cleanly shut down.
    startRemote Public method to start a remote Python interpreter.
    startRemoteForProject Public method to start a remote Python interpreter for a project.

    Static Methods

    None

    DebuggerInterfaceNone (Constructor)

    DebuggerInterfaceNone(debugServer, passive)

    Constructor

    debugServer
    reference to the debug server (DebugServer)
    passive
    flag indicating passive connection mode (boolean)

    DebuggerInterfaceNone.flush

    flush()

    Public slot to flush the queue.

    DebuggerInterfaceNone.getClientCapabilities

    getClientCapabilities()

    Public method to retrieve the debug clients capabilities.

    Returns:
    debug client capabilities (integer)

    DebuggerInterfaceNone.isConnected

    isConnected()

    Public method to test, if a debug client has connected.

    Returns:
    flag indicating the connection status (boolean)

    DebuggerInterfaceNone.newConnection

    newConnection(sock)

    Public slot to handle a new connection.

    sock
    reference to the socket object (QTcpSocket)
    Returns:
    flag indicating success (boolean)

    DebuggerInterfaceNone.remoteBanner

    remoteBanner()

    Public slot to get the banner info of the remote client.

    DebuggerInterfaceNone.remoteBreakpoint

    remoteBreakpoint(fn, line, set, cond = None, temp = False)

    Public method to set or clear a breakpoint.

    fn
    filename the breakpoint belongs to (string)
    line
    linenumber of the breakpoint (int)
    set
    flag indicating setting or resetting a breakpoint (boolean)
    cond
    condition of the breakpoint (string)
    temp
    flag indicating a temporary breakpoint (boolean)

    DebuggerInterfaceNone.remoteBreakpointEnable

    remoteBreakpointEnable(fn, line, enable)

    Public method to enable or disable a breakpoint.

    fn
    filename the breakpoint belongs to (string)
    line
    linenumber of the breakpoint (int)
    enable
    flag indicating enabling or disabling a breakpoint (boolean)

    DebuggerInterfaceNone.remoteBreakpointIgnore

    remoteBreakpointIgnore(fn, line, count)

    Public method to ignore a breakpoint the next couple of occurrences.

    fn
    filename the breakpoint belongs to (string)
    line
    linenumber of the breakpoint (int)
    count
    number of occurrences to ignore (int)

    DebuggerInterfaceNone.remoteCapabilities

    remoteCapabilities()

    Public slot to get the debug clients capabilities.

    DebuggerInterfaceNone.remoteClientSetFilter

    remoteClientSetFilter(scope, filter)

    Public method to set a variables filter list.

    scope
    the scope of the variables (0 = local, 1 = global)
    filter
    regexp string for variable names to filter out (string)

    DebuggerInterfaceNone.remoteClientVariable

    remoteClientVariable(scope, filter, var, framenr = 0)

    Public method to request the variables of the debugged program.

    scope
    the scope of the variables (0 = local, 1 = global)
    filter
    list of variable types to filter out (list of int)
    var
    list encoded name of variable to retrieve (string)
    framenr
    framenumber of the variables to retrieve (int)

    DebuggerInterfaceNone.remoteClientVariables

    remoteClientVariables(scope, filter, framenr = 0)

    Public method to request the variables of the debugged program.

    scope
    the scope of the variables (0 = local, 1 = global)
    filter
    list of variable types to filter out (list of int)
    framenr
    framenumber of the variables to retrieve (int)

    DebuggerInterfaceNone.remoteCompletion

    remoteCompletion(text)

    Public slot to get the a list of possible commandline completions from the remote client.

    text
    the text to be completed (string or QString)

    DebuggerInterfaceNone.remoteContinue

    remoteContinue(special = False)

    Public method to continue the debugged program.

    special
    flag indicating a special continue operation

    DebuggerInterfaceNone.remoteCoverage

    remoteCoverage(fn, argv, wd, erase = False)

    Public method to load a new program to collect coverage data.

    fn
    the filename to run (string)
    argv
    the commandline arguments to pass to the program (string or QString)
    wd
    the working directory for the program (string)
    erase=
    flag indicating that coverage info should be cleared first (boolean)

    DebuggerInterfaceNone.remoteEnvironment

    remoteEnvironment(env)

    Public method to set the environment for a program to debug, run, ...

    env
    environment settings (dictionary)

    DebuggerInterfaceNone.remoteEval

    remoteEval(arg)

    Public method to evaluate arg in the current context of the debugged program.

    arg
    the arguments to evaluate (string)

    DebuggerInterfaceNone.remoteExec

    remoteExec(stmt)

    Public method to execute stmt in the current context of the debugged program.

    stmt
    statement to execute (string)

    DebuggerInterfaceNone.remoteLoad

    remoteLoad(fn, argv, wd, traceInterpreter = False, autoContinue = True, autoFork = False, forkChild = False)

    Public method to load a new program to debug.

    fn
    the filename to debug (string)
    argv
    the commandline arguments to pass to the program (string or QString)
    wd
    the working directory for the program (string)
    traceInterpreter=
    flag indicating if the interpreter library should be traced as well (boolean)
    autoContinue=
    flag indicating, that the debugger should not stop at the first executable line (boolean)
    autoFork=
    flag indicating the automatic fork mode (boolean)
    forkChild=
    flag indicating to debug the child after forking (boolean)

    DebuggerInterfaceNone.remoteProfile

    remoteProfile(fn, argv, wd, erase = False)

    Public method to load a new program to collect profiling data.

    fn
    the filename to run (string)
    argv
    the commandline arguments to pass to the program (string or QString)
    wd
    the working directory for the program (string)
    erase=
    flag indicating that timing info should be cleared first (boolean)

    DebuggerInterfaceNone.remoteRawInput

    remoteRawInput(s)

    Public method to send the raw input to the debugged program.

    s
    the raw input (string)

    DebuggerInterfaceNone.remoteRun

    remoteRun(fn, argv, wd, autoFork = False, forkChild = False)

    Public method to load a new program to run.

    fn
    the filename to run (string)
    argv
    the commandline arguments to pass to the program (string or QString)
    wd
    the working directory for the program (string)
    autoFork=
    flag indicating the automatic fork mode (boolean)
    forkChild=
    flag indicating to debug the child after forking (boolean)

    DebuggerInterfaceNone.remoteSetThread

    remoteSetThread(tid)

    Public method to request to set the given thread as current thread.

    tid
    id of the thread (integer)

    DebuggerInterfaceNone.remoteStatement

    remoteStatement(stmt)

    Public method to execute a Python statement.

    stmt
    the Python statement to execute (string). It should not have a trailing newline.

    DebuggerInterfaceNone.remoteStep

    remoteStep()

    Public method to single step the debugged program.

    DebuggerInterfaceNone.remoteStepOut

    remoteStepOut()

    Public method to step out the debugged program.

    DebuggerInterfaceNone.remoteStepOver

    remoteStepOver()

    Public method to step over the debugged program.

    DebuggerInterfaceNone.remoteStepQuit

    remoteStepQuit()

    Public method to stop the debugged program.

    DebuggerInterfaceNone.remoteThreadList

    remoteThreadList()

    Public method to request the list of threads from the client.

    DebuggerInterfaceNone.remoteUTPrepare

    remoteUTPrepare(fn, tn, tfn, cov, covname, coverase)

    Public method to prepare a new unittest run.

    fn
    the filename to load (string)
    tn
    the testname to load (string)
    tfn
    the test function name to load tests from (string)
    cov
    flag indicating collection of coverage data is requested
    covname
    filename to be used to assemble the coverage caches filename
    coverase
    flag indicating erasure of coverage data is requested

    DebuggerInterfaceNone.remoteUTRun

    remoteUTRun()

    Public method to start a unittest run.

    DebuggerInterfaceNone.remoteUTStop

    remoteUTStop()

    public method to stop a unittest run.

    DebuggerInterfaceNone.remoteWatchpoint

    remoteWatchpoint(cond, set, temp = False)

    Public method to set or clear a watch expression.

    cond
    expression of the watch expression (string)
    set
    flag indicating setting or resetting a watch expression (boolean)
    temp
    flag indicating a temporary watch expression (boolean)

    DebuggerInterfaceNone.remoteWatchpointEnable

    remoteWatchpointEnable(cond, enable)

    Public method to enable or disable a watch expression.

    cond
    expression of the watch expression (string)
    enable
    flag indicating enabling or disabling a watch expression (boolean)

    DebuggerInterfaceNone.remoteWatchpointIgnore

    remoteWatchpointIgnore(cond, count)

    Public method to ignore a watch expression the next couple of occurrences.

    cond
    expression of the watch expression (string)
    count
    number of occurrences to ignore (int)

    DebuggerInterfaceNone.shutdown

    shutdown()

    Public method to cleanly shut down.

    It closes our socket and shuts down the debug client. (Needed on Win OS)

    DebuggerInterfaceNone.startRemote

    startRemote(port, runInConsole)

    Public method to start a remote Python interpreter.

    port
    portnumber the debug server is listening on (integer)
    runInConsole
    flag indicating to start the debugger in a console window (boolean)
    Returns:
    client process object (QProcess) and a flag to indicate a network connection (boolean)

    DebuggerInterfaceNone.startRemoteForProject

    startRemoteForProject(port, runInConsole)

    Public method to start a remote Python interpreter for a project.

    port
    portnumber the debug server is listening on (integer)
    runInConsole
    flag indicating to start the debugger in a console window (boolean)
    Returns:
    client process object (QProcess) and a flag to indicate a network connection (boolean)


    getRegistryData

    getRegistryData()

    Module functionto get characterising data for the debugger interface.

    Returns:
    list of the following data. Client type (string), client capabilities (integer), client type association (list of strings)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.Exporters.ExporterTEX.html0000644000175000001440000000013212261331354030702 xustar000000000000000030 mtime=1388688108.426230026 30 atime=1389081085.174724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.Exporters.ExporterTEX.html0000644000175000001440000000740712261331354030444 0ustar00detlevusers00000000000000 eric4.QScintilla.Exporters.ExporterTEX

    eric4.QScintilla.Exporters.ExporterTEX

    Module implementing an exporter for TeX.

    Global Attributes

    None

    Classes

    ExporterTEX Class implementing an exporter for TeX.

    Functions

    None


    ExporterTEX

    Class implementing an exporter for TeX.

    Derived from

    ExporterBase

    Class Attributes

    CHARZ

    Class Methods

    None

    Methods

    ExporterTEX Constructor
    __defineTexStyle Private method to define a new TeX style.
    __getTexRGB Private method to convert a color object to a TeX color string
    __texStyle Private method to calculate a style name string for a given style number.
    exportSource Public method performing the export.

    Static Methods

    None

    ExporterTEX (Constructor)

    ExporterTEX(editor, parent = None)

    Constructor

    editor
    reference to the editor object (QScintilla.Editor.Editor)
    parent
    parent object of the exporter (QObject)

    ExporterTEX.__defineTexStyle

    __defineTexStyle(font, color, paper, file, istyle)

    Private method to define a new TeX style.

    font
    the font to be used (QFont)
    color
    the foreground color to be used (QColor)
    paper
    the background color to be used (QColor)
    file
    reference to the open file to write to (file object)
    istyle
    style number (integer)

    ExporterTEX.__getTexRGB

    __getTexRGB(color)

    Private method to convert a color object to a TeX color string

    color
    color object to convert (QColor)
    Returns:
    TeX color string (string)

    ExporterTEX.__texStyle

    __texStyle(style)

    Private method to calculate a style name string for a given style number.

    style
    style number (integer)
    Returns:
    style name string (string)

    ExporterTEX.exportSource

    exportSource()

    Public method performing the export.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.eric4_pluginuninstall.html0000644000175000001440000000013212261331350026767 xustar000000000000000030 mtime=1388688104.219227913 30 atime=1389081085.175724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.eric4_pluginuninstall.html0000644000175000001440000000317512261331350026527 0ustar00detlevusers00000000000000 eric4.eric4_pluginuninstall

    eric4.eric4_pluginuninstall

    Eric4 Plugin Uninstaller

    This is the main Python script to uninstall eric4 plugins from outside of the IDE.

    Global Attributes

    None

    Classes

    None

    Functions

    createMainWidget Function to create the main widget.
    main Main entry point into the application.


    createMainWidget

    createMainWidget(argv)

    Function to create the main widget.

    argv
    list of commandline parameters (list of strings)
    Returns:
    reference to the main widget (QWidget)


    main

    main()

    Main entry point into the application.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.PyUnit.html0000644000175000001440000000013212261331354025012 xustar000000000000000030 mtime=1388688108.661230144 30 atime=1389081085.175724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.PyUnit.html0000644000175000001440000000203112261331354024540 0ustar00detlevusers00000000000000 eric4.PyUnit

    eric4.PyUnit

    Package implementing an interface to the pyunit unittest package.

    The package consist of a single dialog, which may be called as a standalone version using the eric4_unittest script or from within the eric4 IDE. If it is called from within eric4, it has the additional function to open a source file that failed a test.

    Modules

    UnittestDialog Module implementing the UI to the pyunit package.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DebugClients.Python3.DebugConfig.html0000644000175000001440000000013212261331354030543 xustar000000000000000030 mtime=1388688108.080229852 30 atime=1389081085.175724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.DebugClients.Python3.DebugConfig.html0000644000175000001440000000157112261331354030301 0ustar00detlevusers00000000000000 eric4.DebugClients.Python3.DebugConfig

    eric4.DebugClients.Python3.DebugConfig

    Module defining type strings for the different Python types.

    Global Attributes

    ConfigVarTypeStrings

    Classes

    None

    Functions

    None

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.Passwords.PasswordManager.ht0000644000175000001440000000013212261331353031315 xustar000000000000000030 mtime=1388688107.652229637 30 atime=1389081085.175724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.Passwords.PasswordManager.html0000644000175000001440000002635512261331353031413 0ustar00detlevusers00000000000000 eric4.Helpviewer.Passwords.PasswordManager

    eric4.Helpviewer.Passwords.PasswordManager

    Module implementing the password manager.

    Global Attributes

    None

    Classes

    LoginForm Class implementing a data structure for login forms.
    PasswordManager Class implementing the password manager.

    Functions

    None


    LoginForm

    Class implementing a data structure for login forms.

    Derived from

    object

    Class Attributes

    None

    Class Methods

    None

    Methods

    LoginForm Constructor
    isValid Public method to test for validity.
    load Public method to load the form data from a file.
    save Public method to save the form data to a file.

    Static Methods

    None

    LoginForm (Constructor)

    LoginForm()

    Constructor

    LoginForm.isValid

    isValid()

    Public method to test for validity.

    Returns:
    flag indicating a valid form (boolean)

    LoginForm.load

    load(data)

    Public method to load the form data from a file.

    data
    list of strings to load data from (list of strings)
    Returns:
    flag indicating success (boolean)

    LoginForm.save

    save(f)

    Public method to save the form data to a file.

    f
    file or file like object open for writing
    Returns:
    flag indicating success (booelan)


    PasswordManager

    Class implementing the password manager.

    Signals

    changed()
    emitted to indicate a change

    Derived from

    QObject

    Class Attributes

    FORMS
    NEVER
    SEPARATOR

    Class Methods

    None

    Methods

    PasswordManager Constructor
    __createKey Private method to create the key string for the login credentials.
    __extractMultipartQueryItems Private method to extract the query items for a post operation.
    __findForm Private method to find the form used for logging in.
    __load Private method to load the saved login credentials.
    __stripUrl Private method to strip off all unneeded parts of a URL.
    allSiteNames Public method to get a list of all site names.
    clear Public slot to clear the saved passwords.
    close Public method to close the open search engines manager.
    fill Public slot to fill login forms with saved data.
    getLogin Public method to get the login credentials.
    post Public method to check, if the data to be sent contains login data.
    removePassword Public method to remove a password entry.
    save Public slot to save the login entries to disk.
    setLogin Public method to set the login credentials.
    siteInfo Public method to get a reference to the named site.
    sitesCount Public method to get the number of available sites.

    Static Methods

    None

    PasswordManager (Constructor)

    PasswordManager(parent = None)

    Constructor

    parent
    reference to the parent object (QObject)

    PasswordManager.__createKey

    __createKey(url, realm)

    Private method to create the key string for the login credentials.

    url
    URL to get the credentials for (QUrl)
    realm
    realm to get the credentials for (string or QString)
    Returns:
    key string (string)

    PasswordManager.__extractMultipartQueryItems

    __extractMultipartQueryItems(data, boundary)

    Private method to extract the query items for a post operation.

    data
    data to be sent (QByteArray)
    boundary
    boundary string (QByteArray)
    Returns:
    set of name, value pairs (set of tuple of QString, QString)

    PasswordManager.__findForm

    __findForm(webPage, data, boundary = None)

    Private method to find the form used for logging in.

    webPage
    reference to the web page (QWebPage)
    data
    data to be sent (QByteArray)
    boundary=
    boundary string (QByteArray) for multipart encoded data, None for urlencoded data
    Returns:
    parsed form (LoginForm)

    PasswordManager.__load

    __load()

    Private method to load the saved login credentials.

    PasswordManager.__stripUrl

    __stripUrl(url)

    Private method to strip off all unneeded parts of a URL.

    url
    URL to be stripped (QUrl)
    Returns:
    stripped URL (QUrl)

    PasswordManager.allSiteNames

    allSiteNames()

    Public method to get a list of all site names.

    Returns:
    sorted list of all site names (QStringList)

    PasswordManager.clear

    clear()

    Public slot to clear the saved passwords.

    PasswordManager.close

    close()

    Public method to close the open search engines manager.

    PasswordManager.fill

    fill(page)

    Public slot to fill login forms with saved data.

    page
    reference to the web page (QWebPage)

    PasswordManager.getLogin

    getLogin(url, realm)

    Public method to get the login credentials.

    url
    URL to get the credentials for (QUrl)
    realm
    realm to get the credentials for (string or QString)
    Returns:
    tuple containing the user name (string) and password (string)

    PasswordManager.post

    post(request, data)

    Public method to check, if the data to be sent contains login data.

    request
    reference to the network request (QNetworkRequest)
    data
    data to be sent (QByteArray)

    PasswordManager.removePassword

    removePassword(site)

    Public method to remove a password entry.

    site
    web site name (string or QString)

    PasswordManager.save

    save()

    Public slot to save the login entries to disk.

    PasswordManager.setLogin

    setLogin(url, realm, username, password)

    Public method to set the login credentials.

    url
    URL to set the credentials for (QUrl)
    realm
    realm to set the credentials for (string or QString)
    username
    username for the login (string or QString)
    password
    password for the login (string or QString)

    PasswordManager.siteInfo

    siteInfo(site)

    Public method to get a reference to the named site.

    site
    web site name (string or QString)
    Returns:
    tuple containing the user name (string) and password (string)

    PasswordManager.sitesCount

    sitesCount()

    Public method to get the number of available sites.

    Returns:
    number of sites (integer)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Project.ProjectOthersBrowser.html0000644000175000001440000000013212261331351030216 xustar000000000000000030 mtime=1388688105.774228694 30 atime=1389081085.175724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Project.ProjectOthersBrowser.html0000644000175000001440000001627512261331351027763 0ustar00detlevusers00000000000000 eric4.Project.ProjectOthersBrowser

    eric4.Project.ProjectOthersBrowser

    Module implementing a class used to display the parts of the project, that don't fit the other categories.

    Global Attributes

    None

    Classes

    ProjectOthersBrowser A class used to display the parts of the project, that don't fit the other categories.

    Functions

    None


    ProjectOthersBrowser

    A class used to display the parts of the project, that don't fit the other categories.

    Signals

    closeSourceWindow(string)
    emitted after a file has been removed/deleted from the project
    pixmapEditFile(string)
    emitted to edit a pixmap file
    pixmapFile(string)
    emitted to open a pixmap file
    showMenu(string, QMenu)
    emitted when a menu is about to be shown. The name of the menu and a reference to the menu are given.
    sourceFile(string)
    emitted to open a file
    svgFile(string)
    emitted to open a SVG file

    Derived from

    ProjectBaseBrowser

    Class Attributes

    None

    Class Methods

    None

    Methods

    ProjectOthersBrowser Constructor
    __deleteItem Private method to delete the selected entry from the OTHERS project data area.
    __refreshItem Private slot to refresh (repopulate) an item.
    __removeItem Private slot to remove the selected entry from the OTHERS project data area.
    __showContextMenu Private slot called by the menu aboutToShow signal.
    __showContextMenuBack Private slot called by the backMenu aboutToShow signal.
    __showContextMenuMulti Private slot called by the multiMenu aboutToShow signal.
    _contextMenuRequested Protected slot to show the context menu.
    _createPopupMenus Protected overloaded method to generate the popup menu.
    _editPixmap Protected slot to handle the open in icon editor popup menu entry.
    _openItem Protected slot to handle the open popup menu entry.
    _showContextMenu Protected slot called before the context menu is shown.

    Static Methods

    None

    ProjectOthersBrowser (Constructor)

    ProjectOthersBrowser(project, parent=None)

    Constructor

    project
    reference to the project object
    parent
    parent widget of this browser (QWidget)

    ProjectOthersBrowser.__deleteItem

    __deleteItem()

    Private method to delete the selected entry from the OTHERS project data area.

    ProjectOthersBrowser.__refreshItem

    __refreshItem()

    Private slot to refresh (repopulate) an item.

    ProjectOthersBrowser.__removeItem

    __removeItem()

    Private slot to remove the selected entry from the OTHERS project data area.

    ProjectOthersBrowser.__showContextMenu

    __showContextMenu()

    Private slot called by the menu aboutToShow signal.

    ProjectOthersBrowser.__showContextMenuBack

    __showContextMenuBack()

    Private slot called by the backMenu aboutToShow signal.

    ProjectOthersBrowser.__showContextMenuMulti

    __showContextMenuMulti()

    Private slot called by the multiMenu aboutToShow signal.

    ProjectOthersBrowser._contextMenuRequested

    _contextMenuRequested(coord)

    Protected slot to show the context menu.

    coord
    the position of the mouse pointer (QPoint)

    ProjectOthersBrowser._createPopupMenus

    _createPopupMenus()

    Protected overloaded method to generate the popup menu.

    ProjectOthersBrowser._editPixmap

    _editPixmap()

    Protected slot to handle the open in icon editor popup menu entry.

    ProjectOthersBrowser._openItem

    _openItem()

    Protected slot to handle the open popup menu entry.

    ProjectOthersBrowser._showContextMenu

    _showContextMenu(menu)

    Protected slot called before the context menu is shown.

    It enables/disables the VCS menu entries depending on the overall VCS status and the file status.

    menu
    Reference to the popup menu (QPopupMenu)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.E4XML.XMLErrorHandler.html0000644000175000001440000000013212261331352026253 xustar000000000000000030 mtime=1388688106.554229086 30 atime=1389081085.175724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.E4XML.XMLErrorHandler.html0000644000175000001440000001203712261331352026010 0ustar00detlevusers00000000000000 eric4.E4XML.XMLErrorHandler

    eric4.E4XML.XMLErrorHandler

    Module implementing an error handler class.

    Global Attributes

    None

    Classes

    XMLErrorHandler Class implementing an error handler class.
    XMLFatalParseError Class implementing an exception for recoverable parse errors.
    XMLParseError Class implementing an exception for recoverable parse errors.

    Functions

    None


    XMLErrorHandler

    Class implementing an error handler class.

    Derived from

    ErrorHandler

    Class Attributes

    None

    Class Methods

    None

    Methods

    XMLErrorHandler Constructor
    error Public method to handle a recoverable error.
    fatalError Public method to handle a non-recoverable error.
    getParseMessages Public method to retrieve all messages.
    showParseMessages Public method to show the parse messages (if any) in a dialog.
    warning Public method to handle a warning.

    Static Methods

    None

    XMLErrorHandler (Constructor)

    XMLErrorHandler()

    Constructor

    XMLErrorHandler.error

    error(exception)

    Public method to handle a recoverable error.

    exception
    Exception object describing the error (SAXParseException)

    XMLErrorHandler.fatalError

    fatalError(exception)

    Public method to handle a non-recoverable error.

    exception
    Exception object describing the error (SAXParseException)
    Raises XMLFatalParseError:
    a fatal parse error has occured

    XMLErrorHandler.getParseMessages

    getParseMessages()

    Public method to retrieve all messages.

    Returns:
    list of tuples of (message type, system id, line no, column no, message)

    XMLErrorHandler.showParseMessages

    showParseMessages()

    Public method to show the parse messages (if any) in a dialog.

    XMLErrorHandler.warning

    warning(exception)

    Public method to handle a warning.

    exception
    Exception object describing the error (SAXParseException)


    XMLFatalParseError

    Class implementing an exception for recoverable parse errors.

    Derived from

    XMLParseError

    Class Attributes

    None

    Class Methods

    None

    Methods

    None

    Static Methods

    None


    XMLParseError

    Class implementing an exception for recoverable parse errors.

    Derived from

    Exception

    Class Attributes

    None

    Class Methods

    None

    Methods

    None

    Static Methods

    None

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Debugger.ExceptionLogger.html0000644000175000001440000000013112261331350027271 xustar000000000000000029 mtime=1388688104.61022811 30 atime=1389081085.175724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Debugger.ExceptionLogger.html0000644000175000001440000001111412261331350027022 0ustar00detlevusers00000000000000 eric4.Debugger.ExceptionLogger

    eric4.Debugger.ExceptionLogger

    Module implementing the Exception Logger widget.

    Global Attributes

    None

    Classes

    ExceptionLogger Class implementing the Exception Logger widget.

    Functions

    None


    ExceptionLogger

    Class implementing the Exception Logger widget.

    This class displays a log of all exceptions having occured during a debugging session.

    Signals

    sourceFile(string, int)
    emitted to open a source file at a line

    Derived from

    QTreeWidget

    Class Attributes

    None

    Class Methods

    None

    Methods

    ExceptionLogger Constructor
    __configure Private method to open the configuration dialog.
    __itemDoubleClicked Private slot to handle the double click of an item.
    __openSource Private slot to handle a double click on an entry.
    __showContextMenu Private slot to show the context menu of the listview.
    addException Public slot to handle the arrival of a new exception.
    debuggingStarted Public slot to clear the listview upon starting a new debugging session.

    Static Methods

    None

    ExceptionLogger (Constructor)

    ExceptionLogger(parent=None)

    Constructor

    parent
    the parent widget of this widget

    ExceptionLogger.__configure

    __configure()

    Private method to open the configuration dialog.

    ExceptionLogger.__itemDoubleClicked

    __itemDoubleClicked(itm)

    Private slot to handle the double click of an item.

    itm
    the item that was double clicked(QTreeWidgetItem), ignored

    ExceptionLogger.__openSource

    __openSource()

    Private slot to handle a double click on an entry.

    ExceptionLogger.__showContextMenu

    __showContextMenu(coord)

    Private slot to show the context menu of the listview.

    coord
    the global coordinates of the mouse pointer (QPoint)

    ExceptionLogger.addException

    addException(exceptionType, exceptionMessage, stackTrace)

    Public slot to handle the arrival of a new exception.

    exceptionType
    type of exception raised (string)
    exceptionMessage
    message given by the exception (string)
    stackTrace
    list of stack entries.

    ExceptionLogger.debuggingStarted

    debuggingStarted()

    Public slot to clear the listview upon starting a new debugging session.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsPySvn.SvnConst.ht0000644000175000001440000000013212261331353031206 xustar000000000000000030 mtime=1388688107.269229445 30 atime=1389081085.175724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsPySvn.SvnConst.html0000644000175000001440000000163212261331353031273 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsPySvn.SvnConst

    eric4.Plugins.VcsPlugins.vcsPySvn.SvnConst

    Module implementing some constants for the pysvn package.

    Global Attributes

    svnNotifyActionMap
    svnStatusMap

    Classes

    None

    Functions

    None

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsSubversion.SvnDif0000644000175000001440000000013212261331352031267 xustar000000000000000030 mtime=1388688106.990229305 30 atime=1389081085.176724358 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsSubversion.SvnDiffDialog.html0000644000175000001440000002017112261331352033253 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsSubversion.SvnDiffDialog

    eric4.Plugins.VcsPlugins.vcsSubversion.SvnDiffDialog

    Module implementing a dialog to show the output of the svn diff command process.

    Global Attributes

    None

    Classes

    SvnDiffDialog Class implementing a dialog to show the output of the svn diff command process.

    Functions

    None


    SvnDiffDialog

    Class implementing a dialog to show the output of the svn diff command process.

    Derived from

    QWidget, Ui_SvnDiffDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnDiffDialog Constructor
    __appendText Private method to append text to the end of the contents pane.
    __getVersionArg Private method to get a svn revision argument for the given revision.
    __procFinished Private slot connected to the finished signal.
    __readStderr Private slot to handle the readyReadStandardError signal.
    __readStdout Private slot to handle the readyReadStandardOutput signal.
    closeEvent Private slot implementing a close event handler.
    keyPressEvent Protected slot to handle a key press event.
    on_buttonBox_clicked Private slot called by a button of the button box clicked.
    on_input_returnPressed Private slot to handle the press of the return key in the input field.
    on_passwordCheckBox_toggled Private slot to handle the password checkbox toggled.
    on_saveButton_clicked Private slot to handle the Save button press.
    on_sendButton_clicked Private slot to send the input to the subversion process.
    start Public slot to start the svn diff command.

    Static Methods

    None

    SvnDiffDialog (Constructor)

    SvnDiffDialog(vcs, parent = None)

    Constructor

    vcs
    reference to the vcs object
    parent
    parent widget (QWidget)

    SvnDiffDialog.__appendText

    __appendText(txt, format)

    Private method to append text to the end of the contents pane.

    txt
    text to insert (QString)
    format
    text format to be used (QTextCharFormat)

    SvnDiffDialog.__getVersionArg

    __getVersionArg(version)

    Private method to get a svn revision argument for the given revision.

    version
    revision (integer or string)
    Returns:
    version argument (string)

    SvnDiffDialog.__procFinished

    __procFinished(exitCode, exitStatus)

    Private slot connected to the finished signal.

    exitCode
    exit code of the process (integer)
    exitStatus
    exit status of the process (QProcess.ExitStatus)

    SvnDiffDialog.__readStderr

    __readStderr()

    Private slot to handle the readyReadStandardError signal.

    It reads the error output of the process and inserts it into the error pane.

    SvnDiffDialog.__readStdout

    __readStdout()

    Private slot to handle the readyReadStandardOutput signal.

    It reads the output of the process, formats it and inserts it into the contents pane.

    SvnDiffDialog.closeEvent

    closeEvent(e)

    Private slot implementing a close event handler.

    e
    close event (QCloseEvent)

    SvnDiffDialog.keyPressEvent

    keyPressEvent(evt)

    Protected slot to handle a key press event.

    evt
    the key press event (QKeyEvent)

    SvnDiffDialog.on_buttonBox_clicked

    on_buttonBox_clicked(button)

    Private slot called by a button of the button box clicked.

    button
    button that was clicked (QAbstractButton)

    SvnDiffDialog.on_input_returnPressed

    on_input_returnPressed()

    Private slot to handle the press of the return key in the input field.

    SvnDiffDialog.on_passwordCheckBox_toggled

    on_passwordCheckBox_toggled(isOn)

    Private slot to handle the password checkbox toggled.

    isOn
    flag indicating the status of the check box (boolean)

    SvnDiffDialog.on_saveButton_clicked

    on_saveButton_clicked()

    Private slot to handle the Save button press.

    It saves the diff shown in the dialog to a file in the local filesystem.

    SvnDiffDialog.on_sendButton_clicked

    on_sendButton_clicked()

    Private slot to send the input to the subversion process.

    SvnDiffDialog.start

    start(fn, versions = None, urls = None, summary = False)

    Public slot to start the svn diff command.

    fn
    filename to be diffed (string)
    versions
    list of versions to be diffed (list of up to 2 QString or None)
    urls=
    list of repository URLs (list of 2 strings)
    summary=
    flag indicating a summarizing diff (only valid for URL diffs) (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.DocumentationTools.html0000644000175000001440000000013212261331354027414 xustar000000000000000030 mtime=1388688108.660230143 30 atime=1389081085.176724358 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.DocumentationTools.html0000644000175000001440000000353712261331354027156 0ustar00detlevusers00000000000000 eric4.DocumentationTools

    eric4.DocumentationTools

    Package implementing the source code documentation tools.

    Modules

    APIGenerator Module implementing the builtin API generator.
    Config Module defining different default values for the documentation tools package.
    IndexGenerator Module implementing the index generator for the builtin documentation generator.
    ModuleDocumentor Module implementing the builtin documentation generator.
    QtHelpGenerator Module implementing the QtHelp generator for the builtin documentation generator.
    TemplatesListsStyle Module implementing templates for the documentation generator (lists style).
    TemplatesListsStyleCSS Module implementing templates for the documentation generator (lists style).
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsSubversion.SvnLog0000644000175000001440000000031112261331352031305 xustar0000000000000000112 path=eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsSubversion.SvnLogBrowserDialog.html 29 mtime=1388688106.88122925 30 atime=1389081085.176724358 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsSubversion.SvnLogBrowserDialog.ht0000644000175000001440000004237412261331352034150 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsSubversion.SvnLogBrowserDialog

    eric4.Plugins.VcsPlugins.vcsSubversion.SvnLogBrowserDialog

    Module implementing a dialog to browse the log history.

    Global Attributes

    None

    Classes

    SvnLogBrowserDialog Class implementing a dialog to browse the log history.

    Functions

    None


    SvnLogBrowserDialog

    Class implementing a dialog to browse the log history.

    Derived from

    QDialog, Ui_SvnLogBrowserDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnLogBrowserDialog Constructor
    __diffRevisions Private method to do a diff of two revisions.
    __filterLogs Private method to filter the log entries.
    __finish Private slot called when the process finished or the user pressed the button.
    __generateFileItem Private method to generate a changed files tree entry.
    __generateLogItem Private method to generate a log tree entry.
    __getLogEntries Private method to retrieve log entries from the repository.
    __procFinished Private slot connected to the finished signal.
    __processBuffer Private method to process the buffered output of the svn log command.
    __readStderr Private slot to handle the readyReadStandardError signal.
    __readStdout Private slot to handle the readyReadStandardOutput signal.
    __resizeColumnsFiles Private method to resize the changed files tree columns.
    __resizeColumnsLog Private method to resize the log tree columns.
    __resortFiles Private method to resort the changed files tree.
    __resortLog Private method to resort the log tree.
    closeEvent Private slot implementing a close event handler.
    keyPressEvent Protected slot to handle a key press event.
    on_buttonBox_clicked Private slot called by a button of the button box clicked.
    on_clearRxEditButton_clicked Private slot called by a click of the clear RX edit button.
    on_diffPreviousButton_clicked Private slot to handle the Diff to Previous button.
    on_diffRevisionsButton_clicked Private slot to handle the Compare Revisions button.
    on_fieldCombo_activated Private slot called, when a new filter field is selected.
    on_fromDate_dateChanged Private slot called, when the from date changes.
    on_input_returnPressed Private slot to handle the press of the return key in the input field.
    on_logTree_currentItemChanged Private slot called, when the current item of the log tree changes.
    on_logTree_itemSelectionChanged Private slot called, when the selection has changed.
    on_nextButton_clicked Private slot to handle the Next button.
    on_passwordCheckBox_toggled Private slot to handle the password checkbox toggled.
    on_rxEdit_textChanged Private slot called, when a filter expression is entered.
    on_sendButton_clicked Private slot to send the input to the subversion process.
    on_stopCheckBox_clicked Private slot called, when the stop on copy/move checkbox is clicked
    on_toDate_dateChanged Private slot called, when the from date changes.
    start Public slot to start the svn log command.

    Static Methods

    None

    SvnLogBrowserDialog (Constructor)

    SvnLogBrowserDialog(vcs, parent = None)

    Constructor

    vcs
    reference to the vcs object
    parent
    parent widget (QWidget)

    SvnLogBrowserDialog.__diffRevisions

    __diffRevisions(rev1, rev2)

    Private method to do a diff of two revisions.

    rev1
    first revision number (integer)
    rev2
    second revision number (integer)

    SvnLogBrowserDialog.__filterLogs

    __filterLogs()

    Private method to filter the log entries.

    SvnLogBrowserDialog.__finish

    __finish()

    Private slot called when the process finished or the user pressed the button.

    SvnLogBrowserDialog.__generateFileItem

    __generateFileItem(action, path, copyFrom, copyRev)

    Private method to generate a changed files tree entry.

    action
    indicator for the change action ("A", "D" or "M")
    path
    path of the file in the repository (string or QString)
    copyFrom
    path the file was copied from (None, string or QString)
    copyRev
    revision the file was copied from (None, string or QString)
    Returns:
    reference to the generated item (QTreeWidgetItem)

    SvnLogBrowserDialog.__generateLogItem

    __generateLogItem(author, date, message, revision, changedPaths)

    Private method to generate a log tree entry.

    author
    author info (string or QString)
    date
    date info (string or QString)
    message
    text of the log message (QStringList)
    revision
    revision info (string or QString)
    changedPaths
    list of dictionary objects containing info about the changed files/directories
    Returns:
    reference to the generated item (QTreeWidgetItem)

    SvnLogBrowserDialog.__getLogEntries

    __getLogEntries(startRev = None)

    Private method to retrieve log entries from the repository.

    startRev
    revision number to start from (integer, string or QString)

    SvnLogBrowserDialog.__procFinished

    __procFinished(exitCode, exitStatus)

    Private slot connected to the finished signal.

    exitCode
    exit code of the process (integer)
    exitStatus
    exit status of the process (QProcess.ExitStatus)

    SvnLogBrowserDialog.__processBuffer

    __processBuffer()

    Private method to process the buffered output of the svn log command.

    SvnLogBrowserDialog.__readStderr

    __readStderr()

    Private slot to handle the readyReadStandardError signal.

    It reads the error output of the process and inserts it into the error pane.

    SvnLogBrowserDialog.__readStdout

    __readStdout()

    Private slot to handle the readyReadStandardOutput signal.

    It reads the output of the process and inserts it into a buffer.

    SvnLogBrowserDialog.__resizeColumnsFiles

    __resizeColumnsFiles()

    Private method to resize the changed files tree columns.

    SvnLogBrowserDialog.__resizeColumnsLog

    __resizeColumnsLog()

    Private method to resize the log tree columns.

    SvnLogBrowserDialog.__resortFiles

    __resortFiles()

    Private method to resort the changed files tree.

    SvnLogBrowserDialog.__resortLog

    __resortLog()

    Private method to resort the log tree.

    SvnLogBrowserDialog.closeEvent

    closeEvent(e)

    Private slot implementing a close event handler.

    e
    close event (QCloseEvent)

    SvnLogBrowserDialog.keyPressEvent

    keyPressEvent(evt)

    Protected slot to handle a key press event.

    evt
    the key press event (QKeyEvent)

    SvnLogBrowserDialog.on_buttonBox_clicked

    on_buttonBox_clicked(button)

    Private slot called by a button of the button box clicked.

    button
    button that was clicked (QAbstractButton)

    SvnLogBrowserDialog.on_clearRxEditButton_clicked

    on_clearRxEditButton_clicked()

    Private slot called by a click of the clear RX edit button.

    SvnLogBrowserDialog.on_diffPreviousButton_clicked

    on_diffPreviousButton_clicked()

    Private slot to handle the Diff to Previous button.

    SvnLogBrowserDialog.on_diffRevisionsButton_clicked

    on_diffRevisionsButton_clicked()

    Private slot to handle the Compare Revisions button.

    SvnLogBrowserDialog.on_fieldCombo_activated

    on_fieldCombo_activated(txt)

    Private slot called, when a new filter field is selected.

    txt
    text of the selected field (QString)

    SvnLogBrowserDialog.on_fromDate_dateChanged

    on_fromDate_dateChanged(date)

    Private slot called, when the from date changes.

    date
    new date (QDate)

    SvnLogBrowserDialog.on_input_returnPressed

    on_input_returnPressed()

    Private slot to handle the press of the return key in the input field.

    SvnLogBrowserDialog.on_logTree_currentItemChanged

    on_logTree_currentItemChanged(current, previous)

    Private slot called, when the current item of the log tree changes.

    current
    reference to the new current item (QTreeWidgetItem)
    previous
    reference to the old current item (QTreeWidgetItem)

    SvnLogBrowserDialog.on_logTree_itemSelectionChanged

    on_logTree_itemSelectionChanged()

    Private slot called, when the selection has changed.

    SvnLogBrowserDialog.on_nextButton_clicked

    on_nextButton_clicked()

    Private slot to handle the Next button.

    SvnLogBrowserDialog.on_passwordCheckBox_toggled

    on_passwordCheckBox_toggled(isOn)

    Private slot to handle the password checkbox toggled.

    isOn
    flag indicating the status of the check box (boolean)

    SvnLogBrowserDialog.on_rxEdit_textChanged

    on_rxEdit_textChanged(txt)

    Private slot called, when a filter expression is entered.

    txt
    filter expression (QString)

    SvnLogBrowserDialog.on_sendButton_clicked

    on_sendButton_clicked()

    Private slot to send the input to the subversion process.

    SvnLogBrowserDialog.on_stopCheckBox_clicked

    on_stopCheckBox_clicked(checked)

    Private slot called, when the stop on copy/move checkbox is clicked

    SvnLogBrowserDialog.on_toDate_dateChanged

    on_toDate_dateChanged(date)

    Private slot called, when the from date changes.

    date
    new date (QDate)

    SvnLogBrowserDialog.start

    start(fn)

    Public slot to start the svn log command.

    fn
    filename to show the log for (string)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsSubversion.SvnOpt0000644000175000001440000000013212261331352031327 xustar000000000000000030 mtime=1388688106.806229212 30 atime=1389081085.176724358 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsSubversion.SvnOptionsDialog.html0000644000175000001440000000747012261331352034045 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsSubversion.SvnOptionsDialog

    eric4.Plugins.VcsPlugins.vcsSubversion.SvnOptionsDialog

    Module implementing a dialog to enter options used to start a project in the VCS.

    Global Attributes

    None

    Classes

    SvnOptionsDialog Class implementing a dialog to enter options used to start a project in the repository.

    Functions

    None


    SvnOptionsDialog

    Class implementing a dialog to enter options used to start a project in the repository.

    Derived from

    QDialog, Ui_SvnOptionsDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnOptionsDialog Constructor
    getData Public slot to retrieve the data entered into the dialog.
    on_protocolCombo_activated Private slot to switch the status of the directory selection button.
    on_vcsUrlButton_clicked Private slot to display a selection dialog.
    on_vcsUrlEdit_textChanged Private slot to handle changes of the URL.

    Static Methods

    None

    SvnOptionsDialog (Constructor)

    SvnOptionsDialog(vcs, project, parent = None)

    Constructor

    vcs
    reference to the version control object
    project
    reference to the project object
    parent
    parent widget (QWidget)

    SvnOptionsDialog.getData

    getData()

    Public slot to retrieve the data entered into the dialog.

    Returns:
    a dictionary containing the data entered

    SvnOptionsDialog.on_protocolCombo_activated

    on_protocolCombo_activated(protocol)

    Private slot to switch the status of the directory selection button.

    SvnOptionsDialog.on_vcsUrlButton_clicked

    on_vcsUrlButton_clicked()

    Private slot to display a selection dialog.

    SvnOptionsDialog.on_vcsUrlEdit_textChanged

    on_vcsUrlEdit_textChanged(txt)

    Private slot to handle changes of the URL.

    txt
    current text of the line edit (QString)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Project.NewPythonPackageDialog.html0000644000175000001440000000013112261331351030405 xustar000000000000000029 mtime=1388688105.80522871 30 atime=1389081085.177724358 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Project.NewPythonPackageDialog.html0000644000175000001440000000557512261331351030154 0ustar00detlevusers00000000000000 eric4.Project.NewPythonPackageDialog

    eric4.Project.NewPythonPackageDialog

    Module implementing a dialog to add a new Python package.

    Global Attributes

    None

    Classes

    NewPythonPackageDialog Class implementing a dialog to add a new Python package.

    Functions

    None


    NewPythonPackageDialog

    Class implementing a dialog to add a new Python package.

    Derived from

    QDialog, Ui_NewPythonPackageDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    NewPythonPackageDialog Constructor
    getData Public method to retrieve the data entered into the dialog.
    on_packageEdit_textChanged Private slot called, when the package name is changed.

    Static Methods

    None

    NewPythonPackageDialog (Constructor)

    NewPythonPackageDialog(relPath, parent = None)

    Constructor

    relPath
    initial package path relative to the project root (string or QString)

    NewPythonPackageDialog.getData

    getData()

    Public method to retrieve the data entered into the dialog.

    Returns:
    package name (string)

    NewPythonPackageDialog.on_packageEdit_textChanged

    on_packageEdit_textChanged(txt)

    Private slot called, when the package name is changed.

    txt
    new text of the package name edit (QString)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsSubversion.SvnCha0000644000175000001440000000031212261331352031260 xustar0000000000000000113 path=eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsSubversion.SvnChangeListsDialog.html 29 mtime=1388688106.80222921 30 atime=1389081085.177724358 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsSubversion.SvnChangeListsDialog.h0000644000175000001440000001634112261331352034076 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsSubversion.SvnChangeListsDialog

    eric4.Plugins.VcsPlugins.vcsSubversion.SvnChangeListsDialog

    Module implementing a dialog to browse the change lists.

    Global Attributes

    None

    Classes

    SvnChangeListsDialog Class implementing a dialog to browse the change lists.

    Functions

    None


    SvnChangeListsDialog

    Class implementing a dialog to browse the change lists.

    Derived from

    QDialog, Ui_SvnChangeListsDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnChangeListsDialog Constructor
    __finish Private slot called when the process finished or the user pressed the button.
    __procFinished Private slot connected to the finished signal.
    __readStderr Private slot to handle the readyReadStandardError signal.
    __readStdout Private slot to handle the readyReadStandardOutput signal.
    keyPressEvent Protected slot to handle a key press event.
    on_buttonBox_clicked Private slot called by a button of the button box clicked.
    on_changeLists_currentItemChanged Private slot to handle the selection of a new item.
    on_input_returnPressed Private slot to handle the press of the return key in the input field.
    on_passwordCheckBox_toggled Private slot to handle the password checkbox toggled.
    on_sendButton_clicked Private slot to send the input to the subversion process.
    start Public slot to populate the data.

    Static Methods

    None

    SvnChangeListsDialog (Constructor)

    SvnChangeListsDialog(vcs, parent=None)

    Constructor

    vcs
    reference to the vcs object
    parent
    parent widget (QWidget)

    SvnChangeListsDialog.__finish

    __finish()

    Private slot called when the process finished or the user pressed the button.

    SvnChangeListsDialog.__procFinished

    __procFinished(exitCode, exitStatus)

    Private slot connected to the finished signal.

    exitCode
    exit code of the process (integer)
    exitStatus
    exit status of the process (QProcess.ExitStatus)

    SvnChangeListsDialog.__readStderr

    __readStderr()

    Private slot to handle the readyReadStandardError signal.

    It reads the error output of the process and inserts it into the error pane.

    SvnChangeListsDialog.__readStdout

    __readStdout()

    Private slot to handle the readyReadStandardOutput signal.

    It reads the output of the process, formats it and inserts it into the contents pane.

    SvnChangeListsDialog.keyPressEvent

    keyPressEvent(evt)

    Protected slot to handle a key press event.

    evt
    the key press event (QKeyEvent)

    SvnChangeListsDialog.on_buttonBox_clicked

    on_buttonBox_clicked(button)

    Private slot called by a button of the button box clicked.

    button
    button that was clicked (QAbstractButton)

    SvnChangeListsDialog.on_changeLists_currentItemChanged

    on_changeLists_currentItemChanged(current, previous)

    Private slot to handle the selection of a new item.

    current
    current item (QListWidgetItem)
    previous
    previous current item (QListWidgetItem)

    SvnChangeListsDialog.on_input_returnPressed

    on_input_returnPressed()

    Private slot to handle the press of the return key in the input field.

    SvnChangeListsDialog.on_passwordCheckBox_toggled

    on_passwordCheckBox_toggled(isOn)

    Private slot to handle the password checkbox toggled.

    isOn
    flag indicating the status of the check box (boolean)

    SvnChangeListsDialog.on_sendButton_clicked

    on_sendButton_clicked()

    Private slot to send the input to the subversion process.

    SvnChangeListsDialog.start

    start(path)

    Public slot to populate the data.

    path
    directory name to show change lists for (string)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.CookieJar.CookieJar.html0000644000175000001440000000013212261331353030300 xustar000000000000000030 mtime=1388688107.679229651 30 atime=1389081085.177724358 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.CookieJar.CookieJar.html0000644000175000001440000003001512261331353030031 0ustar00detlevusers00000000000000 eric4.Helpviewer.CookieJar.CookieJar

    eric4.Helpviewer.CookieJar.CookieJar

    Module implementing a QNetworkCookieJar subclass with various accept policies.

    Global Attributes

    None

    Classes

    CookieJar Class implementing a QNetworkCookieJar subclass with various accept policies.

    Functions

    None


    CookieJar

    Class implementing a QNetworkCookieJar subclass with various accept policies.

    Signals

    cookiesChanged()
    emitted after the cookies have been changed

    Derived from

    QNetworkCookieJar

    Class Attributes

    AcceptAlways
    AcceptNever
    AcceptOnlyFromSitesNavigatedTo
    Allow
    AllowForSession
    Block
    JAR_VERSION
    KeepUntilExit
    KeepUntilExpire
    KeepUntilTimeLimit

    Class Methods

    None

    Methods

    CookieJar Constructor
    __applyRules Private method to apply the cookie rules.
    __isOnDomainList Private method to check, if either the rule matches the domain exactly or the domain ends with ".rule".
    __purgeOldCookies Private method to purge old cookies
    acceptPolicy Public method to get the accept policy.
    allowForSessionCookies Public method to return the allowed session cookies.
    allowedCookies Public method to return the allowed cookies.
    blockedCookies Public method to return the blocked cookies.
    clear Public method to clear all cookies.
    close Public slot to close the cookie jar.
    cookies Public method to get the cookies of the cookie jar.
    cookiesForUrl Public method to get the cookies for a URL.
    filterTrackingCookies Public method to get the filter tracking cookies flag.
    keepPolicy Private method to get the keep policy.
    load Public method to load the cookies.
    loadCookies Public method to restore the saved cookies.
    save Public method to save the cookies.
    saveCookies Public method to save the cookies.
    setAcceptPolicy Public method to set the accept policy.
    setAllowForSessionCookies Public method to set the list of allowed session cookies.
    setAllowedCookies Public method to set the list of allowed cookies.
    setBlockedCookies Public method to set the list of blocked cookies.
    setCookies Public method to set all cookies.
    setCookiesFromUrl Public method to set cookies for a URL.
    setFilterTrackingCookies Public method to set the filter tracking cookies flag.
    setKeepPolicy Public method to set the keep policy.

    Static Methods

    None

    CookieJar (Constructor)

    CookieJar(parent = None)

    Constructor

    parent
    reference to the parent object (QObject)

    CookieJar.__applyRules

    __applyRules()

    Private method to apply the cookie rules.

    CookieJar.__isOnDomainList

    __isOnDomainList(rules, domain)

    Private method to check, if either the rule matches the domain exactly or the domain ends with ".rule".

    rules
    list of rules (QStringList)
    domain
    domain name to check (QString)
    Returns:
    flag indicating a match (boolean)

    CookieJar.__purgeOldCookies

    __purgeOldCookies()

    Private method to purge old cookies

    CookieJar.acceptPolicy

    acceptPolicy()

    Public method to get the accept policy.

    Returns:
    current accept policy

    CookieJar.allowForSessionCookies

    allowForSessionCookies()

    Public method to return the allowed session cookies.

    Returns:
    list of allowed session cookies (QStringList)

    CookieJar.allowedCookies

    allowedCookies()

    Public method to return the allowed cookies.

    Returns:
    list of allowed cookies (QStringList)

    CookieJar.blockedCookies

    blockedCookies()

    Public method to return the blocked cookies.

    Returns:
    list of blocked cookies (QStringList)

    CookieJar.clear

    clear()

    Public method to clear all cookies.

    CookieJar.close

    close()

    Public slot to close the cookie jar.

    CookieJar.cookies

    cookies()

    Public method to get the cookies of the cookie jar.

    Returns:
    list of all cookies (list of QNetworkCookie)

    CookieJar.cookiesForUrl

    cookiesForUrl(url)

    Public method to get the cookies for a URL.

    url
    URL to get cookies for (QUrl)
    Returns:
    list of cookies (list of QNetworkCookie)

    CookieJar.filterTrackingCookies

    filterTrackingCookies()

    Public method to get the filter tracking cookies flag.

    Returns:
    filter tracking cookies flag (boolean)

    CookieJar.keepPolicy

    keepPolicy()

    Private method to get the keep policy.

    CookieJar.load

    load()

    Public method to load the cookies.

    CookieJar.loadCookies

    loadCookies(cookies)

    Public method to restore the saved cookies.

    cookies
    byte array containing the saved cookies (QByteArray)
    Returns:
    list of cookies

    CookieJar.save

    save()

    Public method to save the cookies.

    CookieJar.saveCookies

    saveCookies(cookiesList)

    Public method to save the cookies.

    cookiesList
    list of cookies to be saved
    Returns:
    saved cookies as a byte array (QByteArray)

    CookieJar.setAcceptPolicy

    setAcceptPolicy(policy)

    Public method to set the accept policy.

    policy
    accept policy to be set

    CookieJar.setAllowForSessionCookies

    setAllowForSessionCookies(list_)

    Public method to set the list of allowed session cookies.

    list_
    list of allowed session cookies (QStringList)

    CookieJar.setAllowedCookies

    setAllowedCookies(list_)

    Public method to set the list of allowed cookies.

    list_
    list of allowed cookies (QStringList)

    CookieJar.setBlockedCookies

    setBlockedCookies(list_)

    Public method to set the list of blocked cookies.

    list_
    list of blocked cookies (QStringList)

    CookieJar.setCookies

    setCookies(cookies)

    Public method to set all cookies.

    cookies
    list of cookies to be set.

    CookieJar.setCookiesFromUrl

    setCookiesFromUrl(cookieList, url)

    Public method to set cookies for a URL.

    cookieList
    list of cookies to set (list of QNetworkCookie)
    url
    url to set cookies for (QUrl)
    Returns:
    flag indicating cookies were set (boolean)

    CookieJar.setFilterTrackingCookies

    setFilterTrackingCookies(filterTrackingCookies)

    Public method to set the filter tracking cookies flag.

    filterTrackingCookies
    filter tracking cookies flag (boolean)

    CookieJar.setKeepPolicy

    setKeepPolicy(policy)

    Public method to set the keep policy.

    policy
    keep policy to be set

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ConfigurationPages.Debugger0000644000175000001440000000013112261331353031262 xustar000000000000000029 mtime=1388688107.51922957 30 atime=1389081085.177724358 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.DebuggerPython3Page.html0000644000175000001440000000660112261331353034045 0ustar00detlevusers00000000000000 eric4.Preferences.ConfigurationPages.DebuggerPython3Page

    eric4.Preferences.ConfigurationPages.DebuggerPython3Page

    Module implementing the Debugger Python3 configuration page.

    Global Attributes

    None

    Classes

    DebuggerPython3Page Class implementing the Debugger Python3 configuration page.

    Functions

    create Module function to create the configuration page.


    DebuggerPython3Page

    Class implementing the Debugger Python3 configuration page.

    Derived from

    ConfigurationPageBase, Ui_DebuggerPython3Page

    Class Attributes

    None

    Class Methods

    None

    Methods

    DebuggerPython3Page Constructor
    on_debugClientButton_clicked Private slot to handle the Debug Client selection.
    on_interpreterButton_clicked Private slot to handle the Python interpreter selection.
    save Public slot to save the Debugger Python configuration.

    Static Methods

    None

    DebuggerPython3Page (Constructor)

    DebuggerPython3Page()

    Constructor

    DebuggerPython3Page.on_debugClientButton_clicked

    on_debugClientButton_clicked()

    Private slot to handle the Debug Client selection.

    DebuggerPython3Page.on_interpreterButton_clicked

    on_interpreterButton_clicked()

    Private slot to handle the Python interpreter selection.

    DebuggerPython3Page.save

    save()

    Public slot to save the Debugger Python configuration.



    create

    create(dlg)

    Module function to create the configuration page.

    dlg
    reference to the configuration dialog

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.Plugins.VcsPlugins.html0000644000175000001440000000013212261331354027277 xustar000000000000000030 mtime=1388688108.661230144 30 atime=1389081085.177724358 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.Plugins.VcsPlugins.html0000644000175000001440000000172012261331354027031 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins

    eric4.Plugins.VcsPlugins

    Package containing the various version control system plugins.

    Packages

    vcsPySvn Package implementing the vcs interface to Subversion
    vcsSubversion Package implementing the vcs interface to Subversion
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Project.SpellingPropertiesDialog.html0000644000175000001440000000013212261331351031031 xustar000000000000000030 mtime=1388688105.839228727 30 atime=1389081085.177724358 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Project.SpellingPropertiesDialog.html0000644000175000001440000000712012261331351030563 0ustar00detlevusers00000000000000 eric4.Project.SpellingPropertiesDialog

    eric4.Project.SpellingPropertiesDialog

    Module implementing the Spelling Properties dialog.

    Global Attributes

    None

    Classes

    SpellingPropertiesDialog Class implementing the Spelling Properties dialog.

    Functions

    None


    SpellingPropertiesDialog

    Class implementing the Spelling Properties dialog.

    Derived from

    QDialog, Ui_SpellingPropertiesDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    SpellingPropertiesDialog Constructor
    initDialog Public method to initialize the dialogs data.
    on_pelButton_clicked Private slot to select the project exclude list file.
    on_pwlButton_clicked Private slot to select the project word list file.
    storeData Public method to store the entered/modified data.

    Static Methods

    None

    SpellingPropertiesDialog (Constructor)

    SpellingPropertiesDialog(project, new, parent)

    Constructor

    project
    reference to the project object
    new
    flag indicating the generation of a new project
    parent
    parent widget of this dialog (QWidget)

    SpellingPropertiesDialog.initDialog

    initDialog()

    Public method to initialize the dialogs data.

    SpellingPropertiesDialog.on_pelButton_clicked

    on_pelButton_clicked()

    Private slot to select the project exclude list file.

    SpellingPropertiesDialog.on_pwlButton_clicked

    on_pwlButton_clicked()

    Private slot to select the project word list file.

    SpellingPropertiesDialog.storeData

    storeData()

    Public method to store the entered/modified data.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.UI.BrowserModel.html0000644000175000001440000000013112261331350025370 xustar000000000000000029 mtime=1388688104.94922828 30 atime=1389081085.177724358 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.UI.BrowserModel.html0000644000175000001440000014670712261331350025142 0ustar00detlevusers00000000000000 eric4.UI.BrowserModel

    eric4.UI.BrowserModel

    Module implementing the browser model.

    Global Attributes

    BrowserItemAttribute
    BrowserItemAttributes
    BrowserItemClass
    BrowserItemCoding
    BrowserItemDirectory
    BrowserItemFile
    BrowserItemMethod
    BrowserItemRoot
    BrowserItemSysPath

    Classes

    BrowserClassAttributeItem Class implementing the data structure for browser class attribute items.
    BrowserClassAttributesItem Class implementing the data structure for browser class attributes items.
    BrowserClassItem Class implementing the data structure for browser class items.
    BrowserCodingItem Class implementing the data structure for browser coding items.
    BrowserDirectoryItem Class implementing the data structure for browser directory items.
    BrowserFileItem Class implementing the data structure for browser file items.
    BrowserItem Class implementing the data structure for browser items.
    BrowserMethodItem Class implementing the data structure for browser method items.
    BrowserModel Class implementing the browser model.
    BrowserSysPathItem Class implementing the data structure for browser sys.path items.

    Functions

    None


    BrowserClassAttributeItem

    Class implementing the data structure for browser class attribute items.

    Derived from

    BrowserItem

    Class Attributes

    None

    Class Methods

    None

    Methods

    BrowserClassAttributeItem Constructor
    attributeObject Public method returning the class object.
    fileName Public method returning the filename.
    isPublic Public method returning the public visibility status.
    lessThan Public method to check, if the item is less than the other one.
    lineno Public method returning the line number defining this object.

    Static Methods

    None

    BrowserClassAttributeItem (Constructor)

    BrowserClassAttributeItem(parent, attribute, isClass=False)

    Constructor

    parent
    parent item
    attribute
    reference to the attribute object
    isClass
    flag indicating a class attribute (boolean)

    BrowserClassAttributeItem.attributeObject

    attributeObject()

    Public method returning the class object.

    Returns:
    reference to the class object

    BrowserClassAttributeItem.fileName

    fileName()

    Public method returning the filename.

    Returns:
    filename (string)

    BrowserClassAttributeItem.isPublic

    isPublic()

    Public method returning the public visibility status.

    Returns:
    flag indicating public visibility (boolean)

    BrowserClassAttributeItem.lessThan

    lessThan(other, column, order)

    Public method to check, if the item is less than the other one.

    other
    reference to item to compare against (BrowserItem)
    column
    column number to use for the comparison (integer)
    order
    sort order (Qt.SortOrder) (for special sorting)
    Returns:
    true, if this item is less than other (boolean)

    BrowserClassAttributeItem.lineno

    lineno()

    Public method returning the line number defining this object.

    return line number defining the object (integer)



    BrowserClassAttributesItem

    Class implementing the data structure for browser class attributes items.

    Derived from

    BrowserItem

    Class Attributes

    None

    Class Methods

    None

    Methods

    BrowserClassAttributesItem Constructor
    attributes Public method returning the attribute list.
    isClassAttributes Public method returning the attributes type.
    lessThan Public method to check, if the item is less than the other one.

    Static Methods

    None

    BrowserClassAttributesItem (Constructor)

    BrowserClassAttributesItem(parent, attributes, text, isClass=False)

    Constructor

    parent
    parent item
    attributes
    list of attributes
    text
    text to be shown by this item (QString)
    isClass
    flag indicating class attributes (boolean)

    BrowserClassAttributesItem.attributes

    attributes()

    Public method returning the attribute list.

    Returns:
    reference to the list of attributes

    BrowserClassAttributesItem.isClassAttributes

    isClassAttributes()

    Public method returning the attributes type.

    Returns:
    flag indicating class attributes (boolean)

    BrowserClassAttributesItem.lessThan

    lessThan(other, column, order)

    Public method to check, if the item is less than the other one.

    other
    reference to item to compare against (BrowserItem)
    column
    column number to use for the comparison (integer)
    order
    sort order (Qt.SortOrder) (for special sorting)
    Returns:
    true, if this item is less than other (boolean)


    BrowserClassItem

    Class implementing the data structure for browser class items.

    Derived from

    BrowserItem

    Class Attributes

    None

    Class Methods

    None

    Methods

    BrowserClassItem Constructor
    classObject Public method returning the class object.
    fileName Public method returning the filename.
    isPublic Public method returning the public visibility status.
    lessThan Public method to check, if the item is less than the other one.
    lineno Public method returning the line number defining this object.

    Static Methods

    None

    BrowserClassItem (Constructor)

    BrowserClassItem(parent, cl, filename)

    Constructor

    parent
    parent item
    cl
    Class object to be shown
    filename
    filename of the file defining this class

    BrowserClassItem.classObject

    classObject()

    Public method returning the class object.

    Returns:
    reference to the class object

    BrowserClassItem.fileName

    fileName()

    Public method returning the filename.

    Returns:
    filename (string)

    BrowserClassItem.isPublic

    isPublic()

    Public method returning the public visibility status.

    Returns:
    flag indicating public visibility (boolean)

    BrowserClassItem.lessThan

    lessThan(other, column, order)

    Public method to check, if the item is less than the other one.

    other
    reference to item to compare against (BrowserItem)
    column
    column number to use for the comparison (integer)
    order
    sort order (Qt.SortOrder) (for special sorting)
    Returns:
    true, if this item is less than other (boolean)

    BrowserClassItem.lineno

    lineno()

    Public method returning the line number defining this object.

    return line number defining the object (integer)



    BrowserCodingItem

    Class implementing the data structure for browser coding items.

    Derived from

    BrowserItem

    Class Attributes

    None

    Class Methods

    None

    Methods

    BrowserCodingItem Constructor
    lessThan Public method to check, if the item is less than the other one.

    Static Methods

    None

    BrowserCodingItem (Constructor)

    BrowserCodingItem(parent, text)

    Constructor

    parent
    parent item
    text
    text to be shown by this item (QString)

    BrowserCodingItem.lessThan

    lessThan(other, column, order)

    Public method to check, if the item is less than the other one.

    other
    reference to item to compare against (BrowserItem)
    column
    column number to use for the comparison (integer)
    order
    sort order (Qt.SortOrder) (for special sorting)
    Returns:
    true, if this item is less than other (boolean)


    BrowserDirectoryItem

    Class implementing the data structure for browser directory items.

    Derived from

    BrowserItem

    Class Attributes

    None

    Class Methods

    None

    Methods

    BrowserDirectoryItem Constructor
    dirName Public method returning the directory name.
    lessThan Public method to check, if the item is less than the other one.
    name Public method to return the name of the item.
    setName Public method to set the directory name.

    Static Methods

    None

    BrowserDirectoryItem (Constructor)

    BrowserDirectoryItem(parent, dinfo, full = True)

    Constructor

    parent
    parent item
    dinfo
    dinfo is the string for the directory (string or QString)
    full
    flag indicating full pathname should be displayed (boolean)

    BrowserDirectoryItem.dirName

    dirName()

    Public method returning the directory name.

    Returns:
    directory name (string)

    BrowserDirectoryItem.lessThan

    lessThan(other, column, order)

    Public method to check, if the item is less than the other one.

    other
    reference to item to compare against (BrowserItem)
    column
    column number to use for the comparison (integer)
    order
    sort order (Qt.SortOrder) (for special sorting)
    Returns:
    true, if this item is less than other (boolean)

    BrowserDirectoryItem.name

    name()

    Public method to return the name of the item.

    Returns:
    name of the item (string)

    BrowserDirectoryItem.setName

    setName(dinfo, full = True)

    Public method to set the directory name.

    dinfo
    dinfo is the string for the directory (string or QString)
    full
    flag indicating full pathname should be displayed (boolean)


    BrowserFileItem

    Class implementing the data structure for browser file items.

    Derived from

    BrowserItem

    Class Attributes

    None

    Class Methods

    None

    Methods

    BrowserFileItem Constructor
    dirName Public method returning the directory name.
    fileExt Public method returning the file extension.
    fileName Public method returning the filename.
    isDFile Public method to check, if this file is a D file.
    isDesignerFile Public method to check, if this file is a Qt-Designer file.
    isDesignerHeaderFile Public method to check, if this file is a Qt-Designer header file.
    isIdlFile Public method to check, if this file is a CORBA IDL file.
    isLinguistFile Public method to check, if this file is a Qt-Linguist file.
    isMultiProjectFile Public method to check, if this file is an eric4 multi project file.
    isPixmapFile Public method to check, if this file is a pixmap file.
    isProjectFile Public method to check, if this file is an eric4 project file.
    isPython3File Public method to check, if this file is a Python3 script.
    isPythonFile Public method to check, if this file is a Python script.
    isResourcesFile Public method to check, if this file is a Qt-Resources file.
    isRubyFile Public method to check, if this file is a Ruby script.
    isSvgFile Public method to check, if this file is a SVG file.
    lessThan Public method to check, if the item is less than the other one.
    moduleName Public method returning the module name.
    name Public method to return the name of the item.
    setName Public method to set the directory name.

    Static Methods

    None

    BrowserFileItem (Constructor)

    BrowserFileItem(parent, finfo, full = True, sourceLanguage = "")

    Constructor

    parent
    parent item
    finfo
    the string for the file (string)
    full
    flag indicating full pathname should be displayed (boolean)
    sourceLanguage
    source code language of the project (string)

    BrowserFileItem.dirName

    dirName()

    Public method returning the directory name.

    Returns:
    directory name (string)

    BrowserFileItem.fileExt

    fileExt()

    Public method returning the file extension.

    Returns:
    file extension (string)

    BrowserFileItem.fileName

    fileName()

    Public method returning the filename.

    Returns:
    filename (string)

    BrowserFileItem.isDFile

    isDFile()

    Public method to check, if this file is a D file.

    Returns:
    flag indicating a D file (boolean)

    BrowserFileItem.isDesignerFile

    isDesignerFile()

    Public method to check, if this file is a Qt-Designer file.

    Returns:
    flag indicating a Qt-Designer file (boolean)

    BrowserFileItem.isDesignerHeaderFile

    isDesignerHeaderFile()

    Public method to check, if this file is a Qt-Designer header file.

    Returns:
    flag indicating a Qt-Designer header file (boolean)

    BrowserFileItem.isIdlFile

    isIdlFile()

    Public method to check, if this file is a CORBA IDL file.

    Returns:
    flag indicating a CORBA IDL file (boolean)

    BrowserFileItem.isLinguistFile

    isLinguistFile()

    Public method to check, if this file is a Qt-Linguist file.

    Returns:
    flag indicating a Qt-Linguist file (boolean)

    BrowserFileItem.isMultiProjectFile

    isMultiProjectFile()

    Public method to check, if this file is an eric4 multi project file.

    Returns:
    flag indicating an eric4 project file (boolean)

    BrowserFileItem.isPixmapFile

    isPixmapFile()

    Public method to check, if this file is a pixmap file.

    Returns:
    flag indicating a pixmap file (boolean)

    BrowserFileItem.isProjectFile

    isProjectFile()

    Public method to check, if this file is an eric4 project file.

    Returns:
    flag indicating an eric4 project file (boolean)

    BrowserFileItem.isPython3File

    isPython3File()

    Public method to check, if this file is a Python3 script.

    Returns:
    flag indicating a Python file (boolean)

    BrowserFileItem.isPythonFile

    isPythonFile()

    Public method to check, if this file is a Python script.

    Returns:
    flag indicating a Python file (boolean)

    BrowserFileItem.isResourcesFile

    isResourcesFile()

    Public method to check, if this file is a Qt-Resources file.

    Returns:
    flag indicating a Qt-Resources file (boolean)

    BrowserFileItem.isRubyFile

    isRubyFile()

    Public method to check, if this file is a Ruby script.

    Returns:
    flag indicating a Ruby file (boolean)

    BrowserFileItem.isSvgFile

    isSvgFile()

    Public method to check, if this file is a SVG file.

    Returns:
    flag indicating a SVG file (boolean)

    BrowserFileItem.lessThan

    lessThan(other, column, order)

    Public method to check, if the item is less than the other one.

    other
    reference to item to compare against (BrowserItem)
    column
    column number to use for the comparison (integer)
    order
    sort order (Qt.SortOrder) (for special sorting)
    Returns:
    true, if this item is less than other (boolean)

    BrowserFileItem.moduleName

    moduleName()

    Public method returning the module name.

    Returns:
    module name (string)

    BrowserFileItem.name

    name()

    Public method to return the name of the item.

    Returns:
    name of the item (string)

    BrowserFileItem.setName

    setName(finfo, full = True)

    Public method to set the directory name.

    finfo
    the string for the file (string)
    full
    flag indicating full pathname should be displayed (boolean)


    BrowserItem

    Class implementing the data structure for browser items.

    Derived from

    object

    Class Attributes

    None

    Class Methods

    None

    Methods

    BrowserItem Constructor.
    appendChild Public method to add a child to this item.
    child Public method to get a child id.
    childCount Public method to get the number of available child items.
    children Public method to get the ids of all child items.
    columnCount Public method to get the number of available data items.
    data Public method to get a specific data item.
    getIcon Public method to get the items icon.
    isLazyPopulated Public method to check, if this item should be populated lazyly.
    isPopulated Public method to chek, if this item is populated.
    isPublic Public method returning the public visibility status.
    isSymlink Public method to check, if the items is a symbolic link.
    lessThan Public method to check, if the item is less than the other one.
    parent Public method to get the reference to the parent item.
    removeChild Public method to remove a child.
    removeChildren Public method to remove all children.
    row Public method to get the row number of this item.
    type Public method to get the item type.

    Static Methods

    None

    BrowserItem (Constructor)

    BrowserItem(parent, data)

    Constructor.

    parent
    reference to the parent item
    data
    single data of the item

    BrowserItem.appendChild

    appendChild(child)

    Public method to add a child to this item.

    child
    reference to the child item to add (BrowserItem)

    BrowserItem.child

    child(row)

    Public method to get a child id.

    row
    number of child to get the id of (integer)
    return
    reference to the child item (BrowserItem)

    BrowserItem.childCount

    childCount()

    Public method to get the number of available child items.

    Returns:
    number of child items (integer)

    BrowserItem.children

    children()

    Public method to get the ids of all child items.

    Returns:
    references to all child items (list of BrowserItem)

    BrowserItem.columnCount

    columnCount()

    Public method to get the number of available data items.

    Returns:
    number of data items (integer)

    BrowserItem.data

    data(column)

    Public method to get a specific data item.

    column
    number of the requested data item (integer)
    return
    the stored data item

    BrowserItem.getIcon

    getIcon()

    Public method to get the items icon.

    Returns:
    the icon (QIcon)

    BrowserItem.isLazyPopulated

    isLazyPopulated()

    Public method to check, if this item should be populated lazyly.

    Returns:
    lazy population flag (boolean)

    BrowserItem.isPopulated

    isPopulated()

    Public method to chek, if this item is populated.

    Returns:
    population status (boolean)

    BrowserItem.isPublic

    isPublic()

    Public method returning the public visibility status.

    Returns:
    flag indicating public visibility (boolean)

    BrowserItem.isSymlink

    isSymlink()

    Public method to check, if the items is a symbolic link.

    Returns:
    flag indicating a symbolic link (boolean)

    BrowserItem.lessThan

    lessThan(other, column, order)

    Public method to check, if the item is less than the other one.

    other
    reference to item to compare against (BrowserItem)
    column
    column number to use for the comparison (integer)
    order
    sort order (Qt.SortOrder) (for special sorting)
    Returns:
    true, if this item is less than other (boolean)

    BrowserItem.parent

    parent()

    Public method to get the reference to the parent item.

    Returns:
    reference to the parent item

    BrowserItem.removeChild

    removeChild(child)

    Public method to remove a child.

    child
    reference to the child to remove (BrowserItem)

    BrowserItem.removeChildren

    removeChildren()

    Public method to remove all children.

    BrowserItem.row

    row()

    Public method to get the row number of this item.

    Returns:
    row number (integer)

    BrowserItem.type

    type()

    Public method to get the item type.

    Returns:
    type of the item


    BrowserMethodItem

    Class implementing the data structure for browser method items.

    Derived from

    BrowserItem

    Class Attributes

    None

    Class Methods

    None

    Methods

    BrowserMethodItem Constructor
    fileName Public method returning the filename.
    functionObject Public method returning the function object.
    isPublic Public method returning the public visibility status.
    lessThan Public method to check, if the item is less than the other one.
    lineno Public method returning the line number defining this object.

    Static Methods

    None

    BrowserMethodItem (Constructor)

    BrowserMethodItem(parent, fn, filename)

    Constructor

    parent
    parent item
    fn
    Function object to be shown
    filename
    filename of the file defining this class

    BrowserMethodItem.fileName

    fileName()

    Public method returning the filename.

    Returns:
    filename (string)

    BrowserMethodItem.functionObject

    functionObject()

    Public method returning the function object.

    Returns:
    reference to the function object

    BrowserMethodItem.isPublic

    isPublic()

    Public method returning the public visibility status.

    Returns:
    flag indicating public visibility (boolean)

    BrowserMethodItem.lessThan

    lessThan(other, column, order)

    Public method to check, if the item is less than the other one.

    other
    reference to item to compare against (BrowserItem)
    column
    column number to use for the comparison (integer)
    order
    sort order (Qt.SortOrder) (for special sorting)
    Returns:
    true, if this item is less than other (boolean)

    BrowserMethodItem.lineno

    lineno()

    Public method returning the line number defining this object.

    return line number defining the object (integer)



    BrowserModel

    Class implementing the browser model.

    Derived from

    QAbstractItemModel

    Class Attributes

    None

    Class Methods

    None

    Methods

    BrowserModel Constructor
    __populateModel Private method to populate the browser model.
    _addItem Protected slot to add an item.
    _addWatchedItem Protected method to watch an item.
    _removeWatchedItem Protected method to remove a watched item.
    addItem Puplic slot to add an item.
    addTopLevelDir Public method to add a new toplevel directory.
    clear Public method to clear the model.
    columnCount Public method to get the number of columns.
    data Public method to get data of an item.
    directoryChanged Public slot to handle the directoryChanged signal of the watcher.
    flags Public method to get the item flags.
    hasChildren Public method to check for the presence of child items.
    headerData Public method to get the header data.
    index Public method to create an index.
    item Public method to get a reference to an item.
    parent Public method to get the index of the parent object.
    populateClassAttributesItem Public method to populate a class attributes item's subtree.
    populateClassItem Public method to populate a class item's subtree.
    populateDirectoryItem Public method to populate a directory item's subtree.
    populateFileItem Public method to populate a file item's subtree.
    populateItem Public method to populate an item's subtree.
    populateMethodItem Public method to populate a method item's subtree.
    populateSysPathItem Public method to populate a sys.path item's subtree.
    programChange Public method to change the entry for the directory of file being debugged.
    removeToplevelDir Public method to remove a toplevel directory.
    rowCount Public method to get the number of rows.
    saveToplevelDirs Public slot to save the toplevel directories.

    Static Methods

    None

    BrowserModel (Constructor)

    BrowserModel(parent = None)

    Constructor

    parent
    reference to parent object (QObject)

    BrowserModel.__populateModel

    __populateModel()

    Private method to populate the browser model.

    BrowserModel._addItem

    _addItem(itm, parentItem)

    Protected slot to add an item.

    itm
    reference to item to add (BrowserItem)
    parentItem
    reference to item to add to (BrowserItem)

    BrowserModel._addWatchedItem

    _addWatchedItem(itm)

    Protected method to watch an item.

    itm
    item to be watched (BrowserDirectoryItem)

    BrowserModel._removeWatchedItem

    _removeWatchedItem(itm)

    Protected method to remove a watched item.

    itm
    item to be removed (BrowserDirectoryItem)

    BrowserModel.addItem

    addItem(itm, parent = QModelIndex())

    Puplic slot to add an item.

    itm
    item to add (BrowserItem)
    parent
    index of parent item (QModelIndex)

    BrowserModel.addTopLevelDir

    addTopLevelDir(dirname)

    Public method to add a new toplevel directory.

    dirname
    name of the new toplevel directory (string or QString)

    BrowserModel.clear

    clear()

    Public method to clear the model.

    BrowserModel.columnCount

    columnCount(parent=QModelIndex())

    Public method to get the number of columns.

    parent
    index of parent item (QModelIndex)
    Returns:
    number of columns (integer)

    BrowserModel.data

    data(index, role)

    Public method to get data of an item.

    index
    index of the data to retrieve (QModelIndex)
    role
    role of data (Qt.ItemDataRole)
    Returns:
    requested data (QVariant)

    BrowserModel.directoryChanged

    directoryChanged(path)

    Public slot to handle the directoryChanged signal of the watcher.

    path
    path of the directory (string)

    BrowserModel.flags

    flags(index)

    Public method to get the item flags.

    index
    index of the data to retrieve (QModelIndex)
    Returns:
    requested flags (Qt.ItemFlags)

    BrowserModel.hasChildren

    hasChildren(parent = QModelIndex())

    Public method to check for the presence of child items.

    We always return True for normal items in order to do lazy population of the tree.

    parent
    index of parent item (QModelIndex)
    Returns:
    flag indicating the presence of child items (boolean)

    BrowserModel.headerData

    headerData(section, orientation, role = Qt.DisplayRole)

    Public method to get the header data.

    section
    number of section to get data for (integer)
    orientation
    header orientation (Qt.Orientation)
    role
    role of data (Qt.ItemDataRole)
    Returns:
    requested header data (QVariant)

    BrowserModel.index

    index(row, column, parent = QModelIndex())

    Public method to create an index.

    row
    row number of the new index (integer)
    column
    column number of the new index (integer)
    parent
    index of parent item (QModelIndex)
    Returns:
    index object (QModelIndex)

    BrowserModel.item

    item(index)

    Public method to get a reference to an item.

    index
    index of the data to retrieve (QModelIndex)
    Returns:
    requested item reference (BrowserItem)

    BrowserModel.parent

    parent(index)

    Public method to get the index of the parent object.

    index
    index of the item (QModelIndex)
    Returns:
    index of parent item (QModelIndex)

    BrowserModel.populateClassAttributesItem

    populateClassAttributesItem(parentItem, repopulate = False)

    Public method to populate a class attributes item's subtree.

    parentItem
    reference to the class attributes item to be populated
    repopulate
    flag indicating a repopulation (boolean)

    BrowserModel.populateClassItem

    populateClassItem(parentItem, repopulate = False)

    Public method to populate a class item's subtree.

    parentItem
    reference to the class item to be populated
    repopulate
    flag indicating a repopulation (boolean)

    BrowserModel.populateDirectoryItem

    populateDirectoryItem(parentItem, repopulate = False)

    Public method to populate a directory item's subtree.

    parentItem
    reference to the directory item to be populated
    repopulate
    flag indicating a repopulation (boolean)

    BrowserModel.populateFileItem

    populateFileItem(parentItem, repopulate = False)

    Public method to populate a file item's subtree.

    parentItem
    reference to the file item to be populated
    repopulate
    flag indicating a repopulation (boolean)

    BrowserModel.populateItem

    populateItem(parentItem, repopulate = False)

    Public method to populate an item's subtree.

    parentItem
    reference to the item to be populated
    repopulate
    flag indicating a repopulation (boolean)

    BrowserModel.populateMethodItem

    populateMethodItem(parentItem, repopulate = False)

    Public method to populate a method item's subtree.

    parentItem
    reference to the method item to be populated
    repopulate
    flag indicating a repopulation (boolean)

    BrowserModel.populateSysPathItem

    populateSysPathItem(parentItem, repopulate = False)

    Public method to populate a sys.path item's subtree.

    parentItem
    reference to the sys.path item to be populated
    repopulate
    flag indicating a repopulation (boolean)

    BrowserModel.programChange

    programChange(dirname)

    Public method to change the entry for the directory of file being debugged.

    dirname
    name of the directory containing the file (string or QString)

    BrowserModel.removeToplevelDir

    removeToplevelDir(index)

    Public method to remove a toplevel directory.

    index
    index of the toplevel directory to be removed (QModelIndex)

    BrowserModel.rowCount

    rowCount(parent = QModelIndex())

    Public method to get the number of rows.

    parent
    index of parent item (QModelIndex)
    Returns:
    number of rows (integer)

    BrowserModel.saveToplevelDirs

    saveToplevelDirs()

    Public slot to save the toplevel directories.



    BrowserSysPathItem

    Class implementing the data structure for browser sys.path items.

    Derived from

    BrowserItem

    Class Attributes

    None

    Class Methods

    None

    Methods

    BrowserSysPathItem Constructor

    Static Methods

    None

    BrowserSysPathItem (Constructor)

    BrowserSysPathItem(parent)

    Constructor

    parent
    parent item

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.QScintilla.html0000644000175000001440000000013212261331354025625 xustar000000000000000030 mtime=1388688108.658230142 30 atime=1389081085.178724358 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.QScintilla.html0000644000175000001440000000640112261331354025360 0ustar00detlevusers00000000000000 eric4.QScintilla

    eric4.QScintilla

    Package implementing the editor and shell components of the eric4 IDE.

    The editor component of the eric4 IDE is based on the Qt port of the Scintilla editor widget. It supports syntax highlighting, code folding, has an interface to the integrated debugger and can be configured to the most possible degree.

    The shell component is derived from the editor component and is the visible component of the interactive language shell. It interacts with the debug client through the debug server.

    Packages

    Exporters Package implementing exporters for various file formats.
    Lexers Package implementing lexers for the various supported programming languages.
    TypingCompleters Package implementing lexers for the various supported programming languages.

    Modules

    APIsManager Module implementing the APIsManager.
    Editor Module implementing the editor component of the eric4 IDE.
    GotoDialog Module implementing the Goto dialog.
    MiniEditor Module implementing a minimalistic editor for simple editing tasks.
    Printer Module implementing the printer functionality.
    QsciScintillaCompat Module implementing a compatability interface class to QsciScintilla.
    SearchReplaceWidget Module implementing the search and replace widget.
    Shell Module implementing a graphical Python shell.
    ShellHistoryDialog Module implementing the shell history dialog.
    SpellChecker Module implementing the spell checker for the editor component.
    SpellCheckingDialog Module implementing the spell checking dialog.
    ZoomDialog Module implementing a dialog to select the zoom scale.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.PluginAbout.html0000644000175000001440000000013212261331350026322 xustar000000000000000030 mtime=1388688104.493228051 30 atime=1389081085.178724358 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.PluginAbout.html0000644000175000001440000001005512261331350026055 0ustar00detlevusers00000000000000 eric4.Plugins.PluginAbout

    eric4.Plugins.PluginAbout

    Module implementing the About plugin.

    Global Attributes

    author
    autoactivate
    className
    deactivateable
    error
    longDescription
    name
    packageName
    shortDescription
    version

    Classes

    AboutPlugin Class implementing the About plugin.

    Functions

    None


    AboutPlugin

    Class implementing the About plugin.

    Derived from

    QObject

    Class Attributes

    None

    Class Methods

    None

    Methods

    AboutPlugin Constructor
    __about Private slot to handle the About dialog.
    __aboutKde Private slot to handle the About KDE dialog.
    __aboutQt Private slot to handle the About Qt dialog.
    __initActions Private method to initialize the actions.
    __initMenu Private method to add the actions to the right menu.
    activate Public method to activate this plugin.
    deactivate Public method to deactivate this plugin.

    Static Methods

    None

    AboutPlugin (Constructor)

    AboutPlugin(ui)

    Constructor

    ui
    reference to the user interface object (UI.UserInterface)

    AboutPlugin.__about

    __about()

    Private slot to handle the About dialog.

    AboutPlugin.__aboutKde

    __aboutKde()

    Private slot to handle the About KDE dialog.

    AboutPlugin.__aboutQt

    __aboutQt()

    Private slot to handle the About Qt dialog.

    AboutPlugin.__initActions

    __initActions()

    Private method to initialize the actions.

    AboutPlugin.__initMenu

    __initMenu()

    Private method to add the actions to the right menu.

    AboutPlugin.activate

    activate()

    Public method to activate this plugin.

    Returns:
    tuple of None and activation status (boolean)

    AboutPlugin.deactivate

    deactivate()

    Public method to deactivate this plugin.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.ConfigurationPages.Debugger0000644000175000001440000000013212261331353031263 xustar000000000000000030 mtime=1388688107.512229567 30 atime=1389081085.178724358 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.ConfigurationPages.DebuggerPythonPage.html0000644000175000001440000000654412261331353033770 0ustar00detlevusers00000000000000 eric4.Preferences.ConfigurationPages.DebuggerPythonPage

    eric4.Preferences.ConfigurationPages.DebuggerPythonPage

    Module implementing the Debugger Python configuration page.

    Global Attributes

    None

    Classes

    DebuggerPythonPage Class implementing the Debugger Python configuration page.

    Functions

    create Module function to create the configuration page.


    DebuggerPythonPage

    Class implementing the Debugger Python configuration page.

    Derived from

    ConfigurationPageBase, Ui_DebuggerPythonPage

    Class Attributes

    None

    Class Methods

    None

    Methods

    DebuggerPythonPage Constructor
    on_debugClientButton_clicked Private slot to handle the Debug Client selection.
    on_interpreterButton_clicked Private slot to handle the Python interpreter selection.
    save Public slot to save the Debugger Python configuration.

    Static Methods

    None

    DebuggerPythonPage (Constructor)

    DebuggerPythonPage()

    Constructor

    DebuggerPythonPage.on_debugClientButton_clicked

    on_debugClientButton_clicked()

    Private slot to handle the Debug Client selection.

    DebuggerPythonPage.on_interpreterButton_clicked

    on_interpreterButton_clicked()

    Private slot to handle the Python interpreter selection.

    DebuggerPythonPage.save

    save()

    Public slot to save the Debugger Python configuration.



    create

    create(dlg)

    Module function to create the configuration page.

    dlg
    reference to the configuration dialog

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.Lexers.LexerRuby.html0000644000175000001440000000013212261331354027701 xustar000000000000000030 mtime=1388688108.507230066 30 atime=1389081085.178724358 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.Lexers.LexerRuby.html0000644000175000001440000000754712261331354027450 0ustar00detlevusers00000000000000 eric4.QScintilla.Lexers.LexerRuby

    eric4.QScintilla.Lexers.LexerRuby

    Module implementing a Ruby lexer with some additional methods.

    Global Attributes

    None

    Classes

    LexerRuby Subclass to implement some additional lexer dependent methods.

    Functions

    None


    LexerRuby

    Subclass to implement some additional lexer dependent methods.

    Derived from

    QsciLexerRuby, Lexer

    Class Attributes

    None

    Class Methods

    None

    Methods

    LexerRuby Constructor
    autoCompletionWordSeparators Public method to return the list of separators for autocompletion.
    defaultKeywords Public method to get the default keywords.
    initProperties Public slot to initialize the properties.
    isCommentStyle Public method to check, if a style is a comment style.
    isStringStyle Public method to check, if a style is a string style.

    Static Methods

    None

    LexerRuby (Constructor)

    LexerRuby(parent=None)

    Constructor

    parent
    parent widget of this lexer

    LexerRuby.autoCompletionWordSeparators

    autoCompletionWordSeparators()

    Public method to return the list of separators for autocompletion.

    Returns:
    list of separators (QStringList)

    LexerRuby.defaultKeywords

    defaultKeywords(kwSet)

    Public method to get the default keywords.

    kwSet
    number of the keyword set (integer)
    Returns:
    string giving the keywords (string) or None

    LexerRuby.initProperties

    initProperties()

    Public slot to initialize the properties.

    LexerRuby.isCommentStyle

    isCommentStyle(style)

    Public method to check, if a style is a comment style.

    Returns:
    flag indicating a comment style (boolean)

    LexerRuby.isStringStyle

    isStringStyle(style)

    Public method to check, if a style is a string style.

    Returns:
    flag indicating a string style (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsPySvn.SvnCopyDial0000644000175000001440000000013212261331353031212 xustar000000000000000030 mtime=1388688107.127229373 30 atime=1389081085.179724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsPySvn.SvnCopyDialog.html0000644000175000001440000000667712261331353032255 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsPySvn.SvnCopyDialog

    eric4.Plugins.VcsPlugins.vcsPySvn.SvnCopyDialog

    Module implementing a dialog to enter the data for a copy operation.

    Global Attributes

    None

    Classes

    SvnCopyDialog Class implementing a dialog to enter the data for a copy or rename operation.

    Functions

    None


    SvnCopyDialog

    Class implementing a dialog to enter the data for a copy or rename operation.

    Derived from

    QDialog, Ui_SvnCopyDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnCopyDialog Constructor
    getData Public method to retrieve the copy data.
    on_dirButton_clicked Private slot to handle the button press for selecting the target via a selection dialog.
    on_targetEdit_textChanged Private slot to handle changes of the target.

    Static Methods

    None

    SvnCopyDialog (Constructor)

    SvnCopyDialog(source, parent = None, move = False, force = False)

    Constructor

    source
    name of the source file/directory (QString)
    parent
    parent widget (QWidget)
    move
    flag indicating a move operation (boolean)
    force
    flag indicating a forced operation (boolean)

    SvnCopyDialog.getData

    getData()

    Public method to retrieve the copy data.

    Returns:
    the target name (QString) and a flag indicating the operation should be enforced (boolean)

    SvnCopyDialog.on_dirButton_clicked

    on_dirButton_clicked()

    Private slot to handle the button press for selecting the target via a selection dialog.

    SvnCopyDialog.on_targetEdit_textChanged

    on_targetEdit_textChanged(txt)

    Private slot to handle changes of the target.

    txt
    contents of the target edit (QString)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsPySvn.SvnTagBranc0000644000175000001440000000013212261331353031167 xustar000000000000000030 mtime=1388688107.019229319 30 atime=1389081085.179724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsPySvn.SvnTagBranchListDialog.html0000644000175000001440000001322212261331353034010 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsPySvn.SvnTagBranchListDialog

    eric4.Plugins.VcsPlugins.vcsPySvn.SvnTagBranchListDialog

    Module implementing a dialog to show a list of tags or branches.

    Global Attributes

    None

    Classes

    SvnTagBranchListDialog Class implementing a dialog to show a list of tags or branches.

    Functions

    None


    SvnTagBranchListDialog

    Class implementing a dialog to show a list of tags or branches.

    Derived from

    QDialog, SvnDialogMixin, Ui_SvnTagBranchListDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    SvnTagBranchListDialog Constructor
    __finish Private slot called when the process finished or the user pressed the button.
    __generateItem Private method to generate a tag item in the taglist.
    __resizeColumns Private method to resize the list columns.
    __resort Private method to resort the tree.
    __showError Private slot to show an error message.
    getTagList Public method to get the taglist of the last run.
    on_buttonBox_clicked Private slot called by a button of the button box clicked.
    start Public slot to start the svn status command.

    Static Methods

    None

    SvnTagBranchListDialog (Constructor)

    SvnTagBranchListDialog(vcs, parent = None)

    Constructor

    vcs
    reference to the vcs object
    parent
    parent widget (QWidget)

    SvnTagBranchListDialog.__finish

    __finish()

    Private slot called when the process finished or the user pressed the button.

    SvnTagBranchListDialog.__generateItem

    __generateItem(revision, author, date, name)

    Private method to generate a tag item in the taglist.

    revision
    revision number (integer)
    author
    author of the tag (string or QString)
    date
    date of the tag (string or QString)
    name
    name (path) of the tag (string or QString)

    SvnTagBranchListDialog.__resizeColumns

    __resizeColumns()

    Private method to resize the list columns.

    SvnTagBranchListDialog.__resort

    __resort()

    Private method to resort the tree.

    SvnTagBranchListDialog.__showError

    __showError(msg)

    Private slot to show an error message.

    msg
    error message to show (string or QString)

    SvnTagBranchListDialog.getTagList

    getTagList()

    Public method to get the taglist of the last run.

    Returns:
    list of tags (QStringList)

    SvnTagBranchListDialog.on_buttonBox_clicked

    on_buttonBox_clicked(button)

    Private slot called by a button of the button box clicked.

    button
    button that was clicked (QAbstractButton)

    SvnTagBranchListDialog.start

    start(path, tags = True)

    Public slot to start the svn status command.

    path
    name of directory to be listed (string)
    tags
    flag indicating a list of tags is requested (False = branches, True = tags)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.PreferencesLexer.html0000644000175000001440000000013212261331350030152 xustar000000000000000030 mtime=1388688104.549228079 30 atime=1389081085.179724359 30 ctime=1389081086.310724332 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.PreferencesLexer.html0000644000175000001440000002551412261331350027713 0ustar00detlevusers00000000000000 eric4.Preferences.PreferencesLexer

    eric4.Preferences.PreferencesLexer

    Module implementing a special QextScintilla lexer to handle the preferences.

    Global Attributes

    None

    Classes

    PreferencesLexer Subclass of QsciLexer to implement preferences specific lexer methods.
    PreferencesLexerError Class defining a special error for the PreferencesLexer class.
    PreferencesLexerLanguageError Class defining a special error for the PreferencesLexer class.

    Functions

    None


    PreferencesLexer

    Subclass of QsciLexer to implement preferences specific lexer methods.

    Derived from

    QsciLexer

    Class Attributes

    None

    Class Methods

    None

    Methods

    PreferencesLexer Constructor
    color Public method to get the colour of a style.
    defaulEolFill Public method to get the default eolFill flag for a style.
    defaultColor Public method to get the default colour of a style.
    defaultFont Public method to get the default font for a style.
    defaultPaper Public method to get the default background for a style.
    description Public method to get a descriptive string for a style.
    eolFill Public method to get the eolFill flag for a style.
    font Public method to get the font for a style.
    language Public method to get the lexers programming language.
    paper Public method to get the background for a style.
    setColor Public method to set the colour for a style.
    setEolFill Public method to set the eolFill flag for a style.
    setFont Public method to set the font for a style.
    setPaper Public method to set the background for a style.

    Static Methods

    None

    PreferencesLexer (Constructor)

    PreferencesLexer(language, parent=None)

    Constructor

    language
    The lexer language. (string or QString)
    parent
    The parent widget of this lexer. (QextScintilla)

    PreferencesLexer.color

    color(style)

    Public method to get the colour of a style.

    style
    the style number (int)
    Returns:
    colour

    PreferencesLexer.defaulEolFill

    defaulEolFill(style)

    Public method to get the default eolFill flag for a style.

    style
    the style number (int)
    Returns:
    eolFill flag

    PreferencesLexer.defaultColor

    defaultColor(style)

    Public method to get the default colour of a style.

    style
    the style number (int)
    Returns:
    colour

    PreferencesLexer.defaultFont

    defaultFont(style)

    Public method to get the default font for a style.

    style
    the style number (int)
    Returns:
    font

    PreferencesLexer.defaultPaper

    defaultPaper(style)

    Public method to get the default background for a style.

    style
    the style number (int)
    Returns:
    colour

    PreferencesLexer.description

    description(style)

    Public method to get a descriptive string for a style.

    style
    the style number (int)
    Returns:
    description of the style (QString)

    PreferencesLexer.eolFill

    eolFill(style)

    Public method to get the eolFill flag for a style.

    style
    the style number (int)
    Returns:
    eolFill flag

    PreferencesLexer.font

    font(style)

    Public method to get the font for a style.

    style
    the style number (int)
    Returns:
    font

    PreferencesLexer.language

    language()

    Public method to get the lexers programming language.

    Returns:
    language

    PreferencesLexer.paper

    paper(style)

    Public method to get the background for a style.

    style
    the style number (int)
    Returns:
    colour

    PreferencesLexer.setColor

    setColor(c, style)

    Public method to set the colour for a style.

    c
    colour (int)
    style
    the style number (int)

    PreferencesLexer.setEolFill

    setEolFill(eolfill, style)

    Public method to set the eolFill flag for a style.

    eolfill
    eolFill flag (boolean)
    style
    the style number (int)

    PreferencesLexer.setFont

    setFont(f, style)

    Public method to set the font for a style.

    f
    font
    style
    the style number (int)

    PreferencesLexer.setPaper

    setPaper(c, style)

    Public method to set the background for a style.

    c
    colour (int)
    style
    the style number (int)


    PreferencesLexerError

    Class defining a special error for the PreferencesLexer class.

    Derived from

    Exception

    Class Attributes

    None

    Class Methods

    None

    Methods

    PreferencesLexerError Constructor
    __repr__ Private method returning a representation of the exception.
    __str__ Private method returning a string representation of the exception.

    Static Methods

    None

    PreferencesLexerError (Constructor)

    PreferencesLexerError()

    Constructor

    PreferencesLexerError.__repr__

    __repr__()

    Private method returning a representation of the exception.

    Returns:
    string representing the error message

    PreferencesLexerError.__str__

    __str__()

    Private method returning a string representation of the exception.

    Returns:
    string representing the error message


    PreferencesLexerLanguageError

    Class defining a special error for the PreferencesLexer class.

    Derived from

    PreferencesLexerError

    Class Attributes

    None

    Class Methods

    None

    Methods

    PreferencesLexerLanguageError Constructor

    Static Methods

    None

    PreferencesLexerLanguageError (Constructor)

    PreferencesLexerLanguageError(language)

    Constructor


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Preferences.__init__.html0000644000175000001440000000013212261331350026450 xustar000000000000000030 mtime=1388688104.544228077 30 atime=1389081085.179724359 30 ctime=1389081086.311724332 eric4-4.5.18/eric/Documentation/Source/eric4.Preferences.__init__.html0000644000175000001440000014763012261331350026215 0ustar00detlevusers00000000000000 eric4.Preferences.__init__

    eric4.Preferences.__init__

    Package implementing the preferences interface.

    The preferences interface consists of a class, which defines the default values for all configuration items and stores the actual values. These values are read and written to the eric4 preferences file by module functions. The data is stored in a file in a subdirectory of the users home directory. The individual configuration data is accessed by accessor functions defined on the module level. The module is simply imported wherever it is needed with the statement 'import Preferences'. Do not use 'from Preferences import *' to import it.

    Global Attributes

    None

    Classes

    Prefs A class to hold all configuration items for the application.

    Functions

    exportPreferences Module function to export the current preferences.
    getCorba Module function to retrieve the various corba settings.
    getDebugger Module function to retrieve the debugger settings.
    getEditor Module function to retrieve the various editor settings.
    getEditorAPI Module function to retrieve the various lists of api files.
    getEditorColour Module function to retrieve the various editor marker colours.
    getEditorExporter Module function to retrieve the various editor exporters settings.
    getEditorKeywords Module function to retrieve the various lists of language keywords.
    getEditorLexerAssoc Module function to retrieve a lexer association.
    getEditorLexerAssocs Module function to retrieve all lexer associations.
    getEditorOtherFonts Module function to retrieve the various editor fonts except the lexer fonts.
    getEditorTyping Module function to retrieve the various editor typing settings.
    getGeometry Module function to retrieve the display geometry.
    getGraphics Module function to retrieve the Graphics related settings.
    getHelp Module function to retrieve the various help settings.
    getIconEditor Module function to retrieve the Icon Editor related settings.
    getIcons Module function to retrieve the various Icons settings.
    getMultiProject Module function to retrieve the various project handling settings.
    getPluginManager Module function to retrieve the plugin manager related settings.
    getPrinter Module function to retrieve the various printer settings.
    getProject Module function to retrieve the various project handling settings.
    getProjectBrowserColour Module function to retrieve the various project browser colours.
    getProjectBrowserFlags Module function to retrieve the various project browser flags settings.
    getPython Module function to retrieve the Python settings.
    getQt Module function to retrieve the various Qt settings.
    getQt4DocDir Module function to retrieve the Qt4DocDir setting.
    getQt4TranslationsDir Module function to retrieve the Qt4TranslationsDir setting.
    getShell Module function to retrieve the various shell settings.
    getSystem Module function to retrieve the various system settings.
    getTasks Module function to retrieve the Tasks related settings.
    getTemplates Module function to retrieve the Templates related settings.
    getTrayStarter Module function to retrieve the tray starter related settings.
    getUI Module function to retrieve the various UI settings.
    getUILanguage Module function to retrieve the language for the user interface.
    getUILayout Module function to retrieve the layout for the user interface.
    getUser Module function to retrieve the various user settings.
    getVCS Module function to retrieve the VCS related settings.
    getVarFilters Module function to retrieve the variables filter settings.
    getViewManager Module function to retrieve the selected viewmanager type.
    importPreferences Module function to import preferences from a file previously saved by the export function.
    initPreferences Module function to initialize the central configuration store.
    initRecentSettings Module function to initialize the central configuration store for recently opened files and projects.
    isConfigured Module function to check, if the the application has been configured.
    readToolGroups Module function to read the tool groups configuration.
    removeProjectBrowserFlags Module function to remove a project browser flags setting.
    resetLayout Module function to set a flag not storing the current layout.
    saveResetLayout Module function to save the reset layout.
    saveToolGroups Module function to write the tool groups configuration.
    setCorba Module function to store the various corba settings.
    setDebugger Module function to store the debugger settings.
    setEditor Module function to store the various editor settings.
    setEditorAPI Module function to store the various lists of api files.
    setEditorColour Module function to store the various editor marker colours.
    setEditorExporter Module function to store the various editor exporters settings.
    setEditorKeywords Module function to store the various lists of language keywords.
    setEditorLexerAssocs Module function to retrieve all lexer associations.
    setEditorOtherFonts Module function to store the various editor fonts except the lexer fonts.
    setEditorTyping Module function to store the various editor typing settings.
    setGeometry Module function to store the display geometry.
    setGraphics Module function to store the Graphics related settings.
    setHelp Module function to store the various help settings.
    setIconEditor Module function to store the Icon Editor related settings.
    setIcons Module function to store the various Icons settings.
    setMultiProject Module function to store the various project handling settings.
    setPluginManager Module function to store the plugin manager related settings.
    setPrinter Module function to store the various printer settings.
    setProject Module function to store the various project handling settings.
    setProjectBrowserColour Module function to store the various project browser colours.
    setProjectBrowserFlags Module function to store the various project browser flags settings.
    setProjectBrowserFlagsDefault Module function to store the various project browser flags settings.
    setPython Module function to store the Python settings.
    setQt Module function to store the various Qt settings.
    setShell Module function to store the various shell settings.
    setSystem Module function to store the various system settings.
    setTasks Module function to store the Tasks related settings.
    setTemplates Module function to store the Templates related settings.
    setTrayStarter Module function to store the tray starter related settings.
    setUI Module function to store the various UI settings.
    setUILanguage Module function to store the language for the user interface.
    setUILayout Module function to store the layout for the user interface.
    setUser Module function to store the various user settings.
    setVCS Module function to store the VCS related settings.
    setVarFilters Module function to store the variables filter settings.
    setViewManager Module function to store the selected viewmanager type.
    shouldResetLayout Module function to indicate a reset of the layout.
    syncPreferences Module function to sync the preferences to disk.


    Prefs

    A class to hold all configuration items for the application.

    Derived from

    object

    Class Attributes

    corbaDefaults
    debuggerDefaults
    editorColourDefaults
    editorDefaults
    editorExporterDefaults
    editorOtherFontsDefaults
    editorTypingDefaults
    geometryDefaults
    graphicsDefaults
    helpDefaults
    iconEditorDefaults
    iconsDefaults
    multiProjectDefaults
    pluginManagerDefaults
    printerDefaults
    projectBrowserColourDefaults
    projectBrowserFlagsDefaults
    projectDefaults
    qtDefaults
    resetLayout
    shellDefaults
    tasksDefaults
    templatesDefaults
    trayStarterDefaults
    uiDefaults
    userDefaults
    varDefaults
    vcsDefaults
    viewProfilesLength
    webSettingsIntitialized

    Class Methods

    initWebSettingsDefaults Class method to initialize the web settings related defaults.

    Methods

    None

    Static Methods

    None

    Prefs.initWebSettingsDefaults (class method)

    initWebSettingsDefaults()

    Class method to initialize the web settings related defaults.



    exportPreferences

    exportPreferences(prefClass = Prefs)

    Module function to export the current preferences.

    prefClass
    preferences class used as the storage area


    getCorba

    getCorba(key, prefClass = Prefs)

    Module function to retrieve the various corba settings.

    key
    the key of the value to get
    prefClass
    preferences class used as the storage area
    Returns:
    the requested corba setting


    getDebugger

    getDebugger(key, prefClass = Prefs)

    Module function to retrieve the debugger settings.

    key
    the key of the value to get
    prefClass
    preferences class used as the storage area
    Returns:
    the requested debugger setting


    getEditor

    getEditor(key, prefClass = Prefs)

    Module function to retrieve the various editor settings.

    key
    the key of the value to get
    prefClass
    preferences class used as the storage area
    Returns:
    the requested editor setting


    getEditorAPI

    getEditorAPI(key, prefClass = Prefs)

    Module function to retrieve the various lists of api files.

    key
    the key of the value to get
    prefClass
    preferences class used as the storage area
    Returns:
    the requested list of api files (QStringList)


    getEditorColour

    getEditorColour(key, prefClass = Prefs)

    Module function to retrieve the various editor marker colours.

    key
    the key of the value to get
    prefClass
    preferences class used as the storage area
    Returns:
    the requested editor colour


    getEditorExporter

    getEditorExporter(key, prefClass = Prefs)

    Module function to retrieve the various editor exporters settings.

    key
    the key of the value to get
    prefClass
    preferences class used as the storage area
    Returns:
    the requested editor setting


    getEditorKeywords

    getEditorKeywords(key, prefClass = Prefs)

    Module function to retrieve the various lists of language keywords.

    key
    the key of the value to get
    prefClass
    preferences class used as the storage area
    Returns:
    the requested list of language keywords (QStringList)


    getEditorLexerAssoc

    getEditorLexerAssoc(filename, prefClass = Prefs)

    Module function to retrieve a lexer association.

    filename
    filename used to determine the associated lexer language (string)
    prefClass
    preferences class used as the storage area
    Returns:
    the requested lexer language (string)


    getEditorLexerAssocs

    getEditorLexerAssocs(prefClass = Prefs)

    Module function to retrieve all lexer associations.

    prefClass
    preferences class used as the storage area
    Returns:
    a reference to the list of lexer associations (dictionary of strings)


    getEditorOtherFonts

    getEditorOtherFonts(key, prefClass = Prefs)

    Module function to retrieve the various editor fonts except the lexer fonts.

    key
    the key of the value to get
    prefClass
    preferences class used as the storage area
    Returns:
    the requested editor font (QFont)


    getEditorTyping

    getEditorTyping(key, prefClass = Prefs)

    Module function to retrieve the various editor typing settings.

    key
    the key of the value to get
    prefClass
    preferences class used as the storage area
    Returns:
    the requested editor setting


    getGeometry

    getGeometry(key, prefClass = Prefs)

    Module function to retrieve the display geometry.

    key
    the key of the value to get
    prefClass
    preferences class used as the storage area
    Returns:
    the requested geometry setting


    getGraphics

    getGraphics(key, prefClass = Prefs)

    Module function to retrieve the Graphics related settings.

    key
    the key of the value to get
    prefClass
    preferences class used as the storage area
    Returns:
    the requested user setting


    getHelp

    getHelp(key, prefClass = Prefs)

    Module function to retrieve the various help settings.

    key
    the key of the value to get
    prefClass
    preferences class used as the storage area
    Returns:
    the requested help setting


    getIconEditor

    getIconEditor(key, prefClass = Prefs)

    Module function to retrieve the Icon Editor related settings.

    key
    the key of the value to get
    prefClass
    preferences class used as the storage area
    Returns:
    the requested user setting


    getIcons

    getIcons(key, prefClass = Prefs)

    Module function to retrieve the various Icons settings.

    key
    the key of the value to get
    prefClass
    preferences class used as the storage area
    Returns:
    the requested Icons setting


    getMultiProject

    getMultiProject(key, prefClass = Prefs)

    Module function to retrieve the various project handling settings.

    key
    the key of the value to get
    prefClass
    preferences class used as the storage area
    Returns:
    the requested project setting


    getPluginManager

    getPluginManager(key, prefClass = Prefs)

    Module function to retrieve the plugin manager related settings.

    key
    the key of the value to get
    prefClass
    preferences class used as the storage area
    Returns:
    the requested user setting


    getPrinter

    getPrinter(key, prefClass = Prefs)

    Module function to retrieve the various printer settings.

    key
    the key of the value to get
    prefClass
    preferences class used as the storage area
    Returns:
    the requested printer setting


    getProject

    getProject(key, prefClass = Prefs)

    Module function to retrieve the various project handling settings.

    key
    the key of the value to get
    prefClass
    preferences class used as the storage area
    Returns:
    the requested project setting


    getProjectBrowserColour

    getProjectBrowserColour(key, prefClass = Prefs)

    Module function to retrieve the various project browser colours.

    key
    the key of the value to get
    prefClass
    preferences class used as the storage area
    Returns:
    the requested project browser colour


    getProjectBrowserFlags

    getProjectBrowserFlags(key, prefClass = Prefs)

    Module function to retrieve the various project browser flags settings.

    key
    the key of the value to get
    prefClass
    preferences class used as the storage area
    Returns:
    the requested project setting


    getPython

    getPython(key, prefClass = Prefs)

    Module function to retrieve the Python settings.

    key
    the key of the value to get
    prefClass
    preferences class used as the storage area
    Returns:
    the requested debugger setting


    getQt

    getQt(key, prefClass = Prefs)

    Module function to retrieve the various Qt settings.

    key
    the key of the value to get
    prefClass
    preferences class used as the storage area
    Returns:
    the requested Qt setting


    getQt4DocDir

    getQt4DocDir(prefClass = Prefs)

    Module function to retrieve the Qt4DocDir setting.

    prefClass
    preferences class used as the storage area
    Returns:
    the requested Qt4DocDir setting (string)


    getQt4TranslationsDir

    getQt4TranslationsDir(prefClass = Prefs)

    Module function to retrieve the Qt4TranslationsDir setting.

    prefClass
    preferences class used as the storage area
    Returns:
    the requested Qt4TranslationsDir setting (string)


    getShell

    getShell(key, prefClass = Prefs)

    Module function to retrieve the various shell settings.

    key
    the key of the value to get
    prefClass
    preferences class used as the storage area
    Returns:
    the requested shell setting


    getSystem

    getSystem(key, prefClass = Prefs)

    Module function to retrieve the various system settings.

    key
    the key of the value to get
    prefClass
    preferences class used as the storage area
    Returns:
    the requested system setting


    getTasks

    getTasks(key, prefClass = Prefs)

    Module function to retrieve the Tasks related settings.

    key
    the key of the value to get
    prefClass
    preferences class used as the storage area
    Returns:
    the requested user setting


    getTemplates

    getTemplates(key, prefClass = Prefs)

    Module function to retrieve the Templates related settings.

    key
    the key of the value to get
    prefClass
    preferences class used as the storage area
    Returns:
    the requested user setting


    getTrayStarter

    getTrayStarter(key, prefClass = Prefs)

    Module function to retrieve the tray starter related settings.

    key
    the key of the value to get
    prefClass
    preferences class used as the storage area
    Returns:
    the requested user setting


    getUI

    getUI(key, prefClass = Prefs)

    Module function to retrieve the various UI settings.

    key
    the key of the value to get
    prefClass
    preferences class used as the storage area
    Returns:
    the requested UI setting


    getUILanguage

    getUILanguage(prefClass = Prefs)

    Module function to retrieve the language for the user interface.

    prefClass
    preferences class used as the storage area
    Returns:
    the language for the UI


    getUILayout

    getUILayout(prefClass = Prefs)

    Module function to retrieve the layout for the user interface.

    prefClass
    preferences class used as the storage area
    Returns:
    the UI layout as a tuple of main layout, flag for an embedded shell and a value for an embedded file browser


    getUser

    getUser(key, prefClass = Prefs)

    Module function to retrieve the various user settings.

    key
    the key of the value to get
    prefClass
    preferences class used as the storage area
    Returns:
    the requested user setting


    getVCS

    getVCS(key, prefClass = Prefs)

    Module function to retrieve the VCS related settings.

    key
    the key of the value to get
    prefClass
    preferences class used as the storage area
    Returns:
    the requested user setting


    getVarFilters

    getVarFilters(prefClass = Prefs)

    Module function to retrieve the variables filter settings.

    prefClass
    preferences class used as the storage area
    Returns:
    a tuple defing the variables filter


    getViewManager

    getViewManager(prefClass = Prefs)

    Module function to retrieve the selected viewmanager type.

    prefClass
    preferences class used as the storage area
    Returns:
    the viewmanager type


    importPreferences

    importPreferences(prefClass = Prefs)

    Module function to import preferences from a file previously saved by the export function.

    prefClass
    preferences class used as the storage area


    initPreferences

    initPreferences()

    Module function to initialize the central configuration store.



    initRecentSettings

    initRecentSettings()

    Module function to initialize the central configuration store for recently opened files and projects.

    This function is called once upon import of the module.



    isConfigured

    isConfigured(prefClass = Prefs)

    Module function to check, if the the application has been configured.

    prefClass
    preferences class used as the storage area
    Returns:
    flag indicating the configured status (boolean)


    readToolGroups

    readToolGroups(prefClass = Prefs)

    Module function to read the tool groups configuration.

    prefClass
    preferences class used as the storage area
    Returns:
    list of tuples defing the tool groups


    removeProjectBrowserFlags

    removeProjectBrowserFlags(key, prefClass = Prefs)

    Module function to remove a project browser flags setting.

    key
    the key of the setting to be removed
    prefClass
    preferences class used as the storage area


    resetLayout

    resetLayout(prefClass = Prefs)

    Module function to set a flag not storing the current layout.

    prefClass
    preferences class used as the storage area


    saveResetLayout

    saveResetLayout(prefClass = Prefs)

    Module function to save the reset layout.



    saveToolGroups

    saveToolGroups(toolGroups, currentGroup, prefClass = Prefs)

    Module function to write the tool groups configuration.

    toolGroups
    reference to the list of tool groups
    currentGroup
    index of the currently selected tool group (integer)
    prefClass
    preferences class used as the storage area


    setCorba

    setCorba(key, value, prefClass = Prefs)

    Module function to store the various corba settings.

    key
    the key of the setting to be set
    value
    the value to be set
    prefClass
    preferences class used as the storage area


    setDebugger

    setDebugger(key, value, prefClass = Prefs)

    Module function to store the debugger settings.

    key
    the key of the setting to be set
    value
    the value to be set
    prefClass
    preferences class used as the storage area


    setEditor

    setEditor(key, value, prefClass = Prefs)

    Module function to store the various editor settings.

    key
    the key of the setting to be set
    value
    the value to be set
    prefClass
    preferences class used as the storage area


    setEditorAPI

    setEditorAPI(key, apilist, prefClass = Prefs)

    Module function to store the various lists of api files.

    key
    the key of the api to be set
    apilist
    the list of api files (QStringList)
    prefClass
    preferences class used as the storage area


    setEditorColour

    setEditorColour(key, value, prefClass = Prefs)

    Module function to store the various editor marker colours.

    key
    the key of the colour to be set
    value
    the colour to be set
    prefClass
    preferences class used as the storage area


    setEditorExporter

    setEditorExporter(key, value, prefClass = Prefs)

    Module function to store the various editor exporters settings.

    key
    the key of the setting to be set
    value
    the value to be set
    prefClass
    preferences class used as the storage area


    setEditorKeywords

    setEditorKeywords(key, keywordsLists, prefClass = Prefs)

    Module function to store the various lists of language keywords.

    key
    the key of the api to be set
    keywordsLists
    the list of language keywords (QStringList)
    prefClass
    preferences class used as the storage area


    setEditorLexerAssocs

    setEditorLexerAssocs(assocs, prefClass = Prefs)

    Module function to retrieve all lexer associations.

    assocs
    dictionary of lexer associations to be set
    prefClass
    preferences class used as the storage area


    setEditorOtherFonts

    setEditorOtherFonts(key, font, prefClass = Prefs)

    Module function to store the various editor fonts except the lexer fonts.

    key
    the key of the font to be set
    font
    the font to be set (QFont)
    prefClass
    preferences class used as the storage area


    setEditorTyping

    setEditorTyping(key, value, prefClass = Prefs)

    Module function to store the various editor typing settings.

    key
    the key of the setting to be set
    value
    the value to be set
    prefClass
    preferences class used as the storage area


    setGeometry

    setGeometry(key, value, prefClass = Prefs)

    Module function to store the display geometry.

    key
    the key of the setting to be set
    value
    the geometry to be set
    prefClass
    preferences class used as the storage area


    setGraphics

    setGraphics(key, value, prefClass = Prefs)

    Module function to store the Graphics related settings.

    key
    the key of the setting to be set
    value
    the value to be set
    prefClass
    preferences class used as the storage area


    setHelp

    setHelp(key, value, prefClass = Prefs)

    Module function to store the various help settings.

    key
    the key of the setting to be set
    value
    the value to be set
    prefClass
    preferences class used as the storage area


    setIconEditor

    setIconEditor(key, value, prefClass = Prefs)

    Module function to store the Icon Editor related settings.

    key
    the key of the setting to be set
    value
    the value to be set
    prefClass
    preferences class used as the storage area


    setIcons

    setIcons(key, value, prefClass = Prefs)

    Module function to store the various Icons settings.

    key
    the key of the setting to be set
    value
    the value to be set
    prefClass
    preferences class used as the storage area


    setMultiProject

    setMultiProject(key, value, prefClass = Prefs)

    Module function to store the various project handling settings.

    key
    the key of the setting to be set
    value
    the value to be set
    prefClass
    preferences class used as the storage area


    setPluginManager

    setPluginManager(key, value, prefClass = Prefs)

    Module function to store the plugin manager related settings.

    key
    the key of the setting to be set
    value
    the value to be set
    prefClass
    preferences class used as the storage area


    setPrinter

    setPrinter(key, value, prefClass = Prefs)

    Module function to store the various printer settings.

    key
    the key of the setting to be set
    value
    the value to be set
    prefClass
    preferences class used as the storage area


    setProject

    setProject(key, value, prefClass = Prefs)

    Module function to store the various project handling settings.

    key
    the key of the setting to be set
    value
    the value to be set
    prefClass
    preferences class used as the storage area


    setProjectBrowserColour

    setProjectBrowserColour(key, value, prefClass = Prefs)

    Module function to store the various project browser colours.

    key
    the key of the colour to be set
    value
    the colour to be set
    prefClass
    preferences class used as the storage area


    setProjectBrowserFlags

    setProjectBrowserFlags(key, value, prefClass = Prefs)

    Module function to store the various project browser flags settings.

    key
    the key of the setting to be set
    value
    the value to be set
    prefClass
    preferences class used as the storage area


    setProjectBrowserFlagsDefault

    setProjectBrowserFlagsDefault(key, value, prefClass = Prefs)

    Module function to store the various project browser flags settings.

    key
    the key of the setting to be set
    value
    the value to be set
    prefClass
    preferences class used as the storage area


    setPython

    setPython(key, value, prefClass = Prefs)

    Module function to store the Python settings.

    key
    the key of the setting to be set
    value
    the value to be set
    prefClass
    preferences class used as the storage area


    setQt

    setQt(key, value, prefClass = Prefs)

    Module function to store the various Qt settings.

    key
    the key of the setting to be set
    value
    the value to be set
    prefClass
    preferences class used as the storage area


    setShell

    setShell(key, value, prefClass = Prefs)

    Module function to store the various shell settings.

    key
    the key of the setting to be set
    value
    the value to be set
    prefClass
    preferences class used as the storage area


    setSystem

    setSystem(key, value, prefClass = Prefs)

    Module function to store the various system settings.

    key
    the key of the setting to be set
    value
    the value to be set
    prefClass
    preferences class used as the storage area


    setTasks

    setTasks(key, value, prefClass = Prefs)

    Module function to store the Tasks related settings.

    key
    the key of the setting to be set
    value
    the value to be set
    prefClass
    preferences class used as the storage area


    setTemplates

    setTemplates(key, value, prefClass = Prefs)

    Module function to store the Templates related settings.

    key
    the key of the setting to be set
    value
    the value to be set
    prefClass
    preferences class used as the storage area


    setTrayStarter

    setTrayStarter(key, value, prefClass = Prefs)

    Module function to store the tray starter related settings.

    key
    the key of the setting to be set
    value
    the value to be set
    prefClass
    preferences class used as the storage area


    setUI

    setUI(key, value, prefClass = Prefs)

    Module function to store the various UI settings.

    key
    the key of the setting to be set
    value
    the value to be set
    prefClass
    preferences class used as the storage area


    setUILanguage

    setUILanguage(lang, prefClass = Prefs)

    Module function to store the language for the user interface.

    lang
    the language
    prefClass
    preferences class used as the storage area


    setUILayout

    setUILayout(layout, prefClass = Prefs)

    Module function to store the layout for the user interface.

    layout
    the layout type
    prefClass
    preferences class used as the storage area


    setUser

    setUser(key, value, prefClass = Prefs)

    Module function to store the various user settings.

    key
    the key of the setting to be set
    value
    the value to be set
    prefClass
    preferences class used as the storage area


    setVCS

    setVCS(key, value, prefClass = Prefs)

    Module function to store the VCS related settings.

    key
    the key of the setting to be set
    value
    the value to be set
    prefClass
    preferences class used as the storage area


    setVarFilters

    setVarFilters(filters, prefClass = Prefs)

    Module function to store the variables filter settings.

    prefClass
    preferences class used as the storage area


    setViewManager

    setViewManager(vm, prefClass = Prefs)

    Module function to store the selected viewmanager type.

    vm
    the viewmanager type
    prefClass
    preferences class used as the storage area


    shouldResetLayout

    shouldResetLayout(prefClass = Prefs)

    Module function to indicate a reset of the layout.

    prefClass
    preferences class used as the storage area
    Returns:
    flag indicating a reset of the layout (boolean)


    syncPreferences

    syncPreferences(prefClass = Prefs)

    Module function to sync the preferences to disk.

    In addition to syncing, the central configuration store is reinitialized as well.

    prefClass
    preferences class used as the storage area

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.Bookmarks.XbelReader.html0000644000175000001440000000013212261331353030531 xustar000000000000000030 mtime=1388688107.841229732 30 atime=1389081085.179724359 30 ctime=1389081086.311724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.Bookmarks.XbelReader.html0000644000175000001440000001434312261331353030270 0ustar00detlevusers00000000000000 eric4.Helpviewer.Bookmarks.XbelReader

    eric4.Helpviewer.Bookmarks.XbelReader

    Module implementing a class to read XBEL bookmark files.

    Global Attributes

    None

    Classes

    XbelReader Class implementing a reader object for XBEL bookmark files.
    XmlEntityResolver Class implementing an XML entity resolver for bookmark files.

    Functions

    None


    XbelReader

    Class implementing a reader object for XBEL bookmark files.

    Derived from

    QXmlStreamReader

    Class Attributes

    None

    Class Methods

    None

    Methods

    XbelReader Constructor
    __readBookmarkNode Private method to read and parse a bookmark subtree.
    __readDescription Private method to read the desc element.
    __readFolder Private method to read and parse a folder subtree.
    __readSeparator Private method to read a separator element.
    __readTitle Private method to read the title element.
    __readXBEL Private method to read and parse the XBEL file.
    __skipUnknownElement Private method to skip over all unknown elements.
    read Public method to read an XBEL bookmark file.

    Static Methods

    None

    XbelReader (Constructor)

    XbelReader()

    Constructor

    XbelReader.__readBookmarkNode

    __readBookmarkNode(node)

    Private method to read and parse a bookmark subtree.

    node
    reference to the node to attach to (BookmarkNode)

    XbelReader.__readDescription

    __readDescription(node)

    Private method to read the desc element.

    node
    reference to the bookmark node desc belongs to (BookmarkNode)

    XbelReader.__readFolder

    __readFolder(node)

    Private method to read and parse a folder subtree.

    node
    reference to the node to attach to (BookmarkNode)

    XbelReader.__readSeparator

    __readSeparator(node)

    Private method to read a separator element.

    node
    reference to the bookmark node the separator belongs to (BookmarkNode)

    XbelReader.__readTitle

    __readTitle(node)

    Private method to read the title element.

    node
    reference to the bookmark node title belongs to (BookmarkNode)

    XbelReader.__readXBEL

    __readXBEL(node)

    Private method to read and parse the XBEL file.

    node
    reference to the node to attach to (BookmarkNode)

    XbelReader.__skipUnknownElement

    __skipUnknownElement()

    Private method to skip over all unknown elements.

    XbelReader.read

    read(fileNameOrDevice)

    Public method to read an XBEL bookmark file.

    fileNameOrDevice
    name of the file to read (string or QString) or reference to the device to read (QIODevice)
    Returns:
    reference to the root node (BookmarkNode)


    XmlEntityResolver

    Class implementing an XML entity resolver for bookmark files.

    Derived from

    QXmlStreamEntityResolver

    Class Attributes

    None

    Class Methods

    None

    Methods

    resolveUndeclaredEntity Public method to resolve undeclared entities.

    Static Methods

    None

    XmlEntityResolver.resolveUndeclaredEntity

    resolveUndeclaredEntity(entity)

    Public method to resolve undeclared entities.

    entity
    entity to be resolved (string or QString)
    Returns:
    resolved entity (QString)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Helpviewer.AdBlock.AdBlockBlockedNetwor0000644000175000001440000000013212261331353031102 xustar000000000000000030 mtime=1388688107.756229689 30 atime=1389081085.180724359 30 ctime=1389081086.311724332 eric4-4.5.18/eric/Documentation/Source/eric4.Helpviewer.AdBlock.AdBlockBlockedNetworkReply.html0000644000175000001440000000657312261331353033001 0ustar00detlevusers00000000000000 eric4.Helpviewer.AdBlock.AdBlockBlockedNetworkReply

    eric4.Helpviewer.AdBlock.AdBlockBlockedNetworkReply

    Module implementing a QNetworkReply subclass reporting a blocked request.

    Global Attributes

    None

    Classes

    AdBlockBlockedNetworkReply Class implementing a QNetworkReply subclass reporting a blocked request.

    Functions

    None


    AdBlockBlockedNetworkReply

    Class implementing a QNetworkReply subclass reporting a blocked request.

    Derived from

    QNetworkReply

    Class Attributes

    None

    Class Methods

    None

    Methods

    AdBlockBlockedNetworkReply Constructor
    __fireSignals Private method to send some signals to end the connection.
    abort Public slot to abort the operation.
    readData Protected method to retrieve data from the reply object.

    Static Methods

    None

    AdBlockBlockedNetworkReply (Constructor)

    AdBlockBlockedNetworkReply(request, rule, parent = None)

    Constructor

    request
    reference to the request object (QNetworkRequest)
    fileData
    reference to the data buffer (QByteArray)
    mimeType
    for the reply (string)

    AdBlockBlockedNetworkReply.__fireSignals

    __fireSignals()

    Private method to send some signals to end the connection.

    AdBlockBlockedNetworkReply.abort

    abort()

    Public slot to abort the operation.

    AdBlockBlockedNetworkReply.readData

    readData(maxlen)

    Protected method to retrieve data from the reply object.

    maxlen
    maximum number of bytes to read (integer)
    Returns:
    string containing the data (string)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.DebugClients.Ruby.__init__.html0000644000175000001440000000013212261331354027503 xustar000000000000000030 mtime=1388688108.267229946 30 atime=1389081085.180724359 30 ctime=1389081086.311724332 eric4-4.5.18/eric/Documentation/Source/eric4.DebugClients.Ruby.__init__.html0000644000175000001440000000160112261331354027233 0ustar00detlevusers00000000000000 eric4.DebugClients.Ruby.__init__

    eric4.DebugClients.Ruby.__init__

    Package implementing the Ruby debugger.

    Global Attributes

    None

    Classes

    None

    Modules

    None

    Functions

    None

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.E4XML.Config.html0000644000175000001440000000013212261331352024510 xustar000000000000000030 mtime=1388688106.544229081 30 atime=1389081085.180724359 30 ctime=1389081086.311724332 eric4-4.5.18/eric/Documentation/Source/eric4.E4XML.Config.html0000644000175000001440000000240412261331352024242 0ustar00detlevusers00000000000000 eric4.E4XML.Config

    eric4.E4XML.Config

    Module implementing some common configuration stuf for the XML package.

    Global Attributes

    debuggerPropertiesFileFormatVersion
    highlightingStylesFileFormatVersion
    multiProjectFileFormatVersion
    pluginRepositoryFileFormatVersion
    projectFileFormatVersion
    sessionFileFormatVersion
    shortcutsFileFormatVersion
    tasksFileFormatVersion
    templatesFileFormatVersion
    userProjectFileFormatVersion

    Classes

    None

    Functions

    None

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/index-eric4.MultiProject.html0000644000175000001440000000013212261331354026203 xustar000000000000000030 mtime=1388688108.658230142 30 atime=1389081085.180724359 30 ctime=1389081086.311724332 eric4-4.5.18/eric/Documentation/Source/index-eric4.MultiProject.html0000644000175000001440000000315112261331354025735 0ustar00detlevusers00000000000000 eric4.MultiProject

    eric4.MultiProject

    Package implementing the multi project management module of eric4.

    The multi project management module consists of the main part, which is used for reading and writing of eric4 multi project files (*.e4m *.e4mz) and for performing all operations on the multi project. It is accompanied by various UI related modules implementing different dialogs and a browser for the display of projects belonging to the current multi project.

    Modules

    AddProjectDialog Module implementing the add project dialog.
    MultiProject Module implementing the multi project management functionality.
    MultiProjectBrowser Module implementing the multi project browser.
    PropertiesDialog Module implementing the multi project properties dialog.
    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.Plugins.VcsPlugins.vcsSubversion.subver0000644000175000001440000000013212261331352031404 xustar000000000000000030 mtime=1388688106.855229237 30 atime=1389081085.180724359 30 ctime=1389081086.311724332 eric4-4.5.18/eric/Documentation/Source/eric4.Plugins.VcsPlugins.vcsSubversion.subversion.html0000644000175000001440000011442112261331352032775 0ustar00detlevusers00000000000000 eric4.Plugins.VcsPlugins.vcsSubversion.subversion

    eric4.Plugins.VcsPlugins.vcsSubversion.subversion

    Module implementing the version control systems interface to Subversion.

    Global Attributes

    None

    Classes

    Subversion Class implementing the version control systems interface to Subversion.

    Functions

    None


    Subversion

    Class implementing the version control systems interface to Subversion.

    Signals

    committed()
    emitted after the commit action has completed

    Derived from

    VersionControl

    Class Attributes

    None

    Class Methods

    None

    Methods

    Subversion Constructor
    __svnURL Private method to format a url for subversion.
    __vcsAllRegisteredStates_wc Private method used to get the registered states of a number of files in the vcs.
    __vcsAllRegisteredStates_wcng Private method used to get the registered states of a number of files in the vcs.
    __vcsCommit_Step2 Private slot performing the second step of the commit action.
    __vcsRegisteredState_wc Private method used to get the registered state of a file in the vcs.
    __vcsRegisteredState_wcng Private method used to get the registered state of a file in the vcs.
    _createStatusMonitorThread Protected method to create an instance of the VCS status monitor thread.
    clearStatusCache Public method to clear the status cache.
    getPlugin Public method to get a reference to the plugin object.
    svnAddToChangelist Public method to add a file or directory to a changelist.
    svnBlame Public method to show the output of the svn blame command.
    svnCopy Public method used to copy a file/directory.
    svnDelProp Public method used to delete a property of a file/directory.
    svnExtendedDiff Public method used to view the difference of a file/directory to the Subversion repository.
    svnGetChangelists Public method to get a list of all defined change lists.
    svnGetReposName Public method used to retrieve the URL of the subversion repository path.
    svnListProps Public method used to list the properties of a file/directory.
    svnListTagBranch Public method used to list the available tags or branches.
    svnLock Public method used to lock a file in the Subversion repository.
    svnLogBrowser Public method used to browse the log of a file/directory from the Subversion repository.
    svnLogLimited Public method used to view the (limited) log of a file/directory from the Subversion repository.
    svnNormalizeURL Public method to normalize a url for subversion.
    svnRelocate Public method to relocate the working copy to a new repository URL.
    svnRemoveFromChangelist Public method to remove a file or directory from its changelist.
    svnRepoBrowser Public method to open the repository browser.
    svnResolve Public method used to resolve conflicts of a file/directory.
    svnSetProp Public method used to add a property to a file/directory.
    svnShowChangelists Public method used to inspect the change lists defined for the project.
    svnUnlock Public method used to unlock a file in the Subversion repository.
    svnUrlDiff Public method used to view the difference of a file/directory of two repository URLs.
    vcsAdd Public method used to add a file/directory to the Subversion repository.
    vcsAddBinary Public method used to add a file/directory in binary mode to the Subversion repository.
    vcsAddTree Public method to add a directory tree rooted at path to the Subversion repository.
    vcsAllRegisteredStates Public method used to get the registered states of a number of files in the vcs.
    vcsCheckout Public method used to check the project out of the Subversion repository.
    vcsCleanup Public method used to cleanup the working copy.
    vcsCommandLine Public method used to execute arbitrary subversion commands.
    vcsCommit Public method used to make the change of a file/directory permanent in the Subversion repository.
    vcsConvertProject Public method to convert an uncontrolled project to a version controlled project.
    vcsDiff Public method used to view the difference of a file/directory to the Subversion repository.
    vcsExists Public method used to test for the presence of the svn executable.
    vcsExport Public method used to export a directory from the Subversion repository.
    vcsGetProjectBrowserHelper Public method to instanciate a helper object for the different project browsers.
    vcsGetProjectHelper Public method to instanciate a helper object for the project.
    vcsImport Public method used to import the project into the Subversion repository.
    vcsInit Public method used to initialize the subversion repository.
    vcsInitConfig Public method to initialize the VCS configuration.
    vcsLog Public method used to view the log of a file/directory from the Subversion repository.
    vcsMerge Public method used to merge a URL/revision into the local project.
    vcsMove Public method used to move a file/directory.
    vcsName Public method returning the name of the vcs.
    vcsNewProjectOptionsDialog Public method to get a dialog to enter repository info for getting a new project.
    vcsOptionsDialog Public method to get a dialog to enter repository info.
    vcsRegisteredState Public method used to get the registered state of a file in the vcs.
    vcsRemove Public method used to remove a file/directory from the Subversion repository.
    vcsRepositoryInfos Public method to retrieve information about the repository.
    vcsRevert Public method used to revert changes made to a file/directory.
    vcsShutdown Public method used to shutdown the Subversion interface.
    vcsStatus Public method used to view the status of files/directories in the Subversion repository.
    vcsSwitch Public method used to switch a directory to a different tag/branch.
    vcsTag Public method used to set the tag of a file/directory in the Subversion repository.
    vcsUpdate Public method used to update a file/directory with the Subversion repository.

    Static Methods

    None

    Subversion (Constructor)

    Subversion(plugin, parent=None, name=None)

    Constructor

    plugin
    reference to the plugin object
    parent
    parent widget (QWidget)
    name
    name of this object (string or QString)

    Subversion.__svnURL

    __svnURL(url)

    Private method to format a url for subversion.

    url
    unformatted url string (string)
    Returns:
    properly formated url for subversion

    Subversion.__vcsAllRegisteredStates_wc

    __vcsAllRegisteredStates_wc(names, dname, shortcut = True)

    Private method used to get the registered states of a number of files in the vcs.

    This is the variant for subversion installations using the old working copy meta-data format.

    Note: If a shortcut is to be taken, the code will only check, if the named directory has been scanned already. If so, it is assumed, that the states for all files has been populated by the previous run.

    names
    dictionary with all filenames to be checked as keys
    dname
    directory to check in (string)
    shortcut
    flag indicating a shortcut should be taken (boolean)
    Returns:
    the received dictionary completed with a combination of canBeCommited and canBeAdded or None in order to signal an error

    Subversion.__vcsAllRegisteredStates_wcng

    __vcsAllRegisteredStates_wcng(names, dname, shortcut = True)

    Private method used to get the registered states of a number of files in the vcs.

    This is the variant for subversion installations using the new working copy meta-data format.

    Note: If a shortcut is to be taken, the code will only check, if the named directory has been scanned already. If so, it is assumed, that the states for all files has been populated by the previous run.

    names
    dictionary with all filenames to be checked as keys
    dname
    directory to check in (string)
    shortcut
    flag indicating a shortcut should be taken (boolean)
    Returns:
    the received dictionary completed with a combination of canBeCommited and canBeAdded or None in order to signal an error

    Subversion.__vcsCommit_Step2

    __vcsCommit_Step2()

    Private slot performing the second step of the commit action.

    Subversion.__vcsRegisteredState_wc

    __vcsRegisteredState_wc(name)

    Private method used to get the registered state of a file in the vcs.

    This is the variant for subversion installations using the old working copy meta-data format.

    name
    filename to check (string or QString)
    Returns:
    a combination of canBeCommited and canBeAdded

    Subversion.__vcsRegisteredState_wcng

    __vcsRegisteredState_wcng(name)

    Private method used to get the registered state of a file in the vcs.

    This is the variant for subversion installations using the new working copy meta-data format.

    name
    filename to check (string or QString)
    Returns:
    a combination of canBeCommited and canBeAdded

    Subversion._createStatusMonitorThread

    _createStatusMonitorThread(interval, project)

    Protected method to create an instance of the VCS status monitor thread.

    project
    reference to the project object
    interval
    check interval for the monitor thread in seconds (integer)
    Returns:
    reference to the monitor thread (QThread)

    Subversion.clearStatusCache

    clearStatusCache()

    Public method to clear the status cache.

    Subversion.getPlugin

    getPlugin()

    Public method to get a reference to the plugin object.

    Returns:
    reference to the plugin object (VcsSubversionPlugin)

    Subversion.svnAddToChangelist

    svnAddToChangelist(names)

    Public method to add a file or directory to a changelist.

    Note: Directories will be added recursively.

    names
    name or list of names of file or directory to add (string or QString)

    Subversion.svnBlame

    svnBlame(name)

    Public method to show the output of the svn blame command.

    name
    file name to show the blame for (string)

    Subversion.svnCopy

    svnCopy(name, project)

    Public method used to copy a file/directory.

    name
    file/directory name to be copied (string)
    project
    reference to the project object
    Returns:
    flag indicating successfull operation (boolean)

    Subversion.svnDelProp

    svnDelProp(name, recursive = False)

    Public method used to delete a property of a file/directory.

    name
    file/directory name (string or list of strings)
    recursive
    flag indicating a recursive list is requested

    Subversion.svnExtendedDiff

    svnExtendedDiff(name)

    Public method used to view the difference of a file/directory to the Subversion repository.

    If name is a directory and is the project directory, all project files are saved first. If name is a file (or list of files), which is/are being edited and has unsaved modification, they can be saved or the operation may be aborted.

    This method gives the chance to enter the revisions to be compared.

    name
    file/directory name to be diffed (string)

    Subversion.svnGetChangelists

    svnGetChangelists()

    Public method to get a list of all defined change lists.

    Returns:
    list of defined change list names (list of strings)

    Subversion.svnGetReposName

    svnGetReposName(path)

    Public method used to retrieve the URL of the subversion repository path.

    path
    local path to get the svn repository path for (string)
    Returns:
    string with the repository path URL

    Subversion.svnListProps

    svnListProps(name, recursive = False)

    Public method used to list the properties of a file/directory.

    name
    file/directory name (string or list of strings)
    recursive
    flag indicating a recursive list is requested

    Subversion.svnListTagBranch

    svnListTagBranch(path, tags = True)

    Public method used to list the available tags or branches.

    path
    directory name of the project (string)
    tags
    flag indicating listing of branches or tags (False = branches, True = tags)

    Subversion.svnLock

    svnLock(name, stealIt=False, parent=None)

    Public method used to lock a file in the Subversion repository.

    name
    file/directory name to be locked (string or list of strings)
    stealIt
    flag indicating a forced operation (boolean)
    parent
    reference to the parent object of the subversion dialog (QWidget)

    Subversion.svnLogBrowser

    svnLogBrowser(path)

    Public method used to browse the log of a file/directory from the Subversion repository.

    path
    file/directory name to show the log of (string)

    Subversion.svnLogLimited

    svnLogLimited(name)

    Public method used to view the (limited) log of a file/directory from the Subversion repository.

    name
    file/directory name to show the log of (string)

    Subversion.svnNormalizeURL

    svnNormalizeURL(url)

    Public method to normalize a url for subversion.

    url
    url string (string)
    Returns:
    properly normalized url for subversion

    Subversion.svnRelocate

    svnRelocate(projectPath)

    Public method to relocate the working copy to a new repository URL.

    projectPath
    path name of the project (string)

    Subversion.svnRemoveFromChangelist

    svnRemoveFromChangelist(names)

    Public method to remove a file or directory from its changelist.

    Note: Directories will be removed recursively.

    names
    name or list of names of file or directory to remove (string or QString)

    Subversion.svnRepoBrowser

    svnRepoBrowser(projectPath = None)

    Public method to open the repository browser.

    projectPath
    path name of the project (string)

    Subversion.svnResolve

    svnResolve(name)

    Public method used to resolve conflicts of a file/directory.

    name
    file/directory name to be resolved (string)

    Subversion.svnSetProp

    svnSetProp(name, recursive = False)

    Public method used to add a property to a file/directory.

    name
    file/directory name (string or list of strings)
    recursive
    flag indicating a recursive list is requested

    Subversion.svnShowChangelists

    svnShowChangelists(path)

    Public method used to inspect the change lists defined for the project.

    path
    directory name to show change lists for (string)

    Subversion.svnUnlock

    svnUnlock(name, breakIt=False, parent=None)

    Public method used to unlock a file in the Subversion repository.

    name
    file/directory name to be unlocked (string or list of strings)
    breakIt
    flag indicating a forced operation (boolean)
    parent
    reference to the parent object of the subversion dialog (QWidget)

    Subversion.svnUrlDiff

    svnUrlDiff(name)

    Public method used to view the difference of a file/directory of two repository URLs.

    If name is a directory and is the project directory, all project files are saved first. If name is a file (or list of files), which is/are being edited and has unsaved modification, they can be saved or the operation may be aborted.

    This method gives the chance to enter the revisions to be compared.

    name
    file/directory name to be diffed (string)

    Subversion.vcsAdd

    vcsAdd(name, isDir = False, noDialog = False)

    Public method used to add a file/directory to the Subversion repository.

    name
    file/directory name to be added (string)
    isDir
    flag indicating name is a directory (boolean)
    noDialog
    flag indicating quiet operations

    Subversion.vcsAddBinary

    vcsAddBinary(name, isDir = False)

    Public method used to add a file/directory in binary mode to the Subversion repository.

    name
    file/directory name to be added (string)
    isDir
    flag indicating name is a directory (boolean)

    Subversion.vcsAddTree

    vcsAddTree(path)

    Public method to add a directory tree rooted at path to the Subversion repository.

    path
    root directory of the tree to be added (string or list of strings))

    Subversion.vcsAllRegisteredStates

    vcsAllRegisteredStates(names, dname, shortcut = True)

    Public method used to get the registered states of a number of files in the vcs.

    Note: If a shortcut is to be taken, the code will only check, if the named directory has been scanned already. If so, it is assumed, that the states for all files has been populated by the previous run.

    names
    dictionary with all filenames to be checked as keys
    dname
    directory to check in (string)
    shortcut
    flag indicating a shortcut should be taken (boolean)
    Returns:
    the received dictionary completed with a combination of canBeCommited and canBeAdded or None in order to signal an error

    Subversion.vcsCheckout

    vcsCheckout(vcsDataDict, projectDir, noDialog = False)

    Public method used to check the project out of the Subversion repository.

    vcsDataDict
    dictionary of data required for the checkout
    projectDir
    project directory to create (string)
    noDialog
    flag indicating quiet operations
    Returns:
    flag indicating an execution without errors (boolean)

    Subversion.vcsCleanup

    vcsCleanup(name)

    Public method used to cleanup the working copy.

    name
    directory name to be cleaned up (string)

    Subversion.vcsCommandLine

    vcsCommandLine(name)

    Public method used to execute arbitrary subversion commands.

    name
    directory name of the working directory (string)

    Subversion.vcsCommit

    vcsCommit(name, message, noDialog = False)

    Public method used to make the change of a file/directory permanent in the Subversion repository.

    name
    file/directory name to be committed (string or list of strings)
    message
    message for this operation (string)
    noDialog
    flag indicating quiet operations

    Subversion.vcsConvertProject

    vcsConvertProject(vcsDataDict, project)

    Public method to convert an uncontrolled project to a version controlled project.

    vcsDataDict
    dictionary of data required for the conversion
    project
    reference to the project object

    Subversion.vcsDiff

    vcsDiff(name)

    Public method used to view the difference of a file/directory to the Subversion repository.

    If name is a directory and is the project directory, all project files are saved first. If name is a file (or list of files), which is/are being edited and has unsaved modification, they can be saved or the operation may be aborted.

    name
    file/directory name to be diffed (string)

    Subversion.vcsExists

    vcsExists()

    Public method used to test for the presence of the svn executable.

    Returns:
    flag indicating the existance (boolean) and an error message (QString)

    Subversion.vcsExport

    vcsExport(vcsDataDict, projectDir)

    Public method used to export a directory from the Subversion repository.

    vcsDataDict
    dictionary of data required for the checkout
    projectDir
    project directory to create (string)
    Returns:
    flag indicating an execution without errors (boolean)

    Subversion.vcsGetProjectBrowserHelper

    vcsGetProjectBrowserHelper(browser, project, isTranslationsBrowser = False)

    Public method to instanciate a helper object for the different project browsers.

    browser
    reference to the project browser object
    project
    reference to the project object
    isTranslationsBrowser
    flag indicating, the helper is requested for the translations browser (this needs some special treatment)
    Returns:
    the project browser helper object

    Subversion.vcsGetProjectHelper

    vcsGetProjectHelper(project)

    Public method to instanciate a helper object for the project.

    project
    reference to the project object
    Returns:
    the project helper object

    Subversion.vcsImport

    vcsImport(vcsDataDict, projectDir, noDialog = False)

    Public method used to import the project into the Subversion repository.

    vcsDataDict
    dictionary of data required for the import
    projectDir
    project directory (string)
    noDialog
    flag indicating quiet operations
    Returns:
    flag indicating an execution without errors (boolean) and a flag indicating the version controll status (boolean)

    Subversion.vcsInit

    vcsInit(vcsDir, noDialog = False)

    Public method used to initialize the subversion repository.

    The subversion repository has to be initialized from outside eric4 because the respective command always works locally. Therefore we always return TRUE without doing anything.

    vcsDir
    name of the VCS directory (string)
    noDialog
    flag indicating quiet operations (boolean)
    Returns:
    always TRUE

    Subversion.vcsInitConfig

    vcsInitConfig(project)

    Public method to initialize the VCS configuration.

    This method ensures, that eric specific files and directories are ignored.

    project
    reference to the project (Project)

    Subversion.vcsLog

    vcsLog(name)

    Public method used to view the log of a file/directory from the Subversion repository.

    name
    file/directory name to show the log of (string)

    Subversion.vcsMerge

    vcsMerge(name)

    Public method used to merge a URL/revision into the local project.

    name
    file/directory name to be merged (string)

    Subversion.vcsMove

    vcsMove(name, project, target = None, noDialog = False)

    Public method used to move a file/directory.

    name
    file/directory name to be moved (string)
    project
    reference to the project object
    target
    new name of the file/directory (string)
    noDialog
    flag indicating quiet operations
    Returns:
    flag indicating successfull operation (boolean)

    Subversion.vcsName

    vcsName()

    Public method returning the name of the vcs.

    Returns:
    always 'Subversion' (string)

    Subversion.vcsNewProjectOptionsDialog

    vcsNewProjectOptionsDialog(parent = None)

    Public method to get a dialog to enter repository info for getting a new project.

    parent
    parent widget (QWidget)

    Subversion.vcsOptionsDialog

    vcsOptionsDialog(project, archive, editable = False, parent = None)

    Public method to get a dialog to enter repository info.

    project
    reference to the project object
    archive
    name of the project in the repository (string)
    editable
    flag indicating that the project name is editable (boolean)
    parent
    parent widget (QWidget)

    Subversion.vcsRegisteredState

    vcsRegisteredState(name)

    Public method used to get the registered state of a file in the vcs.

    name
    filename to check (string or QString)
    Returns:
    a combination of canBeCommited and canBeAdded

    Subversion.vcsRemove

    vcsRemove(name, project = False, noDialog = False)

    Public method used to remove a file/directory from the Subversion repository.

    The default operation is to remove the local copy as well.

    name
    file/directory name to be removed (string or list of strings))
    project
    flag indicating deletion of a project tree (boolean) (not needed)
    noDialog
    flag indicating quiet operations
    Returns:
    flag indicating successfull operation (boolean)

    Subversion.vcsRepositoryInfos

    vcsRepositoryInfos(ppath)

    Public method to retrieve information about the repository.

    ppath
    local path to get the repository infos (string)
    Returns:
    string with ready formated info for display (QString)

    Subversion.vcsRevert

    vcsRevert(name)

    Public method used to revert changes made to a file/directory.

    name
    file/directory name to be reverted (string)

    Subversion.vcsShutdown

    vcsShutdown()

    Public method used to shutdown the Subversion interface.

    Subversion.vcsStatus

    vcsStatus(name)

    Public method used to view the status of files/directories in the Subversion repository.

    name
    file/directory name(s) to show the status of (string or list of strings)

    Subversion.vcsSwitch

    vcsSwitch(name)

    Public method used to switch a directory to a different tag/branch.

    name
    directory name to be switched (string)

    Subversion.vcsTag

    vcsTag(name)

    Public method used to set the tag of a file/directory in the Subversion repository.

    name
    file/directory name to be tagged (string)

    Subversion.vcsUpdate

    vcsUpdate(name, noDialog = False)

    Public method used to update a file/directory with the Subversion repository.

    name
    file/directory name to be updated (string or list of strings)
    noDialog
    flag indicating quiet operations (boolean)
    Returns:
    flag indicating, that the update contained an add or delete (boolean)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.MiniEditor.html0000644000175000001440000000013212261331352026560 xustar000000000000000030 mtime=1388688106.441229029 30 atime=1389081085.181724359 30 ctime=1389081086.311724332 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.MiniEditor.html0000644000175000001440000007745612261331352026335 0ustar00detlevusers00000000000000 eric4.QScintilla.MiniEditor

    eric4.QScintilla.MiniEditor

    Module implementing a minimalistic editor for simple editing tasks.

    Global Attributes

    None

    Classes

    MiniEditor Class implementing a minimalistic editor for simple editing tasks.
    MiniScintilla Class implementing a QsciScintillaCompat subclass for handling focus events.

    Functions

    None


    MiniEditor

    Class implementing a minimalistic editor for simple editing tasks.

    Signals

    editorSaved
    emitted after the file has been saved

    Derived from

    KQMainWindow

    Class Attributes

    None

    Class Methods

    None

    Methods

    MiniEditor Constructor
    __about Private slot to show a little About message.
    __aboutKde Private slot to handle the About KDE dialog.
    __aboutQt Private slot to handle the About Qt dialog.
    __bindLexer Private slot to set the correct lexer depending on language.
    __bindName Private method to generate a dummy filename for binding a lexer.
    __checkActions Private slot to check some actions for their enable/disable status and set the statusbar info.
    __checkLanguage Private method to check the selected language of the language submenu.
    __contextMenuRequested Private slot to show the context menu.
    __createActions Private method to create the actions.
    __createEditActions Private method to create the Edit actions.
    __createFileActions Private method to create the File actions.
    __createHelpActions Private method to create the Help actions.
    __createMenus Private method to create the menus of the menu bar.
    __createSearchActions Private method defining the user interface actions for the search commands.
    __createStatusBar Private method to initialize the status bar.
    __createToolBars Private method to create the various toolbars.
    __cursorPositionChanged Private slot to handle the cursorPositionChanged signal.
    __deselectAll Private slot handling the deselect all context menu action.
    __documentWasModified Private slot to handle a change in the documents modification status.
    __getCurrentWord Private method to get the word at the current position.
    __getWord Private method to get the word at a position.
    __initContextMenu Private method used to setup the context menu
    __initContextMenuLanguages Private method used to setup the Languages context sub menu.
    __languageMenuTriggered Private method to handle the selection of a lexer language.
    __loadFile Private method to load the given file.
    __markOccurrences Private method to mark all occurrences of the current word.
    __maybeSave Private method to ask the user to save the file, if it was modified.
    __modificationChanged Private slot to handle the modificationChanged signal.
    __newFile Private slot to create a new file.
    __open Private slot to open a file.
    __printFile Private slot to print the text.
    __printPreview Private slot to generate a print preview.
    __printPreviewFile Private slot to show a print preview of the text.
    __readSettings Private method to read the settings remembered last time.
    __readShortcut Private function to read a single keyboard shortcut from the settings.
    __redo Public method to redo the last recorded change.
    __replace Private method to handle the replace action.
    __resetLanguage Private method used to reset the language selection.
    __resizeLinenoMargin Private slot to resize the line numbers margin.
    __save Private slot to save a file.
    __saveAs Private slot to save a file with a new name.
    __saveFile Private method to save to the given file.
    __search Private method to handle the search action.
    __searchClearMarkers Private method to clear the search markers of the active window.
    __selectAll Private slot handling the select all context menu action.
    __selectPygmentsLexer Private method to select a specific pygments lexer.
    __setCurrentFile Private method to register the file name of the current file.
    __setEolMode Private method to configure the eol mode of the editor.
    __setMargins Private method to configure the margins.
    __setMonospaced Private method to set/reset a monospaced font.
    __setSbFile Private method to set the file info in the status bar.
    __setTextDisplay Private method to configure the text display.
    __showContextMenuLanguages Private slot handling the aboutToShow signal of the languages context menu.
    __strippedName Private method to return the filename part of the given path.
    __styleNeeded Private slot to handle the need for more styling.
    __undo Public method to undo the last recorded change.
    __whatsThis Private slot called in to enter Whats This mode.
    __writeSettings Private method to write the settings for reuse.
    activeWindow Public method to fulfill the ViewManager interface.
    clearSearchIndicators Public method to clear all search indicators.
    closeEvent Public method to handle the close event.
    getFileName Public method to return the name of the file being displayed.
    getLanguage Public method to retrieve the language of the editor.
    getSRHistory Public method to get the search or replace history list.
    readLine0 Public slot to read the first line from a file.
    setLanguage Public method to set a lexer language.
    setSearchIndicator Public method to set a search indicator for the given range.
    setText Public method to set the text programatically.
    textForFind Public method to determine the selection or the current word for the next find operation.

    Static Methods

    None

    MiniEditor (Constructor)

    MiniEditor(filename = "", filetype = "", parent = None, name = None)

    Constructor

    filename
    name of the file to open (string or QString)
    filetype
    type of the source file (string)
    parent
    reference to the parent widget (QWidget)
    name
    object name of the window (QString)

    MiniEditor.__about

    __about()

    Private slot to show a little About message.

    MiniEditor.__aboutKde

    __aboutKde()

    Private slot to handle the About KDE dialog.

    MiniEditor.__aboutQt

    __aboutQt()

    Private slot to handle the About Qt dialog.

    MiniEditor.__bindLexer

    __bindLexer(filename, pyname = "")

    Private slot to set the correct lexer depending on language.

    filename
    filename used to determine the associated lexer language (string or QString)
    pyname=
    name of the pygments lexer to use (string)

    MiniEditor.__bindName

    __bindName(txt)

    Private method to generate a dummy filename for binding a lexer.

    txt
    first line of text to use in the generation process (QString or string)

    MiniEditor.__checkActions

    __checkActions(setSb = True)

    Private slot to check some actions for their enable/disable status and set the statusbar info.

    setSb
    flag indicating an update of the status bar is wanted (boolean)

    MiniEditor.__checkLanguage

    __checkLanguage()

    Private method to check the selected language of the language submenu.

    MiniEditor.__contextMenuRequested

    __contextMenuRequested(coord)

    Private slot to show the context menu.

    coord
    the position of the mouse pointer (QPoint)

    MiniEditor.__createActions

    __createActions()

    Private method to create the actions.

    MiniEditor.__createEditActions

    __createEditActions()

    Private method to create the Edit actions.

    MiniEditor.__createFileActions

    __createFileActions()

    Private method to create the File actions.

    MiniEditor.__createHelpActions

    __createHelpActions()

    Private method to create the Help actions.

    MiniEditor.__createMenus

    __createMenus()

    Private method to create the menus of the menu bar.

    MiniEditor.__createSearchActions

    __createSearchActions()

    Private method defining the user interface actions for the search commands.

    MiniEditor.__createStatusBar

    __createStatusBar()

    Private method to initialize the status bar.

    MiniEditor.__createToolBars

    __createToolBars()

    Private method to create the various toolbars.

    MiniEditor.__cursorPositionChanged

    __cursorPositionChanged(line, pos)

    Private slot to handle the cursorPositionChanged signal.

    line
    line number of the cursor
    pos
    position in line of the cursor

    MiniEditor.__deselectAll

    __deselectAll()

    Private slot handling the deselect all context menu action.

    MiniEditor.__documentWasModified

    __documentWasModified()

    Private slot to handle a change in the documents modification status.

    MiniEditor.__getCurrentWord

    __getCurrentWord()

    Private method to get the word at the current position.

    Returns:
    the word at that current position

    MiniEditor.__getWord

    __getWord(line, index)

    Private method to get the word at a position.

    line
    number of line to look at (int)
    index
    position to look at (int)
    Returns:
    the word at that position

    MiniEditor.__initContextMenu

    __initContextMenu()

    Private method used to setup the context menu

    MiniEditor.__initContextMenuLanguages

    __initContextMenuLanguages()

    Private method used to setup the Languages context sub menu.

    MiniEditor.__languageMenuTriggered

    __languageMenuTriggered(act)

    Private method to handle the selection of a lexer language.

    act
    reference to the action that was triggered (QAction)

    MiniEditor.__loadFile

    __loadFile(fileName, filetype = None)

    Private method to load the given file.

    fileName
    name of the file to load (QString)
    filetype
    type of the source file (string)

    MiniEditor.__markOccurrences

    __markOccurrences()

    Private method to mark all occurrences of the current word.

    MiniEditor.__maybeSave

    __maybeSave()

    Private method to ask the user to save the file, if it was modified.

    Returns:
    flag indicating, if it is ok to continue (boolean)

    MiniEditor.__modificationChanged

    __modificationChanged(m)

    Private slot to handle the modificationChanged signal.

    m
    modification status

    MiniEditor.__newFile

    __newFile()

    Private slot to create a new file.

    MiniEditor.__open

    __open()

    Private slot to open a file.

    MiniEditor.__printFile

    __printFile()

    Private slot to print the text.

    MiniEditor.__printPreview

    __printPreview(printer)

    Private slot to generate a print preview.

    printer
    reference to the printer object (QScintilla.Printer.Printer)

    MiniEditor.__printPreviewFile

    __printPreviewFile()

    Private slot to show a print preview of the text.

    MiniEditor.__readSettings

    __readSettings()

    Private method to read the settings remembered last time.

    MiniEditor.__readShortcut

    __readShortcut(act, category)

    Private function to read a single keyboard shortcut from the settings.

    act
    reference to the action object (E4Action)
    category
    category the action belongs to (string or QString)
    prefClass
    preferences class used as the storage area

    MiniEditor.__redo

    __redo()

    Public method to redo the last recorded change.

    MiniEditor.__replace

    __replace()

    Private method to handle the replace action.

    MiniEditor.__resetLanguage

    __resetLanguage()

    Private method used to reset the language selection.

    MiniEditor.__resizeLinenoMargin

    __resizeLinenoMargin()

    Private slot to resize the line numbers margin.

    MiniEditor.__save

    __save()

    Private slot to save a file.

    MiniEditor.__saveAs

    __saveAs()

    Private slot to save a file with a new name.

    MiniEditor.__saveFile

    __saveFile(fileName)

    Private method to save to the given file.

    fileName
    name of the file to save to (QString)
    Returns:
    flag indicating success (boolean)

    MiniEditor.__search

    __search()

    Private method to handle the search action.

    MiniEditor.__searchClearMarkers

    __searchClearMarkers()

    Private method to clear the search markers of the active window.

    MiniEditor.__selectAll

    __selectAll()

    Private slot handling the select all context menu action.

    MiniEditor.__selectPygmentsLexer

    __selectPygmentsLexer()

    Private method to select a specific pygments lexer.

    Returns:
    name of the selected pygments lexer (string)

    MiniEditor.__setCurrentFile

    __setCurrentFile(fileName)

    Private method to register the file name of the current file.

    fileName
    name of the file to register (string or QString)

    MiniEditor.__setEolMode

    __setEolMode()

    Private method to configure the eol mode of the editor.

    MiniEditor.__setMargins

    __setMargins()

    Private method to configure the margins.

    MiniEditor.__setMonospaced

    __setMonospaced(on)

    Private method to set/reset a monospaced font.

    on
    flag to indicate usage of a monospace font (boolean)

    MiniEditor.__setSbFile

    __setSbFile(line = None, pos = None)

    Private method to set the file info in the status bar.

    line
    line number to display (int)
    pos
    character position to display (int)

    MiniEditor.__setTextDisplay

    __setTextDisplay()

    Private method to configure the text display.

    MiniEditor.__showContextMenuLanguages

    __showContextMenuLanguages()

    Private slot handling the aboutToShow signal of the languages context menu.

    MiniEditor.__strippedName

    __strippedName(fullFileName)

    Private method to return the filename part of the given path.

    fullFileName
    full pathname of the given file (QString)
    Returns:
    filename part (QString)

    MiniEditor.__styleNeeded

    __styleNeeded(position)

    Private slot to handle the need for more styling.

    position
    end position, that needs styling (integer)

    MiniEditor.__undo

    __undo()

    Public method to undo the last recorded change.

    MiniEditor.__whatsThis

    __whatsThis()

    Private slot called in to enter Whats This mode.

    MiniEditor.__writeSettings

    __writeSettings()

    Private method to write the settings for reuse.

    MiniEditor.activeWindow

    activeWindow()

    Public method to fulfill the ViewManager interface.

    Returns:
    reference to the text edit component (QsciScintillaCompat)

    MiniEditor.clearSearchIndicators

    clearSearchIndicators()

    Public method to clear all search indicators.

    MiniEditor.closeEvent

    closeEvent(event)

    Public method to handle the close event.

    event
    close event (QCloseEvent)

    MiniEditor.getFileName

    getFileName()

    Public method to return the name of the file being displayed.

    Returns:
    filename of the displayed file (string)

    MiniEditor.getLanguage

    getLanguage()

    Public method to retrieve the language of the editor.

    Returns:
    language of the editor (QString)

    MiniEditor.getSRHistory

    getSRHistory(key)

    Public method to get the search or replace history list.

    key
    list to return (must be 'search' or 'replace')
    Returns:
    the requested history list (QStringList)

    MiniEditor.readLine0

    readLine0(fn, createIt = False)

    Public slot to read the first line from a file.

    fn
    filename to read from (string or QString)
    createIt
    flag indicating the creation of a new file, if the given one doesn't exist (boolean)
    Returns:
    first line of the file (string)

    MiniEditor.setLanguage

    setLanguage(filename, initTextDisplay = True, pyname = "")

    Public method to set a lexer language.

    filename
    filename used to determine the associated lexer language (string)
    initTextDisplay
    flag indicating an initialization of the text display is required as well (boolean)
    pyname=
    name of the pygments lexer to use (string)

    MiniEditor.setSearchIndicator

    setSearchIndicator(startPos, indicLength)

    Public method to set a search indicator for the given range.

    startPos
    start position of the indicator (integer)
    indicLength
    length of the indicator (integer)

    MiniEditor.setText

    setText(txt, filetype = None)

    Public method to set the text programatically.

    txt
    text to be set (string or QString)
    filetype
    type of the source file (string)

    MiniEditor.textForFind

    textForFind()

    Public method to determine the selection or the current word for the next find operation.

    Returns:
    selection or current word (QString)


    MiniScintilla

    Class implementing a QsciScintillaCompat subclass for handling focus events.

    Derived from

    QsciScintillaCompat

    Class Attributes

    None

    Class Methods

    None

    Methods

    MiniScintilla Constructor
    focusInEvent Protected method called when the editor receives focus.
    focusOutEvent Public method called when the editor loses focus.
    getFileName Public method to return the name of the file being displayed.

    Static Methods

    None

    MiniScintilla (Constructor)

    MiniScintilla(parent = None)

    Constructor

    parent
    parent widget (QWidget)
    flags
    window flags

    MiniScintilla.focusInEvent

    focusInEvent(event)

    Protected method called when the editor receives focus.

    This method checks for modifications of the current file and rereads it upon request. The cursor is placed at the current position assuming, that it is in the vicinity of the old position after the reread.

    event
    the event object (QFocusEvent)

    MiniScintilla.focusOutEvent

    focusOutEvent(event)

    Public method called when the editor loses focus.

    event
    the event object (QFocusEvent)

    MiniScintilla.getFileName

    getFileName()

    Public method to return the name of the file being displayed.

    Returns:
    filename of the displayed file (string)

    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.ViewManager.BookmarkedFilesDialog.html0000644000175000001440000000013212261331350031036 xustar000000000000000030 mtime=1388688104.225227916 30 atime=1389081085.182724359 30 ctime=1389081086.311724332 eric4-4.5.18/eric/Documentation/Source/eric4.ViewManager.BookmarkedFilesDialog.html0000644000175000001440000001472612261331350030602 0ustar00detlevusers00000000000000 eric4.ViewManager.BookmarkedFilesDialog

    eric4.ViewManager.BookmarkedFilesDialog

    Module implementing a configuration dialog for the bookmarked files menu.

    Global Attributes

    None

    Classes

    BookmarkedFilesDialog Class implementing a configuration dialog for the bookmarked files menu.

    Functions

    None


    BookmarkedFilesDialog

    Class implementing a configuration dialog for the bookmarked files menu.

    Derived from

    QDialog, Ui_BookmarkedFilesDialog

    Class Attributes

    None

    Class Methods

    None

    Methods

    BookmarkedFilesDialog Constructor
    __swap Private method used two swap two list entries given by their index.
    getBookmarkedFiles Public method to retrieve the tools list.
    on_addButton_clicked Private slot to add a new entry.
    on_changeButton_clicked Private slot to change an entry.
    on_deleteButton_clicked Private slot to delete the selected entry.
    on_downButton_clicked Private slot to move an entry down in the list.
    on_fileButton_clicked Private slot to handle the file selection via a file selection dialog.
    on_fileEdit_textChanged Private slot to handle the textChanged signal of the file edit.
    on_filesList_currentRowChanged Private slot to set the lineedit depending on the selected entry.
    on_upButton_clicked Private slot to move an entry up in the list.

    Static Methods

    None

    BookmarkedFilesDialog (Constructor)

    BookmarkedFilesDialog(bookmarks, parent = None)

    Constructor

    bookmarks
    list of bookmarked files (QStringList)
    parent
    parent widget (QWidget)

    BookmarkedFilesDialog.__swap

    __swap(itm1, itm2)

    Private method used two swap two list entries given by their index.

    itm1
    index of first entry (int)
    itm2
    index of second entry (int)

    BookmarkedFilesDialog.getBookmarkedFiles

    getBookmarkedFiles()

    Public method to retrieve the tools list.

    Returns:
    a list of filenames (QStringList)

    BookmarkedFilesDialog.on_addButton_clicked

    on_addButton_clicked()

    Private slot to add a new entry.

    BookmarkedFilesDialog.on_changeButton_clicked

    on_changeButton_clicked()

    Private slot to change an entry.

    BookmarkedFilesDialog.on_deleteButton_clicked

    on_deleteButton_clicked()

    Private slot to delete the selected entry.

    BookmarkedFilesDialog.on_downButton_clicked

    on_downButton_clicked()

    Private slot to move an entry down in the list.

    BookmarkedFilesDialog.on_fileButton_clicked

    on_fileButton_clicked()

    Private slot to handle the file selection via a file selection dialog.

    BookmarkedFilesDialog.on_fileEdit_textChanged

    on_fileEdit_textChanged(txt)

    Private slot to handle the textChanged signal of the file edit.

    txt
    the text of the file edit (QString)

    BookmarkedFilesDialog.on_filesList_currentRowChanged

    on_filesList_currentRowChanged(row)

    Private slot to set the lineedit depending on the selected entry.

    row
    the current row (integer)

    BookmarkedFilesDialog.on_upButton_clicked

    on_upButton_clicked()

    Private slot to move an entry up in the list.


    eric4-4.5.18/eric/Documentation/Source/PaxHeaders.8617/eric4.QScintilla.__init__.html0000644000175000001440000000007410606662741026273 xustar000000000000000030 atime=1389081085.196724357 30 ctime=1389081086.311724332 eric4-4.5.18/eric/Documentation/Source/eric4.QScintilla.__init__.html0000644000175000001440000000374010606662741026024 0ustar00detlevusers00000000000000 eric4.QScintilla.__init__

    eric4.QScintilla.__init__

    Package implementing the editor and shell components of the eric4 IDE.

    The editor component of the eric4 IDE is based on the Qt port of the Scintilla editor widget. It supports syntax highlighting, code folding, has an interface to the integrated debugger and can be configured to the most possible degree.

    The shell component is derived from the editor component and is the visible component of the interactive language shell. It interacts with the debug client through the debug server.

    Classes

    None

    Functions

    getCompleter Module function to instantiate a lexer object for a given language.


    getCompleter

    getCompleter(language, editor, parent = None)

    Module function to instantiate a lexer object for a given language.

    language
    language of the lexer (string)
    editor
    reference to the editor object (QScintilla.Editor)
    parent
    reference to the parent object (QObject)
    Returns:
    reference to the instanciated lexer object (QsciLexer)

    eric4-4.5.18/eric/Documentation/PaxHeaders.8617/Help0000644000175000001440000000013212261331355020136 xustar000000000000000030 mtime=1388688109.158230393 30 atime=1389081086.015724339 30 ctime=1389081086.315724332 eric4-4.5.18/eric/Documentation/Help/0000755000175000001440000000000012261331355017745 5ustar00detlevusers00000000000000eric4-4.5.18/eric/Documentation/Help/PaxHeaders.8617/source.qhp0000644000175000001440000000013212261331354022224 xustar000000000000000030 mtime=1388688108.711230169 30 atime=1389081085.214724359 30 ctime=1389081086.311724332 eric4-4.5.18/eric/Documentation/Help/source.qhp0000644000175000001440000547163312261331354022001 0ustar00detlevusers00000000000000 org.eric4.ide.45 eric4 4.5 eric4 ide 4.5 eric4 ide
    eric4.DataViews.CodeMetrics.html eric4.DataViews.CodeMetricsDialog.html eric4.DataViews.PyCoverageDialog.html eric4.DataViews.PyProfileDialog.html eric4.DebugClients.Python.AsyncFile.html eric4.DebugClients.Python.AsyncIO.html eric4.DebugClients.Python.DCTestResult.html eric4.DebugClients.Python.DebugBase.html eric4.DebugClients.Python.DebugClient.html eric4.DebugClients.Python.DebugClientBase.html eric4.DebugClients.Python.DebugClientCapabilities.html eric4.DebugClients.Python.DebugClientThreads.html eric4.DebugClients.Python.DebugConfig.html eric4.DebugClients.Python.DebugProtocol.html eric4.DebugClients.Python.DebugThread.html eric4.DebugClients.Python.FlexCompleter.html eric4.DebugClients.Python.PyProfile.html eric4.DebugClients.Python.eric4dbgstub.html eric4.DebugClients.Python.getpass.html eric4.DebugClients.Python3.AsyncFile.html eric4.DebugClients.Python3.AsyncIO.html eric4.DebugClients.Python3.DCTestResult.html eric4.DebugClients.Python3.DebugBase.html eric4.DebugClients.Python3.DebugClient.html eric4.DebugClients.Python3.DebugClientBase.html eric4.DebugClients.Python3.DebugClientCapabilities.html eric4.DebugClients.Python3.DebugClientThreads.html eric4.DebugClients.Python3.DebugConfig.html eric4.DebugClients.Python3.DebugProtocol.html eric4.DebugClients.Python3.DebugThread.html eric4.DebugClients.Python3.FlexCompleter.html eric4.DebugClients.Python3.PyProfile.html eric4.DebugClients.Python3.eric4dbgstub.html eric4.DebugClients.Python3.getpass.html eric4.DebugClients.Ruby.AsyncFile.html eric4.DebugClients.Ruby.AsyncIO.html eric4.DebugClients.Ruby.Completer.html eric4.DebugClients.Ruby.Config.html eric4.DebugClients.Ruby.DebugClient.html eric4.DebugClients.Ruby.DebugClientBaseModule.html eric4.DebugClients.Ruby.DebugClientCapabilities.html eric4.DebugClients.Ruby.DebugProtocol.html eric4.DebugClients.Ruby.DebugQuit.html eric4.DebugClients.Ruby.Debuggee.html eric4.DebugClients.Ruby.__init__.html eric4.Debugger.BreakPointModel.html eric4.Debugger.BreakPointViewer.html eric4.Debugger.Config.html eric4.Debugger.DebugClientCapabilities.html eric4.Debugger.DebugProtocol.html eric4.Debugger.DebugServer.html eric4.Debugger.DebugUI.html eric4.Debugger.DebugViewer.html eric4.Debugger.DebuggerInterfaceNone.html eric4.Debugger.DebuggerInterfacePython.html eric4.Debugger.DebuggerInterfacePython3.html eric4.Debugger.DebuggerInterfaceRuby.html eric4.Debugger.EditBreakpointDialog.html eric4.Debugger.EditWatchpointDialog.html eric4.Debugger.ExceptionLogger.html eric4.Debugger.ExceptionsFilterDialog.html eric4.Debugger.StartDialog.html eric4.Debugger.VariableDetailDialog.html eric4.Debugger.VariablesFilterDialog.html eric4.Debugger.VariablesViewer.html eric4.Debugger.WatchPointModel.html eric4.Debugger.WatchPointViewer.html eric4.DocumentationTools.APIGenerator.html eric4.DocumentationTools.Config.html eric4.DocumentationTools.IndexGenerator.html eric4.DocumentationTools.ModuleDocumentor.html eric4.DocumentationTools.QtHelpGenerator.html eric4.DocumentationTools.TemplatesListsStyle.html eric4.DocumentationTools.TemplatesListsStyleCSS.html eric4.DocumentationTools.__init__.html eric4.E4Graphics.E4ArrowItem.html eric4.E4Graphics.E4GraphicsView.html eric4.E4Gui.E4Action.html eric4.E4Gui.E4Completers.html eric4.E4Gui.E4Led.html eric4.E4Gui.E4LineEdit.html eric4.E4Gui.E4ListView.html eric4.E4Gui.E4ModelMenu.html eric4.E4Gui.E4ModelToolBar.html eric4.E4Gui.E4SideBar.html eric4.E4Gui.E4SingleApplication.html eric4.E4Gui.E4SqueezeLabels.html eric4.E4Gui.E4TabWidget.html eric4.E4Gui.E4TableView.html eric4.E4Gui.E4ToolBarDialog.html eric4.E4Gui.E4ToolBarManager.html eric4.E4Gui.E4ToolBox.html eric4.E4Gui.E4TreeSortFilterProxyModel.html eric4.E4Gui.E4TreeView.html eric4.E4Network.E4NetworkHeaderDetailsDialog.html eric4.E4Network.E4NetworkMonitor.html eric4.E4Network.E4NetworkProxyFactory.html eric4.E4XML.Config.html eric4.E4XML.DebuggerPropertiesHandler.html eric4.E4XML.DebuggerPropertiesWriter.html eric4.E4XML.HighlightingStylesHandler.html eric4.E4XML.HighlightingStylesWriter.html eric4.E4XML.MultiProjectHandler.html eric4.E4XML.MultiProjectWriter.html eric4.E4XML.PluginRepositoryHandler.html eric4.E4XML.ProjectHandler.html eric4.E4XML.ProjectWriter.html eric4.E4XML.SessionHandler.html eric4.E4XML.SessionWriter.html eric4.E4XML.ShortcutsHandler.html eric4.E4XML.ShortcutsWriter.html eric4.E4XML.TasksHandler.html eric4.E4XML.TasksWriter.html eric4.E4XML.TemplatesHandler.html eric4.E4XML.TemplatesWriter.html eric4.E4XML.UserProjectHandler.html eric4.E4XML.UserProjectWriter.html eric4.E4XML.XMLEntityResolver.html eric4.E4XML.XMLErrorHandler.html eric4.E4XML.XMLHandlerBase.html eric4.E4XML.XMLMessageDialog.html eric4.E4XML.XMLUtilities.html eric4.E4XML.XMLWriterBase.html eric4.Globals.__init__.html eric4.Graphics.ApplicationDiagram.html eric4.Graphics.AssociationItem.html eric4.Graphics.ClassItem.html eric4.Graphics.GraphicsUtilities.html eric4.Graphics.ImportsDiagram.html eric4.Graphics.ModuleItem.html eric4.Graphics.PackageDiagram.html eric4.Graphics.PackageItem.html eric4.Graphics.PixmapDiagram.html eric4.Graphics.SvgDiagram.html eric4.Graphics.UMLClassDiagram.html eric4.Graphics.UMLDialog.html eric4.Graphics.UMLGraphicsView.html eric4.Graphics.UMLItem.html eric4.Graphics.UMLSceneSizeDialog.html eric4.Graphics.ZoomDialog.html eric4.Helpviewer.AdBlock.AdBlockAccessHandler.html eric4.Helpviewer.AdBlock.AdBlockBlockedNetworkReply.html eric4.Helpviewer.AdBlock.AdBlockDialog.html eric4.Helpviewer.AdBlock.AdBlockManager.html eric4.Helpviewer.AdBlock.AdBlockModel.html eric4.Helpviewer.AdBlock.AdBlockNetwork.html eric4.Helpviewer.AdBlock.AdBlockPage.html eric4.Helpviewer.AdBlock.AdBlockRule.html eric4.Helpviewer.AdBlock.AdBlockSubscription.html eric4.Helpviewer.Bookmarks.AddBookmarkDialog.html eric4.Helpviewer.Bookmarks.BookmarkNode.html eric4.Helpviewer.Bookmarks.BookmarksDialog.html eric4.Helpviewer.Bookmarks.BookmarksManager.html eric4.Helpviewer.Bookmarks.BookmarksMenu.html eric4.Helpviewer.Bookmarks.BookmarksModel.html eric4.Helpviewer.Bookmarks.BookmarksToolBar.html eric4.Helpviewer.Bookmarks.DefaultBookmarks.html eric4.Helpviewer.Bookmarks.XbelReader.html eric4.Helpviewer.Bookmarks.XbelWriter.html eric4.Helpviewer.CookieJar.CookieDetailsDialog.html eric4.Helpviewer.CookieJar.CookieExceptionsModel.html eric4.Helpviewer.CookieJar.CookieJar.html eric4.Helpviewer.CookieJar.CookieModel.html eric4.Helpviewer.CookieJar.CookiesConfigurationDialog.html eric4.Helpviewer.CookieJar.CookiesDialog.html eric4.Helpviewer.CookieJar.CookiesExceptionsDialog.html eric4.Helpviewer.DownloadDialog.html eric4.Helpviewer.HTMLResources.html eric4.Helpviewer.HelpBrowserWV.html eric4.Helpviewer.HelpClearPrivateDataDialog.html eric4.Helpviewer.HelpDocsInstaller.html eric4.Helpviewer.HelpIndexWidget.html eric4.Helpviewer.HelpLanguagesDialog.html eric4.Helpviewer.HelpSearchWidget.html eric4.Helpviewer.HelpTocWidget.html eric4.Helpviewer.HelpTopicDialog.html eric4.Helpviewer.HelpWebSearchWidget.html eric4.Helpviewer.HelpWindow.html eric4.Helpviewer.History.HistoryCompleter.html eric4.Helpviewer.History.HistoryDialog.html eric4.Helpviewer.History.HistoryFilterModel.html eric4.Helpviewer.History.HistoryManager.html eric4.Helpviewer.History.HistoryMenu.html eric4.Helpviewer.History.HistoryModel.html eric4.Helpviewer.History.HistoryTreeModel.html eric4.Helpviewer.JavaScriptResources.html eric4.Helpviewer.Network.AboutAccessHandler.html eric4.Helpviewer.Network.EmptyNetworkReply.html eric4.Helpviewer.Network.NetworkAccessManager.html eric4.Helpviewer.Network.NetworkAccessManagerProxy.html eric4.Helpviewer.Network.NetworkDiskCache.html eric4.Helpviewer.Network.NetworkProtocolUnknownErrorReply.html eric4.Helpviewer.Network.NetworkReply.html eric4.Helpviewer.Network.PyrcAccessHandler.html eric4.Helpviewer.Network.QtHelpAccessHandler.html eric4.Helpviewer.Network.SchemeAccessHandler.html eric4.Helpviewer.OpenSearch.OpenSearchDefaultEngines.html eric4.Helpviewer.OpenSearch.OpenSearchDialog.html eric4.Helpviewer.OpenSearch.OpenSearchEditDialog.html eric4.Helpviewer.OpenSearch.OpenSearchEngine.html eric4.Helpviewer.OpenSearch.OpenSearchEngineAction.html eric4.Helpviewer.OpenSearch.OpenSearchEngineModel.html eric4.Helpviewer.OpenSearch.OpenSearchManager.html eric4.Helpviewer.OpenSearch.OpenSearchReader.html eric4.Helpviewer.OpenSearch.OpenSearchWriter.html eric4.Helpviewer.Passwords.PasswordManager.html eric4.Helpviewer.Passwords.PasswordModel.html eric4.Helpviewer.Passwords.PasswordsDialog.html eric4.Helpviewer.QtHelpDocumentationDialog.html eric4.Helpviewer.QtHelpFiltersDialog.html eric4.Helpviewer.SearchWidget.html eric4.IconEditor.IconEditorGrid.html eric4.IconEditor.IconEditorPalette.html eric4.IconEditor.IconEditorWindow.html eric4.IconEditor.IconSizeDialog.html eric4.IconEditor.IconZoomDialog.html eric4.IconEditor.cursors.cursors_rc.html eric4.KdeQt.KQApplication.html eric4.KdeQt.KQColorDialog.html eric4.KdeQt.KQFileDialog.html eric4.KdeQt.KQFontDialog.html eric4.KdeQt.KQInputDialog.html eric4.KdeQt.KQMainWindow.html eric4.KdeQt.KQMessageBox.html eric4.KdeQt.KQPrintDialog.html eric4.KdeQt.KQPrinter.html eric4.KdeQt.KQProgressDialog.html eric4.KdeQt.__init__.html eric4.MultiProject.AddProjectDialog.html eric4.MultiProject.MultiProject.html eric4.MultiProject.MultiProjectBrowser.html eric4.MultiProject.PropertiesDialog.html eric4.PluginManager.PluginDetailsDialog.html eric4.PluginManager.PluginExceptions.html eric4.PluginManager.PluginInfoDialog.html eric4.PluginManager.PluginInstallDialog.html eric4.PluginManager.PluginManager.html eric4.PluginManager.PluginRepositoryDialog.html eric4.PluginManager.PluginUninstallDialog.html eric4.Plugins.AboutPlugin.AboutDialog.html eric4.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheckerDialog.html eric4.Plugins.CheckerPlugins.Tabnanny.Tabnanny.html eric4.Plugins.CheckerPlugins.Tabnanny.TabnannyDialog.html eric4.Plugins.DocumentationPlugins.Ericapi.EricapiConfigDialog.html eric4.Plugins.DocumentationPlugins.Ericapi.EricapiExecDialog.html eric4.Plugins.DocumentationPlugins.Ericdoc.EricdocConfigDialog.html eric4.Plugins.DocumentationPlugins.Ericdoc.EricdocExecDialog.html eric4.Plugins.PluginAbout.html eric4.Plugins.PluginEricapi.html eric4.Plugins.PluginEricdoc.html eric4.Plugins.PluginSyntaxChecker.html eric4.Plugins.PluginTabnanny.html eric4.Plugins.PluginVcsPySvn.html eric4.Plugins.PluginVcsSubversion.html eric4.Plugins.PluginVmListspace.html eric4.Plugins.PluginVmMdiArea.html eric4.Plugins.PluginVmTabview.html eric4.Plugins.PluginVmWorkspace.html eric4.Plugins.PluginWizardPyRegExp.html eric4.Plugins.PluginWizardQColorDialog.html eric4.Plugins.PluginWizardQFileDialog.html eric4.Plugins.PluginWizardQFontDialog.html eric4.Plugins.PluginWizardQInputDialog.html eric4.Plugins.PluginWizardQMessageBox.html eric4.Plugins.PluginWizardQRegExp.html eric4.Plugins.VcsPlugins.vcsPySvn.Config.html eric4.Plugins.VcsPlugins.vcsPySvn.ConfigurationPage.SubversionPage.html eric4.Plugins.VcsPlugins.vcsPySvn.ProjectBrowserHelper.html eric4.Plugins.VcsPlugins.vcsPySvn.ProjectHelper.html eric4.Plugins.VcsPlugins.vcsPySvn.SvnBlameDialog.html eric4.Plugins.VcsPlugins.vcsPySvn.SvnChangeListsDialog.html eric4.Plugins.VcsPlugins.vcsPySvn.SvnCommandDialog.html eric4.Plugins.VcsPlugins.vcsPySvn.SvnCommitDialog.html eric4.Plugins.VcsPlugins.vcsPySvn.SvnConst.html eric4.Plugins.VcsPlugins.vcsPySvn.SvnCopyDialog.html eric4.Plugins.VcsPlugins.vcsPySvn.SvnDialog.html eric4.Plugins.VcsPlugins.vcsPySvn.SvnDialogMixin.html eric4.Plugins.VcsPlugins.vcsPySvn.SvnDiffDialog.html eric4.Plugins.VcsPlugins.vcsPySvn.SvnInfoDialog.html eric4.Plugins.VcsPlugins.vcsPySvn.SvnLogBrowserDialog.html eric4.Plugins.VcsPlugins.vcsPySvn.SvnLogDialog.html eric4.Plugins.VcsPlugins.vcsPySvn.SvnLoginDialog.html eric4.Plugins.VcsPlugins.vcsPySvn.SvnMergeDialog.html eric4.Plugins.VcsPlugins.vcsPySvn.SvnNewProjectOptionsDialog.html eric4.Plugins.VcsPlugins.vcsPySvn.SvnOptionsDialog.html eric4.Plugins.VcsPlugins.vcsPySvn.SvnPropDelDialog.html eric4.Plugins.VcsPlugins.vcsPySvn.SvnPropListDialog.html eric4.Plugins.VcsPlugins.vcsPySvn.SvnPropSetDialog.html eric4.Plugins.VcsPlugins.vcsPySvn.SvnRelocateDialog.html eric4.Plugins.VcsPlugins.vcsPySvn.SvnRepoBrowserDialog.html eric4.Plugins.VcsPlugins.vcsPySvn.SvnRevisionSelectionDialog.html eric4.Plugins.VcsPlugins.vcsPySvn.SvnStatusDialog.html eric4.Plugins.VcsPlugins.vcsPySvn.SvnStatusMonitorThread.html eric4.Plugins.VcsPlugins.vcsPySvn.SvnSwitchDialog.html eric4.Plugins.VcsPlugins.vcsPySvn.SvnTagBranchListDialog.html eric4.Plugins.VcsPlugins.vcsPySvn.SvnTagDialog.html eric4.Plugins.VcsPlugins.vcsPySvn.SvnUrlSelectionDialog.html eric4.Plugins.VcsPlugins.vcsPySvn.SvnUtilities.html eric4.Plugins.VcsPlugins.vcsPySvn.subversion.html eric4.Plugins.VcsPlugins.vcsSubversion.Config.html eric4.Plugins.VcsPlugins.vcsSubversion.ConfigurationPage.SubversionPage.html eric4.Plugins.VcsPlugins.vcsSubversion.ProjectBrowserHelper.html eric4.Plugins.VcsPlugins.vcsSubversion.ProjectHelper.html eric4.Plugins.VcsPlugins.vcsSubversion.SvnBlameDialog.html eric4.Plugins.VcsPlugins.vcsSubversion.SvnChangeListsDialog.html eric4.Plugins.VcsPlugins.vcsSubversion.SvnCommandDialog.html eric4.Plugins.VcsPlugins.vcsSubversion.SvnCommitDialog.html eric4.Plugins.VcsPlugins.vcsSubversion.SvnCopyDialog.html eric4.Plugins.VcsPlugins.vcsSubversion.SvnDialog.html eric4.Plugins.VcsPlugins.vcsSubversion.SvnDiffDialog.html eric4.Plugins.VcsPlugins.vcsSubversion.SvnLogBrowserDialog.html eric4.Plugins.VcsPlugins.vcsSubversion.SvnLogDialog.html eric4.Plugins.VcsPlugins.vcsSubversion.SvnMergeDialog.html eric4.Plugins.VcsPlugins.vcsSubversion.SvnNewProjectOptionsDialog.html eric4.Plugins.VcsPlugins.vcsSubversion.SvnOptionsDialog.html eric4.Plugins.VcsPlugins.vcsSubversion.SvnPropListDialog.html eric4.Plugins.VcsPlugins.vcsSubversion.SvnPropSetDialog.html eric4.Plugins.VcsPlugins.vcsSubversion.SvnRelocateDialog.html eric4.Plugins.VcsPlugins.vcsSubversion.SvnRepoBrowserDialog.html eric4.Plugins.VcsPlugins.vcsSubversion.SvnRevisionSelectionDialog.html eric4.Plugins.VcsPlugins.vcsSubversion.SvnStatusDialog.html eric4.Plugins.VcsPlugins.vcsSubversion.SvnStatusMonitorThread.html eric4.Plugins.VcsPlugins.vcsSubversion.SvnSwitchDialog.html eric4.Plugins.VcsPlugins.vcsSubversion.SvnTagBranchListDialog.html eric4.Plugins.VcsPlugins.vcsSubversion.SvnTagDialog.html eric4.Plugins.VcsPlugins.vcsSubversion.SvnUrlSelectionDialog.html eric4.Plugins.VcsPlugins.vcsSubversion.SvnUtilities.html eric4.Plugins.VcsPlugins.vcsSubversion.subversion.html eric4.Plugins.ViewManagerPlugins.Listspace.Listspace.html eric4.Plugins.ViewManagerPlugins.MdiArea.MdiArea.html eric4.Plugins.ViewManagerPlugins.Tabview.Tabview.html eric4.Plugins.ViewManagerPlugins.Workspace.Workspace.html eric4.Plugins.WizardPlugins.ColorDialogWizard.ColorDialogWizardDialog.html eric4.Plugins.WizardPlugins.FileDialogWizard.FileDialogWizardDialog.html eric4.Plugins.WizardPlugins.FontDialogWizard.FontDialogWizardDialog.html eric4.Plugins.WizardPlugins.InputDialogWizard.InputDialogWizardDialog.html eric4.Plugins.WizardPlugins.MessageBoxWizard.MessageBoxWizardDialog.html eric4.Plugins.WizardPlugins.PyRegExpWizard.PyRegExpWizardCharactersDialog.html eric4.Plugins.WizardPlugins.PyRegExpWizard.PyRegExpWizardDialog.html eric4.Plugins.WizardPlugins.PyRegExpWizard.PyRegExpWizardRepeatDialog.html eric4.Plugins.WizardPlugins.QRegExpWizard.QRegExpWizardCharactersDialog.html eric4.Plugins.WizardPlugins.QRegExpWizard.QRegExpWizardDialog.html eric4.Plugins.WizardPlugins.QRegExpWizard.QRegExpWizardRepeatDialog.html eric4.Preferences.ConfigurationDialog.html eric4.Preferences.ConfigurationPages.ApplicationPage.html eric4.Preferences.ConfigurationPages.ConfigurationPageBase.html eric4.Preferences.ConfigurationPages.CorbaPage.html eric4.Preferences.ConfigurationPages.DebuggerGeneralPage.html eric4.Preferences.ConfigurationPages.DebuggerPython3Page.html eric4.Preferences.ConfigurationPages.DebuggerPythonPage.html eric4.Preferences.ConfigurationPages.DebuggerRubyPage.html eric4.Preferences.ConfigurationPages.EditorAPIsPage.html eric4.Preferences.ConfigurationPages.EditorAutocompletionPage.html eric4.Preferences.ConfigurationPages.EditorAutocompletionQScintillaPage.html eric4.Preferences.ConfigurationPages.EditorCalltipsPage.html eric4.Preferences.ConfigurationPages.EditorCalltipsQScintillaPage.html eric4.Preferences.ConfigurationPages.EditorExportersPage.html eric4.Preferences.ConfigurationPages.EditorFilePage.html eric4.Preferences.ConfigurationPages.EditorGeneralPage.html eric4.Preferences.ConfigurationPages.EditorHighlightersPage.html eric4.Preferences.ConfigurationPages.EditorHighlightingStylesPage.html eric4.Preferences.ConfigurationPages.EditorKeywordsPage.html eric4.Preferences.ConfigurationPages.EditorPropertiesPage.html eric4.Preferences.ConfigurationPages.EditorSearchPage.html eric4.Preferences.ConfigurationPages.EditorSpellCheckingPage.html eric4.Preferences.ConfigurationPages.EditorStylesPage.html eric4.Preferences.ConfigurationPages.EditorTypingPage.html eric4.Preferences.ConfigurationPages.EmailPage.html eric4.Preferences.ConfigurationPages.GraphicsPage.html eric4.Preferences.ConfigurationPages.HelpAppearancePage.html eric4.Preferences.ConfigurationPages.HelpDocumentationPage.html eric4.Preferences.ConfigurationPages.HelpViewersPage.html eric4.Preferences.ConfigurationPages.HelpWebBrowserPage.html eric4.Preferences.ConfigurationPages.IconsPage.html eric4.Preferences.ConfigurationPages.IconsPreviewDialog.html eric4.Preferences.ConfigurationPages.InterfacePage.html eric4.Preferences.ConfigurationPages.MultiProjectPage.html eric4.Preferences.ConfigurationPages.NetworkPage.html eric4.Preferences.ConfigurationPages.PluginManagerPage.html eric4.Preferences.ConfigurationPages.PrinterPage.html eric4.Preferences.ConfigurationPages.ProjectBrowserPage.html eric4.Preferences.ConfigurationPages.ProjectPage.html eric4.Preferences.ConfigurationPages.PythonPage.html eric4.Preferences.ConfigurationPages.QtPage.html eric4.Preferences.ConfigurationPages.ShellPage.html eric4.Preferences.ConfigurationPages.TasksPage.html eric4.Preferences.ConfigurationPages.TemplatesPage.html eric4.Preferences.ConfigurationPages.TrayStarterPage.html eric4.Preferences.ConfigurationPages.VcsPage.html eric4.Preferences.ConfigurationPages.ViewmanagerPage.html eric4.Preferences.PreferencesLexer.html eric4.Preferences.ProgramsDialog.html eric4.Preferences.ShortcutDialog.html eric4.Preferences.Shortcuts.html eric4.Preferences.ShortcutsDialog.html eric4.Preferences.ToolConfigurationDialog.html eric4.Preferences.ToolGroupConfigurationDialog.html eric4.Preferences.ViewProfileDialog.html eric4.Preferences.__init__.html eric4.Project.AddDirectoryDialog.html eric4.Project.AddFileDialog.html eric4.Project.AddFoundFilesDialog.html eric4.Project.AddLanguageDialog.html eric4.Project.CreateDialogCodeDialog.html eric4.Project.DebuggerPropertiesDialog.html eric4.Project.FiletypeAssociationDialog.html eric4.Project.LexerAssociationDialog.html eric4.Project.NewDialogClassDialog.html eric4.Project.NewPythonPackageDialog.html eric4.Project.Project.html eric4.Project.ProjectBaseBrowser.html eric4.Project.ProjectBrowser.html eric4.Project.ProjectBrowserFlags.html eric4.Project.ProjectBrowserModel.html eric4.Project.ProjectBrowserSortFilterProxyModel.html eric4.Project.ProjectFormsBrowser.html eric4.Project.ProjectInterfacesBrowser.html eric4.Project.ProjectOthersBrowser.html eric4.Project.ProjectResourcesBrowser.html eric4.Project.ProjectSourcesBrowser.html eric4.Project.ProjectTranslationsBrowser.html eric4.Project.PropertiesDialog.html eric4.Project.SpellingPropertiesDialog.html eric4.Project.TranslationPropertiesDialog.html eric4.Project.UserPropertiesDialog.html eric4.PyUnit.UnittestDialog.html eric4.QScintilla.APIsManager.html eric4.QScintilla.Editor.html eric4.QScintilla.Exporters.ExporterBase.html eric4.QScintilla.Exporters.ExporterHTML.html eric4.QScintilla.Exporters.ExporterPDF.html eric4.QScintilla.Exporters.ExporterRTF.html eric4.QScintilla.Exporters.ExporterTEX.html eric4.QScintilla.Exporters.__init__.html eric4.QScintilla.GotoDialog.html eric4.QScintilla.Lexers.Lexer.html eric4.QScintilla.Lexers.LexerBash.html eric4.QScintilla.Lexers.LexerBatch.html eric4.QScintilla.Lexers.LexerCMake.html eric4.QScintilla.Lexers.LexerCPP.html eric4.QScintilla.Lexers.LexerCSS.html eric4.QScintilla.Lexers.LexerCSharp.html eric4.QScintilla.Lexers.LexerContainer.html eric4.QScintilla.Lexers.LexerD.html eric4.QScintilla.Lexers.LexerDiff.html eric4.QScintilla.Lexers.LexerFortran.html eric4.QScintilla.Lexers.LexerFortran77.html eric4.QScintilla.Lexers.LexerHTML.html eric4.QScintilla.Lexers.LexerIDL.html eric4.QScintilla.Lexers.LexerJava.html eric4.QScintilla.Lexers.LexerJavaScript.html eric4.QScintilla.Lexers.LexerLua.html eric4.QScintilla.Lexers.LexerMakefile.html eric4.QScintilla.Lexers.LexerMatlab.html eric4.QScintilla.Lexers.LexerOctave.html eric4.QScintilla.Lexers.LexerPOV.html eric4.QScintilla.Lexers.LexerPascal.html eric4.QScintilla.Lexers.LexerPerl.html eric4.QScintilla.Lexers.LexerPostScript.html eric4.QScintilla.Lexers.LexerProperties.html eric4.QScintilla.Lexers.LexerPygments.html eric4.QScintilla.Lexers.LexerPython.html eric4.QScintilla.Lexers.LexerRuby.html eric4.QScintilla.Lexers.LexerSQL.html eric4.QScintilla.Lexers.LexerTCL.html eric4.QScintilla.Lexers.LexerTeX.html eric4.QScintilla.Lexers.LexerVHDL.html eric4.QScintilla.Lexers.LexerXML.html eric4.QScintilla.Lexers.LexerYAML.html eric4.QScintilla.Lexers.__init__.html eric4.QScintilla.MiniEditor.html eric4.QScintilla.Printer.html eric4.QScintilla.QsciScintillaCompat.html eric4.QScintilla.SearchReplaceWidget.html eric4.QScintilla.Shell.html eric4.QScintilla.ShellHistoryDialog.html eric4.QScintilla.SpellChecker.html eric4.QScintilla.SpellCheckingDialog.html eric4.QScintilla.TypingCompleters.CompleterBase.html eric4.QScintilla.TypingCompleters.CompleterPython.html eric4.QScintilla.TypingCompleters.CompleterRuby.html eric4.QScintilla.TypingCompleters.__init__.html eric4.QScintilla.ZoomDialog.html eric4.QScintilla.__init__.html eric4.SqlBrowser.SqlBrowser.html eric4.SqlBrowser.SqlBrowserWidget.html eric4.SqlBrowser.SqlConnectionDialog.html eric4.SqlBrowser.SqlConnectionWidget.html eric4.Tasks.TaskFilterConfigDialog.html eric4.Tasks.TaskPropertiesDialog.html eric4.Tasks.TaskViewer.html eric4.Templates.TemplateMultipleVariablesDialog.html eric4.Templates.TemplatePropertiesDialog.html eric4.Templates.TemplateSingleVariableDialog.html eric4.Templates.TemplateViewer.html eric4.Tools.TRPreviewer.html eric4.Tools.TRSingleApplication.html eric4.Tools.TrayStarter.html eric4.Tools.UIPreviewer.html eric4.UI.AuthenticationDialog.html eric4.UI.Browser.html eric4.UI.BrowserModel.html eric4.UI.BrowserSortFilterProxyModel.html eric4.UI.CompareDialog.html eric4.UI.Config.html eric4.UI.DeleteFilesConfirmationDialog.html eric4.UI.DiffDialog.html eric4.UI.EmailDialog.html eric4.UI.ErrorLogDialog.html eric4.UI.FindFileDialog.html eric4.UI.FindFileNameDialog.html eric4.UI.Info.html eric4.UI.LogView.html eric4.UI.PixmapCache.html eric4.UI.SplashScreen.html eric4.UI.UserInterface.html eric4.Utilities.AutoSaver.html eric4.Utilities.ClassBrowsers.ClbrBaseClasses.html eric4.Utilities.ClassBrowsers.__init__.html eric4.Utilities.ClassBrowsers.idlclbr.html eric4.Utilities.ClassBrowsers.pyclbr.html eric4.Utilities.ClassBrowsers.rbclbr.html eric4.Utilities.ModuleParser.html eric4.Utilities.SingleApplication.html eric4.Utilities.Startup.html eric4.Utilities.__init__.html eric4.Utilities.uic.html eric4.VCS.CommandOptionsDialog.html eric4.VCS.ProjectBrowserHelper.html eric4.VCS.ProjectHelper.html eric4.VCS.RepositoryInfoDialog.html eric4.VCS.StatusMonitorLed.html eric4.VCS.StatusMonitorThread.html eric4.VCS.VersionControl.html eric4.VCS.__init__.html eric4.ViewManager.BookmarkedFilesDialog.html eric4.ViewManager.ViewManager.html eric4.ViewManager.__init__.html eric4.compileUiFiles.html eric4.eric4.html eric4.eric4_api.html eric4.eric4_compare.html eric4.eric4_configure.html eric4.eric4_diff.html eric4.eric4_doc.html eric4.eric4_editor.html eric4.eric4_iconeditor.html eric4.eric4_plugininstall.html eric4.eric4_pluginrepository.html eric4.eric4_pluginuninstall.html eric4.eric4_qregexp.html eric4.eric4_re.html eric4.eric4_sqlbrowser.html eric4.eric4_tray.html eric4.eric4_trpreviewer.html eric4.eric4_uipreviewer.html eric4.eric4_unittest.html eric4.eric4_webbrowser.html eric4.eric4config.html eric4.install-i18n.html eric4.install.html eric4.patch_modpython.html eric4.patch_pyxml.html eric4.uninstall.html index-eric4.DataViews.html index-eric4.DebugClients.Python.html index-eric4.DebugClients.Python3.html index-eric4.DebugClients.Ruby.html index-eric4.DebugClients.html index-eric4.Debugger.html index-eric4.DocumentationTools.html index-eric4.E4Graphics.html index-eric4.E4Gui.html index-eric4.E4Network.html index-eric4.E4XML.html index-eric4.Globals.html index-eric4.Graphics.html index-eric4.Helpviewer.AdBlock.html index-eric4.Helpviewer.Bookmarks.html index-eric4.Helpviewer.CookieJar.html index-eric4.Helpviewer.History.html index-eric4.Helpviewer.Network.html index-eric4.Helpviewer.OpenSearch.html index-eric4.Helpviewer.Passwords.html index-eric4.Helpviewer.html index-eric4.IconEditor.cursors.html index-eric4.IconEditor.html index-eric4.KdeQt.html index-eric4.MultiProject.html index-eric4.PluginManager.html index-eric4.Plugins.AboutPlugin.html index-eric4.Plugins.CheckerPlugins.SyntaxChecker.html index-eric4.Plugins.CheckerPlugins.Tabnanny.html index-eric4.Plugins.CheckerPlugins.html index-eric4.Plugins.DocumentationPlugins.Ericapi.html index-eric4.Plugins.DocumentationPlugins.Ericdoc.html index-eric4.Plugins.DocumentationPlugins.html index-eric4.Plugins.VcsPlugins.html index-eric4.Plugins.VcsPlugins.vcsPySvn.ConfigurationPage.html index-eric4.Plugins.VcsPlugins.vcsPySvn.html index-eric4.Plugins.VcsPlugins.vcsSubversion.ConfigurationPage.html index-eric4.Plugins.VcsPlugins.vcsSubversion.html index-eric4.Plugins.ViewManagerPlugins.Listspace.html index-eric4.Plugins.ViewManagerPlugins.MdiArea.html index-eric4.Plugins.ViewManagerPlugins.Tabview.html index-eric4.Plugins.ViewManagerPlugins.Workspace.html index-eric4.Plugins.ViewManagerPlugins.html index-eric4.Plugins.WizardPlugins.ColorDialogWizard.html index-eric4.Plugins.WizardPlugins.FileDialogWizard.html index-eric4.Plugins.WizardPlugins.FontDialogWizard.html index-eric4.Plugins.WizardPlugins.InputDialogWizard.html index-eric4.Plugins.WizardPlugins.MessageBoxWizard.html index-eric4.Plugins.WizardPlugins.PyRegExpWizard.html index-eric4.Plugins.WizardPlugins.QRegExpWizard.html index-eric4.Plugins.WizardPlugins.html index-eric4.Plugins.html index-eric4.Preferences.ConfigurationPages.html index-eric4.Preferences.html index-eric4.Project.html index-eric4.PyUnit.html index-eric4.QScintilla.Exporters.html index-eric4.QScintilla.Lexers.html index-eric4.QScintilla.TypingCompleters.html index-eric4.QScintilla.html index-eric4.SqlBrowser.html index-eric4.Tasks.html index-eric4.Templates.html index-eric4.Tools.html index-eric4.UI.html index-eric4.Utilities.ClassBrowsers.html index-eric4.Utilities.html index-eric4.VCS.html index-eric4.ViewManager.html index-eric4.html index.html eric4-4.5.18/eric/Documentation/Help/PaxHeaders.8617/source.qch0000644000175000001440000000013212261331355022210 xustar000000000000000030 mtime=1388688109.158230393 30 atime=1389081085.244724358 30 ctime=1389081086.311724332 eric4-4.5.18/eric/Documentation/Help/source.qch0000644000175000001440001077600012261331355021755 0ustar00detlevusers00000000000000SQLite format 3@ &&- A9x--#tableIndexFilterTableIndexFilterTableCREATE TABLE IndexFilterTable (FilterAttributeId INTEGER, IndexId INTEGER )c))tableIndexItemTableIndexItemTableCREATE TABLE IndexItemTable (Id INTEGER, IndexId INTEGER ) !! tableIndexTableIndexTableCREATE TABLE IndexTable (Id INTEGER PRIMARY KEY, Name TEXT, Identifier TEXT, NamespaceId INTEGER, FileId INTEGER, Anchor TEXT )h##tableFilterTableFilterTableCREATE TABLE FilterTable (NameId INTEGER, FilterAttributeId INTEGER )l++tableFilterNameTableFilterNameTableCREATE TABLE FilterNameTable (Id INTEGER PRIMARY KEY, Name TEXT ){55tableFilterAttributeTableFilterAttributeTableCREATE TABLE FilterAttributeTable (Id INTEGER PRIMARY KEY, Name TEXT )h)) tableNamespaceTableNamespaceTableCREATE TABLE NamespaceTable (Id INTEGER PRIMARY KEY,Name T  -org.eric4.ide.45 ideeric44.5 eric4 ztnhb\VPJD>82,& ~xrlf`ZTNHB<60*$ |vpjd^XRLF@:4.("ivateAk0j)i!hgf ed{csbja``V_I^<]0\#[ZYXuWjV`UWTMSCR;Q3P*ONML}KsJiI`HTGFF:E-D CB A@z?o>h=_rbqp*oNnrml:k^ji&hJgnfe6dZc~b"aF`j_^2]V\z[ZBYfX W.VRUvTS>RbQP*ONNrML:K^JI&HJGnFE6DZC~B"AF@j?>2=V2b10*/N.r-,:+^*)&(J'n&%6$Z#~""!F j2VzBf .Rv>b*Nr  : ^  &Jn6Z~"Fj2Vzyx. ?|index.htmlThe eric4 IDE index-eric4.html eric44index-eric4.DataViews.htmleric4.DataViews@eric4.DataViews.CodeMetrics.html6eric4.DataViews.CodeMetricsL BB) >h)) tableNamespaceTableNamespaceTableCREATE TABLE NamespaceTable (Id INTEGER PRIMARY KEY,Name TEXT ){55tableFilterAttributeTableFilterAttributeTableCREATE TABLE FilterAttributeTable (Id INTEGER PRIMARY KEY, Name TEXT )l++tableFilterNameTableFilterNameTableCREATE TABLE FilterNameTable (Id INTEGER PRIMARY KEY, Name TEXT )h##tableFilterTableFilterTableCREATE TABLE FilterTable (NameId INTEGER, FilterAttributeId INTEGER ) !! tableIndexTableIndexTableCREATE TABLE IndexTable (Id INTEGER PRIMARY KEY, Name TEXT, Identifier TEXT, NamespaceId INTEGER, FileId INTEGER, Anchor TEXT )c))tableIndexItemTableIndexItemTableCREATE TABLE IndexItemTable (Id INTEGER, IndexId INTEGER )x--#tableIndexFilterTableIndexFilterTableCREATE TABLE IndexFilterTable (FilterAttributeId INTEGER, IndexId INTEGER ){''5tableContentsTableContentsTable CREATE TABLE ContentsTable (Id INTEGER PRIMARY KEY, NamespaceId INTEGER, Data BLOB )  ". <8| ''7tableFileNameTableFileNameTableCREATE TABLE FileNameTable (FolderId INTEGER, Name TEXT, FileId INTEGER, Title TEXT )t ++tableX''qtableMetaDataTableMetaDataTableCREATE TABLE MetaDataTable(Name Text, Value BLOB ) 33/tableContentsFilterTableContentsFilterTable CREATE TABLE ContentsFilterTable (FilterAttributeId INTEGER, ContentsId INTEGER ) 77#tableFileAttributeSetTableFileAttributeSetTable CREATE TABLE FileAttributeSetTable (Id INTEGER, FilterAttributeId INTEGER )f '' tableFileDataTableFileDataTableCREATE TABLE FileDataTable (Id INTEGER PRIMARY KEY, Data BLOB )t ++tableFileFilterTableFileFilterTableCREATE TABLE FileFilterTable (FilterAttributeId INTEGER, FileId INTEGER )| ''7tableFileNameTableFileNameTableCREATE TABLE FileNameTable (FolderId INTEGER, Name TEXT, FileId INTEGER, Title TEXT )t##/tableFolderTableFolderTableCREATE TABLE FolderTable(Id INTEGER PRIMARY KEY, Name Text, NamespaceID INTEGER ) ~ytoje`[VQLGB=83.)$ zupkfa\WQKE?93-'! ysmga[UOIC=71+%JIHGED}C{Az@x?v=u<t;s:q9o8k7e5Z2X0T.R+L*K(I'F&B$@!? ><841-+*)&#" !      }|{zyxvusqpnmkihfdcba_^[ZYWUSRQPNMLJHECBA?>:764321{/z-u,t+s*r)n(m'l&k%i$g#e"a _^][UTPNKIECBA ? 9 }b9'_XQJC<5.'  xqjc\UNG@92+$|ung`YRKD=6/(! p'o&n&m&l%k%j%i$h$g$f#e#d#c"b"a"`!_!^!] \ [ ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$ # " !             &^%$&#J"n! 6Z~"Fj2Vz<Wp;ztnhb\VPJD>82,& lities.html eric4.DebugClients.Python.DebugClientCapabilities^ i_eric4.DebugClients.Python.DebugClientBase.html eric4.DebugClients.Python.DebugClientBaseV aWeric4.DebugClients.Python.DebugClient.html eric4.DebugClients.Python.DebugClientR ]Seric4.DebugClients.Python.DebugBase.html eric4.DebugClients.Python.DebugBaseXcYeric4.DebugClients.Python.DCTestResult.htmleric4.DebugClients.Python.DCTestResultNYOeric4.DebugClients.Python.AsyncIO.htmleric4.DebugClients.Python.AsyncIOR]Seric4.DebugClients.Python.AsyncFile.htmlerlaXM=~,}| {zqyfx[wOvDu9t.s#rq po{nsmkldk]jViPhIgBf;e4d-c%ba` _^x]q\f[XZMYDX;W0V%UTSRyQkP_OQNEM9L,K!JI  eric4 "%3CreationDate2014-01-02T19:41:48!qchVersion1.0 p{tmf_XQJC<5.'  xqjc\UNG@92+$|ung`YRKD=6/(! p'o&n&m&l%k%j%i$h$g$f#e#d#c"b"a"`!_!^!] \ [ ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$ # " !                   gwog_WOG?7/'wog_WOG?7/'wog_WOG?7/'WIVIUHTHSHRGQGPGOFNFMFLEKEJEIDHDGDFCECDCCBBBAB@A?A>A=@<@;@:?9?8?7>6>5>4=3=2=1<0</<.;-;,;+:*:):(9'9&9%8$8#8"7!7 7666555444333222111 0 0 0 / //...---,,,~+}+|+{*z*y*x)w)v)u(t(s(r'q' exph`XPH@80( xph`XPH@80( xph`XPH@80( <k;j:j9j8i7i6i5h4h3h2g1g0g/f.f-f,e+e*e)d(d'd&c%c$c#b"b!b aaa```___^^^]]]\\\[ [ [ Z Z ZYYYXXXWWWV~V}V|U{UzUyTxTwTvSuStSsRrRqRpQoQnQmPlPkPjOiOhOgNfNeNdMcMbMaL`L_L^K]K\K[JZJYJXI bxph`XPH@80( xph`XPH@80( wne\SJA8/&      ~}|{zyxw~v~u~t}s}r}q|p|o|n{m{l{kzjzizhygyfyexdxcxbwaw`w_v^v]v\u[uZuYtXtWtVsUsTsSrRrQrPqOqNqMpLpKpJoIoHoGnFnEnDmCmBmAl@l?l>k=k \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!  \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' VUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!      ~}|{ \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' 210/.-,+*)('&%$#"!      ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXW \ypg^ULC:1( }tkbYPG>5,#xof]TKB90'      ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543 \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' j%i$h$g$f#e#d#c"b"a"`!_!^!] \ [ ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$ # " !              \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' FCECDCCBBBAB@A?A>A=@<@;@:?9?8?7>6>5>4=3=2=1<0</<.;-;,;+:*:):(9'9&9%8$8#8"7!7 7666555444333222111 0 0 0 / //...---,,,~+}+|+{*z*y*x)w)v)u(t(s(r'q'p'o&n&m&l%k% \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' "b!b aaa```___^^^]]]\\\[ [ [ Z Z ZYYYXXXWWWV~V}V|U{UzUyTxTwTvSuStSsRrRqRpQoQnQmPlPkPjOiOhOgNfNeNdMcMbMaL`L_L^K]K\K[JZJYJXIWIVIUHTHSHRGQGPGOFNFMFLEKEJEIDHDGD \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' ~}|{zyxw~v~u~t}s}r}q|p|o|n{m{l{kzjzizhygyfyexdxcxbwaw`w_v^v]v\u[uZuYtXtWtVsUsTsSrRrQrPqOqNqMpLpKpJoIoHoGnFnEnDmCmBmAl@l?l>k=k<k;j:j9j8i7i6i5h4h3h2g1g0g/f.f-f,e+e*e)d(d'd&c%c$c#b \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!       \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' 6543210/.-,+*)('&%$#"!      ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ \ypg^ULC:1( }tkbYPG>5,#xof]TKB90'      ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:987 \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' nmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!  \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' JIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$ # " !                  ~}|{zyxwvutsrqpo \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' &9%8$8#8"7!7 7666555444333222111 0 0 0 / //...---,,,~+}+|+{*z*y*x)w)v)u(t(s(r'q'p'o&n&m&l%k%j%i$h$g$f#e#d#c"b"a"`!_!^!] \ [ ZYXWVUTSRQPONMLK \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' WWWV~V}V|U{UzUyTxTwTvSuStSsRrRqRpQoQnQmPlPkPjOiOhOgNfNeNdMcMbMaL`L_L^K]K\K[JZJYJXIWIVIUHTHSHRGQGPGOFNFMFLEKEJEIDHDGDFCECDCCBBBAB@A?A>A=@<@;@:?9?8?7>6>5>4=3=2=1<0</<.;-;,;+:*:):(9'9 \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' ^v]v\u[uZuYtXtWtVsUsTsSrRrQrPqOqNqMpLpKpJoIoHoGnFnEnDmCmBmAl@l?l>k=k<k;j:j9j8i7i6i5h4h3h2g1g0g/f.f-f,e+e*e)d(d'd&c%c$c#b"b!b aaa```___^^^]]]\\\[ [ [ Z Z ZYYYXXX Uypg^Uq|p|o|n{m{l{kzjzizhygyfyexdxcxbwaw`w_v)ѫɻ1ZHO/_\Oe&#/7RHaBYVd<>*, ~>4̀Hp@C2Ӑ`%U6^S 37ZG)9[-uoŜg&X334yK8F^ŋ^]^]=G_zglytfiיf?xH U0zUZ \\/|+3oW;˰wISĒeLJQv-<ED8fI x _c 8X.4<0 SmH4e%AG<&OMB8 Bi.D9jeH% /_]_o&Idםf`4y׷w7鿎߽}z}fȖ8 AgO.bQ[YUcԳ4gR@JED i-8c1X7IJVF8K >AP&h3Ip'/~v"$"NKg<$dG)3ΨtS f zeH4 =h?V d*\#r,O w2%_ABeh"85@uQ] +g ߶iӒJrrGv&xbLϧUL-7<[A>]pr,0xbcUјhԥ`2Ȅ 4Ay()]YrgS Uk+M2ʏNt~5(ӘEMq~9;$HgǺkFrf;ak Hfix0d!(LPPҏe yTܱQ8wog/uEC,SK#;ЪLuJ4 E_h8 I C_C [ށ]A2ʮ!iT_Hk{yϸrGТEMm )H[iM6v禛|mӶcZ6\ml5)`ˁf3TPvp氱lZ6뷥Y`⦊)|Z{sg_*%Ac)o٥@/EI.nyCRg cv`úl;$OԳ  -)rSy @6wf`},if0HtNgiх"Ls =އyOX{g fم t"!~Ri`Qtߣrp,%4Ô &KEz1m9)eu- WBf ko3Y+*ັI4l^ǾnC]%ښZ&daAFҫV!z HuJ -U*sf24Sf)Y.o0:%,Ӵ566 3] 5 VRJ5z,QR3끬wT7 _US4N;i$suZ/VM جjEɯE!.V?Oc>+e%4Rъ7gӑ6 |,a{)uvpHOaIms5%;O ^* JoT;|'hZ|U5EK_^[ޮhߝVm#ڋ8WǕFH{ƴTUkKu+o󈥴!;ӌbp(S9 yqw-LF 7[=5i {\~ռc\59_fZH[Y3CsH)IF]I:!hTkU/8cSNkչ+U\Y:=E~ydmWs5o|NJSܘ#6.)@x?wX/b 1" #SPD >8}." wƵ]- 2-k{An{#cGhSq5vx_ʼnD\~_Q$Ulq  ^ hAE HGE :G{2 â6B4 G)/f I>(Dʴz V6Hȥ]/ V4×a?p&uTϣN PԢf\c>I ,XbI!K5/_X_( @Jv=pX h! {zdWD45'^Ƚxݱ6~RL<+fc Ӣt[hpX}̣K+u)T Z} gQ̮ZJEc5tҗFh}r9|z mч,X0g?f!!+ʋvwz{V8Mc^Vg2J5=swEc0\+w_fFsY!󕛱" )+oSwB_mgUyՈXY$cx}6LA}ezb<]{0Lqo_FxİMW}pc:M} zM3 }k*XVՉh|mZa[3Ke4sҽ<"yАGHGڒK ɬ9;ו?וqGRDCOU?ڳoeƔ$ѥH"][ȡӶe 4JH7tJQ,g1{"I~I@ZgD):" ^`6[kiJҕ)iW՚:N.T`#+Cqrp?NukB6vmXږ/Cо[s; fRZS4QZR[*TGW%o>`{ djyY_?l+X1(1(5|1-D~37/ ʀ !bPnM)*f "JH|ED*Fl SO$kg`֏EXH f_&7_@eWƚʔtC5cNiѭ\?1_{C7N:IPMJEɐ-= eWHդF֙iɒ 1 'Z ԨtůNњ=ck&ytDu@g"ޠF~f8"zI5yg Iбn4L34cnh~N5Ia+ge*F"AFe̘X#%)8ib1Kxխ jiX7 ITʴBbSԆk%#2ySi(vDAhkO0b + ?ͥHj@|~("ރqL<<8@ `MPb0I6 ! Kb,9ҎͩTlKi‡AJg U |ܮMBMsKGD_5 w?7Fzn/#='`lfTC<9 8&4ffbi@R_bEY D ZB\ ERn6fnϋeJV, 0̄7SNƎ:_N%Wg5LG p䃙`^ #lt%V.?ab_;ܜ;'^7~ww+o_WCPNmpCDZȝIŚޝM#M KD*[5& lJ=)'a?d[*r=PLhr6ڬ0 =k,O~P<1w^=M sTuGPE0&qO#yX#n':&^j鰙lTðE[9>@XA)zzd+J, EBovi2 $ܣTwE@$S ndZ @LWF+Uʋɞ#ȚxsD5Y Z xzNqF9@!2hm&4pbvħ4=Qɽef8wa=?ܢtmUY`( tP~+F}JmSrΑY/Kc^V+;Zb͢-KMGsYħ:(ј!EJwD^!#q34߹ĹI^kNi23M&B-3WmH:$:wC'j˩&AA\U`Hhisn$>VedwJ/R^! s-s\&[T̶J _Kʘ7gĤ97VȍJHN=>Iˠ_h;)A{=Kgf&wHAr~6νJYoӧV 7FUr*N[{>-vjHɬϪQVw^e}Y^YÖfnnX?[}wj^\^vCZأkUѝ9 kpE4r6v{/~~2"`Y{jPxPrH.(hR XnxvX0h E_w_=S>CFݣYk ^o۵";^>M(-|g=ƿ~@bi h h@hUS;v3 ]Y4X1Q/14Xe'3(aogl0ՐNrěʿ9_}ҼL7uIgfk.w].N} U2PUa x?B0_忮h7"/x/Ww}wM~_^&ZWŢ8]~P 7,"k/F#hhS3xffuriDdKgΖJo;і>#/JM ]S99fkr݃}Ts ~l^8\̵}8?-sIDSKfDLlA% 41 $:a$Bk+&knߦ")Ԑ.F3FO1Gh`b_,2̆/૔*'8CI!,5k!R5c&RH&2\'ip]n6YaNeFzWS7!3A auD5ŞA,\k 9)._*LPsL`_ א,"k &y4M)1n~QxO&O At@" %g\g$P Y& C`j[jF*pab̥l4fsav,1IYL&< 0œ]Sj)cL-L}φdz#34›n+ݨLH44=8۹oGqL |]+6y.fdƮnx-w]ACjp딄st&8Y] \ysk>KyƬA|b԰ba爹x\4يfi:s  ő:L&lP\ӈr6P;L`0k.MvS4n;־rI~TÈFU,Ij1fx.aP!>R׆&]C?_a}Q ";iXzІNi€"P8v!޻5I,5I' oE:׸VE~9}2&]p3V&>ᑈ)_S=-_B"xZmo8 _>][ܡK=dz7`u[w( s'퀭6%C">.CbEt9< g4W*+>ˈGT*8#xn6_MJRGC;[& Zo] ZmQT\"h[Z f x9  莊<8#Ft~( $$<|bxWmo6_qS>ɮlHdl)} (ɤAQq}GQ(8=ߦ)0q)nkD,)/3m^$xZmo۶_~h VҤChȒf+vaJ,Ȣ@QaCRֻ݀-Re*%D)^9?'宍R 'A ~8ƖÖֲ$d0h#'KpDנw}W˙ #2:MG+'ΝyʀOg)%L5c$@ /QR<.4Sc3K:a@QGI`c<Dq=)rUu$,bvE(N&{s5 wV-.\QWS"e( d7u' =}ng.~~G<ҤUkj|GyK!7A(1LTAK ĹR {*^ qp1ISdr0aFP g@&E ,Lj+ Ș,V|enA*x"zr\iě1ܰx{u\KZj9XM_=h1qU6@=sTVjS(NUI@St:D1n|wp 7d˙!Z[D'ؠVnXAOT>-P[&snG,#&ⲙt5k9}+vlcZoP-Bmc ѐ2xI0bЦmL%T/5`"j \[kHQM\ p+k8o)%' f`\6x l\ȸkܖoPՎK֧u̘ [!I:/@RԾ$1_g~CR?*gܿm|F ""[: @xW]oH}Gޢlf/ b8}AA"EwJ`,2Y`N;Q;@ δS~% ;gz&sh9t̻\J>IBlj;-4IoFÉlon-,{Z;>ms~IN€MEpðXLE:WL`:׊9_$bN(`P[ 僀Ҁ(Lhn0ɻDMX}$LrqE: 7*Nrx,OBk1tOhp mt߁, Kq ye+4BjģiYq :o@ [>CŒs I-AMm3d)g ̊r% - EVuVZ5 w:w/}6P*sWZ+j=jq]XrJmj*C%SRĹ6Y>,ݔFhj/JgeT*a: Hl] UkImCm^53&(s d`:>ez58̫<5&JDUq@τ"rEVV^ %zfiMlu`JY{'Fvj򏈰^7x”MY$3ATUUk5aSVvzl=j NsDY?I {5wAF yq43a|r T^-.Tp^bzdd&xe?Y--UϸvJ2f9OG]ruT@1h2E nSڝ+JJ6/p(x`Q*_98j>]V'i&aN. gvòXY<͈~ ]]Ro*Ռ|Hc C@ƩċNF tB R}(]NSN=캣D^8L"56|w3sܐ`o8EXp>B-HT~,.F_"1ڈEes٥M mZtYv`=.=0drIeMZ Ga\沇70G3~nӗZ⢌a ) o>1_ʖUɘzJ*[ά 9^l<[D̟$ ̤-v ZGLI[fEeݢBsgL7w|!0W1@tf[l[h%z+,LiKnMҍ1k^,ˤl Eug92o5CZ†joc֙p 6BL! F*]'Q ̱tL4_2 8fmHulV;:?Xlcq 0 #6;Uvrx yX%@7\ j "LQ>WIp%6hy95 q V *7k9e> [` m8 X= nB!K&yaLIL4Y!U-o/xu&#*Cٵ9wkiBwel҃-OroE Q_ n&):!fe"h`smeo=1LwnAAd_gZB ${!ۦ,EhmRamveu\ifqו Pn@ʧ2֢atATmt*]QNQ?v[S%Ҟ磩g;97`j)<} zr\93,@kPغֻ)]҆qcUT`-CNQ_%H`.U1p sǔ!e!䉡W.PB ;Hǜh"599ٙ㬧Nhx>cxH T-9txªqttő*?2Y-0QM_;ANY2wR[1H1"lQ{i0Z=S8*(s Y՘iS%̹@kQ0SOsOP\:fk1LQgZs-Q+ʥ>seq~xD\0P0S rWtQUQ\]Ё#ť=9=aפW ^A 4Uĺ0"^QȒ}<qm wJ'3a0ixM\QBvIQ)ګH?Q^%Z# A B+V7]u|,!gNU  TT 6Lx\m6_s>d؛&$H IѻO^h[YT%޽fEI^W\$%ϼp8k.f{HgSƓ@Qro_|_߰?'/=̢@o~x8y2}>LdOG92|ar^721_rxtvb:x"[j{|1WN}޲_' ^u" /ue(y.=ƿB= D,̏o1lUTlӷ/}6~7'o^^>{Wӡo"z˗Ϟ]^bY5r^~xs5"wb{(&t9 ",ڥ1KLn9 U`:,<){,|/f/%_H'(|'fe\păt}$H<!P*_~\__MާKkޒһD>&ռ6<~mI ~,J$ϲ鲼3]ky"LԡHT6[s.Nn`Ѓn,~|ͫAgFkwt u}Hʮ3BC)؎r9Ⱥ2z( P W‹cBBqX} 5 ,,Q &*xUaO@_1W?vA wR wbvvs%-HfE'' ξ7}3v>bXp4 nO$ڹ}O=4ݞC{vuه!?}B:]&;%E9YHyr,N*C2NtG8L>M<7*3~c9+I5lZ?e+x?> ~2YFBQu>jƩ#zhZ^k8<'+:~76^o?{ZE7^ݮ咲9.);{ҹ s iwܹgRl7SpNAEIᠮ~dӻSSh?W(7nteEqVU:W>}W [xN6n0K0@/_qR]4{ HIK;řař2riq^|{n3By>Eb8)TdMނ^1b"KsgSX>͗ QD%w&qi˹Ƨ8~֥;[迏h 1_]۪<\G5Vm?A?x r(V_7K@( 'L2ƳZ`6["%t=P;!2.v @9SKRK8![oyYD )7& d=Pd9aj^2G*ݳ<,M/ +bEC?0K4w8MRHoE}, VeІx4Z +f4W" +߬w93zT[9Wd5gΐ;8 $I'&q?>ˮZ3 ?$o=33XSb-g%Wf,6 d-,arI=KBj %U('8s7f.rFZJd {B>P* 2-rP";+ MP򎫵FzQb K564e\E?wȞ"(;S w`xV{k ƌ<}?ZۜaOB]Wkfz{xr5%k0 t4)4Qo7@ ׾ 4qfįmj2xZڡMĎ/nKgq‘ SMA) 8O *^)pXq":FdaC ԭ;%O(c0'$rM:!{λgpC|x33`h\/As=8̓xG٣o8hzvjtosPҾxQ@۝Dѡzp{2DǓvF5?} P-l.=ZMHˉbv//(b$߬* o"rxau$3.ꀊՇ ")Li䪑%G(f́D`Nܧj/^N1 ฯE8G}zL`#KLR' jDBcxw`YiW$  a1Wm0l=tR\2ruZ/t@$If:gKlӋ$g\:ۍh ?؁t(E@#r8bH|uq` 55/4ER\ "6*٩Ξec#f*ecEʍNNU'=fM/fd-XRj}m) l *@GhoZ:)AvZ1Z4d`a qk(SGhfD9;Ig{[ ϝ\JWMY4SGnsr-YYlZi,KDêRe]uj~ Fb?֙ /%$ӑ5i(JtŪJȕ ;6EJ"exZN2<@ 0ވrC>}OgAwOK0'Ԍ16(a"j94UB-z+J$ PBV9goyL?O*Fo=q1X*ъXb|zuqr7m#5j{{匁{R _.Kv~n6 [3@N[]Pa[BI2Ytf$gOFfᇇЂ*S縖qN|R2S?c)s!,QZ=cm3` VfRIZ"^hŒϨV :k0Dho57="iv[< ꄘ^FyhRO{ {XFP$䦜B3z2y~*A!7%)_iR8z֙^deBXgϱN[9;  hl\֬,$,*5vTgohR֒pDjQkѳta^SE-yCj8Z7UV0Cw_Sl(ޢzVRc**8y}2ZSuJxGub[>VbK^ڻA Ÿ:KԐFT[C g6Egr:sUNj+i|ghtPYVM:=iC-ͪ;`G7h-Tu瞚X+:6٩yLv*KUӉ܂ʯPyU炕X=< hYnjB.3GN\PWfPٝ z!63nx$ǗyGj9wko4G uV!gوS5n]]+ 6$-n l9bK,Br?#qC@w667̯꺴"G/N95}aazU+zXɰK3v}xyXۢw$5-4lg2hS}Q3};izL؋)JA"&h c|# !-"',/w f.Eլڃm[#pI( \g#CCi27Wf,Il6az+jhgPvy@j6W7+e{;A`t-I\qM42c] _S&i~Xy2n8\ 6tnW~Zv(br& ]>R%a7뀻,l`cf~tz}%xw|WhB5gBFuَU$p ҙ+c \MɟNi"NM@FRRJ;qb`^Gm]AEu&c S 8*VUж4Bt'-K^YNui{]=sSÝsN8Vq$`JrH*[b%ZHoKE@ VAa.w3W3Wֻ-oF>H.AW8̿dU~5bcjmWMtA;@ArAMm:Qw5E$ͽ`Hs4i)$o=27 } śu`l QBb/prC dXJx`QQX4?(#s)S<榀y2DPXNЌ&EuhwA}ZBWU|iEЭ }N>*ݼo+AZ: h^w14͑⪔#Tg!eG Qҭoy\dspiqjD'Y=haU. iDŜ Z<|ݶqfo"u^Qe_\Ba7ufUOp]k W4U^ nę|2|{~ۛHS܄#+uAa]A~u'̨X$5cdhOKrnNfsmb4b^ۄsRc5Ju"@WI J&>!'3F]q/0KyoU[Q{t@ꁒ9=/hSN1KzcO^ݐa'l6am0t}SrEWItCSaQ?;}`Yo߼|a,}3M nlP7U@lµwvxwrk]V6v \'0֩E0/'@t3]}?;hvy; ͓ GD+C׽Q},ER"i.dƍN_nbt\ 97*>nѸ~w:cGxƦO~u݄7ncVzo7R?_( ^ã|Mm;qy|2h?:{5ҷ_k@geO!D꫋1 ;cM&8شRv(_9X09zBM q f@xSQo0~<!U`E* T$֌%RTN2udžw; ၗj \ ͜u@w/v9U>߆ַ`K MrbBxtCW}Ve`imj8nifms <sY$WXZ]"VXHW>mįdNOD|1K~fU:9X 5``yӢ@, wJ bmU.uj GI͞ÿ{zxOثUǞg!sq|zR3؄A]8>ð_dZrH^(c=$$<V;gc&!D)qж |LVROM=҇Breje`V\)YRrhW%[z$YUua".k@m / y^Q &fx=ksܸ+pڪHN͎䵷ʖfK꼶b+w #9GORn @q%F^y'Q$.ϏȢ;{sϏ?c}REONJm_v#8VҘy kcxPJB7bYDdJjgngzхT{w{#9kժp7/o^ܼf;Z7˱=#^:`VAyʣ{;2 =Tk5ա2.m{ Q -XR\dSso }6uh, 'T,HS O{cY%Ͱj!!7O`%ϪRۓ*'U" ։ʹ6>䎝 W T+ bEqNgPѵfxu۞>hF0fN7킰e>hfV S)˿:2XQ4?Fp$ P-Ţќ'K,͵c XIָ8EciG>0^j6+tݟ3zf* S$Gơ܊tso-Z|O+.b RTGfye NGu!s B4 makXVmV9ʬr-뎧&j $t_tIFFַ؊,%s`Y"\ $YVV 1uCαg/\9Ph9]"?xoVHȨ4 K*!'"FRl \jNXyyJz>S {^U]}KZ+\k? _   xY[o6~8s4 64iM.=D[\d%^Ëu,Yi$xw.|[@d<!,1af/ >^N{w_޾ɥ_M&,R Qjy[x\'F9Kixp7=JbQL4Իa>L͔*Yul\#G]3IֿC_Hyk3 bβs8 8?>x9)}=1$}3jQ5$zk:9 v9NYm[@IP:b-(xFۖ.[\t2UED).* o+]}v]:d S{4ICԥVsw=Ti0~t&E_ݯ $ۧۛCBΣ]?ַ@p#̀ F69G[Zo㦘(qJ,؍daUJ=cU*+s;057Г߹эJD9k䥚'۷7^WL!;cό>!HԍDQV%gAה8E @rAn9 %!R*՛o8 ()H1" xeV=jf =3iJw:K H>^mzqG"s١Vcc8d>Q Z 4Cn̓b5O<%N 0QP} i~%T wqeY?F/1DY=cђ[48T+ԤT9TJЖ#F5c,F_7*E$3vsR1eO{fxe 83;n1P,_󄜬b6)_g1ͧr9FeSe 5P&& <,Nh0L{]wLxI_HE:3Y/%|a0 pwyyS' ǻ9[6+2:Cn'P)D3IsЅBk? xD2TQDM'$2** xN #UF$6'^^F7wՑ2ӫcӫT徫·vlj`{A A.0rZ`)^a O dO$s DPPh^gP 8sAgu%ht/DI.>稧i4PN#2nR2%Xqh-z#JV{$׌@䔪Gl\d27,b{¶KO,dFa}ݮ~eY3UYx]=Zm%FeQ{?&LDũs~ RtpG " !X \޼t+9tTl{p?`a94=_E`C܊SY?<[3rgggA_ض8|¦=-H7MpuEI;)Z&cǺ9ezBGI^0.M+.vLK{,ҷi5뀧ۉB2PSfag,J46pW kٵNbg;.8;s' S\J24׳RZCDq[PHI^Vр|40AYW!J{RVy+b߅B B[xZŬFܖ𖰻mkBkt{r}喢˕墳d7zd;aUhǒ7Qx%Dwm~،u ǻh8 AL!gs6V^-X ;'4#Odn3Oox9A[Of] SAU;a+q^vR>hR-%p Zgv9^vX )ذB0Gx*@i"{i> 6MN\!+ 2VWe\} xYmo8_.9iһCh/4۴צ hY҉c!7iӠHcSpgޔO˄Dd>iE2]K=?{'7}v?ްXc?r}ɗ~a>Bz2ys3 bd^{c/+ۏ{rDexi,x/ZDOKDT+FY]%"[ТNT h1 xx(2NױY]b!Sv(~4̒8eA{zZRr󓫫^;իٝ'IxW78p1O99欯Ϯ/:䒣ǻ{{}ɊuЋͳX0#X$ T};Oo&a S y'~캍8BHf +V̜ _kr@cך-[g[K+/t8d 1`Vܨd~pq-x} sU$A^ ZJyL<<<>|u|d&\`#OHڣrsXD`)_  oKAv,b-ANb1/FJxX[OH~8ġv+J.RaQKOhlOǚ}\؉s*5e|1 x>=yOGRM} WT!O_n\a pP|S?~Tq|0?p1?c-G њAJIߟ4*WR܁o@7 E$~ ^tgz ַ߼d-IH2#RJG`h; 6+Zฑ`.ULjV5i zF>$(Gαid@k: SR&Q"70!pjXCyF9^B. )VNZTP–I{e2KMz K;8`JEIB[dA+ raw#ZKeJc]NYLt]D7i!C2It!,O8骐,Na8OH*V A RJTйvLPXlE w,jghM (rDXrXcwa!4lFvՀ>Rlr^20꺣5е"5 16XF\)!1/6M2@k8GJf P^ܓ3YV~QgA׼ܰTLTf+c}j(ܚ:.+F^xK=Q|NSdnD16T`vP;!oʰ 7b=` UmE(cN,,mjm %v6>JVIiLe`JɺSrb5.&X%=`k *;JN(QC<ߚJRyL~TGlg3h ,BB/wG1ąHo7r QU#QaiUe"75CilYjκ&@*KчT,ķ r-8 $.\bFZ!)-`vKo-WI T <Tl![smꥦ,-P8{hB榅M_}^Q }ڴ5yBEfkG_k{lzekƇCuib G DlxLN#7[mp*f;cV%`5tpk}o#v$F'j3Yڒ(}hx֬ m(SdLPC&ZWM8D;7ڛzf*@21mQ)U}Ɩ0ۢN KAsTK4n$#(%ܑiNwG+ͬrT Goӄ1`O@['E!(21Y{ID[&]{ݼ]&Tϕ*UR _oUִG$sFk&MlEtfZܐӫ{# VvٞdJ*s^H:vF Кv0+ykU* dLW]kFbfwZ@`۷jfvu[ eI$xEmQ){hTJGf؎,Ίj$ws/;;ccv4f/njf[@hjguR$bv1NujDXC\7A o ɏy'̫Ԛ7Vorfwbvg?͎cRNOWr}EaھN?vr1?Ǻj<͟>綯ƇyxwϘWU{=3\Xbק7S{̽)O6f'x^Q\܁$E l.C﹛VK[Έ3ɨDT69KlX:Ý{:3k Tq)´DX=8 xEg U1<4MȗO 7%L<@dsslO aqY-xZH%Z.:H05Q=`3)OOs+qXvձ)J{Ί,ä@I(]6!U7͔BiȠ)$AEaaG)~>.$~#94i6[­kf1 ]+]j. qe/__c/"̀v}dgkd3Psŝ-ZB0 M{p819§RܢO36VS)A Aד,ג"fEL;QrOe *6 OhkhKz0^ @{Fuzpň~_8!o'ך-;5R5 7ʑ.4t̥y`jx0;VM+# 24BC.oYROJN:>KJ _RKDfd)]O 7r>GSsv)U-V" g4ľEͱC95 i{䀵` 'rY82P hAܙЀK=?k4ɠ]f9O-)*^!{V #u j_o票\Vu7Z p: 7ͩl@ٮah*ՐaM/_`Th_d=u h\'c,Hͨזw0K[Ľ)fH PP<| xWQo6~ׯxEbM ³-@mO%WYHIVeN 8&w;ᛇUN>s,? /D,OJ7rxXmo6_4 6,iM)}2(ҢKRq}w$b[vmEjsǣfsm΢ ",m]:p_IiA/$"I..ɟ| |Z6IOdXċXir{ZqYx|mܚYX:.9e +ya8Y=WķT|jUlj}LGmD_F/Sꊝ.Ja[7:z*Srg?+)$};>[3WWWoQfgɣ''?z]%v/ONpj4NsI/z)SYd<"ח!'qAn4j ㅨG2&,-91VjF2c QT5r!h[-K? #+f/$5fhWͥY!J{uNW۬d!l &83u8*wz$qqo$r1C/F6JaHSk+|A0HD^⯻+п)9> ?ΦA0[ȟ-n  c83}/U,2D3<֦ ;o(ŒS#L#t ^ݿ{4,ũ6Uj߱dG/ɧTɪ`L~i+RQȀ?nQ&2jDl/ ɗFi㒣|>$_5k?՚/=>L..<%' \1KQHjYzV/0 w#Ys"VeWE(ahrEP,"W.Ϣ_sӜL TG\ K6~аG(Q8TI}{qd'+fe!}BӜj\0Ϋ"1hOzh d/(C>,pI^:`b$AeAsoL;ͷbPJ܏bX96'w,8 WKn47=xYж7Ҙ]K gAPZ׳CZlSipI7WmP$^ӂm/v 540z>1!Q0яQqV:39o `By,9 Ro Pi M6︩TG-eNS᢫$Z^,eiuRx)fon'݇fe?6FqD4 yO?{zi'h6 foDQ[ FSسEP/ иV\Wtgk4$m GՖ&^?v8\i>2Gٸ!=|c*ƻ#New*nRTvu*yna -TOHxiȠBZ95gBA:;o6n%1VX8 5o֠`6`q z+OBv+e7uʟoܵ+KH:p8/Y\9~_ τo*. ZZ#JxV]o9}_qo?Gru 1吐zJ=y(},ϴ a]f(&1pʓ*FdܔTx fkɶ5|%t%U*ذ΄nwMU*!,RR !2Yv=!._ϯ/[yy^⭷<%нx|q٣ "8iԵ*ըcdف_6VATdUA˜*#ra`$PNT hT`2J)Js]iEmœJK `{P _fL @VbZ?k /6B²m)2jhB5o3a\Tc|K,w_Ȣmr@n+LZOPnL ,x`9EvK!5"(VVU ˄29mbhnT/4 lIvrwU!֢xzv$cPc׻>u /pj9it 4awݧ1mEvqDuug !t#"W|Y} 2,xDp3 i6P"œbsNvB\!d< \DAh|(}إa |S} N0)F$uEV_n`OsoA<ă/|5E (vZjn+HY{/=wy)MW.n~~G +.o.ɯ|<ԞDX !W͏J9i2s6 44)?Y\`H9˴Z\ou"ŹfOҳcgKhKn%&Nk\59 E*) Rvl?^+.<;:?zK%'h}|U(\BL޳R-dvb0YӇ`xQkD`DOC׷ &B\8"DDh fdm\n5^LW-aL21z[;"jBjM^B8j2@W!d <.JE:s4Kqns6WԥMQ g4>OLR&ie?Ubn爺\4Yfi:sD . ő:L&lPܥӈrž1PLbi\T\i&\L(滑l$ {nofJXdW8CIB{Pҝ 6ɬBA4x 9#z Kz[88&#ײ\TX$SjIA2ɐ4$89HpHI{)lZL@M0~C5xm>ж& }fټʶ'Vu2ʼgyeW6'/qYȨ3hZ-\#~hd*-YL2Q C$N-ll2Ճͯ8ihB< D]2bjBM6Az=`l;ۼ|6Lja If{I|6h;*X`ʐ{D-4BǷ,!-NFj{L[~B|:}=m])$[#[w,݂Jix#)O1,dT&GYX+VC~V{ݬ:^Vk.u ]Jp6Ķ>ԃ-9`mb*X1Hd!n V:xZ-4mGfmV֚'YZSJfkd7J+gv fw#~3յlŭof)\}~T*`]u]Dhk[Vr  ,Rb0(EQ*ԯno0U_,ں͍Gؾ"FF $0CUv6|yJm~S ?CKN_1?{cьMacWíJ!|_a 0 cҔ !Os ̵O{ "m $$=~dxWmo6_qS>ɮlHdl)} (ɤAQq}GQ(8=ߦ)0q)nkD,)/O#J%xZmo6_4)6,ikl} (Ȣ@Qa}w$e[J:VHws/~XIEv6?Z Blu6L ~= zD_?}4?hci7zRM7cyVxTSģ<VyE%T\)=lᆸZjy蘤)29O0#p3D& dLX+>C27\ <}J=X94͈enXBBae.}-~ ynSۦ`د_4PQRGzVm OщVыg+)*$):Rf7>;o--lP+7P,Π'B*FLaZkVm}b7#\[WnqL赜krmˌk;61}-7(6z1OlċlhHH } YhSPTmw0oZsN5Y-5(Qdw5K}݂3k0.ZSC.j d5vn7jnjե}w}SV:f\$ )JjU|U\]{o3{[)_~C_Z !!\< BxW]oH}Miňٹ/Ko;1n4>Gޢlf/ b8}A,fDscv`,r"/̝ Gw#|w^}iH2(.Lϡ-1rQF*Q& ^8?'jҌ 'Q7]'~sewe}vji.?;k͑%9_rlX 7KU‡at/:A:׊/r%bN)`P[ 僀Ҁ(Lh}&,>R& 9y: 7*$Nצrx<Ok1tOhp mt߁, Kq ye+iԊGŧ[udee. F\ +i4+QeUbu@>Un[גh9[jH5ݥgOez58̫<5&JDUq@τ"rEVV^ %zfiMlu`JY{'Fvj򏈰^7x”MY$CATUUk5aSVvzl=j NsDY?I {5wAF yq43a|ru!_LlVi6Mo\,iSa@ Cf"vxE 񞰰\ 4[ 7fX Ku1/Wqhpl5fHMPYh1FSZG#/n>:d` fw2kig@_DeOW\$Wc'd~O樂 OM?d&A\$6CHYšN)ЈժmFx` F:g}3&wj6ՙ\Nof&=*8'Dw%:pN dW瓳;fB CfҡA%eX 0 ESz5Ʀ] D|+p;{_j'?g`PGf ~u`-fNQLiɉɮ^ʮRHlRDx(1w\n`܃kD0sN\)}pby2ߧ]~,s#˿vEMւ>2sc>-k )ߎ*8û.,1<$rU^`^C7.$kGcoA,\wEg92#<JQ%'ͨ\[fC S~q 'o٨,r#selz8\6SNie+u-fWCGAO!ͽ"?% ~ VnHlǗaҝ]ƒ+f ) UόW#Dm8t:†:.` qrB )vixd ԯ"MnU諌V[U-` _azN[o{;62=O?yl,[ Aw*nH|^W& b׋!`  1<#Rh>F"qC ۠;Ԁ%B_sf[2ᰅ<#Fa0F"P;p-@#ǘvDQ1*8T4a`6 .!x0PY"Ȯ霽ݘ ^TlD;:եc3& 1%4ד2ds<D;'۝B} ]Dqu|>X̱LUu.dw+ U0<e ?vdFf1j%Ȟplt졗Y<2oɱ IΪHE^2<˥UyX>@vgxF\0PF0Sq t#]7b1GJwȇa:^_5z6ToCJ+FK^c[܁1[q)ew)K7I 8oQN@Ĥ)T<]i_f8`G%G*jAmFVX57õ-m-e)Q̔VzKvUFю>~jZjjvOzL[w?Ū VMkCc>c v~C[PDA8c:8|B;Z|jr ߄'L#>4z_xj8i핵zai<-U\AԘlřZ{5xqu7npSM4h )? l[ā LS=_"Hz~%ϽտεD/X0o $$IMx\m6~HlIp"I$[EUZ!EQ6 D3p]qY$"=?1E"NŬTo1au۫^^kSǟ_{v+^ǀd{gvJ0?< ]\~Z\#G\~[Py{0;pOxXn_ T1xv"{__.gBoog Ae+EDum=c=¿B?D*3voUe}w擱o"gA7ϟ?}!>:[. 8˅QZ-3%{J_h$2_qre&v*p]pAQ́x1a 4!,/cJ*^m?$m}"IxWKqD`;7o,ﳕ3`Et]ԜI?z^[._7e)z\&RVU!dec0ф:"YlyF,j:[uyPAWVX!"b=W БQ\!*4!U]?Jqļ`ug9lAX2' qϠ "HSBBq9 IV7j^ug5ӻxl$Kz}|ـQ ((U.1xUao0_qK?J%DC* eTj 9I9U;;t] ,̸H{viPPF=;W̷OÛ W]Gk~~_$l3( b2 K"9Ii 4yT H} r2\AS-R#H#x,{hi&Vf=RTE|M´B8d"&Q %_sU;<- Mc>Piӆ?yjSMxHJ[@LqVאA$ HLK2 d\fR̋y1u^ѱYi7sw%73-ٔC%^W)xA鯸q-+K"u[\z?zvqYڄ%zGyr i"M8+VD4y9׃Ty,'x $3߁lUr+ʄbUEޛ|ņiB)o]%O͖ ؟-4ITZޖ&kKF^&5o%ە,cdA)H^8Ve5s0Y0$7?HƟ(v, oȖ\9=`%XPmh}X586QTeL bh@:*.ILs;ξaLe 2;",K/칍+bLb{&-t/v<>@IsrIZɲ Nhÿe <-0͕y@xj|󡈒d͌%O,T|>GGF,挠sH4݁.i3eiRsD@ϲ 0 #|vZwQ }'@}H oJ!C#aeQr$.H+B}P P{ӏP'OoRe$` .q,-o uAa?OܙOgg,ZIRBYQItH"AU&Q0Jk)k[VuT_Nd`$-x+0),,nWh[Vcpd %wmZ@%7/jns`y482aut'UT̑W@e$6-Wz\|,$kՂ!ؖG0Cv XPAY{H.M r)q2EsI%KRX9;p3O9BbgTyqui'XwGv];GNTP *"*E9:,8]Z (-хNp!ߢt0>2K3~i$̚Cfm-+xyj)UYAvWoR/MM%Sk2I=lR@Zfi찍!b+#KgLQ yHvQR-VOz 5j aǓh"8v" ^,(8nze6tBn#ʕkquJ&U^ωٿbn @TLZG#Apc6?ѺE|M ʕay4{ ";+BN75qɍB< `eqaK(l ͪDfwzǻϟҲ)5)b?B;]/N WeR<8nԟUֿ֑O FS[rdϜͧJ$d6*i3魮<3XLp oOh5"Q/'N9cxX 9X&2 h[ڀoD@~ƅta~!D?.4SxJ-ld >v}Z[9O' CͶ8R1o_oYGtP'ɢ#!KUB<;Pۼk/S C $٢'lx>He;4_IꓻWl ;w2Wm.)@I9գU@Pf`wKGe1G&I%reTAAx#9)>޵]kg>8N֌kS|3;bF-;1QL38|ݓ9PO,f6?W u`r(2 Fo3QUꄝqc2$xYNGnzy@nٓB]/[_nI!b(Hnwac37n|uF'Ї<0NU'd=fEST9#bgؔ5ɃF6xG#jdbٹaR%"=IU%H MSDt>g>}ĭNj,cf)+b9@È$5V, ,Жa԰GYW}$2BWƁJP zwU*x%iJuIGQZZVUZoFg_^Q[㹨JwAO7"ou/peaY1Ҧ7mETNQ&0v{Rر GjWG8Kmh\ҹG~@^8(i:{nLږc%9"N,TRݚ<ɜY0Ckyvc:0q 3?JxTE2:e]f).$VzxVeW2tu0 MjI K\ђi*Rdž1~U57=R^)v[B5Wi5gr+:Hz,A^iStڭf*NSӫuX6;gN1ͣ ӎ9y# s,4~j:8,a>r3VpdzwW.fLZLӅM °wóhYTɝ Rc8M1`PRSdP >kuG,0lbZ!GѲa/Mc~w]HXhY]S<)Ta~RFNL>`:T\vKԫ4bZTB$2<#k-{"5'qlg;r']_xYm@]mhҡ/ pV AXhˎv;{y^1#x΋2JP\ 8Ub @d=y:חAK:d*%Q( 7TePb lv`@c >Mm0@C (SUAĝV+9'#ekC)(ֿio> UܠnIkʘN};eZŝI*pH%f^ꪻQ o1i5 n U7\檖ѕ2#%BuCuuAa5wiYo#6{xL͈zIb6=jw.Qto/YQoo_ۦcu9_e ieN[4IA]-* nQЧT.P^w&< (t.O_䅥( TtP]V Hc%t .M<L;4 zaV7>?jCN򟆎$] 2R]䣺٨+<ٸDy}MJY[HVbjL>s서z?JQU%N&շ4{sW_b"`~k}:RLWe\68S33 57跽 *_6 b8wg+N5{iUMN;aw: "&ݲ0'g|t..:MSЃ&$j#HUND$V9s@]I5J:;#g3FS]q }0+w M<<@?=ࡆVY}!lzO}gk43~Qhw.ꚟ6V2vikj0 l|}HD:z8 pf)NCk'tǴBQyKյ;q-=ڜZ?torsҰz9K6f*ED5Ncܒ9qF.eV4T}[~Av*APƀ$sĢ,]oOtNOLt\ 9QQf9h\;V9.uP,g& (304!Y 9d|'2 V k"+~YIJrFӷ ’&Ց3ocmyՁ9`9#ؤw0hU;!;w{44x֤KV]eXkŻJ ?S+m_d6dx=ksܸ+pڪHN͎쵷ʖgK[Ub)w␘Fr5߯ @&U 7/ی=RE)y\$i~{Zշv_}~{p{ξϗޱ {Yxl#~_΋r} Byo'29ٰmqQ2_pxj/u\AnH 5R, Q.*O^7ou4͞-{6.VGvePk5ݡ JOv΅(VʖK,Dzzl[!gy2\uY8~HS1#MQb{-=1J(a+*HߐD<<JTO'gEz$ȔcfiSC91eeB49刡.*)sV tmjs>Zc^_^#Yaa_FN7휰U%ܒTfCZV b9e<; ~K-Egdh75HR-BC0ZdeT|DYvu.NXj:+%E]9dg%g֑|!1E}Tk[q)\\kDmʶzE }o)M/kYªFf!bN8BMZUYha*u[Ur_\1z\=4 욶Qu[d,YDjBIVQ +|klvʱdCqg\9L\=opDE:Kc]=S'i@ dTX@ݷķ%(RN7־$4iY[*%;2ї5bY Bjs Yv؂H9jY"'NNbjҶؚd|`8+Em#~::TBTEQߊ1}szuj퐫/'so!fKd3Cfx0QܸkN'(KWO*'UVuWOHVd LҪGɩCMMb:_ڴQerUo) B%qpnK;0iþhB昖!ޠ _sCu3Gٌ*%_%,Jऱ k%zJHMZφn2b|( N͔*iuq# FRk>q&x)ڬΉN􏻰O#rqa?oV^xqv{uv{~ {v]:d S{4Ic ԅVsgzHuI`:\L .v+ȑono0r_rCe{49_ml#VSO{]m2Vedi9[`2l\F Rc7q-B*sީUZdwh&j6)B~@BP+XnW㓢D 1hk||*A'`.HQm(`̅19هt(nǑdA*ZUq}=g4SuODEo:z뛳r6u)veh w}l}lE]tkFS brB6Aza}\2YFJaێ%xbms2ְ>nWsݲ\,w,ŮBZ-öf& ԹP?o )r#M|ېv,.ol|R8h !:ra=Qx0wvD㔰 $z囵oq 6X#/J"Ii:4(s7-:%H*kAnqgZ:l.ޫe%M`y^*IjXRïnm:#6p[--aw;@-E+EEgo֕ȖwªЎ%o"J- .m-wq4^46V;:30gcx4j*UXgqxGA)y Kvsf2?kњ+ I2S o>ui.+OUy\yڝ&?K EK!T$~oAQ!h2LGzb5䶦` Z)\l$c|lP`#k 2Ve?_W. 77a FxYko8_b4)v:dE Jmnc0}%i1H"S}{y.=1MZJ;2Ey,ÿW.-5_o/tr:b_ϺNKWgf6'^^,$嘖Cex1>h ?DX..)2[̳&yJljfJo[ǀ'â,>,ohʋؑH16ʓ8caocG5j岗777oٟg<̣7ofg>w&)?oѫl3bN xX[OH~8 Ѐv+ e'4'c͌}\؉s*5Oy|1`Fd<N< '^>^W=|T!O_n`^5@M +|J?ah1w_IvšgNzvB-#g8M +"*YSLfF>KdXb[MR.Et6y6R/[Y1E3>IG8Z'L*KYeJJ3Ef 64^ dY&R}j'jR&PfH'42 `#+Z:SL" 2 [PdutgxބIIIVы1nL4ʨ8FF}MFqK|:[lfjLoW ' RЂ$Fz##1͕V# "r\p[ \HiS*+5pV0S[Bzj ǝп4HW׏XYd`" b#(aD,D& ( ƖQ|e2Mz%2%:F-\jooJ Vs8{C]->8=#*P1-RjU0E9Bd%Vď*憳9z5AJmwLH.W? %%ϵeǐg"O" Lނlt2c;Zq^}άJڔGrF;>f~K`9@휕Zt=*QLFĵ4įjE$en5 hDx쮒E-P3"4[:6{NϤJz%7 =sǦ=M׻ӛ۠vNOGc0!|̦8f&D!(69Yݫ>jycq6!Brhy9nq*-ZhVtFt -oVښZ2`]ݏEP C~J A`$Ԅq"WΗN?%̦=jLT)bnѯoKl)́ZQՄKʂkIq~IڳDE(RQLTxn= q`F|0=_Ϻ zbDRX/l͖ i|XHPlu<6F~S* ⡚? MP۬{֑WޒR=Q,*A2#w#*8Zkp4!<5AmRՒa%~Ap>@S\;SPJvGX+Vz zpb+9, `Kjڀt HVM eh|יj >Ҙ\N 1Kw^ʥ[xlXw[pݜ dQ`WNMpgSi Vⷈy`BzȦcgJ .Hۅ_81Ʃ49z[u=+;QHHsmykT\*38+0O}{? gn!?TC5 |R1]f@=VgFjFyMlt܀. LL="~ xWQo6~ׯxEbu ³-@mO%WYHWeɉ 8&w;eN>s,? /D,Nf;!zxXmo6_4 6,iM)}2(ҢKRq}w$b[vmEjKsǣfsm΢ ",m]:p_IiA/$"I..ɟ| |Z6IOdXċXir{ZqYx|mܚYX:.9eb<0_^H+kG[o*ˎ>w#6"/VuNQ=)93rÃ͕Td־}CZzɋ㫫|vɃ~D;''85'9$8)x~,jK8 8эbBT$BfUĖK+F5#^ { 1`s(EJrnYm 4sX-K? C,f/$5fhWѥY!J{uNW۬d!l &83u8*wz$!qo$!i#]w0$5ەfnRXQNdD^+пۛ)9> ?F go FݱwS^Caԗ* GD[jkg7Ea)&U:/߯L&Q8զàVBmVK"_<1M>JVxȄV*%-DR]8KeCe-Qڸzrv}}Izkk?՚g/=>L<%' \1KQHjYfV/0Hw+Ys"eΗ5E(arEP,"/X>GѯiN&# ׀>¢QQhXN(MAJA>]{|zqdOODBZ9zW0w "1jϘzh d/(CB,pI^8`b$AeAsoL;ͷbPJ܏bX96',8 W n47=xYж7Ҙ]K gCPZ7CZlSipI7WmP$^Ӄm3v ut0z>1!Q0яQqX:39o `BYoʴA& wT-ENS᢫$Z^,eiuRx)fonG݇fwn KI M8"}fGޟ=$h6 foDQ[ FSسEP/ иV\Wtgk4$m GՖ&^?p}e<( qCzTCwG`Tܤ;שJT\A >Ad4 T 3rx?I+v+Za ǭym.wQt؎k(< م #@\Ċuʟoܵ+ H:t8/Y\9~a oJ* XX%#NxV]o9}_q!63V&k{fHǾs? *aõJ:. :]}|L䧫&?PX>v3B &\ͮ_gwba Fz+yr(},όe]Ҥ)gU>)ӭ-9kjLBeuߙb[2kUI6 a]Q 9_A߽E8]R!d%^Fߣ÷n@9ą%|wl]\篵t#>/.z=w%'!N4p?uZw*,҄PG(YѝbUA%_)VTV n*@jPɈ` Jkp x<שCmœZ8%B-l|Q(Z. 9$16~,1A-(x܃/B2U`4P*2w҃$5: Tt m5Lڮ1$]#+]]/5PH,6%ؐt%٫c2O뀼2ӵ1VThhz2ݎ .ܗ F 7:eF&|gb+:֙ ,0fPhVǞO WzW"kMiA2%^?@@ {zh)*&Ut Kj@Q'@ηs-;nzE@zM+/'8ZRZnoscөdC&K|vxq<>=ӛ5wU⸞HO\LϞ)9OM!DS$Xz83` ٸ&GX=TE]N uD* f ߮1Qnk\sބtDu%lJ 9i, ԦH^?l ..G$"xZ[SF~:$3ӎcP.-@@&Sg%-V]!L{Ϟ]l22|};I.hgHX⋀'a? ߹'o:%Wp~Lޱܜ@V^n BұE1*F"97{MeWol7̝py8,Qr)#9O3c&R'9: Qv< E{Ocx2&;,&^D6&^{ .Z>5Ttɋ |ʽ+wv~4+7]zj0q,8ǢQr'\]H\jcn>LRwӈŰЄP.D"rIzEo¿eDlJ}F"#*d$Мf,a%ȑGr$A=GeDH' ;<{X|Q)6N pj6.ŵHMS԰Dx1_r#}Y c:_Wi2kNJ\c^WM!W!s-6ZI\~1@ <*"PEAgf衫$bu3,F/I$=pQ.C`z$G[E$5o`58е=L`jr\RC|0 OA"g,gK"4bAqJg["KPDL C<09tgz3D p+}Oa6aD^8Nf%7N2ީ?{>@顭X ]7HTHcSx_v &1a&".vnUbL!q\9J:a!Hx̊piQ'Paܱ=$3ݛ߿齗O1[ &< #ʍ&BHh!NO7()_gǻO%y|9MZ_f6#OȥVZ.s*>Eoz 1>(RF 4,SP[oocbNEo+ѿK),$\+rɳK .HB^Bq!|{-4x>WI^-9:,9\\.%JZKL&>r߂[ (On]%. |K19(kyʀ)[v JD 1X *akK&= jȻT4ž r0ҍ@C$P1ò(9 OS/Qq):ZJ$[\'6wT PblM$_Fr-YnL"HIT5~ ԹUMM_J]KKjyjz1#e,R.>Y%R"D`PY~yєǪtGQF Gz{%r)',~$6E1UԴVG2>wԌk%d( RTSН\b#mڌiq> F7+ ;\ouv`LH+ZYQ,ZщKV=,DC|ɡIwMV nul3(XFh;V-bm0 {ba25* jf op ʏM;n!,#b])Sbx.TWkdsQ>3{-T T;:XYf!OZ~gupw26YD=iڬinECLn]8^Ke'pusߟhvAzd ^%@ xWn8}W*>Dk]$ ׎MZdS#%hPT]obtd 93sv*/L\dH<[^Zj LL1&f xVmo6_qS>$ɮlpw4HSt4P"mqDdElHB=b)Ȕ2rŒlufy6tg]Cbf?ß<|OFsO|^{',Іs]xS ap#Xp}YTfhネLs S_9:6$3|s"])YdtNa5%jų X C[X & t;N2okƅb:^,.ồ9sts0iwH}2^\ v ٵ,kdy5f !  5*)(1;b DkS.050L# DeF6bzh::,@Fbb+dj a[H/v3)aQdá lYvUv7qVڛQ RɴJۦt{1gtSfiTT;0H _ |I6ކ7܌+"cHK`04,6`Ԛ*foutp_qÉ͸wxF1y,l)Ӛ;WdAYYX㯭J FpJ/Oduvӌ[M>wq[³c .Ï6<KMP< c hEZ {2+jD gۙp[!螙Bez\˽YT)%}m!-¶ObK;D<Cde{#8jwO*Wu(쩼:抁zK`4v8S,fxi5YժeϒTPRoZo;@;jZ{ҪXa/@}3T Pq+|*JۺG缺q-9 66G'xS[o0~8y hSP1[&:v{bc#cJ}vHt}ǜs wTL㻞Tb8oW8~VwW1 b,o5+5 Z8cJ[?qJW3SBҼ2fӐMh141gT޽KQ H]UFATeOC&V>S\pև.\,hkxD#?#=o|3!/Eã"Kϳ)D9[knqJ&#$8yA Q8L5Un9Dڌ4T`Cj]S/ ݮh $CoyrNh/}gli?> x(txUQo0~lP@hpŠtJWT$BwvB:pw  ]H@2O^iO1# 7FhR3t</9`6ZƆғi,V+N,mKq|nxfc,HEH &pET&LUoGZAIP{)~D2U*8rE%жWvc)݇(Cy$$m:Ze ɰ;#Iߌjz+dH+pZvnN@. dl\-X@CkGmG Ld&@.X`' BCa J# ұi4 g*h/GAAz,,2T;ؒ!seoRQ BrjBDh&lxSҤcj&OniDnG9G76ގqhnV+|SaRJ|}h|K#L۬ft_kW=7xGtu @%]{DdX;- 8ׇIjg}YV=BzFZ;  p(*I-.\Hɗ+]/zM332NYWl'!iGK4_u87t牌khtEV~_AD`&"fk#%Bˈ8#j 85>9p]N!~'N>r8סld*i T Ɨ4i϶R -3aUhawe<&5j.HJ'D3FL"A 1r9Vi`LU2ȉiVslT}Ʀ>ƢL"CXrG |40˹ZskIp @F%y:f!W:]e@f*f&o[0䷿0oB&RK+'ɧO˧/{<Y|"ckQ,"?QhV4y`@0v=!+X5޽8""px%V%O!qؐi x*V~ d=It>_y.Q6$80En]B^pmbBVp{j"~=<0ԯ{jw0ZX?O[C0P`;Q\w,ɱ<b8 "jdg Yb\%)ep6@DƄ?V\ds1RpPika 2p])[AQ"4bjIHV"A^ "4Y N#na5FL0TU47{F.MenB]QMo (dFcNfXbp,rc7U'E(I(x~MHԯ4 6"YN[J+db@ט)V ,J֔ɇ{`X rn*Yw9 X޶Y{YojܬBtpljКo#0GVRe5.~IRQc<{ v;FqPrXEg+7#҅;쟼k}R0䉂oAkkڍn R d )HΑQ&{QXubjҝv;ZXC_ %}$K\zwPN yRv^<Ǿ ( j&h ;OHPsu:!)Kwc-[(,*-E.td  x!yas#v<5ΉHlsҦVE*ĥ^Fh6X6"})_k іXL]ik/߉"|z ބq;)Ӥ#Op4NkWsւw| 4 q2KD5Mn-* +[ըf~ Ain(;غlTךnMNȝFfIb O时jTSR?t5634cveIm)>dir`a $P7fWNd5yM)

    ]j 蠧l!(.-U_A?V4tk:,楅 HzAtvN>K?<[эR~j4D9lOr9g5Y+@"LcP[FIq!|svr21wjT<\9X S}DU3=}|듽ߓ@(8J˦]ANjG%Z2H=O~D&z0qȽkDA KVA0Z(0,%GXR\{wv+.n9wZ\~wu;<}nC=tPlQA݅/x`h6&7\:fZ[1AyP%Hm.vwZL#Hcm[͒]GW>[vTr4rC.UT`Y&ҬJ }kmz«-. Wl\'lgܾ :+{i\wd,|cVhfe;@?ŞH q)f?xo6w<XR۵]wڵX0m"K>{DQd X#QٛMEdMH,|\WpZ?~撝|5lvu{`t.#=]2:Yk}5v4Wf._)Z3u|l-x /ZD|1buHj5XݑoﳸH,)ǿ,޳G [ngEڭitL_bÞ|$_Ek_~威e_x{g>˗43_:z/_>}Fg3˜4ri~:ێ͕y8 ٱ|V&68q h PЪ)ݞd (P9*_:x}c@F`y&_&\,4$p%i @@mBE%c% V"miM]fsO EUT1qf<9(J1\2&S-26i[ɔ4 !-Ay` wB D`i" Slsv2pl#"e @R.0i)51HMtWT_ y{tg SHgnq!-/j%Vl%I \il+R I*%po v*psxTQo0~ч<%ѦP1,jSm{45#s,ِy(S;$>ߝW{ *NERQdSg* ٷhs3M2% ~\oW7`HGz9b9p8tF-d^V M1ݬ/sR@Cw:Vm=+Y,@+4WxXGx$`%2"r|xLgзhDIKÝ'B><>{[s].b1'|sߑ7}j#o}Yzm j>uP,g٣( e@BrHNfs0HZHXI RLBfFŁ 7ɣ|LkVROM?RRr52*u0,uFu.Mfhc c("ѹX*ڥޙ_ςoa6Ԣ_FW, eGe T1+!Q ^ъ3Dg#F:N{S!;"xŽp:".ҺK`>MVwjṔ3Z4QM=2JcBN0bTASVr~4W}94ә(VLXXqb/ jAWLLU"pWL1H2x'PK.Wi!`Cob$ 44n(Jk&iR 䭣?"T/MCl[IեM RqyyW/Uŵui(w̰)-ݣn|sO4!T`=_a]`~ogXF#V%hmX/1)jwfAmmreXC-ՈN(^dD!I):A$&$>g2l0>yEE /iNS/ul{C݆4~9ԧ lhfH*]Bz\7PDa))vL+7ARM :EyhCl֓EGm[F6}26bikf cPច0p]2P{C*+#Ί2t~LIl8CsAeF]L$T#ZB-44s[ࡕ$f8pn;"Mt^bnLxfӫسsG>a }lJZ aڜƐ׼^)tG[+ tI+t^!]_zB? te NNiiK[OtҩWWI6Ir@-;eye_d3;!)GtIn)y̞g'qHB_;AdL!tbp:^m8rA<( I^Hpu 8˪\sg|Q (Ka[*0-:xC *mE42,|EF Ǧ˨^eT]seLu-2.gC `w+@BO!/+wFЈ0rKum4CaWL,UIJxF;eD)77FwWȹ ] z*ZvϏHm+c!kܰF snV5rB?2a1Ȃ@LmKjÝT{ uPoDl3^&\M&Ḍ 0sqM$MkKk`͗Ծ}6do80I붺S-kmI(mjxS|]])j;ÆA(pS# ۊPy~EZ /\iFTu9D3<9^;^kFl0.jnŐvfvqd /pJmJ+Jg8FuDsk,إGUL1uFF0(SiillѢ8nȎFSrǸ9YۺivPYa9U6޲Yvw!/0Xa0M9VAbWC06 h-qX jeAka${wůUa`Ti9p)lЉI}ԈQ$_MˈqδJ i}nڷkq͘)5~j}sn@<[z+GaPȔ vݜ)X2EsefI*7yt$NT~/N*Ry[Xň}!!~ҁ2)('6p~-:FjPǂ,A-Ul5=6)ՆHزSq)rڭro/kZ{?3qg> Bf+qTJÈsDq:kr17 ?&w IFY+u(JƝQq> KbSo%ę-I622o9!rbęZtѭFBAo9L1-OLdң)#m2$& m>hhIcAC%8;c'ו3KVXK/FFqMfr:])OWu3q ڇa49GOq' bHa(]|2@rIOqzASNv깊Znx&YCz hM6ҤI[wOX_eM*[Nv.*{t~K &;KaSְrB82G|tXba Ov||?K8,SwWmXEl캳֌ďobhlMl) NF_u~a%mZt,6n,9{AbMr,R "b;aȷ*[#GH}S{piuk:Hy_9PK=NA@>VO{>Gľ;4>,z$G?$8*_e_mIT?1*hT8/ɏ>>jIhx!{MVKz~.qٖ|TJzX+#>kKVADzD,pZ02 0߉=\·.i}㇈kZ< ne{.6NCN{W'iOWEr zm dd-Kxk6I]iv+дE'Ch[걏+oRlZ(΃CpfHe)ϦNN#$7gӦ^o翼z_/m O?v6WS D2]ճ_Olv}}}r(7og7G5qm9IkF['pSuF?=9'f*KI^W'o-/r:&U}KEr12^]nʢɓ۴&߱]\nyGOWEVϣe~7s2>諧_>}qp'>{^ihM$jgGә`L0ri~G?|sq64_Og1GJ|:HA5ޒ$q%rFi9Y$U"ZE^<9$Y^ $˦&|B%#^2br~Z'󟋜AC .CWY\U؋&0`[+Nt)Xk#yI0vN+3 wCa HBii Y5 ֊?pvλk/8'#5)ҢuQ2,d}s3 &qz|B׿0tsOKKB(EI(βhG*ސJ˛"i1əcDU5>.1`@O}v ?x/t,xZmo6_, 64NM^>D\eɣ8A,Rdi ["y=7c49 v'adz|>.xQo0)n!O0mJ*Vɢ.Ӷ` (~!U4eEBwߧ;î*iK]/uEY uHػk]B~t{hL 4%n} aSfHr3"0{\twGoe=i\bdN  OD]Rغw]zt.qgtkhGx$`gFwEr~Vzy1d3t3T<R\^dMV92JBygw:;3GZAJq2*4E;0o3D`0t-竔$2p<0c{FK8?OiLՌ0Z:%sՃ 8GhNg䭒88?98?vf?HR:J,D3|FY?nWCAo/?RT:6Ȕ)]1 ?4~DzYUȬʄEr4"bW}N` v4[kKDtPP/߄8 n Fr>MYH!?8xsiC@ 10 7T<Ж"#HVJ -xHi@fԻA,8YZ+f;$`QE/[گhR'ax Vg`f2g< qLEvYΖ"cI2fvcM][ U}PQO_P<Ɩc7$1r:j{J(nÔ{DN6z@Q*>TW$ۻ0 {&pՁZQj1(JVIL|}EU$W47IJ*[s`Lc H( /.pvPdcXcVtTyuzl 8$"< /Po14BIJtz:ڙ{X HNjZ1mmu-ȄklaLiH7-ii`@oЏȌ9SFd2T!_1[KۄwTc:2S `|.ƈ7a^p 3ڀ%Ai"ˬH?s W jSQՈa-d,NKf-[@$r3f ֪q`G.{UtWs@Y2TjjJwJ%xDX!:#HɩrxGӪaU.Rs{DA`tGٝAV:}nB){y׫*}#[Gq刭ogfT2Ԑ6{y̟o[.@tW߬0Z|h{bݮW0ٷs^ s, `G`}Y#̓p(EQJh5IBP:F _D 0d8xi) "j$QcY#kҗxk=9cŎg@7 NlhZ*VW T骢UϕS.E,P9flvh,E=@n.ܢ-oiL?ް"_}b[B'.j6Lܴ,6bl̔g*۩Uiq飔Z4|bqO~X<^)Y5c|ՒVJii,?oL/M׎|Oά6.1\i?ykR> OuLIG{Āq錻Ų駅~''ꉟ7bcP$0hIM'r$p:puDQVQ#ռ@# ^et)` Q'j(r+leT+WRhO(ݰ='AH`2QEDt7-#*{n!جz/@P d$ȚFIAiD/I,tvA!LԣRZ`XTM\†x+ζzcIkOwetņ# o%۷-N,xBJ: @o$ >V`aCml>G'XM-MS +8V omliOԈHb%l=B  |vL.O5KTk')ӤõMϓD)eq* -@.x3;U0]mPU|IRl;2ecv=wewymy=mk2"!8V=(jJ`68&4o୅܆-PSZz)IrJ#T3BZ۝ȟ3s~y_6ɇv<ީS5#91lMgyNp/غx^XƆ#QYZ2:\$zd$>I,A7];Wo.=Hn%ٖ*Gz變yC 551/8)s'dB\;ԫQj p _.3c>9J;rjR8J/l_8n!D)d-G(W<+g\~[;6rU*B3SECCSq785t+4OÔ9axejc+@G#s^OCgdi|[o[iYok#$#x)0ӰԹt[9=x&&j#V9Ƅ"3'\:0C@hH)-ƒ9 wҺUTj.+r|P9܃*]uA/SmU+ʱ"Ii/MM2'Ն͆utd%VqS2X14"~mOM7JI-+IG-_ZQQkCZ՗=`Z=v%~lA;9{a`2+ʉ"NWr+̵i9q:7^O@(u=n F}2m4. wI!6Y^Oq{zXG7 z}{]Eizj2 ܛKLơSL)39rQpv S攮JlpY@]=PUĨYE^Xv ]S+ab(_"SZz 4F|bCwcUe%˨*^I9X0zba2c4hj WF3tϳܽ_rb÷rY˙,"qE"|֦YDmUiU,b˴)vʷ}®j藌]9_9[Rb)QNeY*AWH+}|ehB8GԽaץ۠9.tN]= b3y3kN33H[}¿> MdM|M5eSƺQB(uj $2V|S?G_LZ,Rh]@tih}.B*^}!h֯9xx9Kc8:TVzYP" z6Cw7ݾ3c8)~n_- p o4oB1PxRn0 +8S,gI!Q\xNh˰([-̑ nIq${$A]?jUF/Q un"c,?TnoR )6N)]~s .|ArtA(=q[}YF^v1Y WbVI. kKO¥̺6L.Th3#NH}tZ̎B9?GܖJ w1z473j'B<>G,煫:sx"W3gFtgN^¾J4{q*CyMx/X לe4>ot5oёЭK0~ }7k2? Ŝ8:?zl~y'=C499 V#T]_<)>.ܰ8K0"] !$6;9=!hO53Pd'8K"Jй?Xd04~P E~~ m2^*xSQo0~<!U`E* T$L9Ҫڇfb_?$'x&`%3"s|xLg0dhN !6۸p5Zr /$x1soǟZRMWUǞg!Ss|zjR3؄AU:FSfodp *ˀUZK)ߋL`n7FI ysM6=h|*fB43A`q54aU(#u(%G;P3,WY[Bvw9HhW4\)=ڰQ."A[};yVv 3, xn0hMSQ[5Zut7vUwjtPqnm)g׍N@<,ntqZ·l{(Wӻj^cwdc~~H@K4V3Zn^Eau2/Ǵ"r6: | )q{1 8&jԱ+rrxV= ɿXE]B\,bM6~uReH.(H+ղz9VQ㢋d؛LЫ||75v"{%-v[Icכƪ]rux@w:6V9̵yTE29 Q,&,o3~IyS4yA$qP.@z3_o$WTvTstKٿ.H1" xmV=Vcfbƅ 4@+ R҄ea".}c=౭^T/I'\UϵH+ξi%Op6BK!7IB'giz |/>ԋ4?W+.H ɻM۸ZhXP}Ĭh-gv.Q?O~\jR[R*k*%Xh}1CxӹXzW2=^i Ӌ \>3{n1P򄜬b6)3S92)le 5P&% 8^}<$z;pRPE?^" 5O~y Dh1ע<)~, |gk K,&w#j@1Vksnp-[bReѕ{,x߈ mwPXX̢>o.GQh.;KZTNH&XmP# 9-n1۲K)РzGx*p ]pP{+ e_lZQZX])RLߖ%x1{8n!vρc%DiڊwK<|z^M'b]6+]lLPR,p( bcq PტYq}9}#q@L<L9O[L5 =eʓLp<}8_GЬCx956E?hyt lδ]YI[u[.ɾʇ- ac{;lc:W) x`FJtC U5wi &zk9s G#*5Ul_N^.bKNG}{xuCuWLjא+C7.ShrIԴ8 D&.}ݒ# n]iDBj#+%{48d^s+|z9gGtI%np ';c&S{u"tC6h`M(`ULh C@Hf5cT$a dAc0$\ji-m8ǤeA*~aʭyAgÀ,+1]~$d+PE;_|"b* EOsCBXI &Vhx0 nlHj7pSФs Ea7ɒ ͂~S~Bv@ۥ1X4kYA-Y 5hIV$JL=5r7sܬU'E1b] 1 ^3v:qkc/ >  !$62:i@ )ĮKɟ+ ЮW V<\њhiV袽˸9;,&Q-Ͳ!L:g8kmr֬GY_rU.emW5ziuFf06I7646k=BrϜN|R#9 $ tg$yE`L0SQ٣~8Gg#o۞;p.{|nнI0(Ո N ou>#W|:&N&kWY|"s۔螙 DqSlu\Va,v$Rӄnlwwu/ '!V!ˆpr>*n\So> Le]LJxV%T(,PjM_UpC6v{0W£NXl w@Ѳ01$5q#q 8z 'wy e({(3|,qڳBB-sva+DU;D8[QBʜuh*S:wu?cPg\Lϛe߷ԮԮjcʱ&L\2иn=}@ՓSjxqKoa(RP 11_ǎ{%,UWn6p͚0-&ׄQ6eM:+/ݰم#]'zGy nE(K8|.iGm{aRmV (a8WP,p|,Ј $RvYiEPOFqyw#"$'$VG$P"VR``05VN@'J&XIb ϶Œ NG?T[XU3J:.XǢ;\e7 RvB\ ]5kj$%, KNB4]Y ܗQ٭ _f=Z1>o :yߒ>9iKð;:[CaV_2žG!9hSx6D>(HN䚧3r» L>hTm$@!Nm(va9 8 RGa'iw;͡P4V%w8z̒?5ࠠ@|em(ZH+&E{ x/#]zCbgq0yXA (ywJy 3g` =QD*?dWw?PQ3CyÂgf|I#g3^94 X 0,f O({N-G!EG{ޔg5QH;aq1~NPPPc=}gzsn)m{)ZŁLyyKUw'i:Hp1mP8'fQ,}0̑x'*J't#</<|v<uM?Md`F(5yzI#]D9Ip" ˜g._~)箧̓ad)ŷ ,tUP,R[:$JČی9>ؒ܏LÌR_>Qu1JZ]εuĄ_Dٖ@hɬ ׶}JiܐrzC_uM_uky؇qׂ-*^xQP 4FRh %eol!#.'.1鲃;= b;ToD~Q)*cG_"B< p/^1؊r|tR$1mGIdGv Tܐ@WZቜ<yeG6RxeW4B V#?Z`0Z$_rJ!0J8K\KM%8e5492Ylc-W+ГJxP>ZDIjJZ$TDb U.%Ոuk/IaT$ghYBh NvhD7\_u-z|=z1T2pGۺ z 5p+3YaZ>,1_AԾ<8pXN+i%@Rw'0y'BG5?]Buo9jT#=DFG٪?6p}IHOs8y? pJSHbNw>goQհ)?2*W.k^A][JX>}!(t(n! F# 1+10*ⷪ#..U1`>z!C450t5*9m&3:LGǼһ7}foy@Nh,ZbE1%=R"OS<\#W8ni1K#e]Yu͞FgZ hd YDc%b:UZ!zx-,B߽~pʻieN6%G]X@r+R\[l$f4i4ȩFZeҀ$;JjޮЄ"vn2sg.9q+@WnmݬjC6ꅔsS_Y~6s֋hjhzEd1C&P-B2cCjV 9=9u)is 9  8[.Yt=%?ډ3ЯK[չLDŽ^NIn޵ɝ((%oO &tN$I, Q5rjDfj #"?sR']Gw)b%c2Y&^i4c[\ct_wGRD($ѝȏPͷ+FpP{q"ju<7Swi/7S D8>Ԍ(˘e1-l;w R8edoƸŪne}R@ MrIa }le ,O^'8S])9RbdO+KT~9shsHu ONp;2XdweqەjU9LHq3؀8 W~Niq$b+jgº8({5uM^K<.3=($s~\r%͕HrUUkT!ṃ>!}E@>$j+r=\ tmz (%XXI)! hx}uv2v4駗j>LjPKVbOA?yyCl\/n]]#N]8C(溁$KyQNذ$,Kl0sjB^rWZ {JcVC|gE>i }#IC"u"[%ؐD/RG)8D)X)Ϡ6)NCr!;GmKuL222ѤhQFMıԶbk&mL!2\WX:vMةϭ߻+-2u5'LC%]×}[鈋ܴ>^7̒9¢"DG*tW@ jhT;rJ<ϼGB4!-rkrZQt-??MWܕU?(}i,!`EY0ٙ7IqbQcd@Nη" 4r`C3i'ίPEG"!jwSj=kŻa( ry E#xtN"ƴ3+9o)>O#:dž^ϓ8<f`05G26dXrس}6s(kT!Hl'x@ڌJ#} t21k TPc^n#궺S??|(5AW LIi~_:1~#iYPtt󾤤lKU=tkJrY|>&zu^mLقCE?(P\C2k[_#VY7w|y<e6k:Rq"p hղAHCfshP0f왺`oU v^'*h035Di<rM(ÃHڲBe/L3vo廾UҬi`NhN.YI$DN&A8(>/X᫦, &YPVM›J z n B! jIFUtP%sm~UD?qgxE #Fȉx{6|c$蛆mJ"CeVFhD-/#{qQ}~s , TIIZNAd0_`sƥ(`8E$5,0!/jXlʔzB-Vl`uQ/ZOAk _nͪD o(OeYu*Di`ņR?B4zHbL+j*6l7Qg [WwŪo %GX:⎗NJt׫nh 4(ѶqHH˄i'LRՋl)aȟּKY$yTh uSPhnM5$,-/ oںSG #@8 GBj ܮMVe(_{px*ⅵ~kbԒחR-a }CϢa9$(]aFKB[QbB_( ˗h7"lVJp KSw _ ؃GWBgY֪I?^A9tVL>ڲvVb2(p _xWDtoLnM'@.+y;AW=Ytɛ)MAԦVt.qħ-%< {Xh;HYɛulu#:Da3ﶗe݊o7,'y7+zoM&%~*3lY('KnC”YR-4gxP uߚ"rb$>JTbC%FL5dvNG!.:daT V2YFwuP z*"p*0Ya<Uwy8$KRӆ/L6^{z2(]{=zCN@J'S{ aL~; B|[,]Xi܈oEڎn9,dǾScjPdR;q?-{NmIoF7,m*n EիUI-MnOwD;!WlK ,*z1a+*uyf.kel?z9Uf`(i)ᶮEV[JbdȦ[nV?xn4A1ﻚYӲ$FIrWfa(24_Sڧ=\/ŷqz)){>t[qOxtna'AslJ Lg`«8cň(-};}{Ʋ|:laޯ QU6|che&Ql}g~Z<[E}`#RosiEweT7 2&vI"' H^hm΄hJ_ g/[u-OK^nͫ0W#H mh,46YQ nsVgDU;[:KEĨ l姶hciɤ+نO=%NKK}Zg0&A>LNL3AX&YI| Kt[WV0om9j Ʊ, 15r'"UHWa0h4hX+C3n{X ETkV'Qde01~MH3Mn@A ]K(EHE6m ~|_wb,XjBڬ`wӬZ=14caUT*vR fo ;&(Kl i]?(H9eDV1'&Hюtxz 0 s:9qpp5^t!%Aۺj[f&mw[CzU^<%5К=t()qo5xPJ<ܒ ʩ[zVd(w*4{bQ]T?nNp`̋e& n+O/|g0\Amy[b+eK!O%e 4‘rR 4_ cܘ>j>fL5͋IO0ɽA@5|RPLsU|:RO:}\Dnx6v烎<4rD1r89]Ϭz V|Ѧ{zK,exz-=T^/DlHPR̞~U]ą*6NzAґ9Jd8 m}Pď,S;a#+1qMG3su;)梯N̏<]-~َ )C޳!޲^'mZk;N>ۄ6rEyQ!"][ء'᫥gsAįdI~ITY*ȯ`rCTB#7ܻ8I kqIg4ƼmhC,khu4^=}x"=.x-> fn*g }C5T!#*b硺ܖlM[ BQ藔/) ( 5cCܖ곡dĹ?rvՆXYX?ŒD*s=!,gsÌ>b'LYC!n|K^v_^'9ohFǽa*veIo9n8^jxqJ$Necf;ܙWf1  9q.,#(2l~6pOcÍcp j9SX\A.~fap 6kVtBH oC;Cą :!S_ >@E)/n,i uv#D9nQ\: kS7D/fŇ7o/o$F#RBoC+DO0ƴbX>;eVB1,H6<:<i0Q$1h,r#l9e:Lc5q8B`wɋ&=.1;xE@ MNj}=:PkbBpC<`"nҔCh?k(ƈ=ⰂH0)=>VydBڗg#T*ՋgO0oD 1S1R2tJ=DZ9'~ {*2u2dqZ-WMH-K*bW1D{qnCʙHMN^0? 8Z eŠMc([d#axjop_XЖ"#hnP8hc'7a%7=h{, 㟄Ϥ74 :9rF]Q|MYA~ʲ }Y)Re5QCHA&'mC;:a?B6I3((b|БxEG Vޅ7JU݉S^~UQ &[8FO8h1Jj 5My&H(b ;2y_7f*GCf,+VHOfi s74y8.V4F!ፊ#0KTS-)ʹ GcRHh>ڬ}Dd2t,M<\X9Zghk@Qd68Q6-LDpIB< Ҿn_͋8]Ng*dY*cb1+u+vīY9H 9<6A{BYWӳ1"2t}5ſ?m8ͻE&n?@z4^ xeEqZ<: )b9j-m~2y@k6X,J: ]m닙H=h{Q_G-o~]tGNdͪ^tCH]eݼ$x3/Ezw/޾~GG|>~"6'߽~OQ` }G A6|_7Vdb &kP@=BA؆$3tʰ/_Znsa>B ,x~RC@ L/aMMX`jqh9l9^Jk!}H s5ӥ~;4GemCYFUy"`4qÎ :(S$Ea#]o!P3iBd*b#tੰ-eDb*J@L9:bG%'1([!h* ˊTaRp,܁q멀`x\3H 9*1 ։Iɰ-$=[lwu<={7Yt։z+x#+p!8͗%g.PJ 8HCi]rCcGi[=-ukH}A!eb6}Dփ Ct>W2 G<cKſIv˱ EH<[BWY`Z E/VƨPL@Z>0 Ib "d:M^*_*j) 2JhpC "NH]ʩ[&eK{憊j3R+M#ĖݑIlٴ9ݱcqJn|"<)мt RJʋhyzbL=v<-];jo×8ʔB?4ZuD2]'$f}լmZ5[U\B٧@Jt0j^MM3AmH9ds ӥp[TEՐv\ۥ]_Z~]+w yR~-_}uw|WfNFu{ooQy-#go!7ef~oP0~|ݨp է}S^8 Wk3hoA`Q os2m 7;ox;n[~%:5T[T0'#}jLFdVzyQ@}9_/@TLls"x?e,BT _$^"ICRF$1L%_eEgp32e&Bo2%-1Q L<:W(N[Q`Jh5b_a_4@cF G&-A+˨;-MTtF acp0kTTMΊR4 }&WW->IxXy ߈71r.8 "gIeڶo68YebsV{ԳEv|YƎ4v䳅0Z0J"bs|somnW "FaRc! IhBNOauKÒGm[\JNOp<5Y0*i.Ts WLoP$| *߃(945 xQ$FqdI=E`Aܰb%6CXrl`9יs le{~>!|]OҠ`*G,6aҞOw7)Khu* ,%(xpNŃUg4WAҊ13ڸ J]L,;&b&&x.˂zeA29@e;܀v`uuVQHzM*nAHt< a2Na[U V']PvIQ]w{+kux~NN;s躋_Of\,nK1! ho]0\? +\3?>l $ jf򉐓!6ƆFmR2QRЛU 3'H辔=5\.9%=Yfn&%9)#"IɰV*u\Amup%ܹÝ܊"Sp=l%izQt)񛅎ӝwelx) ISEƄ uVBԘ4Mh0tR={u O6A` E rC_eD{!Q!΋{ VI# TD p(Еr~("@&Xe¼=NCʚ';9 FJ`H? S "QE[MEqu~j;!;Δ)X"PIABɴXpK[ݮJ]tyc+4Ǯ~}wqE7)C}DR#[;ƢX-kL\e8}0R" 01%HCz}F0F Cm}S]iɩ+.XYA1h4 Z TT S[RER|v"2bT] 0git 5( 7.W(D6է&2MlEU2&I2d,j[Rx 4OZ]Nbһ4W0V^$#fCյa[b=# ⺽}qP 瀮y .6eʵQ8Uts/Ls#BLa  Z@K"T<|/B_Ƃ;*nLeo,kq,v<6GKVUNX" Ujv=:g4Ud/4kXz!nM9QA>:6]O+h$'j9,ru}naS]kA_!j$L7IV6$AB\N3(zӶ)^;5"+?9hDYPT59 ZݴE~2O1jvLܺ'n窸P;UdE9UO9UW5*{+}ZƕuzvP-c^2גʫM"o?CimBlhk=94mVpY| TRn+Ae_* +0:Yd3Jx 6—+ǪzkVR]}wP'O8z,2"Xüv(rZ2Xm5>z ®9e@LxNώt%'HADo,rz>Q6i ۅ2)3_07v) b?5a\# vxaf"Zg{EYYBpIiꩄK8 2F<@Dpf%4xx']Js'ٻ#MobNoE3Jq>NS~A6>@y'`m|eLss͋fyqQjBuexW =QKIlLoWqԒ`v-A[, '7R`x\ms6_S?ęQ,InRY4e xH JtoI/Hi4A`}oُ_7!ٲ4 |lLX~9_>hwyC|kt?޽%@4tѣ5t۝jzql*fǿؿ'ޗUr8Anh mS_o8ӗdBFF䗢TR_z~yu޹5^ܵ&2?U^z _fS%T 4Qջ7c'cru!gSx(8%ѻCFM 8P=USm2N _3d,@ l0^АEY=CdЅO3_tu4kE<jzջʲ (k8:Yi)[kx!+:$?aRĚ_摧gG /(yYx@uiJ=4p>435uJsftT;}@+4Pe>YFJ?hVZ7 ;ױ?ygC<~D ؀;SM}-<[I&_G0'j7g+r^aVf6BN@l4xFF< 6 ?kh|B%Zc)TPv sq4a<@A'Wϟ\]}O~9Z|ggOY|?uo? ? sdžȥ9%o~yq,\_DK&Gy\$Uʖ,("|$6IRV@f\ə\+$)Ҕ6xN%#K;&dTR*@@8>F 24(|~l3|s:$FȻ[:O)jRّw5sT4Ɋu%\Q3=J246|-hkh+B#U|0U-d ޵p` Y%^}`VX *_\R! u**(߽.d AEFix3˽H-dT%Ni82O n6Ȕ0أ\<˂{V5)lÓ(&H /=ל{A~(z_$Kiizk:*\it xNaUeF"K$E=F}JTCRpLX[zHOTF XNwr00|3p>ptG M!_2`v6Aqڮ_l͔_(s1$V'KbڶIq5yll2mv5rbO tn:99O&jQ6YQLVOekV8c9qkcHoQ8SᬬE\105ZdXR{82š\I3Y򘑓)"N7H6#zb}29u F"NB,0a˦Ngœί;ldtG4%V0j5maz5ތ.* F8ˆF=` ZH" qWX\4gnVF/nF>˿]({Bd36UMW*VӶWUKhWۂ};6VhW&%G!EC'U#'Z!( th!4`q*O~/c[SfjFx^U>r/^k0iuTsƭj帩"QYnpdyyR{tUlÇS9=*6wXflq C4#LH1ى;"Sq3nggg8x;ūtvWOgܚΫ]P i'nQ^>6 '9>{pwUk$/k۵AVȴi ۃ*8+:+:aNjז[u O!y0n=:l3b2??鳗 ՔoJ4m4IK56,Ml{(q1-g}Wϙ7vjr)x.re-QU[m 0t:3JeTdPPU3Tlg XwdYupYŹ D\4@N6Sy28=mwfBV|5[E֭9b~g:p;Vw 0pV9K}o%Md$q7 kFGgN!k'$dc]SssJ#:pAH>N xV=؎ cR7t tz΋zwvf/ u˼]'֋X]4c})A[ Z==zb>.2}A`{.zj_Ї e \nVdu+^TJ_pE72A78_G5iqHWQl)hgjidDY!pdz3_X]HbqZ$cwp[ab\0ej9mh`yc%U2y BkWti@m죁|k+4u\OorN#N7=b.אvӾ,6.yiGݮ<̾uG27]}熳w^ݺߥFzx/ق[f/ItzKWٖno?ܧuuYN!W yV9dU'N 42 W2 #eL Uy.٧ c )ۛa}nW!yfߕTN3\H=q9zhhyb6v''q}}Z`1m&ʜalͨ/9=",xdBNOo/n%KO/ȃGO.FKݾ~Er#Es)Gz}~rltaky\9eZôٜ^d"S6f%u&҈s=9샳\ߑ_Lhy&xDTꂊY='lA_F<9P1Lյ^xz,8\oix]m۸ [o. Zv}eyMEQDjdѥ(;ΐDJIzH_3mf,Sf"Oxvq옰,q/ 9/?Lt?߽$ } /Kݾ~Er#EGRǛt osU4h & FcxLل'lZLTיdbF#N.xv>ֹsyOy|G~>"gJs,~Y$}RT̓9cK5)4rtxD~.Su-vuu0>89OO=44'?u^x? F9g#c7/^%Y"?} ;@Q"\X"?_qwv*Y"P5 EtY,YW;K*rWIƐF9b*;Y-d p,Y_TY>z0+ EX ̅YXį[.X+w/u59d+ؕiZAD1I)J0+خkj&k'wSD0يYIN"])Mr 3@zPs,&PE cW26t(s^J @=MkOGcm+@aMTVvLuc%@EZ^rT-F0kR;E/3ttuLeB$WA,㢃D!1Qx3X"S£&EiApUJzrѦ5,?ԩ;ޝU  :,xLX1ՋWxxEJxo!:$ ?S͝:߉ hj*sfE{L=}hRwOg1_O9Kf'Q>(AK X%]3\qN49Xo͆U\@ͻY|FڬպiYߌF39Loާj7%c5 (,)}]J+U+YB5`$7*H)qƆJ/J-2ڦ)cDTmM.<,xsTS'C$R}B ^8&L#'M }MZR!P0izqe aFbKW͠i64Z}#sr+jim!{5!.'* cfPF= Z)J" q1XX_4gV/n@{̿]({Bds6UMW{WCX~BVKm+Yc@< \t$-H@chԧ{wfiVq櫓k&xn^W>tω^bixWsԖje"QYntfy,z\tUl#S9(?7wXfqTPbZPeM%pG>q C4#LH1cڱ;SlǤCxvig{6+wWOz"g̲cܶΪQ(Hlףu uܘ `慹9yY5[A B[j;#U~V6| 39>{qVkT/k۶Mݽ+P64{8fFgGYwF| :15A&W2+o@N-=1m]iy$7$qB]ׄ:k,wh++%k цPȨ#:\u?yn?vHs\,4h7xyXTY-r.sB(U _uI@lU3D}wymcѶHH~Ccx X \X4P:x|jMIG3-\`ڷ RBAl4uɢDCw#9]KBA[\2$eIerbu {SA1}T{mEѢ(kkcQf]c]7C*@Ys.hhT#[ϽVbjLs^1c%VV~+=vO 8P$:D/,[gDi;Myš\v$GQ-~&*(b>[VPP2T%YH.Bg jOLMU>T_!Qbqd7uR״#d y ҉XgCËy{]:\OfUS+pd'0ՀZ4`%`NǿĴC&M^=Zn$JA'qP%-DU [o%pԸ+ (.CF*F3t 8JUh#24`*lgzȅgK:6tuh:AK!}fm ] b]PD +n)C=!C1l;Hͱ^6\z.i#-eGWf,{K`ֱ.KH1쁬+3nNȵt~^ iŨ^(n2`@eM cR^fbО3gW C"][ zxղ=ޝVWvZ߃ЧVurNoLWBzlߵg6W6D}EC# B`]JCW\ yrחj}^U[ (٬ک?)wV̶u:&%XܬfQqr'ob? 6I6,&׌`.⫲$( eX < la!y% ZzР Ogܟ_uɖ4M"`v `6=}^fY|vQ9t,kkuu)[}*y\7@ {K$*<ş*xI9=Lzc) C>|(glEvJfsf|Z;D],C%e>YF?~G Q O>} m@Osǩ!m~( EW=&  PFL8IB𪒓qT&4͘W^C kI64?dzHR9ɭ8DjV""lc$I{Y %8B+r$~[b)2An% Ü$Q4-<[5 Ex$ c͋,g[U>4Ln%F`pc[ RZFd0D02b! Z>%h*EPvɌ^>O )hۭdB%\%lBdnx)d(EE$ɳL,bH EY 伊pk%-1 L<U-t }d%/J_4](i3f'|%bc\˱D*4%qط*Xqڲjvf|ԻEvxYƆ4r仅0 0ĽAG_+Ӓ4 U%Į INIGSrr[4³mr,9/i9Yl8ͅq ?|yy%l#V| *QHA `({zݫS$d>ue(ޭ7Q8h [*C^8J^ f;VALpclKD(˔}QLpT[eEhaIEKl(; r;MubnFB?1j=Y;y`H߭דNaUS X!K0ٛIr>޽KYBU`!/ԘG3=Gwڠ(^:Ã&zoG3)HZQs0~[UʰAeT$ByTPOw=*:~O h7 a6k{!hzqlj{'Uaq68# ȫ64XWP8{R}2u4=k,c͚|]V,V$-?aF3?}>7kg3Ho IP2=X)+k 9 Bk3(jj[z~Qa~Tsa}Fq]BՉsZh*i맽TROKaK 9KU5 -\D7B VE1zJ7Bu-Z0 RP\T4<+f !VGTU%/_>F4^hi+VnVTjUÒZE5}VMj/-X+-ڒoJ؃tx/ ۹?iD*1m||8XQ h ʳ'}Uqԭ4vi8d)OnG08i>'r= r_AC֪8y<( S֪ZeeXabV5ӏʡcg=>D$9Ƽ:GbE+>Q C4",M!E`IEaAQSo3^FfW =Q^c`ҋcrU$t'.90JzF\ek O٨q#kE5%Zb{˿1bm.1w՝܊$A,8FQL$M%%~3qsvkrnLv~5'75(oCǕg)Wˉ)tM/bϻݫQ̕т[WaO>0)7 PґVf @e [ʊbGU*T[4j*G84 u-η´8kYҭдY؃IaTrh(<(<x( x(>Ź\[0› m}V׸xjץ{Zm֥5On2{bU+H/N,Ud\Pb5E$:>-ɦ Tcx77ܠyHU1@ lLnͱAq'_wOV :jP,Yg5$P Qg~ME asݕ7;l,)Jp2- j2-MW)L0wHp}JiuR-e~eXU}nPQw ,¯\M^U[ƢXϭXLe8}Ȇ1V1 3ic>3Dhď4HhnhҀjJDY2-ƨe*"Y܄)]L)$)>@A0 1&kve{*".Gl&GcQ$o\P iN:MMeh!0e0e!D6 _kjv<9)^9+el?_{^J!y~1յab6 ⸽}r  〮y S9/N?oʹQ!gFx",k^~mT@5!yTǨl%#C{g =32?V+OlD7֝[kVU1NXB2 UjbwZ]:m6'UՌ1.CDDrʣ09曇eUHZtbZ: oAnuL~Wf-%Y8I6%Y 5" qWnzN57?D_ۇan2B,q8Kq59c5 ݄[};1x< 6o ؅ln]LU;ۆQJjg0^E2ݙWU&+0ޝM-ʨ4ĪSo0$x.*ʿľopW D\MձӒ'P/:ڊbKE[TW' A:5ڸ*HnB"c%󊥱jޚe"7W)sc,vpfH]Qü!rZ.ҫok%1&8s1" +sN wZLT,^ʹ{?Mͨóv4nh/F{e7o*:7AE:bzWKYUKy@zI7?z!=Ts./Q_uEa՝4JEUڼFX+s  }hS,Be޺3 9~zM "rseo~QMZ=:4 \6\GxJ4Lni[A ׳w:,LT?*%D #hzeLuة$1p1iUFn>rǙ~5Rqׇ^Z+ʒ 0Qj)/:86~Ə_Y4H MTG64aJ32SJaًl0~+~Cv5AY[T3`  lQ9}f<7%FtmK.B 8U2d \ _̯ >>?Ze ?y3 :"cW>c)}~DO |R {ݫ~~ZƔ'); nSJcŖ{ic,)q_2\lTS u q3rux 4Hr  P n0j*4Jɬx)EG ?CGȽ[ <'SiD2/זKf)WY2F*_V"ʃ2j\<&vw}!%Փ0*.Zjma ߁AZG#HlJW@`!Cf{U w1ĹG&pZI M%8of’n&2"=Iӣභq{.JPH1+#ea'mY03aW#SD!Kŵۍ'szP|5Yߕ#Cn-ˡ-U*Oݍr9$fTғUL- ,S)ƱXqM=bQJK yb1GV4KzסmQ\$X0|8MhA$d/4)wHR`A^M5J3|1jd /W2H${ T MƈN  E6%_͵3 ig ʴVƙƊgA$?f,rn#o{T{}T'iWCY8խ\^nc5տ tU@b 42*~KĬitmZlC0A"3UM`AtxXmO8_1>JДNfեn%w*'vkݸJZ~8m MҴ%4T3KR.}@R};S?O6k?}r'qC@(ǹ;#f3;LBVNZx:!z=>LxXmO8_1>Ҕt'H(!Q=ڻOȍMbmjGCVoi46όy3NO^ʸwPR.O2j5~w{G!xt}g?:=l֛_ޫrlˣ~u맽!QT5dFw^sMH=R2|s.tJT9yQ2& ^8?'> iNo< xWmoF_1u>HAԊ(I4wOh.kǁtk4i{wfgy~1KI\MD*.Ө8}*;XbxX[OH~8k)ġmS4L'Pgl'qBܰ3s߹q?=< JvIг3}?y?w"=\\u2p|s $ct}k?D9l6kNJ7H968O@d맏8o oewswLjYycn(y_9eܪ48sf? JLD hIEB7no 8S2šd|4uDg&,+ҪHywKvut$.4 Z]]J$!k-\-O<:~g4NdqfҲsIak~4[U^A)ooz.̅"=fh?9~891)V yܸXdZF|i R J.3qDMX}$}L 9EiQ-u#T*~N /x<O*Ե$GuvVK_忛/V$œXrg̙FC2A\T꾄l^m@,tw7``[ʠ ik_吊Oہ%|O21+G;.[ȷ|R*.Oon.ZdfvkyYo+{ejMzjp;,.#ofU? y€OӄMAc04b0RI9&eTL,\_^  %hXG嫄d:CXbbw Za#* nrSŧS-Y+|˴ʎڒ-l1 (҄3 3$AL^obhz!@mge,r#IYA&sC"\C5T)dnR3' `31^Ag%Ŧ_Ɗo6eNӱ04轧'.~zzZZ塖[x j70D3([XwޮCcR~g`i c ]b0QkMfg;2A>4xw[! # +٫10 fDFyQ,cuI%kZ~PqdϾDk1Bŕ`^g, Yҹ^l0tąbɐ!C1–ח~Z?> ~bz1b$!/˦pH! ^Z,+:Uce.Fht ckɳfnw#k+H)}0wzr)(y.uVrf×y\肜-JZ̳n%> 6e~1`+=@s3Ӟμ?􉀁ž3Rzy*\E;3,8q՗(|%HV)ZZS6Y^]v=Vr;$Xhn; W5|Zd.ۢkƭvM[Q$rjRjW.~["IPUlN\- wUJ&k-[TsSe{K=gL,AIHB͞Y^Y 'eAX+8 3)@?7!b R#SaP ~ F` f9HDP.aֆG: K<R\ ײS+Ob u kw[7Ě*gAND.*\pݸR];諞oP/u {&7&cJ#a*)#_JHڪIUmlS1C?TT bRMU+vL}7k=.7$N/ mhuNwBߚ@&mVfmf-;0t;uLZnG-AԊ>6hމˮC[-p5 -0kDJ zjv:smܚLjXTjŚN٪IIye)=4]lB2 q9#9E -1WQsն]a=qM3O7};a)z5sffD+T5opKA4zOtkz&! geC{\p! ǿ\,`y4Fԇz #i :!z~:f~ LwЊߔ;BրP i?1X!ZX8Wk T/!"_4# =BiAv2i1Y>@!pH$ w!?NAl~ҷ#=t"%;$gc$/=w> ``?. 7xYmo9_  RȦ՝J$@G@w*gdn4Bk6I m3yBS[VPȅwٻZybdDMqH1֏S:K *_jp$crƉZ3A{  )RNNW!S.\0~Ft?] D$)E j'/я^bgΣvwy+6 '''^=ª1p~欯DGa֨roKA҈"#\A Rdѕ !kG+,U4G:xfT+B ցy$iiI-t~R2W|mpR&]̥XD}+.:A Up{]ong榭,Lu K۩7(oYb&}NnrŊ$Jf9 44A':@H56*`j"N}FΠ^Zo,)$QgjD@-Z8f?627n_~ tdF @g3h}>6ƙ௰ss }-ᠲDm9aZd吘'8ȩ6h⯍mf\ 312\HhD >(l eeuAnxW[O8~ϯ8`$HʴhWfT(ET9XƑPh;)вH4}c':o.]BQ@4xxV]O0}ϯ  m*iPG FSnbƑTk'JkYa8=8TŒ\7 x)&Ҹfr? C$>_B퀐SB>:$[Ed9yĘC|>[uc2N,KªA0ufX wsap#yq]q\P-X>7TȾR)M 7 {+G7}U<)ձH;Sh5(W#%X"{ ْevڃ^{08'/9ڲeqtlokiNwth%/ UrRf) (\.ϺQrr4K?yAzfOyjPK` 9\].Tc*gP 9[Ve: Tʱ /T<_,L4tuhvs *n42roP ˫\"pqmJ.D䉚)w#8ДU&@HqFPAr xVL֣HQ,r >ܬȮ!DiY2p'F"+\r(FZF"f4J(T(Qѷ3הFISi6*]d}l߆@}Y"  gL"-3a #aV'wRnn7 h$ۿJz4K7Ҕ]^]hbT?hwY4\[4|{>Z*ڶ`(\}AΊ?H7˜a i#,P1&FA‚"t9חH(€pk;-mjW G_־,AvWd`jypmijbņl?ظ?Ɋ1'R֒:HNI^[2<|ͥ={mTVPFBjGՏ,.ϒyv` _m6ؽƞp◦di݅3~n<чk.V(*alċ#B+BtQ#0p|#0 4$ Z֖TƑn` >#je'}T uɢ(̩cBY "r(+6)`|AxF,ndA{Bx w7|liIńM%rl,n 1:mB6_Uo&ezv}m|ˮ_C -nxht {ZnO]2Oeua۰&q+)kpNO$[Iy]VruI'aXw532MI)z䊊+Y8%I\p#`rYM#a4q{{t:oq~v^Փu{^O/ +FHش4T뒒1(eLNO-OV;D `B_ieY"je$et"˿zaO$1r:FS1!)圮6Wv aЁ 1CIQ.%R*I]PCЂ+SԴ; } !4DƔ St) =:դt)D N!Y 5NRz{*5bǸ%\M%0,yϪ9ڥjRY&8zϧH+y6y'g6 RɨEZ 2RԆ{ǀE5󫤮f?n2\@CF$[B;F0s?\ Y#.r(fy^w^U B(eK]$bgnA`+%7 #iL!N#H'&RxYG߰8'[S*B6 gqTA q})JW 9Npq?I|BB`;gy!Or4 vj SM){S&2.bonU$^43l \1SeEmD]Q@1(-q}- W^ߎF,GhKG*梬X0)./Kpȭo gVL&Bw0]HvtHj7bdvLz&BR[,- Jm #M-M(=)#*IGDD:RuS#s% Fs+zkn#W`.HsTܸ6.8Y++qW8)4I2+%% GV`i7wBzXmSc|xig]_ #M˜Z:pw]k?ki*KC6޳_cgEPt L Tcb!xKB!V\@ЕYUa:! E|DcXu ~vr0@,M{ bu9&d[~hjb&N"̈B˫5d1Jİ+=[UrګEVb+63p%o:K#z1:7ү/ Cl$Vq{ ^m N~+LUShfUhbU0ԫ$ :uoz_x[d%ߓ;s]DR:To_9m1^Z]5av0m?;Y3Eu+1e]qclav̺Rn1<ϸHil*ZN!eqRHZl~'vb+)NŪAݪV4.#p;q &E~6q/Enn:BS#Z}Dhh33(,,ڥFlM-qF4÷T]D-K8 d'&"OC7&G^ ,ҵ"a+]P܀Wxn9W6Yu@uFVq"2'Vg޽[=x L1\:ʌvpT -jα2 ~< .wʇ74Ze:8fD}PˀT˖LCCO6ƪ=owR'~:7dv; v[#[~אOV=.[3AݛFmBm jFZRzV>ܤ xF:h[y`ROsx9{fnԙ;q¨K)ҷa)3ӂ3*KAG>@ftel"wF$YOZ_nWnPqTI.LtkcK]\Σ\JI"y7`Z&n#㽺.jjQ ba#G>j2YIhngsM!dޱjHÆ(%EP GwSh_I!9!}~o.aVg?;! 'BRWtxr6]_U"8$;7Nv3ӤSa EjIPsp#@7lz&~26!{q^ϧgcUb\Gr}A6߾zN>~||6"o xl gpO|=~?Pqkn8o1]&!fgrh^[̢[ϒ>LgMbtKu>#glK ߮$˟ek2mzTBO^^>ykhUg=}W9IߙV\^>}zvF"|HTZ)ysŘg1yu%?,38apKhX_a*SL+?ȯW-U$X"&ϑoBSX"﨓Py ٗJ拘a$ԟq=XVNQ H GnƬbo啑ԲH 4麖Ӥo7ڄ$ )Âs#+0*1EDe, 0>to_f5sc|*On˙bAV^@70DuMČ⨡Ss5}THyY*oQj`=TC5;-giZ Tm@ =^F)櫍NZ@Ԃ` /ׂY*frP?kp[չx-:I8v,Rqr$TK-931d{!s{B"?Xc$1A?_Ey,90;33837 ,%dhE5D0h`$ 9N N-iCϡD[[,Y`Tj)`ش퍶g s3gu) Qv:2qǫTEp,ynBQ(jcfB2IBHG df1M!~i~GD(O`jZYǴ܂%مL'^;kzM7xlj8iZ,^t<@k\-~ 9NjpbIN[Y!^"JW'VSg%Z[g;cF]%Ԣn1r}su`4c4|Р s*XZ mY^mX_Ԣdш;s?N 8:[._5x>FpMi^A9N5Dp8r΄?^y~\+K牮52? OO&CP*xZmS8_s?f %p @"ձsL`:zqlrbeMGUFo!z ,qtwD"?h4=rR~72~r)q z麟N\w|;Fq{y@랾m8_r.17+/9g` VmhFpxc2IS†0gW1epQQŸ$З ?OYFrF9y-[Mitv0fh׽l}Z\bx5ڛj q&L጑#EIyǫ{r 9OJ57&C!SV*EAmW՝BLםFMHY>?d.M|cKgqaz\шM\8K}A79h.qNB꣹1`,+&4vI ЦA)rE?e L-50ǎ'o&#$@C1j$$phV_7!@ַOQ@3]*4K4"8DP|pc '6B'Dg*TUM')tL)Jb{)'?0 ޯs$\&[ hkmog=C)mԔ l2ok ''3MA9F%TkC\K "l"l,RJjpDmhs`qNX`O}6i=/%:U)~wk(uP%klv6T ia0$CKDh!m干)Z4&}{Ȑ'Ÿ5|0џ PqQ̛x&P+ $y C9z X"&8:P6, i3G`\d$ih*<0ex[CPoUo$&۷ΐ9K}NY%A)qڈr) 8e@ h56~`e>>?HX-uI0&eX1wc-;Q,5<; #.Eu1fB$ 594pk@(*ˤE&yRrC)yXRtCP:QlIRgSA!D']8tnPх>LpTMfC]5cJ n^FeGE.;TC ^4܀b cc<7xZ&ykP "&y/4W$'aVM`kٚ-YI/incL5UU"h9]# j 4,2Y:͂:,%t0eZ# hMhUi"5vuAGEIZV}m芖N.T mĊcM:i2 N%& ƕ8B'8bL`mj;Gw͌#xڸ1tr'c,Uw`י`r dʝ-h}W0}+R^Asw Up@b@JٗGIAN AeuZ |jBZ@ѐ+$οu@QUmN댖k* m"ĺ+VJNI.'kdZ_ ^+lwHӵjlپgs:쉋gx[Fx`2հ{gOzMv,ƫf:3iL2B ΠeaY{1,~מU I@w㠓04Xb+ Q0 D8WUnv 싼{Wcwnp1qkAu`T`y ;ћ%:?oSg 479t~F 1+PBa,BO\lqC7B Rg4-8m0Z/JQ-Qes34ra (D3L4˽Y+?ZCiEktyU ?IxvT%LPGIZrijۜٲbؕd>`ӵ}ˇ+)sݚݛ[k |=g|=;W^b?y kqb,]] h{)Ĝl%}h%X@R>'!³E 7eZӆ,0} KsgD|6ߴj&جkELv*ӳU`smZx=ksBOQ9聥Q< [:lK9iKRPnuYP;WJ%1&wuD*x\ڽJ1zr26P?:I3?>Q^ujǤ{!^F76ko :^+oY"@p?Z4QG -M!(+gmi!li$ 4 {s 3`kvwD@aU_ zр5ܔb_AS͠Yi4@ Sx9edSFEzI[.Gϑ?}r B6BiEV)xXmO8_  v['Y(!-\o'n#ġVol'&}̌yf<}WvնNX^ۙj,7h"@/7q8`4@>zz >[!f3[n'3|^:,y*V2ϝPLB0Q^klJc;Y8%w))t> Cq =ԙ,vi"1B!୤7Bq&<|R)NB_6xrl5T{1]www~Z[kvkfo[MK~ݖ,qaɒb~xeB:&4-wYdEl:4zBbB.X0kA,3LqG/ L\ve`_,{1l$`^i%-$k 0+  1)10V@ -A[lU@Ua*MPWlJ '|1q?2=P1dF5z~f1kR(,ЍfϘ/0M m^^]qL$lNXN>_ۇo^/n.пt- |~V|0{x9Kf~s5"G xWoH~篘#I%U I/RZW{X-K~`ƩYrg4* Ƴ} mY#-v)2r]NSaFFxS]o0}Kx" L*V01m{tC31rnJ}ׄj[)}9~F\4)Ty?@թɪy-UĻKY@|xsAayHR|^p~87[~Tv#0Q4g EdFPP&mwF1[=#z*ilr(+Tӣu'mQ=m:ojH4q쉱rN\.Fh+߿9;29z+%|>s1O[ץPHXWfumB[O&![ 2W5dU+KgFU <td|JrO$RiFUCn0dr,m(0$V*䧏]bG?SH˦y-5ⲭSWS-pw,J#, ^ZV+guptGDUDžq"b4%󽘒H&S<9S)$pn>~DrF LΆCudynϭz{n'-yn\K$'C֌GeByB r dUd *A9oR9?$< L$&(%-0 t]R[QdD5sTLHQZ{ lXJyVs.P龸loZk7 o]qV(P+ȼBT̃i(;`FẹW4|H=˘d)Ь x_ \Zj_]wY")* XF eCyQ.iT_mP [)jKbu6$I _ɣalH3-U9ڠ3Uŷ?Kr2DS*a &uYϻ&W/J0F$Ge(ߜAUO` G [b0M*& oSW!AENCxEU: KP`M762PNM@,Ԯ&a"a0Yp_%:Ao K8|Q;64~N6HF6l__RMŦ;?} mw˗-ON^^<$ac)C't95҈:+$2ІĄa 0ҥ$pC^P(Y+;M 0#sNvh͒j}8 'b CiDfHRiJ0qqA؎sGM cAdZU>P+r(YAsʠR0^)[.DM [UsqTV+yɷsМ -#铪4o)M5hON` \2xz%  cDLj8aml7sn_]OIL24_c5 E͍P,@HKźӻϕZYԋNzA# GtvlU-P`Y}{5[]L8.EՑ>PvuHjRKC.W aiN-K8"2l/yVv/bEg8/UF\fI*ƭWA @ )@&Ab>(҈qiFjX~ wpk jłi9siTud}+q/6Ҵ BYG:.fgnf7^9lYq0f;&c cUA2͖C͊ rP>k Ƥ]6?<\aa8򜣲bY($rǙ'Qή׷jKy>69oi1b| Qvpngp`8k1 >:R!okMj_ݱɫ,@D1k\] b!ZE*_YoSrQZJ6: jUU'j8<˲#뚇|ufWxeb {=)`׉d+ĮJdWY[8 =vVjN\3<+r'l+_|^9&cZə=\g5NI!5cPJ6*=#{Pc!jQ^1{ mE}ZF(9fzmsr.Վ[vnSJkXӱ6O c4ޯ}C`6b?+"eov@^oBr6ʉonU!Q&dΫQZQ:YwyH87ݸ"zhq;sA?88a)+gkjÝ0K˵f+]FEr*{RdSz4)H N u͡yn ՌTFj;ΞAR~iApB6VvJ?>h+jęnfsT/S{jXA6<%!\yХy`D <0[GQtX©J i\5º`P2]":R|Y4oW] .J &_a-+Ϋ4tJӚbg+MkCJGoyixKܯUQ~񕤿?fqK];@pɹŻk7R=]3[FxnWۮ|WCN|-=} `Jzn/p%z!'\O=w^'n̈́imw\[ -Y}P#]6d\ΏS 0wίwWhsP-h&uGBn]})&$+ } 5E-~zėFaa F6Md^S .*w |UU!B/"TƩqVQ$:Q,vj8PRIYM~ T4ͺXL+nl`ns7K'̧ YѤ??]5N_l1;{ggGGJd (y7o gŃ:xPrSϺQUʈ( `YZJ䔡DMj z*gN>KdJ?'se}8c$THGˆהtU{\j7 xPx+gi-Ƃ,^{zmQ"Ou(u˓ pUi:g{7\ijgG`!855fxXJ"c|ӄ "\V&yZse_kovF!@)j +*y}.[k;yd ѝH5 D034#,َU@ʧg-}g|VZHwi4tnA#_SCS͌CLsE!nqGӂny3%(1\OmoZ P| -~hʸޘ&}Y~"LXڍ[%-&kT, m񣍣-4 J8zxo0+!Cq$ڔR4]L \Ș&U}gHVEB};ߗmbqH8^eS΅xfߧ?sho^.{JzF~[ ;PS::D|LvuWН7jiQ鸑YXj>|dXf 4ZJ^kr4˴ŝ~Z 3@F!,,E4&j5c*NŘ #}4\1 89ώa.9.&<;Nzї%GL&QgDG>&Kd5?hwe.w/J$EvH*Abe1I*?pn|W\ JLǰ L+ӑJHu-6#6H!U 9+ X 2Dor!f0*EscBMZ|7s)5Xܔ"HvYHEKl#H^,|!o؆þ}o]uZvYvTnR\Uf^0zŠFIxXmo6_qS>$R+ilHdYܴE,k]l腶Ң@Qq}Gzp";~\1x "<Ǔ#H&˩מ2j%}+8\9l>o>g)h(K;zO&\,'Q+326HFZܘ~T2Nftg2,3itw#%/ d9geZb8LkjW d@b%KwI͘S1&=HZJ.՘u/'I[[yi bqAckr`'{SMےy&Ѩ3"ǣxk%cv_v;fV/|2SK:JF%"F{JEt$zi @1X%\97 /\ JL߰M+ӑJHu#&HQU 9+ X 2Dor!f1*KsCCMZ|7s[)5Xܖ" HYHEkH,|&؆㹳}oغ-@;,pVeY3bĎ1t(kS" ϏD1_fTT9@Y4I ?pf"N*?Mqp߬5#CG/ !pFoO(Q?ۧt?{77_$@(A#yS4Q*xjjzm.tuXqڒ&VӶOBQH@~=Q N9gHS}::T73 q\<*XW4Vwf%AL&%[@<|d9(7]B [:lsؼ}ں̧AQʰߣ-e>91 `{`;Խ懇gfXrXwgv51ֲP"#ugR4[n+vMl k6Kk.#zڴTڌx؎"f ݾ:ZXY5TwrAeqܷXOxUhwS}ԄfkOc!?p*ҬW겆fEH88 :D.-k}7l1]¬9| xSnAg>&fQP~;v<{]W-URo\`8T2ʣB@|t1 b㔊$g}a%T!$ϥr*qGw \`WXdGi-O=_M-2Ѫ@Ih{:c aM&.ғVQgUP# 6 슐bK?=zO0";TZ4T5҄6#KR5p9kL7 ]ΝZxx+?~T^$Jk3}SFb_[, %MNxX[OH~8R*8@ZB)Pu I]'$Qg.! "A>~4GC0bַb]uORZ9j8U:@MNHI ׽Oq9[:ul-c9XO+nx{< 0BN DINNyo}3/F e=Vv7F aXT-a(`R[[fTM^gŪB>Ҙ.6x*7rKcF_aF&9n,I$aK⹹иXʗmF;T֙z־<юސzQ94BU],ndF3J2@R 0 b2uƓ̽ UnlXZ@=vЀiXDdP 1VxW]c8&YkjI* ][T:,9/gB.pZUY“;}YR!VRAmZizjӧϓfY%2,9t3 % z7y+v X.s\Ұ,78"f2FKe3e JCJՕa8TDdJDg}-fhgtm‘?:pdJ*GF#9j_h7{7*n:^J+AIIjBFǃC> se\~S9ݙANt<"ոIu?O=œQ;SFNQh2"vW}evTWU*S@U8eۙmǴlb |:: &6 Ɍpc2thU7F^uMdr)a(tXH׼htI6D1Q/;q cp! flI ī\Nv]k*f@ZWN$ $|ha1[hB4r[hN- :wьLvʨY;f7{cY+wĚlf' x(M%Gqqg>IF{Eښ ˦c_ځ/;ĺ7Tf-L6 4m YumW)T3Aݨn`Y.|TͭV'M3ͬյѬfI:;۹A} #+kõu{旹i@Y}hPOq7+ N& xY[o6~ׯԇ@j% "˥ ФumsHEI٢naHG|ߡxx4G葈r6r{.",!eӑɻ_3_gh&a>]wNOџ_~BIAygW;L-Ի}5-|9P;`Mn$ <hXPzf3L?3 ߩ) 3*{-RvHova<#8}m%5Zlxp~}wf?wyy/fH弃o#ge [?lJ>wũVTCcw.yFx0 90 0{ z(p\>?F|#t,q*Ixп!zOʺ 7E]=K,1͆H?) $,C_gHiMN9+HӢRCD9+# DDqcka=q_0qFQВi }J)ŀl]Q5%AI$#ArFPhh #hBfJDL0;M#ܿ[e!$Fv T(]zwtI .*K]L`뽛HA I %qD-3VaDXIۙ tZ/[ߝJJ׷nZyBog4"S0l1Y$Xᾭa"ut&6DZU[Oeܩ$AñhXq6Xt b3o8PSWjeR~yltX:*cYvhږmPz'A+f mƂ|P*, Z vTLvb"'Ck+5#O@a3)R^K|"1",p#8n/fmݟlÖ2m\E4ϵhoM cn1MI~toTpEH&7`8?FA+}PCzrt0r֪0VKV1pp񱾻%f5IaN-QUT]j.-(f˓%:>.k/9lK \'BE}]L1-njƎ6Op!xZR9}:-[L%ڐTv(yF[$ J߷u1<*FjZGƯniFDb? h8db+rdχ3 oߜyuO?o(@WQ_ٻ-gk)Dz享j%lN?R˞fϹ3 D>o$8AEH<_cW9c., 7 _,hTf ]=kzO„Ys_:gZKU/zvp>98?;kK/{x]R3.CL|9fw(aaH$gi0p( %_€ 0M,2L 7. N46ё3%# [dr DQf)-ȭOR ˎt(0L9 v#$hhp$sEEЂސxdqZfxMqce:xY$AW붙2@aR.z@+,gHk!q i* )}̀2YХRPGR[FW[p ܐYi~`ň(<$xΉ&T\_d1`/}AHʤUp)#"c$℃*,Ѿ+-;|mjm,x1u\#jkzxj Aw1!CBF#05Z !C04&>%dZy\K>(V' ;lv-CN~1HpyދTua$wϩbw٧ViNW0,[]R):wgJ*} SgW ;~5zAo29NݖɳܲPK ޡ`prn-'Es|R4v))\.}ר؅W& 39n:~8;Kd R-T';z T৩6hNN3Fa8!(\A}4J$MB}` F,CŬC`40(}]+I!DH^^Y;hq.S߰7$TpT'4IAa{H_5IkcZmAݧ2Sᡸ Z-ެӔy^7bpXx77"itj{uo 5b]kbZ }zV+t|T#+{b Q8.TõHBz)NLHѯg0s[ .c @+XA5!kl4/"Uak!]XڪkLPV<,K|͎QY [i К*%9Hb)Z,Bn9{psvqAFoHMԑ 3%Ҟz:قi2R1٪#b4]j|7=gKC*_'4;nE4n&4 PΘ*O:K~ k,m,HE գ%>}BvwŌz?Ѱkjʣ%á姺ZyÃ:@e)ζF{]c6cB&R9 C*۱<,="B?:4r\N}ouJgw6Ur2y+\##QYM" ":E :'i2xT/J/W/)LK bp`'LcaF]f*^%SR42.'iB#8dIv4JEAC%PIJzJ v0thJ¨&w^JCN]ԇUK:E*Vz'Q̚,4:sjf2 RlgLKcչ)J+jYnՀ՗YNR\x$|ڤF3Jc!@aH aWw -@WFYܨC5Ƽ,j^UaxQe[)K^ L{l)ۂ!mz-}{Tw( !̢&YCk)%ymw]45rDgUM!Fޅ;)E Ӛ\0B8 C",I2)L8o'U u@kP?+,3A7, QC]v$4rBa/4{ ;vv:0w|#R6nzq/5 A#314(1Umt$FB5 X'˘ihscT_%}uH^= ̂T,RpTm=M&J +'JL>5DTS-t5+'-W-],[WњPwHt[vO`Kv%i=MU:[/tV7" xyk.TjherGIN]&ktK?D|^), Ok vvQ#@xZmS8_s?δ10wC;@9h)'FW2)Ջm-2C">U K#}dN(Y_};ߦ@!7\?G{/=MwW;΢9{^6xs8lzM_r8ps$$8/f|^`$O{F'A3KF$8ل' e}BW9);Ar~8Nx糊I=;<;|~8+?>C<])wpxL<)O0pv}qrv )fwiEuLV$')D1Zb{68EQ#F4{B)oc:1:`YI lL̙?/%8<1 |e%seupIiGP,NgkؗIa t2KX4!R3)lVӢj #i+}2֘N FWJO_R{FS&<;7o%xh#Xl)3L( I8{wsU7K ZIhc0C"CD1d. "׃r b8JCKē5sx([\_~e8|Krh#%؞؃r(dx%Nq>結QAǖ>&d9ح8Ү_ỄJ'ь#1iXIA ׇVniL^GXnG4HE9",#Z+E9[at+I.E&+~ Õk;T#lG#<hVՉG=b JJ3Rj xVmOH_1g>J4A=U (\SٵYۉ$\Cس3<̲y 39] U$lhxY/Oӿ&#}O\ku1qzs >!:3].β(=sO&KτU'YDnƼ}3Ng2 z^ '@-W-/g7P3|~?{U.e,ֹgBAϡg~r5Tg${n}V2K3/ .GsnovOOߕC=M_{FݮY<"s+J Kvt3ڨR \({qZY7*b&|%R@PGPp S>$*! 3J7*AQ"jan$nD吅W|Y+2+qhE۬ gE»וRD3jYSs,ł'tTU^ܔ5|ZkP *޶0g!鋟X7XZK\=ki~^\_ |7!>RD 1ZΨflh4 U10kLWhK9Pެg:1^uRd!3qEp2ܐj&sx]\r2[`R8$(*_3ttPzl Euk*6nʝvmc6YIt#Ns̵l{5t'nlN.ͩ 6M%@nou<[g&[g.NΓ-{fO ϟ-Ibtm\YlXXŭKZ为#Plys +SZ gxVr0}WC,0 fRҐ.^D(Adڬ+lBcIc1b ia#<&zuqa[+z0,UuQl AZ絛dbc)⼦eTE"|^ǽpnb(igPM6"Jhؤ٩yP%!ui<´v8j}s,S+N=TD MuMeo&inlfsp<QcoQ5 ۄ LOC? G:%#V?oP"7)T bt޺T7Zwj w0M!ήƔ*nʚv5dMsE3NF3K sXK\vuybOxl6GM"-xWM.d-cqd ֛IBfF*&1$D,]C  %kkl8]PYAI2NWf4!!=@^_c628S&2 Y9'&4.9= sP:z*1ko|؜erFa~FόKIB1aYG ڮH0ь@rI2%K0g~X愦pVvk==EID̒asfų*Qg5CyRDSDW[K"_rT[ '!x&[Z3tQ:kdLɮĚ/ScֱPADG\h]Z LQ"'e;Q^[/U'}6E8NUlMh %0Jz޿$K.*$r: gsRJyԊJadp:D@an*!8\DYN`agV8K*ÀrغM{l5~O9Dbb=C²fKk엃xxdNXƼYJ1Me٠9|&fio3uG\F$&yU5.?E2A&mycQ0#`MUSYE0sG1Α+ W وtEHhܺm2h~j2ejm@q04g 0Z6"wfpߦs0߈y`!;Xwz8O"LqY{%?-ȩQQ)—v:B8홣1gѡ)ZdI~`6, <q39#17[w}E\IBS/Dx.=}Γ{t?[|f%_fÖ| .C5Y8Ab.q!0Mk:5LYLI2gjkK] qR@R2ah%R%+@]3 H_6P0ӛV(̜vfiTb sGw #2 @dՊ˧Gv{[\lgušǭ[ ׮ Vr\iL9总Eku5WxJJAɺdVi2Nt)W?DeMeeAe*ZM_M^CT h O*O^8vak zy Qwv6+#S5*vpK;:j5FGh;>kI؁ҋCP#,p1`z}QeԴ$HF;z*Ws"Z >0VNCyfׯ.bo1J+Zh`LրEYQъu+-RMLq* ~MR Zk-xԅ Bzv^uT8zMN繆zQaTE%"F7*BCj!66˭L\e OX;J 'PsNaR!5>ZrTA2v7Q$|P*Z[HfF;E'Z1݆}52 gt흱Q͏jl9mg\ms+L/Zj~)|?dg>9` \;jmzww p Ȣghhbl ˞6 ?'/_ EzE*UXxY[OH~5R HPB{D8w;"̌;gfq/kmIy4O:":^c|?\=s\>|BG0ߟ@_Y-aj.csv阆+xRN8Eg05t v`<f1sN?RiH ͌mS!UH9߹#buÕcF'_ %ixlx/_枠ɪ&d6@4]gggJIWJn3?LCc Vebt7\ntt{-i`cX>Az5 dˆ >fA!]ÓԆh%ed-D Wxj}}4evHzNy`[XBduGqwRX9_85 !yV?l K|JVY,lޞȰ䧖䓈hOwaIbz YUɅҙGs\ `odܛ0ΒwTr6x[mo6_,k'Mw:* PoVS@[,'(o"(w6( e:F$ˣ49$4 &oЊ߾r|?:_>^8@hNoxݎ'4[/1#͏94<i/F4&ӟ~NӐSx=+s" ϶ϼwe#Foifgh_Y .*_3kyIȣO!Fdp=ŧOGG`2LSR0|H\F0cû'/SK@dY/ s)A{[(>,9O "\hO2$9 bPMd\!QbL|`qB  ozU]|pƨt=t g`n&%ͱ{˪Z B@! i 4OjqvE7A3<[n*1)$2壽8"sM .;,s; D|t+ VuiV<v ;ˈ'"bW ?`ACr~ш^tR-v2Q_+DLv.ZS.^ULJ70n7`ф׻kڶFg]"n[!?B4ynr:kقtYV[J>r/t aJP0%6)l%5*Śa{oP.\aWEXS֞e%E\$$?#9֤bRua|v`O3wax/MIbUDsU6D!6@-eRgGּhyͥz2sPcՔ:L~(5d;xvזGTO1Av>reܚ^{\~&ԅraϥr؁ԕ<]p!T!Rd  !L c#vY&m"B>G`Kɒ22eYFsXКf{ ii} vX+"퇊W0p矝t4׫-MS,5JhX;_F(^K_{)/54ƪAԖZ:Kv@ sw㿺z20坼#}|>rڋ)47vpQj?`a^]/t bBM>A?MsBMO:v X90Jܦ:ΦP v?! b ⁃ b`?`?uɒT6m1rCI)&#σ3{S9[y T;zES##VyYSAKbWLlԥ݄A[;%oV?+n\$<+n~'iU)2hxN#YOK,:X  xh ~G# f~Q9`S5^7&Fm#hZF˪OMX*(kҲ6UZd \qvݮؔD\-tL[`7gd6쵢"u1lCl5fLv#t*x@V$(pTy; z+4Iʎm"'+'#SN 聱1hX^\*?6'"c.şݑ8Ҙ#mP@\.-UGId5#2 +UD57@۶M+҆[%(E ҵuwBUQ0՞y̦J;bn54pUߪ Ck}a0mo;׆C£; J;z yRo]z[݉ʽ81|,3@ K*]בY>aF:\ND|3 }@1 ze2fO^|Dg&RnH5{91j,p-Fe;_2-#4U2SC͒,{mIm6Z%m8"\:C ˦9TY v(=}:EoeMvN[ 3Y4κF ex:487K=NCC*G+IUHAB|MWf/bl3ȱ bd]i~Ӳ遅y0A48ì4^j%EP^./ὼ'vA,F wUtC9q?Ut:.N8rzHk$.78 eqF{5ژ>`Mt&wVSڟc[Oþ|TBF~Zt΋NuETm4X-yOEl "J4YApEfo+"ׂUTYfa cKBE%Srftܢ.D j"E5l&,(FN}HԔ R.dBu7mS6&`(8g%DH"oH-P5m !+b*R~C!(=_hlDT TwEF7>߲SZZt7a1APcFg\=P®7U!U~w)Y sk;MeY9&8,@𪄁 8NaHDC0}Bo#BIrQ!c ci;l-`yͅARҰ3|:@ji!G _Hg]h~Sv֭P~A&T^ d`NU\1wO!F #xSSUHM ;WzOFO+ '8@7 i){}E4?6vY&*te\8Y IoE:%ga]Ӽc-^~j::G5vi9ӛoVbRx\o8_s8ݦCx6ni7SAKV|7,JIt93qrƞm[RYY)2͊xKoc|48G+ ?ӳo@W:ƨN6HwTz Y\-DAus3.NJdJQQ%?]?qPlE&K\̣a:W:.6 I%ȰVveprWY|vi0+Ÿ>VfRZ$Q ߱yX0/r,\gR,Y9,Jvb(*׷{@q;тrq_ S&A9BKI HN\q` pVW6@,k0}5E1~a矮g`FV.嫒VM {<|w&z_ҏ4{2k5&vv<"<䗇v}eVտiB!..La.J,:Ld!E5.QIg+AiS$ůV*QܐӂƸKZ*<Q +U8OcЖpLEQS*yU{׵WBsm丅=_6xyR >]BߞХx3);0ܡ2Z.Na[e *㞖a2Y"ߗ>m23U|,=.p}zE?<ڪ \w|_dV*%|m`⭾/]c+ .-~]w$pgG sXQ$ωHxe5Ai"vGe-Tt-5pP-s;51rJ& wp5CUњ{)ժ`D1TN54bS*%63)$mNx -9"$ U5/v; =F]HOdFxpԷw[.,6{\Y[==vq4JkbiT *UҲ,..ƭmFS=[(.Y|=L֠h2[~(pܟўlW=58tϻ)/h׷ ""(YT+JxZmo6_4 64/]K>Ddѓ(;E(JlɆ2/wh>,biFh2'!H2s6}ktݟh`w.OW]}@ ݲ?>=3D[dQ(]#)Ŷ^uCMRwsN_ZS:fH2Q'ӓ_:k %:>OK˺zB}E`= N]aYƱ/D4ri.&3郵VNZ:< vkDPy=xP|'ĶE ;_y_W8KBo juC#st*Ӂ~검!{n|3 }]>y\>_eb0bs0bc? &_H4l(c_'4_It߈EHrԃ iLc4a^oR)=;89x毝Glwty: NNxWo)pF”|gtGgyw~;-#Xx10 e$'F%Wt࿏$ g{>YX G`!rU=>V:Otv~x /|B/BmU d$x`nxIm|c7^(/4e LLȓAyӁlzWt*_W""jn, b-Q0$\qp4 {ϋ0  O (( R9 [?6Lj %x "#4#R* ;3+P1MBXr#=~++4az<' a4Kt)Fi0;ONy{UuJbܑsp $H> NUg[MK]=vPLU.haJoY&w7Se eCG#|TtF#גʰ"#`UR:4# hpdWc{F_) /t.#STT>HB !gp#fj.sw a}) R˩Bi[6@B7aT0ULtthIgn2q J!A,ڎD-4''+&7N3Q] uś@e$I;VfmL&Zfej $ b`R~Jfsz}Ԉ:R"0O]kPxOő t$%D&Ĕe(Z Z 0FS\q!ƒd34Nu&]@ 9 MDm TJ% yn)p_3ՂKjPE$:,Iz +$qZo9*/oӯvfC^MH4 mXsg\! +ZZ ~xVr0}WC,0 eI3 )iHG/{"[YLW@ d X9׶}v14" y6kVD4Ӷޏ﨏 ۯ]T9wqoC)BObܿ@ʤ|>u)KMTX+MɈPLJ %y7γǎ诐mv*r xwSo̓PS-1 ԯXg\x4˺_tt)z4k֟׬VϹf㥚*y):fZUGظtۦ䉉.zQ ;!Ɛ(F#K J QIef`Z'o3: u$`f౮V.-}rc H|y].CCYBayI6jp2Q% Z.hg<@4 ?Od'a^]@ J4Vl{j,+fD(z!`p?7; Tl&WFKI@d?(pbp НLZn\zؒ#QG 0: ee@\YM p# ^9Bm{*A-fA@J p%,Ci5Rz,>H$cd<@ x SkdAӅ 2ٛJOƲ=Y^я5Iދ8@̼'ݒ\w#R#x0>D8 V_I>E|i?EOH"CysA VVGp΁{6|ʉ1=yItǯ]r%c7G guCl&Bn"ҩ9HVTwp!K\|W1,#SOgAUk5b.)q%1W#h3 =y)l"!; 5H{ ,v3"X)g~Qѧ=ѴYYVqQxRugY_YgP<*6v UP=~Q =ϵ Њ#mS w϶t} *٭g(pny|DV4{:^;p_nғ,EN#Lؑ= Ñǫ R1np2Vw`xgY,rrI')LoN @Mn7iNQ$_hK.R`YGY _Aݤ3Zt-ΰ<1aaIҔuqK)yRVevT>J¸z5TM TM]+r*DU-Js1s&5liU[QVjkcZۖ6k6AkPI}l?9/T)9t K팼N8 Djx|웊cMCtXHԒ.:X&B }X$V jZmlVH頉:Ve0Q[XRh%]/L4qFJ&Hmc%AZiE&xD/l,J3ic&gʤ~{x!5Ri$yO2m˸Pٮ0ԤeYɤeizժ_Z$UeR^ P{n.}faG,2]5ו.ak〪.{+t@s?0Tu[ߊ+wYVcS=5JsZٓqrTT*zNnv(qVsJu `K KRB]iyH}gGM:fZ驪+'e X[4'|xZmo6_46$N:M>HZeѐ8A(ْu(gۀy$;iq'.'>'XT_F,$z~rM^9ηkOߧw L@8|8,\;zO"gQr?_%٘VSmh) Ȑ4S!+ h(Oߙ`OG3}cF|$.i99Kr^O">'ƾ'GѪg)K^ o/o⵵Wm9T{tkXuFN.uU*#J>\\Xd#*7ehKCN*KIBL44Bl` PhH.%D,&ta_k I^nA{I%}FƋo(Yj^1| rf]7 t9\&J/㰺vt 0&.p Wa hU6Rڮ]~+ٓՈquK!J1C覞a0  g7 #'e%tVіBAl)l8)JN(xAiT-7[8 ',Wl+úψ̶"qtQDJGoz`zy>٧38?d X\[+@t ~ET}VPk[fc݇7v>Cs t\J˼x恖&CޔжaƞN7,f(*lX(-rViChZGNj4b8/A7o, :CLCt9 eajX|)Ӑh9-ՒbT0&εSVh7[ )r$3 Vm둭VfKn :j4H-UX>a 8'~im.[^[.\1`ľ9/C8G=V"LlˊyvQeECK, AQS&s eB6z׃z]$P@#j$寔?ghSn7vX 7a?u+$^GZֽ6e#&ՆTbLnDp^ (~'E{bojnGyh_b7$HTZ& (I9ʯSe^L*<]45S6k@XQ 'fv30k!53Uuƶ(2}[{oM];j7C5ٸfv[2w,$-w%sMkNc_d݇nH.Z·z^zX[ ovy?Yakې5#]US mMT6;|2V(VPM\o&DO鷓'%{ޙ]OUr$&(ABe =-ba*fi亝U!чF-EJ9u~γf NTÀֺ'q*iIb n:Q`¾ֹoxǒnOTY(bW6ڕ.]Cjʳ\l.}9ɰsx( |JV΋{`}lOyϺBPZ[2Ym :Fc bQ1ZqdUNKEO.Vx͞%¶x@]BKX:=l8${X89zlCru"HPhV^mY3Oj))&TRyBR;eIc&gYiQWD[bg 1P4Yeg"YXEc{gx3c 5眹6,G*s&xm.Pi-C߉B]xXQo6~ׯ@bٵM6@nO$Q$*vWHQ$K,@l;~㑴r#u&"瘲LWcؿ\q?A^DgiYW+[GS_X8\.;~skZ(=hq1ޔy\vDx\[s۶~ׯQ8S;s:̎/I:9)C]M,n$ZN3X `wOnR hp$[tOh.ZSůחU|9 +_n~E0DdA݇ x||>ObFyffcpQ LߝM]Qqe @ݱyCGo"f:-nbdokW^<͋S4OٷGkQqы'߿E?86(ܧx3 փ"D<*m-҈)(p>Nys Ϸ1͹g4?cP $/ِMؓr//laeŸTvk~-(|P/T ?G%159Kf 41pz+0eo6^ ^/RdN=.ʾ` u0{ik%^vABIsz˜#*Bht&))+ѰU~{E `)Pc)>bZ ωhgKao.K`-%84D臐GON/<YNijʷZ#Zxϛv~$b& vϪZN?.HtKDyx} 48w vsAS/>ZHB/(#Caj_?Ɯ06(DÓ7J+3pT'*Bȭ{Sp[I(!*&=jyEa=}DnHldttRwO6KfinWl\vj~䒷Γ;.< V;ۯЍrmجlSavca |,#_m > Q?>{޷V|k| 0+"yWiԬy>oՅz;Igi<71XŧXM?$TJUcs,)R YI1M}z;~;~:!~L(xܙ'LKc͈2ށ͠ T)^:'iϥf慓/ᗓ۳۳Ѹz;׻h4{%8WBQ |̅끽|hF{3? -R ,4\@Қ0×mui˵I = Esr ]Wqp+8Ec-\G~J|[#q{n`NI`*lց-7 J`Ă0C9qcBu͈(2KQMEY@峹*^lط۔0nD\墐E;*H{6`_U|<" \bgN,_K6$1}1 94X]u]QUHw*&)YDP  RDuH%ֆN)5ۋSvG~oj.Tܜl,ln;y=ɦr+c߼~Q˷#o/oN +_Z gxVr0}WC,0 fRҐ.^D< {d ̄h˹kcE ͩHCw͆U7=kfrz/dSgFQBe [gYA鯐.lv*%7|\ǻ ~g0:PC㌋r44RZ1z0[6Ϲe륖 ^]+Esl\Tu썆]SD|Al({;WcQF %( B$x9ԉ$gC= )l*WC'<@pW`gNr4':%hT pu9J$B 9 SOSi{ Im驔YUuQl5AJ絛dmbSUFT^ǽnr,hPI6" .'H٩yP>ê4FN{dʞ,V%G@29|mkt-|3Isc5-!sXz JCd 2m [8ST[FS}Nn1՘REMkWC*+Q9 (2/y/̵wc-p) ?s>,PZ~e$!K2] QQ|a|)xZmo6_4 6NMҤ)}2hʢ+Qq}7@h*Qǻ={kGB@$YpxG$D~>` xVmo0_qdIni'Жu$66 T98r+svu-P|ϝc/UjǠJ]oy<=x~ 9R7`{#ƆWC PD3dl;fYkmY7fWaWLKܦjǓ\ I(h:)Yya( 6P c 1QRO'米Br0x'uqm56F=Ycѷ(;[gY [AE##udoH?H,vE kIXCg'mam ߗΆ} @<:rjIiDH2DZr;H :UXGvi Z4ϥ_ $STzň4, OP3[(E|dDUy$;uӏV-3I ׭ H/~v{_&7_%v^8ΧL'7W0@Xxq.z{K֧l!s9Di|- ,$.Ëk64?](`497J#{FGgϋY+/:ԃѐƧhW}ӫK/zv|y~|y }-_v83̱8`{ niHPZdE"^0$5ZIr8!h?B:!:g8qLhbw|FpA3X;C$=N{߭B)v<uȗ$ Y$ρ}20D>f$ČQP&Y/ .j(i _qL'%cIQx4߽Qk( c\dX.6 ^;{(c}1V%^U쾎[R{z!MHf ]MP"$;D ÑG~j qRK4[0s;h: a:m,N= Vw#L^yxnu,=yq #OP#:((|u[`dI7o 3xB„U[l֌^7&`KRp@dj.hcsU TAtM#^sUvsۘw,Mߔ0[!vb6Y1^Bde%2y\%:4 9h{J\Qyu!ƈk?\SCPvTbǍs2w|ᕠY|4;VsA!vF[`wm>SXUZ Sg>w'JvTMBQOO  Zb4SRA>W My#PoK4YCQO64 Cb01|C-װȸ(M[ƏY*ZR*"K-I[fveFFkip]Tggu4XfDQѯTS )?x6XDg8X,ZY!&fײ֞Psg]w'zOC J,h[G;V4GL<06G?ԭihtDѴ'فm|4Q+t ]N<';{C#לh7Ǻw:|~nJӘ0r@mV@Y}jk;؇w…S;4YMd]>UYsPI&nikáːyHaz?oɳF<؊q[7#g 6bڼ|ZoH6{h8HԶEWݥÔ*mjΦ87]7d8ժinjz̬W -H$q_g_B)[$ךm3ܘ}&(X;vax*[4swE+N>P,(L BDO,k<˕P"cېL#,55AHH^(l++(Qee)_ S2)44$>+NE% 1Ff;6@4xW Gź҆DTx$* d(Mǵ 55ժ6W)_b6z չ bnCXgc|I%}ه(;Κz* njL=e \jY9<,9I*SZ#Y_d64“Rɒn=+#? b$ xVn@}WLP@qD%7}B6^6Kq]0 P"ٙ3sֶs4q.K6x(vk9Z/~"\]^)c?*Z] nQ!2[!|>/+E=i˖3S 08l:!#rگǹTU_ɧET Ζ3Å2XX$P ?3։"CO"H:ŞY/yiMQpT4Xǃ=+=KZSY=SoykfV+l8&:vF9Ვ.\yL]+$ &ӈOx' NC`c`NRqF"h"O5bTۓ1','țͶZ: 5죭<3&aeA$ȽAMc[12cviǰuvDH.<-ք?;QLq00$\-vď&)@ G&"D[FTA1:E }ݫv 57LSBn'TfUv1GpOV*7J_c%{ZsbҬ)-X^..RF*H\;ר4 ZoQa,0r" Dųz9392 N JmF,'Ę^bhyOsB(Ŧ>f^8p #cJxT[o0~ϯ8Kxj  B*e l$^8OJQcB=[ɲ}^= Rt}eSYf{*7ϳr$ˇ :}pi^[42Ac!8m2aJK{)dQ %* n f,d -O>3.!('iM&tE=·FhbEܱyy^`9,cx򷭑#]E= }1ݮSy!;'dr*E!t+! w$*:YTJD(tI׆#X0@栢$x&rGc`4q’k`;JÅ 7c8; ~dECd@Vx]{[Z< :R. Ue08 sn[wG t ,wFknٜwl1zazi]?"pp.3{}}(zOޛr,G\ӋxtW yBmoDƋ锰F8|9.ipqߔEbN>Jk4PXhH83;F?‹ .WWOgxóL샋~_ 9W{BtQq7Lǟ Aq:OHJ2Y1 s4 1!Fq73/ 9kCy4s$#c 3^pODY(Ȉ X`r&X 1p +}+z`㷕"J)u(]9]-Z qqf@xXmO8_1>+I-S ^u),+Q-'n4Vom&tHEdfyq||ezx dSPe@ txVmo0_qK?CmeTZ}By1#cJ}g'J pw{.{r7M9iӮ8eXQ^gZηǰ BY \UۄtF:۳۳\?e}=-o}j޲\㒜`u=ݦ̆N.t?*{򏎖;V_6eB5,7DHcЛ^ 3)~@AgІ<LxVM3Q <b-zSt]cnZFS_TRN8>{+2)~UO)/iR.Tv\ ?FN(26Xĉ'F:rdt.ʧH@q.XJK/Upп/.NhۯVjjj]k ǝ~%'-Ú%PO]%.| TH̉3H9$yg<ӚbqQJ&BB\ eL{wT4¤ sܶ3&.%Inj`J|:%;#u(1_fM(qń voB޶ø(Ha徘 >);I=T$|jC[pNg0bV9cDs>ק kaӰiyI橇d)!+=\YכaD03G,n 5TQr-\QF"*tlFa4W<3@us`%9ϜNMZu@)LD N_?^!* Yf Di<ҼUTa+mR߶w:{s|_cɻ !> 1!Wt7XCȆMH#KIWQ#UNuDn>]gpU:P ^UϠWmgknկ\2BL$2E1ui/+f!b~!wuNۀfluxy lIk#j7Ao8wٱ V+&2N_T;6pkRS:2hEHo3Ov5ɎΦ2 giq|LB+m5R(_pVFM> 0VrZ g_B0b:;W:n@憧\l,ETVHK$dA*];,<=hY6t f^:}&J^tk%ǰ2O5- ϩ!3O8y ;UHj?5ִ4>{4"2ce; ,ÃaY.< EMer%{lIm+A_'Y>ɯT*^ÒP7|LF.͊}A^f 鑊+?!po=K-)^J vc" Qzm~ӛ'wC\ G^@me臁+Βo|*ȅ 1_h$DM/h0Zzh6fkrX??M5])xd29?a[ql+cct;__My/㦇5v9 H@ ! p%rGPjEk-i@zq-:E"H e\"c Ϲe(7v_ɍ ) }NI ;)Wڋ1s[0Em,\G5i,G)N0|. sxhYIHC_hNϼ╂#H#*x^B>$$v9]2}qT:yP<$ J:` l_e}a)(PVD]!%[*@N OD!IĖ68s1en"[~TNA@_HRQR'I@KĂlNP , :KU39*M.#نWƦNXpufuWޝ6UCm/pJ$m aLwOCO䙑V.dP0buB,s\ &kjmW*-_ۯnaMتjKm TyqG+jK頠qe! 7vb*{. yZ@XwdZlP8E&4{z#bqbo=jV~RHxsI]xePҧﭶ( qy*V&ZJZXش긎aUof_F#pT5uC7^I ٣wxjf*ˌ'.MNW׵na5tz/"J *iX 4xV[O@~8[D;@vu Kdzm1=3-RKΜM[.)p64!O'v;j_F)^Am!Q~p$!ǃUv fά9!3rQ:\LMٴBer[WSNJu)b%Nս" {D< wg:k Owho(v ~{֣eE x[ *.lzVVݞzlSoy Nݮr8.)GD]DfIXPxƛGͨa3I *b03~t c!Aoz) &$\)kjQxDIꪐDP!V N*ґ}$xxٛMWQD쏷l^ {@hk=;K꿮l͆n.*햅0")ZF"7e 2]g*'_ |SM5O~t%@ YQl:_-cs?$P`A^Wb|n+r1WYa֊Yfe~[X]KVݧ.Ieg۴ UKNoĿHb41 }#]vq1eQ//%.Xj ߰͘2zؖ F*H)@M%68l7h{k-46gג%sy -x1ˎHٕd{Yq^q~/II̋_<ڙO'}0<#לj-\iL\\Gut}e<#zyvb Y~۱oV~гܕg]0 UL$KHDE" bq!wX1A~+9T@3ARt =WB bOe6CKZ{uBƞ(M-܂V;yy9rUm<ߝu|.}}E-A==ṕ ]pNCӄ{.< @.$f2iy 5R!SO|nmm! [6?#iJvJvoIC%xIT.ōY"YEqtDΗT,6>~%J!1˦dnՅJF]%m1_,|ae "f WkXsRV`(5Fk dwmm6ڡ$=PJjR4+mƴ߄Vg]Cm蚈'Q7 tM~,&rIb:ǁ7 ~-e C}sE̺~诂,jbꘛ C:`bХZ4-1]k]QVG"99]DrKe*?1bl'% 77kjmx]koF_U>$6S+Epb{Nv?9Hb{>u-ڐwșsPu]@Ei(l~z_srŗw ۇOf_>fw$jLxY[O8~ϯf)CѮ dԡ03d'&&+=v[I"}'=S2F%'hl#,ޟGruz_}zv矃SǙз/i ߵv#!VG4z:1pnge_˽TٌBB4)܈n1OFgo8[䚬XJ/_pƄNjx,|A?,?s|_p%SD9V%_},fc=~ZV~K/o\x`UITfOojv6{xx8y8;ɋ챞u}[wl99^-[J-\>-%Y{dQVO<~ :~!>l k$A;i^ )d:WwOW<=}s+k\͛zhu,fJE|>|?4t,ޅJd_Nn SCYڢ`^DiX}^^ O $E'ؾ^l4_ip^Gb}P:p墊 ᭏1XЍNLz[g,钧.9YaP*oiDW,KϚd̖'&rt)v["/d'/}Z~na^vpm;.Q|dI[[ 0}}H6%u~ + 3ǗX-gp.]/X t`zُ[?n"ܕl 7;!2N Q unE>oU'"{OX&tFw !hor_J 6d3,iEȕ\Tg\ŮQ-৬B}flira9vlVo$[5o u3^-mwDҴs; 薾gaEae +؇xM-6{ cmTz|rwAQ) ujeGIl0L釱IF 6(e{nAqQ!6LUyAV\>q%clLF | y%(YdOO G#U8bF5꙾$LKI0+Kgq&G(GB%RC>#sp9kq$t$s!]` \> KBZVW:/_Q·5C 1#ւh|H3.Y[Ѹq%{bC8Q*)/-lM`Xdx vcōx]NKE9$j0ΨN+& %*wN}EաʷdwX4w/j7kyi"\A"P,S^AA4 <"[j2o"PN*\*ȍXSt{̏)14Œ kZNTԜZcN,^E`L֩@9<4lUqLq0f.`ˁiQs&: |α9(B܈53ψ"TP:TjH8Q\r&F87Źt瞻(|]{"uQl306լ& :20j*SN ~*hKp]KLb˃wus>]WP u!w9!RP" @Mʆ o5 T w>(S~Bn!=BX5 ʳ*L$e#61 @B`L*y kE^'.2LIL&d5 fF14[W =.JՄZ6aPFc$|ӑ6hy5.ohzqx ʬ`RBIsN*4f-؄L݂cLch6*Ʉ TN:jZFSVUZrѕu*&52=RB,a'U1d nJ68Z/qI6Ui B/R1t ĝTGn:䤅Y8 :kQ/2K&i~C=WNf[Stg"t}%|XbH }r_ym_")A,k"ԘGPU(@KZJ& C)4V*$X 2P( LRG[gx۱@qIIC"qSD _!UxdZrٰb*{SÃ_)N1X!q'_00>JOx^#8#)K~al"l6othѠo4 Ь: &mP97x[[o6}܇j% "e-tAS@KE EH](R(*Q$9SfW1xDih78xClyxV]o0}ϯKia6B*VvO(x 12w(en-s.]q6$!O&M{Ƈcj:?߃S.OP8$&3a."_ R!YV!'di.ˆsS*,j:F݈y!(bFלuHJrŤK˝{,7)IXF|dSONxҀ2BEA:X1YUaMQqmպ#x/ά,ifzgZz,d$cUD]iVbfY'PxZ>qrgp3Y̦,QPɃ s izK`mU=CKbs\MfJRW/‡U`jz]Ė#M`!nQoj [ОoHߛ;@hzt(f~1b.vE,ӴGLN=,CH(piш'\F݃*k&'aj ;X1`j6J޻PBs9%ͷFW&oP\㪄۩6>->,GNKO660FPѬ\W1K _P +S;NG ^CJ0blX=E}%R 1}'wPb7Nn<78){C~ ^'AI5rW*,MbN8ѹ9f}rXz׏O[y @7$yg_vF;KBև4yڟt^{l=֭6LBX̟- H|Dۧˋ O0 cμ,#//П9 )$2"}]t%`W~(Zch?h18.x5=??Gwg=88sj{&?ٯvwYh̼RV?ј|>->3gT6fktM@ZhBW Kʼn a{Za`P@@V M(5{+scB|CPFgs"$g$%R4BW6)?&U31ed%8'jdY">$&/ڠ_&RS8P~y٪%+{J# }WOک#P}_}p[;.J"rwױ%&& 8B( ?S5Bc_9]fk%Z;C8= v Hˆ)J -gcr±qwZs%y s >/eh(C2P%RsuItU<sHb43C|FA|UG癿A,:-Zr@p@3(E, x) 5^HnSl~YFpQP>G)eEF`J77K )wDHejAp&v5Jf%Ӓt=g3C3F5WdT?@Jykrj[_~p_P+A73uXl Jx_vz纋X':&$z綵? M^硾 1Pb>4wlzmDTJ[om(%6fbi$$x8U5"4'{,Y'qQ5ZIYm)ueBDTڲEf+ơlȂq\wnO3^0*k'z񚊢oqJS~نRƍ~cTH7N*B[Q(u&2{OYj|U)+b eI j uVAQP'4v={UiʕyOƃNK@S ")eG,FN-9mCWѨQFI])umuZN@[rz6$ mډUdhbuYTK;ɤ/CoCܦZ6jEV'LmL{kgwOe4m"T$0"' "ѾOiZ_S0# $6Ia"vw(bYwF' ob"y#qHiX$z?+`6D n:xVmo0_qK?@5D+Vjj !F)ZڮsO'LHv)@<7}O~jl ~_t Rquz~ւ!ו!An~ zp$!~*DJMsg^q/rQ:,& UXմB|P\Ō2:MܹdNZrŤK2MՃE{XY:ēcԡ&Pֿ|"~֓eEex\X3u\8vn˫=+=KZkY}NVfV*)%99.Y,Q׃~iJLm8kgO7t)z" d KT`n 4Ơ'Ra4M=CS.b)Xb|SU!틄BL-G^zW#HQ>(̦[uzAΒ@ۛ+@hv}ݬtxܼ_FVGֽjquBI1jŠlS/e T$wODpj+9 kb'ab {1c$Jdm2 MAb[Q\ktjn51iTy!79=\Jyf1⅊:%FGLY](0Cl 4`rɗU2[}0=/WͶUNʐq7.B~^!8R!t5t CcZSТs='ճ?~Z?S &tF(B-Xjc.0QeY1,f3-up0 ./OSygwr{suojhtr%s`)V|i×q{.~8r54De,Q=BaH 3.@mJ{r"(B-̢9pmO1F c*&`_G"J5OE8:n>׆ ZZɇ샗l,#i6dgle t~*ݺBxnkxqw10|q(~$U|} =[s%Kj%@qQ.XBGAb/}0ӷ΄0SPda5V5BɂY# Ŝ1[ .E5?g &QP77o {`Gy 0W .uH"ByS;8fVR44%A" F!{"15V>Ұ*_h96G3C*eضBUϵ]5XIZ"zdƋPO-+vZ`Ll[:U qVm:ˤ FۙJN%Km4ʱBVS*xWzvu۠Wye#*T]i֮-Tj=f9k',t9d0#CcTMT$r8vȴD4ՙ'!/SO@i<6.vp46Xo4xXmOH_1g>JMНqh+z6MlFk^Tĉ<އE LȈ'gӳ%Q2?S5;[o?Po?w\*[%@u*ww_'XG8TC|/d@E*f>s1>rnC.T*$4f>!P n*Hd`WܱLYL >_kiNАp|d1sQڕW? \+Wqƞ=,'m8rXu-O aA%PV+|,s7by">se~2;/#"`~F<>Ҙ:t zq-5) {,&UY,x Y`<-IאLA|)UٵAy}6ׂ!^t;&R+苁6{&pCbep=j!-IF.ɼ-{>e1gt-Ӯ+rE%܂oO3rHݐzړx֒'l4]03/BZ},< L c A RʈSy*ӮN w͍ʊv)M4 34حT[R~EWVaCmumꀧCHoBV!M*g.VzX++?OtLN0@2{уO }ַOs XXq>xYmoHίأHIGwJ0Um5n)Z`m ,qf Ejo32~xdNLDb4^T̏0;7(pز:l"Pqj5X _X/ֳr*qd\s`&8 '?O8Cm+7D]濠{? j5|A tB"t*lc! Ae)^ʹzћj8\_Fng'ONN=)3ͷ6j5xggʶG4rlxV[O0~ϯ8 4mԨP!QF 9x8q;vRrJmss>' wo2 \B4|y;Ԍ6 ~@jlpV79oppFrpꭦL f(=&Ƣ4mX(\LdY S0HN9(8pr sk#X|5j'۳w5cz,mh [-XI!{^ڄDJm;p拏olhlm}+=o{lnm5v I5T3S!5W.hHq 'd*9l"ysr9?%+ ) v``,4ZT5hjxyZ~ҍI9`h>:ۄz6M5uZ3>]Qڧڟ5Zzջq,.W'^;j>j'0*+{C2+ nR| e\^\|=5릌3| z2!s%Q%- GrvjA-Xn1Ukkc!m{+ZhDBAmC_Nc3YmRY;AԼd&$V6"$xF܍֤"&xA9CIFA䉈;%UdOD)%9ח0k-=j8Ge> 쯤ϲ ',-DKBA CөC"KCg$·僋=*y|0*R0OݩqHz]=d?*-jYx5/SMN@/ɐ{u֚2$HT8v*c8O~?S3<:`^sCp~t!}i9،Zzw3\O#xXdsq&5Td'}2^\t:jp99Vyu S GDQp1~R`8O4=  A*^Hf\,Uܨ -վ]}ȧ$Ę&(uU6!H߽h0< _Mj% ̓}X[J\^f LQޛ$$Pn؆JǶ 5 8ꙘwqaB3)N϶|Gbcc*X^@X,b`aHʂaj8̩'Ӑyuavd |_Eu%$BΚnx< D#m%A+!B귲oՅcZ/n®\{I"={jUgK\cG}DbBuk,J^ZKN0]vp)344jr-)PkgpѢTUl2aŁOD2MWk=d Oa,uM"uS(^~UI,pLka-J:j;AOI放`(w^Ҫ9T 3<:(-ɲX۟LDs._$F]6d1Es V;WGؙQ~ E\&-m$6mG%%Kbsh{C9";Ez);T*zJ'iOR)RɴtR8 Hl(؞G/7pma6  Du &xWmo:_IkN4J{WV>UNlG{p. lH-ǎiɹu:6I Kfv.'ptdbxVko0_q~h (R骕'Ćx 12w턆`v W3!Ӧ[.4L;ף/!u..NP'&3շAε&{ZrJ![T=di˗31JQ?ZS׭]OL@٥+d%?w;WDc%)k,b,>I"m@Ob"F2a΃_F3U\ةZ^Ӌ++zsVY{i9;V^.㓜imZN]8d PN;Jd4Tw@$`$ d^H$ãMͮU5a@K+9^Uc #hE}L9efӉcNJΓ\6e@Ϣ{oнyi_=BOQѧYu͕>7ƬUgB3)9fl` sK- "z8Pg摖j/#_.]>`bZf2Y(.;\1(bFלn\Lu%b%^}Ãf*" u)OPf3>f ?cѲ <&.zZw Vtjr)S'oykV^/咜j6m%6uuQyx9"\ lKT`i 4Ơ' SL*ЕT:* ߋP'BWjqx)IIꪐDP ! _ͣs[+ґHC$٤iliu{Ԭcb +==߮HH 4ZOM.H` vV#-BZ- a",#S7%91O_ @EPʫ0@l=\1`f%ޙ.NAb\ӳ[rm JZM wӢ˩.Jo9sZzһ( c uK;1A1779ko %h11 Ym>Ki)ט>CPV~Jr6׆mޠ|O;Ei 3r W; N9b)~~t qxfxX[oF~8uBBԊ8^+4Jj 540Qd9o}b|JExxm6 hrk3_̏a>wxVmo0_qK?Ik W tUKMb-(qJYsaJ;ى{4 QĉTQӮ8eD4R\F~N}I-CG{ F׫~Jg ;}8 w:#MHd Bf3:*<(V<%5/lF@0/ZPP5[{\9xv#4oEBL%9r=7wO9<[FXoEfؗQbsH*nbYAir Y.)qIQ [njjC?P0Sk#r(d@Pd*F 2O W 29[<BKcWx S59VsL-Gp;dI2H:ŸiPfdY䣈vHBo1_e=weC>hk:xweIvsUo(uSh[mO7Ldt 'w&ɍc1h4Cqc-,*4Ә;؂[om%+bpWۣL>T.㲹qd)q*IF\"Z&_ h fyETDXgaaތ f*یdX XŗXeK?Rʾ>| po"_ےzN/,֍ezix (`ݩqK9X|>[u.&Ӄ4[4Oݓ)jS{Sd@zFNf(9g֚[ץRILS b=Z-jydq P'mxnI] \,\pLu%9B<FPhl(V&naζ[*z .Hb57͌NF3m숀n,W7Y|}-S%_*cFY, c>" 3z"6a9, jZGMX-Ъ Ԭ$kIeove)oՕ[+F*_/L["|}lݓs%0^k>x}3 ^ww*wFB߳gAm~C~ V fY-&ShoXy9r_`z.VN(niBcyf'{N^z[1^ѶZ|-oV Z6%ZE>IcT\-ͳŻ{F/?u\}?m118*K g"PЖpd{X!^UVK=[*Ta;bez&hls4*E%\ EdXkZ4:O!uRlks\,WH:%iΪR"P0h0{y,`1_0 lݠ@z)FEUieT8ؖ*wʔŃS(Ta>D^+ǬQQ֨5Kzܸoo:ûj^Nz3cߘ du; > BSp䔂 Al`k^`윕("[ Ң Fq|g7xQ ]Ve^ADפ1S),#.b>9f QPM%MbLYGf՜lU6 4`eEe@+|[e: *HX0K&q*ր+lT`>iKfX`l fuVrV@gUp;3b]coV@$ZtYk:\Un%]Pg<wN]=٢o{Fu6͉*wr2W*ɨNNCcӓҮ\[y7]^KV- FŊ>&&Qbg&JA Nb88+T1 ó"&+b?ĵ1#,ÐmA(8t] n]:A8J[j:{>]ƷE庴{XӰN<;U\8+|@ƿa!AEhS}͂VbC(\'$\^`?OdsO']+ >>7yr+AxZn8}Wp݇@k%-RGE@nSl)%*D /l[-5"g6G~x\G$iHxH '-[y79<jv޸?g{~w~B}fI3׽sVm]wۍwc,ݻGS73Xָ̛,"~q#Nԕ=iʞs<?s[&tǻU{!]dhO#yc;?gugR\N./ߣmGG˞=9x_WU*\@g7ewCc`g6#UB'UgF^9 bYHCJS6;k?z_'`#̺*oHO[^?-.јNes [`p@߇q;d%[Ѥ4 zh$dsmBz-\A"]d)"'goՠt{ڐ,pdЊv|X|Y'#8HpCvWaLlMP vE+!N.[Y  ^^{BxTo0~` h ?J:u&īI2;;:UՐB]9 OnVҔ*~+h y.T  ߌg?.Ɛ"/>ql_f3 F͑ykEzAn6dVeia8@Ѡj66PHR;ӳ+TZexgq.|~Do*.&QYr -{muv =8@Z -b>|1c;hMlkI q/\8eHL-Su0Yߌ8 &{^‏R"lp@Wp(:~Na؏OXT»㫳㫫X~oqמyߝSej8 JEr2a4L"pVd7U 8 bLIQ,\م 1P Ãx}`89KB_-l[VyBJ I<7(^0reD,ۍĩ #‡d @W ^<^O%=y:#]}Oؙ`[};3t@/\O!{E}!!=о 5{qn[4:O;586x͌Ѹ ||} xWSFb#>ie\`R2I?1',]"yU=I &M0۷wwO༹Ob"Ljunwu Uxn8;~ZΫѻۿ!z{>.ݎ+  S#c-!-inoؽa隲$+j-fb  J+(okYN*ww+tЗas DqVDR #蚟:jϬou*Zy?3fEGv:sfx?NǤ,U8Ԩ:s܆u7+mTR3wX@ fQ!uN 5xL-1$:kssKf"-Ȉg֛{Űn*|'b,c}&`($|܇kd%3rwiȕ#ț#dX='=E̳IkDS8Wi2Q*fQ(pe#IrN۔1[0: 4JF#-HZj!X+6&HvͰ`8]IOc3&hďg3Df@RWOp޸v{X[*|~Rzok^S`ni=8S-yKWzަ$;Sawa1 н*8n(B( ]AM=B%B+Cz2Ю-hp;OֻػOk]݈xo:K!<;[|/=),!й>7oz8W?D)VdM5|k-`?VM'2b[NV%m VoTj?Yǿ3Sty@K4$ t&"[X%r#{e4 ȥ]t4nnO#|Y|pxq{9)7p}4\\ rɰ- mit%Jdal 4pl bu ;qAtDdAb7L? Q QnU۶<)}M"P6.h5\V@+2#^Q? ")YޗJxaDeBeYݩ*QL倌 #@qX~7)Xϖ\R'_1까EڡĩtvT 6͟MaJ?}G:-}F8A<69 BZ11l 1l?M(R n`(xko8H8vq"ͣg&mvJm]%Q'qRovrađə9CzSG' OaБ.N+5?3ogw7lggl,}Gg{Rز`=xa}AB8W{M'K]<勩C̣$$p=S"X3I30xl|_r륧; xcv(6?g>,tTS)eoƗwhgf÷o!ǻB"C9=}:(gbբήO.NJF]6;/Ӊí$vxlapi0[!SkI0p/mSaH`IO'ʝj"pkEk{x]_6H=;;/<߿,"LxJY<6Cc>?a6| п5:>ז5}z"0 N=aYPҲV`u>`<Z/ʙܦ/OSg Icp#C`}4qR/L$mevF? /{-crRA M}MS媉 7fbQxRiu1]tT<;GTwu/W8-Nr-C,q̬dP&0FA$H-E K5 Jq,,Q<)aʼn%B"t pdBQl@+b|Q]hS WB- V:xxBO=>T؀B*E*>ET; [C ֞Z{&yx]BY6O'OK Vqt‘2gG9y["W]6.54nv ЄLPRYxeS\7],܅P/ u%aN _pF)u19ְHyRo{SSQعL2naWضFgO{o>yO~H}6$@!i?lRtebu b[O@ +BّR'h :0g@@LV<{g=WWiAU[&MZpQ*m`"jDj8i7m¡ ~ ^iUOnA\x躟ڣTuxvLIgz[*_j0{e ܋S(اw3#r`:Kh26q=\@h(b {*!Hr?ɨhMMXy1C1f5A H42iXu,a}Xu0>yQ+!j]W͂Z&+y\!ƽ y3ٲ;n57/[ 䏢Q0e| m{3S;}seeUN`Rh`>\y՞Ik'?i)]!C,v/0 q7fk"X7IVT[.-ɷކnȶ4K)O!jG7q=m̧<Hf¢!5V~"t@Fj<`yOL(U=JfP;ni{>~s^!% TYcl'6n ]b:B}ǤCJF~fjx:xJ N,xb$[,>W32R)CeKpUj 1 -U|P{b[u䪆z_A}ކ{2*[>xNBr!F t1eQvUh&>[ aheD ]4 anbLTok^橗w}Cg|ڽ!o(-A~Zq 3ƓJxRR8_`zR޲kw6۶Sjhqڍ']UdQbGxݥ.P;L=j7?$`n0Ug|`e_VU^ZV`MfDZ+`ۇ b \$#mm Ș"_"=³RfI<{RЮfMT-JWUf(a Z._tǵ@x(KҫUm4,-3? qG}oto.WfGӟ]E?/,uYwd3iJl5DJbI`(ٶB/$/+YQ& W8䑺G&(f, Zj3uȟj]{۸݊c]o "t9*Krx &c84%3qGOK@h*넉9NC$D|/&Zil\~rPj|w!vab:6jHcKC'F j0@p-xF#E 9A1c1-~U/S iɄʖ-:V'X,MH`_>@9bblqD<-* C"JKO EBzHU[̨Vy* '~AmCa*3cKHQZ-ɨcM=-k<T;W/ i8ђFNwk/ʊQY򒥝`X.|HR254TJ>}'J˓GMÈdI0vc6WNTdiq/suƍ*j6Z^]KJIBQ$]%)8 \5G\QB^H VJԭ7*6JлlR"Q6d, AH⡓JrŽ6x3o7].+Xͨ vwDi[:M&xY;cq`b$JAfkFj*) y7=u󱦷Th7XfCiU0qIh]ZT-v6fBܕ@;ѝ'6zՂƆ^~(D0v#PiuXTZƣBm9wm׀< 5p-6[9j P35JzKύoc)ywt6 ~ xVmOH_1>p'A Nz"iثnU7NL ޝgyvNwHU&vpXxY[o6~ׯԇc9M "˥-Фi!%*DΊ^$d6`GoV=4,H&o7hʁ˯ޟ}zxywwwW@/šYOTBUC͍6vfߓKyFY ;GgG'%*_ۖK-=H4 R!GDd8B t bHJGj1Jb3?(lHY;I$-+Խy)\ yƾ9V/ n ,҆6=9wNkr!.dYr$QxYE^kv[93Ԛث&GXEfmjV[7liB %([ 3ѢYp3\iV,B~|@F. sZ)a+ˎ7';T->}_\jr48FVEuG׽ ױJٮ ˙ֈ":D|bu@ɫB)׈I}%Mҹ"kpw<| gx*"IR%h)It;tk=jW[RZLmcO5<^nz˸)v>V>XRc3-DPw ,÷֒)<&c1*pg}>LP>n Z7zya1//;(bI. LG;}snᡬCK$vAeb iFցsP|C CfQH&Vam?hMJ`z\\WH+>H= {2nBИ \P0Fd[(?4\Yq`>:v\כ:(1 ;u}^B]ilThn'DQ}Lݦܔ_'H4z@Lf*KSS57$Qn1StX7ޏо/ݵ5%ظUm˴F1;A1VK1B1djjcܠj^YIxeto?bYW9L5=jا OE${' c} fAKxA-P.9<$NȭۺW3 jH*5r574vXmS谾Ų|:m"&͊%K4YTQRZ1m-7,O=3IWZ]I/5꼗{p}˽9~y`l۾Mvخpw8ZegK[:|PPfw*"NroTՁBC[545'ej\Ei0D1{"ꢵHcz* PI+Eh3HĂ,UOX<3FQL|H@ AAun|xX[OF~a jWtmBc{Hڞh08˚-! Ly;g=YrK]<׬|8!Ff!`)G{9O5P 9V96 6!_ 2Ţ:*|ULBh~_ E^hLolcFqM)A8MFk pc] l@ Hh, * Dڸswmd3LtEJMprۓ_s?ø䑖 ( ADzfΟ+E'qUmQFѢQ8 JU{=7d4hK{h O==B8`{wD޻p@ 7{U!:@*`i )M9d2DC1,: .+EeVythTFɧO$(zhOiLpZ֦ *j%@?FI-RYV(ҩON>{%Ygʬ̻2JFWuZIUas!(sjdN" E8ֈlF'nSz kJy,!:= ]jw{Ho.y]Ae y'֟䲽TMJDTsOC MI1Ubq~5%8t. 1Y8Ap53q4UMZWg|qy߂kA{_w\h Z?^%p+va򧶋1u':lBI+2"jZ=cnzRHk '*s!  ,%,wp="zp.9Uޟ$WnYX t0}i{YkbTxqܘ[ss wZ.Ud5hAR&f{vs;,R"V z}ԁKK\xY]f6ʄq4C% }j*π urM%r-<+21B3oTR7X),WaC_f+M U>`]LYij[ڶn#ʁȹ`Yn%nFmj[کmjg2r& 6w!y) ,'4'4ՆZ[Nc8بhfY UJ/R_.tpd)d`yFe=Z󁶋\t+لm(Mi6t]R2/iĆ=AXuיixa-,w a +ZjxYmO:_}IW,ĥ4 Xv帔j/{ڴDil9>/:M )l;a);]X@{uG#?7(@R@ힳK9;sb1X{Ui9RbAe `75{1!BWFKQ/zsru~rupwW_yxxzYyu|C5x%s-%rؓ|C#\ qxXx3߹gWj̨1Nй%Iacx"п匀 F@|5/>MǂL7s9wRZ/9Y}5g+r}dMz^kwÐ6r_w#pSsXi SsG3t*cGBZ%L P#Vz،bΡrx 2tkRd9QZFA2X g뇬9D sJci5Y6;ci&!{zZT).ɡHp ft%ˤCta] }<9 =h A+OJC=VȌjUmIZm˓:U)}-͐~Cq)>]I/]kzy}2owUqU[:]bA!s>7 MQ deLɍjvHk.=_WI Q{t3X!^r~žټaڛFxKDŽ.9 8zؖ#}_6])fB Vzna@dS>wN 8mjMfK03a#UL57g,,Õb/5̑Œ7nMuM, \SYV+C ߕMoEp%BO)8wi+ہDKWx&Z5AS=a,VȸI>WL"M!@jЊ0Qb [P,^SӸWjG 88<|HxX[OF~R+e,UU=8nmOdOHj{\loqª 9ձ߯4 i25Gcģ~Ss~2;dz.ЌWghwϲY9k=KCY;cl~lYr<4>[+.eǽL|63}XE!p>}H|z{\1ۖ0쌽o諁YE/g!#'b7i&hLbԃJ)\3<\^o`cяr)%7%x̏ Rؖݞ\LMF&:maña0G$& A%)hs·8B .@!w2vu,ul;4!W,`ρ,YhpN,%D%X)ZG|h:gŢ $BS.ya Ҷrjy;p Ta{SMj@aX+IDEj QQw,Ɏ3ntHR 1sM\m_'fdW-eO0|ȸ`|")Ɂț01!0)n|ކ4ɡ0 yą}6xwŒ9Y*'W[rمNp^> Q0 j,j^?*!]H%/Aαh e"_/ 30:C yu㹑S6w>ʡPӗ/S3y -G<&>w Qo%^]FxsK? 9Y't҈ǎL xRY$ga[܁w h( s4}G0o~چ`IA1d9srpr*d%5Zu( ńDI$Ӛ0!Jy`LF=wE6LB)(A"hMEXwq˒HHy8dB.%8)tw,0$TP(8Sa{a'$? iNdgEBhGC#?$`b99t([&<P!ǡX" ILrj01ɜd[/5&I 47G0/{veQqWUJǥ;XFQ0uƫ ΐBǦRWa[UTy_A 98j"e6QHOł 'X ub<>6;2qF"wD-LC9`bZ9< ohfi=UΕY=/aG˦߈隑)@sG KH,dXEZ$CU͞*@sΚ'i/ޛnHm>0Q vA]vB+r)L(6Ax3)B*/5u;6Dzt]',2=5n5 ;)VNwZcA#h4|pK▮>c[+}E jڑĪoӻt0*uniYhcߞZKٮTn‚%괇|O=}|n:.ҍynJh3Ock,;vвk3`K[-e ׌]5wUgWᷴ[AsHEE*ۉGw;ʤ>VT&>Վ3Tߔg"ŧ6U07l<ʛj ʗnab>\lֿݯ (TyxYmS8_K?@g PBk(-zw_Vb+#IIVعc쮤y}1ep|0B$O(޸Njޡ@/o?\¶/.џ&@SO=k/byjz>3>>ߥC>&e@P5ˀz~5x±ˉœ?ea!b9gI䟮*k%]`>): t(c!hkeG&Vvѳ㫫={ɯzqߙON+˱S8vU%|l$rn.Xr5a~Dː,H$ oF>!8`k-͵1XJGuȦ8D?M 9*[@{|8nR& 8Gnve5[D%խúJ"Ö#<:%*He.i^`#Sb8">+g MOL4ٺ 0VOgt8kP.t,Uvp ^HƂOAdhk"m!*>YOO4iS@hCE):Qt*H1+=N[5v ƒ?Di hDLSЮx lG| hOIgoE%8M`41]4.J'\ `4xH; ] cLR"IA%A9#$3Ԙȳ\=JY!m)5O 479U% 6mw 窭oЦ 8iɜZ~zy=9r)$e0hPKP>nc2V^BLyjûcq%y@zЗq/w堗&=7pb|pzv؉ZlӸԢD l=`1GdҮ`vyEF@;K +Pz}큍|Qa\eV{Dt2BVY0@~P.շ8$X]8glS3Z+8 c1T&UE.ٱ }|YvO4-~\mpxq]pl<9oik?54-jj_ziϤ^/nѾ*[att_`0K4x3kO&k+Rك٢ 훖Tw뤅{"sf'% VnJRIf[:, Ƃz;MHO1Y,VІtejEaO8Q[s܀qDVWT-W m^xxXOHb/B t'긢Z$}Bk{cxUo#1Hyvfvvާ C/Dd`H_O1v9J$~|uyv\G﯏W)h(]fIl6\(1s/2HF;`M|/!8I%#> 3lDq,s erO_X<nLG09<8K)|A< йTR7w6K."sͭURk;KͨDjwkr8φ W7.b+o?nS~VcO%ΨƏ(i0w7+4`$!#KNfɚhA⦶DB}-5k(P {S1ݿUU_vZz@^ϝ:byAGhtr q+d՘yWo+敵XVzepr ]=_lz_i *,464ԓP1ģ9YH!͂䕠867_$lEh nP#ȆЋ0ꧺ$ +$%L!Z*^UUY.G)&*69DJWjj;Jzi݋EzEqXVPjeeOZvv@'kzpiƦ=Ym (Wkim#<j mX뒚Zٜdء152[95 NMot;R^CIl*0} (h@e29,S$h":A*MʼB2`, 5怜A]P P #W-F SAiԀ8TdpՑ%trA43!VWX vKz͆WY j2`hu=ϻ^i3Vq䳌 *ܕI%BWԖ "y PQ \S&F~ESTbQؑdq>ކ,d$1 Sh3IMp*F! ʌBods1;CVvC=3D# q2k4Bpgt°1:ٸ1QKyE\u'ftOlqHJ6ΊKz6t*.)?`Xkd2@$Iiv';#DB7h85ϓϐϠ݇'hk۶)gKljm{^O{(Yط_|]S3q3 ( Cccs%-{YӔ={B?-9v-hzk2NH8Y%?Au J<w/wL*GEϏߡ_sϽ;;˞]{r-\~u||p_YS[9gj+r/9S/ώF,GT>8SHzXر.#oDq@$dAt5w(z@g&zQH2a1sDsci1_14{<\`3esB =t>nR&p4zU3r*#zb ƘZ1B" 5A#[y(ˠDX+HUV!LĔӳ!r3q9 SbS %e fG]̚u|M!BV$Uȏ0C- EI:r95+ "':p$ .j*&}-p}~A˕(˚mI ; aʦFAX6]76[18`L܄ _h2ApiM_|exbњ+AaD$)o%n"nư?ZFGKC=Bwmi6xWyT1t ٩za8a"c 8ʖN~PvRt61;&]sIȶ:f_ oRH.x!|a yC\xAO$B͍ݟ3P*"'tMd̢Ww2)b|@e`趜lNfW'#eH~>VmmVsnoNvخ ӳܚ- #d1oTd j1Vz6|pg/"5a҂k.뽬ZUT7[}죳tr斾o_ }sT) d LxX[o6~ׯc9M "ͥ iS@KN ;.JDܿs_D,H{_(@)owv t'9 :c[Vw[+); 3d ^GT&$ p~8"}d{ܨEAoÿg-xSI931}߾Ӑ%iٮRv/N/.ޡN7ѯ/2x߳=R|Jpy |+;#Gk-|9I%d 1A, bJA1aS xOw@Sm/O6FGqW1'w825x4b͋} _'!V tt  -xV]o8}ϯ>(jF4dĖv:RNL&&1rn`>4}:L8{ϱIk\RbwZmDX!?F Rw^~:#nGnP;:SYbZt[J' jX:GŴb) TnPb&BA{RM$ q#JVzATDT89׉,9t ꧑ʔ4#X,p;Oৗ;rd}|iupx|nG^\sk㳁jçQ=ƍ}OQ^0 LgE#(@@T@i$EDcӌ6gTi?x^n+6E[߫́*"M%j`a}Vm)ʸHۭҴјծg":Gyv_} LU N/ӚLd!q2E$:*B7ܱ_D#C7x\/߈P̅U ې7QFn#Ñsmi!46V3^OF E&䲸׋&̸NLM(x.Mdf{u2 (_a6^F c 툆'B10NwS!6r{^2yIͪa N#W…/zϑ_PXFȊg<`pPI3q !lҧR-5/otgX+눞ȜV3~)+]&Fƪ6a"hk;m) uuj4`j6TLl̪̔nΪ}JLWۮ4UDFH2ISxөȅNq !U8Rt+JLzhix_ "ci j tAAV107` #0mC2^|"ֽwW֓~"vif2|cD,e3f e" rfY<Йi܅`BTUUr(;6ovcZYCݭ''D,^07 Ӻ6-="_-NkR!/g[s*/뺘PDAya `uD8nTUQ Obn@#/JԦ PP {xWmoH_1| ѝqEBrr }{] $B)zv^vfylOI S9in9M0 Eq.7$=~xVO0>$۵hSI=umG-3M;')]YAEj=' d0C[&i>Sy翗^jx'#ξë!|9%4&!N7̈́ 1σy'0v,.Ovv0&ܜ TRyaVR CfAcY\ghCQ[} <+R5\IJWNyZ847jl2c{eׂwٵʪV#yj3_vy&k&ˊb%o!%F(n bL$_ WMun aL\I@5q\4~ȧ\@zqTwu0~6=N$Tb{!̔Ɔ-7TTwUʊ8&YqLOq)A0ZNxȦ0֧S՘-%, ]hZAbt.]&9rYUgCi/-mV-OrcD*:hZ{d=(b;')J"|\T3!0[Z^h,c)4&\ᙑ&Lyڅ&&բ E,dlϬ5i:W|&lol6OO-5;j[>OOMeynUϭ꭫{ nח=[̆σr{.i̷ETO=GA0hm =7"EED|ýdhiK*Dgo˞&fbT'sU~s$~yؒƶT4mJScc@`H,ǚ?F5>ၧ\=<%P Fq|8h*(9"AK-25A"4Ebñaq"yy,j4LXd?UbXmB(ʌ YB"AHxKOo1+澳X;:uG}7^#!czPwK21R1E1ʼn_{FK"SH.Cԍ)`Ԫ>@#x.U>G<Ʋ۝Fň|/%;KxyFBqe_[WGwwo};dP5xCZy{]W$OTVO&dI9i|jReV {1}yQܳ <)H$#h|2Sczi]qXƐb`\NKEF| ,&l |)J'gٖ֮}?tC}|%A1ѷ눑|X;~!k Im&x˄IzGDXv]:nlS.!L8 x5QAo<I޷Jp527U@Sg2yJ4Q  9"˦lV " ĔNR;#,%-0jjRkQz8qݟx9:&N7C_{Rw,R{3濳*&]-ZU!o]/2oRȂ0|n8ݚE~K}aBe7:65HeL>>6w U2\5@$䥼w _t{LhVA7")) 9h HL'|Yл2,"rF 7c1M | dAXjb=ޞ@SJD6PI*j1K% B[72}KBNfG0%05+/6ҧ`64bASIpOPecmP͠/ExXϿ2LYB@ ƫs ź\ q3U: M RP :^H **l Tj(\WЎ^$w\VlVshm}pz4/ςh}0Xn%{Z^iEEkߠkr;:yoR;9hfk\:Q*+ٶ, 4)ke6Ho#f 56MMVmm*d-h%kZ6M]M%6[ -5%QCH 2ȮkaV 8UbTAUBG_^ӯs} 02h9xYmo6_4 64/m$mZ--htܢ2mQov%x܉|N|6 a<#ğ7߷( y9^4Apq$BL`>}]MZٗj-W:X;  1܈Td$$0LKJO8c\|CG?<C=1K2::PÙ C`@ d:` |a]ԄFF'Up=Q(t9#Xp BYs\%j=w`HFG˨Tvd8"8"db~|L !$a AR'D jxXmO8_1>JGS;AUH[}BN6֦q8-ۡ )H%=3~7y * Ƴ{@,RNt?7HyjǞty~0I"yׇa"e~y岳A4-訢KKv.Xf*u,xF=CwmY C rCSǼ**ЫXۊ­~GČºY@6Y+\ kpUBZ6?DDՍV# bZEf$WX"&ҸBKۺmH=#aܪn4wAh}p]e7jBev簈kQ΢q3XQ7׺sU\xYLZVcF羱ii1J8ygB%QoHiFp;`T DVUp oZЌVry\4fUN X횹L2SlT =c>4m)7a)(0V8U< ,WksMmt6ǯtU8HUSUV`oZ[C_X=itjXC: @)8,8^iG^q [RYҝ[gVmnDf&*PO<;wߐRuCmOrI!lwȠM- 6<NQfJv&=MarX|fGɲqhpe,Z£YLeǎ#-w9ਛH 8յSjt/W^Ju_”`)hUfwh`q5V4kƱJ3PmilhY{泋Q(Q}ҝQUe ۊ5\B6Q`ڹ,v:ˠv=OF* *_Ύ \(nh7sq oAa{V魟*϶[;A>!Izs:-1W?Y:00/Ӓ1` "xZn8}WpՇ@j%M] 7mmt/O-67hPTܢ"d[Es93Y(KH3?WoCoŧ?_񟿾p}^GApqzEp Mb/Or(Lc5T$$$$'JE I2`o{臇G4>]L oT MOCgۈ%Qo7=D?^֋^_ ޠuGGG)r@g%JÛ3_/C8$-0CyB2#xB 4f)AF'lQ{F8ACQ1@ vg1e+DၦT<< `R<[o!?)N'$CZ cAP0C0&܊X`.EJ< ,=CըG LA'-OPልd;laMSѥ쪨bkI꫅55NE=F)(@I:ٛb&1'Z )9B (c3ɵX Ph/[2]l4&P}T3( LL0dxU]S0}ﯸ[AVggw&Ю)8I7sMKf ̅cv݆WwAq:~sC ׿Ώ ҈?9<=Cm>!<Vq 9לZu!dXx'Ք\_;0inns/$afyAK#:jsۯs]U[5v_*6 kJb4@P ;RByG,ig/.Mt4ImeO)~Ti;ҮӔ4w-.6Ng9N8'[f\1pp2~yH K3=8O}BnkB.:}Gr|^2JQ|^"yTQ-OOٕn 9jy }pq^>A4{!؈[$5|Rw[Ol^6sFns1G~؄ CUA@M=0^ ës6DDžz]mlY{߲Ri4'M-U{iJE-IɱHJbZ )Edi7P0GuCа"j; 8(cJ&`l2)EQ'hLÜa2V536 -CRSmlBԒ.=Ŋqݳu4 Ƚ߷̝p1ck(RՊzБ> &BcXl\G" |BNWY3}, w+ \zMǷ%/9wIsEIcA GiG?NzFHTX'&2L J ERS;\ʜm٫גI kzrEH{N߰bVT˦O= mOm~]z[XnUB3N"*hY0 K )D$ƊZ{ymES1FF@.G1\^aVÕ\rgתȩ KZn+},g_S?H͊}C/8MGIbii;VB#3?F0[sH˙лt@|.D- >F b(@a) ,r H ;RT;,HpX&\\PW 64}Kr族|AHD z{XۚVb*=DۑLPOi f\"/o=&އWgS[6s wh]eķ_^LI!j]'O_I95$; 0 ];,IOwjٍzZ~݈gǵ+U# A߯#Acm5+4Vl!Vvs_fD>_ތ>8JCZp(;[CNZ4ál:$چEg+4C665|ZhSĦ} #I?06Ju]psxw%Dp.vQ38ۀ~kb5Kv͋u]뼽oy3FCPu [Ee';guMrw䇐͛ Xm"Q JE WH*PezAѡ45(/4>SL@F|jB;ƟrGkQߩ..Vbr7Cx1k2;Gn)S5rg9JjLL^E2YDV_ޏ3_d7Nd9JA]  | ob,6xZmo6_4 64iI>DZeѐ(E$*z!f[ԉ<=w=}u IҐƧاA/NG.xt8xYmo6_)6$ 7I>D[\dѠ8EDIEYfE^;ޝT2F/&c?Nd1|~ɳ_.<Eo?_}=GGq.._@;͡uq:uf -;UH9l(x!A!,810_pz!xY~i\ޭc:9;a!3$sw7;ΒnpB{~Z0|1;0y%\E#phDMH$o#ɿY'ᚁSWq)ƿg4;fHh'ek!]d'hW yקMN,<@sԢE/.ώ./_uǿʞG=.{8;;>緜 h7} obqt94":"+3.ĖA(F!?i:|Cp,c$<1Lo" }|U6 tHyE#3쉹xιU72}ޣw r=kCAW͞\Đ'SOEgw"QWK/H0ޝp"BHDh$H 0I vR$F j埑 t8̪KtMؒ41Chߐ,|F-}(n9#ON pƌ1xG5&:p2Ę5NRDܖm2E$zV 3f<t8YزIH3A& /6Q 7ꉨ٬4X![ b p fƓY( a1ِHk2̶ L):([1+_P(,RH0Eb8 ?㒑'Ο.ihF2Ȍ0} Үh2D1X:ye2xWc+/`\ ʄ!Pwv޲I>vk (&Ϻ'dE7D. e`: b 00!z>!0"7xM/-C2Qe%4śK&Grwkp.dfsfA;+r$]s=WѵX+=ce&7> RߎGA)j9"5v*2eIhTq~9!u7P&$Ϊ_#?`X24'zRɷGEZR5NTAEzī޴bx:qӪ? ;MbՆ=ݜՉ"n̴R+Zz .@EW'cʈIX.,gܻhX5Sv#@mn\+8Z$1z:o@| ^bDK?*tK,P3)k[RN 84N¹M﵄u,a\Mf +j(TZQN]:Ўdu3c8JYY Ց1*00 t%iXⷞkyb='e+ꊟE5cmôt+cO,nEi#O=QE\sX, P~wq+r{VƊ3pmUolv7fĮOƉQhGqL;Ub] x.aHػ=:{23Zdu[k\F``Z"t-iݜ.p; V:TS{-ٮ!:y.l(O:(DTŃUlrHm~6wf\\ Kғ6&H)/ RZo@[+W Itv!uEdUi4QT"-HEF i($="b'}qZ/J-U( ^e\aH§0W[S] kH`)lRZ3L=hez4ebM[o\ڊ J-UT6vt=Z`TjTsZi%ڀ6d2(vp;,J.@ YQ%5t -Ԁ o#d/Qx;TȚyu 3yݍq1%6#HT-&}u̖e]]vv.[x_($Fgw ͻ HޜI>t ܂Ri5*=3[~[NFKvIqFPi~ڳO JJ3`5uS6?=+Q3|[GdKEx<6V$4y72%|xZ[O8~ϯPN`튆Tt(JR $LGo1z,%49F6I@CNO_n,Oۿߡ뻷?+z8vsˏ/;λk'|q8r<Q6sno'!@,ӏRfp1ύ '<G8^<l҇Y/ďuM=3f!Ì, O3}d>EW{Nʹt2N#|4砙׻5)7l2K\#۱ <1:'S?>k8k`QID4)!% MbdЋDG|EdX U dx -ׁs!{d44$F geM}UڕZZtur4niSsa$:Y_YLJTdsY Y*bo< 9*& wB~*PA|byc)a >&^.~z,"擵'a8GEA\'XRRƦZl(ʉX /KfSb: M7>¦GP EfJt!=9dA|]}Θ oJaMeb-mI+c"(snknGeEUfZp42U.ܮs2&r53&}jLZt护c#.A82hF-/uM%~Q+["U`hRG#1ʥ,1Wq;z4UPUwm0dIiA\|,):REye1% #*Lǹ삐!~McG $EeA/N4=̫HS4 IV(ӎӛCrq!,u`-5[duWE`!دG4ÏgMX@=Ѐ!R' k:`%Ta[lMVl5~x c>ٻVPy(pj} `!' ҄K3g1 >>E8O%Bkfţ[_DސZGzg'm2_^B&)꺲)J R>4ˈ/ʎ793#n)E"hFG_„b/\P5Ew_ء ۇplh: }ᖴ7,<\h _ E@O=A7Y ;=T´M)A,DYk7\hB$}ՃQ!&KyG*chzm `ﰥ:%e/i\;ӪdmNkgHt$R05ܚ]M/GI8O;A݅,VOV[}w26 .Lp.QҪAr3mH92Mb2$wCL2K#Cqp]4._n %EL K:JmgڄM~)+_xAks~tρsVCCkJ@M,v!rGT^`9jXm8M9'x>IhTR%_,'%Pȴ@DE,Ҷ|:4P])oZ5WȺ /ڠm ڐľsk|MKGKۜ `;fm,wn=L9,=n8lB:׼KIޭ6e"ocKJ{\oNW6&뭍mmL, sƶ@Pwg{h@' ++kʚv R6Oz~/$VN_)g~US%H d$L7x[[S8~ϯк@ܡ\h)剱cuN]ز$+2$untΑinq$Dq:fvt~xc4՛3 ϞO( www5$xYmo6_@4 64/k&K>D[\eңh;E$ʲdi$uw{H?g ZRNý>",e\:{o?~:C;o=??=\F`}.nvz;c[.p=++JߦZghvSkDR',~oi1:83=?GяMxSIUPPv;0OCpqF }#[5V\{k-y,wtv J\#/3YOX9%8M)& 2>ZqTCiBU.,p:G&^t+dFk:cpF"B' 'Yƃˋ=ύ#=iNpi} woq2o: ic 77ChnS8N&-OoG$! }MUpEvNvNN^K;=`&{$8ÁętvpzQ2л#6,[  g~Dx:K| FaAI͌ LH$耂css`ͼ!44ߜ?=x=E㳫[|O`Dw  u{df{ZM,Kᔜ Z{8 1.D)EmvR]"p#.ZTGRO-n*owRB<QX> .zFR |+]×$lz/5|ڱj|1k>4H [}PhoQ?x6OcJq3\QJ"&ABS02$%+N ; }&bl`vtybh]Pp8tBF–}1n]i6Q'FˆX<o|U(FSn$l*r2$*n5`y˚Phʃe:'s7* cJb`Űן[T$\1*aIr F 1(¾Z>5zC(L*EDx, JC ww `g e5K!J=}Ljyן[WX<}Hb]V:Uj Nj*Kdv{ua5$ }?V1ɦG3kr2[cJ6[d;2mi=hꬃ^;$dG6YS^<^uG6O6њ:׫ Seǘ3Yz Ts<=,lz-?ڪN݁llin*;p$7Z+;EXeYX*';OC6`0aۆ.n62tpiw}.0gigCD 3Z"oLf_O6Z",aP=У$fRE6;Vʹz1&*E) O[G~F2ҨIvgVYjE7QwjTdҬFY$^YyQIŃEQ^YQQJEeŸ*XpESZRkW,0,Ґ%n#AZ& q 0^/aQdKHă3i/me1nQ, ˆ`lm7Rѯ:V4p.LõOL;[07(-QA9ܹЕZVx2M:#[-wWؖ.Vڞ* yQãL2#IUQ -܂*JհIQU|ƶ#R(9 仛OPJb'D+D6E )L)YҎC,SI. RavOC*Q+Or1!@6(Pa:kRQ̸D}^iMqP!!ɣTo7䯄ę] nRYg'ڥpΘ2%{֮Tһy*jR\y>Ƃ4c"To4-O6Q'Ȋ?*buʰAb$ eԃPT/,bD4FIk`ްPY4M,ⱼΛ^7؅})k(/:T B%z^eekJI~6J=N05lԉp!GHG7EMn)HӼ{[՞J3!@S!)XS_Ûj녠Ν(Tw7ZM`4l>췠VpO_42 Bstbczn=rY$x#U;ȴ @*=B@5!|ל#C-y  OPfhe_vAQs$OfTG^с7YQ-rrsu9n6:؞iL 4OcFGŋ'z!2a|8S57ƔӁXc1dx50 eW6>}BtH2GwĀqԝA~F)A(L6\$L2)ڟ5 og}"A3{m8.9%&ܦ͵Pi6XgeX/.00$ "ZPόAfƏo̷G?O쇨ă0!U{ւ%/-tQ8⏇Du$0x!رaF4_˦BvY_5Vثc@,LG W20*xZYo6~_*qgeZ8k@qz<ZUcKQA{$J"%JNWș7Cr-^|IbtIe鱳?sN,ձSۧ:/⧳7;Gk }|=~kJdzkJ7GnۃyFV͵QgӜϙ4| XXc?h= p,92xYO6KB h .0JA>!'gUw LӆTcx\1@DLyxdvLDB4\\Oy} wǟ.N[wbY菏@_-c+2:z=[͸XZ7֣eot̗hS4ERɈC`}聒5cοO$LlKv,.woK?\T).ixv ك^8 7~FT-*?G?hνaΝ_4XNeKWΎZ2l+Ƕ2JȔ<2ũ~pl 3ٝplؑc\r?aUȊ ɀ 7gG@Mf`GT91bM$A֞ JwxH} (=_kv #UdixT~' 8 OβVjc,:gԍf`?xE=x0, ZpQXyz2YmS57:s^?]e!0[.}!+ix]G?0wGh'hm9B>}k+tѣËËlȃ{{Ϟ"Fڎdzgث•,\2C[C.ăp}1JѳƛA1MR+D-x(<8-Ζ~N(Ų8%oACMbPx"BL/SFR7qfR;;^{%9Ybr|W" (lѫ!Y\]HYtq0#[T30;[%b!O^RpuxuyuΎzxf:q|$;Up,`wƉv7)J#ӀPRbeԗUO&iyW,(@ _ Za|1.Hr8E9(h*.xJB=-%&(Ebn>{S_ ~l7yι-ls%LpUZ fI`>bD5;Rۜܟ!~ʑR!pLyUUQ|"kdwO]+c_,̋CDGOQu<1/>(<{ $Ҁ_0rc qqGG)}9҈iF 5RSN1&⮼ⶻҒBmvakGpO(OTV^ xdu-`ۖ%ۖ{er5KtO?Zs)tE,3%7/XmJFդBdOKX8 ؗ[IʷK :)FxH/@UDɔ\>I1*5F|N/FUGŨToyyYY!3dw<&:l#m 3Ir)`:-ԘI}2e&&['a23j㜆 P6wKG.X >53AJ@}vs#rqXrpn9%Ջ4EɇZQRr,ݯD_bӝvfɲ(BKu+sTN2lҮi~\I! @, ,aMSG]ܑpD( J ƀ'i\o~*^q2V½& )G(xv#%2* RloA ;*OIC;Fzѣƶezc">0ߨyFRkiJdd+HuV笂45cIN, X*2ԗ*FDTӇ (yld1[*h5A6r68e+hUPөǘ46|4,&o3'N2>=LEdx C1A> j]4[|[Tk#;3E 4T- OKceQnWԭx^x_& -h Ux"0D36ĺLG|.yaU Ф1#X5j)RWRzv ykPDsRJrc8Y%#W%@9PT#M)ԑ|^F&%!8S0m[@A+OIq xƜco,v(ӱR®'KܕfZPWIHI{%eDZZc KNtp[*N1BP*[6i' ocJK*x=mIU/Q<dI$[ =GۨHu %Fܤӧix"=[N)M7YWnjB-IU5^+^FK7xBnYOk4e֙/l}S DʐEnHx%l|!7qy&E@EG(*#T9^0NL"W^<=OU  ʡzJ2{'^ռXEjNGW1VDZNͼC$yk}ij'\gi#Xh&@Wh[;n1 Y6xY[O8~ϯ E2em44vCiH>ϟ95 HQ?F'2:G韻s{>s1>!0|'ta3J&ŝ Km)aÎR4{1:8XQ.}P#nEwUV}By6>rvjIѽJm{晙g;?~3sQ-Hx1c6r΄xC2"̾JP;XH$Da2bR$dzO,! yq M̡"|O|֢qas\^'nvf7kyN +nKJr|V2Y ݛSW W=;|ꆴtQ܈d!|a"=AqǠ̴9<]\CTg8(>e" 3*F4Q8&D |}Q 5>Tid|st'J{UnP& 6Xo 2uH_+] JBDC0:?%dXxML5bp_+MOtpM,'JF9~PB} UetϬ5E,Sz,HIUB({pKke3. .F3$vONԞ}=M]{F''ݮr|Ґ㓆jRS]]r>NEj&{$y\)VI"%OyQa@Y/(0p,DF5ܤ F%Fy,V3-_XҲl:}' ݃6ܠ7\o?{UiI>HP:Ach3N%:A!9YҺ:IŴ%z_pu O[Dt*2}ԄEiUld<%$ ůoPRheddCnǗ=-Ϛj 2wrSꠍL8 80[;ap jP-W+[Y LbD`|4#k8F M# G_,Y1NjC}w$Pzi`*"@FSuA}DUO!/;0jhaFavjyݚE75xSژš&ƴf =41PVB$ٯvbY+5Ş Ƴvk "`!D ˿֗bn?Z\M0l,~YǨ+ PzARݗс{jk>caԳy>q.Rt&lzIn,܃,z CPwFl$ ປ x;%;5D-2(6ehg>g#ͻnţ܎Ẓ+",zR:|z OO"q+:X G9KnX4R{B!C ;Ɯ ^Ly9iaHrQr Y\`uV0 Bm2Gn*rt`k[a@ְAEe6'D-]k?NFܳiE{Z8$3ԄDZ;@qy0̦-Tf",OV1y8񠆕l̶%^if6c [V~'{V9ߏbD`H5߃A_@C")nKcぴf2ƲW ԸQ $`Z{7ξ) 3CKԧ!VmI=a׺Ul ->] L 鸜cW}2oY̾)f c]$>xX[o6~ׯ8@b9 ³6CsmS@IV=S;$%$v[:4ATg#w?pBl6r y;OӋ_oP,AO'h{8xf|wsA J{slRΏy XSh:]$BTIea~B_-bB!7q[qq)h/IܦMS;exx(Fτ%wrIBdq')p_Nn=EC_>_^sNO_WЃ4wzlzt:mN{EJ5IN3&&HpAEL9ϔL o3?p:} X.+Uc+ ۀINT#5:|@C"#+ Y!Š{t.jmϺ#Ֆܯl~ՒxA%3=l{uqD7Ò7pJ?NbhIDCI5Dr=4ADr؊r3 i1?BF4&>o$^DdMY>Gw,}{b` ;M {)gYJ<.p6cO_|A1a`0?@T1rH bxt!$jo#5&ܦIƛ|z5yěKPVr~_S8Neݑ8 u?.n>\띟Y>om^Fip-U'1,DyXVF:=>FID VVM3i9̉xs ]>V}/z^Z#">R`1(I(LxҦ@0'[=!kXML 8)t YJ簃U6#7q(h=ʟmJ_o/:bN@E !$ B8BYJa^>(!+Q'c0zrp2 *dGe/VϜze۶RuS}b'"IBh]9"sc2>[D!LciR?Gv)6;FL*!2vQ(sH ?@NN"E{_o7ro4Y4N7}TO Dans'0>S@jjXvCNo4Ū>d5][REJ&@J> VNf̨"6 ޭMs!: RYSQR[x,l@QF. dx7MSH UbZlHWzWKm![K ꩷Az6^]'ZUvKdpcSckq%WܸL8Xn`%"ngl@\L@b |Dah!w70}Q" jZF)Q}Q΀(evc0(V-gcBmM-^1 @ZբVciȪ9p P :H{AنII?شFL(eX(XuPJfžvFgi7bB V!}5o(%;k.)[r-pKolZò'R!zX"/qmDEOQ`4h(jn!٤%juI~jdhBjs8mMm1KJ5݀gp p&WtOa [’V O 0`8m r @[ U5+Q6-60r N13=R#P=A՜@K(=}c@ѯ8Б+ꙦF1ayrs!ӒMٜX&4er5ɈPo}iy2{ue%r:UMҾwUԜq)oy[,?iyW+|]p$E/)EdE9{^,OIq/i7A/ E-b&^M hr`vCpqtoժbE[Ó}sWK<-9l$J^ +Oȕ|ө`#QǟcEBK Mi&F!SH TI!2&< K A!i$бJ}sQ`9`ԫ}$$ϻ .N嵵5PN,R>@6Β;^ML%A'fA]MN"b D ' 半R;X3*c@Q ޲ۧޤ(BɅEZ|lF#7WN.e").D%Ԣ9wE9JX.l>Am"&P'I#"HXR +ͨ>" PQe4XGD$qETmb5]Дk]n_/JѳyIgI$X{YwԸU6eYzV@ C<=zvќ eԵseQH?Jh$mE,`P0Rm=eU@eXg h(QBJK3 (N6W-% tQ ]' ]됵*yZi,V[3Z^+vEqUeLy˰ ~!*3T"ˏ, 0z,tF;Ky bS;5UL Preha6 3Xլpх]iNJXtVJw7|O0 %[Vw"6i}k`}\bɈdxɩaweʫ3hz%mU:k]VҀTk[;_)kɵڇvkIoK\xw!롨Yos KcW!U5F ĿT:2S,$U^!/3!^vim[7˦bwßv?{@#Y6r eW87/V_Aߚ91W YY&"PxWmO8_1>ЕiEw4n }$>ܸJ\ZҴIKUgƏL3.mwl`/)PG4%l AxVmo0_h5D+ eTn 9!VC9wNKı{}8 Ќɘm֬X g޷ޟ__uQ.ƽa@wJrWa|qS1*RQ |n떐<V˗qcyʫ7GlQ^W# % gs&}UOI@q3eÎՓ~:{BC݇I>W4ݝR9a U7_dl!'S0z^fVFOы។oVOdޠ+N٬Va<963Dln:Dd^ 6@} c $`OMYoH LuṦTۂ#N¡((& uR(J[yF HAذs4S4&%̓b4&لsj-#\m$tΘ%$5݀.-&9N6ӂk U{@Xi{#VwSP/T,M7k4!W(J5:敺.IkpŁPH 5}KݼpV2xO¢5A 99bcN&2+s(-6`V(ZKg6ꭝTKalCWreebœ]RSس%S%T<V9*;MogH_򉯙}m>..qzK*) V})d| Sg/ ͢TAbؿ8_VqgvN̲opxr%urr\''YW[ɹ l5Q4ܹg]I l.،E PcJB\o9% ;cP,=djseİQ h<$I-ن1{+mo-D#ܳb YxٷUk)ZJy ?3NYmY163Ym<ʖ˺Sp踭1ړ LwT _ɸRbk~1S&W7Aމb5*r Y^1Y~ ;x4BQX DwL0sFAhk}aGtu[2J?/‘/5nG)b)u6NwF Yvz]K* qV|@8}}rIȠrC)LF1T`Xj:8+VaPiJ+_ku+Vli-ݺay$-y# rwmzZ=({>Iդ^ů[#'b7eĚvm&i%E2޶X͙5q{u\ͺ^(ֿFuQ5xn_%(U0˅7mmFoQݰ@WF^]۲n('<`̃P3oBY]wǼ!쏞6kp"Ww}| gx;^|)/gtylGRgX,NйY*r+'i28ԜFx!GqBIVli*ِSxZn&)>Vegeuz{a٭k?=mԒ:%9SҭX\Qϖ<xCTve,7 16Oc:J #&3(3P@`rxc>%1%44:rTM ϕwE1pWhR؏O۫fH Y%HڡLlrU%ͷ6f4Yjs!!+'ᇙܿ8Bï%X{. "IXW;B =𵵊QYK ցfT5%S{vW>EBaJnF 1yYo$*.MK7I# 0خz$0+kW=D}#1ݓk_kv7\'q9ŌRG t}.0.XbrDR7ܙtˎ)M"K/Q_d(X1vm~̪Ŕ͜n }4V:U5eu2\Z>:L#&dQ"r?5u{ ,74nUl~< _nNZ^rzoIlAbAD/[oPX:'642M"]'&=[0C~K 4\yo|# L'xXms8_|i02ww(/mo\rIwa [cyd9J6 Rf hY;<*2Ɠnl=;?HOt3ZA`>aRua\|SP 캨 e"f}A pEˮ "ǧa@O7 ,x^\P,OՆll|9b xjՅsVUTF'Z _ T9hBmNV#  KM jIJIS搁1Ģ~Zͫ>HO0HT誓H$y)hFo\u{*5gKAǐG] paa'8ȫ=ݪQJ)4^+jZC^mbQsghj k#Fu>76*6[[8:CupdQ:t wO"螈*emXW/_ڟڢ省Pq+hh* - Z:lF Y1W ck \s_{0-a)$E.DsGENW5fKIaf; gt^T_}qӲcY;+[jUn[6#[Scrc߽sP?}c]l}U 40H}Vc\ȍ OO R˽)ZQCj+cmW#H1GnBRZWF%-&F#V'*-emGgd>)UA9=f #ZJZ/;p(jXMmp~i%F_ԯ< jF APӤkM-ٓfsz<*-uOҸyqswᄐǗ5}?<|B =N]aYW{3l6xoH)G-|*'=&ɂ`n> 쟌?dCx6ϰ7gPlü-1@`yYxgZ]b>:$Kt$ 23vs0XɪbEN/NߢśΔ͔kʓgԯ..NO`bΙXo F7WCVCq/쉅e(]40/ ˕O$CH,bz)1_I>s.߉ Aر9vN[`ؓ} qV1$'ضdv>|=F`[iP\Jf1Cupd J Pј8VoJV LVH+<~b?hb%܃dI 9d8r8DC,$$9Z㌳V+D/)oI_OtCĂy;26T<=$+7t ,2˿ocARCs.0- dG/q6$ Z#p6\lB!C `isGKw.Bޭno5h0S%XRگ~s P)RގȨ@gv]vtN6h>05 Y!xfXb%BaRT}):]+w+T4(|DeD< OZ2uEb{\祜'h TUJ L<Rt,$&q<@_a^Vi^S*)^K[e// uNo;o[U): -ݦͺ&6ynVu4YPgͣo/g?xɇؓOBDgi?!ޚ/88 -'\錚$|Й,]o ~6Z}''?l,*ț4#+9۰0МPP- zH"Db K[I40X<P bAOujdrJ^tC`r`O$:%Q>LRR 41.}1&( Xu!9L$#ZO2NiY㴊,Y+&Kv,L[(@ibѢ!:&KߊtPɑAÖqC$"e`.Q]@ʫz|K J¹e $:698Bmrc+ 2Pqx^톓\bcPTJƻ^þdH2Dd| t$ךBC#*W[rNWHY6HM%tl$ڥ_ 1Lhz(a%[@L$M^.y,x j]R$4($RU8ʔdjw5'^Ϧ>RHu%YHф~Uv 6O86E Et ֿjz55}wɴP/TcSPW*HFCpҩ4hQ'v3O bUen_f%>=]{d.@kKC}NsEX̸*!7[]Cz58 13(1i8rin-z50iRPq%3 D\MѴg>nG0 TQ~X]ݶx`EqTeD V$鱚9BКtrғ30$b%wЖ:[ S+ofeLa`q6Pxs#gZB;H %ͬR:ir>S_6t{f9F)׆/`zݬX>H?GcRe̺i0u7Ӓ1ڥ!r6:C0NE~?dCC]pR/ a\(UÁꄕ,8hEsJI!D j, e0 UӉ;òj3[z<uhfܭ=@H-b_|cѪoGxԌ54907ebn5ݗ0U(:2ƃN3Nyc)m@!-$n+@pd62zHF- ECkO`ǎ9d"I[MWbیOrpm0y$rh P̣4cM 6zMzI)9yIVP T+ʇjb"DQK/pRl.AFJ_fJ@%:&t;VUQ?P=*-ۀ#֠4qdx*iP7FbY'i{ˎOb 3~Yb0cFHڊlCmvk Q/boؙP?gqhsWLy1 <%'qJt`/iJ!0(+Вޤa_Jw@2>5eZ=у(qЋCzQMFQ-Z\N GNy_94OhC:փ$9za vfԤMW& ,X7\"2\`KOm< <35Í{`s|(Q;ЀR .B"ܑbF4jqnZ`TAVhgzn\j ޓhHeKg/Q8eëGZNZQ:"q1:h%Y Z(@rڝ`H Ҥk^kZτQKoP;j 6(P:)IJ ah[DĴ[Dq;B:P $Q؜n0xiNak$:!aE@"|Di  wC# "f!t[;ȝ 89?{94=zM o+bLwv$DԾ5АipJ2LzPF{1Y ;?^MD`X8N,Q:ab$Do; l=Em2N UI .z*D^~,E?.fDhZdg_}԰#f8<q4Y0c[.јPeRIEr"/83I+9Vj |H0SX+BTU:h,\6N\70׭efLƓ4ja=^6@`brDYRN*ZO=YVSIZ" H@=Y$~y)` :F3WlJ椓y)d $br2f=yqHҲXW߁9W2;?X"<xx߮QW{|+OoW_V-R/t8e4Ȯ{5jy |1i%mz k7(VЈ/Zz(9MЙZmY9o-)*0Z/LOEU߈aBg Y>B!fK#S;bU#&~R X6")2 L$n`q/Af h'XRE,nx$ZzT\~{ 1W*GbrST^{_BQT zIYpzB9( jVZH?Ǒ\I\u۾䈳V$ cɗ9%JY )%<-eGl\Yη+ԥ%@m}Pv5Mc!on[ hdy{jItimo%=,E`ɒe]8%29Y0KFm܏66pȍ.0zneYR }k7,T6Pa'v; 2:t\P'L[˘ueAseDQ֨Ѡ,n`4,,Z $5:Vȳ 9}g$q5i2W| Q|W)ٓx5 뀓TȨ8;g&|M5Ax({ d~'ĐT*(Vyo=,Rmlݒxc=NӢ qVj)mƉ{ R~͹793OV/G'逸<\$^xdS0hJY b@f#HXbbWPHv`+olE1r@N; [i%;*77/b|e6I5R>ܦз#'czy=_ZEd/þoPGlq76Ș CF®$qgh";q̙v~@_M PR7J7*W[mG~uHEZHQuj|9ݥ'<dgjl4CUP/ d+L xV[o0~ϯ8d뤭ni'Pv$6l*'vkn9NÄ;eu-I7?\BeCX1%C4 ^L>o~\CjPc8NO;+ҀgRP]}r>LEjݯ y]*VJbK>An((䱱)` c뼍i6^NJdLT^` \9Fa8axK9*%-z!H5 kmuEv\g2 ^۽@[{K۰hr+((vd|>(k>L `ռsnLx>T0pg*S 3Iel ~Qne$E sWjI.Vջף jA7^C70n66>¬vnNTm!5hucܭY{uD̄+Sk]+*N.Nߚx=ewz<ٖRi+^R ]%2%=qHY-8dq6eL*"N2ؓBQP1;e;TD䬋vgڤ#!p0sB-8BB㟒hp#RAA9_jc͉swOuo3!19b3 RQӣ"4`Ht^sɌ483uAd?7*t\pQqJlؚ){A;n@^k ZjRrbb)^FYk3 xj*b3~kyF%EHCաT!Ӽ_ '4&yE8']Fҝcd[ߦ r蔽s94嶍ζw贴FLTs|Ytr7zc\'+\8k[Fehk{6-yXHJޘ 3JJul_V5ډXkPvT_|4yNd+2q_ˉd_¿8N [T[. xYQO8~ϯ4-YH ڻʍ4N:!wH|34NX ~g"!a|h|v1.?s<7chYߏǖutt{@cr˺7=ΣSZVq7ӣ"Ų0k}&ۣθO WGKFW478xN pn[Jְ*>!yE? ?Saӕ8= Ypzt7{Pn)e^G^7 /;j,y\/띜$M%x{I' ȱ`cct7gxXmOF_1 R b8@BC=88@[6zN;k'v煪E\嗋n)}lх^>\Ÿ?,P۽v#ƧeY;;j 9tP_UO6ߋ( B1ũOq U'\xzE> ^RqxEL3c9d){7\Ss=s~8Nt E)qs'rσ_:y̼:}ܜ,uĸU ,DxX[O8~ϯ8HCSЮJȈeihwM4n9ﱝҤIo̾,!;7y"ssI:9w 5>8/?/B/a:0 (L"yÛ}g?V*{l6SWDp ƾs-”S`1#+\E@ cq(2 I$2mT;qi64O;O8t.~hGzI]IS#bM1M`xq/8IEr#I筭:Z~0g8rz4nKә6oZyS?KE^@.մQvφ1Ea!ʧI@VRlOh1h{/ 2 8jR7! %6CnJKUdk.tи.QCBA*Yvi\⦛R,wQ\SፁwXL=?j2 ͳҖ_Jc J@DP7]}|Ʉ,S"2'GcmKLP8 Sd$2`\Q6DgQ1,Odž31}&G1RLd/]%9 `dsܧL,|KiJ7La 4嗯zy5i01HM"iV{j̒3~?.*K iגDmZל5UfUi_m;̞T>ڸ K|<\o es!q]m$"9a%+#*hgmis#N>|~ȕ5W49 h"R) *EF_Je.b^-˥&;3/$^fVO(ݬ]vVO5qM]'+bX Žic&@8Ϟ$FP8g3t,^1߲l`iL(b:qL s] Ο~8>qHiifE^tǎ͉sd<}$X {`hi|2ؑz}_3U۸1?r,G5ց9': }qE/ ˖07ÅrAYDn)B*Kp҈'MG?˟.S.YQ8C}4I_"Q0 27!]b89?"QD zdRPQ@u)q_Ȗ4(\EuŸ'Wa:1"SƨPsA%&0>49tTq08铉& ؃ 9=lK ,&~E@RZD@Зj}*ϭ"i:sF:[JlGs )--̆rrO.X!Xэ3#坬Kv`I 4h.%-ХVaz?F̛#1OosHCRTTU+ VVb긥MsMDHV w)O 9-#2yP5Ed@[-Y%7|f%H+r֦pp\\%hpاܵ 6B[jQRj'*CSn9jSVܱ S~vjcZv2fJ5 2@<#hʠU]QWavc*-S{+慺- ~w a|5^ E]an3'U'q \0l֍ N -k2qoCBk!GJk.Dmepe~6Ty3(ZUي:ھ}^뚾EOV{/߈M^Lj=D7۔퍡B+{4bh.R=fo5+smn? =–Бy04c6!ɗϑX`іiM[x}]\t:jr<9gWes1 ][>ޘu"t䃖N=kÔD'SF&$PG!Ј D1qܛ\- K xJ ~y1//K^UT۽$*)G ID@UM$񑮁CX8!=%:X WJ^E8)GH>_Ab!k岭IlI^i{꒺/\@.;jeꌶP&җ hP?754)[=%%F<ۦB+ݪ䡺wo W^K>ZMTरO^˥E@Eg= EBw4*z,ͬ(FNٔ8E1 kErM'j/Py 0;xXmS8_33Gic(0wC;\+Ӧ@ ӻOb+re9!$_1CǻϮ,?LQGC$Mn.Gow?mo%{Mo=ϻ\>)h(=˾Kyl6Ύ\WE)m}i1,$t?N)/<?#@R@:N:^:Ney*Se?$ڦަdI%#¦3J2""i8&u&My~X86<,\i1/QLЩ?Հ3..iY)QH JziE<[\\a4ϷTWUS cp*:N0[$1!8%w@A΁ n+dB$2I4C=9 aa4yʦ|:!0'`BbcR^8LL-.5|b7zw#hVךD*^jECES7&/)N" J NhQƸD#MWZ'ΧDBvWS/O\Q1JCだb S2ICFC@WD!f :틾$'`H$1P^6I}t.*&RIAyU-$TjM 11Uhbٮ1@'=DnPZ|,Fګ([=.}[MWǟ>vI?'L-Z֗PtWJ2YLKكv;%luxյtvbpS:@>8Spt|?@|JoQ ::e2N+xZmO8· NtIE" OU61z삪y8=X=~xviI8xogwp ?[S1* YxVo:.Nj1 7+6:Ll&vRغ.ܜ{|=' ѻoS3a h Xs%ai''ow4^w E 8 ZyIڬ}/ƼJJ>h&8LV=~;m7¦ }o d&h;'֔fW2{;?%+ ?e;l*@OKJfbE n WSƵնl(4gz b1׆9`+^Z{q%ˉF0BIc8 saW]k : mVRĽB)ɲ5 .S`/vځfLaCYѽBz2>ckݪX۲jw/li6(cS2DF& FjխLJ0V/S$c#\}M~94 -8py1E[oa8w诏wW[B;hkq6fsyZİM,<؂ل̝, 9.!`&{_<&1g4xFF~fuhGE;)]zlFGh/ўMTO eGhF`heR:8?98?o{{zG^hM,Xr'>:;sSNOǞ%q4Y+$p"x#ބ<3h#G_`2ctbs::&ͤ4° ڡxq8#ÏWk΂݆Hp!c檅%$00p'H3z;eyAor\9It+ өQRQ¥P^x)ѥ   :Iw| %>394 q|nMPQ}|/U3Vb(bl+r@N[] L%BSVCuҿ }'w+JĸRh`01Tnv芶%( S9?UptRPC&I\ui_7yM{zhc%R%Zx`JI\`lF pb|!L<}WjsAG(MSEik{ri6oFR0!^\f#1'^Є` #2-k{>g܃9xmQ>\{P.z{K84Pctp /iDRh4،pU^E XG< #[cvjŬؐJxe 0h=K͹◁ᆈS[^dC*O+ 8\ \yON^,ygSjV0QhVMs˾Y1EbLGp0/P/P",k0czNUb3ZaR3IA"QX) <:(Zb.V Lʠ 4_jftpng0\l&ս5ŵ)]Z7pzYTTp/a!8I0Tfq*>0^/jáq[ySfHű8zP2Om?_5˼x0']H 8u`C,Av҃8\i:p|8~JZ5.w7x BbޖguV҄U>Ǩ''faK3 Lפ(}sEn]b0]tX{rfHVL43"MrUРiT,Q:56[>UiIYv 񹔕 gi8+Y-ɕIsy )ʹ.41V֦fۍ'ܚ,.'`C0\{ LE=࡞lP $T ~N@Ujj`qNas[]oPveQtᵦd5!̊~DKhfuu 2GHNvcظVQ@P RfkdKΠFhY:ibtSeMZMdves6T\o*H6*FusEҲPɟ[jTo)a>:V+5iIZKH߬ÖX6aVh gF4U:Mko EhҪ m#MEj]ȵ4kfaaպj1*Ϻ*~l7<`F#/_b^tyqto/_իb3A_y}Q|駟.NO_޼,緛o H8 j:=}7ӴOOa}z+#Fc?I'T}lS|L֋=nwwM}_秦Slﲯ߲\}Y~4S+qݖú~)G_e q=ܕ[|ߎ6JS8ӧ?4Ԑ(Q)Cw~O)(-WϏ~w\~I,NK,ðnqm]4][onSL؈hx$a϶_mq>A/S=B?aK"4,Φjj( !E[+6C};)Bա\Ih},C?zLn5A{Vg(N#Q0|TEX1I>I`mԈ jYweZgZ`y^XW'N\zLS]Ir}9CzD/Vr}NbSvkH}m8UL!^1Qr$zV4Az -UCYUsY-~mٕz*._2 HSWC_u[.frWO|ǀ;PU(-ܖ_irڼ`c-Ӧrㅉ݊$tz*J#[NXΫښòzx<"|D9^(Ui 4v2#sYAje=F_k &A/fw 7/f!~(ʮÛ\xn3` %I)?9^X x.qnfFs5ρӰ_AHrxcP9*9n`DMIآflKH#2y^yl`](T̝>aYxш|2G[Y4*! dK0q[LUuD$dU_-:Ax*Q3.0ZL.bf:FJ *WƯ[/G\ܗCIjiQx m3<X(F =׿,/|<=3osdXX;*X fgo{A;N4WeۯdwD]gNС-?IKXy5-Z1et$0aACA4D +e?C@ dO(궩H$?b' T&`@/U1sglh4 '^WQI gTHm ,ڌ{>C< aj V5lT~ePc^SL NGؾK# o.,H"͔_"z+L9@&ܚqfTKRvPu.a6nhh%7K 1ĥ>bP!S3 h*ՑJǽ*p[xyeAz%~p0eh 0et8W ܞXk-\^`JY>eis:yvYĢf^~"w)&v.^ m?:5MF` qܪ N[HIJ0魲&Lؾwh=G֤}bQJ^7/fth 6&JFA~׬B&LY} ~xW[sAWX*DZqBVm_V0XAFqg KOyyIɣ)!sΕκZhW5k vth  >P;xxRDrNd2r?M;zٶq"f?RY3F''G@̒NBld3sN~0Euܼ3~ƺwLq]9Q҅ ?7g!ďwX7Js_Ydc`9 4~̆oR#^ЎӂP^H !y]=P%cG#\@qKB!_b~E'\&n\*vA&3LL :E&hʹڈ}%#Pc9_5c`]~T-6}[~ѻKoX] ]C򮾂)9QɯHwg,n-SO75جlKe<`owevOyR 톧)%53۫H8B;; oU]ɗϪux D}(Ɔ(!;4G8^,r68\G=!c4$9~F@XÃ+<(Ny0u_4qs@ɣsOi~0+N~2Lt!RvN讉ٽ-uvM+N?aUsaKjC'ZU]`ǣB EhpN_Wq?z.dr&-dNi3NeŖyo%7٧v9$-NiSnCi+$}>չp=ɒnwl=Bd9|uh`Y;(>Rvˮwgn4#cgIp O򲁚HpIc 4'+-&eyѣ8gQo%پ7d }b(ݶLvsWQI&އfGp4Kxt9&6&8ٲ;neQs:;{J2$ȩvDwInko̼0k{gʕ`t;aܳ^Aro`9EI2ɊOxړN_\ɗg\mzf#|+tn8c?ge8Ϟ|`3Eɹ{ y09^_sScیd,;+Iieƪ1HvQ` y x tCaOfDD8Ր E>(H. Dם Qm<̐0|n9m.95L<ƑUTD !|H '$[e^TW;R4,V̼OǮt9JAXDVjn|A7W9wӡ,⩸4d^ {/^˿@x.`Xl`qGgmR~5xP>aC^Te2.+" saD3ey#pFe4tjN0ԒH.X)>-?=_iI z[n%4kK2֓,2((l SSgciYY.NHY<5l4G*7C7GP0&!H%!Lܘ6p\虡|sDжFq34cq!'})v~J\\p 2qQH22Ш$(߄XqxtFD#'LZ/TC2&̀LO8M0dE2P"jĉ"K)l:(pROZ]"_\PiGml+`pU~Mt'TsHE4elrakjY:QV>fɕ.d@aDNr@C%88"1+ 7_ 0/}^\O@!~Vi]EE'xܨO t)/зZ[8Gǒّ{V2+۠Ln6Pq'?JH| 1ZQ3k}"z: :Y#b1m5K?659m&bmc=1V%1w4ztksuC@RW3X.U]zwz{t}7Hr3" ]l pK)1xH lL.n׃7+A.Gco@nįmحmXd{Quˌc[ oI\-#}{zf96Mp[Fh[ؖO#e٭үRH3|~VHyFy3ivhBl7{ gPRn9GRM=mLήc>[35c iNБ(LI5-?cV?it}J+RT+:)&n: -=0π"4wL-4SEk,_ f*[ӂeJ;"a:-i_ۯis[Skb; 7QM(%wY#L|GPMzuЌ~ kh>ʄ̅R̓;4Ҭ{,K]4,xVbϢ-2̚3L 0d=j}87,1@}(L14'-lH:Prx"6A*GC.p|Ad!]k V#swIbYw|veB r؋HѤLm| aRQJF@Џ.; -۪F,XGQ `gXj=t`7lACN{|<13C<yspQ89Q$5C?B [\ɨW,S斍J -y’sK~1_ | 7u!~%ك&=qSLʨ>bA Hۂ 40cYP@=C7G$peLt6 /Z0XŠס@ajiu_4 t"w)tc9?I'H1 Hă' pyF'cSfA-ZЍ(r 7*9{饥E3*%,sI Ur[% tԄ3kDDD&h0f jFGU4Z?I{f`gXg:v`OL .\,ȂSD4P:A|J K $hFckus!3wPE6w\› =>5LE!+}|&O@gVeq멲 U 9d<BR=Y 4OPKO#˛B8{=DɲMLb/FNI)ɉ͜fSR}/eJd6 JYZNNhm'/6 K;rqyq3}BMUb e%gP93ؙU*r_ZtXҲyfUEĪnlvk^tf9Qtkytrnx:$?GBtB.'gW{KJt_!^4``RIrшŴh9jÝHq*! B m)lNf:A:[ g: (`uYPDL.r s>.(V+h*n]S4~;}7fR&Jb $5t m+V3RoWI~Ԟh2XL.|,vΆ;,w{ԸA-~A$Bo%jW:I;N m,L=o!Sպˡ;3.zw[}"g=SQFKz4Yr R90Hs+}|87CW CO}v'\V01FN9%}W=cFM8yoJSA$Ϩ+Xn& {>mϣ蠸ZZbEmA !EOv|W4O'Fj2=.QnuOpnr8ݞLW!MvVxv)}6W d섗 `'m|VѾmBilvRh64p(ixZ[oܸ~_*^;hጵp6$%>3bt:h ĖHܩ~yY䙊:ZFYr? )a8".Ib17 YpAd@I`8d1nz-sXz.D橤 0?FpR83;xDA>H #@M6 R©Ag֛1,y0QhJd+4ƫ]pB̠&P?C8&-E l P'x ںJ#O-Vт؎=-ReMEE08Q]?)l~RG*@I8`oXoCj"`6vHcߕ {u;HrI$'z ur++bWWȧ/SyIC摕EXR ʬ]SCmH;`e9j@a($tADAI3+WR0H]g,RLTGJ~73Z]dOHKud9HEΈ9?DOJ:3?t2H2aF/P*Es0tB:cbfROpߡӇpǺp:b'Ӻ&Xy׶g9RmT/-*04 E W&j?@e* SH_nU*UQ!>Ҝ8z)u^p҈:VσHs=LjC`:Fv<{:/TPIf+=7dK[*Uu怅JmiQvCEEQ.VbzBPs'FE8ʯ "Eحw`ZQ"4ʇ.&=2ytG $ | ,+J ׄ% ¾p, [y T?#i<nd9YKI$>n`AuY%QKo#LRʘݫ,&Ne`p~dO#ePVȫ(ӓl娒`Y߹"* sbK rK:=*;ۂr%m/]bBd ~WB,kA Sa,TT4P%WW07Ngҧf&e3S6' яw[ݲ\Cu(]͡6e^5UUݵy\nA%Vpv[ľy ѡlʍ,?CZkݪNhhC)!2Mv'2)J!R T hBa%FFGRj=b0ʦQ)VQrn!o)d 9l*`2rɚ 9;:]Ns97pm,8fYʡx%hR ĸ5Y/Y 4)C)khgD HxQ!!ߓt2849ks-D+~~ 1Q2:L}/{Bkg堡VXJ>Oǂa} ΁sl)˦ˠu( MY:LZ{(;pDj-?Z? {@U-muCU7!#9jqS--aZE#b@c_FCh{䄀 'WSa!goїr[}{:wj컀k r=  ?DejBfS T߇nzРP A]u.5QWp썆ƚUU#xzPe?Pӊ*c<0^[XeC!6ܣ# V, ֆ5xBCV76}wW7e;V߯Qj+Eh%͒Z򠭤tK魓~_.YmqlDu0> ;t9ccQI]k̂YL1D@E!%+M*71:PL ld!`Oy-f |!̀z§1β*EKjB'agz]ʾQ[c;%qLٮ*{RI`FHf4Hi8#p2qׇ/ d[H/; r )r}BT>!v (-KôgC*ouFP/`dTzE>_hLDĂ*6}&T<=5 5^1 \t lYLȔE8 w\ 83MNDg雙^~HA(SzLRi1̃M=x *$ݑg$30կ q&Eg` NȆOY@;!]]\S~¥LC$Іȣ]kaXTBS(e_&<`oőRs\ZXl.g&*OǼ-ƿrpvJ[u,7C>p%Z텞ub!rfY֥aM9O.LImAL$/f9 B86aI`8JPƫ6z#o`% B漲lڄ5OެPU0CU5ٞ, hW[Ļϵi{gqU]*xeL% J:]]p2WH$ơl WUn،WHubvPw y LeikOJZ\s"!&Uc~6 yEc=pF/n}cp :UV;7jT0ۋyX|Yֶqwa/O -hTG`L`6B%+&G74&y2xG']H 0Sv!< ;؇a %%)9YRM`&ш֍v˚}1@M!:YTInޢ4%K$1۹b0Ɋv0N  XSz`A8R)-Z!^7UMfu=Mo@c M-y2lЄsN܋7 G P_{0Â8Ar)+Lsj[ɱ$- Yan Q~6qp2&B1`11bD8ES@G{&[rf':IBqa`Ȇ$8H]0M,XnVW%qND>A, B,18S~8idc2pq yQI.N8mꗂZ-y??ܻњj`2Wk6ռmK=&bԌy~=[;BN0p^|t1}<慬AټRz滐P/Qs0\$>ƕ[o}r_CHǜ| xeFrbA‚c],! ( b=x(bTkÄ*ģ`D~o41J3ݮ&6 Z,6Pne%PT :I yY)!79$ˠ[&UH |W "ɽp "*Eؿ88wջ7#1)Zr^@79#䌫P"6q[ZĹ&JqGH(y eSDZS_|C1sX=s`ZwBo<%"fA%'<it5ǚOOG됋Dzx >#Ɉ`ɸ掜KS|/,sz2x./!\ް}pK{T#J~ZHkk::*#ڪ?5`/ސS$0Xpw+S+7bYN)^nJr},t:sB2A}BƕcM<,:*kxJ(b{nJVjIZR72{*6Qn[b%!HOђtu%!+2'/>ZWHKZlQ"6cSjK(u1A=ӡI]՚hyhm`{jN5RIyzQ 8Y[0A4: kĘHQi[?vEeuUeE܋hեS>bӥQCҡQ_Q3tATȦԥ'(Z ?.2zPurEUn g[ w[cM6m δU[Uˮ<[5d9{~1X:*Ҷ9o\U@VJa^Rqx'eip\DR6M;lQ!`yo'o7m=y|8[y9N,d[؍ !\'04")"τήe)^:S=1Gɟct{zsq2evl?66x[o8~h VIq"4IIzO,Ѷ襨$b>$(QJv->f ~$,&pv0E8 IiΖo6ٟr?_>5_~y:: 7;FyއO'׌mOFi; .i'G*89_sߒ QH w8[Ln? MICo}_]q EPNMꆽg a01LgzB#3^ށ,GObmno=ʉ5}C/2~ʱ$2t7ݩȭB?imm1u98de-& I\JSsFl~%s%.+H4^%D1#׶䘟mp@{G6Ux^%Ը {cx5 ;'_Ъx*svϵ;쮊V}w< oAt׳leⵣoVtw.b@x#e6,t6?쥆VAbjX[$C U?Q]YT8q'bGCcT%ٵ3UOIWkY=**̮0+6κ|` ׍AD1ߪc Bք7bIe30gPP3'FLy;SSg} 88\y\OT;>%_fznB6TVW=:DVfaE/.Š+AZ$Nɮ 2l$v򻢅a¥lo ) CKWVhW,htnLJUFGz9J2x5h GSZ#J\tj]UýĦj/nH1|e~6HU j]j=k!WkbRbXꄣhBwaiG*4MSx-; 2`HQki*t\ct l6EǀY4iM jU d5Qf تD5\Q1!|dim骑և$:ʜ? O^v.qPej]eRYYW7bP+- +ؿ f{{2:Cd@SfHc8T3@:`dPTE3yh?x⟄YwWXKt^ Y826>$ =*E`yJ1-`{s|pU>l,X7 a.Iisk|{.!@ D#" o\ 6XR[¬ɖESl ̬VAe^-fYrpUĜekkSU,K6՚BvV+-Xj,1~ِ\Qۑō(%AɈﻹ@M{Jl=5I^6%w7S_14O j0YTzȃ#]6"NY WFGz`d-+ ØitS]E\z^1|\ :s%Kξu2ߕ|htJ+^n.n:;ւ!'sZeV;^zS Xirk/ ;nduj!Ct+piZju7+;qb\%dALpQIz\t@XYt꿗Ըbo.J.]lGAa,*>ޮU|-f)鴡K!YW뎬˜t'~',b9T{ 5jO$ki8 ]i>͇ks\L~90.`5dBMݘ۱Lj$||`ӯ*t߷cXe֬^SJDÎi6T,lPC6C}8 8yAx pp8 $xZo6sZ+ilHYnڢmmQTC%Q/gD=>=/DX;#N~gr{W'_뇟/O{w813Vokqp7l:ςˮ8GHkhA/q ?`5a~){I^097; C3?ơw^|K~xvANi@!pc{EߒU}D{))wv~Tm)=Q9>>8[9`;QUՃ;rnK7ZKAr% 9D Z< VK@'8@`s=z|RXOa }xɳfrEhC/H-="\/-34q@Bj2+ތN:D .PZ@箝'ucE#~MWq{-Ȏ'?-bHǞp"=gtсS㭣 lBD99wxR2@/%Y_`.j%Bf3>qAfWޒ\LM߼h`\sH E>)Lnfq[F8F}0ɀձ>)]|,%8gYEG[a7]P6Y`\i( 6#/пNᓊ9U#>-Y2ZYSc~!sh #RTI(aŖɐ&+NokPfzWN anQ(>?Ӕ$x±t8Cȓ*pkQ}bDC"Txy2"1w#,$6%\dAH~ FȲ:i%JQDeJCqJt-h֠mn7Lkc3Q%FTsz,IJz559AԚ OH!V5< IX+ab1Hbob_%"Ffk_LJn.;@I_$=w9L%^˓4/I@wgHO}x7tO nn9xX[O8~ϯ EQ p'&n$Fi6v)}|.߹&$F/gQE$ YDɹ/] ~z}v<  ϫW 7i(<;bvy;?2>ޫr$ǃLF"ir/GT$ p^xBɜo7,"ibě;b 7?4:O gj7|BStHt$}S4qGbWsewyy~8O)S){m).wCy l~|KuP:,p`d )ASMIp'"D[eq"۽^u>3̀}\Ԗ^PcI*<%Lh%I/?=vRg/S$OoHI40D<Ŋʦ<ࣞ+u2ڍXq(ShOIzuF^*ƛ y?}/VCE 'G}):7-h-hM 0"X |>krj,d4GRM ZQ b^e~a_ ꥵc.ݞ|Zy=UZt 7Nd.FL8DL2-%$=KܲllTNP꽖˞a_wsJ6nnHHm+ E_w+EǷPȕ~  z,-Ҏ nbHu3Y? L etNN\0JSEPE|U}evN*ś=>MX)mA(~#yl3I$2 <3_-h"'<1n?"𕇶*o ]}unK%e*~_A ZAp௢S+{]MVZDXʒn & --G:(xZo6S?R+ilHYܬ6M=>D[Z(*NP!zYdxߑgoqtjLMD"'vhujl'm~<-̿sҲ~;<=3,ccl}bYf9teX\gS__&g2wV4{€, 6Gw$XdC>f%̒ ,as蛁;_W4N#dӕ}_}O8 ZnQ].zqtqvtq}7Wgn|yw&Wgg1qf2=Sk]{fa`1[ Ӏ ?\$$B#ȓ 9Yu_xt+)# ;䮀BiFsqDn gayQimr{mGUH#q+,[5rj RjTao@knqO\q(l;bÊbw{+cWLgww2:0Eÿ IR1#7ƴ+:`rPlQp - = I4 ?Y\&A(0LY2 bجrČ+ȅ#VB9^?Bt7eʈQ{iV Y!a|_US{kI|0QGiCTTAEt+@/PW|XQl_?bQ]xG! CprKIdڠca#=/ Kcp!3x&E V?sa{O HaKL[|tmg1{J!^_k|KÎan,R皇4c5m]>N5.?{.'[P\U3{rpy$O< յ}X%ЏHfr ..N; wxSMo0 Wp!X`CvHͰ4ȶk%CE$;CL! irXp`Js)f^0ɜkw#fy~X͗9 /v v۬ Q<3/4('m뷑/nS ].M>ٜ/&}nJ3+VZO@2ks˴lT4=mܝ ؓad#I[pæjVA辣ѣ,@Z)zAUԅ*VSxA۳ѿA0뙣sxD/d<!!`ץP&3z1#EDgx<:離(dX+ITTKתipćv]]#l:u߭ekK}#1zTi,c2/6RWE^hP^1ʥᲝΌ& +2*i¹B9 __=> ZxV]s8}<<ĆBfwq ɶ3MSFֶ5d0)lf<\*:F6?B74_OQ&b2YrŴSt[L27\~($܀*N9 Ӧ {egFWrW-1EA\6`Z{tQ DX2EbdӦ2#H2ʖ`1O2V's5O O͂>U4k@<ٱg=@uV4J5sbTm f(:#St",(ϸzJ*Zp#~825-ugώ{X&fJ,ԯFǞW/k!|:f$/` A ]B<ѕv<:;\F7Dxݣ;}ԩ$$,ve H'GA,!q{vLy{@C< `.tp/#]YK eP+R_HhA J~E2-HiWɉ*icy[2M6G6dQ3rtP*z(] [DL>E0G҂qձV:jdҶ}Aȵ͑ZrYB+$X3+ 3gH ?g? eÙ1o7] of>Mɳp" WP{šdѓC*-]r%kN=w$n `Wskvv|1qnc\1;]R6;]}\&W'J:H懶wVڎߨ_ Ne P]mY$HQx.Ap^ds|AV T&D AA$?L9xWmoHί#J 8L勓k:qT}ŎU.8034YĒyjMς(\<|4yD> \xYmo6_ 4 6 N[bۧhK,$'(w$jX6`X$xwbY0w2"Pf0"zO-Or"ŒG\ ]nr̶<]xM`lxM'k†D);xIej!US}3|d4yFW-p ȟ䋞uh@}g|7 }KG^j|vu}7W<>>?Y2 DZ %KCf0웂&\Dvn pR )D4STH4Bb+R'aN=HіYk*#1 p TMPTCstIm<>ͣnMUXj7]DzYU﫫`Q5|wJ54P>U|+K Q3gSݶnTL#XQ+=1J"Q%`|ENZzOi&Lwv}1ؘ펍aFFX7i?H4_ B v- *zϜ08xDSi$~= "0a2m K χ[Z;L+:{nˉܔ 3wմQgT '1n *14#k\+A/ ZwWE>܃-~k&ؒyVMKߗ;=\L!d'{mtYI&K)'1<$rS :P^eM+ܖ+((YE]`"Y"@RP0{Ӻ+)麧"I֫E3`MiRZ_+ʆڠҦql&v&7-iyB^YS;~mb[A<[[VB:Ll=˶Lg]mzR"8/&ձ^t4F2bN ]@>xU]o0}ϯKm!"Eщ 1Ъߵ>Zڭt {=$,WiۭyUxI&i۝7$pO)]%70h%"MTb![=d|MMˣr)lFi2sa+OJm! J6O8YO5 (0Bdx3%4zX~$2 t4#kc mZfHf +W&4_#:c'm7E{eڼ*ɻ5)"e<$(vA+à {g0QrVzyfP?jrK8Ϩ–F`fP@c続8 "7j1qoYc]*رVt }hڣDY\{ug t"O0;qH6>ÕlÒfYי4omısoEnj4 .gϲ!O,&b/U%v dYa-ľP?q //MA xW]o6}ׯSd682 /NMOl{ (H@Qv}j3NĒ.﹇rkœK1r{^&"s1~ N?WghS8&[x}9L·X,Eߓj_M o :>jF4)# GsLyL/z\^2xr!ΔSW O 9!gJ".ىfT͸Be3M5Bbq|[Z,y`p>w'yڳo砭ټCWqk u (\/F & |j{P0 r\ȸL,OYƄF:u (KU(Eɟ i c K 7mU+\J$1 _)@D">glERh;V5޷ , &H9adVvEד .NdG;r{x뇇I4ҪTk|oS- .xܬyAf-`"Bf *M' Of r4D^[*ÔGPR9S-jOȯ %? i2.X T2s0~,[dk[XQr1V CgﰏktN+T9y,LVVUqbM֒G. r$(c^p,8[{|[&)P 37w)@3ϔ2cvDGsjX2Q 5$,bS^?vڱkUmZvӼ}o0]*Q ׎V3Åf369)6r%fBo_Jq^o}oo/aHO/q]8x2>L?9/J@9ͱu> ͤȓpsF39:CWC4#=~Zּ ?˶_8_WWӚ=Xfsv{?TS'oJh4:;t#uNa%ep3J6|u{(ig]0xFcO )tAje( YgL6e=H$)+(@Os%=WލH)[9)_D,ZڒK2l^wca5k[Ne,$P4/.PZ)zq%oU@KUV5 a*E\TVQ5_a i'Bx*J-|!KmG<, j RLӧ8=Z0m~7rl:cP5nQ`oղK/)F}tɰP+;~.!)N1#v((˜G* 5bBW=cnwT*[,kTZH"y3dDoarRUEUݺ'ȕ4*Y婰3d6L|Tf!gUyܦ7٪bսj5Z/*.>0BLTĂ\6\7h *: ljî EI t˝o]ݑ1$[@WKhP>B֕zR+Qʉ#U bQZl)S|jԄ-%, YjZ^Aï]6]:V9sYLjU'gC%< uF*al kUkѤ\HɊcZG)O9$3Pi2?$&Az}c7<ȈB" xWmoH_1| Nĸ!Vj\Juw=^m^CP~k! I?ό!`2"vLd6s5=~Y|\mps9H^]m>x]=C>>4CĴkܚ-!~Q(-V^gEH)넜crX 05Fc4'H Xg!AY[mbb#d#&E (]}yWی,Ty_W\]lge0 [%>="8C!פ9hʇD棌MsK30-[_S5'ݕt<;t+trI ;Ir #1"mΖCөk14q&nÉ\A$@_W *Ǐ Gw b,d&Y=V)Ю|΋cS@xLVL^MqQ"}u༢][#PaՔrOɛFk̑6(u'$(yV6q'oZaռh1G r = V5oh8rcRaLH\҃fJЍq T"*piK3JJ\&\ ,'dtK(Ue4VKԧ1^DTUc.͸O5kMEdL4G'! TZTq&B.ut D& xWmSHίfM1UF/uw -aءI_C^$FSet?Ӏηi 3.H$=e5M'( zf~ oo E wxVn@}+!԰v8i"չWmf[eUu/l0ΙÂ$ЙTIn9MDP&㞝ڳgOק!_>alp?w@pZ徵!]f3k;J-fXZVf 1ܧj&湑!XxwsS)fB;gJqHLD?D$vY ͿGn}||k'awIEtX&]h ̷:(*V ~LceE->,9wΎ9=<:zYfvv42{?:j6%e8.6*y.gJm˸K@M=k< 'iLI #A12) Y*9d .shYF{+G򍟣ȨVۘEO=CR%)BuJ>1e뀖AWӘv˽V7p$@eo +Ũ:,F_zeP`9o*Bi5)?wGP`¿oPÃL$><,:<@Wc@ V|Ev^Z+$iII28ٟwȑFwZnRM]rjNShx@ ^}kK&CuK`aK±ncj0.I5p 澨 ШMUXXL[YF}X`HT"=A8Vt8_Tt*p$дLqS=ƆJ-VmO&ٜ8gtPE2\_srr}m2^ ݂/|u\EH|R8pȫtbRWNOkol5CߎWgH K%Ha<_VT9ĸky\$xJva[6/VqKDeAz+o3Ax%@E3S" [Cژu~BJxXQͩ!@fqLsGΝ]ZC]t_L9#{#;E_4GM&Acw!xWpSP}WE'3S?MtHdzmwZضC*Hd<5 黻縍e !z]˔ 9yB xz=x|| RnEjS6}* Vn>AEcMbol"wi^l·uq~Z,qmY% H3o~J^ONz=-< 疁Q=DbXKt^{ ,/+A_%[XaukBHP!C/3I"/G KDhHIcU3K.2){"fX oF2oc92J٤1ȤĶ}q %Ku+_lC^M곢AITڴf]*"@#<*sqX-ȴ̊{Q-J%n4vӧ[VwԒ:4';ez"Tj[PJ {8NTle=/4F/Ntwd}wdl~."F>tj.9>)IIe n:kTUP0MZ S 4T$] xF@ Hgb'CS8JS[D~UbtN03"].,;2qu ,6D"-m`SO.)ny<-3-?KB{@h뼊\}68B.R[}=\pk5-^lx r |+pyLYh^;;0qiq7,eYYɆ -vf> wtVQXڶK8\klgzKZXRhCуGϏ*o:lg)neۢ5py.h9l1ia \>sZYHj { ޥ!{U9-Q,M~9}UBLUfܗǴEs )%Yě`A|MMLPpOpΈauP%.!a4TV+\0&0 =32.IKsfk,1v9qP? whGyk{nڼ(dEf:y0(* ^d ((I$ӧ8ɧOj IKBqRJfL\fҧԪN2~$FАEE8ntً7܄I`>˒q04!M(E[:w^+Lgi0m0s`$>` O^?~ȿ9Hb0=\w(Y@t/$ 걃?/`OGЁ,1yga*Ha 9`hu)/pǴI)22 ͳ>ۆJoc2%!#ǿ`"!0DvM%o8MQ=e r0a8auBm5o1W=:>u|9\ GHcoyLkC V̆bC.Q}RM%{!tz.( z[|U`F(Ro'5۱ă[whܰ,9Z=mxbQo⌅`?4yb5ܡK01ޠe7[e)1D5M=J2|MHS `&uڇ XCQè[eEg'j1^35vK4Ѵր-ۈXkQ9u R| ӖPr1{w|.GċgU|1w$y (+L(Q) Q3)X?CZHh.10QJ8 ݉UU լ:jU-HAZz\)A$>vZ xLug8X ۭ  W {5D*6@Ԑ`Av+QLBs$&_de RwSVSm7 \5xҹ.Z}UI75-C*C?QB/Vd l ɔ.nL-itbc`YðtyJ¾8%!YP `֩ϒ;$""o0ؽE ItY9=,;N2' z m!đ2Fp*(ߝhOFulZNc\v4CjqF5=X:̼) shBnmφZ9VlLY@0B[@1FHK^y:P+) r6%(o1&2]ЁUI5uETSԎ)* 5u5 ؚҰAYPFTҺf̯?5',Segh]t-|/ʲtɪ*eT䡲jvxsVˋu7<Q{ī~o9~D*ot1Tu| 757 +N|^Qg]/j]ɒ`;1p}S_brݫkɌͥɆVl{?r3yx"KQI&ddhєOug:,/oewU6?(mJZ}RC򉊹Tv q1jim']Fe^22CՏ)B09~@Aqd,k?.qabTis$3` ӯ wIrFx\ms6_Sf.L#ٵ38:>;dvi>e(xHf:x!  J&xvv&A8/,=Nat#v7К|{>~9:..п]]" nId6{uttMd6{||>M|50R9͙F$z hbA/$& ^`?!Ə8y_83 ̢/ ʳ];~%cyQȃ/~#]GRGA=ًk4 p34Ei1ի1ɶc?,泀S0a4.FWYK07opJYc T)`vtRVG&2HX.5`&bNu4~|Ea83aߟ4%/ ƅdt# J6 exV]o0}ϯKhCmj+eϵն'Ćx qhUI p{8I3N`*t.U՚"OpOS{bߎP&gKHN hBN+^%6&%d6Ug#rXa fs4xaIެ$J1zR0 Ãt$Sщ Vp~Bi5I,F1߅C~AD]ya`Y䅍fދwVlYZ_檑vGot:Vf Hn%08}2zŀYuk0/Ȩw$ Y""54`pQA> 9 T&o Y 'FݰFahNOU*w3XMгH>b7^ŧjdet,.LJ,/ܟj5Zz.)RmaSaո(0kWOu04FBэDFw|(ۘD7fHp>~ΌRXL@p@HQ   l>!&Q;{řL7+w4ybw>7l)B_͈)DHQlYq0v1Jܛ?g^<]ig}AYX9l8I62206`:[,Î'yH t^@!QHTqbx"Мhh|ǟ5RTڏnRM¦yi?9g)+G Y)'7ʪ{srP͈$H8aֆm4&%R7 <I#NфpEF.aB'Ed`I#sl:⻁b:$1@'Rv<&YdxF|@za'DtNl5F:8$y3ZC%+$FD!o 16e텤tEo΁S{f_4"tp'f)C`Yd}9c!0DK~ ~>_aHNލZ0̕^uxu@sߡS D)WR,Y`Y`6XS*^)=5&T&mʚ2tv:k`;ֳ`OZ@HUY#)u5:AI΍PV T*j|-;n8G%ےC'W@Y#өxa)RrLT0(e[#_S'W:cUP-G<'G, =+ -M xEJ^s]Yک {2tBQXw11wGA2 cRր"KP,[,k |^{䁐>U{w;Rvb[~'zB2T{z }YFcEtORTĉ囊$<@p)[E@vyۨCyɰ_.{~{ .FvmpfUK|9_i:8LI1^o]+/m]4o\ DTx-z֙Ց`pL 89ˋ|enʰ1{ ꭵ%o/+ 7O7L@ox[[o6~܇@k%K !e֤Tmk%C/H)9 R~N=΋8KOLJӃ1iEq<oŏ컋wD+}ͯ .. ݒ<]<=]9n7M|}Qi7EL#=h?[ ꏧqӷ W 8yhVwEy~^6NvWt8=Axk,4O?]Qqѓ㫳㫫W{G-^e#]ޖjc%b%KNxYYo6~ׯ`8@b9-E N6wS@IVe'X%˶oIs~Ùb|B4', h|aw{&"G \)b~t K4˯hȲ8Zy|Yq˺7,kXt']&* 2=Hk=%؇ xHO$ {7#̛$ Ih[а&~]꿡o?{LMcl1 89f@}z$BGCΐ0[ՠuuwTNOV;Mw  NO{=Ȱ-^rln7&3]-,9 2c4 YH"s3Q$61e(6b3!-.рC)' ƩfuR"էAeD4HʥE ~ %&fTh?.V)J1MW8ŋXCu(U %.K))խrIJ L0XiS yĮU(LFUPp) 2'W]ޮp?<^to}sL/c@UE)VTE_mj" {3-8ӓzA_nŔw8Aw*lҒ.mTE#erڤMYS- ^R2q@C AUߕ(e)LOx= r\^ۄFu~֚o;ޥ-$Q27m:BGtDy$#j7fM8 5gVOW:H4f`5@S(գ`vXW(ju{^@V;X7#\pmO Hޗg 14<6s2MqycYc>z0+qUWGnbDžnNH #:ב(] .m|#h"h>&~ s\.w9LyZH.`Yz@؆!. 4gYtq3Bwƽk:x '=e/E<gfʻ6ͭLh ZMz˾,R !s(d-/yŜ]B\7qh:Nt<|!Fv89Gh uXsfV6hrCwriPWpf͜:9f jac[M*{M#]Xr<<߯Ia.=hF JmhgBU XEPih uqDD@#q 9XbZ9ҵTs\\0.19iM$kLy::>CIPUBUbMtQYJzҞ^6#A rH^ LКPAtEw+V5+fxYkmWDcgnǃV Dv"^+qLί (M N&Y õ.YIEk^k@($$%zv\_( i Y&,GMscǰt.ڃߗ]_8;mC逐_6!AN3pd)B%+4Nִj 9"kEd )Vlͱ}N^@_NxL>ҺHx|é5BI1T=fgWGx2zGRc֘GQ9 y7[仞l"x6 Oske5.zZwφgur^{v̊7{ժl˰Ɍ̈Xrl ~i*pMh6;N/8DI#+TP B@(Yp` |C>}Ƌv.w8D:8(93HL9(@ܪXvɝgސw솁2+Ɋ\(1.)rNFa.X鳶Ok/SmABndmbtk2N6 QE / 0M+N+TEDU@Nj(_BBnDuz~E2/ &@`82\U6o t?7Fzyqy~ #(-27<AFKPUZ_dinsx} "(.4:@FLRX^djpv|1248 9 ? A BCEIKNPTU[]1248 9 ? A BCEIKNPTU[]^_a e"g#i$k%l&m'n(r)s*t+u,z-{/123467:>?ABCEHJLMNPQRSUWYZ[^_abcdfhikmnpqsuvxyz{|}     ! " #&)*+-148<>? @!B$F&I'K(L*R+T.X0Z2e5k7o8nllrx~ &,28>DJPV\bhntz "(.4:@FLRX^djpv|MNPRTUVWXYZ[\]^_s:t;u<v=x?z@{A}CDEGHIJLMNPRTUVWXYZ[\]^_`abcfghijmǁnʁóq΁sҁuՁyہ|߁}~    !"#%&'*+$,%-&.)/+0-1/3255677;:?=B>C?F@GAKCMDOEQGSHYI]KdMhQmSqTrUtWwXzY{Z}[~]^_`a 2Nh |xV]O@}ﯸ[d`vXM\5Odh:ٶLޙ ÝyΙ2CɂyUXgw.n~_!Vy*ۄՏiݴ0\+CEHTb=B7{B/tX.Lմ-cF#JXp$q6fһYvͨ I/ԣWR ho󾱦TxUBM˅ E"w'Ӌf Nó۳gz6멛w{ݭV@ky}*pҲ'TR yh0ie  BP(L,`":%(::%T1&',37fqH`?Wb2,ZR`h4Z>;jk"KA&gL"Z#|i x.ϸvWqQr*!$ y7(y/_fP*DhV}^õrpdq$LZx$+FcH؜"o j{1^9Nps2jbגz)|m{w,Q"d ZЌDYu9m,20rh%<@WX RCY!`e%Lr# QAܩ1?;1u'#| ؒ,#+#+1m߃hJr**d1v@Jg)܉ݛ(d$s!d*/##W檕SSI mD02 PH;Jѭ=+P -Zg$$\( 3/eTޔ )$Of"ZsD0Odk&q߾of)\"lM8#@,sC{Ը%M(`4m_+Vf^kM؜Qt8d}O\XpN 9VUgx7Ju*PXJun8@X'xQD+" Y 8TLP@ >_aJ-h՜@(d1v;jK9@НK43 [r)À&= Jm̾7h_~~o/\o?\ܞޟ>~|oN=-T%ЁNOT6C:9>ZHbߥNWTȻGɖ1iMo#G19%(Vw_PL{{+=)mܦX3?e(﯅YwYB?74gsj€$a` 1F/J>_Vzfo蒁Z9a8Q$I=u TUjwH˄3 4ڸQpCrL5GmB] x Bua!8X5 sr =wT.1tӧ I me lċBIy}^`虥Cޢ/ h*Y)Yϊ;q2WO}̈xtYN>cSEB_(EI( هrʄrnϔ(qklֺ2RnI`h=[kBѠE+fS?LZ_(5%a4 Y q)}3p4i~8ۂ/DAպ; pfL0ָcpRJW"V MnM)p}Ӥ]G.+ǨoN,ȧc[chy{G ^h.p7dYjJ{6e76A^;4&tͦ0{zT$[M|$LX (%8NzX:2Ke?NMgVռ`y㒌WWbdJڋ_ [ ypeQy՚݃%.EIpQʶrk\`˃{Usk>in»S[A1źAü^7_][U}UoYhV^vUu'04UũM4Te=Z ua:$;ٹL$Fw_Z;\ꦏG 2͟`+Re]ff6<3#z`)Z ڕU-jpQ֬`@Gy^t)Y0kzD7+/W[=lK9*č1nwq!V.VI;rul*f^Y7iV+W*^w\͔iidUidM4^+FB؊}VnD?7OzU ֲ!UdC@?ku_i qquPnxX[s6~W!Lb3$t3g{yZ\!dvHf8mwf:;:egcʢyDi4d~t O(_.'hȲ~;Xq~x 8e}7!gZ>szZXzy+/}&; ؇AEHχ$\>S"xŸWW'mWe+f b9gI䟭*ȹZ]`>: c!g An1j-ehox1^\FΓ;a۝y@>2l+ǶR%Jli˩pl KN;p {p~O,xZ[o8~uJ&)f:dr}*h%E5Z%b-Dy;<7ge@y CB/y8?&r`Og o?v~8_ȃܓsqzz!qx}8yw*(fJfK5cd/ˀ >?`꙳5[HqtMC:gbh$= s@ߔzOs%2$  *BnB32".J^1|Os6q*AwS[)Ja V6X)=I޹w3Xml4e*8 3c@KLMF Hsf,DžI{rrŃ=;=[g.-Vm1ɉIMc gǽ(7:8~=.a ZNL J[R$"W& 䉲hE׍ؒ"Yޗ,a{Ft'4gGzP)|L.Bh9ab4#K6D8f+JcaagSb Tg1DS`WvE*Si* lFb6QM&౫\@eqjåۃΫF /~a.t U(c}iax{hUcWwaԴ[z2Ogrqatੂ/$) +MёrݳVqR> pe 7{#/П:6T\Κ8{ *2v riA |=}g6bl@wTĜ젾U=z KLd_e(x^Kt 6^OP#VP21E*crY OaomՎH(A2/Ka;BY;y 1[u~4Zaں d\JinXK2aH3a0n.7c+3"pxL/BfZ )zEZX97P,مZTN.jϘ}WRI2ڄ=Xe`bGbH%2?cyjQt(\/p Ɩfˀ]2Q־cI~&A 6:-Mתt8,Y#.goqvsw{kkRkL4HiJҡ5 jN"HB=겓uW8k" W4*:`ͻ}DhmhmܨfoL:%x DN FTۀS& 4;Зr`,植Z0`̘rr`Pwk֭DheNҡEk9m.;Uulg7V8X^"lp¢t,[{L zM^O`@ 1kTZxX[O8~ϯihP+H3֝,3}rq4c;MqH@bwα9Ie}ӵNCtܷg|tٳn~}Fǎrz87O7/Ow@;us>=wbYv(;O?7aDǙD<:obscG OafG0~!sQBh~Z~?|3:KEL8IzxNofCPvt/_Qee.: .{eşv<5Kvgg+ޮ"x/./κ]1eN3+>ۜNmF=xBlK\X?'W7z>?"0Xeoyy=H+R<JGهZ"HԳh4K0"i'8?eRehDZ.20LSτ~.9tB08ۧ~ syC#F@}5׉e:EKhИQ>XG`{U<'K i5\`Ykd 9kժ`ei rF^Yh9Јщ]poYahFEC{tC>j,䔭Ig,}`z7=pPr)4'*ֵPF)):s.o6I@i=*ջ9>!)#Hw320jG Gr-\[ycIcMֶZ!s$1ʲ6f{fAB­YkRԇYܮvs=ͥto簿^u㐋65(`c*4 ՌsLW[C(PoǪPS= U}jǨ6b qDx Q'ND$5Ue1]VOڅ5G N$?f}x:Pg5ʰvܡW91b q*ޑKOH]|DSQ86%pFܫz0:`u@BE$K!zܞ eVZ, ܎xM՝,kO}mEfU X*! Kh_\Tû"? |CDOКHK$2!)tKuj 𷶞F?^i*uJ;23])}VKgh ]*Ktǚ/YZ`[J(6hql};;ݕ;s^kƆK-j"5Q<}Mӻ5kf֪pq6j{PkXq#j6*jDk-WVݘQ7@߫07юrSzky/1[q!9`l}q,"?>OՍWAU}uHjG[6=:Jr}nES/:^kǨC)h,`8n@a֣]&0!bSadPoBS39h Z}{{ EgR_kL6m9aX+>||SO+wk&M$i<߭jmDZebU[3`rzEpj[\rӺzS4x@⮫+\frElI=f txרy鈘pOleA|L=~Rqv.QW0; Wo fx㲆>JiC! 5kLu2t`ZCm EʜE)CaXiMrdu}F Q8Ș9X1 HG>5%?W1u*>83^ŸJ6n }14Mi,50^DKTyjMx[BeJg)!r4@dx)Ujӛ%M՜ /xӢQq)@AGoh_ã) Gn\RJ[ؘ^U:*JjU0׵ɮ78>m z|Ա&#טy9,("@[0[aܘpskL2<_ךd_8*P-:q?18Ⱦ]K+k$.U(}]޴7T1PpۭV:ꞇ[uǖǹ( ^<&tiX[Pܨ[B sO;e5f %R:vIֹeƅ4ia=.)kl,+돈gKI9җ Γ^jt)\]>7ԒpCu2tK VGW0Q -sx8&xU lrʲ WvW}N95*qz ,X=>\@yR4)MjMe#m(dX7'[>bz3pGjtMW-xukö[q rx M VdclKϒ]>]m9Q*_P/ר'=k. z1PbpնXDlٜ;t(wFA،4bw ?{pPAbպ=zv%ebŒHYF>qrw |1rc9 5XwA:SZۑyLHq -K\ ͹pXZq<7,=& lDkK`!Kz~r>cTaiq>,:p_=dGDo;[v}/x5N`z~p /13_?Wj{'VĉL(O̦L#+[gU3}Z׼O얫5ǻGdvFɧ4ŵLźeG鬃tqpü˾hvS=z{1l#&73D@]0O ]C@nUOtH\ڳjhRI;^.a\Lp)#d8&sW-k_9vZ}s8$X3|mLf"Ě: :cA&!0-,Α^4SUWT >Xxz-wᆝB)qɃ 'os;S.t a Oh.3̗2fDCWV,W㒥%DljΕi/AP8 FCb}eA0Xk"w]}ovloV<%g̰ᄙ=wCE |n_< 40l}f,_w`Rjwnf_91BfF$L{eXqSᰯ=Lj*d9_.R$Q\;H5er( 8ל5RhZDWqy,tZ,>^Sȼ+ag^3/Z515J5Q{Ngz宫172]lT OS\|_7UXC3e!*K~};Wa4O@L׸7QH|'!3<ȫ Ha! hkmҔE&m=ei\#N #նc4UJ`V.VvPɻ0ˣq32tAd82!q)_FkfHC:Df b)(ˁiYRP,Ja^a՜L;pK#CMx;2զv.'n:ȃc`aiQ> l cd1`f̚xN#+"A%tK#W򘺘: C%{PN J  K 2Fh%rp!EHTQ 4F4i߼,u4 -sܢҢҢ }h pnj(e;9Q=Jkv)bYj iާ9#C³(c+-!Z_S4/3IsJNUN$@IUщhTxUhƀV! ;/5z;Y2,`!f=st|{ppAq9IC}`\6&yݞ/#hC C' H d/- V2"g]V49νzP ;br#N§҈a,8+ /xe¯\kssJ zYԃ.#쬋.`̽O-P<%b(bm Eq.$GU»䩏X:_ {,p8k yQ"p(cs-@>ļ8&Z?P#0< Ws&A`|Zs-_$11_cRUԘd-$uh QP(\a,?lȆm7mekPԨ yy>lDEF&MH`{2.]mKDY {#bDC+\l# 4L|#n\%~\)' 4M""zJvqjdv18c2i&޷  TԮ~״1LO b'A͕gy3IH:/g%>|R2(9PqbT4d(CI%HTA*N;fVhOv9{k(&f}! bfa0f?jx̑< <9ɑ79%-OZWgKnTP5GIFqX }$9v.( 5& NM"9FB1UKK+h.ߵGiR?=#jy$r5PSEKKOBّMoyxqI͘\3#'4 s{I3ʔUBBV5bL+JW#z<τL 9Cՠ LakX9EGGGb2l*ZK= 7;⪗*My.54h& -OУ4XdC KTA摲;8x򇝼b/*X 2nQOU<'Il ~M{8iV ~7wI>G,w~{iE NU kx]mo6_s 8ޤIpރIMΉcUTk'.o*⫝̸WD3ᐜӶF79tpfݖUs}#W__ b?#՚,/|bq{{{t->Q*h3``mJR~ Ѳ%xWyQV<^j{L^gVu";V-y-zD뺭Z6ЯS颯<}w跽ͷ5k>|x'5){XӧO><.Л/NIWxQPQfa<0XߩEJʄkvm3<6AVn7B+ ~z^ҁ R 'A~zɇ==_go_OӼG޼OvlyaP($0Zf>܍CĜFg/ Ȼ ,lRLs)0 t^ˉ=e\7$hdŸ,]C2kF25NO`b@D⼉b6mDʰmS*"-p}{ƬæyjPyq4%b1CGOLX3zeha;@D3SV:BCBr3B^Ec%j:؉3W75?D#· O~yyH'k۳YB IQs,8A.-A+$krbIaí1eux;-AL7fcEHik)tp6jH}B1<^vPd4d@psV\[v\ÆMb>i18boU7n+MjF@۵GQ(V/ΗfE-ө,-CMLMdcfint*<漮E;!i\4vxZgwy *q 7lcHV"~,ajXJCCa4j(ʖc U35nͷ6מP+2eU11تU+_g$;d\W>GJW|h}k_ޠO bd٭p4q)QOT2:xg`Wn]  Fu9R{([ءX'1si]OB`)v!]7ZXSh {dz2 ;CT[qf*^ن_j4bŔ`n)>3*f 5 XG}æzV%CʌhN;үunoV ٓVrh [.fh2N䔌/qvFRF/2yJ.i߆,x1$P` qDo̢ح-*WjS"uؒ\5P܊2[v, 4-Y\|`r)s7_b~j58!\ ZrHؚ-`_a&7]#)rݳEJ@UM2 n25ˬoU\ bnxQ֫*6FE٨A٨xQUVz BlY *?6uyŤ.dj >M)zfɇZM("/zҨfHu.P4_]Y (wQQChHqEX@[CV jҡE_r鄶S! MBKpc_A4S؂x[ms6_S>ęI,v:ꗫ'unsw_2j0c&M΄)msڱYd.g&RH^22G*V-"pmje"h8dzrqCN:q(>>Ӝ/6, tšGaAtHv4'orl)Y2l¡ws<ҍ4I^Pp&i;'rxcc8~%9.a(XB6,EZ0`6\͇4 .i "oj7-7|eȖs9 ގBK,ul|>o{mS+nt-YWӖ(w4Q1W\~}Xj4[^XܤiATW,ԅ3ELu1B׾MLn9a Ⱥp*ua2Ƛ}}qfי;im>ӱ[Ar"pkY⑀0D3 t%墪Isf;|{ jL a'u ]h=Z `N >BN2kWLRmLUnJ3S}gl g 3#_K']hLq ee竧 EțfՋ:uS׹Մ"Nb_i]@߭qEֈzC1oEϵl2 `&J[ͫΥ̩Dd!E/ *TT~oA}Yox K. DYڱⶾ|sSZ,Kc=D{iFoOC_fM*ˢ5oh\"K h -inR .]]v=W%.*QjwZ9x:*'̎>HUR<00 7<_ˎEio"zog*!_D0`% !B%(=n*BaʲT$q$X.)g2_T2E2\m:7&{}2.} -ߌi?¾ٱ6 '}~RE81N&]$BtrSiCt,AIUyEhъ1+v\Y!ZJqЈ¼NNI_`fj@i˿]0i|+-L|8ǘM::N1oRrX 7,"pF`__ӈ>AIq{nyN@D j`*T]r9Ҝf,=w^|,`u\bt8R5KP*S?Yn"d ? Vl2 M=-۞V||?kx_l6?kz,ܐ$,{# |ͧϞ2zaOoO<Gˏ~y[OM<:?x (>z4l[ #ӼY27ޛ}V||~89A[$0/Kbi,nh$s a_ sa,jTJ)˅'sj,zej}2ͷV*\ZJY.)qIRs}8 : }sW蘵Գzb<1)18@7)Hd (CW5B6@Df+7GLjEAe6b?ϷmkTCzQ(c3Pa{kJO=A\A̧0+XHHWᒩQ 9TbB?S!  ̿du!6)qS$/7Wu.t0{K$ޮv$dmDȉJ a5YM+0U]0@(r[k.aL"K 5 -9)Zɭ2m)_~2E du=䷀!~:2F^~\ƃX0W—6 7n7W}$7x_S`" }`XMhYWG ?a#jQT(zPVY5m7좼>.U,=K<%ኰSWXY!rt&pJUa< |+!Okc>A*HJ$Hw+l }pG-`‘Ljbߔ-K@! ڳXZ9i.x8hJVſ^d(~d'8(OsIz{Y> eyp9$ )E(9GQKQsӎ> zAϬPy.H@ 14m^ܧ4*:#0t02Iϴ~?ѥiX4-DXb)st[yИ b1NÁl@G b5)**ω9|T3TH03œ2s# C|sZ}k %D]:qte%%C0@kB+ d&13q&HG%5*g:JKE ]7S6 L7LUy>aM3WU@qK+/jYWE lS!ucIg%Dl陻;I=GU@JhD+fXU1Q֡!# 4}ՖB4T n1N*5->B. >=ZXIJw؊ݔUW9Vg`W%a_Z61`5Ӻ~kU)tM&kHO)qFGQGQEN!/@ʇ1䬸):Ϩ4uX;h+?e L];x[QS8~ХLCj:m:{bXq4uNdDZe9q%JZV'i{}; Ⴒn!X@5^[꟏'h {6^c\u]}x@랜m8)G;Lړ6{ɽUZvTmځ 67%!O|. FCqBMO;˂;AאqLTWZ:<&C~҇"P73AߦDK^/zwzwz }w/kܝ_s{{^ݚxj?;:VEԩKчÖdzI|jv o;l8’viD`$ 5 ]v(ih,$X__|iw7IEw,.wpWCrߓbd@i9T>?t$QmkNg=w$ B rE SOiu+}Rar ,| "On@'SvU-_H=S15kӶ59  ^xV]O0}ϯ+t-mA]K*=UN&n%!R!mO47uwny kF<qدz9.DO.a}=?<o:&dhYNz,ƢPiHȍAir3= :N31ύ8ex4&tb=T%Eq3}k}n<|\c[DBm4q|-)/lJ{Kv'j2ZTqa3tmw7W_l6OEe筕Cn4)%8.)E5*y.nURQqṄgzEsL:n9C5OB\\r ".>(AęFf6}K䶷'O% 45pdxv:\ͼ`2,˰g(ibR87EFͫ%-8})FD%'@t^VKhLQbKp9:kSҤ@<hEUQJKm=Qh'A߫krH%yP9޿D8I8q 0QS=|'#ZT?Ɯ#34z0[`R Xe;1]8@.ȟ:D;!,K&FrY1P++5kRIEw1X7z^Gߋ_R+^^-?R)c0x*LEr z3ţ.IYzxF] 7e_v++W +GUgTOkz5q=ۖxX4H\zWRF}sP\@(#&"eFdC=X4byi<1c]i $I廉!dډ[u'1d РF B]kZ7~nmr'#nj W]ZBa!e!PF"7EcfRB$4Br >PݛĞ š^,Dj>Q}2d{ܧiDDUTqVH,94tnh!K@Fx`9hTkhQP4E5rt̙d5/]_}…wюbhJ M%cYD3fj\fgI1(fj=cC=dB)8J?X(6Ƀ$Cz>QZPt6(+S)jMc\Tī .be'"yUb m%z}Ѐv33@'97>iaO3hLbۣ=rF 0Asyr |AqbZLE'82EE' 0_%0("^R3N sړŬG7DA6}蓃/NqQpڹS듂zw()42T+YHP=HOVA)6y` tX6͆7lX&/rk l F² @`66`{fIl 1 +u5 ez9=H <<8_t'xZYSF~ׯLń-"6G M5M!ii![3#ٖ|p,*>>| qE[iQWxS>/q/mطE~1J>8[V})۶= ꃍ}پQ(M-=uOz(MOˀ[cQOe@06 ,'#[f:{bFѐČGР!4;af"6tܻc}, Q2 +ý|w^1eeVR)oꕽFCMYDZ3*+Ӄ݊ ױrBsqr/>.o!^P| %U0]G J1褒&(tCu ==?` xVS@bx28AT''rӐat%QH퓙 :pHȠiT̲<K&iX&ֻΗE<WNP:ڦ3ϣpB1VvK)5oPDZWMN+ӫT4,{=+7--; (|ns>CeG"`2h'Vӕ:P.ֈ=q"9T (TڱeG1y$īÓ4]%.zZw ;ٲݲ\ߧ]-uYZZzUĢYq,UWɶ8o MCɹŶ9l9*5I[d qwXo@A@NP&7מ'_-m.eU&iжe?Ѹ;Q H4SB>i c''bc:LdO"C$ĭn*Ƌ)^1_b^tSz-Jvv:Hvo`'!P;%P<b*|d& v%p[`YW~p+O={/Vdcb1q /xPb)#qu5O w!p^=XJ~7 36UGq7"+GLyʳ ݷ1ޟ]ħ4qPAX!#<ీx5f@`1%>Z$6W7ykJۋ`?ECDie`ӗ*EPJiƱI ֺi%4EV%Q2{)y5/"C& c0AM>qxcQ(KB\;: !LS8׎hh/'z_I\ˇ|ZuB~? Q=R]\^ RQ\Oh,k*0g6gD#ͯ @Պ-S_ }78ɲd|CPt`3ǥٷQZ8+R#ݼo+GO<čTwPYJ*K02mb> P+^Zμ*0vVoHv PbvQ|/m1(w60\.y:!; $ iّڜ*d1_`ŕ8PF>H#R ~e+|0a f5ZF.+/Ai }vd4oLeK5֏*$5U%$IHҘ2Z%Q;yPZҙ_gg\q\{/٨;KOLo7wz{ff5s="s=d;C榛Bu卧_*b߇|hIBnԘyCq3nߌ6u'2TK&*tc 7bLx&e MM'aR-xZ_O8ϧX !R.]V{m,ҤMZwq&N][T&ό=3?xTAO6"Y6BAW?w@6wή/;h{OUtTdzqlیU5ftzE}R9x bŬmt&؂FCtEzyջ!A{Ԅh{߆g ǁuٔxtuQ > ?F'OEяh"EnTg̟j<:/^v$ESq4U[I0m\67jAT}?@Tt3jP4!y( & > {L6ay#@xv b@ AxVn@}WLRa!Zi\JO]6K!$M0\JR$l3;3s.܊(*lrzp28dۆ3߿||؁cWcA% NKFG4fY;òǝ8)s%m [z| +@,:V*~uQ!o|b/h$&T= T7=0*<̭i|^ت{hoY4S[=5xYxoۍF eñX6U=%r}k&&vb&iհ&Q㉃ҕ{+> iL7_QI  a~KeB8k@Nm$iS1i=8n F>U pBM s'p(БԽaܺKI%.:WLCi뽎q S7 tP)")#)h0膋^RONNIEj9Q%$U 9>t1\ĮjumK6'j .ID8G{QK'NQI4A gKv [DQv#ilV5kڌ%n4[yMs@M٬"ݠXS!/vz14*Ai.\Tʤ8c'ϯBu[5.e ig<iȧ\Iڠjx^FdaAU;( qm}+tr t6$=Z!mK^β: )g"aiRbfU EJC_j90|1lQs=@72AS4/}xjI"q< ϟӈi%%0C@Wqk%KʞQ%^ρQoրKa]] j3*Y L.myyah H/ Fcޟ خoN_* wuQQ) G0c#U`x}8!^ Tph߳L2_-l%W}gq!SPTG.G_Z+ܲ")RW䉍nW[H9-ȸ.o7PQW+$xc0Sا :nRaذ4L0,RDܯO-ˆgYܮ\3wIl>dBXWΝ|&Dm1nGO#2J6QPtm(`$" [$ n!Y!b:lZQh_W!O* %ȏ@J,%QZ*"rXeFe=qՈ!GOKXM٬VaN0/v8FEpNT 3QlAfF-!YC|j\=S MP;D=}ryEylXȬeVarfкZV zw!COC sw>%̹=wouT9-ZvVak1-EJ.zʜӼY<)8͇ "oWT^͌Oӽ4G}&}r%m` ʍa[J{i8Y*SȒ8=,$kcS0A<$8a@"ǝBY[}f'.?G91םДNjʇ4̙ em6~6|f{5᷒^[UӉOqW(uڇK^*6ᅥ!/קs?ꗧZq RfXxWmO8_1>4e)Yu)쭴Sn[7IڴMUyy<8?KK3/[p~x5gpD_ض:5{@l,m8m{6YS+=dU"dHxY[OF~8  bXZ%Юvn$xR{L@=sc'Z x9|sn8<$e<>v;@c,w21޵qs7_>\~<jۃ%, >޴6C!&=N{OF'Ijٓbr'U2@hMNHI7{ۛF">rl=rR,=<7 a,!HI2b!1?s:%:2DZK@JCҔifBxp(O !6b:rAӌH汘9LS? w}>#q ` !3WFA@9ڮLI>*) Qn$2t )ȘW(I$NE16!$*/ޠ/,_z )<cj7U;R?k@dd%=Ksui.$xT#GR00aY(ΰs=LrkZ{+f-N=COb[zSzx$wwib">y28ZT [q0a}YE҃܋Ҩ[0éL+)+6 T=uRֱ;žj%a1yc(ʜ'R.1,g6`d."c9Iw.@hR7=ߞ6NCbXCg@^>l ' Sv=Z2ߤ܈"OQ[66-}_ze+. +$=rJ3g@Ǥ-.G?F?t?sVpD b _`@btyirFҬD/7t\ R#}K]:Mn{|Jp ϖQDmNb61먶wue٧u-[Y]5۷BbM|Kb<]ܲ T }ݖRM/ Y:}۷t6s;{0ejJ75ZU<+!/*D^BS3;^cp57 j\Bd쵧!ײk( ̶ rf_4Ji|tZP{i{l6kN[Ro޳rb̊qjmZT}fd1BZ~u rbDȱ媎=~:! bz>fV:!jsh bRHuC/ljNg)ͽT^׹_Nng͚\^wvn-^_'pۻZ&.|d's#i&I"؄k tĀP InڴFb"=04Kߩ -\_V  %h^ iZgK Jl(xDS cjymTF\ָ 1FݠV\i" 02l1LE5{֗xu@DlYbJW6B`n\h,5g`[t^턫4f1:k - ̧:%,;/l/#3ALG *%U4‘j{$/w'4|_V7S= X3 [Q xכpKMo6ښi9:ŘnoIɫy]bސm _Q| DquGڭ<§$@MIϾj/,}+C7ȁe،Tm-l@pW՗q ˶q"ʪH9l fRkla%uGH Kh{M,~q9mHw7tm~YuSg9#C5IJ-]D6-p|-E0 <m&T0]Lu_~ɍqw䚲m3GL?N};Y[gEbyaʫ-]|%)oE87/›DM|:j?΄"iK)ti_Y}Oɍ'2"v TRR$ͣ}[*0a\!L2MVLswѢӾ 7f[#nqbNB,bۋOLdJwg4߮{q0~o 92۷!eGRG~8e PaV1%eU&'m>H]J&;+;IO{ k d>[)i"Ϥ;wOGQmy{lUβ9l_Qm*lXom8lC>.ׁ܎sxu~)vG :;@Sr *-.d}vOl"%beU0b{cxpT #z4wa" ȏ|dv6Uwrfe$CC (]TEa^65> Uc\Q22VZ&VbIlԺ jKNdhlIGN >^j37{Y-Cb>/WOPv>Eyo5)m|+ 6B_4f@f>\s;l&akH7Oy? wHW|i<.tbe<Lba@eUa ǥ8?\혂luO{^VINC8G' ݒ᳔ak# :b8q,;8 k/i2pۦBfgwd'3#8Y*|.a)*<|~I?{܉-XQS夿kGD9?^ΡͲX.N扌 Y3zAɳva+ dqdyPAYeX%Xz͗i)]iQBɚC2*+XJc*鞒:A)addmioJVNK0MFŪcagKPqa"4йU)D<& 6#gOta۴Ɇ[x.R\R)ҙgKC9uFZ=:_ī\E\Ҵ!F_X$J&sIyBhq3KRK̭R'.(ws䶨,gΘ$َ]"NVl1 9L`!ZIc#%6q''K(JF p"1gYh8!eKnhS$ T0ъ%FuAlG*:A; j 6{^h]V,^YYއOE#Ԗ/)ՊbQnhNz!V*s9Tn*(,jZr ˘%X۷%n35 5.Z?{\{*=oŶ 0(]R6% '۲B2 p$:(EFSҔM`1r%>9S9j(yY;hu^fV?w -pm 6-r.R[_u&jxqUꁗ@fL2sgI͚,}Ԃ 9S2LtԴ7;,j2\ZmT\A,F9rgGR%G^Ay}d(06Z ZR [\-1u"zi"vzGꐭקǐH. ڣ;AO\Dp ui\Itî$y*+8:hZ@U{>n;M5`4Wà|v˖:ȎNڱuᖨsk2a^ͩND7'z5"7<"˰G'3CC1*U1pݟy~Y}d EKfsAlr9۹ײk2EPv@@(E[ _C˼o1fo~BNæfcor4 MѾ?R< m8sת&Df)W U)tI4aD llx"M%Hoc1RvsMq,}F~ QsɤֱA31 Gaӫm#jHH{Ǐa4>m,05/ؑ5$КisтκwE4Mm%:2M Q5ym3؞qqnRY7N2'NN{2IRJVN  I2mBer K-$.N86G[?OW_2ho߼$Ǐg_ͮno~KĊdfW'[/f0=Ѱl1(.(ԟO%7E? ՗L4Kv.5!g~y/ۄy.*6I<;D*OYߓ)K **]?'[>o-}["m'Oj2g5bwׯ.X?"ob>PO6~1*$S"lK[hgцדu^&~ lqg2J%XV034hgbŻ<X.4*K[ ]_=R%9ZrE NL) VB=i4IUU򇎀PF3V@5S")N_l'?I2v:+t0Fc0eQx+RQFن@"4/i|b#-HԱCTd'~O L i?{Zf~N}%00 1`& [-̧i$2Dsc@3+("ABWSq0]-qpTA芄 :njl|)Nir _ҬUdINh2f:%IkycLX a Sd8$K6>zuGzBl(7XQ"I a:Dt 8Hto|eėMwA vyx\q@".zh$l@$-Xybg N+iGjo=1_E 7}FTI|> mE0rӿ1L޼َW[- Y?it ït+]F{!Mh~ }txr+Ӊ_Z{xy`;wv]>xnEVs|/@N.fݙ=7ٳLuw.hT&u5Nxb1FkerZes't$脁K,J rAY{,?#X^$( BE/gO4gVzUˆ4dm^\_u&jX^U qJքg+78B˜zޓ}# B1,фw.4]_ ehQT f<FDnPK` cpMMץSeFkBvi`8P@9-~?')z6M2|Z.tϯX]YG7߳K@hu[)QZb5ёhEZ<Q7Tʳr|3#a_1iM&2f2l(PS20D a>}}}Y s5QkHЂ DR8Fo "Za6ZX+Kioճgؚt'4kY{9aK|tAN,NO17t F8Dy$lW7 퀀[ᚖ0)A\Fa"ك#̪%غ0$~ՍV8<.ȆR72jhfa[ O#.o2Ư-uExH Yj6 GxVQo0~ϯ]àO m躭U'dbX51Jj%N ]CJ|wߝJ3mj4}PIhN?;=W_'#_~] . Tٮ#Ύ[,Eaӈ]|g9K+YiH[nAhWiyHDnPh 06 s wExvȣEQ֩Hj [^yq ~[*/tN{co6l{6oggS_xsFXP>'*)} A.9ڂEW ?Pl \ĺQ\r&;UWZfvu@s0)-t%l-7%%G N8DzGϖ=ʊTBqu[*=p рC~2ND")HS{fP`|bL -=d|Rx<9 bٟ!{@>(FwaH,FI a3*㢋nږ*;&4¼t|=sPm<0 c X 4 `1|4,V=_$/^ԅn[!S0L\b3S [S!14 ji PQ&'\V>flDG 椄/,$iv_P_I=ѧ\ HIkƅj!g@܃i@h_]>M56lt h݊iqQQ77Z{k1_XGOA}Ў6w/0rwq]y2~d8~|j-B&P26hڎxZ'elM1)hS*e>j~U cu]"`u]7LVuW!mlȿj U9s1ȶWcdAuCXg?η |*w['̣` Q׎`U4{nbg_3[}_JR*ίNX }$fHH|Z9aKXϳbg~c /ZCP9$/~BV[IZX>` 0."Ǵ()'ْiʶ<ŁbDkZM4TgbM,,B߯lR Z$#%6="~Tu LyQIj}۬I51 eiOvXU4uր)gW1md!>;{!re~XٺLn(ԺmշlU tbmH+MxZmS6~B|f 9!ZL~atNg]ef߻nB;tiZ>ݕ=~!po;D48ad\l<ixXQO8~ϯ ,4e)z({m|đ㴠I4MDI7ڟ^'EWiof̣L7cؿ~|/]e}=y|h3aY7ơ/D|aYժ:1^S=$J OkAE@c.h4v#wAxvو[k"xZ]S6}P a @ڝJv>1$k%8r,;& [:Ȓ|xBtO( uI'㽟:\ۿє/>=ԶnП^^ pn8 _nlS4&s226=7z,NQnp2ki4xџF*c}.TZ:[#%`YCeN6[g c"|ި3I3^]FeM9 :Pַ)vY2l ʤmV9+w6i)=EY#"ڎuv.Fa|3}b U[YU9GԹ'6ibŜQAX2DvL=Y)&U&뽸x,gHèc}5L@vw{B$tٱQ+I*LvdQ/BSY2qP$ %]DW& _bvT_zC_v_X۬]W`/gݼAs 7_'<&ػ x5gԣ ,1ڥ Y\k_ =95\|ыӃ`}k};ᑡ"1 Kp=DT?|}t*3&!W'Zt)ܱ$5(0˓y >q-\ECV3zM: r9ZJQY mNR*RW6[  %}Z2Q)A;U 5Rw3vZ}a\ 3G=xM_un>ߋsNz,_9Fww,`M41yXgc ڜpS@a͠l6d4qNb$,djWԤ6j  غQ[J>XSPЭ-%@-5@:t l&pzBK%ULj +é ~d${,aE %< R@Z{J"%[ ''R@R.|PjP&:k!OK  N%H$J8\YJ+{z0&Rz }y$l8%4QY4h5A.qjFOsQ D?PWrbd$2OOPAZ|F`߬PUuYC]T."p}ӧho[Գo!nߓthl?3.I}~rm+ճlll bjBڀfM, cM*eCڦV j(9܊@PC@1E;ayFT` ! GK@oW+חZw [T`{,o*Ej_ܠfiNN ,Ц)մքڿOYzJdlNh΢~\KZa/'.dNIϼhVWV/FAl5ɁL Ծ- ^ i&f@b&N+H96t7@M@ٯ2tm~ԌSK&+^R}I?|%('G9ד?S_HwկEםE9׹BNmVםFu?y!GIG72jRoE->߳f 'z`뿰a X`[TPER>b;F '{ӄփOggIw 'V懻wj2;S4# VA8_L˗4Oŗ/ (*G팀VTlid9Q͞m~&2 Fj,l>7Gb0U# ܥC%}_A97ȽQJvvLԪ 0Qj}Ѣ*4 فɥ&#؁}St~=AkER OܴG.C ZA7>@L BGиcT5OH!ĺ^؄5JhCtӈzhr'Éft`B7vQt4q3 UQ}6JMt!U#ƾ'"+I?Fsj @_' f Xa;dR- pTL48ML.PţvIW􊽃Ȥ&6ÅGbŤT&9>6JV9!Wm  L 'S~A7'QI&B~8SyQɕ:}輂A0Ժ^]-UIAyCk?4hEZ#T\g6"-͒*}n]Ѓ8yJF<4\OA=H۴*U!/SLޑ+̳9N87!3v*+: FH/%4}]^&O7{7 Aho8즤_)(yF|F\ӎyA@sV1-+P'IaMIhsJ 5 ϛ6;cǣf</,Pi2c_`4VkIJrFHV'$W'{b:Oi;=DSX<-|QA>L> [ C+߂6з_kid8a 4V|N[iߎnZ`n+gLWɱnS-ٔPtQ˫E g:'b?*s7N!7@cݙD%ݥ2G\MOTi)clvX70X'+h{t}۴,0?yNҝ!a?///n4u/Qڹg/j7뵎eG#:vo/>i׀m"j (*7P= DXc,>S+0mi~om60+9L 't҃lۙdGf86qw>FF}^e%Zèi9v[].z]g xu;]T&?[G81NhEDЮCBqǪ1Βh ɷϒ!9#ƽ|rKLyVvq%*}b闤DԬtl2(eѻ ZGoktK-E*`:v)ѻf40yĎѴszL4+č!D:1㝡XO:!6A!ܾByj8XNԲM.KpU՝o߁Pi~jG6D] L" aiU& puTi:OA`ȯ7&zY Ɣ^)R%r(rG$+Ճ^S> 2v,5RSA{4RƗ+s"(usj9* p{=K a.< |Nnu$-R~d'%AtVwHZ06Gfg,XaeBQN57cCڊ251g@ Ey Yeh'z8G%%]\){4rHۊPێǔVnV0saݫF\X˓,m" pyfF߰=E 37vB8S"]DXWI+bMޗ t^xâ 1YC"jT|ԱGkOm^9@ J>EC,kC u_?ŰJx#MSCq^fh1Upyo1x6$#P:nOH'{>};U2N$z'՟F؋8koY}װ6=93xNVEqyfE7MÂ3U6,!5Xr؈sj[D]]BZ;J ć43"g{%35)|Cі~*{4 Hk^[4=DrXeo?k*xE=!OZFJ՘dzVqW[ }b;/ p<y#p4C86sI7ҝ|j=jL}ګ EwRll tg8;Q$:{hy: Iw^GXmrm>Xà/$N|W*IJAmKLyʙ뭿Uyj۬ypbѧ!1g(i^` )e`Tҷ=4S$<%Ǿw! hɏu R㿖g|!پo)tl z}CB5M k~>Bنp#{1YֻơH R0GʉOEg|*GNFDct^ -fM8/j4 ؔ 11zq88>P07tQl”4B̪t [0puaP_ap Lnax=kW%HdVS%osIr@rdO7^`0/U\{Gh 2*ًaH|fVf\],Ƿ ?|xK.o?|X}#??@yUŻO{!׋弨v?-"8Myy"KX V= ؊A}V#UB XrqH~A5:O^?SZ9;?YQ& ~w񏋋 wӪp7߾z;F|?ojHD6ϱbY.4uJ%%n?{3E9#"3^!>XERg2c #"JrY Z0^"Z"*R$OE΀ -0<6g۾}<[;+ _Α7Ƿz_j^*X_XXK|]#h*tl QZ )n7t]pao.)5 hikM/߾`Em <|Eӿ+hk˧gk RxoXE~ɣBj3F5`$<єUrd-| LE|x+NAZ `mgY|4_4y}A>|j.P}0; lm:%a%axq<+>9.@" IkX qir'J]|T#rݤvajWai-ܩwS`dwRE(6 ܝ8k' ZaAd04> #N(*nIoq,͔駄yԳ<+-n>$wN6ӖOB6z%DI*~nX1\N "!: 7Ѳ"aB1^&USْbSS!^QDqqWM RlĦfN_rcOrhԺryQɡ@ *aP]>)*<Y9#0 R" *2xrd 7\x7JBY$˖y1W1b.ba,z8;WY.mX9m0{ά w2})2ؔ6*ed` n3B[qIY,P.ѳ(hSI\Je5n 6}=אӕ)5S·?ѓµl o R:NY|!JPVBZj` %3UOhI}~YuJ %nH]фyBK9fĸ4=&xGEbypz㫡6WOY&P?)^ <\%f0؎ts+|BVj\4O[G8hsqWQ?އu.۳ρcuauTXWI`Uڹb˻GC w_ҺwW@{EbOhv'n%'ޛ|#U/.PmY]ca89F"]h5>)l\9jy۲RrRMKx2 D7K}ف:5P)ԙnan6.UL1'է/ z(K .?_wl+a|\)a=yjxM^w3Xy\GV59UZ'^gf}kt@=8bRt>l=K?0ߘo5a&2N/3_ƲN/;0 U3l$8z3fUT6E 4,CY}|>v{ `} ~P7;eV{.u܎B}o?ﲭ̰^puT-wNX}8쐙1Ti= Q!?2쮡 II'oRGx\o۸kHbCX+aZm蓨8=~DII)ail|$3a{fM/Lj$ du<_?F?qz3f@qSdd2#蚥Q&OG׌mL&`ꀦsyɛ/2 ds荗ͦkC"8_E9N,b4}G8DM3/h~!UJ$|[G7lK>ڀ4}1};m4ZD=;zr[h7+;G\~}xȫFӉg:Q0sfS>ݎч0N0^Zt;0 6ۘlHFBٚx[qn_~脁,rF2ٔ35MhL B[˺dAG2I7\q*!Nce&F1 Nx̌xօZTiv ~ane!+SҝI&^^G ډ `NB-)ҥ} "^}fuh2J_Pp.+SP%;U;I)q]Jn:{s.hO$bwwei@}?S,{ b$pgz>f`1eQckCYJpG`sKbCJl<36qP(c.QJp%#͈Ǭۙfza؝Һś4Pnua#hO@#>ub7f[01DJYq8 c`YٔNAP/p-p v"KI(njǫeMJ 56T]D"%l7 )ɘݛ8NB9$qS_"=/FSeE-zay޿8Htjh>MTQ7)r[NZ#16Mb:\b_@sDhyhH.:(GH ;%Pj d:2pXE rŨ!W4z1F_z3"hkz,R995ּ˩ۺE+9VXEqfiTLMPFۢ3aDe$-kیFwWZs,;HH3 g`atw-^rM}I:6)EQOA ݘL 7oKT̥:Z=ߙ!ػ5o4W{o) #EMr@ƖS[aUJ3WvmT1;gxӃnʽT9Ka+o&D⢉T:g6X3SmqW1M Q<vJroB)Jpb#&l4'u:d)U5x'~ }a@[",a'SOy2Ђ Fx(F(-n=];Y7` +*1Fʼnj7Led)ywcsg|"oj,jHa xIc 9m΍PdwmRZ^sڃEZ˘d3E[-zkWgn5|XSc\Rĝ樟]mkovm}[XxWCBpG hu& cPBhfM0} _4_Qq&?xU]o0}ϯKh5D+VtJ 9K%NiU %lС"8>?} L6 " ɬ{JGr˛g}r2 u*CM"B˥lz*OhP&\g64c~$Ǎ:T]L& TMHO`g~xuZp6(' 0+|H4 X5 C9Y3[CO\ F,uJ})3qZsul3H2ݩ#Ht!+؏Ymtlm{PiK7ƨŶm֕9I @h**cR!6ՁQ0@=w5\FN+G_z0(M2z:}K 8AVQ_keN[F+ˡBݲY\@}I,E@ ^je c&'hA3v{+ t$<`)Lh8 {Eڭ}7bz40-}GP#@p7xX[OF~8 a j+6uCaD=3ccZ; vHr/4ᑦsur_g\N~|p-n. svlh`û!"SK۾޵v#)۞fQW}~RZX 2@hM\'$/AL*XSӮ "-b䤉}.6Ӏr`{e/0IO{{|Dhz LvPߨ؞n2.y D1V\T29R.ܮs1xCiBe@~]PѰ '$IvB%$ȵ"V3!F$L9PV:ȨT;A{TW0dYJ+9nqӋ$NL 0kg;aD+\(^QewS d39Z &ťď|XN%0Ȟ5FO!6|TonZ܂Kc`(cA-nLᵞZCZd9𓲄X'@B ~/kȔzZNkEhr;3~`.]j9#z͈+/m&FsSD 5FVoث۴QEz !yܰ%q%Yca}H [-G˹eo)^GCM;!f/#V!c.tri<,<NQ1Xw#|pHgb͓[Ǻ%Xtay4^/}'ZB 3ڶ~^VY"סd- 36mkwQkZT'ba'Aynv;7(t\7i^OXPNR *Or@Si +,=!pcvtݕ=Z9*' wƥ@,_2 N>I' :Iu߂̻/Se7/P׾= h~ s8%fxZ[o~ׯz+d"ck`& vɠ$f#^]9$%f[I3h/΅b&?~KTƥN'D$c.Axv0|xE׳+߿~&'x}vx}6j?C)8}=̜q㷰%1bg,<υQՋQ!D;J.vy|Yi*GlPhIs<F$ˣ뇹tj"fMU IWe.qsXޅ \-v[Rq0>MHii e9ys@ +5# r &ԐdInjć^[bi7$2Q (sy5!({!愹fp  *8@ BI 7E *Y%CaK wt1ofFiomdP905i?v ~Őh{}etRh}hcz~u:a0qlrF`~Ж\BsGU1,f)3 `hAlw[Qˎ(mP]qXT`X4?X 2|H˖,2DK'QDb+3AISu9]`=&L+ a b -\qǓ)j7"pƃ~3/sh0͸z6#pJ g ŷD"X1 29CN9@bBnׂ8< jiK^,tv/X;D/yo9PΓKa#X `8၅5+FGʩr:ΩO[`Mp]$U'ŀ^ql~Y@ 0 ak+S\U졑߷Dt۠us8 6v!sR\S*IqIf"ZPbLik$s]3#}Tv)řJE;Ut~0 tA9*@ T&x3jWNix1^M {Z¶gcku 9iH28 sJ늌%sF;"qo-KQŬyG&x E{~^qU[':ﻑKZ ?%өţ`0.)Any]̪U/+whYVT Aya PbwadIw@u R˜Ś+Mwk>Kp@GԼɠ 2ĜNxob_6)ӹGGJk 7OwUa(%oUn~J ocBdSNvC# $ioJ괯(Wg._ZJOPԝ;RwqGiPo[7/0fwqO})XKs_:R$n~95O7kZggf{[MC{Y-px_wJp۳ s끆7{ Rۀ@d@ b1S <摦G0"Y:SD$† rE3FY!XD,F.qPV J-L].rn`ҳcFs@5/y.0@*_??&/)tO{2dE :?36#B}9aш*8xn#":O}AX'8*tgTmY\,GUf"!7 >~kPV"NR{^@D&{z6C hCǺCxy E6p##!pb`֍j2*\yu]Kf9f5,r5`+VQ13*E}FeT ˨~l rT_=zIER՛6A]ᶛ`k7l~B+*&V$+v4ƥت7lz 8SaX3H@A jc1Ix8$O5v .ܶ*}9*QPWux*GU7o>VFd,=LiA$ճzuHY,)}XI^$l; Fce*_5( 4ul>xY_o6קԇ@k%M "-XӦmmO-6W(ʎWHJlSH$wǻߝ{r4*gR\ǽQJ",o$zM4{ NGpU+(xLΣh>'=×H96l&pYK 4Ӝ&O{32-ThAjHpƪ#638 \,ЏJ'Lӷvu=GGtoyvSɥ:GCoA09F?U')84e)Y wHRw*'qkrJ~c;kRZxf<[+8i@y("GF__}Uk?\^~?r^տtJPþ+5>wdҜ6or͊qfl4-󽘒S )I>bzY {tGD=[wXo0`KA$hUZF<g>6 h)-{ەwzڌW C~VOMY7n줨A @#\ .MUd"\?Cϻ~%3}o)V'ٻ,4%(xjZ2&1K2%w2d dOzqĒuxy1pRa#Xu@LAdJP!9{+p^|LܚF/ke*r{`l32fҳ|IϭU^\<%.fk*}n i`scJ^FZnTWз8D$D$ːIBs}n8Ҹ9߃)*ݚ(0q0ry~8Hx|9 QN Z 7[eein4W,JW X7Ge B eSŜR_JwJ]UV**mgaVv0M{~D8'cux|8CX3 {8țZ)'{y/"[  l#jފw=nqw J+YMqkIـ!u \kSK mJДNfեp,ڻOMi%mڦ/VM3$_^\J]8l$sz9QofK%Q>@r2xd4^b`7P^z-yz^g& ͨE@wtEc9Q7\dơ߃Uf֊ vxXmO8_1>JДNfեp,ڻOMi%mڦ/VM3$_^L7ءS'{{#wI)g$XE  %E,&rHDcb)!s `uŌrr%!fd s e쎥~!a6P ;T4IXYl~9|Lj3K׽5ټ&4;9&?(N:<(NC _9{ky,VٜfC&߃)B>1~Ɔ6N0өMA$8k!c=dW їHJ7PH…T?FDd }0M⁀' <gȁl4RnW1 v5)KzAJgVۮR BU,C7{NHVvG9g=/Cz `!a"wͲ-0^9%hh@X bx7D8^OnXi{\C,@ g]Lul) AzԽr7uy=e /@j+x=\8Gb;,ꎵJ%Q'8N*-Thmfsȗnգj4vʁM,.=VܕjD]yx+TzE= Z&l4;Ps| 4' hnդŋQIXܘy*5׻CzKmL)]tA$w%@$1 *9^ Ec[([ׄ FR STIFiƚ>ʞې[Dڂ|`+;U]Qxe.s!R!Sh9/GsY l IB׹Zv9?z,?D3rw`^f2SRpI/ivmyy,FB粒ʲyk/ lN&. bAU4T"x卤:e)5@VG}oɨJ~c2䢶(iraN9;kUfQ븭qyFg.j0Ш5Wz&֔Kjbp%p@Y3D JtU=Ψ \r.fW>nh ]T4*b&M{_*ʋFwр B%';ws`Fzf2fFHӸ#͔մDEF5nKAAdGGIMIŔbJ`ll4zR+2LrNXƧr,TY{lT]#K2vڵR7m6fݟ~5j%^ujd d`dH@32Z+h.4QW ŜԳÔkcĘ"Řx1VAM#xGX_8QSiH$;gm08aLV0V93|CAlL)];W2˜&.4qCλpj(];z嗻YGۑt˜QBKo7_wxTl"pG3!8an[rvܷ$޷RWxW)Gdn cm .$g:8, Xx9RoX|E@EwP~e7Cg/l2O 8!F Jv:)r[[l4m-UYzr|ϒ{xR]w] ."=_5ˌB:.21@@2 L(R6w BYDha (;c!ɠ'1RRkd"ޣ/#Wh|!剼$Ҷܠa$h_Z/<%.fk*}n i`scJ^FZnTWз8D$D$ːIBs}n8Ҹ9߃)*ݚ(0q0ry~8Hx|9 QN Z 7[eein4W,JW X7Ge B eSŜR_JwJ]UV**mgaVv0M{~D8'cux|8CX3 {8țj)'{/RX8 o#jJw=nqw%J+YMtkLـvķ\SK mPV5 s L04n&uz%E|ڭrjeC 1Hr#T' |:Bːʨf7GG^T.^⨄U(еe{@B<իis_XLH=`HZAAͶ_q{#z, $K[H'^uص'fyH,qB/7}N:ڡ@oRDyϘ2MIT+[͝H\X^i1YJLbA5; v ]FޑsnjK) +O\w=L- UV>횐h52E΋J/ONGd -hH%4w7ar#:v?wgPh[Wܛc \L$FU2DėHq0+@(RtpSSF)Ai-B P\*%T+_Ԯ]icn@P,|'_pJa$g&EE;19Fl"מX?-+<KkvƗgi﷞y?s4::o;Sojh,)qW98Hl_$vɢU18=20i^ R,/DH 5o~:t@Q?4 0ꦭ8S O<ዷPٵͼ=$kwi_o_ @yu ]cEP3ňv39Yj("%FM6qmzEhN I IK|kxYO8_   BVl {H'$nԎ­4ivy8Ri3g~3i͏30sKL7oG] OO_Fh08q AqqzB'1>WUJ9lǃH]if.<*|bXxJY?1_Gq47ns }6 yܓG9UA :Cp'Ti!Q)Ehgxy>y{|:}q&ONI(ǹٵvCcY,Pșsy^~j ynUfJJvcPZ`#[J;reuo%;$p@╴}vG2yOL\ħpdAy<;35h,ɗn/ T8W簻8;~~)87nTr8b8 9s9ˁ^V|O͚!Utw6 p|<m$ᮓOTO_3)/B؉Ή0bs8пŗ|4GnY|[Zs/u3<_^w+|ч|xۙ:xTwΎF#=dNj<ũDb$e8-7kA'Xa !1ˆuzF'))C]j\E=PH,/ŀ (DkI2olLogRx6ai y& qn VX{()fz%@ֹN 9K/ƺMO흢yloQ7kǍU,7@g9$& {{w"fZmʥ:+> @Й[#R&QҎUIGC 8L@r 2WB6:kjSfW7n^g.?443tI5F̴.K;#W|ܕ~נ25轌ۚwxVhˌ 6L*E>@vR͢U28=2LizҏfZRBDP; ZPԏik8:NrH gR.,Tvx3hI~Į;=ۤ~.ops}cPn^+|ZXZM1"?,5xyʸ6uv̿)~bҰ}ay>g1rf}+=-g))W%D4C/I3ː$3 LYrZG*!Jϫ҄cSu/cH*{)7/DZf R @Pn*UdjcȐIgywL5p7`dl3eT.Ty" `'>܊!P†8Bom@XQ乵2yQطk\V'jp&ȫ@1gV4B@#$9l9FPţ$ɴ>V ⓂF*ˈاkTd/${^Z yD_5R)Nļg( UaLd6G<eocTc{ǶOD.TFuQ  (ncQBĪoj֚VەGC T6λ) bƪӗٰt@yj <퉆ee |II}rS2]ĸZ7 x.!!LD**T'\Stl4\3HoghڥH:Pۙ50suzJ}/;i[a>0V CXфmbA@rQ> M+4"g * JUGR.ĭ׳5dDYAWb BPO~Ħ# $%2] 9U]+jגPhpv}x ,`( ĶWmkl Wm( 6ZMKU.W7=!k&*?w1a-NZCt͏x?eB k]o;6Gb 5kԜ`^|c_CBāK0@GgsIaȮ8ׂSSxU w.}APLz{[S|I,5uPg 128oa'9cR:3Apa _YYҴa:K1DVN+xe]h,K )nWU]>}]!nx lrLͫ[[6͐js4ԙO%s˺u [^Ob[Pf}wk㳘šL-G4VZi&$bQ"*f-ˑI.!+iՁUFu:#s}Oىi ʔ~ys4l̿n7 K/qe ??5}n xYO8_   BV,{H'$nԮ­MRC*mƞof<3uŔs82a)f~t ۳ǿ.P `ӧ/Wgh{ϲ88s_@"mc;b~dYb8hj=~^}ɖ}܋6&iÃ"$.L#vfͶ=7r }76xE@9V W!]xȣ#{l0`}ϩ\5<_^F΃;G_ӝ;.woFrɰ ʀ(96F7's]-Þ;5 :dFA" (߉qϥs]SwAbv ][ND#p*)ZA eQT5]+lW;JF醫Q&\RCf};&9VG2+wQHZݪCQ.OO4驃7Kv9 Tl& peL`;FZ5f4J$ͱt3yw6E¼'AL*7%c!ia@KwriIH}{y\ﰇroŤm /EIfX9^ޞX=2«I#964D0G/SzSΙ{P7MݗiQ)(Wnޱ J'Ta#1oƏ0s ݛHiCgj0gEX>ҋP oy hMfC(S Q*S=HY`: |Z2zא4 T JyfQ}>30Zѡ~SRl@-(20ql{@?=W(%Fwq2WjI>NTCR/ߐT "E|9vE5|BABcabPf:C>=B ʥ eTZa_DyA4Q)갪rMhUkY/ "vfȾ}nT8<~{ىIEyX =Fc.k4 hLq\Pdfp5_h'~I (yK[ζL:^Vg[ a;$w{ +i=%,9.R>lh+6(HwsF Q%GN5%"X:VHuĮ1uޑ0&ܺ t/J܌h@-J2c,Ya`%_C]bHv HaUd[ n;hK (HV:6E{9}zޝy{%tREZt5iL tą'L@A h=hr|#0fX] qFL`BѯfQ{V_͚MMb_g"OmX#ZKNq,]*[J: ܉Qq>JOL~[#SN)_~[lpv4^Ko0MN?6OL3Or^\O1.][K:֏T.5O;_|yȾ*ES@\Ib u׊ L6qXP4 ėթm ( ͺ2Ւ-ƢUi[Z_K.%^$0EsH8VJ7.k(znܚC!7Q yk CQ-X4|B /VZ"LfKxZ+1PEǐl[ h: Ƌc;ȄG*e? $@MMCօ WI.X2ݪ{Džn53"**y-ŜĘ{ص8 ,LRJcőGir~3gz ׇ8p73Mf@ +*>[b6rj] R-Ug"71sMynYH?P`=Naw Ƀ1X]t/7n||[(Yh Wf5aRwuQZK5?+eE}^-4n<Vda^sx.bx|yi:8SaQ\Okef\VCO>y֣ H'_G xr[82G.4#h=Xn*ЯjS=b):1g5d`TSbsdXłXDh7nRi`斛hlnzGy?bCbW]ɟ812|3gv Booq ng2̧W%y:JG^AWȥ3<,}V^^d&K=熌P>΢|ɓ+R>Ndz߾/|$"OhrŮjL$&A"r~WO cZd煳xxww?ɞÞ寅TO]E*&uJp\DVk[ԆIqэ=,7yĀib(AL9gk=!K&!5iXJwxG'0@7d%=WQ*M@]$P|E۷ɲ7(ۄe =C,X#g$7wT2yƟmޭL Jd* (c 1I*xŧk|@+~=\3j:z&(".,PUA$ c`P ᭁ }z WOOǘ4Q2T^k+#7qSO<5i6n5p=eՑ}+ǶwokX n4֫MNQﰨ>[{{9w Ĉ7wi)p aAħZ3TO -B y>~c-j``lF60UK?|1c.ՀQ9 A6YC@MgINC&FiED|Ғ/CetmBvHԎ'sj{4-s*;KM?Ο3sϷsc! j"$j xWs8~_sBbBeiL2дVMIfj?dw6z"eBx&>ed[`5eHfg{dch=8^Lf\$?%xsiV xWs8~_<>A!ÅLr-k2-l#ːL{W&@ 8%ɥl`/,.\߻xt xW]s6}u>B; I%KwI}ȖږG!r 6fsϹ28ɵl`I (OvBӇ>^!&`$!iT:"dZuW 2Btv+g*8ݴuBFP?N|'Qo!dY{"xˣ )$B؅TbX }.#"~ZV؇kiN7·G[[z ᱖:yV'yUCJpR"Qr K[ԆIpBu!G I]NyĀib(P!GL`Rz!` \ tg2VuT\Bb6rA}ŗT],q*`k7QgiDuG']5)H$ |S5HIOsdt9p R`ic!4ME3vP(>E&BaLy7Û<1$ğlZogV6 Jd* P(} O1M2@%:l;{ 4_]Ŷ rzKx ?櫪x/[!WW:o#Oz|Lg(&Ap}@Z[[m`tʗ8T?b\6r1 氅^ű3lֳ&&*7C=TA"b49:sJꢣl!V9X^%_ʮ\҂hvD'js0O-s&x[`GlCYluhoq%%/'$ZO?no!T? _mtCl1_<|L_":J'l6frE_ȫ2aEfb q7:!P\EehQIV~%KRYN'7n<꿬ȓ` bWf5SL`bwyQX} 9/+eC]-4n:Vdas|.ޢtzy9hj\V"~V\У央 ֒mFohSTr2LJhm:+E C\5Ӓf5 `)E\&HACxzgp|H%s_Z*ic;=l?܋ Mvg|>izjٍ vdq޻UTa5n/tѵvh,m6{nn`h F Na@C.!<&шi R  OhpKx1Pvn~P5J<6s/ff<*b ;880]`Fv$*ЯrS=b1BtK PyzJ 1cq[nh<̉,u8bzNW߇]_83$];R٩-x dy/ˑ6+PE1~U4)"o;tcK{Vsg.3#EJO1WHDS9rawCy mϜJj4j<:NvW9ꫩwH7 z+(>幫D.#4zj΍E€ϳY@ K$̸`*rI`fb9:=@f&e%_рHqSLVrABşbaB[(t}&e[DфTH[exj$bX괜zB.tm99ݫ͞?7@Kܮ4EuHY{YuVӴ*Fu(2G:xfۊ2>]sa杆[;aSwEpV={HJȹuSifP(ϳ,$"R21$L`WZ&Hq5cccOkM9o-Z;aiQ] GɣXZZ-gݠ&YfR `vmbWYBvFSZrոAcD?`F#}o,8yPp%Z 4AT+}'!$<Ȫ)r&kO"<\p5n VEM)` TS"Y^#>ڀv jSci~p-#2YR uķvt+ƶN){N*.Iū2su2 7wa{{ fȶʨ,tXȶ!*h6]M#9̄HI{Uiây/uѼJ<ވt\g,π9eq^Xp̷D*[d?tcZjxUiZnjP|P\%,`x?<$yӬʿI?]D '|r;~^LWHo$EҋU4l8PYOljOGIZz`t;^O'~כl7px~;>χC}^+Rӛ+W w{|芜:2p X&lR*fP熕QKm-DHc}1Pn23+$WXu~ښ.H Ql6LHݓEe6}Ϥl4,|pFkK,X+Fv*-ƶ l]02ha,w,= H #k4UBv< ut-)kOؿκs#1}`"Ei`=CGZ'QK}8Ng_j2V*gݾ=l$In\AuT ͤDJ2!@djCR Sh`?bԑ0=u`Ep={iYmzrAs&ݺaͿ!tgҼ] 5&GɣX![GnPA,a݅ zY6[ +6ۛ3E 6íW h3$Qmzѵ~QhYp ǃ5r4XiJ OH`!wOVL1 pt7x›MzԤLQZRaN{bu8*R't0 ?%oUw/%>+Y*u}f*ivQS%#2^Rcydy2;ߔ://R}O$9oJ!$(Q8ͿXO 9\([n*_BYL&ېIz,  '_]G\L*WO G!5Vvx1/W9:9\^n4]5U.f@mY:9 %nڒ'6:Xdصig-9"& ɐ2(ѶO\_$4*4# xs%p&C.Բc_g,4Û-Bc>_`NS_D*ĵ(h}()d&g kfr: ]ODuOj5?z"}ZCuxLk״i>L.o5YPw,wL Z 1},Kkg7^XXR}[b&Z**E|T]׶{q-^޷~/|NIK +]P F&"0vh"EM)3}Ty/"P`}7Q',iպ5&3U"(XJPS(8J ![E̯F_N%ەkqzH,f7>`ԫ k^ j|\eufG0K ] "IfR*%k Ros[lKhh1@v<II4#R,(a~5;ߔ://R}O$9oJ!$(Q8ͿXO 9\([n*_BYL&ېIz,  '_]G\L*WO G!5Vvx1/W9:9\^n4]5U.f@mY:9 %nڒ'6:Xdصig-9"& ɐ2(ѶO\_$4*4# xs%p&C.Բc_g,4Û-Bc>_`NS_D*ĵ(h}()d&g kfr: ]ODuOj5?z"}ZCuxLk״i>L.o5YPw,wL Z 1},Kkg7^XXR}[b&Z**E|T]׶{q-^޷~/|NIK +]P F&"0vh"EM)3}Ty/"P`}7Q',iպ5&3U"(XJPS(8J ![E̯F_N%ەkqzH,f7>`ԫ k^ j|\eufG0K ] "IfR*%k Ros[lKhh1@v<II4#R,(a~5)xLFԣ?EY4ʾcA>-$s#ѶT>5'臅gLv!JKX -|av}q1A^Y?-+XEglX\V`pywT[>./eN+<fjKh97 uȰs@rZqEm-%t!EUmP!D9yF|#4LT3ൎ\ ϕÙ Sr}ɞǻ~ok-)GT:9M} tzKx8{N-'1lߚ21ym9!OS{M)h̥}s8uK%^}nGg CޚU.P X7^LU 1I& A+u+7 w~8j:B jnTjf PxSKo0 Wp!XΒ`C4YflLYaZ(#av}p*x=?@D'^mG:$tk3"~r .?SJg];kR:_wHv?it{K]s;6`6 Y!x[Z)Bu^TVY3 ѝN@'skb|@#z= 5R}䑐my\,b1GR5d ZHG(0znR8|Y`9kQf{ L>$+R@*RF!g npdڀ-Tu|EcY<HqR\BdqUڊ ~4!iR@2j8{>m̿\i##K2<^bJ丨U'3ƈ~ xWS8~_gġwrz4R=1%l9G +Ɏb'fy??~O̹HO݃4:u 8/g^CPϗgy<  xWS8~_gġwRw40=1%l9VF V;;0"VOy{4PPFn߹cKx}&wxXs8~Б1vuLwӴMwOɠ;!⦝﷒ Ifj| }m'*R=lDcS;w{rFut89#$];RS[.@Ȼ=k+GX<̙UtiYnjP|P\%,`?&yӬI?OY}Ͼg?S/{& tf$/"O2抝H4t C6#)v70Kq#YJ]]GWWgˉ<ޮ9i5G}5u㓓Po9W{'p3^J,\E{DoP34O"as*'P12,qX[g]%bF+lYXfu'[W4 ĚSVrABşbaB(+iGL&H B hS!m!͡djj+B.tM90;ݫaKt/椱KY^iSkHYsrwVMv~ې% M9˪y'8(O£sOYtvv{)ާ8z/<ᡳAJ*FYum$ɕs7oO4@ <[$H"" ))S0`0b40]u`Cp5xQz@kbz=qmfҼt] 5GɣXZFnPZ,a=B v8߭]+6U^7mLW f#Amh`\#R0A}oVdi2`Ч ڠ*X>0ol+k04;'#2QRKxF6K݆pɯ+|KE ώ)v씄-:U '归1ܽ-K]X_KÊ'}+t$t*nOb"JКHe}P+G zaGe@L.fD7X;&@.KWSQz_ث7zj9~8SAg Ta0f#!O aV(C}dfU2 Hb!)fgdK D0!y~E-[Uf:>-^"hPL+2<2TrLmtZiU!Zg6mKpgaO Vx{z^E:J$ ^`:]M4zʶ}0.$<2 Rm1_cV pS yNSU9 β1I\9wzZ,!@pEI)DL3ˉ ^C նVD #;ulti[xu6%kSUdPk~<ūrx jb^_6×j-5bn׷D7E:xیX=lΒFS {|rgσ-IammhΧ :*X>@ЙCVF3| ( arp;wdVjibФB(7 p^MgV{ SLmI̒_Ө%B[c'k.a>pvR*X7MFɡQqlgM]`};ocɭ-UԼQCMe3^ Nx @ҏɼao&DHgL +T*_V)l?[|ebDUMg>/eGu Z 8 xVmO0_q ҈۵hO ij^>UI6ҸJ.-hVcߝy9qSJvi @  r_tO!Dߜ|>>c[]z=3PD宵"NfάdĮ[i~8.fJO*$vQ6Rq| ҇ᔆwWxFY!A{#\e~2 K)` xުw..^PZQFmXӥ_O3e=)0+""/fh!eBi4TV_2@!r(L:WP59==y$}̚-̊1Cʑ!Lx#g٧9_"NDzt߅k5xFײb,Atܝ1}aRnr,F@! $l ^ .YhZ.;A.`')/-6)Ŧ5o>t1N8yn/p NZ O,p7&8 ppA& 40 fp4Ѡ&TCA 3\lv08[ BX: cizN5EveX҃8tAdpj ɿd Ρsc^!pN)jt3hEXG;0Xv*˽7WVKF{f|} *F % .=I5zXA o;3Gdd?Sf->x`emTeSZ8H^* _;@ΓQ7<9@B)bYl'u'5蓀.sਧjːG>2W+ pq"\n-ڞ,=4rt-\8 U)|6oo If2FBP`2h|\G{CױOĤФH{Eq(_c=`C Q$rh0t*M ˴pO&xA8DFYGRʖ0sNBvqJiozS8D|_ oc)ԥ?>uhϠcq1NaJ k99Wyo,nS&{~LE:*!(FОȭ|K=JI)Kl=CGR=Gh$E+zTJ:BM+SMNSgiyKﳼ} |dz>.`ayX9+[?wQX: AQr*Uyj㩱-Ŏ\čzBZ+yĤ&_zX!c.=;%+~+cH, 2(bo¼dWҍJ1VV~!$dO=3%Be!(6N 6tiі!EINx+2iX0,&D§HjIF]R/6C d$ DkҐ:Fm⿖l-H]K7GAb|Y&{ɍhKeoio)j&b+oL"ɗO c-Md;̗,OcD{cJCE SɆZ}b~2[MMQ\*̼CEț˔F[Fgo 0>B(ςa',&JaH4?v܀bT7Y+٥dgx3[p]It,?K:ړfG6P G_kz(XpU~i * 8ŷX^NL$9>\Nr(X mDJ|Jr2{c$1OD&<.?@J&ggNg_VgSMܾʪ_b-& FS\eal~^7?P[-4:32 1$V:@CGG*7= KK% ND#x\mo۶_,)64in$]Bh,R]c$ʒ"JVf/z#:/!Za}#$|/noů}f~~w}u^vߎhrq`}4l9(|>/ng xp.$_8\f}u.0:wowL M]FzF8~+s'ѡ/TOCN8o{zCgbUǗgǗo_ُ-nypOmKe_ysp zCG3t4%w衏g7O.B]C3tzFkop{74X"sq8g}9j]0e6C+#ifc,O 4D~̨2P4Mc Dؙ{Lpz?'iU*5S9Rg\⠲K :Uvp ^h1Ʊ2D  }@ Gd[qH哰B;nJYE6g5U3Iv#8IL (&d.G%;{ڷ I OS͌|C4^V=#GɑPv $W.9ν\,֮Js=<ܪf`6|~ BG.eZubyS1o/ npˋV+^n0p=߼(C"//[Sw!.POPv=ye!J9V&˒HR-)هİj]} /S|,/|UakfQ\x&P W$l) kj!h_XBD64g6żN1v~̀el g?GN[pM ё>tDPd cŘV\k[&j]4cK q&xNZOKgi':hO (u؂U:b] 4ZPf%lZR5IV|MmW2d%aNLI)¶K"7/Jl#զ0nA)yH1JaȄ+)yv؝(~#dЊZԁk:慃Fp LUꠔc0&2DRaKa3g[VQhU=Z`V)]/zɤV"X솫WWX]yΩ0Xj|t/C:nVZG9&eeP*Q3~9lwCQ6%lMe1F>a{Eì,Eـ0QY3ub0еҶS +xXQS6~P0p 8 Zf zSF[=[rzs+Nl& $jwjW#4'" nDyܧ,b~v W?\P+txbY_W5~~{@zzҲPٹe-"J˩ˇ'I&)c0TF!>>Di@YKOsօec28mi9Nu\} O$5I"xZmo8_[>HtҭTҠmJOU6&>qvƎ88) QǞgf u~hYJhr68N|$<d|vk9?]{{"o]@{¶ck g}qڋ8_j]r$T :À{N:q$~Ӣd o=9vf9)Ni~XL=[hpFJN!#W5>);EtX?-+:B? i>>/z1:]]A?摇''#G#W~q~~rrx(>YK㡏7gNa7\Dht,gZ74b|9N8F_.&hHehMUb…X;S/Ffq"KD™H 9 ; 4ݦh M@1<;$5 w]"\"Wr>^eaDg n*Gv-hA()7*cȤ%ЌyP$dG`ѠNŖ>>́s2-VH;%~tMR>pun()GY 0Ln*pLU}L$‚T٤I J#B^nKeMC 3 k~-`]DW=Q@ q`Lf3e.2p L;ѩsF {a0}/ZKY/:܌77~ڙ6gwvʩ7`4:;Ԓa[98PrlGwCSnzV9}G,@Ȱgq4"ƳĄI2q!Q!Afɜ)cN1f~,)cίwqF2M%I`JfIw9#>x/ց*I$h(I@#d:4^NKd;dRp4׸iM< vom],y<6R\i:cȶ9TX7 0D蒲zm@wDx՝L(r2ْgR䢔*h$4bTc D""$,Lp$ZViB,u, VXW7[g +x!$TQm5#}wGieN͜6WUXk:8Bp XMYq0CDIIƜMt/rEF|inbs\DK$t P(UL% @~si][:y>:*chzFp#:Ѝ;ha4DPjuV겒kh啀mh:(L$HG.7 ,fc-#X5VTк &h6qmR=Vv?rm}dNեp -:Pa$YvD*9U캑X; GIq\I+mhMT 9ʕ)Vh?kj4v!ͻ9Sк6$5,5Ur{ےP;Sjv+GJ4D[pk?H\W)wƺ6{ۀj9b͋:[ܭo ޢj.(C ='44 bO^f;/M(W6CS>L@ZôFWOer*O FG4`CS T.G#e/BX<@V?* ^K/!Wt~s}a" {=@$KU^zRiN&`r9  #m文 2iZG9%PLqSo Jr˗q"'ŐްJU=FFJDd/|%$>.I=3ZtGv7\SH8ڞy?=/?S2vWOklNN~M5uit''ЁrR^v|%J{vG! mzQ{"96*9BahH1(Bjn _HIjE+t~+$&%He((Bͧ|IU5z!%tT9Aӌ9:^EU?0+IuZ7nbumטf0bdsj9<.o3++nER ,YTQaQ(YJȹU~<]~lEBAJ8Gj&9- uE%b'eFP+Q[!5>;I>kځxf әRb_+:6*+@(u :mʏ׻x=eu<:(| =(rX5fſt"MF[SI(&cgt3nL(5SQ?Q!+TëQEɿH-ZG3BlH}fPxWA9+ f8XjvXLWf8+gP g3ώa2s- ?|2B|dY1'QOXáqj[x4Yo˙4KOceIcEPC`Ȓ ^=.i=9cٖ64X˿.,I_*ȵqPљ|zGWe`{m4 ȤK/:^]Fv~WyVSoB`8a[)8-QrlSc[XY+^8=F/PFBX42xW]s8}:Ig2! I7I6dH#_CN{d  IsMy1יPz5p9PLaOW2?xWmO8_1>$e)Y {H}m|Ƒ㴠ЫόggfDGTVL(h@TdvZ ?cttz]pç9"SՁJn(AqSc6[DYK9wY}gvvuIޡYf/ nRPr۾hR\uAttn йQ,O84#.F >JbIz\jέф3 [7-t o~ g븹,[t  5la$S,}KU%e.7y+enV+[~M8igt*mf+X@3B=BF3 &TZ ՑMdC<fOMzX3[nM$8ᘢY(d`B(=]R[e>ƔZprLD~_C-}![u C] ˸wyM5G61_4!$.CJ$dTGϙNL37ܲa%q >|!býDf/(@=F}~iz*Jw_)y[M@<7yB{kiIK5*%GK|y5̣l(!>"c2a5M)!PeE"Dnn} )F/Ƕsndl3$mm5’ԭ VY%P*V-v#kU5/5L M0wc go-~g/ {+ќ1;3b8&\*9 a̳uP1uLA% ;jevH-]z.Fre5u gi3S|ꚩ:DeyL~{Y|BN*6+L܂L_{LC?/(N'N*8+=;7n'uo2!.vExG%¶8FcSo󘸌z$SDQ$O)_(GY#/ kN$+Kb>_mϰ}o"\SNZ UM e:JDpC (f\ 3@*4(V7#yFlUh8 i)LBėՒJxig"EAr}BClZ(.& b(K*HDPqWK06qH![$,t M削ԅU_[mE9kbvڋjEGJ m 4`,۬ͮsdr-=A IHMc]Ս8~a{J0x)*|>E3:4̕(m܈nԂqjho5ڛٮqFDU ,$<sU>\)ó<*O=f3땐źsFpJE\Av54 q,cҞ2*%1,uZS@#v ŭ,F*>PTSC8"eS 2N U?ќAu'ȝ7My*pT-nzP/ہ^?0 5EÈJju4vRφݙcV.|QZ'b\c% "BחZ.Q|nFJCn`Xm!JUG̝j)hA<`4hHě؁>vdxۘuiMs,ItFdYQx+՗dY'G3,9seGyP~[S~A uu/bxXmO8_ 4e)Y w+mY8SnÍVo8i!A>3qq?/h2vF4 aѤggr|ٳ_߮A端_|?v+Q&,sswhR3H&ӟBi9Ubfyj6)H&9(w<(mr,ja.&Xn*d~X~|LEb2I/5uu:tNկY䧁"@>KeGA͵Tm{{{~Z᧝9B xWmS8_g>@g%Loq&LPz)#[bed9J2 6q"KyvwSsJ.|`E*)/_ޟ]>xRn0 }WpCb9Ke+ФAe[ْaI>NvyLR$"L鹞R:~Ը~pn濛O?sH/nr?|lb|NX8?jϷѪ,lvMqL:?" f@R|z)~?v)|.Fsa{2`KԹ(sYHY`t!, vL%'sPPs^T[iOD!ҖD5JC}"jހUcy1۝i]H&A'J.Z$<ͅ1/%Yi%_".jd~3n x&S؋}{y F? a{/  pt39 Ӌmo;zv"XReD7np>tw3sq3BFs-Xp\*E9EPGEsRߛD{~~ϔ zȹfvvJ;¾[MOìg'comyewxYkiz3K^DaA)\|-g>|APr*Njfw.i%L)+4j PkZ4Sshp9@ gL 0יI (dBhNRiVFF/$5iG` ?Pls'+6[kFy$񭏍 (V)[8ﳪHŋKVkX^/Qoqj4[ _;udu %?R62`{PSĦ1SI-\H bdHdI$p/Yp 0e8~%I3U%s%DDx/΁4m$ &tܳHl^ͫ5}$.j,{ Ze.WV2yT v:kz>*q(%hiCnJC`Q =QIZe9GC*CA!Up[ɴG#19mHL@R 8, k̹H^7vI Ou$(6K\(3إz5@Ϛ,@)09iƉ($%hzh)wUB (? 4xi!6֖hd衑,0T7rgD4c kֳfX5!s '2jvL]$,n>A'x;JzfMw7Z"7MrN{G.$]Tt#;絾=|m!luw\gݣWtu kDzƀpS$O5Q8)GG!]`9Zө917G1KgI,`"qyha(, 0TMEτ/4=t\AMWj32 ]/%!u1F+ScSTp]^}ͣ`9˒rxo{FuIn8Y]W!FO`ݑ`TCY pSSls@p\f V>bO@[FۢkgCͳ|G4{GFLTJCi! MCX4[Mc5kU&{^ao@Prd@&PjڿgV o-Ϗ %m_AlMBiWWs?:w{G_?C MzqbD6b-P''QJ W(|e\R&4tt1xՌvFO"ղ6{,V(n,֘[ !_oP-9V/yNYJ~/\#Y4@ ^)Ρ*2zbOOP \"Bȱd1僨4I?hWP'p FdBJ< fJ:s5`'9eTw~'7?q܎.ѵA"c,p9cw,C(1|PJHe4:rKQck JqPv3lb_RE5ooP(fd2ËLiܵJ)W(fu/NGѯU&دѩ6Zk,2< Xzqekci0h'ё2 a8Ȉ%^o< $Z[~Y;*E%-^T9oח qXԄKU,+i O3]*nsu@֧zItS0c &ɪ'4gdM*Ua0B”p ^,Z?;ɁɃ#(@%6%jHHMhk@z@,2M h9NB4i2Ge%qJ^ ;n==`3e]kQTWɅ5Me4LF+4B/e){qQ0^`ka*C,6(k"&WJ6SWJQ4WEG֪Qj%W<, \_Kbk]sCa$aS dqmb}K VP} on 11C :xXmS8_~΀ nqrי'FDw䤙N$;c$}jݗÔJDv18@X$,_ =:i.z=L4}+; ?O#xВ:&ZA0ى/8x+F*':\N(IA3iDqԿŘe#Vp4.Ʒ ys(9|$w,E% MDpDS86Ƃ yCoo79լR No.Oon7ofcɓ~ɣ馒y,_]^%/ Jp ۠>]޾hõDa@py݊XsL#ˀ@bE!5sRL!! &BHDHHB>WSОɓ.åFf 7SFx= J⢒#;yNXHU7yt,'R:tzq o?&L5q"e0sl!qVid^?b;e6fD ~Ld$hWdmC8V 2C"&\i+!{/\h-,fhV0YJ?mq 5Q_Ϋp8Y2hngk3hIގT DKLeTX7?kG!Xس-=(@Uv*}R*]:LԫC0\9u5 z}sK@CdᲽfT?@a+>,E,H ;Kᡞ|VPgA+`Z4[íNe ؖT$# J ]{<]Y-) vLd6:W3MձƷti:,afkgUҢgڜǖK ԓT{OT!(2 4f5i U9 \ч=RۂVmU]#cfi\Z+NgOd^srwb\PkZcPwWhL^ NWR=qjyjAy&sp5oZnunDJ1a,Ki`ő܎6 ͐6M6 +PvwjP/Š{aR!LG)_`4Mg"TwB*2 ۀn[r3Cǭ,vT1ƿ#Tlp=78@IuuV}z&jXkZtu֊e֮ϢǺr)Td] ˠE 9z WO]iu]uu ך-Fe 7XYze 4Mk ֡9? AEF FB#9R)APy1`LGDJεIgq (,p*>rF 3b( ^UlhI$d2辪 \Łods 7-)X@~`;X2Q_teL\^v6#1>n QGȘ5gʎ,[E;[ 66F )xV]o6}ׯSd:$2 /Nu4ɺ=DK$Qh;AKRdNEQ{.SɊ綽 D̋Ngq/]A0~˧K8 7D 8DzP4+bZ+vafs*Z,4fp;NچoY䅃u{}}ߝޑ#[6o޼CWY9_Z%Pz 7; Ouio/b$PӌˌP1(PTART\ Ì*G.S!f3\Hz@!3 Np6 MJ@V -cR8s hU:⤒MzZ.șo0H^a;ii؛,]F3mj3ڃ?@s7"ݜn'/5W;_ L"|Ǽj<~ݐh %ZeRH4nGXTPUMu+Erl5 3R\|V౗紈_{~L;{dUfiԧzQcNW˛ Q 'PR=xsVlK8CX׀[C}P}tjj1D'1FE7NXPtVRBJO`RanҢ BAsbbЅ,kƲjI[?InR+0Ќ'+yjGyy,Aڷ!߼ 椤iVwc4v=3! z7;d6#1᳙7pĒXoЭ4Ouv8F+e@i D(b夏0 q̠CJRF.N+BLPM/S'tXN>h0@6qcc`o@ն6T`"?XR@ 0 $tUEK:H&¡phVFWҔdaX y =҄ iBAZ4po|I*Nݤ|v!HcJ_q:\[myL2\٫$0d)Q/5{5cCL0 Sx^wuNʱ=Rc8%\&hU'x"W:#`Zۃ bJlGc_%=Y{-e3%36B^lthn6 RJ)csAކ~k/j1r>I 8 <8IV_ӆbN=" Jp$dOAa˻fTS T)RA>{! cMcFY.ѫl[B|I \Kn@|:v~2Uk;3|՛R< `-a ./ Kɶ@@@ߜ nbs=DTG2f 1BjלMy pw7dQ{S:tO*>n@ShJܭؾ #%|Pg0YId`΁+Pr<O-^x[GSr݂4(ެFpB y}%LO :m'WVV-%z &-ZY,7*Kژ!L֦LURVuTjhSSbFZ"ʠ\=iբf=+\R{l#br#]F==ڭKXmy+ =hAY)h4^ hx5D=VP<ΝB&JWPh$dRp|x\3Hts;q4kfHcd9JF G7,NL{Pf@G6,]BQ5iyҽhͻԹ7l,L,u3c8{0f+ֺ˹+U xB <)bjX+*@SVXIqB| |$RN6z=XyI,{en'O Ft°8T)g؍+d/ߺ>ձ׮ֆdro,\ʫrN[MDSuf:6[w}zTzQY}i+U]ߩPvCJXc)JNq1ρې;fPkP+7 r7Y9gBTkT,2ˮh RS Ɗ L}ibiH_lF_,@+4+ZfvZK7\I3ӨTl5bζb-ݖ0+-O [M@G0&8 d6Ӗ5R=c+VR*0 ,Yˊaڢx[З>Z޷ r #] ݧ[#+5 }cЦBq]oϝNV﵁i?q0& V4vq|cavo*L>hG}FfsW~4~b(h$$}S,tdJjz/bU@fQ'L){P"/"|2?V߿@w-Lˑ,'u Q&0xW[O8~ϯ8[ 2v!##,T9x'+ǡE{|iZfJ\s&8) xb~(ODxvҫp ៻K=]> 7׀^I 6sFGA0/d<L=斻Sn79%)>( Q< }xy>ǿ rӿ\rkrKzr8WW跿?"`8#>wCg& eKy\Y14a6NC trm$N&q oOxo++Et9u`7{N7,.$+3tWXOTO#</?*.e d=<翪##5:)8S'E\N=|z]wx@} `aDVpߐ9 q #S6!bν]pxwR)4-@K@P!Ë;"CWʹ$Y.&9,z2 N#ic?uviQct.z^Z0Rz>Oϵ.)DV +c>w/&ɷLG)zlvK"i {4G{|Ow]8:=:^ae%_:x̥7NO}}䅁' ($p{zsySbԃvѕ[ⅣȻi]P`娠% ; F *cP9QQ@ SAK$, Oa$EBǨG:S!bRkE+&;%Pѭ"Lpէ(|^R&"K:ɮtpd^l4kdP-DE8m MRKaAb}-b" n/ ջs8>OsߟO_Wp%_;Ǚ˥xBA雰fxlW30(IA3iHq~*e>ƪ.p[WMSFHsW? :WDS)"-3陵Dbz4A= ."g7(۸p4 //~s\OC6GigoMM€bjQnZ' '(CZ$ӜU:3$BBRyfA'0ѨT!D6-@'((2`hv9QPc"L= k!]FYg=N*b𧫒&m/~M &KQjXRuA]x`7:pMu&?]ix+~U*Bn )S6]*,fZ>aӢD#˚vXlPV ^ŒDz(, 9)QI$PWkM[]o $:lQMH;bnk7UTiz,ib :]V ntk@UeE+G;0\[ܜX,c suWe"ZS% L )) /@+CZ L>{F[r5RXBgIvm@8K J4֮·޽[l}?y|3x<\*Gx:9l6kNRӃbXSk[.\Uj_z33hmx*fduxj}xZxO.͔O$lH+y q: q @U 1wq1V 0+xXmS6_ 8 ZfrOVll+' {W/qy-e&DZv=ޕ}|R4"\Pw'V$ɮlpd^lŚmud&-I: %KĀ%wyhEo f >=6\89 [:.xWmS8_g>3%݀q&pH{)"ձ2:!;/L,v}(> Rq ]^E2Y- zxixXmO8_ iiʶNf-ܭ,ݧIćWNB:x!))I>nmD4zv&GG_0g\"˲cs9kE{ݫeşKv%퓓ߍdr+v[-Y:9 %gK>ׁxU0`Ϻa #cH`1AsȨXF#ZI ObтLO}й$)lQ¾>+C'aԗ g8M- @łz^m 靵5&;[PqI {]XwH ( /PJY#p$bc1U.{Ψ bm*%e5:T'J/[h Bl ^K2*z tnnZoԙnMCk61ށK=@`y 9ڥʴ.?nz(=\a00CK H,tn8PՌjzph7Lo]$p]<T71ܹ0DL$L : En`ڋe Q$CWAF}WXoykQk[+[!eMRS0Hڦ7kܸ1k[EqpAT54|6LunꪾNLڥ 0AiYioYy`"۸ҋlci!} .U<얶BgzϦAHeDY҂mdZV 2{y`iB%xE&E:E(قF׺O:ibF\]oSC?S |IOmJDWw~87I#c;CpZ tnfBODT-R j۱ƒ@ֻ8р)<\\33 8l+S chiG#Ш{txCyxktgd wHd]F)3iuL Kʺ"&/:4\ݓԷd0+;ʹٶκ+ g @ =FPt-G5V:!\:,!]gbQ.נj_TD^wBTs|WRp{޶Zo[_e|0(*X[8|Q ͧ8pJTIfWDb,}zUp3md8!L}7M%{/w.!EEϟwc^z)b |[Ix)|p(MV/O2&in/R8@JĂ`D<{/3Z>t@߁5Y_d$QXEzQ>2z@XShޙy;e ;ShocHQ&|]V(pо굯ᛗygkgqvk~Kc+^p&/ kr۱G nzח]Mû~9u/R¼(k %@N3%B#u0CaS!db %dlŸ8Y P-吖-G.⊐9(., i,Dr^zB.dN_ J!5`:ԑps8UŻ]tvb`95nB꼳td ̘"!3GYi.iN;9J bHdPFeJRKHG}Qgo+(حCVtOڢ Z@I,mb2** gIYsgձGpEI:oaн4$6m |xNv;sܳH 0%%p ai-$ # 9,$b= e .!,y! Uh) p(T:O}OF 0$@uPJulNB &m}[Yy(\wJ,YQȇ:(@?@1%A:"p?}QLL8G"hhiNe@ɋP2^ц{ `4h#pb)i 1NHў2¸pX%) /Y>d*>Lí7B*.)%ebAr"˅ pF.BCO6-ƥ F Zzg aGd_sθڴ Ϥ fy钽Ô_I;ݤ6Y^uuBbuk."S@FYa& 1[聓*V0-7=Rlsh/%tPEZ[EWxԇbu e{-fQ/Ji$}c < L W! *P5hXK霱d :@[K8lN˰n*0-5@*ə4ʽ2٢^=+6Lt~18-jh aoj9 hJ܈rr 9"8PoHpE3m}TW MH6gRFʕk%'랈v=mk]n]lL^E/ W_ie "Y_vm5b PWF,tCYt P&k ơk@K٫ Bxۃb[ppi+[ܴ ãJ9]JzQS]8~i6 V!ITEyi([eeh8 loA=_ hh!, xVn8}W*IFk-Y7NMmmɠDZ"Ujd(;Kb{&,S9GTLBﶽ "5YwKu߅NF"ŏO|kCܠ1s"=ߟ޼i_{Ҷir괟9A:WJJLE4`(@MCaS!69' .<*6utJGL>Qm:3,Bk hҗ|XQJtl&1rYXReV/鲁ڮb5Y VvwtMg/zL6&FON?;;9~\Z˗?#}o/28U$;2Fm6n H ʂX' LEr5[c 2$Ϣkvzuƴ-Rhck|;£@F%!g Їl_ [999(6-iVb Qe̚f @M|/E(4u-К璓pk58Y]d7+ [atu]Mˌ/K 6' %!`Y-v =G2N"=2ɵ|ST",ϕvV:G,#`+9dB_kF&)7}[}ʭ_~ej= n"` xVn8}W*qDk]82 o47O-2QZ(nP;Kv Μ92U0:녭e6酥}8;|C =)}J~;kdb 9Sk.!<#m&|q(-V qq5gq*+T|'VDfE1)fYP:aV $Sz*4 ǚ?2y*8)3مBMҦ c' H[uaPqas }l=וg繞.fM1ɉIͷc gmV1SзqiExg -W:( |XQl \$ 6 ZXʭ7S?/ ZˎoZ ՏVk?ULpx0zZ|S-|C9HgW\ j?X4LJC XS&V5[M8XWSߑv0 ۡlNCyp_ɌRd?|du{N8D ڪMQX]d7W4h5fķ%(9!*E:eEEx/HV[ƞaNm xANeB< /6m./]>/5K}\ +w q}gaɅL)۽LشmV.Cr-zfKnMwвr\`$uD G餠=A{&mxCK#f{ʳvʓ m_y-H9Zk͓f7LK=2KmP~e?КeӗJB^iJzI)8h;oD ^D>OLWFT]_nmAuEs`\}YtW>^0uYCԪg5{_O}ړ=L3T|f3RHMB6?[,_u? A#"AxZmoF _qS?$\+ilHi^Me>t:t#N%+]҉|disg7mcg\zpfY?@]aYwѱe`ܺP>7{ہp͞,E@m 7A2x+|[c҈}lS~;O,mLb3=~sz N.b]} ed;a,tUI%/O//ߑmoʃvʽ_a_JTp6ԯNO1s&v9zɞ8ʼn)XdsuaO,6(K 8"L#g2SB'A8?lT@AcƙI'³?B4x?{' ?,8}<1_cV:MJTLBWrb귑A\kļfobAmE=REm6"pDiV_+䚊72tꇾN{D nͅP4JХi;2,iD0N!Ł=6>R.cXzݥTD#K| ˥zôA&.m4-> i Y1PXRBK $Nb BW=6la q7:8!H ű34widuPc8SqG}6y HW X  | -%^IBx\ko8_u?4\;Ex&l6@h[[Y4$:Nv0}%)Hac@sM%W!ɂQ:$ xVmo0_qK?Ik j XiIke/PBLb-i}g'/@!csoe)̙ʹ]`b"#.[-uGW?Ώ!~##[:Z&lM Y,ޢI ˠtLX5mhW36',Es2p睧EE}7ss$rR68 OJ etOL~J"/١fB>YTrv"S{q ;a8֞ҳټwÃvL9>IEa O3>I`Ǻ Ϩs*"eY2&4hLN *,-\tIeY "3uTA C r\k$6S#z&CDZ0|9Gi:&Iܝdzt:jWhvDBz?B < έ(dmJBki+IJ##TE0U2+)R. S=#\p=?AHVDKUSW^N\hMT:f)c{Vj+.H|؇nԁysjծЪ%g$-YaeNb+Tۈ~"pm ZЌVx ^~7k%HdG8Kp3q nwG{w%aBgi[ߣѷtQd9$kP!do vtD MO@6٦ld7zJy1 Qz9)xhvp|~>x|v21KWoGlVS/3Qg9i!tF!l%ޭ$x|}Hsˮ fDVL3,|" ~qNnZ|KN醼 s,f[2#OgggȟOK<=}Yے~]\yszYD3(4 /n>9+0NW}j h&$g$[=kJ؎owx&HBMقfo/11Lt=( y:p%#{ P2Vq5uJgL!Vijz,8|ʝMOd&_5RxBr?)41G+pe6쯿GHM%#=,Gp!7YأQ&nYyN0//yabq06]]!V#'0;XPx4vW42PI~DPXLEQ3yJ(^Z3kr bK5KQx8 K>`i*J.#KlM(hD5 WPHؽ|j6~p$' ٦igIgh+zv1 SyY^ { $r tJ&US@>t'A7s r'dl5S-G{$\LO{ (+0 >8o,e_'p#[;"{ z@@  T8[J?=QMj$'dW6ٗXqXK|J7^Ædb=2"Rm,kT_z&$0-y ǃ)V냂|j/>YKvoQ1 |.e37 b$UA1N?Q8h{lC4%^ 00P, H,Xu OKYM>]? m} M_,, vyY)^&s@ HOJ$~X\"p5R[8S{,cY={4RB'M(.6gD5B5-}wGgU zr?tx)M|"d@k JkNCTg0ʶqu݋e ̒ӏ|mVŒ(4oسok(biLS/E}1#W[j-`r'ct}W-\Jba溂4K*]K8 w;ܶvgջprPgPl^1Na-~NΉ^ (aiC!Xa:WH`$䔜P`6P5e ^4ȉlx!o}ecu㯨Ro:c5/nm"ct̜v" MmZc(zdM8l#FaMw z-+f1bݬ#Z*rd8LQ2R _{ +^EZ8ǀ<@S'tћ&hH31 r}moճu'(bI%K6 gx!בG$. Ŕ =݅6{glhm. %+{4 U}}xP{ !4( m08}͜YMWJUǷR3OU/tng=J]Bܫx͝$fEStW8[iQфJ21w7i9N_o-$䟈)85QF)]at6ظ%aN=`z\mg6;|i4sւfii̒2[u`5[/7[ <V3cNl 7-0֞jMh-'# eJB,;qa N{nX3vg 딚9G4 uPx4 LJ3\V iԞMMMզɵmi*zPaѪI3|U~z}*϶Z2{.z;ؼމӱQ؅+슖X{v[ۉ_.N EbC*jw rv|m- !iYัB G4+d=N;kTivɄ^BMfTA{j "a5iQaa-Gw16{{Py^,CapTZH/_j<,*SJe0$gl!vTՖFQhFr1S|̔*2SQ-McP.*zV5a(\֘0QnLoe3d^MYbbnoUfٮhsl)=٥k4smQJ-61v]vMު8mZOֆb3xPnvi\څ~>v `{e}ˢt1`) Kmn"6`8p(}48$%폜Nc mFV5xLR7ZPOh*[aPy .4ؔ: IUH籫4]TxTԉG#i+E}=>!u9<%~fR**I#uBf&įXK)BD tZQG_+w y{瑪n[Y]a:^ ֋6H&V>dLJUM_ڜ|˪;'ًI!zP j- OB/eJf= V0Vk䣐N?y}+UPp6>D3E:m6ho3C, yjXrXFY&)s[Qȵ#3cLi*gNsbsexhmZ͕fp5MZwDLo%L %m(ک~ nc _"18#&{j7v!tpai{ƧT'9:[n8ɏ$LPj|sX@z>j #TIюs <ȕF)(w ᧁ6"s@G.XtT"1ZIRC]7 ,iG7(e0Dژh;^Z-@aG9=aCk9ش4/5W1HA ۅG *41REb&Q)ug۹\=5s#ƈ/dnLd4R:Rd-,h?6(d3H#8 %MU9ubI mF*ׄDhp뇚)'/X"mhU Vp] F+S͜r\y% %x-lsP B+iApZrHhHJĝ<&Rc`cPtk]nsWSpnkRSzaiBe/E=p($J9OA}ץr e@B,V4F˷5ז=2 Tt? 瑽(OB|_t^p$յjP4Y&fK6}&A[E Fd(Gc2qݲmYxؘ[,s*暭KL'1NNZcӭ=yW~Ik"/ =? lq VV&@IxXmo6_qs?4+YlHYl6K@Kō5k{HId 8ɻ'oN$M΄JN.$THƧ܌~ :yG_ޟ=..h`:6&=l֟{wWký#nv.c"0Hpod>Ifp|0M 3yva5 ^33*ӷ3d?c$:7nv4 >Ёb5TRJ|tVVvމ|v ɣJZ;l)x.u|LIY |FήߝvJLӠs\rT O PG&|@SIiJdYF#L a>NKR 3< s3uhAĆ.>Dp #B,zsCbj"'pdt}[73 ܎ΊaC̓@kogqtxؔ"?nL,*d,1p\NyD#&E/r57QQp $ 5$VDCr=\^z'؋c8tٵ `5ɰygl_\Be}\Yb%}/ ~~R$ӯWp|;W?|Ÿ=ގj_;)br-;҉x1Y&^6Ƌ1>ӌ- RbAX X/\=,2( &UU2SD2{T 9Ӕ->E)tb/oZe GݛA9W{vj]\\yv_iwh0h̖58_mP w뾋*wZ 9AQNέKAs$!5)EgzȲxViR3jEC`assK:0p>NH/* ƅO|2o,SLo]d#5 *`Ebh :5KSNNIgY,"fHBZGS;=#`>[%LeW(6Ψ]TJe:|NveXpH1^cDj4^jc(5Ю#nrD8)H?Iփ˟jqZ_7LS)(ȑf LbJ^'W%K|b=r7E*<[-_g+4 X|I7+Q)嚇/DaWH Qfɮ7oCT%<|FF,gj4ڐH%PqQc6=r2ըw( 2 BEӄ cCPYCBR82-P<aLs*0f:s{MJIV3`6z|ּ5*LK/yZda5]qYe95{A0\2 m J7),1Zam0KIT!YFhuG=t͹dͯ5vwEx% ŹNi} `L98gù[Sۼ(Eϑ6\|DbE]H5mTMC֨QZEH,ҔjPMnP=Uu8/!%sEpX;snԓ7KOw4C)X:aUm"rjʶj%Z1E }+S s {J/ӽ6,h6.*j.cU~=Y:n,t 3,ȻNwW(,MQze[%S6LdޗϥֿtSofd6Lh鴖j,o<.jZf z3VbUm{&d*D.Ok5^<%::jav.OZ$fur%j薆*!؆YY#rhlQס[v]p]n_dub`Iqh+[4Khim ;|^{OkdK.yLu#cKLOAY*Ob痁ڶIIY|;2oX}}B[5}IA F=*~xX[O8~ϯ8(4- ҌvES$n]Ǯﱓ-M/yJ-sw|O/ 1M3&En7[6PȐkjxɳ_BW=?ro'=?ߟn JY+5:sdҜ4e9O΋jQft ћ^ܘ) xVQo8~ϯm6jO4dA:e[z{lB9(Z߱ k{f<} >^K`Oƾsˣ"qJ3+d(2Sh %pqHX_S- GO ?~m]w0~  \:Ҏ.Kgr 4[̌Àmz"N19Q"ɜ?zq8p h,C-,/$[oW@J ,#ΩpsrQNe,U1^[-+jo"J5.9iڷ{eequlR'oѭIwuh#sKp*b!Utk?Gy)5U#| [Hay2[_9L?C?Iș9 ׉g4.69~9c=%[ڥj7B9vG EI*ɀ&*6+IJ"}oZҴ*[66v\}DOo9# !,^ͫaFξ?$OoN@-0& &չ^k(L01fhP玿6W%@ʘӤz%K}0fQ:?z d9iR%;LiaS%!WI֩@9s3aG40ƅ /d؇9 RBxԦ;:&~ӕ+ 0^U@,k+F`Wy{Jyu-\_@<oSzww<Țrcs)dpNnz}w (&1Sܬ&$EgТ ( |ˊ}ZX {ˋ9%OKZm%uI]\Z:eq\ҵp/.}=NNҚX8îWHxƟa<|݆+k[\""6JӐިs\94C^EXaa*ƊN^$1ч6aYR:"66 8PJ'o.0垰Po:W^7\ѿȰt-זQWVM#ݼ/qŶ3ɒ,_՞X3Mɇ"q:Z`WM UéD/AbXTdg%]uDf)ʂ8}P.(" g,3^×S"SsMѷb2@m!Y@9Z2?. |wQ 3 (@8DNY+{f^GŁ ol[;&KT HH4+l xWmo6_qS>$Ѯpw4k|hI Rv}GJv$Ǚ,1y^ݗ<+{=eErV:>} ɧ+H5O }0&d2̮?;]PrusZCB˥xL3b Y*"7# 7 ϼ۬JPoZ/\-{39S>Q|eϜ'D4\\ +ic9ͧYԧd9y }Vvl::N/9XsO١&x>hF罞9r|Ґ㓆jRS]_]Z.|ԋ'TJ Q1y 7 R@e!++j bYN+P`4a[HLi#g^il`n ۴t: n`x!"L%_8J8]G,,t(&y!Z ;AK 1>rj6a12vCy Q k6_[!sDi)_ LWLgSN1CP1!3Dg^oNݠmnZE?h᎕fo/@6EHPv6}@3Ht{8ypsvavp4c" Oq+y{εgWSټvv&m|ٚHV[{{v7o$"7Q`$!LE9^[\@s +ds8TҗI`4$l}aa˅ N~W:̷e=6]v["wƇPؚl=MQ!D*z ';2~֔uެ6g끴?y۞M[!l -jޘ'Aa$%[(˜A+פAdg%[졩)z4S LL oWRamyPLXsBPvIjK:ΥSć f\%1ѧsu9ԥ$ pJ$?F$g$l$ PzQD_P@Rn=7@(ɮ6af [6@RERA8g8x/%-t5@An *wU)9IwHv/| 3WYqGk#tX^j2,X<^}8G"x@()u ڻ)Fhn9+It& LHih哄<@؋.]Qjs9+DP\yRnk6@/L0PΒ{'!1J ="\ SRI0ruM꣑;fh*^K'j6&8=Xx nnm8ySl %=W߇(u{^*@IWNVlSJhp17^PU]⢯˜Uʯ)r޲[, fB>,\U%!m)iI"+2G]N=-+(jM1'~'%bRS(c/AoJ7It))K7Vsf4_NR כ۔H?\)D6TA^P-W ^}N۸o %\gSie^܄\/_':ȇތSPN6٥ ۸ fC^uHVܢ'ipvx5`2`D< s>x~_BR! 8 )_0T'0q&x ¢(,)UXVwٮJHR2b|k@LC9M^@/OP40Y4$(UBW)EḺ踞a΅v(_{}/D+l@{zr%x( 8;gy[ p} sfyNsX5} z" V&XϧNM|S'Fu`T!}V+`Ԏ .w40i}M/6ݯUd hFTKg`3æw8 G!M^9~;A~b3ԑEFar$ r\~1q,uRu)LI[MȹT_dYΰ2!ٯAIg{V[*L%${::nNF;h[LkZ;^ƚh1 J?'o3&r3AD8c}m烳DN &]pmpLL(6 Lux:"-߂G'Z $C+ϒb;s_/K\5#jK1bb`Qk`j8P-vpf0zw͘E$|y=6>B}NR:кq-3s˴@>`T*n(B]BqW;#}aKcshj[d94lY$ hBP|ʣ/Wfw5omnf?['OnpQ'[0<-3BބmMۤmGM۸L+aq#6xw׬?I)vH +FNW/6=B -|ko;WSjyj u9AQRG%3^;v>7XķA۝_3C+>_=[9 7a|B'h # 3Mm (^ t;ۢ/сCԝgE0|+lp*u Թ3tAKM NKk 4LMu3*U棁*6H⋮n#f ͜$58I%.GTTԳ3X@ԀeT,Ƿl2t1bgbєFt@[s<Ny=ߍsZ:+ô9:[xSY{ L>:@:sK3(}xd @* aHe9ꐗK\*υh;eJ63-iiu2XJsѾW:ɀdOfQ%H/r~N%5M)<֊ݾLeq&2 &2D]v®o4DJdLk&ׄDʟR 0o{K+`ܬ"hv<v7PD!`DU0++̕,VvOb1R> χDG`A -yj])4E*Th4*]G{z"rG 7sdS-io_DhɜAykQ%ncPUu ,rH*&mu93g߂FxFd+lmʬ}瓵r7;''} r`-` 5IJ<>jېg)U+K{VOObinJ%$!?bd,Jr+7qGŶu:U~['ܺ%#Xպӌsj֌ULCI/ֈbOz8#g莝!{tʒ1NM؋߲OMg>Q}] R]x[ܽ:;+㠴%#gݍ䬸(Bl}ӑ}&}6ʼn~Ԣj3F)^hC ֨?xsзIeh@LrhM|X&Kt{oy7iN?ۗs8᧫+i'W2N7qdd'N3֖=gDH"|D/IHcP 4n4Foo`"'/,]fQVm~r_qu?^?͞<7o^@p]^wroSdzYݼ<=s= F˄t.qZ\,.=.gˢ,,e >TJ¢0=xO~W:^.STښ~./tYB ٜ̃{XqXAo ?(OGzS$uNDW?|mqY ~C!xYQ B'؄iP zLjZWyƉ4B1]7dшǭZ8ˏ{$̫e嚈 ZXt:olp KltdrÖ΃xELZiPaY@DjA(x7مm>5ů(Ze6A <AauC݂{$:YttoHf/qU5+ \=Q)ltvB׫8a#w(7H_;\Ѱx]nLkdem V@a!lduT'] f-PxSo0~_qKx" L*Ə 04دG'1I4c#!;Nm|0jt(R*۵?71a_&_ooh)ѝP:NP6ΔtjVa@i]a +*O;m{ℙZbVƕNX`eʆS{1TD]3ڐޯ> OFW*Esj:=M4R$CHHсQy W7_Eu'/j<ȇ0zR8(pb1_L 1Yꬒ2+pvڀ+')8x.΃/:&'KeqSF;@ f*vil^J񌎵\a־TJ+q^ԟT e8& X.4 xVmO0_q `҈۵hOmj^>UI6i\%wN}K:Vm|o9qSJvi @  r_tO!Dߜ>c[]z=(\adr 'f3grt2b_ٝ4n~8.fd 'h #%N?F*NoA8 ҫ/8](K۲ٲ88xWXkiNsph岲8.+{`].;6 {wgZ-X;օY$A'=e &&e=1 H^$rʔB +T&FR[f0/.{kS2O,+$|9*xi8W({ 4{Mk`>stۮ(@2JC ?)ea%"C]G"DMMS/ʴ^mb=!^3qL}_ۍ1ZobK Ţ6m| 5/R#a'jpwIq㫙\[o"(JCnޟy裫 uOppn`bDq!a|j&h&IL aБ0{!:P% ns$K8u&/#YMtARA{X-O#yՈCY))<7e%gtZ(w稘sb*.׃vP* uveim}V!;@H(^Q@èx:t~R~i0OnI4"GgP&4. r"Y<[Ć":~"LdRfݨ`B07pCڵlJy^ZnHM6cp36gD-ӓ!wVAI+@RK$w H)/#h(; Oez$]b5𷔵ã 3)^Y#WfflҴ[-j^ W@Rz&ÂkDY@`daL b<4XFB6!&  j&kvǴD !:s$G?'2F)?YP+Voѯo)*RjS`er FQSH=tO1V+1$_La;>l#qa`IKׇ䭓h298XsbfJ}Ztț˷JUE7AVEtY ,S[%_炮X@Iن8kҶl,ow +H=l"` ߓƿ >xQ4{ T8^q8&/"E/O̪9\0/y8Q6 (14yz%2G|qv#rq%$'Y#ǘW:K~n[e_52s*ɵP[YgT~!V$|I<[߃8W?gpk%F}J3Aߓ_Y;__7>3 l/\Bbx\o6s?4R+YRlH iҼ tiv{?D\e/I5;DYRD Y<=w"{ > SF88#q@i'?\z~hawWkq./o(@#NǗ3'^AL]h9k&  ;a/'<.m ,\lk4 8\`:tސwgMipVJ'ѡ/T1=AџTi1ǗgǗo_ُ#ypOjHa|F8;{@tgh'.,&8TW|ȏ\B^@.s؟D¢ BC/@*⡄b!2_\]T, k3SbHeZ=¥ ' & j!M`sE `0$HC~y(hvYhc)x&)QAd!t Q4TW dE7y4y/]tIhr{Kh,# YO()%*Re(S.e9gnjuqd{`D[U׮z)u 9t5 ҃#+6_~]gǟrz:Y*31n/78SiN#Ñyu4[ڹRL*_x[Ρ3gߎod__Ct}W(vX5l+r^z@jjJyʷ}gnFx1a""Q%ƀʿmb{66"|Qʇ5G|MC."QK `(rT)_?$t,~ /-?\C ZZ08!UxZ]o8}_>$!i&UJLi&iw"<փ136|!mksqj hYlx4:"{ԏl_÷cKr;5\#M9>.z1:_]A?k=ON{M{ Pؖ m(9>\ 9M$pl9p؉3~F0 s6C\LQP9eH`&73s38NacQ/Ḻ|1B:Xx/B2NqV7/n382ۋY#ͅցוk7TZB@\' rU>ht"anF Di)E}{?dն' Dۊ_0, 0'ԁqVhNiYk%hU>+F7A%m{4^[BjZ)d+m+Af uR)HV63;@8fg^Dk'vJw@S_,jI"iZ$KB`/$4XarŊ:.lE 1uOS*GS&%'ғ6#N}PT,Gg~\g-վ'V9Uůpωri,`86~< DÙ|ơ6R)HSv˵>5QD-נԣf-( ˀ]&Jq&[—o,Hu ZzUQvdO۪2%߅i+$EJ&4xg:J)Ŷ΄E񫂣jDJT o5".z"Jl͟=2v/ܯj̓ 55ѮLl"f)7y1;\5amA55`}Z+rv6 յT5T[l(SSmw. E ,Sl Ŕ+y04 u*6]󗞰,_U ,L?Ji/=C< 1xYmS8_K?fh nhp1WhhSF؇med9Ŏo)V<hMX4<#9y?ዷ?ؽ/WƏLa1{kY_ǖux#hʙp˺y,k 7CʖgYH9lm,y.w`7AG. b?NdG/'NNrd)(/wN;OKF=x>'%5 C#_?Yy{{=}KJJ^.zsrsqrs}yZ<_yxxzZyvP\\,@atqw}tGWYX8he* !8ȕ(q U]Q!KG^ :Kv;<w{ L x861'@18)ZշVb[ ̟`M9l/C2o,/[cݎ@ BnM\`4T>VetGGWW2ֆp6#f q,q8eh#}coOE@spE@9rpD?+F(FLғ0) wlI"`[NB_~l2JBqDC+a1揄0F*ɏ0QDNVb _F8<.aL(ը{px ԀSFR^FG4H,5 H6,I/$0@q`JCY.U_1n8~&&xL2POd9ῙÞ:,&tj0-DH]pdS={4d5I[&ؤcȘ_~9{'TՈۧuJ(Q, q x2]mFCn&T*Qa3+38Wd  41Xa,6%I^Y%LLW5Z~2.Wj(2@,\;oo(VwtJF0ʺyÕNB]|)"wbILIU9pTplx0Q!`'yDa bAfMdMY "B"@+ʿmTE+â0,:S/.MVJ%JI{vbZ٬x59W, H>͒] uDk/RK)k8$$zUu;YedVyYS.红S.V) {6ՠHҝP%j*ӥZ?0=Kʐ֝KRكNUSթu:WY-dldMbMc#v5MlLlnVlnkRsE+c^c$/55Şn,7S\35z կXcXDQ[6|A}KhhFZ9jd:蚩CcFecyKcHEb5Z%%>zƷik jc_gb=lhsSI斳`kMY~:k. bt^Trʬ:=([B mo+Mmr'MMtyhnI^o޴ޚxg޴73,Z<$9%xz4bGB $XS.<#=Է&_mV"Y) iY36v9i̒hH N‹A&&s-WnP$`wWhm?kϟ@ǾO{^$ܶpq2d<ʱT3S3 DID"bAK`t8Y'o?~yƃ :"p?@6$+ӴIђCbɕ vjʂ:,pٮk w&o6 *2v5؜hTEs&E<_螈;oTP8Nb1,H3_0^ʖ+M`4Sǂ2|L)bDlƙO$#+y02)8v'.1t?z_nI eF{:1@tM#2QVޞd1` S_@@CM6GBf?lv;fwyTVMdWT~w 5RpEt8*53;:HI7P%JH 8qQ㒃EyqqF~:W6^_Y~(V6w]iwbAszZ)'Krܰt.%& |jZT߿%u4tN8MK@9Y1[$B=057ωhB:‰rmV: 7Jrìqy\Mh:ǚ?݃ܰZ .i㾥Z"C@OgJ_S%1JۻЌr F8<㌀B+ Cu$@SL&H&p=[-&BrRMgqsLLO~4U0~^R[>ZprL`~_C-! [u#= ˛qo(C26j$ mbh,CHS=J$TGj>nL37ܲ`%q >|!býDf/( >?Y`4=YVFwJM\WJd"˰E[௅D4CD3ZMC-(VBY*,Sgn83 7Kcf1fSJbPBǿcD/ECeZhH1z9Cw#cq'im&on]W 8= rf#K;S[؍|qWI\ Ln澆^01!4Abڮܥ}ͿO'.Q"ahVlsH_8u05c/B[LFEBPRkЅCƍ@| l1C-V?D4R[6f x;Pgt܎L1*P$.i%Έ,2@g %Loq&LPz)#[beulMkf}Gk%|7Q0:"O4yK3h4TxXmO8_  iVJ mS$nÍiA74iPm:<~<3mВD1bD13ֆwr0\"*\+G wzW=xt\OЏL5iZko//՚m5e.~_.c[)%qp70_1Ϳ!_~i{A`Û!gpF&v8= |ޙtIo^|:6f0JT"\2y;).㺂,P20|{?~x@%S˜3NGطZMbEOle5.lNzgg>in]e{McK뭓n.yaP5(dpqr~QO}4Q0+ G/F޹ 'S%&"GR0 PQLg` -'T64%<D$%6:a+ M".t.HrX'bEYO#3bX;U0"gRkqgeXl ooAzqzknN3W+Z!)n&8T^U­dkf½)IuF#KLPe2v*pHQ=XzYJ&0qi[ L8CKvKDQB GM JM%c9WU"sDUO!H2R3HVW{iUSN4/=+kRG{)g|Ea+vVWƦZh'QK]2:}yDpTAOax YNfrErO MU `,HrF+{ES( :XF:VU;W`і6V,s}mΊ/CN,*j!7h tw&z\Qu6 ,M^`r ڀΑEdEc}P.Xۧ%5v(] My-͊VpZd3Bm=VĪ͢ ٘5G"Dӽ& OfFnrLɔ~wf诼evZOFQD^3.Ƙ])\< !Tj("4>n|Rzw`>Y|]<P*ٝ=oyRrY&D4lvvtRgGhĜ k0]\$KޛtTovK/!NGb˴k8>D7N0~fv _KllP7hYnVGN+헮‰&+xh\@&Yhz C+LY0AhFl@ f0[3np?GX,=gR3dDڿj"/p&4[҇&p݂Q8 Oa_0zJ>U*Iv 9@It.4jgH-Z RhfLiF]AjJyy/eaj*TD(Aocz$hn<ۤreNpF6iM0XDq"t[xNqluZ~ ^]ւQbOl5BIݑ5UhMӴq558J" ȶk8ٹ2awE%v;VyVa=16ά3mx{Jp-v߮iUD P?B3,P[K,mnivHzK zuGͦި 6ʏΪcUWnQXK*|Ȟ5~`}]aomyUT_X%=UKQUhb IS_l5fӜU dž ]Rf۱* /u(r4!,uʕc-7P7w3o :E<^_}a29W*k. ]ʩ <6|KxYmS7_^>@f L;\`h3iO|'4'K3]&gfvJz!)΃aHf W7NP`ݗ7.ޛ0z|>Ѓ4Vaxq*59 l֝wùritJ`5-z) (tX>4E}f}BIC rJ$$g1T(1TX8DHp R%$W]w]9`|PP?\ kQO%Gb /a%R;ZHVQ)2f9{MG,V1 Fog"Rp.Ϳ7?]L?'J¥jltWRL0 *h^мu^h&8E1!`X.8<9s r\Qr}()L >0/iZQ[?^薨'/P_OO4i}C*NJRn92 S Aqa $+gYE!}adZ+8v;-_;ڵ&yXUYx噤 <p>/6k5Kkދ==T^AE|}ˆ"AT}yԴv#NI|ݪ4Al vm Oj xA*Tl D3k+z R{=$܈&zWhSȏA/\-/F4 Hf9_| 3^&l,UV&ׂoVJl;qj>dxvj 䜐]̰hcSbRg)a&Y~'~]]RHRAnnbvƺ^۬RVk_|Baŋ*nn "^@TLӽ:yIGrH6+yjJ~5͹vkK$'H>ɸv;t˃gݠ'{c΁Ujӝ9[sn(VSVC Nm okK %uRSezFuRD[7WeKmsXǜ561J:sg0WQzeg`XX*, ue uz, >s ]^j!f!VpQ+ ^zwt,68BM :b--ե>)m%!YbI8t'tґQ[IkZj ^;Ķ-ug]ln礽.iىM^׵Po8\nyXCUOVRV9`BiLpW׳vm7$. zm;]v!o y "P%.ޠD)mŇo]p,F xDHQ?J~*F\}?swB޾7F{q>޾G=yq?B!玳\.˓!exH-GR~'9w$~_{w|̻Ӊg:Qsf}9|u6dt3D.l: **@>nf4&k0<HB CloY$p!ys642pЈ)f_h"Z<qe&V)^ _Ό31;+^oLd&5i$ڨZ7f](7~:z Zt-ӌwh\-}lE䭄nC:z|$ a>mif=OD{#|sfY:-C0Z ET,b=EiNyGNCHRĐ# #K +BB?bP1~1&!CH[m쑁+#'8 I?1\haU, cAAW]4A2A4)%|خbQ%LfEr̄K,& r1 S2 ޲m~.8ͅ)\0F/Sp߲͖ . t)D",©|uG1V D4JS؟঄]5୿H_%lɔ oIA&eS) ."Ͷn@htWI`h NR#_:ȑ#c0ځg=b:A0'Rv~凥Z2k+@@%\)N1h(1IjS;D?H.wmNbO0AztQ),_:vGRTS2 Py-! bK1҅JA ȈGjV9>'A8m^gh^jԦ,"RrZOf px#_E纔!q¸`;0 BdO?oHA.`dٞ ?ir+:mX1؀?~¦zdf_~ۍ28+XO 'avxm/HT=dtSjELCG y;\.=[0!2 R@ů9(\.)֭fᛏ~EKƶLnរhe_0tnGg)lx“٫",r%OF1Ls^ p횄8%0m5PrdO%fhtxx% xYK`.mKP!~=& 9d fAv=:"58}U<I#pH9轠2|t=\ 7J}@n6K]jU%v#Ӛ*ƟQ(j;o ]@zAXbpD'u> 8ol39om$"aN-Ԓ!hx>启UݱUٱUs2OFb=Yrw5Ĺ`2uF͏kqŻ+?ї$9S*{o;@%IȓKUfӼku=ʸ`XlvFl+kYs=6`!ryCA #S Sq^o-۳^}d_]8Ń ֋T`:@iz"_M9w1#7.`76z{Z*H@I+2N 5UZ 5az}w7hZ0Vt:0{jikGwS!ꅑ"ԆԅD˲VTU UQo6^4;qE辈y@dd,aJ+[Q+FޅAW&ZLǦ ,~:xWo8b.ЮD P]!.wk$֚9Z~$R p3yfq?LJ{vٲŁ<{vG쏞6?s FOןpx8_O=Y96~xY]S8}Цfwhp'F[#e$9G63[ֽ::J}ehA",1eY/W׿藋O'(U݇c}Ѝ4R?JO}\G.j3wZA=MnU ]T7uȣBs̈Z"I#NW-<8&Dx\mo8_s?8iSuHrW\楽m*D-E%Q$%/wH$g8p8 xp҈$8h*+/~;?}芨/0o5ܒ{ʨߚy(u/LI i <WHyA& ڍn 6MJM;h"ŏ`/`cdWKH{bSj d倬DRf.ʸ$L VZn Z#- ,] V%RD備u;ʢq. JWװHv֒xWBppU̠ ~z8K;h!YN [C? *&uAz:͖;H՘+[ѭBno1Ym4n9>b_" G'5O;EP mQ( u 6ϰ(_y4t- OZDé@&oBvdmMmlM˖-U mFTi3?BۉNFa>c;Ie9SEpQUak*햰\d;q]ֻDKd`ag NdVdA +jfTlr{3tPBDѨyЁԬPDTX&B::jiQ1V"O]9iurtr3Km;B{˞MX7r.[ iVXjvUײk廐^ '@aL#l֬J:Eo?<#uKB#MVnvM-9fYI1YSv0%(ۇ z%ô 4# H饢v1]׿*,7*X> Dˊl)Ftp'hjG;nnrqlu?s(3x<\*Gx:9l6kNRӃbX J1=E\:& Am" |ˊ}N͵ꅃE~XQggΓzV}ݕo%ie,):EM6fFqB%H*M 'Lmc͉>pG~Y'?sM+Ի1CPPt)(>G IM2HQ>X/;!tM80oU"%=-rpIYR y ̦Hq<,:H=+kaypa{k%SR_`n M5 3 tQݗc_~DQ۫DHmLC*Dcpo1X,aK#Z#uKEG+-ꚩQYwr/k>'݀źZiS\L>Ϲ[{hY \u2 Sk[.\Uj_z33hmx*fduxj}xZxO.͔O$lH+y q:[{ Z!9JHrLDG1i(\M`Y;Ó! ~L >JEWgp:IȌ#H?c0 |>9T\dRD=^W-t.% * Ft-ɡ"C vek3*XcJ,tt| ŻIG.Cג́>^jDeCݧ2{uf-[Zn;/MwRP&X@^B=dFâv2ˏ2J+ׁGL!̐ᒀ<-{'RpK [12{5!ZtE˼&/[xܭ"@M w. /'2IzF2B.#`BUЩQU,k?Db[ޚ{VjjYԻe[uu$'p[ؑqL֮v}q ʲ~wHfN.o|OnQ"a헏W=| ^rI?)'Ǿ?ͺ.#+5|+N7daÃ2%!4LtFXN#qliv yFqFo@'s'Cg#,>%TZ: =2F]K?Ft{?=/G? Eo/N/.ޣ^΃{{GGmw*=V9AN@ &w<%')LFޅ$C"a3$X.'Dl4C0Ig8xWmS8_g>3Mq&pSFEceu;!P2 Kg=LJac !cwkX&"%}p@z;xsxXmO8_ iiʶNf-ܭ,ݧIćWNB*8x!))I>nmD4zv&GG_>?NGK߫SH>ow}wۃ8 7DzlCߟL&ޤI5oe_Uýx &۴ P`CN*+"/oq1⦌ qe4*zer |#_T7:qufBODT-J:; e+EN BBThQf.ݙG6$O0C#h=:7ɲDh?'%2>^Ƅs 8; rA<}z <>RCw;Ԍx$迤| #XG'Y{f˔V{[TԪɰK,9!L)N8_7a|kDMQJꃩ?'p > #f6PH,fIQl[$sQ4}H,~=!.74pPMuMgn4pM0W|8Ai3u24J!d䄀 6j$hi]P$Hcտim+,ji djc57Yi+Cƀ *6OLvucbV_q5 Ҕ1D ek Ql -Bݽ^TIi[8B۴4V cld`}erYI|HS*6 TX TP{]A}!&, `-v6$^MHE;/ZWR}bAneZa1)X*O &K5%zkW|4 ' KҐѝwE=AQ(jkXnap c^ )ߓ) VF5Vo؊|'Vѩ),=Gn ZQIdwwo޽X]-kڰ\ʪ}+}h[?k+4T]xտ4șv% G8hZE`(8; 8?{'0G9tJVqSQǷ bK QSӶŎ;KЋqTGPecaKy4 ''fmPSS('NG_(l,~ E ;;A> ExVmoH_1|H*%6)Dw" IR%}BkW]h=DUͮK <;33w3 a |y̧=؋~uq2û>^I~m_vy{ Fhdaxysfn.`_{rjI|n8%* CUNe^jHQE>4z>8LiV^TN4+a鷩eλL8w3ۅ}׋j7J.$|ϽBƅUsuu?Oduv{uܓ6xmNgg.N5U#7˞zAYN_N z<5/9+19w5 p &v.0'GzR52#&=iB~"-&j72Oj[|7ٚ{&#֊YoYcal|Z` "`<"є)j0܏ca(B4BYPՉ,#b!6|9hS/D*DeJ܏I`(8S\;Z({i@$gc,?L~z҆ nmsrL)=9ߚWyn^M:$ )tOGȳ q?f xVmo6_qS>Ѯtpd^t4udP"cEEndSǻw=2U0:Se>酥}<=|Gn/ ;9}Nap}Ckdj 9 3kg]BEhGL=PZ.>&jFL0VZ%Ntʉ̋说Xi1,h8)b ғTA\'h_+aeλLZqSf M1A5jMg ZuiP6qs\^ {b=ӷg神.fM1ɉIMc nYՀƄ^  5/9)1Ejl&3˜H޸s1c0KM+0}JJ+ \d_54\68V _ΣbE+0pJfc/<*,;jeԯc=/(FNS ZoEZovՏVk'_U\px4zZ|W-| #9Jg+4?X4\JC XSV h?9m(B@}J1Nq[+Zf(+5_g-6 SrWڈ%MKcFFÌzP%.j#ͰFzB`nMhGޜ!1Ӆĸ'_Aý=q+iwC?ą`U[Hm'?ݯu=$hs6_Ss-M^t7qX!XF\. sCXXϹ\h#Z ?Ss`JN+IfÍ=_Yqy`cl&_W2Egpa@; ^v1Xsx2~WUJےI Rj)U/{,(sʤ׬=ᧆibt,>ܖ䑳ZlB:-2˾77*hZӇ/Ã';cegzJү}[|&c>b4eșC$_-r4$ Ah@9p)̿뺑H2Dp !x9~EXܥTH#A>ћô@{{&.mXIq  P{G RT u[@e8h¥*["0 }|@{9b ކ#a,^Tn*=%l4ƒS{#{SC^0?R0GR ȝ(0A'aT:Imǡ!L~&ԇdu~/"BYDϷpjU M$Ȥ]Q\2>V|%o8A咚-7_(D_h^1f-mg: HC`$ 'Ẽ+u܎zqQZGQVR4Dir,P.jǸXS {~lMh E=?OvCb} ϟCNK| F[Y#V> ODLY*OZ*-q|n 'w@-!W[͒=81D.FyXt:n@+EM\eIlHx͇b#: %"].񦜻+Q]o@#,4\ܳN4!RrB<@CIȳ>qyfwD@dh&X 84qZB`g(J񡓑=paOE+(T(Ky.{׿͈V%\=\얬-uпZc+sۚw뮕od nB!L' >]mbL蚠v8zwi`%\ƅ5MP<$=-6+5ڑ+4p%vs2~Uտ"Vb~/} ZSg G BZ1jnuܦj A?[{oLdѷ!ٯ5R,A{K|jUjbM#4Xk\mWVaB0I5Ycgڀz6ൠ-bzK+=]s~&6LQ8]S0E蚎r+HuNdu_M/NV\{ޝw3)}͡ޢ^d TMSRՊoF_1֍|~kiwUp2jkMyA/P F/ $$L@3_x[s8~h:&INr>%E5e'$~QJ3m$@l)<cB^:?[?~,~:'k|\g_?w߾@n1?z"юtpd^l,udH"-DEKy,Pǻx=G-KaU!d>r{^G<~ϳ!}OgpxD! g@j%"MաshZUߓ*&7A陰zyTivٌ >hSN9봌E^xEzixe~׬ʲ,șe, TA c: K 7 B[V׌^ɜP _YSD#*]z#j]=P@h+cKV0Xutܶ1}Kz6\ɬK=܉gۨ .N${E{ӛD.l"Z!f^ov 4̖j:+cj6{Q 6 SΡz{~:>Mw] :VSoV #IwSl'yjg)3MCMOЂfd[ f8sK{=/_SfG8kJp7q-@5{a|ҾDa֠o yl@uzq5 ץʋSXnhn^hMޮtۣ\6V?YoS(0f%&0U4Bo 1+'m\\nQ]E)-I;x=n>KM7dƠ:DPv;4<]&) 䖆d+ߣpAِ|kV޿[ʖiأ<>FItmf,͔e?ã K7y Z$N616EB$>1me'=^Ijohɬ4O(5V91#· ?F <8̂8!8Q d}8_Ұ30M>5^jw~ q N69 0&#gWh T0W|A0^D rk \ ] l61q\ !  2,¦W<}'c nڻ a|zJV."vCRI]Lb0R>8o4IQN)Wΰ0 _ Zi&y_R,C"߫xo13 .W,Xh})܂RKJT X\CS"qq*OǬMR,7A Cx~ WKhG0M4Z't&eD8#ܨML}XC?:‹E~z>OH\i>i;u5~iݼ;BaLЌ&3v%mN| @ |/4oiܣA,\,],b ږ\X)-t @Ɯ=&a_JFF`~^vK2blfȷe}41d7:, y)N ?D1c11rԞ`Ɣ_ds}1 #~G0n=%87k?Xo&W.;xKA,h+h@GW՛)t˪a K|w~13KH bJL)q3r^3(6mFצq4!LωM^AN8d&>VҀ'h CtohE %dMZedǃXF=_x #}xFىJ IG`͉[}Én8ꛞ+a}'^)q%Gmn8ŧ"p =\F _1[fWU""/D(t@G{b< kY~4"S:[8ح KZح+N4vkt'uXFCB; І8F%)-窼;z=&eݎ?N.qyTJ ?GyTynrLōF16+mJt[1WcRk:*7EBWV74!]rJW[*& v[5g^enٱSUlO+K$yjzѧ6^]m2ROKRj-󙵭 &)ۺF܁4ȑYmʬ3{x6{te6 qx!S8=OOh?+.$+/S; Ѝ.9˂;Qn֬mwkWX@o6Ly&Q})w_ VLr{Fif/ ny+V9Ōb@E"_ڦ!?8X* &*znl4i?/'8\epnPm)!z!ϙ/@؝7^p;oG:o,X] p΃FU S$:Z90\1`tޔvG7!3b"dP)KѝJȪG(|An6sqE7v6m pHxy}q_3s &ř@E,&fg~"/ip}>#o~tAy bW~u b^L BUx\ks۸_:(qǏmqnCĆ"5$${H)M݈x\{=UL4ˣ49?zsrzDh2K(Ymߎ~ rkdPO/ףo/G+Ͽ?~"`ܳ,%cn;ٽ=I j9 Yކi!?b|?&Q-w@x=ܦ&$Zc GR$_;–0SMH /Ud3' & th}})rGY6p9M(t^C8sSrw4i8LH૱rd`nyXXL;>z3(L)IA3iDq۾匉%.y\ʉˠ=&,R0-8Uh% *#^X=|&$wd)"eZiFZAfpdݢڍ%SGm)^߽8^ŚOkv:''?Wݗj=ON:允+Nʛ*E!㙯eçA€F1h ʤXsQS _GPX d 1'ES`8 ȬIi &U$"=L%_3H, 2=͏r&hXoNMF^AUފ yZR4}c1pP)ƚ$&0U2 |$uRF־gxB!'*cܮTa3'-%55"I5<fNpX:?u uҎ݆CVkNLV"&4UsA?XSOS%3cjtլT 7.` (h,ER@gTu@[f$LQ\j˼ܱtRlj仼zVb؟9n WW%DN %xVQoF~:I1>ѐ\O")^bxwvmpMsEֳ3|mׅPY߽h]Yb%}/~R$ӯp|y;מ7|Ÿ=ލ`ZDy7qglȏ(['fA (YLS4VIb1;F:J$TJr^8v)bR).@+:ٕbiL!Ŵ#R+aWѮ68:+z[\`IRCyh!3 CbLHRtn W3OV}&8PDCrQw]2O=!M}b{H謯Vur?"f7=t0y Ew2f3psy@Hꧾ\65f1B r.hz-ƪɵІ&f1mHhfaWbU=:#K[#؂[, <: aԇ&ПRI_ŮfĿ AM˼PG2"h5FBMXoy|lX^f( N!>C$!aǐά":UkLpoon!%!P&1hoI$2;2m%R룦X7GMϢHQCC9a> ^ݩT5u kaRB <>0tJy7Er;,Ƽ.2-kf꽔z}2剭2\I#'JB1F|A > 9R{<yNL\/ MմFS5ue4h溾z4+qGgL%=,5S6![?ۀ[OsM7ŞJض2O5ya+ ]q+Cr]p)fɘ|3mɓLox Z4LIV؝aT`*ՀUp#(5%6=bS:MU% ՋMЮjo7XwuDb(G uISo v,I ++++;ĴJru6OlZyl \(>5j)ZsAaԫ%VU?puVLP5j՜j|j`m=jzUq5lf`Fsmq_ (77Fo1>[-<(CNqR]]~a0oOC)߄̔gpDPd_=OGlo[)Fp>4JQLiE _9l<x6>L6?Ueg߆[!,o) QQ#EJ#2xZ_SF:ǂ1ʀiH }bTd{w|ޝdI%Ywjw," EhOh1?'D>:4|9p5!;o-IJ__ IzҲ.>v)ǖ\.G˃SR\gKNC=Í eDm 뇣(rቻ53=NB!C'bӱBGu)gI/Pw:s8H?&{tF\UE7w^OT-%/9<=|G[<߹wtyv'*sVߜRolpƖAQxz}qҗl'W[:j ]3?( gh,!C|HFD@G" W bZQNDN%H*#UInod1{'#Dc9Ǔj&c[3k~Ğķ6{7`&2~ވ,)c0!'ʹ!>T룅\S0FV6zxP><: O2mN{Dзӫ#)s\ hLd@ɜ3TVHOK@C8BBƔWP}3 t/\:#1j_Q},'4vpHwҧ2U@}Ҩ|~:,9uஓ:juD(Bk#4ެRlPq ^8vv;֋ }{u]RW<"q}`t)ܖaR?*pp5 tb:c^zO$WQsZi>b˒q31b:DBȄ7:*E+0 UPN޷Ʒ$?:8 =pdHmr?"<!éud]].βHGEGn27>v=ߋ9e$xqI4wrOEPU<- &2rX@j|4;RHYw 7fwN+i($HfY-㒓]swwCYW[[Z?Z->[-}dynVxk|m\K5=Wo,/{Ɋ1>)%X(@@ @L*<EPf\Q1Lg?$2 ((xW[K4P)GQ0,w}}ƃ!GK{"Ⳟ}RQD7&XOHCmݕ*姵Q!YerqЩet[pFfJ?^g1e'bGL"0r A+raLs=fq$"$sJq/a )29qL6@N90/0iqfGwB)ubEY)$ DM~DX<+|#dK^XӠ(=\:z( <#R9d8 9ДQFt% <ɨ"=R/MK^ezc FN[-"g$S|!d'y54gF#û\⭓ h&d! 8r:K#\ҝ)R&BjfAb uk~R8 L8M(QA bLh6߾@vJT[dW6uS P<׈9CJvDc\@ `M}Αà.Gmía"7]RUĂzQ vmښ'笜h[G5@ >GxX[O8~ϯ8(4- ҌfẳT9xױiA{iK 0DIs~~N8i1)vٲ@LD];WÃϞ{bO_.{{8ߏz_<^_@9ͮ+5:qdҜ5e9γjAft wћ^ܘ_RF xVQs6~P$3M2 $%>1%lM{W( }{2OȂ\ȴg_9-4LQ.`vPSz;[GLd?l8/3h>S(>#\FSذL迾 _(O&1SԬ&$E'Т oP|OˊcZX ;)í%KZǟ ζ:x̤wΎ[-eNY) nήϻ#.Ń:D .hrGu-ÜS`Ɉӄ %b OW e O61ʥO8)$+#&$U*nHTp,S&&Nkf{+R&glϺ4E.7'VE4 %VT$RA_bF>2sLC2)ҿ+F4C㼁kbC}6kL05l?J@tCoDDdK[^[tyE!1YB!Dod0ZSK =@py{UxY0C)jwbc6%iv׳F^V;^F,냧yegX_(m=Ug%cE>/=fNE6lt>SR^@SVkTNKL34R[qQ.^(!'0D: EhYw4콆/%D皢o1z7d.BpCGq..Le~E0|=`KV\"Ê;F +$0 ,];eQ;4*.T(8Ɔwv?qa  H xV]S@}ϯ 0`CA[g2x$dII6{w0Qhe޽='$%r.ҡٱ&>OáYy"/gch;&d2os0$!'-IZUYHWFU(XuykKcG\a߳q4~xr­Xez-y%gMJaV}¿;RO"Kv Ͱ,zW'b {dFԁuR {Qpv횩7Chj˰I%M*JMrtq24Xp6)/Pu{:o3c\dH$"BCn!(RObҰ@4d6P=upi #^r O*QWcK߹)CkH#_c8yէPCaQ(cܣ4JZ]]W)@j< ̪ D0/cT h[/^b_=]ᚯM/t)4/vZur^) VLhs~mƓFɀ8姱!5RMa*Am\gϝzlj|#id?׋RLmӼqo++[vJ羣Mk 9CTEw$ˀh+ҹb|lsþzX!6A|m(V̵dikT1կ~G[>w\-Ula*x+>~Ӹ=sʼYШ6x*cl% 0wTy?Cӂ8y$2YtS4ǻ9Bb \U0pJb\=4@-Zπz' 8 .ii})'dH2V` HA:jOND8삤xtw37,na[!J6G ] hΙd/o|LhA݁',9X|Ŏ,:t؝s)dVT]L z ]"οglAw@2?rKGOm Q$Y9CM[\Ջ$\3 (V!MUJ^s^fA}ȥ5~)X`Ck#& LX^ż' /?,Xt/6f"< Xdzv`MVʚa 䴮'$Ep[_de9;m,(&l\yw o,Ʊ~@Fx"9.CnJZ a@4A' \8ZjtbqYk)D՗{(\r=!(d+)Gnҝc|.pM;cc[m.POSJ//\ oCH/] {DY wYKxAt8D _w~C"N|'A 8`y3&k}2x$ȳ|%wDv]PJAZ' wҜ˄i`k'x׎omA&.0l^1e@]mV';`?1]ԛ$'d//Ԕfi;JNjHr \I?{+|u%ȈR`=8Cq3 &K ^ِ‡j2V@;K6h p# Vp*Jꗊ+뷬kP }뵢5t20gC)T@pw2Ifx?szC.0ug^"7/ʤ+'-('94b܌'{l+ nz]ĝoʜUʯq)zӅp޲;!,h+`3{NNۈp} =)؀{EQCOJ'Zmc  dk~1!{ky!l z_A M8-Eӝ tٟj.[QfUQv( 0&>r KrǩP׻tsB]:az6wvZ.'{4!K a6=>l")zvjF! ,VuCꨩV N%jqUKx =f<&D@NI^p CSGqu<6N©-?G 9t`JE~ i` /fPӿC=Ό}]ž ;3`E8ګ^_* D`~ k4[(:P"B`xI#<'p.*|,04F&s)t#H0S`0^ߞ8wq]|An!shƝ뢢y+:s 75E[ɮ~-GK@4Z2rWІguMRqZ$G&զ~FijѯU|W*j'}CrKO.܆ɩx0]G=cDFt= R fl%.Y# [c<0餺 cn~ 6uL*:iZ: x-F@8딀A6N~ד946$1d1ʔ$pfm0/_ 4O>mH ߲dfsod>/6m]ࢨaTMˆ' 9DTMЫΓrUԆjd>B;ӌJ2`Y0Ӳj5>TG+*o)w61nKÚ,Ţ|~Ɛ," BOU 8 .(#}aNFl0W <--ߌUoǪo`Uxb}ɍnlͲ 7K 8nyV$p N;@@b4u R 5B6!Z| `V2j0TGS~`Ϻa>4p e,Ӫ\X U5w3Ch\w^qÈ(QÊ$QCGhWgn5<b/Gb@*bA*R#H5d;Pn[ىKѮb#KF-c׻;Rio5P$(+X'X-:Or~Q3N*<6ݾ͢,cYI>t56M,kD#◉aY4!EhC^QC {`K,Bt8ZlGJdⲍlZ͠np9bSO{U~ UH9QsKLXQb "VhYyǮ\QF+VAmHZwi&ܴnm6>7~3;O A ^儌 d5~ ݁aGz6ژjȋ]ٙXɳO j[XO@T6]ƶ [ˮQ,[_vڄ.z< !$0Y2흌LfTziE.L7\j>7Rp=2? ݕEEǛflV"zO*6w Jˆ'3$Iۂ;y+ܾRQ<83@K2pv'j[NV>Y Ƀ_ o`iQ 3q>F/bxf(O=u"tbNJS e9;& lq̉s,g 9`ǀf&dPޭ<,AL 60eW`<]l wMa;($.䓊K¥G >B],L9f-a_k ŭ:Hu)"ё#cy<%Ǹ"MiH61GmXkeI2:a*J*P-H֟iNҬ$)r}m[gYuȭ[B9FƺU35aZU -35& w^ęNF;A閕-$)nΈqm:iʀ* ꓩj$m~O:#ݪL/!ΰ8J{2=p8HN Ė[kN2ZeC8KChG ^{)Yf fA Vc~5vt; gY&1&[t{o_nϳaOwž >M~ )K9L;EzQqƉaxIL/xBα+1O8:"+eW:?t ``I x=s6W̸VҤs7NzqriDH ECow (M&@X.v>`"ҋgγ(NU?.o`UBw^\ 8dru{o\0@pSL^}p`Ugݓ,_NnO>(1qcAϜEefö(2aSKeg y7LY.'Y,ZYFVq~uÈςGl<;ϒ,x|}?}?G{>?|? ?<Ϗ᭣@D`4=߼8.q_L'!>Ā7ӣ7YT%,כYZI 2ϒ%[A,_sY o'_l&XhVɞ ߄3z2m2Zqy:_&aQ<'-.?h/NidMc?1`WU:/kd諽YAAo ?TzS$MLDW<[d F@ mAAiZ/ 9*,@^0CDȤ1a+`-<ȳ5w%fT[_\>j;Fo_lP<=P0p4GWU+07opIYcTȮ(n8EIL-EH tAh; ZJ`z>#}URȀih=t$}Gt$|H>b$sFeI"O)o(g_lxn Ntא|3d 5gx+S05#e.0f4~t~2_$3 *M*B /2OI—ɖJwD]L:M ,&'pʗ7UK6kA%Nq$=(a太/و~KNnW :i|'J.6^ʺ˺pyoW ci3~B@W׼ׯ ,Ի_(&M/i''  QfV0"^`Z\U%.wEpƜo)ĦopSjV( JR`M^X[qܹ|Ц "Zx:Lo \-ACxRTƐ)*b,`Պab`z' eA>M@7*m!),wXh^ ߐjs QX-Nr9mIͶFSUmP^ooL&dM< UO%3GdRˬ_ fm2/@~IC@K(W5\n4ӄ:uqN_7|ToL!$|"Ug3P|0#~C1| Oh.ݗ$Z f烱1x⩙ajsnj6a`g5)惵ɱ!z4)/&M2=s@Pᤒt~2z\Iq ff fr0,,рh((FО?zJ|Y ^<7~S󣖱.Y'~2xAKգWX3?Y0nѓnk|'&U&r \N=w7W<}kv|l ?|Y3%G *xxg4mr~J\ lcxrn܎L mH8a7a^]ZvFG@lK+æS)vHۙε##r ,AY̏fPΦXeXN7l0$$:cL:0,U~- ٢ bJ73f͋Vjdh}ޭv:4݆y+fP̀`]BIޒ̈́h [@'G"1K}ZdcwJ.%>鷶[ :[9;+u81QP&^:%co SQB`TF 1$Ue#% K83!x'/?-KUz3FNS/5D*4(N)M#L`9 j[<'j\*nѢE6 ֦vV-Cd71VPxF%u-u ˾*+usdV+NO[ۯM@$6ͧ3- 9-;ٵܸ́*. nNвDQNPYѓ+}ptBDD\Sr|.-a5ssBO.3 Ӱ/ ]8E&gat}/4Ӯ:|<=ҏFt.+yO‡@OB"Ӆ#;m=Ѳiw/dfbRE #UU<E_SSrquVd|p4}} 92rimF/J3=&sxbP M>uI [|@ :18uҙJO5My=uZ N/\(jvRv=]؍"(€@>Q͋ e?BJ>TQB$ܤQt5z`l!̠-"#P1V.j|*}X}u0,q4ztLéLdw00Aұ.s7VðUL[m"NHH Jň-dCNՠgGwҔUʜ` =s X;0 e5{ %`A1.|]aר vCutlkqm>`+ߥۄIt0j/!8`87q@zwѢq. wG2"cǨ--83`vR|?Gd ÙL~5.XWG\%>&\Y}UK8Tv1w6&;5\huފeJ uZS.O ?o8DI|5>6s> |p,[J}u/lpQ6w[U7.z182;Əbbbfd,GvзuHcd9"=% n ỗ,bN|4Bcn<Ȓf6=_--JKfCr;񡸓G9i+vȓDm9MV[_|t6.Op~a'wyE[Ȯdsu/[[&a-d}'!ӭ{0~Jf pچd,># ؐ:@3)ce{ڨs75 =.rXK *5fCh,6ё;46v#+~I7};=ܪ[IùB>öBtnGVrv{+ٺx(-nA{xPi7{o  6h!tI^}0t 04.vB4e+ }K~(FxZYsF~篘,UɄɕ-BJѱȱ"e~:9#\U,m|4˫ ^O/.W?z!uǣkB/~??TjziRyJ' 3Hfm' 9)bfkWIp- iIlǎf .1BgVu+uNKֺIj  zJmZU- rh~I=:{sqKhStg=OO?+yۓ2?JtGϟWT3 )JYZ_ O7Ap|~O'݇דkηAgY_/˙ ӏorI3#ib-)&3ӐǸX$Nfay&) WYZ$rfKtJ7Lmiv1о5П^]__߿CM y޽΋;\~u}x5y(s>\?]My!X_d '))bf M8Dk6! ;m38gV= k(8́6,s~H '/y6>‰]^M_iŧae%OOreu/mKPT*.Ln7DhE:DV KI,~f%G\'yo5@7sJ ji"EEEd(R H$or enGm ja z|[ 6%t$<+"M4aq%$гhcNQ1+PA[K-_o?H~NSPbރB旾aRJX(E 1AI80dEp KU! Dvc@VjM:3:TL8F~妜FmlD*K#6C%PmZtB,Q9d(% ^ %al4T TAKac^:tHetā@ ( Ga՛UnIiԾ[(`t(|7Х%"<X,<:Դm)ѝE]ơOXu"`xT_ -K@y B B%t'vȇS퀍oWE~H\Z %cӨ,j#i@,Cc۲Tf*~O$qZ mM)+U$=zOeӋijx^*Tos77j=E]HM M^ŨjK\2:L JRqԇNөq:Czʤq^ *ؕ&Mɠluec)3,BI@d?rH R uMxkOU{~V}yKmM;uĠcbs!;cPdRl\Q.٢E'fjn= k`zÞJ.%2{%3 my908ݿ]bS{XMSL!kx=u)ͮW|)~P bOh^h N,<##R睂t>qr |9NI9r1ZsXzv:Qca/On@4g͡Bsʦ1h."-p`Dz5ͳ3>6zW#pyDp4 xvB"6"jD k<dxr4$5{zڏ}n1hE 5y1@k>b<5ͺ55sj5X980-0-؆2oިcB&um1jI=]V5m滄7Go} 0 Ms:6iQEODD'ZW`ͥlzr^L7YPLً`] |6*Jh ǐL}q|h{tr×tGai]Y{X*كGl'sNo4TTC. 1kBF r8?Y_H4@tmb`|(O: &Eb7y]~>< ~bHM\Qլ?nׇ~Uʝ[vO^bK&n3aդg輀.㩕`OnǼeМ  *v;M*3ΙhNj|le]YMhƪJK.H*Pq`{| ڟ Bv DG,}r@r(Y0XiZK<&58m w3&rsŃ"LE}Xv+>ӟ WEKb|-$Zbj{X?d^hrPE& 2QGʢ*=GJƖmU :%Jq}v4)$B yQs(9%eăP2uQ' ]ж(9$W.Q&^eb@-%,䗭-k`l/j|Dإ9vU/:kQ! :H1HID˓9_ͷ;WZׁ ]:ăvU{ΪUYTS-=**骏cP6JߌWsmCOΦTԄ62C5b+<D T֞a{I hNhůƊō]<qjP M=c,K? yD s@h0]I{oAQ:*6+n5A ߍWoʟb,7{Iw0 w3gv4֝2$G2J.ivj {(G?aqմ(Et.$>hGKM|Q//JE2r2zN.KMVRpLJ>tmM=dߊ~3#g,tqWQ#Ӹ.S5WEmsjM<.jUC xĘ42mplΧ /ԉmAb^T6^)`j$Nf8zAT8^}`Hf.0!d4>3FqP>dCUegHSN(Y>=c4x-)ԒQZ2WK -{hM9CRU1 jOY޴,p; bxu{(<Cjq٧%jPuFk1QฃD$3ޫL AP1ލ6dtRK>ľKǶ;^zzfou69w0;Kdtr=w4vxAՉxtB E`+OQ`7B,‹!|$֒S]'7[<V G`Gvc(*5쏡A"bi$0d`FH-_88E^+tL=# G=cj4ô.0͇9ط(M ))iⴄPޝCFƗ,`UɃD h;ǖxM85Pu D)SܔƂY,vq4?"֏Da|u_s.t ;4vq4K]7_W6•XfxSLc@MggCKx?XXDKwL'cUU .l)b*_a$LjfVCm~: x9E3JrGlO]Z0C{ĐusZ*HJn 3 D-F!iK 'P^Yxa2 &6^='<~_vkca6M a+-#fi R v#_ Z[;[?⵷~E\O0ʪiv]MGUыuƃuF` ^b߸XTD:H 9dV%L*ޮoPߢЯn ]"?J1~E?]ȃ/< 7m5w0垁*be,KEh/7὜vA{gSc?!cRTI5QVI7RkYLᕳOzι(v\88[}a]9K;is(*8N8uܲޞUV+2Xw2Amۙ[S֑h5>s(Kj1 FQ^e &Yݦ{o5YJ4(1*}l˒ML;/i]ThO\Px `3n`4riFc`59Ϫg9O瀒n`6l;P<-]VNj#O(~Q\/Dhnx 쐀x6JID.#d«$^ W^X]aV/^SMEfsUi 3R*N0p'=^uca|9{zZ&7 nuoGni.1 Zm| k/1WL8öio5v5xmDV;=/SmS"lı$WbEzy|9gdQӁ+nHx]D$<5,!\1Pv wW}dK{y_E'h2|϶K*K o%-|퍦E?e}GM aLBv] W0VNѢ?vDx~Ȟ{jk- {a~հ BBEs[$|1u< k'e -4辘PI0u`\(@z1ԅӏۈ>WZ xI0ubZU\DNOx~2Fzzs:_c oy4ϱȰdDo$R|.>Nc:R{Z_u[,<D | 93K:ECVlj LǤO#1Jo'?D98.(A.%8j!N%:ܢ<%E1QA3*Fό!0q

    C"4A8׮ jbѹ.ct,-+-#1A! }A"Gt_HLlpW~-ag¯  qؔ#2NXf/szn-K^u`h 3,T.`oْȆ#6X4:tW_sWHL8 F;o⠫9 &G`͖3=wq蟓r=%Ct24".VS;9'J ⡾aU3qĿ)$m{#z8l3 V1l rr M&xZo6s?$R+YlH^[&Mt>H\eɓ(Y}LJ^eIN (wգZ8aQx68  pv6HeLsQx]m6_sخ&ҍfdms)-E\-o*I$-.@3|te]nڢ=#\뼨[LGy.ъ@w?+o@P@bN&7_^y6㳺YNnOZb񛖕9I5FӦ+B R)OޕeQg?xU726 U{>F-:Bg?/z[X:kg!^G?nY e6_e*E}œoշ9|ӿObsRGY/>}~O86Eiz7//Iׯ|Q<:Pht|[bT7%^@/C"lsDyEh^fm{rmh,YVlKp u>#1I3='M]a|B !WpDKΫ/_fxJY.V-|ےz]*@`ͦnɖO9M?6l߳r(ڬ!n`3}FBx 9|**nʂvVs&ل L#CX'[eAxd#-z$CRꐗ/2=y[" yp>ϐ0k4UB%(AmrhYa&/CVe*GC}96u[PA$:Tdͧˠ0 fv30x*4G@zӑ=`f3߷ha>~8G;o]u/._<\Du/ov9S]0ggr(D '; My9^8(|?錅OF83gKQ5YbO#W:?O";LuGiHNs;10;EtA} O$wǙ٪R_ޡ;6<889E~ ИCLRN`|$"O! tH\:@io1{58`b5]6htS .MZTP((>"eA(H@DHQ(>3wj\zWgټei3Y>5kshZ!̐ذE!G%mi-fhxD\Q"٢IӚ02hM]f#o B{{V4rO^5Ȃ,x8z4Mab>_.p,~ R곋|H#򭭺j>ҭ9P$C.J-U*RՙFcS]l+[4?N2,M̓f)J ȂEy6(/5VHKƲ%5cgSvG/4YVoXlF긨i5@+PQ[LZo` [Kyt̓m5legQ2JW͋?d_ho_Ҁ}C|#j) j|ˆ0?' I[Tӂ10V4t5mqp뮮C?g -$RS+ -WcvkmLvm qc9/8lo2l@K6M \ܒySBlƱ=a+ ߟ b66˟ }Y7lG*+?n0?YΦA\Q4+HɱkΈ0cj+eds\^_Fzvw-i*)7\z;=m%˰3 QrlJn{7_&I ; {7e'x1@Ä)i2US H_NopiDzUfS{"K*0Hs+b%0zG~Dt!5 /]s&ө:NeGݲUn,_cM,uQ׆ؑ+oU +@r:{Jh!h k16 s$JI%!8y ")rF^1֨kO)9zbmFahԴ <įT[scL'?,(XE@`@1Yqnxy #o,S\K`zsgx=z"~ @mѫejHh';Ze7Ox#B74sgWxH Þ/\#i1m>?|K~j&9(wo7-_KR-Pg#Pn.a[̺RjDtu$rPBlG.uxR#jnPMLQRj"-&;:Q)Q#.E+\ ˬ_nB5k9gkʣOOrs*oFHFl$|rFsչ/%TIʩl PENx⣒]ľCYtaTߔ0Y٘lʳZeLIԕ1k}u25 Q#R+J5+B@'дsJb*@Ms$tܐ-WJ+Jb>Usa , l!%p+a].8\Z@1q\bh7 MU1/,Ey]3 ByQWcosY [5QnJxXO8_ 4e)Y! *'vh8J&nMүC|f<:gy,}ڄ'dqGٟbYvx[O_7'Il:DCjVO0xXQO8~ϯ@Z ҬJ H.Iġp7&m6!Ag<͗)C$I)qk"yܧQ7319oǿ/Q(YвF#POXݾ Yl6N:< ֛r,Qt:6)s`8{{4J;itNlxXmO8_ iiRt'H*/E}$ѦqL(jMM鐠μyP8"XoʱTˏGi1`x9v)!G~ue~/" B _3}-m̰Sx`AǥgedD1ざzm[ڔa]~G? ?.^g6 J: \pdoлg<9C.sag!Vv^jл:Gc'Ov^ۓynWnc[9%np{7Mt= ǶLcرcr?ciȔDDH̟:m,9q0bf`D**8;ԋ}8':^bI'%"ꍊxiDxܒ@8dWa6D ! =)׋wC& hCC„dʳ#:2 gB0$>X`ʸHnCgNl:QZZ:UMelpoAcIvs£:»DdIUL VoLv> -fsZ< ޾]̷g=ff-#(-Zc+pVy!ϟyt(.cS&sI&^ZQu尲)t&S !䭆+*lEa"i cfaO\ U0A7E%S>8X[kK}/3ȕ8M;`"}sf> 'xH^ۖveةx]Nwo~³/&腒q./!OΑ0^H_tП a[<ݼ=;U)7jpxvJa[98/QrlWSDcpl r~NyaǎqIRqH4E$f`ڌ2@ =.PLܞJaWe%Ĺ>$`^a(iZghHK@"Hl`ԧa:MaG3v07F;"O9Ym,ې*xS9>7 *UVIV-4{phY;q2z)~X'4 <)g n^)A5zf WCTah؊ELL- |Ix%b?ͧb%0|>sC桹 )u:GSb(1Py,4X]ʄ%[ꣴ>4y8 !.C|̟\r7{I &Fc70dl)F2@ {{{Qqwhƪu09hRu2M%{#-?> ,v6b:8#]>!\@ _òc-udw5]]VqcΓ՜鯆)rޢsUGNRr7ܷA6:T%JjԳn%+'$|z$!A T:*_N߅  9=QD}d ̻ ǒ`RP:GKA=AKI"Q}{%kzڦ֣ld)tHKuq<ך-*֐Z;>vJZ1婠o9XfؾkԖҌN8r-!IQY32Ġ`D>xz~-H[7+h'1F1dE t+{!KLDE# Ltl$& t:sYd7T)~^g7?J˶W.<(|ѰLF#ao2eXf3\neOxTB.zL}߳\H =9"rWRd2 Ee[3 }S0AtGBU Yjo_nwMU}vwˆkvqٞWÞ=oYG]}дk&P'o&d\)HF ;=SY/P4(.yYMކJ`$E[L=|v[ec 8$#pT#I\tTM6DRjݺ<蓚?ĭ]LHEg5 E:w+9kk39egmrI?u92ͩ6ͱXfy`һ}l&Dݘk#oN׍oC9hbi(ZMQ4|/c*[^z!lbҁ7{%>7X ty$9(/|)ppBäogq]{wOyD!ce_&!rWICO^*kI|2ioo6#-q"1?vHݨ5uԻH] >mwzu/J @5۷Z(dRS E'Nrm<.d|]n_ W_]Fw?{9^LNO2 ǰ1:ՃXc䆠{b0K]7..NcjyX?s8<:])x5{o<>:ŐaT ==\>8EvcsǸd$ ) fh!R4zehi"\9t>!sH(74"yc" @z>B$e&1?핻sNbf%[c"<wkGcd:򯱌nKYU9`U CYXEmw\#q2SY G T83 $SB|O(iDcY\Hs0@ Lz-xl~ {j§U}uu?Km͓՚F]WSonR"u2p\'˂Bs vo.;̃:D%xIBoxML!>JB6bD^` d+U?~HҔM>QxqЕHX78Q"}}J)U+ 7L1݂#.__7$2M/cQ 6JH4d5j{s ]0D2HXU%!AqЩC5h_r \۪Ņu"R;@&[^mpJ}r#tJOI/|7z--)F ({X׶=nku C*AklDvg3<ȂBe[ 4B =r<-zML=bT AQ1,MIR!/QE]F\K =fj=o RҸWe[bԫ۪9~riv ]_3w@MS5N[?=4?I*g'CaNV3V+'|(#\|򴖽Zډb;@څoD sbݠbm;_G"G;p, Zwfh~W4KKrR0^Jm=O&{P`0eeϛ% =(b`9(@Z6zi:J蘀C\%!M h]ķS] Y x] ?9K$|yIM*Arz+(t$rr;4oa-T!:)2 X)|UuO(}abUM,Ѡ͡b<'4pv:Wo^Pͅ;"2^ipզt Sȷ?C3z{8z*X.M;f̰t])j$ӈLV,/xDgB 8÷MYGD< U89LWD6!=f&KU|oԂMnࣂ,ݎƩ|IJ5A&^1S1n} E[l&+`9e$.ɻd0r|g [6T !&#,a¢uCM0/ʻ ;di kہvJԹQtR:eLBgc1}a#4LVaOyah2sY+:#6&[k:%150G dJE8 yϣ@^u@ JD)p/l+,v *cqeYpkee7%㤂[~p^LXZ(#gdA R) YLlJ8IOG1YonIy T @3F1 P6> :6f_ :@3,YLlziG="; rpжѸl2xbfx^ՅTڴ^>ؽ!-y-֌g,+s$xqjcV <*JV*(=޺523ȰC՗Nl\^~m.iDWq;?lu:kdj"3/^ȋwvo&WgϦV[TϴyIq'N"hg +tmp#.XI1$ZI1+6*t m82҈eh>ڙhFj,4-ha8J9n|,[&gl?RH+ڹH5: ]iƜ\hĘZhƤhF,4Ƕ45UOz&~4NF$ݬƁޑ\<2fLkj۰lְ#hk+@G.A.bxvlUJk-T=i)%Q\d F1KK Ҽ T'WHe,f,e3&`s7$Ĵp`NqœfS\ˉWDjRĞ:&1$XyZYR6`RWFnGǒZ*mI;@=m$&MOҢ6L㯷+~qywOw䟿<=|$|y ϻr"Dvyb|=}Rk٬Pm^BoNE|c2i1Qq.zӄVb%x" hcY]-&`T)y-4 ϯH@w{k[Un.?|xG~M8׼NSax4KY¦,`DLy\ OIB#j8p&F3 Pz!mj<""?%DJy%ʷ - aO&9]_`CzS~2< 1'[_~8 8$S5"8Zo >>>U xWmo8_1~ ,Tw!+ڽ=/'dI3q8jMmHg<<އǕ5S :XGNwoyL3Pϟ:u݇u'wϻπV+Ю{qݲZu79Rݍyff416մ2P|\ 3;SKs/epҿ//o٫t~5M5->:l-:{GWC[؆O|{.Y BO֕`W`+i#F R!K5D2XI,Q90HyY{Ti_ˈ!/(V4G I򖡕Y""bˡ}R]K|x3p:4Zh<ok ( 6mψy$Op{(,\ |VƮ?b:JƤsf3q=>$VBKUbaQg._Fs2A-n%(MRL S1fk"R6I0j[%"A"D*,P6?sU98_2V:Gǎ{fH0%2ì+$(-0&ێ$3v^ͨ@T[sQbD<:u훠;V`*89CZ`T䐼F#S%F oOT_HϮ8U}֌&֌r#{c'+n`d __S_1_5_5)wWi p>_|h+Y߾_̍> |CdA?Dse=_5^~S۾:VjVgٮLS{zj):8@n7[Ɖ zsRv/M<&%!H"'Z02Ԫ?$i&ƞN¸OBJX,Y(^>+wG A</ECKY".`iloͱ>۝΅=/^09QfXՐ؏Rx㤂"(DZ yVwBZt{uهFbm51k}r/!t{^̱. 7Tٸ23U/:Tc+Z͵zM\X7-´s3nLE7@ؔgn|WB+BǞ 1|`mnmYo$φLdW5΃,/[@(/ڃY9):Zb|X>bESє!OEa˵\p3Sak /U({U7.Q]^+Z kgjtJras_903USjTsS9 OSdrx_SkdnLi>~nrd˼_(l3W,{s$Dwl {{|A%ښ7~/2 nnZW8:px[o6~_MJRGCݰkݞJmhHl#)Yuh9}Ilw<~<OiB,c^O}ҐGq:ŏ߮pC&/W rzyoP@>,ݼ{>bvyr<lVRˉ+>ȕ sM |HϠl!4|YT~7.vӄVQxH huy/'`Tf)9]g$H@U^orB*K^ٛ7߽-O-_AZ#'\H{&I ʲPœ@h^NhYո>)NC0vo+6X8[ ҰS)7D%6.&wPM#-GH|E 5l4Ӽ=1G̸F8^1OI< vqODkCb!QXBQn-٪5XZ+b+R DŽ1YlK\ǔnB+b=PV7)jv WL'[UxMKEdp; ;*uf{<96Swzo C8.6W K[QvŖV Ĝ.Yl7LE\^#xݺR g[n ʠ})v4m~OA>ؾok#8mY~qjl( X_ukOI:S +/OmV7 ept+fKycq3͆Xg6Tt4q u* S1Z=ż9g WPV A@LD"8eC@!b*D : nnp4H6+MJ&_WY+Z@؉kĪZ)Kp ),?{SNnPV֬AԺBNj,j'q& '{7Ωn \چ 64huJZV0pޠ8 8µrB[pe]WY*u%R, xwatlw8QFzxQ@8RB\\6V*1J((^Zai4PuP60m_ uwa` aaKTZu {FZQ3 M3EQY p5ܐh!RCТC`WDLLj *F#AUGR )[^ )[ҧB֪R4T *[6 *[JC%V*jO5?GG:ƕ=$Q=hˎ5kGK;8a3xH*ykKU`7'nHoa`JV8ZbaK:eS뼣9lgOozNczXSxWclOz'5Տ3n[?fћv\!)d s1% %=l>~S/u ??=X~ xWmo6 _V;ؐ:>dIpn%Rlaerp}&Z;/wIji!`Te2pO ,Iʓhz~)t>Xo_>uݑ_V|}bӾV+o[x91f86մYČP|\ 2y"xy_-ΟB閥1'BF_rL?ߩLH1:1A?NΥ`` h"V R!C5Re1<љ1&nS"`V\ w Uh^Ʉ!+(4G Yc,X= R%='mmy2{'og], / ܵ7<MǸdJ.os~>bS \2Kzyt&p=;VLKU^gFLn^>: >M!l@Ǭ,o+Ci L&BKy2YQLQ7_dBj&PQ69d<DvmP~צ&QbD7vN}jF*#қ%>I[(2$WRxx6|AF.S\p}-5 l)% V臎7,]P['hs|FL}ێ} NP@W(6M~{CZ P↶Mݷ=içDy 2h@L5B.?N_Z`xC %b88e-^\ߩF!V6P akIabSte:Q0ګ>0xNjk{_cEg}eR>Rt 1 YdyZ 4Q9;)դP"Q*ő[ Eg;Wp'f`03VS$O>qT0?~>` #+|!8*,GWE߮gt6) -5LPv51ѯVYY'sJg]bFU<' ӵѧ( BԶ6WeV7J8'7껖}B6U5+aDG A$h|ZO"V[֎rNZC*ڎ(QP?ՒŪض֢@VW5no٭]@cucZܯ(P^k® 8ilZ`ŭj`˫H ȅA%a|/[܍l.bjjĴo5pbUdꀽY%,tL7JzE0q^܃b,H Td{ V]dN0Iek[`v?mPʸ6b%nvsw#tkFlBȴhFԚoVi9ȕОMB V>;|~aSL-`k 98]M~4V]:Ԩ=F*vzO7jJ$jnqn;^-QM9̧r69$\=5IJ&g%\IZagY_F|5:zU>۫^W_SJ|N]u>_3OX+~ Vl@fM{C߬ij oee]˫unpyJ.tWvue>N+[]^e32f/j4({f~^sU!_w> SSY>Bx\[o~ׯ*GZ82ĻAcq1"Gkȑeug.ύ\o۴1`G˙3:*W1z"Yhr8F$ 0Jg {4O{}~y_zۏ7@i߾^R>v;Ol=3*Gl&s&! _j͟. F4&>]F$I>LydWGӜؿ4ܡ_G~f8x\d& OˈwuECBGW~A)0hy~-Z:]myy۷#O\G2GC5zR8SOJIɟbt{~lL}B\#Gӵ?IMLPZdE 0 (4O3DQ@E5[!Ng8Fc$M) 4!^j̈́]/aKgW݌}9r?r{O8pB'rǹ4/x%֒Ejіh?g B Lc 9( 1}[Fދ$LvXc%h;PPVNq[IM$[eQ_*C@ߩMڹ17"w)"q0fr 4C"JIx Z ~xV]o0}ϯZi6ѐB*T۞Z#ǁVUQ(-eHs7q/ Q3SM4jۅ~/<^XB溋*w1zAt' $WK0μpO<=5 eXƔp!LGa Pity:aQ!CAe Q}>' 'H" [IzS""PNQM}[ϖ"jEG~g+>;vfl~1}3y:fZUKKq\\ T\n;-yf9\LZnY El%tJS nC2h \ p޷$A Is]Wf!E ϕwSxCuH&$_Z \>h"noiާJ$3ǗJ'e1$92i|žؔG{eK7gAL[By0V+g4DF-S^~FlAde7PN۞tc29gN0E X=d~_>n{.*;YYz.IT *I#.ٓEUB6C$a ^s~*gkLIUˡYzKHD/{43҇jEz@XrSն˄$<:6)u*5OW_qkkIp gjvyHS#3t,^S {fXj-^73ӊ>ٯ띜|;mwJ-\;??9:s\pbtw~{5Kmt}`wE-7[1AtdFC"""#h,CSc0ЄR,N1}8FdpF_ +%_i}[nk/o ֨. ŮP'u$^)OcB )V; Nηus[M4EhU\MherȳRjE X` q)Wet90ڜLW5w[ظ|kY~.k u[nxXQO8~ϯM Ҭ;$`aaoӸui9Njqh(7͌SYg%C۳I&,I8s1=YoGO_H7#8#ǹ|Dt{@zN\[,e/M'Ow2cc8ryywD{{T +?:C$9Ք- \H&9 (t Ҽ3E%@LqL4{&s]|G?!ƙ(RrNںY ԥ Ss7\d({t~l&K5/:܌77觓oov7 wGyn9W{%銥at=tXvb>ް'ŒM%t E TFJb$T8G.BIh4spYKרbzr& zS}\щRuN*"q KD  Nu}At#pǪGMeڢ[:kS Ak ZYkڸ;2+&|?(apFd[N-{`;>-}'$kޜJUyQ>x2eE>qe0qU<cb͙/ bb^8 xWmo6_qS>ɮtHtXldP"-EEER\ǀe{}TeqH%EvWz~!&_wN h?i 'a` g@Ou^{ǹ˳0\VjHw J߸շ' Ǹkb`؜)$`,9*E4R &,e10Qԏ7~x2%rٹ] zl}ol*Tg=~z^އQ G~z-ݖ{g9Ґh4:=̔urNR\]Z.}4q7qGW :{2n$X `FՁB;D. AQȄiQRiVؠ#M[Y9P G}=cAʲ3Ilײ(k猯"5f/sN#iߧ `%83Kp> ]jreUԘZUV0FůV30Wr2Ld=50ڊVǗUfz6G2TK{#5cq.+q$<ƨw>%12,F9)`۝%j98+/4SKuvon9z<`T 0MEFڛWB[5b$Xx#ҷHph^bN7G4WOtuk0`&nO{)u姣_OGunat@~:,m͆+Ψ]ѹ(j  gA,N_k@hv!6d_N><`ȞTPtDڌac sʉP"YA_w kk_& dxWmo0_JkM3QhIm6mĚUUvx eHľ{ >q@eDvᶽh ²-!tW/J؏/o> |8Ʒ77%Y|9NbOkv+oOsEmz, R <(8 )wS* ͽȦ,)$V@}ҨH*G*coݝ W7=9>%R9[Ls3:2ajjoycgck-XqZɄeLM&d+!7lB3XB)9Qu/9`s.g3zё@9hkBeʹpAr`,7pf/EV|S`7huX l( RE7yzک(|0bɪf0ݡt/j=WUEuHr+&95e'95%NNQJ-躐mهur{$a Y*w0 vyXmSԣգ e<|>@EkH tQUmHhd|7dtD{N f`P zxV]OJ}khb'MP+0BH@{wcF1)wv5E±3g̜nLK3t|‹T1Qdg~ӣ؋}; 9jH{oﻛkhB^z9$ EJgA隰1v[2|S /*"4>F(,$[dDV3ۅ~GhaԺoB8#Sfj[=%G%8 \=[L&0JANfUL4_\sWhMHpmϙWFT`dӂI'Ki!%7C%}@ū96mbkoMouGwNFou[7_I7@]Muf؝Dk]ؔ~m)r86t\!CRdx8"0{ aBǦޒli ,)OV.&ϤI5$c!^a 6 T qxGU0B{@zS6%ˊlm8S,YcXQDo쪏)#` +8?\xF$n/19*@b3&jmAjDPZe۽*[*N[b&܇6V(tVVOvUUbO㷡zdTb?|F೥3n+ J6AI9!֩ެ+[7N_<.K}t=YlժwkkaZV[ź.r[kcKZBƮ1t%gʑȐŹkY+я|+`Y9P]UK=4K G:1#!:mB#;2F7HjrΏuūR(bF!In~`dT# AF/Hq5/X@tn4sI,9 \?JV(s'#޻Lf$ܟЕ[ Ua.!xZmo6_4 6 ljI)}2hʒ QyA()$Ȼs:B$i_ GDE8lG~sO^ތ;dWW?n@_XFuc>== NIgn嘫r3 Xp6[,">4#K@IaaЧ8뀲$MorRr?I;~x-̒"ΟVu般1U_d"#p1^J+vћt2~8%OGGggIӮ+7rᡂ $Alh&Ek+b b%lvK鿆8)kfN~A)b b[w<r}EmTȼ4hѹsU@\A<>-d-z8'tVQ[%FEk4g3 b8 RxVmo0_h5DC* eT:Rm$BZU;M]$Ǿ{|KiTdmTmDӐFm;oyz??K>^vQuջ  WJ,庋Y."w}R(5V 3I*bɄP  ͜.O',G0uC䢓K,5 gu8yF/_ÿyJZIzgXD,m* ^-+AE'~_W+8ز۲Zm6ơ*x O:fZUK"*K}gpӶ%gbUڱ˛ր<)M%ɘ"㉶]!- {"u$h*%`4=)|OJ /,5Y}#k葍b[xy1'p/uڇdY¦{uD eh>#YE7T?w3W0ܵ[Nr[_m]oP"E(3mEF7$ߞ0$Ga7 ͈|{s Zׇa0? b,zYx97(]V'`q6G9  @x?k> 2b*JS@caJ b^(t^TONI~y MdZU;YQttͿpJD.u(9_^^eqN췵4=> ;3Ea(snG\.|Ps|8 YK^4+*ɉ%PsrNY:! X2G ^NJ2TPR/gdC8_ˆ!}A8%-]4v&m ئ{Y1{p9$ɟ`qf_{>{z+HϮrz3mbԻ&bf8#Sf.{[=%IndZ,/7r!WlF'L&0- tƺEn6 H̏[=d4ƕ3,#֒]~gJ)a3ޡ*iG _s 4HAsW6$P^L)$~ Uj]{t4Jl`VMSOf )=N͏^SRdx"ߨB{zCæc>lˣmu|,8{d$a8|e`҄ 2_] 6 T qYA_w= 5 &eP xVmo0_h5DC* eT:Rm$L%ZU;M$siєf9IӮ8e$%QӞgʷo %nۨt?m :Az ܗR,epl̪"w}R(Vܞ!4{1$kN?#A4w"ha qK7I1璥%qծ 峺< '(4f1Rqt*[ܘPp5Pz^eԺZ{^bovr^d,kZ->irYmY[$s,FMӖ"mU*8byop8tL")Zڣ9X9@੊"$(+HU%'h2=I{(i +>6y/GKyBRb`ܴO1O׈8oit'Iv 3%l`H dtǓ!7BV[=Ņ/v T/Ku@SJ(c7ҿ9p[tK_Ge,P3 HKD%Q(;A#)J#ɞ xo||>< ZSQ0}g#,K[/?NjSK?}4F痮`캓3,;}8c)kl6fp/Wne}"9dSL`!LOA?t悮p<[X9@4%Lr1}ʹzB>πgB[$xM$eרGSWՋц< X?,+[RΆp6A?іn^7c9kSľKY.s%iHBevp((|UUUC#cG 7OkGBi 5VR\EQR2ڮ)A+SSW=e=]N8tOe ,,cr<@1)jg><[ҭ`Ӏ/1l "ߡ| a. Mh(E&Įa\ՌgVaoFM3T* |!bV=kp' eUC|`֎b[k&֢Skw_x 1ݮβE'.ny!%ic_'[fJFB^ 2P2RWQ_jx"Ex j)CGro1hc}0Au_hRfykc',EkNk`6jT#Nv;ܣg`4$z^Ѿ Ycn<^a |?*kvWz^#\H NTIZciod"W< F@}1—e4!w>z(\w zm:=S:mnYM7U+~qAp{wb!)؆)Ooɏh̲F`HBtՄJ>SBLM6 &8j2w:;*3AvPw*vq<ɤ@!YT14r;zI=[bn YP̚jw4Ք8(Q)L J Ϙ3XxKDE85Re54mT^W\څ?RjL3J.B:1+Q4(/tK"`B|Q= ג n PN%D-6ƜSzcb 6l:Ŗde)tV_&߆"$ VeRQDNt܂"MAA}sPw+X[n8Ǿ hhviHZk yf}f*zٍ.Et g$&؆ SvlG^'CQ=7{=}fj]5M2z`ڥ m!6W(†<8w]Vga fr8o3sA>.(J}-/l}_k! s63[T@\_!S TT gDvxYn8}Wp݇@c%M]46@Ͷ)dP"%ECE}[-Jw "rfxf3d/SiQ2Ƈ#DXJ&އ^՟<\L÷o/ށ?+ǻ `=o/rv|Gҵaib"f1fmI\p#yy?h> *r&ZS'4GFJk|ߩb{kU]e! p9չ(ϡеͅ)9c/APtգlQzؿAgeNwoit}4u:Q81iJnn7WШE"  E(VKb|KSp! PX DDC/ U>CIk+Y%dtܪJ!y`stIZUE(0AxIH&ɯz]u{m95H?~րQ|4+lW)gGUE:X\ŵJ(`WnKo^LجEe775Fө(N_+:C:CS4SZ {:*xR=NsYzNi}2PWBjōSbٶ7 2z~}EPTnEWv؄w=go8ַ;`^$$7uCwcVZٓL;O*vξ$N}&a_D&3s (9hϛD^0OR$%"̉_茛=3Be47r\5L< "/L1~f7Lj=-Lխυy:J@n4uBeѶaR-=*_{=7=AGT@4vx!P-LsY).XN  >6nI'zc9DvL !'G:Ryu0`1AIR>j<`B錊TJGNNmfЃ]SM".Gk!RL"<-3mY=6mB#*i^湳7 LT`Q!@ѩvxO1N Tưؐ32 @;gbMs܆jܷ-J'(aA hƜkGvU0_J&HߡJ*˜;;~`Y>ت6tfN%EWkճ6)-+yz*n;*ni. ކ u#޲j+k1L~/.ucrS{a~?Uc[MaMiYQYNbe),յY \g\q\-L|_g=m9Ts̶|*g9'f {G-v~7`osJü[6EYYZ,X-pр#Q˗-ie!0`}ˏc|Mou  .]j>>Zx[mo8_s?4Z+٤Ch8n$Mw/mѲhHT^v~CR($gh$9<3CQ3קOXy<8sx{2ݿڃ?>Mݜ;Բ~$܊Л :~=xb}lY]$aH9y 6{dԁ F7![dhʃ! uܥt>dҌHكwɟ?3:<ǥ'պdȁM.t<<&3~ ϴUs)%.&Gȏ4a=ԔGXJ)FiqxX]o8}ϯ-Ҕ@6dDv}B&65!FS@{m/[{9>k~#NExܲ՚hsertɳ_wP(vA׎qnyF}q^/PɭLQ"p:3ܲDT$ܐb$(ԯ&e`l%}=zru~2|=$=4.\=N3>[@dD&D= s5k)ڡg'6`CUt=}!-0<Oj@lUC^}jG5__v\\53 _11"aF'L'$2'Qy_=҉[9(s;x`Y|aފSw_'d~|1xmr}v'?]_~t}*+\1N2lT{/}a<ODt +w纰:C, x% \K BCiߓw$b>  GtIy]e!)g*Þ<I TiI iP9Z΅ 4XQ?,Y\ZY)Ch{BWx}Q#&[WYohep[x6)YǬ<~m$7.EVQ{:×] Vv K -HܿWv" !7{*ΝKC ctOg{xO>]St/膾n2< }{ǯυLQb=i`-1Mm#8DT{ynbڃKu0 Wp)֠^ d:́lm~վ"q`?N;֤ <JbzE mwCxˍh$h[+ӭPIRd|3Tb`9.v&EYK>~)>U[*;m2Q`OJ \5هLYtK`ry&1?WH$ +dlހG2+ݐ{cOoL Unvi؂hHv<)3q X] cm m= * 6uS&߶ƫތsw.~W$FXhX+'%SNSWSܒÆMW)x\zet]6%c1X+ӽAmͶY2.PN^gȗۆ.ˍ |[vA<Ǡ^ζcQ/3u -I g fLr;3. 8tIh_&-kX *mp7=Jhh$ѫ`3TUڠg3дֵvpk3(8͕4Of_/XnnPWPjLhl XAǖf*S3ָ+a9xF ߬W!6/,1cNjJÍ:&L7mL;mL彂mL$Mt_ şJDz]Uj\D#hui?O+SQXw5`=L][m \chגoh7QX6Vx6֢sLI NBь/)LQ ܥe= l `CV]v+ (aha0ڂbO]q% f٩[7Uo>[H7eq J~|nR '- ڷCIjdbp&g9|I*mhuu2ǣ>wc–|[!w ((Tk, xWo8—~h']T7i& nǮn 9I9k;tiH7G *s&su\DX%n6{x >nyw t$_:RS_.޲ wKWǹ"M bӐzK:7ٔ% RD)!OK!Ieo͝ WO7 }u|"?$R9]L3#au uUXp!OQ8i}]I_tп7'}f]99jw;x}0t:z /1(F7sW>MXoQw-['ε hsHQcR.E%z(@hUN&Ҹr\ BM]ݓ_=rx8A^$"='zx?C{w2!{ׅ_V+hB.nLqtLT)A J݄UG f4cŒS7ZGכA_!W /,"(1>Mt+-xi!q^X's%{gO`i&4?U(ZP#uVKՂ8:<Ϭev;/gcgv|y6w4{tnjf IENH* KQH}}qk9.PӤ{^8k&91| qpQôa(;64im:'mYZEfэ,  s'e.3HEu{U>"X7ZN7)ũDy5 f3=$rGo.tY-'ק ՍQ{]H*~ JD|NK`]N _~pu&7`0ЃN2Fi5ImI>cs\EO\$PR <s萼m]QKVn%=fnC"#C"VadVbB4#em(7l;/`ŽYnj;#p}DTQn\K}\\գDiI-w?vEM|ϯ٠+ߺXV#U+m]a2]nXX@w_dj ,,dnLxWmo6_)e6$ Nuf, }2(Т@Qq}GR~%YqfD{x?,8z2g"r{h -wamF fxVQO0~ϯCIK6A*-lHUrb7HʹPlІBWml};;8#w\BGnkd"OF >~vNI h?98]~G_ WD zlߟN޴I׿{nna|<lwsarp2r\o{G\!A^x]DR* H}@:eTũ |9Xb]$ 4'A+Ɉf^ zK F&Pa,C8hhQrt' ܭqrd44OAp2ѳ2zIJ# 53G?L&K)2YN\%I M38Gz)9Y[ -r#"}d:Q7\pV((Pe& ~2fԧꖫLķ/9 JZE&A P1"rdFMWxd[;T}w!hNe-zhoX.re;-TR2 >W(# ?qD3kCӊsw]dV(6gay#UɎQ$Xj[d7tuh2qGh&|T"I])sLla5P]?&hv?I栏fC ˒|g9$=};{]h0LL&L[ %7оs=;A#tzyG7~x|C+"y7wiTvy岳w˳t" b7)N T9村H,.$V}c!L yQG ={6~8>!b)\,]`uB^qQ㢓pp{{~:ɧ֖fn7k9hk;xc}2wz+,>Fw͕D梯c{{@g"H)bM PdJO P@gO?E9*(P4EphS2 D˂@"0y0qUB= jŁY1qhmF0HREWnȼ @̀lG"/κx3UKjYqم9SLPϔ ^}_٬٦_hBU"3٬myC*YD`UoXO3.7]x taՅSN#e?HAK BgBsw ((_r)$? z'X>QYɠx΅U) \[R ="l `(zW`X4m5M[ }jv-|QYqF7QLnC V󬞬KX)h^dd_,Z1&[OWӚF9LF!Y6|5׎<#t Y)oײ DjیvXCİm MSƅN Err Xga̰A)OEUuEQ=oD-ʬzcZMAzb c2fYZ,S~R9O)gV`+Jt*chuuah:`Yo(0nLX˴jc ٦Ɏvټ^"Lѫt΢O{2d  KvΙ]zƛܕ;ˁ?D2av0[' g,hpV,\͗1'*J&XSl&1хCD{K!'a4~:3H+[uh-,i"(\?q:tQXwT0Q|h![&L S|%2ONoU*4?!tEOA_2͠{,ȷMҴK^]]_%߃g|F"A\_K$ș㒥hgW##R&a,'wBg0YG-Kʌt%%]݆I cps-=84șܙ`P&L$ӮtHl[ldP"-EErR׀ro|9ч3 KjT1Qdae翆 e`r? B!3`bH !7inrZv[Jgdjt[x^:3W89ebv\8{W=߽ڲ{زݾx-{>/.m "R'"um}:4j§#Bm:6=hwU% pB#"ƿIP }I*K޵K82,W%C(A>zb r:,QZ X7랮>N TR䒧Ƶٶ4ɪ̫}K@3U"E/qyP4Hy,mw]OWop7g?{g8"~F7w7c`pc?CdjL:C&>ϕz7ߟfZA*DqPQO{*2GFl*{7F]9ąc&03*EM-܄[s?hش[Ksݭվ6dSa2{;]Cn5t}$Zqi&Tv; qdLLs[&|8p4gڹ6vkl=s񧹓Q-Ljr̶|N@!9yWd>(qw2Ix -{Xb=sFVXg&g,%&!|Npoul1c f8uAĥ30'pHceȹl$ ;(V%̃XAd]qh))pU9'>wnn pd:zF  J\ Е h%>Ix%f3džي&jCm'e ic1걐ѱnV]a> ïS*A(A CB{=%eO~X/uF4hS v&9Mxjb}Pj&AvEIj!|(˒c_XzB7IR Z]  MSmDr&o/ Ltɜ_ov d!d`WWLq|h*1#v"4B&SjMX7W].Je5ֈΗ(1C%%3]uqiy3jyrl?a;3ڴg6sٴXlomm6)enC>nZA<^4A/&{ @öS~dS ošiS'&R`W^%󐥖,Nd0,XrW f)' vv~qnxXQoF~WlCrRQsrlz%u{>Y Z0>wv$P5Rl؝[և:$xVQo8 ~݀NZC4ۀ-)mf[,'$'qiu,>My~d)̩(ϯӱ!X_ٕ}?H$Oou ]w8<:)X(]:M,.\wX8E>~s(/]eVƉdt)%DLԧw&Ψ@t<D" QY"aaVk -?o H=ʣE$ҌСtbvCrqAoJk)5^~?Km%_kt?K5xONGmY['sl,͕-yaבy=t_S ·xTXV4DL(L% u\ST跧(B'#F /Qyeh)K <&zߌڻ ݆6P J$2jg 95xyZ+:l$Eb3M5A? t׺#ݜF0<39ڢ5);xb&u:pGe£W5la3鴕H)PrѨ!^,~9rSV&jg`1Br@T<`lic/U~Fo +ٵ?jo 4(`x1gUs_ }ۈugFhXߒ˷lA7)Q}_6p>! aztDl$e1^pi7z\_l Өo#Wqz "J8&QB%J_ULyv1Dc\"+hk.Rf\.;^ț|^T3V^ڧC$9XL&40<:Ҽ3E?$d=|U3N^OkEJ.1R.XztԻ0!O@|/_Qe;.:rO-{ƲRwh08?vՔ{%9WrX |w7W䙋E{Xm['EB[d ]TB!S|ߌ.,VLA^gg8A 3+$!xO ||I{J F}5y<rqpW:vm~hnr+q4T4# Й]D%23 k |:2`HWMse}u}=MyD)As 9tȦ<_`ʘܭٙNYtڢP(Bֆ[9{dSy]H a}nw'U ,*r4(͜&4zu%#2Fs9gNBЧoTpMQ ,F` d!0 rUy)Z=YOh #MTQP”Wv9~ R[vAC?:`m*AAM!h`hJ@UYno]7b-)_=dKo>zYp3ł떠&:5eKNj[gYgbylJ֐$ 5솪&&ZJs+R\T7T#[ X^O=%2mbl6m]i$G եkT&֌lXV 6U[7g ~5CDI`"0Sa8z3Q9.GTe| 壍vBVzL~-.d`vH0Lp`bvs. xXmo8_K?+m ]ԦYQ(+jKo>!GSZoG H3gb/=S3^ghr-sN}AۯCt|y{CMF/[У,ws㯣&(`?;2BGwod1At#8 m_m/ kѳO+ãLXXCsxN1q '3 ɬKf4̹' a31 9Ijر^G<' rFir:d[?A~ /ÈiR)eD[-;eoxkӑSc8vIduS󙗑wNZh+""[kؚNiBtLΠ9@0^Ckd.1Ԙ\ blӛ@&pR )܌$J_>:zi}o7(&5u/}!^7(:~nqId_<2dk`ШՍ4Zַچ.^R)peotM}TơoWmIu hv$P_kQJS^JGAܘ1BEv6KtiZU7&t{K/U+jQcƴgcՄ1}W2jXmlXbl_s! U!;.Zu`qMm/F> /a209 #aV& xhCyv=vTmi͔^Q- e*]Bs< ^B3M+[X;Vg{jiurbۏq>w3|/OУh(:Hg\"_DȴErZXsXMynL|  F<$#3A<Ѩ|'~CQr\p~-xeLVs?hrd:gCxv/ˊ;jTl㢳ި/+~[;[n_^ӑov[NYS:R%C|wc P\Ǘ~@妞5`yȜ$ RhTa< h$?Pňsx"q<- Pݍ}S{j POg9*Pf@OdU >+H)rd]}TVv}`L5҆mb 2>׊孟304s ݘXݕ&TL:IdE(xukd-׌='pod ق`[pp?Fեs=9x\mO(a6p.Id|h3 PИd/kβEl֫ʀ#bvGa'`{n=ܥvrz~zr'{R@ޛ*d+35ԫ|TLEҺSq%jQ:^UPRNxLwT<ߙ3cHFc i A=WMRJ Co04P㰣Wˡ`ۍj/+Fʧ ]9Q,쭽H =z@y<WgxuxW`}+,zYz=fm c_$> >`;j@~t@( ??=v~ xWQo:~ϯ҇n-Auvv讽{BNlk&FS6M;SBH)E$>B,u!yӳ4w$^?nN.Pfrwa?x|;F_^D}6Z$㋛03fqr,S|/nlXu{T3f6e2x0HN8:g\@^tF* Mt ϵZ\[[}x懽Ɗ@?&Rʜ,3aΩNE~|z[DIOP,!4Y|,yr8!qdcВ(Qy-/Z@`]X}^J44 4 V74v5M"ȍʭ ?HҢH!"ƒf1!T %n&rWc4Dsj>FV?!wswǣ&7XIfSNAv#`vZ}\ {LsZН6ry57b{o |RTL;et~YT>e|FKiԜƀ%"YHFcZYARςU8 ͝!BQwMmM|Èhl/]{0PճC5| /b{sl!S-`MUGl(z7n`_Wב 걠RͪR's-"b1C6DF0yfd.A>L#fju m}ߵbxM엠MKfFP\ڛǓdfI]?l-z!3q)"Lin;8n;kTgWygux8sDz0GKx4]a?V ֟ڱQ[\]_p e'zUGEi{[[ggiQ_K¥p,)qjŒbpu}iKv/<2';W\,7{A2N[Ĝ.h$Ð )M_%sbS 3ѕ.eTe⹒x"R'V}cӴRs ]W{y6CgMʬP,NA@,GOO6PA>VIЪv%kI 'bg_3n^M ht"&SsL2_R֘"bB%Ty~Τe3;%i#TD5TʅTy5@dҘWب}R9/ʩ];kw~d |$E), iUԄǜk.bn0'T4Ģ ][۹cop^I_8Qoۢ eP7;ʴhbe̠ٮw5ϭlX-sڵYPF1uK0dt-3Yn{=o[x Rzx6Lk6LH&s`Ն|9Nʔ*W2>ґq6\D({m!1)t{maiJCYǠmf-aܗ=vm!S$70+L4J}wВrد*Ih %f};(5PԥH@CP!_d7MဆH|-YkRg=Q(փx.ߤz$ 0$bSAgO*N.:bMzTä0jf֍rdh{T-Z'^5fj}oiQSLцTD-#kqCami',]s1NS<j}4B6:ƒY|hV{qs Vno~>uS  wxXQO8~ϯXhRt'Y-!rc7֍iA7&4qC{f7'^-i2]'h ¢wgL?xB ϟnq>;iAM&̗sphR玳ZӁH󢢜(8}DCxZܐb7IN= cB44E4gA` qKRu:rSyE?,?3E|2I/N!]  ]y>xXmo8_K?tWXԆ(m*]tOIm@{;3g؟ Z4ND$yp\x<xUQo0~ϯRCmU*TݞILb-đVUI HDw/#Xq wSǞEtL/N>r? ?'j~C턐ft?NGW F+iB.5jtɛT~'&KIZ`_5بr:┣L_px!L1OXKO)ƬE2pI T?\h(~'guT _-J'#:0{f=YV؀gke;/pxOVx#vczm)b^ݮ׍rIT=7].qotѵLl fFxHk F"bD|c~ZBR@ˎ5 b{Z+OLQM%sAO)n4*bV>˘6|d?14 "}Mweة@߃qe,LB˫vQtqh.Fndn=L}Z\qJ.Kp+f/ #CW9^8tk̍7{#ZTG4[4*v-GX]˜P;+hmٯv//Sc-xoFnWLUc[݂%yt749]V]8N p3cؑ񥏌2}z¬L}B*h`S$0d9T.1>**>i0"@)mjpI|0:WD ȯ5ؖ/"DxDܵu5ؙ4Y}1Bp{Ҟ{Ay01t4N`7Dqe^'v]hG"i跣MHVh:c$#ӜÈ7NlD OqK~#8Oxe}ؔ14U@7ƛ%TXeDu(ٌr.3R+w%"YdIK;(rcUMV`3Q{.u }x`(G՚C}/P!]ABJ" ēžh;qdcJJm$ץ&/6TZPYV)OM֥Z)&z.(7:&o`A׫)ijz^zĖ&&ZvF4DGQGeRt6ٯ*rW}LjoE6F e+x@2th8YjP ug$[6AJSͭJOLZ~"R6$b zH-Q{q|B %k { izV HxVQo8 ~й݀N;4i,bS [b2ݬߏ$mĖ)H~}1J"ULٙ_OcE^\PrsӐ0 G#g"0:s$ EJgk̚QemW389e$93 *f"5>Ƶ1?D3 ;QfZ;YΩDqB:|N l'$h{K~>Hu9_^_^Śݚѕ`p|)/ Daq8j08A>4r8 )Pw߂7Vy)|#sb-Hcp\=4z_R%T wx{04ဎ#`* BG ?̣PҪfKLAOhlW56^EjԞjNcXMg385x4 c4HfߒAZn=F;LAiߑ1}eEߧsüvө(L NAJdULJV%My ߩ-g~>x p JI ő=䎫LP8+z3'k BZ.m,2-*{VsVBkmzQffoWl[ؐo"~DvzV涣`vetT܋drn{쎎Q:6Vbp-2qG^rz7Tlp,7Snd8WG.LP ^D`dإ ƕ0YA[wM e i{V xVmo8 _s?tvءu=I XvRletb%Ķ(zH>6du%TqwOx*&¯az.FwH?qHO0 Gw#'"0=s, EJgݿ7k̚ϓ 1fdqsp$9S *"5>n9,~0(tv^Ty'=_BӇL`g\?ՙ(HH7*I$ڞ{? NO;3Ea(lmGn.|PO>GԦ{@-ȋػQY),#s(#ƖRmJl/~/UB%r%WgB8ߪT!^<*%mĸs ?jHhl}[}E4"5jjNQ:&E|<{zK.Sb9o֓c[v'kU2nj5s %^LZV%sҐb4͹`2d,nU7~U1ajQHEH%g~ov}1Ъ rZ0XƄ#䎇sAQNʂce]'iQ ?klu_K1VuCZmZ.-y*k7{zU$ZįMekei;f+&kgҮ'|Xrm(5>&7؉mv:&JEL,/]+m9lhOGrs~:3쾜,.&X^|t3iBxa. ۦW7l:WdmM&Wɟg l|\ xVmo0_JkMSQ([ҡ'&jb8Ъ/ HwO{.vp0hJeDvֽh ²-{:Jί.;h5:߽nWЍ,VqJM}6y'd4J]"4m b7)NC Mo J Hs#K PL^$, 6v\=HG D8O(2r45K@c4S7sVqT$]PՉm \ݩ*Z+*a%c23{S]C "Y'DɒT+ew;FX3;Is;-6e^&Bx2wo`TTJ`c; 8 ڡ*kW94ʧ cc}6 0xVQo6~ׯ"ٵ ±@kmO%QJݢߑTlb;5`I>~w\%Sōz.aE,^7n 2kdۏ}8!x wyP^jVOQڭy@r0Mp z3L!AVycY,xZ+ H}FS)^Sz *Lo_Dϩu\2T"=7m,TW${|wO=Z6.9NG|wwG[^./c-5ynF^OrIN7Y JFw7.%&! |kE- йI-y)X @ic !R/;2*h* d _Ah<9:0E "6`]bӺajbojһhHb (ꬵNVmNMٵOO֦Tܒ%ddn#[Z_lJ! 2½ӱ[s| KCcUz,X3K6 ^jy&FRWX$]wxQfJ,w ?}K;rl0" ޟ[瑔V֪"tf;KGiIjJN$1(ZSAT@F'/諅1)>IJp (+(!ɑQ#_kC9NofĚ)grK1p|iG!ltCwTF`^i|&#h "${]y6h84]SRH WD뵌/⧻+&Phŏ͓y`a s)A,xb.wr3$ypS@=Bkp"2Ed3Ȉ/}>д"׽TA}(4EBpbnRK-h]@S] |1fiu{=چTJ} vqDDi2IbFe1Fsv$! u&(lPUNesnLeVR崊oUhUh8uhFEEԪ Ix'W]>k]S:kfa)5Z&,!f07JײJ%TM{=au],/RkN*xҐ//=! LMP|KzcG PژBzsـwzoNM0$wyqRu7֌uCyX.iY[/Zx ss  "xVn0}WxP@hHElJV۞[@k;@{O=x$hFExڶkNF4 xҨmr|پ,C[ 7]T9Gqヌ~~ @wR@b|u[*ܙ."|?*J+nO32ԜƔ0L&ԣp4s<(D!`j(oH5pɳL>'l!$ ak3I섈-TTSƬ<ᢅrϭˊky1kPʸ4sbgY6Ld㽑EVGNY%Ņ8..V*y.AUۖ|j랹\LToj,wY El2M脦\dLQ K8h pֽ/ I:f[W!A ϕwS /!,ۖhL;QUB<5^y uP!C#y@3 eI'4*q.uەk8nFC4|b0%GF%iЀʘL9g4b)kHR ~e 4*`wwvNB@pT[_Ǖ*(KK:cA6N&F]ejn% eF1<`Q쒐IX/qX%ajZxqrc/&z{DF0QHo -7 m&d$ڜU ׼Dʈq~fxXmo6_)e:$ k&V>HK\dQ8A#)lIalKǻswD1z"c<۝VF4 8aIطs~YOϣ_[ 9vxXQo8~ϯJW ՞4+Jۻ]z'dbXkb. j6pTH7L>I^y \F%< It`|  xVn0}Wx&0@hHElJVmOȉMb-qUߵH(+$=>~%in8u4䄥Q}[އwW}T;uݟ;&dtJB麗75KjrVMȝpJCq$5M^L1d2>3tFEqS{5iu 8y@O?yJ:IzgXD,:7f5 ${f=YV@YREGa5'+zD[>z]-Y[㹅J%7ڒ/lt507b՚ᭀ[ֈ< Tǐ)2ڴMxԓ` 4ئrtR$ OU H_Cp?YR2JG%uۯ}5!y 86BY$G&Lz;\ZTnSӖP0V;X0ڒ4|nGtǦe,hD#}o^9)KN_1D<\T:j&5΃(KTfQ{߼wʴRgFS8UQ W9-um\lY&jDJK2Ѻ`v? ŃAE,]>.N]T!-_\䳡*$#Wwlj[r4RKN:k[[6rN]K ޡknS^f))y>].t_GuYZ8$'b2|"sM@DSX;U  CuGБAi Uk%r{fўm\'9d7XBhL ]$$f?bɿ7T` xR*yW३Y32N$'cnh&/b/.o!VJGk/5C+ ;Y*-h_ٔaL5n3BY֍IOrBQ2#q$lйU(E37ӄ5&Rx#4!x*X1dz>ZX}L APqlRt$2uPAKgǗ>ϭg#ĴZ[XZ #bSO:P֒8 )T[JBF/GV2lxdvĶ|l-X&+h*K5kvJv*OMɬJvS={2tU=,6$)gI X{xc}Q4Ξy1BvŵY!lVH&FW.m.֭΢u+٠jqÍXel'Df-xmfP)"<"-2@4z/&c~r| UQ |nW>O"=3388y\ RrXsLA!PdD_Ar}0s4VP%ahV4ph+7"ә'v@'6EGk 8tAFX:JsҬ"-T$)V~>SuYCJ +fPG"/Og]u0L4bSUÇf$ZܡAs=z-Hm`6=gu__$蚪D*Xo`SE{Ay(YFJF:mlYF2 g"SRq vI<0|rJw, 9Pd4R&Ki^(aӢwTdqDI .aS\ #7\pV$73PeXQ9bBY&r7۴@[ Sԭ"u?FT2m;0_T~ >M[Z@;{ݽNO\}]vD'7cuh^LF?GޤVCHjZ&قԒKѾ쉮u|,ʼnr4g&2 *Հdz#dpj] <~ 1&{YY[4C";İ5=Q撤 $$X4 xWQo:~W҇n-$K])MmEwo i:M;iI-R9϶q*2 lDӐFv.'|ky<6B姏ct| Ʈ;MO/RPuK:sz;}TQʭx<ɴC$9TxL&ԧ?t.4s<](X)iL=zL~W' '}$xu$=׭K,"]7 g(HiYqxj5Qqz4>G?ޖf^k[>NO{=eynAT+|Յ-F'\fy&VuIPĖ.i*)Ҧ\+5'h$J\ Ti@$oyfVh~0'8^r'CBWrmui4TfBAD9E IF?\Z (uPᦨ7UMO$s=z-_bvgot)"A7TƜ^XWc|R&b"%ykӹT/|..s)-LXxO7?~ sJ)KTQT-,@ .PdtG f?u f_&qJ " ? e[ 4u- |@ZyʑNMŽ#}]H\Ue9CV~x2FJ~Z)_Բ`.M6mfu)ԴRR/-u4Q5 MOiWd.tb/x[@LPѢ 9-և/ZK F_HwyA؋"a',˪`Q,N)w+yaݱ8N넞֛[fͫI$,: $QH jksRvA7:V\}Sb   PxV]o0}ϯZi6ѐB*T۞ZQ@}vhː }ɹ'8FSf\$MmĒ@PM;g:?ڃ?I?^ݶQ_6ƝA>! @2d")' g3:" '~R,+N3q%܈ ˘y kN?e#@9mxD> ahƓHKfY}AыoirYMY..qqars onv̉bVrjr'40,4$#s M퀾u Ĩ%!1~\U1!C+w/ ay(n$v-#hi5`{Okf`Kz[^7OU en{.yT!))ޯ'E3"|lxU$b4!P<ƴe:)h1j+$c#XFCzLF ]|HCx< ?NLp&Pl>Fx;~ťiz'ޫ4VHoI .Mmrx:7&Zu&A MMG$/BVJrܕwК]UШ]҄CggyaiTJ5BX Ufp?I;8pk1/ëK F0G2X,E+&cÿOҴar1@qHY[ AL$i(AYE=]NT67)44rXC|lWxgw+|#3z^EP9딛LАShoc]hs iAg}M`(pо/.>߿سgqr{_i=9i4VՄ[uI̸Os~P`ϒJy!AMgIm|%3(ə=|.t " 'eSW $F\@Pd}r l$SuQaUO.Ρ`;ˋy9nsl$GJ_7 `K` y̏SiroG6' =[O¼&FO=c[+nQ&+QY\=w>h4Rw$%QE 8CUhe;lnIH(C+JRa4ۏ5RRm;MX%3N>O]){&P3XZVKe>`D&t TIޓ4 +7 _+-BeaTc@yS=W \NaL5",cr5s}܄:[o~Pp3C3/k8?ܢ:z#?ѿ?D=ܶo΍ʶ˥Y, 7+ܪˋ\XsM//;1d8vEcWD \CہYjulOԥ{`pR׸g 4&sp.#ۚ?JL羏hȡ?bDSx3}`:W`<Qʙǟ(%?RTb]j(Bp 9ݾ)A|nA*|@ u`A-[R֬뚶&W_-ڂ&Qt+u_(emֺomުl)E;9ePS-E:YbIgv*IjJ#AJtrJ_[\NU}\NIFLitr(թx%W4)%UÓZ~[RSjQvڭdJZԲŒTmn< a'rQWh{sQ31] /a203F\wi}Cݡ:TVH:_ߖ 8{I-E*mB`.~#ԋYql^ l] oo  xVmO8_1>JGn!J W½|MMqjІdKh_4:ve|mjͮju8u6E63hpJKrR[:]Mr>e,d´_#h@+LPp"R1qHmmU.Zr(ڕ/mjxTL&"‹QڨCV%:/ձfS|>6Ygϐ`Z&’e.o>]Bzh0LDFNVĖ2b&N(IV62sьAq]lT; PDD-xx 蹠Q|)ЖiLSl-I?$ĉ icd(+DABR%4v[ppkPMic\`ʃyK=m PðmGbڄ4}a]g&2Ow~[ K$sЎ_iA'PL3BS#]Y&!X.y ٞǪ"mD^@̐Iph3~FAQf %1txȴphd6o" :@=>pWUXM@OGC&׼Ofk-*T8&Aq-9%Dz=U( *٪t|&3AXY/^n ! ItRi[,[omnZ6/umc@&_#\YOT.`>9QZ𕄮EVlQ#}|l[04J,Ԭm2fgBK4p)Q#:s|9NЅKI :Q9s/IgL%yʗ ..CGYBh1=q_4]vv8;h+\V}ۣ2 %YN;[1HEbd H Z8>#͚m3n9^0Xl̉tJQZwAŒ^gRmܡ47{snVқ]_ѣji3k!Ծ&LAt6U.2RmAd8՝a% Di - >X2 W=*>YtTa/Mst"1[[/*so6rnݖZPkQ3IZvuBZ,#tsC3 2I#*:'{mwfl#b%GօB1p-|nc+91Iz ӻ{vL*W*HUf~_神|ACJԇ8h {*KCpUecpg <L<M4 kytmk eaEe ġ4箤N=OTOևL~pÒ0u_fA77a+XK6of>f{05x˳|+ / bxXmS8_~fh P]N>eKuu,N^؎Mzv:y L\d}wbAy6y/o Q({_NAp9]4wJXՇ=o/Qjq岷< 9 FmX/sӣiz/ F(.W)>?H6ewB]rYX9/գ?y?IQd|p^93ñuXB$EWwKjZڅË|_HKD%QAlI#=;] z`<ǣhr²hrm?]~9>/'w5B6=HByXhy2"J+36#"dSLd2ѝ *AZ3N+sB>sN7_#ˌ/c&-MXv4E>Ր'\yooԠqыӛӛ7YdXs<>;hwFx߳%W}.ze*;pJ-'er/옋/.P~)o Y8v+: .9c3i\BC8E|cyI̩|"d # aڈhFu_"1b %&h.9Mѥ `#\&#}R5%Zpx#/xVmh, m4=1PI^Ry9A8SK2mlK쎛xxs)@<8\Ut't(|d d~Aʅrk*|uിzqs^.*a%*.zŅ*+!YŅx*+0" My ˷Kq>`︜'qzhƊA:GpԨwJ-j\UPV^}.gUeNyԬ$TxA\zD<5 rvaҴ WxLO6~~iKҏZ,Źkr}[txO K5:u#?_;՟m_+J& 77b H+xZo6s?R+YlHmlE4i\t#kEOX}LJ^clwyGO=B$ t?" ":Lݛ_K xYmSF_5LlO; +f( M?1glu`2ݽd!NNL@Z=z=y}?'i(Ai=dКO׮p͟WHzc޷?Ƕ}rs~8 2 =iۧv ж,kgݶH&;аr?Ucھq6N72w9>ﵯ> i:2ulb9|#?' gļDc0 BɏuʒIBO'"(±Gg SaQ̸;ΎZ۳g={zx-~ӡGc^ &,28>DJPV\bhntz "(.4:@FLRX^djpv|@FLRX^djpv|  ƃʃ̃̓σ҃߃ !#&)+-.02346!7#=)>+E2F3Gcdefghjklnopqruvwyz{|}   ƃʃ̃̓σ҃߃ !#&)+-.02346!7#=)>+E2F3G4H6M?Pbtm5ЕƠTy۲'?xFt% Ve ou$3l&(`Hr˥1ƽ%C '"26$l zEG&GfK'QU􈒐PhP R֡$#5!gev DB)\Dh `28*YŎlP ɩ?P=yd.^S >ٲ?fq<; Ki'7 {8jExfǨ3?sf($x34N7[,qb`cuĦ~pY~zxʭ /=[YZl'Yپ $S3 MG_EkNC5' ql^=MP8vF Cqԕ!)N!+Gօ=ځʓ)b8wQÊxMѹ&C`K^bxi1BQ;gL,aL*=HKC7>,X!1PVkkD~Daq:>ĘBVBߜӂ@D ^ SN&k‹c.* )xN8:p2ba 9Fz2lDhWYO8K4 6r=ُ\¹@mG +kT X 'ԢEdK,TpxW,L8JKR-pXmg[}1*1bfoƪ9r@$vo䝻,*8ZJjE3RLݮ,+`l('ty4R)7p)j#Pʦ%,3Uة/]:X~EӰ4 q  n̟@lge *uiK!SW],1DQikՒdz2.KP1"bB9Ӭ ڔUWZ:mu-nO66PvVl.u<(,y±yQ( MR\&ϩݰ&mcc̅7^pB0:ϙ~,P9]ݖx" dN5T,VՕJا(O( `I3"5ܕ:jo*1*J?@ǣ <_DXhE<$S/ٖ@|3P6[W-$7rXyX*6SoOQ }(1jyt42%q0s+1/IdB۴,4vʴ"PX!QOn,Q$KjiDBʡO_K 6y muSfVy3mnfbD#ՆALe((ԓjxTIV4 b.AjC g F-eI=gL=Smvxn(6Mo5 g&q!muyVe-"l4"Dqfvh3mLW LwnbykZ,ngm 3,:'Ժg#_%q6C4=YH럱umau ND.݊-u7ZAxaOHQc7 gv_T6кkz2`Tnl"P`G;[y>}VŀBR Zs6=tL]kO __ .,vxZmo6_4 64/[&K>EDeѠ8A#)땒(C$y#{ѻe( /ã"4_ b1{~߇kvr׏蟿>"0Nuos]ɐ}VZ:R:C_{0lF } G@~:|dF88H#c gts,k6ZEE0pL8 *[պ|NstDX&Z:eh[,яM^^޾E?'=~=Om{J~uyyvvt$EM %o@}2(]s* K + 1Ă 6#!Cxlt) Q&  q"O<FYH |Z@}#W"#5a U͜^dTv(}盘~Syѭx,xSTemCkH'gK=OzCk<ɢ};"^hnTǶy!x<粨x3^ɇ'PxYB D *"-(K2[+IA5Czh$@"4t _)Nɔ/W Ή/,&$h+! [:xZP.5T)0 ܇g$\<9=Z=`XxH%\f;g o<;St*YAl6x7A@CC Zj R¤ 4 ۂ铀O&AOZCTr;MU=[ +$aPn.3`pN*4O}A)ܞ\vZZNZ"f3&A4IO6fBcLZHz@pp 'fK"{$3)4KqC'gUiJ0 (-h> ISa`,ڨ[X+_6֣9Iۅ227ƍPw0gv6 (` ,8fIRf0PrC-ny.2ޟOpH7j .\wsGZH3SOwy;dh{,iS fHx ,!(b ȆLVtgKx ƦH%~δƫ>Vju&Rp8nw1d\@ćFY´+0WG}`2˾4T4ׇ7O%j`1mf{34Nfp, ڻO[]9I1TMlx<}z'Tʥ{-`/)N+ӃݿZ .aq簹?|׊u^n#''a8NöT>|6^YqZ6tg3mq4b:a1b0@L(MΥa5\paVAۓ~'Զrq{l 毸{2z ڞ`fEqtuvtuu с{{#|GR8;;>3]ADa XX$L xVmoH_1|H*5 ѝqECҫh^>Ekث[zuҒC 3ϼ<,_~ZHXr] ^g*y:+濌wO/!C~xEL&woa\{b1 ;utܽ> k.OKI09lg ݠ@#Ns@^vj5O* %X%+}b6'ժʓa ֺ`:|=\3%B,)yY>?X6. ƃse/۳=;y4{l}4up R2__|To&" f6~"URIbQH9AbEZiqX2-TU’pe+L~ZI#I$otb($Q9'$T3Y(99_HV=Ig?ɏ"ZۭgHk5ּfYq}2l!yB[Z-\\ ?昩 :"x}%Ѩ*rCG[7*b ۊaHs'_:t%(ԏQEnf_[l4:*l 60GܾI("V릟C یK}U]rMN@Elv-6魼DR Fd&& Bf/ jnYE_<%bMn %`ze*ҐfFiP"Rj]r0W [UU)sR 01cR3%Ĵ*%M!{5$ yZBGWykВPs䝼h [[F>^?.NklNZ}Ж{C7_)HU4C뤴0 w o#źh c'CV#D"8!Ç#ct ՚:sxqVa?G1AZxtg(J -P^Us-e(+T^St-XI(R *.8f1}RC-._fZGuu~Kѵ:Sl! }k̕,VK?Ts9*#ci +j9m4O ;uv+q4J:[X9]4w\9uQ?mkn)YxP| /<(xh4?׻1򻻭8aϚ7a+_#k` j.h]%nCkC3jg8uK.-kO57!^ 8s7ǦMet4f՛.bo(;/wlﳳXn>AeJM\L4Bn޺:hq&')m Ͷxs-&o%7_1ishZpnABzkT6Dc/"mcy@:kN[y҆`1EQ# a)%6nj}mzoߠ|V8h"^X&KdD-ŸIdwFVz4.FZ!NѸD妓#*6ڀX/rh:><oݝ*w[4Wd|8ř{xDJIzDzt?;(dC.GlIc/aq,W+?YE|V+$ ;dK\RՉnEpU%%q m,u[U*5) Vo~_ymY5uuGRc"{${l%A꾶VeO J y _)˞*rS(eᠴMwEP%bBQ,TH$h.Cz8yJLoIu,TZg{ !8jb-䃽Nh@$:rmb,CCڱQew׮wpM<6r7 '7ޢG zv$#vcPZA c Vy@Z먶&G!f7}"d%A {lmaM_h]=v ؄YY "E ]Pw.f8 \]egeVݻhB 6oRL<-z BmQy! usg=t^+mUl[tuwEQaqk]vfZ=;f06p$6KsUM8eCOcnPpnܣBc *` &q;VA| *.m1@YnH5h㘍qFBmzI@zXV4h)&T!5N>FR+ ^u8o@8xgAo̓{; }1?YǦoj f=?Og*sI8P;gّw&3cx>FAeh@v6&C%f5]M*"X {/b7j`6좹YU"]5W5ȬP5&lMv_㫘&.=GwJ4 |ΠƏhrA.Ba0Ԋ4B`"T9kD 3 ȓT5|CCQp(HJa@4;"QT4PUM\Uq8d7s|w;$υqB;s1ȡYfZG&vt$ Fsy0~CdD\tp׃ۇ3jE"NsrqPcMq%I AXcQRkPAFa Ǟ:Eu%KFT(uD>II:LCPa"STA:f\E_Jo?9GehRTqnx3 } qMK#+>WМH׼ a f 4.)wq&c2rlSܼF+yR|3(x hoa%ԞSJie)y/5{>|/!;yXUkJ֮ի `/L?.8g}Mmq%Uxn}wR֘(fuF5jF7S}z B%ҙ S!jۉcx[P51z~tCC,b$~Rr^/iFHu}Z_ĤƼۋVuW]_j-yu^px5KǔڝuUK@m/W5}4VsR7-$L2KhH֍@BRLJIpQJR_N^׷wùD-udP{in)p:$8$A& d@ A(7p壆qV 3jHMP%ԅ 2%T,PHnXXpՓAqȒ&d)=ۍn5:]-vkE:B8eu:O-vlD:B! p3 ,Б"w q4 ;5>cl sZmL|v6_l9aMxv܁(AH9U?Sܠ䃎ifֹn?h BPc'8X/!M~`ABh_R.?prA#_, 6`b F7~PIgɇ5$} n>; ,a\}`s/ڛo _guvKG_S e7G_cۛ5 a6{L(ۚUԱ6[8Fp05N`gk{fgګx6+׏qoRx7\qQ?)q`1q!7)Tq`SŁI.t8pā%XB)n4 ⠉ q8,I Qءm7)I .b8p$kO-KB9$Dp^lp7Grr@ 60(AKӶ7]X&;l`+CeA18Exzp5krA9L1ݫE UZڸ6C1/VYb]Xb3LbbtRcE^0+9 \ Tf )LP3b$(uI S2R⩐\gkei'Eye nxn~xXQO8~ϯe  Ҭ=UN6uvZIm(\%؞@{GA"C7_-YvKb,N:BNǯA96n㑲>f0@C3iDa׹ vBC3B_o, !8>""e).ȋ:~xXmSH_ч*$jݕlwV}&@6dd"r[߯煐GtKWJxr{Ӆ#vus<Ʉ^;sםNIK$#+5{yjtWSc2BFr1i!0P ^d$#5rʙQ"OC.مdsh10u/ÏR {ם 鄟jKll~5u%YHu:ggr<ׂ\]]64g.|%*5G!ǛΝYĀ'X"R Ja# kGɐĮN'ǩEϘx][s6~ׯIvR;iٝQ'6Ik'vDX"UʎWJ Ǝ̴.>- "O$gV&D2VGG/33ӣGE9;:w$?0;X(NH 2R\Dz#2=I{3Eq(܍HSt&n>L𲱷n+immW}ģm'ûf:6ni-8í?!xP+cGn^x՝E?c2tJŭ$k<߯6$L25_`LUyt 7{"*DJKY4)m[edHŒYAB0iSuEG.Jt8_[?0¯doތSHbh+MN"K 'dRn}W@[c~^Qdo+=]W ?n-s41-'I$}SI"MkR!zwzy*Ò%+vSN!0ȐxM(Th3sɔ.!TRaRMBV Y W9d#;6"672B*jg-~Xy7k57n-,n2îP4<$ʰU1ˆ@ mk&B)۬lϿClVfs+Q- Ȧ0niNlpH+N[rdXB<V h앍+"=&*+=X\VȬ6ukY2: @FTqc3`hAf,X|@UܐmR/ 4=kdBdlx&"*r^7M1Lb1%1b -ȭt `1\ yZ$ #XMo\eqo";Ū^޾f(jC2c[E [R( sbj'5V4pק;dֳؐeK["6[3#%|֎טX?vbhƺCEN.'#r=PbqS-<^ ( ^X"֩V/YJMpUPΫT> `mart3pOMPnhQ ?IhgȭXkNت@dj-NYg[o EbTVo{L2Aa&YߗljvoO3wi\ݻl`oQ*;tڜ7y߽͊i*n`4- S;[)׋じqb{Vs5CHji=31#B74\S9ڞ9'iïzY {A3o'9Zxfurjv;d띜Z+(>eU"s[߾ |f? kO868Th'b *]Z4ɩlbjzEH8F8Q4(z HhJP2U܈bcL%h>?G NіXv"Sݫ( *$eZxZO{0I# s:=GգtYG7;{XQ$$U;,;Λ'!!㹙a~ jVR B5d9;WY}[k;sRJtM!ΐM|ēIx n^>G\ ؑ:v^ڢ;UK+ {z`gȈ. %cZ< >2aEK1( fovJ%D<#sR. wsd:BC ½MsŸ,_Gw?G׷Ŕj<+R*WllijZ&MmlYh[ޱ(F/?ʥXѳ-@Zju#t[X{^ D oKrh>Kw̺+h{aShwhoMVSoAYq- 8ك7[cE% CCSϭq{!r%mu c4eҮ+(Qҕon>fFw_P=/g 3_3(T mxV[S0~8[% 8%+댸xw@b0i*:}O (+3@zrm;FT*UD2R\&a7zί?C /6!WB:w ΍#Cɺ3i2N+zE\[fÊvb*ufm4xaߨ+Я1KŒ#Y€n^;?T=ϐZe oN#iĞe҄C~E;RM=x^TGke1/5F^f˞ܳVOۼknj֢D'a7jQ'_Ѐ0KEu &)xH jpF1`&0)cg[Njbh03"2u6tMJrϱ[`>:,M=SGZ\|Z2$u?3gjn wכi^q .`9@$U d"`𺶐|QzA%o s.bYv|Zb|Z c9+n#.-bga} ܕ#W.d 7!X7Q1Q$l,H9;L3;uWE.oN#i, Q_*B[q̘x] AXF߅a.TV)v38I,P<5cQ 8#,f?Xb_bW<>(0N2J!_Ak/ a!0,La4OE*i3c btOxož:KN1blnC׀4,E ,=:-k[8%d0fҚvްNSNkM!'s+[ ި yGN.dbMnow<3R>pXPsY9 9 dtXCQ0fPEб^̀3tԴ"u,D0qBD 2hZ3 BE,ńcdRP_ ?Gׅڶ4DI@Ypۂ3z('WdY5{N-fYgk[YvLys[{d^HO32g\Uzʖ\\`j[F"zFl73߶gw0;3b['L|ts!Qyft [U~Y0VW`.6ÛְP}  .qI"OfSvꫠm>ly2Jfڪ'*x2w8k%2}PI,v\ց։oM5V]Y>6(2ۦjzvb/,Q[cf9 kJ;S N)~*K&6k6bkgqu[5GMs`ƛr`K7Vc,ʪ{mB}o:'䩓Klv%Ǜ ΢s<=sz=X ('aXtӏo2gF2o 8xڇ;F&7asr'4O#W:o_A˜U'otV̈.bxIz=8Exo)_?%W @t&%qM(B(՘D 1uE2od*#a)ĩ:?P8}ܤ~ls( 55G xWmO:_q>Z+H=u-l h~MqtӴc'#i`C"My|^DŽLn&߻pm !nbL~Lr,cr/jQz6=,\LY 8>iRA:Z}7"\h#E1,Uq@Jo/(7* {!Z-2~L':g:1tz)W#*} a'Kz}e-Q6qagp6/yڳ*=m=m[{FGGݮ]R5' Umhbt~:}x?)oh@H r+Hy 2 p3g1њP"35iT,AƄ # ܱoiBW40^L 8 _8eEXg#SWOg>Ŝ->h zI^64-,3fc̘`̝0j^6n.5#Sp.L3k[R3L571F/"ʦnT,AK>mZ5K3T0 q p{C Ocz KK\ >pj7<g#&0>db0w䱩8?{'s*I|+8F׫ȵam&glpғA-ao~5p?{@δlQ"R9Z&)n ]ڠ `,6?JTh?V.UzKcQ3J!>9/8(ʊ*{un+{MY6mV3o@SIgt*Ц]] zժ] nW3Z[!!U *9;`ǔqb wۼpt\0<'̚qXun/۾]wEXQrNz$n9&$cJ)VHrh4IXG24Er4N? HhT >}]Q(ItS @ X}0H [=up :h6GHվtA:]jȶ@D混~sɺ#*} ՝ɛ MB >6p<؇6fw}nqec){RLcE %tGOP l,RlbXi-pZ1*i5*E Jwqajݥ(<m%;UWy1T_] ؐS826LaX&3R wdeY(ZsGW8Tt~Tua L$ve3dSA7G .wΘ!i_4v6O_2rK)Ϊ ՏCYlmϨLa,:X-$rZ$DFu( ` W˘2 V :x⌑!hỾ80$rB0Jk(zlI(/ZSp)!aSd­ xT[WA=<˃Wń 2*͛k7 dUuҔ CBx~XnȕS/bh ʹWi%ï[mZ9Tf4c]Ff2 T`iBk%CRkWJp _= ZyYkUWzp+527*_e=k*-[ęGQƓBwUėYt=eHer OЗk9ފ_ Hf&dͰ_DB BmK ,ZƧk*L5ǡ%oBއ*/{A8۾`Ñ 7;=ļO8j8 ++9vcxXmO8_1>4e)YVZXX@{rcƕPj=IYhSx\4JPyͮ)59tښy_mHoSEщ$LTxXQOF~@8A)@끮}6ލ=t]'Nqޝf c}N觇_?OSr61I!KPѱf7 gs獎ŪR>:s}v_V^׹Nid}v4;m^k]*1uz`/#:' GAǟέy€O Ta5j@ ,1$$ Lc!A AT;pIRFbv˃L4JHEq(OMDb]wostnP5 ̉Ɗ9/,qQ5~ ^`?E+"5B(p)]GY'Fa,B||٧2oe*ꕊʯ5a"Jr&!l~ʕ07FݠrkՃ{Q D(k1)]6C6M &ŌVܦ,aUy^[U3΅X d*t{=$1~{ r̞H Sʞ1I"& Mlx6"bC{n!֤kK4v5 Q41-1oJQa J439 ݿGǹ|YxnnEc`O.Y5}Qh"|eK'_ְRS-hS]`=9UQpD?  iX4mΧ Z*(mh%%\G,1 M V1_h[ XgFLZҟI jΨKA lI"?56Ex+o nUCp !1B؈!ٌeیK[{V!⯀uk7s䦑`#-t\M|#Zsi7vɘ׸p Ecʘl1>2dh1yWQ*$ߡaU_mZ-Fs!Lui_1%yu-RX:6o( 8]W(VtTi$Ei;3c"G<96Ñ40qq#>[VNsuu?]mjvw٩wB{"rp|/Wnί/>C{Dg4$fc(dF @z)*b@"0 4Bmb@b8WHAXkn FW4 CPtWpLעމD NQpnP2 iƂEԹ$TxM:x ^`?y 4/ »$P`fH,C>3 C)6;{<~K:kHK7 ] W~-!-B%ۗR"qn1B锦L=*-C&``,5b$qa͋lcdh.5 ͪ5 52f؋H2b ؅$=ߋa5`h"Bh5t^ߨR˄\{+'DE1r7zI"&诮G䍙FN)eFΌUZFUiVǪZƢH:7NaA">vtRRʆ$ "\!?nDMb5.8y?oXi-6mǧ1OUPp{(C{"D.ttKlOQpwohw>ײLյ!XK Veעx)kå {wrnF6ju*7Jmٶ)L$LhU;1{fwiDT&t*iFYjTyQ}TvrH{5խ?ZfD/mYyaZO ZwF%cVˇ:oy?A^0U]4ImhZ\$U2f"Q6&4$`TFImzHGIו|)wi6'vE٫k_*y=޿ܟܼ bb8 }xVQs8~s$ !49$bNXy toe9@P KvVra^BlwZmDk.d/]䅿|Cd?(7c F#c C0EA\.[nK$-E*7uǤ{Knt{ >R>ýq'ySINw)"Fm6n1CG9d1S2y-DNt+0T'r9FgJ 8@񀣔e~TC̤ bt.* v}w oR74ކ6"CVE(j0=&b ћU3 .{49Fk 4EĥZ1 GV?N,8htjh!Fk>ɺؕ_ᵵjճ%Y6$paA3W,5 =VSkF`SV680WPpAl^B 钜=0%zk62I8WܝWdt={ 7;Qwj7=gӫgn_L存ۓ<_͗?_NN/gq^ _w'L8?_߇r?{W.u71y)ۺ]y9LLʶ^10vWnu'z?#k+`xFpTw5ct@c)gOrϠ&CvNp(M,,@E(P)HؑG !sUsÒ$U LǛZr/zow+1f(z(ʮ`»-kbWu[ܗ#* ͊Af`ÇzUBU)n˱Xuǚo> X}N/nzeA5,UܖM=&s=ciJS,Qmb41jD‚whЩtQFn/}i\\3j&ňbV4c12aP4ChAkL`qUtG5eņ?mqVJ,h%ufi[-8p0}ZPwV "><9L AMP PB%E5&.7ugo5h0UZ}&=[ rmEpfp_Yq,b >Pl_aJKwlK7PC F60%qTy0]-+CUNe&2Et${ݳ%jWSS'.ݲŝժWCԢzC41:BN<򜠯oJXo9iXeaCt*"Aa5n+, Sx-aCm3·PZb.?P*5ǎa'"cz՝1[r"@1z.z3o˦+Yn3.z?~%i BPs>bEOAa?~)$2e?mF߿_(LN̶Dr $<ݻK:uuXdЁ>SAӃA_`xC\B.Kk ՘ErxK@dB@,@>KW߽ _FpV 6V%Ur^$Qۉ=GuJ28RƟKw6e?BE7`e`&DFlNc™W?-GJ4(ݕEU~J"2dX@>68+0pyr|l45(0c;[߱ JE3  /؁ռ]9pI]pOj2+bөlv% NLY)^[Z2@fAJ*Zj$F9PrT@2Z?-0$19͎KY,n6M,4Z\>7Z[؟=: 3nGgNF'7; ڞs.iiЏ즞NcQkxl/88}N-laώ53{*vP2Gqt,EǺJ:ȦG@f 7mX}?c2!Myz 4Q3%jֽw8T 矧㊠`VuV '^U?Pnɕ7 GtzJtHĮCJZ`+7đUQe+*#M}|N]t+|p8LY+dGҰxa[:zg 9C|8I=8lBH9yp$5s먌k.IPKݧi<Ѵ&~S&x d,#l5ja|)so ~vuR̲2~$NSӼc`}[F% fBT7{-?W&s9 \wu3V~?*fU0W qMXqE8(7a#l'OpmFq#~woxbL |aAWzO@וuN>Sn{~؁S|Zn]hpakB>Ba.J)ն ˛wbSs]В~$#3Zp^6ݬo^kC9Q*!HR9,ǚɡqK-t ܎FׄlD 랏NIT༸lZTjD}Y6(͋sXWa,s~|H4w_@t[0\dͲ |Mpj}Ox}Tam3V#Ө-ZtpTp)b?&Dymm3陚5(qw%^0%]Ty G$*̪2 M}vc*s`af qQŠPXxqF4"^xS\ ;pbuVoaJKU%LJڨ1!;ۂMppDe=* ]e!}G@XZ8;VRtv_կpE$#oxnͥQ˖&a<$okT+/[#a[;R(a{۾c?l6~2 ztß1)eFnTl}9%ƄtƂNJ@8MO`96V˧XX9+9+?YAZSY[E#@ˌܣ2QBCqpP~TJI=; x39!$͘A O3Zn5fN\!o1=3J̠- l`&T*BC;2AD2&ɪ Gb<$ȪfePԅ 4CG})BGʍGn @M3{1"D4or u}e} ?kqDŽ't["-}(.\\\Wvn24A%RS,jp+{aDPqOLOЌ]j\yYM*(uUZOE?N#cɃ!qёC܅$('C}qС_9\y֏ @.#sSo3#ժWsCt{tU#Q=QH.9ԩ'Yu4NLEE`W$1 u(ѶT\V'b~|QeH&LvɔDe.SӍ늛^8ੌ6 lrW?]uHP |TR~"'ܑ%C:\ePwK y3xBd% cSYhA7< 9цfɃDCsΝE㖓d_֊j1Ib ZY-dW."1<LEB&30c9 xWIHp FeЕN' Vb#I7 U A)m@S&#>)G:Q`R*\W=[4SݍAИr'頋4δOFC<#LV.ݣ '6c[#lHi0P_8qT#A$;?@,M4'+q|ՖS=_pI @50o`3+pVL|(:8ڥl$ɳ}@*wVӒRA%М+/ʼnpI]65D y/o%7tUksB7DђZk+6g&rZnj+XFy7NxO?x9$WqpYjmv{"~T>ɠ=vU3_N|۪b[ɮ(WY VDYy؜kY047 Xm?lC`2D-Jl&@W)s&PU! Z:GrF}<]h[#=D_c&͸ PO49nx˿)HIHڡ[-YEz{ [MMP'VzT^U"dOPQEp;ewdtyQ^RzW`0[R@&fD5HHI$s4i9fR&mDܻțp+I-zх(7ŧ!w4:1ijȔǑ+ {[7Jv˖nw~zuӋo/NNNӿûaqyrד?ߝwuru;Le‹wW߿U=aWy%cɠAJk)>pT8 _J\Z\"\fg5K,e|m%NMuRUH,/U&4]"k/xOt޽=م!d~^Y]? )2iEr+#UʫmF}\4 P{{&Ii` fU$ lNPod'h*-:dhEn7gEFŲهFǻxw FI oL )x;8ίX"Լ2#QHk3byN| N!تlҠS@q =y{/SxSi1žQyg kAkc_&6ƙ;Eew"*P~J_KS4l:_Z$Ep4%a+k(r%9w[Z%qU 繩AהpwDy<EJij dBJε۷kxI±OU ]&xdTޥW F#iMdNw8Jzįzpw6/2g]xj9;`ڄ IK+3'e%> ƽz]9vW젫& v ʷ00R ȏHҜmU?U*u3`sM{/|QѻbC{]>2FVZ41J'WBK Z!|hWPF zT+Y&Q梹8=2&[}s2mpICЌGG>ޏ#<شO}իkL, ~O,? ^\Oy %q%6a^orJBC钚c+XL4 4|&ӲFH$W{ ;k;]8s14 10KxqYh]h;3B7pRSw*Tɑ-ڍaPm&~?lCć9|3_oIS:)#f?t`ʞ,3HQ~Y1ge*/Ė4Sa_3WpR~~n_gքiH3%ͤDzߴJ,읏@Ϩ%?1>7,\Ud 9eZOj3nGHas $%8E˓\/TM-zXoh2h͍d<+4)NYkh7)!̷\@|{?`~C. )AH ?a*f졛:0* c}ffRc/{lxY6/< St9"K/ .I(~W_-khc)dͤG=z4E<*8&Jqx]V?{9 #X9,Daa4"vâ9NG94GG/7$ _?vB,n,YE)풓ꥰR]ۃITo]< r,@RqACjTlP2fc j; jIrvNO&",yпɒ{}I(!7Ge6Zqj mQ(43h#JK*GJ5H|nBkr,8 cqƱa5񱇪pܘ8ay\p޹:Za~ԑIyX\t׽/Q"*iɕLA؏惜=m3N3'<^;Eu!mS_>0MXXC:]<*g{am@ *\@< hc K/xp FK }>1!܊uf8mTJdFb=Z@R&sڂ6OCyn'"} #` }!ͨZA6'Wcqϰ tn\9=FMT;[>0zu[!>!f*,C_'u.NfF_sWrggʑs+"fw@Wv\˷Fٞy9X*NIysb$TO@fY# ٙO^thi'H$yh`$R|7 trn9??7Z`F}ܨ';|D|Ø4Yap)r9e Ry9/e-6">fd9] 7ݪn䧰ʧCO7]BMODzIgsOx_OlwrW6-{6d SB  'Z8DèkMT8;k֚}7rf4wEɎݛ @r6<; +%N_} Ox\mo8_s?$R;ݦCx&npM7d>EۺʢOo$RHI΢2z2:&4" _N&sFl~?Lrnޑ7puA~~:Dx}rȑ軾~;8c4ɱy,8jj/HbY,Tȹ"$5ꚷeee۶7Axy1__xrhw+7K3geɊ!|B&eN~dm3NƲ`pG~˔m*(]2J^&/ k,fk2-/RtߐZ|nyr_eӶ- ([?;?"g2V"KI@>_;rKa:h-Ff:f6$Zob /"|EkFqedRQfd#rCfAL9liȳEI?}؝9g m2_wNsnSJΈhK@>4'}ǯYH[v@!bځd1d18@4%(K(MH@.%$i26=(dqO aC +$Rhv&[ $-Nom1PtZ`Utl@h Cd-)&< U}d ( b#w_6* sR8N{Lx! ?Ҍhk>f+ݳ8XJ4FI6;ea <5l繬>R z~A~ح5!dY`4)N?0fet)-;1(ӡd(u{N\ +%~L,%P\2()'(oI<x@n',ߠ?s4]s]BU1+te٩ʰI&HK6k}`ɱj|K7`}~t S'q)'38vbC}~k Nw4`]Bʿm H=qd4e\{ݏF6K6xX¤7(,qNW7 D1TP ذ''z7z Q|8@p\hA{Z\6) >[Y]4\-vlz9ߦRrph_jFa_;Zs[<ŢSmÃmV,ALKdcXj]= o)ߦIe{[jYM,]T_P|+\_xgO{Ѡ7]c{ +HHZE?RNjZ,ӂ-:.E9E᧳l3~}{oy%]pTL4В7 @,T1h͛$hMD7)x=^L@MasP{F1_6h8k,|X}U `OYnKƸP*QB[6~.G0uF4$۠lZ6P Y#@v]GqD‹T͆#E!pd@'“I<5%f @")^@dHw 3QXʐ:N%梽T+{l`5Gڱe=^J>`qpډOny05VUH@ΓeU) 7?("g#aCUL5hHc?́`'@E@ 4aG%WJ0BW墱"U\ hYR#)gMj -Y#U@oesa_-z/$@. {d\^ b6{:E8<6(4|vMHsKT#%  E5ycI@Pl!gg#g͖k,9#ߛY] jAOVBז֙BmNF5[DmE-Hri%.'fZN7V뭦6oZw3I7Z[ vyvǔJxIp =1^pk;o~)iofS<>SX@vԭ[7V_׮7\ l˭F[2̾ nܘ-nܤJ#fue\T헮F攊Zi)546W9.y#UBԋ ^Q^ᢩI9fykz^p+^mJ2Z obԕ t-Soh/wד$ꛃZ[O?n.G:omtsW:Ǵ/gi74H4\7ɯ2f1q^AʇEdؽ1>6{2٥_]$ϲ9effH-d%\'UWF,f^9X ,Wl^=KoaS_ R( DxY[o6~܇$k% "e дiS@YM=;$u(ʖC;W~/"4 Sitow~o7h.`kvzyדkG𼛏s[鐲ț|K-'rYk CnREB|gt {zNoų h~ ߈, XJ,stLDѣSPv־'G!ZLrt{tyyٯzL ٯ./ΎPo{c1F/o..Z=,p07^{f AbIdsz> L :ScJ3z7DK٩{BKdpTr4%P0*JvnI߷-þAR:4.zSE y+gYh[MT y*;"!uFDlEH*>DPa /©q8tPej)OJ8Ͱrxwt NC .٬Ѐ )T "b^;$yF0KXi]8Оf1:XQQ ьхNT8yyɡ{"4cy;|zX<=m)]`TPfTbӌ19N#}[R DGs#sSJdOy \%kqV ʧ%t Ez/ PFҴ hT7x]o0+EaI)qhHML. 86U>Vik!!=M.Tz*YYsG2@f߭І}^/`0h2^·LӲL5ƫ Sq+d[`VOո HhfԜNpx%E8ҏvLDO̗g.E]eӦ(5*󲚂ۿtTp!pg ^v,8 Q4gT?&=o2БsI<0L<φ9ZBanVsGe7 0s7"mDVsۗC NIM? >qP6 5Fie@t5-j<3-*[|,Yᓜ-~kr -8~_+xa^{_`%[$TPӤbiUtTWT<RpMv z S7 2@dr  څ P0`WdR,y"ŐZb{6a}ݰiNЛi f 6ȡ4EV1^2ik(R7R|Zi;@{ů)[𬻔 G 1qV鑃ֻ/>NGB67&]ӋKݗ|1c>$}ud^M[dI yEkgo_5E w 9 8&CkX<2ilo,~cٯ(eɂ*@ueY۟W$DbyQ>Zn ަq)Fttp'5J6pH>WOvtp|n _ G(9Ms٥H_+$ߋXhHF }^wJ=ү<]5>T{#T6g܏\EAVlBEZc([ZmAӔ*E*J*7}%X)nG3 yPj&Y v4V4`ë8ۨP -T% ;c"`oE1qSNާ7m Z?r+'Ey+k),ˢ%9P/π=3ra4md f']2P2ZaO`BI^YHRKZd0H 06CF1hŐD4w˞>EuDC.)@Z@i*S{&xG,nRs[6֖IںTI#uj(X|V7<5OcoB-zHh-qa=d\US]Yڒ'SQzU+gpОDJ2ӌU)ز,|`-IY: ruN׈7Eo啜"J:)9hk5-=RT L5hZ'*!Cە8V[VI^ ~ DMof|Ke˨˜xa\M nXzJ?v))i(| }0Dc,'cI 5cv,'wW$Op&.e}p=DzD-Ğ B?q4~W#V,Q:QDk/E+kPyN}YSɔ,y6JL6ҐB-q6(rZʺ~|TYckSt4Lb|[k7Lk(A{Z yT:iݼjKn~OV[}cif;l$Ý(62 F/-(9Q8~Ld X@kLE嫍8@{FݘG+Lx-8yzրػ>^(d/ <BK t ZxxwyWUMqݮxof4&o.|K}r@i#z:ϩ"릩C1!]5Pz$&}yCxhS+=N&NjazD>iB{S|[5: xJh[ HW6$gHwL;aVF=F}@p=;վ}BTS> n$o č啽;{uK{mwL6oawdKZKMdVؙҹd{zܱjYQnj-3 LU-Ӈ,,,[qs@?xA@,Ll,9RF;B ~| ZSv LK3 6``ɉ l*gL-4ҽN֫qÁzOyrB-:`?ە/گUd(W 5 ËT+}wEl0導H{/t|BlMB~ϯX|aqah:ۖ\A%{MSZW/QՆ~*mRAq04D[Gݟr|7H~)qa"2(|U/("?# 2{W+;,| e2#r2,N]3>iFCi᪍]j$beK4piҖv[|X[-*x^%vq>%N U׬lKĩK|W-vtD)n}\|LY>;׆(qCભ~_[WP1Jk=v~a1vO`G  & xWmo8_1~(H-N4dB٫v[Vw 9!3q8hvx+nHg2LeDs[ 4DY-}jX^x\[s6~ׯg)iWVunfbb{ %B%؞N$@Hv73IDs{M ˎϧƄf+'xO4v1ӫl8黷oNɓ_^f^- %ϓ;x2z|w4Lo^LY~=8Y0i!Lc?abQ <)]Pr>gO]n 8_<"g~>n6 ߈m_'yF9U?KY~D)fhyN~.[,䫗g'/ξ!6_|٫W=_DGQW=[L3)t<"'9ۍɛb>C^n1}JIݥtK3rDM} /?l䄃,0 zt|1|˷Ww; drSVbPm1UswRr`#l( *Vo6ɚU7v2|₰ud $IH҇Z8hP, ܙtVle:B;̼Kۄwv%nG6/4&m%&6:&Ck{-g8xp89s; r$`gy]r0K ni+TҵTr-n`,vQ9lR"noާ)9&W.,,J X8$]H{x!8 bc3h ?<@PO8O II)ϻ?w-Ƣra27Fs?$)NƃR+?Hȩ|RWTNĔ9~;9Dͤ(ҸHfwN䌥]h9\Hp!r^;'iծղ:~g4NdVSUR;Yul#^l'p߿Jd."=k:r,pg)y霦 Y*Z0䈆C0 `m\C_!aB5KHhQ2U܋"btw:G'y~h$H:g Onl`?QF [4H]!`Æ*)RPCs m2Dz>RmV~b{CS JD|٘LXdr5EJrnya ԏ"Q,ήm*TUT"k+7;$x|tFc7{TrA΅pN[(# 2ȩҼܶO(T}a v>ew*j[ܩc4}T"`|Vcd6~ף%~X5{GX[P%$i v_ESfudP,V1듪uo#굇^l(U^@k@je[-LjSȰp,8Y2"4ZId(Ic &% Hy.XjL[Y{Ե5קΨh/;[Y/YRod~ ~1ջZv둪Byw攓a=.ye4(x !իE PNIz2٪>4i^БyO"1{ UI6Kua鯙nPp@P@ Ƃt&Sj` N`ԢbVk]vE_C?o-HYbG\$yʯsVk}2A C@Z]pa _(D.h`W*/֕^ MJI p tgҞn.a!+0U5^ORmohAB #\$b֍e= ςFCS%rj>S K7583!JcFiҜ1 UJ^\Qt^%Cg8XRMxIgχ$)EZYER9G9S ? !dfggt_ޕ!Mt%mvI368k*ޜ`7Y=_q~JB o~Mz./Ա|:FЈ_'o\ 3Ac!:MBTYb_k7WF9ˀ|Mh K?J.bdBfƣ^%S/LuIPL^(l~9#z>3R,C -'wo}c:Z+H􂡏 z* Вi+~uQLi} ckoRS VhRwl(@b?X>z9-T9Ⱦ ծdLx|t@09H#cU~d`%˿YbM~r /Ј6:dj4.3lGi ə˯g/D04De*{: fN-Oc2UJAA(wQ,l-lQ/L5')젥lWk;NJy5ovQt6P򽶐Pr̦r hwvZz 5V7mJeSy'prQBvwZxq=n-)!r~1=AK<*lX Ƶ` Xj ~QT-dܓRb-fj/ZcE19{(Gi×/-t1aAGEʃGD(NNV@hDi =]HQ,p]P~^nO~7OPAonbreٗB*:ңi)R6>+v6 /0fpHL),_J֥'b",0r`.C"ܺLP\5O삑=YJq~ԮTuZ*&5*ZyqI\W| N$^he T#4'Z~J/!$U_['H}>_B, R!(@x\[o:~MNOR"u| p&M>EȢz^$NiЦ/o>ކ3Tǿ\8`ьA8K?~ z+P7htxIȃLFW_.XFf92=~D)ﱚ~|:C_o5LE" ';CUMLx ƱSoɟ?So,2L]y|D䈮{Tiu? ɟ&UI7''_o%K}wUĵ$xY7>a` ~[i?rB8 r, lEGƋ 3@朳h~߃gv=2`/)bȧ!R@.̎$>Don_wWd׋7d|;tG%O9էDqfYovb<;8!K_zLWmn¨oTB2AMQ gczwRsCgHƂ':׭S*AtJؔoX=rqJ!}LɏR9>?~O~v&{mypprylwh:}'%#KnOWg].nߡ#;];r?  qȦ,RQDM $'?qH,#7{$B>8]p=Cs3L jpw?Ad /KN&κou3A]|[ө\'6v^5;_$Qn`q5D#f!Q.cgBbr{} `4P #XH>ej9;GO5쇒/GDL$O- Kz!'c߂u)p('萱VrXYȠHz-t}U:"OH ~!#8I#@Dlit0x:bn&s`d E=X _eHCJe!6-hzOOA'\t BS\J/!d׭h\^v*:t7]"G(1w 3 qJ!y3tOc< s+j!4 ,D[]U"M>zQ48kˈU$C F@frFM:hf*Bڬ75*ˑ2F[2qq"%Cj[qg(>N!eTL)WLG}-n2v nz3b ܽ?ɍ,8PٴJgЋL"/ߴaX_ݎaM(3ߪ4{ԐBلbٔbiZINv mc [.vmȪ.TU퉪򂕲%n.W=׍QO">% kJ<-l RE+y ڗ=/2dR̀1lxT qnwrM}ĆS-e̳{MdLTmW 2BH(2RIE$&KC+|H^c)S&b3tZ>y@O{a+<N{ֱ]~ktE|G_?\W¶/.ɟ c%l㎵+b/B[U=j |F=Q\aI7qOR,b&i b'{"- uI犽ѭs*g<>vY;%g`"K΀gëӞQ\ g`S܍V0k9PxIGPA$J܀1Ib%(O,J157Kx"QdSĥ̈́,]_qWY ͑ܲCLʪuB̢ z˻UlG-B1Zk· 2O432IT'8 H]@4C ]8NpRma= rhH+gS!Y)PqQ!UXwq^T7JBMQe& J#ۆZ=qvYdPϰ7-%7~ fVΤqn'SIeCLVE.ZK0dSF&M2G?{E%DsAQQ]tWeIja) uJ+zd`VzKS`.ETwUV+c\DC).("Vm[nTޖ ہ:؅  #[Mt]N!RQ[Vս WU1NJ^qsuo#HblҵtW۔Ғ$,%AIT(-b[]ڸ5 yKw7;EܶZn,j\_7 nЂ"X__/9i=l<1م˒)ÃPhq۴RY!ݖ Ll3$Ӟ3_ ӗYf%`y]e7oDP 5W Ƥ $IĚZ&0w\H0J>Z)!""8@ "ab9.% k``䵀 Z팍`lq\(͆; SӨ B ,йH>gDDtvΨhI.$#K`.X4W6@5r53"DF4 _ɧ~fsi2s+sG@knj%rK۽\q`#j&_򈫯_=x%Sȶ\LhR2vI -uESh3Hr+kpC%9h@,+Be bm6wA],b)zj^"BZk6\AyZzq6 ah98?]XS&Pd h,dƟ%]Pڋ4ѕBx'+Doϑf{,μ9OliBk^X&չM`Hu]=M h룳9"y O1Y"g*vF "OBɜ?G v~PHeAJ!+6J?=zf ThAO!JU ggČW8(CWa:ZX<?{~*h*!uya%:cNCś^h3Cn%;WhSqPf]ꖝ%tgoحA]-jh c.Y$}xMQ:i T뾾~΋ 𹑡CXaUu]-Db ; X<3Lm{c}MDaBм ;!^UcX)*IvL]m1]UMN% xhm/+2K2ƚ.DOxfL55<*\| b1t5s.r]SC{41Ly,CYE3Y p{B=a=$FFC(ݝX{&yrͻe;Q]mװvC靌;)B.$\5.]lDhY4@ZU;+9ѡps:څtJ =y /:W΋NTyхOKciY:ةee(m j5Nd%w9H0DQv!RIIQ?Nt?%:ƈ@Ȟp>Lڧ7)Yh3YFi=YKA $jK)g89{s4&Ӝ9\kXA5ngL.:*K[|ye;ȭ%!e) Rk5f6(he~jn jМZE7R%>c!Q$%ifeig[)Q[BQF:<) ~Cv3DgrIjj<.\; jY))1U+ -Et@:`:7`h.%Rſ|: UKbBUu]:Er})s݋L竤,^)|7R{mw*"@FEk}+1{i֗jA'Md<7 w8^+7͛p6ʿ]y|2́ D6&pMx\ms6_s?ĞI$qnY/mfĉݧ EB/`_v7@"Hi@],ݕ?}[&+YҳBӐEqV%04x[[o6~܇4@k%K u.@MnOmѶ6Y$:nP".-@;/S~[ĉOËਏH8..k=$~8]x[[o۸~qlR"uHf&M,zSAKSYRT]3CBbQJ !9#Ow&.pLX䋀G˳qo~:Mu?JA?|y_/@/a4,MWAqɭe.J%$LN=x4ME%̩m)EW.]S)9dkrكE()huDK[.yqru~ru3Zx÷o6-O\["-[8?FS/#ge #K)%7Jc<̦ 9rh9ƳѵҐCf{"!M&, J'qHD$SX8x[(4$ f*h%tuRr6UFD !Pzh| :'lq6~Ѣx֪<1f2WN{,73G4iU~j G2ar5q̢^LW<6kt{d~1:x8_OƎsy#s%cѹl6d@s{9aD <h{, .`ӿS:]L7 l&R }!ߋC|y#+/: рh@ޏ^oyVK_jtzu-nyT%Yw"g(~9K>Q]_|:vanWQ@V$dF' Z'C"O?!$H"3Dg!:1X*5# x|XҐJ;X Fi46F+[)w)K6w$'{/BzY@";ݼE8:&YxH m\M QLVxGgUɒnnHVýBQ7K#Xk'OqNB"" I /љ/&h?p ߁\1!3MM;5KA7-g~資M88 žwK68]ݒ8&3>So2$X" ̚nJ.ܞU^"B.I2İYU^! @EG(9"pL]Ds E{6" 2yq ?k$ZO Ȋ x8J4x=LzTh\3ʣ=1{5߲)g%LEQ0_xU¸G Y0li oL=Kmc9o3+ {I=2~N&/duGL W2lEo|gzI@1 T^a~# =P"|5Y&LW%E)0 jyDvʫN0e!Xi^Y,70++1m^qO&W3RW{gwX;zјE==$آlqgO`coa-dSw$C:˖gϚ$֙ˀ)`aE JdY {nF$fe5!9,~cOZB\́WE\gJi&_NWQJi^DCyʕ&1f"`^V3? Y<(Ud8%<ރԁBQz$4O_0/u]Z9/Kԗoɯ%U-$*9)%+N+@iFfHQ2>JEkEjK,]:t+Ի<Żv n&X&B &=eDNٽ+j B19aIB^ܦ7vT/5&3& uCS}N,W} k'EE9VZ["[5"/vSQ|((E* .;*:c3*RXMVt&MI,tkMrvcۊ!v qS"xDZ&[!eu>oJQn#J:T]+>o†M&&bil!JD)-ĨIVm&e SGEY|#˅ӱjLk)ƊQz1DjL&Br}}(y:(x(׌ 4V3>)bR'))Tӊ")U7# XNJ2e6:h]ԗRZ꽒WǏ^UR9H(T_N;L+CJkIiNi^eVD*i;=Vjzd[~eWfilnmS}tяŒs%Ye/BC~u_OqWV:?;ٿ~ |q+߾ OF^\F߿߼%<htBh^Cosl_>da$'0M DF" '[K9ig9[gG8ʢ49t}%K)9K US2M9ݔ^NO_?|/<}_<>ƪx4dw7WgțKb2(dƫEyBI\%tISZE&A<DqJ"JgdpALVx`^L~N4Hȹ͙f0 T`*g&d,;RЉf%p-6``"G2kݍ=< ed4QԷLS*6ZDp 1ӏ#&jENDC4-h< "2 fr% uNCgKL.$6$ C yH?i֭dr\SJSy`QD OF0Uq#3q }mʀ"O`Em[k9N`zs ^q$H0p)%I:$04XڨZd Ql]qJ tX'yOA )Q,XE_q5F$F6`fY_McDKF rKuQK%7XԣƆf{sg}!bzV `RyS܄I%^j 6޺D`TIR;c d(T؍v)Bk)ff;vۮH!}) : P jM Z  /Kr(.}6_Jsl(!`sRi=m#hqwk`-;5;U놻߅ަ.mlѼ^># ߠ Q69h>TG菺gwЇw^B,F!GGzsP(a䉈@eG1B2U޶d\GЌ?ţ\ YK皼۔zJYa&aG[N3%`BŌCAIucv{l:FE a "xEJ}0EB`d6$,0yeUޡހN*MH:KMEM *=푯Su,doVGZL:q< )ŀ35xrTҹX6lZ`rFhNu.L'YqT ;_%Pq{aXsk Nud{:)5~gI05 42&<0f>92;Ex y (9["X 6&Xp"pF08qF9 jm ut`h'4X)qU3!Ӂfĥ+Fnj)hj|ShOrѝvbj ?Rj񢂐Z(6*t4& tjFmO߇jʟZõt{3괎7ɺ[Q\6\>҃Αe}OqvxW-M8eŌ))n(Q^B~X4芗2Km .赃;I]Y۬ƴμ1M;]aڣ<}4H7hTDE? pN[cnIDWy)+AvLX=LUѺy|0tP|![ǥpKľD۩HW Pq(lz|fպ,ԬBR轋lWT6mwt$%tH*2PYCE X]/56ANܙ@ygL0Ŝ{t6.a"7e2kW2I,ܟ @5DzZRCB5}ZJK'zYj:}Zh|_ Ke'';ɭN8nV͟Mmԉ(W$ԯ-.NT;wR9Yn};n;C˛V!ή}2:Pk1#C+j6MlLl^Mlːfu&GFmFV`fKN^bT^gjt^/rtz&ztuE-E̿v ~ ՊLsmrdDcF$1?YbL%ŅIQ1b$)XA~FtTj%E2wZN%G I񡁣2NN`~.IuG}0]KSfD8)ՏVЏT``=l8F@JJ9)M@xZuέlq+9uCO> |H.\ЀW,9_|Nji>!QAa\+L< j˷Xx=xBX׭{Fc*S&Kn, yKF*b^ V Fʚ郋BG3_ث`h* 5/b"Kv&uIBBy }l2$ ͢/Q (5l;&^Lߗ)OR5%hktk4vCTCTM7@UE+hoa,tu[;v 82R͎gCVTHT-4 ApW8Y3V̊UuŪX5&،W5d!X(dE`f (:Yby`],{FYw%E-g)2>j3&c<( W)2 xYQO8~ϯ@,EwP[ 8vwOU4[q6MEM8Dsu}iwb|[k9 z.o?]Cv|eۃǻ[W/l~ HNm{6ug]=VZ~yf:],.&\'$! Ƚ8<NPB$P/bc+Iū1[Fp6,e4>E=2AG?P>?EtϬQelo.77g~0 ԅ؞$ m9k1<$" +$BJ)*X"3`'MހQ'%pיBӻORl]#+^VMIvW>Oc \Be~;hX1%Č?\'<7xXQO8~ϯ@,E4+•h*7vߺqtj m"8x曱S=S2ݓNE4a.1p?_^H+y_O|[" }πh0Sc0N(OKۚṴ}%3yAg d hDY-sPF@Vq+BZ{4bB zif1" rJG43" @+AfSaG(A_ƣP^I͜>.d9@dAp=܆$&~O<5#I 8xyŬuʛJi}?ϘbK0NQɢ@/RXzE{yG޲"HL28<kE %j;:袘G{eʎ\#>Kh#jՄn -)ֹjU*6MC]TF.a`5s)ئ.jjH5tc % uzOT-bW0W&06H64  xne¶0A#1ųm)1иYpU}*rU2?tU}9v]Y;*[U*|b^QݼGV+jj Pȷqо 1i[Tu&5VVQ٬um5W"E{(4&dhStvANhҞ:41|5|+jZjW`c6:O6AOwZX|K8Sb^9Npx&p#t!U"ٸOhHS1WNO`s!.q? ed9>6cc}Bimڬ)=&ȭEiذj[7|W6Ăq|0$ oZwU\h#Eѕ,Q〔^P;{{XI4YS2ۇHaՠT> x7~f-Qqazxk{6_u=m{ot:{{R5' U{mh?nF>t l4>yANDLD"3$0 FAHdyepTrj~OTG81EV,t%M1]`lV=eZƲ|PFj῿ e޽Iܒo.Y{$uiqeW^Q?N8>X.JFpi5.Kd}ab2p ՆCI34ѓ(uW*0Lta>}>LJ]=`8?&+$ca$$ѫ{aA5R -TZ[Z6ز4t+RLcG X*H7mP@Єvl("a9ݟ e Jo*X`Alo?%װ9u}xa Chr}6yr6CFmߒ?F]iyoVxMAtL隼ſAzqd?G[jTthCG1Hd~䖣_x]T3J\%gO'c'cru.mx;f3yHINB!lEa1J9% .H;0!9ew3Rg|:(lA LW0,t6q3AUJ'WxL㔔=]D-(zG#߾5w Qlv_Th&=vdOS}fΝY$n v6 up ~4|sfShf=4/)C9V0.au KJ8)mA W6puYLM`53]P֣tcBp9WrPA/EXzc^P)ӴUm#\5M;C&ҽ\/!I.\ַ]xl+'$raba- +<HwMqV%>`Uc"֪eZ54xP:/6*6x*ZÿXt|\#[Au-S@Ȑ1ѳd_> )_+23yNotVpRWX!D#1n&rBkCsY0zO绰5,S}X1 `zgpcxè|7k D,SPv㄂o,F.le;'V.DS>I^F2"Nqx!籣Xkݖ}t}p^YYy}ӻ2/`fIn_Lף &A<|l؝ucpKC0䱻4avXnP"vj5Kj7ûVnZ'oZ?/ŵv7JZjVZo^o^%ύ2~ey{[qPc{H-C{lM4iYȞ6B:.7|C">$jG2hO)Fp^ꐤWVyb|kyiCZh@Y?..Z..t *אy!cufF&$0UCi~jBk5Ӱ)tMh^E/%c|hU}l!=1F5A5[$Vk~(x|h/%u^Ѹ BFӱ]'V/ 'KEňcظ[1k׮f&б( UCI#a57]nf5\V*.*Nf^߼.<[ٻWNp jޭLYFqAq%_RƤZD~zk6 0qrD+Ҹ$XC2D +Z)\2&ԆzМX&ԽD|ٲJ88P9f?oU CvNG%oHS48:E*( յbht^x.XX7]YG#W$g;(VRGXrX JYt(;S5mC,sADC#5ӧ2%$*Aqy8e,!8ڠ`ػr+,\̶F6W.hB!YUt`xwo V`'wa =<.YAÆ7tkXDf~Pf61 Fh#1n6trwR>s+&Rl,pGܻ7^aj -\h2f C=q1֙UUlXچV3]e-vms'5jgCH:H4* TQ0#6]r+4͉{ 2BRU0*UPS4" ч2 ++aK+ڑhX$䢷^̈́H[DwarWw p|^f#pB w \7v5ˎδH+mAE+6V૭f.R/\feU/#FT*aZ[[VSX=3#-BW]wSTCh['Q ###:syӈth@PFEjċLh]l-) ǘQ =%#`XDhčZ- daK8+nk4F.ߣˡӰRknbp򸵲)=o(Tؗ*}u qq&-Nx}]sݸ`MF$uoemmɲQXͽO)ꐒg RvkE7 dwS5t7@ht۶xݫߟ|,$ /xYmo6_, 6,M6)} hɢ'Qq}baxܑ2zy'唥4dM痃^6c_!d ZfNUSFAZf,$U=z\-5[M_5ݫxyg^7?]\Ooˋŷx}(ơٌo?x~w:=}||F>]7l|g@iF<{]sr㘼{>-:~q)405C  TIg63/ Zz՗M?|]_qRUTG7m?'A%uWng2M#~,CQsRe,ًo^τ(߳m2HY=Ix1SbNʁrBX&'-Ƨ]PB>A $kEDBDc$»_5'_hnM>fYJp+@9@L|I?ïEʂoPHŪrLY[lVzE(ʮ"`_aOX~wQJ8=j},"V#GޢL\\3POz%P~fF+ 5A T? ;-qp(,$& i^g~M[Л~3E?}O( 3D)|ς\U΢I]mf_#J7׎aڈsRZ+5(`@{~KqHFl5=kF~T=>YF>o}Y? Zv/17*9gM{rD5"`~S<&l%f]TTg:PjyPe2>L4y*i}I' %U7Xj%QOO ,vk8zWP< xƫ|+åx]N7-5#0^{'z}L4JMW?x7+tRe}k5(CL<+(y/ M*XAH5) [J Yπnɿj"/\ (yb )T2e`M~mU$+[ X||}uuV5AI4elih`\],( ɻahjhy$"wmėjNը6ʉ麹 vJ5߯lvM$|Rg߉3U-Cy$}!%ۇ2Rg(K"ɣG֖zU*i\⊵$ 5KYUx޶_3upT\LX(+JRrޒKiHƊ~]>iz ѿɅOgtJ+GRK&Ɛx58m/$ٿ*(R[jw iN9L#gi+`U4{ũceKel:Ien 2?WviSNjKBN",y{?j?o'\r0kIZ<6Nvnq+ړ \7]MPR41yCZNjfdp<YMX9RDkҦ,yIw0"$,]^MOL;}hTL(T#D ˤQ;/"QBX55:W1X&ޡxUXaBL6Y'`přT^0kn E8<'b4X#ghnm>u3 c_ٝ X} Wom32j^eRkn_+nV xtf]>v ĵ\%ME*.fE SlsjeZDݏFê 4U3F=.- H֛:M\P₺oF⃓$|#*EnNpaptrWwE%]}3;X?^fPE&1`DAۣ ,[M}\ ^ҵ㧡~d彃X+o\4pyc31XZd[T a\gDoܒRE-{)K35xNsyɉ0>l])|rce eEkSŏ5St.J `$w8IZҥ!|ij1e=',]y%t50OOw3bI'_]=y|=^^ 35Ĩyd(5}U导ͭͧߩxfvѷ4(i fi hW Gvk'I[. i)7~ CmCs#Q1v_!%[AiM5_Jf/pL}xJP >RBB2L(pkit}vYe-ޡn5]VY]KPCxf%rڊj\{E:=]O5, ݊yxt\ssL R2y:1>4{t!(q#i nv عՍ' .zٜH*:׽1 4T8kOXV-kT{!af\ET<=-tO < dŃQ72 4i(fNTR&^ھ&2(C|vo*f2e'x]:Bm[$ -wd^E%Vc*YE~~ `OdI+a? гPJ9h3j"as"pJ$| Ij4CM^Lk%RӐ8gP?gaqMG=i%ߛ Y^Qn׻⻝4X.Qj0:}C I~eҢ1 I4H"S8'egk&쬝`!V+PA(Oa *\\[܀}a˷~{n:6Z_/)d/ M3OЫ; 0UDf@'RcU}k^R9Z8PSA[~pl,!I,I72Uw{ۯ bBw_v1_FÊI̡>%+>5?۲_)>m: TŤ*v8:1 f ?@llEd직l"]=Mt%eS`r#JfOXA$w)Nŏ%s[4Y'^m58 4UP¶'^PXH j!ʛ!'1[z3{N埙yNg#&?Çb9ډwlmX4 0ѿV~U> M YA5KD8G>P+8?YJk(SCMS *r~/ܔzHW@X Åpr3PtPI@ @V(n2QCݸ;W+ΈkM ɰ~r d~OND* R.]hoD޸7C*[,dmb;A#u?dS!ztW'ZJo3W'pJe)ZJE?+j*+mwx֤US ezKZLȜ.o ~t Xވd&5]2!iz;`0w2e#ojfX\1ޚdGB7-G!b1:l1YznHuk0%O0({l~OS:kVe\b #Kл2cTi_eGv>P#%Gc''HoJ@,8@XiSDn|j{o .,wot 0%=eZOr)ñG'=i g!5;KVH"B+=KunYPOaƎ0w(_*DF'2՗U2%yQ3Hm}zN"ꜱ~oC}X@H0L\sVY$;@3U`N`Ild d4:Di6]U="*+o&Q]>J$׍:EC%]JΩ8pC̶ԾnFr !΂[XĄOج|zȆ/M\DLl²E2Bq-ÉKxU<~,? :>?_6g<{;{VYr^vg/\g?e\f7~UL\7QeB҅7t#L|^ VC4qUQrlюCv 4|e'߸I{=hDGbic_,?H&,nr4<>,1P<= gtYU&7]?}=Ãr1[tsԩyޖ8ZmI0ۦGzrʹJԦj!+&eȖ -J˔|w%lQpz,<|ocrV*Hv@lI ̯ a¿z[  $ 4Ӈ2(Yj f6%S_ñQ q!btRuOt3Jl_h1ac{yZ,{há2T m#΍.nY+ '펭2;GK:,u*}h* ,vV#1n( >Ng2elZ,@Ht+sӎ2RHH٨$LT<h0%$>IxrP&t u0_H6)O*8TgD-eBN_0n3< 70͙2eI1\E9t;pl9|L:g2covpL8*c}SIa”GE$7LzDŽ{*D tdA#14q1{ !4] M=VO(>_A7jM61=g1VGݳ˳` ,)ywmg0?#+:tCsw/Ih8$~qMHŪi[dv ̹՚z9%b<̦60p)u!*d(͟Dh˞Cy@۰yy²ad9|LuB[h/ 揆'MlTũ+VKcQo>KD*ڕp} ځ 'Ni.Sgn{uEdO^&!PwByCB;C`:::+%P,JcyU\S&. ;t}'·fR@#m!MsiPbJHiF.&![AJqt3m(/U62 ڒ Si&F~Ltfh1'Ȭ Jv!-> z0 &"o#F̷!8nI-@ێNb ʣ2y(5#^㦐Cw‘8CoSF~7Nޮe*M8!5}GI}?oIyX-GLj uM7ַSWW CǖQHjKgD3.wVqTd|Aq ?h|"n u=An*UA4GLRFtDS K]> /|>%_@ZHHS^`e8o'A@YA|68gj" P%PŃ%L3Y.psv{~ӭzy3g`A@&VW'Ac?ذ:`**Dصu@>fu ]m%^Prg oʸ+/A"D%@A. 9 @I)new\Y%6^oM[[X kA$(g7t> }$`!Ǚ*% ~]bB`HMU Nǫ]+3PBF a0W,@`ٜe2/jeEnZ ;K'DHƆ[2qkﰽbR8(c䜁@逩?_mxAӶ'R(("`"қG 3EY#wf\<[<g> Q5f8Ȼ.E%;ϡLfE8lh'ڻ+L޳18U||Z+Q@]D:LZf +*Lqj=}.vTQ3#Zz/#r#3B|lgcUrUT #Py_7TT3{5W _ pG]3Qkt7B!9ۊ&Qƨ72dEl0)<f.}7$sst0 kPOghe3A&c&^Dі@R u&G!{a <(}ȋ2ċ(!d!%,J吂Pz*IXgYU6?$갻ػ(ڲw)qCadHxAa,= +7{f9"X LƏFr8b~:,tdVJ@ ]d[g+!¬r/yq>=.ǧ\ŧld5C1[ ]ŤqhP|l*܉f0D.wv2;':͝z΁@ūZk'l֌1s!LZF@^E!1!a ʑƧXׄ,%.ee\Mvᮆ\0`هV@V^L:OAJx>ߑf ű-I!U wI̻@8&[ʖ%Modh_ w~ +AW~ J3ٮn·y]c68*.~R4x7"╼~O #Űw=M4ed[?bM<\[Wm!{XɖyŇzxMp9 ]9𥌱 Qpf+N N|}R 6m!jy5 v:@}*m}R< oK[||ojnʝX>p: neQXgP܃Pza)TGx O,GYUmӅLR=LxQ%J i!B'Hnh~=*9#A~^v7>6EG_bjb}%|3F)cz( P>Uej=Bt \×/KQNҖySS3Si2? jI[ +-^IO >/D>b'~VjPF;HJ*I-MŃ}ٛ}.-yѝ>;J!4}a#jcIDᆸ {}Fd֗1K7NҍlYF䭋_8 UG0Z+lUDEgjksNׅʎo-1&)Pւd14!ҥ1ofݏW7I.Zp2٢tPHua+āަC49hm} W;\Dz4ᅼő s8q̛e3g= Idl01@Jb=ʰl $0_ȃJϑ>ŰxJ^Mui:].šht6OLK)PP \aY0Fo83psO@BtZ|~i2ς ]-=ha~ &ho.k"bT⽥BcbՔR1-JC2`G$V1kb*Jyh(QRB d@~\A% &]H{҅qK̎^ 'uވƈ5B}(+:׬4:6 6}\H( l&X"!jZ0+A4m~8]\" Ǡ傀h~<;cN&j}dɊVq(/ 3j" CJfEK{C͗E[;B]\T-Azދ %̿9|`u<[ $dDE^VB5ixhTZ@MS&h\F"1ceѨ뷾W1a)%tiC'Au]v.BXP#0oOLI  Dƙog6jEDBKc1ɮ-7p %c3&IC'ERs1( JCnY-+ (ҟ12BoJ(iDqWeaCCj_R߿,8X"= eR7J)0|%" Ed拨,BN՞eQ#MՋk_ DbH#8/ E֧4?~zsY .${vr& \"P EH.HnS +Ͱ)[p&d4Q(^WeiGc/QF#8Vo" I!đ(Z J8X9w ȵU֢!.g,{o' (AX=9UMox䴰 (2\;"J]!9WѱNdM$ D IΝp څY5#e z*u"e2 [l"E+]|V` ;Kc$v!B.3 G3<7B{?unւ9S{,,@UIj&wy&1b "Zw@n;ɟpفP,%c T|¥VM&(v*Hsx G"ȶPχږ:othVϜsBi|w8uLRV X|.F;mu¥Nr#vm :ABB*;0 !X8W$FA7D5p߾!^} ԜzTu}ǹ_2u\|x\56oK.eL 9~g320򺟺Hz3(D!Ĕ<=N2(>][vW L ۂXqEә83fY%ʂ;uV}+V{|_>ZGĆC .FI3fIua8<bFd\m7]ӡ#2hIwNdј_#٦N:z·XEc,xxE_fd*,-hv!n}}>@7}nO3LuSiN+m(4\.NR D_Mh*UD걃HSplqd5&ߧQ; GBmMYPWP߃x#n=KvԑM|% lW_#+2m% n)N o I^~B7t;Ӓ%z\aPN dDdJ(`>4dɖah5RG^U TH<8u{_ =p@x_c-C[NV4bC9vÔ|`|d}*I''3#DEڿތ}z!p5!7 d80%eηOOMi0@ .@OLHDZ$tTMG)]Pw016^Pߙr87CMĺtSەD06f_O\`_ FAJ_n8Uo c+8cbaX8e iA R<ĉdZ_J{\oLF($׃ӄH. >,=^Q ^H'޳2ȇepr:#sq3֛)i._dž4erI%ÐRtLxf&CPg?p (8 g#@ko<$L8٥\x3\Gp>hŭ 4(-=v<4 A! V) vU3Yq-`8>h m[^|<9 {j # s g~>1OܠAU𡅲eͨ8z}9@^3Zv8*_E7}YM8K}$mCŠ7An#>+H'XOD3N8_GrsH5tv(~!` I.  Wᵝwu!$oebRMdpS15`Y {msJ+eș_n>d31=Bhp}[7b|M)Y\ԠC#/*dZ. hXJwuͱYe.0ǃ !Nil+n6KsM#CP&%w >q< ӝv˷gH~AwJcW}Ti`BW zDj 3qc}9.ޞ+ʡ6T6l/yj|*\ҽkqIȯ`_LEX  YrѸmʘ>Ұ_§^\#ςrcS4!eN)` U 2"~d\Ve<T3G(#hCE,8ķdQ2ua1LgTjEUO ?rD )oc$\|K"4퇾_??~!=+(\ͱ c "UE_bU[sTH-H|36ߌXLq@hFGFMn'/yB5Uyw%̬qNEGOW`Gl Qo1"[09O.jSatC_H>c-I ~ٱuw'IKVQ{얶 FSx1M# sxɶ}gpx$ᓸ4 $ G%@sfY;58LL*ܽLvJ3P >@Iϲ&t65*L ע?7c-֩p33QYp58/zUjkch˜bo'ys-Um%m#M^ۋHvBH/t9eȑE: !rJ1>.x'_[T2BvoU%f%Y,TH)E@0ز;< ZZNRZT] lXTJ`GgMCE/؞T?_~x :3SBVUR-wroP& >ݤ\8/Ҙ]\8w/9'>HuAOWZX-yq } J!)$cϼ ˣաq`4f3eo7=uf-A;m?GFXhsEq^]oP'q+UF7OjB4+jh3cJ殎OY7wL6݃[^p}{bnZթ%7Lϸ`WqJjym%cP`EK g72Xc]1"3r#kbf'ՉcZ%S n<7:}jT[-RQGN$<\FD$;J)ebMl';_Se n>>B ubi}~ N0 &xZ[SF~:`AiK2 ɤ ֖ZYHk.ڕVLliun{.9Z{ZDdyݽnK0wt/]xVn@}WLx!ZF Oȗokֲ{gmv )MٙsmӇyL.:fݪ"O԰?{7(̿;A刐!q~|/`$!W( Y.ֲa 9#oAuY Ypz^3'caٛo?xz[2>o>8A[;iqFw#wW B:xP9cqdsybR9Oߧhck ؇҈?L0aSd _]݌ r̾tLNbb 9KI\FJ{cf+sb@2[ / ,Y (qNzj}* WZ߇qHU6ČfK>LsBY➿ڍ))A n3 )ۘUd^e얥ސܺE"dy]ɦ4 =eRJ2HKf`O _BKr)g9zQO 6r.C y A1ZxxU $]`<V`Rc"@R$Z*%}p+ȭqnjlsqHk`cM8'jաߞ84i*RJzNIJ-,Ώ49+ȇ% SǦxj*6kl`En[TDz?|@8 bv50T÷[mV]:T[3g9κF*H_-O &ֶʹ~ׅu <3M5<]54T4F,RwP[֗+Uao"]"n upczfӂݞmgUA5Yuh8K@bk8 5Z62ie!Ĭz\rL%m 4Lk97"18j4 ˢqA2 !󄔹 ꈽVI` /r޶wB Xd3i˄*h oỸ 3~נ\P3H`^qӻ&AvנXq6xʹ[*몫 dfZ &<l1%IM!q4a7)|V*d*Nj>^5~# Ǫ]3bbk[Fz(n4F?Qpn4ظ8Ds:%뀋i[UG,(ڛC:xWU+YX@E[ Hw Y!JxcP B:=H[uwV _oa[]!6)nz9skfO WW;ˬk1_"#5DkgRVL>rR_YgolWhuMoIp%j1Xx{R ~1Jڃn{0_dVgy}{>SW۽n6I$9XfI#SlS~|k*\*FWF= z5’qZăbX֒@]uM`xjGG(PxDeva\saG'H Bxc T=dRɝ!s0;BÉGş KR;} awfGohN1.ss0̡90ZA:u)'3G#c<+1N sX90dzR։tQ ءa<0+¥"xR.vj/ n|d]*2Cn~0}aֽN0a[i`yska<N&=x1/g^M/Xo $ %@8|!{(x?9_=$KNvKʱ‚->-`7) 4 ϵRzʱie#ًʇT!/i)d,L}B"mυ^\.\D9@?Z4plm d .cvPEQ"/`(]>D U1>Y@'T$HC݌ %= \psB[,q9gGJ^d+$v P-]=v<3t) 2A\_H)MdDORTnF;ķ*wْLUUmcUuUkUUSK\O-tͣQ\N-^! )5V:haIV .=:!JzM=Arh@soPyn*G"o~1ֵ@L`@Jt`\@JIUz_8{x͘PUu ĀDl<3އi\ͅLGvxHY#?a1F}xWmsHί3V%bVSw [F1Zb0 wX~=((*y//k)\wjWf o1WZ(Ծ[~<|>RUlT?__g! Lw-\9wܨvml[ WlH+\^QL9&t͡)ۍSyalH|w5 45V@u?qs $o_>au]btFW_`J躗qubZѝQY~{876}e7,pzu; E"IXi&RૻZmǛO} d~9@ ҨF:e*i| G?LBq&Gk)(E\ z~;5_lON:xzv[/99Ś%cpݻk難]C! QqormtBUEZlmsփj6T=3=t'mTm3 y.wVL9>IQ))\χG jv?KE|gl°B$p'Lfع9֝4ɺfYLM96:lVU4r2ϔ]6Vf?Y " *  ֦!X[(9& r4h JxVaO:_q>RkћJ꩏ҽIާIĚWCwVmr}9N; ?|yb'S4owy ۿ>!!_F'o3@6ZDӋ}o?5f=!d7 L-Ж՗&l)g1a$HFHQsJRxAaP Y-Ѫ&ht" xC/HI'J=~z^: {lXO/}*sLۼǶ{``ղDөoڇOYiq/XS\ť <r>λ#QI<, /hdufh^1,ɊBVRWSo۬O3]{EG7//Aկ@Y'DZwUୣUlw/WkWA؈j}{pp8[lqmW X$K@䱈; Xd,쯤y:;;vP'Z!^vMb+jk"C"W -=oćkG(q+8rAƭ;$w={ƣr^` ٔV Ӽ: 'ٌg:#9QgGװ DTgXa^8 -|"A|J~4i "DĢ\v~dd}'qQ ДbF%y2z{|(㾔A.&`rD1*bWnàr  W͝FɛEv/U/ kƜ4֘JSj#1֧+7r'YTl{r0QcJ@1t^[iR(Qy H_ 0)K0l(hĎÖA&J41X[ '5H̏>܀5f8/(e!qYdӱJv䬔g6U+ZEF4n,rY% xMSjYz˒%AuFwtB}Xa=-т xA%-*Nlұ/-Y[2Ӳ;sD>w@8єs#Ь? Mj?+ 7zK7X~/Fj:Ix*y$zbJ3׹s4C]Xӵkrʶmڛ1SCʨX{)uHunQvye1kW[%y .f`:h4A[Z2+й@6_ `%AQ+X1Jǚ,+TjxhؒƠf0VkNUM7OCH&k}Ae ԧ ̙`)G g/(_Y .5[5EeD/m$YZf]ٍw"IF҈H{RPuBPs$͒vd8U B/q`|I+.pϧ3 WVk}L3(dFœ,= '}NǫubǪuRũ`%ȹDݯ([ {o2L_g^WK_< K6( ]xWmoH_1|H Bt'b\QHz%Oڻث^^U{gB I)a=;3;3~Ҍxbz}X cbry )5V9xY]S8}Ц3m fwhpBvX#ۊE2Bv$D t3b_KWGWwSIS=D҈4M{s1~[] 9h"Nkg7go./8@#Hog"`?Y|=٭|}w`4i cT0x~0Og"XbosFh&HLb  ?m_LCW<% Wϡtѓ=aj{/ Č_Ѧok%K<=ϐ: hs7x*/x2γh?ޓ3>UyD#.xv TvGB#y$xQ_-2 ^`ޛ!`%фDw# /aZfVDs @?2re}Y<"3a,U1h3$Gs'!1n9@͗gp|bY g5ÿ^]&L'-8LƖZzaOuzTY*\dELJz)cP\a?}Zx<< I=b=Ҏ'  K{?yLǫKvVX#<CE0PBz"cό ڪTb:8F`=ߵPOUAGi *ɱ]Œc^OL)>±-18|21C$zPlBUmFoũXP|a(LljcnlPjdcM #q8` *:2/Yڭ1N?J :z "-Zƀhp;nNY,xih]Si a2}W)Mjvy)#V-t\!BF&_lPm\nY~jSTwPa>*JH(ގ$w2V u^ ##Y76 =xVmo8_1~(H[ ՝hȊnumtuw*'6U'FSZ8C83 v?<XqLAoKIyN\-O~?x7)Կ Oqs۫K@P)_[ǑRzؓi~q6+'YaӣiZ#_Wy Gϋ' Az6DMԓ~>7 >Le:⊝Ҙ!Og1 \@ h{f}h6RF|kj4Gj->NOO}eN j<|b+,CK[bQʖhU#^^~݁ [i )[ߤUix'}uv)85QWY\^h\Α;2sX*+͟5|*;puwXp73\ƃ&H*o $+㨓aBoo#SwLiteBe{*\N?]bvlq");1qkm:Y*>LSnuPbqJS%D:!t´C Ǿh qRxBy@ʫDt|)#IecRm6xդ DBKDo)#eWoq277 5E>:~p ?g]A ˯7gpzfY guy ~?L pOZqH-k6ÞH| TXqy1=*)l0BFr2iH0$UٜmiONv}%OD&]5I|0PŅ^D(1!^ #׭Ug)煓tt}}ߌў{?kѱxO~_-Uc[%&p;_ML)b>^ Ƕ(Ͱcǘ :ٚ B.HŚKT ad hb-..L%j$Kqqs2qlI[S-]GYHҴ-P:HrbqNq̹"s=؃k)YD oay%^gb_.]J8.q|_yrՅϏ!7e(,>o}~0U>{x/kf}II-I?F$45]+W 0(`U.@KD_o> Ղ_^{:k%T{x/`%N|O5,wnVH'hQB&(6J.èd*F괨Hu:6wb ]wvO)144T:@c[hA3xFPdD!!um8ONnjA]wn5fde])Qvqlm,'2YҭM,q)U!A?R:z "C|Eic>[ f4?6 qPFjjfR}sP/GMvZ P=:!#Q`+RePT;*ʌ}Cv0?ǟL iKtܾa~׶7f 2c\=<xWmO8_1>ҴKѝ dkaou}BN&n\9]q$-m$όyʼnq*u.4(C< xXmo8ίJmH7Vݾܭ۬S!V F4VolC Ej13H&c';, xWmoF_1%AԊ(IS4wS.*!{g䊔c|x#xd2"vAX ʓ`&:& ˮlpdlŒ,SlP"-DAdEdItlǻs1 ၥ &%u9nexW[O8~ϯ8[ 2 Ҍ2̢Lrb7p*v(hiKi; ~<Re2u{`I()OA'ӓ:}?Ok}$8* zxWmoF_1u> 1>Q4wS. uHzY "%س3w]Fh92bP2].Z34ߋ\ 3G'\?˫ҋq!O $]%% e $Bw3*&|P헚"%FMqc1v̹4uXuP֏PkK3Y,a +ƣ6'Tjךh^-q>fz ^}2+5V0Ii7o^^l!i2xfyT!l0k#ussv07 qxY_x [ln3$B<(I]S{dC#կ&>+h+|5?.T1n.Y!Hx CH}ˁ^D()!ڞ #Jb>8oF`˚Zsr ;t8TKmV Bɱ \ϯg zQ=*vW!%!j>@.l B)9Bd h6-..%%pqeؒ:"fXwͫuT^$3RGUˆ8BsrRꤠ,a1%^TwǞRkl˶͡.k(T(X-(:SjwPv•͟5|;sywOXKi/ylMP6"M7r]gdlp*T$,ͳPȂ#IeEཱིVލ+{_cg) E.Q-pЍI$cf([6ɖЫO]Pl$$EHg:cO̓&4D'T:[Cec[(A1⠅xP]F dn -B'fumlu݄?<kpybC-p`-d資,YoRdٴ$ԣ.^HAe[M tctqnX,o7f[iE9{ou*XGɫ9[5)ߩ 2_)oݵi}4C߀M~?4h㟞4kC%*V]hߗ{Ldr~:s~ ozq'hnwwW `$m_[ǡRmz2>O:P'iӧi:!# O 'G_'|!+6g _-G@,u;˭1O&0`1 _qav} 9/3eC,p4//?s}g9>Solvz:-˱ rW:nfӎ|<7cݎa\Z,bUbIGioXsB*bRPx$Pдu#Hx1S( /S,FZWuuoD°kE oy4m t$b%[N;G%yyNJ5XB oyE^fc_Oֶ}e$y+Њvbu޶z}c`w]u9>?=vji^YS:Ŋ%jlK Ƀb,sy(%f`jyT"Q[N0)dyr!16v2. 핣mIf-IeO۲DQ+G)5J6Vխ5Ȣ:j_(%ޚ#I>Pvh}FFٌ"2g9K_4\Y;r}w6?HKUKHP _c6#}V^Q:tR 3 rYe 8*睭R6!9A-P1 K67_+9cJs{7Wn BFUNƊgՖ;gc3#q󆠣EOp3x`E0gW(j14;dFoDznhT9es^q9 =XHE}g1̯fo246cVG5ՊmJyт!юkm#c]jWtW$-3$sa׸\f.#=j.6mKcdjInɹނRiUkl4C()En4jزoc`.5wH]̗iu&jm3%m<-myK[{%3.e"HLPB)#ڶiMf21Ӥ!_hi:`ngqiZ||hky'{ ((T>, xVmo8_1~(H[ ՝hȊvoumtuw*'6U'FSZ8C83ϼ`c,6$'7g{sB_~=9vq{u  @9u);z=Q Y< UO2ύc?}^s18|Բܕg]I <^ 3TOB u@hmXsA&cR숀HҬ~C>nL+C] /W*]˄a)4L,ghiK9JrbmJ@+p E E Gي%&EձxڦnEJPeW÷"]zn(,S>gߞ.G?e2NY犤wwfTydZI1)[\?Z4~M dLVp_=g3l/x  _bx +<Iu6?F(D{[zpW$fOٕ]AR9]tas|roERub^T LoS(Ty[Cm:(A1ra8"BBڄPl!ƞEU툛:ۘ[rzT;EH>N 1;Bvkl0I6@e1{])T@vC\7w͖.n љyyZNRj$9ΎEڬT/Fg-Cէ<]ST)n,_s{Fo_}~?9iC7ntຳ٬;;J_gcۃ4t^͵`>~nDs!H=r)V$\x~1@>FJf bI.d=6CWP Ğ8?'>sR ;˳ tkM5Yjzf܂-6,ӎ|97 GEǛε`'S& I 53cHk?"`t,iEf#.i ,]LY B+Կ S%P4m:NJO;;X:~52s( Bc\FIٔ%P4;0@ST x.JPfF1(sihxhz^2 j%N9<m1wg S\WMVƘ+k-]pOR2۵} YzmB7Iv냽.^Sg=ovI툘GRHRv6:JX<$[}R F zqU9^r-H*x*iB$?b)ط=QqXG :\`EDDxWmS8_>3%%.@sACwRl ewe9_Be,vWϾއGR.aKBIy ;1D<xWmoFί:bKcr0'N&iSO®a̢ew/عZJٙa晇g4`dEˮlpt],SlP"-DAElũt{{;ec’9M`'(s3/B( =xWmo8_1~(H[ ՞hȊ:.]ݧʉMb5QVw'ڲC3ό%)&GW.A$ [xWmo6_qs>ˮlpdlŒ,SlP"-DAdElũt{{;eS$3:b_RN't-j@XxWmOH_1>RC +.]u@'no^^' .Ğ?[}z xf*29k;-`I()OV>ŗ,f?PxWmO8_1W>ҔN%d[pewWCVom \%H2g<̋DS)iKBIyv2=>w*ÿwkԿ>^<\?=\:V<Ԯ{yZ{;LړT}1^Yqy6m.>|/fZ0y}?y}^J+xvT@W~>EJf Mbi.6CW\P z=u~:N|?RvWݫS7 y| ERÕ%~| ׏k* TXdZI!TtDUea&Zt1S rRqΜMِdB^' kEL +x*̶ar)b7BHy*'rՖR̎韁Ȉr0fCDeh=XѶpNE,h:yۮaz}Zs^!Q׬Ʌ=3L[NXeH* lBK X+źUݷ8}k@[޿V}>n/ T׫s8>Fs>;t r_ͱu*Ll{ZWL Y< >Ui넌P(s>fmth6gI _-G yL'+vVH#TS'olvz:#˱KrdW:nfӎI>Dcxe9k]K  *[񶅡[i0֗C=p7!):5pgT\BzjF #;Kl!M`ӂ-ci@m=PmM X-jc>alQXa$#kA[B>x3kw8T\GUqAל@Kxhp;nΓ"Gxih ]3i !62)ͮz(R)'Vt=)#qo_kïEQm2d6,7դ ?zAKa&JyN(ލ$B@ښiUcؿ{sD/-.gp|bYg5?^-`)I:>6)em6fo~@Ó4QIq7%seާ#Ð֏¶aI=]Aqw'"xpr$>gko1ЫE27D3aZJ5JF|3k_OO?hѡy촏~_-Uc[%&p=:R&\-r18{T21B|lP;DP)ÆRf@(f24[q $Kqı%uE0]E < I34%$l51 Lgqr\s)vqBQ\/C*p]dl8,GۼmcȓJh83s^~.]X)*kק +Ï?kLyxsu2\$H*I B'{ڈo27^AJ$ȀAaYU87Y"9󽛧y*'![Ngbl]0FТQUoLFRho+fWJhmBR].JiNNLt=N(;Tt7!Pl mȃ@UR`ќ)h<)0[mSeoKþ,l|lEekj+m!E^gIFK ,q(:?G.^H@eMNtcynX,oz[ix9{otX{ɫ5rP˞B#{DT 2u_Io5}Ԛ㖝!CM~?5hk= iVK/T,߻V0[?Jwa2kzo~a 'pjY˔{Ҳ.n@dlYժD[wGeIVM;`Fr2iX0$+Y?ɒؖV4L>oW'f~\=c:^\B,+Hh{f|7`RF|7k5Gj >LNO}udVIm*ܔ"1L/"CG-NZzPl mȅ@U `т-ci@m=PmM \#X͙lc>alQXa$#kA[B>;x23kw8W\ˠϺ RPCvc<4nT7ItS~#GS@}44.k픃fWkvy)#Vt\!BF"׆_dPmXnI~j3Tw| a>&JHr__}! m۴U~Ҽ^4s|% zi gWolۓ 5`*}eۗiT2r^BIg,cTSN U\cţVm'ʱY=AHt buNdt81aݲ.|[YMpҿ.?سgs~ꩋd4:?t8]`QraC&ulG=|k9kE <؜aP'D:\9B)WHDPд5&=c$<\))z{QuuoE̐F y4hH?l6lT:j#f^k ^)KXL ,ԋb_ݧ5H㭵Y}_#ǡO4~d'Ȭ0bnR; 98Ɣr|~x1W0jSW2[8 ?e3E b(."C 2(kWNIQYC ]9,/$YG[B:sMǩV:,t ~wgVRO7zr.VM'S&TF=a.x!'*١E[Pܦ݄HD}hnZɏm%2D#E14#Fƈ{d3ii"{ A1܇DsEnx\Np\iq 8{(98l )l&[%V08l*X>lKiZ $EZv_Wuj6Eu2m,U[*:jb6-U6ef,"DO7RhzBDĭÈP=4Jbd_+iێߍF <[zW&fA"ƚ/;̫;og9X#͗?/?`u\ Pv]g7z6p|ޝuܻrhĊAtx^ōZ0y{;y{ɞj̈Z>Ky>w!R2K`sNrꔨ')baOC)@ P8!|_P^_/.Nߚh=gw|oiwȒ{3GxnA\^;Z:.|%&[`L7+I3OgMr'@\ǐ)B)טsDXҴV̅GG!<8՘AY7T AnV-qh)RP|q#Atc$Xɰ/!~5gAhTKZ.X(<_Tiw%ea+}ckcm&]2lg(Dɩ6 wy{|/ {p}R0ZeuIH _c6#;|E8LәJ@ O5 ,L<,w4 Ʉ=A`VtnS!ضo19B<܂Y))TOx ¼OqZ !f&QiGe:3\Aۊz5ѨuSb5J_U lUY%w-*lP헂FsdqhQXF:FȄb.͑Bm֖v]ZL6>oo$uX?頂 5{6/h=TG՞VWn!z;[+JLl`Ӌ-d! {"갬?GElfc=ҍ^[و87[ss!7wooznXh+o4 >9X?A"ă5H)I6R}4MUfNNSM*䏀ǯQ;}ٹoMn 3 ""ZF8 xWQoH~sRD+$B.-)Z{{ڋuHTwk6$!!%g|b,͸LFvӵ%< Gv'=7) 8?ߞÿNL XH\ _ ~QJ=WQZ&ZsF <$-ڣGQkG"~~*w1uRd %.eSp<ڴ^MFe{7+EKƢ F+Jt(S2dem~05$9txݳ*`UJI9Ʌ=dJ3k/}y!S"% %x6VL۫?A`B1gxlNn<-J]3EF{ӭpv7lETژ@}roIRzd^Zs13 Djȍ1HZ]rC-Ow4߆aa1[{fM ;I8 Z l) Yڮ=v:%9SY\WVriǩy\t,wY3IsKbIm+"d̀P3Iuз>Ǎs2EQ}Te -mqG)[J$W xv?@)[u`%Nɋ< Kkj$E*k)}[EtZMhE*c,c@ئ 3͟4|N:<'34L+ɅW2G\A)P Jl"cW_?s~ v}1mg#z/% 7T$++bBUԞfܖnWV lAU6:2c^sr$)2<2^qiMR8TyCm:(A1rb8(BY!XwKrE!7߭L5#?Cl+$y+ak[_,di Syd TY!׏ \-N賔lݞKn| ݙYC!1($wU4-S.*k/א׀ICCJ읝yvC,`Ҍdd:]XHʓpdj~޳7ϓn!R 8?Lo߷W0S)_[ǑRVΪߑi~u4JO'YaӡiZ#+<ΗYŅ K^@%sjzO_Gn~|܇:\E\B4,+_n L =~XVԃkAb<8V`5?PMEGi,)q_͒_l%6|uNG0Qru%i.x!X -`UJ#b"Iqc<\  ~J=WQZ&:E Qy"H3%l>*^-,؅, Jnkbblׁ8M'/$ж//3M V]=F\ӥ{1n7ŢY2 T&/Y+ǾbM'/7:񄫻_KtÆ66^,`Se3SQUQt_G] m!AykMJtc4yذ$/o3j[E_9{uM5>5knU= ^D$@>(IZUqmOBz+OT 9 nAKHU/Pqޅ|;Od  BM(xWmoH_1G>$H B18HKriIuwwW1^kU $Rb{vf<3gm"G&S.Q鶀ž<FLO:L:xWmoHίs>Ėc׎zr0NKrn>E U0%N,_;ӳ33ςi#)mwb_PFg9bKHgxWmO8_1W>ҔN%͊+:`j>!'v 7­8NӼU3oi*d9:PRDN'u>8eJNxWmO8_1W>PiEw*!+ꀃ-M,ܸr ~8-IW <4Teru-`I()OV'>7I. ?xWms8_G>f Loq#]璔^>edKؚ#ː\+ˀ_HBc,vW+=+ӡiF{1#k|8B%{B IC"<ת:^w 3p? "%18Nx2.Bv7B!Olj{c!Vvaopq:8NqkznW9V8ӣnl9[%#p}zu~rւ/g\bێ~s\I |:lD@j0sC* \c֔XҴ̱}nj, ,C&HǠi_˄a)/Qy$H6ĸc&'R$-s۹8 Bc|K(E`Y)p}YIJhEJ?Vcuz`j}d Q(9ަ!/KޟqnztyavB-U 6%#i7dٌ(FҖnzM1TLg*3< '.0 piϔMH&y+ ELn(x(`;x`rq):P]7 2GUNN̖]O1)UfØOpbx`E;bn$ZRZ͓47PwDcM4Z{[6 [h+F۠܄.5:20W^Mq0|/8Ah>%3vHRP\Y)95% c$PAҜ7ھ1~J4$ieNgM߯9<m0Ӿ}[]Q5JkCd+-W1[b$x!XJC*?kx.z=d{3 \c|uh7: WJsD7Q0Vs+7" #Uͱ&DH !)~W @;R0l@Tfzu"_Xjo o"|VwG]"dby2].fh3BqgxގCh.^'>nk/H ?_@‡H,y5;ɩS" Ǧph= j@ćcAZzaqڿ8NqkΣ񯖳-1!K^9[%#p}zu>h93=`n>r9w$> 6eȞD@00:TNJƴ#Lǒ]kfNJMҋ_qޜwQZ.=k9alJ|TmEFվ)p})C"`ũ".WYy؝a<2 %ֵ4 _.c(Õ5/ ${p}b0Ze:IH ߥc6#;_}EHLәJ@ O5 ,L<,w Ʉ=4A`WtnT!(9cJs+oOyj#+'rfScM~a‡'n ixAIa~+źSwҷȸx;GYe߲_v6>ݿKOvi gwolۓ 5`)}eۗiT2r^BIg,cTSN U\cţVmS/y۸[NY?YLː+v[D<@-Hx^X-+·d 'Q[={/{v:gPO]E6'y,.qc\J$ 41'c=#@_I\F,bI lZŨE[>|DLvzdR,LSWjxa3ǟgܘR2<FqJfrlNHɞBҴV L3/~1=Ā)P!" qUR$L*ΰHFIcy!:ұXh:δa W`C?>Gʕx`LGףw8Xujc;A=zѨ Suk 3nag E;b!ŜMYd*2TO[Rh +LU~/ꯋ}oKeRETQUKi)5 E,3k $}R @"b$nF/`V5d%XIvn0?09ɃP׭kbt\/bom}t-_o/ TO8>۞M?LI+۾9Cm/β2O:KOiӡݴuBF(^("2\t>|+EsŞjs"aRq:qT='3|)!W<. x<.[@O'fC"=[V؃o+R G[=/{vgg`_O]E6GY,.qc͒__ZJ$-45'cݒ-@_I\Z,bI lræ?63e!uy+`ו|%dI{lNHɞBRhPmE/0*dPDC9 ,H\FIcy!&%rI%T_U>)x tp=zWu9˷U T:SDa }بx)i'$65[P Tݶ?WJdF0U:P86ZЌ#9T]Qf؈0Y;ן4]L=\4솋匩& ? KÑVbYd*2RBԇR:YkѲI~}.͆> ;!UGvHqRmέ Rj.^U^󰪬-RG$@(I&XI'#q{?!T*3*xMY0Vo /䏀* kN TҮM̆E5_vOа|Wѭ6hj)鬈s %b+B?[x#eK8٘|UcGQuA0&ro(%a!]C6|&O0v܎LӖ{f8"g]ыSٞIF|7 Ko^ҤSBŽ%i1~*}4k~WShbBhSˍ)fK"`/X]uwY#sWx #ώ˛f=cSL q[5AWkҵ -#]a PZY/ :_3lg0އ؍YNqo;Z=g# JK0'cݶ&"7BܾW2FHMZ/,eiSSSj]fZx R.w0" @ ՙ9mJ4!h KV+Rȳ43V*D:ΙL_q6B? JV4EI,NrD^Y e$A.ds0.3ŷH \Ui7ZC4pYI M}ʞC J "f VU(%^j˭G)v>œxڅ>W"m,3|e"\+eϥ[˖Qsb,0l K9i@;[0s&3%7Y(z! 2S,DکBe7rUTy+"xgyk^CQX5.]|KX$A͖+$Ŀz3Z^^]/<;^|mU)X[iUVE[XUP" ROQa+4[إK[ E |e-o:gQzAW -@8(6[m>qJ |߱ | R$%~c uIÁ/ „ÎY8a?;LV:(ʺ>OazHJG|s --ʐ?Sk9 kkktOlOxXmO8_1>4e)Yq[V{ X8q8nvop=3ySkᅦI>tm/};ϞrK$zx87`(SKǹ۵v#)'3N;HC)0:@܈IN=gd }ED:Fr3G"xgD0yN#= NxmoH+臸Rk&ѝRL:N[q]?E *,qf_x5Tgfwgq'4 FXG$pBHO?;K3:^MЊA_>ktlW+ Мa1iG+Ƣ l60=cqkCG0Y`ne>(M0R]`Oć:>}t (G,LZn&nr{|Y|r\m7Y|<\ΊG`F6 :q4lHQ[5(Eu۶4p,<0 ӊaO-zu9HxSHDž޳,@\õp Ӏą_FH;L a={k]1eww#\aa\}^JDu|WU?3@,D%'s;&陞I4#W(g&sm0ԹWk#?cymX`E]pJi>O2mHi;+FK]z-JUb\)#oeUDob޾5S2byN qiLbSZ #5ՈuAkdB&P/U|jm7z9m@ڨ(6p\c`<R`Ku#K$y<»N8:E$=4⤇E}!fm>u`B4_iZIX~ 6 Z8xR;[ Ԏ5ָ' p?چ]0pdnRQ)$7}JϒixAIa~+źSwש8;GYe߲ "DfV* ]xWmoH_1|H Bt'b\q$UriIuOڻث^^U{gB I)a=;3;3~Ҍxbz}X cbryEU( ˮpdŒ,nP"-DAdElũt{{;ecK3.9M`'(;CS( f.2 I{$ܴ-ak0ǖCқ]Y6$\̀jgW+cx܄hbz}X #bfruAQ( ˮtpdlŒ,SlP"-DAdE{dItlǻs1 ၥ &W@bPHgxWmO8_1W>Ҕmѝ d[p@Y'nbƕPiJ{<3y->=M<2rw$'q'?:>cؿ _~#{S @)e]Բ`=Էn?[HãPIq7%seaH֏ͅmi=z>WOE:҈>0dԷUO"0|K/Lf9К}5UjáZ2lǶJpJMj~y63HLtmUأa'q)h2QvTPš21 r#!DLf*QC\"+\ w+*^-s%bu)JмZGEHl,1 eyP`:lSx-4)W 6N :;SUJnxy),ѿƦlm3* NBX-)QX"yd6h[/\~Yg11wwdiI֊GV$i-RNK!JU|&A J+/{nҹNERޜ< ,8?VDl;[Hlݘ0vpiZ 겊M ([J">[n6e#l _D5jNNBRt#Nߨ:{x2,LiMkJA=j2>T_F@;Fv)an5zvoV#VouʑU/; xPz!#q6]F+O9niHp= wC[>IHv=o_}bޅ}*|FM=1Ζ]B Q˯gpzfY g5_ߗ7׀`!I˺=5N)emvo-?[@ó4QIOq7%seާ#Ð#Fٵmi=Nz>Wo'"xp.r$>go1ЫE27D aZJ_8]MGWW9|Y??YkTd}2jɰ*U,96Ĕ"6\"*#G%ÎF,d7q6 #\Cae0 reGB00X9t~ SfPUqs2qlI[1L=`Q:*B e&I t{5)W Y FGY"JpTiwEnd X5vaӷGT}N\\øOkQX%bq}J=^n>;?_1|ϔGG\?W'3̥L2O?y rYA:zt&6#޵+ywW\<š=h*wqTo #BVclFڅN^H]v͝$HDGQv x݄Jggll %(FjWxP7L6IlڦoKa &ۀ?->v+tDņJ[HgZ泤[t,qUQt>P:z "Ǘn4:͎C bf4m}хb}'Qݪ^/ |P⵪:!#Q]Z+5Gj >NOO}dVm*|bJamUأaǎq%h28dkڑB .HŚK ad hèby YfPQy2qlIk1;HQ:*B e [Ṃ2eCk\O)viRQ\/S*û"Otf X5enQQp*Z ]~-]H{Facr7v•͟4|[qy{OfXKdIylEP7"4u7r]gd¬w*D,PȜ#IȿՓ9rPeOW!=RS@"d$PZkSk5-:5N~hВr?= iVs/T,߻V/[(Q\cؿssD/]~e5Yvt rOZqH-kZVÞH} Y< )cPH.C0<>-<Kw1kҶagI}>7OE*҈>g _ЧE:7D3aj/Up4..=Xsc~W9:TS%otzz#öJrldWWSĄsplb ! ;q+AE c(6 B)v$@Ьy%*=.L%6KaԱ%uḚsE Qy,eh(Kl916(L8BwrRl@h|%,נJ?/S/ƖƦt[E+2]QpP]s0c<0 TDڧoXnkU+͟5|Izww ܗfC+D7HX*9Y(d(IeE LDj6a~t/`K2l+7T#+Ө7B^ĭ$tn9FNmH]w͝DgÝSq PJP\h! TXb !m-B;06F`n5Ղ6%FP_wtYD {n᱃<)n5rhw&1b ӛrw͎2/C#%{|۪9+DHWkQT; A5OmnvВ?vRҬŻD_~#C[6m_T1n>@?/?IJ,k~3/,.R&ܓu~ulRcl6Ͱ'ߺd=(/eV OܦG%=ݔ̱F(N$!sz$Cһd~|Y\ږ3T>+#|3?.Ddo.Y.]l -zHh{f|7`JR G ۃ5kkѡ*x촏~_-Uc[ %&p5]OL)b>-j18{T21f!Cf@U T2TJDΑL=*Vpqa*n&Y; G/ǖԹúS%h^,$iPq<*s0]6ɽ+bV+e1(2O;,Og_c[myv|[I 'yr@rܕmDgVX>/7hW_/,t ?oۧx2Z$H*E#e+o MM!ܐ{P> fW\'"f wnBAUNB[NgbHT_H w ;K΀8-:<uYE6uavu-%um7kB٢܅N] ]cs'& B:ёpkC}*t7!:*B -;*! uShh<)4[稕mSeoKӾ,l'|lX#.6VB>;x2%,OLfI+ ^=*R.TG@7;Ff)`n5OrF􍞳'F*ouȑU/{ xP❪:!#Q]Z+O9nѩIpj=TC[>IHr=oc}bޅ}M\1~@?>IJ,v~2垴c82[jꭆ='Qery1=*1l0BBr2qX0$+U/miGv}o%޽zvsAE c(7 B)(;Bd húuy 7exPE2ulIk3-~Z0|آdHG.؂ sv|vk̬}b2Ol\IU꫒.HV!1 \7diD?)>d#hTZh5L_UAӫm^GJ(HUKWɵע6w2TjT}=`$TRҬ<1ω~$ cU$Urok ?[+]Qb30ij_ɥ*/Hwr4j؊ C5bIxWd}WʢÐ;:^B%.~uor&/ w&'rׁ[ !ѭ#Qc 3+k;Q \} ?Eө&@V,> T =PIK4><u)lL6fe,7TR'E7i7QM_q2U [wr,w9G)u!i-iK>LF|foߘwr]kE$K jQK_Lɶi=" X hGխ1c95n %'2e;yCK-K 6 iD06M 2Tc0chT]~2Q82('\,(v -kFmgL2SZބ=*v HQ{EoY8Dzj:#t̥#tNoG,{ :ڱte'mcm"2;V@%j|fI$@Q`-=e|a($GxqM wʕ-J]mu~S̏yʺ28y즆Z1` *; 0޴F5؂Iv6cPc2Ǟ6[~NR|ax@_av2M;tڭЛp,kh(ikP" %,7Nʾ"*a>qI|X3M?`7/#7 S54e%ZBud]]M{P2(63Mdo0璋2ci r Q$wE/). =8olu)el|(Qm 0 h`zx|f"RZZ/ٲ/Ӌ _c9Xk H9 CC1WfxY[o6~܇8@j%M e+ib!%ZJKI5C.6EqdwnB{&Qhx',G᨟ӟ/śɟ7dA/Sq.&_' ( Zr_;\qpysT< *m_ 5sUk`x.oYKIS4v/[.Ҧ4bhMS*<#rɋdo{jo􎚽m'DU/NӖ7duM-)VhV2Dc럳-ȖK(BYӊ֘|>AXAA>ڱ80 ]>\w?wxN0 0d4ˋZPГ"iդV,'xKqRh JDVzT> Zb-\/JVOgd Xj:+-# Zb,5O܍h @t (8bӍ|fuA EE7uKR>D`ɢ/B_%^=PԲtEHV2hXBʒŨ &0d *iȖWk^H͔"%Y(';٧x4 SdŁzO ɋtP.mn4}Oљ7LSI63:k zMk!N(0Hv],i!X:vJ۬~e)):mٹa}nJz#_JBH桟^QxAuAҴ6XK HErH̭`I-_3Im`W]ѣ^MlAAoS[w -A7RybC#JU( @ʖnHA6&o}v)w;Ux2L}Z FVw ir& le(ɕ:KЃa+a ,1&l #!j%|$V욟I40ye EM7OkzS[Ӗ䠠HL%Z>d'o7jͧH X1&nM+a!oA!bժXk!Ӕh*4+ІR4B)&͍X&V aigbȀ])NqBD4 nw;Ӷ{u&'DKI >sQ2 Ź[bmPlK4ЫdIv_W/euۡs.k7iJ\uޫ(dFzBV`WĿ.a"^<4/a΁ nS&_r\%5_/K(_SNQ)\x@'%H`,ͮ FcCŚ@%, R)xXC?O -{XF87|nJA{ ”B'yՙԬ);Bk}av.,X}ynD1~ [E- F܈=uza/ _ UQ~k1(O]'StacLݩEsAZTbԵ418|]u5xX}4ϵ@9%ŎףcŔ n^Rt#OhqKiV7uEN5Ooȱ0ܲblwӮ{ Df; OqNkKis#.D5 :>9#5l_/e:A۠3ɁC:̚,S'Pš hx6wg3"';\ZV7Ttstܻ̓baBojƜ@!]"|QM~_4Cʣe°t5IگwHzHbtO8GJ "ή0/A(凝>sBEFmSL;7 2=SUq֝ǻ"]P X 1XU|Wf|oCJy}juHj[ule)~ X25I|_GRjM$gG9(2;7`Sn^={bx1M {3}Œo3<. oba0$ O aEK#}dIؽ.>>~ _#)}t#I}3R[u$]wԻd?LՑ߶ .?b\ؙ= Q<}?m\nj\Gs]v'EiK&8RSeliR0I>1Ѩ>*EDŽӻPV/IYHϐl.>A*_/^@\ Btm3cx]<3z5vbBstji[YSA:Tb~R'lD,;)Qa:%*q*%]szlG= b tAƼ;bz$\̽PtySW6=wV>uNu:UXpDꨁ"r:Հu^ s_-5[9mğ;mĤ<7>L[Fo-9c4:{jY͍xW0x '(yF|O,}Y^%MсsЖ/ϥe’۸bvK{-UnpKMtcO`ӭխߗ_JgXaU5]Gml Y#0P<[h <#` WY@ҢtE>udW(*{͂Z!) 6:{$fb8/jF\Qn;0OЊGpxٯ~2qAsK#$ _y^) uc&O($>x #t`Z!ƕ6k0$FZ±D5a_nΕi8k:tp d\=baav =;Dj;}xhڍTjwQ }"+?IK>'x rdrP$ip%\W>WY ﴫSƦhߍͮ6^ɨ7y!Vv-,Q DksT`=޾Y:D\qURz.uNZi- ^f~ӐƵO6WAIi䫢T;цQ\B#yu.5uWaο}Xq%l~k_kG=ǿh%ޜ/&~3G9O?Vr /d8t/7ZK.)F#:+wJ_{]@)0؛5YgHr4v^9liekH|)bfxs$Gc@ JeSuX$FƜ$n V;~ujZ;޷{| />^f//gt@䮭e;}|rtip8^z=ukyw /s i rxis ߜ--2;.C^>,GM,"?""[>kMy6E[ 뒕~K%GGW]E|ՏGs|$r͉>7?%~::I$_K|ecx2W~b+BjM2H hYTxV]o8|ׯShZ$ 7N 4|>DKI@QvmqR(rv;~/ X0Us)&0D"S.GS>qy F_!N__ F+hBN/v\ꈐr,GT&eh1A]Eah7E M…EAK#BҮ{a5?1M͔lDz̹fv*AB# =~y^>ٖ ;~yW#G/#-rZIޣzg:=< ̒'NHF(p1=?ZV>|($x0|As\*e xYdAaވDcgт (1-`ѬFʑ6MPх N1%:O ZOz&KO8˲] ,yQADZؙפDvfug]s}W!Vb30:f \ɲ-N}+\o6N@j-URT_ҌQ7$Ej Jt(`ϷՍ'oTQ;u'kJ!73/B2e0M׬Ec蝷Nۡk۹iĩ $b7#fopZpa|@w֕ߟjC}}#vn-uN˜HXڨ".ڥ(z^ HyBaA5$gn\6E 1Չ BS} 5Kf"0[Ud DSb`QK%,g{ϥ}}c/G?yPwZ$Ow"o>ݕ:O^>,Ҋʨ˸K3;+|M3H?vvϣK*E7񋳳_,~gϞ˿/_~˳gjPst(FFGqtqfj*VƨÇ;GΛ"Yg$J, |E1p_4KrH4bJ<跬Yt\LPhIR*]9Hk@r>>2L w0%H(wvGFY+gTel*l_L.n&ǷWד CәJBT~-HԨZ6}|S[ FfUF|d̨Ъ7YfRazu~4/QW)I' I [^J, @͜t]*L9,RJiT{){(}^Knڗ;{Jk˸*Jk}ސjQ$[oBwu;M󴺽wZUgRn$5vئ腽L6 (`(KvU,A8CE\o4KgJP+?g`Xi ڜj\**{,u&T)N38&yЌ(pݡ9$` X+fuY¸*#"́h90ں-*h$X&>'8OV$تRw4Qwdc06kUSm(M ʆ[бfEjZdw`_ToEtoS-pN,5ɓ6`[b(x+`u0?j5@GB-*lctPKx uހ̷ysNr& gb W9camS*g g @ Xh: ;M#8y_2U"ʒEkJ$#e'fgm?P`(Hu=Юr6lJ7M lnSf盳zS<ʨCXMQ]h"b fFf1/fj&x;շbva`~93\hVdSA=84Rz]Ǻrdr<;Ə9דzn2<-5\Wcނk6f0!0M` b&KƏ+!Hr̸Q};(w5 swT2#<'9&a | ' •\N℔-DL``m1s3ɤx.$[?a@$]ܤK_ui<?UPdb]B)%bشC 3˄qZ?y,y\K.2eѧE݅9WƷ"bmPYX(T>8R QRÀ$,~| %} ZcO0t]Rܳ^3gh_šHe-+b86p$4XLh<y<b@]xǔV|1xkm70 `L_hѪ$TU/gʝZe]'U $*L:Mȇ%0#)r ^`oǒbguP k{[E4"~L5C q/$j=C<>ן\n,)SL[@.NRIȆ^25,4$]5Ջ3љZQo&Y]PESشj64G|Ct{h|Nৣt*"w:`Mv! ǤI1!P }G2="avd `\E=1D: VN|~o6r:oCпMkt_p}tU6ї @쉹 ]f:M"#q77`EK:.䣰Ԃَ[CqMkE+)u-LY. ^FdXjq?P9]LfU}ATw9Ma7G4 +n&i3XvIGZj#V\@ vkz&ۓˋ*:80~`娎,.hN/>[-:zvF"Scd"-y,}+M o Z~V-*L`Jcľ 飀7qx0.CV)i+ї 5C|^b1Y` $az!Y۽saN i)xP!2>Lip,.7A12sWE8E"4 J"M#O=Q<߄dRb+^쩉e$%JˆZ(`1r/gcjYӂo9%"s)Bj`9=w9E'xcLeì «`мq &TJE)T̊ LO%94(MmIuwAjrԖ #ѐFKfúͅv+b[wEx#ͫvlq.x쇊wl9'̠Ђ¡bDZij?o'ϰw!jj)V&<-963,E.Nnc<Iю ();ɬY t` Q/ztZдNV9 Ƙ) @ұ9sH+Iδ'ZshvbWs!?.>_]C|}y{6q.]A0uzױW k'~7%Q~_ߎU"";Z,2{e~~o`d77N'ǿ]^i󿹚1vt|a ._—di< "*b`7=~ 8[qYZD}E(Z*j| qqwƆ5wqbyMِZ̈M;]wKm^;󠥝 m-k5;y0Xĕ+G=|F >zEJҿnصi3Z^x4F}E]vTҒܝ6!,oc [5fMԛ!n=۠ ,ȱGfj*ڌKM fxN))i_g9:q{F" 7-@ ˖k y6EȲP+9=7=vN5cl~H;Bp>\;q;j5qS@w>X@CiM=e6thݡB{۱mcq[ɵ"˭ͅ:1`/[L=yVA[҅-co/ wbYVXwdw/e-mIF -f Ӄ;֊y量V@[o~/+,f'𰩘y/+n0(V54lrအݐ݄09[|2Lrb|M./tzjo=7&WWWO2!'_?ѯb +,u*W ^W>{Aî^/SUK9x\y`ܺ?=VۗpX:}Z4;k|9l6^NzpW>F钐~WA77"7 $x{?VooĂ:ȆRj c_mn%J2nmreƿ\. _+|ϏͲLtgPc_—ZCtN"NHMTP97:LY|SYڥLvƾ3MF< sF(7\*]]7&PQ_p6+ȹO.؜ : )dBq ]wi" Rn Ls ;@Mx H 5e!.Ͻu\k|Z/Dy}$ng0 {E HOOg;֌fՊz`?}v%Q4 0Q弄ݶ+5Uu=h{o},j+ za?=vpK%^ߏ1uT,'c?P( Im%0&B gqmqhq/dxw6hJmq$Xy6^2Wi G8]*z{fGg1oYMi++a o索tT`3Q0 7O ^6 @8" C^W8VߤZ.>DQpU+>\LϏo?'.]"Ө!ezepyS$khd뼎tyxW#'%xLMI-<^A\b6tKŸ%2~K1KČe??OW sk7LvZ$O@\Tlp iZVx][sܶ~ׯ*QN]GS4J"K$}Qq rSo7.$@pƗsRk$wto,'%MggEwvhN/On8ZT''?~47d]We:|Çsy)KsTPFG 'PUFF޿8xw=K*ͲI\!vVOOqsQD7'ˇڧF,)19eidW/h(> OFծ0c~ٻpBu&(jW7i3;ڎ*z#XbuFa՛6cEn{޽Ev"N䥽E4M~VIBro^#UfU<ǁ0]RF3J0IT+ :׵r@tm.u;`{="h5>d.Cc$ N-+pRwӬy׺H%Te5=XT=S :BXQ )QީE9[Tp*5wfG̊Reܰ҄UdA"z|6nQj7tiJ#; m ض(9ޭy=@e;LmP K#{-ȵ;6s)( Bӝ_1x+3yVr63KEzdЙ. 7Z87<ԍ<6!% ^$V 耭'r!7{l185 @ \CX-ˆYc]V-ۄt复1BVp> b@{lHu19d^)7dCoR/U2IPs2zU#kQ^곞ԶU#sϿ0_Zu|J0Ma ޭ;_ :Cr-{\L}| a-؍yCx`E00r(7OW'+:=>?x&tGaɔGh>ـF49Bqf{G6*WOgzyrJn_)g*pF|tu|y>0g7r}=Ka3Zx% FdD"f7bwEc DlF~ :\\%~ALGdc6r+f$N0!7eݸ4iē')KT$hX\/NNco@ ʬ͞0k)17bs5Ն,ˑE%җ. >w<$U9 qoCJ@ќgc7=Y S͊$"An1},'t>c$?Xe87Hn ޘK=],IVY5l.AʛA-/J~qgM#?^e<'$MJ-Um6I5]'-IjJ=M]2HIM7UK . YmMt^B˺P4i{E&mׄw@ل}}?2oߙ .m1uk+JAYGmq<Mb PO6\'Vd i`l&yɲI%$Ri~O) ]݀L,r0W-a3"WZP>|ƃ&s jFEH +,d>9Xx,,yMRJ,|f\H"#a9<.dEN1zUc9>VN/|:r|Ǵ("xrI_ߘiɘ:IFqFyqĆ}YKKZڐ|r12ۭ[6?}U>cqlլh1o)D'UyDXD,l6sM-eI5Mό;AzV)k.oʚKL)w!֓4A6hӋE-vl##oy;-V"\s.mȋi#C@=۪0\(꺪;gPʒ#QBT_[(t蠈Qf[ G.rsحVd'J(}.Y/vk%Dg,aWZ)1UdכIQkbȜ0CiZW5)K1e1}WrZs`)\5R 1&E-,7=1)ݦTHI°38h} I HIa-T1QDbt0 VxCN(Hìғ5{ΐmlDKs͏4U.f_BǺV\t]Gl[.asȳk Rيqy# O{ʀpCGM5M|L7Z*&`:Pm+v#V-lXf&0N|#PHOx(X"#x{“?-؝K삙b~)Y$GbYòP6 Z7f6TTIh6C:Lof&_Gx-F(`lkÒ*$Y+2 1Qn5\(nm#eQqR\c^~.yQaUV $Suꀱj!L0\`&o /[B/f[$8}DAc"`4EՊc92!*ڢK>.6"?0KQI@3kuv4t+s mt=H׹?BՖ^L-ݞ }ȓrG0QB?CV#>Ák]՝3q 2|ڵXOa 9BTkH-<LxiQ5T~{+Bzf"KO3au C؉Ww|VCzE4nVjfgPY\Vn~ yX B,{QT_F2ןoʫXFG&t}f|-U᧲<[Ix5Rmw'yԐv2;f;"̂XV鮹.%kHfBn٤4ix1EȤF؀oٵ$6d7b:-a ]͒1H`ڛ-X _D BkR{ڔzWE#y ]BVlK3NN2 [ĩ\=X<{o3;sk {[~3DKHoڥL 19XGaD ؏E,ۤa6 ۜ@["}N+I< (,k lRb@U-z Iewr$Y [HyƖ_?܁wIwAsF H)0dnki]Y}D~sb&.RM[~ȸR!ӈjSӀ*$eBo4FozjL3YУ;I!xRQ Q};CN"z^CZaPbT=W.$5{)5pEIsSơ~:uuTk]CTvȆkQjc u\Cc u FPS(sBeEQaKKc X(g>1]庻 @kŌll`O4@\r.;C@j~:rox|O{^y p5֟Q WSw:{cpv;eEM_z=}OTځjOA@M^}O 7,LW@L.*fǘY~ĜzpepqW3J<|jQi߳Hoۀͣv Nv`  ȤAomh2nbzB5nV/@ˁWІ=[*wIֻ%Sc8_ r1L*,hn ;ZeW.)vr>a8>cϔfU8ؕG;(ar Nn6- t C::[05@r YМ<=0 4;x!F#= ɘG@Ϲ#%zRX)"X*q'1й|&x>>A'2bʃ]C;-%A扛t*ϦWcO0A cAd>0Ba ODaP(PI﬽4rHEU4)0Ql. EJ&2bNtjXBm잼%_ g{6r$-dق*|'46V0}w$EVu >DU-@ST_C=v;?oLbiB:ӬgVa]h␰ m J-NrWwOƬ`GD喉F"Ad5>L4w DF.MoGd6+.1$FBh"qZLi_1]4ٙ88Є4^Xi1,<>x R1U枞ֵzL lWէG[] /DQ2~KfYnphb3H##Md ;CND3]uƅj2>i/zI4d80|$[_"2K$G\ɛ%Y.R Uu0)jAdm+˝}sB*]~H'4YctO8NKCu[% _*wI'7ߴ bF+-Օ-ٖ*4|9XcKra*,3U2D,E%)US@=Gy7{N$ijY5 %+D`4V~ME- ruw5更[#5lK۴ =cMKňi`dJBs(b 9I@t}uS~I];Ө'gX$NW$< b AN&|5X?e| 1v SWқ"ᩥ?OT1Y2nsIvX)ug!DJB"tZC'H_Ǐ Xze}1W)ޠ0t7LF؄)-r\lZgkJC.ndvAfW-&8^4h",&^KJWJkJNiz>A+u1& 3(M`*lcc +tP.CD JmPvmlsn  {~G ǵd1дʰ;2k2cyUvSL 66)]VcxXmO8_ `%hmѝJU[$` ڻOķN\%N Zq:/g<3bz 8Z(f"ND4ta72|1ߦMD7t|fY˚>N_oo@31WZݱqKZzyW^y\vx]YsH~ׯU?؎E{p˜PKb}ݧ(XEi&o։@(em̯#?~S;Z7yU=~y2\=޵~ٿ]~WdBϷ Of.o.v=׶v6ɺmof~uZի{VKM|ڼ-B/_ӼlHNiQDY>U@yD"IjWfo뼥MR yA7%OiUT( /G::Z$T\.BuKpW)_翊CS2Ꮢ.O?::IpfR,!?\=n1?g^!l;?Pe|-BrE:O$*IrB[Vߋj-bJ|Ś9Ypz~fUIu3B E4G,'赮O\㹔;x^B2+ƻ]0lXEY)|y:"1ܦۧIN eḑaa.o7m%.Ң-mɂ3/H Q hMT`ҍ mEsW,_?'R%\n%RSYNQN] Yycu$` QAP TVwP7~c5 􅺉mY>j |͡SG'%ȵ}hT"p,**@jM}0rr&'t24ݮ3%*ju_*eE*ӼS 4@7P/9hfio[҆WLM8X%)mo7 ʥ vSRéT'ĪSWy[YvqX;ێW*(%v8('sc`S5AjfI uUt՜ƊJFfӡ5s%]?oK^} '^CJ JŐPR!ЖER'rFƒ4uL\-i"8&&MX&D xFR8AGs?kɼaȣm^ф;fC1^7sDϷ33<(@sT]o/rj/0 s]r$(i Gª"+_ja5XjVW.ECV:B[vvv٧#:&baZJ^9JHp d'gO +7ٚbabCSs_d`Y&f: A[б @uG)_␊ljVu-2B JeiVLz%S.S]餤_6LBI.\H .ꏎ+Zb'CRWA<$z`^뷂x!6TUtq7&^g-w5ܟ(kgerIj.Fj*xO ޶b,g tY-8Y!HYk$k=w1DiH7[4?e&t&._B/ߝ cc ^?x[mo8_s?4\;ݦEh]6-S@K[Z2$*nn/(Hw F3Cr83YeG=)4ΧSD8Ols>Oӟ/W\~ke翾y}?],~}~X\}Bo@HcX\{.p*0c Kl-Zn N8XJ) [FBv,K>Ao"a2JpI3O=ȯqN%ZQjd}~[%.ztvsqvs 1p/~=|{r'ŋSi\(p ,G)Zb)z}%sE<zLh6O*JPS#5 %Q,u^V |3= mIghƹ`y70E LhU1RSϹђ%;$ɠߡ%ei8#mAGӨ u1Bb[ޕ8)jM gXZDIB] BܼX=|_NտHZ5*Ny2ZgAm$L aW04_ D1c>ŃX7`✃Nq+~lbqS|UxCidmTh[=z4Ҳ~i/>,t-MFrEpK !k\QV#16`ت9ƽR34KvU [fwwͫ!~ yD`z[>TM4H G=N"R i?ᚘK @(bj͑u(U`O"FGݠhYʄa+ZJ VB5a FN2( yL.0ԉ WxLpņȺ#13x%Y\jҘ I[2WC1[/p_tUu)np +K@1we25*11\<a/SNqLRWp>'f7Ǭެ3*H1]k=r4jPb2 T&"B9u{9,ִip LyqnEz;6dl\4.L5Qů"̍>VɉgcnF.$RZͭ o{3nMbx 4baX'2ݲ=hDFI;PHYQGKY{HӆU;  !]/('@tp_/x\ReLݥ-PߥіR%YN5vlQіPڨUPQm(iJHkv%O$t 5hCjqפڲA w2fR^%кQFJ'a^l>,lkk_z\x /3/x`tyxWn8}W:vD"ͥIӍ} (+I IY|MRqdrfxxp?~3R!/;QhyTvr5 >}uzyW+]wndy̝\$OﻎrݪCi|X]\M~JI?S (o+2^&瓌*֏g_? p?!K/xdA_xXO8~_ 4e)Yu[[ 88Jc7pq)h _ HԞfoy)w."<.7K@ۇW߆h>zh0,1Cͭ `q`~,چg3VAB04΂t*pS6hfбiYcښ_֟ "xE`Cz{M~}FMeR_ua+ CtC~Lļ B /!e8K,:ЈYHS2eH*PF$ ݰ-zˀ 8Y3qLցXOj12S`66%Y3P4snȢH(oHVWiXlŮJnXU oW ܱwtjZ֢-:Bzf }VfkUUN6Z[aU"R :ArQR:)"Yô%4yWzƋ/ڷ+ϼ ZO1bBxDN6+hlP5Mp*Z\$6 ETWs¦ ͷf " M 2 }Ґl2L?fLP &1T.7i ̆x}kĩr5Vt]r+5:zwnH1D&na3YJPx CWŦ`+ڶ@XGw7ہ"/BO;~qY+(@l$- oC?8 pH޴wDZȒg\mh h&:] \;ds-%0NynpR=ޢqP'2q\>G}Rv ÕsRH/Tp/k(…\hf` fxQ !@]#=R=0 O gt=߱@^C_GuxSKRacʠ]ŗ-Eh͚SdϚlTHٚu&FRLLk},;F{Jr]+}j! .,ٔdmW5SVSN*;_ϧ*TțNV O?%mX$"cl H% 6M @VcݜsT?Voii^dL*ohRcyR`s?sxok`ͦkU働RDCk[]^~;DSlV[f(-5uPkBK9;R+J}Q!PT٥ZyAMJx^gJRRNr1IrlF*i2>OeD[ؖEmRUW% `^ |_5ZdNѢ dHE̥qyGgEJV8^aBiR5J[^Z\Wn]+ !}D88OQUߺ|. :U'  TITibV+xXmo6_qS?$ilHdn4MRl"mqEElK@{9 q /L\$]v%<uL p[?W)\çK88N/=ԇ?>~G%y<9{t:mMO[BF9n85>-m1BAq|1qLZOx)Ɠ)ߚY7Og+aZ%;xZQo6~ׯ܇8@j%M .@nO-WYt)*QH2%S-;D}E|s; ,:o|rKu_nG9yunH>=={'r$˗"܃dEp#O>q{0^4&˻XR1,!9˒)V49CdB,f c}tj/_5Dy1NS#-!yE_ jecj(7\Fw%q8r})t\+rЦga<8蠊y,4^UtC`ya=<ЄU< kIt^`w9t A1Mb#uJ>86P$Mv\)w/5>[dlO DGrnje?~: z>b:&rēsh1|`gC y}/_ϙբqM׹_Nn핧WggەuWjY~띝z\˵*>UUbM#:4'}8f1' P>0c yMz S,ES}7W2 D0g2&iZhO/-{ᖩH-W]3Oz~^}0JfѢvC%% XT d!$+lƥ/2K&:'#Kkپ-)WO!5`Bj@[$0[X1B0$j6&w<+v%`5Q/w35;2cŧuH=J"Q&.0A.c[D+ƣµ)R,r(侼vtI -F(F9.:@,OS4FL9=UIȴZU _*8,4+Wf1Ǵt3'=l9R| P/rTrK6+G[u KE-6Ttbq':\2aLFȝÁ1#ɺA 񬫢+B[W\ Q%Ϋp9m7SԟfTBPn V_ '(xا%e+ VV{թɻQ%EV]װ㝮y{J"FFB w.XpLȻ}T}!q@z,*nX__*u5Mr.[x(麒"捽yubv\8{}gG8g **Rc(JxUn@}WLx!Zri#Oh{[cH;kJӪH̙gƋ{a)t&UҳN*Iسs}O=}7L_ B_:?@툱c}\j#c˚U.cYC6eiʪQV85zyn$x@7(1|۹e23yLI@-X wSHN]VVXnwGx>3 ʓ$":IbMeW]T{b=[VԄud慃Oيߌll4:%VoA4&e2e%pٿlT grṌ4 ԳIHY*LBa4`$`ɵTyYJ *|(< s%-sf<>r=eϊm\ K@*_ -멢`q HdxVmO0_q Z:J7K$nb͉ĥ ֤Jm{?ܤy^ ܎vgDܥw?P3zx!WCBF#b:&dN^ YVު<&ƠtLX5+lhw36'E8BKN9i(2-dґ`R>)]п_p~s̢*XkXd}h:[ PI!{vw [7o'ybҳRO[~mTIW%38NV G:ϷAHD Kj [ "d{lҥ FK Y`39uDOTƑC ߯dEXc"$󁻵NߥRbk5U,x-,ҷd˩8{ۨ "#WյfiZsR֛FauW? LdBf(i2*]Rڬ 9k^T3CyZ*j킝Zv1y4_PSQ ,G! c)Z3Y`UUzM?Gij"|s4bl̸['j"]-" cPfQa%"Eqrvή}c*@En{!&w6 J1u=mr#x U4l%;R}6)9zgE ;x4Eq LDr'ڭ){/].cH-o2b \\ eDxUn6}WL-qҋW"ul$z)DJbKIN;>4@ly̙ùPBiÕh\Em$?\|Ae鷻)4ǻ |6giem=jFe<Ѕu}c"j)fs4r+X=}̹\=?ss 1}g/#ߥVU-{+Nm5An _/c ѫX2s3Dxx!ȕPz |V[,X3A,_vA5ϛVԾL8yב-{Nn@v蓫$j]\ӄlZUp{>IL\OAR#!%[0lŀQn")l@YZIDPE qv:ut] "FAIy?mջ*ւij5`^%kxY w{P_1 PjbQeYS=g/.`Sh ØR3vxR<9 ݁\N:ߒ{y$w Ȳq|96n5G rp=fӪ!SAaGb䖟d~άNK OqЂA?otV7UnPlr}Ľ ]44``kbŋ%VFnKudj5il@ߞC Fߑ1KnT^&ڵam!y:aQ pmrl̽dbu x"s6N 3Cζٕj?tLSFK3~-fYؑ/m/fpon.K+|_)xxw{ ǧܻtݫxtrc8Rj~Ţ赅?O:JWif|Tc̦|/bDq3~_QEdm蹅e8;"O"]ՄOϡ;(vC y}/urR Ga:-{-; C*[x-%-*MCwwq34d cp[SXE1uK,&$B'bi`UEʐepݗh|,hO/l:hU[~:븎&OCq9\tJfj AB,OW*©EU\!T`ưs#"Aq+r mJᄄd"r`5v(Y,(Y$c < }^M3U:M&t׆řkYCKٔԛS䔄X~)KJ4D78"Y&]U֥I?*"\-'YHHb [Hhs횆xY׵߈ZZu*;DORC jWJtwMvWuzPU7v^q"Aֻ33/yTT6.dLŽGSn}g~! xZmo8 _>][ܡs=ֵ>;fŰ~ԋ_bKvlȇM2eggE$ (fgnE^ .?=oGwyIH=͎S8r9Zb~2)M>.9(?&8ДGw?"_<~K'O+*NqB[:,NC|a)8!U )]-o)̔'' c[J[Wr|O{]Rct3~|ᢏ!=̜qh>P9"pJ J拔IF! $ Zr(`i>)SiEI +KQpgb>_,U<S8'kevUe!뵱Uxh?w*7 `y[̜d6&J_4()UyM-l` 2O(%9*|0,h.x@~A%D#0<\v+,G_I߬6ֆQxw ]qe\$: H$ZT!͋mf0{xWko6_q|H ,];ؐ*<`q-aZ-bQTܢ%EKrT 6q=}dE:hu۝4A+Wӟ[kNٝP%_AeUg@ST9eT-]#`. 6V$JE"J*d|Ep V^{T4 !Vw:@ 4LJ ߳t8LpzJj#hKTKpn+R3 &1/>DxtWR_AT·-pBb jU HQM]? 3ΐ5 2ҭ,Q+ץqx:1= Ō<`)^26Vw:D:Je(!YYh ئrH}\Wz77ɨNY4ʪ ]cjթ6W լҴު0.bT }Tm2/}%V As{ ,o1ni+H_K$5b7[B\V/k=dGyaK2E¿Zox_<(;@}k74F |* "  Z$4ww ՗]8<κ{=|2=9'mϛfYC{=+FXVmf/#8=X[VTh$#${*\Si_gFCgDqawL2iCStb0I8)VVA/-yV-l%[u%[J\^7"8WD)^\w\T>E{qZ3$Q<$c e0V PQЀ 6`4 :H{!)A.93YGܪDRp7fiZMiqJA)Lػ?KYb_ Xe,ɥ ߗ}˱I7_ܣ OZs_d7#Pߪ;L$uru6BW=ل3svן/#X!0 r1@TJL HVbT.5cDet\-ݕn'L&[}a'{BM>!NљVHRO{ċ:i-05u6EJh)#|a f gF{8P&H~|nM륻W:)֒ڨH^m9L`wn^2)cXtău(&nDOkj_7'v[?eM^wUkV2@{W6zʽ:*025)$&%46֝` yEO/[ؙ}9q3ZW QGՔ.R#"bʭX8{Y/;!D[ZS-[t{ h[?Wֱ۰+V❘;s+VBm1*;lpڂ-;/ୡԷsM3~#)t$hOV[Pei^$Ӧ'L` ffi xXmOH_~ Hm t'긂=҃w{g )o/!mJ x^{=K#9l::a!(\cw.s{ _?^z4s݋ 7(@s)h(]ӞH`d UyxP2N])5lm[MZ2e܅IM̎mg+ʅ᝼\8^u׆˽YM+me)eݷ8K롚 @ã*>bOa"&h?[7a@΃eu sGrn kHy6MPoQZQhad1irhefsߟ@ ZZ"kH xVmoH_1|H"% Q+bBUj^Z{{ZCf8C/33v\ׅP>,VLd/xo_א+8>ݫ MFO "6Ap}{ X,EtLVKy0-f1Zg$L9e1HN8ZZ|+^k#x1T$ *9/,̳) ?<_DoVeT~NT'"CϡcEu+t"K<녣x/᧗9X_ݾx[I{t%}4^\ :9aP'fn7ߨ܇jA€Z.:0'ލb s"0)(0k5%:J ٵk4 #*4C{(=Sgh[>%ΚZqjH¶eMⅣ]19jy fZͫ?WQL]nR^ <|ZөȄN#26JɡnFPԋMe$E s cBwU\!gkvL>dmՇB*c=@5OB;勡}kg1ZLo+pF)سCuGD$ugS͵j7]3<SY`t6]:seѵ]$e-" p٦kUdu["EQVl>.Ú_tr_f& 2&bH'RӬj'q 9lze/j}ׯ6 zY_Opf""[Bia-n'=ƇfI88ݼ;=?Qlx*E߭Z$y̫Ʉ(BO}cfjtT_+ )~Xvž$m409]UJyp L z[*F+de?E9ff8c!6j+1A^ dM0|@Q1:`h9,̴*5*2f9U9n4$;Xf9EK|^")V9z)X[Y?FsVVS#w@mS2w@So.{aBxtbQJ󿘟CtOT/g_)zOs^ZV]`@LFs4Wr7 4+@A-%emfS(b Q~%[5X΁jN2snY=7̪3XX8[ov[6w quZT8E^doKգ5pija;}\rizdH,\NI+\]eY[ɂ'/bqݳ \$|9CU\XMcg dVMm[U_Xs*\R`w< |XY?'RnGs:ßER&:S~o1͗<6&)-36=LiBa|{16t9v-GrK%VYqnmr~2rt:o-뉧1`AOYxyS1uymEf+NUhiw h;;!mx߅X BCEX@И{ |'Tv/<= XZ@ ,d֣|?`ө_.jW$xu{`.\W+-%7( . 1vXyIv|xx=o"q@{!^8 p fBqQco1.J#QXY-7Α{ JV0UGM75R~ żWž)t;IiCЍ>$Aۆx۱!XS0mw;9:ߚj }x;WK#{@{W^B{ur2v.0\Fv@#e[ӭق!G1nQSfBDd*Qa%2ail{slr"Ҷ 3ZqY_P%,^( :c.'>r^QUTZfΧTS*CE>,w.dG]9YX]}$e >{'y^d}hJ$a4N+No,:Y-oݞ b421q~._x-8pX T1 X mM[uwO7ľ|c*޻l,.iW3;np'ޖsLdjm KVOw}p}Bi7[爳I$tսBbu\菃9{6i.qyEUH 1lf^ x\ms6_S?ĝq%InY׮$׻O$^(BCBQN-^77י"`w, >m WuNʋlp,/W]~w/?_P_BN}|5^]t%;Z)NxhhMt'RwoX/笙ML2=jl>[$12K59j6oG޳ ݣG[$UEvel)~K7Ig o9_oSRZh}~W_Փ'775w<;{ؚQӳ3j4JpfS )Ci>KW?\)َыkc>&l[Wv>zE]QxK D&ȫPR$3 𱝳x(MJ(˼Z%EqtdV~uRdY 0 szbSJ{D':Aw?MIW*YXp 8o/X_.a_z^t<*GnXxGm YxVoHb*5,VlŅWiKw]U^FQͯ-`fg8z-5p\mV*Z8;yA H?90sp<'tz]\ bh.:Mb6Ⱦy//O)QS7Q(htn|u5* Q Ĩ|qĪ O5ӯE&{D:+pzR)VX׃ڳ!6/&.u/3x{gv~j2fb}4Z~)XMNj=K<p5]C 1i.ќ#+ @SJU1 ,YGChZCpmn~#؉00@2ϤPwOߎG(A (BuJ>7"TJb"qjv1;IC[v]jg,)8Lƫ`]/;/vD9WovR0s6Pu];#O(iaVlL͡$à+h݆?V |vbb؀(0ڙB˜} Өk^ Ɔ]C-7"W,=p4ЇȚ?[MT9U.lDP#|ŗEB#LUcdz8jjCAֻ\hu؉Η8r^jm{v_ŚV7/?LPI{C۔aMF{Zj3 2D\?NXD3]An He%BkLW“H, X~##4GP"_(tcgϋk4(e\h''{+{{Vsƪxͼ7j.y) HAe .-ߨپxz*$| t^0T5gYSmuE>6~e`gM pBգç|$Y-гBo,ڟOQ!|$@{,y@h~^pN9)tpҰA{PQNUtnEoQU3e_[pM73p iVz=뭥QT(]ں#nns]f})0r{=Ķ22fmlK_bBaD6ް%ӭ@)1;0fZR헹r5F$%& -ب W qز/$Bx^DmW[)@o]9{c։7cN+2'עs,+V\s$m({ݑf$b&ErZDKC| qOgoU{od̙k) x|ֻ)zuYF%(y27u/1*+ BjEotúQFH*1G^`RiG=^,eV4b1Ulpożo sZ`I't$лiIm>O+%ư4m8g C/ ]aQ"aqu 4b_Z<Ԡق;Q*hJ)%$҂tDIӸKr"_5ZkܾaR_-n|p!>a~Mbɹ+|Nƫ p~h@mָ m&ƁHՖl)/f5 )fl]b$- "; WĠ\(Mj%>jl0!+ ҢZI%d; Bd,!ƖKA1M)9c>ιFY (Qu2ʲ㎐0Sc{lf- JްM ل5H)|F2JLAIo#TţE߂!ւ!) fծw5C( O $I 4tΨ=mѼX|8~XYV,*#2fBMJg7{5]pM 1]tǘ 舺i`L z=20R_nĶ \hnSlBY«aqȉe Zeb2|nMEzpg`9Ƽi[sF^Zr-w#z:hOƖ?S[k4qOTYZ: sPPʖMm6h5ڟ@riٹmKCm f/Q6txy{Fm|c~f{!]bc_*Z}L,Vuf`x]K(sq( E}- #fBnG7fˢ +\PD\E䈅?=wew Yi'z.qCSt :*qZo$Q,[FVN?kuj5&/X.:L[ yMH M`:53d^O!.!OY?d&F#Bb8B{b/v3)kFHtg!X; 1wƳ'۽ q"%~8^;p >a|qYΧMP>9,2aq4kYeD͕!J'_ "WJ25A\S ,z:ά'(K 5r4CT؂vΪ\D7Qҁc hMݕYrqְ *q":lͳel%}%@7 `Wް P(zI5x[`}e-A3e1jhj ^i/ݭǢBt-%ZIF?@V fTä0eTX@FEJJ)tx)|MJdGĪMҡhI a!w;ۅȺ΢低ѿpJcGǻV`8? WTk2[kʘ_hNb~gUCi,ˣ9A訂d(hE2ƻ:s!u IaI[ :;C[slð0_J}G۸Fp6,Z9x]T4L2Ք=}^!W*T}{Crpyri5rb8eYc~vFZ'׮qDɮ>{-䠺skH3G9]VYnX`6(9)F4~JC±l}Kᰪ.Au[G f]Dı+;^}m?ʙ\z?\Vd*Eqa}qc HÑ}ug`wI ٻ@쾷@ʺڹɪy~1 ڣ$]o☈OKUnqOL`boNxp#GYYdž 8/e3 ϡ!wixGu? l58EŪE^cN J,Э­ ɫx F'n" q*8qzhj?dlg|70 lFvA $e ~NbBC`H́ N(\&s !ZB!"0MnIJ'trL{v%c쵅FAsy3341 $tt+. g-};%=)y>i1* yo1e3^CKI`y(1l-URlq&#BSt!PW}YtkQ{GHŤx?|͉#h娨^9g! t"K,{mS*?x=ugm .T`HP%(EnY@# ָ۬9@e(BpXnZWT/W`(໙8P]׾p?L,!u#I5zڔdz=]MS)IZ[ռ FpS~x]^G CE {T100xW.+o`^O8%"xe.H8>7Wn4JFq鉞tbT-W 2ig1Q|k?Y!m6/+iHX9"­64JFh̑D*$ݑWr1;d6"yjǬ*vu"i/w3q`ķ+3X)hCr]w%6CO7V cY6kWV#JU3+u)QWpIv"j$1@Nvh!E> ő 9<FH'LdRNH=Ū1˘O;h a>~ ՅxYcR ǧ.Vu er<eyz!axH #.E2WQWc_XoNKw&?sGQd08 q'x=ěV-v3vy`BzXV *U@+Z[i&lŅؖf-s )Mp`Ta.habP!J=p*,^c"p.k'KG)-QXNEXR!Om'Tna[1L{ ;4ҴO3m]+Jٺ[ۻ2CX7S"sZk2 {U&RV7W .C 0w'3/&4lipvǦn? k"Xj(D(IJ-G+7\'{P4]cFed&XUޚYgXa9-q6S*C_ UMu,m׍d~kck3\pe(cܮA c\@a5}WXX{maܕ>?,I`e?UҍJg:âc1q\괃6qSzAkVyn9a%g 6|5̿MXkdTEg% E[=0f^f}gKW8˭.uppۂ|B*u !us{]j xX(8Rl[ZɦʗYs#J)u1]j08,Z%t7?h'Կ}6qdt)m9KB3[i@0Y$|[c)`'t¬>RO7[MfR:9ymg4par;T3g£ 9v`A<ᵸDzEPY!@4TXTʔV_1k=?Z ,%=ަFٝ2e*==wΈ3vތ0yx=+bN;Ȳ@ iM-azP|kq{q|VR={@.<ХZsKML%'Qo;7]n;5% >hգl{yo&W^ <$i\_* vKXحv%>@ρөd~878к K%kK'N9ˆ!M$ux[?sQ$x"i]cјخgWVS䪖R9FV|p7.BYlŘ똕(?Q% LiZ%qI&Aw2[yQe\LJ#`MW ƞ}ݹtNNF=d*Œcpn'\b+:T.hI7[N! ; j!9DVt$irF=B4ɼ<;50Zxңc+rQy b ^8fЏA\uFO8Ӑx%@?Onv,#?Cxk^lg!e'ֲ˞&eTJ]p8~#"6m\)~gilL#Z;%EZZn9\ t`Wi 51)YN8kJct8a&[$Շ.=Gz40-1#_= LP;׍8 Yeea6[7I%((͢sB_?-k #k `o~?W~LO].7T->,s\1!x[[s8~кIw&iٝԡLMsSf# "G $@8;-#}ߑ;2D8I G{Ch~2MrxXmO8_ Ғmѝ d+ 8n)ڻOI:'.Z4IMCA'Ribϛyƪk39}mDҐG4_ 9;[O_X7ctx_c׽^~ 0tݫC02;sr,sw(8:N$C|/&8I%#>3fqPVx\[s۸~ׯ@GrgIdxtDnP"$qCZ $dg!A|/mqQ&yv:8#8 ?kqow7z- ǟޞOo.B&E2#ǽKB/n7=bxa6OJf1PeG1x&rp} b4{y|~!o>/|/w˄Wt${ =uyMSh{|~Jy/jɛ7o^{g57<>~/IhM|/k?:;{~ꍆB9)xק}5S[o.xb)^Ad$k ,w``M~>[OtCp >ƎQRG$gMeeW c>C_UehyFeGI)rǚPјl>%Z6ZYh$/0.5.HKQ6byJ#JiGi#.ycf13 `bzl.mYNehKm\ fV f)NH5I&AJa49T96V>e1YilIF=cS3%okͽ(:72U5h+E;mUw}b[}sX3.*1W%x1k^|qhC,v3m2,9:kҩYF_C}vj5ZH2wo> /ߥwK(NƎp)]_MdZ֥̃%g ᝑ$hB`o_brxq,wnyroWkK~L&GG{{5;yrNS%wɐx.ą;v<6攃o0`x# ky(I]`S )ĬLM(L48nl{S&50̱?4> 4X$[$dF>t"yo6\:,Qx)%q)lz҂{>?lMX* 3SB;ސ v9#Q9 #tA@2=>Q@L M%4ӭzSѡ_]@>=  EGVRc|Mq , )CP1q,1$9ǑpH# :8 * ipV)nG5NkZ&6>F80Hh#-tb7]<+e sTLD(Fp̙@\X/=|r*)dHXZSb>DաGr+f!:%K0G$ݷ,*֒syPw ,xz*}=9tQnƾ<;3?b[5+U P覟ڡJ)I"G.jڕLU=dܷE2E`B EQ䀊{J#BEѡ-%Rw)Q6<^J"+5uFpCç a #|.nEM | dUeMjʐ!q5H_6VRZ0H4+zS+݊]i MUdt˃E ٿ*q;ʒ쥡*bRVP<]XVӊ>Zmɱ({H.c6{l*t.9}P&eߨ t49uO1Ppգa[EWxƤU؜۸Ď;6k4<.Aw]Vfȫ5SSr[wW M ]˕CrX^%f;)[[AIF;rЮ/d0cܩ1cf,/qLڔJMg&_6QPNY RpFX5AS0s(l@wV5@lz/lפ-*ge` 6)_DߊⱜJD P!)#!Bh-*YjmMەmt%[Ք58MkAFZUs 9|6"@䇈'ڸ,WbYԙM0g&fr^WfLӧX7U,VФfVW ԨkXurs{QJhҡ:cPV5VڦnUlVMѨLֻ&[0 g.(g^f} ;(5&uVursܢR|A SA7c4(i AZ[HNɭjr<RI,b1EeV?-Ş[[ p$qM*/&Wq\B:oܣM>3PCE^UkU.2~҃#ߥݑ#PMY KHI3˝†@[Be׹"%=hrr@QrKi 0&~\ׄ|]c>0WAnF~_"8h kk t"xZmo6_4 6I`M7} hɢ!v}w$EI֋%+PG|!Y8" Ey4onoHǻ9x8_OGs=&1Hy1|:R./g 6ϝr9A2&Q4_ ae\ga2x{ٚ ^ !{M<ȿ\wjvA9.1[o'B_iz?z|Og5<_ ޶yڼWNߣWWWǸ:8C)tusٗb'w:]pRorX n^Xl" gȀ;bwyD6ʮoȇȁ1QP+̓Laڞk'Q+*zvBB5xh{5"ICIy9F|tB\a5zf<ҠV IϨnjג8 '"BJMKCIv(Cr3+NfKV".ms}C<_;,/@5j:= OF%L';B2{JY0v#PYVKbKae++=?o?%Y\:J\.er>~uV+q"7}{1%nS{Ӎ3ULB0#\<L@D/ Hm&EDe4s"g,CΡEq .dˊ;:-ۅx/l,=,n_\ZHJ-RK <sKd5JGnx{=Hm s.D(ayo݊(ݍ)h Efj"AD/i ="H΋Qeuh788V<%qQ4UEa:A)g8t\KQt,4԰E 4F @NIaji sMOW5k5=Y͖V}m*4;\&Y &C6RTU+pʠU7Y2 td6^dvL˭:Κ~u_A}zAIc6}vjmݽh-p6hbe=SZ 9 ӟY^p ty2,  8oJB돿<#N&??Lo}{A|!'7^M&fy>rr{3G-pPcƑP62f3//ǿbS|:[.-k@gN_(f%{ ͗<}EYB?A.D,Wd׃3W%Zzɣ/..^{>˟t=6|y|Mg:1D+ͦ;zs2"sa6P3A8fʘd1KX*aJp"aftc.9+ƀ#G<9ɩK xst6+2Me4{'RH`xA W9;>2$ )BʂED "8qYl D挍E.$SdjT`Wj3?6rz?Q}yJv/ &P;Gu9_$/q%|ASR-$YӜ T[T)®(BHz>eJnQ,bY~}Gt ` RSK{܌QU0|f 0u xW[oF~8uJ Q+b!6ivcH3cޤs9|xTfL$mI("vٟ|ő1)cɯs?5%jA5dz7 D<@+^U q=?Bt=!;]Y!`S*!FB[V4Nz(Ĝ!-DVf:b.oǡ e3V#J5bbA1esj /KɒAE"~c"O(bDnqT{R&OWDo9o{ΊU^l78Kf54$87j c4pJY0k2ͧf^#G E'Q ONb%6M)naQʶ,\\CH4g+0.XM}Je(6<\ jOˏ*j8J֡} pmL !õŗ $9-ə91 /t ^Y`VjCD\&)n+@zCCfn6 PB1 y0K>@^z:[9ߎ&AlrITgS4I?gL Aq,/ :X98:BYodA Ar.Xq%kT[++sB%'9MYKt&?PTCT͡&[Qs]:_wb2$j =}|r]v.@+;:ț5õ&`?CzCm͙ N7olN+`g)l645w8k>Y6cȞ _W 5QdZ+4U"JFxhLM:|QXגώꢜ*5*tͫ*qCqL:`mx1nw]0sr^l=jʾ&%mrim+g;[[IY+ˮ)dfὨd>NPqHٻI=lf0j}ܬEͮx%pкB9`s nᡦ6Os#&jG|bm8Qa5~jNMáV=2HxZ G%RQj !?ֆj#1i95~s 92lVݧ?AEqgA]j*˪]6eZVH]bץ ?U (FO]rMM%*pDŽz[ꢶY.tUĚGv:eǵU(W"b% S>sjj^"[{7yN-9H6hw<`|OByVŶkg< n,xAFms4Ww!T%{oZ}d{ؿ]PN5+z.u:꫰zf"]& 'c6tPqt.(RVएr?BE 7H#2]5p=Z8+c@W sN;WJo%B0+Cwm/xvzv,6nvѪo<[2͵DG#PͅECºp8X% dÏs1|zZ5/h${3}JWaxe`u&pݎuWgH}ބ^cr Fն2-&'sGUХ^u}^p:soI]nC }䟄;ݓ}e@E&%3;dqJj%#u.IZ*P01)YӘGh.Dhڙ`0ax}2To[WO>rlP>l0Q3M]lE1m"e3v-CS?/.;b_yp=/e]v`!y] ;bl" [o 5?p{ %v &!7_%'3Af^W ta%,l])Q8ޑ/f2cG.b6[,şGYuA (@n y[[OA!N'jʦDYY͑A./+z2I>AiҫEV}f| I~-תO:< d'O/GfŚv+˓S99-Lx` C XH#M'BUƸs6Eȱ-5u8oۺ̛d4o= `<<Ԕ=Z;a΢`)3#^x!Wՠ)HCC :\{a=C;jbk~@c0"! 񣣬?}Ǎ6;@pV6(k|XFHMK.GD+e*vW.(cFf+x@|ehj!9ˆzRv~ u֎C))0IL-h#!bE=&T4e)z"ml_܅]YP(d#|>z|ZW_{kĞ;k_6# ̦;mO<1PqYK;i4穤|dÌ#e^ pGKuQ3a*Eg>j7iB@ϨGĆI#]0aj["qM?#pٚF*_3TxDZdv8pj8MňEW+4dzƓJnQF0bqq3rq*5T|>}bdT*>o)P܅D!'foE|8 T7SޣĤPG:uqg"\NB^jQFV͓3({K2Zv]DeV32BXj{b.sb!S.xnv7JL&oO}-/lr*HPEbU;$Kþ0{a(>΂U-*BbSJJܑ.%s\J؟~UqMEpES{Jɝ=Timʶ]T +\a i^Mqb2N<{yQK[TG̼ s.fKVsٰN#v}K^ՈO>GES"Q Up5'Ό]p2c@7Mf Vc^Exh! kHYdebC\-^QYohG%tpKJbvUW͟F jޢhBa &4LxCrоe#TFDݕKIp-A=O+\n58" 1qz7m~{bF1 khL;@bH{x)dD@J5QXG"9%Ǩ0Ɣ1#6ЍffbQ(DkɱEw1;melvdkIclkB@~@8Z578(<<P]#5ikㅤ(-o=H  .1Jqb)9.m)' &{0cHmX 2$<JK@S#q1PUק}yB="Mdk'ʢ#a0ܑH)dSJ9 J7:Fs\rJWH_sr!G^:`4fƉK*,XI9CBiK5DNK$8!D~\R;!%k~Sgf|U?t됕a1چd6 *bPBa,qB;HoGx!BwUބZ -jab \`/|Jğ#HqPUb$M)_VAɍ-%la:^6))R*ذD;ηhNa[AqeUC LE_C/.QTMuC``໰Y`a.4( m sB݌ИAIKIӭH:n8q#e|..tX9_j׽!q>@d _ iJĒYQQe,+GTY!e%ƓҲva-2cxL4C|,o';Z*G=MƮP }Q WсA-Ђ<{]51_×i-[&0`scsk[n K\RR6)Ww5Fc2;J7φ]ÅsT0I|oBbɞs]bZk!%2cl/fk\F0IJ,3K*qsK*Q%]=l@#8& y< ܒ,|k-⧄aEy%h6^Wk2#lȒ]!]Q][aSq 7yM<^.f 0l!&,ug>tt83zQ g9`/̕@d4=xPvy_IJd8+^"K /"eg5 //5wnx][sF~ׯ2;[)Gf\eLvR ؀ ZN߾7٩49}n}ξttd͢-t/_g'q-{oy}=ggϳo28@E|G}~q||}}=~6mQ3- Ne^rVϧҵנ޶EY'ߢf:|Un˟q*ﮪE\eO\]u۽5,fbdq/_\`=<$=DC^'OХc 1E4;ɳ__}u:${}Nf'9bSzvO7uUu]ʦ2 u9hg<=d|ӗ q7cnv3:\ ngu<=;W]nuQnߖ-]>mi rfPB\0>@@/twH'3%$!x^<Ayfo2l;. |GΆ̠\7N RMNȊL oM )$ֱDl•Hb c(1s$Q04cG"bPTTJ.}v5KzYu__ȏVK"k֏Tbr%꤮ &{%% ^m 6c =M`,p<3NE6cww0ɡek!,ZӮY\bGOWLmԠEIce')Q)㉤5<_8a,eX.EAq6ny?2LJ.̚:Jݦ:Q(jW 0sHG"cܐlB?j-EIq!&;d`IVJ(M_ώXZ_4(YQE&7EYV 4j.:~dJ3!rp ..5Z[ÄDG \eDuz؜;b77Z T V넰]@lo8(dLPsh*7Yu ]aZiՅ'7`w G7k-~gQa4í,U 9! d8ZE.3$WDKJ|]PMVKI7iJB/ _1RP\[&FA2zO7KTri6(NŻ2 Nz$}E@TNch0\oJ+i2Ǣ^ kXpUL*´^gZ_҃&9Ngt)_úLܢ*XDmp(q7/KNb.{Qtل_uٖc>z QF8ciZTMh %b5XUZN.j_*UK=44[ DD9vMSov V;51? \$\8yt.xZo8~h 8V^RG4nM;%Ѷ6#87C-$8`@[oi*"LȐ'ޘA/NƉu;p?/Ro?:#owߞ3ۥRcl6ᔋsTq[sW=@o4sgKFxP`hTF|1sh&6"ǣB$7PztE"[}0>8&^{?~lP)%o.O./?G˃+WhJd~DoNO߿éI9);X|:7?ܙCQhvGWW>Xp!O`QQ:-M5WO>|;yq#/Ύ͖%8aPlPBήߝZ>\]( AO摇_ NMsN4&)0yCt*7߹g1*4UаZFN"9'J-$J:>^s%Qc60۳yX|Q)mG_ 6?7vkRW{4W8hq8䜙*gW4FO_s9B*0,|f$~[vE=[y2)VLĠyJ2 "i>Gĝ=hHO걛dI Da`1T1 J"E5DA(}jJ!A;}j<ڋjAݰ`DzVI, sWF7`Ԅ| *Lnr#WL-yvzwơv`0n%_q1rtfqp-?U_hb+-jά$ #j ,;b%ɚcAْ  KG;O2#=\ԭx%Ɉ-?Ki5D9ԱҨeB&n 1lɲT\I53jg5<<*-.A Ic14s{?;? {6&Y22HTz Pp O< w1L(XD)cE I'fVf% [7Y[,!|.A"׉)b_UQYs"!k&ťd-͎Y)ej#,Z뙝B$'_^C]b4 Y@2s`F(s1GqPGx,?;.ULȩ lx щ:I3t#rU+\W Nt'+ {ՊBb@'4,inGk`jB,stiX-+po }Ҁm&zު>n^Q<ݨpylv@O Zl;rS[^jg[Z١w z$uZ{Z[ ghw@bC;D7Esp"h!`}t!`iLooIn]Z[[]X[6L]}ȝv;: g7gvVGs,v+J+l-%;S;͆Tssn{K5M7,bV2n^悭=vf@ jlRWDZ|-F@,| 4 X%v\4`a++2هWW|!7Hɜ|_lXo/}V6{j+-=X{EkAzu0ѫ5 {^-X yܾyk1**veƴbn.*cFub,5fC@XĚ %ЧdD?*9w] >VDVdfDdTub|*7Vy}lcW-Z:MnIp=pqj/_ z&kKTt+x;pɂ+ 0ϛC7`,1 }*%<6!""DMPLI&/ 'P-e:;}CwY^Y^YڎȽah߆n 88Dz AxRQo0~ч<H*q(IHMZT v#0Y>;ڤSdqNߙ\=~Z-$۵hOݧʉ%i;I[k Tj>c"˥NVH#eS3^wg=#gGH}9?krrm'L)Q:Ϳ[;7|Y 80(A;F_(a@*t:٘̽/q@Jk/ͣ5+d]iDqc2=C˾Rizml^ml.-;Z=6vMR5' Umh{~r=_>Ѐ0;@S/P\ %"5Q;+03s-xD{Yf8!S5'ԈrUb2N/t*p8fthS,ϗ9zO21:V53;L] ^3yu2 f_][5MӺ |=(#We]ÕIw$Yp(Sim)nɦº:N:c0289fJR8Wc7*`b)^ώT4,#߱Gt't2.6rb0yb[R& ~1бp) qCg`' (A1cyM؝ 8A B!S p0ҙoc/x=>EyXI&%H"3 IY,{-bi$zĞu6E<[]ʰU9_g3/Zs>U`$XJ ،KgY,Q*^2 C, r4 3PFtC̱x2tV81I.f E}˫q7Ź 1kjPipCZjD:,ˈr#G"󱺂A a~2 ^"@ >ƾD4v},0B<_m3#f+hh$ZZՙ"&h ݷ`o _ςxXs ~1[V7'!7h@a!BnZd[V 2C sk6=@qD덆b1Sy twzBk } W]E ԄɅR*"Y_Els(Iwqlq[=H܋0+;P#F0l/fYw;ŢZD6)0Hf%]Oѷc2Ie hQSTzL~j]ꦿb v2}R@+ ,ꋙIn`-͈o]_k C乻Na(ˑ6[@g$#Qnni΋YsT*񧎓$$su<=jS~ >?u>H&_䶽ǟje`1NeTCc1@BKHEaKSzhk0vd<f!xa Y#xFb<>qc_EB΋X?$-Aa' ; /Ǐ{ppĐ n/Qp$YGEM;PiRo4l Zt1 -,Cx7czL>ʖ&)z];&]4ی 7f3-,tT.HMynK\n>S¼XÑfL>< uWc}Gy$ Xħ|;"TL*{0FE01~@}۰1 RX{UrR(z/`zS d+؜?HXhCq+R'ZBiIh1ByE7漁U[HG!nNE;0d߲ãɓ];]K{''Ш;r *\QX$j k3XDd/>fic>=}+uV4ht` TЀU10!B9׈,ehye-_>aQ@кdMh,x їk_+80k_ V,=O m` l6Ϟ}%mvknDkyF"vkUڎU FF /Z0(h7Ua[9Ũ[fDk{uneewRhI'֧h3kCKK4$TQQ$ eʱr? ǂtO |$5x[sB(CFzNR,hHq 9=mjr77~{f ڿ}9sG?n^d SnpfJ-NrYupڽ{R<Dԧ)ρѰl8q׃%χ;/:b2L]]DG~i00w şR B>3vAxF>}ј/I__]=e6f{uyT^\vsCyc6^^s& ϹT+eb*rG}3>@β;"*7|H"(I=4>(ul`OliQ9̫I2&Yhbv uBzRCrdK`c~L8+=Zr!?ZW+VR{u0VDNՈ*#L/$)Rbwnߊ߂uK'CdYH,Uz |)O(K4b~aU UUyE^X _7)(B\Ϗ䶹VFfH@f`EYNUCۥ?Yz3D8NDE׭,c!p2byrg, pz0#Qm3=XTNqNdiUͥĒB)[x1+%~䢺Qf\,y6$d0΅XYzϟ[.t+\HJQ!>Q?#fW MDǹ1@4KvQA)t16vrS9d6Xgq*S㏃;lF+m yj8`W{8|莇YŲ&:9?2Y XhXusn^œW0ڷȉlWۗt,qB9 w%^/ 5JU ER" ҭde2%HYD@ê> @Ӯ,i4=1RQ}Eэ7z`u] p=\.71t|h^Yia1ccԬ2EZ7-ev@^?0-3478+햼ݙ6ޤg3D)ٽdJЄU>*Dn/ʗ84{0@n[58=uWxѤ/<Ǽ҄`4cM[7hLXeaC ZdƅVcRq Ilfh6 ΆCVsrBwnMn᷇:W/PDdcg߈=1ZF)w?ǰ5T\MiWkuFu{CtͿV.HkZ!5#9 NeWh@}0s>, YM2 +}ZxYo6S?$+YlHnlŚ.itdP"-sEC@}LJ,ʢZI;wG=2H? ',OJL~E^ϋo.T?\ r|;QD=oo*,O^Yj9bT2"X(RLE0шdap9,14 4 K"ǜo'_ӂW99{2A* )!#k47/P[Mзzѫ[ݛ+OO+O6])ppxzzx(Y^p*QB> /}>0Q`Qy]sRe<3 Qਤ9Aqy!XKoq2WXKQD 'S/5_d,]Ȧ,n^i"#uh DHJO+Qʎ,mj4?R&Hn7聍-M.{65SNv/xr& ww~ xVmOH_15R&MP+p\!G^?E޲ZU7kf@#%Yγ̬O?e+ܶrA&*z 'Osz b$称ط)cP }g?FL޼,b76JۺUü}?\*2zYDŵ|V??6~9@1q<ʓB:Ych)ZhXq6zQ^w'ۉlnj}(-ZZ-r|VϪ3g=M\>㖂v4b%iT&H5Dahh?O@@rHmN6cx2K8b(+HYPb$!G=ju$q&'=wo#ACU|!{3, Z2`A<񴆢lY $*H TR$3֗rwpF.XsRbl+7DhLB4R<$#!DyHVnРX8(! XZ`^rkoO&(:8;)Ӛ,6ۓ1`Lܣ_ _Y](&][kKE2ڙQW-;HyF+SUۧv/Z~d_h)0XDN>#>`&+%EKaxP“ve]E.SZ LKҲdV0W"_*A975Qݱ76\ MO|4Kb6IإiKv5i~XkջB] ρ uCdN+qSݗB*LE1KxݺM1F>/hx4 Հ, VJ,1VCb/ ,`E068ϷY;XL<1Xx!QA"Y0?*a:W~rʙ@4pV*fm)A A廙E%|+,'hI_|8$!]jPA=~ gOQ6v̋Vctȿa΁ T^,I,VYr=gڥd<Q 5_Rr[&H_BHܱ?,N1|SHr^hA7 BuwV,~yWa/8FB]J5#L`BR3Y7`6J[Fe,]"Wz^-EzAȓ-.1` ,XAICme5Z-iuGw*+U^7&EmGVU \DuHF-/~':QU\do]C?7͆j`<ÃGsW|s+r)klDRA4 rŎ^ssTGT v}%45[~/GF %K V-#L j^zP9qB:_pvUVt3QJ^*0WۢΥ~ͭHG`g+c=k߼ΙہE[kM1pݘ{9?#P}_bg45z%Hm 42KZVR",XuJWwd:: |kr;S;cw{I%Nigl & sZVU4:EFr\L&Ԙ9J}\k&l'68^hRP6fFR"$r S,Pz{KA (A ] ND]$ej0k!ޚ/6*]RH$PoEH4/o.)\0oY|7vY{FI[k@h3G+P+jgORŤh(#Ri`GnDȏdOwzTw%7~;qiElHhs#շjZJ_B:W7"-TgW O0(ٗߐ)Z2Trtad si4OMB5 {g?"R)6Ύ|\ <]v'x82~5x82mh6l B8lN/6C*,_=&-iMڶ \[V`i%iY ZQr5K)ܬQub)jeO8R}-hM,Qf&=@i!8P52oaC GS ?qW N 3x[mO#9_|2iX@bBV `{"'m{_Nvr*<&-DV>yt0׫|Hy~;ÌO{)ޮ=oۍw'c.VÝRy|>c_oa4,N֌")uAf j$/wς.FnH^nX99brA.y9Y`}LLK\=ku˓GGgg-O۶D4kπ3 tBۏC!ģ8nȡn0[oCFM $ W$aT, "ٳ$ADAL2Ebd/hH.%b+YOpB),t"g1jC㫐&{k/oV eTz)= 3J^ol TUDM]:3?Ū"5y0}T yX3—˭po*HJ␾0{RA0[௘$ɚp8 QfD7lޔ0Xݲ T|/ "sp^E4OĨD哼H$/ cce kHQfJ0KcT>:MkI''WBA?,|%m(X&ϳ5cMWL]uqAxpc)X/FK RLeǑ2Wp-bѪS DVfg⃊쥔am_1亀 9 DTt&<>kgy_^ sl )£JkHzwc(.mwғPlWiK^YK3D渤#B5-n\s=`uF]!ʼnr+d ׁ <8*D 0C3Ԡ6_Q`,i. K215nT(gob5l.i`CYU4%.?ג +Jt9Z$ga (e^;uלEڗsNbMBioXW; .(j'legȋZw]j]R}V`˻7`cH=k 6eV Zt[CG}{?B fP%xZmO8_~H[b)!- T6+ǡT7c;MiR@Hx& D䑊}=h<`n[?/I(AÇdgq]8NO#N KǹiRNOg6ugG].W 2v?Qk v`7s{! Kapݽbqp"zMhy-%r<-?C>"r.Tӽ2V 'a0˳y$)[•pPY n٩AW*9r] 'ߖ4=a>~*$M ii@X J`L%IB>mdHuă0H q4("ClJcЙN9j x p?bw`24R@BZbNHG,;6(Mt8ZT<90e:aR Z}FY AU%<>HBKi$ZFB!2aHuf)3Yp^"y|||xXS6~_JH7i-3 L'FXŶrLޕrlK ĒwW~X??G!zIx7VD4i,IxW[OF~85R (-PB}BX1̌8 [ 94'& .{\`Y$([ ~8l$ o~:}rxsP+#7[:xSmo0_q)DedіFƔFU!UE:$9lvX ur,c%2:?:ag z}Jfwsq[&Fgt^jL5m[J't>,~}ԸˆfcK%2*.HXm)q'D_%(j?&}/Xgc?~5>G/_.?:CGw#owW_@"a8 0ּcdg-݊TX4%>,!u(Z֘=Gd6$^@m3T,n r8Mxy=SI,P[~[QDbU9q3 ȷrB?j."CҹVa'iTSKµBE'UZGuҕ*& rqoR[uͺBWT/zx`1 $O6sCƙ+Yߪ1=zQ Uof5:BGZ>@"]+N9x3JJ"ycbVֲ[tSZv$gy==Ip/-a ӥtt#gx b_|(IUB[# Gء:KkrcQ' 9buw6Ծ,ӞIFH跌zJgOl m¦05y羐$t7s'R},>*'w6^cj)0ZWD|8uodeF`_u.M/Ŀ6o.̠:aDN7 o7*V3IPGxM~=q}B۟_!!gL=)CEվ(<&d^Þ1F>j/mV^Ʀhi%FxJ|Ի͖)-Y(=bP3|rKʣu;1Ҍʘg oyaOC y A'gIi#^~aot1]\g'yy~9US''GGJpR3ZtU"қlhgi! ,sƪf4V){ƺs*"8f*My5lv9 PhlO2.p(.f+0HmS; rhMɇXsζ ֪fV펗0])7/0@ {S fPY9Nϲ.=.a H3|3Cu50<>#w΍w`OЇA5]ӥ+s]]ҋ.;M-Ш-F|SwqUk H& *kvat;LF1cQ[~ΔQ=UF]ȄmNs<;-Ͽk_j2ʢpW[X7:'5[Z>[Wb. v?%ܘM I:eÔJg{RQᓵsUQoԪ0jj/jAƙ: -,t0dF0ٗg-5P k_qzvAz*Hmn *m[}GߔY^8+HYck**]$2DD!ZR"]͐Q7+Hͬϔ ^.橭%

    +aS8Z~6j{9G,`=`aj3&f`&<>f߂B1e=/i6eGxܮ&@M}WnowpȰђÈEaNBH/NA>fܞ*訩)(s^Pf~~tu}aMC'0Xl@PaĎ0 ;i8P穁I?4`CeE⊜Sf)ݫ!oX`j66y|ON\3P U`ed@KLkFݶVR3['-[n̴轑"D7/zWYCuU .9۟1aYiHmI1mM!zdEN虊W@û>o -ZLBMk[tѣT-`._.T\D?B\;)$4HFf8-TQgKrh"-+%qoetɯ#LrtJ`IȯΊ};<'͗{p$ 0@FR2D9+!)ʚK5%?'`B؁J-,F0Uy2 5iY-qwb#!8ndaJ |FFNvVU;򀷁uI2~S-1>j9[O`G>o|SOSޘ C[̠w`ԓb$/k[0媚˛a1DU GO$6P/Ɩ\D6 0oGDmvb)3OH|T,TpEk)biтY0MV@T˞l35+~b⍞9 j;ūPb+;( ФTB8G282mlc^  S1M6Zel9"!$\">X\pF{g3񢓽 fEpܸbl!m.j8$5j$XNWPǥR{=C)'Kja$,xXn|O;a(JRlKK,bDU|yz /}^)Ijr j~:!C)0 ضbl-UocʧtD-(ݦבIs ܜiwBgxXλ8- F( r_^_jP~ު\'0꺆y{{ &"SձX{1'}.Vj7I}A-y*fC"8ُfb8b[b;M* Df Cg숨%9zikEzZIڽ$F9u*e< $&Gmܒ &iE?7]{X^H&Y8z+%.T~z#)5~ bDd}#L_a򙈕>KBFQo%_¨z[z*S%x~§kˊhd$bkyP/!ɖgoѲ{AJ`ԎRscIp R15fvX'zLBP cwU$ecWe];=~XDzUvඨCw'JD=+9f;Sop\v8>vc̨(;4bi$-†iQ? Kk#)^/aŲx;avݕ My|N޹hhŝڣhIz7Ӕ+m>v:{X  W4%a ;;Mx5O+b~^(0_K4z6b˄Ժ) 1|ԅ ćacŵֵңWѣySiUJ7?+La$f )2,l /b~A=fܻi^gxsZ1 %W,BԌх0|:kev7?LI© 71׿C5 痁c"= O3ՙJĘ\NyMŇ_H~rGg%{d" s>\7[د[o XGe4,Dj[9o$2Ϻ Iz4Ws.sz1:+,vD.Hެ7]/ֺmb phzEꞆu {>MM!>cohZ9Mhw[Hw`j iH_&PurBAZ?#&ܫXMQvP iށԨۙ1߉'hV(;)JBjIGI <YAi0tF̊~Ѯwζ̒]2;ۡRdjO̐+֯tkԿy1j * +gt2T9"ԝ ;GI) Nᑧ=fBq=8__ !1 /1=EUGyt5$td BT+v*eGD/XZ-j_wx -I% ڇ^{ܓ`͌-س1Sm?%r7jUM|0z)o *5-|OjH&Xbj`@E>[ ,4) 0a`xwYQCK~kk˜3 GdRE5TMr@=\+ӉVN!&sԲ7TPA=5Ēsj%55r [}<ÅVmt|ʫpsz n0V9zTl*#eMmIBLѺAlA&0Ёj)kj!E /\![L5BKf<,+&AܚbFt"n=VPSjVA5s ZP#]{ W̐d+G!YGlK9VG+9s2%An|E&^vlf=? Z8 n/wV0|B(T" a ) a-: `B˂nrL}=u\&mHx1 ׺qbGJBvl/{"t^Tz2t{+b)t}:Fia:~⺱sdxWda5JNE0&lCj[ kb>TѫG`^٤nCvm/# A9Y mjZ(C+EzC'Mz DAL*u 'N-WDu >u* 'ctLt O ig(E-~db[:R2H;E Gi%QA*,=.Xa0ca/=ИdL:F$f iZMyzzNL=szz9=zxipKZhPvL91#*dP3Bصz"ˆj7ƮTjt9RiHDQ%BCE:A{h]ooX']gߞk Gu06hGtX wr$[||,y3zh k^_3Q3N L/$V5Zc7ȒwZD{h6&ɇIf+qܛof%&QbACZ!ȉ֩EčD;Q=T 9<[[<zEC Z#}zV=ry?HVZHNb݂5QOGG>QE71O 3H S$vRhQ5j JU&R>25K~joДhjAf*ga̻YTT! N1~Fw\@Uzap6+yN2)#0A@TrD#^ \J] (c3Wp=8٤3Ro'xp&|UJWHa0ߊqsl/#7%m,dd!;J;uXNc*]4͚5 7*G[FHQQ^dI!ymɜ{x!fNPfԚ`>b XI^=CptCS:]׬ZҎtڷ]IYIZ.T@߷]ϻz@^+Tg-1+LE=ګo]3٦; ^K8jzjXkb~ae3b"k8'^]t&Afl)$k‡EkСKyZ%wv;LrT$fM'+Pp˱ʓwa3ZM'w =Ԭn(-5v*a!{d'~(Q>ИNbX/),FKK! Qb@}^;>28FL'˰aUIh7ŸuQ}D0:'3(*O|pJ 9*F@+URG#9bhͻ!DD&$hAG &4f&y*M TͶDz5.yХ {Dž$e~'1%{C?{X* g;he&i>e';a;"UsܦP3bӓFS#F`gTPJ M؍q,vH|q@-*^5ֲ8X&B1YU7dtr9Su }基flGT?t`c)##Ğ0*L$(R $egPAZ,].RM}F@$y-29&?Pų{?I JH!Z>>&0TUrBF q"#h4;wp;[uyْrk#LBWimbn0z6U޸HJ5He8ߑ5nDk\/e ( ]VY#kVd*CqhblSuQD"fy'ѐ7H;wnuTe$9bT%a<7Rdg4bYPGd3QwbK?zTl=FDSfr '=!ISs 'h} CgNl݄[Xs_mƽbF$y2rd*nSDS;Q>hzjh(oXY'wMʠSirM |b>}| 4>$yUY72YLf%_iڬUz>`m|lr LFJ-_ͬiND!nE򔯃t0/iFWy3v7Tݒ8iGS/a 'sn! ч1e#ўLXP\\7DK&EQC,Exk^`&PI#GԿݨuM!@aONrR@trjnB4߮ `S@ M= LTFKv]FI˯^7Gd/@EZ<ֈSn 9tGS/&z @Xx ު@i/FlBz3YdNC9WecHث'2yC\'g䆒K LI1'yz9tU;|wL(+ʞ\ c֯MoEILpLpȭ2VI0UjbVUXYUXVi>F (OJb6D.ɂI85?<E,Ig/C8z]s\$`ЫEm}-'u`yݬs O)xXJڨq"hگH&^B,Wڰ豨,YʠU[#+U6ŷjb5AkAf0 S0~i2'4xO`37b<_ɻz/hK] ZVjK;2Ȼ`I@ @۔ U쿭B|{W5zn] rs5{Ə+#N`3?7Jnc5ZFՖg+"FHalƦ5?ܰw6of tn=XCy/̮K^v=mM+2FtWl#7 m=Ib11F"<="gE"DUA}[!aA@oՃM#yNY,P4K*<xӆ%9E+urUGf C/@21$ANtPPI7yWUW^0OaR<;5%vě!_iקtE`*D z1LYa[2`f,Dm,lh6IƮZW5\٢3f'ݻ鄤mmz"˚ o0"K??y?^zvew SS)V xVas8_|H2XP&q2SH!m#X,N{W ^>=}‚\mz xXdwѹЅDc_zpzA-!a}?V"҄ti슐r-[T2L)+//r[:>L g1hSN9'-RϽ`#C>)?o(g~B7QrWDh~mS&"B|ˋb5TWX{t ?V '}ww ?љÙ"}l!MI\^6fI]5]>A޸Z\u fDhj:::}Sb:KgX 3!7,=yf@[C*CBQpy`-3 -Cc:Gmcd,_cUJ?N&t]ij| c37r,֞pVw!^"ICCҔ[QTp7;5[m6B޶7nnx>Egkv]u ?ΆS1qGKPA/ǹ6%ءL|Ϋb,|#UbH iVz az3wh:' 1 xK4q{D&xYs~R8h:JbtJm9aP_|6#C/=@wy:hO@aI"em$DRYsaJU}.^.V$7K6)(yq Bޙ@/Hȧ.rEIFs6B% MZXP-P< `P־F< о+K (I֌Iw#LYׅ\ww:G1'QjM 9.S(WcEzSXDE9wjSª'$tCųuDzq`l4[h#QQ LKj JmMPᐮe|w{ ({r%8IN(`QHd>0 cWɡ}@5@CR.P^8ڌ-X@4hr=֥*ؐPX*SRρ9#;ˠ >CʘE k҅/3Jpk,@V1U,H89ʆ|ޖl%] {8QL|>c$S§.ET@uGP 8+ڙUuEV!\FeQ% \FH&j֨T^0,%0sU5x(ͦKd=?bi´"5Jx(9uG%k]A٣,k+-l/w6Eb1&;:dl$Ʈ6*(3rw@@[i *-%k_k.ԙ%^W-3ojfdnPtZn?ZQT^R: O xrb=qnj2`Z ^ kA#Mj 1k4F2f,ʬ\y&LkkLIլ:=הCP|@TdQ͓QO;vflcoKhƳn;6Dm}}CWu3>{}zOy^) Є/ d!)J*fuY8fH[7ᚹ+xHgp3T.ȴ_ȰjbBu/vQAz ڂk<qz@h~Oq7/ zhOȃC6gQgv){lrLI5'$@ބpNif.7&:׆6q"ֳߛ Lem4قD K&QVZNV0k(nj =c܂WhX}Ŧkɴ"kz\~ j xY[O8~ϯ40 A]$A\ժmMv(hۉsi 6}.>|/u?>t'4=w;6iH#LLd,?NQ,` 9o{c9=Ar{y@qN? A,qp7l^;Rˮq%3D4kscG"H4$!`>'>nj.9>$Q&s=rx _`?ֹf$=@;xv{CPvd?X_-+E_VmΎFggW+~ȽGG)rΎ\'Q\}:<=]D?x˄쮛i ϺGGMI id{4̷IfS?s,bq502o^4ňNWM B:K?W@fCSnfL cijf'TZ'&z."AgT^=> xVmo6_qs>$ilHdwb8b ڢ,()r2wusLJP ?,B֩n/f2żӪLrkc?{H n{px?(13AppƔA9x[Yo8~IJHit 4ݠMx tжdHt;v/.m &' j(dн鴌,[pw/Q0ڑwzayC9x -3 iT`JJCƊyʈ zR@IB!;X r2L^\<V>2G]\]e+bk骶@z}e5ؽp?eS˯QQh'Oϣ gq77gީީq4OHOo&bxAY\պl\}y8qȯC=.KO:D$qV0,c԰`$cn ;糔B~^ vn-+5 arM 6kN7Cnf͂)"62lcCX-̡jFG c(IAj@+e}D,?F`5Ni,NĤQXйXmℌTʼn%š-~/ Ү_-D!Uti-(:5V> 5@[IT/tB&I'rmĭ_*wy$;K}9I15{VB2`zfۢFoeTH č]ڨcgJ>eRQ (]%x9v!YˬJ@&P@M|7JIEM,y\7ȖDX2! } &2FnFyjZ#~Kyt'Qa<:6Rl!CNrv??ZP$K@&^hytj_pOׁ7RXӿNɛlt*,)(DuaUf/.[0ݸ{ʦd)(CS?P #`RϰV~Nh'Ș0Idʣ`+"D"AT0 |SsEDKO@>p :lIy顽af{Qҫ*M: 9Lza.R0t̸OLsgeb{汗SgT=˄3%@ u)/n2_$XV$S*'qtotT À\&ju2B_DU=JGsokZ25ϜiniQ%mbBu N QFdk YL px ˘ VeE- YB,D9B?$2P0̙dIF*ӪYjxp+GNL}ՅrJ6!w ŭyȽ"Ef-%h? x**kSg.h;5~<83ʫqxT=Ijy}mºXNua$eʫ= ?4-a6do4xdcIvDfWe\rp{mFr=lN(ꍉ3 ԶP#GRqX8~_%X1d3<>Ugk'kGSVp|A}\xkZEB\3>96)$=4o$J4@ԪWi]pX/$ܢFA^J5kUyW'm%aGia Ζ=*yu@gX1;b[df;DG1sR('-Іmvgԃel.9 qD 8Ic;}!Dޒ|qeDi/|.k:Ɍd> FA'םOeK^^^\&;G?roW=pӑh|_aWo-`ݧ+Kݷ(cCN?;#F(-d =03eEq&v4 ] '9P㨄qN*A& thZC,_ ҠcSr;0<H,16il!Ȃ~s)Z:G^ vCh)ƇPi26/Ѐ`F_oȡ9ɵc'/=f4t5>N2!='=7Y(EtΘ ٝlѓEY&i64"Y/1tP 0I&33 kJDW#mntA09۵|_b:w|sVV+=Sz߹VqW]5`y0$X/ aC+nsjd[2(WPӵE$]|skd"] D8ĂcK "nBc(D?aLJ *@L0w{?~8Ɋ NSt:ũY9"ŏDr`H_;g(KJC {Va2tf s0p7eErٮmmS`\Cke2]l/Z}lƯP0P=. _ ',էy$0FC]j2'Ye29r*" zZ% GemZ7ڸ$c)4GD)ٓ`<RLf/!ӟVe+6$w7E|y7ρdCƌNWLu ѲBW5M57_*"dh9W@ BAҬ 7Ҧz+8*FCw#V'x.twQOS.JH +oH"H%^k@#8Ru5TV[g!MfjUG!p$JHII5y^C(g\P4AMrk A [®$ڼt*eUgm]YP6)ި2Vj*eѶV6l)CV?%k&VjVVPr\˦$]-IcHeaRi`ќ}JrWA[ &t+y㌐ORtKvϯ y('jIƀaQu:g>NG1HX9mHQӔ?T4 XnO_xOc~,H'?G9P L־iѓpYiM%m4{L>;.4VT[:^x/0P/V7&P篴/pJg%֋RCĂ4a,:1eRSsn%ҸS4[<8E,_ps,nN +Q%c% ,`;hLS¾5G~REE'=QrZ7 JJ3 jax]oFbO`pIpE*H8 عp0(r%B<-of$Ki^&Ԓ;;ywТtxhHhfQ.Nj/g?kO/߽}E??y5]x*_8-*>ގnb18C*_ BAxYO8>$h` ҌHSCUmMv(h}>r6,b-mb;~>&3Nhڳ6iH#Nzv&{?=SxG=8w_[H(cub!f'3ϻ.ey(Rɂ'4& <b0 0hJ,QX4j/`X Fμ4ĈkЂrH')ls`Q$i- R! $bx65s4I|X>`4lN4GW Rti9zE^EIɘ?3eц2 ,?/lFoqEgXscO\ads2K_clTL䛧/O~,'=zɧ}D~/={o &cd,E|x!y{/qwx`0ɧbS-Cd'tS|j\͂F7a2+F%Ʒ#Wu̦/?gSrlu⧏WϮq^șw$fMr= eeYs'\/hһf1o|U\ / :?~0N%J:˞ep= IjӰ5bDGɮ3#64炕T^p| q&˫|\6=.K7énx', ۹7 (7()$~YKe\nNŅEU0KvHD+Z2.y?vTyR5]t@5bBƤiĸp~HY Ҹ\upP]ҠύamHUh2u:&4()ClB%M$nwk+B rmWM[9P֝K0T5u*bz$[*#mAL,Q ;tod|Fװ ΨuXeEr*wd[T͓bjɱ`)sԌIͦǓxʅ }z4%(LX4EE+ET>1@3@DCW2Sf*;JFC7A;7cN[kgHCgcEbcՌK~0zqZ-A~b E #s?\]]&›Q]5}w:wk cl:vS7 б/9X\y"(xw&,[:( 88-"ιiࠄ)r-:ca/D C"6*i X3&ȭ7|r7෈FnAH/5/5RߡeAe6:ށNuds_֋@bF;^uy$&CS(:cYsZ|iw.'g޸wʺ!d.t ffBMXs, {g:,#@76 l{ nU/7ۛO:A"A]ɝAD<3$hԎil4-i71̦NPC F؅ aRmDfW [&Vy[! 3iC)m4JbB9Wy]w?OSou 2*ch;?/$5=@lwvsQHuϝ"FVt>!|)4ZvuLt/A,42O.xM0~zHZCp6:`>@ 햗Дhؼ~㼂)*>} B|| a.K/e0 iW"2@%JN 7.6d#xjS%bOv=)K5~vzkYֳoU5S\bN֊5X['ԩ91j@ed!9e6ƽW`b}_#2 @\ե[o0I+u;^wX V*>_ЄTF&!5:%Y}d[O}Y)f 1q":EՎ>/13ꍊ:&}?vԤkդoD/5q_c_* mP ci&_IDȡ?0(5/E1[, `4Yspϋ|XB8A9C1e=i!jrWި&m څ 0p",uPrSnrҨ^}ka ~~[b?_!Wؿc$ 1׻Nx w`vVE_5/^'+,*LWл㹎uɆƚn2>JbMT)bR'$ck/H&l#%x 3 CW6+V,0C.NԪP~sis) I}FvߔN㍾m/sx1wx2!^;"~d5oXp3MsjLǙYi:,+m6mAjOub`|Ȅ+Ӏlgr3jv̌4dxZRό=>)9Kջפd[WWD=@b似א0_䋘_5/z|_ {RBT? L6FT]vpI]ao [Fx_΅q/>9a06}x`oq!C_wUlLyip\r%8oQ5oX4=l;K;#y,H8 ƔB,4T3[vz:JQBi Pe{$9Z{F# VC9b&dL?i~w\L,6[gn޳w@|Pm3h IݏC*(cU)T\|ϙ'r:so]^?^ ˼Gh0OVlmL~Nɿ Q *sσx/ PAAD-pJV6G9:S1ܶ]Xnʑ,;#eI PG o͢N:TT3x`5D-Zz7^;|A )4ǼS٭ByGj;Ui?-5m}$5o-ٰeP`5{bЕ?fc@Yo%Bk Y}f@b Y!eT╄:<o`,S29|q"3γAƑ*АsxTbBIX)g!/th) !cU<"_,Jjk:xl$0eM0+&`6pτ@2[`/OV5{f(ShPupKf?=?,!υ%Xa) b\[=Rk(a  4σM c-+ i<[ YB\X b*HW7{b\1setXYC3`~3İ(kC}x],QPT&.IEqv_v`uT*nDVȲA'HqM3-dglRYEYY!Z-j6JKuǚgbKc[Z`yZ毽5ܧvbth^(jZ4`[+֌)i+d!\~$Qt )gyǙI 8Ř$h7 7(BlJtQ xDjZZc]R[3. c#;9&7l 0gVl f t8],h15 \<7~s67: Ss|v4J͎[{v,+k`@J/!F}:#&2^4B2 TBVFXUR%"&+B- [4)9 ʚnOñ!l Up҈Be&1[y0@-R&Vo=ЮgHy6'^;nG֑˰uh]_nlIwG>:^ja_z]W;4g-+ZhXY٭[umr ;\Cmjw~ <`7'ǀ֎g5GB9HDE]j^Y:W|R( ϶tp ;H n `xYo6s?$ilp ^l,k=>H\%Q A}LJ^m$y9> ,Kxիq4ѱf7dc4[,ѧ|pEN&WWogg7I;htv,K{nq@x2E8HL H.  3H0@;RuSfA&bI" L/I?L&s"`Zηnח ;,@d Wᢋ(bۥbZr2?0ąVd7l(;5}K/Sg85\rzж"W.rMz%:;o&mt7ށ=*;e _B<Fs6 o6M%{o&m6[g}P~#c< No>&FIoF̤BH;i§8 Y,|ٛ6 _g:Fvi,N\nxZ|@ ܣO@ KC/mfJ TS2CjDꦐƛVZݲS7Oj5)q fRpjlB˺DdkM_=Oknb |)I&Mnd~W>-gZ.u,kY&KY\>G{?]O˞i*[fʤ5 mfz .͹3聧 繇˲\٧(ܑ/ME#%=]9;Gꔋg3043U?T1xo?ؾx|Lvi..; ]Xu|`AJXbp?ruSTx#eMFNLo톯0eLe& Sv__E us YyUmV(T,"A?ܠ -KDioI0W,N.Q^ +$hV|.8+c#~hƧfOB:BBj0x2^ ݇ӗkB"kaX7m@#NjZm)B[S9:<|=n9v{7['E]tsTV婈ÙVutH@Y \nyxdϽj99sߜ4Ee:}ENubO]8f4M"Zj(}[GTK{_y8ހ7?['No< !!-^`x=kFW)Xxر;$3Z8x\c01Eؤ5~?(q6wlMvuxuN>ӊeeq5yvtBŎdLxYmo6_qs?$+iZlH Ylw0 -2WZTIWHQԛ8aA|9>Q|ybx:>M#4z~p0WOaqw?> xvk[@VK x`p:;j5^Lೱrjcecj-,(fӐb;8ӌ[MγIPt&Je3#чD| l-ƒG7nn#϶<9yb]G5I05(/.?j uNbrLp\9Kj (<y!g\K>5Uh̜5Y? ': 1В-$ff3hzʼnR}f^MAߴq;u`"H I Ɯ^D ٠emѥ51_LR0-DfW;u6Kg7T\F-%2Z"z1 WͲ>tNraZ+0'9sJSD7Bފp: {:]4DL 29d3Ė*$3IwВ|Y,aXҿ\BS*Fr@l+k<aHH2΢]e36̩[ MG\kxk lFa.$JZ+Mw6 N;ЭVK?@VDUuI!TRJ=Q,c?rEʼnXYX8`y: K}uKB5}b^+…_14fᄅ!? 2GVMgh(ӬX^Mqvr/znɪo~^'_^\돯ɟGȇ''OVubݞo3MaNhmvI uVtF_,ꌲ۬ q;Lw'̓ŧeU6Ev[l]'2+!O<qwQe ۓVņKx7o%;Y}|M<<˗_)ury!sy!ʩ4LȻo&u^ˋ͓pIdMN״AlʆX Vb'QF JS ۮhE6WYAH$'/kySSc>=jvY[Ɇ66:7n&ri&Kza]|U-l6eUU҅^Ja J"|8WuUdf]p l|O ᔟrYHHdSݑ,ϴ e f|UQtNoo٪n蓙sbLj9!u) ?:7&wW*xPjn`#i8LMU@ T"s~ Tؕ0-Xŧ:3@SZ6K$Ʃ=鮴8#Wl*ad F'z,ꛤ^b)Z7UO@0+XRDD6KU4 GR O |?f.Ra& )-RN:ӥ}Mf}xM^0wg 0^tBg@hMHSdhΉ' J竁 K[4yR zk]g*×ֿ[*!Ģ.9dSBq^y 7X֌2]U%5t CZ{0)IRaur1!L?Ѕyr2 :W1'&Xs7`2@hEo# ud?e.x{PEv\Y2.YSi;:K׈Ot˖Х'vQ p92bDHD V"fU$M!&@Eno2yE1UekXAv8؋ 7rv=2ԮMH(ӆS $kɢF{l @7+>A[sY\Ml'J~~xmpC^^ p'\ ~Dw .Fj@E)ZS4dqT. R|sREHXvP{=݆%zam",8THÙPt+L($ypREҰAH leEZq|rnyy].TLaՉqg&F[蝚"mdI ɕz[`-f.괎C#S5v9(Y@l 8Vb"p'fz8sei;MNeӤ8V@iHlGR*mbS$ k*A5$>Be0Ñ~u:<EZ۬Y`״=@5-\|w"bi'O>΋[hV oa%Bמc Y-FG3Wx.q͆4l9}Dm [ѥ߄ *'v- (D?;>0`[.|ǯTc˗͙<;C`ݠh)^%^ȴd]4L -}B[Hm'1BCm MbctqTg=Fgc (Gnr$e.y. Kڹ!9v[jUjX4dG=JP :Λ;X:)l w,jJTFO$`Q$x7M`ݗdȒ=bH)4F ID% El6X1S/LWo`A'W[qWye5Ocp>WeְԌ>&mUQWIގOpEL,'K$0;dc\K̶+ Xx|^3(줍 &OZ( {Hk#ATm@,~Ը;: eq-I ~@^xP/O(IE鉤$RԱmjdϨ xTOeEj>vyӥS*?Jo'ؗ'+'an>TyFS* ߈$1m bf)f6v5m4OH҈uMR&)`y#13B+Q9ت`k}*u4]OӡVlʎp<{3{yl@؀'m҉|xC5qm{"oR*n r$)1Em 11xl@x8 ÂLUż0fdj DwSX &epXIG{\TA1#w4I4=x)CFsӒuZm\-p> xZG XrvZxy#,(v7K0=SI;2l.TdeФ9Kġ;M _dezˏ;yD]o2Jfp|oP x2+yM%_}|4RPD$VkĦN!T쮎`3' 扂eQOʉz+>6/J;?D<5XE痲66Cvny0_n #EBJ5RpA `2%}zHYZ>ZܰARN8@! T fziP{stv9b=WZ{$]V)pکtkiBUE^^6h]E ZEbE +jEn Sjji qq+|IG8kHc[0yjqV.v:GcN/k|&9 .?n)֔CT!uFtl{ĻUC~Bu ˛J'S[}@?2AФvNzP6>B7emEh( |A7$sn2""zѧȬp񌕶zU 6rX;[}m )W~?zMf^>FP;uX,ի;f7?c ̦A)jF!4?k 8U7rm[ĶH@~ š^:"@4cF8cAz"'Xz"'Kag /<yt eA?C<E9"ȶ_=f1K 8d NV_}9V$8UCk9!Hn=˾ Yz1_ \"y[Ar~%Y;_D5n^KX":f35t̍f @!HrnHq_Ւ)y.ryL]JXe8`XX)õUaU\*[. C$x K,ٔCE`R(NiA|yJ lΡ>#߅EI,(X5DTYN_ gFq>%h|P&rOpNɀ}uma(SRRK`6h) w^;hQ-.ΎgSo_<3㓓_=svvr2O^;rY 7gחӁ>\؇0n"yRfز s],v3ފ, gLЭ'QJz4IzlvP83 Q}@]J!)LaF2I3}޼Y{z)=qBmS&7b3ٜ!ǮQc<CSp!A -!:WCet8ȘFW*҉MߙJ[x5D#x_AB̔1 2L淌nPc]]ktUTC sBwgdSUJYFm S^f DԄӤmc L5&&0c+r Z*#6as0VPU U[b [qrX!\Je:6[sm!7lK H0'gZ@bQ,[5jVh֥dŀǾ`"1HՠQY㡰U'>[mjH϶Kkl"醟.BʽuDUڸe58x*C)8(JA OhmoUnjU7vL*^<<3e_h<x>W $έx]]A;[nD~;u`=3%"~)%w'L> |`y9/:ahWyDI(15+TF IfKfdEdv zEq3.a.;`2QsP"'c vo soli ,Z|hCQ@䶈f]. ,VFiSFXq/fk7 5#w۞6Y* ;şeQZQnP^X~( \Zj!$0NRHIy%OEI$Unf4e>kļ7;j8Iqũ!!4&Fa `9-j Vn)[@R.-\m~tv2]{27ӧ>\L綣{=Rqq""}p])P6dwt#J?C {P -*4Bj1yÎρ|y_^Rږ"y6îe⵨sz9WJ<+0y~-.aT*`nR-OLV''%Ԣ)5doFZ=JtX*FAn4S8mJϭQwd5V7I*wzJ-ϝqU{d:L ^^S#x1U-N"*wE-睜qU{ t[ݨq/r P]U+S .UMLAr I.XEzX!,b&K"!ڒmH섡r6Km2Zsz\%9R3Ƙ&bi;SסdZ KVટ{nY:Mՠ|gXkUXvU^| [mirÊ)kn6 "oeT` v " 1/akbo$NaD\P.6JHRZ.Itpt{bGdYwi @f20Q>oXj ax!Y̵AQv, ݶ֊.\L@{<xzW`l@|m ш0pn,ַy+"',bʁwO*Fā@2 M°B< 0(Q^%|u$C8 u 3-')>-A7@qJ”hi16AJ /֋텔΁V_"!SQ["cNް6Uq P^>E yD1X |Ob`!r\(9E{=KtUne`NnC ˩0 MP"RX7ڀYNjV aИ [BO^*h:hA>qy2|SD-Q97 u<՟÷`'(çώWAe(o?n.L!A\.Gcp'gّLUƌb?դ-' HIH%xG@<^?a=1@3gE/*ec>>&s#4b)h7A~Xŝ=;=;=}~߽{~sϷ?_ޖ Ɓq80>^ ?89 c!iv9|6/ :_dN29DBbNPGy0|h*jwCfuE nyr#u& L^ERh\Ȯ`=>肈 oؑ-ohFŷoiNxpG B C0 |L"`( 0JY[HAE)m,%8+~*d`9bB?x w$*w2 =9T<Bm &ck&QT; AL+$3sTW%8\ZւeKc:jt-OR~B1 -7m]a=;fO⥳lʎiH2,͉֜ڄ9y s68/R6ͦMP\>#jz!˞( < 8Vأ}$svk@GdZ:ncR{nmZ`Q\%U@8kx-W9MFFX#˄("ɥl"[}y%qDp-][v{vFoadFVpY[OFB?1+ t+/ζȓtɕFF'*FbS%^4F;Kz8'GH"4Lj$Tz␵;C\ fĔfbVmi'fu5$KIa7'r}Ty| C{k9M.gY++`{[uU&6x,kO(C#جL^ Wzj+Puӕܘv[M]휔 pQϛ2-5s1Y;#9|' 6FZkivVsZSOD,H@K3Pw@ !U9lU,%^4p$M\d6kZaXzS gfrVl'gJ5mۤLbZl!fbFtS_bDQRm$vrJFHmdvVVuYSOn$$[ϰ"6SȹcHFTCˎ m ݏE)*v6QL)Ж* [)u%AyJTU9Df=X-+rw$#j3uUfn8v#A?Y+J%!O64VLoN,;r:K䭩'@}A?5 NN-^xXmO8_ `%Hmѝ ͪeكݽM|v~c;iy&όWΧeHPFfꙈ0#s-'\eyr ~jOl`b)5N}qshBl{X~ZR,ӅxUao0_qK?Jm W Vt]KrX qҪ9IK5-cH;{pEBR}6iBF}gicFo鯋 /?q@t?N'ghJO(]V*%UZ6ZE=łH&0qoWT.\$OTEo_@_>~GZ-ӰGH=hZ@%JO0<i.tƃx|$>~lvKdgSm5zg0vM"h%UycT\0r;ֻ#x#.r%ba?!,0`Z~.+7h;Ym%Q>O``҈˷_4n4LU*p!6;G0yZ"H6bwvn5> X=3:)pJxϔ5PV~Q֑+[˼a+fmmq["V}.SDX[&nf3w64ن~͕AQ-ycuo@:N;D pK^ze\d{xx"#|fiy!yq}]g| £HÐ<*A? s=1_3lRAu〲3#Kԗx34@iaȨZKQ/:^~9hNO՜îxi' Nة[\bd 2Te^mYƌ \EdIA]_L2zX$BZ֌jq?"> HZȜsFĮ#|3i@l'N}y tNQJ{NUW\'<_ >F?m+0Uԫ @T^c?{">Z|_ \,#Tpd"Ty ,٧[ruIąN(*$`&3MވU%eܠ6#tϒ[/_o$D <?HVX6{ 1 J(/,Pᅟ eGhB.vJl +jKo&&fP`e*. dYev{Gzol[u# I{gAeCaX]Я>]CyCݴ 05#E\B_rl "#ҫҡ)s8k+}y6e:v4T\[_S? &MN.:W{wíݮz|]u4~6i_mVY'.ͨmh VPu`i[;k94, @TcZr*0mG_wD#xDp_,EY2<"8|A*)4`1+8nYM!, mJԮ:[6ߵ߈*9Q׫AW` UQwZ1^*jU * eeCc8}_*]bPjYu"*~o[|A>!A̘0 74וuc-di?ʍ`ܦDܩ> H%W#e/cd= /,mj2壔F@sH QXMI 5j'-rp#UdpGt`4)c*vnBNߛ$ʶEgEGnt!ew&'zDnJ[8k Ռc (V7 J_(s86u/rx_G`f?@S#X@ dգ+1ɒm4DUczF ?IqKׇ"mY T#.ТiK_ XF*V#E@ӈh2:4ܜ=S4l6m->h~5DjH?-SGXʹ9StPYr5pqLi|EiݦV6"Ͱ:$T%*!M=Rz7 a3˰wN1ҿ+075?"vT%u )t1 O2) gc@ϟ+z"Z~M>"8Ssl- K%M cΊ P 385@u~bA/PUrczGXKd@_R̾ &KirqQc<1̣&q%2HGз13T$):#=iUZ"R7JV<*+Ƣ}m}ҦeިJ3ުJ^(ra5g8[l>_yk 6wj} GIJEGRnNakDkӆosXm;&~;eoiEbef|iYg;6Nu6Y dm1YTNIv]ȵ9#匎nW*PAH1U6"פ\MPV7̷?yXhVK0t.#MU"3]xN商~#۽x@?槬+/ QQ#JfxiOH{~Ŭ A +j\et+^@&$ŞfIQo'NR9}{M[rvO\L/7MX48X{MABp EUJB[U.o8DT[^ Փw'Gs+sa1 nao#rqF)c8Ttы+ yW yR Kё3N;j+F7o.<ŧzweac6D/)A4$#LA HDYL8֨$(JioS>)*Q':ȈD8 &zq:Ğu{5k4bx쨬*u"il8Is&+lf1VNN TT8 ?&TP v$UHqOcHM ``MAEqi$5ĝz|wXF><@Lta#0 ONSWm3`8}YGŜb*rizA޼:Ӌ E< 2.ӣeV뜭X5@4@kHӺ&$3FL sRYͳAG$+84a9F:O3@2pVt&>W N?8u>:*aM`IJbWz<~8D-~骏g zFs"z[߯C$##D{. qyV0hlmREU !Z4@TLժ,ȊeN٢fp?| \s7xY]QNO?+ﳚ?@)( rcc@fRDQhbVnO㵠T4.&g M'[Eyp7MiO'T7buMLRwW nyU$g>:+Kx;gB4ei Q+$">.8):[1=62AɫM6FoLuWSG'KPL4(]Ȓ&̙5pn>o^Ȓz-*j DI 'r<C!\q4}]-60qPZTUs0ɣ9rO1OdɒZ{,mwG2vdW3vI2@(n.J[$zN1ɦM+m&pG<$`@^0nQz\t< \1PjM;͕pRy^3@-Tif8#y=1KE8_.X}ngK E?XNAf52Wpl-)B͠ _(C G*kM2'brh’ KO,)/e0]^k9Q j(\몣(+=vui):T uY;wt?`L/v笠ս&BBL|IَTiy@:UHUh*Q#/w"(Ͽ SVcا'+gZNf5c>#]DKpA~!Qx[o#PQ[Q6MYKBsԮeڤ\4yGqgDCƒ Y+8.$-x! !YDVhG PKY fULda\"4ĤI?4WlN79u-vR w- 6I)yYmͫl>4C %T@wop$c ExlWQ.+Ǹ1%--{N['fA}  8C]IE*ftZ@*jVrP,,WހFP&D!KQbfBP]ZOd[1S|o$o~W*K=R KYgߺݪ1L ٚBMEhyhzƅA"m*:~=/%w ro0|`BJ)@@ɬl MṁVQ@ɠC[PЛbb#SJMHW2 O^ĆΛXT2^u2/Zmէ{ԎNTuvYoQ4!4~5VZv0J V$({BgӍmA.-Ig\7հJ\o5CN`ʩԶ^y VUVnXzy}=ոǒkl_4冧]!IP/Qݫ}74qўS\eB/ <}j,7yƩ*. L|+?Q7kfjZw,k,$ȳ- A h5]Hqސ.40I"ꗡf:ԝ~^悥헦g'Jj=S¾z"NTUKPFh9mglF}T|p2&cK~]={Jd)EܶB}]ח}=?72-YotF|ϰR^fGwbobE芵3?HutI ceR>T$c=,m;&6,b+^7Ά1n=cz,z/t-7 8=q0䓪x*fvHkV> @ް1 ߥ.@c,10DwoFO=9gtY\|'uӦRJwu;B-md/ X/Pk'lU5ğ~Vh!++-1ߦ}D6 o2A_[QazFv8c yN,rZX{jH G36z9ѫ6}A. Ng$}KJRS/gĵϿt+w'|wuX?$}wl"m}(ڲ:T(6Co&jțC3ܭq}<[7U%f"d| fX7thWx˜W{,dD/vE:Z T 6Oq4%G^M&ӔL-K1e1擛rYHKg<]:쌤1E-Z2rf0^0xqU쾶FqP >α 2a `@K1ؑ*a uA ܂Gms_Ѓ>a=m"^Obx{fb ~PBH-D}kw?hlhu촥Q1' xHGQ_) aQ_557n(NDMC̫>FgC6o 73}WZl>2UX.3n[*ZvK^PDiyJ(&RK;. Q̭~:ͩT5V}֍o/ {A4MT9~k kǛ6 9C= :=޵`{@7'nknMS{64 cG.:v,{: =fuPV(5O"FTwBd!ݎ-n݈% jDꭓ3r"OάN`ً=Ox?0>r*RXK'Q'**"A "  >>0ՓnAXHtʸ;?"8,y.)dyGj1Cgqӂfb]]RRwRwMȔ:xCnYX~-Kj#f\ x)-uGDq9Tm4|I9f^ӼNNj hn po:6}K/fix&9#@f;0EwPnљxvSѢΥ%*Ůw{Ӌ*'v![ ݗ$陃7u ^#ِBseЪn(6o>T Rb @#F:Gp~SFc;ԣeFeF:GM뛀L-Ǜ&1kyR/K.V**Gj:.U@h:^U+3@MCalis @Xw 5wfUe>[2ҙ"NiåyuR @Aĥ @gB"@a&6+MBU>@Kiib Z䛔=C7w2NEz+yd$b#bR;&@jȄTx1Ň4|}eAE4FpDlDP;C4▆gjpWČiX}SetxAG;^ֺ/ev \;yu%!iؤny1Sl6o4tQy0uzԋT/nn ^xk\؉\Oxl{ȳxob {a2tdbS+wj~FA(mF]R3.ںፖg;x^uN! Gmbf{M㚒Z$m(KYߐ #]Ϛ &eikYpMmDnX8ތ)ݏ$r{DԄ%Ȩ W IRϤ/c}uϕ2ĩS6v*t861,9_Lbre [yszôŒ^xs6eϗ^b".j~gezOqDM.rS/g?Y=~|_ Xq4k.Uqn}J?N@vF][:׌)].rkS;գ }X?ݷ!&iޖ&`NJu|{+t vHbʏ+F˿Ft(Xkf 05 O\Wڌ!0RڡlH{:σzz{L&" 퓓>>Kirrqz9Dp~M҄2of4)мȺD-C+B *hq&frNU43N6FnMg@A[H\̥Y#"o v]kEd.l i0tF/p_aeh)O a&t`1 vu&* xVmsd (.B.QytCDGFHywtK[W:ihDQސ"H.֚hO?|ǒ@UT6(2H!$!@3.R14~UQ擗6" +NVH%G(TKLrFV8a߿ v3B.&FX&3bc2#J=f!IH P(Ur"vfBV5˜'5]J ࠊ~\3 wI1\a0 ʇ$/R7Phh{E4`inJI,'EzY0B.Szq-/ =Rܤ}EUƾKض'[n#>ɐyCDk'W:j{.V#:D (Mz$5ylL\?֣(7ׁAzc- onP)B ZB}{5ZSPqg%2rW_S6.*ĻZ@8R{Eh^a4yFԪ_vmEAԐn8 0I&SZC9*%"c50ZjnoEQchd %[FXIcKk٨6˿0OloQIߨ7Z4lonmDY6`-X05 ֶ 4(4q= & LIa4miNoNI{7S*)KEnDT_"k*TmWpG;94^yhG~} *]"BlANSD&k: obxYmO8_ `%hڥNfVeS6njڕ4;))3~i8_^!ZQvӵaS XNxLhq~_:qA] :suoϤ\:N$E<>8/*JOeG߇Ԙዤ2${%-f8 sg_ӐDCCN:r#>E?-c?۫kU13STAZL烨\K)+6U#Fe1[֋Euz1棚0|fېϟ\½zB](̼БV .y;0Z+TEU\96  [Mî[+ 65UXMlAM8+A%0д~t۶_l(-K+n ٿ蓮o4.*fpW|wۦ,AJP,1lvM)7URNuwoV4`Sھ~yܭzYLG SKqAt!l,m=봖u6=zyAo7RS74@p63.0sa{F!ropv]LJBaXm[q:n{2=yp.>Xфtth<_tɌ˚хD>~4_O.d^)zUP!u^ajm;C$3SLG\d1>L;e|jJi9+2"Ũu$)5Pٸl V$#1,k2Q Sj|o Y7]#Q$YSN%^Aiv5C5Q8/[+!.yZFǺzwsÏie%XxOA|şXxDjbOc5b !lK}k1Grk4`GnŕU3YY1m]Frցؕ\| ,`SFn+prák@^ϠAA<;jezIi|!gԹm XןA<,ᘾ?l{7s(@Y^rK-#-W:Bpo"hڅ OMDfk~gJA[rB5 %S(ELKm^$"+IM,JS"'cw&6];9REA-P $)d# }(h*v]hTa̖:<ƻ=^Z´Q}drESjL dd>H-xÓޕq9Lq0^)zxVð49~6$P?sʌdži5>6Rqö/Ut^b|sĸsa{u1A&gln˗ A{;Vbv 6=#~E|-L4g֪jQYM!y~U+!B6,`B"  wmv2:r:U9 [}QS5hD<4V98ѿ#n@xq2:bzG|I^+YuG2s=4GTtV9uL=N@Kx#a 4?^ulה# @㒷8L%v4jHSCg+D ِzEgsX ˥o+QI?M~5ȧI8E˖>Oh,U Ij׻y Dl5g`ksA8x8+%וkhr^v^}K؄S@y,(pjʙ>l*ߗ !sB"q''{ >5|pG\o7ybsJ,qM޴=hFlgOHx3#\aJ4z':xдI(HMWv؍x,g|Ʒ>cۈ[|yU}(WTg,byY6 (ٹCNO̱Q[8HB0eXq+ڃ2-50LT\yk?|^IJI[KCGǿ:R_)L̥Y5/f`;<0,< rJ@>BLHxiaĴ 3(C8֣H,@d%spY![,b$!"JoUTdM2[tg"p53q,R´c-f3-sa f!"^`%f"M!~ސ_Co|x6}s+U>3\1r69n◽Vm+!3dÞ1qά~!HZLl9g4;C3 H5-lT0Y^*F[񪫎eZ, #/g^gb%A0\b]e7U$Q&$<3ai.^[cі~ A:,0>ӥ*T,#4$-R7]3aբA\0vAUM[3>3W[Sy|\ K *(6xc@XLw$xȂCALJ#rViβL(.I@'0:X q,)WdއG=]gE+ BTGݻΕTtP)* ׇ<?*ԟ 7dws[xp1eI/^"FǺXӖv5a)GIFd䔾Q!K-ང9sax (8bw\qDkH"x>/j/9 9(/:8~#$#/}H Ě!#q${R WL/fW6~ `(BTTDRlkFzWNn,%nq W3ЧfOI3.r)`e[k8>a{ 8G޸\t4!ۍjFzm8Y\pf)-*8uVd m@ˬ54Eͪ dꨭ^5/f3~frh\b͗. 9B<1F\ "DS˵3DZ]KLĵ(E*BR =nb$ZCR!:|o흟w Kf AZ -"qt`/$phآ #L;$CȑQ Jdbf<8zl`/Ҋ7"p y #<6ϓFgQLC:IqDD>V(u4@<#t>#IU&Z>hLa4PI)e8(eFjmfufk>3Bg: @1;@ mFҋZڎ_x '➾ ^-}F;FJ8ķH\ё`'"\@'!$GsPFrKrF$9ū:֜]9p9ksu5 LM%A,3bGgL_UɡիfdF/_[ o0,erR$Z{K$EDt(v#KiS3>kֺF^8BֻwEQ wiw^>7``׻罭n l)>qpɅ2|"u'h*vE (L9,'Fhb#!pIFN9a)>$0ߺ|t:` Dzs‹k7c<ƇS09ù 'm qUb$7䱌xꨦEܒJ:nH K,2/xc0uGH ! E$㊡E/z Т~'w3w2! Qn@Z[y_v/W]`Axignۺko奨NZ YT9_oXiՓQ&4/`|DۀeVڮ$eW oLrD)JILP(E,]@C忎>b HFO #aA2&GǝJXg6Tv3q?<әAz$l 2 Cl #|b2`YwUp)e]4)Tb$,wؖ7n]>)!LQ0&4T@)h)}Ui!8KU0ngKZ-0N| ~fh 4ѽ0Fϧz҂y!:'8Sq BAYrzv,|l}l~.;#XI7H̃e/4Z0>fڀˬ27?0gBlhFM#Z%P2vGc(Ǯ]}g .i8C2R umu ԜF8BI ĉP `: Ͷ!r؄8Ӫ:%P 7h·ܸI@)@H?D^ѐz$!-)Uz⤪=.ZUf6#^M 5rTb8O%^%Z qѯs&sU@jlGU4N"lZ329ٲ5\D`t[IEZ>euرGoU|^}R~?$-r4!&fI'sɻ zɄ}R!O0Gހ BAD%}}3p_jXa:duYAx~*d9- B].<7ڗMC4iU]=*w=>ä~3oK),5Љ9r  LCl Y[)>C'Q^*&XdO4p Y jt &w5)ʫ IvW6zD(&yz5 5at&VVY0TGQ;H`N!M@A=lfdS.^ 1r"u}:AN.K{0FWsCd!"fdqR%DP"HbvOV eȊvˎΎ@h#HIzIOR~(I^13H$TAŁH!ŖWYp@HZ\1G,v/F ^[a•NzgN{tN{{Qa- >u_z#8gJIǺqCX)iЀI;-o ;Lٓ էq<3k@-zӎ+q*L -O Rct:REE:q[z)/f&]KO-u9sr -r%VGߠ꺭je*q؎-ѮqQACX%ZMU9{T џڣYt-Q Zr?{mD%آuFak u;6hnwu-|I#qݰ9&a![ 3®_?}v1VjG%+viud3|"e ^M } 㑫,GVl#Mg8Q:ezzWͰn/q`ఙ8ᨷlsx*:V=DV6VK{6-cM(ݛvzQ v_e4p<dij7ǑSy_U"Pa)ˍUO9qoN}N΀@Y@.r#>qb{#t m&zg[;\r‡V:9[9_~E k`Udk4v*?IxcD/` 7> gwX{.m/a u G%ѿ VŶvrw MCJNXY5kYm:lQ^$wW3^ʄҼ9n  @=u3úb|=]z {aI 4j1}zZk ss^(ӤIYlӍe%Qa߯<2'h{cT+ٌK9[x9n:8qς%M~lN3ʞONTe'j X3B].Qx좄?oYYn͞ 3fz$@ChiQ~ GJCM$6'W-Q ՘%c9gp3H%kAtiP?GE5U.&A{}Ȼ$ u0JaubEip޴u0V |gId tǝzl$f)4Lљ`r5xOܬcY'='2~%mfN)zR=vcC$ I0cdow˽F4~Y;w (ieqjC<(q1t )zK{Ϙ}Q U_Uw1g<ɒX7T@䝟+k #2|qsUrs*%٪(Ӣ,*nKvd7CYL|j' A^{lg}ZCh4q싚EPcpw\aōs&ýUӃ{j2э,DG5^+@K4fxu##y5\l_􈭌Wca Pyu +M ɺ1ةAeT(ӥ]BF3>{G|&f$(ˤ& Qb$ye# ;1\^})R7Ea8Am6;"5| _(y({ @p~0;OhRP&UJ͹FޅI5R(zઙ}[勵%)R["`:j!DZnc>MqWcN9y>)Y|̻m+5=-}0hǻu8]}ervf'3+l MZ'O\񱷭LV5=0IEfFb(Kx8J' ?!B-q˯ C&UW+(kaDdg&U5,rg4? &7CgD 'n?'\%_fjP=Z!mxaҗ"S OI QΘG)Fm/eH "Qz_@[tc %lJbǿR87r,S ]$ss!Kyr@yͫC6.gAQ(=M7ooDߤ+nL_ zwvqs|8%l7 {+5";\Wލ7tO FZK!ll~$g,E"ayh~͵Cu! Qy⠅"Jg.}FcqRu#`%k  xM btN,G(EE!?#}Cvߑ‰X"v,;h!(w LKр8Θg K_'%‡ſ's^yt* ` ^ȪTǭ. 7iā4;{^U-]@T$:d_tR0.3=d?ͭ@gIJ]",oпwԓjcvyH\SŢm?z($Ǹ4ϱYogwVOg:O䓎S))'X/ e7GvaCYnUBp9xϩ=O2ϣbXx F"8ƥo#xnxD=A-{;G'Dў`] ꘇ. 1=7He,ʷ^㖍%WV#OzvYMvYמz-.P;ot0r^]wHXGP9 uK30UCub^M i|cNX;\fOŋ}V%$n$du BGF{啭s !)K [Flx⍒OrH MˬaE3+Z%*rɤ'0_`I X,-M!{^ }:K4G+!%> ~Y(A j $tYʯ (>lfI( Mfԯ](~&HB4wbU+FHvG~2Vu]lz5- n "H΂E7b:@ؔd84}w:w -!^Ff?-0A7> H2YN O{~ DD ]Hx}ks7w:S2i n'YO"Yꪞj>}WwS)BR2 $2ݦnqjGTMm`7_~vz{V] ?y}Z}o?M*]g|y>=>=h?}zt}2B?z?]90wӿpS!GӋ?wٱ`γcYɳ۳=^?N =۞Woھ9[#hǶ~wѱƠx9&H/&.4_g7L~N藉[%\f5k.uqd.|nQ6g &k6:[(T qv~Z3\όeB pp xUmo6_qs>Ӯlp^^Muκ} (,qIE{ȊրeyDž%Z'> !uqګ,I:w6JOۻ_^!cFgO7@rOK1cMQ؂M߳AehEN_xO[xfHky/)kI*FSšZqSJ'Ѻඐz \0|EerEܓsC*wt99BJ]eBL7:Bzr4R Ӹ>LKIߌB\Av+ \o,8+kRTbQqӐ sZAFkI;TMrw2!{ggZr|ϒ{PRp=s%]xe>#Gs(X.a 9ؽ@%:* ^ю\8 ޥ|IRe)pJ2 nyFچ3x^͗))rp^fĐqQgDk(b #ŕO\ JCvͣR_ h⌊5,4\T\nRP:=qôoZY_u oiRF~w5}v ,*ր' @v5,*+ AԼ%kکZz)m?d(AZ0' ̯$a't6vΦ^sor,P:Rf0'iA*1ի,1,8 º#urIHXu~rlVyă~UHP$CB{89 ZB,D2Wh:fL:g𶂈HJ-6 uShLhiuЭUGFUy5RgJI#N˄H YEDnJ _fq*dlU oh])A: Xկ>W,3W8n+}n0n|$lpR/[ٽߴA5ZzSTgA'[VZm&<"%L540os30lcZ=t)~^2®(:eGʰ5Y?di!'Y !!L{wȽj@1GbQ1-TYwb zuLt)mW]gkQэc˥5z8  4 xW[OH~8kġvWHeiOĞأ:k<&=sK(습D칝sͷu Tg3x2eMn;^'E,FVjSzΦo٣20z--`!oF mPb&BA}̉ĵT_s<RJ\e>X|*SzQFS:+Mpt|9>N GIoT^ΣRpL|TWnL{/(BobpT儙"4i*KLX3ee$3P.bQ\A%TyY='P" "2uM7xcʉ*%;4#{maIH̓0'5yVOuZXg ,遲x&" e[*m*MzKZ#XPp6[tYmPA1NSJ&pPW6̟Ӽĸ(2[FEq0ܗ |Jā x׍P$BI((Jg˃7Tz}'m<\56B۠ضp_qO[=QH# /UBca #W5nH$yN026F"Ӆ@R;4=7`[NpiCK rN tNɖ~k;*ze' e/h'5l72je9v@9Vq+!1sm{&u6딹~b^6 x78lԍ9 1P.f6Fn\ysHBSNB b閩B+ߒ#ӵh vpmxUmo0_qK?}h TF$XK61/C s>?wg³"&eoMX˾ҋwY䅯Fo1d!4 2%O4!㫆ȴz`\'rk NEahu">ӊ6{E;RUZ *A2?7W ك8GwyY ˾_8L`dedC&xB ni8qB4*E!kQ0Ճ($Hz,5ڼ1`6sV2I躊< 3RfT"yA,.)6TՈ ,Ngb/5 ZB`( Z9/Pk ێs 0^imSu4i:DɰRT -H߮#xS8Y9Tp1Qdd#4Y,(J-7P "iUk##1%!'a %8 b4U G'L8;/M(xt0 f U}DpvPVUHfPI;5vLe] {J+TT #3L6/%Ab>G Jc 3Q-!j (s+PfO[ ˿f"J")r2GYS]'C14 fIQFJ_)xT~K\R#KS+JjhRY.1O-n\!sZV:t1w HS 86[TUR?u-0ѽ uF^h$(N"abvg%!gPFdJUmiT$AI$;Te8SYBC`kM%5!c&nb-#J}g'-eTQ5ow={n4yoMdXI_½pr )Gݴ#uz~D?Ш_4FX[Vh,-V.&1nP6ka*EL0\Hs, Y9=LDy[ 屳.ITރ\@^KtMf{~cXvy3t&cx{#G6 iG`6公'dV% >‡QC&lZ N/,7nD^pkc*IlSCU -ø~ sΤXX_2= dDY:v4 ۑPOa&-e!mB=K:FAd@yNEߨ8-V\En(:%HSbv15Zti-"SYww+6xu#27/뭇 njӶ pqCj⌘c;,!o2R}*ny\B!XHC7~{IIYd!-ĥ/u@:)%, W=a8u "S F%lK|N[ɫ1e>*iʺl[- |a ռ }!~xUQo0~ϯ8-2n0 'nbڑs]);g;:VDզϾ>; k5GiMAJmtWkd'.OD_~~v?fl<w@ ΑdD-β߱`gv 9rf1JHz@p.lOWj nT? gFFus mUs_{Gs[Y7iEm=YG#&/ NGCMOFv^FHDܣwFn%kX+Wg.F'G):q^)d5ON| #ʚФ KEk+,&wF Zu2*WM# ѨE $%v=;̭\T РpSԵ2uS 1RT(HZ3CK TrONE#$ N*}'A:tEA4%`<2t\4Ҍk 5HcQHU%fN84o;ΩRxD2 Pf-܏LkYĥ9H(IXhU<OlJϸkȄcM~4JFlDN !C6pאMT&V6{ܷɮHԴV.kF8灷NAg ^M҂P3nFO>rRE%-P5-躹ʴ$+ԶRmˉMj& wml #xUO0~_q ꖂ6`Aِ+b{$R;rwS(MMN{3ZF[:ɭԦIgx1InJӋOG{e>|2>>otNV06;~ǺٍGv 9ryJ%$=JqENTRu$kO3ٙyQmTBtzDon+0(w;Ow kDYƅ̓6'ƫ#v>F'1ze8v+XKNZ:=K<p2<h Ϙ^dIVd0 V7K}TD6pz5NHfP+we4ѨE $ &*kY@  A]+PY[w`c5 VЂjp| P}QI{%IP*A"DY(}J4[f&<\\N;EٗZ Sŏ3 d@ 1qZiYX糂>2Ci%=6`t溌ܱ5y΂BuHR1kt\gLA~(vYD1z&#Wr; +M*S$EX[yg3h!s3g.M@9:.- bwO(O_u0˰/8H (qG4LJHSZ_veO4^.1 $xU]O0}ϯ eZ0`ElOZG-C]i)MqNtt7VJ0l7[!"։*p7{#D#Ȑϯ>ugp2_''@Y#hdeb\tڤlr,Jۦշ{i&4("TK.m/B& QK?TĿSE[d 偳΄IUуAuM9A~e(<ه#;l?vx[- "VROG!2㡿vW'W<YFE%I*/fV/1*6D2 Rmf>*a J@doߖ_D@ O@@ȵ.*-lLֽ@2nS%SCI9ʊX% 0gML2PO\T["\ZfaI=*I%_2WȀ|.Y3gmd)-HJMZe؍r{ckΜ:[K dcw#ق$'J虌_*Yg3_H~0b&D+=,qRUo& jj7'hnRJQif [m_OMAM>u;m[- T1 .x ))S%*uxTo0~_qKa6cCj;Qu{Lbk&S;ہҵP|ߝ-%r] fc<+8 z76 3^> vBMk@p6_ghBFSt YutJfWβ4mXxRzbf6e%brn]U*rIl\%?sIZIw Ou4wд{c%\biYVϲ Gq=C}8zht:=}(n>`~i4+H%ND*UJ4bpٿB&C@#l *h0N:'LkSPenLr(c- FA. ,%,ZZR$O#ƽLBW6wM#KsB oHVo y!4kŚ3/܄_q[fG>Jvz&nZdH&ēm %rc ͊B٬k ԯndUy0}xp4 HP<4;'/Ȝ|G#'EiPjdy"EΡ`-~{)iIdA7+=^x{r=a8q L/_- ;ׅo$ s'Nr?KTf:zo0/"  ##Y&6{xTo0~_qKamVXGi2!B9G)lJnCE`}wvtzVR6dDnчћx)~|#nZ}|<8"ohT /kA-E,:VUf&Wβ4mXxTzIYR)zAu,\FT:bD%T'k>S̓*U(Ou! 1t!д{ciӁiF'CMX=./zǣ <黽#vG#k "VJX\.u? ۇt'@<Z?EIC nݓT@_L%IOSCU c% K,U"A\`XwĴȠ4?%ʒԲC#V4<„_\Ҕ$TY(|'p?e2 %iS#g 6RoT2?-VoEn2(}>Kh!Sb75ZHS -"SYww+6_<̍zyzBdY|1凑tRo#[7hvPO^s|%bNF/S%ڡb!$SBH!nj%ghW&/;;iPI18{FqDt5O`^x]Fop=wo%cP_Oeo6 Sr ((T',}xTo0~_qKa6*먺=M&1`GS;ہҵPuwΎN9r] %a X%B2O woٯ24~-bC42c>!ժ4NY _JLLlF?09ݦ.*ByD<$JϹJp,jUɤʄκd Kh۫~XJacqY7Vϲ aV}v{D ^e]ADjq"RjUdUp6/4"̶놩s5*2QMQ{M&SX€Qe |Z-AU p gIQ ;K, W6wM#K%9J7~rVo OD?xh6g`r_?L?gt:G'fX[,Ec]&ڣ|Z{݄DIռgPc"N'\tPuƢ+S+owGԨvu&\j=ko7uCV&IكKkDYDž.&gGcs#q1 ݮw%kX˧ggNFmAt=jU1 :)uR @;]#BܥudTFF%do Ny@  A])PY[w`c5 Vkp|P!}e0sT j&:'O:Y(}J4$Mx"54ҩ˽t#w8&hY(LCh2Ȁbݸ!G}d>/H0kKzmu]< v{ck΂H*cʷ2,ʘ/z;Q"d| %cLF zv6# V$X 'f I3 g2B+ssg.M@9:Ԯ- bw(O_mveu$ma8Q-!R{iz`J /?/\ ) xUo0~_qd[ eFe`6J){EjGu]9@U&;w͢kmQtSP&R(]5Og'g_'c('ޜ>cnjN˻9|Dsdl|얈jY;l6e7&t$]m<++pTƢ5\kM>s/]9\a.+BW-M液nrIRvc(۸38 NOgRxrdߑ9xj_|"~GFݮw%kXKgg.GmIɔd5OSEp5Y/&k,&wF2 Z+1Ȩ\5pkF!tث԰"rY)FBaDA;Y1FIhhAU8JYڡme碂KT ":T'1POǕhI<]SHjsihSWGNqA|ֲP?-~N Z 6u>(#S}A:+Y["ؓlJa;`<^;=>,aR_<8I8|/Ӝ΀i<'.+BȷP2Fd*ݠZn aIpb{?LP}&-{=UtnXAK`CkUqtQzfv:60@Q-!R{֧iz`J _o* j*XxTR0}Wl(!0#&2Kڧl [Sr 2{WBC&쑢i7J{aANU3 068Azypt8MƮƆ!|:9> 4*AF'zXyM&֢tlZYV:U6R %[]Fki"AT}:WfL{\u֩0*{ЖSثyD .(w7x GYŅq{<ޅ zsd'H| vۺ5DԲ#'^ p_xĄ@UDFgGp]_qc.oU溄:1B2 Jkm>ka@ ($@_;-QP0S, k/E}$a355޵j 0'$MJ_)xP~OxV&RKF^k1qtLbq:.s G>! m|TZti-P* 0RTV|ܶ^X8I/8b)N&btj x!WP"FdF %z:%P #霄ߞYeVS}:Zv }.qfʺKW +ƙ_4S7@!٨,-geI刺ˠxj6m4[= S?;  +xUO0~_q e TQז cElOEbg!e Qnr?}Mu轸 uj2{g[}%oF_cȑO?Eoh2'G@ JI+jUr^]{Okn\ig$"TXH.ɿOb%WwjD@H/,t_ nΕCG0ӂrw(ʻpsgQqac`}p QőGv:;;FC`xW5dzx"dp<ދT10>5`B67Mr.%Q407\jUd3c:HT:' VD~ $EfnP[0*TmD*t(,J T\)[Qj4kRCW,hLڡ+?f*  s@鈄WB3~b$)fDY(OB8ăN}ϤF>[9ۋ7R+cBes1;dI0eo7,瓂>2~} 4(4[*Gޱ5΂Nۈ3c78Jo6z;쳂3k( g2Rr$Ԕ%PZB%(%)ߟyz>-{}&qaYBCڋ׺Ghv؜v'~aӟW )_3ӿACsPS֗izyaJ58/0 ,xU]O0}ϯ v-TQdž"MLb-#綅!&Dզ8c'ٿ0VFŝV;S)S(yw`sxRln3v=`pt?N;Z"cGfXyelF֡t\Zs]V&Us6Rd K%{-r\ڄwx&3ܚB։}h tܯ Ԕa\RnEEր Axë#lwv>k##1%!'a %8hN Op#L9ёs Us U}ĸ0hS*$@1vLe] {J+TT&#sha:Ő{ gR#T-X.Fg4Z.$Senl KiƢ2S5urcO%Z` Dmd􅟂JQoI<5Ljrir7{Fj%5qF _,-n\ #V:t1wu`WNVu -T*jh)'y>g'#Iǘo%A0Kxz;AYI3R$L&$R*aD"~w鼦,R꺿KNg + fp*/aY~UARK3/)2hhuZ_feN4s1# -xU]O0}ϯ v-TR "MLb-#綅!SEզ8c'ٻ0VFNԩɔo?{ln3vg`t?NO;Z"cgfXyelF֡t\Zs]V&Us6Rd K%{-5U3%&,;?6G@HLu֟ 宷N͕C[N~M4rw(*:pU\ {GG֎?"{FG1zc8i+JXCNNK<p6<=h Op#N9ѡs1/|T5*T BJFCZU!B%퍱e*Z;PZ#4*XΠFa1^ ș1U љ( /F[2{ P]4cQI)ʚ:9-O0gN"̈6PO$Mu!5r4ʛAZIM*%_3ȀB>3g]d)+H'+C:UUs{c kμB c̷ %L^nNPxVr|%aLFT5 -5 TJX1H*z:><-8YBC`"t h3t[,v )Q{44@SZF޲`J 'o&0 .xU]O0}ϯ e-m*QW`Cir7ڑsKak;5!6Mǹ;+ike ;1HL|q9Qaht Ӌ/G#hm0v17ރG@JV*>cŢ赍];Kkn7j0kQ5gI!EF\Z!|QRn#Drk:/ r[gJ#gu&xSSۇII;]]]Z*.m v.*6d)Dn5->kv\QrX≀ FSpnx„ 䈒G+B@_,$Q4`a4ԩUY TN -SYހ",%JW )12S_V3QX gJjҘ LFKqC4 S񯥙H)Z9--O0'TDmdG$u8x!5r4 ^K>Kc%20o7̯YAsw} ұ4dEU*3]^݋Yg^mBd$Dq:GgNzVr|%aLFT$(Zjf3aHb&K;t^S}yZ\꺿Kf + #4SW@{*ݪpo* _?L }L۴l,RÉkR04 /xU]O0}ϯ m*Sڐ1V49Iv60k;2`B4{$nf,mѻ׏AJ7x9?~~%R>o2v5g`z>MOO+Z!cgzXk۶{lznu嘯S5gI)EN\LSkFڄo4xS]IEfq[*;:Pz }9u71DPVqamt4zuߑ9zm[|$&~߹u$ԱgMA n'W<:t)yjXJ[i8hh2j$@6vd{ J+TR #sT t ! \HPS`YZhMi(s(eU/lSC2`tN", I91FJ_)xM?GsΟI\. z7^ˬN+cMKd@!a>u̯IAsw} ҙ4_E]W*\^Ig^O픺Ld$?HF8) WW#_AI=T@2lFV$acwǝ.rO C_H[݌Wpiҹ,vea%th't[UY~YARK3Sdi}6? p1". \0<xTQO0~ꖶT\0m{BN&]%!N Uj}Nfw+($ImQRa}2syG՗ (՛P:O ^xJO.Z{Rlڛ^wʚAkv 1r%$x v|.]:AXo=<O*7Y*+\{u+QdV Pgθb#HHޅmf兽lܟ͎FtO5^dO3zo< :"60ڸ\LdxNtZ8"}l(e|@]:[dmK/zq008N0tFپK~}HKMj}]?D[QoQ_8*UvRJB-j9J2'QCŸqˆDx٭0j7e/@y$O#|#"|؍#܊~rXʤArA7aBxpl?@ͩoA U,ɎqsֵxZ i1V xVmo6_qS>$ӎpdlڴ\lHKDL";8Re),@r{x=wM w\4 )pBrnm&O_ӗ_?sB{@j[BnvBvlKLȅSc-q7gYY/VؚSƲ>2#d>J5[R,&JX~ ӥF?>oj'12$ίgח-~xWo]O~lvq1:WHNF"%1}V),szFs4 VfqbZJ88Ļ4qZ 0֡鯵ZfXn|:V>Uif +BhtyspZ1c*}~U޲=̘U]M=Eb+v+ oe#" V.lJ?B*No A,D O҉\bRc& {}Qu.-B/0!Sݍ{ba^@V[w! nvZR;^_aG5*K "x-!^Bx\u+xI&@4ƺ\5A-$AKkd#`rTD>r%Ɉo J8LKɋ E~֝ ?m!Dc㔆JpK_ G2z6!M3s+jגtc837DaWbH[ b|+ ~#OY5d OF2(ʾ.#Hb|A)U]QV !IgQ vBV I1ZpGZ/mVj]VB4ǃ!Ը¬lpH،0ҥ2S~7I6re0mXmS9`m5%$*T/ ꋀ}=ƕ,i\jIfQ}uހ<ᗴybNonc> wT`<ײp"p)+}W0jo;YΔ1RyaJj؏QVR}HhHN!sYpڝ!K<6iȃd/>g*abE +JEM\D,Oۇ~p&bJ SntaŒqJ9@F#mce'KeINY?@׿t\ LbI??>K&cXғdAE=FZGV̗og3Hk JB^R2&!^0u=$?T U9>;=xA˰+zJL6#~pկN2T c`Mh,6 0si>D^|Ac)ѓrc܌X;2P1U)ޠX!e*,R舍&ƃ(_YN_W!K)լ4մ |xs:KYUSC" inHFۢi%.iW~Vr+*ڪ*1ZQ J[Y<di[_pSt 8_w0otT6 dT  4qVaF OdvM;H[Gv]-(N=?.[XmV=dX)Ww+ΐ;ϏԺ7jLS\!=١ZueO 5hZhxG M5_k2Z@¡U۴%GN`RE#Cݮ%􀑞!I:DC=LM'O~)q, wA4guB:fZ:qh&Ƹ<ȃxn~+I0,-B~m0"Q_V+fIQ-럧]~cPB$/`nWغjkxU6 3a K֙lb_Н~B?ކ۹,#V3%VWAkn:;gk:~֟2+LMfkODU/TsvGIiZ dox DˏT2 Y2ӦaW-k+굊QkŎ/hA+АeBñ+pXXEGzdȨ aGG׫ټ\ŹҖ^w{Yp}񿞜gɶ7HnmN3KSoDo CwUREYhJ (j Z}jξ9!R˷6^,vTܚk4OXu7Z!x 8^͹Z:ޭg-#JWtWg_voİK!z`\γGK,;׃Vj8^hߴ #Q1}4;!2PdQsJuEq|M`/ @֒:fʴ.Alڛ^[4X| JפՏp7cŒFvIt"):< ޚR$[KJx2dLSk-LB5yc 9eރe]Y>.SxG ]dxgJXiQ85a^˱G,땣)kCa'=;e f,$k*)sV5HOAGLui`?YOV ll4$ xVmo6_qS>ˎlpd^l,h\4"-DE/͙;,lw{y9JSzXKbfuS6]/xҠǟ߿ӳ$}|$>{I4$zd!y^FXXiwf@ =hV%#72ACL^l04(fcKI7%,IPd]rî"RH5W(*Ge+^~vvq{{_-n9^^-/&lvy9ZU&4 hZfnY (&sFSCmm.b˶`g$f;l klJ.1ЬQ'öRLI&p'霫okA~Ko:7G#{*[M^sKqX̜wgȌS2x"e oRbfB%ҼjLuj3ζ= `ag.)lKr=)Y&D1z$\Exgd%Z)ѰR[v8~~aG,ܣju#vJvORS`ϼm F Na=]_ޤy+;į@0v?aQ8/Jwprዕo_垁CGnjR*lE&Lj=`Vksb цVÛ'{zlX8X^=O},/>!\k˪f֠ ЯIΜbs+; +f_.N^!Ͱ*` T;zmNB+8Qc'np}ΉJ G?NjY [[!5F xVmo6_qS>dˎHdlXtHKDL";XxV$yxwR)ͥŃ^?&2sQYߑ(iq2 J~gIe8I| 1>3$4Jz[{RzXxM/7)F20T0ܿЪJ/Rm}!'4Pr%u vҚ+n&+`Qu-|H]prq3oQyjkok5mjǗ݊$&KI)܍og&S@҄ZS(mHtQ:S1 LPjbr0RV46̐^`l+4 Q$59i,hsIӭ̧\mw]M*>wR}7+Y/F ,[MLղ9J)U/hlP<7Egf@ Px=R!ٵT.Pмn*H/Dġ4jELx1&*pm=Ͱ*bYve֖,y [릢OHۄiwuj㵢MÔ-˜,A&a1A7,K_z( 햡k6+7ױB˞ lXSNr6 'b_u/(V(m 7)e[.Nmyw<ߑyGDA}b @G/-C]R@=kcu3Y׶+.UXY>I_:ԽMLnB&_i!6shA85J pƾrfǷΐ|ewǘ3Z&:.ёyVr;~=-1{N45lq 6xT]o0}Kx" B*EThe_Z#ǐfUT*Mt{tM›<ХT(.dͶλHfyBj}q.3J9Z rc(!Ԙ݈Ҫ+`Uz6]v&w0Ţ0HH3þIQ!u0 KSZ f_VT1nМD#D={ wQ#Xg;&O=x|Fʱ.\ b1'73k\ʴ ˾N G$mqBVַpD^a,p W|J;0-վ >&HL#`6FBۉwߟ).NA{Raǹp@L0C\T ]4eoVW9K/_wrr3)v9|mkٹG.9rvNב)lG6ÌsfT+ W72 xQo6)nC"s"k,@xnxˤ@Rq}GK83`[<uT~]j#P _ j6x/;(,zf'Qy?TG^8:ңǔ `N+ABl:w9jJ_%.4X*. 5JHޚ\~&0 b|P.cW}lv?<bf+ә(1th<%]x] dX!ЂuRLFݽ>sD?M{seAJ L/:,؏hzڮޛhcVt͎q7~AGa.Hk՟2ͮ{yo[0va^V R 4ug1򰤾@|<|HD Jd&ۊ27f༎sUtvuvE?XByO[.Mk>Җ'e^Al(t6snUS`Y>dBdax]‘*GCb,4Zm+Q3×uM84\maGO#ַ''E ܸ~/kZ K.oNQGS_% ]8> xmo0S苾j զ6M*u+ژ4X;R4f}@9Dgn6B D1!^eӃ8^Gw[~!_#BƳ1|{?p>[-KȻ~nmyLj WP>[e偩cBf>lqsp`-xq0y 5tms%i<ص+gNEU%*%ՙKhfU(} cOAdi煽dr?ugћ󰫧{wSAD8:ԃ{ *`KҌX_9 ̅g\e".-rH#5R`"M@X /YHU7m:ɭv?,(䚧f-(xR/GƸcXYhs Xp0*Yp BZSpHE|3D6uT Ԋьm¼F-n7[zgt Tg?LxSKݧq46Ic颖T2q7T zKcRۑr{.WB](K2]c-{741P VF1JFog-׏bjڦ  pl/ݜh̏foSN8BHrFlR1 KmNߦHX]v SS)9VMxUQo@ ~ϯ/khMS1(Ri8ɉ]QTϗ4UAːHbv|MoԹPv[ @P2ƙxoFW9$o/&Ch33dl4O h?7fb̲zvWٍͮҶnq^ |/A`IGwW0(M^f*`ka'6:-̠mCi Tt)8w^[FDžxOIjzKdw_%`Zx*Ǫ*:+o;Sc-S@&A0cڥ\IǿT*Ŝbtlm!6I "EA>5<,XcV\D+V9DBҠx)]Ė2\yN^*bVNb4;YeH5hkH[&V #!*QBf6K;J]Tj(@^J#ϱ,Ry!+Jpȗ|.RaO)֭;WCPzSVvۏвBQ Lԗx4OV޷q xy{ȇ5*wģq"q[<\ *%%C*Q!-ePuZ-uV$ʔ //M:xSQo0~8>5NH+TU V"щ"+YZMCL݅]vK(]ς8uY2J {]l_~{~!_|$O֨Rzq@ ]ׅ]jS=8إ9Š9_J^L%GRfmmèأfZ>ϿFtrz)T=H vooh+m&U;%1G F0ڷuɵ8~&l5JB+ca st@E|#5qs٩k!Rơ4r; T-aw5hK]n_)^xg_,?+kc/3pDٝ~hG~/M ::B;xmOHS̥/xsIT45;W8^kwC~];> g~}ty*-d~`I.53߭w=/cOetax~%;DdwS|>]_$ mUi|nU^"ap2KTaPZP?|_= %g9?๳NJD~mBV7Tg0H{}_2f^xsr}yr}}߼m#ӿȓc7uyaP5' V.v^L^Xa N174P 朲=+BCN(V"bJl6ړ [:Aa rp; zVR9 .X& ,khT4}}їN[gjV];5(BB8"7̷۱ef9QaE0u*I@ 8> a47&yr2 iDԗy,:X\1*B¤2(p5xBQ.2D7"rLP>+Dd+nFEN!ܘn*7$EF>b~]86JKɳ׾nֽ6i7.`6,_UnMĔ3]a5etHÐM?7!w}upl:]%z T׀KovH>v wMQ[_=dKx0Se w\vR, T7` Lgu8) ^&}0F䶵ވDP9W9hln;qFtw[HzNttzg:rtLd[0\*%J+}׌GmU~xޱ696V{.՝]s=ҫ]˒}^ O<"_x]o0+ 0@ b$iۥZ}v>ʠ[U$B|>e<[&3.Ҟհ XӨg*=~&+]?i<@?Ls b˥lBFWFaڪzVTњfb3BBq0| Tq}!e33AH;"OigsźEtNd8l nl !;0Kto= 7~-Uvuuo]^vOl>]8ujGd[}ێcRŕ9.L5.O]xh/f3D.RtWQ8ݮMFJnף7ZUﳁvl aG} ericY,Fo6ׇ-J_\a2tsY,Vn?L$USڶz =|F5ۆ\f0Hq2czݷ;ɪ48 j`H@?&R4%ipѡIV\~5srwAI]x|F{.\-fzg:lv3s x_s8)!Opi'qܡ!mhQXl$9tݻa\fbZ)xM%<6Bea"E_ >}{zǫw3H,}~;S2r _΁"?p$羿lQ__~.йSS' A +1DҏB~%cJGX5֪&/Jit,s` C_*m簒{}dߞUr|=___w/-W席drv68~nג޽ ;bS,U"#$|XL[&qPXMϲ3'`n 2XXJ_7 !ggja ѸsYܾ^,*gpb,"Ɍ'4:bSc Wʅ8BPkMsMzXϦᜭPƁ8,툏Y0`*e S 557.=.K#YIםTQz ލHAh$ݺ@ytoΚRmw]Y*[Um*jw[]ʥ+S!ڶɝ(-tswRKMVTjh4ZH:K>VVkA51teݳHnWr` )@VxX]s6}PهАi'q ɤ3e2}ȖGҝr X`6`)3s?sdIǯ CDHӫN 7c9_ ddM%}H7 9V#<ϖ*ޜ$-F`=Fe&'BD )/\ r9'"_쿎 C\t {A_Ma iۜt]rO#a4/3̱0v@A,I3Anclo|[V #dZQnQ@(M3/֍Ջj۪2TxkNo4^#HBV`g٠B]B#He2;-+;x.VHT[%j{7)Vp\5"tykIOt=vZwΚuG~u3{|bOܠS|v}4r?OXuyw~"r'WJ_tCӴbCb'to_F[Op9>SDix1"ƚ`H*o oh 8q}[ZV%Ŀy^"rou^O-ܒG͒os /1<G$c$! Q(iȴ!a3T4gNT.4 XN}!Es3tc  QFezDXẠQ=vDx+Bu!QaF6lKXg(fpM6,(M Tq@?"/Ej.u)||L!1F J0]u*BtFz؇YU}HP_Vg.JBYn٠ `~ h%ƝakLK$B-/%T@f+|6`gG ~(T.ݨɈ.Nӂf@=RLU]c z3Ǖ|AQu^myюԏkfq5DZ<[w@C>k%o\ Ɩɓ8--[$6\>mйa>PBSE`k&ԶCiSfiY5aWCZ#Xi消V P֖HlQoj_*ێ̫ƫ <-{;[xZ< mɌ3/ 1td@PQ.l1lX"l9|',EŸGS3:ð)B6&i>,>BR wQN(ZkP+ۀ^xR]O0}ﯸÞFAh37&NŨOKYA,@e_fZ=ܓӒDX˵ x,NWPu#r0ϳsήFjc0cx נ^eBa|~BHeYڥgl;nT\CkLfj>8eGJp~Ǿ2"'."YCְA.^V,R+X~UMh8<׼ͦ.YB}E(ra*u3v&>lQt78q4Bݮ" &II ꣩d2NЪI"S`TQPBEkB@Rs[\=0ZHzhXP0P2X?sۜڢ>hVSgUڣf B0 x[o0gC%ѦReIEjjI˛X }!Ri:{ؐSvf$rK#ﴓΙmXfߧ7 isj>1B?Sf"@[Bc,3-܊c}LW]MiAE@l"LJec:BjX\<sYaKX̧h5ĉG1H}-.Q,*'Ƌa}xުyj\8^L'b[mFraSKoh2z=5dX(R*_SJƍL=4H> N(K9x9 !qBB 7eVKr! IkQXxB$ǵ- ~B֧C8dhnF: a[՟Kq<>˴)ȇq | oAd}sP7d[WE ;%5K,.Dƴ o9 d [rW=Go/n i8 IS4rl5ϛiuݺ oT+ nk]!x@U:B+ƫSAj!Vo*u=-L-v8H-Gzo(Jڄr`r*R/Xsx1Ym3/}"7bN*pP)4y[b/_6~G=yR'鿩  hhC,6xU]O0}ϯ+}"nVJ*$`])nę*uj cUT''w xJ'2;^xJdq0ϝ>L-~!6X?;rCB.rq}F%!tcc1!eY*"9y(}euq6S&1C!%W {;6+{ $[ hx)Ydl\ƉGU4*J1x }onl(Tc9ώiQ6q`x1^\ܺrve7}+VZS}0FM9iH#U CXL:^;3F46Ӭu|NNtw9[.֏ORBVC2 ˉzm|<:_-DTEe5C7ds)j'зeX_睚E9 Wa>mY{߲Ri4es- EWNQ%!yrdɤnjqr֮5-Cy?@-XwkX&Lz)V\]?al7Tȥmz.vBgRK(c8߱T !hq !FwP0(orw\H#emFTp\,]qwy16'L2q.6'8F,O񁹠'n*ғ93/#]X}BFw,Er2O@y\{$2>.0FUE` /CL(7Hz`.< ^E@8x]o0+Wa6AC]U:1m4!jbd;-cHoMp^X\'ߨd̺b6Z/K M.}l XQeFR>?D}y)>ĎVϭUJ tbda =a;"|l݃u.U%궘rt/m/ݫ'=ܟoBt$ F:xo0WAʆ:m!9kIUwN h'wݫ4;Tjَ2Y46zռ<-ϯ!?MοGc6]nV"М_lFyQvѶI_yc:lP5c> zH=d}'@eOEں37[.et-G& {E,4KkHd=p0D,G< Woş֑4559̖C}v@XVE9}?Ij߮8ᝎ8&mUc2m& D$T}ǿvG*!-%by0xSZ+怅,'(? Y(?2)9y/!:%́ J8 11KG rxV]o0}ϯ1 &fb@ImG[mcHFbGiUv/5k) s'7כ4kXV &X,[k;އɏl շch7&d2 \j3M#!!EQEϕjIưtMY}7aExcp#wy]Ǽ=㺐j w\Ȱ[PZ*ᰈbl4j!tx ]O*D! 8wu>Z<兽ѨttwNi뙝`oi;1{o4 :9Hmq}X/6KBXdr@jB*us`6ziCYEXZ(D/[#xS&h/P!YS.L!g^uU ܭy }i鲾YRZ_7.K( BpWco)>V&R{nBׁuΔ)_k\DZKLdQ$Wc\Cx!&3ٸyƙg*M%nWb%d!JItJ{p؂0s,U"`]m#np[>2۱04jYX"6+u$Vl9>&ؤMqEKKۤy[Ƈ-9ۥ_Ĭk~wo[|5HCdH "(.4:@FLRX^djpv|ztnhb\VPJD>82,& G{EzDyCxBwAv@u?t>s=r;q:o9n8m6k5j3i2h1g0e/c.a-_,]*[(Y'W&U%S$Q#O"N!M LJHG~   „ Ą̄̈́τ҄Մۄ܄ބ !"#$%&'()*+,-./01234 5 6 7 8 9:;<=>@ABCDEF iHV xoo6ST`y1XdkIA?hMm_ tQJRq }GR%3`:>V|xS F+$(M&)30 NO\BiHq7ǰ3` |~=9 .2黝`4gl>Gq$U&ٍ2@5Qnfci\"TF`4F^W8GoD2f^,T ^S](5 hUQ50Fl&T0 rQe5/=;=;;ucypWn__ v*Yߜ}]=[6 .&/Xcc!`JIb`C%ecPx:(qz.Nc|ꨌ<9 gI gUԑ5NO,y_Y_MΜ!^ͦ3U@k(50bƖahBJrYJe/tS2J`5P)e̢$4xc`FeBv9<=۟_;TMPg^>[_2n @wE_ҲymW!e!<W~daMa)[##z֯O7R) W)i Ī(kZ5U&.1s ({ bdqŅ,ׅǐC0ʝIBUEր=<:i^5˩@79nC`L]q/5nn }z:bKmR~' }xFk!_\mǸ> )^_bח'ca nnJ<txXmS8_K? ;\`z&H@(rFXby$%Bq3kwzBysv; ,vJ=Ŀ o?o?LWEA GC5^K(e/˴.fIPhxSn0}W\>5NHTUCZ"э‰#m6Mw$TVA8ι{t|M GnjYQ4e> v?|\Z~XlmAX|~{n!_l׷ 'kdf1~?@am5iIBmr|اa̲汔N*r7\UGn FV14{ndFH˧-ZPr/ o颙VL`\="$bxvUօj>Z볙(/;\o|>G!{sm.yguaDm\KsExKP\gj>iC%"Iך5tʱ/,%Yw5v붕  J0MHlE&So4T^CDk';[ZTD\#LjJAMCeY?dq;ae uBNx90㾲{Bfd8B3i0xb2KwggGGݮQqG>&J&[ .-'i0LCQEHQ)*C[͖Q@L-7X^c!cT @cƩmitsS4ii` ,E8'֏ick*sJCg(T l( 0s+9Jf`7bWJXJVh8"X)k pιFrBz}O>ĦDKc2Iǧs>(:}#܇ ֌jLaIB. B&<1 <ź!dnLi:mbNX7\5KK(I!@€& Bj)ͯF'so+!ǧ -_BIBpSbfR0 6(OL;>iKdX)xM2'bW ``TKHuD+v>h6EsRӃ^"wm'~'σh_4˶KrfGx&÷9YL$h hg=A +Yzuا i0WMpgFZ xECU)@(J3 jY6qn^#x+SL`/פMW&Deo*VCZ@4Sk݈4fRRS)SP]Sc]q$ d an@,HlMڪmL 7F-A7{!kF{ݴ׿ iSf[.;ݯϵ-~9J|Y؋n-z?v.ڂ{EVclG[jbb0|)$XV_p3u 7l71Lfx_o0)mgnhe7Z#,U L- H8&MйTi" Y4pf\76M 6t}5Fһ| ?ohJ'_QZ[]#:N76e՗ͼrXj H@zǽ U6(J'~nB{x$ DZ3+biDTS#)췾VC(݃E{䉐[JυtؙND';/;=P9;:-ӺK4E2B, U"R|(DTb.1ԛriۡEYhArȌMyq7\\ܵwΧ,9*bRf)WG˂._(N^;B]~֒d!`UE6j,K1_aPH K;C7hUqWw*e2C2|[ ƒ%*ډN|h^ryo#xR.#`g۝}K$xR]O0}ﯸ٢:h2uȨ)h-${=^:ebdyk/b"Y;[ГtC4~pE| .Kpd+MTbUUN;B&♶6u4!*S9Xs)!x'K!KMR}=' D]U)>P&Y1o3 j,r!wH| O^b1=IOFn {EÓL&ؚC5ոd0V } J 7YJͩ1Z#kv97054/R7#7"cnj@5kkj<aWZ݌7{ >wI ΥJOZN줵0i@W9DGή}ۧ{O`<W rj(=G"c#J˥zJ Y:VV j`ibx\&fe'&l:iH2FքL-wNULb߄D_[,n^x}p;8$zsdv}yk'~E|Z5ǧUmlo;۽2l&@&Y,LdȉYA"9J"9pb5AJfpcVg?Ph̽Ie E6`0MR^`#tȦ"ӂ cKi"EnP497 _U T^O,i\!&9dUQTz]N LD!, 8Ʌ3OZ!ㄥsoŜf9S!"q˻XI1Fl`.ozY)vX=`fye#b{q_U=+!lURQXؒ cl=tJ h 煌ԜjtUj2nL/`D3 0ؚS1]wk&2jM)͊tEeLՌSsJ (~6aiP:攅vݍ9f|x3y K4R3%6nE|{+Sino׬Ӊ PBYiJ(t bbN8ixT[o0~8t▶uYnĤ *<8ue*R}9|WKa~: TsY.;vv?~8C~vqxvz]J?(Χ >9#SG.UcJWUD,#(}wm]eI S"Frrf76[B5\߂ߗF%r^,e9(ѦZi3B=rCHއ[i;. O&Ó=!-F7p[KO_;hyi[U%?ZRJ CYTJt8r7NJhPh^+:#VoJwQ,bƽ9HKj+8dڀD<VrX݆)JXx2#"@)3@\#8uHXbD65Kf-\"1f2a|\26g0ze@GV}Jmh t =(MڤjN 9oH`KEg“AnDy8ф8 L#;}qLYo7M8Fx:QKesh 2]gJq;l:Vx31qvOTay} mRxR1{~#}|)랿իG6wïmg& 4L%[jF_j^-: y7!h~vJæ׺*rIt8J(&fNiL)xMeJ)υ {x\ bI'OºҤw h؟{)K فEjr޳% x:X*u5.<{# vC:7{}ah]^8rzZƍjM݋؛^bjr7tbJbP HbM dXjHTmJдFC"W@ѐT N:kď+<±Y[vR\áLpE]2TvKiXGyL%$fʨU{Z _ 拄ioTm•iZtتMx).PJ{ Ŵ ^;*HvC}쯓w=n tO1ݝ)8AcF~T P=Q~dxRQo0~ч<H*q&j3m{t3U;6i2$wwߝ~HhS/8unEppO&%j=}yq1_}:w~rn?m۰MBc }G8nP81jޗ2%@iWTb|fu̟=d q'qx\XsŬUy筸EDؿá4vs۳ Wrᕨ##h:}#'"x4|0: a~J~S^H,a]Sz4 pw$!ވC)dJ]]'Y)㠬|ZkZk^" 0S\їŀd|Ά䔩[ʇjC2ӳ~Mw,P\xRMo0WLɁb(j%Z)tGvU+0%Q1&j.g޼4vXG662H8Yu :09.2>mnև_-(ϯN(Kהnv$GK:$4O#pKKp="D5˘\j[Lb}ˮurY`kF<3|r~]4żWŐx}se{W4{kֳ关n5B#q<}Gc߷)™kgK?7YaQQHWFT 'L)Yٶ֘빰qZX X$ ZEzpc] (|yn%G;vZM3T_ XyKDR{gx</v;ao"8qRfxSn0}Wч<%ѦPeIMjehVF،FU}@nS!as=_eDmV+oj.U{#~?7[}ј x ?>whkZJoGd[[-(mo3?g2qitl[>j.`VBDgh2E$2fbJCڃIh}͏BOYm.XvђȰ@0q0wS]zIKJH>Sgy Wz-/FN C]t ;< `NHKɥ.#UDXe(ˤž 82}`O;͛B䘺eInQ a]$<"!ұ̶JJpc, yF qPv.zC,zAtx[)dv1.< H-ҕsy0}4*s$9 '` /BX~?#(|F>iV 5* }xb#I$/$]T]jMPiiy]Ǯ~8U]'cpTd3xS[o0~8y hSBh-2m{0`dLIUڇjJ!9,Fj*_9ɦ누o/ïAOL)l(1x$oFP<"!ұ̶JJpc, #88{;! Ui[)dv1.i2g+`FUc vMHY`@u-A#(|>iVr5) }xb#'/$]P]jMPYiy]Ǯ~8U]_cJ k<kMWxSM0WLCNPJViQ+mۨI vdhc ^ZUEŒynOU Gaj RIϼ z1a۟;(,毿тv ?o?ZJ> Ƞv?i|mrBO%te9?9_ 3XiK uyȥoiݛvqj{vDggx O_MBZ1m7X8@T7hKm&X;%!<\S\j x tf:_o8\0ڋh/S >#, d y.XY.NBexڰ%ڢ{"AG`yr-Y8FfT8 F?yċ/[FyӐu`Ҳڗ fSVWS$/@WfO#=v՞%j.o!^?@VxSn0+'ReM+p@ $Ѻh{EF"*EE{Ї  )~sWlM=GH]u&#b}!~ }M-Kn{w Hչcla@s c].l=KB8lN=T:9iR ӮRTm.MUC١Y$q3šNMOս8X!oTN`Wa<R&RYyj)<8ѥH/_|`J tLfAo { >} AAYxYQO8~ϯux9r+(Z$حhٻ{t'mbGRq4I3!xf}x ͉IC<,*>a~MD#߿ޢ??O8@%h|#(Ub_Hh3x,M?R̦e %8U?돳2Lr8dRGKC3DE*ri9 HN>T!ϸ@ l/+i;t}%饿yJl_M w);XzxR]o0}y SPeIMj7d_; p&4w 4daWEGYՙ.z2"+ӅӘsnu]2X}xy1?~~TYb(2"#eaFi۶nJ[†p\wW1l.dJr\'n7iV>G OctҦ[x*d'x O̓iRZ9s,kD纚A#vN Q><=s^lfDuerM}䵕V</atü?6svIZ0Yqe!Kd&Y.Sϳ)0F)c&aPRVw L&S@a/(! ̂R5v+x 6ھD8dZukw 2C\(_ - x 6h7pn.vn 3x H*2$0~ѝ$ED3bnxnxB.KA3" ʘJr) HKBlяR]<^<<\N./Wj*hԐ&8kB?8̠xЙqDM$7H>$<>A57*e ) Xk!?B9g_$9g,%8G"'> ~CV,Uk1+5~Vȼ^TYBB?q;C12E'(WրWqh˔ihk&T*ېE R"N35v%;k%%vD JR7G[w! WH̍:AU(I%jiUiq6QdG.שm٢0fYQv쎜=$"î4(ꏄG5&PfH,_s己Q8kTR)כTq3AmjGjN3 A|aUJSjc LEvTJjVu`OI+B4ڑr$DzQ_niawk'=Ec谂6e>=US@CC©sڙqg1l*,.VB;} ?L qgkV V+%~ܘBڝe~a3?n[{ؗaք‰v)^vL%G8᭖͚K{ [J+v<`ĤQi-E DدevN!*ccFhQOF&FFx|!G"x8|0ڛhow&l @62kNI(@xBt%}bgD%*Iו8F?7ߵʜ?2YpOQ)ΆH}!Ki_5%g/.zTI[P_Jf7\rYxRMo@ﯘOfjec"ǎJvkN]C(|>D 3o|\.`?H'>?eJ%,fHmUm능"]kǒ? ,ʊy-A}U2/ 9+!2!۱dl6sx% N?tɥH'r: W"1͉iosY'q=J@Җ)V $<" @8[Q]O1rgΎ8k܃'1i»\YKTw`PEBhAynʣXZ׻ E8_tYxRMo@ﯘOfje;V+ŭ:M{\Æ]C(|>D 3o<|*rxV^xx tRJg hǟ˘5HƔE+J5OkTb)6"#im5idt>9еn{Ԧ#r1aE,>w1S)l0C4uhAXmPBO2Su:kbf nb( twtդK3CsJ ev,p1,'^x62z99}\NAJF{KF8aULv(!8J[4nX)4htUKplE12ezE;s~hYi8H#N"N^|Ǹ$iG UT(oK'9k玲<:n{ -7^rHxM0SS0DUlJ6j`/ &2βl{R$l3~Gð뇺{i[ݘUQЦ\'w7}\~d?7_~dJdC68 G ( J $llI>m'NLLI.iWT,Zs d p[4UcW$τo_ֳn DX[EA9T Z(Wѱ9M](&옒 ǵ$ARpMB,t߈S%[Ky_D8(+V\/ })Lc%kiG8=opL==Ҿg7z ff,a\uxR]O0}>NHMTZ*`NG6EWK >;N5$DJrνǗ&QD\U$ه!w錐jV7Okrz툐ipbmrAKaٯ[ 4˨;*[L/]ߩfBbCB^g6ѻђj(!ogp1zCH&z.`1,cxCq<~ c+=yVNaNiW?6CKǂT-D)*a<Mn82n5vRlxFH#&ѧh}튲d)a[&^Gp&-yr8 iu f`PxTQo0~ч<H)!TYh-غ=UqB}gp>l+T$>«ӮPʙ㻞L+.ls"\#~CJox ?>ě5|JO2ȵO(mmRГQ .uqf0c.D$0?r!e~ٰeB٭v8޼e:|Ric |sEMRH N#!N.\Vj5G C"y~/L6'K~#l0&@,qR@LPܖ {ҍ``%#̃G!\ۙ#K.N×lkYzRᚩq8,©_LglNp9WYw6m%0%FZQ/kþJ=?ԧ~ɟyv㇫S4_ N.c`nxR]o0}d}VL@ڠEGvc$C\'@.Ru=>,r,JhvV*EG^FWok_|\`}`lY·;]0aiڤԺmCXoCbJHtGt]sS< 'OV~iDa.Y!῵ JNmR84X7M`[ vJ^ <]?h5VSx!ٕ+x<~Uέ ]}1qR^zJAb#CFHB Ly(T*;^+#dQdcjlۖw#3.@;E!WiX(w3nlGꜳ%N`xҿ5.b`nxR]o0}d}VL@ڠEGvc 'C\'@.Ru=>ꡰSUq,Jh*wN2EG^FWok_|\`}`lY·Wf4 aX4IrcK`9[ ^pZe\+![)̏sS/`0.YP.ǧZ,_dO(m6l9~G;X6&V LI.pc-d*1? 7!U?Z6 98CXc?3 ݯ6JLZvђ4H_@V vJQ1<^j OD?2y2rtnO|<""0\ro4SA] Y UJ@!vEPI6PwH{1ֶ-mSj]vC`C#bJHt't[4jzg~ 'Ouulڈ}Dxo#<g/sgJZmwR8l5Xw0`_ vN <}?dl6sx&ٕ+x:}WNέ ]}\NqRAJAj#cFB Ly,T*[^c `@v h;ŹA:nl Uc4ܸw qکE"ZGz튲d9'::ti K!  mg^xT]o0}y hSPe&ke`#tU{hVٴ!^`<RW*&z"R"-≳7[2$fZ@b z}Jo\_gP#ĘrDi]nJt۴nدWl,d'&5 %UӢroӟ\ZƋCm̝}o{xmy=j_QFh5Ҍ9j2G0wLI|?F[p1XNHld27-rp.Ҋ'b:=.F0uvvN#2$+Tc i^f2AI$txC4nLVHCF!B!r7qVs:%\Ƞ)TZK9FyViID`FG2^Ur;\HWѻyO@ suEg?zrfhxT]o0}y hUB|he=:h#dUh4Eٴ!^oE߄2UNexVgok&"l%^4?}?^҇`F|=w,1.>HOQZ׵[)]6&p7B)ljL."7iVVCi~ǕH] iA{ aT}Ǧ7тi' DJ`c<"}x;s8w $hLx]o0+ Uj״cviI%q&qA:1ULxdtL'bdlԺ}i\90,~3ƻ߮oo&jSԝP:]L-`RRξH+P*P繙wMtH mS^ iͱ,Ոh#o=fW2!z䕐/;o^ǽ|$8{:ҲOUdi'ox["6cӺKםӽyb'q&91Pg PN9:B#:[gʖ%JslA#C/'̉^TPՄwm^Ua/$ne+F=s#rC5̇߁ܔm廉17zCB}EYeGx(7*,eq&>wY ܭ d %{8sJ_G)G Y ?i~xŗ]o0+w'G}qESo]{e2Byq[ըz//Ks0h'7x%E<=n ͶSϢ0 cDF5:Gu' 0jgƓaxuQ,ż943dx={j֧̳) {t:V&LXXΤ%1Ű1*dF![ @aQȜMHaKw!Lr<?mENfg&<b+vA0a,O (J%)1֫sO0CPE-09r\M dNvTL,8O'Vsa/0u̡;bt9$TY8!64p[D h/2 /CYW ; w16[PT,?bOUFL).5M8@kXܝ Ţ3!Ӏ`Md#'լ°RgTfۥ-zhW,8TuK7’:%;LR# >;HR}I @%Y: jFe{7;+{ᬄh+F q|2an[+|[.6H|_E `IX81te*#̭y^l}zW:̔?Z8} 'P}_Л`.g, @',^ X $u"rR?]ow ,O!,0h|dz,bhϬ[kъ.zw|5>:C?wӑEn>x|r2Heq,,f!r5*Ȋ !AS(-s|#p8a~c7\~GF!pt$3jV#2~A}3ETA/ Nĭ>=n"4EKs+U]qf*;%n 18R[] mըZh%켶 ݍ"e.Gȩ̤hdRf͸LEu%@BehFLf0,!\Жᨺ: ^j}N0܉MHMBCM캷T{h WbU{o[ 0lPkMBnIH=uUߌSjF?(' BΦCV%kcQ)2kܪ5_֧XRuJx耼&.r khUZ27Iڴ8UU<Fn8Fˏ9`%$zĕb,Vb7Z7*T~!ZTŢGY ͢, qPY vm-Rg:Uؽ |j.M.m1A/L{dFjw=J7y~Cn Uk ´͐-pzk=<ΰUl[!J7syuYHPZUޒ M憘jjVMƽVc?/ZB ??5jn"x͚S8Wnh^hrQ[cyd$T ~Ϯd8Wz <,>=Db4{X{?ߦM.Q( ~ :8oÉmOSg }:HNm{^>ぽj?V054 DD8kt xVmo6_qs?ɞlHYt["JIY6)9b5`;_/s F{"Q\Niӓ_;Aɇ,ُkDѻu&#x7vnf< A,-J߹5}Bny90ΐqzJ"Oñ5DG"]+},8Ӫ,y ^3=906Z(9L%^ çFąW7W779~>re^PKG>`O֯z= )N5tUr(Ix> D>caf'kECBd q+0րJA"1? 8 cOkVJ,,I* LJ睊Y.*FnUd-uw \0)}Sia-`UhND We5(pfS!=ʔS.4&\T]L v(,!FzMydDxvŅ):B#qfܖ*mɥ(a:TN.96P2 ltJ7BYtSMu~TAغO)0swwc]vB{+I5 ȓ>;_z!QfG>]Û?@yPr5La%s!'4'褒ӳs<_5,7/su>9eqQ'mh Ŏ2bbL3e~O3#N' O!FX5@}K/g'-Ag[‚@iyԣ{A>wq C[}G.L`hp@I$Yp)EG\7!#VOfg0pN峕WڕAר[u4XbS 5XǠ9!52ElҌOEbeiIȆ4 386KKy@[;hmL |fN(%uY2 m4}Hm0-9@o' ic@un7Dl ZtQS"JЫmcT:'d 8PMmX㑴=<5Аx֑Hl\al:r)(VSmJSYNӘu [m/m-`6sER`2ѹ/h*@ҮqlSgUtR賀'#ؚ JcTqYfBjHo^o?WoAq>s=b4{(_Qt;h}T{ªL2,^j;~_\\5p$^  ;mzxSo0~_q8 &?4vChdb[KqJQ}$S#q;;y3TFO; ЉJʥD__%Hz?sJLߝUtKҹbLx ~>K߇^Y.y[I882 ihc#QN7ٳJQ*'&5gBC߿&&3v c'هdzrpߌч9|+O3j6лHD[q" U_1 ;Py\hg)K8N (N_(M`TE3m=͖]*2wH dY&8qtLsiq>P.?2@ 59J?z `3%]{Dv8WIYi)]ʢVdR@pr^eD(}=g㈁"v.J 1,[4 ˹.vW; u\o_>UTl,}xQs8)t!m!s7 2Lr= [ug,$p~2lCfVjfiL*.Y!,ϓ·3en#4>Oɩy~纣កi=?8'V+dοOrSet}l6DpِߝJ7 nx_o0)'dVAHEMj7f{B&1$F)TU%iK#+D0ƻf)*[XT䡊dY6ϭ xF?&ӟW߆dWk(B3Zi$Ƭm6{ӲYp˶bYl;2Q{|1Ҥ߶oBoWJX ^asH(<kΣ&Fvju,.uDF]|Wr7T]HGI\)='}";[;R:u" ,۽%6x1)/ bsJ+qt*t4r8 ƜrQ@9cNE Ƴ (bv4|.siGػG~EKq TT(oTxn6{=\*='(.RA;$Zy{-DE}Hr"f!}~Q_h[y3E$cQ$ZoN~yKoo> M. z!0 /quyNn&CDq1ֽ<}h؛)g1Z8l?~ #QhelxAvWzkWϚEuRE͙JDqNF<'c^[#IuN{}tL(q?Z''Φm6x=F#vs<6/g^c '"/3sH ɚHEtɖ)!TuYJyLJ% "aj@dv+:x l‡x3*|> 25}fiM4J8aIvP8?<[V}`sc'tJ*sXh \2~LG/hаAlD MF,`+ ]RJS+ܑc,4yxj.+- آZ@ngj!6 rneEZ6.?AN&.BmpΩ€Ai*ܺ~f[ևam3cs/ #%Jvmmڭ6&Jܲp!+г:ckӈ;!&"Ͷ_t >qPUlXƪeXcWj+dx{ڽÇc%WZoԵ>[ Ԕv=guL aר*LvfIOzamcÜ[YXVAi゘[rnaA.ʐ񕕌?e}~oaέle^Q.(V'\.m`s&}؋yg*m;sAG yqv xWo6~_quH`CHd lN[hP@ұ+6 `[x㑧煄PU[LQQW<p ^xQo0)n!OdI)!Tih-k3m{pȘ&wXfE˜qT=ׅP鹞< U$xf}\34[}_^AbPrya._3J9|{4;Eh(!Ę|Dnsw}W阮n޺v-=ndfO8#yq}~ Ef]U92TKnߧu aX2FD>)ӱFzl'j#H;&$=xm\}l1<ߕ77J Oot:z]">mӶJS**Ybfsv)b|"* &pϴPeEJAUYb%Z.#%FE6Q߾xQC ͷ矤ܵb>evL87y?BɊ桘`DX٧L E.+{LV#x[ncBotȄY[?5ێmE؋w?7-}i|d0ߟGj$$:VI2Y7V:OF_qSl3Bq`?>eBJ&.X|${εbƅeZڬ)%ν~D5Dٌ nno/GingM|DsEiR&N%'pghҪ 1`.s* `8S*a@MEM9 7Z\w .0 G 6+P3Asfc`0Ғ9ps,(I1=!||g5H4YXg12UND>'8ƈd8'׌mDn1&ZA.'Eюh<,I|6gr,5K2)\˱ hxW#Hƾv_MZl~⛹Tbw[8MHO. a[baʼ-XӘ=A2=%5p'+lƒ8hQar7{m_HʷagI;@JlXR^9!~n ,@?hͻ@"+HdֆfhpXQ-ֆSX-eqUe<[ɅC:"gM[kP߯yxy{0DyUڛ<*n׷0Ͷ\y:Q}Sb64)/$ˬ/4/E*v r xTQo0~<Z!M+LMlkwNش)sw^=|Zx TTMһHjz7Y}Y@jt=7Vj ߮nFƖқ-J(-/6 ]}ʚej|ny Xqf"oٵe!LH8 k^kM)>(SiŰ$R 9t,l3mΰvH I;Yy7f!<ߑA←SNxS]o0}y &KU ʒFnQ}=:`G榴w >vC{9p}nn5`F(ZM6 g _,/6_#__]@f _l./:"z#'uкoWxZگN(Q%q j,T(? 7bކX\n{tmEz9{0rRմeL R% ݽM`[wp=ڪh5VSx`g#GFxE>()91{;g>ak!2EZ6tPZy(T;sH !X Z[TT0&-DĶ1/2NfQf][XRf s2"j[t/W]CDHS-Ipŵ{P7_>iU+wd ,KJGt>X kq-fm qcID s"fDLl{ bHMe,V֔HfD {7D'B<5K^8ƽlO$x45w,Ҋ'l>}ϳ.Ӧ9>mzidyO?H _fp U|J:ʺm;3`(fF#cמ[U  b-#@jIqǴTDE 'xSh:W$Td`BVŠ e ]iwnGXh m?xs|Si*oy79 uO'E)xĽ*XƁ %9 n>lVU0Iƺ  uxT]o0}Kx" B*Ƈn=kNU&i4X89k'{< SHx Dson]Do|E|~6Fx ?F&izem_-ɩ6#70Ea*DžVH~ǏVEH {pߵx&Ϛ%Fs+SiE͘ʼȠzR&ZiӃBn5ZMg:L}x!ǫ#T!;"yN EBZ'u]\m[kk"2l+@f;%2[<PLna} '>#ANָG!Ԉ;KNjR^t )ټW9iC)sKR4pŔvJ&Ux3u# ؉0xπ% ;,-3TS!E6Ca XTjg"וe5+7G,'? r II3vj qxVQo6~ׯyd Z$Ԏig4κ>I"&IW)VÕVHowU _Pi.hG")hk7 m|yu!ӻ9Gѧ<<Ew΂˜* i(U?F;2vcԤgfq,REtGm;yLk۰\ɭHv֊+cmo"K`S[(by{\^÷x|yixl8đѪdI gWu Ck@R jTArX VR#2!gq]p M0OBjYq LCei{2nSPPIkLxH\*:G- eL%j`jӋmRFG: ^vK Q,Цhv+،4m`?j:# XְQ!B,yo ۇiݚloj%7VA<(]2O=ʡ (YkchiBP[AD粪N"ul}V'T_n(FZNۂ*d8+Ҁ)vCUti2i+RfPp[YY%ړeeImNITSfT2HKFi$- X~\u6A:\ơ0N;Cؠه^:7!|E&=y)&hoBJs4n,V|WzΒ=KkN#;9m}5xTch_;]_':/OcGnr߬"w떽 7% nnw xTO0~_q+}][m*!?@CQmO85'l!wIU"񝿻l6pÔ2?^XʈQ4αx旳  /00]S YzJY6:ƍLj{)|Cp gڝ TɵFi@Me*s%<SnaͨJx>ˠovҬRH5@`s8iMͼ7< OOI?9xF_HKޡd4VZE4aBBC,PeA<)1@XmY 6d+(2u"2 !X)L2[uGj8.8{ڵL*g "upPt_Ȩv j͌C{RΫ)լcFMyRQm6Ax97խ$]z<!ײkEi!((#P v k6wxnihtAi>ƶ66nM_ n>e54UA1vӴ5Oю"^2 ccx6xo0WO0@hVnhLl5ǎlUwNRJh! :]gBV/춀D3V'-;[q}8>^@z{vu!?Bg 08#GŷvNGeP kÚeV1!sjG) 7N8c )6"9f_ Y](6*SqeͨY 5.Ϡ͢>Mf C=Yvr<< n=S9xx<v(HS4U'ڂ()g\9F²PN$ZnAq8-)Sn8¥BA-IQ7V+]TlGR×'-_w^/xftiYC!-"4ƶ`u7EKmO&Z.lr4\kV/Dž7 Poωρ`{˷_N:nwM/k60ݸT+j0D|R$ԷKʾ.`0Oq T1,@5~3!2G?~ ҟυn>ovpo $Xa;tجr/LJ(@(͒&u/YK`i§3=~p_OC%  yxVQo0~6iM`64UZUaoI٦U;ǁvi54[&aPD<6zqr0uu_Ghu!<\`%|kfuwr,;swrV>b騉ŌFNuncϵ)2c _@?s)Y_\šR9YZ, E"dB6ܯ {Fzq-REQ]U߈BDO,Ә|19˘ Tj3䌆 XRȴ ,Uy ._A،gLAPpD NSD̕PXgY"HK} "J $˅Z R3dCICZba-=wm!M@-msU+4"(HT< iinQ%66svvb96 s'xϥ$剂|N9EJ/Ѻ7 W)3LvzԬZ=ŃBl{] QT9VJw^ XЫV򙊯n^ JfOdXp~]@S:M |V.<'{_)*K:BK?]WD.f $KD"?KQ3͖ƴqMxo~R\ZSj>r^m]1z =~ƻ01 c !yo }^Nܐݫ#{}v9<z"1mӶJ*V Lh*X qֈ^5h0Ymitra" GH Wdd֑mL<\ztTRsSf9IGo,SP0Ňp4KšSYP lq1/Y"Bs1*e]'Z6XqK UT5ʰ`]KVȐ dެK| )D(6ؚIŰ\x!ְJ*a`!\dTJ 97Ta+auAxI "<}td%.ȥSɔYFa;ɳw7Mއp"u&em-+dARRύdz2Ӧs*d>Z%ZĄgVZ/3:]>Զ LDBb,$>#e/oM `YYULŐ,oYc kFcp BI麮R =|r%* &g.dgDXsxM) 'm[CD㛈\NLԲlÓbOdS5Av=Uֱ=y"/]1n0ӉO`c%%rHA1PnぅI۬l,K73 g+!)2,;~i^liKȚwƊYmJLGBATopʓZ:10`&1" B(ln&ol4`eUm-TɪieV02v͡jafjYZ TK8Webh}#AY̵C O fgG%m1Txz9*@J`P,0tn1T7*WXT>Z^+D^픘"%Ebsg@=ZD}&/楟#Xx–'v]ːhpvo x | 8肟b3y+<gBε`m} 'UlţCԝ !_:T]T>;7 ڷ98ƻC܇7@FWQӻ!6l(& E\7=M\>/1Jhm}H7,:.Giqߘ>j$?/+\]:_{1nȼw*y?Vއ xtsDX3osG]xs1WIݻlED02U=ZIȑ>T  wxY6 #OYai#*?íRgUh 0}6G((\Ql]th, ~bQJ@_F.8$F#'i$n !!S{*LxYr6}W΃vmO3[4Sٖ)$߻ 7Lڙ*sX,4!ߘ,^mw,zU΋ӿNH`|rvBw<.NɧKȭz8T6m: JؔA3ѤP|ϧH2 1W쥶TF<;",%{}0H<"~s_~F^Y_%1p?בH~Dώwwk4lp& F WEF|:w1& uğpZj;*ua6:\ *J(ao0mߨ,H^vOp`~$_ht+$0 #$YTbP҉lS \j8YIBw\IBƃG.(e2;S;;4yPQj T 2r]M"%TvN$MH^\ӄŐ%o8ܕNrF_jh iu.y[SFz#'Z_i%tcBN;5JFa7E$d<35we^4$ mV.(oYacz@Ewd+u)\8 Aq)`5_q1*zV3%q7 Ocu%wOn yoeric4.DebugClients.Python.DebugClientCapabilities.html eric4.DebugClients.Python.DebugClientCapabilities^ i_eric4.DebugClients.Python.DebugClientBase.html eric4.DebugClients.Python.DebugClientBaseV aWeric4.DebugClients.Python.DebugClient.html eric4.DebugClients.Python.DebugClientR ]Seric4.DebugClients.Python.DebugBase.html eric4.DebugClients.Python.DebugBaseXcYeric4.DebugClients.Python.DCTestResult.htmleric4.DebugClients.Python.DCTestResultNYOeric4.DebugClients.Python.AsyncIO.htmleric4.DebugClients.Python.AsyncIOR]Seric4.DebugClients.Python.AsyncFile.htmleric4.DebugClients.Python.AsyncFileJUKeric4.DataViews.PyProfileDialog.htmleric4.DataViews.PyProfileDialogLWMeric4.DataViews.PyCoverageDialog.htmleric4.DataViews.PyCoverageDialogNYOeric4.DataViews.CodeMetricsDialog.htmleric4.DataViews.CodeMetricsDialogBMCeric4.DataViews.CodeMetrics.htmleric4.DataViews.CodeMetrics   0B240Ze[eric4.DebugClients.Python3.DCTestResult.htmleric4.DebugClients.Python3.DCTestResultP[Qeric4.DebugClients.Python3.AsyncIO.htmleric4.DebugClients.Python3.AsyncIOT_Ueric4.DebugClients.Python3.AsyncFile.htmleric4.DebugClients.Python3.AsyncFileNYOeric4.DebugClients.Python.getpass.htmleric4.DebugClients.Python.getpassXcYeric4.DebugClients.Python.eric4dbgstub.htmleric4.DebugClients.Python.eric4dbgstubR]Seric4.DebugClients.Python.PyProfile.htmleric4.DebugClients.Python.PyProfileZe[eric4.DebugClients.Python.FlexCompleter.htmleric4.DebugClients.Python.FlexCompleterVaWeric4.DebugClients.Python.DebugThread.htmleric4.DebugClients.Python.DebugThreadZe[eric4.DebugClients.Python.DebugProtocol.htmleric4.DebugClients.Python.DebugProtocolVaWeric4.DebugClients.Python.DebugConfig.htmleric4.DebugClients.Python.DebugConfigd oeeric4.DebugClients.Python.DebugClientThreads.html eric4.DebugClients.Python.DebugClientThreads NP|\NT!_Ueric4.DebugClients.Python3.PyProfile.html!eric4.DebugClients.Python3.PyProfile\ g]eric4.DebugClients.Python3.FlexCompleter.html eric4.DebugClients.Python3.FlexCompleterXcYeric4.DebugClients.Python3.DebugThread.htmleric4.DebugClients.Python3.DebugThread\g]eric4.DebugClients.Python3.DebugProtocol.htmleric4.DebugClients.Python3.DebugProtocolXcYeric4.DebugClients.Python3.DebugConfig.htmleric4.DebugClients.Python3.DebugConfigfqgeric4.DebugClients.Python3.DebugClientThreads.htmleric4.DebugClients.Python3.DebugClientThreadsp{qeric4.DebugClients.Python3.DebugClientCapabilities.htmleric4.DebugClients.Python3.DebugClientCapabilities`kaeric4.DebugClients.Python3.DebugClientBase.htmleric4.DebugClients.Python3.DebugClientBaseXcYeric4.DebugClients.Python3.DebugClient.htmleric4.DebugClients.Python3.DebugClientT_Ueric4.DebugClients.Python3.DebugBase.htmleric4.DebugClients.Python3.DebugBase LRf`LN,YOeric4.DebugClients.Ruby.DebugQuit.html,eric4.DebugClients.Ruby.DebugQuitV+aWeric4.DebugClients.Ruby.DebugProtocol.html+eric4.DebugClients.Ruby.DebugProtocolj*ukeric4.DebugClients.Ruby.DebugClientCapabilities.html*eric4.DebugClients.Ruby.DebugClientCapabilitiesf)qgeric4.DebugClients.Ruby.DebugClientBaseModule.html)eric4.DebugClients.Ruby.DebugClientBaseModuleR(]Seric4.DebugClients.Ruby.DebugClient.html(eric4.DebugClients.Ruby.DebugClientH'SIeric4.DebugClients.Ruby.Config.html'eric4.DebugClients.Ruby.ConfigN&YOeric4.DebugClients.Ruby.Completer.html&eric4.DebugClients.Ruby.CompleterJ%UKeric4.DebugClients.Ruby.AsyncIO.html%eric4.DebugClients.Ruby.AsyncION$YOeric4.DebugClients.Ruby.AsyncFile.html$eric4.DebugClients.Ruby.AsyncFileP#[Qeric4.DebugClients.Python3.getpass.html#eric4.DebugClients.Python3.getpassZ"e[eric4.DebugClients.Python3.eric4dbgstub.html"eric4.DebugClients.Python3.eric4dbgstub ,d<z8,Z9e[eric4.Debugger.DebuggerInterfacePython3.html9eric4.Debugger.DebuggerInterfacePython3X8cYeric4.Debugger.DebuggerInterfacePython.html8eric4.Debugger.DebuggerInterfacePythonT7_Ueric4.Debugger.DebuggerInterfaceNone.html7eric4.Debugger.DebuggerInterfaceNone@6KAeric4.Debugger.DebugViewer.html6eric4.Debugger.DebugViewer85C9eric4.Debugger.DebugUI.html5eric4.Debugger.DebugUI@4KAeric4.Debugger.DebugServer.html4eric4.Debugger.DebugServerD3OEeric4.Debugger.DebugProtocol.html3eric4.Debugger.DebugProtocolX2cYeric4.Debugger.DebugClientCapabilities.html2eric4.Debugger.DebugClientCapabilities61A7eric4.Debugger.Config.html1eric4.Debugger.ConfigJ0UKeric4.Debugger.BreakPointViewer.html0eric4.Debugger.BreakPointViewerH/SIeric4.Debugger.BreakPointModel.html/eric4.Debugger.BreakPointModelL.WMeric4.DebugClients.Ruby.__init__.html.eric4.DebugClients.Ruby.__init__L-WMeric4.DebugClients.Ruby.Debuggee.html-eric4.DebugClients.Ruby.Debuggee <V`t*<VEaWeric4.DocumentationTools.APIGenerator.htmlEeric4.DocumentationTools.APIGeneratorJDUKeric4.Debugger.WatchPointViewer.htmlDeric4.Debugger.WatchPointViewerHCSIeric4.Debugger.WatchPointModel.htmlCeric4.Debugger.WatchPointModelHBSIeric4.Debugger.VariablesViewer.htmlBeric4.Debugger.VariablesViewerTA_Ueric4.Debugger.VariablesFilterDialog.htmlAeric4.Debugger.VariablesFilterDialogR@]Seric4.Debugger.VariableDetailDialog.html@eric4.Debugger.VariableDetailDialog@?KAeric4.Debugger.StartDialog.html?eric4.Debugger.StartDialogV>aWeric4.Debugger.ExceptionsFilterDialog.html>eric4.Debugger.ExceptionsFilterDialogH=SIeric4.Debugger.ExceptionLogger.html=eric4.Debugger.ExceptionLoggerR<]Seric4.Debugger.EditWatchpointDialog.htmlv:fP@yKAeric4.E4XML.XMLHandlerBase.htmlyeric4.E4XML.XMLHandlerBaseBxMCeric4.E4XML.XMLErrorHandler.htmlxeric4.E4XML.XMLErrorHandlerFwQGeric4.E4XML.XMLEntityResolver.htmlweric4.E4XML.XMLEntityResolverFvQGeric4.E4XML.UserProjectWriter.htmlveric4.E4XML.UserProjectWriterHuSIeric4.E4XML.UserProjectHandler.htmlueric4.E4XML.UserProjectHandlerBtMCeric4.E4XML.TemplatesWriter.htmlteric4.E4XML.TemplatesWriterDsOEeric4.E4XML.TemplatesHandler.htmlseric4.E4XML.TemplatesHandler:rE;eric4.E4XML.TasksWriter.htmlreric4.E4XML.TasksWriternI?eric4.E4XML.SessionWriter.htmlneric4.E4XML.SessionWriter@mKAeric4.E4XML.SessionHandler.htmlmeric4.E4XML.SessionHandler>lI?eric4.E4XML.ProjectWriter.htmlleric4.E4XML.ProjectWriter 4|<h(Lv4?I?eric4.Graphics.SvgDiagram.htmleric4.Graphics.SvgDiagramEOEeric4.Graphics.PixmapDiagram.htmleric4.Graphics.PixmapDiagramAKAeric4.Graphics.PackageItem.htmleric4.Graphics.PackageItemGQGeric4.Graphics.PackageDiagram.htmleric4.Graphics.PackageDiagram?I?eric4.Graphics.ModuleItem.htmleric4.Graphics.ModuleItemGQGeric4.Graphics.ImportsDiagram.htmleric4.Graphics.ImportsDiagramMWMeric4.Graphics.GraphicsUtilities.htmleric4.Graphics.GraphicsUtilities=G=eric4.Graphics.ClassItem.htmleric4.Graphics.ClassItemHSIeric4.Graphics.AssociationItem.htmleric4.Graphics.AssociationItemN~YOeric4.Graphics.ApplicationDiagram.html~eric4.Graphics.ApplicationDiagram8}C9eric4.Globals.__init__.html}eric4.Globals.__init__>|I?eric4.E4XML.XMLWriterBase.html|eric4.E4XML.XMLWriterBase<{G=eric4.E4XML.XMLUtilities.html{eric4.E4XML.XMLUtilitiesDzOEeric4.E4XML.XMLMessageDialog.htmlzeric4.E4XML.XMLMessageDialog dt(XxdWaWeric4.Helpviewer.AdBlock.AdBlockModel.htmleric4.Helpviewer.AdBlock.AdBlockModel[e[eric4.Helpviewer.AdBlock.AdBlockManager.htmleric4.Helpviewer.AdBlock.AdBlockManagerYcYeric4.Helpviewer.AdBlock.AdBlockDialog.htmleric4.Helpviewer.AdBlock.AdBlockDialogs}seric4.Helpviewer.AdBlock.AdBlockBlockedNetworkReply.htmleric4.Helpviewer.AdBlock.AdBlockBlockedNetworkReplygqgeric4.Helpviewer.AdBlock.AdBlockAccessHandler.htmleric4.Helpviewer.AdBlock.AdBlockAccessHandler? I?eric4.Graphics.ZoomDialog.htmleric4.Graphics.ZoomDialogO YOeric4.Graphics.UMLSceneSizeDialog.htmleric4.Graphics.UMLSceneSizeDialog9 C9eric4.Graphics.UMLItem.htmleric4.Graphics.UMLItemI SIeric4.Graphics.UMLGraphicsView.htmleric4.Graphics.UMLGraphicsView= G=eric4.Graphics.UMLDialog.htmleric4.Graphics.UMLDialogISIeric4.Graphics.UMLClassDiagram.htmleric4.Graphics.UMLClassDiagram 8J"`8_i_eric4.Helpviewer.Bookmarks.BookmarksModel.htmleric4.Helpviewer.Bookmarks.BookmarksModel]g]eric4.Helpviewer.Bookmarks.BookmarksMenu.htmleric4.Helpviewer.Bookmarks.BookmarksMenucmceric4.Helpviewer.Bookmarks.BookmarksManager.htmleric4.Helpviewer.Bookmarks.BookmarksManagerakaeric4.Helpviewer.Bookmarks.BookmarksDialog.htmleric4.Helpviewer.Bookmarks.BookmarksDialog[e[eric4.Helpviewer.Bookmarks.BookmarkNode.htmleric4.Helpviewer.Bookmarks.BookmarkNodeeoeeric4.Helpviewer.Bookmarks.AddBookmarkDialog.htmleric4.Helpviewer.Bookmarks.AddBookmarkDialogeoeeric4.Helpviewer.AdBlock.AdBlockSubscription.htmleric4.Helpviewer.AdBlock.AdBlockSubscriptionU_Ueric4.Helpviewer.AdBlock.AdBlockRule.htmleric4.Helpviewer.AdBlock.AdBlockRuleU_Ueric4.Helpviewer.AdBlock.AdBlockPage.htmleric4.Helpviewer.AdBlock.AdBlockPage[e[eric4.Helpviewer.AdBlock.AdBlockNetwork.htmleric4.Helpviewer.AdBlock.AdBlockNetwork u4Lux%weric4.Helpviewer.CookieJar.CookiesConfigurationDialog.htmleric4.Helpviewer.CookieJar.CookiesConfigurationDialogY$cYeric4.Helpviewer.CookieJar.CookieModel.htmleric4.Helpviewer.CookieJar.CookieModelU#_Ueric4.Helpviewer.CookieJar.CookieJar.htmleric4.Helpviewer.CookieJar.CookieJarm"wmeric4.Helpviewer.CookieJar.CookieExceptionsModel.htmleric4.Helpviewer.CookieJar.CookieExceptionsModeli!sieric4.Helpviewer.CookieJar.CookieDetailsDialog.htmleric4.Helpviewer.CookieJar.CookieDetailsDialogW aWeric4.Helpviewer.Bookmarks.XbelWriter.htmleric4.Helpviewer.Bookmarks.XbelWriterWaWeric4.Helpviewer.Bookmarks.XbelReader.htmleric4.Helpviewer.Bookmarks.XbelReadercmceric4.Helpviewer.Bookmarks.DefaultBookmarks.htmleric4.Helpviewer.Bookmarks.DefaultBookmarkscmceric4.Helpviewer.Bookmarks.BookmarksToolBar.htmleric4.Helpviewer.Bookmarks.BookmarksToolBar F,F<FI0SIeric4.Helpviewer.HelpTocWidget.htmleric4.Helpviewer.HelpTocWidgetO/YOeric4.Helpviewer.HelpSearchWidget.htmleric4.Helpviewer.HelpSearchWidgetU._Ueric4.Helpviewer.HelpLanguagesDialog.htmleric4.Helpviewer.HelpLanguagesDialogM-WMeric4.Helpviewer.HelpIndexWidget.htmleric4.Helpviewer.HelpIndexWidgetQ,[Qeric4.Helpviewer.HelpDocsInstaller.htmleric4.Helpviewer.HelpDocsInstallerc+mceric4.Helpviewer.HelpClearPrivateDataDialog.htmleric4.Helpviewer.HelpClearPrivateDataDialogI*SIeric4.Helpviewer.HelpBrowserWV.htmleric4.Helpviewer.HelpBrowserWVI)SIeric4.Helpviewer.HTMLResources.htmleric4.Helpviewer.HTMLResourcesK(UKeric4.Helpviewer.DownloadDialog.htmleric4.Helpviewer.DownloadDialogq'{qeric4.Helpviewer.CookieJar.CookiesExceptionsDialog.htmleric4.Helpviewer.CookieJar.CookiesExceptionsDialog]&g]eric4.Helpviewer.CookieJar.CookiesDialog.htmleric4.Helpviewer.CookieJar.CookiesDialog $XT8|$U;_Ueric4.Helpviewer.JavaScriptResources.htmleric4.Helpviewer.JavaScriptResources_:i_eric4.Helpviewer.History.HistoryTreeModel.htmleric4.Helpviewer.History.HistoryTreeModelW9aWeric4.Helpviewer.History.HistoryModel.htmleric4.Helpviewer.History.HistoryModelU8_Ueric4.Helpviewer.History.HistoryMenu.htmleric4.Helpviewer.History.HistoryMenu[7e[eric4.Helpviewer.History.HistoryManager.htmleric4.Helpviewer.History.HistoryManagerc6mceric4.Helpviewer.History.HistoryFilterModel.htmleric4.Helpviewer.History.HistoryFilterModelY5cYeric4.Helpviewer.History.HistoryDialog.htmleric4.Helpviewer.History.HistoryDialog_4i_eric4.Helpviewer.History.HistoryCompleter.htmleric4.Helpviewer.History.HistoryCompleterC3MCeric4.Helpviewer.HelpWindow.htmleric4.Helpviewer.HelpWindowU2_Ueric4.Helpviewer.HelpWebSearchWidget.htmleric4.Helpviewer.HelpWebSearchWidgetM1WMeric4.Helpviewer.HelpTopicDialog.htmleric4.Helpviewer.HelpTopicDialog L6XrLeDoeeric4.Helpviewer.Network.QtHelpAccessHandler.htmleric4.Helpviewer.Network.QtHelpAccessHandleraCkaeric4.Helpviewer.Network.PyrcAccessHandler.htmleric4.Helpviewer.Network.PyrcAccessHandlerWBaWeric4.Helpviewer.Network.NetworkReply.htmleric4.Helpviewer.Network.NetworkReplyA eric4.Helpviewer.Network.NetworkProtocolUnknownErrorReply.htmleric4.Helpviewer.Network.NetworkProtocolUnknownErrorReply_@i_eric4.Helpviewer.Network.NetworkDiskCache.htmleric4.Helpviewer.Network.NetworkDiskCacheq?{qeric4.Helpviewer.Network.NetworkAccessManagerProxy.htmleric4.Helpviewer.Network.NetworkAccessManagerProxyg>qgeric4.Helpviewer.Network.NetworkAccessManager.htmleric4.Helpviewer.Network.NetworkAccessManagera=kaeric4.Helpviewer.Network.EmptyNetworkReply.htmleric4.Helpviewer.Network.EmptyNetworkReplyc<mceric4.Helpviewer.Network.AboutAccessHandler.htmleric4.Helpviewer.Network.AboutAccessHandler ( Hl(eMoeeric4.Helpviewer.OpenSearch.OpenSearchReader.htmleric4.Helpviewer.OpenSearch.OpenSearchReadergLqgeric4.Helpviewer.OpenSearch.OpenSearchManager.htmleric4.Helpviewer.OpenSearch.OpenSearchManageroKyoeric4.Helpviewer.OpenSearch.OpenSearchEngineModel.htmleric4.Helpviewer.OpenSearch.OpenSearchEngineModelqJ{qeric4.Helpviewer.OpenSearch.OpenSearchEngineAction.htmleric4.Helpviewer.OpenSearch.OpenSearchEngineActioneIoeeric4.Helpviewer.OpenSearch.OpenSearchEngine.htmleric4.Helpviewer.OpenSearch.OpenSearchEnginemHwmeric4.Helpviewer.OpenSearch.OpenSearchEditDialog.htmleric4.Helpviewer.OpenSearch.OpenSearchEditDialogeGoeeric4.Helpviewer.OpenSearch.OpenSearchDialog.htmleric4.Helpviewer.OpenSearch.OpenSearchDialoguFueric4.Helpviewer.OpenSearch.OpenSearchDefaultEngines.htmleric4.Helpviewer.OpenSearch.OpenSearchDefaultEngineseEoeeric4.Helpviewer.Network.SchemeAccessHandler.htmleric4.Helpviewer.Network.SchemeAccessHandler (4p jv(KXUKeric4.IconEditor.IconSizeDialog.htmleric4.IconEditor.IconSizeDialogOWYOeric4.IconEditor.IconEditorWindow.htmleric4.IconEditor.IconEditorWindowQV[Qeric4.IconEditor.IconEditorPalette.htmleric4.IconEditor.IconEditorPaletteKUUKeric4.IconEditor.IconEditorGrid.htmleric4.IconEditor.IconEditorGridGTQGeric4.Helpviewer.SearchWidget.htmleric4.Helpviewer.SearchWidgetUS_Ueric4.Helpviewer.QtHelpFiltersDialog.htmleric4.Helpviewer.QtHelpFiltersDialogaRkaeric4.Helpviewer.QtHelpDocumentationDialog.htmleric4.Helpviewer.QtHelpDocumentationDialogaQkaeric4.Helpviewer.Passwords.PasswordsDialog.htmleric4.Helpviewer.Passwords.PasswordsDialog]Pg]eric4.Helpviewer.Passwords.PasswordModel.htmleric4.Helpviewer.Passwords.PasswordModelaOkaeric4.Helpviewer.Passwords.PasswordManager.htmleric4.Helpviewer.Passwords.PasswordManagereNoeeric4.Helpviewer.OpenSearch.OpenSearchWriter.htmleric4.Helpviewer.OpenSearch.OpenSearchWriter D\XTDSf]Seric4.MultiProject.AddProjectDialog.htmleric4.MultiProject.AddProjectDialog5e?5eric4.KdeQt.__init__.htmleric4.KdeQt.__init__EdOEeric4.KdeQt.KQProgressDialog.htmleric4.KdeQt.KQProgressDialog7cA7eric4.KdeQt.KQPrinter.htmleric4.KdeQt.KQPrinter?bI?eric4.KdeQt.KQPrintDialog.htmleric4.KdeQt.KQPrintDialog=aG=eric4.KdeQt.KQMessageBox.htmleric4.KdeQt.KQMessageBox=`G=eric4.KdeQt.KQMainWindow.htmleric4.KdeQt.KQMainWindow?_I?eric4.KdeQt.KQInputDialog.htmleric4.KdeQt.KQInputDialog=^G=eric4.KdeQt.KQFontDialog.htmleric4.KdeQt.KQFontDialog=]G=eric4.KdeQt.KQFileDialog.htmleric4.KdeQt.KQFileDialog?\I?eric4.KdeQt.KQColorDialog.htmleric4.KdeQt.KQColorDialog?[I?eric4.KdeQt.KQApplication.htmleric4.KdeQt.KQApplicationSZ]Seric4.IconEditor.cursors.cursors_rc.htmleric4.IconEditor.cursors.cursors_rcKYUKeric4.IconEditor.IconZoomDialog.htmleric4.IconEditor.IconZoomDialog "VJB|"WqaWeric4.Plugins.AboutPlugin.AboutDialog.htmleric4.Plugins.AboutPlugin.AboutDialog_pi_eric4.PluginManager.PluginUninstallDialog.htmleric4.PluginManager.PluginUninstallDialogaokaeric4.PluginManager.PluginRepositoryDialog.htmleric4.PluginManager.PluginRepositoryDialogOnYOeric4.PluginManager.PluginManager.htmleric4.PluginManager.PluginManager[me[eric4.PluginManager.PluginInstallDialog.htmleric4.PluginManager.PluginInstallDialogUl_Ueric4.PluginManager.PluginInfoDialog.htmleric4.PluginManager.PluginInfoDialogUk_Ueric4.PluginManager.PluginExceptions.htmleric4.PluginManager.PluginExceptions[je[eric4.PluginManager.PluginDetailsDialog.htmleric4.PluginManager.PluginDetailsDialogSi]Seric4.MultiProject.PropertiesDialog.htmleric4.MultiProject.PropertiesDialogYhcYeric4.MultiProject.MultiProjectBrowser.htmleric4.MultiProject.MultiProjectBrowserKgUKeric4.MultiProject.MultiProject.htmleric4.MultiProject.MultiProject YqsYxeric4.Plugins.DocumentationPlugins.Ericdoc.EricdocExecDialog.htmleric4.Plugins.DocumentationPlugins.Ericdoc.EricdocExecDialog w eric4.Plugins.DocumentationPlugins.Ericdoc.EricdocConfigDialog.htmleric4.Plugins.DocumentationPlugins.Ericdoc.EricdocConfigDialogveric4.Plugins.DocumentationPlugins.Ericapi.EricapiExecDialog.htmleric4.Plugins.DocumentationPlugins.Ericapi.EricapiExecDialog u eric4.Plugins.DocumentationPlugins.Ericapi.EricapiConfigDialog.htmleric4.Plugins.DocumentationPlugins.Ericapi.EricapiConfigDialogutueric4.Plugins.CheckerPlugins.Tabnanny.TabnannyDialog.htmleric4.Plugins.CheckerPlugins.Tabnanny.TabnannyDialogissieric4.Plugins.CheckerPlugins.Tabnanny.Tabnanny.htmleric4.Plugins.CheckerPlugins.Tabnanny.Tabnanny r eric4.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheckerDialog.htmleric4.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheckerDialog zx2PfzQ[Qeric4.Plugins.PluginWizardPyRegExp.htmleric4.Plugins.PluginWizardPyRegExpKUKeric4.Plugins.PluginVmWorkspace.htmleric4.Plugins.PluginVmWorkspaceGQGeric4.Plugins.PluginVmTabview.htmleric4.Plugins.PluginVmTabviewGQGeric4.Plugins.PluginVmMdiArea.htmleric4.Plugins.PluginVmMdiAreaKUKeric4.Plugins.PluginVmListspace.htmleric4.Plugins.PluginVmListspaceOYOeric4.Plugins.PluginVcsSubversion.htmleric4.Plugins.PluginVcsSubversionE~OEeric4.Plugins.PluginVcsPySvn.htmleric4.Plugins.PluginVcsPySvnE}OEeric4.Plugins.PluginTabnanny.htmleric4.Plugins.PluginTabnannyO|YOeric4.Plugins.PluginSyntaxChecker.htmleric4.Plugins.PluginSyntaxCheckerC{MCeric4.Plugins.PluginEricdoc.htmleric4.Plugins.PluginEricdocCzMCeric4.Plugins.PluginEricapi.htmleric4.Plugins.PluginEricapi?yI?eric4.Plugins.PluginAbout.htmleric4.Plugins.PluginAbout tJ:tz yeric4.Plugins.VcsPlugins.vcsPySvn.ProjectBrowserHelper.html eric4.Plugins.VcsPlugins.vcsPySvn.ProjectBrowserHelper eric4.Plugins.VcsPlugins.vcsPySvn.ConfigurationPage.SubversionPage.html eric4.Plugins.VcsPlugins.vcsPySvn.ConfigurationPage.SubversionPage] g]eric4.Plugins.VcsPlugins.vcsPySvn.Config.html eric4.Plugins.VcsPlugins.vcsPySvn.ConfigO YOeric4.Plugins.PluginWizardQRegExp.html eric4.Plugins.PluginWizardQRegExpW aWeric4.Plugins.PluginWizardQMessageBox.html eric4.Plugins.PluginWizardQMessageBoxYcYeric4.Plugins.PluginWizardQInputDialog.htmleric4.Plugins.PluginWizardQInputDialogWaWeric4.Plugins.PluginWizardQFontDialog.htmleric4.Plugins.PluginWizardQFontDialogWaWeric4.Plugins.PluginWizardQFileDialog.htmleric4.Plugins.PluginWizardQFileDialogYcYeric4.Plugins.PluginWizardQColorDialog.htmleric4.Plugins.PluginWizardQColorDialog "1[cmceric4.Plugins.VcsPlugins.vcsPySvn.SvnDialog.htmleric4.Plugins.VcsPlugins.vcsPySvn.SvnDialogkukeric4.Plugins.VcsPlugins.vcsPySvn.SvnCopyDialog.htmleric4.Plugins.VcsPlugins.vcsPySvn.SvnCopyDialogakaeric4.Plugins.VcsPlugins.vcsPySvn.SvnConst.htmleric4.Plugins.VcsPlugins.vcsPySvn.SvnConstoyoeric4.Plugins.VcsPlugins.vcsPySvn.SvnCommitDialog.htmleric4.Plugins.VcsPlugins.vcsPySvn.SvnCommitDialogq{qeric4.Plugins.VcsPlugins.vcsPySvn.SvnCommandDialog.htmleric4.Plugins.VcsPlugins.vcsPySvn.SvnCommandDialogzyeric4.Plugins.VcsPlugins.vcsPySvn.SvnChangeListsDialog.htmleric4.Plugins.VcsPlugins.vcsPySvn.SvnChangeListsDialogmwmeric4.Plugins.VcsPlugins.vcsPySvn.SvnBlameDialog.htmleric4.Plugins.VcsPlugins.vcsPySvn.SvnBlameDialogkukeric4.Plugins.VcsPlugins.vcsPySvn.ProjectHelper.htmleric4.Plugins.VcsPlugins.vcsPySvn.ProjectHelper b"9]beric4.Plugins.VcsPlugins.vcsPySvn.SvnNewProjectOptionsDialog.htmleric4.Plugins.VcsPlugins.vcsPySvn.SvnNewProjectOptionsDialogmwmeric4.Plugins.VcsPlugins.vcsPySvn.SvnMergeDialog.htmleric4.Plugins.VcsPlugins.vcsPySvn.SvnMergeDialogmwmeric4.Plugins.VcsPlugins.vcsPySvn.SvnLoginDialog.htmleric4.Plugins.VcsPlugins.vcsPySvn.SvnLoginDialogisieric4.Plugins.VcsPlugins.vcsPySvn.SvnLogDialog.htmleric4.Plugins.VcsPlugins.vcsPySvn.SvnLogDialogxweric4.Plugins.VcsPlugins.vcsPySvn.SvnLogBrowserDialog.htmleric4.Plugins.VcsPlugins.vcsPySvn.SvnLogBrowserDialogkukeric4.Plugins.VcsPlugins.vcsPySvn.SvnInfoDialog.htmleric4.Plugins.VcsPlugins.vcsPySvn.SvnInfoDialogkukeric4.Plugins.VcsPlugins.vcsPySvn.SvnDiffDialog.htmleric4.Plugins.VcsPlugins.vcsPySvn.SvnDiffDialogmwmeric4.Plugins.VcsPlugins.vcsPySvn.SvnDialogMixin.htmleric4.Plugins.VcsPlugins.vcsPySvn.SvnDialogMixin >.;>o%yoeric4.Plugins.VcsPlugins.vcsPySvn.SvnStatusDialog.html%eric4.Plugins.VcsPlugins.vcsPySvn.SvnStatusDialog$eric4.Plugins.VcsPlugins.vcsPySvn.SvnRevisionSelectionDialog.html$eric4.Plugins.VcsPlugins.vcsPySvn.SvnRevisionSelectionDialogz#yeric4.Plugins.VcsPlugins.vcsPySvn.SvnRepoBrowserDialog.html#eric4.Plugins.VcsPlugins.vcsPySvn.SvnRepoBrowserDialogs"}seric4.Plugins.VcsPlugins.vcsPySvn.SvnRelocateDialog.html"eric4.Plugins.VcsPlugins.vcsPySvn.SvnRelocateDialogq!{qeric4.Plugins.VcsPlugins.vcsPySvn.SvnPropSetDialog.html!eric4.Plugins.VcsPlugins.vcsPySvn.SvnPropSetDialogs }seric4.Plugins.VcsPlugins.vcsPySvn.SvnPropListDialog.html eric4.Plugins.VcsPlugins.vcsPySvn.SvnPropListDialogq{qeric4.Plugins.VcsPlugins.vcsPySvn.SvnPropDelDialog.htmleric4.Plugins.VcsPlugins.vcsPySvn.SvnPropDelDialogq{qeric4.Plugins.VcsPlugins.vcsPySvn.SvnOptionsDialog.htmleric4.Plugins.VcsPlugins.vcsPySvn.SvnOptionsDialog c  5cg-qgeric4.Plugins.VcsPlugins.vcsSubversion.Config.html-eric4.Plugins.VcsPlugins.vcsSubversion.Confige,oeeric4.Plugins.VcsPlugins.vcsPySvn.subversion.html,eric4.Plugins.VcsPlugins.vcsPySvn.subversioni+sieric4.Plugins.VcsPlugins.vcsPySvn.SvnUtilities.html+eric4.Plugins.VcsPlugins.vcsPySvn.SvnUtilities|*{eric4.Plugins.VcsPlugins.vcsPySvn.SvnUrlSelectionDialog.html*eric4.Plugins.VcsPlugins.vcsPySvn.SvnUrlSelectionDialogi)sieric4.Plugins.VcsPlugins.vcsPySvn.SvnTagDialog.html)eric4.Plugins.VcsPlugins.vcsPySvn.SvnTagDialog~(}eric4.Plugins.VcsPlugins.vcsPySvn.SvnTagBranchListDialog.html(eric4.Plugins.VcsPlugins.vcsPySvn.SvnTagBranchListDialogo'yoeric4.Plugins.VcsPlugins.vcsPySvn.SvnSwitchDialog.html'eric4.Plugins.VcsPlugins.vcsPySvn.SvnSwitchDialog~&}eric4.Plugins.VcsPlugins.vcsPySvn.SvnStatusMonitorThread.html&eric4.Plugins.VcsPlugins.vcsPySvn.SvnStatusMonitorThread ^_^Z^z4yeric4.Plugins.VcsPlugins.vcsSubversion.SvnCommitDialog.html4eric4.Plugins.VcsPlugins.vcsSubversion.SvnCommitDialog|3{eric4.Plugins.VcsPlugins.vcsSubversion.SvnCommandDialog.html3eric4.Plugins.VcsPlugins.vcsSubversion.SvnCommandDialog2 eric4.Plugins.VcsPlugins.vcsSubversion.SvnChangeListsDialog.html2eric4.Plugins.VcsPlugins.vcsSubversion.SvnChangeListsDialogx1weric4.Plugins.VcsPlugins.vcsSubversion.SvnBlameDialog.html1eric4.Plugins.VcsPlugins.vcsSubversion.SvnBlameDialogu0ueric4.Plugins.VcsPlugins.vcsSubversion.ProjectHelper.html0eric4.Plugins.VcsPlugins.vcsSubversion.ProjectHelper/ eric4.Plugins.VcsPlugins.vcsSubversion.ProjectBrowserHelper.html/eric4.Plugins.VcsPlugins.vcsSubversion.ProjectBrowserHelper.%eric4.Plugins.VcsPlugins.vcsSubversion.ConfigurationPage.SubversionPage.html.eric4.Plugins.VcsPlugins.vcsSubversion.ConfigurationPage.SubversionPage (;eric4.Plugins.VcsPlugins.vcsSubversion.SvnNewProjectOptionsDialog.html;eric4.Plugins.VcsPlugins.vcsSubversion.SvnNewProjectOptionsDialogx:weric4.Plugins.VcsPlugins.vcsSubversion.SvnMergeDialog.html:eric4.Plugins.VcsPlugins.vcsSubversion.SvnMergeDialogs9}seric4.Plugins.VcsPlugins.vcsSubversion.SvnLogDialog.html9eric4.Plugins.VcsPlugins.vcsSubversion.SvnLogDialog8 eric4.Plugins.VcsPlugins.vcsSubversion.SvnLogBrowserDialog.html8eric4.Plugins.VcsPlugins.vcsSubversion.SvnLogBrowserDialogu7ueric4.Plugins.VcsPlugins.vcsSubversion.SvnDiffDialog.html7eric4.Plugins.VcsPlugins.vcsSubversion.SvnDiffDialogm6wmeric4.Plugins.VcsPlugins.vcsSubversion.SvnDialog.html6eric4.Plugins.VcsPlugins.vcsSubversion.SvnDialogu5ueric4.Plugins.VcsPlugins.vcsSubversion.SvnCopyDialog.html5eric4.Plugins.VcsPlugins.vcsSubversion.SvnCopyDialog ewezByeric4.Plugins.VcsPlugins.vcsSubversion.SvnStatusDialog.htmlBeric4.Plugins.VcsPlugins.vcsSubversion.SvnStatusDialogAeric4.Plugins.VcsPlugins.vcsSubversion.SvnRevisionSelectionDialog.htmlAeric4.Plugins.VcsPlugins.vcsSubversion.SvnRevisionSelectionDialog@ eric4.Plugins.VcsPlugins.vcsSubversion.SvnRepoBrowserDialog.html@eric4.Plugins.VcsPlugins.vcsSubversion.SvnRepoBrowserDialog~?}eric4.Plugins.VcsPlugins.vcsSubversion.SvnRelocateDialog.html?eric4.Plugins.VcsPlugins.vcsSubversion.SvnRelocateDialog|>{eric4.Plugins.VcsPlugins.vcsSubversion.SvnPropSetDialog.html>eric4.Plugins.VcsPlugins.vcsSubversion.SvnPropSetDialog~=}eric4.Plugins.VcsPlugins.vcsSubversion.SvnPropListDialog.html=eric4.Plugins.VcsPlugins.vcsSubversion.SvnPropListDialog|<{eric4.Plugins.VcsPlugins.vcsSubversion.SvnOptionsDialog.htmldlZU_Ueric4.Project.LexerAssociationDialog.htmleric4.Project.LexerAssociationDialog[e[eric4.Project.FiletypeAssociationDialog.htmleric4.Project.FiletypeAssociationDialogYcYeric4.Project.DebuggerPropertiesDialog.htmleric4.Project.DebuggerPropertiesDialogU_Ueric4.Project.CreateDialogCodeDialog.htmleric4.Project.CreateDialogCodeDialogKUKeric4.Project.AddLanguageDialog.htmleric4.Project.AddLanguageDialogOYOeric4.Project.AddFoundFilesDialog.htmleric4.Project.AddFoundFilesDialogCMCeric4.Project.AddFileDialog.htmleric4.Project.AddFileDialogMWMeric4.Project.AddDirectoryDialog.htmleric4.Project.AddDirectoryDialogAKAeric4.Preferences.__init__.htmleric4.Preferences.__init__S]Seric4.Preferences.ViewProfileDialog.htmleric4.Preferences.ViewProfileDialogisieric4.Preferences.ToolGroupConfigurationDialog.htmleric4.Preferences.ToolGroupConfigurationDialog lT0nlQ#[Qeric4.Project.ProjectOthersBrowser.htmleric4.Project.ProjectOthersBrowserY"cYeric4.Project.ProjectInterfacesBrowser.htmleric4.Project.ProjectInterfacesBrowserO!YOeric4.Project.ProjectFormsBrowser.htmleric4.Project.ProjectFormsBrowserm wmeric4.Project.ProjectBrowserSortFilterProxyModel.htmleric4.Project.ProjectBrowserSortFilterProxyModelOYOeric4.Project.ProjectBrowserModel.htmleric4.Project.ProjectBrowserModelOYOeric4.Project.ProjectBrowserFlags.htmleric4.Project.ProjectBrowserFlagsEOEeric4.Project.ProjectBrowser.htmleric4.Project.ProjectBrowserMWMeric4.Project.ProjectBaseBrowser.htmleric4.Project.ProjectBaseBrowser7A7eric4.Project.Project.htmleric4.Project.ProjectU_Ueric4.Project.NewPythonPackageDialog.htmleric4.Project.NewPythonPackageDialogQ[Qeric4.Project.NewDialogClassDialog.htmleric4.Project.NewDialogClassDialog hPHLh[.e[eric4.QScintilla.Exporters.ExporterBase.htmleric4.QScintilla.Exporters.ExporterBase;-E;eric4.QScintilla.Editor.htmleric4.QScintilla.EditorE,OEeric4.QScintilla.APIsManager.htmleric4.QScintilla.APIsManagerC+MCeric4.PyUnit.UnittestDialog.htmleric4.PyUnit.UnittestDialogQ*[Qeric4.Project.UserPropertiesDialog.htmleric4.Project.UserPropertiesDialog_)i_eric4.Project.TranslationPropertiesDialog.htmleric4.Project.TranslationPropertiesDialogY(cYeric4.Project.SpellingPropertiesDialog.htmleric4.Project.SpellingPropertiesDialogI'SIeric4.Project.PropertiesDialog.htmleric4.Project.PropertiesDialog]&g]eric4.Project.ProjectTranslationsBrowser.htmleric4.Project.ProjectTranslationsBrowserS%]Seric4.Project.ProjectSourcesBrowser.htmleric4.Project.ProjectSourcesBrowserW$aWeric4.Project.ProjectResourcesBrowser.htmleric4.Project.ProjectResourcesBrowser ^F8V^M9WMeric4.QScintilla.Lexers.LexerCPP.htmleric4.QScintilla.Lexers.LexerCPPQ8[Qeric4.QScintilla.Lexers.LexerCMake.htmleric4.QScintilla.Lexers.LexerCMakeQ7[Qeric4.QScintilla.Lexers.LexerBatch.htmleric4.QScintilla.Lexers.LexerBatchO6YOeric4.QScintilla.Lexers.LexerBash.htmleric4.QScintilla.Lexers.LexerBashG5QGeric4.QScintilla.Lexers.Lexer.htmleric4.QScintilla.Lexers.LexerC4MCeric4.QScintilla.GotoDialog.htmleric4.QScintilla.GotoDialogS3]Seric4.QScintilla.Exporters.__init__.htmleric4.QScintilla.Exporters.__init__Y2cYeric4.QScintilla.Exporters.ExporterTEX.htmleric4.QScintilla.Exporters.ExporterTEXY1cYeric4.QScintilla.Exporters.ExporterRTF.htmleric4.QScintilla.Exporters.ExporterRTFY0cYeric4.QScintilla.Exporters.ExporterPDF.htmleric4.QScintilla.Exporters.ExporterPDF[/e[eric4.QScintilla.Exporters.ExporterHTML.htmleric4.QScintilla.Exporters.ExporterHTML ZZ`Z Z[De[eric4.QScintilla.Lexers.LexerJavaScript.htmleric4.QScintilla.Lexers.LexerJavaScriptOCYOeric4.QScintilla.Lexers.LexerJava.htmleric4.QScintilla.Lexers.LexerJavaMBWMeric4.QScintilla.Lexers.LexerIDL.htmleric4.QScintilla.Lexers.LexerIDLOAYOeric4.QScintilla.Lexers.LexerHTML.htmleric4.QScintilla.Lexers.LexerHTMLY@cYeric4.QScintilla.Lexers.LexerFortran77.htmleric4.QScintilla.Lexers.LexerFortran77U?_Ueric4.QScintilla.Lexers.LexerFortran.htmleric4.QScintilla.Lexers.LexerFortranO>YOeric4.QScintilla.Lexers.LexerDiff.htmleric4.QScintilla.Lexers.LexerDiffI=SIeric4.QScintilla.Lexers.LexerD.htmleric4.QScintilla.Lexers.LexerDY<cYeric4.QScintilla.Lexers.LexerContainer.htmleric4.QScintilla.Lexers.LexerContainerS;]Seric4.QScintilla.Lexers.LexerCSharp.htmleric4.QScintilla.Lexers.LexerCSharpM:WMeric4.QScintilla.Lexers.LexerCSS.htmleric4.QScintilla.Lexers.LexerCSS FVZTFSO]Seric4.QScintilla.Lexers.LexerPython.htmleric4.QScintilla.Lexers.LexerPythonWNaWeric4.QScintilla.Lexers.LexerPygments.htmleric4.QScintilla.Lexers.LexerPygments[Me[eric4.QScintilla.Lexers.LexerProperties.htmleric4.QScintilla.Lexers.LexerProperties[Le[eric4.QScintilla.Lexers.LexerPostScript.htmleric4.QScintilla.Lexers.LexerPostScriptOKYOeric4.QScintilla.Lexers.LexerPerl.htmleric4.QScintilla.Lexers.LexerPerlSJ]Seric4.QScintilla.Lexers.LexerPascal.htmleric4.QScintilla.Lexers.LexerPascalMIWMeric4.QScintilla.Lexers.LexerPOV.htmleric4.QScintilla.Lexers.LexerPOVSH]Seric4.QScintilla.Lexers.LexerOctave.htmleric4.QScintilla.Lexers.LexerOctaveSG]Seric4.QScintilla.Lexers.LexerMatlab.htmleric4.QScintilla.Lexers.LexerMatlabWFaWeric4.QScintilla.Lexers.LexerMakefile.htmleric4.QScintilla.Lexers.LexerMakefileMEWMeric4.QScintilla.Lexers.LexerLua.htmleric4.QScintilla.Lexers.LexerLua D^lz4DU[_Ueric4.QScintilla.SearchReplaceWidget.htmleric4.QScintilla.SearchReplaceWidgetUZ_Ueric4.QScintilla.QsciScintillaCompat.htmleric4.QScintilla.QsciScintillaCompat=YG=eric4.QScintilla.Printer.htmleric4.QScintilla.PrinterCXMCeric4.QScintilla.MiniEditor.htmleric4.QScintilla.MiniEditorMWWMeric4.QScintilla.Lexers.__init__.htmleric4.QScintilla.Lexers.__init__OVYOeric4.QScintilla.Lexers.LexerYAML.htmleric4.QScintilla.Lexers.LexerYAMLMUWMeric4.QScintilla.Lexers.LexerXML.htmleric4.QScintilla.Lexers.LexerXMLOTYOeric4.QScintilla.Lexers.LexerVHDL.htmleric4.QScintilla.Lexers.LexerVHDLMSWMeric4.QScintilla.Lexers.LexerTeX.htmleric4.QScintilla.Lexers.LexerTeXMRWMeric4.QScintilla.Lexers.LexerTCL.htmleric4.QScintilla.Lexers.LexerTCLMQWMeric4.QScintilla.Lexers.LexerSQL.htmleric4.QScintilla.Lexers.LexerSQLOPYOeric4.QScintilla.Lexers.LexerRuby.htmleric4.QScintilla.Lexers.LexerRuby Ln$^~LCfMCeric4.SqlBrowser.SqlBrowser.htmleric4.SqlBrowser.SqlBrowser?eI?eric4.QScintilla.__init__.htmleric4.QScintilla.__init__CdMCeric4.QScintilla.ZoomDialog.htmleric4.QScintilla.ZoomDialogackaeric4.QScintilla.TypingCompleters.__init__.htmleric4.QScintilla.TypingCompleters.__init__kbukeric4.QScintilla.TypingCompleters.CompleterRuby.htmleric4.QScintilla.TypingCompleters.CompleterRubyoayoeric4.QScintilla.TypingCompleters.CompleterPython.htmleric4.QScintilla.TypingCompleters.CompleterPythonk`ukeric4.QScintilla.TypingCompleters.CompleterBase.htmleric4.QScintilla.TypingCompleters.CompleterBaseU__Ueric4.QScintilla.SpellCheckingDialog.htmleric4.QScintilla.SpellCheckingDialogG^QGeric4.QScintilla.SpellChecker.htmleric4.QScintilla.SpellCheckerS]]Seric4.QScintilla.ShellHistoryDialog.htmleric4.QScintilla.ShellHistoryDialog9\C9eric4.QScintilla.Shell.htmleric4.QScintilla.Shell ^VZP^;qE;eric4.Tools.TRPreviewer.htmleric4.Tools.TRPreviewerIpSIeric4.Templates.TemplateViewer.htmleric4.Templates.TemplateViewereooeeric4.Templates.TemplateSingleVariableDialog.htmleric4.Templates.TemplateSingleVariableDialog]ng]eric4.Templates.TemplatePropertiesDialog.htmleric4.Templates.TemplatePropertiesDialogkmukeric4.Templates.TemplateMultipleVariablesDialog.htmleric4.Templates.TemplateMultipleVariablesDialog9lC9eric4.Tasks.TaskViewer.htmleric4.Tasks.TaskViewerMkWMeric4.Tasks.TaskPropertiesDialog.htmleric4.Tasks.TaskPropertiesDialogQj[Qeric4.Tasks.TaskFilterConfigDialog.htmleric4.Tasks.TaskFilterConfigDialogUi_Ueric4.SqlBrowser.SqlConnectionWidget.htmleric4.SqlBrowser.SqlConnectionWidgetUh_Ueric4.SqlBrowser.SqlConnectionDialog.htmleric4.SqlBrowser.SqlConnectionDialogOgYOeric4.SqlBrowser.SqlBrowserWidget.htmleric4.SqlBrowser.SqlBrowserWidget 4t6*d.z4CMCeric4.UI.FindFileNameDialog.htmleric4.UI.FindFileNameDialog;E;eric4.UI.FindFileDialog.htmleric4.UI.FindFileDialog;~E;eric4.UI.ErrorLogDialog.htmleric4.UI.ErrorLogDialog5}?5eric4.UI.EmailDialog.htmleric4.UI.EmailDialog3|=3eric4.UI.DiffDialog.htmleric4.UI.DiffDialogY{cYeric4.UI.DeleteFilesConfirmationDialog.htmleric4.UI.DeleteFilesConfirmationDialog+z5+eric4.UI.Config.htmleric4.UI.Config9yC9eric4.UI.CompareDialog.htmleric4.UI.CompareDialogUx_Ueric4.UI.BrowserSortFilterProxyModel.htmleric4.UI.BrowserSortFilterProxyModel7wA7eric4.UI.BrowserModel.htmleric4.UI.BrowserModel-v7-eric4.UI.Browser.htmleric4.UI.BrowserGuQGeric4.UI.AuthenticationDialog.htmleric4.UI.AuthenticationDialog;tE;eric4.Tools.UIPreviewer.htmleric4.Tools.UIPreviewer;sE;eric4.Tools.TrayStarter.htmleric4.Tools.TrayStarterKrUKeric4.Tools.TRSingleApplication.htmleric4.Tools.TRSingleApplication Ln4L>LO YOeric4.Utilities.SingleApplication.html eric4.Utilities.SingleApplicationE OEeric4.Utilities.ModuleParser.html eric4.Utilities.ModuleParserU _Ueric4.Utilities.ClassBrowsers.rbclbr.html eric4.Utilities.ClassBrowsers.rbclbrU _Ueric4.Utilities.ClassBrowsers.pyclbr.html eric4.Utilities.ClassBrowsers.pyclbrW aWeric4.Utilities.ClassBrowsers.idlclbr.html eric4.Utilities.ClassBrowsers.idlclbrYcYeric4.Utilities.ClassBrowsers.__init__.htmleric4.Utilities.ClassBrowsers.__init__gqgeric4.Utilities.ClassBrowsers.ClbrBaseClasses.htmleric4.Utilities.ClassBrowsers.ClbrBaseClasses?I?eric4.Utilities.AutoSaver.htmleric4.Utilities.AutoSaver9C9eric4.UI.UserInterface.htmleric4.UI.UserInterface7A7eric4.UI.SplashScreen.htmleric4.UI.SplashScreen5?5eric4.UI.PixmapCache.htmleric4.UI.PixmapCache-7-eric4.UI.LogView.htmleric4.UI.LogView'1'eric4.UI.Info.htmleric4.UI.Info <Lv*\(<AKAeric4.ViewManager.__init__.htmleric4.ViewManager.__init__GQGeric4.ViewManager.ViewManager.htmleric4.ViewManager.ViewManager[e[eric4.ViewManager.BookmarkedFilesDialog.htmleric4.ViewManager.BookmarkedFilesDialog1;1eric4.VCS.__init__.htmleric4.VCS.__init__=G=eric4.VCS.VersionControl.htmleric4.VCS.VersionControlGQGeric4.VCS.StatusMonitorThread.htmleric4.VCS.StatusMonitorThreadAKAeric4.VCS.StatusMonitorLed.htmleric4.VCS.StatusMonitorLedISIeric4.VCS.RepositoryInfoDialog.htmleric4.VCS.RepositoryInfoDialog;E;eric4.VCS.ProjectHelper.htmleric4.VCS.ProjectHelperISIeric4.VCS.ProjectBrowserHelper.htmleric4.VCS.ProjectBrowserHelperISIeric4.VCS.CommandOptionsDialog.htmleric4.VCS.CommandOptionsDialog3=3eric4.Utilities.uic.htmleric4.Utilities.uic=G=eric4.Utilities.__init__.htmleric4.Utilities.__init__;E;eric4.Utilities.Startup.htmleric4.Utilities.Startup Zt>r6f0Z;,E;eric4.eric4_trpreviewer.html,eric4.eric4_trpreviewer-+7-eric4.eric4_tray.html+eric4.eric4_tray9*C9eric4.eric4_sqlbrowser.html*eric4.eric4_sqlbrowser))3)eric4.eric4_re.html)eric4.eric4_re3(=3eric4.eric4_qregexp.html(eric4.eric4_qregexpC'MCeric4.eric4_pluginuninstall.html'eric4.eric4_pluginuninstallE&OEeric4.eric4_pluginrepository.html&eric4.eric4_pluginrepository?%I?eric4.eric4_plugininstall.html%eric4.eric4_plugininstall9$C9eric4.eric4_iconeditor.html$eric4.eric4_iconeditor1#;1eric4.eric4_editor.html#eric4.eric4_editor+"5+eric4.eric4_doc.html"eric4.eric4_doc-!7-eric4.eric4_diff.html!eric4.eric4_diff7 A7eric4.eric4_configure.html eric4.eric4_configure3=3eric4.eric4_compare.htmleric4.eric4_compare+5+eric4.eric4_api.htmleric4.eric4_api#-#eric4.eric4.htmleric4.eric45?5eric4.compileUiFiles.htmleric4.compileUiFiles 2NR$^h23=C-index-eric4.E4Graphics.html=eric4.E4GraphicsC<S=index-eric4.DocumentationTools.html9#index-eric4.E4Gui.html>eric4.E4Gui 9Bx*V9zX sindex-eric4.Plugins.VcsPlugins.vcsPySvn.ConfigurationPage.htmlXeric4.Plugins.VcsPlugins.vcsPySvn.ConfigurationPageCWS=index-eric4.Plugins.VcsPlugins.htmlWeric4.Plugins.VcsPluginsWVgQindex-eric4.Plugins.DocumentationPlugins.htmlVeric4.Plugins.DocumentationPluginsgUwaindex-eric4.Plugins.DocumentationPlugins.Ericdoc.htmlUeric4.Plugins.DocumentationPlugins.EricdocgTwaindex-eric4.Plugins.DocumentationPlugins.Ericapi.htmlTeric4.Plugins.DocumentationPlugins.EricapiKS[Eindex-eric4.Plugins.CheckerPlugins.htmlSeric4.Plugins.CheckerPlugins]RmWindex-eric4.Plugins.CheckerPlugins.Tabnanny.htmlReric4.Plugins.CheckerPlugins.TabnannygQwaindex-eric4.Plugins.CheckerPlugins.SyntaxChecker.htmlQeric4.Plugins.CheckerPlugins.SyntaxCheckerEPU?index-eric4.Plugins.AboutPlugin.htmlPeric4.Plugins.AboutPlugin9OI3index-eric4.PluginManager.htmlOeric4.PluginManager7NG1index-eric4.MultiProject.htmlNeric4.MultiProject X TXma}gindex-eric4.Plugins.WizardPlugins.ColorDialogWizard.htmlaeric4.Plugins.WizardPlugins.ColorDialogWizardS`cMindex-eric4.Plugins.ViewManagerPlugins.html`eric4.Plugins.ViewManagerPluginsg_waindex-eric4.Plugins.ViewManagerPlugins.Workspace.html_eric4.Plugins.ViewManagerPlugins.Workspacec^s]index-eric4.Plugins.ViewManagerPlugins.Tabview.html^eric4.Plugins.ViewManagerPlugins.Tabviewc]s]index-eric4.Plugins.ViewManagerPlugins.MdiArea.html]eric4.Plugins.ViewManagerPlugins.MdiAreag\waindex-eric4.Plugins.ViewManagerPlugins.Listspace.html\eric4.Plugins.ViewManagerPlugins.Listspace_[oYindex-eric4.Plugins.VcsPlugins.vcsSubversion.html[eric4.Plugins.VcsPlugins.vcsSubversionZ}index-eric4.Plugins.VcsPlugins.vcsSubversion.ConfigurationPage.htmlZeric4.Plugins.VcsPlugins.vcsSubversion.ConfigurationPageUYeOindex-eric4.Plugins.VcsPlugins.vcsPySvn.htmlYeric4.Plugins.VcsPlugins.vcsPySvn 2$Ft(b2-l='index-eric4.Project.htmlleric4.Project5kE/index-eric4.Preferences.htmlkeric4.Preferences[jkUindex-eric4.Preferences.ConfigurationPages.htmljeric4.Preferences.ConfigurationPages-i='index-eric4.Plugins.htmlieric4.PluginsIhYCindex-eric4.Plugins.WizardPlugins.htmlheric4.Plugins.WizardPluginsegu_index-eric4.Plugins.WizardPlugins.QRegExpWizard.htmlgeric4.Plugins.WizardPlugins.QRegExpWizardgfwaindex-eric4.Plugins.WizardPlugins.PyRegExpWizard.htmlferic4.Plugins.WizardPlugins.PyRegExpWizardke{eindex-eric4.Plugins.WizardPlugins.MessageBoxWizard.htmleeric4.Plugins.WizardPlugins.MessageBoxWizardmd}gindex-eric4.Plugins.WizardPlugins.InputDialogWizard.htmlderic4.Plugins.WizardPlugins.InputDialogWizardkc{eindex-eric4.Plugins.WizardPlugins.FontDialogWizard.htmlceric4.Plugins.WizardPlugins.FontDialogWizardkb{eindex-eric4.Plugins.WizardPlugins.FileDialogWizard.htmlberic4.Plugins.WizardPlugins.FileDialogWizard DT ~J"#|!/index.html|Table of contents{-index-eric4.html{eric45zE/index-eric4.ViewManager.htmlzeric4.ViewManager%y5index-eric4.VCS.htmlyeric4.VCS1xA+index-eric4.Utilities.htmlxeric4.UtilitiesMw]Gindex-eric4.Utilities.ClassBrowsers.htmlweric4.Utilities.ClassBrowsers#v3index-eric4.UI.htmlveric4.UI)u9#index-eric4.Tools.htmlueric4.Tools1tA+index-eric4.Templates.htmlteric4.Templates)s9#index-eric4.Tasks.htmlseric4.Tasks3rC-index-eric4.SqlBrowser.htmlreric4.SqlBrowser3qC-index-eric4.QScintilla.htmlqeric4.QScintillaUpeOindex-eric4.QScintilla.TypingCompleters.htmlperic4.QScintilla.TypingCompletersAoQ;index-eric4.QScintilla.Lexers.htmloeric4.QScintilla.LexersGnWAindex-eric4.QScintilla.Exporters.htmlneric4.QScintilla.Exporters+m;%index-eric4.PyUnit.htmlmeric4.PyUniteric4.DataViews.CodeMetricsDialog.htmlBeric4.DataViews.CodeMetricsDialogJeric4.DataViews.PyCoverageDialog.html@eric4.DataViews.PyCoverageDialogHeric4.DataViews.PyProfileDialog.html>eric4.DataViews.PyProfileDialog:index-eric4.DebugClients.html$eric4.DebugClientsHindex-eric4.DebugClients.Python.html2eric4.DebugClients.PythonPeric4.DebugClients.Python.AsyncFile.htmlFeric4.DebugClients.Python.AsyncFileLeric4.DebugClients.Python.AsyncIO.htmlBeric4.DebugClients.Python.AsyncIOVeric4.DebugClients.Python.DCTestResult.htmlLeric4.DebugClients.Python.DCTestResultPeric4.DebugClients.Python.DebugBase.htmlFeric4.DebugClients.Python.DebugBaseTeric4.DebugClients.Python.DebugClient.htmlJeric4.DebugClients.Python.DebugClient\eric4.DebugClients.Python.DebugClientBase.htmlReric4.DebugClients.Python.DebugClientBaseleric4.DebugClients.Python.DebugClientCapabilities.htmlberic4.DebugClients.Python.DebugClientCapabilitiesberic4.DebugClients.Python.DebugClientThreads.htmlXeric4.DebugClients.Python.DebugClientThreadsTeric4.DebugClients.Python.DebugConfig.htmlJeric4.DebugClients.Python.DebugConfigXeric4.DebugClients.Python.DebugProtocol.htmlNeric4.DebugClients.Python.DebugProtocolTeric4.DebugClients.Python.DebugThread.htmlJeric4.DebugClients.Python.DebugThreadXeric4.DebugClients.Python.FlexCompleter.htmlNeric4.DebugClients.Python.FlexCompleterPeric4.DebugClients.Python.PyProfile.htmlFeric4.DebugClients.Python.PyProfileVeric4.DebugClients.Python.eric4dbgstub.htmlLeric4.DebugClients.Python.eric4dbgstubLeric4.DebugClients.Python.getpass.htmlBeric4.DebugClients.Python.getpassJindex-eric4.DebugClients.Python3.html4eric4.DebugClients.Python3Reric4.DebugClients.Python3.AsyncFile.htmlHeric4.DebugClients.Python3.AsyncFileNeric4.DebugClients.Python3.AsyncIO.htmlDeric4.DebugClients.Python3.AsyncIOXeric4.DebugClients.Python3.DCTestResult.htmlNeric4.DebugClients.Python3.DCTestResultReric4.DebugClients.Python3.DebugBase.htmlHeric4.DebugClients.Python3.DebugBaseVeric4.DebugClients.Python3.DebugClient.htmlLeric4.DebugClients.Python3.DebugClient^eric4.DebugClients.Python3.DebugClientBase.htmlTeric4.DebugClients.Python3.DebugClientBaseneric4.DebugClients.Python3.DebugClientCapabilities.htmlderic4.DebugClients.Python3.DebugClientCapabilitiesderic4.DebugClients.Python3.DebugClientThreads.htmlZeric4.DebugClients.Python3.DebugClientThreadsVeric4.DebugClients.Python3.DebugConfig.htmlLeric4.DebugClients.Python3.DebugConfigZeric4.DebugClients.Python3.DebugProtocol.htmlPeric4.DebugClients.Python3.DebugProtocolVeric4.DebugClients.Python3.DebugThread.htmlLeric4.DebugClients.Python3.DebugThreadZeric4.DebugClients.Python3.FlexCompleter.htmlPeric4.DebugClients.Python3.FlexCompleterReric4.DebugClients.Python3.PyProfile.htmlHeric4.DebugClients.Python3.PyProfileXeric4.DebugClients.Python3.eric4dbgstub.htmlNeric4.DebugClients.Python3.eric4dbgstubNeric4.DebugClients.Python3.getpass.htmlDeric4.DebugClients.Python3.getpassDindex-eric4.DebugClients.Ruby.html.eric4.DebugClients.RubyLeric4.DebugClients.Ruby.AsyncFile.htmlBeric4.DebugClients.Ruby.AsyncFileHeric4.DebugClients.Ruby.AsyncIO.html>eric4.DebugClients.Ruby.AsyncIOLeric4.DebugClients.Ruby.Completer.htmlBeric4.DebugClients.Ruby.CompleterFeric4.DebugClients.Ruby.Config.html<eric4.DebugClients.Ruby.ConfigPeric4.DebugClients.Ruby.DebugClient.htmlFeric4.DebugClients.Ruby.DebugClientderic4.DebugClients.Ruby.DebugClientBaseModule.htmlZeric4.DebugClients.Ruby.DebugClientBaseModuleheric4.DebugClients.Ruby.DebugClientCapabilities.html^eric4.DebugClients.Ruby.DebugClientCapabilitiesTeric4.DebugClients.Ruby.DebugProtocol.htmlJeric4.DebugClients.Ruby.DebugProtocolLeric4.DebugClients.Ruby.DebugQuit.htmlBeric4.DebugClients.Ruby.DebugQuitJeric4.DebugClients.Ruby.Debuggee.html@eric4.DebugClients.Ruby.Debuggee2index-eric4.Debugger.htmleric4.DebuggerFeric4.Debugger.BreakPointModel.html<eric4.Debugger.BreakPointModelHeric4.Debugger.BreakPointViewer.html>eric4.Debugger.BreakPointViewer4eric4.Debugger.Config.html*eric4.Debugger.ConfigVeric4.Debugger.DebugClientCapabilities.htmlLeric4.Debugger.DebugClientCapabilitiesBeric4.Debugger.DebugProtocol.html8eric4.Debugger.DebugProtocol>eric4.Debugger.DebugServer.html4eric4.Debugger.DebugServer6eric4.Debugger.DebugUI.html,eric4.Debugger.DebugUI>eric4.Debugger.DebugViewer.html4eric4.Debugger.DebugViewerReric4.Debugger.DebuggerInterfaceNone.htmlHeric4.Debugger.DebuggerInterfaceNoneVeric4.Debugger.DebuggerInterfacePython.htmlLeric4.Debugger.DebuggerInterfacePythonXeric4.Debugger.DebuggerInterfacePython3.htmlNeric4.Debugger.DebuggerInterfacePython3Reric4.Debugger.DebuggerInterfaceRuby.htmlHeric4.Debugger.DebuggerInterfaceRubyPeric4.Debugger.EditBreakpointDialog.htmlFeric4.Debugger.EditBreakpointDialogPeric4.Debugger.EditWatchpointDialog.htmlFeric4.Debugger.EditWatchpointDialogFeric4.Debugger.ExceptionLogger.html<eric4.Debugger.ExceptionLoggerTeric4.Debugger.ExceptionsFilterDialog.htmlJeric4.Debugger.ExceptionsFilterDialog>eric4.Debugger.StartDialog.html4eric4.Debugger.StartDialogPeric4.Debugger.VariableDetailDialog.htmlFeric4.Debugger.VariableDetailDialogReric4.Debugger.VariablesFilterDialog.htmlHeric4.Debugger.VariablesFilterDialogFeric4.Debugger.VariablesViewer.html<eric4.Debugger.VariablesViewerFeric4.Debugger.WatchPointModel.html<eric4.Debugger.WatchPointModelHeric4.Debugger.WatchPointViewer.html>eric4.Debugger.WatchPointViewerFindex-eric4.DocumentationTools.html0eric4.DocumentationToolsTeric4.DocumentationTools.APIGenerator.htmlJeric4.DocumentationTools.APIGeneratorHeric4.DocumentationTools.Config.html>eric4.DocumentationTools.ConfigXeric4.DocumentationTools.IndexGenerator.htmlNeric4.DocumentationTools.IndexGenerator\eric4.DocumentationTools.ModuleDocumentor.htmlReric4.DocumentationTools.ModuleDocumentorZeric4.DocumentationTools.QtHelpGenerator.htmlPeric4.DocumentationTools.QtHelpGeneratorberic4.DocumentationTools.TemplatesListsStyle.htmlXeric4.DocumentationTools.TemplatesListsStyleheric4.DocumentationTools.TemplatesListsStyleCSS.html^eric4.DocumentationTools.TemplatesListsStyleCSS6index-eric4.E4Graphics.html eric4.E4GraphicsBeric4.E4Graphics.E4ArrowItem.html8eric4.E4Graphics.E4ArrowItemHeric4.E4Graphics.E4GraphicsView.html>eric4.E4Graphics.E4GraphicsView,index-eric4.E4Gui.htmleric4.E4Gui2eric4.E4Gui.E4Action.html(eric4.E4Gui.E4Action:eric4.E4Gui.E4Completers.html0eric4.E4Gui.E4Completers,eric4.E4Gui.E4Led.html"eric4.E4Gui.E4Led6eric4.E4Gui.E4LineEdit.html,eric4.E4Gui.E4LineEdit6eric4.E4Gui.E4ListView.html,eric4.E4Gui.E4ListView8eric4.E4Gui.E4ModelMenu.html.eric4.E4Gui.E4ModelMenu>eric4.E4Gui.E4ModelToolBar.html4eric4.E4Gui.E4ModelToolBar4eric4.E4Gui.E4SideBar.html*eric4.E4Gui.E4SideBarHeric4.E4Gui.E4SingleApplication.html>eric4.E4Gui.E4SingleApplication@eric4.E4Gui.E4SqueezeLabels.html6eric4.E4Gui.E4SqueezeLabels8eric4.E4Gui.E4TabWidget.html.eric4.E4Gui.E4TabWidget8eric4.E4Gui.E4TableView.html.eric4.E4Gui.E4TableView@eric4.E4Gui.E4ToolBarDialog.html6eric4.E4Gui.E4ToolBarDialogBeric4.E4Gui.E4ToolBarManager.html8eric4.E4Gui.E4ToolBarManager4eric4.E4Gui.E4ToolBox.html*eric4.E4Gui.E4ToolBoxVeric4.E4Gui.E4TreeSortFilterProxyModel.htmlLeric4.E4Gui.E4TreeSortFilterProxyModel6eric4.E4Gui.E4TreeView.html,eric4.E4Gui.E4TreeView4index-eric4.E4Network.htmleric4.E4Networkberic4.E4Network.E4NetworkHeaderDetailsDialog.htmlXeric4.E4Network.E4NetworkHeaderDetailsDialogJeric4.E4Network.E4NetworkMonitor.html@eric4.E4Network.E4NetworkMonitorTeric4.E4Network.E4NetworkProxyFactory.htmlJeric4.E4Network.E4NetworkProxyFactory,index-eric4.E4XML.htmleric4.E4XML.eric4.E4XML.Config.html$eric4.E4XML.ConfigTeric4.E4XML.DebuggerPropertiesHandler.htmlJeric4.E4XML.DebuggerPropertiesHandlerReric4.E4XML.DebuggerPropertiesWriter.htmlHeric4.E4XML.DebuggerPropertiesWriterTeric4.E4XML.HighlightingStylesHandler.htmlJeric4.E4XML.HighlightingStylesHandlerReric4.E4XML.HighlightingStylesWriter.htmlHeric4.E4XML.HighlightingStylesWriterHeric4.E4XML.MultiProjectHandler.html>eric4.E4XML.MultiProjectHandlerFeric4.E4XML.MultiProjectWriter.html<eric4.E4XML.MultiProjectWriterPeric4.E4XML.PluginRepositoryHandler.htmlFeric4.E4XML.PluginRepositoryHandler>eric4.E4XML.ProjectHandler.html4eric4.E4XML.ProjectHandler<eric4.E4XML.ProjectWriter.html2eric4.E4XML.ProjectWriter>eric4.E4XML.SessionHandler.html4eric4.E4XML.SessionHandler<eric4.E4XML.SessionWriter.html2eric4.E4XML.SessionWriterBeric4.E4XML.ShortcutsHandler.html8eric4.E4XML.ShortcutsHandler@eric4.E4XML.ShortcutsWriter.html6eric4.E4XML.ShortcutsWriter:eric4.E4XML.TasksHandler.html0eric4.E4XML.TasksHandler8eric4.E4XML.TasksWriter.html.eric4.E4XML.TasksWriterBeric4.E4XML.TemplatesHandler.html8eric4.E4XML.TemplatesHandler@eric4.E4XML.TemplatesWriter.html6eric4.E4XML.TemplatesWriterFeric4.E4XML.UserProjectHandler.html<eric4.E4XML.UserProjectHandlerDeric4.E4XML.UserProjectWriter.html:eric4.E4XML.UserProjectWriterDeric4.E4XML.XMLEntityResolver.html:eric4.E4XML.XMLEntityResolver@eric4.E4XML.XMLErrorHandler.html6eric4.E4XML.XMLErrorHandler>eric4.E4XML.XMLHandlerBase.html4eric4.E4XML.XMLHandlerBaseBeric4.E4XML.XMLMessageDialog.html8eric4.E4XML.XMLMessageDialog:eric4.E4XML.XMLUtilities.html0eric4.E4XML.XMLUtilities<eric4.E4XML.XMLWriterBase.html2eric4.E4XML.XMLWriterBase0index-eric4.Globals.htmleric4.Globals6eric4.Globals.__init__.html,eric4.Globals.__init__2index-eric4.Graphics.htmleric4.GraphicsLeric4.Graphics.ApplicationDiagram.htmlBeric4.Graphics.ApplicationDiagramFeric4.Graphics.AssociationItem.html<eric4.Graphics.AssociationItem:eric4.Graphics.ClassItem.html0eric4.Graphics.ClassItemJeric4.Graphics.GraphicsUtilities.html@eric4.Graphics.GraphicsUtilitiesDeric4.Graphics.ImportsDiagram.html:eric4.Graphics.ImportsDiagram<eric4.Graphics.ModuleItem.html2eric4.Graphics.ModuleItemDeric4.Graphics.PackageDiagram.html:eric4.Graphics.PackageDiagram>eric4.Graphics.PackageItem.html4eric4.Graphics.PackageItemBeric4.Graphics.PixmapDiagram.html8eric4.Graphics.PixmapDiagram<eric4.Graphics.SvgDiagram.html2eric4.Graphics.SvgDiagramFeric4.Graphics.UMLClassDiagram.html<eric4.Graphics.UMLClassDiagram:eric4.Graphics.UMLDialog.html0eric4.Graphics.UMLDialogFeric4.Graphics.UMLGraphicsView.html<eric4.Graphics.UMLGraphicsView6eric4.Graphics.UMLItem.html,eric4.Graphics.UMLItemLeric4.Graphics.UMLSceneSizeDialog.htmlBeric4.Graphics.UMLSceneSizeDialog<eric4.Graphics.ZoomDialog.html2eric4.Graphics.ZoomDialog6index-eric4.Helpviewer.html eric4.HelpviewerFindex-eric4.Helpviewer.AdBlock.html0eric4.Helpviewer.AdBlockderic4.Helpviewer.AdBlock.AdBlockAccessHandler.htmlZeric4.Helpviewer.AdBlock.AdBlockAccessHandlerperic4.Helpviewer.AdBlock.AdBlockBlockedNetworkReply.htmlferic4.Helpviewer.AdBlock.AdBlockBlockedNetworkReplyVeric4.Helpviewer.AdBlock.AdBlockDialog.htmlLeric4.Helpviewer.AdBlock.AdBlockDialogXeric4.Helpviewer.AdBlock.AdBlockManager.htmlNeric4.Helpviewer.AdBlock.AdBlockManagerTeric4.Helpviewer.AdBlock.AdBlockModel.htmlJeric4.Helpviewer.AdBlock.AdBlockModelXeric4.Helpviewer.AdBlock.AdBlockNetwork.htmlNeric4.Helpviewer.AdBlock.AdBlockNetworkReric4.Helpviewer.AdBlock.AdBlockPage.htmlHeric4.Helpviewer.AdBlock.AdBlockPageReric4.Helpviewer.AdBlock.AdBlockRule.htmlHeric4.Helpviewer.AdBlock.AdBlockRuleberic4.Helpviewer.AdBlock.AdBlockSubscription.htmlXeric4.Helpviewer.AdBlock.AdBlockSubscriptionJindex-eric4.Helpviewer.Bookmarks.html4eric4.Helpviewer.Bookmarksberic4.Helpviewer.Bookmarks.AddBookmarkDialog.htmlXeric4.Helpviewer.Bookmarks.AddBookmarkDialogXeric4.Helpviewer.Bookmarks.BookmarkNode.htmlNeric4.Helpviewer.Bookmarks.BookmarkNode^eric4.Helpviewer.Bookmarks.BookmarksDialog.htmlTeric4.Helpviewer.Bookmarks.BookmarksDialog`eric4.Helpviewer.Bookmarks.BookmarksManager.htmlVeric4.Helpviewer.Bookmarks.BookmarksManagerZeric4.Helpviewer.Bookmarks.BookmarksMenu.htmlPeric4.Helpviewer.Bookmarks.BookmarksMenu\eric4.Helpviewer.Bookmarks.BookmarksModel.htmlReric4.Helpviewer.Bookmarks.BookmarksModel`eric4.Helpviewer.Bookmarks.BookmarksToolBar.htmlVeric4.Helpviewer.Bookmarks.BookmarksToolBar`eric4.Helpviewer.Bookmarks.DefaultBookmarks.htmlVeric4.Helpviewer.Bookmarks.DefaultBookmarksTeric4.Helpviewer.Bookmarks.XbelReader.htmlJeric4.Helpviewer.Bookmarks.XbelReaderTeric4.Helpviewer.Bookmarks.XbelWriter.htmlJeric4.Helpviewer.Bookmarks.XbelWriterJindex-eric4.Helpviewer.CookieJar.html4eric4.Helpviewer.CookieJarferic4.Helpviewer.CookieJar.CookieDetailsDialog.html\eric4.Helpviewer.CookieJar.CookieDetailsDialogjeric4.Helpviewer.CookieJar.CookieExceptionsModel.html`eric4.Helpviewer.CookieJar.CookieExceptionsModelReric4.Helpviewer.CookieJar.CookieJar.htmlHeric4.Helpviewer.CookieJar.CookieJarVeric4.Helpviewer.CookieJar.CookieModel.htmlLeric4.Helpviewer.CookieJar.CookieModelteric4.Helpviewer.CookieJar.CookiesConfigurationDialog.htmljeric4.Helpviewer.CookieJar.CookiesConfigurationDialogZeric4.Helpviewer.CookieJar.CookiesDialog.htmlPeric4.Helpviewer.CookieJar.CookiesDialogneric4.Helpviewer.CookieJar.CookiesExceptionsDialog.htmlderic4.Helpviewer.CookieJar.CookiesExceptionsDialogFindex-eric4.Helpviewer.History.html0eric4.Helpviewer.History\eric4.Helpviewer.History.HistoryCompleter.htmlReric4.Helpviewer.History.HistoryCompleterVeric4.Helpviewer.History.HistoryDialog.htmlLeric4.Helpviewer.History.HistoryDialog`eric4.Helpviewer.History.HistoryFilterModel.htmlVeric4.Helpviewer.History.HistoryFilterModelXeric4.Helpviewer.History.HistoryManager.htmlNeric4.Helpviewer.History.HistoryManagerReric4.Helpviewer.History.HistoryMenu.htmlHeric4.Helpviewer.History.HistoryMenuTeric4.Helpviewer.History.HistoryModel.htmlJeric4.Helpviewer.History.HistoryModel\eric4.Helpviewer.History.HistoryTreeModel.htmlReric4.Helpviewer.History.HistoryTreeModelFindex-eric4.Helpviewer.Network.html0eric4.Helpviewer.Network`eric4.Helpviewer.Network.AboutAccessHandler.htmlVeric4.Helpviewer.Network.AboutAccessHandler^eric4.Helpviewer.Network.EmptyNetworkReply.htmlTeric4.Helpviewer.Network.EmptyNetworkReplyderic4.Helpviewer.Network.NetworkAccessManager.htmlZeric4.Helpviewer.Network.NetworkAccessManagerneric4.Helpviewer.Network.NetworkAccessManagerProxy.htmlderic4.Helpviewer.Network.NetworkAccessManagerProxy\eric4.Helpviewer.Network.NetworkDiskCache.htmlReric4.Helpviewer.Network.NetworkDiskCache|eric4.Helpviewer.Network.NetworkProtocolUnknownErrorReply.htmlreric4.Helpviewer.Network.NetworkProtocolUnknownErrorReplyTeric4.Helpviewer.Network.NetworkReply.htmlJeric4.Helpviewer.Network.NetworkReply^eric4.Helpviewer.Network.PyrcAccessHandler.htmlTeric4.Helpviewer.Network.PyrcAccessHandlerberic4.Helpviewer.Network.QtHelpAccessHandler.htmlXeric4.Helpviewer.Network.QtHelpAccessHandlerberic4.Helpviewer.Network.SchemeAccessHandler.htmlXeric4.Helpviewer.Network.SchemeAccessHandlerLindex-eric4.Helpviewer.OpenSearch.html6eric4.Helpviewer.OpenSearchreric4.Helpviewer.OpenSearch.OpenSearchDefaultEngines.htmlheric4.Helpviewer.OpenSearch.OpenSearchDefaultEnginesberic4.Helpviewer.OpenSearch.OpenSearchDialog.htmlXeric4.Helpviewer.OpenSearch.OpenSearchDialogjeric4.Helpviewer.OpenSearch.OpenSearchEditDialog.html`eric4.Helpviewer.OpenSearch.OpenSearchEditDialogberic4.Helpviewer.OpenSearch.OpenSearchEngine.htmlXeric4.Helpviewer.OpenSearch.OpenSearchEngineneric4.Helpviewer.OpenSearch.OpenSearchEngineAction.htmlderic4.Helpviewer.OpenSearch.OpenSearchEngineActionleric4.Helpviewer.OpenSearch.OpenSearchEngineModel.htmlberic4.Helpviewer.OpenSearch.OpenSearchEngineModelderic4.Helpviewer.OpenSearch.OpenSearchManager.htmlZeric4.Helpviewer.OpenSearch.OpenSearchManagerberic4.Helpviewer.OpenSearch.OpenSearchReader.htmlXeric4.Helpviewer.OpenSearch.OpenSearchReaderberic4.Helpviewer.OpenSearch.OpenSearchWriter.htmlXeric4.Helpviewer.OpenSearch.OpenSearchWriterJindex-eric4.Helpviewer.Passwords.html4eric4.Helpviewer.Passwords^eric4.Helpviewer.Passwords.PasswordManager.htmlTeric4.Helpviewer.Passwords.PasswordManagerZeric4.Helpviewer.Passwords.PasswordModel.htmlPeric4.Helpviewer.Passwords.PasswordModel^eric4.Helpviewer.Passwords.PasswordsDialog.htmlTeric4.Helpviewer.Passwords.PasswordsDialogHeric4.Helpviewer.DownloadDialog.html>eric4.Helpviewer.DownloadDialogFeric4.Helpviewer.HTMLResources.html<eric4.Helpviewer.HTMLResourcesFeric4.Helpviewer.HelpBrowserWV.html<eric4.Helpviewer.HelpBrowserWV`eric4.Helpviewer.HelpClearPrivateDataDialog.htmlVeric4.Helpviewer.HelpClearPrivateDataDialogNeric4.Helpviewer.HelpDocsInstaller.htmlDeric4.Helpviewer.HelpDocsInstallerJeric4.Helpviewer.HelpIndexWidget.html@eric4.Helpviewer.HelpIndexWidgetReric4.Helpviewer.HelpLanguagesDialog.htmlHeric4.Helpviewer.HelpLanguagesDialogLeric4.Helpviewer.HelpSearchWidget.htmlBeric4.Helpviewer.HelpSearchWidgetFeric4.Helpviewer.HelpTocWidget.html<eric4.Helpviewer.HelpTocWidgetJeric4.Helpviewer.HelpTopicDialog.html@eric4.Helpviewer.HelpTopicDialogReric4.Helpviewer.HelpWebSearchWidget.htmlHeric4.Helpviewer.HelpWebSearchWidget@eric4.Helpviewer.HelpWindow.html6eric4.Helpviewer.HelpWindowReric4.Helpviewer.JavaScriptResources.htmlHeric4.Helpviewer.JavaScriptResources^eric4.Helpviewer.QtHelpDocumentationDialog.htmlTeric4.Helpviewer.QtHelpDocumentationDialogReric4.Helpviewer.QtHelpFiltersDialog.htmlHeric4.Helpviewer.QtHelpFiltersDialogDeric4.Helpviewer.SearchWidget.html:eric4.Helpviewer.SearchWidget6index-eric4.IconEditor.html eric4.IconEditorFindex-eric4.IconEditor.cursors.html0eric4.IconEditor.cursorsPeric4.IconEditor.cursors.cursors_rc.htmlFeric4.IconEditor.cursors.cursors_rcHeric4.IconEditor.IconEditorGrid.html>eric4.IconEditor.IconEditorGridNeric4.IconEditor.IconEditorPalette.htmlDeric4.IconEditor.IconEditorPaletteLeric4.IconEditor.IconEditorWindow.htmlBeric4.IconEditor.IconEditorWindowHeric4.IconEditor.IconSizeDialog.html>eric4.IconEditor.IconSizeDialogHeric4.IconEditor.IconZoomDialog.html>eric4.IconEditor.IconZoomDialog,index-eric4.KdeQt.htmleric4.KdeQt<eric4.KdeQt.KQApplication.html2eric4.KdeQt.KQApplication<eric4.KdeQt.KQColorDialog.html2eric4.KdeQt.KQColorDialog:eric4.KdeQt.KQFileDialog.html0eric4.KdeQt.KQFileDialog:eric4.KdeQt.KQFontDialog.html0eric4.KdeQt.KQFontDialog<eric4.KdeQt.KQInputDialog.html2eric4.KdeQt.KQInputDialog:eric4.KdeQt.KQMainWindow.html0eric4.KdeQt.KQMainWindow:eric4.KdeQt.KQMessageBox.html0eric4.KdeQt.KQMessageBox<eric4.KdeQt.KQPrintDialog.html2eric4.KdeQt.KQPrintDialog4eric4.KdeQt.KQPrinter.html*eric4.KdeQt.KQPrinterBeric4.KdeQt.KQProgressDialog.html8eric4.KdeQt.KQProgressDialog2eric4.KdeQt.__init__.html(eric4.KdeQt.__init__:index-eric4.MultiProject.html$eric4.MultiProjectPeric4.MultiProject.AddProjectDialog.htmlFeric4.MultiProject.AddProjectDialogHeric4.MultiProject.MultiProject.html>eric4.MultiProject.MultiProjectVeric4.MultiProject.MultiProjectBrowser.htmlLeric4.MultiProject.MultiProjectBrowserPeric4.MultiProject.PropertiesDialog.htmlFeric4.MultiProject.PropertiesDialog<index-eric4.PluginManager.html&eric4.PluginManagerXeric4.PluginManager.PluginDetailsDialog.htmlNeric4.PluginManager.PluginDetailsDialogReric4.PluginManager.PluginExceptions.htmlHeric4.PluginManager.PluginExceptionsReric4.PluginManager.PluginInfoDialog.htmlHeric4.PluginManager.PluginInfoDialogXeric4.PluginManager.PluginInstallDialog.htmlNeric4.PluginManager.PluginInstallDialogLeric4.PluginManager.PluginManager.htmlBeric4.PluginManager.PluginManager^eric4.PluginManager.PluginRepositoryDialog.htmlTeric4.PluginManager.PluginRepositoryDialog\eric4.PluginManager.PluginUninstallDialog.htmlReric4.PluginManager.PluginUninstallDialog0index-eric4.Plugins.htmleric4.PluginsHindex-eric4.Plugins.AboutPlugin.html2eric4.Plugins.AboutPluginTeric4.Plugins.AboutPlugin.AboutDialog.htmlJeric4.Plugins.AboutPlugin.AboutDialogNindex-eric4.Plugins.CheckerPlugins.html8eric4.Plugins.CheckerPluginsjindex-eric4.Plugins.CheckerPlugins.SyntaxChecker.htmlTeric4.Plugins.CheckerPlugins.SyntaxCheckereric4.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheckerDialog.html|eric4.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheckerDialog`index-eric4.Plugins.CheckerPlugins.Tabnanny.htmlJeric4.Plugins.CheckerPlugins.Tabnannyferic4.Plugins.CheckerPlugins.Tabnanny.Tabnanny.html\eric4.Plugins.CheckerPlugins.Tabnanny.Tabnannyreric4.Plugins.CheckerPlugins.Tabnanny.TabnannyDialog.htmlheric4.Plugins.CheckerPlugins.Tabnanny.TabnannyDialogZindex-eric4.Plugins.DocumentationPlugins.htmlDeric4.Plugins.DocumentationPluginsjindex-eric4.Plugins.DocumentationPlugins.Ericapi.htmlTeric4.Plugins.DocumentationPlugins.Ericapieric4.Plugins.DocumentationPlugins.Ericapi.EricapiConfigDialog.html|eric4.Plugins.DocumentationPlugins.Ericapi.EricapiConfigDialogeric4.Plugins.DocumentationPlugins.Ericapi.EricapiExecDialog.htmlxeric4.Plugins.DocumentationPlugins.Ericapi.EricapiExecDialogjindex-eric4.Plugins.DocumentationPlugins.Ericdoc.htmlTeric4.Plugins.DocumentationPlugins.Ericdoceric4.Plugins.DocumentationPlugins.Ericdoc.EricdocConfigDialog.html|eric4.Plugins.DocumentationPlugins.Ericdoc.EricdocConfigDialogeric4.Plugins.DocumentationPlugins.Ericdoc.EricdocExecDialog.htmlxeric4.Plugins.DocumentationPlugins.Ericdoc.EricdocExecDialogFindex-eric4.Plugins.VcsPlugins.html0eric4.Plugins.VcsPluginsXindex-eric4.Plugins.VcsPlugins.vcsPySvn.htmlBeric4.Plugins.VcsPlugins.vcsPySvn|index-eric4.Plugins.VcsPlugins.vcsPySvn.ConfigurationPage.htmlferic4.Plugins.VcsPlugins.vcsPySvn.ConfigurationPageeric4.Plugins.VcsPlugins.vcsPySvn.ConfigurationPage.SubversionPage.htmleric4.Plugins.VcsPlugins.vcsPySvn.ConfigurationPage.SubversionPageZeric4.Plugins.VcsPlugins.vcsPySvn.Config.htmlPeric4.Plugins.VcsPlugins.vcsPySvn.Configveric4.Plugins.VcsPlugins.vcsPySvn.ProjectBrowserHelper.htmlleric4.Plugins.VcsPlugins.vcsPySvn.ProjectBrowserHelperheric4.Plugins.VcsPlugins.vcsPySvn.ProjectHelper.html^eric4.Plugins.VcsPlugins.vcsPySvn.ProjectHelperjeric4.Plugins.VcsPlugins.vcsPySvn.SvnBlameDialog.html`eric4.Plugins.VcsPlugins.vcsPySvn.SvnBlameDialogveric4.Plugins.VcsPlugins.vcsPySvn.SvnChangeListsDialog.htmlleric4.Plugins.VcsPlugins.vcsPySvn.SvnChangeListsDialogneric4.Plugins.VcsPlugins.vcsPySvn.SvnCommandDialog.htmlderic4.Plugins.VcsPlugins.vcsPySvn.SvnCommandDialogleric4.Plugins.VcsPlugins.vcsPySvn.SvnCommitDialog.htmlberic4.Plugins.VcsPlugins.vcsPySvn.SvnCommitDialog^eric4.Plugins.VcsPlugins.vcsPySvn.SvnConst.htmlTeric4.Plugins.VcsPlugins.vcsPySvn.SvnConstheric4.Plugins.VcsPlugins.vcsPySvn.SvnCopyDialog.html^eric4.Plugins.VcsPlugins.vcsPySvn.SvnCopyDialog`eric4.Plugins.VcsPlugins.vcsPySvn.SvnDialog.htmlVeric4.Plugins.VcsPlugins.vcsPySvn.SvnDialogjeric4.Plugins.VcsPlugins.vcsPySvn.SvnDialogMixin.html`eric4.Plugins.VcsPlugins.vcsPySvn.SvnDialogMixinheric4.Plugins.VcsPlugins.vcsPySvn.SvnDiffDialog.html^eric4.Plugins.VcsPlugins.vcsPySvn.SvnDiffDialogheric4.Plugins.VcsPlugins.vcsPySvn.SvnInfoDialog.html^eric4.Plugins.VcsPlugins.vcsPySvn.SvnInfoDialogteric4.Plugins.VcsPlugins.vcsPySvn.SvnLogBrowserDialog.htmljeric4.Plugins.VcsPlugins.vcsPySvn.SvnLogBrowserDialogferic4.Plugins.VcsPlugins.vcsPySvn.SvnLogDialog.html\eric4.Plugins.VcsPlugins.vcsPySvn.SvnLogDialogjeric4.Plugins.VcsPlugins.vcsPySvn.SvnLoginDialog.html`eric4.Plugins.VcsPlugins.vcsPySvn.SvnLoginDialogjeric4.Plugins.VcsPlugins.vcsPySvn.SvnMergeDialog.html`eric4.Plugins.VcsPlugins.vcsPySvn.SvnMergeDialogeric4.Plugins.VcsPlugins.vcsPySvn.SvnNewProjectOptionsDialog.htmlxeric4.Plugins.VcsPlugins.vcsPySvn.SvnNewProjectOptionsDialogneric4.Plugins.VcsPlugins.vcsPySvn.SvnOptionsDialog.htmlderic4.Plugins.VcsPlugins.vcsPySvn.SvnOptionsDialogneric4.Plugins.VcsPlugins.vcsPySvn.SvnPropDelDialog.htmlderic4.Plugins.VcsPlugins.vcsPySvn.SvnPropDelDialogperic4.Plugins.VcsPlugins.vcsPySvn.SvnPropListDialog.htmlferic4.Plugins.VcsPlugins.vcsPySvn.SvnPropListDialogneric4.Plugins.VcsPlugins.vcsPySvn.SvnPropSetDialog.htmlderic4.Plugins.VcsPlugins.vcsPySvn.SvnPropSetDialogperic4.Plugins.VcsPlugins.vcsPySvn.SvnRelocateDialog.htmlferic4.Plugins.VcsPlugins.vcsPySvn.SvnRelocateDialogveric4.Plugins.VcsPlugins.vcsPySvn.SvnRepoBrowserDialog.htmlleric4.Plugins.VcsPlugins.vcsPySvn.SvnRepoBrowserDialogeric4.Plugins.VcsPlugins.vcsPySvn.SvnRevisionSelectionDialog.htmlxeric4.Plugins.VcsPlugins.vcsPySvn.SvnRevisionSelectionDialogleric4.Plugins.VcsPlugins.vcsPySvn.SvnStatusDialog.htmlberic4.Plugins.VcsPlugins.vcsPySvn.SvnStatusDialogzeric4.Plugins.VcsPlugins.vcsPySvn.SvnStatusMonitorThread.htmlperic4.Plugins.VcsPlugins.vcsPySvn.SvnStatusMonitorThreadleric4.Plugins.VcsPlugins.vcsPySvn.SvnSwitchDialog.htmlberic4.Plugins.VcsPlugins.vcsPySvn.SvnSwitchDialogzeric4.Plugins.VcsPlugins.vcsPySvn.SvnTagBranchListDialog.htmlperic4.Plugins.VcsPlugins.vcsPySvn.SvnTagBranchListDialogferic4.Plugins.VcsPlugins.vcsPySvn.SvnTagDialog.html\eric4.Plugins.VcsPlugins.vcsPySvn.SvnTagDialogxeric4.Plugins.VcsPlugins.vcsPySvn.SvnUrlSelectionDialog.htmlneric4.Plugins.VcsPlugins.vcsPySvn.SvnUrlSelectionDialogferic4.Plugins.VcsPlugins.vcsPySvn.SvnUtilities.html\eric4.Plugins.VcsPlugins.vcsPySvn.SvnUtilitiesberic4.Plugins.VcsPlugins.vcsPySvn.subversion.htmlXeric4.Plugins.VcsPlugins.vcsPySvn.subversionbindex-eric4.Plugins.VcsPlugins.vcsSubversion.htmlLeric4.Plugins.VcsPlugins.vcsSubversionindex-eric4.Plugins.VcsPlugins.vcsSubversion.ConfigurationPage.htmlperic4.Plugins.VcsPlugins.vcsSubversion.ConfigurationPageeric4.Plugins.VcsPlugins.vcsSubversion.ConfigurationPage.SubversionPage.htmleric4.Plugins.VcsPlugins.vcsSubversion.ConfigurationPage.SubversionPagederic4.Plugins.VcsPlugins.vcsSubversion.Config.htmlZeric4.Plugins.VcsPlugins.vcsSubversion.Configeric4.Plugins.VcsPlugins.vcsSubversion.ProjectBrowserHelper.htmlveric4.Plugins.VcsPlugins.vcsSubversion.ProjectBrowserHelperreric4.Plugins.VcsPlugins.vcsSubversion.ProjectHelper.htmlheric4.Plugins.VcsPlugins.vcsSubversion.ProjectHelperteric4.Plugins.VcsPlugins.vcsSubversion.SvnBlameDialog.htmljeric4.Plugins.VcsPlugins.vcsSubversion.SvnBlameDialogeric4.Plugins.VcsPlugins.vcsSubversion.SvnChangeListsDialog.htmlveric4.Plugins.VcsPlugins.vcsSubversion.SvnChangeListsDialogxeric4.Plugins.VcsPlugins.vcsSubversion.SvnCommandDialog.htmlneric4.Plugins.VcsPlugins.vcsSubversion.SvnCommandDialogveric4.Plugins.VcsPlugins.vcsSubversion.SvnCommitDialog.htmlleric4.Plugins.VcsPlugins.vcsSubversion.SvnCommitDialogreric4.Plugins.VcsPlugins.vcsSubversion.SvnCopyDialog.htmlheric4.Plugins.VcsPlugins.vcsSubversion.SvnCopyDialogjeric4.Plugins.VcsPlugins.vcsSubversion.SvnDialog.html`eric4.Plugins.VcsPlugins.vcsSubversion.SvnDialogreric4.Plugins.VcsPlugins.vcsSubversion.SvnDiffDialog.htmlheric4.Plugins.VcsPlugins.vcsSubversion.SvnDiffDialog~eric4.Plugins.VcsPlugins.vcsSubversion.SvnLogBrowserDialog.htmlteric4.Plugins.VcsPlugins.vcsSubversion.SvnLogBrowserDialogperic4.Plugins.VcsPlugins.vcsSubversion.SvnLogDialog.htmlferic4.Plugins.VcsPlugins.vcsSubversion.SvnLogDialogteric4.Plugins.VcsPlugins.vcsSubversion.SvnMergeDialog.htmljeric4.Plugins.VcsPlugins.vcsSubversion.SvnMergeDialogeric4.Plugins.VcsPlugins.vcsSubversion.SvnNewProjectOptionsDialog.htmleric4.Plugins.VcsPlugins.vcsSubversion.SvnNewProjectOptionsDialogxeric4.Plugins.VcsPlugins.vcsSubversion.SvnOptionsDialog.htmlneric4.Plugins.VcsPlugins.vcsSubversion.SvnOptionsDialogzeric4.Plugins.VcsPlugins.vcsSubversion.SvnPropListDialog.htmlperic4.Plugins.VcsPlugins.vcsSubversion.SvnPropListDialogxeric4.Plugins.VcsPlugins.vcsSubversion.SvnPropSetDialog.htmlneric4.Plugins.VcsPlugins.vcsSubversion.SvnPropSetDialogzeric4.Plugins.VcsPlugins.vcsSubversion.SvnRelocateDialog.htmlperic4.Plugins.VcsPlugins.vcsSubversion.SvnRelocateDialogeric4.Plugins.VcsPlugins.vcsSubversion.SvnRepoBrowserDialog.htmlveric4.Plugins.VcsPlugins.vcsSubversion.SvnRepoBrowserDialogeric4.Plugins.VcsPlugins.vcsSubversion.SvnRevisionSelectionDialog.htmleric4.Plugins.VcsPlugins.vcsSubversion.SvnRevisionSelectionDialogveric4.Plugins.VcsPlugins.vcsSubversion.SvnStatusDialog.htmlleric4.Plugins.VcsPlugins.vcsSubversion.SvnStatusDialogeric4.Plugins.VcsPlugins.vcsSubversion.SvnStatusMonitorThread.htmlzeric4.Plugins.VcsPlugins.vcsSubversion.SvnStatusMonitorThreadveric4.Plugins.VcsPlugins.vcsSubversion.SvnSwitchDialog.htmlleric4.Plugins.VcsPlugins.vcsSubversion.SvnSwitchDialogeric4.Plugins.VcsPlugins.vcsSubversion.SvnTagBranchListDialog.htmlzeric4.Plugins.VcsPlugins.vcsSubversion.SvnTagBranchListDialogperic4.Plugins.VcsPlugins.vcsSubversion.SvnTagDialog.htmlferic4.Plugins.VcsPlugins.vcsSubversion.SvnTagDialogeric4.Plugins.VcsPlugins.vcsSubversion.SvnUrlSelectionDialog.htmlxeric4.Plugins.VcsPlugins.vcsSubversion.SvnUrlSelectionDialogperic4.Plugins.VcsPlugins.vcsSubversion.SvnUtilities.htmlferic4.Plugins.VcsPlugins.vcsSubversion.SvnUtilitiesleric4.Plugins.VcsPlugins.vcsSubversion.subversion.htmlberic4.Plugins.VcsPlugins.vcsSubversion.subversionVindex-eric4.Plugins.ViewManagerPlugins.html@eric4.Plugins.ViewManagerPluginsjindex-eric4.Plugins.ViewManagerPlugins.Listspace.htmlTeric4.Plugins.ViewManagerPlugins.Listspacereric4.Plugins.ViewManagerPlugins.Listspace.Listspace.htmlheric4.Plugins.ViewManagerPlugins.Listspace.Listspacefindex-eric4.Plugins.ViewManagerPlugins.MdiArea.htmlPeric4.Plugins.ViewManagerPlugins.MdiAreajeric4.Plugins.ViewManagerPlugins.MdiArea.MdiArea.html`eric4.Plugins.ViewManagerPlugins.MdiArea.MdiAreafindex-eric4.Plugins.ViewManagerPlugins.Tabview.htmlPeric4.Plugins.ViewManagerPlugins.Tabviewjeric4.Plugins.ViewManagerPlugins.Tabview.Tabview.html`eric4.Plugins.ViewManagerPlugins.Tabview.Tabviewjindex-eric4.Plugins.ViewManagerPlugins.Workspace.htmlTeric4.Plugins.ViewManagerPlugins.Workspacereric4.Plugins.ViewManagerPlugins.Workspace.Workspace.htmlheric4.Plugins.ViewManagerPlugins.Workspace.WorkspaceLindex-eric4.Plugins.WizardPlugins.html6eric4.Plugins.WizardPluginspindex-eric4.Plugins.WizardPlugins.ColorDialogWizard.htmlZeric4.Plugins.WizardPlugins.ColorDialogWizarderic4.Plugins.WizardPlugins.ColorDialogWizard.ColorDialogWizardDialog.htmleric4.Plugins.WizardPlugins.ColorDialogWizard.ColorDialogWizardDialognindex-eric4.Plugins.WizardPlugins.FileDialogWizard.htmlXeric4.Plugins.WizardPlugins.FileDialogWizarderic4.Plugins.WizardPlugins.FileDialogWizard.FileDialogWizardDialog.htmleric4.Plugins.WizardPlugins.FileDialogWizard.FileDialogWizardDialognindex-eric4.Plugins.WizardPlugins.FontDialogWizard.htmlXeric4.Plugins.WizardPlugins.FontDialogWizarderic4.Plugins.WizardPlugins.FontDialogWizard.FontDialogWizardDialog.htmleric4.Plugins.WizardPlugins.FontDialogWizard.FontDialogWizardDialogpindex-eric4.Plugins.WizardPlugins.InputDialogWizard.htmlZeric4.Plugins.WizardPlugins.InputDialogWizarderic4.Plugins.WizardPlugins.InputDialogWizard.InputDialogWizardDialog.htmleric4.Plugins.WizardPlugins.InputDialogWizard.InputDialogWizardDialognindex-eric4.Plugins.WizardPlugins.MessageBoxWizard.htmlXeric4.Plugins.WizardPlugins.MessageBoxWizarderic4.Plugins.WizardPlugins.MessageBoxWizard.MessageBoxWizardDialog.htmleric4.Plugins.WizardPlugins.MessageBoxWizard.MessageBoxWizardDialogjindex-eric4.Plugins.WizardPlugins.PyRegExpWizard.htmlTeric4.Plugins.WizardPlugins.PyRegExpWizarderic4.Plugins.WizardPlugins.PyRegExpWizard.PyRegExpWizardCharactersDialog.htmleric4.Plugins.WizardPlugins.PyRegExpWizard.PyRegExpWizardCharactersDialogeric4.Plugins.WizardPlugins.PyRegExpWizard.PyRegExpWizardDialog.html~eric4.Plugins.WizardPlugins.PyRegExpWizard.PyRegExpWizardDialogeric4.Plugins.WizardPlugins.PyRegExpWizard.PyRegExpWizardRepeatDialog.htmleric4.Plugins.WizardPlugins.PyRegExpWizard.PyRegExpWizardRepeatDialoghindex-eric4.Plugins.WizardPlugins.QRegExpWizard.htmlReric4.Plugins.WizardPlugins.QRegExpWizarderic4.Plugins.WizardPlugins.QRegExpWizard.QRegExpWizardCharactersDialog.htmleric4.Plugins.WizardPlugins.QRegExpWizard.QRegExpWizardCharactersDialogeric4.Plugins.WizardPlugins.QRegExpWizard.QRegExpWizardDialog.htmlzeric4.Plugins.WizardPlugins.QRegExpWizard.QRegExpWizardDialogeric4.Plugins.WizardPlugins.QRegExpWizard.QRegExpWizardRepeatDialog.htmleric4.Plugins.WizardPlugins.QRegExpWizard.QRegExpWizardRepeatDialog<eric4.Plugins.PluginAbout.html2eric4.Plugins.PluginAbout@eric4.Plugins.PluginEricapi.html6eric4.Plugins.PluginEricapi@eric4.Plugins.PluginEricdoc.html6eric4.Plugins.PluginEricdocLeric4.Plugins.PluginSyntaxChecker.htmlBeric4.Plugins.PluginSyntaxCheckerBeric4.Plugins.PluginTabnanny.html8eric4.Plugins.PluginTabnannyBeric4.Plugins.PluginVcsPySvn.html8eric4.Plugins.PluginVcsPySvnLeric4.Plugins.PluginVcsSubversion.htmlBeric4.Plugins.PluginVcsSubversionHeric4.Plugins.PluginVmListspace.html>eric4.Plugins.PluginVmListspaceDeric4.Plugins.PluginVmMdiArea.html:eric4.Plugins.PluginVmMdiAreaDeric4.Plugins.PluginVmTabview.html:eric4.Plugins.PluginVmTabviewHeric4.Plugins.PluginVmWorkspace.html>eric4.Plugins.PluginVmWorkspaceNeric4.Plugins.PluginWizardPyRegExp.htmlDeric4.Plugins.PluginWizardPyRegExpVeric4.Plugins.PluginWizardQColorDialog.htmlLeric4.Plugins.PluginWizardQColorDialogTeric4.Plugins.PluginWizardQFileDialog.htmlJeric4.Plugins.PluginWizardQFileDialogTeric4.Plugins.PluginWizardQFontDialog.htmlJeric4.Plugins.PluginWizardQFontDialogVeric4.Plugins.PluginWizardQInputDialog.htmlLeric4.Plugins.PluginWizardQInputDialogTeric4.Plugins.PluginWizardQMessageBox.htmlJeric4.Plugins.PluginWizardQMessageBoxLeric4.Plugins.PluginWizardQRegExp.htmlBeric4.Plugins.PluginWizardQRegExp8index-eric4.Preferences.html"eric4.Preferences^index-eric4.Preferences.ConfigurationPages.htmlHeric4.Preferences.ConfigurationPagesreric4.Preferences.ConfigurationPages.ApplicationPage.htmlheric4.Preferences.ConfigurationPages.ApplicationPage~eric4.Preferences.ConfigurationPages.ConfigurationPageBase.htmlteric4.Preferences.ConfigurationPages.ConfigurationPageBaseferic4.Preferences.ConfigurationPages.CorbaPage.html\eric4.Preferences.ConfigurationPages.CorbaPagezeric4.Preferences.ConfigurationPages.DebuggerGeneralPage.htmlperic4.Preferences.ConfigurationPages.DebuggerGeneralPagezeric4.Preferences.ConfigurationPages.DebuggerPython3Page.htmlperic4.Preferences.ConfigurationPages.DebuggerPython3Pagexeric4.Preferences.ConfigurationPages.DebuggerPythonPage.htmlneric4.Preferences.ConfigurationPages.DebuggerPythonPageteric4.Preferences.ConfigurationPages.DebuggerRubyPage.htmljeric4.Preferences.ConfigurationPages.DebuggerRubyPageperic4.Preferences.ConfigurationPages.EditorAPIsPage.htmlferic4.Preferences.ConfigurationPages.EditorAPIsPageeric4.Preferences.ConfigurationPages.EditorAutocompletionPage.htmlzeric4.Preferences.ConfigurationPages.EditorAutocompletionPageeric4.Preferences.ConfigurationPages.EditorAutocompletionQScintillaPage.htmleric4.Preferences.ConfigurationPages.EditorAutocompletionQScintillaPagexeric4.Preferences.ConfigurationPages.EditorCalltipsPage.htmlneric4.Preferences.ConfigurationPages.EditorCalltipsPageeric4.Preferences.ConfigurationPages.EditorCalltipsQScintillaPage.htmleric4.Preferences.ConfigurationPages.EditorCalltipsQScintillaPagezeric4.Preferences.ConfigurationPages.EditorExportersPage.htmlperic4.Preferences.ConfigurationPages.EditorExportersPageperic4.Preferences.ConfigurationPages.EditorFilePage.htmlferic4.Preferences.ConfigurationPages.EditorFilePageveric4.Preferences.ConfigurationPages.EditorGeneralPage.htmlleric4.Preferences.ConfigurationPages.EditorGeneralPageeric4.Preferences.ConfigurationPages.EditorHighlightersPage.htmlveric4.Preferences.ConfigurationPages.EditorHighlightersPageeric4.Preferences.ConfigurationPages.EditorHighlightingStylesPage.htmleric4.Preferences.ConfigurationPages.EditorHighlightingStylesPagexeric4.Preferences.ConfigurationPages.EditorKeywordsPage.htmlneric4.Preferences.ConfigurationPages.EditorKeywordsPage|eric4.Preferences.ConfigurationPages.EditorPropertiesPage.htmlreric4.Preferences.ConfigurationPages.EditorPropertiesPageteric4.Preferences.ConfigurationPages.EditorSearchPage.htmljeric4.Preferences.ConfigurationPages.EditorSearchPageeric4.Preferences.ConfigurationPages.EditorSpellCheckingPage.htmlxeric4.Preferences.ConfigurationPages.EditorSpellCheckingPageteric4.Preferences.ConfigurationPages.EditorStylesPage.htmljeric4.Preferences.ConfigurationPages.EditorStylesPageteric4.Preferences.ConfigurationPages.EditorTypingPage.htmljeric4.Preferences.ConfigurationPages.EditorTypingPageferic4.Preferences.ConfigurationPages.EmailPage.html\eric4.Preferences.ConfigurationPages.EmailPageleric4.Preferences.ConfigurationPages.GraphicsPage.htmlberic4.Preferences.ConfigurationPages.GraphicsPagexeric4.Preferences.ConfigurationPages.HelpAppearancePage.htmlneric4.Preferences.ConfigurationPages.HelpAppearancePage~eric4.Preferences.ConfigurationPages.HelpDocumentationPage.htmlteric4.Preferences.ConfigurationPages.HelpDocumentationPagereric4.Preferences.ConfigurationPages.HelpViewersPage.htmlheric4.Preferences.ConfigurationPages.HelpViewersPagexeric4.Preferences.ConfigurationPages.HelpWebBrowserPage.htmlneric4.Preferences.ConfigurationPages.HelpWebBrowserPageferic4.Preferences.ConfigurationPages.IconsPage.html\eric4.Preferences.ConfigurationPages.IconsPagexeric4.Preferences.ConfigurationPages.IconsPreviewDialog.htmlneric4.Preferences.ConfigurationPages.IconsPreviewDialogneric4.Preferences.ConfigurationPages.InterfacePage.htmlderic4.Preferences.ConfigurationPages.InterfacePageteric4.Preferences.ConfigurationPages.MultiProjectPage.htmljeric4.Preferences.ConfigurationPages.MultiProjectPagejeric4.Preferences.ConfigurationPages.NetworkPage.html`eric4.Preferences.ConfigurationPages.NetworkPageveric4.Preferences.ConfigurationPages.PluginManagerPage.htmlleric4.Preferences.ConfigurationPages.PluginManagerPagejeric4.Preferences.ConfigurationPages.PrinterPage.html`eric4.Preferences.ConfigurationPages.PrinterPagexeric4.Preferences.ConfigurationPages.ProjectBrowserPage.htmlneric4.Preferences.ConfigurationPages.ProjectBrowserPagejeric4.Preferences.ConfigurationPages.ProjectPage.html`eric4.Preferences.ConfigurationPages.ProjectPageheric4.Preferences.ConfigurationPages.PythonPage.html^eric4.Preferences.ConfigurationPages.PythonPage`eric4.Preferences.ConfigurationPages.QtPage.htmlVeric4.Preferences.ConfigurationPages.QtPageferic4.Preferences.ConfigurationPages.ShellPage.html\eric4.Preferences.ConfigurationPages.ShellPageferic4.Preferences.ConfigurationPages.TasksPage.html\eric4.Preferences.ConfigurationPages.TasksPageneric4.Preferences.ConfigurationPages.TemplatesPage.htmlderic4.Preferences.ConfigurationPages.TemplatesPagereric4.Preferences.ConfigurationPages.TrayStarterPage.htmlheric4.Preferences.ConfigurationPages.TrayStarterPageberic4.Preferences.ConfigurationPages.VcsPage.htmlXeric4.Preferences.ConfigurationPages.VcsPagereric4.Preferences.ConfigurationPages.ViewmanagerPage.htmlheric4.Preferences.ConfigurationPages.ViewmanagerPageTeric4.Preferences.ConfigurationDialog.htmlJeric4.Preferences.ConfigurationDialogNeric4.Preferences.PreferencesLexer.htmlDeric4.Preferences.PreferencesLexerJeric4.Preferences.ProgramsDialog.html@eric4.Preferences.ProgramsDialogJeric4.Preferences.ShortcutDialog.html@eric4.Preferences.ShortcutDialog@eric4.Preferences.Shortcuts.html6eric4.Preferences.ShortcutsLeric4.Preferences.ShortcutsDialog.htmlBeric4.Preferences.ShortcutsDialog\eric4.Preferences.ToolConfigurationDialog.htmlReric4.Preferences.ToolConfigurationDialogferic4.Preferences.ToolGroupConfigurationDialog.html\eric4.Preferences.ToolGroupConfigurationDialogPeric4.Preferences.ViewProfileDialog.htmlFeric4.Preferences.ViewProfileDialog>eric4.Preferences.__init__.html4eric4.Preferences.__init__0index-eric4.Project.htmleric4.ProjectJeric4.Project.AddDirectoryDialog.html@eric4.Project.AddDirectoryDialog@eric4.Project.AddFileDialog.html6eric4.Project.AddFileDialogLeric4.Project.AddFoundFilesDialog.htmlBeric4.Project.AddFoundFilesDialogHeric4.Project.AddLanguageDialog.html>eric4.Project.AddLanguageDialogReric4.Project.CreateDialogCodeDialog.htmlHeric4.Project.CreateDialogCodeDialogVeric4.Project.DebuggerPropertiesDialog.htmlLeric4.Project.DebuggerPropertiesDialogXeric4.Project.FiletypeAssociationDialog.htmlNeric4.Project.FiletypeAssociationDialogReric4.Project.LexerAssociationDialog.htmlHeric4.Project.LexerAssociationDialogNeric4.Project.NewDialogClassDialog.htmlDeric4.Project.NewDialogClassDialogReric4.Project.NewPythonPackageDialog.htmlHeric4.Project.NewPythonPackageDialog4eric4.Project.Project.html*eric4.Project.ProjectJeric4.Project.ProjectBaseBrowser.html@eric4.Project.ProjectBaseBrowserBeric4.Project.ProjectBrowser.html8eric4.Project.ProjectBrowserLeric4.Project.ProjectBrowserFlags.htmlBeric4.Project.ProjectBrowserFlagsLeric4.Project.ProjectBrowserModel.htmlBeric4.Project.ProjectBrowserModeljeric4.Project.ProjectBrowserSortFilterProxyModel.html`eric4.Project.ProjectBrowserSortFilterProxyModelLeric4.Project.ProjectFormsBrowser.htmlBeric4.Project.ProjectFormsBrowserVeric4.Project.ProjectInterfacesBrowser.htmlLeric4.Project.ProjectInterfacesBrowserNeric4.Project.ProjectOthersBrowser.htmlDeric4.Project.ProjectOthersBrowserTeric4.Project.ProjectResourcesBrowser.htmlJeric4.Project.ProjectResourcesBrowserPeric4.Project.ProjectSourcesBrowser.htmlFeric4.Project.ProjectSourcesBrowserZeric4.Project.ProjectTranslationsBrowser.htmlPeric4.Project.ProjectTranslationsBrowserFeric4.Project.PropertiesDialog.html<eric4.Project.PropertiesDialogVeric4.Project.SpellingPropertiesDialog.htmlLeric4.Project.SpellingPropertiesDialog\eric4.Project.TranslationPropertiesDialog.htmlReric4.Project.TranslationPropertiesDialogNeric4.Project.UserPropertiesDialog.htmlDeric4.Project.UserPropertiesDialog.index-eric4.PyUnit.htmleric4.PyUnit@eric4.PyUnit.UnittestDialog.html6eric4.PyUnit.UnittestDialog6index-eric4.QScintilla.html eric4.QScintillaJindex-eric4.QScintilla.Exporters.html4eric4.QScintilla.ExportersXeric4.QScintilla.Exporters.ExporterBase.htmlNeric4.QScintilla.Exporters.ExporterBaseXeric4.QScintilla.Exporters.ExporterHTML.htmlNeric4.QScintilla.Exporters.ExporterHTMLVeric4.QScintilla.Exporters.ExporterPDF.htmlLeric4.QScintilla.Exporters.ExporterPDFVeric4.QScintilla.Exporters.ExporterRTF.htmlLeric4.QScintilla.Exporters.ExporterRTFVeric4.QScintilla.Exporters.ExporterTEX.htmlLeric4.QScintilla.Exporters.ExporterTEXPeric4.QScintilla.Exporters.__init__.htmlFeric4.QScintilla.Exporters.__init__Dindex-eric4.QScintilla.Lexers.html.eric4.QScintilla.LexersDeric4.QScintilla.Lexers.Lexer.html:eric4.QScintilla.Lexers.LexerLeric4.QScintilla.Lexers.LexerBash.htmlBeric4.QScintilla.Lexers.LexerBashNeric4.QScintilla.Lexers.LexerBatch.htmlDeric4.QScintilla.Lexers.LexerBatchNeric4.QScintilla.Lexers.LexerCMake.htmlDeric4.QScintilla.Lexers.LexerCMakeJeric4.QScintilla.Lexers.LexerCPP.html@eric4.QScintilla.Lexers.LexerCPPJeric4.QScintilla.Lexers.LexerCSS.html@eric4.QScintilla.Lexers.LexerCSSPeric4.QScintilla.Lexers.LexerCSharp.htmlFeric4.QScintilla.Lexers.LexerCSharpVeric4.QScintilla.Lexers.LexerContainer.htmlLeric4.QScintilla.Lexers.LexerContainerFeric4.QScintilla.Lexers.LexerD.html<eric4.QScintilla.Lexers.LexerDLeric4.QScintilla.Lexers.LexerDiff.htmlBeric4.QScintilla.Lexers.LexerDiffReric4.QScintilla.Lexers.LexerFortran.htmlHeric4.QScintilla.Lexers.LexerFortranVeric4.QScintilla.Lexers.LexerFortran77.htmlLeric4.QScintilla.Lexers.LexerFortran77Leric4.QScintilla.Lexers.LexerHTML.htmlBeric4.QScintilla.Lexers.LexerHTMLJeric4.QScintilla.Lexers.LexerIDL.html@eric4.QScintilla.Lexers.LexerIDLLeric4.QScintilla.Lexers.LexerJava.htmlBeric4.QScintilla.Lexers.LexerJavaXeric4.QScintilla.Lexers.LexerJavaScript.htmlNeric4.QScintilla.Lexers.LexerJavaScriptJeric4.QScintilla.Lexers.LexerLua.html@eric4.QScintilla.Lexers.LexerLuaTeric4.QScintilla.Lexers.LexerMakefile.htmlJeric4.QScintilla.Lexers.LexerMakefilePeric4.QScintilla.Lexers.LexerMatlab.htmlFeric4.QScintilla.Lexers.LexerMatlabPeric4.QScintilla.Lexers.LexerOctave.htmlFeric4.QScintilla.Lexers.LexerOctaveJeric4.QScintilla.Lexers.LexerPOV.html@eric4.QScintilla.Lexers.LexerPOVPeric4.QScintilla.Lexers.LexerPascal.htmlFeric4.QScintilla.Lexers.LexerPascalLeric4.QScintilla.Lexers.LexerPerl.htmlBeric4.QScintilla.Lexers.LexerPerlXeric4.QScintilla.Lexers.LexerPostScript.htmlNeric4.QScintilla.Lexers.LexerPostScriptXeric4.QScintilla.Lexers.LexerProperties.htmlNeric4.QScintilla.Lexers.LexerPropertiesTeric4.QScintilla.Lexers.LexerPygments.htmlJeric4.QScintilla.Lexers.LexerPygmentsPeric4.QScintilla.Lexers.LexerPython.htmlFeric4.QScintilla.Lexers.LexerPythonLeric4.QScintilla.Lexers.LexerRuby.htmlBeric4.QScintilla.Lexers.LexerRubyJeric4.QScintilla.Lexers.LexerSQL.html@eric4.QScintilla.Lexers.LexerSQLJeric4.QScintilla.Lexers.LexerTCL.html@eric4.QScintilla.Lexers.LexerTCLJeric4.QScintilla.Lexers.LexerTeX.html@eric4.QScintilla.Lexers.LexerTeXLeric4.QScintilla.Lexers.LexerVHDL.htmlBeric4.QScintilla.Lexers.LexerVHDLJeric4.QScintilla.Lexers.LexerXML.html@eric4.QScintilla.Lexers.LexerXMLLeric4.QScintilla.Lexers.LexerYAML.htmlBeric4.QScintilla.Lexers.LexerYAMLJeric4.QScintilla.Lexers.__init__.html@eric4.QScintilla.Lexers.__init__Xindex-eric4.QScintilla.TypingCompleters.htmlBeric4.QScintilla.TypingCompletersheric4.QScintilla.TypingCompleters.CompleterBase.html^eric4.QScintilla.TypingCompleters.CompleterBaseleric4.QScintilla.TypingCompleters.CompleterPython.htmlberic4.QScintilla.TypingCompleters.CompleterPythonheric4.QScintilla.TypingCompleters.CompleterRuby.html^eric4.QScintilla.TypingCompleters.CompleterRuby^eric4.QScintilla.TypingCompleters.__init__.htmlTeric4.QScintilla.TypingCompleters.__init__Beric4.QScintilla.APIsManager.html8eric4.QScintilla.APIsManager8eric4.QScintilla.Editor.html.eric4.QScintilla.Editor@eric4.QScintilla.GotoDialog.html6eric4.QScintilla.GotoDialog@eric4.QScintilla.MiniEditor.html6eric4.QScintilla.MiniEditor:eric4.QScintilla.Printer.html0eric4.QScintilla.PrinterReric4.QScintilla.QsciScintillaCompat.htmlHeric4.QScintilla.QsciScintillaCompatReric4.QScintilla.SearchReplaceWidget.htmlHeric4.QScintilla.SearchReplaceWidget6eric4.QScintilla.Shell.html,eric4.QScintilla.ShellPeric4.QScintilla.ShellHistoryDialog.htmlFeric4.QScintilla.ShellHistoryDialogDeric4.QScintilla.SpellChecker.html:eric4.QScintilla.SpellCheckerReric4.QScintilla.SpellCheckingDialog.htmlHeric4.QScintilla.SpellCheckingDialog@eric4.QScintilla.ZoomDialog.html6eric4.QScintilla.ZoomDialog6index-eric4.SqlBrowser.html eric4.SqlBrowser@eric4.SqlBrowser.SqlBrowser.html6eric4.SqlBrowser.SqlBrowserLeric4.SqlBrowser.SqlBrowserWidget.htmlBeric4.SqlBrowser.SqlBrowserWidgetReric4.SqlBrowser.SqlConnectionDialog.htmlHeric4.SqlBrowser.SqlConnectionDialogReric4.SqlBrowser.SqlConnectionWidget.htmlHeric4.SqlBrowser.SqlConnectionWidget,index-eric4.Tasks.htmleric4.TasksNeric4.Tasks.TaskFilterConfigDialog.htmlDeric4.Tasks.TaskFilterConfigDialogJeric4.Tasks.TaskPropertiesDialog.html@eric4.Tasks.TaskPropertiesDialog6eric4.Tasks.TaskViewer.html,eric4.Tasks.TaskViewer4index-eric4.Templates.htmleric4.Templatesheric4.Templates.TemplateMultipleVariablesDialog.html^eric4.Templates.TemplateMultipleVariablesDialogZeric4.Templates.TemplatePropertiesDialog.htmlPeric4.Templates.TemplatePropertiesDialogberic4.Templates.TemplateSingleVariableDialog.htmlXeric4.Templates.TemplateSingleVariableDialogFeric4.Templates.TemplateViewer.html<eric4.Templates.TemplateViewer,index-eric4.Tools.htmleric4.Tools8eric4.Tools.TRPreviewer.html.eric4.Tools.TRPreviewerHeric4.Tools.TRSingleApplication.html>eric4.Tools.TRSingleApplication8eric4.Tools.TrayStarter.html.eric4.Tools.TrayStarter8eric4.Tools.UIPreviewer.html.eric4.Tools.UIPreviewer&index-eric4.UI.htmleric4.UIDeric4.UI.AuthenticationDialog.html:eric4.UI.AuthenticationDialog*eric4.UI.Browser.html eric4.UI.Browser4eric4.UI.BrowserModel.html*eric4.UI.BrowserModelReric4.UI.BrowserSortFilterProxyModel.htmlHeric4.UI.BrowserSortFilterProxyModel6eric4.UI.CompareDialog.html,eric4.UI.CompareDialog(eric4.UI.Config.htmleric4.UI.ConfigVeric4.UI.DeleteFilesConfirmationDialog.htmlLeric4.UI.DeleteFilesConfirmationDialog0eric4.UI.DiffDialog.html&eric4.UI.DiffDialog2eric4.UI.EmailDialog.html(eric4.UI.EmailDialog8eric4.UI.ErrorLogDialog.html.eric4.UI.ErrorLogDialog8eric4.UI.FindFileDialog.html.eric4.UI.FindFileDialog@eric4.UI.FindFileNameDialog.html6eric4.UI.FindFileNameDialog$eric4.UI.Info.htmleric4.UI.Info*eric4.UI.LogView.html eric4.UI.LogView2eric4.UI.PixmapCache.html(eric4.UI.PixmapCache4eric4.UI.SplashScreen.html*eric4.UI.SplashScreen6eric4.UI.UserInterface.html,eric4.UI.UserInterface4index-eric4.Utilities.htmleric4.UtilitiesPindex-eric4.Utilities.ClassBrowsers.html:eric4.Utilities.ClassBrowsersderic4.Utilities.ClassBrowsers.ClbrBaseClasses.htmlZeric4.Utilities.ClassBrowsers.ClbrBaseClassesVeric4.Utilities.ClassBrowsers.__init__.htmlLeric4.Utilities.ClassBrowsers.__init__Teric4.Utilities.ClassBrowsers.idlclbr.htmlJeric4.Utilities.ClassBrowsers.idlclbrReric4.Utilities.ClassBrowsers.pyclbr.htmlHeric4.Utilities.ClassBrowsers.pyclbrReric4.Utilities.ClassBrowsers.rbclbr.htmlHeric4.Utilities.ClassBrowsers.rbclbr<eric4.Utilities.AutoSaver.html2eric4.Utilities.AutoSaverBeric4.Utilities.ModuleParser.html8eric4.Utilities.ModuleParserLeric4.Utilities.SingleApplication.htmlBeric4.Utilities.SingleApplication8eric4.Utilities.Startup.html.eric4.Utilities.Startup:eric4.Utilities.__init__.html0eric4.Utilities.__init__0eric4.Utilities.uic.html&eric4.Utilities.uic(index-eric4.VCS.htmleric4.VCSFeric4.VCS.CommandOptionsDialog.html<eric4.VCS.CommandOptionsDialogFeric4.VCS.ProjectBrowserHelper.html<eric4.VCS.ProjectBrowserHelper8eric4.VCS.ProjectHelper.html.eric4.VCS.ProjectHelperFeric4.VCS.RepositoryInfoDialog.html<eric4.VCS.RepositoryInfoDialog>eric4.VCS.StatusMonitorLed.html4eric4.VCS.StatusMonitorLedDeric4.VCS.StatusMonitorThread.html:eric4.VCS.StatusMonitorThread:eric4.VCS.VersionControl.html0eric4.VCS.VersionControl.eric4.VCS.__init__.html$eric4.VCS.__init__8index-eric4.ViewManager.html"eric4.ViewManagerXeric4.ViewManager.BookmarkedFilesDialog.htmlNeric4.ViewManager.BookmarkedFilesDialogDeric4.ViewManager.ViewManager.html:eric4.ViewManager.ViewManager>eric4.ViewManager.__init__.html4eric4.ViewManager.__init__2eric4.compileUiFiles.html(eric4.compileUiFiles eric4.eric4.htmleric4.eric4(eric4.eric4_api.htmleric4.eric4_api0eric4.eric4_compare.html&eric4.eric4_compare4eric4.eric4_configure.html*eric4.eric4_configure*eric4.eric4_diff.html eric4.eric4_diff(eric4.eric4_doc.htmleric4.eric4_doc.eric4.eric4_editor.html$eric4.eric4_editor6eric4.eric4_iconeditor.html,eric4.eric4_iconeditor<eric4.eric4_plugininstall.html2eric4.eric4_plugininstallBeric4.eric4_pluginrepository.html8eric4.eric4_pluginrepository@eric4.eric4_pluginuninstall.html6eric4.eric4_pluginuninstall0eric4.eric4_qregexp.html&eric4.eric4_qregexp&eric4.eric4_re.htmleric4.eric4_re6eric4.eric4_sqlbrowser.html,eric4.eric4_sqlbrowser*eric4.eric4_tray.html eric4.eric4_tray8eric4.eric4_trpreviewer.html.eric4.eric4_trpreviewer8eric4.eric4_uipreviewer.html.eric4.eric4_uipreviewer2eric4.eric4_unittest.html(eric4.eric4_unittest6eric4.eric4_webbrowser.html,eric4.eric4_webbrowser,eric4.eric4config.html"eric4.eric4config$eric4.install.htmleric4.install.eric4.install-i18n.html$eric4.install-i18n4eric4.patch_modpython.html*eric4.patch_modpython,eric4.patch_pyxml.html"eric4.patch_pyxml(eric4.uninstall.htmleric4.uninstall Ul7dAU; 11'APIs (Constructor)APIs (Constructor)APIs.__init__ APIsAPIsAPIsB 333APIGenerator.genAPIAPIGenerator.genAPIEAPIGenerator.genAPIQ ===APIGenerator.__isPrivateAPIGenerator.__isPrivateEAPIGenerator.__isPrivate] EEEAPIGenerator.__addMethodsAPIAPIGenerator.__addMethodsAPIEAPIGenerator.__addMethodsAPI]EEEAPIGenerator.__addGlobalsAPIAPIGenerator.__addGlobalsAPIEAPIGenerator.__addGlobalsAPIcIIIAPIGenerator.__addFunctionsAPIAPIGenerator.__addFunctionsAPIEAPIGenerator.__addFunctionsAPI]EEEAPIGenerator.__addClassesAPIAPIGenerator.__addClassesAPIEAPIGenerator.__addClassesAPIrSSSAPIGenerator.__addClassVariablesAPIAPIGenerator.__addClassVariablesAPIEAPIGenerator.__addClassVariablesAPI377APIGenerator (Module)APIGenerator (Module)ERAA7APIGenerator (Constructor)APIGenerator (Constructor)EAPIGenerator.__init__-%%%APIGeneratorAPIGeneratorEAPIGenerator<<<<$<< D7}Dl0xD255APIsManager (Module)APIsManager (Module)P??5APIsManager (Constructor)APIsManager (Constructor)APIsManager.__init__+###APIsManagerAPIsManagerAPIsManager7+++APIs.reloadAPIsAPIs.reloadAPIsAPIs.reloadAPIs:---APIs.prepareAPIsAPIs.prepareAPIsAPIs.prepareAPIsL999APIs.installedAPIFilesAPIs.installedAPIFilesAPIs.installedAPIFiles:---APIs.getQsciAPIsAPIs.getQsciAPIsAPIs.getQsciAPIsL999APIs.cancelPreparationAPIs.cancelPreparationAPIs.cancelPreparation7+++APIs.__loadAPIsAPIs.__loadAPIsAPIs.__loadAPIsXAAAAPIs.__defaultPreparedNameAPIs.__defaultPreparedNameAPIs.__defaultPreparedName^EEEAPIs.__apiPreparationStartedAPIs.__apiPreparationStartedAPIs.__apiPreparationStartedaGGGAPIs.__apiPreparationFinishedAPIs.__apiPreparationFinishedAPIs.__apiPreparationFinisheddIIIAPIs.__apiPreparationCancelledAPIs.__apiPreparationCancelledAPIs.__apiPreparationCancelled 7m+}PK7I(777AboutPlugin.__aboutQtAboutPlugin.__aboutQtAboutPlugin.__aboutQtL'999AboutPlugin.__aboutKdeAboutPlugin.__aboutKdeAboutPlugin.__aboutKdeC&333AboutPlugin.__aboutAboutPlugin.__aboutAboutPlugin.__about4%77AboutPlugin (Package)AboutPlugin (Package)PP$??5AboutPlugin (Constructor)AboutPlugin (Constructor)AboutPlugin.__init__+####AboutPluginAboutPluginAboutPlugin2"55AboutDialog (Module)AboutDialog (Module)P!??5AboutDialog (Constructor)AboutDialog (Constructor)AboutDialog.__init__+ ###AboutDialogAboutDialogAboutDialogjMMMAboutAccessHandler.createRequestAboutAccessHandler.createRequestAboutAccessHandler.createRequest@CCAboutAccessHandler (Module)AboutAccessHandler (Module)@111AboutAccessHandlerAboutAccessHandlerAboutAccessHandlerL999APIsManager.reloadAPIsAPIsManager.reloadAPIsAPIsManager.reloadAPIsC333APIsManager.getAPIsAPIsManager.getAPIsAPIsManager.getAPIs l[O =lP3SSAdBlockBlockedNetworkReply (Module)AdBlockBlockedNetworkReply (Module)}2]]SAdBlockBlockedNetworkReply (Constructor)AdBlockBlockedNetworkReply (Constructor)AdBlockBlockedNetworkReply.__init__X1AAAAdBlockBlockedNetworkReplyAdBlockBlockedNetworkReplyAdBlockBlockedNetworkReplyp0QQQAdBlockAccessHandler.createRequestAdBlockAccessHandler.createRequestAdBlockAccessHandler.createRequestD/GGAdBlockAccessHandler (Module)AdBlockAccessHandler (Module)F.555AdBlockAccessHandlerAdBlockAccessHandlerAdBlockAccessHandler,-//AdBlock (Package)AdBlock (Package)CL,999AboutPlugin.deactivateAboutPlugin.deactivateAboutPlugin.deactivateF+555AboutPlugin.activateAboutPlugin.activateAboutPlugin.activateL*999AboutPlugin.__initMenuAboutPlugin.__initMenuAboutPlugin.__initMenuU)???AboutPlugin.__initActionsAboutPlugin.__initActionsAboutPlugin.__initActions b{g\b<]]]AdBlockDialog.__learnAboutWritingFiltersAdBlockDialog.__learnAboutWritingFiltersAdBlockDialog.__learnAboutWritingFilterss;SSSAdBlockDialog.__browseSubscriptionsAdBlockDialog.__browseSubscriptionsAdBlockDialog.__browseSubscriptionsy:WWWAdBlockDialog.__aboutToShowActionMenuAdBlockDialog.__aboutToShowActionMenuAdBlockDialog.__aboutToShowActionMenu6999AdBlockDialog (Module)AdBlockDialog (Module)V8CC9AdBlockDialog (Constructor)AdBlockDialog (Constructor)AdBlockDialog.__init__17'''AdBlockDialogAdBlockDialogAdBlockDialogs6SSSAdBlockBlockedNetworkReply.readDataAdBlockBlockedNetworkReply.readDataAdBlockBlockedNetworkReply.readDataj5MMMAdBlockBlockedNetworkReply.abortAdBlockBlockedNetworkReply.abortAdBlockBlockedNetworkReply.abort4]]]AdBlockBlockedNetworkReply.__fireSignalsAdBlockBlockedNetworkReply.__fireSignalsAdBlockBlockedNetworkReply.__fireSignals @zL@|FYYYAdBlockManager.__customSubscriptionUrlAdBlockManager.__customSubscriptionUrlAdBlockManager.__customSubscriptionUrl EcccAdBlockManager.__customSubscriptionLocationAdBlockManager.__customSubscriptionLocationAdBlockManager.__customSubscriptionLocation8D;;AdBlockManager (Module)AdBlockManager (Module)YCEE;AdBlockManager (Constructor)AdBlockManager (Constructor)AdBlockManager.__init__4B)))AdBlockManagerAdBlockManagerAdBlockManageraAGGGAdBlockDialog.setCurrentIndexAdBlockDialog.setCurrentIndexAdBlockDialog.setCurrentIndexC@333AdBlockDialog.modelAdBlockDialog.modelAdBlockDialog.model[?CCCAdBlockDialog.addCustomRuleAdBlockDialog.addCustomRuleAdBlockDialog.addCustomRulep>QQQAdBlockDialog.__updateSubscriptionAdBlockDialog.__updateSubscriptionAdBlockDialog.__updateSubscriptionp=QQQAdBlockDialog.__removeSubscriptionAdBlockDialog.__removeSubscriptionAdBlockDialog.__removeSubscription O(2ZOUQ???AdBlockManager.setEnabledAdBlockManager.setEnabledAdBlockManager.setEnabledCP333AdBlockManager.saveAdBlockManager.saveAdBlockManager.savemOOOOAdBlockManager.removeSubscriptionAdBlockManager.removeSubscriptionAdBlockManager.removeSubscriptionCN333AdBlockManager.pageAdBlockManager.pageAdBlockManager.pageLM999AdBlockManager.networkAdBlockManager.networkAdBlockManager.networkCL333AdBlockManager.loadAdBlockManager.loadAdBlockManager.loadRK===AdBlockManager.isEnabledAdBlockManager.isEnabledAdBlockManager.isEnabledXJAAAAdBlockManager.customRulesAdBlockManager.customRulesAdBlockManager.customRulesFI555AdBlockManager.closeAdBlockManager.closeAdBlockManager.closedHIIIAdBlockManager.addSubscriptionAdBlockManager.addSubscriptionAdBlockManager.addSubscriptionpGQQQAdBlockManager.__loadSubscriptionsAdBlockManager.__loadSubscriptionsAdBlockManager.__loadSubscriptions 0I1\u0C^333AdBlockModel.parentAdBlockModel.parentAdBlockModel.parent@]111AdBlockModel.indexAdBlockModel.indexAdBlockModel.indexO\;;;AdBlockModel.headerDataAdBlockModel.headerDataAdBlockModel.headerDataR[===AdBlockModel.hasChildrenAdBlockModel.hasChildrenAdBlockModel.hasChildren@Z111AdBlockModel.flagsAdBlockModel.flagsAdBlockModel.flags=Y///AdBlockModel.dataAdBlockModel.dataAdBlockModel.dataRX===AdBlockModel.columnCountAdBlockModel.columnCountAdBlockModel.columnCount[WCCCAdBlockModel.__rulesChangedAdBlockModel.__rulesChangedAdBlockModel.__rulesChanged4V77AdBlockModel (Module)AdBlockModel (Module)SUAA7AdBlockModel (Constructor)AdBlockModel (Constructor)AdBlockModel.__init__.T%%%AdBlockModelAdBlockModelAdBlockModel^SEEEAdBlockManager.subscriptionsAdBlockManager.subscriptionsAdBlockManager.subscriptionsUR???AdBlockManager.showDialogAdBlockManager.showDialogAdBlockManager.showDialog )d% h;V)+l###AdBlockRuleAdBlockRuleAdBlockRule^kEEEAdBlockPage.applyRulesToPageAdBlockPage.applyRulesToPageAdBlockPage.applyRulesToPageOj;;;AdBlockPage.__checkRuleAdBlockPage.__checkRuleAdBlockPage.__checkRule2i55AdBlockPage (Module)AdBlockPage (Module)+h###AdBlockPageAdBlockPageAdBlockPageFg555AdBlockNetwork.blockAdBlockNetwork.blockAdBlockNetwork.block8f;;AdBlockNetwork (Module)AdBlockNetwork (Module)4e)))AdBlockNetworkAdBlockNetworkAdBlockNetworkddIIIAdBlockModel.subscriptionIndexAdBlockModel.subscriptionIndexAdBlockModel.subscriptionIndexUc???AdBlockModel.subscriptionAdBlockModel.subscriptionAdBlockModel.subscriptionFb555AdBlockModel.setDataAdBlockModel.setDataAdBlockModel.setData=a///AdBlockModel.ruleAdBlockModel.ruleAdBlockModel.ruleI`777AdBlockModel.rowCountAdBlockModel.rowCountAdBlockModel.rowCountO_;;;AdBlockModel.removeRowsAdBlockModel.removeRowsAdBlockModel.removeRows Azu*.AIx777AdBlockRule.setFilterAdBlockRule.setFilterAdBlockRule.setFilterRw===AdBlockRule.setExceptionAdBlockRule.setExceptionAdBlockRule.setExceptionLv999AdBlockRule.setEnabledAdBlockRule.setEnabledAdBlockRule.setEnabledUu???AdBlockRule.regExpPatternAdBlockRule.regExpPatternAdBlockRule.regExpPatternRt===AdBlockRule.networkMatchAdBlockRule.networkMatchAdBlockRule.networkMatchOs;;;AdBlockRule.isExceptionAdBlockRule.isExceptionAdBlockRule.isExceptionIr777AdBlockRule.isEnabledAdBlockRule.isEnabledAdBlockRule.isEnabledIq777AdBlockRule.isCSSRuleAdBlockRule.isCSSRuleAdBlockRule.isCSSRule@p111AdBlockRule.filterAdBlockRule.filterAdBlockRule.filtervoUUUAdBlockRule.__convertPatternToRegExpAdBlockRule.__convertPatternToRegExpAdBlockRule.__convertPatternToRegExp2n55AdBlockRule (Module)AdBlockRule (Module)Pm??5AdBlockRule (Constructor)AdBlockRule (Constructor)AdBlockRule.__init__ @mV{@^EEEAdBlockSubscription.allRulesAdBlockSubscription.allRulesAdBlockSubscription.allRules[CCCAdBlockSubscription.addRuleAdBlockSubscription.addRuleAdBlockSubscription.addRuleyWWWAdBlockSubscription.__rulesDownloadedAdBlockSubscription.__rulesDownloadedAdBlockSubscription.__rulesDownloadedsSSSAdBlockSubscription.__populateCacheAdBlockSubscription.__populateCacheAdBlockSubscription.__populateCached~IIIAdBlockSubscription.__parseUrlAdBlockSubscription.__parseUrlAdBlockSubscription.__parseUrlg}KKKAdBlockSubscription.__loadRulesAdBlockSubscription.__loadRulesAdBlockSubscription.__loadRulesB|EEAdBlockSubscription (Module)AdBlockSubscription (Module)h{OOEAdBlockSubscription (Constructor)AdBlockSubscription (Constructor)AdBlockSubscription.__init__Cz333AdBlockSubscriptionAdBlockSubscriptionAdBlockSubscriptionLy999AdBlockRule.setPatternAdBlockRule.setPatternAdBlockRule.setPattern P$Ym OOOAdBlockSubscription.rulesFileNameAdBlockSubscription.rulesFileNameAdBlockSubscription.rulesFileNameg KKKAdBlockSubscription.replaceRuleAdBlockSubscription.replaceRuleAdBlockSubscription.replaceRuled IIIAdBlockSubscription.removeRuleAdBlockSubscription.removeRuleAdBlockSubscription.removeRuleaGGGAdBlockSubscription.pageRulesAdBlockSubscription.pageRulesAdBlockSubscription.pageRules^EEEAdBlockSubscription.locationAdBlockSubscription.locationAdBlockSubscription.locationdIIIAdBlockSubscription.lastUpdateAdBlockSubscription.lastUpdateAdBlockSubscription.lastUpdateaGGGAdBlockSubscription.isEnabledAdBlockSubscription.isEnabledAdBlockSubscription.isEnabledU???AdBlockSubscription.blockAdBlockSubscription.blockAdBlockSubscription.blockU???AdBlockSubscription.allowAdBlockSubscription.allowAdBlockSubscription.allow !5j\v!R===AddBookmarkDialog.acceptAddBookmarkDialog.acceptAddBookmarkDialog.accept>AAAddBookmarkDialog (Module)AddBookmarkDialog (Module)bKKAAddBookmarkDialog (Constructor)AddBookmarkDialog (Constructor)AddBookmarkDialog.__init__=///AddBookmarkDialogAddBookmarkDialogAddBookmarkDialogO;;;AdBlockSubscription.urlAdBlockSubscription.urlAdBlockSubscription.urlaGGGAdBlockSubscription.updateNowAdBlockSubscription.updateNowAdBlockSubscription.updateNowU???AdBlockSubscription.titleAdBlockSubscription.titleAdBlockSubscription.title^EEEAdBlockSubscription.setTitleAdBlockSubscription.setTitleAdBlockSubscription.setTitlegKKKAdBlockSubscription.setLocationAdBlockSubscription.setLocationAdBlockSubscription.setLocationd IIIAdBlockSubscription.setEnabledAdBlockSubscription.setEnabledAdBlockSubscription.setEnableda GGGAdBlockSubscription.saveRulesAdBlockSubscription.saveRulesAdBlockSubscription.saveRules x;pbxI 777AddBookmarkProxyModelAddBookmarkProxyModelAddBookmarkProxyModelI777AddBookmarkDialog.urlAddBookmarkDialog.urlAddBookmarkDialog.urlO;;;AddBookmarkDialog.titleAddBookmarkDialog.titleAddBookmarkDialog.titleR===AddBookmarkDialog.setUrlAddBookmarkDialog.setUrlAddBookmarkDialog.setUrlXAAAAddBookmarkDialog.setTitleAddBookmarkDialog.setTitleAddBookmarkDialog.setTitle[CCCAddBookmarkDialog.setFolderAddBookmarkDialog.setFolderAddBookmarkDialog.setFoldermOOOAddBookmarkDialog.setCurrentIndexAddBookmarkDialog.setCurrentIndexAddBookmarkDialog.setCurrentIndexXAAAAddBookmarkDialog.isFolderAddBookmarkDialog.isFolderAddBookmarkDialog.isFolderdIIIAddBookmarkDialog.currentIndexAddBookmarkDialog.currentIndexAddBookmarkDialog.currentIndex[CCCAddBookmarkDialog.addedNodeAddBookmarkDialog.addedNodeAddBookmarkDialog.addedNode RdRd)IIIAddDirectoryDialog.__dirDialogAddDirectoryDialog.__dirDialogAddDirectoryDialog.__dirDialog@(CCAddDirectoryDialog (Module)AddDirectoryDialog (Module)e'MMCAddDirectoryDialog (Constructor)AddDirectoryDialog (Constructor)AddDirectoryDialog.__init__@&111AddDirectoryDialogAddDirectoryDialogAddDirectoryDialogm%OOOAddBookmarkProxyModel.hasChildrenAddBookmarkProxyModel.hasChildrenAddBookmarkProxyModel.hasChildren|$YYYAddBookmarkProxyModel.filterAcceptsRowAddBookmarkProxyModel.filterAcceptsRowAddBookmarkProxyModel.filterAcceptsRow#___AddBookmarkProxyModel.filterAcceptsColumnAddBookmarkProxyModel.filterAcceptsColumnAddBookmarkProxyModel.filterAcceptsColumnm"OOOAddBookmarkProxyModel.columnCountAddBookmarkProxyModel.columnCountAddBookmarkProxyModel.columnCountn!SSIAddBookmarkProxyModel (Constructor)AddBookmarkProxyModel (Constructor)AddBookmarkProxyModel.__init__ 0rB|0I2777AddFileDialog.getDataAddFileDialog.getDataAddFileDialog.getData6199AddFileDialog (Module)AddFileDialog (Module)V0CC9AddFileDialog (Constructor)AddFileDialog (Constructor)AddFileDialog.__init__1/'''AddFileDialogAddFileDialogAddFileDialog.gggAddDirectoryDialog.on_targetDirButton_clickedAddDirectoryDialog.on_targetDirButton_clickedAddDirectoryDialog.on_targetDirButton_clicked-kkkAddDirectoryDialog.on_sourceDirEdit_textChangedAddDirectoryDialog.on_sourceDirEdit_textChangedAddDirectoryDialog.on_sourceDirEdit_textChanged,gggAddDirectoryDialog.on_sourceDirButton_clickedAddDirectoryDialog.on_sourceDirButton_clickedAddDirectoryDialog.on_sourceDirButton_clicked+mmmAddDirectoryDialog.on_filterComboBox_highlightedAddDirectoryDialog.on_filterComboBox_highlightedAddDirectoryDialog.on_filterComboBox_highlightedX*AAAAddDirectoryDialog.getDataAddDirectoryDialog.getDataAddDirectoryDialog.getData pwblp :cccAddFoundFilesDialog.on_addAllButton_clickedAddFoundFilesDialog.on_addAllButton_clickedAddFoundFilesDialog.on_addAllButton_clickedj9MMMAddFoundFilesDialog.getSelectionAddFoundFilesDialog.getSelectionAddFoundFilesDialog.getSelectionB8EEAddFoundFilesDialog (Module)AddFoundFilesDialog (Module)h7OOEAddFoundFilesDialog (Constructor)AddFoundFilesDialog (Constructor)AddFoundFilesDialog.__init__C6333AddFoundFilesDialogAddFoundFilesDialogAddFoundFilesDialog5]]]AddFileDialog.on_targetDirButton_clickedAddFileDialog.on_targetDirButton_clickedAddFileDialog.on_targetDirButton_clicked 4cccAddFileDialog.on_sourceFileEdit_textChangedAddFileDialog.on_sourceFileEdit_textChangedAddFileDialog.on_sourceFileEdit_textChanged3___AddFileDialog.on_sourceFileButton_clickedAddFileDialog.on_sourceFileButton_clickedAddFileDialog.on_sourceFileButton_clicked >b7z=>[DCCCAddProjectDialog.__updateUiAddProjectDialog.__updateUiAddProjectDialog.__updateUi?AAAddLanguageDialog (Module)AddLanguageDialog (Module)b>KKAAddLanguageDialog (Constructor)AddLanguageDialog (Constructor)AddLanguageDialog.__init__==///AddLanguageDialogAddLanguageDialogAddLanguageDialog<]]]AddFoundFilesDialog.on_buttonBox_clickedAddFoundFilesDialog.on_buttonBox_clickedAddFoundFilesDialog.on_buttonBox_clicked;mmmAddFoundFilesDialog.on_addSelectedButton_clickedAddFoundFilesDialog.on_addSelectedButton_clickedAddFoundFilesDialog.on_addSelectedButton_clicked E,k)ExMWWWApplicationDiagram.__buildModulesDictApplicationDiagram.__buildModulesDict~ApplicationDiagram.__buildModulesDictfLKKKApplicationDiagram.__addPackageApplicationDiagram.__addPackage~ApplicationDiagram.__addPackage?KCCApplicationDiagram (Module)ApplicationDiagram (Module)~dJMMCApplicationDiagram (Constructor)ApplicationDiagram (Constructor)~ApplicationDiagram.__init__?I111ApplicationDiagramApplicationDiagram~ApplicationDiagramH]]]AddProjectDialog.on_nameEdit_textChangedAddProjectDialog.on_nameEdit_textChangedAddProjectDialog.on_nameEdit_textChangedGeeeAddProjectDialog.on_filenameEdit_textChangedAddProjectDialog.on_filenameEdit_textChangedAddProjectDialog.on_filenameEdit_textChanged|FYYYAddProjectDialog.on_fileButton_clickedAddProjectDialog.on_fileButton_clickedAddProjectDialog.on_fileButton_clickedRE===AddProjectDialog.getDataAddProjectDialog.getDataAddProjectDialog.getData ^ _%@ ^NX;;;ArgumentsError.__repr__ArgumentsError.__repr__OArgumentsError.__repr__XWEE;ArgumentsError (Constructor)ArgumentsError (Constructor)OArgumentsError.__init__3V)))ArgumentsErrorArgumentsErrorOArgumentsErrorFU555ApplicationPage.saveApplicationPage.saveZApplicationPage.save:T==ApplicationPage (Module)ApplicationPage (Module)Z\SGG=ApplicationPage (Constructor)ApplicationPage (Constructor)ZApplicationPage.__init__7R+++ApplicationPageApplicationPageZApplicationPageNQ;;;ApplicationDiagram.showApplicationDiagram.show~ApplicationDiagram.showZPCCCApplicationDiagram.relayoutApplicationDiagram.relayout~ApplicationDiagram.relayout~O[[[ApplicationDiagram.__createAssociationsApplicationDiagram.__createAssociations~ApplicationDiagram.__createAssociationsoNQQQApplicationDiagram.__buildPackagesApplicationDiagram.__buildPackages~ApplicationDiagram.__buildPackages 6myH6obQQQAssociationItem.__findIntersectionAssociationItem.__findIntersectionAssociationItem.__findIntersectionaoooAssociationItem.__calculateEndingPoints_rectangleAssociationItem.__calculateEndingPoints_rectangleAssociationItem.__calculateEndingPoints_rectangle`iiiAssociationItem.__calculateEndingPoints_centerAssociationItem.__calculateEndingPoints_centerAssociationItem.__calculateEndingPoints_center9_==AssociationItem (Module)AssociationItem (Module)[^GG=AssociationItem (Constructor)AssociationItem (Constructor)AssociationItem.__init__6]+++AssociationItemAssociationItemAssociationItemN\;;;ArrayElementVarItem.keyArrayElementVarItem.keyBArrayElementVarItem.keyg[OOEArrayElementVarItem (Constructor)ArrayElementVarItem (Constructor)BArrayElementVarItem.__init__BZ333ArrayElementVarItemArrayElementVarItemBArrayElementVarItemKY999ArgumentsError.__str__ArgumentsError.__str__OArgumentsError.__str__ >(nG>?m111AsyncFile.__nWriteAsyncFile.__nWriteAsyncFile.__nWriteHl777AsyncFile.__checkModeAsyncFile.__checkModeAsyncFile.__checkMode-k11AsyncFile (Module)AsyncFile (Module)Ij;;1AsyncFile (Constructor)AsyncFile (Constructor)AsyncFile.__init__$iAsyncFileAsyncFileAsyncFileZhCCCAssociationItem.widgetMovedAssociationItem.widgetMovedAssociationItem.widgetMovedZgCCCAssociationItem.unassociateAssociationItem.unassociateAssociationItem.unassociateifMMMAssociationItem.__updateEndPointAssociationItem.__updateEndPointAssociationItem.__updateEndPointleOOOAssociationItem.__mapRectFromItemAssociationItem.__mapRectFromItemAssociationItem.__mapRectFromItem dcccAssociationItem.__findRectIntersectionPointAssociationItem.__findRectIntersectionPointAssociationItem.__findRectIntersectionPointlcOOOAssociationItem.__findPointRegionAssociationItem.__findPointRegionAssociationItem.__findPointRegion RF MKR3|)))AsyncFile.tellAsyncFile.tellAsyncFile.tell3{)))AsyncFile.seekAsyncFile.seekAsyncFile.seekBz333AsyncFile.readlinesAsyncFile.readlinesAsyncFile.readlinesEy555AsyncFile.readline_pAsyncFile.readline_pAsyncFile.readline_p?x111AsyncFile.readlineAsyncFile.readlineAsyncFile.readline9w---AsyncFile.read_pAsyncFile.read_pAsyncFile.read_p3v)))AsyncFile.readAsyncFile.readAsyncFile.readKu999AsyncFile.pendingWriteAsyncFile.pendingWriteAsyncFile.pendingWrite9t---AsyncFile.nWriteAsyncFile.nWrite$AsyncFile.nWrite9s---AsyncFile.isattyAsyncFile.isattyAsyncFile.isattyEr555AsyncFile.initializeAsyncFile.initialize$AsyncFile.initialize6q+++AsyncFile.flushAsyncFile.flushAsyncFile.flush9p---AsyncFile.filenoAsyncFile.filenoAsyncFile.fileno6o+++AsyncFile.closeAsyncFile.closeAsyncFile.closeBn333AsyncFile.checkModeAsyncFile.checkMode$AsyncFile.checkMode [=hQ[J ;;1Attribute (Constructor)Attribute (Constructor)Attribute.__init__% AttributeAttributeAttribute< ///AsyncPendingWriteAsyncPendingWriteAsyncPendingWrite?111AsyncIO.writeReadyAsyncIO.writeReadyAsyncIO.writeReady0'''AsyncIO.writeAsyncIO.writeAsyncIO.writeK999AsyncIO.setDescriptorsAsyncIO.setDescriptorsAsyncIO.setDescriptors<///AsyncIO.readReadyAsyncIO.readReadyAsyncIO.readReadyT???AsyncIO.initializeAsyncIOAsyncIO.initializeAsyncIO%AsyncIO.initializeAsyncIO?111AsyncIO.disconnectAsyncIO.disconnectAsyncIO.disconnect)--AsyncIO (Module)AsyncIO (Module)C77-AsyncIO (Constructor)AsyncIO (Constructor)AsyncIO.__init__AsyncIOAsyncIOAsyncIOE555AsyncFile.writelinesAsyncFile.writelinesAsyncFile.writelines6~+++AsyncFile.writeAsyncFile.writeAsyncFile.write?}111AsyncFile.truncateAsyncFile.truncateAsyncFile.truncate :I@d3:F555AutoSaver.timerEventAutoSaver.timerEventAutoSaver.timerEventXAAAAutoSaver.saveIfNeccessaryAutoSaver.saveIfNeccessaryAutoSaver.saveIfNeccessaryR===AutoSaver.changeOccurredAutoSaver.changeOccurredAutoSaver.changeOccurred.11AutoSaver (Module)AutoSaver (Module)J;;1AutoSaver (Constructor)AutoSaver (Constructor)AutoSaver.__init__%AutoSaverAutoSaverAutoSaverdIIIAuthenticationDialog.shallSaveAuthenticationDialog.shallSaveAuthenticationDialog.shallSave^EEEAuthenticationDialog.setDataAuthenticationDialog.setDataAuthenticationDialog.setData^EEEAuthenticationDialog.getDataAuthenticationDialog.getDataAuthenticationDialog.getDataDGGAuthenticationDialog (Module)AuthenticationDialog (Module)k QQGAuthenticationDialog (Constructor)AuthenticationDialog (Constructor)AuthenticationDialog.__init__F 555AuthenticationDialogAuthenticationDialogAuthenticationDialog =yBs-X=^$EEEBookmarkedFilesDialog.__swapBookmarkedFilesDialog.__swapBookmarkedFilesDialog.__swapF#IIBookmarkedFilesDialog (Module)BookmarkedFilesDialog (Module)n"SSIBookmarkedFilesDialog (Constructor)BookmarkedFilesDialog (Constructor)BookmarkedFilesDialog.__init__I!777BookmarkedFilesDialogBookmarkedFilesDialogBookmarkedFilesDialog= ///BookmarkNode.typeBookmarkNode.typeBookmarkNode.typeF555BookmarkNode.setTypeBookmarkNode.setTypeBookmarkNode.setTypeC333BookmarkNode.removeBookmarkNode.removeBookmarkNode.removeC333BookmarkNode.parentBookmarkNode.parentBookmarkNode.parentI777BookmarkNode.childrenBookmarkNode.childrenBookmarkNode.children:---BookmarkNode.addBookmarkNode.addBookmarkNode.add477BookmarkNode (Module)BookmarkNode (Module)SAA7BookmarkNode (Constructor)BookmarkNode (Constructor)BookmarkNode.__init__.%%%BookmarkNodeBookmarkNodeBookmarkNode zY5 *cccBookmarkedFilesDialog.on_fileButton_clickedBookmarkedFilesDialog.on_fileButton_clickedBookmarkedFilesDialog.on_fileButton_clicked )cccBookmarkedFilesDialog.on_downButton_clickedBookmarkedFilesDialog.on_downButton_clickedBookmarkedFilesDialog.on_downButton_clicked(gggBookmarkedFilesDialog.on_deleteButton_clickedBookmarkedFilesDialog.on_deleteButton_clickedBookmarkedFilesDialog.on_deleteButton_clicked'gggBookmarkedFilesDialog.on_changeButton_clickedBookmarkedFilesDialog.on_changeButton_clickedBookmarkedFilesDialog.on_changeButton_clicked&aaaBookmarkedFilesDialog.on_addButton_clickedBookmarkedFilesDialog.on_addButton_clickedBookmarkedFilesDialog.on_addButton_clicked%]]]BookmarkedFilesDialog.getBookmarkedFilesBookmarkedFilesDialog.getBookmarkedFilesBookmarkedFilesDialog.getBookmarkedFiles ?k8l/?3eeeBookmarksDialog.__customContextMenuRequestedBookmarksDialog.__customContextMenuRequestedBookmarksDialog.__customContextMenuRequested[2CCCBookmarksDialog.__activatedBookmarksDialog.__activatedBookmarksDialog.__activated:1==BookmarksDialog (Module)BookmarksDialog (Module)\0GG=BookmarksDialog (Constructor)BookmarksDialog (Constructor)BookmarksDialog.__init__7/+++BookmarksDialogBookmarksDialogBookmarksDialog0.33Bookmarks (Package)Bookmarks (Package)D-___BookmarkedFilesDialog.on_upButton_clickedBookmarkedFilesDialog.on_upButton_clickedBookmarkedFilesDialog.on_upButton_clicked&,uuuBookmarkedFilesDialog.on_filesList_currentRowChangedBookmarkedFilesDialog.on_filesList_currentRowChangedBookmarkedFilesDialog.on_filesList_currentRowChanged+gggBookmarkedFilesDialog.on_fileEdit_textChangedBookmarkedFilesDialog.on_fileEdit_textChangedBookmarkedFilesDialog.on_fileEdit_textChanged <A <X<AAABookmarksDialog.__shutdownBookmarksDialog.__shutdownBookmarksDialog.__shutdowns;SSSBookmarksDialog.__saveExpandedNodesBookmarksDialog.__saveExpandedNodesBookmarksDialog.__saveExpandedNodes|:YYYBookmarksDialog.__openBookmarkInNewTabBookmarksDialog.__openBookmarkInNewTabBookmarksDialog.__openBookmarkInNewTab9aaaBookmarksDialog.__openBookmarkInCurrentTabBookmarksDialog.__openBookmarkInCurrentTabBookmarksDialog.__openBookmarkInCurrentTabd8IIIBookmarksDialog.__openBookmarkBookmarksDialog.__openBookmarkBookmarksDialog.__openBookmark[7CCCBookmarksDialog.__newFolderBookmarksDialog.__newFolderBookmarksDialog.__newFoldera6GGGBookmarksDialog.__expandNodesBookmarksDialog.__expandNodesBookmarksDialog.__expandNodesX5AAABookmarksDialog.__editNameBookmarksDialog.__editNameBookmarksDialog.__editNamea4GGGBookmarksDialog.__editAddressBookmarksDialog.__editAddressBookmarksDialog.__editAddress \Vx0\gFKKKBookmarksManager.changeExpandedBookmarksManager.changeExpandedBookmarksManager.changeExpandedgEKKKBookmarksManager.bookmarksModelBookmarksManager.bookmarksModelBookmarksManager.bookmarksModelXDAAABookmarksManager.bookmarksBookmarksManager.bookmarksBookmarksManager.bookmarks^CEEEBookmarksManager.addBookmarkBookmarksManager.addBookmarkBookmarksManager.addBookmarkBaaaBookmarksManager.__convertFromOldBookmarksBookmarksManager.__convertFromOldBookmarksBookmarksManager.__convertFromOldBookmarks999BookmarksDialog.rejectBookmarksDialog.rejectBookmarksDialog.rejectX=AAABookmarksDialog.closeEventBookmarksDialog.closeEventBookmarksDialog.closeEvent #D?1#dQIIIBookmarksManager.undoRedoStackBookmarksManager.undoRedoStackBookmarksManager.undoRedoStackRP===BookmarksManager.toolbarBookmarksManager.toolbarBookmarksManager.toolbarOO;;;BookmarksManager.setUrlBookmarksManager.setUrlBookmarksManager.setUrlUN???BookmarksManager.setTitleBookmarksManager.setTitleBookmarksManager.setTitleIM777BookmarksManager.saveBookmarksManager.saveBookmarksManager.savegLKKKBookmarksManager.removeBookmarkBookmarksManager.removeBookmarkBookmarksManager.removeBookmarkIK777BookmarksManager.menuBookmarksManager.menuBookmarksManager.menuIJ777BookmarksManager.loadBookmarksManager.loadBookmarksManager.loadjIMMMBookmarksManager.importBookmarksBookmarksManager.importBookmarksBookmarksManager.importBookmarksjHMMMBookmarksManager.exportBookmarksBookmarksManager.exportBookmarksBookmarksManager.exportBookmarksLG999BookmarksManager.closeBookmarksManager.closeBookmarksManager.close us:i=u^[EEEBookmarksMenu.createBaseMenuBookmarksMenu.createBaseMenuBookmarksMenu.createBaseMenudZIIIBookmarksMenu.__removeBookmarkBookmarksMenu.__removeBookmarkBookmarksMenu.__removeBookmarkvYUUUBookmarksMenu.__openBookmarkInNewTabBookmarksMenu.__openBookmarkInNewTabBookmarksMenu.__openBookmarkInNewTab^XEEEBookmarksMenu.__openBookmarkBookmarksMenu.__openBookmarkBookmarksMenu.__openBookmarkOW;;;BookmarksMenu.__openAllBookmarksMenu.__openAllBookmarksMenu.__openAllvVUUUBookmarksMenu.__contextMenuRequestedBookmarksMenu.__contextMenuRequestedBookmarksMenu.__contextMenuRequestedUU???BookmarksMenu.__activatedBookmarksMenu.__activatedBookmarksMenu.__activated6T99BookmarksMenu (Module)BookmarksMenu (Module)VSCC9BookmarksMenu (Constructor)BookmarksMenu (Constructor)BookmarksMenu.__init__1R'''BookmarksMenuBookmarksMenuBookmarksMenu #Y{i.i#Cf333BookmarksModel.dataBookmarksModel.dataBookmarksModel.dataXeAAABookmarksModel.columnCountBookmarksModel.columnCountBookmarksModel.columnCountgdKKKBookmarksModel.bookmarksManagerBookmarksModel.bookmarksManagerBookmarksModel.bookmarksManager8c;;BookmarksModel (Module)BookmarksModel (Module)YbEE;BookmarksModel (Constructor)BookmarksModel (Constructor)BookmarksModel.__init__4a)))BookmarksModelBookmarksModelBookmarksModel|`YYYBookmarksMenuBarMenu.setInitialActionsBookmarksMenuBarMenu.setInitialActionsBookmarksMenuBarMenu.setInitialActionsm_OOOBookmarksMenuBarMenu.prePopulatedBookmarksMenuBarMenu.prePopulatedBookmarksMenuBarMenu.prePopulatedk^QQGBookmarksMenuBarMenu (Constructor)BookmarksMenuBarMenu (Constructor)BookmarksMenuBarMenu.__init__F]555BookmarksMenuBarMenuBookmarksMenuBarMenuBookmarksMenuBarMenu[\CCCBookmarksMenu.postPopulatedBookmarksMenu.postPopulatedBookmarksMenu.postPopulated \JEI\Cq333BookmarksModel.nodeBookmarksModel.nodeBookmarksModel.nodeRp===BookmarksModel.mimeTypesBookmarksModel.mimeTypesBookmarksModel.mimeTypesOo;;;BookmarksModel.mimeDataBookmarksModel.mimeDataBookmarksModel.mimeDataFn555BookmarksModel.indexBookmarksModel.indexBookmarksModel.indexUm???BookmarksModel.headerDataBookmarksModel.headerDataBookmarksModel.headerDataXlAAABookmarksModel.hasChildrenBookmarksModel.hasChildrenBookmarksModel.hasChildrenFk555BookmarksModel.flagsBookmarksModel.flagsBookmarksModel.flags[jCCCBookmarksModel.entryRemovedBookmarksModel.entryRemovedBookmarksModel.entryRemoved[iCCCBookmarksModel.entryChangedBookmarksModel.entryChangedBookmarksModel.entryChangedUh???BookmarksModel.entryAddedBookmarksModel.entryAddedBookmarksModel.entryAdded[gCCCBookmarksModel.dropMimeDataBookmarksModel.dropMimeDataBookmarksModel.dropMimeData _fQv{UUUBookmarksToolBar.__bookmarkActivatedBookmarksToolBar.__bookmarkActivatedBookmarksToolBar.__bookmarkActivatedAAABrowser.__createPopupMenusBrowser.__createPopupMenusBrowser.__createPopupMenusC=333Browser.__configureBrowser.__configureBrowser.__configure nw"8mnaRGGGBrowser.mouseDoubleClickEventBrowser.mouseDoubleClickEventBrowser.mouseDoubleClickEventIQ777Browser.layoutDisplayBrowser.layoutDisplayBrowser.layoutDisplayLP999Browser.handleUnittestBrowser.handleUnittestBrowser.handleUnittest[OCCCBrowser.handleProgramChangeBrowser.handleProgramChangeBrowser.handleProgramChangejNMMMBrowser.handlePreferencesChangedBrowser.handlePreferencesChangedBrowser.handlePreferencesChangedM]]]Browser.getSelectedItemsCountCategorizedBrowser.getSelectedItemsCountCategorizedBrowser.getSelectedItemsCountCategorizedaLGGGBrowser.getSelectedItemsCountBrowser.getSelectedItemsCountBrowser.getSelectedItemsCountRK===Browser.getSelectedItemsBrowser.getSelectedItemsBrowser.getSelectedItems7J+++Browser._resortBrowser._resortBrowser._resortLI999Browser._resizeColumnsBrowser._resizeColumnsBrowser._resizeColumns Dh $Dj[MMMBrowserClassAttributeItem.linenoBrowserClassAttributeItem.linenoBrowserClassAttributeItem.linenopZQQQBrowserClassAttributeItem.lessThanBrowserClassAttributeItem.lessThanBrowserClassAttributeItem.lessThanpYQQQBrowserClassAttributeItem.isPublicBrowserClassAttributeItem.isPublicBrowserClassAttributeItem.isPublicpXQQQBrowserClassAttributeItem.fileNameBrowserClassAttributeItem.fileNameBrowserClassAttributeItem.fileNameW___BrowserClassAttributeItem.attributeObjectBrowserClassAttributeItem.attributeObjectBrowserClassAttributeItem.attributeObjectzV[[QBrowserClassAttributeItem (Constructor)BrowserClassAttributeItem (Constructor)BrowserClassAttributeItem.__init__UU???BrowserClassAttributeItemBrowserClassAttributeItemBrowserClassAttributeItem@T111Browser.wantedItemBrowser.wantedItemBrowser.wantedItemRS===Browser.saveToplevelDirsBrowser.saveToplevelDirsBrowser.saveToplevelDirs I%dIUd???BrowserClassItem.fileNameBrowserClassItem.fileNameBrowserClassItem.fileName^cEEEBrowserClassItem.classObjectBrowserClassItem.classObjectBrowserClassItem.classObject_bII?BrowserClassItem (Constructor)BrowserClassItem (Constructor)BrowserClassItem.__init__:a---BrowserClassItemBrowserClassItemBrowserClassItems`SSSBrowserClassAttributesItem.lessThanBrowserClassAttributesItem.lessThanBrowserClassAttributesItem.lessThan_eeeBrowserClassAttributesItem.isClassAttributesBrowserClassAttributesItem.isClassAttributesBrowserClassAttributesItem.isClassAttributesy^WWWBrowserClassAttributesItem.attributesBrowserClassAttributesItem.attributesBrowserClassAttributesItem.attributes}]]]SBrowserClassAttributesItem (Constructor)BrowserClassAttributesItem (Constructor)BrowserClassAttributesItem.__init__X\AAABrowserClassAttributesItemBrowserClassAttributesItemBrowserClassAttributesItem *PYG*Uo???BrowserDirectoryItem.nameBrowserDirectoryItem.nameBrowserDirectoryItem.nameanGGGBrowserDirectoryItem.lessThanBrowserDirectoryItem.lessThanBrowserDirectoryItem.lessThan^mEEEBrowserDirectoryItem.dirNameBrowserDirectoryItem.dirNameBrowserDirectoryItem.dirNameklQQGBrowserDirectoryItem (Constructor)BrowserDirectoryItem (Constructor)BrowserDirectoryItem.__init__Fk555BrowserDirectoryItemBrowserDirectoryItemBrowserDirectoryItemXjAAABrowserCodingItem.lessThanBrowserCodingItem.lessThanBrowserCodingItem.lessThanbiKKABrowserCodingItem (Constructor)BrowserCodingItem (Constructor)BrowserCodingItem.__init__=h///BrowserCodingItemBrowserCodingItemBrowserCodingItemOg;;;BrowserClassItem.linenoBrowserClassItem.linenoBrowserClassItem.linenoUf???BrowserClassItem.lessThanBrowserClassItem.lessThanBrowserClassItem.lessThanUe???BrowserClassItem.isPublicBrowserClassItem.isPublicBrowserClassItem.isPublic eb TUy???BrowserFileItem.isIdlFileBrowserFileItem.isIdlFileBrowserFileItem.isIdlFilevxUUUBrowserFileItem.isDesignerHeaderFileBrowserFileItem.isDesignerHeaderFileBrowserFileItem.isDesignerHeaderFiledwIIIBrowserFileItem.isDesignerFileBrowserFileItem.isDesignerFileBrowserFileItem.isDesignerFileOv;;;BrowserFileItem.isDFileBrowserFileItem.isDFileBrowserFileItem.isDFileRu===BrowserFileItem.fileNameBrowserFileItem.fileNameBrowserFileItem.fileNameOt;;;BrowserFileItem.fileExtBrowserFileItem.fileExtBrowserFileItem.fileExtOs;;;BrowserFileItem.dirNameBrowserFileItem.dirNameBrowserFileItem.dirName\rGG=BrowserFileItem (Constructor)BrowserFileItem (Constructor)BrowserFileItem.__init__7q+++BrowserFileItemBrowserFileItemBrowserFileItem^pEEEBrowserDirectoryItem.setNameBrowserDirectoryItem.setNameBrowserDirectoryItem.setName *&a2*R===BrowserFileItem.lessThanBrowserFileItem.lessThanBrowserFileItem.lessThanU???BrowserFileItem.isSvgFileBrowserFileItem.isSvgFileBrowserFileItem.isSvgFileXAAABrowserFileItem.isRubyFileBrowserFileItem.isRubyFileBrowserFileItem.isRubyFilegKKKBrowserFileItem.isResourcesFileBrowserFileItem.isResourcesFileBrowserFileItem.isResourcesFile^EEEBrowserFileItem.isPythonFileBrowserFileItem.isPythonFileBrowserFileItem.isPythonFilea~GGGBrowserFileItem.isPython3FileBrowserFileItem.isPython3FileBrowserFileItem.isPython3Filea}GGGBrowserFileItem.isProjectFileBrowserFileItem.isProjectFileBrowserFileItem.isProjectFile^|EEEBrowserFileItem.isPixmapFileBrowserFileItem.isPixmapFileBrowserFileItem.isPixmapFilep{QQQBrowserFileItem.isMultiProjectFileBrowserFileItem.isMultiProjectFileBrowserFileItem.isMultiProjectFiledzIIIBrowserFileItem.isLinguistFileBrowserFileItem.isLinguistFileBrowserFileItem.isLinguistFile ,\ 7_ ,[CCCBrowserItem.isLazyPopulatedBrowserItem.isLazyPopulatedBrowserItem.isLazyPopulatedC333BrowserItem.getIconBrowserItem.getIconBrowserItem.getIcon:---BrowserItem.dataBrowserItem.dataBrowserItem.dataO ;;;BrowserItem.columnCountBrowserItem.columnCountBrowserItem.columnCountF 555BrowserItem.childrenBrowserItem.childrenBrowserItem.childrenL 999BrowserItem.childCountBrowserItem.childCountBrowserItem.childCount= ///BrowserItem.childBrowserItem.childBrowserItem.childO ;;;BrowserItem.appendChildBrowserItem.appendChildBrowserItem.appendChildP??5BrowserItem (Constructor)BrowserItem (Constructor)BrowserItem.__init__+###BrowserItemBrowserItemBrowserItemO;;;BrowserFileItem.setNameBrowserFileItem.setNameBrowserFileItem.setNameF555BrowserFileItem.nameBrowserFileItem.nameBrowserFileItem.nameXAAABrowserFileItem.moduleNameBrowserFileItem.moduleNameBrowserFileItem.moduleName ie;i)iXAAABrowserMethodItem.fileNameBrowserMethodItem.fileNameBrowserMethodItem.fileNamebKKABrowserMethodItem (Constructor)BrowserMethodItem (Constructor)BrowserMethodItem.__init__=///BrowserMethodItemBrowserMethodItemBrowserMethodItem:---BrowserItem.typeBrowserItem.typeBrowserItem.type7+++BrowserItem.rowBrowserItem.rowBrowserItem.rowXAAABrowserItem.removeChildrenBrowserItem.removeChildrenBrowserItem.removeChildrenO;;;BrowserItem.removeChildBrowserItem.removeChildBrowserItem.removeChild@111BrowserItem.parentBrowserItem.parentBrowserItem.parentF555BrowserItem.lessThanBrowserItem.lessThanBrowserItem.lessThanI777BrowserItem.isSymlinkBrowserItem.isSymlinkBrowserItem.isSymlinkF555BrowserItem.isPublicBrowserItem.isPublicBrowserItem.isPublicO;;;BrowserItem.isPopulatedBrowserItem.isPopulatedBrowserItem.isPopulated R8WiRg'KKKBrowserModel._removeWatchedItemBrowserModel._removeWatchedItemBrowserModel._removeWatchedItem^&EEEBrowserModel._addWatchedItemBrowserModel._addWatchedItemBrowserModel._addWatchedItemI%777BrowserModel._addItemBrowserModel._addItemBrowserModel._addItem^$EEEBrowserModel.__populateModelBrowserModel.__populateModelBrowserModel.__populateModel4#77BrowserModel (Module)BrowserModel (Module)S"AA7BrowserModel (Constructor)BrowserModel (Constructor)BrowserModel.__init__.!%%%BrowserModelBrowserModelBrowserModelR ===BrowserMethodItem.linenoBrowserMethodItem.linenoBrowserMethodItem.linenoXAAABrowserMethodItem.lessThanBrowserMethodItem.lessThanBrowserMethodItem.lessThanXAAABrowserMethodItem.isPublicBrowserMethodItem.isPublicBrowserMethodItem.isPublicjMMMBrowserMethodItem.functionObjectBrowserMethodItem.functionObjectBrowserMethodItem.functionObject jY3jC3333BrowserModel.parentBrowserModel.parentBrowserModel.parent=2///BrowserModel.itemBrowserModel.itemBrowserModel.item@1111BrowserModel.indexBrowserModel.indexBrowserModel.indexO0;;;BrowserModel.headerDataBrowserModel.headerDataBrowserModel.headerDataR/===BrowserModel.hasChildrenBrowserModel.hasChildrenBrowserModel.hasChildren@.111BrowserModel.flagsBrowserModel.flagsBrowserModel.flagsa-GGGBrowserModel.directoryChangedBrowserModel.directoryChangedBrowserModel.directoryChanged=,///BrowserModel.dataBrowserModel.dataBrowserModel.dataR+===BrowserModel.columnCountBrowserModel.columnCountBrowserModel.columnCount@*111BrowserModel.clearBrowserModel.clearBrowserModel.clear[)CCCBrowserModel.addTopLevelDirBrowserModel.addTopLevelDirBrowserModel.addTopLevelDirF(555BrowserModel.addItemBrowserModel.addItemBrowserModel.addItem Kz<z Kd<IIIBrowserModel.removeToplevelDirBrowserModel.removeToplevelDirBrowserModel.removeToplevelDirX;AAABrowserModel.programChangeBrowserModel.programChangeBrowserModel.programChangej:MMMBrowserModel.populateSysPathItemBrowserModel.populateSysPathItemBrowserModel.populateSysPathItemg9KKKBrowserModel.populateMethodItemBrowserModel.populateMethodItemBrowserModel.populateMethodItemU8???BrowserModel.populateItemBrowserModel.populateItemBrowserModel.populateItema7GGGBrowserModel.populateFileItemBrowserModel.populateFileItemBrowserModel.populateFileItemp6QQQBrowserModel.populateDirectoryItemBrowserModel.populateDirectoryItemBrowserModel.populateDirectoryItemd5IIIBrowserModel.populateClassItemBrowserModel.populateClassItemBrowserModel.populateClassItem4]]]BrowserModel.populateClassAttributesItemBrowserModel.populateClassAttributesItemBrowserModel.populateClassAttributesItem PnvEUUUBrowserSortFilterProxyModel.lessThanBrowserSortFilterProxyModel.lessThanBrowserSortFilterProxyModel.lessThanjDMMMBrowserSortFilterProxyModel.itemBrowserSortFilterProxyModel.itemBrowserSortFilterProxyModel.itemC[[[BrowserSortFilterProxyModel.hasChildrenBrowserSortFilterProxyModel.hasChildrenBrowserSortFilterProxyModel.hasChildrenBeeeBrowserSortFilterProxyModel.filterAcceptsRowBrowserSortFilterProxyModel.filterAcceptsRowBrowserSortFilterProxyModel.filterAcceptsRowRAUUBrowserSortFilterProxyModel (Module)BrowserSortFilterProxyModel (Module)@__UBrowserSortFilterProxyModel (Constructor)BrowserSortFilterProxyModel (Constructor)BrowserSortFilterProxyModel.__init__[?CCCBrowserSortFilterProxyModelBrowserSortFilterProxyModelBrowserSortFilterProxyModela>GGGBrowserModel.saveToplevelDirsBrowserModel.saveToplevelDirsBrowserModel.saveToplevelDirsI=777BrowserModel.rowCountBrowserModel.rowCountBrowserModel.rowCount ChP8C>P33)Class (Constructor)Class (Constructor)Class.__init__OClassClassClass:N==CheckerPlugins (Package)CheckerPlugins (Package)SXMAAAChangeBookmarkCommand.undoChangeBookmarkCommand.undoChangeBookmarkCommand.undoXLAAAChangeBookmarkCommand.redoChangeBookmarkCommand.redoChangeBookmarkCommand.redonKSSIChangeBookmarkCommand (Constructor)ChangeBookmarkCommand (Constructor)ChangeBookmarkCommand.__init__IJ777ChangeBookmarkCommandChangeBookmarkCommandChangeBookmarkCommandeIMMCBrowserSysPathItem (Constructor)BrowserSysPathItem (Constructor)BrowserSysPathItem.__init__@H111BrowserSysPathItemBrowserSysPathItemBrowserSysPathItemjGMMMBrowserSortFilterProxyModel.sortBrowserSortFilterProxyModel.sortBrowserSortFilterProxyModel.sortFiiiBrowserSortFilterProxyModel.preferencesChangedBrowserSortFilterProxyModel.preferencesChangedBrowserSortFilterProxyModel.preferencesChanged 8t:F e r87_+++ClassItem.paintClassItem.paintClassItem.paintF^555ClassItem.isExternalClassItem.isExternalClassItem.isExternalO];;;ClassItem.__createTextsClassItem.__createTextsClassItem.__createTextsU\???ClassItem.__calculateSizeClassItem.__calculateSizeClassItem.__calculateSize.[11ClassItem (Module)ClassItem (Module)JZ;;1ClassItem (Constructor)ClassItem (Constructor)ClassItem.__init__%YClassItemClassItemClassItem8X;;ClassBrowsers (Package)ClassBrowsers (Package)w:W---Class.setEndLineClass.setEndLine Class.setEndLine7V+++Class.getMethodClass.getMethod Class.getMethod@U111Class.getAttributeClass.getAttribute Class.getAttribute7T+++Class.addMethodClass.addMethod Class.addMethod7S+++Class.addGlobalClass.addGlobal Class.addGlobalFR555Class.addDescriptionClass.addDescription Class.addDescription@Q111Class.addAttributeClass.addAttribute Class.addAttribute 6BRT|6Cm333ClbrBase._addmethodClbrBase._addmethodClbrBase._addmethodCl333ClbrBase._addglobalClbrBase._addglobalClbrBase._addglobal@k111ClbrBase._addclassClbrBase._addclassClbrBase._addclassLj999ClbrBase._addattributeClbrBase._addattributeClbrBase._addattributeGi99/ClbrBase (Constructor)ClbrBase (Constructor)ClbrBase.__init__"hClbrBaseClbrBaseClbrBase@g111ClassModel.getNameClassModel.getNameClassModel.getNameIf777ClassModel.getMethodsClassModel.getMethodsClassModel.getMethodsRe===ClassModel.getAttributesClassModel.getAttributesClassModel.getAttributesFd555ClassModel.addMethodClassModel.addMethodClassModel.addMethodOc;;;ClassModel.addAttributeClassModel.addAttributeClassModel.addAttributeMb==3ClassModel (Constructor)ClassModel (Constructor)ClassModel.__init__(a!!!ClassModelClassModelClassModel@`111ClassItem.setModelClassItem.setModelClassItem.setModel Wk%&CWvwUUUClbrVisibilityMixinBase.setProtectedClbrVisibilityMixinBase.setProtectedClbrVisibilityMixinBase.setProtectedpvQQQClbrVisibilityMixinBase.setPrivateClbrVisibilityMixinBase.setPrivateClbrVisibilityMixinBase.setPrivatejuMMMClbrVisibilityMixinBase.isPublicClbrVisibilityMixinBase.isPublicClbrVisibilityMixinBase.isPublicstSSSClbrVisibilityMixinBase.isProtectedClbrVisibilityMixinBase.isProtectedClbrVisibilityMixinBase.isProtectedmsOOOClbrVisibilityMixinBase.isPrivateClbrVisibilityMixinBase.isPrivateClbrVisibilityMixinBase.isPrivateOr;;;ClbrVisibilityMixinBaseClbrVisibilityMixinBaseClbrVisibilityMixinBase:q==ClbrBaseClasses (Module)ClbrBaseClasses (Module)Cp333ClbrBase._getmethodClbrBase._getmethodClbrBase._getmethodCo333ClbrBase._getglobalClbrBase._getglobalClbrBase._getglobalLn999ClbrBase._getattributeClbrBase._getattributeClbrBase._getattribute Tr6"k)T<///Client.traceRuby?Client.traceRuby?-Client.traceRuby?Q===Client.printf_scriptExcnClient.printf_scriptExcn-Client.printf_scriptExcn?111Client.printf_lineClient.printf_line-Client.printf_line?111Client.printf_exitClient.printf_exit-Client.printf_exit?111Client.printf_excnClient.printf_excn-Client.printf_excnrSSSClient.printf_clear_watchexpressionClient.printf_clear_watchexpression-Client.printf_clear_watchexpressionc~IIIClient.printf_clear_breakpointClient.printf_clear_breakpoint-Client.printf_clear_breakpoint0}'''Client.printfClient.printf-Client.printf<|///Client.initializeClient.initialize-Client.initialize9{---Client.eventPollClient.eventPoll-Client.eventPoll9z---Client.eventLoopClient.eventLoop-Client.eventLoopyClientClient-ClientmxOOOClbrVisibilityMixinBase.setPublicClbrVisibilityMixinBase.setPublicClbrVisibilityMixinBase.setPublic 3)q93]]]CodeMetricsDialog.__resizeSummaryColumnsCodeMetricsDialog.__resizeSummaryColumnsCodeMetricsDialog.__resizeSummaryColumns~ [[[CodeMetricsDialog.__resizeResultColumnsCodeMetricsDialog.__resizeResultColumnsCodeMetricsDialog.__resizeResultColumns` GGGCodeMetricsDialog.__getValuesCodeMetricsDialog.__getValuesCodeMetricsDialog.__getValuesW AAACodeMetricsDialog.__finishCodeMetricsDialog.__finishCodeMetricsDialog.__finishx WWWCodeMetricsDialog.__createSummaryItemCodeMetricsDialog.__createSummaryItemCodeMetricsDialog.__createSummaryItemu UUUCodeMetricsDialog.__createResultItemCodeMetricsDialog.__createResultItemCodeMetricsDialog.__createResultItem=AACodeMetricsDialog (Module)CodeMetricsDialog (Module)aKKACodeMetricsDialog (Constructor)CodeMetricsDialog (Constructor)CodeMetricsDialog.__init__<///CodeMetricsDialogCodeMetricsDialogCodeMetricsDialog155CodeMetrics (Module)CodeMetrics (Module) +"/{Mk+=///ColorDialogWizardColorDialogWizardColorDialogWizardC333CodingError.__str__CodingError.__str__CodingError.__str__F555CodingError.__repr__CodingError.__repr__CodingError.__repr__P??5CodingError (Constructor)CodingError (Constructor)CodingError.__init__+###CodingErrorCodingErrorCodingErrorA55+Coding (Constructor)Coding (Constructor)Coding.__init__CodingCodingCodingN;;;CodeMetricsDialog.startCodeMetricsDialog.startCodeMetricsDialog.start{YYYCodeMetricsDialog.on_buttonBox_clickedCodeMetricsDialog.on_buttonBox_clickedCodeMetricsDialog.on_buttonBox_clickedrSSSCodeMetricsDialog.__showContextMenuCodeMetricsDialog.__showContextMenuCodeMetricsDialog.__showContextMenuiMMMCodeMetricsDialog.__resultExpandCodeMetricsDialog.__resultExpandCodeMetricsDialog.__resultExpandoQQQCodeMetricsDialog.__resultCollapseCodeMetricsDialog.__resultCollapseCodeMetricsDialog.__resultCollapse OX5yOt$WWMColorDialogWizardDialog (Constructor)ColorDialogWizardDialog (Constructor)NColorDialogWizardDialog.__init__O#;;;ColorDialogWizardDialogColorDialogWizardDialogNColorDialogWizardDialog^"EEEColorDialogWizard.deactivateColorDialogWizard.deactivateColorDialogWizard.deactivateX!AAAColorDialogWizard.activateColorDialogWizard.activateColorDialogWizard.activate^ EEEColorDialogWizard.__initMenuColorDialogWizard.__initMenuColorDialogWizard.__initMenudIIIColorDialogWizard.__initActionColorDialogWizard.__initActionColorDialogWizard.__initActionXAAAColorDialogWizard.__handleColorDialogWizard.__handleColorDialogWizard.__handle^EEEColorDialogWizard.__callFormColorDialogWizard.__callFormColorDialogWizard.__callForm@CCColorDialogWizard (Package)ColorDialogWizard (Package)abKKAColorDialogWizard (Constructor)ColorDialogWizard (Constructor)ColorDialogWizard.__init__ 4I1{4D,GGCommandOptionsDialog (Module)CommandOptionsDialog (Module)+]]]ColorDialogWizardDialog.on_rQt45_toggledColorDialogWizardDialog.on_rQt45_toggledNColorDialogWizardDialog.on_rQt45_toggled *cccColorDialogWizardDialog.on_eRGB_textChangedColorDialogWizardDialog.on_eRGB_textChangedNColorDialogWizardDialog.on_eRGB_textChanged)oooColorDialogWizardDialog.on_eColor_editTextChangedColorDialogWizardDialog.on_eColor_editTextChangedNColorDialogWizardDialog.on_eColor_editTextChanged(eeeColorDialogWizardDialog.on_buttonBox_clickedColorDialogWizardDialog.on_buttonBox_clickedNColorDialogWizardDialog.on_buttonBox_clicked']]]ColorDialogWizardDialog.on_bTest_clickedColorDialogWizardDialog.on_bTest_clickedNColorDialogWizardDialog.on_bTest_clickedg&KKKColorDialogWizardDialog.getCodeColorDialogWizardDialog.getCodeNColorDialogWizardDialog.getCodeJ%MMColorDialogWizardDialog (Module)ColorDialogWizardDialog (Module)N Ps:9Ps6SSSCompareDialog.on_diffButton_clickedCompareDialog.on_diffButton_clickedCompareDialog.on_diffButton_clickedp5QQQCompareDialog.on_buttonBox_clickedCompareDialog.on_buttonBox_clickedCompareDialog.on_buttonBox_clickedX4AAACompareDialog.__selectFileCompareDialog.__selectFileCompareDialog.__selectFiled3IIICompareDialog.__scrollBarMovedCompareDialog.__scrollBarMovedCompareDialog.__scrollBarMoved2]]]CompareDialog.__moveTextToCurrentDiffPosCompareDialog.__moveTextToCurrentDiffPosCompareDialog.__moveTextToCurrentDiffPos[1CCCCompareDialog.__fileChangedCompareDialog.__fileChangedCompareDialog.__fileChangedX0AAACompareDialog.__appendTextCompareDialog.__appendTextCompareDialog.__appendText6/99CompareDialog (Module)CompareDialog (Module)V.CC9CompareDialog (Constructor)CompareDialog (Constructor)CompareDialog.__init__1-'''CompareDialogCompareDialogCompareDialog 0d01?'''CompareWindowCompareWindowCompareWindow@>111CompareDialog.showCompareDialog.showCompareDialog.showm=OOOCompareDialog.on_upButton_clickedCompareDialog.on_upButton_clickedCompareDialog.on_upButton_clicked<eeeCompareDialog.on_synchronizeCheckBox_toggledCompareDialog.on_synchronizeCheckBox_toggledCompareDialog.on_synchronizeCheckBox_toggleds;SSSCompareDialog.on_lastButton_clickedCompareDialog.on_lastButton_clickedCompareDialog.on_lastButton_clickedv:UUUCompareDialog.on_firstButton_clickedCompareDialog.on_firstButton_clickedCompareDialog.on_firstButton_clickedv9UUUCompareDialog.on_file2Button_clickedCompareDialog.on_file2Button_clickedCompareDialog.on_file2Button_clickedv8UUUCompareDialog.on_file1Button_clickedCompareDialog.on_file1Button_clickedCompareDialog.on_file1Button_clickeds7SSSCompareDialog.on_downButton_clickedCompareDialog.on_downButton_clickedCompareDialog.on_downButton_clicked BO(Ok#BVLCC9CompleterBase (Constructor)CompleterBase (Constructor)CompleterBase.__init__1K'''CompleterBaseCompleterBaseCompleterBaseQJ===Completer.select_messageCompleter.select_message&Completer.select_messageEI555Completer.initializeCompleter.initialize&Completer.initializeQH===Completer.global_matchesCompleter.global_matchesCompleter.global_matches?G111Completer.completeCompleter.completeCompleter.completeKF999Completer.attr_matchesCompleter.attr_matchesCompleter.attr_matchesZECCCCompleter._callable_postfixCompleter._callable_postfix Completer._callable_postfix-D11Completer (Module)Completer (Module)&IC;;1Completer (Constructor)Completer (Constructor)Completer.__init__$BCompleterCompleterCompleterUA???CompareWindow.eventFilterCompareWindow.eventFilterCompareWindow.eventFilterV@CC9CompareWindow (Constructor)CompareWindow (Constructor)CompareWindow.__init__ u#s9$sWSSSCompleterPython.__dedentExceptToTryCompleterPython.__dedentExceptToTryCompleterPython.__dedentExceptToTry VcccCompleterPython.__dedentElseToIfWhileForTryCompleterPython.__dedentElseToIfWhileForTryCompleterPython.__dedentElseToIfWhileForTryvUUUUCompleterPython.__dedentDefStatementCompleterPython.__dedentDefStatementCompleterPython.__dedentDefStatement:T==CompleterPython (Module)CompleterPython (Module)\SGG=CompleterPython (Constructor)CompleterPython (Constructor)CompleterPython.__init__7R+++CompleterPythonCompleterPythonCompleterPythonRQ===CompleterBase.setEnabledCompleterBase.setEnabledCompleterBase.setEnabledXPAAACompleterBase.readSettingsCompleterBase.readSettingsCompleterBase.readSettingsOO;;;CompleterBase.isEnabledCompleterBase.isEnabledCompleterBase.isEnabledON;;;CompleterBase.charAddedCompleterBase.charAddedCompleterBase.charAdded6M99CompleterBase (Module)CompleterBase (Module) <&I8<g_KKKCompleterPython.__isClassMethodCompleterPython.__isClassMethodCompleterPython.__isClassMethod^eeeCompleterPython.__inTripleSingleQuotedStringCompleterPython.__inTripleSingleQuotedStringCompleterPython.__inTripleSingleQuotedString]eeeCompleterPython.__inTripleDoubleQuotedStringCompleterPython.__inTripleDoubleQuotedStringCompleterPython.__inTripleDoubleQuotedString|\YYYCompleterPython.__inSingleQuotedStringCompleterPython.__inSingleQuotedStringCompleterPython.__inSingleQuotedString|[YYYCompleterPython.__inDoubleQuotedStringCompleterPython.__inDoubleQuotedStringCompleterPython.__inDoubleQuotedString[ZCCCCompleterPython.__inCommentCompleterPython.__inCommentCompleterPython.__inComment^YEEECompleterPython.__dedentToIfCompleterPython.__dedentToIfCompleterPython.__dedentToIfvXUUUCompleterPython.__dedentFinallyToTryCompleterPython.__dedentFinallyToTryCompleterPython.__dedentFinallyToTry i5G=ijiMMMCompleterRuby.__inInlineDocumentCompleterRuby.__inInlineDocumentCompleterRuby.__inInlineDocumentdhIIICompleterRuby.__inHereDocumentCompleterRuby.__inHereDocumentCompleterRuby.__inHereDocumentvgUUUCompleterRuby.__inDoubleQuotedStringCompleterRuby.__inDoubleQuotedStringCompleterRuby.__inDoubleQuotedStringUf???CompleterRuby.__inCommentCompleterRuby.__inCommentCompleterRuby.__inComment6e99CompleterRuby (Module)CompleterRuby (Module)VdCC9CompleterRuby (Constructor)CompleterRuby (Constructor)CompleterRuby.__init__1c'''CompleterRubyCompleterRubyCompleterRuby^bEEECompleterPython.readSettingsCompleterPython.readSettingsCompleterPython.readSettingsUa???CompleterPython.charAddedCompleterPython.charAddedCompleterPython.charAddedp`QQQCompleterPython.__isClassmethodDefCompleterPython.__isClassmethodDefCompleterPython.__isClassmethodDef &5j4&skkkConfigurationDialog.showConfigurationPageByNameConfigurationDialog.showConfigurationPageByNameYConfigurationDialog.showConfigurationPageByNameprQQQConfigurationDialog.setPreferencesConfigurationDialog.setPreferencesYConfigurationDialog.setPreferencesq]]]ConfigurationDialog.__preferencesChangedConfigurationDialog.__preferencesChangedYConfigurationDialog.__preferencesChangedBpEEConfigurationDialog (Module)ConfigurationDialog (Module)YhoOOEConfigurationDialog (Constructor)ConfigurationDialog (Constructor)YConfigurationDialog.__init__Cn333ConfigurationDialogConfigurationDialogYConfigurationDialog'm++Config (Module)Config (Module)'XlAAACompleterRuby.readSettingsCompleterRuby.readSettingsCompleterRuby.readSettingsOk;;;CompleterRuby.charAddedCompleterRuby.charAddedCompleterRuby.charAddedvjUUUCompleterRuby.__inSingleQuotedStringCompleterRuby.__inSingleQuotedStringCompleterRuby.__inSingleQuotedString ,qJs,d}IIIConfigurationPageBase.setStateConfigurationPageBase.setState[ConfigurationPageBase.setStatej|MMMConfigurationPageBase.selectFontConfigurationPageBase.selectFont[ConfigurationPageBase.selectFontp{QQQConfigurationPageBase.selectColourConfigurationPageBase.selectColour[ConfigurationPageBase.selectColourgzKKKConfigurationPageBase.saveStateConfigurationPageBase.saveState[ConfigurationPageBase.saveStatejyMMMConfigurationPageBase.polishPageConfigurationPageBase.polishPage[ConfigurationPageBase.polishPagejxMMMConfigurationPageBase.initColourConfigurationPageBase.initColour[ConfigurationPageBase.initColourFwIIConfigurationPageBase (Module)ConfigurationPageBase (Module)[nvSSIConfigurationPageBase (Constructor)ConfigurationPageBase (Constructor)[ConfigurationPageBase.__init__Iu777ConfigurationPageBaseConfigurationPageBase[ConfigurationPageBase@tCCConfigurationPage (Package)ConfigurationPage (Package)X GCH^GgggConfigurationWidget.__importConfigurationPageConfigurationWidget.__importConfigurationPageYConfigurationWidget.__importConfigurationPage[[[ConfigurationWidget.__filterTextChangedConfigurationWidget.__filterTextChangedYConfigurationWidget.__filterTextChanged|YYYConfigurationWidget.__filterChildItemsConfigurationWidget.__filterChildItemsYConfigurationWidget.__filterChildItemshOOEConfigurationWidget (Constructor)ConfigurationWidget (Constructor)YConfigurationWidget.__init__C333ConfigurationWidgetConfigurationWidgetYConfigurationWidgetBEEConfigurationPages (Package)ConfigurationPages (Package)jmOOOConfigurationPageItem.getPageNameConfigurationPageItem.getPageNameYConfigurationPageItem.getPageNamenSSIConfigurationPageItem (Constructor)ConfigurationPageItem (Constructor)YConfigurationPageItem.__init__I~777ConfigurationPageItemConfigurationPageItemYConfigurationPageItem ,9kaaaConfigurationWidget.on_applyButton_clickedConfigurationWidget.on_applyButton_clickedYConfigurationWidget.on_applyButton_clicked[CCCConfigurationWidget.getPageConfigurationWidget.getPageYConfigurationWidget.getPagea GGGConfigurationWidget.getLexersConfigurationWidget.getLexersYConfigurationWidget.getLexersp QQQConfigurationWidget.calledFromEricConfigurationWidget.calledFromEricYConfigurationWidget.calledFromEricX AAAConfigurationWidget.acceptConfigurationWidget.acceptYConfigurationWidget.accept cccConfigurationWidget.__showConfigurationPageConfigurationWidget.__showConfigurationPageYConfigurationWidget.__showConfigurationPagea GGGConfigurationWidget.__setupUiConfigurationWidget.__setupUiYConfigurationWidget.__setupUidIIIConfigurationWidget.__initPageConfigurationWidget.__initPageYConfigurationWidget.__initPagejMMMConfigurationWidget.__initLexersConfigurationWidget.__initLexersYConfigurationWidget.__initLexers 9z{/9kkkConfigurationWindow.showConfigurationPageByNameConfigurationWindow.showConfigurationPageByNameYConfigurationWindow.showConfigurationPageByNameXAAAConfigurationWindow.acceptConfigurationWindow.acceptYConfigurationWindow.accepthOOEConfigurationWindow (Constructor)ConfigurationWindow (Constructor)YConfigurationWindow.__init__C333ConfigurationWindowConfigurationWindowYConfigurationWindowkkkConfigurationWidget.showConfigurationPageByNameConfigurationWidget.showConfigurationPageByNameYConfigurationWidget.showConfigurationPageByNamepQQQConfigurationWidget.setPreferencesConfigurationWidget.setPreferencesYConfigurationWidget.setPreferencesaaaConfigurationWidget.on_resetButton_clickedConfigurationWidget.on_resetButton_clickedYConfigurationWidget.on_resetButton_clicked]]]ConfigurationWidget.on_buttonBox_clickedConfigurationWidget.on_buttonBox_clickedYConfigurationWidget.on_buttonBox_clicked +Cz5o$j+<&///Context.stop_nextContext.stop_next-Context.stop_next<%///Context.step_quitContext.step_quit-Context.step_quit<$///Context.step_overContext.step_over-Context.step_over9#---Context.step_outContext.step_out-Context.step_outH"777Context.step_continueContext.step_continue-Context.step_continueB!333Context.set_suspendContext.set_suspend-Context.set_suspend? 111Context.initializeContext.initialize-Context.initialize<///Context.get_frameContext.get_frame-Context.get_frameB333Context.get_bindingContext.get_binding-Context.get_binding<///Context.eventPollContext.eventPoll-Context.eventPoll<///Context.eventLoopContext.eventLoop-Context.eventLoopH777Context.current_frameContext.current_frame-Context.current_frameN;;;Context.current_bindingContext.current_binding-Context.current_bindingH777Context.clear_suspendContext.clear_suspend-Context.clear_suspendContextContext-Context Qy3%hQa1GGGCookieExceptionsModel.addRuleCookieExceptionsModel.addRuleCookieExceptionsModel.addRuleg0KKKCookieExceptionsModel.__addHostCookieExceptionsModel.__addHostCookieExceptionsModel.__addHostF/IICookieExceptionsModel (Module)CookieExceptionsModel (Module)n.SSICookieExceptionsModel (Constructor)CookieExceptionsModel (Constructor)CookieExceptionsModel.__init__I-777CookieExceptionsModelCookieExceptionsModelCookieExceptionsModel[,CCCCookieDetailsDialog.setDataCookieDetailsDialog.setDataCookieDetailsDialog.setDataB+EECookieDetailsDialog (Module)CookieDetailsDialog (Module)h*OOECookieDetailsDialog (Constructor)CookieDetailsDialog (Constructor)CookieDetailsDialog.__init__C)333CookieDetailsDialogCookieDetailsDialogCookieDetailsDialog?(111Context.traceRuby?Context.traceRuby?-Context.traceRuby?B'333Context.suspend_allContext.suspend_all-Context.suspend_all q5[NqX<AAACookieJar.__isOnDomainListCookieJar.__isOnDomainListCookieJar.__isOnDomainListL;999CookieJar.__applyRulesCookieJar.__applyRulesCookieJar.__applyRules0:33CookieJar (Package)CookieJar (Package)E.911CookieJar (Module)CookieJar (Module)J8;;1CookieJar (Constructor)CookieJar (Constructor)CookieJar.__init__%7CookieJarCookieJarCookieJard6IIICookieExceptionsModel.rowCountCookieExceptionsModel.rowCountCookieExceptionsModel.rowCountj5MMMCookieExceptionsModel.removeRowsCookieExceptionsModel.removeRowsCookieExceptionsModel.removeRowsj4MMMCookieExceptionsModel.headerDataCookieExceptionsModel.headerDataCookieExceptionsModel.headerDataX3AAACookieExceptionsModel.dataCookieExceptionsModel.dataCookieExceptionsModel.datam2OOOCookieExceptionsModel.columnCountCookieExceptionsModel.columnCountCookieExceptionsModel.columnCount LS<6L4H)))CookieJar.loadCookieJar.loadCookieJar.loadFG555CookieJar.keepPolicyCookieJar.keepPolicyCookieJar.keepPolicygFKKKCookieJar.filterTrackingCookiesCookieJar.filterTrackingCookiesCookieJar.filterTrackingCookiesOE;;;CookieJar.cookiesForUrlCookieJar.cookiesForUrlCookieJar.cookiesForUrl=D///CookieJar.cookiesCookieJar.cookiesCookieJar.cookies7C+++CookieJar.closeCookieJar.closeCookieJar.close7B+++CookieJar.clearCookieJar.clearCookieJar.clearRA===CookieJar.blockedCookiesCookieJar.blockedCookiesCookieJar.blockedCookiesR@===CookieJar.allowedCookiesCookieJar.allowedCookiesCookieJar.allowedCookiesj?MMMCookieJar.allowForSessionCookiesCookieJar.allowForSessionCookiesCookieJar.allowForSessionCookiesL>999CookieJar.acceptPolicyCookieJar.acceptPolicyCookieJar.acceptPolicy[=CCCCookieJar.__purgeOldCookiesCookieJar.__purgeOldCookiesCookieJar.__purgeOldCookies ;}1c^;OS;;;CookieJar.setKeepPolicyCookieJar.setKeepPolicyCookieJar.setKeepPolicypRQQQCookieJar.setFilterTrackingCookiesCookieJar.setFilterTrackingCookiesCookieJar.setFilterTrackingCookies[QCCCCookieJar.setCookiesFromUrlCookieJar.setCookiesFromUrlCookieJar.setCookiesFromUrlFP555CookieJar.setCookiesCookieJar.setCookiesCookieJar.setCookies[OCCCCookieJar.setBlockedCookiesCookieJar.setBlockedCookiesCookieJar.setBlockedCookies[NCCCCookieJar.setAllowedCookiesCookieJar.setAllowedCookiesCookieJar.setAllowedCookiessMSSSCookieJar.setAllowForSessionCookiesCookieJar.setAllowForSessionCookiesCookieJar.setAllowForSessionCookiesUL???CookieJar.setAcceptPolicyCookieJar.setAcceptPolicyCookieJar.setAcceptPolicyIK777CookieJar.saveCookiesCookieJar.saveCookiesCookieJar.saveCookies4J)))CookieJar.saveCookieJar.saveCookieJar.saveII777CookieJar.loadCookiesCookieJar.loadCookiesCookieJar.loadCookies EJZ sEP_SSCookiesConfigurationDialog (Module)CookiesConfigurationDialog (Module)}^]]SCookiesConfigurationDialog (Constructor)CookiesConfigurationDialog (Constructor)CookiesConfigurationDialog.__init__X]AAACookiesConfigurationDialogCookiesConfigurationDialogCookiesConfigurationDialogF\555CookieModel.rowCountCookieModel.rowCountCookieModel.rowCountL[999CookieModel.removeRowsCookieModel.removeRowsCookieModel.removeRowsLZ999CookieModel.headerDataCookieModel.headerDataCookieModel.headerData:Y---CookieModel.dataCookieModel.dataCookieModel.dataOX;;;CookieModel.columnCountCookieModel.columnCountCookieModel.columnCount^WEEECookieModel.__cookiesChangedCookieModel.__cookiesChangedCookieModel.__cookiesChanged2V55CookieModel (Module)CookieModel (Module)PU??5CookieModel (Constructor)CookieModel (Constructor)CookieModel.__init__+T###CookieModelCookieModelCookieModel 9syhWWWCookiesDialog.__tableSelectionChangedCookiesDialog.__tableSelectionChangedCookiesDialog.__tableSelectionChangedggKKKCookiesDialog.__tableModelResetCookiesDialog.__tableModelResetCookiesDialog.__tableModelResetmfOOOCookiesDialog.__showCookieDetailsCookiesDialog.__showCookieDetailsCookiesDialog.__showCookieDetails6e99CookiesDialog (Module)CookiesDialog (Module)VdCC9CookiesDialog (Constructor)CookiesDialog (Constructor)CookiesDialog.__init__1c'''CookiesDialogCookiesDialogCookiesDialog,byyyCookiesConfigurationDialog.on_exceptionsButton_clickedCookiesConfigurationDialog.on_exceptionsButton_clickedCookiesConfigurationDialog.on_exceptionsButton_clicked#asssCookiesConfigurationDialog.on_cookiesButton_clickedCookiesConfigurationDialog.on_cookiesButton_clickedCookiesConfigurationDialog.on_cookiesButton_clickedm`OOOCookiesConfigurationDialog.acceptCookiesConfigurationDialog.acceptCookiesConfigurationDialog.accept ;w)oiiiCookiesExceptionsDialog.on_blockButton_clickedCookiesExceptionsDialog.on_blockButton_clickedCookiesExceptionsDialog.on_blockButton_clicked2n}}}CookiesExceptionsDialog.on_allowForSessionButton_clickedCookiesExceptionsDialog.on_allowForSessionButton_clickedCookiesExceptionsDialog.on_allowForSessionButton_clickedmiiiCookiesExceptionsDialog.on_allowButton_clickedCookiesExceptionsDialog.on_allowButton_clickedCookiesExceptionsDialog.on_allowButton_clickedJlMMCookiesExceptionsDialog (Module)CookiesExceptionsDialog (Module)tkWWMCookiesExceptionsDialog (Constructor)CookiesExceptionsDialog (Constructor)CookiesExceptionsDialog.__init__Oj;;;CookiesExceptionsDialogCookiesExceptionsDialogCookiesExceptionsDialogpiQQQCookiesDialog.on_addButton_clickedCookiesDialog.on_addButton_clickedCookiesDialog.on_addButton_clicked _n=PpzQQQCreateDialogCodeDialog.__classNameCreateDialogCodeDialog.__classNameCreateDialogCodeDialog.__classNameHyKKCreateDialogCodeDialog (Module)CreateDialogCodeDialog (Module)qxUUKCreateDialogCodeDialog (Constructor)CreateDialogCodeDialog (Constructor)CreateDialogCodeDialog.__init__Lw999CreateDialogCodeDialogCreateDialogCodeDialogCreateDialogCodeDialog4v)))CorbaPage.saveCorbaPage.save\CorbaPage.saveduIIICorbaPage.on_idlButton_clickedCorbaPage.on_idlButton_clicked\CorbaPage.on_idlButton_clicked.t11CorbaPage (Module)CorbaPage (Module)\Js;;1CorbaPage (Constructor)CorbaPage (Constructor)\CorbaPage.__init__%rCorbaPageCorbaPage\CorbaPageyqWWWCookiesExceptionsDialog.setDomainNameCookiesExceptionsDialog.setDomainNameCookiesExceptionsDialog.setDomainNamepoooCookiesExceptionsDialog.on_domainEdit_textChangedCookiesExceptionsDialog.on_domainEdit_textChangedCookiesExceptionsDialog.on_domainEdit_textChanged jMMMCreateDialogCodeDialog.initErrorCreateDialogCodeDialog.initErrorCreateDialogCodeDialog.initError___CreateDialogCodeDialog.__updateSlotsModelCreateDialogCodeDialog.__updateSlotsModelCreateDialogCodeDialog.__updateSlotsModelsSSSCreateDialogCodeDialog.__signaturesCreateDialogCodeDialog.__signaturesCreateDialogCodeDialog.__signaturess~SSSCreateDialogCodeDialog.__objectNameCreateDialogCodeDialog.__objectNameCreateDialogCodeDialog.__objectNamej}MMMCreateDialogCodeDialog.__mapTypeCreateDialogCodeDialog.__mapTypeCreateDialogCodeDialog.__mapType |cccCreateDialogCodeDialog.__generatePythonCodeCreateDialogCodeDialog.__generatePythonCodeCreateDialogCodeDialog.__generatePythonCodey{WWWCreateDialogCodeDialog.__generateCodeCreateDialogCodeDialog.__generateCodeCreateDialogCodeDialog.__generateCode >q&t>3 77DCTestResult (Module)DCTestResult (Module)RAA7DCTestResult (Constructor)DCTestResult (Constructor)DCTestResult.__init__-%%%DCTestResultDCTestResultDCTestResult cccCreateDialogCodeDialog.on_newButton_clickedCreateDialogCodeDialog.on_newButton_clickedCreateDialogCodeDialog.on_newButton_clickedmmmCreateDialogCodeDialog.on_filterEdit_textChangedCreateDialogCodeDialog.on_filterEdit_textChangedCreateDialogCodeDialog.on_filterEdit_textChanged#sssCreateDialogCodeDialog.on_clearFilterButton_clickedCreateDialogCodeDialog.on_clearFilterButton_clickedCreateDialogCodeDialog.on_clearFilterButton_clicked qqqCreateDialogCodeDialog.on_classNameCombo_activatedCreateDialogCodeDialog.on_classNameCombo_activatedCreateDialogCodeDialog.on_classNameCombo_activated cccCreateDialogCodeDialog.on_buttonBox_clickedCreateDialogCodeDialog.on_buttonBox_clickedCreateDialogCodeDialog.on_buttonBox_clicked ^dGf^Q===DEBUGGER__.check_suspendDEBUGGER__.check_suspend-DEBUGGER__.check_suspend`GGGDEBUGGER__.check_break_pointsDEBUGGER__.check_break_points-DEBUGGER__.check_break_pointsN;;;DEBUGGER__.break_pointsDEBUGGER__.break_points-DEBUGGER__.break_pointsE555DEBUGGER__.attached?DEBUGGER__.attached?-DEBUGGER__.attached?<///DEBUGGER__.attachDEBUGGER__.attach-DEBUGGER__.attachWAAADEBUGGER__.add_watch_pointDEBUGGER__.add_watch_point-DEBUGGER__.add_watch_pointWAAADEBUGGER__.add_break_pointDEBUGGER__.add_break_point-DEBUGGER__.add_break_point'!!!DEBUGGER__DEBUGGER__-DEBUGGER__H 777DCTestResult.stopTestDCTestResult.stopTestDCTestResult.stopTestK 999DCTestResult.startTestDCTestResult.startTestDCTestResult.startTestN ;;;DCTestResult.addFailureDCTestResult.addFailureDCTestResult.addFailureH 777DCTestResult.addErrorDCTestResult.addErrorDCTestResult.addError 1@k E1K 999DEBUGGER__.excn_handleDEBUGGER__.excn_handle-DEBUGGER__.excn_handle`GGGDEBUGGER__.enable_watch_pointDEBUGGER__.enable_watch_point-DEBUGGER__.enable_watch_point`GGGDEBUGGER__.enable_break_pointDEBUGGER__.enable_break_point-DEBUGGER__.enable_break_point`GGGDEBUGGER__.delete_watch_pointDEBUGGER__.delete_watch_point-DEBUGGER__.delete_watch_point`GGGDEBUGGER__.delete_break_pointDEBUGGER__.delete_break_point-DEBUGGER__.delete_break_point]EEEDEBUGGER__.debug_silent_evalDEBUGGER__.debug_silent_eval-DEBUGGER__.debug_silent_evalQ===DEBUGGER__.debug_commandDEBUGGER__.debug_command-DEBUGGER__.debug_command?111DEBUGGER__.contextDEBUGGER__.context-DEBUGGER__.context<///DEBUGGER__.clientDEBUGGER__.client-DEBUGGER__.client]EEEDEBUGGER__.clear_watch_pointDEBUGGER__.clear_watch_point-DEBUGGER__.clear_watch_point]EEEDEBUGGER__.clear_break_pointDEBUGGER__.clear_break_point-DEBUGGER__.clear_break_point (I_ 0j(?-111DEBUGGER__.suspendDEBUGGER__.suspend-DEBUGGER__.suspend?,111DEBUGGER__.stdout=DEBUGGER__.stdout=-DEBUGGER__.stdout=<+///DEBUGGER__.stdoutDEBUGGER__.stdout-DEBUGGER__.stdoutB*333DEBUGGER__.skip_it?DEBUGGER__.skip_it?-DEBUGGER__.skip_it?W)AAADEBUGGER__.set_last_threadDEBUGGER__.set_last_thread-DEBUGGER__.set_last_threadH(777DEBUGGER__.set_clientDEBUGGER__.set_client-DEBUGGER__.set_clientH'777DEBUGGER__.resume_allDEBUGGER__.resume_all-DEBUGGER__.resume_all<&///DEBUGGER__.resumeDEBUGGER__.resume-DEBUGGER__.resume6%+++DEBUGGER__.quitDEBUGGER__.quit-DEBUGGER__.quitK$999DEBUGGER__.last_threadDEBUGGER__.last_thread-DEBUGGER__.last_thread`#GGGDEBUGGER__.ignore_watch_pointDEBUGGER__.ignore_watch_point-DEBUGGER__.ignore_watch_point`"GGGDEBUGGER__.ignore_break_pointDEBUGGER__.ignore_break_point-DEBUGGER__.ignore_break_pointQ!===DEBUGGER__.frame_set_posDEBUGGER__.frame_set_pos-DEBUGGER__.frame_set_pos oy7aw oB:333DebugBase.__skip_itDebugBase.__skip_it DebugBase.__skip_itT9???DebugBase.__extract_stackDebugBase.__extract_stack DebugBase.__extract_stacki8MMMDebugBase.__extractExceptionNameDebugBase.__extractExceptionNameDebugBase.__extractExceptionNameH7777DebugBase.__effectiveDebugBase.__effective DebugBase.__effectiveT6???DebugBase.__do_clearWatchDebugBase.__do_clearWatch DebugBase.__do_clearWatchE5555DebugBase.__do_clearDebugBase.__do_clear DebugBase.__do_clear-411DebugBase (Module)DebugBase (Module) I3;;1DebugBase (Constructor)DebugBase (Constructor) DebugBase.__init__$2DebugBaseDebugBase DebugBase0133DataViews (Package)DataViews (Package)6?0111DEBUGGER__.waitingDEBUGGER__.waiting-DEBUGGER__.waitingH/777DEBUGGER__.trace_funcDEBUGGER__.trace_func-DEBUGGER__.trace_func9.---DEBUGGER__.thnumDEBUGGER__.thnum-DEBUGGER__.thnum (dhZm(BF333DebugBase.get_breakDebugBase.get_break DebugBase.get_break?E111DebugBase.getStackDebugBase.getStack DebugBase.getStack?D111DebugBase.getEventDebugBase.getEvent DebugBase.getEventfCKKKDebugBase.getCurrentFrameLocalsDebugBase.getCurrentFrameLocals DebugBase.getCurrentFrameLocalsTB???DebugBase.getCurrentFrameDebugBase.getCurrentFrame DebugBase.getCurrentFrame]AEEEDebugBase.fix_frame_filenameDebugBase.fix_frame_filename DebugBase.fix_frame_filenameT@???DebugBase.dispatch_returnDebugBase.dispatch_return DebugBase.dispatch_returnN?;;;DebugBase.dispatch_lineDebugBase.dispatch_line DebugBase.dispatch_line]>EEEDebugBase.dispatch_exceptionDebugBase.dispatch_exception DebugBase.dispatch_exceptionH=777DebugBase.clear_watchDebugBase.clear_watch DebugBase.clear_watchE<555DebugBase.break_hereDebugBase.break_here DebugBase.break_hereQ;===DebugBase.break_anywhereDebugBase.break_anywhere DebugBase.break_anywhere 1I _]1QT===DebugBase.user_exceptionDebugBase.user_exception DebugBase.user_exceptionQS===DebugBase.trace_dispatchDebugBase.trace_dispatch DebugBase.trace_dispatchBR333DebugBase.stop_hereDebugBase.stop_here DebugBase.stop_hereMMMDebugServer.__restoreBreakpointsDebugServer.__restoreBreakpoints4DebugServer.__restoreBreakpointsu=UUUDebugServer.__remoteWatchpointIgnoreDebugServer.__remoteWatchpointIgnore4DebugServer.__remoteWatchpointIgnoreu<UUUDebugServer.__remoteWatchpointEnableDebugServer.__remoteWatchpointEnable4DebugServer.__remoteWatchpointEnable L_HLWMAAADebugServer.clientRawInputDebugServer.clientRawInput4DebugServer.clientRawInputQL===DebugServer.clientOutputDebugServer.clientOutput4DebugServer.clientOutputKK999DebugServer.clientLineDebugServer.clientLine4DebugServer.clientLineKJ999DebugServer.clientExitDebugServer.clientExit4DebugServer.clientExitZICCCDebugServer.clientExceptionDebugServer.clientException4DebugServer.clientExceptioniHMMMDebugServer.clientCompletionListDebugServer.clientCompletionList4DebugServer.clientCompletionList]GEEEDebugServer.clientClearWatchDebugServer.clientClearWatch4DebugServer.clientClearWatch]FEEEDebugServer.clientClearBreakDebugServer.clientClearBreak4DebugServer.clientClearBreakcEIIIDebugServer.clientCapabilitiesDebugServer.clientCapabilities4DebugServer.clientCapabilitiesxDWWWDebugServer.clientBreakConditionErrorDebugServer.clientBreakConditionError4DebugServer.clientBreakConditionError FR2rFfWKKKDebugServer.clientUtTestErroredDebugServer.clientUtTestErrored4DebugServer.clientUtTestErrored]VEEEDebugServer.clientUtStopTestDebugServer.clientUtStopTest4DebugServer.clientUtStopTest`UGGGDebugServer.clientUtStartTestDebugServer.clientUtStartTest4DebugServer.clientUtStartTest]TEEEDebugServer.clientUtPreparedDebugServer.clientUtPrepared4DebugServer.clientUtPrepared]SEEEDebugServer.clientUtFinishedDebugServer.clientUtFinished4DebugServer.clientUtFinishedZRCCCDebugServer.clientThreadSetDebugServer.clientThreadSet4DebugServer.clientThreadSet]QEEEDebugServer.clientThreadListDebugServer.clientThreadList4DebugServer.clientThreadList`PGGGDebugServer.clientSyntaxErrorDebugServer.clientSyntaxError4DebugServer.clientSyntaxErrorZOCCCDebugServer.clientStatementDebugServer.clientStatement4DebugServer.clientStatementNN;;;DebugServer.clientStackDebugServer.clientStack4DebugServer.clientStack s@h<sl`OOODebugServer.getSupportedLanguagesDebugServer.getSupportedLanguages4DebugServer.getSupportedLanguagesW_AAADebugServer.getHostAddressDebugServer.getHostAddress4DebugServer.getHostAddressT^???DebugServer.getExtensionsDebugServer.getExtensions4DebugServer.getExtensionsl]OOODebugServer.getClientCapabilitiesDebugServer.getClientCapabilities4DebugServer.getClientCapabilitiesc\IIIDebugServer.getBreakPointModelDebugServer.getBreakPointModel4DebugServer.getBreakPointModelx[WWWDebugServer.clientWatchConditionErrorDebugServer.clientWatchConditionError4DebugServer.clientWatchConditionErrorZZCCCDebugServer.clientVariablesDebugServer.clientVariables4DebugServer.clientVariablesWYAAADebugServer.clientVariableDebugServer.clientVariable4DebugServer.clientVariablecXIIIDebugServer.clientUtTestFailedDebugServer.clientUtTestFailed4DebugServer.clientUtTestFailed %I5o%ljOOODebugServer.remoteClientVariablesDebugServer.remoteClientVariables4DebugServer.remoteClientVariablesiiMMMDebugServer.remoteClientVariableDebugServer.remoteClientVariable4DebugServer.remoteClientVariablelhOOODebugServer.remoteClientSetFilterDebugServer.remoteClientSetFilter4DebugServer.remoteClientSetFiltercgIIIDebugServer.remoteCapabilitiesDebugServer.remoteCapabilities4DebugServer.remoteCapabilities]fEEEDebugServer.remoteBreakpointDebugServer.remoteBreakpoint4DebugServer.remoteBreakpointQe===DebugServer.remoteBannerDebugServer.remoteBanner4DebugServer.remoteBannercdIIIDebugServer.preferencesChangedDebugServer.preferencesChanged4DebugServer.preferencesChangedWcAAADebugServer.passiveStartUpDebugServer.passiveStartUp4DebugServer.passiveStartUpNb;;;DebugServer.isConnectedDebugServer.isConnected4DebugServer.isConnectedcaIIIDebugServer.getWatchPointModelDebugServer.getWatchPointModel4DebugServer.getWatchPointModel FF;HFZuCCCDebugServer.remoteSetThreadDebugServer.remoteSetThread4DebugServer.remoteSetThreadHt777DebugServer.remoteRunDebugServer.remoteRun4DebugServer.remoteRunWsAAADebugServer.remoteRawInputDebugServer.remoteRawInput4DebugServer.remoteRawInputTr???DebugServer.remoteProfileDebugServer.remoteProfile4DebugServer.remoteProfileKq999DebugServer.remoteLoadDebugServer.remoteLoad4DebugServer.remoteLoadKp999DebugServer.remoteExecDebugServer.remoteExec4DebugServer.remoteExecKo999DebugServer.remoteEvalDebugServer.remoteEval4DebugServer.remoteEval`nGGGDebugServer.remoteEnvironmentDebugServer.remoteEnvironment4DebugServer.remoteEnvironmentWmAAADebugServer.remoteCoverageDebugServer.remoteCoverage4DebugServer.remoteCoverageWlAAADebugServer.remoteContinueDebugServer.remoteContinue4DebugServer.remoteContinue]kEEEDebugServer.remoteCompletionDebugServer.remoteCompletion4DebugServer.remoteCompletion =UJ<=N;;;DebugServer.startClientDebugServer.startClient4DebugServer.startClientWAAADebugServer.shutdownServerDebugServer.shutdownServer4DebugServer.shutdownServerQ~===DebugServer.remoteUTStopDebugServer.remoteUTStop4DebugServer.remoteUTStopN};;;DebugServer.remoteUTRunDebugServer.remoteUTRun4DebugServer.remoteUTRunZ|CCCDebugServer.remoteUTPrepareDebugServer.remoteUTPrepare4DebugServer.remoteUTPrepare]{EEEDebugServer.remoteThreadListDebugServer.remoteThreadList4DebugServer.remoteThreadListWzAAADebugServer.remoteStepQuitDebugServer.remoteStepQuit4DebugServer.remoteStepQuitWyAAADebugServer.remoteStepOverDebugServer.remoteStepOver4DebugServer.remoteStepOverTx???DebugServer.remoteStepOutDebugServer.remoteStepOut4DebugServer.remoteStepOutKw999DebugServer.remoteStepDebugServer.remoteStep4DebugServer.remoteStepZvCCCDebugServer.remoteStatementDebugServer.remoteStatement4DebugServer.remoteStatement 8Mo$yX8K999DebugUI.__checkActionsDebugUI.__checkActions5DebugUI.__checkActions] EEEDebugUI.__breakpointSelectedDebugUI.__breakpointSelected5DebugUI.__breakpointSelected) --DebugUI (Module)DebugUI (Module)5C 77-DebugUI (Constructor)DebugUI (Constructor)5DebugUI.__init__ DebugUIDebugUI5DebugUIW AAADebugThread.trace_dispatchDebugThread.trace_dispatchDebugThread.trace_dispatchN;;;DebugThread.traceThreadDebugThread.traceThreadDebugThread.traceThreadH777DebugThread.set_identDebugThread.set_identDebugThread.set_identE555DebugThread.get_nameDebugThread.get_nameDebugThread.get_nameH777DebugThread.get_identDebugThread.get_identDebugThread.get_identH777DebugThread.bootstrapDebugThread.bootstrapDebugThread.bootstrap155DebugThread (Module)DebugThread (Module)O??5DebugThread (Constructor)DebugThread (Constructor)DebugThread.__init__*###DebugThreadDebugThreadDebugThread .1JN.rSSSDebugUI.__clientWatchConditionErrorDebugUI.__clientWatchConditionError5DebugUI.__clientWatchConditionErrorT???DebugUI.__clientVariablesDebugUI.__clientVariables5DebugUI.__clientVariablesQ===DebugUI.__clientVariableDebugUI.__clientVariable5DebugUI.__clientVariableT???DebugUI.__clientThreadSetDebugUI.__clientThreadSet5DebugUI.__clientThreadSetZCCCDebugUI.__clientSyntaxErrorDebugUI.__clientSyntaxError5DebugUI.__clientSyntaxErrorE555DebugUI.__clientLineDebugUI.__clientLine5DebugUI.__clientLineE555DebugUI.__clientGoneDebugUI.__clientGone5DebugUI.__clientGoneE555DebugUI.__clientExitDebugUI.__clientExit5DebugUI.__clientExitT???DebugUI.__clientExceptionDebugUI.__clientException5DebugUI.__clientExceptionrSSSDebugUI.__clientBreakConditionErrorDebugUI.__clientBreakConditionError5DebugUI.__clientBreakConditionErrorWAAADebugUI.__clearBreakpointsDebugUI.__clearBreakpoints5DebugUI.__clearBreakpoints O&9OH#777DebugUI.__debugScriptDebugUI.__debugScript5DebugUI.__debugScriptK"999DebugUI.__debugProjectDebugUI.__debugProject5DebugUI.__debugProjectN!;;;DebugUI.__cursorChangedDebugUI.__cursorChanged5DebugUI.__cursorChangedQ ===DebugUI.__coverageScriptDebugUI.__coverageScript5DebugUI.__coverageScriptT???DebugUI.__coverageProjectDebugUI.__coverageProject5DebugUI.__coverageProject?111DebugUI.__continueDebugUI.__continue5DebugUI.__continuerSSSDebugUI.__configureVariablesFiltersDebugUI.__configureVariablesFilters5DebugUI.__configureVariablesFiltersuUUUDebugUI.__configureIgnoredExceptionsDebugUI.__configureIgnoredExceptions5DebugUI.__configureIgnoredExceptionsrSSSDebugUI.__configureExceptionsFilterDebugUI.__configureExceptionsFilter5DebugUI.__configureExceptionsFilteruUUUDebugUI.__compileChangedProjectFilesDebugUI.__compileChangedProjectFiles5DebugUI.__compileChangedProjectFiles Ry4b]RW0AAADebugUI.__lastEditorClosedDebugUI.__lastEditorClosed5DebugUI.__lastEditorClosedN/;;;DebugUI.__getThreadListDebugUI.__getThreadList5DebugUI.__getThreadList].EEEDebugUI.__getClientVariablesDebugUI.__getClientVariables5DebugUI.__getClientVariables3-)))DebugUI.__execDebugUI.__exec5DebugUI.__exec3,)))DebugUI.__evalDebugUI.__eval5DebugUI.__evalH+777DebugUI.__enterRemoteDebugUI.__enterRemote5DebugUI.__enterRemoteK*999DebugUI.__editorOpenedDebugUI.__editorOpened5DebugUI.__editorOpenedQ)===DebugUI.__editBreakpointDebugUI.__editBreakpoint5DebugUI.__editBreakpoint6(+++DebugUI.__doRunDebugUI.__doRun5DebugUI.__doRunB'333DebugUI.__doRestartDebugUI.__doRestart5DebugUI.__doRestartB&333DebugUI.__doProfileDebugUI.__doProfile5DebugUI.__doProfile<%///DebugUI.__doDebugDebugUI.__doDebug5DebugUI.__doDebugE$555DebugUI.__doCoverageDebugUI.__doCoverage5DebugUI.__doCoverage %ID<p%H<777DebugUI.__runToCursorDebugUI.__runToCursor5DebugUI.__runToCursorB;333DebugUI.__runScriptDebugUI.__runScript5DebugUI.__runScriptE:555DebugUI.__runProjectDebugUI.__runProject5DebugUI.__runProject<9///DebugUI.__resetUIDebugUI.__resetUI5DebugUI.__resetUIc8IIIDebugUI.__projectSessionLoadedDebugUI.__projectSessionLoaded5DebugUI.__projectSessionLoadedN7;;;DebugUI.__projectOpenedDebugUI.__projectOpened5DebugUI.__projectOpenedN6;;;DebugUI.__projectClosedDebugUI.__projectClosed5DebugUI.__projectClosedN5;;;DebugUI.__profileScriptDebugUI.__profileScript5DebugUI.__profileScriptQ4===DebugUI.__profileProjectDebugUI.__profileProject5DebugUI.__profileProject]3EEEDebugUI.__previousBreakpointDebugUI.__previousBreakpoint5DebugUI.__previousBreakpoint`2GGGDebugUI.__passiveDebugStartedDebugUI.__passiveDebugStarted5DebugUI.__passiveDebugStartedQ1===DebugUI.__nextBreakpointDebugUI.__nextBreakpoint5DebugUI.__nextBreakpoint LL>ZLEI555DebugUI.initToolbarsDebugUI.initToolbars5DebugUI.initToolbars;;;DebugUI.__showDebugMenuDebugUI.__showDebugMenu5DebugUI.__showDebugMenu`=GGGDebugUI.__showBreakpointsMenuDebugUI.__showBreakpointsMenu5DebugUI.__showBreakpointsMenu ([ k)x0U(*V###DebugViewerDebugViewer6DebugViewerNU;;;DebugUI.variablesFilterDebugUI.variablesFilter5DebugUI.variablesFilterKT999DebugUI.shutdownServerDebugUI.shutdownServer5DebugUI.shutdownServer9S---DebugUI.shutdownDebugUI.shutdown5DebugUI.shutdownER555DebugUI.setWdHistoryDebugUI.setWdHistory5DebugUI.setWdHistoryKQ999DebugUI.setTracePythonDebugUI.setTracePython5DebugUI.setTracePython`PGGGDebugUI.setExceptionReportingDebugUI.setExceptionReporting5DebugUI.setExceptionReporting?O111DebugUI.setExcListDebugUI.setExcList5DebugUI.setExcListQN===DebugUI.setExcIgnoreListDebugUI.setExcIgnoreList5DebugUI.setExcIgnoreListHM777DebugUI.setEnvHistoryDebugUI.setEnvHistory5DebugUI.setEnvHistoryNL;;;DebugUI.setAutoContinueDebugUI.setAutoContinue5DebugUI.setAutoContinueTK???DebugUI.setAutoClearShellDebugUI.setAutoClearShell5DebugUI.setAutoClearShellKJ999DebugUI.setArgvHistoryDebugUI.setArgvHistory5DebugUI.setArgvHistory tzTIto`QQQDebugViewer.handleDebuggingStartedDebugViewer.handleDebuggingStarted6DebugViewer.handleDebuggingStarted`_GGGDebugViewer.handleClientStackDebugViewer.handleClientStack6DebugViewer.handleClientStackT^???DebugViewer.currentWidgetDebugViewer.currentWidget6DebugViewer.currentWidget]]EEEDebugViewer.__threadSelectedDebugViewer.__threadSelected6DebugViewer.__threadSelectedQ\===DebugViewer.__showSourceDebugViewer.__showSource6DebugViewer.__showSource`[GGGDebugViewer.__setLocalsFilterDebugViewer.__setLocalsFilter6DebugViewer.__setLocalsFiltercZIIIDebugViewer.__setGlobalsFilterDebugViewer.__setGlobalsFilter6DebugViewer.__setGlobalsFilterZYCCCDebugViewer.__frameSelectedDebugViewer.__frameSelected6DebugViewer.__frameSelected1X55DebugViewer (Module)DebugViewer (Module)6OW??5DebugViewer (Constructor)DebugViewer (Constructor)6DebugViewer.__init__ aO&uaQj===DebugViewer.showVariableDebugViewer.showVariable6DebugViewer.showVariableWiAAADebugViewer.showThreadListDebugViewer.showThreadList6DebugViewer.showThreadListchIIIDebugViewer.setVariablesFilterDebugViewer.setVariablesFilter6DebugViewer.setVariablesFilterNg;;;DebugViewer.setDebuggerDebugViewer.setDebugger6DebugViewer.setDebugger]fEEEDebugViewer.setCurrentWidgetDebugViewer.setCurrentWidget6DebugViewer.setCurrentWidgetZeCCCDebugViewer.saveCurrentPageDebugViewer.saveCurrentPage6DebugViewer.saveCurrentPagecdIIIDebugViewer.restoreCurrentPageDebugViewer.restoreCurrentPage6DebugViewer.restoreCurrentPageccIIIDebugViewer.preferencesChangedDebugViewer.preferencesChanged6DebugViewer.preferencesChangedTb???DebugViewer.handleResetUIDebugViewer.handleResetUI6DebugViewer.handleResetUIWaAAADebugViewer.handleRawInputDebugViewer.handleRawInput6DebugViewer.handleRawInput I9M;s DebuggerGeneralPage.on_allowedHostsList_currentItemChangedDebuggerGeneralPage.on_allowedHostsList_currentItemChanged]DebuggerGeneralPage.on_allowedHostsList_currentItemChanged#rsssDebuggerGeneralPage.on_addAllowedHostButton_clickedDebuggerGeneralPage.on_addAllowedHostButton_clicked]DebuggerGeneralPage.on_addAllowedHostButton_clickedBqEEDebuggerGeneralPage (Module)DebuggerGeneralPage (Module)]hpOOEDebuggerGeneralPage (Constructor)DebuggerGeneralPage (Constructor)]DebuggerGeneralPage.__init__Co333DebuggerGeneralPageDebuggerGeneralPage]DebuggerGeneralPage.n11Debugger (Package)Debugger (Package);+m//Debuggee (Module)Debuggee (Module)-]lEEEDebugViewer.showVariablesTabDebugViewer.showVariablesTab6DebugViewer.showVariablesTabTk???DebugViewer.showVariablesDebugViewer.showVariables6DebugViewer.showVariables cPQNc {cccDebuggerInterfaceNone.getClientCapabilitiesDebuggerInterfaceNone.getClientCapabilities7DebuggerInterfaceNone.getClientCapabilitiesZzCCCDebuggerInterfaceNone.flushDebuggerInterfaceNone.flush7DebuggerInterfaceNone.flushEyIIDebuggerInterfaceNone (Module)DebuggerInterfaceNone (Module)7mxSSIDebuggerInterfaceNone (Constructor)DebuggerInterfaceNone (Constructor)7DebuggerInterfaceNone.__init__Hw777DebuggerInterfaceNoneDebuggerInterfaceNone7DebuggerInterfaceNoneRv===DebuggerGeneralPage.saveDebuggerGeneralPage.save]DebuggerGeneralPage.save&uuuuDebuggerGeneralPage.on_editAllowedHostButton_clickedDebuggerGeneralPage.on_editAllowedHostButton_clicked]DebuggerGeneralPage.on_editAllowedHostButton_clicked,tyyyDebuggerGeneralPage.on_deleteAllowedHostButton_clickedDebuggerGeneralPage.on_deleteAllowedHostButton_clicked]DebuggerGeneralPage.on_deleteAllowedHostButton_clicked , ]]]DebuggerInterfaceNone.remoteCapabilitiesDebuggerInterfaceNone.remoteCapabilities7DebuggerInterfaceNone.remoteCapabilities eeeDebuggerInterfaceNone.remoteBreakpointIgnoreDebuggerInterfaceNone.remoteBreakpointIgnore7DebuggerInterfaceNone.remoteBreakpointIgnore eeeDebuggerInterfaceNone.remoteBreakpointEnableDebuggerInterfaceNone.remoteBreakpointEnable7DebuggerInterfaceNone.remoteBreakpointEnable{YYYDebuggerInterfaceNone.remoteBreakpointDebuggerInterfaceNone.remoteBreakpoint7DebuggerInterfaceNone.remoteBreakpointo~QQQDebuggerInterfaceNone.remoteBannerDebuggerInterfaceNone.remoteBanner7DebuggerInterfaceNone.remoteBannerr}SSSDebuggerInterfaceNone.newConnectionDebuggerInterfaceNone.newConnection7DebuggerInterfaceNone.newConnectionl|OOODebuggerInterfaceNone.isConnectedDebuggerInterfaceNone.isConnected7DebuggerInterfaceNone.isConnected jrYcj~ [[[DebuggerInterfaceNone.remoteEnvironmentDebuggerInterfaceNone.remoteEnvironment7DebuggerInterfaceNone.remoteEnvironmentuUUUDebuggerInterfaceNone.remoteCoverageDebuggerInterfaceNone.remoteCoverage7DebuggerInterfaceNone.remoteCoverageuUUUDebuggerInterfaceNone.remoteContinueDebuggerInterfaceNone.remoteContinue7DebuggerInterfaceNone.remoteContinue{YYYDebuggerInterfaceNone.remoteCompletionDebuggerInterfaceNone.remoteCompletion7DebuggerInterfaceNone.remoteCompletion cccDebuggerInterfaceNone.remoteClientVariablesDebuggerInterfaceNone.remoteClientVariables7DebuggerInterfaceNone.remoteClientVariablesaaaDebuggerInterfaceNone.remoteClientVariableDebuggerInterfaceNone.remoteClientVariable7DebuggerInterfaceNone.remoteClientVariable cccDebuggerInterfaceNone.remoteClientSetFilterDebuggerInterfaceNone.remoteClientSetFilter7DebuggerInterfaceNone.remoteClientSetFilter p(GfpxWWWDebuggerInterfaceNone.remoteStatementDebuggerInterfaceNone.remoteStatement7DebuggerInterfaceNone.remoteStatementxWWWDebuggerInterfaceNone.remoteSetThreadDebuggerInterfaceNone.remoteSetThread7DebuggerInterfaceNone.remoteSetThreadfKKKDebuggerInterfaceNone.remoteRunDebuggerInterfaceNone.remoteRun7DebuggerInterfaceNone.remoteRunuUUUDebuggerInterfaceNone.remoteRawInputDebuggerInterfaceNone.remoteRawInput7DebuggerInterfaceNone.remoteRawInputr SSSDebuggerInterfaceNone.remoteProfileDebuggerInterfaceNone.remoteProfile7DebuggerInterfaceNone.remoteProfilei MMMDebuggerInterfaceNone.remoteLoadDebuggerInterfaceNone.remoteLoad7DebuggerInterfaceNone.remoteLoadi MMMDebuggerInterfaceNone.remoteExecDebuggerInterfaceNone.remoteExec7DebuggerInterfaceNone.remoteExeci MMMDebuggerInterfaceNone.remoteEvalDebuggerInterfaceNone.remoteEval7DebuggerInterfaceNone.remoteEval U/6UoQQQDebuggerInterfaceNone.remoteUTStopDebuggerInterfaceNone.remoteUTStop7DebuggerInterfaceNone.remoteUTStoplOOODebuggerInterfaceNone.remoteUTRunDebuggerInterfaceNone.remoteUTRun7DebuggerInterfaceNone.remoteUTRunxWWWDebuggerInterfaceNone.remoteUTPrepareDebuggerInterfaceNone.remoteUTPrepare7DebuggerInterfaceNone.remoteUTPrepare{YYYDebuggerInterfaceNone.remoteThreadListDebuggerInterfaceNone.remoteThreadList7DebuggerInterfaceNone.remoteThreadListuUUUDebuggerInterfaceNone.remoteStepQuitDebuggerInterfaceNone.remoteStepQuit7DebuggerInterfaceNone.remoteStepQuituUUUDebuggerInterfaceNone.remoteStepOverDebuggerInterfaceNone.remoteStepOver7DebuggerInterfaceNone.remoteStepOverrSSSDebuggerInterfaceNone.remoteStepOutDebuggerInterfaceNone.remoteStepOut7DebuggerInterfaceNone.remoteStepOutiMMMDebuggerInterfaceNone.remoteStepDebuggerInterfaceNone.remoteStep7DebuggerInterfaceNone.remoteStep 6`6s!WWMDebuggerInterfacePython (Constructor)DebuggerInterfacePython (Constructor)8DebuggerInterfacePython.__init__N ;;;DebuggerInterfacePythonDebuggerInterfacePython8DebuggerInterfacePython cccDebuggerInterfaceNone.startRemoteForProjectDebuggerInterfaceNone.startRemoteForProject7DebuggerInterfaceNone.startRemoteForProjectlOOODebuggerInterfaceNone.startRemoteDebuggerInterfaceNone.startRemote7DebuggerInterfaceNone.startRemotecIIIDebuggerInterfaceNone.shutdownDebuggerInterfaceNone.shutdown7DebuggerInterfaceNone.shutdown eeeDebuggerInterfaceNone.remoteWatchpointIgnoreDebuggerInterfaceNone.remoteWatchpointIgnore7DebuggerInterfaceNone.remoteWatchpointIgnore eeeDebuggerInterfaceNone.remoteWatchpointEnableDebuggerInterfaceNone.remoteWatchpointEnable7DebuggerInterfaceNone.remoteWatchpointEnable{YYYDebuggerInterfaceNone.remoteWatchpointDebuggerInterfaceNone.remoteWatchpoint7DebuggerInterfaceNone.remoteWatchpoint 9?#9`)GGGDebuggerInterfacePython.flushDebuggerInterfacePython.flush8DebuggerInterfacePython.flush{(YYYDebuggerInterfacePython.__startProcessDebuggerInterfacePython.__startProcess8DebuggerInterfacePython.__startProcessx'WWWDebuggerInterfacePython.__sendCommandDebuggerInterfacePython.__sendCommand8DebuggerInterfacePython.__sendCommand &cccDebuggerInterfacePython.__remoteTranslationDebuggerInterfacePython.__remoteTranslation8DebuggerInterfacePython.__remoteTranslation%___DebuggerInterfacePython.__parseClientLineDebuggerInterfacePython.__parseClientLine8DebuggerInterfacePython.__parseClientLine$gggDebuggerInterfacePython.__identityTranslationDebuggerInterfacePython.__identityTranslation8DebuggerInterfacePython.__identityTranslationr#SSSDebuggerInterfacePython.__askForkToDebuggerInterfacePython.__askForkTo8DebuggerInterfacePython.__askForkToI"MMDebuggerInterfacePython (Module)DebuggerInterfacePython (Module)8 Ql|Q0iiiDebuggerInterfacePython.remoteBreakpointIgnoreDebuggerInterfacePython.remoteBreakpointIgnore8DebuggerInterfacePython.remoteBreakpointIgnore/iiiDebuggerInterfacePython.remoteBreakpointEnableDebuggerInterfacePython.remoteBreakpointEnable8DebuggerInterfacePython.remoteBreakpointEnable.]]]DebuggerInterfacePython.remoteBreakpointDebuggerInterfacePython.remoteBreakpoint8DebuggerInterfacePython.remoteBreakpointu-UUUDebuggerInterfacePython.remoteBannerDebuggerInterfacePython.remoteBanner8DebuggerInterfacePython.remoteBannerx,WWWDebuggerInterfacePython.newConnectionDebuggerInterfacePython.newConnection8DebuggerInterfacePython.newConnectionr+SSSDebuggerInterfacePython.isConnectedDebuggerInterfacePython.isConnected8DebuggerInterfacePython.isConnected*gggDebuggerInterfacePython.getClientCapabilitiesDebuggerInterfacePython.getClientCapabilities8DebuggerInterfacePython.getClientCapabilities ;uP7;{7YYYDebuggerInterfacePython.remoteCoverageDebuggerInterfacePython.remoteCoverage8DebuggerInterfacePython.remoteCoverage{6YYYDebuggerInterfacePython.remoteContinueDebuggerInterfacePython.remoteContinue8DebuggerInterfacePython.remoteContinue5]]]DebuggerInterfacePython.remoteCompletionDebuggerInterfacePython.remoteCompletion8DebuggerInterfacePython.remoteCompletion4gggDebuggerInterfacePython.remoteClientVariablesDebuggerInterfacePython.remoteClientVariables8DebuggerInterfacePython.remoteClientVariables 3eeeDebuggerInterfacePython.remoteClientVariableDebuggerInterfacePython.remoteClientVariable8DebuggerInterfacePython.remoteClientVariable2gggDebuggerInterfacePython.remoteClientSetFilterDebuggerInterfacePython.remoteClientSetFilter8DebuggerInterfacePython.remoteClientSetFilter1aaaDebuggerInterfacePython.remoteCapabilitiesDebuggerInterfacePython.remoteCapabilities8DebuggerInterfacePython.remoteCapabilities 9x")9~?[[[DebuggerInterfacePython.remoteSetThreadDebuggerInterfacePython.remoteSetThread8DebuggerInterfacePython.remoteSetThreadl>OOODebuggerInterfacePython.remoteRunDebuggerInterfacePython.remoteRun8DebuggerInterfacePython.remoteRun{=YYYDebuggerInterfacePython.remoteRawInputDebuggerInterfacePython.remoteRawInput8DebuggerInterfacePython.remoteRawInputx<WWWDebuggerInterfacePython.remoteProfileDebuggerInterfacePython.remoteProfile8DebuggerInterfacePython.remoteProfileo;QQQDebuggerInterfacePython.remoteLoadDebuggerInterfacePython.remoteLoad8DebuggerInterfacePython.remoteLoado:QQQDebuggerInterfacePython.remoteExecDebuggerInterfacePython.remoteExec8DebuggerInterfacePython.remoteExeco9QQQDebuggerInterfacePython.remoteEvalDebuggerInterfacePython.remoteEval8DebuggerInterfacePython.remoteEval8___DebuggerInterfacePython.remoteEnvironmentDebuggerInterfacePython.remoteEnvironment8DebuggerInterfacePython.remoteEnvironmentpj]joty~ &,28>DJPV\bhntz "(.4:@FLRX^djpv| (3<FQ^lx  )2 (3<FQ^lx  )2:DMXbm| $*3 < F Q [ fq{!)1<HR[doy '!3"<#E$P%_&m'w()*+$,,-6.?/L0W1_2i3s4}5678&91:<;Hh?o@zAB CD E-F:GFHTI`JiKsL}MNOP*Q3R;SCTMUWV`WjXuYZ[\#offlrx~ &,28>DJPV\bhntz "(.4:@FLRX^djpv|^<_I`Va`bjcsd{ef ghi!j)k0l7^<_I`Va`bjcsd{ef ghi!j)k0l7m?pGqNrVs]tcujvqwxxyz{|}'~/7>DMV`jv $/;L\ht *7ER^fp{ *3=GT]iu &0;ENYeq~ &1>JUahpy‘ Ñđő!Ƒ'Ǒ,ȑ1ɑ6ʑ>ˑH̑P͑XΑ^  rGSSSDebuggerInterfacePython.remoteUTRunDebuggerInterfacePython.remoteUTRun8DebuggerInterfacePython.remoteUTRun~F[[[DebuggerInterfacePython.remoteUTPrepareDebuggerInterfacePython.remoteUTPrepare8DebuggerInterfacePython.remoteUTPrepareE]]]DebuggerInterfacePython.remoteThreadListDebuggerInterfacePython.remoteThreadList8DebuggerInterfacePython.remoteThreadList{DYYYDebuggerInterfacePython.remoteStepQuitDebuggerInterfacePython.remoteStepQuit8DebuggerInterfacePython.remoteStepQuit{CYYYDebuggerInterfacePython.remoteStepOverDebuggerInterfacePython.remoteStepOver8DebuggerInterfacePython.remoteStepOverxBWWWDebuggerInterfacePython.remoteStepOutDebuggerInterfacePython.remoteStepOut8DebuggerInterfacePython.remoteStepOutoAQQQDebuggerInterfacePython.remoteStepDebuggerInterfacePython.remoteStep8DebuggerInterfacePython.remoteStep~@[[[DebuggerInterfacePython.remoteStatementDebuggerInterfacePython.remoteStatement8DebuggerInterfacePython.remoteStatement `li`NgggDebuggerInterfacePython.startRemoteForProjectDebuggerInterfacePython.startRemoteForProject8DebuggerInterfacePython.startRemoteForProjectrMSSSDebuggerInterfacePython.startRemoteDebuggerInterfacePython.startRemote8DebuggerInterfacePython.startRemoteiLMMMDebuggerInterfacePython.shutdownDebuggerInterfacePython.shutdown8DebuggerInterfacePython.shutdownKiiiDebuggerInterfacePython.remoteWatchpointIgnoreDebuggerInterfacePython.remoteWatchpointIgnore8DebuggerInterfacePython.remoteWatchpointIgnoreJiiiDebuggerInterfacePython.remoteWatchpointEnableDebuggerInterfacePython.remoteWatchpointEnable8DebuggerInterfacePython.remoteWatchpointEnableI]]]DebuggerInterfacePython.remoteWatchpointDebuggerInterfacePython.remoteWatchpoint8DebuggerInterfacePython.remoteWatchpointuHUUUDebuggerInterfacePython.remoteUTStopDebuggerInterfacePython.remoteUTStop8DebuggerInterfacePython.remoteUTStop <3mK<{VYYYDebuggerInterfacePython3.__sendCommandDebuggerInterfacePython3.__sendCommand9DebuggerInterfacePython3.__sendCommand UeeeDebuggerInterfacePython3.__remoteTranslationDebuggerInterfacePython3.__remoteTranslation9DebuggerInterfacePython3.__remoteTranslationTaaaDebuggerInterfacePython3.__parseClientLineDebuggerInterfacePython3.__parseClientLine9DebuggerInterfacePython3.__parseClientLineSiiiDebuggerInterfacePython3.__identityTranslationDebuggerInterfacePython3.__identityTranslation9DebuggerInterfacePython3.__identityTranslationuRUUUDebuggerInterfacePython3.__askForkToDebuggerInterfacePython3.__askForkTo9DebuggerInterfacePython3.__askForkToKQOODebuggerInterfacePython3 (Module)DebuggerInterfacePython3 (Module)9vPYYODebuggerInterfacePython3 (Constructor)DebuggerInterfacePython3 (Constructor)9DebuggerInterfacePython3.__init__QO===DebuggerInterfacePython3DebuggerInterfacePython39DebuggerInterfacePython3  ]___DebuggerInterfacePython3.remoteBreakpointDebuggerInterfacePython3.remoteBreakpoint9DebuggerInterfacePython3.remoteBreakpointx\WWWDebuggerInterfacePython3.remoteBannerDebuggerInterfacePython3.remoteBanner9DebuggerInterfacePython3.remoteBanner{[YYYDebuggerInterfacePython3.newConnectionDebuggerInterfacePython3.newConnection9DebuggerInterfacePython3.newConnectionuZUUUDebuggerInterfacePython3.isConnectedDebuggerInterfacePython3.isConnected9DebuggerInterfacePython3.isConnectedYiiiDebuggerInterfacePython3.getClientCapabilitiesDebuggerInterfacePython3.getClientCapabilities9DebuggerInterfacePython3.getClientCapabilitiescXIIIDebuggerInterfacePython3.flushDebuggerInterfacePython3.flush9DebuggerInterfacePython3.flush~W[[[DebuggerInterfacePython3.__startProcessDebuggerInterfacePython3.__startProcess9DebuggerInterfacePython3.__startProcess |f>|ciiiDebuggerInterfacePython3.remoteClientVariablesDebuggerInterfacePython3.remoteClientVariables9DebuggerInterfacePython3.remoteClientVariablesbgggDebuggerInterfacePython3.remoteClientVariableDebuggerInterfacePython3.remoteClientVariable9DebuggerInterfacePython3.remoteClientVariableaiiiDebuggerInterfacePython3.remoteClientSetFilterDebuggerInterfacePython3.remoteClientSetFilter9DebuggerInterfacePython3.remoteClientSetFilter `cccDebuggerInterfacePython3.remoteCapabilitiesDebuggerInterfacePython3.remoteCapabilities9DebuggerInterfacePython3.remoteCapabilities_kkkDebuggerInterfacePython3.remoteBreakpointIgnoreDebuggerInterfacePython3.remoteBreakpointIgnore9DebuggerInterfacePython3.remoteBreakpointIgnore^kkkDebuggerInterfacePython3.remoteBreakpointEnableDebuggerInterfacePython3.remoteBreakpointEnable9DebuggerInterfacePython3.remoteBreakpointEnable xvvrjSSSDebuggerInterfacePython3.remoteLoadDebuggerInterfacePython3.remoteLoad9DebuggerInterfacePython3.remoteLoadriSSSDebuggerInterfacePython3.remoteExecDebuggerInterfacePython3.remoteExec9DebuggerInterfacePython3.remoteExecrhSSSDebuggerInterfacePython3.remoteEvalDebuggerInterfacePython3.remoteEval9DebuggerInterfacePython3.remoteEvalgaaaDebuggerInterfacePython3.remoteEnvironmentDebuggerInterfacePython3.remoteEnvironment9DebuggerInterfacePython3.remoteEnvironment~f[[[DebuggerInterfacePython3.remoteCoverageDebuggerInterfacePython3.remoteCoverage9DebuggerInterfacePython3.remoteCoverage~e[[[DebuggerInterfacePython3.remoteContinueDebuggerInterfacePython3.remoteContinue9DebuggerInterfacePython3.remoteContinued___DebuggerInterfacePython3.remoteCompletionDebuggerInterfacePython3.remoteCompletion9DebuggerInterfacePython3.remoteCompletion  {qYYYDebuggerInterfacePython3.remoteStepOutDebuggerInterfacePython3.remoteStepOut9DebuggerInterfacePython3.remoteStepOutrpSSSDebuggerInterfacePython3.remoteStepDebuggerInterfacePython3.remoteStep9DebuggerInterfacePython3.remoteStepo]]]DebuggerInterfacePython3.remoteStatementDebuggerInterfacePython3.remoteStatement9DebuggerInterfacePython3.remoteStatementn]]]DebuggerInterfacePython3.remoteSetThreadDebuggerInterfacePython3.remoteSetThread9DebuggerInterfacePython3.remoteSetThreadomQQQDebuggerInterfacePython3.remoteRunDebuggerInterfacePython3.remoteRun9DebuggerInterfacePython3.remoteRun~l[[[DebuggerInterfacePython3.remoteRawInputDebuggerInterfacePython3.remoteRawInput9DebuggerInterfacePython3.remoteRawInput{kYYYDebuggerInterfacePython3.remoteProfileDebuggerInterfacePython3.remoteProfile9DebuggerInterfacePython3.remoteProfile vvyvx___DebuggerInterfacePython3.remoteWatchpointDebuggerInterfacePython3.remoteWatchpoint9DebuggerInterfacePython3.remoteWatchpointxwWWWDebuggerInterfacePython3.remoteUTStopDebuggerInterfacePython3.remoteUTStop9DebuggerInterfacePython3.remoteUTStopuvUUUDebuggerInterfacePython3.remoteUTRunDebuggerInterfacePython3.remoteUTRun9DebuggerInterfacePython3.remoteUTRunu]]]DebuggerInterfacePython3.remoteUTPrepareDebuggerInterfacePython3.remoteUTPrepare9DebuggerInterfacePython3.remoteUTPreparet___DebuggerInterfacePython3.remoteThreadListDebuggerInterfacePython3.remoteThreadList9DebuggerInterfacePython3.remoteThreadList~s[[[DebuggerInterfacePython3.remoteStepQuitDebuggerInterfacePython3.remoteStepQuit9DebuggerInterfacePython3.remoteStepQuit~r[[[DebuggerInterfacePython3.remoteStepOverDebuggerInterfacePython3.remoteStepOver9DebuggerInterfacePython3.remoteStepOver Kf]NKEIIDebuggerInterfaceRuby (Module)DebuggerInterfaceRuby (Module):mSSIDebuggerInterfaceRuby (Constructor)DebuggerInterfaceRuby (Constructor):DebuggerInterfaceRuby.__init__H~777DebuggerInterfaceRubyDebuggerInterfaceRuby:DebuggerInterfaceRuby}iiiDebuggerInterfacePython3.startRemoteForProjectDebuggerInterfacePython3.startRemoteForProject9DebuggerInterfacePython3.startRemoteForProjectu|UUUDebuggerInterfacePython3.startRemoteDebuggerInterfacePython3.startRemote9DebuggerInterfacePython3.startRemotel{OOODebuggerInterfacePython3.shutdownDebuggerInterfacePython3.shutdown9DebuggerInterfacePython3.shutdownzkkkDebuggerInterfacePython3.remoteWatchpointIgnoreDebuggerInterfacePython3.remoteWatchpointIgnore9DebuggerInterfacePython3.remoteWatchpointIgnoreykkkDebuggerInterfacePython3.remoteWatchpointEnableDebuggerInterfacePython3.remoteWatchpointEnable9DebuggerInterfacePython3.remoteWatchpointEnable "ri|"lOOODebuggerInterfaceRuby.isConnectedDebuggerInterfaceRuby.isConnected:DebuggerInterfaceRuby.isConnected cccDebuggerInterfaceRuby.getClientCapabilitiesDebuggerInterfaceRuby.getClientCapabilities:DebuggerInterfaceRuby.getClientCapabilitiesZCCCDebuggerInterfaceRuby.flushDebuggerInterfaceRuby.flush:DebuggerInterfaceRuby.flushuUUUDebuggerInterfaceRuby.__startProcessDebuggerInterfaceRuby.__startProcess:DebuggerInterfaceRuby.__startProcessrSSSDebuggerInterfaceRuby.__sendCommandDebuggerInterfaceRuby.__sendCommand:DebuggerInterfaceRuby.__sendCommand___DebuggerInterfaceRuby.__remoteTranslationDebuggerInterfaceRuby.__remoteTranslation:DebuggerInterfaceRuby.__remoteTranslation~[[[DebuggerInterfaceRuby.__parseClientLineDebuggerInterfaceRuby.__parseClientLine:DebuggerInterfaceRuby.__parseClientLine cccDebuggerInterfaceRuby.__identityTranslationDebuggerInterfaceRuby.__identityTranslation:DebuggerInterfaceRuby.__identityTranslation f yf cccDebuggerInterfaceRuby.remoteClientSetFilterDebuggerInterfaceRuby.remoteClientSetFilter:DebuggerInterfaceRuby.remoteClientSetFilter]]]DebuggerInterfaceRuby.remoteCapabilitiesDebuggerInterfaceRuby.remoteCapabilities:DebuggerInterfaceRuby.remoteCapabilities eeeDebuggerInterfaceRuby.remoteBreakpointIgnoreDebuggerInterfaceRuby.remoteBreakpointIgnore:DebuggerInterfaceRuby.remoteBreakpointIgnore eeeDebuggerInterfaceRuby.remoteBreakpointEnableDebuggerInterfaceRuby.remoteBreakpointEnable:DebuggerInterfaceRuby.remoteBreakpointEnable{ YYYDebuggerInterfaceRuby.remoteBreakpointDebuggerInterfaceRuby.remoteBreakpoint:DebuggerInterfaceRuby.remoteBreakpointo QQQDebuggerInterfaceRuby.remoteBannerDebuggerInterfaceRuby.remoteBanner:DebuggerInterfaceRuby.remoteBannerr SSSDebuggerInterfaceRuby.newConnectionDebuggerInterfaceRuby.newConnection:DebuggerInterfaceRuby.newConnection  uiy iMMMDebuggerInterfaceRuby.remoteExecDebuggerInterfaceRuby.remoteExec:DebuggerInterfaceRuby.remoteExeciMMMDebuggerInterfaceRuby.remoteEvalDebuggerInterfaceRuby.remoteEval:DebuggerInterfaceRuby.remoteEval~[[[DebuggerInterfaceRuby.remoteEnvironmentDebuggerInterfaceRuby.remoteEnvironment:DebuggerInterfaceRuby.remoteEnvironmentuUUUDebuggerInterfaceRuby.remoteCoverageDebuggerInterfaceRuby.remoteCoverage:DebuggerInterfaceRuby.remoteCoverageuUUUDebuggerInterfaceRuby.remoteContinueDebuggerInterfaceRuby.remoteContinue:DebuggerInterfaceRuby.remoteContinue{YYYDebuggerInterfaceRuby.remoteCompletionDebuggerInterfaceRuby.remoteCompletion:DebuggerInterfaceRuby.remoteCompletion cccDebuggerInterfaceRuby.remoteClientVariablesDebuggerInterfaceRuby.remoteClientVariables:DebuggerInterfaceRuby.remoteClientVariablesaaaDebuggerInterfaceRuby.remoteClientVariableDebuggerInterfaceRuby.remoteClientVariable:DebuggerInterfaceRuby.remoteClientVariable g>HgrSSSDebuggerInterfaceRuby.remoteStepOutDebuggerInterfaceRuby.remoteStepOut:DebuggerInterfaceRuby.remoteStepOutiMMMDebuggerInterfaceRuby.remoteStepDebuggerInterfaceRuby.remoteStep:DebuggerInterfaceRuby.remoteStepxWWWDebuggerInterfaceRuby.remoteStatementDebuggerInterfaceRuby.remoteStatement:DebuggerInterfaceRuby.remoteStatementxWWWDebuggerInterfaceRuby.remoteSetThreadDebuggerInterfaceRuby.remoteSetThread:DebuggerInterfaceRuby.remoteSetThreadfKKKDebuggerInterfaceRuby.remoteRunDebuggerInterfaceRuby.remoteRun:DebuggerInterfaceRuby.remoteRunuUUUDebuggerInterfaceRuby.remoteRawInputDebuggerInterfaceRuby.remoteRawInput:DebuggerInterfaceRuby.remoteRawInputrSSSDebuggerInterfaceRuby.remoteProfileDebuggerInterfaceRuby.remoteProfile:DebuggerInterfaceRuby.remoteProfileiMMMDebuggerInterfaceRuby.remoteLoadDebuggerInterfaceRuby.remoteLoad:DebuggerInterfaceRuby.remoteLoad '6' 'eeeDebuggerInterfaceRuby.remoteWatchpointEnableDebuggerInterfaceRuby.remoteWatchpointEnable:DebuggerInterfaceRuby.remoteWatchpointEnable{&YYYDebuggerInterfaceRuby.remoteWatchpointDebuggerInterfaceRuby.remoteWatchpoint:DebuggerInterfaceRuby.remoteWatchpointo%QQQDebuggerInterfaceRuby.remoteUTStopDebuggerInterfaceRuby.remoteUTStop:DebuggerInterfaceRuby.remoteUTStopl$OOODebuggerInterfaceRuby.remoteUTRunDebuggerInterfaceRuby.remoteUTRun:DebuggerInterfaceRuby.remoteUTRunx#WWWDebuggerInterfaceRuby.remoteUTPrepareDebuggerInterfaceRuby.remoteUTPrepare:DebuggerInterfaceRuby.remoteUTPrepare{"YYYDebuggerInterfaceRuby.remoteThreadListDebuggerInterfaceRuby.remoteThreadList:DebuggerInterfaceRuby.remoteThreadListu!UUUDebuggerInterfaceRuby.remoteStepQuitDebuggerInterfaceRuby.remoteStepQuit:DebuggerInterfaceRuby.remoteStepQuitu UUUDebuggerInterfaceRuby.remoteStepOverDebuggerInterfaceRuby.remoteStepOver:DebuggerInterfaceRuby.remoteStepOver Ao  =A)/wwwDebuggerPropertiesDialog.on_debugClientButton_clickedDebuggerPropertiesDialog.on_debugClientButton_clickedDebuggerPropertiesDialog.on_debugClientButton_clickedL.OODebuggerPropertiesDialog (Module)DebuggerPropertiesDialog (Module)w-YYODebuggerPropertiesDialog (Constructor)DebuggerPropertiesDialog (Constructor)DebuggerPropertiesDialog.__init__R,===DebuggerPropertiesDialogDebuggerPropertiesDialogDebuggerPropertiesDialog +cccDebuggerInterfaceRuby.startRemoteForProjectDebuggerInterfaceRuby.startRemoteForProject:DebuggerInterfaceRuby.startRemoteForProjectl*OOODebuggerInterfaceRuby.startRemoteDebuggerInterfaceRuby.startRemote:DebuggerInterfaceRuby.startRemotec)IIIDebuggerInterfaceRuby.shutdownDebuggerInterfaceRuby.shutdown:DebuggerInterfaceRuby.shutdown (eeeDebuggerInterfaceRuby.remoteWatchpointIgnoreDebuggerInterfaceRuby.remoteWatchpointIgnore:DebuggerInterfaceRuby.remoteWatchpointIgnore "S ,"7]]]DebuggerPropertiesHandler.endEnvironmentDebuggerPropertiesHandler.endEnvironmentdDebuggerPropertiesHandler.endEnvironment6]]]DebuggerPropertiesHandler.endDebugClientDebuggerPropertiesHandler.endDebugClientdDebuggerPropertiesHandler.endDebugClient 5eeeDebuggerPropertiesHandler.endConsoleDebuggerDebuggerPropertiesHandler.endConsoleDebuggerdDebuggerPropertiesHandler.endConsoleDebuggerM4QQDebuggerPropertiesHandler (Module)DebuggerPropertiesHandler (Module)dy3[[QDebuggerPropertiesHandler (Constructor)DebuggerPropertiesHandler (Constructor)dDebuggerPropertiesHandler.__init__T2???DebuggerPropertiesHandlerDebuggerPropertiesHandlerdDebuggerPropertiesHandlerp1QQQDebuggerPropertiesDialog.storeDataDebuggerPropertiesDialog.storeDataDebuggerPropertiesDialog.storeData)0wwwDebuggerPropertiesDialog.on_interpreterButton_clickedDebuggerPropertiesDialog.on_interpreterButton_clickedDebuggerPropertiesDialog.on_interpreterButton_clicked a{rpa>iiiDebuggerPropertiesHandler.startConsoleDebuggerDebuggerPropertiesHandler.startConsoleDebuggerdDebuggerPropertiesHandler.startConsoleDebuggeru=UUUDebuggerPropertiesHandler.getVersionDebuggerPropertiesHandler.getVersiondDebuggerPropertiesHandler.getVersion~<[[[DebuggerPropertiesHandler.endRemotePathDebuggerPropertiesHandler.endRemotePathdDebuggerPropertiesHandler.endRemotePath~;[[[DebuggerPropertiesHandler.endRemoteHostDebuggerPropertiesHandler.endRemoteHostdDebuggerPropertiesHandler.endRemoteHost:aaaDebuggerPropertiesHandler.endRemoteCommandDebuggerPropertiesHandler.endRemoteCommanddDebuggerPropertiesHandler.endRemoteCommand{9YYYDebuggerPropertiesHandler.endLocalPathDebuggerPropertiesHandler.endLocalPathdDebuggerPropertiesHandler.endLocalPath8]]]DebuggerPropertiesHandler.endInterpreterDebuggerPropertiesHandler.endInterpreterdDebuggerPropertiesHandler.endInterpreter }`}~D[[[DebuggerPropertiesHandler.startRedirectDebuggerPropertiesHandler.startRedirectdDebuggerPropertiesHandler.startRedirectCiiiDebuggerPropertiesHandler.startPathTranslationDebuggerPropertiesHandler.startPathTranslationdDebuggerPropertiesHandler.startPathTranslationB___DebuggerPropertiesHandler.startNoencodingDebuggerPropertiesHandler.startNoencodingdDebuggerPropertiesHandler.startNoencodingAaaaDebuggerPropertiesHandler.startEnvironmentDebuggerPropertiesHandler.startEnvironmentdDebuggerPropertiesHandler.startEnvironment4@DebuggerPropertiesHandler.startDocumentDebuggerPropertiesDebuggerPropertiesHandler.startDocumentDebuggerPropertiesdDebuggerPropertiesHandler.startDocumentDebuggerProperties?oooDebuggerPropertiesHandler.startDebuggerPropertiesDebuggerPropertiesHandler.startDebuggerPropertiesdDebuggerPropertiesHandler.startDebuggerProperties NlQ1NMmmmDebuggerPython3Page.on_debugClientButton_clickedDebuggerPython3Page.on_debugClientButton_clicked^DebuggerPython3Page.on_debugClientButton_clickedBLEEDebuggerPython3Page (Module)DebuggerPython3Page (Module)^hKOOEDebuggerPython3Page (Constructor)DebuggerPython3Page (Constructor)^DebuggerPython3Page.__init__CJ333DebuggerPython3PageDebuggerPython3Page^DebuggerPython3PagelIOOODebuggerPropertiesWriter.writeXMLDebuggerPropertiesWriter.writeXMLeDebuggerPropertiesWriter.writeXMLKHOODebuggerPropertiesWriter (Module)DebuggerPropertiesWriter (Module)evGYYODebuggerPropertiesWriter (Constructor)DebuggerPropertiesWriter (Constructor)eDebuggerPropertiesWriter.__init__QF===DebuggerPropertiesWriterDebuggerPropertiesWritereDebuggerPropertiesWriterEgggDebuggerPropertiesHandler.startRemoteDebuggerDebuggerPropertiesHandler.startRemoteDebuggerdDebuggerPropertiesHandler.startRemoteDebugger Zb bZ:V---DebuggerRubyPageDebuggerRubyPage`DebuggerRubyPageOU;;;DebuggerPythonPage.saveDebuggerPythonPage.save_DebuggerPythonPage.saveTkkkDebuggerPythonPage.on_interpreterButton_clickedDebuggerPythonPage.on_interpreterButton_clicked_DebuggerPythonPage.on_interpreterButton_clickedSkkkDebuggerPythonPage.on_debugClientButton_clickedDebuggerPythonPage.on_debugClientButton_clicked_DebuggerPythonPage.on_debugClientButton_clicked@RCCDebuggerPythonPage (Module)DebuggerPythonPage (Module)_eQMMCDebuggerPythonPage (Constructor)DebuggerPythonPage (Constructor)_DebuggerPythonPage.__init__@P111DebuggerPythonPageDebuggerPythonPage_DebuggerPythonPageRO===DebuggerPython3Page.saveDebuggerPython3Page.save^DebuggerPython3Page.saveNmmmDebuggerPython3Page.on_interpreterButton_clickedDebuggerPython3Page.on_interpreterButton_clicked^DebuggerPython3Page.on_interpreterButton_clicked _r3EH(`!!!DiffDialogDiffDialogDiffDialog _qqqDeleteFilesConfirmationDialog.on_buttonBox_clickedDeleteFilesConfirmationDialog.on_buttonBox_clickedDeleteFilesConfirmationDialog.on_buttonBox_clickedV^YYDeleteFilesConfirmationDialog (Module)DeleteFilesConfirmationDialog (Module)]ccYDeleteFilesConfirmationDialog (Constructor)DeleteFilesConfirmationDialog (Constructor)DeleteFilesConfirmationDialog.__init__a\GGGDeleteFilesConfirmationDialogDeleteFilesConfirmationDialogDeleteFilesConfirmationDialog<[??DefaultBookmarks (Module)DefaultBookmarks (Module)IZ777DebuggerRubyPage.saveDebuggerRubyPage.save`DebuggerRubyPage.saveYoooDebuggerRubyPage.on_rubyInterpreterButton_clickedDebuggerRubyPage.on_rubyInterpreterButton_clicked`DebuggerRubyPage.on_rubyInterpreterButton_clickedQ3===E4GraphicsView.zoomResetE4GraphicsView.zoomResetNE4GraphicsView.zoomResetK2999E4GraphicsView.zoomOutE4GraphicsView.zoomOutNE4GraphicsView.zoomOutH1777E4GraphicsView.zoomInE4GraphicsView.zoomInNE4GraphicsView.zoomInB0333E4GraphicsView.zoomE4GraphicsView.zoomNE4GraphicsView.zoom 2DEsOk26L+++E4Led.setFramedE4Led.setFramedQE4Led.setFramedBK333E4Led.setDarkFactorE4Led.setDarkFactorQE4Led.setDarkFactor3J)))E4Led.setColorE4Led.setColorQE4Led.setColor*I###E4Led.ratioE4Led.ratioQE4Led.ratio9H---E4Led.paintEventE4Led.paintEventQE4Led.paintEvent!GE4Led.onE4Led.onQE4Led.on$FE4Led.offE4Led.offQE4Led.offHE777E4Led.minimumSizeHintE4Led.minimumSizeHintQE4Led.minimumSizeHint'D!!!E4Led.isOnE4Led.isOnQE4Led.isOn3C)))E4Led.isFramedE4Led.isFramedQE4Led.isFramed9B---E4Led.darkFactorE4Led.darkFactorQE4Led.darkFactor*A###E4Led.colorE4Led.colorQE4Led.color?@111E4Led.__paintRoundE4Led.__paintRoundQE4Led.__paintRoundQ?===E4Led.__paintRectangularE4Led.__paintRectangularQE4Led.__paintRectangularQ>===E4Led.__getBestRoundSizeE4Led.__getBestRoundSizeQE4Led.__getBestRoundSize%=))E4Led (Module)E4Led (Module)Q=<33)E4Led (Constructor)E4Led (Constructor)QE4Led.__init__ ;g:[)3 ;E\555E4ListView.removeAllE4ListView.removeAllSE4ListView.removeAllQ[===E4ListView.keyPressEventE4ListView.keyPressEventSE4ListView.keyPressEvent/Z33E4ListView (Module)E4ListView (Module)S'Y!!!E4ListViewE4ListViewSE4ListViewWXAAAE4LineEdit.setInactiveTextE4LineEdit.setInactiveTextRE4LineEdit.setInactiveTextHW777E4LineEdit.paintEventE4LineEdit.paintEventRE4LineEdit.paintEventNV;;;E4LineEdit.inactiveTextE4LineEdit.inactiveTextRE4LineEdit.inactiveText/U33E4LineEdit (Module)E4LineEdit (Module)RLT==3E4LineEdit (Constructor)E4LineEdit (Constructor)RE4LineEdit.__init__'S!!!E4LineEditE4LineEditRE4LineEdit-R%%%E4Led.toggleE4Led.toggleQE4Led.toggle3Q)))E4Led.sizeHintE4Led.sizeHintQE4Led.sizeHint*P###E4Led.shapeE4Led.shapeQE4Led.shape3O)))E4Led.setShapeE4Led.setShapeQE4Led.setShape3N)))E4Led.setRatioE4Led.setRatioQE4Led.setRatio*M###E4Led.setOnE4Led.setOnQE4Led.setOn A|*<@AWhAAAE4ModelMenu.firstSeparatorE4ModelMenu.firstSeparatorTE4ModelMenu.firstSeparatorHg777E4ModelMenu.dropEventE4ModelMenu.dropEventTE4ModelMenu.dropEventWfAAAE4ModelMenu.dragEnterEventE4ModelMenu.dragEnterEventTE4ModelMenu.dragEnterEventKe999E4ModelMenu.createMenuE4ModelMenu.createMenuTE4ModelMenu.createMenuWdAAAE4ModelMenu.createBaseMenuE4ModelMenu.createBaseMenuTE4ModelMenu.createBaseMenuQc===E4ModelMenu.__makeActionE4ModelMenu.__makeActionTE4ModelMenu.__makeAction`bGGGE4ModelMenu.__actionTriggeredE4ModelMenu.__actionTriggeredTE4ModelMenu.__actionTriggeredTa???E4ModelMenu.__aboutToShowE4ModelMenu.__aboutToShowTE4ModelMenu.__aboutToShow1`55E4ModelMenu (Module)E4ModelMenu (Module)TO_??5E4ModelMenu (Constructor)E4ModelMenu (Constructor)TE4ModelMenu.__init__*^###E4ModelMenuE4ModelMenuTE4ModelMenuT]???E4ListView.removeSelectedE4ListView.removeSelectedSE4ListView.removeSelected @s.8~*@Ht777E4ModelMenu.rootIndexE4ModelMenu.rootIndexTE4ModelMenu.rootIndexKs999E4ModelMenu.resetFlagsE4ModelMenu.resetFlagsTE4ModelMenu.resetFlagsNr;;;E4ModelMenu.removeEntryE4ModelMenu.removeEntryTE4ModelMenu.removeEntryQq===E4ModelMenu.prePopulatedE4ModelMenu.prePopulatedTE4ModelMenu.prePopulatedTp???E4ModelMenu.postPopulatedE4ModelMenu.postPopulatedTE4ModelMenu.postPopulated`oGGGE4ModelMenu.mouseReleaseEventE4ModelMenu.mouseReleaseEventTE4ModelMenu.mouseReleaseEventZnCCCE4ModelMenu.mousePressEventE4ModelMenu.mousePressEventTE4ModelMenu.mousePressEventWmAAAE4ModelMenu.mouseMoveEventE4ModelMenu.mouseMoveEventTE4ModelMenu.mouseMoveEvent---E4SideBar.expandE4SideBar.expandVE4SideBar.expandH=777E4SideBar.eventFilterE4SideBar.eventFilterVE4SideBar.eventFilterE<555E4SideBar.enterEventE4SideBar.enterEventVE4SideBar.enterEvent6;+++E4SideBar.delayE4SideBar.delayVE4SideBar.delayN:;;;E4SideBar.currentWidgetE4SideBar.currentWidgetVE4SideBar.currentWidgetK9999E4SideBar.currentIndexE4SideBar.currentIndexVE4SideBar.currentIndex68+++E4SideBar.countE4SideBar.countVE4SideBar.count +v1GW s+ER555E4SideBar.setTabTextE4SideBar.setTabTextVE4SideBar.setTabTextEQ555E4SideBar.setTabIconE4SideBar.setTabIconVE4SideBar.setTabIconNP;;;E4SideBar.setTabEnabledE4SideBar.setTabEnabledVE4SideBar.setTabEnabledHO777E4SideBar.setSplitterE4SideBar.setSplitterVE4SideBar.setSplitterQN===E4SideBar.setOrientationE4SideBar.setOrientationVE4SideBar.setOrientation?M111E4SideBar.setDelayE4SideBar.setDelayVE4SideBar.setDelayWLAAAE4SideBar.setCurrentWidgetE4SideBar.setCurrentWidgetVE4SideBar.setCurrentWidgetTK???E4SideBar.setCurrentIndexE4SideBar.setCurrentIndexVE4SideBar.setCurrentIndexBJ333E4SideBar.saveStateE4SideBar.saveStateVE4SideBar.saveStateKI999E4SideBar.restoreStateE4SideBar.restoreStateVE4SideBar.restoreStateBH333E4SideBar.removeTabE4SideBar.removeTabVE4SideBar.removeTabUUUE4ToolBarManager.toolBarWidgetActionE4ToolBarManager.toolBarWidgetAction\E4ToolBarManager.toolBarWidgetAction 3z28Y.y3CTGGEditBreakpointDialog (Module)EditBreakpointDialog (Module);jSQQGEditBreakpointDialog (Constructor)EditBreakpointDialog (Constructor);EditBreakpointDialog.__init__ER555EditBreakpointDialogEditBreakpointDialog;EditBreakpointDialog(Q++E4XML (Package)E4XML (Package)@QP===E4WheelTabBar.wheelEventE4WheelTabBar.wheelEventYE4WheelTabBar.wheelEventUOCC9E4WheelTabBar (Constructor)E4WheelTabBar (Constructor)YE4WheelTabBar.__init__0N'''E4WheelTabBarE4WheelTabBarYE4WheelTabBaraMKKAE4VerticalToolBox (Constructor)E4VerticalToolBox (Constructor)]E4VerticalToolBox.__init__>67>I 777Editor.__getMacroNameEditor.__getMacroNameEditor.__getMacroName^ EEEEditor.__getCodeCoverageFileEditor.__getCodeCoverageFileEditor.__getCodeCoverageFileI777Editor.__getCharacterEditor.__getCharacterEditor.__getCharacter^EEEEditor.__exportMenuTriggeredEditor.__exportMenuTriggeredEditor.__exportMenuTriggeredU???Editor.__eolMenuTriggeredEditor.__eolMenuTriggeredEditor.__eolMenuTriggeredC333Editor.__eolChangedEditor.__eolChangedEditor.__eolChangedgKKKEditor.__encodingsMenuTriggeredEditor.__encodingsMenuTriggeredEditor.__encodingsMenuTriggeredR===Editor.__encodingChangedEditor.__encodingChangedEditor.__encodingChangedF555Editor.__deselectAllEditor.__deselectAllEditor.__deselectAllXAAAEditor.__deleteBreakPointsEditor.__deleteBreakPointsEditor.__deleteBreakPointsdIIIEditor.__cursorPositionChangedEditor.__cursorPositionChangedEditor.__cursorPositionChanged V-VmOOOEditor.__initContextMenuExportersEditor.__initContextMenuExportersEditor.__initContextMenuExporters[CCCEditor.__initContextMenuEolEditor.__initContextMenuEolEditor.__initContextMenuEolmOOOEditor.__initContextMenuEncodingsEditor.__initContextMenuEncodingsEditor.__initContextMenuEncodingsdIIIEditor.__initContextMenuChecksEditor.__initContextMenuChecksEditor.__initContextMenuChecks|YYYEditor.__initContextMenuAutocompletionEditor.__initContextMenuAutocompletionEditor.__initContextMenuAutocompletionR===Editor.__initContextMenuEditor.__initContextMenuEditor.__initContextMenuR ===Editor.__indentSelectionEditor.__indentSelectionEditor.__indentSelectionC 333Editor.__indentLineEditor.__indentLineEditor.__indentLinea GGGEditor.__ignoreSpellingAlwaysEditor.__ignoreSpellingAlwaysEditor.__ignoreSpellingAlways 7#If7dIIIEditor.__languageMenuTriggeredEditor.__languageMenuTriggeredEditor.__languageMenuTriggeredF555Editor.__isStartCharEditor.__isStartCharEditor.__isStartChar|YYYEditor.__initContextMenuUnifiedMarginsEditor.__initContextMenuUnifiedMarginsEditor.__initContextMenuUnifiedMargins^EEEEditor.__initContextMenuShowEditor.__initContextMenuShowEditor.__initContextMenuShow[[[Editor.__initContextMenuSeparateMarginsEditor.__initContextMenuSeparateMarginsEditor.__initContextMenuSeparateMarginsmOOOEditor.__initContextMenuResourcesEditor.__initContextMenuResourcesEditor.__initContextMenuResourcesgKKKEditor.__initContextMenuMarginsEditor.__initContextMenuMarginsEditor.__initContextMenuMarginsmOOOEditor.__initContextMenuLanguagesEditor.__initContextMenuLanguagesEditor.__initContextMenuLanguagesjMMMEditor.__initContextMenuGraphicsEditor.__initContextMenuGraphicsEditor.__initContextMenuGraphics ih{&Ii^&EEEEditor.__modificationChangedEditor.__modificationChangedEditor.__modificationChanged|%YYYEditor.__menuToggleTemporaryBreakpointEditor.__menuToggleTemporaryBreakpointEditor.__menuToggleTemporaryBreakpointv$UUUEditor.__menuToggleBreakpointEnabledEditor.__menuToggleBreakpointEnabledEditor.__menuToggleBreakpointEnableda#GGGEditor.__menuClearBreakpointsEditor.__menuClearBreakpointsEditor.__menuClearBreakpointsR"===Editor.__markOccurrencesEditor.__markOccurrencesEditor.__markOccurrencesI!777Editor.__marginNumberEditor.__marginNumberEditor.__marginNumberL 999Editor.__marginClickedEditor.__marginClickedEditor.__marginClickedO;;;Editor.__lmBbreakpointsEditor.__lmBbreakpointsEditor.__lmBbreakpointsI777Editor.__lmBbookmarksEditor.__lmBbookmarksEditor.__lmBbookmarksI777Editor.__linesChangedEditor.__linesChangedEditor.__linesChanged c_ `"cL0999Editor.__resetLanguageEditor.__resetLanguageEditor.__resetLanguagem/OOOEditor.__removeTrailingWhitespaceEditor.__removeTrailingWhitespaceEditor.__removeTrailingWhitespacey.WWWEditor.__removeFromSpellingDictionaryEditor.__removeFromSpellingDictionaryEditor.__removeFromSpellingDictionaryO-;;;Editor.__registerImagesEditor.__registerImagesEditor.__registerImagesm,OOOEditor.__projectPropertiesChangedEditor.__projectPropertiesChangedEditor.__projectPropertiesChangedI+777Editor.__printPreviewEditor.__printPreviewEditor.__printPreview[*CCCEditor.__normalizedEncodingEditor.__normalizedEncodingEditor.__normalizedEncodingR)===Editor.__newViewNewSplitEditor.__newViewNewSplitEditor.__newViewNewSplit:(---Editor.__newViewEditor.__newViewEditor.__newViewa'GGGEditor.__modificationReadOnlyEditor.__modificationReadOnlyEditor.__modificationReadOnly MDERM^;EEEEditor.__setSpellingLanguageEditor.__setSpellingLanguageEditor.__setSpellingLanguageF:555Editor.__setSpellingEditor.__setSpellingEditor.__setSpellingX9AAAEditor.__setMarginsDisplayEditor.__setMarginsDisplayEditor.__setMarginsDisplaya8GGGEditor.__setLineMarkerColoursEditor.__setLineMarkerColoursEditor.__setLineMarkerColoursC7333Editor.__setEolModeEditor.__setEolModeEditor.__setEolModeF6555Editor.__setCallTipsEditor.__setCallTipsEditor.__setCallTipsX5AAAEditor.__setAutoCompletionEditor.__setAutoCompletionEditor.__setAutoCompletion^4EEEEditor.__selectPygmentsLexerEditor.__selectPygmentsLexerEditor.__selectPygmentsLexer@3111Editor.__selectAllEditor.__selectAllEditor.__selectAll[2CCCEditor.__restoreBreakpointsEditor.__restoreBreakpointsEditor.__restoreBreakpoints[1CCCEditor.__resizeLinenoMarginEditor.__resizeLinenoMarginEditor.__resizeLinenoMargin 6D?k6[ECCCEditor.__showContextMenuEolEditor.__showContextMenuEolEditor.__showContextMenuEolmDOOOEditor.__showContextMenuEncodingsEditor.__showContextMenuEncodingsEditor.__showContextMenuEncodingsdCIIIEditor.__showContextMenuChecksEditor.__showContextMenuChecksEditor.__showContextMenuChecks|BYYYEditor.__showContextMenuAutocompletionEditor.__showContextMenuAutocompletionEditor.__showContextMenuAutocompletionRA===Editor.__showContextMenuEditor.__showContextMenuEditor.__showContextMenuR@===Editor.__showCodeMetricsEditor.__showCodeMetricsEditor.__showCodeMetricsU????Editor.__showCodeCoverageEditor.__showCodeCoverageEditor.__showCodeCoverageU>???Editor.__showClassDiagramEditor.__showClassDiagramEditor.__showClassDiagramg=KKKEditor.__showApplicationDiagramEditor.__showApplicationDiagramEditor.__showApplicationDiagramO<;;;Editor.__setTextDisplayEditor.__setTextDisplayEditor.__setTextDisplay m#L~ mRN===Editor.__showProfileDataEditor.__showProfileDataEditor.__showProfileData[MCCCEditor.__showPackageDiagramEditor.__showPackageDiagramEditor.__showPackageDiagram[LCCCEditor.__showImportsDiagramEditor.__showImportsDiagramEditor.__showImportsDiagramjKMMMEditor.__showContextMenuSpellingEditor.__showContextMenuSpellingEditor.__showContextMenuSpelling^JEEEEditor.__showContextMenuShowEditor.__showContextMenuShowEditor.__showContextMenuShowmIOOOEditor.__showContextMenuResourcesEditor.__showContextMenuResourcesEditor.__showContextMenuResourcesdHIIIEditor.__showContextMenuMarginEditor.__showContextMenuMarginEditor.__showContextMenuMarginmGOOOEditor.__showContextMenuLanguagesEditor.__showContextMenuLanguagesEditor.__showContextMenuLanguagesjFMMMEditor.__showContextMenuGraphicsEditor.__showContextMenuGraphicsEditor.__showContextMenuGraphics _YB}+_CY333Editor.autoCompleteEditor.autoCompleteEditor.autoCompleteIX777Editor.addedToProjectEditor.addedToProjectEditor.addedToProject7W+++Editor.addCloneEditor.addCloneEditor.addCloneOV;;;Editor.__updateReadOnlyEditor.__updateReadOnlyEditor.__updateReadOnlyUU???Editor.__toggleTypingAidsEditor.__toggleTypingAidsEditor.__toggleTypingAidsjTMMMEditor.__toggleBreakpointEnabledEditor.__toggleBreakpointEnabledEditor.__toggleBreakpointEnabledUS???Editor.__toggleBreakpointEditor.__toggleBreakpointEditor.__toggleBreakpointsRSSSEditor.__toggleAutoCompletionEnableEditor.__toggleAutoCompletionEnableEditor.__toggleAutoCompletionEnableFQ555Editor.__styleNeededEditor.__styleNeededEditor.__styleNeededOP;;;Editor.__spellCharAddedEditor.__spellCharAddedEditor.__spellCharAddedRO===Editor.__showSyntaxErrorEditor.__showSyntaxErrorEditor.__showSyntaxError 7D0O 7Ie777Editor.clearBookmarksEditor.clearBookmarksEditor.clearBookmarksFd555Editor.checkSpellingEditor.checkSpellingEditor.checkSpelling=c///Editor.checkDirtyEditor.checkDirtyEditor.checkDirty@b111Editor.changeEventEditor.changeEventEditor.changeEventdaIIIEditor.canAutoCompleteFromAPIsEditor.canAutoCompleteFromAPIsEditor.canAutoCompleteFromAPIs@`111Editor.callTipHookEditor.callTipHookEditor.callTipHook4_)))Editor.callTipEditor.callTipEditor.callTipX^AAAEditor.boxCommentSelectionEditor.boxCommentSelectionEditor.boxCommentSelectionj]MMMEditor.boxCommentLineOrSelectionEditor.boxCommentLineOrSelectionEditor.boxCommentLineOrSelectionI\777Editor.boxCommentLineEditor.boxCommentLineEditor.boxCommentLineU[???Editor.autoCompletionHookEditor.autoCompletionHookEditor.autoCompletionHookaZGGGEditor.autoCompleteQScintillaEditor.autoCompleteQScintillaEditor.autoCompleteQScintilla .P#|*z.Iq777Editor.dragEnterEventEditor.dragEnterEventEditor.dragEnterEvent[pCCCEditor.curLineHasBreakpointEditor.curLineHasBreakpointEditor.curLineHasBreakpointOo;;;Editor.contextMenuEventEditor.contextMenuEventEditor.contextMenuEventOn;;;Editor.commentSelectionEditor.commentSelectionEditor.commentSelectionamGGGEditor.commentLineOrSelectionEditor.commentLineOrSelectionEditor.commentLineOrSelection@l111Editor.commentLineEditor.commentLineEditor.commentLinepkQQQEditor.codeCoverageShowAnnotationsEditor.codeCoverageShowAnnotationsEditor.codeCoverageShowAnnotations4j)))Editor.closeItEditor.closeItEditor.closeIt.i%%%Editor.closeEditor.closeEditor.closeOh;;;Editor.clearSyntaxErrorEditor.clearSyntaxErrorEditor.clearSyntaxError^gEEEEditor.clearSearchIndicatorsEditor.clearSearchIndicatorsEditor.clearSearchIndicatorsLf999Editor.clearBreakpointEditor.clearBreakpointEditor.clearBreakpoint fk.J ;fC~333Editor.getCompleterEditor.getCompleterEditor.getCompleterC}333Editor.getBookmarksEditor.getBookmarksEditor.getBookmarksF|555Editor.focusOutEventEditor.focusOutEventEditor.focusOutEventC{333Editor.focusInEventEditor.focusInEventEditor.focusInEvent@z111Editor.fileRenamedEditor.fileRenamedEditor.fileRenamedCy333Editor.extractTasksEditor.extractTasksEditor.extractTasks=x///Editor.exportFileEditor.exportFileEditor.exportFileOw;;;Editor.ensureVisibleTopEditor.ensureVisibleTopEditor.ensureVisibleTopFv555Editor.ensureVisibleEditor.ensureVisibleEditor.ensureVisibleFu555Editor.editorCommandEditor.editorCommandEditor.editorCommand:t---Editor.dropEventEditor.dropEventEditor.dropEventFs555Editor.dragMoveEventEditor.dragMoveEventEditor.dragMoveEventIr777Editor.dragLeaveEventEditor.dragLeaveEventEditor.dragLeaveEvent >q.Sb>R ===Editor.getWordBoundariesEditor.getWordBoundariesEditor.getWordBoundaries4 )))Editor.getWordEditor.getWordEditor.getWordL 999Editor.getSyntaxErrorsEditor.getSyntaxErrorsEditor.getSyntaxErrorsF 555Editor.getSearchTextEditor.getSearchTextEditor.getSearchText:---Editor.getNoNameEditor.getNoNameEditor.getNoName4)))Editor.getMenuEditor.getMenuEditor.getMenu7+++Editor.getLexerEditor.getLexerEditor.getLexer@111Editor.getLanguageEditor.getLanguageEditor.getLanguage[CCCEditor.getHighlightPositionEditor.getHighlightPositionEditor.getHighlightPosition7+++Editor.getFoldsEditor.getFoldsEditor.getFolds@111Editor.getFileTypeEditor.getFileTypeEditor.getFileType@111Editor.getFileNameEditor.getFileNameEditor.getFileName@111Editor.getEncodingEditor.getEncodingEditor.getEncodingI777Editor.getCurrentWordEditor.getCurrentWordEditor.getCurrentWord <w=AWy<:---Editor.highlightEditor.highlightEditor.highlightI777Editor.hasTaskMarkersEditor.hasTaskMarkersEditor.hasTaskMarkersL999Editor.hasSyntaxErrorsEditor.hasSyntaxErrorsEditor.hasSyntaxErrors@111Editor.hasMiniMenuEditor.hasMiniMenuEditor.hasMiniMenuU???Editor.hasCoverageMarkersEditor.hasCoverageMarkersEditor.hasCoverageMarkersI777Editor.hasBreakpointsEditor.hasBreakpointsEditor.hasBreakpointsC333Editor.hasBookmarksEditor.hasBookmarksEditor.hasBookmarksF555Editor.handleRenamedEditor.handleRenamedEditor.handleRenamedaGGGEditor.handleMonospacedEnableEditor.handleMonospacedEnableEditor.handleMonospacedEnableL999Editor.gotoSyntaxErrorEditor.gotoSyntaxErrorEditor.gotoSyntaxError7+++Editor.gotoLineEditor.gotoLineEditor.gotoLineC333Editor.getWordRightEditor.getWordRightEditor.getWordRight@ 111Editor.getWordLeftEditor.getWordLeftEditor.getWordLeft 9M>c&s97&+++Editor.macroRunEditor.macroRunEditor.macroRunU%???Editor.macroRecordingStopEditor.macroRecordingStopEditor.macroRecordingStopX$AAAEditor.macroRecordingStartEditor.macroRecordingStartEditor.macroRecordingStart:#---Editor.macroLoadEditor.macroLoadEditor.macroLoad@"111Editor.macroDeleteEditor.macroDeleteEditor.macroDeleteL!999Editor.languageChangedEditor.languageChangedEditor.languageChangedF 555Editor.keyPressEventEditor.keyPressEventEditor.keyPressEventU???Editor.isSpellCheckRegionEditor.isSpellCheckRegionEditor.isSpellCheckRegion=///Editor.isRubyFileEditor.isRubyFileEditor.isRubyFile7+++Editor.isPyFileEditor.isPyFileEditor.isPyFile:---Editor.isPy3FileEditor.isPy3FileEditor.isPy3File^EEEEditor.indentLineOrSelectionEditor.indentLineOrSelectionEditor.indentLineOrSelectionO;;;Editor.highlightVisibleEditor.highlightVisibleEditor.highlightVisible nkW7nF1555Editor.nextUncoveredEditor.nextUncoveredEditor.nextUncovered70+++Editor.nextTaskEditor.nextTaskEditor.nextTaskC/333Editor.nextBookmarkEditor.nextBookmarkEditor.nextBookmarkp.QQQEditor.newBreakpointWithPropertiesEditor.newBreakpointWithPropertiesEditor.newBreakpointWithPropertiesL-999Editor.mousePressEventEditor.mousePressEventEditor.mousePressEvent[,CCCEditor.menuToggleBreakpointEditor.menuToggleBreakpointEditor.menuToggleBreakpointU+???Editor.menuToggleBookmarkEditor.menuToggleBookmarkEditor.menuToggleBookmarka*GGGEditor.menuPreviousBreakpointEditor.menuPreviousBreakpointEditor.menuPreviousBreakpointU)???Editor.menuNextBreakpointEditor.menuNextBreakpointEditor.menuNextBreakpointU(???Editor.menuEditBreakpointEditor.menuEditBreakpointEditor.menuEditBreakpoint:'---Editor.macroSaveEditor.macroSaveEditor.macroSave Qh;s9Q4>)))Editor.refreshEditor.refreshEditor.refresh+=###Editor.redoEditor.redoEditor.redoC<333Editor.readSettingsEditor.readSettingsEditor.readSettings:;---Editor.readLine0Editor.readLine0Editor.readLine07:+++Editor.readFileEditor.readFileEditor.readFileF9555Editor.projectOpenedEditor.projectOpenedEditor.projectOpened|8YYYEditor.projectLexerAssociationsChangedEditor.projectLexerAssociationsChangedEditor.projectLexerAssociationsChangedF7555Editor.projectClosedEditor.projectClosedEditor.projectClosedO6;;;Editor.printPreviewFileEditor.printPreviewFileEditor.printPreviewFile:5---Editor.printFileEditor.printFileEditor.printFileR4===Editor.previousUncoveredEditor.previousUncoveredEditor.previousUncoveredC3333Editor.previousTaskEditor.previousTaskEditor.previousTaskO2;;;Editor.previousBookmarkEditor.previousBookmarkEditor.previousBookmark =e+V-=@J111Editor.setLanguageEditor.setLanguageEditor.setLanguage^IEEEEditor.setEolModeByEolStringEditor.setEolModeByEolStringEditor.setEolModeByEolStringIH777Editor.setCallTipHookEditor.setCallTipHookEditor.setCallTipHook[GCCCEditor.setAutoSpellCheckingEditor.setAutoSpellCheckingEditor.setAutoSpellChecking^FEEEEditor.setAutoCompletionHookEditor.setAutoCompletionHookEditor.setAutoCompletionHookgEKKKEditor.setAutoCompletionEnabledEditor.setAutoCompletionEnabledEditor.setAutoCompletionEnabled=D///Editor.selectWordEditor.selectWordEditor.selectWordRC===Editor.selectCurrentWordEditor.selectCurrentWordEditor.selectCurrentWord=B///Editor.saveFileAsEditor.saveFileAsEditor.saveFileAs7A+++Editor.saveFileEditor.saveFileEditor.saveFileU@???Editor.revertToUnmodifiedEditor.revertToUnmodifiedEditor.revertToUnmodified@?111Editor.removeCloneEditor.removeCloneEditor.removeClone 5z"l [5IU777Editor.toggleBookmarkEditor.toggleBookmarkEditor.toggleBookmarkaTGGGEditor.streamCommentSelectionEditor.streamCommentSelectionEditor.streamCommentSelectionsSSSSEditor.streamCommentLineOrSelectionEditor.streamCommentLineOrSelectionEditor.streamCommentLineOrSelectionRR===Editor.streamCommentLineEditor.streamCommentLineEditor.streamCommentLinemQOOOEditor.smartIndentLineOrSelectionEditor.smartIndentLineOrSelectionEditor.smartIndentLineOrSelectionIP777Editor.shouldAutosaveEditor.shouldAutosaveEditor.shouldAutosaveRO===Editor.shortenEmptyLinesEditor.shortenEmptyLinesEditor.shortenEmptyLines^NEEEEditor.setSpellingForProjectEditor.setSpellingForProjectEditor.setSpellingForProjectUM???Editor.setSearchIndicatorEditor.setSearchIndicatorEditor.setSearchIndicator:L---Editor.setNoNameEditor.setNoNameEditor.setNoNameFK555Editor.setMonospacedEditor.setMonospacedEditor.setMonospaced Gbr RG8a;;EditorAPIsPage (Module)EditorAPIsPage (Module)aY`EE;EditorAPIsPage (Constructor)EditorAPIsPage (Constructor)aEditorAPIsPage.__init__4_)))EditorAPIsPageEditorAPIsPageaEditorAPIsPage:^---Editor.writeFileEditor.writeFileEditor.writeFileO];;;Editor.unsetCallTipHookEditor.unsetCallTipHookEditor.unsetCallTipHookd\IIIEditor.unsetAutoCompletionHookEditor.unsetAutoCompletionHookEditor.unsetAutoCompletionHookd[IIIEditor.unindentLineOrSelectionEditor.unindentLineOrSelectionEditor.unindentLineOrSelection+Z###Editor.undoEditor.undoEditor.undoUY???Editor.uncommentSelectionEditor.uncommentSelectionEditor.uncommentSelectiongXKKKEditor.uncommentLineOrSelectionEditor.uncommentLineOrSelectionEditor.uncommentLineOrSelectionFW555Editor.uncommentLineEditor.uncommentLineEditor.uncommentLineRV===Editor.toggleSyntaxErrorEditor.toggleSyntaxErrorEditor.toggleSyntaxError zydhmmmEditorAPIsPage.on_addPluginApiFileButton_clickedEditorAPIsPage.on_addPluginApiFileButton_clickedaEditorAPIsPage.on_addPluginApiFileButton_clicked#gsssEditorAPIsPage.on_addInstalledApiFileButton_clickedEditorAPIsPage.on_addInstalledApiFileButton_clickedaEditorAPIsPage.on_addInstalledApiFileButton_clickedfaaaEditorAPIsPage.on_addApiFileButton_clickedEditorAPIsPage.on_addApiFileButton_clickedaEditorAPIsPage.on_addApiFileButton_clickede___EditorAPIsPage.__editorGetApisFromApiListEditorAPIsPage.__editorGetApisFromApiListaEditorAPIsPage.__editorGetApisFromApiList|dYYYEditorAPIsPage.__apiPreparationStartedEditorAPIsPage.__apiPreparationStartedaEditorAPIsPage.__apiPreparationStartedc[[[EditorAPIsPage.__apiPreparationFinishedEditorAPIsPage.__apiPreparationFinishedaEditorAPIsPage.__apiPreparationFinishedb]]]EditorAPIsPage.__apiPreparationCancelledEditorAPIsPage.__apiPreparationCancelledaEditorAPIsPage.__apiPreparationCancelled ~N|'Rp===EditorAutocompletionPageEditorAutocompletionPagebEditorAutocompletionPageOo;;;EditorAPIsPage.setStateEditorAPIsPage.setStateaEditorAPIsPage.setStateRn===EditorAPIsPage.saveStateEditorAPIsPage.saveStateaEditorAPIsPage.saveStateCm333EditorAPIsPage.saveEditorAPIsPage.saveaEditorAPIsPage.savelaaaEditorAPIsPage.on_prepareApiButton_clickedEditorAPIsPage.on_prepareApiButton_clickedaEditorAPIsPage.on_prepareApiButton_clickedkgggEditorAPIsPage.on_deleteApiFileButton_clickedEditorAPIsPage.on_deleteApiFileButton_clickedaEditorAPIsPage.on_deleteApiFileButton_clickedjkkkEditorAPIsPage.on_apiLanguageComboBox_activatedEditorAPIsPage.on_apiLanguageComboBox_activatedaEditorAPIsPage.on_apiLanguageComboBox_activatedi[[[EditorAPIsPage.on_apiFileButton_clickedEditorAPIsPage.on_apiFileButton_clickedaEditorAPIsPage.on_apiFileButton_clicked 77`d7eyMMCEditorCalltipsPage (Constructor)EditorCalltipsPage (Constructor)dEditorCalltipsPage.__init__@x111EditorCalltipsPageEditorCalltipsPagedEditorCalltipsPagew[[[EditorAutocompletionQScintillaPage.saveEditorAutocompletionQScintillaPage.savecEditorAutocompletionQScintillaPage.save`vccEditorAutocompletionQScintillaPage (Module)EditorAutocompletionQScintillaPage (Module)cummcEditorAutocompletionQScintillaPage (Constructor)EditorAutocompletionQScintillaPage (Constructor)cEditorAutocompletionQScintillaPage.__init__ptQQQEditorAutocompletionQScintillaPageEditorAutocompletionQScintillaPagecEditorAutocompletionQScintillaPageasGGGEditorAutocompletionPage.saveEditorAutocompletionPage.savebEditorAutocompletionPage.saveLrOOEditorAutocompletionPage (Module)EditorAutocompletionPage (Module)bwqYYOEditorAutocompletionPage (Constructor)EditorAutocompletionPage (Constructor)bEditorAutocompletionPage.__init__ [ Z| [hOOEEditorExportersPage (Constructor)EditorExportersPage (Constructor)fEditorExportersPage.__init__C333EditorExportersPageEditorExportersPagefEditorExportersPagemOOOEditorCalltipsQScintillaPage.saveEditorCalltipsQScintillaPage.saveeEditorCalltipsQScintillaPage.saveTWWEditorCalltipsQScintillaPage (Module)EditorCalltipsQScintillaPage (Module)e~aaWEditorCalltipsQScintillaPage (Constructor)EditorCalltipsQScintillaPage (Constructor)eEditorCalltipsQScintillaPage.__init__^}EEEEditorCalltipsQScintillaPageEditorCalltipsQScintillaPageeEditorCalltipsQScintillaPageO|;;;EditorCalltipsPage.saveEditorCalltipsPage.savedEditorCalltipsPage.save,{yyyEditorCalltipsPage.on_calltipsBackgroundButton_clickedEditorCalltipsPage.on_calltipsBackgroundButton_clickeddEditorCalltipsPage.on_calltipsBackgroundButton_clicked@zCCEditorCalltipsPage (Module)EditorCalltipsPage (Module)d  9ks SSSEditorFilePage.__extractFileFiltersEditorFilePage.__extractFileFiltersgEditorFilePage.__extractFileFiltersj MMMEditorFilePage.__checkFileFilterEditorFilePage.__checkFileFiltergEditorFilePage.__checkFileFilter8 ;;EditorFilePage (Module)EditorFilePage (Module)gYEE;EditorFilePage (Constructor)EditorFilePage (Constructor)gEditorFilePage.__init__4)))EditorFilePageEditorFilePagegEditorFilePageR===EditorExportersPage.saveEditorExportersPage.savefEditorExportersPage.saveeeeEditorExportersPage.on_rtfFontButton_clickedEditorExportersPage.on_rtfFontButton_clickedfEditorExportersPage.on_rtfFontButton_clickedkkkEditorExportersPage.on_exportersCombo_activatedEditorExportersPage.on_exportersCombo_activatedfEditorExportersPage.on_exportersCombo_activatedBEEEditorExportersPage (Module)EditorExportersPage (Module)f 4~K z4C333EditorFilePage.saveEditorFilePage.savegEditorFilePage.save cccEditorFilePage.on_openFiltersButton_toggledEditorFilePage.on_openFiltersButton_toggledgEditorFilePage.on_openFiltersButton_toggled&uuuEditorFilePage.on_fileFiltersList_currentItemChangedEditorFilePage.on_fileFiltersList_currentItemChangedgEditorFilePage.on_fileFiltersList_currentItemChangediiiEditorFilePage.on_editFileFilterButton_clickedEditorFilePage.on_editFileFilterButton_clickedgEditorFilePage.on_editFileFilterButton_clickedmmmEditorFilePage.on_deleteFileFilterButton_clickedEditorFilePage.on_deleteFileFilterButton_clickedgEditorFilePage.on_deleteFileFilterButton_clicked gggEditorFilePage.on_addFileFilterButton_clickedEditorFilePage.on_addFileFilterButton_clickedgEditorFilePage.on_addFileFilterButton_clicked [[[EditorFilePage.__setDefaultFiltersListsEditorFilePage.__setDefaultFiltersListsgEditorFilePage.__setDefaultFiltersLists o[jX ommmEditorHighlightersPage.on_addLexerButton_clickedEditorHighlightersPage.on_addLexerButton_clickediEditorHighlightersPage.on_addLexerButton_clickedHKKEditorHighlightersPage (Module)EditorHighlightersPage (Module)iqUUKEditorHighlightersPage (Constructor)EditorHighlightersPage (Constructor)iEditorHighlightersPage.__init__L999EditorHighlightersPageEditorHighlightersPageiEditorHighlightersPageL999EditorGeneralPage.saveEditorGeneralPage.savehEditorGeneralPage.save,yyyEditorGeneralPage.on_tabforindentationCheckBox_toggledEditorGeneralPage.on_tabforindentationCheckBox_toggledhEditorGeneralPage.on_tabforindentationCheckBox_toggled>AAEditorGeneralPage (Module)EditorGeneralPage (Module)hbKKAEditorGeneralPage (Constructor)EditorGeneralPage (Constructor)hEditorGeneralPage.__init__=///EditorGeneralPageEditorGeneralPagehEditorGeneralPage oY.o^!EEEEditorHighlightingStylesPageEditorHighlightingStylesPagejEditorHighlightingStylesPage[ CCCEditorHighlightersPage.saveEditorHighlightersPage.saveiEditorHighlightersPage.save)wwwEditorHighlightersPage.on_editorLexerList_itemClickedEditorHighlightersPage.on_editorLexerList_itemClickediEditorHighlightersPage.on_editorLexerList_itemClicked/{{{EditorHighlightersPage.on_editorLexerList_itemActivatedEditorHighlightersPage.on_editorLexerList_itemActivatediEditorHighlightersPage.on_editorLexerList_itemActivatedG  EditorHighlightersPage.on_editorLexerCombo_currentIndexChangedEditorHighlightersPage.on_editorLexerCombo_currentIndexChangediEditorHighlightersPage.on_editorLexerCombo_currentIndexChanged#sssEditorHighlightersPage.on_deleteLexerButton_clickedEditorHighlightersPage.on_deleteLexerButton_clickediEditorHighlightersPage.on_deleteLexerButton_clicked y"cK,'yyyEditorHighlightingStylesPage.__fontButtonMenuTriggeredEditorHighlightingStylesPage.__fontButtonMenuTriggeredjEditorHighlightingStylesPage.__fontButtonMenuTriggered &cccEditorHighlightingStylesPage.__exportStylesEditorHighlightingStylesPage.__exportStylesjEditorHighlightingStylesPage.__exportStyles%___EditorHighlightingStylesPage.__changeFontEditorHighlightingStylesPage.__changeFontjEditorHighlightingStylesPage.__changeFont;$ EditorHighlightingStylesPage.__allFontsButtonMenuTriggeredEditorHighlightingStylesPage.__allFontsButtonMenuTriggeredjEditorHighlightingStylesPage.__allFontsButtonMenuTriggeredT#WWEditorHighlightingStylesPage (Module)EditorHighlightingStylesPage (Module)j"aaWEditorHighlightingStylesPage (Constructor)EditorHighlightingStylesPage (Constructor)jEditorHighlightingStylesPage.__init__ q U2,}}}EditorHighlightingStylesPage.on_allEolFillButton_clickedEditorHighlightingStylesPage.on_allEolFillButton_clickedjEditorHighlightingStylesPage.on_allEolFillButton_clicked2+}}}EditorHighlightingStylesPage.on_allDefaultButton_clickedEditorHighlightingStylesPage.on_allDefaultButton_clickedjEditorHighlightingStylesPage.on_allDefaultButton_clickedS* EditorHighlightingStylesPage.on_allBackgroundColoursButton_clickedEditorHighlightingStylesPage.on_allBackgroundColoursButton_clickedjEditorHighlightingStylesPage.on_allBackgroundColoursButton_clicked )cccEditorHighlightingStylesPage.__setToDefaultEditorHighlightingStylesPage.__setToDefaultjEditorHighlightingStylesPage.__setToDefault (cccEditorHighlightingStylesPage.__importStylesEditorHighlightingStylesPage.__importStylesjEditorHighlightingStylesPage.__importStyles uJ7u>1 EditorHighlightingStylesPage.on_exportCurrentButton_clickedEditorHighlightingStylesPage.on_exportCurrentButton_clickedjEditorHighlightingStylesPage.on_exportCurrentButton_clicked/0{{{EditorHighlightingStylesPage.on_exportAllButton_clickedEditorHighlightingStylesPage.on_exportAllButton_clickedjEditorHighlightingStylesPage.on_exportAllButton_clicked//{{{EditorHighlightingStylesPage.on_eolfillCheckBox_toggledEditorHighlightingStylesPage.on_eolfillCheckBox_toggledjEditorHighlightingStylesPage.on_eolfillCheckBox_toggled).wwwEditorHighlightingStylesPage.on_defaultButton_clickedEditorHighlightingStylesPage.on_defaultButton_clickedjEditorHighlightingStylesPage.on_defaultButton_clicked2-}}}EditorHighlightingStylesPage.on_backgroundButton_clickedEditorHighlightingStylesPage.on_backgroundButton_clickedjEditorHighlightingStylesPage.on_backgroundButton_clicked 0J0S6 EditorHighlightingStylesPage.on_styleElementList_currentRowChangedEditorHighlightingStylesPage.on_styleElementList_currentRowChangedjEditorHighlightingStylesPage.on_styleElementList_currentRowChangedJ5  EditorHighlightingStylesPage.on_lexerLanguageComboBox_activatedEditorHighlightingStylesPage.on_lexerLanguageComboBox_activatedjEditorHighlightingStylesPage.on_lexerLanguageComboBox_activated>4 EditorHighlightingStylesPage.on_importCurrentButton_clickedEditorHighlightingStylesPage.on_importCurrentButton_clickedjEditorHighlightingStylesPage.on_importCurrentButton_clicked/3{{{EditorHighlightingStylesPage.on_importAllButton_clickedEditorHighlightingStylesPage.on_importAllButton_clickedjEditorHighlightingStylesPage.on_importAllButton_clicked22}}}EditorHighlightingStylesPage.on_foregroundButton_clickedEditorHighlightingStylesPage.on_foregroundButton_clickedjEditorHighlightingStylesPage.on_foregroundButton_clicked  M@>CCEditorKeywordsPage (Module)EditorKeywordsPage (Module)ke=MMCEditorKeywordsPage (Constructor)EditorKeywordsPage (Constructor)kEditorKeywordsPage.__init__@<111EditorKeywordsPageEditorKeywordsPagekEditorKeywordsPagey;WWWEditorHighlightingStylesPage.setStateEditorHighlightingStylesPage.setStatejEditorHighlightingStylesPage.setState:aaaEditorHighlightingStylesPage.setSampleFontEditorHighlightingStylesPage.setSampleFontjEditorHighlightingStylesPage.setSampleFontv9UUUEditorHighlightingStylesPage.setFontEditorHighlightingStylesPage.setFontjEditorHighlightingStylesPage.setFont|8YYYEditorHighlightingStylesPage.saveStateEditorHighlightingStylesPage.saveStatejEditorHighlightingStylesPage.saveStatem7OOOEditorHighlightingStylesPage.saveEditorHighlightingStylesPage.savejEditorHighlightingStylesPage.save Pk;.PHgXAAAEricapiConfigDialog.acceptEricapiConfigDialog.acceptEricapiConfigDialog.accept]]]EricapiConfigDialog.__initializeDefaultsEricapiConfigDialog.__initializeDefaultsEricapiConfigDialog.__initializeDefaultsBEEEricapiConfigDialog (Module)EricapiConfigDialog (Module)hOOEEricapiConfigDialog (Constructor)EricapiConfigDialog (Constructor)EricapiConfigDialog.__init__C333EricapiConfigDialogEricapiConfigDialogEricapiConfigDialog,//Ericapi (Package)Ericapi (Package)TX AAAEmptyNetworkReply.readDataEmptyNetworkReply.readDataEmptyNetworkReply.readDataO ;;;EmptyNetworkReply.abortEmptyNetworkReply.abortEmptyNetworkReply.abort> AAEmptyNetworkReply (Module)EmptyNetworkReply (Module)b KKAEmptyNetworkReply (Constructor)EmptyNetworkReply (Constructor)EmptyNetworkReply.__init__= ///EmptyNetworkReplyEmptyNetworkReplyEmptyNetworkReply Xl9X=///EricapiExecDialogEricapiExecDialogEricapiExecDialogoooEricapiConfigDialog.on_outputFileEdit_textChangedEricapiConfigDialog.on_outputFileEdit_textChangedEricapiConfigDialog.on_outputFileEdit_textChangedkkkEricapiConfigDialog.on_outputFileButton_clickedEricapiConfigDialog.on_outputFileButton_clickedEricapiConfigDialog.on_outputFileButton_clickediiiEricapiConfigDialog.on_ignoreDirButton_clickedEricapiConfigDialog.on_ignoreDirButton_clickedEricapiConfigDialog.on_ignoreDirButton_clicked cccEricapiConfigDialog.on_deleteButton_clickedEricapiConfigDialog.on_deleteButton_clickedEricapiConfigDialog.on_deleteButton_clicked]]]EricapiConfigDialog.on_addButton_clickedEricapiConfigDialog.on_addButton_clickedEricapiConfigDialog.on_addButton_clicked|YYYEricapiConfigDialog.generateParametersEricapiConfigDialog.generateParametersEricapiConfigDialog.generateParameters Z1`,{ X%AAAEricapiPlugin.__initializeEricapiPlugin.__initializeEricapiPlugin.__initializeU$???EricapiPlugin.__doEricapiEricapiPlugin.__doEricapiEricapiPlugin.__doEricapiV#CC9EricapiPlugin (Constructor)EricapiPlugin (Constructor)EricapiPlugin.__init__1"'''EricapiPluginEricapiPluginEricapiPluginO!;;;EricapiExecDialog.startEricapiExecDialog.startEricapiExecDialog.start| YYYEricapiExecDialog.on_buttonBox_clickedEricapiExecDialog.on_buttonBox_clickedEricapiExecDialog.on_buttonBox_clickeddIIIEricapiExecDialog.__readStdoutEricapiExecDialog.__readStdoutEricapiExecDialog.__readStdoutdIIIEricapiExecDialog.__readStderrEricapiExecDialog.__readStderrEricapiExecDialog.__readStderrXAAAEricapiExecDialog.__finishEricapiExecDialog.__finishEricapiExecDialog.__finish>AAEricapiExecDialog (Module)EricapiExecDialog (Module)bKKAEricapiExecDialog (Constructor)EricapiExecDialog (Constructor)EricapiExecDialog.__init__ QG}GQm/OOOEricdocConfigDialog.__selectColorEricdocConfigDialog.__selectColorEricdocConfigDialog.__selectColor.]]]EricdocConfigDialog.__initializeDefaultsEricdocConfigDialog.__initializeDefaultsEricdocConfigDialog.__initializeDefaults-]]]EricdocConfigDialog.__checkQtHelpOptionsEricdocConfigDialog.__checkQtHelpOptionsEricdocConfigDialog.__checkQtHelpOptionsB,EEEricdocConfigDialog (Module)EricdocConfigDialog (Module)h+OOEEricdocConfigDialog (Constructor)EricdocConfigDialog (Constructor)EricdocConfigDialog.__init__C*333EricdocConfigDialogEricdocConfigDialogEricdocConfigDialog,)//Ericdoc (Package)Ericdoc (Package)UR(===EricapiPlugin.deactivateEricapiPlugin.deactivateEricapiPlugin.deactivateL'999EricapiPlugin.activateEricapiPlugin.activateEricapiPlugin.activateg&KKKEricapiPlugin.__projectShowMenuEricapiPlugin.__projectShowMenuEricapiPlugin.__projectShowMenu p&p6___EricdocConfigDialog.on_cfFgButton_clickedEricdocConfigDialog.on_cfFgButton_clickedEricdocConfigDialog.on_cfFgButton_clicked5___EricdocConfigDialog.on_cfBgButton_clickedEricdocConfigDialog.on_cfBgButton_clickedEricdocConfigDialog.on_cfBgButton_clicked 4cccEricdocConfigDialog.on_bodyFgButton_clickedEricdocConfigDialog.on_bodyFgButton_clickedEricdocConfigDialog.on_bodyFgButton_clicked 3cccEricdocConfigDialog.on_bodyBgButton_clickedEricdocConfigDialog.on_bodyBgButton_clickedEricdocConfigDialog.on_bodyBgButton_clicked2]]]EricdocConfigDialog.on_addButton_clickedEricdocConfigDialog.on_addButton_clickedEricdocConfigDialog.on_addButton_clicked|1YYYEricdocConfigDialog.generateParametersEricdocConfigDialog.generateParametersEricdocConfigDialog.generateParametersX0AAAEricdocConfigDialog.acceptEricdocConfigDialog.acceptEricdocConfigDialog.accept /zSA/=___EricdocConfigDialog.on_l2FgButton_clickedEricdocConfigDialog.on_l2FgButton_clickedEricdocConfigDialog.on_l2FgButton_clicked<___EricdocConfigDialog.on_l2BgButton_clickedEricdocConfigDialog.on_l2BgButton_clickedEricdocConfigDialog.on_l2BgButton_clicked;___EricdocConfigDialog.on_l1FgButton_clickedEricdocConfigDialog.on_l1FgButton_clickedEricdocConfigDialog.on_l1FgButton_clicked:___EricdocConfigDialog.on_l1BgButton_clickedEricdocConfigDialog.on_l1BgButton_clickedEricdocConfigDialog.on_l1BgButton_clicked9iiiEricdocConfigDialog.on_ignoreDirButton_clickedEricdocConfigDialog.on_ignoreDirButton_clickedEricdocConfigDialog.on_ignoreDirButton_clicked 8cccEricdocConfigDialog.on_deleteButton_clickedEricdocConfigDialog.on_deleteButton_clickedEricdocConfigDialog.on_deleteButton_clicked7]]]EricdocConfigDialog.on_cssButton_clickedEricdocConfigDialog.on_cssButton_clickedEricdocConfigDialog.on_cssButton_clicked ^qA^,CyyyEricdocConfigDialog.on_qtHelpNamespaceEdit_textChangedEricdocConfigDialog.on_qtHelpNamespaceEdit_textChangedEricdocConfigDialog.on_qtHelpNamespaceEdit_textChangedBaaaEricdocConfigDialog.on_qtHelpGroup_toggledEricdocConfigDialog.on_qtHelpGroup_toggledEricdocConfigDialog.on_qtHelpGroup_toggled#AsssEricdocConfigDialog.on_qtHelpFolderEdit_textChangedEricdocConfigDialog.on_qtHelpFolderEdit_textChangedEricdocConfigDialog.on_qtHelpFolderEdit_textChanged@iiiEricdocConfigDialog.on_qtHelpDirButton_clickedEricdocConfigDialog.on_qtHelpDirButton_clickedEricdocConfigDialog.on_qtHelpDirButton_clicked?iiiEricdocConfigDialog.on_outputDirButton_clickedEricdocConfigDialog.on_outputDirButton_clickedEricdocConfigDialog.on_outputDirButton_clicked >cccEricdocConfigDialog.on_linkFgButton_clickedEricdocConfigDialog.on_linkFgButton_clickedEricdocConfigDialog.on_linkFgButton_clicked H\vM|H1M'''EricdocPluginEricdocPluginEricdocPluginOL;;;EricdocExecDialog.startEricdocExecDialog.startEricdocExecDialog.start|KYYYEricdocExecDialog.on_buttonBox_clickedEricdocExecDialog.on_buttonBox_clickedEricdocExecDialog.on_buttonBox_clickeddJIIIEricdocExecDialog.__readStdoutEricdocExecDialog.__readStdoutEricdocExecDialog.__readStdoutdIIIIEricdocExecDialog.__readStderrEricdocExecDialog.__readStderrEricdocExecDialog.__readStderrXHAAAEricdocExecDialog.__finishEricdocExecDialog.__finishEricdocExecDialog.__finish>GAAEricdocExecDialog (Module)EricdocExecDialog (Module)bFKKAEricdocExecDialog (Constructor)EricdocExecDialog (Constructor)EricdocExecDialog.__init__=E///EricdocExecDialogEricdocExecDialogEricdocExecDialog DqqqEricdocConfigDialog.on_qtHelpTitleEdit_textChangedEricdocConfigDialog.on_qtHelpTitleEdit_textChangedEricdocConfigDialog.on_qtHelpTitleEdit_textChanged O;S|WYYYErrorLogDialog.on_deleteButton_clickedErrorLogDialog.on_deleteButton_clickedErrorLogDialog.on_deleteButton_clicked8V;;ErrorLogDialog (Module)ErrorLogDialog (Module)YUEE;ErrorLogDialog (Constructor)ErrorLogDialog (Constructor)ErrorLogDialog.__init__4T)))ErrorLogDialogErrorLogDialogErrorLogDialogRS===EricdocPlugin.deactivateEricdocPlugin.deactivateEricdocPlugin.deactivateLR999EricdocPlugin.activateEricdocPlugin.activateEricdocPlugin.activategQKKKEricdocPlugin.__projectShowMenuEricdocPlugin.__projectShowMenuEricdocPlugin.__projectShowMenuXPAAAEricdocPlugin.__initializeEricdocPlugin.__initializeEricdocPlugin.__initializeUO???EricdocPlugin.__doEricdocEricdocPlugin.__doEricdocEricdocPlugin.__doEricdocVNCC9EricdocPlugin (Constructor)EricdocPlugin (Constructor)EricdocPlugin.__init__ 7 t8f7]aEEEExceptionLogger.addExceptionExceptionLogger.addException=ExceptionLogger.addExceptionl`OOOExceptionLogger.__showContextMenuExceptionLogger.__showContextMenu=ExceptionLogger.__showContextMenu]_EEEExceptionLogger.__openSourceExceptionLogger.__openSource=ExceptionLogger.__openSourcer^SSSExceptionLogger.__itemDoubleClickedExceptionLogger.__itemDoubleClicked=ExceptionLogger.__itemDoubleClickedZ]CCCExceptionLogger.__configureExceptionLogger.__configure=ExceptionLogger.__configure9\==ExceptionLogger (Module)ExceptionLogger (Module)=[[GG=ExceptionLogger (Constructor)ExceptionLogger (Constructor)=ExceptionLogger.__init__6Z+++ExceptionLoggerExceptionLogger=ExceptionLoggervYUUUErrorLogDialog.on_keepButton_clickedErrorLogDialog.on_keepButton_clickedErrorLogDialog.on_keepButton_clickedyXWWWErrorLogDialog.on_emailButton_clickedErrorLogDialog.on_emailButton_clickedErrorLogDialog.on_emailButton_clicked ?Fv?iiiiExceptionsFilterDialog.on_deleteButton_clickedExceptionsFilterDialog.on_deleteButton_clicked>ExceptionsFilterDialog.on_deleteButton_clickedhoooExceptionsFilterDialog.on_deleteAllButton_clickedExceptionsFilterDialog.on_deleteAllButton_clicked>ExceptionsFilterDialog.on_deleteAllButton_clicked gcccExceptionsFilterDialog.on_addButton_clickedExceptionsFilterDialog.on_addButton_clicked>ExceptionsFilterDialog.on_addButton_clickedf]]]ExceptionsFilterDialog.getExceptionsListExceptionsFilterDialog.getExceptionsList>ExceptionsFilterDialog.getExceptionsListGeKKExceptionsFilterDialog (Module)ExceptionsFilterDialog (Module)>pdUUKExceptionsFilterDialog (Constructor)ExceptionsFilterDialog (Constructor)>ExceptionsFilterDialog.__init__Kc999ExceptionsFilterDialogExceptionsFilterDialog>ExceptionsFilterDialogibMMMExceptionLogger.debuggingStartedExceptionLogger.debuggingStarted=ExceptionLogger.debuggingStarted jZe(j4s77ExporterHTML (Module)ExporterHTML (Module)SrAA7ExporterHTML (Constructor)ExporterHTML (Constructor)ExporterHTML.__init__.q%%%ExporterHTMLExporterHTMLExporterHTMLUp???ExporterBase.exportSourceExporterBase.exportSourceExporterBase.exportSourceUo???ExporterBase._getFileNameExporterBase._getFileNameExporterBase._getFileName4n77ExporterBase (Module)ExporterBase (Module)SmAA7ExporterBase (Constructor)ExporterBase (Constructor)ExporterBase.__init__.l%%%ExporterBaseExporterBaseExporterBase@k ExceptionsFilterDialog.on_exceptionList_itemSelectionChangedExceptionsFilterDialog.on_exceptionList_itemSelectionChanged>ExceptionsFilterDialog.on_exceptionList_itemSelectionChanged"jsssExceptionsFilterDialog.on_exceptionEdit_textChangedExceptionsFilterDialog.on_exceptionEdit_textChanged>ExceptionsFilterDialog.on_exceptionEdit_textChanged >z'K+l>+###ExporterTEXExporterTEXExporterTEXR===ExporterRTF.exportSourceExporterRTF.exportSourceExporterRTF.exportSourceg~KKKExporterRTF.__GetRTFStyleChangeExporterRTF.__GetRTFStyleChangeExporterRTF.__GetRTFStyleChangeg}KKKExporterRTF.__GetRTFNextControlExporterRTF.__GetRTFNextControlExporterRTF.__GetRTFNextControl2|55ExporterRTF (Module)ExporterRTF (Module)P{??5ExporterRTF (Constructor)ExporterRTF (Constructor)ExporterRTF.__init__+z###ExporterRTFExporterRTFExporterRTFRy===ExporterPDF.exportSourceExporterPDF.exportSourceExporterPDF.exportSourceOx;;;ExporterPDF.__getPDFRGBExporterPDF.__getPDFRGBExporterPDF.__getPDFRGB2w55ExporterPDF (Module)ExporterPDF (Module)Pv??5ExporterPDF (Constructor)ExporterPDF (Constructor)ExporterPDF.__init__+u###ExporterPDFExporterPDFExporterPDFUt???ExporterHTML.exportSourceExporterHTML.exportSourceExporterHTML.exportSource Xxv!OXU ???FileDialogWizard.__handleFileDialogWizard.__handleFileDialogWizard.__handle[ CCCFileDialogWizard.__callFormFileDialogWizard.__callFormFileDialogWizard.__callForm> AAFileDialogWizard (Package)FileDialogWizard (Package)b_ II?FileDialogWizard (Constructor)FileDialogWizard (Constructor)FileDialogWizard.__init__:---FileDialogWizardFileDialogWizardFileDialogWizard033Exporters (Package)Exporters (Package)nR===ExporterTEX.exportSourceExporterTEX.exportSourceExporterTEX.exportSourceL999ExporterTEX.__texStyleExporterTEX.__texStyleExporterTEX.__texStyleO;;;ExporterTEX.__getTexRGBExporterTEX.__getTexRGBExporterTEX.__getTexRGB^EEEExporterTEX.__defineTexStyleExporterTEX.__defineTexStyleExporterTEX.__defineTexStyle255ExporterTEX (Module)ExporterTEX (Module)P??5ExporterTEX (Constructor)ExporterTEX (Constructor)ExporterTEX.__init__ r>9z riiiFileDialogWizardDialog.__toggleConfirmCheckBoxFileDialogWizardDialog.__toggleConfirmCheckBoxOFileDialogWizardDialog.__toggleConfirmCheckBoxmOOOFileDialogWizardDialog.__getCode4FileDialogWizardDialog.__getCode4OFileDialogWizardDialog.__getCode4HKKFileDialogWizardDialog (Module)FileDialogWizardDialog (Module)OqUUKFileDialogWizardDialog (Constructor)FileDialogWizardDialog (Constructor)OFileDialogWizardDialog.__init__L999FileDialogWizardDialogFileDialogWizardDialogOFileDialogWizardDialog[CCCFileDialogWizard.deactivateFileDialogWizard.deactivateFileDialogWizard.deactivateU???FileDialogWizard.activateFileDialogWizard.activateFileDialogWizard.activate[CCCFileDialogWizard.__initMenuFileDialogWizard.__initMenuFileDialogWizard.__initMenua GGGFileDialogWizard.__initActionFileDialogWizard.__initActionFileDialogWizard.__initAction Qn!Q|YYYFiletypeAssociationDialog.__createItemFiletypeAssociationDialog.__createItemFiletypeAssociationDialog.__createItemNQQFiletypeAssociationDialog (Module)FiletypeAssociationDialog (Module)z[[QFiletypeAssociationDialog (Constructor)FiletypeAssociationDialog (Constructor)FiletypeAssociationDialog.__init__U???FiletypeAssociationDialogFiletypeAssociationDialogFiletypeAssociationDialog cccFileDialogWizardDialog.on_buttonBox_clickedFileDialogWizardDialog.on_buttonBox_clickedOFileDialogWizardDialog.on_buttonBox_clicked[[[FileDialogWizardDialog.on_bTest_clickedFileDialogWizardDialog.on_bTest_clickedOFileDialogWizardDialog.on_bTest_clickeddIIIFileDialogWizardDialog.getCodeFileDialogWizardDialog.getCodeOFileDialogWizardDialog.getCodeeeeFileDialogWizardDialog.__toggleGroupsAndTestFileDialogWizardDialog.__toggleGroupsAndTestOFileDialogWizardDialog.__toggleGroupsAndTest [2"}}}FiletypeAssociationDialog.on_filePatternEdit_textChangedFiletypeAssociationDialog.on_filePatternEdit_textChangedFiletypeAssociationDialog.on_filePatternEdit_textChangedA! FiletypeAssociationDialog.on_deleteAssociationButton_clickedFiletypeAssociationDialog.on_deleteAssociationButton_clickedFiletypeAssociationDialog.on_deleteAssociationButton_clicked5 FiletypeAssociationDialog.on_addAssociationButton_clickedFiletypeAssociationDialog.on_addAssociationButton_clickedFiletypeAssociationDialog.on_addAssociationButton_clickedpQQQFiletypeAssociationDialog.__resortFiletypeAssociationDialog.__resortFiletypeAssociationDialog.__resortvUUUFiletypeAssociationDialog.__reformatFiletypeAssociationDialog.__reformatFiletypeAssociationDialog.__reformat .dQ.U+???FindFileDialog.__doSearchFindFileDialog.__doSearchFindFileDialog.__doSearch[*CCCFindFileDialog.__createItemFindFileDialog.__createItemFindFileDialog.__createItemj)MMMFindFileDialog.__copyToClipboardFindFileDialog.__copyToClipboardFindFileDialog.__copyToClipboardy(WWWFindFileDialog.__contextMenuRequestedFindFileDialog.__contextMenuRequestedFindFileDialog.__contextMenuRequested8';;FindFileDialog (Module)FindFileDialog (Module)Y&EE;FindFileDialog (Constructor)FindFileDialog (Constructor)FindFileDialog.__init__4%)))FindFileDialogFindFileDialogFindFileDialog|$YYYFiletypeAssociationDialog.transferDataFiletypeAssociationDialog.transferDataFiletypeAssociationDialog.transferDatab# FiletypeAssociationDialog.on_filetypeAssociationList_currentItemChangedFiletypeAssociationDialog.on_filetypeAssociationList_currentItemChangedFiletypeAssociationDialog.on_filetypeAssociationList_currentItemChanged /y!5 4___FindFileDialog.on_dirSelectButton_clickedFindFileDialog.on_dirSelectButton_clickedFindFileDialog.on_dirSelectButton_clicked3aaaFindFileDialog.on_dirCombo_editTextChangedFindFileDialog.on_dirCombo_editTextChangedFindFileDialog.on_dirCombo_editTextChangeds2SSSFindFileDialog.on_dirButton_clickedFindFileDialog.on_dirButton_clickedFindFileDialog.on_dirButton_clickeds1SSSFindFileDialog.on_buttonBox_clickedFindFileDialog.on_buttonBox_clickedFindFileDialog.on_buttonBox_clickedU0???FindFileDialog.__stripEolFindFileDialog.__stripEolFindFileDialog.__stripEol[/CCCFindFileDialog.__stopSearchFindFileDialog.__stopSearchFindFileDialog.__stopSearchU.???FindFileDialog.__openFileFindFileDialog.__openFileFindFileDialog.__openFile^-EEEFindFileDialog.__getFileListFindFileDialog.__getFileListFindFileDialog.__getFileListm,OOOFindFileDialog.__enableFindButtonFindFileDialog.__enableFindButtonFindFileDialog.__enableFindButton #zfI# ;qqqFindFileDialog.on_replacetextCombo_editTextChangedFindFileDialog.on_replacetextCombo_editTextChangedFindFileDialog.on_replacetextCombo_editTextChanged:[[[FindFileDialog.on_replaceButton_clickedFindFileDialog.on_replaceButton_clickedFindFileDialog.on_replaceButton_clicked9[[[FindFileDialog.on_projectButton_clickedFindFileDialog.on_projectButton_clickedFindFileDialog.on_projectButton_clicked8kkkFindFileDialog.on_findtextCombo_editTextChangedFindFileDialog.on_findtextCombo_editTextChangedFindFileDialog.on_findtextCombo_editTextChanged7eeeFindFileDialog.on_findList_itemDoubleClickedFindFileDialog.on_findList_itemDoubleClickedFindFileDialog.on_findList_itemDoubleClicked6[[[FindFileDialog.on_filterEdit_textEditedFindFileDialog.on_filterEdit_textEditedFindFileDialog.on_filterEdit_textEdited5]]]FindFileDialog.on_filterCheckBox_clickedFindFileDialog.on_filterCheckBox_clickedFindFileDialog.on_filterCheckBox_clicked J\-D[[[FindFileNameDialog.on_buttonBox_clickedFindFileNameDialog.on_buttonBox_clickedFindFileNameDialog.on_buttonBox_clicked^CEEEFindFileNameDialog.checkStopFindFileNameDialog.checkStopFindFileNameDialog.checkStopgBKKKFindFileNameDialog.__searchFileFindFileNameDialog.__searchFileFindFileNameDialog.__searchFileaAGGGFindFileNameDialog.__openFileFindFileNameDialog.__openFileFindFileNameDialog.__openFile@@CCFindFileNameDialog (Module)FindFileNameDialog (Module)e?MMCFindFileNameDialog (Constructor)FindFileNameDialog (Constructor)FindFileNameDialog.__init__@>111FindFileNameDialogFindFileNameDialogFindFileNameDialogC=333FindFileDialog.showFindFileDialog.showFindFileDialog.showm<OOOFindFileDialog.setSearchDirectoryFindFileDialog.setSearchDirectoryFindFileDialog.setSearchDirectory vk8 vJgggFindFileNameDialog.on_searchDirButton_clickedFindFileNameDialog.on_searchDirButton_clickedFindFileNameDialog.on_searchDirButton_clickedIgggFindFileNameDialog.on_projectCheckBox_toggledFindFileNameDialog.on_projectCheckBox_toggledFindFileNameDialog.on_projectCheckBox_toggledHiiiFindFileNameDialog.on_fileNameEdit_textChangedFindFileNameDialog.on_fileNameEdit_textChangedFindFileNameDialog.on_fileNameEdit_textChangedGeeeFindFileNameDialog.on_fileList_itemActivatedFindFileNameDialog.on_fileList_itemActivatedFindFileNameDialog.on_fileList_itemActivatedFoooFindFileNameDialog.on_fileList_currentItemChangedFindFileNameDialog.on_fileList_currentItemChangedFindFileNameDialog.on_fileList_currentItemChangedEgggFindFileNameDialog.on_fileExtEdit_textChangedFindFileNameDialog.on_fileExtEdit_textChangedFindFileNameDialog.on_fileExtEdit_textChanged me5n m[SCCCFontDialogWizard.__callFormFontDialogWizard.__callFormFontDialogWizard.__callForm>RAAFontDialogWizard (Package)FontDialogWizard (Package)c_QII?FontDialogWizard (Constructor)FontDialogWizard (Constructor)FontDialogWizard.__init__:P---FontDialogWizardFontDialogWizardFontDialogWizard5O99FlexCompleter (Module)FlexCompleter (Module)ON;;;FindFileNameDialog.showFindFileNameDialog.showFindFileNameDialog.showMgggFindFileNameDialog.on_syspathCheckBox_toggledFindFileNameDialog.on_syspathCheckBox_toggledFindFileNameDialog.on_syspathCheckBox_toggledLkkkFindFileNameDialog.on_searchDirEdit_textChangedFindFileNameDialog.on_searchDirEdit_textChangedFindFileNameDialog.on_searchDirEdit_textChangedKkkkFindFileNameDialog.on_searchDirCheckBox_toggledFindFileNameDialog.on_searchDirCheckBox_toggledFindFileNameDialog.on_searchDirCheckBox_toggled 9D0m"9][[[FontDialogWizardDialog.on_bTest_clickedFontDialogWizardDialog.on_bTest_clickedPFontDialogWizardDialog.on_bTest_clickedd\IIIFontDialogWizardDialog.getCodeFontDialogWizardDialog.getCodePFontDialogWizardDialog.getCodeH[KKFontDialogWizardDialog (Module)FontDialogWizardDialog (Module)PqZUUKFontDialogWizardDialog (Constructor)FontDialogWizardDialog (Constructor)PFontDialogWizardDialog.__init__LY999FontDialogWizardDialogFontDialogWizardDialogPFontDialogWizardDialog[XCCCFontDialogWizard.deactivateFontDialogWizard.deactivateFontDialogWizard.deactivateUW???FontDialogWizard.activateFontDialogWizard.activateFontDialogWizard.activate[VCCCFontDialogWizard.__initMenuFontDialogWizard.__initMenuFontDialogWizard.__initMenuaUGGGFontDialogWizard.__initActionFontDialogWizard.__initActionFontDialogWizard.__initActionUT???FontDialogWizard.__handleFontDialogWizard.__handleFontDialogWizard.__handle qDT)Q .i11Graphics (Package)Graphics (Package)BRh===GotoDialog.getLinenumberGotoDialog.getLinenumberGotoDialog.getLinenumber0g33GotoDialog (Module)GotoDialog (Module)Mf==3GotoDialog (Constructor)GotoDialog (Constructor)GotoDialog.__init__(e!!!GotoDialogGotoDialogGotoDialog,d//Globals (Package)Globals (Package)AOc;;;Function.addDescriptionFunction.addDescription Function.addDescriptionGb99/Function (Constructor)Function (Constructor)Function.__init__"aFunctionFunctionFunction`eeeFontDialogWizardDialog.on_fontButton_clickedFontDialogWizardDialog.on_fontButton_clickedPFontDialogWizardDialog.on_fontButton_clicked_kkkFontDialogWizardDialog.on_eVariable_textChangedFontDialogWizardDialog.on_eVariable_textChangedPFontDialogWizardDialog.on_eVariable_textChanged ^cccFontDialogWizardDialog.on_buttonBox_clickedFontDialogWizardDialog.on_buttonBox_clickedPFontDialogWizardDialog.on_buttonBox_clicked 'yBd$g'ugggHelpAppearancePage.on_fixedFontButton_clickedHelpAppearancePage.on_fixedFontButton_clickedsHelpAppearancePage.on_fixedFontButton_clicked@tCCHelpAppearancePage (Module)HelpAppearancePage (Module)sesMMCHelpAppearancePage (Constructor)HelpAppearancePage (Constructor)sHelpAppearancePage.__init__@r111HelpAppearancePageHelpAppearancePagesHelpAppearancePage6q99HTMLResources (Module)HTMLResources (Module)>pAAGraphicsUtilities (Module)GraphicsUtilities (Module)=o///GraphicsPage.saveGraphicsPage.saverGraphicsPage.saveOn;;;GraphicsPage.polishPageGraphicsPage.polishPagerGraphicsPage.polishPagemaaaGraphicsPage.on_graphicsFontButton_clickedGraphicsPage.on_graphicsFontButton_clickedrGraphicsPage.on_graphicsFontButton_clicked4l77GraphicsPage (Module)GraphicsPage (Module)rSkAA7GraphicsPage (Constructor)GraphicsPage (Constructor)rGraphicsPage.__init__.j%%%GraphicsPageGraphicsPagerGraphicsPage -V sE-j~MMMHelpBrowser.__addExternalBindingHelpBrowser.__addExternalBindingHelpBrowser.__addExternalBindingU}???HelpBrowser.__addBookmarkHelpBrowser.__addBookmarkHelpBrowser.__addBookmarkP|??5HelpBrowser (Constructor)HelpBrowser (Constructor)HelpBrowser.__init__+{###HelpBrowserHelpBrowserHelpBrowserXzAAAHelpAppearancePage.setModeHelpAppearancePage.setModesHelpAppearancePage.setModeOy;;;HelpAppearancePage.saveHelpAppearancePage.savesHelpAppearancePage.savexiiiHelpAppearancePage.on_styleSheetButton_clickedHelpAppearancePage.on_styleSheetButton_clickedsHelpAppearancePage.on_styleSheetButton_clickedwmmmHelpAppearancePage.on_standardFontButton_clickedHelpAppearancePage.on_standardFontButton_clickedsHelpAppearancePage.on_standardFontButton_clicked&vuuuHelpAppearancePage.on_secureURLsColourButton_clickedHelpAppearancePage.on_secureURLsColourButton_clickedsHelpAppearancePage.on_secureURLsColourButton_clickedof@flrx~ &,28>DJPV\bhntz "(.4:@FLRX^djpv|Бjёuґ~ӒԒՒ֒%ג/ؒ6ْ=ڒCےMܒWݒaޒiБjёuґ~ӒԒՒ֒%ג/ؒ6ْ=ڒCےMܒWݒaޒiߒs "+4;DJS]iu~(4?FPXalv~!,7BKU_hq {    '/:CNYbku  *5AKU` j!u"#$%&&'0(:)E*P+X,c-k.u/}012$3.4;5H6T7`8l9v:;<='>4?@ lYB%lXAAAHelpBrowser.__downloadLinkHelpBrowser.__downloadLinkHelpBrowser.__downloadLink[CCCHelpBrowser.__downloadImageHelpBrowser.__downloadImageHelpBrowser.__downloadImageXAAAHelpBrowser.__downloadDoneHelpBrowser.__downloadDoneHelpBrowser.__downloadDonepQQQHelpBrowser.__currentEngineChangedHelpBrowser.__currentEngineChangedHelpBrowser.__currentEngineChangedL999HelpBrowser.__copyLinkHelpBrowser.__copyLinkHelpBrowser.__copyLinkgKKKHelpBrowser.__copyImageLocationHelpBrowser.__copyImageLocationHelpBrowser.__copyImageLocationO;;;HelpBrowser.__copyImageHelpBrowser.__copyImageHelpBrowser.__copyImageXAAAHelpBrowser.__bookmarkLinkHelpBrowser.__bookmarkLinkHelpBrowser.__bookmarkLinkR===HelpBrowser.__blockImageHelpBrowser.__blockImageHelpBrowser.__blockImageO;;;HelpBrowser.__applyZoomHelpBrowser.__applyZoomHelpBrowser.__applyZoom K>0}KdIIIHelpBrowser.__statusBarMessageHelpBrowser.__statusBarMessageHelpBrowser.__statusBarMessageaGGGHelpBrowser.__searchRequestedHelpBrowser.__searchRequestedHelpBrowser.__searchRequesteddIIIHelpBrowser.__openLinkInNewTabHelpBrowser.__openLinkInNewTabHelpBrowser.__openLinkInNewTabU???HelpBrowser.__loadStartedHelpBrowser.__loadStartedHelpBrowser.__loadStartedXAAAHelpBrowser.__loadProgressHelpBrowser.__loadProgressHelpBrowser.__loadProgressX AAAHelpBrowser.__loadFinishedHelpBrowser.__loadFinishedHelpBrowser.__loadFinishedU ???HelpBrowser.__linkHoveredHelpBrowser.__linkHoveredHelpBrowser.__linkHoveredX AAAHelpBrowser.__levelForZoomHelpBrowser.__levelForZoomHelpBrowser.__levelForZoomU ???HelpBrowser.__iconChangedHelpBrowser.__iconChangedHelpBrowser.__iconChangedg KKKHelpBrowser.__downloadRequestedHelpBrowser.__downloadRequestedHelpBrowser.__downloadRequested _>ER_C333HelpBrowser.forwardHelpBrowser.forwardHelpBrowser.forwardR===HelpBrowser.findNextPrevHelpBrowser.findNextPrevHelpBrowser.findNextPrevU???HelpBrowser.documentTitleHelpBrowser.documentTitleHelpBrowser.documentTitleR===HelpBrowser.createWindowHelpBrowser.createWindowHelpBrowser.createWindow:---HelpBrowser.copyHelpBrowser.copyHelpBrowser.copy^EEEHelpBrowser.contextMenuEventHelpBrowser.contextMenuEventHelpBrowser.contextMenuEventR===HelpBrowser.clearHistoryHelpBrowser.clearHistoryHelpBrowser.clearHistoryF555HelpBrowser.backwardHelpBrowser.backwardHelpBrowser.backwardXAAAHelpBrowser.__webInspectorHelpBrowser.__webInspectorHelpBrowser.__webInspectorR===HelpBrowser.__urlChangedHelpBrowser.__urlChangedHelpBrowser.__urlChangedjMMMHelpBrowser.__unsupportedContentHelpBrowser.__unsupportedContentHelpBrowser.__unsupportedContent 5nQ=x5@(111HelpBrowser.reloadHelpBrowser.reloadHelpBrowser.reloadd'IIIHelpBrowser.preferencesChangedHelpBrowser.preferencesChangedHelpBrowser.preferencesChanged[&CCCHelpBrowser.mousePressEventHelpBrowser.mousePressEventHelpBrowser.mousePressEvent[%CCCHelpBrowser.linkedResourcesHelpBrowser.linkedResourcesHelpBrowser.linkedResources[$CCCHelpBrowser.keyReleaseEventHelpBrowser.keyReleaseEventHelpBrowser.keyReleaseEventU#???HelpBrowser.keyPressEventHelpBrowser.keyPressEventHelpBrowser.keyPressEventI"777HelpBrowser.isLoadingHelpBrowser.isLoadingHelpBrowser.isLoadingd!IIIHelpBrowser.isForwardAvailableHelpBrowser.isForwardAvailableHelpBrowser.isForwardAvailableg KKKHelpBrowser.isBackwardAvailableHelpBrowser.isBackwardAvailableHelpBrowser.isBackwardAvailable:---HelpBrowser.homeHelpBrowser.homeHelpBrowser.homeR===HelpBrowser.hasSelectionHelpBrowser.hasSelectionHelpBrowser.hasSelection 0q.V v0p4QQQHelpClearPrivateDataDialog.getDataHelpClearPrivateDataDialog.getDataHelpClearPrivateDataDialog.getDataP3SSHelpClearPrivateDataDialog (Module)HelpClearPrivateDataDialog (Module)}2]]SHelpClearPrivateDataDialog (Constructor)HelpClearPrivateDataDialog (Constructor)HelpClearPrivateDataDialog.__init__X1AAAHelpClearPrivateDataDialogHelpClearPrivateDataDialogHelpClearPrivateDataDialog6099HelpBrowserWV (Module)HelpBrowserWV (Module)I/777HelpBrowser.zoomResetHelpBrowser.zoomResetHelpBrowser.zoomResetC.333HelpBrowser.zoomOutHelpBrowser.zoomOutHelpBrowser.zoomOut@-111HelpBrowser.zoomInHelpBrowser.zoomInHelpBrowser.zoomInL,999HelpBrowser.wheelEventHelpBrowser.wheelEventHelpBrowser.wheelEvent@+111HelpBrowser.sourceHelpBrowser.sourceHelpBrowser.sourceI*777HelpBrowser.setSourceHelpBrowser.setSourceHelpBrowser.setSource@)111HelpBrowser.saveAsHelpBrowser.saveAsHelpBrowser.saveAs 2[78{2F?IIHelpDocumentationPage (Module)HelpDocumentationPage (Module)tn>SSIHelpDocumentationPage (Constructor)HelpDocumentationPage (Constructor)tHelpDocumentationPage.__init__I=777HelpDocumentationPageHelpDocumentationPagetHelpDocumentationPageL<999HelpDocsInstaller.stopHelpDocsInstaller.stopHelpDocsInstaller.stopI;777HelpDocsInstaller.runHelpDocsInstaller.runHelpDocsInstaller.runa:GGGHelpDocsInstaller.installDocsHelpDocsInstaller.installDocsHelpDocsInstaller.installDocsj9MMMHelpDocsInstaller.__installQtDocHelpDocsInstaller.__installQtDocHelpDocsInstaller.__installQtDocs8SSSHelpDocsInstaller.__installEric4DocHelpDocsInstaller.__installEric4DocHelpDocsInstaller.__installEric4Doc>7AAHelpDocsInstaller (Module)HelpDocsInstaller (Module)b6KKAHelpDocsInstaller (Constructor)HelpDocsInstaller (Constructor)HelpDocsInstaller.__init__=5///HelpDocsInstallerHelpDocsInstallerHelpDocsInstaller 4Ygn47F+++HelpIndexWidgetHelpIndexWidgetHelpIndexWidgetXEAAAHelpDocumentationPage.saveHelpDocumentationPage.savetHelpDocumentationPage.saveDmmmHelpDocumentationPage.on_qt4DocDirButton_clickedHelpDocumentationPage.on_qt4DocDirButton_clickedtHelpDocumentationPage.on_qt4DocDirButton_clicked#CsssHelpDocumentationPage.on_pythonDocDirButton_clickedHelpDocumentationPage.on_pythonDocDirButton_clickedtHelpDocumentationPage.on_pythonDocDirButton_clicked#BsssHelpDocumentationPage.on_pysideDocDirButton_clickedHelpDocumentationPage.on_pysideDocDirButton_clickedtHelpDocumentationPage.on_pysideDocDirButton_clicked AqqqHelpDocumentationPage.on_pyqt4DocDirButton_clickedHelpDocumentationPage.on_pyqt4DocDirButton_clickedtHelpDocumentationPage.on_pyqt4DocDirButton_clicked#@sssHelpDocumentationPage.on_pykde4DocDirButton_clickedHelpDocumentationPage.on_pykde4DocDirButton_clickedtHelpDocumentationPage.on_pykde4DocDirButton_clicked CdUChPOOEHelpLanguagesDialog (Constructor)HelpLanguagesDialog (Constructor)HelpLanguagesDialog.__init__CO333HelpLanguagesDialogHelpLanguagesDialogHelpLanguagesDialog^NEEEHelpIndexWidget.focusInEventHelpIndexWidget.focusInEventHelpIndexWidget.focusInEvent[MCCCHelpIndexWidget.eventFilterHelpIndexWidget.eventFilterHelpIndexWidget.eventFiltergLKKKHelpIndexWidget.__filterIndicesHelpIndexWidget.__filterIndicesHelpIndexWidget.__filterIndicespKQQQHelpIndexWidget.__enableSearchEditHelpIndexWidget.__enableSearchEditHelpIndexWidget.__enableSearchEditsJSSSHelpIndexWidget.__disableSearchEditHelpIndexWidget.__disableSearchEditHelpIndexWidget.__disableSearchEdit[ICCCHelpIndexWidget.__activatedHelpIndexWidget.__activatedHelpIndexWidget.__activated:H==HelpIndexWidget (Module)HelpIndexWidget (Module)\GGG=HelpIndexWidget (Constructor)HelpIndexWidget (Constructor)HelpIndexWidget.__init__ B[X___HelpLanguagesDialog.on_downButton_clickedHelpLanguagesDialog.on_downButton_clickedHelpLanguagesDialog.on_downButton_clickedW]]]HelpLanguagesDialog.on_addButton_clickedHelpLanguagesDialog.on_addButton_clickedHelpLanguagesDialog.on_addButton_clickeddVIIIHelpLanguagesDialog.httpStringHelpLanguagesDialog.httpStringHelpLanguagesDialog.httpStringXUAAAHelpLanguagesDialog.expandHelpLanguagesDialog.expandHelpLanguagesDialog.expandTaaaHelpLanguagesDialog.defaultAcceptLanguagesHelpLanguagesDialog.defaultAcceptLanguagesHelpLanguagesDialog.defaultAcceptLanguagesXSAAAHelpLanguagesDialog.acceptHelpLanguagesDialog.acceptHelpLanguagesDialog.acceptvRUUUHelpLanguagesDialog.__currentChangedHelpLanguagesDialog.__currentChangedHelpLanguagesDialog.__currentChangedBQEEHelpLanguagesDialog (Module)HelpLanguagesDialog (Module) ZqP@ZmaOOOHelpSearchWidget.contextMenuEventHelpSearchWidget.contextMenuEventHelpSearchWidget.contextMenuEvents`SSSHelpSearchWidget.__searchingStartedHelpSearchWidget.__searchingStartedHelpSearchWidget.__searchingStartedv_UUUHelpSearchWidget.__searchingFinishedHelpSearchWidget.__searchingFinishedHelpSearchWidget.__searchingFinishedU^???HelpSearchWidget.__searchHelpSearchWidget.__searchHelpSearchWidget.__search<]??HelpSearchWidget (Module)HelpSearchWidget (Module)_\II?HelpSearchWidget (Constructor)HelpSearchWidget (Constructor)HelpSearchWidget.__init__:[---HelpSearchWidgetHelpSearchWidgetHelpSearchWidgetZ[[[HelpLanguagesDialog.on_upButton_clickedHelpLanguagesDialog.on_upButton_clickedHelpLanguagesDialog.on_upButton_clicked YcccHelpLanguagesDialog.on_removeButton_clickedHelpLanguagesDialog.on_removeButton_clickedHelpLanguagesDialog.on_removeButton_clicked G8rXGUl???HelpTocWidget.itemClickedHelpTocWidget.itemClickedHelpTocWidget.itemClickedXkAAAHelpTocWidget.focusInEventHelpTocWidget.focusInEventHelpTocWidget.focusInEvent[jCCCHelpTocWidget.expandToDepthHelpTocWidget.expandToDepthHelpTocWidget.expandToDepthUi???HelpTocWidget.eventFilterHelpTocWidget.eventFilterHelpTocWidget.eventFilterghKKKHelpTocWidget.__showContextMenuHelpTocWidget.__showContextMenuHelpTocWidget.__showContextMenuUg???HelpTocWidget.__expandTOCHelpTocWidget.__expandTOCHelpTocWidget.__expandTOC6f99HelpTocWidget (Module)HelpTocWidget (Module)VeCC9HelpTocWidget (Constructor)HelpTocWidget (Constructor)HelpTocWidget.__init__1d'''HelpTocWidgetHelpTocWidgetHelpTocWidgetdcIIIHelpSearchWidget.keyPressEventHelpSearchWidget.keyPressEventHelpSearchWidget.keyPressEvent^bEEEHelpSearchWidget.eventFilterHelpSearchWidget.eventFilterHelpSearchWidget.eventFilter D n%OvaaaHelpViewersPage.on_chmviewerButton_clickedHelpViewersPage.on_chmviewerButton_clickeduHelpViewersPage.on_chmviewerButton_clicked:u==HelpViewersPage (Module)HelpViewersPage (Module)u\tGG=HelpViewersPage (Constructor)HelpViewersPage (Constructor)uHelpViewersPage.__init__7s+++HelpViewersPageHelpViewersPageuHelpViewersPageFr555HelpTopicDialog.linkHelpTopicDialog.linkHelpTopicDialog.link:q==HelpTopicDialog (Module)HelpTopicDialog (Module)\pGG=HelpTopicDialog (Constructor)HelpTopicDialog (Constructor)HelpTopicDialog.__init__7o+++HelpTopicDialogHelpTopicDialogHelpTopicDialog[nCCCHelpTocWidget.syncToContentHelpTocWidget.syncToContentHelpTocWidget.syncToContent[mCCCHelpTocWidget.keyPressEventHelpTocWidget.keyPressEventHelpTocWidget.keyPressEvent cP5Ac~kkkHelpWebBrowserPage.on_defaultHomeButton_clickedHelpWebBrowserPage.on_defaultHomeButton_clickedvHelpWebBrowserPage.on_defaultHomeButton_clicked@}CCHelpWebBrowserPage (Module)HelpWebBrowserPage (Module)ve|MMCHelpWebBrowserPage (Constructor)HelpWebBrowserPage (Constructor)vHelpWebBrowserPage.__init__@{111HelpWebBrowserPageHelpWebBrowserPagevHelpWebBrowserPageFz555HelpViewersPage.saveHelpViewersPage.saveuHelpViewersPage.save ycccHelpViewersPage.on_webbrowserButton_clickedHelpViewersPage.on_webbrowserButton_clickeduHelpViewersPage.on_webbrowserButton_clickedxaaaHelpViewersPage.on_pdfviewerButton_clickedHelpViewersPage.on_pdfviewerButton_clickeduHelpViewersPage.on_pdfviewerButton_clicked,wyyyHelpViewersPage.on_customViewerSelectionButton_clickedHelpViewersPage.on_customViewerSelectionButton_clickeduHelpViewersPage.on_customViewerSelectionButton_clicked 4\ i4[CCCHelpWebPage.userAgentForUrlHelpWebPage.userAgentForUrlHelpWebPage.userAgentForUrlaGGGHelpWebPage.supportsExtensionHelpWebPage.supportsExtensionHelpWebPage.supportsExtensionpQQQHelpWebPage.populateNetworkRequestHelpWebPage.populateNetworkRequestHelpWebPage.populateNetworkRequest[CCCHelpWebPage.pageAttributeIdHelpWebPage.pageAttributeIdHelpWebPage.pageAttributeIdI777HelpWebPage.extensionHelpWebPage.extensionHelpWebPage.extensionsSSSHelpWebPage.acceptNavigationRequestHelpWebPage.acceptNavigationRequestHelpWebPage.acceptNavigationRequestP??5HelpWebPage (Constructor)HelpWebPage (Constructor)HelpWebPage.__init__+###HelpWebPageHelpWebPageHelpWebPageO;;;HelpWebBrowserPage.saveHelpWebBrowserPage.savevHelpWebBrowserPage.save qqqHelpWebBrowserPage.on_setCurrentPageButton_clickedHelpWebBrowserPage.on_setCurrentPageButton_clickedvHelpWebBrowserPage.on_setCurrentPageButton_clicked g[:vg]]]HelpWebSearchWidget.__completerActivatedHelpWebSearchWidget.__completerActivatedHelpWebSearchWidget.__completerActivated___HelpWebSearchWidget.__changeCurrentEngineHelpWebSearchWidget.__changeCurrentEngineHelpWebSearchWidget.__changeCurrentEngine|YYYHelpWebSearchWidget.__addEngineFromUrlHelpWebSearchWidget.__addEngineFromUrlHelpWebSearchWidget.__addEngineFromUrlBEEHelpWebSearchWidget (Module)HelpWebSearchWidget (Module)h OOEHelpWebSearchWidget (Constructor)HelpWebSearchWidget (Constructor)HelpWebSearchWidget.__init__C 333HelpWebSearchWidgetHelpWebSearchWidgetHelpWebSearchWidgetm OOOHelpWebSearchEdit.mousePressEventHelpWebSearchEdit.mousePressEventHelpWebSearchEdit.mousePressEventb KKAHelpWebSearchEdit (Constructor)HelpWebSearchEdit (Constructor)HelpWebSearchEdit.__init__= ///HelpWebSearchEditHelpWebSearchEditHelpWebSearchEdit ttbvt___HelpWebSearchWidget.__searchButtonClickedHelpWebSearchWidget.__searchButtonClickedHelpWebSearchWidget.__searchButtonClickedvUUUHelpWebSearchWidget.__newSuggestionsHelpWebSearchWidget.__newSuggestionsHelpWebSearchWidget.__newSuggestionspQQQHelpWebSearchWidget.__loadSearchesHelpWebSearchWidget.__loadSearchesHelpWebSearchWidget.__loadSearchesvUUUHelpWebSearchWidget.__getSuggestionsHelpWebSearchWidget.__getSuggestionsHelpWebSearchWidget.__getSuggestions]]]HelpWebSearchWidget.__engineImageChangedHelpWebSearchWidget.__engineImageChangedHelpWebSearchWidget.__engineImageChangedaaaHelpWebSearchWidget.__currentEngineChangedHelpWebSearchWidget.__currentEngineChangedHelpWebSearchWidget.__currentEngineChangedaaaHelpWebSearchWidget.__completerHighlightedHelpWebSearchWidget.__completerHighlightedHelpWebSearchWidget.__completerHighlighted <'Sg<(!!!!HelpWindowHelpWindowHelpWindowj MMMHelpWebSearchWidget.saveSearchesHelpWebSearchWidget.saveSearchesHelpWebSearchWidget.saveSearches|YYYHelpWebSearchWidget.preferencesChangedHelpWebSearchWidget.preferencesChangedHelpWebSearchWidget.preferencesChangedyWWWHelpWebSearchWidget.openSearchManagerHelpWebSearchWidget.openSearchManagerHelpWebSearchWidget.openSearchManagerU???HelpWebSearchWidget.clearHelpWebSearchWidget.clearHelpWebSearchWidget.clearjMMMHelpWebSearchWidget.__textEditedHelpWebSearchWidget.__textEditedHelpWebSearchWidget.__textEditedyWWWHelpWebSearchWidget.__showEnginesMenuHelpWebSearchWidget.__showEnginesMenuHelpWebSearchWidget.__showEnginesMenu]]]HelpWebSearchWidget.__setupCompleterMenuHelpWebSearchWidget.__setupCompleterMenuHelpWebSearchWidget.__setupCompleterMenugKKKHelpWebSearchWidget.__searchNowHelpWebSearchWidget.__searchNowHelpWebSearchWidget.__searchNow \}:{#g\g,KKKHelpWindow.__clearIconsDatabaseHelpWindow.__clearIconsDatabaseHelpWindow.__clearIconsDatabaseR+===HelpWindow.__bookmarkAllHelpWindow.__bookmarkAllHelpWindow.__bookmarkAllI*777HelpWindow.__backwardHelpWindow.__backwardHelpWindow.__backwardd)IIIHelpWindow.__addBookmarkFolderHelpWindow.__addBookmarkFolderHelpWindow.__addBookmarkFolderR(===HelpWindow.__addBookmarkHelpWindow.__addBookmarkHelpWindow.__addBookmarkU'???HelpWindow.__activateDockHelpWindow.__activateDockHelpWindow.__activateDocks&SSSHelpWindow.__activateCurrentBrowserHelpWindow.__activateCurrentBrowserHelpWindow.__activateCurrentBrowserF%555HelpWindow.__aboutQtHelpWindow.__aboutQtHelpWindow.__aboutQt@$111HelpWindow.__aboutHelpWindow.__aboutHelpWindow.__about0#33HelpWindow (Module)HelpWindow (Module)M"==3HelpWindow (Constructor)HelpWindow (Constructor)HelpWindow.__init__ \Y W^\=7///HelpWindow.__findHelpWindow.__findHelpWindow.__find|6YYYHelpWindow.__filterQtHelpDocumentationHelpWindow.__filterQtHelpDocumentationHelpWindow.__filterQtHelpDocumentation@5111HelpWindow.__elideHelpWindow.__elideHelpWindow.__elideX4AAAHelpWindow.__docsInstalledHelpWindow.__docsInstalledHelpWindow.__docsInstalled[3CCCHelpWindow.__currentChangedHelpWindow.__currentChangedHelpWindow.__currentChanged=2///HelpWindow.__copyHelpWindow.__copyHelpWindow.__copyj1MMMHelpWindow.__closeNetworkMonitorHelpWindow.__closeNetworkMonitorHelpWindow.__closeNetworkMonitorF0555HelpWindow.__closeAtHelpWindow.__closeAtHelpWindow.__closeAtI/777HelpWindow.__closeAllHelpWindow.__closeAllHelpWindow.__closeAll@.111HelpWindow.__closeHelpWindow.__closeHelpWindow.__closea-GGGHelpWindow.__clearPrivateDataHelpWindow.__clearPrivateDataHelpWindow.__clearPrivateData 5e<=5OB;;;HelpWindow.__initHelpDbHelpWindow.__initHelpDbHelpWindow.__initHelpDbRA===HelpWindow.__initActionsHelpWindow.__initActionsHelpWindow.__initActions^@EEEHelpWindow.__indexingStartedHelpWindow.__indexingStartedHelpWindow.__indexingStarteda?GGGHelpWindow.__indexingFinishedHelpWindow.__indexingFinishedHelpWindow.__indexingFinished=>///HelpWindow.__homeHelpWindow.__homeHelpWindow.__homeX=AAAHelpWindow.__hideTocWindowHelpWindow.__hideTocWindowHelpWindow.__hideTocWindowa<GGGHelpWindow.__hideSearchWindowHelpWindow.__hideSearchWindowHelpWindow.__hideSearchWindow^;EEEHelpWindow.__hideIndexWindowHelpWindow.__hideIndexWindowHelpWindow.__hideIndexWindowa:GGGHelpWindow.__guessUrlFromPathHelpWindow.__guessUrlFromPathHelpWindow.__guessUrlFromPathO9;;;HelpWindow.__getWebIconHelpWindow.__getWebIconHelpWindow.__getWebIconF8555HelpWindow.__forwardHelpWindow.__forwardHelpWindow.__forward G6}|KYYYHelpWindow.__manageQtHelpDocumentationHelpWindow.__manageQtHelpDocumentationHelpWindow.__manageQtHelpDocumentationvJUUUHelpWindow.__lookForNewDocumentationHelpWindow.__lookForNewDocumentationHelpWindow.__lookForNewDocumentation[ICCCHelpWindow.__linksActivatedHelpWindow.__linksActivatedHelpWindow.__linksActivatedXHAAAHelpWindow.__linkActivatedHelpWindow.__linkActivatedHelpWindow.__linkActivatedUG???HelpWindow.__isFullScreenHelpWindow.__isFullScreenHelpWindow.__isFullScreen^FEEEHelpWindow.__initWebSettingsHelpWindow.__initWebSettingsHelpWindow.__initWebSettingsUE???HelpWindow.__initToolbarsHelpWindow.__initToolbarsHelpWindow.__initToolbarsgDKKKHelpWindow.__initTabContextMenuHelpWindow.__initTabContextMenuHelpWindow.__initTabContextMenuLC999HelpWindow.__initMenusHelpWindow.__initMenusHelpWindow.__initMenus VERVFU555HelpWindow.__prevTabHelpWindow.__prevTabHelpWindow.__prevTabUT???HelpWindow.__pathSelectedHelpWindow.__pathSelectedHelpWindow.__pathSelectedXSAAAHelpWindow.__openUrlNewTabHelpWindow.__openUrlNewTabHelpWindow.__openUrlNewTabFR555HelpWindow.__openUrlHelpWindow.__openUrlHelpWindow.__openUrl[QCCCHelpWindow.__openFileNewTabHelpWindow.__openFileNewTabHelpWindow.__openFileNewTabIP777HelpWindow.__openFileHelpWindow.__openFileHelpWindow.__openFileFO555HelpWindow.__nextTabHelpWindow.__nextTabHelpWindow.__nextTabvNUUUHelpWindow.__navigationMenuTriggeredHelpWindow.__navigationMenuTriggeredHelpWindow.__navigationMenuTriggeredMaaaHelpWindow.__navigationMenuActionTriggeredHelpWindow.__navigationMenuActionTriggeredHelpWindow.__navigationMenuActionTriggeredjLMMMHelpWindow.__manageQtHelpFiltersHelpWindow.__manageQtHelpFiltersHelpWindow.__manageQtHelpFilters oY6:om_OOOHelpWindow.__setBackwardAvailableHelpWindow.__setBackwardAvailableHelpWindow.__setBackwardAvailableX^AAAHelpWindow.__searchForWordHelpWindow.__searchForWordHelpWindow.__searchForWordO];;;HelpWindow.__savePageAsHelpWindow.__savePageAsHelpWindow.__savePageAsa\GGGHelpWindow.__removeOldHistoryHelpWindow.__removeOldHistoryHelpWindow.__removeOldHistoryC[333HelpWindow.__reloadHelpWindow.__reloadHelpWindow.__reload^ZEEEHelpWindow.__privateBrowsingHelpWindow.__privateBrowsingHelpWindow.__privateBrowsing[YCCCHelpWindow.__printRequestedHelpWindow.__printRequestedHelpWindow.__printRequestedaXGGGHelpWindow.__printPreviewFileHelpWindow.__printPreviewFileHelpWindow.__printPreviewFileUW???HelpWindow.__printPreviewHelpWindow.__printPreviewHelpWindow.__printPreviewLV999HelpWindow.__printFileHelpWindow.__printFileHelpWindow.__printFile F&Ir FjhMMMHelpWindow.__showBookmarksDialogHelpWindow.__showBookmarksDialogHelpWindow.__showBookmarksDialogUg???HelpWindow.__showBackMenuHelpWindow.__showBackMenuHelpWindow.__showBackMenudfIIIHelpWindow.__showAdBlockDialogHelpWindow.__showAdBlockDialogHelpWindow.__showAdBlockDialogpeQQQHelpWindow.__showAcceptedLanguagesHelpWindow.__showAcceptedLanguagesHelpWindow.__showAcceptedLanguagesadGGGHelpWindow.__setupFilterComboHelpWindow.__setupFilterComboHelpWindow.__setupFilterComboscSSSHelpWindow.__setPathComboBackgroundHelpWindow.__setPathComboBackgroundHelpWindow.__setPathComboBackgrounddbIIIHelpWindow.__setLoadingActionsHelpWindow.__setLoadingActionsHelpWindow.__setLoadingActionsjaMMMHelpWindow.__setIconDatabasePathHelpWindow.__setIconDatabasePathHelpWindow.__setIconDatabasePathj`MMMHelpWindow.__setForwardAvailableHelpWindow.__setForwardAvailableHelpWindow.__setForwardAvailable *#3q*gqKKKHelpWindow.__showNetworkMonitorHelpWindow.__showNetworkMonitorHelpWindow.__showNetworkMonitorgpKKKHelpWindow.__showNavigationMenuHelpWindow.__showNavigationMenuHelpWindow.__showNavigationMenupoQQQHelpWindow.__showInstallationErrorHelpWindow.__showInstallationErrorHelpWindow.__showInstallationError^nEEEHelpWindow.__showIndexWindowHelpWindow.__showIndexWindowHelpWindow.__showIndexWindow^mEEEHelpWindow.__showHistoryMenuHelpWindow.__showHistoryMenuHelpWindow.__showHistoryMenu^lEEEHelpWindow.__showForwardMenuHelpWindow.__showForwardMenuHelpWindow.__showForwardMenu kcccHelpWindow.__showEnginesConfigurationDialogHelpWindow.__showEnginesConfigurationDialogHelpWindow.__showEnginesConfigurationDialogyjWWWHelpWindow.__showCookiesConfigurationHelpWindow.__showCookiesConfigurationHelpWindow.__showCookiesConfiguration^iEEEHelpWindow.__showContextMenuHelpWindow.__showContextMenuHelpWindow.__showContextMenu `5pe`j{MMMHelpWindow.__tabContextMenuCloneHelpWindow.__tabContextMenuCloneHelpWindow.__tabContextMenuCloneFz555HelpWindow.__syncTOCHelpWindow.__syncTOCHelpWindow.__syncTOCLy999HelpWindow.__switchTabHelpWindow.__switchTabHelpWindow.__switchTabRx===HelpWindow.__stopLoadingHelpWindow.__stopLoadingHelpWindow.__stopLoadingXwAAAHelpWindow.__sourceChangedHelpWindow.__sourceChangedHelpWindow.__sourceChangedXvAAAHelpWindow.__showTocWindowHelpWindow.__showTocWindowHelpWindow.__showTocWindowauGGGHelpWindow.__showSearchWindowHelpWindow.__showSearchWindowHelpWindow.__showSearchWindow^tEEEHelpWindow.__showPreferencesHelpWindow.__showPreferencesHelpWindow.__showPreferencesjsMMMHelpWindow.__showPasswordsDialogHelpWindow.__showPasswordsDialogHelpWindow.__showPasswordsDialog[rCCCHelpWindow.__showPageSourceHelpWindow.__showPageSourceHelpWindow.__showPageSource 7%67F555HelpWindow.__warningHelpWindow.__warningHelpWindow.__warning[CCCHelpWindow.__viewFullScreenHelpWindow.__viewFullScreenHelpWindow.__viewFullScreenU???HelpWindow.__titleChangedHelpWindow.__titleChangedHelpWindow.__titleChanged[[[HelpWindow.__tabContextMenuPrintPreviewHelpWindow.__tabContextMenuPrintPreviewHelpWindow.__tabContextMenuPrintPreviewjMMMHelpWindow.__tabContextMenuPrintHelpWindow.__tabContextMenuPrintHelpWindow.__tabContextMenuPrintvUUUHelpWindow.__tabContextMenuMoveRightHelpWindow.__tabContextMenuMoveRightHelpWindow.__tabContextMenuMoveRights~SSSHelpWindow.__tabContextMenuMoveLeftHelpWindow.__tabContextMenuMoveLeftHelpWindow.__tabContextMenuMoveLeft|}YYYHelpWindow.__tabContextMenuCloseOthersHelpWindow.__tabContextMenuCloseOthersHelpWindow.__tabContextMenuCloseOthersj|MMMHelpWindow.__tabContextMenuCloseHelpWindow.__tabContextMenuCloseHelpWindow.__tabContextMenuClose "Ac Uz"U???HelpWindow.currentBrowserHelpWindow.currentBrowserHelpWindow.currentBrowserF555HelpWindow.cookieJarHelpWindow.cookieJarHelpWindow.cookieJarI777HelpWindow.closeEventHelpWindow.closeEventHelpWindow.closeEventC 333HelpWindow.browsersHelpWindow.browsersHelpWindow.browsers[ CCCHelpWindow.bookmarksManagerHelpWindow.bookmarksManagerHelpWindow.bookmarksManagerU ???HelpWindow.adblockManagerHelpWindow.adblockManagerHelpWindow.adblockManagerU ???HelpWindow.__zoomTextOnlyHelpWindow.__zoomTextOnlyHelpWindow.__zoomTextOnlyL 999HelpWindow.__zoomResetHelpWindow.__zoomResetHelpWindow.__zoomResetF555HelpWindow.__zoomOutHelpWindow.__zoomOutHelpWindow.__zoomOutC333HelpWindow.__zoomInHelpWindow.__zoomInHelpWindow.__zoomInmOOOHelpWindow.__windowCloseRequestedHelpWindow.__windowCloseRequestedHelpWindow.__windowCloseRequestedL999HelpWindow.__whatsThisHelpWindow.__whatsThisHelpWindow.__whatsThis +Su&a+^EEEHelpWindow.openSearchManagerHelpWindow.openSearchManagerHelpWindow.openSearchManagerF555HelpWindow.newWindowHelpWindow.newWindowHelpWindow.newWindow=///HelpWindow.newTabHelpWindow.newTabHelpWindow.newTabI777HelpWindow.newBrowserHelpWindow.newBrowserHelpWindow.newBrowsergKKKHelpWindow.networkAccessManagerHelpWindow.networkAccessManagerHelpWindow.networkAccessManagerXAAAHelpWindow.mousePressEventHelpWindow.mousePressEventHelpWindow.mousePressEventL999HelpWindow.iconChangedHelpWindow.iconChangedHelpWindow.iconChanged7+++HelpWindow.iconHelpWindow.iconHelpWindow.iconU???HelpWindow.historyManagerHelpWindow.historyManagerHelpWindow.historyManagerI777HelpWindow.helpEngineHelpWindow.helpEngineHelpWindow.helpEngine^EEEHelpWindow.getSourceFileListHelpWindow.getSourceFileListHelpWindow.getSourceFileListI777HelpWindow.getActionsHelpWindow.getActionsHelpWindow.getActions UA`x!UM'QQHighlightingStylesHandler (Module)HighlightingStylesHandler (Module)fy&[[QHighlightingStylesHandler (Constructor)HighlightingStylesHandler (Constructor)fHighlightingStylesHandler.__init__T%???HighlightingStylesHandlerHighlightingStylesHandlerfHighlightingStylesHandler2$55Helpviewer (Package)Helpviewer (Package)JI#777HelpWindow.setLoadingHelpWindow.setLoadingHelpWindow.setLoadingd"IIIHelpWindow.searchEnginesActionHelpWindow.searchEnginesActionHelpWindow.searchEnginesAction=!///HelpWindow.searchHelpWindow.searchHelpWindow.searchO ;;;HelpWindow.resetLoadingHelpWindow.resetLoadingHelpWindow.resetLoadingL999HelpWindow.progressBarHelpWindow.progressBarHelpWindow.progressBaraGGGHelpWindow.preferencesChangedHelpWindow.preferencesChangedHelpWindow.preferencesChangedXAAAHelpWindow.passwordManagerHelpWindow.passwordManagerHelpWindow.passwordManager %0@s%K/OOHighlightingStylesWriter (Module)HighlightingStylesWriter (Module)gv.YYOHighlightingStylesWriter (Constructor)HighlightingStylesWriter (Constructor)gHighlightingStylesWriter.__init__Q-===HighlightingStylesWriterHighlightingStylesWritergHighlightingStylesWriteru,UUUHighlightingStylesHandler.startStyleHighlightingStylesHandler.startStylefHighlightingStylesHandler.startStyleu+UUUHighlightingStylesHandler.startLexerHighlightingStylesHandler.startLexerfHighlightingStylesHandler.startLexer*oooHighlightingStylesHandler.startHighlightingStylesHighlightingStylesHandler.startHighlightingStylesfHighlightingStylesHandler.startHighlightingStyles4)HighlightingStylesHandler.startDocumentHighlightingStylesHighlightingStylesHandler.startDocumentHighlightingStylesfHighlightingStylesHandler.startDocumentHighlightingStylesu(UUUHighlightingStylesHandler.getVersionHighlightingStylesHandler.getVersionfHighlightingStylesHandler.getVersion 7b%X 7[:CCCHistoryCompletionModel.dataHistoryCompletionModel.dataHistoryCompletionModel.dataq9UUKHistoryCompletionModel (Constructor)HistoryCompletionModel (Constructor)HistoryCompletionModel.__init__L8999HistoryCompletionModelHistoryCompletionModelHistoryCompletionModelX7AAAHistoryCompleter.splitPathHistoryCompleter.splitPathHistoryCompleter.splitPathd6IIIHistoryCompleter.pathFromIndexHistoryCompleter.pathFromIndexHistoryCompleter.pathFromIndexg5KKKHistoryCompleter.__updateFilterHistoryCompleter.__updateFilterHistoryCompleter.__updateFilter<4??HistoryCompleter (Module)HistoryCompleter (Module)_3II?HistoryCompleter (Constructor)HistoryCompleter (Constructor)HistoryCompleter.__init__:2---HistoryCompleterHistoryCompleterHistoryCompleter,1//History (Package)History (Package)Fl0OOOHighlightingStylesWriter.writeXMLHighlightingStylesWriter.writeXMLgHighlightingStylesWriter.writeXML !~7N!mCOOOHistoryCompletionView.resizeEventHistoryCompletionView.resizeEventHistoryCompletionView.resizeEventnBSSIHistoryCompletionView (Constructor)HistoryCompletionView (Constructor)HistoryCompletionView.__init__IA777HistoryCompletionViewHistoryCompletionViewHistoryCompletionViewg@KKKHistoryCompletionModel.setValidHistoryCompletionModel.setValidHistoryCompletionModel.setValid|?YYYHistoryCompletionModel.setSearchStringHistoryCompletionModel.setSearchStringHistoryCompletionModel.setSearchStrings>SSSHistoryCompletionModel.searchStringHistoryCompletionModel.searchStringHistoryCompletionModel.searchStringg=KKKHistoryCompletionModel.lessThanHistoryCompletionModel.lessThanHistoryCompletionModel.lessThand<IIIHistoryCompletionModel.isValidHistoryCompletionModel.isValidHistoryCompletionModel.isValid;[[[HistoryCompletionModel.filterAcceptsRowHistoryCompletionModel.filterAcceptsRowHistoryCompletionModel.filterAcceptsRow xYLbxNaaaHistoryDialog.__customContextMenuRequestedHistoryDialog.__customContextMenuRequestedHistoryDialog.__customContextMenuRequested[MCCCHistoryDialog.__copyHistoryHistoryDialog.__copyHistoryHistoryDialog.__copyHistoryUL???HistoryDialog.__activatedHistoryDialog.__activatedHistoryDialog.__activated6K99HistoryDialog (Module)HistoryDialog (Module)VJCC9HistoryDialog (Constructor)HistoryDialog (Constructor)HistoryDialog.__init__1I'''HistoryDialogHistoryDialogHistoryDialog@H111HistoryData.__lt__HistoryData.__lt__HistoryData.__lt__@G111HistoryData.__eq__HistoryData.__eq__HistoryData.__eq__PF??5HistoryData (Constructor)HistoryData (Constructor)HistoryData.__init__+E###HistoryDataHistoryDataHistoryDatavDUUUHistoryCompletionView.sizeHintForRowHistoryCompletionView.sizeHintForRowHistoryCompletionView.sizeHintForRow BGO<BeYMMCHistoryFilterModel (Constructor)HistoryFilterModel (Constructor)HistoryFilterModel.__init__@X111HistoryFilterModelHistoryFilterModelHistoryFilterModelLW999HistoryEntry.userTitleHistoryEntry.userTitleHistoryEntry.userTitleCV333HistoryEntry.__lt__HistoryEntry.__lt__HistoryEntry.__lt__CU333HistoryEntry.__eq__HistoryEntry.__eq__HistoryEntry.__eq__STAA7HistoryEntry (Constructor)HistoryEntry (Constructor)HistoryEntry.__init__.S%%%HistoryEntryHistoryEntryHistoryEntrysRSSSHistoryDialog.__openHistoryInNewTabHistoryDialog.__openHistoryInNewTabHistoryDialog.__openHistoryInNewTabQ[[[HistoryDialog.__openHistoryInCurrentTabHistoryDialog.__openHistoryInCurrentTabHistoryDialog.__openHistoryInCurrentTab[PCCCHistoryDialog.__openHistoryHistoryDialog.__openHistoryHistoryDialog.__openHistoryXOAAAHistoryDialog.__modelResetHistoryDialog.__modelResetHistoryDialog.__modelReset IGpIOb;;;HistoryFilterModel.dataHistoryFilterModel.dataHistoryFilterModel.datadaIIIHistoryFilterModel.columnCountHistoryFilterModel.columnCountHistoryFilterModel.columnCount|`YYYHistoryFilterModel.__sourceRowsRemovedHistoryFilterModel.__sourceRowsRemovedHistoryFilterModel.__sourceRowsRemoved_[[[HistoryFilterModel.__sourceRowsInsertedHistoryFilterModel.__sourceRowsInsertedHistoryFilterModel.__sourceRowsInsertedj^MMMHistoryFilterModel.__sourceResetHistoryFilterModel.__sourceResetHistoryFilterModel.__sourceReset|]YYYHistoryFilterModel.__sourceDataChangedHistoryFilterModel.__sourceDataChangedHistoryFilterModel.__sourceDataChangedU\???HistoryFilterModel.__loadHistoryFilterModel.__loadHistoryFilterModel.__loads[SSSHistoryFilterModel.__frequencyScoreHistoryFilterModel.__frequencyScoreHistoryFilterModel.__frequencyScore@ZCCHistoryFilterModel (Module)HistoryFilterModel (Module) H)a5HakGGGHistoryFilterModel.removeRowsHistoryFilterModel.removeRowsHistoryFilterModel.removeRowsj___HistoryFilterModel.recalculateFrequenciesHistoryFilterModel.recalculateFrequenciesHistoryFilterModel.recalculateFrequenciesUi???HistoryFilterModel.parentHistoryFilterModel.parentHistoryFilterModel.parentdhIIIHistoryFilterModel.mapToSourceHistoryFilterModel.mapToSourceHistoryFilterModel.mapToSourcejgMMMHistoryFilterModel.mapFromSourceHistoryFilterModel.mapFromSourceHistoryFilterModel.mapFromSourceRf===HistoryFilterModel.indexHistoryFilterModel.indexHistoryFilterModel.indexpeQQQHistoryFilterModel.historyLocationHistoryFilterModel.historyLocationHistoryFilterModel.historyLocationpdQQQHistoryFilterModel.historyContainsHistoryFilterModel.historyContainsHistoryFilterModel.historyContainsacGGGHistoryFilterModel.headerDataHistoryFilterModel.headerDataHistoryFilterModel.headerData R2d5RguKKKHistoryManager._addHistoryEntryHistoryManager._addHistoryEntryHistoryManager._addHistoryEntryvtUUUHistoryManager.__startFrequencyTimerHistoryManager.__startFrequencyTimerHistoryManager.__startFrequencyTimerssSSSHistoryManager.__refreshFrequenciesHistoryManager.__refreshFrequenciesHistoryManager.__refreshFrequenciesIr777HistoryManager.__loadHistoryManager.__loadHistoryManager.__loadjqMMMHistoryManager.__checkForExpiredHistoryManager.__checkForExpiredHistoryManager.__checkForExpired8p;;HistoryManager (Module)HistoryManager (Module)YoEE;HistoryManager (Constructor)HistoryManager (Constructor)HistoryManager.__init__4n)))HistoryManagerHistoryManagerHistoryManagermmOOOHistoryFilterModel.setSourceModelHistoryFilterModel.setSourceModelHistoryFilterModel.setSourceModel[lCCCHistoryFilterModel.rowCountHistoryFilterModel.rowCountHistoryFilterModel.rowCount H&6HgKKKHistoryManager.historyTreeModelHistoryManager.historyTreeModelHistoryManager.historyTreeModel[~CCCHistoryManager.historyModelHistoryManager.historyModelHistoryManager.historyModelm}OOOHistoryManager.historyFilterModelHistoryManager.historyFilterModelHistoryManager.historyFilterModeld|IIIHistoryManager.historyContainsHistoryManager.historyContainsHistoryManager.historyContainsL{999HistoryManager.historyHistoryManager.historyHistoryManager.history[zCCCHistoryManager.daysToExpireHistoryManager.daysToExpireHistoryManager.daysToExpireFy555HistoryManager.closeHistoryManager.closeHistoryManager.closeFx555HistoryManager.clearHistoryManager.clearHistoryManager.cleardwIIIHistoryManager.addHistoryEntryHistoryManager.addHistoryEntryHistoryManager.addHistoryEntrypvQQQHistoryManager._removeHistoryEntryHistoryManager._removeHistoryEntryHistoryManager._removeHistoryEntry 6 s}*6j MMMHistoryMenu.__clearHistoryDialogHistoryMenu.__clearHistoryDialogHistoryMenu.__clearHistoryDialogO ;;;HistoryMenu.__activatedHistoryMenu.__activatedHistoryMenu.__activated255HistoryMenu (Module)HistoryMenu (Module)P??5HistoryMenu (Constructor)HistoryMenu (Constructor)HistoryMenu.__init__+###HistoryMenuHistoryMenuHistoryMenumOOOHistoryManager.updateHistoryEntryHistoryManager.updateHistoryEntryHistoryManager.updateHistoryEntryU???HistoryManager.setHistoryHistoryManager.setHistoryHistoryManager.setHistorydIIIHistoryManager.setDaysToExpireHistoryManager.setDaysToExpireHistoryManager.setDaysToExpireC333HistoryManager.saveHistoryManager.saveHistoryManager.savemOOOHistoryManager.removeHistoryEntryHistoryManager.removeHistoryEntryHistoryManager.removeHistoryEntrymOOOHistoryManager.preferencesChangedHistoryManager.preferencesChangedHistoryManager.preferencesChanged q>H'qdIIIHistoryMenuModel.mapFromSourceHistoryMenuModel.mapFromSourceHistoryMenuModel.mapFromSourceL999HistoryMenuModel.indexHistoryMenuModel.indexHistoryMenuModel.index^EEEHistoryMenuModel.columnCountHistoryMenuModel.columnCountHistoryMenuModel.columnCount[CCCHistoryMenuModel.bumpedRowsHistoryMenuModel.bumpedRowsHistoryMenuModel.bumpedRows_II?HistoryMenuModel (Constructor)HistoryMenuModel (Constructor)HistoryMenuModel.__init__:---HistoryMenuModelHistoryMenuModelHistoryMenuModelaGGGHistoryMenu.setInitialActionsHistoryMenu.setInitialActionsHistoryMenu.setInitialActionsR ===HistoryMenu.prePopulatedHistoryMenu.prePopulatedHistoryMenu.prePopulatedU ???HistoryMenu.postPopulatedHistoryMenu.postPopulatedHistoryMenu.postPopulatedg KKKHistoryMenu.__showHistoryDialogHistoryMenu.__showHistoryDialogHistoryMenu.__showHistoryDialog NGlJNO ;;;HistoryModel.headerDataHistoryModel.headerDataHistoryModel.headerDataU???HistoryModel.entryUpdatedHistoryModel.entryUpdatedHistoryModel.entryUpdatedO;;;HistoryModel.entryAddedHistoryModel.entryAddedHistoryModel.entryAdded=///HistoryModel.dataHistoryModel.dataHistoryModel.dataR===HistoryModel.columnCountHistoryModel.columnCountHistoryModel.columnCount477HistoryModel (Module)HistoryModel (Module)SAA7HistoryModel (Constructor)HistoryModel (Constructor)HistoryModel.__init__.%%%HistoryModelHistoryModelHistoryModelU???HistoryMenuModel.rowCountHistoryMenuModel.rowCountHistoryMenuModel.rowCountO;;;HistoryMenuModel.parentHistoryMenuModel.parentHistoryMenuModel.parentU???HistoryMenuModel.mimeDataHistoryMenuModel.mimeDataHistoryMenuModel.mimeData^EEEHistoryMenuModel.mapToSourceHistoryMenuModel.mapToSourceHistoryMenuModel.mapToSource cV k,Xcv*UUUHistoryTreeModel.__sourceRowsRemovedHistoryTreeModel.__sourceRowsRemovedHistoryTreeModel.__sourceRowsRemovedy)WWWHistoryTreeModel.__sourceRowsInsertedHistoryTreeModel.__sourceRowsInsertedHistoryTreeModel.__sourceRowsInsertedd(IIIHistoryTreeModel.__sourceResetHistoryTreeModel.__sourceResetHistoryTreeModel.__sourceResetj'MMMHistoryTreeModel.__sourceDateRowHistoryTreeModel.__sourceDateRowHistoryTreeModel.__sourceDateRow<&??HistoryTreeModel (Module)HistoryTreeModel (Module)_%II?HistoryTreeModel (Constructor)HistoryTreeModel (Constructor)HistoryTreeModel.__init__:$---HistoryTreeModelHistoryTreeModelHistoryTreeModelI#777HistoryModel.rowCountHistoryModel.rowCountHistoryModel.rowCountO";;;HistoryModel.removeRowsHistoryModel.removeRowsHistoryModel.removeRowsU!???HistoryModel.historyResetHistoryModel.historyResetHistoryModel.historyReset &SE.~&U5???HistoryTreeModel.rowCountHistoryTreeModel.rowCountHistoryTreeModel.rowCount[4CCCHistoryTreeModel.removeRowsHistoryTreeModel.removeRowsHistoryTreeModel.removeRowsO3;;;HistoryTreeModel.parentHistoryTreeModel.parentHistoryTreeModel.parent^2EEEHistoryTreeModel.mapToSourceHistoryTreeModel.mapToSourceHistoryTreeModel.mapToSourced1IIIHistoryTreeModel.mapFromSourceHistoryTreeModel.mapFromSourceHistoryTreeModel.mapFromSourceL0999HistoryTreeModel.indexHistoryTreeModel.indexHistoryTreeModel.index[/CCCHistoryTreeModel.headerDataHistoryTreeModel.headerDataHistoryTreeModel.headerData^.EEEHistoryTreeModel.hasChildrenHistoryTreeModel.hasChildrenHistoryTreeModel.hasChildrenL-999HistoryTreeModel.flagsHistoryTreeModel.flagsHistoryTreeModel.flagsI,777HistoryTreeModel.dataHistoryTreeModel.dataHistoryTreeModel.data^+EEEHistoryTreeModel.columnCountHistoryTreeModel.columnCountHistoryTreeModel.columnCount 6\P?6aAGGGIconEditorGrid.__cleanChangedIconEditorGrid.__cleanChangedIconEditorGrid.__cleanChangedg@KKKIconEditorGrid.__checkClipboardIconEditorGrid.__checkClipboardIconEditorGrid.__checkClipboard8?;;IconEditorGrid (Module)IconEditorGrid (Module)Y>EE;IconEditorGrid (Constructor)IconEditorGrid (Constructor)IconEditorGrid.__init__4=)))IconEditorGridIconEditorGridIconEditorGrid2<55IconEditor (Package)IconEditor (Package)LF;555IconEditCommand.undoIconEditCommand.undoIconEditCommand.undoa:GGGIconEditCommand.setAfterImageIconEditCommand.setAfterImageIconEditCommand.setAfterImageF9555IconEditCommand.redoIconEditCommand.redoIconEditCommand.redo\8GG=IconEditCommand (Constructor)IconEditCommand (Constructor)IconEditCommand.__init__77+++IconEditCommandIconEditCommandIconEditCommandg6KKKHistoryTreeModel.setSourceModelHistoryTreeModel.setSourceModelHistoryTreeModel.setSourceModel ;| 8yXKAAAIconEditorGrid.__pixelRectIconEditorGrid.__pixelRectIconEditorGrid.__pixelRectUJ???IconEditorGrid.__isMarkedIconEditorGrid.__isMarkedIconEditorGrid.__isMarkeddIIIIIconEditorGrid.__initUndoTextsIconEditorGrid.__initUndoTextsIconEditorGrid.__initUndoTexts^HEEEIconEditorGrid.__initCursorsIconEditorGrid.__initCursorsIconEditorGrid.__initCursorsmGOOOIconEditorGrid.__imageCoordinatesIconEditorGrid.__imageCoordinatesIconEditorGrid.__imageCoordinatespFQQQIconEditorGrid.__getSelectionImageIconEditorGrid.__getSelectionImageIconEditorGrid.__getSelectionImageUE???IconEditorGrid.__drawToolIconEditorGrid.__drawToolIconEditorGrid.__drawTooldDIIIIconEditorGrid.__drawPasteRectIconEditorGrid.__drawPasteRectIconEditorGrid.__drawPasteRectXCAAAIconEditorGrid.__drawFloodIconEditorGrid.__drawFloodIconEditorGrid.__drawFloodgBKKKIconEditorGrid.__clipboardImageIconEditorGrid.__clipboardImageIconEditorGrid.__clipboardImage lGablOU;;;IconEditorGrid.editCopyIconEditorGrid.editCopyIconEditorGrid.editCopyRT===IconEditorGrid.editClearIconEditorGrid.editClearIconEditorGrid.editClearLS999IconEditorGrid.canUndoIconEditorGrid.canUndoIconEditorGrid.canUndoLR999IconEditorGrid.canRedoIconEditorGrid.canRedoIconEditorGrid.canRedoOQ;;;IconEditorGrid.canPasteIconEditorGrid.canPasteIconEditorGrid.canPaste[PCCCIconEditorGrid.__updateRectIconEditorGrid.__updateRectIconEditorGrid.__updateRectvOUUUIconEditorGrid.__updatePreviewPixmapIconEditorGrid.__updatePreviewPixmapIconEditorGrid.__updatePreviewPixmapjNMMMIconEditorGrid.__updateImageRectIconEditorGrid.__updateImageRectIconEditorGrid.__updateImageRectOM;;;IconEditorGrid.__unMarkIconEditorGrid.__unMarkIconEditorGrid.__unMarkdLIIIIconEditorGrid.__setImagePixelIconEditorGrid.__setImagePixelIconEditorGrid.__setImagePixel Pb WLPO`;;;IconEditorGrid.iconSizeIconEditorGrid.iconSizeIconEditorGrid.iconSizeR_===IconEditorGrid.iconImageIconEditorGrid.iconImageIconEditorGrid.iconImageR^===IconEditorGrid.grayScaleIconEditorGrid.grayScaleIconEditorGrid.grayScaleO];;;IconEditorGrid.editUndoIconEditorGrid.editUndoIconEditorGrid.editUndo^\EEEIconEditorGrid.editSelectAllIconEditorGrid.editSelectAllIconEditorGrid.editSelectAllU[???IconEditorGrid.editResizeIconEditorGrid.editResizeIconEditorGrid.editResizeOZ;;;IconEditorGrid.editRedoIconEditorGrid.editRedoIconEditorGrid.editRedoaYGGGIconEditorGrid.editPasteAsNewIconEditorGrid.editPasteAsNewIconEditorGrid.editPasteAsNewRX===IconEditorGrid.editPasteIconEditorGrid.editPasteIconEditorGrid.editPasteLW999IconEditorGrid.editNewIconEditorGrid.editNewIconEditorGrid.editNewLV999IconEditorGrid.editCutIconEditorGrid.editCutIconEditorGrid.editCut EPvJEOj;;;IconEditorGrid.setDirtyIconEditorGrid.setDirtyIconEditorGrid.setDirty^iEEEIconEditorGrid.previewPixmapIconEditorGrid.previewPixmapIconEditorGrid.previewPixmapOh;;;IconEditorGrid.penColorIconEditorGrid.penColorIconEditorGrid.penColorUg???IconEditorGrid.paintEventIconEditorGrid.paintEventIconEditorGrid.paintEventjfMMMIconEditorGrid.mouseReleaseEventIconEditorGrid.mouseReleaseEventIconEditorGrid.mouseReleaseEventdeIIIIconEditorGrid.mousePressEventIconEditorGrid.mousePressEventIconEditorGrid.mousePressEventadGGGIconEditorGrid.mouseMoveEventIconEditorGrid.mouseMoveEventIconEditorGrid.mouseMoveEventscSSSIconEditorGrid.isSelectionAvailableIconEditorGrid.isSelectionAvailableIconEditorGrid.isSelectionAvailable^bEEEIconEditorGrid.isGridEnabledIconEditorGrid.isGridEnabledIconEditorGrid.isGridEnabledLa999IconEditorGrid.isDirtyIconEditorGrid.isDirtyIconEditorGrid.isDirty L>3ILbuKKAIconEditorPalette (Constructor)IconEditorPalette (Constructor)IconEditorPalette.__init__=t///IconEditorPaletteIconEditorPaletteIconEditorPaletteUs???IconEditorGrid.zoomFactorIconEditorGrid.zoomFactorIconEditorGrid.zoomFactorCr333IconEditorGrid.toolIconEditorGrid.toolIconEditorGrid.toolOq;;;IconEditorGrid.sizeHintIconEditorGrid.sizeHintIconEditorGrid.sizeHintOp;;;IconEditorGrid.shutdownIconEditorGrid.shutdownIconEditorGrid.shutdown^oEEEIconEditorGrid.setZoomFactorIconEditorGrid.setZoomFactorIconEditorGrid.setZoomFactorLn999IconEditorGrid.setToolIconEditorGrid.setToolIconEditorGrid.setToolXmAAAIconEditorGrid.setPenColorIconEditorGrid.setPenColorIconEditorGrid.setPenColor[lCCCIconEditorGrid.setIconImageIconEditorGrid.setIconImageIconEditorGrid.setIconImageakGGGIconEditorGrid.setGridEnabledIconEditorGrid.setGridEnabledIconEditorGrid.setGridEnabled (Ru6(XAAAIconEditorWindow.__aboutQtIconEditorWindow.__aboutQtIconEditorWindow.__aboutQt[CCCIconEditorWindow.__aboutKdeIconEditorWindow.__aboutKdeIconEditorWindow.__aboutKdeR~===IconEditorWindow.__aboutIconEditorWindow.__aboutIconEditorWindow.__about<}??IconEditorWindow (Module)IconEditorWindow (Module)_|II?IconEditorWindow (Constructor)IconEditorWindow (Constructor)IconEditorWindow.__init__:{---IconEditorWindowIconEditorWindowIconEditorWindowjzMMMIconEditorPalette.previewChangedIconEditorPalette.previewChangedIconEditorPalette.previewChangeddyIIIIconEditorPalette.colorChangedIconEditorPalette.colorChangedIconEditorPalette.colorChangedgxKKKIconEditorPalette.__selectColorIconEditorPalette.__selectColorIconEditorPalette.__selectColorjwMMMIconEditorPalette.__alphaChangedIconEditorPalette.__alphaChangedIconEditorPalette.__alphaChanged>vAAIconEditorPalette (Module)IconEditorPalette (Module) 8LrpQQQIconEditorWindow.__initFileFiltersIconEditorWindow.__initFileFiltersIconEditorWindow.__initFileFilterspQQQIconEditorWindow.__initFileActionsIconEditorWindow.__initFileActionsIconEditorWindow.__initFileActionspQQQIconEditorWindow.__initEditActionsIconEditorWindow.__initEditActionsIconEditorWindow.__initEditActionsdIIIIconEditorWindow.__initActionsIconEditorWindow.__initActionsIconEditorWindow.__initActionspQQQIconEditorWindow.__createStatusBarIconEditorWindow.__createStatusBarIconEditorWindow.__createStatusBarvUUUIconEditorWindow.__createPaletteDockIconEditorWindow.__createPaletteDockIconEditorWindow.__createPaletteDock[CCCIconEditorWindow.__closeAllIconEditorWindow.__closeAllIconEditorWindow.__closeAllgKKKIconEditorWindow.__checkActionsIconEditorWindow.__checkActionsIconEditorWindow.__checkActions 4,Lo4XAAAIconEditorWindow.__newIconIconEditorWindow.__newIconIconEditorWindow.__newIcon|YYYIconEditorWindow.__modificationChangedIconEditorWindow.__modificationChangedIconEditorWindow.__modificationChanged^EEEIconEditorWindow.__maybeSaveIconEditorWindow.__maybeSaveIconEditorWindow.__maybeSavegKKKIconEditorWindow.__loadIconFileIconEditorWindow.__loadIconFileIconEditorWindow.__loadIconFilep QQQIconEditorWindow.__initViewActionsIconEditorWindow.__initViewActionsIconEditorWindow.__initViewActionss SSSIconEditorWindow.__initToolsActionsIconEditorWindow.__initToolsActionsIconEditorWindow.__initToolsActionsg KKKIconEditorWindow.__initToolbarsIconEditorWindow.__initToolbarsIconEditorWindow.__initToolbars^ EEEIconEditorWindow.__initMenusIconEditorWindow.__initMenusIconEditorWindow.__initMenusp QQQIconEditorWindow.__initHelpActionsIconEditorWindow.__initHelpActionsIconEditorWindow.__initHelpActions gA;gaGGGIconEditorWindow.__updateSizeIconEditorWindow.__updateSizeIconEditorWindow.__updateSizemOOOIconEditorWindow.__updatePositionIconEditorWindow.__updatePositionIconEditorWindow.__updatePositiongKKKIconEditorWindow.__strippedNameIconEditorWindow.__strippedNameIconEditorWindow.__strippedNamemOOOIconEditorWindow.__setCurrentFileIconEditorWindow.__setCurrentFileIconEditorWindow.__setCurrentFilegKKKIconEditorWindow.__saveIconFileIconEditorWindow.__saveIconFileIconEditorWindow.__saveIconFileaGGGIconEditorWindow.__saveIconAsIconEditorWindow.__saveIconAsIconEditorWindow.__saveIconAs[CCCIconEditorWindow.__saveIconIconEditorWindow.__saveIconIconEditorWindow.__saveIcon[CCCIconEditorWindow.__openIconIconEditorWindow.__openIconIconEditorWindow.__openIcon^EEEIconEditorWindow.__newWindowIconEditorWindow.__newWindowIconEditorWindow.__newWindow #;6w@Z#4&)))IconZoomDialogIconZoomDialogIconZoomDialogL%999IconSizeDialog.getDataIconSizeDialog.getDataIconSizeDialog.getData8$;;IconSizeDialog (Module)IconSizeDialog (Module)Y#EE;IconSizeDialog (Constructor)IconSizeDialog (Constructor)IconSizeDialog.__init__4")))IconSizeDialogIconSizeDialogIconSizeDialog[!CCCIconEditorWindow.closeEventIconEditorWindow.closeEventIconEditorWindow.closeEvent^ EEEIconEditorWindow.__zoomResetIconEditorWindow.__zoomResetIconEditorWindow.__zoomResetXAAAIconEditorWindow.__zoomOutIconEditorWindow.__zoomOutIconEditorWindow.__zoomOutU???IconEditorWindow.__zoomInIconEditorWindow.__zoomInIconEditorWindow.__zoomInO;;;IconEditorWindow.__zoomIconEditorWindow.__zoomIconEditorWindow.__zoom^EEEIconEditorWindow.__whatsThisIconEditorWindow.__whatsThisIconEditorWindow.__whatsThisaGGGIconEditorWindow.__updateZoomIconEditorWindow.__updateZoomIconEditorWindow.__updateZoom Kib;K0]]]IconsPage.on_iconDirectoryButton_clickedIconsPage.on_iconDirectoryButton_clickedwIconsPage.on_iconDirectoryButton_clickedg/KKKIconsPage.on_downButton_clickedIconsPage.on_downButton_clickedwIconsPage.on_downButton_clicked.iiiIconsPage.on_deleteIconDirectoryButton_clickedIconsPage.on_deleteIconDirectoryButton_clickedwIconsPage.on_deleteIconDirectoryButton_clicked -cccIconsPage.on_addIconDirectoryButton_clickedIconsPage.on_addIconDirectoryButton_clickedwIconsPage.on_addIconDirectoryButton_clicked.,11IconsPage (Module)IconsPage (Module)wJ+;;1IconsPage (Constructor)IconsPage (Constructor)wIconsPage.__init__%*IconsPageIconsPagewIconsPage^)EEEIconZoomDialog.getZoomFactorIconZoomDialog.getZoomFactorIconZoomDialog.getZoomFactor8(;;IconZoomDialog (Module)IconZoomDialog (Module)Y'EE;IconZoomDialog (Constructor)IconZoomDialog (Constructor)IconZoomDialog.__init__ At]AY:EE;ImportsDiagram (Constructor)ImportsDiagram (Constructor)ImportsDiagram.__init__49)))ImportsDiagramImportsDiagramImportsDiagram@8CCIconsPreviewDialog (Module)IconsPreviewDialog (Module)xe7MMCIconsPreviewDialog (Constructor)IconsPreviewDialog (Constructor)xIconsPreviewDialog.__init__@6111IconsPreviewDialogIconsPreviewDialogxIconsPreviewDialog45)))IconsPage.saveIconsPage.savewIconsPage.savea4GGGIconsPage.on_upButton_clickedIconsPage.on_upButton_clickedwIconsPage.on_upButton_clickedv3UUUIconsPage.on_showIconsButton_clickedIconsPage.on_showIconsButton_clickedwIconsPage.on_showIconsButton_clicked2mmmIconsPage.on_iconDirectoryList_currentRowChangedIconsPage.on_iconDirectoryList_currentRowChangedwIconsPage.on_iconDirectoryList_currentRowChanged1aaaIconsPage.on_iconDirectoryEdit_textChangedIconsPage.on_iconDirectoryEdit_textChangedwIconsPage.on_iconDirectoryEdit_textChanged `j R`ZECCCIndexGenerator.__writeIndexIndexGenerator.__writeIndexGIndexGenerator.__writeIndex7D;;IndexGenerator (Module)IndexGenerator (Module)GXCEE;IndexGenerator (Constructor)IndexGenerator (Constructor)GIndexGenerator.__init__3B)))IndexGeneratorIndexGeneratorGIndexGeneratorCA333ImportsDiagram.showImportsDiagram.showImportsDiagram.showO@;;;ImportsDiagram.relayoutImportsDiagram.relayoutImportsDiagram.relayouts?SSSImportsDiagram.__createAssociationsImportsDiagram.__createAssociationsImportsDiagram.__createAssociationsm>OOOImportsDiagram.__buildModulesDictImportsDiagram.__buildModulesDictImportsDiagram.__buildModulesDicta=GGGImportsDiagram.__buildImportsImportsDiagram.__buildImportsImportsDiagram.__buildImportsX<AAAImportsDiagram.__addModuleImportsDiagram.__addModuleImportsDiagram.__addModule8;;;ImportsDiagram (Module)ImportsDiagram (Module) dR+C dXPAAAInputDialogWizard.activateInputDialogWizard.activateInputDialogWizard.activate^OEEEInputDialogWizard.__initMenuInputDialogWizard.__initMenuInputDialogWizard.__initMenudNIIIInputDialogWizard.__initActionInputDialogWizard.__initActionInputDialogWizard.__initActionXMAAAInputDialogWizard.__handleInputDialogWizard.__handleInputDialogWizard.__handle^LEEEInputDialogWizard.__callFormInputDialogWizard.__callFormInputDialogWizard.__callForm@KCCInputDialogWizard (Package)InputDialogWizard (Package)dbJKKAInputDialogWizard (Constructor)InputDialogWizard (Constructor)InputDialogWizard.__init__=I///InputDialogWizardInputDialogWizardInputDialogWizard$H''Info (Module)Info (Module)ZGCCCIndexGenerator.writeIndicesIndexGenerator.writeIndicesGIndexGenerator.writeIndicesNF;;;IndexGenerator.rememberIndexGenerator.rememberGIndexGenerator.remember M&XeeeInputDialogWizardDialog.on_buttonBox_clickedInputDialogWizardDialog.on_buttonBox_clickedQInputDialogWizardDialog.on_buttonBox_clickedW]]]InputDialogWizardDialog.on_bTest_clickedInputDialogWizardDialog.on_bTest_clickedQInputDialogWizardDialog.on_bTest_clickedgVKKKInputDialogWizardDialog.getCodeInputDialogWizardDialog.getCodeQInputDialogWizardDialog.getCodepUQQQInputDialogWizardDialog.__getCode4InputDialogWizardDialog.__getCode4QInputDialogWizardDialog.__getCode4JTMMInputDialogWizardDialog (Module)InputDialogWizardDialog (Module)QtSWWMInputDialogWizardDialog (Constructor)InputDialogWizardDialog (Constructor)QInputDialogWizardDialog.__init__OR;;;InputDialogWizardDialogInputDialogWizardDialogQInputDialogWizardDialog^QEEEInputDialogWizard.deactivateInputDialogWizard.deactivateInputDialogWizard.deactivate Dz+YRDycWWWInterfacePage.__populateLanguageComboInterfacePage.__populateLanguageComboyInterfacePage.__populateLanguageCombo6b99InterfacePage (Module)InterfacePage (Module)yVaCC9InterfacePage (Constructor)InterfacePage (Constructor)yInterfacePage.__init__1`'''InterfacePageInterfacePageyInterfacePageJ_;;1Interface (Constructor)Interface (Constructor) Interface.__init__%^InterfaceInterface Interface[]CCCInsertBookmarksCommand.undoInsertBookmarksCommand.undoInsertBookmarksCommand.undo[\CCCInsertBookmarksCommand.redoInsertBookmarksCommand.redoInsertBookmarksCommand.redoq[UUKInsertBookmarksCommand (Constructor)InsertBookmarksCommand (Constructor)InsertBookmarksCommand.__init__LZ999InsertBookmarksCommandInsertBookmarksCommandInsertBookmarksCommandY]]]InputDialogWizardDialog.on_rItem_toggledInputDialogWizardDialog.on_rItem_toggledQInputDialogWizardDialog.on_rItem_toggled mfQmskSSSJavaScriptEricObject.providerStringJavaScriptEricObject.providerStringJavaScriptEricObject.providerStringkjQQGJavaScriptEricObject (Constructor)JavaScriptEricObject (Constructor)JavaScriptEricObject.__init__Fi555JavaScriptEricObjectJavaScriptEricObjectJavaScriptEricObject@h111InterfacePage.saveInterfacePage.saveyInterfacePage.saveg___InterfacePage.on_styleSheetButton_clickedInterfacePage.on_styleSheetButton_clickedyInterfacePage.on_styleSheetButton_clickedfkkkInterfacePage.on_stderrTextColourButton_clickedInterfacePage.on_stderrTextColourButton_clickedyInterfacePage.on_stderrTextColourButton_clickedeaaaInterfacePage.on_resetLayoutButton_clickedInterfacePage.on_resetLayoutButton_clickedyInterfacePage.on_resetLayoutButton_clickedpdQQQInterfacePage.__populateStyleComboInterfacePage.__populateStyleComboyInterfacePage.__populateStyleCombo z2c^%zeuMMCKQApplicationMixin (Constructor)KQApplicationMixin (Constructor)KQApplicationMixin.__init__@t111KQApplicationMixinKQApplicationMixinKQApplicationMixin6s99KQApplication (Module)KQApplication (Module)1r'''KQApplicationKQApplicationKQApplicationBqEEJavaScriptResources (Module)JavaScriptResources (Module)paaaJavaScriptExternalObject.AddSearchProviderJavaScriptExternalObject.AddSearchProviderJavaScriptExternalObject.AddSearchProviderwoYYOJavaScriptExternalObject (Constructor)JavaScriptExternalObject (Constructor)JavaScriptExternalObject.__init__Rn===JavaScriptExternalObjectJavaScriptExternalObjectJavaScriptExternalObjectdmIIIJavaScriptEricObject.translateJavaScriptEricObject.translateJavaScriptEricObject.translatedlIIIJavaScriptEricObject.searchUrlJavaScriptEricObject.searchUrlJavaScriptEricObject.searchUrl O2@ZO}___KQApplicationMixin.unregisterPluginObjectKQApplicationMixin.unregisterPluginObjectKQApplicationMixin.unregisterPluginObject|[[[KQApplicationMixin.registerPluginObjectKQApplicationMixin.registerPluginObjectKQApplicationMixin.registerPluginObjectm{OOOKQApplicationMixin.registerObjectKQApplicationMixin.registerObjectKQApplicationMixin.registerObjectszSSSKQApplicationMixin.getPluginObjectsKQApplicationMixin.getPluginObjectsKQApplicationMixin.getPluginObjects|yYYYKQApplicationMixin.getPluginObjectTypeKQApplicationMixin.getPluginObjectTypeKQApplicationMixin.getPluginObjectTypepxQQQKQApplicationMixin.getPluginObjectKQApplicationMixin.getPluginObjectKQApplicationMixin.getPluginObject^wEEEKQApplicationMixin.getObjectKQApplicationMixin.getObjectKQApplicationMixin.getObjectjvMMMKQApplicationMixin._localeStringKQApplicationMixin._localeStringKQApplicationMixin._localeString WY JGW&))Lexer (Module)Lexer (Module)>33)Lexer (Constructor)Lexer (Constructor)Lexer.__init__ LexerLexerLexer( ++KdeQt (Package)KdeQt (Package)M< ??KQProgressDialog (Module)KQProgressDialog (Module): ---KQProgressDialogKQProgressDialogKQProgressDialog. 11KQPrinter (Module)KQPrinter (Module)%KQPrinterKQPrinterKQPrinter699KQPrintDialog (Module)KQPrintDialog (Module)1'''KQPrintDialogKQPrintDialogKQPrintDialog477KQMessageBox (Module)KQMessageBox (Module)4)))KQMainWindow_1KQMainWindow_1KQMainWindow_1477KQMainWindow (Module)KQMainWindow (Module).%%%KQMainWindowKQMainWindowKQMainWindow699KQInputDialog (Module)KQInputDialog (Module)477KQFontDialog (Module)KQFontDialog (Module)477KQFileDialog (Module)KQFileDialog (Module)6~99KQColorDialog (Module)KQColorDialog (Module) <DlN<I777Lexer.smartIndentLineLexer.smartIndentLineLexer.smartIndentLine4)))Lexer.keywordsLexer.keywordsLexer.keywordsC333Lexer.isStringStyleLexer.isStringStyleLexer.isStringStyleF555Lexer.isCommentStyleLexer.isCommentStyleLexer.isCommentStyleF555Lexer.initPropertiesLexer.initPropertiesLexer.initPropertiesF555Lexer.hasSmartIndentLexer.hasSmartIndentLexer.hasSmartIndent:---Lexer.commentStrLexer.commentStrLexer.commentStrL999Lexer.canStreamCommentLexer.canStreamCommentLexer.canStreamCommentC333Lexer.canBoxCommentLexer.canBoxCommentLexer.canBoxCommentI777Lexer.canBlockCommentLexer.canBlockCommentLexer.canBlockCommentC333Lexer.boxCommentStrLexer.boxCommentStrLexer.boxCommentStrpQQQLexer.autoCompletionWordSeparatorsLexer.autoCompletionWordSeparatorsLexer.autoCompletionWordSeparatorsF555Lexer.alwaysKeepTabsLexer.alwaysKeepTabsLexer.alwaysKeepTabs 8VH8G$  LexerAssociationDialog.on_editorLexerCombo_currentIndexChangedLexerAssociationDialog.on_editorLexerCombo_currentIndexChangedLexerAssociationDialog.on_editorLexerCombo_currentIndexChanged##sssLexerAssociationDialog.on_deleteLexerButton_clickedLexerAssociationDialog.on_deleteLexerButton_clickedLexerAssociationDialog.on_deleteLexerButton_clicked"mmmLexerAssociationDialog.on_addLexerButton_clickedLexerAssociationDialog.on_addLexerButton_clickedLexerAssociationDialog.on_addLexerButton_clickedH!KKLexerAssociationDialog (Module)LexerAssociationDialog (Module)q UUKLexerAssociationDialog (Constructor)LexerAssociationDialog (Constructor)LexerAssociationDialog.__init__L999LexerAssociationDialogLexerAssociationDialogLexerAssociationDialogL999Lexer.streamCommentStrLexer.streamCommentStrLexer.streamCommentStrXAAALexer.smartIndentSelectionLexer.smartIndentSelectionLexer.smartIndentSelection 0M*,0O.;;;LexerBash.isStringStyleLexerBash.isStringStyleLexerBash.isStringStyleR-===LexerBash.isCommentStyleLexerBash.isCommentStyleLexerBash.isCommentStyleR,===LexerBash.initPropertiesLexerBash.initPropertiesLexerBash.initPropertiesU+???LexerBash.defaultKeywordsLexerBash.defaultKeywordsLexerBash.defaultKeywords.*11LexerBash (Module)LexerBash (Module)J);;1LexerBash (Constructor)LexerBash (Constructor)LexerBash.__init__%(LexerBashLexerBashLexerBashs'SSSLexerAssociationDialog.transferDataLexerAssociationDialog.transferDataLexerAssociationDialog.transferData)&wwwLexerAssociationDialog.on_editorLexerList_itemClickedLexerAssociationDialog.on_editorLexerList_itemClickedLexerAssociationDialog.on_editorLexerList_itemClicked/%{{{LexerAssociationDialog.on_editorLexerList_itemActivatedLexerAssociationDialog.on_editorLexerList_itemActivatedLexerAssociationDialog.on_editorLexerList_itemActivated <RJA<R;===LexerCMake.isStringStyleLexerCMake.isStringStyleLexerCMake.isStringStyleU:???LexerCMake.isCommentStyleLexerCMake.isCommentStyleLexerCMake.isCommentStyleU9???LexerCMake.initPropertiesLexerCMake.initPropertiesLexerCMake.initPropertiesX8AAALexerCMake.defaultKeywordsLexerCMake.defaultKeywordsLexerCMake.defaultKeywords0733LexerCMake (Module)LexerCMake (Module)M6==3LexerCMake (Constructor)LexerCMake (Constructor)LexerCMake.__init__(5!!!LexerCMakeLexerCMakeLexerCMakeR4===LexerBatch.isStringStyleLexerBatch.isStringStyleLexerBatch.isStringStyleU3???LexerBatch.isCommentStyleLexerBatch.isCommentStyleLexerBatch.isCommentStyleX2AAALexerBatch.defaultKeywordsLexerBatch.defaultKeywordsLexerBatch.defaultKeywords0133LexerBatch (Module)LexerBatch (Module)M0==3LexerBatch (Constructor)LexerBatch (Constructor)LexerBatch.__init__(/!!!LexerBatchLexerBatchLexerBatch Yb?y/YOH;;;LexerCSS.initPropertiesLexerCSS.initPropertiesLexerCSS.initPropertiesRG===LexerCSS.defaultKeywordsLexerCSS.defaultKeywordsLexerCSS.defaultKeywords,F//LexerCSS (Module)LexerCSS (Module)GE99/LexerCSS (Constructor)LexerCSS (Constructor)LexerCSS.__init__"DLexerCSSLexerCSSLexerCSSLC999LexerCPP.isStringStyleLexerCPP.isStringStyleLexerCPP.isStringStyleOB;;;LexerCPP.isCommentStyleLexerCPP.isCommentStyleLexerCPP.isCommentStyleOA;;;LexerCPP.initPropertiesLexerCPP.initPropertiesLexerCPP.initPropertiesR@===LexerCPP.defaultKeywordsLexerCPP.defaultKeywordsLexerCPP.defaultKeywordsy?WWWLexerCPP.autoCompletionWordSeparatorsLexerCPP.autoCompletionWordSeparatorsLexerCPP.autoCompletionWordSeparators,>//LexerCPP (Module)LexerCPP (Module)G=99/LexerCPP (Constructor)LexerCPP (Constructor)LexerCPP.__init__"<LexerCPPLexerCPPLexerCPP o_1K=o8T;;LexerContainer (Module)LexerContainer (Module)YSEE;LexerContainer (Constructor)LexerContainer (Constructor)LexerContainer.__init__4R)))LexerContainerLexerContainerLexerContainerUQ???LexerCSharp.isStringStyleLexerCSharp.isStringStyleLexerCSharp.isStringStyleXPAAALexerCSharp.isCommentStyleLexerCSharp.isCommentStyleLexerCSharp.isCommentStyleXOAAALexerCSharp.initPropertiesLexerCSharp.initPropertiesLexerCSharp.initProperties[NCCCLexerCSharp.defaultKeywordsLexerCSharp.defaultKeywordsLexerCSharp.defaultKeywords2M55LexerCSharp (Module)LexerCSharp (Module)PL??5LexerCSharp (Constructor)LexerCSharp (Constructor)LexerCSharp.__init__+K###LexerCSharpLexerCSharpLexerCSharpLJ999LexerCSS.isStringStyleLexerCSS.isStringStyleLexerCSS.isStringStyleOI;;;LexerCSS.isCommentStyleLexerCSS.isCommentStyleLexerCSS.isCommentStyle ]SQn]I`777LexerD.initPropertiesLexerD.initPropertiesLexerD.initPropertiesL_999LexerD.defaultKeywordsLexerD.defaultKeywordsLexerD.defaultKeywordss^SSSLexerD.autoCompletionWordSeparatorsLexerD.autoCompletionWordSeparatorsLexerD.autoCompletionWordSeparators(]++LexerD (Module)LexerD (Module)A\55+LexerD (Constructor)LexerD (Constructor)LexerD.__init__[LexerDLexerDLexerDRZ===LexerContainer.styleTextLexerContainer.styleTextLexerContainer.styleTextdYIIILexerContainer.styleBitsNeededLexerContainer.styleBitsNeededLexerContainer.styleBitsNeededFX555LexerContainer.lexerLexerContainer.lexerLexerContainer.lexerOW;;;LexerContainer.languageLexerContainer.languageLexerContainer.languageOV;;;LexerContainer.keywordsLexerContainer.keywordsLexerContainer.keywordsXUAAALexerContainer.descriptionLexerContainer.descriptionLexerContainer.description kCm?l___LexerFortran.autoCompletionWordSeparatorsLexerFortran.autoCompletionWordSeparatorsLexerFortran.autoCompletionWordSeparators4k77LexerFortran (Module)LexerFortran (Module)SjAA7LexerFortran (Constructor)LexerFortran (Constructor)LexerFortran.__init__.i%%%LexerFortranLexerFortranLexerFortranOh;;;LexerDiff.isStringStyleLexerDiff.isStringStyleLexerDiff.isStringStyleRg===LexerDiff.isCommentStyleLexerDiff.isCommentStyleLexerDiff.isCommentStyleUf???LexerDiff.defaultKeywordsLexerDiff.defaultKeywordsLexerDiff.defaultKeywords.e11LexerDiff (Module)LexerDiff (Module)Jd;;1LexerDiff (Constructor)LexerDiff (Constructor)LexerDiff.__init__%cLexerDiffLexerDiffLexerDiffFb555LexerD.isStringStyleLexerD.isStringStyleLexerD.isStringStyleIa777LexerD.isCommentStyleLexerD.isCommentStyleLexerD.isCommentStyle `AQ+`avGGGLexerFortran77.initPropertiesLexerFortran77.initPropertiesLexerFortran77.initPropertiesduIIILexerFortran77.defaultKeywordsLexerFortran77.defaultKeywordsLexerFortran77.defaultKeywords tcccLexerFortran77.autoCompletionWordSeparatorsLexerFortran77.autoCompletionWordSeparatorsLexerFortran77.autoCompletionWordSeparators8s;;LexerFortran77 (Module)LexerFortran77 (Module)YrEE;LexerFortran77 (Constructor)LexerFortran77 (Constructor)LexerFortran77.__init__4q)))LexerFortran77LexerFortran77LexerFortran77XpAAALexerFortran.isStringStyleLexerFortran.isStringStyleLexerFortran.isStringStyle[oCCCLexerFortran.isCommentStyleLexerFortran.isCommentStyleLexerFortran.isCommentStyle[nCCCLexerFortran.initPropertiesLexerFortran.initPropertiesLexerFortran.initProperties^mEEELexerFortran.defaultKeywordsLexerFortran.defaultKeywordsLexerFortran.defaultKeywords N;=ANR===LexerIDL.defaultKeywordsLexerIDL.defaultKeywordsLexerIDL.defaultKeywords,//LexerIDL (Module)LexerIDL (Module)G99/LexerIDL (Constructor)LexerIDL (Constructor)LexerIDL.__init__"LexerIDLLexerIDLLexerIDLO;;;LexerHTML.isStringStyleLexerHTML.isStringStyleLexerHTML.isStringStyleR~===LexerHTML.isCommentStyleLexerHTML.isCommentStyleLexerHTML.isCommentStyleR}===LexerHTML.initPropertiesLexerHTML.initPropertiesLexerHTML.initPropertiesU|???LexerHTML.defaultKeywordsLexerHTML.defaultKeywordsLexerHTML.defaultKeywords.{11LexerHTML (Module)LexerHTML (Module)Jz;;1LexerHTML (Constructor)LexerHTML (Constructor)LexerHTML.__init__%yLexerHTMLLexerHTMLLexerHTML^xEEELexerFortran77.isStringStyleLexerFortran77.isStringStyleLexerFortran77.isStringStyleawGGGLexerFortran77.isCommentStyleLexerFortran77.isCommentStyleLexerFortran77.isCommentStyle =\ gez=:==LexerJavaScript (Module)LexerJavaScript (Module)\GG=LexerJavaScript (Constructor)LexerJavaScript (Constructor)LexerJavaScript.__init__7+++LexerJavaScriptLexerJavaScriptLexerJavaScriptO ;;;LexerJava.isStringStyleLexerJava.isStringStyleLexerJava.isStringStyleR ===LexerJava.isCommentStyleLexerJava.isCommentStyleLexerJava.isCommentStyleR ===LexerJava.initPropertiesLexerJava.initPropertiesLexerJava.initPropertiesU ???LexerJava.defaultKeywordsLexerJava.defaultKeywordsLexerJava.defaultKeywords. 11LexerJava (Module)LexerJava (Module)J;;1LexerJava (Constructor)LexerJava (Constructor)LexerJava.__init__%LexerJavaLexerJavaLexerJavaL999LexerIDL.isStringStyleLexerIDL.isStringStyleLexerIDL.isStringStyleO;;;LexerIDL.isCommentStyleLexerIDL.isCommentStyleLexerIDL.isCommentStyleO;;;LexerIDL.initPropertiesLexerIDL.initPropertiesLexerIDL.initProperties Q/d?JQO;;;LexerLua.isCommentStyleLexerLua.isCommentStyleLexerLua.isCommentStyleO;;;LexerLua.initPropertiesLexerLua.initPropertiesLexerLua.initPropertiesR===LexerLua.defaultKeywordsLexerLua.defaultKeywordsLexerLua.defaultKeywordsyWWWLexerLua.autoCompletionWordSeparatorsLexerLua.autoCompletionWordSeparatorsLexerLua.autoCompletionWordSeparators,//LexerLua (Module)LexerLua (Module)G99/LexerLua (Constructor)LexerLua (Constructor)LexerLua.__init__"LexerLuaLexerLuaLexerLuaaGGGLexerJavaScript.isStringStyleLexerJavaScript.isStringStyleLexerJavaScript.isStringStyledIIILexerJavaScript.isCommentStyleLexerJavaScript.isCommentStyleLexerJavaScript.isCommentStyledIIILexerJavaScript.initPropertiesLexerJavaScript.initPropertiesLexerJavaScript.initPropertiesgKKKLexerJavaScript.defaultKeywordsLexerJavaScript.defaultKeywordsLexerJavaScript.defaultKeywords Y}$&GYX'AAALexerMatlab.isCommentStyleLexerMatlab.isCommentStyleLexerMatlab.isCommentStyle[&CCCLexerMatlab.defaultKeywordsLexerMatlab.defaultKeywordsLexerMatlab.defaultKeywords2%55LexerMatlab (Module)LexerMatlab (Module)P$??5LexerMatlab (Constructor)LexerMatlab (Constructor)LexerMatlab.__init__+####LexerMatlabLexerMatlabLexerMatlab["CCCLexerMakefile.isStringStyleLexerMakefile.isStringStyleLexerMakefile.isStringStyle^!EEELexerMakefile.isCommentStyleLexerMakefile.isCommentStyleLexerMakefile.isCommentStylea GGGLexerMakefile.defaultKeywordsLexerMakefile.defaultKeywordsLexerMakefile.defaultKeywords699LexerMakefile (Module)LexerMakefile (Module)VCC9LexerMakefile (Constructor)LexerMakefile (Constructor)LexerMakefile.__init__1'''LexerMakefileLexerMakefileLexerMakefileL999LexerLua.isStringStyleLexerLua.isStringStyleLexerLua.isStringStyle Jz'9rCJO4;;;LexerPOV.isCommentStyleLexerPOV.isCommentStyleLexerPOV.isCommentStyleO3;;;LexerPOV.initPropertiesLexerPOV.initPropertiesLexerPOV.initPropertiesR2===LexerPOV.defaultKeywordsLexerPOV.defaultKeywordsLexerPOV.defaultKeywords,1//LexerPOV (Module)LexerPOV (Module)G099/LexerPOV (Constructor)LexerPOV (Constructor)LexerPOV.__init__"/LexerPOVLexerPOVLexerPOVU.???LexerOctave.isStringStyleLexerOctave.isStringStyleLexerOctave.isStringStyleX-AAALexerOctave.isCommentStyleLexerOctave.isCommentStyleLexerOctave.isCommentStyle[,CCCLexerOctave.defaultKeywordsLexerOctave.defaultKeywordsLexerOctave.defaultKeywords2+55LexerOctave (Module)LexerOctave (Module)P*??5LexerOctave (Constructor)LexerOctave (Constructor)LexerOctave.__init__+)###LexerOctaveLexerOctaveLexerOctaveU(???LexerMatlab.isStringStyleLexerMatlab.isStringStyleLexerMatlab.isStringStyle c0ua c.@11LexerPerl (Module)LexerPerl (Module)J?;;1LexerPerl (Constructor)LexerPerl (Constructor)LexerPerl.__init__%>LexerPerlLexerPerlLexerPerlU=???LexerPascal.isStringStyleLexerPascal.isStringStyleLexerPascal.isStringStyleX<AAALexerPascal.isCommentStyleLexerPascal.isCommentStyleLexerPascal.isCommentStyleX;AAALexerPascal.initPropertiesLexerPascal.initPropertiesLexerPascal.initProperties[:CCCLexerPascal.defaultKeywordsLexerPascal.defaultKeywordsLexerPascal.defaultKeywords9]]]LexerPascal.autoCompletionWordSeparatorsLexerPascal.autoCompletionWordSeparatorsLexerPascal.autoCompletionWordSeparators2855LexerPascal (Module)LexerPascal (Module)P7??5LexerPascal (Constructor)LexerPascal (Constructor)LexerPascal.__init__+6###LexerPascalLexerPascalLexerPascalL5999LexerPOV.isStringStyleLexerPOV.isStringStyleLexerPOV.isStringStyle )-WdKIIILexerPostScript.isCommentStyleLexerPostScript.isCommentStyleLexerPostScript.isCommentStyledJIIILexerPostScript.initPropertiesLexerPostScript.initPropertiesLexerPostScript.initPropertiesgIKKKLexerPostScript.defaultKeywordsLexerPostScript.defaultKeywordsLexerPostScript.defaultKeywords:H==LexerPostScript (Module)LexerPostScript (Module)\GGG=LexerPostScript (Constructor)LexerPostScript (Constructor)LexerPostScript.__init__7F+++LexerPostScriptLexerPostScriptLexerPostScriptOE;;;LexerPerl.isStringStyleLexerPerl.isStringStyleLexerPerl.isStringStyleRD===LexerPerl.isCommentStyleLexerPerl.isCommentStyleLexerPerl.isCommentStyleRC===LexerPerl.initPropertiesLexerPerl.initPropertiesLexerPerl.initPropertiesUB???LexerPerl.defaultKeywordsLexerPerl.defaultKeywordsLexerPerl.defaultKeywords|AYYYLexerPerl.autoCompletionWordSeparatorsLexerPerl.autoCompletionWordSeparatorsLexerPerl.autoCompletionWordSeparators db\*d6V99LexerPygments (Module)LexerPygments (Module)VUCC9LexerPygments (Constructor)LexerPygments (Constructor)LexerPygments.__init__1T'''LexerPygmentsLexerPygmentsLexerPygmentsaSGGGLexerProperties.isStringStyleLexerProperties.isStringStyleLexerProperties.isStringStyledRIIILexerProperties.isCommentStyleLexerProperties.isCommentStyleLexerProperties.isCommentStyledQIIILexerProperties.initPropertiesLexerProperties.initPropertiesLexerProperties.initPropertiesgPKKKLexerProperties.defaultKeywordsLexerProperties.defaultKeywordsLexerProperties.defaultKeywords:O==LexerProperties (Module)LexerProperties (Module)\NGG=LexerProperties (Constructor)LexerProperties (Constructor)LexerProperties.__init__7M+++LexerPropertiesLexerPropertiesLexerPropertiesaLGGGLexerPostScript.isStringStyleLexerPostScript.isStringStyleLexerPostScript.isStringStyle ;V?+~;@a111LexerPygments.nameLexerPygments.nameLexerPygments.nameL`999LexerPygments.languageLexerPygments.languageLexerPygments.language[_CCCLexerPygments.isStringStyleLexerPygments.isStringStyleLexerPygments.isStringStyle^^EEELexerPygments.isCommentStyleLexerPygments.isCommentStyleLexerPygments.isCommentStyleU]???LexerPygments.descriptionLexerPygments.descriptionLexerPygments.descriptionX\AAALexerPygments.defaultPaperLexerPygments.defaultPaperLexerPygments.defaultPapera[GGGLexerPygments.defaultKeywordsLexerPygments.defaultKeywordsLexerPygments.defaultKeywordsUZ???LexerPygments.defaultFontLexerPygments.defaultFontLexerPygments.defaultFontXYAAALexerPygments.defaultColorLexerPygments.defaultColorLexerPygments.defaultColorLX999LexerPygments.canStyleLexerPygments.canStyleLexerPygments.canStyleXWAAALexerPygments.__guessLexerLexerPygments.__guessLexerLexerPygments.__guessLexer )J7)Ul???LexerPython.isStringStyleLexerPython.isStringStyleLexerPython.isStringStyleXkAAALexerPython.isCommentStyleLexerPython.isCommentStyleLexerPython.isCommentStyleXjAAALexerPython.initPropertiesLexerPython.initPropertiesLexerPython.initPropertiesviUUULexerPython.getIndentationDifferenceLexerPython.getIndentationDifferenceLexerPython.getIndentationDifference[hCCCLexerPython.defaultKeywordsLexerPython.defaultKeywordsLexerPython.defaultKeywordsg]]]LexerPython.autoCompletionWordSeparatorsLexerPython.autoCompletionWordSeparatorsLexerPython.autoCompletionWordSeparators2f55LexerPython (Module)LexerPython (Module)Pe??5LexerPython (Constructor)LexerPython (Constructor)LexerPython.__init__+d###LexerPythonLexerPythonLexerPythonOc;;;LexerPygments.styleTextLexerPygments.styleTextLexerPygments.styleTextabGGGLexerPygments.styleBitsNeededLexerPygments.styleBitsNeededLexerPygments.styleBitsNeeded BZ.bBOy;;;LexerSQL.initPropertiesLexerSQL.initPropertiesLexerSQL.initPropertiesRx===LexerSQL.defaultKeywordsLexerSQL.defaultKeywordsLexerSQL.defaultKeywords,w//LexerSQL (Module)LexerSQL (Module)Gv99/LexerSQL (Constructor)LexerSQL (Constructor)LexerSQL.__init__"uLexerSQLLexerSQLLexerSQLOt;;;LexerRuby.isStringStyleLexerRuby.isStringStyleLexerRuby.isStringStyleRs===LexerRuby.isCommentStyleLexerRuby.isCommentStyleLexerRuby.isCommentStyleRr===LexerRuby.initPropertiesLexerRuby.initPropertiesLexerRuby.initPropertiesUq???LexerRuby.defaultKeywordsLexerRuby.defaultKeywordsLexerRuby.defaultKeywords|pYYYLexerRuby.autoCompletionWordSeparatorsLexerRuby.autoCompletionWordSeparatorsLexerRuby.autoCompletionWordSeparators.o11LexerRuby (Module)LexerRuby (Module)Jn;;1LexerRuby (Constructor)LexerRuby (Constructor)LexerRuby.__init__%mLexerRubyLexerRubyLexerRuby 4_:lyT 4O;;;LexerTeX.initPropertiesLexerTeX.initPropertiesLexerTeX.initPropertiesR===LexerTeX.defaultKeywordsLexerTeX.defaultKeywordsLexerTeX.defaultKeywords,//LexerTeX (Module)LexerTeX (Module)G99/LexerTeX (Constructor)LexerTeX (Constructor)LexerTeX.__init__"LexerTeXLexerTeXLexerTeXL999LexerTCL.isStringStyleLexerTCL.isStringStyleLexerTCL.isStringStyleO;;;LexerTCL.isCommentStyleLexerTCL.isCommentStyleLexerTCL.isCommentStyleO;;;LexerTCL.initPropertiesLexerTCL.initPropertiesLexerTCL.initPropertiesR===LexerTCL.defaultKeywordsLexerTCL.defaultKeywordsLexerTCL.defaultKeywords,~//LexerTCL (Module)LexerTCL (Module)G}99/LexerTCL (Constructor)LexerTCL (Constructor)LexerTCL.__init__"|LexerTCLLexerTCLLexerTCLL{999LexerSQL.isStringStyleLexerSQL.isStringStyleLexerSQL.isStringStyleOz;;;LexerSQL.isCommentStyleLexerSQL.isCommentStyleLexerSQL.isCommentStyle r_7a e@rR===LexerXML.defaultKeywordsLexerXML.defaultKeywordsLexerXML.defaultKeywords,//LexerXML (Module)LexerXML (Module)G99/LexerXML (Constructor)LexerXML (Constructor)LexerXML.__init__"LexerXMLLexerXMLLexerXMLO;;;LexerVHDL.isStringStyleLexerVHDL.isStringStyleLexerVHDL.isStringStyleR===LexerVHDL.isCommentStyleLexerVHDL.isCommentStyleLexerVHDL.isCommentStyleR===LexerVHDL.initPropertiesLexerVHDL.initPropertiesLexerVHDL.initPropertiesU ???LexerVHDL.defaultKeywordsLexerVHDL.defaultKeywordsLexerVHDL.defaultKeywords. 11LexerVHDL (Module)LexerVHDL (Module)J ;;1LexerVHDL (Constructor)LexerVHDL (Constructor)LexerVHDL.__init__% LexerVHDLLexerVHDLLexerVHDLL 999LexerTeX.isStringStyleLexerTeX.isStringStyleLexerTeX.isStringStyleO;;;LexerTeX.isCommentStyleLexerTeX.isCommentStyleLexerTeX.isCommentStyle +\ geS+%"ListspaceListspaceJListspaceY!EE;LinkedResource (Constructor)LinkedResource (Constructor)LinkedResource.__init__4 )))LinkedResourceLinkedResourceLinkedResource*--Lexers (Package)Lexers (Package)oO;;;LexerYAML.isStringStyleLexerYAML.isStringStyleLexerYAML.isStringStyleR===LexerYAML.isCommentStyleLexerYAML.isCommentStyleLexerYAML.isCommentStyleR===LexerYAML.initPropertiesLexerYAML.initPropertiesLexerYAML.initPropertiesU???LexerYAML.defaultKeywordsLexerYAML.defaultKeywordsLexerYAML.defaultKeywords.11LexerYAML (Module)LexerYAML (Module)J;;1LexerYAML (Constructor)LexerYAML (Constructor)LexerYAML.__init__%LexerYAMLLexerYAMLLexerYAMLL999LexerXML.isStringStyleLexerXML.isStringStyleLexerXML.isStringStyleO;;;LexerXML.isCommentStyleLexerXML.isCommentStyleLexerXML.isCommentStyleO;;;LexerXML.initPropertiesLexerXML.initPropertiesLexerXML.initProperties ;O,a;X-AAAListspace.__currentChangedListspace.__currentChangedJListspace.__currentChangeda,GGGListspace.__contextMenuSaveAsListspace.__contextMenuSaveAsJListspace.__contextMenuSaveAsd+IIIListspace.__contextMenuSaveAllListspace.__contextMenuSaveAllJListspace.__contextMenuSaveAll[*CCCListspace.__contextMenuSaveListspace.__contextMenuSaveJListspace.__contextMenuSavej)MMMListspace.__contextMenuPrintFileListspace.__contextMenuPrintFileJListspace.__contextMenuPrintFileg(KKKListspace.__contextMenuCloseAllListspace.__contextMenuCloseAllJListspace.__contextMenuCloseAll^'EEEListspace.__contextMenuCloseListspace.__contextMenuCloseJListspace.__contextMenuCloseU&???Listspace.__captionChangeListspace.__captionChangeJListspace.__captionChange0%33Listspace (Package)Listspace (Package)\.$11Listspace (Module)Listspace (Module)JJ#;;1Listspace (Constructor)Listspace (Constructor)JListspace.__init__ Sn iLSL8999Listspace.activeWindowListspace.activeWindowJListspace.activeWindowa7GGGListspace._syntaxErrorToggledListspace._syntaxErrorToggledJListspace._syntaxErrorToggledC6333Listspace._showViewListspace._showViewJListspace._showViewI5777Listspace._removeViewListspace._removeViewJListspace._removeViewU4???Listspace._removeAllViewsListspace._removeAllViewsJListspace._removeAllViewsv3UUUListspace._modificationStatusChangedListspace._modificationStatusChangedJListspace._modificationStatusChanged^2EEEListspace._initWindowActionsListspace._initWindowActionsJListspace._initWindowActions@1111Listspace._addViewListspace._addViewJListspace._addView^0EEEListspace.__showSelectedViewListspace.__showSelectedViewJListspace.__showSelectedViewF/555Listspace.__showMenuListspace.__showMenuJListspace.__showMenuF.555Listspace.__initMenuListspace.__initMenuJListspace.__initMenu Kt1e;K4E)))Listspace.tileListspace.tileJListspace.tileRD===Listspace.showWindowMenuListspace.showWindowMenuJListspace.showWindowMenuaCGGGListspace.setSplitOrientationListspace.setSplitOrientationJListspace.setSplitOrientationOB;;;Listspace.setEditorNameListspace.setEditorNameJListspace.setEditorNameIA777Listspace.removeSplitListspace.removeSplitJListspace.removeSplitC@333Listspace.prevSplitListspace.prevSplitJListspace.prevSplitC?333Listspace.nextSplitListspace.nextSplitJListspace.nextSplitI>777Listspace.eventFilterListspace.eventFilterJListspace.eventFilter==///Listspace.cascadeListspace.cascadeJListspace.cascade=<///Listspace.canTileListspace.canTileJListspace.canTile@;111Listspace.canSplitListspace.canSplitJListspace.canSplitF:555Listspace.canCascadeListspace.canCascadeJListspace.canCascade@9111Listspace.addSplitListspace.addSplitJListspace.addSplit %^SH \%4S)))LoginForm.saveLoginForm.saveLoginForm.save4R)))LoginForm.loadLoginForm.loadLoginForm.load=Q///LoginForm.isValidLoginForm.isValidLoginForm.isValidJP;;1LoginForm (Constructor)LoginForm (Constructor)LoginForm.__init__%OLoginFormLoginFormLoginForm^NEEELogViewer.preferencesChangedLogViewer.preferencesChangedLogViewer.preferencesChangedRM===LogViewer.appendToStdoutLogViewer.appendToStdoutLogViewer.appendToStdoutRL===LogViewer.appendToStderrLogViewer.appendToStderrLogViewer.appendToStderrmKOOOLogViewer.__handleShowContextMenuLogViewer.__handleShowContextMenuLogViewer.__handleShowContextMenuIJ777LogViewer.__configureLogViewer.__configureLogViewer.__configureLI999LogViewer.__appendTextLogViewer.__appendTextLogViewer.__appendTextJH;;1LogViewer (Constructor)LogViewer (Constructor)LogViewer.__init__%GLogViewerLogViewerLogViewer*F--LogView (Module)LogView (Module) fj;$+fO_;;;MdiArea._removeAllViewsMdiArea._removeAllViewsKMdiArea._removeAllViewsp^QQQMdiArea._modificationStatusChangedMdiArea._modificationStatusChangedKMdiArea._modificationStatusChangedX]AAAMdiArea._initWindowActionsMdiArea._initWindowActionsKMdiArea._initWindowActions:\---MdiArea._addViewMdiArea._addViewKMdiArea._addView^[EEEMdiArea.__subWindowActivatedMdiArea.__subWindowActivatedKMdiArea.__subWindowActivatedXZAAAMdiArea.__setSubWindowIconMdiArea.__setSubWindowIconKMdiArea.__setSubWindowIcon[YCCCMdiArea.__restoreAllWindowsMdiArea.__restoreAllWindowsKMdiArea.__restoreAllWindows[XCCCMdiArea.__iconizeAllWindowsMdiArea.__iconizeAllWindowsKMdiArea.__iconizeAllWindows,W//MdiArea (Package)MdiArea (Package)]*V--MdiArea (Module)MdiArea (Module)KDU77-MdiArea (Constructor)MdiArea (Constructor)KMdiArea.__init__TMdiAreaMdiAreaKMdiArea .zSM._mII?MessageBoxWizard (Constructor)MessageBoxWizard (Constructor) MessageBoxWizard.__init__:l---MessageBoxWizardMessageBoxWizard MessageBoxWizard.k%%%MdiArea.tileMdiArea.tileKMdiArea.tileLj999MdiArea.showWindowMenuMdiArea.showWindowMenuKMdiArea.showWindowMenuIi777MdiArea.setEditorNameMdiArea.setEditorNameKMdiArea.setEditorNameCh333MdiArea.eventFilterMdiArea.eventFilterKMdiArea.eventFilter7g+++MdiArea.cascadeMdiArea.cascadeKMdiArea.cascade7f+++MdiArea.canTileMdiArea.canTileKMdiArea.canTile:e---MdiArea.canSplitMdiArea.canSplitKMdiArea.canSplit@d111MdiArea.canCascadeMdiArea.canCascadeKMdiArea.canCascadeFc555MdiArea.activeWindowMdiArea.activeWindowKMdiArea.activeWindow[bCCCMdiArea._syntaxErrorToggledMdiArea._syntaxErrorToggledKMdiArea._syntaxErrorToggled=a///MdiArea._showViewMdiArea._showViewKMdiArea._showViewC`333MdiArea._removeViewMdiArea._removeViewKMdiArea._removeView a GBHwKKMessageBoxWizardDialog (Module)MessageBoxWizardDialog (Module)RqvUUKMessageBoxWizardDialog (Constructor)MessageBoxWizardDialog (Constructor)RMessageBoxWizardDialog.__init__Lu999MessageBoxWizardDialogMessageBoxWizardDialogRMessageBoxWizardDialog[tCCCMessageBoxWizard.deactivateMessageBoxWizard.deactivate MessageBoxWizard.deactivateUs???MessageBoxWizard.activateMessageBoxWizard.activate MessageBoxWizard.activate[rCCCMessageBoxWizard.__initMenuMessageBoxWizard.__initMenu MessageBoxWizard.__initMenuaqGGGMessageBoxWizard.__initActionMessageBoxWizard.__initAction MessageBoxWizard.__initActionUp???MessageBoxWizard.__handleMessageBoxWizard.__handle MessageBoxWizard.__handle[oCCCMessageBoxWizard.__callFormMessageBoxWizard.__callForm MessageBoxWizard.__callForm>nAAMessageBoxWizard (Package)MessageBoxWizard (Package)e i"~[[[MessageBoxWizardDialog.on_bTest_clickedMessageBoxWizardDialog.on_bTest_clickedRMessageBoxWizardDialog.on_bTest_clickedd}IIIMessageBoxWizardDialog.getCodeMessageBoxWizardDialog.getCodeRMessageBoxWizardDialog.getCodem|OOOMessageBoxWizardDialog.__testQt42MessageBoxWizardDialog.__testQt42RMessageBoxWizardDialog.__testQt42m{OOOMessageBoxWizardDialog.__testQt40MessageBoxWizardDialog.__testQt40RMessageBoxWizardDialog.__testQt40zaaaMessageBoxWizardDialog.__getQt42ButtonCodeMessageBoxWizardDialog.__getQt42ButtonCodeRMessageBoxWizardDialog.__getQt42ButtonCodeyaaaMessageBoxWizardDialog.__getQt40ButtonCodeMessageBoxWizardDialog.__getQt40ButtonCodeRMessageBoxWizardDialog.__getQt40ButtonCode|xYYYMessageBoxWizardDialog.__enabledGroupsMessageBoxWizardDialog.__enabledGroupsRMessageBoxWizardDialog.__enabledGroups sq)s]]]MessageBoxWizardDialog.on_rAbout_toggledMessageBoxWizardDialog.on_rAbout_toggledRMessageBoxWizardDialog.on_rAbout_toggledaaaMessageBoxWizardDialog.on_rAboutQt_toggledMessageBoxWizardDialog.on_rAboutQt_toggledRMessageBoxWizardDialog.on_rAboutQt_toggled qqqMessageBoxWizardDialog.on_cButton2_editTextChangedMessageBoxWizardDialog.on_cButton2_editTextChangedRMessageBoxWizardDialog.on_cButton2_editTextChanged qqqMessageBoxWizardDialog.on_cButton1_editTextChangedMessageBoxWizardDialog.on_cButton1_editTextChangedRMessageBoxWizardDialog.on_cButton1_editTextChanged qqqMessageBoxWizardDialog.on_cButton0_editTextChangedMessageBoxWizardDialog.on_cButton0_editTextChangedRMessageBoxWizardDialog.on_cButton0_editTextChanged cccMessageBoxWizardDialog.on_buttonBox_clickedMessageBoxWizardDialog.on_buttonBox_clickedRMessageBoxWizardDialog.on_buttonBox_clicked :~SA]:mOOOMiniEditor.__contextMenuRequestedMiniEditor.__contextMenuRequestedMiniEditor.__contextMenuRequestedXAAAMiniEditor.__checkLanguageMiniEditor.__checkLanguageMiniEditor.__checkLanguageU???MiniEditor.__checkActionsMiniEditor.__checkActionsMiniEditor.__checkActionsI 777MiniEditor.__bindNameMiniEditor.__bindNameMiniEditor.__bindNameL 999MiniEditor.__bindLexerMiniEditor.__bindLexerMiniEditor.__bindLexerF 555MiniEditor.__aboutQtMiniEditor.__aboutQtMiniEditor.__aboutQtI 777MiniEditor.__aboutKdeMiniEditor.__aboutKdeMiniEditor.__aboutKde@ 111MiniEditor.__aboutMiniEditor.__aboutMiniEditor.__about033MiniEditor (Module)MiniEditor (Module)M==3MiniEditor (Constructor)MiniEditor (Constructor)MiniEditor.__init__(!!!MiniEditorMiniEditorMiniEditor[[[MessageBoxWizardDialog.on_rQt42_toggledMessageBoxWizardDialog.on_rQt42_toggledRMessageBoxWizardDialog.on_rQt42_toggled '>pM|'R===MiniEditor.__deselectAllMiniEditor.__deselectAllMiniEditor.__deselectAllpQQQMiniEditor.__cursorPositionChangedMiniEditor.__cursorPositionChangedMiniEditor.__cursorPositionChanged[CCCMiniEditor.__createToolBarsMiniEditor.__createToolBarsMiniEditor.__createToolBars^EEEMiniEditor.__createStatusBarMiniEditor.__createStatusBarMiniEditor.__createStatusBarjMMMMiniEditor.__createSearchActionsMiniEditor.__createSearchActionsMiniEditor.__createSearchActionsR===MiniEditor.__createMenusMiniEditor.__createMenusMiniEditor.__createMenusdIIIMiniEditor.__createHelpActionsMiniEditor.__createHelpActionsMiniEditor.__createHelpActionsdIIIMiniEditor.__createFileActionsMiniEditor.__createFileActionsMiniEditor.__createFileActionsdIIIMiniEditor.__createEditActionsMiniEditor.__createEditActionsMiniEditor.__createEditActionsXAAAMiniEditor.__createActionsMiniEditor.__createActionsMiniEditor.__createActions 35P3j$MMMMiniEditor.__modificationChangedMiniEditor.__modificationChangedMiniEditor.__modificationChangedL#999MiniEditor.__maybeSaveMiniEditor.__maybeSaveMiniEditor.__maybeSave^"EEEMiniEditor.__markOccurrencesMiniEditor.__markOccurrencesMiniEditor.__markOccurrencesI!777MiniEditor.__loadFileMiniEditor.__loadFileMiniEditor.__loadFilep QQQMiniEditor.__languageMenuTriggeredMiniEditor.__languageMenuTriggeredMiniEditor.__languageMenuTriggeredyWWWMiniEditor.__initContextMenuLanguagesMiniEditor.__initContextMenuLanguagesMiniEditor.__initContextMenuLanguages^EEEMiniEditor.__initContextMenuMiniEditor.__initContextMenuMiniEditor.__initContextMenuF555MiniEditor.__getWordMiniEditor.__getWordMiniEditor.__getWord[CCCMiniEditor.__getCurrentWordMiniEditor.__getCurrentWordMiniEditor.__getCurrentWordjMMMMiniEditor.__documentWasModifiedMiniEditor.__documentWasModifiedMiniEditor.__documentWasModified .w(l|3n.=0///MiniEditor.__saveMiniEditor.__saveMiniEditor.__saveg/KKKMiniEditor.__resizeLinenoMarginMiniEditor.__resizeLinenoMarginMiniEditor.__resizeLinenoMarginX.AAAMiniEditor.__resetLanguageMiniEditor.__resetLanguageMiniEditor.__resetLanguageF-555MiniEditor.__replaceMiniEditor.__replaceMiniEditor.__replace=,///MiniEditor.__redoMiniEditor.__redoMiniEditor.__redoU+???MiniEditor.__readShortcutMiniEditor.__readShortcutMiniEditor.__readShortcutU*???MiniEditor.__readSettingsMiniEditor.__readSettingsMiniEditor.__readSettingsa)GGGMiniEditor.__printPreviewFileMiniEditor.__printPreviewFileMiniEditor.__printPreviewFileU(???MiniEditor.__printPreviewMiniEditor.__printPreviewMiniEditor.__printPreviewL'999MiniEditor.__printFileMiniEditor.__printFileMiniEditor.__printFile=&///MiniEditor.__openMiniEditor.__openMiniEditor.__openF%555MiniEditor.__newFileMiniEditor.__newFileMiniEditor.__newFile Vn(oRVL;999MiniEditor.__setSbFileMiniEditor.__setSbFileMiniEditor.__setSbFileX:AAAMiniEditor.__setMonospacedMiniEditor.__setMonospacedMiniEditor.__setMonospacedO9;;;MiniEditor.__setMarginsMiniEditor.__setMarginsMiniEditor.__setMarginsO8;;;MiniEditor.__setEolModeMiniEditor.__setEolModeMiniEditor.__setEolMode[7CCCMiniEditor.__setCurrentFileMiniEditor.__setCurrentFileMiniEditor.__setCurrentFilej6MMMMiniEditor.__selectPygmentsLexerMiniEditor.__selectPygmentsLexerMiniEditor.__selectPygmentsLexerL5999MiniEditor.__selectAllMiniEditor.__selectAllMiniEditor.__selectAllg4KKKMiniEditor.__searchClearMarkersMiniEditor.__searchClearMarkersMiniEditor.__searchClearMarkersC3333MiniEditor.__searchMiniEditor.__searchMiniEditor.__searchI2777MiniEditor.__saveFileMiniEditor.__saveFileMiniEditor.__saveFileC1333MiniEditor.__saveAsMiniEditor.__saveAsMiniEditor.__saveAs 5&y9=5LF999MiniEditor.getFileNameMiniEditor.getFileNameMiniEditor.getFileNameIE777MiniEditor.closeEventMiniEditor.closeEventMiniEditor.closeEventjDMMMMiniEditor.clearSearchIndicatorsMiniEditor.clearSearchIndicatorsMiniEditor.clearSearchIndicatorsOC;;;MiniEditor.activeWindowMiniEditor.activeWindowMiniEditor.activeWindowXBAAAMiniEditor.__writeSettingsMiniEditor.__writeSettingsMiniEditor.__writeSettingsLA999MiniEditor.__whatsThisMiniEditor.__whatsThisMiniEditor.__whatsThis=@///MiniEditor.__undoMiniEditor.__undoMiniEditor.__undoR?===MiniEditor.__styleNeededMiniEditor.__styleNeededMiniEditor.__styleNeededU>???MiniEditor.__strippedNameMiniEditor.__strippedNameMiniEditor.__strippedNamey=WWWMiniEditor.__showContextMenuLanguagesMiniEditor.__showContextMenuLanguagesMiniEditor.__showContextMenuLanguages[<CCCMiniEditor.__setTextDisplayMiniEditor.__setTextDisplayMiniEditor.__setTextDisplay 3_c D3UR???MiniScintilla.getFileNameMiniScintilla.getFileNameMiniScintilla.getFileName[QCCCMiniScintilla.focusOutEventMiniScintilla.focusOutEventMiniScintilla.focusOutEventXPAAAMiniScintilla.focusInEventMiniScintilla.focusInEventMiniScintilla.focusInEventVOCC9MiniScintilla (Constructor)MiniScintilla (Constructor)MiniScintilla.__init__1N'''MiniScintillaMiniScintillaMiniScintillaLM999MiniEditor.textForFindMiniEditor.textForFindMiniEditor.textForFind@L111MiniEditor.setTextMiniEditor.setTextMiniEditor.setTextaKGGGMiniEditor.setSearchIndicatorMiniEditor.setSearchIndicatorMiniEditor.setSearchIndicatorLJ999MiniEditor.setLanguageMiniEditor.setLanguageMiniEditor.setLanguageFI555MiniEditor.readLine0MiniEditor.readLine0MiniEditor.readLine0OH;;;MiniEditor.getSRHistoryMiniEditor.getSRHistoryMiniEditor.getSRHistoryLG999MiniEditor.getLanguageMiniEditor.getLanguageMiniEditor.getLanguage I`E0I@`111Module.getFileNameModule.getFileName Module.getFileNameL_999Module.createHierarchyModule.createHierarchy Module.createHierarchyR^===Module.assembleHierarchyModule.assembleHierarchy Module.assembleHierarchyU]???Module.addPathToHierarchyModule.addPathToHierarchy Module.addPathToHierarchy:\---Module.addModuleModule.addModule Module.addModule:[---Module.addGlobalModule.addGlobal Module.addGlobal@Z111Module.addFunctionModule.addFunction Module.addFunctionIY777Module.addDescriptionModule.addDescription Module.addDescription7X+++Module.addClassModule.addClass Module.addClass:W---Module.__rb_scanModule.__rb_scan Module.__rb_scanUV???Module.__py_setVisibilityModule.__py_setVisibility Module.__py_setVisibility:U---Module.__py_scanModule.__py_scan Module.__py_scanAT55+Module (Constructor)Module (Constructor)Module.__init__SModuleModuleModule d.gjojQQQModuleDocument.__genClassesSectionModuleDocument.__genClassesSectionHModuleDocument.__genClassesSectionuiUUUModuleDocument.__genClassListSectionModuleDocument.__genClassListSectionHModuleDocument.__genClassListSectionohQQQModuleDocument.__formatDescriptionModuleDocument.__formatDescriptionHModuleDocument.__formatDescriptiongaaaModuleDocument.__formatCrossReferenceEntryModuleDocument.__formatCrossReferenceEntryHModuleDocument.__formatCrossReferenceEntryifMMMModuleDocument.__checkDeprecatedModuleDocument.__checkDeprecatedHModuleDocument.__checkDeprecatedXeEE;ModuleDocument (Constructor)ModuleDocument (Constructor)HModuleDocument.__init__3d)))ModuleDocumentModuleDocumentHModuleDocument+c###Module.scanModule.scan Module.scan4b)))Module.getTypeModule.getType Module.getType4a)))Module.getNameModule.getName Module.getName 9u|&9lrOOOModuleDocument.__genModuleSectionModuleDocument.__genModuleSectionHModuleDocument.__genModuleSection{qYYYModuleDocument.__genMethodsListSectionModuleDocument.__genMethodsListSectionHModuleDocument.__genMethodsListSectionlpOOOModuleDocument.__genMethodSectionModuleDocument.__genMethodSectionHModuleDocument.__genMethodSectionfoKKKModuleDocument.__genListSectionModuleDocument.__genListSectionHModuleDocument.__genListSection{nYYYModuleDocument.__genGlobalsListSectionModuleDocument.__genGlobalsListSectionHModuleDocument.__genGlobalsListSectionumUUUModuleDocument.__genFunctionsSectionModuleDocument.__genFunctionsSectionHModuleDocument.__genFunctionsSection~l[[[ModuleDocument.__genFunctionListSectionModuleDocument.__genFunctionListSectionHModuleDocument.__genFunctionListSectionkaaaModuleDocument.__genDescriptionListSectionModuleDocument.__genDescriptionListSectionHModuleDocument.__genDescriptionListSection ifSioyQQQModuleDocument.__genSeeListSectionModuleDocument.__genSeeListSectionHModuleDocument.__genSeeListSectionuxUUUModuleDocument.__genRbModulesSectionModuleDocument.__genRbModulesSectionHModuleDocument.__genRbModulesSectionw]]]ModuleDocument.__genRbModulesListSectionModuleDocument.__genRbModulesListSectionHModuleDocument.__genRbModulesListSection vcccModuleDocument.__genRbModulesClassesSectionModuleDocument.__genRbModulesClassesSectionHModuleDocument.__genRbModulesClassesSectionukkkModuleDocument.__genRbModulesClassesListSectionModuleDocument.__genRbModulesClassesListSectionHModuleDocument.__genRbModulesClassesListSectiontkkkModuleDocument.__genParamDescriptionListSectionModuleDocument.__genParamDescriptionListSectionHModuleDocument.__genParamDescriptionListSectioncsIIIModuleDocument.__genParagraphsModuleDocument.__genParagraphsHModuleDocument.__genParagraphs AbcAM==3ModuleItem (Constructor)ModuleItem (Constructor)ModuleItem.__init__(!!!ModuleItemModuleItemModuleItem;??ModuleDocumentor (Module)ModuleDocumentor (Module)HfKKKModuleDocument.shortDescriptionModuleDocument.shortDescriptionHModuleDocument.shortDescriptionB333ModuleDocument.nameModuleDocument.nameHModuleDocument.nameK999ModuleDocument.isEmptyModuleDocument.isEmptyHModuleDocument.isEmptyi~MMMModuleDocument.getQtHelpKeywordsModuleDocument.getQtHelpKeywordsHModuleDocument.getQtHelpKeywordsW}AAAModuleDocument.genDocumentModuleDocument.genDocumentHModuleDocument.genDocumentW|AAAModuleDocument.descriptionModuleDocument.descriptionHModuleDocument.descriptiono{QQQModuleDocument.__processInlineTagsModuleDocument.__processInlineTagsHModuleDocument.__processInlineTagsuzUUUModuleDocument.__getShortDescriptionModuleDocument.__getShortDescriptionHModuleDocument.__getShortDescription Frl;}F477MultiProject (Module)MultiProject (Module)SAA7MultiProject (Constructor)MultiProject (Constructor)MultiProject.__init__.%%%MultiProjectMultiProjectMultiProject477ModuleParser (Module)ModuleParser (Module) C333ModuleModel.getNameModuleModel.getNameModuleModel.getNameL 999ModuleModel.getClassesModuleModel.getClassesModuleModel.getClassesF 555ModuleModel.addClassModuleModel.addClassModuleModel.addClassP ??5ModuleModel (Constructor)ModuleModel (Constructor)ModuleModel.__init__+ ###ModuleModelModuleModelModuleModelC 333ModuleItem.setModelModuleItem.setModelModuleItem.setModel:---ModuleItem.paintModuleItem.paintModuleItem.paintR===ModuleItem.__createTextsModuleItem.__createTextsModuleItem.__createTextsXAAAModuleItem.__calculateSizeModuleItem.__calculateSizeModuleItem.__calculateSize033ModuleItem (Module)ModuleItem (Module) a`[,aU???MultiProject.__saveRecentMultiProject.__saveRecentMultiProject.__saveRecentpQQQMultiProject.__readXMLMultiProjectMultiProject.__readXMLMultiProjectMultiProject.__readXMLMultiProjectgKKKMultiProject.__readMultiProjectMultiProject.__readMultiProjectMultiProject.__readMultiProjectU???MultiProject.__openRecentMultiProject.__openRecentMultiProject.__openRecentjMMMMultiProject.__openMasterProjectMultiProject.__openMasterProjectMultiProject.__openMasterProjectU???MultiProject.__loadRecentMultiProject.__loadRecentMultiProject.__loadRecentO;;;MultiProject.__initDataMultiProject.__initDataMultiProject.__initDataXAAAMultiProject.__clearRecentMultiProject.__clearRecentMultiProject.__clearRecentdIIIMultiProject.__checkFilesExistMultiProject.__checkFilesExistMultiProject.__checkFilesExist699MultiProject (Package)MultiProject (Package)N !5y >s!O&;;;MultiProject.checkDirtyMultiProject.checkDirtyMultiProject.checkDirtyv%UUUMultiProject.changeProjectPropertiesMultiProject.changeProjectPropertiesMultiProject.changeProjectPropertiesO$;;;MultiProject.addProjectMultiProject.addProjectMultiProject.addProjectU#???MultiProject.addE4ActionsMultiProject.addE4ActionsMultiProject.addE4Actionss"SSSMultiProject.__writeXMLMultiProjectMultiProject.__writeXMLMultiProjectMultiProject.__writeXMLMultiProjectj!MMMMultiProject.__writeMultiProjectMultiProject.__writeMultiProjectMultiProject.__writeMultiProjectU ???MultiProject.__syncRecentMultiProject.__syncRecentMultiProject.__syncRecentaGGGMultiProject.__showPropertiesMultiProject.__showPropertiesMultiProject.__showPropertiesO;;;MultiProject.__showMenuMultiProject.__showMenuMultiProject.__showMenuvUUUMultiProject.__showContextMenuRecentMultiProject.__showContextMenuRecentMultiProject.__showContextMenuRecent 6G[J6R0===MultiProject.getProjectsMultiProject.getProjectsMultiProject.getProjectsO/;;;MultiProject.getProjectMultiProject.getProjectMultiProject.getProjectj.MMMMultiProject.getMultiProjectPathMultiProject.getMultiProjectPathMultiProject.getMultiProjectPathj-MMMMultiProject.getMultiProjectFileMultiProject.getMultiProjectFileMultiProject.getMultiProjectFileX,AAAMultiProject.getMostRecentMultiProject.getMostRecentMultiProject.getMostRecentF+555MultiProject.getMenuMultiProject.getMenuMultiProject.getMenum*OOOMultiProject.getMasterProjectFileMultiProject.getMasterProjectFileMultiProject.getMasterProjectFiley)WWWMultiProject.getDependantProjectFilesMultiProject.getDependantProjectFilesMultiProject.getDependantProjectFilesO(;;;MultiProject.getActionsMultiProject.getActionsMultiProject.getActionsd'IIIMultiProject.closeMultiProjectMultiProject.closeMultiProjectMultiProject.closeMultiProject A_ {aAa;GGGMultiProject.saveMultiProjectMultiProject.saveMultiProjectMultiProject.saveMultiProjectX:AAAMultiProject.removeProjectMultiProject.removeProjectMultiProject.removeProject^9EEEMultiProject.removeE4ActionsMultiProject.removeE4ActionsMultiProject.removeE4ActionsR8===MultiProject.openProjectMultiProject.openProjectMultiProject.openProjecta7GGGMultiProject.openMultiProjectMultiProject.openMultiProjectMultiProject.openMultiProject^6EEEMultiProject.newMultiProjectMultiProject.newMultiProjectMultiProject.newMultiProjectC5333MultiProject.isOpenMultiProject.isOpenMultiProject.isOpenF4555MultiProject.isDirtyMultiProject.isDirtyMultiProject.isDirtyR3===MultiProject.initToolbarMultiProject.initToolbarMultiProject.initToolbarI2777MultiProject.initMenuMultiProject.initMenuMultiProject.initMenuR1===MultiProject.initActionsMultiProject.initActionsMultiProject.initActions uJT}uyDWWWMultiProjectBrowser.__createPopupMenuMultiProjectBrowser.__createPopupMenuMultiProjectBrowser.__createPopupMenuCaaaMultiProjectBrowser.__contextMenuRequestedMultiProjectBrowser.__contextMenuRequestedMultiProjectBrowser.__contextMenuRequestedgBKKKMultiProjectBrowser.__configureMultiProjectBrowser.__configureMultiProjectBrowser.__configurejAMMMMultiProjectBrowser.__addProjectMultiProjectBrowser.__addProjectMultiProjectBrowser.__addProjectB@EEMultiProjectBrowser (Module)MultiProjectBrowser (Module)h?OOEMultiProjectBrowser (Constructor)MultiProjectBrowser (Constructor)MultiProjectBrowser.__init__C>333MultiProjectBrowserMultiProjectBrowserMultiProjectBrowserI=777MultiProject.setDirtyMultiProject.setDirtyMultiProject.setDirtyg<KKKMultiProject.saveMultiProjectAsMultiProject.saveMultiProjectAsMultiProject.saveMultiProjectAs &x"&sLSSSMultiProjectBrowser.__projectOpenedMultiProjectBrowser.__projectOpenedMultiProjectBrowser.__projectOpenedK]]]MultiProjectBrowser.__projectDataChangedMultiProjectBrowser.__projectDataChangedMultiProjectBrowser.__projectDataChangedpJQQQMultiProjectBrowser.__projectAddedMultiProjectBrowser.__projectAddedMultiProjectBrowser.__projectAddeddIIIIMultiProjectBrowser.__openItemMultiProjectBrowser.__openItemMultiProjectBrowser.__openItemyHWWWMultiProjectBrowser.__newMultiProjectMultiProjectBrowser.__newMultiProjectMultiProjectBrowser.__newMultiProjectG]]]MultiProjectBrowser.__multiProjectOpenedMultiProjectBrowser.__multiProjectOpenedMultiProjectBrowser.__multiProjectOpenedF]]]MultiProjectBrowser.__multiProjectClosedMultiProjectBrowser.__multiProjectClosedMultiProjectBrowser.__multiProjectClosedyEWWWMultiProjectBrowser.__findProjectItemMultiProjectBrowser.__findProjectItemMultiProjectBrowser.__findProjectItem GcGcUIIIMultiProjectHandler.endProjectMultiProjectHandler.endProjecthMultiProjectHandler.endProjectoTQQQMultiProjectHandler.endDescriptionMultiProjectHandler.endDescriptionhMultiProjectHandler.endDescriptionASEEMultiProjectHandler (Module)MultiProjectHandler (Module)hgROOEMultiProjectHandler (Constructor)MultiProjectHandler (Constructor)hMultiProjectHandler.__init__BQ333MultiProjectHandlerMultiProjectHandlerhMultiProjectHandler PcccMultiProjectBrowser.__showProjectPropertiesMultiProjectBrowser.__showProjectPropertiesMultiProjectBrowser.__showProjectPropertiesmOOOOMultiProjectBrowser.__setItemDataMultiProjectBrowser.__setItemDataMultiProjectBrowser.__setItemDatasNSSSMultiProjectBrowser.__removeProjectMultiProjectBrowser.__removeProjectMultiProjectBrowser.__removeProjectvMUUUMultiProjectBrowser.__projectRemovedMultiProjectBrowser.__projectRemovedMultiProjectBrowser.__projectRemoved vx.v:]---MultiProjectPageMultiProjectPagezMultiProjectPagei\MMMMultiProjectHandler.startProjectMultiProjectHandler.startProjecthMultiProjectHandler.startProjectx[WWWMultiProjectHandler.startMultiProjectMultiProjectHandler.startMultiProjecthMultiProjectHandler.startMultiProjectZgggMultiProjectHandler.startDocumentMultiProjectMultiProjectHandler.startDocumentMultiProjecthMultiProjectHandler.startDocumentMultiProjectcYIIIMultiProjectHandler.getVersionMultiProjectHandler.getVersionhMultiProjectHandler.getVersionoXQQQMultiProjectHandler.endProjectNameMultiProjectHandler.endProjectNamehMultiProjectHandler.endProjectNameoWQQQMultiProjectHandler.endProjectFileMultiProjectHandler.endProjectFilehMultiProjectHandler.endProjectFileV___MultiProjectHandler.endProjectDescriptionMultiProjectHandler.endProjectDescriptionhMultiProjectHandler.endProjectDescription 3_B<!X3"kNannyNagNannyNagNannyNag-j%%%Mutex.unlockMutex.unlock-Mutex.unlock0i'''Mutex.locked?Mutex.locked?-Mutex.locked?'h!!!Mutex.lockMutex.lock-Mutex.lock9g---Mutex.initializeMutex.initialize-Mutex.initializefMutexMutex-MutexZeCCCMultiProjectWriter.writeXMLMultiProjectWriter.writeXMLiMultiProjectWriter.writeXML?dCCMultiProjectWriter (Module)MultiProjectWriter (Module)idcMMCMultiProjectWriter (Constructor)MultiProjectWriter (Constructor)iMultiProjectWriter.__init__?b111MultiProjectWriterMultiProjectWriteriMultiProjectWriterIa777MultiProjectPage.saveMultiProjectPage.savezMultiProjectPage.save `cccMultiProjectPage.on_workspaceButton_clickedMultiProjectPage.on_workspaceButton_clickedzMultiProjectPage.on_workspaceButton_clicked<_??MultiProjectPage (Module)MultiProjectPage (Module)z_^II?MultiProjectPage (Constructor)MultiProjectPage (Constructor)zMultiProjectPage.__init__ v0{ 1suSSSNetworkAccessManager.__certToStringNetworkAccessManager.__certToStringNetworkAccessManager.__certToStringtgggNetworkAccessManager.__authenticationRequiredNetworkAccessManager.__authenticationRequiredNetworkAccessManager.__authenticationRequiredDsGGNetworkAccessManager (Module)NetworkAccessManager (Module)krQQGNetworkAccessManager (Constructor)NetworkAccessManager (Constructor)NetworkAccessManager.__init__Fq555NetworkAccessManagerNetworkAccessManagerNetworkAccessManager,p//Network (Package)Network (Package)G:o---NannyNag.get_msgNannyNag.get_msgNannyNag.get_msgCn333NannyNag.get_linenoNannyNag.get_linenoNannyNag.get_lineno=m///NannyNag.get_lineNannyNag.get_lineNannyNag.get_lineGl99/NannyNag (Constructor)NannyNag (Constructor)NannyNag.__init__ 4\y4U}???NetworkAccessManagerProxyNetworkAccessManagerProxyNetworkAccessManagerProxyy|WWWNetworkAccessManager.setSchemeHandlerNetworkAccessManager.setSchemeHandlerNetworkAccessManager.setSchemeHandler{[[[NetworkAccessManager.preferencesChangedNetworkAccessManager.preferencesChangedNetworkAccessManager.preferencesChangedyzWWWNetworkAccessManager.languagesChangedNetworkAccessManager.languagesChangedNetworkAccessManager.languagesChangedpyQQQNetworkAccessManager.createRequestNetworkAccessManager.createRequestNetworkAccessManager.createRequestjxMMMNetworkAccessManager.__sslErrorsNetworkAccessManager.__sslErrorsNetworkAccessManager.__sslErrorsswSSSNetworkAccessManager.__setDiskCacheNetworkAccessManager.__setDiskCacheNetworkAccessManager.__setDiskCache vqqqNetworkAccessManager.__proxyAuthenticationRequiredNetworkAccessManager.__proxyAuthenticationRequiredNetworkAccessManager.__proxyAuthenticationRequired /2D/P??5NetworkPage (Constructor)NetworkPage (Constructor){NetworkPage.__init__+###NetworkPageNetworkPage{NetworkPageR===NetworkDiskCache.prepareNetworkDiskCache.prepareNetworkDiskCache.prepare<??NetworkDiskCache (Module)NetworkDiskCache (Module):---NetworkDiskCacheNetworkDiskCacheNetworkDiskCachevUUUNetworkAccessManagerProxy.setWebPageNetworkAccessManagerProxy.setWebPageNetworkAccessManagerProxy.setWebPage2}}}NetworkAccessManagerProxy.setPrimaryNetworkAccessManagerNetworkAccessManagerProxy.setPrimaryNetworkAccessManagerNetworkAccessManagerProxy.setPrimaryNetworkAccessManager[[[NetworkAccessManagerProxy.createRequestNetworkAccessManagerProxy.createRequestNetworkAccessManagerProxy.createRequestNQQNetworkAccessManagerProxy (Module)NetworkAccessManagerProxy (Module)z~[[QNetworkAccessManagerProxy (Constructor)NetworkAccessManagerProxy (Constructor)NetworkAccessManagerProxy.__init__ E|YYYNetworkProtocolUnknownErrorReply.abortNetworkProtocolUnknownErrorReply.abortNetworkProtocolUnknownErrorReply.abortiiiNetworkProtocolUnknownErrorReply.__fireSignalsNetworkProtocolUnknownErrorReply.__fireSignalsNetworkProtocolUnknownErrorReply.__fireSignals\ __NetworkProtocolUnknownErrorReply (Module)NetworkProtocolUnknownErrorReply (Module) ii_NetworkProtocolUnknownErrorReply (Constructor)NetworkProtocolUnknownErrorReply (Constructor)NetworkProtocolUnknownErrorReply.__init__j MMMNetworkProtocolUnknownErrorReplyNetworkProtocolUnknownErrorReplyNetworkProtocolUnknownErrorReply: ---NetworkPage.saveNetworkPage.save{NetworkPage.save ]]]NetworkPage.on_downloadDirButton_clickedNetworkPage.on_downloadDirButton_clicked{NetworkPage.on_downloadDirButton_clicked255NetworkPage (Module)NetworkPage (Module){ @e4dq@yWWWNewDialogClassDialog.__enableOkButtonNewDialogClassDialog.__enableOkButtonNewDialogClassDialog.__enableOkButtonDGGNewDialogClassDialog (Module)NewDialogClassDialog (Module)kQQGNewDialogClassDialog (Constructor)NewDialogClassDialog (Constructor)NewDialogClassDialog.__init__F555NewDialogClassDialogNewDialogClassDialogNewDialogClassDialogI777NetworkReply.readDataNetworkReply.readDataNetworkReply.readData[CCCNetworkReply.bytesAvailableNetworkReply.bytesAvailableNetworkReply.bytesAvailable@111NetworkReply.abortNetworkReply.abortNetworkReply.abort477NetworkReply (Module)NetworkReply (Module)SAA7NetworkReply (Constructor)NetworkReply (Constructor)NetworkReply.__init__.%%%NetworkReplyNetworkReplyNetworkReplykkkNetworkProtocolUnknownErrorReply.bytesAvailableNetworkProtocolUnknownErrorReply.bytesAvailableNetworkProtocolUnknownErrorReply.bytesAvailable (`6s(H"KKNewPythonPackageDialog (Module)NewPythonPackageDialog (Module)q!UUKNewPythonPackageDialog (Constructor)NewPythonPackageDialog (Constructor)NewPythonPackageDialog.__init__L 999NewPythonPackageDialogNewPythonPackageDialogNewPythonPackageDialogmmmNewDialogClassDialog.on_pathnameEdit_textChangedNewDialogClassDialog.on_pathnameEdit_textChangedNewDialogClassDialog.on_pathnameEdit_textChangedaaaNewDialogClassDialog.on_pathButton_clickedNewDialogClassDialog.on_pathButton_clickedNewDialogClassDialog.on_pathButton_clickedmmmNewDialogClassDialog.on_filenameEdit_textChangedNewDialogClassDialog.on_filenameEdit_textChangedNewDialogClassDialog.on_filenameEdit_textChangedoooNewDialogClassDialog.on_classnameEdit_textChangedNewDialogClassDialog.on_classnameEdit_textChangedNewDialogClassDialog.on_classnameEdit_textChanged^EEENewDialogClassDialog.getDataNewDialogClassDialog.getDataNewDialogClassDialog.getData YB _-II?OpenSearchDialog (Constructor)OpenSearchDialog (Constructor)OpenSearchDialog.__init__:,---OpenSearchDialogOpenSearchDialogOpenSearchDialogL+OOOpenSearchDefaultEngines (Module)OpenSearchDefaultEngines (Module)2*55OpenSearch (Package)OpenSearch (Package)H^)EEENoneSplashScreen.showMessageNoneSplashScreen.showMessageNoneSplashScreen.showMessageO(;;;NoneSplashScreen.finishNoneSplashScreen.finishNoneSplashScreen.finisha'GGGNoneSplashScreen.clearMessageNoneSplashScreen.clearMessageNoneSplashScreen.clearMessage_&II?NoneSplashScreen (Constructor)NoneSplashScreen (Constructor)NoneSplashScreen.__init__:%---NoneSplashScreenNoneSplashScreenNoneSplashScreen$oooNewPythonPackageDialog.on_packageEdit_textChangedNewPythonPackageDialog.on_packageEdit_textChangedNewPythonPackageDialog.on_packageEdit_textChangedd#IIINewPythonPackageDialog.getDataNewPythonPackageDialog.getDataNewPythonPackageDialog.getData CKIACD6GGOpenSearchEditDialog (Module)OpenSearchEditDialog (Module)k5QQGOpenSearchEditDialog (Constructor)OpenSearchEditDialog (Constructor)OpenSearchEditDialog.__init__F4555OpenSearchEditDialogOpenSearchEditDialogOpenSearchEditDialog3___OpenSearchDialog.on_restoreButton_clickedOpenSearchDialog.on_restoreButton_clickedOpenSearchDialog.on_restoreButton_clicked|2YYYOpenSearchDialog.on_editButton_clickedOpenSearchDialog.on_editButton_clickedOpenSearchDialog.on_editButton_clicked1]]]OpenSearchDialog.on_deleteButton_clickedOpenSearchDialog.on_deleteButton_clickedOpenSearchDialog.on_deleteButton_clickedy0WWWOpenSearchDialog.on_addButton_clickedOpenSearchDialog.on_addButton_clickedOpenSearchDialog.on_addButton_clickeds/SSSOpenSearchDialog.__selectionChangedOpenSearchDialog.__selectionChangedOpenSearchDialog.__selectionChanged<.??OpenSearchDialog (Module)OpenSearchDialog (Module)offlrx~ &,28>DJPV\bhntz "(.4:@FLRX^djpv|AVBaClDyEFG"H-I8JEKSL_MmNwO~AVBaClDyEFG"H-I8JEKSL_MmNwO~PQRS$T0U;VFWRX`YjZr[y\]^_&`0a;bDcLdUe]fkguh}ijkl"m-n6pAqJrSs[tdunvvwxyz!{-|9}F~Q]it&.8AJS]fnv} (4?LWblv ".:EP]iu'/9A ,er4,UA???OpenSearchEngine.imageUrlOpenSearchEngine.imageUrlOpenSearchEngine.imageUrlL@999OpenSearchEngine.imageOpenSearchEngine.imageOpenSearchEngine.image^?EEEOpenSearchEngine.descriptionOpenSearchEngine.descriptionOpenSearchEngine.description|>YYYOpenSearchEngine.__suggestionsObtainedOpenSearchEngine.__suggestionsObtainedOpenSearchEngine.__suggestionsObtainedO=;;;OpenSearchEngine.__lt__OpenSearchEngine.__lt__OpenSearchEngine.__lt__j<MMMOpenSearchEngine.__imageObtainedOpenSearchEngine.__imageObtainedOpenSearchEngine.__imageObtainedO;;;;OpenSearchEngine.__eq__OpenSearchEngine.__eq__OpenSearchEngine.__eq__<:??OpenSearchEngine (Module)OpenSearchEngine (Module)_9II?OpenSearchEngine (Constructor)OpenSearchEngine (Constructor)OpenSearchEngine.__init__:8---OpenSearchEngineOpenSearchEngineOpenSearchEngine[7CCCOpenSearchEditDialog.acceptOpenSearchEditDialog.acceptOpenSearchEditDialog.accept ^P!2^mJOOOOpenSearchEngine.searchParametersOpenSearchEngine.searchParametersOpenSearchEngine.searchParametersaIGGGOpenSearchEngine.searchMethodOpenSearchEngine.searchMethodOpenSearchEngine.searchMethodsHSSSOpenSearchEngine.requestSuggestionsOpenSearchEngine.requestSuggestionsOpenSearchEngine.requestSuggestionsvGUUUOpenSearchEngine.providesSuggestionsOpenSearchEngine.providesSuggestionsOpenSearchEngine.providesSuggestionsdFIIIOpenSearchEngine.parseTemplateOpenSearchEngine.parseTemplateOpenSearchEngine.parseTemplateyEWWWOpenSearchEngine.networkAccessManagerOpenSearchEngine.networkAccessManagerOpenSearchEngine.networkAccessManagerID777OpenSearchEngine.nameOpenSearchEngine.nameOpenSearchEngine.nameXCAAAOpenSearchEngine.loadImageOpenSearchEngine.loadImageOpenSearchEngine.loadImageRB===OpenSearchEngine.isValidOpenSearchEngine.isValidOpenSearchEngine.isValid Q2pDQjSMMMOpenSearchEngine.setSearchMethodOpenSearchEngine.setSearchMethodOpenSearchEngine.setSearchMethodR]]]OpenSearchEngine.setNetworkAccessManagerOpenSearchEngine.setNetworkAccessManagerOpenSearchEngine.setNetworkAccessManagerRQ===OpenSearchEngine.setNameOpenSearchEngine.setNameOpenSearchEngine.setNamesPSSSOpenSearchEngine.setImageUrlAndLoadOpenSearchEngine.setImageUrlAndLoadOpenSearchEngine.setImageUrlAndLoad^OEEEOpenSearchEngine.setImageUrlOpenSearchEngine.setImageUrlOpenSearchEngine.setImageUrlUN???OpenSearchEngine.setImageOpenSearchEngine.setImageOpenSearchEngine.setImagegMKKKOpenSearchEngine.setDescriptionOpenSearchEngine.setDescriptionOpenSearchEngine.setDescriptionpLQQQOpenSearchEngine.searchUrlTemplateOpenSearchEngine.searchUrlTemplateOpenSearchEngine.searchUrlTemplateXKAAAOpenSearchEngine.searchUrlOpenSearchEngine.searchUrlOpenSearchEngine.searchUrl  zg[KKKOpenSearchEngine.suggestionsUrlOpenSearchEngine.suggestionsUrlOpenSearchEngine.suggestionsUrl|ZYYYOpenSearchEngine.suggestionsParametersOpenSearchEngine.suggestionsParametersOpenSearchEngine.suggestionsParameterspYQQQOpenSearchEngine.suggestionsMethodOpenSearchEngine.suggestionsMethodOpenSearchEngine.suggestionsMethodXaaaOpenSearchEngine.setSuggestionsUrlTemplateOpenSearchEngine.setSuggestionsUrlTemplateOpenSearchEngine.setSuggestionsUrlTemplateW___OpenSearchEngine.setSuggestionsParametersOpenSearchEngine.setSuggestionsParametersOpenSearchEngine.setSuggestionsParametersyVWWWOpenSearchEngine.setSuggestionsMethodOpenSearchEngine.setSuggestionsMethodOpenSearchEngine.setSuggestionsMethodyUWWWOpenSearchEngine.setSearchUrlTemplateOpenSearchEngine.setSearchUrlTemplateOpenSearchEngine.setSearchUrlTemplatevTUUUOpenSearchEngine.setSearchParametersOpenSearchEngine.setSearchParametersOpenSearchEngine.setSearchParameters o~/p7o|dYYYOpenSearchEngineModel.__enginesChangedOpenSearchEngineModel.__enginesChangedOpenSearchEngineModel.__enginesChangedFcIIOpenSearchEngineModel (Module)OpenSearchEngineModel (Module)nbSSIOpenSearchEngineModel (Constructor)OpenSearchEngineModel (Constructor)OpenSearchEngineModel.__init__Ia777OpenSearchEngineModelOpenSearchEngineModelOpenSearchEngineModely`WWWOpenSearchEngineAction.__imageChangedOpenSearchEngineAction.__imageChangedOpenSearchEngineAction.__imageChangedH_KKOpenSearchEngineAction (Module)OpenSearchEngineAction (Module)q^UUKOpenSearchEngineAction (Constructor)OpenSearchEngineAction (Constructor)OpenSearchEngineAction.__init__L]999OpenSearchEngineActionOpenSearchEngineActionOpenSearchEngineAction\[[[OpenSearchEngine.suggestionsUrlTemplateOpenSearchEngine.suggestionsUrlTemplateOpenSearchEngine.suggestionsUrlTemplate L5j2L>nAAOpenSearchManager (Module)OpenSearchManager (Module)bmKKAOpenSearchManager (Constructor)OpenSearchManager (Constructor)OpenSearchManager.__init__=l///OpenSearchManagerOpenSearchManagerOpenSearchManagerakGGGOpenSearchEngineModel.setDataOpenSearchEngineModel.setDataOpenSearchEngineModel.setDatadjIIIOpenSearchEngineModel.rowCountOpenSearchEngineModel.rowCountOpenSearchEngineModel.rowCountjiMMMOpenSearchEngineModel.removeRowsOpenSearchEngineModel.removeRowsOpenSearchEngineModel.removeRowsjhMMMOpenSearchEngineModel.headerDataOpenSearchEngineModel.headerDataOpenSearchEngineModel.headerData[gCCCOpenSearchEngineModel.flagsOpenSearchEngineModel.flagsOpenSearchEngineModel.flagsXfAAAOpenSearchEngineModel.dataOpenSearchEngineModel.dataOpenSearchEngineModel.datameOOOOpenSearchEngineModel.columnCountOpenSearchEngineModel.columnCountOpenSearchEngineModel.columnCount y%;yOv;;;OpenSearchManager.closeOpenSearchManager.closeOpenSearchManager.closemuOOOOpenSearchManager.allEnginesNamesOpenSearchManager.allEnginesNamesOpenSearchManager.allEnginesNames[tCCCOpenSearchManager.addEngineOpenSearchManager.addEngineOpenSearchManager.addEnginesaaaOpenSearchManager.__engineFromUrlAvailableOpenSearchManager.__engineFromUrlAvailableOpenSearchManager.__engineFromUrlAvailablesrSSSOpenSearchManager.__confirmAdditionOpenSearchManager.__confirmAdditionOpenSearchManager.__confirmAdditionpqQQQOpenSearchManager.__addEngineByUrlOpenSearchManager.__addEngineByUrlOpenSearchManager.__addEngineByUrlspSSSOpenSearchManager.__addEngineByFileOpenSearchManager.__addEngineByFileOpenSearchManager.__addEngineByFileyoWWWOpenSearchManager.__addEngineByEngineOpenSearchManager.__addEngineByEngineOpenSearchManager.__addEngineByEngine q<bpQQQOpenSearchManager.enginesDirectoryOpenSearchManager.enginesDirectoryOpenSearchManager.enginesDirectoryd~IIIOpenSearchManager.enginesCountOpenSearchManager.enginesCountOpenSearchManager.enginesCountj}MMMOpenSearchManager.enginesChangedOpenSearchManager.enginesChangedOpenSearchManager.enginesChangedp|QQQOpenSearchManager.engineForKeywordOpenSearchManager.engineForKeywordOpenSearchManager.engineForKeywordd{IIIOpenSearchManager.engineExistsOpenSearchManager.engineExistsOpenSearchManager.engineExistsRz===OpenSearchManager.engineOpenSearchManager.engineOpenSearchManager.enginesySSSOpenSearchManager.currentEngineNameOpenSearchManager.currentEngineNameOpenSearchManager.currentEngineNamegxKKKOpenSearchManager.currentEngineOpenSearchManager.currentEngineOpenSearchManager.currentEngine wcccOpenSearchManager.convertKeywordSearchToUrlOpenSearchManager.convertKeywordSearchToUrlOpenSearchManager.convertKeywordSearchToUrl HzKt%HpQQQOpenSearchManager.setCurrentEngineOpenSearchManager.setCurrentEngineOpenSearchManager.setCurrentEnginegKKKOpenSearchManager.saveDirectoryOpenSearchManager.saveDirectoryOpenSearchManager.saveDirectoryL999OpenSearchManager.saveOpenSearchManager.saveOpenSearchManager.savemOOOOpenSearchManager.restoreDefaultsOpenSearchManager.restoreDefaultsOpenSearchManager.restoreDefaultsdIIIOpenSearchManager.removeEngineOpenSearchManager.removeEngineOpenSearchManager.removeEnginegKKKOpenSearchManager.loadDirectoryOpenSearchManager.loadDirectoryOpenSearchManager.loadDirectoryL999OpenSearchManager.loadOpenSearchManager.loadOpenSearchManager.loadsSSSOpenSearchManager.keywordsForEngineOpenSearchManager.keywordsForEngineOpenSearchManager.keywordsForEngine]]]OpenSearchManager.generateEngineFileNameOpenSearchManager.generateEngineFileNameOpenSearchManager.generateEngineFileName 9I l/9R===OpenSearchWriter.__writeOpenSearchWriter.__writeOpenSearchWriter.__write<??OpenSearchWriter (Module)OpenSearchWriter (Module)_II?OpenSearchWriter (Constructor)OpenSearchWriter (Constructor)OpenSearchWriter.__init__:---OpenSearchWriterOpenSearchWriterOpenSearchWriterI777OpenSearchReader.readOpenSearchReader.readOpenSearchReader.readO;;;OpenSearchReader.__readOpenSearchReader.__readOpenSearchReader.__read< ??OpenSearchReader (Module)OpenSearchReader (Module): ---OpenSearchReaderOpenSearchReaderOpenSearchReader| YYYOpenSearchManager.setKeywordsForEngineOpenSearchManager.setKeywordsForEngineOpenSearchManager.setKeywordsForEnginey WWWOpenSearchManager.setEngineForKeywordOpenSearchManager.setEngineForKeywordOpenSearchManager.setEngineForKeyword| YYYOpenSearchManager.setCurrentEngineNameOpenSearchManager.setCurrentEngineNameOpenSearchManager.setCurrentEngineName 'tz.Hj'@!111PDFRender.nextLinePDFRender.nextLinePDFRender.nextLineL 999PDFRender.fontToPointsPDFRender.fontToPointsPDFRender.fontToPointsL999PDFRender.flushSegmentPDFRender.flushSegmentPDFRender.flushSegment=///PDFRender.endPagePDFRender.endPagePDFRender.endPage:---PDFRender.endPDFPDFRender.endPDFPDFRender.endPDF1'''PDFRender.addPDFRender.addPDFRender.addJ;;1PDFRender (Constructor)PDFRender (Constructor)PDFRender.__init__%PDFRenderPDFRenderPDFRenderI777PDFObjectTracker.xrefPDFObjectTracker.xrefPDFObjectTracker.xrefL999PDFObjectTracker.writePDFObjectTracker.writePDFObjectTracker.writeF555PDFObjectTracker.addPDFObjectTracker.addPDFObjectTracker.add_II?PDFObjectTracker (Constructor)PDFObjectTracker (Constructor)PDFObjectTracker.__init__:---PDFObjectTrackerPDFObjectTrackerPDFObjectTrackerL999OpenSearchWriter.writeOpenSearchWriter.writeOpenSearchWriter.write Rz42 Ra-GGGPackageDiagram.__buildClassesPackageDiagram.__buildClassesPackageDiagram.__buildClassesg,KKKPackageDiagram.__arrangeClassesPackageDiagram.__arrangeClassesPackageDiagram.__arrangeClassesd+IIIPackageDiagram.__addLocalClassPackageDiagram.__addLocalClassPackageDiagram.__addLocalClassm*OOOPackageDiagram.__addExternalClassPackageDiagram.__addExternalClassPackageDiagram.__addExternalClass8);;PackageDiagram (Module)PackageDiagram (Module)Y(EE;PackageDiagram (Constructor)PackageDiagram (Constructor)PackageDiagram.__init__4')))PackageDiagramPackageDiagramPackageDiagramG&99/PDFStyle (Constructor)PDFStyle (Constructor)PDFStyle.__init__"%PDFStylePDFStylePDFStyleC$333PDFRender.startPagePDFRender.startPagePDFRender.startPage@#111PDFRender.startPDFPDFRender.startPDFPDFRender.startPDF@"111PDFRender.setStylePDFRender.setStylePDFRender.setStyle [_i F9555PackageItem.setModelPackageItem.setModelPackageItem.setModel=8///PackageItem.paintPackageItem.paintPackageItem.paintU7???PackageItem.__createTextsPackageItem.__createTextsPackageItem.__createTexts[6CCCPackageItem.__calculateSizePackageItem.__calculateSizePackageItem.__calculateSize2555PackageItem (Module)PackageItem (Module)P4??5PackageItem (Constructor)PackageItem (Constructor)PackageItem.__init__+3###PackageItemPackageItemPackageItemC2333PackageDiagram.showPackageDiagram.showPackageDiagram.showO1;;;PackageDiagram.relayoutPackageDiagram.relayoutPackageDiagram.relayoutj0MMMPackageDiagram.__getCurrentShapePackageDiagram.__getCurrentShapePackageDiagram.__getCurrentShapes/SSSPackageDiagram.__createAssociationsPackageDiagram.__createAssociationsPackageDiagram.__createAssociationsm.OOOPackageDiagram.__buildModulesDictPackageDiagram.__buildModulesDictPackageDiagram.__buildModulesDict y*q2$[FCCCPasswordManager.__createKeyPasswordManager.__createKeyPasswordManager.__createKey:E==PasswordManager (Module)PasswordManager (Module)\DGG=PasswordManager (Constructor)PasswordManager (Constructor)PasswordManager.__init__7C+++PasswordManagerPasswordManagerPasswordManager-B%%%Parser.parseParser.parseParser.parseBA333Parser.__tokeneaterParser.__tokeneaterParser.__tokeneater<@///Parser.__addTokenParser.__addTokenParser.__addToken?ParserParserParserF>555PackageModel.getNamePackageModel.getNamePackageModel.getNameO=;;;PackageModel.getModulesPackageModel.getModulesPackageModel.getModulesL<999PackageModel.addModulePackageModel.addModulePackageModel.addModuleS;AA7PackageModel (Constructor)PackageModel (Constructor)PackageModel.__init__.:%%%PackageModelPackageModelPackageModel "nip'"dQIIIPasswordManager.removePasswordPasswordManager.removePasswordPasswordManager.removePasswordFP555PasswordManager.postPasswordManager.postPasswordManager.postRO===PasswordManager.getLoginPasswordManager.getLoginPasswordManager.getLoginFN555PasswordManager.fillPasswordManager.fillPasswordManager.fillIM777PasswordManager.closePasswordManager.closePasswordManager.closeIL777PasswordManager.clearPasswordManager.clearPasswordManager.clear^KEEEPasswordManager.allSiteNamesPasswordManager.allSiteNamesPasswordManager.allSiteNamesXJAAAPasswordManager.__stripUrlPasswordManager.__stripUrlPasswordManager.__stripUrlLI999PasswordManager.__loadPasswordManager.__loadPasswordManager.__loadXHAAAPasswordManager.__findFormPasswordManager.__findFormPasswordManager.__findFormGeeePasswordManager.__extractMultipartQueryItemsPasswordManager.__extractMultipartQueryItemsPasswordManager.__extractMultipartQueryItems :b ~%':R]===PasswordModel.removeRowsPasswordModel.removeRowsPasswordModel.removeRowsR\===PasswordModel.headerDataPasswordModel.headerDataPasswordModel.headerData@[111PasswordModel.dataPasswordModel.dataPasswordModel.dataUZ???PasswordModel.columnCountPasswordModel.columnCountPasswordModel.columnCountjYMMMPasswordModel.__passwordsChangedPasswordModel.__passwordsChangedPasswordModel.__passwordsChanged6X99PasswordModel (Module)PasswordModel (Module)VWCC9PasswordModel (Constructor)PasswordModel (Constructor)PasswordModel.__init__1V'''PasswordModelPasswordModelPasswordModelXUAAAPasswordManager.sitesCountPasswordManager.sitesCountPasswordManager.sitesCountRT===PasswordManager.siteInfoPasswordManager.siteInfoPasswordManager.siteInfoRS===PasswordManager.setLoginPasswordManager.setLoginPasswordManager.setLoginFR555PasswordManager.savePasswordManager.savePasswordManager.save "J dW"2i55PixmapCache (Module)PixmapCache (Module)Ph??5PixmapCache (Constructor)PixmapCache (Constructor)PixmapCache.__init__+g###PixmapCachePixmapCachePixmapCachefaaaPasswordsDialog.on_passwordsButton_clickedPasswordsDialog.on_passwordsButton_clickedPasswordsDialog.on_passwordsButton_clicked|eYYYPasswordsDialog.__calculateHeaderSizesPasswordsDialog.__calculateHeaderSizesPasswordsDialog.__calculateHeaderSizes:d==PasswordsDialog (Module)PasswordsDialog (Module)\cGG=PasswordsDialog (Constructor)PasswordsDialog (Constructor)PasswordsDialog.__init__7b+++PasswordsDialogPasswordsDialogPasswordsDialog0a33Passwords (Package)Passwords (Package)I[`CCCPasswordModel.showPasswordsPasswordModel.showPasswordsPasswordModel.showPasswordsd_IIIPasswordModel.setShowPasswordsPasswordModel.setShowPasswordsPasswordModel.setShowPasswordsL^999PasswordModel.rowCountPasswordModel.rowCountPasswordModel.rowCount h\(,hIt777PixmapDiagram.__printPixmapDiagram.__printPixmapDiagram.__print^sEEEPixmapDiagram.__initToolBarsPixmapDiagram.__initToolBarsPixmapDiagram.__initToolBarsgrKKKPixmapDiagram.__initContextMenuPixmapDiagram.__initContextMenuPixmapDiagram.__initContextMenu[qCCCPixmapDiagram.__initActionsPixmapDiagram.__initActionsPixmapDiagram.__initActionsLp999PixmapDiagram.__doZoomPixmapDiagram.__doZoomPixmapDiagram.__doZoomgoKKKPixmapDiagram.__adjustScrollBarPixmapDiagram.__adjustScrollBarPixmapDiagram.__adjustScrollBar6n99PixmapDiagram (Module)PixmapDiagram (Module)VmCC9PixmapDiagram (Constructor)PixmapDiagram (Constructor)PixmapDiagram.__init__1l'''PixmapDiagramPixmapDiagramPixmapDiagramIk777PixmapCache.getPixmapPixmapCache.getPixmapPixmapCache.getPixmapUj???PixmapCache.addSearchPathPixmapCache.addSearchPathPixmapCache.addSearchPath :)dz"o:255PluginAbout (Module)PluginAbout (Module)O~;;;PixmapDiagram.getStatusPixmapDiagram.getStatusPixmapDiagram.getStatus^}EEEPixmapDiagram.getDiagramNamePixmapDiagram.getDiagramNamePixmapDiagram.getDiagramNameU|???PixmapDiagram.__zoomResetPixmapDiagram.__zoomResetPixmapDiagram.__zoomResetO{;;;PixmapDiagram.__zoomOutPixmapDiagram.__zoomOutPixmapDiagram.__zoomOutLz999PixmapDiagram.__zoomInPixmapDiagram.__zoomInPixmapDiagram.__zoomInFy555PixmapDiagram.__zoomPixmapDiagram.__zoomPixmapDiagram.__zoomXxAAAPixmapDiagram.__showPixmapPixmapDiagram.__showPixmapPixmapDiagram.__showPixmapgwKKKPixmapDiagram.__showContextMenuPixmapDiagram.__showContextMenuPixmapDiagram.__showContextMenusvSSSPixmapDiagram.__printPreviewDiagramPixmapDiagram.__printPreviewDiagramPixmapDiagram.__printPreviewDiagram^uEEEPixmapDiagram.__printDiagramPixmapDiagram.__printDiagramPixmapDiagram.__printDiagram NC:N#sssPluginDetailsDialog.on_autoactivateCheckBox_clickedPluginDetailsDialog.on_autoactivateCheckBox_clickedPluginDetailsDialog.on_autoactivateCheckBox_clickedgggPluginDetailsDialog.on_activeCheckBox_clickedPluginDetailsDialog.on_activeCheckBox_clickedPluginDetailsDialog.on_activeCheckBox_clickedBEEPluginDetailsDialog (Module)PluginDetailsDialog (Module)hOOEPluginDetailsDialog (Constructor)PluginDetailsDialog (Constructor)PluginDetailsDialog.__init__C333PluginDetailsDialogPluginDetailsDialogPluginDetailsDialogqUUKPluginClassFormatError (Constructor)PluginClassFormatError (Constructor)PluginClassFormatError.__init__L999PluginClassFormatErrorPluginClassFormatErrorPluginClassFormatErrornSSIPluginActivationError (Constructor)PluginActivationError (Constructor)PluginActivationError.__init__I777PluginActivationErrorPluginActivationErrorPluginActivationError ` ~?adIIIPluginInfoDialog.__createEntryPluginInfoDialog.__createEntryPluginInfoDialog.__createEntrymOOOPluginInfoDialog.__activatePluginPluginInfoDialog.__activatePluginPluginInfoDialog.__activatePlugin<??PluginInfoDialog (Module)PluginInfoDialog (Module)_II?PluginInfoDialog (Constructor)PluginInfoDialog (Constructor)PluginInfoDialog.__init__:---PluginInfoDialogPluginInfoDialogPluginInfoDialog<??PluginExceptions (Module)PluginExceptions (Module)C333PluginError.__str__PluginError.__str__PluginError.__str__F 555PluginError.__repr__PluginError.__repr__PluginError.__repr__P ??5PluginError (Constructor)PluginError (Constructor)PluginError.__init__+ ###PluginErrorPluginErrorPluginError6 99PluginEricdoc (Module)PluginEricdoc (Module)6 99PluginEricapi (Module)PluginEricapi (Module) N FnNmOOOPluginInstallDialog.restartNeededPluginInstallDialog.restartNeededPluginInstallDialog.restartNeededBEEPluginInstallDialog (Module)PluginInstallDialog (Module)hOOEPluginInstallDialog (Constructor)PluginInstallDialog (Constructor)PluginInstallDialog.__init__C333PluginInstallDialogPluginInstallDialogPluginInstallDialogeeePluginInfoDialog.on_pluginList_itemActivatedPluginInfoDialog.on_pluginList_itemActivatedPluginInfoDialog.on_pluginList_itemActivateddIIIPluginInfoDialog.__showDetailsPluginInfoDialog.__showDetailsPluginInfoDialog.__showDetailspQQQPluginInfoDialog.__showContextMenuPluginInfoDialog.__showContextMenuPluginInfoDialog.__showContextMenugKKKPluginInfoDialog.__populateListPluginInfoDialog.__populateListPluginInfoDialog.__populateListsSSSPluginInfoDialog.__deactivatePluginPluginInfoDialog.__deactivatePluginPluginInfoDialog.__deactivatePlugin OSs |&YYYPluginInstallWidget.__uninstallPackagePluginInstallWidget.__uninstallPackagePluginInstallWidget.__uninstallPackagej%MMMPluginInstallWidget.__selectPagePluginInstallWidget.__selectPagePluginInstallWidget.__selectPaged$IIIPluginInstallWidget.__rollbackPluginInstallWidget.__rollbackPluginInstallWidget.__rollbackd#IIIPluginInstallWidget.__makedirsPluginInstallWidget.__makedirsPluginInstallWidget.__makedirsv"UUUPluginInstallWidget.__installPluginsPluginInstallWidget.__installPluginsPluginInstallWidget.__installPluginss!SSSPluginInstallWidget.__installPluginPluginInstallWidget.__installPluginPluginInstallWidget.__installPlugin ]]]PluginInstallWidget.__createArchivesListPluginInstallWidget.__createArchivesListPluginInstallWidget.__createArchivesListhOOEPluginInstallWidget (Constructor)PluginInstallWidget (Constructor)PluginInstallWidget.__init__C333PluginInstallWidgetPluginInstallWidgetPluginInstallWidget $b&^$7.+++PluginLoadErrorPluginLoadErrorPluginLoadErrorh-OOEPluginInstallWindow (Constructor)PluginInstallWindow (Constructor)PluginInstallWindow.__init__C,333PluginInstallWindowPluginInstallWindowPluginInstallWindowm+OOOPluginInstallWidget.restartNeededPluginInstallWidget.restartNeededPluginInstallWidget.restartNeeded#*sssPluginInstallWidget.on_removeArchivesButton_clickedPluginInstallWidget.on_removeArchivesButton_clickedPluginInstallWidget.on_removeArchivesButton_clicked)]]]PluginInstallWidget.on_buttonBox_clickedPluginInstallWidget.on_buttonBox_clickedPluginInstallWidget.on_buttonBox_clicked2(}}}PluginInstallWidget.on_archivesList_itemSelectionChangedPluginInstallWidget.on_archivesList_itemSelectionChangedPluginInstallWidget.on_archivesList_itemSelectionChanged'mmmPluginInstallWidget.on_addArchivesButton_clickedPluginInstallWidget.on_addArchivesButton_clickedPluginInstallWidget.on_addArchivesButton_clicked Qm0%Qp8QQQPluginManager.__insertPluginsPathsPluginManager.__insertPluginsPathsPluginManager.__insertPluginsPaths^7EEEPluginManager.__getShortInfoPluginManager.__getShortInfoPluginManager.__getShortInfo6gggPluginManager.__checkPluginsDownloadDirectoryPluginManager.__checkPluginsDownloadDirectoryPluginManager.__checkPluginsDownloadDirectorys5SSSPluginManager.__canDeactivatePluginPluginManager.__canDeactivatePluginPluginManager.__canDeactivatePluginm4OOOPluginManager.__canActivatePluginPluginManager.__canActivatePluginPluginManager.__canActivatePlugin83;;PluginManager (Package)PluginManager (Package)O6299PluginManager (Module)PluginManager (Module)V1CC9PluginManager (Constructor)PluginManager (Constructor)PluginManager.__init__10'''PluginManagerPluginManagerPluginManager\/GG=PluginLoadError (Constructor)PluginLoadError (Constructor)PluginLoadError.__init__ I#OIgAKKKPluginManager.getPluginApiFilesPluginManager.getPluginApiFilesPluginManager.getPluginApiFiles[@CCCPluginManager.finalizeSetupPluginManager.finalizeSetupPluginManager.finalizeSetupp?QQQPluginManager.deactivateVcsPluginsPluginManager.deactivateVcsPluginsPluginManager.deactivateVcsPluginsd>IIIPluginManager.deactivatePluginPluginManager.deactivatePluginPluginManager.deactivatePlugina=GGGPluginManager.activatePluginsPluginManager.activatePluginsPluginManager.activatePlugins^<EEEPluginManager.activatePluginPluginManager.activatePluginPluginManager.activatePluginp;QQQPluginManager.__pluginModulesExistPluginManager.__pluginModulesExistPluginManager.__pluginModulesExist|:YYYPluginManager.__pluginDirectoriesExistPluginManager.__pluginDirectoriesExistPluginManager.__pluginDirectoriesExist[9CCCPluginManager.__loadPluginsPluginManager.__loadPluginsPluginManager.__loadPlugins 1)Ru1vJUUUPluginManager.getPluginPreviewPixmapPluginManager.getPluginPreviewPixmapPluginManager.getPluginPreviewPixmapaIGGGPluginManager.getPluginObjectPluginManager.getPluginObjectPluginManager.getPluginObjectdHIIIPluginManager.getPluginModulesPluginManager.getPluginModulesPluginManager.getPluginModules^GEEEPluginManager.getPluginInfosPluginManager.getPluginInfosPluginManager.getPluginInfosyFWWWPluginManager.getPluginExeDisplayDataPluginManager.getPluginExeDisplayDataPluginManager.getPluginExeDisplayDatayEWWWPluginManager.getPluginDisplayStringsPluginManager.getPluginDisplayStringsPluginManager.getPluginDisplayStringsXDAAAPluginManager.getPluginDirPluginManager.getPluginDirPluginManager.getPluginDirdCIIIPluginManager.getPluginDetailsPluginManager.getPluginDetailsPluginManager.getPluginDetailsmBOOOPluginManager.getPluginConfigDataPluginManager.getPluginConfigDataPluginManager.getPluginConfigData 6I~)6S]]]PluginManager.removePluginFromSysModulesPluginManager.removePluginFromSysModulesPluginManager.removePluginFromSysModulesjRMMMPluginManager.preferencesChangedPluginManager.preferencesChangedPluginManager.preferencesChangedRQ===PluginManager.loadPluginPluginManager.loadPluginPluginManager.loadPlugingPKKKPluginManager.isValidPluginNamePluginManager.isValidPluginNamePluginManager.isValidPluginName^OEEEPluginManager.isPluginLoadedPluginManager.isPluginLoadedPluginManager.isPluginLoaded^NEEEPluginManager.isPluginActivePluginManager.isPluginActivePluginManager.isPluginActivemMOOOPluginManager.initOnDemandPluginsPluginManager.initOnDemandPluginsPluginManager.initOnDemandPluginsjLMMMPluginManager.initOnDemandPluginPluginManager.initOnDemandPluginPluginManager.initOnDemandPluginvKUUUPluginManager.getVcsSystemIndicatorsPluginManager.getVcsSystemIndicatorsPluginManager.getVcsSystemIndicators }Vp7}@]111PluginModulesErrorPluginModulesErrorPluginModulesErrort\WWMPluginModuleFormatError (Constructor)PluginModuleFormatError (Constructor)PluginModuleFormatError.__init__O[;;;PluginModuleFormatErrorPluginModuleFormatErrorPluginModuleFormatErrorLZ999PluginManagerPage.savePluginManagerPage.save|PluginManagerPage.saveYiiiPluginManagerPage.on_downloadDirButton_clickedPluginManagerPage.on_downloadDirButton_clicked|PluginManagerPage.on_downloadDirButton_clicked>XAAPluginManagerPage (Module)PluginManagerPage (Module)|bWKKAPluginManagerPage (Constructor)PluginManagerPage (Constructor)|PluginManagerPage.__init__=V///PluginManagerPagePluginManagerPage|PluginManagerPageXUAAAPluginManager.unloadPluginPluginManager.unloadPluginPluginManager.unloadPluginLT999PluginManager.shutdownPluginManager.shutdownPluginManager.shutdown ^<kNf;;;PluginRepositoryHandlerPluginRepositoryHandlerjPluginRepositoryHandler ecccPluginRepositoryDialog.getDownloadedPluginsPluginRepositoryDialog.getDownloadedPluginsPluginRepositoryDialog.getDownloadedPluginsd]]]PluginRepositoryDialog.__closeAndInstallPluginRepositoryDialog.__closeAndInstallPluginRepositoryDialog.__closeAndInstallHcKKPluginRepositoryDialog (Module)PluginRepositoryDialog (Module)qbUUKPluginRepositoryDialog (Constructor)PluginRepositoryDialog (Constructor)PluginRepositoryDialog.__init__La999PluginRepositoryDialogPluginRepositoryDialogPluginRepositoryDialog\`GG=PluginPathError (Constructor)PluginPathError (Constructor)PluginPathError.__init__7_+++PluginPathErrorPluginPathErrorPluginPathErrore^MMCPluginModulesError (Constructor)PluginModulesError (Constructor)PluginModulesError.__init__ >Qsn]]]PluginRepositoryHandler.endRepositoryUrlPluginRepositoryHandler.endRepositoryUrljPluginRepositoryHandler.endRepositoryUrllmOOOPluginRepositoryHandler.endPluginPluginRepositoryHandler.endPluginjPluginRepositoryHandler.endPluginflKKKPluginRepositoryHandler.endNamePluginRepositoryHandler.endNamejPluginRepositoryHandler.endNamerkSSSPluginRepositoryHandler.endFilenamePluginRepositoryHandler.endFilenamejPluginRepositoryHandler.endFilename{jYYYPluginRepositoryHandler.endDescriptionPluginRepositoryHandler.endDescriptionjPluginRepositoryHandler.endDescriptionliOOOPluginRepositoryHandler.endAuthorPluginRepositoryHandler.endAuthorjPluginRepositoryHandler.endAuthorIhMMPluginRepositoryHandler (Module)PluginRepositoryHandler (Module)jsgWWMPluginRepositoryHandler (Constructor)PluginRepositoryHandler (Constructor)jPluginRepositoryHandler.__init__ }.JD}Lv999PluginRepositoryWidgetPluginRepositoryWidgetPluginRepositoryWidgetuuUUUPluginRepositoryHandler.startPluginsPluginRepositoryHandler.startPluginsjPluginRepositoryHandler.startPluginsrtSSSPluginRepositoryHandler.startPluginPluginRepositoryHandler.startPluginjPluginRepositoryHandler.startPlugin seeePluginRepositoryHandler.startDocumentPluginsPluginRepositoryHandler.startDocumentPluginsjPluginRepositoryHandler.startDocumentPluginsorQQQPluginRepositoryHandler.getVersionPluginRepositoryHandler.getVersionjPluginRepositoryHandler.getVersionoqQQQPluginRepositoryHandler.endVersionPluginRepositoryHandler.endVersionjPluginRepositoryHandler.endVersioncpIIIPluginRepositoryHandler.endUrlPluginRepositoryHandler.endUrljPluginRepositoryHandler.endUrlioMMMPluginRepositoryHandler.endShortPluginRepositoryHandler.endShortjPluginRepositoryHandler.endShort n n}]]]PluginRepositoryWidget.__downloadPluginsPluginRepositoryWidget.__downloadPluginsPluginRepositoryWidget.__downloadPlugins |cccPluginRepositoryWidget.__downloadPluginDonePluginRepositoryWidget.__downloadPluginDonePluginRepositoryWidget.__downloadPluginDone{[[[PluginRepositoryWidget.__downloadPluginPluginRepositoryWidget.__downloadPluginPluginRepositoryWidget.__downloadPluginz___PluginRepositoryWidget.__downloadFileDonePluginRepositoryWidget.__downloadFileDonePluginRepositoryWidget.__downloadFileDoneyyWWWPluginRepositoryWidget.__downloadFilePluginRepositoryWidget.__downloadFilePluginRepositoryWidget.__downloadFilex[[[PluginRepositoryWidget.__downloadCancelPluginRepositoryWidget.__downloadCancelPluginRepositoryWidget.__downloadCancelqwUUKPluginRepositoryWidget (Constructor)PluginRepositoryWidget (Constructor)PluginRepositoryWidget.__init__ n><&uuuPluginRepositoryWidget.__proxyAuthenticationRequiredPluginRepositoryWidget.__proxyAuthenticationRequiredPluginRepositoryWidget.__proxyAuthenticationRequiredyWWWPluginRepositoryWidget.__populateListPluginRepositoryWidget.__populateListPluginRepositoryWidget.__populateListsSSSPluginRepositoryWidget.__isUpToDatePluginRepositoryWidget.__isUpToDatePluginRepositoryWidget.__isUpToDateaaaPluginRepositoryWidget.__formatDescriptionPluginRepositoryWidget.__formatDescriptionPluginRepositoryWidget.__formatDescription#sssPluginRepositoryWidget.__downloadRepositoryFileDonePluginRepositoryWidget.__downloadRepositoryFileDonePluginRepositoryWidget.__downloadRepositoryFileDone___PluginRepositoryWidget.__downloadProgressPluginRepositoryWidget.__downloadProgressPluginRepositoryWidget.__downloadProgress~eeePluginRepositoryWidget.__downloadPluginsDonePluginRepositoryWidget.__downloadPluginsDonePluginRepositoryWidget.__downloadPluginsDone {ky { cccPluginRepositoryWidget.on_buttonBox_clickedPluginRepositoryWidget.on_buttonBox_clickedPluginRepositoryWidget.on_buttonBox_clicked cccPluginRepositoryWidget.getDownloadedPluginsPluginRepositoryWidget.getDownloadedPluginsPluginRepositoryWidget.getDownloadedPluginsg KKKPluginRepositoryWidget.addEntryPluginRepositoryWidget.addEntryPluginRepositoryWidget.addEntrysSSSPluginRepositoryWidget.__updateListPluginRepositoryWidget.__updateListPluginRepositoryWidget.__updateListpQQQPluginRepositoryWidget.__sslErrorsPluginRepositoryWidget.__sslErrorsPluginRepositoryWidget.__sslErrors|YYYPluginRepositoryWidget.__selectedItemsPluginRepositoryWidget.__selectedItemsPluginRepositoryWidget.__selectedItemsgggPluginRepositoryWidget.__resortRepositoryListPluginRepositoryWidget.__resortRepositoryListPluginRepositoryWidget.__resortRepositoryList &>vnk&BEEPluginSyntaxChecker (Module)PluginSyntaxChecker (Module) cccPluginRepositoryWindow.__startPluginInstallPluginRepositoryWindow.__startPluginInstallPluginRepositoryWindow.__startPluginInstallqUUKPluginRepositoryWindow (Constructor)PluginRepositoryWindow (Constructor)PluginRepositoryWindow.__init__L999PluginRepositoryWindowPluginRepositoryWindowPluginRepositoryWindow5PluginRepositoryWidget.on_repositoryUrlEditButton_toggledPluginRepositoryWidget.on_repositoryUrlEditButton_toggledPluginRepositoryWidget.on_repositoryUrlEditButton_toggledD PluginRepositoryWidget.on_repositoryList_itemSelectionChangedPluginRepositoryWidget.on_repositoryList_itemSelectionChangedPluginRepositoryWidget.on_repositoryList_itemSelectionChanged> PluginRepositoryWidget.on_repositoryList_currentItemChangedPluginRepositoryWidget.on_repositoryList_currentItemChangedPluginRepositoryWidget.on_repositoryList_currentItemChanged ysP PluginUninstallWidget.on_pluginDirectoryCombo_currentIndexChangedPluginUninstallWidget.on_pluginDirectoryCombo_currentIndexChangedPluginUninstallWidget.on_pluginDirectoryCombo_currentIndexChanged cccPluginUninstallWidget.on_buttonBox_acceptedPluginUninstallWidget.on_buttonBox_acceptedPluginUninstallWidget.on_buttonBox_accepted[[[PluginUninstallWidget.__uninstallPluginPluginUninstallWidget.__uninstallPluginPluginUninstallWidget.__uninstallPluginnSSIPluginUninstallWidget (Constructor)PluginUninstallWidget (Constructor)PluginUninstallWidget.__init__I777PluginUninstallWidgetPluginUninstallWidgetPluginUninstallWidgetFIIPluginUninstallDialog (Module)PluginUninstallDialog (Module)nSSIPluginUninstallDialog (Constructor)PluginUninstallDialog (Constructor)PluginUninstallDialog.__init__I777PluginUninstallDialogPluginUninstallDialogPluginUninstallDialog8;;PluginTabnanny (Module)PluginTabnanny (Module) HCE1HL(OOPluginWizardQInputDialog (Module)PluginWizardQInputDialog (Module)J'MMPluginWizardQFontDialog (Module)PluginWizardQFontDialog (Module)J&MMPluginWizardQFileDialog (Module)PluginWizardQFileDialog (Module)L%OOPluginWizardQColorDialog (Module)PluginWizardQColorDialog (Module)D$GGPluginWizardPyRegExp (Module)PluginWizardPyRegExp (Module)>#AAPluginVmWorkspace (Module)PluginVmWorkspace (Module):"==PluginVmTabview (Module)PluginVmTabview (Module):!==PluginVmMdiArea (Module)PluginVmMdiArea (Module)> AAPluginVmListspace (Module)PluginVmListspace (Module)BEEPluginVcsSubversion (Module)PluginVcsSubversion (Module)8;;PluginVcsPySvn (Module)PluginVcsPySvn (Module)nSSIPluginUninstallWindow (Constructor)PluginUninstallWindow (Constructor)PluginUninstallWindow.__init__I777PluginUninstallWindowPluginUninstallWindowPluginUninstallWindow Kn?i*tKa4GGGPreferencesLexer.defaultPaperPreferencesLexer.defaultPaperPreferencesLexer.defaultPaper^3EEEPreferencesLexer.defaultFontPreferencesLexer.defaultFontPreferencesLexer.defaultFonta2GGGPreferencesLexer.defaultColorPreferencesLexer.defaultColorPreferencesLexer.defaultColord1IIIPreferencesLexer.defaulEolFillPreferencesLexer.defaulEolFillPreferencesLexer.defaulEolFillL0999PreferencesLexer.colorPreferencesLexer.colorPreferencesLexer.color777PreferencesLexerErrorPreferencesLexerErrorPreferencesLexerErrorU=???PreferencesLexer.setPaperPreferencesLexer.setPaperPreferencesLexer.setPaperR<===PreferencesLexer.setFontPreferencesLexer.setFontPreferencesLexer.setFont[;CCCPreferencesLexer.setEolFillPreferencesLexer.setEolFillPreferencesLexer.setEolFillU:???PreferencesLexer.setColorPreferencesLexer.setColorPreferencesLexer.setColorL9999PreferencesLexer.paperPreferencesLexer.paperPreferencesLexer.paperU8???PreferencesLexer.languagePreferencesLexer.languagePreferencesLexer.languageI7777PreferencesLexer.fontPreferencesLexer.fontPreferencesLexer.fontR6===PreferencesLexer.eolFillPreferencesLexer.eolFillPreferencesLexer.eolFill^5EEEPreferencesLexer.descriptionPreferencesLexer.descriptionPreferencesLexer.description 85G+^1m82L55PrinterPage (Module)PrinterPage (Module)}PK??5PrinterPage (Constructor)PrinterPage (Constructor)}PrinterPage.__init__+J###PrinterPagePrinterPage}PrinterPage@I111Printer.formatPagePrinter.formatPagePrinter.formatPage*H--Printer (Module)Printer (Module)DG77-Printer (Constructor)Printer (Constructor)Printer.__init__FPrinterPrinterPrinteraEGGGPrefs.initWebSettingsDefaultsPrefs.initWebSettingsDefaultsPrefs.initWebSettingsDefaultsDPrefsPrefsPrefsCccYPreferencesLexerLanguageError (Constructor)PreferencesLexerLanguageError (Constructor)PreferencesLexerLanguageError.__init__aBGGGPreferencesLexerLanguageErrorPreferencesLexerLanguageErrorPreferencesLexerLanguageErroraAGGGPreferencesLexerError.__str__PreferencesLexerError.__str__PreferencesLexerError.__str__d@IIIPreferencesLexerError.__repr__PreferencesLexerError.__repr__PreferencesLexerError.__repr__ /n4A/sWSSSProgramsDialog.__createProgramEntryProgramsDialog.__createProgramEntryProgramsDialog.__createProgramEntry^VEEEProgramsDialog.__createEntryProgramsDialog.__createEntryProgramsDialog.__createEntry8U;;ProgramsDialog (Module)ProgramsDialog (Module)YTEE;ProgramsDialog (Constructor)ProgramsDialog (Constructor)ProgramsDialog.__init__4S)))ProgramsDialogProgramsDialogProgramsDialog]REEEProfileTreeWidgetItem.__lt__ProfileTreeWidgetItem.__lt__ProfileTreeWidgetItem.__lt__`QGGGProfileTreeWidgetItem.__getNCProfileTreeWidgetItem.__getNCProfileTreeWidgetItem.__getNCHP777ProfileTreeWidgetItemProfileTreeWidgetItemProfileTreeWidgetItem:O---PrinterPage.savePrinterPage.save}PrinterPage.saveLN999PrinterPage.polishPagePrinterPage.polishPage}PrinterPage.polishPageMeeePrinterPage.on_printheaderFontButton_clickedPrinterPage.on_printheaderFontButton_clicked}PrinterPage.on_printheaderFontButton_clicked fC}fgbKKKProject.__binaryTranslationFileProject.__binaryTranslationFileProject.__binaryTranslationFileIa777Project.__addToOthersProject.__addToOthersProject.__addToOthers^`EEEProject.__addSingleDirectoryProject.__addSingleDirectoryProject.__addSingleDirectoryg_KKKProject.__addRecursiveDirectoryProject.__addRecursiveDirectoryProject.__addRecursiveDirectory,^//Project (Package)Project (Package)l*]--Project (Module)Project (Module)D\77-Project (Constructor)Project (Constructor)Project.__init__[ProjectProjectProjectCZ333ProgramsDialog.showProgramsDialog.showProgramsDialog.showYiiiProgramsDialog.on_programsSearchButton_clickedProgramsDialog.on_programsSearchButton_clickedProgramsDialog.on_programsSearchButton_clickedsXSSSProgramsDialog.on_buttonBox_clickedProgramsDialog.on_buttonBox_clickedProgramsDialog.on_buttonBox_clicked u>3eu@l111Project.__initDataProject.__initDataProject.__initDataXkAAAProject.__doSearchNewFilesProject.__doSearchNewFilesProject.__doSearchNewFilesOj;;;Project.__deleteSessionProject.__deleteSessionProject.__deleteSessiongiKKKProject.__deleteDebugPropertiesProject.__deleteDebugPropertiesProject.__deleteDebugPropertiesahGGGProject.__createZipDirEntriesProject.__createZipDirEntriesProject.__createZipDirEntriesdgIIIProject.__createSnapshotSourceProject.__createSnapshotSourceProject.__createSnapshotSourceUf???Project.__closeAllWindowsProject.__closeAllWindowsProject.__closeAllWindowsIe777Project.__clearRecentProject.__clearRecentProject.__clearRecentgdKKKProject.__checkProjectFileGroupProject.__checkProjectFileGroupProject.__checkProjectFileGroupUc???Project.__checkFilesExistProject.__checkFilesExistProject.__checkFilesExist `Ao +`avGGGProject.__readDebugPropertiesProject.__readDebugPropertiesProject.__readDebugPropertiesduIIIProject.__pluginExtractVersionProject.__pluginExtractVersionProject.__pluginExtractVersionytWWWProject.__pluginCreateSnapshotArchiveProject.__pluginCreateSnapshotArchiveProject.__pluginCreateSnapshotArchiveasGGGProject.__pluginCreatePkgListProject.__pluginCreatePkgListProject.__pluginCreatePkgListarGGGProject.__pluginCreateArchiveProject.__pluginCreateArchiveProject.__pluginCreateArchiveFq555Project.__openRecentProject.__openRecentProject.__openRecent=p///Project.__migrateProject.__migrateProject.__migrateFo555Project.__loadRecentProject.__loadRecentProject.__loadRecentXnAAAProject.__initProjectTypesProject.__initProjectTypesProject.__initProjectTypesamGGGProject.__initDebugPropertiesProject.__initDebugPropertiesProject.__initDebugProperties bh"T[bXAAAProject.__showCodeCoverageProject.__showCodeCoverageProject.__showCodeCoverageR===Project.__searchNewFilesProject.__searchNewFilesProject.__searchNewFilesF555Project.__saveRecentProject.__saveRecentProject.__saveRecentL~999Project.__readXMLTasksProject.__readXMLTasksProject.__readXMLTasksR}===Project.__readXMLSessionProject.__readXMLSessionProject.__readXMLSessionR|===Project.__readXMLProjectProject.__readXMLProjectProject.__readXMLProjectj{MMMProject.__readXMLDebugPropertiesProject.__readXMLDebugPropertiesProject.__readXMLDebugProperties^zEEEProject.__readUserPropertiesProject.__readUserPropertiesProject.__readUserPropertiesCy333Project.__readTasksProject.__readTasksProject.__readTasksIx777Project.__readSessionProject.__readSessionProject.__readSessionIw777Project.__readProjectProject.__readProjectProject.__readProject ^>d#^a GGGProject.__showDebugPropertiesProject.__showDebugPropertiesProject.__showDebugProperties^ EEEProject.__showContextMenuVCSProject.__showContextMenuVCSProject.__showContextMenuVCSaGGGProject.__showContextMenuShowProject.__showContextMenuShowProject.__showContextMenuShowgKKKProject.__showContextMenuRecentProject.__showContextMenuRecentProject.__showContextMenuRecentpQQQProject.__showContextMenuPackagersProject.__showContextMenuPackagersProject.__showContextMenuPackagersmOOOProject.__showContextMenuGraphicsProject.__showContextMenuGraphicsProject.__showContextMenuGraphicsgKKKProject.__showContextMenuChecksProject.__showContextMenuChecksProject.__showContextMenuChecksgKKKProject.__showContextMenuApiDocProject.__showContextMenuApiDocProject.__showContextMenuApiDocU???Project.__showCodeMetricsProject.__showCodeMetricsProject.__showCodeMetrics #3n%o L999Project.__writeSessionProject.__writeSessionProject.__writeSessionL999Project.__writeProjectProject.__writeProjectProject.__writeProjectdIIIProject.__writeDebugPropertiesProject.__writeDebugPropertiesProject.__writeDebugPropertiesF555Project.__syncRecentProject.__syncRecentProject.__syncRecentaGGGProject.__statusMonitorStatusProject.__statusMonitorStatusProject.__statusMonitorStatus^EEEProject.__showUserPropertiesProject.__showUserPropertiesProject.__showUserPropertiesR===Project.__showPropertiesProject.__showPropertiesProject.__showPropertiesU???Project.__showProfileDataProject.__showProfileDataProject.__showProfileData@ 111Project.__showMenuProject.__showMenuProject.__showMenug KKKProject.__showLexerAssociationsProject.__showLexerAssociationsProject.__showLexerAssociationsp QQQProject.__showFiletypeAssociationsProject.__showFiletypeAssociationsProject.__showFiletypeAssociations $Si,`y$R"===Project.addResourceFilesProject.addResourceFilesProject.addResourceFilesL!999Project.addResourceDirProject.addResourceDirProject.addResourceDirL 999Project.addOthersFilesProject.addOthersFilesProject.addOthersFilesF555Project.addOthersDirProject.addOthersDirProject.addOthersDirC333Project.addLanguageProject.addLanguageProject.addLanguageC333Project.addIdlFilesProject.addIdlFilesProject.addIdlFiles=///Project.addIdlDirProject.addIdlDirProject.addIdlDir:---Project.addFilesProject.addFilesProject.addFilesF555Project.addE4ActionsProject.addE4ActionsProject.addE4ActionsF555Project.addDirectoryProject.addDirectoryProject.addDirectoryU???Project.__writeXMLProjectProject.__writeXMLProjectProject.__writeXMLProjectaGGGProject.__writeUserPropertiesProject.__writeUserPropertiesProject.__writeUserPropertiesF555Project.__writeTasksProject.__writeTasksProject.__writeTasks Ih+bZII.777Project.copyDirectoryProject.copyDirectoryProject.copyDirectoryF-555Project.closeProjectProject.closeProjectProject.closeProjecty,WWWProject.clearStatusMonitorCachedStateProject.clearStatusMonitorCachedStateProject.clearStatusMonitorCachedStateL+999Project.checkVCSStatusProject.checkVCSStatusProject.checkVCSStatus[*CCCProject.checkSecurityStringProject.checkSecurityStringProject.checkSecurityStringX)AAAProject.checkLanguageFilesProject.checkLanguageFilesProject.checkLanguageFiles@(111Project.checkDirtyProject.checkDirtyProject.checkDirty@'111Project.appendFileProject.appendFileProject.appendFile@&111Project.addUiFilesProject.addUiFilesProject.addUiFiles:%---Project.addUiDirProject.addUiDirProject.addUiDirL$999Project.addSourceFilesProject.addSourceFilesProject.addSourceFilesF#555Project.addSourceDirProject.addSourceDirProject.addSourceDir @k`&az@7:+++Project.getMenuProject.getMenuProject.getMenuI9777Project.getMainScriptProject.getMainScriptProject.getMainScript:8---Project.getFilesProject.getFilesProject.getFiles[7CCCProject.getEditorLexerAssocProject.getEditorLexerAssocProject.getEditorLexerAssocm6OOOProject.getDefaultSourceExtensionProject.getDefaultSourceExtensionProject.getDefaultSourceExtensionR5===Project.getDebugPropertyProject.getDebugPropertyProject.getDebugProperty74+++Project.getDataProject.getDataProject.getData@3111Project.getActionsProject.getActionsProject.getActionsj2MMMProject.getAbsoluteUniversalPathProject.getAbsoluteUniversalPathProject.getAbsoluteUniversalPathX1AAAProject.deleteLanguageFileProject.deleteLanguageFileProject.deleteLanguageFile@0111Project.deleteFileProject.deleteFileProject.deleteFileO/;;;Project.deleteDirectoryProject.deleteDirectoryProject.deleteDirectory PwfCPOE;;;Project.getRelativePathProject.getRelativePathProject.getRelativePathOD;;;Project.getProjectTypesProject.getProjectTypesProject.getProjectTypesLC999Project.getProjectTypeProject.getProjectTypeProject.getProjectTypegBKKKProject.getProjectSpellLanguageProject.getProjectSpellLanguageProject.getProjectSpellLanguageLA999Project.getProjectPathProject.getProjectPathProject.getProjectPathg@KKKProject.getProjectManagementDirProject.getProjectManagementDirProject.getProjectManagementDirX?AAAProject.getProjectLanguageProject.getProjectLanguageProject.getProjectLanguageL>999Project.getProjectFileProject.getProjectFileProject.getProjectFiled=IIIProject.getProjectDictionariesProject.getProjectDictionariesProject.getProjectDictionariesI<777Project.getMostRecentProject.getMostRecentProject.getMostRecent:;---Project.getModelProject.getModelProject.getModel )Pp ho)CP333Project.initActionsProject.initActionsProject.initActionsLO999Project.hasProjectTypeProject.hasProjectTypeProject.hasProjectType:N---Project.hasEntryProject.hasEntryProject.hasEntryjMMMMProject.handlePreferencesChangedProject.handlePreferencesChangedProject.handlePreferencesChangedjLMMMProject.handleApplicationDiagramProject.handleApplicationDiagramProject.handleApplicationDiagram4K)))Project.getVcsProject.getVcsProject.getVcsaJGGGProject.getTranslationPatternProject.getTranslationPatternProject.getTranslationPatternjIMMMProject.getStatusMonitorIntervalProject.getStatusMonitorIntervalProject.getStatusMonitorIntervalpHQQQProject.getStatusMonitorAutoUpdateProject.getStatusMonitorAutoUpdateProject.getStatusMonitorAutoUpdate@G111Project.getSourcesProject.getSourcesProject.getSourcesjFMMMProject.getRelativeUniversalPathProject.getRelativeUniversalPathProject.getRelativeUniversalPath 3w1S)3I]777Project.moveDirectoryProject.moveDirectoryProject.moveDirectoryO\;;;Project.isProjectSourceProject.isProjectSourceProject.isProjectSourceU[???Project.isProjectResourceProject.isProjectResourceProject.isProjectResourceXZAAAProject.isProjectInterfaceProject.isProjectInterfaceProject.isProjectInterfaceIY777Project.isProjectFormProject.isProjectFormProject.isProjectFormIX777Project.isProjectFileProject.isProjectFileProject.isProjectFile4W)))Project.isOpenProject.isOpenProject.isOpen7V+++Project.isDirtyProject.isDirtyProject.isDirtygUKKKProject.isDebugPropertiesLoadedProject.isDebugPropertiesLoadedProject.isDebugPropertiesLoaded7T+++Project.initVCSProject.initVCSProject.initVCSCS333Project.initToolbarProject.initToolbarProject.initToolbar:R---Project.initMenuProject.initMenuProject.initMenuIQ777Project.initFileTypesProject.initFileTypesProject.initFileTypes Fbx&6FRi===Project.renameMainScriptProject.renameMainScriptProject.renameMainScriptUh???Project.renameFileInPdataProject.renameFileInPdataProject.renameFileInPdata@g111Project.renameFileProject.renameFileProject.renameFileXfAAAProject.removeLanguageFileProject.removeLanguageFileProject.removeLanguageFile@e111Project.removeFileProject.removeFileProject.removeFileOd;;;Project.removeE4ActionsProject.removeE4ActionsProject.removeE4ActionsOc;;;Project.removeDirectoryProject.removeDirectoryProject.removeDirectory[bCCCProject.registerProjectTypeProject.registerProjectTypeProject.registerProjectTypeCa333Project.othersAddedProject.othersAddedProject.othersAddedC`333Project.openProjectProject.openProjectProject.openProjectX_AAAProject.newProjectAddFilesProject.newProjectAddFilesProject.newProjectAddFiles@^111Project.newProjectProject.newProjectProject.newProject +eJW+auGGGProject.startswithProjectPathProject.startswithProjectPathProject.startswithProjectPathXtAAAProject.startStatusMonitorProject.startStatusMonitorProject.startStatusMonitorjsMMMProject.setStatusMonitorIntervalProject.setStatusMonitorIntervalProject.setStatusMonitorIntervalprQQQProject.setStatusMonitorAutoUpdateProject.setStatusMonitorAutoUpdateProject.setStatusMonitorAutoUpdate:q---Project.setDirtyProject.setDirtyProject.setDirty@p111Project.setDbgInfoProject.setDbgInfoProject.setDbgInfo7o+++Project.setDataProject.setDataProject.setDataIn777Project.saveProjectAsProject.saveProjectAsProject.saveProjectAsCm333Project.saveProjectProject.saveProjectProject.saveProjectLl999Project.saveAllScriptsProject.saveAllScriptsProject.saveAllScriptsLk999Project.repopulateItemProject.repopulateItemProject.repopulateItemIj777Project.reopenProjectProject.reopenProjectProject.reopenProject >DN3>sSSSProjectBaseBrowser._collapseAllDirsProjectBaseBrowser._collapseAllDirsProjectBaseBrowser._collapseAllDirs|~YYYProjectBaseBrowser.__modelRowsInsertedProjectBaseBrowser.__modelRowsInsertedProjectBaseBrowser.__modelRowsInsertedm}OOOProjectBaseBrowser.__checkHookKeyProjectBaseBrowser.__checkHookKeyProjectBaseBrowser.__checkHookKey@|CCProjectBaseBrowser (Module)ProjectBaseBrowser (Module)e{MMCProjectBaseBrowser (Constructor)ProjectBaseBrowser (Constructor)ProjectBaseBrowser.__init__@z111ProjectBaseBrowserProjectBaseBrowserProjectBaseBrowser^yEEEProject.vcsSoftwareAvailableProject.vcsSoftwareAvailableProject.vcsSoftwareAvailableOx;;;Project.updateFileTypesProject.updateFileTypesProject.updateFileTypesawGGGProject.unregisterProjectTypeProject.unregisterProjectTypeProject.unregisterProjectTypeUv???Project.stopStatusMonitorProject.stopStatusMonitorProject.stopStatusMonitor nt~ nkkkProjectBaseBrowser._disconnectExpandedCollapsedProjectBaseBrowser._disconnectExpandedCollapsedProjectBaseBrowser._disconnectExpandedCollapsedvUUUProjectBaseBrowser._createPopupMenusProjectBaseBrowser._createPopupMenusProjectBaseBrowser._createPopupMenussSSSProjectBaseBrowser._copyToClipboardProjectBaseBrowser._copyToClipboardProjectBaseBrowser._copyToClipboard]]]ProjectBaseBrowser._contextMenuRequestedProjectBaseBrowser._contextMenuRequestedProjectBaseBrowser._contextMenuRequestedeeeProjectBaseBrowser._connectExpandedCollapsedProjectBaseBrowser._connectExpandedCollapsedProjectBaseBrowser._connectExpandedCollapsedaGGGProjectBaseBrowser._configureProjectBaseBrowser._configureProjectBaseBrowser._configureaaaProjectBaseBrowser._completeRepopulateItemProjectBaseBrowser._completeRepopulateItemProjectBaseBrowser._completeRepopulateItem p=DpaGGGProjectBaseBrowser._removeDirProjectBaseBrowser._removeDirProjectBaseBrowser._removeDirm OOOProjectBaseBrowser._projectOpenedProjectBaseBrowser._projectOpenedProjectBaseBrowser._projectOpenedm OOOProjectBaseBrowser._projectClosedProjectBaseBrowser._projectClosedProjectBaseBrowser._projectClosed ___ProjectBaseBrowser._prepareRepopulateItemProjectBaseBrowser._prepareRepopulateItemProjectBaseBrowser._prepareRepopulateItemd IIIProjectBaseBrowser._newProjectProjectBaseBrowser._newProjectProjectBaseBrowser._newProjects SSSProjectBaseBrowser._initMenusAndVcsProjectBaseBrowser._initMenusAndVcsProjectBaseBrowser._initMenusAndVcssSSSProjectBaseBrowser._initHookMethodsProjectBaseBrowser._initHookMethodsProjectBaseBrowser._initHookMethodsmOOOProjectBaseBrowser._expandAllDirsProjectBaseBrowser._expandAllDirsProjectBaseBrowser._expandAllDirs U2IMU[[[ProjectBaseBrowser._showContextMenuBackProjectBaseBrowser._showContextMenuBackProjectBaseBrowser._showContextMenuBacksSSSProjectBaseBrowser._showContextMenuProjectBaseBrowser._showContextMenuProjectBaseBrowser._showContextMenusSSSProjectBaseBrowser._setItemSelectedProjectBaseBrowser._setItemSelectedProjectBaseBrowser._setItemSelected]]]ProjectBaseBrowser._setItemRangeSelectedProjectBaseBrowser._setItemRangeSelectedProjectBaseBrowser._setItemRangeSelectedvUUUProjectBaseBrowser._selectSingleItemProjectBaseBrowser._selectSingleItemProjectBaseBrowser._selectSingleItemmOOOProjectBaseBrowser._selectEntriesProjectBaseBrowser._selectEntriesProjectBaseBrowser._selectEntriesdIIIProjectBaseBrowser._renameFileProjectBaseBrowser._renameFileProjectBaseBrowser._renameFiledIIIProjectBaseBrowser._removeFileProjectBaseBrowser._removeFileProjectBaseBrowser._removeFile ,lm,aGGGProjectBaseBrowser.selectFileProjectBaseBrowser.selectFileProjectBaseBrowser.selectFilesSSSProjectBaseBrowser.removeHookMethodProjectBaseBrowser.removeHookMethodProjectBaseBrowser.removeHookMethoddIIIProjectBaseBrowser.currentItemProjectBaseBrowser.currentItemProjectBaseBrowser.currentItemeeeProjectBaseBrowser.addHookMethodAndMenuEntryProjectBaseBrowser.addHookMethodAndMenuEntryProjectBaseBrowser.addHookMethodAndMenuEntryjMMMProjectBaseBrowser.addHookMethodProjectBaseBrowser.addHookMethodProjectBaseBrowser.addHookMethod]]]ProjectBaseBrowser._showContextMenuMultiProjectBaseBrowser._showContextMenuMultiProjectBaseBrowser._showContextMenuMulti cccProjectBaseBrowser._showContextMenuDirMultiProjectBaseBrowser._showContextMenuDirMultiProjectBaseBrowser._showContextMenuDirMulti|YYYProjectBaseBrowser._showContextMenuDirProjectBaseBrowser._showContextMenuDirProjectBaseBrowser._showContextMenuDir sz v;s['CCCProjectBrowser.__newProjectProjectBrowser.__newProjectProjectBrowser.__newProjectg&KKKProjectBrowser.__currentChangedProjectBrowser.__currentChangedProjectBrowser.__currentChanged8%;;ProjectBrowser (Module)ProjectBrowser (Module)Y$EE;ProjectBrowser (Constructor)ProjectBrowser (Constructor)ProjectBrowser.__init__4#)))ProjectBrowserProjectBrowserProjectBrowsers"SSSProjectBaseBrowser.selectVCSEntriesProjectBaseBrowser.selectVCSEntriesProjectBaseBrowser.selectVCSEntries|!YYYProjectBaseBrowser.selectVCSDirEntriesProjectBaseBrowser.selectVCSDirEntriesProjectBaseBrowser.selectVCSDirEntriesy WWWProjectBaseBrowser.selectLocalEntriesProjectBaseBrowser.selectLocalEntriesProjectBaseBrowser.selectLocalEntries]]]ProjectBaseBrowser.selectLocalDirEntriesProjectBaseBrowser.selectLocalDirEntriesProjectBaseBrowser.selectLocalDirEntries y2-Vym/OOOProjectBrowser.getProjectBrowsersProjectBrowser.getProjectBrowsersProjectBrowser.getProjectBrowsersj.MMMProjectBrowser.getProjectBrowserProjectBrowser.getProjectBrowserProjectBrowser.getProjectBrowserj-MMMProjectBrowser.__vcsStateChangedProjectBrowser.__vcsStateChangedProjectBrowser.__vcsStateChangedg,KKKProjectBrowser.__setSourcesIconProjectBrowser.__setSourcesIconProjectBrowser.__setSourcesIcony+WWWProjectBrowser.__setBrowsersAvailableProjectBrowser.__setBrowsersAvailableProjectBrowser.__setBrowsersAvailable*___ProjectBrowser.__projectPropertiesChangedProjectBrowser.__projectPropertiesChangedProjectBrowser.__projectPropertiesChangedd)IIIProjectBrowser.__projectOpenedProjectBrowser.__projectOpenedProjectBrowser.__projectOpenedd(IIIProjectBrowser.__projectClosedProjectBrowser.__projectClosedProjectBrowser.__projectClosed 3 X3O9;;;ProjectBrowserItemMixinProjectBrowserItemMixinProjectBrowserItemMixinD8GGProjectBrowserHelper (Module)ProjectBrowserHelper (Module) B7EEProjectBrowserFlags (Module)ProjectBrowserFlags (Module)q6UUKProjectBrowserFileItem (Constructor)ProjectBrowserFileItem (Constructor)ProjectBrowserFileItem.__init__L5999ProjectBrowserFileItemProjectBrowserFileItemProjectBrowserFileItem4__UProjectBrowserDirectoryItem (Constructor)ProjectBrowserDirectoryItem (Constructor)ProjectBrowserDirectoryItem.__init__[3CCCProjectBrowserDirectoryItemProjectBrowserDirectoryItemProjectBrowserDirectoryItemR2===ProjectBrowser.showEventProjectBrowser.showEventProjectBrowser.showEvent1[[[ProjectBrowser.handlePreferencesChangedProjectBrowser.handlePreferencesChangedProjectBrowser.handlePreferencesChangedp0QQQProjectBrowser.handleEditorChangedProjectBrowser.handleEditorChangedProjectBrowser.handleEditorChanged a  aCA333ProjectBrowserModelProjectBrowserModelProjectBrowserModelv@UUUProjectBrowserItemMixin.setVcsStatusProjectBrowserItemMixin.setVcsStatusProjectBrowserItemMixin.setVcsStatuss?SSSProjectBrowserItemMixin.setVcsStateProjectBrowserItemMixin.setVcsStateProjectBrowserItemMixin.setVcsStatev>UUUProjectBrowserItemMixin.getTextColorProjectBrowserItemMixin.getTextColorProjectBrowserItemMixin.getTextColor=[[[ProjectBrowserItemMixin.getProjectTypesProjectBrowserItemMixin.getProjectTypesProjectBrowserItemMixin.getProjectTypesv<UUUProjectBrowserItemMixin.addVcsStatusProjectBrowserItemMixin.addVcsStatusProjectBrowserItemMixin.addVcsStatus|;YYYProjectBrowserItemMixin.addProjectTypeProjectBrowserItemMixin.addProjectTypeProjectBrowserItemMixin.addProjectTypet:WWMProjectBrowserItemMixin (Constructor)ProjectBrowserItemMixin (Constructor)ProjectBrowserItemMixin.__init__ 'PNk'vJUUUProjectBrowserModel.directoryChangedProjectBrowserModel.directoryChangedProjectBrowserModel.directoryChangedRI===ProjectBrowserModel.dataProjectBrowserModel.dataProjectBrowserModel.datasHSSSProjectBrowserModel.changeVCSStatesProjectBrowserModel.changeVCSStatesProjectBrowserModel.changeVCSStatesdGIIIProjectBrowserModel.addNewItemProjectBrowserModel.addNewItemProjectBrowserModel.addNewItemyFWWWProjectBrowserModel.__updateVCSStatusProjectBrowserModel.__updateVCSStatusProjectBrowserModel.__updateVCSStatus EcccProjectBrowserModel.__changeParentsVCSStateProjectBrowserModel.__changeParentsVCSStateProjectBrowserModel.__changeParentsVCSStatepDQQQProjectBrowserModel.__addVCSStatusProjectBrowserModel.__addVCSStatusProjectBrowserModel.__addVCSStatusBCEEProjectBrowserModel (Module)ProjectBrowserModel (Module)hBOOEProjectBrowserModel (Constructor)ProjectBrowserModel (Constructor)ProjectBrowserModel.__init__ 9/3(9mROOOProjectBrowserModel.projectClosedProjectBrowserModel.projectClosedProjectBrowserModel.projectClosed|QYYYProjectBrowserModel.preferencesChangedProjectBrowserModel.preferencesChangedProjectBrowserModel.preferencesChangedPmmmProjectBrowserModel.populateProjectDirectoryItemProjectBrowserModel.populateProjectDirectoryItemProjectBrowserModel.populateProjectDirectoryItemjOMMMProjectBrowserModel.populateItemProjectBrowserModel.populateItemProjectBrowserModel.populateItemsNSSSProjectBrowserModel.itemIndexByNameProjectBrowserModel.itemIndexByNameProjectBrowserModel.itemIndexByNameM]]]ProjectBrowserModel.findParentItemByNameProjectBrowserModel.findParentItemByNameProjectBrowserModel.findParentItemByName^LEEEProjectBrowserModel.findItemProjectBrowserModel.findItemProjectBrowserModel.findItemmKOOOProjectBrowserModel.findChildItemProjectBrowserModel.findChildItemProjectBrowserModel.findChildItem Y0GY@[CCProjectBrowserPage (Module)ProjectBrowserPage (Module)~eZMMCProjectBrowserPage (Constructor)ProjectBrowserPage (Constructor)~ProjectBrowserPage.__init__@Y111ProjectBrowserPageProjectBrowserPage~ProjectBrowserPagesXSSSProjectBrowserModel.updateVCSStatusProjectBrowserModel.updateVCSStatusProjectBrowserModel.updateVCSStatuspWQQQProjectBrowserModel.repopulateItemProjectBrowserModel.repopulateItemProjectBrowserModel.repopulateItemdVIIIProjectBrowserModel.renameItemProjectBrowserModel.renameItemProjectBrowserModel.renameItemdUIIIProjectBrowserModel.removeItemProjectBrowserModel.removeItemProjectBrowserModel.removeItemTeeeProjectBrowserModel.projectPropertiesChangedProjectBrowserModel.projectPropertiesChangedProjectBrowserModel.projectPropertiesChangedmSOOOProjectBrowserModel.projectOpenedProjectBrowserModel.projectOpenedProjectBrowserModel.projectOpened 3_)93bkkaProjectBrowserSimpleDirectoryItem (Constructor)ProjectBrowserSimpleDirectoryItem (Constructor)ProjectBrowserSimpleDirectoryItem.__init__maOOOProjectBrowserSimpleDirectoryItemProjectBrowserSimpleDirectoryItemProjectBrowserSimpleDirectoryItemO`;;;ProjectBrowserPage.saveProjectBrowserPage.save~ProjectBrowserPage.save_mmmProjectBrowserPage.on_projectTypeCombo_activatedProjectBrowserPage.on_projectTypeCombo_activated~ProjectBrowserPage.on_projectTypeCombo_activated^oooProjectBrowserPage.on_pbHighlightedButton_clickedProjectBrowserPage.on_pbHighlightedButton_clicked~ProjectBrowserPage.on_pbHighlightedButton_clicked]gggProjectBrowserPage.__storeProjectBrowserFlagsProjectBrowserPage.__storeProjectBrowserFlags~ProjectBrowserPage.__storeProjectBrowserFlags\oooProjectBrowserPage.__setProjectBrowsersCheckBoxesProjectBrowserPage.__setProjectBrowsersCheckBoxes~ProjectBrowserPage.__setProjectBrowsersCheckBoxes LwbVL#isssProjectBrowserSortFilterProxyModel.filterAcceptsRowProjectBrowserSortFilterProxyModel.filterAcceptsRowProjectBrowserSortFilterProxyModel.filterAcceptsRow`hccProjectBrowserSortFilterProxyModel (Module)ProjectBrowserSortFilterProxyModel (Module)gmmcProjectBrowserSortFilterProxyModel (Constructor)ProjectBrowserSortFilterProxyModel (Constructor)ProjectBrowserSortFilterProxyModel.__init__pfQQQProjectBrowserSortFilterProxyModelProjectBrowserSortFilterProxyModelProjectBrowserSortFilterProxyModele___ProjectBrowserSimpleDirectoryItem.setNameProjectBrowserSimpleDirectoryItem.setNameProjectBrowserSimpleDirectoryItem.setNamedaaaProjectBrowserSimpleDirectoryItem.lessThanProjectBrowserSimpleDirectoryItem.lessThanProjectBrowserSimpleDirectoryItem.lessThanc___ProjectBrowserSimpleDirectoryItem.dirNameProjectBrowserSimpleDirectoryItem.dirNameProjectBrowserSimpleDirectoryItem.dirName S ]q[[[ProjectFormsBrowser.__addFormsDirectoryProjectFormsBrowser.__addFormsDirectoryProjectFormsBrowser.__addFormsDirectoryppQQQProjectFormsBrowser.__addFormFilesProjectFormsBrowser.__addFormFilesProjectFormsBrowser.__addFormFilesgoKKKProjectFormsBrowser.__UIPreviewProjectFormsBrowser.__UIPreviewProjectFormsBrowser.__UIPreviewgnKKKProjectFormsBrowser.__TRPreviewProjectFormsBrowser.__TRPreviewProjectFormsBrowser.__TRPreviewBmEEProjectFormsBrowser (Module)ProjectFormsBrowser (Module)hlOOEProjectFormsBrowser (Constructor)ProjectFormsBrowser (Constructor)ProjectFormsBrowser.__init__Ck333ProjectFormsBrowserProjectFormsBrowserProjectFormsBrowser)jwwwProjectBrowserSortFilterProxyModel.preferencesChangedProjectBrowserSortFilterProxyModel.preferencesChangedProjectBrowserSortFilterProxyModel.preferencesChanged 6;6|yYYYProjectFormsBrowser.__generateSubclassProjectFormsBrowser.__generateSubclassProjectFormsBrowser.__generateSubclassx]]]ProjectFormsBrowser.__generateDialogCodeProjectFormsBrowser.__generateDialogCodeProjectFormsBrowser.__generateDialogCodejwMMMProjectFormsBrowser.__deleteFileProjectFormsBrowser.__deleteFileProjectFormsBrowser.__deleteFilesvSSSProjectFormsBrowser.__compileUIDoneProjectFormsBrowser.__compileUIDoneProjectFormsBrowser.__compileUIDoneguKKKProjectFormsBrowser.__compileUIProjectFormsBrowser.__compileUIProjectFormsBrowser.__compileUItaaaProjectFormsBrowser.__compileSelectedFormsProjectFormsBrowser.__compileSelectedFormsProjectFormsBrowser.__compileSelectedFormsmsOOOProjectFormsBrowser.__compileFormProjectFormsBrowser.__compileFormProjectFormsBrowser.__compileFormyrWWWProjectFormsBrowser.__compileAllFormsProjectFormsBrowser.__compileAllFormsProjectFormsBrowser.__compileAllForms R\';RyWWWProjectFormsBrowser.__showContextMenuProjectFormsBrowser.__showContextMenuProjectFormsBrowser.__showContextMenujMMMProjectFormsBrowser.__readStdoutProjectFormsBrowser.__readStdoutProjectFormsBrowser.__readStdoutjMMMProjectFormsBrowser.__readStderrProjectFormsBrowser.__readStderrProjectFormsBrowser.__readStderr|~YYYProjectFormsBrowser.__openFileInEditorProjectFormsBrowser.__openFileInEditorProjectFormsBrowser.__openFileInEditord}IIIProjectFormsBrowser.__openFileProjectFormsBrowser.__openFileProjectFormsBrowser.__openFileg|KKKProjectFormsBrowser.__newUiFormProjectFormsBrowser.__newUiFormProjectFormsBrowser.__newUiForma{GGGProjectFormsBrowser.__newFormProjectFormsBrowser.__newFormProjectFormsBrowser.__newForm zqqqProjectFormsBrowser.__itemsHaveDesignerHeaderFilesProjectFormsBrowser.__itemsHaveDesignerHeaderFilesProjectFormsBrowser.__itemsHaveDesignerHeaderFiles Rw\GRvUUUProjectFormsBrowser._initHookMethodsProjectFormsBrowser._initHookMethodsProjectFormsBrowser._initHookMethodsyWWWProjectFormsBrowser._createPopupMenusProjectFormsBrowser._createPopupMenusProjectFormsBrowser._createPopupMenus___ProjectFormsBrowser._contextMenuRequestedProjectFormsBrowser._contextMenuRequestedProjectFormsBrowser._contextMenuRequestedaaaProjectFormsBrowser.__showContextMenuMultiProjectFormsBrowser.__showContextMenuMultiProjectFormsBrowser.__showContextMenuMultigggProjectFormsBrowser.__showContextMenuDirMultiProjectFormsBrowser.__showContextMenuDirMultiProjectFormsBrowser.__showContextMenuDirMulti]]]ProjectFormsBrowser.__showContextMenuDirProjectFormsBrowser.__showContextMenuDirProjectFormsBrowser.__showContextMenuDir___ProjectFormsBrowser.__showContextMenuBackProjectFormsBrowser.__showContextMenuBackProjectFormsBrowser.__showContextMenuBack 7Rc7iMMMProjectHandler.endCxfreezeParamsProjectHandler.endCxfreezeParamskProjectHandler.endCxfreezeParamsiMMMProjectHandler.endCheckersParamsProjectHandler.endCheckersParamskProjectHandler.endCheckersParamsQ===ProjectHandler.endAuthorProjectHandler.endAuthorkProjectHandler.endAuthorWAAAProjectHandler.__buildPathProjectHandler.__buildPathkProjectHandler.__buildPath7;;ProjectHandler (Module)ProjectHandler (Module)kX EE;ProjectHandler (Constructor)ProjectHandler (Constructor)kProjectHandler.__init__3 )))ProjectHandlerProjectHandlerkProjectHandler eeeProjectFormsBrowser.handlePreferencesChangedProjectFormsBrowser.handlePreferencesChangedProjectFormsBrowser.handlePreferencesChanged [[[ProjectFormsBrowser.compileChangedFormsProjectFormsBrowser.compileChangedFormsProjectFormsBrowser.compileChangedFormsa GGGProjectFormsBrowser._openItemProjectFormsBrowser._openItemProjectFormsBrowser._openItem +RB+ZCCCProjectHandler.endInterfaceProjectHandler.endInterfacekProjectHandler.endInterfaceK999ProjectHandler.endFormProjectHandler.endFormkProjectHandler.endFormiMMMProjectHandler.endEric4DocParamsProjectHandler.endEric4DocParamskProjectHandler.endEric4DocParamsiMMMProjectHandler.endEric4ApiParamsProjectHandler.endEric4ApiParamskProjectHandler.endEric4ApiParamsiMMMProjectHandler.endEric3DocParamsProjectHandler.endEric3DocParamskProjectHandler.endEric3DocParamsiMMMProjectHandler.endEric3ApiParamsProjectHandler.endEric3ApiParamskProjectHandler.endEric3ApiParamsN;;;ProjectHandler.endEmailProjectHandler.endEmailkProjectHandler.endEmailxWWWProjectHandler.endDocumentationParamsProjectHandler.endDocumentationParamskProjectHandler.endDocumentationParamsH777ProjectHandler.endDirProjectHandler.endDirkProjectHandler.endDir`GGGProjectHandler.endDescriptionProjectHandler.endDescriptionkProjectHandler.endDescription F5``%GGGProjectHandler.endProjectTypeProjectHandler.endProjectTypekProjectHandler.endProjectTypeu$UUUProjectHandler.endProjectExcludeListProjectHandler.endProjectExcludeListkProjectHandler.endProjectExcludeListc#IIIProjectHandler.endProgLanguageProjectHandler.endProgLanguagekProjectHandler.endProgLanguagel"OOOProjectHandler.endPackagersParamsProjectHandler.endPackagersParamskProjectHandler.endPackagersParamso!QQQProjectHandler.endOtherToolsParamsProjectHandler.endOtherToolsParamskProjectHandler.endOtherToolsParamsN ;;;ProjectHandler.endOtherProjectHandler.endOtherkProjectHandler.endOtherK999ProjectHandler.endNameProjectHandler.endNamekProjectHandler.endName]EEEProjectHandler.endMainScriptProjectHandler.endMainScriptkProjectHandler.endMainScriptWAAAProjectHandler.endLanguageProjectHandler.endLanguagekProjectHandler.endLanguage 'x I'r.SSSProjectHandler.endTranslationPrefixProjectHandler.endTranslationPrefixkProjectHandler.endTranslationPrefixu-UUUProjectHandler.endTranslationPatternProjectHandler.endTranslationPatternkProjectHandler.endTranslationPattern{,YYYProjectHandler.endTranslationExceptionProjectHandler.endTranslationExceptionkProjectHandler.endTranslationException`+GGGProjectHandler.endTranslationProjectHandler.endTranslationkProjectHandler.endTranslationQ*===ProjectHandler.endSourceProjectHandler.endSourcekProjectHandler.endSourceW)AAAProjectHandler.endResourceProjectHandler.endResourcekProjectHandler.endResourcec(IIIProjectHandler.endPyLintParamsProjectHandler.endPyLintParamskProjectHandler.endPyLintParamsl'OOOProjectHandler.endProjectWordListProjectHandler.endProjectWordListkProjectHandler.endProjectWordList&___ProjectHandler.endProjectTypeSpecificDataProjectHandler.endProjectTypeSpecificDatakProjectHandler.endProjectTypeSpecificData 1kfo7QQQProjectHandler.startCxfreezeParamsProjectHandler.startCxfreezeParamskProjectHandler.startCxfreezeParamso6QQQProjectHandler.startCheckersParamsProjectHandler.startCheckersParamskProjectHandler.startCheckersParamsT5???ProjectHandler.getVersionProjectHandler.getVersionkProjectHandler.getVersionT4???ProjectHandler.endVersionProjectHandler.endVersionkProjectHandler.endVersionT3???ProjectHandler.endVcsTypeProjectHandler.endVcsTypekProjectHandler.endVcsTypec2IIIProjectHandler.endVcsOtherDataProjectHandler.endVcsOtherDatakProjectHandler.endVcsOtherData]1EEEProjectHandler.endVcsOptionsProjectHandler.endVcsOptionskProjectHandler.endVcsOptionsQ0===ProjectHandler.endUITypeProjectHandler.endUITypekProjectHandler.endUITypex/WWWProjectHandler.endTranslationsBinPathProjectHandler.endTranslationsBinPathkProjectHandler.endTranslationsBinPath v &Qvu?UUUProjectHandler.startLexerAssociationProjectHandler.startLexerAssociationkProjectHandler.startLexerAssociation`>GGGProjectHandler.startInterfaceProjectHandler.startInterfacekProjectHandler.startInterfaceQ====ProjectHandler.startFormProjectHandler.startFormkProjectHandler.startForm~<[[[ProjectHandler.startFiletypeAssociationProjectHandler.startFiletypeAssociationkProjectHandler.startFiletypeAssociationo;QQQProjectHandler.startEric4DocParamsProjectHandler.startEric4DocParamskProjectHandler.startEric4DocParamso:QQQProjectHandler.startEric4ApiParamsProjectHandler.startEric4ApiParamskProjectHandler.startEric4ApiParams~9[[[ProjectHandler.startDocumentationParamsProjectHandler.startDocumentationParamskProjectHandler.startDocumentationParamsr8SSSProjectHandler.startDocumentProjectProjectHandler.startDocumentProjectkProjectHandler.startDocumentProject 3CV3]HEEEProjectHandler.startResourceProjectHandler.startResourcekProjectHandler.startResourceiGMMMProjectHandler.startPyLintParamsProjectHandler.startPyLintParamskProjectHandler.startPyLintParams FcccProjectHandler.startProjectTypeSpecificDataProjectHandler.startProjectTypeSpecificDatakProjectHandler.startProjectTypeSpecificDataZECCCProjectHandler.startProjectProjectHandler.startProjectkProjectHandler.startProjectiDMMMProjectHandler.startProgLanguageProjectHandler.startProgLanguagekProjectHandler.startProgLanguagerCSSSProjectHandler.startPackagersParamsProjectHandler.startPackagersParamskProjectHandler.startPackagersParamsuBUUUProjectHandler.startOtherToolsParamsProjectHandler.startOtherToolsParamskProjectHandler.startOtherToolsParamsTA???ProjectHandler.startOtherProjectHandler.startOtherkProjectHandler.startOtherc@IIIProjectHandler.startMainScriptProjectHandler.startMainScriptkProjectHandler.startMainScript \==V\RQ===ProjectInterfacesBrowserProjectInterfacesBrowserProjectInterfacesBrowser6P99ProjectHelper (Module)ProjectHelper (Module)iOMMMProjectHandler.startVcsOtherDataProjectHandler.startVcsOtherDatakProjectHandler.startVcsOtherDatacNIIIProjectHandler.startVcsOptionsProjectHandler.startVcsOptionskProjectHandler.startVcsOptions~M[[[ProjectHandler.startTranslationsBinPathProjectHandler.startTranslationsBinPathkProjectHandler.startTranslationsBinPathxLWWWProjectHandler.startTranslationPrefixProjectHandler.startTranslationPrefixkProjectHandler.startTranslationPrefixK]]]ProjectHandler.startTranslationExceptionProjectHandler.startTranslationExceptionkProjectHandler.startTranslationExceptionfJKKKProjectHandler.startTranslationProjectHandler.startTranslationkProjectHandler.startTranslationWIAAAProjectHandler.startSourceProjectHandler.startSourcekProjectHandler.startSource d7idX___ProjectInterfacesBrowser.__compileIDLDoneProjectInterfacesBrowser.__compileIDLDoneProjectInterfacesBrowser.__compileIDLDoneyWWWWProjectInterfacesBrowser.__compileIDLProjectInterfacesBrowser.__compileIDLProjectInterfacesBrowser.__compileIDLVkkkProjectInterfacesBrowser.__compileAllInterfacesProjectInterfacesBrowser.__compileAllInterfacesProjectInterfacesBrowser.__compileAllInterfacesUoooProjectInterfacesBrowser.__addInterfacesDirectoryProjectInterfacesBrowser.__addInterfacesDirectoryProjectInterfacesBrowser.__addInterfacesDirectoryTeeeProjectInterfacesBrowser.__addInterfaceFilesProjectInterfacesBrowser.__addInterfaceFilesProjectInterfacesBrowser.__addInterfaceFilesLSOOProjectInterfacesBrowser (Module)ProjectInterfacesBrowser (Module)wRYYOProjectInterfacesBrowser (Constructor)ProjectInterfacesBrowser (Constructor)ProjectInterfacesBrowser.__init__ >q>F>_aaaProjectInterfacesBrowser.__showContextMenuProjectInterfacesBrowser.__showContextMenuProjectInterfacesBrowser.__showContextMenuy^WWWProjectInterfacesBrowser.__readStdoutProjectInterfacesBrowser.__readStdoutProjectInterfacesBrowser.__readStdouty]WWWProjectInterfacesBrowser.__readStderrProjectInterfacesBrowser.__readStderrProjectInterfacesBrowser.__readStderry\WWWProjectInterfacesBrowser.__deleteFileProjectInterfacesBrowser.__deleteFileProjectInterfacesBrowser.__deleteFile[___ProjectInterfacesBrowser.__configureCorbaProjectInterfacesBrowser.__configureCorbaProjectInterfacesBrowser.__configureCorba&ZuuuProjectInterfacesBrowser.__compileSelectedInterfacesProjectInterfacesBrowser.__compileSelectedInterfacesProjectInterfacesBrowser.__compileSelectedInterfaces YcccProjectInterfacesBrowser.__compileInterfaceProjectInterfacesBrowser.__compileInterfaceProjectInterfacesBrowser.__compileInterface ph/peaaaProjectInterfacesBrowser._createPopupMenusProjectInterfacesBrowser._createPopupMenusProjectInterfacesBrowser._createPopupMenusdiiiProjectInterfacesBrowser._contextMenuRequestedProjectInterfacesBrowser._contextMenuRequestedProjectInterfacesBrowser._contextMenuRequestedckkkProjectInterfacesBrowser.__showContextMenuMultiProjectInterfacesBrowser.__showContextMenuMultiProjectInterfacesBrowser.__showContextMenuMulti bqqqProjectInterfacesBrowser.__showContextMenuDirMultiProjectInterfacesBrowser.__showContextMenuDirMultiProjectInterfacesBrowser.__showContextMenuDirMultiagggProjectInterfacesBrowser.__showContextMenuDirProjectInterfacesBrowser.__showContextMenuDirProjectInterfacesBrowser.__showContextMenuDir`iiiProjectInterfacesBrowser.__showContextMenuBackProjectInterfacesBrowser.__showContextMenuBackProjectInterfacesBrowser.__showContextMenuBack 1D<1naaaProjectOthersBrowser.__showContextMenuBackProjectOthersBrowser.__showContextMenuBackProjectOthersBrowser.__showContextMenuBack|mYYYProjectOthersBrowser.__showContextMenuProjectOthersBrowser.__showContextMenuProjectOthersBrowser.__showContextMenumlOOOProjectOthersBrowser.__removeItemProjectOthersBrowser.__removeItemProjectOthersBrowser.__removeItempkQQQProjectOthersBrowser.__refreshItemProjectOthersBrowser.__refreshItemProjectOthersBrowser.__refreshItemmjOOOProjectOthersBrowser.__deleteItemProjectOthersBrowser.__deleteItemProjectOthersBrowser.__deleteItemDiGGProjectOthersBrowser (Module)ProjectOthersBrowser (Module)khQQGProjectOthersBrowser (Constructor)ProjectOthersBrowser (Constructor)ProjectOthersBrowser.__init__Fg555ProjectOthersBrowserProjectOthersBrowserProjectOthersBrowserpfQQQProjectInterfacesBrowser._openItemProjectInterfacesBrowser._openItemProjectInterfacesBrowser._openItem #qf`#:x---ProjectPage.saveProjectPage.saveProjectPage.save2w55ProjectPage (Module)ProjectPage (Module)Pv??5ProjectPage (Constructor)ProjectPage (Constructor)ProjectPage.__init__+u###ProjectPageProjectPageProjectPageytWWWProjectOthersBrowser._showContextMenuProjectOthersBrowser._showContextMenuProjectOthersBrowser._showContextMenudsIIIProjectOthersBrowser._openItemProjectOthersBrowser._openItemProjectOthersBrowser._openItemjrMMMProjectOthersBrowser._editPixmapProjectOthersBrowser._editPixmapProjectOthersBrowser._editPixmap|qYYYProjectOthersBrowser._createPopupMenusProjectOthersBrowser._createPopupMenusProjectOthersBrowser._createPopupMenuspaaaProjectOthersBrowser._contextMenuRequestedProjectOthersBrowser._contextMenuRequestedProjectOthersBrowser._contextMenuRequested occcProjectOthersBrowser.__showContextMenuMultiProjectOthersBrowser.__showContextMenuMultiProjectOthersBrowser.__showContextMenuMulti  7^. vUUUProjectResourcesBrowser.__compileQRCProjectResourcesBrowser.__compileQRCProjectResourcesBrowser.__compileQRCgggProjectResourcesBrowser.__compileAllResourcesProjectResourcesBrowser.__compileAllResourcesProjectResourcesBrowser.__compileAllResources~gggProjectResourcesBrowser.__checkResourcesNewerProjectResourcesBrowser.__checkResourcesNewerProjectResourcesBrowser.__checkResourcesNewer}kkkProjectResourcesBrowser.__addResourcesDirectoryProjectResourcesBrowser.__addResourcesDirectoryProjectResourcesBrowser.__addResourcesDirectory|aaaProjectResourcesBrowser.__addResourceFilesProjectResourcesBrowser.__addResourceFilesProjectResourcesBrowser.__addResourceFilesJ{MMProjectResourcesBrowser (Module)ProjectResourcesBrowser (Module)tzWWMProjectResourcesBrowser (Constructor)ProjectResourcesBrowser (Constructor)ProjectResourcesBrowser.__init__Oy;;;ProjectResourcesBrowserProjectResourcesBrowserProjectResourcesBrowser lzMXlvUUUProjectResourcesBrowser.__readStderrProjectResourcesBrowser.__readStderrProjectResourcesBrowser.__readStderrpQQQProjectResourcesBrowser.__openFileProjectResourcesBrowser.__openFileProjectResourcesBrowser.__openFileyWWWProjectResourcesBrowser.__newResourceProjectResourcesBrowser.__newResourceProjectResourcesBrowser.__newResourcevUUUProjectResourcesBrowser.__deleteFileProjectResourcesBrowser.__deleteFileProjectResourcesBrowser.__deleteFile qqqProjectResourcesBrowser.__compileSelectedResourcesProjectResourcesBrowser.__compileSelectedResourcesProjectResourcesBrowser.__compileSelectedResources___ProjectResourcesBrowser.__compileResourceProjectResourcesBrowser.__compileResourceProjectResourcesBrowser.__compileResource]]]ProjectResourcesBrowser.__compileQRCDoneProjectResourcesBrowser.__compileQRCDoneProjectResourcesBrowser.__compileQRCDone i6 iiiProjectResourcesBrowser.__showContextMenuMultiProjectResourcesBrowser.__showContextMenuMultiProjectResourcesBrowser.__showContextMenuMulti oooProjectResourcesBrowser.__showContextMenuDirMultiProjectResourcesBrowser.__showContextMenuDirMultiProjectResourcesBrowser.__showContextMenuDirMulti eeeProjectResourcesBrowser.__showContextMenuDirProjectResourcesBrowser.__showContextMenuDirProjectResourcesBrowser.__showContextMenuDir gggProjectResourcesBrowser.__showContextMenuBackProjectResourcesBrowser.__showContextMenuBackProjectResourcesBrowser.__showContextMenuBack ___ProjectResourcesBrowser.__showContextMenuProjectResourcesBrowser.__showContextMenuProjectResourcesBrowser.__showContextMenuvUUUProjectResourcesBrowser.__readStdoutProjectResourcesBrowser.__readStdoutProjectResourcesBrowser.__readStdout gk\QgI777ProjectSourcesBrowserProjectSourcesBrowserProjectSourcesBrowsermmmProjectResourcesBrowser.handlePreferencesChangedProjectResourcesBrowser.handlePreferencesChangedProjectResourcesBrowser.handlePreferencesChangedkkkProjectResourcesBrowser.compileChangedResourcesProjectResourcesBrowser.compileChangedResourcesProjectResourcesBrowser.compileChangedResourcesmOOOProjectResourcesBrowser._openItemProjectResourcesBrowser._openItemProjectResourcesBrowser._openItem]]]ProjectResourcesBrowser._initHookMethodsProjectResourcesBrowser._initHookMethodsProjectResourcesBrowser._initHookMethods___ProjectResourcesBrowser._createPopupMenusProjectResourcesBrowser._createPopupMenusProjectResourcesBrowser._createPopupMenusgggProjectResourcesBrowser._contextMenuRequestedProjectResourcesBrowser._contextMenuRequestedProjectResourcesBrowser._contextMenuRequested F>=iiiProjectSourcesBrowser.__createPythonPopupMenusProjectSourcesBrowser.__createPythonPopupMenusProjectSourcesBrowser.__createPythonPopupMenus[[[ProjectSourcesBrowser.__closeAllWindowsProjectSourcesBrowser.__closeAllWindowsProjectSourcesBrowser.__closeAllWindows|YYYProjectSourcesBrowser.__addSourceFilesProjectSourcesBrowser.__addSourceFilesProjectSourcesBrowser.__addSourceFilesaaaProjectSourcesBrowser.__addSourceDirectoryProjectSourcesBrowser.__addSourceDirectoryProjectSourcesBrowser.__addSourceDirectoryyWWWProjectSourcesBrowser.__addNewPackageProjectSourcesBrowser.__addNewPackageProjectSourcesBrowser.__addNewPackageFIIProjectSourcesBrowser (Module)ProjectSourcesBrowser (Module)nSSIProjectSourcesBrowser (Constructor)ProjectSourcesBrowser (Constructor)ProjectSourcesBrowser.__init__ SncWS"[[[ProjectSourcesBrowser.__showContextMenuProjectSourcesBrowser.__showContextMenuProjectSourcesBrowser.__showContextMenu![[[ProjectSourcesBrowser.__showCodeMetricsProjectSourcesBrowser.__showCodeMetricsProjectSourcesBrowser.__showCodeMetrics ]]]ProjectSourcesBrowser.__showCodeCoverageProjectSourcesBrowser.__showCodeCoverageProjectSourcesBrowser.__showCodeCoverage]]]ProjectSourcesBrowser.__showClassDiagramProjectSourcesBrowser.__showClassDiagramProjectSourcesBrowser.__showClassDiagramiiiProjectSourcesBrowser.__showApplicationDiagramProjectSourcesBrowser.__showApplicationDiagramProjectSourcesBrowser.__showApplicationDiagrampQQQProjectSourcesBrowser.__deleteFileProjectSourcesBrowser.__deleteFileProjectSourcesBrowser.__deleteFileeeeProjectSourcesBrowser.__createRubyPopupMenusProjectSourcesBrowser.__createRubyPopupMenusProjectSourcesBrowser.__createRubyPopupMenus qS(eeeProjectSourcesBrowser.__showContextMenuMultiProjectSourcesBrowser.__showContextMenuMultiProjectSourcesBrowser.__showContextMenuMulti'kkkProjectSourcesBrowser.__showContextMenuGraphicsProjectSourcesBrowser.__showContextMenuGraphicsProjectSourcesBrowser.__showContextMenuGraphics&kkkProjectSourcesBrowser.__showContextMenuDirMultiProjectSourcesBrowser.__showContextMenuDirMultiProjectSourcesBrowser.__showContextMenuDirMulti%aaaProjectSourcesBrowser.__showContextMenuDirProjectSourcesBrowser.__showContextMenuDirProjectSourcesBrowser.__showContextMenuDir$eeeProjectSourcesBrowser.__showContextMenuCheckProjectSourcesBrowser.__showContextMenuCheckProjectSourcesBrowser.__showContextMenuCheck #cccProjectSourcesBrowser.__showContextMenuBackProjectSourcesBrowser.__showContextMenuBackProjectSourcesBrowser.__showContextMenuBack \qYH\g/KKKProjectSourcesBrowser._openItemProjectSourcesBrowser._openItemProjectSourcesBrowser._openItem.[[[ProjectSourcesBrowser._createPopupMenusProjectSourcesBrowser._createPopupMenusProjectSourcesBrowser._createPopupMenus -cccProjectSourcesBrowser._contextMenuRequestedProjectSourcesBrowser._contextMenuRequestedProjectSourcesBrowser._contextMenuRequested,[[[ProjectSourcesBrowser.__showProfileDataProjectSourcesBrowser.__showProfileDataProjectSourcesBrowser.__showProfileData+aaaProjectSourcesBrowser.__showPackageDiagramProjectSourcesBrowser.__showPackageDiagramProjectSourcesBrowser.__showPackageDiagram*aaaProjectSourcesBrowser.__showImportsDiagramProjectSourcesBrowser.__showImportsDiagramProjectSourcesBrowser.__showImportsDiagram )cccProjectSourcesBrowser.__showContextMenuShowProjectSourcesBrowser.__showContextMenuShowProjectSourcesBrowser.__showContextMenuShow ,YQ7kkkProjectTranslationsBrowser.__deleteLanguageFileProjectTranslationsBrowser.__deleteLanguageFileProjectTranslationsBrowser.__deleteLanguageFile6mmmProjectTranslationsBrowser.__addTranslationFilesProjectTranslationsBrowser.__addTranslationFilesProjectTranslationsBrowser.__addTranslationFiles5___ProjectTranslationsBrowser.__TRPreviewAllProjectTranslationsBrowser.__TRPreviewAllProjectTranslationsBrowser.__TRPreviewAll|4YYYProjectTranslationsBrowser.__TRPreviewProjectTranslationsBrowser.__TRPreviewProjectTranslationsBrowser.__TRPreviewP3SSProjectTranslationsBrowser (Module)ProjectTranslationsBrowser (Module)}2]]SProjectTranslationsBrowser (Constructor)ProjectTranslationsBrowser (Constructor)ProjectTranslationsBrowser.__init__X1AAAProjectTranslationsBrowserProjectTranslationsBrowserProjectTranslationsBrowserv0UUUProjectSourcesBrowser._projectClosedProjectSourcesBrowser._projectClosedProjectSourcesBrowser._projectClosed ynJy =cccProjectTranslationsBrowser.__generateTSFileProjectTranslationsBrowser.__generateTSFileProjectTranslationsBrowser.__generateTSFile<gggProjectTranslationsBrowser.__generateSelectedProjectTranslationsBrowser.__generateSelectedProjectTranslationsBrowser.__generateSelected);wwwProjectTranslationsBrowser.__generateObsoleteSelectedProjectTranslationsBrowser.__generateObsoleteSelectedProjectTranslationsBrowser.__generateObsoleteSelected:mmmProjectTranslationsBrowser.__generateObsoleteAllProjectTranslationsBrowser.__generateObsoleteAllProjectTranslationsBrowser.__generateObsoleteAll9]]]ProjectTranslationsBrowser.__generateAllProjectTranslationsBrowser.__generateAllProjectTranslationsBrowser.__generateAll8eeeProjectTranslationsBrowser.__extractMessagesProjectTranslationsBrowser.__extractMessagesProjectTranslationsBrowser.__extractMessages eNC[[[ProjectTranslationsBrowser.__readStdoutProjectTranslationsBrowser.__readStdoutProjectTranslationsBrowser.__readStdoutBiiiProjectTranslationsBrowser.__readStderrLupdateProjectTranslationsBrowser.__readStderrLupdateProjectTranslationsBrowser.__readStderrLupdateAkkkProjectTranslationsBrowser.__readStderrLreleaseProjectTranslationsBrowser.__readStderrLreleaseProjectTranslationsBrowser.__readStderrLrelease@[[[ProjectTranslationsBrowser.__readStderrProjectTranslationsBrowser.__readStderrProjectTranslationsBrowser.__readStderr?gggProjectTranslationsBrowser.__openFileInEditorProjectTranslationsBrowser.__openFileInEditorProjectTranslationsBrowser.__openFileInEditor>kkkProjectTranslationsBrowser.__generateTSFileDoneProjectTranslationsBrowser.__generateTSFileDoneProjectTranslationsBrowser.__generateTSFileDone eK-IiiiProjectTranslationsBrowser.__releaseTSFileDoneProjectTranslationsBrowser.__releaseTSFileDoneProjectTranslationsBrowser.__releaseTSFileDoneHaaaProjectTranslationsBrowser.__releaseTSFileProjectTranslationsBrowser.__releaseTSFileProjectTranslationsBrowser.__releaseTSFileGeeeProjectTranslationsBrowser.__releaseSelectedProjectTranslationsBrowser.__releaseSelectedProjectTranslationsBrowser.__releaseSelectedF[[[ProjectTranslationsBrowser.__releaseAllProjectTranslationsBrowser.__releaseAllProjectTranslationsBrowser.__releaseAllEiiiProjectTranslationsBrowser.__readStdoutLupdateProjectTranslationsBrowser.__readStdoutLupdateProjectTranslationsBrowser.__readStdoutLupdateDkkkProjectTranslationsBrowser.__readStdoutLreleaseProjectTranslationsBrowser.__readStdoutLreleaseProjectTranslationsBrowser.__readStdoutLrelease Xe5XOoooProjectTranslationsBrowser.__writeTempProjectFileProjectTranslationsBrowser.__writeTempProjectFileProjectTranslationsBrowser.__writeTempProjectFileNoooProjectTranslationsBrowser.__showContextMenuMultiProjectTranslationsBrowser.__showContextMenuMultiProjectTranslationsBrowser.__showContextMenuMultiMkkkProjectTranslationsBrowser.__showContextMenuDirProjectTranslationsBrowser.__showContextMenuDirProjectTranslationsBrowser.__showContextMenuDirLmmmProjectTranslationsBrowser.__showContextMenuBackProjectTranslationsBrowser.__showContextMenuBackProjectTranslationsBrowser.__showContextMenuBackKeeeProjectTranslationsBrowser.__showContextMenuProjectTranslationsBrowser.__showContextMenuProjectTranslationsBrowser.__showContextMenuJkkkProjectTranslationsBrowser.__removeLanguageFileProjectTranslationsBrowser.__removeLanguageFileProjectTranslationsBrowser.__removeLanguageFile zbA=z:X---PropertiesDialogPropertiesDialogPropertiesDialogKW999ProjectWriter.writeXMLProjectWriter.writeXMLlProjectWriter.writeXML5V99ProjectWriter (Module)ProjectWriter (Module)lUUCC9ProjectWriter (Constructor)ProjectWriter (Constructor)lProjectWriter.__init__0T'''ProjectWriterProjectWriterlProjectWritervSUUUProjectTranslationsBrowser._openItemProjectTranslationsBrowser._openItemProjectTranslationsBrowser._openItem RcccProjectTranslationsBrowser._initHookMethodsProjectTranslationsBrowser._initHookMethodsProjectTranslationsBrowser._initHookMethodsQeeeProjectTranslationsBrowser._createPopupMenusProjectTranslationsBrowser._createPopupMenusProjectTranslationsBrowser._createPopupMenusPmmmProjectTranslationsBrowser._contextMenuRequestedProjectTranslationsBrowser._contextMenuRequestedProjectTranslationsBrowser._contextMenuRequested M_!M`oooPropertiesDialog.on_transPropertiesButton_clickedPropertiesDialog.on_transPropertiesButton_clickedPropertiesDialog.on_transPropertiesButton_clicked_oooPropertiesDialog.on_spellPropertiesButton_clickedPropertiesDialog.on_spellPropertiesButton_clickedPropertiesDialog.on_spellPropertiesButton_clicked^eeePropertiesDialog.on_mainscriptButton_clickedPropertiesDialog.on_mainscriptButton_clickedPropertiesDialog.on_mainscriptButton_clickedy]WWWPropertiesDialog.on_dirButton_clickedPropertiesDialog.on_dirButton_clickedPropertiesDialog.on_dirButton_clickedg\KKKPropertiesDialog.getProjectTypePropertiesDialog.getProjectTypePropertiesDialog.getProjectTypeU[???PropertiesDialog.getPPathPropertiesDialog.getPPathPropertiesDialog.getPPathU>Kt999PyCoverageDialog.startPyCoverageDialog.startPyCoverageDialog.start seeePyCoverageDialog.on_resultList_itemActivatedPyCoverageDialog.on_resultList_itemActivatedPyCoverageDialog.on_resultList_itemActivatedr]]]PyCoverageDialog.on_reloadButton_clickedPyCoverageDialog.on_reloadButton_clickedPyCoverageDialog.on_reloadButton_clickedxqWWWPyCoverageDialog.on_buttonBox_clickedPyCoverageDialog.on_buttonBox_clickedPyCoverageDialog.on_buttonBox_clickedopQQQPyCoverageDialog.__showContextMenuPyCoverageDialog.__showContextMenuPyCoverageDialog.__showContextMenuZoCCCPyCoverageDialog.__openFilePyCoverageDialog.__openFilePyCoverageDialog.__openFilefnKKKPyCoverageDialog.__format_linesPyCoverageDialog.__format_linesPyCoverageDialog.__format_linesTm???PyCoverageDialog.__finishPyCoverageDialog.__finishPyCoverageDialog.__finishQl===PyCoverageDialog.__erasePyCoverageDialog.__erasePyCoverageDialog.__erase q3v=D q9==PyProfileDialog (Module)PyProfileDialog (Module)[GG=PyProfileDialog (Constructor)PyProfileDialog (Constructor)PyProfileDialog.__init__6+++PyProfileDialogPyProfileDialogPyProfileDialog`~GGGPyProfile.trace_dispatch_callPyProfile.trace_dispatch_callPyProfile.trace_dispatch_call3})))PyProfile.savePyProfile.savePyProfile.save]|EEEPyProfile.fix_frame_filenamePyProfile.fix_frame_filenamePyProfile.fix_frame_filename6{+++PyProfile.erasePyProfile.erasePyProfile.eraseEz555PyProfile.dump_statsPyProfile.dump_statsPyProfile.dump_statsBy333PyProfile.__restorePyProfile.__restorePyProfile.__restore-x11PyProfile (Module)PyProfile (Module)Iw;;1PyProfile (Constructor)PyProfile (Constructor)PyProfile.__init__$vPyProfilePyProfilePyProfileWuAAAPyCoverageDialog.stringifyPyCoverageDialog.stringifyPyCoverageDialog.stringify sYNso QQQPyProfileDialog.__resortResultListPyProfileDialog.__resortResultListPyProfileDialog.__resortResultListf KKKPyProfileDialog.__populateListsPyProfileDialog.__populateListsPyProfileDialog.__populateListsQ===PyProfileDialog.__finishPyProfileDialog.__finishPyProfileDialog.__finishQ===PyProfileDialog.__filterPyProfileDialog.__filterPyProfileDialog.__filter`GGGPyProfileDialog.__eraseTimingPyProfileDialog.__eraseTimingPyProfileDialog.__eraseTimingcIIIPyProfileDialog.__eraseProfilePyProfileDialog.__eraseProfilePyProfileDialog.__eraseProfileWAAAPyProfileDialog.__eraseAllPyProfileDialog.__eraseAllPyProfileDialog.__eraseAllrSSSPyProfileDialog.__createSummaryItemPyProfileDialog.__createSummaryItemPyProfileDialog.__createSummaryItemoQQQPyProfileDialog.__createResultItemPyProfileDialog.__createResultItemPyProfileDialog.__createResultItem D7t=LDU???PyRegExpWizard.__initMenuPyRegExpWizard.__initMenuPyRegExpWizard.__initMenu[CCCPyRegExpWizard.__initActionPyRegExpWizard.__initActionPyRegExpWizard.__initActionO;;;PyRegExpWizard.__handlePyRegExpWizard.__handlePyRegExpWizard.__handleU???PyRegExpWizard.__callFormPyRegExpWizard.__callFormPyRegExpWizard.__callForm:==PyRegExpWizard (Package)PyRegExpWizard (Package)fYEE;PyRegExpWizard (Constructor)PyRegExpWizard (Constructor)PyRegExpWizard.__init__4)))PyRegExpWizardPyRegExpWizardPyRegExpWizardH777PyProfileDialog.startPyProfileDialog.startPyProfileDialog.startu UUUPyProfileDialog.on_buttonBox_clickedPyProfileDialog.on_buttonBox_clickedPyProfileDialog.on_buttonBox_clickedW AAAPyProfileDialog.__unfinishPyProfileDialog.__unfinishPyProfileDialog.__unfinishl OOOPyProfileDialog.__showContextMenuPyProfileDialog.__showContextMenuPyProfileDialog.__showContextMenu 6Vbo6mmmPyRegExpWizardCharactersDialog.__formatCharacterPyRegExpWizardCharactersDialog.__formatCharacterSPyRegExpWizardCharactersDialog.__formatCharacterkkkPyRegExpWizardCharactersDialog.__addSinglesLinePyRegExpWizardCharactersDialog.__addSinglesLineSPyRegExpWizardCharactersDialog.__addSinglesLineiiiPyRegExpWizardCharactersDialog.__addRangesLinePyRegExpWizardCharactersDialog.__addRangesLineSPyRegExpWizardCharactersDialog.__addRangesLineX[[PyRegExpWizardCharactersDialog (Module)PyRegExpWizardCharactersDialog (Module)S ee[PyRegExpWizardCharactersDialog (Constructor)PyRegExpWizardCharactersDialog (Constructor)SPyRegExpWizardCharactersDialog.__init__dIIIPyRegExpWizardCharactersDialogPyRegExpWizardCharactersDialogSPyRegExpWizardCharactersDialogU???PyRegExpWizard.deactivatePyRegExpWizard.deactivatePyRegExpWizard.deactivateO;;;PyRegExpWizard.activatePyRegExpWizard.activatePyRegExpWizard.activate WPU WD$GGPyRegExpWizardDialog (Module)PyRegExpWizardDialog (Module)Tk#QQGPyRegExpWizardDialog (Constructor)PyRegExpWizardDialog (Constructor)TPyRegExpWizardDialog.__init__F"555PyRegExpWizardDialogPyRegExpWizardDialogTPyRegExpWizardDialog!eeePyRegExpWizardCharactersDialog.getCharactersPyRegExpWizardCharactersDialog.getCharactersSPyRegExpWizardCharactersDialog.getCharacters2 }}}PyRegExpWizardCharactersDialog.__singlesCharTypeSelectedPyRegExpWizardCharactersDialog.__singlesCharTypeSelectedSPyRegExpWizardCharactersDialog.__singlesCharTypeSelected/{{{PyRegExpWizardCharactersDialog.__rangesCharTypeSelectedPyRegExpWizardCharactersDialog.__rangesCharTypeSelectedSPyRegExpWizardCharactersDialog.__rangesCharTypeSelected,yyyPyRegExpWizardCharactersDialog.__performSelectedActionPyRegExpWizardCharactersDialog.__performSelectedActionSPyRegExpWizardCharactersDialog.__performSelectedAction [DqN[F,555PyRegExpWizardWidgetPyRegExpWizardWidgetTPyRegExpWizardWidget&+uuuPyRegExpWizardRepeatDialog.on_upperSpin_valueChangedPyRegExpWizardRepeatDialog.on_upperSpin_valueChangedUPyRegExpWizardRepeatDialog.on_upperSpin_valueChanged&*uuuPyRegExpWizardRepeatDialog.on_lowerSpin_valueChangedPyRegExpWizardRepeatDialog.on_lowerSpin_valueChangedUPyRegExpWizardRepeatDialog.on_lowerSpin_valueChangedv)UUUPyRegExpWizardRepeatDialog.getRepeatPyRegExpWizardRepeatDialog.getRepeatUPyRegExpWizardRepeatDialog.getRepeatP(SSPyRegExpWizardRepeatDialog (Module)PyRegExpWizardRepeatDialog (Module)U}']]SPyRegExpWizardRepeatDialog (Constructor)PyRegExpWizardRepeatDialog (Constructor)UPyRegExpWizardRepeatDialog.__init__X&AAAPyRegExpWizardRepeatDialogPyRegExpWizardRepeatDialogUPyRegExpWizardRepeatDialog^%EEEPyRegExpWizardDialog.getCodePyRegExpWizardDialog.getCodeTPyRegExpWizardDialog.getCode |/|3___PyRegExpWizardWidget.on_buttonBox_clickedPyRegExpWizardWidget.on_buttonBox_clickedTPyRegExpWizardWidget.on_buttonBox_clicked2gggPyRegExpWizardWidget.on_beglineButton_clickedPyRegExpWizardWidget.on_beglineButton_clickedTPyRegExpWizardWidget.on_beglineButton_clicked1gggPyRegExpWizardWidget.on_anycharButton_clickedPyRegExpWizardWidget.on_anycharButton_clickedTPyRegExpWizardWidget.on_anycharButton_clicked0aaaPyRegExpWizardWidget.on_altnButton_clickedPyRegExpWizardWidget.on_altnButton_clickedTPyRegExpWizardWidget.on_altnButton_clicked^/EEEPyRegExpWizardWidget.getCodePyRegExpWizardWidget.getCodeTPyRegExpWizardWidget.getCodes.SSSPyRegExpWizardWidget.__insertStringPyRegExpWizardWidget.__insertStringTPyRegExpWizardWidget.__insertStringk-QQGPyRegExpWizardWidget (Constructor)PyRegExpWizardWidget (Constructor)TPyRegExpWizardWidget.__init__ tS) 9cccPyRegExpWizardWidget.on_groupButton_clickedPyRegExpWizardWidget.on_groupButton_clickedTPyRegExpWizardWidget.on_groupButton_clicked8gggPyRegExpWizardWidget.on_executeButton_clickedPyRegExpWizardWidget.on_executeButton_clickedTPyRegExpWizardWidget.on_executeButton_clicked7gggPyRegExpWizardWidget.on_endlineButton_clickedPyRegExpWizardWidget.on_endlineButton_clickedTPyRegExpWizardWidget.on_endlineButton_clicked6aaaPyRegExpWizardWidget.on_copyButton_clickedPyRegExpWizardWidget.on_copyButton_clickedTPyRegExpWizardWidget.on_copyButton_clicked5gggPyRegExpWizardWidget.on_commentButton_clickedPyRegExpWizardWidget.on_commentButton_clickedTPyRegExpWizardWidget.on_commentButton_clicked4aaaPyRegExpWizardWidget.on_charButton_clickedPyRegExpWizardWidget.on_charButton_clickedTPyRegExpWizardWidget.on_charButton_clickednl!lrx~ &,28>DJPV\bhntz "(.4:@FLRX^djpv|Q¤Xä_ĤeŤnƤxǥȥɥ ʥ˥̥"ͥ(Υ/ϥ7Х=R[biqy%.7?HQ¤Xä_ĤeŤnƤxǥȥɥ ʥ˥̥"ͥ(Υ/ϥ7Х=ѥCҥIӥOԥXե`֥kץtئ٦ ڦۦܦ$ݦ,ަ3ߦ9?ELZdjs{#+3;CKS[els{)17@HR\enz ' 5 B O Wblt}(4>IQXbow  Ut,U?aaaPyRegExpWizardWidget.on_nextButton_clickedPyRegExpWizardWidget.on_nextButton_clickedTPyRegExpWizardWidget.on_nextButton_clicked#>sssPyRegExpWizardWidget.on_neglookbehindButton_clickedPyRegExpWizardWidget.on_neglookbehindButton_clickedTPyRegExpWizardWidget.on_neglookbehindButton_clicked =qqqPyRegExpWizardWidget.on_neglookaheadButton_clickedPyRegExpWizardWidget.on_neglookaheadButton_clickedTPyRegExpWizardWidget.on_neglookaheadButton_clicked&<uuuPyRegExpWizardWidget.on_namedReferenceButton_clickedPyRegExpWizardWidget.on_namedReferenceButton_clickedTPyRegExpWizardWidget.on_namedReferenceButton_clicked;mmmPyRegExpWizardWidget.on_namedGroupButton_clickedPyRegExpWizardWidget.on_namedGroupButton_clickedTPyRegExpWizardWidget.on_namedGroupButton_clicked:aaaPyRegExpWizardWidget.on_loadButton_clickedPyRegExpWizardWidget.on_loadButton_clickedTPyRegExpWizardWidget.on_loadButton_clicked dh ydEaaaPyRegExpWizardWidget.on_redoButton_clickedPyRegExpWizardWidget.on_redoButton_clickedTPyRegExpWizardWidget.on_redoButton_clickedD___PyRegExpWizardWidget.on_py2Button_toggledPyRegExpWizardWidget.on_py2Button_toggledTPyRegExpWizardWidget.on_py2Button_toggled#CsssPyRegExpWizardWidget.on_poslookbehindButton_clickedPyRegExpWizardWidget.on_poslookbehindButton_clickedTPyRegExpWizardWidget.on_poslookbehindButton_clicked BqqqPyRegExpWizardWidget.on_poslookaheadButton_clickedPyRegExpWizardWidget.on_poslookaheadButton_clickedTPyRegExpWizardWidget.on_poslookaheadButton_clicked AqqqPyRegExpWizardWidget.on_nonwordboundButton_clickedPyRegExpWizardWidget.on_nonwordboundButton_clickedTPyRegExpWizardWidget.on_nonwordboundButton_clicked@iiiPyRegExpWizardWidget.on_nonGroupButton_clickedPyRegExpWizardWidget.on_nonGroupButton_clickedTPyRegExpWizardWidget.on_nonGroupButton_clicked 6\>6FL555PyRegExpWizardWindowPyRegExpWizardWindowTPyRegExpWizardWindowKkkkPyRegExpWizardWidget.on_wordboundButton_clickedPyRegExpWizardWidget.on_wordboundButton_clickedTPyRegExpWizardWidget.on_wordboundButton_clickedJiiiPyRegExpWizardWidget.on_validateButton_clickedPyRegExpWizardWidget.on_validateButton_clickedTPyRegExpWizardWidget.on_validateButton_clickedIaaaPyRegExpWizardWidget.on_undoButton_clickedPyRegExpWizardWidget.on_undoButton_clickedTPyRegExpWizardWidget.on_undoButton_clickedHaaaPyRegExpWizardWidget.on_saveButton_clickedPyRegExpWizardWidget.on_saveButton_clickedTPyRegExpWizardWidget.on_saveButton_clickedGeeePyRegExpWizardWidget.on_repeatButton_clickedPyRegExpWizardWidget.on_repeatButton_clickedTPyRegExpWizardWidget.on_repeatButton_clicked FqqqPyRegExpWizardWidget.on_regexpTextEdit_textChangedPyRegExpWizardWidget.on_regexpTextEdit_textChangedTPyRegExpWizardWidget.on_regexpTextEdit_textChanged ne%zMp6n8Z;;QRegExpWizard (Package)QRegExpWizard (Package)gVYCC9QRegExpWizard (Constructor)QRegExpWizard (Constructor) QRegExpWizard.__init__1X'''QRegExpWizardQRegExpWizard QRegExpWizard7W+++PythonPage.savePythonPage.savePythonPage.save0V33PythonPage (Module)PythonPage (Module)MU==3PythonPage (Constructor)PythonPage (Constructor)PythonPage.__init__(T!!!PythonPagePythonPagePythonPage,S//Python3 (Package)Python3 (Package)8*R--Python (Package)Python (Package)7gQKKKPyrcAccessHandler.createRequestPyrcAccessHandler.createRequestPyrcAccessHandler.createRequest>PAAPyrcAccessHandler (Module)PyrcAccessHandler (Module)=O///PyrcAccessHandlerPyrcAccessHandlerPyrcAccessHandler*N--PyUnit (Package)PyUnit (Package)mkMQQGPyRegExpWizardWindow (Constructor)PyRegExpWizardWindow (Constructor)TPyRegExpWizardWindow.__init__ ,\],dgggQRegExpWizardCharactersDialog.__addRangesLineQRegExpWizardCharactersDialog.__addRangesLineVQRegExpWizardCharactersDialog.__addRangesLineVcYYQRegExpWizardCharactersDialog (Module)QRegExpWizardCharactersDialog (Module)VbccYQRegExpWizardCharactersDialog (Constructor)QRegExpWizardCharactersDialog (Constructor)VQRegExpWizardCharactersDialog.__init__aaGGGQRegExpWizardCharactersDialogQRegExpWizardCharactersDialogVQRegExpWizardCharactersDialogR`===QRegExpWizard.deactivateQRegExpWizard.deactivate QRegExpWizard.deactivateL_999QRegExpWizard.activateQRegExpWizard.activate QRegExpWizard.activateR^===QRegExpWizard.__initMenuQRegExpWizard.__initMenu QRegExpWizard.__initMenuX]AAAQRegExpWizard.__initActionQRegExpWizard.__initAction QRegExpWizard.__initActionL\999QRegExpWizard.__handleQRegExpWizard.__handle QRegExpWizard.__handleR[===QRegExpWizard.__callFormQRegExpWizard.__callForm QRegExpWizard.__callForm .h p. jcccQRegExpWizardCharactersDialog.getCharactersQRegExpWizardCharactersDialog.getCharactersVQRegExpWizardCharactersDialog.getCharacters/i{{{QRegExpWizardCharactersDialog.__singlesCharTypeSelectedQRegExpWizardCharactersDialog.__singlesCharTypeSelectedVQRegExpWizardCharactersDialog.__singlesCharTypeSelected,hyyyQRegExpWizardCharactersDialog.__rangesCharTypeSelectedQRegExpWizardCharactersDialog.__rangesCharTypeSelectedVQRegExpWizardCharactersDialog.__rangesCharTypeSelected)gwwwQRegExpWizardCharactersDialog.__performSelectedActionQRegExpWizardCharactersDialog.__performSelectedActionVQRegExpWizardCharactersDialog.__performSelectedActionfkkkQRegExpWizardCharactersDialog.__formatCharacterQRegExpWizardCharactersDialog.__formatCharacterVQRegExpWizardCharactersDialog.__formatCharactereiiiQRegExpWizardCharactersDialog.__addSinglesLineQRegExpWizardCharactersDialog.__addSinglesLineVQRegExpWizardCharactersDialog.__addSinglesLine iO Ti#ssssQRegExpWizardRepeatDialog.on_lowerSpin_valueChangedQRegExpWizardRepeatDialog.on_lowerSpin_valueChangedXQRegExpWizardRepeatDialog.on_lowerSpin_valueChangedsrSSSQRegExpWizardRepeatDialog.getRepeatQRegExpWizardRepeatDialog.getRepeatXQRegExpWizardRepeatDialog.getRepeatNqQQQRegExpWizardRepeatDialog (Module)QRegExpWizardRepeatDialog (Module)Xzp[[QQRegExpWizardRepeatDialog (Constructor)QRegExpWizardRepeatDialog (Constructor)XQRegExpWizardRepeatDialog.__init__Uo???QRegExpWizardRepeatDialogQRegExpWizardRepeatDialogXQRegExpWizardRepeatDialog[nCCCQRegExpWizardDialog.getCodeQRegExpWizardDialog.getCodeWQRegExpWizardDialog.getCodeBmEEQRegExpWizardDialog (Module)QRegExpWizardDialog (Module)WhlOOEQRegExpWizardDialog (Constructor)QRegExpWizardDialog (Constructor)WQRegExpWizardDialog.__init__Ck333QRegExpWizardDialogQRegExpWizardDialogWQRegExpWizardDialog *Y5N*{eeeQRegExpWizardWidget.on_beglineButton_clickedQRegExpWizardWidget.on_beglineButton_clickedWQRegExpWizardWidget.on_beglineButton_clickedzeeeQRegExpWizardWidget.on_anycharButton_clickedQRegExpWizardWidget.on_anycharButton_clickedWQRegExpWizardWidget.on_anycharButton_clickedy___QRegExpWizardWidget.on_altnButton_clickedQRegExpWizardWidget.on_altnButton_clickedWQRegExpWizardWidget.on_altnButton_clicked[xCCCQRegExpWizardWidget.getCodeQRegExpWizardWidget.getCodeWQRegExpWizardWidget.getCodepwQQQQRegExpWizardWidget.__insertStringQRegExpWizardWidget.__insertStringWQRegExpWizardWidget.__insertStringhvOOEQRegExpWizardWidget (Constructor)QRegExpWizardWidget (Constructor)WQRegExpWizardWidget.__init__Cu333QRegExpWizardWidgetQRegExpWizardWidgetWQRegExpWizardWidget#tsssQRegExpWizardRepeatDialog.on_upperSpin_valueChangedQRegExpWizardRepeatDialog.on_upperSpin_valueChangedXQRegExpWizardRepeatDialog.on_upperSpin_valueChanged /zhD/___QRegExpWizardWidget.on_loadButton_clickedQRegExpWizardWidget.on_loadButton_clickedWQRegExpWizardWidget.on_loadButton_clickedaaaQRegExpWizardWidget.on_groupButton_clickedQRegExpWizardWidget.on_groupButton_clickedWQRegExpWizardWidget.on_groupButton_clickedeeeQRegExpWizardWidget.on_executeButton_clickedQRegExpWizardWidget.on_executeButton_clickedWQRegExpWizardWidget.on_executeButton_clickedeeeQRegExpWizardWidget.on_endlineButton_clickedQRegExpWizardWidget.on_endlineButton_clickedWQRegExpWizardWidget.on_endlineButton_clicked~___QRegExpWizardWidget.on_copyButton_clickedQRegExpWizardWidget.on_copyButton_clickedWQRegExpWizardWidget.on_copyButton_clicked}___QRegExpWizardWidget.on_charButton_clickedQRegExpWizardWidget.on_charButton_clickedWQRegExpWizardWidget.on_charButton_clicked|]]]QRegExpWizardWidget.on_buttonBox_clickedQRegExpWizardWidget.on_buttonBox_clickedWQRegExpWizardWidget.on_buttonBox_clicked ^_A^oooQRegExpWizardWidget.on_regexpLineEdit_textChangedQRegExpWizardWidget.on_regexpLineEdit_textChangedWQRegExpWizardWidget.on_regexpLineEdit_textChangedoooQRegExpWizardWidget.on_poslookaheadButton_clickedQRegExpWizardWidget.on_poslookaheadButton_clickedWQRegExpWizardWidget.on_poslookaheadButton_clickedoooQRegExpWizardWidget.on_nonwordboundButton_clickedQRegExpWizardWidget.on_nonwordboundButton_clickedWQRegExpWizardWidget.on_nonwordboundButton_clickedgggQRegExpWizardWidget.on_nonGroupButton_clickedQRegExpWizardWidget.on_nonGroupButton_clickedWQRegExpWizardWidget.on_nonGroupButton_clicked___QRegExpWizardWidget.on_nextButton_clickedQRegExpWizardWidget.on_nextButton_clickedWQRegExpWizardWidget.on_nextButton_clickedoooQRegExpWizardWidget.on_neglookaheadButton_clickedQRegExpWizardWidget.on_neglookaheadButton_clickedWQRegExpWizardWidget.on_neglookaheadButton_clicked LqSu LC333QsciScintillaCompatQsciScintillaCompatQsciScintillaCompat255QScintilla (Package)QScintilla (Package)q@111QSCINTILLA_VERSIONQSCINTILLA_VERSIONQSCINTILLA_VERSIONhOOEQRegExpWizardWindow (Constructor)QRegExpWizardWindow (Constructor)WQRegExpWizardWindow.__init__C 333QRegExpWizardWindowQRegExpWizardWindowWQRegExpWizardWindow iiiQRegExpWizardWidget.on_wordboundButton_clickedQRegExpWizardWidget.on_wordboundButton_clickedWQRegExpWizardWidget.on_wordboundButton_clicked gggQRegExpWizardWidget.on_validateButton_clickedQRegExpWizardWidget.on_validateButton_clickedWQRegExpWizardWidget.on_validateButton_clicked ___QRegExpWizardWidget.on_saveButton_clickedQRegExpWizardWidget.on_saveButton_clickedWQRegExpWizardWidget.on_saveButton_clicked cccQRegExpWizardWidget.on_repeatButton_clickedQRegExpWizardWidget.on_repeatButton_clickedWQRegExpWizardWidget.on_repeatButton_clicked %P|~ %aGGGQsciScintillaCompat.clearKeysQsciScintillaCompat.clearKeysQsciScintillaCompat.clearKeys[[[QsciScintillaCompat.clearIndicatorRangeQsciScintillaCompat.clearIndicatorRangeQsciScintillaCompat.clearIndicatorRangepQQQQsciScintillaCompat.clearIndicatorQsciScintillaCompat.clearIndicatorQsciScintillaCompat.clearIndicator|YYYQsciScintillaCompat.clearAlternateKeysQsciScintillaCompat.clearAlternateKeysQsciScintillaCompat.clearAlternateKeys|YYYQsciScintillaCompat.clearAllIndicatorsQsciScintillaCompat.clearAllIndicatorsQsciScintillaCompat.clearAllIndicatorsXAAAQsciScintillaCompat.charAtQsciScintillaCompat.charAtQsciScintillaCompat.charAtvUUUQsciScintillaCompat.__doSearchTargetQsciScintillaCompat.__doSearchTargetQsciScintillaCompat.__doSearchTargetBEEQsciScintillaCompat (Module)QsciScintillaCompat (Module)hOOEQsciScintillaCompat (Constructor)QsciScintillaCompat (Constructor)QsciScintillaCompat.__init__  X~s#SSSQsciScintillaCompat.deleteWordRightQsciScintillaCompat.deleteWordRightQsciScintillaCompat.deleteWordRightp"QQQQsciScintillaCompat.deleteWordLeftQsciScintillaCompat.deleteWordLeftQsciScintillaCompat.deleteWordLefts!SSSQsciScintillaCompat.deleteLineRightQsciScintillaCompat.deleteLineRightQsciScintillaCompat.deleteLineRightp QQQQsciScintillaCompat.deleteLineLeftQsciScintillaCompat.deleteLineLeftQsciScintillaCompat.deleteLineLeftdIIIQsciScintillaCompat.deleteBackQsciScintillaCompat.deleteBackQsciScintillaCompat.deleteBackXAAAQsciScintillaCompat.deleteQsciScintillaCompat.deleteQsciScintillaCompat.deletejMMMQsciScintillaCompat.currentStyleQsciScintillaCompat.currentStyleQsciScintillaCompat.currentStylesSSSQsciScintillaCompat.currentPositionQsciScintillaCompat.currentPositionQsciScintillaCompat.currentPositiongKKKQsciScintillaCompat.clearStylesQsciScintillaCompat.clearStylesQsciScintillaCompat.clearStyles @4 +cccQsciScintillaCompat.extendSelectionWordLeftQsciScintillaCompat.extendSelectionWordLeftQsciScintillaCompat.extendSelectionWordLeft*]]]QsciScintillaCompat.extendSelectionToEOLQsciScintillaCompat.extendSelectionToEOLQsciScintillaCompat.extendSelectionToEOL)]]]QsciScintillaCompat.extendSelectionToBOLQsciScintillaCompat.extendSelectionToBOLQsciScintillaCompat.extendSelectionToBOL(]]]QsciScintillaCompat.extendSelectionRightQsciScintillaCompat.extendSelectionRightQsciScintillaCompat.extendSelectionRight'[[[QsciScintillaCompat.extendSelectionLeftQsciScintillaCompat.extendSelectionLeftQsciScintillaCompat.extendSelectionLeftU&???QsciScintillaCompat.eventQsciScintillaCompat.eventQsciScintillaCompat.eventm%OOOQsciScintillaCompat.editorCommandQsciScintillaCompat.editorCommandQsciScintillaCompat.editorCommands$SSSQsciScintillaCompat.detectEolStringQsciScintillaCompat.detectEolStringQsciScintillaCompat.detectEolString an8ag3KKKQsciScintillaCompat.foldLevelAtQsciScintillaCompat.foldLevelAtQsciScintillaCompat.foldLevelAtj2MMMQsciScintillaCompat.foldHeaderAtQsciScintillaCompat.foldHeaderAtQsciScintillaCompat.foldHeaderAtg1KKKQsciScintillaCompat.foldFlagsAtQsciScintillaCompat.foldFlagsAtQsciScintillaCompat.foldFlagsAtp0QQQQsciScintillaCompat.foldExpandedAtQsciScintillaCompat.foldExpandedAtQsciScintillaCompat.foldExpandedAtm/OOOQsciScintillaCompat.focusOutEventQsciScintillaCompat.focusOutEventQsciScintillaCompat.focusOutEventp.QQQQsciScintillaCompat.findNextTargetQsciScintillaCompat.findNextTargetQsciScintillaCompat.findNextTargets-SSSQsciScintillaCompat.findFirstTargetQsciScintillaCompat.findFirstTargetQsciScintillaCompat.findFirstTarget,eeeQsciScintillaCompat.extendSelectionWordRightQsciScintillaCompat.extendSelectionWordRightQsciScintillaCompat.extendSelectionWordRight }4H}j;MMMQsciScintillaCompat.hasIndicatorQsciScintillaCompat.hasIndicatorQsciScintillaCompat.hasIndicator[:CCCQsciScintillaCompat.getZoomQsciScintillaCompat.getZoomQsciScintillaCompat.getZoomv9UUUQsciScintillaCompat.getLineSeparatorQsciScintillaCompat.getLineSeparatorQsciScintillaCompat.getLineSeparatorp8QQQQsciScintillaCompat.getFoundTargetQsciScintillaCompat.getFoundTargetQsciScintillaCompat.getFoundTargetg7KKKQsciScintillaCompat.getFileNameQsciScintillaCompat.getFileNameQsciScintillaCompat.getFileNames6SSSQsciScintillaCompat.getEolIndicatorQsciScintillaCompat.getEolIndicatorQsciScintillaCompat.getEolIndicatorj5MMMQsciScintillaCompat.getEndStyledQsciScintillaCompat.getEndStyledQsciScintillaCompat.getEndStyled|4YYYQsciScintillaCompat.getCursorFlashTimeQsciScintillaCompat.getCursorFlashTimeQsciScintillaCompat.getCursorFlashTime W!PWmCOOOQsciScintillaCompat.linesOnScreenQsciScintillaCompat.linesOnScreenQsciScintillaCompat.linesOnScreenB___QsciScintillaCompat.lineIndexFromPositionQsciScintillaCompat.lineIndexFromPositionQsciScintillaCompat.lineIndexFromPositionsASSSQsciScintillaCompat.lineEndPositionQsciScintillaCompat.lineEndPositionQsciScintillaCompat.lineEndPositionX@AAAQsciScintillaCompat.lineAtQsciScintillaCompat.lineAtQsciScintillaCompat.lineAts?SSSQsciScintillaCompat.indicatorDefineQsciScintillaCompat.indicatorDefineQsciScintillaCompat.indicatorDefine>]]]QsciScintillaCompat.indentationGuideViewQsciScintillaCompat.indentationGuideViewQsciScintillaCompat.indentationGuideViewj=MMMQsciScintillaCompat.hasSelectionQsciScintillaCompat.hasSelectionQsciScintillaCompat.hasSelections<SSSQsciScintillaCompat.hasSelectedTextQsciScintillaCompat.hasSelectedTextQsciScintillaCompat.hasSelectedText J('JmKOOOQsciScintillaCompat.positionAfterQsciScintillaCompat.positionAfterQsciScintillaCompat.positionAfterjJMMMQsciScintillaCompat.newLineBelowQsciScintillaCompat.newLineBelowQsciScintillaCompat.newLineBelowI[[[QsciScintillaCompat.moveCursorWordRightQsciScintillaCompat.moveCursorWordRightQsciScintillaCompat.moveCursorWordRight|HYYYQsciScintillaCompat.moveCursorWordLeftQsciScintillaCompat.moveCursorWordLeftQsciScintillaCompat.moveCursorWordLeftsGSSSQsciScintillaCompat.moveCursorToEOLQsciScintillaCompat.moveCursorToEOLQsciScintillaCompat.moveCursorToEOLsFSSSQsciScintillaCompat.moveCursorRightQsciScintillaCompat.moveCursorRightQsciScintillaCompat.moveCursorRightpEQQQQsciScintillaCompat.moveCursorLeftQsciScintillaCompat.moveCursorLeftQsciScintillaCompat.moveCursorLeftvDUUUQsciScintillaCompat.monospacedStylesQsciScintillaCompat.monospacedStylesQsciScintillaCompat.monospacedStyles 9$A9S[[[QsciScintillaCompat.setCurrentIndicatorQsciScintillaCompat.setCurrentIndicatorQsciScintillaCompat.setCurrentIndicatorR]]]QsciScintillaCompat.selectionIsRectangleQsciScintillaCompat.selectionIsRectangleQsciScintillaCompat.selectionIsRectanglepQQQQQsciScintillaCompat.scrollVerticalQsciScintillaCompat.scrollVerticalQsciScintillaCompat.scrollVerticalmPOOOQsciScintillaCompat.replaceTargetQsciScintillaCompat.replaceTargetQsciScintillaCompat.replaceTargetaOGGGQsciScintillaCompat.rawCharAtQsciScintillaCompat.rawCharAtQsciScintillaCompat.rawCharAtyNWWWQsciScintillaCompat.positionFromPointQsciScintillaCompat.positionFromPointQsciScintillaCompat.positionFromPointM___QsciScintillaCompat.positionFromLineIndexQsciScintillaCompat.positionFromLineIndexQsciScintillaCompat.positionFromLineIndexpLQQQQsciScintillaCompat.positionBeforeQsciScintillaCompat.positionBeforeQsciScintillaCompat.positionBefore KiKd[IIIQsciScintillaCompat.setStylingQsciScintillaCompat.setStylingQsciScintillaCompat.setStylingjZMMMQsciScintillaCompat.setStyleBitsQsciScintillaCompat.setStyleBitsQsciScintillaCompat.setStyleBits^YEEEQsciScintillaCompat.setLexerQsciScintillaCompat.setLexerQsciScintillaCompat.setLexeryXWWWQsciScintillaCompat.setIndicatorRangeQsciScintillaCompat.setIndicatorRangeQsciScintillaCompat.setIndicatorRangejWMMMQsciScintillaCompat.setIndicatorQsciScintillaCompat.setIndicatorQsciScintillaCompat.setIndicator VcccQsciScintillaCompat.setIndentationGuideViewQsciScintillaCompat.setIndentationGuideViewQsciScintillaCompat.setIndentationGuideViewU___QsciScintillaCompat.setEolModeByEolStringQsciScintillaCompat.setEolModeByEolStringQsciScintillaCompat.setEolModeByEolString|TYYYQsciScintillaCompat.setCursorFlashTimeQsciScintillaCompat.setCursorFlashTimeQsciScintillaCompat.setCursorFlashTime N&mnNmeOOOQtHelpAccessHandler.__mimeFromUrlQtHelpAccessHandler.__mimeFromUrlQtHelpAccessHandler.__mimeFromUrlBdEEQtHelpAccessHandler (Module)QtHelpAccessHandler (Module)hcOOEQtHelpAccessHandler (Constructor)QtHelpAccessHandler (Constructor)QtHelpAccessHandler.__init__Cb333QtHelpAccessHandlerQtHelpAccessHandlerQtHelpAccessHandlerXaAAAQsciScintillaCompat.zoomToQsciScintillaCompat.zoomToQsciScintillaCompat.zoomTo[`CCCQsciScintillaCompat.zoomOutQsciScintillaCompat.zoomOutQsciScintillaCompat.zoomOutX_AAAQsciScintillaCompat.zoomInQsciScintillaCompat.zoomInQsciScintillaCompat.zoomIn[^CCCQsciScintillaCompat.styleAtQsciScintillaCompat.styleAtQsciScintillaCompat.styleAtj]MMMQsciScintillaCompat.startStylingQsciScintillaCompat.startStylingQsciScintillaCompat.startStylingj\MMMQsciScintillaCompat.showUserListQsciScintillaCompat.showUserListQsciScintillaCompat.showUserList 8jkliiiQtHelpDocumentationDialog.on_addButton_clickedQtHelpDocumentationDialog.on_addButton_clickedQtHelpDocumentationDialog.on_addButton_clickedvkUUUQtHelpDocumentationDialog.hasChangesQtHelpDocumentationDialog.hasChangesQtHelpDocumentationDialog.hasChangesj]]]QtHelpDocumentationDialog.getTabsToCloseQtHelpDocumentationDialog.getTabsToCloseQtHelpDocumentationDialog.getTabsToCloseNiQQQtHelpDocumentationDialog (Module)QtHelpDocumentationDialog (Module)zh[[QQtHelpDocumentationDialog (Constructor)QtHelpDocumentationDialog (Constructor)QtHelpDocumentationDialog.__init__Ug???QtHelpDocumentationDialogQtHelpDocumentationDialogQtHelpDocumentationDialogmfOOOQtHelpAccessHandler.createRequestQtHelpAccessHandler.createRequestQtHelpAccessHandler.createRequest 2Ks]]]QtHelpFiltersDialog.on_addButton_clickedQtHelpFiltersDialog.on_addButton_clickedQtHelpFiltersDialog.on_addButton_clicked|rYYYQtHelpFiltersDialog.__removeAttributesQtHelpFiltersDialog.__removeAttributesQtHelpFiltersDialog.__removeAttributesBqEEQtHelpFiltersDialog (Module)QtHelpFiltersDialog (Module)hpOOEQtHelpFiltersDialog (Constructor)QtHelpFiltersDialog (Constructor)QtHelpFiltersDialog.__init__Co333QtHelpFiltersDialogQtHelpFiltersDialogQtHelpFiltersDialognoooQtHelpDocumentationDialog.on_removeButton_clickedQtHelpDocumentationDialog.on_removeButton_clickedQtHelpDocumentationDialog.on_removeButton_clickedJm  QtHelpDocumentationDialog.on_documentsList_itemSelectionChangedQtHelpDocumentationDialog.on_documentsList_itemSelectionChangedQtHelpDocumentationDialog.on_documentsList_itemSelectionChanged _)Y9{==QtHelpGenerator (Module)QtHelpGenerator (Module)I[zGG=QtHelpGenerator (Constructor)QtHelpGenerator (Constructor)IQtHelpGenerator.__init__6y+++QtHelpGeneratorQtHelpGeneratorIQtHelpGenerator xcccQtHelpFiltersDialog.on_removeButton_clickedQtHelpFiltersDialog.on_removeButton_clickedQtHelpFiltersDialog.on_removeButton_clicked&wuuuQtHelpFiltersDialog.on_removeAttributeButton_clickedQtHelpFiltersDialog.on_removeAttributeButton_clickedQtHelpFiltersDialog.on_removeAttributeButton_clicked)vwwwQtHelpFiltersDialog.on_filtersList_currentItemChangedQtHelpFiltersDialog.on_filtersList_currentItemChangedQtHelpFiltersDialog.on_filtersList_currentItemChangedu___QtHelpFiltersDialog.on_buttonBox_acceptedQtHelpFiltersDialog.on_buttonBox_acceptedQtHelpFiltersDialog.on_buttonBox_acceptedtoooQtHelpFiltersDialog.on_attributesList_itemChangedQtHelpFiltersDialog.on_attributesList_itemChangedQtHelpFiltersDialog.on_attributesList_itemChanged 5eF$5sSSSQtPage.on_qt4PrefixEdit_textChangedQtPage.on_qt4PrefixEdit_textChangedQtPage.on_qt4PrefixEdit_textChangedvUUUQtPage.on_qt4PostfixEdit_textChangedQtPage.on_qt4PostfixEdit_textChangedQtPage.on_qt4PostfixEdit_textChanged[CCCQtPage.on_qt4Button_clickedQtPage.on_qt4Button_clickedQtPage.on_qt4Button_clickedR===QtPage.__updateQt4SampleQtPage.__updateQt4SampleQtPage.__updateQt4Sample(++QtPage (Module)QtPage (Module)A55+QtPage (Constructor)QtPage (Constructor)QtPage.__init__QtPageQtPageQtPageQ===QtHelpGenerator.rememberQtHelpGenerator.rememberIQtHelpGenerator.remember`~GGGQtHelpGenerator.generateFilesQtHelpGenerator.generateFilesIQtHelpGenerator.generateFileso}QQQQtHelpGenerator.__generateSectionsQtHelpGenerator.__generateSectionsIQtHelpGenerator.__generateSectionso|QQQQtHelpGenerator.__generateKeywordsQtHelpGenerator.__generateKeywordsIQtHelpGenerator.__generateKeywords e4@_jMMMQuickSearchLineEdit.focusInEventQuickSearchLineEdit.focusInEventQuickSearchLineEdit.focusInEventmOOOQuickSearchLineEdit.editorCommandQuickSearchLineEdit.editorCommandQuickSearchLineEdit.editorCommandC333QuickSearchLineEditQuickSearchLineEditQuickSearchLineEditI777QtTestResult.stopTestQtTestResult.stopTestQtTestResult.stopTestL 999QtTestResult.startTestQtTestResult.startTestQtTestResult.startTestO ;;;QtTestResult.addFailureQtTestResult.addFailureQtTestResult.addFailureI 777QtTestResult.addErrorQtTestResult.addErrorQtTestResult.addErrorS AA7QtTestResult (Constructor)QtTestResult (Constructor)QtTestResult.__init__. %%%QtTestResultQtTestResultQtTestResult+###QtPage.saveQtPage.saveQtPage.savejMMMQtPage.on_qt4TransButton_clickedQtPage.on_qt4TransButton_clickedQtPage.on_qt4TransButton_clicked Qk!/QQqUUKRemoveBookmarksCommand (Constructor)RemoveBookmarksCommand (Constructor)RemoveBookmarksCommand.__init__L999RemoveBookmarksCommandRemoveBookmarksCommandRemoveBookmarksCommand:---Redirector.writeRedirector.writeRedirector.write:---Redirector.flushRedirector.flushRedirector.flushC333Redirector.__nWriteRedirector.__nWriteRedirector.__nWriteXAAARedirector.__bufferedWriteRedirector.__bufferedWriteRedirector.__bufferedWriteM==3Redirector (Constructor)Redirector (Constructor)Redirector.__init__(!!!RedirectorRedirectorRedirector4)))RecursionErrorRecursionErrorRecursionError=///RbModule.addClassRbModule.addClass RbModule.addClassG99/RbModule (Constructor)RbModule (Constructor) RbModule.__init__"RbModuleRbModule RbModulemOOOQuickSearchLineEdit.keyPressEventQuickSearchLineEdit.keyPressEventQuickSearchLineEdit.keyPressEvent xD#n(xB)EESearchReplaceWidget (Module)SearchReplaceWidget (Module)h(OOESearchReplaceWidget (Constructor)SearchReplaceWidget (Constructor)SearchReplaceWidget.__init__C'333SearchReplaceWidgetSearchReplaceWidgetSearchReplaceWidgetm&OOOSchemeAccessHandler.createRequestSchemeAccessHandler.createRequestSchemeAccessHandler.createRequestB%EESchemeAccessHandler (Module)SchemeAccessHandler (Module)h$OOESchemeAccessHandler (Constructor)SchemeAccessHandler (Constructor)SchemeAccessHandler.__init__C#333SchemeAccessHandlerSchemeAccessHandlerSchemeAccessHandler&"))Ruby (Package)Ruby (Package)9D!GGRepositoryInfoDialog (Module)RepositoryInfoDialog (Module)[ CCCRemoveBookmarksCommand.undoRemoveBookmarksCommand.undoRemoveBookmarksCommand.undo[CCCRemoveBookmarksCommand.redoRemoveBookmarksCommand.redoRemoveBookmarksCommand.redo  G^1EEESearchReplaceWidget.findPrevSearchReplaceWidget.findPrevSearchReplaceWidget.findPrev^0EEESearchReplaceWidget.findNextSearchReplaceWidget.findNextSearchReplaceWidget.findNextm/OOOSearchReplaceWidget.__showReplaceSearchReplaceWidget.__showReplaceSearchReplaceWidget.__showReplaced.IIISearchReplaceWidget.__showFindSearchReplaceWidget.__showFindSearchReplaceWidget.__showFindy-WWWSearchReplaceWidget.__markOccurrencesSearchReplaceWidget.__markOccurrencesSearchReplaceWidget.__markOccurrencesp,QQQSearchReplaceWidget.__findNextPrevSearchReplaceWidget.__findNextPrevSearchReplaceWidget.__findNextPrev+___SearchReplaceWidget.__findByReturnPressedSearchReplaceWidget.__findByReturnPressedSearchReplaceWidget.__findByReturnPressedg*KKKSearchReplaceWidget.__doReplaceSearchReplaceWidget.__doReplaceSearchReplaceWidget.__doReplace o07kkkSearchReplaceWidget.on_replaceAllButton_clickedSearchReplaceWidget.on_replaceAllButton_clickedSearchReplaceWidget.on_replaceAllButton_clicked&6uuuSearchReplaceWidget.on_findtextCombo_editTextChangedSearchReplaceWidget.on_findtextCombo_editTextChangedSearchReplaceWidget.on_findtextCombo_editTextChanged5gggSearchReplaceWidget.on_findPrevButton_clickedSearchReplaceWidget.on_findPrevButton_clickedSearchReplaceWidget.on_findPrevButton_clicked4gggSearchReplaceWidget.on_findNextButton_clickedSearchReplaceWidget.on_findNextButton_clickedSearchReplaceWidget.on_findNextButton_clicked3aaaSearchReplaceWidget.on_closeButton_clickedSearchReplaceWidget.on_closeButton_clickedSearchReplaceWidget.on_closeButton_clickedm2OOOSearchReplaceWidget.keyPressEventSearchReplaceWidget.keyPressEventSearchReplaceWidget.keyPressEvent <nQm<<p@QQQSearchWidget.__findByReturnPressedSearchWidget.__findByReturnPressedSearchWidget.__findByReturnPressed4?77SearchWidget (Module)SearchWidget (Module)S>AA7SearchWidget (Constructor)SearchWidget (Constructor)SearchWidget.__init__.=%%%SearchWidgetSearchWidgetSearchWidget <cccSearchReplaceWidget.updateSelectionCheckBoxSearchReplaceWidget.updateSelectionCheckBoxSearchReplaceWidget.updateSelectionCheckBoxR;===SearchReplaceWidget.showSearchReplaceWidget.showSearchReplaceWidget.showv:UUUSearchReplaceWidget.selectionChangedSearchReplaceWidget.selectionChangedSearchReplaceWidget.selectionChanged 9qqqSearchReplaceWidget.on_replaceSearchButton_clickedSearchReplaceWidget.on_replaceSearchButton_clickedSearchReplaceWidget.on_replaceSearchButton_clicked8eeeSearchReplaceWidget.on_replaceButton_clickedSearchReplaceWidget.on_replaceButton_clickedSearchReplaceWidget.on_replaceButton_clicked u%|HYYYSearchWidget.on_findPrevButton_clickedSearchWidget.on_findPrevButton_clickedSearchWidget.on_findPrevButton_clicked|GYYYSearchWidget.on_findNextButton_clickedSearchWidget.on_findNextButton_clickedSearchWidget.on_findNextButton_clickedsFSSSSearchWidget.on_closeButton_clickedSearchWidget.on_closeButton_clickedSearchWidget.on_closeButton_clickedXEAAASearchWidget.keyPressEventSearchWidget.keyPressEventSearchWidget.keyPressEventUD???SearchWidget.findPreviousSearchWidget.findPreviousSearchWidget.findPreviousIC777SearchWidget.findNextSearchWidget.findNextSearchWidget.findNextB___SearchWidget.__setFindtextComboBackgroundSearchWidget.__setFindtextComboBackgroundSearchWidget.__setFindtextComboBackground[ACCCSearchWidget.__findNextPrevSearchWidget.__findNextPrevSearchWidget.__findNextPrev }kT=}ZRCCCSessionHandler.endConditionSessionHandler.endConditionmSessionHandler.endCondition`QGGGSessionHandler.endCommandLineSessionHandler.endCommandLinemSessionHandler.endCommandLine]PEEESessionHandler.endBreakpointSessionHandler.endBreakpointmSessionHandler.endBreakpointWOAAASessionHandler.endBookmarkSessionHandler.endBookmarkmSessionHandler.endBookmarkZNCCCSessionHandler.endBFilenameSessionHandler.endBFilenamemSessionHandler.endBFilename7M;;SessionHandler (Module)SessionHandler (Module)mXLEE;SessionHandler (Constructor)SessionHandler (Constructor)mSessionHandler.__init__3K)))SessionHandlerSessionHandlermSessionHandlerIJ777SearchWidget.showFindSearchWidget.showFindSearchWidget.showFindIgggSearchWidget.on_findtextCombo_editTextChangedSearchWidget.on_findtextCombo_editTextChangedSearchWidget.on_findtextCombo_editTextChanged @9l\OOOSessionHandler.endWatchexpressionSessionHandler.endWatchexpressionmSessionHandler.endWatchexpressionT[???SessionHandler.endSpecialSessionHandler.endSpecialmSessionHandler.endSpecialTZ???SessionHandler.endProjectSessionHandler.endProjectmSessionHandler.endProjectcYIIISessionHandler.endMultiProjectSessionHandler.endMultiProjectmSessionHandler.endMultiProjectrXSSSSessionHandler.endIgnoredExceptionsSessionHandler.endIgnoredExceptionsmSessionHandler.endIgnoredExceptionsoWQQQSessionHandler.endIgnoredExceptionSessionHandler.endIgnoredExceptionmSessionHandler.endIgnoredExceptionWVAAASessionHandler.endFilenameSessionHandler.endFilenamemSessionHandler.endFilename]UEEESessionHandler.endExceptionsSessionHandler.endExceptionsmSessionHandler.endExceptionsZTCCCSessionHandler.endExceptionSessionHandler.endExceptionmSessionHandler.endException`SGGGSessionHandler.endEnvironmentSessionHandler.endEnvironmentmSessionHandler.endEnvironment j7Y<jZeCCCSessionHandler.startEnabledSessionHandler.startEnabledmSessionHandler.startEnabledrdSSSSessionHandler.startDocumentSessionSessionHandler.startDocumentSessionmSessionHandler.startDocumentSessionTc???SessionHandler.startCountSessionHandler.startCountmSessionHandler.startCountcbIIISessionHandler.startBreakpointSessionHandler.startBreakpointmSessionHandler.startBreakpoint]aEEESessionHandler.startBookmarkSessionHandler.startBookmarkmSessionHandler.startBookmarki`MMMSessionHandler.startAutoContinueSessionHandler.startAutoContinuemSessionHandler.startAutoContinueo_QQQSessionHandler.startAutoClearShellSessionHandler.startAutoClearShellmSessionHandler.startAutoClearShellT^???SessionHandler.getVersionSessionHandler.getVersionmSessionHandler.getVersiono]QQQSessionHandler.endWorkingDirectorySessionHandler.endWorkingDirectorymSessionHandler.endWorkingDirectory C:Y!CrnSSSSessionHandler.startWatchexpressionSessionHandler.startWatchexpressionmSessionHandler.startWatchexpressionfmKKKSessionHandler.startTracePythonSessionHandler.startTracePythonmSessionHandler.startTracePython`lGGGSessionHandler.startTemporarySessionHandler.startTemporarymSessionHandler.startTemporaryZkCCCSessionHandler.startSessionSessionHandler.startSessionmSessionHandler.startSessionujUUUSessionHandler.startReportExceptionsSessionHandler.startReportExceptionsmSessionHandler.startReportExceptionsciIIISessionHandler.startLinenumberSessionHandler.startLinenumbermSessionHandler.startLinenumberxhWWWSessionHandler.startIgnoredExceptionsSessionHandler.startIgnoredExceptionsmSessionHandler.startIgnoredExceptions]gEEESessionHandler.startFilenameSessionHandler.startFilenamemSessionHandler.startFilenamecfIIISessionHandler.startExceptionsSessionHandler.startExceptionsmSessionHandler.startExceptions lu=ilRz===Shell.__QScintillaDeleteShell.__QScintillaDeleteShell.__QScintillaDelete[yCCCShell.__QScintillaCharRightShell.__QScintillaCharRightShell.__QScintillaCharRightjxMMMShell.__QScintillaCharLeftExtendShell.__QScintillaCharLeftExtendShell.__QScintillaCharLeftExtendXwAAAShell.__QScintillaCharLeftShell.__QScintillaCharLeftShell.__QScintillaCharLeftv[[[Shell.__QScintillaAutoCompletionCommandShell.__QScintillaAutoCompletionCommandShell.__QScintillaAutoCompletionCommand&u))Shell (Module)Shell (Module)>t33)Shell (Constructor)Shell (Constructor)Shell.__init__sShellShellShellKr999SessionWriter.writeXMLSessionWriter.writeXMLnSessionWriter.writeXML5q99SessionWriter (Module)SessionWriter (Module)nUpCC9SessionWriter (Constructor)SessionWriter (Constructor)nSessionWriter.__init__0o'''SessionWriterSessionWriternSessionWriter X2U XU???Shell.__QScintillaLineEndShell.__QScintillaLineEndShell.__QScintillaLineEndXAAAShell.__QScintillaLineDownShell.__QScintillaLineDownShell.__QScintillaLineDownsSSSShell.__QScintillaLeftDeleteCommandShell.__QScintillaLeftDeleteCommandShell.__QScintillaLeftDeleteCommandaGGGShell.__QScintillaLeftCommandShell.__QScintillaLeftCommandShell.__QScintillaLeftCommandmOOOShell.__QScintillaDeleteWordRightShell.__QScintillaDeleteWordRightShell.__QScintillaDeleteWordRightj~MMMShell.__QScintillaDeleteWordLeftShell.__QScintillaDeleteWordLeftShell.__QScintillaDeleteWordLeftm}OOOShell.__QScintillaDeleteLineRightShell.__QScintillaDeleteLineRightShell.__QScintillaDeleteLineRightj|MMMShell.__QScintillaDeleteLineLeftShell.__QScintillaDeleteLineLeftShell.__QScintillaDeleteLineLeft^{EEEShell.__QScintillaDeleteBackShell.__QScintillaDeleteBackShell.__QScintillaDeleteBack )SK~)R===Shell.__clearCurrentLineShell.__clearCurrentLineShell.__clearCurrentLine= ///Shell.__bindLexerShell.__bindLexerShell.__bindLexer[ CCCShell.__QScintillaWordRightShell.__QScintillaWordRightShell.__QScintillaWordRightj MMMShell.__QScintillaWordLeftExtendShell.__QScintillaWordLeftExtendShell.__QScintillaWordLeftExtendX AAAShell.__QScintillaWordLeftShell.__QScintillaWordLeftShell.__QScintillaWordLeftd IIIShell.__QScintillaVCHomeExtendShell.__QScintillaVCHomeExtendShell.__QScintillaVCHomeExtendR===Shell.__QScintillaVCHomeShell.__QScintillaVCHomeShell.__QScintillaVCHomeI777Shell.__QScintillaTabShell.__QScintillaTabShell.__QScintillaTabdIIIShell.__QScintillaRightCommandShell.__QScintillaRightCommandShell.__QScintillaRightCommandU???Shell.__QScintillaNewlineShell.__QScintillaNewlineShell.__QScintillaNewlineR===Shell.__QScintillaLineUpShell.__QScintillaLineUpShell.__QScintillaLineUp *\]N |*O;;;Shell.__insertTextAtEndShell.__insertTextAtEndShell.__insertTextAtEnd@111Shell.__insertTextShell.__insertTextShell.__insertTextI777Shell.__insertHistoryShell.__insertHistoryShell.__insertHistory@111Shell.__initialiseShell.__initialiseShell.__initialise=///Shell.__getEndPosShell.__getEndPosShell.__getEndPos=///Shell.__getBannerShell.__getBannerShell.__getBannerL999Shell.__executeCommandShell.__executeCommandShell.__executeCommand=///Shell.__configureShell.__configureShell.__configuredIIIShell.__completionListSelectedShell.__completionListSelectedShell.__completionListSelectedO;;;Shell.__clientStatementShell.__clientStatementShell.__clientStatementC333Shell.__clientErrorShell.__clientErrorShell.__clientErrorXAAAShell.__clientCapabilitiesShell.__clientCapabilitiesShell.__clientCapabilitiesF555Shell.__clearHistoryShell.__clearHistoryShell.__clearHistory XP8BXC'333Shell.__setCallTipsShell.__setCallTipsShell.__setCallTipsU&???Shell.__setAutoCompletionShell.__setAutoCompletionShell.__setAutoCompletionI%777Shell.__selectHistoryShell.__selectHistoryShell.__selectHistoryI$777Shell.__searchHistoryShell.__searchHistoryShell.__searchHistoryL#999Shell.__rsearchHistoryShell.__rsearchHistoryShell.__rsearchHistoryX"AAAShell.__resizeLinenoMarginShell.__resizeLinenoMarginShell.__resizeLinenoMarginI!777Shell.__resetAndClearShell.__resetAndClearShell.__resetAndClear1 '''Shell.__resetShell.__resetShell.__reset=///Shell.__raw_inputShell.__raw_inputShell.__raw_inputU???Shell.__middleMouseButtonShell.__middleMouseButtonShell.__middleMouseButtonXAAAShell.__isCursorOnLastLineShell.__isCursorOnLastLineShell.__isCursorOnLastLineR===Shell.__insertTextNoEchoShell.__insertTextNoEchoShell.__insertTextNoEcho ;q"5x2x;:5---Shell.closeShellShell.closeShellShell.closeShell+4###Shell.clearShell.clearShell.clearC3333Shell.__writeStdOutShell.__writeStdOutShell.__writeStdOutC2333Shell.__writeStdErrShell.__writeStdErrShell.__writeStdErrC1333Shell.__writePromptShell.__writePromptShell.__writePromptC0333Shell.__writeBannerShell.__writeBannerShell.__writeBanner1/'''Shell.__writeShell.__writeShell.__write@.111Shell.__useHistoryShell.__useHistoryShell.__useHistoryR-===Shell.__startDebugClientShell.__startDebugClientShell.__startDebugClientC,333Shell.__showHistoryShell.__showHistoryShell.__showHistoryO+;;;Shell.__showCompletionsShell.__showCompletionsShell.__showCompletionsL*999Shell.__setTextDisplayShell.__setTextDisplayShell.__setTextDisplayI)777Shell.__setMonospacedShell.__setMonospacedShell.__setMonospaced@(111Shell.__setMargin0Shell.__setMargin0Shell.__setMargin0 NhY~8NdBIIIShell.handlePreferencesChangedShell.handlePreferencesChangedShell.handlePreferencesChanged:A---Shell.getHistoryShell.getHistoryShell.getHistoryC@333Shell.getClientTypeShell.getClientTypeShell.getClientTypeC?333Shell.focusOutEventShell.focusOutEventShell.focusOutEventR>===Shell.focusNextPrevChildShell.focusNextPrevChildShell.focusNextPrevChild@=111Shell.focusInEventShell.focusInEventShell.focusInEvent@<111Shell.executeLinesShell.executeLinesShell.executeLinesC;333Shell.editorCommandShell.editorCommandShell.editorCommand7:+++Shell.dropEventShell.dropEventShell.dropEventC9333Shell.dragMoveEventShell.dragMoveEventShell.dragMoveEventF8555Shell.dragLeaveEventShell.dragLeaveEventShell.dragLeaveEventF7555Shell.dragEnterEventShell.dragEnterEventShell.dragEnterEventL6999Shell.contextMenuEventShell.contextMenuEventShell.contextMenuEvent +IIX+O]]]ShellHistoryDialog.on_copyButton_clickedShellHistoryDialog.on_copyButton_clickedShellHistoryDialog.on_copyButton_clickedaNGGGShellHistoryDialog.getHistoryShellHistoryDialog.getHistoryShellHistoryDialog.getHistory@MCCShellHistoryDialog (Module)ShellHistoryDialog (Module)eLMMCShellHistoryDialog (Constructor)ShellHistoryDialog (Constructor)ShellHistoryDialog.__init__@K111ShellHistoryDialogShellHistoryDialogShellHistoryDialogCJ333Shell.setDebuggerUIShell.setDebuggerUIShell.setDebuggerUI=I///Shell.saveHistoryShell.saveHistoryShell.saveHistoryCH333Shell.reloadHistoryShell.reloadHistoryShell.reloadHistory+G###Shell.pasteShell.pasteShell.pasteIF777Shell.mousePressEventShell.mousePressEventShell.mousePressEvent=E///Shell.loadHistoryShell.loadHistoryShell.loadHistoryCD333Shell.keyPressEventShell.keyPressEventShell.keyPressEvent.C%%%Shell.insertShell.insertShell.insert \t>\.W11ShellPage (Module)ShellPage (Module)JV;;1ShellPage (Constructor)ShellPage (Constructor)ShellPage.__init__%UShellPageShellPageShellPageTaaaShellHistoryDialog.on_reloadButton_clickedShellHistoryDialog.on_reloadButton_clickedShellHistoryDialog.on_reloadButton_clicked,SyyyShellHistoryDialog.on_historyList_itemSelectionChangedShellHistoryDialog.on_historyList_itemSelectionChangedShellHistoryDialog.on_historyList_itemSelectionChanged#RsssShellHistoryDialog.on_historyList_itemDoubleClickedShellHistoryDialog.on_historyList_itemDoubleClickedShellHistoryDialog.on_historyList_itemDoubleClicked QcccShellHistoryDialog.on_executeButton_clickedShellHistoryDialog.on_executeButton_clickedShellHistoryDialog.on_executeButton_clickedPaaaShellHistoryDialog.on_deleteButton_clickedShellHistoryDialog.on_deleteButton_clickedShellHistoryDialog.on_deleteButton_clicked (tk4N(XbAAAShortcutDialog.eventFilterShortcutDialog.eventFilterShortcutDialog.eventFilter^aEEEShortcutDialog.__typeChangedShortcutDialog.__typeChangedShortcutDialog.__typeChangedg`KKKShortcutDialog.__setKeyEditTextShortcutDialog.__setKeyEditTextShortcutDialog.__setKeyEditTextL_999ShortcutDialog.__clearShortcutDialog.__clearShortcutDialog.__clear8^;;ShortcutDialog (Module)ShortcutDialog (Module)Y]EE;ShortcutDialog (Constructor)ShortcutDialog (Constructor)ShortcutDialog.__init__4\)))ShortcutDialogShortcutDialogShortcutDialog4[)))ShellPage.saveShellPage.saveShellPage.saveFZ555ShellPage.polishPageShellPage.polishPageShellPage.polishPageY___ShellPage.on_monospacedFontButton_clickedShellPage.on_monospacedFontButton_clickedShellPage.on_monospacedFontButton_clickedXaaaShellPage.on_linenumbersFontButton_clickedShellPage.on_linenumbersFontButton_clickedShellPage.on_linenumbersFontButton_clicked h&l fh|lYYYShortcutsDialog.__generateShortcutItemShortcutsDialog.__generateShortcutItemShortcutsDialog.__generateShortcutItem|kYYYShortcutsDialog.__generateCategoryItemShortcutsDialog.__generateCategoryItemShortcutsDialog.__generateCategoryItemgjKKKShortcutsDialog.__checkShortcutShortcutsDialog.__checkShortcutShortcutsDialog.__checkShortcut:i==ShortcutsDialog (Module)ShortcutsDialog (Module)\hGG=ShortcutsDialog (Constructor)ShortcutsDialog (Constructor)ShortcutsDialog.__init__7g+++ShortcutsDialogShortcutsDialogShortcutsDialog.f11Shortcuts (Module)Shortcuts (Module)Le999ShortcutDialog.setKeysShortcutDialog.setKeysShortcutDialog.setKeysvdUUUShortcutDialog.on_buttonBox_acceptedShortcutDialog.on_buttonBox_acceptedShortcutDialog.on_buttonBox_accepted^cEEEShortcutDialog.keyPressEventShortcutDialog.keyPressEventShortcutDialog.keyPressEvent <AUW<t___ShortcutsDialog.on_searchEdit_textChangedShortcutsDialog.on_searchEdit_textChangedShortcutsDialog.on_searchEdit_textChangedseeeShortcutsDialog.on_clearSearchButton_clickedShortcutsDialog.on_clearSearchButton_clickedShortcutsDialog.on_clearSearchButton_clickedyrWWWShortcutsDialog.on_buttonBox_acceptedShortcutsDialog.on_buttonBox_acceptedShortcutsDialog.on_buttonBox_acceptedq[[[ShortcutsDialog.on_actionButton_toggledShortcutsDialog.on_actionButton_toggledShortcutsDialog.on_actionButton_toggledmpOOOShortcutsDialog.__shortcutChangedShortcutsDialog.__shortcutChangedShortcutsDialog.__shortcutChangedyoWWWShortcutsDialog.__saveCategoryActionsShortcutsDialog.__saveCategoryActionsShortcutsDialog.__saveCategoryActionsRn===ShortcutsDialog.__resortShortcutsDialog.__resortShortcutsDialog.__resortgmKKKShortcutsDialog.__resizeColumnsShortcutsDialog.__resizeColumnsShortcutsDialog.__resizeColumns (wSZ(T}???ShortcutsHandler.endAccelShortcutsHandler.endAcceloShortcutsHandler.endAccel;|??ShortcutsHandler (Module)ShortcutsHandler (Module)o^{II?ShortcutsHandler (Constructor)ShortcutsHandler (Constructor)oShortcutsHandler.__init__9z---ShortcutsHandlerShortcutsHandleroShortcutsHandlerRy===ShortcutsDialog.populateShortcutsDialog.populateShortcutsDialog.populate xqqqShortcutsDialog.on_shortcutsList_itemDoubleClickedShortcutsDialog.on_shortcutsList_itemDoubleClickedShortcutsDialog.on_shortcutsList_itemDoubleClickedweeeShortcutsDialog.on_shortcutsList_itemClickedShortcutsDialog.on_shortcutsList_itemClickedShortcutsDialog.on_shortcutsList_itemClickedveeeShortcutsDialog.on_shortcutsList_itemChangedShortcutsDialog.on_shortcutsList_itemChangedShortcutsDialog.on_shortcutsList_itemChangedu___ShortcutsDialog.on_shortcutButton_toggledShortcutsDialog.on_shortcutButton_toggledShortcutsDialog.on_shortcutButton_toggled EL,EE[GG=ShortcutsWriter (Constructor)ShortcutsWriter (Constructor)pShortcutsWriter.__init__6+++ShortcutsWriterShortcutsWriterpShortcutsWriterfKKKShortcutsHandler.startShortcutsShortcutsHandler.startShortcutsoShortcutsHandler.startShortcutscIIIShortcutsHandler.startShortcutShortcutsHandler.startShortcutoShortcutsHandler.startShortcut~[[[ShortcutsHandler.startDocumentShortcutsShortcutsHandler.startDocumentShortcutsoShortcutsHandler.startDocumentShortcutsZCCCShortcutsHandler.getVersionShortcutsHandler.getVersionoShortcutsHandler.getVersion`GGGShortcutsHandler.getShortcutsShortcutsHandler.getShortcutsoShortcutsHandler.getShortcuts]EEEShortcutsHandler.endShortcutShortcutsHandler.endShortcutoShortcutsHandler.endShortcutQ===ShortcutsHandler.endNameShortcutsHandler.endNameoShortcutsHandler.endName]~EEEShortcutsHandler.endAltAccelShortcutsHandler.endAltAcceloShortcutsHandler.endAltAccel p@PosSSSSingleApplicationClient.processArgsSingleApplicationClient.processArgs SingleApplicationClient.processArgsdIIISingleApplicationClient.errstrSingleApplicationClient.errstr SingleApplicationClient.errstrpQQQSingleApplicationClient.disconnectSingleApplicationClient.disconnect SingleApplicationClient.disconnectgKKKSingleApplicationClient.connectSingleApplicationClient.connect SingleApplicationClient.connecttWWMSingleApplicationClient (Constructor)SingleApplicationClient (Constructor) SingleApplicationClient.__init__O ;;;SingleApplicationClientSingleApplicationClient SingleApplicationClient> AASingleApplication (Module)SingleApplication (Module) Z CCCSilentObject.method_missingSilentObject.method_missing-SilentObject.method_missing- %%%SilentObjectSilentObject-SilentObjectQ ===ShortcutsWriter.writeXMLShortcutsWriter.writeXMLpShortcutsWriter.writeXML9==ShortcutsWriter (Module)ShortcutsWriter (Module)p 78BJa7'!!!SourceStatSourceStatSourceStatjMMMSingleApplicationServer.shutdownSingleApplicationServer.shutdown SingleApplicationServer.shutdownyWWWSingleApplicationServer.handleCommandSingleApplicationServer.handleCommand SingleApplicationServer.handleCommandsSSSSingleApplicationServer.__parseLineSingleApplicationServer.__parseLine SingleApplicationServer.__parseLine[[[SingleApplicationServer.__newConnectionSingleApplicationServer.__newConnection SingleApplicationServer.__newConnection|YYYSingleApplicationServer.__disconnectedSingleApplicationServer.__disconnected SingleApplicationServer.__disconnectedtWWMSingleApplicationServer (Constructor)SingleApplicationServer (Constructor) SingleApplicationServer.__init__O;;;SingleApplicationServerSingleApplicationServer SingleApplicationServersSSSSingleApplicationClient.sendCommandSingleApplicationClient.sendCommand SingleApplicationClient.sendCommand %r9y@gp%H(777SpecialVarItem.expandSpecialVarItem.expandBSpecialVarItem.expandX'EE;SpecialVarItem (Constructor)SpecialVarItem (Constructor)BSpecialVarItem.__init__3&)))SpecialVarItemSpecialVarItemBSpecialVarItemc%IIISpecialArrayElementVarItem.keySpecialArrayElementVarItem.keyBSpecialArrayElementVarItem.key|$]]SSpecialArrayElementVarItem (Constructor)SpecialArrayElementVarItem (Constructor)BSpecialArrayElementVarItem.__init__W#AAASpecialArrayElementVarItemSpecialArrayElementVarItemBSpecialArrayElementVarItem6"+++SourceStat.pushSourceStat.pushSourceStat.pushCCCSpellChecker.getSuggestionsSpellChecker.getSuggestionsSpellChecker.getSuggestionsR====SpellChecker.getLanguageSpellChecker.getLanguageSpellChecker.getLanguageI<777SpellChecker.getErrorSpellChecker.getErrorSpellChecker.getErrorO;;;;SpellChecker.getContextSpellChecker.getContextSpellChecker.getContextp:QQQSpellChecker.getAvailableLanguagesSpellChecker.getAvailableLanguagesSpellChecker.getAvailableLanguagesI9777SpellChecker.clearAllSpellChecker.clearAllSpellChecker.clearAllL8999SpellChecker.checkWordSpellChecker.checkWordSpellChecker.checkWord[7CCCSpellChecker.checkSelectionSpellChecker.checkSelectionSpellChecker.checkSelectionO6;;;SpellChecker.checkLinesSpellChecker.checkLinesSpellChecker.checkLines5[[[SpellChecker.checkDocumentIncrementallySpellChecker.checkDocumentIncrementallySpellChecker.checkDocumentIncrementally AY~5pAmIOOOSpellChecker.stopIncrementalCheckSpellChecker.stopIncrementalCheckSpellChecker.stopIncrementalCheckgHKKKSpellChecker.setMinimumWordSizeSpellChecker.setMinimumWordSizeSpellChecker.setMinimumWordSizeRG===SpellChecker.setLanguageSpellChecker.setLanguageSpellChecker.setLanguagegFKKKSpellChecker.setDefaultLanguageSpellChecker.setDefaultLanguageSpellChecker.setDefaultLanguageXEAAASpellChecker.replaceAlwaysSpellChecker.replaceAlwaysSpellChecker.replaceAlwaysFD555SpellChecker.replaceSpellChecker.replaceSpellChecker.replaceCC333SpellChecker.removeSpellChecker.removeSpellChecker.remove=B///SpellChecker.nextSpellChecker.nextSpellChecker.nextRA===SpellChecker.isAvailableSpellChecker.isAvailableSpellChecker.isAvailableL@999SpellChecker.initCheckSpellChecker.initCheckSpellChecker.initCheckU????SpellChecker.ignoreAlwaysSpellChecker.ignoreAlwaysSpellChecker.ignoreAlways }O 0}QiiiSpellCheckingDialog.on_ignoreAllButton_clickedSpellCheckingDialog.on_ignoreAllButton_clickedSpellCheckingDialog.on_ignoreAllButton_clickedPgggSpellCheckingDialog.on_changeEdit_textChangedSpellCheckingDialog.on_changeEdit_textChangedSpellCheckingDialog.on_changeEdit_textChangedO]]]SpellCheckingDialog.on_addButton_clickedSpellCheckingDialog.on_addButton_clickedSpellCheckingDialog.on_addButton_clickedsNSSSSpellCheckingDialog.__enableButtonsSpellCheckingDialog.__enableButtonsSpellCheckingDialog.__enableButtonsaMGGGSpellCheckingDialog.__advanceSpellCheckingDialog.__advanceSpellCheckingDialog.__advanceBLEESpellCheckingDialog (Module)SpellCheckingDialog (Module)hKOOESpellCheckingDialog (Constructor)SpellCheckingDialog (Constructor)SpellCheckingDialog.__init__CJ333SpellCheckingDialogSpellCheckingDialogSpellCheckingDialog mqD6mLXOOSpellingPropertiesDialog (Module)SpellingPropertiesDialog (Module)wWYYOSpellingPropertiesDialog (Constructor)SpellingPropertiesDialog (Constructor)SpellingPropertiesDialog.__init__RV===SpellingPropertiesDialogSpellingPropertiesDialogSpellingPropertiesDialog5USpellCheckingDialog.on_suggestionsList_currentTextChangedSpellCheckingDialog.on_suggestionsList_currentTextChangedSpellCheckingDialog.on_suggestionsList_currentTextChangedTeeeSpellCheckingDialog.on_replaceButton_clickedSpellCheckingDialog.on_replaceButton_clickedSpellCheckingDialog.on_replaceButton_clickedSkkkSpellCheckingDialog.on_replaceAllButton_clickedSpellCheckingDialog.on_replaceAllButton_clickedSpellCheckingDialog.on_replaceAllButton_clicked RcccSpellCheckingDialog.on_ignoreButton_clickedSpellCheckingDialog.on_ignoreButton_clickedSpellCheckingDialog.on_ignoreButton_clicked W`f/W(b!!!SqlBrowserSqlBrowserSqlBrowserRa===SplashScreen.showMessageSplashScreen.showMessageSplashScreen.showMessageU`???SplashScreen.clearMessageSplashScreen.clearMessageSplashScreen.clearMessage4_77SplashScreen (Module)SplashScreen (Module)S^AA7SplashScreen (Constructor)SplashScreen (Constructor)SplashScreen.__init__.]%%%SplashScreenSplashScreenSplashScreenp\QQQSpellingPropertiesDialog.storeDataSpellingPropertiesDialog.storeDataSpellingPropertiesDialog.storeData[gggSpellingPropertiesDialog.on_pwlButton_clickedSpellingPropertiesDialog.on_pwlButton_clickedSpellingPropertiesDialog.on_pwlButton_clickedZgggSpellingPropertiesDialog.on_pelButton_clickedSpellingPropertiesDialog.on_pelButton_clickedSpellingPropertiesDialog.on_pelButton_clickedsYSSSSpellingPropertiesDialog.initDialogSpellingPropertiesDialog.initDialogSpellingPropertiesDialog.initDialog 2}Hgq42^oEEESqlBrowserWidget.__deleteRowSqlBrowserWidget.__deleteRowSqlBrowserWidget.__deleteRow555Subversion.getClientSubversion.getClient,Subversion.getClient[=CCCSubversion.clearStatusCacheSubversion.clearStatusCache,Subversion.clearStatusCache D_ Z @DaSGGGSubversion.svnShowChangelistsSubversion.svnShowChangelists,Subversion.svnShowChangelistsIR777Subversion.svnSetPropSubversion.svnSetProp,Subversion.svnSetPropIQ777Subversion.svnResolveSubversion.svnResolve,Subversion.svnResolveUP???Subversion.svnRepoBrowserSubversion.svnRepoBrowser,Subversion.svnRepoBrowserpOQQQSubversion.svnRemoveFromChangelistSubversion.svnRemoveFromChangelist,Subversion.svnRemoveFromChangelistLN999Subversion.svnRelocateSubversion.svnRelocate,Subversion.svnRelocateXMAAASubversion.svnNormalizeURLSubversion.svnNormalizeURL,Subversion.svnNormalizeURLRL===Subversion.svnLogLimitedSubversion.svnLogLimited,Subversion.svnLogLimitedRK===Subversion.svnLogBrowserSubversion.svnLogBrowser,Subversion.svnLogBrowser@J111Subversion.svnLockSubversion.svnLock,Subversion.svnLock[ICCCSubversion.svnListTagBranchSubversion.svnListTagBranch,Subversion.svnListTagBranch =k+*=@_111Subversion.vcsDiffSubversion.vcsDiff,Subversion.vcsDiff^^EEESubversion.vcsConvertProjectSubversion.vcsConvertProject,Subversion.vcsConvertProjectF]555Subversion.vcsCommitSubversion.vcsCommit,Subversion.vcsCommitU\???Subversion.vcsCommandLineSubversion.vcsCommandLine,Subversion.vcsCommandLineI[777Subversion.vcsCleanupSubversion.vcsCleanup,Subversion.vcsCleanupLZ999Subversion.vcsCheckoutSubversion.vcsCheckout,Subversion.vcsCheckoutmYOOOSubversion.vcsAllRegisteredStatesSubversion.vcsAllRegisteredStates,Subversion.vcsAllRegisteredStatesIX777Subversion.vcsAddTreeSubversion.vcsAddTree,Subversion.vcsAddTreeOW;;;Subversion.vcsAddBinarySubversion.vcsAddBinary,Subversion.vcsAddBinary=V///Subversion.vcsAddSubversion.vcsAdd,Subversion.vcsAddIU777Subversion.svnUrlDiffSubversion.svnUrlDiff,Subversion.svnUrlDiffFT555Subversion.svnUnlockSubversion.svnUnlock,Subversion.svnUnlock "nBj$"ykWWWSubversion.vcsNewProjectOptionsDialogSubversion.vcsNewProjectOptionsDialog,Subversion.vcsNewProjectOptionsDialog@j111Subversion.vcsNameSubversion.vcsName,Subversion.vcsName@i111Subversion.vcsMoveSubversion.vcsMove,Subversion.vcsMoveCh333Subversion.vcsMergeSubversion.vcsMerge,Subversion.vcsMerge=g///Subversion.vcsLogSubversion.vcsLog,Subversion.vcsLogRf===Subversion.vcsInitConfigSubversion.vcsInitConfig,Subversion.vcsInitConfig@e111Subversion.vcsInitSubversion.vcsInit,Subversion.vcsInitFd555Subversion.vcsImportSubversion.vcsImport,Subversion.vcsImportdcIIISubversion.vcsGetProjectHelperSubversion.vcsGetProjectHelper,Subversion.vcsGetProjectHelperybWWWSubversion.vcsGetProjectBrowserHelperSubversion.vcsGetProjectBrowserHelper,Subversion.vcsGetProjectBrowserHelperFa555Subversion.vcsExportSubversion.vcsExport,Subversion.vcsExportF`555Subversion.vcsExistsSubversion.vcsExists,Subversion.vcsExists K>Hg'KYwEE;SubversionPage (Constructor)SubversionPage (Constructor) SubversionPage.__init__4v)))SubversionPageSubversionPage SubversionPageFu555Subversion.vcsUpdateSubversion.vcsUpdate,Subversion.vcsUpdate=t///Subversion.vcsTagSubversion.vcsTag,Subversion.vcsTagFs555Subversion.vcsSwitchSubversion.vcsSwitch,Subversion.vcsSwitchFr555Subversion.vcsStatusSubversion.vcsStatus,Subversion.vcsStatusLq999Subversion.vcsShutdownSubversion.vcsShutdown,Subversion.vcsShutdownFp555Subversion.vcsRevertSubversion.vcsRevert,Subversion.vcsRevertaoGGGSubversion.vcsRepositoryInfosSubversion.vcsRepositoryInfos,Subversion.vcsRepositoryInfosFn555Subversion.vcsRemoveSubversion.vcsRemove,Subversion.vcsRemoveamGGGSubversion.vcsRegisteredStateSubversion.vcsRegisteredState,Subversion.vcsRegisteredState[lCCCSubversion.vcsOptionsDialogSubversion.vcsOptionsDialog,Subversion.vcsOptionsDialog sF~So)s^EEESvgDiagram.__initContextMenuSvgDiagram.__initContextMenuSvgDiagram.__initContextMenuR===SvgDiagram.__initActionsSvgDiagram.__initActionsSvgDiagram.__initActionsC333SvgDiagram.__doZoomSvgDiagram.__doZoomSvgDiagram.__doZoom^EEESvgDiagram.__adjustScrollBarSvgDiagram.__adjustScrollBarSvgDiagram.__adjustScrollBar0~33SvgDiagram (Module)SvgDiagram (Module)M}==3SvgDiagram (Constructor)SvgDiagram (Constructor)SvgDiagram.__init__(|!!!SvgDiagramSvgDiagramSvgDiagramC{333SubversionPage.saveSubversionPage.save SubversionPage.savez[[[SubversionPage.on_serversButton_clickedSubversionPage.on_serversButton_clicked SubversionPage.on_serversButton_clicked|yYYYSubversionPage.on_configButton_clickedSubversionPage.on_configButton_clicked SubversionPage.on_configButton_clicked8x;;SubversionPage (Module)SubversionPage (Module) 6e ?p!6YEE;SvnBlameDialog (Constructor)SvnBlameDialog (Constructor)SvnBlameDialog.__init__4 )))SvnBlameDialogSvnBlameDialogSvnBlameDialogU ???SvgDiagram.getDiagramNameSvgDiagram.getDiagramNameSvgDiagram.getDiagramNameL 999SvgDiagram.__zoomResetSvgDiagram.__zoomResetSvgDiagram.__zoomResetF 555SvgDiagram.__zoomOutSvgDiagram.__zoomOutSvgDiagram.__zoomOutC 333SvgDiagram.__zoomInSvgDiagram.__zoomInSvgDiagram.__zoomIn=///SvgDiagram.__zoomSvgDiagram.__zoomSvgDiagram.__zoom^EEESvgDiagram.__showContextMenuSvgDiagram.__showContextMenuSvgDiagram.__showContextMenujMMMSvgDiagram.__printPreviewDiagramSvgDiagram.__printPreviewDiagramSvgDiagram.__printPreviewDiagramU???SvgDiagram.__printDiagramSvgDiagram.__printDiagramSvgDiagram.__printDiagram@111SvgDiagram.__printSvgDiagram.__printSvgDiagram.__printU???SvgDiagram.__initToolBarsSvgDiagram.__initToolBarsSvgDiagram.__initToolBars tsM-t^EEESvnBlameDialog.keyPressEventSvnBlameDialog.keyPressEvent1SvnBlameDialog.keyPressEventU???SvnBlameDialog.closeEventSvnBlameDialog.closeEvent1SvnBlameDialog.closeEventXAAASvnBlameDialog.__showErrorSvnBlameDialog.__showErrorSvnBlameDialog.__showErrordIIISvnBlameDialog.__resizeColumnsSvnBlameDialog.__resizeColumnsSvnBlameDialog.__resizeColumns[CCCSvnBlameDialog.__readStdoutSvnBlameDialog.__readStdout1SvnBlameDialog.__readStdout[CCCSvnBlameDialog.__readStderrSvnBlameDialog.__readStderr1SvnBlameDialog.__readStderraGGGSvnBlameDialog.__procFinishedSvnBlameDialog.__procFinished1SvnBlameDialog.__procFinishedaGGGSvnBlameDialog.__generateItemSvnBlameDialog.__generateItemSvnBlameDialog.__generateItemO;;;SvnBlameDialog.__finishSvnBlameDialog.__finishSvnBlameDialog.__finish8;;SvnBlameDialog (Module)SvnBlameDialog (Module) ^ w ^a!GGGSvnChangeListsDialog.__finishSvnChangeListsDialog.__finishSvnChangeListsDialog.__finishD GGSvnChangeListsDialog (Module)SvnChangeListsDialog (Module)kQQGSvnChangeListsDialog (Constructor)SvnChangeListsDialog (Constructor)SvnChangeListsDialog.__init__F555SvnChangeListsDialogSvnChangeListsDialogSvnChangeListsDialogF555SvnBlameDialog.startSvnBlameDialog.startSvnBlameDialog.startvUUUSvnBlameDialog.on_sendButton_clickedSvnBlameDialog.on_sendButton_clicked1SvnBlameDialog.on_sendButton_clickedaaaSvnBlameDialog.on_passwordCheckBox_toggledSvnBlameDialog.on_passwordCheckBox_toggled1SvnBlameDialog.on_passwordCheckBox_toggledyWWWSvnBlameDialog.on_input_returnPressedSvnBlameDialog.on_input_returnPressed1SvnBlameDialog.on_input_returnPressedsSSSSvnBlameDialog.on_buttonBox_clickedSvnBlameDialog.on_buttonBox_clickedSvnBlameDialog.on_buttonBox_clicked o7o (cccSvnChangeListsDialog.on_input_returnPressedSvnChangeListsDialog.on_input_returnPressed2SvnChangeListsDialog.on_input_returnPressed,'yyySvnChangeListsDialog.on_changeLists_currentItemChangedSvnChangeListsDialog.on_changeLists_currentItemChangedSvnChangeListsDialog.on_changeLists_currentItemChanged&___SvnChangeListsDialog.on_buttonBox_clickedSvnChangeListsDialog.on_buttonBox_clickedSvnChangeListsDialog.on_buttonBox_clickedp%QQQSvnChangeListsDialog.keyPressEventSvnChangeListsDialog.keyPressEvent2SvnChangeListsDialog.keyPressEventm$OOOSvnChangeListsDialog.__readStdoutSvnChangeListsDialog.__readStdout2SvnChangeListsDialog.__readStdoutm#OOOSvnChangeListsDialog.__readStderrSvnChangeListsDialog.__readStderr2SvnChangeListsDialog.__readStderrs"SSSSvnChangeListsDialog.__procFinishedSvnChangeListsDialog.__procFinished2SvnChangeListsDialog.__procFinished .b{>H.y1WWWSvnCommandDialog.on_dirButton_clickedSvnCommandDialog.on_dirButton_clickedSvnCommandDialog.on_dirButton_clicked0mmmSvnCommandDialog.on_commandCombo_editTextChangedSvnCommandDialog.on_commandCombo_editTextChangedSvnCommandDialog.on_commandCombo_editTextChangedR/===SvnCommandDialog.getDataSvnCommandDialog.getDataSvnCommandDialog.getData<.??SvnCommandDialog (Module)SvnCommandDialog (Module)_-II?SvnCommandDialog (Constructor)SvnCommandDialog (Constructor)SvnCommandDialog.__init__:,---SvnCommandDialogSvnCommandDialogSvnCommandDialogX+AAASvnChangeListsDialog.startSvnChangeListsDialog.startSvnChangeListsDialog.start*aaaSvnChangeListsDialog.on_sendButton_clickedSvnChangeListsDialog.on_sendButton_clicked2SvnChangeListsDialog.on_sendButton_clicked)mmmSvnChangeListsDialog.on_passwordCheckBox_toggledSvnChangeListsDialog.on_passwordCheckBox_toggled2SvnChangeListsDialog.on_passwordCheckBox_toggled g*Y y:WWWSvnCommitDialog.on_buttonBox_rejectedSvnCommitDialog.on_buttonBox_rejectedSvnCommitDialog.on_buttonBox_rejectedv9UUUSvnCommitDialog.on_buttonBox_clickedSvnCommitDialog.on_buttonBox_clickedSvnCommitDialog.on_buttonBox_clickedy8WWWSvnCommitDialog.on_buttonBox_acceptedSvnCommitDialog.on_buttonBox_acceptedSvnCommitDialog.on_buttonBox_acceptedX7AAASvnCommitDialog.logMessageSvnCommitDialog.logMessageSvnCommitDialog.logMessaged6IIISvnCommitDialog.hasChangelistsSvnCommitDialog.hasChangelistsSvnCommitDialog.hasChangelistsg5KKKSvnCommitDialog.changelistsDataSvnCommitDialog.changelistsDataSvnCommitDialog.changelistsData:4==SvnCommitDialog (Module)SvnCommitDialog (Module)\3GG=SvnCommitDialog (Constructor)SvnCommitDialog (Constructor)SvnCommitDialog.__init__72+++SvnCommitDialogSvnCommitDialogSvnCommitDialog =q]$en=.F11SvnDialog (Module)SvnDialog (Module)JE;;1SvnDialog (Constructor)SvnDialog (Constructor)SvnDialog.__init__%DSvnDialogSvnDialogSvnDialogC[[[SvnCopyDialog.on_targetEdit_textChangedSvnCopyDialog.on_targetEdit_textChangedSvnCopyDialog.on_targetEdit_textChangedpBQQQSvnCopyDialog.on_dirButton_clickedSvnCopyDialog.on_dirButton_clickedSvnCopyDialog.on_dirButton_clickedIA777SvnCopyDialog.getDataSvnCopyDialog.getDataSvnCopyDialog.getData6@99SvnCopyDialog (Module)SvnCopyDialog (Module)V?CC9SvnCopyDialog (Constructor)SvnCopyDialog (Constructor)SvnCopyDialog.__init__1>'''SvnCopyDialogSvnCopyDialogSvnCopyDialog,=//SvnConst (Module)SvnConst (Module)U<???SvnCommitDialog.showEventSvnCommitDialog.showEventSvnCommitDialog.showEvent ;cccSvnCommitDialog.on_recentComboBox_activatedSvnCommitDialog.on_recentComboBox_activatedSvnCommitDialog.on_recentComboBox_activated _h`#|3_jQMMMSvnDialog.on_input_returnPressedSvnDialog.on_input_returnPressed6SvnDialog.on_input_returnPresseddPIIISvnDialog.on_buttonBox_clickedSvnDialog.on_buttonBox_clickedSvnDialog.on_buttonBox_clickedFO555SvnDialog.normalExitSvnDialog.normalExit6SvnDialog.normalExitON;;;SvnDialog.keyPressEventSvnDialog.keyPressEvent6SvnDialog.keyPressEventRM===SvnDialog.hasAddOrDeleteSvnDialog.hasAddOrDeleteSvnDialog.hasAddOrDelete:L---SvnDialog.finishSvnDialog.finishSvnDialog.finishgKKKKSvnDialog._clientNotifyCallbackSvnDialog._clientNotifyCallbackSvnDialog._clientNotifyCallbackLJ999SvnDialog.__readStdoutSvnDialog.__readStdout6SvnDialog.__readStdoutLI999SvnDialog.__readStderrSvnDialog.__readStderr6SvnDialog.__readStderrRH===SvnDialog.__procFinishedSvnDialog.__procFinished6SvnDialog.__procFinished@G111SvnDialog.__finishSvnDialog.__finish6SvnDialog.__finish 39k3m\OOOSvnDialogMixin._clientLogCallbackSvnDialogMixin._clientLogCallbackSvnDialogMixin._clientLogCallbackv[UUUSvnDialogMixin._clientCancelCallbackSvnDialogMixin._clientCancelCallbackSvnDialogMixin._clientCancelCallbackLZ999SvnDialogMixin._cancelSvnDialogMixin._cancelSvnDialogMixin._cancel8Y;;SvnDialogMixin (Module)SvnDialogMixin (Module)YXEE;SvnDialogMixin (Constructor)SvnDialogMixin (Constructor)SvnDialogMixin.__init__4W)))SvnDialogMixinSvnDialogMixinSvnDialogMixinLV999SvnDialog.startProcessSvnDialog.startProcess6SvnDialog.startProcessIU777SvnDialog.showMessageSvnDialog.showMessageSvnDialog.showMessageCT333SvnDialog.showErrorSvnDialog.showErrorSvnDialog.showErrorgSKKKSvnDialog.on_sendButton_clickedSvnDialog.on_sendButton_clicked6SvnDialog.on_sendButton_clickedyRWWWSvnDialog.on_passwordCheckBox_toggledSvnDialog.on_passwordCheckBox_toggled6SvnDialog.on_passwordCheckBox_toggled Sf y*SafGGGSvnDiffDialog.__getVersionArgSvnDiffDialog.__getVersionArgSvnDiffDialog.__getVersionArgpeQQQSvnDiffDialog.__getDiffSummaryKindSvnDiffDialog.__getDiffSummaryKindSvnDiffDialog.__getDiffSummaryKindLd999SvnDiffDialog.__finishSvnDiffDialog.__finishSvnDiffDialog.__finishXcAAASvnDiffDialog.__appendTextSvnDiffDialog.__appendTextSvnDiffDialog.__appendText6b99SvnDiffDialog (Module)SvnDiffDialog (Module)VaCC9SvnDiffDialog (Constructor)SvnDiffDialog (Constructor)SvnDiffDialog.__init__1`'''SvnDiffDialogSvnDiffDialogSvnDiffDialogI_777SvnDialogMixin._resetSvnDialogMixin._resetSvnDialogMixin._reset ^qqqSvnDialogMixin._clientSslServerTrustPromptCallbackSvnDialogMixin._clientSslServerTrustPromptCallbackSvnDialogMixin._clientSslServerTrustPromptCallbacks]SSSSvnDialogMixin._clientLoginCallbackSvnDialogMixin._clientLoginCallbackSvnDialogMixin._clientLoginCallback iD<kio___SvnDiffDialog.on_passwordCheckBox_toggledSvnDiffDialog.on_passwordCheckBox_toggled7SvnDiffDialog.on_passwordCheckBox_toggledvnUUUSvnDiffDialog.on_input_returnPressedSvnDiffDialog.on_input_returnPressed7SvnDiffDialog.on_input_returnPressedpmQQQSvnDiffDialog.on_buttonBox_clickedSvnDiffDialog.on_buttonBox_clickedSvnDiffDialog.on_buttonBox_clicked[lCCCSvnDiffDialog.keyPressEventSvnDiffDialog.keyPressEvent7SvnDiffDialog.keyPressEventRk===SvnDiffDialog.closeEventSvnDiffDialog.closeEvent7SvnDiffDialog.closeEventUj???SvnDiffDialog.__showErrorSvnDiffDialog.__showErrorSvnDiffDialog.__showErrorXiAAASvnDiffDialog.__readStdoutSvnDiffDialog.__readStdout7SvnDiffDialog.__readStdoutXhAAASvnDiffDialog.__readStderrSvnDiffDialog.__readStderr7SvnDiffDialog.__readStderr^gEEESvnDiffDialog.__procFinishedSvnDiffDialog.__procFinished7SvnDiffDialog.__procFinished tAj$tBzEESvnLogBrowserDialog (Module)SvnLogBrowserDialog (Module)hyOOESvnLogBrowserDialog (Constructor)SvnLogBrowserDialog (Constructor)SvnLogBrowserDialog.__init__Cx333SvnLogBrowserDialogSvnLogBrowserDialogSvnLogBrowserDialogCw333SvnInfoDialog.startSvnInfoDialog.startSvnInfoDialog.startUv???SvnInfoDialog.__showErrorSvnInfoDialog.__showErrorSvnInfoDialog.__showError6u99SvnInfoDialog (Module)SvnInfoDialog (Module)VtCC9SvnInfoDialog (Constructor)SvnInfoDialog (Constructor)SvnInfoDialog.__init__1s'''SvnInfoDialogSvnInfoDialogSvnInfoDialogCr333SvnDiffDialog.startSvnDiffDialog.startSvnDiffDialog.startsqSSSSvnDiffDialog.on_sendButton_clickedSvnDiffDialog.on_sendButton_clicked7SvnDiffDialog.on_sendButton_clickedspSSSSvnDiffDialog.on_saveButton_clickedSvnDiffDialog.on_saveButton_clickedSvnDiffDialog.on_saveButton_clicked b=KbsSSSSvnLogBrowserDialog.__processBufferSvnLogBrowserDialog.__processBuffer8SvnLogBrowserDialog.__processBufferpQQQSvnLogBrowserDialog.__procFinishedSvnLogBrowserDialog.__procFinished8SvnLogBrowserDialog.__procFinishedsSSSSvnLogBrowserDialog.__getLogEntriesSvnLogBrowserDialog.__getLogEntriesSvnLogBrowserDialog.__getLogEntriesyWWWSvnLogBrowserDialog.__generateLogItemSvnLogBrowserDialog.__generateLogItemSvnLogBrowserDialog.__generateLogItem|~YYYSvnLogBrowserDialog.__generateFileItemSvnLogBrowserDialog.__generateFileItemSvnLogBrowserDialog.__generateFileItem^}EEESvnLogBrowserDialog.__finishSvnLogBrowserDialog.__finishSvnLogBrowserDialog.__finishj|MMMSvnLogBrowserDialog.__filterLogsSvnLogBrowserDialog.__filterLogsSvnLogBrowserDialog.__filterLogss{SSSSvnLogBrowserDialog.__diffRevisionsSvnLogBrowserDialog.__diffRevisionsSvnLogBrowserDialog.__diffRevisions &!Gd IIISvnLogBrowserDialog.closeEventSvnLogBrowserDialog.closeEvent8SvnLogBrowserDialog.closeEventX AAASvnLogBrowserDialog._resetSvnLogBrowserDialog._resetSvnLogBrowserDialog._resetg KKKSvnLogBrowserDialog.__showErrorSvnLogBrowserDialog.__showErrorSvnLogBrowserDialog.__showErrorgKKKSvnLogBrowserDialog.__resortLogSvnLogBrowserDialog.__resortLogSvnLogBrowserDialog.__resortLogmOOOSvnLogBrowserDialog.__resortFilesSvnLogBrowserDialog.__resortFilesSvnLogBrowserDialog.__resortFiles|YYYSvnLogBrowserDialog.__resizeColumnsLogSvnLogBrowserDialog.__resizeColumnsLogSvnLogBrowserDialog.__resizeColumnsLog]]]SvnLogBrowserDialog.__resizeColumnsFilesSvnLogBrowserDialog.__resizeColumnsFilesSvnLogBrowserDialog.__resizeColumnsFilesjMMMSvnLogBrowserDialog.__readStdoutSvnLogBrowserDialog.__readStdout8SvnLogBrowserDialog.__readStdoutjMMMSvnLogBrowserDialog.__readStderrSvnLogBrowserDialog.__readStderr8SvnLogBrowserDialog.__readStderr  l' cccSvnLogBrowserDialog.on_fieldCombo_activatedSvnLogBrowserDialog.on_fieldCombo_activatedSvnLogBrowserDialog.on_fieldCombo_activated qqqSvnLogBrowserDialog.on_diffRevisionsButton_clickedSvnLogBrowserDialog.on_diffRevisionsButton_clickedSvnLogBrowserDialog.on_diffRevisionsButton_clickedoooSvnLogBrowserDialog.on_diffPreviousButton_clickedSvnLogBrowserDialog.on_diffPreviousButton_clickedSvnLogBrowserDialog.on_diffPreviousButton_clickedmmmSvnLogBrowserDialog.on_clearRxEditButton_clickedSvnLogBrowserDialog.on_clearRxEditButton_clickedSvnLogBrowserDialog.on_clearRxEditButton_clicked ]]]SvnLogBrowserDialog.on_buttonBox_clickedSvnLogBrowserDialog.on_buttonBox_clickedSvnLogBrowserDialog.on_buttonBox_clickedm OOOSvnLogBrowserDialog.keyPressEventSvnLogBrowserDialog.keyPressEvent8SvnLogBrowserDialog.keyPressEvent yqDykkkSvnLogBrowserDialog.on_passwordCheckBox_toggledSvnLogBrowserDialog.on_passwordCheckBox_toggled8SvnLogBrowserDialog.on_passwordCheckBox_toggled___SvnLogBrowserDialog.on_nextButton_clickedSvnLogBrowserDialog.on_nextButton_clickedSvnLogBrowserDialog.on_nextButton_clicked#sssSvnLogBrowserDialog.on_logTree_itemSelectionChangedSvnLogBrowserDialog.on_logTree_itemSelectionChangedSvnLogBrowserDialog.on_logTree_itemSelectionChangedoooSvnLogBrowserDialog.on_logTree_currentItemChangedSvnLogBrowserDialog.on_logTree_currentItemChangedSvnLogBrowserDialog.on_logTree_currentItemChangedaaaSvnLogBrowserDialog.on_input_returnPressedSvnLogBrowserDialog.on_input_returnPressed8SvnLogBrowserDialog.on_input_returnPressed cccSvnLogBrowserDialog.on_fromDate_dateChangedSvnLogBrowserDialog.on_fromDate_dateChangedSvnLogBrowserDialog.on_fromDate_dateChanged tw_~MtI 777SvnLogDialog.__finishSvnLogDialog.__finishSvnLogDialog.__finish477SvnLogDialog (Module)SvnLogDialog (Module)SAA7SvnLogDialog (Constructor)SvnLogDialog (Constructor)SvnLogDialog.__init__.%%%SvnLogDialogSvnLogDialogSvnLogDialogU???SvnLogBrowserDialog.startSvnLogBrowserDialog.startSvnLogBrowserDialog.start___SvnLogBrowserDialog.on_toDate_dateChangedSvnLogBrowserDialog.on_toDate_dateChangedSvnLogBrowserDialog.on_toDate_dateChanged cccSvnLogBrowserDialog.on_stopCheckBox_clickedSvnLogBrowserDialog.on_stopCheckBox_clickedSvnLogBrowserDialog.on_stopCheckBox_clicked___SvnLogBrowserDialog.on_sendButton_clickedSvnLogBrowserDialog.on_sendButton_clicked8SvnLogBrowserDialog.on_sendButton_clicked___SvnLogBrowserDialog.on_rxEdit_textChangedSvnLogBrowserDialog.on_rxEdit_textChangedSvnLogBrowserDialog.on_rxEdit_textChanged #J<#*]]]SvnLogDialog.on_passwordCheckBox_toggledSvnLogDialog.on_passwordCheckBox_toggled9SvnLogDialog.on_passwordCheckBox_toggleds)SSSSvnLogDialog.on_input_returnPressedSvnLogDialog.on_input_returnPressed9SvnLogDialog.on_input_returnPressedm(OOOSvnLogDialog.on_buttonBox_clickedSvnLogDialog.on_buttonBox_clickedSvnLogDialog.on_buttonBox_clickedX'AAASvnLogDialog.keyPressEventSvnLogDialog.keyPressEvent9SvnLogDialog.keyPressEventO&;;;SvnLogDialog.closeEventSvnLogDialog.closeEvent9SvnLogDialog.closeEvent^%EEESvnLogDialog.__sourceChangedSvnLogDialog.__sourceChangedSvnLogDialog.__sourceChangedR$===SvnLogDialog.__showErrorSvnLogDialog.__showErrorSvnLogDialog.__showErrorU#???SvnLogDialog.__readStdoutSvnLogDialog.__readStdout9SvnLogDialog.__readStdoutU"???SvnLogDialog.__readStderrSvnLogDialog.__readStderr9SvnLogDialog.__readStderr[!CCCSvnLogDialog.__procFinishedSvnLogDialog.__procFinished9SvnLogDialog.__procFinished J|-_^5EEESvnMergeDialog.getParametersSvnMergeDialog.getParametersSvnMergeDialog.getParametersg4KKKSvnMergeDialog.__enableOkButtonSvnMergeDialog.__enableOkButtonSvnMergeDialog.__enableOkButton83;;SvnMergeDialog (Module)SvnMergeDialog (Module)Y2EE;SvnMergeDialog (Constructor)SvnMergeDialog (Constructor)SvnMergeDialog.__init__41)))SvnMergeDialogSvnMergeDialogSvnMergeDialogL0999SvnLoginDialog.getDataSvnLoginDialog.getDataSvnLoginDialog.getData8/;;SvnLoginDialog (Module)SvnLoginDialog (Module)Y.EE;SvnLoginDialog (Constructor)SvnLoginDialog (Constructor)SvnLoginDialog.__init__4-)))SvnLoginDialogSvnLoginDialogSvnLoginDialog@,111SvnLogDialog.startSvnLogDialog.startSvnLogDialog.startp+QQQSvnLogDialog.on_sendButton_clickedSvnLogDialog.on_sendButton_clicked9SvnLogDialog.on_sendButton_clicked qA&<uuuSvnNewProjectOptionsDialog.on_layoutCheckBox_toggledSvnNewProjectOptionsDialog.on_layoutCheckBox_toggledSvnNewProjectOptionsDialog.on_layoutCheckBox_toggledp;QQQSvnNewProjectOptionsDialog.getDataSvnNewProjectOptionsDialog.getDataSvnNewProjectOptionsDialog.getDataP:SSSvnNewProjectOptionsDialog (Module)SvnNewProjectOptionsDialog (Module)}9]]SSvnNewProjectOptionsDialog (Constructor)SvnNewProjectOptionsDialog (Constructor)SvnNewProjectOptionsDialog.__init__X8AAASvnNewProjectOptionsDialogSvnNewProjectOptionsDialogSvnNewProjectOptionsDialog 7cccSvnMergeDialog.on_tag2Combo_editTextChangedSvnMergeDialog.on_tag2Combo_editTextChangedSvnMergeDialog.on_tag2Combo_editTextChanged 6cccSvnMergeDialog.on_tag1Combo_editTextChangedSvnMergeDialog.on_tag1Combo_editTextChangedSvnMergeDialog.on_tag1Combo_editTextChanged "PUw"RD===SvnOptionsDialog.getDataSvnOptionsDialog.getDataSvnOptionsDialog.getDatawwwSvnNewProjectOptionsDialog.on_protocolCombo_activatedSvnNewProjectOptionsDialog.on_protocolCombo_activatedSvnNewProjectOptionsDialog.on_protocolCombo_activated,=yyySvnNewProjectOptionsDialog.on_projectDirButton_clickedSvnNewProjectOptionsDialog.on_projectDirButton_clickedSvnNewProjectOptionsDialog.on_projectDirButton_clicked q_ pKQQQSvnProjectBrowserHelper.__SVNBlameSvnProjectBrowserHelper.__SVNBlame SvnProjectBrowserHelper.__SVNBlameJeeeSvnProjectBrowserHelper.__SVNAddToChangelistSvnProjectBrowserHelper.__SVNAddToChangelist SvnProjectBrowserHelper.__SVNAddToChangelisttIWWMSvnProjectBrowserHelper (Constructor)SvnProjectBrowserHelper (Constructor) SvnProjectBrowserHelper.__init__OH;;;SvnProjectBrowserHelperSvnProjectBrowserHelper SvnProjectBrowserHelperGaaaSvnOptionsDialog.on_vcsUrlEdit_textChangedSvnOptionsDialog.on_vcsUrlEdit_textChangedSvnOptionsDialog.on_vcsUrlEdit_textChangedF]]]SvnOptionsDialog.on_vcsUrlButton_clickedSvnOptionsDialog.on_vcsUrlButton_clickedSvnOptionsDialog.on_vcsUrlButton_clicked EcccSvnOptionsDialog.on_protocolCombo_activatedSvnOptionsDialog.on_protocolCombo_activatedSvnOptionsDialog.on_protocolCombo_activated 1 1mSOOOSvnProjectBrowserHelper.__SVNLockSvnProjectBrowserHelper.__SVNLock SvnProjectBrowserHelper.__SVNLock|RYYYSvnProjectBrowserHelper.__SVNListPropsSvnProjectBrowserHelper.__SVNListProps SvnProjectBrowserHelper.__SVNListPropsmQOOOSvnProjectBrowserHelper.__SVNInfoSvnProjectBrowserHelper.__SVNInfo SvnProjectBrowserHelper.__SVNInfoP___SvnProjectBrowserHelper.__SVNExtendedDiffSvnProjectBrowserHelper.__SVNExtendedDiff SvnProjectBrowserHelper.__SVNExtendedDiffvOUUUSvnProjectBrowserHelper.__SVNDelPropSvnProjectBrowserHelper.__SVNDelProp SvnProjectBrowserHelper.__SVNDelPropmNOOOSvnProjectBrowserHelper.__SVNCopySvnProjectBrowserHelper.__SVNCopy SvnProjectBrowserHelper.__SVNCopy|MYYYSvnProjectBrowserHelper.__SVNConfigureSvnProjectBrowserHelper.__SVNConfigure SvnProjectBrowserHelper.__SVNConfigure|LYYYSvnProjectBrowserHelper.__SVNBreakLockSvnProjectBrowserHelper.__SVNBreakLock SvnProjectBrowserHelper.__SVNBreakLock z~rz|ZYYYSvnProjectBrowserHelper.__SVNStealLockSvnProjectBrowserHelper.__SVNStealLock SvnProjectBrowserHelper.__SVNStealLockvYUUUSvnProjectBrowserHelper.__SVNSetPropSvnProjectBrowserHelper.__SVNSetProp SvnProjectBrowserHelper.__SVNSetPropvXUUUSvnProjectBrowserHelper.__SVNResolveSvnProjectBrowserHelper.__SVNResolve SvnProjectBrowserHelper.__SVNResolveWoooSvnProjectBrowserHelper.__SVNRemoveFromChangelistSvnProjectBrowserHelper.__SVNRemoveFromChangelist SvnProjectBrowserHelper.__SVNRemoveFromChangelistmVOOOSvnProjectBrowserHelper.__SVNMoveSvnProjectBrowserHelper.__SVNMove SvnProjectBrowserHelper.__SVNMoveU[[[SvnProjectBrowserHelper.__SVNLogLimitedSvnProjectBrowserHelper.__SVNLogLimited SvnProjectBrowserHelper.__SVNLogLimitedT[[[SvnProjectBrowserHelper.__SVNLogBrowserSvnProjectBrowserHelper.__SVNLogBrowser SvnProjectBrowserHelper.__SVNLogBrowser  acccSvnProjectBrowserHelper._addVCSMenuDirMultiSvnProjectBrowserHelper._addVCSMenuDirMulti SvnProjectBrowserHelper._addVCSMenuDirMulti|`YYYSvnProjectBrowserHelper._addVCSMenuDirSvnProjectBrowserHelper._addVCSMenuDir SvnProjectBrowserHelper._addVCSMenuDir_[[[SvnProjectBrowserHelper._addVCSMenuBackSvnProjectBrowserHelper._addVCSMenuBack SvnProjectBrowserHelper._addVCSMenuBacks^SSSSvnProjectBrowserHelper._addVCSMenuSvnProjectBrowserHelper._addVCSMenu SvnProjectBrowserHelper._addVCSMenu]]]]SvnProjectBrowserHelper.__itemsHaveFilesSvnProjectBrowserHelper.__itemsHaveFiles SvnProjectBrowserHelper.__itemsHaveFilesv\UUUSvnProjectBrowserHelper.__SVNUrlDiffSvnProjectBrowserHelper.__SVNUrlDiff SvnProjectBrowserHelper.__SVNUrlDiffs[SSSSvnProjectBrowserHelper.__SVNUnlockSvnProjectBrowserHelper.__SVNUnlock SvnProjectBrowserHelper.__SVNUnlock 3zl?3jiMMMSvnProjectHelper.__svnBranchListSvnProjectHelper.__svnBranchListSvnProjectHelper.__svnBranchList_hII?SvnProjectHelper (Constructor)SvnProjectHelper (Constructor)SvnProjectHelper.__init__:g---SvnProjectHelperSvnProjectHelperSvnProjectHelperfeeeSvnProjectBrowserHelper.showContextMenuMultiSvnProjectBrowserHelper.showContextMenuMulti SvnProjectBrowserHelper.showContextMenuMultiekkkSvnProjectBrowserHelper.showContextMenuDirMultiSvnProjectBrowserHelper.showContextMenuDirMulti SvnProjectBrowserHelper.showContextMenuDirMultidaaaSvnProjectBrowserHelper.showContextMenuDirSvnProjectBrowserHelper.showContextMenuDir SvnProjectBrowserHelper.showContextMenuDirc[[[SvnProjectBrowserHelper.showContextMenuSvnProjectBrowserHelper.showContextMenu SvnProjectBrowserHelper.showContextMenub]]]SvnProjectBrowserHelper._addVCSMenuMultiSvnProjectBrowserHelper._addVCSMenuMulti SvnProjectBrowserHelper._addVCSMenuMulti O&X~OarGGGSvnProjectHelper.__svnPropSetSvnProjectHelper.__svnPropSetSvnProjectHelper.__svnPropSetdqIIISvnProjectHelper.__svnPropListSvnProjectHelper.__svnPropListSvnProjectHelper.__svnPropListapGGGSvnProjectHelper.__svnPropDelSvnProjectHelper.__svnPropDelSvnProjectHelper.__svnPropDeljoMMMSvnProjectHelper.__svnLogLimitedSvnProjectHelper.__svnLogLimitedSvnProjectHelper.__svnLogLimitedjnMMMSvnProjectHelper.__svnLogBrowserSvnProjectHelper.__svnLogBrowserSvnProjectHelper.__svnLogBrowserXmAAASvnProjectHelper.__svnInfoSvnProjectHelper.__svnInfoSvnProjectHelper.__svnInfoplQQQSvnProjectHelper.__svnExtendedDiffSvnProjectHelper.__svnExtendedDiffSvnProjectHelper.__svnExtendedDiffgkKKKSvnProjectHelper.__svnConfigureSvnProjectHelper.__svnConfigureSvnProjectHelper.__svnConfiguremjOOOSvnProjectHelper.__svnChangeListsSvnProjectHelper.__svnChangeListsSvnProjectHelper.__svnChangeLists G)a>G_|II?SvnPropDelDialog (Constructor)SvnPropDelDialog (Constructor)SvnPropDelDialog.__init__:{---SvnPropDelDialogSvnPropDelDialogSvnPropDelDialogUz???SvnProjectHelper.initMenuSvnProjectHelper.initMenuSvnProjectHelper.initMenu^yEEESvnProjectHelper.initActionsSvnProjectHelper.initActionsSvnProjectHelper.initActions[xCCCSvnProjectHelper.getActionsSvnProjectHelper.getActionsSvnProjectHelper.getActionsawGGGSvnProjectHelper.__svnUrlDiffSvnProjectHelper.__svnUrlDiffSvnProjectHelper.__svnUrlDiffavGGGSvnProjectHelper.__svnTagListSvnProjectHelper.__svnTagListSvnProjectHelper.__svnTagListauGGGSvnProjectHelper.__svnResolveSvnProjectHelper.__svnResolveSvnProjectHelper.__svnResolvemtOOOSvnProjectHelper.__svnRepoBrowserSvnProjectHelper.__svnRepoBrowserSvnProjectHelper.__svnRepoBrowserdsIIISvnProjectHelper.__svnRelocateSvnProjectHelper.__svnRelocateSvnProjectHelper.__svnRelocate Xl5,XdIIISvnPropListDialog.__readStderrSvnPropListDialog.__readStderr=SvnPropListDialog.__readStderrjMMMSvnPropListDialog.__procFinishedSvnPropListDialog.__procFinished=SvnPropListDialog.__procFinishedjMMMSvnPropListDialog.__generateItemSvnPropListDialog.__generateItem SvnPropListDialog.__generateItemXAAASvnPropListDialog.__finishSvnPropListDialog.__finish SvnPropListDialog.__finish>AASvnPropListDialog (Module)SvnPropListDialog (Module) bKKASvnPropListDialog (Constructor)SvnPropListDialog (Constructor) SvnPropListDialog.__init__=///SvnPropListDialogSvnPropListDialog SvnPropListDialogeeeSvnPropDelDialog.on_propNameEdit_textChangedSvnPropDelDialog.on_propNameEdit_textChangedSvnPropDelDialog.on_propNameEdit_textChangedR~===SvnPropDelDialog.getDataSvnPropDelDialog.getDataSvnPropDelDialog.getData<}??SvnPropDelDialog (Module)SvnPropDelDialog (Module) Z)j 8Z<??SvnPropSetDialog (Module)SvnPropSetDialog (Module)!_II?SvnPropSetDialog (Constructor)SvnPropSetDialog (Constructor)!SvnPropSetDialog.__init__:---SvnPropSetDialogSvnPropSetDialog!SvnPropSetDialogO ;;;SvnPropListDialog.startSvnPropListDialog.start SvnPropListDialog.start| YYYSvnPropListDialog.on_buttonBox_clickedSvnPropListDialog.on_buttonBox_clicked SvnPropListDialog.on_buttonBox_clicked^ EEESvnPropListDialog.closeEventSvnPropListDialog.closeEvent=SvnPropListDialog.closeEventa GGGSvnPropListDialog.__showErrorSvnPropListDialog.__showError SvnPropListDialog.__showErrorX AAASvnPropListDialog.__resortSvnPropListDialog.__resort SvnPropListDialog.__resortmOOOSvnPropListDialog.__resizeColumnsSvnPropListDialog.__resizeColumns SvnPropListDialog.__resizeColumnsdIIISvnPropListDialog.__readStdoutSvnPropListDialog.__readStdout=SvnPropListDialog.__readStdout ,F7aGGGSvnRepoBrowserDialog.__finishSvnRepoBrowserDialog.__finish@SvnRepoBrowserDialog.__finishDGGSvnRepoBrowserDialog (Module)SvnRepoBrowserDialog (Module)#kQQGSvnRepoBrowserDialog (Constructor)SvnRepoBrowserDialog (Constructor)#SvnRepoBrowserDialog.__init__F555SvnRepoBrowserDialogSvnRepoBrowserDialog#SvnRepoBrowserDialogU???SvnRelocateDialog.getDataSvnRelocateDialog.getData"SvnRelocateDialog.getData>AASvnRelocateDialog (Module)SvnRelocateDialog (Module)"bKKASvnRelocateDialog (Constructor)SvnRelocateDialog (Constructor)"SvnRelocateDialog.__init__=///SvnRelocateDialogSvnRelocateDialog"SvnRelocateDialog|YYYSvnPropSetDialog.on_fileButton_clickedSvnPropSetDialog.on_fileButton_clicked>SvnPropSetDialog.on_fileButton_clickedR===SvnPropSetDialog.getDataSvnPropSetDialog.getData!SvnPropSetDialog.getData q 4Tqv"UUUSvnRepoBrowserDialog.__resizeColumnsSvnRepoBrowserDialog.__resizeColumns#SvnRepoBrowserDialog.__resizeColumnsg!KKKSvnRepoBrowserDialog.__repoRootSvnRepoBrowserDialog.__repoRoot@SvnRepoBrowserDialog.__repoRootm OOOSvnRepoBrowserDialog.__readStdoutSvnRepoBrowserDialog.__readStdout@SvnRepoBrowserDialog.__readStdoutmOOOSvnRepoBrowserDialog.__readStderrSvnRepoBrowserDialog.__readStderr@SvnRepoBrowserDialog.__readStderrsSSSSvnRepoBrowserDialog.__procFinishedSvnRepoBrowserDialog.__procFinished@SvnRepoBrowserDialog.__procFinishedsSSSSvnRepoBrowserDialog.__normalizeUrlSvnRepoBrowserDialog.__normalizeUrl#SvnRepoBrowserDialog.__normalizeUrlgKKKSvnRepoBrowserDialog.__listRepoSvnRepoBrowserDialog.__listRepo#SvnRepoBrowserDialog.__listReposSSSSvnRepoBrowserDialog.__generateItemSvnRepoBrowserDialog.__generateItem#SvnRepoBrowserDialog.__generateItem Q/g~Q*mmmSvnRepoBrowserDialog.on_passwordCheckBox_toggledSvnRepoBrowserDialog.on_passwordCheckBox_toggled@SvnRepoBrowserDialog.on_passwordCheckBox_toggled )cccSvnRepoBrowserDialog.on_input_returnPressedSvnRepoBrowserDialog.on_input_returnPressed@SvnRepoBrowserDialog.on_input_returnPressedp(QQQSvnRepoBrowserDialog.keyPressEventSvnRepoBrowserDialog.keyPressEvent@SvnRepoBrowserDialog.keyPressEvents'SSSSvnRepoBrowserDialog.getSelectedUrlSvnRepoBrowserDialog.getSelectedUrl#SvnRepoBrowserDialog.getSelectedUrlg&KKKSvnRepoBrowserDialog.closeEventSvnRepoBrowserDialog.closeEvent@SvnRepoBrowserDialog.closeEvent[%CCCSvnRepoBrowserDialog.acceptSvnRepoBrowserDialog.accept#SvnRepoBrowserDialog.acceptj$MMMSvnRepoBrowserDialog.__showErrorSvnRepoBrowserDialog.__showError#SvnRepoBrowserDialog.__showErrora#GGGSvnRepoBrowserDialog.__resortSvnRepoBrowserDialog.__resort#SvnRepoBrowserDialog.__resort :h&:X1AAASvnRevisionSelectionDialogSvnRevisionSelectionDialog$SvnRevisionSelectionDialogX0AAASvnRepoBrowserDialog.startSvnRepoBrowserDialog.start#SvnRepoBrowserDialog.start&/uuuSvnRepoBrowserDialog.on_urlCombo_currentIndexChangedSvnRepoBrowserDialog.on_urlCombo_currentIndexChanged#SvnRepoBrowserDialog.on_urlCombo_currentIndexChanged.aaaSvnRepoBrowserDialog.on_sendButton_clickedSvnRepoBrowserDialog.on_sendButton_clicked@SvnRepoBrowserDialog.on_sendButton_clicked)-wwwSvnRepoBrowserDialog.on_repoTree_itemSelectionChangedSvnRepoBrowserDialog.on_repoTree_itemSelectionChanged#SvnRepoBrowserDialog.on_repoTree_itemSelectionChanged,gggSvnRepoBrowserDialog.on_repoTree_itemExpandedSvnRepoBrowserDialog.on_repoTree_itemExpanded#SvnRepoBrowserDialog.on_repoTree_itemExpanded+iiiSvnRepoBrowserDialog.on_repoTree_itemCollapsedSvnRepoBrowserDialog.on_repoTree_itemCollapsed#SvnRepoBrowserDialog.on_repoTree_itemCollapsed 5-%O5[;CCCSvnStatusDialog.__breakLockSvnStatusDialog.__breakLock%SvnStatusDialog.__breakLockm:OOOSvnStatusDialog.__addToChangelistSvnStatusDialog.__addToChangelist%SvnStatusDialog.__addToChangelistI9777SvnStatusDialog.__addSvnStatusDialog.__add%SvnStatusDialog.__add:8==SvnStatusDialog (Module)SvnStatusDialog (Module)%\7GG=SvnStatusDialog (Constructor)SvnStatusDialog (Constructor)%SvnStatusDialog.__init__76+++SvnStatusDialogSvnStatusDialog%SvnStatusDialog5[[[SvnRevisionSelectionDialog.getRevisionsSvnRevisionSelectionDialog.getRevisions$SvnRevisionSelectionDialog.getRevisions4]]]SvnRevisionSelectionDialog.__getRevisionSvnRevisionSelectionDialog.__getRevision$SvnRevisionSelectionDialog.__getRevisionP3SSSvnRevisionSelectionDialog (Module)SvnRevisionSelectionDialog (Module)$}2]]SSvnRevisionSelectionDialog (Constructor)SvnRevisionSelectionDialog (Constructor)$SvnRevisionSelectionDialog.__init__ gMBPgmDOOOSvnStatusDialog.__getMissingItemsSvnStatusDialog.__getMissingItems%SvnStatusDialog.__getMissingItemsvCUUUSvnStatusDialog.__getLockActionItemsSvnStatusDialog.__getLockActionItems%SvnStatusDialog.__getLockActionItemsvBUUUSvnStatusDialog.__getCommitableItemsSvnStatusDialog.__getCommitableItems%SvnStatusDialog.__getCommitableItemsvAUUUSvnStatusDialog.__getChangelistItemsSvnStatusDialog.__getChangelistItems%SvnStatusDialog.__getChangelistItemsd@IIISvnStatusDialog.__generateItemSvnStatusDialog.__generateItem%SvnStatusDialog.__generateItemR?===SvnStatusDialog.__finishSvnStatusDialog.__finish%SvnStatusDialog.__finishL>999SvnStatusDialog.__diffSvnStatusDialog.__diff%SvnStatusDialog.__diff[=CCCSvnStatusDialog.__committedSvnStatusDialog.__committed%SvnStatusDialog.__committedR<===SvnStatusDialog.__commitSvnStatusDialog.__commit%SvnStatusDialog.__commit . @x.gMKKKSvnStatusDialog.__resizeColumnsSvnStatusDialog.__resizeColumns%SvnStatusDialog.__resizeColumns|LYYYSvnStatusDialog.__removeFromChangelistSvnStatusDialog.__removeFromChangelist%SvnStatusDialog.__removeFromChangelist^KEEESvnStatusDialog.__readStdoutSvnStatusDialog.__readStdoutBSvnStatusDialog.__readStdout^JEEESvnStatusDialog.__readStderrSvnStatusDialog.__readStderrBSvnStatusDialog.__readStderrdIIIISvnStatusDialog.__procFinishedSvnStatusDialog.__procFinishedBSvnStatusDialog.__procFinishedLH999SvnStatusDialog.__lockSvnStatusDialog.__lock%SvnStatusDialog.__lockyGWWWSvnStatusDialog.__getUnversionedItemsSvnStatusDialog.__getUnversionedItems%SvnStatusDialog.__getUnversionedItemsF[[[SvnStatusDialog.__getNonChangelistItemsSvnStatusDialog.__getNonChangelistItems%SvnStatusDialog.__getNonChangelistItemspEQQQSvnStatusDialog.__getModifiedItemsSvnStatusDialog.__getModifiedItems%SvnStatusDialog.__getModifiedItems *>yh*XWAAASvnStatusDialog.closeEventSvnStatusDialog.closeEventBSvnStatusDialog.closeEventvVUUUSvnStatusDialog.__updateCommitButtonSvnStatusDialog.__updateCommitButton%SvnStatusDialog.__updateCommitButtongUKKKSvnStatusDialog.__updateButtonsSvnStatusDialog.__updateButtons%SvnStatusDialog.__updateButtonsRT===SvnStatusDialog.__unlockSvnStatusDialog.__unlock%SvnStatusDialog.__unlock[SCCCSvnStatusDialog.__stealLockSvnStatusDialog.__stealLock%SvnStatusDialog.__stealLock[RCCCSvnStatusDialog.__showErrorSvnStatusDialog.__showError%SvnStatusDialog.__showErrormQOOOSvnStatusDialog.__showContextMenuSvnStatusDialog.__showContextMenu%SvnStatusDialog.__showContextMenuRP===SvnStatusDialog.__revertSvnStatusDialog.__revert%SvnStatusDialog.__revertjOMMMSvnStatusDialog.__restoreMissingSvnStatusDialog.__restoreMissing%SvnStatusDialog.__restoreMissingRN===SvnStatusDialog.__resortSvnStatusDialog.__resort%SvnStatusDialog.__resort^ &,28>DJPV\bhntz "(.4:@FLRX^djpv|FLRX^djpv| zASBZCaDiErF|GHIJ"K*L1M;NDOMPWR_SgTpUyVW XYZ#[,\7]@^K_T`]"(#2$<%H&S'_(k)w*+,-!.(/10:1F2Q3\4f5o6z78 9:; <*=5><?D@KASBZCaDiErF|GHIJ"K*L1M;NDOMPWR_SgTpUyVW XYZ#[,\7]@^K_T`]aibuc~d ef(g4h>iIjSk_lkmuno pqr&s1t;uFvOw]xdyjzp{w||}~  #(-_]]]SvnStatusDialog.on_refreshButton_clickedSvnStatusDialog.on_refreshButton_clicked%SvnStatusDialog.on_refreshButton_clicked ^cccSvnStatusDialog.on_passwordCheckBox_toggledSvnStatusDialog.on_passwordCheckBox_toggledBSvnStatusDialog.on_passwordCheckBox_toggled|]YYYSvnStatusDialog.on_input_returnPressedSvnStatusDialog.on_input_returnPressedBSvnStatusDialog.on_input_returnPressedy\WWWSvnStatusDialog.on_diffButton_clickedSvnStatusDialog.on_diffButton_clicked%SvnStatusDialog.on_diffButton_clicked[[[[SvnStatusDialog.on_commitButton_clickedSvnStatusDialog.on_commitButton_clicked%SvnStatusDialog.on_commitButton_clickedvZUUUSvnStatusDialog.on_buttonBox_clickedSvnStatusDialog.on_buttonBox_clicked%SvnStatusDialog.on_buttonBox_clickedvYUUUSvnStatusDialog.on_addButton_clickedSvnStatusDialog.on_addButton_clicked%SvnStatusDialog.on_addButton_clickedaXGGGSvnStatusDialog.keyPressEventSvnStatusDialog.keyPressEventBSvnStatusDialog.keyPressEvent z|[kLg999SvnStatusMonitorThreadSvnStatusMonitorThread&SvnStatusMonitorThreadIf777SvnStatusDialog.startSvnStatusDialog.start%SvnStatusDialog.start eqqqSvnStatusDialog.on_statusList_itemSelectionChangedSvnStatusDialog.on_statusList_itemSelectionChanged%SvnStatusDialog.on_statusList_itemSelectionChangedd___SvnStatusDialog.on_statusList_itemChangedSvnStatusDialog.on_statusList_itemChanged%SvnStatusDialog.on_statusList_itemChangedciiiSvnStatusDialog.on_statusFilterCombo_activatedSvnStatusDialog.on_statusFilterCombo_activated%SvnStatusDialog.on_statusFilterCombo_activatedybWWWSvnStatusDialog.on_sendButton_clickedSvnStatusDialog.on_sendButton_clickedBSvnStatusDialog.on_sendButton_clickeda[[[SvnStatusDialog.on_revertButton_clickedSvnStatusDialog.on_revertButton_clicked%SvnStatusDialog.on_revertButton_clicked`]]]SvnStatusDialog.on_restoreButton_clickedSvnStatusDialog.on_restoreButton_clicked%SvnStatusDialog.on_restoreButton_clicked 4An44apGGGSvnSwitchDialog.getParametersSvnSwitchDialog.getParameters'SvnSwitchDialog.getParameters:o==SvnSwitchDialog (Module)SvnSwitchDialog (Module)'\nGG=SvnSwitchDialog (Constructor)SvnSwitchDialog (Constructor)'SvnSwitchDialog.__init__7m+++SvnSwitchDialogSvnSwitchDialog'SvnSwitchDialog|lYYYSvnStatusMonitorThread._performMonitorSvnStatusMonitorThread._performMonitor&SvnStatusMonitorThread._performMonitor>k SvnStatusMonitorThread.__clientSslServerTrustPromptCallbackSvnStatusMonitorThread.__clientSslServerTrustPromptCallback&SvnStatusMonitorThread.__clientSslServerTrustPromptCallbackjeeeSvnStatusMonitorThread.__clientLoginCallbackSvnStatusMonitorThread.__clientLoginCallback&SvnStatusMonitorThread.__clientLoginCallbackHiKKSvnStatusMonitorThread (Module)SvnStatusMonitorThread (Module)&qhUUKSvnStatusMonitorThread (Constructor)SvnStatusMonitorThread (Constructor)&SvnStatusMonitorThread.__init__ %= %|yYYYSvnTagBranchListDialog.__resizeColumnsSvnTagBranchListDialog.__resizeColumns(SvnTagBranchListDialog.__resizeColumnssxSSSSvnTagBranchListDialog.__readStdoutSvnTagBranchListDialog.__readStdoutESvnTagBranchListDialog.__readStdoutswSSSSvnTagBranchListDialog.__readStderrSvnTagBranchListDialog.__readStderrESvnTagBranchListDialog.__readStderryvWWWSvnTagBranchListDialog.__procFinishedSvnTagBranchListDialog.__procFinishedESvnTagBranchListDialog.__procFinishedyuWWWSvnTagBranchListDialog.__generateItemSvnTagBranchListDialog.__generateItem(SvnTagBranchListDialog.__generateItemgtKKKSvnTagBranchListDialog.__finishSvnTagBranchListDialog.__finish(SvnTagBranchListDialog.__finishHsKKSvnTagBranchListDialog (Module)SvnTagBranchListDialog (Module)(qrUUKSvnTagBranchListDialog (Constructor)SvnTagBranchListDialog (Constructor)(SvnTagBranchListDialog.__init__Lq999SvnTagBranchListDialogSvnTagBranchListDialog(SvnTagBranchListDialog #C;gggSvnTagBranchListDialog.on_input_returnPressedSvnTagBranchListDialog.on_input_returnPressedESvnTagBranchListDialog.on_input_returnPressed cccSvnTagBranchListDialog.on_buttonBox_clickedSvnTagBranchListDialog.on_buttonBox_clicked(SvnTagBranchListDialog.on_buttonBox_clickedv~UUUSvnTagBranchListDialog.keyPressEventSvnTagBranchListDialog.keyPressEventESvnTagBranchListDialog.keyPressEventm}OOOSvnTagBranchListDialog.getTagListSvnTagBranchListDialog.getTagList(SvnTagBranchListDialog.getTagListm|OOOSvnTagBranchListDialog.closeEventSvnTagBranchListDialog.closeEventESvnTagBranchListDialog.closeEventp{QQQSvnTagBranchListDialog.__showErrorSvnTagBranchListDialog.__showError(SvnTagBranchListDialog.__showErrorgzKKKSvnTagBranchListDialog.__resortSvnTagBranchListDialog.__resort(SvnTagBranchListDialog.__resort ~\i8P~I 777SvnUrlSelectionDialogSvnUrlSelectionDialog*SvnUrlSelectionDialog]]]SvnTagDialog.on_tagCombo_editTextChangedSvnTagDialog.on_tagCombo_editTextChanged)SvnTagDialog.on_tagCombo_editTextChangedXAAASvnTagDialog.getParametersSvnTagDialog.getParameters)SvnTagDialog.getParameters477SvnTagDialog (Module)SvnTagDialog (Module))SAA7SvnTagDialog (Constructor)SvnTagDialog (Constructor))SvnTagDialog.__init__.%%%SvnTagDialogSvnTagDialog)SvnTagDialog^EEESvnTagBranchListDialog.startSvnTagBranchListDialog.start(SvnTagBranchListDialog.starteeeSvnTagBranchListDialog.on_sendButton_clickedSvnTagBranchListDialog.on_sendButton_clickedESvnTagBranchListDialog.on_sendButton_clicked qqqSvnTagBranchListDialog.on_passwordCheckBox_toggledSvnTagBranchListDialog.on_passwordCheckBox_toggledESvnTagBranchListDialog.on_passwordCheckBox_toggled >F\>C333SyntaxCheckerDialogSyntaxCheckerDialogSyntaxCheckerDialog8;;SyntaxChecker (Package)SyntaxChecker (Package)Q477SvnUtilities (Module)SvnUtilities (Module)+/{{{SvnUrlSelectionDialog.on_typeCombo2_currentIndexChangedSvnUrlSelectionDialog.on_typeCombo2_currentIndexChanged*SvnUrlSelectionDialog.on_typeCombo2_currentIndexChanged/{{{SvnUrlSelectionDialog.on_typeCombo1_currentIndexChangedSvnUrlSelectionDialog.on_typeCombo1_currentIndexChanged*SvnUrlSelectionDialog.on_typeCombo1_currentIndexChangeda GGGSvnUrlSelectionDialog.getURLsSvnUrlSelectionDialog.getURLs*SvnUrlSelectionDialog.getURLs ]]]SvnUrlSelectionDialog.__changeLabelComboSvnUrlSelectionDialog.__changeLabelCombo*SvnUrlSelectionDialog.__changeLabelComboF IISvnUrlSelectionDialog (Module)SvnUrlSelectionDialog (Module)*n SSISvnUrlSelectionDialog (Constructor)SvnUrlSelectionDialog (Constructor)*SvnUrlSelectionDialog.__init__ ~Pa~kkkSyntaxCheckerDialog.on_resultList_itemActivatedSyntaxCheckerDialog.on_resultList_itemActivatedSyntaxCheckerDialog.on_resultList_itemActivated]]]SyntaxCheckerDialog.on_buttonBox_clickedSyntaxCheckerDialog.on_buttonBox_clickedSyntaxCheckerDialog.on_buttonBox_clicked^EEESyntaxCheckerDialog.__resortSyntaxCheckerDialog.__resortSyntaxCheckerDialog.__resort^EEESyntaxCheckerDialog.__finishSyntaxCheckerDialog.__finishSyntaxCheckerDialog.__finish|YYYSyntaxCheckerDialog.__createResultItemSyntaxCheckerDialog.__createResultItemSyntaxCheckerDialog.__createResultItemmOOOSyntaxCheckerDialog.__clearErrorsSyntaxCheckerDialog.__clearErrorsSyntaxCheckerDialog.__clearErrorsBEESyntaxCheckerDialog (Module)SyntaxCheckerDialog (Module)hOOESyntaxCheckerDialog (Constructor)SyntaxCheckerDialog (Constructor)SyntaxCheckerDialog.__init__ wn j#MMMSyntaxCheckerPlugin.__initializeSyntaxCheckerPlugin.__initializeSyntaxCheckerPlugin.__initialize"[[[SyntaxCheckerPlugin.__editorSyntaxCheckSyntaxCheckerPlugin.__editorSyntaxCheckSyntaxCheckerPlugin.__editorSyntaxCheckv!UUUSyntaxCheckerPlugin.__editorShowMenuSyntaxCheckerPlugin.__editorShowMenuSyntaxCheckerPlugin.__editorShowMenup QQQSyntaxCheckerPlugin.__editorOpenedSyntaxCheckerPlugin.__editorOpenedSyntaxCheckerPlugin.__editorOpenedpQQQSyntaxCheckerPlugin.__editorClosedSyntaxCheckerPlugin.__editorClosedSyntaxCheckerPlugin.__editorClosedhOOESyntaxCheckerPlugin (Constructor)SyntaxCheckerPlugin (Constructor)SyntaxCheckerPlugin.__init__C333SyntaxCheckerPluginSyntaxCheckerPluginSyntaxCheckerPluginU???SyntaxCheckerDialog.startSyntaxCheckerDialog.startSyntaxCheckerDialog.start___SyntaxCheckerDialog.on_showButton_clickedSyntaxCheckerDialog.on_showButton_clickedSyntaxCheckerDialog.on_showButton_clicked SnWp S2,55TRPreviewer (Module)TRPreviewer (Module)P+??5TRPreviewer (Constructor)TRPreviewer (Constructor)TRPreviewer.__init__+*###TRPreviewerTRPreviewerTRPreviewerd)IIISyntaxCheckerPlugin.deactivateSyntaxCheckerPlugin.deactivateSyntaxCheckerPlugin.deactivate^(EEESyntaxCheckerPlugin.activateSyntaxCheckerPlugin.activateSyntaxCheckerPlugin.activate']]]SyntaxCheckerPlugin.__projectSyntaxCheckSyntaxCheckerPlugin.__projectSyntaxCheckSyntaxCheckerPlugin.__projectSyntaxChecky&WWWSyntaxCheckerPlugin.__projectShowMenuSyntaxCheckerPlugin.__projectShowMenuSyntaxCheckerPlugin.__projectShowMenu%kkkSyntaxCheckerPlugin.__projectBrowserSyntaxCheckSyntaxCheckerPlugin.__projectBrowserSyntaxCheckSyntaxCheckerPlugin.__projectBrowserSyntaxCheck$eeeSyntaxCheckerPlugin.__projectBrowserShowMenuSyntaxCheckerPlugin.__projectBrowserShowMenuSyntaxCheckerPlugin.__projectBrowserShowMenu PniOPL7999TRPreviewer.closeEventTRPreviewer.closeEventTRPreviewer.closeEventO6;;;TRPreviewer.__whatsThisTRPreviewer.__whatsThisTRPreviewer.__whatsThis[5CCCTRPreviewer.__updateActionsTRPreviewer.__updateActionsTRPreviewer.__updateActions^4EEETRPreviewer.__showWindowMenuTRPreviewer.__showWindowMenuTRPreviewer.__showWindowMenuR3===TRPreviewer.__openWidgetTRPreviewer.__openWidgetTRPreviewer.__openWidgeta2GGGTRPreviewer.__openTranslationTRPreviewer.__openTranslationTRPreviewer.__openTranslationX1AAATRPreviewer.__initToolbarsTRPreviewer.__initToolbarsTRPreviewer.__initToolbarsO0;;;TRPreviewer.__initMenusTRPreviewer.__initMenusTRPreviewer.__initMenusU/???TRPreviewer.__initActionsTRPreviewer.__initActionsTRPreviewer.__initActionsI.777TRPreviewer.__aboutQtTRPreviewer.__aboutQtTRPreviewer.__aboutQtC-333TRPreviewer.__aboutTRPreviewer.__aboutTRPreviewer.__about >dkz@[[QTRSingleApplicationServer (Constructor)TRSingleApplicationServer (Constructor)TRSingleApplicationServer.__init__U????TRSingleApplicationServerTRSingleApplicationServerTRSingleApplicationServery>WWWTRSingleApplicationClient.processArgsTRSingleApplicationClient.processArgsTRSingleApplicationClient.processArgsz=[[QTRSingleApplicationClient (Constructor)TRSingleApplicationClient (Constructor)TRSingleApplicationClient.__init__U<???TRSingleApplicationClientTRSingleApplicationClientTRSingleApplicationClientB;EETRSingleApplication (Module)TRSingleApplication (Module)::---TRPreviewer.showTRPreviewer.showTRPreviewer.showX9AAATRPreviewer.setTranslationTRPreviewer.setTranslationTRPreviewer.setTranslationd8IIITRPreviewer.reloadTranslationsTRPreviewer.reloadTranslationsTRPreviewer.reloadTranslations njK~2nJK;;1TabWidget (Constructor)TabWidget (Constructor)LTabWidget.__init__%JTabWidgetTabWidgetLTabWidgetLI999TabBar.mousePressEventTabBar.mousePressEventLTabBar.mousePressEventIH777TabBar.mouseMoveEventTabBar.mouseMoveEventLTabBar.mouseMoveEvent:G---TabBar.dropEventTabBar.dropEventLTabBar.dropEventIF777TabBar.dragEnterEventTabBar.dragEnterEventLTabBar.dragEnterEventAE55+TabBar (Constructor)TabBar (Constructor)LTabBar.__init__DTabBarTabBarLTabBarC[[[TRSingleApplicationServer.handleCommandTRSingleApplicationServer.handleCommandTRSingleApplicationServer.handleCommandBgggTRSingleApplicationServer.__saLoadTranslationTRSingleApplicationServer.__saLoadTranslationTRSingleApplicationServer.__saLoadTranslation|AYYYTRSingleApplicationServer.__saLoadFormTRSingleApplicationServer.__saLoadFormTRSingleApplicationServer.__saLoadForm EAEgTKKKTabWidget.__contextMenuMoveLastTabWidget.__contextMenuMoveLastLTabWidget.__contextMenuMoveLastjSMMMTabWidget.__contextMenuMoveFirstTabWidget.__contextMenuMoveFirstLTabWidget.__contextMenuMoveFirstRaaaTabWidget.__contextMenuCopyPathToClipboardTabWidget.__contextMenuCopyPathToClipboardLTabWidget.__contextMenuCopyPathToClipboardpQQQQTabWidget.__contextMenuCloseOthersTabWidget.__contextMenuCloseOthersLTabWidget.__contextMenuCloseOthersgPKKKTabWidget.__contextMenuCloseAllTabWidget.__contextMenuCloseAllLTabWidget.__contextMenuCloseAll^OEEETabWidget.__contextMenuCloseTabWidget.__contextMenuCloseLTabWidget.__contextMenuCloseXNAAATabWidget.__closeRequestedTabWidget.__closeRequestedLTabWidget.__closeRequesteddMIIITabWidget.__closeButtonClickedTabWidget.__closeButtonClickedLTabWidget.__closeButtonClickedUL???TabWidget.__captionChangeTabWidget.__captionChangeLTabWidget.__captionChange v)^Jv[]CCCTabWidget.__showContextMenuTabWidget.__showContextMenuLTabWidget.__showContextMenus\SSSTabWidget.__navigationMenuTriggeredTabWidget.__navigationMenuTriggeredLTabWidget.__navigationMenuTriggeredF[555TabWidget.__initMenuTabWidget.__initMenuLTabWidget.__initMenuaZGGGTabWidget.__contextMenuSaveAsTabWidget.__contextMenuSaveAsLTabWidget.__contextMenuSaveAsdYIIITabWidget.__contextMenuSaveAllTabWidget.__contextMenuSaveAllLTabWidget.__contextMenuSaveAll[XCCCTabWidget.__contextMenuSaveTabWidget.__contextMenuSaveLTabWidget.__contextMenuSavejWMMMTabWidget.__contextMenuPrintFileTabWidget.__contextMenuPrintFileLTabWidget.__contextMenuPrintFilejVMMMTabWidget.__contextMenuMoveRightTabWidget.__contextMenuMoveRightLTabWidget.__contextMenuMoveRightgUKKKTabWidget.__contextMenuMoveLeftTabWidget.__contextMenuMoveLeftLTabWidget.__contextMenuMoveLeft F\{53FOi;;;TabWidget.showIndicatorTabWidget.showIndicatorLTabWidget.showIndicatorLh999TabWidget.removeWidgetTabWidget.removeWidgetLTabWidget.removeWidgetIg777TabWidget.relocateTabTabWidget.relocateTabLTabWidget.relocateTabgfKKKTabWidget.mouseDoubleClickEventTabWidget.mouseDoubleClickEventLTabWidget.mouseDoubleClickEventLe999TabWidget.insertWidgetTabWidget.insertWidgetLTabWidget.insertWidgetFd555TabWidget.hasEditorsTabWidget.hasEditorsLTabWidget.hasEditorsCc333TabWidget.hasEditorTabWidget.hasEditorLTabWidget.hasEditorOb;;;TabWidget.currentWidgetTabWidget.currentWidgetLTabWidget.currentWidgetLa999TabWidget.copyTabOtherTabWidget.copyTabOtherLTabWidget.copyTabOther=`///TabWidget.copyTabTabWidget.copyTabLTabWidget.copyTab:_---TabWidget.addTabTabWidget.addTabLTabWidget.addTabd^IIITabWidget.__showNavigationMenuTabWidget.__showNavigationMenuLTabWidget.__showNavigationMenu <i bHs<4u)))TabnannyPluginTabnannyPluginTabnannyPluginFt555TabnannyDialog.startTabnannyDialog.startTabnannyDialog.startsaaaTabnannyDialog.on_resultList_itemActivatedTabnannyDialog.on_resultList_itemActivatedTabnannyDialog.on_resultList_itemActivatedsrSSSTabnannyDialog.on_buttonBox_clickedTabnannyDialog.on_buttonBox_clickedTabnannyDialog.on_buttonBox_clickedOq;;;TabnannyDialog.__resortTabnannyDialog.__resortTabnannyDialog.__resortOp;;;TabnannyDialog.__finishTabnannyDialog.__finishTabnannyDialog.__finishmoOOOTabnannyDialog.__createResultItemTabnannyDialog.__createResultItemTabnannyDialog.__createResultItem8n;;TabnannyDialog (Module)TabnannyDialog (Module)YmEE;TabnannyDialog (Constructor)TabnannyDialog (Constructor)TabnannyDialog.__init__4l)))TabnannyDialogTabnannyDialogTabnannyDialog.k11Tabnanny (Package)Tabnanny (Package)R,j//Tabnanny (Module)Tabnanny (Module) 9@r(9j~MMMTabnannyPlugin.__projectShowMenuTabnannyPlugin.__projectShowMenuTabnannyPlugin.__projectShowMenu}[[[TabnannyPlugin.__projectBrowserTabnannyTabnannyPlugin.__projectBrowserTabnannyTabnannyPlugin.__projectBrowserTabnanny|[[[TabnannyPlugin.__projectBrowserShowMenuTabnannyPlugin.__projectBrowserShowMenuTabnannyPlugin.__projectBrowserShowMenu[{CCCTabnannyPlugin.__initializeTabnannyPlugin.__initializeTabnannyPlugin.__initializegzKKKTabnannyPlugin.__editorTabnannyTabnannyPlugin.__editorTabnannyTabnannyPlugin.__editorTabnannygyKKKTabnannyPlugin.__editorShowMenuTabnannyPlugin.__editorShowMenuTabnannyPlugin.__editorShowMenuaxGGGTabnannyPlugin.__editorOpenedTabnannyPlugin.__editorOpenedTabnannyPlugin.__editorOpenedawGGGTabnannyPlugin.__editorClosedTabnannyPlugin.__editorClosedTabnannyPlugin.__editorClosedYvEE;TabnannyPlugin (Constructor)TabnannyPlugin (Constructor)TabnannyPlugin.__init__ ,AS$7r,C 333Tabview._removeViewTabview._removeViewLTabview._removeViewO ;;;Tabview._removeAllViewsTabview._removeAllViewsLTabview._removeAllViewsp QQQTabview._modificationStatusChangedTabview._modificationStatusChangedLTabview._modificationStatusChangedXAAATabview._initWindowActionsTabview._initWindowActionsLTabview._initWindowActions:---Tabview._addViewTabview._addViewLTabview._addViewR===Tabview.__currentChangedTabview.__currentChangedLTabview.__currentChanged,//Tabview (Package)Tabview (Package)^*--Tabview (Module)Tabview (Module)LD77-Tabview (Constructor)Tabview (Constructor)LTabview.__init__TabviewTabviewLTabviewU???TabnannyPlugin.deactivateTabnannyPlugin.deactivateTabnannyPlugin.deactivateO;;;TabnannyPlugin.activateTabnannyPlugin.activateTabnannyPlugin.activatejMMMTabnannyPlugin.__projectTabnannyTabnannyPlugin.__projectTabnannyTabnannyPlugin.__projectTabnanny /b\"M o/=///Tabview.prevSplitTabview.prevSplitLTabview.prevSplitXAAATabview.preferencesChangedTabview.preferencesChangedLTabview.preferencesChanged=///Tabview.nextSplitTabview.nextSplitLTabview.nextSplit@111Tabview.insertViewTabview.insertViewLTabview.insertViewR===Tabview.getTabWidgetByIdTabview.getTabWidgetByIdLTabview.getTabWidgetByIdC333Tabview.eventFilterTabview.eventFilterLTabview.eventFilter7+++Tabview.cascadeTabview.cascadeLTabview.cascade7+++Tabview.canTileTabview.canTileLTabview.canTile:---Tabview.canSplitTabview.canSplitLTabview.canSplit@111Tabview.canCascadeTabview.canCascadeLTabview.canCascade:---Tabview.addSplitTabview.addSplitLTabview.addSplitF555Tabview.activeWindowTabview.activeWindowLTabview.activeWindow[ CCCTabview._syntaxErrorToggledTabview._syntaxErrorToggledLTabview._syntaxErrorToggled= ///Tabview._showViewTabview._showViewLTabview._showView RnlSa$R=(///Task.setCompletedTask.setCompletedTask.setCompleted@'111Task.isProjectTaskTask.isProjectTaskTask.isProjectTaskL&999Task.isProjectFileTaskTask.isProjectFileTaskTask.isProjectFileTask:%---Task.isCompletedTask.isCompletedTask.isCompleted4$)))Task.getLinenoTask.getLinenoTask.getLineno:#---Task.getFilenameTask.getFilenameTask.getFilename="///Task.colorizeTaskTask.colorizeTaskTask.colorizeTask;!11'Task (Constructor)Task (Constructor)Task.__init__ TaskTaskTask!TagErrorTagErrorHTagError.%%%Tabview.tileTabview.tileLTabview.tileL999Tabview.showWindowMenuTabview.showWindowMenuLTabview.showWindowMenu[CCCTabview.setSplitOrientationTabview.setSplitOrientationLTabview.setSplitOrientationI777Tabview.setEditorNameTabview.setEditorNameLTabview.setEditorNameC333Tabview.removeSplitTabview.removeSplitLTabview.removeSplit Q}@$qQU4???TaskFilter.setScopeFilterTaskFilter.setScopeFilterTaskFilter.setScopeFilterd3IIITaskFilter.setPrioritiesFilterTaskFilter.setPrioritiesFilterTaskFilter.setPrioritiesFilter^2EEETaskFilter.setFileNameFilterTaskFilter.setFileNameFilterTaskFilter.setFileNameFilterg1KKKTaskFilter.setDescriptionFilterTaskFilter.setDescriptionFilterTaskFilter.setDescriptionFilterF0555TaskFilter.setActiveTaskFilter.setActiveTaskFilter.setActiveX/AAATaskFilter.hasActiveFilterTaskFilter.hasActiveFilterTaskFilter.hasActiveFilterM.==3TaskFilter (Constructor)TaskFilter (Constructor)TaskFilter.__init__(-!!!TaskFilterTaskFilterTaskFilterC,333Task.setProjectTaskTask.setProjectTaskTask.setProjectTask:+---Task.setPriorityTask.setPriorityTask.setPriority:*---Task.setLongTextTask.setLongTextTask.setLongTextC)333Task.setDescriptionTask.setDescriptionTask.setDescription rP Gp'rD>GGTaskPropertiesDialog (Module)TaskPropertiesDialog (Module)k=QQGTaskPropertiesDialog (Constructor)TaskPropertiesDialog (Constructor)TaskPropertiesDialog.__init__F<555TaskPropertiesDialogTaskPropertiesDialogTaskPropertiesDialog;aaaTaskFilterConfigDialog.configureTaskFilterTaskFilterConfigDialog.configureTaskFilterTaskFilterConfigDialog.configureTaskFilterH:KKTaskFilterConfigDialog (Module)TaskFilterConfigDialog (Module)q9UUKTaskFilterConfigDialog (Constructor)TaskFilterConfigDialog (Constructor)TaskFilterConfigDialog.__init__L8999TaskFilterConfigDialogTaskFilterConfigDialogTaskFilterConfigDialogC7333TaskFilter.showTaskTaskFilter.showTaskTaskFilter.showTaskR6===TaskFilter.setTypeFilterTaskFilter.setTypeFilterTaskFilter.setTypeFilterX5AAATaskFilter.setStatusFilterTaskFilter.setStatusFilterTaskFilter.setStatusFilter w2&v*wOI;;;TaskViewer.__deleteTaskTaskViewer.__deleteTaskTaskViewer.__deleteTask^HEEETaskViewer.__deleteCompletedTaskViewer.__deleteCompletedTaskViewer.__deleteCompletedIG777TaskViewer.__copyTaskTaskViewer.__copyTaskTaskViewer.__copyTask^FEEETaskViewer.__configureFilterTaskViewer.__configureFilterTaskViewer.__configureFilterLE999TaskViewer.__configureTaskViewer.__configureTaskViewer.__configure[DCCCTaskViewer.__activateFilterTaskViewer.__activateFilterTaskViewer.__activateFilter0C33TaskViewer (Module)TaskViewer (Module)MB==3TaskViewer (Constructor)TaskViewer (Constructor)TaskViewer.__init__(A!!!TaskViewerTaskViewerTaskViewerj@MMMTaskPropertiesDialog.setReadOnlyTaskPropertiesDialog.setReadOnlyTaskPropertiesDialog.setReadOnly^?EEETaskPropertiesDialog.getDataTaskPropertiesDialog.getDataTaskPropertiesDialog.getData JW(^SEEETaskViewer.__showContextMenuTaskViewer.__showContextMenuTaskViewer.__showContextMenuCR333TaskViewer.__resortTaskViewer.__resortTaskViewer.__resortXQAAATaskViewer.__resizeColumnsTaskViewer.__resizeColumnsTaskViewer.__resizeColumnssPSSSTaskViewer.__regenerateProjectTasksTaskViewer.__regenerateProjectTasksTaskViewer.__regenerateProjectTasks[OCCCTaskViewer.__refreshDisplayTaskViewer.__refreshDisplayTaskViewer.__refreshDisplayLN999TaskViewer.__pasteTaskTaskViewer.__pasteTaskTaskViewer.__pasteTaskFM555TaskViewer.__newTaskTaskViewer.__newTaskTaskViewer.__newTaskXLAAATaskViewer.__markCompletedTaskViewer.__markCompletedTaskViewer.__markCompletedIK777TaskViewer.__goToTaskTaskViewer.__goToTaskTaskViewer.__goToTaskgJKKKTaskViewer.__editTaskPropertiesTaskViewer.__editTaskPropertiesTaskViewer.__editTaskProperties &JNOV&-_%%%TasksHandlerTasksHandlerqTasksHandler(^++Tasks (Package)Tasks (Package)sU]???TaskViewer.setProjectOpenTaskViewer.setProjectOpenTaskViewer.setProjectOpens\SSSTaskViewer.handlePreferencesChangedTaskViewer.handlePreferencesChangedTaskViewer.handlePreferencesChangedX[AAATaskViewer.getProjectTasksTaskViewer.getProjectTasksTaskViewer.getProjectTasksUZ???TaskViewer.getGlobalTasksTaskViewer.getGlobalTasksTaskViewer.getGlobalTasksIY777TaskViewer.clearTasksTaskViewer.clearTasksTaskViewer.clearTasks^XEEETaskViewer.clearProjectTasksTaskViewer.clearProjectTasksTaskViewer.clearProjectTasksUW???TaskViewer.clearFileTasksTaskViewer.clearFileTasksTaskViewer.clearFileTasks@V111TaskViewer.addTaskTaskViewer.addTaskTaskViewer.addTaskLU999TaskViewer.addFileTaskTaskViewer.addFileTaskTaskViewer.addFileTaskdTIIITaskViewer.__taskItemActivatedTaskViewer.__taskItemActivatedTaskViewer.__taskItemActivated Nu!s.8NNk;;;TasksHandler.getVersionTasksHandler.getVersionqTasksHandler.getVersionEj555TasksHandler.endTaskTasksHandler.endTaskqTasksHandler.endTaskNi;;;TasksHandler.endSummaryTasksHandler.endSummaryqTasksHandler.endSummaryEh555TasksHandler.endNameTasksHandler.endNameqTasksHandler.endNameWgAAATasksHandler.endLinenumberTasksHandler.endLinenumberqTasksHandler.endLinenumberQf===TasksHandler.endFilenameTasksHandler.endFilenameqTasksHandler.endFilenameBe333TasksHandler.endDirTasksHandler.endDirqTasksHandler.endDirZdCCCTasksHandler.endDescriptionTasksHandler.endDescriptionqTasksHandler.endDescriptionNc;;;TasksHandler.endCreatedTasksHandler.endCreatedqTasksHandler.endCreatedQb===TasksHandler.__buildPathTasksHandler.__buildPathqTasksHandler.__buildPath3a77TasksHandler (Module)TasksHandler (Module)qR`AA7TasksHandler (Constructor)TasksHandler (Constructor)qTasksHandler.__init__ a=v)ra|uYYYTasksPage.on_tasksColourButton_clickedTasksPage.on_tasksColourButton_clickedTasksPage.on_tasksColourButton_clickedteeeTasksPage.on_tasksBugfixColourButton_clickedTasksPage.on_tasksBugfixColourButton_clickedTasksPage.on_tasksBugfixColourButton_clickeds]]]TasksPage.on_tasksBgColourButton_clickedTasksPage.on_tasksBgColourButton_clickedTasksPage.on_tasksBgColourButton_clicked.r11TasksPage (Module)TasksPage (Module)Jq;;1TasksPage (Constructor)TasksPage (Constructor)TasksPage.__init__%pTasksPageTasksPageTasksPageNo;;;TasksHandler.startTasksTasksHandler.startTasksqTasksHandler.startTasksKn999TasksHandler.startTaskTasksHandler.startTaskqTasksHandler.startTaskWmAAATasksHandler.startFilenameTasksHandler.startFilenameqTasksHandler.startFilenameflKKKTasksHandler.startDocumentTasksTasksHandler.startDocumentTasksqTasksHandler.startDocumentTasks Ye.{3HYjMMMTemplateEntry.__extractVariablesTemplateEntry.__extractVariablesTemplateEntry.__extractVariables[[[TemplateEntry.__expandFormattedVariableTemplateEntry.__expandFormattedVariableTemplateEntry.__expandFormattedVariable[~CCCTemplateEntry.__displayTextTemplateEntry.__displayTextTemplateEntry.__displayTextV}CC9TemplateEntry (Constructor)TemplateEntry (Constructor)TemplateEntry.__init__1|'''TemplateEntryTemplateEntryTemplateEntryE{555TasksWriter.writeXMLTasksWriter.writeXMLrTasksWriter.writeXML1z55TasksWriter (Module)TasksWriter (Module)rOy??5TasksWriter (Constructor)TasksWriter (Constructor)rTasksWriter.__init__*x###TasksWriterTasksWriterrTasksWriter4w)))TasksPage.saveTasksPage.saveTasksPage.savevkkkTasksPage.on_tasksProjectBgColourButton_clickedTasksPage.on_tasksProjectBgColourButton_clickedTasksPage.on_tasksProjectBgColourButton_clicked 7;0t(7V CC9TemplateGroup (Constructor)TemplateGroup (Constructor)TemplateGroup.__init__1 '''TemplateGroupTemplateGroupTemplateGroupa GGGTemplateEntry.setTemplateTextTemplateEntry.setTemplateTextTemplateEntry.setTemplateTextI777TemplateEntry.setNameTemplateEntry.setNameTemplateEntry.setName^EEETemplateEntry.setDescriptionTemplateEntry.setDescriptionTemplateEntry.setDescriptionXAAATemplateEntry.getVariablesTemplateEntry.getVariablesTemplateEntry.getVariablesaGGGTemplateEntry.getTemplateTextTemplateEntry.getTemplateTextTemplateEntry.getTemplateTextI777TemplateEntry.getNameTemplateEntry.getNameTemplateEntry.getNameXAAATemplateEntry.getGroupNameTemplateEntry.getGroupNameTemplateEntry.getGroupNameaGGGTemplateEntry.getExpandedTextTemplateEntry.getExpandedTextTemplateEntry.getExpandedText^EEETemplateEntry.getDescriptionTemplateEntry.getDescriptionTemplateEntry.getDescription PSNLPI777TemplateGroup.setNameTemplateGroup.setNameTemplateGroup.setNameU???TemplateGroup.setLanguageTemplateGroup.setLanguageTemplateGroup.setLanguageU???TemplateGroup.removeEntryTemplateGroup.removeEntryTemplateGroup.removeEntrydIIITemplateGroup.removeAllEntriesTemplateGroup.removeAllEntriesTemplateGroup.removeAllEntriesL999TemplateGroup.hasEntryTemplateGroup.hasEntryTemplateGroup.hasEntryI777TemplateGroup.getNameTemplateGroup.getNameTemplateGroup.getNameU???TemplateGroup.getLanguageTemplateGroup.getLanguageTemplateGroup.getLanguage[CCCTemplateGroup.getEntryNamesTemplateGroup.getEntryNamesTemplateGroup.getEntryNamesL999TemplateGroup.getEntryTemplateGroup.getEntryTemplateGroup.getEntry[ CCCTemplateGroup.getAllEntriesTemplateGroup.getAllEntriesTemplateGroup.getAllEntriesL 999TemplateGroup.addEntryTemplateGroup.addEntryTemplateGroup.addEntry HjMMMTemplatePropertiesDialog.getDataTemplatePropertiesDialog.getDataTemplatePropertiesDialog.getDataLOOTemplatePropertiesDialog (Module)TemplatePropertiesDialog (Module)wYYOTemplatePropertiesDialog (Constructor)TemplatePropertiesDialog (Constructor)TemplatePropertiesDialog.__init__R===TemplatePropertiesDialogTemplatePropertiesDialogTemplatePropertiesDialogeeeTemplateMultipleVariablesDialog.getVariablesTemplateMultipleVariablesDialog.getVariablesTemplateMultipleVariablesDialog.getVariablesZ]]TemplateMultipleVariablesDialog (Module)TemplateMultipleVariablesDialog (Module) gg]TemplateMultipleVariablesDialog (Constructor)TemplateMultipleVariablesDialog (Constructor)TemplateMultipleVariablesDialog.__init__gKKKTemplateMultipleVariablesDialogTemplateMultipleVariablesDialogTemplateMultipleVariablesDialog d`x!d4&)))TemplateViewerTemplateViewerTemplateViewer%]]]TemplateSingleVariableDialog.getVariableTemplateSingleVariableDialog.getVariableTemplateSingleVariableDialog.getVariableT$WWTemplateSingleVariableDialog (Module)TemplateSingleVariableDialog (Module)#aaWTemplateSingleVariableDialog (Constructor)TemplateSingleVariableDialog (Constructor)TemplateSingleVariableDialog.__init__^"EEETemplateSingleVariableDialogTemplateSingleVariableDialogTemplateSingleVariableDialog!___TemplatePropertiesDialog.setSelectedGroupTemplatePropertiesDialog.setSelectedGroupTemplatePropertiesDialog.setSelectedGroup iiiTemplatePropertiesDialog.on_helpButton_clickedTemplatePropertiesDialog.on_helpButton_clickedTemplatePropertiesDialog.on_helpButton_clicked|YYYTemplatePropertiesDialog.keyPressEventTemplatePropertiesDialog.keyPressEventTemplatePropertiesDialog.keyPressEvent Wi^MWO1;;;TemplateViewer.__resortTemplateViewer.__resortTemplateViewer.__resortO0;;;TemplateViewer.__removeTemplateViewer.__removeTemplateViewer.__removeO/;;;TemplateViewer.__importTemplateViewer.__importTemplateViewer.__importp.QQQTemplateViewer.__getPredefinedVarsTemplateViewer.__getPredefinedVarsTemplateViewer.__getPredefinedVarsO-;;;TemplateViewer.__exportTemplateViewer.__exportTemplateViewer.__exportI,777TemplateViewer.__editTemplateViewer.__editTemplateViewer.__editX+AAATemplateViewer.__configureTemplateViewer.__configureTemplateViewer.__configureU*???TemplateViewer.__addGroupTemplateViewer.__addGroupTemplateViewer.__addGroupU)???TemplateViewer.__addEntryTemplateViewer.__addEntryTemplateViewer.__addEntry8(;;TemplateViewer (Module)TemplateViewer (Module)Y'EE;TemplateViewer (Constructor)TemplateViewer (Constructor)TemplateViewer.__init__ EGp\EX;AAATemplateViewer.changeGroupTemplateViewer.changeGroupTemplateViewer.changeGroupX:AAATemplateViewer.changeEntryTemplateViewer.changeEntryTemplateViewer.changeEntry^9EEETemplateViewer.applyTemplateTemplateViewer.applyTemplateTemplateViewer.applyTemplatem8OOOTemplateViewer.applyNamedTemplateTemplateViewer.applyNamedTemplateTemplateViewer.applyNamedTemplateO7;;;TemplateViewer.addGroupTemplateViewer.addGroupTemplateViewer.addGroupO6;;;TemplateViewer.addEntryTemplateViewer.addEntryTemplateViewer.addEntry|5YYYTemplateViewer.__templateItemActivatedTemplateViewer.__templateItemActivatedTemplateViewer.__templateItemActivatedU4???TemplateViewer.__showHelpTemplateViewer.__showHelpTemplateViewer.__showHelpj3MMMTemplateViewer.__showContextMenuTemplateViewer.__showContextMenuTemplateViewer.__showContextMenuI2777TemplateViewer.__saveTemplateViewer.__saveTemplateViewer.__save @A*n|@9F---TemplatesHandlerTemplatesHandlersTemplatesHandler0E33Templates (Package)Templates (Package)taDGGGTemplateViewer.writeTemplatesTemplateViewer.writeTemplatesTemplateViewer.writeTemplatesXCAAATemplateViewer.removeGroupTemplateViewer.removeGroupTemplateViewer.removeGroupXBAAATemplateViewer.removeEntryTemplateViewer.removeEntryTemplateViewer.removeEntry^AEEETemplateViewer.readTemplatesTemplateViewer.readTemplatesTemplateViewer.readTemplatesX@AAATemplateViewer.hasTemplateTemplateViewer.hasTemplateTemplateViewer.hasTemplateO?;;;TemplateViewer.hasGroupTemplateViewer.hasGroupTemplateViewer.hasGroupg>KKKTemplateViewer.getTemplateNamesTemplateViewer.getTemplateNamesTemplateViewer.getTemplateNames^=EEETemplateViewer.getGroupNamesTemplateViewer.getGroupNamesTemplateViewer.getGroupNames[<CCCTemplateViewer.getAllGroupsTemplateViewer.getAllGroupsTemplateViewer.getAllGroups [a6[rOSSSTemplatesHandler.startTemplateGroupTemplatesHandler.startTemplateGroupsTemplatesHandler.startTemplateGroupcNIIITemplatesHandler.startTemplateTemplatesHandler.startTemplatesTemplatesHandler.startTemplate~M[[[TemplatesHandler.startDocumentTemplatesTemplatesHandler.startDocumentTemplatessTemplatesHandler.startDocumentTemplatesZLCCCTemplatesHandler.getVersionTemplatesHandler.getVersionsTemplatesHandler.getVersioniKMMMTemplatesHandler.endTemplateTextTemplatesHandler.endTemplateTextsTemplatesHandler.endTemplateText~J[[[TemplatesHandler.endTemplateDescriptionTemplatesHandler.endTemplateDescriptionsTemplatesHandler.endTemplateDescription]IEEETemplatesHandler.endTemplateTemplatesHandler.endTemplatesTemplatesHandler.endTemplate;H??TemplatesHandler (Module)TemplatesHandler (Module)s^GII?TemplatesHandler (Constructor)TemplatesHandler (Constructor)sTemplatesHandler.__init__ ,S |Ci-~,O];;;ToolConfigurationDialogToolConfigurationDialogToolConfigurationDialog=\33)Token (Constructor)Token (Constructor)Token.__init__[TokenTokenTokenQZ===TemplatesWriter.writeXMLTemplatesWriter.writeXMLtTemplatesWriter.writeXML9Y==TemplatesWriter (Module)TemplatesWriter (Module)t[XGG=TemplatesWriter (Constructor)TemplatesWriter (Constructor)tTemplatesWriter.__init__6W+++TemplatesWriterTemplatesWritertTemplatesWriter@V111TemplatesPage.saveTemplatesPage.saveTemplatesPage.save6U99TemplatesPage (Module)TemplatesPage (Module)VTCC9TemplatesPage (Constructor)TemplatesPage (Constructor)TemplatesPage.__init__1S'''TemplatesPageTemplatesPageTemplatesPageGRKKTemplatesListsStyleCSS (Module)TemplatesListsStyleCSS (Module)KAQEETemplatesListsStyle (Module)TemplatesListsStyle (Module)JfPKKKTemplatesHandler.startTemplatesTemplatesHandler.startTemplatessTemplatesHandler.startTemplates <SQdeeeToolConfigurationDialog.on_addButton_clickedToolConfigurationDialog.on_addButton_clickedToolConfigurationDialog.on_addButton_clickedscSSSToolConfigurationDialog.getToollistToolConfigurationDialog.getToollistToolConfigurationDialog.getToollistbaaaToolConfigurationDialog.__toolEntryChangedToolConfigurationDialog.__toolEntryChangedToolConfigurationDialog.__toolEntryChangeddaIIIToolConfigurationDialog.__swapToolConfigurationDialog.__swapToolConfigurationDialog.__swap`[[[ToolConfigurationDialog.__findModeIndexToolConfigurationDialog.__findModeIndexToolConfigurationDialog.__findModeIndexJ_MMToolConfigurationDialog (Module)ToolConfigurationDialog (Module)t^WWMToolConfigurationDialog (Constructor)ToolConfigurationDialog (Constructor)ToolConfigurationDialog.__init__ 7V 7)jwwwToolConfigurationDialog.on_executableEdit_textChangedToolConfigurationDialog.on_executableEdit_textChangedToolConfigurationDialog.on_executableEdit_textChanged#isssToolConfigurationDialog.on_executableButton_clickedToolConfigurationDialog.on_executableButton_clickedToolConfigurationDialog.on_executableButton_clickedhgggToolConfigurationDialog.on_downButton_clickedToolConfigurationDialog.on_downButton_clickedToolConfigurationDialog.on_downButton_clickedgkkkToolConfigurationDialog.on_deleteButton_clickedToolConfigurationDialog.on_deleteButton_clickedToolConfigurationDialog.on_deleteButton_clickedfkkkToolConfigurationDialog.on_changeButton_clickedToolConfigurationDialog.on_changeButton_clickedToolConfigurationDialog.on_changeButton_clicked&euuuToolConfigurationDialog.on_argumentsEdit_textChangedToolConfigurationDialog.on_argumentsEdit_textChangedToolConfigurationDialog.on_argumentsEdit_textChanged :k5: pqqqToolConfigurationDialog.on_separatorButton_clickedToolConfigurationDialog.on_separatorButton_clickedToolConfigurationDialog.on_separatorButton_clickedAo ToolConfigurationDialog.on_redirectCombo_currentIndexChangedToolConfigurationDialog.on_redirectCombo_currentIndexChangedToolConfigurationDialog.on_redirectCombo_currentIndexChangedneeeToolConfigurationDialog.on_newButton_clickedToolConfigurationDialog.on_newButton_clickedToolConfigurationDialog.on_newButton_clickedmkkkToolConfigurationDialog.on_menuEdit_textChangedToolConfigurationDialog.on_menuEdit_textChangedToolConfigurationDialog.on_menuEdit_textChangedlkkkToolConfigurationDialog.on_iconEdit_textChangedToolConfigurationDialog.on_iconEdit_textChangedToolConfigurationDialog.on_iconEdit_textChangedkgggToolConfigurationDialog.on_iconButton_clickedToolConfigurationDialog.on_iconButton_clickedToolConfigurationDialog.on_iconButton_clicked P` waaaToolGroupConfigurationDialog.getToolGroupsToolGroupConfigurationDialog.getToolGroupsToolGroupConfigurationDialog.getToolGroupssvSSSToolGroupConfigurationDialog.__swapToolGroupConfigurationDialog.__swapToolGroupConfigurationDialog.__swapTuWWToolGroupConfigurationDialog (Module)ToolGroupConfigurationDialog (Module)taaWToolGroupConfigurationDialog (Constructor)ToolGroupConfigurationDialog (Constructor)ToolGroupConfigurationDialog.__init__^sEEEToolGroupConfigurationDialogToolGroupConfigurationDialogToolGroupConfigurationDialog rcccToolConfigurationDialog.on_upButton_clickedToolConfigurationDialog.on_upButton_clickedToolConfigurationDialog.on_upButton_clicked,qyyyToolConfigurationDialog.on_toolsList_currentRowChangedToolConfigurationDialog.on_toolsList_currentRowChangedToolConfigurationDialog.on_toolsList_currentRowChanged _ gA| ToolGroupConfigurationDialog.on_groupsList_currentRowChangedToolGroupConfigurationDialog.on_groupsList_currentRowChangedToolGroupConfigurationDialog.on_groupsList_currentRowChanged {qqqToolGroupConfigurationDialog.on_downButton_clickedToolGroupConfigurationDialog.on_downButton_clickedToolGroupConfigurationDialog.on_downButton_clicked&zuuuToolGroupConfigurationDialog.on_deleteButton_clickedToolGroupConfigurationDialog.on_deleteButton_clickedToolGroupConfigurationDialog.on_deleteButton_clicked&yuuuToolGroupConfigurationDialog.on_changeButton_clickedToolGroupConfigurationDialog.on_changeButton_clickedToolGroupConfigurationDialog.on_changeButton_clickedxoooToolGroupConfigurationDialog.on_addButton_clickedToolGroupConfigurationDialog.on_addButton_clickedToolGroupConfigurationDialog.on_addButton_clicked __h3_|YYYTranslationPropertiesDialog.initDialogTranslationPropertiesDialog.initDialogTranslationPropertiesDialog.initDialogRUUTranslationPropertiesDialog (Module)TranslationPropertiesDialog (Module)__UTranslationPropertiesDialog (Constructor)TranslationPropertiesDialog (Constructor)TranslationPropertiesDialog.__init__[CCCTranslationPropertiesDialogTranslationPropertiesDialogTranslationPropertiesDialogP??5Translation (Constructor)Translation (Constructor)Translation.__init__+###TranslationTranslationTranslation(++Tools (Package)Tools (Package)u~mmmToolGroupConfigurationDialog.on_upButton_clickedToolGroupConfigurationDialog.on_upButton_clickedToolGroupConfigurationDialog.on_upButton_clicked}oooToolGroupConfigurationDialog.on_newButton_clickedToolGroupConfigurationDialog.on_newButton_clickedToolGroupConfigurationDialog.on_newButton_clicked ~P/ {{{TranslationPropertiesDialog.on_exceptFileButton_clickedTranslationPropertiesDialog.on_exceptFileButton_clickedTranslationPropertiesDialog.on_exceptFileButton_clicked, yyyTranslationPropertiesDialog.on_exceptDirButton_clickedTranslationPropertiesDialog.on_exceptDirButton_clickedTranslationPropertiesDialog.on_exceptDirButton_clickedA TranslationPropertiesDialog.on_deleteExceptionButton_clickedTranslationPropertiesDialog.on_deleteExceptionButton_clickedTranslationPropertiesDialog.on_deleteExceptionButton_clicked5TranslationPropertiesDialog.on_addExceptionButton_clickedTranslationPropertiesDialog.on_addExceptionButton_clickedTranslationPropertiesDialog.on_addExceptionButton_clicked[[[TranslationPropertiesDialog.initFiltersTranslationPropertiesDialog.initFiltersTranslationPropertiesDialog.initFilters HJ| H> TranslationPropertiesDialog.on_transPatternEdit_textChangedTranslationPropertiesDialog.on_transPatternEdit_textChangedTranslationPropertiesDialog.on_transPatternEdit_textChanged5TranslationPropertiesDialog.on_transPatternButton_clickedTranslationPropertiesDialog.on_transPatternButton_clickedTranslationPropertiesDialog.on_transPatternButton_clicked5 TranslationPropertiesDialog.on_transBinPathButton_clickedTranslationPropertiesDialog.on_transBinPathButton_clickedTranslationPropertiesDialog.on_transBinPathButton_clickedJ  TranslationPropertiesDialog.on_exceptionsList_currentRowChangedTranslationPropertiesDialog.on_exceptionsList_currentRowChangedTranslationPropertiesDialog.on_exceptionsList_currentRowChanged2 }}}TranslationPropertiesDialog.on_exceptionEdit_textChangedTranslationPropertiesDialog.on_exceptionEdit_textChangedTranslationPropertiesDialog.on_exceptionEdit_textChanged YG,dYF555TranslationsDict.addTranslationsDict.addTranslationsDict.addaGGGTranslationsDict.__uniqueNameTranslationsDict.__uniqueNameTranslationsDict.__uniqueName[CCCTranslationsDict.__haveNameTranslationsDict.__haveNameTranslationsDict.__haveNamegKKKTranslationsDict.__haveFileNameTranslationsDict.__haveFileNameTranslationsDict.__haveFileName[CCCTranslationsDict.__findNameTranslationsDict.__findNameTranslationsDict.__findNamegKKKTranslationsDict.__findFileNameTranslationsDict.__findFileNameTranslationsDict.__findFileNameL999TranslationsDict.__delTranslationsDict.__delTranslationsDict.__del_II?TranslationsDict (Constructor)TranslationsDict (Constructor)TranslationsDict.__init__:---TranslationsDictTranslationsDictTranslationsDictyWWWTranslationPropertiesDialog.storeDataTranslationPropertiesDialog.storeDataTranslationPropertiesDialog.storeData c,cCcy$WWWTrayStarter.__loadRecentMultiProjectsTrayStarter.__loadRecentMultiProjectsTrayStarter.__loadRecentMultiProjectsa#GGGTrayStarter.__loadRecentFilesTrayStarter.__loadRecentFilesTrayStarter.__loadRecentFilesO";;;TrayStarter.__activatedTrayStarter.__activatedTrayStarter.__activatedC!333TrayStarter.__aboutTrayStarter.__aboutTrayStarter.__about2 55TrayStarter (Module)TrayStarter (Module)P??5TrayStarter (Constructor)TrayStarter (Constructor)TrayStarter.__init__+###TrayStarterTrayStarterTrayStarterF555TranslationsDict.setTranslationsDict.setTranslationsDict.setO;;;TranslationsDict.reloadTranslationsDict.reloadTranslationsDict.reloaddIIITranslationsDict.loadTransFileTranslationsDict.loadTransFileTranslationsDict.loadTransFilejMMMTranslationsDict.hasTranslationsTranslationsDict.hasTranslationsTranslationsDict.hasTranslations W>v}WO-;;;TrayStarter.__startDiffTrayStarter.__startDiffTrayStarter.__startDiffX,AAATrayStarter.__startCompareTrayStarter.__startCompareTrayStarter.__startComparev+UUUTrayStarter.__showRecentProjectsMenuTrayStarter.__showRecentProjectsMenuTrayStarter.__showRecentProjectsMenu*___TrayStarter.__showRecentMultiProjectsMenuTrayStarter.__showRecentMultiProjectsMenuTrayStarter.__showRecentMultiProjectsMenum)OOOTrayStarter.__showRecentFilesMenuTrayStarter.__showRecentFilesMenuTrayStarter.__showRecentFilesMenua(GGGTrayStarter.__showPreferencesTrayStarter.__showPreferencesTrayStarter.__showPreferencesa'GGGTrayStarter.__showContextMenuTrayStarter.__showContextMenuTrayStarter.__showContextMenuR&===TrayStarter.__openRecentTrayStarter.__openRecentTrayStarter.__openRecentj%MMMTrayStarter.__loadRecentProjectsTrayStarter.__loadRecentProjectsTrayStarter.__loadRecentProjects !J,s!O7;;;TrayStarter.__startPyReTrayStarter.__startPyReTrayStarter.__startPyReO6;;;TrayStarter.__startProcTrayStarter.__startProcTrayStarter.__startProcd5IIITrayStarter.__startPreferencesTrayStarter.__startPreferencesTrayStarter.__startPreferencesp4QQQTrayStarter.__startPluginUninstallTrayStarter.__startPluginUninstallTrayStarter.__startPluginUninstalls3SSSTrayStarter.__startPluginRepositoryTrayStarter.__startPluginRepositoryTrayStarter.__startPluginRepositoryj2MMMTrayStarter.__startPluginInstallTrayStarter.__startPluginInstallTrayStarter.__startPluginInstalla1GGGTrayStarter.__startMiniEditorTrayStarter.__startMiniEditorTrayStarter.__startMiniEditora0GGGTrayStarter.__startIconEditorTrayStarter.__startIconEditorTrayStarter.__startIconEditora/GGGTrayStarter.__startHelpViewerTrayStarter.__startHelpViewerTrayStarter.__startHelpViewerO.;;;TrayStarter.__startEricTrayStarter.__startEricTrayStarter.__startEric )AstN)"C%%UI (Package)UI (Package)v>BAATypingCompleters (Package)TypingCompleters (Package)pFA555TrayStarterPage.saveTrayStarterPage.saveTrayStarterPage.save:@==TrayStarterPage (Module)TrayStarterPage (Module)\?GG=TrayStarterPage (Constructor)TrayStarterPage (Constructor)TrayStarterPage.__init__7>+++TrayStarterPageTrayStarterPageTrayStarterPaged=IIITrayStarter.preferencesChangedTrayStarter.preferencesChangedTrayStarter.preferencesChanged[<CCCTrayStarter.__startUnittestTrayStarter.__startUnittestTrayStarter.__startUnittestd;IIITrayStarter.__startUIPreviewerTrayStarter.__startUIPreviewerTrayStarter.__startUIPreviewerd:IIITrayStarter.__startTRPreviewerTrayStarter.__startTRPreviewerTrayStarter.__startTRPreviewera9GGGTrayStarter.__startSqlBrowserTrayStarter.__startSqlBrowserTrayStarter.__startSqlBrowserX8AAATrayStarter.__startQRegExpTrayStarter.__startQRegExpTrayStarter.__startQRegExp #JEwr#LO999UIPreviewer.__loadFileUIPreviewer.__loadFileUIPreviewer.__loadFileXNAAAUIPreviewer.__initToolbarsUIPreviewer.__initToolbarsUIPreviewer.__initToolbarsOM;;;UIPreviewer.__initMenusUIPreviewer.__initMenusUIPreviewer.__initMenusUL???UIPreviewer.__initActionsUIPreviewer.__initActionsUIPreviewer.__initActionsdKIIIUIPreviewer.__handleCloseEventUIPreviewer.__handleCloseEventUIPreviewer.__handleCloseEventdJIIIUIPreviewer.__guiStyleSelectedUIPreviewer.__guiStyleSelectedUIPreviewer.__guiStyleSelectedpIQQQUIPreviewer.__copyImageToClipboardUIPreviewer.__copyImageToClipboardUIPreviewer.__copyImageToClipboardIH777UIPreviewer.__aboutQtUIPreviewer.__aboutQtUIPreviewer.__aboutQtCG333UIPreviewer.__aboutUIPreviewer.__aboutUIPreviewer.__about2F55UIPreviewer (Module)UIPreviewer (Module)PE??5UIPreviewer (Constructor)UIPreviewer (Constructor)UIPreviewer.__init__+D###UIPreviewerUIPreviewerUIPreviewer !kZI!\[GG=UMLClassDiagram (Constructor)UMLClassDiagram (Constructor)UMLClassDiagram.__init__7Z+++UMLClassDiagramUMLClassDiagramUMLClassDiagram:Y---UIPreviewer.showUIPreviewer.showUIPreviewer.showOX;;;UIPreviewer.eventFilterUIPreviewer.eventFilterUIPreviewer.eventFilterOW;;;UIPreviewer.__whatsThisUIPreviewer.__whatsThisUIPreviewer.__whatsThis^VEEEUIPreviewer.__updateChildrenUIPreviewer.__updateChildrenUIPreviewer.__updateChildren[UCCCUIPreviewer.__updateActionsUIPreviewer.__updateActionsUIPreviewer.__updateActionsOT;;;UIPreviewer.__saveImageUIPreviewer.__saveImageUIPreviewer.__saveImagegSKKKUIPreviewer.__printPreviewImageUIPreviewer.__printPreviewImageUIPreviewer.__printPreviewImageRR===UIPreviewer.__printImageUIPreviewer.__printImageUIPreviewer.__printImageCQ333UIPreviewer.__printUIPreviewer.__printUIPreviewer.__printLP999UIPreviewer.__openFileUIPreviewer.__openFileUIPreviewer.__openFile cPy)c%eUMLDialogUMLDialogUMLDialogFd555UMLClassDiagram.showUMLClassDiagram.showUMLClassDiagram.showRc===UMLClassDiagram.relayoutUMLClassDiagram.relayoutUMLClassDiagram.relayoutmbOOOUMLClassDiagram.__getCurrentShapeUMLClassDiagram.__getCurrentShapeUMLClassDiagram.__getCurrentShapevaUUUUMLClassDiagram.__createAssociationsUMLClassDiagram.__createAssociationsUMLClassDiagram.__createAssociationsd`IIIUMLClassDiagram.__buildClassesUMLClassDiagram.__buildClassesUMLClassDiagram.__buildClassesj_MMMUMLClassDiagram.__arrangeClassesUMLClassDiagram.__arrangeClassesUMLClassDiagram.__arrangeClassesg^KKKUMLClassDiagram.__addLocalClassUMLClassDiagram.__addLocalClassUMLClassDiagram.__addLocalClassp]QQQUMLClassDiagram.__addExternalClassUMLClassDiagram.__addExternalClassUMLClassDiagram.__addExternalClass:\==UMLClassDiagram (Module)UMLClassDiagram (Module) ZHHwZ[pCCCUMLGraphicsView.__incHeightUMLGraphicsView.__incHeightUMLGraphicsView.__incHeightaoGGGUMLGraphicsView.__deleteShapeUMLGraphicsView.__deleteShapeUMLGraphicsView.__deleteShapeXnAAAUMLGraphicsView.__decWidthUMLGraphicsView.__decWidthUMLGraphicsView.__decWidth[mCCCUMLGraphicsView.__decHeightUMLGraphicsView.__decHeightUMLGraphicsView.__decHeightplQQQUMLGraphicsView.__checkSizeActionsUMLGraphicsView.__checkSizeActionsUMLGraphicsView.__checkSizeActionsakGGGUMLGraphicsView.__alignShapesUMLGraphicsView.__alignShapesUMLGraphicsView.__alignShapes:j==UMLGraphicsView (Module)UMLGraphicsView (Module)\iGG=UMLGraphicsView (Constructor)UMLGraphicsView (Constructor)UMLGraphicsView.__init__7h+++UMLGraphicsViewUMLGraphicsViewUMLGraphicsView.g11UMLDialog (Module)UMLDialog (Module)Jf;;1UMLDialog (Constructor)UMLDialog (Constructor)UMLDialog.__init__ 3A^>3azGGGUMLGraphicsView.filteredItemsUMLGraphicsView.filteredItemsUMLGraphicsView.filteredItemsLy999UMLGraphicsView.__zoomUMLGraphicsView.__zoomUMLGraphicsView.__zoomUx???UMLGraphicsView.__setSizeUMLGraphicsView.__setSizeUMLGraphicsView.__setSizedwIIIUMLGraphicsView.__sceneChangedUMLGraphicsView.__sceneChangedUMLGraphicsView.__sceneChanged[vCCCUMLGraphicsView.__saveImageUMLGraphicsView.__saveImageUMLGraphicsView.__saveImageXuAAAUMLGraphicsView.__relayoutUMLGraphicsView.__relayoutUMLGraphicsView.__relayoutytWWWUMLGraphicsView.__printPreviewDiagramUMLGraphicsView.__printPreviewDiagramUMLGraphicsView.__printPreviewDiagramdsIIIUMLGraphicsView.__printDiagramUMLGraphicsView.__printDiagramUMLGraphicsView.__printDiagramarGGGUMLGraphicsView.__initActionsUMLGraphicsView.__initActionsUMLGraphicsView.__initActionsXqAAAUMLGraphicsView.__incWidthUMLGraphicsView.__incWidthUMLGraphicsView.__incWidth <G`B<U???UMLItem.removeAssociationUMLItem.removeAssociationUMLItem.removeAssociation1'''UMLItem.paintUMLItem.paintUMLItem.paint4)))UMLItem.moveByUMLItem.moveByUMLItem.moveBy@111UMLItem.itemChangeUMLItem.itemChangeUMLItem.itemChangeXAAAUMLItem.adjustAssociationsUMLItem.adjustAssociationsUMLItem.adjustAssociationsL999UMLItem.addAssociationUMLItem.addAssociationUMLItem.addAssociation*--UMLItem (Module)UMLItem (Module)D77-UMLItem (Constructor)UMLItem (Constructor)UMLItem.__init__UMLItemUMLItemUMLItemd~IIIUMLGraphicsView.setDiagramNameUMLGraphicsView.setDiagramNameUMLGraphicsView.setDiagramName[}CCCUMLGraphicsView.selectItemsUMLGraphicsView.selectItemsUMLGraphicsView.selectItemsX|AAAUMLGraphicsView.selectItemUMLGraphicsView.selectItemUMLGraphicsView.selectItem[{CCCUMLGraphicsView.initToolBarUMLGraphicsView.initToolBarUMLGraphicsView.initToolBar On4FXOmOOOUnittestDialog.__setProgressColorUnittestDialog.__setProgressColorUnittestDialog.__setProgressColor[CCCUnittestDialog.__UTPreparedUnittestDialog.__UTPreparedUnittestDialog.__UTPrepared8;;UnittestDialog (Module)UnittestDialog (Module)YEE;UnittestDialog (Constructor)UnittestDialog (Constructor)UnittestDialog.__init__4)))UnittestDialogUnittestDialogUnittestDialogXAAAUMLSceneSizeDialog.getDataUMLSceneSizeDialog.getDataUMLSceneSizeDialog.getData@ CCUMLSceneSizeDialog (Module)UMLSceneSizeDialog (Module)e MMCUMLSceneSizeDialog (Constructor)UMLSceneSizeDialog (Constructor)UMLSceneSizeDialog.__init__@ 111UMLSceneSizeDialogUMLSceneSizeDialogUMLSceneSizeDialog7 +++UMLItem.setSizeUMLItem.setSizeUMLItem.setSize4 )))UMLItem.setPosUMLItem.setPosUMLItem.setPosXAAAUMLItem.removeAssociationsUMLItem.removeAssociationsUMLItem.removeAssociations ,v;)wwwUnittestDialog.on_errorsListWidget_currentTextChangedUnittestDialog.on_errorsListWidget_currentTextChangedUnittestDialog.on_errorsListWidget_currentTextChangedsSSSUnittestDialog.on_buttonBox_clickedUnittestDialog.on_buttonBox_clickedUnittestDialog.on_buttonBox_clicked^EEEUnittestDialog.keyPressEventUnittestDialog.keyPressEventUnittestDialog.keyPressEventaGGGUnittestDialog.insertTestNameUnittestDialog.insertTestNameUnittestDialog.insertTestNameU???UnittestDialog.insertProgUnittestDialog.insertProgUnittestDialog.insertProg[CCCUnittestDialog.__showSourceUnittestDialog.__showSourceUnittestDialog.__showSourcegKKKUnittestDialog.__setStoppedModeUnittestDialog.__setStoppedModeUnittestDialog.__setStoppedModegKKKUnittestDialog.__setRunningModeUnittestDialog.__setRunningModeUnittestDialog.__setRunningMode VN.{[#CCCUnittestDialog.testFinishedUnittestDialog.testFinishedUnittestDialog.testFinishedU"???UnittestDialog.testFailedUnittestDialog.testFailedUnittestDialog.testFailedX!AAAUnittestDialog.testErroredUnittestDialog.testErroredUnittestDialog.testErrored# sssUnittestDialog.on_testsuiteComboBox_editTextChangedUnittestDialog.on_testsuiteComboBox_editTextChangedUnittestDialog.on_testsuiteComboBox_editTextChangedvUUUUnittestDialog.on_stopButton_clickedUnittestDialog.on_stopButton_clickedUnittestDialog.on_stopButton_clickedyWWWUnittestDialog.on_startButton_clickedUnittestDialog.on_startButton_clickedUnittestDialog.on_startButton_clickedaaaUnittestDialog.on_fileDialogButton_clickedUnittestDialog.on_fileDialogButton_clickedUnittestDialog.on_fileDialogButton_clicked&uuuUnittestDialog.on_errorsListWidget_itemDoubleClickedUnittestDialog.on_errorsListWidget_itemDoubleClickedUnittestDialog.on_errorsListWidget_itemDoubleClicked an*)ag.KKKUserInterface.__activateBrowserUserInterface.__activateBrowserUserInterface.__activateBrowser[-CCCUserInterface.__UIPreviewerUserInterface.__UIPreviewerUserInterface.__UIPreviewer[,CCCUserInterface.__TRPreviewerUserInterface.__TRPreviewerUserInterface.__TRPreviewerg+KKKUserInterface.__TBMenuTriggeredUserInterface.__TBMenuTriggeredUserInterface.__TBMenuTriggered6*99UserInterface (Module)UserInterface (Module)V)CC9UserInterface (Constructor)UserInterface (Constructor)UserInterface.__init__1('''UserInterfaceUserInterfaceUserInterfaceX'AAAUnittestWindow.eventFilterUnittestWindow.eventFilterUnittestWindow.eventFilterY&EE;UnittestWindow (Constructor)UnittestWindow (Constructor)UnittestWindow.__init__4%)))UnittestWindowUnittestWindowUnittestWindowX$AAAUnittestDialog.testStartedUnittestDialog.testStartedUnittestDialog.testStarted @ 5@s6SSSUserInterface.__activateViewProfileUserInterface.__activateViewProfileUserInterface.__activateViewProfile|5YYYUserInterface.__activateTemplateViewerUserInterface.__activateTemplateViewerUserInterface.__activateTemplateViewerp4QQQUserInterface.__activateTaskViewerUserInterface.__activateTaskViewerUserInterface.__activateTaskViewera3GGGUserInterface.__activateShellUserInterface.__activateShellUserInterface.__activateShell|2YYYUserInterface.__activateProjectBrowserUserInterface.__activateProjectBrowserUserInterface.__activateProjectBrowser 1cccUserInterface.__activateMultiProjectBrowserUserInterface.__activateMultiProjectBrowserUserInterface.__activateMultiProjectBrowserm0OOOUserInterface.__activateLogViewerUserInterface.__activateLogViewerUserInterface.__activateLogViewers/SSSUserInterface.__activateDebugViewerUserInterface.__activateDebugViewerUserInterface.__activateDebugViewer 2vSd?IIIUserInterface.__configToolBarsUserInterface.__configToolBarsUserInterface.__configToolBarsg>KKKUserInterface.__configShortcutsUserInterface.__configShortcutsUserInterface.__configShortcutsg=KKKUserInterface.__compareFilesSbsUserInterface.__compareFilesSbsUserInterface.__compareFilesSbs^<EEEUserInterface.__compareFilesUserInterface.__compareFilesUserInterface.__compareFilesU;???UserInterface.__chmViewerUserInterface.__chmViewerUserInterface.__chmViewer^:EEEUserInterface.__checkActionsUserInterface.__checkActionsUserInterface.__checkActionsX9AAAUserInterface.__assistant4UserInterface.__assistant4UserInterface.__assistant4U8???UserInterface.__assistantUserInterface.__assistantUserInterface.__assistants7SSSUserInterface.__activateViewmanagerUserInterface.__activateViewmanagerUserInterface.__activateViewmanager ' }'yGWWWUserInterface.__createToolboxesLayoutUserInterface.__createToolboxesLayoutUserInterface.__createToolboxesLayoutvFUUUUserInterface.__createSidebarsLayoutUserInterface.__createSidebarsLayoutUserInterface.__createSidebarsLayout^EEEEUserInterface.__createLayoutUserInterface.__createLayoutUserInterface.__createLayout DcccUserInterface.__createFloatingWindowsLayoutUserInterface.__createFloatingWindowsLayoutUserInterface.__createFloatingWindowsLayoutC[[[UserInterface.__createDockWindowsLayoutUserInterface.__createDockWindowsLayoutUserInterface.__createDockWindowsLayoutjBMMMUserInterface.__createDockWindowUserInterface.__createDockWindowUserInterface.__createDockWindowAeeeUserInterface.__configureDockareaCornerUsageUserInterface.__configureDockareaCornerUsageUserInterface.__configureDockareaCornerUsagep@QQQUserInterface.__configViewProfilesUserInterface.__configViewProfilesUserInterface.__configViewProfiles 2s_gPKKKUserInterface.__exportShortcutsUserInterface.__exportShortcutsUserInterface.__exportShortcutsmOOOOUserInterface.__exportPreferencesUserInterface.__exportPreferencesUserInterface.__exportPreferences^NEEEUserInterface.__editorOpenedUserInterface.__editorOpenedUserInterface.__editorOpenedXMAAAUserInterface.__editPixmapUserInterface.__editPixmapUserInterface.__editPixmapUL???UserInterface.__designer4UserInterface.__designer4UserInterface.__designer4RK===UserInterface.__designerUserInterface.__designerUserInterface.__designergJKKKUserInterface.__deinstallPluginUserInterface.__deinstallPluginUserInterface.__deinstallPluginjIMMMUserInterface.__debuggingStartedUserInterface.__debuggingStartedUserInterface.__debuggingStarted^HEEEUserInterface.__customViewerUserInterface.__customViewerUserInterface.__customViewer $/d$Y]]]UserInterface.__initExternalToolsActionsUserInterface.__initExternalToolsActionsUserInterface.__initExternalToolsActionsmXOOOUserInterface.__initEricDocActionUserInterface.__initEricDocActionUserInterface.__initEricDocActionW[[[UserInterface.__initDebugToolbarsLayoutUserInterface.__initDebugToolbarsLayoutUserInterface.__initDebugToolbarsLayout[VCCCUserInterface.__initActionsUserInterface.__initActionsUserInterface.__initActionsgUKKKUserInterface.__importShortcutsUserInterface.__importShortcutsUserInterface.__importShortcutsmTOOOUserInterface.__importPreferencesUserInterface.__importPreferencesUserInterface.__importPreferencesXSAAAUserInterface.__helpViewerUserInterface.__helpViewerUserInterface.__helpViewerXRAAAUserInterface.__helpClosedUserInterface.__helpClosedUserInterface.__helpClosedsQSSSUserInterface.__getFloatingGeometryUserInterface.__getFloatingGeometryUserInterface.__getFloatingGeometry C8IxCjbMMMUserInterface.__lastEditorClosedUserInterface.__lastEditorClosedUserInterface.__lastEditorCloseddaIIIUserInterface.__installPluginsUserInterface.__installPluginsUserInterface.__installPlugins^`EEEUserInterface.__initToolbarsUserInterface.__initToolbarsUserInterface.__initToolbarsa_GGGUserInterface.__initStatusbarUserInterface.__initStatusbarUserInterface.__initStatusbarj^MMMUserInterface.__initQtDocActionsUserInterface.__initQtDocActionsUserInterface.__initQtDocActionss]SSSUserInterface.__initPythonDocActionUserInterface.__initPythonDocActionUserInterface.__initPythonDocActionv\UUUUserInterface.__initPySideDocActionsUserInterface.__initPySideDocActionsUserInterface.__initPySideDocActionsU[???UserInterface.__initMenusUserInterface.__initMenusUserInterface.__initMenusmZOOOUserInterface.__initKdeDocActionsUserInterface.__initKdeDocActionsUserInterface.__initKdeDocActions S9hmkOOOUserInterface.__processToolStderrUserInterface.__processToolStderrUserInterface.__processToolStderrpjQQQUserInterface.__preferencesChangedUserInterface.__preferencesChangedUserInterface.__preferencesChangedjiMMMUserInterface.__pluginsConfigureUserInterface.__pluginsConfigureUserInterface.__pluginsConfigureahGGGUserInterface.__openOnStartupUserInterface.__openOnStartupUserInterface.__openOnStartupdgIIIUserInterface.__openMiniEditorUserInterface.__openMiniEditorUserInterface.__openMiniEditorUf???UserInterface.__newWindowUserInterface.__newWindowUserInterface.__newWindowXeAAAUserInterface.__newProjectUserInterface.__newProjectUserInterface.__newProjectUd???UserInterface.__linguist4UserInterface.__linguist4UserInterface.__linguist4Rc===UserInterface.__linguistUserInterface.__linguistUserInterface.__linguist #,d.{#Uu???UserInterface.__reportBugUserInterface.__reportBugUserInterface.__reportBugXtAAAUserInterface.__reloadAPIsUserInterface.__reloadAPIsUserInterface.__reloadAPIsUs???UserInterface.__readTasksUserInterface.__readTasksUserInterface.__readTasks[rCCCUserInterface.__readSessionUserInterface.__readSessionUserInterface.__readSessionFq555UserInterface.__quitUserInterface.__quitUserInterface.__quit pcccUserInterface.__proxyAuthenticationRequiredUserInterface.__proxyAuthenticationRequiredUserInterface.__proxyAuthenticationRequiredaoGGGUserInterface.__projectOpenedUserInterface.__projectOpenedUserInterface.__projectOpenedanGGGUserInterface.__projectClosedUserInterface.__projectClosedUserInterface.__projectClosedamGGGUserInterface.__programChangeUserInterface.__programChangeUserInterface.__programChangemlOOOUserInterface.__processToolStdoutUserInterface.__processToolStdoutUserInterface.__processToolStdout NGa 5N[~CCCUserInterface.__showEricDocUserInterface.__showEricDocUserInterface.__showEricDoc}___UserInterface.__showAvailableVersionInfosUserInterface.__showAvailableVersionInfosUserInterface.__showAvailableVersionInfosg|KKKUserInterface.__setupDockWindowUserInterface.__setupDockWindowUserInterface.__setupDockWindowj{MMMUserInterface.__setWindowCaptionUserInterface.__setWindowCaptionUserInterface.__setWindowCaptionRz===UserInterface.__setStyleUserInterface.__setStyleUserInterface.__setStyledyIIIUserInterface.__setEditProfileUserInterface.__setEditProfileUserInterface.__setEditProfile|xYYYUserInterface.__saveCurrentViewProfileUserInterface.__saveCurrentViewProfileUserInterface.__saveCurrentViewProfileOw;;;UserInterface.__restartUserInterface.__restartUserInterface.__restartdvIIIUserInterface.__requestFeatureUserInterface.__requestFeatureUserInterface.__requestFeature v)gPv^EEEUserInterface.__showPreviousUserInterface.__showPreviousUserInterface.__showPreviousvUUUUserInterface.__showPluginsAvailableUserInterface.__showPluginsAvailableUserInterface.__showPluginsAvailabledIIIUserInterface.__showPluginInfoUserInterface.__showPluginInfoUserInterface.__showPluginInfoXAAAUserInterface.__showPixmapUserInterface.__showPixmapUserInterface.__showPixmapR===UserInterface.__showNextUserInterface.__showNextUserInterface.__showNext^EEEUserInterface.__showHelpMenuUserInterface.__showHelpMenuUserInterface.__showHelpMenu^EEEUserInterface.__showFileMenuUserInterface.__showFileMenuUserInterface.__showFileMenudIIIUserInterface.__showExtrasMenuUserInterface.__showExtrasMenuUserInterface.__showExtrasMenumOOOUserInterface.__showExternalToolsUserInterface.__showExternalToolsUserInterface.__showExternalTools j;sJjjMMMUserInterface.__showToolbarsMenuUserInterface.__showToolbarsMenuUserInterface.__showToolbarsMenupQQQUserInterface.__showToolGroupsMenuUserInterface.__showToolGroupsMenuUserInterface.__showToolGroupsMenuyWWWUserInterface.__showSystemEmailClientUserInterface.__showSystemEmailClientUserInterface.__showSystemEmailClientO ;;;UserInterface.__showSvgUserInterface.__showSvgUserInterface.__showSvgX AAAUserInterface.__showQt4DocUserInterface.__showQt4DocUserInterface.__showQt4Doca GGGUserInterface.__showPythonDocUserInterface.__showPythonDocUserInterface.__showPythonDoca GGGUserInterface.__showPySideDocUserInterface.__showPySideDocUserInterface.__showPySideDoc^ EEEUserInterface.__showPyQt4DocUserInterface.__showPyQt4DocUserInterface.__showPyQt4DocaGGGUserInterface.__showPyKDE4DocUserInterface.__showPyKDE4DocUserInterface.__showPyKDE4Doc 3;jb3U???UserInterface.__switchTabUserInterface.__switchTabUserInterface.__switchTabgKKKUserInterface.__startWebBrowserUserInterface.__startWebBrowserUserInterface.__startWebBrowserjMMMUserInterface.__startToolProcessUserInterface.__startToolProcessUserInterface.__startToolProcessU???UserInterface.__sslErrorsUserInterface.__sslErrorsUserInterface.__sslErrorsXAAAUserInterface.__sqlBrowserUserInterface.__sqlBrowserUserInterface.__sqlBrowserR===UserInterface.__shutdownUserInterface.__shutdownUserInterface.__shutdowngKKKUserInterface.__showWizardsMenuUserInterface.__showWizardsMenuUserInterface.__showWizardsMenudIIIUserInterface.__showWindowMenuUserInterface.__showWindowMenuUserInterface.__showWindowMenu^EEEUserInterface.__showVersionsUserInterface.__showVersionsUserInterface.__showVersionsaGGGUserInterface.__showToolsMenuUserInterface.__showToolsMenuUserInterface.__showToolsMenu X&4ZXv"UUUUserInterface.__toggleProjectBrowserUserInterface.__toggleProjectBrowserUserInterface.__toggleProjectBrowser!___UserInterface.__toggleMultiProjectBrowserUserInterface.__toggleMultiProjectBrowserUserInterface.__toggleMultiProjectBrowserg KKKUserInterface.__toggleLogViewerUserInterface.__toggleLogViewerUserInterface.__toggleLogViewermOOOUserInterface.__toggleLeftSidebarUserInterface.__toggleLeftSidebarUserInterface.__toggleLeftSidebar[[[UserInterface.__toggleHorizontalToolboxUserInterface.__toggleHorizontalToolboxUserInterface.__toggleHorizontalToolboxmOOOUserInterface.__toggleDebugViewerUserInterface.__toggleDebugViewerUserInterface.__toggleDebugVieweraGGGUserInterface.__toggleBrowserUserInterface.__toggleBrowserUserInterface.__toggleBrowsersSSSUserInterface.__toggleBottomSidebarUserInterface.__toggleBottomSidebarUserInterface.__toggleBottomSidebar :5@i :m+OOOUserInterface.__toolGroupSelectedUserInterface.__toolGroupSelectedUserInterface.__toolGroupSelected^*EEEUserInterface.__toolFinishedUserInterface.__toolFinishedUserInterface.__toolFinished[)CCCUserInterface.__toolExecuteUserInterface.__toolExecuteUserInterface.__toolExecutes(SSSUserInterface.__toolActionTriggeredUserInterface.__toolActionTriggeredUserInterface.__toolActionTriggered^'EEEUserInterface.__toggleWindowUserInterface.__toggleWindowUserInterface.__toggleWindowy&WWWUserInterface.__toggleVerticalToolboxUserInterface.__toggleVerticalToolboxUserInterface.__toggleVerticalToolboxv%UUUUserInterface.__toggleTemplateViewerUserInterface.__toggleTemplateViewerUserInterface.__toggleTemplateViewerj$MMMUserInterface.__toggleTaskViewerUserInterface.__toggleTaskViewerUserInterface.__toggleTaskViewer[#CCCUserInterface.__toggleShellUserInterface.__toggleShellUserInterface.__toggleShell |~ L{|p3QQQUserInterface.__updateVersionsUrlsUserInterface.__updateVersionsUrlsUserInterface.__updateVersionsUrls2aaaUserInterface.__updateExternalToolsActionsUserInterface.__updateExternalToolsActionsUserInterface.__updateExternalToolsActionsd1IIIUserInterface.__unittestScriptUserInterface.__unittestScriptUserInterface.__unittestScriptg0KKKUserInterface.__unittestRestartUserInterface.__unittestRestartUserInterface.__unittestRestartg/KKKUserInterface.__unittestProjectUserInterface.__unittestProjectUserInterface.__unittestProjectR.===UserInterface.__unittestUserInterface.__unittestUserInterface.__unittestp-QQQUserInterface.__toolsConfigurationUserInterface.__toolsConfigurationUserInterface.__toolsConfiguration,[[[UserInterface.__toolGroupsConfigurationUserInterface.__toolGroupsConfigurationUserInterface.__toolGroupsConfiguration c3zc^<EEEUserInterface.appendToStderrUserInterface.appendToStderrUserInterface.appendToStderrX;AAAUserInterface.addE4ActionsUserInterface.addE4ActionsUserInterface.addE4ActionsX:AAAUserInterface.__writeTasksUserInterface.__writeTasksUserInterface.__writeTasks^9EEEUserInterface.__writeSessionUserInterface.__writeSessionUserInterface.__writeSessionU8???UserInterface.__whatsThisUserInterface.__whatsThisUserInterface.__whatsThisX7AAAUserInterface.__webBrowserUserInterface.__webBrowserUserInterface.__webBrowserv6UUUUserInterface.__versionsDownloadDoneUserInterface.__versionsDownloadDoneUserInterface.__versionsDownloadDone5]]]UserInterface.__versionsDownloadCanceledUserInterface.__versionsDownloadCanceledUserInterface.__versionsDownloadCanceledp4QQQUserInterface.__versionCheckResultUserInterface.__versionCheckResultUserInterface.__versionCheckResult $ @)y$RF===UserInterface.getActionsUserInterface.getActionsUserInterface.getActionsOE;;;UserInterface.dropEventUserInterface.dropEventUserInterface.dropEvent[DCCCUserInterface.dragMoveEventUserInterface.dragMoveEventUserInterface.dragMoveEvent^CEEEUserInterface.dragLeaveEventUserInterface.dragLeaveEventUserInterface.dragLeaveEvent^BEEEUserInterface.dragEnterEventUserInterface.dragEnterEventUserInterface.dragEnterEventRA===UserInterface.closeEventUserInterface.closeEventUserInterface.closeEventv@UUUUserInterface.checkProjectsWorkspaceUserInterface.checkProjectsWorkspaceUserInterface.checkProjectsWorkspaced?IIIUserInterface.checkForErrorLogUserInterface.checkForErrorLogUserInterface.checkForErrorLog|>YYYUserInterface.checkConfigurationStatusUserInterface.checkConfigurationStatusUserInterface.checkConfigurationStatus^=EEEUserInterface.appendToStdoutUserInterface.appendToStdoutUserInterface.appendToStdout Kb0zKUP???UserInterface.processArgsUserInterface.processArgsUserInterface.processArgsmOOOOUserInterface.performVersionCheckUserInterface.performVersionCheckUserInterface.performVersionCheckdNIIIUserInterface.launchHelpViewerUserInterface.launchHelpViewerUserInterface.launchHelpViewer^MEEEUserInterface.getViewProfileUserInterface.getViewProfileUserInterface.getViewProfileRL===UserInterface.getToolbarUserInterface.getToolbarUserInterface.getToolbarjKMMMUserInterface.getToolBarIconSizeUserInterface.getToolBarIconSizeUserInterface.getToolBarIconSizedJIIIUserInterface.getMenuBarActionUserInterface.getMenuBarActionUserInterface.getMenuBarAction[ICCCUserInterface.getMenuActionUserInterface.getMenuActionUserInterface.getMenuActionIH777UserInterface.getMenuUserInterface.getMenuUserInterface.getMenuOG;;;UserInterface.getLocaleUserInterface.getLocaleUserInterface.getLocale y8j2yaYGGGUserInterface.showPreferencesUserInterface.showPreferencesUserInterface.showPreferencesRX===UserInterface.showLogTabUserInterface.showLogTabUserInterface.showLogTabOW;;;UserInterface.showEventUserInterface.showEventUserInterface.showEventaVGGGUserInterface.showEmailDialogUserInterface.showEmailDialogUserInterface.showEmailDialogU[[[UserInterface.showAvailableVersionsInfoUserInterface.showAvailableVersionsInfoUserInterface.showAvailableVersionsInfoaTGGGUserInterface.setDebugProfileUserInterface.setDebugProfileUserInterface.setDebugProfilegSKKKUserInterface.reregisterToolbarUserInterface.reregisterToolbarUserInterface.reregisterToolbaraRGGGUserInterface.removeE4ActionsUserInterface.removeE4ActionsUserInterface.removeE4ActionsaQGGGUserInterface.registerToolbarUserInterface.registerToolbarUserInterface.registerToolbar 5JrbSSSUserProjectHandler.startUserProjectUserProjectHandler.startUserProjectuUserProjectHandler.startUserProject~a[[[UserProjectHandler.startDocumentProjectUserProjectHandler.startDocumentProjectuUserProjectHandler.startDocumentProject``GGGUserProjectHandler.getVersionUserProjectHandler.getVersionuUserProjectHandler.getVersion`_GGGUserProjectHandler.endVcsTypeUserProjectHandler.endVcsTypeuUserProjectHandler.endVcsType?^CCUserProjectHandler (Module)UserProjectHandler (Module)ud]MMCUserProjectHandler (Constructor)UserProjectHandler (Constructor)uUserProjectHandler.__init__?\111UserProjectHandlerUserProjectHandleruUserProjectHandler^[EEEUserInterface.versionIsNewerUserInterface.versionIsNewerUserInterface.versionIsNewergZKKKUserInterface.unregisterToolbarUserInterface.unregisterToolbarUserInterface.unregisterToolbar gc$&o(g$m''VCS (Package)VCS (Package)y0l33Utilities (Package)Utilities (Package)xdkIIIUserPropertiesDialog.storeDataUserPropertiesDialog.storeDataUserPropertiesDialog.storeDataDjGGUserPropertiesDialog (Module)UserPropertiesDialog (Module)kiQQGUserPropertiesDialog (Constructor)UserPropertiesDialog (Constructor)UserPropertiesDialog.__init__Fh555UserPropertiesDialogUserPropertiesDialogUserPropertiesDialogWgAAAUserProjectWriter.writeXMLUserProjectWriter.writeXMLvUserProjectWriter.writeXML=fAAUserProjectWriter (Module)UserProjectWriter (Module)vaeKKAUserProjectWriter (Constructor)UserProjectWriter (Constructor)vUserProjectWriter.__init__s>2!55VcsPlugins (Package)VcsPlugins (Package)W. %%%VcsPage.saveVcsPage.saveVcsPage.savevUUUVcsPage.on_pbVcsUpdateButton_clickedVcsPage.on_pbVcsUpdateButton_clickedVcsPage.on_pbVcsUpdateButton_clicked|YYYVcsPage.on_pbVcsReplacedButton_clickedVcsPage.on_pbVcsReplacedButton_clickedVcsPage.on_pbVcsReplacedButton_clickedyWWWVcsPage.on_pbVcsRemovedButton_clickedVcsPage.on_pbVcsRemovedButton_clickedVcsPage.on_pbVcsRemovedButton_clicked|YYYVcsPage.on_pbVcsModifiedButton_clickedVcsPage.on_pbVcsModifiedButton_clickedVcsPage.on_pbVcsModifiedButton_clicked|YYYVcsPage.on_pbVcsConflictButton_clickedVcsPage.on_pbVcsConflictButton_clickedVcsPage.on_pbVcsConflictButton_clickedsSSSVcsPage.on_pbVcsAddedButton_clickedVcsPage.on_pbVcsAddedButton_clickedVcsPage.on_pbVcsAddedButton_clicked*--VcsPage (Module)VcsPage (Module)D77-VcsPage (Constructor)VcsPage (Constructor)VcsPage.__init__ 7Wwm*OOOVcsProjectBrowserHelper._VCSMergeVcsProjectBrowserHelper._VCSMergeVcsProjectBrowserHelper._VCSMergeg)KKKVcsProjectBrowserHelper._VCSLogVcsProjectBrowserHelper._VCSLogVcsProjectBrowserHelper._VCSLog([[[VcsProjectBrowserHelper._VCSInfoDisplayVcsProjectBrowserHelper._VCSInfoDisplayVcsProjectBrowserHelper._VCSInfoDisplayj'MMMVcsProjectBrowserHelper._VCSDiffVcsProjectBrowserHelper._VCSDiffVcsProjectBrowserHelper._VCSDiffp&QQQVcsProjectBrowserHelper._VCSCommitVcsProjectBrowserHelper._VCSCommitVcsProjectBrowserHelper._VCSCommits%SSSVcsProjectBrowserHelper._VCSAddTreeVcsProjectBrowserHelper._VCSAddTreeVcsProjectBrowserHelper._VCSAddTreeg$KKKVcsProjectBrowserHelper._VCSAddVcsProjectBrowserHelper._VCSAddVcsProjectBrowserHelper._VCSAddt#WWMVcsProjectBrowserHelper (Constructor)VcsProjectBrowserHelper (Constructor)VcsProjectBrowserHelper.__init__O";;;VcsProjectBrowserHelperVcsProjectBrowserHelperVcsProjectBrowserHelper *48*2aaaVcsProjectBrowserHelper.showContextMenuDirVcsProjectBrowserHelper.showContextMenuDirVcsProjectBrowserHelper.showContextMenuDir1[[[VcsProjectBrowserHelper.showContextMenuVcsProjectBrowserHelper.showContextMenuVcsProjectBrowserHelper.showContextMenus0SSSVcsProjectBrowserHelper.addVCSMenusVcsProjectBrowserHelper.addVCSMenusVcsProjectBrowserHelper.addVCSMenus/]]]VcsProjectBrowserHelper._updateVCSStatusVcsProjectBrowserHelper._updateVCSStatusVcsProjectBrowserHelper._updateVCSStatusp.QQQVcsProjectBrowserHelper._VCSUpdateVcsProjectBrowserHelper._VCSUpdateVcsProjectBrowserHelper._VCSUpdatep-QQQVcsProjectBrowserHelper._VCSStatusVcsProjectBrowserHelper._VCSStatusVcsProjectBrowserHelper._VCSStatusp,QQQVcsProjectBrowserHelper._VCSRevertVcsProjectBrowserHelper._VCSRevertVcsProjectBrowserHelper._VCSRevertp+QQQVcsProjectBrowserHelper._VCSRemoveVcsProjectBrowserHelper._VCSRemoveVcsProjectBrowserHelper._VCSRemove :e4o:[;CCCVcsProjectHelper._vcsCommitVcsProjectHelper._vcsCommitVcsProjectHelper._vcsCommits:SSSVcsProjectHelper._vcsCommandOptionsVcsProjectHelper._vcsCommandOptionsVcsProjectHelper._vcsCommandOptions^9EEEVcsProjectHelper._vcsCommandVcsProjectHelper._vcsCommandVcsProjectHelper._vcsCommand^8EEEVcsProjectHelper._vcsCleanupVcsProjectHelper._vcsCleanupVcsProjectHelper._vcsCleanupa7GGGVcsProjectHelper._vcsCheckoutVcsProjectHelper._vcsCheckoutVcsProjectHelper._vcsCheckout_6II?VcsProjectHelper (Constructor)VcsProjectHelper (Constructor)VcsProjectHelper.__init__:5---VcsProjectHelperVcsProjectHelperVcsProjectHelper4eeeVcsProjectBrowserHelper.showContextMenuMultiVcsProjectBrowserHelper.showContextMenuMultiVcsProjectBrowserHelper.showContextMenuMulti3kkkVcsProjectBrowserHelper.showContextMenuDirMultiVcsProjectBrowserHelper.showContextMenuDirMultiVcsProjectBrowserHelper.showContextMenuDirMulti WJ*qW[ECCCVcsProjectHelper._vcsSwitchVcsProjectHelper._vcsSwitchVcsProjectHelper._vcsSwitch[DCCCVcsProjectHelper._vcsStatusVcsProjectHelper._vcsStatusVcsProjectHelper._vcsStatus[CCCCVcsProjectHelper._vcsRevertVcsProjectHelper._vcsRevertVcsProjectHelper._vcsRevert[BCCCVcsProjectHelper._vcsRemoveVcsProjectHelper._vcsRemoveVcsProjectHelper._vcsRemoveXAAAAVcsProjectHelper._vcsMergeVcsProjectHelper._vcsMergeVcsProjectHelper._vcsMergeR@===VcsProjectHelper._vcsLogVcsProjectHelper._vcsLogVcsProjectHelper._vcsLogj?MMMVcsProjectHelper._vcsInfoDisplayVcsProjectHelper._vcsInfoDisplayVcsProjectHelper._vcsInfoDisplay[>CCCVcsProjectHelper._vcsImportVcsProjectHelper._vcsImportVcsProjectHelper._vcsImport[=CCCVcsProjectHelper._vcsExportVcsProjectHelper._vcsExportVcsProjectHelper._vcsExportU<???VcsProjectHelper._vcsDiffVcsProjectHelper._vcsDiffVcsProjectHelper._vcsDiff :M-w@:UP???VcsPySvnPlugin.deactivateVcsPySvnPlugin.deactivateVcsPySvnPlugin.deactivateOO;;;VcsPySvnPlugin.activateVcsPySvnPlugin.activateVcsPySvnPlugin.activateYNEE;VcsPySvnPlugin (Constructor)VcsPySvnPlugin (Constructor)VcsPySvnPlugin.__init__4M)))VcsPySvnPluginVcsPySvnPluginVcsPySvnPluginUL???VcsProjectHelper.showMenuVcsProjectHelper.showMenuVcsProjectHelper.showMenu[KCCCVcsProjectHelper.setObjectsVcsProjectHelper.setObjectsVcsProjectHelper.setObjectsdJIIIVcsProjectHelper.revertChangesVcsProjectHelper.revertChangesVcsProjectHelper.revertChangesUI???VcsProjectHelper.initMenuVcsProjectHelper.initMenuVcsProjectHelper.initMenu^HEEEVcsProjectHelper.initActionsVcsProjectHelper.initActionsVcsProjectHelper.initActions[GCCCVcsProjectHelper._vcsUpdateVcsProjectHelper._vcsUpdateVcsProjectHelper._vcsUpdateRF===VcsProjectHelper._vcsTagVcsProjectHelper._vcsTagVcsProjectHelper._vcsTag ;mMLY999VcsStatusMonitorThreadVcsStatusMonitorThreadVcsStatusMonitorThreadtXWWMVcsRepositoryInfoDialog (Constructor)VcsRepositoryInfoDialog (Constructor)VcsRepositoryInfoDialog.__init__OW;;;VcsRepositoryInfoDialogVcsRepositoryInfoDialogVcsRepositoryInfoDialogaVGGGVcsPySvnPlugin.setPreferencesVcsPySvnPlugin.setPreferencesVcsPySvnPlugin.setPreferencesgUKKKVcsPySvnPlugin.prepareUninstallVcsPySvnPlugin.prepareUninstallVcsPySvnPlugin.prepareUninstallaTGGGVcsPySvnPlugin.getServersPathVcsPySvnPlugin.getServersPathVcsPySvnPlugin.getServersPathgSKKKVcsPySvnPlugin.getProjectHelperVcsPySvnPlugin.getProjectHelperVcsPySvnPlugin.getProjectHelperaRGGGVcsPySvnPlugin.getPreferencesVcsPySvnPlugin.getPreferencesVcsPySvnPlugin.getPreferences^QEEEVcsPySvnPlugin.getConfigPathVcsPySvnPlugin.getConfigPathVcsPySvnPlugin.getConfigPath X ,XvaUUUVcsStatusMonitorThread.setAutoUpdateVcsStatusMonitorThread.setAutoUpdateVcsStatusMonitorThread.setAutoUpdateX`AAAVcsStatusMonitorThread.runVcsStatusMonitorThread.runVcsStatusMonitorThread.runp_QQQVcsStatusMonitorThread.getIntervalVcsStatusMonitorThread.getIntervalVcsStatusMonitorThread.getIntervalv^UUUVcsStatusMonitorThread.getAutoUpdateVcsStatusMonitorThread.getAutoUpdateVcsStatusMonitorThread.getAutoUpdate][[[VcsStatusMonitorThread.clearCachedStateVcsStatusMonitorThread.clearCachedStateVcsStatusMonitorThread.clearCachedStatep\QQQVcsStatusMonitorThread.checkStatusVcsStatusMonitorThread.checkStatusVcsStatusMonitorThread.checkStatus|[YYYVcsStatusMonitorThread._performMonitorVcsStatusMonitorThread._performMonitorVcsStatusMonitorThread._performMonitorqZUUKVcsStatusMonitorThread (Constructor)VcsStatusMonitorThread (Constructor)VcsStatusMonitorThread.__init__ Z/~FZvjUUUVcsSubversionPlugin.getProjectHelperVcsSubversionPlugin.getProjectHelperVcsSubversionPlugin.getProjectHelperpiQQQVcsSubversionPlugin.getPreferencesVcsSubversionPlugin.getPreferencesVcsSubversionPlugin.getPreferencesmhOOOVcsSubversionPlugin.getConfigPathVcsSubversionPlugin.getConfigPathVcsSubversionPlugin.getConfigPathdgIIIVcsSubversionPlugin.deactivateVcsSubversionPlugin.deactivateVcsSubversionPlugin.deactivate^fEEEVcsSubversionPlugin.activateVcsSubversionPlugin.activateVcsSubversionPlugin.activateheOOEVcsSubversionPlugin (Constructor)VcsSubversionPlugin (Constructor)VcsSubversionPlugin.__init__Cd333VcsSubversionPluginVcsSubversionPluginVcsSubversionPlugin[cCCCVcsStatusMonitorThread.stopVcsStatusMonitorThread.stopVcsStatusMonitorThread.stoppbQQQVcsStatusMonitorThread.setIntervalVcsStatusMonitorThread.setIntervalVcsStatusMonitorThread.setInterval ^j`^s___VersionControl._createStatusMonitorThreadVersionControl._createStatusMonitorThreadVersionControl._createStatusMonitorThreadvrUUUVersionControl.__statusMonitorStatusVersionControl.__statusMonitorStatusVersionControl.__statusMonitorStatuspqQQQVersionControl.__statusMonitorDataVersionControl.__statusMonitorDataVersionControl.__statusMonitorData8p;;VersionControl (Module)VersionControl (Module)YoEE;VersionControl (Constructor)VersionControl (Constructor)VersionControl.__init__4n)))VersionControlVersionControlVersionControlpmQQQVcsSubversionPlugin.setPreferencesVcsSubversionPlugin.setPreferencesVcsSubversionPlugin.setPreferencesvlUUUVcsSubversionPlugin.prepareUninstallVcsSubversionPlugin.prepareUninstallVcsSubversionPlugin.prepareUninstallpkQQQVcsSubversionPlugin.getServersPathVcsSubversionPlugin.getServersPathVcsSubversionPlugin.getServersPath ,>B7,{[[[VersionControl.setStatusMonitorIntervalVersionControl.setStatusMonitorIntervalVersionControl.setStatusMonitorIntervalz___VersionControl.setStatusMonitorAutoUpdateVersionControl.setStatusMonitorAutoUpdateVersionControl.setStatusMonitorAutoUpdatey[[[VersionControl.getStatusMonitorIntervalVersionControl.getStatusMonitorIntervalVersionControl.getStatusMonitorIntervalx___VersionControl.getStatusMonitorAutoUpdateVersionControl.getStatusMonitorAutoUpdateVersionControl.getStatusMonitorAutoUpdateweeeVersionControl.clearStatusMonitorCachedStateVersionControl.clearStatusMonitorCachedStateVersionControl.clearStatusMonitorCachedStategvKKKVersionControl.clearStatusCacheVersionControl.clearStatusCacheVersionControl.clearStatusCacheauGGGVersionControl.checkVCSStatusVersionControl.checkVCSStatusVersionControl.checkVCSStatus[tCCCVersionControl.addArgumentsVersionControl.addArgumentsVersionControl.addArguments mJXAmyWWWVersionControl.vcsAllRegisteredStatesVersionControl.vcsAllRegisteredStatesVersionControl.vcsAllRegisteredStatesU???VersionControl.vcsAddTreeVersionControl.vcsAddTreeVersionControl.vcsAddTree[CCCVersionControl.vcsAddBinaryVersionControl.vcsAddBinaryVersionControl.vcsAddBinaryI777VersionControl.vcsAddVersionControl.vcsAddVersionControl.vcsAddjMMMVersionControl.stopStatusMonitorVersionControl.stopStatusMonitorVersionControl.stopStatusMonitor[[[VersionControl.startSynchronizedProcessVersionControl.startSynchronizedProcessVersionControl.startSynchronizedProcessm~OOOVersionControl.startStatusMonitorVersionControl.startStatusMonitorVersionControl.startStatusMonitor^}EEEVersionControl.splitPathListVersionControl.splitPathListVersionControl.splitPathListR|===VersionControl.splitPathVersionControl.splitPathVersionControl.splitPath `M'k`^EEEVersionControl.vcsGetOptionsVersionControl.vcsGetOptionsVersionControl.vcsGetOptionsR ===VersionControl.vcsExportVersionControl.vcsExportVersionControl.vcsExportR ===VersionControl.vcsExistsVersionControl.vcsExistsVersionControl.vcsExistsL 999VersionControl.vcsDiffVersionControl.vcsDiffVersionControl.vcsDiffj MMMVersionControl.vcsDefaultOptionsVersionControl.vcsDefaultOptionsVersionControl.vcsDefaultOptionsj MMMVersionControl.vcsConvertProjectVersionControl.vcsConvertProjectVersionControl.vcsConvertProjectR===VersionControl.vcsCommitVersionControl.vcsCommitVersionControl.vcsCommitaGGGVersionControl.vcsCommandLineVersionControl.vcsCommandLineVersionControl.vcsCommandLineU???VersionControl.vcsCleanupVersionControl.vcsCleanupVersionControl.vcsCleanupXAAAVersionControl.vcsCheckoutVersionControl.vcsCheckoutVersionControl.vcsCheckout SE@SL999VersionControl.vcsMoveVersionControl.vcsMoveVersionControl.vcsMoveO;;;VersionControl.vcsMergeVersionControl.vcsMergeVersionControl.vcsMergeI777VersionControl.vcsLogVersionControl.vcsLogVersionControl.vcsLog^EEEVersionControl.vcsInitConfigVersionControl.vcsInitConfigVersionControl.vcsInitConfigL999VersionControl.vcsInitVersionControl.vcsInitVersionControl.vcsInitR===VersionControl.vcsImportVersionControl.vcsImportVersionControl.vcsImportU???VersionControl.vcsHistoryVersionControl.vcsHistoryVersionControl.vcsHistorypQQQVersionControl.vcsGetProjectHelperVersionControl.vcsGetProjectHelperVersionControl.vcsGetProjectHelper___VersionControl.vcsGetProjectBrowserHelperVersionControl.vcsGetProjectBrowserHelperVersionControl.vcsGetProjectBrowserHelperdIIIVersionControl.vcsGetOtherDataVersionControl.vcsGetOtherDataVersionControl.vcsGetOtherData l(N4lm!OOOVersionControl.vcsSetDataFromDictVersionControl.vcsSetDataFromDictVersionControl.vcsSetDataFromDictU ???VersionControl.vcsSetDataVersionControl.vcsSetDataVersionControl.vcsSetDataR===VersionControl.vcsRevertVersionControl.vcsRevertVersionControl.vcsRevertmOOOVersionControl.vcsRepositoryInfosVersionControl.vcsRepositoryInfosVersionControl.vcsRepositoryInfosR===VersionControl.vcsRemoveVersionControl.vcsRemoveVersionControl.vcsRemovemOOOVersionControl.vcsRegisteredStateVersionControl.vcsRegisteredStateVersionControl.vcsRegisteredStategKKKVersionControl.vcsOptionsDialogVersionControl.vcsOptionsDialogVersionControl.vcsOptionsDialog___VersionControl.vcsNewProjectOptionsDialogVersionControl.vcsNewProjectOptionsDialogVersionControl.vcsNewProjectOptionsDialogL999VersionControl.vcsNameVersionControl.vcsNameVersionControl.vcsName G83dG[-CCCViewManager.__addBookmarkedViewManager.__addBookmarkedViewManager.__addBookmarked4,77ViewManager (Package)ViewManager (Package)z2+55ViewManager (Module)ViewManager (Module)P*??5ViewManager (Constructor)ViewManager (Constructor)ViewManager.__init__+)###ViewManagerViewManagerViewManagerR(===VersionControl.vcsUpdateVersionControl.vcsUpdateVersionControl.vcsUpdateI'777VersionControl.vcsTagVersionControl.vcsTagVersionControl.vcsTagR&===VersionControl.vcsSwitchVersionControl.vcsSwitchVersionControl.vcsSwitchR%===VersionControl.vcsStatusVersionControl.vcsStatusVersionControl.vcsStatusX$AAAVersionControl.vcsShutdownVersionControl.vcsShutdownVersionControl.vcsShutdownd#IIIVersionControl.vcsSetOtherDataVersionControl.vcsSetOtherDataVersionControl.vcsSetOtherData^"EEEVersionControl.vcsSetOptionsVersionControl.vcsSetOptionsVersionControl.vcsSetOptions 0J|;0R7===ViewManager.__convertEOLViewManager.__convertEOLViewManager.__convertEOL[6CCCViewManager.__connectEditorViewManager.__connectEditorViewManager.__connectEditorU5???ViewManager.__clearRecentViewManager.__clearRecentViewManager.__clearRecenta4GGGViewManager.__clearBookmarkedViewManager.__clearBookmarkedViewManager.__clearBookmarkedp3QQQViewManager.__clearAllSyntaxErrorsViewManager.__clearAllSyntaxErrorsViewManager.__clearAllSyntaxErrorsg2KKKViewManager.__clearAllBookmarksViewManager.__clearAllBookmarksViewManager.__clearAllBookmarksg1KKKViewManager.__breakpointToggledViewManager.__breakpointToggledViewManager.__breakpointToggleda0GGGViewManager.__bookmarkToggledViewManager.__bookmarkToggledViewManager.__bookmarkToggledd/IIIViewManager.__bookmarkSelectedViewManager.__bookmarkSelectedViewManager.__bookmarkSelectedL.999ViewManager.__autosaveViewManager.__autosaveViewManager.__autosave 7/IQ7U@???ViewManager.__editCommentViewManager.__editCommentViewManager.__editComment^?EEEViewManager.__editBoxCommentViewManager.__editBoxCommentViewManager.__editBoxComment^>EEEViewManager.__editBookmarkedViewManager.__editBookmarkedViewManager.__editBookmarkedy=WWWViewManager.__editAutoCompleteFromDocViewManager.__editAutoCompleteFromDocViewManager.__editAutoCompleteFromDocy<WWWViewManager.__editAutoCompleteFromAllViewManager.__editAutoCompleteFromAllViewManager.__editAutoCompleteFromAll|;YYYViewManager.__editAutoCompleteFromAPIsViewManager.__editAutoCompleteFromAPIsViewManager.__editAutoCompleteFromAPIsd:IIIViewManager.__editAutoCompleteViewManager.__editAutoCompleteViewManager.__editAutoComplete[9CCCViewManager.__cursorChangedViewManager.__cursorChangedViewManager.__cursorChangedp8QQQViewManager.__coverageMarkersShownViewManager.__coverageMarkersShownViewManager.__coverageMarkersShown 8eWa8dKIIIViewManager.__editShowCallTipsViewManager.__editShowCallTipsViewManager.__editShowCallTipsaJGGGViewManager.__editSelectBraceViewManager.__editSelectBraceViewManager.__editSelectBrace[ICCCViewManager.__editSelectAllViewManager.__editSelectAllViewManager.__editSelectAllRH===ViewManager.__editRevertViewManager.__editRevertViewManager.__editRevertLG999ViewManager.__editRedoViewManager.__editRedoViewManager.__editRedoOF;;;ViewManager.__editPasteViewManager.__editPasteViewManager.__editPasteRE===ViewManager.__editIndentViewManager.__editIndentViewManager.__editIndentaDGGGViewManager.__editDeselectAllViewManager.__editDeselectAllViewManager.__editDeselectAllRC===ViewManager.__editDeleteViewManager.__editDeleteViewManager.__editDeleteIB777ViewManager.__editCutViewManager.__editCutViewManager.__editCutLA999ViewManager.__editCopyViewManager.__editCopyViewManager.__editCopy f2*1fXTAAAViewManager.__editorOpenedViewManager.__editorOpenedViewManager.__editorOpenedmSOOOViewManager.__editorConfigChangedViewManager.__editorConfigChangedViewManager.__editorConfigChanged[RCCCViewManager.__editorCommandViewManager.__editorCommandViewManager.__editorCommandQkkkViewManager.__editorAutoCompletionAPIsAvailableViewManager.__editorAutoCompletionAPIsAvailableViewManager.__editorAutoCompletionAPIsAvailableXPAAAViewManager.__editUnindentViewManager.__editUnindentViewManager.__editUnindentLO999ViewManager.__editUndoViewManager.__editUndoViewManager.__editUndo[NCCCViewManager.__editUncommentViewManager.__editUncommentViewManager.__editUncommentgMKKKViewManager.__editStreamCommentViewManager.__editStreamCommentViewManager.__editStreamCommentaLGGGViewManager.__editSmartIndentViewManager.__editSmartIndentViewManager.__editSmartIndent 2g$n|]YYYViewManager.__initContextMenuExportersViewManager.__initContextMenuExportersViewManager.__initContextMenuExportersm\OOOViewManager.__initBookmarkActionsViewManager.__initBookmarkActionsViewManager.__initBookmarkActionsa[GGGViewManager.__gotoSyntaxErrorViewManager.__gotoSyntaxErrorViewManager.__gotoSyntaxErrorOZ;;;ViewManager.__gotoBraceViewManager.__gotoBraceViewManager.__gotoBrace@Y111ViewManager.__gotoViewManager.__gotoViewManager.__gotoXXAAAViewManager.__findFileNameViewManager.__findFileNameViewManager.__findFileNamemWOOOViewManager.__exportMenuTriggeredViewManager.__exportMenuTriggeredViewManager.__exportMenuTriggeredsVSSSViewManager.__enableSpellingActionsViewManager.__enableSpellingActionsViewManager.__enableSpellingActionsUU???ViewManager.__editorSavedViewManager.__editorSavedViewManager.__editorSaved -8g,-Og;;;ViewManager.__macroLoadViewManager.__macroLoadViewManager.__macroLoadUf???ViewManager.__macroDeleteViewManager.__macroDeleteViewManager.__macroDeleteRe===ViewManager.__loadRecentViewManager.__loadRecentViewManager.__loadRecentddIIIViewManager.__lastEditorClosedViewManager.__lastEditorClosedViewManager.__lastEditorClosedacGGGViewManager.__initViewActionsViewManager.__initViewActionsViewManager.__initViewActionsmbOOOViewManager.__initSpellingActionsViewManager.__initSpellingActionsViewManager.__initSpellingActionsgaKKKViewManager.__initSearchActionsViewManager.__initSearchActionsViewManager.__initSearchActionsd`IIIViewManager.__initMacroActionsViewManager.__initMacroActionsViewManager.__initMacroActionsa_GGGViewManager.__initFileActionsViewManager.__initFileActionsViewManager.__initFileActionsa^GGGViewManager.__initEditActionsViewManager.__initEditActionsViewManager.__initEditActions W_'}WdqIIIViewManager.__previousBookmarkViewManager.__previousBookmarkViewManager.__previousBookmark^pEEEViewManager.__openSourceFileViewManager.__openSourceFileViewManager.__openSourceFile[oCCCViewManager.__nextUncoveredViewManager.__nextUncoveredViewManager.__nextUncoveredLn999ViewManager.__nextTaskViewManager.__nextTaskViewManager.__nextTaskXmAAAViewManager.__nextBookmarkViewManager.__nextBookmarkViewManager.__nextBookmarkXlAAAViewManager.__newLineBelowViewManager.__newLineBelowViewManager.__newLineBelowjkMMMViewManager.__macroStopRecordingViewManager.__macroStopRecordingViewManager.__macroStopRecordingmjOOOViewManager.__macroStartRecordingViewManager.__macroStartRecordingViewManager.__macroStartRecordingOi;;;ViewManager.__macroSaveViewManager.__macroSaveViewManager.__macroSaveLh999ViewManager.__macroRunViewManager.__macroRunViewManager.__macroRun E;|;Ez]]]ViewManager.__quickSearchMarkOccurrencesViewManager.__quickSearchMarkOccurrencesViewManager.__quickSearchMarkOccurrencesmyOOOViewManager.__quickSearchInEditorViewManager.__quickSearchInEditorViewManager.__quickSearchInEditorjxMMMViewManager.__quickSearchFocusInViewManager.__quickSearchFocusInViewManager.__quickSearchFocusIngwKKKViewManager.__quickSearchExtendViewManager.__quickSearchExtendViewManager.__quickSearchExtendgvKKKViewManager.__quickSearchEscapeViewManager.__quickSearchEscapeViewManager.__quickSearchEscapeduIIIViewManager.__quickSearchEnterViewManager.__quickSearchEnterViewManager.__quickSearchEnterUt???ViewManager.__quickSearchViewManager.__quickSearchViewManager.__quickSearchgsKKKViewManager.__previousUncoveredViewManager.__previousUncoveredViewManager.__previousUncoveredXrAAAViewManager.__previousTaskViewManager.__previousTaskViewManager.__previousTask <mt<pQQQViewManager.__setAutoSpellCheckingViewManager.__setAutoSpellCheckingViewManager.__setAutoSpellCheckingU???ViewManager.__searchFilesViewManager.__searchFilesViewManager.__searchFilesjMMMViewManager.__searchClearMarkersViewManager.__searchClearMarkersViewManager.__searchClearMarkersF555ViewManager.__searchViewManager.__searchViewManager.__searchR===ViewManager.__saveRecentViewManager.__saveRecentViewManager.__saveRecentXAAAViewManager.__replaceFilesViewManager.__replaceFilesViewManager.__replaceFilesI~777ViewManager.__replaceViewManager.__replaceViewManager.__replacea}GGGViewManager.__quickSearchTextViewManager.__quickSearchTextViewManager.__quickSearchText||YYYViewManager.__quickSearchSetEditColorsViewManager.__quickSearchSetEditColorsViewManager.__quickSearchSetEditColorsa{GGGViewManager.__quickSearchPrevViewManager.__quickSearchPrevViewManager.__quickSearchPrev <DpJ<O;;;ViewManager.__splitViewViewManager.__splitViewViewManager.__splitViewd IIIViewManager.__splitOrientationViewManager.__splitOrientationViewManager.__splitOrientationR ===ViewManager.__spellCheckViewManager.__spellCheckViewManager.__spellCheck^ EEEViewManager.__showRecentMenuViewManager.__showRecentMenuViewManager.__showRecentMenuX AAAViewManager.__showFileMenuViewManager.__showFileMenuViewManager.__showFileMenug KKKViewManager.__showBookmarksMenuViewManager.__showBookmarksMenuViewManager.__showBookmarksMenujMMMViewManager.__showBookmarkedMenuViewManager.__showBookmarkedMenuViewManager.__showBookmarkedMenudIIIViewManager.__showBookmarkMenuViewManager.__showBookmarkMenuViewManager.__showBookmarkMenugKKKViewManager.__shortenEmptyLinesViewManager.__shortenEmptyLinesViewManager.__shortenEmptyLinesO;;;ViewManager.__setSbFileViewManager.__setSbFileViewManager.__setSbFiletH "(.4:@FLRX^djpv|ztnhb\VPJD>82,& ~xrlf`ZTNHYH3!zgTB/ yiWE3" }oeV߹G޹;ݹ/ܹ$۹ڹ ٹظw׸jָ^ոTԸHӸ=Ҹ5Ѹ-и$ϸθ͸̷x˷lʷaɷXȷMǷCƷ8ŷ.ķ#÷-7CO[epz#.6?GPYbku~"+3<FPYbmz !*2;EPYajs{!-7@KT]gqz MAv@MU???ViewManager._checkActionsViewManager._checkActionsViewManager._checkActionsF555ViewManager._addViewViewManager._addViewViewManager._addViewO;;;ViewManager.__zoomResetViewManager.__zoomResetViewManager.__zoomResetI777ViewManager.__zoomOutViewManager.__zoomOutViewManager.__zoomOutF555ViewManager.__zoomInViewManager.__zoomInViewManager.__zoomIn@111ViewManager.__zoomViewManager.__zoomViewManager.__zoom[CCCViewManager.__toggleCurrentViewManager.__toggleCurrentViewManager.__toggleCurrent^EEEViewManager.__toggleBookmarkViewManager.__toggleBookmarkViewManager.__toggleBookmarkgKKKViewManager.__toggleAllChildrenViewManager.__toggleAllChildrenViewManager.__toggleAllChildrenO;;;ViewManager.__toggleAllViewManager.__toggleAllViewManager.__toggleAlljMMMViewManager.__taskMarkersUpdatedViewManager.__taskMarkersUpdatedViewManager.__taskMarkersUpdated N8RVNF#555ViewManager.addSplitViewManager.addSplitViewManager.addSplitR"===ViewManager.activeWindowViewManager.activeWindowViewManager.activeWindowg!KKKViewManager._syntaxErrorToggledViewManager._syntaxErrorToggledViewManager._syntaxErrorToggledI 777ViewManager._showViewViewManager._showViewViewManager._showViewO;;;ViewManager._removeViewViewManager._removeViewViewManager._removeView[CCCViewManager._removeAllViewsViewManager._removeAllViewsViewManager._removeAllViews|YYYViewManager._modificationStatusChangedViewManager._modificationStatusChangedViewManager._modificationStatusChangeddIIIViewManager._initWindowActionsViewManager._initWindowActionsViewManager._initWindowActions^EEEViewManager._getOpenStartDirViewManager._getOpenStartDirViewManager._getOpenStartDirdIIIViewManager._getOpenFileFilterViewManager._getOpenFileFilterViewManager._getOpenFileFilter kDNjk[.CCCViewManager.closeAllWindowsViewManager.closeAllWindowsViewManager.closeAllWindowsO-;;;ViewManager.cloneEditorViewManager.cloneEditorViewManager.cloneEditorL,999ViewManager.checkDirtyViewManager.checkDirtyViewManager.checkDirtyU+???ViewManager.checkAllDirtyViewManager.checkAllDirtyViewManager.checkAllDirtyC*333ViewManager.cascadeViewManager.cascadeViewManager.cascadeC)333ViewManager.canTileViewManager.canTileViewManager.canTileF(555ViewManager.canSplitViewManager.canSplitViewManager.canSplitL'999ViewManager.canCascadeViewManager.canCascadeViewManager.canCascade[&CCCViewManager.appFocusChangedViewManager.appFocusChangedViewManager.appFocusChanged[%CCCViewManager.addToRecentListViewManager.addToRecentListViewManager.addToRecentList[$CCCViewManager.addToExtrasMenuViewManager.addToExtrasMenuViewManager.addToExtrasMenu KG05KX8AAAViewManager.getAPIsManagerViewManager.getAPIsManagerViewManager.getAPIsManager:7---ViewManager.exitViewManager.exitViewManager.exitO6;;;ViewManager.eventFilterViewManager.eventFilterViewManager.eventFiltery5WWWViewManager.enableEditorsCheckFocusInViewManager.enableEditorsCheckFocusInViewManager.enableEditorsCheckFocusIn|4YYYViewManager.editorsCheckFocusInEnabledViewManager.editorsCheckFocusInEnabledViewManager.editorsCheckFocusInEnabledO3;;;ViewManager.closeWindowViewManager.closeWindowViewManager.closeWindow^2EEEViewManager.closeViewManagerViewManager.closeViewManagerViewManager.closeViewManagera1GGGViewManager.closeEditorWindowViewManager.closeEditorWindowViewManager.closeEditorWindowO0;;;ViewManager.closeEditorViewManager.closeEditorViewManager.closeEditord/IIIViewManager.closeCurrentWindowViewManager.closeCurrentWindowViewManager.closeCurrentWindow #Y ]1{#UC???ViewManager.handleResetUIViewManager.handleResetUIViewManager.handleResetUIRB===ViewManager.getSRHistoryViewManager.getSRHistoryViewManager.getSRHistory^AEEEViewManager.getOpenFilenamesViewManager.getOpenFilenamesViewManager.getOpenFilenamesg@KKKViewManager.getOpenEditorsCountViewManager.getOpenEditorsCountViewManager.getOpenEditorsCountX?AAAViewManager.getOpenEditorsViewManager.getOpenEditorsViewManager.getOpenEditorsd>IIIViewManager.getOpenEditorCountViewManager.getOpenEditorCountViewManager.getOpenEditorCountU=???ViewManager.getOpenEditorViewManager.getOpenEditorViewManager.getOpenEditorU<???ViewManager.getMostRecentViewManager.getMostRecentViewManager.getMostRecentI;777ViewManager.getEditorViewManager.getEditorViewManager.getEditorU:???ViewManager.getActiveNameViewManager.getActiveNameViewManager.getActiveNameL9999ViewManager.getActionsViewManager.getActionsViewManager.getActions TM0}%TgMKKKViewManager.initSpellingToolbarViewManager.initSpellingToolbarViewManager.initSpellingToolbardLIIIViewManager.initSearchToolbarsViewManager.initSearchToolbarsViewManager.initSearchToolbarsUK???ViewManager.initMacroMenuViewManager.initMacroMenuViewManager.initMacroMenu[JCCCViewManager.initFileToolbarViewManager.initFileToolbarViewManager.initFileToolbarRI===ViewManager.initFileMenuViewManager.initFileMenuViewManager.initFileMenu[HCCCViewManager.initEditToolbarViewManager.initEditToolbarViewManager.initEditToolbarRG===ViewManager.initEditMenuViewManager.initEditMenuViewManager.initEditMenugFKKKViewManager.initBookmarkToolbarViewManager.initBookmarkToolbarViewManager.initBookmarkToolbar^EEEEViewManager.initBookmarkMenuViewManager.initBookmarkMenuViewManager.initBookmarkMenuOD;;;ViewManager.initActionsViewManager.initActionsViewManager.initActions JM]OJOX;;;ViewManager.printEditorViewManager.printEditorViewManager.printEditordWIIIViewManager.printCurrentEditorViewManager.printCurrentEditorViewManager.printCurrentEditorIV777ViewManager.prevSplitViewManager.prevSplitViewManager.prevSplitdUIIIViewManager.preferencesChangedViewManager.preferencesChangedViewManager.preferencesChangedXTAAAViewManager.openSourceFileViewManager.openSourceFileViewManager.openSourceFileIS777ViewManager.openFilesViewManager.openFilesViewManager.openFilesIR777ViewManager.nextSplitViewManager.nextSplitViewManager.nextSplitUQ???ViewManager.newEditorViewViewManager.newEditorViewViewManager.newEditorViewIP777ViewManager.newEditorViewManager.newEditorViewManager.newEditor[OCCCViewManager.initViewToolbarViewManager.initViewToolbarViewManager.initViewToolbarRN===ViewManager.initViewMenuViewManager.initViewMenuViewManager.initViewMenu l,61lXaAAAViewManager.saveAsEditorEdViewManager.saveAsEditorEdViewManager.saveAsEditorEdg`KKKViewManager.saveAsCurrentEditorViewManager.saveAsCurrentEditorViewManager.saveAsCurrentEditorX_AAAViewManager.saveAllEditorsViewManager.saveAllEditorsViewManager.saveAllEditorsO^;;;ViewManager.removeSplitViewManager.removeSplitViewManager.removeSplitU]???ViewManager.projectOpenedViewManager.projectOpenedViewManager.projectOpened \cccViewManager.projectLexerAssociationsChangedViewManager.projectLexerAssociationsChangedViewManager.projectLexerAssociationsChangedd[IIIViewManager.projectFileRenamedViewManager.projectFileRenamedViewManager.projectFileRenamedUZ???ViewManager.projectClosedViewManager.projectClosedViewManager.projectClosedyYWWWViewManager.printPreviewCurrentEditorViewManager.printPreviewCurrentEditorViewManager.printPreviewCurrentEditor )MBL)XlAAAViewManager.showWindowMenuViewManager.showWindowMenuViewManager.showWindowMenu[kCCCViewManager.showDebugSourceViewManager.showDebugSourceViewManager.showDebugSourcegjKKKViewManager.setSplitOrientationViewManager.setSplitOrientationViewManager.setSplitOrientationIi777ViewManager.setSbInfoViewManager.setSbInfoViewManager.setSbInfoUh???ViewManager.setReferencesViewManager.setReferencesViewManager.setReferencesOg;;;ViewManager.setFileLineViewManager.setFileLineViewManager.setFileLineUf???ViewManager.setEditorNameViewManager.setEditorNameViewManager.setEditorName[eCCCViewManager.saveEditorsListViewManager.saveEditorsListViewManager.saveEditorsListRd===ViewManager.saveEditorEdViewManager.saveEditorEdViewManager.saveEditorEdLc999ViewManager.saveEditorViewManager.saveEditorViewManager.saveEditorabGGGViewManager.saveCurrentEditorViewManager.saveCurrentEditorViewManager.saveCurrentEditor +q5V+ xcccViewmanagerPage.on_windowComboBox_activatedViewmanagerPage.on_windowComboBox_activatedViewmanagerPage.on_windowComboBox_activated:w==ViewmanagerPage (Module)ViewmanagerPage (Module)\vGG=ViewmanagerPage (Constructor)ViewmanagerPage (Constructor)ViewmanagerPage.__init__7u+++ViewmanagerPageViewmanagerPageViewmanagerPageatGGGViewProfileDialog.getProfilesViewProfileDialog.getProfilesViewProfileDialog.getProfiles>sAAViewProfileDialog (Module)ViewProfileDialog (Module)brKKAViewProfileDialog (Constructor)ViewProfileDialog (Constructor)ViewProfileDialog.__init__=q///ViewProfileDialogViewProfileDialogViewProfileDialogBpEEViewManagerPlugins (Package)ViewManagerPlugins (Package)`Oo;;;ViewManager.unhighlightViewManager.unhighlightViewManager.unhighlight:n---ViewManager.tileViewManager.tileViewManager.tileOm;;;ViewManager.textForFindViewManager.textForFindViewManager.textForFind 5+~&s95bKKAVmListspacePlugin (Constructor)VmListspacePlugin (Constructor)VmListspacePlugin.__init__=///VmListspacePluginVmListspacePluginVmListspacePlugin\GG=VisibilityMixin (Constructor)VisibilityMixin (Constructor) VisibilityMixin.__init__7+++VisibilityMixinVisibilityMixin VisibilityMixinR===VisibilityBase.setPublicVisibilityBase.setPublic VisibilityBase.setPublic[CCCVisibilityBase.setProtectedVisibilityBase.setProtected VisibilityBase.setProtectedU~???VisibilityBase.setPrivateVisibilityBase.setPrivate VisibilityBase.setPrivateO};;;VisibilityBase.isPublicVisibilityBase.isPublic VisibilityBase.isPublicX|AAAVisibilityBase.isProtectedVisibilityBase.isProtected VisibilityBase.isProtectedR{===VisibilityBase.isPrivateVisibilityBase.isPrivate VisibilityBase.isPrivate4z)))VisibilityBaseVisibilityBase VisibilityBaseFy555ViewmanagerPage.saveViewmanagerPage.saveViewmanagerPage.save rD Vb r=///VmWorkspacePluginVmWorkspacePluginVmWorkspacePluginXAAAVmTabviewPlugin.deactivateVmTabviewPlugin.deactivateVmTabviewPlugin.deactivateR ===VmTabviewPlugin.activateVmTabviewPlugin.activateVmTabviewPlugin.activate\ GG=VmTabviewPlugin (Constructor)VmTabviewPlugin (Constructor)VmTabviewPlugin.__init__7 +++VmTabviewPluginVmTabviewPluginVmTabviewPluginX AAAVmMdiAreaPlugin.deactivateVmMdiAreaPlugin.deactivateVmMdiAreaPlugin.deactivateR ===VmMdiAreaPlugin.activateVmMdiAreaPlugin.activateVmMdiAreaPlugin.activate\GG=VmMdiAreaPlugin (Constructor)VmMdiAreaPlugin (Constructor)VmMdiAreaPlugin.__init__7+++VmMdiAreaPluginVmMdiAreaPluginVmMdiAreaPlugin^EEEVmListspacePlugin.deactivateVmListspacePlugin.deactivateVmListspacePlugin.deactivateXAAAVmListspacePlugin.activateVmListspacePlugin.activateVmListspacePlugin.activate ,@H L,~[[[WatchPointModel.deleteWatchPointByIndexWatchPointModel.deleteWatchPointByIndexCWatchPointModel.deleteWatchPointByIndexT???WatchPointModel.deleteAllWatchPointModel.deleteAllCWatchPointModel.deleteAllE555WatchPointModel.dataWatchPointModel.dataCWatchPointModel.dataZCCCWatchPointModel.columnCountWatchPointModel.columnCountCWatchPointModel.columnCount`GGGWatchPointModel.addWatchPointWatchPointModel.addWatchPointCWatchPointModel.addWatchPoint9==WatchPointModel (Module)WatchPointModel (Module)C[GG=WatchPointModel (Constructor)WatchPointModel (Constructor)CWatchPointModel.__init__6+++WatchPointModelWatchPointModelCWatchPointModel^EEEVmWorkspacePlugin.deactivateVmWorkspacePlugin.deactivateVmWorkspacePlugin.deactivateXAAAVmWorkspacePlugin.activateVmWorkspacePlugin.activateVmWorkspacePlugin.activatebKKAVmWorkspacePlugin (Constructor)VmWorkspacePlugin (Constructor)VmWorkspacePlugin.__init__ @F\Z @u$UUUWatchPointModel.setWatchPointByIndexWatchPointModel.setWatchPointByIndexCWatchPointModel.setWatchPointByIndexQ#===WatchPointModel.rowCountWatchPointModel.rowCountCWatchPointModel.rowCountK"999WatchPointModel.parentWatchPointModel.parentCWatchPointModel.parentH!777WatchPointModel.indexWatchPointModel.indexCWatchPointModel.indexW AAAWatchPointModel.headerDataWatchPointModel.headerDataCWatchPointModel.headerDataZCCCWatchPointModel.hasChildrenWatchPointModel.hasChildrenCWatchPointModel.hasChildrenoQQQWatchPointModel.getWatchPointIndexWatchPointModel.getWatchPointIndexCWatchPointModel.getWatchPointIndexuUUUWatchPointModel.getWatchPointByIndexWatchPointModel.getWatchPointByIndexCWatchPointModel.getWatchPointByIndexH777WatchPointModel.flagsWatchPointModel.flagsCWatchPointModel.flagslOOOWatchPointModel.deleteWatchPointsWatchPointModel.deleteWatchPointsCWatchPointModel.deleteWatchPoints fr6+\f~-[[[WatchPointViewer.__deleteAllWatchPointsWatchPointViewer.__deleteAllWatchPointsDWatchPointViewer.__deleteAllWatchPointsr,SSSWatchPointViewer.__createPopupMenusWatchPointViewer.__createPopupMenusDWatchPointViewer.__createPopupMenus]+EEEWatchPointViewer.__configureWatchPointViewer.__configureDWatchPointViewer.__configurel*OOOWatchPointViewer.__clearSelectionWatchPointViewer.__clearSelectionDWatchPointViewer.__clearSelectioni)MMMWatchPointViewer.__addWatchPointWatchPointViewer.__addWatchPointDWatchPointViewer.__addWatchPoint;(??WatchPointViewer (Module)WatchPointViewer (Module)D^'II?WatchPointViewer (Constructor)WatchPointViewer (Constructor)DWatchPointViewer.__init__9&---WatchPointViewerWatchPointViewerDWatchPointViewer %cccWatchPointModel.setWatchPointEnabledByIndexWatchPointModel.setWatchPointEnabledByIndexCWatchPointModel.setWatchPointEnabledByIndex ouil5OOOWatchPointViewer.__editWatchPointWatchPointViewer.__editWatchPointDWatchPointViewer.__editWatchPointi4MMMWatchPointViewer.__doubleClickedWatchPointViewer.__doubleClickedDWatchPointViewer.__doubleClickedr3SSSWatchPointViewer.__doEditWatchPointWatchPointViewer.__doEditWatchPointDWatchPointViewer.__doEditWatchPointu2UUUWatchPointViewer.__disableWatchPointWatchPointViewer.__disableWatchPointDWatchPointViewer.__disableWatchPoint1gggWatchPointViewer.__disableSelectedWatchPointsWatchPointViewer.__disableSelectedWatchPointsDWatchPointViewer.__disableSelectedWatchPoints0]]]WatchPointViewer.__disableAllWatchPointsWatchPointViewer.__disableAllWatchPointsDWatchPointViewer.__disableAllWatchPointsr/SSSWatchPointViewer.__deleteWatchPointWatchPointViewer.__deleteWatchPointDWatchPointViewer.__deleteWatchPoint .eeeWatchPointViewer.__deleteSelectedWatchPointsWatchPointViewer.__deleteSelectedWatchPointsDWatchPointViewer.__deleteSelectedWatchPoints ;y ;i=MMMWatchPointViewer.__resizeColumnsWatchPointViewer.__resizeColumnsDWatchPointViewer.__resizeColumnsi<MMMWatchPointViewer.__layoutDisplayWatchPointViewer.__layoutDisplayDWatchPointViewer.__layoutDisplay;]]]WatchPointViewer.__getSelectedItemsCountWatchPointViewer.__getSelectedItemsCountDWatchPointViewer.__getSelectedItemsCounto:QQQWatchPointViewer.__fromSourceIndexWatchPointViewer.__fromSourceIndexDWatchPointViewer.__fromSourceIndexl9OOOWatchPointViewer.__findDuplicatesWatchPointViewer.__findDuplicatesDWatchPointViewer.__findDuplicatesr8SSSWatchPointViewer.__enableWatchPointWatchPointViewer.__enableWatchPointDWatchPointViewer.__enableWatchPoint 7eeeWatchPointViewer.__enableSelectedWatchPointsWatchPointViewer.__enableSelectedWatchPointsDWatchPointViewer.__enableSelectedWatchPoints~6[[[WatchPointViewer.__enableAllWatchPointsWatchPointViewer.__enableAllWatchPointsDWatchPointViewer.__enableAllWatchPoints ):h3{)OH;;;Whitespace.indent_levelWhitespace.indent_levelWhitespace.indent_level:G---Whitespace.equalWhitespace.equalWhitespace.equalMF==3Whitespace (Constructor)Whitespace (Constructor)Whitespace.__init__(E!!!WhitespaceWhitespaceWhitespaceTD???WatchPointViewer.setModelWatchPointViewer.setModelDWatchPointViewer.setModeliCMMMWatchPointViewer.__toSourceIndexWatchPointViewer.__toSourceIndexDWatchPointViewer.__toSourceIndexoBQQQWatchPointViewer.__showContextMenuWatchPointViewer.__showContextMenuDWatchPointViewer.__showContextMenufAKKKWatchPointViewer.__showBackMenuWatchPointViewer.__showBackMenuDWatchPointViewer.__showBackMenuf@KKKWatchPointViewer.__setWpEnabledWatchPointViewer.__setWpEnabledDWatchPointViewer.__setWpEnabledl?OOOWatchPointViewer.__setRowSelectedWatchPointViewer.__setRowSelectedDWatchPointViewer.__setRowSelectedT>???WatchPointViewer.__resortWatchPointViewer.__resortDWatchPointViewer.__resort MYou2M\TGG=WidgetWorkspace (Constructor)WidgetWorkspace (Constructor)WidgetWorkspace.__init__7S+++WidgetWorkspaceWidgetWorkspaceWidgetWorkspaceIR777WidgetView.uiFileNameWidgetView.uiFileNameWidgetView.uiFileName@Q111WidgetView.isValidWidgetView.isValidWidgetView.isValidLP999WidgetView.buildWidgetWidgetView.buildWidgetWidgetView.buildWidgetXOAAAWidgetView.__rebuildWidgetWidgetView.__rebuildWidgetWidgetView.__rebuildWidgetMN==3WidgetView (Constructor)WidgetView (Constructor)WidgetView.__init__(M!!!WidgetViewWidgetViewWidgetView[LCCCWhitespace.not_less_witnessWhitespace.not_less_witnessWhitespace.not_less_witness^KEEEWhitespace.not_equal_witnessWhitespace.not_equal_witnessWhitespace.not_equal_witnessjJMMMWhitespace.longest_run_of_spacesWhitespace.longest_run_of_spacesWhitespace.longest_run_of_spaces7I+++Whitespace.lessWhitespace.lessWhitespace.less A8p\|A8^;;WizardPlugins (Package)WizardPlugins (Package)hv]UUUWidgetWorkspace.toggleSelectedWidgetWidgetWorkspace.toggleSelectedWidgetWidgetWorkspace.toggleSelectedWidgetd\IIIWidgetWorkspace.showWindowMenuWidgetWorkspace.showWindowMenuWidgetWorkspace.showWindowMenuX[AAAWidgetWorkspace.loadWidgetWidgetWorkspace.loadWidgetWidgetWorkspace.loadWidgetXZAAAWidgetWorkspace.hasWidgetsWidgetWorkspace.hasWidgetsWidgetWorkspace.hasWidgets[YCCCWidgetWorkspace.eventFilterWidgetWorkspace.eventFilterWidgetWorkspace.eventFilter[XCCCWidgetWorkspace.closeWidgetWidgetWorkspace.closeWidgetWidgetWorkspace.closeWidgetgWKKKWidgetWorkspace.closeAllWidgetsWidgetWorkspace.closeAllWidgetsWidgetWorkspace.closeAllWidgetsdVIIIWidgetWorkspace.__toggleWidgetWidgetWorkspace.__toggleWidgetWidgetWorkspace.__toggleWidget^UEEEWidgetWorkspace.__findWidgetWidgetWorkspace.__findWidgetWidgetWorkspace.__findWidget @Z'_]@Ij777Workspace._removeViewWorkspace._removeViewMWorkspace._removeViewUi???Workspace._removeAllViewsWorkspace._removeAllViewsMWorkspace._removeAllViewsvhUUUWorkspace._modificationStatusChangedWorkspace._modificationStatusChangedMWorkspace._modificationStatusChanged^gEEEWorkspace._initWindowActionsWorkspace._initWindowActionsMWorkspace._initWindowActions@f111Workspace._addViewWorkspace._addViewMWorkspace._addView[eCCCWorkspace.__windowActivatedWorkspace.__windowActivatedMWorkspace.__windowActivatedadGGGWorkspace.__restoreAllWindowsWorkspace.__restoreAllWindowsMWorkspace.__restoreAllWindowsacGGGWorkspace.__iconizeAllWindowsWorkspace.__iconizeAllWindowsMWorkspace.__iconizeAllWindows0b33Workspace (Package)Workspace (Package)_.a11Workspace (Module)Workspace (Module)MJ`;;1Workspace (Constructor)Workspace (Constructor)MWorkspace.__init__%_WorkspaceWorkspaceMWorkspace RV{;]R=wAAXMLEntityResolver (Module)XMLEntityResolver (Module)w;;;XbelReader.__readFolderXbelReader.__readFolderXbelReader.__readFolder^=EEEXbelReader.__readDescriptionXbelReader.__readDescriptionXbelReader.__readDescriptiona<GGGXbelReader.__readBookmarkNodeXbelReader.__readBookmarkNodeXbelReader.__readBookmarkNode &t409Q&(V!!!__kdeAbout__kdeAbout__kdeAbout@U111__getPygmentsLexer__getPygmentsLexer__getPygmentsLexer7T+++__getLowestFlag__getLowestFlag__getLowestFlag.S%%%__getGuiItem__getGuiItem__getGuiItem7R+++__convertFilter__convertFilter__convertFilterJQ;;1_ClbrBase (Constructor)_ClbrBase (Constructor)_ClbrBase.__init__%P_ClbrBase_ClbrBase_ClbrBaseLO999ZoomDialog.getZoomSizeZoomDialog.getZoomSizeZoomDialog.getZoomSize0N33ZoomDialog (Module)ZoomDialog (Module)MM==3ZoomDialog (Constructor)ZoomDialog (Constructor)ZoomDialog.__init__(L!!!ZoomDialogZoomDialogZoomDialogK___XmlEntityResolver.resolveUndeclaredEntityXmlEntityResolver.resolveUndeclaredEntityXmlEntityResolver.resolveUndeclaredEntity=J///XmlEntityResolverXmlEntityResolverXmlEntityResolver:I---XbelWriter.writeXbelWriter.writeXbelWriter.writeLH999XbelWriter.__writeItemXbelWriter.__writeItemXbelWriter.__writeItem Wa y0j-WeeMMC__kdeKQApplication (Constructor)__kdeKQApplication (Constructor)__kdeKQApplication.__init__@d111__kdeKQApplication__kdeKQApplication__kdeKQApplication(c!!!__kdeIsKDE__kdeIsKDE__kdeIsKDE:b---__kdeInformation__kdeInformation__kdeInformation.a%%%__kdeGetText__kdeGetText__kdeGetTextF`555__kdeGetSaveFileName__kdeGetSaveFileName__kdeGetSaveFileNameI_777__kdeGetOpenFileNames__kdeGetOpenFileNames__kdeGetOpenFileNamesF^555__kdeGetOpenFileName__kdeGetOpenFileName__kdeGetOpenFileName.]%%%__kdeGetItem__kdeGetItem__kdeGetItem+\###__kdeGetInt__kdeGetInt__kdeGetInt.[%%%__kdeGetFont__kdeGetFont__kdeGetFontUZ???__kdeGetExistingDirectory__kdeGetExistingDirectory__kdeGetExistingDirectory4Y)))__kdeGetDouble__kdeGetDouble__kdeGetDouble1X'''__kdeGetColor__kdeGetColor__kdeGetColor1W'''__kdeCritical__kdeCritical__kdeCritical }F+WdoIII__kdeKQProgressDialog.setValue__kdeKQProgressDialog.setValue__kdeKQProgressDialog.setValuejnMMM__kdeKQProgressDialog.setMinimum__kdeKQProgressDialog.setMinimum__kdeKQProgressDialog.setMinimumjmMMM__kdeKQProgressDialog.setMaximum__kdeKQProgressDialog.setMaximum__kdeKQProgressDialog.setMaximumdlIII__kdeKQProgressDialog.setLabel__kdeKQProgressDialog.setLabel__kdeKQProgressDialog.setLabel[kCCC__kdeKQProgressDialog.reset__kdeKQProgressDialog.reset__kdeKQProgressDialog.resetnjSSI__kdeKQProgressDialog (Constructor)__kdeKQProgressDialog (Constructor)__kdeKQProgressDialog.__init__Ii777__kdeKQProgressDialog__kdeKQProgressDialog__kdeKQProgressDialog4h)))__kdeKQPrinter__kdeKQPrinter__kdeKQPrinter@g111__kdeKQPrintDialog__kdeKQPrintDialog__kdeKQPrintDialog=f///__kdeKQMainWindow__kdeKQMainWindow__kdeKQMainWindow +D_ {5 h+:}---__qtKQMainWindow__qtKQMainWindow__qtKQMainWindowb|KKA__qtKQApplication (Constructor)__qtKQApplication (Constructor)__qtKQApplication.__init__={///__qtKQApplication__qtKQApplication__qtKQApplication%z__qtIsKDE__qtIsKDE__qtIsKDECy333__qtGetSaveFileName__qtGetSaveFileName__qtGetSaveFileNameFx555__qtGetOpenFileNames__qtGetOpenFileNames__qtGetOpenFileNamesCw333__qtGetOpenFileName__qtGetOpenFileName__qtGetOpenFileNameRv===__qtGetExistingDirectory__qtGetExistingDirectory__qtGetExistingDirectory+u###__nrButtons__nrButtons__nrButtons.t%%%__kdeWarning__kdeWarning__kdeWarning1s'''__kdeQuestion__kdeQuestion__kdeQuestionOr;;;__kdePyKdeVersionString__kdePyKdeVersionString__kdePyKdeVersionStringIq777__kdeKdeVersionString__kdeKdeVersionString__kdeKdeVersionStringmpOOO__kdeKQProgressDialog.wasCanceled__kdeKQProgressDialog.wasCanceled__kdeKQProgressDialog.wasCanceled 1Ck4g${S1 _indent_indent _indent% _filename_filename_filename` GGG_debugclient_start_new_thread_debugclient_start_new_thread _debugclient_start_new_threadC 333_buildChildrenLists_buildChildrenLists_buildChildrenLists@ 111__workingDirectory__workingDirectory__workingDirectory1'''__showwarning__showwarning__showwarning1'''__setAction35__setAction35__setAction35+###__setAction__setAction__setAction4)))__saveShortcut__saveShortcut__saveShortcut4)))__readShortcut__readShortcut__readShortcut=///__qtReorderFilter__qtReorderFilter__qtReorderFilterL999__qtPyKdeVersionString__qtPyKdeVersionString__qtPyKdeVersionStringF555__qtKdeVersionString__qtKdeVersionString__qtKdeVersionStringF555__qtKQProgressDialog__qtKQProgressDialog__qtKQProgressDialog1'''__qtKQPrinter__qtKQPrinter__qtKQPrinter=~///__qtKQPrintDialog__qtKQPrintDialog__qtKQPrintDialog @pFR0]"k@("!!!copyToFilecopyToFile2copyToFile7!+++convertLineEndsconvertLineEndsconvertLineEnds. %%%context_diffcontext_diffcontext_diffcontextcontext-context(!!!compile_uicompile_uicompile_ui8;;compileUiFiles (Module)compileUiFiles (Module)4)))compileUiFilescompileUiFilescompileUiFiles.%%%compileUiDircompileUiDircompileUiDircompilecompilecompile+###compactPathcompactPathcompactPathcloseclose$closecleanUpcleanUp2cleanUpR===checkBlacklistedVersionscheckBlacklistedVersionscheckBlacklistedVersionscheckcheckcheckanalyzeanalyzeanalyze+###amendConfigamendConfig+amendConfig1'''addSearchPathaddSearchPathaddSearchPath'!!!addActionsaddActionsOaddActionsaboutQtaboutQtaboutQtaboutaboutaboutO;;;_percentReplacementFunc_percentReplacementFunc_percentReplacementFunc I}Lee@hI3decodedecodedecode<2///debug_thread_infodebug_thread_info-debug_thread_info41)))dateFromTime_tdateFromTime_t+dateFromTime_t0033cursors_rc (Module)cursors_rc (Module),///cursors (Package)cursors (Package)K".criticalcriticalcritical7-+++createPyWrappercreatePyWrapper2createPyWrapper:,---createMainWidgetcreateMainWidgetcreateMainWidget@+111createMacAppBundlecreateMacAppBundle2createMacAppBundleC*333createInstallConfigcreateInstallConfig2createInstallConfigL)999createGlobalPluginsDircreateGlobalPluginsDir2createGlobalPluginsDirC(333createDefaultConfigcreateDefaultConfig+createDefaultConfigO';;;createConfigurationPagecreateConfigurationPagecreateConfigurationPage.&%%%createConfigcreateConfig2createConfig<%///createActionGroupcreateActionGroupOcreateActionGroup$createcreateZcreate"#copyTreecopyTree2copyTree ,p<U{Du,FEIIeric4_pluginuninstall (Module)eric4_pluginuninstall (Module)'HDKKeric4_pluginrepository (Module)eric4_pluginrepository (Module)&BCEEeric4_plugininstall (Module)eric4_plugininstall (Module)%==eric4_configure (Module)eric4_configure (Module) 6=99eric4_compare (Module)eric4_compare (Module).<11eric4_api (Module)eric4_api (Module)(;++eric4 (Package)eric4 (Package){&:))eric4 (Module)eric4 (Module)9encodeencodeencode@8111doDependancyChecksdoDependancyChecks2doDependancyChecks17'''displayStringdisplayStringdisplayString(6!!!direntriesdirentriesdirentries45)))decodeWithHashdecodeWithHashdecodeWithHash+4###decodeBytesdecodeBytesdecodeBytes ?Y&i*H!?=W///exportPreferencesexportPreferencesexportPreferencesVexitexit2exit4U)))exeDisplayDataexeDisplayDataexeDisplayData(T!!!excepthookexcepthookexcepthook$SeventPolleventPoll-eventPoll$ReventLoopeventLoop-eventLoop:Q---escape_uentitiesescape_uentitiesescape_uentities7P+++escape_entitiesescape_entitiesescape_entities3O77eric4dbgstub (Module)eric4dbgstub (Module)2N55eric4config (Module)eric4config (Module)0KAAeric4_uipreviewer (Module)eric4_uipreviewer (Module)->JAAeric4_trpreviewer (Module)eric4_trpreviewer (Module),0I33eric4_tray (Module)eric4_tray (Module)+x/iCy333getEnvironmentEntrygetEnvironmentEntrygetEnvironmentEntry7x+++getEditorTypinggetEditorTypinggetEditorTypingCw333getEditorOtherFontsgetEditorOtherFontsgetEditorOtherFontsFv555getEditorLexerAssocsgetEditorLexerAssocsgetEditorLexerAssocsCu333getEditorLexerAssocgetEditorLexerAssocgetEditorLexerAssoc=t///getEditorKeywordsgetEditorKeywordsgetEditorKeywords=s///getEditorExportergetEditorExportergetEditorExporter7r+++getEditorColourgetEditorColourgetEditorColour.q%%%getEditorAPIgetEditorAPIgetEditorAPI%pgetEditorgetEditorgetEditor%ogetDoublegetDoublegetDoublengetDirsgetDirsgetDirs[mCCCgetDefaultLexerAssociationsgetDefaultLexerAssociationsgetDefaultLexerAssociations+l###getDebuggergetDebuggergetDebugger"kgetCorbagetCorbagetCorba1j'''getConfigPathgetConfigPath+getConfigPath QwI'~\(cQI 777getPercentReplacementgetPercentReplacementgetPercentReplacement: ---getOpenFileNamesgetOpenFileNamesgetOpenFileNames7 +++getOpenFileNamegetOpenFileNamegetOpenFileNameL 999getOpenFileFiltersListgetOpenFileFiltersListgetOpenFileFiltersList7+++getMultiProjectgetMultiProjectgetMultiProject"getLexergetLexergetLexergetItemgetItemgetItemgetIntgetIntgetInt"getIconsgetIconsgetIcons1'''getIconEditorgetIconEditorgetIconEditorgetIcongetIcongetIcon(!!!getHomeDirgetHomeDirgetHomeDirgetHelpgetHelpgetHelp+###getGraphicsgetGraphicsgetGraphics+~###getGeometrygetGeometrygetGeometry}getFontgetFontgetFont+|###getExportergetExportergetExporterF{555getExistingDirectorygetExistingDirectorygetExistingDirectory=z///getExecutablePathgetExecutablePathgetExecutablePath /CL<f/4)))getQtMacBundlegetQtMacBundlegetQtMacBundleI777getQt4TranslationsDirgetQt4TranslationsDirgetQt4TranslationsDir.%%%getQt4DocDirgetQt4DocDirgetQt4DocDirgetQtgetQtgetQt:---getPythonVersiongetPythonVersiongetPythonVersionT???getPythonModulesDirectorygetPythonModulesDirectory}getPythonModulesDirectory:---getPythonLibPathgetPythonLibPathgetPythonLibPath%getPythongetPythongetPythonQ===getPyQt4ModulesDirectorygetPyQt4ModulesDirectory}getPyQt4ModulesDirectoryL999getProjectBrowserFlagsgetProjectBrowserFlagsgetProjectBrowserFlagsO;;;getProjectBrowserColourgetProjectBrowserColourgetProjectBrowserColour(!!!getProjectgetProjectgetProject(!!!getPrintergetPrintergetPrinter:---getPluginManagergetPluginManagergetPluginManager%getPixmapgetPixmapgetPixmapU ???getPercentReplacementHelpgetPercentReplacementHelpgetPercentReplacementHelp Gx>{/z@iG/getUsergetUsergetUser+.###getUILayoutgetUILayoutgetUILayout1-'''getUILanguagegetUILanguagegetUILanguage,getUIgetUIgetUI4+)))getTrayStartergetTrayStartergetTrayStarter*getTextgetTextgetText7)+++getTestFileNamegetTestFileNamegetTestFileName.(%%%getTemplatesgetTemplatesgetTemplates"'getTasksgetTasksgetTasks%&getSystemgetSystemgetSystem4%)))getSymlinkIcongetSymlinkIcongetSymlinkIconI$777getSupportedLanguagesgetSupportedLanguagesgetSupportedLanguagesC#333getSupportedFormatsgetSupportedFormatsgetSupportedFormats"getSockgetSock$getSock"!getShellgetShellgetShell4 )))getServersPathgetServersPath+getServersPath7+++getSaveFileNamegetSaveFileNamegetSaveFileNameL999getSaveFileFiltersListgetSaveFileFiltersListgetSaveFileFiltersList6+++getRegistryDatagetRegistryData7getRegistryData 13hG}7 k17B+++importShortcutsimportShortcutsimportShortcuts=A///importPreferencesimportPreferencesimportPreferences*@--idlclbr (Module)idlclbr (Module) .?%%%html_uencodehtml_uencodehtml_uencode+>###html_encodehtml_encodehtml_encodeC=333hasEnvironmentEntryhasEnvironmentEntryhasEnvironmentEntryO<;;;handleSingleApplicationhandleSingleApplicationhandleSingleApplication(;!!!handleArgshandleArgshandleArgs:getusergetusergetuser)9--getpass (Module)getpass (Module)8getpassgetpassgetpass'7!!!get_threadget_thread-get_thread(6!!!get_codingget_codingget_coding<5///get_class_membersget_class_membersget_class_members44)))getViewManagergetViewManagergetViewManagerI3777getVcsSystemIndicatorgetVcsSystemIndicatorgetVcsSystemIndicator12'''getVarFiltersgetVarFiltersgetVarFilters1getVCSgetVCSgetVCS+0###getUserNamegetUserNamegetUserName Nt:i2f5vN%TisPatchedisPatched4isPatched0S'''isMacPlatformisMacPlatform}isMacPlatform6R+++isLinuxPlatformisLinuxPlatform}isLinuxPlatform4Q)))isKDEAvailableisKDEAvailableisKDEAvailablePisKDEisKDEisKDE.O%%%isExecutableisExecutableisExecutable.N%%%isConfiguredisConfiguredisConfigured$Minterruptinterrupt-interruptCL333installTranslationsinstallTranslations1installTranslations+K###installEricinstallEric2installEric4J77install-i18n (Module)install-i18n (Module)1*I--install (Module)install (Module)2^HEEEinitializeResourceSearchPathinitializeResourceSearchPathinitializeResourceSearchPath@G111initRecentSettingsinitRecentSettingsinitRecentSettings7F+++initPreferencesinitPreferencesinitPreferences+E###initGlobalsinitGlobals2initGlobals-D%%%initDebuggerinitDebuggerinitDebugger+C###informationinformationinformation /~\qY+Z o/=g///parseOptionStringparseOptionStringparseOptionStringLf999parseEnvironmentStringparseEnvironmentStringparseEnvironmentString.e%%%normjoinpathnormjoinpathnormjoinpath.d%%%normcasepathnormcasepathnormcasepath7c+++normcaseabspathnormcaseabspathnormcaseabspath+b###normabspathnormabspathnormabspath7a+++normabsjoinpathnormabsjoinpathnormabsjoinpath9`---make_thread_listmake_thread_list-make_thread_list*_###make_parsermake_parser{make_parser+^###makeAppInfomakeAppInfomakeAppInfo]mainmainmain7\+++loadTranslatorsloadTranslatorsloadTranslatorsO[;;;loadTranslatorForLocaleloadTranslatorForLocaleloadTranslatorForLocaleZlineseplineseplinesep:Y---kdeVersionStringkdeVersionStringkdeVersionStringXjoinextjoinextjoinext"WisinpathisinpathisinpathVisattyisatty$isatty!!!shutilCopyshutilCopy2shutilCopy==///shouldResetLayoutshouldResetLayoutshouldResetLayout4<)))setViewManagersetViewManagersetViewManager1;'''setVarFilterssetVarFilterssetVarFilters:setVCSsetVCSsetVCS9setUsersetUsersetUser+8###setUILayoutsetUILayoutsetUILayout17'''setUILanguagesetUILanguagesetUILanguage6setUIsetUIsetUI45)))setTrayStartersetTrayStartersetTrayStarter.4%%%setTemplatessetTemplatessetTemplates FkCN2ihFYwarningwarningwarningXversionversionversion8W;;vcsSubversion (Package)vcsSubversion (Package)[.V11vcsPySvn (Package)vcsPySvn (Package)YpUQQQvcsCommandOptionsDialog.getOptionsvcsCommandOptionsDialog.getOptionsvcsCommandOptionsDialog.getOptionstTWWMvcsCommandOptionsDialog (Constructor)vcsCommandOptionsDialog (Constructor)vcsCommandOptionsDialog.__init__OS;;;vcsCommandOptionsDialogvcsCommandOptionsDialogvcsCommandOptionsDialogRusageusageusage7Q+++unregisterLexerunregisterLexerunregisterLexer1P'''uninstallEricuninstallEric5uninstallEric.O11uninstall (Module)uninstall (Module)5.N%%%unified_diffunified_diffunified_diff"M%%uic (Module)uic (Module)%LuiStartUpuiStartUpuiStartUp'K!!!traceRuby?traceRuby?-traceRuby?%JtoUnicodetoUnicodetoUnicode@I111toNativeSeparatorstoNativeSeparatorstoNativeSeparators gL'_!!!writelineswritelines$writelines:^---writeEncodedFilewriteEncodedFilewriteEncodedFile]writewrite$write+\###wrapperNamewrapperName2wrapperName([!!!win32_Killwin32_Killwin32_Kill=Z///win32_GetUserNamewin32_GetUserNamewin32_GetUserName p{tmf_XQJC<5.'  xqjc\UNG@92+$|ung`YRKD=6/(! p&o%n%m%l$k$j$i#h#g#f"e"d"c!b!a!` _ ^ ]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)(' & % $ # " !                gwog_WOG?7/'wog_WOG?7/'wog_WOG?7/'WHVHUGTGSGRFQFPFOENEMELDKDJDICHCGCFBEBDBCABAAA@@?@>@=?<?;?:>9>8>7=6=5=4<3<2<1;0;/;.:-:,:+9*9)9(8'8&8%7$7#7"6!6 6555444333222111000 / / / . ..---,,,+++~*}*|*{)z)y)x(w(v(u't's'r&q& exph`XPH@80( xph`XPH@80( xph`XPH@80( <j;i:i9i8h7h6h5g4g3g2f1f0f/e.e-e,d+d*d)c(c'c&b%b$b#a"a!a ```___^^^]]]\\\[[[Z Z Z Y Y YXXXWWWVVVU~U}U|T{TzTySxSwSvRuRtRsQrQqQpPoPnPmOlOkOjNiNhNgMfMeMdLcLbLaK`K_K^J]J\J[IZIYIXH bxph`XPH@80( xph`XPH@80( zqh_VMD;2)      ~}|{z~y~x~w}v}u}t|s|r|q{p{o{nzmzlzkyjyiyhxgxfxewdwcwbvav`v_u^u]u\t[tZtYsXsWsVrUrTrSqRqQqPpOpNpMoLoKoJnInHnGmFmEmDlClBlAk@k?k>j=j \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!  \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' VUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!      ~}|{ \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' 210/.-,+*)('&%$#"!      ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXW \ypg^ULC:1( }tkbYPG>5,#xof]TKB90'      ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543 \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' j$i#h#g#f"e"d"c!b!a!` _ ^ ]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)(' & % $ # " !           \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' FBEBDBCABAAA@@?@>@=?<?;?:>9>8>7=6=5=4<3<2<1;0;/;.:-:,:+9*9)9(8'8&8%7$7#7"6!6 6555444333222111000 / / / . ..---,,,+++~*}*|*{)z)y)x(w(v(u't's'r&q&p&o%n%m%l$k$ \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' "a!a ```___^^^]]]\\\[[[Z Z Z Y Y YXXXWWWVVVU~U}U|T{TzTySxSwSvRuRtRsQrQqQpPoPnPmOlOkOjNiNhNgMfMeMdLcLbLaK`K_K^J]J\J[IZIYIXHWHVHUGTGSGRFQFPFOENEMELDKDJDICHCGC \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' ~}|{z~y~x~w}v}u}t|s|r|q{p{o{nzmzlzkyjyiyhxgxfxewdwcwbvav`v_u^u]u\t[tZtYsXsWsVrUrTrSqRqQqPpOpNpMoLoKoJnInHnGmFmEmDlClBlAk@k?k>j=j<j;i:i9i8h7h6h5g4g3g2f1f0f/e.e-e,d+d*d)c(c'c&b%b$b#a \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!       \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' 6543210/.-,+*)('&%$#"!      ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ \ypg^ULC:1( }tkbYPG>5,#xof]TKB90'      ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:987 \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' nmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!  \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' JIHGFEDCBA@?>=<;:9876543210/.-,+*)(' & % $ # " !               ~}|{zyxwvutsrqpo \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' &8%7$7#7"6!6 6555444333222111000 / / / . ..---,,,+++~*}*|*{)z)y)x(w(v(u't's'r&q&p&o%n%m%l$k$j$i#h#g#f"e"d"c!b!a!` _ ^ ]\[ZYXWVUTSRQPONMLK \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' VVVU~U}U|T{TzTySxSwSvRuRtRsQrQqQpPoPnPmOlOkOjNiNhNgMfMeMdLcLbLaK`K_K^J]J\J[IZIYIXHWHVHUGTGSGRFQFPFOENEMELDKDJDICHCGCFBEBDBCABAAA@@?@>@=?<?;?:>9>8>7=6=5=4<3<2<1;0;/;.:-:,:+9*9)9(8'8 \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' ^u]u\t[tZtYsXsWsVrUrTrSqRqQqPpOpNpMoLoKoJnInHnGmFmEmDlClBlAk@k?k>j=j<j;i:i9i8h7h6h5g4g3g2f1f0f/e.e-e,d+d*d)c(c'c&b%b$b#a"a!a ```___^^^]]]\\\[[[Z Z Z Y Y YXXXWWW \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' :9876543210/.-,+*)('&%$#"!      ~}|{z~y~x~w}v}u}t|s|r|q{p{o{nzmzlzkyjyiyhxgxfxewdwcwbvav`v_u \ypg^ULC:1( }tkbYPG>5,#xof]TKB90'      ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<; \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' rqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!  \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' NMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!      ~}|{zyxwvuts \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' *)(' & % $ # " !               ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPO \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' --,,,+++~*}*|*{)z)y)x(w(v(u't's'r&q&p&o%n%m%l$k$j$i#h#g#f"e"d"c!b!a!` _ ^ ]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+ \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' bLaK`K_K^J]J\J[IZIYIXHWHVHUGTGSGRFQFPFOENEMELDKDJDICHCGCFBEBDBCABAAA@@?@>@=?<?;?:>9>8>7=6=5=4<3<2<1;0;/;.:-:,:+9*9)9(8'8&8%7$7#7"6!6 6555444333222111000 / / / . ..- \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' >j=j<j;i:i9i8h7h6h5g4g3g2f1f0f/e.e-e,d+d*d)c(c'c&b%b$b#a"a!a ```___^^^]]]\\\[[[Z Z Z Y Y YXXXWWWVVVU~U}U|T{TzTySxSwSvRuRtRsQrQqQpPoPnPmOlOkOjNiNhNgMfMeMdLcL \ypg^ULC:1( }tkbYPG>5,#xof]TKB90'      ~}|{z~y~x~w}v}u}t|s|r|q{p{o{nzmzlzkyjyiyhxgxfxewdwcwbvav`v_u^u]u\t[tZtYsXsWsVrUrTrSqRqQqPpOpNpMoLoKoJnInHnGmFmEmDlClBlAk@k?k \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' vutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!  \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' RQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!      ~}|{zyxw \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' .-,+*)('&%$#"!      ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTS \ypg^ULC:1( }tkbYPG>5,#xof]TKB90'   ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/ \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' f"e"d"c!b!a!` _ ^ ]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)(' & % $ # " !              \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' BAAA@@?@>@=?<?;?:>9>8>7=6=5=4<3<2<1;0;/;.:-:,:+9*9)9(8'8&8%7$7#7"6!6 6555444333222111000 / / / . ..---,,,+++~*}*|*{)z)y)x(w(v(u't's'r&q&p&o%n%m%l$k$j$i#h#g# \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' `___^^^]]]\\\[[[Z Z Z Y Y YXXXWWWVVVU~U}U|T{TzTySxSwSvRuRtRsQrQqQpPoPnPmOlOkOjNiNhNgMfMeMdLcLbLaK`K_K^J]J\J[IZIYIXHWHVHUGTGSGRFQFPFOENEMELDKDJDICHCGCFBEBDBCA \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' z~y~x~w}v}u}t|s|r|q{p{o{nzmzlzkyjyiyhxgxfxewdwcwbvav`v_u^u]u\t[tZtYsXsWsVrUrTrSqRqQqPpOpNpMoLoKoJnInHnGmFmEmDlClBlAk@k?k>j=j<j;i:i9i8h7h6h5g4g3g2f1f0f/e.e-e,d+d*d)c(c'c&b%b$b#a"a!a `` \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' VUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!      ~}|{ \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' 210/.-,+*)('&%$#"!      ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXW \ypg^ULC:1( }tkbYPG>5,#xof]TKB90'      ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543 \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' jihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!  \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' FEDCBA@?>=<;:9876543210/.-,+*)(' & % $ # " !               ~}|{zyxwvutsrqponmlk \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' "6!6 6555444333222111000 / / / . ..---,,,+++~*}*|*{)z)y)x(w(v(u't's'r&q&p&o%n%m%l$k$j$i#h#g#f"e"d"c!b!a!` _ ^ ]\[ZYXWVUTSRQPONMLKJIHG \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' ~U}U|T{TzTySxSwSvRuRtRsQrQqQpPoPnPmOlOkOjNiNhNgMfMeMdLcLbLaK`K_K^J]J\J[IZIYIXHWHVHUGTGSGRFQFPFOENEMELDKDJDICHCGCFBEBDBCABAAA@@?@>@=?<?;?:>9>8>7=6=5=4<3<2<1;0;/;.:-:,:+9*9)9(8'8&8%7$7#7 \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' ZtYsXsWsVrUrTrSqRqQqPpOpNpMoLoKoJnInHnGmFmEmDlClBlAk@k?k>j=j<j;i:i9i8h7h6h5g4g3g2f1f0f/e.e-e,d+d*d)c(c'c&b%b$b#a"a!a ```___^^^]]]\\\[[[Z Z Z Y Y YXXXWWWVVVU \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' 6543210/.-,+*)('&%$#"!      ~}|{z~y~x~w}v}u}t|s|r|q{p{o{nzmzlzkyjyiyhxgxfxewdwcwbvav`v_u^u]u\t[t \ypg^ULC:1( }tkbYPG>5,#xof]TKB90'      ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:987 \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' nmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!  \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' JIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!      ~}|{zyxwvutsrqpo \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' & % $ # " !               ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLK \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' ,+++~*}*|*{)z)y)x(w(v(u't's'r&q&p&o%n%m%l$k$j$i#h#g#f"e"d"c!b!a!` _ ^ ]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)(' \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' ^J]J\J[IZIYIXHWHVHUGTGSGRFQFPFOENEMELDKDJDICHCGCFBEBDBCABAAA@@?@>@=?<?;?:>9>8>7=6=5=4<3<2<1;0;/;.:-:,:+9*9)9(8'8&8%7$7#7"6!6 6555444333222111000 / / / . ..---,, \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' :i9i8h7h6h5g4g3g2f1f0f/e.e-e,d+d*d)c(c'c&b%b$b#a"a!a ```___^^^]]]\\\[[[Z Z Z Y Y YXXXWWWVVVU~U}U|T{TzTySxSwSvRuRtRsQrQqQpPoPnPmOlOkOjNiNhNgMfMeMdLcLbLaK`K_K \ypg^ULC:1( }tkbYPG>5,#xof]TKB90'      ~}|{z~y~x~w}v}u}t|s|r|q{p{o{nzmzlzkyjyiyhxgxfxewdwcwbvav`v_u^u]u\t[tZtYsXsWsVrUrTrSqRqQqPpOpNpMoLoKoJnInHnGmFmEmDlClBlAk@k?k>j=j<j;i \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' rqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!  \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' NMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!      ~}|{zyxwvuts \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' *)('&%$#"!      ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPO \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+ \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' b!a!` _ ^ ]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)(' & % $ # " !                \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' >@=?<?;?:>9>8>7=6=5=4<3<2<1;0;/;.:-:,:+9*9)9(8'8&8%7$7#7"6!6 6555444333222111000 / / / . ..---,,,+++~*}*|*{)z)y)x(w(v(u't's'r&q&p&o%n%m%l$k$j$i#h#g#f"e"d"c! \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' ^^^]]]\\\[[[Z Z Z Y Y YXXXWWWVVVU~U}U|T{TzTySxSwSvRuRtRsQrQqQpPoPnPmOlOkOjNiNhNgMfMeMdLcLbLaK`K_K^J]J\J[IZIYIXHWHVHUGTGSGRFQFPFOENEMELDKDJDICHCGCFBEBDBCABAAA@@?@ \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' v}u}t|s|r|q{p{o{nzmzlzkyjyiyhxgxfxewdwcwbvav`v_u^u]u\t[tZtYsXsWsVrUrTrSqRqQqPpOpNpMoLoKoJnInHnGmFmEmDlClBlAk@k?k>j=j<j;i:i9i8h7h6h5g4g3g2f1f0f/e.e-e,d+d*d)c(c'c&b%b$b#a"a!a ```___ \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' RQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!      ~}|{z~y~x~w} \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' .-,+*)('&%$#"!      ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTS \ypg^ULC:1( }tkbYPG>5,#xof]TKB90'   ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/ \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' fedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!     \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' BA@?>=<;:9876543210/.-,+*)(' & % $ # " !               ~}|{zyxwvutsrqponmlkjihg \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' 55444333222111000 / / / . ..---,,,+++~*}*|*{)z)y)x(w(v(u't's'r&q&p&o%n%m%l$k$j$i#h#g#f"e"d"c!b!a!` _ ^ ]\[ZYXWVUTSRQPONMLKJIHGFEDC \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' zTySxSwSvRuRtRsQrQqQpPoPnPmOlOkOjNiNhNgMfMeMdLcLbLaK`K_K^J]J\J[IZIYIXHWHVHUGTGSGRFQFPFOENEMELDKDJDICHCGCFBEBDBCABAAA@@?@>@=?<?;?:>9>8>7=6=5=4<3<2<1;0;/;.:-:,:+9*9)9(8'8&8%7$7#7"6!6 65 \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' VrUrTrSqRqQqPpOpNpMoLoKoJnInHnGmFmEmDlClBlAk@k?k>j=j<j;i:i9i8h7h6h5g4g3g2f1f0f/e.e-e,d+d*d)c(c'c&b%b$b#a"a!a ```___^^^]]]\\\[[[Z Z Z Y Y YXXXWWWVVVU~U}U|T{T \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' 210/.-,+*)('&%$#"!      ~}|{z~y~x~w}v}u}t|s|r|q{p{o{nzmzlzkyjyiyhxgxfxewdwcwbvav`v_u^u]u\t[tZtYsXsWs \ypg^ULC:1( }tkbYPG>5,#xof]TKB90'      ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543 \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' jihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!  \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' FEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!      ~}|{zyxwvutsrqponmlk \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' " !                                         ~ }|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHG \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' ~ *} *| *{ )z )y )x (w (v (u 't 's 'r &q &p &o %n %m %l $k $j $i #h #g #f "e "d "c !b !a !` _ ^ ] \ [ Z Y X W V U T S R Q P O N M L K J I H G F E D C B A @ ? > = < ; : 9 8 7 6 5 4 3 2 1 0 / . - , + * ) ( ' & % $ # \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' Z IY IX HW HV HU GT GS GR FQ FP FO EN EM EL DK DJ DI CH CG CF BE BD BC AB AA A@ @? @> @= ?< ?; ?: >9 >8 >7 =6 =5 =4 <3 <2 <1 ;0 ;/ ;. :- :, :+ 9* 9) 9( 8' 8& 8% 7$ 7# 7" 6! 6  6 5 5 5 4 4 4 3 3 3 2 2 2 1 1 1 0 0 0  /  /  /  .  . . - - - , , , + + + \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' 6 h5 g4 g3 g2 f1 f0 f/ e. e- e, d+ d* d) c( c' c& b% b$ b# a" a! a  ` ` ` _ _ _ ^ ^ ^ ] ] ] \ \ \ [ [ [ Z  Z  Z  Y  Y  Y X X X W W W V V V U~ U} U| T{ Tz Ty Sx Sw Sv Ru Rt Rs Qr Qq Qp Po Pn Pm Ol Ok Oj Ni Nh Ng Mf Me Md Lc Lb La K` K_ K^ J] J\ J[ I \ypg^ULC:1( }tkbYPG>5,#xof]TKB90'                          ~ } | { z ~y ~x ~w }v }u }t |s |r |q {p {o {n zm zl zk yj yi yh xg xf xe wd wc wb va v` v_ u^ u] u\ t[ tZ tY sX sW sV rU rT rS qR qQ qP pO pN pM oL oK oJ nI nH nG mF mE mD lC lB lA k@ k? k> j= j< j; i: i9 i8 h7 h \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' n m l k j i h g f e d c b a ` _ ^ ] \ [ Z Y X W V U T S R Q P O N M L K J I H G F E D C B A @ ? > = < ; : 9 8 7 6 5 4 3 2 1 0 / . - , + * ) ( ' & % $ # " !                \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' J I H G F E D C B A @ ? > = < ; : 9 8 7 6 5 4 3 2 1 0 / . - , + * ) ( ' & % $ # " !                                         ~ } | { z y x w v u t s r q p o \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' & % $ # " !                                         ~ } | { z y x w v u t s r q p o n m l k j i h g f e d c b a ` _ ^ ] \ [ Z Y X W V U T S R Q P O N M L K \ypg^ULC:1( }tkbYPG>5,#xof]TKB90'     ~ } | { z y x w v u t s r q p o n m l k j i h g f e d c b a ` _ ^ ] \ [ Z Y X W V U T S R Q P O N M L K J I H G F E D C B A @ ? > = < ; : 9 8 7 6 5 4 3 2 1 0 / . - , + * ) ( ' \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' ^ ] \ [ Z Y X W V U T S R Q P O N M L K J I H G F E D C B A @ ? > = < ; : 9 8 7 6 5 4 3 2 1 0 / . - , + * ) ( ' & % $ # " !                                      \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' : >9 >8 >7 =6 =5 =4 <3 <2 <1 ;0 ;/ ;. :- :, :+ 9* 9) 9( 8' 8& 8% 7$ 7# 7" 6! 6  6 5 5 5 4 4 4 3 3 3 2 2 2 1 1 1 0 0 0  /  /  /  .  . . - - - , , , + + +~ *} *| *{ )z )y )x (w (v (u 't 's 'r &q &p &o %n %m %l $k $j $i #h #g #f "e "d "c !b !a !` _ \ypg^ULC:1( }tkbYPG>5,#xof]TKB90'  ] ] \ \ \ [ [ [ Z  Z  Z  Y  Y  Y X X X W W W V V V U~ U} U| T{ Tz Ty Sx Sw Sv Ru Rt Rs Qr Qq Qp Po Pn Pm Ol Ok Oj Ni Nh Ng Mf Me Md Lc Lb La K` K_ K^ J] J\ J[ IZ IY IX HW HV HU GT GS GR FQ FP FO EN EM EL DK DJ DI CH CG CF BE BD BC AB AA A@ @? @> @= ?< ?; ? \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' r |q {p {o {n zm zl zk yj yi yh xg xf xe wd wc wb va v` v_ u^ u] u\ t[ tZ tY sX sW sV rU rT rS qR qQ qP pO pN pM oL oK oJ nI nH nG mF mE mD lC lB lA k@ k? k> j= j< j; i: i9 i8 h7 h6 h5 g4 g3 g2 f1 f0 f/ e. e- e, d+ d* d) c( c' c& b% b$ b# a" a! a  ` ` ` _ _ _ ^ ^ ^ ] \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' N M L K J I H G F E D C B A @ ? > = < ; : 9 8 7 6 5 4 3 2 1 0 / . - , + * ) ( ' & % $ # " !                                         ~ } | { z ~y ~x ~w }v }u }t |s | \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' * ) ( ' & % $ # " !                                         ~ } | { z y x w v u t s r q p o n m l k j i h g f e d c b a ` _ ^ ] \ [ Z Y X W V U T S R Q P O \ypg^ULC:1( }tkbYPG>5,#xof]TKB90'         ~ } | { z y x w v u t s r q p o n m l k j i h g f e d c b a ` _ ^ ] \ [ Z Y X W V U T S R Q P O N M L K J I H G F E D C B A @ ? > = < ; : 9 8 7 6 5 4 3 2 1 0 / . - , + \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' b a ` _ ^ ] \ [ Z Y X W V U T S R Q P O N M L K J I H G F E D C B A @ ? > = < ; : 9 8 7 6 5 4 3 2 1 0 / . - , + * ) ( ' & % $ # " !                                 \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' > = < ; : 9 8 7 6 5 4 3 2 1 0 / . - , + * ) ( ' & % $ # " !                                         ~ } | { z y x w v u t s r q p o n m l k j i h g f e d c \ypg^ULC:1( }tkbYPG>5,#xof]TKB90'  4 3 3 3 2 2 2 1 1 1 0 0 0  /  /  /  .  . . - - - , , , + + +~ *} *| *{ )z )y )x (w (v (u 't 's 'r &q &p &o %n %m %l $k $j $i #h #g #f "e "d "c !b !a !` _ ^ ] \ [ Z Y X W V U T S R Q P O N M L K J I H G F E D C B A @ ?  \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' v Ru Rt Rs Qr Qq Qp Po Pn Pm Ol Ok Oj Ni Nh Ng Mf Me Md Lc Lb La K` K_ K^ J] J\ J[ IZ IY IX HW HV HU GT GS GR FQ FP FO EN EM EL DK DJ DI CH CG CF BE BD BC AB AA A@ @? @> @= ?< ?; ?: >9 >8 >7 =6 =5 =4 <3 <2 <1 ;0 ;/ ;. :- :, :+ 9* 9) 9( 8' 8& 8% 7$ 7# 7" 6! 6  6 5 5 5 4 4 \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' R qQ qP pO pN pM oL oK oJ nI nH nG mF mE mD lC lB lA k@ k? k> j= j< j; i: i9 i8 h7 h6 h5 g4 g3 g2 f1 f0 f/ e. e- e, d+ d* d) c( c' c& b% b$ b# a" a! a  ` ` ` _ _ _ ^ ^ ^ ] ] ] \ \ \ [ [ [ Z  Z  Z  Y  Y  Y X X X W W W V V V U~ U} U| T{ Tz Ty Sx Sw S \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' . - , + * ) ( ' & % $ # " !                                         ~ } | { z ~y ~x ~w }v }u }t |s |r |q {p {o {n zm zl zk yj yi yh xg xf xe wd wc wb va v` v_ u^ u] u\ t[ tZ tY sX sW sV rU rT rS q \ypg^ULC:1( }tkbYPG>5,#xof]TKB90'               ~ } | { z y x w v u t s r q p o n m l k j i h g f e d c b a ` _ ^ ] \ [ Z Y X W V U T S R Q P O N M L K J I H G F E D C B A @ ? > = < ; : 9 8 7 6 5 4 3 2 1 0 / \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' f e d c b a ` _ ^ ] \ [ Z Y X W V U T S R Q P O N M L K J I H G F E D C B A @ ? > = < ; : 9 8 7 6 5 4 3 2 1 0 / . - , + * ) ( ' & % $ # " !                           \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' B A @ ? > = < ; : 9 8 7 6 5 4 3 2 1 0 / . - , + * ) ( ' & % $ # " !                                         ~ } | { z y x w v u t s r q p o n m l k j i h g \ypg^ULC:1( }tkbYPG>5,#xof]TKB90'                                      ~ } | { z y x w v u t s r q p o n m l k j i h g f e d c b a ` _ ^ ] \ [ Z Y X W V U T S R Q P O N M L K J I H G F E D C \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' z )y )x (w (v (u 't 's 'r &q &p &o %n %m %l $k $j $i #h #g #f "e "d "c !b !a !` _ ^ ] \ [ Z Y X W V U T S R Q P O N M L K J I H G F E D C B A @ ? > = < ; : 9 8 7 6 5 4 3 2 1 0 / . - , + * ) ( ' & % $ # " !    \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' V HU GT GS GR FQ FP FO EN EM EL DK DJ DI CH CG CF BE BD BC AB AA A@ @? @> @= ?< ?; ?: >9 >8 >7 =6 =5 =4 <3 <2 <1 ;0 ;/ ;. :- :, :+ 9* 9) 9( 8' 8& 8% 7$ 7# 7" 6! 6  6 5 5 5 4 4 4 3 3 3 2 2 2 1 1 1 0 0 0  /  /  /  .  . . - - - , , , + + +~ *} *| *{ ) \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' 2 f1 f0 f/ e. e- e, d+ d* d) c( c' c& b% b$ b# a" a! a  ` ` ` _ _ _ ^ ^ ^ ] ] ] \ \ \ [ [ [ Z  Z  Z  Y  Y  Y X X X W W W V V V U~ U} U| T{ Tz Ty Sx Sw Sv Ru Rt Rs Qr Qq Qp Po Pn Pm Ol Ok Oj Ni Nh Ng Mf Me Md Lc Lb La K` K_ K^ J] J\ J[ IZ IY IX HW H \ypg^ULC:1( }tkbYPG>5,#xof]TKB90'                      ~ } | { z ~y ~x ~w }v }u }t |s |r |q {p {o {n zm zl zk yj yi yh xg xf xe wd wc wb va v` v_ u^ u] u\ t[ tZ tY sX sW sV rU rT rS qR qQ qP pO pN pM oL oK oJ nI nH nG mF mE mD lC lB lA k@ k? k> j= j< j; i: i9 i8 h7 h6 h5 g4 g3 g \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' j i h g f e d c b a ` _ ^ ] \ [ Z Y X W V U T S R Q P O N M L K J I H G F E D C B A @ ? > = < ; : 9 8 7 6 5 4 3 2 1 0 / . - , + * ) ( ' & % $ # " !                    \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' F E D C B A @ ? > = < ; : 9 8 7 6 5 4 3 2 1 0 / . - , + * ) ( ' & % $ # " !                                         ~ } | { z y x w v u t s r q p o n m l k \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' " !                                         ~ } | { z y x w v u t s r q p o n m l k j i h g f e d c b a ` _ ^ ] \ [ Z Y X W V U T S R Q P O N M L K J I H G \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' ~ } | { z y x w v u t s r q p o n m l k j i h g f e d c b a ` _ ^ ] \ [ Z Y X W V U T S R Q P O N M L K J I H G F E D C B A @ ? > = < ; : 9 8 7 6 5 4 3 2 1 0 / . - , + * ) ( ' & % $ # \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' Z Y X W V U T S R Q P O N M L K J I H G F E D C B A @ ? > = < ; : 9 8 7 6 5 4 3 2 1 0 / . - , + * ) ( ' & % $ # " !                                         \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' 6 =5 =4 <3 <2 <1 ;0 ;/ ;. :- :, :+ 9* 9) 9( 8' 8& 8% 7$ 7# 7" 6! 6  6 5 5 5 4 4 4 3 3 3 2 2 2 1 1 1 0 0 0  /  /  /  .  . . - - - , , , + + +~ *} *| *{ )z )y )x (w (v (u 't 's 'r &q &p &o %n %m %l $k $j $i #h #g #f "e "d "c !b !a !` _ ^ ] \ [  \ypg^ULC:1( }tkbYPG>5,#xof]TKB90'  \ [ [ [ Z  Z  Z  Y  Y  Y X X X W W W V V V U~ U} U| T{ Tz Ty Sx Sw Sv Ru Rt Rs Qr Qq Qp Po Pn Pm Ol Ok Oj Ni Nh Ng Mf Me Md Lc Lb La K` K_ K^ J] J\ J[ IZ IY IX HW HV HU GT GS GR FQ FP FO EN EM EL DK DJ DI CH CG CF BE BD BC AB AA A@ @? @> @= ?< ?; ?: >9 >8 >7 = \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' n zm zl zk yj yi yh xg xf xe wd wc wb va v` v_ u^ u] u\ t[ tZ tY sX sW sV rU rT rS qR qQ qP pO pN pM oL oK oJ nI nH nG mF mE mD lC lB lA k@ k? k> j= j< j; i: i9 i8 h7 h6 h5 g4 g3 g2 f1 f0 f/ e. e- e, d+ d* d) c( c' c& b% b$ b# a" a! a  ` ` ` _ _ _ ^ ^ ^ ] ] ] \ \ \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' J I H G F E D C B A @ ? > = < ; : 9 8 7 6 5 4 3 2 1 0 / . - , + * ) ( ' & % $ # " !                                         ~ } | { z ~y ~x ~w }v }u }t |s |r |q {p {o { \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' & % $ # " !                                         ~ } | { z y x w v u t s r q p o n m l k j i h g f e d c b a ` _ ^ ] \ [ Z Y X W V U T S R Q P O N M L K \ypg^ULC:1( }tkbYPG>5,#xof]TKB90'     ~ } | { z y x w v u t s r q p o n m l k j i h g f e d c b a ` _ ^ ] \ [ Z Y X W V U T S R Q P O N M L K J I H G F E D C B A @ ? > = < ; : 9 8 7 6 5 4 3 2 1 0 / . - , + * ) ( ' \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' ^ ] \ [ Z Y X W V U T S R Q P O N M L K J I H G F E D C B A @ ? > = < ; : 9 8 7 6 5 4 3 2 1 0 / . - , + * ) ( ' & % $ # " !                                     \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' :9876543210/.-,+*)(' & % $ # " !               ~} | { z y x w v u t s r q p o n m l k j i h g f e d c b a ` _ \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' 222111000 / / / . ..---,,,+++~*}*|*{)z)y)x(w(v(u't's'r&q&p&o%n%m%l$k$j$i#h#g#f"e"d"c!b!a!` _ ^ ]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<; \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' rQqQpPoPnPmOlOkOjNiNhNgMfMeMdLcLbLaK`K_K^J]J\J[IZIYIXHWHVHUGTGSGRFQFPFOENEMELDKDJDICHCGCFBEBDBCABAAA@@?@>@=?<?;?:>9>8>7=6=5=4<3<2<1;0;/;.:-:,:+9*9)9(8'8&8%7$7#7"6!6 6555444333 \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' NpMoLoKoJnInHnGmFmEmDlClBlAk@k?k>j=j<j;i:i9i8h7h6h5g4g3g2f1f0f/e.e-e,d+d*d)c(c'c&b%b$b#a"a!a ```___^^^]]]\\\[[[Z Z Z Y Y YXXXWWWVVVU~U}U|T{TzTySxSwSvRuRtRsQ \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' *)('&%$#"!      ~}|{z~y~x~w}v}u}t|s|r|q{p{o{nzmzlzkyjyiyhxgxfxewdwcwbvav`v_u^u]u\t[tZtYsXsWsVrUrTrSqRqQqPpOp \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+ \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' ba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!       \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' >=<;:9876543210/.-,+*)('&%$#"!      ~}|{zyxwvutsrqponmlkjihgfedc \ypg^ULC:1( }tkbYPG>5,#xof]TKB90'        ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@? \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' v(u't's'r&q&p&o%n%m%l$k$j$i#h#g#f"e"d"c!b!a!` _ ^ ]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)(' & % $ # " !        \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' RFQFPFOENEMELDKDJDICHCGCFBEBDBCABAAA@@?@>@=?<?;?:>9>8>7=6=5=4<3<2<1;0;/;.:-:,:+9*9)9(8'8&8%7$7#7"6!6 6555444333222111000 / / / . ..---,,,+++~*}*|*{)z)y)x(w( \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' .e-e,d+d*d)c(c'c&b%b$b#a"a!a ```___^^^]]]\\\[[[Z Z Z Y Y YXXXWWWVVVU~U}U|T{TzTySxSwSvRuRtRsQrQqQpPoPnPmOlOkOjNiNhNgMfMeMdLcLbLaK`K_K^J]J\J[IZIYIXHWHVHUGTGSG_W &,28>DJPV\bhntz "(.4:@FLRX^djpv|FLRX^djpv|pW<zV2jF"~Z6nJ &  ^ : rN*b>vRpW<zV2jF"~Z6nJ &  ^ : rN*b>vR. fBzV2 j!F""#~$Z%6&'n(J)&*+^,:-.r/N0*12b3>45v6R7.8 9f:B;2?@jAFB"C~DZE6FGnHJI&JK^L:MNrONP*QRbS>TUvVR] &,28>DJPV\bhntz "(.4:@FLRX^djpv|X_fmt{w.z {f|B}~zV2jF"~Z6nJ&^:rN*b>vR.X YfZB[\z]V^2_`jaFb"c~dZe6fgnhJi&jk^l:mnroNp*qrbs>tuvvRw.z {f|B}~zV2jF"~Z6nJ&^:rN*b>vR. fBzV2jF"~Z6nJ#wKsGoCk? \ypg^ULC:1( }tkbYPG>5,#xof]TKB90'   ~}|{z~y~x~w}v}u}t|s|r|q{p{o{nzmzlzkyjyiyhxgxfxewdwcwbvav`v_u^u]u\t[tZtYsXsWsVrUrTrSqRqQqPpOpNpMoLoKoJnInHnGmFmEmDlClBlAk@k?k>j=j<j;i:i9i8h7h6h5g4g3g2f1f0f/e \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' fedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!     \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' BA@?>=<;:9876543210/.-,+*)('&%$#"!      ~}|{zyxwvutsrqponmlkjihg \ypg^ULC:1( }tkbYPG>5,#xof]TKB90'      ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDC \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!  \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' VUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)(' & % $ # " !               ~}|{ \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' 2<1;0;/;.:-:,:+9*9)9(8'8&8%7$7#7"6!6 6555444333222111000 / / / . ..---,,,+++~*}*|*{)z)y)x(w(v(u't's'r&q&p&o%n%m%l$k$j$i#h#g#f"e"d"c!b!a!` _ ^ ]\[ZYXW \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' Z Z Z Y Y YXXXWWWVVVU~U}U|T{TzTySxSwSvRuRtRsQrQqQpPoPnPmOlOkOjNiNhNgMfMeMdLcLbLaK`K_K^J]J\J[IZIYIXHWHVHUGTGSGRFQFPFOENEMELDKDJDICHCGCFBEBDBCABAAA@@?@>@=?<?;?:>9>8>7=6=5=4<3< \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' jyiyhxgxfxewdwcwbvav`v_u^u]u\t[tZtYsXsWsVrUrTrSqRqQqPpOpNpMoLoKoJnInHnGmFmEmDlClBlAk@k?k>j=j<j;i:i9i8h7h6h5g4g3g2f1f0f/e.e-e,d+d*d)c(c'c&b%b$b#a"a!a ```___^^^]]]\\\[[[ \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' FEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!      ~}|{z~y~x~w}v}u}t|s|r|q{p{o{nzmzlzky \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' "!      ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHG \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$# \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!       \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' 6543210/.-,+*)(' & % $ # " !               ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' 11000 / / / . ..---,,,+++~*}*|*{)z)y)x(w(v(u't's'r&q&p&o%n%m%l$k$j$i#h#g#f"e"d"c!b!a!` _ ^ ]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:987 \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' nPmOlOkOjNiNhNgMfMeMdLcLbLaK`K_K^J]J\J[IZIYIXHWHVHUGTGSGRFQFPFOENEMELDKDJDICHCGCFBEBDBCABAAA@@?@>@=?<?;?:>9>8>7=6=5=4<3<2<1;0;/;.:-:,:+9*9)9(8'8&8%7$7#7"6!6 65554443332221 \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' JnInHnGmFmEmDlClBlAk@k?k>j=j<j;i:i9i8h7h6h5g4g3g2f1f0f/e.e-e,d+d*d)c(c'c&b%b$b#a"a!a ```___^^^]]]\\\[[[Z Z Z Y Y YXXXWWWVVVU~U}U|T{TzTySxSwSvRuRtRsQrQqQpPoP \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' &%$#"!      ~}|{z~y~x~w}v}u}t|s|r|q{p{o{nzmzlzkyjyiyhxgxfxewdwcwbvav`v_u^u]u\t[tZtYsXsWsVrUrTrSqRqQqPpOpNpMoLoKo \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)(' \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' ^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!       \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' :9876543210/.-,+*)('&%$#"!      ~}|{zyxwvutsrqponmlkjihgfedcba`_ \ypg^ULC:1( }tkbYPG>5,#xof]TKB90'      ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<; \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' r&q&p&o%n%m%l$k$j$i#h#g#f"e"d"c!b!a!` _ ^ ]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)(' & % $ # " !           \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' NEMELDKDJDICHCGCFBEBDBCABAAA@@?@>@=?<?;?:>9>8>7=6=5=4<3<2<1;0;/;.:-:,:+9*9)9(8'8&8%7$7#7"6!6 6555444333222111000 / / / . ..---,,,+++~*}*|*{)z)y)x(w(v(u't's' \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' *d)c(c'c&b%b$b#a"a!a ```___^^^]]]\\\[[[Z Z Z Y Y YXXXWWWVVVU~U}U|T{TzTySxSwSvRuRtRsQrQqQpPoPnPmOlOkOjNiNhNgMfMeMdLcLbLaK`K_K^J]J\J[IZIYIXHWHVHUGTGSGRFQFPFOE \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' ~}|{z~y~x~w}v}u}t|s|r|q{p{o{nzmzlzkyjyiyhxgxfxewdwcwbvav`v_u^u]u\t[tZtYsXsWsVrUrTrSqRqQqPpOpNpMoLoKoJnInHnGmFmEmDlClBlAk@k?k>j=j<j;i:i9i8h7h6h5g4g3g2f1f0f/e.e-e,d+d \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' ba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!       \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' >=<;:9876543210/.-,+*)('&%$#"!      ~}|{zyxwvutsrqponmlkjihgfedc \ypg^ULC:1( }tkbYPG>5,#xof]TKB90'      ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@? \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' vutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!  \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' RQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)(' & % $ # " !               ~}|{zyxw \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' .:-:,:+9*9)9(8'8&8%7$7#7"6!6 6555444333222111000 / / / . ..---,,,+++~*}*|*{)z)y)x(w(v(u't's'r&q&p&o%n%m%l$k$j$i#h#g#f"e"d"c!b!a!` _ ^ ]\[ZYXWVUTS \ypg^ULC:1( }tkbYPG>5,#xof]TKB90'  Y YXXXWWWVVVU~U}U|T{TzTySxSwSvRuRtRsQrQqQpPoPnPmOlOkOjNiNhNgMfMeMdLcLbLaK`K_K^J]J\J[IZIYIXHWHVHUGTGSGRFQFPFOENEMELDKDJDICHCGCFBEBDBCABAAA@@?@>@=?<?;?:>9>8>7=6=5=4<3<2<1;0;/; \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' fxewdwcwbvav`v_u^u]u\t[tZtYsXsWsVrUrTrSqRqQqPpOpNpMoLoKoJnInHnGmFmEmDlClBlAk@k?k>j=j<j;i:i9i8h7h6h5g4g3g2f1f0f/e.e-e,d+d*d)c(c'c&b%b$b#a"a!a ```___^^^]]]\\\[[[Z Z Z Y \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' BA@?>=<;:9876543210/.-,+*)('&%$#"!      ~}|{z~y~x~w}v}u}t|s|r|q{p{o{nzmzlzkyjyiyhxgx \ypg^ULC:1( }tkbYPG>5,#xof]TKB90'      ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDC \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!  \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' VUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!      ~}|{ \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' 210/.-,+*)(' & % $ # " !               ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXW \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' 0 / / / . ..---,,,+++~*}*|*{)z)y)x(w(v(u't's'r&q&p&o%n%m%l$k$j$i#h#g#f"e"d"c!b!a!` _ ^ ]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543 \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' jNiNhNgMfMeMdLcLbLaK`K_K^J]J\J[IZIYIXHWHVHUGTGSGRFQFPFOENEMELDKDJDICHCGCFBEBDBCABAAA@@?@>@=?<?;?:>9>8>7=6=5=4<3<2<1;0;/;.:-:,:+9*9)9(8'8&8%7$7#7"6!6 655544433322211100 \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' FmEmDlClBlAk@k?k>j=j<j;i:i9i8h7h6h5g4g3g2f1f0f/e.e-e,d+d*d)c(c'c&b%b$b#a"a!a ```___^^^]]]\\\[[[Z Z Z Y Y YXXXWWWVVVU~U}U|T{TzTySxSwSvRuRtRsQrQqQpPoPnPmOlOkO \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' "!      ~}|{z~y~x~w}v}u}t|s|r|q{p{o{nzmzlzkyjyiyhxgxfxewdwcwbvav`v_u^u]u\t[tZtYsXsWsVrUrTrSqRqQqPpOpNpMoLoKoJnInHnGm \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$# \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!       \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' 6543210/.-,+*)('&%$#"!      ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ \ypg^ULC:1( }tkbYPG>5,#xof]TKB90'      ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:987 \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' n%m%l$k$j$i#h#g#f"e"d"c!b!a!` _ ^ ]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)(' & % $ # " !           \ypg^ULC:1( }tkbYPG>5,#xof]TKB90' JDICHCGCFBEBDBCABAAA@@?@>@=?<?;?:>9>8>7=6=5=4<3<2<1;0;/;.:-:,:+9*9)9(8'8&8%7$7#7"6!6 6555444333222111000 / / / . ..---,,,+++~*}*|*{)z)y)x(w(v(u't's'r&q&p&o% Yypg^ULC:1( }tkbYPG>5,#yoe[QG=3) #a"a!a ```___^^^]]]\\\[[[Z Z Z Y Y YXXXWWWVVVU~U}U|T{TzTySxSwSvRuRtRsQrQqQpPoPnPmOlOkOjNiNhNgMfMeMdLcLbLaK`K_K^J]J\J[IZIYIXHWHVHUGTGSGRFQFPFOENEMELDKD T~tj`VLB8.$zpf\RH>4*  vlbXND:0&w}v}u}t|s|r|q{p{o{nzmzlzkyjyiyhxgxfxewdwcwbvav`v_u^u]u\t[tZtYsXsWsVrUrTrSqRqQqPpOpNpMoLoKoJnInHnGmFmEmDlClBlAk@k?k>j=j<j;i:i9i8h7h6h5g4g3g2f1f0f/e.e-e,d+d*d)c(c'c&b%b$b T~tj`VLB8.$zpf\RH>4*  vlbXND:0&KJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!      ~}|{z~y~x~ T~tj`VLB8.$zpf\RH>4*  vlbXND:0&     ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONML T~tj`VLB8.$zpf\RH>4*  vlbXND:0&srqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!  T~tj`VLB8.$zpf\RH>4*  vlbXND:0&GFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!      ~}|{zyxwvut T~tj`VLB8.$zpf\RH>4*  vlbXND:0&        ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIH T~tj`VLB8.$zpf\RH>4*  vlbXND:0&o%n%m%l$k$j$i#h#g#f"e"d"c!b!a!` _ ^ ]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)(' & % $ # " !       T~tj`VLB8.$zpf\RH>4*  vlbXND:0&CABAAA@@?@>@=?<?;?:>9>8>7=6=5=4<3<2<1;0;/;.:-:,:+9*9)9(8'8&8%7$7#7"6!6 6555444333222111000 / / / . ..---,,,+++~*}*|*{)z)y)x(w(v(u't's'r&q&p& T~tj`VLB8.$zpf\RH>4*  vlbXND:0&]]]\\\[[[Z Z Z Y Y YXXXWWWVVVU~U}U|T{TzTySxSwSvRuRtRsQrQqQpPoPnPmOlOkOjNiNhNgMfMeMdLcLbLaK`K_K^J]J\J[IZIYIXHWHVHUGTGSGRFQFPFOENEMELDKDJDICHCGCFBEBDB T~tj`VLB8.$zpf\RH>4*  vlbXND:0&kyjyiyhxgxfxewdwcwbvav`v_u^u]u\t[tZtYsXsWsVrUrTrSqRqQqPpOpNpMoLoKoJnInHnGmFmEmDlClBlAk@k?k>j=j<j;i:i9i8h7h6h5g4g3g2f1f0f/e.e-e,d+d*d)c(c'c&b%b$b#a"a!a ```___^^^ T~tj`VLB8.$zpf\RH>4*  vlbXND:0&?>=<;:9876543210/.-,+*)('&%$#"!      ~}|{z~y~x~w}v}u}t|s|r|q{p{o{nzmzlz T~tj`VLB8.$zpf\RH>4*  vlbXND:0&     ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@ T~tj`VLB8.$zpf\RH>4*  vlbXND:0&gfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!  T~tj`VLB8.$zpf\RH>4*  vlbXND:0&;:9876543210/.-,+*)('&%$#"!      ~}|{zyxwvutsrqponmlkjih T~tj`VLB8.$zpf\RH>4*  vlbXND:0&     ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=< T~tj`VLB8.$zpf\RH>4*  vlbXND:0&c!b!a!` _ ^ ]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)(' & % $ # " !           T~tj`VLB8.$zpf\RH>4*  vlbXND:0&7=6=5=4<3<2<1;0;/;.:-:,:+9*9)9(8'8&8%7$7#7"6!6 6555444333222111000 / / / . ..---,,,+++~*}*|*{)z)y)x(w(v(u't's'r&q&p&o%n%m%l$k$j$i#h#g#f"e"d" T~tj`VLB8.$zpf\RH>4*  vlbXND:0& Y Y YXXXWWWVVVU~U}U|T{TzTySxSwSvRuRtRsQrQqQpPoPnPmOlOkOjNiNhNgMfMeMdLcLbLaK`K_K^J]J\J[IZIYIXHWHVHUGTGSGRFQFPFOENEMELDKDJDICHCGCFBEBDBCABAAA@@?@>@=?<?;?:>9>8> T~tj`VLB8.$zpf\RH>4*  vlbXND:0&_u^u]u\t[tZtYsXsWsVrUrTrSqRqQqPpOpNpMoLoKoJnInHnGmFmEmDlClBlAk@k?k>j=j<j;i:i9i8h7h6h5g4g3g2f1f0f/e.e-e,d+d*d)c(c'c&b%b$b#a"a!a ```___^^^]]]\\\[[[Z Z Z T~tj`VLB8.$zpf\RH>4*  vlbXND:0&3210/.-,+*)('&%$#"!      ~}|{z~y~x~w}v}u}t|s|r|q{p{o{nzmzlzkyjyiyhxgxfxewdwcwbvav`v T~tj`VLB8.$zpf\RH>4*  vlbXND:0&~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:987654 T~tj`VLB8.$zpf\RH>4*  vlbXND:0&[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!       T~tj`VLB8.$zpf\RH>4*  vlbXND:0&/.-,+*)('&%$#"!      ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\ T~tj`VLB8.$zpf\RH>4*  vlbXND:0&~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210 T~tj`VLB8.$zpf\RH>4*  vlbXND:0&WVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)(' & % $ # " !                T~tj`VLB8.$zpf\RH>4*  vlbXND:0&+9*9)9(8'8&8%7$7#7"6!6 6555444333222111000 / / / . ..---,,,+++~*}*|*{)z)y)x(w(v(u't's'r&q&p&o%n%m%l$k$j$i#h#g#f"e"d"c!b!a!` _ ^ ]\[ZYX T~tj`VLB8.$zpf\RH>4*  vlbXND:0&U~U}U|T{TzTySxSwSvRuRtRsQrQqQpPoPnPmOlOkOjNiNhNgMfMeMdLcLbLaK`K_K^J]J\J[IZIYIXHWHVHUGTGSGRFQFPFOENEMELDKDJDICHCGCFBEBDBCABAAA@@?@>@=?<?;?:>9>8>7=6=5=4<3<2<1;0;/;.:-:,: T~tj`VLB8.$zpf\RH>4*  vlbXND:0&SqRqQqPpOpNpMoLoKoJnInHnGmFmEmDlClBlAk@k?k>j=j<j;i:i9i8h7h6h5g4g3g2f1f0f/e.e-e,d+d*d)c(c'c&b%b$b#a"a!a ```___^^^]]]\\\[[[Z Z Z Y Y YXXXWWWVVV T~tj`VLB8.$zpf\RH>4*  vlbXND:0&'&%$#"!      ~}|{z~y~x~w}v}u}t|s|r|q{p{o{nzmzlzkyjyiyhxgxfxewdwcwbvav`v_u^u]u\t[tZtYsXsWsVrUrTr T~tj`VLB8.$zpf\RH>4*  vlbXND:0&{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)( T~tj`VLB8.$zpf\RH>4*  vlbXND:0&ONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!      ~}| T~tj`VLB8.$zpf\RH>4*  vlbXND:0&#"!      ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQP T~tj`VLB8.$zpf\RH>4*  vlbXND:0&wvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$ T~tj`VLB8.$zpf\RH>4*  vlbXND:0&KJIHGFEDCBA@?>=<;:9876543210/.-,+*)(' & % $ # " !               ~}|{zyx T~tj`VLB8.$zpf\RH>4*  vlbXND:0&555444333222111000 / / / . ..---,,,+++~*}*|*{)z)y)x(w(v(u't's'r&q&p&o%n%m%l$k$j$i#h#g#f"e"d"c!b!a!` _ ^ ]\[ZYXWVUTSRQPONML T~tj`VLB8.$zpf\RH>4*  vlbXND:0&sQrQqQpPoPnPmOlOkOjNiNhNgMfMeMdLcLbLaK`K_K^J]J\J[IZIYIXHWHVHUGTGSGRFQFPFOENEMELDKDJDICHCGCFBEBDBCABAAA@@?@>@=?<?;?:>9>8>7=6=5=4<3<2<1;0;/;.:-:,:+9*9)9(8'8&8%7$7#7"6!6 6 T~tj`VLB8.$zpf\RH>4*  vlbXND:0&GmFmEmDlClBlAk@k?k>j=j<j;i:i9i8h7h6h5g4g3g2f1f0f/e.e-e,d+d*d)c(c'c&b%b$b#a"a!a ```___^^^]]]\\\[[[Z Z Z Y Y YXXXWWWVVVU~U}U|T{TzTySxSwSvRuRtR T~tj`VLB8.$zpf\RH>4*  vlbXND:0&     ~}|{z~y~x~w}v}u}t|s|r|q{p{o{nzmzlzkyjyiyhxgxfxewdwcwbvav`v_u^u]u\t[tZtYsXsWsVrUrTrSqRqQqPpOpNpMoLoKoJnInHn T~tj`VLB8.$zpf\RH>4*  vlbXND:0&onmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!  T~tj`VLB8.$zpf\RH>4*  vlbXND:0&CBA@?>=<;:9876543210/.-,+*)('&%$#"!      ~}|{zyxwvutsrqp T~tj`VLB8.$zpf\RH>4*  vlbXND:0&     ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFED T~tj`VLB8.$zpf\RH>4*  vlbXND:0&kjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!  T~tj`VLB8.$zpf\RH>4*  vlbXND:0&?>=<;:9876543210/.-,+*)(' & % $ # " !               ~}|{zyxwvutsrqponml T~tj`VLB8.$zpf\RH>4*  vlbXND:0&111000 / / / . ..---,,,+++~*}*|*{)z)y)x(w(v(u't's'r&q&p&o%n%m%l$k$j$i#h#g#f"e"d"c!b!a!` _ ^ ]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@ T~tj`VLB8.$zpf\RH>4*  vlbXND:0&gMfMeMdLcLbLaK`K_K^J]J\J[IZIYIXHWHVHUGTGSGRFQFPFOENEMELDKDJDICHCGCFBEBDBCABAAA@@?@>@=?<?;?:>9>8>7=6=5=4<3<2<1;0;/;.:-:,:+9*9)9(8'8&8%7$7#7"6!6 6555444333222 T~tj`VLB8.$zpf\RH>4*  vlbXND:0&;i:i9i8h7h6h5g4g3g2f1f0f/e.e-e,d+d*d)c(c'c&b%b$b#a"a!a ```___^^^]]]\\\[[[Z Z Z Y Y YXXXWWWVVVU~U}U|T{TzTySxSwSvRuRtRsQrQqQpPoPnPmOlOkOjNiNhN T~tj`VLB8.$zpf\RH>4*  vlbXND:0&     ~}|{z~y~x~w}v}u}t|s|r|q{p{o{nzmzlzkyjyiyhxgxfxewdwcwbvav`v_u^u]u\t[tZtYsXsWsVrUrTrSqRqQqPpOpNpMoLoKoJnInHnGmFmEmDlClBlAk@k?k>j=j<j T~tj`VLB8.$zpf\RH>4*  vlbXND:0&cba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!  T~tj`VLB8.$zpf\RH>4*  vlbXND:0&76543210/.-,+*)('&%$#"!      ~}|{zyxwvutsrqponmlkjihgfed T~tj`VLB8.$zpf\RH>4*  vlbXND:0&   ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:98 T~tj`VLB8.$zpf\RH>4*  vlbXND:0&_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!    T~tj`VLB8.$zpf\RH>4*  vlbXND:0&3210/.-,+*)(' & % $ # " !               ~}|{zyxwvutsrqponmlkjihgfedcba` T~tj`VLB8.$zpf\RH>4*  vlbXND:0&---,,,+++~*}*|*{)z)y)x(w(v(u't's'r&q&p&o%n%m%l$k$j$i#h#g#f"e"d"c!b!a!` _ ^ ]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:987654 T~tj`VLB8.$zpf\RH>4*  vlbXND:0&[IZIYIXHWHVHUGTGSGRFQFPFOENEMELDKDJDICHCGCFBEBDBCABAAA@@?@>@=?<?;?:>9>8>7=6=5=4<3<2<1;0;/;.:-:,:+9*9)9(8'8&8%7$7#7"6!6 6555444333222111000 / / / . .. T~tj`VLB8.$zpf\RH>4*  vlbXND:0&/e.e-e,d+d*d)c(c'c&b%b$b#a"a!a ```___^^^]]]\\\[[[Z Z Z Y Y YXXXWWWVVVU~U}U|T{TzTySxSwSvRuRtRsQrQqQpPoPnPmOlOkOjNiNhNgMfMeMdLcLbLaK`K_K^J]J\J T~tj`VLB8.$zpf\RH>4*  vlbXND:0&~}|{z~y~x~w}v}u}t|s|r|q{p{o{nzmzlzkyjyiyhxgxfxewdwcwbvav`v_u^u]u\t[tZtYsXsWsVrUrTrSqRqQqPpOpNpMoLoKoJnInHnGmFmEmDlClBlAk@k?k>j=j<j;i:i9i8h7h6h5g4g3g2f1f0f T~tj`VLB8.$zpf\RH>4*  vlbXND:0&WVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!       T~tj`VLB8.$zpf\RH>4*  vlbXND:0&+*)('&%$#"!      ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYX T~tj`VLB8.$zpf\RH>4*  vlbXND:0&~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-, T~tj`VLB8.$zpf\RH>4*  vlbXND:0&SRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!       T~tj`VLB8.$zpf\RH>4*  vlbXND:0&' & % $ # " !               ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUT T~tj`VLB8.$zpf\RH>4*  vlbXND:0&{)z)y)x(w(v(u't's'r&q&p&o%n%m%l$k$j$i#h#g#f"e"d"c!b!a!` _ ^ ]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)( T~tj`VLB8.$zpf\RH>4*  vlbXND:0&OENEMELDKDJDICHCGCFBEBDBCABAAA@@?@>@=?<?;?:>9>8>7=6=5=4<3<2<1;0;/;.:-:,:+9*9)9(8'8&8%7$7#7"6!6 6555444333222111000 / / / . ..---,,,+++~*}*|* T~tj`VLB8.$zpf\RH>4*  vlbXND:0&#a"a!a ```___^^^]]]\\\[[[Z Z Z Y Y YXXXWWWVVVU~U}U|T{TzTySxSwSvRuRtRsQrQqQpPoPnPmOlOkOjNiNhNgMfMeMdLcLbLaK`K_K^J]J\J[IZIYIXHWHVHUGTGSGRFQFPF T~tj`VLB8.$zpf\RH>4*  vlbXND:0&w}v}u}t|s|r|q{p{o{nzmzlzkyjyiyhxgxfxewdwcwbvav`v_u^u]u\t[tZtYsXsWsVrUrTrSqRqQqPpOpNpMoLoKoJnInHnGmFmEmDlClBlAk@k?k>j=j<j;i:i9i8h7h6h5g4g3g2f1f0f/e.e-e,d+d*d)c(c'c&b%b$b T~tj`VLB8.$zpf\RH>4*  vlbXND:0&KJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!      ~}|{z~y~x~ T~tj`VLB8.$zpf\RH>4*  vlbXND:0&     ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONML T~tj`VLB8.$zpf\RH>4*  vlbXND:0&srqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!  T~tj`VLB8.$zpf\RH>4*  vlbXND:0&GFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!      ~}|{zyxwvutFx  '.5<CJQX_fmt{qjc\UNG@92+$ 7c;g?kCoGg;c7 _3[/ÁāWŁ+ƁǁSȁ'Ɂ{ʁOˁ#́ẃK΁ρsЁGсҁoӁCԁՁkց?ׁ؁gف;ځہc܁7݁ ށ_߁3ၣ[⁤/づ䁥W偦+恦灧S聨'遨{ꁩO끪#쁪w큫Ks T~tj`VLB8.$zpf\RH>4*  vlbXND:0&        ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIH T~tj`VLB8.$zpf\RH>4*  vlbXND:0&o%n%m%l$k$j$i#h#g#f"e"d"c!b!a!` _ ^ ]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)(' & % $ # " !       T~tj`VLB8.$zpf\RH>4*  vlbXND:0&CABAAA@@?@>@=?<?;?:>9>8>7=6=5=4<3<2<1;0;/;.:-:,:+9*9)9(8'8&8%7$7#7"6!6 6555444333222111000 / / / . ..---,,,+++~*}*|*{)z)y)x(w(v(u't's'r&q&p& T~tj`VLB8.$zpf\RH>4*  vlbXND:0&]]]\\\[[[Z Z Z Y Y YXXXWWWVVVU~U}U|T{TzTySxSwSvRuRtRsQrQqQpPoPnPmOlOkOjNiNhNgMfMeMdLcLbLaK`K_K^J]J\J[IZIYIXHWHVHUGTGSGRFQFPFOENEMELDKDJDICHCGCFBEBDB T~tj`VLB8.$zpf\RH>4*  vlbXND:0&kyjyiyhxgxfxewdwcwbvav`v_u^u]u\t[tZtYsXsWsVrUrTrSqRqQqPpOpNpMoLoKoJnInHnGmFmEmDlClBlAk@k?k>j=j<j;i:i9i8h7h6h5g4g3g2f1f0f/e.e-e,d+d*d)c(c'c&b%b$b#a"a!a ```___^^^ T~tj`VLB8.$zpf\RH>4*  vlbXND:0&?>=<;:9876543210/.-,+*)('&%$#"!      ~}|{z~y~x~w}v}u}t|s|r|q{p{o{nzmzlz T~tj`VLB8.$zpf\RH>4*  vlbXND:0&     ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@ T~tj`VLB8.$zpf\RH>4*  vlbXND:0&gfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!  T~tj`VLB8.$zpf\RH>4*  vlbXND:0&;:9876543210/.-,+*)('&%$#"!      ~}|{zyxwvutsrqponmlkjih T~tj`VLB8.$zpf\RH>4*  vlbXND:0&     ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=< T~tj`VLB8.$zpf\RH>4*  vlbXND:0&c!b!a!` _ ^ ]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)(' & % $ # " !           T~tj`VLB8.$zpf\RH>4*  vlbXND:0&7=6=5=4<3<2<1;0;/;.:-:,:+9*9)9(8'8&8%7$7#7"6!6 6555444333222111000 / / / . ..---,,,+++~*}*|*{)z)y)x(w(v(u't's'r&q&p&o%n%m%l$k$j$i#h#g#f"e"d" T~tj`VLB8.$zpf\RH>4*  vlbXND:0& Y Y YXXXWWWVVVU~U}U|T{TzTySxSwSvRuRtRsQrQqQpPoPnPmOlOkOjNiNhNgMfMeMdLcLbLaK`K_K^J]J\J[IZIYIXHWHVHUGTGSGRFQFPFOENEMELDKDJDICHCGCFBEBDBCABAAA@@?@>@=?<?;?:>9>8> L~tj`VL___^^^]]]\\\[[[Z Z Zeric4-4.5.18/eric/Documentation/PaxHeaders.8617/mod_python.pdf0000644000175000001440000000007410563426120022201 xustar000000000000000030 atime=1389081085.275724356 30 ctime=1389081086.311724332 eric4-4.5.18/eric/Documentation/mod_python.pdf0000644000175000001440000004405010563426120021731 0ustar00detlevusers00000000000000%PDF-1.4 %äüöß 2 0 obj << /Length 3 0 R /Filter /FlateDecode >> stream x]ˊ$ ?ڋvF.wwUwEd<̪\@deC!_Ԝt;}zZN?}~a|N>ͧ;5R/}ҝo.2x2='SߙI__Wؽ?c}'cu?՚{?湧Cy]{o1HnzQ$0<+=3Ps|h. A_ U+ Z#,ac#D&^)ȢzhVql7i|Ue$Sit϶w" ?;;[Hv4 ڎWBde|u*p4#Nαipɲ:XrvC^xA̾9Uڑ?F 8|ꊅ+R9(x6Pl_8; ^ %"[pN0upXe J1|޾&q #(!P? = 1~r(czj29ӕSv*QHT0<҈W4;Q! 16Erf|(l`Lz>=o0VDYؑ1o g9VA!Îqb5gnڥD *EP'U픐JȪs`l■jl3KMAl˓#>6}~#OIjieZ3wr=jS*T27ޟ'qܩ6}f|YR끠fG>9&:Dl"ZNXLկ6]hkѼţQ#|!WT`KW^P=N$oXe1:JҲmT 8 b&:})WΪCZ fÈ5 K %w;پAKP}l0N6`317u  a싩ڢC삡BLvBi[c Jp Hc%doE@GlgdοUe*k1syR(f a虒#snPP;Uһ̉.E~/[IlUv,o7TȱNLܩǚ`g` sn]aqݎ@mdB0Jo[, Ĝng_!{/R}NCX %uG:rb m8rE!ޱG(yPC`hOQjHۀĹ:cfsCl,S*鹌'+A@jw̟?Y_ \5;Y%sx[ T\Τ*!+=)f?R'zz)cS=^jJ }&\gΜ9Bb/vsD݀OH0Hcj!w!Q8iWu@ eaMsH s^n /rkA+ >ꎶ̫\HhʹnvmCL O-b&SZ.t![K~Rᛪc{?Rrg37=g&KyPMA;QVC 3c 4\\fMx|U߇{f-; a1:h`ls$G7S;(ȸS4bR!mP%oȈ!P;Nt~I[Hۋ׍WSaLsǽߡu1YǪ-7&5ePD#8N<-!Ϝ٨9ĶD9wZwPv*:$"#~.7??,Y)2f)Cl߆Rn'T5wu}>u"0ԥkv.siٟRssA{ <aByjo9q9Ћ^C,ؐ]r40X"}h򗷍5uu%qފ"0uNܥtg IvWu, 4Ŋ(ikzc.iy7@1u6)!㊀l)b kYq4A@*3zΘn-Q[!i{'yoW6"o(#߀61ƃ5 dv)P #M~{LxmէMbSK@w3O֊RRgJnxA '3@A*guWoB-f/M 2I \!jT(<~d daKhmOendstream endobj 3 0 obj 3926 endobj 5 0 obj << /Length 6 0 R /Filter /FlateDecode /Length1 20196 >> stream x| xTEpv~%ii$1@4H&:!7ň&: Qkuvtؙq`|찳?Oս̷}UԩSNsT@wgOH/Ht5/%p-[ۭ]v 1~ܾ|ڿ-5"ĉXc;)i `y#>eu Oa=7j[MV2o>cu | b]]Ӹ:MXIȤB&X`  V(&jr{>#&~7܏#haeKO$ 2rI47Fv|/Rl#ǖOI%v|6a(>B! 8 5;&>Ŀowr-iKkl o`)wט_38o o9Yvl!+!=S_?G~C$H`L3 Atf̅s\vi%Θ^2mjqES.tAļ á=.efx=nSqeb6 (P ͪ\jaEۮ:9 N\`ة]cťH=$:.nrU\>ʸ8+ kah ^}Yj@N\lߕjS\Fx0AIu-KFޙ@2#XxNZWw>&1 >ͫ_cϪb{'N 'e2`S#q>8x!c`ݎ8 *V+ZQM 2=I4 kXLW_YPjdŊk =` x*/CIFÕ,G@a{eM%Kn7̊56x1N=ܧ [SqaBeKM|\U¡05l+xƖOlQp0Weoj50Epgn.|VƝvōZWC+H q+Wd2/H WM\сF5޻t\w&<دmQؓw%԰q͢r?3s V`uD&-q^X&7#c%c XƆQ"̊GkpƊ:#\˺7N,M qBQmU k++|q: ,WUCMFUWhܒj4 ETS}x˳óg FzU%ܿfolPiŸgYWZb\dNV c3[miԼAy88#t%qY7$ThTk͐O;::y}h2Y"}WJ\ W" *\DAf$d)V jJ"т^kNxdK{CWWu ܣ6Ňkp͈f U+^,Ped_ Gq%fTʼn RSx49#WJQP Dur.dT_A׵)D%S hNWylfYqe]o p~Y*V-ljCw ut ! %+9u~mX7^4kl1WդJ k7n.B$/j1$$,ʯ/* : ϿP/9MTq)ĿHM2HκM@T\y,fo3N6\TO#Z f!kE F[hX\E{ǃ:#)N('J No/Y\P kv=5XxvT3>x }`7ã&mZk:d$>jنCO $%>UJwͥfPkF #!+#6zŘH9:)B{1hz!4b08MYhMuVU?{o?Is p_bU_$neKPA pIPgWMEqW8bP*:ME7(}ΨB}G0솸N| ݐpCuttvv = J;K "'e(Q Z=VX C Tel>^oP.Cʕ PD!@׳~I=@;iLXӜNXp?ܱo9t=IYǨsqWIQkdmtEDET(5 FAqB_S;wNuBr@p2i:a>o™Ogr kޙ.m"<aPZ N./2 P Qxqq:EJj{>zʡ%̥r' E ,"M(FSL[42wނ9&&pdڍ&h"źOy@"(^_ p&2-Fщ*b>{=q!xD+{/zD#0GFl䪥tsv֐fQ~,joϦCٟfK@7 Tk (kԺ*DIT\ļ{U"lE׽ۻ->j D;r (Geƃna#Q47tKy z*-evfO`?#5Jl"S|"DtZ +tg5͙jةQylԆyautyyiSj^ y_bGOۊ׷ϮWui+*\7M߷vm8…đylGާRщhAA{\-Iı9fbP !j<o&gߪt H'ʇ^elT2GdY"u <vzƋ7߸qWVLnmىw@5lD>6AݾA7[Eu ?hp&lۗBjF5nNƄ>4"s3 ;&;'Cd o]63NQ楹]pn(%=sĀ'0> =ca;&13Ca3 X7;8s fkuЀb& \v7MߒJOG@1N,))ƽ8.p^"zW2cto}yyGzU5VGp[}EϿG_EDg.>}hap*8LIAt(B `jB:1Kd?H|L'4!%uoW?d>ߚ ^泼l6)yӛvV_%q+ހ3qjCvbtsi9ѐy`ᖲ- FE,DvKJʸNՂxoV8#YӲw|z~51viC%8n.04Zo2qȚRADp["XL&$Dq<Q77f(M% Q]lD0`&`, QgGN舄h0_{+͉^LO%v#4͛MUᑽ>f߲sk03__Vp:>Dm+]٢ O=!( A$CN!x-<BpGB07p)hu띴"2O)F Fi[V(NA4Z}_'X=O#<^=*4OΌ p2|{qP;zp`=='8q:g~'x91kk,2 K">:)q I0,A\%蕠]\ Lk!V K0»XM-zJ ʵk"v5L 1WE/W ſ_1hRvUB)xBF7٢[+˛hL`8;5h@CP$!:Gq]Gzf $}'ʞlHf 6ƛԸo#sx:x(b~#Ӧ":N(H0/0O?({;|A)0GV;GN=mCQ7a na9jͻ Ʃ]T8!N.P4{vQqEEXo>p4qE+B̸").zYzf89iF9ו1_7Z8f;xFne1hX`h4t\롊`CQEd7̎oEW">'pM# G]ENbܜde͂[[rf-Fdctyn_VFh +X]v:/Z2334u8=XE_4qf>E/K0uWݺfy?W KYpi`-k*[xQ~?:"XJ2@e,ʈe CֳG03tkʳPiEh? [{#Vahb;7w}{K$oAa5}=w׻4*d]ZMQbSlt`^BRm2qZ?{9X(A66ӭ9О90s`8GM:n||;QL{ޔ_ggB.BV3ff#O ԀZt|f֜ҀDe d)[:! FS|q{^"ǕM/?s #gK]×u 吏ʡ5w>c`B!>tpEk>Sk(hadbmpf3PnIComY=m{&lJ۠YIm`AzO qPas̓Qq: .d6Cu3 osA qlwA .{.8C.\HI%>uIgҐמBNaq^֐$n=!5H\p?q\ v` nqA \3]0 \..@w7zפgpZi3ˬϠL'Q8緸N)j /t^ZD\0삭.u \p`M!k,3gy]_)E'+%8sl`]`&[`xJ0cQtv!L\;-X2M{RTtKz@Νw/ d,{YS,X0Uܘ" Dr~Q!ō{āD-0qAD 9椎?Q gguKF*c6ôtuV5{Zi =#F^c(f׺z><^t6fI۽q/ua#:_t$OB\c!C8ƭUQ{#7k0#m]Xe2ك%<调-m/4D A`ol'{ZAR794j>·x>lea8Î|͇|p|8 BFLR3~$p"|j|:u0W`8e\ P,CHr`QN,'9zƚL]pPbwi7ƍTJ)GjP&G 0hf9'?wOkz捶&Guz =S‚ grc¼EKe kGQ/j av&Fy>WY?23 PJ.^&EBb`nHg6Uwb[@qv:5:OBo$:xS1IVI7l~ŲCB: r[\٫U9ӥE_P@F^_a^LQ&/edzYD_eo)l$6hFР12%vozY SoH<8,P %FrHV/He3!.دDE/HO/˶ن|l'ĵuykw덱&Q]־uyKZTXX^Q׶{]{LڶfzU*R;c]ε&\ڸfjkڨvw66V7vTۚڸI]ݸN]CB[cOuY+z:[Z1)jƖjKBuatMuєB jeTVS7I4S#vtr1LEUr9›9<]ۑۆ=yG`SxUUvZ 1|$1b5d]0VTs5>;J!/ O*͝Zϥq{,&'t!N+&iw1WvRs̥Qec-Yi5rh>n%)՘wsZ˰*HUR2a=ipeVzNf.2.uW;u\:r1Y8N|p֫[%d _VA˸\UC٘f,Xy>B:o8!WcΤuZa%~qh jck[yAݴޱk[S6:ѓIomLS_J5:uB6nZ}-kC>/XuSW1uZ̶5MoR]kFsHsGi=L'. 8Ii$4*e\8r^-9wQ[dImĶ.>si/‘WqyTڪ|Q;c IϗMz|xξ=9ݙ2jҽR7ITZ{JC>z+:Rҿֆk`fKh(Ӯs9wuyczr_kZNrv4&k/\O\G4;4]mMb _NZ5%Wy|.RNcyf4jpǸ3T2Wg!ֵ8X[T#ęN1JP[Kyl}g.['wi,㧱}F{-Vݿ~23Vux,5Kş?' }Q̗r knvt֥k[qsjg}z5GSϸKkbV}~9ߚNRZunmQ5bc}Т{ cc2ךZu؍]{t0MV%%9O1=.Tϒ-S?yhR]{5^MQ>îݿ[֫I׮eܧoˋqY%W^]Tu8ӿm2^g6q+մ,m骩#֔~+F]|ʤ-Ci睉k#܈߶q=Drg%ێc32ǽSߔX_a _~cUm\fɚ5׈++W +lx-_Ys+fO 7eK-[ [2"onb-}Yg0QƏKBdODM[އ>#hg;aOY,"޸/@؍n}[ȷȽwl𶻥H{ 46qpˠ{h{b$KwF/?b 9A >C.Lw "d,F")jiFfy!FDfLbڄ?>a2{}%^4kQyy ^Kx&':&E#P>>ɵⴱ0`4Q6""[Ä&<,rFÎs8LfLȖ},٫d.#O.T_W6,T|e2W\f(HYu1]Uff zf8ROPƋ"Uqcu{Y8}x>׬k~OH﮺=̌յ]PWoߧ=fŧWU2Hv3x+lͮ#Uᙑ}w-JϫOlOl ] d9lVmH$Q I=f&3⦅g VJb Dn  endstream endobj 6 0 obj 10142 endobj 7 0 obj << /Type /FontDescriptor /FontName /CAAAAA+AlbanyAMT /Flags 4 /FontBBox [ -222 -306 1072 1037 ] /ItalicAngle 0 /Ascent 905 /Descent -211 /CapHeight 1037 /StemV 80 /FontFile2 5 0 R >> endobj 8 0 obj << /Length 351 /Filter /FlateDecode >> stream x]n0 HCݡ"Z !HG{i(~`j9yy*uXa{YcM[ Vj{ dW &}5R7=KSc,gG: /xnV+診hǸeS5_kVwK5en\O?) @PoW0Z |/X@@~b&OOFIж ?1U#?i?hA8?;snX|Yy3Ag endstream endobj 9 0 obj << /Type /Font /Subtype /TrueType /BaseFont /CAAAAA+AlbanyAMT /FirstChar 0 /LastChar 26 /Widths [ 750 777 556 222 500 500 277 666 277 556 333 666 500 833 556 222 556 277 556 500 556 556 500 556 556 556 556 ] /FontDescriptor 7 0 R /ToUnicode 8 0 R >> endobj 10 0 obj << /Length 11 0 R /Filter /FlateDecode /Length1 1400 >> stream xkAƟM6JԴt#~6^z,֤-⡺]7a@bS* A*(=m}"Yv>̳><``n mj%˸7@1(Qx+xS[]8j{%RCs |XRI\Oy]V?oN ߛ&6wēxbC¯p;]Y/\<?5VhWXl. L }3~ڍ"GR+%4]̑B3 Pgv <^8JM*U!/9a})IO#01?ai^pΡ>h÷YH! 5#YcE*E`^e*>.3j='{ex:їꮞ+WmTkSg]3XRYEX +tieR]_C[Q[ endstream endobj 11 0 obj 597 endobj 12 0 obj << /Type /FontDescriptor /FontName /DAAAAA+OpenSymbol /Flags 4 /FontBBox [ -179 -312 1082 916 ] /ItalicAngle 0 /Ascent 916 /Descent -312 /CapHeight 916 /StemV 80 /FontFile2 10 0 R >> endobj 13 0 obj << /Length 229 /Filter /FlateDecode >> stream x] EC!i/0Qy1Ӗa6sıl #Ϥ:㬔`cg"2E{*5Svw uv9E(8k0دo~pV#1q9$r[܂r립)(܀UEQCu:՜3oR뇢., )7f컗R<\e-a|so endstream endobj 14 0 obj << /Type /Font /Subtype /TrueType /BaseFont /DAAAAA+OpenSymbol /FirstChar 0 /LastChar 1 /Widths [ 500 355 ] /FontDescriptor 12 0 R /ToUnicode 13 0 R >> endobj 15 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Courier /Encoding /WinAnsiEncoding >> endobj 16 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Helvetica /Encoding /WinAnsiEncoding >> endobj 17 0 obj << /F1 16 0 R /F2 9 0 R /F3 14 0 R /F4 15 0 R >> endobj 18 0 obj << /Font 17 0 R /ProcSet [ /PDF /Text ] >> endobj 1 0 obj << /Type /Page /Parent 4 0 R /Resources 18 0 R /MediaBox [ 0 0 595 842 ] /Group << /S /Transparency /CS /DeviceRGB /I true >> /Contents 2 0 R >> endobj 4 0 obj << /Type /Pages /Resources 18 0 R /MediaBox [ 0 0 595 842 ] /Kids [ 1 0 R ] /Count 1 >> endobj 19 0 obj << /Type /Catalog /Pages 4 0 R >> endobj 20 0 obj << /Author /Creator /Producer /CreationDate (D:20060406130315+02'00') >> endobj xref 0 21 0000000000 65535 f 0000017201 00000 n 0000000021 00000 n 0000004032 00000 n 0000017387 00000 n 0000004059 00000 n 0000014307 00000 n 0000014333 00000 n 0000014573 00000 n 0000015008 00000 n 0000015325 00000 n 0000016029 00000 n 0000016054 00000 n 0000016295 00000 n 0000016609 00000 n 0000016811 00000 n 0000016925 00000 n 0000017041 00000 n 0000017128 00000 n 0000017524 00000 n 0000017584 00000 n trailer << /Size 21 /Root 19 0 R /Info 20 0 R /ID [ <36111C6E2BD665827D28FFA9ED916414> <36111C6E2BD665827D28FFA9ED916414> ] >> startxref 17863 %%EOF eric4-4.5.18/eric/Documentation/PaxHeaders.8617/eric4-plugin.pdf0000644000175000001440000000007411140633217022322 xustar000000000000000030 atime=1389081085.280724357 30 ctime=1389081086.311724332 eric4-4.5.18/eric/Documentation/eric4-plugin.pdf0000644000175000001440000245316511140633217022067 0ustar00detlevusers00000000000000%PDF-1.4 %äüöß 2 0 obj <> stream xTj@+øz Lw ?8C 4!xRU]ܿ鯃B ^]Vv?'MyRdZ=ͽ= on=m/8 8O=s>bO=v'CG6O0TG⁞?lLR@y[Xi|XHHsV565N9Z>6B,ULxPՅ5Xq!l}XkZt':5V+gK_ңW3lBdtg[ޘm,` j к+q\OvT%n({q nW?qTEϪk T@@;Z]!5~Kp2ѴB4SkSK/We endstream endobj 3 0 obj 414 endobj 5 0 obj <> stream x][~_rI@PzMRh P-uYڻ܍`dAI4I85~tU)l濡]4tD״|+4ͷ_R(O #Zٿ4dIEU(W ]=46v8RM\F;L/M@ڕ~OCaǣ$v*ۀȹ靺! t-Ghh5Đz3O"ϻ.~Lw'a)Mho2wdg z:y_bBD,Rw9C1 ="rt#f񜅑 F3ȘIH"\ 1=3gШeaK5dEoVH)(Fp?S ,>` ;0Nwbj`691*qEq779~h[1NAYfRIm/Ӯ Me+^ TFDQN" ^!Y[{<>^JT< nڅ{G7)DBfTN5t)rtƚl*bMձS9V/atƅ:(uk``hڞG|V Ry4YvvljfOKu JR. %d`Y#'dAHj {@{}LW=\LEWnP#ّ`Z*WjX#9u;(V" 䆋nk(VIAD2ek?šV!i3^; fIsalPb6b&gݱq[H85‘aXmAʫ]Cpoqh?A1@))(j?rߤeFpke$CSO  >#h|4ALuN.td[u %܇֩s!.t3X›(2qu{2k'{Đ,5Q_8b,]: 7ZDPaA(*:( V3 dB[Fdqy'E!tZ8}\T̜d)?HJTlX#0]ZҗtZCD.1# o@StKhyMcMJ2cT+V74h{f؅YA1fUh`v[Qޠx<]ϣCj+Q-B׸a ӓkx/qW\<'[ѷ)  (' V~!e ,&2ca_a)Fv>^ 0G׷87)Jʍ@H;MfLn~8@ k\8,SPѭ瀄]emT Wd¨zQcH8! 'pXnE5 P+Dk9iv]PR9Y{ }.54Ar 2p]|,` v4(B1T|/B嫰,s7w #GûӜS4 9-Q >h*ԇ%^Lq.аE ;("0o ' kTEPw1 5YS9s3{w s'o-A|es v!wPp;d[ 10%G'% @:抸s곊5 O^//8 ۡhKR'bh\G)}twCޙ~xG&m뫤w}pɽc~F endstream endobj 6 0 obj 3296 endobj 8 0 obj <> stream x\n8+XNo @t0n6ue0nKR:Чzewݏ? 3t?wNoA AO>G8;nq#`ܘcgOV}|~%MIKNܩ֋N<ߨ7^ =M5pYk~^]feZ up ݨBSMbҊ(^я0 A e=>_/|{޼68 @ˠ~9]WhK(q! ;Q{:}|tK?Pkz3!8 h Q~X$ ɠ2Kپ*<8X(8Xg`g| 37Q!ijЏ֖@A7 2uG%A 영1kF f*#o kM?åR7ےͶY"n)'QB^'BCm&h;*BG9,y:z5X( m`]np6AVzU0o aCHeg99g2>`9R .!$8{aM2vsa)=$[cqiTŃ p=n#rr|FA$7WUvc#_|"Uڽ$T3Hu0UN1F'O&9"aw\$l&Z$)? s`UɥGRe~i=˂2cR6b Z8!G ԙ% c6H caX<]3F+%Ṋ[EA椩x0jPtmiV bXf#{ ܏JV W [zq5p;W fk/Uzc\%W D3QFqfdFf€4хJAU:u+05ѵCOyk^ 3:: F)YJkyΏ|M\ŝEiVt Œ DLtGDpMTBiNXlؘ[kG2xN\o,@Mē{5ޮʤ9.gr~epaO!po:YŽkMo%12a0vR5zWxA&IpLX麟U*+6+T'8&`ٙTC+Z$h},8"5kI2n; ?y%5@`J3N0m9w!Rtt::EAPЊ|a $љF6*${꺔[ȑ n0Q{l?X:WZgmw7\#g}&.R2 la7P.L:OCi371/HV,WX0~#+TUDn930*pX%X"CO\3I.؛PfTZA'juJ7O/ C=^Rmq)M$w.i!Ե*+|0nғ*\L6M+DJ"vj=XY'?~?eҒEEaK#V|6~ sqɇ)k]\bR^ X"&Kn)>vB/܎&w;إ)'oEpFz,f(X.TI UYHUJ>&XoXR20+ʼG%3Q{5|Y2M l/wbu8eOĂ9iV5!R֡)-Lhbݡ*5E]Aꋖ:4,j뮦;(iZtGs AkԷXu$+n!KbJSZ΀ɯXkqyq= Ilujd UKZAZ۱:!x[X]hr_u$TmK^$(|id_Ȼ쇫Kha}'eыѹ${^:e\ط5헙o~E٪r/Cd7bR@V3*xj}x W1gRۧHS맛zY^&~q }5 b{ϘٽZe:YEwwI4C'x*HYL5Ɩ{b蠘=P]tUg#)牞+ 'ߺM+}ǟ~ 픸<Tf endstream endobj 9 0 obj 2379 endobj 11 0 obj <> stream xZˎ Wx=;^A|,h  `7)Җ[=InzP|Rvӿ59Iki~s7}-ecm /OwEM.-O׿er,o63p7gOp ./ﶯo_Ҥ|Cqq(e`nd"!SVڹJKz]XvP u ɓ²pU9>f=)KI`պ*7uCf¯clBrѴYnAvFuj֩ǖS.jp'%AѥB aQOhs):S/.@-gUWnkx7xwO> Ǟݓk /%dÔUD/ kv*Ng/i¯͉=˴Uꔴ+1i}C/,aLq6gk`s|_ZbbhCGf_uQܙ8)&rc0p~I&c oH|ɶjflzy&f?+Z$J4IPAFa1,*M r_ym4ݵ8I2JF,842wDxj*aAN&Ǡ?tߎ/(ELB|iVݱ[݅վ0<⨄c&XӰsGVxe9S"q`S6,esFSB[hUGr|C^O$0Wࢱo\䡪7znk1 T  ou%Lј؇+ɹ/-¸uT >8M}:T7}WATeG-ER@!Պ[A{FdD?ko0%js`Ha&9+߉sG8腎mLL>^t_O&B~(?{nk?s>PQn ևgjRsˉX+Y%*BȳO*(hGES69V3 wvLs3QBU*sT>B\0Ɛ3ic@@+IDMD=f\{h9̥QGNJT,=b{G֏.G"i\w+-W$q*d?*̐M_ ' mgص P)Lw~Q#coX}OkȾ0<`[*dv2dOLbj\O[rɚ&h Z3}R͗}ܳzt 7Iް6sqm6L gS׈i8 ۫d)KYKWLZ0rj҄%L*|fɽ(k1#LjӽMɏM@R#HwGnXV1yۅC3PĔLJ[H⌧)))J{AP9IZU`/>|ܛmTvk{Z*V^[/1*ͮ~heAe#iK ֜H lۗel/DWF;V0C_>! Ke!M'j n^onF_Xp=8i-av{MKsڡJ>D7ʇ"SxdXl_]K"ƙJėVnE&ȕ-tYnC .n[U')6tDp_~WT||rB9}*DCxZeB B} I4A3ߥ E8@ x |F`6!Ƀ|)qXCWC`C}#1fW endstream endobj 12 0 obj 2762 endobj 14 0 obj <> stream xTTK4ZMZ>lb,1J$iBb AD,(UPA: ah3Ә>CM];wf8Lڜ:kfsнѣGV+## V믿0eA_NGV_~姟~0\5ASP x0|}AvP\(@ʠ5(^YY 7?<#b0;2h]p<ɢ3tK= џxCe+L=ޕK҇vnvsfXe`}]]ܨmpG䄰[*T"w6ߪV8J(s/Eol=Ww<[zSuSSqMz1EpAsחV]rlܲe˼yi,ЃiK1}UGAQa"+sxr߁ʷѵtvvRB^g r(`O_t#/֣@]]Çz-''' i舞X-kJ_^vFWæ2]M*P+ŸpjZ8 C@@@kk+C/p :::PrFC:7}{r"˶:µk6,2o 6*)~_~^vM8l6%L uGj>ы{if555z7W^˗/E1F4!;A5 FC_tW{3*ߩ.ZΟ?k7{ 9=Џ'o_=Vؕpf"'<^9a ;(ESv"ᐧ):將tD_m]*uV.̘|00pX,xC6m9r6t& .oHmgTNv05ʸ[? [p@ļ%z~SMfD9q1x C8eʔy{]Uq?^bLƬvqsU'/sb:wG{Gb'Mw꣨D:5üsO- ;s`%DER*Mfߍ6R^yB?`Eg60[ 蝝 Ft aD@-DDP{DCe+L="9hEJ0P \6È8:\1r\.[RҬia3h4EWqz{Oꭡ%5a{bDt"nٹrMsTޣV6 l# {ԨQ XL):>Ao./^t(0Fkn@Cj%LYK/!և(CظgP8hѢ?.;,T*5ަ! iZ0P=r 7"rϞhɥN)owrM|nnn.`~go555pî9Z]]lA7qѭᔆU䴳gMWu`6|Tzq]|oz׈9x W\9>@  ;v E\ll,rn߾Ƀ2,z||gh- p yww#G;a@ :KE:*u۠ !!׎2=`ٳg=^CGtRɏ,^m>~V2=,gXuXz "#Y7O5'N7n\,^QƽuHae bɓvt[\N)޽b6eќCCVUU9}+ ;|{Gaε+_"[`T=0`D@-Ft ]0鈮}Mj JB nd2Ew#'  ' @Bhll$ -ё$hFnДE@ "th%ςW!+N %GZYr_rBVR/J nx?IO$~O__uCx~%A}Jgx~$A bɫAĺ+IC$֜:4#':< D)23IilFm2K"a7+%*C_+)e5Pr.[`[RaqX)ٵUf.S5քv: KĖϚ5+++pv4͘1###0u]d' vvv^^^/Uv)'Nh;sA+VDDDddXv$ыr½_s펎9vش4hj͚5F@Y 8;;x</^pZ _1*(]AaB l~oS.W~2oA!K8 =j(@|R RCr3U&z5'suqqt>Z(CE w>[[۷o+fV~|e7d'׸Lv(P*oPB^ v`3Qt##O]];xIpݻwѢE~a`QQQϟ_r%2憎rh׾N[.\ u.e/E0aby,\t(X 5]Purr!ɪA <,;r)M֭%C8ĭ0R]oz (W̬?KyJǭi`{[\6/ o111(_ C@Xo^?x69s Qs9 9CCC'ɓauߢd:CA˗/72EчcXym1UKfsKNSeprpx k؇m1Naa'zkk+gg~xwߦ(2-nނi7.Y}&ޅZ6)5TQt.ɻR:k~957\6d 0T)N%msX粽vp֩C#R5O&_z0浢[sY׍|޽C#:0aD@-Ft )YP.cg9k,-r^" ѳJXC5r91M/m ury$RȠP nDy(|G$3 9ٍ0nMV w):϶D99nx6< kÓhflFrD6< Oa׌$ikkxF(BhDf Ft aD@-Ft d~̙W^yMӧOڎ1W_5!Rhf豱666iii2/m =oRb0})))E /}||PZ\\ٰ75i߹smݺpGd%ñ~'On)fG_|Q"~%J=== ¨'Na/] |7#%Q*E_XIII(ТXGhjj B@Sm@J:|(:E_/o&9t x"7$:QpeuĆ&#zttI"ҾP0x'*}ɒ%P!  N=Q^iUUUV nG'ON6 S$}#'}ыQp8???Cxy="*eee =z="*Ԡ bqss3'0 5ASPvfXaʖ'Ka撅?N9Z endstream endobj 15 0 obj 6021 endobj 16 0 obj <> stream xA A.&3 V&ɚ-wJ`i\|7} endstream endobj 17 0 obj 79 endobj 13 0 obj <> stream x] PG99 x hx$xDD4bbRFx(ni*IT<6nFTF%[,xkE1*ce7u93=o%Wf8'A͑#uGäIAL;[6?yԢxj<=: 6ooHHkǏssM6QY={InLh8OC֦Psh( cƘd# ii3f|?? 7!>^`e2~  4ub0@7{vM** NnV}Jxj1E4LVjUݖ-ڂ͛Fc8)+Ӟ:Us@m^^? :t}b[!W_׿[ܯ9A7`z%c.ufmT\eYWVjϝ۸_0IL4ooL,7S#~܄ʚcǍ3m˧-Z 4LP~رg) &O6k y,Rh(wh#a``````p!6.4vLvl u;vpw4lonߎTܪf:uzheUwd=j }}ؽ{Uׯgg4yx!6&?]0ek f箓U`k4hpaСa,y+UUڳgu0)2\u<5ײv`6l0vXi=*g%%%~~~ yyy1;""F8r[9 )Sb\Is9s-A@@@rrӧk7 heOh*-zyR.// x!{lL7|}}|1V0gk/]2C. 5hBi=a]2BEEMaaذGi/^TB} u!Y0QI<Q9@1geei~~~JJ oAv͕+W֬Yv!s8@I0H^`A߾}&S^TC3L2 .]:sLR.((TB1cƌe˖9@Y&p޽+VI:}5]V:,aܵk6ɊztSUq>1#-X }l | m۶o=&Cc„ -[|"jfU4,Yd5sYx1gK]:u ~#2ʨA2ܿ_T)U cLА!_{8aʕ:tΘ?''^#eZ˗k3qD!1Eoh:~xҔUIK_>22Vݻ#*Rsܳg%h~*{*h, I5y@ L"5/M`L{0]+2 FriDscl?(& 6=N* VZn|}}WZ/T]tIl)N. eNR^^&VP/),,l߾}vv6Pj׮]ڴi_MNV!iĩvo_FCڣGU.8!f+ꚢ"Sx#CϞ# T! 9)`NLL,.._ӧOw #y!va0=67nDo&eeehe-0@vZ P^nݬYa.\Ջ޽}I;#[o]~]* իH־4 9eI sErDw$%%%H'( ;l߾Aޣ p Zw[U]Ns#Fم[_ 66̙33EXv֏\WAAEd4hW_}˜1cNo7x`;0Y|I||_zBgǎoCThqVZ :-+BZv^SXѣJ*hQAtHs$Ӫ_}$Hd5<'g4$Q'O$ex i đg={O>鄅Ǐ>єU #bp?捽{+ pp$ƍ#3eݻ!&\|MŨMʴ%B`|4AuSbAʸ FRU&45;vzjtde1R2))L!9IkFDDQx>'bM !E}aSl1rid k7]#){H(';z[/_(zd;0YG@@Ç*+VP`,T벗T)%Nk5]f&ӳqK{ :9VViӡ$=fE~IZ{YТE T(lUU)csmEKUTTrΝ)<9** Ib6mPά1kS{  +I իB'/M#E ற Jfaa!&2Ursse kE"sIK5 ;޶mfG҈*{HscY ;Q?Rp]9m: ͓WSs'N:#;0 @cСC*ԃNtt… e#8rsoxx蓒İ٣m,4F?r$Ѷm{I 2 ,RɶP`@ǒYX'H\`6m/X6UKNNF&<|pr3zٲe#GtF ΒJo_~eYYYuu;wTvAtmNN`X9M![9+ " g~͕ƘѦvAeM8F+7nW8q*Xu?Rp]5z"$dyܹ#F޳jS6ZBEYv1$$$ 8P$ )T#Sr#ѣ]{;@TVh//N:SExxرccj/qZZ$66I;.Yn ׻K>,L3 "z H#QAd!MMN={NZM=<&Mjm ȦgFrJ,C پ};9a#\Dhn,ka@G4){Nd޽Q9ssy6eL;* 1_;x2_]ZZ,M#RV2BWjLϙ_~Y{$Ȓmʯ$syyMa~ǩQ\W\FfZ*L cTTTSKZs<ÇMJM^o|4ƿ38)yRqғU X>h4ܥK7SNҌ- mMf4wny-[:vŋ'}7Ҭ 5G6L` 7Ozy qqS׬ў<)wB{M `"dkLK;~DkF@~?oos@1:0lXß\yٽ΢6on:Uh+*֭Çﻐ{g>CsGu5wfݖ-$c.菓$ff֯X|vwiϞThpܹf>_\ duON3#Д(/מ>a~Isgs|A|}ͭZ۴1EDggE2И?Oee/ Ӧ7_c>}11BSh(IE@1*0ln͛![LH6MjԱ#q27SR->>HB9}E Ir~Wp"#[>rr7j]maau ii#))!C11=0 f>yhۖ:秤Zݴij52 ,+~YH.YRvmڥ=xp? /j5ߗ endstream endobj 18 0 obj 4765 endobj 20 0 obj <> stream xYێ6 }߯s&"u5z>X& E_R%Zg]غPLfzLbt4&ɀAco&/_/gOf1Ws3&爗(oV30gw0w.i >]‰9c,%<⁷Ŭh6>wض1M$2x+ҺwҷEg= g;z^žX f7v^% "w'OP dM'Q[lj|>U6:n;ɴpÔz>H~6CP~.:W䉜&9X9bGWF0 )ƧȆV96y.SC.leDR"6K53;i^NqLrJ0U0XGK= i }Sj܀!J8@,ssa)S~,v;EV*/i _yC. 7 sXI4[u(nRLx`,ԤeTDU/ V2\yֱ·F7 Ĕ R7Zo']wڰa6 'əc-0 Tc""99˔*fZi PI .s[%TS|P8KV147pzP7)ES*timv6t( ?Z,br*,n9/D 񌷽IP4Yd1^$YO>I S҅.[S4.prH]`*EK{P+)le[Vc J*9e"!V Xand7:]W7\D1l˕f= ~}SfDJ6ghQu!'(*Y6guNtKѱbW:Z)2 ]殳f <oSY{.h.;Q&=,DgSgt8Wh"WmTHM$*i,ױK!мcW'C~MS 1&-Ephi^\{o oEk îlAUÚR7+Jd{΅/CpdPRUj-walhM=g:R(lD+oTVX/5JrhDKm,RݾB,cl^i)Rn;%V.SG頴wuZ'v,tOvs0L'BrT<UlylmtgrOƫS(g B|Sj8`-8`f%PuGfZtಖsZKԫu&n*6~PjfS+ZrS$RKꢾؓ cnbъEdFi1n/<\h>]c`OA?Z'"F Ϲ/iʐ|| h>ECJ Hm9ۚj0Pnm+N<;pK xf> stream xkPSgƷ~ٶvvgڎ;u֊a\%MK)7C $!"K8 %!$Br!8'-t֓Hy̜̙}}y W~d4_BE=W8}MT= 0QMkʞ%khX;Yk=Z+TM혻v4l#R=74%Ky]?Үh L(WK4zbmod#~Xq5&)f`UvjMO% |/n\K 562F1šva0&/1T=jkÂ2T8'ʎo`mn|oH#:E1)ڮN5Qe"QZ !ݰ66"@TcZkK}3T@ֶX#/,e'e cSgY~0ZN-7>j#/)˰'] .p[4UӨRBi|x$RGNx`WXB7"E{DriF"En͠TW0 "[0&SzQ'<눎83 ZB7"X}I{n}eMMNt J;. п'z;[qŴ>NF BDqZ.nH\^PG'IDwGqa~$.&2B* ȉHlEfT@X5$/c[G"2Y L&zgYkQX~-r̬m'] ' /<9XҒŔ%_BM!!ڐ#]|SY-t#>*#6QoI?e6s (oݪzM-CE}U.;F f#pߏ";':A׹_ ùML;`zI#;컵ףuϼ<=.n}։Emx# wS9100?}+wo=fd6;Ѝ44GmIs1MP8Gy:b}0}w~b' }ťK&zuҢ Wc` Vyҫ<!WJ|Clݺ%B7V2ti\G"X;f '^{+3mw-RG:#M*8cMJ_P0#O Xy|.,t#sCo0$}͈"O q7݈SN9Y?"I< endstream endobj 23 0 obj 1804 endobj 25 0 obj <> stream xX˪$7 Wx=I6 jBC> &!wߏwopuYGGr^7'g^e|^ x=*$/ 8=\_#|; qʓ L\CbY{ A#gWE;84rlVav9tG]P&V3DlQDl"Qwq^@ A}BvfO"\hu}B`7B9_JLA'o !')C}fZgnqk`Lhٌ @&={*IQ$֤Mfo.4̀j"%3_ǟioarFlY S=k-5( {)h[dEiݴQv#PFxa aB*L*B>M栲ndU&q)KIdWqF2&Pq8^֍Ydi3aCzOwϗWbjtlYEKW\(.gay;XLq8>Rk#x%g?,v>&QI7qu2UDL\R K6 ,%4ȋ̎&>f5gGE8r,?P3 \dwL ^ہ B)<)iqDgV$q0~ߡb>C\ϊ 朷ȼF[.P|JƔ i R-zֈ{>cR4J\DL@l\ͦFjβ9"MC\`!K'ѓK_qPr2q,hkHBxq$ZuC1.XԵ\3WK>S՘ jUJKk3QrZHUw-oAv7'wBEUl3>LR+K#[z<&TEL!x`oHqMay=TZ(ʎQiQW)?sՑ膓m} vdž)O85xxtx=k4ؖ%féԸbTn Kڴm?ȩ_C/Qj+ endstream endobj 26 0 obj 1192 endobj 27 0 obj <> stream x} |N?DH(b i"\DB!%ĖťuDBotS߭K"VFwsf=v7|^93<3s_E?C ?N[ P@ `С999:A 6 :d( kպU+D4xnt*u=ztkWd8~Sw܁_PP\+Z(5WWV[,ZQE)2-m#]X>cadgf `RnXخ|5D'ȴ'PZ{ Fl.~6Z>f)KΚ{ o*Y dBYdٲ#HK[)*-]ب=Z(X%cZK.Y* 2v޽wvxǠ/cdʓZ8ĺ6:1kncjc&:䋭<`s>ܱİlp>%Zk7Vz,녠-!3V'iu},knzl̵߬6m͚( E r>`ʰtRvodѢ\,|,kiY (V*m"`'ަ1瞫qDz`CvUÞ=9cV~Z5{߯?w41(Y(O*PEՒvM * ْdRbm۶u㘧a #i.:3I:no>/!Dz1 Tm>1X~ U1mzDV|6njb >x;iq:jZj soVcVfj]+S̈#=?&E%mIsƯπ9DLSW yb鐂zB| ܹs %y.MÖ-3g +W޹zukuԭOG{Tܑ}#W;K/d">" T괤Q>9?׬Y;wi4OB{ wE+3` Ǵ8;fMSmmI7[#&41ռe=NK p/ {ƴB1 '.{OK3 R̝3(HNɀyɿ=E,|l{}.ڹsK2=AI Fta=GW8u8co OJQ(3@ rr nV;1}s#WLJ+|,mׯݸq`nٻw޽ܹs٣Fq.Κ5jӮgvׯCM-I&g\pH'HCC]vU/zysDwK3iIxsқG'Bq{n߾={tY蓊], #NEO!s Q/_`ڎz̵_SEg Q+BfS2>]8v3VO&41M)Bfx"ÆkYf:lY3,H]@FWQ{X ؋jyW4^@I rl0#jcZ?i(:yS]( b((0lf3GwĖWX3)!`JK@HHa*q8Ő =W}2sB11|Mr)C6m… 7nHUeȀ!|M u.LeKI.((۷4[nU$׏;;? $?޶][3օHjR)jeъVu=Js<1DŽ#8Ez_S:F)} {uej7fU$]VVj{d5X]˻DbӸ̜4//c]\,^6F\m8`b8=JӦMH((<93SJp'z|+Eo !0AJX'S>ƙF}ulTTdDG5>lWî]ݻy/9+ەo^A Syuܫ&sg!sȐ!={ Ls»^?<;;`A>]+lbРA1c/BbС]!?-Kڵo>jN.w-L58VnIC9eeq֑x) _ 3Js׬|[EDje|7̊Bw1|UJTҭ{ׯ G=JQd>)yzhD#Gu2jHzSJVEFk`LN.T3aǏ֭+$üy꫏ q>J1wC헇剌0RJ>f̼wdصi<&2?;w7nCR$IAӒmaMo\qˏtV,ͧ:%UԷ ȟ7nx_sc"qXH%f4!>iy3eqآ15JzFmZD1)<eLiZV)E[kk&;e{m5L +YzL_Eo:DagWT`4x$ODM~eZUBbѡĄf"G~?KɊBԨHHF \'?} L8Wbz1kJvG^<ao{ڛ]gO=o6iy"_h;\w  K.A[n \}^WŒ%I˗IɗВLIwCЧO.]f'ԫխGDKX5;wm :lMXՂj&C9ō*+oFJ8-Δ9P׾g%ݨV_'8Z4k?̹myۮuIwDgzIQ:>|ήH1ODMkܘcԪF z+phԨ1f"cƌQ_c门Q ]$gc3L*!:YX{ԗ~[nݺΘ7K}O`* o5Upd`Oz!,7Pf`Zt'|L3?0|Æ@b߾-1SvPӪygv o>_$^=Gƚ1qU{1-ew S,o+]mwO\Z[$ft F{+Mu#eb 0ռWECD3f+~C !|:\5iқџuæM =};?m)}{Ju;7%cL$ V_~͛7oܸjժ~u}""ڴNFDGGӒm٣OlPzTt۷oݡ )JʔTXl~NnLLLPP oᢅ@a2;*nۮMwW'}\>&%|̲x%{1A!1š4~]:%;:>+EuhGP[9?Q{CEnIc$@?Q^7Z%Zi@'c&GV~p>f.hİl&GA,'9ƏPT'%2ax֬>6~xk`Qpc /67^@~-{g;p1蕿.˽w6D:(XfkcAǂbM<}޽{C̭f}]UE1YWr d1cWuӥ$]Tݢ7]ף~. T3~v8-gEש-6cZ畝繹}l]hQZ=yW,c&|ˤ[S.-&ĉƞ>|l oBQ̊;oاA`s}9"NK" }Hi Z/=w:"ou7xm%ah8f=ɉwҲ_iүzcr_O{R;GՓO%'U$u]+`زɱ*%lHp &ϟ Q,ڻd]pYY&N4v2JX=ׇ\‚VX% B?!?OVt\4e*-QUz|Ce(>&[21*=Ѹ^LVz4W?jc)%S fVuPO cc~˄qMkuClR0lהL;*Q…vW4?.oe: )5MjPv?<XGͅte!:ϯ}Xicӟi/{l9|LMHK77L٩}4: .ńo%&n+'c&בzzj2Hueo$]5a Ev%G">i\fݔߴ'Vbqf~i4dxkъ[^nߢ֒q7E~~+7b)fzy>hƭp'3a't<δ~l>jҥ(`npØFȍ[uu0[1^_8'ڴ DMs^1DN8/wWMgjB-/k&wXs@=oZ"2ƈQ{aҢVCmI')=&p-MNwL~tgVE;v 1{_a1Wl \L.ORW'9nLF]1)ܺ-*oኇ(l2Ȇ_dğ\ZeB h2f7NK )jN=Oyy%GZߊKb-YZnu8%w@ )zTVT1%_c@ v@jԬQ݃<V@ VmO^@ }@/3-i8 ; [(1P:}?ܱc9shWhV(>]kp{̲vul䡘@ c)l$}ĉ`WWWRgh7((j)䄅Г'OmY`s߾}W7A@7n\jO>DqV\K7oMתUkѢEurrUWbHz`7O|XG\*Ҵi 6ժUc VFZ~ U6m_~aÆlP> >kȍuXhijm3g@ylv;k,uIl|a'zp)l8UEk0i -)_roǑ-&|#R-R#%%… ?.ƺsέ^z ڶmYb6ԬY~Gݻw={vff&{rJ0,55(-?jԨӧO䓂k- kPرc6ȁO3{CK>C؆hW_}ۺZψ# mʔ)3gΰa&{ $>>^>Fk\7*\%n{X46h.))UV"SMvYԆq@> \&STqZ%|ob˽!G#i@ J9o!Qzl;t_ƻ⨧ŋ!ѸN:j <h,V5ki*8uk- Abƍ!!!ܹ_|׫Pk׮֭MK,&LyHGDD|lj:u$`cvW 9[;FO?i///4k00G_=jX?UEk0i -)_rohtɎȧ1(|d6ce˖%2eʨ˳b$._C7JI Ԯ]ȑ#T-(QGiV"I8!'NL4G 4ojk%V$Qu=v# r(*kp`` wwzΞ= څ6ʕ+gժUO>6DC&#-JI),qYp-W|4꧰Kn ]&f#i@ J9X>F)|̞>>::ZUΝ;tI\=;w9s&iCǏ R(8~=*w\ 9urkq_)dg/\9b($`.7/Ll1 1(h6@MɬcW/##T $ sȑl_СC_~[^xqjըQcժUJ6nx޼y %4 z6mڤ [4iYd){ׇ<2sȓ/G"B--*/ֹQiٳgn ɓ'h;&`}'&&Lj,w\ 9uw|L4uEQ>wԮ]{yoVg}8nݺPV+!'%%i\kUl= ݇?G) sJ<ǧL2Xp[矡޽{*H+*s@ϟ/#j܍r%ݑ1ng*7;{ڷo_JiӦUXQaa|KcX"_6cڧ13A@K_V ƅ `U@ , cQbŏ>V @~Vڮ]_~ A#C ڶkC@ C c}%@ AKﯤh{@ JX>F(c &| @ hضP^"#|L c@ c>!C OCɐ!@ S@ .-|LAɸJ\`< D2qT`vJ>V(%](((((((((Q2cDXVV_n;#mBXksxgnXco@Lv1h܅%G uR5| @)"c 1hPJ ;8%^psxgnJq|P2gؙsQJaƠUpsxgnJqk!zNEq~9lj?LcÎmFXk)U:.1σe؟g.8:}Ϝ=o$vn6]ǺX×YmLMz꜋&]CG1X.k2s'!)gy(&罿~Ö;w]./Y4<ሔ0QT@իaf p*Ei,W~zۂeFj1..җheEnMX"chРc9:uB=*yIzPr_} #r_<Ӹϊ ;hރ8"%IcݦmUi޼D wDEwU^&K2%Բ6(0ujO)~Yy"07bb|ǐn{B9A˕+UiI`4qбN!;z8-"v"[n_vCR ;@|.]櫯74k"gyͧGg$V dɲ (?.M_<ԅili^z'ϛ,^00e]\Y-@ܵG'-:uYbiW*Uv_rߎTMӫ:-#g|PB>4lm;!=w#! lHRQtq>leؒ?h4q9hcy|L!r>sD`gΞ;|D"sCoY9&|K/~/c}8Z&4M7}_e%QDr"ԗ_} N&9wÇ *φ@a-+F%nRсq=8-ݷq^th3GXlu HZ` q{aX! :inh}8:t؈#e1 Dpp( b,~UquTt3ckЀmI$$ kFj1CYwR;&GRf&.7g|u|g&MBIӿ=Cի1HYCjI#pVsvǮ_hI`4QfͬSV-"}O؜7])*φ@.|*lxq 3(8:pzD¨3fAbFlعN  Nx|G(+JX?|ݺ9k$`;ޣ *B z"=흵H-fH#-NJLk0rF3v>^NJRr~?C?́q <rlٲ$eʔy!A*U*T$@HKu/p"6?ϓKd*lQ%15nk]?;^ddE nyx9b@@ʕsswzFE +wt*V9"o$]\mNiڰ@Hq@{g-0R ㉵bhrs1y??Kl3<"o~Crvh$ɬU6 ]{/~UgBEDwϻrf~ɰصOx=|rRdk:.`I``'wQv&Ùwaot@_a lcGQ% Z`3%)ST w|#.7-|R2p{"ȿ&:7iHL> dFlHM}g:LCiIϋ:r"~0I{~Y|nҟ67OdR:Ǚ9{Q} ;%s9p7"ρqAc 胥3[v#K%i4'uQ5{[S%J8:p؉M4,`úzW?]L}?-]QE3ო6tͪ_9Ν#`PD] Vꑾ|B -}*T1ZK{Y b(0R_RsW$&OyݽbxxGE]洢$٧PM<.uE W=ztEEE68(vb-jY<ᣀbHg/}%Cicdz@q69r̻rM.'TTdÎ{bW.Ru> (ֈ|cNRb ;7Ůc]T ;pP|+,3c'N)voǺXK>ww1:v()r?osPJaƠUpsxgnJq!{1?l#lq1(vb-jYR>f#eaÎÍAXk)U:.">ԩ|cc&'`%aG uR5| @)b̂W~w%h+zǺXT ;pZd, lߎ3 իWOOOOOѧF>F(|4Tp]GPG pPT;XNAD|LL^*W\˖-G5dO?ʬZJ{9^⡃?9l֭[6m ԢE#G(8poǎX#t钙IܰaC׮]hFfvNNNTT{jFqMoCCju(ry+6>c,%cc[d dE ѻw>}[ vhs 溽aÆׯ/((={v@@{۷oO:X#?\OH8qFnfm6%%C^^ĉGIm4.t(5*/!] >ƶ:֭[pg 4 ^`uIH̙3~pJ_|gVZ%I&$` |BC"3]bu?9l"c0@RE/LH:u /8 L0!99+WDEE/_>22ի,....͛7߶m#-6B+T@=xF$M.IAPbÎ:6z{{qƍAҥ>mҝpY{11 Doq:qSE`pNg}rQ`0TeB>1?91]p>NRbŊdk{.وa2'8tv޽{gSiիWgϞMsÎ:6^I*U#??U.f~t >}zlllFGr:1~_ɵA= /_f=!ΝӲ~< 44o!Gc0N:uꐣ@ ~67kts>!3E.pÇ&>Ըq'X$m6p'z *ۥinl?~Ϟ=!2yd^pՊ[JI[pႺX@@3233=>m m |,M[̺>FB?f&&&d3F~:p?f~qqq(gp(Zz5)&2:ng 4뮭[vMA||̙3w0` Dv2 4Ȁd6i>d:Ս6;!!aڴi/^#**J.Msccjj*ŋC:))}ܹVhˠc% .::n8u%nq. 9̅&>>{\#s p>UUVMNNqӻw>#`5j9pȑ#pV tt/_2,g(P OLp(uຮ^zg4k.ooo#l0~`'Cnnnxx8rf3vWL!;yëU֣Grq X;ؘrrr1rhJZn۠$::3==]֬Y 3%%E}.7sG؅t!#4 yKA Ǭ0..kPPPvv  8Ġt3XH'+C @!cɏ++u>@ Qa`D`@V????S3@ Rc=17@#K;SKi   !"||>\r-[ܷo7lU>g/7WI~~~*UQ֝p x^9˫[.Ё|||\]]9;v0먞|ۺukӦMahт>Ӊ;nѣGz6mN8!)Xe7!xQ*VؠAB+ХKL ztYLklېи_`-nVȊF>Fqv{ӧ5[-$(ka;'Μ9ӺukQ @=uTbGlذ fϞ@2fG`P?}d9| 4w-Z4y[n}{g%?\OHSzlu`v[ r`ē7i?f @܀3AE> *$$z ,PĜ9sׯ>7??ٳUVn!vqqi޼m$T({uep Zrh ?)) [&++ r#b u8<vZԪUkҥ"h:uJ}-?jODaUTرK:WZ#A'|srn︙PWX=BA/~0aBrr2$͛G^"ʕGFF@c670ҽN-nӊФe ` LhYjի ba5/;hW}mEMKƽ( \rFF:P |̲+ISRRڴiepT4!!ʂiϾj͚5sttڵkI&MKKsRȡL\~bu/+VK1yB04ͳ Rn߾r8)lyܹs?+UD777@d6l :TsҤIE:-[ 2x͚5 ˖-[>|u֠ y7$'w .\al[\v ɡC:0Op#1cƐbQp 1۴"4i_lbܸqd,Y7E!5j!TF} p3gB\MM}AIj?=,c!!O$8` m``ÇEdu%/s?s w/#G̗_~ IHGDDl޼}17&Ma4NPga'2eʐģGhZQxH N2wڵku!===_N׬YSSYf3en︙{gw!r@Sr/PUa[~}ddf6ʕ+?XW䎂cܦI``9o0~IԖ\\㹫FBE\ L݊zE 5F]{1a| X) wPEM3Mo>쳐c0VSN In&iccc5jq.[,鸓Ù>$y}Cd' wޥUc0h >|X: P2"rTa'$}f@ %>&rۺ c*T@oνh? F7RwQrG٢^ܦEaAc<$ u /rۢ rW:-&jE5M˺V7VAY S|_I?fc||2M&ܹsZ:,,fwX|9eLTg̘yQS,V~ Wk>s!qϟ7!mQ 09.^h0XR~}su¹3 '>}z.Q︙.?&r}&,ArzZjUk -ƍ]F6m!ML6->>d7Mdc|ըC%o׵zkk֭KzzM1+mrD1chg4O?D&MV^ g엿L{/햜1/CF wsN'̙>g;?DvB؟9sf~~;3`LM6- &L;\0o$,\2wѭ[7wXq3v &A8;_P I̙'_}]e4hwGplQ`T)n& w `ߪsۢ4wըC(>^(/jմ*G^p!X8n8䚝9F3AUpp0%''"ݽ{:>6FAϯL2#T'hϞ=˗/o0ޫ |;%%E>d3*Hj^ ~s8C6s٠k.pxZO6- >xW^t^t)$$fNTT`Wz.q{(m((m+Z##c1@  `) {`Xf@ l!@X-|~wc!C ǂd @  zʕ+ײe}|s-7YeΝnnn#F /-ӫXUJ~!R2-زeyyyu"ruum׮i Bt%33al'nfL3y|yB=cmٵ ??? BE|,V>FI)mתU/ [hm[jXqnS7'gΜiݺ]-Z RSSFiӦR|Bĉ64t3]@5>T9X ]}b) >Q'd\>u}qƄT^}꒐3gNٳ~eddPUiUV6ݻi}ULJJʵ_TM4 UԺrJTTT###;ȣ]\\7om6x9-Ju[l1K.5UP>!tń !1ovlְ`5APL>f:>"I/[ 3 B2k37;r F>sLH/ZW^1iƍM@bɒ%ot {էO۷WIZ7q pw^7;c2&c hcKr]ݺua_p7;rT1.7eXdMT#!qOOOEڵk`ԫWdFDDl޼Ynpݦh8fErƍ0Rp 1!l+WNOO'@Z",F5k$܀C7nطo_)SA[nׯ7i0`-?t {UF OL-UNyUِd0A~wSWSF]u;MN>=66QF截E0[Qlٲt4өS'WWWw%M rq`)#hhBw<|F>ɟ%`>&L2$ 8\QHhzyyaR |zxxב[ ޽ {}Mnr`b[@;R##BXG#._Kºa׸4ǎe[u3fdff=zT#=Uٳg8a)jF۷`)8\)Z|LQȕ@d._"/Ff+1y0Y&sUdrfn*?~Ϟ=!2yPEE6U111ӦMkFr0*[L- QΝWB&F$?~x{njq=oZkӦMɗעN?G?FѣG+j 4 $M4Yz5d뛋Ju%Ν;< vċQ٬~+5ø80$p(6sWyjj*PŋC:)) l;w"W*HIor ɍ޽;,-^s&neW47BB JD #n *88jժɕ*URTmv|Mf\\\ԩ3o@ D1ݻwm6ГObiٲ}hfs`77#F:uJf (zνyyyu:r䈿kv?nOzK. 6tՁhnfDEEWV #}mc5j!@ɓ' FUv lR EjC7hHʕNu޽{7rJQK $!|pЦME>wOLLL,I&!:-[@C cBHgΜ E+ m{ذa %֭[GWX8vA՝d~Xp"O nǀ >|+lnݺgΜ( >0AAA*LR4M_Xvm F^zLwÇ2%p^8fvYrƍp Q!ly+WNOO'rWbDD͛7[pEٰ_lY__|X yyy4M._n0rŚ5kצk0^2eJXX!_mHj A)t]jDu'NFX}%7'B~8X=Q]N:<YJ^HLb3aIiI&ا OeJ*ͽrq`)#JIJ0do5Vbnn.+Vܻw} =;zٳ5kF(D+((p$(T "[aOۨQ#QKE d~ߗف| F<6 Fؿ˗;v+?^bYF ފaÆ%eJ*ͽgBTFR o%Lpmm6p'zyz$7tԬY\F4?~Ϟ=!2ydI?t#%7]pAӀ3fdff=zT}RnT'p'c ؄0hfbb{qOܳg~ ~צM߉j ŋ/H~nor 4 eZ^cp+T8u{\sXp S /L.&M^2fK{0mڴ/B`n-pHT /6orww;we˒kM\{ .Kƍr-e\rOcpNޣ*88jժɕ*URT|Mf\\\ԩ3oֈp.J@   1@  |1c@ +)`c@茻w:m > c_)W\˖-G5[^`3Jp&}[nmڴ)E-ԏ:p+Ԏ;taGt%33a*'nfDEEWVmĈY 5~~~uPG;Y6c$A 1Yo+Qs68M*`6l~ٳg(0<{ԩRqq |Bĉ64t3m۶)))&N8rHo褑:pk-|R2>֭[p>^TT^}꒐3gNfWP^{}"UVAa# , d!'(>y$$U;y{]/:rB77,,r ,,A՝ma~~5 ,>'pЦME>wLLL ܭVV~~>)% ӧOjj$bݺu`+`ѺÆ 3҆*omR!(`8}tf*Une777; ׮]|! 6_޻wo͚5cƌ!`BNvZjBcbbF;v͇3i$8ga#L||ehqȐ!3vX1I̙3!hѢW^yEM/u]uC7&ui 6"X>|+lnݺmgΜn"SO[Y΁fIߑ8M*8f0Yf/-)S$=zDӈ+WNJX7l#pRdfhQ`6@˖-~k@<==_n0F5kBbƍ}5ox2eJXXu~z6pruTqAEE2N< tc\[ Doq:qN4 +͝>}zll,y)-CH q tn A@.q+V$[ݻw|Bj58!M2aw޽{gSiիWgϞM#5ǸsP UTO|VԸq'΄5jܻw[˗/L{ ?+B vif͚GzYtt{ 鐐ɓ'_-\~jm.\PwA$Fugx"8#w!ǏO3oƌc>ֽ{;w V|=aXS|رc 68M*\lݺ[ngΜ g΀l B?aРA>,@٤IիWCSݓioMV(u4m߉CdXx1Νhlٲg2\~q= ʷS=z… ظqԱWY+nTwΉ'S11 d @ժUw&,[跷w7l@r֬Y %%z"\KzT@6 pT^=4صk = ρt6a?!777<<FYft)SƩ~loo޼9|jժу\6ΥKBBBʗ/+'P ''i WVz Djb9*t_v-::3==]ݮHWܨAz1kLxKiGB;|R!D cb5>!|,..5(((;;zΰÝdR!D -c!<@ DI}F*i$!@&Xx} @ 1ǷGF"C 9$|P2c;w c@8޽h~B"sXxxXd|>\r-[ܷo7ly3Uk0X)38\م0b֭[6m CТE Î8 c],E]t̤nذk׮G#t3;'''**ݽZj#FmX3n[m9!|, YDg`bQ]D[H]J:BcvLL̨Q>cǎv&M,l`QGcBHgΜ E+ m~u \%4'n֭+V:8m՝mr!c:hݢeVZnݪmۀ z``Çi"֭K^~I*2߉C,=0vqㆢEOOO*.PfMQ gpn\3rȬYW˔)C=iDql+WNOO'֮]nիG2#""l޼Yyٰ7/[I>$oƍ}5ox2eJXXu~z6^rux*Q ]ܶQ g">d m`;vb+8;\BSp[b$CN8u]A8')PbE5ܽ{Q+&|?a͝N:ػw} =;zٳcQ`WPPΝ;XoTR>=<Ըq筐X}ae lW1X*TP+xٳ'aֱSАreoo>FB?f&&&d3|{;wk=z…|ƍGŭ^vҢpf됭[vM@||̙3w0` Dv2 4߇H24i2VL{0mڴ/ŠRnWRSSf,^IIIsURlY3Zn;tst{w-nTww.|E+CA؛GLP\jdI>=]z 6k׮Ygzz:-v%faMϭ[: mv!ΩWdڵ F:ɐܬY3 :؈ʔ)T?U7o>|xjzA.k񲲲@NN1@jrsx*5k)MIIQōܡt.c!!!af>f /_\}8$8Fu! F?F+-C\\kPPPvv  ]QP|EDER2@"":+@ lcFQ<"222c@ 6I>\ ;wbXhQ C  &а `F>@ ash7;wޝPJ'{M@ qlp$f p}euԩk׮zz饗c 'ʕkٲ}h}W5dZ5-F'8Nw_7ٴg //nݺCquuWرìb.]dff?7lv`\rf^^Ӯỉeɐi>ַoX, + |$ta~Z5dspyy}Gd:3gZn-݀ȓNڿ"?޴iSr>q℣2 v`\rfBe[cݻw饗;t`+>ufE>*$$z ,PĜ9sׯ/z订$X}K wp> E+WDEE/_>22u+++ zxx|7ƫ}˾ڽ{?rJ.s v8NZj-]T}}}SO:>EGL0!99#/.%\\\7om6GZl>f;0.q-"H^J*;vt$Sd* 6G^W4vC4dHc111}ԩSV ,>)))mڴQO uDX8 ܝ VV~~>w ؑ/[ N[҆ m:tYf̘1$}v.C=[LZb~n; }G\K*j's J*ݿ`|{Yu׮]kRi k׮5ĵ\dž :T)2EMUWJMӐ#%cFtAQ)ѫ"bTWVK(H[J6VR-+эܲ &T\FE7FP ~;s<ϙ3̙>o9gg̘J6~W_}cgϞӶ0Gjoiia\(R"2aÆ0|p2@K$rСI%7y =,?Lvo=jiKڡ ' <~UpR`n8p-[OPJJJ<~浇b/1%cW^%:H9Qi[&yڢlTLSr|7x7񝛛?n8|[yImӰ;y1g.rӧ }+[FGGȌ lllAz’E :RZZ,?Lvo=jkYCANŠ%K盕y!SP CCik藘3} ׮޽~+D*CفcM ežcӧO}7~cr$L\YYIX=<0BX˄=%ĦN:s?{,huuI𿧧 7 ˴um o-z\8{sppX%7Z&݊]&rss_y@ u:]LLLss2i&Ta݅[Ԧɶ7=օ~)mb)SƆ꫓'O5k}qppppppp*XHHXVV>U=eS_{1C6mڴ3fǧeN> qpppppppr|7LJJ?~7gd9޽{É퇃r8'q1 ]%''|sfl|lq?F78y$7Wl,rYX!!!gKzu/B?a65_cQSLj%c^jjj tȑ#fp:`ػw/Y__fGyTB3IUzYPx,::zƌySs_  wA5F6}6D}z6 aV]eo/Qq~҂2>}ԴWcc^'|uc۷AE4}||֮]+MU*T|r>D\7ey^yNNNN]t ywe0yf#ᦦI&LD| ;vlܸq(dĈ۷oVMcǎ=tp~Vj/H/nڴI ^*],+pFWVV"z dh#= Sr9 :hР')DʉJœir^e)H SLPcӦM{ Y ^O1,&.)))..f5YSGAx͛lٸqٳEQי3gpD[*cr&De@B۷oΜ9$`R0ET_?VZ5t>|s@͂4^\V{1FzV xwׯYy9]]]gX;㷅ñڈmGO”\'ϝ;fFʉ*tr0W.N104Orxث@RRz |ٳRJuGgoiia5(R"2aÆ+*adZIСC;;;E-RS(a4` S̬:)) ~rNU2ͷ(W^ !W <~UpR`68p-[OX Ķ'aJ.瓯^J@u r ]T*eT)fz P~fffrrrkOӧ$[)kswww*b5 ЧOx8h\=ES" z;>&D T#@K.}饗U#AllN߿' ր4^jk !WIڽ{*r8)0Ч&?冤@l;zr>(gLHYQ+˨,0agzir|,###==|,25-XGG R}kk2anrC1 â2">~x ȑ#=>xblٲ{;wNA-wܩBLe?jr=:) p,Ŷ'aJ.oܸa0=,*S c2\FeɅ v6a& ǀ쬜)gL}~[1(ȶ`YRRBUVVfE>VPPPSSC(YN>֭[I$=-y{Y/9"Ѵj޼y " ˉJ:Yuhh(jA.kLJͷZcBȕSXXXQQݽdɒ|r8/}4~[8akIw_~ ʢ2ŠWMUVS&LB!X EYV%34H7xJr> 퉉&,,'ǁ>>>$&++ %5(|ѐ>Mf fl"LQkkkUc,Y?w.|{ُ5F,ѣh#$ jjjRN2)mp,Ŷ'aJ.׬Y1yd"\L1UyUԳ S4PHe>O'cc챺z$[mP 7#؏'a"hҤK73Դ}JY>,l u:]LLLss2i&T8 7}G1akhI8)R)S̟F?ciiicV _i |,cVcc޽{N]yspp8)8"8TL(ϟf%}8y$7Wl,rYX!!!dOrD,{!^ $Tmu y楦 N9rĬNL{?1eQLl;@*wx?񏶨ιQ5cic9#-^5\TA*ˣDԩS{-!s9IIer瓓/^LO #a3$IÚ)S=z_$|Q>&.BE͔kT!6!ټ***O}]i&jiK^X$0`{n~ch`&%0G Ç;wDJڈmGÔ\͝;̙)'*m3Yf,S Fic`gϞ' Ƈ̉\EUDO6l9L 1N3}lСS1>ҦM#W'wštpIIIEj)Bl V Ʒ2>CHa-wvkl*f쵄\nnn$cVI7p-[̑E1Mgvt;LիWN!RNT>f2/&LYާ&Xy%3i-3gNL ЧOx8h\}MS" zNӿa G k$< B7nkSnr`]`R:bߠAŅaIZf%*߿?q5GzʼN )yC 3Rcccu:,ĉ7h Sr(gLHKɼ205FO$aVc`dp-t(b߿/O{EKJJz=\PP@ (KXTTTZZMPJO>!bTki&jk_㖖)sܹsR;l-SrA`| LF!k2/S&LS>d1Kb*|;@4TSSC(YN>֭[I$t=8-!V[[۶mٹs'ϟW_~ .(Hg("g6S X֭mذ˗{yy}Gj&jk%K盕y!SH Bo<*b0%gJK_~ &3)fh^C1b9 hDQqqqO@,cmmmzMޞa¾{yܹ@8J0 pɃd9 ^xlZX>MP /_l0a؛IZf%DҟGBМ&.a2G BHHVŶaJt5/ՒYPjzqہ+] wspp8w;LVԋ&[&*G}1011202 +((t111͖ĦMPnto p6fPlbr)))88888888\ fffYr>aC(𱧯q>aCp>a_(?d_t)COGXA߾}#""N.sB\u=(?JfU>FdZ(ZH.Y/JBKkfE c*er}1jԨݻw\2222r.\&wBŋ-ih& `X,\[Y6y5+Uyu>F` >ܾ}[Ӊ♛⢨xkJS"jժ.̊\b0nKNSҒRzvmhpͬCc/MLt^ +++Xz59͛z#99YBtww;vC)ڈI=|Px;#11@BO:,777c :Ifv Ӱ]70p[JcƍF}vUr 2^,,L1|XU؝;wj3gҒ ,13)FVwwp[fEu 4ic %s5"9=lmm5&׮] pڢ ̙3 #C ?߿_[[[VVFaXmܸdΝHiW@ym۶x ENaa͛!j={6bϟ4zyyUTT 駟eKW=w\01TTZZ*u!!!_|~ޢRdYYPc!ɗW>{,a???0|Qs&%WEҊ99 1X&mYrRYAQQ&ub ~er[l!?񎐿?+9ٿ?؂}yaܸq} >ua6l9 ://`|?LHH@8==}Z~LZ,]¼#F/'L%*UAƫ;%Kcę3Ǐ FsbΤPnk>F5tN#QT\\+++  b¥WdžrX/xxx-q(CAir?Ef{{{bb"`XXe1$$͡lkע!C/33zi->>2K.!˗0\jNY,]L a ׍2SRR ei`Ϫ*Ur^emL?&d#z,quuVY8p@xxD0 GSUõh[Օg1񱂂oooNlIQuuuġp+Zkq\\ϫ+1ц ?Pcd?X2!|,؈gG`}~ c?a(1aITʳ|wPcii1sȖ+Cq#SCy>fdbB>>F.۷oDDɓ'ib+gnsu:GXEN,)22R%F7n% sNpa^[h^3r~~~K cƌå[!q8RSSKcʰ<6Lϯ1-b$*f\ k `J&KeA%#.&5vuuK,8enV-gݺuL;5 ~ߑ9xvjKk53{-ǔerM5jݻޕ+WXF367o/^ho 5**njauj@%1H@cRdjZ0kvVc`Y|Lݦ,>ܾ} Y/L@(*>>gڵҔZ* @a3^t=͛z#99E93ǎ7n1b$˥Kgw%Jё˗#I9f0y6p@¥|Pi Φpf+y^3V`R;G-M 4I_SS3hР'HfuK.Wn&KO,&?Y|Ν;UUUXH#M\RR3'&8naUrjk' 9skkkDA׿ 矣IdNNÇ n޼mܸq*tKMnذV(\$HrO?#s:K[a]kfdLyekkAŊڵkaaa6C[tuuabcF 3a>ܹs'RU@ ]Nϟ FUQQ0ݻk`91-Z56i0Iؾ*/Ν @sQa۩…KK{r,U߅@DϞ=+mT{~~~ fHa] ?#4| /]C#aÆSW_2)\ӄOL6 1Ν#[DDD455iǜWVXQ󚙽6 7ǔ5)Ҋ+C zE,OJJ޿C&O cć(^믿&!~0hݻ ,',l#G`9|J`Yʾ wBH *M/U^s-M=?d}^ɌgNLy:tԀ\9= ޺ӧEۗ.]K/H$=^"fR$wޑ#Gl. K.f#sS+\̺9\HX.k=OHt?q}Pꊋ \Mwjv#Fl 4ub] qhyMQY RĤMo1vars4e>cF~Zutt0)f1 6ПVpQ9"##-[;Сa4%d"lHM6\BG̞=mV8VԼff ^xri_vfrgy;wTWWK6 B1-644(Kw^'dee!û{ 2>VFRR Ы4.'$~1 2s4|,]Vc @Ղ hdII_ 䲲^1_Gf͚ulݺU/9 k7t7 FBHHXBc43!CXH*Fqʍ"P{ŊĶS+\̺5Br0ߥ;+@!H(ׯ_1LWcIu֭cAx^^^$*qϞ=0K.T0j+ϟ?D2E cԝ_.c"X  H7x(h@N-W\ !@{{{bb"j ; * S__Ob okkza^OQH&F "?<UNpa2[h^3 2A dyL5nnnvGDFyft5癩ҥKHye{@%1ǔ}]]]/<}eTN5}fhcFqpppppppr|,)))-->JF})cKHHS&JF!^OLL"*U犏94W8maJJm5W&zRJJ*yXI#?a5|=ҷo߈'OxsV"3&&… t:rXEN,f pj Z ϯWh#Gl&iƌN 1[njN(وL>vvFnF?Y[dBѩX*˷: gb#k6l |5??lx3fRLPpfQF޽gʕ$:f$Tt~Ɣ'a"@ɝ |#L#C3]1jKx[!r񱬬l>uҤ^ɓǀ۷oc! &avZ&G]jU@@pgh]7oD<<<1XW#|1[xĈ۷o'Y.]k.QD7䤵/_YLʩ4r 4hĉmmmrʹ)ZjZa-k6l_|qӦMrHjpp0<ի̥=9}ر"2-#reر*)e1N0[njDڀr:;;A顟J+++Xz59&9`Gh#9FVETW 6v@SSShhIۥ:Q$+W n=z4*rrr3SRR23|lJvLY| k( %%%8pqq1S'Ycфs^{59snLn/x9̞D[ 7oތ6n8{lz_Mʩ4r͝; rΜ9 ʹZjZa-k6lV0P~I@~(Ç;w $2-#re.ZEX\/+hڵkaaa cFb8xGbbbL*߇H*,Ituua[ 2C v6bcaaey-̱үJlu- G \GMxP"0ܜiY)q ,(httٳgZ* [ZZ:!WEºRSSGriShСC>evͰaVѾ*&krՑ)4vpji45+F?a!/>Tn0NCKLȕ'Rhhc>}hciKK4DHuQ Ϭ?I$]M0i;8UYlc'kXrl1I{WA'NHKSf/SDr`5MEFFF‘71c̔ӧTH$muQd v%(PaXYR4Wqb0.4r>ʃu֍7@KoN"oᓚaVB[[[UNF 6Пh;Ȫ˖-ۻwshi2MVHUiRCѿ ʹZjZa-k6lѣG_~`\ W&sNuu5]2ȴf/Ӥu qڵ"N\똑d:?&z|"T0HA(ak]1 ܰf^~֮[8~ȑ#(4++(gnedd%&&OJJۚ Ȓ򷣲^1_7g͚uiCnJAhdFF766ҧ ۂ_9UiR+//^~i;8մZlcK,ϗ&z^Uf/hhhHOO=bs1w:n8e@~\["i0!bcd:%aՋZh[y6u@ll,W_͛7O* A0#򦂏M:=;{JZZFBBI cg 4E <7]r%$$xDFwkkkh$m``O}}=@->>a^OQ4rխY'OL5vpji45DyQ,$-s t&wiea2LmOPh3oj$r<&U2S$ 9`wZlpL88zm<1q 􌬬ɹydcg}l}U!?dggO6 t+9>k | \+//J88888888e>6وF0XSp>;(1 333//|_)bb.Nڀ+װ Pc c)SeA {7""ɓ4\\|Y{yy 2f#$illׯ*"PRypA cƌå{455t:ȑ#HaCݻOKK<*rѺ^]\9EctYHl lM0s…%̩S^|źK.%$$|駽()5y;N5jݻa +W]'t/^xƌHaC\p'7/^PrѺ>A%0KB5 {Q|9FXvvvNNpmzpM}}||֮]#wժU]===)!9*88ʕ+pҼݭ;6n89br~VUA`ڴi[n2~뭷`;vBn޼ňGrr2= !x{{ڵK:Ljt`fF$[|9hB3S853or|/ [dcQ5CիW+ ǻرc:dOFlc4( D |- &00PpdillDdxօw}>o-8p :aiWfj! 0+dyyyf1,ɣD 9aadi Oтζm~Z￿n:M/91ϟG/ {@ xO?T,Yhf%ah™3g߿_[[[VVF"Ita:ʈ pӧO\F$yuFLy{^Iqڵ0Qb FUQQ~JS(.e 7=w\01H'XД4=xcRȈd,B3S853o3gŊznnn$IGܲe 2pSoϥ@lc4aÆ[|}} ƛK[ M~aBBw"t*]ϛ1b/bq)Aƫ1JƤ|xN.ʜʿuʕ+:ѣG7n@W7yi}ҥhK/D#Aϑ#GB Ԝa<3g΄ 72:-Nယ޼rs̠(dY-B=HpR`M~2 FwllN 8q~-:FJOOfv L ·wwwpewlϛVv)\jDz|r D'`$ӓJKK4lٲ{;wFο`sƌմ,+=mf0oplQ!>I~z`A&h p@kf BڵkwJbׯ_7׀CΝ;y2[-ח܅So|'ąғ݅B$|\7H/)~R:^czu50%@#ouDYRRBU9aG( $~Ϟ=>S K^9& "(>S>+}/\Ǐ6 B_cƌٸqBf:}nM"322𳱱Q( ACS853oSt;X/Y$??rh10LhhhMM "MH[-㺠ug#L"׭[Y~Æ /_?B]zgRuϛ7+}W:^czu5p(>FlM(*..nz?dȐ~Ar$7" @688c\?Aٵk }ȑWf6Vx311mD;X7>>>ONN8 p4kflһg4pQ(J jjjX`Ah !3$$͡)lk#s촵cxD PϤϕFcSRRl"ZLWW畖1KY]]-Uk8n-8L+\%bVwݖ^]5c:.&&ْT,C%MŠapm zMw88888888\ q>cRp>;%%cVI>FvPcS|Cc-9\O]qIo Y^`B8É>;Oa̘1Poxxt N9rDI9lԽ{ҟͦ}e^5dȐ~o]һbu ܞQ!AJcSJ>Fd3[dQuaXg/G+\c ta16jԨݻw\222Rt5??l[x3fh") qor_xBfbO0 ás…$޺G%?QSBh 8*)*Y| }6ɢx(*>>gڵҔZ* @cǎ751b4졡&MjooW(P.44288ʕ+Nˮ}f+\c tU6|23dgdee[գϞ=KEaϏœ UQvOt0/4gaÆ,P]Ryȑ$RRRȑ^ W 7 b B777x1 s8;0 8p˖- ' ';k^{h 6AƍӧOppSH!,>>>O%MlpT ^J^~駟%(WT,ӫ&XFF&33@l{}P݂ hdII OVYYYYݠ;DOA_}ռy .MɌܳgg12p|kl fcVTT`udɒ| ȡ0k֬ӧO?x`֭$244...裏nܸ pAA"FD[bÆ /_?ҧO7fv)1]7*_ N{IKPXW;L1cO5#65F#QT\\+++3sXmmmpp0 J:Ä)W\viJf$ Gի _[kp38zh`` 4ԤaaatƐ777_ ү_Lrs 3v=<< 2i/_& r%34rlu#>%%eذa[l\)S^^0J1,c䶺Zz)pp{K wj p|hvrs^|[477[^p@LJfsczu|,##K4#4?P>;c`e}ip>a!S|1A1PԴd!,8o"ScqpppppTh 9M*11f̘]qIons䲜?Ϗ@QFuEccc\\\~~mB/_^^^C Az*MS wvvߙVآ8\Mz$0ak-,M3w9j/+SI>f|y,3%7>&z^9|NgEVAll}.22R}SNuuuݗ.]JHHO0aBUUUOO Z)N+MS5W}2~xnڽ{wffEQQQtS U[,|LeḘ\UOB)$'--#)IOoǀ۷ot:Qӟ۷^lrw+ORF&.DzWxTO@,y $6::ٳRلIϏtVKK s%W r+Բ` )')) ۿchŢ_~)f^׆Օp rs̠CKXpG2FrhOǏO760lذ\RZl!w'& TÇ"8Xe咺A`ΉT: rBci̦)w!e Ȯ%233SRR>!cxLIDH477;*X_pD[I9:O"YΙRܺukʕX0ڰ43sAnz(=zi]8uuu8^@E<9Zl!Huһ(.Q`&˔ŬsBzQXww {{7e6M )P_SȮr쬬,PT!uXGGuzIa8116!!x{{KjOĪmOzȑ#۶bcn9X]iZ YxYȥQ.+@:@㹹 4חܑukm-I#Lp =Up}aDV4'l: `&}Qaa2SQ/IdWx lʔl#@DD #/E ,%%%_Ʋ2Ν;|Ә[666ҧ555v?>lذ={_cƌ!ϩŪ V-[mtmX]iZ GЋcX<>|:Rǯ_Ec flZlXyy9ϟ/:k֬ӧOcL郅AfNWGa9 UM64V2B}!LM"yd999Fdz| !+DQhDQqqqXMWVV0@ENcP{DDs@}||I 4&Į]Gzjbዊ ү_L_+XWiZ GO Fǥw*8\߼y3ikkJ ǁ6Y^ S-yIx=11>WY\YYYhA~N%S_֝#Z[[q[ecMSn)C($'LjN3";;2&coYpNI&MùW3?mԩSLc:.&&9\T888qXvS(6}{1׆cYYӦM:ujzzWrppppppp*z7gΜ ޅL>}~)W̜OWvvS ǦLP)SX/p(ܻwϊ8z >f?ٳ̙3k֬SX/K"۷oDDɓ'ibe9ÇiǏ.Kf )˗zא!C~m -qy cƌAׄK jjj t#Gh")1lٲEc/aL"55u޽g}}}ZZ-*P 0$$Ĭds5ŀX6،3ǠBP/&3"V'V(_il:XqqܹsgΜi->ܾ}dQ{GUKK s&H , `ڝBy'g+y$F %%o5`7n\>}@O:HIw4"&1)EXBltss#Ǐ0  1l0r #}}}(H_{>|8Y,`^ƊD2zr U %MpUQKDt)2rI} (WN j3GH\ Xyʐ cZϻヒok4 {e2gRifB###/\@"ѿXN׿?SGܸqz֭[+W$piȑXG9\Z*M3+`3(* Q8Ft:=@XKE!$>`r*3sPPI-mŔdridV'M&-ibzPfLV2dCe!+9s̟?L3>!d݄CIkkkhxZ$4++Fs===I裏 s1h4-C4k_ѣGW[ZZ"%`hhh1/yq ݿL4G|9#LZb0"ʔds\{@i#DM@ 0 XY)PYI>SPP2??c6`YRRBϤ;wDMc222nH醆`|.ž={>#?DcAe˖zE ·4M6Ҵ"08==]Dtt4d(_ +//Y~EW,S}>}?(&S_SB!l1Gԃ2`R|lʔ)3fՀm[Bf\YYIqs6""<!8w\``O}}=BBBDsa G8>s+Baaaat<ы5k5M|Hc?~a„΅ *${:\@i ..}v KXrtS/^"*s0rŠ| }6ɢx枷(*>>gڵҔZ* cǎiӦrfΜm6.]]%رc:D"===)uyU`:iҤvb!`0. Ȱ.HNNgZ!!D P\ P68x筠sW^U$p 05 cH9[ 6l0ԈofĈkjj 4qĶ6Qv9\\.S4#Mo̳{&p9B\#~0~zǰ@UD %%%)uꔂl@*q~6l( e'Ç'sDfWTVbqfHj;q:;1XBzK͍?~L.b nǏ'Ty0:l-^pkDI3Q誜?T.S.)ӯ2C'S(}F)ޛ9I477.\ 0RE{{{llN߿[n\̆w%CNȑ#aE=zDs=Ҙb4 JSSG*M3tvcaٸpBi<:x08=՝@`j0:l-G+ׇom+9\I/*TsgcV'|CȺ emmmU?%&&&$$oooCmTuu5] } {zz*ȆAgHP>:t,'ML5W~nGҴ4N BڵkEEE0ѣGwErh%644(F6 nܸa0 j2sȯl: #4@J?͘1sƳ #/A Ȓ򟬲2SΝ;F|Ә[666BCCkjj`=14 ƲezlCj޼y$G<}X3k֬ӧO-)MPPPO+^piif03vLTTTtww/Y$??rh1rGEE)F6_~&!3>W>}m~&S_  >f$c6cDliHH#QT\\+++3v%DDD#Ν 񩯯'1f!!!nnn?Scu?dȐ~effҿB3eCJE"/&򳽽=11yLBQbmmmV .4-5l =zcj jjjX`Adޛ7oV[m[f |ɓkE«&!3>WVVZj4(\`@-%;4opa \o 8>+((yt111͖a-pqqppppppp68/8/L?M%wEpVpqppp8Tzcs8G(1[?Fзo߈'OxsŖry???rǏG%=Aeʲ,yN#| wxCCØ1cpDMMMAAA:?r&rhÖ-[D1F=l-iCޘ&t9B--Y<[KOE{cccG~wj2p"ic.8ưٽ{wOOʕ+.??gxb8 M$0(ɧIv>"֭,9>&F>6ڟX&♻㢨xkJS"jժ;MF˙9smH 6 5o1bs\dawwc:t ¼J 4hĉmmm$رcƍCQIKƌk.sM^ᑜ>-}Wy|>>}ax~BW uϗ_~=hc9,r@Z7A7baB詠1EE\R!&?%<L90.[lyah-O֦YS)!:-6-&tW^y`gg'(Yxӛz8O>$//2)‡x,YU̙3… ϟ? +H!l{ "|١)..qڵN&P8€{ĉ,'## N?gFEli-+i)}kYߜBm[D}xVC?S۷oGAG_ӦM:}6cEpH>E9Ӣ刕&!!!!!!!0A$$$$$$$$ IHHHHHHH2p-d<&!!!!!c?:02cQQQΝc]%#}]HHȳgXG=AcA4OLG[I' Mӱ#/<|?1@8=mmmtᭆ0{Jt_@ݫq1dYaN:+** cJJSNQ)u={vZh=ȳyf9(3X`@qޣL!'1ھ}7,Q`0F8=--- r߾}鐲ǏuD?s3&p6ټ)}=.]4(VW؝UV!"95&n9._ޢ~}> OH#˖-S?.Bzh\+{C{EtHHW7nXx饗 zX/^r222K0jH.ܠL(|'q'nRL/NBNBMT0GAEN`;hHwD/,Gngm.uZJUVXc`UպǜjgϞ]XX~PuT @:i!=6c7oЂ+VL8zMVnn. d%Ж ./_\U????q ?ӧ山I(;MZ7B_t~7A@?xr!"G³g"##+GG4z"@ rˣL!'߁gΜaߏ GAENc¸v.ݕ!ĉYP&KֲBeNWBYߜнI'2- ھ}; j uӦMž꤅Ja>@`` Tewl#Vr_5(ݻ/?5hmmMLLDlL0ܲoܸQ!|}6fdh(8q"))I1: ""W^_!mٲby}ݡ$d{qGAK| @o]]F544XsW={ Mv1ecwb?*f.+f}sbBs9նwݹz* O2+i@Sc ,& ծ J(gT#SBBe0eddL2 %/jIᔐf$\&c {1Jc$$$$$$$$l;wߕ񘄄Ͱ'{xLBBBBBBBfؿ>&WJHHHHHtSH_LfB2k1~sαm.$$ٳg,#FP.52wcb&q)!sjkknjΏ?^QCCCXXƅN @ݫq11s̚ѣGjN&È.*a#]Ͱ?WVcMaUA\\ٿ'Oqĸع܄uƈYG||TWWwvvh.==3Xf ;Xa8q"r\H>._Y+WPwǬlHy3rg1vdu)>|i*_-JHH8pm۴%ظqپ7o9>(sΗL8r_סCjw!i8{ltt4D=zԩ {q +{nrroRRm_ׯ_GΜ9@gt_ SNyy+b꼩)D!--ϡF<11j+E_ZZ͛]Q~9{ܸqOj+>(pС_۪DžYS*S/X/+,1Dqp sUa\VV*_(/^ ;''G(Y-w F<Y*tWUUEFF?x@{JO\ÇAmEEE`` +Ǐ{Y|]O?#|…'OTVV"'//oϞ= wرl2MXgd 3Z۷/ac???'(a,H;9-B-r\\*, .Ҋ(SkAg5PD@VV#ۨCk4֔wgժUsYl\ |Xj,fcğ/^ԎvBBB(qQ]>L?+V4G@6[cSӑgF⭷ꫯJ B(cǎ,r̙WSRRv/  ZS,aÆ څ^zQ,- a@`3a ox@@F4ȅD?ۯ_?ٛӧOBaC>H455)&.]!m4֔~mmm4g'9k mgUca.K3A?~ & FZ|2K{Jokku_~o~/@bZ +?_ Ff@p(`ITӧ;;;~]ȑ#999ʯPp A$ bcqqq>>>]? ӂ7 އQvJH:=%lݚCasjP\#t\gU%1SH&T?tldzGXYYIѬ~Ix \QQQMMͥKk4RVD]XX䥗^B<3nݚtBBBAAgE&3Rz ^5aFE|c i0 $ֲAb˽{Ԯ xѣ}e+}ubi᪻B,iS*E6_0Pغ }S0mnWmP+VŋorsswUUU-sL/`F,Y·ӟtRʄ"8 .<ӧOccc)sި_ӦMBt/  !SRR̽܁,..rڵN&P8€{ĉ,'##СCcg]DR^z.c[ly7s;Œ1XOb,9s Q\#tisU93x~Lz{= 3 !gyJw222}||LhZH1pd<&ػ{_9{}LBBBBBBBSa1KK{d<&!!!!!!! xLBBBBBBBµ񘄄k!1 с$lە_:w*BBBGa >^};;;KJJzN YfP*a 'Nd>W&lK}=rС_Ξ=AՁ(ի9003ܽ{7997))޽{]l3XgpzN:e.c筄MMMVN% p |%&p6ټ)>.u{Je4V=Ȋ ? g9PڢW1Aׯ#Q__bgΜAqȑ*FІxLK+) 2U-^3`mÆ ۃ,\t"##&+88+BtSu:t(€\ T>e |R=G۷ܺuK1w>|8e"t,**t#zv+n`٭¯-ܜ<`iXTNQ%^uMl-ֲBeNR)Z}>bم1c֭[SSSNHH(((:Uw6cロ9$1(+V`DMVnn. \U47BEErX%C6Wճg"##ϟ?ѣӧOU/!pX<ʤdV~3gΰ .DͨB~`-%%EC1}"R\\IڵkӝLq!ĉYP&KֲBeNe+e`Ŭo|><C۷#֯_i&UnWbDX&߿ii){aQ(z9_1gG|9lut}}}XĉzRf˖-˛oIocX=CCC~,ښ \`nذa3àaaa ,<{Ϟ=,GngݥxLk]XOY???QW^EI&DbHfDs͆=YI)!!a<ӲuGtkNm 2eJccZ`\ wc p7}ѭ9񘄄g\<~{>Lc$$$$$$$$\ )1OcNd2t.`]XQWQQQΝc]%[瑐\1ҿȧ ~az=evSU>8Vr ""7:cs֎3?~v0N֘9sfMM ѣo }ڵdt.h]Ǯև ap4Y/܌U%$$ 8p۶mڒHlܸql-[)D r\PC;*`zh6t&֯_ULgN6_~BYï_饣T%e{.QIIIlct/TLϚ5:t( _ k8/zAtWMLLijfeC#!xh7N21V vSSqKtk痖"yf:PtqN>JM0޽{5gϞ2ZcCCCɄ3g Q8eZè瀓 aC<`'Npĉ|oZx1KNN7A::: VٳgS:u*3gN]]j0LiU "0051% _۷+sHF1)eGۣk0C͵<ǣcBHųvzC@tHZ ϟ;g04/ZT]64B }(y`JHUf߾}Ǐ9D ՃDZ1T5b*t)?av>|0//9)h/..Fzǎ˖-SզSaTtsIFۅ0wFd]X>0JߔYIrr2|+E 111EEE555.]6٠8͛c%KjܹbBɫ >b V ڤ^C8]p0I(8h #!"C*Q2o^510[釮G+5ѣG3`J8lD1hD޽3flݺLhBBBAAԩ]-atӭ'm­1#eorX*++޿?UQQ*?CaK.㏡Y˗/#/A>Sag/t.\xO]ww}T;x9|I^^<J`CS!::timJ-!"a3y!l6%%˝bm׮]d%EM=z4QgSXX14Zooߎpw}MTU}[N2.[c$S`XY&߿ii){ǡ0F= w"|IZg2a׃k1C~K[Z[[Aadd$۵\ǵ _|m-[7|;Vrs___̨ݾ}b++ E8\捇aÆ߭ E &XygΜի~,~Avvf͚vA҇(׮]#bFjE߮F7:0Ə #1{{߾}ڥZw?Jl; XtGH<3eʔF+4 }e{:&2/!!%9cJ {1Oc2p:d<&!!!!!!!Z͟$$$$$$\ B_B^|ŨsαHHHȑ#(~'|:!??+9~xddرcO<;sL||϶sN%y~{W⤟^DXc=̝'^[[;f9~xVB aaa>>>.ѭ1s̚ѣGiC7ad_v-99~l~ለ{ "=nRx`|TfQk.k͛4JLLD[~(Q>e;:Mm=Ƌ1c%N:e.Ԟ/Nwc&Hl޼N{nrroRR;{ܸqOv%&Cv޽ٚسg<UOkBCC_B#LzRݻwCJ֨*o@|}1|(,,$iD'KAe.6&ܶEc hq#6lЮѬx9KKtw@w^T6>OĉΚ7 ? !:: &;mmm,M 9:vܮbm4I[5Z[_ =tsIF_c=c*oooXo$NB}dҤIw܉#5 :ydUI0΅ºuΝKGj}6+9fƌ³L_3ԿX'6!E,Z:5e>ݱZqzB>}#veKtw@} ̅A?..2ߺHݻWRRV5G10 G k```GG_F CL>'dmxl/pI< +}J~~>f%VRRRFFdVVJ&\tIƔ^CnY>~ŴΉ٧̾}٢7zsBkj)|aBn[De|GEkh 477gggio!vb:-J?xI*=yDXѣG썘lcЈ޽{k7G3fغukjj* Swh~)=tpIFXxW+X&&+77JRYY49UUU|Ƀ~<%4 |K.㏡Y˗/gϟT/0abo._/=f̘]v-8CVWVD !-p`vV(ݱGjkkSRR̽,..Ɯtڵ]mQm … a>} KG!+:&;''֭[xv6m߾Ν;S+i&U+^^^#V/cu8$ml_O292QU|||KKK;}7K9K"$?Ӈ Ǩ hooG )ݻw/_h7ހwL@7oo߾(JHYw_/SE;&ܶ=Ƌ0Qc=6Lqn]]ؠ3,,^ Ckkkbb"FZ;sLDDD^c^d?x ;;{~~~fb uGh^׮]#bFj%55OV/=tpұF۞̆x01{Hx߾}ڥZ&.m'EBB©ۅ!1ېYϔ)SPB۞Oꋄ< [TxLBBBBBBBµ3c!$$$$$$$$ld2 2覠$<k1~ˑsαHHHȑ#(+|:˞B4?~i;vɓ'2:1a&- 3 1@;s֎3]?~v0ta֘9sfMM ѣUn ȾvZrr}Wc54""žj=tIF08m nA(+|v`d7G;vllK{dJ px8U;x!a#F,))QMOO ׬Y`C(p"._gpEʕ+&2 #^+++:\rɒ%Xg'R1S1Ç&,m6aqÇ |˖-EEE!C\pW:48әgϞaC=pkbYt8iW^^h@?3F]w47))zVxȗ9)jqWQvc8`hy8S;SN.hϗ ʹؤ^[#??͛7)B]&7nӧ]I Ɛݻwo&30ǃBmyׯ#Q__GhƑ#G&+a~1x畓a+YwõM8Q/8/`#8Ь6ٳgSDbԩrdΜ9uuuFZBŴ{aWQQȚHZeeea\P? .NR5'OTVV{V9)gT -[h?pxvͩ 3922RٷoߧO*E CDZ1? b*v, a 0&|{>j*Yx<(߿;v,[LUN~1x畓ap s B=bH#AAA?b2> ᧝/<| Ac+ܰavEYZү_{ҿB]>}:'N;kx@6 Bh///vT7t)5VǎKKKSL^f08|+kcL>dqap =I&ݹs'**^:j(ɓU%j8v )f ֭COhQmBb ofen޼9x`.kk2Gܳ fUAvNx m,vYO;-W2RO>dvz w Pqqq>>>ou F}޽b,TLDI"Dvtt뻰_ cy$p߅ [ZZ8$''[IIIGYYYSTTTSSs%aqzEe*(///g~[)/ssWcZA:>]Nx s;J; @sssvv6 "[*&H; w/ B]&jb$ӭ+'mb<>7o1y)0,U߿8}$|$-Q3}piYYvAAA{W_}M8l7+E511GFF]xmO۷1M`+B~£( (+6l-ݺP",,^ PϜ9ѫW/N8dgg0o֬YloCիWQڵkD ~T)s cLk.պ'0p5 l~J Oꋄ !M XFFF``ϔ)SCӓ8I}ЁǛ;1\<2p8d<&!!!!!!!ZxLBBBBBBBµ;ɐЁ{Iad۫߱ZI<ӭ'mx.l3tfff\\/a7C=ztر.p:vVTx$$mS5 1bDuuugggIIILLnzz:mf͚ Bqeߴ+W\q5QaٯZYYԡmʕK,|*=z6>4Y`iT0pm۶iK"qÇ{˖-EEE!C\pW:48ӉgϞaC=pkbYttiW^^h@?3F]*ILLD+w:OLT3GNB`،SNx˄VMMMl,ѭ_ZZ͛׻w&''&%%s.HaǍwiWRl1dݛ={9x TWF ~:x^lll9r$kBe$ [oN2ؼ.c&NzŋCq0zhVGGe0ٔ:u*3gN]]0P1->|UTT&0:VYYY nmmeggϞ'O@-Zd#8c9ux$$mל)6 ͑̾}>}T1g nv9VVL6_(Zeeenn.ATUUKIƐ ߿;VœWFCb ޱcDzeTT+Gn}9h;9"^x|:$$tq] SOSPP@{nHb5└Z`M߿"e)~d d#8cxFbhqb%6lЮ<x9KKtw@;w^n>}:'N;kx@6 †h/// 6@;v,--M1}zjTWW:V/4|svlc_|VL?,=iҤ;wDEE\GA:,{  a`N 8S:hD\\doud߻w Qk:;;u`bHQA@@|:.Gn}9h;cE|CapKK^&??dv+)))##V2++^.bbbjjj.]$lL!,WL+x}-2"|m*. /lT[0X7(M/0[f'`"m3 ^\O<{Ѿ}1d#`ߏA#zmW@͘1c֭H'$$hq~)ku$ҁ} ίXe!orss2H***SUUŗ} KG!gSXXx-h|= QhoߎdΝ)d۴idia>^HÈ#;;;KJJbbbTwiK5k,XJ%˗/#\r劫 ~ʠmmm+W\d ;VٛԳMpxwM+cwR<<|dUp_T0pm۶iK"qÇx{˖-EEE!C\pW:48)gϞaC=pkbYt\iW^^h?g}(ߵk5:tRC^uv ªf@qWVó9`DOptN2jϗ جY[#??͛7ӹwMNNMJJbg[z{{7Ӯcݻ7[{jRhhב#tbccȑ#Y*ۨV/6 tѶc?v)C(/6qDUй,^)FNNй@::: `SN#s̩S4>*Ç@*++ CWέv 5h{ァ!2 Jdffٳɓ'htѢE:L%J5LW`JHUf߾}>}Vi wC{{;&)}H+C/277AҠnIPҥ$ cȆНUVa.!G1HرcٲetM>dMVc걱/^Tq[8!!!t7CLwY&L=)NAAݻ!izNk|CSRRh#7A `(VkDSSb2Z-r6 JA(Sd0^2]-Y|vÆ 7~ϟ?gi(E~KB)M+ӧÃ8qY-DGG{yyVGu4%vرciii郷իWdoWmm~1xg=08Ҡ\a81KO4Ν;QQQrQFAP'O* ¹#J1SXnܹsQmBb ly \Z |,%(~Y.iTz; CAKGL~y5(B\\doud߻w uPk:;;l`>@@@|-gn}:h>ڡ跥J璟YIrr2|+E 111EEE555.]6W[߿_1-xrEubz?|p&i+x^`ZAs=t} dx,QZFwX~ ml@-KU+jn ^SO<{Ѿ}rlcЈ޽{kշK3fغukjj* ڳU[_J0: tѶn`+X& &+77JRYY49UUU|Ƀ~<%4 |K.㏡Y˗/gϟ/'L _֡{y'0zT?Qa{(СC{=ul=<KQ26@lmmmJJ;Ř]6==% 0,\ӧp9zh(2mjp6999[plB'A]ھ};;w* nӦMVbxӭ@'m{V<6DU/--e8Eo3rϗH~+++6ގx;((h޽|_|ꫯ7xfcQlقNZ*^0~/n߾ijq`+B&w %J[R(z .44KxxahmmMLL(GFF=Μ9ѫW/ 8dgg0o֬YlCիWQڵkD ҈TQ[_<e˖"t!C.\+||h{ߕ'={ltt4:tXׯ*cM֯_rFg11`eh.ySw7))mNc2nܸӧOd IJǏGFQ-M1%i@hYԃ9`1Jp)sO|pU=DW_ZZ͛8Wڅ0޽{5gϞ#;&򺦵<ׯ_GX̰V/i$m l̛a\;RUL#߄g[#`P'N'2 3 y%l_c֭D˃ L(”)Sଵd/i ƨ8_ذavYZ߯_{ҿka3`XZsر4ŴγzjTWW*V/i$m l1پ>VL#"t"G&MtuԨQɓ'J{p.dR֭[7w\:cTۄ۷Y7o<= 爨1)h((qqq>>>tļ~T!y†] 5550%@*t$?O z, 4TI Z/)-RGn,*䕰!SKihMdMM1VX!'s`I/w* -ܜ [`~#暐v%zB8lx4wvYZhy`3n GtBBBAAl}҃Mcd[c"X L;MkDČPQQ*8`)obҥ14k,ѿ & ץq 6-\>}*KG>t2BR6O1mF lVECZ1o.;0X S%֦{Y\\Iڵk-6!] zr8윜[nA#MkZl߾Ν;S>b5a~1XӭX'mk`yΊh0?Y&߿ii){ǡD0F=oIx#|IZugp2a툫*x7qn6T믿F511DFFGDDՋ0SHW†X1e젱o߾0'*.==K0QaaÆz߭ aaaag^kd?x ;;{~~~fb uGky_^]vA񉪕TZ#V+iuXݥ̦x}ij$;Jrm!#!!atcwa22202e %Ёd{BZ'Ŏ1d|T1 OM%xLBBBBBBBa0͞=\hGϞ= †z롳4iӦׯ0>Qk.kT d{.NIIIlw`;Cf͚E:GR`SNS2ovSSKtk痖"yf:Ut`qN>JM0޽{5gϞC;v HLL}ꏜׯ#Q__G,Ƒ#G&u'a~1g=xL.c'N:ŋCq 999B`cafϞM :jԩrdΜ9uuuFH0Fi "005%<{kk+7DmMj*Yxܳg@-BN^^rS_\\;-[MZat3IFUЉfx:66ŋ,_!!!t7LzRݻwCJ֨HR $o@}}1|(,,>nG1/?I ,}Y(N_fŚa:e ܟK1bohqb6l.x9KKtw@w^WӧO79qℹ捇d"JnkkciJ| 4H1-)իWDvo7 jbpӭ'mWA}%a98j}L} 뭘^蘴L4Ν;QQQrQFAPYxJbD\᭘)[nܹt !1~͛柅7=_.2EښΪ@'2ADWL ~;; Cf0;2XTO1P8~:b#Ɇ+))a+Be$tvv"\\;::͂_ o$*X~%G;uXucVn%%%edd0J zo^K=Էzԯғ$}Iݳ|rv=1ṡ~W^΂knyykks=w,}gѣGV~am_җh.]j]ܿ曥o)b TUp*+ð|#;wnŊttD̾JIiuBl Gر½]m~]ws|x̘1&NX,O҉kkk8׶YЭY e:hW /r $m&^HP,ڂOL/" f~@%/8?}5ah3הY<Ӵg_ݻӟ~ݻwϘ1^ E.z7V +rСӧSM5a=ET3s=U]&pTW|_{D"lٲ-[ۍ7rA_O<^ª^jզM4h =/}6yoa0+|ꩧH~HZt 7P/]L$chT|cTWK&caʁ+LdJ|I| ߯4s|1?"+c%UK@9pT*}Q| *K&`{[d1rc| |h|,NZb1@X&Yxq[[[KK  @ QX*"[dIGGYYSSi߃ĺ[[[>Pr4>[tiggg[[| زe˺:::l>F_ P<ݤd(9z#궀JK^zʕ11EywY >Pr>FZ|>Pr>L&/^rʞիWJLlmm&[v-| |,N3okk[fͺul>&*| %+Vʁ ===ǘ5怏e2z$Z|91'1x3M3NJ2@QX҂di| EK@S2v+ʁ!0L3N1,eT >Pz<)|B1z ߻HP4>ƞO>fCc4ꫯnƫGw s?ghLXic>y ǑA:ÒZ >3}v??24}=  HNAl?>Y?yl71TcuXw '0 !$;f>|ks}?}h˰al%b/ '$W|,tAg4q~U 66BATAXI 2 KS2 װLs}a9BX CATAX|ud>rF|,C11'z; 0^" 0 !+I_߻6|,mq>vE^"K #2"||'nId2}ԙŰ* >{AARc%+gck|4og"ǎ?v)H @0 !+IX>}|$%B!cOF8aFd cE>{p8|,mM1>zAARc%+gh(b|Z:YP=  V'c0 X,TEaI-v܉G&cxuрc6S8?Ӕi  &L$NN"#%bP(FI 1d  &R}L, Q__}LR1@"hjj_ (+X,ZWWŲ Ɉ+TC ӌB`0Ic#7`]]m4%jlllnnf>Q 5p0$L&C2}12QRTccckk?f:v}0ٺukt( NjkBÈ755+c$L>GC/*%F#I2F&dPyHZ.^ ?yι`4&`l&F 2w.W^8+xHL!I%̸LP-=y3RK&L&Аԧ͔i$iP-X.\z̹KC/*KT:I&fcd1T c^z9ru> >J:N1O^={u]xI#/6lXS.&RB>WPyX޾o˿xu1Ύ_;oƇ6NJr9t䤪d,J( 3},PI>λ'Nx"ȣO l| k Zzܹk?+$kFfҤ?|Ǭpמ Ռ9rES1jPaXο|gѿ{s%16@yˣƦVH2FO=37Ya_4SNGb*{z%X41ⱘ1 FNJ]rY!:t%16pM7K;w5&V8P8ܿG[FæFJO}1;x #E #Hcd,.\9rwGO᭽l| 1 e > 3gκke>]rDz2ƯWcLӴa(X|$w-a86LNFg![nF{==W/>&| 册ۗ{(&S}h},L,j>j:>wa13r&M,|y>rCrdž^;?F1vK!PY;wq߁C/jvE"a.ch|00ۻNzj"d" Tw;&0۽we1X0d/P1H?NkǸEVX]]]$)YU>H]^ڵ(c1-Z PnJ?BEKg1`=`R7oڛCdC1s*9sֆaV(Ѱ/Zc`P1&׊8`>6}9s԰/Z2(рNE&^ 22|)YXؔ)SHΝhѢ`0.kV{2Fa&MDJ6k֬ EVE}ܹP,&Qz*`jd ; IBʼn!$`/C2ճ-i.ىYhXB=X {!l"i9+ % 5H֮, hDl.4lE7ٌO0H )M<[K-V M{p󑎩(|%˶Wa>]9g ZlH#9Nxܬ8qGhzKɡhSb6~5x. 1xxF$8OLHGGoFD^L3.%..V'X,4-hP#Yh… ͛7cƌo܆8SzVicccwwڵk| 6lݺG}Ƿm۶}'-o6'xGy衇w}Wnoo9hSNb j4#ڈ4%K|쳟?y9UX"+e#.B6qRIcwAeb}N,*4]D+)|L݁]Ƥ2&1*eby[?)#m%!W}(> x$=d Րo~Nܹ ?#c=]9wvdG:/U=R:tZߏ J\/5\As^Vč.}LT26 :OA>g+Eafh$.jyϟ?g2n|܆d$-s2~dY[l!%{Ǿ! 0U#ۼyƍ-{UȲR͎);ЬQen/niiqe&|o8q"U{ڴid~Ѿ1q=gF#ɱ |:jGPNssD|Uqy>&L3oX@%!݈bw y>ƶfju*Y9G1k;K*c%1PD?{vKHK}:yܫ1y"!՚Q8åȻMZx?)-\.QiT>ƪG+{.i̬YN.csΥd[[׭[\bmڴi8̟ 6|_ȑuww777|iv\Ɉ3gFPmhh T56]zoR2<2i$-\0d,TW #,`5%i*&Mɬ<-ǂ۱S3myoqͧrFS)_2?٨ڛ&ܻlO.-󱐭i{ù=%9Vӽt;7 !˲vGK£6c[IDު{~`T]T%0:1=b  /o2%8N $1+e99\dfʔ)$Hwuל9sʥK\rڵ{OV=߂/[_:::i4;vmn#1cY}ht:l/iȺ7ia3c>6nܸԨLoGf|(?>ƔLS해b?8} lL狒&!^AyAKc6%c*ckCKȘ_ :}L9}]dBV;|L3kת&?.`ABz|L~\cCb>߳k9sjCq.Ktc|,FĒvXpٳ+*7Mkk֬Y-z^]nz{Jnc$xION"hk2 [d="0aM}ђuqEc~SDzQǜg`8$dvo~Q44QQz_Ÿ >8;cML1w%b1&]R9LcW=Y6cBd̗mlIec֞DzG9y܏̻\VLmM!R#vpڴi^JRcmmm$Tlٲ]^qh^*ooo'#ͣIDĔlƌH$–cQDcq%#X<ڇ'viWfe,74ϝ#ĨnVn+;c[ /JVyD?sWU]~ /HDYy%H%1^Zj+g> J=2ڹsUe&`_] endstream endobj 28 0 obj 84486 endobj 29 0 obj <> stream xӱ 0 Gd\> stream xXˊ$G Wy)CWw580 ^^= =d2%E(4~\tW&ǟOﲮՏobB$E޿/4k->N{ŋ5v7=~h֙>YMkTמ!mӳ+ܱFxԖ@PpjfN{eܒ!% w뾮fb M}$rns%9FgbxolWsߟ=X,.3)AN䋑z*1x2'$wik豰=8&oGo%\Ӑ4O#*SFۄB`nHjmMۯM?+ۦӓGAE :+nxUfj%\ vٶZ~M'Fi>vZz7ң5ty4z ʂ\wQ-g` #tå T4ʁ{XdfnЋl22 vXt>]ؚ:w]NHC87Z)3{L7aiA0Ku kݫrHwensW?C/KAq͂9vk];=tND@\jc#=QYJrD>uOmRB$\XASu)d^vi+E4! ZU#;}.H/ƹe5IĠtGGm6M1WQʋ@,JZ@&'asCFJńʾ4:MJ~h; _^]w:alkS\&mm,FSICChei~G1u(h:L42:0uy8`:J@h/.f'GLQ3IcF@I/_?Gj}(pUP;Sٳv&+/v,(p^qn}Δt 5i9F@i1:};~PBtݬwۈ+-dﰻ^Ԙοi' dWdѧG_I]IY#"gb<ĔQa;'Qu ?ynww~,iG}kܷXoz,M!~>LHS$'UBO endstream endobj 33 0 obj 1362 endobj 35 0 obj <> stream x xE2"N `XBBXvٗ,BaD;(U?t20## Yn})Rt9IIROuwwΙ11|f8oGffB7zr AShpذaf ܇TފΧ[@۪|aFmy+2kܗ[tGr0w3n]ؕ";H6Zdw"\ϟT#/I\Y #)2(I樴|}iie  +^N]a ˖=2=8ϻ>zZtivz^^~:!QdWd~IfZc' \uC>de=|X'2=W+W"s .#!?z(?+Nl,}XVGYw]n6.B`VN[OEf? x|0D[)+##̿":yz$:˽ri1/D&[/i %2??,y.KB#˲tRݞDS"oLY3CLƭY@eEHiѳIw٠o|VMWz֐Y@E2С-[O>pSk8kC{M#OxFd]"|r||Idی|xx8¢g":6N'Lԩsw3'e{{XwO<ӥnz믿CЖ&*b;v@7nuQ~*W Mz.&1b={\~ʕ+ۿF8WC%y>TkEX;e8^d׮eEdKd~9c˛l=ޝ!匳Y~Q ^m"?C_zF'Zoĉ9}t׮]lDQQO>m(/h(&;+N ׷o>}ꋌȫSPY+2/G\LX[yq^d/go2wu/?ּdg)GyRd ۵k'nB_~۷Y[.C,CE3g"$\VK+VtŒԲAE6BV..\sh"2Mo7螝iy vlE&(?S= VJTjV߹tǛGǶgG읉̨ȌRdb6AÈӿO=93˭ !"KIICHƍm4>gJ|4 %lҤ111qY פ5 El]iӧy/29{vIY4ˆXߝ:~HJYOȄMpѽ{wAdDVd&aO=c49e ?#LNNN0`Y˖-/!ue\)2#{E.]%7{7S/XdCi۹6]9pf^Ʀ5kE_dۼYOVgd֫;;/ȯZJ<,S #uW87nܘ6mt #GDBȫaÆ'OD~ܹ ];1cG̉'}:x7\}J>َ'qm-p@7jnxwRZO.H>3.@ >V%~Y)xJJ+."sϣ[">'TC 1 ]ЈF'(cǤ؂@ q)M6U^ "hNdJ2w#i欙uG̻"^\>+"3P?pxc[}fPd3f@d1򈈈ٳ^.E0gAݱSGTֽۖ-[.^x;vL4 a$:W^kժ5j(x uX"BBB"8ov#oSx)20~6gvzx͔LS.};!Rpw޶w7ciwaw?قzl<_9yC!2L%! X^]Ss:l 4n@dgL:PCW2摦MCcBp4mC# qoMɃ)Z?;aeծ]Kyq("۵+?2CDv̹WWN_l5gxg eS:$>w5jLL.]E߾}d^ݗMS߰8(oBaQvi3'Oc*ѣv(A0)۝dy>}dz#sN?tbL"WT;Yw3h͘7I׎W6w#×C*fYM0^hF7"$x;XxeOE{^4ҬYӖ-[Μ9syH]{lղ̈́fnƼy wx>Mpnؼ!!$00pi<3wnKs- 5'I^V0ypF mDf@,'Μ=?<΂1/o˅'DUN:?j.WB_u츱X("ƶ 4'+Q ֫_RUVXnAMnKbyHyjnH\:OACٚ1Mtf%bY_ǵљl h3Wr坺mBEg9&gif;-9|Pu眒onU]MX7uh2-DEIL*OWu누iXntQ̘6 f k۲!M3"2jSڵ&,qZFgw"2!u3ؿ| d\5Bdewdu7n\zuƎۻwou3l"'QJOZGuV-`jիVV%ۀkkѲP3#*k+@Q0Dی9 aenE"P'2GcƗ tcίΐo'ڼ_ѽDœ̉-"i^G5Nyc&E=98r\mTw݊ir"CڵKtLxO>۷;l\/ Zj⮉Lw1#9pzbcY;K  qbeJuM5~"_\qt#LME=f'f;GiN9K.DVNDٕ)XdoYh2^`E?Lؾ}oTnZYY¦MkBy"-Z={VtЁ"D̙3fjٲ<ϑ-gdd,\088ئrѢEo߾K.-]4((TnZYn͛.]Pdq*&z#FH} v>uh)))zK^luFj8l~bȑDc:۵׮]CmVVO:uݺub>7nEF{Ff3! {qv?iܸy?_-DžA;&L 'NأGY\dJ:ugϞGB]ڻw/3s͛ `DJOO?rѣdz _|E2ߨQ#yhֈL'2]/J;v VµDVL,XM6#ӭ[7:d֥غu+T'M4p@Q}yPvp>m4Y-11n[|ylVV E8V)2B3/D1 YRJo߾r"̎;ds!/DDܤ?qDbŬuPT1`P߈L@iiiܔ1MVZ+"Rd4EҥKJ%Çw}'*` Q.]<)hOA*U` Get^VEu.]mZǞ=zYYBp"2y;ł6l` 1tܹBxEu:e˖m"X_w<֢\'2V>qRd6 " :vI6#ҁp=AtWhռ]kDd+Vܹ͛7#k֬G}d](!ė@dϟ[gȌ&EoEbKOOy\Z[EK{@'2,tڵGAo'=y' gǵ,G6"S6h,ǶFpbcǎt# /"?r"ʘtI۵tEpgdre3 _~&M %B"N:؊LW8vX, 7NO0!""C d3g8q∊fΜ9sNqbccvIN)S7##R0ZceBd,PdB F݉"/!\xkѿlܸB!9ب3, FZ#bBɉe9DͭE`!qYa(2(2?BB:v ^Vo-<_#!() u"+RH.+Yvm LxԂVM PP7T+VX@:CH ؊+%[URe˖- vQ^L,r&T>Kԩ zAi-g4W%K߿?d\bhh={l*WVͻ?7k-x۷o7ߘM+5k[شi}mC~EX,AMhѢϟM B)秤dVdr&|#27x#$$ԷXrAJ|?Y3g̚5e˖%rFF… m*t}vn.]tҠ SieQ޺u7otB٠Yu"UƏK 1[o1BZɓɿq1x`L򤤤~B 8tq2yrʕ(Q"..H`e˖X"UQ'O?]|y\xѺЫW2G8=剦׸etԩSGQXt#ފvx%^~5?ed;ȩQƾ}L\h.%K8&:t(6iC._SI`;uu։IƍSzC>ӧKhE֥SVh4/"2H7>믥5ะ0 &L 'NأGY\dbU=z*đ-BTT޽{a3g6o\7hXzz#GF ?S/F]rKNU8P3]s||cpZup:DFF&.çM&Q_{5X4i"*,X[nޯ [<.tzc'n^ݠ,Xt#6KLLLg\"?1džlgԨQ?ƅ낐`͘1Ԛnb/<#޻ヒíkpmfK [Jrgp@%qҤInۜ&jsٯ5|r 6++\3vѢE :YθL6oܻwov"sYL /Dq` NƱ&۷o\#cY\d q뒧-DĉŊr 8/ ,_$R/]|*Up <TjUS} bc`rqv`,p({b;9Mdʡs6++L!k֬G}d]y~׿bAN=L2r6FuʻjE 1¤#2HteUCڻwEkA'2tuڵ:OJ*Nj$2\naxtg.5A&ylǎ3-#26Ɉ+d]OJ7a]h-(352Ƹ@dp `$yƽ6maN@YwX3 ؅ lvl~;##^_㤓Iݮu+S>#++˱"חwu"S3Q[jg;6no-Dfҙr-Q& ǎ+qƉ &DDD`<,,L9s'(5̙;wD1?66־K[ЉL2oɓ'wڅEpAFL"㏟x 9;RRR-tl)SX+-C=zQ~c>cJZpMd>ڵk?^ SV_f-={vʕ+QD\\=#V7~!$_Hd]t "2lԨQEr2q./Slݻw!#Me*?~|XX~e„ A|Azz#G&$$)StmϞ=?#jf͚Q4kja֬Y:uR=4bDlO{<ڞ\ܯ!+6"ڂ˗XӦM^*>RoWٵk_]RJ_o߾rE8qWRLZt)BQl2fM-T^/yB ^# m\x׈B2ոPX32,6x`SDSO]r*UV5kz!EpY?sLbD~˖-m۶}GD-*룚e>|?pСRJ!i0Vs؞x=s_#BWBúԭ$_qy/^Y nmŋhŌ.0BI\9E56َ;D&Eڵk9r~I<0111=ŋ5Pjս{궶ãBHb#;pLЩeK.9RǏ7NBd-0`dРA(D&88x̙'N%X_}?vX\7N)S7*2)+\͚Z3gNXXΝ;}tOewx=s_#BWlD&02dY["CPyA.\`rȐ!DF)&MlܸXO?Yf(W|r9Κ5K0Vt ֭[WVjժ-YD?}ѣҥKڦ̜;wH5[|fM-`ƹsŋyGǣBHbLeqk!!!Kլ-[rD=m$ȄŠ3X kְ[= !#܊Lbuԁ7lB!9xYV,ָq㠦M_B!$6"łn(֬٨QMh%Br@X6Bd0W```ڵׯe-Z?%Br`#5j kРX۶m۵w !؈ X͟x≎?w !؈LQڷo/%BrBI&rRdB 6"kٲw%Br`#NbpYn_B!$6"С*,e}0EF!`a#2uXhhSd`ƍnnB7L!bݤa !D2A[]]Ʋo-Rd>@X,BHNΞ=Gza Ɉ,44}EF!JlD&]#RXXa!Ds !Ka.y,"E~?K_bŊyx{pRpUdZ,ͣ>:۷o "dɒؼ{ժU΃ލyb>`SiQfc 6mR4 !~ĉ³,;.{w<8eʔ`S9qRd"pBl^]h۷o{qqtҥKLGy֭o޼)[ҥNd"s̙YflTN)DENCXg.U[o͝;L2ȿ{ɓ˕+WDǏۚ'z*d0?˗0`ŋ3 СC}A0-Mq)SRRK^luFpʕ#Fȑ#1);4 իW׬Y{/_NNN~G*Vd{݀k׮6+.ʧNn:17mXTnKNv} !Nd*"ɀr5FdaNdǏFZȢ ̜9yʥ+4hC\yȑѣG'$$O=*dQF.;ugϞG&%%aa-XM6#ӭ[7_2dFrSeиq[bLƌ&M8p( rbqPuF]ĴidӧOB&>>رcP[j%9V |:ج(prE-p6"Ջ5"ӉLmK?[dxk׮_},7eL+WƥرC)2"ĉbŊ)c6Dw_|߿r- gd[(D,w߉ <YYy\t #OK1NVRvyTZ[Bǘ\cFla"Y8lV\.wիnqYn]_BHȺwn|kID+׉ @DJ]Ζ-[ڶm hѢ<|zzzdddJJBmBa܈̨3ߊ{}QW9y~ي+ʕ+Wdɤ$Fv{<Y=|>w{"#<\̏PdD'={FX"S~ B؈L", EG6n܈=uBHN06bYDB~Ldt"׿##B BHa"#R32bgdB Bd&QdB RdFDB!93"+h{B{". bBɉev" G !Kd=}?o"g|E"CBx-2c|EF!Jr/p'Pd [P,&&FY\C)u [FQll۷oϘ1teʔy1! " ؋,+U"X7|c,$ O)8 & QQQ{!͛f,(E6jԨ>ӝ?o/|FFFҥswLBOq(22!+= gyF,X0l0d.}DmZZjժ=,flPRJ_o߾rʲ*'N(Vi‹Ud_~eHHȭ[2s'x@4 aE!ËgdV)#2k.gΜQƎ;PVH⚭[eehaݺu:=y4=/UdڵE! $QQQVzz-J {Zk;6AD&+"ä{[dE,2Ba~/>ƍ7o|˖-dΜ9aaa;wD$966V/ԩS;G\7NوfwdFUYe_zjL Z$.[dcc֭sΝ+^,lԨڵkE5(W^b6lꤧ4 d0l"Ӆl۷O^~;!pD+DqA!J(EF!J"EPdߑrqGd*|>wPdDߍ(2@B@BqF쩳Br#u쥂"/eB(-; yB=6"~ #EF!AB)PdB 5 ȿ!L"EdBEVbEQd6D9E>'ˬ"CF)2Q *BQqVU&|ǃ"!( !(q"2|df4]~ Eɏf )!2lmP~+yOɓjz`m|]=}//ZdfW^:u&sQdF"+XbUTׯ߮]nYzƍAAA> eyjdoyO)Pcj;;v,%%nݺ¥KٳG}dyNI[d86lXM٠u_|2e|;oE_TTi֭W^+W/GE}5)j t`lg;*T5k޽{_~iE8Lu<܉="ۈlذagϞ7oСCeRXE ի/^iӦ۶m'OLNNcR_htrFD'2K/%7o|˗/0ŋԂrB$|qXܟg9vhӂL UvL̲z5kb_K,x#1ECSdɇz(""ԩS>Br!~Yl}6l߾5$;dbŊK.ny>j8MpBv;fCW\1bo]9h'nڴ)((W_G`c׻&$ '"Fd@9B1e˖ݽ{wZZ2Fe*PQD3gl޼(?~|XX؁:aY?66WVq+'N tѣ+q)gD?e˖Ű`]1oӱcǎahѢK BdgΜ;>) \(u";v,.BCCǍg_ElIX۹s922.Aqa(qo>S 67ol=xkߦMy݂l@]]H>}(/[U\Y+mxP"&M&!nɨ,6r`` – Éз|:N弥-ׯXbZBBU%/Ev̙bŊ<"/Ba *|ժU{9X8#®۷[OKK. ;v_y*UB5R*W,+`'d Ȋ9~r\y݂G3mժUO}aUoj٠5IyAoo}y1Bd?4"+W .xT֭[#""h֭ 7nٳgEިN]}4Q}LAy=#2obF?)#~?Vd"sҥKg}V[Dyw"Oݻf~wdȔƈ cLR0i__8իk֬Yx]vmڴ G,>EW_}z<%Ky䑡C^zԂT|rrr2X"ZP^*l .]>XxqٲeѲ1&͛7~it/^tز͌"b[855 }L$ӧOɒ%z!\:uJ4u\bu-[ϕ+WF[#GĤnwnR6ۀK<<:+[=ӧO+W4<| 4;uvܴGtĺ2y۷s/s!0b|9s愅ܹ[?|8jSNU>#.Kdp~"<<|ĉTR_}رc3qƹmV8C;v [jewŰȑÇ[ի)3f0;ypvAC)2eߔ!3a|}QoҤ~.XѣG!C`:lfFm| '&&!fqrƍoݺ]FFƤI(g͚CJ'O0m4e7&U>k7ܶd]n6(ñk߼y3.m7Y[ئ)Al e:t0[r8'=Z̍@@@1bbbɏ`sw5jvZQLz+ְaC {veʔ-Z$7-Kf[o!bjAt &ݶM>PdgϞK.a3aXx@M\<̎+vS !6%G !B7ek2Fcǒ~2y8vLͶ8Ǐ6SΎEy'T#ݤݤۿEۈLپu6+3n@{؛85j.vOy iJwP`۱ci= ;IO|_h/YOOĤ# 6XԼy߸q:\g"6y>uزm6N:Y fďbؑu0ݾ}~[]]gܮn=J׿֭[ 470vOy TʈȠΝ;[c# b$ODO_ uzRlڴRJ c8EWƋdMWm*DfO!ǎY.dFla㤓a~파۷o/6_BeLz:nnѺD׾G+ۀn۷j>S%֭x TyY)u8'=lDf}Ǟ"#y"ٳڵk~!jbRܨݻM-lr8q|)S08B̦6u"E"##<ݻw'&&:lɌҥK۷O;I'+[U ?={?)))abDDvuWjD׾u=])fLKUBBB0YWc On&u2_|QFrne5z'DfXaٽJl 4dPP͛Cۀ6&2;wl޼9ZYUd9NA=ØGou}PNT։̾nZxxI& wز ,Ĥ-lt 6ԨQc&M(]LTe2 6L|q 22Td[5qkɺxR h͘6n܈UPYn@la1M*Se ne5z'x!23*_<%--vڹodž<'߂/~AB"L/{Pd~"#%6"[oJ$EF!Jt"1@(2 ?x%X8C|$2%K ݳgON,:k֬1lڴ؈L]DE" AZn-tҥ8E(2_YWH|LT 4|4uu։>`ܸqrFGijժ+WiA>Y@BHnkQ)2bc)2_`-XM6ҨJ'?8hE#~hڴm-Z8pѦe'?Qom~ރ6nh߂7 }Vdqqq#3*L$螑ʕ+>|8W?CiDuz 'SsCԲXt)b16-~g? H N"2Ȥ(2ߠ aر>_iT">ڼy3bf͚}Gn[i~/00pBi賟$'ȄŐYVEl9rAم l~Q3pPfˤoҤۖmѣuE\& u-~g? H N^7,ElD^y_iT sÖ6?w ,^ؾo:MBщLx(2ӟQd>^d7onٲͯ4*Zۖ?헞ިQ شMC?I/W\67{׿-ȿiHQ|Y1΀UdYRӐFd/Ȍ¬(2A+7 !6D%\f|G1[dі/ wD'={BdƠ*$PdD'ݻCaBd*"!(щ[n"SY;Pd>"#%:AIdqq .}ŋw>;(2BQYXXXDDD޽og,^&]!DEFFu".|EF!Jt"gϞ}q"#%:E0"!(,֫W(ߑYD@BZNd H*@B?ݻ7,f8(2@B#C8fUMeD&^E@B[k (2?BB!"K&7{Pd~"#%6"JLLHB؈,::z_LBD= 8KJJMBD?h Sd~"#%:7!!!œO> UEEEQd~"#%:!JLLņ  "q"#%:V"6lXRR& )2?@B7tPXlĈU>"#%:! >|SO=5rH!DNdɈF |F_(2BQ3fȐ!D!(щlԨQǏ;vA(EF!Jt"&N%$$@a9k"!(щ ؤI%^|EF!Jt"2eѣ/D#2/PdD'aÆM"@BD6nܸ('"32@B,C3E_(2BQb]bM̿PdD'>}@dFQd"#%6G C!C(2BQb{dU"KJȈ֌~ABbc)&&N'2Fd>"#%ze ɭ\"w(2BQNdDB؋̥Qd~"#%6w""w(2BQbGExa1 "E;(2BQ6"S,ސ(2ABȠ-ESDfzkG(2BQbeL=(2@B@B\,Bx+2k(2BQ֢!D EVX!DIEz"w(2BQÚ~"#%?A5&̏Pd"+,Pd"+,Pd"+,Pd"+,Pd"+,Pd"+,Pd;$&&}EF!Jt"3K"#!(q"2FdBPdBPdB8Yl\V EF!J<)2CB@B/DfTkh!(fL||̏PdFdBR2c#2Z!(q+2#!DȤ(EF!JlD&2^d|\!DwDd!DL7)2?BB_ַ/5BDկ_?[2.~ABEw(2BQԿh[(2BQb Y#2/PdD'x[_!DD#KHH[BDֳgO!2ߑQd~"#%:DgL/!DNdaa=z,qEG(2BQѷ/D(2?BBȢ¡Bd4"K|EF!JG.)2BBw-&ݣG8t*gd/!DNd%BXz=,**ZL'2|q"#%6Ybb={(2@B{!.7*,,OE}EZ!(щl@g,oh̏PdFd4(99ypttzE[EF!Jt" z2)iP6pP>}32S|>wPdD'!Š3X *2Nd |>wPdD/C 6l#Όo-Rd"#%: >:ttAm!DNdƍ;vcGeM>;(2BQYVm:tԽ{XϞ Hzd̿PdD'͛&88oߞ"#!(щL(6mڴj ̏PdD'`". &[dq"#%:hB"#!(щ ԯ_Fkڴ)E_(2BQ5rQ^= ̏PdD'Ν;w1$$͛Sd"#%:۷W^]vҥKK4%PdD'ɓ'O8q̘1#Fx'"##)2?BB-Zpgyf)))cǎMNN։ }EF!Jt"Cajj??g3gԩSE(2BQJhK,Yx13̏>x;@u@%Ml64-`8$˖HIFSZDɖٖd;e[raEѬmb^Edؒem5qN|DZs2^f?':9yD"ysxD22LbzJffff$dG!deD@#5sQ1L׫!-S'I'deD@l6;P3;hB3Aʈ)d Ghoo'deD@Мp8 deD@:Ǧ9BVF L!{㛎׫!-SqFhh㲥.}!MUТR-xi+555{dmm%ޥ`e͛)6m"dJ5:ܿM_$iB4d2>*F P)RTgggC}֢2>JӪkKt}h1"[rb3lǎlvppp``@rdY} ڵkȈ[4Y!gi+!-S;搨I$gEliwՄ)d훜޽G-VdWZxt:ێ.jC@G2:ɸlCFϝ;(CgϞ9sfǎZ@*!-SȦ:tAə ͤeccc̜:u{5{^SuLߵ0TBZ=zTZvae{]ի?5Y~kU)dǎ;rjYސ>4Ɉĉj^Fdr~kU)d2uQYVeM6u }D-2{d9W^qF*CfbZh#{n{d|#dŽ{NLLȠ*#BZ#{dXD L!S S!QS3.%@@2Twܹ{nh?4XٳG޺u"![r L!IRH$&IBVF L!xbD"!JәLْ#de YЎ;FGG311Aʈ)d qTl߾}4,~22lRG9rرc*dI׫!-g-R%! YY2в|hooo:&deD@X,G~%|^uhB&JR[}}}2.sGdhB#!핐e2EBV2 L!꒐ɿ۶mZN%߯WBZIź%alVr&"deD@2X&uttϭJWz!de Thh(JI!+~22LUl``@c2bh!-KTtl)da de ұT,PyD'{,9BZ fRn,!9hB6!+;BZs!;)׫!-7?EʈyDWL]A.|^uh-r-Kqg/iC& %dT*F Tِ¥ ~_vm_'Z(![.p:u6d[ltz֭fBJvoᮻяz̥{ױxR--f>BؘL&e8F`P!;wjSMmOL͜|\Kֶw׬YaÆW O?߹C9]w6dMMMj8-9Y-JJM]>>{Jӗ߼_.!S3=+'x`cfv|;;ߓˉDZ82:/7z/KtEػkC&咊:h * ٙsV^-cr W~_W>wߣ׭[%w߰|N΢WL Y"e2'{D|`Y NT$#2jKԌNGj^f䢚o֬]V>^Y[VZUB&0IL /D20zSg.=I[!5##2z_b53wygݺ^|i!N{Vt:m67d͆=u3i7>>r Iwn72vug?Y~2.S GF|!Or˖ƢWg!Sñ0BJvW{2IgN?Z(!S3'^?&~!3rQ-?իWk=?R _#ׯ߰f͚SwNkC}l6ѡ>t@ ٵ{nMXlddDeXILLf}Ssɷ *d2Zyӛo҆Lc;wQ#dPdWM鍷ӆlttTcꯒy-28!zC/+ozw!z{{s~YLʖ32XdW 2X"fx< IdPZ$dPqfCv篼'!SݑHDB02P*d_yk̭p=Y1oe>¢l[6bmqhM#f2==>SLSF򒫯~ɽ,+Lggȣ>zСȿSSSǎvsAYc>|x׮]t:;a'O'ٲBf  m[+w, zV}s}9OT[h篘w9,lhR3w/bU3897Tlȴe~'dMȞ\L ԗd^~RT}܅r͛7|[[[OOO6PiSbL&*߮}I7͝!|<7dɿ ^o9_FɴWeg]?(!kt%2ɖWHR===R1 9/*+xW)iYE5S-+th3oB iY%oByj俅w#<^Y*V6 )dA^ A~| r;/_]K2UC L;2zG̥`B&!X{{{www6yB5pО8ᮃ{@r;/Ӿ~>²쯙 ,^ۢ+G|=CM2dd67x۟~XX_CZY- M*:y_7nmOܪsj>lz/ ]%SƅW/ACLwCƐ}սoE*6;S Z[;:$^,w&d2d9^, ϝa:r? endstream endobj 36 0 obj 30570 endobj 37 0 obj <> stream x1 @AQr t?rLwh9(9CX.QI> stream x[H[+.(20*ʇ"iAQٝSTECPTCҼifij鼞?,NU|753o4M4M-댛նmXjiەRKݮZv`+G8ןxw;I][[zꈈA%%%ݹsG1'dzxb?<֮\zhhhhkk4m=-[vk.I=pV3^xqĉ!11R7o-[`eee޽{׿χ-h7uݸqСCGM?uԲeˬ0&$(cmt8ͮ/_X&"$1cp~!t;p!`_ee%lO+fjA@UM0S Fot7ol{}B"##q6СC/zT˂٭dfΜYPP@-<5k@) ©BܓӧO\M[#iZ(LG޶=D@1ow͛ ,899ƍ7ܴsss%===//tm) ©Bܓ(ZGH@(u;2&~0RL)lZ?^i7w{jj+W(zjJJ aaa4bv(v0|JHz0 qIjit&)xn)~/V,8C@܎ݰ nhl"꿒us~222RSa '5lXGXb xd{5 ,=M= +4pgnذؒFM.ugZJazp*?~jl&fo2@TK%-NhӘ`8\iAy[B$=11ÇMШ0!z 1cccө qIj [rXjiەRKݮZv`+]9,4anWK- vrXjiەRKݮZv`+]9IM݆Ĥyޠf/zpn)..?] blq}>_NNyYW/ttt466\].]r%NlK7RB 8ةm=THs{]];^p*!JPTĩIhEv> stream x1 0 '~IX!s΅o;;\s΅o;;\s΅o;;\s΅o;;\s΅o;;\s΅o;s , endstream endobj 41 0 obj 156 endobj 43 0 obj <> stream xZˮ6߯u7 4$`қ~HJhI teCǟ%|/?\>n_̗iׯW{pXf23{ߏHojnn&sI~yϬlX,oϯ,5Y̕-NkZ`.\ ֞?qK`c M2k,"|ڐA %O~>v޼6`P6`ymXmnx4y驳a5t 5d;(tt/&e<ԛŬCx ͊^g3Y2^v;צqz;Y8rف2UX}s]8l,3I| H 5j!qQl Ot"0M' FǮsL,\%e4Yݜ]!⩫+ŀ#yeˡGq<05vÍz! 2j(b-g]!}NCc7Ʃc猃C]b.215_17Zf"9(ckbh~1:> VXbwH϶ B(֮1 b O)MBܖG*s<&#?\s:z6g>#~_%:BKI=MA\y.f)_Ё)1H9ž-.#c%_VQ5$e'rnY4ySpf](l|(zw4Ӛ;fM U=bnYFc8ՈXC ;Jo >P| )FRUb~8A9͈f-4wq( <eX~`%SIPvPс08tq py9WXwYԟNqp{1)!o+cZXGܙh!#%F$,|+F' YKb*9xh> IZLf]HY)l'[sjd)@WI;If’8\9Uȼnp{&?(^e鋇ېdxU>Igv}ԴW6$0jDMHF0G`,ĩL2|F9!կ2!\͊MU6掻 9M,շ_XuhM@&zI:9due6ₔZiV0T`Hu; I>hѠI̩s7P'dN[fR~uDpcx!y7)ZT5?Q/[Vm!'IUM@jTD+[;R-v+K<\y!/yCH~+eUdP72ga5 q*R5q>[:LkHtP+U४`嶢EV6 Ӵ^ҷ$$*]i$ \}k.‰`CK8߂/{" UbV6P;gQ5Ϡ͂=2 Wk׶q~ޏ>: Wo1RBn*uq \%LoNF'GaּIP[wu85{ŏQ.A5e.r)'"BT.#61k+1𼯊M0r~<$߂TZh/vԼ[%+'5E|nΈ 6Xz4 mX2ҕ@i ƣҵz"v|9 vTn2ΟI1)V)dSBJCnyZmh>Έ&`d ! e>9V\p+Q&F6XBF} \ oY$tޫZ^%ԬKvՓwrґP<D` \[1'XU!7.'%'H6[ځQswP-]E Z蝸[E57ƣdtM2זѢ[rRNhr`] Um\H`pP4B7$Cx_tvW 'ʽxv}b nÿv_~ Aϧ endstream endobj 44 0 obj 2568 endobj 46 0 obj <> stream xWɪ\9 Wxō$ÅG Y>(d@t6-P!od#Yӿf7LW`~?]'hB`9b/hy ,?<<~|/p \>M܁„umA*hpG,; =p^o/zHX`s917cdUk}ɑy#r_,tl,Qr*77є i7Yb%^B޷qrocYՠ=J",dxh$vsL8(O59PЮ* N6Ē *c.|U=.>hLmdJ@ш%(>pO5UF8 cRAIRR#1Ԓ Hjՠ0uKq#j>Ta̭&00H x.;^TJC>Vܼy)hkjt_+B{zl*e;CiJiFĥ(9s-'nj0ާӐ"gɈ'soCHɗk#:of<FHܳbܳ4@O_$NN_ pC+goQ*ϧDĤ/-dCcN LpZCs) `ǟ6nWʁ endstream endobj 47 0 obj 959 endobj 48 0 obj <> stream x|ކQP@ H/!t҄D^ (J^7 *(tU|ov0ݙ' >왝3w$&B!oڵ;vTPanݶm۶k׮׉JPF="WgjR62C SPHepH\rE(V6LV5=P.ުߠaLr\.IU>4$8$ZАPq`S'ׅI՜f]sͺz|A9vYf$#J>|=%WR=n}_I%ɹ.R@UkaH "]{ٰArI F)Ds~q Iy8 yV~XP֪]tRՊB l>}vD5i^Mᡢ!$\}K&:7 wMaWc05;bnR ~-igko5YRcXҕyK4ofG5M1کfEDX>Yoyk=ٙ4[I֒9k[ (PMҪ"Krpʕg;rdϮ];vE,ndXmSJuSJeKCPjj5թ[jɔH-r׉}aUAΙU6WiP7:ONt5MXnukl=U׮LUojb^6j?HR/fWMƿ\u+ }T^, mȍ V[uEdsQX]ުgJ*JxbU*v)Vz3uz7O-5ӧO{7tFhXg1Z8+%%1cT#gLͦN3g͓6Θ9}';3f*ɹ$U9C-RŊTҫ+v!j ={vO? L ޲)VuuY˧NZtidd\nSbbZ,EbhcF/Tby$HF'zr媕­bt:eF'gyzUB)!q*[?S^b6yk[cEXS@&5u~bM9`G/!S@=>D˗ùdEUW]`fѱѝ:wڽkTV22q()d~)Ӕ$JfXTb-_>_5mԩӔ)S6[L؜”): #!J݄XSNSԉ'^b^4H>gZbu]79b2)_OA&x)O< i#Ae*ݚ#G{F.%8txG;{/h"`;'F^9~Ī-ۡC?_~%((H.+Zpt_r)/O(Y7_X%**6 $׈Lc- TխWW<%UIs qjWL_:#{CGuUEsNCkMѮ"ᚭT.U[~j;^6~ujTTWĪ;fPh"8aQكM!蘶m[nbbv~!("^R3-ICdJYÉ2m:N~i]K!V8_sM7!][KI$T":qDkj0aP H'n7Rh^{rW_ݴ)A$_M^J¦^yWew􊕦Mft XUٳI/Xo]:=XB]<0ꡈW?g׈UYfȟ;we˖6UF&""bժUfj&j_xn G2Y1YV_Xa#G٣Tmۮ]… /_ަmk5 G=!zE'}o߾O>bة*X~}z*1>ÿNu?(5o/nLH8vs?oDp q^=bUFޓMX nŰ:9fXmIb~8%2UVU["DBĞN`UH&lѼŃ"&vٯ:ŧξeXEkX]VP;n3?j7n `Xb"y)FS+qR9e$ͣXaǾHޢ EB =}DzJƨi̊KҭJTtI_ ^:thǖmS_j\1FsHܹͧXϜ9T.X?|2o&0" p{챞XZ5ۇ>:l0dpj"WX2rwXxF9sFF+5k2SLy7ywXѷ~5mD=Z\&&"P|>$U[n̕{,XUzqzO]:LںsS>oU=2MUo: ԃЋcI8"$^j>KˈH'MؒG%6]宾ưɓ0JI#ScF[i#ʄJ AQjPK[jV/K``98tɅcƌYnd2՗_E+!bONt|r:vlk]ٲ?y}~g"t qKgIJKXX؜9s+bEL.]ub֭[VI^xPN)bhZkݺ_Ν;q"EOAqX t!\b#ӵkظ8-ZȾEnzt!Gh5ף뙿(VU68/)^yؾMa@R@MT@]o{.f*˽Zqv/ծW jUjUW6M%1msX[u/y1yCu#EJN"om:vئmZRX{2yTw^۴,S[(ZԿr\@[G%M4yrҪU/]W}cS|{B]V^$ "SZlthvTʈ65 nէbcر"ӧ6m"Nܹs||iKLb[ZZrAdhXwt3I> õBZXOGzDi:Xݮ:Օ \Swe}4gjV/\/uqW}E4> ^"8/%__/)V[Sd̥`E`[+MNqIP~Z2rgB%Bp\~}xꩧ~Z) hR~} #b۷Bɧ)'|M$ږEn+h}X|ɤٳM+iVqգt+]^7ܷ]8Uߝ{"s}k,7o2ӦM7[KT|oL؈̓O>ѵ[dߏ !wC;tR}nYA IO?!bǎ{pDX>"ފbI "SVս\p|P!^nG/捦͚` *"o2RW32ӴYSQ,R&ףħ;"2ºz"ExW)Pi@|^hu[ I1ԝ|iG=OGeg J:)|ƪN]?zU=wmo.պ&oHt'Hai [pL߅6 A Gj 8$95 mgδdj5E&ڐTF!gR77Y-]3-YTXyf\G=|7*_ z+u2ҭ{7gsԵbEn]]RԵՌ-I8S%!<vȳR}.)&bEĺjU?'}U޽X>~C{4 |p_6A\ba=cw}ϯ]wPյ4R f)Qn{+[leJ/WUaպAy!·X\[7ㄦMMXu׸\RֈeiͭH-qI9 [X}^ֶGU-M'X0iJKT!3CukשSvZj֪UFr^ n-S^/ka𙰄+bvpXC]ݰFV^N:=ȑKg9ը.:g^R}f# <ȣXQrŋ.ES90% ~vp5*W"VK򓘔D?s'#=OӷNIXVWalFac,`U _b3XjK*X!UU&bxщ589$V^]VtK~K"PoI72S]MUX]q5DŃXD\6B&8rHABkՄTUk֨QzMc^YvmgqՕ)NM M^x+Ff͚[+TX>@ e SH^BXVM9B)I(5z:yk`JYI͗ ,L7˩Ie 0&C/R.FԈx;o^{?s \|lJu3"P [j%ez)N( Wj.Oj<U;# {~dX='`Ҝoz}+cøR}kZ&9|~zuMOkʔldՂ,"V[~V#~{j{g%bMɭ[yX)^͏7nn@| ^ i/rQh>涧)n)V{Ҡ~)?-ơnUZDRjJV*~]_>^i6"nu7[<կ8b)LVC AwjVXU5Z װ>>֮|7_+!,fq_UZj5￿}"UU C5kՁhk E|+88,7obukz#VL}UG2CCMb۞Tt~=3Ěj# yy*/*b{_j~Eoep>W׮|^S ,T8R q/{" ֿ@UuQ]ۿ3Z^}HX]Uԭ@rY A֬4Yի_*ժVJ*{߽HT{O[Z55jWzz.שS^z BC5 oMXm_lWix6JUb Z3D!̐ڶ+bUnqbM^ub R~gV.Pj3UzXhE`[b,obu7/g>U} ^ SnrYG.b+V[=_vT*<QhchPa׭d*|ZӺS?+c(xo` ({oYJV XJ` dV LumR?4<(ܺzC|ͧ"V. VMX]*mb]}NIR]*I!=ΟPbu­׻B WBI["+%Bnh2OB!i)[w !bBI',AB!iEr)VSBg%OqK!Ш?<&b%BJ!d +!BEBI_zJ'Vz7䰸a+/deԶn!܀dXs8JF[Wݟ4ןΎ:JI*VzYׅ4JTʿybUc؛obŊǎ5jTٲeoŋ6 K:]s+j۹s:7%?XW=]1fQp¨y݆ K!4 /5qkNo#Yñ}4h#GT wxiЮg O>/w6M7ړ~!cG}T7ojwM&uA78cǎŒf͚m޼y۶mh㾈DD~ƌȷlrD8e$]#VחjW^ȷmˠ?/6lʠT+VLV(cĪӵv=x#XůFXn"2LwqV"a۹s={>ps Zq\c}ꩧ۷2e۷s[+܄|c9w}7#Bq{=soHeJ(sa0sXX>sst}pq)VBwR5JXnXmr[15jԝwi+kU\[o?Ѹq?pVeɓSNPyUPovn;ySJ>S4$/`ITm,Zĉ ުS^֭[WP7hqÆ s΍QŠ_[Μ92Sol07BQqkxXŚةj2BB!7:SkBB¾}čˇz(CF!! XaFuڴiKΕ+Wɒ% !pB((VB!$>dzBX ! QF+!Q4RX !t(5+!ׁWBI$֏[=e$_z#.=$.SªmL`bbbbʖIVa'fݭUOXU!dS} z8}_ں}7/PB ĺ{eeۮ4qƙ*9rdϐ>}1ɨI=YE]+<&,]{f]Шͪ$+V/_>)k'٨ }H[u{c8\r+V,..nժUiI3ض ˗Yf7oNgO8[o-Wٳb*~u/?G45 X%ݹ;1[wzVUοzﱺu}IϯlFֈUzF1gΜf˗/۷oҤI 3Y&Vs!CԬY3c{dҥEYpm֥K lCd*fu M[vxk&M"5NA'4N:~m5!L>tҷrKjd$uGy=zX#G̟??&?|̘1 Do.]4x;o޼'Np6z9̇v=3n89) " W^pQ\fںhb„ %J馛/\*T#+z;VTM6&Xu'O2 u`` jCf޽t|BBlEo޲eKDs1yA\G,XPre|MvDwRt̙Ν;ǎ,VZ&Ɂnmֺa-py׮]1nuGn$\ Q1?vϤӯ6bEH6b$c?fSN! ](ӯ_-Zdbbbf/O?³fͺ{%UVF سgՏ?DDD12rѭ]רQcŢt/b(uCCZDPִiS[ӳgۺjgΆ Ϙ1#2mZ+W./Vؖ-[D~ŋ8!,x(jۺu\!uuk)SʼnSNbhQۈe˖կ_˶Y]ŋFӾ}{d7o422ylW_}kSD^GJ,PWmgY8pSzwhQȣiWncΜ9:7GW^ɶ][׵@aq Og`ڸi{f5/EGG/KZ59-nf,Fm\WI;dֺ-$:l^zN$]RrN4aceyi׮݆ Ο?_ǹf͚Ç[]jݺa =V KBʋ-Ow\^f"## `[QwD9GR]K.►' Q1uߡ[w^8A _ISE{,Z{噗n(B#F/uљ3gu dY5w3FbŊ:+WpB`v իWG iӦPmNDlj'uula-?>-/2#9]"!*whӖ&ƿ.PlH&4/ϼnÖq⾪}4c-_mnrەPlٌ3۠;u!D$ֽ6WZt9D%-DHE["[yi͞LMb?$i+!7~;v-ZdowX bݵ~Dn.i;hPdv觥d* 薫I]{OkmJX #o믿^P|uɓ׻;7(+I{oWP缧.+ދ̊UZEɝ'Ow?ǧ([&u.=eXIŭUVZb%b [_Z6X6m­B5%AAA5j(]4J! ֝{׮ߒҪ5/V%ZZ5X5 X !dSLb}`ͺM/\! b­6+bիWPb\2J! ^Rq\LUk9rgHn>ߘdȤ#BXw_fcK+V(fTUʈR"Y| I P6jglg]^":9?t^HVZ-^8m=ɐ~v~ҥK/+{O0qDCU*iOrtd?bEp+y~*IS6cE|ZB{キZj5klРA:`={&f']6j#kĪk=4iRڵm}W^=z;sѢEއ,ٸqc^p=q2o޼… {YlY||$-F`;!~ɻXUXe`QR%X8Xm{zsM&cǖ(QBvձcGx:uK /`r{뭷 ?~?cQ`߾}O?]wݕ'Om۶9ݽ{7üy}/]u~mҥ8 }ںhbE馛1C(  6L#45d|̘18$ C]lYZ }_d lE~WQ.o׋=WXW_}ռ]h%m=ѝܹ3..N; cHHT+7nl:ѱ[u{q(j69*a *h׮?t`+o+zkrdZ^=+XN8"cN A?ިQ#\nz'r޽; O0nѣȣo1ˡB3tlac+l[W79Z'|" @"R[W1aٰaEe8AyGt>u6jk֬ CA7n2/rܹǏ/[/K/O˲_va)Vª8Èf:qH|ӦM"cǎ\r|"E:$V+"Đ70K#q6~Ymt&gVZ-[lZAE\,XeY]y*ihn&Mvay~VtO+"ڒG+PWmgY8,SzwhȣiWncΜ9*:7'&&fذaHՓ@gV-_~eݺuEi(np)Dwtbn~xYUTKi+fEȇnS/jy׼=;Us]]']#? 2xik]QURV-P㌈UJuT)Sf \J,).s͛7<$(\#WG.\pAbҥ~me蒹bu]5bs)_|]- ]1*ֹ B҆A V7K6ٳs! ^:˻gj|uN#{m۶Um5b٨B-ZyP#V}BCC{c{>w?s-[8p@yquP+\rv )'$$=VO<">Qڵkmn.Gȉs/U\#VdtB0U<$~ V {&O>Fnٳ{1gy>hzٲe8>?qɼ.Lg?jd] aݻ=VgIFߏXVE7ߘ;#R8I@~}|a‡԰nnL}]qS|8w} [1hurty-tX]+D )G`݈+W]7w]/z\]\E:1dyA]ŊE(:mb(_ꦯ;wo>2x,; "?]SP!Tuov甫+x<ذɺtÂɼG\?|p-K:aM{UVAePQoǧXuuΞ=tFšiY^Gf̘a!Xx|8jժ/PmLLh8q=ֲeˊ'Κ5K ɆͶD];/Juڵk2kѢJ&&&6k֬b9?(SG˿kli*ׁClj*1tc>p@s dfncYdVIw*{\񺤍gX:HXgϞ#ɣGӧs%Ŋ۲eo޼xlռ\Qfi#FQ֭[erҭ]O2%..N,:uuC"HySoٲe׿|qVWxy*o###v}WI&[>Nu{dɒq"h.βp"D"gιn-RJ ?c|i;J?TJGB2 XOʧ|07$l[ٴeGǞ(X.GD\v,ܧo;ȌН#7n@uy_.,YԖmDdruMz~:fFGGcnyݼ3gK.jkן*g !Um%a[%s %8ΈX\AerN};G,=zt-mۆk;߿? Dⶔy]\^Vukjd] a:t=VgIF/_XVE rJPO8;H<I&s!Ϡ H +Hv6lp/R6?5k>|8܊r9Ժu{mt`<$$D>4ZvJ 0`{dwhӖ^fE]32g Zؐ*<2x˗Oॡ s30bbMۥ``Ĉn9sLnaApǘ1cUTA|lٳ;wΛ7o…gP]F.pΊXǃ A7,z=(P`ݐ%yѢEă(zj52)]~i@@QT)hZ>bŊ:+WpB`v իWG iӦPmND88A8g(Qٝ丒rݑfJ> JLb{p0P_HѢ?k+UoR#"[l#[KtM3Ci\|y+eץ#3+!!lٲAe?k=!YAܐKlڬG/88t߯]4o,p,Gjpb]LY~G,5aNkmJXeNrرchѢEm0g+0uOۼ$7ޜSReȮWŊϕ+W^yuk~mn ^6l-^2b s@" ʗ/_NzmBKB.֦dB*wgbbbb~$]W٘ҊUGª>ڼكŪIII7Bo̔Q#zn}+:} S&%_}:.*UjXGN P6jK>`+>Z{a>dXOi ,۲+xзS|IC _IJz캎==qaߑ>>aanIdX!V8(V%fͪXws'?>}_g.]Okw= Q.uϖS©?E_8sKmkgOwx0 u]7]opi9"_&]o?GsjKk_B('Ϝaԯ8¿Mn8?vm C}S A31f冽&[ٞOZ,A RC$B+(i詉ٰj?ntGn۝y>ljccՍ2/_/X)^NkRjl=DN>,]e{%X͛Ӳ연]:/T\2JMN6.Vu`JDI`e]G3`vZ6[ s.}b=|\lyh0aag_mDQ98a׭]:xB"R[WE Ki m-"(`3+ſ?9l]07ky /+05يn?rB׍{rA'g|fgfɺ]E}#߹ռˑv}jz>VF>aֽG +![-"Vlac?e_tGA)W[t"c2G$BTXS)ղj"'^ n8:9; y8f.w[j||ȹoW+賵&[tnlg05qC#Dѫ{>wF/=+ս&/PG="cVשs>%8%S= 4z u1bqy[̤Xƪ=f_ JŹ\kĊ5 QX K͛7] NX?&_fſo`0˽'gK0㣊oۦ}F qP&y]$B϶zZgN!Mՠ=VgIF VE 8*rn?nݙip߭3wC;o1cceym|S>U6?t ؼ_.Gpjo~{m u/Qvy8xϭFJYwei i_5f;&FfK+VbD'n|麫A"TJSpǧ?%!>SeÞ /H =-p9o_ɺtÂx1E>{;kjs4 ._rTXG(c Eɑo>s]?_~it3дR}c'u;rB\o4?8}8j x\.xE_ۖOˮǽGݶS!󆭾z\31hXݰ.oɧް[>7M"26b=x씌,]F?okʻnTwZ36bebA>S0#sv nXYX VXnO9_>3iAf7wd)t+!Q2O=o/73X TA @Rk!l j5/uRX .NXsȑ{?Cp#$F&pPL+V(_|RNQ>`+>Zm%qr*VX\\ܪU֓ gmȗ/_f6oޜΞV9s&ι<66o[o\rg6׼wޘΝ;((h޼y B2@u}I@6j#kĪk=3gNm}˗7iҤ އ,9|!Cj֬=Q9{lѢEwء.K,[Yti"E.\xm۶u\sÆ  x9|[h[CHFB2֩So1K.}-TVMFROy;,z!'.9r$15}cƌ)X |(pҥ}y捏?qℳQLPn{gܸqrv]7샮իğ85kUtE&L(QM7ݤxPBW^yEsرRJmڴ&u'O2 u`` jC#冽&[۷l%|bn,XrhmB+(i̙3;w-;Yu!޽{ uƵZYPRj 5cu6IOض[Wpali׮]1ΆzI3%I)&LDIB})L#ke3sĉzf/O?³fͺ1|ժUE#F4idϞ="""D,[W79QŋE^Pj*1,iӦ(U={?U8߿ 0 5yƌɟi#.u"3lE*U!BǏǾرX#ܹs]vuݰ]XXu=ĩ! bun#ZyQ{Bݮq]w%P<9I/AQd 1{d>+!$ PI[YdXgϞ#=zTO>+W./Vؖ-[D~ŋd D0Kcr6ڶn*+n]Z~ʔ)~YllԩSmZAEİ6dٲe׿|qVWxyjoe8BW_%lET"Bu푒%K"m%YNQSzwhQ MuqZ s!]9s^t9 q$@8v\AAA"&UB,:.!b5J)V{)h̍"GZ59-nf,Rm*wqb D%७u[DItVIzBI23"V)5סFPY\'O(PP`AȥL2⢮{>wҥK6l ˗D_.C=tN BRJImF%8cw;ׅ|Wڹ;b5ZXbȟ?p~0x,G ]j|xN#?~<:8[WEװ(g FiFuCM6E }?W\믿uPxE].A%8%#G=V0t;#0IkPoZҵfl,AXuɒ%ު+2I?U.^nݺnӧ7o߾ѣGc۶mڵk㝍ۅAx2 0 >JnV7[ A7,Cu,˗ªV\i'y9' ?i$s|>D}Daceyi׮݆ Ο?_ǹf͚ÇėVrtuև-tX]+LnժUCF.t5աEvjYƳgϊ;]t7]X\tBp>bŜ3bR7}9s[n@F>Spǘ1cÜUTA|lsTΝ[paTuQru6YWnX z*P .?!K:9s,Zh\\xP<"r%W^>>ŪO? @7J*M=TXQgʕ.\hL.B iӦPmND88u8/c =!RF@;w;r]]PߒO?~}-P bJmNX˗//c,4z}[ydv%$$-[6cAНxPZb%c8#9S:Bb5]+[*T(_|:t8yN@b5Q+!$ՈA#K+!do(VZv&BJ!_(VFt&/uRX 8EB1AFb%bb5@BJ!_(V&F'Bju6Jj+J!j?FR'J!ՀA-#[J!$b5"e&BJ!_(V~K+!do(V+!X i-`7IBHb5 BJ!_(Vmڴщ^X !${ChcABj/jŧ !P&ڤ@Bjm۶mrK+!do(VNbRBlP h466.SBlP`RaL)V^ &b5 bUFFF+!DLkժUfͺu6hЀb%bb5 Vܹs׮]{AB1@@|کSzGUvQB P|IillMttNQQQ^X !${C֭L iF[_&2yb% j &&FTĪb%b5{B16F@BQX 0)**~Ixb% j@!bu t/uRX `B(Vx:JBIXH _g(VB!PėX###lbKB\X ]2{B PS /B1@P٦M۪U+B@TTbſ+!zխ[7< į QM ^X !${C_d(bmJ!DB__Jt:)VBPZn- uFEE uK+!do(V?GB1@ !$k|xIHV!J!D@OXŹUK+!do(V &Tz)&VNB7!VRhhh XR'J!@˖-5kR~u%J!jjEVORB P?JB j@|jdd$/QB PYNj3X !X jN:wܵk.] CB1@_bh߾}ǎ)VB!(VœKҞ+!U1)b%bb5@BJ!_(V+!X PBb5@BՀ=)VB!(VfƤb%DQypL J!jXy)Bb5 K]{B$XVX !$QFRWJ!j)֘XX۶mNB7TccEX !X   j6)66N$BJ!_(V:CBIXPBb5X:)VBP(VB!B05J!$b51bSB$BP+/BIXPBb5@BJ!_(V+!X %VR'J!yBPbRǥ"!X PBb5@B@J! BP(VB!BX ! jb%/BP(VB!BX ! jb%/BP(VB!BX ! jXcNB7"VBHjb%/BP bKb%B"Vհ^X !${C05ނb%bb5S[)VB!I`>D! j@kt۫IJBAX ! jXmzR'J!ՀG%B!ՀA !W(V+!X +J!jXUzb% j DĊDB1@X ! jb%/BP(VB!BDp۶mcDX !X HRBچ OZUC n^ Ŋ  Ŋ  ʔ6+AAnjU+ 1G(V|o^(Ln VШ_݁bEGSg;{qPҊb1KR@"HT T wcX+D 8HɾQSZ1^UL?f+aXIX$T'oIKK -7|K4:s5<}ӕºyDȷg;]˖~^ЅN:d۶O6Ϙ Z!}uwR??pД6l|woy/[c;<VvTڇO_P?vX$ )߸EK**N>e[|Y)zaŜ9o^vME6o~ .Zj%mG}Λy/@gэ߰ɦ-W\=Y5;gA5#kQ+~qƽzcIM yQZ>~AyP]|6\ E8ԝ^ҥKu\pasmi\w v=30Tv|{=]a(G"H k˱0UT5&M5k6ʕ+0W%koyヒ\"/[: ʘ2e| mPl[:d#۶m=W^=v\ު-!U7mD[ eudV~F5ɺEǽ8bDx#ʵ{ NF/ &Yx?5t%N~sKBEEŖ-[OTxWHjj.m.ޯߝd{[vƏѢ&}+8: zu8xcݼy9~n7攕M5 %%%]]] «3g\~UtW)U,!n;o1g?r_+W$وBb-I.TiNF/}yRH }`k;]ڵk6oQ[ gh_6mO+^0cݼ3y{?w+%-*-$ 6~Ԍ5X$)6g~ꫯΘ%ooڲ]dye.~#LQ+6}#Wu%bΜ9eAσ[?vi~U5ʑ{x7[ m6|Y?&L7%(و<<3+نU$ԝ^W"y)`{[1۷FQѓ #=?bwYv4|vgM%3Tw՚I6l(G"H 0Hq p{ǚ5kA|ێJV wogOjnn'/yqwˮ46̚5kժwq>55)Ӈ$jh L0y/׬os`C[UsC~t+? z8#3{h/_y%y{ew˧n>Ѻ'O|UwR-/~9մ:Z7'_e tHGi#|zM[ GWa?@AזΓ{hmK]%JoIIɬYv7_k>\"Ɗ|OhbAX^gle+VVWjKkCˠ )FG괙?yk<'zrwuxS/_5KU?@)nm޲ի ҟւX^Ag~?~;_=+blM:;^a7v  H@Hm;D)7^xq5'N j™/]_ЍAͧNGôWei^IvE򒼽ĥ.ЧmǔukF "P%;y\cqҊb1K+Dthܽ绚UVLwӏY(VpuBei{}W1 V +_[ڏlⳝ{TVLwӏYb:Q Hm۾;>߭b~lҧ2%b%OQY;|PYZ1^UL?fI*̒ H@HmðϚT^ULӏM X%W  ihhO ;L)*J" R^7>]K?$j>CA΢^2" - XA$(UQ rCԋ&No/ `A 5 2Q$IB`(K{`MEջH#, i5u>Z-}!4hZ*BG|l6:pdgg;Nxtd 8|d d d1"]`v}ذa6@jj*˲&)%%fMu8F]f{~dmZj4^eXhxq!CcC`Xxm0 +9_Ev,iFdX_Mh4 &4 dKB{BBAqqq4]\ơ+?Dz֗84BDңCQۉXԭ1X%2 B#)CW [Aĭid(nqD=uM:.>Ktr.HvsZPQ^(AUAQQVLEAecZ8LI[oRɋ|Q(b$ʻ_nUn ﴁuح5:pkQ~l[^(Ыj!&pC84k? LȚב&-1`Mu쮴lw5?bS5bUJJJFDFݞb9I O:QeUiPjbϨ'SbM2$ 8(1QC5* Y ~BV]b -bin?}>@B "Jb/حBk&VO*i'NP\.)+ի蕸& j,X=+5˝>̙fqELT9&\b%*n%9:+umTyzMEUϤ|01N6Q}AjUX V-تb9vkQj E?vuDXKnJ*+kB VEU$ ԭzXuy[ *5&!d,fr\$&k*kLe? 8~¹ܪTTqEFyJ4Z,V<F{b#?[FB)^D'+Y> Q /ŃXNĊWPL4 uXaX%Xgc,V=ב$q1~PLj[%t+ׄSW՚uצץ$8lӰZ4n&Krzj@'2c,D b-_T늫5BzfPĊy!ށ(e֙ob-Ԟ0ߜ?wǤ%~.Y'էN'zk[}bq V=Y|Iѕa8O<|V&ct\z᱀A@/x8]tuc5Lwfg,510cZ}** ʕJŚCUsssapJ/UÀ'iX2VSZ$(iW/Vz=w\b5h\ &Pz#"VK\ةӰw FX)Ч"TSLĭ2u%ZRYPcсayqÕ6Fk؜L9pKtz0'fnOZF>L4țRTW3OIjbYLQ%bZim@SJZbN] ~b]_DRUeJfW*XuW;J;JWPmU : 987Y99Oje֒gI2&AoY5 b@o:Q+S8̓AJK2~s  Ƅ:d2vX`i03tnR^SFXUX[쀲U$,JS-VvnT~נE2 bX X)rJK(,LK՞jY) kKxrB'0dzifL\b4p2"P;FI+S\/J(V?R %__*NbQOkbL[E!kY hXXy-&jUaJqy9W&*\{1`X\LUv8GJaCͶavkjD˿*9I Fiͅ![! ejpk0u:b%w]}*g 86,"44 _6+(5l@A$${ endstream endobj 49 0 obj 31358 endobj 50 0 obj <> stream xұ @@ozy(`/ 89h5"qY2e:eb99єk%^/ endstream endobj 51 0 obj 298 endobj 53 0 obj <> stream xVɊ1 W<I.TC $LBV\$Cxujn<_eǏvP {Ş7|ebno慘,)>zdn?}:҉t>t>ISuʄeIu]0ʮs;pfAh5@OW(@qrMc``lH# pihG.Ir(-Ɉ:L}@Cg'=#敄~Yz&򊓙br҉Pke\#c}.@S2Ʋ_q{%*!A̅1 PmrXr 3[ *R)Ց%UVopkCT½:=RCٌZW*`wR;E]Cf72=-3&Vb#MF{ƬyqQ+ M:5($β->? MYΚTb!2,m%:ex(cqκjLZ3Zו\:&M9&?hިXUT/w-<#@wyEs endstream endobj 54 0 obj 773 endobj 55 0 obj <> stream JFIFC     C   s" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?jxv&ZY٤gr<ı,_ 8o\g|q;zMYnKF Gw~-3z)mZft"J?yXaSm%vaiө9*DOǡ5o<3'W-#Kc=&.ּ_Pwkpm X(Br0F9udžۍSgw0\ktYݦ 1uxJA"y^Ǖ< NoNj[nv?RdQD Ǘ6኶xq9G)ZO~?xM4ɵ;[},ir;C`GOQ& 9M>'i c!_ >mERU(r0N붟7a6DjcJ|ȏq/?/7?Z-z%ĩv i$9. ޫv:mB ~={敗9%$&=]<3u':o ,7~!!Viy2e' EbxokV,#uh_ZxHpOja6P\@/ ;x > &.<{EPHW/ExV,x?.r3ސu'ώ?r 'ŏAICb:sg?9tǎs ')(3?i?I k$O,shLt 'ŏ#i?\(Zasur?s gGůg+?\c!Y3G'3i?\)B Q k9xtg8~!]rؠ :[^84/şLAIH:Z843?i?\sVfyHw6ɥuedͬ3r,VxP#H,I88Ckmvv225++J++F:>0pr to<7z'u/73M4?o+ѽEPϥn?'.o+~}wac8%>-jVߴg5>XA݌HƶtmJILȆy-% e+2r2:c8G^g]jj6l~,""qM~kz/ĝRRkag9_Q_xS'.5im;{VWJWq^moFaq,MH Ǩ4>-y{MnOnZ/[xo-+~Oٵד<ƈ,W,T `OREq8 u/T=έAHlYou kY22?U|w]CMSR6*۴Mye >Elz<3AQ7_jix#!bҼi4~rXʙ |)9EoOiW8}E#WM _/p;w,hm|=CCӼ@v7i ,'qަߊ~8k^ K,򢝴ˁ)^8go^IOhn*yǟc&s:yExDŬBJ1(qA+:φŇCuo6eͣ& 3#ݴ2P8"?`>~>ov]XtE|*|*`|QkJ5{޾k2?2OC.5{޿k(v/-v/->Nk2?2k|2?2(&kSn|OHaoڨocңc|,Mk~-ǩWTP wşkö>wşk폆_g=(l2g=}_Ev/xv?x;kQn|3. ?9 z`|iA]#iA]#ՔP__=/;wşkö>wşkC,oG,oG?? 9 zOv/x>Ol|2?.l|2?. (v/xv<sm};gwşk폆Gc,_GkOo?u^Y1߼ Fy֊ r\Jn, |TRc|2?J|Z⯌5{޿j_OjG~Pu5Ηy`ڔv7:޳isspH΃tɖ5KK& kY4zѤ"nM]K*ĒLȌ6L[3*XZ_5].$ֻoN){<^*`c/26*rRDlR ӵCJu˿ThI}i4FAS!ro5q-{:\7 ^/uS/co.UQGk(xRbA:gzt=zW1H Iap! [C$"I.,<$b̎1ٷf'o+FG+Pҭ v歌Z(a&CW Ǝٲۀ'1umw>4}'A}V u%xO(dJCHA7zYڶ2<=s-fBc [}3ms/͏6Ӿ|1׾^x. siiB++ib9(Ey=KֺՖk-_X@{:젗;JW HPGxXc+~մjpAiLڬrWJ֣ϓʅ&S,ȫ64_@׭uy MVuva9mnX| 1φ.k]J%^Jkw4>& .K65jٗL?n/eQo8u]";;i-*kym2C#uB i ֟4᰾/4MnlQ$#u וN'k[ 6m!~WwCZ\0~ݮH1EY+Dmќg~tacܙRMBh Ϝ$#nVq27xEF[WP2yB>oOD;F?3ߚM>$ֵ%-˛?J,Ž巘$] xH-a<}앣ie= k &<mur"YE2 Lv|OV=մOs4Zj7),OYH06,I >wҚWf|S;D5kxy`]XF O| 1φ.k]J%^Jkw4>& .K65jῂxG·W_gvhyZMΝw+?i:6m;I_9ej x+G6JO}ckz?M o ݖ3[ 4-˾L&Ɖw{> ;kZ φ_[^85}Ue?n3&gX*+9L)#f|0uZV.S[i\6gpeQr]PKPh zeinakDZ\Ə"VeC)|FogWͼp:5rCխĻiD pFwV.RѼQ฼oz`Eۍ92]SxR䝪FO x\ GšhMay&ԯ4-%Ɠ d$uE$O!XT2~Mswo/GjR K])ldI &?z9>`@_Z:f$&zT ke@ A #7׿jKm?H O#]oM)-m,+YNgsT|u>6%<(Zf 2X)qk)ܥU6a|??k5TXjeŵڀ)e?k-4D a1h׼QJi^|ak/uL7W/FLռ[˴e6*zG!~!J/cD5 yRծe4]dx2;+]]xT^#t۽.]^kx*ž%+yCl,l[x.:Ƒ)-+v㿀5[Xx4 xJ}3ϸ{5D>m1FۣrIoxoKe/[湤RN'#6zyC$y*C,@:36z[CpD\ܕ_#taX%cWa vn-~G5ܚmk +x#$v[uhQ(((((((((((((((((((((7c/bSu_U!2Su@. TR| TP??eaO_?X/ (orO~*ZmBp_6U2z 5 ¿3hTFU|m;LVFH[.v 1P88.Nqك?<| +C6T ?V |T<6|U<iPlCy"&Y >#O_cFd[jZV0Bw Q:OX~G?aWm⫑kWǧiUai/)j~b] n߹񥅜kMalqr1,~D&)@c|89X~G?aWm⫎]_Mn}/p;w:Vm O\h. 6TW|!o7"@ƚ$,iǪBLѻ$"tua 08 :X~G?aWm⯆S?mU\x/6^F-m`ctoiQl4 <"z[E]dgs_f>/*X~G~:g4.ISۥ~m$bέK*2F(dڗ㇂Kf_1wfP}Zo^MVL0; 9|W ¿3hG,? ͣ|_Ua_<=wW>1jWm�Sr0yX S}׀-Mb%;Q kfp(}>kG4M.w+C6T ?VG(5kO4MB9nmp|Ջ'a"_0 ?Q ¿3hUA@X1’n[$U7)" :EYԗzh ,? ͣ|_U+C6TjK=_4jK=_4rf>/*X~G?%}?%}9 ¿3hG,? ͣ|_UڒWڒWp_f>/*IFIF@ ?Q ¿3hGGG \?aWm_R_ѣR_ѣ.+C6T ?Q//X~G?aWmԗzhԗzh ,? ͣ|_U+C6TjK=_4jK=_4rf>/*X~G?%}?%}9 ¿3hG,? ͣ|_UڒWڒWp_f>/*IFIF@ ?Q ¿3hGGG \?aWm_R_ѣR_ѣ.+C6T ?Q//X~G?aWmԗzhԗzh ,? ͣ|_U+C6TjK=_4jK=_4rf>/*X~G?%}?%}9 ¿3hG,? ͣ|_UڒWڒWp_f>/*IFIF@ ?Q ¿3hGGG \?aWm_R_ѣR_ѣ.+C6T ?Q//X~G?aWmԗzhԗzh ,? ͣ|_U+C6TjK=_4jK=_4rf>/*X~G?%}~)ҠBEG \_Zw-bm5:"krSIڒWaieVdf71#*>GzN6 ~qG?4?`қO(ߡػ كHgJayҙh5\ϭ^!5Րr'pGҿr+km[T>zgz/y~,׿:ҼZK|;4ķw6w%cmh\ F 5ۑϺ×݅=r];F6$:`'A#[_FI_IgšotC6ԺŃwBYDWcۭ`m\~*:W %j?7_4 ;]Gnoqkv KdH 4w+`8|wz_OCU$>GA70ظFJU&>>.Y#FeU2@<#c~xJS[<;"Q?N0XY8 L~E 9a>kcj6PNI$qId)@I~[_F\x;7pIn42I#RԌAv5>_W? ^:| (~jv dD=vOnUĿi33q~Lg[{iO32]2D\mjN8Zx|tK]|?_Mu?jŅ́yb'*>,# ˞m;HJG \FJ$lg}oώIEM>:W %j.cƒ|,ңemy =J`F֍ P}uἵj] aXEF)ܭx|tK-oҿi/#Qth>|;m|3xt8.l /{p%‘#DZ $X/rZ/|-%gKZKs5R)tvB.D1# EM>:W %j?7_4 &>]< xVYmϒ_I*IaxU/٣mc?XiD uu,IouhY2i\ Qd5G"&+5ej WK5/ xoPԴw.YjLeJ ,Co2۪sN~ie>!w>kgP-oҿi/#QJO֡[_FoώId&gG=ZoώIEM>:W %j9XljEM>:W %j?7_4Abo{}7_4[_F֡[_FoώId&gG=ZoώIEM>:W %j9XljEM>:W %j?7_4Abo{}7_4[_F֡[_FoώId&gG=ZoώIEM>:W %j9XljEM>:W %j?7_4Abo{}7_4[_F֡[_FoώId&gG=ZoώIEM>:W %j9XljEM>:W %j?7_4Abo{}7_4[_F֡[_FoώId&gG=ZoώIEM>:W %j9XljEM>:W %j?7_4Abo{}7_4[_F֡[_FoώId&gG=ZoώIEM>:W %j9XljEM>:W %j?7_4Abo{}7_4[_F֡[_FoώId&gX,Η?e?EM>:W %jxڝC]*->)N|VLǷ}ld~Pik6iƱZz-n2\ nۀ ȒzV |7 h}a ;Q~$I,ij3bI&oEM>:W %jX|^X Gv:SU1bG~W/AC_TQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWO`Dz)jm?^JnhfQ)_ٛHJe>4q11_?\bG~PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_Q^~6h/A75)_Q1z'z)DoZ)߳O?E|mMx9R>).z((((((((((((((((((((((((((((((((((((((/z/+3_QE!Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@~yC/75_P/Mz$[ÿ2K7_ÿ2@|P?r[s]~;Or[a{@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@~{B/75_P飇.ȑ?3>n}hпf")o*MWÏC9&Z(?ɟ^-zωR|Ya{@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@~~@q|idX#3: }sӞ@ %E~Mz#Ms2O|KE3rχ|KE|5?xZG=~_QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWy~3hm3!E= ~W:Ic͢)~m4|Qi}h͆CWæ]aNv?Z(߉QWak_\o]׺(((((((((((((((((((((((((((((((((((((+ +GFs_Uͣ(vm<>p?hF|KE'$o@%|L?-w^a ]ת(((((((((((((((((((((((((((((((((((((+ %F?Qs_U͢(v9x҉hv9x҉h%\oZG=~GĿ(*jw(((((((((((((((((((((((((((((((((((((?ࠇtoC5_P_,7!ҋgS~?I9DPx·9޿"~%)b_9ڀ ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( fѿ\%~}AhJ.hx{?Z(5x҉h~%)jtȿQ~ x{?Z(??QR%?_U'J/+u\(((((((((((((((((((((((((((((((((((((-!h.. }_A&'~&Jgo#(OHJ%>R%?_U'J/+u\(((((((((((((((((((((((((((((((((((((('mC5_P_,7!ҋgO#~(?g?#^(GNb·_9ҿ"$7yju((((((((((((((((+ռEyo3MxynLF̨Tvf%pytW3?5hoȵVbQ\׈oEk ѿk7"f:j+oȴmxz7 fZ,MEs?^#^Y/FE\騮jk:k3 W8*ᢌg#=-N +Y6PX:z\(yY p7?G@-;0:j+oȴmxz7 fZvbQ\׈oEk ѿk7"f:j+oȴmxz7 fZ,MEs?^#^Yo^mv 5.xO1V[ru# p@"Ed\}A//.ZK60$ oȴY:j+oȴmxz7 fZvbQ\׈oEk ѿk7"f:j+oȴmxz7 fZ,MEs?^#^Yj^.4K<ۯ9dU}Ux6N7 qUξ+6.}giֳ$SO{x#" ] 'tW3?5hoȵVbQ\׈oEk ѿk7"f:j+oȴmxz7 fZ,MEs?^#^Y/FE\ %F?Qs_q%mnݮaY8!<>fѿ\Ұs5x҉hs5x҉hUa[_.?-w^((((((((((((((((6O/:mʸ=v_+ڑӬeTw4U]*[ۨla]O<cZ>)Ht[9gҥi{KY[ucX{Vĝo)xk5ídPKwfm 8\m9ͷ#>s~>|%૴/_^xoSjcrUTΥH$ <kKmS3x,navDHr[GFѽW*riGU ޏic>諢h$/俞X;xmXce4vWsDZ8QcCmg\}ZesjS{c+V/>?:j~!n\k]B[y6Y'UxN#bYVЀ_3/\Wy^ly,I.+k)nRxVg4![蔭O֫bN7?]i-dJjFzjN--ngPGѭ.[p,X O)1垙oaؼzwl:<A\,[>\uTt=R}2zn~6.wv c#EH va^A׼4N-9u ONo/n.&Uf IٌQ-i+Z,qJ(a0ϖ[ [z|.s}e#8UaH@a4#e嘰'O4o>Ӽ7?OCyjXIMvix xI-/uo]P-L,նx`jR'}=mlj2el Od^ix\\ʲbcX >Yz~[__W:vyO}+죚hX-wBWOE=ĺKkKϱ!<馘G#*)%QiTc#wu|@u_xN[ẲkVg'#F`|5$۾m=Ls:盍I}bfM#!" N*BKwo=֙^Otk6ءrSr >n>FŸgxjDImi"ᙝdRQd2!v?kί}cx=`xn'w}GU͗}G-_%j3.:6Z>5Ynuwh#dϘmm6Sk2إ'ORMSQЁlt"CQ 28UyŞ]GZӵ/1 iML.&XT ?åjO/47ڤ-W@Z)%KeEn*ɶ"6IcOyoW,K(t{kW{ 7 m܌}t<ψzwyk/(7mE}KAm|yͣ(eHg?#^(?gO#^($L ]x9x/ÿxm}9E|w@o-|<7TW̿/?7TW̟O?Ox7ü o+?x/ÿxmoy7ӔW_?? <O~x7ÿxm}9E|w@o-|;7ӴW_c`'[?G<|O~>a:/?)?_ ~([oH:7W_o?Qv }Qr^#V8{kqWOa04z>yoۃ04zۣiG[.uVz /?noQyƩ᥼0F~ëߘ?ߘ_~ 'ۛ|_^>RKxc|5o[ߘx_CnoQyƨsϞ5Hi p_ro\5K ?>Q=WjowX1a*?_v<7BЭ?hEezY-\n Fw<qQ?7[ 9ӵy!}bD_ڴ*N⹳EM6U-%^4ee;r=EYsϞ5\֡kxNM?]r.cϝYz؅JGmTԗ2>Q=Wj|4S04zcsϞ5Gۛ|_^?᷼ @4zoχ3I##y=Wj7(U m/<O~f= >z /?u ukimV N(z /?yz /?y|9GEχ?GE,z7ۛ|_^񪥭w}Kuw [Ʋi.6HT z\/<;|QG<7|QG3 Pיk% 7 \5EV*n+9/?) 䊔3ѾQ=Wj m_GEW;EsϞ5Gۛ|_^ tHF?E2(oëQ)b:-?bf=>z /?noQyƫ]ko9o&ѼMk[?G3 ۛ|_^>W~ o;7ǫ* };l% $*8# %F?Qs^w@o-j/Z/߈~_Z[2jH]e1"A⥻HׇJ%u9x҉hWN'uˏYk:F}qwQ_hF .`T-;㎙9 9)(Ꮏngn<)(;)E:v?۩qۨ?)(8?73P?c?ognSI qSS?uP qSS?u8LQ@o?u/gnCgfOcOۨ_cO?ۨ?c|c*p3wS?uPJG2on4d $cQE!r?cQ?f\ۇm'줯meDza@r0T6)4WVgMgNkxeׄ?{x/tQ^d$3_n"%1_ETWbʊ)eWթvKTB_X?_~c, gT1/QEX?_S'+/ʏV\cK TQGV?a)~bKTQGV?b o%+F 7[%:(OKF_ꎣ:{|Cp~y'|(9n1,-7xlcNc?pEY-XOsn2lc_ّ& }A~m`7r 9'3QE7LE?73R?73QE7??pgn?3S?uƟ83QEƟ83RE?83REG1)(GL?ۨc,K gSS?uP[خmwGݟEiY|A8D֊(vTy{LMқy$NF?-PcCS?u/1)(9) V6.M٬I3 1Ɗ(^Ӽ3Abh4:ܹ,y&( endstream endobj 56 0 obj <> stream xұ @@ozy(`/ 89h5"qY2e:eb99єk%^/ endstream endobj 57 0 obj 298 endobj 59 0 obj <> stream xWjA+øz 9$_]1BZ߫=(v2*Ro՗<cw =o I]_ h0C9O.='|]9I&.EHi|=ec!Z:]"''Z2Dܡuӓ#$/@SvjSKrz@-Nn 9q4]b6qj O SFs!}߬6e )tMw(>MfF[;3D"DȌ|Gq/zìVU•w襣wkG(҇@ˌZhXέ&!aϼ6|dF+]KdT|ωCh4EIRrj MQ˵*p+Ƚv`ۆ44&uhy}tS-Zo^ ۼFĠ:8H3~t=IF wuh{>n{9^p wt3%h7b[&ũMn*E.M\pz~Ȝ%t+zє'"6rNex9G;9hXl, CB3BU]w5٭|-D,X2 Ek҈,/ytr_(vf@,ͨ lo/e XW;92+DemjH|>af6V\?iU"[Y 628 <=Pc``z> stream x|E4ABb@J(ҒP%b Х*E@@CG_D (łtD^n'7]#}y>annwvfwo;{7'N8!CFFO?KB(*gϞŋ-[\31u鲥J G'XdBC/YK.;Nĺd:,X*6).aD"QrRZ-DC/^?=xPDX cF}?Vqv>믝;wFEE|jfq)beZt VZv l&i {nVv feX zjϗ{28Y YwUEUMUR[7RfjXu@L֛iejF7Xր] 'X; K)@8`/Y<y4AڭWS%VRJbڵΞ=}ŋooY?jUy(qų_8{ Uf+ӦMVoզ = P+}(ھ)uT=\>nߠ~#JYbccUaLx9JN0K*꥾!^BJ2{vK&k/G<ꊊ3|)4$TClR̶jlgE`բp@ST*37m(\TL3c$Ĥĸ{$sIR*ceO3VU 3ihX[LN䡷hұr-X/yQ째VxEɔTys9b̞=MT拳)Νctpi/VYfߟ˂ҳ/e¬f)AڧU%-^+t3J*ż;rs]N=TN k78=?$2vؑҗ.]VJ0%"##믿R3x6??g}gN;@QEUf7NۯO'$&Օ+W'ĉp*>w{JR~2tTR 6D,BGam7mǟ;wn˛BJum·gΜ7~Xw5DbFݽ'[UՇՓbU/Uϧ+'KIT ] Vo.*eRߓ:dU,4*:sD''vjںY%V*j{.*ck3kc1cƾoӧK&cAKd4%s3gδ#&p*s6b%>?yIȰh7,(M`A54+aOO*T%3.s+QN,X!wH~.|fVSm+2r;]… IIIZU۷z裏SĖ-[z kN+efc5itQJg 3y$ȑ#)µusMN&:+(`e˗Qbݺu\TaÇu^[$ɭ[qZ잗q&'vK[͸RKZ:uD2Oťk3buyZU{XU~si7wB3%ǽT>څq˰lOV'u~lɤ[YhE/VCo}X#&;ǔSk)SLּ˃ 5,GZT2DLӁ-j_:i$yH8uԯ+L4$%_NcԧbʧXOw:}zދ/?~?Ά[[AQ{bڅ^~i۶ի)MLLL4+u(ѣG=3&6&OKdh6Y\\AN""hظX> č|zkJP6S[dI'H;vdnqq=Г%=Sb Yq9zՓUԫJ%Kk.gQ)L#)@*:Ru*l]ZUsWu/UW=n*E*bez:*ŸX[^2%Vbfq I#F =El=XZ!En 1z1|p.ٝPPyK],e|q5;{PTtQ8ӯ_?ܡcDEE"Gd%g+dBx"'yƍ~/_v7my6 ŗ:++sǟI ]RCo^~!!!).pK7eժ';n,usx6͂ (wذa9pd(}tP֛x^6#$rFNU0]f k&*8,XR{VM.V''UUjs&AgU%rRR>x`K:U:..V-\|yg͟gk~/[=ׂ1kg=5E"mAhCt"ږXn[i`q2Z,hזlSaC yXߝ#GPbܸq/[nĢEV3b%J<Xكǎ5_1K9u~5gYI}sE y&/'D(lٲ9sRbt¦'V3W^3{s WV= nD6v+L٘J{3_-5~W+J YKUbUܪޫu^Y&DLaWfR+fE۟9mԿ`ؓX 2[]$qu*ztKFAPQnjk9žLvv';wM-UG wy`LBvj"9@".]R졤DUX^L>[׮]xG<9rPǧ2ZO]uԨQ'gRu߾}OO㼼+W鱶Pk'x=NLJصkץKofĈI'R2a@&N`%Li+2]o&~Wl-q+bgjX:V?Z,kr W=4y]o4>i]׫l,nzO+z Q$=i f6,EXL`7MBv5޶mB=z7=$LѶ^*yCK@mo8f?A6|gwOFϞ4{tBXG>=Ҟ BPiAvy`b1bxzO 9izFJz츱bm*B.{ż=֏??4wf^m)//qTϧ]~)?>&I]E9Pԯc{>,J;K>Z AM?Ѣy[G866 qqqqCþJiُbs`б,Od&Sҧ;2*Rz (ϋd?.zs^\C3v=_sZtQ#TvsYmV2˾&\6hظѣ)^3QOzڤXiʉ $1(bz³xVQG5jD/Ob3cmK{uRUSGx^_s ֪ލmN}$*.vj/+?Q~5ZW_۟ҏ7ߤiU[*?(ċX-鮜)j*QnL[3Xev jU.V]\5.jܒhh8%헖CZnCDZ$ΦMH̪A7nģ5ٴiSB+N]cX]cX=;;fJk#((kp @K/_uӸIsX'V.,äXU_K߬%Kyg4?*1XIW^O=s?^+W(}TJg0XG5Xy݇b/[xUlÿI&jRCw\Udzb-GXۓT.y> ҫ0QqY+= Gbm+NcOolѢyiUbe5!Y((= kȰ-[ǽ U=벋Z(b-ɭlzc jΏ p:j%U\>,qՓo{Cѫn`y`ǪTuڠ>N5}-T?}Xo^#r>,V'ߤR׃11q9-`sdo}]To۽Ӂ[bnh]?zĬJUaU4o=7# R.F 4|^ >XR<ԭQ0~zM|v*5k֢yV!a!:7| "V[LJ#[*sUŪ+hU h ζ5k >/uM3ꉵstX?]]'j<̴X/\9j⛙3@buZjUBTOyJ쒑{uH"V Xn5}XbT@h{v;G[<Ѳy'ḨAu_ҡ@: [˯_ͺ5) _??Iv6Oz u퐣[5o24Mr%:'j|jΧ^JVHXUP> /zni}?Ū=%u}FzbB D+/sJW?+~*XFQi?"F[XGzB鉕[PJAc$zʭ=v2kźȲe˖.]\r׷d> é^zĉ;v숊޲X֊ԩuV֛o٤I{ {TӋ:u*+޽/,YӧO?3?^ZS˶u]4Ann1XQTB```*Uʔ)SRכvmwÇ]vQN@@fi[mMgNiiiGYv-k֬" 6?~|۶m:ts3f iFmsX*D~-W,e˖^K/w^ٵ:u޽,R&'Rz."B-bneq$8^u0 V.7>tЙ3gܝe<^Tڣ>J{Og0VXEDҷMvw[N: [ohтDL"cr-,r=_&&q*رc]4ʡÇo/h:th)'(=n8miٲ% LM[f MөS'#^zRṹ<_PZ*5{XO>ϟVIg'O.H"/2t+y='^=Y,Xrl6… )A'NP~p %̋U*K)Sڵk,}UX38sLͿ[';EDD_[.22R:/ՙ riw}Yn/%%e|(.]&cי?:e۲e,+Iq,})_J=Vi"W\{p>#UR|^Rv^rv:s3f9rD>7nضm[J *,kv}UǪM8J*IJJCMA@=z,[̸.:k֬ݻ9={={vޱcJ/_[l2e  ĪL-hyw!iРv^ gggWP|̼ >~ԩSك۴i߸qc:uh]n߾dK(Ÿ4ͭYe&D̤*֯_:x3g?~<""bȐ! yvQ̭Lז(M67QF!uΜ9+V,[ljjs,)pK:ڰaC_!<+ʿnCbjFj׮Mb X@,kvH #j*M?yr7ޘ:uj (T_o@pq.]!0}ƌ$ S..]DGKKSzzϟk(uG:rss)`m>wy]wuԉۧEqK\^p!==-qҟ1&&a4Md&V-`.>H5Gf =JoMUKX" *)Rby?a"""h'NPiz&^bŽޛg ..tĈp:jc޼zgať,Q-/Q:l:ѯ_3gZr;_i%/Y-.]҃ 2j|)zH$gҶ֭"aܥR IRTC:UAo@i~]T%Kkjn0[Q#GfۣkR }X\\%,+SFCg=UXΐUTXUVUMO1g\\(1Do^tz0E (Η(>kٲUUUgqWjtڕ;wciTT]ovVK|"4#uXZoHqWޥXi. QXUtz&6ҹ5LjF=J&U|mڴa}Rq=HDi%KdUbMLL{䃿Ti=t7`޼zNlrq".Q:l:hgʏUM}Zj;w|Ԅ *Gaurܹu$AfC^-"ݠ]U2T zҗzM\Ɵ =J&E5cADyvR5$$)brJr{Fb=.؅iઅ#: 7נzӫ)W-]% BPUygiUM?OO MiW5iӦg޸q?-q7nJ$:%`SN5tcHzZvU/l,Vx%%(&EJ}O>D[%,鱲[qW~yGC wv?tPҴt@pBNGwFt$\.+O3LAJ[-aӥSJzu꫒U{nU=w):OyrQwt˧"a܍m~PPĉɭ$OUMA@K}]TpFFzM6\lEQQQ#FPͨGiפ8W=-umMD̪|,9J:4i… ={%vziZ: j/^LOOgϠ &sϕ-[V{Hԛ^5LAJ[-aӥSjJ)SrAeUzl/R칸^Uzi>nhQFTE|RmZZ["yXz5Xsgtw.>-z{vMrK~;b }BHZK/&{o+77f͚֖Yl;uX%V#:gΜ9~xDDWb@w^R=ĪSs̩XbٲeSSSϝ;WQ VD* bXcbP%nXZbG#ܭ/7jl#1/b_L-L.@ҢTPH5(x&VJ<+: t^k(X%<+:7m) tp tN ;;v숌.:OYlřB _gX"VU=+:`stNڥQ^ڨQ#6Tfz >dYar JLĊ9蜥@iii/uHgFqm}< &x k/xT0:`s[h͛7׭[zm!z&xk{\\ @",_|ܹz#js4_;Y=V _gxI\ @b1йU:߱cG:uH۱A)uSm}iv,r;/X"VK-X1йXm tnEnΩꫯwIMڋ.w,[bXE<\G.MNH#!V b@$tPp!VʇXL̋5B@-yPg VY522ҥX;w({)X (x V`T Q[_ob՚)x9FoKV&VU "V t& as%)=͒)^ƒDjJJGΞ[:/h0|b>tkU V tn\R\:.V>m,FAi=Vi=M̏br bb2%(֛VT蜃Y-4йtYYYSLaS[vp=0d9[b>i&V'*VL蜃Y\D*z7n.d\ #RUb@ t.-\K/ݸqN:l4cUx,R7ĊE09ϿU:[g}ּys:s`jSz\8,qR0׫b@b1й : Ꮸy V= Cx VNb@b1й J ժUc74W!(Rvktmq'+VSf͚պukƲ^zʧ.+grZ+V t@,}+tNT\~3Hۮ7 O*ojweX :2iϖ-[\ȠW<z蜃Υr|vsx`=KnݺO?}ĉK.[@AFTܸ0й tNBWDsvv6emicbb,(ivRLr Z̋5..^֊s09˿U:l ,4|r J~'h]Qi x&kdb@ tҷ@tC}j ?niAQEJ=L;Qv<'@cXbTX19K@):Y\zu-馑_c5(C;iskx>5A`s tNЪ[~u:4ڵkJ,Bm9O"wĊjcs-)n6lؐ U V;=V +(~Ȑ^b{@s)8^O2 V%Īu+ xI11n? ʭ+ b^ Xcd@J +=VpgXibb"f_ե`pʌI>%ɲ+.yUoJJJRRY5** X.S4,,I&AAA͛7oժ k۶mI!!!WMOOӧ +OҲKV%vbD̋uE%l6]D=BJ ڳgO2)I3QA 3)!( b^III̧B@;b%{LTbu(59ʔ~Ij@ K!bՎ(c%_ X)n{XcZbP2q뷂UX/6bn5&&&***99Y%V^*pWRgE,rܺdʭj=Vfׯ=zt޼y˗/|q@_꺒X/Iībz ܿ?Kz!~ᇩcKg4ӧYpʧ~q9UTXUV5.byiӦE͛7 ܹsGc#IQ(]4Mvm?<::۲e\˝;wn{e~yzS5]ҢbMMM.Mڱc:艕+uE#GZqƍm۶UTIZKRsӦMgϞrSgiKkZZZFFF>}zխ[77zu꫒U{n֔)S"""se˖>,|hիW7o+… ={%q+ %C5AA +*S*%X[!V%ʯ3u2&ȀX@X*Y5I?$bPbq`&֔&''K (x0 3,sX/ b^L챥VZ1&ʸ;_5&''k}|KP+N'NXK*̋5::cǎ!!!-[l޼ypp0VOn} šXR7VSxcǎ]vxiqzpYK~yRof0Dtw/ Y5#G*VHG  @֥XӅX[okٙb, pĪtXz5捅J$?#{?~!/=VRU;y4Uǩ >}>-##ҥKu/\Ns=CTQԥ5:у`ɓ'S+UoL:B ~7P(WN /nܸ&dɗ.brKn2ƙ3gW~g:tVݯPw5** MF?/ 8믿jKoϏ9rjAzaÆQoWhAC:ʹ"#F`U:qDNJk1c(Db,mlYYYSLaun TKi:\ӡ`%,WXqfggt+.ToM,q>tZ/QɈ~͜9SUUq^]|FN:E~VüX(!Q=Vz\G#}wtnZAjժXJ4Kk.B%IKjj ͮm`vj&b<33sƍ2iW^/WZE']+tP. v*N`f[pj"&wHD&ZlyuUUŅzuA9uc0/Vr%Y5---===##Γ)aXK.> XQKK4fe<\. ꠪˒Zmjfv4o|Νt]PxxԱ-W2,W6VPhrp9=3gΜ1cFjjv".Qo.{ f nE=iXGٮ];H.ѣ[F?7+@QQQ#FP4qD:nЁ:n<СdPsÇ*[Z.KkرcTchݺuHH<}O ֶZriicU [z+Joz{ fAMtIT-{ fǭK$GX+Vd[ L2wԨQz?ؽ{wTؽ{wFhATEx>Fk֏˃"TtVSzu]B˓XjvC7onxesxˣIV4\iZXBVފ^ozI=6hn2锪zoAy>v3ghk Sb- kܚ5k_fɒ%qP-&L`aWT -ڥB}3B;~y ܢ@^??~<""«?P={zO2b >#dZZZ//%%'R (VfOŗ?E3THN=VJV7k  `Rݻw &%VSXX+VJ If(X+V-=V@äX{)0l, V@Iۗڭ[7S+>̺uj׮}w 6/ݻ)~׋CLu={$cB2oVRz .nwޡ/^|J9˗/ -P 1)֬ .ڥK"}$Pzر#JΝRʮ]GLu +>KI/^4J9K,iРرc]ԕxbRKMMXqJ.M2qFreʔ?r+Ǻyf-[Ȱ]W% b{ϟt TtmڻK0)t>r^gaXsss)M=V^JKzwMu(kRRXm), V|m۶LHn۾}8A֭WXA w]CLisfڵ ׯzWׯSz׮]o,Xo2R0 |5Ib 0)V۬se*̋fX=_ NHH`c%X^'4$OWPPU%b%[aUŃ"KK/XyVTbn&㗗T\@b,b,˔}b * \ ,b,b,b,@ VC"%KQ[[Xvh1ӦMTvIۛ$@+VgX/gV-z#j VҨ6W @ ᣿_uh>٧7ZmXbZs_Z⻃̘/UI=~T-6Yujb+C'_7KW/3"UXqDl,h~WO)wW6[* V<Z:t~2i"*_$gbW*X[& UO1RJy6cMŷq܊x[{|X}jb^+ >G᧣ވR㎠&Mgxtf&LX`*ǃBڽ|eXx=k>5zynr]ݺ^]F3_vtwͰ@!z#:z؀)v&nu󥘓n!#/)4ݒ_ym @QAz8jҾEGOwv۽{X>fg]|oqB^cCU7~Ɋ=h,4xɹs=~%)q_}Ӧ=?yU| e.Y죏æ.[b/)v^WCIVZoXo&Xr hѻ4͔ӍRI=3_rxgz_ ##ު j> @Q_%tJ:,Z|%{fqL7'; s(׷F9| 7o~%+WwkjFIZnC{6!іIU+EzWg$[J e oљK˔Dʕ?3GUt.¬XS/|eʔvӈ{^{{U//*VZo.b/GHLJ^X Kc6k^nZPP{; vm,Yrj y} p53fq̉ؼyyr& +W]Ѽyf͚A2XAPW7.Xp=9_hvjsToi_7چS6%+ 4AΟ~KW5JqPtiB4bZ=[AkֽdJ+ۯ?'рw͝w=Ti>+:߮|J*Bv5j 1ʭJ)|DJ(G9?:sϘ9C -~;w?IYmcKa{{k׮=/4_}U9iXleŊAi]Jgd:>c6_oktoԇ}jfUk 5bϡ#'q}WK Xbמ}F^/XwsH>Ý-[׎}'==C,Z!W쫯1gNd|ꫯowoR&'ge~OɒΝ?|#eN2ԩSgͶ?/_r*p>tJzQ͏;_ݿhɊAi>ǃox|hywv'$3ܫ%۳ b~oEx*Uf3^)CdoVLzI,~t2+W=ӑ*t|z,/%>?;zjɥ5ge}p"C/ٳ'NH[pч~r}Ԋf͚?B :u*(]M۩3?xW/G6 sG;eRbUO< :uڿZƔ31ܫ%ɧكWb8 溻*X[ŚO8йM HaVA/4Fŗ.\sNBW6UE0|&"o,VVo@{֌Y"jQ5ÚO"UBw)V /vϔYjQ5.|>?r˽/L/UI=+ [-5I g|c,h~QWokmK:!V;m/vm,E^U4HJS/+lUPb2ebe/!V>?|o_4 _U-zxG/kXUpYv5^)J۵פYh~4ȫ{UuaRnJǟ>ZzL6SUFPu&+׫ U4gn-~Hb%̬Cb^wO+`!bb\b^8E]_`BLՏ5f I$mP_Z Lj7yBޝC]XGW,M ..P2yT&"%gq*F5$wuҥ{0`T诐頟B_> {гgό=z+)t-%%%99k׮iO>5`Pff.z?oA\沘~9Q9WtTNS9OH^;de":r葫H|Śk)FMƘuI,ƮbC`x%{<6dSXLUSSb&{(mB1y}DL/كfknF{<(fd/udž.<ݐbx:<ŏ\7rm܈5l>:~c5\8lUU CV% ^?xU̐tΉ^0('e˓$f.<`iQzegO&+(v}ʧvIhWa <}~ρQvK -EYGao~Uq+|3?DLAxo+^R~DDT;v87icJnĚAozC(X՟C}XܭU'VZ: ҁL(w+!u+ IԔ|ӻw0wОSDeNe/M4)3s91Y9qA+bs ]3L+JUj#Z3N ABp޴φd%lb0`Jujs&Z|i=4/bj~0sc֭XU+3ױ[œ[GMxz EEXW'_0luqX#DH>"~2O ^b|>1}d\Č'gK{~EN՘UXUTnU[loյkagsvL㤥^2b5J\-RbE6hddTxxvGEp Gohp6bukQr?}? ExIEnbXťvA:eee1rrf:#[^[L:16-1%&_~ٽz x2u@R()ً,Nk9Q}rf^C]!+㇮(# Hzzu2Ũ56IcaFu騎S[5YTU'9B(|-jCn4^ba:EWE6ݪ+YU+ Xiu%Z"V CblwkЕ1rbPw5NL>kUt [)#Rl}32Hteߝ :N[|JZZrrKQfjj{:L{bբ=ЭzѪРgiG2~V!:ƥ:vLbԩrd:Vv*GdzX݅[!VwŪ<[be<-N[~tcnU!u+2kb5--+wFw:pC2'=+%ܚ*ONt&Xɪx5b*:泰 _m:b.$䋵(ETu6 ޿M )l_bvM7`*'7/ǴWf,AOmFW'tC7ݪf+>bpe7'wx>&aĚaJ_]]KSVʉs_1kE|ىiclzW֠}{Rmc%9`UfUBW*u˱Ahǣ݉P[SzlOu2]Xpԧ6*k*߼X`K R_RZT*mz6[ ezp)]ȧbMiH. ]jD*/=-3b6䛋rHG ̧ XcLT5Np>zkb `5N/Ÿ d3Ln8*Wȟkrc2~H)m VY褔[wˇ.y'ceT- /U{k41UL}}"' 'T#U)|le>2MiD`>uyUU/JU0n>8=V:qd:nd/E} dgZfCIT -XHEZ*Q" |Zb Ȋ.s:x.3U;j9X B#}leĄ_'צ,`Er"[BY.`:U猹</Pmpl!,> stream xұ @@ozy(`/ 89h5"qY2e:eb99єk%^/ endstream endobj 64 0 obj 298 endobj 66 0 obj <> stream xYˮ7 ߯uH; p~@(ɦ_R"%70É{1/nJ_?>LfLbt&ɀAc7Di's57s7&/Qƕ\@{/ Xo/WpI+wA&#;X1ᱛ'.@!k}/Hf8<YHOm0ð aX;]_hC-v%& {ICMC 58fR邫ܢR,!dqQ= NIcItjzpBA(m' ^,m6FY`ۍbh۝Ӽ7Zb\pe]`T1 )+۪hB {5{ ?WNME_Wh9\6iF\x1<`!^#:,c5Ʋ>rDJNMr!DC`1#+B+- ;>m6|K8@6 6-ƬTYva*RscpV; \ m͎rn!tL5B1 `LWd;n@j#p_=!;wiRM] 7 y򽫄uWk^,*vHESٻHx ;UfmmN>mNAUnl7p0r~ !L?#'%ADKh(UPDVg=QҎy$ ڡ舒GPYLw43Ӧ,J@`kE5"S2U=xbv+,{}4]F^#]6D^#-G/q8#ǝS@yJ:5)jAg\ endstream endobj 67 0 obj 1709 endobj 69 0 obj <> stream xTS{9'=ֈJ`Ob/b(HQJUAblDE`E)I=ow`,=w/w|n]ףGykhhhll痔JJEEEFFFxUWWUEUY*|+ rTTmRQgZEL=*'7ŷ2TRGb_H3oLy(ul I:|{s>g.%yࠁxD/_%0n}eC]ݣƆwoB8dǶ}~"f uTמ:{00 XV,|2>&aլɓnX8Q߿)?"uvHVc011b=hTڙL9;;w;w%հ`0p5|gݻ&k}/ѽ۰}'j@ %KΝ;鸸8u 5<_3e1:+'ӎ&H?$pswbOOEjX0B7lx}\U^niL M}uqc ի3g 0UUUm߾:Qb [:5Vdbx޺"Ux,qtt rX噬\B8<Cǚ~.\&Ltr,100/cG6eee022;ĉhcB:T:a_ir괩ܽ|q -Vm~ׯ߽{WxL/s.:靱|agMc+ph]PUS߿… 54ՙZ^`muz{jcՅKkW3遥K<ňuvk$3eغ> Nb\KtS3әh"9`ie9h `=ݼgOsjw ^wsf)Iy -{$h"w >a,@M2VF{,?s|`/FZ_ʘ[Ͱ4qq~N2;qχEEcccUUr#<f wyX |iIII^zu4;;sp c̝c`9`[/ζXH[1Xchhm75CIZ}B%Z#Y[@ zFe>>́<&f",;Iu튙h/?f}}9s5˄;{++fcml:!։a?;k֬|Ԧ=Z4ǎ?B>7~p@c1Z |Nkee0h2eM|:Ama۷o_~f==] A]VQvCv]ʋdQV Qʯg0W**ʲÆ)pA ^[W UHӺ*Qgꢱ̙+L|0w0S$ݝx0O5W|0w.KOh 8ڲGO7x&iD; pR=}3VojK:luB*^by.#d)(Se+/zxp+ ڏx1ӚRv Sy%CmL*-1~ pnq -/r=KtpP JpezEuEl ʉ|O5VlC7Ӊ fK%.joLD0 HHHh8t;:^$$$8^EBBA|8t I:$|ƻ:^$$$fp$$)V\C6:^$$$GBb!XbVIYEqV_WqzqieGBBE-wZ4xnjjFwi>Sr/NG}"?,,Ljkx~QB7b3*?~ Wژ[TZYAcxCgAQjmm]GH>([p>aPqSL4 pqQ{ɅNײJ>(OʩN;):59g_|YPW)9չ% w ̷:ؑE{РA_jtt4_WWf͚^z}7{mU[nݻt rѢEp,Ҡjy KGVV6!!YYYpdggCr Ep.WWWP 5N :so?ϔ)Sz)$%K`LKm1]ss={vm۶m,L!ўNho0CLA xTpvp\;9^ˬR `&?{u^qx@1̪ca%q:,v&\ QKK ߰aäIbJ(xnyNmу 9  $v$zM{!W~{gŬC!Y;SıQL8Z>@&R%pbXׯ%HΝ[aeXRB֐ٜE96q sϡXii)K'0DaŲB Et]D{Xz)j͛:::06¾TuW^=fG}Snx;5 Tg`Ǝ3[%9Hq?w#0D Ϙa-/- 2w>ͽ]8lv`[w\\4iJzJ444`g n{իWŴ ˆ>{,!yxx|wس H{zzt. oGݺu× X`:( L!YZZb=6bkkKnf2D{:LbL3,{Ə2$v+봌OYLs\ʅ ~7p,*p ҁLQA6 5ID 阘Esqlx;trro2dU.+abB_h֍LOi#a.5338,L!ў6-S< ",* Np6 ܗ]w}=6MXq~yeO*_V>ڗh'a%nqګXvqqaR?/Ec, %&="Ԇ z>y{{p-x?˼{xםq{s޼}O|?=#t{ G][~I8T(Dܲ^3hxrvvaWTT +=sss1F$*))(L;z~n)r۳!%׭ѿ:ǀLqdz7m?eWG\UXyMaUH ABpݖ<-Õ"#D*bl5tudXZ+M+ kn+V^d}[ɺt7†Y4>{!,Y}$5;MwVb\+Ѫ1vvJkoc{Mc]}X(+!`n~S?GRHH"p 4B+lhhic,#PUlbhǍ\gqj߉̬o٫ :.bjMҚ(斑7w~ !Ip1~1wp֠!/vh;|o▄I[~tjozz$Lޚ?m7v#y`\mÝa!~(!!}, +*kԗi7 tw–) ӷ%=ik4l"t7݄|]ۓnKAM񀹎CCXɶAuDSgڲR`glKxxL8/^]3Zw{҂i^S~qMݑ?& Nn@BN#U5u;Y3u$@{4;̻XퟃTPBᲿ2~N_+^꛱|􆒪'9%Yŭ./(oLɭ2t7" ݭ1uZ두\8hpL5V3+d߃-rL}7{6;~=V2ܓFB:pPrfO&kdxV{hu(h  7:*t8os,P|KU&шn$ pMuG8EAqz/<RrLs`)}pxs@=HEB8vh[&.6Hu6ӑuQQ o7FD}u&ao!/c>Y g}Kt***36-q 1ln{'~ٖp-afۯO6,Rki;~ƆQ/^H]XQYʑ°%SGBB">Z \ Ix!!!IXZTc2HHhi8t$B#!IHHR,l>6%~LGB؅`>Sp]"'/ψqI]PPYVZa n(-0@j^y%pp-mM:OE% xcmAKR#\@yU}qi9a1\bB/*Y^X[rʺ svn!\bB* aփWБ#kx=|$gÇ8V\'ڂKUKLe{>p6+^|'K gȐ,g %&j: 6!%(@Q#cU:uNǎif`i^<2xoX[d#%&GKt wnI %)vSxƃlĄ3R{h1ه @QUzfz*ڒz? .1nU^Z YsJĄVjf=xcmAKRĭ}LOIP}{6\VN~ xϞ2D"!! ޯ_"!! l s n5D4எ I\^Q2磭.'7|wuHHH"1c( Xlح X]h6R>a[. ϚdMM qӝ- ڒԨE ^QJ .2f%&mp"J [EE+))bVVfɷeiCjxW0H"ELͤo;'`x7 dnh]opj,?ڛ6OM1´ZGaMGG> stream xЁ @Ao:| MX'{qt%^$^v Ԟ/ endstream endobj 72 0 obj 99 endobj 68 0 obj <> stream x `UŽQdBdNJ @;I `تU@% /V諭"(^ >hY"H{$3{snΝ}Ιsϗ_!Fg d Gu'N?OdB"+OQ b;炍&X81iޢYzu֫(Q䃍1MT莞81"ظ.Nq3 q>z\bB ]B\gWbps]>9Y]?: Yp1;w[S9.ʢ +hҫXbb=N~'U'#yשv&pHRxP$'u?j+O6h Qfb޽2tH%wEZ($%‰tK'r&Y.јK3[)fQqdW^}^p-t^^uy/ !U"\Dt "7X}k'(<"|Kk_>\'׭q BB;u3ȫTUK!7qڵ˗.?{9?"VƘTUCZ4mب5,<&-jպUELɵE:a q~y%X_痰 |r"#UPq5P-,8z:V]RXq,pbMY/vZTF5V7X]=lL4v$|fM6o>Bn }:Wj_$H~ZUUUo4jΗ ~WV:UV!|maAh՚ ^z-(Μ-ҮEuըW]Yc֬nסnz\R[Q#K._8>K3r$G?-رc}ǔn#fiI| &U,8q%2Znm6ȶi=0j[m˯"O #>B2 UU~0U%VVs.+׉'hP7*UQշSX ?aUz Z\'^0Cz |7ùd=3Ǡg 5zd}e*4Wح"S5)҉n ԖB_\r­+(R/˗(:H3MYK,nɒ+PəM Ú) XqYe^ˮeK[uPF *B FsUX^?}:s~tiۦMSzUroXZXh!jj/={ݻ7*?U$V{z\Њ^\0>Z~=n?ԲET(ت $''B'K ސxQ[ZJUV5]Ptrb{Ἑ2֤AaHb 7c:YݢmJIټBmU .rWg)+J\5wjQZɫAXs&娊bb39pЀnP Y# [aƨON*jڪXkU.]a NWtAAғ :cm /9zE/?F 뒥K^dRE9zX:D0gl 鏈."^x#'#½BOȢy~-|a!NE *n! Ks~n.SF ѪqFv8^ cšm纑bŊ}gn]p mꎝ;80id;a௰PHa5sSG5FX_ vfKXm`jua5CUEO,dVUUWDE lOpPU,޽z)lRp|>55a:-V_jYa5RXG6^jeN| 0:!^=9a?[:D0g +4pw<-* Q`ƊKR[啨"t맟'Wb 靳^L{V=z0Kjg֬Y6l0_Wc< Dth~ax*9n8x ͪ >5G<?. : ڴT%*Ԙ!̞=N{n+cl1i0eQR/9ad:Ju&>5׷;u]T1:auZzOU):[I@^R!Reed1 lضP[EAJ]XŽW a]lܹsΛ[Wܼyp̙;D4dҸqAExGi_3:Y^`,CU̙ 7ۉ✝ dY̚epQ/U:qUY/{,_|'| n]=ԗG羿pְyIKbb/?ҧˆge Aw(ǻ.sNѝD4X~!13ݻ!Z7O c6zn=扶2*{ӧФ]7='W,Sšo]}VY|}")'kuI:[ڪZ>M*VN@-o;m}3;UU5^ýT\VqUd+D&%+4Ȇ$֢_*UyɁ7[ka:mj},݀nذӧM:E ĉ>E^ 뭍>MztEm9QZ|ĥW$tI,[yo㧌ڟNڍհV?Mf5gj}qR h|Dtc %uR7 }jFc4jr ~gZ(v; x5NK[Iu&A[-%^[ɨSa-*jj6ȧ?tCFt4<Vk獉LPI'zg&y/t'Mnx#~wcB ~krSN |η~}hQe]mگ^?zޯ,|WXYC=Ÿ"Ŋp[aQ`5Zx0&i֯_>(Ġ|pcS8p`J-T%& m5]u5,+hjU8Zנ Y_]L^p5+VaqZ{v[X%U>&/c j=gBi?UkT ^mQ Ή}㥾ՠ!\ 6^.Zm3NHtYYW8xtqC&BXqONyqOڵ -A&]M~rݺQŊ$i n쉟-B,84pؿCX/^_. ~誅#WO}uS$r~UVu}/)n:8CmK4mTwNdgϞ=߿7nIuE_s*/,]ϼyf͙bJ9FB3she1!&7~x,B 8Ha5q$/CO=v+;wտ/xxF{z#>7zhw̙#G8XK-Znڴ)77ѣ#<ҽ{iOMEqM!/Bu:uꔂh/_&IH~;))iڵ?b 4k,SWUGcbKa+"v6l0Ndڨa IkqTٵݕd^m#OQ]UnWW^$ \B׵YAIL'k׮ H/tԥ`|R||.YjmCX b LXmW36G6|0-ݨѣypLš3G%!',M6!j5<6;; Sgf֘8'ׯX+,% >1:WbI?n_^*xԄ 0׻w#F@t}]I v>.ןWmi!qZU :f2ߒH\] $16>]լCGHjUm[iVVX;vةS"(Mɝ'Šv|AbDD ½Dƍޏ$>ئm[tVAaB?&u8u޺T? _B_x[+uV?B@?O^\#ʪكY]S>[~ڦmk6 _En'9V%5tɧt\ XXs-Ywޫ3AV0Oi[oGDqS#Bh ;(ihݺ &mӶvn֣m v)DKp8'텵B-7NuG'kp_nM/9̍)LSXN VT5޻OCNj٢n: ت͛V/|8k'/>m/mTUo8Vg]˴eGXV[TGZqidYVKo m ճ{JЭ,k1%f1WK!]TXmb)ulw(~(&>1>'r]zOCU&F: KX$HGR=/tlCێb\}ԨQ-[jѼef-6U\Vof-Zζnakvt9>)krRw _Tx?a5<4n\<<VKԩ颠ZtZt*Xca P^G `6oѬQhClUZzlBvE`_XP Y^99)Q[oA4=`?VKF]-#j`pը/[@zn&v󸄮;jL莝;1z깛ں5R,6*8iDXӰ&a6 m,,Exx[DD>" }(R14sǘ ]bxw*a?AuV\ڨjjQ pq\1 awZB!DO eS%B4^)BH`nY VXcy)BB?B }Mbhk\\iחB)BLa%B/KPX !0?H.r +!b]Vo(B!eOQX !B!.b#]%B4()BH`ySkn,a8B!$`!) h #Gzr뭷VREnL!.III_/?,B!e"Zuw,͛7lҶmJ*u]]ty7 U9ԬYs׿te'_;wJr-T\ɓjVB!>v)$K"\uذa+FW|~w[&''K&NZ\lԕWsǣV?l _UVmȐ!/VVșMGܹSϟԭ[y 9r$ꏏݻwǹs?c B!)1a*KHH_СCfΞ=o>]Y~%1JѣC-*hV9(XgΜ'N?8>~qq˖-Bۃ>;4N!fa Z~su]"߫j۝:uCķRte9Lb/. aB϶T3gDF2Wã2aі!Vp;w ea؉HD_&1ԩSBzȑ &UK>\{?TM"To0կ׿Pȑ#B!'6*~5"š Uꫯzʕ+d*X|-vɱc:$o'O\{/|'g|E%::iF~"N=W 6཭|ԩ`þ$_!UXNV:֡WLL };wޫ|77n,m:$U? '֮]bŊu֝1caWe[TVh׭ 2dyf a_I'8 0B_Jn oa0`@iWBnl8Xɍ‘#G7o zӦM]BbNXav}gvU&"RL(BPX !+JBH&I&&&v} !2M׮]LPX !@a%BIע +B!C^)BH`IX7o"!r]sK₰D+;B͂smUJ1Uj>!r駟BV +!Ba%B\J!+j ac-IaP"JP\6qgOɏQɔ+s#pݺyOak`TfauݿDDUu0Dκҝĸ8CLmVNVWY| !!!ݻw?zh1k$֭[[lyw[%+PzGTjRIXUV5k֤IB Jw_~9::P7C?:ujҥUVݷou(1a5ϟ3g̘1M6ݻkժ}˗/?~|Ĉ.Tt2NٴXYjU nVZIn֬ڵkwyg=+sﳲ}M>.]OZ#<9sTR[o]Z5w!"\zu5jԨTRFF7|c.~z(*#+i]6<z5|UtE-W-ܢxJ .?~G1tjek ?ußpQO7t#b6B)iH7Q}>}&߄.tTm͚5Q#G u3Jד2a`Y"!$a l:qaoq>߮];E7pĉѣGR 6me Kͅ &L0tPs{'b VKa*]F瓒_~eݧL"7n"Ksj+-ZfϞݭ['ObIZ=vXsSNի.nqߺu;w{aCؔnAJQ 'N3fY-/İjtիYr]wݵf?~ͨRtçi:sLŪ;D9>9.-\JI%: MfHQ=i~,wKXz]Xϝ;'}m&<hjl.!-Nw͙;,nݺ?veA֭4h}>uOѣK qB.L-UP䆺e%uiue˗+VJW)Qaۈ={DGGjg5ɏ?h0p OϞ=vm۶-_?j3M7".βpp6D7vsWXV9&زdG1 u3ʲ' &UDBŹ*[X)j%ǽ{١6m{,Mbצղ8umP 8PCy[oUmZJZU\xP%"&*lȤSNfAɷgXrjJaaa/^Z*PZ5, 6uu9|k.* X-? ~AWj$>M%ua-X '''33\%ZZL 5d¯=zO7t#"Pg}U@Ϟ=sᐧW^yŦDGdG^݌ Tتv2DW"!⊰vUW+XJʏ>|˗l"oai׋쑍7B222#'Oׯ/Xw١CsBI&;;Xᑭ9޼y)))ǏCsSLA`wFi3;{7[mA-3gδjiYh^^lU*,>,Yr-R8Oҥ9|쵟?6m̚5 4hωsÖ(bWȑ#.hEli.]^0aVݪU.Z(߄i.`k׮.6*wẼOa婛i1^cCTTr@'\D9Xa]|ÇG7,5[W%:JaB[+,ۨQ#C`DDJR)tK/&`rő zX-Z96O>ԟD 8p:JJNJݺumݺuÆ oa]xqCBB233/^X!NT'PXI˿PUjРAXX!B_&ݻw7 +lUjƍa6k֌J!⊰v5))I\nԨC=ԲeK +!rsa޽ m+[;RX !CX=HIU-V(iƍ#""6mڪUmĔr+!_*TGPتBU۷o߹s焄 +!r?=*^VQQQU`B)k&R[ U UjuQXm^.<[ŋSBVWyUڪBU`6/ ͛7רQcƍ)B!ViVԩU! ͋—/_o."B\X7XȷU֭jЧ~:D!sarlU!SaEayQɓ'srrGBcX*?YEaQS"##SB\VqW͋EOnҤhB!TpEXoGOX !MVB!7/[(Bw5H ! +!"ܰKB9m^ +X !@-VC{\Yxu( u.3χcDȍEz3P>`Xu;aqqqj?nN:&ԳBBBw~bI­[l; [nMV*]H51S-f͚5iҤ`P%#_6yyyNZtiժUzJLX̙33fhӦ51{Zjm߾Ǐ1b.&UMagժU 4[j%M~YfWk׮/z"-[Իwoy=zꫯ̙;,ʺ֖ۿ{6ؼ}Μ9UT[oeggWV ;vW^>}z5*U7ߘ JJZ5wM^vMD?Ct]mQĢEիw-%^rRzu… e>ϟ_#G lٲ}tuxx8r?G "fd)4݈gMP bj;)MT3O>81cn ?W^Mê}Pl3eq$j5kF'T)Š ~vډp,o'N=ڐJдiS,SXj.\0a„C3wXܓO>^Z +S4>݋Ǎ/=܃ -Dٳgc;y$cǎ5:uTd]VRV8[oݺΝ;EȽUlJD %(0OpMH86guرc[nРAؼ]beBXa En;d%uiue˗+VJW)Qaۈ={DGGjg5^ˮ8dx0cꦦvm۶-_?j3M7".β2 5эnꛎU pB8I0M5aՍ.&Q[';#ye]aqo݋rfnڴ2ݻcbb4@\gq[ n1+z[ն*Ke|Qʕa@0 ["b†L:ud|~*EͲaT]xjժhBj . 6uu9|k.* Xƍ4iR~}˱ э. sF}4CuDHiqc ڵk[nU8{߰aÅ 믿v`[W\R69݋-ۨ8rG8]OkSI]|z ,4okB  ߿sǴC׾z>O7t#"Pg}Ud@Ϟ=sW^y\b||ڵk,Y2rH] !ѷ s׮]>$Xᱼ@HI⺰J!>|˗l"oaio0D222#'Oׯ/Xw١CsBG͛rq:t1:e vd]>رqզɺt2sL{昖Vq-R8Oҥ9|쵟?6m̚5 4hωs(bW?ϑ1-[PZ}#F>RI։򵮶:?!nኰ %-a]~=y7kLn\;wnHHoVX~X<#X VR5k4%||]vdgg͛͜7}d.ҥKYYYT˴VC/b{Mu9ڄ  OUV]hQ \(׮];==]lTja9TmªS7t#b󇨨(N^rωs+ϱ0W?o!8-fэecN~%w>\nՖJsaMQV2K$77QFi+Rh^MhD8Z{eϟ?}4ZԟD 8Ja%e wU>` /^zHHHffŋK:XS'*5\V7J!sa`ݥٽpVB!,VUX=)B!^ * UVB!r!FԛBXJa%R^ `󒪭ڣ'\JO +!H`UUׅE³o߾u.^8=E!8J="Z ͋w5jظqcp{Bq_*T UT ͋—/_o>"B= ͋CCC~ v!] .aayQɓ'srrGBc k޽ի%)/ ?uTdddvvvp{Bq@ªi-aӧO7iD}g4!R*yIB!7  BQRJ!X⎰HIIB)& +!Ba%B\uaoB)+) eMXC{\Yxu( u.3χcDȍ[šb"a lq,nWp1C 5YWg3ԩ~jJ=] $${G-fMLdLs%&!7YUoauYfM4)9;)@tx嗣 u3s^^ީS.]Zj}^V9š3ڴinMlf(&fRWXx ³jժ ~Z&oݬY3⫵k+2-Z ;ѣW_}eaq}VVw}ϟ?_Po޳Es̩RJZzjժcիӧOQFJ222s?È#D%srrd%-Ӛ&CCC]&"~Z(bѢEջ[\A^:z`…2ׯ_ȑ#WY _lY߾}m:<<矣csssn3jfnD̳צ](1 5ѝ&n.1€i6e晦&4|f׬Ym9r$z2G,rf+VX[ϷkN7p8qbцTMbRs… & :Ԝ|IZ +|t/j7n"Ksj+-ZfϞݭ['OBV;\ԩS 9wYI]Zlu;w ¢QKW)݂>4)991&N(3f̂ U5Z_|aիWórʻk͚5?~xQO7t#b9{-]9sbՍn%>8<s~eSĐ||ڴi9R6 RTX m-;wN;x b 6/|֭ۜcǎYnݺAcv aS `=b.ԓԥ-Ζ/_.VXa(]ŦDa$J kgϞ輼uFr%YNQ`Sj;D9-KDVZc_\%ycccMf%}b!e*>SXJʏ{Ew_hhM,#޽;&& X1G}gxB1p@~cX[oUmZJZU\ L!xP%"&*lȤSNfAɷgXR,FeXXŋV&TV Æ E]]|nFrڴ˦J5t>u%B_k׮EFFI _{_#לIJ U}֭jղg6lp}NTWL{gUT15{QeUG.>BU'im*[o999U-b`\!C~]WONN^st3M7"uڷ\% N ٳ>'jڷgϞ:A\pRaڵ2:x,/RqEX@<×/_޲eI^G6n܈M(N<_~gXcݹs'sBG͛^=~8: 2e RܖOk.w؋jd]n9s=VsLB`BUa~]dɒ{WlyK.4݈g1if֬YV9QcT[VLX[ޖYSN ?!K` XKLXׯ_f͚m߾]Ν;7$$Dy7CCC+VX~},V`Æ TR͚5rr]]Ўl߲y氏̅^t)++KTR݃j]>jEli.]^0ajժ-7!c ڵk]-,GeSttyfnD̳~q+W9Q#8gWٝo$sLJ >|܀m%0a[ZmԨ!0""BJ%FZnG0e9QFeoʥ8WAM/)Ο?i.?@Hqpw^pƵas @a%7뗂SRŋW^=$$$33ŋ]BqqBne˖U7.B qJ!BqW5WoB)GXOa%BT +dJWXՁBHYJ!BqWw箰ڼ(\xWnŋ!#߿ڼ(7o\F7!IX{*6/ _|9ݻwoBq;š\V>A B! SՕڼ(ɓ999A#B!17ڿ(ԩS)B!>. >}I&; !RVB!F0P:ZAa%Rb-PX ! +!"\ jW +!◰JmWBQ XX/]B# zAVk^6W^coB&nL)#c~￿TLª"k`ǬTfaukؿDDUu0Dκҝĸ8CLmVNVWY| !!!ݻw?zh1kd2>l^zwF5\L4;ܹ~h74!կ~m'pEXzc [̚5kҤIIJFXu/mN:tҪU۷:ϙ3gf̘ѦMwkbS .̙3UV6ok׮Aw4knh,۶m+_(8v~Pҁ/qM8H ϪU4hpcKg8L֮]ʴh*;SG_}9s}YYYw}?|ݱ־}{&RJZzjժckԨQRo\?0bQI,#ier-,]EW[h";X\A^:z`…2ׯ_ȑ#WY _lY߾}m:<<矣csssn3jfnD̳צ](1 5ѝ&fjӍanS9,牿ڨ˗/6O>䫯*>nٲ3b!*PfMTfȑgja (ֵrL ն9,牿z /4Vh޼8D8鲱Xq[ 5o AӦMKK ΅uРAV$_*&=־^)ΝNyVm!86guرc[a͋E|,_&Y0V! En;d%uiue˗+VJW)Qaۈ={DGGjg5^ˮ8dxzE/55~k۶mQOEiv pinnt WMڵkgge-Ԑp'j`S߿ߦ ,\8ٴi΅l T-Q8NLK~] vҥ:T })j%ǽ{w_hh(ȻwFŰ4#H\Vgq[kW>[G̊^nV-jJ*icTreP0 GC*!N:%߶aʅݲa]xjժhBjհ>7lP\UfnD,gMld_C3\x`?~<>>OSqiyL ;9\iX.;vDEEnzB}āleHŹBR;v 5jԣ> kߢCX84nZV-oqaÆ . _DOubrJ*U̷q^nF重#b]}e6Ň`Ls*n 5d3¯j!?|rr20j_=çi׾]*a)={Du(Ҩ7|dumwh<Tg~kyU6V oE\6Tتvl<4H¹uذaƍ3fȑ#Xr5 atc.tʔ),Jq>|Ǚ|c/fMu9e̙X1- ˃ U w%K^ /]Ծz>O7t#bަMYfA[!| 9QVuTdddvvvp{Bqsa;*u. 7#>}I&; !R!KFX !*_v0Z)B_@X*@BQ' "_Ga%BT*3==]o*5J!<׮`a)R[)B!F^V/)B!΅W^Ŷ!".5aese5v֡,ԹlV?!7΅wݻwܹs]a lq,nWp1C 5YW f3ԩ~jJ=] $$ѣGYk֬Aי_lݺe˖wqGXXغusϱ8TR;ݼysqZAHįm}ZXb֬Y&M FN 5P2ª+-^~hC wԩKVZu߾}סĄ<Μ93cƌ6mڸ[K.ծ]>S}Nؽ{wZo~Ǐ1>瘘z/tBc +gciz뭷U;DWN>F*Uo̅bj&*#+i]6<z5|UtE-W-ܢxJ .?~G1tjepg K\ی,E7|iJALCMt'Ej?!'NT30auCcY>},((69#IRK* f͚hȑ#6R V0,&+~0xŠ~]v"GoĉG64m .p:t9s=h鿽ՖŠ"|t/j7n"Ksj+-ZfϞݭ['OBV;\ԩS 9wYI]Zlu;w †RKW)݂>4,991ux̘1 ,0Tj_|&MWW^ ʕ+.qی,E7|k.X3g4[MTR ĨQf!P74Jlrر# N/p `Z!_Ɓ6mL) /^РZΝNy]mͅ2eaqu֕+c, Znk͋E|,V_&i L-UP䦾SOVRV8[_|_b C*6% #P"lXyQgϞ輼uFr%YNQ`Sj;D9q#_cP Yew%rL(K`F_2~llIVȎňi )uX[G̊^nV-jJ*icTreJGC*!N:%߶aJQjaaa/^Z*PZ5KÆ E]]|nFrڴ˦J5t>áS8Bחe94Xmr`RpB|`_[a95ڼ$~viC-aa\vm֭jղg6lp}NTWΫ-V,UT15{QeUG./BUim*^`Ls*hiU0a.Ԑ!̨ {'''c~X9|:{eY{^}Uه1@j_y˘9->V*l]vkZX^: ,//۬GzUA?|˗l"oaiW 쑍7D222#'O/Xw١CsBG͛rq:t1~ Vd]>رqզɺt2sL{昖Vhzɒ%{؇.]j_=çi1^coӦͬYGՉyتU+xdX}HYwŮ#G猞Ċq%q|G{Ĉ↸刈SN+?!0_>22͚5۾};wnHHoVX~X<#X VR5kB5gXsԷvڑ-6s6oPQYYYT˴JC/b{Mu9ڄ  OUV]hQ \(׮];==]lTja9TmªS7t#bHr@'\Dux 5rh,|9pasewygʕ!bsU +ԯÇ[>Da%e2%eF#""TbJ[z69x]Hn(8ӧSRR0Q)FjŋWyҮ!֔Ja%7 VB!E(B(PX !W+ +!r -@!$a8p BH9J! !6/ }խ[wA)B! kZV7EayQ8n޼F7n nOB!(U\V/_ݻ7}D!8&@aMOdEᡡO?t;BׅU⢰ڼ(ɓ999A#B!1ktii•ڿ(ԩS)B!7|Qӧ4i3B)na%Bn(BPX !B!.⊰B)b%B\J!Bq +!"VB!E(BPX ! QX !ChB!.8!Ba%B\J!BqW5BHJ!Bq`cB)PX !B!.Ba%B\J!Bq +!"VB!E!sB! ?BHş4B!A` +!+šQBH9]aPX !O(BPX !qKX(B! 뀁©+BB!.\X*X A^)B! W +!r)BBq +!"cKXB!:V8ZV0BHyĹ?@HbB!6/b%Bt8V(V8VB!ĀsaMK0` B/ջ%x /B!:ڼ$J!p.{Jj:B\X{=` {ʋΥB)8֔~Xd6(J!c BH9_a-.\1u(SB!fus"{v]XB!7U:]VB!|U߿jʠB!UPKT(BH`U .B!eMzz:UJa%B%-- є+B /b`0w}7BY9T@HP/. Pcpε5l0)iV//tttttt7_59AWcuKXQ1/l2'qL˴L˴L˴VhCa1bȑ#BR (}ȴL˴L˴L+͹BUGճ78}0TU+ʴL˴L˴7SZ^`yʴL˴L˴L+_:f̘ѣG 2-ӖvZ+w/_VoI_{C8"O}w}?~'rֲT{io~ ?>j(Ve2,XB~Ʀ k׮r[ E88w.BO-eZ-i'xUUߗ q#Veb5 _vB&-|I ?}1{S~[ _5]`{ixZu nRXiHZ2o9mFsb}s,?2^e2{C2-ӖfaCc z*bqޕ >{p=gנ"䩥(SeZ-iQFWPXiNZ_?E-KpCAockw]_2^e2/ac*2-Ӗ@Z_X_7c:U*ݴEӏi2ʕ+eL˴e<_:h ޷fGaeZ-ݴV_}c3=O'+xmjtcqLiKXbKEVeNoB^&ϱ_{CL2{kY1El=VeZ% jl` +2-2-ӖôXgZeZer/awWyqQXiiiWXŮt +2-2-29  c*iiiV:7/Kfa5o .cZeZeZ5D~b5㊰V::::: U :|wE!ԭsR[ !gl~l1;$Xsԙ_hUX.8>>9~zUkR( 8/^U6/ +8N}ysGzUkgkg'N|'9\ZKl>_2WհyJ[x֖g/ʬPB` sZXwgtͷVu`@B%8>?}NU(ooӶm;$.4g]|!$Lny|N>Bc]o^mҤ)fu rq g("bm9σ{j̈_O. M|W8IH?4%a_olQƺ{o])8N~y-`[>DhX+ҏ#;]]}=KسiQ?ZZʕ?!7z3nx%N2$a&Y$3dfj' 0lu.$Kc`.N'9;v 0ad !C˒-Sݯu7况GZx_q%qKkm9sVUU<}:-_w!xT|?QKυ/z|y=ИV5cȐ!O=/-[?- ->cZ}*#ߛ=F/5g] gyFPo9- r˹1rB}jkzfbÆA*Xap1r섊Io75ASY)*ow~9v2#3;>6K}F:e5FVƆ[W:ݽ{oӦM7nj\hѕg8ֶs{gGG̝۴j ms c}>;q]P/[p2{tZq~L/5߾;l>qL4]_DD &\#Y[ o'%$\Cm+\xKڃ%n߱K8Ȕ‹oi;M1FL?ao_צUz?ߡO~HYmA^z\[^L EZc Mn۶ WS{,X0o޼3gہAd [-Z<{v5Կ|_a'aP]lZq‡m>x_jVK%:z'e;|V"^[l;{!&pђ>(1qذWsmȓ 㧞~i~A5. h ^lРAl)dמ/JIiyLrlT5.]=ܹ0Rпx޹6lb;}-P^x{>x?E/T?L+|Zq‡RZ*('OJD ՛m5srC* jmn-0yثg}n'ڶ؝>uVk&w`С<%o؉gIq۶\v-Y~S}}SNC]s@oq ӧϸujZO+T._u#{.|~ۏYl?/V׾‹{۶RSVY-l/οð-m']!,X;HTLn (O^M@0ꟿp?ғ 'L ~T HP?e'APcCP=QѦGE퓭_.^Obv{nf%wŞ`@3`E?[:#ssT'aa01m Z}-|=֗_>쬖 JtO <%3Λ߮ +t$""--mQ8r޻-竛. KWzE&&KT0[ XzBp] O&{-|-GzE` DJDrƉgo*{-|!XAJDԽ$Ǿ$^ KUF` l߁DDDbr'N?m>Uj%?M%ZZ'r \?9v27O$`%"vw52{-|yJ=`$""-p?q%7OcX X֭[ܻp3ёI$|,V"J/O]U> [\h+~ K\QEJDDDDD$J*V""""".%V/gDDDDDDH%V"""""X[@ǽDDDDDD}Zp~~S^zmE_vfa3)*dn'εpak=3B(ܱưj5Ć.RU;N(^iohȰ#//!Vƍb[ִ4b6 M05s9YƬ T,mʾ"MvxXWU}JWR`_UW•$( (ʂʲ,ЌjYSe'iD=^<^rq{r):zF}e#͸)&cWlfmA#ôzZ)kX*ӛFVr<xr{i(䊺a?eҠj|P8@=Д%~M*Þ<1orrhJ:o8VuHL,U9fRR*͝6cρCO2s&ĀI6rY"ŝrhZ1zw. C"#Dc*fæ"-=%ک*iǦԐ g[ ΔBB3yGqIzr:o%1^ӛUlUy|j`k?8ZH( U 嵚:5 S 0)FϔF. LrHOk ja:! Z6ky*LG 3YPVhEiNWz}8^muSZ .E9π4@€̂UQUxSWWAv(7ųLoW],Q`Xc s ]J!i Qf 65o SV!a:ÜG9ʺUPF]-7Ruo?;%̺*ʑ#9rR17B_ck4bB{R'H`ҏV}+T2&JKGg|O!˹\.S'+a kVWt[!z!%fpZMNmV5,:Y|ɹ^h\~U?nb$HUC/ JA=P0Z^8BVjB5\e HER GEQ54ixE`jUV*xE``.Ț[Zر%Aa؟RK-dhޔ\oRo˯,lsisPUod2̴AzTyŝufEq>5U] i(Suc'XUng4`9*"W=fL5)i, c ևʰQ }`W\AV0ElEk^X2lER\Z,#]+E +[tFzUvjOi@J/\ kKҠ,h֊Z@UQʚTȝX;dĦʆ {F.kM!Г)9WEx40SƮQy*f&3`l Npta3!w`.z`iZ5Iovsr Y9pd34sP"UP0)zn7L9 &')Gʻc;Xw}*v< E9r ƢӀ F'b+j5z"⿆0RbW~- endstream endobj 73 0 obj 30370 endobj 74 0 obj <> stream xұ @@ozy(`/ 89h5"qY2e:eb99єk%^/ endstream endobj 75 0 obj 298 endobj 77 0 obj <> stream xWˊ$G WyYz>4l6ދߡ|OuGdJJeDH!C/$'毺NQ21:<~3lXDLBEJdz.tEvnm΄/e{uK228G0A:g{:4!ZWD;>NJ!-Df;8=;ۧg7B C@&xM;>w;;Ke8@R6Y>I}^9-v"b%> stream JFIFC     C   ~" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?w)Iſ/JofվFwdbI,_+ٷ^(m{Sn/2AK$j8\ZG=~z6uO\gB/#ul%~Q)rXS9*K7ǎ|,_~<^xgS>ZF+'U{(3L\#yo[|0Ɨ_fZVm|6x#wo|K~"Tɢpڷي!s!#Q׿OCZ-֭x#Mt"gyw]w#AH8u'or1 in1"Oxl!u'mYnv';BwQ῍$ks/~?:xcUxToIK+|h;C2z`k_n5ZMG[ U 9NL _x_m!4uv-y7҇lC=χ#I't)T"FIɿԒWj7zk׼#-K_t}KEkOxnFFV;}tg XI<0#-X\1}?}(|kOwçx_lnиHG#+)׺{ޭMoM`%+*@MШBow^Ndnݷuq3㜗Zt+}mB$vȼ@`IMoE |i-[Bnx3ޤ6Lm(WqWl{ kI>\L嶳m}ym",G)a!!/1wGƲzsڴe5kv]e+MpLm̠cۜrOOC|j~a R+ZgebϽ?2G5s+VzC 70<|HvnZ|\&'*sST16k2p#=(`G 7?6k1?|cCf)ۭS?|euJo*w#n)~ om?e7\KQ/,ٮo*M?le7\Hw͚ /uMW;ފfwSTwͺ?%7\(N]U4M ⫞+ɤێ|M ⩧wͺ ⫞?JB)~(x?7k3?W:;SvC:ACy^U8O ⫚ v3Tݮo*?dݮo*0) 'Sxwfkqس1AlqȅE0dyR #fTY4˱x<5O )4Uz YRb }'{`#a-j@9a C_, Ulk5еkw'7R$Z}@_h~|W׬~!S:pz)3[t,gs_?$]C4k;-eFK9"d!`Eb2vO]'Ǻ閾4k]Ef\+($U |p0=^?9~B™ !|1U oѵe%~T.pe`ܾ5E>Ûq.peEwc>U//qNմOZ ]%[s\,z@ɪSЋ 5X`Ikp dv° px٫ǿ B6sPBU'b?IayL4P.GEs' kmៈ+ծs|r5 z???5 zK=G6Yi).DBuFpERU؛I];ü~kmükmq~ОiUf/,#cE3K ]旪kiזtW63) JҩOYůTLg|.# s z}??5 zȳwÏ xwÜkm;QVG;5 z{^(oG^(oGh??5 z׊?.(r?5 zQr?5 z~=xwï x>a{:׉*{|:׊?*(wï xwï x>`{|:׊?*z:׊?*(wï x^(oGG׉*{|:׊?*(wï xwï x>`z:׊?*z|9׊?*(wï xkm;OVIuAU#P__G[=__G[=}?E|uAU#'ã1U#P__G[=__G[=}?E|uAU#'Ó1U#4P?G[=';׊?**(r?5 zCr5 zs^)oGOc^(oG?5 z_wß x>_y9׊?*޿5 z~|<x^(oGhO׊?.w8׊.*(r?5 z_wâQOv_PQ@+mm#z犂%>m?^[~ |+y$98o[ wRZiֳK^VR4kμ[ķL>=H .Xx!¨lϡQ훐-wC6݅}k4/VZjZzma޾/eW _΅/aO?/c"vn_%?r\=5ψSڛ-]SÖ%|\`edP7 KRkCSE7e2^_|F uQҾ&d^jS LQ:5UGE#,vczZguOnPaQ2v8#Я ~PX;x|.G^_jK¯$k/xS^uoUӮtMzMKVtw[yYj@0a< x3+s?mkw6>c. Mw5$6p@-SW|M M붗~Եh?~3gg%.UE's1oeCOǿ4oY.4=Ns4SOhۢVeD E E5_S)[FLM5 V u[.n{#E?2I%Um|3;6$!ռ)mdBX-Q5Pr(DU(ϑxsO<9<:.t(Ru?ȳTas]¡yWv_<) h:=ͣjSzV$fe%3رU|Ɂmms;haj:%qKܗq&GC^+/~*Ѭuw",OB \Z^Koo2;rmGF!\tO!ngmass1 y۝k]Nr'$/ x[+~^*'+&$|s@^,uKj,bZ.{/ W(eBR8GZ6gKH|So5]lR﷒-2߼#9=_烵^R"Y&S+۴[ Km3+1t}=oÐImwjqBmQM;ƉGBg l:xؼ)5jvvu$"V\iS(%>HĿ <;_W𶗮xk3y*Vtpxlkע(?<%i'|9Wiޣ;ݺ,KvFĶ̀kfkB?gCW|J_`-LRTҼWo}ľNE<py6 '>;|YkeO> wk3\\df"fdq7fo9sm\crAڿͺ=kG#g 3H# T=q"#>u!OMxJo /no`-!en3'^7aX[.k޽yyyw[VQ|o1GDT9.>G_Z߇?66jX {i%hvEj_8>h#ח m_܉l<הMǙ#B8#qnWÞk$z) үtU;rwn'+^&_;xúEƯD9a{ HӉs퟿]:e|_? =~2HXn6B ys,#~A\~ /<1si]^wP{9ḭڱoh>x]6&XNl0An ,KJG>k~~=m77_cN K—0SXrO0< o2Hm>QW^).f\H[$l %MJðZ]xI";SG܊F &>B}s7?kiZ|g|:Xuig"vaZTFգ|y/é~^ψeh+4o%rzfo9sm\crAڿͺ;>!㛭;Ϣ7%Y$q-\Xo_ⶥ;~Id}&VVQi Hr-;Qk翀q_Ƕ$xIJ>Afu+$j@4d ~~wgxkHe뺖/6 e$a %O$GEnMa}vf2m<>f9bshI񽶑Yּ}ai=;Ʋgf/ QoseJ=5~6DO⿃?gֱ)4KBY+{"vD m?j$澸yz|!o QjW:fS(fq}ђcBeB@?|ïkAco]y=ܥ>E>k#pnX@4>&jE FJ="I-s{k=#$H7y@_cX5yOMi\-tkDr_T*Dw$^e x~/߲_dؼ}##1Dڄ.zk;<;:W>%ѵiLҡB#Xl zmnp: ;;Nu](k[W׮^ie6XlU1,`I5 /hI3v>f-}}[FөvkgQdQ|Q3~0t˄4 J&B-H%E ]QiΞԴ}IGV[êEP["J5gwkX<-eEo,k.r"m%aT<ů'Q~H_bu ¬qF@ʱbw-zϋ<'׺f]⅚fL+RYYU)H@5׀95 `Ү&n/.k˻4sd,3S[rzXω-ONwYBhf}B(]7X|1l.NMs\mo4lbøgDV;'9ϋ}<>vz5࿱5.(_L&-Pd@PG b h?.]&JLj K\TfRo|t~|!o=Ԟյ̀[6,]l}~ li:<]=ti67XCfie3TB,{d@<77eFέcS-bբ]ah8gD?z]vH=!7e[-ޭy=.Г-gWP@T(;P+Oz^=yծ⿂G,duIE.ۛdyé֯-bky|i7IJhrԞ>u+It;]Vڤ'}Tngxw_BFde+/> ~ztR@Cf6T a$׀95 `Ү&n/.k˻4sd,3S[r~lSЫ ^ԥ؜HHh(?$@#K!Bij b-A3qMy wWޅk]׳K}&3ܺG FUQ{I}֒!R(+_*5|1%_7SrO͏u_}WGMD)[a7_f(ȿ`$ңvoEzO6K}:r*@o]/` ]G,9>m i^%I6d$yɴ$sFxWv8 kMy7 IJ:"xE'R2Wxo{6BƙycF,I\\*18ńj%gfYGk{xu^Eྋib"K"I4Dfy>ǃ.n.㷵iU! 8UP:<ܚ_t]6j;}ÓW6%xPmZQ0R)D[#SԒwH.Ĝd zٵ S;kNfa]TyV_CCᖋe[G28袻(RUg*ݻPPXr ="_֚Iw*Ǧ\"% .΄6bDYYu?M;C7~Ӛ=c}橨Gf$qK.2&PleϨ^'<-]Ki_cZRҵ+gQ]IwդE D, s MKދC_4\˫y('7;.Wh>6S߂AuFFӧ'Q yQy1.wqswKoW{3xeo$0s2|F}ľƞinn 9wvG%ӟ4›oWa3O7_3_7nl4 ?Eھo'#ͳo5R /j%|)I{nդ>|;rue*#a~ѿ(W;}%..lu5$غݰB 1xҾ&xL4-{7bőM|{4tpC٣wľ7gӼ)u=ևOsMn(; H6Rr߃> MJ+an ϴR"gE Bm\ygÏ~9ofk2gRK4uKw0l(4*큶n3w? VH-X2m<}t[jF WGFZZ֩c@5,BkI/ Eq!Rٓv0jσ> MJ+an ϴR"gE Bm\r6,=y}AE,7b\ lydy':A_~+ƕkk܏]Hv),p+eviWask^A}}۹6yPE0D9Xs+ ~'ӵKR]ddgIVKdq+i:WѯE|9k|/yw"1@\I"m%g^:gԴIҧT a5IHLLJś*w6f7گ '%goڿgf'x&ޤ_5i6vwZlcP2c~ ʊ$4ֳx]nn$q76<7,S}ec/z7=ÚƕgwgFkjҶy2+I\s ?h]V5/x/ <"Q1{1 S::'̨N.Şf uo׮ukobG߸dk"S6ǀ| _(tBk="V+0FcRH0,f+F=iO/4uͺɩXZr6_2R$pe|3t_Ɖk ZQNY0\/7343Dea[~WP׃5[mj0k.=Đ0gmXNw5KY}3ñxZI=_O%@6e&kpv>~:/^ iy.hDhw&ݐ2>z9b@|l$\6!ݶ}-/VkYog3x5GbFXo$/Ŀ fHPv&#T"d|iut{fw1ay: }>[$I?E3<ϟv7Zg͍r%=kY<3>^L7cuqL/}޼妕⟉;☠a{#fT?,{Q5,Wȟf|/v&8&lm.~ _"ϙy gba3nf9|Sko=RG{k yHA`əV8*%r/#蟃?ǩxj]au){Z|VE+B B=kY<3>^L7cuqL/\?E3<ϟv7Zg͍r=ڽW; ǦĒ%Py\RVC>^ϲ܂Pce]돈0;2%ye[lt?xA/65|±|FͧI/߻-߲=>.~c3Z_#g nJ?MB7i_G0X^kclGKoi1"*ޡ#X|KozTSqq+ϨKD̮A,gp n@m/64›oҿd+o y|o}{(Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|[yq(_Z_IaiL4Q"6Կ-/6L6_?oecɵo^x:jSNđU4jx%A\嘓^/ ?e} {^_l72cG}KDQ$xKD} ^?>3_$xZ'Q ho5@ed|)fl72Ɵ>/&Z'R'bZ'P_oe?O3S/?|k ho5H߲?T_6_yi?3_"ZR"xğ ho5@ff|)flσ82_Ȟ0T~0T6_yj^){8+?8Už9n&Wj?&>?gIx| ^8E[ÿ?~=~?1@s7:8>27M#W+S.F.n2GVw|:s3?aZWf]tEp|/3?H]w5\~^*o1]t~*#K꽭N{Z?~?Q Ca?nG_7AU'o OT8?uƫ4CGr͞-B ?PO:}|?'B˜p5_'?@ /s^*_Vb]Z~ۃxo/Ѫ2~$?pGBo|y%x8tAo5X7W +h>U-fRY-gOw H*`1ɾ=?1?o_2}b oo !Ϋ LY?5 ?n3]JnqZz/9x? vMx[ÿ???+ Ƨ6oDx̼̌0ͿMUc&eTZ7\Ol)x:/P؟_mm M5|Zz:/RCŘT76/yhDmm?[AƩGGE  M4؟nm[AƩ1ƨolo72 ^7?j~ɾ/B:'Pؿ?ne L52g#'2_#} ^?᱾3_&x:'R/b:'P?oe# L52O!-ƨHO7>3_1ڟ<oD_}h|393Ӟ$xZ'U'=fY˫h<HJ0HLdq0_R'|&85;-5i[$ endstream endobj 81 0 obj <> stream x 0 4#H\r KkI `@[4^D]"w?w/ endstream endobj 82 0 obj 120 endobj 79 0 obj <> stream JFIFC     C   G" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?jFh.[7٤gr3$~7c~PE}107¾5%WRxUo%P##K*FϹ| YsG=3y޿GbVٮFw8uwE<0:I.^fNJmm1?5>&yΧWG,VO ~Pg|ۃGZ7'Y7^&oƚ`|@֦>9zmR0=G|gĺ/)5O ̚  m}21{_| N,m3ľ"]7/Q 8u܏m9 V8yԜ[Fin-"WmSNľ7mYpm`7v$_@sK5WSm֩wWe}o/c$n=0 zVO/؍݆ $ȢA.mn3+g)^ xUGi}'MXi]Yǝym0}.[npk~%xr繸d*"uزђDo$~V^ «Zѵ=u&ҮGRӾ3B$P~۟W9!>L|_x{I}SÝZ 7>!.8HG##Ik=VoSx˦xPڄ+D7BV8'A~6Kt+߽k6P' ~>o1Nj 1إZc t۔F ``q~;D'PԖ&E$f`唫|X Z|/o j67[To5ؒ؊|p"]u56s ݷxݻn9O< ;zˮKFh<dnݷuOxM[mB μ$vȼ@q#)R@ [(oxW񞡣 [Z 9CRv^&Y+D\{0]O~Z7'LZf5{>iAwpE F9fƿoKEZNgd_c9]4þ.dzM-pq Ld$U玵_x>!_AcLNp 7c'nݘﺱ Ӿ~xž"-vKOэl&T08 fW|'z?#_$bC8v|Pw៍;jWZJ'Ilb|d܊|2+|:ύ6s@+~߃p,4Bx4mLnľʸsW+~6C0k #Iǜ&ćnqݞG60œ m:߳?6ܶ35x⾛_rWN{pe"ӓtmEy[# c#&cOцBrW:]?&&?bvdKoM?7nx_COSTHQ,K^*j>C%FMf(K-n5sy#F c z݅n~ua/xWBሼ=]x.^DizJ2 ]SU-xHieN6p\uϊ^.g -&y'߶]'z1;]{RM M#ź7 !Ԥ;[ּ+*.^[Yç\"Xs(ï7g ZKa*YP ܧPZh ?mo*P5ciq.#)c{+U5Vy+e ?U >ӯ=[I)l5^ ]wܢVf؜E$;uno_mù~o_m~)/dTᶑ@Kn=)<5ɫmk:v~4h_b}ʻx":l'?b?7 zO^)|gxWt_i)q8;] S㧆<{o>'SҬS;Ԏ1rP\yw w7o w7o /4m,%Ѽ3/AtmpRlgrdT|o>O/[ĺBWD7}7nnߌstܿ UvIkA]#ZhBլmR9wFcUD[kN.o᧷ki Y C2 P2ʒ=F@ ݏgv|Ym5Y5(V;RXF8'6=Η k~="@ moiQ "JU"0bq5?W=!p4?_=}WE|ixvOx>SMc+oGp|4.(OwC1]#iA]#tPʟ_=_=}WE|?? Go_mù>s_mM;%[J;}G+^}K]gWQ\s>i6sK FnL?j2pCjZ>^Eghe:1!~j"fy0aG?5A n킠FUDL7xMk8uykcj7 zip|4?_=}WE| ު\nѺZ)$ 7 $#efiK-0VOnLvm1%PME|J𶱬 ]*_NKMG^$-D͐>PJpy;_/qm} ^MoJMA+Inu蘄3T$Dl/ՔP|2j.ZSc\F 蒭6m"L|r׷ZG^\1M)@ I$d ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( [Es <Ȭ,?ҿi+$wwnlF{PcIw|Nx_8k-eϋe6*H 688_% x~#Q?K!ŒCRN}F5 dѵ,FȲ:e1ȀCQaou:54$ObF8;]OB+~%xL/_hMYҥoGmĒH~Tܶ`R+|Gռ9i+wu\iVz='i܉0u${j:`XmWWzCW}^KҼvu1^k2-Ux`y_=v|־ Ŕdֻw zCiZERK*;%$;;u{ǫ3Ve}}sݵk LMpS"RV6[r@>IMxGO˨Ry⟳ꗺe얌ٷIc e2͑n@ÎV~W1ms%՗#;*5k#,IO`XmWWz W˟6ASx9FfB;Њe=;r0x vZt0캴AJw[R-9Dh(gzmj7})qmwkI:GGYe`AA?U iڏŸ;Q0]?^2^hyNѸgIćj/ NO|6n._7As_\H"CYT[H rhU;cVZuZjO4wjy5 &pӻ<2v: ,?綫=Gu{ǫ_-#\׵?K-cO\&OM~Xd'eC$ x~@FE Nɼ?{irSRo.-ѷ-2,@cdcQFCQcokĢ7`ϖ`;Q@ju{ǫ7 |{_x/NuwZahcncs!*IeWxo6⟈ź{ jh1j%ߙv&}z{j:`XmWWzzš׏<[Ś~=b YSHӧG $rK!ޒ\3f'+[Rk6Yw .-Cc<,i&`2Er@,O Qa=_^}ޝ`XmWWz T_lY/u{ǨگEz>E`XmWWz T_lY/u{ǨگEz>E`XmWWz T_lY/u{ǨگEz>E`XmWWz T_lY/u{ǨگEz>E`XmWWz T_lY/u{ǨگEz>E`XmWWz T_lY/u{ǨگEz>E`XmWWz T_lYCÚe4:]DRDQݕ@+S{j:X ig=makY>!V1Le pϿf/|pѠ>;^ydѴ+H$ib@D lJ˰Gx u4Sy{S=k{Jѵo>8hkG\e55 _\YيfzV%(Lwso..7(ɋb9.H')@os]y?Ϟ5GϞ5^E_;'oQyƨoQyƫ( Ko.mě@RX#ZZv\p0wWQG3 OWm!hPX|3ohcG*7) V#*A\WgO|JC\ݝb[jPAZ(MfR9W]]m1f#ZgûF5iP޳,9s#+j~G~<ռ?Y7WCoZJ#? +.~1j7:f akF #31,0²$۟ٿ4?;ۻozn67||;umGS'Nյ͡ڮ;s+䖸i *W/ _nfc7nXWQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@~^O]7LڕZ.UG%W~\)ׇ, rj6:PL8@}NƸ6qc,vev1;İe}W,"JW"+ᠴI_?I|߿3yuϗ~k.O2-Jm?@/C5H[툴"Jۙ؉B@ ξK.{7%w+eW}B_^?cJږ^oo[k5N&2y*ȱ˨b+OJuu ~cnRM+i]n-J[_L1rE(q?ЯE$Q ] YE|o^DtD^ie]J/ "rI[G (` Fއc\jbIf$p!AcI8I o ] YEЯE$Uo{}ȂJW"(}W,"}.Y}W,"JW"*=Z>ȂJW"(}W,"}.Y}W,"JW"*=Z>ȂJW"(}W,"}.Y}W,"JW"*=Z>ȂJW"(}W,"}.Y}W,"JW"*=Z>ȂJW"(}W,"}.Y}W,"JW"*=Z>ȂJW"(}W,"}.Y}W,"JW"*=Z>ȂJW"(}W,"}.:Ud"|!#afR? _n<;x]{}Mk1w.1ŒT B,p# SޥX_^Ofe c ,b;W BAs]b_ ˑT(eefr6+_g·UVZ"lx<ujx6!:N 7ldSbNBӻά|! ,ugR6 m[Q<-.-{`G$2fe05+_g·UVK!Ÿ |\ѿO}w|.f>u\q]c+$[$l-mQl5\m*1r}_LZz?[Ū߫?ĠcZ-o jR]jP}Ҵ7!1#K(l,jO|?kڿMC%5-3V7B6jyѯx>{+_g·UVK Ξ^u;Lģtf;'Z$4M[x.ݔ$%2z<7I"{yeHY*;4V1joS~d hV-z:v-rW3^ ,Laa|.boS~V1jAcȼ7_úEj0&i#oy=˦_h`,+B4+>??M/~W0{dݷ8q]+_g·UVO{zoS~V1jAc'}޵[Ū߫?GLZz9XgloV1joS~t2~G=[LZz?[Ū߫?G{zoS~V1jAc'}޵[Ū߫?GLZz9XgloV1joS~t2~G=[LZz?[Ū߫?G{zoS~V1jAc'}޵[Ū߫?GLZz9XgloV1joS~t2~G=[LZz?[Ū߫?G{zoS~V1jAc'}޵[Ū߫?GLZz9X<'y.~J>Ь=w5Ѧ;?( W MJK^JO>,zω?|Yak@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@~?33QkO_ \ ZG-3oZG=~W៉>+zER(((((((((((((((((((((((.G-h2W~A4O Z& Jgs ~A|LG-w_h((((((((((((((((((((((((?Q)akO_ F>$xS֟9(\ZG=~'ı#_tQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW7U)akO_ ?xW¶9h\]ת3__TQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWOo(Zvȿ./+k#?x9">%*jw((((((((((((((((((((((((#~Emr~F|6o |J\EOnsW~FI *(@QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEJ/+k\3O VG-·_9ο"%>"·_9Ҁ ( ( ( ( ( ( ( ( ( ( ( ( ( ( +'A֦%PԠ%InW//v 6 S;Hj@п$5oF@!5;\G. +CVj?ph__#Q`;z+;HjG. +CVj,oEq4/x [O_?j7:upV-Ė:qcq1*iQMT'WXE,@I+ǚUI,1j"IaO!DG tTV&?$TmϮK5NoXiQ > /~O]gjMI{ƨV&?$TmϮK5E߯ȯֿ9kMԭu/lKYy^4=uէVu&}Od<x?uwqA<|eX1H\gCR_V+b\ 3G (\0X.eψ xRN/̒t@yQfmlZ׼)ǟg/GEđKn5#N+VH\_ll#!>MH S w}+$w`RPyLF}Y<ώ>:mi}|ߎ:mL;o x?)Wi@7.SVM.%Sf}댺KO 6q.k)fM\S\fmwV;En߉} vmFwڅ,wwNʏ*?)%߹U\#ݾG}O\4;[{/NmF4s4!4mP&~[iE&[ԅ,eC,[܁\gֿi>Í+KӾ(jk&:x^JmT^/#vDg; &G_s~AL ]ԏ]}m(/gÿ|1.]}m(/gÿ|1.]}m(/gÿ|1.]}m(/gÿ|1.<@#> ׷|7{.~4=^;]vTWHWǞf끬[ՔY|c2#T=~LNĹ%:+Q O7?3}HwGQErC~8_Z> B?U֟/~\-ۡ*Oͺ }gx;PT|Cf^ڟ/~\z!?U#|Mz}ka5ڟ/=;Z ?6_2mпeGBdtW1 G7h_2?nпgGA!_ogG-OQ2C\/,֨WY.#m2Q뵚)Mmb'i$Ծ~).%";T$ Y+otχ b)2F'R&O<Mf7/'#?Ÿ)2ÞtxyJ(EQE'a4A,>'gLER©?EQEO2ʣ4'9gLESOovb/*(4CˣF~t7UtQO ]!C7ͦhq&>.(Y}}YmDm?+Ɉ$Gb/.)b_z!g~x_UC??,lc72\z(Y.uz Yu..!^Ƿ΂uo(E(餢Q~?J9пn9R„$YptQT3O$3rm0Ο;o(g?/ ;o(?g?=r~1"N(&9?o)᜾"нr(?᜾"нrg/{'mP/oa?d_^MK2Sp$yP+ [aW,w E; endstream endobj 83 0 obj <> stream xѱ 0Ao@C VqQ(to)gO9?d:/Z jT,t'k B/ endstream endobj 84 0 obj 194 endobj 86 0 obj <> stream xYۊ$7 }}[,*@> 7lB%ɖlW݁N/tt2?oO>~7N?}f͙yј_Lo5~ &0}x6bf݄ո ~X`ye'"f8 ۉ 9phla0\l83A沂Ez.e_YYW&^ʱ٫}/gَa#pUH1h&i( v܄[`4('{cő| pm6 V;,%NC Y30}$1d̓\rӿ 2R_xsr2rP;.{ G`Y>OdݚƦl;Csǟ0fMdxa&%Ӡ R[͚G Uγڧ񖝋Idn Q@O--"icl:s6w [%VFCVIVJz<R C d&fSt}zxŃ>LBy p^\Tm4ȁN4)Mu8Dmk.oi|VH;^qd~W,FR,c2m|+GBSZJ\cZ1xO1_1&y 윏k9:߮}`e7YqbZcfD!#J32v592F5?M6KSa?JN"ҍt YK,~m <NCE'nM/Ǩg ,uI@ j /+^eΧo<4IXpV2caٺ)D.JUUj$"U } Ž+ MU*H5_)ɷLd2 %fw u s4o mATʽv& ?ƒڬmzJY 'WPKbyT 0,DGR ˇR5vð&kVxIZghixdd9utiUHhդ%Z%2|RyO޷̾Hj-8=Ђu^, ^3о}xfљV:Ffv٩Nk8jT{&g]JdvLhP')2hb^AYJU )tT X.bYSGDNc-F2+.X3weW/^Z i[Xۗ(*pW"Gm}{vNCV]zN;xkj7Q ^uB \SIIePrѴ]rK vL5..Lq`5K3[:*: {-B]Ҡ!D-$^{U wݶșy!=NȑqDǩ/+o?{y鰪 endstream endobj 87 0 obj 1980 endobj 88 0 obj <> stream x]XGVbh+͆%`E$v&*51nlQc4D&b1tl Az;s9Μ9sfswq`?.ܹs_oP;@ Ӄ#F޻wOT)UR+k X3Tkz*'''g1QfefBj͛ AE"FnPs 4wnB;(Ӛ,=JgyÎ8PbYz(Y B5kH @&(Q^7ZxB+JXd !:\rZ T@y]zv~}>e҃T^_-?J@uetyyy/^>{i~fM1REtH`W]ۯO!Rj҈Q#.^-n(Q65d.7+ENYހҬ1JYrʕ+"iaIzLMd Jd%!"G(KV<" 5hؓ'OENYk׮]d%TNU[fϡ_od7.t+}tǖ,.J@UF*&_~ !|ԠBV/^ұ-[/}DcLϬbpmj,) z[E?Rh$8LST BqQ1=ׯ7C-OgdɣuvQ:.zM*EsK 􀂐%KҥKnP IJv{ha2(xtRPB%\ $gҥj1]&YlY/@Y 6Tm4Gj?QE4/dLyΛKD TF+W^HSn/:ΐ!" ʼyTID6/gխ[7OбK.ZHD!7n%%%55.ΐG9Psum :]ܜaHur~{ ݣ?ҷ9HWi\g=j,g] \mWׂ|Lm\_YZ b1c(f>F! ϛ`> \qƍCyo0U|lE^ */%Tn@r/ciւZں(MH)̛ yǖ/_>YDT3gT;wLuj&x<׮O:\?3٣|23+(󱌌# 5k֜>}ZZ$駟Bm==h7i1 B'A:22o@o6U_;7w)(|QƐ8y_ի&֭[Ambb"G=gHDDFpX:u/I+V 8`-Zrמz9=(VvKW ǔ{[q1|d 6=DDiaٰs&Iȿ0Ys|~U>T/_F=i r$U)JQQ2 cP GX@jLOTSN4&Lҥwo",ՍkT*;;݋;W`ι}L{֗i)%PY>l9so߾|>SH 6W,>6bn>*{mX]t L{!ե7$:}Б>|x>!]$$$L?uNAݻ ,ة' 7]Pu7n,;vCzڴi>d(cL1c=w:[bV6G>w>&hRKmK4&=TopKNʄ );vQ#A%ENOIk*;# W*ɢnݺAAA["$T˗TM*##C5.y;rsK PhܠXP~ 8OW)qviNyyy߿?Qw C $9˖-͍׽;IzE2}fBI{3g SSSg̜\@ |VwkJS\\Amzz:GbV-Yc-6(RzyN!cP;1hǴjhaD[k(=k͏|ҧoϒu:6W^9nXiSh:>%88@|5@l QQÿ? d񪄄WyyI^lVH/B}{w6{ P"c^Χp0`@i&[X|OZ_~ Cɏ!=dȐ~£Fj |iݫ$_m?Xt3g Uv|LP.pxU{nːcL1VoǐUރ۸v>>&N|ͰТ@B!AY<{O?DZ`1SZJCЀ7,!BPHE_hc!!!}W-U۷W͚*=ӧǹ\ȏ` PXב/W?Q?{ǎ4=BbÆ {@n߾;r7o2l$S‡9߀mv3L4ѫW7o?>p@H$&& ?uMKK#dt /EV}>sk|ޝ\c 71g沢uO%0j 1.!l>5iӞ7J tgNCLY B؄ ՙo5NOjA|l„ }5_NN+!  G"ρ~Anݫ/3wj=; hz̴@(ъM FI3;tl捧Oݳuc_"rJ[OqmΝ㏻u'mۖ~˺tqo/@;uҥKPڵkSN3)lήn-\w":}БGAmZOqtroTgV1M@^1D(j|:zXqO#{M ?Thrࠁ?JhT&N|<A&0dǣIB|% ĉE-W㍞i#RcJ ;::6m@*ݻw>ֱc`~~JvG>D)jlBV;/OT~]=A}7ҩsǏ[ȼy렼QDW6ӀkQu\[{zj2o =Kבhm0PB!2'^ ׯtt #5(=M yi RS*szRIA)C~AztA+_|oڴ)SfΜ2c {49!JR̭gOS>~g A r1uJt+WL4O([15? Kffeݻoݺut6z+J3N|?kۊ2cnqaK[ycNKA>6NR.Ma>KG]S~}Jtƌ)S&7mڤ~|lҤ 4f)9L=_CPǠ] oW:%| J^GG{:u뀻 Ğ֡&}t? AIA딲ӣgϞ}kѲU^7ځNAzj% OmE͆3L7j hde#HkRe8pt!?/[tJa|Y {Jd6|MBc͚5kР\IS (%8Cw4S?C/pP !P3/yPB WjQc*ZZO!G%Rd.i*qϚWe(16Td1\D:1? $7 y0GNhv /_Ka p-a3~ϵ m#r>\rkS*osckpJ#5 ;ib)3j@Fu`40㿖J41_ō2[IY\L1-SU)cu|cP2D[j+kFh?0 t$K2z]_ t=8|>˟V:+:?GㅲPSG6O꿲cJKm֪F'|LU !GϦ=F).|Lh^aVeaaĘ-U\]U?Luv(5<1L=t/Ya.5p?@ `j{@ J!@@ L c@ Eso 1@  |֋m FAAAAAAAAPBcm# GXL>Fرc!Lcj D N'EWJw NR6,> OĤg(<h ])2,>ΘJ-rqPN((F\tD@?HF1ײɍA) Ȃ1(gyńk6w鄂bdEWJDg>&h&>Pr/>iĠ/h,Z6(Zp:Ypѕ1!ҟ@1;8y򔬬OeRETLRcx)-؛w{!@!ν'>zXVv6p-%zHut6 Gh:9wኯ_ժU+Tвe-[ z N2jՄ|^ Z@1.:'cw=$ʫ}u7 shE ;R"PJ(1D |9;A9$>]Jn߾#DxZ`P^7M aee;K ƦZJ~ƭh\ ?XVV6p-I!#F>bd|Ο5k*[,~mǻ547/_%+D#u'p K˷@  K TlԨCMID:@`L#oK 3IL+#fsz{w%i4ѱFbYKigWfkaa/_HN\ (ERD9}N|uz0pЇ9 ޏ?wF$Cdʕ+)nzK7nE\ _Ow'deg'=~*Z [arxz\b Cp>\.]Na7wB5zL.}¥^^F"Hƭwީh]k|Vt+i>Mp w4D O8xTz XfVl-Zwr՚+WCCÅl޲z25NveD)šNTߌ277'i֠?ID>3O4&"5kʅQeW`ѡ 1&HHMXƿGOՆMoǜv3<"\&7 N'# .R"J-؍[Q9mڴLK!(`1!rqu&Lܴc˗PFoiiYbEGђK.QFʕDnnӫWnaaZC 08|--cB> kݺuPP- F>ذaƍW(.C 0(܅b>#G֮]ׯI>իb111$moo/^nHNJJ3@ Jy߽ąL HNN iӦ 9gzzzVR|YlYZ,77srrE!Lr +"@e2֪MBo>Ro|/_E|N:vJIIyY$CBBa@ Q`1w5ɘ ֭͛WWcݻC/_&''Ϛ5E$ʊ~ ̌ 1jM:… }}}cccsrr_u }@ zpus2f]ZO>vvUXjժ@8 XZZRZg'''333GGǵk }rСh>I-Znݺ˗oҤɮ]A@ 1 \j> Ǻ5@ RpZlٴiS'''+mWUp| @ B7XVɘuZvuDw| @ BXf̀Y[[׮S˱S'c@ կ_ Xݺuկ>uj@ YWaW}m c8FG>Vr̋> ;|):eV-B ǪװU&zNoMhDvCQwX ^! wyC ԁ3c5|qFM6nڼ)z)%piB/G=5&TFΝ;XY*DqխW~רĚ97m̴cl޼y ׯu֯jTBBB@@UŊ۵k~RB{nԨOn}qQ&= $1c냎!ןdhT }e^SիWӧá]2( ԩSJlll#8+̛Z(_a| ΀}daooY**&y/q,1E!{1c ">f+!>׬Yȑ#YYYÆ {eZܹ#, <==M 6ʒbUqL9!JX|ӏ) i?֣Gd2Ν;i$aNPPdB|7yJB"V}r3*T̃ rx³|M6'O$iHmVZCƍa(֭K ݸq#U,gg+W8KKˊ+l >k:(+Q1zh[]m+NO`JҲe˄aia|*̤~'77wիW LMMWZeooLLT5VVV+V,2IvdUXDc*CDZW:99 XڵkJb/gXBvtR(vmR{D= %''SkW0jϟ? |{޽-YÇ@cM5ɗS2&ҘcժU{(]JJ 9FKVY֭!A07%cZOGOe vJ7:;!O2+P)JYΛ7;>>bÆ 7n:]Za9sf.]@zJfXem&`, JZ7xsuu=qIå͍cϬ% BȎ eNjIJ{:~ G!N0VRF6m*3l94'A at/13331rXlI/]][o ݿ_y[%{|;%<6BN6q2<窀 Mnsyxxcʕ#JTqppXn>ڧO 8HOO777V|cb  :(uI:**N:JHՃZktH˖-EDB>&7ºuFFF4\Fb`5vJ80ҮLYNVgn8~zꫯ8Z$hPvZ-IiO:::fggCzر;woI/ ӲA dc"ӏ^S2_!d+p+ Rm&:iFWM<į622!9wx(切 M޲/ZV x2"" cL a蝜'={LIu)@0OhxJ2*T"-/hp)ϟqءCZYNW>Y~)#VX J8#˩:TҺDZ9pB9,/s^V!!8= 駟^zհaC򡰒ķ4 VcL~S{ޱc!![ʗ/Kѩ-&'tY ][ 00_>9a۲JHj<.E5k֔UKy׮]d<aTW7H6@*qnPI(yE%;&d m|@9+:88WWUvkd'P2++$gqϒܩ?|hr.pvqnIb$jT;7 BBuܺu Fj額MXXXfff\\\``0E~~~SNAypp0}g$ʊ~x!ʕ+0:q=</$rUza1A$Sg`yF mݮPOO b:a43F1{{4h zGXPڵXbժU* GJ*V=/> dEE&d|(0{Mt1$"LM(P#+5M&;wlذyƍ9"U"<ܳgk }rС=,gdd1-5 A_y[`l;q:qp~e?yyy-"o5id׮]*fgg[^j_"X#˩²VIBc0UQ~/g1V! qzRbooO۔-F> :܉s agw?ߞݱ'$L|g\ X1A!M6Ä| $Hxl%O OBfW/^- cB ަD L+xpGl׆,5XHt 6{DTʕ+n:S@ } NJrrr=-{'nKǔ@#qu&bX>@ Pir̋> ;|):e7` 0tcBcyk<>Aw/upǝOKc@ ZjANJ <=7Τ'$g$d4뗣F/ عs] VxDs„|L+/ڵ8%5h[ =3ܨQܼޣL$1c냎!ן|+^^^,ITW^ZYYY[[O>]`UÇwԩRJ666~gu/תUlٳgpgTre[[9s ^&)TCpY 埜^J,~X۶mvӦM[&? K2> xi>tPZZ0O>8gu\Cv7@vT>3HEٲe ;>f/<%Bb?F/_,_<=3]zuq qFSW\Q`(k&B"V}r3*T̃ rx³|xffaʍ5G&_Ѧ|椧U+qH˖-EeoZI1PJl WVnnaZXXLMMWZeooLLT5ރ!XYYX_h$ّWaMf8OĥKԩzj!UXÔ1dkggzVCj֬wE@Rg" dl֬Ydl .$G޽J %\%ŋs-LrLZ)w?hTȩkq/ n3~r?z.g̘1˗/Wi, (_JJ Di޽B{FIbFf@|mAAAҟGJ)S.hHJJڵ+ݤR8s:tFBJ Pn*U|Lv Xve͛7;>>Æ 7nǏX:sL/VLYNVg.8O?p|5:DZ5L߳gjV &[Xp6mr)QxPȗB°|L+{@X5#""TGGG}رcwܩC%{|;%<6BN6q2<窀 Mnsyxx_Շ+W/$̤e֭['A pcb  :(]6%騨:u(#+WիGxdu\CZl.݀#FYٳ@Iuss Z-''FZ{U"-/ԩSp=Ǝ:Jrv{maaWϹs֬YSV,]Y735ƈ)ְ#,,*r.'d,%pf̘!T8"=JVkD,p[JQԠ-2kպ%#;wUV܆ *|Rtj ](`W<5 4&:WON涬2{URp:x A;]vӀ@s}NQ}.m;VD qF`u?HȾN8`[neee8pVV-= ̄(t򄉟ԩSuPLru k ѫWd5DϏ s*BB>F(Yc>#ݽ,X`iiYE{Ȅlfo q0 7{Ԙ6mܹyƍ9"U"<:dffbڵA/p :r+#FxK HOTܙSF4N9L+qVnٲvoo˗/K;+ )\ɛ}M4ٵk=AAAp^j_"X#˩²VI٨c3 e|%>|͛cUa Szz~haa B9AD\\PJfB>M[9>Rӳ{}~coOa&ɁS3#*3Kg3򌈈W!Ƈ|L}E4lP@FY_~>4H!dvqoa*@>(:`R_&MzÇ}}} ba(|YM̘w! Xʕ[n]R$%cخӯ YrkW zm1%!Xm8\zAGD11W7.j| 3rrr=-{'nKǔ@# C 0-cE1@ %| 1@ C>֦Um>zRF Q`L>&%BQ#!(@>@ aZ'ƍm8;;_r:tqƐ /I#&..ҲbŊ>>>=:/q ><33ShnnӫWnaa!@|>FBc^x1w-Z|[[ݻwwȑ#e4jɓ)))AAAO"͛Llذaƍ3[@ C!폵VaӧOI:==ܜ֭['PzXLL IGGGۋ׭[722p@ + >tw%||\ryyy077rHZD Uo>gϞR lٲ4A999c!@ aL1>VNYz5k֔= jwڕŞ?.scb z8@ 1wWBCC;w (''Bzƌ 0֭[YYY%VVVB^gcc(c:uH… }}}cccׯC];@ B|LM"cm}zvv69c;wlذyƍ9B2,X`iiIٳ t:::]VC}Hy^^ޢEKM4ٵk@  ,> )| @ !B>f+@ R(c-܈ C 08!@:1H!@@ZhDHr̋> ;|):eV-B BS11vCQwX ^! wyC | c߲4 Xus}LzBrfjzHrJK)K:M~9ꩩm4SquC[I ݈b?v͛WP~[n%,2r`*"=3ܨQܼޣL{AH:61cC?IШˋ3 ^zjeeemm=}t8ԱK)N:UTf="Ejժ|=}U\vΜ9v`nn^v_rEgln֍ٜm)PbB74^s0*-Zcr(g֬Yȑ#YYYÆ #YV:_;ݢ^˃n_$q/?6A/F ZpGoHql۶Ã}M6nؼyn=2, Ǽ:O>DYWݻw жC>U㣏>~^^\v-0K.iU0PVe1´1`B1, =z ͇eqFG=..ҲbŊ>>>tʯZ޾lٲB%kџ^>|xffbnnӫWnaaTWƍm`)GVvWHO\zFyA_xqg,=Ϟ=sttԇ9y$ICm۶2aeN+/_5jTU5FM~{K*Ezz:Xl2!!AoZI1PJ uSt3.$![@FFƐ!C``e{ 6hЀ.8bKHGDD@HNW^urrnkF'.5G5`[[[+++VZV1i[҅ÊZVC݈R%|Ly)ǪUci>,+XDK_x1w-ZFEeJJJPPE޽#5|}}CCCE͛yذaƍ#v A޽{#GT嘴S~S^@gB\KϘ1c/_DgyoC#.;vZ)2e  III]vT :tFݻ.(LJڭR Sq! o!c5R+Sq„ 6mĆ *U_ĉUo1N'N Ǐ}"N]c̙3t I}Th--=)e5Ѝ(%1-VHWj333òIK@>XDc5QE"wpL֭Ů>s_H!NHYesUZ&?FVɹs<<7ɝg?u҆! 9@ȩ-ƫ? |GUh}ѲJ`#""H0DŽCzO; o8C ԩSϟqVFܻwo ͝;f͚ e!-+[QlOČ맥Y[[CԲ;C?JH 'C*Bk ;PULI[ɉ! [/QJjݒ `i|V []vuիWpbUM$p3%zGvAtKѩ-&'tY @][d 00_>9a۲JHjǔ<.E #.;vZ)]6U7p`x񢒎gihծ[l4hG׭[NtJJdD%KtE~ݺuh/_l2[I%='OD9aGɞULI[<Ѝ(%13Vxc ?;FޯҰb熅effB T8DN*pB___0 n_uInݺ68p>Zc* Y$w2^ ]vҭ; )u,?gƍ0m~}bV{:i<88>ɓ'|+++a+Wttt~8!ǏmEdm9rd|||FFƞ={k qZKLL2VZ˗/ ӸYD^`=?fA\foM5k׊t*1=5d FΝ E@@-1̚5K3]RV1ٶD ?9|L8@ 4li c 4Zb\\U!Ԣ/ :T~\-ZD^MjҤ ܩ;w6lnc7n|CBg{_$|ȊTȄlfo wkMOVjL6MdÈˎVʁ1-5 $I%BZZxyy_vlw:oooʦתU׮]NJdhƇ~haacMXYR 2P2LIwԠ>W4Z݇ȳaZ^c cmmj*~ emKpXD! ,>&kզ! ^A;~Irk1+FZQ^=S[HQdiAtdWŬp/I?~gx$2ϸzmzY|bҤIϞ={𡯯opp͑G0@}˗7kX1œ;bN6dɭ_ł@Kٛoė$2B>Vzj[[[KKAO] ^S/jnݚ𱶯c999IϏKn̖}܎Rb>D y%c_C<1@ c۴WhӦ|DV*߭Qʳ#iMnſ_[:*y~L?!# J~XP UoMv>`Ktyg >brPPPPPPJ(y~L>f$G }N]? p-9'F~jr#M%eʔ1 (QȎ +("^BA)I~^I1Wpl^6PSXD_ir')9:ã  !|{ ҨY;[{8xf)YZ˺ 9ES~.WdM:N8+_4+W-wIo߷NfoV2}úKXŚ!V1BT)TG % (JD'JK=뇈]e%̑ak,{wqI';d)],/GOnT㻚vz[/$&ot5s4ڬUyj,vzuժ|mC?.{c7;ܥb,[Lb ((ZZ1ZDpF+kխ 897[Nrpx, ߮^\=AKwXՋyѯg[S̶Txn=t-Y4gO [oxY~ICG5i4j^ce@m:ȁ${d6kYXXE;/G/jbUghétP~yOTZw;p(|'X;ݔ;YI1Ђ}פLXoR֎pjȋ^}'6x۶U1K $;*I$2H͖1Q_%XPwmmmOV6h8CGhκFEhZjYtGXL&Ή?ÿh46#7~˦TPJ( PcUU U!M[]N0DZ}؜Fw됺cDlr%rbEYFM2_>]H/)xIg\w.ot4u휳%Ѐ!^I@ϟb} G8@K<1[| @3 x>|0ЁkGV>5~ޅ⻻{M*viUq`WJUcqY~Z;*AwUaNhkd9UXUҺlAድd ҅{<&?WP.ΗUҨ ]#$V*m#}Ti䏦aP+iyj|Ϗɹnck;YyZ;V=%kSkd'\L?\CJVo[p-' JTϞuHI]T/r$gi"HwL({zK}̳;jT/u.~}c-W;È/ x۶ZzMy' 0'I?Jy߉ #(-<[biU~#˚p,qClFJm݆̓)=_kr)kpkXO%%kSdkd9UX*i]j fZ2Z9 z7r~cp{yz~L笊J#*̚ mwM#CbB폝|sw-Ykv'/{C| Ӹ*p{AB[cł鎐@@5Nl`wGgPPc& T>4{}qzҋ]D}Ǩ%@>d|۶,,; p 67kXc}M\CBw =cR>id_/ſW/ymCy%f,>b_~@ &c@ y~NӅ?sN;;2e~DIΙC)Y& @ A{`aV_ihiiܺuSٳbZ*A*T>v(_Yo:djϩիP+++kkӧaᘩu&Ç;uTR%?z:ʏ$_|Vy _VE )i hG0,)R1 0-tS~%i MII?3pٲeu9ӗ-[ָqcQK5t$k۶mg7mԺuj@b͆Qw+KZZ0O>8gu?gfϞ/2UeV/IR[HB `a4Ѝ) C)\p_ Xp_zu TT+`[[[+++VH+^|9jԨj=1V}Ĩ޼S޸qcݺu˗/ʕ+$?##cȐ!+W[tuVVX,ɟ2eƎk3GGH}X6mN|8S3A:aX.\VY*U6C0Օ8Pj T*)4h x,#"" ꗚj7م/8H'''ӳ^p]B%KdFd'q4kt2Qy~*">&1͛ײeKHC!b 6lܸq€Fb/T 5(aڵI שS#7ˢZx)mܜ"tLL<ߜ҆zDb߾}pl!ܹsyyy-WQúu R+d! $ 㮃rLnիG'|<'t(5LEv*A\8p $u?|HZY~S!=v؝;wjtk X(A٥$hфph*i"@;}k c" P۷_pt3\Ϟ= URZjȶBe PziH˓d4...G6ZhӦ ,k^ }jժ999AUKY iAJ@'8u\Fϟ?Ν;gdM͞=e X^jUI~iii|;j~CQW1O?6lYŨ@H +AYs SQFD1 V5k:88$$$ ]]1G;Pd]Ý8p([Lcd1ZŋϏ W9SGL̓dC@ o!ASRp&@ɋ/*8+f1ϡ 㔗S Jgɒ%]tQ_|tn=f.|Y?;wUV@Q )Fe]J'melLӨY~A{.Mgg٩%rU f͚~<*|rH]VGdc _m߾=ղŨ@p8K8NP7@}(yRXcGuuu[hy˦I&p'%-g'''333@,`[[[Zd.XR-G H%?C 5j@kissswwwA!YilacXh4BP2†J_J9k&&iii)uBN:K?< S;DJ!<~WlQ="1—J…=}PUyޝGQ{W*hȾ( BHBB Ddw@Qqc^AeΈ(Ì À@PM6dRUz t:UnKܷǖ?P)yϿK݋RC4:S^3f0{rq~X ܹ3''gN)I:g֫ 6|#8x)Q%j}#%im/1wSLIJJPB>}qݸL2ӦMo@=I!Dy OyMd?Ÿ qM<>@|ycR!D]koMyLbQ7XFy |y,;@cc0F*eff~~s Orrrc1쑌"1Hr "=E8q>X]'1|K.sBG:XXBM6y ye #J5!#$Dz *ejoBGk<<֥y ty ++c$D<Q1_  @|y KiߡCR:tT)1yXTTiC'u<"y <ֵkws^i|jIG,I1Jn݊k[PYqc0f1mcƅ2?A.yL1"ė<ֹy |^q#y oc]cǺ2y -bcf1ccz :qcF$+O@Ĺ1ty+4ު"<_>XB]c屼"䱮EA/oy&U,#y ]]K1汀>8~^)uF'8y ^17+~%@8}^y1Mn&@ 1{$311@81pX]3#C/@|+{&D߯$@ąǺǺ;!C/@|c=ӨHWeiBP( R$2Iprc}MO3"BP( ť8H1F/@|<_1rc*yLx;w3+yO;.\cT07oa!1cg-[Zj]vB!><ַ-FqcF%۷/??ĉ/x (̂<|'c>DI&޽{ tyum֭j믿~嗗+Wv>{;r]tرcǏ_F>\Ry/|}+uo2C~~п5a L&M\#2<~zTCmvڵ3h 5]f(?[{7--Mfonvq r_~幤Ү]Cud 6}׭[}|ꫯvl'<&Gi(rd)4q+^j7QňٍVbĬH)JylϞ=e˖Uڵk/[L%UREk֬9i$^kԨ|r{ʊ+TO?e;c֧Q 3M4cǎ^fu͸h>|}L*]ޘ_Ec>}zݺu˕+׬YUVYf{w7n,yfΜi2sĉq?>|҂.N:t_~TժU9&c&&&{뭷&L )Z~?~Pw[vYu-l_Yt0ԩӫj)B/^ܡC)'OU[qy: D^z+c$!G!j!rͭP¹+ve_~[/ 2dL׎}mG><))IO='~LB; Bc},yc>9ׯ]Ϊ՟y9\rϞ=[njT.]*׿ոs1/IEv/5.2>!5wyA3޸m۶y^{e6y-ٲeC&sIgW@NNoiAwxعsRϯckReYf]pCU&Mx1cdغu6(#eݷ-lyجfֶL#gFwر͛ˎgRyuO n:ގ9R w}'/""^hr8 r7[f}LZ #Fcqn̐^=n\H7Xy.נƸ[35etwヱ FڱCP}nذa̝;WԜ9s[uYHHHܵk׏?G}T}{+x饗t4hРlٲ_~DnbŊǏ4/߯馛K>rrǪ;w۷BTa󘬻t0y<\;̼qdy {#=tcٲe--,<ʸpK1Qyy[Qrz!9ұcCә,\2c=h?zl˂.e {y놙%!o3mH:u>Etrh޼}۠{'|Һukq[Z0]rб0;6fHh Z]H7X.~ z?ޚx?;N õ㲺#%]Ziy,"ǔ'N̟?Zj!3告풪Ȟ/oXT}޽YAtef]s識4Npu{Ye-塮fr0ӟd2sg}vNZqÇ?㠋/Ȼi^{3>f 2fgズ֍KteGwa3נ`yi2X!n];axvn讏mݺ~&M2&Zu<֫y""ywk׮=rȼy󒒒C&sʉI}@߱cGg4ҢEѣGK^=z.] ?Uuy̽ǏٴiZfM^^ǖ,h~h\*?a [5놙… WU`XxqÆ ],شiSY,)s>`3fxYlĈj&TҜ9s$qCZ0|p~ltݾ8;1u/XuO;3ˎ,38n5etwP7ܺfup5j۷ m„ -Ôr%/QDٳeP768fYL_Q+W6o\Z[?oL#@߾}˗//ʫ\r>8>tY믿ʫ[}?+w[[q*T} [5놅YS}=0%%_W8e9N?(1ׯCno֫W/!!N:SNpСAB*PM{cr>6Mu\PԺ3غ2 \Av0KϽl]SfAwx!x|uíkV7L׎}mG:TVŊ'OliyΝW\qŘ1c\Zs)|䱼B1Iف/q b!3N|0"EPcÆ mNNN#+;b!3W\0ye<6eʔ *hOy fA ܙ+.avc`S&&"yL<G1y,cp'Y1s*y)c?yWީҳQb}#A8!#Lca1Sy)c]kB<| Ey Jyy @ ]8y yL!<~R۷/yy /y@>1c|y $7?4}dI+@>x>'5S"c[c}#c {1WtcX_I+@>%٧8"x_{1)1w1kG1E)gOZ5)lkr\iy,c%n3.[6F*zZ57sS4h6ψ<jjU'-}b-eAJycfɒ_ݸ}SXO?SmHmyX=g}ėܰX<7""HP%1§zɣjժ&Ǽ7J/^^XAʐ!y}qYsEc:n(݂A7} {[V7Ėuw{uIС/ y y,c%K۱c-)o񜜳lp_;th+iJJNNβTF-X5t耛o,S3ޫ҂}dzPο۶}ϟ=kRnjz֏,goȑCTnDeݲ}{۵+yÆ 4je<2aVV,k9qC u[euClYSAqy",En810Pڐ"}Z ʫϘԧxRz{ĉ/6wcCRL3:Mfe=v2膲<0.k[6qC ڲ-첬[rPG1LCi%1{XǦM{kv5j.6j\aRLygX% gK޲eSIktwiGl]m8/le-}rㆲF3J${׍;v,0Vrʕo[N%{w\#G͛i,77MHӱcȑC,KU8gΌÇ+/I[&%EҾ$&^h|2r?My؆5k˓ڛ1VmuPe6jAn27nhڔ{=ذJ`ЖeuClY5E+G*L"_t٤]dٳ\10PڄT$y)c%!W/իO%gOiذ^ٲ 7xWP߿kի--שScGO*9Vj]7qP)PE0K3gS<&(1cX_7#1p}y f~~3AzW!¹1>y @ <A1y,cy`oA>xc"cD>"<| Ey @ <A1C8yb}#!߃%YcI y @ <A1<7˜c}#GUc1<| Ey ;Ø)٧8"cLb}#<A1C8yg](1y,c> <A1wA1C81 Az<"cD>"<|&T0##1Byy @ <A1<&K34Y̳OqD>X7#bc}#Gsg<| Ey @ K3ܑ<Մ<y %ccX<ń<y @ K3RyܹsecnIhac<d91x#ė<$(i\X/Uzixܹ.]JxcLy*1 WguV4h1m0{UPE_PvAX@ #ʐoK+y쬀e֨QW^V :"Q禹s6nsΑ͛gLU[s=TTHmm۶ >~۷o{yވrDR(ykp yD1_ݾ}ԩS+V駟Hdjժ-Zo՗.]tg8q^U:{o0"YW*Uzu=ztݳgϾ^ IDR_Ste=أ>:p@cc:Ę>yڵk+WI&~w7ǏQU~aڴi;wVǏ?_|q~ǓK ?z`իWQ_6K2'W_u]7nܰaCzzwm/tl-;v)Lnj#kuV9ow\x8l>@h2t9TDK䜸m۶y^{1Crrr~5QF-:tЁz7r&m׮/[lذa[ Z{GRzÆ dl2#Gn:JrpnοǍ'KwP#S*}'V55bĈ3he'|7$tmٲe udeeSJv 1{ܹ=-1m۶UW^yEս籯J%ɔ-[VիU&oU}իW7Ϸ73Aرcd-TnݺׯWu9 UZq=\^Ğ={e|̧*str۷O1ϜdSn .PH2 $oѢŸq֭[g9yJorʩ%~HE"jGBd yX erss+W\^~McgX.ycaocrJéy(ORdfۼysyZj+VP˗Ccc]vUڵko۶>"nn'4iR>}ԩ16ݩ<Ԏ/HŸt#^{'NuV\䬽x[:y?OgtkԨW_I+>}CM6%''?s f\+Hо|˫ޫPN]^}^y=.t^XBýq)١C S,yhPvgϞݰaCy1wߵ@"hܹ1BWs 3y,(s c b<_1"WG@Kҥ߻{ÿd1=œ cB\Xcg@I䱐qℽҖNJ-ncM.OgϞzE U9rdӦM YwNܹsyL|wQ1M>nݺʕk֬٪UN}/lL8J*>8v]wݢE,uY`ժU'MdDsx/._|^^ޏ?ho_~[/ 2d<k5[f<>INrZG+~3fn*dIn~}yU#YYY#Fw\׵+بQ#9uCtCڵk'F6l{x 9kȮ5x`tY[f5k\ S&M]}{ u 2ǎk޼ƍ<ݻ䥺;@^sw42usAaK@۠q-]R3j(wrƦ38c3oye/U弼-q(D-yI y׹zꠋyl߾}~e-Y~嗪.kylW^ѣ^fMc 6.~.qF_60um v^ens]ico}AV˹\7tY}{%o߾O=ɓ%fWĥ۷o7f7oVuFeM:nu %EBhw)!!'mxyʼur^dIrrUoYļvA_J] zX2e0e<)RrVZ6O?C,xhMqx7޽q{n>Ȳgd,d4`o16.mV߱}z[ӥю,Ye˖ɛʕ+׫W߶o:݂Mx>gΜ+N:Fx0al_ͻM#8"uCt!K'DKN: o)M,׼ym۶ffY$@dc^$Rwn]k׮R"Î뭗mhw{N:^h Yn…*}V6u8}3f,EZD<&?Tu|" dիWOHH-h'K.E+S<6nܸ *eBSߛSْcƌO8֯_߯_'L vWkСC MT}uu].yq|zRNS=zTv$Ik+Vٳ|Wlƍ_dB]렛{ʕ͛7>K#?믫$eiKOh۷%伬WhmBAX ;^}]:$z]:iZV6u8ruYܼ EZD.upXBAXi/Iw04h@:.??K/=`} RD٥3QD@P1-c}1 $Æ wܙ g}o*]G@lh?T`;)S$%%UPO>?S 1}8 v)f8AH1Pc0F <|汢I1<G1y,Ν+s/@($?HG #uhcXP*x1s3Xn!@1#Ļ%%\#D9oJ@IǸ> F籎 z f.}ǎ^9n۶mfrc"Կ2TQyLҗ<`ɓ'o߾=ޫP|I{?#<~KSc*]v-\pƌ@c̙٣>gdI1 { )efF2K2wJSI,@}jQ$e4Vi1c< _c)N<[^W4*W\u'=LdGʱ0jժ_x?xx\ʘ2Tnv/Eckol`䱶i1>lx]tќ߉H{NK8 96mR.[1oQR;C֬Uy^/yq-cc22کwS}L[/K}ٟ,Y..骵1c'ԬYlٲW4jgqlS\6eIC}Uf?Ƿؽ髭|V9qƏ3g}v_; >䓣G~veOņ/y?L0_2qرu7HI9.nf .Q?a]w-ʕ]# qwjQcw%cEyLN !uS6?])%%ݦ:j+f_~?y/6XE:uCתu/]z>7Ⱬrǂ䫊+Cd$' w2~)G;sǎ{BZ+՟3&W5X/:ۋً֭[81Ɍ y yl _~R7E* ?/|qjUjj. 5*Ur|5k>MJJUyi-}X~SBBYUR:vR9Վ;IMJCnk6]s:z鏪e~fє,ml"/4WeGdӑ#GnNNd8q?,%J:tǟ~ nj#2}Ҥ'7.oC'ܴ8iҤ~THInfA7RիW?x`3\w]埮)/Y&1åɱ}27(=̽(YBa #c1HbvXʔ)#GNM2E)rUul>7Z|)g}ю g Zl%9}_9s9ZM9թSwgk/eVY[36]6nZV˙4We„'y=1]޷lL"o5tJ=4ʚ/6xcNoÏL7*'Mw^9idҤ~dQF՗sIORE_NJ{^/YO٠ekԐKtc, (=̽HW֭0f?(imUq߀?Ƕl۵62xnՂ拍ԇvc}\JJjڠC􁃆6.J V翷_w07{}Ozo鱫?_%9k KcocSRRʺHiܦj=fJ}Ш̭Y7Wtm6nZV˙4WÏ>S]Bϲ_ Xv7K/L7*OZygk/Y/mZtcYX˹~Klzvqrr:==Y*V}9-=-]l1o7q컍c,&kEJժe[&C'9x{5ܥۊUkttΓ?72jזvWG 7Au5j|A˞zY]ǜV_}#}*Y9xs+ڭRj"jο9W[hҸkStԲΤQ>??|={ L|>ѣ'Mzr޼wUFE㡌?1O; %-xwɓg>OF՗3{ÆWV'L8RO>5K%$$ԯ_.tMy^xfj4W^yՀ/+бWn5ս(=̽cƏ]>,ci_wˆG c?8L itk)=UOKo+>2E͖v՟3Xqөdg\T .S3HLvKV.++3]f;zzfF֭E6R)iK=}v]uޣ[ϼy7sۧ~0A*9R322RSS333۷o_d;&jVS Td-Z4nܸQFM4knFi0M6=]*Z믽Z]Zyuj *Uۢ;gpˎ~@vxR)E_A %{2wwJrAk)ɭZXPOK MFk׮WWeZl)պuk{҅"/TUNG2WfGZ#¹#k* )t9S>u(;f&quKh rܦɧN;U jN^_>{O,K];Hjy}\s 7t^Pd:Kֵ{n~}%}ywk#7;oT&Gtjߡ}ǎ$楧˿:uӧw5vXfǏW!Mu#{7ܽ{laҔ*lT×2XM6ꪫ: fim۶۹sgW'7Ba񜣑S3c 5Ϧ'1+g3f5ᆳw]+:TEMרY]X%5k֬ ˜fO:0)$:NM/,G"&`';+Yu'H‘ f}0`m6l0T{G|;4hP^^$:Y6=@* [@5۞MeȾ'#%u4iD]UJѣ_~={)O?I_ΰ7c}ޣ8yA?kR3.{|1) fj^GxNJE̎^I0-*+cpx[u`"ף;+ eT)|iDVIC?>>ٌd1. (9y4$PM_`GRT,Ҧi1i9:~F`w#<9qَ;HluS'I4ȧQcW1dG"CA/p@)d1pj{jRqƒ$AF>a5( 訨FO3 GrgZ/.<|oRnm> stream xӱ 0 '0[\yl0]]_.9(a*1 e[N/ endstream endobj 91 0 obj 618 endobj 93 0 obj <> stream xWˎ#7 +^zE?@$l%(~ 3cEdUj3s{0ɏn?~~4Y893 1:y6|@<<_ 68zL4> Ŝ\̈́5VlYK@ W(]seա%S߰Nw(4Mg+rK^1 #/WjB me=A,hJOh R¡8H.8!" -|$/@kj-')u-ٱ<4k 老>AT[-ޢ̍Ԩ .14c @jԞ[Ζҵg aM֬6*a7wTAL~q?X[ drk ztZ+ > stream x]iPTMYhb4HbbĥܓEDvDQDP4`$EAM@dʮDdmXUdyw+{!5ӧ_}_@RR1 #b pue)AYJ!|pCT]YU~MZsQq~Yi/^|'),~TxAfXcm{MKUs٭ewc2wvt ؗ@C2sn֤{NԤԤLYAfiMʹ}AcD;GKhV@qg7dಙ=~Kd\yu zayyfiE^ &(Уsnڗ9_{E]ơ.2ùlz{{3oKKK7l@ʘ|GGoǏkhhO-c^dP;`-;vV^}AZg|asNE}QgeSIgaEKLjiW=CP9-;Ç&Yw,Yœ݅UWU58o <7D.ˆJۀɽp3΅%% ]/E"2Ћ/vTII J4!!! V__蜜J$ߙSP Se)AYJ!|PRe)AYJ!|PRTO!|P=>z~?Ke{Qg>HPZUGG歽/$_V Ɖ(rs' Ž Wݧ;%s_NCC;>K{ekp*d.Y$k$\] >|̬/U(|-_5盧M_QU9CQ$^)4=>SO,H wKtݺuAAA[SSSk$\]F9UVOZz"!(kϋx Jԓ3 B_Z_R w 9a_#ȑ#ɫ*x8yùm?)iDeC  {} >+#-?+q0`>M!|PRe)AYJ!|PRe)AS ^Q=>\6z qTCC裏0{KVM__?8S"GP=<B=~[[۔)SjjjP^`+jlll8ȕPII )㿡z|܆۶m#{cǎq^zɕx~?PWWG*aĈ3gLIIBCCl)j[n%b~P=>@ʈ爟.\(**ifxӦMnnnN*oA{6n(1rP='|Bg;9|pad\:/ar|^l\cN5q577pLSDZUk5co\8,QIYY;&╉rlj&6LSI.=~=!'m;nyZDwɚ5F1in՛q3$M'P=>L,EGL^ #Mkkkk=0XvGLi[D5KgzVZb ---Ȑ;\6`@?cLL )#A3 d@ɜa֤rڴi8R,ZJyV ~"y.=޽{AQpl…Q5k΀&OYKKKRF DW429(8q_z50= Z(թbpfYpR.=\rsEك &ӯ} .?!nU9ť7SgX N"1w *"_=u b _c)< ZAT>#.?~]Sōv([[[ KAKl_}b)vAwBAR8ȴgϞ=c sҤI_|IS &Se)AYJ!|PRhRR1 uM endstream endobj 97 0 obj 3771 endobj 98 0 obj <> stream x  OmAT endstream endobj 99 0 obj 39 endobj 95 0 obj <> stream x \M-Qdl"HHV%:IAE`deh,,f,똒l*}}t{[u#y{|smժճT={mݾ""""ТE_4Z tՄ&'''$$x{{_(7UITFCUVFױ1Fk q9|ڞzЂ6f̘QA̬zŕM ǰ Ì451m 6fluPfh[J7F[){`fmH07V3i"^cųgoz19]m?-©SGF[u ~kܠvqm9@K&LWcRǁj0nO$ vHLPUUUyiiNVVJrrnNj!a$ +PI bjjA멫#ǀ 5xF4m0nF*A$j4 B-S!BB$DO*O?.cX>?qn?=u$&*OmsjTmu+ xEov'|rGm+谖 @Kt?YQ2\ sQcMd⣴͛V:nAӘJ DB͛c(2=Vw@GW ^K7np /@T +Q5oLLL هN/>0c!#L{N!AiSC&>hk"S/%P_l'iJ֔ zz9,Ç b;i ءCAZG>rݎP/!@z董uvhmAA0g?t%VAVǎO#q֨sdVےfxp`8 {{ gsZH.Eyye )ݻv1mcj|<@^N"EٳgPs玹9 cprpRA#2e\A,ipoc bX@>G j<tEsnH^}+A(.aܺuSmX$ 06m=zmmuz+(ZjzBsꡍ拼Vaaa}hJԯ_?ɭsƦ5_|s  ["k7ZPjD!u!B2iW n [Bm}GAa۶[9 & PF` dPmzȿ]ju%VṶ+LNa\NR[PЮGuڒjxՌ,Ϝ9޽Cs.=f>WN==%yYbOCƍ3gLjӦM;~SX:Zz}C1jk5$fN1ʜƝਓ`Rs3Lm6?Jր,'84dc=kHe!HɢlBH ȪUN6\\hP<Vh`ogu… .]Rj`ggdxeK+Kd)˘NAr|F:Y3SmF qe{b ֽ6Cl3ݨw[~ftZ@*A/ڜ MXبṜcf#8˰e >;zVeME y1ּr7D8n"#r!ߍvʸ~zH16x.)5spl0!Ν3w5[07o.֬Y hsqAc6$ԭ+Wčk;\ 4C;9n5 =RF H ^} "q&a|ڍm_9ewFP ySͅof4oP zC!..uW_'/^ ǏCe! OADEVp?cP￁P[j݂TǨo՛/YZ}tK<|w>m)PlG Tp#B'Ae "/N  x@ܸwwY pB0(k滳6mٴy|b6>45___T[v ||a5PV^ p_ AO)b~C F 3tH'̐;'Anބ$y+[M5^S3KI$T?3Dׂs羝3gDT@;?/YTTTQQj*WWW؝ehh(ˡ~Pe˖2f% {|𡷷7R׽{=&A~ë(lmm/l~fsnݺ]э8/\bð*2AU,EHKFR2C oذ⿧j7oY43;l`󇛽zyyy,JuBoF2v٤fA86˨GG=XTBO)k:1@'QDF܁ɷ(5rׯ?;v{Wk-\ia>@dlw4ijVa☙4iXn`_%f';AYfXXX`NNu-^LVq¾-aQf͞5e*0-`Qe@"S@GOގЦN ^D{$qRtXpCVԍu\ gV0N:_CA#+fFLLF_n˖[Vib4^Ò l+[>U[],<dAjwfnK c#ㆿV@ y]?beaV T 7g6k,$+Qfb$z35a6|(d4PKG-~}6t9>Շ )YZ  R{.H!,_c6"~zzz}/2(Ņ~O";t Æ 504 Z?XhNcqsmkIeȐbd!IόA٪fUꂡ0axH)*+S_>IO)+)ȫzc8 8E]Ϙ^=噫1c`|P$hdvC\Uc "KG@C>jS3\ZA{0R:AdHuK+DiF9.0_^j p$}8s`+UǓFEgwIS#1?WS̛,XFxm;n% ^ Pcb]E.  eT6e*ӧ[XB ,nRKOl&Y =όD|uf`GnO=?kF45A0Bv S)W4aJ% SVȆ<5=UDCل &&> „HC 2TwF Ax µ[ ՒvkUW <a,Dy5ǎ|hc`!G ̫ i4;XȔP_? qA)z&mz#u B`Trk)FW%W/bZ调 A}J:a17;Հqe=uu dÌߵQ;rzaOFdrz?_{O=u/ #Fl?uxѴ˕R*"aכ 5!p'JN|P<%"""""5%Aa oEk\ DDDDDRzHXWMHQļOBDDDD$X")]M14x{;B(APkK14,RPDB)WÛTqB!EBJҪU+y@DԔ""Q@)AX/D oDp~#$"] X V` #HۇذlF]KLԩӤIbccq}R7{l߾ÇN ̄)AXA5k֘"Kc+APכ6m>\} :VsN8׸~`ccCB"jZ222ڵk냂zպuk`yVVV@@[JJ ҥ D\JÊs玡Whtrr\IUU(l޼ou .!FVOxƼcǎ{eOr.f}YYd(~ڵ_5Zt钏!R@9CG+Vppp ߟ9̮mmm >{{{zk>))ח? .~4ŋfϞ,]4--ѣoa*2߷ns 3"WWL\\\X 2wԢ۷3tAKKKZ= ;v033ϟ?6lXUU,B?111 DJ)B,tC|r3A B Fp3{rxxxϞ=q3Tӧ()*Cü" tjK)&s%[i èzZ3T$;;xi{D<"""pN6+$zHDUKƳXlb+۶m07i*ѵ/!qU[lA|2@ joe.ߚCWX{ zH4 ߄ʟZʕ#G"B"%!VKrʢ2Hkhf? A@醆=50m INNyJ.ߚC 2TLz:9k" )))p FkY DJ)B,AP'i eppp>dovssCk׮eҥ ijSN͚5 tٳпЄG}vHjj*:^Tf͚ӧ>k'NpyHB"!86v"#A #$`,;;;00O>ڵߵkW|s?TWWg5r oo۶m޽ѳIMX\)Am#GLDOOO?:hii}=r@/_655H)E5K"s6m7Z&111knHD &ȵk ʕ+[uҥQi d|ΫWnne!KQUUݽ{wS7ՎUMKÇkjjvݽ] DJ&B,+ 0JZ DL%"Rd`1 Ҁ;DM+%# CD"!"Rd`Q B"wIW)1bc(D#FE#2B""""""!""""jA&++d DDDDD&A%B"""" #BCC))(bZ5Aƛ3MB+(%FXϿ1جlWL1b-crR^TqB!DW9/R3#2v7KH&A"Q@ "1b-cGql|!A,1MgZFvbrzUVM1bmG~*{q H PV_}xxx;m}Iz pGuu++nRZ,#FՎD1 A f_Y <&*G<6l8u-kKEbĈڡ#83B%(##]v>((W^[F<==ߑ QyuAKKk۶m7Rwِ*$Dqqqeppp>}=cc7nH;뎸'+++ @SSSMM-%%Xy:Y 6 D'ܻ[aʘ5ZQ7ܱsnoh_Cĝ̙n'sEĈ):썣bA<Yv-Abf||&&7ѹw*{Tp\YKϟ?0ǖw;d=x@H\ĻqIwqń W٫P ƴmZZڗw 5mmĈ) >JჺqT!  &,m۶Bׯ_N22t0."ȸw?W?pm%jӦ ="-3&6El&M>pHD>aZ= XoOrzB,D +k&A[ck'2r2 ed5!!!999/^JC={GWW7::ZP%&HϰAoEl}&g8cL֖\Q?EY6'FLYmìoGOb A>,dD???GG8/_0eʔDȸ PnΞ=M*AnbbqFWWW\?W?[lqpp>$&o߆M(WB H Ac"LMGchw:_\EOEVֶ7nfiiЛ=1bmO AZ ("(=g55=z@>%.oF__m۶{޻wTpÇLO>';;;00=fdd qT<6hL]cǵu>E+W+l{gR ߞ1嶽B$|1iB5^{^I/!SŶn_#j{qhB$|'VMLLuppe+WleҥK-fR֝p}~#KcbĈqٞeo|A!~WL XXgZ3g uuYfʲIhhhCϟo7k?LL~ ~kժU6m6|YjKbĈ۞8" !5Z DT!<1b-c엽 AAP|bĈ'{G H (+7n%FXX7&rG LoDPX DDDDD !QDBDDDD05L DDDDD !QT ;l VLDDDDD"*8Ad-Aʶ.;Ad-6BڵkRWM""]2j<2yVQ%Mՠ< )[;;0;{;A+PX qԚ MrPJ92DDRC V,-߷B@4qdȑYYYҲ \"#Cv $C4qdŊ'ODEh9--PGGG(t455RRRP ww:hiim߾5NBmzϟ^znuD^^^Yzzy.###UUUp͛7w6ou .Ӯ];cc7n{HT^"~,$g#G0HUCA߷B@ i"ȃrrr`4,, v 4(33ÇwTnڴ 6Yr% Tll,+ڀVZ!dǣE@]zggx 6Rn>_xdrrٳqK=zcǎ "{ƍa= T?9Ajhh|Ǐ/XyDDDDt(&.ɓ'Cp8w̙ܺsN P LD5 汨ܳgψT \ Zg W2C9U/_I5n\IC-ހ762)c\꟫3o> [""&߷B@2i!ȅ  1bZ JgϞ8p`޽qlV6m@3t5 ,\چY͸vAD{HmZWЖqdSιsיz**ݻwׇ󈈈d rСTx( JG裏ϟj`F쐚@!5N.h!3eC!!!pP/^h 6 \6OY:)*?{Lj\pY$~ Q}Co%OJT 0`Wa:lذ۷oC-[߿P6j||},tHѧ'N~Vx櫂W^ddnbRW A&X#DGO .]K6l,Y~ߊ2υS'XW9`@[a®BMm~厓˝]f)]SŻ>Rͷwfǹ5myDB7U^=zTE,/4ؤ`@L@zUUmUZj&٪;VuxGE]Kз_ QV6%K>żrk"""RzQ !yJ(--߻!_@jP>yJ@#v/aUmN&1aw}+,8UᙯE)&Ȟ"BUNNnffݻE?*2raWMqjИYIU*jBq~Ib gwUV6hsɍ]""eD6(RR]/:\6c~:xt"uYع@p`&*YM^`a{KK}xWP,/,W,/GؽtUQ- i8\0x;&DD$L bmM^S Z')Jcr%+7o)ޱh“ yw|rO@ؼͿ.xALɺ %Vy?X|;,>u?M~FDDWBr蝚ZS\:0gmUݵANQ^ѡ~ɋ|r7 22<(8hRp:ܦ@[ezW_%&DDD#w0 eKg ;wcN쫪ѣҺ$`Mg7)^ZZݻ}V⻼Z[ն=Jf$‹i""ˁM T GG هe&֭0(YPpW%p,!!?7l,k!γ%Yn}޳gv! lcc#oZ`[٦+aֶ?}{oR(}t7v&H+ϭ DD*44TBQ)yJN.:\ٯ?Z%;vG<{WP|raW| ;Imӟ){c,BPzzѮB -M~s7n}0%53%2X˗weo]>h(=Q=$Vǟq+BEPυ=z j 漼zEjڋ; /SRC'ώ}|Bq Ʉ HR4 ._0H;w ڗ"CYJ:)7[fGql|!!||T#/INLNWkժU2̷w`(#Uv觲7~Ht H]]><<^>4'j_PjV~[?Z C8<) kXifffRGuu++n֫熸qDN tɩّ8&9!RS֬YcbbK"ZYY|q"Nsř< u1o!S\G~Æ orXI\-w=⒚qĈյCG>qg HˁfR^bbWC݃z1A^ .R7m #Lm{In;w-Ozߕx:' ***zچxqT` 5Oj?ϯ.}@---T,yoEFDFF(/Z($$@%߁f"HB.M^ĻqIؘ/f\fYɟFi:*sjK;t8b^L/jk\zQaL۶*]g-\gΰzHXsࣴwQq H@&!,m۶ʪׯ_КAM[ڴi˸SfWWӧO 0 ]򥵰.IߞvӬAfzxqHˌM&f1e/!Xܹ˺ mX7@&ҫ[GS]\UԺwXj mC.W|Rѽ;*hyɲ/uqv܏[e{qhB$L*DZ ׮]7D+WlK.%''0 ** 7S ߸)\jjfm=}l׍[a}rǂR?v;u:?bXl8(r?bo{PD +WTbmm|QUUݽ{wSPW qGm@̗Bz٣S׬i3&|]SExq/wr9Fݫ}Ǫ*CAٻB#""jN嵷2tqP ⥉ (o^+޾I`8@Xc\A[U.U%%[9Ш)wv)6t5n-޾dӇ%7^[W:ϽbrK+h\il"3jj j@WUjJ .d֩i3>ʿyS$"""eIÇ3¦vg䯔׋).0(*a/#k!$:TH۪ t/sq%?,,;ЈI &? XA LD(;;S./Z1L[uYMr@Sr2%k8w_""喣QLLL%?09NC/^ʋ.[}^厓ŗ zvv&Yr;ꝧ̢=$)eiz7bXH4JSӅ H*gE\0O4 c"|_LD k---[t5DyͿZEѱUjuW\YsʝT'8R@W ]N7a7Mtr؈+lf.]tɲR%l.:po-7?An#T " 6ʾFd@'Td8]oxvUpw"$sX>#566v 2'Q.!b iI/2bXy„ F,УP@eĈ ߿7tIDBD'HbrӸDCH4{lOOEѯ_?}@y5]!oÇzCͩS=4x,1M $p;qcƌA߿?d|@ֈ#jBBš5kZ_~?wޮ]^vev$jal߾}M3gD ź#3jP~zӦM0=kyv o[ƭ[j^%@qq}J>ԏ=Z lllEgOq @!,D}W;OԬQ322ڵk냂z/?`9MMM55577_ҥ \JiĊ[cvs\x ;cܺѣ3/ǁ0p"##Q}ii{Y%K"{WP P8j3 ! 0}NNN߾}>}Jޞ|WΝ[PPд;b --;.Z Œ86l50kH>j8Gв]b\1)^~Ϟ=9'LUUU^z:a&zk|9|Tvگ-^tGvtB,*& ~`ҒBx }h5Qs|@=Dxb "'#0NA: C^^A}RR/m+ @֘]Ylق'GGG|)SDl!੩EEE0ӄaAv󷇖~>s}ho=48D[/nlٲ:hǎ0b! 6X1|% iskLWWL fkQ(zyKɋ/jA6oA%aAxO pȐ!AUϟYO@_S:g<QQχ r.cLLL|$: A,sDHOЇ ѧE"6L qXXtttݻ={>}m!äaϼ";AMB[E19. ; ^PipHHTPs1߉ʐ28 ,Ce8]]]_|ŬYpp}ZZ- G/cݽ{2VPH#RQ" L#pGLZ8*@o5̷Qz` ׬ /cǎA,v:փIs:,XMLLN`2imd=\5 ySDD]O6 +$Ỵ#HZfl|A`S/J1`ObnnŸ4׷mFY:ԴM6P/ ;ew ihmkDžSӧO 0 KkA[ 4N0"8/VVVwW3gBdcm#˾`Ɛ2!mGn?&2&kff#01suĵ/x%$$X[["N 8a&Ca=M48p&#9|\ʕ#?2!ȋ̧qgXnL0at# |A"HQY#:LPHkhf?A7uT*ZZq!kr˗/sy2vXpBmm"O{Hsv튯cח \sN;)zjjjs<&P{QoQu0Nyo9R\ZYPP ˩&b^<\yQQ}|z#еz$ULsGObrYBDP?>؁d$'$5˗/5۲e 0׮]˼ѥK|݉uB޽i֘]K=.,]xgrk< ?;k?L֬YNq)u_7of=lIQPPd0GΝT;2t֭m5jԨ۷CĆ9k,\)kn:1o$||*W DD,~t]\A zDBEDDIi0]W>'!,!܅ BDDbGn A *G<:qCsB7*qq .^a5@z+.5"6:!,ۣxAd(/;DDDDD }}"L!Ta4`|H&yKDDDD((;SX "e}&H h[(©S:SD"_!|&""RH`.%oV$"R`eq|[(LӧO6 %# $o )A3fDqBB!" A0bD."!"Rd`F|̔ La^¿eV3­ZjNFݶxbeeDD,B,ٳgϙ3g֬Y34p >"TfddA b}HHF..9sf !"jn`M1o< "U7Rk|||9 @SSSMM RB\PPP^Zn ?۵kקO#G6|G"///L%h 7n`:mܹchh+U$''o߾O>%!"A puu;w. %HBBVrr2ZLJJѣTnڴ6** ={{{(hQCC/ 6b XH(DGGLMMN.\[r+A-[~4F5Ag̘2b9ՈN:am6 HP%j *C۷@CGo{rxxxϞ=qϟ˗/UTT^N` pMnY}hy1 r B!En8<<''~)Q$YEN nhh#*ikE|xzzz{{4_Ū `|Íj`p}C-]ZPyظ&|="!"Rd`A=R/5AY XzX2c ǔ)SAoAY X˗\6mZӼu ߷Bo*AD˗g8QLCQX-[-觟E?_IϿ?)( Q碓DCDߞ_D\ݸ)1uG_Cq?%-MG/읈EDYf NEgggZBBz:+==ٳȜks/w|g nYekцKL/sZ>Ĵȸra#* 3'ӯo?A:Z -nN]]0qKwX+jh 4u:WT =Ww1|d ߲ne3f;oxUpǮC>;Ss=}8q5TwұVIiԩS'N!Q!8p|/׭/s3`hqF$ xճwV=hw.SU/WQl^ЦJUjϐBW*jaY%:tMGdكqaO|naZr؉P|`]vvvv666~D¯.Q%+Vz.*wt>`Ao=aw*UU ͋8BՎn=ĩJ JWh3_}-/:&WHAaf:!(33766ߜ-^6AI+ BvTծCUM*. 0!SQj߱J# : ջTu eq 8TԪ jսjܧCQj c^>ɹlW@7rcKD+ `Μ9( orrr_/K;9Wâ9EE_]Ѿ@x߿r ˔L/V꾠=-*ZT껼$`W$æm;J,ZuG}E(ޱ@,޺dkKP(Y_Ȼó^6|KKS8Ja=CH+a7MPL$l0nUQTTanQRdiʻ{77997;[ޯ"#d6Xo^΍_͛_anY9x@[JS}yQ;W(ݭ#+l'OV>m/J6B/:\x: B˻z-^DnBjORczzywA襂~ECŁۊ7}XnC銕e nM9T1.Bb _}LU]իȸªlλEͿWn|a'!+''/)='@G?}0.]^1R+@mM*yxuw'9/gyaa\. x5l+b0z"˘ng6;WѧgPGHDr( HH7m ֆ3[=t* ؕzyo豂_~͋_`ɑQ9̋yZzђ.\,PCJƐTM`0vb 8>$fT ?bz~ }B9*''ٳ?.^Zi0P|;?P$ԩ46)= E|LsSS /X0iiy0E9V@#qwB^Spr]ɄWP|'''Dݐo5!^̿~=z E]HЦ};] ˴%[`_:hT=C8/Ǥl[SY޽>kB3sS^+?{q\A :CeBy)?e^=t*TXPE{_OI\ѱ.zD;v⣏?I{=pPYB)hסDG7}!!vԿ|"5S,.! zo2qvv@ AZZ99)){ zeQVU-(ڵ[DQY^H $>kNSgM{ D_I&(AS^)qdDD&,B_+6N]EF" 7QBHt_4X|N'W7+x"C,6>OqttҊ `>#O4kϟ?{9P,,D4cKJb8Pע y;J'~$&+=Kd=d! AoKmwfSܪUyܹs ̛!HI   "zصY|IzR,&9!Ϙ1} 2qBÇ5?#TO ?t颪,(X"c14K,Q]Q& &cIL3o&15`QMmWn癇gvnn|fvg}vʕ濷h[Rd\ܻ{_n|?iaʮjժxuoأGkObY5bŊ;vVAL=0ȓO>I{tԩhgyf4r?~={,mbuֹ\dM@|Ժp۵k'K/rxsmӦNrݵ} /[xu .lѢ,]YJo߾۷y ]v-6z%u'&@H rdj ɪ] 6B3|#? -2رc ?1ˑ^^^| ^bb",^~*Thժծ]UK1cԪU'FDDԭ[F6YEovڵT2x}ڻb!%%/(Dm;cƍ7dao^~}ذaUVS΂ )t҆ R4rRGvXoؿCHtd7 VH~~ \]]-Z|#K/T/L1tJ97k͛BβI&}l.FR5%REnnnT)T˗d|}o|ogOA{@kЂW5ۡcs(}!&jHC-FX$**YfܶmiӦk̙֬3$gw5 666--mڴive4F*bĉݻw9}ѣ&%%)+իWZń2nW6oyoy#M*D 2c D 4 YU zڵٳgwAsyꩧ(No)))ÇW޼ym۶No=LftO2jt0Krɓ.xR,K?yd˖- ʏ2}:2PNJ4 ˰i&ʠ|}>R䙊f- M}$8S$.2dРA1bA请WXA ,qܹs41Es3888(HܡC䖚zqN *CecÇC轲 A V 7j-h tYDI'ҥK,K;_V#q)J~||<@XEh{ܹS0jLz a-$-3!t ZidXX؀BBB WnݺO|]r(hؽX;n]3HjF\'vyĈژ1c 4p@p/32#0Otvvϟ?lAz~z*f&MJ(zD@xyy%ݻqXz͚58߀"&%%?HOO ڵ={6IFx'Ҭ ҩ?<""&thMef=//p_1c>,FL0M#E~!IAt)N;/~~~SL/ъ5۶mSuvtx>h%24 wD gR3b⒋/Йf2^x( 8p+?~°aÃB(A~F,=#`A~g}&իWȑ#,>F"IXD~vgHY,7dW]tPlv:Rܮ w{$/ C|IZ4l>!CPh,}ӦMd;w̟?=ԲeKZk(3^qt4h/t/^͛WZ5>rF(/Xj^3hGoߞV:Un'y+,,?EFO̧],_ _yӼn[k=?{i& '4߈#_|a  %JwܵtWVz30Y}\\#}:w\_~s~i36n2|n.n?VXт%,y3șsGcK_8y\Y,[aAlŕ;eݖZx~sOH;*HMM֭ ρC v0/-qTZPQˣ ÃAh^¡#tp&-I`[ŻnvzN-ZW>o}_{x13"(q.%$dꜹ7o^nrLǫg\믋iin> I?y:/ha?;Qt\}%p!ߡj5oӮ=^ŗ> ?x@߾1/o^^mgxԿZ)_LWAW^,"VB`[aJϿW7W"#ss^7SYkUromBR4Ba#Oy]섄Lwpо̎YڒOx;wEǢǚw*iHw;n.r{%**KMnt@fav/hySa>0M_W~~cԘvSmwS*Xw6ss9矬dY8N>x0?~uSxeT ;ε)u[nvJG_ٺ-[;L"e*E`>u*ύ]x#]n׻[9#۽͡2 qw\in|EOw7d rߞ}m~we˶cdzΞ~CϥKYiiWܘ>^;gq٣Wsols۳Ά$_{x^g;4eT#n@g`p96F7`p~ٲ[]6@vdXn=>ko >6ߘ;k?_~Y&G>+=YYI'޾#?sVFk Ξ{}קqy s[O&qq3\Ż\;UVvM?CspeD\e;(1( ̙_ n|97÷NZEN˅]'PQTA#06ݠfhM/^~7C煍1򥼡ayScn~=|n{}7gb'קȝARҵ\9+w9F 4I_7tX^/B%0ؠ==}78t1\cjV{q}Ѧힺr/2~0e nW RJ̤]~]n qr[at%)X; uy+Vc{RUhC(I ?UE[y,71$,9WʎUn 1/b)Umۮ~m I+Ǎ1dͮ=n=V72ȅ֮YjmZVmpq6nz.֍z]m{vLLVP5{CFFVBB}9k]^}:؀7z-o7ypȣ * +‹cEF R huS=B]|o%o^8{H9W_ٳ'+)p:`6_[Vŋ?\ӈ|&Q놆m 'hg@/C]oTLm'lHuÌ .g9^v}[Kk^Vju'ܨ\-b #fn:"NlZr2Q7:XĖO$z"u2Or/W׾+~+:gFzoΟ[s6nٹ7WF]9MUd'>w!UC6e#@"s  -vA|(.4A԰u{tr˸|65Ax P9 gR2 0GR b[L;0fSg ` " _2 4=7.|bOtgg%|NC]SjcF]ϑ}w/bE%s0ҸikzvN(˯b'uyמGcCB ZV7n;e6>A T` ILH:]vfnoNγiNLaaUڵ ʕS7mM=oeZZ}L mZQjNtzU )_9RvS&SfñDc>jغeAR3N@,MCGc&ۤ_|km٫FkZ8hӊurjڄ="hܦ;}M7EEβWJ^ [ v9@S.a_v՜:vcރ}/tqӎ㉫lMLxG D@ I9jժ9h"iE9u8i*}GưtO[lX&-z#bv/  r,& Ahy(DE v :9O!4Al GcaʤAغeAΦJA 6o#Q10Lb !8!$H[V`a߸Kh$~l^һ! A m^]0Gve `>ЧO $ > V` Ub-+i^Or2dAiBl2^@">} AB$غe\x|A qnno@d`NPP J( 0"p7HM bggW>Ah'm+VԩS/[J W),}K #T*S "Ci;#uׯ_ddɓ\6>кnݺ-ZTX_׫WV<, =t iӦ&F6olRDU;w}·?ɋ m诇Kʕ{2n)0xXA8WbYdÇϚ5k̙#F/^\~ *jj׮],Æ n$,,6yxU{C YdI`` ߾}7ި]v*USPfaJP揊jܸ1)BGH}7|sٲejU$Ta-K.mذ!6m/XͭjժtXzrrj*U啑'Lh"7l@K'J+ p oD%EC4TX`O6m۶,}ر={LLLLHHѣ믿.͟ZZ)AΝ;G#'ϙ3RJJ ѣGo}uVa˖-ڵ}d:>ttI ʊqPRSS]6{:t__ #>>>SNe͛7U׳ҧOޫW/* Zt̙_|QuXL`N=Xjv֍Żv߲9y$bzxxqqqbK & r-K,NxN:oᛪ?~O?T5j ӰK.xnn8MիssQZ2hN+\Zne`)00bT/d/f,nAT7iԢ#.\f)}ʐa[썔/_+WN-|S5?UZF əMGƊ5 P+:uȮrd&kVUVƍ׮][p 48mR"DXdK BkÇ8AhS5Ü AAA,NTI5j8p{キpA)_ 7b biäkxzz8EV\}+WZkM*?I*H :̛7iʐ!C"""(ҦMiӦDbcci#͚5iNkd̘1I4ңG^{M?AY,ڙK9rDĉ4!߿?Kwrr $cV-[y##ZYy.+et Ÿ qK_zuƍ 4yp򋳳ŋ _bEӦMTuƍL`΃9VDZbE'''oo-[SoA-0Gz:S`UJ $ 77ӧgffB8q rݽ{W-0G !!!Rw)}ƌ5k֤觟~9s3W^2DFFzyy9::VTGaF^^ëVZN QoFڵTҿatGEE5nܘͣG:uڵKٹz>l2Pƍ7^zF^~eڔB#2եK6lذB mڴ/XN{@ 4fͫVr|.ke6l10eXx15ӪUb]@  ?^' ӻuC4hȑ#Y:eX|9 ǎ:t(K8qb)ӧG '$%%H^3<<\1|sر2'$$_6mڴm۪S -+p\pin͍===iBT"fC{U7)S-<ɓ'Yܹs0@P5+Ӏlo|]"mҨQ+VDF/\j/YZpA8R;p<}???FllV/__Dk )]PDPOkjM6@d`NҥK }⯿b/[={` 20A80 ‘ "0"p3A80 A@d`A)1`D~/ b[`D  20A80 QG! b{`D: b[`D  20G [L 20 1 20G  ýkYno@d`LxAl  / " 20A80 Q~ A8ߋ[&AA D`D  20A80 A@d` " 0"p`A  P5` 20A80 1Ȁ` 20G AÔѷo_ "[&A#3H_#0mAí4S#no@d`"H_ 0mA#j.\*1`Dܡjp}P-0"pdaqĶ  b[`D$T [L 20A80 A@d` " 0"p`ACTA8J} 6@d`AJAJA8 20LpغeA8: - 7)a`D!3T"no@d`u{0"p7[&AcA[L 20A80 A@d` " 0"ptY0"p`A  D@`Dpk_HAD@d` X  /90"pd  D@`D* tA4oppeu{0"pWd߬ A80 ‘~ "֭3 $ !PCbl޲@@A԰u{ Y,} _! $:}: "ЁDXoAB }H( (9v1zYi ZH ȲAZ]8~]jCVV|NNNZ2AN>XRǏUV@WX?dfR/&Ja߇}kԨAtW˖tQlEVs;mڼ8jX|=2Yǯ֘SI(2 /g&]K =z7Oϟ߱c xχ R ddQ%9ANL}^5f?XյkwNJUF0qJ-Kr%%STl2* ' xWP&~vb/^?~kʕSRRTzk׮]JgGDDԭ[:N>lذF¤3fLZj֬9wܬWR:]_q룏>ٽ{wF._6)B{j/%zuz(;kiʝc0yD-4vss={QN~8qJNLL&Ƹ8:ȡwIII[ZlФ&ƔBt͛#ЦY\_}T,ݻZJـK.͜9Czz-JQH MLс ÇӫM4aoQSg贊@re#erpYFR)fiS@Bf2dd."K\Z=ݻ7IPN=*jm x m<6|@_{9z,n\V`#_|Ⱦ;w~ŗ^ġÆIgϣybYpZ?цة=#y箿CCjBX8B!C&Nҿ{jVwvRYfAN<"8Mh4\\(Chӥ#*˸yCUKG` .*[lii-<ٞW6R i IyAoh7:^޾4t*,go┓,N:u)P]_zyTn=(ҺXڵݶCu==7n2g޼u'S.i:ߚ9jE lOX|])%.iZ5` R}I礽ZjNgӉ5Q!ٴʯ~՗mEFXBիXAs[ZmUZ2c:]PWd4s-Bg_}&MlYFʼaÆ3fЬN26i6UG:uB,Yp-:,;T\S{eN/m@e Z) >䓴Ik:K=T۩tZ e#eu6-3>2ܘ&ml6@|(,Nڤ 4<Sf֬u4ӳcZX9q 'I zzɧ2e'-ϬK ~mM=oe-HY^/#]tY8h n 4al"9-҉+mYk}~SHHȜ9sfϞݷo_6V'+1S2 _LZQ=+hܾ}M6kLK<*=^ TUJ;+l \]Alewt[n5k9Ydk.])n\|3N=*v{F0$5CCcq*Pߤ4͟YMh;w~~;us;QK*kkCG{xܵO53MBl|_~C%jHY_'rUPp_h.i~'bzgϞG޽{U2ӄ~fW3wcރڝHm[~STtg,z7lUk"k!w7%MתZsLa?dRBf͚)/\T*agaȐ!+&5jD'''D:::j],B%4i҄&B?ơED#RVdNg--Ps,=&T\9bI ,@v~_ ;ʗ/O7 ;֭{إ CNI{ꩧ(駟VD-ZTXF^x~%IN:Qd*VOʜthzO,{{{Z,L>]vGC[TwWrrrժUcǎ)ZN0N=* ԩS%ek>[Uv(, f㛇 u4BdiVoQ|mT7oA?n]ÃLMsZP#uZ5ey!:I/A2ŋ{3eI cƍv SE?SN5'33ȱ"Pl 3gͥOqg jر_e3gM91H|||˖-i޵vn NChڼ n-vwEGcU CmZtӒDԓ9\2{Ņ?lC 9~XM:mT:ߘV u$*!2 BcԩQq X*?eAΜ< Z8y\>no CG,AHSQ'OtA`AB;+U,@1n:vޏ Z#f$w% U}dIR3=%{6.Ol^` e CRSG! @fB @o5Q5H`w*P~i}Ӽ g 0@/#78D3 0 Y)iJ_HJ>K> }: ce\>YB3wR.O AΤd`Alb꾖AAAclKϞ/}!!9)7` ΤxLؼ}K RvR O>WB\I t bɧҊ)|lyǚVP~LXZ/~~}ݏq ҷ_1@i{D `4Ʀ3@q^E|wٳ7xH?bY 7lZĝ0 Vt =X}=^ZձbŊ]t wv͚XON˄#_rvvQd^5ťVʕ}}c{̢ b$ę46oaYÈ iܘFbxld''(}_}6>oƟw`q˕+ӊ_j \\\xg|'{lڼCƺ7ogruuX}Ut&5 h=x83|sテ4μwq_as1~,&X}ZzJbvWR)wVobN /|:}kAa0HjF\ݻ1!ߜ7A=YCλruk fwc$||QZ<;twws6Y!;wS.+Ĝ b31q~WW|CTtHWb/x",ڏ7 VtZVe˩_7 ktZG6m#WG\w rذ,1|.]RW@bN ¯_~ AR=QLaɧ_?:88O>x~i5i@.ڪ5U6mf i?Z^=c,_o@>Ӽ\"AhA! 2I}d{+}P$0090aw}o@?_h=۲лw//٦1xQ [#Hy|~9Z1tVOS7r@M`x`Pڃ8#ʃe1a[,*jf;eHGd|Xzz-֍Z>5d(k_ū,xoyK b"m(n(wEhkocCuR C`@&U4~Фwn];v|agg$u53Yyzk}Lf~Տ9(G٠!=|P2Y6z8R{x@qJK3hnEbU'Hkd`vJ-Zi=pz7ٱwa ߢByt>/ʏꏄ|t$U.  ),Ͽ򿁁51ſPZF^*kePvЫ~k_t&v#qpxiLN6s8 RTsFOr1ObAdGV:|h 5D*S #C#fAdXEzPxDk'~^6ꌙEfe`W*IhB%'H H^z=BΝ;wؑ$ rU:PD5E1?:dCɱdx ] A &!,:_1F9Z;MϕC>\gYhܬ~,,FI5[T-MyuL"uK3KD09,qBMٳ'-=}Y)=uvOĂYwXytNceժEFh5> yyNAlb7JvAA{[<ȱ}|IMV"ȇh hѸgSMּS^#g`EV>۷gG'B + endstream endobj 100 0 obj 44212 endobj 101 0 obj <> stream xұ 0 TN-W\> stream xWn1 +Ö l׾0hSͥߡ+YuRN Ipg ōv ?O[Zt;Xi8s1|2^gb2dqiߗ5N?ӑNtoú8 ٰ4r^2dXvxiq~D8èu'†-;C<*j>y'WuB7!|=e^>|bTpՆD՜ 9{1>є]ƨ FNcdQ$<{[Iy/]MfqifƾbB,h5 B4M x-z9Ox}J[Y _ endstream endobj 105 0 obj 852 endobj 107 0 obj <> stream x[͎6 ST(R&}_`@z(нKZr8`gMS?1Ϳ/4F?uj^٩qԖ+&KO߼ LEfkAFs q^ƒ:u &<3tyI0Afz-^SYn<ƎE K@]lZI{5a2{240TWKܚn%vڦ~țHAhGZ>æ_$թ¢g]ӵ$KT +5!L+cvPl1ۋҨC"AZɢsɷGPEY:OY5Q/UU08-'q,rp^'13H a֛茝i`H3{sbύ9{߽y.S- T,a?XTȢɢB-skQ8n]_ηs\B6g̜5P(@_[vngŀoޔ9c̝7l D]"9)s&+0sV';gm\O z\ s]Ŭ/`kMQ=?ZzǔsKk5*`v8Q,inõαKY%Bb2Ws@q*d+s5eGX."ڜ><ߋMlegt/8gw#W[E=an9O8lOU~Ofh۴>{S'Rj vU>{i-k/goO"zb/%|K&_\[6ώakp^*}{,+ D Y~4o4js5|^DT B֭Z_ػ3{nKr ~T_ Q蒝SNz+lQfu{3ݻ{nEerj;AeUWVe ;$` ԯ۟Z޻S1 ( lXwyw~cwGqOx=]zQGUvv>D́ Z_tӶor->0+3{b"Y/] h͓JܣbȻ;J1۷P>{3nu-s{B)dΰWqFr>Oa#rWFo,yzZ܅]s#dݫ[7ݿ!Oݻm-z%yVhwߴqrW4X8JT& ]T8 ?A :ys9P6g7sUVr_̀c6orݜhd62b'xLQz4-0шgzk98Y&BuYғXmT6 }> endstream endobj 108 0 obj 1655 endobj 110 0 obj <> stream x[Ɏ Wy c\ xڀIƪ`Hv7P#)B\sǿ/~+_7}}8\bt/yG &~_zGjnn&uXl50P=?0Pm_ I@qVD-˦wJ" vk U,trm\%rg~"HPΏu|L$'H򺪛-oO%M-ec1>Iۖ_V8_lֵeC~.ۃ]LrEeXr+l}"1m Vϳ@5nZ ;D\$ \CjK4=3 %xObBҗP/k:? t׀j"-,&/ጮ31bsMH.+p΅̇Gז? KR]\zLDwKA W(Jw nUw"m6; D9إ9JG8b6ȕKx,W~>ˆ:TAr&dʃ?u#^W7f(dWn*f(Q& ?3RgKWhP`P ])YY7]^cQf>:,1JBǤ=۹9=Le| l&i4J?Ѳl09if#U$q&]OKНXmK96r%Ǝ>v`O*T@7'eUpm+ȹ[`qV(Z)qA{UR:\'t9ѱMd&]-/{KA!~pO&(ٸ:st,I!-,H!zޥ]+B1n+w )/ۣo1И_˯w^J)iZ3NQd&=.T 499Z^p@gQ<[ Qvl$&^@*y_F ˙U0(O5l%z8(6])[O4f,>O3S5;r# ޿mF]v1DZErθx8x߾64t}n=c+#zEe $p2b;l7uFbiNӈ#f~'aKqFm# sqr CO1`PȚR8EܹԐ3S*8)IYjnJka f x!3t|]*`ZY@gE\1+=uowgJ{ ٦қs鉸cGUCҀ[Ws$'r:t3@UDdBIfm* IGqFז kCoQ*PJvUQL"جd!38&vda[yhsL'}_oKcʆxC6 wR;I1혧>yDžyNf(_mNj/]-MKym )vh2u׵le':pоS߼r77s]W٩uG^^wn/=SFk᝿L:wĤkxf̬ !F6cUՔVs !QҎrcYuiF;{;,`dd~YQ޷esX[-q5O] ihPI.I!{JVF_&Lp~ d˛g4Mm+t'<:vFTEtv'1 y!ɚKך\ٞ# FP_lCLcpG#]1cƩ~{/ɰ:0"%.7GuYe~mPt#P&ZAէY8LJTSK+7dxNCt WuBtf edF'IG+ŶEuLcr[=My[ӗ$X 9,rZ$&#4mt"F9$>|/%܏=$+)ZEmlca }c!_[iǘs{dߣqħjG!zd_Ǣ Z-Y0ATlL|ؔjjw{dO ş.Pһŭzž4MGc=7݋躟S?C<>-1ZM 'k-q/=ly% ^ixTQr:,?)-BO~եf*jjjUYR3%7ꞤiHȤ0I$bIBQ.͊E4%aE@>^ PE> stream xZˮ6 ߯:H=lA\{&(лےlM`0#s߃&O_{1r{QbQњ߇_Vogia(&l|1,M?YC GE(Vt-o/_*mHRG^=ؠzz_pE>ʋJɍXBGw֜l %n[;ϨH¯y[T^!*~t󶽙=-D ?hv~Pm\H ƕNtwB/YmK? ZIawƴ=ْ c]kԕJIq A],QG6 HxЧדd:G:BdG'MATNhÔn't8omM]S,CS$cގ&)iE X NX1̏$5,Z,%&V^٠EVF@0$y7t :Z34f )x?mbHzɂI4M5fMn~ .VQrqU{\2Hk &G#(ovCbٓ`&kk!@-c^ᒆtn4 )(M{sVpc $PoUG&z8ٌث=cF@@Ag92Y@-zK֧`s>ȺK(vYyh:6M)OC`qA2(H2$X*ǚ  :FkSMYZSH:ǻl +ݝ)"'Dvp@pfYB^Fi7}?Riq0(/J'0@=62B0+D`}(o [d6 aU&O3=T=lYA+1ʔm) 9QB2s'"@@ͥsˤ&З4F)P@i.ͥxOrѹKE]'tL_ln@-S(.w|.@ c*e"' ޞW:J \8K:2>u d4b+Ɍ}r*I.ܙDp v"rY!9^.E3#S={ļ?0HuF FGj]u(M%Zf|ոrLmsq>DɵL>t0az# NC"y MQnrX=wBz;/U:XWI3! LH*F-,t=.VxD=?M~tY.bz;=RuFZCt _Ujj%K3j"e4{¾UD}s Vcm#}Se[oyevZdRZ}PvTp,$2'a; A!_ }QN9iZHħ?[rRjgLb% u @UD-S$oSۇ2lva6dS qe,4pKHK3 @)8: 1xb(m0Q*_ADҞ\oXԩDd:DB+pᇗܝYפ;[Ѓ{"ѵ1DP6{O9#<)xx6P)آ =F :=a.ϛ-,a6ӫv`:|i~"S-Q+pUn<*ӥm;{sԑ{K\W˜[w׀ǰdS.9ɐ,ߵp5ZpUNi57G0+W_rg ,dk2jXB6_-`ar&$Wf| (T[OuE*oŸQ1i7we;hۙQ골0%ī6 om.BkYZ7)n)P!ly& IsnSw$hbW136Lwerzh_H^,xiz/QSgl+9qj,m+7 ڃ7Qq|#b=ѩ"$ejn:{ͦJil"&Y(8l#9&Wnۧ7:/_܅ endstream endobj 114 0 obj 2163 endobj 116 0 obj <> stream xZˎ% Wڋg 0@0CJң8@f0݃ң(>Rۿ?)n?~aվ`q߷޾~Q2? jǿm_g.n|zg(#e3PP=A?Pt{|}IL-4QWz9F]aWWkZ!]h tO'*gU)C@Q/J湽)UG5iQܶL[ Qs}Y7b:~zkpĄ  JVJuڠSsC[`P|0 Fz2[eY`:׃UTks2:X\lkQ˽ɚ-%+AC h;鋭&G*!Q <&&?o`?c*TM6olWsec"%cPk+׼u*:`@/æ7ACbP=TGVY^<_$?ve=yع~Isw^$RexZq@E-|H55=H]d79OЛ61+r=E pnRC:uQ ^f <' F:+ZYɌVl;d-X^}XmDt Q"&'kxgyQq)MK1 ΢")7HRF^RSDoiEX6T&筏j6E3yљ`eG=1wMy((\ o>~O7y`:Kǜ&ku[p>%un4Df3F@;.D!P WFK5wr8awvΣ+]R=u݃)W0出f/JAƽe@Br)MypNeO+l' $}0Ϩd,GAK!ـ_X=#՟6Nό-~VkJ]GBl0#~2e͋s`>ʢgZ. ^艥>]2j)(4G^0kJ7d6"DD@4Q eJ/".mMa҈q>Y/R8-RHx)ںЅE:'3Lt fDUd Dp|fv}@IczJ$`xweLjb2r!W`9Cc%) y`HB1k' wӻ ũl0L׺E1ޞ*D5g$;HC⦔ GzQK3RLAa2YO~-dHD$뚝Al`B5u;Y^tzh5ȤXV7MDjBD w'1Lz޷n'-x7?iLO~bO[p.^\K?6V֖)T;뵝22{[z5Yܙi_ q06%ϻ{Iu[aڌ|RЦ&A| $V4nL^* S4^#Ϲ(`'"yKP{ab >Zm쨷*/+{V?/=' Tl[G.pA^.U,kʹxm.ۊ(v[咄nlB`ȧСR?k/+X|3TynJ*<* \}qkMBxt i6K:p4Bo`Ǝ m;3]$Ֆ%u]XQifW~C$<|Pz?toRP]~jB~Yf8Ё96yOB7u{مmEh*M]\ \폟x(u _7Hi=e]y۰<(`bzM!8Wcíw!;yiRO$ 5UxxbOK'4.D"ir endstream endobj 117 0 obj 2654 endobj 119 0 obj <> stream xZɮ, ߯ T=T \ ?;@6ĒTJEpxn?_.,+?~Y__/P;\EWQV8UP+=}'i|WuWT/1PV6L.vG+ m_u8[}R,2(c\>l"xӁ嬺٢56y򺋷Xh1fs]^E/Oծ(xS@JU0.7ޕ5i@DuO跪,{{zZAe-;{]Ctc霴^{]U]5Pӭ!tgN kt-kwN`ሬTv/Nudf#.TbK+mcT%ԃ=ꅺj:ɾk;pژSZ~3)QY/OZGt:j#K˜$EF=w2aco㈁= 'q8ÿ$b= ذѿvO<ȕ$pXEGY_b|S= }SaJ>M5 'k-CҮJoĚZr>ϴf@.iP MNEGo $HNt-pQ7uZCP(%P]Zz|)i(,U\/>B mFsW_;L֝YT-L%_xضr魼Q4rPrF@(琒0ǂxA /1q\{D8S0)DĥM|]O&"`ED A0 xQB)tyFٍaԬB;)R}3ɻj 0f){va!s@Q+BT|u[jt-a]"_h.P喘D4Gj`ÀZ6G {ܖtse7akrT)8t \ER%$>/耰VP˫B:Sk⨴ Óm$09'Sʛ,u񙅴9> "1ip0:V":5n=BȕP*I*!*Y1OM=E=`T40ޖI9( 1?Q:QwJ-ö)zr|sfK]0[A> +A [ځrl>!{z%`N]88p<U,i06 3u埠 /nES"䱣LЫ>maX3$ed uGC SCN{^)Ӄ%  d{iZiɈZimqצR6O嫮}p zuߴ>'qV$`^.B}8\?u},ua<穑==xq&B3mx޽uYMf6xjjmDt>g rn8{<./(603rvLDhl9RSP̨\Wզ?!el>%B8M4tpԈ d&f,ȅLRkڗ`n7=΍uZsrew +3gVixP86}~0)y Vs1|? qU6[Aݗ@++@HA Vgm#).,&N#}erN(jK:=5y/r$gtjL$M6}<n2 قe%$=2`_/86'z`)$)C3izZMlBUY^`a}㗼ro_$OuV|>ۍN/5sU@/%:O.veV~ftՅC/ZK;w 3Ψq6wzoouᒢm+D2 bd*> m{]Ɏi/B~Ʀx >`SqѢ>XhWoS{(u*={7Ռ6(803M9!}i92V[R>c]#`1 264X`ɫ;Ho[0,H 8_u-4D&> @ h)(Angr X Ml&C ކ5Ni)`FjB@Q9:$Lҋ񣤄XV4LMg< Lvhd06WHRei累߃ߟY;`$kg Pl\RhPP6]l-WX-}He_N5ոf:#e=2C?&r2&0bqU(i;O H0I_J{yh }o牯\ә ά0R]VHuY9/pm@e endstream endobj 120 0 obj 2714 endobj 122 0 obj <> stream xZˎ Wx=HaUe~ EM~?޶$Ln)qxHʥ{Qgy˪q_o79|}W )rj.|"OnjS6|ʮt;I﬎,tV']Nོ"X+StY xVhv*ϧlN5oY%F4#]@n`bΒѕ,`'D6&^;:lțLV=f^*)@r(ZtC&fp2V[j'ň31H!{n2g5>TrUJCoʩ5% F%>,d"0޿Orn<~ Z:aQ)qʃ܅7D9jSb(.auLH@y`T+GRիuё娴c=*?䋽=st6*ɍ0%?scdVwUQU2%uCdw#-FKc!. IX&A̘Z >-^Nه3YowS#<T1|Omβq.c.͂ɺ=UyG'vART#S=3¨5I-rgė %\&j"=͇Fg!"X\3M4ǽai@Ջ]o.^N3L ́(GŐ=QsMa34E^Ddsk(,_Ғ{o (y],OIO驣bV%Le0Cp 5'x2s7̦5kty(*b1k¿kqrى5\cZ^-^,=y+~qFa:ٓ}=:p>ٟϓz,|^%g{{pڟ00I._N~?R+"Ii.O2 _#oHT8YBNC9VF+eU -ݚhvZ$^hؒ(NƬFz%cөI?j*o"[5!d pS\Pb`UNKxC:F:f]8O0 n ٙ1ZI0xvSTjd) a8  Cƫ$4V4 TQqfORU֠M%MРcXJb-'qnbXz2EB J7SDe:]kR5lwQ4b So2jOX KP#uoQ-@vߓ0q5"-ە4V hQ2ĉu61$CJ|&K *VZ|`@ḕ{;T[WV۽沼a[UItX`7{sKPʳ+jZ©tCU%lܹ2Ubuh٤XL=[/Z-/LRdw±ZBB&ɵ)!CW8[$o2˿<{하m{u.ym,vA(aUW`**5aQ7=''KҌoY v pZ}¹\&c.28$Esc/x,it:r˼{D+#ɱ#z2qt5y=C_ U9G3cX%N^v#TsˏYyŲ5@V߅^}!a&(^ybfÖ]Ox،[⪇ĥuk%߯^vC$@Hox+[P$5l]|< СfY1s}v|" AYsXη?ðL endstream endobj 126 0 obj 1281 endobj 128 0 obj <> stream xYM6 ϯyH}I=,нQ-'3ٱD||>6ړo_~vy3* y}F}H* ux͉4vUguQW5*32):|F ?4qZ߾=Xc) 9Vic%)0aV:d[bq$nQn1 +eh坎NzqYYI&T-"јGb!bSqrUř(&-\0N1jX`ݒ|/Hx4!,F\QB0%|* iS`i]s-aazii&{~֟@(}b}Wy1@;VIxz;H)O Kgdq Ou\'4|ѠJ,4 Rrb-/V.rWA&yJs H*-}1$ߒN3T2rYxv?`JRDQ&5 rK'Hg:֒C0jJ-+Rp}iq ],/ĂmWbsM^Q 6ō#aη]NQЪcU(i:u((g04$f4xLRG#{wtQI!zzx8VE 5Hbq{߿%my;NcuoF?^Sj,,guyP˲rgq2kxY]U*墮UsWZ a$܊{ΓSeVyGWyw{!X=m NVgg[9rsaG9' cHE79ʠxGGwXpWTbj6Pb{eY{ \}KtFNNoȁ̬pkRmv1Krr8ɳݭ_zqL`j2gHԻT깊TޔHy*6(3{/FW@{ Qdf>\R56:V(D;.MkO쇻2sP #k=>߷K3Γ[S=;"L{zl72O"i3JVK=ljW"b<<^+.6~>qWtr_x;"px O'S9iRc9z9xdM:P#O+hm}hQXm3/(q)|+#&uXa/9ʋ<Jὧ+Q.k/[Ge9bWˣ r%n I=< 5t293B=L v endstream endobj 129 0 obj 1706 endobj 131 0 obj <> stream xZˮ6 ߯T$@CIKӢ n:L<<|sPnv- 2G~x|~X5[M),bՈ?XquW5xוYxM^-ZO+)͟?q|#:4haRDz"G~\C\+8kV'&*2II!B%eFIP(3p-=puYⷍھ mz*%"X:.;w2ox(HŠIdX%^Ezzw-ζǫ*k\Dsj {="ǫK"Z[[wMH[XL-[Trp_ *G)t$O5؂v͞}vtQcMh4bǘ!fǕ?I3ĻI{U]UVQ5-;?r ڈb-ouN ۚX4({ "B'^uvĝhl2]QطOmymeʂodٜ4vœq?D3v"~֞X=ĢLTvo!݆8k MoaՊ|/yMn,Ш.{kGm^' "f `,7%yQ*fcxZ$]rw+ L*f=yPD(Eď&De:_d/BFvBBaLJFiʅiiaY| 42/YtV4+G^'UeM o-+yk]#7} w9YsIIX WHuVs  AJlݲ$ЪA豯"/¾A$dhd*!7zGS>Nz"i^Ⱥր-%F1@ΠJc\ibK7ae%C(FUixSG 4 oIAAT镍F0<0-N9g m!ܮh:a z$ͲrUNr&zzx75|EwS{A[g78ǭhh!M$(9vHa2t4yzoms, I&* j~8DZe!}q$ j)vXHSv$ u{A)0g4,8ϣnF|mNLWk!#$HTu>Fp%`}G4lĽEJOpdV:FYC^Nxb=G0aFW}ŌNz4@O[[rO\AҎ8ut{͗' `J~uܐX>r,3:ݱcÿp),"-]W{nit7 \KEZdhdv=Άjݒ {. r2Ъr?ɐ,Ta|C:| }M>]>!#{*T-;Rg]gMh4rl }R; endstream endobj 132 0 obj 2233 endobj 134 0 obj <> stream xZˎ8Wx݋DQ4Hg@=,R%wnPU)qxHQ(z`/ˏ??~Y_o7T==\~}E QH?V9J?9SWuS+?|eW?gG+!^~ﴱB ^LR,EUhK*kPW IG_ui#6.N>~*} Wx,WPll~[ x vuڢ8?:M0EHkuV>S В\ыPCkmjiiT Ƕ}M&V_CՍq#"?'/[)Gr@lJ`T&i77˒HYU@Bh*4؆58 Zu:+)dSz :h &)ܑo _ dp7D.U6F4 GRդ\e$$~-JՁ0IG&xM}Ce2ֵ&D#g5 )Fҷ('p;(\մߘ)s10w՘H 2&k|M]N1,6 xv׫hC/Nq#S؆%O%vGg\؂ ^M9Fu @IYS>%DXW7FMf.6i2'sOen:ii烙ʘv?4pDk.2׀Un5fn5+*S;y4@v% !G -e*2mDZ嚭=}fhJrR Ov"f#1b¹8!j] M(Ж$Zp~kuMHI :tpCdɥdqenmQdOꘪ?=I玣AKnES'ŜϣԾjNz⻝fPRysBy27KHCSをWAW¦Vpd?!J1bۡLp-|%SH'_~tlxgmHM)9x굚?Ѯ/6rR(tD)E|PRtŧsl/h%{:y+VBpe QaئB&eTJ#A(!`OxJVk5Om83=S{N e)ߚIMS%X7$[y1=MMʹ6 *Y}'y+0F ;kvgEq)ZCQ.lN1M&Ro^IO!ա]$Uq|̬y(9htlGViUH$Jd>қJ0O*˪8Qg8-qLrV3&>OԡAN+!Od LQ([ۆ?ژ(R`[fxhG^ ]@<8}iX*ahrqm>;r?D ЈF3鲺L b{HHb95}yxSЏ. 7Cؔg*lA_m"dKqf XyN1(֯3nsEMOUX T-tؐ^<聨*3OqMq`hۉ.4]*TD,{M5h$_䒢PW~_t|I=ԂgOؿ*94uNQa.>7OEv$7zYs\?b~ζM&hx@Vß* NrVSMhqڃ> g3rŴm"^<ˈ_=1H9ˑ$i'pW҅"sVk1nG˒ip>`_G/| 6mkl{6Gs#rݷӯ C(~+w¯%T5ٮU- L0_KrT8 .p٦a&8BĚGuXogylW70'a@_gg0= cv鐂:= k1s=v. AE6f1kgIcGi7YéQ?w9SjHf$W?0UGnzYgϔ!MaE;&ȁw΂^Y6ma̺r% ۨ8k6Kmk_/r0 endstream endobj 135 0 obj 2587 endobj 137 0 obj <> stream x[Ɏ6W9Y#@/r_.bImQEVzPb_/(d%>z:;}"=#_N?qL0ifNhƻ? 3M8;tm 9qg{ҜEP?A O{u9gՕ璩Ʊ0LG?2r;C U #u#jlTf3qFTK\@k@ɂ fJqb8ԕw,iN3^38擿ߪ<В"zGaD.fp'Fu ȷNiBE9 ,_Ph%Ǔ Mg涌'Rq2Qe-=/QIfasyfx,k1ȁɑq,SY.EW ?ptfP&׻hhE e*rYkMi#+Pl6,FM>G|B]E0N7G"E[WJV0GUl )+*W\8I7KX n)"=glOjS/QVmJ`†.̂+BYDp􊴾8-~C 3zWK+Jo61Fؠ9X"m&J8& 95H?U,k@ʺlFNCzF`>y+[(fi(]+YzVzt`K93 1t&0 wޟN;(I-sꡅ#h_BdL~6Zy^5rt=քdGzE>4uA=oY=ZȰZhϭQ 8Fwܬ9IZs7f630;c/M26$m(AM&,w"%- ,վ Ny{R[/f+U` mJh%(:c^G؍cKI@kq)y!1ohVU2X;2^=yM!ѻgnw3FYbIKU!3zpIaC9ۗ4)g% v mt]۞B{ǧh+k'-ŲeɈe5[6MiGIK;(Ik,Om5eԳ\ @,Q&@ih 2eBm?:~u%wg] AD: haY9KFPZ%|fF֞׻iQYTXM˲m:Nu mʨϵЌMۻQ ݚP݆dw0;i$'yErš8mxzd//J,:;tqV*G2I8R7zVqn3*6Ɓw>_ ;+HUi"7(E?6Ox3mSoOH%c3hE~jz>-P_ZGoiW3\m,),wؘN yd|Rrb7yޖxIKv^6ȿ 13_Y.V;Jd!+>d14w˜ `%tlf::'?~,bUn,ۣP/{V4n_]c v8PxqP[6:o\c^d򘪰5tp^5\jI+Uz /(#Gl k PքƄ=)NRѝ7n x<$Qi.T2ܟ1 i.hISE\P4sU/ˡf>ҬoHB P}L ¯ endstream endobj 138 0 obj 2144 endobj 140 0 obj <> stream x[Mܸϯy"YEMt_`!@|*~Hv&w0^C _3Xo/f N_t/|y}{10OӯNoN -8oۿ^HzݿpPxqe)|mS ж҅1ĝvhXaqCip4ȡI`TZ"8;5g.eDPSOlzr?S_IF1kKWŗe)|#Kdhe;T .jy[@Yfi +ǹ̩< ذx5 q^NOebR֚ڜ# J֔.4 0 ,*]iB{b0Pee1uļfDOHL8c7le ,C^C~zy"쁫ĚJ!O@_;TġlYuMy*ej*mZ>Zɢ 8lDUwEc<zO/@An׎W,lM"kHi6%c"B\-})mϭ.jǰV)DUbqۂjfW݁IWHǿ׽,$}pabJ:!ĘvΖ7z5^Uޚm~#4DR L%!DSkJΠ;Gkr286ͤ1S4ҕ 4@LvIuCFu-浖wkw\#Lw6XxNF e&GU@к6]A !03mB0ʡ6B[>\wJDUG5AA.~07ƻ:n?c{S:3wAuXE&*#BKTB 7_걚.t\GX=>7V,2魎\#ڷ_ g&}pڢ[zx乣ӧƴycFg'Tk~2ɧw;S? )~wGs eSF6s Nmj@2#(0hK#iC4Iۭ_(!0'W^rj{.%/s$ŃՃ|urgR8S8W)As|1t0-_k]Nրg=[䫆5+R+S]5"T>_>`@ᇾVJ3 H^ \p3_^"h3dIڀVZ>[ͪJw/~"qt!1:46 |R endstream endobj 141 0 obj 2360 endobj 143 0 obj <> stream xZˊ%W,ʊ+y po>wyOCw*CljRc}5r3?Wx~{1jxoη_ _)VZ)=/NM]Mݕϙ_}YYHRy ?4q\[ƺb*G ,Psz 39[bf48˰8큧6n e IrI ߃]]qbrd.)dtE7] !,g bzD@lU5*RR2|5e4[韼ևQMf#=Hhh`cFS1 nL!] $thoXU1iMĉjzjS>l zOVS:04ʼ}!0&Qt$a"Z4lU]G+!?%ߢHV$xEt'#<"X zK=9G@bQ4 ʜ%sا]~`_Mh1mlo*ju=(pkQ'dW@&i_[Eym4偗hϛlHyTO/~,VsHJO3H^VSke/a-&xgx) '-OR Ev8$L ]m'o}X1qIh[&1Lm:v6W⨑+cHTl!VUY#WPԝ;ߔp+hvɝa7}I65Ou,;Qs)BVaXT;=ӱ&E) pZɨw}zV'^9Ҹ)viٽXX)i|ع i4/"1RfpWrYb٢)Q.<f$ &IQhN\\Iуis zrB+eHh"j>Amq,O!Tq|'l@o.]СXR7rIԙn֦:( ޲Zs֕nkޚyQ%6N=kb(5lRl_?{vn|ϥ{2˝$h؂g.Ǡ1w+\8[w`=tpg!akPNf#s6Ν@C,ΗjDpr0Żn_cBp5߁ftqF{7i7q;-u Ҷ&ٮۗMji̟d >'lcIE%w7JN^N"^"WV xp&j+NUm J|vzR|)课kItiK%X*"*Ǵ:t~{ R ݊\FںIZJU5|Ha8O'a'>Ռ+JX}˹Yշ-ƶ8mՏdcss3M5 u4 8_vL_,?"7e֩ ~C ^KSU- fx-u/+]i-[7 o1z2O|Πny=w^&YF2| B)#h[%7-ER_&2W7WhkvDSGiZž}F,DǏ>%m;C^o̞>I۳?O7 <|h+nK-%rflOBy/hA;~Z3guŽه}{8rWyurua U@yUTg_JSBUcXP މ\d,VЌXy=hx\_ʮFFp;CsX9[)Puw,~'fvU0yщ]]2ΌZ&Id$|[E>‰eO xI9GO yd#+14*"zA& nE$=&9E-Lra QLge9p0*Gj-Kɀ>Bp7xo/k .h iɇ *?/L:(X;݁ $M͇=]מ|J4?}ڎ}1j58*s@jG4MXk%@a”cOhhR{ŝņPHjmq,FOGkjc`hhFZ OrTu ;@Tg<hP:_ `ꤟ\ Pa=&MJدJeo#lO$RH> stream xZɎF WCZ껁 CʖJRm fk%˿/;ړ˧w?s5|bT7to7{ Vrʫ@8߫\˕Inצח3mF<:Ƒн:( EO eQ"խh|n7z#@Bɕ=(/ص]yiWKØmm&[ L'8Ϡ=L rf^v}`J{L^ dW43b& 9հ%K`#5c#}VEVpt],R&kn dzN`sU['wG2˽<_|$- - !]i)A@KRcNƘnXBam,'<%!% E҅BP?)O)2͠g7f[1\r"E4odn#0waI/JKnQ@״^/iy(Z{r}|8˹ɞ -{zOE>C Sg\~m Pcu2”#V排V;a6+xMmTU3ϯX HmYcL+$V拹m<6sSg=Y<#*rUڃ:YH̚yŎӲ]&4N4$Oh(?!.SA-kUFWLW?IxJ$oY;oP{(dnW)ۣrmKy]ԹDv} *|%~c4yϭeG0$3k6r;D8s!6ܣxfg1F6w] Merhٍ *S3Zaa & {01!(Auw+}%[ȜF(+:HBiI'7(T@-(٪߉CQ~"D2u?Q!1# EH3VחHHTfdd ;%fl_74s,] כJM7+$00yu#z?Rx̑@YZy^DJnZPkO-]yݪb+֪74#:ܚ-yAsݍlz@V 1du3# vF[~۳C9GXn)k-̗e0YdQ @L)WV[\4@0%zw:Tj|^(3iiX*iw}mW蜟uj;Rd)⽼i^oЉ<6{w)E=W譎Fs|+)v(^[qV2^*xљBz[9/A6GgK-Y`.z!\r⪙\Fa5^y ?5Z9tnoaL|$d :WQ‹:LvY9g!;>TeNTwռfJfjm8{vdGv qY}YE{>eA MKXJaWqfkEomYķ;j=;FK]]T UHyG&קH˧|I+^f endstream endobj 147 0 obj 2154 endobj 149 0 obj <> stream x[͎6 SVl (0 4)C/)QmK8ݶhCɏT <>(M˧wo\ _~y>Y5!Xâ Q*?O?>y߫A97V:?[n~}AqlH¸abYz'}fO?/bٵtՂ'm5~JHg.nʀUVkQ/Fq# (&gpQ,i1T-:EeLOAH<  8b|Q= 럽ҾiE)jϗ-댕INPkJzc9I^B$.ԳeMPضz-S4nDrfp!lUΆ{%fuouO&%W$5!]mA8["׷Y_33yӂfA^UT`Q02&GLMTpf:%7ٳW-9z`39idm fĀbp 9{(@})Jn2;|4qpaBuMik)A? tVCEM~nޞU/5%y$+c1faW5(qӳ5Mpf5wUV ll {8-c1ǽU0 WЏt 1o)pGQhm/ T:elk[d)t~5Y*m+ $( v3 ۖ_k E9w̤[mRbK@9֕"Žm[ߖqJu7Ir> ْD{q0ǞfW5*PȪ=e !0م(+mS˅9urqOyTK)FbM=w\.SH <͠- o ̢B[Sbn )Vg_'~C֨²K 3V@0; 2qިu[nT%kYuos4,GP`)у x~%"gqucOJh: kUEΩ1+q1E-~&-+cG`GПEaM^b]hU3zX9 Κ9[I/bؒ^ wXN83*z~y jA.Amލ3q`, iK7XyҚ2W"R/rn~!Ymoos+P(MQEySMz.DncTq3Dv^kD7cbW #% &1Uۧc"_VD7q`XHDnݥd0MՄI#%Wi=$X۷* _lj&kZfa64݀] Hu5A,)h?BuC9x"r7+pјb3w֢vrȄ -X[5F}ѐbF5NU1ߙ ](\8ge }M`5A J("Wؚl,?lKU["oy8}*;AoBQz$ iwp:l4lEIl5G4$ѵm1t;Jt6 )]4>R>[IqPCW_L"H"*ǻЄ5G,x''f[/A9곰DX8i=;W~o'Ѝ31All{zECVUg̖ WՖ}iD>rۂrQf2ήݯل!i6běܟ>>P:A_}=̩ 1EO2Iԭ*H1$~Ę4> stream xZK69Hl`@Uw}2Y`v.^-U.&Ht۶$!?o qpmLv|sfbtߦ/ kxL43c[s57n>L爗X܍g`.P= (o_7p!qqp@@Pg/~0x{"wL2];;ם|pYȏ b}VwO͂A9ρlM $f>Oڂ 槖DI4D+&Y,4Vcӛ&/=!M,m74v 4`Mмy1m&XU:$5;a@ mȼA%_Gժ% Eu' FWy_(x`Ev#wP6ʝ?TlR6&#q; [VOj 9r9H`l?')wKGq$!&fim!xT)Npf8lIEu5lfίn{z9\ccP6^$RbwQו.$>/<AMhT]&&qNy5\ =9rZ 6+OKvzDPHY"6Mi* M$\J[|  Q* Nx*83R1O,x]΅(scxWLFtL@9 HÉzaVru2Z|r} 3j崐\de9HZs8=7-X̼ FW] }5<`&rȃnROmĒw2j5EoMJS!sj)TkJgC2HTkeKGN93[⋦V#)LR xlY¹A벼/^cV<%6s Y U 客LyE-o휾wzZ.}/ITaMH:5U5\\,<r6~HDMi(D%>I{5ܲ)֏Mx~.u]YS:W:[S! U;3>T)hAiBp[ ']P\)qPμƮPzRp^Շ SF3LJ*U:М!?Ze"bfRMByE0qULQ;%TPo{E>vHgBTe=IjD#@nqjHѠ>թ=F)a7hSt{Xo9k0,FqU][NqlJ?g$I>6eT߹n6@9 ?Q2șņ6բ9u%[vy*7lr'gG9[7C¶>#5BQ8AAp|^\ bTכhE2xՅlkcl7(jà894bF-gV:)_pDW.2̗]{nv1n#gE4 _/PƇ;e3^B; ! 8ZVJ[ ΧKT#tgRrr|pf,۵ ݀(Z%8%aK&¨ԟ+ݔ&^u!ƗcSےA S}2/{udUϧFX ;#뺙;=,lYPCk}u 'iMf}V9!TT|l%5}7 af .s)Hq_ eTIytcWuF4ʗ8iQyoV]5[h }9ۧ'O^Qg;q̠b:f-fdz_]kf{]h}6Y\r5癈p̿Gg rd].9ܝ+/Z_RŃ09Vgߑj]zp8mB04S:{uC|`0DםJq̱PM dDZ-^H.Fi6BS4鷟+Ç7_q endstream endobj 153 0 obj 2380 endobj 155 0 obj <> stream xZɎ W< cSxƀ/}3v*I(tw${Bb?A?ZVˏߗ~ZLo%ZE|u B E0Š~wYa4=Oauěw657^  m_6hs[CDP2N5uNR|F&(Ad:#o.]0 G=^uò0ГS4=(Aό@'#hMzq3 { Sv'=wi7%$muLC[K4An.-2e6 MWf7@陰hYDB2->wA:&=VX)9LOa`LÊSKQA{A;-݈qBD(TrM+-!4bcqUUdҳmS4\_[ڐX8 h-Yiq⭔lQA$GK 8aX 2JT&㈍2KO•ǘR9vhp=1B#3 U&[ {FEs0PpqzY'K!-J,\` .,a|Ue!#Ҭ3#4 O%=yy 2^D?T&JN!b]5 qL Bu ;yHy)]#jQ,kքڽ7/S 9T6{t3C/ۋDE1Feʹɾ`l~vE-2L։,'.rRKdZd(d -cv5֐\&Q}>)zUGrCqu=%F˙N%hW4= Y f\Km~13EY*)?:nk2()-' |6$*ữ1]\E^<݈]jPҒЅ' rޏrFm0bag9qU&H8&Ѵߦ3PKL iƸm~(.VuAD顴Ksf ff>v]IG%i*WX fٜUSIXuFg% ҹJ\^Wau{DPWK WulΉxLH^oAIN32d)OW.|>'mƊdb!IpBh~%M%tQ5Bq]s?֘ <5l"\fJ=YK1rӅ[? M\@%Q`uA8]K$ËB3{)+4$2$н'7"q;?[,,.i>%ΣΉnX!P=>I11]yHYɘھymDwy*1 c[9s׭cl)mg4vn"TcKcQq֔} [lpT+ȿt:2)o:;M^J=/͛|&1jQkJ -n?"p2*ls+fj 6.KTyBBil*[V,A/TyrqRV ֐@bhL*S+c_G~4T0Il{9v?Q%?AZ43ɻ0LG&-hP.G3+}4zg N88қu0ǘ?ޫ7g 2'¸(wI0[dKwGL#88) >DM3-E:˩|H-q2 y Ʀ4˲YeL3|Ffy Qd_xexZYu0޸54W#$O,NatdXX>7  x7DqD KyES\;byip.gWqjDM< ;UokTD*'.JjdQqOu؇ǻwW  }F-uh C@ׁ(n0/05cL~C]dS">1$/nί (.?ॿc{͌*5 1<Ӂa[= њQC$j*za>3PT7$E_fkW%(;$E鮦 V9nl&JJlnfVNݻFFWi ht ڟgUAu7@ C 1NtbXa, )>Qvq.?(M t8dkEϊw *Isџ!y,xg:0nhCny!=#}v4R endstream endobj 156 0 obj 2696 endobj 158 0 obj <> stream xYɎF WCdT@r0Z2&c4b-c _?nԽ~~}/ϡ{x0t[R}zpa狋<3WKωNg'`һed:o[-wǺ;\ˌg벚=\G ##zG#/sjY8Y`~<;.~-A1H+=y{όA!==Y5.3ܱ_EHU} Wc" ;4z-G(-jqy)(Rg1ق{"e b.|\KWnX(={ouoNC RCPlAG3lXZLLU ~(&٣`b$#acGs1q)[#F-d!kA"se~cI9;~1sT39B`؎ &x|a͵N9weJli2P̄Sw(FQLt3W3u|}],¨"rZUpjmpG1S&¼}b3f[t W8JT:@Mk'-P"q鶰':WC92˧[]R\fRrQ X?bQRę9tqxMaeU8nSP!*&h<jW1T"]v򳍕IӑpՍ?فHז凙`,ET6䴱:s9a2rLf|&x>!*k*\cj9ۛ'u]ծ{Vd^ u)2 9{EHSť+:r栈=k}~19}O1?E- rE7lpָN7cާAr:W{*& gQfooA;o,@nc LBiRQDмnpƿyC2:S 6u]`2~jx}O?jpf0?Ogf'Zv;/\p| ;?|3Ly3AGLjoEIg1+YY,eU{ʁ9Xt\;Qm{dK]ϝy-v-4E:S)}PS ۞K%dŻ<;&E̽LHiBYօ_﫦Ԗ@#U"M$Ҳt!rdش%26se6A{\(ct&NH 2iG{<=rPP4fLDRCn+b]['aɷ>Lf Iq浡|tG~eb;j"E^TcG(Ulv+,O¬g/"x9jlCEY(Q3D7~}*>ˎ endstream endobj 159 0 obj 1554 endobj 161 0 obj <> stream xXˮ8 +CR@1Ǿ@iEM(ɶ8vU\$h<$Hya@wlyjdOs'`gyܿπ@`ӃA4O.0gω:?r:`o˓5HƳ {Ċ}7 F`dXЅŚb NΜgwܲ@2 ?z׶pֹe5b& ^i[($$Kڙĉ~+Klᕬl?5>1I;lVʥIU{;JR[h%KgaR̡0dc)|Q[(HMBE:X$.CakXvsx (jqBS6.;HӅR.9Dv>\Kګ݇~,YGGIc-U*XJP&Ut]Νp[-%xgrĩBQ7ԨpY[](HIK+k*,ܷĭ%޷ҡ W)%Q ^$|N0 TbPgb`f**DE Jgb[+KŭEdf*dq! Tc68cĭZUpinܑ`,VLZM pXZU)Y8U.n۽"]r'SxTJo7w3Os7 RKW,f[<-1D%īc]Mkzx?qug#cs[ |(62/HOن"!7 O+N/KM8G⇬ؒXdmnnhdUe7̶=Vk[ߪaˍSt1Hh`lqZeY%ZO047 ;ϐ&,B{l6 jLInI[A\=aFږvKȍO:cz%KPtO!5^F֡ [D OxR r_$ۧ'/?xHo endstream endobj 162 0 obj 1127 endobj 164 0 obj <> stream x[ˮ6߯:m [p$"@zIhY.{ c[DJ,5/M0˿߮oV-<[|_ӏ@OO?)PZeS^j?Oy4Imn]yeNw5PH(?~fcń l8pS04Lq89z( a\\zUJvZՖoJi=-%}<={5;kMmqm.j?Чh^|?*`l5'>_z $5M}Eѿq[!}%YzZkJ8H]Zx~TWw " X $IO!U9Y P2&ܕfS¹媡G6>~_&֏r׍`QII޵AR0ܔ0xh%ݏs+"<PW]M&THFY[4+BD5[phV98+P 3'c=)Ƅn 6dLxˆE36ә]%*՚MR&amt ~`?$g3Eq,hNAOo>ӳ-1QDtl9]fy!ǹ7*:Nikͧ!G]cA&L9T3ГAT3{"B(XO!g6's=d4'Q&wTi@+Jg^r$]M`L2&OQ[[I[dH0 )#EqyȹpCI Cb$ou NWd]@1}o[ 4h[q\i]qxC]R@>3H|crD#A5Sw*;z.4#!Vjj>NkQ|)ML2 .zocƍz!Yvg2\k>51 \őq^..ݿ`i{d88r =s蹌гFyL9$32VJ2{ϢTȏ2TeA=H:< Xl&GG8BO5P"S^3DÊmN-&N_N1 y@nƀH#ޘX޹Ye'U>=obИo,ֺI~C#-(K;]zAJ@;A0'/*N. k9Dz{L8W ўf=$~= g!Ar3ˈVbu1|S);Q5oY?0E$*cLK2roPZI4<(] {V$p3oD]iڟ[ZK bn5y;踽Go& {yX׭>Q:XYpkzv aN)C1iҎ(I풀-3Sz#A/]B,Rurňk}^8VQ(5XlET hI1F|R?7~I?Ab gPIN)y۵JcޕCc%%Bn#;*^eB@'6Ai#ύvc2PNq7X`'̂C󱛠T BXi´f2iah])sZM9V\@=vSs<{Fz/5US}g>!g=7W?sae\<أg1n5)ku# ^űA>W}\F9ΧW7}UL;`Win,!gu{+Vj4k&o 7])|h"riL̲NfyL: P^lOUbsu@ 1_kZ`:-FЛV{ae؃;XFX+Aa{E+(Ljqj2V"kMQ|Ipܝ\U 3R\U4à^3 NȞ-d@nC,E^K$4yd!;pf !Ԟ"5AEe:9Hk&{$K3&@A7%Lel\ӜY) ]zjBw%r F`=W;|]c;hG9|%Jkj)ÍLv┒f9Hߋtq/;kmמ`a9vmbZ] "=: x @twzw>)QYHJX!pG"asɪ1Sb\j wck}FPwE7(+qD+'j9\"l.@ s Ā]IZhbKUpViqtkmrhK8y.Uj_~9wsdwGV$ x:P(Z-*C>'Ҍ,uRz̒?t$s5UZmS^ة1-VbXXǮQ}qY,H 5{0BA":Gxҥ #պ=r0QJt's.8y2VtF:]FxMV~VHMߞai4tTs(?BOQ Uh]j*沵Rh`-ԱJ!߭ulq^VE1At Z g;wEQT-Z>?Nn=(M /k,1|e3`%rMs#VAgI |/Mo)e  endstream endobj 165 0 obj 3036 endobj 167 0 obj <> stream xZM6 9Hђfg< 4)Cҿ_ꓲ-yop;9&6 AvX`sTtgĊf\WSVA9A9ǵn !ƶKi7 s|i3A,N 3 HHΞ:nZ`ѐ}*RXflxc9iьѥ2G٥AZ>a9HD͸SD D9XᮧH>OS+|<ë7w?z_fߚFK_ʢOe$; |uS!1ٺ!@Ź 3pU8V'3 >9jX~MemYա!–dlNhĊM;a APu@ աap:ܣ+p9ԎҕX ډ kfr/!KֿBNERyC*Vi=nЩdXe+N PK5:tN6^gwlG䢔U,9ƬQBiAF"Mwal:{sgѰM7F~'QT|\MbU#;eRheN y+~e#z_*AhxNBioާĭ`aA KYX$tqNU@)BfhME B"IT)Ia4S.bKu?'hD1YΚ=\714pb47ސ:Fxu )n^KeB̬S]Xg˰NA(\;D9mYj-{G+fetJ=vjR6M+7V;  >]p]!G8Pܩ6[.,Riw?{ve9(RMΌA,VJK"^7MMyc)t D?}O҈ުx#u}Uo#47\]' _[j`{iVfVOrM"u\P} ֦̀\>{Ղt=2AGs pZNM\3^F2GPt-/ L[O*jku"YxZT/$+W @{dL+""jp2 2[CiKs1.UhKD#Sb\CѸ $+d57"`cr%Vy8srQv#u|sj0<6zƷ lG#]r<t&gQ'TS }KN"a7K&%!xq,%RGjD/h@d`a|RP_S5XTXMy-οB&MS3W8LccU-G+.P.~7Re6Vˡt%}Szdq=ZkM[W|N j+Ԃ{?m>N5+m B*Uc*A{eBBy]I̖"<2+iy>w:PPƋt9 t.ްwv@lwmPNPt_TP=gknܸw76nR{OwҐǿJ0nwnH\027$)[ˏa(SoK¹ɔwؒ/7ZiORҿ1̊!Ԩ&6FצEMdR^ Z_>^x×''_> Vt endstream endobj 168 0 obj 2071 endobj 170 0 obj <> stream xZɮݿڋV'F;io0SY(vON(5_lnzOe3]Wӏ|=s&W )?FYee5?z:;o5P7Pýoi&- iN _/)*gX(m ,.>I/\N'}=m(B4bL1_xj`N6OAO%ׂkf|+\os~jP%LrcHEG s%cJ[X:rl8Ĥb\V% *${8Y+aFxehZAѩVHaZI(z cK6/%\pjYp) (gw^T[T?y9Ą ^=2WMHz0@ $R̈e׸a=h1)b>:ufS永ţߌ50Awy q/ʣ& 3_W/~\5đa5]Q`>\G+ǹĆ"'0><,⟇򊴢2xY> 9{'BE$nj5鳭.W<ʬjB{$}} ޶BXRKkdpƔpږ6Kj89Y/ yZJXJfM`e!TyP_s,)ZIP22S~'}Ei{'Qu6*o ST{ 1pWiCmC椄,$I׃lcJwBQu\2lc۶%0‚ v-1lZZSTl+ 41e6La7A 4z' l٫n\ Nhw1ecPaA7W6x bW2&A պѢF jUejj:(؃ۃ~Mkr.&JXF5öоlL ,R%ƹ X]SEW۱e2MfH"1Vە]\ ̕M3 \xDh{BH ̌oR]Sj*{ ,t/-+X\Acz_9gKޣ!\w}bL?Cޖr{>A:S^zIR'soG!rufIA,7-:rI}q㺤rt+%UO$Qty˺ny;فa{6"<87Kl3im;ۓ]b& y k- sH'ɅSrg̳C 箏N8)k]ܷ1G_49VvG6/Jb>'CϊQfh!ڶ.Q%*w'Qj#+Ȍ:XtÈQngu/űCd·avOQ'~sO6OzM ncЎ s\oI$d^A*5FCc0v\!G.Pm40mG0UkVT2d8lf&I7z|B9 0eNN"BRj|mr!r(Pk-wpRx JkCڃcl52Shl?N8Oprt V&A@'?Muoi4Q2ad)!a#I}^R]OY@ٷ::ȇuO N ,XX[-jppt>o?W]1>;|\|fKATЍ!u(Oc@dX%tak :{A*˷;iI齁1_ bON'mw? :;͜pƐr:L̶uT1huۓ?u"_@=@hJ'(5D8e*ڦh .]tv[syk03/np%;vXh&ip Wge.sƇJ}tKqm@1 endstream endobj 171 0 obj 2473 endobj 173 0 obj <> stream xZG SهIIu s7׏ZL06*'A?;٫F/>?.Fsc@ЗUNy5WuSwPOsīOOfe3PWH@( (˷4^Ih!Ό"T=7) FFW\ A\uus%AaeDp6Ĭ`r6Z>J[4 i?3 Yf*ݳsՃGOb*;Lq]I\f$iMn찤90dvh~;8<ʬ")!ku\CI+Ifɐ~>)fI慤0I!~l(U$1T.C*7@&U!_t' ¬nGk$\m9AP8ygdWK*hⴲ!Ng]\g4ćɐfnqדTdS ᗪ+W64J*-iK5I;I | jk{l;nUh;Mϵ; zj1ƺm4ܩ4HrSd97FLc3h~܎Fs""S% vXBG}N_H[7[=(DXeaIXBrX+F-mn- b(6蔪֜H 3ڔGHR#D}N HWɝ=q7c3 lU=rP=#1F5-RfS*K[bi5A Hy /[htR{1fVmZkzpT@xp*iBiӸ Cq0 EM+tOZN4d`IACžUwnOZF2lVTmF6#4 ͂W3зTS<$ZņƄ3V2vR@ N۬tcV#50*`*:A@I87EN>u+iLTE>+č2=d' M7%=jy3=2p"䩹H>A"f#2'V2]M\,,Txʰ|(i/b>0 K0asfk#YA.p<ƚLx?7"t rW5 ذ*˥Қ'w1[PZB)I,Xbʉu@ӯt +iwC soS?K0}IX;?F5u1wm\UWx,p͎)!f#DR+md?$ zR6|Q6eT;ԊźEu,l{j ֓O Q9Icq0H8X&ŰQm-X5wi5'ڝg좴"sF9/YWy_ >/\. ҋ6,St&&1hI*cRӟFֱ3]JJ`2`Jm Iݍ7'7׍njnAU :Y֑=ŀ@A3x1*rd{dC@S*7:lD*0ihT -+FJg?&uΰxb2T,Fif_4;FmDE;׃dU\R^sU3ZF'Cc;*}-xNRՁ=ƊRr[wSn!k>1b>Zқ'9=9s]40<1R\1W7+?;U߱`Tĕ83y,pYaֲBO˕ plk& kl4*Uo"(;Rc;vj  Vgo{+޳R9X֙` c/f|-So֦JFxn580;{`+XB^[6Kڋ) NiXW[n#ݧA%VWՄ­_;=Z&\Z(!)">)ɷ? endstream endobj 174 0 obj 2053 endobj 176 0 obj <> stream xYˊF Wx=!p 7He_/Bm[ey߃F/_>x>ޔk= c*@BяFX17WŻ0:æ;Pk+!NU6h X ,HK"3_"`0b%ӟ$  b_aa0/C EWC> tH=\zLO& MyN'Uy2<EQ֫x p8RdL9%2'M'wHo};\UU"Y]{pBI(%=}%t~0,k l^fu!1^?ɥθற;kSL)Pxq;3慥ddD~϶!zq'ۖrҔѸ(LW{1n%&LG0i!%Z1T+#/ŋɮ|CCTf|Gpg;peI*E6ugAE@xu XzEl)H Oqp" >ꦢԐSmPɏSzļI1T*oVom\ֵRX4H4":ƅj\UEXX h*o goHL҃Kmc&JX'82r]A-C"RN:3λMgFuhu ڞ1 3o,~yD122,C\%nzꡕxoyF`#: )Z=e7mcy*qnA},@V64˞1&IȦ]=q I}UJua6a uJ>h?˴T v%\KIVghW2d&.T5xt{1-2[ E|ƨR|zƘ9WRiM`w5U)R'TUʯ4EkypQ޺,\wln݉isy>Yi2p&#"etBR6pRf&$f.E}UboU3O 6f \ dW1S2Zvt.H!:$daTO+],IAy[* 6ѻxB|P4)SB2nͬv_/6a9"iP}W߸Xi#mU,oW3vv_=PK;G X%RX ]#1EGg ۛ8j$Bom2}1RR-ՕHTy^1rgӈqp._*eƃ7}qcyRfLK6o>UVmDXfBzN +͝2f2M~kU03[7k\ }yiDZ ߺlZ~'c#۵]PF `lPtbM 7@ZW?Y2{5T>oJi/= endstream endobj 177 0 obj 1729 endobj 179 0 obj <> stream xYn0 )t#)b@:k0`G?r먮thM"ďlPvȟ 1ROۍ5zkO;^9gdrDN4,08=|U;h} {hwiqLChp;"ȅҽd-2aA=qhR*L*ЄqY-i/Z؋d^/J#v^.7IFVY NҌ'"%FJ5SbU,b"!CCK>Z+P@HNP# vQBL3Ȥ*:l~顬^xrQE8_ij'(X|d[9baX1W$]V>HpNj2$`dlMc4e"$Ѡ7㓜EPr~1\B927stoFXyܐv9: i8E;}Ec)M !q$n1 rC }`c4,48jj]kYǖ>8 9 ?0q( sQk|S;Cy+HVRqhȾ \ d_x%(xOWیRk )X୧pUPm XG,3RGJA!eP)σT b]uˆW ۑbж܎|1gr|eT[1h,A1VndBu5lȗP5 ^ /meKO%졫;dc@X߯bPӬ>*)L|PUn@l>z݀\{ u6f.՝ n@k+PW uawrDp 9`zv kBts2ei0Y܋^(ds1?рzP7-hν endstream endobj 180 0 obj 906 endobj 182 0 obj <> stream xYN1}Wtf|Y[B;R@R*~ǷIG BȻg,f4\ hة/hvCO{&a9^o` -ŇK;6ؚ:++G*P45õ%Z0Kg[5c L9R _ESjS-Rz.ux@6lz;#60kN+93C!-~3J@d]r(+5FA9ӫ*ȊfuDpVP>VPZ ZA)i敧w\ uߦ*ȕQMI} %TC;Ԛ~R]ڛW)={I)TG ~/3FeϝD*'n\<%՞VUia03[ğ0/!t_-*HC~Z:"P_/XO1pK)^/mf@vK R16p.} 4CLuO 1[We pXNN\:IQŽ "rܦ]: +}? wu>@fוz bbk J$:,{eG4e##cT悬p⽁})忒nI^AJCb iui0BYz z4q›}FYj淸n\A4(+fg+.iVȭ`T6eꋦU_|ha珲{p'w/v endstream endobj 183 0 obj 1014 endobj 185 0 obj <> stream xZˎ6 Wx-I= ?Ф@:~)[Τ2yxI^n\t55oߛ߾4мr{}4{K R  45`_?_l淿np9ťO:3 g=EPHg˷7he?A"bqO[;K.8𑢋O/Ҡ%lުj%wi#v;񉉕Ƙk}U7T =ሉ9Id+7˜&ۨ}lςPd1w0t}g U(ԝ|cR3*Cq@!POQ2B81r;0c`\3N(&'\]y;"u V#H"/Z;i&e5'%݁pA *)~$ PDIGOG*:w2J((VI.,ӭ= ka",.>uKOj*udL]qhlb2^av ĂtxbR P$,F<4Zx-M-̪\3<0Tq Ȓ^ 0X:,n:A0²( !Զ&/T-kvV;Zu)ʫ1Ēv̠-l ĕ<~?jt9ۻQQ5 lLkqɞ3G@voFbƼOK)Qz&4gꬰX[TGLYG]:[y4?Y7 ȭ ?\lɜQ2  Q9< S>upB<™= ѱXW}6~V`N>ڧ+ G ' F%A0sa!\;1j 3XZ"iXTXTT3ZR@ii[K.\ejN=U%Ps5d/MME6fXė4(Uz@ - SF9n%b理GJr);WebV)bP8IgCn79yH]lEDDhgj΂cΒ"c3DӦx*80m/S|#E Z!C! oM7Łf{)Ө"{?G5~fFϼI{._[C[ݘTa޷b ~[[]c=Yj(09~l%~[/ED endstream endobj 186 0 obj 1553 endobj 188 0 obj <> stream xZɎ$WY6ܒ` `sELdVy h`Sb{,ߋ.ۯ~Z?>_VKsMoJ+RFY:UP+]y5f.nꮼ<' edSVi˳Vh㗃4>!X4ǫx6®ys"c |Ye (BOjlFz32XuӏeOg`,FZfIptV$k> ft=Lϣrښd9Vˉen;3:A5g SC%FCÒW5D6c`tK>v~d]#Ii8;F4_7x%5M}\{= _o2aa׍՚eLYxb?3ݕ=HI۪҃uhBPS;fV{^B, I=|aX[Z:޻"Ӭ=L$ H1To:p?*t1e3´1KX 2cIqWӯzjθ30>dX%- Hـɕn,6$#yk jZ5b9\[݆n/2^ fbތwe:[xR|Ot{_"sX9L3pk,i[[CNodŎ ܄ؠx4҉#CX;,zM1AQtxN̪|HS x4R~pu$9AGeLI%TaY0ZK])oZCi&bJ,0Fc ZsFuٽì4V>7Qv^[ CJ .KsaA0L!3E ]EyƴpRCP265A]gcz*^I.сcmp[?P>חˡi,%{զrۚs܏"U)$22]x(ƹBYaJ6F¾烏~sqGH͝bz؛ʸ`z|{@x~;!.qkx?Kh@զ\֧"h@JоE3Dպ;2h^ᮜR~Ӳk4fMDR_s%4Zn9ux 39Ԙ;܂VuJr=q:RtI7ܢHo8i?INۛP,9}#s$\uL$kiTGMRk$)_b`8S ζт'0e]Z\a3;u q`/lFG};)l+5ȟ#^e=I- #'Ao0KӸ?+'! uE#\EdЅ3ziuF z o'*\m ĈtmX =uwo8$8 |p A>ZqWm@#YJ\<@C;"yv,svW^tv؞AHz;pk)UGWB&!*Dzt]杔/G;|;;`qI<^ Ęڹ,L2J> stream xVˎ0 +tރKR/ XX'}v P{whN$$=1O~pftb>o/wY'4NFÙwʆ>+1 Yrz i~Z+DgPXEXwfruʄ/eY}Ƈplc G&F#䆴kjm#< *d_V%ڜWIL9< cRV]LbG(/%D؋HJ DB|[ =3%cЕ]#Cr`Ups^ 7_p{V:\/\kgrTq\5{oFyp=.Mg !|rufU^& %gہ8J+-5vm6Ҥ<-l98z,)CE!@9?f3p^P[35FWW UxZv!d3PE:u MytCwǔ-t(:x|lK'mD/o&^%%7x-B+%ڃ endstream endobj 192 0 obj 884 endobj 241 0 obj <> stream xw|TU0~έs)6w2I4d( 5t0HdBHvAEl8`[]]w/]+Z2ysMSw~8ý<=srΙFF(Xj-B!m:?g׷jzay>aUcW.ֈ PdZ*(jbWU(Ա7߂)~6tMFf{GShCqw9}Nޱ{c䷶[( ×|OX 񂨓l6#r{/ş>*ctf +;'7oL~AآqyusȍPGp}LHg$/W毀|DϓډzD2PBWw݃ÇQ;ڈ~iEKA\=0&ڌMH@62:vd@4cK?1(MAQ3y7ޟx$ifۊP1fЧϣwp?=CAZBנ{+Z&t2ٗEC+P v??`ƾIBP!Q'z>@‹p=`ϭw>'|4hAKbw̽ة ,|h<)4#bNã4G>#2%̥~kg3[a̾m> 37?eYPrt! ֣Kh;pމQEq[ 'q>>z܈7G8~fB=i.sڹPl\lg`~s?jzi@lT:t+0z u8z ('W©x4ƹR w.|Ʒ;p7</?2@fX/d1L3Ylcv3b0OMw[;?oX+o Ncgv^> |}.> 5 -d|a $DEV'֋GuH qF:,Gwѻ`slfh {;5?]Ŕ2ݸq_uxcgYtᘷpCOLɬa6p| ׇ;p,s`>#~hm&<U 8Ы~Z,KkQ:3 o'0; y҇;Fcƈ>=|߁]{ ̼'A^fD}C|Y*ѽ*w8g {3v)a ,%_4@әt':/V /+N h:FOzۀ }+({/_ ߇?.wpm P4׀Ɓn`W暅.s9PgL ZLVoB`l/W< L^nNvV stƨTO&'%&{.gnhK:Qe+jn.?mZ6y !4,[8J ESFbA38efg)~KUkKJ s/>P Sn\wWkQ^3;hOO볳A@@.A욀)dO).ti塺ʧ$|KZnm P46-Li3J ]:cgTF+k:]hyU7ZBڰ)ݮgCPmrն rwD!;vlSͫ#%K(ˤU쨀w*s#d(rRZ ;VCwt]Ccre*,$4% *9YeJ̓fMÁ`(:f$'&=O1VjI2Ўq%Ju"xNwi_{?R4+D@"pw НIB >NcE"ȇVA%s> Z /[U ZpsKsr 'n23X{zqݺi/oߍ!;\9oiRF̅#qym\&0$4$q 2y2vsiO\u 4+r4DB/H)*u{|`y#Gtϸs̅KwЏȫcG_Q#߲үǘv p4K` x|61<|hA?sCC80"` ǒ}ﻚ?~,U@TP/_?;pEzSbRWzL:!Kì 2(9 )LFLa$Ql$%Ǒ PMK!שǎs-`d/k&AJpʜ2ZL*K/[t5< jVRLU. UrԤQWYmV6VɋF_rS"_Z**u X\8MyȻ\ٹdEcc8t #[ Dg>;5&UKpEł?%}l U\xw"t86fi]{~O7zm^r˱e%LYtݚI)N`u.*9޷{p֭/<]O5LdYT\9o3_~^!}K:v=((Fuc[¹ruwzΠ\r;h:.O.ia@t51xz>>ǃwU˞92{*]?L4*y<~gs2=.=qlv.pl/Dpuo+-@˜mo(gT^ qB"Yω6ݜ5Sg]9j{ɷvO -Y[:yŋwWa2`  nح $N09Mt/ret&i]Ea!nU # ^9Xd _,*4˅H"FF =FE Do/@TFs u ^=KрY dms !&fW 'EmeCݭ) *e򞢚xm@,""- ,;}_4gF/,޴n)ݱdp"1]!*psQC2Rv_ܞ񌈎x@ܚeX-C%#ֆ$**[sxemgcl6NE3آK')K)DjyY& 9P 0ؠjbIמ*y9@F޶Lo8uR !}ˏ⹏=n۷3.EL8)x>o7=n|xsF&W,/0nzU3:dL7Dd4A'9X^? 1FdbCP38$1upDOփQlaoF/^^I(`JYz"P p =f#HUx|g@k'W@SQE"tOЁ$ZCTg@3usJgo{a~Adh2BL<=x~g%}ެ''pnuhcYOrb"z%YSt)決sN"ZuI.dGg2Lf&QXKv^š{fIp`ݑ<^QUd;X(MH*첝Gɛ$'Wk㕽x#gVaY+*,VdCS%z.M)p ىT}DW Gf2 0N2dvM #I ﭮ2n^OW=r}RG +\[8ra]mc-d^VXr}}}a,}PƢge4}oLJNՕ.qY.7#ZPZ?#M@ KoL9^લs!Ȣ$*gA%-lTNŇ`EUKrNUe}HHH<rbr%EG*vl(B3q5`a\t;Ѭ"V:/Svq_{s^qu٤Hh遚+|dے،cR]\XѺ5_X?Ȓ9paɬ+BÕ]TqT]S[\`gtYO螰{jf.X\E2Ul󁸊&!CBM&űaatL#$K2V+4lcZaj1q'=0!W&}ˤ];CDxP?ui)x#qSFjZTVS,ԚKovdW.Xťky%}W掝җ1PoP>ٖىx-X Q(Kj|Zb [d)&%/a ڤɛMf{C}Buy`yVH8kR!r/b[`p=)2wGS^E 6V`SL|qRsC+>qCb_S83umê|{b K[/1ڢ3 Jû+4ٌzrTRRJљbfDc>P0t 0u{6X1iuœ^=v˞8{fށi ]E9'XpQ [7yV|.?"òaeDN7F♁jYbpv|Xۦ.Lۦʼne'NHS̉ȀͯbJ ,DTn-||"FN .O(nm9E 2VeV@Q2ބxp&-w| D-c0W@G9;|XCh{ɒM;|w؍=g,mGp%{{ဉ` l1՗gMv:Q*ƣv6$.8RT%޳#(g 4& '!5ut!rN}pDY T;S `[/1 ID.R0ۋtHJ55RIq‌J_t$61yK_5wyaCv7^R0fbnf&i>vuq~~z|ܲl2`kG\'XLtkМ; ; DH |%@+T9SREψSyN0a' `71{2o|ր;[-U*R2K3|ً59ApaD2gݎZ>w&s7}WՆnwuu-^{_-ۮ;35S 0kofʣDZD;gu_q~d_vf,bo+V/ 9ݮ]2>+q7|g'Zc abf3 (G\!XAȀeQ˸.v.k|J ߥŻnFjcP= R%v<7hb'ENlp_xD|wt[\ks:#h0lu:fE&l N {uIN'}\)W]svIA 3l3l$,/Q"/a( J(P=IxO[p3m;o^[71.ڶד3eyPWd#uYe3a#ƨYtIETf¹اϊ[q4n&'-(+e Ud KeDqQJ1T3B/P FM6o2ߤ ۳`?tPs7p836mnȴg}'OlYo/fտ'7P:zHk'$) (Wus .eu:2P l(vnTZ{|2pw l3Rlq2J%[e(K2Wdt-Y^"}Vd/ h1`3d{h[xm\hu:?3~<޺1ַgC^(ݤS;mtY}R>*td&[+3ε[L Sb e@`G"XI,Ml1Iқ-Y0gщ"L¯Y@V'$,lEZ8CqDF- HAbc>A6xvz'6Yw\>:x- ;:?x|bNpPszXs zG,~=KK3pc))&1<:}[A, ",BZM悂1y>,*&,˰x{v59֗gHn|;~;t~/{xY;@G~(4*fk6v.u0 Jd(&`u;R1ZkmF:<]W΁L蜒hwz,w"Onz3>KZg4*=P=räbN o?؇`m"+2vXzI[|CA"+hO0_%,.oLfs0㒝d$mR);bjFR0 6DUAs<܊p+s3^Ft <eH=3p\ n PG;C 8xϩ']w>Ӛਫ਼=sXMEvzv뿽MOGkf~GHq[.0`A,Nw+K7Lu4cmX`,6͜5\VgBt!*]OvY2,f3ҥJ.&QZ>&y3!O`tbCsg-\hGZ .9_$5 ~ςhԵ\:䚿Ǿ;zw"%:l[,if R?Sy%}76d3y+fWByfřgmz^2LNɥ43 :TCvc-\ h6̚t@H^tzV[,U?JǙQ8gr{sԍTՇ.(5r)2wJWJX;{ةcLa┬u[;O-[yKmY![h^*@Cb0~`CSp"z=f&s(g "c2ArQ *V XkIK[OSIc՗9bIo3w=#lj+WpRPÝ#Bve)uF=eC&sD@OOV&/O{ȇq3N%g?6kc\w1x_a3Pŀmǐ|.\A~%[X?{Wz>"],fgYpr:`мc;AEE XdCN -GtgcMlj#~a#;lM+]9 90 E](Jđ%ǵt-aVO3ihvM=̣@|%:Vft0AKX DBVh􃕾[StFS2וOO|tv9h҃T3ŕ g@ΆL{4\/2 H'>pfC/Q!u<Ïk#̡NСqp)afo1t$6b/2 l J. @C0MVdITȰ&f9S*:>&S۰p1~FJɒFݶJ~@E"D^$9y˰ q` GBMĎ ĖN&0=Gb0?|o!}J T/N΄gh)2hD # G8% Mf2d{z|@,8lR 3mOR38T֧/Gu sD w&9;<䕗"n۰؃[ BX+ҭ2=p1b;;\+ʞɻ}]tܭ{cǓ'4tY5܋o}ꖸ~$v<"=?WP)3f:oH\F3E\n0G2 /Nrro4!3+GpM*ID%8)ɉXJx"iTb˳1[EqR衩1/&e$W9%PIKdrL|?M2W4W ; 'B0(NFGrDn%C{KO,i'EQ9?E$.H|pRwdfؘ)kO oXoɔq t}Ğ,Uy[myɸo]h͆Iq L+^Vht⊌7׬mbszČ+t8cxIohdF($F貑1J+-0Y QD,DzHg|r9x,rkKgZi/[2m)mbSw?~/2QKc4LOpq4[?' Pא| 9sŏ|=2N#fF8Kz@0a<9,OW!1c-ӻbd;q%-~jWguy 'omsh.oc iAkDo0C̬YF4g%2,/GH7NTca/B2ue< oc|9 Ȼx؏z za;YHAW@/ݷDĹn&Q&WdN6;qf)1_o%ٲ '&eBAeٙ'\I>YU?&9|bƶ80+*ۋ|U4(Xi}}}Ǔ\wrbq;1ѷc~z~i* }8x]b? "'7J?:ޡ<uQȑ;=xPUH'] =f[㸒k$G JMnXTBnbwtdM쎏:Eh2p=ѷK{3_PEH(Cx%Dfgg}+ŰxJHXݜH+jm2x2DV`09]."'-f!.j5\z=\p Ho?!~<>劷UYccz*wE3Avۓk'3k+ϭP;Wsyf|讔}Rd$rQy)u_FgBGBHS(/06&>h$giy cر8/`,reDb/3=~G>Oar ^Ro xW$A'3aWO#I?;]PF^=E;牗g{>uC815iGЮڇŏq>|\+ |=]d3{ӂ/WXJytg={b'abIr3S"_ ^Dsh,\[xfJ`\xvrCZ ϥp PbTuA;Z)SGIpU5h<ycOp]y/UÑدgχõL(A/s7#C7q{!dGE3w5w#/G;b]S/o2456ѴFyuz)lǽqUq:;wMs=.}# <(AȑO=$=&H`!-?F,噞4Eċ0xߢJ,S5 ֡tfKhsTܳlP h`#iI8{EhAG PW^  5EErs(ߦ<4X@fh|RunM` [j Y7j3W F 6KelF9['#T7^`Ży> n~ 4< &S)+4D\K5=Wk0sCxV  /`o &5P߄4\_# *5KL~`Ψ`I:;2`)*mD3i03^uh0e{)L~>k5m`^Lay -wj0Wwj0IZL5(4M$i`L`>©% dp&MTI& A ` L0W5G`Cz@0KuVF(j᩠Z(\ZP3\֣L!HP R|@ShzcM=SiD86j{c@4HO#t?܀ElNXѨ^-jxzNUivh֣4/D?*H |BT q1 d!\y,B35<9\ "XEjٺs8 Å]PmXyPYV*[[: Iꈴ4+9ʔPGA%) Z;IJ2ʍ))ˆ[~2QYѮօ&EB;BځZ4XjSmqJFec" ǡZ ¶P])ԶFi#Q«"piV:uenCIWV*ssPsnlo-B ]ÓʔH*R6V淬gGjZCYHm$,u6Pt'4wHںPWUY:Z E -4t6JmC-T ÀHm;#Ԭ@^  ׆[92Y۠D;HG%CSKK)M`vt>ֱ> v-m]9 t˺p[u4A)P 2N# .w66H 7@#:pJm'ۚ"e TvBC*"U-$}\i7EZUua@AHir(Ma]sCa csmQ!R`0M.Hh4Rvh]kJ + RᵝJ} jAut9 v Oxm m4C,hP."MVA;"bBkih~&M`sj[r:s:mj_"!?p#isN>ysf+s*Y'^PL:|Bޤ_d!1 tFA)S2.%tHK*_~̀ZIQ@AJ2dLj\O) Jk;@ǡ~ SrޕP5tf԰j ) iSօ;C+AB !K(v Ƥi.b36R6TW!2RFtInj4EȀmM*TibzP+# K%w*Xڥ«QhdCGp;m^mYAoXsh]$^UW?>NA 1Bb1XHuOWK  }Ox=sDُ04LU%pq$ Oȷ`{ܽm#'Oȏz_AeK-uz?A{.zow{)|?߃6YX`z1,aáBu(.(p(SYµ)s7._o1FeA:rglV]0xlo IQ\v(swǣiey }EHa>.;~!7(vg_{~}9a17r/3<x·Νn6zG୅BK3z(ieB[jz!sJfޠ*oA6-Oys,j2w4B[).2I&x/wOw'.ww牻sqw;Itl:YguzN'8C:{CCȝ̐;Cc mgg23L3O֢+s QOݶhIqQ~wq`f8wYAY(F CL 71] %Ks]6ZR1'n5}؟xv3v.WEx]nN3sAUCIK Пdf UWSGcI16 ?Z>YS, x GtGe~O8)Td$s)^ax˧:NquuRP|^SKQ(C(J JmC8^Ǥ HK O #DVVԡIK&/WNu3ᾄ7'XҭO6'27-` I`s_pCmd=1{"%YfߘjY%hY2$[arG k>ڳ\0lҪX hI51KI""I8:' b’@;tNvI endstream endobj 242 0 obj 18003 endobj 243 0 obj <> endobj 244 0 obj <> stream x]n0E .E !) ^ dvԒ@ }x2-ЅCjfxt WGLݒV.1p.Oj?aOG-އa<_C\n_"kSۋ%qr)>WF֚*v>ghjk2?++O6PCUMd#\=-;d#)OVk}p ޒ% 1BD 7`VԤӿsM }_roMZܒ?  -lol_[1p0_b_\CΆħ[sӦo6|/iopҿ=ɿ n*2fkDTw ! &bߙY~ endstream endobj 245 0 obj <> endobj 246 0 obj <> stream xԼy`eW-<(V@]7O1 e êNo0p$W$*tU.oh5:4~[j?*+?)\Q:^+{p+ #Mp 3O*Vc_).@M]q^bQ Ż 3:T)WDt9JCƐ]f=@OpElIpНh;zAO1\W^]]\\PD >cɩ̩c{}S_g@eh Z6诘!z2dC4l{za-XGɅ,ӷEI߂9}mBћ-o`N,$OÿmA(~ \ɾnQ_0|y2xX7|8[_H q0ùcxxih%j׾,1Xy Id|ckGXFl&{$;}okQ\P,n,vT|]YzVXv6-|^'wG ()2c+Y8pN–b8 hA*$,jg_y?zVf Pϻ+~\'Sl܁Nw0x'~EX&$YH"VK09t11똭̛,Ǧjv^^B*F-h_?oLI1LtӬb5)KX[Þ̮`_R13TwVVBͩeČymf 0/  >G6ƴVG*?5w #NA?'ifc|7DN%ג{4:B&]ȼA6yl3~DĄCcX k6J3?OTisLEU|*mDʓQz2p@,gn$S_alZϸ-#;`]m]`6F6"Iy&_|v3˘B́U _tzF)܇C[P=^<{T h/~GWW Gj2P #fgPM#R;H㑕|/'|' Eyd"-;ҤU=JTM* 55z1Oum3o3s<fgH&O'E2-OA&qU+lM8RpWрO ?]pzrMG@j^nEwA<z+xD2/12>egWQm Jm ./n=y{U=S݊,-cG56u5ՙt*YǢp((>-n㭜l2:FbQjBxbfcIҴ ttK04q9Rr4L 5ܺHN'h /; HkvOt3 n;q`pN:Ս[tnKR9*_ӭn(_#-OnH=-H19;IK|UCz\K$]zԽCi9g|\K;VO&q|fn| |D>U'БR.<.xXnt%n'Hg[<9{']E%qt Z'̖rhX4pLi)ԓf; OJp'LXԈV/l5Ug,ֵvFqz}*ʅ"pGGQ[DNH JJ"VXSfK.!K9 *>s; L0H-NgZٌLrN7G?I?2pyG(ybO8 '&,ݍ8t|':[ G0Jo4x95Ysgw)aw7_}$tjؠ`o@x9UTv;kzp<]z{ڻzޖ^~T뭩FS'OmjXͭ{Oz_6ޅ?(u uw4ju8rYTW4X8ְ >|̜ ?c,u\gVvV&jo\u*sJ8___ߡצz!r8C^cy,.$'D**P`+zQ129}$GI G{EsHC44KK-26!|(bh/Qvi\/Kʏx;GaQܷwxGrkyʷf*40xib@0eR0JѦ7Y];MKff.rD-잽ux:.hQ}]PYKh\kEY(x_\ICR( q*c%:-7XZ=4^r| ??qMKӢ3񥖥Q)K>fc;qvwn-rwKQjn¹ovZuZLu`Bcªss^;gC < w]ˆ -NN=2ýiM vqW;N&10Fza Ͽ tDt}dk'98s/V8 1y?p;=ǭfwZKa#wAо߇H" b>`q=CgR0xa0$8)aUAȌzȿ6|ޝx.C-Xe> #? @A¦&J5W 8QUU_r]#)RS /e 7X 6~{D:Q2-Mfy)'T<  FVe#z {pQfiX?_ .\ڎ[jQqx'♤t^D6/<'s4>PsP^+~Ff=(h3>QBâX XТZw] %77c}bC ]ۧQnj9@ V*NRt@qUwt֤$OPMoOÍ` % ¡1+Y68;2r\ }||T:iEK޷\w_e{{V(>UP+fsy*i Kn[$8ŅyEgq!Ѫfc.VkȅtZs8šR ԟ?*Io.GE(ّsIm.i ,(6Tح1fFN]Jsq9Cx(#H$(Xإ`NW>[:⧓wIK.5K_W_\Gu/L/oG  N^YXwDWݍu&nۘPo&Z: 2:J Oָ$)2%}24mVFU=Q^3sTpkf GP)>' Eә qBQA+K\]Q$Eۡ賎PnW`)5Q(.olKި-lvP3*$(qZ\t5kbpdkTW*@LӗB$ּ=>] 9Ad/~떐`h=mvXR֙F8UvqA1nCa3K?fN .Ӏq d ϕ!9("1*k)w)U7X}Vh& $x^O*t{=$}@knAl7J*+|(d7 T\:LF.nZ[A[Q "GxЫ.4_k{w jksee5:*јV>1FjcP4دc{ò=XE弒wwWX-\TrFqI(XdP :Vsc,m*q?ԱG)P|Ya f`7q.u+nEI5yAdSp H~OOz-)/O|D@*&zVگqjݽQ6'[8Xĕz\VG^ymI»p}6g>3R=`n@:P Jq)&{OC$e uKg-yڠѹ:;wYPsPɃwPQ8Y+ӛiW2[GpX]HSePb^[mp48ծ?b+>ׯVb* 4{\P37F_7}OH:Ω7/˩!OuE瞳s%wI w݄3G](-{MϟtYOA&xol~hPŲOdfZ|3q x;;crPtp:$;~t)xbšlׅ[z/d7֦(Md!+H^ 5p֪jE38eCmUUMm(YkdTJEpHNj'vflNrj+#tx<#Pe8d!;<%툷!\ x+FZ!}(n7ד^+kddK6F*N%*r=. PJ+L^Ev="UI\%{^;@d 鶏.7lkRk=K r e@qI,+\*&pPAx>I1> 9{UߗW+bʫiM"'h͑mM*WT:} 5}i;Π41*!\d?CXR~ܵթoWOu-u.]]X$OHb XX?d$m0%I9bў&PiakQ.`tJvta)rPۑ4ՎvR&NKA0Fhx}:UKu?E{1u6'dNVtp<3I'̛8{Ӆ>!XÞIorZa sAQ]h(`'ٞWW2wWnVj׹o<Fu3-O%J_U0OiƑ:J1E-D\:6xםIc\rLC4 #C%"@⚲es=1uQH. ӵ GT~q7 SکmO)O};x~|AO*8慿t?}=82Ynw]\]Cqc .{Qcw4vlT_7nVcsnX'YZRs[vSC?׎Cf*7#: H> RzmTq:&U֠Қ^7lY ˚~[:cL,̗fze\ ك քX W*ñDB @L46Ě[ZZ.&&n ]<)iܸ4.V?BR)t,aP\V9TCj6ijZpl"0'NفgPI\rEHAPi5`UURdS PP8P+ʸ{*/w#zkqsnIsUc"a~̐ KxE=SV|x?CBY׵D:Бj*jap#D.,ldO%p?^ $Z381rxJGV0ذ33ñH}D]FEF!_}.CiRkjk3U^sip2㘠)V՟˱`xzYm2gVU` 16%Zq̪jA rE!ꡄ')0(Y9:CU4ANfwyNRNɻ]smuʖ"b)k![ŵA5DQ&c;+k%6%T q½;p`P L; s7j}eѠ!J[?J)*R) ])J;_@gn;k?JGv7OMP}[clSw'^_|k_~e;Iճt]6)XfҢ38 ΐ7PDa F(ߊa ''9ꇏ,qތûZ-y5M}^;WIrEfx8Q 6JTЇ0)!aXUJJk]rgOs!}?}|jboWZ2U ISi>g¦bN '`UbJ_2c! H:mʐ &thRV78^/qS0v[~]Da*PEtb:sbnwIf^O?*/QذxUrAUda߽wf ~,9}D",v3[A5[U4/jskZ1~nwB֑N_3WFK¹L)X҈7&**VNI>v0A SMihrd)Vk{?/3%ۣҨn))9sY]cmn2x)aly\w7yoBUVgMtp{/W~US&CytO +(  9Bo. 8U7*Mtg2wW wW2{=M'&fjlfjNg` ā* SUgh_LYwH{#q58_hDl>$ >)lpYW =6 7{ڻ(7SDa0Sf'of؊l1XxBMg`<-vZXio1ءJ]>Тx8`:[桡9 XM89$U1Mfg .|c̏7l usZ8}߽߇0NeJJf)5xSTj$ hAn;~ZX%3Ph˒2Ht @VWJBX(%'= *P*S+J$~`H<9(Lm 2b\YF`CGct!jq?0VhAnE'?'di4GYF[,c,2Anjƭ)61]Y=_sWUNLԨ co4=y1͡R._q!E<˰<q(ąHhb9ǭ4XՑL~Lkŭ[Z[P:Ǫ>k*< 2NhQdU +"RC/;O;˗}?TK/o o ޣ;`n59*T+UW`lܚ|>7wj~OfP !'>xIJ:>){ɽ]6ecMslǯ"TL5(fxePWZLzT%=zc=Euó\T:G>%'i7_km^ N+#hw2eV#Aqڥ~/#3Lo 's]2:G:PFوgX *2 Pwg 㲲f;zDHA(܍KJ@%VüTP3V9I]!o G]2N7h-(J;CMRj2IM2UӨ$X̗er!s(#dP_{^Đ6ҩtX 4IfYFa:lkPFt{ ieٔڻzdxN{K PP2wo0%%܏yt\pI8!)㴫D^.+_@a_|Q:b9IWYX4jݎ6OIά$GL9=|ŹrV>R'Nmi_1%8uM`u=7^^ L;A`FRԀT CT8P4ghpED8VYIǁR&dsuQ/Xn߶»Wn m:bF w#8eِDZ](t@|6S45^!DSJ|NP'qVLE͕F vg:z{sʛd[~·bˉ_Rx S;^Q܌e3k/Z|̦ʍ/ӫTN+/xT}YdE55"kڙ"n~9ܺ_nL'G&5j-yitpt2`92 zJO&lLj/ណa&JJJoIڔ+I|h$uVKf&\aDLǴ~VAZcbng4j=j9"+g%Zs7j;ct>D!yݔKSKSY^v12IvKF+4ii1%TXted2M؂ e#ꄻ}_7}.*lxqPˌҚoy{NqEiՇK_sTt|q3L(,9XFG;'єЛm-w;OEq_k<;/ڋLب> XbI,3t6P(29En}JkXV ԡD?̅K.Ry*JQd[$d") {}I^Ϗ߈4^_ @GC2X&c0Y[̨}~ϋw7wUq9e>g?c=c y{0zYBX_DlYt>6&z[z]Q{tۓ.wЭ잢fPUwvQOs7M~f@杫l cj,̈cN!(<)項W G?f;cC])@--M"w"p(~+yR6TG8⌊CF OV~=Bk\ch vM |jr2%;τE0m6p(4[v-H o>;¿}!7z~o]8⃃/q_֨s%͍Ɲ2m^xa VElhMXW$Rɔ/gS4uF2>=M> LBsG Acc^dKƢQ,r{=A/GG٥auTڠe؝.ҰE~k (D@C:ŏP]=1[]] ҆ 9S T lJJȵ~ ӢD,JE#HDe\6l6 -¸P|:JC"m&:APFL˳+DVg;L| 6_[#NUC0S^LO/TJaYei9jvd+oj@m(bmvz`9ceScq?~.p1' _nk;BwC 8|[bVn #]h-O~/EI~(/+ls V^U0g l{h\(o_ovFǚiuĚJi0>-HZN" vYrD"VY~Aڤ_#~-,IU)Kh: $wQX;s2ăRa,Fªcx"jo:GW%YC<e\YI7*cPR]VDAtO\A>ψw/T5=;W$Y]xbaOntڒש:w0fN[j2U5qr]{>&&&84);sSt x9!-mSI܆ I٩Y^?תkm;0<nӪss'GN5g'gۦ)Yg}kx7Ziѯ6Gq 64'"&lWn?|dr:/GP&,JwK:x" X7X.go5oQ__+aʌfW%$NU >+NjXDG(y3Ynܢ},9P^.?8*^r.P;R"MH!QaQ?xsAp/|gcn|#ubm,JJ1w4L2y^GH dkJִk%=dAd-a7 y0iGS%ХID]I Bt%Õva[*~o ^ʀ\Y- ESft("~ 9x$VG#כrPy爁夾?6p<4-eV0nnX<C/| w 3k>j 1V5̅\0[W0sc\my^ f`qޒz[R]G||k>rkkKccK8Qe{pV.=`4,NQ'-r^/SO׻)! P(p B먌H0tw;@@v#K3tUeX_0/h0Z|֟м\/%j%zKݳ2p~…R.T ?u`rY ()аgUo[Lʘ ZPE XP>9k.z9n憚/׭=[8;e4MPi”R\+8JH6+cv QSq-H?YXg`AMңBaF0K%1 ܅'i#>DɝNOwp9s]a;l9sʂd]"'Bs"(us9_!/ :&E:[6s9ŗ38GA.y.fDY[+| dT+,Xttt_:nJS|F+)vˉ>[I )#g,#U,w+DE .' 1wp@brw@70j㱠K-fRLF)ڑ]# E2'2p$+ʱxVɖ@żk*Sub'pd rp sk=xV"r`]Y%9#i5=*V M 3JŽ]\Oqm%UArzj?@}}WɇtVP 8y1 #s(&N펁[ &Sd%q;݂q0 D)zB#RffF1bk5R6?W6t #pDCj5ppS~~Ǘ/Q(FJJ2Zڣx\7:VY%V 1DkN ]+Z-N rfW]FZ{7#?#E($ԈKahOqFx/K\7%^ug]ҞqOZYXs^P)QA[ W0ʯ,}rC ' ̵.,oYVd%s|v>Fʫ`xxʠ=ɲ!CeA!J,ӭ$d+! M7Ŭ߁᷐kpz ڿ@w}y0IfW/ uejsdWLf32EFZxt@vY@94OPaΘ[eVPK[դ:DT^t$Vi%H"RpL̢h$N$:m6_ͲHE"ac\( h7n0ZVp.GImtLb'9fgŎggU\^S{}ȱd{Χħ*^^rUp4!IBҹJ\USxQ#s{rDi-E@h'S##!YY!_Hd.Bep񸜘B:kޤ ԭWpF3>_F!+ 8EȐ iȐ c|Pi+ 0f;/&u$ɨtaןDLbh(WH}~(D7kV`P .ffT=Ȝ5 RI%u8Ovv=>4*d _ J +5|e^pfU#P`%q={)hw}o iG#Ajiw+ hGqEuرePҟqB+jYnA ęP14nŏ'(}ForFϚpoH|?D2EIER&-XA]XjueE7q&[E6)ǑӸvT$;XS'i;j%ܳ臸<=s=ܻOܥ 7=t跋xqO?\cW,\.m = [C_:F.vl3k9{‡ xpʵ+[׶hn ]WÆWqlzc)KCz)SEn2OB+릜|vo9_Z pJ__-i e0y-?aM\=d%+r6gi dfzѣ|>i7$N͵ ?Ojx楒ʾ4e_łc}aD[kZ-hO65ʱ}߭9Qٚwݩs7&TH4UӛbSiEicmqP#9~XO:q?[ǏhRsjӆ&CM[(ߔqZdٔQxjhm&\UTT(HN-'sܽg"}#UDO]rwhmѦͭVd\Fey<.t3˹@cW: :pɌ (hM8yYG $N`.YgxjhR|uֵi I5$%ӳH2U ?_[0gZ؁>|XW"u Ykk5ԕ}Ny593g/~վ>W{-Z_ 2|(G9pyʹ_6n hD<ŵ!^8)vB|5Yw+ E< uG] 6Ŀx!D 7#CDPm:}i`HH^Y;H4%VSr@ B}'`mH\ 0K6 rJf8Aj! u@ ky*B @HvBE1A/eM7Մ2IhHJ@JUDi7&Rs뼻6˰hwjU?O`/mTj覡Ԃ"SRcTPtTuA*m1M;a?:SDm(z4ZЯ4bRآlQI9oL~)_[1Gn i19Vb 4neǬ@mG_""JN9$Qb=`o|`?ĂEh7^D}6-F%C{Ӭ_RKа-FD0DAauP(:Yv|PkB(#N-m fȣ3FNpP T = EG\V#EZIz`tAuAz*}kH_AR'^`J#bF>ѭ-ct}^,ayza޸^͹E14VI{<0Lb]=bq5&t1&d<HC)BddCA,[&6Wc 4S0H 5WW+3F\J\=?oiҵa 1+y{R<*XYpMx 2k(MiN?BȯeH4jAp6ݒE!Bo hi}%|[I[on̓93./6f  CGPJnzѠ_U(]C_֣x|taߗ{Z2ʎ&~QpNqɴa<ٱb hv15hpIGTzp~)BZ {[5nBJtCi%~]I5UGjL~#c̵z þ<*deo\wCa HbkXI Cb$sm&&&]!W讀)zAqw`l\Sݲ*+S5<dE)GwcAI oJ(j6RlKv|JX j <{XzwW>EҎ<P5Yb $dEh i Ju.T)2>}g8*)~[ִj`,%UDU PD[kr1Y+R4$L^Bb b}OQEDK|RP < Fo\cU4i72(FP(/ A BOjI 5Qd04B]&F`S*W}!TMN! m״HFtN_x5M]ZH]O7GH:i-֊AXegO_WGWg!njm.z;whg1[}Π8BD G46Vp/v/;CIZ( FTjBB$1!`YpPm\ )jEШ8E9PiqT O'h1Y燸U#5:TƔY0B ))8)AmUN?U;>AA#jDF!:\+@h J~ĉA9%+h[hO[T00D>oZH ЉL8md析E\[hqChxдबb38FFfu<<è Qݧ|I9s1ʷGP $1Ĵ]Y,P3ƈD2z Tlp׸@tWV@Z_]/66Z7u_:鞋.xAO 4gpbex(x{B3p`^8/vfio7nL}3ʹ7nL}3ʹ7_L[t%_Kȋs̕e1 yJCӰE-9fRv☡sqn@p\ܼ8{\/{o oWAքٴª4O`>\񺄷I4ER` M26r(r('!>[hϝ-ܻN8KnQX>#A$ f7ҽɰϑ!A?};>S5H}3"bcgb Aq8h9H=c@?cH?F8e/er|6=QAa\~ل-왭]AiLO};@cڃ,=x0= +!aNSa C&%l|N }0!tb9w_ۄ6}w m67PC{:Nm`$J9pc Cz"[+l^ 5Z@F AhPx@"4cZj[5fpO3fHEZvH9P*ʅ R rAͳxsd>AlRV |0 py&KZRxz]z :=߰QSU{TJ@RP۳:E`b`1/FU9 /I6WJ-J @-ǐrX8pc0cp惬|tHmB,~,ה@!yvFO J<i$aR؊a+-6;l"lA!$lG`la{C i?\=P{ӵjol}-f bVi77!bbzSL׶\;dyv̐e`Ȳs1dq Y渑'=KRT;,7#0݊ins{=b3AG^=L1[N٤g s#h)7g6NcXl,0ڌVS)ÔfJ5M&*ěJr772h@S> endobj 249 0 obj <> stream x]ˎ@E^N#_$y(L> l1 >}v) qtA0K-N1,<} N26%?wwmLm xVݖPO~:OE5!E=>Ͽ5Z|n/5R|ay< 9(#Ϛ*ԇv!%Z~.6,9mL:VU׉pcW#[\ am~aʸ0ހ-s,ߙ{|]1n Ls54>p7ғ>: x߃?2-<8<7y 08Y;931w-<K> hl_ow#}%NF෰"> endobj 251 0 obj <> stream xܼy|U?|ںzIo٪'@ !M6!! !HLP TdftpqAQjFQPq`tQ #HNyy?ߛNW:so#;gMl7 !t!s}Ǥ+@nGHxvJY[ .#$݋?c̅S2!yɴ'{YChpiP|xИ4N6k=\{>2Ή({[}=}M8^]gM~bsz=8{1Fh9;_ojg4PM( dͮjĤd=_гW!ś (@Et}3"gؾrFLCmƉ}sн#< y]%iH<AXD5h[kUo9~q.a;Xحh$$W*)y8lpCȍnBϢO7zH&t]呾62 MD_@Er]*]yj"p:t?zzG6P*CC0Tf U2CP u?W<۹Gp3du4=Do%*߫ЉW ,Fhcc02Y0̓:=Eߠﰀ{ ޅF0YH~zE@Yh0B|ZB[ͿtO[o_CA(' - ҇ Oc) g4G Ժ/{3 RJI+MA=tCZ4}~9pNs!O8/N *222.@w=#D,5HEt ϵ4z >1t}N3`u+8h|+[*?8H d*YJô@۸,7pK^?o7S$!PgNiy{$)Ri\F\x:^V|?;q~?G3|  _$I2I%!RGEYJ#O`')9O:FSh> Rz3OWW.+ݠ >/߸xkOso}O/ m"'z"Aq'[JK{)<6[p ^`^kПf2{&9vPµ5}[8ځ1-7w&\4Kä,p_tL: {h9?0aI#킅{=Fp\n/"/:^1[=^̡ ?p:PǕt ssJ4- Ǐ4 ߃{(*hd$#Cݦ26u#ˎT˨fwD~ W g9 g}@Fq} 6tmFG7P?} &Qd7}xX*WvлEZOH'^L2@B׎4qFЋw#P29ً㡿\7iDx ~`3Bgw^h0.O^8 q@W> U B/~څzϰC_:} ێVP]MR&Wɸ(-.ӻWςy̌Ԕ8TMIx}s\F!yl;u"LU_Ӫכ>Ҁ#ǑFHH饨4/W~40UoGс5zk)0e.ܰF0g|ꭸ^Z>oAz[\Eh՛ڴ{o¦@m!HAZS*A'V7h`|0XۊܙzG+JߪC6€VѼFߒo#m>LJ4q¸V:l}wm.0n{Am\Lo7j{lYS׀sIzyr#L|>{CMNJ뭖VN lEU [cІ }qֲԚʪ-#-v5&(L^:v?xQp%S7pInsCK[糷>|QxP}+M7h(F;u{5|6kӝqz48N>߰v!ǂ~oG#,uY\E|0d8ou`8nAE܅0V Q6/(ћ9h)H$B@׊2fá1t(C/ 6JgZmqJǥΎLTYOU˕V\.Apsɣ㿡0z7bZۛ,X*gq<#n'EQ{0<{eXݠ6Ǜ-',ǔcgo>ŧt%]M ᾤH*RԢ@TTsJu`rhyIyI}yS=}g1/ b}N6nw"GEݎC3ترn?l`=^f9~H/ ^mû|`jJ-tfz`Yѭe=|!;Y_f߿]ۿ_k]S(Et@> q]7?6 ?6ϟrˀK;# &1zmʀ3˝+7;cYn[bp.Ixd ds%;IZ-K~Ӳ~+ISѨiIZA<6v y{yˋ7ĽatDxAYIK¥dOȱI&?'S]jӸ8U%&W-$mYڈ'pItD(Rl:L*k9{G!̄һ7/^ ˳/-|zlg>&ހgA2pG0)Ȫ*F6m3Y3xZ-s]0Y(vu6*𣵬GbNW'eJHMh1v{ߚ^Oȿ_]7;KT xV u聢{ u~ ?·y b~3g=VB%YBjE투AC&|{B@]8 4Rw\g~f, VrF <V"|BY>=a)a}‘%`XR%O|?>16>1̵q,ujy?%'=6v੩\vx+3×||FӭNq@TMp8e1'Rȧ9/rvdgIpݹyImWA. 0#[}#>^8>/^5i]؄(}=B| ?@(,Ȧ[]&R\THN1cZгpa#owy/×Z?6MsB7rSi_>__`8lGqx/>ORGچ2Y=Q!j&/ѕ^1,T$iY߯!||f(G_W_Ise">jc)>%G@|n0ޚm81;.kH*!h7MC|Lh9A'o{H G~2oF|+Uup5 Jz^EhmE2ҐCs莋qk#?Rm+W:Nf⧵fѾN@RXt8Ko *)1}Vz @OFA1ehX931kǢ.(n+h~==-ʻ7Ly݋Xko# E6kdO \p1. k;tz y4AU`<ϛ#bX[5#}DD$B~r;  l\*o)ı|زVX+((6 _Yh+i>z*p#r Af D7m醝BY BQDW@WI"5 w7+.c5yH48fs =:'NKprQT낧k~Řk~<.XB9%A״wW/4nxm*픷["oA`ҽrͥ49F?Y&Y|.Qj\l)|nS"[8쓬V]QP}>ݏ~?*/;sx#AU_V)& FBtBT%_)S,RbP_UWY(pn:C e_Z+bD\ܪm`%[6XmJu$Do̕WhXK厇>uʞճn 2V޾vDn[(.^}-ІyզCwHaXHod)ID(av):Xhy$TWzZz<(U%p{N)J28QnTydVZzھ)n}h}nk> )MzmM>}uF}m4p:rGxpM0T'c y+k)H&dMi2L= 3WH|P#"h3:lFI1  Gls ##Xl=.jb֌4LLL0&N`L61dcf J3jf튦+X=3#3-3#@|F&8>qnyؓ~W7dy&40qY>w;nhnR(y-ZG̬u >ˬEH%DDY$zMrK:cOڿ[>yy$CzMy5 3[ct5ݙ*F%"A`Icju2u8eQ٠np!~Rhs6NugΤּ}~{ %;EXytN:\7s9?y1Bsr]4 ][L%4ۀ]9n(OH܉I8'G!w(4#!11'${sd95cv$%rU# F4 UDr8'!o![sz3!\5!Z&zC&ԘoYօNpbSEQlv#8wӳ_C£P4a5r flU Cڡ]FO5xS&:ڸhU>}f149|jWJX<=i\M:wkͣN"6s1"mQ~{@T?g4.Zx0ᄕY Y?4sy`E/_d^ɰz8Sz>|A{RJs8wO&K=h]t`61 X5oOvUy1f@f!"p,] E 8f_耨a*Ckb&CmgKH4`~+{~7kϷ^o]Sy*[.pku/')bBɫA@Ganj@i%AN쬆X_7`z4 6".[0Ă0|GI70+eʺRMhDa+Fmn3_X5깣gѤԱ߆/2fei4?0iԲ?BْN[ޖ [El WIG|GmXms4M2|Pٜ6!ψOع[ŵ"gCpĆv]En0YAO4G7&`s,H`ԡ^\,qf`uv^buzw]؃b`IӖӦu]ڌjń&ki6%Ll 7 +3wScs'oM{> o o}(1& z n ;|-[Vh Oqmݾ}}O\}33K˞ހPKusvþ~tHeef)Jd7iA8a+kI3RjhX-FDDl#9;A79H6 D:uoyEi=m2Dc)uԚ$HV`,,uD$5R+[te\pHFyH'8CC^  ,ZpԙHd@9i7C߮Q湷Cx7IA8񐰛 q$*#s8wc`zi4,AGQ9|uTjWn({K;CJz8P Ri3spf~5|jʲYK~w.阏g-7|u8}E+ Ɋ_!"P%x}fw[H F6=(h:4z=t}n 6:O?Ǹc[P'VE 4 P,M@EB mڰ(68 `rȊ[*Q }"&`ji4Yĭ NF dx2yL{ 2ErZrȀ Ci#vTZmdV ~)sA##n١ERgI~-C漒eQ7r1|%&rn2d_ qɼ.& ;pkY}8t:R(IY_9'$q[6Q@?C008&PЈ 2EXHI婸' E S5=1'{P[$ bـzx,Te/yE gge(r=UϽMW _˻Z7 &a-q×Rm:B]5OKWx\2G I󎯜gTw\\ r5F4'HQ5$ɶF`mdvsxC3,sWO7mN9bkNgiށ\nV(qT 9ȣV)omDԝ6vNQH!P5qDîbn! (!;SK,Ũj)":h])5x뺎C,jt9#i? 26jqUˆqtt{/yw S/g[xnc{N)=%>mxy;C3Y+pG9~'CxK&qNscwo .Wv?Fyd/t-#|T陎[ nk,Elj|W**eX̵̲ρ8lNbsݲE9(n ) T-;3mZh@K&3m͋E!VB^l/P2#CU"^^4Xq9wM :Ձ-Ae9/]7#]kM we7lx_lG\J d}Rmߡ55e/ <^rN<,WpҐx0.lUЄZ{.p/-_T=%No|e0E6܉gBx=9by=s&Cf ؄eCڌMߕkч<4{L{i@ВQ=km:;O/g1\TƍTׅzjJJib5x7m;6Ft e gIubZ(٬ l 6m #Ylww~@`#iiEyQr%YCP:*Yte0>F/l(=g bh }~aB2T1Uʷ =ŞR0@Yc)a8MZ*,OOI/x:mЃAF1p\<.}j=b;3Oro3j ]eڐXe '56rpży8"K(wX bed{[E"l7w&x5 {q362hg$^+Ze&'ݍwၱHqKqkXMX+r w Q*J3i?iICB`T8^"3ST8ts÷~>Exj ?cgvRvc@<-;E̳:%ΉpB:a9-s7(/l]ooEyU\-E OY7 tA^-.ٗPq6qTi# T샊|Zf, ybv1h0Pf5+)2F[yd[ELfvcXD YH Ow.v+2gQU#g΀?tR3uF E|sy$"q^Ƀi w#p̧X'/tN՗d_wM  =v V3'&٤E}&ZI\.j7᪄G4O* Nظ7`BlNEGaJRWI4_\:ͱ˨, 16?L{qeW/ ;-譽ݗ.[.w@ʏ!Vv\G3J}>ŪWxKr1Uk,M~D! nzYu"D lΊW["xk#+MVXu7 ZjxʀvR"LS7a7`^.*Fn8S *'V C ?|z9&|%4y$דe\,'2/ߟZGf8v|uqkB,]Gq/Z? wʼK1N\}+oYxihhE +j"X4s3`KN7lji\G9c.ls6!xz3kA *.*.s;7TU<7>{xJ^x^Cˏ \> CtYJC#؉-N9V-89V!Wq6s0V!6hk]'Y]ENgfSrO /xPxP#8Y-'JHӸIc5>g_7IyBx ]֋9\ȚPWVr՝i|I1 v{3g,=dϪjڗe%'&YOf9MDeΗ%"}eh[`﵋ۛrpNd l"]C\mp9v"߅l/ozW"eKef`,rg|U> W}g~-v&-FN*;Df,ZǴ Q:5Jc/)MwBgkV{s}}yړғʮ)?8lPbMQ| qbbl ;ܶTv$|nC$k2IV( 4贀4 °"%^76~3VhG-D*.lү_ S\eAu2n1bO{O/ ?0b͋i\X;dohfãnгw=_T?8cЭsG7S}au|Ыe~ i\zJzIT,"K,1[4 Mu-^O?K?:sxĘ@dh܎JcK`m @`*m56ny (@?k/upR-Ů`zwOIr:̩8:M Xڷv8_??ꥃWyƖUz`;{v~V͙ecv@ EnfQ尀+6h {)8~rʲ'9Y90|~qʲs8o;q 衋8E'"z#gcho䚸&%^IJ<{N7܌a:̝W i,Pkko^9((N`g!0.h+ǝcx{1%D%I/&dKx̿qd)dRGh2u,"f&'b% Ht2!BSAZ l YEg4s'Z4yR*ݷ̡D7/&l9a —3U"E`OtPQ·Eڷ:JP[[llIm~VbNOaP4L:ʨq1|pm0  ØuXw]Щ*{~my'nk`D uDu\̝E)$=ੰdn=R֭pʛF#Jo}=r*l _daws8tz2?t!U((,jsuT{~+lBsHRx \P3Y}7<σf){БCށؘU`[*Ǻ;oϑD~E]u43/N h[pnRC_n{;rHYF"nOzXX%z؈aH=-hf%WE{u!| qw゚߇!@oE}|_@gDDOS'ُ"uje/?kE]ƱV>~K%}y>*n!.);?-vR/PwVem}'^NŹƥm L LJ%JSҺ*]7)Rq]z>sG&䣛A2euyEͳоpL:7|LMhо176&Cdh߬VS 1e+e*^` {1=;ZY~>&Cy1eddȉt &rVrZc2rrOΥ L)g pVSg dggSNd6dܨܗ;&&s(-w)z殉P?ryc2;[ScHdKLwPl>W޸1Y>&Ll1Ac xmB4 k 1h)@.ΉhD- D(o0Сd&fWﮙFÞhn1l(JSbR/f8c&P9YUpmA`9 j=&Wc4;C_g^DF}a,";̆8/5/Wvf^ylIp=-hzo)J'~szN6`3'v[u7F=lp<;o2\|LvCeujcGM67߬6l>ϴFtG#=LNv׽`hX5km-v`d.@]t8jb̂v`~iR2uEDnYYgWj_7k=Ѽߝֈak3F[ >kɦnfv}\nykL7l{yiY;ѼV]QmωiΘókN655,M7*1ksV쬮;i?/v׆ؓF{*5-L#բncI[Zui36хȳe^5̈vbLwXzi&jFg=!ֆ~FX=/f[EC7uxgVid5e}뭻۲X_kYfmO{Wqgwϼ$Z4He[>,Cu, ݒywAi"@h$6ZtkUF*|Ha4vQ$h}PW#}ggywygv{|KEIUHzccmq 9n4k/[vy۔7m]w^%QgQC&ji>"yZ3q^Z4z[+gr3dXudV6bgj;GTa1T#ZڪGU}_?r[sL&z#{q>yU.߭kIG,.n8 kUwq.s<./mV^~F%(W\Qٯe{*$#tO^uZu\*r֜7& :4;c{Ȣ#ó ͦ:jx:0:ir,ǥ>~(=Mek!Β:S :)+^}КK㲆z"=wlמC^£З?sޡS0ӆH-;Esr=1PIz:1?F&A͔k擀E*`{1,:F,,^ O)=¤;V2褑$Xqgxf,S׀aCk&LZq i1i262PƓc Xq02eˬF$qum4:d@~./u>1i iN, =(Qr73eG",G(4 c^EB<wpYclPM0K亢FL"z2k-eNpc/B94$0a 6+'as4SYXĦ ֒|F4sд e8F6kŒF-f,j~Ieʼb2VG9\Z)3y]Dt󘟠뎉q&&Ӵ`ne GP=aٔ̚`3fYH*z3xֱ6Iz^Dgg>}tgK:qδ;kGXVț)䚼ʼn3#ѩt =?>2vqrF_<6vaTÎSIl5fb6&P=E7b3̑Y鲝c5`g>[9b|12 i2OTKp{M#(ü3Ҏ0cU/6!|+04޹Pƌ斕#WLQ̼.13\xHmp].}#۠n֌[:{Na 6VH$,J#,1RVbB#EW8)GiPss)Mv K; G2[hmCαZty3{q=p|9M9dyu0&"@*}Z<ƽ*W*v LOF ݃Gcqw?a&n:}<ĕ<ו(k;2[#=xE^:u26G57*?kwm\kC?(pKrKy_KYM-PFl?~6ldg#Fl?~6ldwF*w>,"G>›m`>S{J{<56G!qH~yż(ʒ{;}:n+~|Z26FK>Vw]w9~M+u2_o_fo;5p:p208 聗qB/ GDW{_>zʿ+Qg>XbU56En$cV kE>7 3f?<5}@>ѕ }UP=ΑNf%c^KWΕ`;|RQ9 gQسR}cOGȿ(8~'~Y:ytKTAt%5?>'(H+[$V/?eSɿHix)OS6@K$Ed-'uu;Af͠FdGr@qe̬_48a؋X,OC ߰2,~X}?-'~RNK/eOp/",>_5G/z9Gn,,akl`{`{{^&%NJa_M( e4&ф2PFhBM( e4&ф2PFhBM( e4[q~ucO`?wRsU]&h t Aa.6u6ZDlu P@9^x4u7qzR*ero BArUJ\C`WE;Ч@yP c]: &dkZ .aѣQVgE"{_-IE~n:ڌ QO!c֨o sk̐x`(!l'g endstream endobj 252 0 obj 22102 endobj 253 0 obj <> endobj 254 0 obj <> stream x]n0~mi}MaVE4筝KOJ%|'5Uש|lghjk2UKncJ)(L$6ւ-q &W'Hg7p-9/ oaZqk;i;iw;0ӿ ;0h[aػ-}o5 K{ӿY8K>7p0/GC+9пyWLZcb_Ze0/_c[iRlc޻iP%Omic endstream endobj 255 0 obj <> endobj 256 0 obj <> stream xԼy|U7~ﭽz_N;K$!")d%,}M@l" nnwwQpf 2*=:A>owWխ={S`)HAA9W!.B6iтYpVO3\+BW7mՑMO0z B߄<6YWa6;xw{Sx7ރ,__g| xO$2F"S>MA~eLgR WC׬=&AΝ6n7!1cb,e2f12_2e.3Wde6`clˎgO߲rw ?Bwa0T6 *!61+!t)`=x4)'d7^Gz-滑nx@֯m2ƔxI:~w} 5ރ_^+8矙|6μ0g@_2vf,3e;7ыL ^ހW ǃs q' D ZT ݅fP3:NC }nsy'~`;GwW319*\G )VF_1/՟"/2Ef<,`9Zj+n4<Esn˘Nl+Unh@Ћ{  4l|{N4ΌubI܌$A[ЭP;eƫj S\d;|N_v{~Aݹh=)ʒvgnEQtG8ML*H "}j߳hhd:l4CO  =7vZҥSssbHF8L }^tmVbV,ϱ (wOU.VU"7ԎG& m ><.Te:9SG׎Z N𘡣}oHEhMF[v8 _LUu}M_߻~3s.M4Aޏݱ ]$pQuHuH/zuLuCW˫='E&֡ȍuqiY' ͠w kZAC F1*9q8o:Wm=G~Y3#DWׯ_>t{t^Q%>U7 ux52DUDz-U3CuR3k|K|>H>:+G*& w7/9C?i_lim()-pp5bzE~uI!.t6 Z?  ߪ =2NY^JqQ-Z3 4[&nψ6\S5֮rs=OE5HZ ćl'TtiӠRW;ttj=& CT=Mm{#ڶ=׾^M7ȯN]X4u{JjaCnj^_*ھVhOZ[{A)];V(|xC'7"hiU7r8E-cZ/kS3p ~}jk]ƣáuhXf> ɦ.t пԦ?omWjg>tZ?!Y;1"돐UmӐl_gCj:lOЍU#= Y`cyI3>qGҳVj`j9_VN[vĞHc'wo\ FMtF"8*4$no[*Vad p$+QI/\pA..\X"ծ:Wź# pEj#!t;ĸ8,. *k.XKc~%7 Q3*Zq<+qZ`\rZ#X$ֵw4-zq@YC-[@[Ɠkov@$clwi+}r: 8F0Hs7e1Vj9067!_L.{4,=Uv1e]#].U*)+NŪ/Fct#8Ue zfnaP& ,,A*-i5x9ȫ|YCeiKM)JJp%5#ȪN.WA8ˢbni/C(q;IZΐJw/ۃGwtoN|U k^s3T{V'|$iEw:ر[pf*%(jJ*bDl ,eoc;ɰjkr^48;Bzs(ꧺ({Kov#v٬eUZ>K0(a&iT'5IgtZn:'%%9]88a$#Yb:=ME 6Ğ5$(˚y5'SWl M!fJ NtsW٫܏ǘG]."^y&*jrH:,RFa-s-+,SuTx$dlU X%Ӝᇫ419SI>jټVwpa.55ZA^0} >fc{3?3!eg=\av<)h]`Nl88.¢2cj5zKqg9v0.rL:WrI =K !fH@r)xAE]\o}5N3/A>aH*sl¸gv.5P+q܍=g1u律>R%}<5 Bi@DVțokje)e7̪E% "'2*~V?>=7w% Tv8";pXi)[-;kz֡CVxMs'cߡ6#%ݘD^e2qG>-owMnQ2x6va a L*K=hb~\4p l)݇}^)6\8@\D]թ)TۉtҀdP%,eh0cm)i7Nʜ/[I 8<é;-wvH̪4jȏlv0 :`5lQFDUُ$~Qu`,5ύ\IcJ*ŮIfŲڃQv3ee,w߾lqQ׷%a_cSX6_##gySzD;[9MOw02{C'\ٕ=Wm⚀ s\YwTRpCy=e}QPgrI@! Ӆ8.ƫˆ:q(qA@a\hy}zF;\Ok/fsK+z"/zU W$+i Q,Ժں<ޞq8fV3#M&{nNԱpnn[KW1xIj#߰. чz6me]gnvf:&KkO22&Z] +]u^QB^2]tQmLJHV F1-Fbypq#BC7AFNe{9\LI}2m|8U(]BV[, tF֧?y5l][w'\*ti&}?b[}P^5L#!IǂZ*mz{yZ=ԫoYͶ4kZg[sH(HtnV{l2[͏v]dc9Osh>L%].,~{PaAVb(KwB"IR̫yHF.܀p` %ȤaJfA'ױQ!oHv9cpy^)8͚%OW^ŷ~pvx*G߯?:$XP: C\ >6Vdt6Wt?J@]68[2f)|HM(13&.Ӂ.7`x[2dla}T&R.5DdHYD?b΄"pcxAq4lQsD1WL1_ (Gaf8(-A+@0S:뒎i ̜&O9/WN :ȝҞa :eڊ Iŀ'<7[OHl},۹='ۃSGn[]-p~-7g|g];?,܅;l2?|UMZ1'][>1"L)BDꝻq+Q OPg)KmKwێ../WL/ى_ hiZP9$Rp5O LD_QaRQ݂"wCq%+!p]*#\k#ɄN 6jy IFDOLQuqhk^A? Ez+\-&Gڽ;G쿼回=Ը޽=J'5qY>~~خu:H~ZA ˡz>| !ӟ@8.l0Y'Zδ򖙓ts%2MvVEa #4IDڔnoDA:FBQ81cǮieͩ$`V̮Qj>ܾg~%ٳlٞ=w,_I>,3D⵽[^O$"g8c ղ e.YպYQ'u>z+.g"ΗxLjQK!H(S֘#aF׃o1lO`mH4l9nx8aK\ib/8jGaOzaW@vM,-n|Եwד.kdd5BGG=679?b>Ng5 (c#!My3|tXx}cK g;O/X|`ϲ;0mW|VxFggho%M|'߰ok-ctS  &V-hA"; K4-dVK BsզaX@Ό?dEz|›dEVew.;mfyDolM3JZIhF"DNĿ>?掊-~\r{?2{Ļ\3mĩ&{&t۹c?A>: oy(Z"j-\@Hg@~8Kܺ#>ӥ`e ־ӥh!r 臲,Jʖbr *oB}x$GKST2C!-Fqt%kuz E_~=%^o?g?+蒜'#N br<6W!C,( d$Ɉ!$cdI pZ V2D]ץZ?sᠥK! nmy[*[*}AxK#ˍe1. u/# i :Mq$q+kY5mEd#h/ g~Xm{܇ͯ'4:>حFsQxxH(=D4IXH6 YbTgZ%ek*P5בԀr!C:WN%w>|{Ox~x鿜Ml?&p!ĦvkA=萰սǔ=S:oR*X2v2<9#iYw~X:ȁMp1܈2?BB\IQ€:4+/ ^l~d-~LG,!!W@Eſ=;4q`6EtשṢjfe{BS5qթk Lt)Lqeu$==#P1P)j/uUhKLq:rV_S_psto`,:72ʝIMS4 !90힭=񯗏"#_ 5qƷ'~J|ʈ{Ns D٨IU}9jnnY/R̝ȭ_yxޣ'?p~-rt7_^na [׏)oX*Έ/R*o)ƭŅfj2 ݝ9$'\fhfNm} EM3.@;K`L9 (l cu-Kh(bKj0l/%'C+)etZGך/\@E}-(5u[\JCJTFύ,b6hbw: .0Gf;wMEL׭XVIcsu3cSFy~f՗omwCE_.쀖]ᦪo lƾFrЕ -Hd ldȘDD݉χXR.FIXʖ^];1vV3\M܍=8x >`wV FB9pfǰ42"MrT?>`wþ\q5>jB{wu%E[%To]Kf ; Bg$Xc`Zvڊ5 FUZ+k]`|E8%{]АьfcRcVMnx[RZ ,u˔+>^8󣻪6w8zaᢧw߾xǚ'7\ٹ 3 ۻowO& sh> k!W8-R ̽<}2;ryi1)7-S\3:S66<2gdSTK~;KᓗW gބw{CMeYMk'53Nl6\}lc-6XY7 gqƋ_$s=uw8bޅ_җ؂CUW_s;Sm=V[K6bFZXZNjχG>1aj-fX-EvZI21 ҃|mUҋXg9mc6lFnHD_ȇ;=T^.o G NyŦn$B&9~[ucOV*q7hM9oyiKoZm='z2 E4_JFCTQTaPAaj.?I-#iKyU+ q}Ä0BvTFYtql{Iq"++hᵨ#U4Dk^9n 1hXk^"(Ջ\8/}>'h9^.kLR=h=WV)k{Z_2B>:EP9!=HooAW Zn t->ߢ@,Y4 4w̯dځk$MOr'm%[+Zy5Sn͋%l~$q\xfo^ia֜&.y̚ui{\,2sۧ>wbݱ$ixUwvdnЎeu5fGoQ6; nb EPR?%GT\8"ŸXHƲQE ߕ+* Wl. X 0XrʸQ+[u|rG%~>wOsW>~ zCcqi ՝<EA@ K!V&$cXV( gJdJtrKײ"v5pyI&~cf׸7QBB `lA0*8OkR٤Ž7i5Ud6T[o*ʚ,q,f"GP'yo պD{4btI)!4E`nžbϲ̦Tin4 gfYB@-| Z >z yJ}@7<*ᒒډ'r%tlj048tzˆBc"/!y5\#LX/0}2[9>VR,m}5p磄$f;YѬ"$Г' L+O0B6*n9[eL&+RaLhddDti:<1ųĴT]jY-̜]ì7ݭܫμ+ٲfU q43mB4Cph N ] l'cR _p̆cFVV+\PQKvXݩЩd{quk⸾&+5:s6d\3vkS |t5Wx#S{G8Wix)s_<ݕ{[9vpAn-<5pCIn,J&ր mfUf1dy$[.w40`LjB^g~|̱Knq<1rĿ"{!lL[Z2VZ( @Z`M,dyE~kX&dm3! MiLrŸ ]n^L_^m4~@<7Z~H&k6Vٖ,[GTlM\#naQŻn3!to4~.}~gvM #9$ˢIQdj4$-ԐO-kVA V- ̲DUCZ,qYtw- ѱ`cEU1Uf(ibfLXv\T\?ˡ2+@F`+k]agn8\e)3|__jؐReNhkyO2rVctL֚Y+mi@]jH c:1Lzo ـY\s >! X`}sPj':l .1uk?~{n{乃r k\Gm%(G%-Zj Ri^#kwTob=el#ۊn8/QtOΧlַɭ-[9I^9Cz ߂O~ ņ-f{KX6ŭG-M\$c,%ӊpWJ|I`VGy%ҠizvXz_B l<$a0&E3*XT̈́DTh2M^GKD" uQq( #K譩Hlö~JlKwrCZí!1nuىցP#xAMTVl%%ZPQWz'DfJ+Q2% Lt@D3.@Ia0vq\Yqꋡ=֯wE~噮I6N7Ƃ+ =ܿ"QI#rN`i(гfyq/Aw 5 (369@\X- |"~:W”G[:D%ǧt #ttd CM2kFMy2 Ds+ܬdlrknZ[*SĶ!7E0Z뇬F5 _O+=yf1b"qlZ}mW}8x}zϱ3IU|</{^}ꗕU4'SEӘuM}bzF=~޾vܕ''<_'f{ .Ua$*򙢰3ݓq睴K|B'$<7!z 3]dL R+E|`*ێ8dԀ]4?iɏo2ό`nÅR~6NUgY勥Г|;y|P>q Q" -TH%VuN,C 0IaEŨC39\,K"j$LHrf#!i9&KSƛ+SִqV++JXmKc;]J$1-ie|t d,[ @.nx2>hpW4XS~S+@VR!z*ۗ,.8Qj[xߟ:WVA4)b?}b&~ĎwuE-IՀ]2xs:}*Iς(e]> I9J_Y "%'sTćqev9n W^.5T'0E`8kly9R0\R²}"##S#U?÷2Y.d]idsssrPd ="Gc//-؊^듒[{2}[sI;b@NFvڛIl;N[qTVv?ϝO&snu{Ɗ#Sny XU\.(]fyIGv@ȃ2@b3s`LTqN: tmBŌB+]r.-KXj?.~}>4aq9ybjyu['ZEIyUS#I.tQ8pa13?W23k3 O#v8@;=!~ 7mfS uKEju5̤'~%V`o6@4 L09HGu a#lxĻK<{#n.2)][9_i-'W`__eݏKya%NFP;ڮ /xK-6U nxl[chbhʿic\)b] QmIL6tGڹn\kl 7/Vɍngr Qfz}캀./x|.rn[=8F]BWI_wzȀHqusL`LQQ3Yc}K^oB ¸!;qq3vG 2A C̠ bʭ%Xޛ2K%`w)F[$x%WcTDib>xέ5*? Dz؟+y~#ql_[s_'>n'*kKnۄǝOn|5Cv|Opp⽬n^,r8ThayV7 i0#O\o }u D~ !(H/eR̳2)@?Cle[c09y$SqgOL]+wVQ%(f )#,?g>ln{AdDA4 ЂJnKl]tf,\tW ^8S4z(y7P2%BR hU(EdqD0H1(nvkq,_L B dn2Zλ afl4PLml*AԀG{ό)[%@q1[)_.hRV"(4̣z1|+gXhJLO[^|C>'-wEgzo$UYюmLf& $a43 /aˊf"*yY8+AƮ%H%Ph ƪvK(+1-ꌥ(D=jZ,0찇Xa0aYP Q&3Zsn<5EQ nOO*>\le9Vb'm.k1I ܼG-}Okx(|붝HR;[T!͌骭%dsS}] >Fɖ:h%D>b?i6'1m6D&3vZ[_"~9b\*??9 IDr&]%@ā1tLT2EK( O+򐐡n7cdUZE3g^;0އ`˒5 L,~Q1 lD 1&c3L 1nw$d'gvrJ8e'>alFa!a'W+2[ c18V,&X~53JRRwVᾱԬ*@uм ]RQ)lfzRCT`p9bi[QXTSrKeB*Sp]{ԫy/ nCsE1qF6  05;#ɒ%?llc8`c5lM 0Ƕ@h$m"64ۆ$miRRa'GdCC4m׷>sJ24ss=s}hf$F^'nMd`i ZŔ*i'iP_ne{;qN7a57ߡնNFO\ű&W64aƧՎڠH-'e)o6fr-@Ċ~Җx@x{`þW l֣B`'_g5LkRuf%U|B/`֧0;aTiޅX0͕{ O!M9H*Rch14w%<*fz$֥FCFV'pǫ=o߄Q^BkV3u߄<+ʚ[MO}yzi6OU6y;=uGg=2f+']U̙U50-e]Ykl솬lMgk3?-iii9qqNM<-; s<)LҾ!L<[n^-;-54/쬴Lɚkfely,k yi͚= ڲڞ*ldK4 c*BQay8=_TxFO_[_ =l~5YXt63'u&@Ns\7Yek% xÀ /Upk'[KĻ̷oIU/XcFkOBrt)G)y/AΈgB@60=o޶kOWC.J0ߤD'}J#;Bυc#G?Ӆg>vkޱc^ ᾵(0ꦅ :uA'~+2^I_wE OY9xZ_B=~ ).[!ċZsX(6ͩi F|'ut8O4[%i\Qg) cV)W=b`GSf\G++~{F[$FdqK$~xS~bI1a \%krOrG޲GZz-79},̸n|wa} g}:r3/Z~g5|tiyY1?mh1g\ f V=7ت7/mz5< PL0_Ƽ_-)C{wݱbGf;b)V,5?a_qa=[|%?>Wz}x7VVBy;3Pu<0la@o1a#3d́ +Jifn_eAW,8{_:w >01l=6c@OyL83^}=P%?A=Ǒ>YU{X! wX+a. [ʂAŗt:fbH_wZ^K{9;2̈uu:>lٿι=Jy |mU-*Gq|d{#[vq|TBG-8H8W9p|$er|$E8>"܌GRiӈ0k2ؗ]q\/H ';bJbt+AJ« OM/$}HS[;O TN~6 FܐK+l`~0`F@/ԯRR]B3AE<*B5çpP &3 :&8r8dQ2m[pJ-$QM5X*A A 0ȺZ$G!y$Y5 5}nPG$Lm$8F0 T_bNj^h{l.?S@*Zyj+7NA*Bq|h]K qSE ,JEhZMUI[tK1El?L槶Ƌ˒I7##%ZZ jrGdAAlRi{HG5ZUh< csy$Kk;N׬qHU/ L\Y#*!꣦OoMySm졄Fh {95iWnC:JzU(vW&e>snN4naj{Z}a1wA#HqDskkLҢC"y=5/ii觚ZOF'Y8?=#m06oB%7|J^?7oc$DŦnzܲ}xG(%mUpb>Ѽk=g m4<ʒV#l״Fn*MF0Y+Hd2ыx~3\&Kx84+~\ Ő͸n慡:Z;1K^|C lŀm 120z`D@`5"z'P 삕>=Dgvw3%>>.8,6O[Œq?Q$GmshlyT>g|L%1'hsPb5 esDbvRS1#++> b)Q|y{|Qz{%_Cԫ-ȗG-6dڃЪ[[sFoJr esiLɲ >x,mvq&&K{"9{E МMo)GqH7ys>4>?&9P#dq?菦U6<>31~=JZ型pQM덶sW tUڭdC7`swWqy!s+.fM2/qɗz6i[xX#bð%I;*aȚ\Kt1b#@=ëY7笧l7%Xk)P߷+c%ɠ2"+R"0UP0Þ_ zݵRS RTi-nnVjzMѱ*mRT%4 l]0߭@#=h,ItƧx'% E>HƐ"ET)rSH S0 t=&LF >yTh%^ {ԠW&_PrTaP1QQ0C_ՎZZwW7y|a-:CƎ"VP@U׮j_ۻ^]-}h}R{צΞts5n541ɢWb dФ4`M7FؙƑ_~~`GCX+ B1 0j/RsI)hGIЅQXʼnzޡHDQs:Tƕ@N"QMy"LV!B֮6)f'㽀> [Ԡsy%  ȋ"D)A#7V x$b`&Ȑףa; K3W'%-x.nv$9n(*5[ yB\obV0q2MWu ).GP&Vw8c̵XR9Q{.ڑ-ȰeMURe5Xxqc#MK5_לnʨ{Gu\=p<ܔ)ڤ .EۆxYm$7mútGu;p\wBk]g._K._K._K.?љJeo^RG]L/Ec}~[ߥZ9jRӘG1Wse@  u^:g 2pl0ߝff+w3Mʿ->GyK!?+>7U`(gP :(7>=?1۞%8 hp E<%Λvd쬉{/GL̵r0q\$N<98y^0qI0q &N8`8ws0qɌίp4Lq4V+M08u穅 b:'ׅ&!UBtmۅh R!'e`zfMG*DBt/D%5#M]BY'e8 ~EC&X-.a fL<y ۴ږ@4T< n8^ЃNC!xwz&m;80+{_)̈́ `-RHs" pFq{H< y)\%VںFw.d bǧLY3B?,=U< d%OԻ%)IG{YVSX2un¼' ooq+Ŝ' ug3"m?OiF/L9~'9^xn;gNHzܾq,7cvq{c ` GL&VarTyfhո:B.ehy) 4#ƥ"ca,1sM&)Ôf2L$)5RWX1K7` s&`:u}+3n=$W>#7nW nݿ2{8)T3nQA80ԘF`3,DzW gb+38lmYͫ;}.Kbb -}O6p\Ύ18[!su+:g-${32 d*@}𥦲ķ 5Uwv?x `IW endstream endobj 257 0 obj 24574 endobj 258 0 obj <> endobj 259 0 obj <> stream x]͎0=OrmHd"e5 H ByR3:g\l/ŷyla66pH풮{ms~),~sړ~7}q9>hHW8a endstream endobj 260 0 obj <> endobj 261 0 obj <> stream xy|U8>3g=! !A ,V IHnH,d!FTlZUp1h.U.ZSi_D3sOBPo}e<<34musITEHzƆSw"dAhõ]jFh cLn͑%(orrcs 0쇠ֺO5rKs톶7|JKmswj'BsyrZ;:EQ6p[|BֵPCL8^%7Mffw8]n珋O)iYsr& ~C(=(OEEOHSm9KO?zӱ?>< E<e/A"'Zv`;JFn GkgaV'+As(oϢXE;P*B?BOMYxh ݇}+݋El$ 4-C-mEO_`; DO"9P:Ԅ>ƅx>y7FEG^/GJ?\9/|ΑGLE# `U&"z lnBsbg8+88[(V[ v]vzGb'*|71z: 'A}d 㧢2 #-={'*?0Exf{X%b$r vӍu%ߓ9K&s븇>n;}[T>W+(L0[X,<.<%$KzMtY̑?DP1Ձ$] !z~?/Ga8Ӏb\||x ? ` DڳtԒ0L;~"w12 { Mr+˹XC'w=8{7$:w 7 ']~?p G#pN8'/ƋU$Q,UJI[׆q&P:8r:6l2N#e (}5}|jpΜq5} T]اOaݔ {гk=XOu'*%db2+zfP+.*o&@Pfyg*}FWq묚0>~FpFX?14 Þi3k>t& 9I)RfU.\>kf\ P51Ϩ CK,Y gIlmSem}ЊVdW,j,wfE>cqY&nݢ -\>5@UU0e0 FnZއo)Y*O^lzU lkZ1Ǒu`4.XU;3~m]q* [&fbgh41uP1bJQp.DR%˃)MnSvOQ:S>!T~@ß^XSՈ)}YY}TD@4V.~LYȀ}x[[55 6UPY(DNE2^Ͳ))Y`=]2l=Iy[ SR!zˆ i$Ԯs<>Oy,X )`%=?I E bp Ѣ3WBnzLVtnpVV0vY'Ź벆hsfkQ:6yrAnO 5-5MIɓ&N &X%tCBf \\JUZ`]wf0aкj\=cjh oSP] @w X&xn)9x>ͫ÷FN92r*U*v=uP>E vIucʻ'ާi&~'m<)bJХMܬlT ''/9%M\[3ϿxC?N Hx Ѡ?ǙbUlU|WGm3;,jv`d%NYg1"Y8nZ`qOТé JuJKVڈmH%Ε=&n1y6$M(&`>W wyAyו@*Gq~4(& #Q\ wP]:RgL7#'S+oټ8ekߟ{K׿ۇ.\nW-M&uލd+wx??}uVtLqLqͳsyMFi]庅nm{ܲn\ڝ!s&XnL0fS HH~`;xChR<8rM0T@5S<]_:l3k [t@bk] H"'̊¶H$OIS?q5tѿZP T\\6Ut//u:w9:gsS@NSq9y Oy_ *?!ZEL{Y ]O͵hSAU|yh1O-XXPb#WyW]{O=YrcV| gM~G#@ Eh4~sgڽ,sWϚ$^NFizPM:>u}󖤛YbaR$IJJNK-2 ɒlrkJ3&%%$5øѵ>+V\fO4<{|"/[Lr =Xi@brTt鞤~$&SW,xnT@}gb)֜+'h&sen0 FSqM4aX58m@1<'bcGǕ-i43'RkpI^aHG '.zTh4 bhtc*Lk1MZ2.~35YM)3rEygY€i&A1.ۈҗ8Ls*Kڞ+?f6o*KpO ^66`=7CWLnzK{O̶ڶCd'[9)$HrB \˅(nc!߿߲nq)]{%o@!;S L=ܴK/qQL۵tՕO E]')s B\ȩ=lƋKr͍6;-D#5RcI!IpDԧ#*m2/7wJ&^Q;oTQ`|҃8B3վ k.ΧQ*.ϽO?d#⓱pV^X3_(Oݹff9ӟ1UB2Zk5dd RtQF堻T&<{p/Qمt"Q*\TFN>F &y'Yn\jegPH4jB=c6nrHGPG-:5Ԏ񨅟k49j=o9~ Huv_]hU-}YYn3LBƩo785w,;51dK ) X.zgcUzSc&zIdݒb HWx.UoĞ;[7U8 Ϊf컇Xϵ=yic>. |v>Օz{{wԯ7#~F2߃':ѯt?%{}~Ν/o>PC O?;>%aR Iб @J V%&tnAL &sAT7v1Wh?rM|z)DjYϬ+Cֺ Z(; 'X\S-,Sb^g-t6m1;\E|(.zCJ2eJHu5xvfr˥*@l Ḩf]Bgc^#q.$O0|/F`! 0X3aMy ڢ9+KJ.p(>z޺Dsf=t[d-Yx31A!T:f}'Q;#}pd]`Ẓw ْj2e3|62'qIM(F#&0 Inm &sU}gêo[}+*#DD+[:1wp yyvٍ, N4ı^/eIp d&`LN9 f4dһ2Su2s2XW.9Sݮ1§\]u.t"֍;.8 n=\PEB䤲ⲖIȇzdҞ3oeSX4:BH/|gX9xn@B4R"OTϷ~Tr'рr:I[h@IG3C b AO\^%s,!>DPG(SC(&YyWM5pr{Ub5#ŕqqe<bObNB8T8#ZbOBxe휝5OY0+<󣬬u!"-[K0Y$Hcb"AzZ>+8y+:=p>ΊP+Lj6JVvo)xSPy?ccU9GKf4vcY8mFʌ6U.\໤pՕ>>uLq^uqw*=NDj8as.m q!] $t3FX,ddxT#6>+>k8q<Ì2r3*Hb=B5 R nv) /Ym4=lŚj+ klLR⡮5x۟֋~Ҵ)@wtMSC*JS^M{=4Β֓ơ4%-/-Ƨ\2R-8!=:2YBCv=^<,Jr{؋#8hRJSzv= 5+{䊮GA^Ԙ99tƉ|O,Yt+f7REV0dζB\]sg'8 5\5n awH8|{ pMV~'jDL&D$:rA]cw]bBPN3cJܕ7Hx\:VYcn| 2Gp̡C^=l+έ֜:}"cbLAbq^ⲃ|@KE1'=@^ZrcԾE7,;kׯ[;#j@c涫u}5]6oy}Mͻ.߼;^ȩ+T I!҇>G>X :hB_Dë#A%G|i-H6 =o2!XX.7>=d0%L7UKzN?HTO |)_s!G VrgV̒wp5o%VfK(DY 8<&X\d NTh"?=;=q"3AȄ^SX6Y5?ay7§.71=gz$cCF$ zIBF4QU#oL#I5 Byt4c=VU%8o)%!>!|)N-'ѫo.ZOT Y-BNe֓2`60~qrDNE3܏]E=21 <8N犋u/RD{SwIb9G [/8*d%cՔu;O(g> vG W@K>&G@8t6u_(v9f̊>>wͲlAv8bvnCܫ&l *vvE=T<,E +TS>WOԨw;Vs?:mDkZKVJZ\[`ZzyTplB{ip1ᭃxv\}A@+;=@E֘ݩ^gDfy.0;i`{sRk\?k7֜NN-Uc/oLXz-[W/̍z;_:Cr}wD")zLCbwS!Q4hG3kRU*Fj_8<JX^1DHeW)N !} 8 Y`j@kUC"f_2HA$8O|$#zȊʺ!V۵hf00-r[r4@F2FuP49OLюi1wp#q‘OzFlB.řxϏ m% `E"SoPe!]~pT:i AE?!qzA`Wy!<˛Sg{w*RҤ`:Д:;ᖄ=^#$h}¤^ oH!Ǥ?,})9)9Xl 妙I3Wn3mMڭcz8elZ;MH/^SKU<-Xޞu^쳈$G\4Q-s Jij{% ub&v;ǎc>_pOc*hVuŗf˦ϞN"]w)ۣH;wߺqahn=eii?~aZWWTJmh>߭CϚBcEe9ݲd+$$# ODQT:O'O'_/3Yq"]or y0>+i8چhId_JC FzK|qFxy#A2($<4=$>\j&fp׺26WI32@R3|c7FJCEűXp)faQ*{ G`Do]TS1lsؠiͩ~#He6^8Qpa۫a˾_bW?9d'O, qYvQ8 .;Gs#ѻܔ '_ EWt[t;}{='O:;l;L.amjMQ=Uv3\cgW(w߈)UX*r?D3#_pAcےm K*{G#@\oϟ{v͛`voQZ dQH]ۮ#:e8'"q oį p9YmJKsNnx"R?=?vvn>h ~ՈG/?~r+ Țďa{:5N|O18UJw05N vؤ/3'i'oǾ̮EK[ﵫhS:W-[nHH0J'71$qV! ^_s51I^LL^9sQX -5 H]ⳄL1SrAC2 o- zO/چMĐ{N}kЂn I=ثP-:8y^DWbXxE^|3>rȕE 2g~ȼ爬O{,qH_&Ng@:ASHSĵzL^L<, &dC%W䘥Ǝ5gcFEq8=rl2e䆑MD,Ļ[sڦwK, =r9MVUzxҊwL%V8=+v9D֠j_ E2ȸzk?|qٜiE1W+v$gВUd}!hW_rϕ)^H }N3*X#SK3qyCG.YL퉮 suLJ;tKk{2hH{ /G̩ͩiٞӛSrrH3 <q I-lhl+ ../,[8mSFC!u4VlA=Ԗ+o^y#&ҏ3/|^Ob{o%Ս%\qOg:D~,ȗ͞TFF6\I3HOUo,̵\&]e<`>&E×~\ftV4;-NddlKy-c}$)-.f=b2:M&2y)8{DJs\HgLid5oz>qH<*▶ VyA ƛIu緉 GLxnɪw}ςkl`<CA|o=/XsUӾʆ߾}UIŜ'Cwҧ#q _2r@-e`n;D<8,7L O~b=>'DCJ @]}a~z^ux@.3P5T%z 6x 0ģޜ~-% Eq/vG. ?_uEE/V6L/j0ֿZiu 2q d<JO> z2cp"o18@ 293)2M Ɍ9Z Ga g2ѱue.`ZXL0KL}-AQ T WFGRKoъZob=Y 9dGL u]c}:n.&b䡉jZja-: ^^ =/asΩ(cel1S੠t hkH 0VƷ8w8qh:: Ԇ[M@S'H2өCA _Al𬀹k? è -44AߍWͨZ=6o&.U XK#b-P=F{;kib]؎Ĥ FI'(ځzj&z&aTZ\NF1وF¨eikTwhQ8Mi;f`[jw6xFw򆖻؍㤁mecqSH& cW ]t1NS:/ӭLsG2|J)f kt:^I[iL=h|mҸ۪bt-ebԶv5ΏAZu)ͽ5i{MVxR^q;6yk_*& a&kkY6{1ila1ɢAۙfF n1:Yv~#u|m}u]fQRٮm&wc$wjV#Mf#j[ZKZlzƭ6%V1:w q]P ۘ 539J[}6|j.K?9x ìS3hdfZYd2񜱞$&7YdbF3[Ҥף8ڦg^ΌZ}^Z7B9l[L2f9ј6i6ClMZF{fKWy؜3{:5 t;>7hmBʱQk7< U2ƨ^L6P[ՅYoJ7gmԊղXf]qC!jnPsn^(c|޵6&-O\demZzq^}\=ֻ}ܞSf6\^0^75l7ǡ|VPc5^5L48oy/1;7{Q"jb^ՖA}~v?ֳب?:^5igo⾹1nXؘGԞ7g_HQXb;@'Q$1|K$(MbR#KQ3Z'AKHP$5Y&:=h[׸7ll 7օ'%ae~kKk'T)3ZZk;Z[u9K\:umPޤ⼉Q],jZ١, wׇ맷7ծumSYB. wСs+[;Z:3w߃Ndc-aʒpsmRW7utJS ].V*k;Te|!GmWk;ݍ-gl$Xsڶƍ ;QYԺ ^Tغ#TT,jhm 7S7*E`TSRhZݒ^j=4v5׶J]cm{m, Mu67`pGG+LGT w5*MPt]-abSBꀩuΦ0}c8ݺ>^ l&P{A'ng$4t] onIZ::R;:7 :Kho]u]0QljWF^iUV7Lk9 kimma`cK]&2K o4nT`m ;kMk{;5EUaDq3UG4’aDXTg'Xz{DX͵knjÝu1z}SGڍt hmҠK=A[[h9mSsss5ͩkmml^I掕t9?D0CYPdnӗ̭XT)Ν1kYًf͚?kޤ_le1 V8-*CyFeckŬ|fzK&~-нvu{8L%1GZUTbtvSq ƅ)u t-l]f]րꄡVШq J% ycTڔkjWvQ08 Xf@kp]o\.0iMT&@*ۙUΦ팷LFڦ& nm_R& jתMt+fTm^CN1Z`Ӏݫ h+hf;[փo w7ONԟ7qcka,#y A{m s*ttpSBEJѤ)Byy*&M YTPM.,.,6[e\t u:\63_~[1h|XVZ;.lR]ʴr|okϩV>_'Sx/%zsՔ}Ʒ-b5_x\=?qAqcuwr}_Eл[~s oW,|uUB" ݍ6A"нЛR @P/<1+hm7~]ӟVo~t'a.̵ J䮇|u'@;AT,r.0Bt΍!Qo՟?]༬35Jtԟ<ϩ@: (}[]9 9W$Zsz dɀl>-e.$rSZa oжK@.˸ ġnߣ|u40m>NlST.A"M mh+lVؚ5[H} Zn>ըF!!] HN?8/p<C@6Sʼv0Ks;f2tq;|;>{o,, B }nl$G!#@ezI Ϧ'v(:t&ub` ,,_F3G~k g rħl[`_//{j( ބ~o>DmHe]e+lͳ:}>n}]>d3شK~ө}2DwTon^kTKޒ<#k>GV.*EQ:")D<9&OJ#aâ#a-3"_9SQGe]4r(sL!pynѭQ)>mP61l%뛃MB+뛞Gb3LvتϥዝoN=>tIԍt)?H`5w@SrDE|s`"Qd$*xaڡk*8:!ssX1`kגIT"*:6"1ط1QQe2%bN0pyLZaE-?{x?/jm:e:Y\wqiWiZ8h>@fA~X+?aM%۫gfbmrg8Eg.dۨ`,bpϹ50?5\Lx븠30;E-ǣPPʦ*6|NwZjZp[D!T@6v" ٙo e -bfN+.YvTe ?#(b,=)ǧ)%1YY`hoU166J)f#APj\b4=$ґi:l`K-%|2!Dr4+'FPV 4q endstream endobj 262 0 obj 19987 endobj 263 0 obj <> endobj 264 0 obj <> stream x]M0 <6"lr臚 d6rȿyi+=3~l; c{sz.xOOy{m$mp$nsxOn%}=>M9͓N;u6ӷ3z>tq1_cP;ևfduke~4!煫#ri,`Gނ r.%W߃WB \[씝\E69`_!,j<ӿY_v`WZп ֧*Y/B_ /ӿ] KC OS(| Y5CKr_>v6҅hS?ퟶbcӞGqB~u endstream endobj 265 0 obj <> endobj 266 0 obj <> stream xSKkQI >6aUۅ1"t!BZh0"d:yf:BP|AzjkqۿsTw> endobj 269 0 obj <> stream x]Ak0s=,Q7eC? & I1k[!Mt=u~`{L0zrKX" 8yRetD%Z7] Nm/_c)Arϳ/fFKix"Buyb%lhBUE($;a%YJzht~ڀ]I=WCܩm endstream endobj 270 0 obj <> endobj 271 0 obj <> stream xct].vVl6WlcvرӱmwlN:fǺ9}~qkΪjV.sWcg +3scS?fn/+~+WPw!9Z[K3 +gWK @lo?.n&/tu2W\s/>+~!]c g _ eVp2r1MiԬ__yc//h h0v7>ۯ:,]`QLQ_t/9X̬GKɹi!^\4_H#u]M]ݾTp?o O, +gWߚ4W-\\_j~팿Z+:,,_}icnOKۛ;xcK4L_Gj hz*fk`l/ה8XJV_c;+[ޚVpp3viW㯮j+ڴr U{7̀ζV@%fj_M?S`aMDA᫥K  =ͣ'@_+*no`feoՈ_il6'dpsp7 u{+'7k6usv߶Jͭj zMqG g1ҥ6_r|WDtlN;OM2v5x¯-+hs^1\=k(ٺm:TuQ)0oKXa5APCR-^>coBeJqVzo7oN=:~~7I"!};/ݼӓAN|^h8̦]BwQ*AA-=As=[D Y^&pqݺ2rPf/m1}߁* iCkl39{;Nj#מ%Pёy 42y$0"l[I0tUu^=zOn&{8\BV/x$m;UoY~\*x{q!҅q(~:!=s:M\{m S:u_[KڅPI"%-SOCjv +;yAu9/$8z!R|շSK:D"ӏEOҍey 3֪/I~=tZ\ov^n1xѴg<hŃZ 9 AhW{&; +|=19@*|,v *+ֿ#J|)EAm .K;U]L$M2Nm|SH>c`%b$B*t^*·;* x#Mx2&bTj_bBѮzqEOK:j Nkx'YEd?Oyջӡz:NBYWlLoiètus[Ta-p 13>=pg;gP@| kMCq(gB YEE>'Us$q|I$MhouP|[{A~ZPއ"D7?m1{%P~SCDݍŃ !*4ytVNF)U\w o嗜ߔX-?PlTeh|(ޜ;Zf(uX)átFT?:.G#FOt޸1]&4 e 105$C1!6lxEi6/wږocmcn%+!!:JXNonuS^qg2$ gtHa5R1 5 k Ι{Pd 6L0$7[tvԕ P/'LHz`׿oTge͟㚛2# Dۄtj} =h vⲘgz?g^!Y0a"H0Oz 5Zt Ih-Y6(]} *ֱqr@2 }CU,+[xmaϾ!p־2 $8WQ"?޻9a[#Rdk\ha(rՙAL|LUDrUWry^Gv'>\+)iI=Ismv^AiT CQQGc7yKڟ~`g|^mAmQǚF3HMaiD3#qLcX]NjH\&A:2(?4DW^McrD~?Y,(U'/W%g`e1Xwy}QRa_A0/VCdAt]SE 8LX3v20m~/ǨrZ0<"=u|P3Cz 寧bD<iIwR&^V|}a~~-Yros;(߰NA,ߑ@W5K! WFhe`i*l(BOI\V5~9c q/5!$.VGS\F)LHSQXTv&Qb>ѳb7^jy/\Ÿ L)"ѵpH얷1[BKYֈSRt9PϓJ6O_Bўrxo=]o253k\nو~Pacc(_"IFlzEIETVPR]CٛhrF3BH8mA43 A-ЉmStm0z4ÍcD~Jc+Lp ڏA n7M3j,fu0Ym\F\/g&܌(7rJ6H~T$ˊ׾[5͝ӫ^ &?0ᴝF෢dlU%P5p6){WZao 3a@¬ipvy[LYvtg(hګ补"w致 t]D ]q@wXXqtd~0l\'\V7͑L79#IN&^fUO˔FNT%K Z Hh :JbŦ,mw%Eg؀Ma9v,L s%q3|>3#vDžz՞[͂}dLХ; +ᕃ!4TEFʻ?)ߖ34Y{$#Nƌkkhq]k~e $#Kl"mmGXߓ c%0ۭ7 S\8FmH=Edޘ0ftȠ.fW\MPBW~\MRJIt"JTs"ai>'&FGKr$vd2Sb[uu`1q'x-Re1q>{&μ6jUzRIM3LNq*O gJ|dI*qN[~C2i: p8 Cm qvn_^5N7oTJ0~z멛mt}VJZȵjQYt%ZtD&\VBVEwy&CX2E,>zgGh?ÜT7h/[r $yk"'/D1)AQۅQK>N/NilY:c+= D/46 TfkQ;kzs@e3t#xl. DR+_*NnVl#겵3v]%&˽t' ^g GZq(g0o0z{h9xAE)9\l*HG&8UZlUjƩ2H&pYӈ'hb !IOu{P#G3ѝz|,9v tDaPcC~Mm8ATY%%c )f~(<KA#S14AiqQS1#! j~HR# PXf` lHV3(Xjtи591 Y-l3gs1 ŹWn ! %xp}OUTYV<*ETwGe@A\x].}m:h3±hz++vLN%@|A>4YNgYFbO ){+P &ƨH;۞ysY~f3s,7f2<3"zxp)d[Tʜw|EK'G'C(X&tԬsbū"q`{M-2@@xNmfllhWiFg ˱4#z礕 v^ݮ Ks;Bn-iG?5>˞AEbǏ\9M4:e*:8Ft06!~B8J/nٟÝѠk]/-42@,>χ_v~).}1Z"c^=`rđ4292%aA _OĸE>D&9o5;Ϗc6.7W?w(ff*6瘪>gH'ҼSA4xR>LsBm٠ɤ\vKn`.Խryl!C$E03C-#xjɏ=R\Jh}6{;aK@95D) M/4Bb9-wޓ"l6 @mf;ඟ@KE.깃 ʠ$eܠ|[nf0ƑF !L8S5 ,Bp~5}: ⼥0w '?tw5hx a{A.< 6/rZuٜjĞOICj֟&v_#ݞ7}5щz}r])-BHm7ʼnt,DRq't^ÍPDI!΂6GRG+)i؞0_G;)8t4\Nh=5FI6;zX ꠣbe4V(ϤNޝ#DH%.aF~_SճwWD| k!{Ү朼na~7(F#DN"WƮb|F&Q:jKw>R(ʩO7nɉrAOt #!l'Ю_^d0eDz%59l%lpts0,zvyL WdWF31Mܙ}h)b?nƄ۟jMAh_:MvbGFg_FఴSkUPAsnk$=fg%^.c_^qb*)w1R.XCd.fw_Na bꁽ㟲Ğ}Rq"Cٌ\:9>m(u$fZC AXHv1)%Y~Y-j gvds hIBjBJ8k֗ O:N@+e_fe=]j[KkcH@Q2;Gae=i9uu֍Cxkf͜)2\RG`6HA-842*ͤ+wSK@:bux2{L^cBh+1Fa:?j\L N~MKzLHkUۈ@Z6vg=ogEX'E6si DC#ԹA_RM1OTXuǾÛQ2^}˵8-gry" (u2E6Dqnr|v.-mh|?PrܚVkSق9wiha>Il cJ4[,c Hqvo.dSڈB)P 0g%3$f-/RXb4o\@Vr|R-BB}Ihb'D6KT% &jt&>P &@{Yw[SL GJgdžgN6hq sem 3ḶJZrDa=m4s;EQ(ed=8Pϰ|U{[xhG%xܜ2>Ku@ԋa~6C,F3捝e!Ih#EFCut٪ C CgARf̼·)6sυFk:ICW1G_}]Cl>Z{Il6G U:Uշ:QvC0Qyx$0ڙLAUG?M\Jyf<՗:v4ɪE.6ȩ@7b|wQD># ^MnmonPJI+inGmNߖ?4@Uwڴ@{!13e@s7M lBA Y\X\ ~$Ǭ(sV>nR&SK K}UzO%r\jhAJ 6oqyuFU'm/ .I<B,m~wsMbG,ЩYD'{4`BCxlDQ Bﭒεdj5!)?{{PABq ( W֞Z @!<i9b\ t; ;Ȑٴ:}w]m *>f=[R;frC 1 o@:ngq~\yJ78>SVSc9)]Ioͷʱ6}ByT{TֻR:Q ñRiw_*9}{uaD!4QO]>ZɄdAM^L7Nӳ5՘$:mIkv 3Z+;cT2յ y jv0fQ`xp \ŜQ3+072Nȥ]"cvi,Xw*%duqfZ#S9ۥf}m!%]2'tN9/Uzo'%F6;CaxFOzgZ>P$xk_7(ku=>G̝ E=UppLng`~Yfe\;Xg5Hg. BB3s+XUbޜc DEqeT!) KSKhmuUL[6cφJ&gߑ-ŧг-TJ4? i=V,fPX+Eil0n~2i*<xJ ԇ*%whq%nnb$Y 0ZZlqkpĜcKڎlDQeRN v~umR%V,*Tmv(Ouٍ|D蝋PѡOrlo<24u<#?Abʶ eNBFb),Ȯ7I<AFۍ1[֣x=|nR&ڕفYrʏЈ8}H+%m{D7Y1N8&O"_Y lslz(f%CA4\0n"[[Bz٦YƦ%)w> { qeT 1tl,Y`kB 20@}Sǃ̞{=8T:5M: DI`X"d/_lދ:7y\8g[Yn5%@xҠ\p}('<Ҷf`WvFڱ)l#c>WuzHZ"h1]+k^@H|EO#t62&yiSLQhm#E|(^=XUXa=N9&,mԠ *v\[y6Miю` i] x1K6.Cs|=\vj_4[wZGf L  C.\\"ۅ$G^0KN' ݈@`tg{ ?Qn%.2&͕ƜP 諜%"8ێ).L5B٩eAlP DqI"=#zlh,+׶l_i-gZ<т.39657KȜ(-x%aOZi3Xnݍ c4:+)dߨ֧. ^D.]⼯CRAm?Շr~lELt$Th0F'L NR߉&EW 0m?^'ӓX IVlɸacVOD.ɄP`f6}fojo Fy`% mMYqp ]|wVmWmVy9# !wո({ JXyH.&21𩈁J NAk{" }^#gLLE2#0KUNu]7'iL&# +1ӍIJ{'Fg5cnQ0Icb'ζ )]E|,!$M0u;I&"Yߐ!FYlE)^^(OEY*F2o&8㎉\Ea .3 aKߨ.cJWa~rs^ {JI.WvZgEӿB<"~8TQO}8֧MΐlCyiEc8QCهTSs.VE̅B&!;ɟ =\WY:^HNMAFB+fƻ=RSYe.q 7$Yw@#aΉT2ZJ|; A/orծ Cv$T@+#6ly~}.߸xe h^$TQ%?&'.n:h(BRc$BQj͎3-N[$aa1ni|SPaϷR$ۿ۴ܻEgDy$+p.=h3r«[R..wϐHϡu;i/ J՝t|*[ deC5u^bC/e1%˃k@cX :kPowy+ #e'pkSo2gA6̎͡`9U7 (S}!.od A y`12"U /1ffUcp:/dOǎ\Iă|*L?Ҽ9CrL$qIK2Q Wζ2SZ6sY#C :"|PrQ n,X-rdcMԥO,M-)qYw}8e@0z`/L5UrF;Z7 6|㉬ɾ_kNnY|gz}YQXq8ЩA -,kxPmՁLr<ˆs, G twjG'R)n¸nr3o⇢mI&In\JQ7yEiίT"cTdısqF1:-3][ؔd햰|vf |~U׌B*c^]QdMo ,T+[@H HnkA~sn$2suI_$%9T$ƗUX:p{ o-5 S(L /?@QDsQg-Hr6i/";>kaLMNtf?@0 nKunbL"fc?^Qڝ}E vA^߃Tܚ5x Zy~<,Xj['}4%v3%nEI~V{݋$ZF4^ka^%,9ځsEEh׶D*HTtTȫe`m,vc7z3mx :WR;HdH}F&VC!1Wa!#LewVWrpgڀwk${)$#6V=Vd) N ָ5}b=t!)o儰uSciz6b:-43]_i11q THЊKQ]{ th3T9g;܉lY-ݏU4oa}8O^V" n_鱦3(ΡW(OxmV&Xt7QS6! ISql~T09`FHb&S4hG3]S8ߍB%KQ:Z_idնߗem&"jw|-H5PܔG?բyyɁ>YXmVd!Uf!ѧc_,G 3%FLAA.Wj?Ys4t4E n=oGK~:>ԵrVfHS#\߭[XE+AʋmcwYkh|ЕvُLu )t)Vc1A9GRam&0rZ幣PF}, ;a5e+z$I-q8ShI_W)ZGZrÆEϦpmrxRYI^+K2-Jeɧm+Qw"Kّ|*uKVe_^95jܵj`D'svTZ8cI;_gʉlNZ )nzlVMe:tz?+qú0\8f&P_m'JU53pݣtʁ[ $.Ȩ<ǎ=='+%8rAZ|RSa2]=SkU2g ''X2x=ju kgg{ˊ͊e_ g,WP3.}l¤YčqE[oa1w_ݤo~tJ ?{Ĥ&fD(Qnk*3X>KRgB&@ )ƦFv=LGǤޓu0gIDۏ \^Fh6|nnxAv= Qy"'V6xј w3|sz'P-Y U.,n.nI&zBgR>uȠ'C?9 5z-LAx>+_j8'1$i\5[`_#~\6?e=0h5;OkޣcVUɜ "b^O3r0]!‘oŘz"@HO帶2h@( !?V0OHqbD2{f|'!3?af$ K^J@$YmX*hƽ9a?,O< r2.p]'AoaG-Ƶyfx/-%Y#E[ ۉ[:'7x Q5y0^U(aCq'e_'.`ɿͧHyi~.w cyc t4A/\+hmԆwN4x ߴ! =G1bBlJnjgc\pmbmr)M6ZD1iU8bt[oKƿrTg0-ȏpY'lWzoR^ju-VWM{swڈ=gbdqd GS_*#.F,hpgD_:*o, C3& VuALkFBUC *;iݬh:}ᣂp%y3tz&wf沓< %?S\vVvI8Gz٪' 0&C@vq)>O~Im3BnrĈQya TD8b[YsyL8"cvnqk\z;rec!t9J1?'J~,n^|i\H 8$l&*k708Rh@#Pvⓚ@BO}RTX l%WgE ]m:ke2m3,G[< [_;v2@1"V7X_}Ħaޣj &֐*')crPnY3mzY&%%`d=fFӲ'8IOI(m&ff-s7Wʋ3L9P{rszZ55`WA1J;-)6Jsh/@[hv_|9<2{P^K#\תu2mT7TTY׻fq9A?7Ze>KWce{}Bf0Gx9)fBYSháq 7}v\ | 0Nv90=. B_q~h'hOFMKW(:S r` ,,(:-+~_M x1 u|kE1bA X15 2fam N|M..m9= )\ZNO+cÙ3IFᰒ\Shr膲˿u BOFTjNn|s#fW4Cϙd"Mr"\R[&@T8[miObVڟ;VB ]w6OVA F1ZYBΜڢns/둖$~n#cNإE9s'Z0,_ٞ'd8(kTϕ9:2 2rkqgn#w&"\i9n@DzF<[S&ҽP+ Fɼ^~9> zG5e|օ$d^b&Wf9X;/ßH9q^冠a@~tz@]UP;_—r|T &o(m7)1J4/۶ ysR+_jԻٵ] 0!R?RJ ]k s?R%M$cF* KZp=RH`boD|M0fnֵ1)ݻM.)WӾ kñRxI~b ~X9it≱ɤ~\=ےN0Q @]S(="C k%, ᚓv/R?DCLХR2b"~RoZ2$ .Dw$m2x|O&?zK{T1ǟ;Rg[95FZ]+jf͸`Qx#o=G47%lT$-Ǽ73Ne,EE-:ͽ5ޭИЭB)ym@5\L[~ɾ!r&-8_JûYs.bV1> _C]Y?syEXDx#K[ 0a&S:wSGmǘ,:Aep`T" =oRG)EGg I̥h'Yjj]X*tPFUg1mXu KP:2M?}+Z4gD%ݿ!3#>,&730o~vtQur{&)O|ESHY OCR p9`DTxAq\ >_h񐕰X%T/ V%A+H5Cu1Y rPZM?w^;V2su~w?1]Jw=M -N8l6㳹_9PY-Du?Y>zrl;wUMu[6vu:!My⏇k7="pp \T1fxWhQPh<ID3H?@:7\:ϳѐ.pAARLKU`K{ 7rV]^5Zh.pHQǗW X F"MW$A"=ɼ|)DR-@7w8 RKMձ7wt;&>l/+ |37v4"A7zS21m.ؽXPBX{(+8g[6%$1LZH{ho L )IKPec[0b^9rCk^$x?wME˽œYW8r4!G2Z qLVݔwu:E@S G~ZiD-u3T+le#i^LLH ,t- 2 &us)xǯfo"8 *SvzvCye([iDL\T?dY4%K@np(չX/S2۬*o:P*Go!ﳬ ƷtfVs|큉պf%aCK@ZC,65KEVi":2dQKl#Xۃ0-JE (p+kE!RPi,q:yFlӓ,ԭPS&j=3ٽp AYv٢N(<9D @3:b_ SMK̝PNc}/4@Z '2eh'}G7;FB` J}V?Aߣd-wY̊ק;5iaYAՆojg*rFIوBX<"Bd^Kyגʣ:q7Npc+*Myz)RkBŅvpf[ biYbm(&"-Cp,cبR=+ۡl(I;L۝Cxk6b|TOQnFF+]Ri/UFTrsw&&`A)c!kY c/([YCsŲ`m'WvaݫCJOGڬMVPM*t" iMWN7la| '48k`$($#w;Ff3yP<ᖓ<HsAZ'ĒAi]ܱlN\V(iu{ Үbg9[/խDs`X0h;HߜN݅z9w7 i7w~&87Ƒ¨vwk)[r%TkuӁ[s[jY, :|*j@nCk2L;y5r h+GM-iB.n[h&E&_ hskuhL-ђa|R8_wɊKۆ>چ\x\NၺXX5!V6z3ef-X)0|>q释1jFb56t Sedi44cU7'Ц\a'+M`Hp"릵%-M}+ HWIIbYh\џ4 gu= ~ծiKtgDNNc񁉢ey8X'cp}4Ha2UDl܉Җ` )+v!A ^zoOɉh>1"j$E,DMѐHENʐЭ~2]V^Y}Ǧ΍;Ox6OQ)!$"pxn;*T~_SM%Zdkk曑2\V۶ByKiO+mdx3:1$$&RB(˨7}n/OaP:+fFEegB&P; ~\yĹ|6L[J螓!݊W~>tsLCNYe] 2_\ms#XX/=.q5l,sa 00=Mv/U KN]CwFcQDCl\7vHSVQ`ֿ ([ʇEB&0wf!(0W$m+ J/Ǟp1HA^2bƓeժZ^Ҡp( ƪ1 +j/RpTI1b.[߂P6b6FN`KL g/)lfYbt.w.o񇻏,]G#v TЄ# fKMٳY&N2gV"_\jo$4?ā5GEdOFXd`@vN^>੃pZCIXSi*_ /(IWʭӜX5oDϰU*0xXG4S_!8:ژWJ>Kgt_ quϢ;1\f$XlWA0Dxk6!6+ކE.MDlAl&U` ,-/.TXLzˋR2$ꚉLesXy}'ۈm ?Ǭ5MB4d`.Iáԛ$(7T_9?ps;q@fKt}۷1~0mLt5v+ q}tsMYιRwl*+p~; NYb;1ĨAȔYv K+g؀XdALOЁx1J;FTA}+"Pt`Dž89'8khdGys q$LWN7)Q@FGRқ]*qK{%>AчU& ~`vݜ'%J¿zf&VU ) 1:v( loQjyo/]\S0p8HdDyK[LD>A<1, .jD?:?XEeɼH\t ῨsA|͙,sgűњ( ޹6%exW?x)LM?|~~gP(BbB%v6i:ou=?Q:nxHhdO9: aE9@括t!wP*k]ʶTɨ_dp>YY% ;x]:>;{hG+I &0PW.j0bOW}gfdKR ?.>֧\ tz@*atg? wn}7x C1"G߇a h;:t)ćLp©^ !dA4^f.*Ye;/6R*'1~E }qܖN<7~:㺟\MoBI9qDz>k3HL9cpƑ&:>.MSNbm{] l `9`JJGi$KSI-Bg˖6=0SX[hbjkZT 5l$r(-MnJC:t/[>"dҴU KUQL_ETR;P}ږdtI?i0ԉVn8'D@~pvXI`6nlDU>-q?(1m4cޣ${0ˢNط[]rm!xB s9FsKO~Y0]ّT \z'51h in8mUJ@aFe)ӧ +EY'.4&~bOe!Hr"btdZ9a?^Bx?[9-Z.)U3˴fyFp p;;8}Po9ָ)9w.N-R^wRzQk8?kƋ+/h! Ľ6 Y `'|3&|EYU1h,YPOEeB᥈pT mkx L,VެW~1(%XϗẐűk9p]?ۖXFVުNÈR5T4 v:Ua*[Vk? Ƞ' U%L \؎m㞧*1 _ueߣt839p62hpB@6"\ևvf[.pvbٟHa/\dd9arYvQ$3:I_r? :^#@_(KtumZ#u=S{bR' "[D_a4٠ßu<6S hlۊ.c=kjך;Nv }a-KYvb3x@8uU/+SQA;H'#T2Q)x $n $ D`Qc7z$wĔ l$0!I&{{$IBYb,&+w-pSse(;q ,="q!?H0EpE ?v<~!}|$B.FT ԑ0tjxL.;I<_MC@'t'!#9-;霸AT2b eSm@s6HSUX_W[k36رJThp?媒m cZr"+t0(ē5tzYl95^J@?apa̬Fy<1/G;6`k: F Xi$FJ?s #K?-HT}oԦc#El/bDy}X ?oJbQTx8W6T%שt%pKfRJ%tڗgܑ#p`A?9hBW~=);k~~!;%x }=a}N kkv^.P)XB&"WByK;zh 7w_jb'@{8PvKW!vk}ng1 .IT4H"lf邺l:+%TR==Cg~~wUZU^lK_OOdrK$,]'\sS[-[4Wh9Zn{il7!)|HJh$='ՐT]'>3UV )[!}tRE G.aq qTMJ|Q"a&F\Qs}\Q"wFo |k`PXg ^* rL2Ҡ7Hv)nܴ9F 3A B+1sڰ5hVJޡT$,UVc%W+:(?rO]t\&_L4:uO@&PN] CNQ #-Skoڈ[LPBBWۻޒ8BjcɟTwL5Qѫ)_;I}\T\1,AQYx\K5pܒ ZL~2tʹ9DgvwʘQYSTsAk_sDf;R?uͻ!F Rsfʪð(yR=KyzxMutI c+wS yjP?*2췩a\j CxOo+#}o@ֈ#QPhiT_ SRz!M'[T+(u6pD+CW2\1hJL-Ԍ4Çೄ:'׽'Ph7AXZSvkw貾 + ܟf?Q"1E2(柝Hdxs-(yI+:u7ǽQ~U'2|)AG8\?ee%go;$y}+S_]# 8Ϭ1l37!r:ựQ82, ۰7Rh2qcEwziNqۿ<}]^eieYgMg ءVOY5:kE<2}T׆DExU΅>3/?¿=H!C9a5%U5;nyQW|mzhY[ ;.qK7U\OMCV VVFeVw!eKX5)ˈfrwqKB:Mۍ7{=asjFIjx4ֶ *; hC``jZ=7εKpT UUBM#`|Uaeyvo鬧9Q3, "Mwdrk:'''{3 VlA% ΛR]f0;8PZ4?*@=k~飝$ -~7us$BAXa\k{CB23}`,B_2Ыծ?5?"`>I/u2UG,X>2J+:I3ɰm jʓGq:G P;vvX3%%@ۮ?ıےx=˞8fK* (Zt+J iBx`/G*Mn7Tv*U@D6xvm3 WӅsUgbP7eO#WDJ}1sBp"=f< ˜$Xj,@nS-u=}"$ې#+nJV;ne+#g:2?WГJ4P`#ïTAfG@u`&!8cz-$@E:k]eܸw53?P]}BCLԸq'; E͚k/-`y<-{"90M_։7[ Cwt wNƖ_H֠1S?^}̱BOY6]tlY_.q$gz7< AAUS{E=_sYaɩ'bZퟔ ' )0G 1a=n??ZOeeiGD=T:m]Kk@58K%d_< 긘oԔ*&蟲~ZcQQaM|ǘp?q7o ABs2E3B($)  Q|Ө,o-WqtI4I}eÍN-mT#rY-,{Yy5$4 !j n&0hK$S[%K!v<\#ARRDP z4&WزM\n1- aLR JcE"$E+^^Foՠܒ'[:893T}(ދ?|yE_9taMTw>^RX;+wmTN~"| OVX쌐4>9k?.<1V3MU^wVHb)xl|ܸn9LWzⷧ(0b/f7|$tYyNvt942l\Ћ jjF=qGfvO[DK \^l< 5{5זc*0K}' SԅU4^~G'ї=595 L{,K;.?[Vk$I["=2v4VpXSgJ$k$dte!͍>ga8]*)ki @ԇ 6~G7BRu\@@ }F .!%1*n7a3d8?f)k@<|m@Cڕ u"Tcx,sTBQᩬ[OdU?,1WI ~\*^z*ʥ K75-L /7 n̚獙We؄YP~kwy R&KAiSիQ:fϠ noPH; g9>h01nCPaʂlOL 9z_ʵc3:i358Ѵ6DATϖi'$9yy(ܷ^|F B+.m>^?Z8}'ED+!k(qӻ-g, Gdپ\a g\RhBĎך+_VḰ @$T'$TrPac!N1vdA?%jt3uX]*חcUb[m4b.z :à?l{ż!HK!jarnKzrcKA |XIds(!Jh}%xyLy)N @TW(/x9SIw;+iDt4]g7qDj J\plY}#I,]%|P"AƜk)*MZMņ6=Yh-KG÷Z7T~AUѯ+7໻~;mqpI0@mY~G%n&P0k G2IBL$ҕ؋x-O'~;@DaH8C @$ሞS (wQp c9e{'g0A:?WT~N5F6Qp7pRPm=DQtgXjO:7B?o gm ߂6RRcXdWFnv^0<#*ђ2@#HRk\Uhas]/'tN Mbnu\9_NTC<=hIH1>|?]!S}9 *R"*OJCʖMw53Wp/ڈ0ȥ"~$r.Zp9@ݎQ:&/T{xFgfʕbH[mȣiJuqmͣ8Li9dUy}r>(QZLv>666,`O[Ə&i͵3{9"1*:xqg+aS9ww/J6Ҟz\(ۡZS`| vIXy:gGǩI'%͹5NI{zUdj@)YMC3w|3!0ֶe? t:5hY $S'D A1ю'0_}ŸkaVy_a*&%1ew \6ݭ*q~DKxBԓŨ\Q)%daZxh d'r(-,$JIe9=2Ex+E̫b2-TCͻ6gr*rTlƧD53rbasG0Rn.AKFl#qjʑ@*o<2m,!ӥhMo3Og0 -Z:m2o6p Yrb3K1 k`W|f`_QHi?oNsD$GCWJh^"J`= 7i(ҾZZ{8)G=v*Wf)+Z8tvI!"͙wF/j@kC;I~b6u?`B>j*_ Jw%pl: ySN *=ݒƄ&D0Lu~p-/w X"/ײSkwIkfp^hp3{) !Q% )ձD؃G?,v҉K@o%P ^2r߇ʶv/aǴl5|||ͬ\I+=8?~-'c d[YqSl/507)7ŚU;ߑIq܁z~:$_q CF33.1lb IͶ`^/p\c^WxPvyEl茀4]W9ֆ Gt\/#!-5.<8?94/$-pG>o';|FlwXNN0&߲CvӲK̡b(9;/N_C5]{Yϖm\B&S7ːS{UYBN!mzIvoxVi9!hRӪzrgh.dm^Z[̧7phtQd5[}Mc3k6Jss햲/sIK>+uR=#_DN&u$5d.⇛AsCYwA{ AWBQ#$1qr/8!4CVߋ|ds Vi@5^U4Ǥu!%偃7_c/νbKĒeuG?:$qAG{/V-;^@$R x~ %r{^A-MU1|muQ A5giII&a !~*9^X%{򄨩$w;n}A/*ut:zS~# l`1og`$env`1DTOq};0c |BV=YˬEI !v.~Y&,[35ƹNMdֹa5MqEfP*,~s;۵:n CJF"h/Oۛ%IwzCQ87:~QITl˄<^yƛ~p|Qn}F WDИDŽpEِɝFf#O<1M ݘ*qcE<z8ހD8-Amz TC N&k؋@Ko[cw^1 :F+鐎m=ѷtL50@O3=D;BJLz>!87k&Bi$+Fio >k;c1 9C@.m/puQ*]gFPW$*s,ˈp=F?t52]I8;84 ?Bs04LC¼Eaak="&Dxb[3/ՐLqC endstream endobj 272 0 obj 39747 endobj 273 0 obj <> endobj 274 0 obj <> stream x]n8ཟBvQXO HYi@#WGt>R4uwϷ?oytnW/^}cZNy:Շo|v/yUjNi%]O| _sՖ㆔_cs^mzWmasM]ǧôڶcsS1疹EYY٘ w#rbNsmܳGn@?@?@?@?~_~_~_~_~_~_~_~_W~_W~_W~_W~_W~_W~_W~_W~_ᷚs~7~7~7~R~7~7~7~9w~w~w~w~w~w~w~tF8#Hg3ٶ l+ڲr Y,h6;сDt8. Pi|Fv +KdDTguNm-^F ̸>-AāNą,ua`ʼnALt&8eM<#art˄F{ǁN tޮLvqpvvΙK2=n=azf1OOg$@;<) bwW<}ynS~y.XG) 3,ud@ژ4͛rPvc1Kzp endstream endobj 275 0 obj <> endobj 276 0 obj << /F1 260 0 R /F2 265 0 R /F3 255 0 R /F4 245 0 R /F5 270 0 R /F6 250 0 R /F7 275 0 R >> endobj 277 0 obj <> endobj 278 0 obj <> endobj 1 0 obj <>/Contents 2 0 R>> endobj 4 0 obj <>/Contents 5 0 R>> endobj 7 0 obj <>/Contents 8 0 R>> endobj 10 0 obj <>/Contents 11 0 R>> endobj 19 0 obj <>/Contents 20 0 R>> endobj 24 0 obj <>/Contents 25 0 R>> endobj 31 0 obj <>/Contents 32 0 R>> endobj 42 0 obj <>/Contents 43 0 R>> endobj 45 0 obj <>/Contents 46 0 R>> endobj 52 0 obj <>/Contents 53 0 R>> endobj 58 0 obj <>/Contents 59 0 R>> endobj 65 0 obj <>/Contents 66 0 R>> endobj 76 0 obj <>/Contents 77 0 R>> endobj 85 0 obj <>/Contents 86 0 R>> endobj 92 0 obj <>/Contents 93 0 R>> endobj 103 0 obj <>/Contents 104 0 R>> endobj 106 0 obj <>/Contents 107 0 R>> endobj 109 0 obj <>/Contents 110 0 R>> endobj 112 0 obj <>/Contents 113 0 R>> endobj 115 0 obj <>/Contents 116 0 R>> endobj 118 0 obj <>/Contents 119 0 R>> endobj 121 0 obj <>/Contents 122 0 R>> endobj 124 0 obj <>/Contents 125 0 R>> endobj 127 0 obj <>/Contents 128 0 R>> endobj 130 0 obj <>/Contents 131 0 R>> endobj 133 0 obj <>/Contents 134 0 R>> endobj 136 0 obj <>/Contents 137 0 R>> endobj 139 0 obj <>/Contents 140 0 R>> endobj 142 0 obj <>/Contents 143 0 R>> endobj 145 0 obj <>/Contents 146 0 R>> endobj 148 0 obj <>/Contents 149 0 R>> endobj 151 0 obj <>/Contents 152 0 R>> endobj 154 0 obj <>/Contents 155 0 R>> endobj 157 0 obj <>/Contents 158 0 R>> endobj 160 0 obj <>/Contents 161 0 R>> endobj 163 0 obj <>/Contents 164 0 R>> endobj 166 0 obj <>/Contents 167 0 R>> endobj 169 0 obj <>/Contents 170 0 R>> endobj 172 0 obj <>/Contents 173 0 R>> endobj 175 0 obj <>/Contents 176 0 R>> endobj 178 0 obj <>/Contents 179 0 R>> endobj 181 0 obj <>/Contents 182 0 R>> endobj 184 0 obj <>/Contents 185 0 R>> endobj 187 0 obj <>/Contents 188 0 R>> endobj 190 0 obj <>/Contents 191 0 R>> endobj 279 0 obj <> endobj 280 0 obj < /Dest[10 0 R/XYZ 85.4 745 0]/Parent 279 0 R/Next 281 0 R>> endobj 281 0 obj < /Dest[10 0 R/XYZ 85.4 649.4 0]/Parent 279 0 R/Prev 280 0 R/Next 282 0 R>> endobj 282 0 obj < /Dest[10 0 R/XYZ 85.4 454 0]/Parent 279 0 R/Prev 281 0 R/Next 288 0 R>> endobj 283 0 obj < /Dest[10 0 R/XYZ 94.8 371.8 0]/Parent 282 0 R/Next 284 0 R>> endobj 284 0 obj < /Dest[19 0 R/XYZ 94.8 557.7 0]/Parent 282 0 R/Prev 283 0 R/Next 285 0 R>> endobj 285 0 obj < /Dest[42 0 R/XYZ 94.8 369.4 0]/Parent 282 0 R/Prev 284 0 R/Next 286 0 R>> endobj 286 0 obj < /Dest[65 0 R/XYZ 94.8 210.9 0]/Parent 282 0 R/Prev 285 0 R/Next 287 0 R>> endobj 287 0 obj < /Dest[76 0 R/XYZ 94.8 284.4 0]/Parent 282 0 R/Prev 286 0 R>> endobj 288 0 obj < /Dest[85 0 R/XYZ 85.4 143.2 0]/Parent 279 0 R/Prev 282 0 R/Next 289 0 R>> endobj 289 0 obj < /Dest[109 0 R/XYZ 85.4 621.6 0]/Parent 279 0 R/Prev 288 0 R/Next 304 0 R>> endobj 290 0 obj < /Dest[109 0 R/XYZ 94.8 566.2 0]/Parent 289 0 R/Next 291 0 R>> endobj 291 0 obj < /Dest[109 0 R/XYZ 94.8 429.6 0]/Parent 289 0 R/Prev 290 0 R/Next 292 0 R>> endobj 292 0 obj < /Dest[115 0 R/XYZ 94.8 397.8 0]/Parent 289 0 R/Prev 291 0 R/Next 299 0 R>> endobj 293 0 obj < /Dest[115 0 R/XYZ 106.4 195.5 0]/Parent 292 0 R/Next 294 0 R>> endobj 294 0 obj < /Dest[118 0 R/XYZ 106.4 628.7 0]/Parent 292 0 R/Prev 293 0 R/Next 295 0 R>> endobj 295 0 obj < /Dest[118 0 R/XYZ 106.4 407.8 0]/Parent 292 0 R/Prev 294 0 R/Next 296 0 R>> endobj 296 0 obj < /Dest[121 0 R/XYZ 106.4 455.4 0]/Parent 292 0 R/Prev 295 0 R/Next 297 0 R>> endobj 297 0 obj < /Dest[121 0 R/XYZ 106.4 222.1 0]/Parent 292 0 R/Prev 296 0 R/Next 298 0 R>> endobj 298 0 obj < /Dest[130 0 R/XYZ 106.4 380.9 0]/Parent 292 0 R/Prev 297 0 R>> endobj 299 0 obj < /Dest[133 0 R/XYZ 94.8 757 0]/Parent 289 0 R/Prev 292 0 R>> endobj 300 0 obj < /Dest[133 0 R/XYZ 106.4 611.3 0]/Parent 299 0 R/Next 301 0 R>> endobj 301 0 obj < /Dest[133 0 R/XYZ 106.4 267.6 0]/Parent 299 0 R/Prev 300 0 R/Next 302 0 R>> endobj 302 0 obj < /Dest[136 0 R/XYZ 106.4 160 0]/Parent 299 0 R/Prev 301 0 R/Next 303 0 R>> endobj 303 0 obj < /Dest[139 0 R/XYZ 106.4 240 0]/Parent 299 0 R/Prev 302 0 R>> endobj 304 0 obj < /Dest[142 0 R/XYZ 85.4 485.8 0]/Parent 279 0 R/Prev 289 0 R/Next 310 0 R>> endobj 305 0 obj < /Dest[142 0 R/XYZ 94.8 417 0]/Parent 304 0 R/Next 309 0 R>> endobj 306 0 obj < /Dest[142 0 R/XYZ 106.4 159.2 0]/Parent 305 0 R/Next 307 0 R>> endobj 307 0 obj < /Dest[145 0 R/XYZ 106.4 493.6 0]/Parent 305 0 R/Prev 306 0 R/Next 308 0 R>> endobj 308 0 obj < /Dest[145 0 R/XYZ 106.4 207.5 0]/Parent 305 0 R/Prev 307 0 R>> endobj 309 0 obj < /Dest[148 0 R/XYZ 94.8 439.8 0]/Parent 304 0 R/Prev 305 0 R>> endobj 310 0 obj < /Dest[151 0 R/XYZ 85.4 757 0]/Parent 279 0 R/Prev 304 0 R/Next 321 0 R>> endobj 311 0 obj < /Dest[151 0 R/XYZ 94.8 674.8 0]/Parent 310 0 R/Next 312 0 R>> endobj 312 0 obj < /Dest[154 0 R/XYZ 94.8 391.7 0]/Parent 310 0 R/Prev 311 0 R/Next 313 0 R>> endobj 313 0 obj < /Dest[154 0 R/XYZ 94.8 241.7 0]/Parent 310 0 R/Prev 312 0 R/Next 314 0 R>> endobj 314 0 obj < /Dest[163 0 R/XYZ 94.8 757 0]/Parent 310 0 R/Prev 313 0 R/Next 315 0 R>> endobj 315 0 obj < /Dest[163 0 R/XYZ 94.8 643.1 0]/Parent 310 0 R/Prev 314 0 R/Next 316 0 R>> endobj 316 0 obj < /Dest[163 0 R/XYZ 94.8 149.7 0]/Parent 310 0 R/Prev 315 0 R/Next 317 0 R>> endobj 317 0 obj < /Dest[166 0 R/XYZ 94.8 509 0]/Parent 310 0 R/Prev 316 0 R/Next 318 0 R>> endobj 318 0 obj < /Dest[169 0 R/XYZ 94.8 176.9 0]/Parent 310 0 R/Prev 317 0 R/Next 319 0 R>> endobj 319 0 obj < /Dest[172 0 R/XYZ 94.8 445.2 0]/Parent 310 0 R/Prev 318 0 R/Next 320 0 R>> endobj 320 0 obj < /Dest[175 0 R/XYZ 102.6 605 0]/Parent 310 0 R/Prev 319 0 R>> endobj 321 0 obj < /Dest[187 0 R/XYZ 85.4 521.3 0]/Parent 279 0 R/Prev 310 0 R>> endobj 322 0 obj < /Dest[187 0 R/XYZ 94.8 466 0]/Parent 321 0 R/Next 323 0 R>> endobj 323 0 obj < /Dest[190 0 R/XYZ 94.8 757 0]/Parent 321 0 R/Prev 322 0 R>> endobj 240 0 obj <> endobj 193 0 obj <> endobj 194 0 obj <> endobj 195 0 obj <> endobj 196 0 obj <> endobj 197 0 obj <> endobj 198 0 obj <> endobj 199 0 obj <> endobj 200 0 obj <> endobj 201 0 obj <> endobj 202 0 obj <> endobj 203 0 obj <> endobj 204 0 obj <> endobj 205 0 obj <> endobj 206 0 obj <> endobj 207 0 obj <> endobj 208 0 obj <> endobj 209 0 obj <> endobj 210 0 obj <> endobj 211 0 obj <> endobj 212 0 obj <> endobj 213 0 obj <> endobj 214 0 obj <> endobj 215 0 obj <> endobj 216 0 obj <> endobj 217 0 obj <> endobj 218 0 obj <> endobj 219 0 obj <> endobj 220 0 obj <> endobj 221 0 obj <> endobj 222 0 obj <> endobj 223 0 obj <> endobj 224 0 obj <> endobj 225 0 obj <> endobj 226 0 obj <> endobj 227 0 obj <> endobj 228 0 obj <> endobj 229 0 obj <> endobj 230 0 obj <> endobj 231 0 obj <> endobj 232 0 obj <> endobj 233 0 obj <> endobj 234 0 obj <> endobj 235 0 obj <> endobj 236 0 obj <> endobj 237 0 obj <> endobj 238 0 obj <> endobj 239 0 obj <> endobj 324 0 obj <> /Outlines 279 0 R >> endobj 325 0 obj < /Keywords /Creator /Producer /CreationDate(D:20090130081451+01'00')>> endobj xref 0 326 0000000000 65535 f 0000647016 00000 n 0000000019 00000 n 0000000504 00000 n 0000647162 00000 n 0000000524 00000 n 0000003891 00000 n 0000647671 00000 n 0000003912 00000 n 0000006362 00000 n 0000647817 00000 n 0000006383 00000 n 0000009218 00000 n 0000015745 00000 n 0000009240 00000 n 0000015441 00000 n 0000015463 00000 n 0000015725 00000 n 0000020675 00000 n 0000647965 00000 n 0000020697 00000 n 0000022460 00000 n 0000022482 00000 n 0000024451 00000 n 0000648113 00000 n 0000024473 00000 n 0000025738 00000 n 0000025760 00000 n 0000110426 00000 n 0000110449 00000 n 0000111191 00000 n 0000648261 00000 n 0000111212 00000 n 0000112647 00000 n 0000143992 00000 n 0000112669 00000 n 0000143419 00000 n 0000143442 00000 n 0000143971 00000 n 0000146717 00000 n 0000146739 00000 n 0000147077 00000 n 0000648409 00000 n 0000147098 00000 n 0000149739 00000 n 0000648557 00000 n 0000149761 00000 n 0000150793 00000 n 0000150814 00000 n 0000182352 00000 n 0000182375 00000 n 0000182856 00000 n 0000648705 00000 n 0000182877 00000 n 0000183723 00000 n 0000183744 00000 n 0000210481 00000 n 0000210962 00000 n 0000648853 00000 n 0000210983 00000 n 0000212014 00000 n 0000212035 00000 n 0000238119 00000 n 0000238142 00000 n 0000238623 00000 n 0000649001 00000 n 0000238644 00000 n 0000240426 00000 n 0000249897 00000 n 0000240448 00000 n 0000249573 00000 n 0000249595 00000 n 0000249877 00000 n 0000280447 00000 n 0000280470 00000 n 0000280951 00000 n 0000649149 00000 n 0000280972 00000 n 0000282084 00000 n 0000301591 00000 n 0000282106 00000 n 0000301267 00000 n 0000301570 00000 n 0000322125 00000 n 0000322502 00000 n 0000649297 00000 n 0000322523 00000 n 0000324576 00000 n 0000324598 00000 n 0000373287 00000 n 0000373310 00000 n 0000374111 00000 n 0000649464 00000 n 0000374132 00000 n 0000375315 00000 n 0000379550 00000 n 0000375337 00000 n 0000379287 00000 n 0000379309 00000 n 0000379530 00000 n 0000423944 00000 n 0000423968 00000 n 0000424503 00000 n 0000649612 00000 n 0000424525 00000 n 0000425452 00000 n 0000649762 00000 n 0000425474 00000 n 0000427204 00000 n 0000649912 00000 n 0000427227 00000 n 0000430439 00000 n 0000650062 00000 n 0000430462 00000 n 0000432700 00000 n 0000650212 00000 n 0000432723 00000 n 0000435452 00000 n 0000650362 00000 n 0000435475 00000 n 0000438264 00000 n 0000650512 00000 n 0000438287 00000 n 0000440872 00000 n 0000650662 00000 n 0000440895 00000 n 0000442251 00000 n 0000650812 00000 n 0000442274 00000 n 0000444055 00000 n 0000650962 00000 n 0000444078 00000 n 0000446386 00000 n 0000651112 00000 n 0000446409 00000 n 0000449071 00000 n 0000651281 00000 n 0000449094 00000 n 0000451313 00000 n 0000651431 00000 n 0000451336 00000 n 0000453771 00000 n 0000651600 00000 n 0000453794 00000 n 0000456622 00000 n 0000651750 00000 n 0000456645 00000 n 0000458874 00000 n 0000651900 00000 n 0000458897 00000 n 0000461139 00000 n 0000652050 00000 n 0000461162 00000 n 0000463617 00000 n 0000652200 00000 n 0000463640 00000 n 0000466411 00000 n 0000652350 00000 n 0000466434 00000 n 0000468063 00000 n 0000652500 00000 n 0000468086 00000 n 0000469288 00000 n 0000652650 00000 n 0000469311 00000 n 0000472422 00000 n 0000652800 00000 n 0000472445 00000 n 0000474591 00000 n 0000652950 00000 n 0000474614 00000 n 0000477162 00000 n 0000653100 00000 n 0000477185 00000 n 0000479313 00000 n 0000653250 00000 n 0000479336 00000 n 0000481140 00000 n 0000653400 00000 n 0000481163 00000 n 0000482144 00000 n 0000653550 00000 n 0000482166 00000 n 0000483255 00000 n 0000653700 00000 n 0000483278 00000 n 0000484906 00000 n 0000653850 00000 n 0000484929 00000 n 0000487439 00000 n 0000654000 00000 n 0000487462 00000 n 0000488421 00000 n 0000664628 00000 n 0000664748 00000 n 0000664868 00000 n 0000664990 00000 n 0000665111 00000 n 0000665233 00000 n 0000665355 00000 n 0000665475 00000 n 0000665597 00000 n 0000665719 00000 n 0000665839 00000 n 0000665961 00000 n 0000666083 00000 n 0000666205 00000 n 0000666325 00000 n 0000666447 00000 n 0000666570 00000 n 0000666693 00000 n 0000666816 00000 n 0000666936 00000 n 0000667058 00000 n 0000667179 00000 n 0000667300 00000 n 0000667423 00000 n 0000667546 00000 n 0000667666 00000 n 0000667789 00000 n 0000667912 00000 n 0000668035 00000 n 0000668158 00000 n 0000668281 00000 n 0000668404 00000 n 0000668526 00000 n 0000668648 00000 n 0000668770 00000 n 0000668892 00000 n 0000669013 00000 n 0000669134 00000 n 0000669255 00000 n 0000669376 00000 n 0000669497 00000 n 0000669618 00000 n 0000669737 00000 n 0000669858 00000 n 0000669977 00000 n 0000670098 00000 n 0000670221 00000 n 0000664189 00000 n 0000488443 00000 n 0000506535 00000 n 0000506559 00000 n 0000506761 00000 n 0000507302 00000 n 0000507691 00000 n 0000531571 00000 n 0000531595 00000 n 0000531792 00000 n 0000532355 00000 n 0000532768 00000 n 0000554959 00000 n 0000554983 00000 n 0000555189 00000 n 0000555709 00000 n 0000556082 00000 n 0000580745 00000 n 0000580769 00000 n 0000580961 00000 n 0000581586 00000 n 0000582053 00000 n 0000602129 00000 n 0000602153 00000 n 0000602350 00000 n 0000602878 00000 n 0000603253 00000 n 0000603916 00000 n 0000603938 00000 n 0000604131 00000 n 0000604424 00000 n 0000604588 00000 n 0000644449 00000 n 0000644473 00000 n 0000644668 00000 n 0000645614 00000 n 0000646583 00000 n 0000646691 00000 n 0000646922 00000 n 0000654150 00000 n 0000654209 00000 n 0000654361 00000 n 0000654612 00000 n 0000654933 00000 n 0000655163 00000 n 0000655386 00000 n 0000655589 00000 n 0000655800 00000 n 0000656006 00000 n 0000656237 00000 n 0000656473 00000 n 0000656656 00000 n 0000656840 00000 n 0000657100 00000 n 0000657276 00000 n 0000657485 00000 n 0000657682 00000 n 0000657867 00000 n 0000658068 00000 n 0000658264 00000 n 0000658501 00000 n 0000658697 00000 n 0000658890 00000 n 0000659089 00000 n 0000659299 00000 n 0000659499 00000 n 0000659792 00000 n 0000660072 00000 n 0000660381 00000 n 0000660689 00000 n 0000660908 00000 n 0000661259 00000 n 0000661474 00000 n 0000661686 00000 n 0000661898 00000 n 0000662164 00000 n 0000662432 00000 n 0000662712 00000 n 0000662954 00000 n 0000663226 00000 n 0000663462 00000 n 0000663608 00000 n 0000663835 00000 n 0000663996 00000 n 0000670340 00000 n 0000670454 00000 n trailer < <3254B0D8A0E18FDDA3FC34BB73358B3D> ] >> startxref 670811 %%EOF eric4-4.5.18/eric/PaxHeaders.8617/eric4_unittest.pyw0000644000175000001440000000013212261012653020215 xustar000000000000000030 mtime=1388582315.003115115 30 atime=1389081085.285724356 30 ctime=1389081086.311724332 eric4-4.5.18/eric/eric4_unittest.pyw0000644000175000001440000000021412261012653017744 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2010 - 2014 Detlev Offenbach # from eric4_unittest import main main() eric4-4.5.18/eric/PaxHeaders.8617/KdeQt0000644000175000001440000000013212261012661015441 xustar000000000000000030 mtime=1388582321.210193048 30 atime=1389081086.015724339 30 ctime=1389081086.315724332 eric4-4.5.18/eric/KdeQt/0000755000175000001440000000000012261012661015250 5ustar00detlevusers00000000000000eric4-4.5.18/eric/KdeQt/PaxHeaders.8617/KQFontDialog.py0000644000175000001440000000013212261012651020351 xustar000000000000000030 mtime=1388582313.798099875 30 atime=1389081085.285724356 30 ctime=1389081086.311724332 eric4-4.5.18/eric/KdeQt/KQFontDialog.py0000644000175000001440000000375212261012651020112 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2004 - 2014 Detlev Offenbach # """ Compatibility module to use the KDE Font Dialog instead of the Qt Font Dialog. """ import sys import Preferences if Preferences.getUI("UseKDEDialogs") and not sys.e4nokde: try: from PyKDE4.kdeui import KFontDialog, KFontChooser from PyQt4.QtGui import QFont def __kdeGetFont(initial, parent = None): """ Public function to pop up a modal dialog to select a font. @param initial initial font to select (QFont) @param parent parent widget of the dialog (QWidget) @return the selected font or the initial font, if the user canceled the dialog (QFont) and a flag indicating the user selection of the OK button (boolean) """ font = QFont(initial) res = KFontDialog.getFont(font, KFontChooser.DisplayFlags(KFontChooser.NoDisplayFlags), parent)[0] if res == KFontDialog.Accepted: return font, True else: return initial, False except (ImportError, RuntimeError): sys.e4nokde = True import PyQt4.QtGui __qtGetFont = PyQt4.QtGui.QFontDialog.getFont ################################################################################ def getFont(initial, parent = None): """ Public function to pop up a modal dialog to select a font. @param initial initial font to select (QFont) @param parent parent widget of the dialog (QWidget) @return the selected font or the initial font, if the user canceled the dialog (QFont) and a flag indicating the user selection of the OK button (boolean) """ if Preferences.getUI("UseKDEDialogs") and not sys.e4nokde: return __kdeGetFont(initial, parent) else: return __qtGetFont(initial, parent) eric4-4.5.18/eric/KdeQt/PaxHeaders.8617/KQColorDialog.py0000644000175000001440000000013212261012651020521 xustar000000000000000030 mtime=1388582313.800099901 30 atime=1389081085.285724356 30 ctime=1389081086.311724332 eric4-4.5.18/eric/KdeQt/KQColorDialog.py0000644000175000001440000000337612261012651020264 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2004 - 2014 Detlev Offenbach # """ Compatibility module to use the KDE Color Dialog instead of the Qt Color Dialog. """ import sys from PyQt4.QtCore import Qt from PyQt4.QtGui import QColor import Preferences if Preferences.getUI("UseKDEDialogs") and not sys.e4nokde: try: from PyKDE4.kdeui import KColorDialog def __kdeGetColor(initial = Qt.white, parent = None): """ Public function to pop up a modal dialog to select a color. @param initial initial color to select (QColor) @param parent parent widget of the dialog (QWidget) @return the selected color or the invalid color, if the user canceled the dialog (QColor) """ col = QColor(initial) res = KColorDialog.getColor(col, parent) if res == KColorDialog.Accepted: return col else: return QColor() except (ImportError, RuntimeError): sys.e4nokde = True from PyQt4.QtGui import QColorDialog __qtGetColor = QColorDialog.getColor ################################################################################ def getColor(initial = QColor(Qt.white), parent = None): """ Public function to pop up a modal dialog to select a color. @param initial initial color to select (QColor) @param parent parent widget of the dialog (QWidget) @return the selected color or the invalid color, if the user canceled the dialog (QColor) """ if Preferences.getUI("UseKDEDialogs") and not sys.e4nokde: return __kdeGetColor(initial, parent) else: return __qtGetColor(initial, parent) eric4-4.5.18/eric/KdeQt/PaxHeaders.8617/KQInputDialog.py0000644000175000001440000000013212261012651020542 xustar000000000000000030 mtime=1388582313.802099926 30 atime=1389081085.285724356 30 ctime=1389081086.311724332 eric4-4.5.18/eric/KdeQt/KQInputDialog.py0000644000175000001440000002271512261012651020303 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2004 - 2014 Detlev Offenbach # """ Compatibility module to use the KDE Input Dialog instead of the Qt Input Dialog. """ import sys import Preferences if Preferences.getUI("UseKDEDialogs") and not sys.e4nokde: try: from PyKDE4.kdeui import KInputDialog, KPasswordDialog from PyQt4.QtCore import QString, Qt from PyQt4.QtGui import QLineEdit def __kdeGetText(parent, title, label, mode = QLineEdit.Normal, text = QString(), f = Qt.WindowFlags(Qt.Widget)): """ Function to get some text from the user. @param parent parent widget of the dialog (QWidget) @param title window title of the dialog (QString) @param label text of the label for the line edit (QString) @param mode mode of the line edit (QLineEdit.EchoMode) @param text initial text of the line edit (QString) @param f window flags for the dialog (Qt.WindowFlags) @return tuple of (text, ok). text contains the text entered by the user, ok indicates a valid input. (QString, boolean) """ if mode == QLineEdit.Normal: return KInputDialog.getText(title, label, text, parent) else: dlg = KPasswordDialog(parent) dlg.setWindowTitle(title) dlg.setPrompt(label) if not text.isEmpty(): dlg.setPassword(text) if dlg.exec_() == KPasswordDialog.Accepted: ok = True password = dlg.password() else: ok = False password = QString() return password, ok def __kdeGetInt(parent, title, label, value = 0, minValue = -2147483647, maxValue = 2147483647, step = 1, f = Qt.WindowFlags(Qt.Widget)): """ Function to get an integer value from the user. @param parent parent widget of the dialog (QWidget) @param title window title of the dialog (QString) @param label text of the label for the line edit (QString) @param value initial value of the spin box (integer) @param minValue minimal value of the spin box (integer) @param maxValue maximal value of the spin box (integer) @param step step size of the spin box (integer) @param f window flags for the dialog (Qt.WindowFlags) @return tuple of (value, ok). value contains the integer entered by the user, ok indicates a valid input. (integer, boolean) """ return KInputDialog.getInteger(title, label, value, minValue, maxValue, step, 10, parent) def __kdeGetDouble(parent, title, label, value = 0.0, minValue = -2147483647.0, maxValue = 2147483647.0, decimals = 1, f = Qt.WindowFlags(Qt.Widget)): """ Function to get a double value from the user. @param parent parent widget of the dialog (QWidget) @param title window title of the dialog (QString) @param label text of the label for the line edit (QString) @param value initial value of the spin box (double) @param minValue minimal value of the spin box (double) @param maxValue maximal value of the spin box (double) @param decimals maximum number of decimals the value may have (integer) @param f window flags for the dialog (Qt.WindowFlags) @return tuple of (value, ok). value contains the double entered by the user, ok indicates a valid input. (double, boolean) """ return KInputDialog.getDouble(title, label, value, minValue, maxValue, decimals, parent) def __kdeGetItem(parent, title, label, slist, current = 0, editable = True, f = Qt.WindowFlags(Qt.Widget)): """ Function to get an item of a list from the user. @param parent parent widget of the dialog (QWidget) @param title window title of the dialog (QString) @param label text of the label for the line edit (QString) @param slist list of strings to select from (QStringList) @param current number of item, that should be selected as a default (integer) @param editable indicates whether the user can input their own text (boolean) @param f window flags for the dialog (Qt.WindowFlags) @return tuple of (value, ok). value contains the double entered by the user, ok indicates a valid input. (QString, boolean) """ return KInputDialog.getItem(title, label, slist, current, editable, parent) except (ImportError, RuntimeError): sys.e4nokde = True import PyQt4.QtGui __qtGetText = PyQt4.QtGui.QInputDialog.getText __qtGetInt = PyQt4.QtGui.QInputDialog.getInt __qtGetDouble = PyQt4.QtGui.QInputDialog.getDouble __qtGetItem = PyQt4.QtGui.QInputDialog.getItem ################################################################################ from PyQt4.QtCore import QString, Qt from PyQt4.QtGui import QLineEdit def getText(parent, title, label, mode = QLineEdit.Normal, text = QString(), f = Qt.WindowFlags(Qt.Widget)): """ Function to get some text from the user. @param parent parent widget of the dialog (QWidget) @param title window title of the dialog (QString) @param label text of the label for the line edit (QString) @param mode mode of the line edit (QLineEdit.EchoMode) @param text initial text of the line edit (QString) @param f window flags for the dialog (Qt.WindowFlags) @return tuple of (text, ok). text contains the text entered by the user, ok indicates a valid input. (QString, boolean) """ if Preferences.getUI("UseKDEDialogs") and not sys.e4nokde: return __kdeGetText(parent, title, label, mode, text, f) else: return __qtGetText(parent, title, label, mode, text, f) def getInt(parent, title, label, value = 0, minValue = -2147483647, maxValue = 2147483647, step = 1, f = Qt.WindowFlags(Qt.Widget)): """ Function to get an integer value from the user. @param parent parent widget of the dialog (QWidget) @param title window title of the dialog (QString) @param label text of the label for the line edit (QString) @param value initial value of the spin box (integer) @param minValue minimal value of the spin box (integer) @param maxValue maximal value of the spin box (integer) @param step step size of the spin box (integer) @param f window flags for the dialog (Qt.WindowFlags) @return tuple of (value, ok). value contains the integer entered by the user, ok indicates a valid input. (integer, boolean) """ if Preferences.getUI("UseKDEDialogs") and not sys.e4nokde: return __kdeGetInt(parent, title, label, value, minValue, maxValue, step, f) else: return __qtGetInt(parent, title, label, value, minValue, maxValue, step, f) def getDouble(parent, title, label, value = 0.0, minValue = -2147483647.0, maxValue = 2147483647.0, decimals = 1, f = Qt.WindowFlags(Qt.Widget)): """ Function to get a double value from the user. @param parent parent widget of the dialog (QWidget) @param title window title of the dialog (QString) @param label text of the label for the line edit (QString) @param value initial value of the spin box (double) @param minValue minimal value of the spin box (double) @param maxValue maximal value of the spin box (double) @param decimals maximum number of decimals the value may have (integer) @param f window flags for the dialog (Qt.WindowFlags) @return tuple of (value, ok). value contains the double entered by the user, ok indicates a valid input. (double, boolean) """ if Preferences.getUI("UseKDEDialogs") and not sys.e4nokde: return __kdeGetDouble(parent, title, label, value, minValue, maxValue, decimals, f) else: return __qtGetDouble(parent, title, label, value, minValue, maxValue, decimals, f) def getItem(parent, title, label, slist, current = 0, editable = True, f = Qt.WindowFlags(Qt.Widget)): """ Function to get an item of a list from the user. @param parent parent widget of the dialog (QWidget) @param title window title of the dialog (QString) @param label text of the label for the line edit (QString) @param slist list of strings to select from (QStringList) @param current number of item, that should be selected as a default (integer) @param editable indicates whether the user can input their own text (boolean) @param f window flags for the dialog (Qt.WindowFlags) @return tuple of (value, ok). value contains the double entered by the user, ok indicates a valid input. (QString, boolean) """ if Preferences.getUI("UseKDEDialogs") and not sys.e4nokde: return __kdeGetItem(parent, title, label, slist, current, editable, f) else: return __qtGetItem(parent, title, label, slist, current, editable, f) eric4-4.5.18/eric/KdeQt/PaxHeaders.8617/__init__.py0000644000175000001440000000013212261012651017626 xustar000000000000000030 mtime=1388582313.804099951 30 atime=1389081085.286724356 30 ctime=1389081086.311724332 eric4-4.5.18/eric/KdeQt/__init__.py0000644000175000001440000001025212261012651017360 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2004 - 2014 Detlev Offenbach # """ Package implementing compatibility modules for using KDE dialogs instead og Qt dialogs. The different modules try to import the KDE dialogs and implement interfaces, that are compatible with the standard Qt dialog APIs. If the import fails, the modules fall back to the standard Qt dialogs. In order for this package to work PyKDE must be installed (see http://www.riverbankcomputing.co.uk/pykde. """ import sys import Preferences if Preferences.getUI("UseKDEDialogs") and not sys.e4nokde: try: import PyKDE4 from PyQt4.QtCore import QString def __kdeIsKDE(): """ Public function to signal the availability of KDE4. @return availability flag (always True) """ return True except (ImportError, RuntimeError): sys.e4nokde = True def __kdeKdeVersionString(): """ Public function to return the KDE4 version as a string. @return KDE4 version as a string (QString) """ try: try: from PyKDE4.kdecore import versionMajor, versionMinor, versionRelease return QString("%d.%d.%d" % \ (versionMajor(), versionMinor(), versionRelease())) except (ImportError, AttributeError): from PyKDE4 import pykdeconfig try: return QString(pykdeconfig.Configuration().kde_version_str) except AttributeError: return QString("unknown") except ImportError: return QString("unknown") def __kdePyKdeVersionString(): """ Public function to return the PyKDE4 version as a string. @return PyKDE4 version as a string (QString) """ try: try: from PyKDE4.kdecore import pykde_versionMajor, pykde_versionMinor, \ pykde_versionRelease return QString("%d.%d.%d" % \ (pykde_versionMajor(), pykde_versionMinor(), pykde_versionRelease())) except (ImportError, AttributeError): from PyKDE4 import pykdeconfig try: return QString(pykdeconfig.Configuration().pykde_version_str) except AttributeError: return QString("unknown") except ImportError: return QString("unknown") from PyQt4.QtCore import QString def __qtIsKDE(): """ Private function to signal the availability of KDE. @return availability flag (always False) """ return False def __qtKdeVersionString(): """ Private function to return the KDE version as a string. @return KDE version as a string (QString) (always empty) """ return QString("") def __qtPyKdeVersionString(): """ Private function to return the PyKDE version as a string. @return PyKDE version as a string (QString) (always empty) """ return QString("") ################################################################################ def isKDEAvailable(): """ Public function to signal the availability of KDE. @return availability flag (always False) """ try: import PyKDE4 return True except ImportError: return False def isKDE(): """ Public function to signal, if KDE usage is enabled. @return KDE support flag (always False) """ if Preferences.getUI("UseKDEDialogs") and not sys.e4nokde: return __kdeIsKDE() else: return __qtIsKDE() def kdeVersionString(): """ Public function to return the KDE version as a string. @return KDE version as a string (QString) (always empty) """ if isKDEAvailable(): return __kdeKdeVersionString() else: return __qtKdeVersionString() def pyKdeVersionString(): """ Public function to return the PyKDE version as a string. @return PyKDE version as a string (QString) (always empty) """ if isKDEAvailable(): return __kdePyKdeVersionString() else: return __qtPyKdeVersionString() eric4-4.5.18/eric/KdeQt/PaxHeaders.8617/KQFileDialog.py0000644000175000001440000000013212261012651020322 xustar000000000000000030 mtime=1388582313.806099976 30 atime=1389081085.286724356 30 ctime=1389081086.311724332 eric4-4.5.18/eric/KdeQt/KQFileDialog.py0000644000175000001440000004075412261012651020066 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2004 - 2014 Detlev Offenbach # """ Compatibility module to use the KDE File Dialog instead of the Qt File Dialog. """ import sys from PyQt4.QtCore import QString, QStringList, QDir from PyQt4.QtGui import QFileDialog import Preferences import Globals if Preferences.getUI("UseKDEDialogs") and not sys.e4nokde: try: from PyKDE4.kio import KFileDialog, KFile from PyKDE4.kdecore import KUrl from PyQt4.QtCore import QRegExp, QFileInfo from PyQt4.QtGui import QApplication def __convertFilter(filter, selectedFilter = None): """ Private function to convert a Qt file filter to a KDE file filter. @param filter Qt file filter (QString or string) @param selectedFilter this is set to the selected filter @return the corresponding KDE file filter (QString) """ rx = QRegExp("^[^(]*\(([^)]*)\).*$") fileFilters = filter.split(';;') newfilter = QStringList() for fileFilter in fileFilters: sf = selectedFilter and selectedFilter.compare(fileFilter) == 0 namefilter = QString(fileFilter).replace(rx, "\\1") fileFilter = QString(fileFilter).replace('/', '\\/') if sf: newfilter.prepend("%s|%s" % (namefilter, fileFilter)) else: newfilter.append("%s|%s" % (namefilter, fileFilter)) return newfilter.join('\n') def __workingDirectory(path_): """ Private function to determine working directory for the file dialog. @param path_ path of the intended working directory (string or QString) @return calculated working directory (QString) """ path = QString(path_) if not path.isEmpty(): info = QFileInfo(path) if info.exists() and info.isDir(): return info.absoluteFilePath() return info.absolutePath() return QDir.currentPath() def __kdeGetOpenFileName(parent = None, caption = QString(), dir_ = QString(), filter = QString(), selectedFilter = None, options = QFileDialog.Options()): """ Module function to get the name of a file for opening it. @param parent parent widget of the dialog (QWidget) @param caption window title of the dialog (QString) @param dir_ working directory of the dialog (QString) @param filter filter string for the dialog (QString) @param selectedFilter selected filter for the dialog (QString) @param options various options for the dialog (QFileDialog.Options) @return name of file to be opened (QString) """ if not QString(filter).isEmpty(): filter = __convertFilter(filter, selectedFilter) wdir = __workingDirectory(dir_) dlg = KFileDialog(KUrl.fromPath(wdir), filter, parent) dlg.setOperationMode(KFileDialog.Opening) dlg.setMode(KFile.Modes(KFile.File) | KFile.Modes(KFile.LocalOnly)) dlg.setWindowTitle(caption.isEmpty() and \ QApplication.translate('KFileDialog', 'Open') or caption) dlg.exec_() if selectedFilter is not None: flt = dlg.currentFilter() flt.prepend("(").append(")") selectedFilter.replace(0, selectedFilter.length(), flt) return dlg.selectedFile() def __kdeGetSaveFileName(parent = None, caption = QString(), dir_ = QString(), filter = QString(), selectedFilter = None, options = QFileDialog.Options()): """ Module function to get the name of a file for saving it. @param parent parent widget of the dialog (QWidget) @param caption window title of the dialog (QString) @param dir_ working directory of the dialog (QString) @param filter filter string for the dialog (QString) @param selectedFilter selected filter for the dialog (QString) @param options various options for the dialog (QFileDialog.Options) @return name of file to be saved (QString) """ if not QString(filter).isEmpty(): filter = __convertFilter(filter, selectedFilter) wdir = __workingDirectory(dir_) dlg = KFileDialog(KUrl.fromPath(wdir), filter, parent) if wdir != dir_: dlg.setSelection(dir_) dlg.setOperationMode(KFileDialog.Saving) dlg.setMode(KFile.Modes(KFile.File) | KFile.Modes(KFile.LocalOnly)) dlg.setWindowTitle(caption.isEmpty() and \ QApplication.translate('KFileDialog', 'Save As') or caption) dlg.exec_() if selectedFilter is not None: flt = dlg.currentFilter() flt.prepend("(").append(")") selectedFilter.replace(0, selectedFilter.length(), flt) return dlg.selectedFile() def __kdeGetOpenFileNames(parent = None, caption = QString(), dir_ = QString(), filter = QString(), selectedFilter = None, options = QFileDialog.Options()): """ Module function to get a list of names of files for opening. @param parent parent widget of the dialog (QWidget) @param caption window title of the dialog (QString) @param dir_ working directory of the dialog (QString) @param filter filter string for the dialog (QString) @param selectedFilter selected filter for the dialog (QString) @param options various options for the dialog (QFileDialog.Options) @return list of filenames to be opened (QStringList) """ if not QString(filter).isEmpty(): filter = __convertFilter(filter, selectedFilter) wdir = __workingDirectory(dir_) dlg = KFileDialog(KUrl.fromPath(wdir), filter, parent) dlg.setOperationMode(KFileDialog.Opening) dlg.setMode(KFile.Modes(KFile.Files) | KFile.Modes(KFile.LocalOnly)) dlg.setWindowTitle(caption.isEmpty() and \ QApplication.translate('KFileDialog', 'Open') or caption) dlg.exec_() if selectedFilter is not None: flt = dlg.currentFilter() flt.prepend("(").append(")") selectedFilter.replace(0, selectedFilter.length(), flt) return dlg.selectedFiles() def __kdeGetExistingDirectory(parent = None, caption = QString(), dir_ = QString(), options = QFileDialog.Options(QFileDialog.ShowDirsOnly)): """ Module function to get the name of a directory. @param parent parent widget of the dialog (QWidget) @param caption window title of the dialog (QString) @param dir_ working directory of the dialog (QString) @param options various options for the dialog (QFileDialog.Options) @return name of selected directory (QString) """ wdir = __workingDirectory(dir_) dlg = KFileDialog(KUrl.fromPath(wdir), QString(), parent) dlg.setOperationMode(KFileDialog.Opening) dlg.setMode(KFile.Modes(KFile.Directory) | KFile.Modes(KFile.LocalOnly) | \ KFile.Modes(KFile.ExistingOnly)) dlg.setWindowTitle(caption.isEmpty() and \ QApplication.translate('KFileDialog', 'Select Directory') or caption) dlg.exec_() return dlg.selectedFile() except (ImportError, RuntimeError): sys.e4nokde = True def __qtReorderFilter(filter, selectedFilter = None): """ Private function to reorder the file filter to cope with a KDE issue introduced by distributors usage of KDE file dialogs. @param filter Qt file filter (QString or string) @param selectedFilter this is set to the selected filter (QString or string) @return the rearranged Qt file filter (QString) """ if selectedFilter is not None and not Globals.isMacPlatform(): fileFilters = QStringList(filter.split(';;')) ## fileFilters.removeAll(selectedFilter) fileFilters.prepend(selectedFilter) return fileFilters.join(";;") else: return filter def __qtGetOpenFileName(parent = None, caption = QString(), dir_ = QString(), filter = QString(), selectedFilter = None, options = QFileDialog.Options()): """ Module function to get the name of a file for opening it. @param parent parent widget of the dialog (QWidget) @param caption window title of the dialog (QString) @param dir_ working directory of the dialog (QString) @param filter filter string for the dialog (QString) @param selectedFilter selected filter for the dialog (QString) @param options various options for the dialog (QFileDialog.Options) @return name of file to be opened (QString) """ if Globals.isLinuxPlatform(): options |= QFileDialog.DontUseNativeDialog newfilter = __qtReorderFilter(filter, selectedFilter) return QFileDialog.getOpenFileName(parent, caption, dir_, newfilter, selectedFilter, options) def __qtGetOpenFileNames(parent = None, caption = QString(), dir_ = QString(), filter = QString(), selectedFilter = None, options = QFileDialog.Options()): """ Module function to get a list of names of files for opening. @param parent parent widget of the dialog (QWidget) @param caption window title of the dialog (QString) @param dir_ working directory of the dialog (QString) @param filter filter string for the dialog (QString) @param selectedFilter selected filter for the dialog (QString) @param options various options for the dialog (QFileDialog.Options) @return list of filenames to be opened (QStringList) """ if Globals.isLinuxPlatform(): options |= QFileDialog.DontUseNativeDialog newfilter = __qtReorderFilter(filter, selectedFilter) return QFileDialog.getOpenFileNames(parent, caption, dir_, newfilter, selectedFilter, options) def __qtGetSaveFileName(parent = None, caption = QString(), dir_ = QString(), filter = QString(), selectedFilter = None, options = QFileDialog.Options()): """ Module function to get the name of a file for saving it. @param parent parent widget of the dialog (QWidget) @param caption window title of the dialog (QString) @param dir_ working directory of the dialog (QString) @param filter filter string for the dialog (QString) @param selectedFilter selected filter for the dialog (QString) @param options various options for the dialog (QFileDialog.Options) @return name of file to be saved (QString) """ if Globals.isLinuxPlatform(): options |= QFileDialog.DontUseNativeDialog newfilter = __qtReorderFilter(filter, selectedFilter) return QFileDialog.getSaveFileName(parent, caption, dir_, newfilter, selectedFilter, options) def __qtGetExistingDirectory(parent = None, caption = QString(), dir_ = QString(), options = QFileDialog.Options(QFileDialog.ShowDirsOnly)): """ Module function to get the name of a directory. @param parent parent widget of the dialog (QWidget) @param caption window title of the dialog (QString) @param dir_ working directory of the dialog (QString) @param options various options for the dialog (QFileDialog.Options) @return name of selected directory (QString) """ if Globals.isLinuxPlatform(): options |= QFileDialog.DontUseNativeDialog return QFileDialog.getExistingDirectory(parent, caption, dir_, options) ################################################################################ def getOpenFileName(parent = None, caption = QString(), dir_ = QString(), filter = QString(), selectedFilter = None, options = QFileDialog.Options()): """ Module function to get the name of a file for opening it. @param parent parent widget of the dialog (QWidget) @param caption window title of the dialog (QString) @param dir_ working directory of the dialog (QString) @param filter filter string for the dialog (QString) @param selectedFilter selected filter for the dialog (QString) @param options various options for the dialog (QFileDialog.Options) @return name of file to be opened (QString) """ if Preferences.getUI("UseKDEDialogs") and not sys.e4nokde: f = __kdeGetOpenFileName(parent, caption, dir_, filter, selectedFilter, options) else: f = __qtGetOpenFileName(parent, caption, dir_, filter, selectedFilter, options) return QDir.toNativeSeparators(f) def getOpenFileNames(parent = None, caption = QString(), dir_ = QString(), filter = QString(), selectedFilter = None, options = QFileDialog.Options()): """ Module function to get a list of names of files for opening. @param parent parent widget of the dialog (QWidget) @param caption window title of the dialog (QString) @param dir_ working directory of the dialog (QString) @param filter filter string for the dialog (QString) @param selectedFilter selected filter for the dialog (QString) @param options various options for the dialog (QFileDialog.Options) @return list of filenames to be opened (QStringList) """ if Preferences.getUI("UseKDEDialogs") and not sys.e4nokde: l = __kdeGetOpenFileNames(parent, caption, dir_, filter, selectedFilter, options) else: l = __qtGetOpenFileNames(parent, caption, dir_, filter, selectedFilter, options) fl = QStringList() for f in l: fl.append(QDir.toNativeSeparators(f)) return fl def getSaveFileName(parent = None, caption = QString(), dir_ = QString(), filter = QString(), selectedFilter = None, options = QFileDialog.Options()): """ Module function to get the name of a file for saving it. @param parent parent widget of the dialog (QWidget) @param caption window title of the dialog (QString) @param dir_ working directory of the dialog (QString) @param filter filter string for the dialog (QString) @param selectedFilter selected filter for the dialog (QString) @param options various options for the dialog (QFileDialog.Options) @return name of file to be saved (QString) """ if Preferences.getUI("UseKDEDialogs") and not sys.e4nokde: f = __kdeGetSaveFileName(parent, caption, dir_, filter, selectedFilter, options) else: f = __qtGetSaveFileName(parent, caption, dir_, filter, selectedFilter, options) return QDir.toNativeSeparators(f) def getExistingDirectory(parent = None, caption = QString(), dir_ = QString(), options = QFileDialog.Options(QFileDialog.ShowDirsOnly)): """ Module function to get the name of a directory. @param parent parent widget of the dialog (QWidget) @param caption window title of the dialog (QString) @param dir_ working directory of the dialog (QString) @param options various options for the dialog (QFileDialog.Options) @return name of selected directory (QString) """ if Preferences.getUI("UseKDEDialogs") and not sys.e4nokde: d = __kdeGetExistingDirectory(parent, caption, dir_, options) else: d = __qtGetExistingDirectory(parent, caption, dir_, options) return QDir.toNativeSeparators(d) eric4-4.5.18/eric/KdeQt/PaxHeaders.8617/KQProgressDialog.py0000644000175000001440000000013212261012651021247 xustar000000000000000030 mtime=1388582313.809100015 30 atime=1389081085.286724356 30 ctime=1389081086.311724332 eric4-4.5.18/eric/KdeQt/KQProgressDialog.py0000644000175000001440000001163312261012651021005 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2004 - 2014 Detlev Offenbach # """ Compatibility module to use the KDE Progress Dialog instead of the Qt Progress Dialog. """ import sys from PyQt4.QtCore import Qt import Preferences if Preferences.getUI("UseKDEDialogs") and not sys.e4nokde: try: from PyKDE4.kdeui import KProgressDialog from PyQt4.QtCore import QString class __kdeKQProgressDialog(KProgressDialog): """ Compatibility class to use the KDE Progress Dialog instead of the Qt Progress Dialog. """ def __init__(self, labelText, cancelButtonText, minimum, maximum, parent = None, f = Qt.WindowFlags(Qt.Widget)): """ Constructor @param labelText text to show in the progress dialog (QString) @param cancelButtonText text to show for the cancel button or None to disallow cancellation and to hide the cancel button (QString) @param minimum minimum value for the progress indicator (integer) @param maximum maximum value for the progress indicator (integer) @param parent parent of the progress dialog (QWidget) @param f window flags (ignored) (Qt.WindowFlags) """ KProgressDialog.__init__(self, parent, QString(), labelText, f) self.__bar = self.progressBar() self.__bar.setMinimum(minimum) self.__bar.setMaximum(maximum) if cancelButtonText is None or QString(cancelButtonText).isEmpty(): self.setAllowCancel(False) else: self.setAllowCancel(True) self.setButtonText(cancelButtonText) def reset(self): """ Public slot to reset the progress bar. """ self.__bar.reset() if self.autoClose(): self.close() def setLabel(self, label): """ Public method to set the dialog's label. Note: This is doing nothing. @param label label to be set (QLabel) """ pass def setMinimum(self, minimum): """ Public slot to set the minimum value of the progress bar. @param minimum minimum value for the progress indicator (integer) """ self.__bar.setMinimum(minimum) def setMaximum(self, maximum): """ Public slot to set the maximum value of the progress bar. @param maximum maximum value for the progress indicator (integer) """ self.__bar.setMaximum(maximum) def setValue(self, value): """ Public slot to set the current value of the progress bar. @param value progress value to set """ self.__bar.setValue(value) def wasCanceled(self): """ Public slot to check, if the dialog was canceled. @return flag indicating, if the dialog was canceled (boolean) """ return self.wasCancelled() except (ImportError, RuntimeError): sys.e4nokde = True from PyQt4.QtGui import QProgressDialog class __qtKQProgressDialog(QProgressDialog): """ Compatibility class to use the Qt Progress Dialog. """ pass ################################################################################ def KQProgressDialog(labelText, cancelButtonText, minimum, maximum, parent = None, f = Qt.WindowFlags(Qt.Widget)): """ Public function to instantiate a progress dialog object. @param labelText text to show in the progress dialog (QString) @param cancelButtonText text to show for the cancel button or None to disallow cancellation and to hide the cancel button (QString) @param minimum minimum value for the progress indicator (integer) @param maximum maximum value for the progress indicator (integer) @param parent reference to the parent widget (QWidget) @param f window flags for the dialog (Qt.WindowFlags) @return reference to the progress dialog object """ if Preferences.getUI("UseKDEDialogs") and not sys.e4nokde: return __kdeKQProgressDialog(labelText, cancelButtonText, minimum, maximum, parent, f) else: return __qtKQProgressDialog(labelText, cancelButtonText, minimum, maximum, parent, f) eric4-4.5.18/eric/KdeQt/PaxHeaders.8617/KQPrinter.py0000644000175000001440000000013112261012651017745 xustar000000000000000029 mtime=1388582313.81110004 30 atime=1389081085.286724356 30 ctime=1389081086.311724332 eric4-4.5.18/eric/KdeQt/KQPrinter.py0000644000175000001440000000231712261012651017503 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2004 - 2014 Detlev Offenbach # """ Compatibility module to use the KDE Printer instead of the Qt Printer. """ import sys from PyQt4.QtGui import QPrinter import Preferences class __kdeKQPrinter(QPrinter): """ Compatibility class to use the Qt Printer. """ pass class __qtKQPrinter(QPrinter): """ Compatibility class to use the Qt Printer. """ pass ################################################################################ def KQPrinter(mode = QPrinter.ScreenResolution): """ Public function to instantiate a printer object. @param mode printer mode (QPrinter.PrinterMode) @return reference to the printer object """ if Preferences.getUI("UseKDEDialogs") and not sys.e4nokde: return __kdeKQPrinter(mode) else: return __qtKQPrinter(mode) Color = QPrinter.Color GrayScale = QPrinter.GrayScale FirstPageFirst = QPrinter.FirstPageFirst LastPageFirst = QPrinter.LastPageFirst Portrait = QPrinter.Portrait Landscape = QPrinter.Landscape ScreenResolution = QPrinter.ScreenResolution PrinterResolution = QPrinter.PrinterResolution HighResolution = QPrinter.HighResolution eric4-4.5.18/eric/KdeQt/PaxHeaders.8617/KQMainWindow.py0000644000175000001440000000013212261012651020377 xustar000000000000000030 mtime=1388582313.813100065 30 atime=1389081085.286724356 30 ctime=1389081086.311724332 eric4-4.5.18/eric/KdeQt/KQMainWindow.py0000644000175000001440000000212212261012651020126 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2008 - 2014 Detlev Offenbach # """ Compatibility module to use the KDE main window instead of the Qt main window. """ import sys from PyQt4.QtGui import QMainWindow import Preferences if Preferences.getUI("UseKDEDialogs") and not sys.e4nokde: try: from PyKDE4.kdeui import KMainWindow class __kdeKQMainWindow(KMainWindow): """ Compatibility class to use KMainWindow. """ pass except (ImportError, RuntimeError): sys.e4nokde = True class __qtKQMainWindow(QMainWindow): """ Compatibility class to use QMainWindow. """ pass ################################################################################ if Preferences.getUI("UseKDEDialogs") and not sys.e4nokde: class KQMainWindow(__kdeKQMainWindow): """ Compatibility class for the main window. """ pass else: class KQMainWindow(__qtKQMainWindow): """ Compatibility class for the main window. """ pass eric4-4.5.18/eric/KdeQt/PaxHeaders.8617/KQApplication.py0000644000175000001440000000013212261012651020566 xustar000000000000000030 mtime=1388582313.815100091 30 atime=1389081085.286724356 30 ctime=1389081086.311724332 eric4-4.5.18/eric/KdeQt/KQApplication.py0000644000175000001440000001602412261012651020323 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2004 - 2014 Detlev Offenbach # """ Compatibility module to use KApplication instead of QApplication. """ import os import sys import Preferences class KQApplicationMixin(object): """ Private mixin class implementing methods common to both KQApplication bases. """ def __init__(self): """ Constructor """ self.__objectRegistry = {} self.__pluginObjectRegistry = {} def registerObject(self, name, object): """ Public method to register an object in the object registry. @param name name of the object (string) @param object reference to the object @exception KeyError raised when the given name is already in use """ if self.__objectRegistry.has_key(name): raise KeyError('Object "%s" already registered.' % name) else: self.__objectRegistry[name] = object def getObject(self, name): """ Public method to get a reference to a registered object. @param name name of the object (string) @return reference to the registered object @exception KeyError raised when the given name is not known """ if self.__objectRegistry.has_key(name): return self.__objectRegistry[name] else: raise KeyError('Object "%s" is not registered.' % name) def registerPluginObject(self, name, object, pluginType = None): """ Public method to register a plugin object in the object registry. @param name name of the plugin object (string) @param object reference to the plugin object @keyparam pluginType type of the plugin object (string) @exception KeyError raised when the given name is already in use """ if self.__pluginObjectRegistry.has_key(name): raise KeyError('Pluginobject "%s" already registered.' % name) else: self.__pluginObjectRegistry[name] = (object, pluginType) def unregisterPluginObject(self, name): """ Public method to unregister a plugin object in the object registry. @param name name of the plugin object (string) """ if self.__pluginObjectRegistry.has_key(name): del self.__pluginObjectRegistry[name] def getPluginObject(self, name): """ Public method to get a reference to a registered plugin object. @param name name of the plugin object (string) @return reference to the registered plugin object @exception KeyError raised when the given name is not known """ if self.__pluginObjectRegistry.has_key(name): return self.__pluginObjectRegistry[name][0] else: raise KeyError('Pluginobject "%s" is not registered.' % name) def getPluginObjects(self): """ Public method to get a list of (name, reference) pairs of all registered plugin objects. @return list of (name, reference) pairs """ objects = [] for name in self.__pluginObjectRegistry: objects.append((name, self.__pluginObjectRegistry[name][0])) return objects def getPluginObjectType(self, name): """ Public method to get the type of a registered plugin object. @param name name of the plugin object (string) @return type of the plugin object (string) @exception KeyError raised when the given name is not known """ if self.__pluginObjectRegistry.has_key(name): return self.__pluginObjectRegistry[name][1] else: raise KeyError('Pluginobject "%s" is not registered.' % name) if Preferences.getUI("UseKDEDialogs") and not sys.e4nokde: try: from PyKDE4.kdecore import ki18n, KAboutData, KCmdLineArgs, KCmdLineOptions from PyKDE4.kdeui import KApplication from PyQt4.QtCore import QLocale from UI.Info import * import Preferences def _localeString(): """ Protected function to get the string for the configured locale. @return locale name (string) """ loc = Preferences.getUILanguage() if loc is None: return "en_US" if loc == "System": loc = str(QLocale.system().name()) if loc == "C": loc = "en_US" return loc class __kdeKQApplication(KApplication, KQApplicationMixin): """ Compatibility class to use KApplication instead of Qt's QApplication. """ def __init__(self, argv, opts): """ Constructor @param argv command line arguments @param opts acceptable command line options """ loc = _localeString() os.environ["KDE_LANG"] = loc aboutData = KAboutData( Program, "kdelibs", ki18n(Program), Version, ki18n(""), KAboutData.License_GPL, ki18n(Copyright), ki18n ("none"), Homepage, BugAddress) sysargv = argv[:] KCmdLineArgs.init(sysargv, aboutData) if opts: options = KCmdLineOptions() for opt in opts: if len(opt) == 2: options.add(opt[0], ki18n(opt[1])) else: options.add(opt[0], ki18n(opt[1]), opt[2]) KCmdLineArgs.addCmdLineOptions(options) KApplication.__init__(self, True) KQApplicationMixin.__init__(self) except (ImportError, RuntimeError): sys.e4nokde = True from PyQt4.QtCore import QEvent, Qt, qVersion from PyQt4.QtGui import QApplication class __qtKQApplication(QApplication, KQApplicationMixin): """ Compatibility class to use QApplication. """ def __init__(self, argv, opts): """ Constructor @param argv command line arguments @param opts acceptable command line options (ignored) """ QApplication.__init__(self, argv) KQApplicationMixin.__init__(self) ################################################################################ def KQApplication(argv, opts): """ Public function to instantiate an application object. @param argv command line arguments @param opts acceptable command line options @return reference to the application object """ if Preferences.getUI("UseKDEDialogs") and not sys.e4nokde: return __kdeKQApplication(argv, opts) else: return __qtKQApplication(argv, opts) from PyQt4.QtCore import QCoreApplication e4App = QCoreApplication.instance eric4-4.5.18/eric/KdeQt/PaxHeaders.8617/KQMessageBox.py0000644000175000001440000000013212261012651020360 xustar000000000000000030 mtime=1388582313.817100116 30 atime=1389081085.286724356 30 ctime=1389081086.311724332 eric4-4.5.18/eric/KdeQt/KQMessageBox.py0000644000175000001440000003565412261012651020127 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2004 - 2014 Detlev Offenbach # """ Compatibility module to use the KDE Message Box instead of the Qt Message Box. """ import sys from PyQt4.QtCore import QCoreApplication from PyQt4.QtGui import QMessageBox import Preferences if Preferences.getUI("UseKDEDialogs") and not sys.e4nokde: try: from PyKDE4.kdeui import KMessageBox, KStandardGuiItem, KGuiItem from PyQt4.QtCore import QString def __nrButtons(buttons): """ Private function to determine the number of buttons defined. @param buttons flags indicating which buttons to show (QMessageBox.StandardButtons) @return number of buttons defined (integer) """ count = 0 flag = int(buttons) while flag > 0: if flag & 1: count += 1 flag = flag >> 1 return count def __getGuiItem(button): """ Private function to create a KGuiItem for a button. @param button flag indicating the button (QMessageBox.StandardButton) @return item for the button (KGuiItem) """ if button == QMessageBox.Ok: return KStandardGuiItem.ok() elif button == QMessageBox.Cancel: return KStandardGuiItem.cancel() elif button == QMessageBox.Yes: return KStandardGuiItem.yes() elif button == QMessageBox.No: return KStandardGuiItem.no() elif button == QMessageBox.Discard: return KStandardGuiItem.discard() elif button == QMessageBox.Save: return KStandardGuiItem.save() elif button == QMessageBox.Apply: return KStandardGuiItem.apply() elif button == QMessageBox.Help: return KStandardGuiItem.help() elif button == QMessageBox.Close: return KStandardGuiItem.close() elif button == QMessageBox.Open: return KStandardGuiItem.open() elif button == QMessageBox.Reset: return KStandardGuiItem.reset() elif button == QMessageBox.Ignore: return KGuiItem(QCoreApplication.translate("KQMessageBox", "Ignore")) elif button == QMessageBox.Abort: return KGuiItem(QCoreApplication.translate("KQMessageBox", "Abort")) elif button == QMessageBox.RestoreDefaults: return KGuiItem(QCoreApplication.translate("KQMessageBox", "Restore Defaults")) elif button == QMessageBox.SaveAll: return KGuiItem(QCoreApplication.translate("KQMessageBox", "Save All")) elif button == QMessageBox.YesToAll: return KGuiItem(QCoreApplication.translate("KQMessageBox", "Yes to &All")) elif button == QMessageBox.NoToAll: return KGuiItem(QCoreApplication.translate("KQMessageBox", "N&o to All")) elif button == QMessageBox.Retry: return KGuiItem(QCoreApplication.translate("KQMessageBox", "Retry")) elif button == QMessageBox.NoButton: return KGuiItem() else: return KStandardGuiItem.ok() def __getLowestFlag(flags): """ Private function to get the lowest flag. @param flags flags to be checked (integer) @return lowest flag (integer) """ i = 1 while i <= 0x80000000: if int(flags) & i == i: return i i = i << 1 return 0 def __kdeInformation(parent, title, text, buttons = QMessageBox.Ok, defaultButton = QMessageBox.NoButton): """ Function to show a modal information message box. @param parent parent widget of the message box @param title caption of the message box @param text text to be shown by the message box @param buttons flags indicating which buttons to show (QMessageBox.StandardButtons) @param defaultButton flag indicating the default button (QMessageBox.StandardButton) @return button pressed by the user (QMessageBox.StandardButton, always QMessageBox.NoButton) """ KMessageBox.information(parent, text, title) return QMessageBox.NoButton def __kdeWarning(parent, title, text, buttons = QMessageBox.Ok, defaultButton = QMessageBox.NoButton): """ Function to show a modal warning message box. @param parent parent widget of the message box @param title caption of the message box @param text text to be shown by the message box @param buttons flags indicating which buttons to show (QMessageBox.StandardButtons) @param defaultButton flag indicating the default button (QMessageBox.StandardButton) @return button pressed by the user (QMessageBox.StandardButton) """ if __nrButtons(buttons) == 1: KMessageBox.sorry(parent, text, title) return buttons if __nrButtons(buttons) == 2: if defaultButton == QMessageBox.NoButton: defaultButton = __getLowestFlag(buttons) noButton = defaultButton noItem = __getGuiItem(noButton) yesButton = int(buttons & ~noButton) yesItem = __getGuiItem(yesButton) res = KMessageBox.warningYesNo(parent, text, title, yesItem, noItem) if res == KMessageBox.Yes: return yesButton else: return noButton if __nrButtons(buttons) == 3: if defaultButton == QMessageBox.NoButton: defaultButton = __getLowestFlag(buttons) yesButton = defaultButton yesItem = __getGuiItem(yesButton) buttons = buttons & ~yesButton noButton = __getLowestFlag(buttons) noItem = __getGuiItem(noButton) cancelButton = int(buttons & ~noButton) cancelItem = __getGuiItem(cancelButton) res = KMessageBox.warningYesNoCancel(parent, text, title, yesItem, noItem, cancelItem) if res == KMessageBox.Yes: return yesButton elif res == KMessageBox.No: return noButton else: return cancelButton raise RuntimeError("More than three buttons are not supported.") def __kdeCritical(parent, title, text, buttons = QMessageBox.Ok, defaultButton = QMessageBox.NoButton): """ Function to show a modal critical message box. @param parent parent widget of the message box @param title caption of the message box @param text text to be shown by the message box @param buttons flags indicating which buttons to show (QMessageBox.StandardButtons) @param defaultButton flag indicating the default button (QMessageBox.StandardButton) @return button pressed by the user (QMessageBox.StandardButton) """ return warning(parent, title, text, buttons, defaultButton) def __kdeQuestion(parent, title, text, buttons = QMessageBox.Ok, defaultButton = QMessageBox.NoButton): """ Function to show a modal critical message box. @param parent parent widget of the message box @param title caption of the message box @param text text to be shown by the message box @param buttons flags indicating which buttons to show (QMessageBox.StandardButtons) @param defaultButton flag indicating the default button (QMessageBox.StandardButton) @return button pressed by the user (QMessageBox.StandardButton) """ if __nrButtons(buttons) == 1: if defaultButton == QMessageBox.NoButton: defaultButton = __getLowestFlag(buttons) yesButton = defaultButton yesItem = __getGuiItem(yesButton) KMessageBox.questionYesNo(parent, text, title, yesItem, KGuiItem()) return yesButton if __nrButtons(buttons) == 2: if defaultButton == QMessageBox.NoButton: defaultButton = __getLowestFlag(buttons) yesButton = defaultButton yesItem = __getGuiItem(yesButton) noButton = int(buttons & ~yesButton) noItem = __getGuiItem(noButton) res = KMessageBox.questionYesNo(parent, text, title, yesItem, noItem) if res == KMessageBox.Yes: return yesButton else: return noButton if __nrButtons(buttons) == 3: if defaultButton == QMessageBox.NoButton: defaultButton = __getLowestFlag(buttons) yesButton = defaultButton yesItem = __getGuiItem(yesButton) buttons = buttons & ~yesButton noButton = __getLowestFlag(buttons) noItem = __getGuiItem(noButton) cancelButton = int(buttons & ~noButton) cancelItem = __getGuiItem(cancelButton) res = KMessageBox.questionYesNoCancel(parent, text, title, yesItem, noItem, cancelItem) if res == KMessageBox.Yes: return yesButton elif res == KMessageBox.No: return noButton else: return cancelButton raise RuntimeError("More than three buttons are not supported.") def __kdeAbout(parent, title, text): """ Function to show a modal about message box. @param parent parent widget of the message box @param title caption of the message box @param text text to be shown by the message box """ KMessageBox.about(parent, text, title) except (ImportError, RuntimeError): sys.e4nokde = True __qtAbout = QMessageBox.about __qtAboutQt = QMessageBox.aboutQt __qtInformation = QMessageBox.information __qtWarning = QMessageBox.warning __qtCritical = QMessageBox.critical __qtQuestion = QMessageBox.question ################################################################################ KQMessageBox = QMessageBox def information(parent, title, text, buttons = QMessageBox.Ok, defaultButton = QMessageBox.NoButton): """ Function to show a modal information message box. @param parent parent widget of the message box @param title caption of the message box @param text text to be shown by the message box @param buttons flags indicating which buttons to show (QMessageBox.StandardButtons) @param defaultButton flag indicating the default button (QMessageBox.StandardButton) @return button pressed by the user (QMessageBox.StandardButton, always QMessageBox.NoButton) """ if Preferences.getUI("UseKDEDialogs") and not sys.e4nokde: return __kdeInformation(parent, title, text, buttons, defaultButton) else: return __qtInformation(parent, title, text, buttons, defaultButton) def warning(parent, title, text, buttons = QMessageBox.Ok, defaultButton = QMessageBox.NoButton): """ Function to show a modal warning message box. @param parent parent widget of the message box @param title caption of the message box @param text text to be shown by the message box @param buttons flags indicating which buttons to show (QMessageBox.StandardButtons) @param defaultButton flag indicating the default button (QMessageBox.StandardButton) @return button pressed by the user (QMessageBox.StandardButton) """ if Preferences.getUI("UseKDEDialogs") and not sys.e4nokde: return __kdeWarning(parent, title, text, buttons, defaultButton) else: return __qtWarning(parent, title, text, buttons, defaultButton) def critical(parent, title, text, buttons = QMessageBox.Ok, defaultButton = QMessageBox.NoButton): """ Function to show a modal critical message box. @param parent parent widget of the message box @param title caption of the message box @param text text to be shown by the message box @param buttons flags indicating which buttons to show (QMessageBox.StandardButtons) @param defaultButton flag indicating the default button (QMessageBox.StandardButton) @return button pressed by the user (QMessageBox.StandardButton) """ if Preferences.getUI("UseKDEDialogs") and not sys.e4nokde: return __kdeCritical(parent, title, text, buttons, defaultButton) else: return __qtCritical(parent, title, text, buttons, defaultButton) def question(parent, title, text, buttons = QMessageBox.Ok, defaultButton = QMessageBox.NoButton): """ Function to show a modal critical message box. @param parent parent widget of the message box @param title caption of the message box @param text text to be shown by the message box @param buttons flags indicating which buttons to show (QMessageBox.StandardButtons) @param defaultButton flag indicating the default button (QMessageBox.StandardButton) @return button pressed by the user (QMessageBox.StandardButton) """ if Preferences.getUI("UseKDEDialogs") and not sys.e4nokde: return __kdeQuestion(parent, title, text, buttons, defaultButton) else: return __qtQuestion(parent, title, text, buttons, defaultButton) def about(parent, title, text): """ Function to show a modal about message box. @param parent parent widget of the message box @param title caption of the message box @param text text to be shown by the message box """ if Preferences.getUI("UseKDEDialogs") and not sys.e4nokde: return __kdeAbout(parent, title, text) else: return __qtAbout(parent, title, text) def aboutQt(parent, title): """ Function to show a modal about message box. @param parent parent widget of the message box @param title caption of the message box """ return __qtAboutQt(parent, title) eric4-4.5.18/eric/KdeQt/PaxHeaders.8617/KQPrintDialog.py0000644000175000001440000000013212261012651020537 xustar000000000000000030 mtime=1388582313.820100154 30 atime=1389081085.287724356 30 ctime=1389081086.311724332 eric4-4.5.18/eric/KdeQt/KQPrintDialog.py0000644000175000001440000000270312261012651020273 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Compatibility module to use the KDE Print Dialog instead of the Qt Print Dialog. """ import sys import Preferences if Preferences.getUI("UseKDEDialogs") and not sys.e4nokde: try: from PyKDE4.kdeui import KdePrint def __kdeKQPrintDialog(printer, parent): """ Compatibility function to use the KDE4 print dialog. @param printer reference to the printer object (QPrinter) @param parent reference to the parent widget (QWidget) """ return KdePrint.createPrintDialog(printer, parent) except (ImportError, RuntimeError): sys.e4nokde = True from PyQt4.QtGui import QPrintDialog class __qtKQPrintDialog(QPrintDialog): """ Compatibility class to use the Qt Print Dialog. """ pass ################################################################################ def KQPrintDialog(printer, parent = None): """ Public function to instantiate a printer dialog object. @param printer reference to the printer object (QPrinter) @param parent reference to the parent widget (QWidget) @return reference to the printer dialog object """ if Preferences.getUI("UseKDEDialogs") and not sys.e4nokde: return __kdeKQPrintDialog(printer, parent) else: return __qtKQPrintDialog(printer, parent) eric4-4.5.18/eric/PaxHeaders.8617/patch_pyxml.py0000644000175000001440000000013212261012651017407 xustar000000000000000030 mtime=1388582313.822100179 30 atime=1389081085.287724356 30 ctime=1389081086.311724332 eric4-4.5.18/eric/patch_pyxml.py0000644000175000001440000001213312261012651017141 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2007 - 2014 Detlev Offenbach # # This is a script to patch pyxml to correct a bug. """ Script to patch pyXML to correct a bug. """ import sys import os import shutil import py_compile import distutils.sysconfig # Define the globals. progName = None pyxmlModDir = None def usage(rcode = 2): """ Display a usage message and exit. rcode is the return code passed back to the calling process. """ global progName, pyxmlModDir print "Usage:" print " %s [-h] [-d dir]" % (progName) print "where:" print " -h display this help message" print " -d dir where pyXML is installed [default %s]" % \ (pyxmlModDir) print print "This script patches the file _xmlplus/parsers/xmlproc/xmlutils.py" print "of the pyXML distribution to fix a bug causing it to fail" print "for XML files containing non ASCII characters." print sys.exit(rcode) def initGlobals(): """ Sets the values of globals that need more than a simple assignment. """ global pyxmlModDir pyxmlModDir = os.path.join(distutils.sysconfig.get_python_lib(True), "_xmlplus") def isPatched(): """ Function to check, if pyXML is already patched. @return flag indicating patch status (boolean) """ global pyxmlModDir initGlobals() try: filename = \ os.path.join(pyxmlModDir, "parsers", "xmlproc", "xmlutils.py") f = open(filename, "r") except EnvironmentError: print "Could not find the pyXML distribution. Please use the patch_pyxml.py" print "script to apply a patch needed to fix a bug causing it to fail for" print "XML files containing non ASCII characters." return True # fake a found patch lines = f.readlines() f.close() patchPositionFound = False for line in lines: if patchPositionFound and \ (line.startswith(\ " # patched by eric4 install script.") or \ line.startswith(\ " self.datasize = len(self.data)")): return True if line.startswith(\ " self.data = self.charset_converter(self.data)"): patchPositionFound = True continue return False def patchPyXML(): """ The patch function. """ global pyxmlModDir initGlobals() try: filename = \ os.path.join(pyxmlModDir, "parsers", "xmlproc", "xmlutils.py") f = open(filename, "r") except EnvironmentError: print "The file %s does not exist. Aborting." % filename sys.exit(1) lines = f.readlines() f.close() patchPositionFound = False patched = False sn = "xmlutils.py" s = open(sn, "w") for line in lines: if patchPositionFound: if not line.startswith(\ " # patched by eric4 install script.") and \ not line.startswith(\ " self.datasize = len(self.data)"): s.write(" # patched by eric4 install script.\n") s.write(" self.datasize = len(self.data)\n") patched = True patchPositionFound = False s.write(line) if line.startswith(\ " self.data = self.charset_converter(self.data)"): patchPositionFound = True continue s.close() if not patched: print "xmlutils.py is already patched." os.remove(sn) else: try: py_compile.compile(sn) except py_compile.PyCompileError, e: print "Error compiling %s. Aborting" % sn print e os.remove(sn) sys.exit(1) except SyntaxError, e: print "Error compiling %s. Aborting" % sn print e os.remove(sn) sys.exit(1) shutil.copy(filename, "%s.orig" % filename) shutil.copy(sn, filename) os.remove(sn) if os.path.exists("%sc" % sn): shutil.copy("%sc" % sn, "%sc" % filename) os.remove("%sc" % sn) if os.path.exists("%so" % sn): shutil.copy("%so" % sn, "%so" % filename) os.remove("%so" % sn) print "xmlutils.py patched successfully." print "Unpatched file copied to %s.orig." % filename def main(argv): """ The main function of the script. argv is the list of command line arguments. """ import getopt # Parse the command line. global progName, pyxmlModDir progName = os.path.basename(argv[0]) initGlobals() try: optlist, args = getopt.getopt(argv[1:],"hd:") except getopt.GetoptError: usage() for opt, arg in optlist: if opt == "-h": usage(0) elif opt == "-d": global pyxmlModDir pyxmlModDir = arg patchPyXML() if __name__ == "__main__": main() eric4-4.5.18/eric/PaxHeaders.8617/Tools0000644000175000001440000000013212261012661015531 xustar000000000000000030 mtime=1388582321.221193186 30 atime=1389081086.015724339 30 ctime=1389081086.315724332 eric4-4.5.18/eric/Tools/0000755000175000001440000000000012261012661015340 5ustar00detlevusers00000000000000eric4-4.5.18/eric/Tools/PaxHeaders.8617/UIPreviewer.py0000644000175000001440000000013212261012651020365 xustar000000000000000030 mtime=1388582313.825100217 30 atime=1389081085.409724349 30 ctime=1389081086.311724332 eric4-4.5.18/eric/Tools/UIPreviewer.py0000644000175000001440000005267012261012651020131 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2004 - 2014 Detlev Offenbach # """ Module implementing the UI Previewer main window. """ import sys from PyQt4.QtCore import * from PyQt4.QtGui import * from PyQt4 import uic from KdeQt import KQFileDialog, KQMessageBox from KdeQt.KQMainWindow import KQMainWindow import KdeQt.KQPrinter from KdeQt.KQPrintDialog import KQPrintDialog import KdeQt import Preferences import UI.PixmapCache import UI.Config class UIPreviewer(KQMainWindow): """ Class implementing the UI Previewer main window. """ def __init__(self, filename = None, parent = None, name = None): """ Constructor @param filename name of a UI file to load @param parent parent widget of this window (QWidget) @param name name of this window (string or QString) """ self.mainWidget = None self.currentFile = QDir.currentPath() KQMainWindow.__init__(self, parent) if not name: self.setObjectName("UIPreviewer") else: self.setObjectName(name) self.resize(QSize(600, 480).expandedTo(self.minimumSizeHint())) self.setAttribute(Qt.WA_DeleteOnClose) self.statusBar() self.setWindowIcon(UI.PixmapCache.getIcon("eric.png")) self.setWindowTitle(self.trUtf8("UI Previewer")) self.cw = QWidget(self) self.cw.setObjectName("centralWidget") self.UIPreviewerLayout = QVBoxLayout(self.cw) self.UIPreviewerLayout.setMargin(6) self.UIPreviewerLayout.setSpacing(6) self.UIPreviewerLayout.setObjectName("UIPreviewerLayout") self.styleLayout = QHBoxLayout() self.styleLayout.setMargin(0) self.styleLayout.setSpacing(6) self.styleLayout.setObjectName("styleLayout") self.styleLabel = QLabel(self.trUtf8("Select GUI Theme"), self.cw) self.styleLabel.setObjectName("styleLabel") self.styleLayout.addWidget(self.styleLabel) self.styleCombo = QComboBox(self.cw) self.styleCombo.setObjectName("styleCombo") self.styleCombo.setEditable(False) self.styleCombo.setToolTip(self.trUtf8("Select the GUI Theme")) self.styleLayout.addWidget(self.styleCombo) self.styleCombo.addItems(QStyleFactory().keys()) self.styleCombo.setCurrentIndex(\ Preferences.Prefs.settings.value('UIPreviewer/style').toInt()[0]) styleSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) self.styleLayout.addItem(styleSpacer) self.UIPreviewerLayout.addLayout(self.styleLayout) self.previewSV = QScrollArea(self.cw) self.previewSV.setObjectName("preview") self.previewSV.setFrameShape(QFrame.NoFrame) self.previewSV.setFrameShadow(QFrame.Plain) self.previewSV.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) self.UIPreviewerLayout.addWidget(self.previewSV) self.setCentralWidget(self.cw) self.connect(self.styleCombo, SIGNAL("activated(const QString&)"), self.__guiStyleSelected) self.__initActions() self.__initMenus() self.__initToolbars() self.__updateActions() # defere loading of a UI file until we are shown self.fileToLoad = filename def show(self): """ Public slot to show this dialog. This overloaded slot loads a UI file to be previewed after the main window has been shown. This way, previewing a dialog doesn't interfere with showing the main window. """ QMainWindow.show(self) if self.fileToLoad is not None: fn, self.fileToLoad = (self.fileToLoad, None) self.__loadFile(fn) def __initActions(self): """ Private method to define the user interface actions. """ self.openAct = QAction(UI.PixmapCache.getIcon("openUI.png"), self.trUtf8('&Open File'), self) self.openAct.setShortcut(QKeySequence(self.trUtf8("Ctrl+O","File|Open"))) self.openAct.setStatusTip(self.trUtf8('Open a UI file for display')) self.openAct.setWhatsThis(self.trUtf8( """Open File""" """

    This opens a new UI file for display.

    """ )) self.connect(self.openAct, SIGNAL('triggered()'), self.__openFile) self.printAct = QAction(UI.PixmapCache.getIcon("print.png"), self.trUtf8('&Print'), self) self.printAct.setShortcut(QKeySequence(self.trUtf8("Ctrl+P","File|Print"))) self.printAct.setStatusTip(self.trUtf8('Print a screen capture')) self.printAct.setWhatsThis(self.trUtf8( """Print""" """

    Print a screen capture.

    """ )) self.connect(self.printAct, SIGNAL('triggered()'), self.__printImage) self.printPreviewAct = QAction(UI.PixmapCache.getIcon("printPreview.png"), self.trUtf8('Print Preview'), self) self.printPreviewAct.setStatusTip(self.trUtf8( 'Print preview a screen capture')) self.printPreviewAct.setWhatsThis(self.trUtf8( """Print Preview""" """

    Print preview a screen capture.

    """ )) self.connect(self.printPreviewAct, SIGNAL('triggered()'), self.__printPreviewImage) self.imageAct = QAction(UI.PixmapCache.getIcon("screenCapture.png"), self.trUtf8('&Screen Capture'), self) self.imageAct.setShortcut(\ QKeySequence(self.trUtf8("Ctrl+S","File|Screen Capture"))) self.imageAct.setStatusTip(self.trUtf8('Save a screen capture to an image file')) self.imageAct.setWhatsThis(self.trUtf8( """Screen Capture""" """

    Save a screen capture to an image file.

    """ )) self.connect(self.imageAct, SIGNAL('triggered()'), self.__saveImage) self.exitAct = QAction(UI.PixmapCache.getIcon("exit.png"), self.trUtf8('&Quit'), self) self.exitAct.setShortcut(QKeySequence(self.trUtf8("Ctrl+Q","File|Quit"))) self.exitAct.setStatusTip(self.trUtf8('Quit the application')) self.exitAct.setWhatsThis(self.trUtf8( """Quit""" """

    Quit the application.

    """ )) self.connect(self.exitAct, SIGNAL('triggered()'), qApp, SLOT('closeAllWindows()')) self.copyAct = QAction(UI.PixmapCache.getIcon("editCopy.png"), self.trUtf8('&Copy'), self) self.copyAct.setShortcut(QKeySequence(self.trUtf8("Ctrl+C","Edit|Copy"))) self.copyAct.setStatusTip(self.trUtf8('Copy screen capture to clipboard')) self.copyAct.setWhatsThis(self.trUtf8( """Copy""" """

    Copy screen capture to clipboard.

    """ )) self.connect(self.copyAct,SIGNAL('triggered()'),self.__copyImageToClipboard) self.whatsThisAct = QAction(UI.PixmapCache.getIcon("whatsThis.png"), self.trUtf8('&What\'s This?'), self) self.whatsThisAct.setShortcut(QKeySequence(self.trUtf8("Shift+F1"))) self.whatsThisAct.setStatusTip(self.trUtf8('Context sensitive help')) self.whatsThisAct.setWhatsThis(self.trUtf8( """Display context sensitive help""" """

    In What's This? mode, the mouse cursor shows an arrow with a""" """ question mark, and you can click on the interface elements to get""" """ a short description of what they do and how to use them. In""" """ dialogs, this feature can be accessed using the context help""" """ button in the titlebar.

    """ )) self.connect(self.whatsThisAct,SIGNAL('triggered()'),self.__whatsThis) self.aboutAct = QAction(self.trUtf8('&About'), self) self.aboutAct.setStatusTip(self.trUtf8('Display information about this software')) self.aboutAct.setWhatsThis(self.trUtf8( """About""" """

    Display some information about this software.

    """ )) self.connect(self.aboutAct,SIGNAL('triggered()'),self.__about) self.aboutQtAct = QAction(self.trUtf8('About &Qt'), self) self.aboutQtAct.setStatusTip(\ self.trUtf8('Display information about the Qt toolkit')) self.aboutQtAct.setWhatsThis(self.trUtf8( """About Qt""" """

    Display some information about the Qt toolkit.

    """ )) self.connect(self.aboutQtAct,SIGNAL('triggered()'),self.__aboutQt) def __initMenus(self): """ Private method to create the menus. """ mb = self.menuBar() menu = mb.addMenu(self.trUtf8('&File')) menu.setTearOffEnabled(True) menu.addAction(self.openAct) menu.addAction(self.imageAct) menu.addSeparator() menu.addAction(self.printPreviewAct) menu.addAction(self.printAct) menu.addSeparator() menu.addAction(self.exitAct) menu = mb.addMenu(self.trUtf8("&Edit")) menu.setTearOffEnabled(True) menu.addAction(self.copyAct) mb.addSeparator() menu = mb.addMenu(self.trUtf8('&Help')) menu.setTearOffEnabled(True) menu.addAction(self.aboutAct) menu.addAction(self.aboutQtAct) menu.addSeparator() menu.addAction(self.whatsThisAct) def __initToolbars(self): """ Private method to create the toolbars. """ filetb = self.addToolBar(self.trUtf8("File")) filetb.setIconSize(UI.Config.ToolBarIconSize) filetb.addAction(self.openAct) filetb.addAction(self.imageAct) filetb.addSeparator() filetb.addAction(self.printPreviewAct) filetb.addAction(self.printAct) filetb.addSeparator() filetb.addAction(self.exitAct) edittb = self.addToolBar(self.trUtf8("Edit")) edittb.setIconSize(UI.Config.ToolBarIconSize) edittb.addAction(self.copyAct) helptb = self.addToolBar(self.trUtf8("Help")) helptb.setIconSize(UI.Config.ToolBarIconSize) helptb.addAction(self.whatsThisAct) def __whatsThis(self): """ Private slot called in to enter Whats This mode. """ QWhatsThis.enterWhatsThisMode() def __guiStyleSelected(self, selectedStyle): """ Private slot to handle the selection of a GUI style. @param selectedStyle name of the selected style (QString) """ if self.mainWidget: self.__updateChildren(selectedStyle) def __about(self): """ Private slot to show the about information. """ KQMessageBox.about(self, self.trUtf8("UI Previewer"), self.trUtf8( """

    About UI Previewer

    """ """

    The UI Previewer loads and displays Qt User-Interface files""" """ with various styles, which are selectable via a selection list.

    """ )) def __aboutQt(self): """ Private slot to show info about Qt. """ QMessageBox.aboutQt(self, self.trUtf8("UI Previewer")) def __openFile(self): """ Private slot to load a new file. """ fn = KQFileDialog.getOpenFileName(\ self, self.trUtf8("Select UI file"), self.currentFile, self.trUtf8("Qt User-Interface Files (*.ui)")) if not fn.isEmpty(): self.__loadFile(fn) def __loadFile(self, fn): """ Private slot to load a ui file. @param fn name of the ui file to be laoded (string or QString) """ if self.mainWidget: self.mainWidget.close() self.previewSV.takeWidget() del self.mainWidget self.mainWidget = None # load the file try: self.mainWidget = uic.loadUi(fn) except: pass if self.mainWidget: self.currentFile = fn self.__updateChildren(self.styleCombo.currentText()) if isinstance(self.mainWidget, QDialog) or \ isinstance(self.mainWidget, QMainWindow): self.mainWidget.show() self.mainWidget.installEventFilter(self) else: self.previewSV.setWidget(self.mainWidget) self.mainWidget.show() else: KQMessageBox.warning(None, self.trUtf8("Load UI File"), self.trUtf8("""

    The file %1 could not be loaded.

    """)\ .arg(fn)) self.__updateActions() def __updateChildren(self, sstyle): """ Private slot to change the style of the show UI. @param sstyle name of the selected style (QString) """ QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) qstyle = QStyleFactory.create(sstyle) self.mainWidget.setStyle(qstyle) lst = self.mainWidget.findChildren(QWidget) for obj in lst: try: obj.setStyle(qstyle) except AttributeError: pass del lst self.mainWidget.hide() self.mainWidget.show() self.lastQStyle = qstyle self.lastStyle = QString(sstyle) Preferences.Prefs.settings.setValue('UIPreviewer/style', QVariant(self.styleCombo.currentIndex())) QApplication.restoreOverrideCursor() def __updateActions(self): """ Private slot to update the actions state. """ if self.mainWidget: self.imageAct.setEnabled(True) self.printAct.setEnabled(True) if self.printPreviewAct: self.printPreviewAct.setEnabled(True) self.copyAct.setEnabled(True) self.styleCombo.setEnabled(True) else: self.imageAct.setEnabled(False) self.printAct.setEnabled(False) if self.printPreviewAct: self.printPreviewAct.setEnabled(False) self.copyAct.setEnabled(False) self.styleCombo.setEnabled(False) def __handleCloseEvent(self): """ Private slot to handle the close event of a viewed QMainWidget. """ if self.mainWidget: self.mainWidget.removeEventFilter(self) del self.mainWidget self.mainWidget = None self.__updateActions() def eventFilter(self, obj, ev): """ Protected method called to filter an event. @param object object, that generated the event (QObject) @param event the event, that was generated by object (QEvent) @return flag indicating if event was filtered out """ if obj == self.mainWidget: if ev.type() == QEvent.Close: self.__handleCloseEvent() return True else: if isinstance(self.mainWidget, QDialog): return QDialog.eventFilter(self, obj, ev) elif isinstance(self.mainWidget, QMainWindow): return QMainWindow.eventFilter(self, obj, ev) else: return False def __saveImage(self): """ Private slot to handle the Save Image menu action. """ if self.mainWidget is None: KQMessageBox.critical(None, self.trUtf8("Save Image"), self.trUtf8("""There is no UI file loaded.""")) return defaultExt = "PNG" filters = "" formats = QImageWriter.supportedImageFormats() for format in formats: filters = "%s*.%s " % (filters, unicode(QString(format)).lower()) filter = self.trUtf8("Images (%1)").arg(QString(filters[:-1])) fname = KQFileDialog.getSaveFileName(\ self, self.trUtf8("Save Image"), QString(), filter) if fname.isEmpty(): return ext = QFileInfo(fname).suffix().toUpper() if ext.isEmpty(): ext = defaultExt fname.append(".%s" % defaultExt.lower()) pix = QPixmap.grabWidget(self.mainWidget) self.__updateChildren(self.lastStyle) if not pix.save(fname, str(ext)): KQMessageBox.critical(None, self.trUtf8("Save Image"), self.trUtf8("""

    The file %1 could not be saved.

    """) .arg(fname)) def __copyImageToClipboard(self): """ Private slot to handle the Copy Image menu action. """ if self.mainWidget is None: KQMessageBox.critical(None, self.trUtf8("Save Image"), self.trUtf8("""There is no UI file loaded.""")) return cb = QApplication.clipboard() cb.setPixmap(QPixmap.grabWidget(self.mainWidget)) self.__updateChildren(self.lastStyle) def __printImage(self): """ Private slot to handle the Print Image menu action. """ if self.mainWidget is None: KQMessageBox.critical(None, self.trUtf8("Print Image"), self.trUtf8("""There is no UI file loaded.""")) return settings = Preferences.Prefs.settings printer = KdeQt.KQPrinter.KQPrinter(mode = QPrinter.HighResolution) printer.setFullPage(True) if not KdeQt.isKDE(): printer.setPrinterName(settings.value("UIPreviewer/printername").toString()) printer.setPageSize( QPrinter.PageSize(settings.value("UIPreviewer/pagesize").toInt()[0])) printer.setPageOrder( QPrinter.PageOrder(settings.value("UIPreviewer/pageorder").toInt()[0])) printer.setOrientation( QPrinter.Orientation(settings.value("UIPreviewer/orientation").toInt()[0])) printer.setColorMode( QPrinter.ColorMode(settings.value("UIPreviewer/colormode").toInt()[0])) printDialog = KQPrintDialog(printer, self) if printDialog.exec_() == QDialog.Accepted: self.statusBar().showMessage(self.trUtf8("Printing the image...")) self.__print(printer) if not KdeQt.isKDE(): settings.setValue("UIPreviewer/printername", QVariant(printer.printerName())) settings.setValue("UIPreviewer/pagesize", QVariant(printer.pageSize())) settings.setValue("UIPreviewer/pageorder", QVariant(printer.pageOrder())) settings.setValue("UIPreviewer/orientation", QVariant(printer.orientation())) settings.setValue("UIPreviewer/colormode", QVariant(printer.colorMode())) self.statusBar().showMessage(self.trUtf8("Image sent to printer..."), 2000) def __printPreviewImage(self): """ Private slot to handle the Print Preview menu action. """ from PyQt4.QtGui import QPrintPreviewDialog if self.mainWidget is None: KQMessageBox.critical(None, self.trUtf8("Print Preview"), self.trUtf8("""There is no UI file loaded.""")) return settings = Preferences.Prefs.settings printer = KdeQt.KQPrinter.KQPrinter(mode = QPrinter.HighResolution) printer.setFullPage(True) if not KdeQt.isKDE(): printer.setPrinterName(settings.value("UIPreviewer/printername").toString()) printer.setPageSize( QPrinter.PageSize(settings.value("UIPreviewer/pagesize").toInt()[0])) printer.setPageOrder( QPrinter.PageOrder(settings.value("UIPreviewer/pageorder").toInt()[0])) printer.setOrientation( QPrinter.Orientation(settings.value("UIPreviewer/orientation").toInt()[0])) printer.setColorMode( QPrinter.ColorMode(settings.value("UIPreviewer/colormode").toInt()[0])) preview = QPrintPreviewDialog(printer, self) self.connect(preview, SIGNAL("paintRequested(QPrinter*)"), self.__print) preview.exec_() def __print(self, printer): """ Private slot to the actual printing. @param printer reference to the printer object (QPrinter) """ p = QPainter(printer) marginX = (printer.pageRect().x() - printer.paperRect().x()) / 2 marginY = (printer.pageRect().y() - printer.paperRect().y()) / 2 # double the margin on bottom of page if printer.orientation() == KdeQt.KQPrinter.Portrait: width = printer.width() - marginX * 2 height = printer.height() - marginY * 3 else: marginX *= 2 width = printer.width() - marginX * 2 height = printer.height() - marginY * 2 img = QPixmap.grabWidget(self.mainWidget).toImage() self.__updateChildren(self.lastStyle) p.drawImage(marginX, marginY, img.scaled(width, height, Qt.KeepAspectRatio, Qt.SmoothTransformation)) p.end() eric4-4.5.18/eric/Tools/PaxHeaders.8617/TRSingleApplication.py0000644000175000001440000000013212261012651022032 xustar000000000000000030 mtime=1388582313.827100243 30 atime=1389081085.409724349 30 ctime=1389081086.311724332 eric4-4.5.18/eric/Tools/TRSingleApplication.py0000644000175000001440000000637712261012651021601 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2004 - 2014 Detlev Offenbach # """ Module implementing the single application server and client. """ import os from PyQt4.QtCore import SIGNAL from Utilities.SingleApplication import SingleApplicationClient, SingleApplicationServer ########################################################################### # define some module global stuff ########################################################################### SAFile = "eric4_trpreviewer.lck" # define the protocol tokens SALoadForm = '>LoadForm<' SALoadTranslation = '>LoadTranslation<' class TRSingleApplicationServer(SingleApplicationServer): """ Class implementing the single application server embedded within the Translations Previewer. @signal loadForm(fname) emitted to load a form file @signal loadTranslation(fname, first) emitted to load a translation file """ def __init__(self, parent): """ Constructor @param parent parent widget (QWidget) """ SingleApplicationServer.__init__(self, SAFile) self.parent = parent def handleCommand(self, cmd, params): """ Public slot to handle the command sent by the client. @param cmd commandstring (string) @param params parameterstring (string) """ if cmd == SALoadForm: self.__saLoadForm(eval(params)) return if cmd == SALoadTranslation: self.__saLoadTranslation(eval(params)) return def __saLoadForm(self, fnames): """ Private method used to handle the "Load Form" command. @param fnames filenames of the forms to be loaded (list of strings) """ for fname in fnames: self.emit(SIGNAL('loadForm'), fname) def __saLoadTranslation(self, fnames): """ Private method used to handle the "Load Translation" command. @param fnames filenames of the translations to be loaded (list of strings) """ first = True for fname in fnames: self.emit(SIGNAL('loadTranslation'), fname, first) first = False class TRSingleApplicationClient(SingleApplicationClient): """ Class implementing the single application client of the Translations Previewer. """ def __init__(self): """ Constructor """ SingleApplicationClient.__init__(self, SAFile) def processArgs(self, args): """ Public method to process the command line args passed to the UI. @param args list of files to open """ # no args, return if args is None: return uiFiles = [] qmFiles = [] for arg in args: ext = os.path.splitext(arg)[1] ext = ext.lower() if ext == '.ui': uiFiles.append(arg) elif ext == '.qm': qmFiles.append(arg) cmd = "%s%s\n" % (SALoadForm, unicode(uiFiles)) self.sendCommand(cmd) cmd = "%s%s\n" % (SALoadTranslation, unicode(qmFiles)) self.sendCommand(cmd) self.disconnect() eric4-4.5.18/eric/Tools/PaxHeaders.8617/__init__.py0000644000175000001440000000013212261012651017716 xustar000000000000000030 mtime=1388582313.830100281 30 atime=1389081085.409724349 30 ctime=1389081086.311724332 eric4-4.5.18/eric/Tools/__init__.py0000644000175000001440000000024412261012651017450 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2004 - 2014 Detlev Offenbach # """ Package implementing some useful tools used by the IDE. """ eric4-4.5.18/eric/Tools/PaxHeaders.8617/TRPreviewer.py0000644000175000001440000000013212261012651020375 xustar000000000000000030 mtime=1388582313.832100306 30 atime=1389081085.409724349 30 ctime=1389081086.311724332 eric4-4.5.18/eric/Tools/TRPreviewer.py0000644000175000001440000007345012261012651020140 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2004 - 2014 Detlev Offenbach # """ Module implementing the TR Previewer main window. """ import sys from PyQt4.QtCore import * from PyQt4.QtGui import * from PyQt4 import uic from KdeQt import KQFileDialog, KQMessageBox from KdeQt.KQMainWindow import KQMainWindow import KdeQt from TRSingleApplication import TRSingleApplicationServer import Preferences import UI.PixmapCache import UI.Config noTranslationName = QApplication.translate("TRPreviewer", "") class TRPreviewer(KQMainWindow): """ Class implementing the UI Previewer main window. """ def __init__(self, filenames = [], parent = None, name = None): """ Constructor @param filenames filenames of form and/or translation files to load @param parent parent widget of this window (QWidget) @param name name of this window (string or QString) """ self.mainWidget = None self.currentFile = QDir.currentPath() KQMainWindow.__init__(self, parent) if not name: self.setObjectName("TRPreviewer") else: self.setObjectName(name) self.resize(QSize(800, 600).expandedTo(self.minimumSizeHint())) self.setAttribute(Qt.WA_DeleteOnClose) self.statusBar() self.setWindowIcon(UI.PixmapCache.getIcon("eric.png")) self.setWindowTitle(self.trUtf8("Translations Previewer")) self.cw = QWidget(self) self.cw.setObjectName("qt_central_widget") self.TRPreviewerLayout = QVBoxLayout(self.cw) self.TRPreviewerLayout.setMargin(6) self.TRPreviewerLayout.setSpacing(6) self.TRPreviewerLayout.setObjectName("TRPreviewerLayout") self.languageLayout = QHBoxLayout() self.languageLayout.setMargin(0) self.languageLayout.setSpacing(6) self.languageLayout.setObjectName("languageLayout") self.languageLabel = QLabel(self.trUtf8("Select language file"), self.cw) self.languageLabel.setObjectName("languageLabel") self.languageLayout.addWidget(self.languageLabel) self.languageCombo = QComboBox(self.cw) self.languageCombo.setObjectName("languageCombo") self.languageCombo.setEditable(False) self.languageCombo.setToolTip(self.trUtf8("Select language file")) self.languageLayout.addWidget(self.languageCombo) languageSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) self.languageLayout.addItem(languageSpacer) self.TRPreviewerLayout.addLayout(self.languageLayout) self.preview = WidgetWorkspace(self.cw) self.preview.setObjectName("preview") self.TRPreviewerLayout.addWidget(self.preview) self.connect(self.preview, SIGNAL('lastWidgetClosed'), self.__updateActions) self.setCentralWidget(self.cw) self.connect(self.languageCombo,SIGNAL("activated(const QString&)"), self.setTranslation) self.translations = TranslationsDict(self.languageCombo, self) self.connect(self.translations, SIGNAL('translationChanged'), self.preview, SIGNAL('rebuildWidgets')) self.__initActions() self.__initMenus() self.__initToolbars() self.__updateActions() # fire up the single application server self.SAServer = TRSingleApplicationServer(self) self.connect(self.SAServer, SIGNAL('loadForm'), self.preview.loadWidget) self.connect(self.SAServer, SIGNAL('loadTranslation'), self.translations.add) # defere loading of a UI file until we are shown self.filesToLoad = filenames[:] def show(self): """ Public slot to show this dialog. This overloaded slot loads a UI file to be previewed after the main window has been shown. This way, previewing a dialog doesn't interfere with showing the main window. """ QMainWindow.show(self) if self.filesToLoad: filenames, self.filesToLoad = (self.filesToLoad[:], []) first = True for fn in filenames: fi = QFileInfo(fn) if fi.suffix().toLower().compare('ui') == 0: self.preview.loadWidget(fn) elif fi.suffix().toLower().compare('qm') == 0: self.translations.add(fn, first) first = False self.__updateActions() def closeEvent(self, event): """ Private event handler for the close event. @param event close event (QCloseEvent) """ if self.SAServer is not None: self.SAServer.shutdown() self.SAServer = None event.accept() def __initActions(self): """ Private method to define the user interface actions. """ self.openUIAct = QAction(UI.PixmapCache.getIcon("openUI.png"), self.trUtf8('&Open UI Files...'), self) self.openUIAct.setStatusTip(self.trUtf8('Open UI files for display')) self.openUIAct.setWhatsThis(self.trUtf8( """Open UI Files""" """

    This opens some UI files for display.

    """ )) self.connect(self.openUIAct, SIGNAL('triggered()'), self.__openWidget) self.openQMAct = QAction(UI.PixmapCache.getIcon("openQM.png"), self.trUtf8('Open &Translation Files...'), self) self.openQMAct.setStatusTip(self.trUtf8('Open Translation files for display')) self.openQMAct.setWhatsThis(self.trUtf8( """Open Translation Files""" """

    This opens some translation files for display.

    """ )) self.connect(self.openQMAct, SIGNAL('triggered()'), self.__openTranslation) self.reloadAct = QAction(UI.PixmapCache.getIcon("reload.png"), self.trUtf8('&Reload Translations'), self) self.reloadAct.setStatusTip(self.trUtf8('Reload the loaded translations')) self.reloadAct.setWhatsThis(self.trUtf8( """Reload Translations""" """

    This reloads the translations for the loaded languages.

    """ )) self.connect(self.reloadAct, SIGNAL('triggered()'), self.translations.reload) self.exitAct = QAction(UI.PixmapCache.getIcon("exit.png"), self.trUtf8('&Quit'), self) self.exitAct.setShortcut(QKeySequence(self.trUtf8("Ctrl+Q","File|Quit"))) self.exitAct.setStatusTip(self.trUtf8('Quit the application')) self.exitAct.setWhatsThis(self.trUtf8( """Quit""" """

    Quit the application.

    """ )) self.connect(self.exitAct, SIGNAL('triggered()'), qApp, SLOT('closeAllWindows()')) self.whatsThisAct = QAction(UI.PixmapCache.getIcon("whatsThis.png"), self.trUtf8('&What\'s This?'), self) self.whatsThisAct.setShortcut(QKeySequence(self.trUtf8("Shift+F1"))) self.whatsThisAct.setStatusTip(self.trUtf8('Context sensitive help')) self.whatsThisAct.setWhatsThis(self.trUtf8( """Display context sensitive help""" """

    In What's This? mode, the mouse cursor shows an arrow with a""" """ question mark, and you can click on the interface elements to get""" """ a short description of what they do and how to use them. In""" """ dialogs, this feature can be accessed using the context help""" """ button in the titlebar.

    """ )) self.connect(self.whatsThisAct,SIGNAL('triggered()'),self.__whatsThis) self.aboutAct = QAction(self.trUtf8('&About'), self) self.aboutAct.setStatusTip(self.trUtf8('Display information about this software')) self.aboutAct.setWhatsThis(self.trUtf8( """About""" """

    Display some information about this software.

    """ )) self.connect(self.aboutAct,SIGNAL('triggered()'),self.__about) self.aboutQtAct = QAction(self.trUtf8('About &Qt'), self) self.aboutQtAct.setStatusTip(\ self.trUtf8('Display information about the Qt toolkit')) self.aboutQtAct.setWhatsThis(self.trUtf8( """About Qt""" """

    Display some information about the Qt toolkit.

    """ )) self.connect(self.aboutQtAct,SIGNAL('triggered()'),self.__aboutQt) self.tileAct = QAction(self.trUtf8('&Tile'), self) self.tileAct.setStatusTip(self.trUtf8('Tile the windows')) self.tileAct.setWhatsThis(self.trUtf8( """Tile the windows""" """

    Rearrange and resize the windows so that they are tiled.

    """ )) self.connect(self.tileAct, SIGNAL('triggered()'),self.preview.tile) self.cascadeAct = QAction(self.trUtf8('&Cascade'), self) self.cascadeAct.setStatusTip(self.trUtf8('Cascade the windows')) self.cascadeAct.setWhatsThis(self.trUtf8( """Cascade the windows""" """

    Rearrange and resize the windows so that they are cascaded.

    """ )) self.connect(self.cascadeAct, SIGNAL('triggered()'),self.preview.cascade) self.closeAct = QAction(UI.PixmapCache.getIcon("close.png"), self.trUtf8('&Close'), self) self.closeAct.setShortcut(QKeySequence(self.trUtf8("Ctrl+W","File|Close"))) self.closeAct.setStatusTip(self.trUtf8('Close the current window')) self.closeAct.setWhatsThis(self.trUtf8( """Close Window""" """

    Close the current window.

    """ )) self.connect(self.closeAct, SIGNAL('triggered()'),self.preview.closeWidget) self.closeAllAct = QAction(self.trUtf8('Clos&e All'), self) self.closeAllAct.setStatusTip(self.trUtf8('Close all windows')) self.closeAllAct.setWhatsThis(self.trUtf8( """Close All Windows""" """

    Close all windows.

    """ )) self.connect(self.closeAllAct, SIGNAL('triggered()'), self.preview.closeAllWidgets) def __initMenus(self): """ Private method to create the menus. """ mb = self.menuBar() menu = mb.addMenu(self.trUtf8('&File')) menu.setTearOffEnabled(True) menu.addAction(self.openUIAct) menu.addAction(self.openQMAct) menu.addAction(self.reloadAct) menu.addSeparator() menu.addAction(self.closeAct) menu.addAction(self.closeAllAct) menu.addSeparator() menu.addAction(self.exitAct) self.windowMenu = mb.addMenu(self.trUtf8('&Window')) self.windowMenu.setTearOffEnabled(True) self.connect(self.windowMenu, SIGNAL('aboutToShow()'), self.__showWindowMenu) self.connect(self.windowMenu, SIGNAL('triggered(QAction *)'), self.preview.toggleSelectedWidget) mb.addSeparator() menu = mb.addMenu(self.trUtf8('&Help')) menu.setTearOffEnabled(True) menu.addAction(self.aboutAct) menu.addAction(self.aboutQtAct) menu.addSeparator() menu.addAction(self.whatsThisAct) def __initToolbars(self): """ Private method to create the toolbars. """ filetb = self.addToolBar(self.trUtf8("File")) filetb.setIconSize(UI.Config.ToolBarIconSize) filetb.addAction(self.openUIAct) filetb.addAction(self.openQMAct) filetb.addAction(self.reloadAct) filetb.addSeparator() filetb.addAction(self.closeAct) filetb.addSeparator() filetb.addAction(self.exitAct) helptb = self.addToolBar(self.trUtf8("Help")) helptb.setIconSize(UI.Config.ToolBarIconSize) helptb.addAction(self.whatsThisAct) def __whatsThis(self): """ Private slot called in to enter Whats This mode. """ QWhatsThis.enterWhatsThisMode() def __updateActions(self): """ Private slot to update the actions state. """ if self.preview.hasWidgets(): self.closeAct.setEnabled(True) self.closeAllAct.setEnabled(True) self.tileAct.setEnabled(True) self.cascadeAct.setEnabled(True) else: self.closeAct.setEnabled(False) self.closeAllAct.setEnabled(False) self.tileAct.setEnabled(False) self.cascadeAct.setEnabled(False) if self.translations.hasTranslations(): self.reloadAct.setEnabled(True) else: self.reloadAct.setEnabled(False) def __about(self): """ Private slot to show the about information. """ KQMessageBox.about(self, self.trUtf8("TR Previewer"), self.trUtf8( """

    About TR Previewer

    """ """

    The TR Previewer loads and displays Qt User-Interface files""" """ and translation files and shows dialogs for a selected language.

    """ )) def __aboutQt(self): """ Private slot to show info about Qt. """ QMessageBox.aboutQt(self, self.trUtf8("TR Previewer")) def __openWidget(self): """ Private slot to handle the Open Dialog action. """ fileNameList = KQFileDialog.getOpenFileNames(\ None, self.trUtf8("Select UI files"), QString(), self.trUtf8("Qt User-Interface Files (*.ui)")) for fileName in fileNameList: self.preview.loadWidget(fileName) self.__updateActions() def __openTranslation(self): """ Private slot to handle the Open Translation action. """ fileNameList = KQFileDialog.getOpenFileNames(\ None, self.trUtf8("Select translation files"), QString(), self.trUtf8("Qt Translation Files (*.qm)")) first = True for fileName in fileNameList: self.translations.add(fileName, first) first = False self.__updateActions() def setTranslation(self, name): """ Public slot to activate a translation. @param name name (language) of the translation (string or QString) """ self.translations.set(name) def __showWindowMenu(self): """ Private slot to handle the aboutToShow signal of the window menu. """ self.windowMenu.clear() self.windowMenu.addAction(self.tileAct) self.windowMenu.addAction(self.cascadeAct) self.windowMenu.addSeparator() self.preview.showWindowMenu(self.windowMenu) def reloadTranslations(self): """ Public slot to reload all translations. """ self.translations.reload() class Translation(object): """ Class to store the properties of a translation """ def __init__(self): """ Constructor """ self.fileName = None self.name = None self.translator = None class TranslationsDict(QObject): """ Class to store all loaded translations. @signal translationChanged() emit after a translator was set """ def __init__(self, selector, parent): """ Constructor @param selector reference to the QComboBox used to show the available languages (QComboBox) @param parent parent widget (QWidget) """ QObject.__init__(self, parent) self.selector = selector self.currentTranslator = None self.selector.addItem(noTranslationName) self.translations = [] # list of Translation objects def add(self, transFileName, setTranslation = True): """ Public method to add a translation to the list. If the translation file (*.qm) has not been loaded yet, it will be loaded automatically. @param transFileName name of the translation file to be added (string or QString) @param setTranslation flag indicating, if this should be set as the active translation (boolean) """ fileName = QString(transFileName) if not self.__haveFileName(fileName): ntr = Translation() ntr.fileName = fileName ntr.name = self.__uniqueName(fileName) if ntr.name.isNull(): KQMessageBox.warning(None, self.trUtf8("Set Translator"), self.trUtf8("""

    The translation filename %1""" """ is invalid.

    """).arg(fileName)) return ntr.translator = self.loadTransFile(fileName) if ntr.translator is None: return self.selector.addItem(ntr.name) self.translations.append(ntr) if setTranslation: tr = self.__findFileName(fileName) self.set(tr.name) def set(self, name): """ Public slot to set a translator by name. @param name name (language) of the translator to set (string or QString) """ name = QString(name) nTranslator = None if name.compare(noTranslationName) != 0: trans = self.__findName(name) if trans is None: KQMessageBox.warning(None, self.trUtf8("Set Translator"), self.trUtf8("""

    The translator %1 is not known.

    """)\ .arg(name)) return nTranslator = trans.translator if nTranslator == self.currentTranslator: return if self.currentTranslator is not None: QApplication.removeTranslator(self.currentTranslator) if nTranslator is not None: QApplication.installTranslator(nTranslator) self.currentTranslator = nTranslator self.selector.blockSignals(True) self.selector.setCurrentIndex(self.selector.findText(name)) self.selector.blockSignals(False) self.emit(SIGNAL('translationChanged')) def reload(self): """ Public method to reload all translators. """ cname = self.selector.currentText() if self.currentTranslator is not None: QApplication.removeTranslator(self.currentTranslator) self.currentTranslator = None fileNames = QStringList() for trans in self.translations: trans.translator = None fileNames.append(trans.fileName) self.translations = [] self.selector.clear() self.selector.addItem(noTranslationName) for fileName in fileNames: self.add(fileName, False) if self.__haveName(cname): self.set(cname) else: self.set(noTranslationName) def __findFileName(self, transFileName): """ Private method to find a translation by file name. @param transFileName file name of the translation file (string or QString) @return reference to a translation object or None """ for trans in self.translations: if trans.fileName.compare(transFileName) == 0: return trans return None def __findName(self, name): """ Private method to find a translation by name. @param name name (language) of the translation (string or QString) @return reference to a translation object or None """ for trans in self.translations: if trans.name.compare(name) == 0: return trans return None def __haveFileName(self, transFileName): """ Private method to check for the presence of a translation. @param transFileName file name of the translation file (string or QString) @return flag indicating the presence of the translation (boolean) """ return self.__findFileName(transFileName) is not None def __haveName(self, name): """ Private method to check for the presence of a named translation. @param name name (language) of the translation (string or QString) @return flag indicating the presence of the translation (boolean) """ return self.__findName(name) is not None def __uniqueName(self, transFileName): """ Private method to generate a unique name. @param transFileName file name of the translation file (string or QString) @return unique name (QString) """ name = _filename(transFileName) if name.isNull(): return QString() uname = QString(name) cnt = 1 while self.__haveName(uname): cnt += 1 uname = QString("%1 <%2>").arg(name).arg(cnt) return uname def __del(self, name): """ Private method to delete a translator from the list of available translators. @param name name of the translator to delete (string or QString) """ name = QString(name) if name.compare(noTranslationName) == 0: return trans = self.__findName(name) if trans is None: return if self.selector().currentText().compare(name) == 0: self.set(noTranslationName) self.translations.remove(trans) del trans def loadTransFile(self, transFileName): """ Public slot to load a translation file. @param transFileName file name of the translation file (string or QString) @return reference to the new translator object (QTranslator) """ tr = QTranslator() if tr.load(transFileName): return tr KQMessageBox.warning(None, self.trUtf8("Load Translator"), self.trUtf8("""

    The translation file %1 could not be loaded.

    """)\ .arg(transFileName)) return None def hasTranslations(self): """ Public method to check for loaded translations. @return flag signaling if any translation was loaded (boolean) """ return len(self.translations) > 0 class WidgetView(QWidget): """ Class to show a dynamically loaded widget (or dialog). """ def __init__(self, uiFileName, parent = None, name = None): """ Constructor @param uiFileName name of the UI file to load (string or QString) @param parent parent widget (QWidget) @param name name of this widget (string) """ QWidget.__init__(self, parent) if name: self.setObjectName(name) self.setWindowTitle(name) self.setAttribute(Qt.WA_DeleteOnClose) self.__widget = None self.__uiFileName = uiFileName self.__layout = QHBoxLayout(self) self.__valid = False self.__timer = QTimer(self) self.__timer.setSingleShot(True) self.connect(self.__timer, SIGNAL('timeout()'), self.buildWidget) def isValid(self): """ Public method to return the validity of this widget view. @return flag indicating the validity (boolean) """ return self.__valid def uiFileName(self): """ Public method to retrieve the name of the UI file. @return filename of the loaded UI file (QString) """ return QString(self.__uiFileName) def buildWidget(self): """ Public slot to load a UI file. """ if self.__widget: self.__widget.close() self.__layout.removeWidget(self.__widget) del self.__widget self.__widget = None try: self.__widget = uic.loadUi(self.__uiFileName) except: pass if not self.__widget: KQMessageBox.warning(None, self.trUtf8("Load UI File"), self.trUtf8("""

    The file %1 could not be loaded.

    """)\ .arg(self.__uiFileName)) self.__valid = False return self.__widget.setParent(self) self.__layout.addWidget(self.__widget) self.__widget.show() self.__valid = True self.adjustSize() self.__timer.stop() def __rebuildWidget(self): """ Private method to schedule a rebuild of the widget. """ self.__timer.start(0) class WidgetWorkspace(QWorkspace): """ Specialized workspace to show the loaded widgets. @signal lastWidgetClosed() emitted after last widget was closed """ def __init__(self, parent = None): """ Constructor @param parent parent widget (QWidget) """ QWorkspace.__init__(self, parent) self.setScrollBarsEnabled(True) self.widgets = [] def loadWidget(self, uiFileName): """ Public slot to load a UI file. @param uiFileName name of the UI file to load (string or QString) """ wview = self.__findWidget(uiFileName) if wview is None: name = _filename(uiFileName) if name.isEmpty(): KQMessageBox.warning(None, self.trUtf8("Load UI File"), self.trUtf8("""

    The file %1 could not be loaded.

    """)\ .arg(uiFileName)) return uname = QString(name) cnt = 1 while self.findChild(WidgetView, uname) is not None: cnt += 1 uname = QString("%1 <%2>").arg(name).arg(cnt) name = QString(uname) wview = WidgetView(uiFileName, self, name) wview.buildWidget() if not wview.isValid(): del wview return self.connect(self, SIGNAL("rebuildWidgets"), wview.buildWidget) wview.installEventFilter(self) self.addWindow(wview) self.widgets.append(wview) wview.showNormal() def eventFilter(self, obj, ev): """ Protected method called to filter an event. @param object object, that generated the event (QObject) @param event the event, that was generated by object (QEvent) @return flag indicating if event was filtered out """ if not isinstance(obj, QWidget): return False if not obj in self.widgets: return False if ev.type() == QEvent.Close: try: self.widgets.remove(obj) if len(self.widgets) == 0: self.emit(SIGNAL('lastWidgetClosed')) except ValueError: pass return False def __findWidget(self, uiFileName): """ Private method to find a specific widget view. @param uiFileName filename of the loaded UI file (string or QString) @return reference to the widget (WidgetView) or None """ wviewList = self.findChildren(WidgetView) if wviewList is None: return None for wview in wviewList: if wview.uiFileName().compare(uiFileName) == 0: return wview return None def closeWidget(self): """ Public slot to close the active window. """ aw = self.activeWindow() if aw is not None: aw.close() def closeAllWidgets(self): """ Public slot to close all windows. """ for w in self.widgets[:]: w.close() def showWindowMenu(self, windowMenu): """ Public method to set up the widgets part of the Window menu. @param windowMenu reference to the window menu """ idx = 0 for wid in self.widgets: act = windowMenu.addAction(wid.windowTitle()) act.setData(QVariant(idx)) act.setCheckable(True) act.setChecked(not wid.isHidden()) idx = idx + 1 def toggleSelectedWidget(self, act): """ Public method to handle the toggle of a window. @param act reference to the action that triggered (QAction) """ idx, ok = act.data().toInt() if ok: self.__toggleWidget(self.widgets[idx]) def __toggleWidget(self, w): """ Private method to toggle a workspace window. @param w window to be toggled """ if w.isHidden(): w.show() else: w.hide() def hasWidgets(self): """ Public method to check for loaded widgets. @return flag signaling if any widget was loaded (boolean) """ return len(self.widgets) > 0 def _filename(path): """ Protected module function to chop off the path. @param path path to extract the filename from (string or QString) @return extracted filename (QString) """ path = QString(path) idx = path.lastIndexOf("/") if idx == -1: idx = path.lastIndexOf(QDir.separator()) if idx == -1: return path else: return path.mid(idx + 1) eric4-4.5.18/eric/Tools/PaxHeaders.8617/TrayStarter.py0000644000175000001440000000013212261012651020443 xustar000000000000000030 mtime=1388582313.835100344 30 atime=1389081085.427724352 30 ctime=1389081086.311724332 eric4-4.5.18/eric/Tools/TrayStarter.py0000644000175000001440000003714712261012651020211 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Module implementing a starter for the system tray. """ import sys import os from PyQt4.QtCore import SIGNAL, QStringList, QProcess, QSettings, QFileInfo, \ QVariant from PyQt4.QtGui import QSystemTrayIcon, QMenu, qApp, QCursor, QMessageBox, \ QApplication, QDialog import Globals import UI.PixmapCache import Utilities import Preferences from eric4config import getConfig class TrayStarter(QSystemTrayIcon): """ Class implementing a starter for the system tray. """ def __init__(self): """ Constructor """ QSystemTrayIcon.__init__(self, UI.PixmapCache.getIcon( unicode(Preferences.getTrayStarter("TrayStarterIcon")))) self.maxMenuFilePathLen = 75 self.rsettings = QSettings(QSettings.IniFormat, QSettings.UserScope, Globals.settingsNameOrganization, Globals.settingsNameRecent) self.recentProjects = QStringList() self.__loadRecentProjects() self.recentMultiProjects = QStringList() self.__loadRecentMultiProjects() self.recentFiles = QStringList() self.__loadRecentFiles() self.connect(self, SIGNAL("activated(QSystemTrayIcon::ActivationReason)"), self.__activated) self.__menu = QMenu(self.trUtf8("Eric4 tray starter")) self.recentProjectsMenu = QMenu(self.trUtf8('Recent Projects'), self.__menu) self.connect(self.recentProjectsMenu, SIGNAL('aboutToShow()'), self.__showRecentProjectsMenu) self.connect(self.recentProjectsMenu, SIGNAL('triggered(QAction *)'), self.__openRecent) self.recentMultiProjectsMenu = \ QMenu(self.trUtf8('Recent Multiprojects'), self.__menu) self.connect(self.recentMultiProjectsMenu, SIGNAL('aboutToShow()'), self.__showRecentMultiProjectsMenu) self.connect(self.recentMultiProjectsMenu, SIGNAL('triggered(QAction *)'), self.__openRecent) self.recentFilesMenu = QMenu(self.trUtf8('Recent Files'), self.__menu) self.connect(self.recentFilesMenu, SIGNAL('aboutToShow()'), self.__showRecentFilesMenu) self.connect(self.recentFilesMenu, SIGNAL('triggered(QAction *)'), self.__openRecent) act = self.__menu.addAction( self.trUtf8("Eric4 tray starter"), self.__about) font = act.font() font.setBold(True) act.setFont(font) self.__menu.addSeparator() self.__menu.addAction(self.trUtf8("QRegExp editor"), self.__startQRegExp) self.__menu.addAction(self.trUtf8("Python re editor"), self.__startPyRe) self.__menu.addSeparator() self.__menu.addAction(UI.PixmapCache.getIcon("uiPreviewer.png"), self.trUtf8("UI Previewer"), self.__startUIPreviewer) self.__menu.addAction(UI.PixmapCache.getIcon("trPreviewer.png"), self.trUtf8("Translations Previewer"), self.__startTRPreviewer) self.__menu.addAction(UI.PixmapCache.getIcon("unittest.png"), self.trUtf8("Unittest"), self.__startUnittest) self.__menu.addAction(UI.PixmapCache.getIcon("ericWeb.png"), self.trUtf8("eric4 Web Browser"), self.__startHelpViewer) self.__menu.addSeparator() self.__menu.addAction(UI.PixmapCache.getIcon("diffFiles.png"), self.trUtf8("Compare Files"), self.__startDiff) self.__menu.addAction(UI.PixmapCache.getIcon("compareFiles.png"), self.trUtf8("Compare Files side by side"), self.__startCompare) self.__menu.addSeparator() self.__menu.addAction(UI.PixmapCache.getIcon("sqlBrowser.png"), self.trUtf8("SQL Browser"), self.__startSqlBrowser) self.__menu.addSeparator() self.__menu.addAction(UI.PixmapCache.getIcon("iconEditor.png"), self.trUtf8("Icon Editor"), self.__startIconEditor) self.__menu.addSeparator() self.__menu.addAction(UI.PixmapCache.getIcon("pluginInstall.png"), self.trUtf8("Install Plugin"), self.__startPluginInstall) self.__menu.addAction(UI.PixmapCache.getIcon("pluginUninstall.png"), self.trUtf8("Uninstall Plugin"), self.__startPluginUninstall) self.__menu.addAction(UI.PixmapCache.getIcon("pluginRepository.png"), self.trUtf8("Plugin Repository"), self.__startPluginRepository) self.__menu.addSeparator() self.__menu.addAction(UI.PixmapCache.getIcon("configure.png"), self.trUtf8('Preferences'), self.__startPreferences) self.__menu.addAction(UI.PixmapCache.getIcon("erict.png"), self.trUtf8("eric4 IDE"), self.__startEric) self.__menu.addAction(UI.PixmapCache.getIcon("editor.png"), self.trUtf8("eric4 Mini Editor"), self.__startMiniEditor) self.__menu.addSeparator() self.__menu.addAction(UI.PixmapCache.getIcon("configure.png"), self.trUtf8('Preferences (tray starter)'), self.__showPreferences) self.__menu.addSeparator() # recent files self.menuRecentFilesAct = self.__menu.addMenu(self.recentFilesMenu) # recent multi projects self.menuRecentMultiProjectsAct = \ self.__menu.addMenu(self.recentMultiProjectsMenu) # recent projects self.menuRecentProjectsAct = self.__menu.addMenu(self.recentProjectsMenu) self.__menu.addSeparator() self.__menu.addAction(UI.PixmapCache.getIcon("exit.png"), self.trUtf8('Quit'), qApp.quit) def __loadRecentProjects(self): """ Private method to load the recently opened project filenames. """ rp = self.rsettings.value(Globals.recentNameProject) if rp.isValid(): for f in rp.toStringList(): if QFileInfo(f).exists(): self.recentProjects.append(f) def __loadRecentMultiProjects(self): """ Private method to load the recently opened multi project filenames. """ rmp = self.rsettings.value(Globals.recentNameMultiProject) if rmp.isValid(): for f in rmp.toStringList(): if QFileInfo(f).exists(): self.recentMultiProjects.append(f) def __loadRecentFiles(self): """ Private method to load the recently opened filenames. """ rf = self.rsettings.value(Globals.recentNameFiles) if rf.isValid(): for f in rf.toStringList(): if QFileInfo(f).exists(): self.recentFiles.append(f) def __activated(self, reason): """ Private slot to handle the activated signal. @param reason reason code of the signal (QSystemTrayIcon.ActivationReason) """ if reason == QSystemTrayIcon.Context or \ reason == QSystemTrayIcon.MiddleClick: self.__showContextMenu() elif reason == QSystemTrayIcon.DoubleClick: self.__startEric() def __showContextMenu(self): """ Private slot to show the context menu. """ self.menuRecentProjectsAct.setEnabled(len(self.recentProjects) > 0) self.menuRecentMultiProjectsAct.setEnabled(len(self.recentMultiProjects) > 0) self.menuRecentFilesAct.setEnabled(len(self.recentFiles) > 0) pos = QCursor.pos() x = pos.x() - self.__menu.sizeHint().width() pos.setX(x > 0 and x or 0) y = pos.y() - self.__menu.sizeHint().height() pos.setY(y > 0 and y or 0) self.__menu.popup(pos) def __startProc(self, applName, *applArgs): """ Private method to start an eric4 application. @param applName name of the eric4 application script (string) @param *applArgs variable list of application arguments """ proc = QProcess() applPath = os.path.join(getConfig("ericDir"), applName) args = QStringList() args.append(applPath) for arg in applArgs: args.append(unicode(arg)) if not os.path.isfile(applPath) or not proc.startDetached(sys.executable, args): QMessageBox.critical(self, self.trUtf8('Process Generation Error'), self.trUtf8( '

    Could not start the process.
    ' 'Ensure that it is available as %1.

    ' ).arg(applPath), self.trUtf8('OK')) def __startMiniEditor(self): """ Private slot to start the eric4 Mini Editor. """ self.__startProc("eric4_editor.py", "--config=%s" % Utilities.getConfigDir()) def __startEric(self): """ Private slot to start the eric4 IDE. """ self.__startProc("eric4.py", "--config=%s" % Utilities.getConfigDir()) def __startPreferences(self): """ Private slot to start the eric4 configuration dialog. """ self.__startProc("eric4_configure.py", "--config=%s" % Utilities.getConfigDir()) def __startPluginInstall(self): """ Private slot to start the eric4 plugin installation dialog. """ self.__startProc("eric4_plugininstall.py", "--config=%s" % Utilities.getConfigDir()) def __startPluginUninstall(self): """ Private slot to start the eric4 plugin uninstallation dialog. """ self.__startProc("eric4_pluginuninstall.py", "--config=%s" % Utilities.getConfigDir()) def __startPluginRepository(self): """ Private slot to start the eric4 plugin repository dialog. """ self.__startProc("eric4_pluginrepository.py", "--config=%s" % Utilities.getConfigDir()) def __startHelpViewer(self): """ Private slot to start the eric4 web browser. """ self.__startProc("eric4_webbrowser.py", "--config=%s" % Utilities.getConfigDir()) def __startUIPreviewer(self): """ Private slot to start the eric4 UI previewer. """ self.__startProc("eric4_uipreviewer.py", "--config=%s" % Utilities.getConfigDir()) def __startTRPreviewer(self): """ Private slot to start the eric4 translations previewer. """ self.__startProc("eric4_trpreviewer.py", "--config=%s" % Utilities.getConfigDir()) def __startUnittest(self): """ Private slot to start the eric4 unittest dialog. """ self.__startProc("eric4_unittest.py", "--config=%s" % Utilities.getConfigDir()) def __startDiff(self): """ Private slot to start the eric4 diff dialog. """ self.__startProc("eric4_diff.py", "--config=%s" % Utilities.getConfigDir()) def __startCompare(self): """ Private slot to start the eric4 compare dialog. """ self.__startProc("eric4_compare.py", "--config=%s" % Utilities.getConfigDir()) def __startSqlBrowser(self): """ Private slot to start the eric4 sql browser dialog. """ self.__startProc("eric4_sqlbrowser.py", "--config=%s" % Utilities.getConfigDir()) def __startIconEditor(self): """ Private slot to start the eric4 icon editor dialog. """ self.__startProc("eric4_iconeditor.py", "--config=%s" % Utilities.getConfigDir()) def __startQRegExp(self): """ Private slot to start the eric4 QRegExp editor dialog. """ self.__startProc("eric4_qregexp.py", "--config=%s" % Utilities.getConfigDir()) def __startPyRe(self): """ Private slot to start the eric4 Python re editor dialog. """ self.__startProc("eric4_re.py", "--config=%s" % Utilities.getConfigDir()) def __showRecentProjectsMenu(self): """ Private method to set up the recent projects menu. """ self.recentProjects.clear() self.rsettings.sync() self.__loadRecentProjects() self.recentProjectsMenu.clear() idx = 1 for rp in self.recentProjects: if idx < 10: formatStr = '&%d. %s' else: formatStr = '%d. %s' act = self.recentProjectsMenu.addAction(\ formatStr % (idx, Utilities.compactPath(unicode(rp), self.maxMenuFilePathLen))) act.setData(QVariant(rp)) idx += 1 def __showRecentMultiProjectsMenu(self): """ Private method to set up the recent multi projects menu. """ self.recentMultiProjects.clear() self.rsettings.sync() self.__loadRecentMultiProjects() self.recentMultiProjectsMenu.clear() idx = 1 for rmp in self.recentMultiProjects: if idx < 10: formatStr = '&%d. %s' else: formatStr = '%d. %s' act = self.recentMultiProjectsMenu.addAction(\ formatStr % (idx, Utilities.compactPath(unicode(rmp), self.maxMenuFilePathLen))) act.setData(QVariant(rmp)) idx += 1 def __showRecentFilesMenu(self): """ Private method to set up the recent files menu. """ self.recentFiles.clear() self.rsettings.sync() self.__loadRecentFiles() self.recentFilesMenu.clear() idx = 1 for rf in self.recentFiles: if idx < 10: formatStr = '&%d. %s' else: formatStr = '%d. %s' act = self.recentFilesMenu.addAction(\ formatStr % (idx, Utilities.compactPath(unicode(rf), self.maxMenuFilePathLen))) act.setData(QVariant(rf)) idx += 1 def __openRecent(self, act): """ Private method to open a project or file from the list of rencently opened projects or files. @param act reference to the action that triggered (QAction) """ filename = unicode(act.data().toString()) if filename: self.__startProc("eric4.py", filename) def __showPreferences(self): """ Private slot to set the preferences. """ from Preferences.ConfigurationDialog import ConfigurationDialog dlg = ConfigurationDialog(None, 'Configuration', True, fromEric = True, displayMode = ConfigurationDialog.TrayStarterMode) self.connect(dlg, SIGNAL('preferencesChanged'), self.preferencesChanged) dlg.show() dlg.showConfigurationPageByName("trayStarterPage") dlg.exec_() QApplication.processEvents() if dlg.result() == QDialog.Accepted: dlg.setPreferences() Preferences.syncPreferences() self.preferencesChanged() def preferencesChanged(self): """ Public slot to handle a change of preferences. """ self.setIcon( UI.PixmapCache.getIcon( unicode(Preferences.getTrayStarter("TrayStarterIcon")))) def __about(self): """ Private slot to handle the About dialog. """ from Plugins.AboutPlugin.AboutDialog import AboutDialog dlg = AboutDialog() dlg.exec_() eric4-4.5.18/eric/PaxHeaders.8617/README-eric4-doc.txt0000644000175000001440000000007410630243064017761 xustar000000000000000030 atime=1389081085.438724352 30 ctime=1389081086.311724332 eric4-4.5.18/eric/README-eric4-doc.txt0000644000175000001440000002000110630243064017477 0ustar00detlevusers00000000000000README for the eric4-doc documentation generator eric4-doc is the documentation generator of the eric4 IDE. Python source code documentation may be included as ordinary Python doc-strings or as documentation comments. For Quixote Template files (PTL) only documentation comments are available due to the inner workings of Quixote. Documentation comments start with the string ###, followed by the contents and ended by ###. Every line of the documentation comments contents must start with a # (see example below). For Ruby files, the documentation string must be started with "=begin edoc" and must be ended with "=end". The documentation string for classes, modules and functions/methods must follow their defininition. Documentation for packages (i.e. directories) must be in a file called __init__.py or __init__.rb. If a package directory doesn't contain a file like these, documentation for files in this directory is suppressed. The documentation consist of two parts. The first part is the description of the module, class, function or method. The second part, separated from the first by a blank line, consists of one or more tags. These are described below. eric4-doc produces HTML files from the documentation found within the source files scaned. It understands the following commandline parameters next to others. -o directory Generate files in the named directory. -R, -r Perform a recursive search for Python files. -x directory Specify a directory basename to be excluded. This option may be repeated multiple times. -i Don't generate index files. Just type "eric4-doc" to get some usage information. Description ----------- The descriptions are HTML fragments and may contain most standard HTML. The description text is included in the output wrapped in P tags, but unchanged otherwise. Paragraphs have to be separated by a blank line. In order to generate a blank line in the output enter a line that contains a single dot (.). Reserved HTML entities (<, > and &) and the at-sign (@) at the beginning of a line, if that line doesn't contain a tag (see below), must be properly escaped. "<" should be written as "<", ">" as ">", "&" as "&" and "@" should be escaped as "@@". The documentation string or documentation comment may contain block tags and inline tags. Inline tags are denoted by curly braces and can be placed anywhere in the main description or in the description part of block tags. Block tags can only be placed in the tag section that follows the main description. Block tags are indicated by an at-sign (@) at the beginning of the line. The text before the first tag is the description of a module, class, method or function. Python Docstring: """ This is sentence one, which gets included as a short description. All additional sentences are included into the full description. @param param1 first parameter @exception ValueError list entry wasn't found @return flag indicating success """ Python/Quixote Documentation comment: ### # This is line one, which gets included as a short description. # All additional lines are included into the full description. # # @param param1 first parameter # @exception ValueError list entry wasn't found # @return flag indicating success ### Ruby Docstring: =begin edoc This is line one, which gets included as a short description. All additional lines are included into the full description. @param param1 first parameter @exception ValueError list entry wasn't found @return flag indicating success =end Block Tags ---------- The block tags recogized by eric4-doc are: @@ This isn't really a tag. This is used to escape an at sign at the beginning of a line. Everything after the first @ is copied verbatim to the output. @author author This tag is used to name the author of the code. For example: @author Detlev Offenbach @deprecated description This tag is used to mark a function or method as deprecated. It is always followed by one or more lines of descriptive text. @event eventname description This tag is used to describe the events (PyQt) a class may emit. It is always followed by the event name and one or more lines of descriptive text. For example: @event closeEvent Emitted when an editor window is closed. @exception exception description These tags are used to describe the exceptions a function or method may raise. It is always followed by the exception name and one or more lines of descriptive text. For example: @exception ValueError The searched value is not contained in the list. @keyparam name description This tag is like the @param tag, but should be used for parameters, that should always be given as keyword parameters. It is always followed by the argument name and one or more lines of descriptive text. For example: @keyparam extension Optional extension of the source file. @param name description This tag is used to describe a function or method argument. It is always followed by the argument name and one or more lines of descriptive text. For example: @param filename Name of the source file. @raise exception description This tag is an alias for the @exception tag. @return description This tag is used to describe a functions or methods return value. It can include one or more lines of descriptive text. For example: @return list of description strings @see reference This tag is used to include a reference in the documentation. It comes in three different forms. @see "string" Adds a text entry of string. No link is generated. eric4-doc distinguishes this form from the others by looking for a double-quote (") as the first character. For example: @see "eric4-doc readme file" @see label Adds a link as defined by URL#value. eric4-doc distinguishes this form from the others by looking for a less-than symbol (<) as the first character. For example: @see = 2.5.1 - enhanced the autocompletion of templates to observe the language of the current file Version 4.5-snapshot-20101029: - bug fixes - added action to copy the editor path to the clipboard to the tab context menuto - added code to adjust the cursor flash time of the editor to the global settings - added code to the Qt part of KQFileDialog to cope with Linux distributors usage of KDE wrapper dialogs for the Qt file dialogs - added a check to the find and replace dialog to make sure, that no external changes were done between the find run and the replace run - added an option to configure the icon of the tray starter application - update Pygments to version 1.3.1 Version 4.5-snapshot-20100523: - bug fixes - added code to use the PYTHONPATH environment setting in the debuggers - added code to indicate directories and files being symbolic links - added code to save the editor zoom factor in the session file - added code to update the file browser window (mostly) automatically - added code to update the Others tab of the project browser (mostly) automatically - added a menu to the highlighting styles config page to change individual aspects of a font only - added code to show the keyboard shortcut to the tooltip of an action - changed the Find in Files dialog to remember the history of the search string, replace string and the search directory - added code to enhance the proxy configuration and removed the usage of QHttp Version 4.4.0: released as version 4.4.0 - upgraded chardet to version 2.0.1 - added a dialog to edit open search engine data Version 4.4-snapshot-20091129: - bug fixes Version 4.4-snapshot-20091025: - bug fixes - fixed forgotten disabling of favicons for private browsing mode - improved the eric4 web browser with respect to privacy - updated Pygments to version 1.1 - added support for PySide - added configuration options to always break on exceptions and to suppress the client exit dialog for a clean exit - added code to save passwords in encoded form in the settings file - added a password manager to save and restore passwords used to login to web services via the authentication dialog or login forms - added AdBlock support to the web browser Version 4.4-snapshot-20090913: - bug fixes - added a little icon editor tool - added an option to the find file dialog to open the first hit automatically - added option to toggle breakpoints from off to permannet to temporary to off (patch provided by Michele Petrazzo) - removed Qt3 support from eric4 - updated the QColorDialog wizard for Qt 4.5 - made some font attributes configurable for Terminal and Shell - added menu entries to copy the file or directory name to the clipboard to the various browsers - added a little context menu to the find files dialog - updated coverage.py to version 3.0.1 Version 4.4-snapshot-20090821: - bug fixes - added capability to send a bug email, if an error log file is detected upon startup of eric4 - added capability to use the system email client for sending reports - added an improved history system to the eric web browser - added a few actions to the eric web browser - added keywords to the eric web browser search engines - added a separate configuration page for the eric web browser - added a nice start page to the eric web browser - added an embedded search dialog to the eric web browser - removed all separate search and search/replace dialogs - added the "selection only" option to the embedded search and replace dialogs Version 4.4-snapshot-20090726: - bug fixes - added the SQL Browser tool to inspect databases - added an improved bookmark system to the help viewer - added some additional actions to improve the help viewer Version 4.4-snapshot-20090627: - bug fixes - added support for opensearch search engines to the help viewer - added a few zoom related actions to the help viewer - added config option for printing backgrounds to the help viewer Version 4.4-snapshot-20090523: - bug fixes - added option to suppress debuggee's stdout and stderr output for the shell window - added option to sort the file contents by occurrence in file browsers - added option to not show the log-viewer automatically upon new output - added option to enable web plugins for the help viewer - added private browsing to the help viewer - added navigation menus to the back and forward buttons of the help viewer - added option to have a close button on each tab - added option to request download filename from user - added a web search entry to the help viewer - added a full screen mode to the help viewer - added an action to the help viewer to clear private data - added support for the new QScintilla lexer properties - added a network monitor dialog to the help viewer - added a disk cache to the help viewer - added an action to show the page source in an editor to the help viewer - added a dialog to configure the accepted languages for web pages to the help viewer - added cookie handling to the help viewer - changed to latest coverage.py (v3.0b3) Version 4.4-snapshot-20090419: - bug fixes - added a thread list viewer to the debug viewer - added support for forking to the Python debuggers Python debuggers - added code for handling infinite recursions to the - added code to make it compatible with PyQt 4.5.0 or newer - added Italian translations contributed by Gianluca - added capability to open the help window with a search word - added configuration option to disable spell checking - added Python 3 compatibility code to the Pythe re wizard - added code to check, if a project needs to be reread after an update from the repository (e.g. if files have been added or deleted) - removed the Python cycles finder because that is not needed anymore - changed the find in files dialog to show the current file - added a navigation menu to the tabview viewmanager - added an auto update feature to the VCS status monitor (needs to be activated via the configuration dialog) - added some improvements to the find/replace in files dialog Version 4.4-snapshot-20090330: - bug fixes - added a Python3 compatible debugger and a respective project type - added a "wrap around" option to the embedded search and replace dialogs - changed code so that shell follows the selected stack frame of the local variables viewer - added an option to start the debugger in a console window to the various start dialogs - made shell to be used by the terminal configurable for non-win systems - added support for QtHelp files generation to eric4-doc and the IDE - added support for "qthelp" URLs to the eric4 help viewer - added widgets to show a table of contents, a search window and an index of the eric4 QtHelp database and added functions to manage this database - added the --debug and --config=configDir commandline options - changed to latest coverage.py (v3.0b1) - added option to configure the comment position (column 0 or first non-whitespace) Version 4.3.0: released as version 4.3.0 Version 4.3-snapshot-20090201: - bug fixes Version 4.3-snapshot-20090118: - bug fixes - added the capability to associate an alternative (Pygments) lexer with a filename pattern - added the capability to have project specific lexer associations - added the capability to have project type specific lexer associations - added a auto-collapsing feature to the sidebars Version 4.3-snapshot-20090111: - bug fixes - changed PyCoverage to use coverage.py v2.85 - added a "dedent def" to the Python typing completer Version 4.3-snapshot-20081227: - bug fixes - introduced project specific word and exclude lists (for spell checking) - added action to editor's context menu to remove a word from the dictionary (actually it is added to the personal/project exclusion list) - added a new window layout called "Sidebars", that gives more space to the editors by having retractable sidebars - enhanced template auto completion by showing a selection, if the template name is not unique - added support for icons in auto completion lists Version 4.3-snapshot-20081208: - bug fixes - made the email server port configurable - added keyboard navigation to listview viewmanager - added spell checking functionality (pyenchant needs to be installed) - enhanced the Python typing completer to cover more cases Version 4.3-snapshot-20081130: - bug fixes - added a lexer type that guesses the style based on the current text (default for unknown source types) - added context menu entry to select an alternative (Pygments) lexer - updated pygments to version 1.0 - added capability to auto complete using templates (press Tab after entering a valid template name) Version 4.3-snapshot-20081122: - bug fixes - added more button types to the KQMessageBox KDE wrapper - added capability to configure exceptions to be ignored and add to them at run-time, when an exception occurs - added capability to export and import the eric4 configuration - added capability to define keyboard shortcuts for plug-ins - changed CompareDialog to be suitable as an external diff viewer for svn - added the capability to export and import syntax highlighting styles (Configuration dialog->Highlighters->Styles page) - added a configuration dialog to the help viewer (webkit based) - extended the shortcuts configuration dialog - added capability to implement custom lexers as plug-ins (s. Django plug-in) (This needs a patch to the latest QScintilla release, s. qscintilla.cpp.diff) Version 4.3-snapshot-20081019: - bug fixes - added Subversion changelist support - extended editor to show separate margins for bookmarks, breakpoints and other indicators - added keyboard shortcut to toggle between current and previous current tab Version 4.3-snapshot-20081005: - bug fixes - added a dialog to replace in files (Ctrl+Shift+R) - reenabled the support for KDE dialogs - added editor context menu entry to toggle the typing aids support - added shortcut to the configuration dialog to several eric4 components - extended the help facility to support remote documentation (starting with http:// or https://) - added display of the eol string used by the editor and improved eol handling - made eol and encoding user selectable - made the usage of the universal character encoding detector configurable Version 4.3-snapshot-20080920: - bug fixes - changed license to GPL v3 - added support for TLS mode to the Email dialog - added support for the new QScintilla Lexers (Fortran, Fortran77, Pascal, PostScript, XML, YAML) - added options to change the margins colors - added Drag & Drop to reorder editor tabs, to relocate them from one view to another and to clone them - added support for wheel events to the various tab bars - made the translations handling code more flexible with respect to the naming of translation files - added embedded Find and Find&Replace dialogs - unified the log viewer tabs into one log view with configurable color for the stderr text - added restart functionality needed by some plug-ins (plug-ins must have "needsRestart = True" in their header) - added capability to prepopulate the plug-in installation dialog from the plug-in repository dialog - added the universal character encoding detector from http://chardet.feedparser.org to improve the encoding guessing - added a simple terminal like window - added capability to select files based on a file name pattern to the find in files dialog - improved IPv6 support - added buttons to the highlighters styles page to set styles to the default values - added a new window layout called "Toolboxes", that gives more space to the editors Version 4.2.0: released as version 4.2.0 Version 4.2-snapshot-20080802: - bug fixes Version 4.2-snapshot-20080726: - bug fixes - reorganized the configuration dialog to use a QScrollArea and combined some (split) settings onto a big scrolling page - extended the templates system to support a few predefined variables (thanks to Dan Bullok) Version 4.2-snapshot-20080719: - bug fixes - updated Turkish translations from Serdar Koçdaş - updated Spanish translations from Jaime Seuma - updated Czech translations from Zdenek Böhm - added API file for Ruby - added Ruby API file for eric4 Ruby files - enhanced the API file generation tool and dialog - updated the plug-in document Version 4.2-snapshot-20080706: - bug fixes - changed subversion relocate function to perform a relocation inside a repository - added an indication of the current editor's language to the status bar - moved all supporting project management files (e.g. tasks file) to a management sub-directory - changed the auto-completion and calltips hook support Note: the latest rope plug-in snapshot is required - updated Turkish translations from Serdar Koçdaş - updated Spanish translations from Jaime Seuma Version 4.2-snapshot-20080628: - bug fixes - updated French translations from Julien Vienne - updated Spanish translations from Jaime Seuma - added Turkish translations from Serdar Koçdaş - added a double click action and a reload button to the shell history dialog - made improvements to the Plug-in Info dialog - added capability to save the folding state of a file in the session file - added capability to save the open multi project and the open project in the global session file - added a Ctrl-Click action to the editor to show the info related to a syntax error - added an action to send a feature request using the email dialog - separated QScintilla specific auto-completion and calltips configuration from general configuration - moved configuration of the VCS indicator colours to the VCS configuration page - added the --noopen command line parameter to override the OpenOnStartup configuration setting (mostly used for eric4 development) Version 4.2-snapshot-20080615: - bug fixes - compatibility fix for Ubuntu and Mandriva - added the relocate action to the vcsSubversion plug-in - added an action to insert a new line below the current one (Shift+Return) - added a QWebKit based help viewer (available if Qt 4.4 is installed) - made some network related aspects configurable - added storage key PROJECTTYPESPECIFICDATA for project type specific data (may be used by project type plug-ins) - made Shell history more comfortable by -- selecting from history via a dialog -- list the history in a dialog with capabilities to --- delete entries --- copy entries to the current editor --- execute entries in the shell - made the size grip of the main window configurable (s. Interface (Part 1)) Version 4.2-snapshot-20080525: - bug fixes - added print preview capability (available if Qt 4.4 is installed) - added new default icon set based on the Oxygen icons - added some more icons Version 4.2-snapshot-20080519: - bug fixes - compatibility fix for Qt 4.4 Version 4.2-snapshot-20080503: - bug fixes - added capability to the API generator to extract global variables and class variables - added double click action to the tabview viewmanager. Double clicking the space right of the last tab opens a new editor. - added indicator for the current editors encoding to the status bar - changed compare and side-by-side compare dialogs to have the file name of the current editor as the first file - added hook support for plug-ins providing calltips Version 4.2-snapshot-20080406: - bug fixes - added double click support for attributes and globals - reorganized the configuration dialog some more - added various start-up configuration options (application page) - added functionality to mark all occurrences of a searched text (s.a. configuration dialog editor->searching page) - enhanced Unicode support (added utf-16 and utf-32) - a few changes to the PyKDE4 support code to work around a PyKDE4 problem with the Oxygen style (this workaround allows eric4 to use the Oxygen style, when KDE4 dialogs are disabled) - added hook support for plug-ins providing auto-completion - added action and menu entries to show calltips Version 4.2-snapshot-20080319: - bug fixes - added support for the coding line to the Python and Ruby class browsers - added support for module global variables and class (global) variables Version 4.2-snapshot-20080318: - bug fixes - added an LED to signal the project's VCS status to the project viewer - reorganized the configuration dialog - added a button to configure the eol fill setting for all styles of a lexer - added capability to save UML like graphics as SVG - added capability to display SVG files - made some improvements to the code metrics dialog - enhanced the printing support - added lexer support for TCL/Tk files - added the PyKDE4 compatibility code - added project support for KDE 4 projects Version 4.2-snapshot-20080302: - bug fixes - added hook support to ProjectFormsBrowser, ProjectResourcesBrowser and ProjectTranslationsBrowser - added support to provide API files by plug-ins - moved Django support to an external plug-in - moved TurboGears support to an external plug-in - moved wxPython support to an external plug-in Version 4.2-snapshot-20080224: - bug fixes - changed settings from native format to ini format - made number of recently opened projects and files configurable - added multiproject support - changed formats of some XML files - extended the workspace view manager - added a viewmanager using the new QMdiArea - added HTTPS support to plug-in repository dialog (for Qt 4.3 and newer) - added actions to the graphics views to align the shapes Version 4.2-snapshot-20080210: - bug fixes - added configuration option to select the text shown in the tabview viewmanager tabs - changed project browsers to override the default double click action - added a toolbar manager and a toolbar configuration dialog - cleaned up the default toolbars - changed watch point to watch expression to make it's use clearer - added additional move actions to TabWidget - cleaned up the API of E4Action and replace E4ActionGroup by the createActionGroup module function Version 4.1.0: released as version 4.1.0 - added API files for wxPython - added API files for Zope 2 and Zope 3 Version 4.1-snapshot-20080118: - bug fixes - added and changed a few methods of the VCS interface modules, which were needed by the rope refactoring plug-in - added some methods needed for the rope plug-in Version 4.1-snapshot-20080107: - bug fixes - changed the plug-in repository dialog to download multiple files - added a button to the plug-in repository dialog to close it and open the plug-in installation dialog - changed the plug-in repository dialog to indicate, if a plug-in needs a fresh download - changed the plug-in repository dialog to indicate the status of a plug-in as given in the repository file - added Spanish translations from Daniel Malisani (still incomplete) - added API files for Django and TurboGears Version 4.1-snapshot-20071224: - bug fixes - made number of Subversion commit messages to remember configurable - added buttons to edit the Subversion config and servers file to the Subversion configuration page - changed the plug-in installation dialog to be able to install multiple plug-in archives - added menu entry and code to create a snapshot plug-in archive - added a simplified editor dialog and an associated main script - created a main script to start the plug-in repository dialog Version 4.1-snapshot-20071216: - bug fixes - added a Repository Browser to the PySvn VCS plug-in - added a Repository Browser to the Subversion VCS plug-in - added a Log Browser to the PySvn VCS plug-in - added a Log Browser to the Subversion VCS plug-in - made the visible project browsers configurable - added project type for wxPython - added functionality to strip trailing white-space upon saving to the editor - removed the scripting stuff because the plug-in system is much more capable - added a stop function to the find in files dialog - added a search text entry to the keyboard shortcuts dialog Version 4.1-snapshot-20071118: - bug fixes - added version info to the plug-in repository dialog - refactored PyLint plug-in as a separate plug-in distribution package - refactored CVS plug-in as a separate plug-in distribution package Version 4.1-snapshot-20071111: - bug fixes - added an action to stop the running script to the "Start" menu/toolbar - added a config option for the plug-ins download directory - added dialog to display the plug-in repository and download plug-ins - refactored CxFreeze plug-in as a separate plug-in distribution package Version 4.1-snapshot-20071021: - bug fixes - added a dialog to show the eric4 versions available for download - added the project types "Django" and "TurboGears" - added a button to the Start ... dialog to clear the history lists - added a configuration option (Project page) to enable a recursive search for new files - added configuration option (Plugin Manager page) to disable loading of 3rd party plug-ins - added code to the imports diagram to cope with relative imports as of Python 2.5 and to show external imports - added code to the application diagram to cope with relative imports as of Python 2.5 Version 4.1-snapshot-20070924: - bug fixes - added the menu entry "New package..." to the project sources browser context menus - removed configuration option to specify the directory of the Qt4 installation (it is now required, that the Qt bin directory is in the PATH) - changed code of Python debug client to better intercept output - added a source code exporter to write the colourised source as HTML, PDF, RTF and LaTeX Version 4.1-snapshot-20070813: - bug fixes - compatibility fixes for Debian - added 'load', 'save' and 'next match' actions to the regexp wizards - made the VCS clients update their status after a commit, update and revert - added '-z' to the installer to inhibit compilation of the python files - added documentation of the new plug-in system Version 4.1-snapshot-20070721: - bug fixes - changed VCS interfaces to plug-ins - changed wizards to plug-ins - added methods to register/unregister a toolbar with the UserInterface. This must be used by plug-ins, which create their own toolbar. - added code to allow a plug-in to clean up before it gets uninstalled Version 4.1-snapshot-20070708: - bug fixes - made plug-ins deactivateable and added a context menu to the plug-ins info dialog - added code to remember the deactivated plug-ins - added dialog to install new plug-ins - added dialog to uninstall plug-ins - added the methods registerPluginObject/unregisterPluginObject to KQApplication to allow Plug-ins to register their object. - added code to allow registered plug-ins, that have a getActions() method to have the shortcuts configured via the shortcuts configuration dialog - added code to allow active plug-ins to be configured via the configuration dialog - added the command line option --plug-in=pluginfile to eric4.py. This option can be used for plug-in development to specify a plug-in file to load (e.g. eric4 --plug-in=/my/plug-in/development/area/PluginTest.py). - added actions and code to create eric4 plug-in archive files - added the new project type "Eric4 Plugin" - added code to run/debug/... an eric4 plug-in from within eric4 by starting another eric4 process instead of the plug-in main script - removed the character tables dialog (will be provided as a plug-in by Jürgen Urner) - removed the Bicycle Repair Man code and converted it to a standalone plug-in - added option to configure, whether the project browsers should highlight the entry for the file of the current editor - added a field to enter a more descriptive text for a task - changed the way how files and directories can be added to a project in order to respect the project's file type associations Version 4.1-snapshot-20070622: - bug fixes - implemented a (basic) plug-in system to allow people to extend eric4 - converted view managers to plug-ins - converted the About functionality to a plug-in - converted the checkers to plug-ins - converted the packagers to plug-ins - converted the documentation tools to plug-ins Version 4.0.0: - first official release Version 4.0-snapshot-20070526: - bug fixes - made improvements to the typing completers - added more rules to the Ruby typing completer Version 4.0-snapshot-20070517: - bug fixes - added code for the final QScintilla2 calltips API - added a check to see, if eric4 has been configured. If not, the configuration dialog is started automatically. - added Python typing rules for try-except-finally blocks - updated PyLint support for 0.13.0 - moved VCS status monitor LED code from UserInterface to it's own class and gave it a context menu - added the '-p' switch to eric4-api to include private classes, methods and functions in the resulting API file Version 4.0-snapshot-20070506: - bug fixes Version 4.0-snapshot-20070505: - bug fixes - added CMake lexer support - added VHDL lexer support - made the help viewer keyboard shortcuts configurable - added support for the case insensitive variant of the C++ lexer - added some code to perform automatic insertions while typing (Ruby) - added config options for entering a prefix and/or a postfix for Qt tools (e.g. on Kubuntu it is "-qt4" to make "designer-qt4") Version 4.0-snapshot-20070411: - bug fixes - added Czech translations (thanks to Zdenek Böhm) - added some code to perform automatic insertions while typing (Python) - more win32 compatibility issues fixed Version 4.0-snapshot-20070402: - bug fixes - changed the shortcuts dialog to show icons of the actions - moved the dialog showing external tools used by eric4 to the preferences menu - changed the handling of the commit message dialogs to enhance their usability. - added a dialog to derive code for a forms implementation for Qt4 - enhanced win32 compatibility Version 4.0-snapshot-20070325: - bug fixes - updated to chartables 0.5.2 - extended the svn diff capabilities - extended the eric4-api and eric4-doc tools - added @see, @since and {@link} to eric4-doc - changed structure of debug server - extended the subversion status dialogs by an add and revert action - added a "Recreate project tasks" action to the taskviewer context menu - added D lexer support - added Povray lexer support - added file and directory completers to various dialogs - added a top level exception handler to log the exception info Version 4.0-snapshot-20070218: - bug fixes - changed graphics to use QGraphicsView - changed Pylint support for pylint >= 0.12.0 - changed the compare dialog to be more specific about changed lines - changed install script to patch pyXML in order to fix a bug there Version 4.0-snapshot-20070204: - bug fixes - added check for syntax errors when a project run/debug/... action is invoked. The number of faulty files will be displayed and the action aborted. - added an option to hide generated source of forms files (those starting with Ui_) - added an entry "Find in this directory" to the browser context menu - extended the compare dialog by movement buttons - changed the debugger to accept environment settings of the form 'var+=value' in order to amend an existing environment variable - added support for svn diff against HEAD and COMMITTED - added esc handlers to the email and template dialogs - changed dialogs to use QDialogButtonBox Version 4.0-snapshot-20070114: - bug fixes - added configuration option to enable/disable the usage of auto-completion fill-up characters - added support for the new QScintilla2 APIs interface Version 4.0-snapshot-20061230: - bug fixes - added configuration option to select the font used for the graphics displays - changed the logic of the editor search and replace dialogs - added even more compatibility changes for Subversion 1.4.0 - backed out the Qt4 workaround for Linux because it was causing trouble Version 4.0-snapshot-20061222: - bug fixes - reworked the Edit menu to make it a bit shorter - added capability to add existing translation files - added a close button to the tab view, which closes the current editor - added capability to save the help window size and position (and a configuration option to enable this) - added close tab and new tab buttons to the help viewer window - added more compatibility changes for Subversion 1.4.0 Version 4.0-snapshot-20061217: - bug fixes - added capability to exclude files and directories from translation - updated to chartables v. 0.5.0 - added actions to go to the next/previous task of an open editor - added a dialog to override some global settings on a per project basis - added the capability to resize the configuration dialog's contents via a splitter - added tabbed browsing to the help viewer - added configuration option to use just one help browser window - rearranged editor context menu and introduced an option to show a minimalistic context menu (for small screens) - extended help texts for the Python and Qt regexp wizard dialogs Version 4.0-snapshot-20061112: - bug fixes - more Qt 4.2.0 changes - added the character tables dialog from Jürgen Urner - added support for Qt style sheets - added an apply and reset action to the configuration dialog Version 4.0-snapshot-20061029: - bug fixes - added a configuration option for the default font of the editor - changed layout of the editors search and replace dialogs - added an eric4 tray starter application. It adds an icon to the systemtray, which gives a context menu to start eric4 with recently opened projects or files and to start the various tools included in eric4 Version 4.0-snapshot-20061022: - bug fixes - adaptation to Qt 4.2.0 (Qt 4.2.0 is a prerequisite) - completed Russian translation (thanks to Alexander Darovsky) Version 4.0-snapshot-20061014: - bug fixes - some Qt 4.2.0 compatibility fixes - added capability to reset the window layout via eric4-configure Version 4.0-snapshot-20061009: - many bug fixes - added a QFileIconProvider derived class to show more specific icons in the file dialog. - made code changes for latest QScintilla2 snapshot Version 4.0-snapshot-20061002: - many bug fixes - added capability to set several lexer styles (font and colours) simultaneously - added capability to clear the interpreter window on activation of a run, debug, ... action - added capability to not stop the debugger on the first executable line - all selections made in the run, debug, ... start dialog are saved across invocations of eric4 - added capability to restrict the network interfaces, the debug server listens on, and the hosts allowed to connect to the debug server Version 4.0-snapshot-20060923: - many bug fixes - added compatibility with Subversion 1.4.0 - added option to select the UI style (Preferences->Interface->Style) Version 4.0-snapshot-20060913: - first public snapshot of eric4 eric4-4.5.18/eric/PaxHeaders.8617/SqlBrowser0000644000175000001440000000013212262730776016553 xustar000000000000000030 mtime=1389081086.301724332 30 atime=1389081086.306724332 30 ctime=1389081086.315724332 eric4-4.5.18/eric/SqlBrowser/0000755000175000001440000000000012262730776016362 5ustar00detlevusers00000000000000eric4-4.5.18/eric/SqlBrowser/PaxHeaders.8617/SqlBrowserWidget.py0000644000175000001440000000013212261012651022431 xustar000000000000000030 mtime=1388582313.838100382 30 atime=1389081085.438724352 30 ctime=1389081086.311724332 eric4-4.5.18/eric/SqlBrowser/SqlBrowserWidget.py0000644000175000001440000002514112261012651022166 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing the SQL Browser widget. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from PyQt4.QtSql import QSqlDatabase, QSqlError, QSqlTableModel, QSqlQueryModel, QSqlQuery from KdeQt import KQMessageBox from SqlConnectionDialog import SqlConnectionDialog from Ui_SqlBrowserWidget import Ui_SqlBrowserWidget class SqlBrowserWidget(QWidget, Ui_SqlBrowserWidget): """ Class implementing the SQL Browser widget. @signal statusMessage(QString) emitted to show a status message """ cCount = 0 def __init__(self, parent = None): """ Constructor @param parent reference to the parent widget (QWidget) """ QWidget.__init__(self, parent) self.setupUi(self) self.table.addAction(self.insertRowAction) self.table.addAction(self.deleteRowAction) if QSqlDatabase.drivers().isEmpty(): KQMessageBox.information(None, self.trUtf8("No database drivers found"), self.trUtf8("""This tool requires at least one Qt database driver. """ """Please check the Qt documentation how to build the """ """Qt SQL plugins.""")) self.connect(self.connections, SIGNAL("tableActivated(QString)"), self.on_connections_tableActivated) self.connect(self.connections, SIGNAL("schemaRequested(QString)"), self.on_connections_schemaRequested) self.connect(self.connections, SIGNAL("cleared()"), self.on_connections_cleared) self.emit(SIGNAL("statusMessage(QString)"), self.trUtf8("Ready")) @pyqtSignature("") def on_clearButton_clicked(self): """ Private slot to clear the SQL entry widget. """ self.sqlEdit.clear() self.sqlEdit.setFocus() @pyqtSignature("") def on_executeButton_clicked(self): """ Private slot to execute the entered SQL query. """ self.executeQuery() self.sqlEdit.setFocus() @pyqtSignature("") def on_insertRowAction_triggered(self): """ Private slot handling the action to insert a new row. """ self.__insertRow() @pyqtSignature("") def on_deleteRowAction_triggered(self): """ Private slot handling the action to delete a row. """ self.__deleteRow() @pyqtSignature("QString") def on_connections_tableActivated(self, table): """ Private slot to show the contents of a table. @param table name of the table for which to show the contents (QString) """ self.showTable(table) @pyqtSignature("QString") def on_connections_schemaRequested(self, table): """ Private slot to show the schema of a table. @param table name of the table for which to show the schema (QString) """ self.showSchema(table) @pyqtSignature("") def on_connections_cleared(self): """ Private slot to clear the table. """ model = QStandardItemModel(self.table) self.table.setModel(model) self.table.setEditTriggers(QAbstractItemView.NoEditTriggers) self.updateActions() def addConnection(self, driver, dbName, user, password, host, port): """ Public method to add a database connection. @param driver name of the Qt database driver (QString) @param dbName name of the database (QString) @param user user name (QString) @param password password (QString) @param host host name (QString) @param port port number (integer) """ err = QSqlError() self.__class__.cCount += 1 db = QSqlDatabase.addDatabase(driver.toUpper(), QString("Browser%1").arg(self.__class__.cCount)) db.setDatabaseName(dbName) db.setHostName(host) db.setPort(port) if not db.open(user, password): err = db.lastError() db = QSqlDatabase() QSqlDatabase.removeDatabase(QString("Browser%1").arg(self.__class__.cCount)) self.connections.refresh() return err def addConnectionByDialog(self): """ Public slot to add a database connection via an input dialog. """ dlg = SqlConnectionDialog(self) if dlg.exec_() == QDialog.Accepted: driver, dbName, user, password, host, port = dlg.getData() err = self.addConnection(driver, dbName, user, password, host, port) if err.type() != QSqlError.NoError: KQMessageBox.warning(self, self.trUtf8("Unable to open database"), self.trUtf8("""An error occurred while opening the connection.""")) def showTable(self, table): """ Public slot to show the contents of a table. @param table name of the table to be shown (string or QString) """ model = QSqlTableModel(self.table, self.connections.currentDatabase()) model.setEditStrategy(QSqlTableModel.OnRowChange) model.setTable(table) model.select() if model.lastError().type() != QSqlError.NoError: self.emit(SIGNAL("statusMessage(QString)"), model.lastError().text()) self.table.setModel(model) self.table.setEditTriggers( QAbstractItemView.DoubleClicked | QAbstractItemView.EditKeyPressed) self.table.resizeColumnsToContents() self.connect(self.table.selectionModel(), SIGNAL("currentRowChanged(QModelIndex, QModelIndex)"), self.updateActions) self.updateActions() def showSchema(self, table): """ Public slot to show the schema of a table. @param table name of the table to be shown (string or QString) """ rec = self.connections.currentDatabase().record(table) model = QStandardItemModel(self.table) model.insertRows(0, rec.count()) model.insertColumns(0, 7) model.setHeaderData(0, Qt.Horizontal, QVariant("Fieldname")) model.setHeaderData(1, Qt.Horizontal, QVariant("Type")) model.setHeaderData(2, Qt.Horizontal, QVariant("Length")) model.setHeaderData(3, Qt.Horizontal, QVariant("Precision")) model.setHeaderData(4, Qt.Horizontal, QVariant("Required")) model.setHeaderData(5, Qt.Horizontal, QVariant("Auto Value")) model.setHeaderData(6, Qt.Horizontal, QVariant("Default Value")) for i in range(rec.count()): fld = rec.field(i) model.setData(model.index(i, 0), QVariant(fld.name())) if fld.typeID() == -1: model.setData(model.index(i, 1), QVariant(QString(QVariant.typeToName(fld.type())))) else: model.setData(model.index(i, 1), QVariant(QString("%1 (%2)")\ .arg(QVariant.typeToName(fld.type()))\ .arg(fld.typeID()))) if fld.length() < 0: model.setData(model.index(i, 2), QVariant("?")) else: model.setData(model.index(i, 2), QVariant(fld.length())) if fld.precision() < 0: model.setData(model.index(i, 3), QVariant("?")) else: model.setData(model.index(i, 3), QVariant(fld.precision())) if fld.requiredStatus() == -1: model.setData(model.index(i, 4), QVariant("?")) else: model.setData(model.index(i, 4), QVariant(bool(fld.requiredStatus()))) model.setData(model.index(i, 5), QVariant(fld.isAutoValue())) model.setData(model.index(i, 6), QVariant(fld.defaultValue())) self.table.setModel(model) self.table.setEditTriggers(QAbstractItemView.NoEditTriggers) self.table.resizeColumnsToContents() self.updateActions() def updateActions(self): """ Public slot to update the actions. """ enableIns = isinstance(self.table.model(), QSqlTableModel) enableDel = enableIns & self.table.currentIndex().isValid() self.insertRowAction.setEnabled(enableIns) self.deleteRowAction.setEnabled(enableDel) def __insertRow(self): """ Privat slot to insert a row into the database table. """ model = self.table.model() if not isinstance(model, QSqlTableModel): return insertIndex = self.table.currentIndex() if insertIndex.row() == -1: row = 0 else: row = insertIndex.row() model.insertRow(row) insertIndex = model.index(row, 0) self.table.setCurrentIndex(insertIndex) self.table.edit(insertIndex) def __deleteRow(self): """ Privat slot to delete a row from the database table. """ model = self.table.model() if not isinstance(model, QSqlTableModel): return model.setEditStrategy(QSqlTableModel.OnManualSubmit) currentSelection = self.table.selectionModel().selectedIndexes() for selectedIndex in currentSelection: if selectedIndex.column() != 0: continue model.removeRow(selectedIndex.row()) model.submitAll() model.setEditStrategy(QSqlTableModel.OnRowChange) self.updateActions() def executeQuery(self): """ Public slot to execute the entered query. """ model = QSqlQueryModel(self.table) model.setQuery( QSqlQuery(self.sqlEdit.toPlainText(), self.connections.currentDatabase())) self.table.setModel(model) if model.lastError().type() != QSqlError.NoError: self.emit(SIGNAL("statusMessage(QString)"), model.lastError().text()) elif model.query().isSelect(): self.emit(SIGNAL("statusMessage(QString)"), self.trUtf8("Query OK.")) else: self.emit(SIGNAL("statusMessage(QString)"), self.trUtf8("Query OK, number of affected rows: %1")\ .arg(model.query().numRowsAffected())) self.table.resizeColumnsToContents() self.updateActions() eric4-4.5.18/eric/SqlBrowser/PaxHeaders.8617/SqlConnectionWidget.py0000644000175000001440000000013212261012651023105 xustar000000000000000030 mtime=1388582313.840100407 30 atime=1389081085.438724352 30 ctime=1389081086.311724332 eric4-4.5.18/eric/SqlBrowser/SqlConnectionWidget.py0000644000175000001440000001361512261012651022645 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a widget showing the SQL connections. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from PyQt4.QtSql import QSqlDatabase class SqlConnectionWidget(QWidget): """ Class implementing a widget showing the SQL connections. @signal tableActivated(QString) emitted after the entry for a table has been activated @signal schemaRequested(QString) emitted when the schema display is requested @signal cleared() emitted after the connection tree has been cleared """ def __init__(self, parent = None): """ Constructor @param parent reference to the parent widget (QWidget) """ QWidget.__init__(self, parent) layout = QVBoxLayout(self) layout.setMargin(0) self.__connectionTree = QTreeWidget(self) self.__connectionTree.setObjectName("connectionTree") self.__connectionTree.setHeaderLabels([self.trUtf8("Database")]) self.__connectionTree.header().setResizeMode(QHeaderView.Stretch) refreshAction = QAction(self.trUtf8("Refresh"), self.__connectionTree) self.__schemaAction = QAction(self.trUtf8("Show Schema"), self.__connectionTree) self.connect(refreshAction, SIGNAL("triggered()"), self.refresh) self.connect(self.__schemaAction, SIGNAL("triggered()"), self.showSchema) self.__connectionTree.addAction(refreshAction) self.__connectionTree.addAction(self.__schemaAction) self.__connectionTree.setContextMenuPolicy(Qt.ActionsContextMenu) layout.addWidget(self.__connectionTree) self.connect(self.__connectionTree, SIGNAL("itemActivated(QTreeWidgetItem*, int)"), self.__itemActivated) self.connect(self.__connectionTree, SIGNAL("currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)"), self.__currentItemChanged) self.__activeDb = QString() def refresh(self): """ Public slot to refresh the connection tree. """ self.__connectionTree.clear() self.emit(SIGNAL("cleared()")) connectionNames = QSqlDatabase.connectionNames() foundActiveDb = False for name in connectionNames: root = QTreeWidgetItem(self.__connectionTree) db = QSqlDatabase.database(name, False) root.setText(0, self.__dbCaption(db)) if name == self.__activeDb: foundActiveDb = True self.__setActive(root) if db.isOpen(): tables = db.tables() for table in tables: itm = QTreeWidgetItem(root) itm.setText(0, table) if not foundActiveDb and connectionNames: self.__activeDb = connectionNames[0] self.__setActive(self.__connectionTree.topLevelItem(0)) def showSchema(self): """ Public slot to show schema data of a database. """ cItm = self.__connectionTree.currentItem() if cItm is None or cItm.parent() is None: return self.__setActive(cItm.parent()) self.emit(SIGNAL("schemaRequested(QString)"), cItm.text(0)) def __itemActivated(self, itm, column): """ Private slot handling the activation of an item. @param itm reference to the item (QTreeWidgetItem) @param column column that was activated (integer) """ if itm is None: return if itm.parent() is None: self.__setActive(itm) else: self.__setActive(itm.parent()) self.emit(SIGNAL("tableActivated(QString)"), itm.text(0)) def __currentItemChanged(self, current, previous): """ Private slot handling a change of the current item. @param current reference to the new current item (QTreeWidgetItem) @param previous reference to the previous current item (QTreeWidgetItem) """ self.__schemaAction.setEnabled( current is not None and current.parent() is not None) def __dbCaption(self, db): """ Private method to assemble a string for the caption. @param db reference to the database object (QSqlDatabase) @return caption string (QString) """ nm = db.driverName() nm.append(":") if not db.userName().isEmpty(): nm.append(db.userName()) nm.append("@") nm.append(db.databaseName()) return nm def __setBold(self, itm, bold): """ Private slot to set the font to bold. @param itm reference to the item to be changed (QTreeWidgetItem) @param bold flag indicating bold (boolean) """ font = itm.font(0) font.setBold(bold) itm.setFont(0, font) def currentDatabase(self): """ Public method to get the current database. @return reference to the current database (QSqlDatabase) """ return QSqlDatabase.database(self.__activeDb) def __setActive(self, itm): """ Private slot to set an item to active. @param itm reference to the item to set as the active item (QTreeWidgetItem) """ for index in range(self.__connectionTree.topLevelItemCount()): if self.__connectionTree.topLevelItem(index).font(0).bold(): self.__setBold(self.__connectionTree.topLevelItem(index), False) if itm is None: return self.__setBold(itm, True) self.__activeDb = QSqlDatabase.connectionNames()[ self.__connectionTree.indexOfTopLevelItem(itm)] eric4-4.5.18/eric/SqlBrowser/PaxHeaders.8617/SqlBrowser.py0000644000175000001440000000013212261012651021265 xustar000000000000000030 mtime=1388582313.842100432 30 atime=1389081085.438724352 30 ctime=1389081086.311724332 eric4-4.5.18/eric/SqlBrowser/SqlBrowser.py0000644000175000001440000001477112261012651021031 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing the SQL Browser main window. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from PyQt4.QtSql import QSqlError, QSqlDatabase from KdeQt.KQMainWindow import KQMainWindow from KdeQt import KQMessageBox from E4Gui.E4Action import E4Action from SqlBrowserWidget import SqlBrowserWidget import UI.PixmapCache import UI.Config class SqlBrowser(KQMainWindow): """ Class implementing the SQL Browser main window. """ def __init__(self, connections = [], parent = None): """ Constructor @param connections list of database connections to add (list of strings) @param reference to the parent widget (QWidget) """ KQMainWindow.__init__(self, parent) self.setObjectName("SqlBrowser") self.setWindowTitle(self.trUtf8("SQL Browser")) self.setWindowIcon(UI.PixmapCache.getIcon("eric.png")) self.__browser = SqlBrowserWidget(self) self.setCentralWidget(self.__browser) self.connect(self.__browser, SIGNAL("statusMessage(QString)"), self.statusBar().showMessage) self.__initActions() self.__initMenus() self.__initToolbars() self.resize(self.__browser.size()) self.__warnings = [] for connection in connections: url = QUrl(connection, QUrl.TolerantMode) if not url.isValid(): self.__warnings.append(self.trUtf8("Invalid URL: %1").arg(connection)) continue err = self.__browser.addConnection(url.scheme(), url.path(), url.userName(), url.password(), url.host(), url.port(-1)) if err.type() != QSqlError.NoError: self.__warnings.append( self.trUtf8("Unable to open connection: %1").arg(err.text())) QTimer.singleShot(0, self.__uiStartUp) def __uiStartUp(self): """ Private slot to do some actions after the UI has started and the main loop is up. """ for warning in self.__warnings: KQMessageBox.warning(self, self.trUtf8("SQL Browser startup problem"), warning) if QSqlDatabase.connectionNames().isEmpty(): self.__browser.addConnectionByDialog() def __initActions(self): """ Private method to define the user interface actions. """ # list of all actions self.__actions = [] self.addConnectionAct = E4Action(self.trUtf8('Add Connection'), UI.PixmapCache.getIcon("databaseConnection.png"), self.trUtf8('Add &Connection...'), 0, 0, self, 'sql_file_add_connection') self.addConnectionAct.setStatusTip(self.trUtf8( 'Open a dialog to add a new database connection')) self.addConnectionAct.setWhatsThis(self.trUtf8( """Add Connection""" """

    This opens a dialog to add a new database connection.

    """ )) self.connect(self.addConnectionAct, SIGNAL('triggered()'), self.__browser.addConnectionByDialog) self.__actions.append(self.addConnectionAct) self.exitAct = E4Action(self.trUtf8('Quit'), UI.PixmapCache.getIcon("exit.png"), self.trUtf8('&Quit'), QKeySequence(self.trUtf8("Ctrl+Q","File|Quit")), 0, self, 'sql_file_quit') self.exitAct.setStatusTip(self.trUtf8('Quit the SQL browser')) self.exitAct.setWhatsThis(self.trUtf8( """Quit""" """

    Quit the SQL browser.

    """ )) self.connect(self.exitAct, SIGNAL('triggered()'), qApp, SLOT('closeAllWindows()')) self.aboutAct = E4Action(self.trUtf8('About'), self.trUtf8('&About'), 0, 0, self, 'sql_help_about') self.aboutAct.setStatusTip(self.trUtf8('Display information about this software')) self.aboutAct.setWhatsThis(self.trUtf8( """About""" """

    Display some information about this software.

    """ )) self.connect(self.aboutAct, SIGNAL('triggered()'), self.__about) self.__actions.append(self.aboutAct) self.aboutQtAct = E4Action(self.trUtf8('About Qt'), self.trUtf8('About &Qt'), 0, 0, self, 'sql_help_about_qt') self.aboutQtAct.setStatusTip(\ self.trUtf8('Display information about the Qt toolkit')) self.aboutQtAct.setWhatsThis(self.trUtf8( """About Qt""" """

    Display some information about the Qt toolkit.

    """ )) self.connect(self.aboutQtAct, SIGNAL('triggered()'), self.__aboutQt) self.__actions.append(self.aboutQtAct) def __initMenus(self): """ Private method to create the menus. """ mb = self.menuBar() menu = mb.addMenu(self.trUtf8('&File')) menu.setTearOffEnabled(True) menu.addAction(self.addConnectionAct) menu.addSeparator() menu.addAction(self.exitAct) mb.addSeparator() menu = mb.addMenu(self.trUtf8('&Help')) menu.setTearOffEnabled(True) menu.addAction(self.aboutAct) menu.addAction(self.aboutQtAct) def __initToolbars(self): """ Private method to create the toolbars. """ filetb = self.addToolBar(self.trUtf8("File")) filetb.setObjectName("FileToolBar") filetb.setIconSize(UI.Config.ToolBarIconSize) filetb.addAction(self.addConnectionAct) filetb.addSeparator() filetb.addAction(self.exitAct) def __about(self): """ Private slot to show the about information. """ KQMessageBox.about(self, self.trUtf8("SQL Browser"), self.trUtf8( """

    About SQL Browser

    """ """

    The SQL browser window is a little tool to examine """ """the data and the schema of a database and to execute """ """queries on a database.

    """ )) def __aboutQt(self): """ Private slot to show info about Qt. """ KQMessageBox.aboutQt(self, self.trUtf8("SQL Browser")) eric4-4.5.18/eric/SqlBrowser/PaxHeaders.8617/SqlConnectionDialog.ui0000644000175000001440000000007411221704372023056 xustar000000000000000030 atime=1389081085.448724353 30 ctime=1389081086.311724332 eric4-4.5.18/eric/SqlBrowser/SqlConnectionDialog.ui0000644000175000001440000001372011221704372022606 0ustar00detlevusers00000000000000 SqlConnectionDialog 0 0 400 259 Connect... D&river: driverCombo Select the database driver &Database Name: databaseEdit 0 0 Enter the database name Qt::Horizontal 40 20 Press to select a database file ... &Username: usernameEdit Enter the user name &Password: passwordEdit QLineEdit::Password &Hostname: hostnameEdit Enter the hostname P&ort: portSpinBox Enter the port number Default -1 65535 -1 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok driverCombo databaseEdit databaseFileButton usernameEdit passwordEdit hostnameEdit portSpinBox buttonBox buttonBox accepted() SqlConnectionDialog accept() 248 254 157 274 buttonBox rejected() SqlConnectionDialog reject() 316 260 286 274 eric4-4.5.18/eric/SqlBrowser/PaxHeaders.8617/__init__.py0000644000175000001440000000013212261012651020721 xustar000000000000000030 mtime=1388582313.848100509 30 atime=1389081085.448724353 30 ctime=1389081086.311724332 eric4-4.5.18/eric/SqlBrowser/__init__.py0000644000175000001440000000024012261012651020447 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Package containing module for the SQL browser tool. """ eric4-4.5.18/eric/SqlBrowser/PaxHeaders.8617/SqlConnectionDialog.py0000644000175000001440000000013212261012651023061 xustar000000000000000030 mtime=1388582313.850100534 30 atime=1389081085.448724353 30 ctime=1389081086.311724332 eric4-4.5.18/eric/SqlBrowser/SqlConnectionDialog.py0000644000175000001440000000645412261012651022624 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a dialog to enter the connection parameters. """ from PyQt4.QtCore import * from PyQt4.QtGui import * from PyQt4.QtSql import QSqlDatabase from KdeQt import KQFileDialog from E4Gui.E4Completers import E4FileCompleter from Ui_SqlConnectionDialog import Ui_SqlConnectionDialog import Utilities class SqlConnectionDialog(QDialog, Ui_SqlConnectionDialog): """ Class implementing a dialog to enter the connection parameters. """ def __init__(self, parent = None): """ Constructor """ QDialog.__init__(self, parent) self.setupUi(self) self.databaseFileCompleter = E4FileCompleter() self.okButton = self.buttonBox.button(QDialogButtonBox.Ok) drivers = QSqlDatabase.drivers() # remove compatibility names drivers.removeAll("QMYSQL3") drivers.removeAll("QOCI8") drivers.removeAll("QODBC3") drivers.removeAll("QPSQL7") drivers.removeAll("QTDS7") self.driverCombo.addItems(drivers) self.__updateDialog() def __updateDialog(self): """ Private slot to update the dialog depending on its contents. """ driver = self.driverCombo.currentText() if driver.startsWith("QSQLITE"): self.databaseEdit.setCompleter(self.databaseFileCompleter) self.databaseFileButton.setEnabled(True) else: self.databaseEdit.setCompleter(None) self.databaseFileButton.setEnabled(False) if self.databaseEdit.text().isEmpty() or driver.isEmpty(): self.okButton.setEnabled(False) else: self.okButton.setEnabled(True) @pyqtSignature("QString") def on_driverCombo_activated(self, txt): """ Private slot handling the selection of a database driver. """ self.__updateDialog() @pyqtSignature("QString") def on_databaseEdit_textChanged(self, p0): """ Private slot handling the change of the database name. """ self.__updateDialog() @pyqtSignature("") def on_databaseFileButton_clicked(self): """ Private slot to open a database file via a file selection dialog. """ startdir = self.databaseEdit.text() dbFile = KQFileDialog.getOpenFileName( self, self.trUtf8("Select Database File"), startdir, self.trUtf8("All Files (*)"), None) if not dbFile.isEmpty(): self.databaseEdit.setText(Utilities.toNativeSeparators(dbFile)) def getData(self): """ Public method to retrieve the connection data. @return tuple giving the driver name (QString), the database name (QString), the user name (QString), the password (QString), the host name (QString) and the port (integer) """ return ( self.driverCombo.currentText(), self.databaseEdit.text(), self.usernameEdit.text(), self.passwordEdit.text(), self.hostnameEdit.text(), self.portSpinBox.value(), ) eric4-4.5.18/eric/SqlBrowser/PaxHeaders.8617/SqlBrowserWidget.ui0000644000175000001440000000007411221420272022420 xustar000000000000000030 atime=1389081085.448724353 30 ctime=1389081086.311724332 eric4-4.5.18/eric/SqlBrowser/SqlBrowserWidget.ui0000644000175000001440000001127411221420272022152 0ustar00detlevusers00000000000000 SqlBrowserWidget 0 0 800 550 eric4 SQL Browser 0 0 Qt::Horizontal 1 0 2 0 Qt::ActionsContextMenu QAbstractItemView::SelectRows 0 0 16777215 200 SQL Query 0 0 0 18 Enter the SQL query to be executed Qt::Horizontal 40 20 Press to clear the entry &Clear Press to execute the query &Execute false &Insert Row Inserts a new row false &Delete Row Deletes the current row SqlConnectionWidget QTreeView
    SqlConnectionWidget.h
    sqlEdit clearButton executeButton connections table
    eric4-4.5.18/eric/PaxHeaders.8617/eric4_re.pyw0000644000175000001440000000013112261012653016743 xustar000000000000000029 mtime=1388582315.00511514 30 atime=1389081085.448724353 30 ctime=1389081086.311724332 eric4-4.5.18/eric/eric4_re.pyw0000644000175000001440000000020612261012653016474 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2010 - 2014 Detlev Offenbach # from eric4_re import main main() eric4-4.5.18/eric/PaxHeaders.8617/eric4_qregexp.pyw0000644000175000001440000000013212261012653020011 xustar000000000000000030 mtime=1388582315.007115165 30 atime=1389081085.448724353 30 ctime=1389081086.311724332 eric4-4.5.18/eric/eric4_qregexp.pyw0000644000175000001440000000021312261012653017537 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2010 - 2014 Detlev Offenbach # from eric4_qregexp import main main() eric4-4.5.18/eric/PaxHeaders.8617/eric4_compare.py0000644000175000001440000000013212261012651017573 xustar000000000000000030 mtime=1388582313.852100559 30 atime=1389081085.448724353 30 ctime=1389081086.311724332 eric4-4.5.18/eric/eric4_compare.py0000644000175000001440000000405212261012651017326 0ustar00detlevusers00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- # Copyright (c) 2006 - 2014 Detlev Offenbach # """ Eric4 Compare This is the main Python script that performs the necessary initialization of the Compare module and starts the Qt event loop. This is a standalone version of the integrated Compare module. """ import sys import os # disable the usage of KDE widgets, if requested sys.e4nokde = False if "--nokde" in sys.argv: del sys.argv[sys.argv.index("--nokde")] sys.e4nokde = True else: sys.e4nokde = os.getenv("e4nokde") is not None and os.getenv("e4nokde") == "1" for arg in sys.argv: if arg.startswith("--config="): import Utilities configDir = arg.replace("--config=", "") Utilities.setConfigDir(configDir) sys.argv.remove(arg) break from Utilities import Startup def createMainWidget(argv): """ Function to create the main widget. @param argv list of commandline parameters (list of strings) @return reference to the main widget (QWidget) """ from UI.CompareDialog import CompareWindow if len(argv) >= 6: # assume last two entries are the files to compare return CompareWindow([(argv[-5], argv[-2]), (argv[-3], argv[-1])]) elif len(argv) >= 2: return CompareWindow([("", argv[-2]), ("", argv[-1])]) else: return CompareWindow() def main(): """ Main entry point into the application. """ options = [\ ("--config=configDir", "use the given directory as the one containing the config files"), ("--nokde" , "don't use KDE widgets"), ] appinfo = Startup.makeAppInfo(sys.argv, "Eric4 Compare", "", "Simple graphical compare tool", options) res = Startup.simpleAppStartup(sys.argv, appinfo, createMainWidget) sys.exit(res) if __name__ == '__main__': main() eric4-4.5.18/eric/PaxHeaders.8617/eric4_unittest.py0000644000175000001440000000013212261012651020024 xustar000000000000000030 mtime=1388582313.854100585 30 atime=1389081085.448724353 30 ctime=1389081086.311724332 eric4-4.5.18/eric/eric4_unittest.py0000644000175000001440000000414512261012651017562 0ustar00detlevusers00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- # Copyright (c) 2002 - 2014 Detlev Offenbach # """ Eric4 Unittest This is the main Python script that performs the necessary initialization of the unittest module and starts the Qt event loop. This is a standalone version of the integrated unittest module. """ import sys import os # disable the usage of KDE widgets, if requested sys.e4nokde = False if "--nokde" in sys.argv: del sys.argv[sys.argv.index("--nokde")] sys.e4nokde = True else: sys.e4nokde = os.getenv("e4nokde") is not None and os.getenv("e4nokde") == "1" for arg in sys.argv: if arg.startswith("--config="): import Utilities configDir = arg.replace("--config=", "") Utilities.setConfigDir(configDir) sys.argv.remove(arg) break from Utilities import Startup def createMainWidget(argv): """ Function to create the main widget. @param argv list of commandline parameters (list of strings) @return reference to the main widget (QWidget) """ from PyUnit.UnittestDialog import UnittestWindow try: fn = argv[1] except IndexError: fn = None return UnittestWindow(fn) def main(): """ Main entry point into the application. """ options = [\ ("--config=configDir", "use the given directory as the one containing the config files"), ("--nokde" , "don't use KDE widgets"), ] kqOptions = [\ ("config \\", "use the given directory as the one containing the config files"), ("nokde" , "don't use KDE widgets"), ("!+file","") ] appinfo = Startup.makeAppInfo(sys.argv, "Eric4 Unittest", "file", "Graphical unit test application", options) res = Startup.simpleAppStartup(sys.argv, appinfo, createMainWidget, kqOptions) sys.exit(res) if __name__ == '__main__': main() eric4-4.5.18/eric/PaxHeaders.8617/DebugClients0000644000175000001440000000013212261012661017001 xustar000000000000000030 mtime=1388582321.236193373 30 atime=1389081086.015724339 30 ctime=1389081086.315724332 eric4-4.5.18/eric/DebugClients/0000755000175000001440000000000012261012661016610 5ustar00detlevusers00000000000000eric4-4.5.18/eric/DebugClients/PaxHeaders.8617/__init__.py0000644000175000001440000000013212261012651021166 xustar000000000000000030 mtime=1388582313.857100623 30 atime=1389081085.449724353 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/__init__.py0000644000175000001440000000024612261012651020722 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2005 - 2014 Detlev Offenbach # """ Package implementing debug clients for various languages. """ eric4-4.5.18/eric/DebugClients/PaxHeaders.8617/Python30000644000175000001440000000013212261012661020345 xustar000000000000000030 mtime=1388582321.286193997 30 atime=1389081086.015724339 30 ctime=1389081086.315724332 eric4-4.5.18/eric/DebugClients/Python3/0000755000175000001440000000000012261012661020154 5ustar00detlevusers00000000000000eric4-4.5.18/eric/DebugClients/Python3/PaxHeaders.8617/AsyncIO.py0000644000175000001440000000013112261012651022277 xustar000000000000000029 mtime=1388582313.86010066 30 atime=1389081085.449724353 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python3/AsyncIO.py0000644000175000001440000000424212261012651022034 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a base class of an asynchronous interface for the debugger. """ class AsyncIO(object): """ Class implementing asynchronous reading and writing. """ def __init__(self): """ Constructor @param parent the optional parent of this object (QObject) (ignored) """ # There is no connection yet. self.disconnect() def disconnect(self): """ Public method to disconnect any current connection. """ self.readfd = None self.writefd = None def setDescriptors(self, rfd, wfd): """ Public method called to set the descriptors for the connection. @param rfd file descriptor of the input file (int) @param wfd file descriptor of the output file (int) """ self.rbuf = '' self.readfd = rfd self.wbuf = '' self.writefd = wfd def readReady(self, fd): """ Public method called when there is data ready to be read. @param fd file descriptor of the file that has data to be read (int) """ try: got = self.readfd.readline_p() except Exception as exc: return if len(got) == 0: self.sessionClose() return self.rbuf = self.rbuf + got # Call handleLine for the line if it is complete. eol = self.rbuf.find('\n') while eol >= 0: s = self.rbuf[:eol + 1] self.rbuf = self.rbuf[eol + 1:] self.handleLine(s) eol = self.rbuf.find('\n') def writeReady(self, fd): """ Public method called when we are ready to write data. @param fd file descriptor of the file that has data to be written (int) """ self.writefd.write(self.wbuf) self.writefd.flush() self.wbuf = '' def write(self, s): """ Public method to write a string. @param s the data to be written (string) """ self.wbuf = self.wbuf + s eric4-4.5.18/eric/DebugClients/Python3/PaxHeaders.8617/eric4dbgstub.py0000644000175000001440000000013212261012651023354 xustar000000000000000030 mtime=1388582313.862100686 30 atime=1389081085.449724353 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python3/eric4dbgstub.py0000644000175000001440000000447412261012651023117 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a debugger stub for remote debugging. """ import os import sys import distutils.sysconfig from eric4config import getConfig debugger = None __scriptname = None modDir = distutils.sysconfig.get_python_lib(True) ericpath = os.getenv('ERICDIR', getConfig('ericDir')) if not ericpath in sys.path: sys.path.insert(-1, ericpath) def initDebugger(kind = "standard"): """ Module function to initialize a debugger for remote debugging. @param kind type of debugger ("standard" or "threads") @return flag indicating success (boolean) """ global debugger res = True try: if kind == "standard": import DebugClient debugger = DebugClient.DebugClient() elif kind == "threads": import DebugClientThreads debugger = DebugClientThreads.DebugClientThreads() else: raise ValueError except ImportError: debugger = None res = False return res def runcall(func, *args): """ Module function mimicing the Pdb interface. @param func function to be called (function object) @param *args arguments being passed to func @return the function result """ global debugger, __scriptname return debugger.run_call(__scriptname, func, *args) def setScriptname(name): """ Module function to set the scriptname to be reported back to the IDE. @param name absolute pathname of the script (string) """ global __scriptname __scriptname = name def startDebugger(enableTrace = True, exceptions = True, tracePython = False, redirect = True): """ Module function used to start the remote debugger. @keyparam enableTrace flag to enable the tracing function (boolean) @keyparam exceptions flag to enable exception reporting of the IDE (boolean) @keyparam tracePython flag to enable tracing into the Python library (boolean) @keyparam redirect flag indicating redirection of stdin, stdout and stderr (boolean) """ global debugger if debugger: debugger.startDebugger(enableTrace = enableTrace, exceptions = exceptions, tracePython = tracePython, redirect = redirect) eric4-4.5.18/eric/DebugClients/Python3/PaxHeaders.8617/DCTestResult.py0000644000175000001440000000013212261012651023320 xustar000000000000000030 mtime=1388582313.864100711 30 atime=1389081085.449724353 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python3/DCTestResult.py0000644000175000001440000000446412261012651023062 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a TestResult derivative for the eric4 debugger. """ import select import traceback from unittest import TestResult from DebugProtocol import * class DCTestResult(TestResult): """ A TestResult derivative to work with eric4's debug client. For more details see unittest.py of the standard python distribution. """ def __init__(self, parent): """ Constructor @param parent The parent widget. """ TestResult.__init__(self) self.parent = parent def addFailure(self, test, err): """ Method called if a test failed. @param test Reference to the test object @param err The error traceback """ TestResult.addFailure(self, test, err) tracebackLines = traceback.format_exception(*(err + (10,))) self.parent.write('{0}{1}\n'.format(ResponseUTTestFailed, str((str(test), tracebackLines)))) def addError(self, test, err): """ Method called if a test errored. @param test Reference to the test object @param err The error traceback """ TestResult.addError(self, test, err) tracebackLines = traceback.format_exception(*(err + (10,))) self.parent.write('{0}{1}\n'.format(ResponseUTTestErrored, str((str(test), tracebackLines)))) def startTest(self, test): """ Method called at the start of a test. @param test Reference to the test object """ TestResult.startTest(self, test) self.parent.write('{0}{1}\n'.format(ResponseUTStartTest, str((str(test), test.shortDescription())))) def stopTest(self, test): """ Method called at the end of a test. @param test Reference to the test object """ TestResult.stopTest(self, test) self.parent.write('{0}\n'.format(ResponseUTStopTest)) # ensure that pending input is processed rrdy, wrdy, xrdy = select.select([self.parent.readstream],[],[], 0.01) if self.parent.readstream in rrdy: self.parent.readReady(self.parent.readstream.fileno()) eric4-4.5.18/eric/DebugClients/Python3/PaxHeaders.8617/DebugClientThreads.py0000644000175000001440000000013212261012651024473 xustar000000000000000030 mtime=1388582313.866100737 30 atime=1389081085.449724353 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python3/DebugClientThreads.py0000644000175000001440000001413612261012651024232 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing the multithreaded version of the debug client. """ import _thread from AsyncIO import * from DebugThread import * from DebugBase import * import DebugClientBase def _debugclient_start_new_thread(target, args, kwargs = {}): """ Module function used to allow for debugging of multiple threads. The way it works is that below, we reset _thread._start_new_thread to this function object. Thus, providing a hook for us to see when threads are started. From here we forward the request onto the DebugClient which will create a DebugThread object to allow tracing of the thread then start up the thread. These actions are always performed in order to allow dropping into debug mode. See DebugClientThreads.attachThread and DebugThread.DebugThread in DebugThread.py @param target the start function of the target thread (i.e. the user code) @param args arguments to pass to target @param kwargs keyword arguments to pass to target @return The identifier of the created thread """ if DebugClientBase.DebugClientInstance is not None: return DebugClientBase.DebugClientInstance.attachThread(target, args, kwargs) else: return _original_start_thread(target, args, kwargs) # make _thread hooks available to system _original_start_thread = _thread.start_new_thread _thread.start_new_thread = _debugclient_start_new_thread # NOTE: import threading here AFTER above hook, as threading cache's # thread._start_new_thread. from threading import RLock class DebugClientThreads(DebugClientBase.DebugClientBase, AsyncIO): """ Class implementing the client side of the debugger. This variant of the debugger implements a threaded debugger client by subclassing all relevant base classes. """ def __init__(self): """ Constructor """ AsyncIO.__init__(self) DebugClientBase.DebugClientBase.__init__(self) # protection lock for synchronization self.clientLock = RLock() # the "current" thread, basically the thread we are at a breakpoint for. self.currentThread = None # special objects representing the main scripts thread and frame self.mainThread = None self.mainFrame = None self.variant = 'Threaded' def attachThread(self, target = None, args = None, kwargs = None, mainThread = False): """ Public method to setup a thread for DebugClient to debug. If mainThread is non-zero, then we are attaching to the already started mainthread of the app and the rest of the args are ignored. @param target the start function of the target thread (i.e. the user code) @param args arguments to pass to target @param kwargs keyword arguments to pass to target @param mainThread True, if we are attaching to the already started mainthread of the app @return identifier of the created thread """ try: self.lockClient() newThread = DebugThread(self, target, args, kwargs, mainThread) ident = -1 if mainThread: ident = _thread.get_ident() self.mainThread = newThread if self.debugging: sys.setprofile(newThread.profile) else: ident = _original_start_thread(newThread.bootstrap, ()) newThread.set_ident(ident) self.threads[newThread.get_ident()] = newThread finally: self.unlockClient() return ident def threadTerminated(self, dbgThread): """ Public method called when a DebugThread has exited. @param dbgThread the DebugThread that has exited """ self.lockClient() try: del self.threads[dbgThread.get_ident()] except KeyError: pass finally: self.unlockClient() def lockClient(self, blocking = True): """ Public method to acquire the lock for this client. @param blocking flag to indicating a blocking lock @return flag indicating successful locking """ if blocking: self.clientLock.acquire() else: return self.clientLock.acquire(blocking) def unlockClient(self): """ Public method to release the lock for this client. """ try: self.clientLock.release() except AssertionError: pass def setCurrentThread(self, id): """ Private method to set the current thread. @param id the id the current thread should be set to. """ try: self.lockClient() if id is None: self.currentThread = None else: self.currentThread = self.threads[id] finally: self.unlockClient() def eventLoop(self, disablePolling = False): """ Public method implementing our event loop. @param disablePolling flag indicating to enter an event loop with polling disabled (boolean) """ # make sure we set the current thread appropriately threadid = _thread.get_ident() self.setCurrentThread(threadid) DebugClientBase.DebugClientBase.eventLoop(self, disablePolling) self.setCurrentThread(None) def set_quit(self): """ Private method to do a 'set quit' on all threads. """ try: locked = self.lockClient(False) try: for key in self.threads: self.threads[key].set_quit() except: pass finally: if locked: self.unlockClient() # We are normally called by the debugger to execute directly. if __name__ == '__main__': debugClient = DebugClientThreads() debugClient.main() eric4-4.5.18/eric/DebugClients/Python3/PaxHeaders.8617/DebugClientCapabilities.py0000644000175000001440000000013212261012651025472 xustar000000000000000030 mtime=1388582313.868100762 30 atime=1389081085.449724353 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python3/DebugClientCapabilities.py0000644000175000001440000000071112261012651025223 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module defining the debug clients capabilities. """ HasDebugger = 0x0001 HasInterpreter = 0x0002 HasProfiler = 0x0004 HasCoverage = 0x0008 HasCompleter = 0x0010 HasUnittest = 0x0020 HasShell = 0x0040 HasAll = HasDebugger | HasInterpreter | HasProfiler | \ HasCoverage | HasCompleter | HasUnittest | HasShell eric4-4.5.18/eric/DebugClients/Python3/PaxHeaders.8617/DebugBase.py0000644000175000001440000000013212261012651022614 xustar000000000000000030 mtime=1388582313.878100889 30 atime=1389081085.449724353 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python3/DebugBase.py0000644000175000001440000006221612261012651022355 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing the debug base class. """ import sys import traceback import bdb import os import types import atexit import inspect from DebugProtocol import * gRecursionLimit = 64 def printerr(s): """ Module function used for debugging the debug client. @param s data to be printed """ import sys sys.__stderr__.write('{0!s}\n'.format(s)) sys.__stderr__.flush() def setRecursionLimit(limit): """ Module function to set the recursion limit. @param limit recursion limit (integer) """ global gRecursionLimit gRecursionLimit = limit class DebugBase(bdb.Bdb): """ Class implementing base class of the debugger. Provides simple wrapper methods around bdb for the 'owning' client to call to step etc. """ def __init__(self, dbgClient): """ Constructor @param dbgClient the owning client """ bdb.Bdb.__init__(self) self._dbgClient = dbgClient self._mainThread = True self.breaks = self._dbgClient.breakpoints self.__event = "" self.__isBroken = "" self.cFrame = None # current frame we are at self.currentFrame = None self.currentFrameLocals = None # frame that we are stepping in, can be different than currentFrame self.stepFrame = None # provide a hook to perform a hard breakpoint # Use it like this: # if hasattr(sys, 'breakpoint): sys.breakpoint() sys.breakpoint = self.set_trace # initialize parent bdb.Bdb.reset(self) self.__recursionDepth = -1 self.setRecursionDepth(inspect.currentframe()) def getCurrentFrame(self): """ Public method to return the current frame. @return the current frame """ return self.currentFrame def getCurrentFrameLocals(self): """ Public method to return the locals dictionary of the current frame. @return locals dictionary of the current frame """ return self.currentFrameLocals def step(self, traceMode): """ Public method to perform a step operation in this thread. @param traceMode If it is True, then the step is a step into, otherwise it is a step over. """ self.stepFrame = self.currentFrame if traceMode: self.currentFrame = None self.set_step() else: self.set_next(self.currentFrame) def stepOut(self): """ Public method to perform a step out of the current call. """ self.stepFrame = self.currentFrame self.set_return(self.currentFrame) def go(self, special): """ Public method to resume the thread. It resumes the thread stopping only at breakpoints or exceptions. @param special flag indicating a special continue operation """ self.currentFrame = None self.set_continue(special) def setRecursionDepth(self, frame): """ Public method to determine the current recursion depth. @param frame The current stack frame. """ self.__recursionDepth = 0 while frame is not None: self.__recursionDepth += 1 frame = frame.f_back def profile(self, frame, event, arg): """ Public method used to trace some stuff independent of the debugger trace function. @param frame The current stack frame. @param event The trace event (string) @param arg The arguments """ if event == 'return': self.cFrame = frame.f_back self.__recursionDepth -= 1 elif event == 'call': self.cFrame = frame self.__recursionDepth += 1 if self.__recursionDepth > gRecursionLimit: raise RuntimeError('maximum recursion depth exceeded\n' '(offending frame is two down the stack)') def trace_dispatch(self, frame, event, arg): """ Reimplemented from bdb.py to do some special things. This specialty is to check the connection to the debug server for new events (i.e. new breakpoints) while we are going through the code. @param frame The current stack frame. @param event The trace event (string) @param arg The arguments @return local trace function """ if self.quitting: return # None # give the client a chance to push through new break points. self._dbgClient.eventPoll() self.__event == event self.__isBroken = False if event == 'line': return self.dispatch_line(frame) if event == 'call': return self.dispatch_call(frame, arg) if event == 'return': return self.dispatch_return(frame, arg) if event == 'exception': return self.dispatch_exception(frame, arg) if event == 'c_call': return self.trace_dispatch if event == 'c_exception': return self.trace_dispatch if event == 'c_return': return self.trace_dispatch print('bdb.Bdb.dispatch: unknown debugging event: ', repr(event)) return self.trace_dispatch def dispatch_line(self, frame): """ Reimplemented from bdb.py to do some special things. This speciality is to check the connection to the debug server for new events (i.e. new breakpoints) while we are going through the code. @param frame The current stack frame. @return local trace function """ if self.stop_here(frame) or self.break_here(frame): self.user_line(frame) if self.quitting: raise bdb.BdbQuit return self.trace_dispatch def dispatch_return(self, frame, arg): """ Reimplemented from bdb.py to handle passive mode cleanly. @param frame The current stack frame. @param arg The arguments @return local trace function """ if self.stop_here(frame) or frame == self.returnframe: self.user_return(frame, arg) if self.quitting and not self._dbgClient.passive: raise bdb.BdbQuit return self.trace_dispatch def dispatch_exception(self, frame, arg): """ Reimplemented from bdb.py to always call user_exception. @param frame The current stack frame. @param arg The arguments @return local trace function """ if not self.__skip_it(frame): self.user_exception(frame, arg) if self.quitting: raise bdb.BdbQuit return self.trace_dispatch def set_trace(self, frame = None): """ Overridden method of bdb.py to do some special setup. @param frame frame to start debugging from """ bdb.Bdb.set_trace(self, frame) sys.setprofile(self.profile) def set_continue(self, special): """ Reimplemented from bdb.py to always get informed of exceptions. @param special flag indicating a special continue operation """ # Modified version of the one found in bdb.py # Here we only set a new stop frame if it is a normal continue. if not special: self._set_stopinfo(self.botframe, None) else: self._set_stopinfo(self.stopframe, None) def set_quit(self): """ Public method to quit. It wraps call to bdb to clear the current frame properly. """ self.currentFrame = None sys.setprofile(None) bdb.Bdb.set_quit(self) def fix_frame_filename(self, frame): """ Public method used to fixup the filename for a given frame. The logic employed here is that if a module was loaded from a .pyc file, then the correct .py to operate with should be in the same path as the .pyc. The reason this logic is needed is that when a .pyc file is generated, the filename embedded and thus what is readable in the code object of the frame object is the fully qualified filepath when the pyc is generated. If files are moved from machine to machine this can break debugging as the .pyc will refer to the .py on the original machine. Another case might be sharing code over a network... This logic deals with that. @param frame the frame object """ # get module name from __file__ if '__file__' in frame.f_globals and \ frame.f_globals['__file__'] and \ frame.f_globals['__file__'] == frame.f_code.co_filename: root, ext = os.path.splitext(frame.f_globals['__file__']) if ext in ['.pyc', '.py', '.py3', '.pyo']: fixedName = root + '.py' if os.path.exists(fixedName): return fixedName fixedName = root + '.py3' if os.path.exists(fixedName): return fixedName return frame.f_code.co_filename def set_watch(self, cond, temporary = False): """ Public method to set a watch expression. @param cond expression of the watch expression (string) @param temporary flag indicating a temporary watch expression (boolean) """ bp = bdb.Breakpoint("Watch", 0, temporary, cond) if cond.endswith('??created??') or cond.endswith('??changed??'): bp.condition, bp.special = cond.split() else: bp.condition = cond bp.special = "" bp.values = {} if "Watch" not in self.breaks: self.breaks["Watch"] = 1 else: self.breaks["Watch"] += 1 def clear_watch(self, cond): """ Public method to clear a watch expression. @param cond expression of the watch expression to be cleared (string) """ try: possibles = bdb.Breakpoint.bplist["Watch", 0] for i in range(0, len(possibles)): b = possibles[i] if b.cond == cond: b.deleteMe() self.breaks["Watch"] -= 1 if self.breaks["Watch"] == 0: del self.breaks["Watch"] break except KeyError: pass def get_watch(self, cond): """ Public method to get a watch expression. @param cond expression of the watch expression to be cleared (string) """ possibles = bdb.Breakpoint.bplist["Watch", 0] for i in range(0, len(possibles)): b = possibles[i] if b.cond == cond: return b def __do_clearWatch(self, cond): """ Private method called to clear a temporary watch expression. @param cond expression of the watch expression to be cleared (string) """ self.clear_watch(cond) self._dbgClient.write('{0}{1}\n'.format(ResponseClearWatch, cond)) def __effective(self, frame): """ Private method to determine, if a watch expression is effective. @param frame the current execution frame @return tuple of watch expression and a flag to indicate, that a temporary watch expression may be deleted (bdb.Breakpoint, boolean) """ possibles = bdb.Breakpoint.bplist["Watch", 0] for i in range(0, len(possibles)): b = possibles[i] if not b.enabled: continue if not b.cond: # watch expression without expression shouldn't occur, just ignore it continue try: val = eval(b.condition, frame.f_globals, frame.f_locals) if b.special: if b.special == '??created??': if b.values[frame][0] == 0: b.values[frame][0] = 1 b.values[frame][1] = val return (b, True) else: continue b.values[frame][0] = 1 if b.special == '??changed??': if b.values[frame][1] != val: b.values[frame][1] = val if b.values[frame][2] > 0: b.values[frame][2] -= 1 continue else: return (b, True) else: continue continue if val: if b.ignore > 0: b.ignore -= 1 continue else: return (b, True) except: if b.special: try: b.values[frame][0] = 0 except KeyError: b.values[frame] = [0, None, b.ignore] continue return (None, False) def break_here(self, frame): """ Reimplemented from bdb.py to fix the filename from the frame. See fix_frame_filename for more info. @param frame the frame object @return flag indicating the break status (boolean) """ filename = self.canonic(self.fix_frame_filename(frame)) if filename not in self.breaks and "Watch" not in self.breaks: return False if filename in self.breaks: lineno = frame.f_lineno if lineno not in self.breaks[filename]: # The line itself has no breakpoint, but maybe the line is the # first line of a function with breakpoint set by function name. lineno = frame.f_code.co_firstlineno if lineno in self.breaks[filename]: # flag says ok to delete temp. bp (bp, flag) = bdb.effective(filename, lineno, frame) if bp: self.currentbp = bp.number if (flag and bp.temporary): self.__do_clear(filename, lineno) return True if "Watch" in self.breaks: # flag says ok to delete temp. bp (bp, flag) = self.__effective(frame) if bp: self.currentbp = bp.number if (flag and bp.temporary): self.__do_clearWatch(bp.cond) return True return False def break_anywhere(self, frame): """ Reimplemented from bdb.py to do some special things. These speciality is to fix the filename from the frame (see fix_frame_filename for more info). @param frame the frame object @return flag indicating the break status (boolean) """ return \ self.canonic(self.fix_frame_filename(frame)) in self.breaks or \ ("Watch" in self.breaks and self.breaks["Watch"]) def get_break(self, filename, lineno): """ Reimplemented from bdb.py to get the first breakpoint of a particular line. Because eric4 supports only one breakpoint per line, this overwritten method will return this one and only breakpoint. @param filename the filename of the bp to retrieve (string) @param lineno the linenumber of the bp to retrieve (integer) @return breakpoint or None, if there is no bp """ filename = self.canonic(filename) return filename in self.breaks and \ lineno in self.breaks[filename] and \ bdb.Breakpoint.bplist[filename, lineno][0] or None def __do_clear(self, filename, lineno): """ Private method called to clear a temporary breakpoint. @param filename name of the file the bp belongs to @param lineno linenumber of the bp """ self.clear_break(filename, lineno) self._dbgClient.write('{0}{1},{2:d}\n'.format( ResponseClearBreak, filename, lineno)) def getStack(self): """ Public method to get the stack. @return list of lists with file name (string), line number (integer) and function name (string) """ fr = self.cFrame stack = [] while fr is not None: fname = self._dbgClient.absPath(self.fix_frame_filename(fr)) fline = fr.f_lineno ffunc = fr.f_code.co_name if ffunc == '?': ffunc = '' stack.append([fname, fline, ffunc]) if fr == self._dbgClient.mainFrame: fr = None else: fr = fr.f_back return stack def user_line(self, frame): """ Reimplemented to handle the program about to execute a particular line. @param frame the frame object """ line = frame.f_lineno # We never stop on line 0. if line == 0: return fn = self._dbgClient.absPath(self.fix_frame_filename(frame)) # See if we are skipping at the start of a newly loaded program. if self._dbgClient.mainFrame is None: if fn != self._dbgClient.getRunning(): return self._dbgClient.mainFrame = frame self.currentFrame = frame self.currentFrameLocals = frame.f_locals # remember the locals because it is reinitialized when accessed fr = frame stack = [] while fr is not None: # Reset the trace function so we can be sure # to trace all functions up the stack... This gets around # problems where an exception/breakpoint has occurred # but we had disabled tracing along the way via a None # return from dispatch_call fr.f_trace = self.trace_dispatch fname = self._dbgClient.absPath(self.fix_frame_filename(fr)) fline = fr.f_lineno ffunc = fr.f_code.co_name if ffunc == '?': ffunc = '' stack.append([fname, fline, ffunc]) if fr == self._dbgClient.mainFrame: fr = None else: fr = fr.f_back self.__isBroken = True self._dbgClient.write('{0}{1}\n'.format(ResponseLine, str(stack))) self._dbgClient.eventLoop() def user_exception(self, frame, excinfo, unhandled = False): """ Reimplemented to report an exception to the debug server. @param frame the frame object @param excinfo information about the exception @param unhandled flag indicating an uncaught exception """ exctype, excval, exctb = excinfo if exctype in [SystemExit, bdb.BdbQuit]: atexit._run_exitfuncs() if excval is None: excval = 0 elif isinstance(excval, str): self._dbgClient.write(excval) excval = 1 elif isinstance(excval, bytes): self._dbgClient.write(excval.decode()) excval = 1 if isinstance(excval, int): self._dbgClient.progTerminated(excval) else: self._dbgClient.progTerminated(excval.code) return if exctype in [SyntaxError, IndentationError]: try: message, (filename, linenr, charnr, text) = excval[0], excval[1] except ValueError: exclist = [] realSyntaxError = True else: exclist = [message, [filename, linenr, charnr]] realSyntaxError = os.path.exists(filename) if realSyntaxError: self._dbgClient.write("{0}{1}\n".format(ResponseSyntax, str(exclist))) self._dbgClient.eventLoop() return exctype = self.__extractExceptionName(exctype) if excval is None: excval = '' if unhandled: exctypetxt = "unhandled {0!s}".format(str(exctype)) else: exctypetxt = str(exctype) try: exclist = [exctypetxt, str(excval).encode( self._dbgClient.getCoding(), 'backslashreplace')] except TypeError: exclist = [exctypetxt, str(excval)] if exctb: frlist = self.__extract_stack(exctb) frlist.reverse() self.currentFrame = frlist[0] self.currentFrameLocals = frlist[0].f_locals # remember the locals because it is reinitialized when accessed for fr in frlist: filename = self._dbgClient.absPath(self.fix_frame_filename(fr)) linenr = fr.f_lineno if os.path.basename(filename).startswith("DebugClient") or \ os.path.basename(filename) == "bdb.py": break exclist.append([filename, linenr]) self._dbgClient.write("{0}{1}\n".format(ResponseException, str(exclist))) if exctb is None: return self._dbgClient.eventLoop() def __extractExceptionName(self, exctype): """ Private method to extract the exception name given the exception type object. @param exctype type of the exception """ return str(exctype).replace("", "") def __extract_stack(self, exctb): """ Private member to return a list of stack frames. @param exctb exception traceback @return list of stack frames """ tb = exctb stack = [] while tb is not None: stack.append(tb.tb_frame) tb = tb.tb_next tb = None return stack def user_return(self, frame, retval): """ Reimplemented to report program termination to the debug server. @param frame the frame object @param retval the return value of the program """ # The program has finished if we have just left the first frame. if frame == self._dbgClient.mainFrame and \ self._mainThread: atexit._run_exitfuncs() self._dbgClient.progTerminated(retval) elif frame is not self.stepFrame: self.stepFrame = None self.user_line(frame) def stop_here(self, frame): """ Reimplemented to filter out debugger files. Tracing is turned off for files that are part of the debugger that are called from the application being debugged. @param frame the frame object @return flag indicating whether the debugger should stop here """ if self.__skip_it(frame): return False return bdb.Bdb.stop_here(self,frame) def __skip_it(self, frame): """ Private method to filter out debugger files. Tracing is turned off for files that are part of the debugger that are called from the application being debugged. @param frame the frame object @return flag indicating whether the debugger should skip this frame """ fn = self.fix_frame_filename(frame) # Eliminate things like and . if fn[0] == '<': return 1 #XXX - think of a better way to do this. It's only a convience for #debugging the debugger - when the debugger code is in the current #directory. if os.path.basename(fn) in [\ 'AsyncFile.py', 'AsyncIO.py', 'DebugConfig.py', 'DCTestResult.py', 'DebugBase.py', 'DebugClientBase.py', 'DebugClientCapabilities.py', 'DebugClient.py', 'DebugClientThreads.py', 'DebugProtocol.py', 'DebugThread.py', 'FlexCompleter.py', 'PyProfile.py'] or \ os.path.dirname(fn).endswith("coverage"): return True if self._dbgClient.shouldSkip(fn): return True return False def isBroken(self): """ Public method to return the broken state of the debugger. @return flag indicating the broken state (boolean) """ return self.__isBroken def getEvent(self): """ Public method to return the last debugger event. @return last debugger event (string) """ return self.__event eric4-4.5.18/eric/DebugClients/Python3/PaxHeaders.8617/getpass.py0000644000175000001440000000013212261012651022441 xustar000000000000000030 mtime=1388582313.881100926 30 atime=1389081085.449724353 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python3/getpass.py0000644000175000001440000000263312261012651022177 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing utilities to get a password and/or the current user name. getpass(prompt) - prompt for a password, with echo turned off getuser() - get the user name from the environment or password database This module is a replacement for the one found in the Python distribution. It is to provide a debugger compatible variant of the a.m. functions. """ import sys __all__ = ["getpass", "getuser"] def getuser(): """ Function to get the username from the environment or password database. First try various environment variables, then the password database. This works on Windows as long as USERNAME is set. @return username (string) """ # this is copied from the oroginal getpass.py import os for name in ('LOGNAME', 'USER', 'LNAME', 'USERNAME'): user = os.environ.get(name) if user: return user # If this fails, the exception will "explain" why import pwd return pwd.getpwuid(os.getuid())[0] def getpass(prompt = 'Password: '): """ Function to prompt for a password, with echo turned off. @param prompt Prompt to be shown to the user (string) @return Password entered by the user (string) """ return raw_input(prompt, 0) unix_getpass = getpass win_getpass = getpass default_getpass = getpass eric4-4.5.18/eric/DebugClients/Python3/PaxHeaders.8617/coverage0000644000175000001440000000013212261012661022140 xustar000000000000000030 mtime=1388582321.273193835 30 atime=1389081086.015724339 30 ctime=1389081086.315724332 eric4-4.5.18/eric/DebugClients/Python3/coverage/0000755000175000001440000000000012261012661021747 5ustar00detlevusers00000000000000eric4-4.5.18/eric/DebugClients/Python3/coverage/PaxHeaders.8617/codeunit.py0000644000175000001440000000013212261012651024400 xustar000000000000000030 mtime=1388582313.884100965 30 atime=1389081085.450724353 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python3/coverage/codeunit.py0000644000175000001440000000631112261012651024133 0ustar00detlevusers00000000000000"""Code unit (module) handling for Coverage.""" import glob, os def code_unit_factory(morfs, file_locator, omit_prefixes=None): """Construct a list of CodeUnits from polymorphic inputs. `morfs` is a module or a filename, or a list of same. `file_locator` is a FileLocator that can help resolve filenames. `omit_prefixes` is a list of prefixes. CodeUnits that match those prefixes will be omitted from the list. Returns a list of CodeUnit objects. """ # Be sure we have a list. if not isinstance(morfs, (list, tuple)): morfs = [morfs] # On Windows, the shell doesn't expand wildcards. Do it here. globbed = [] for morf in morfs: if isinstance(morf, str) and ('?' in morf or '*' in morf): globbed.extend(glob.glob(morf)) else: globbed.append(morf) morfs = globbed code_units = [CodeUnit(morf, file_locator) for morf in morfs] if omit_prefixes: prefixes = [file_locator.abs_file(p) for p in omit_prefixes] filtered = [] for cu in code_units: for prefix in prefixes: if cu.name.startswith(prefix): break else: filtered.append(cu) code_units = filtered return code_units class CodeUnit: """Code unit: a filename or module. Instance attributes: `name` is a human-readable name for this code unit. `filename` is the os path from which we can read the source. `relative` is a boolean. """ def __init__(self, morf, file_locator): if hasattr(morf, '__file__'): f = morf.__file__ else: f = morf # .pyc files should always refer to a .py instead. if f.endswith('.pyc'): f = f[:-1] self.filename = file_locator.canonical_filename(f) if hasattr(morf, '__name__'): n = modname = morf.__name__ self.relative = True else: n = os.path.splitext(morf)[0] rel = file_locator.relative_filename(n) if os.path.isabs(n): self.relative = (rel != n) else: self.relative = True n = rel modname = None self.name = n self.modname = modname def __repr__(self): return "" % (self.name, self.filename) def __cmp__(self, other): return cmp(self.name, other.name) def flat_rootname(self): """A base for a flat filename to correspond to this code unit. Useful for writing files about the code where you want all the files in the same directory, but need to differentiate same-named files from different directories. For example, the file a/b/c.py might return 'a_b_c' """ if self.modname: return self.modname.replace('.', '_') else: root = os.path.splitdrive(os.path.splitext(self.name)[0])[1] return root.replace('\\', '_').replace('/', '_') def source_file(self): """Return an open file for reading the source of the code unit.""" return open(self.filename) eric4-4.5.18/eric/DebugClients/Python3/coverage/PaxHeaders.8617/htmlfiles0000644000175000001440000000007411706605624024146 xustar000000000000000030 atime=1389081086.015724339 30 ctime=1389081086.315724332 eric4-4.5.18/eric/DebugClients/Python3/coverage/htmlfiles/0000755000175000001440000000000011706605624023750 5ustar00detlevusers00000000000000eric4-4.5.18/eric/DebugClients/Python3/coverage/htmlfiles/PaxHeaders.8617/style.css0000644000175000001440000000007411246351210026061 xustar000000000000000030 atime=1389081085.457724353 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python3/coverage/htmlfiles/style.css0000644000175000001440000000526211246351210025613 0ustar00detlevusers00000000000000/* CSS styles for Coverage. */ /* Page-wide styles */ html, body, h1, h2, h3, p, td, th { margin: 0; padding: 0; border: 0; outline: 0; font-weight: inherit; font-style: inherit; font-size: 100%; font-family: inherit; vertical-align: baseline; } /* Set baseline grid to 16 pt. */ body { font-family: georgia, serif; font-size: 1em; } html>body { font-size: 16px; } /* Set base font size to 12/16 */ p { font-size: .75em; /* 12/16 */ line-height: 1.3333em; /* 16/12 */ } table { border-collapse: collapse; } a.nav { text-decoration: none; color: inherit; } a.nav:hover { text-decoration: underline; color: inherit; } /* Page structure */ #header { background: #f8f8f8; width: 100%; border-bottom: 1px solid #eee; } #source { padding: 1em; font-family: "courier new", monospace; } #footer { font-size: 85%; font-family: verdana, sans-serif; color: #666666; font-style: italic; } #index { margin: 1em 0 0 3em; } /* Header styles */ .content { padding: 1em 3em; } h1 { font-size: 1.25em; } h2.stats { margin-top: .5em; font-size: 1em; } .stats span { border: 1px solid; padding: .1em .25em; margin: 0 .1em; cursor: pointer; border-color: #999 #ccc #ccc #999; } .stats span.hide { border-color: #ccc #999 #999 #ccc; } /* Source file styles */ .linenos p { text-align: right; margin: 0; padding: 0 .5em; color: #999999; font-family: verdana, sans-serif; font-size: .625em; /* 10/16 */ line-height: 1.6em; /* 16/10 */ } td.text { width: 100%; } .text p { margin: 0; padding: 0 0 0 .5em; border-left: 2px solid #ffffff; white-space: nowrap; } .text p.mis { background: #ffdddd; border-left: 2px solid #ff0000; } .text p.run { background: #ddffdd; border-left: 2px solid #00ff00; } .text p.exc { background: #eeeeee; border-left: 2px solid #808080; } .text p.hide { background: inherit; } /* index styles */ #index td, #index th { text-align: right; width: 6em; padding: .25em 0; border-bottom: 1px solid #eee; } #index th { font-style: italic; color: #333; border-bottom: 1px solid #ccc; } #index td.name, #index th.name { text-align: left; width: auto; height: 1.5em; } #index td.name a { text-decoration: none; color: #000; } #index td.name a:hover { text-decoration: underline; color: #000; } #index tr.total { font-weight: bold; } #index tr.total td { padding: .25em 0; border-top: 1px solid #ccc; border-bottom: none; } eric4-4.5.18/eric/DebugClients/Python3/coverage/htmlfiles/PaxHeaders.8617/jquery-1.3.2.min.js0000644000175000001440000000007411246351210027305 xustar000000000000000030 atime=1389081085.458724353 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python3/coverage/htmlfiles/jquery-1.3.2.min.js0000644000175000001440000015764611246351210027055 0ustar00detlevusers00000000000000/* * jQuery JavaScript Library v1.3.2 * http://jquery.com/ * * Copyright (c) 2009 John Resig * Dual licensed under the MIT and GPL licenses. * http://docs.jquery.com/License * * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009) * Revision: 6246 */ (function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("",""]||!O.indexOf("",""]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"","
    "]||!O.indexOf("",""]||(!O.indexOf("",""]||!O.indexOf("",""]||!o.support.htmlSerialize&&[1,"div
    ","
    "]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}}); /* * Sizzle CSS Selector Engine - v0.9.3 * Copyright 2009, The Dojo Foundation * Released under the MIT, BSD, and GPL Licenses. * More information: http://sizzlejs.com/ */ (function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return UT[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="
    ";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="

    ";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="
    ";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("
    ").append(M.responseText.replace(//g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='
    ';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})();eric4-4.5.18/eric/DebugClients/Python3/coverage/htmlfiles/PaxHeaders.8617/index.html0000644000175000001440000000007411246351210026204 xustar000000000000000030 atime=1389081085.458724353 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python3/coverage/htmlfiles/index.html0000644000175000001440000000232011246351210025726 0ustar00detlevusers00000000000000 Coverage report
    {% for file in files %} {% endfor %}
    Module statements run excluded coverage
    {{file.cu.name}} {{file.stm}} {{file.run}} {{file.exc}} {{file.pc_cov|format_pct}}%
    Total {{total_stm}} {{total_run}} {{total_exc}} {{total_cov|format_pct}}%
    eric4-4.5.18/eric/DebugClients/Python3/coverage/htmlfiles/PaxHeaders.8617/pyfile.html0000644000175000001440000000007411246351210026365 xustar000000000000000030 atime=1389081085.458724353 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python3/coverage/htmlfiles/pyfile.html0000644000175000001440000000304611246351210026115 0ustar00detlevusers00000000000000 Coverage for {{cu.name|escape}}
    {% for line in lines %}

    {{line.number}}

    {% endfor %}
    {% for line in lines %}

    {{line.text.rstrip|escape|not_empty}}

    {% endfor %}
    eric4-4.5.18/eric/DebugClients/Python3/coverage/PaxHeaders.8617/annotate.py0000644000175000001440000000013112261012651024376 xustar000000000000000029 mtime=1388582313.88610099 30 atime=1389081085.458724353 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python3/coverage/annotate.py0000644000175000001440000000552012261012651024133 0ustar00detlevusers00000000000000"""Source file annotation for Coverage.""" import os, re from .report import Reporter class AnnotateReporter(Reporter): """Generate annotated source files showing line coverage. This reporter creates annotated copies of the measured source files. Each .py file is copied as a .py,cover file, with a left-hand margin annotating each line:: > def h(x): - if 0: #pragma: no cover - pass > if x == 1: ! a = 1 > else: > a = 2 > h(2) Executed lines use '>', lines not executed use '!', lines excluded from consideration use '-'. """ def __init__(self, coverage, ignore_errors=False): super(AnnotateReporter, self).__init__(coverage, ignore_errors) self.directory = None blank_re = re.compile(r"\s*(#|$)") else_re = re.compile(r"\s*else\s*:\s*(#|$)") def report(self, morfs, directory=None, omit_prefixes=None): """Run the report.""" self.report_files(self.annotate_file, morfs, directory, omit_prefixes) def annotate_file(self, cu, statements, excluded, missing): """Annotate a single file. `cu` is the CodeUnit for the file to annotate. """ filename = cu.filename source = cu.source_file() if self.directory: dest_file = os.path.join(self.directory, cu.flat_rootname()) dest_file += ".py,cover" else: dest_file = filename + ",cover" dest = open(dest_file, 'w') lineno = 0 i = 0 j = 0 covered = True while True: line = source.readline() if line == '': break lineno += 1 while i < len(statements) and statements[i] < lineno: i += 1 while j < len(missing) and missing[j] < lineno: j += 1 if i < len(statements) and statements[i] == lineno: covered = j >= len(missing) or missing[j] > lineno if self.blank_re.match(line): dest.write(' ') elif self.else_re.match(line): # Special logic for lines containing only 'else:'. if i >= len(statements) and j >= len(missing): dest.write('! ') elif i >= len(statements) or j >= len(missing): dest.write('> ') elif statements[i] == missing[j]: dest.write('! ') else: dest.write('> ') elif lineno in excluded: dest.write('- ') elif covered: dest.write('> ') else: dest.write('! ') dest.write(line) source.close() dest.close()eric4-4.5.18/eric/DebugClients/Python3/coverage/PaxHeaders.8617/summary.py0000644000175000001440000000013212261012651024263 xustar000000000000000030 mtime=1388582313.888101015 30 atime=1389081085.458724353 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python3/coverage/summary.py0000644000175000001440000000504412261012651024020 0ustar00detlevusers00000000000000"""Summary reporting""" import sys from .report import Reporter class SummaryReporter(Reporter): """A reporter for writing the summary report.""" def __init__(self, coverage, show_missing=True, ignore_errors=False): super(SummaryReporter, self).__init__(coverage, ignore_errors) self.show_missing = show_missing def report(self, morfs, omit_prefixes=None, outfile=None): """Writes a report summarizing coverage statistics per module.""" self.find_code_units(morfs, omit_prefixes) # Prepare the formatting strings max_name = max([len(cu.name) for cu in self.code_units] + [5]) fmt_name = "%%- %ds " % max_name fmt_err = "%s %s: %s\n" header = fmt_name % "Name" + " Stmts Exec Cover\n" fmt_coverage = fmt_name + "% 6d % 6d % 5d%%\n" if self.show_missing: header = header.replace("\n", " Missing\n") fmt_coverage = fmt_coverage.replace("\n", " %s\n") rule = "-" * (len(header)-1) + "\n" if not outfile: outfile = sys.stdout # Write the header outfile.write(header) outfile.write(rule) total_statements = 0 total_executed = 0 total_units = 0 for cu in self.code_units: try: statements, _, missing, readable = self.coverage._analyze(cu) n = len(statements) m = n - len(missing) if n > 0: pc = 100.0 * m / n else: pc = 100.0 args = (cu.name, n, m, pc) if self.show_missing: args = args + (readable,) outfile.write(fmt_coverage % args) total_units += 1 total_statements = total_statements + n total_executed = total_executed + m except KeyboardInterrupt: #pragma: no cover raise except: if not self.ignore_errors: typ, msg = sys.exc_info()[:2] outfile.write(fmt_err % (cu.name, typ.__name__, msg)) if total_units > 1: outfile.write(rule) if total_statements > 0: pc = 100.0 * total_executed / total_statements else: pc = 100.0 args = ("TOTAL", total_statements, total_executed, pc) if self.show_missing: args = args + ("",) outfile.write(fmt_coverage % args)eric4-4.5.18/eric/DebugClients/Python3/coverage/PaxHeaders.8617/data.py0000644000175000001440000000013212261012651023477 xustar000000000000000030 mtime=1388582313.890101041 30 atime=1389081085.458724353 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python3/coverage/data.py0000644000175000001440000001365412261012651023242 0ustar00detlevusers00000000000000"""Coverage data for Coverage.""" import os import pickle as pickle from .backward import sorted # pylint: disable-msg=W0622 class CoverageData: """Manages collected coverage data, including file storage. The data file format is a pickled dict, with these keys: * collector: a string identifying the collecting software * lines: a dict mapping filenames to sorted lists of line numbers executed: { 'file1': [17,23,45], 'file2': [1,2,3], ... } """ # Name of the data file (unless environment variable is set). filename_default = ".coverage" # Environment variable naming the data file. filename_env = "COVERAGE_FILE" def __init__(self, basename=None, suffix=None, collector=None): """Create a CoverageData. `basename` is the name of the file to use for storing data. `suffix` is a suffix to append to the base file name. This can be used for multiple or parallel execution, so that many coverage data files can exist simultaneously. `collector` is a string describing the coverage measurement software. """ self.basename = basename self.collector = collector self.suffix = suffix self.use_file = True self.filename = None # A map from canonical Python source file name to a dictionary in # which there's an entry for each line number that has been # executed: # # { # 'filename1.py': { 12: True, 47: True, ... }, # ... # } # self.lines = {} def usefile(self, use_file=True): """Set whether or not to use a disk file for data.""" self.use_file = use_file def _make_filename(self): """Construct the filename that will be used for data file storage.""" assert self.use_file if not self.filename: self.filename = (self.basename or os.environ.get(self.filename_env, self.filename_default)) if self.suffix: self.filename += self.suffix def read(self): """Read coverage data from the coverage data file (if it exists).""" data = {} if self.use_file: self._make_filename() data = self._read_file(self.filename) self.lines = data def write(self): """Write the collected coverage data to a file.""" if self.use_file: self._make_filename() self.write_file(self.filename) def erase(self): """Erase the data, both in this object, and from its file storage.""" if self.use_file: self._make_filename() if self.filename and os.path.exists(self.filename): os.remove(self.filename) self.lines = {} def line_data(self): """Return the map from filenames to lists of line numbers executed.""" return dict( [(f, sorted(linemap.keys())) for f, linemap in list(self.lines.items())] ) def write_file(self, filename): """Write the coverage data to `filename`.""" # Create the file data. data = {} data['lines'] = self.line_data() if self.collector: data['collector'] = self.collector # Write the pickle to the file. fdata = open(filename, 'wb') try: pickle.dump(data, fdata) finally: fdata.close() def read_file(self, filename): """Read the coverage data from `filename`.""" self.lines = self._read_file(filename) def _read_file(self, filename): """Return the stored coverage data from the given file.""" try: fdata = open(filename, 'rb') try: data = pickle.load(fdata) finally: fdata.close() if isinstance(data, dict): # Unpack the 'lines' item. lines = dict([ (f, dict([(l, True) for l in linenos])) for f,linenos in list(data['lines'].items()) ]) return lines else: return {} except Exception: return {} def combine_parallel_data(self): """ Treat self.filename as a file prefix, and combine the data from all of the files starting with that prefix. """ self._make_filename() data_dir, local = os.path.split(self.filename) for f in os.listdir(data_dir or '.'): if f.startswith(local): full_path = os.path.join(data_dir, f) new_data = self._read_file(full_path) for filename, file_data in list(new_data.items()): self.lines.setdefault(filename, {}).update(file_data) def add_line_data(self, data_points): """Add executed line data. `data_points` is (filename, lineno) pairs. """ for filename, lineno in data_points: self.lines.setdefault(filename, {})[lineno] = True def executed_files(self): """A list of all files that had been measured as executed.""" return list(self.lines.keys()) def executed_lines(self, filename): """A map containing all the line numbers executed in `filename`. If `filename` hasn't been collected at all (because it wasn't executed) then return an empty map. """ return self.lines.get(filename) or {} def summary(self): """Return a dict summarizing the coverage data. Keys are the basename of the filenames, and values are the number of executed lines. This is useful in the unit tests. """ summ = {} for filename, lines in list(self.lines.items()): summ[os.path.basename(filename)] = len(lines) return summeric4-4.5.18/eric/DebugClients/Python3/coverage/PaxHeaders.8617/backward.py0000644000175000001440000000013212261012651024344 xustar000000000000000030 mtime=1388582313.892101066 30 atime=1389081085.459724352 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python3/coverage/backward.py0000644000175000001440000000111612261012651024075 0ustar00detlevusers00000000000000"""Add things to old Pythons so I can pretend they are newer.""" # pylint: disable-msg=W0622 # (Redefining built-in blah) # The whole point of this file is to redefine built-ins, so shut up about it. # Python 2.3 doesn't have `set` try: set = set # new in 2.4 except NameError: # (Redefining built-in 'set') from sets import Set as set # Python 2.3 doesn't have `sorted`. try: sorted = sorted except NameError: def sorted(iterable): """A 2.3-compatible implementation of `sorted`.""" lst = list(iterable) lst.sort() return lst eric4-4.5.18/eric/DebugClients/Python3/coverage/PaxHeaders.8617/report.py0000644000175000001440000000013212261012651024101 xustar000000000000000030 mtime=1388582313.895101104 30 atime=1389081085.459724352 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python3/coverage/report.py0000644000175000001440000000400012261012651023625 0ustar00detlevusers00000000000000"""Reporter foundation for Coverage.""" import os from .codeunit import code_unit_factory class Reporter(object): """A base class for all reporters.""" def __init__(self, coverage, ignore_errors=False): """Create a reporter. `coverage` is the coverage instance. `ignore_errors` controls how skittish the reporter will be during file processing. """ self.coverage = coverage self.ignore_errors = ignore_errors # The code units to report on. Set by find_code_units. self.code_units = [] # The directory into which to place the report, used by some derived # classes. self.directory = None def find_code_units(self, morfs, omit_prefixes): """Find the code units we'll report on. `morfs` is a list of modules or filenames. `omit_prefixes` is a list of prefixes to leave out of the list. """ morfs = morfs or self.coverage.data.executed_files() self.code_units = code_unit_factory( morfs, self.coverage.file_locator, omit_prefixes) self.code_units.sort() def report_files(self, report_fn, morfs, directory=None, omit_prefixes=None): """Run a reporting function on a number of morfs. `report_fn` is called for each relative morf in `morfs`. """ self.find_code_units(morfs, omit_prefixes) self.directory = directory if self.directory and not os.path.exists(self.directory): os.makedirs(self.directory) for cu in self.code_units: try: if not cu.relative: continue statements, excluded, missing, _ = self.coverage._analyze(cu) report_fn(cu, statements, excluded, missing) except KeyboardInterrupt: raise except: if not self.ignore_errors: raise eric4-4.5.18/eric/DebugClients/Python3/coverage/PaxHeaders.8617/files.py0000644000175000001440000000013212261012651023670 xustar000000000000000030 mtime=1388582313.897101129 30 atime=1389081085.459724352 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python3/coverage/files.py0000644000175000001440000000455212261012651023430 0ustar00detlevusers00000000000000"""File wrangling.""" import os, sys class FileLocator: """Understand how filenames work.""" def __init__(self): self.relative_dir = self.abs_file(os.curdir) + os.sep # Cache of results of calling the canonical_filename() method, to # avoid duplicating work. self.canonical_filename_cache = {} def abs_file(self, filename): """Return the absolute normalized form of `filename`.""" return os.path.normcase(os.path.abspath(os.path.realpath(filename))) def relative_filename(self, filename): """Return the relative form of `filename`. The filename will be relative to the current directory when the FileLocator was constructed. """ return filename.replace(self.relative_dir, "") def canonical_filename(self, filename): """Return a canonical filename for `filename`. An absolute path with no redundant components and normalized case. """ if filename not in self.canonical_filename_cache: f = filename if os.path.isabs(f) and not os.path.exists(f): if not self.get_zip_data(f): f = os.path.basename(f) if not os.path.isabs(f): for path in [os.curdir] + sys.path: g = os.path.join(path, f) if os.path.exists(g): f = g break cf = self.abs_file(f) self.canonical_filename_cache[filename] = cf return self.canonical_filename_cache[filename] def get_zip_data(self, filename): """Get data from `filename` if it is a zip file path. Returns the data read from the zip file, or None if no zip file could be found or `filename` isn't in it. """ import zipimport markers = ['.zip'+os.sep, '.egg'+os.sep] for marker in markers: if marker in filename: parts = filename.split(marker) try: zi = zipimport.zipimporter(parts[0]+marker[:-1]) except zipimport.ZipImportError: continue try: data = zi.get_data(parts[1]) except IOError: continue return data return None eric4-4.5.18/eric/DebugClients/Python3/coverage/PaxHeaders.8617/__init__.py0000644000175000001440000000013212261012651024325 xustar000000000000000030 mtime=1388582313.899101154 30 atime=1389081085.459724352 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python3/coverage/__init__.py0000644000175000001440000000604512261012651024064 0ustar00detlevusers00000000000000"""Code coverage measurement for Python. Ned Batchelder http://nedbatchelder.com/code/coverage """ __version__ = "3.0.1" # see detailed history in CHANGES.txt from .control import coverage from .data import CoverageData from .cmdline import main, CoverageScript from .misc import CoverageException # Module-level functions. The original API to this module was based on # functions defined directly in the module, with a singleton of the coverage() # class. That design hampered programmability. Here we define the top-level # functions to create the singleton when they are first called. # Singleton object for use with module-level functions. The singleton is # created as needed when one of the module-level functions is called. _the_coverage = None def _singleton_method(name): """Return a function to the `name` method on a singleton `coverage` object. The singleton object is created the first time one of these functions is called. """ def wrapper(*args, **kwargs): """Singleton wrapper around a coverage method.""" global _the_coverage if not _the_coverage: _the_coverage = coverage(auto_data=True) return getattr(_the_coverage, name)(*args, **kwargs) return wrapper # Define the module-level functions. use_cache = _singleton_method('use_cache') start = _singleton_method('start') stop = _singleton_method('stop') erase = _singleton_method('erase') exclude = _singleton_method('exclude') analysis = _singleton_method('analysis') analysis2 = _singleton_method('analysis2') report = _singleton_method('report') annotate = _singleton_method('annotate') # COPYRIGHT AND LICENSE # # Copyright 2001 Gareth Rees. All rights reserved. # Copyright 2004-2009 Ned Batchelder. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are # met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the # distribution. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT # HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS # OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR # TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE # USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH # DAMAGE.eric4-4.5.18/eric/DebugClients/Python3/coverage/PaxHeaders.8617/html.py0000644000175000001440000000013112261012651023531 xustar000000000000000029 mtime=1388582313.90110118 30 atime=1389081085.459724352 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python3/coverage/html.py0000644000175000001440000001262712261012651023274 0ustar00detlevusers00000000000000"""HTML reporting for Coverage.""" import os, re, shutil from . import __version__ # pylint: disable-msg=W0611 from .report import Reporter from .templite import Templite # Disable pylint msg W0612, because a bunch of variables look unused, but # they're accessed in a templite context via locals(). # pylint: disable-msg=W0612 def data_filename(fname): """Return the path to a data file of ours.""" return os.path.join(os.path.split(__file__)[0], fname) def data(fname): """Return the contents of a data file of ours.""" return open(data_filename(fname)).read() class HtmlReporter(Reporter): """HTML reporting.""" def __init__(self, coverage, ignore_errors=False): super(HtmlReporter, self).__init__(coverage, ignore_errors) self.directory = None self.source_tmpl = Templite(data("htmlfiles/pyfile.html"), globals()) self.files = [] def report(self, morfs, directory, omit_prefixes=None): """Generate an HTML report for `morfs`. `morfs` is a list of modules or filenames. `directory` is where to put the HTML files. `omit_prefixes` is a list of strings, prefixes of modules to omit from the report. """ assert directory, "must provide a directory for html reporting" # Process all the files. self.report_files(self.html_file, morfs, directory, omit_prefixes) # Write the index file. self.index_file() # Create the once-per-directory files. shutil.copyfile( data_filename("htmlfiles/style.css"), os.path.join(directory, "style.css") ) shutil.copyfile( data_filename("htmlfiles/jquery-1.3.2.min.js"), os.path.join(directory, "jquery-1.3.2.min.js") ) def html_file(self, cu, statements, excluded, missing): """Generate an HTML file for one source file.""" source = cu.source_file() source_lines = source.readlines() n_lin = len(source_lines) n_stm = len(statements) n_exc = len(excluded) n_mis = len(missing) n_run = n_stm - n_mis if n_stm > 0: pc_cov = 100.0 * n_run / n_stm else: pc_cov = 100.0 # These classes determine which lines are highlighted by default. c_run = " run hide" c_exc = " exc" c_mis = " mis" lines = [] for lineno, line in enumerate(source_lines): lineno += 1 # enum is 0-based, lines are 1-based. css_class = "" if lineno in statements: css_class += " stm" if lineno not in missing and lineno not in excluded: css_class += c_run if lineno in excluded: css_class += c_exc if lineno in missing: css_class += c_mis lineinfo = { 'text': line, 'number': lineno, 'class': css_class.strip() or "pln" } lines.append(lineinfo) # Write the HTML page for this file. html_filename = cu.flat_rootname() + ".html" html_path = os.path.join(self.directory, html_filename) html = spaceless(self.source_tmpl.render(locals())) fhtml = open(html_path, 'w') fhtml.write(html) fhtml.close() # Save this file's information for the index file. self.files.append({ 'stm': n_stm, 'run': n_run, 'exc': n_exc, 'mis': n_mis, 'pc_cov': pc_cov, 'html_filename': html_filename, 'cu': cu, }) def index_file(self): """Write the index.html file for this report.""" index_tmpl = Templite(data("htmlfiles/index.html"), globals()) files = self.files total_stm = sum([f['stm'] for f in files]) total_run = sum([f['run'] for f in files]) total_exc = sum([f['exc'] for f in files]) if total_stm: total_cov = 100.0 * total_run / total_stm else: total_cov = 100.0 fhtml = open(os.path.join(self.directory, "index.html"), "w") fhtml.write(index_tmpl.render(locals())) fhtml.close() # Helpers for templates def escape(t): """HTML-escape the text in t.""" return (t # Change all tabs to 4 spaces. .expandtabs(4) # Convert HTML special chars into HTML entities. .replace("&", "&").replace("<", "<").replace(">", ">") .replace("'", "'").replace('"', """) # Convert runs of spaces: " " -> "      " .replace(" ", "  ") # To deal with odd-length runs, convert the final pair of spaces # so that " " -> "     " .replace(" ", "  ") ) def not_empty(t): """Make sure HTML content is not completely empty.""" return t or " " def format_pct(p): """Format a percentage value for the HTML reports.""" return "%.0f" % p def spaceless(html): """Squeeze out some annoying extra space from an HTML string. Nicely-formatted templates mean lots of extra space in the result. Get rid of some. """ html = re.sub(">\s+

    \n

    ': # There's no point in ever tracing string executions, we can't do # anything with the data later anyway. return False # Compiled Python files have two filenames: frame.f_code.co_filename is # the filename at the time the .pyc was compiled. The second name # is __file__, which is where the .pyc was actually loaded from. Since # .pyc files can be moved after compilation (for example, by being # installed), we look for __file__ in the frame and prefer it to the # co_filename value. dunder_file = frame.f_globals.get('__file__') if dunder_file: if not dunder_file.endswith(".py"): if dunder_file[-4:-1] == ".py": dunder_file = dunder_file[:-1] filename = dunder_file canonical = self.file_locator.canonical_filename(filename) # If we aren't supposed to trace installed code, then check if this is # near the Python standard library and skip it if so. if not self.cover_pylib: if canonical.startswith(self.pylib_prefix): return False # We exclude the coverage code itself, since a little of it will be # measured otherwise. if canonical.startswith(self.cover_prefix): return False return canonical def use_cache(self, usecache): """Control the use of a data file (incorrectly called a cache). `usecache` is true or false, whether to read and write data on disk. """ self.data.usefile(usecache) def load(self): """Load previously-collected coverage data from the data file.""" self.collector.reset() self.data.read() def start(self): """Start measuring code coverage.""" if self.auto_data: self.load() # Save coverage data when Python exits. import atexit atexit.register(self.save) self.collector.start() def stop(self): """Stop measuring code coverage.""" self.collector.stop() self._harvest_data() def erase(self): """Erase previously-collected coverage data. This removes the in-memory data collected in this session as well as discarding the data file. """ self.collector.reset() self.data.erase() def clear_exclude(self): """Clear the exclude list.""" self.exclude_list = [] self.exclude_re = "" def exclude(self, regex): """Exclude source lines from execution consideration. `regex` is a regular expression. Lines matching this expression are not considered executable when reporting code coverage. A list of regexes is maintained; this function adds a new regex to the list. Matching any of the regexes excludes a source line. """ self.exclude_list.append(regex) self.exclude_re = "(" + ")|(".join(self.exclude_list) + ")" def get_exclude_list(self): """Return the list of excluded regex patterns.""" return self.exclude_list def save(self): """Save the collected coverage data to the data file.""" self._harvest_data() self.data.write() def combine(self): """Combine together a number of similarly-named coverage data files. All coverage data files whose name starts with `data_file` (from the coverage() constructor) will be read, and combined together into the current measurements. """ self.data.combine_parallel_data() def _harvest_data(self): """Get the collected data by filename and reset the collector.""" self.data.add_line_data(self.collector.data_points()) self.collector.reset() # Backward compatibility with version 1. def analysis(self, morf): """Like `analysis2` but doesn't return excluded line numbers.""" f, s, _, m, mf = self.analysis2(morf) return f, s, m, mf def analysis2(self, morf): """Analyze a module. `morf` is a module or a filename. It will be analyzed to determine its coverage statistics. The return value is a 5-tuple: * The filename for the module. * A list of line numbers of executable statements. * A list of line numbers of excluded statements. * A list of line numbers of statements not run (missing from execution). * A readable formatted string of the missing line numbers. The analysis uses the source file itself and the current measured coverage data. """ code_unit = code_unit_factory(morf, self.file_locator)[0] st, ex, m, mf = self._analyze(code_unit) return code_unit.filename, st, ex, m, mf def _analyze(self, code_unit): """Analyze a single code unit. Returns a 4-tuple: (statements, excluded, missing, missing formatted). """ from .parser import CodeParser filename = code_unit.filename ext = os.path.splitext(filename)[1] source = None if ext == '.py': if not os.path.exists(filename): source = self.file_locator.get_zip_data(filename) if not source: raise CoverageException( "No source for code '%s'." % code_unit.filename ) parser = CodeParser() statements, excluded, line_map = parser.parse_source( text=source, filename=filename, exclude=self.exclude_re ) # Identify missing statements. missing = [] execed = self.data.executed_lines(filename) for line in statements: lines = line_map.get(line) if lines: for l in range(lines[0], lines[1]+1): if l in execed: break else: missing.append(line) else: if line not in execed: missing.append(line) return ( statements, excluded, missing, format_lines(statements, missing) ) def report(self, morfs=None, show_missing=True, ignore_errors=False, file=None, omit_prefixes=None): # pylint: disable-msg=W0622 """Write a summary report to `file`. Each module in `morfs` is listed, with counts of statements, executed statements, missing statements, and a list of lines missed. """ reporter = SummaryReporter(self, show_missing, ignore_errors) reporter.report(morfs, outfile=file, omit_prefixes=omit_prefixes) def annotate(self, morfs=None, directory=None, ignore_errors=False, omit_prefixes=None): """Annotate a list of modules. Each module in `morfs` is annotated. The source is written to a new file, named with a ",cover" suffix, with each line prefixed with a marker to indicate the coverage of the line. Covered lines have ">", excluded lines have "-", and missing lines have "!". """ reporter = AnnotateReporter(self, ignore_errors) reporter.report( morfs, directory=directory, omit_prefixes=omit_prefixes) def html_report(self, morfs=None, directory=None, ignore_errors=False, omit_prefixes=None): """Generate an HTML report. """ reporter = HtmlReporter(self, ignore_errors) reporter.report( morfs, directory=directory, omit_prefixes=omit_prefixes)eric4-4.5.18/eric/DebugClients/Python3/coverage/PaxHeaders.8617/cmdline.py0000644000175000001440000000013212261012651024201 xustar000000000000000030 mtime=1388582313.906101243 30 atime=1389081085.470724352 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python3/coverage/cmdline.py0000644000175000001440000001445112261012651023740 0ustar00detlevusers00000000000000"""Command-line support for Coverage.""" import getopt, sys from .execfile import run_python_file USAGE = r""" Coverage version %(__version__)s Measure, collect, and report on code coverage in Python programs. Usage: coverage -x [-p] [-L] MODULE.py [ARG1 ARG2 ...] Execute the module, passing the given command-line arguments, collecting coverage data. With the -p option, include the machine name and process ID in the .coverage file name. With -L, measure coverage even inside the Python installed library, which isn't done by default. coverage -e Erase collected coverage data. coverage -c Combine data from multiple coverage files (as created by -p option above) and store it into a single file representing the union of the coverage. coverage -r [-m] [-i] [-o DIR,...] [FILE1 FILE2 ...] Report on the statement coverage for the given files. With the -m option, show line numbers of the statements that weren't executed. coverage -b -d DIR [-i] [-o DIR,...] [FILE1 FILE2 ...] Create an HTML report of the coverage of the given files. Each file gets its own page, with the file listing decorated to show executed, excluded, and missed lines. coverage -a [-d DIR] [-i] [-o DIR,...] [FILE1 FILE2 ...] Make annotated copies of the given files, marking statements that are executed with > and statements that are missed with !. -d DIR Write output files for -b or -a to this directory. -i Ignore errors while reporting or annotating. -o DIR,... Omit reporting or annotating files when their filename path starts with a directory listed in the omit list. e.g. coverage -i -r -o c:\python25,lib\enthought\traits -h Print this help. Coverage data is saved in the file .coverage by default. Set the COVERAGE_FILE environment variable to save it somewhere else. """.strip() class CoverageScript: """The command-line interface to Coverage.""" def __init__(self): import coverage self.covpkg = coverage self.coverage = None def help(self, error=None): """Display an error message, or the usage for Coverage.""" if error: print(error) print("Use -h for help.") else: print((USAGE % self.covpkg.__dict__)) def command_line(self, argv, help_fn=None): """The bulk of the command line interface to Coverage. `argv` is the argument list to process. `help_fn` is the help function to use when something goes wrong. """ # Collect the command-line options. help_fn = help_fn or self.help OK, ERR = 0, 1 settings = {} optmap = { '-a': 'annotate', '-b': 'html', '-c': 'combine', '-d:': 'directory=', '-e': 'erase', '-h': 'help', '-i': 'ignore-errors', '-L': 'pylib', '-m': 'show-missing', '-p': 'parallel-mode', '-r': 'report', '-x': 'execute', '-o:': 'omit=', } short_opts = ''.join([o[1:] for o in list(optmap.keys())]) long_opts = list(optmap.values()) options, args = getopt.getopt(argv, short_opts, long_opts) for o, a in options: if o in optmap: settings[optmap[o]] = True elif o + ':' in optmap: settings[optmap[o + ':']] = a elif o[2:] in long_opts: settings[o[2:]] = True elif o[2:] + '=' in long_opts: settings[o[2:]+'='] = a if settings.get('help'): help_fn() return OK # Check for conflicts and problems in the options. for i in ['erase', 'execute']: for j in ['annotate', 'html', 'report', 'combine']: if settings.get(i) and settings.get(j): help_fn("You can't specify the '%s' and '%s' " "options at the same time." % (i, j)) return ERR args_needed = (settings.get('execute') or settings.get('annotate') or settings.get('html') or settings.get('report')) action = (settings.get('erase') or settings.get('combine') or args_needed) if not action: help_fn( "You must specify at least one of -e, -x, -c, -r, -a, or -b." ) return ERR if not args_needed and args: help_fn("Unexpected arguments: %s" % " ".join(args)) return ERR # Do something. self.coverage = self.covpkg.coverage( data_suffix = bool(settings.get('parallel-mode')), cover_pylib = settings.get('pylib') ) if settings.get('erase'): self.coverage.erase() else: self.coverage.load() if settings.get('execute'): if not args: help_fn("Nothing to do.") return ERR # Run the script. self.coverage.start() try: run_python_file(args[0], args) finally: self.coverage.stop() self.coverage.save() if settings.get('combine'): self.coverage.combine() self.coverage.save() # Remaining actions are reporting, with some common options. show_missing = settings.get('show-missing') directory = settings.get('directory=') report_args = { 'morfs': args, 'ignore_errors': settings.get('ignore-errors'), } omit = settings.get('omit=') if omit: omit = omit.split(',') report_args['omit_prefixes'] = omit if settings.get('report'): self.coverage.report(show_missing=show_missing, **report_args) if settings.get('annotate'): self.coverage.annotate(directory=directory, **report_args) if settings.get('html'): self.coverage.html_report(directory=directory, **report_args) return OK def main(): """The main entrypoint to Coverage. This is installed as the script entrypoint. """ return CoverageScript().command_line(sys.argv[1:])eric4-4.5.18/eric/DebugClients/Python3/coverage/PaxHeaders.8617/templite.py0000644000175000001440000000013212261012651024411 xustar000000000000000030 mtime=1388582313.908101269 30 atime=1389081085.470724352 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python3/coverage/templite.py0000644000175000001440000000710712261012651024150 0ustar00detlevusers00000000000000"""A simple Python template renderer, for a nano-subset of Django syntax.""" # Started from http://blog.ianbicking.org/templating-via-dict-wrappers.html # and http://jtauber.com/2006/05/templates.html # and http://code.activestate.com/recipes/496730/ import re class Templite(object): """A simple template renderer, for a nano-subset of Django syntax. Supported constructs are extended variable access:: {{var.modifer.modifier|filter|filter}} and loops:: {% for var in list %}...{% endfor %} Construct a Templite with the template text, then use `render` against a dictionary context to create a finished string. """ def __init__(self, text, *contexts): """Construct a Templite with the given `text`. `contexts` are dictionaries of values to use for future renderings. These are good for filters and global values. """ self.loops = [] self.text = self._prepare(text) self.context = {} for context in contexts: self.context.update(context) def render(self, context=None): """Render this template by applying it to `context`. `context` is a dictionary of values to use in this rendering. """ # Make the complete context we'll use. ctx = dict(self.context) if context: ctx.update(context) ctxaccess = _ContextAccess(ctx) # Render the loops. for iloop, (loopvar, listvar, loopbody) in enumerate(self.loops): result = "" for listval in ctxaccess[listvar]: ctx[loopvar] = listval result += loopbody % ctxaccess ctx["loop:%d" % iloop] = result # Render the final template. return self.text % ctxaccess def _prepare(self, text): """Convert Django-style data references into Python-native ones.""" # Pull out loops. text = re.sub( r"(?s){% for ([a-z0-9_]+) in ([a-z0-9_.|]+) %}(.*?){% endfor %}", self._loop_prepare, text ) # Protect actual percent signs in the text. text = text.replace("%", "%%") # Convert {{foo}} into %(foo)s text = re.sub(r"{{([^}]+)}}", r"%(\1)s", text) return text def _loop_prepare(self, match): """Prepare a loop body for `_prepare`.""" nloop = len(self.loops) # Append (loopvar, listvar, loopbody) to self.loops loopvar, listvar, loopbody = match.groups() loopbody = self._prepare(loopbody) self.loops.append((loopvar, listvar, loopbody)) return "{{loop:%d}}" % nloop class _ContextAccess(object): """A mediator for a context. Implements __getitem__ on a context for Templite, so that string formatting references can pull data from the context. """ def __init__(self, context): self.context = context def __getitem__(self, key): if "|" in key: pipes = key.split("|") value = self[pipes[0]] for func in pipes[1:]: value = self[func](value) elif "." in key: dots = key.split('.') value = self[dots[0]] for dot in dots[1:]: try: value = getattr(value, dot) except AttributeError: value = value[dot] if hasattr(value, '__call__'): value = value() else: value = self.context[key] return value eric4-4.5.18/eric/DebugClients/Python3/coverage/PaxHeaders.8617/misc.py0000644000175000001440000000013212261012651023521 xustar000000000000000030 mtime=1388582313.910101294 30 atime=1389081085.471724352 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python3/coverage/misc.py0000644000175000001440000000260612261012651023257 0ustar00detlevusers00000000000000"""Miscellaneous stuff for Coverage.""" def nice_pair(pair): """Make a nice string representation of a pair of numbers. If the numbers are equal, just return the number, otherwise return the pair with a dash between them, indicating the range. """ start, end = pair if start == end: return "%d" % start else: return "%d-%d" % (start, end) def format_lines(statements, lines): """Nicely format a list of line numbers. Format a list of line numbers for printing by coalescing groups of lines as long as the lines represent consecutive statements. This will coalesce even if there are gaps between statements. For example, if `statements` is [1,2,3,4,5,10,11,12,13,14] and `lines` is [1,2,5,10,11,13,14] then the result will be "1-2, 5-11, 13-14". """ pairs = [] i = 0 j = 0 start = None pairs = [] while i < len(statements) and j < len(lines): if statements[i] == lines[j]: if start == None: start = lines[j] end = lines[j] j = j + 1 elif start: pairs.append((start, end)) start = None i = i + 1 if start: pairs.append((start, end)) ret = ', '.join(map(nice_pair, pairs)) return ret class CoverageException(Exception): """An exception specific to Coverage.""" pass eric4-4.5.18/eric/DebugClients/Python3/coverage/PaxHeaders.8617/doc0000644000175000001440000000007411706605624022724 xustar000000000000000030 atime=1389081086.015724339 30 ctime=1389081086.315724332 eric4-4.5.18/eric/DebugClients/Python3/coverage/doc/0000755000175000001440000000000011706605624022526 5ustar00detlevusers00000000000000eric4-4.5.18/eric/DebugClients/Python3/coverage/doc/PaxHeaders.8617/PKG-INFO0000644000175000001440000000007411250515720024065 xustar000000000000000030 atime=1389081085.471724352 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python3/coverage/doc/PKG-INFO0000644000175000001440000000207511250515720023616 0ustar00detlevusers00000000000000Metadata-Version: 1.0 Name: coverage Version: 3.0.1 Summary: Code coverage measurement for Python Home-page: http://nedbatchelder.com/code/coverage Author: Ned Batchelder Author-email: ned@nedbatchelder.com License: BSD Description: Coverage measures code coverage, typically during test execution. It uses the code analysis tools and tracing hooks provided in the Python standard library to determine which lines are executable, and which have been executed. Code repository and issue tracker are at `bitbucket.org `_. Keywords: code coverage testing Platform: UNKNOWN Classifier: Environment :: Console Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: BSD License Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python Classifier: Topic :: Software Development :: Quality Assurance Classifier: Topic :: Software Development :: Testing Classifier: Development Status :: 5 - Production/Stable eric4-4.5.18/eric/DebugClients/Python3/coverage/doc/PaxHeaders.8617/README.txt0000644000175000001440000000007411250515765024477 xustar000000000000000030 atime=1389081085.471724352 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python3/coverage/doc/README.txt0000644000175000001440000000064411250515765024230 0ustar00detlevusers00000000000000Coverage: code coverage testing for Python Coverage measures code coverage, typically during test execution. It uses the code analysis tools and tracing hooks provided in the Python standard library to determine which lines are executable, and which have been executed. For more information, see http://nedbatchelder.com/code/coverage Code repo and issue tracking are at http://bitbucket.org/ned/coveragepy eric4-4.5.18/eric/DebugClients/Python3/coverage/doc/PaxHeaders.8617/CHANGES.txt0000644000175000001440000000007411246351207024604 xustar000000000000000030 atime=1389081085.471724352 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python3/coverage/doc/CHANGES.txt0000644000175000001440000002031511246351207024332 0ustar00detlevusers00000000000000------------------------------ Change history for Coverage.py ------------------------------ Version 3.0.1, 7 July 2009 -------------------------- - Removed the recursion limit in the tracer function. Previously, code that ran more than 500 frames deep would crash. - Fixed a bizarre problem involving pyexpat, whereby lines following XML parser invocations could be overlooked. - On Python 2.3, coverage.py could mis-measure code with exceptions being raised. This is now fixed. - The coverage.py code itself will now not be measured by coverage.py, and no coverage modules will be mentioned in the nose --with-cover plugin. - When running source files, coverage.py now opens them in universal newline mode just like Python does. This lets it run Windows files on Mac, for example. Version 3.0, 13 June 2009 ------------------------- - Fixed the way the Python library was ignored. Too much code was being excluded the old way. - Tabs are now properly converted in HTML reports. Previously indentation was lost. - Nested modules now get a proper flat_rootname. Thanks, Christian Heimes. Version 3.0b3, 16 May 2009 -------------------------- - Added parameters to coverage.__init__ for options that had been set on the coverage object itself. - Added clear_exclude() and get_exclude_list() methods for programmatic manipulation of the exclude regexes. - Added coverage.load() to read previously-saved data from the data file. - Improved the finding of code files. For example, .pyc files that have been installed after compiling are now located correctly. Thanks, Detlev Offenbach. - When using the object api (that is, constructing a coverage() object), data is no longer saved automatically on process exit. You can re-enable it with the auto_data=True parameter on the coverage() constructor. The module-level interface still uses automatic saving. Version 3.0b2, 30 April 2009 ---------------------------- HTML reporting, and continued refactoring. - HTML reports and annotation of source files: use the new -b (browser) switch. Thanks to George Song for code, inspiration and guidance. - Code in the Python standard library is not measured by default. If you need to measure standard library code, use the -L command-line switch during execution, or the cover_pylib=True argument to the coverage() constructor. - Source annotation into a directory (-a -d) behaves differently. The annotated files are named with their hierarchy flattened so that same-named files from different directories no longer collide. Also, only files in the current tree are included. - coverage.annotate_file is no longer available. - Programs executed with -x now behave more as they should, for example, __file__ has the correct value. - .coverage data files have a new pickle-based format designed for better extensibility. - Removed the undocumented cache_file argument to coverage.usecache(). Version 3.0b1, 7 March 2009 --------------------------- Major overhaul. - Coverage is now a package rather than a module. Functionality has been split into classes. - The trace function is implemented in C for speed. Coverage runs are now much faster. Thanks to David Christian for productive micro-sprints and other encouragement. - Executable lines are identified by reading the line number tables in the compiled code, removing a great deal of complicated analysis code. - Precisely which lines are considered executable has changed in some cases. Therefore, your coverage stats may also change slightly. - The singleton coverage object is only created if the module-level functions are used. This maintains the old interface while allowing better programmatic use of Coverage. - The minimum supported Python version is 2.3. Version 2.85, 14 September 2008 ------------------------------- - Add support for finding source files in eggs. Don't check for morf's being instances of ModuleType, instead use duck typing so that pseudo-modules can participate. Thanks, Imri Goldberg. - Use os.realpath as part of the fixing of filenames so that symlinks won't confuse things. Thanks, Patrick Mezard. Version 2.80, 25 May 2008 ------------------------- - Open files in rU mode to avoid line ending craziness. Thanks, Edward Loper. Version 2.78, 30 September 2007 ------------------------------- - Don't try to predict whether a file is Python source based on the extension. Extensionless files are often Pythons scripts. Instead, simply parse the file and catch the syntax errors. Hat tip to Ben Finney. Version 2.77, 29 July 2007 -------------------------- - Better packaging. Version 2.76, 23 July 2007 -------------------------- - Now Python 2.5 is *really* fully supported: the body of the new with statement is counted as executable. Version 2.75, 22 July 2007 -------------------------- - Python 2.5 now fully supported. The method of dealing with multi-line statements is now less sensitive to the exact line that Python reports during execution. Pass statements are handled specially so that their disappearance during execution won't throw off the measurement. Version 2.7, 21 July 2007 ------------------------- - "#pragma: nocover" is excluded by default. - Properly ignore docstrings and other constant expressions that appear in the middle of a function, a problem reported by Tim Leslie. - coverage.erase() shouldn't clobber the exclude regex. Change how parallel mode is invoked, and fix erase() so that it erases the cache when called programmatically. - In reports, ignore code executed from strings, since we can't do anything useful with it anyway. - Better file handling on Linux, thanks Guillaume Chazarain. - Better shell support on Windows, thanks Noel O'Boyle. - Python 2.2 support maintained, thanks Catherine Proulx. - Minor changes to avoid lint warnings. Version 2.6, 23 August 2006 --------------------------- - Applied Joseph Tate's patch for function decorators. - Applied Sigve Tjora and Mark van der Wal's fixes for argument handling. - Applied Geoff Bache's parallel mode patch. - Refactorings to improve testability. Fixes to command-line logic for parallel mode and collect. Version 2.5, 4 December 2005 ---------------------------- - Call threading.settrace so that all threads are measured. Thanks Martin Fuzzey. - Add a file argument to report so that reports can be captured to a different destination. - coverage.py can now measure itself. - Adapted Greg Rogers' patch for using relative filenames, and sorting and omitting files to report on. Version 2.2, 31 December 2004 ----------------------------- - Allow for keyword arguments in the module global functions. Thanks, Allen. Version 2.1, 14 December 2004 ----------------------------- - Return 'analysis' to its original behavior and add 'analysis2'. Add a global for 'annotate', and factor it, adding 'annotate_file'. Version 2.0, 12 December 2004 ----------------------------- Significant code changes. - Finding executable statements has been rewritten so that docstrings and other quirks of Python execution aren't mistakenly identified as missing lines. - Lines can be excluded from consideration, even entire suites of lines. - The filesystem cache of covered lines can be disabled programmatically. - Modernized the code. Earlier History --------------- 2001-12-04 GDR Created. 2001-12-06 GDR Added command-line interface and source code annotation. 2001-12-09 GDR Moved design and interface to separate documents. 2001-12-10 GDR Open cache file as binary on Windows. Allow simultaneous -e and -x, or -a and -r. 2001-12-12 GDR Added command-line help. Cache analysis so that it only needs to be done once when you specify -a and -r. 2001-12-13 GDR Improved speed while recording. Portable between Python 1.5.2 and 2.1.1. 2002-01-03 GDR Module-level functions work correctly. 2002-01-07 GDR Update sys.path when running a file with the -x option, so that it matches the value the program would get if it were run on its own. eric4-4.5.18/eric/DebugClients/Python3/coverage/PaxHeaders.8617/execfile.py0000644000175000001440000000013212261012651024352 xustar000000000000000030 mtime=1388582313.912101319 30 atime=1389081085.471724352 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python3/coverage/execfile.py0000644000175000001440000000217512261012651024111 0ustar00detlevusers00000000000000"""Execute files of Python code.""" import imp, os, sys def run_python_file(filename, args): """Run a python file as if it were the main program on the command line. `filename` is the path to the file to execute, it need not be a .py file. `args` is the argument array to present as sys.argv, including the first element representing the file being executed. """ # Create a module to serve as __main__ old_main_mod = sys.modules['__main__'] main_mod = imp.new_module('__main__') sys.modules['__main__'] = main_mod main_mod.__file__ = filename main_mod.__builtins__ = sys.modules['__builtin__'] # Set sys.argv and the first path element properly. old_argv = sys.argv old_path0 = sys.path[0] sys.argv = args sys.path[0] = os.path.dirname(filename) try: source = open(filename, 'rU').read() exec(compile(source, filename, "exec"), main_mod.__dict__) finally: # Restore the old __main__ sys.modules['__main__'] = old_main_mod # Restore the old argv and path sys.argv = old_argv sys.path[0] = old_path0 eric4-4.5.18/eric/DebugClients/Python3/coverage/PaxHeaders.8617/collector.py0000644000175000001440000000013212261012651024554 xustar000000000000000030 mtime=1388582313.914101345 30 atime=1389081085.471724352 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python3/coverage/collector.py0000644000175000001440000001516012261012651024311 0ustar00detlevusers00000000000000"""Raw data collector for Coverage.""" import sys, threading try: # Use the C extension code when we can, for speed. from tracer import Tracer except ImportError: # Couldn't import the C extension, maybe it isn't built. class Tracer: """Python implementation of the raw data tracer.""" def __init__(self): self.data = None self.should_trace = None self.should_trace_cache = None self.cur_filename = None self.filename_stack = [] self.last_exc_back = None def _global_trace(self, frame, event, arg_unused): """The trace function passed to sys.settrace.""" if event == 'call': # Entering a new function context. Decide if we should trace # in this file. filename = frame.f_code.co_filename tracename = self.should_trace_cache.get(filename) if tracename is None: tracename = self.should_trace(filename, frame) self.should_trace_cache[filename] = tracename if tracename: # We need to trace. Push the current filename on the stack # and record the new current filename. self.filename_stack.append(self.cur_filename) self.cur_filename = tracename # Use _local_trace for tracing within this function. return self._local_trace else: # No tracing in this function. return None return self._global_trace def _local_trace(self, frame, event, arg_unused): """The trace function used within a function.""" if self.last_exc_back: if frame == self.last_exc_back: # Someone forgot a return event. self.cur_filename = self.filename_stack.pop() self.last_exc_back = None if event == 'line': # Record an executed line. self.data[(self.cur_filename, frame.f_lineno)] = True elif event == 'return': # Leaving this function, pop the filename stack. self.cur_filename = self.filename_stack.pop() elif event == 'exception': self.last_exc_back = frame.f_back return self._local_trace def start(self): """Start this Tracer.""" sys.settrace(self._global_trace) def stop(self): """Stop this Tracer.""" sys.settrace(None) class Collector: """Collects trace data. Creates a Tracer object for each thread, since they track stack information. Each Tracer points to the same shared data, contributing traced data points. When the Collector is started, it creates a Tracer for the current thread, and installs a function to create Tracers for each new thread started. When the Collector is stopped, all active Tracers are stopped. Threads started while the Collector is stopped will never have Tracers associated with them. """ # The stack of active Collectors. Collectors are added here when started, # and popped when stopped. Collectors on the stack are paused when not # the top, and resumed when they become the top again. _collectors = [] def __init__(self, should_trace): """Create a collector. `should_trace` is a function, taking a filename, and returning a canonicalized filename, or False depending on whether the file should be traced or not. """ self.should_trace = should_trace self.reset() def reset(self): """Clear collected data, and prepare to collect more.""" # A dictionary with an entry for (Python source file name, line number # in that file) if that line has been executed. self.data = {} # A cache of the results from should_trace, the decision about whether # to trace execution in a file. A dict of filename to (filename or # False). self.should_trace_cache = {} # Our active Tracers. self.tracers = [] def _start_tracer(self): """Start a new Tracer object, and store it in self.tracers.""" tracer = Tracer() tracer.data = self.data tracer.should_trace = self.should_trace tracer.should_trace_cache = self.should_trace_cache tracer.start() self.tracers.append(tracer) # The trace function has to be set individually on each thread before # execution begins. Ironically, the only support the threading module has # for running code before the thread main is the tracing function. So we # install this as a trace function, and the first time it's called, it does # the real trace installation. def _installation_trace(self, frame_unused, event_unused, arg_unused): """Called on new threads, installs the real tracer.""" # Remove ourselves as the trace function sys.settrace(None) # Install the real tracer. self._start_tracer() # Return None to reiterate that we shouldn't be used for tracing. return None def start(self): """Start collecting trace information.""" if self._collectors: self._collectors[-1].pause() self._collectors.append(self) # Install the tracer on this thread. self._start_tracer() # Install our installation tracer in threading, to jump start other # threads. threading.settrace(self._installation_trace) def stop(self): """Stop collecting trace information.""" assert self._collectors assert self._collectors[-1] is self for tracer in self.tracers: tracer.stop() self.tracers = [] threading.settrace(None) # Remove this Collector from the stack, and resume the one underneath # (if any). self._collectors.pop() if self._collectors: self._collectors[-1].resume() def pause(self): """Pause tracing, but be prepared to `resume`.""" for tracer in self.tracers: tracer.stop() threading.settrace(None) def resume(self): """Resume tracing after a `pause`.""" for tracer in self.tracers: tracer.start() threading.settrace(self._installation_trace) def data_points(self): """Return the (filename, lineno) pairs collected.""" return list(self.data.keys())eric4-4.5.18/eric/DebugClients/Python3/coverage/PaxHeaders.8617/parser.py0000644000175000001440000000013212261012651024062 xustar000000000000000030 mtime=1388582313.917101382 30 atime=1389081085.471724352 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python3/coverage/parser.py0000644000175000001440000002037012261012651023616 0ustar00detlevusers00000000000000"""Code parsing for Coverage.""" import re, token, tokenize, types import io as StringIO from .misc import nice_pair, CoverageException from .backward import set # pylint: disable-msg=W0622 class CodeParser: """Parse code to find executable lines, excluded lines, etc.""" def __init__(self, show_tokens=False): self.show_tokens = show_tokens # The text lines of the parsed code. self.lines = None # The line numbers of excluded lines of code. self.excluded = set() # The line numbers of docstring lines. self.docstrings = set() # A dict mapping line numbers to (lo,hi) for multi-line statements. self.multiline = {} # The line numbers that start statements. self.statement_starts = set() def find_statement_starts(self, code): """Find the starts of statements in compiled code. Uses co_lnotab described in Python/compile.c to find line numbers that start statements, adding them to `self.statement_starts`. """ # Adapted from dis.py in the standard library. byte_increments = [ord(c) for c in code.co_lnotab[0::2]] line_increments = [ord(c) for c in code.co_lnotab[1::2]] last_line_num = None line_num = code.co_firstlineno for byte_incr, line_incr in zip(byte_increments, line_increments): if byte_incr: if line_num != last_line_num: self.statement_starts.add(line_num) last_line_num = line_num line_num += line_incr if line_num != last_line_num: self.statement_starts.add(line_num) def find_statements(self, code): """Find the statements in `code`. Update `self.statement_starts`, a set of line numbers that start statements. Recurses into all code objects reachable from `code`. """ # Adapted from trace.py in the standard library. # Get all of the lineno information from this code. self.find_statement_starts(code) # Check the constants for references to other code objects. for c in code.co_consts: if isinstance(c, types.CodeType): # Found another code object, so recurse into it. self.find_statements(c) def raw_parse(self, text=None, filename=None, exclude=None): """Parse `text` to find the interesting facts about its lines. A handful of member fields are updated. """ if not text: sourcef = open(filename, 'rU') text = sourcef.read() sourcef.close() text = text.replace('\r\n', '\n') self.lines = text.split('\n') # Find lines which match an exclusion pattern. if exclude: re_exclude = re.compile(exclude) for i, ltext in enumerate(self.lines): if re_exclude.search(ltext): self.excluded.add(i+1) # Tokenize, to find excluded suites, to find docstrings, and to find # multi-line statements. indent = 0 exclude_indent = 0 excluding = False prev_toktype = token.INDENT first_line = None tokgen = tokenize.generate_tokens(io.StringIO(text).readline) for toktype, ttext, (slineno, _), (elineno, _), ltext in tokgen: if self.show_tokens: print(("%10s %5s %-20r %r" % ( tokenize.tok_name.get(toktype, toktype), nice_pair((slineno, elineno)), ttext, ltext ))) if toktype == token.INDENT: indent += 1 elif toktype == token.DEDENT: indent -= 1 elif toktype == token.OP and ttext == ':': if not excluding and elineno in self.excluded: # Start excluding a suite. We trigger off of the colon # token so that the #pragma comment will be recognized on # the same line as the colon. exclude_indent = indent excluding = True elif toktype == token.STRING and prev_toktype == token.INDENT: # Strings that are first on an indented line are docstrings. # (a trick from trace.py in the stdlib.) for i in range(slineno, elineno+1): self.docstrings.add(i) elif toktype == token.NEWLINE: if first_line is not None and elineno != first_line: # We're at the end of a line, and we've ended on a # different line than the first line of the statement, # so record a multi-line range. rng = (first_line, elineno) for l in range(first_line, elineno+1): self.multiline[l] = rng first_line = None if ttext.strip() and toktype != tokenize.COMMENT: # A non-whitespace token. if first_line is None: # The token is not whitespace, and is the first in a # statement. first_line = slineno # Check whether to end an excluded suite. if excluding and indent <= exclude_indent: excluding = False if excluding: self.excluded.add(elineno) prev_toktype = toktype # Find the starts of the executable statements. filename = filename or "" try: # Python 2.3 and 2.4 don't like partial last lines, so be sure the # text ends nicely for them. text += '\n' code = compile(text, filename, "exec") except SyntaxError as synerr: raise CoverageException( "Couldn't parse '%s' as Python source: '%s' at line %d" % (filename, synerr.msg, synerr.lineno) ) self.find_statements(code) def map_to_first_line(self, lines, ignore=None): """Map the line numbers in `lines` to the correct first line of the statement. Skip any line mentioned in `ignore`. Returns a sorted list of the first lines. """ ignore = ignore or [] lset = set() for l in lines: if l in ignore: continue rng = self.multiline.get(l) if rng: new_l = rng[0] else: new_l = l if new_l not in ignore: lset.add(new_l) lines = list(lset) lines.sort() return lines def parse_source(self, text=None, filename=None, exclude=None): """Parse source text to find executable lines, excluded lines, etc. Source can be provided as `text`, the text itself, or `filename`, from which text will be read. Excluded lines are those that match `exclude`, a regex. Return values are 1) a sorted list of executable line numbers, 2) a sorted list of excluded line numbers, and 3) a dict mapping line numbers to pairs (lo,hi) for multi-line statements. """ self.raw_parse(text, filename, exclude) excluded_lines = self.map_to_first_line(self.excluded) ignore = excluded_lines + list(self.docstrings) lines = self.map_to_first_line(self.statement_starts, ignore) return lines, excluded_lines, self.multiline def print_parse_results(self): """Print the results of the parsing.""" for i, ltext in enumerate(self.lines): lineno = i+1 m0 = m1 = m2 = ' ' if lineno in self.statement_starts: m0 = '-' if lineno in self.docstrings: m1 = '"' if lineno in self.excluded: m2 = 'x' print(("%4d %s%s%s %s" % (lineno, m0, m1, m2, ltext))) if __name__ == '__main__': import sys parser = CodeParser(show_tokens=True) parser.raw_parse(filename=sys.argv[1], exclude=r"no\s*cover") parser.print_parse_results()eric4-4.5.18/eric/DebugClients/Python3/PaxHeaders.8617/__init__.py0000644000175000001440000000013212261012651022532 xustar000000000000000030 mtime=1388582313.919101408 30 atime=1389081085.471724352 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python3/__init__.py0000644000175000001440000000031012261012651022256 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Package implementing the Python3 debugger It consists of different kinds of debug clients. """ eric4-4.5.18/eric/DebugClients/Python3/PaxHeaders.8617/DebugProtocol.py0000644000175000001440000000013212261012651023543 xustar000000000000000030 mtime=1388582313.921101433 30 atime=1389081085.479724352 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python3/DebugProtocol.py0000644000175000001440000000524512261012651023303 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module defining the debug protocol tokens. """ # The address used for debugger/client communications. DebugAddress = '127.0.0.1' # The protocol "words". RequestOK = '>OK?<' RequestEnv = '>Environment<' RequestCapabilities = '>Capabilities<' RequestLoad = '>Load<' RequestRun = '>Run<' RequestCoverage = '>Coverage<' RequestProfile = '>Profile<' RequestContinue = '>Continue<' RequestStep = '>Step<' RequestStepOver = '>StepOver<' RequestStepOut = '>StepOut<' RequestStepQuit = '>StepQuit<' RequestBreak = '>Break<' RequestBreakEnable = '>EnableBreak<' RequestBreakIgnore = '>IgnoreBreak<' RequestWatch = '>Watch<' RequestWatchEnable = '>EnableWatch<' RequestWatchIgnore = '>IgnoreWatch<' RequestVariables = '>Variables<' RequestVariable = '>Variable<' RequestSetFilter = '>SetFilter<' RequestThreadList = '>ThreadList<' RequestThreadSet = '>ThreadSet<' RequestEval = '>Eval<' RequestExec = '>Exec<' RequestShutdown = '>Shutdown<' RequestBanner = '>Banner<' RequestCompletion = '>Completion<' RequestUTPrepare = '>UTPrepare<' RequestUTRun = '>UTRun<' RequestUTStop = '>UTStop<' RequestForkTo = '>ForkTo<' RequestForkMode = '>ForkMode<' ResponseOK = '>OK<' ResponseCapabilities = RequestCapabilities ResponseContinue = '>Continue<' ResponseException = '>Exception<' ResponseSyntax = '>SyntaxError<' ResponseExit = '>Exit<' ResponseLine = '>Line<' ResponseRaw = '>Raw<' ResponseClearBreak = '>ClearBreak<' ResponseBPConditionError = '>BPConditionError<' ResponseClearWatch = '>ClearWatch<' ResponseWPConditionError = '>WPConditionError<' ResponseVariables = RequestVariables ResponseVariable = RequestVariable ResponseThreadList = RequestThreadList ResponseThreadSet = RequestThreadSet ResponseStack = '>CurrentStack<' ResponseBanner = RequestBanner ResponseCompletion = RequestCompletion ResponseUTPrepared = '>UTPrepared<' ResponseUTStartTest = '>UTStartTest<' ResponseUTStopTest = '>UTStopTest<' ResponseUTTestFailed = '>UTTestFailed<' ResponseUTTestErrored = '>UTTestErrored<' ResponseUTFinished = '>UTFinished<' ResponseForkTo = RequestForkTo PassiveStartup = '>PassiveStartup<' EOT = '>EOT<\n' eric4-4.5.18/eric/DebugClients/Python3/PaxHeaders.8617/FlexCompleter.py0000644000175000001440000000013212261012651023544 xustar000000000000000030 mtime=1388582313.923101459 30 atime=1389081085.479724352 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python3/FlexCompleter.py0000644000175000001440000001606112261012651023302 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- """ Word completion for the eric4 shell

    NOTE for eric4 variant

    This version is a re-implementation of rlcompleter as found in the Python3 library. It is modified to work with the eric4 debug clients.

    Original rlcompleter documentation

    This requires the latest extension to the readline module. The completer completes keywords, built-ins and globals in a selectable namespace (which defaults to __main__); when completing NAME.NAME..., it evaluates (!) the expression up to the last dot and completes its attributes. It's very cool to do "import sys" type "sys.", hit the completion key (twice), and see the list of names defined by the sys module! Tip: to use the tab key as the completion key, call readline.parse_and_bind("tab: complete") Notes:
    • Exceptions raised by the completer function are *ignored* (and generally cause the completion to fail). This is a feature -- since readline sets the tty device in raw (or cbreak) mode, printing a traceback wouldn't work well without some complicated hoopla to save, reset and restore the tty state.
    • The evaluation of the NAME.NAME... form may cause arbitrary application defined code to be executed if an object with a __getattr__ hook is found. Since it is the responsibility of the application (or the user) to enable this feature, I consider this an acceptable risk. More complicated expressions (e.g. function calls or indexing operations) are *not* evaluated.
    • When the original stdin is not a tty device, GNU readline is never used, and this module (and the readline module) are silently inactive.
    """ import builtins import __main__ __all__ = ["Completer"] class Completer(object): """ Class implementing the command line completer object. """ def __init__(self, namespace = None): """ Create a new completer for the command line. Completer([namespace]) -> completer instance. If unspecified, the default namespace where completions are performed is __main__ (technically, __main__.__dict__). Namespaces should be given as dictionaries. Completer instances should be used as the completion mechanism of readline via the set_completer() call: readline.set_completer(Completer(my_namespace).complete) @param namespace The namespace for the completer. """ if namespace and type(namespace) != type({}): raise TypeError('namespace must be a dictionary') # Don't bind to namespace quite yet, but flag whether the user wants a # specific namespace or to use __main__.__dict__. This will allow us # to bind to __main__.__dict__ at completion time, not now. if namespace is None: self.use_main_ns = True else: self.use_main_ns = False self.namespace = namespace def complete(self, text, state): """ Return the next possible completion for 'text'. This is called successively with state == 0, 1, 2, ... until it returns None. The completion should begin with 'text'. @param text The text to be completed. (string) @param state The state of the completion. (integer) @return The possible completions as a list of strings. """ if self.use_main_ns: self.namespace = __main__.__dict__ if state == 0: if "." in text: self.matches = self.attr_matches(text) else: self.matches = self.global_matches(text) try: return self.matches[state] except IndexError: return None def _callable_postfix(self, val, word): """ Protected method to check for a callable. @param val value to check (object) @param word word to ammend (string) @return ammended word (string) """ if hasattr(val, '__call__'): word = word + "(" return word def global_matches(self, text): """ Compute matches when text is a simple name. @param text The text to be completed. (string) @return A list of all keywords, built-in functions and names currently defined in self.namespace that match. """ import keyword matches = [] n = len(text) for word in keyword.kwlist: if word[:n] == text: matches.append(word) for nspace in [builtins.__dict__, self.namespace]: for word, val in nspace.items(): if word[:n] == text and word != "__builtins__": matches.append(self._callable_postfix(val, word)) return matches def attr_matches(self, text): """ Compute matches when text contains a dot. Assuming the text is of the form NAME.NAME....[NAME], and is evaluatable in self.namespace, it will be evaluated and its attributes (as revealed by dir()) are used as possible completions. (For class instances, class members are are also considered.) WARNING: this can still invoke arbitrary C code, if an object with a __getattr__ hook is evaluated. @param text The text to be completed. (string) @return A list of all matches. """ import re # Another option, seems to work great. Catches things like ''. m = re.match(r"(\S+(\.\w+)*)\.(\w*)", text) if not m: return expr, attr = m.group(1, 3) try: thisobject = eval(expr, self.namespace) except Exception: return [] # get the content of the object, except __builtins__ words = dir(thisobject) if "__builtins__" in words: words.remove("__builtins__") if hasattr(object,'__class__'): words.append('__class__') words = words + get_class_members(object.__class__) matches = [] n = len(attr) for word in words: try: if word[:n] == attr and hasattr(thisobject, word): val = getattr(thisobject, word) word = self._callable_postfix(val, "{0}.{1}".format(expr, word)) matches.append(word) except: # some badly behaved objects pollute dir() with non-strings, # which cause the completion to fail. This way we skip the # bad entries and can still continue processing the others. pass return matches def get_class_members(klass): """ Module function to retrieve the class members. @param klass The class object to be analysed. @return A list of all names defined in the class. """ ret = dir(klass) if hasattr(klass, '__bases__'): for base in klass.__bases__: ret = ret + get_class_members(base) return ret eric4-4.5.18/eric/DebugClients/Python3/PaxHeaders.8617/PyProfile.py0000644000175000001440000000013212261012651022704 xustar000000000000000030 mtime=1388582313.925101484 30 atime=1389081085.479724352 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python3/PyProfile.py0000644000175000001440000001340212261012651022436 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach """ Module defining additions to the standard Python profile.py. """ import os import marshal import profile import atexit import pickle class PyProfile(profile.Profile): """ Class extending the standard Python profiler with additional methods. This class extends the standard Python profiler by the functionality to save the collected timing data in a timing cache, to restore these data on subsequent calls, to store a profile dump to a standard filename and to erase these caches. """ def __init__(self, basename, timer = None, bias = None): """ Constructor @param basename name of the script to be profiled (string) @param timer function defining the timing calculation @param bias calibration value (float) """ profile.Profile.__init__(self, timer, bias) self.dispatch = self.__class__.dispatch basename = os.path.splitext(basename)[0] self.profileCache = "{0}.profile".format(basename) self.timingCache = "{0}.timings".format(basename) self.__restore() atexit.register(self.save) def __restore(self): """ Private method to restore the timing data from the timing cache. """ if not os.path.exists(self.timingCache): return try: cache = open(self.timingCache, 'rb') timings = marshal.load(cache) if isinstance(timings, dict): self.timings = timings except: pass finally: cache.close() def save(self): """ Public method to store the collected profile data. """ # dump the raw timing data try: cache = open(self.timingCache, 'wb') marshal.dump(self.timings, cache) except: pass finally: cache.close() # dump the profile data self.dump_stats(self.profileCache) def dump_stats(self, file): """ Public method to dump the statistics data. @param file name of the file to write to (string) """ try: f = open(file, 'wb') self.create_stats() pickle.dump(self.stats, f, 2) except (EnvironmentError, pickle.PickleError): pass finally: f.close() def erase(self): """ Public method to erase the collected timing data. """ self.timings = {} if os.path.exists(self.timingCache): os.remove(self.timingCache) def fix_frame_filename(self, frame): """ Public method used to fixup the filename for a given frame. The logic employed here is that if a module was loaded from a .pyc file, then the correct .py to operate with should be in the same path as the .pyc. The reason this logic is needed is that when a .pyc file is generated, the filename embedded and thus what is readable in the code object of the frame object is the fully qualified filepath when the pyc is generated. If files are moved from machine to machine this can break debugging as the .pyc will refer to the .py on the original machine. Another case might be sharing code over a network... This logic deals with that. @param frame the frame object """ # get module name from __file__ if not isinstance(frame, profile.Profile.fake_frame) and \ '__file__' in frame.f_globals: root, ext = os.path.splitext(frame.f_globals['__file__']) if ext in ['.pyc', '.py', '.py3', '.pyo']: fixedName = root + '.py' if os.path.exists(fixedName): return fixedName fixedName = root + '.py3' if os.path.exists(fixedName): return fixedName return frame.f_code.co_filename def trace_dispatch_call(self, frame, t): """ Private method used to trace functions calls. This is a variant of the one found in the standard Python profile.py calling fix_frame_filename above. """ if self.cur and frame.f_back is not self.cur[-2]: rpt, rit, ret, rfn, rframe, rcur = self.cur if not isinstance(rframe, profile.Profile.fake_frame): assert rframe.f_back is frame.f_back, ("Bad call", rfn, rframe, rframe.f_back, frame, frame.f_back) self.trace_dispatch_return(rframe, 0) assert (self.cur is None or \ frame.f_back is self.cur[-2]), ("Bad call", self.cur[-3]) fcode = frame.f_code fn = (self.fix_frame_filename(frame), fcode.co_firstlineno, fcode.co_name) self.cur = (t, 0, 0, fn, frame, self.cur) timings = self.timings if fn in timings: cc, ns, tt, ct, callers = timings[fn] timings[fn] = cc, ns + 1, tt, ct, callers else: timings[fn] = 0, 0, 0, 0, {} return 1 dispatch = { "call": trace_dispatch_call, "exception": profile.Profile.trace_dispatch_exception, "return": profile.Profile.trace_dispatch_return, "c_call": profile.Profile.trace_dispatch_c_call, "c_exception": profile.Profile.trace_dispatch_return, # the C function returned "c_return": profile.Profile.trace_dispatch_return, } eric4-4.5.18/eric/DebugClients/Python3/PaxHeaders.8617/AsyncFile.py0000644000175000001440000000013212261012651022650 xustar000000000000000030 mtime=1388582313.938101648 30 atime=1389081085.479724352 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python3/AsyncFile.py0000644000175000001440000002017512261012651022407 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing an asynchronous file like socket interface for the debugger. """ import socket import sys from DebugProtocol import EOT, RequestOK def AsyncPendingWrite(file): """ Module function to check for data to be written. @param file The file object to be checked (file) @return Flag indicating if there is data wating (int) """ try: pending = file.pendingWrite() except: pending = 0 return pending class AsyncFile(object): """ Class wrapping a socket object with a file interface. """ maxtries = 10 maxbuffersize = 1024 * 1024 * 4 def __init__(self, sock, mode, name): """ Constructor @param sock the socket object being wrapped @param mode mode of this file (string) @param name name of this file (string) """ # Initialise the attributes. self.__closed = False self.sock = sock self.mode = mode self.name = name self.nWriteErrors = 0 self.encoding = "utf-8" self.wpending = '' def __checkMode(self, mode): """ Private method to check the mode. This method checks, if an operation is permitted according to the mode of the file. If it is not, an IOError is raised. @param mode the mode to be checked (string) """ if mode != self.mode: raise IOError((9, '[Errno 9] Bad file descriptor')) def __nWrite(self, n): """ Private method to write a specific number of pending bytes. @param n the number of bytes to be written (int) """ if n: try : buf = "{0!s}{1!s}".format(self.wpending[:n], EOT) try: buf = buf.encode('utf-8', 'backslashreplace') except (UnicodeEncodeError, UnicodeDecodeError): pass self.sock.sendall(buf) self.wpending = self.wpending[n:] self.nWriteErrors = 0 except socket.error: self.nWriteErrors += 1 if self.nWriteErrors > self.maxtries: self.wpending = '' # delete all output def pendingWrite(self): """ Public method that returns the number of bytes waiting to be written. @return the number of bytes to be written (int) """ return self.wpending.rfind('\n') + 1 def close(self, closeit = False): """ Public method to close the file. @param closeit flag to indicate a close ordered by the debugger code (boolean) """ if closeit and not self.__closed: self.flush() self.sock.close() self.__closed = True def flush(self): """ Public method to write all pending bytes. """ self.__nWrite(len(self.wpending)) def isatty(self): """ Public method to indicate whether a tty interface is supported. @return always false """ return False def fileno(self): """ Public method returning the file number. @return file number (int) """ try: return self.sock.fileno() except socket.error: return -1 def read_p(self, size = -1): """ Public method to read bytes from this file. @param size maximum number of bytes to be read (int) @return the bytes read (any) """ self.__checkMode('r') if size < 0: size = 20000 return self.sock.recv(size).decode('utf8') def read(self, size = -1): """ Public method to read bytes from this file. @param size maximum number of bytes to be read (int) @return the bytes read (any) """ self.__checkMode('r') buf = input() if size >= 0: buf = buf[:size] return buf def readline_p(self, size = -1): """ Public method to read a line from this file. Note: This method will not block and may return only a part of a line if that is all that is available. @param size maximum number of bytes to be read (int) @return one line of text up to size bytes (string) """ self.__checkMode('r') if size < 0: size = 20000 # The integration of the debugger client event loop and the connection # to the debugger relies on the two lines of the debugger command being # delivered as two separate events. Therefore we make sure we only # read a line at a time. line = self.sock.recv(size, socket.MSG_PEEK) eol = line.find(b'\n') if eol >= 0: size = eol + 1 else: size = len(line) # Now we know how big the line is, read it for real. return self.sock.recv(size).decode('utf8') def readlines(self, sizehint = -1): """ Public method to read all lines from this file. @param sizehint hint of the numbers of bytes to be read (int) @return list of lines read (list of strings) """ self.__checkMode('r') lines = [] room = sizehint line = self.readline_p(room) linelen = len(line) while linelen > 0: lines.append(line) if sizehint >= 0: room = room - linelen if room <= 0: break line = self.readline_p(room) linelen = len(line) return lines def readline(self, sizehint = -1): """ Public method to read one line from this file. @param sizehint hint of the numbers of bytes to be read (int) @return one line read (string) """ self.__checkMode('r') line = input() + '\n' if sizehint >= 0: line = line[:sizehint] return line def seek(self, offset, whence = 0): """ Public method to move the filepointer. @param offset offset to move the filepointer to (integer) @param whence position the offset relates to @exception IOError This method is not supported and always raises an IOError. """ raise IOError((29, '[Errno 29] Illegal seek')) def tell(self): """ Public method to get the filepointer position. @exception IOError This method is not supported and always raises an IOError. """ raise IOError((29, '[Errno 29] Illegal seek')) def truncate(self, size = -1): """ Public method to truncate the file. @param size size to truncaze to (integer) @exception IOError This method is not supported and always raises an IOError. """ raise IOError((29, '[Errno 29] Illegal seek')) def write(self, s): """ Public method to write a string to the file. @param s bytes to be written (string) """ self.__checkMode('w') tries = 0 if not self.wpending: self.wpending = s elif len(self.wpending) + len(s) > self.maxbuffersize: # flush wpending so that different string types are not concatenated while self.wpending: # if we have a persistent error in sending the data, an exception # will be raised in __nWrite self.flush() tries += 1 if tries > self.maxtries: raise socket.error("Too many attempts to send data") self.wpending = s else: self.wpending += s self.__nWrite(self.pendingWrite()) def writelines(self, list): """ Public method to write a list of strings to the file. @param list the list to be written (list of string) """ for l in list: self.write(l) eric4-4.5.18/eric/DebugClients/Python3/PaxHeaders.8617/DebugConfig.py0000644000175000001440000000013212261012651023147 xustar000000000000000030 mtime=1388582313.940101674 30 atime=1389081085.479724352 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python3/DebugConfig.py0000644000175000001440000000112312261012651022676 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module defining type strings for the different Python types. """ ConfigVarTypeStrings = ['__', 'NoneType', 'type',\ 'bool', 'int', 'long', 'float', 'complex',\ 'str', 'unicode', 'tuple', 'list',\ 'dict', 'dict-proxy', 'set', 'file', 'xrange',\ 'slice', 'buffer', 'class', 'instance',\ 'instance method', 'property', 'generator',\ 'function', 'builtin_function_or_method', 'code', 'module',\ 'ellipsis', 'traceback', 'frame', 'other'] eric4-4.5.18/eric/DebugClients/Python3/PaxHeaders.8617/DebugClientBase.py0000644000175000001440000000013212261012651023753 xustar000000000000000030 mtime=1388582313.959101914 30 atime=1389081085.479724352 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python3/DebugClientBase.py0000644000175000001440000024235512261012651023520 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a debug client base class. """ import sys import socket import select import codeop import traceback import os import time import imp import re import distutils.sysconfig import atexit from DebugProtocol import * import DebugClientCapabilities from DebugBase import setRecursionLimit, printerr from AsyncFile import * from DebugConfig import ConfigVarTypeStrings from FlexCompleter import Completer DebugClientInstance = None ################################################################################ def DebugClientInput(prompt = ""): """ Replacement for the standard input builtin. This function works with the split debugger. @param prompt The prompt to be shown. (string) """ if DebugClientInstance is None or not DebugClientInstance.redirect: return DebugClientOrigInput(prompt) return DebugClientInstance.input(prompt) # Use our own input(). try: DebugClientOrigInput = __builtins__.__dict__['input'] __builtins__.__dict__['input'] = DebugClientInput except (AttributeError, KeyError): import __main__ DebugClientOrigInput = __main__.__builtins__.__dict__['input'] __main__.__builtins__.__dict__['input'] = DebugClientInput ################################################################################ def DebugClientFork(): """ Replacement for the standard os.fork(). """ if DebugClientInstance is None: return DebugClientOrigFork() return DebugClientInstance.fork() # use our own fork(). if 'fork' in dir(os): DebugClientOrigFork = os.fork os.fork = DebugClientFork ################################################################################ def DebugClientClose(fd): """ Replacement for the standard os.close(fd). @param fd open file descriptor to be closed (integer) """ if DebugClientInstance is None: DebugClientOrigClose(fd) DebugClientInstance.close(fd) # use our own close(). if 'close' in dir(os): DebugClientOrigClose = os.close os.close = DebugClientClose ################################################################################ def DebugClientSetRecursionLimit(limit): """ Replacement for the standard sys.setrecursionlimit(limit). @param limit recursion limit (integer) """ rl = max(limit, 64) setRecursionLimit(rl) DebugClientOrigSetRecursionLimit(rl + 64) # use our own setrecursionlimit(). if 'setrecursionlimit' in dir(sys): DebugClientOrigSetRecursionLimit = sys.setrecursionlimit sys.setrecursionlimit = DebugClientSetRecursionLimit DebugClientSetRecursionLimit(sys.getrecursionlimit()) ################################################################################ class DebugClientBase(object): """ Class implementing the client side of the debugger. It provides access to the Python interpeter from a debugger running in another process whether or not the Qt event loop is running. The protocol between the debugger and the client assumes that there will be a single source of debugger commands and a single source of Python statements. Commands and statement are always exactly one line and may be interspersed. The protocol is as follows. First the client opens a connection to the debugger and then sends a series of one line commands. A command is either >Load<, >Step<, >StepInto<, ... or a Python statement. See DebugProtocol.py for a listing of valid protocol tokens. A Python statement consists of the statement to execute, followed (in a separate line) by >OK?<. If the statement was incomplete then the response is >Continue<. If there was an exception then the response is >Exception<. Otherwise the response is >OK<. The reason for the >OK?< part is to provide a sentinal (ie. the responding >OK<) after any possible output as a result of executing the command. The client may send any other lines at any other time which should be interpreted as program output. If the debugger closes the session there is no response from the client. The client may close the session at any time as a result of the script being debugged closing or crashing. Note: This class is meant to be subclassed by individual DebugClient classes. Do not instantiate it directly. """ clientCapabilities = DebugClientCapabilities.HasAll def __init__(self): """ Constructor """ self.breakpoints = {} self.redirect = True # The next couple of members are needed for the threaded version. # For this base class they contain static values for the non threaded # debugger # dictionary of all threads running self.threads = {} # the "current" thread, basically the thread we are at a breakpoint for. self.currentThread = self # special objects representing the main scripts thread and frame self.mainThread = self self.mainFrame = None self.framenr = 0 # The context to run the debugged program in. self.debugMod = imp.new_module('__main__') # The list of complete lines to execute. self.buffer = '' # The list of regexp objects to filter variables against self.globalsFilterObjects = [] self.localsFilterObjects = [] self.pendingResponse = ResponseOK self._fncache = {} self.dircache = [] self.inRawMode = False self.mainProcStr = None # used for the passive mode self.passive = False # used to indicate the passive mode self.running = None self.test = None self.tracePython = False self.debugging = False self.fork_auto = False self.fork_child = False self.readstream = None self.writestream = None self.errorstream = None self.pollingDisabled = False self.skipdirs = sys.path[:] self.variant = 'You should not see this' # commandline completion stuff self.complete = Completer(self.debugMod.__dict__).complete self.compile_command = codeop.CommandCompiler() self.coding_re = re.compile(r"coding[:=]\s*([-\w_.]+)") self.defaultCoding = 'utf-8' self.__coding = self.defaultCoding self.noencoding = False def getCoding(self): """ Public method to return the current coding. @return codec name (string) """ return self.__coding def __setCoding(self, filename): """ Private method to set the coding used by a python file. @param filename name of the file to inspect (string) """ if self.noencoding: self.__coding = sys.getdefaultencoding() else: default = 'utf-8' try: f = open(filename, 'rb') # read the first and second line text = f.readline() text = "{0}{1}".format(text, f.readline()) f.close() except IOError: self.__coding = default return for l in text.splitlines(): m = self.coding_re.search(l) if m: self.__coding = m.group(1) return self.__coding = default def attachThread(self, target = None, args = None, kwargs = None, mainThread = False): """ Public method to setup a thread for DebugClient to debug. If mainThread is non-zero, then we are attaching to the already started mainthread of the app and the rest of the args are ignored. @param target the start function of the target thread (i.e. the user code) @param args arguments to pass to target @param kwargs keyword arguments to pass to target @param mainThread True, if we are attaching to the already started mainthread of the app @return The identifier of the created thread """ if self.debugging: sys.setprofile(self.profile) def __dumpThreadList(self): """ Public method to send the list of threads. """ threadList = [] if self.threads and self.currentThread: # indication for the threaded debugger currentId = self.currentThread.get_ident() for t in self.threads.values(): d = {} d["id"] = t.get_ident() d["name"] = t.get_name() d["broken"] = t.isBroken() threadList.append(d) else: currentId = -1 d = {} d["id"] = -1 d["name"] = "MainThread" d["broken"] = self.isBroken() threadList.append(d) self.write("{0}{1!r}\n".format(ResponseThreadList, (currentId, threadList))) def input(self, prompt): """ Public method to implement input() using the event loop. @param prompt the prompt to be shown (string) @return the entered string """ self.write("{0}{1!r}\n".format(ResponseRaw, (prompt, 1))) self.inRawMode = True self.eventLoop(True) return self.rawLine def __exceptionRaised(self): """ Private method called in the case of an exception It ensures that the debug server is informed of the raised exception. """ self.pendingResponse = ResponseException def sessionClose(self, exit = True): """ Public method to close the session with the debugger and optionally terminate. @param exit flag indicating to terminate (boolean) """ try: self.set_quit() except: pass # clean up asyncio. self.disconnect() self.debugging = False # make sure we close down our end of the socket # might be overkill as normally stdin, stdout and stderr # SHOULD be closed on exit, but it does not hurt to do it here self.readstream.close(True) self.writestream.close(True) self.errorstream.close(True) if exit: # Ok, go away. sys.exit() def __compileFileSource(self, filename, mode = 'exec'): """ Private method to compile source code read from a file. @param filename name of the source file (string) @param mode kind of code to be generated (string, exec or eval) @return compiled code object (None in case of errors) """ with open(filename) as fp: statement = fp.read() try: code = compile(statement + '\n', filename, mode) except SyntaxError: exctype, excval, exctb = sys.exc_info() try: message, (filename, linenr, charnr, text) = excval[0], excval[1] except ValueError: exclist = [] else: exclist = [message, [filename, linenr, charnr]] self.write("{0}{1}\n".format(ResponseSyntax, str(exclist))) return None return code def handleLine(self,line): """ Public method to handle the receipt of a complete line. It first looks for a valid protocol token at the start of the line. Thereafter it trys to execute the lines accumulated so far. @param line the received line """ # Remove any newline. if line[-1] == '\n': line = line[:-1] ## printerr(line) ##debug eoc = line.find('<') if eoc >= 0 and line[0] == '>': # Get the command part and any argument. cmd = line[:eoc + 1] arg = line[eoc + 1:] if cmd == RequestVariables: frmnr, scope, filter = eval(arg.replace("u'", "'")) self.__dumpVariables(int(frmnr), int(scope), filter) return if cmd == RequestVariable: var, frmnr, scope, filter = eval(arg.replace("u'", "'")) self.__dumpVariable(var, int(frmnr), int(scope), filter) return if cmd == RequestThreadList: self.__dumpThreadList() return if cmd == RequestThreadSet: tid = eval(arg) if tid in self.threads: self.setCurrentThread(tid) self.write(ResponseThreadSet + '\n') stack = self.currentThread.getStack() self.write('{0}{1!r}\n'.format(ResponseStack, stack)) return if cmd == RequestStep: self.currentThread.step(True) self.eventExit = True return if cmd == RequestStepOver: self.currentThread.step(False) self.eventExit = True return if cmd == RequestStepOut: self.currentThread.stepOut() self.eventExit = True return if cmd == RequestStepQuit: if self.passive: self.progTerminated(42) else: self.set_quit() self.eventExit = True return if cmd == RequestContinue: special = int(arg) self.currentThread.go(special) self.eventExit = True return if cmd == RequestOK: self.write(self.pendingResponse + '\n') self.pendingResponse = ResponseOK return if cmd == RequestEnv: env = eval(arg.replace("u'", "'")) for key, value in env.items(): if key.endswith("+"): if key[:-1] in os.environ: os.environ[key[:-1]] += value else: os.environ[key[:-1]] = value else: os.environ[key] = value return if cmd == RequestLoad: self._fncache = {} self.dircache = [] sys.argv = [] wd, fn, args, tracePython = arg.split('|') self.__setCoding(fn) try: sys.setappdefaultencoding(self.__coding) except AttributeError: pass sys.argv.append(fn) sys.argv.extend(eval(args.replace("u'", "'"))) sys.path = self.__getSysPath(os.path.dirname(sys.argv[0])) if wd == '': os.chdir(sys.path[1]) else: os.chdir(wd) tracePython = int(tracePython) self.running = sys.argv[0] self.mainFrame = None self.inRawMode = False self.debugging = True self.threads.clear() self.attachThread(mainThread = True) # set the system exception handling function to ensure, that # we report on all unhandled exceptions sys.excepthook = self.__unhandled_exception # clear all old breakpoints, they'll get set after we have started self.mainThread.clear_all_breaks() self.mainThread.tracePython = tracePython # This will eventually enter a local event loop. # Note the use of backquotes to cause a repr of self.running. The # need for this is on Windows os where backslash is the path separator. # They will get inadvertantly stripped away during the eval causing # IOErrors, if self.running is passed as a normal str. self.debugMod.__dict__['__file__'] = self.running sys.modules['__main__'] = self.debugMod code = self.__compileFileSource(self.running) if code: res = self.mainThread.run(code, self.debugMod.__dict__) self.progTerminated(res) return if cmd == RequestRun: sys.argv = [] wd, fn, args = arg.split('|') self.__setCoding(fn) try: sys.setappdefaultencoding(self.__coding) except AttributeError: pass sys.argv.append(fn) sys.argv.extend(eval(args.replace("u'", "'"))) sys.path = self.__getSysPath(os.path.dirname(sys.argv[0])) if wd == '': os.chdir(sys.path[1]) else: os.chdir(wd) self.running = sys.argv[0] self.mainFrame = None self.botframe = None self.inRawMode = False self.threads.clear() self.attachThread(mainThread = True) # set the system exception handling function to ensure, that # we report on all unhandled exceptions sys.excepthook = self.__unhandled_exception self.mainThread.tracePython = False self.debugMod.__dict__['__file__'] = sys.argv[0] sys.modules['__main__'] = self.debugMod res = 0 try: exec(open(sys.argv[0], encoding=self.__coding).read(), self.debugMod.__dict__) except SystemExit as exc: res = exc.code atexit._run_exitfuncs() self.writestream.flush() self.progTerminated(res) return if cmd == RequestProfile: sys.setprofile(None) import PyProfile sys.argv = [] wd, fn, args, erase = arg.split('|') self.__setCoding(fn) try: sys.setappdefaultencoding(self.__coding) except AttributeError: pass sys.argv.append(fn) sys.argv.extend(eval(args.replace("u'", "'"))) sys.path = self.__getSysPath(os.path.dirname(sys.argv[0])) if wd == '': os.chdir(sys.path[1]) else: os.chdir(wd) # set the system exception handling function to ensure, that # we report on all unhandled exceptions sys.excepthook = self.__unhandled_exception # generate a profile object self.prof = PyProfile.PyProfile(sys.argv[0]) if int(erase): self.prof.erase() self.debugMod.__dict__['__file__'] = sys.argv[0] sys.modules['__main__'] = self.debugMod fp = open(sys.argv[0]) try: script = fp.read() finally: fp.close() if script: if not script.endswith('\n'): script += '\n' self.running = sys.argv[0] res = 0 try: self.prof.run(script) except SystemExit as exc: res = exc.code atexit._run_exitfuncs() self.prof.save() self.writestream.flush() self.progTerminated(res) return if cmd == RequestCoverage: from coverage import coverage sys.argv = [] wd, fn, args, erase = arg.split('@@') self.__setCoding(fn) try: sys.setappdefaultencoding(self.__coding) except AttributeError: pass sys.argv.append(fn) sys.argv.extend(eval(args.replace("u'", "'"))) sys.path = self.__getSysPath(os.path.dirname(sys.argv[0])) if wd == '': os.chdir(sys.path[1]) else: os.chdir(wd) # set the system exception handling function to ensure, that # we report on all unhandled exceptions sys.excepthook = self.__unhandled_exception # generate a coverage object self.cover = coverage(auto_data = True, data_file = "{0}.coverage".format(os.path.splitext(sys.argv[0])[0])) self.cover.use_cache(True) if int(erase): self.cover.erase() sys.modules['__main__'] = self.debugMod self.debugMod.__dict__['__file__'] = sys.argv[0] fp = open(sys.argv[0], encoding=self.__coding) try: script = fp.read() finally: fp.close() if script: if not script.endswith('\n'): script += '\n' code = compile(script, sys.argv[0], 'exec') self.running = sys.argv[0] res = 0 self.cover.start() try: exec(code, self.debugMod.__dict__) except SystemExit as exc: res = exc.code atexit._run_exitfuncs() self.cover.stop() self.cover.save() self.writestream.flush() self.progTerminated(res) return if cmd == RequestShutdown: self.sessionClose() return if cmd == RequestBreak: fn, line, temporary, set, cond = arg.split('@@') line = int(line) set = int(set) temporary = int(temporary) if set: if cond == 'None' or cond == '': cond = None else: try: compile(cond, '', 'eval') except SyntaxError: self.write('{0}{1},{2:d}\n'.format( ResponseBPConditionError, fn, line)) return self.mainThread.set_break(fn, line, temporary, cond) else: self.mainThread.clear_break(fn, line) return if cmd == RequestBreakEnable: fn, line, enable = arg.split(',') line = int(line) enable = int(enable) bp = self.mainThread.get_break(fn, line) if bp is not None: if enable: bp.enable() else: bp.disable() return if cmd == RequestBreakIgnore: fn, line, count = arg.split(',') line = int(line) count = int(count) bp = self.mainThread.get_break(fn, line) if bp is not None: bp.ignore = count return if cmd == RequestWatch: cond, temporary, set = arg.split('@@') set = int(set) temporary = int(temporary) if set: if not cond.endswith('??created??') and \ not cond.endswith('??changed??'): try: compile(cond, '', 'eval') except SyntaxError: self.write('{0}{1}\n'.format(ResponseWPConditionError, cond)) return self.mainThread.set_watch(cond, temporary) else: self.mainThread.clear_watch(cond) return if cmd == RequestWatchEnable: cond, enable = arg.split(',') enable = int(enable) bp = self.mainThread.get_watch(cond) if bp is not None: if enable: bp.enable() else: bp.disable() return if cmd == RequestWatchIgnore: cond, count = arg.split(',') count = int(count) bp = self.mainThread.get_watch(cond) if bp is not None: bp.ignore = count return if cmd == RequestEval: try: value = eval(arg, self.currentThread.getCurrentFrame().f_globals, self.currentThread.getCurrentFrameLocals()) except: # Report the exception and the traceback try: type, value, tb = sys.exc_info() sys.last_type = type sys.last_value = value sys.last_traceback = tb tblist = traceback.extract_tb(tb) del tblist[:1] list = traceback.format_list(tblist) if list: list.insert(0, "Traceback (innermost last):\n") list[len(list):] = \ traceback.format_exception_only(type, value) finally: tblist = tb = None for l in list: self.write(l) self.write(ResponseException + '\n') else: self.write(str(value) + '\n') self.write(ResponseOK + '\n') return if cmd == RequestExec: _globals = self.currentThread.getCurrentFrame().f_globals _locals = self.currentThread.getCurrentFrameLocals() try: code = compile(arg + '\n', '', 'single') exec(code, _globals, _locals) except: # Report the exception and the traceback try: type, value, tb = sys.exc_info() sys.last_type = type sys.last_value = value sys.last_traceback = tb tblist = traceback.extract_tb(tb) del tblist[:1] list = traceback.format_list(tblist) if list: list.insert(0, "Traceback (innermost last):\n") list[len(list):] = \ traceback.format_exception_only(type, value) finally: tblist = tb = None for l in list: self.write(l) self.write(ResponseException + '\n') return if cmd == RequestBanner: self.write('{0}{1}\n'.format(ResponseBanner, str(("Python {0}".format(sys.version), socket.gethostname(), self.variant)))) return if cmd == RequestCapabilities: self.write('{0}{1:d}, "Python3"\n'.format(ResponseCapabilities, self.__clientCapabilities())) return if cmd == RequestCompletion: self.__completionList(arg.replace("u'", "'")) return if cmd == RequestSetFilter: scope, filterString = eval(arg.replace("u'", "'")) self.__generateFilterObjects(int(scope), filterString) return if cmd == RequestUTPrepare: fn, tn, tfn, cov, covname, erase = arg.split('|') sys.path.insert(0, os.path.dirname(os.path.abspath(fn))) os.chdir(sys.path[0]) # set the system exception handling function to ensure, that # we report on all unhandled exceptions sys.excepthook = self.__unhandled_exception try: import unittest utModule = imp.load_source(tn, fn) try: self.test = unittest.defaultTestLoader\ .loadTestsFromName(tfn, utModule) except AttributeError: self.test = unittest.defaultTestLoader\ .loadTestsFromModule(utModule) except: exc_type, exc_value, exc_tb = sys.exc_info() self.write('{0}{1}\n'.format(ResponseUTPrepared, str((0, str(exc_type), str(exc_value))))) self.__exceptionRaised() return # generate a coverage object if int(cov): from coverage import coverage self.cover = coverage(auto_data = True, data_file = "{0}.coverage".format(os.path.splitext(covname)[0])) self.cover.use_cache(True) if int(erase): self.cover.erase() else: self.cover = None self.write('{0}{1}\n'.format(ResponseUTPrepared, str((self.test.countTestCases(), "", "")))) return if cmd == RequestUTRun: from DCTestResult import DCTestResult self.testResult = DCTestResult(self) if self.cover: self.cover.start() self.test.run(self.testResult) if self.cover: self.cover.stop() self.cover.save() self.write('{0}\n'.format(ResponseUTFinished)) return if cmd == RequestUTStop: self.testResult.stop() return if cmd == ResponseForkTo: # this results from a separate event loop self.fork_child = (arg == 'child') self.eventExit = True return if cmd == RequestForkMode: self.fork_auto, self.fork_child = eval(arg) return # If we are handling raw mode input then reset the mode and break out # of the current event loop. if self.inRawMode: self.inRawMode = False self.rawLine = line self.eventExit = True return if self.buffer: self.buffer = self.buffer + '\n' + line else: self.buffer = line try: code = self.compile_command(self.buffer, self.readstream.name) except (OverflowError, SyntaxError, ValueError): # Report the exception sys.last_type, sys.last_value, sys.last_traceback = sys.exc_info() for l in traceback.format_exception_only(sys.last_type, sys.last_value): self.write(l) self.buffer = '' else: if code is None: self.pendingResponse = ResponseContinue else: self.buffer = '' try: if self.running is None: exec(code, self.debugMod.__dict__) else: if self.currentThread is None: # program has terminated self.running = None _globals = self.debugMod.__dict__ _locals = _globals else: cf = self.currentThread.getCurrentFrame() # program has terminated if cf is None: self.running = None _globals = self.debugMod.__dict__ _locals = _globals else: frmnr = self.framenr while cf is not None and frmnr > 0: cf = cf.f_back frmnr -= 1 _globals = cf.f_globals _locals = self.currentThread.getCurrentFrameLocals() # reset sys.stdout to our redirector (unconditionally) if "sys" in _globals: __stdout = _globals["sys"].stdout _globals["sys"].stdout = self.writestream exec(code, _globals, _locals) _globals["sys"].stdout = __stdout elif "sys" in _locals: __stdout = _locals["sys"].stdout _locals["sys"].stdout = self.writestream exec(code, _globals, _locals) _locals["sys"].stdout = __stdout else: exec(code, _globals, _locals) except SystemExit as exc: self.progTerminated(exc.code) except: # Report the exception and the traceback try: exc_type, exc_value, exc_tb = sys.exc_info() sys.last_type = exc_type sys.last_value = exc_value sys.last_traceback = exc_tb tblist = traceback.extract_tb(exc_tb) del tblist[:1] list = traceback.format_list(tblist) if list: list.insert(0, "Traceback (innermost last):\n") list[len(list):] = \ traceback.format_exception_only(exc_type, exc_value) finally: tblist = exc_tb = None for l in list: self.write(l) def __clientCapabilities(self): """ Private method to determine the clients capabilities. @return client capabilities (integer) """ try: import PyProfile try: del sys.modules['PyProfile'] except KeyError: pass return self.clientCapabilities except ImportError: return self.clientCapabilities & ~DebugClientCapabilities.HasProfiler def write(self,s): """ Public method to write data to the output stream. @param s data to be written (string) """ self.writestream.write(s) self.writestream.flush() def __interact(self): """ Private method to Interact with the debugger. """ global DebugClientInstance self.setDescriptors(self.readstream, self.writestream) DebugClientInstance = self if not self.passive: # At this point simulate an event loop. self.eventLoop() def eventLoop(self, disablePolling = False): """ Public method implementing our event loop. @param disablePolling flag indicating to enter an event loop with polling disabled (boolean) """ self.eventExit = None self.pollingDisabled = disablePolling while self.eventExit is None: wrdy = [] if AsyncPendingWrite(self.writestream): wrdy.append(self.writestream) if AsyncPendingWrite(self.errorstream): wrdy.append(self.errorstream) try: rrdy, wrdy, xrdy = select.select([self.readstream], wrdy, []) except (select.error, KeyboardInterrupt, socket.error): # just carry on continue if self.readstream in rrdy: self.readReady(self.readstream.fileno()) if self.writestream in wrdy: self.writeReady(self.writestream.fileno()) if self.errorstream in wrdy: self.writeReady(self.errorstream.fileno()) self.eventExit = None self.pollingDisabled = False def eventPoll(self): """ Public method to poll for events like 'set break point'. """ if self.pollingDisabled: return # the choice of a ~0.5 second poll interval is arbitrary. lasteventpolltime = getattr(self, 'lasteventpolltime', time.time()) now = time.time() if now - lasteventpolltime < 0.5: self.lasteventpolltime = lasteventpolltime return else: self.lasteventpolltime = now wrdy = [] if AsyncPendingWrite(self.writestream): wrdy.append(self.writestream) if AsyncPendingWrite(self.errorstream): wrdy.append(self.errorstream) # immediate return if nothing is ready. try: rrdy, wrdy, xrdy = select.select([self.readstream], wrdy, [], 0) except (select.error, KeyboardInterrupt, socket.error): return if self.readstream in rrdy: self.readReady(self.readstream.fileno()) if self.writestream in wrdy: self.writeReady(self.writestream.fileno()) if self.errorstream in wrdy: self.writeReady(self.errorstream.fileno()) def connectDebugger(self, port, remoteAddress = None, redirect = True): """ Public method to establish a session with the debugger. It opens a network connection to the debugger, connects it to stdin, stdout and stderr and saves these file objects in case the application being debugged redirects them itself. @param port the port number to connect to (int) @param remoteAddress the network address of the debug server host (string) @param redirect flag indicating redirection of stdin, stdout and stderr (boolean) """ if remoteAddress is None: # default: 127.0.0.1 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((DebugAddress, port)) else: if "@@i" in remoteAddress: remoteAddress, index = remoteAddress.split("@@i") else: index = 0 if ":" in remoteAddress: # IPv6 sockaddr = socket.getaddrinfo( remoteAddress, port, 0, 0, socket.SOL_TCP)[0][-1] sock = socket.socket(socket.AF_INET6, socket.SOCK_STREAM) sockaddr = sockaddr[:-1] + (int(index),) sock.connect(sockaddr) else: # IPv4 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((remoteAddress, port)) self.readstream = AsyncFile(sock, sys.stdin.mode, sys.stdin.name) self.writestream = AsyncFile(sock, sys.stdout.mode, sys.stdout.name) self.errorstream = AsyncFile(sock, sys.stderr.mode, sys.stderr.name) if redirect: sys.stdin = self.readstream sys.stdout = self.writestream sys.stderr = self.errorstream self.redirect = redirect # attach to the main thread here self.attachThread(mainThread = True) def __unhandled_exception(self, exctype, excval, exctb): """ Private method called to report an uncaught exception. @param exctype the type of the exception @param excval data about the exception @param exctb traceback for the exception """ self.mainThread.user_exception(None, (exctype, excval, exctb), True) def absPath(self, fn): """ Public method to convert a filename to an absolute name. sys.path is used as a set of possible prefixes. The name stays relative if a file could not be found. @param fn filename (string) @return the converted filename (string) """ if os.path.isabs(fn): return fn # Check the cache. if fn in self._fncache: return self._fncache[fn] # Search sys.path. for p in sys.path: afn = os.path.abspath(os.path.join(p, fn)) nafn = os.path.normcase(afn) if os.path.exists(nafn): self._fncache[fn] = afn d = os.path.dirname(afn) if (d not in sys.path) and (d not in self.dircache): self.dircache.append(d) return afn # Search the additional directory cache for p in self.dircache: afn = os.path.abspath(os.path.join(p, fn)) nafn = os.path.normcase(afn) if os.path.exists(nafn): self._fncache[fn] = afn return afn # Nothing found. return fn def shouldSkip(self, fn): """ Public method to check if a file should be skipped. @param fn filename to be checked @return non-zero if fn represents a file we are 'skipping', zero otherwise. """ if self.mainThread.tracePython: # trace into Python library return False # Eliminate anything that is part of the Python installation. afn = self.absPath(fn) for d in self.skipdirs: if afn.startswith(d): return True # special treatment for paths containing site-packages or dist-packages for part in ["site-packages", "dist-packages"]: if part in afn: return True return False def getRunning(self): """ Public method to return the main script we are currently running. """ return self.running def progTerminated(self, status): """ Public method to tell the debugger that the program has terminated. @param status the return status """ if status is None: status = 0 else: try: int(status) except ValueError: status = 1 if self.running: self.set_quit() self.running = None self.write('{0}{1:d}\n'.format(ResponseExit, status)) # reset coding self.__coding = self.defaultCoding try: sys.setappdefaultencoding(self.defaultCoding) except AttributeError: pass def __dumpVariables(self, frmnr, scope, filter): """ Private method to return the variables of a frame to the debug server. @param frmnr distance of frame reported on. 0 is the current frame (int) @param scope 1 to report global variables, 0 for local variables (int) @param filter the indices of variable types to be filtered (list of int) """ if self.currentThread is None: return if scope == 0: self.framenr = frmnr f = self.currentThread.getCurrentFrame() while f is not None and frmnr > 0: f = f.f_back frmnr -= 1 if f is None: return if scope: dict = f.f_globals else: dict = f.f_locals if f.f_globals is f.f_locals: scope = -1 varlist = [scope] if scope != -1: keylist = dict.keys() vlist = self.__formatVariablesList(keylist, dict, scope, filter) varlist.extend(vlist) self.write('{0}{1}\n'.format(ResponseVariables, str(varlist))) def __dumpVariable(self, var, frmnr, scope, filter): """ Private method to return the variables of a frame to the debug server. @param var list encoded name of the requested variable (list of strings) @param frmnr distance of frame reported on. 0 is the current frame (int) @param scope 1 to report global variables, 0 for local variables (int) @param filter the indices of variable types to be filtered (list of int) """ if self.currentThread is None: return f = self.currentThread.getCurrentFrame() while f is not None and frmnr > 0: f = f.f_back frmnr -= 1 if f is None: return if scope: dict = f.f_globals else: dict = f.f_locals if f.f_globals is f.f_locals: scope = -1 varlist = [scope, var] if scope != -1: # search the correct dictionary i = 0 rvar = var[:] dictkeys = None obj = None isDict = False formatSequences = False access = "" oaccess = "" odict = dict qtVariable = False qvar = None qvtype = "" while i < len(var): if len(dict): udict = dict ndict = {} # this has to be in line with VariablesViewer.indicators if var[i][-2:] in ["[]", "()", "{}"]: if i + 1 == len(var): if var[i][:-2] == '...': dictkeys = [var[i - 1]] else: dictkeys = [var[i][:-2]] formatSequences = True if not access and not oaccess: if var[i][:-2] == '...': access = '["{0!s}"]'.format(var[i - 1]) dict = odict else: access = '["{0!s}"]'.format(var[i][:-2]) else: if var[i][:-2] == '...': if oaccess: access = oaccess else: access = '{0!s}[{1!s}]'.format(access, var[i - 1]) dict = odict else: if oaccess: access = '{0!s}[{1!s}]'.format(oaccess, var[i][:-2]) oaccess = '' else: access = '{0!s}[{1!s}]'.format(access, var[i][:-2]) if var[i][-2:] == "{}": isDict = True break else: if not access: if var[i][:-2] == '...': access = '["{0!s}"]'.format(var[i - 1]) dict = odict else: access = '["{0!s}"]'.format(var[i][:-2]) else: if var[i][:-2] == '...': access = '{0!s}[{1!s}]'.format(access, var[i - 1]) dict = odict else: if oaccess: access = '{0!s}[{1!s}]'.format(oaccess, var[i][:-2]) oaccess = '' else: access = '{0!s}[{1!s}]'.format(access, var[i][:-2]) else: if access: if oaccess: access = '{0!s}[{1!s}]'.format(oaccess, var[i]) else: access = '{0!s}[{1!s}]'.format(access, var[i]) if var[i-1][:-2] == '...': oaccess = access else: oaccess = '' try: loc = {"dict" : dict} exec('mdict = dict{0!s}.__dict__\nobj = dict{0!s}'\ .format(access), globals(), loc) mdict = loc["mdict"] obj = loc["obj"] if "PyQt4." in str(type(obj)): qtVariable = True qvar = obj qvtype = str(type(qvar))[1:-1].split()[1][1:-1] ndict.update(mdict) except: pass try: loc = {"dict": dict} exec('mcdict = dict{0!s}.__class__.__dict__'\ .format(access), globals(), loc) ndict.update(loc["mcdict"]) if mdict and not "sipThis" in mdict.keys(): del rvar[0:2] access = "" except: pass try: loc = {"cdict" : {}, "dict" : dict} exec('slv = dict{0!s}.__slots__'.format(access), globals(), loc) for v in loc["slv"]: try: loc["v"] = v exec('cdict[v] = dict{0!s}.{1!s}'.format(access, v), globals, loc) except: pass ndict.update(loc["cdict"]) exec('obj = dict{0!s}'.format(access), globals(), loc) obj = loc["obj"] access = "" if "PyQt4." in str(type(obj)): qtVariable = True qvar = obj qvtype = str(type(qvar))[1:-1].split()[1][1:-1] except: pass else: try: ndict.update(dict[var[i]].__dict__) ndict.update(dict[var[i]].__class__.__dict__) del rvar[0] obj = dict[var[i]] if "PyQt4." in str(type(obj)): qtVariable = True qvar = obj qvtype = str(type(qvar))[1:-1].split()[1][1:-1] except: pass try: slv = dict[var[i]].__slots__ loc = {"cdict" : {}, "dict" : dict, "var" : var, "i" : i} for v in slv: try: loc["v"] = v exec('cdict[v] = dict[var[i]].{0!s}'.format(v), globals(), loc) except: pass ndict.update(loc["cdict"]) obj = dict[var[i]] if "PyQt4." in str(type(obj)): qtVariable = True qvar = obj qvtype = str(type(qvar))[1:-1].split()[1][1:-1] except: pass odict = dict dict = ndict i += 1 if qtVariable: vlist = self.__formatQt4Variable(qvar, qvtype) elif ("sipThis" in dict.keys() and len(dict) == 1) or \ (len(dict) == 0 and len(udict) > 0): if access: loc = {"udict" : udict} exec('qvar = udict{0!s}'.format(access), globals(), loc) qvar = loc["qvar"] # this has to be in line with VariablesViewer.indicators elif rvar and rvar[0][-2:] in ["[]", "()", "{}"]: loc = {"udict" : udict} exec('qvar = udict["{0!s}"][{1!s}]'.format(rvar[0][:-2], rvar[1]), globals(), loc) qvar = loc["qvar"] else: qvar = udict[var[-1]] qvtype = str(type(qvar))[1:-1].split()[1][1:-1] if qvtype.startswith("PyQt4"): vlist = self.__formatQt4Variable(qvar, qvtype) else: vlist = [] else: qtVariable = False if len(dict) == 0 and len(udict) > 0: if access: loc = {"udict" : udict} exec('qvar = udict{0!s}'.format(access), globals(), loc) qvar = loc["qvar"] # this has to be in line with VariablesViewer.indicators elif rvar and rvar[0][-2:] in ["[]", "()", "{}"]: loc = {"udict" : udict} exec('qvar = udict["{0!s}"][{1!s}]'.format(rvar[0][:-2], rvar[1]), globals(), loc) qvar = loc["qvar"] else: qvar = udict[var[-1]] qvtype = str(type(qvar))[1:-1].split()[1][1:-1] if qvtype.startswith("PyQt4"): qtVariable = True if qtVariable: vlist = self.__formatQt4Variable(qvar, qvtype) else: # format the dictionary found if dictkeys is None: dictkeys = dict.keys() else: # treatment for sequences and dictionaries if access: loc = {"dict" : dict} exec("dict = dict{0!s}".format(access), globals(), loc) dict = loc["dict"] else: dict = dict[dictkeys[0]] if isDict: dictkeys = dict.keys() else: dictkeys = range(len(dict)) vlist = self.__formatVariablesList(dictkeys, dict, scope, filter, formatSequences) varlist.extend(vlist) if obj is not None and not formatSequences: try: if repr(obj).startswith('{'): varlist.append(('...', 'dict', "{0:d}".format(len(obj.keys())))) elif repr(obj).startswith('['): varlist.append(('...', 'list', "{0:d}".format(len(obj)))) elif repr(obj).startswith('('): varlist.append(('...', 'tuple', "{0:d}".format(len(obj)))) except: pass self.write('{0}{1}\n'.format(ResponseVariable, str(varlist))) def __formatQt4Variable(self, value, vtype): """ Private method to produce a formatted output of a simple Qt4 type. @param value variable to be formatted @param vtype type of the variable to be formatted (string) @return A tuple consisting of a list of formatted variables. Each variable entry is a tuple of three elements, the variable name, its type and value. """ qttype = vtype.split('.')[-1] varlist = [] if qttype == 'QChar': varlist.append(("", "QChar", "{0}".format(chr(value.unicode())))) varlist.append(("", "int", "{0:d}".format(value.unicode()))) elif qttype == 'QByteArray': varlist.append(("bytes", "QByteArray", "{0}".format(bytes(value))[2:-1])) varlist.append(("hex", "QByteArray", "{0}".format(value.toHex())[2:-1])) varlist.append(("base64", "QByteArray", "{0}".format(value.toBase64())[2:-1])) varlist.append(("percent encoding", "QByteArray", "{0}".format(value.toPercentEncoding())[2:-1])) elif qttype == 'QPoint': varlist.append(("x", "int", "{0:d}".format(value.x()))) varlist.append(("y", "int", "{0:d}".format(value.y()))) elif qttype == 'QPointF': varlist.append(("x", "float", "{0:g}".format(value.x()))) varlist.append(("y", "float", "{0:g}".format(value.y()))) elif qttype == 'QRect': varlist.append(("x", "int", "{0:d}".format(value.x()))) varlist.append(("y", "int", "{0:d}".format(value.y()))) varlist.append(("width", "int", "{0:d}".format(value.width()))) varlist.append(("height", "int", "{0:d}".format(value.height()))) elif qttype == 'QRectF': varlist.append(("x", "float", "{0:g}".format(value.x()))) varlist.append(("y", "float", "{0:g}".format(value.y()))) varlist.append(("width", "float", "{0:g}".format(value.width()))) varlist.append(("height", "float", "{0:g}".format(value.height()))) elif qttype == 'QSize': varlist.append(("width", "int", "{0:d}".format(value.width()))) varlist.append(("height", "int", "{0:d}".format(value.height()))) elif qttype == 'QSizeF': varlist.append(("width", "float", "{0:g}".format(value.width()))) varlist.append(("height", "float", "{0:g}".format(value.height()))) elif qttype == 'QColor': varlist.append(("name", "QString", "{0}".format(value.name()))) r, g, b, a = value.getRgb() varlist.append(("rgb", "int", "{0:d}, {1:d}, {2:d}, {3:d}".format(r, g, b, a))) h, s, v, a = value.getHsv() varlist.append(("hsv", "int", "{0:d}, {1:d}, {2:d}, {3:d}".format(h, s, v, a))) c, m, y, k, a = value.getCmyk() varlist.append(("cmyk", "int", "{0:d}, {1:d}, {2:d}, {3:d}, {4:d}".format(c, m, y, k, a))) elif qttype == 'QDate': varlist.append(("", "QDate", "{0}".format(value.toString()))) elif qttype == 'QTime': varlist.append(("", "QTime", "{0}".format(value.toString()))) elif qttype == 'QDateTime': varlist.append(("", "QDateTime", "{0}".format(value.toString()))) elif qttype == 'QDir': varlist.append(("path", "QString", "{0}".format(value.path()))) varlist.append(("absolutePath", "QString", "{0}".format(value.absolutePath()))) varlist.append(("canonicalPath", "QString", "{0}".format(value.canonicalPath()))) elif qttype == 'QFile': varlist.append(("fileName", "QString", "{0}".format(value.fileName()))) elif qttype == 'QFont': varlist.append(("family", "QString", "{0}".format(value.family()))) varlist.append(("pointSize", "int", "{0:d}".format(value.pointSize()))) varlist.append(("weight", "int", "{0:d}".format(value.weight()))) varlist.append(("bold", "bool", "{0}".format(value.bold()))) varlist.append(("italic", "bool", "{0}".format(value.italic()))) elif qttype == 'QUrl': varlist.append(("url", "QString", "{0}".format(value.toString()))) varlist.append(("scheme", "QString", "{0}".format(value.scheme()))) varlist.append(("user", "QString", "{0}".format(value.userName()))) varlist.append(("password", "QString", "{0}".format(value.password()))) varlist.append(("host", "QString", "{0}".format(value.host()))) varlist.append(("port", "int", "%d" % value.port())) varlist.append(("path", "QString", "{0}".format(value.path()))) elif qttype == 'QModelIndex': varlist.append(("valid", "bool", "{0}".format(value.isValid()))) if value.isValid(): varlist.append(("row", "int", "{0}".format(value.row()))) varlist.append(("column", "int", "{0}".format(value.column()))) varlist.append(("internalId", "int", "{0}".format(value.internalId()))) varlist.append(("internalPointer", "void *", "{0}".format(value.internalPointer()))) elif qttype == 'QRegExp': varlist.append(("pattern", "QString", "{0}".format(value.pattern()))) # GUI stuff elif qttype == 'QAction': varlist.append(("name", "QString", "{0}".format(value.objectName()))) varlist.append(("text", "QString", "{0}".format(value.text()))) varlist.append(("icon text", "QString", "{0}".format(value.iconText()))) varlist.append(("tooltip", "QString", "{0}".format(value.toolTip()))) varlist.append(("whatsthis", "QString", "{0}".format(value.whatsThis()))) varlist.append(("shortcut", "QString", "{0}".format(value.shortcut().toString()))) elif qttype == 'QKeySequence': varlist.append(("value", "", "{0}".format(value.toString()))) # XML stuff elif qttype == 'QDomAttr': varlist.append(("name", "QString", "{0}".format(value.name()))) varlist.append(("value", "QString", "{0}".format(value.value()))) elif qttype == 'QDomCharacterData': varlist.append(("data", "QString", "{0}".format(value.data()))) elif qttype == 'QDomComment': varlist.append(("data", "QString", "{0}".format(value.data()))) elif qttype == "QDomDocument": varlist.append(("text", "QString", "{0}".format(value.toString()))) elif qttype == 'QDomElement': varlist.append(("tagName", "QString", "{0}".format(value.tagName()))) varlist.append(("text", "QString", "{0}".format(value.text()))) elif qttype == 'QDomText': varlist.append(("data", "QString", "{0}".format(value.data()))) # Networking stuff elif qttype == 'QHostAddress': varlist.append(("address", "QHostAddress", "{0}".format(value.toString()))) return varlist def __formatVariablesList(self, keylist, dict, scope, filter = [], formatSequences = False): """ Private method to produce a formated variables list. The dictionary passed in to it is scanned. Variables are only added to the list, if their type is not contained in the filter list and their name doesn't match any of the filter expressions. The formated variables list (a list of tuples of 3 values) is returned. @param keylist keys of the dictionary @param dict the dictionary to be scanned @param scope 1 to filter using the globals filter, 0 using the locals filter (int). Variables are only added to the list, if their name do not match any of the filter expressions. @param filter the indices of variable types to be filtered. Variables are only added to the list, if their type is not contained in the filter list. @param formatSequences flag indicating, that sequence or dictionary variables should be formatted. If it is 0 (or false), just the number of items contained in these variables is returned. (boolean) @return A tuple consisting of a list of formatted variables. Each variable entry is a tuple of three elements, the variable name, its type and value. """ varlist = [] if scope: patternFilterObjects = self.globalsFilterObjects else: patternFilterObjects = self.localsFilterObjects for key in keylist: # filter based on the filter pattern matched = False for pat in patternFilterObjects: if pat.match(str(key)): matched = True break if matched: continue # filter hidden attributes (filter #0) if 0 in filter and str(key)[:2] == '__': continue # special handling for '__builtins__' (it's way too big) if key == '__builtins__': rvalue = '' valtype = 'module' else: value = dict[key] valtypestr = str(type(value))[1:-1] valtype = valtypestr[7:-1] if valtype not in ConfigVarTypeStrings: if ConfigVarTypeStrings.index('instance') in filter: continue elif valtype == "sip.methoddescriptor": if ConfigVarTypeStrings.index('instance method') in filter: continue elif valtype == "sip.enumtype": if ConfigVarTypeStrings.index('class') in filter: continue valtype = valtypestr else: try: if ConfigVarTypeStrings.index(valtype) in filter: continue except ValueError: if valtype == "classobj": if ConfigVarTypeStrings.index('instance') in filter: continue elif valtype == "sip.methoddescriptor": if ConfigVarTypeStrings.index('instance method') in filter: continue elif valtype == "sip.enumtype": if ConfigVarTypeStrings.index('class') in filter: continue elif not valtype.startswith("PySide") and \ ConfigVarTypeStrings.index('other') in filter: continue try: if valtype not in ['list', 'tuple', 'dict']: rvalue = repr(value) if valtype.startswith('class') and \ rvalue[0] in ['{', '(', '[']: rvalue = "" else: if valtype == 'dict': rvalue = "{0:d}".format(len(value.keys())) else: rvalue = "{0:d}".format(len(value)) except: rvalue = '' if formatSequences: if str(key) == key: key = "'{0!s}'".format(key) else: key = str(key) varlist.append((key, valtype, rvalue)) return varlist def __generateFilterObjects(self, scope, filterString): """ Private slot to convert a filter string to a list of filter objects. @param scope 1 to generate filter for global variables, 0 for local variables (int) @param filterString string of filter patterns separated by ';' """ patternFilterObjects = [] for pattern in filterString.split(';'): patternFilterObjects.append(re.compile('^{0}$'.format(pattern))) if scope: self.globalsFilterObjects = patternFilterObjects[:] else: self.localsFilterObjects = patternFilterObjects[:] def __completionList(self, text): """ Private slot to handle the request for a commandline completion list. @param text the text to be completed (string) """ completerDelims = ' \t\n`~!@#$%^&*()-=+[{]}\\|;:\'",<>/?' completions = [] state = 0 # find position of last delim character pos = -1 while pos >= -len(text): if text[pos] in completerDelims: if pos == -1: text = '' else: text = text[pos+1:] break pos -= 1 try: comp = self.complete(text, state) except: comp = None while comp is not None: completions.append(comp) state += 1 try: comp = self.complete(text, state) except: comp = None self.write("{0}{1}||{2}\n".format(ResponseCompletion, str(completions), text)) def startDebugger(self, filename = None, host = None, port = None, enableTrace = True, exceptions = True, tracePython = False, redirect = True): """ Public method used to start the remote debugger. @param filename the program to be debugged (string) @param host hostname of the debug server (string) @param port portnumber of the debug server (int) @param enableTrace flag to enable the tracing function (boolean) @param exceptions flag to enable exception reporting of the IDE (boolean) @param tracePython flag to enable tracing into the Python library (boolean) @param redirect flag indicating redirection of stdin, stdout and stderr (boolean) """ global debugClient if host is None: host = os.getenv('ERICHOST', 'localhost') if port is None: port = os.getenv('ERICPORT', 42424) remoteAddress = self.__resolveHost(host) self.connectDebugger(port, remoteAddress, redirect) if filename is not None: self.running = os.path.abspath(filename) else: try: self.running = os.path.abspath(sys.argv[0]) except IndexError: self.running = None if self.running: self.__setCoding(self.running) try: sys.setappdefaultencoding(self.defaultCoding) except AttributeError: pass self.passive = True self.write("{0}{1}|{2:d}\n".format(PassiveStartup, self.running, exceptions)) self.__interact() # setup the debugger variables self._fncache = {} self.dircache = [] self.mainFrame = None self.inRawMode = False self.debugging = True self.attachThread(mainThread = True) self.mainThread.tracePython = tracePython # set the system exception handling function to ensure, that # we report on all unhandled exceptions sys.excepthook = self.__unhandled_exception # now start debugging if enableTrace: self.mainThread.set_trace() def startProgInDebugger(self, progargs, wd = '', host = None, port = None, exceptions = True, tracePython = False, redirect = True): """ Public method used to start the remote debugger. @param progargs commandline for the program to be debugged (list of strings) @param wd working directory for the program execution (string) @param host hostname of the debug server (string) @param port portnumber of the debug server (int) @param exceptions flag to enable exception reporting of the IDE (boolean) @param tracePython flag to enable tracing into the Python library (boolean) @param redirect flag indicating redirection of stdin, stdout and stderr (boolean) """ if host is None: host = os.getenv('ERICHOST', 'localhost') if port is None: port = os.getenv('ERICPORT', 42424) remoteAddress = self.__resolveHost(host) self.connectDebugger(port, remoteAddress, redirect) self._fncache = {} self.dircache = [] sys.argv = progargs[:] sys.argv[0] = os.path.abspath(sys.argv[0]) sys.path = self.__getSysPath(os.path.dirname(sys.argv[0])) if wd == '': os.chdir(sys.path[1]) else: os.chdir(wd) self.running = sys.argv[0] self.__setCoding(self.running) try: sys.setappdefaultencoding(self.__coding) except AttributeError: pass self.mainFrame = None self.inRawMode = False self.debugging = True self.passive = True self.write("{0}{1}|{2:d}\n".format(PassiveStartup, self.running, exceptions)) self.__interact() self.attachThread(mainThread = True) self.mainThread.tracePython = tracePython # set the system exception handling function to ensure, that # we report on all unhandled exceptions sys.excepthook = self.__unhandled_exception # This will eventually enter a local event loop. # Note the use of backquotes to cause a repr of self.running. The # need for this is on Windows os where backslash is the path separator. # They will get inadvertantly stripped away during the eval causing IOErrors # if self.running is passed as a normal str. self.debugMod.__dict__['__file__'] = self.running sys.modules['__main__'] = self.debugMod res = self.mainThread.run('exec(open(' + repr(self.running) + ').read())', self.debugMod.__dict__) self.progTerminated(res) def run_call(self, scriptname, func, *args): """ Public method used to start the remote debugger and call a function. @param scriptname name of the script to be debugged (string) @param func function to be called @param *args arguments being passed to func @return result of the function call """ self.startDebugger(scriptname, enableTrace = False) res = self.mainThread.runcall(func, *args) self.progTerminated(res) return res def __resolveHost(self, host): """ Private method to resolve a hostname to an IP address. @param host hostname of the debug server (string) @return IP address (string) """ try: host, version = host.split("@@") except ValueError: version = 'v4' if version == 'v4': family = socket.AF_INET else: family = socket.AF_INET6 return socket.getaddrinfo(host, None, family, socket.SOCK_STREAM)[0][4][0] def main(self): """ Public method implementing the main method. """ if '--' in sys.argv: args = sys.argv[1:] host = None port = None wd = '' tracePython = False exceptions = True redirect = True while args[0]: if args[0] == '-h': host = args[1] del args[0] del args[0] elif args[0] == '-p': port = int(args[1]) del args[0] del args[0] elif args[0] == '-w': wd = args[1] del args[0] del args[0] elif args[0] == '-t': tracePython = True del args[0] elif args[0] == '-e': exceptions = False del args[0] elif args[0] == '-n': redirect = False del args[0] elif args[0] == '--no-encoding': self.noencoding = True del args[0] elif args[0] == '--fork-child': self.fork_auto = True self.fork_child = True del args[0] elif args[0] == '--fork-parent': self.fork_auto = True self.fork_child = False del args[0] elif args[0] == '--': del args[0] break else: # unknown option del args[0] if not args: print("No program given. Aborting!") else: if not self.noencoding: self.__coding = self.defaultCoding try: sys.setappdefaultencoding(self.defaultCoding) except AttributeError: pass self.startProgInDebugger(args, wd, host, port, exceptions = exceptions, tracePython = tracePython, redirect = redirect) else: if sys.argv[1] == '--no-encoding': self.noencoding = True del sys.argv[1] if sys.argv[1] == '': del sys.argv[1] try: port = int(sys.argv[1]) except (ValueError, IndexError): port = -1 try: redirect = int(sys.argv[2]) except (ValueError, IndexError): redirect = True try: ipOrHost = sys.argv[3] if ':' in ipOrHost: remoteAddress = ipOrHost elif ipOrHost[0] in '0123456789': remoteAddress = ipOrHost else: remoteAddress = self.__resolveHost(ipOrHost) except: remoteAddress = None sys.argv = [''] if not '' in sys.path: sys.path.insert(0, '') if port >= 0: if not self.noencoding: self.__coding = self.defaultCoding try: sys.setappdefaultencoding(self.defaultCoding) except AttributeError: pass self.connectDebugger(port, remoteAddress, redirect) self.__interact() else: print("No network port given. Aborting...") def fork(self): """ Public method implementing a fork routine deciding which branch to follow. """ if not self.fork_auto: self.write(RequestForkTo + '\n') self.eventLoop(True) pid = DebugClientOrigFork() if pid == 0: # child if not self.fork_child: sys.settrace(None) sys.setprofile(None) self.sessionClose(0) else: # parent if self.fork_child: sys.settrace(None) sys.setprofile(None) self.sessionClose(0) return pid def close(self, fd): """ Private method implementing a close method as a replacement for os.close(). It prevents the debugger connections from being closed. @param fd file descriptor to be closed (integer) """ if fd in [self.readstream.fileno(), self.writestream.fileno(), self.errorstream.fileno()]: return DebugClientOrigClose(fd) def __getSysPath(self, firstEntry): """ Private slot to calculate a path list including the PYTHONPATH environment variable. @param firstEntry entry to be put first in sys.path (string) @return path list for use as sys.path (list of strings) """ sysPath = [path for path in os.environ.get("PYTHONPATH", "").split(os.pathsep) if path not in sys.path] + sys.path[:] if "" in sysPath: sysPath.remove("") sysPath.insert(0, firstEntry) sysPath.insert(0, '') return sysPath eric4-4.5.18/eric/DebugClients/Python3/PaxHeaders.8617/DebugThread.py0000644000175000001440000000013212261012651023151 xustar000000000000000030 mtime=1388582313.962101953 30 atime=1389081085.479724352 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python3/DebugThread.py0000644000175000001440000000736612261012651022717 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing the debug thread. """ import bdb import os import sys from DebugBase import * class DebugThread(DebugBase): """ Class implementing a debug thread. It represents a thread in the python interpreter that we are tracing. Provides simple wrapper methods around bdb for the 'owning' client to call to step etc. """ def __init__(self, dbgClient, targ = None, args = None, kwargs = None, mainThread = False): """ Constructor @param dbgClient the owning client @param targ the target method in the run thread @param args arguments to be passed to the thread @param kwargs arguments to be passed to the thread @param mainThread 0 if this thread is not the mainscripts thread """ DebugBase.__init__(self, dbgClient) self._target = targ self._args = args self._kwargs = kwargs self._mainThread = mainThread # thread running tracks execution state of client code # it will always be False for main thread as that is tracked # by DebugClientThreads and Bdb... self._threadRunning = False self.__ident = None # id of this thread. self.__name = "" def set_ident(self, id): """ Public method to set the id for this thread. @param id id for this thread (int) """ self.__ident = id def get_ident(self): """ Public method to return the id of this thread. @return the id of this thread (int) """ return self.__ident def get_name(self): """ Public method to return the name of this thread. @return name of this thread (string) """ return self.__name def traceThread(self): """ Private method to setup tracing for this thread. """ self.set_trace() if not self._mainThread: self.set_continue(False) def bootstrap(self): """ Private method to bootstrap the thread. It wraps the call to the user function to enable tracing before hand. """ try: self._threadRunning = True self.traceThread() self._target(*self._args, **self._kwargs) except bdb.BdbQuit: pass finally: self._threadRunning = False self.quitting = True self._dbgClient.threadTerminated(self) sys.settrace(None) sys.setprofile(None) def trace_dispatch(self, frame, event, arg): """ Private method wrapping the trace_dispatch of bdb.py. It wraps the call to dispatch tracing into bdb to make sure we have locked the client to prevent multiple threads from entering the client event loop. @param frame The current stack frame. @param event The trace event (string) @param arg The arguments @return local trace function """ try: self._dbgClient.lockClient() # if this thread came out of a lock, and we are quitting # and we are still running, then get rid of tracing for this thread if self.quitting and self._threadRunning: sys.settrace(None) sys.setprofile(None) import threading self.__name = threading.current_thread().name retval = DebugBase.trace_dispatch(self, frame, event, arg) finally: self._dbgClient.unlockClient() return retval eric4-4.5.18/eric/DebugClients/Python3/PaxHeaders.8617/DebugClient.py0000644000175000001440000000013212261012651023160 xustar000000000000000030 mtime=1388582313.964101978 30 atime=1389081085.479724352 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python3/DebugClient.py0000644000175000001440000000162012261012651022711 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a non-threaded variant of the debug client. """ from AsyncIO import * from DebugBase import * import DebugClientBase class DebugClient(DebugClientBase.DebugClientBase, AsyncIO, DebugBase): """ Class implementing the client side of the debugger. This variant of the debugger implements the standard debugger client by subclassing all relevant base classes. """ def __init__(self): """ Constructor """ AsyncIO.__init__(self) DebugClientBase.DebugClientBase.__init__(self) DebugBase.__init__(self, self) self.variant = 'Standard' # We are normally called by the debugger to execute directly. if __name__ == '__main__': debugClient = DebugClient() debugClient.main() eric4-4.5.18/eric/DebugClients/PaxHeaders.8617/Python0000644000175000001440000000013212261012661020262 xustar000000000000000030 mtime=1388582321.338194645 30 atime=1389081086.015724339 30 ctime=1389081086.315724332 eric4-4.5.18/eric/DebugClients/Python/0000755000175000001440000000000012261012661020071 5ustar00detlevusers00000000000000eric4-4.5.18/eric/DebugClients/Python/PaxHeaders.8617/AsyncIO.py0000644000175000001440000000013212261012651022215 xustar000000000000000030 mtime=1388582313.967102016 30 atime=1389081085.479724352 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python/AsyncIO.py0000644000175000001440000000421512261012651021751 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2002 - 2014 Detlev Offenbach # """ Module implementing a base class of an asynchronous interface for the debugger. """ class AsyncIO(object): """ Class implementing asynchronous reading and writing. """ def __init__(self): """ Constructor @param parent the optional parent of this object (QObject) (ignored) """ # There is no connection yet. self.disconnect() def disconnect(self): """ Public method to disconnect any current connection. """ self.readfd = None self.writefd = None def setDescriptors(self,rfd,wfd): """ Public method called to set the descriptors for the connection. @param rfd file descriptor of the input file (int) @param wfd file descriptor of the output file (int) """ self.rbuf = '' self.readfd = rfd self.wbuf = '' self.writefd = wfd def readReady(self,fd): """ Public method called when there is data ready to be read. @param fd file descriptor of the file that has data to be read (int) """ try: got = self.readfd.readline_p() except: return if len(got) == 0: self.sessionClose() return self.rbuf = self.rbuf + got # Call handleLine for the line if it is complete. eol = self.rbuf.find('\n') while eol >= 0: s = self.rbuf[:eol + 1] self.rbuf = self.rbuf[eol + 1:] self.handleLine(s) eol = self.rbuf.find('\n') def writeReady(self,fd): """ Public method called when we are ready to write data. @param fd file descriptor of the file that has data to be written (int) """ self.writefd.write(self.wbuf) self.writefd.flush() self.wbuf = '' def write(self,s): """ Public method to write a string. @param s the data to be written (string) """ self.wbuf = self.wbuf + s eric4-4.5.18/eric/DebugClients/Python/PaxHeaders.8617/eric4dbgstub.py0000644000175000001440000000013212261012651023271 xustar000000000000000030 mtime=1388582313.969102041 30 atime=1389081085.479724352 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python/eric4dbgstub.py0000644000175000001440000000446512261012651023034 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2002 - 2014 Detlev Offenbach # """ Module implementing a debugger stub for remote debugging. """ import os import sys import distutils.sysconfig from eric4config import getConfig debugger = None __scriptname = None modDir = distutils.sysconfig.get_python_lib(True) ericpath = os.getenv('ERICDIR', getConfig('ericDir')) if not ericpath in sys.path: sys.path.insert(-1, ericpath) def initDebugger(kind = "standard"): """ Module function to initialize a debugger for remote debugging. @param kind type of debugger ("standard" or "threads") @return flag indicating success (boolean) """ global debugger res = 1 try: if kind == "standard": import DebugClient debugger = DebugClient.DebugClient() elif kind == "threads": import DebugClientThreads debugger = DebugClientThreads.DebugClientThreads() else: raise ValueError except ImportError: debugger = None res = 0 return res def runcall(func, *args): """ Module function mimicing the Pdb interface. @param func function to be called (function object) @param *args arguments being passed to func @return the function result """ global debugger, __scriptname return debugger.run_call(__scriptname, func, *args) def setScriptname(name): """ Module function to set the scriptname to be reported back to the IDE. @param name absolute pathname of the script (string) """ global __scriptname __scriptname = name def startDebugger(enableTrace = True, exceptions = True, tracePython = False, redirect = True): """ Module function used to start the remote debugger. @keyparam enableTrace flag to enable the tracing function (boolean) @keyparam exceptions flag to enable exception reporting of the IDE (boolean) @keyparam tracePython flag to enable tracing into the Python library (boolean) @keyparam redirect flag indicating redirection of stdin, stdout and stderr (boolean) """ global debugger if debugger: debugger.startDebugger(enableTrace = enableTrace, exceptions = exceptions, tracePython = tracePython, redirect = redirect) eric4-4.5.18/eric/DebugClients/Python/PaxHeaders.8617/DCTestResult.py0000644000175000001440000000013212261012651023235 xustar000000000000000030 mtime=1388582313.971102067 30 atime=1389081085.479724352 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python/DCTestResult.py0000644000175000001440000000446312261012651022776 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Module implementing a TestResult derivative for the eric4 debugger. """ import select import traceback from unittest import TestResult from DebugProtocol import * class DCTestResult(TestResult): """ A TestResult derivative to work with eric4's debug client. For more details see unittest.py of the standard python distribution. """ def __init__(self, parent): """ Constructor @param parent The parent widget. """ TestResult.__init__(self) self.parent = parent def addFailure(self, test, err): """ Method called if a test failed. @param test Reference to the test object @param err The error traceback """ TestResult.addFailure(self, test, err) tracebackLines = traceback.format_exception(*(err + (10,))) self.parent.write('%s%s\n' % (ResponseUTTestFailed, unicode((unicode(test), tracebackLines)))) def addError(self, test, err): """ Method called if a test errored. @param test Reference to the test object @param err The error traceback """ TestResult.addError(self, test, err) tracebackLines = traceback.format_exception(*(err + (10,))) self.parent.write('%s%s\n' % (ResponseUTTestErrored, unicode((unicode(test), tracebackLines)))) def startTest(self, test): """ Method called at the start of a test. @param test Reference to the test object """ TestResult.startTest(self, test) self.parent.write('%s%s\n' % (ResponseUTStartTest, unicode((unicode(test), test.shortDescription())))) def stopTest(self, test): """ Method called at the end of a test. @param test Reference to the test object """ TestResult.stopTest(self, test) self.parent.write('%s\n' % ResponseUTStopTest) # ensure that pending input is processed rrdy, wrdy, xrdy = select.select([self.parent.readstream],[],[], 0.01) if self.parent.readstream in rrdy: self.parent.readReady(self.parent.readstream.fileno()) eric4-4.5.18/eric/DebugClients/Python/PaxHeaders.8617/DebugClientThreads.py0000644000175000001440000000013212261012651024410 xustar000000000000000030 mtime=1388582313.974102105 30 atime=1389081085.479724352 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python/DebugClientThreads.py0000644000175000001440000001421212261012651024142 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Module implementing the multithreaded version of the debug client. """ import thread from AsyncIO import * from DebugThread import * from DebugBase import * import DebugClientBase def _debugclient_start_new_thread(target, args, kwargs={}): """ Module function used to allow for debugging of multiple threads. The way it works is that below, we reset thread._start_new_thread to this function object. Thus, providing a hook for us to see when threads are started. From here we forward the request onto the DebugClient which will create a DebugThread object to allow tracing of the thread then start up the thread. These actions are always performed in order to allow dropping into debug mode. See DebugClientThreads.attachThread and DebugThread.DebugThread in DebugThread.py @param target the start function of the target thread (i.e. the user code) @param args arguments to pass to target @param kwargs keyword arguments to pass to target @return The identifier of the created thread """ if DebugClientBase.DebugClientInstance is not None: return DebugClientBase.DebugClientInstance.attachThread(target, args, kwargs) else: return _original_start_thread(target, args, kwargs) # make thread hooks available to system _original_start_thread = thread.start_new_thread thread.start_new_thread = _debugclient_start_new_thread # NOTE: import threading here AFTER above hook, as threading cache's # thread._start_new_thread. from threading import RLock class DebugClientThreads(DebugClientBase.DebugClientBase, AsyncIO): """ Class implementing the client side of the debugger. This variant of the debugger implements a threaded debugger client by subclassing all relevant base classes. """ def __init__(self): """ Constructor """ AsyncIO.__init__(self) DebugClientBase.DebugClientBase.__init__(self) # protection lock for synchronization self.clientLock = RLock() # the "current" thread, basically the thread we are at a breakpoint for. self.currentThread = None # special objects representing the main scripts thread and frame self.mainThread = None self.mainFrame = None self.variant = 'Threaded' def attachThread(self, target = None, args = None, kwargs = None, mainThread = 0): """ Public method to setup a thread for DebugClient to debug. If mainThread is non-zero, then we are attaching to the already started mainthread of the app and the rest of the args are ignored. @param target the start function of the target thread (i.e. the user code) @param args arguments to pass to target @param kwargs keyword arguments to pass to target @param mainThread non-zero, if we are attaching to the already started mainthread of the app @return The identifier of the created thread """ try: self.lockClient() newThread = DebugThread(self, target, args, kwargs, mainThread) ident = -1 if mainThread: ident = thread.get_ident() self.mainThread = newThread if self.debugging: sys.setprofile(newThread.profile) else: ident = _original_start_thread(newThread.bootstrap, ()) newThread.set_ident(ident) self.threads[newThread.get_ident()] = newThread finally: self.unlockClient() return ident def threadTerminated(self, dbgThread): """ Public method called when a DebugThread has exited. @param dbgThread the DebugThread that has exited """ try: self.lockClient() try: del self.threads[dbgThread.get_ident()] except KeyError: pass finally: self.unlockClient() def lockClient(self, blocking = 1): """ Public method to acquire the lock for this client. @param blocking flag to indicating a blocking lock @return flag indicating successful locking """ if blocking: self.clientLock.acquire() else: return self.clientLock.acquire(blocking) def unlockClient(self): """ Public method to release the lock for this client. """ try: self.clientLock.release() except AssertionError: pass def setCurrentThread(self, id): """ Private method to set the current thread. @param id the id the current thread should be set to. """ try: self.lockClient() if id is None: self.currentThread = None else: self.currentThread = self.threads[id] finally: self.unlockClient() def eventLoop(self, disablePolling = False): """ Public method implementing our event loop. @param disablePolling flag indicating to enter an event loop with polling disabled (boolean) """ # make sure we set the current thread appropriately threadid = thread.get_ident() self.setCurrentThread(threadid) DebugClientBase.DebugClientBase.eventLoop(self, disablePolling) self.setCurrentThread(None) def set_quit(self): """ Private method to do a 'set quit' on all threads. """ try: locked = self.lockClient(0) try: for key in self.threads.keys(): self.threads[key].set_quit() except: pass finally: if locked: self.unlockClient() # We are normally called by the debugger to execute directly. if __name__ == '__main__': debugClient = DebugClientThreads() debugClient.main() eric4-4.5.18/eric/DebugClients/Python/PaxHeaders.8617/DebugClientCapabilities.py0000644000175000001440000000013112261012651025406 xustar000000000000000029 mtime=1388582313.97610213 30 atime=1389081085.480724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python/DebugClientCapabilities.py0000644000175000001440000000071112261012651025140 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2005 - 2014 Detlev Offenbach # """ Module defining the debug clients capabilities. """ HasDebugger = 0x0001 HasInterpreter = 0x0002 HasProfiler = 0x0004 HasCoverage = 0x0008 HasCompleter = 0x0010 HasUnittest = 0x0020 HasShell = 0x0040 HasAll = HasDebugger | HasInterpreter | HasProfiler | \ HasCoverage | HasCompleter | HasUnittest | HasShell eric4-4.5.18/eric/DebugClients/Python/PaxHeaders.8617/DebugBase.py0000644000175000001440000000013212261012651022531 xustar000000000000000030 mtime=1388582313.984102232 30 atime=1389081085.480724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python/DebugBase.py0000644000175000001440000006061312261012651022271 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2002 - 2014 Detlev Offenbach # """ Module implementing the debug base class. """ import sys import traceback import bdb import os import types import atexit import inspect from DebugProtocol import * gRecursionLimit = 64 def printerr(s): """ Module function used for debugging the debug client. @param s data to be printed """ import sys sys.__stderr__.write('%s\n' % unicode(s)) sys.__stderr__.flush() def setRecursionLimit(limit): """ Module function to set the recursion limit. @param limit recursion limit (integer) """ global gRecursionLimit gRecursionLimit = limit class DebugBase(bdb.Bdb): """ Class implementing base class of the debugger. Provides simple wrapper methods around bdb for the 'owning' client to call to step etc. """ def __init__(self, dbgClient): """ Constructor @param dbgClient the owning client """ bdb.Bdb.__init__(self) self._dbgClient = dbgClient self._mainThread = 1 self.breaks = self._dbgClient.breakpoints self.__event = "" self.__isBroken = "" self.cFrame = None # current frame we are at self.currentFrame = None self.currentFrameLocals = None # frame that we are stepping in, can be different than currentFrame self.stepFrame = None # provide a hook to perform a hard breakpoint # Use it like this: # if hasattr(sys, 'breakpoint): sys.breakpoint() sys.breakpoint = self.set_trace # initialize parent bdb.Bdb.reset(self) self.__recursionDepth = -1 self.setRecursionDepth(inspect.currentframe()) def getCurrentFrame(self): """ Public method to return the current frame. @return the current frame """ return self.currentFrame def getCurrentFrameLocals(self): """ Public method to return the locals dictionary of the current frame. @return locals dictionary of the current frame """ return self.currentFrameLocals def step(self, traceMode): """ Public method to perform a step operation in this thread. @param traceMode If it is non-zero, then the step is a step into, otherwise it is a step over. """ self.stepFrame = self.currentFrame if traceMode: self.currentFrame = None self.set_step() else: self.set_next(self.currentFrame) def stepOut(self): """ Public method to perform a step out of the current call. """ self.stepFrame = self.currentFrame self.set_return(self.currentFrame) def go(self, special): """ Public method to resume the thread. It resumes the thread stopping only at breakpoints or exceptions. @param special flag indicating a special continue operation """ self.currentFrame = None self.set_continue(special) def setRecursionDepth(self, frame): """ Public method to determine the current recursion depth. @param frame The current stack frame. """ self.__recursionDepth = 0 while frame is not None: self.__recursionDepth += 1 frame = frame.f_back def profile(self, frame, event, arg): """ Public method used to trace some stuff independent of the debugger trace function. @param frame The current stack frame. @param event The trace event (string) @param arg The arguments """ if event == 'return': self.cFrame = frame.f_back self.__recursionDepth -= 1 elif event == 'call': self.cFrame = frame self.__recursionDepth += 1 if self.__recursionDepth > gRecursionLimit: raise RuntimeError('maximum recursion depth exceeded\n' '(offending frame is two down the stack)') def trace_dispatch(self, frame, event, arg): """ Reimplemented from bdb.py to do some special things. This specialty is to check the connection to the debug server for new events (i.e. new breakpoints) while we are going through the code. @param frame The current stack frame. @param event The trace event (string) @param arg The arguments @return local trace function """ if self.quitting: return # None # give the client a chance to push through new break points. self._dbgClient.eventPoll() self.__event == event self.__isBroken = False if event == 'line': return self.dispatch_line(frame) if event == 'call': return self.dispatch_call(frame, arg) if event == 'return': return self.dispatch_return(frame, arg) if event == 'exception': return self.dispatch_exception(frame, arg) if event == 'c_call': return self.trace_dispatch if event == 'c_exception': return self.trace_dispatch if event == 'c_return': return self.trace_dispatch print 'DebugBase.trace_dispatch: unknown debugging event:', `event` return self.trace_dispatch def dispatch_line(self, frame): """ Reimplemented from bdb.py to do some special things. This speciality is to check the connection to the debug server for new events (i.e. new breakpoints) while we are going through the code. @param frame The current stack frame. @return local trace function """ if self.stop_here(frame) or self.break_here(frame): self.user_line(frame) if self.quitting: raise bdb.BdbQuit return self.trace_dispatch def dispatch_return(self, frame, arg): """ Reimplemented from bdb.py to handle passive mode cleanly. @param frame The current stack frame. @param arg The arguments @return local trace function """ if self.stop_here(frame) or frame == self.returnframe: self.user_return(frame, arg) if self.quitting and not self._dbgClient.passive: raise bdb.BdbQuit return self.trace_dispatch def dispatch_exception(self, frame, arg): """ Reimplemented from bdb.py to always call user_exception. @param frame The current stack frame. @param arg The arguments @return local trace function """ if not self.__skip_it(frame): self.user_exception(frame, arg) if self.quitting: raise bdb.BdbQuit return self.trace_dispatch def set_trace(self, frame = None): """ Overridden method of bdb.py to do some special setup. @param frame frame to start debugging from """ bdb.Bdb.set_trace(self, frame) sys.setprofile(self.profile) def set_continue(self, special): """ Reimplemented from bdb.py to always get informed of exceptions. @param special flag indicating a special continue operation """ # Modified version of the one found in bdb.py # Here we only set a new stop frame if it is a normal continue. if not special: self.stopframe = self.botframe self.returnframe = None self.quitting = 0 def set_quit(self): """ Public method to quit. It wraps call to bdb to clear the current frame properly. """ self.currentFrame = None sys.setprofile(None) bdb.Bdb.set_quit(self) def fix_frame_filename(self, frame): """ Public method used to fixup the filename for a given frame. The logic employed here is that if a module was loaded from a .pyc file, then the correct .py to operate with should be in the same path as the .pyc. The reason this logic is needed is that when a .pyc file is generated, the filename embedded and thus what is readable in the code object of the frame object is the fully qualified filepath when the pyc is generated. If files are moved from machine to machine this can break debugging as the .pyc will refer to the .py on the original machine. Another case might be sharing code over a network... This logic deals with that. @param frame the frame object """ # get module name from __file__ if frame.f_globals.has_key('__file__') and \ frame.f_globals['__file__'] and \ frame.f_globals['__file__'] == frame.f_code.co_filename: root, ext = os.path.splitext(frame.f_globals['__file__']) if ext == '.pyc' or ext == '.py' or ext == '.pyo': fixedName = root + '.py' if os.path.exists(fixedName): return fixedName return frame.f_code.co_filename def set_watch(self, cond, temporary=0): """ Public method to set a watch expression. @param cond expression of the watch expression (string) @param temporary flag indicating a temporary watch expression (boolean) """ bp = bdb.Breakpoint("Watch", 0, temporary, cond) if cond.endswith('??created??') or cond.endswith('??changed??'): bp.condition, bp.special = cond.split() else: bp.condition = cond bp.special = "" bp.values = {} if not self.breaks.has_key("Watch"): self.breaks["Watch"] = 1 else: self.breaks["Watch"] += 1 def clear_watch(self, cond): """ Public method to clear a watch expression. @param cond expression of the watch expression to be cleared (string) """ try: possibles = bdb.Breakpoint.bplist["Watch", 0] for i in range(0, len(possibles)): b = possibles[i] if b.cond == cond: b.deleteMe() self.breaks["Watch"] -= 1 if self.breaks["Watch"] == 0: del self.breaks["Watch"] break except KeyError: pass def get_watch(self, cond): """ Public method to get a watch expression. @param cond expression of the watch expression to be cleared (string) """ possibles = bdb.Breakpoint.bplist["Watch", 0] for i in range(0, len(possibles)): b = possibles[i] if b.cond == cond: return b def __do_clearWatch(self, cond): """ Private method called to clear a temporary watch expression. @param cond expression of the watch expression to be cleared (string) """ self.clear_watch(cond) self._dbgClient.write('%s%s\n' % (ResponseClearWatch, cond)) def __effective(self, frame): """ Private method to determine, if a watch expression is effective. @param frame the current execution frame @return tuple of watch expression and a flag to indicate, that a temporary watch expression may be deleted (bdb.Breakpoint, boolean) """ possibles = bdb.Breakpoint.bplist["Watch", 0] for i in range(0, len(possibles)): b = possibles[i] if b.enabled == 0: continue if not b.cond: # watch expression without expression shouldn't occur, just ignore it continue try: val = eval(b.condition, frame.f_globals, frame.f_locals) if b.special: if b.special == '??created??': if b.values[frame][0] == 0: b.values[frame][0] = 1 b.values[frame][1] = val return (b, 1) else: continue b.values[frame][0] = 1 if b.special == '??changed??': if b.values[frame][1] != val: b.values[frame][1] = val if b.values[frame][2] > 0: b.values[frame][2] -= 1 continue else: return (b, 1) else: continue continue if val: if b.ignore > 0: b.ignore -= 1 continue else: return (b, 1) except: if b.special: try: b.values[frame][0] = 0 except KeyError: b.values[frame] = [0, None, b.ignore] continue return (None, None) def break_here(self, frame): """ Reimplemented from bdb.py to fix the filename from the frame. See fix_frame_filename for more info. @param frame the frame object @return flag indicating the break status (boolean) """ filename = self.canonic(self.fix_frame_filename(frame)) if not self.breaks.has_key(filename) and not self.breaks.has_key("Watch"): return 0 if self.breaks.has_key(filename): lineno = frame.f_lineno if lineno in self.breaks[filename]: # flag says ok to delete temp. bp (bp, flag) = bdb.effective(filename, lineno, frame) if bp: self.currentbp = bp.number if (flag and bp.temporary): self.__do_clear(filename, lineno) return 1 if self.breaks.has_key("Watch"): # flag says ok to delete temp. bp (bp, flag) = self.__effective(frame) if bp: self.currentbp = bp.number if (flag and bp.temporary): self.__do_clearWatch(bp.cond) return 1 return 0 def break_anywhere(self, frame): """ Reimplemented from bdb.py to do some special things. These speciality is to fix the filename from the frame (see fix_frame_filename for more info). @param frame the frame object @return flag indicating the break status (boolean) """ return self.breaks.has_key( self.canonic(self.fix_frame_filename(frame))) or \ (self.breaks.has_key("Watch") and self.breaks["Watch"]) def get_break(self, filename, lineno): """ Reimplemented from bdb.py to get the first breakpoint of a particular line. Because eric4 supports only one breakpoint per line, this overwritten method will return this one and only breakpoint. @param filename the filename of the bp to retrieve (string) @param ineno the linenumber of the bp to retrieve (integer) @return breakpoint or None, if there is no bp """ filename = self.canonic(filename) return self.breaks.has_key(filename) and \ lineno in self.breaks[filename] and \ bdb.Breakpoint.bplist[filename, lineno][0] or None def __do_clear(self, filename, lineno): """ Private method called to clear a temporary breakpoint. @param filename name of the file the bp belongs to @param lineno linenumber of the bp """ self.clear_break(filename, lineno) self._dbgClient.write('%s%s,%d\n' % (ResponseClearBreak, filename, lineno)) def getStack(self): """ Public method to get the stack. @return list of lists with file name (string), line number (integer) and function name (string) """ fr = self.cFrame stack = [] while fr is not None: fname = self._dbgClient.absPath(self.fix_frame_filename(fr)) fline = fr.f_lineno ffunc = fr.f_code.co_name if ffunc == '?': ffunc = '' stack.append([fname, fline, ffunc]) if fr == self._dbgClient.mainFrame: fr = None else: fr = fr.f_back return stack def user_line(self, frame): """ Reimplemented to handle the program about to execute a particular line. @param frame the frame object """ line = frame.f_lineno # We never stop on line 0. if line == 0: return fn = self._dbgClient.absPath(self.fix_frame_filename(frame)) # See if we are skipping at the start of a newly loaded program. if self._dbgClient.mainFrame is None: if fn != self._dbgClient.getRunning(): return self._dbgClient.mainFrame = frame self.currentFrame = frame self.currentFrameLocals = frame.f_locals # remember the locals because it is reinitialized when accessed fr = frame stack = [] while fr is not None: # Reset the trace function so we can be sure # to trace all functions up the stack... This gets around # problems where an exception/breakpoint has occurred # but we had disabled tracing along the way via a None # return from dispatch_call fr.f_trace = self.trace_dispatch fname = self._dbgClient.absPath(self.fix_frame_filename(fr)) fline = fr.f_lineno ffunc = fr.f_code.co_name if ffunc == '?': ffunc = '' stack.append([fname, fline, ffunc]) if fr == self._dbgClient.mainFrame: fr = None else: fr = fr.f_back self.__isBroken = True self._dbgClient.write('%s%s\n' % (ResponseLine, unicode(stack))) self._dbgClient.eventLoop() def user_exception(self,frame,(exctype,excval,exctb),unhandled=0): """ Reimplemented to report an exception to the debug server. @param frame the frame object @param exctype the type of the exception @param excval data about the exception @param exctb traceback for the exception @param unhandled flag indicating an uncaught exception """ if exctype in [SystemExit, bdb.BdbQuit]: atexit._run_exitfuncs() if excval is None: excval = 0 elif isinstance(excval, (unicode, str)): self._dbgClient.write(excval) excval = 1 if isinstance(excval, int): self._dbgClient.progTerminated(excval) else: self._dbgClient.progTerminated(excval.code) return if exctype in [SyntaxError, IndentationError]: try: message, (filename, linenr, charnr, text) = excval except ValueError: exclist = [] realSyntaxError = True else: exclist = [message, [filename, linenr, charnr]] realSyntaxError = os.path.exists(filename) if realSyntaxError: self._dbgClient.write("%s%s\n" % (ResponseSyntax, unicode(exclist))) self._dbgClient.eventLoop() return if type(exctype) in [types.ClassType, # Python up to 2.4 types.TypeType]: # Python 2.5+ exctype = exctype.__name__ if excval is None: excval = '' if unhandled: exctypetxt = "unhandled %s" % unicode(exctype) else: exctypetxt = unicode(exctype) try: exclist = [exctypetxt, unicode(excval).encode(self._dbgClient.getCoding())] except TypeError: exclist = [exctypetxt, str(excval)] if exctb: frlist = self.__extract_stack(exctb) frlist.reverse() self.currentFrame = frlist[0] self.currentFrameLocals = frlist[0].f_locals # remember the locals because it is reinitialized when accessed for fr in frlist: filename = self._dbgClient.absPath(self.fix_frame_filename(fr)) linenr = fr.f_lineno if os.path.basename(filename).startswith("DebugClient") or \ os.path.basename(filename) == "bdb.py": break exclist.append([filename, linenr]) self._dbgClient.write("%s%s\n" % (ResponseException, unicode(exclist))) if exctb is None: return self._dbgClient.eventLoop() def __extract_stack(self, exctb): """ Private member to return a list of stack frames. @param exctb exception traceback @return list of stack frames """ tb = exctb stack = [] while tb is not None: stack.append(tb.tb_frame) tb = tb.tb_next tb = None return stack def user_return(self,frame,retval): """ Reimplemented to report program termination to the debug server. @param frame the frame object @param retval the return value of the program """ # The program has finished if we have just left the first frame. if frame == self._dbgClient.mainFrame and \ self._mainThread: atexit._run_exitfuncs() self._dbgClient.progTerminated(retval) elif frame is not self.stepFrame: self.stepFrame = None self.user_line(frame) def stop_here(self,frame): """ Reimplemented to filter out debugger files. Tracing is turned off for files that are part of the debugger that are called from the application being debugged. @param frame the frame object @return flag indicating whether the debugger should stop here """ if self.__skip_it(frame): return 0 return bdb.Bdb.stop_here(self,frame) def __skip_it(self, frame): """ Private method to filter out debugger files. Tracing is turned off for files that are part of the debugger that are called from the application being debugged. @param frame the frame object @return flag indicating whether the debugger should skip this frame """ fn = self.fix_frame_filename(frame) # Eliminate things like and . if fn[0] == '<': return 1 #XXX - think of a better way to do this. It's only a convience for #debugging the debugger - when the debugger code is in the current #directory. if os.path.basename(fn) in [\ 'AsyncFile.py', 'AsyncIO.py', 'DebugConfig.py', 'DCTestResult.py', 'DebugBase.py', 'DebugClientBase.py', 'DebugClientCapabilities.py', 'DebugClient.py', 'DebugClientThreads.py', 'DebugProtocol.py', 'DebugThread.py', 'FlexCompleter.py', 'PyProfile.py'] or \ os.path.dirname(fn).endswith("coverage"): return 1 if self._dbgClient.shouldSkip(fn): return 1 return 0 def isBroken(self): """ Public method to return the broken state of the debugger. @return flag indicating the broken state (boolean) """ return self.__isBroken def getEvent(self): """ Public method to return the last debugger event. @return last debugger event (string) """ return self.__event eric4-4.5.18/eric/DebugClients/Python/PaxHeaders.8617/getpass.py0000644000175000001440000000013212261012651022356 xustar000000000000000030 mtime=1388582313.987102269 30 atime=1389081085.480724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python/getpass.py0000644000175000001440000000263012261012651022111 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2004 - 2014 Detlev Offenbach # """ Module implementing utilities to get a password and/or the current user name. getpass(prompt) - prompt for a password, with echo turned off getuser() - get the user name from the environment or password database This module is a replacement for the one found in the Python distribution. It is to provide a debugger compatible variant of the a.m. functions. """ import sys __all__ = ["getpass","getuser"] def getuser(): """ Function to get the username from the environment or password database. First try various environment variables, then the password database. This works on Windows as long as USERNAME is set. @return username (string) """ # this is copied from the oroginal getpass.py import os for name in ('LOGNAME', 'USER', 'LNAME', 'USERNAME'): user = os.environ.get(name) if user: return user # If this fails, the exception will "explain" why import pwd return pwd.getpwuid(os.getuid())[0] def getpass(prompt='Password: '): """ Function to prompt for a password, with echo turned off. @param prompt Prompt to be shown to the user (string) @return Password entered by the user (string) """ return raw_input(prompt, 0) unix_getpass = getpass win_getpass = getpass default_getpass = getpass eric4-4.5.18/eric/DebugClients/Python/PaxHeaders.8617/coverage0000644000175000001440000000013212261012661022055 xustar000000000000000030 mtime=1388582321.323194458 30 atime=1389081086.015724339 30 ctime=1389081086.315724332 eric4-4.5.18/eric/DebugClients/Python/coverage/0000755000175000001440000000000012261012661021664 5ustar00detlevusers00000000000000eric4-4.5.18/eric/DebugClients/Python/coverage/PaxHeaders.8617/codeunit.py0000644000175000001440000000013212261012651024315 xustar000000000000000030 mtime=1388582313.990102307 30 atime=1389081085.496724352 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python/coverage/codeunit.py0000644000175000001440000000632012261012651024050 0ustar00detlevusers00000000000000"""Code unit (module) handling for Coverage.""" import glob, os def code_unit_factory(morfs, file_locator, omit_prefixes=None): """Construct a list of CodeUnits from polymorphic inputs. `morfs` is a module or a filename, or a list of same. `file_locator` is a FileLocator that can help resolve filenames. `omit_prefixes` is a list of prefixes. CodeUnits that match those prefixes will be omitted from the list. Returns a list of CodeUnit objects. """ # Be sure we have a list. if not isinstance(morfs, (list, tuple)): morfs = [morfs] # On Windows, the shell doesn't expand wildcards. Do it here. globbed = [] for morf in morfs: if isinstance(morf, basestring) and ('?' in morf or '*' in morf): globbed.extend(glob.glob(morf)) else: globbed.append(morf) morfs = globbed code_units = [CodeUnit(morf, file_locator) for morf in morfs] if omit_prefixes: prefixes = [file_locator.abs_file(p) for p in omit_prefixes] filtered = [] for cu in code_units: for prefix in prefixes: if cu.name.startswith(prefix): break else: filtered.append(cu) code_units = filtered return code_units class CodeUnit: """Code unit: a filename or module. Instance attributes: `name` is a human-readable name for this code unit. `filename` is the os path from which we can read the source. `relative` is a boolean. """ def __init__(self, morf, file_locator): if hasattr(morf, '__file__'): f = morf.__file__ else: f = morf # .pyc files should always refer to a .py instead. if f.endswith('.pyc'): f = f[:-1] self.filename = file_locator.canonical_filename(f) if hasattr(morf, '__name__'): n = modname = morf.__name__ self.relative = True else: n = os.path.splitext(morf)[0] rel = file_locator.relative_filename(n) if os.path.isabs(n): self.relative = (rel != n) else: self.relative = True n = rel modname = None self.name = n self.modname = modname def __repr__(self): return "" % (self.name, self.filename) def __cmp__(self, other): return cmp(self.name, other.name) def flat_rootname(self): """A base for a flat filename to correspond to this code unit. Useful for writing files about the code where you want all the files in the same directory, but need to differentiate same-named files from different directories. For example, the file a/b/c.py might return 'a_b_c' """ if self.modname: return self.modname.replace('.', '_') else: root = os.path.splitdrive(os.path.splitext(self.name)[0])[1] return root.replace('\\', '_').replace('/', '_') def source_file(self): """Return an open file for reading the source of the code unit.""" return open(self.filename) eric4-4.5.18/eric/DebugClients/Python/coverage/PaxHeaders.8617/htmlfiles0000644000175000001440000000007411706605624024063 xustar000000000000000030 atime=1389081086.015724339 30 ctime=1389081086.315724332 eric4-4.5.18/eric/DebugClients/Python/coverage/htmlfiles/0000755000175000001440000000000011706605624023665 5ustar00detlevusers00000000000000eric4-4.5.18/eric/DebugClients/Python/coverage/htmlfiles/PaxHeaders.8617/style.css0000644000175000001440000000007411246351210025776 xustar000000000000000030 atime=1389081085.496724352 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python/coverage/htmlfiles/style.css0000644000175000001440000000526211246351210025530 0ustar00detlevusers00000000000000/* CSS styles for Coverage. */ /* Page-wide styles */ html, body, h1, h2, h3, p, td, th { margin: 0; padding: 0; border: 0; outline: 0; font-weight: inherit; font-style: inherit; font-size: 100%; font-family: inherit; vertical-align: baseline; } /* Set baseline grid to 16 pt. */ body { font-family: georgia, serif; font-size: 1em; } html>body { font-size: 16px; } /* Set base font size to 12/16 */ p { font-size: .75em; /* 12/16 */ line-height: 1.3333em; /* 16/12 */ } table { border-collapse: collapse; } a.nav { text-decoration: none; color: inherit; } a.nav:hover { text-decoration: underline; color: inherit; } /* Page structure */ #header { background: #f8f8f8; width: 100%; border-bottom: 1px solid #eee; } #source { padding: 1em; font-family: "courier new", monospace; } #footer { font-size: 85%; font-family: verdana, sans-serif; color: #666666; font-style: italic; } #index { margin: 1em 0 0 3em; } /* Header styles */ .content { padding: 1em 3em; } h1 { font-size: 1.25em; } h2.stats { margin-top: .5em; font-size: 1em; } .stats span { border: 1px solid; padding: .1em .25em; margin: 0 .1em; cursor: pointer; border-color: #999 #ccc #ccc #999; } .stats span.hide { border-color: #ccc #999 #999 #ccc; } /* Source file styles */ .linenos p { text-align: right; margin: 0; padding: 0 .5em; color: #999999; font-family: verdana, sans-serif; font-size: .625em; /* 10/16 */ line-height: 1.6em; /* 16/10 */ } td.text { width: 100%; } .text p { margin: 0; padding: 0 0 0 .5em; border-left: 2px solid #ffffff; white-space: nowrap; } .text p.mis { background: #ffdddd; border-left: 2px solid #ff0000; } .text p.run { background: #ddffdd; border-left: 2px solid #00ff00; } .text p.exc { background: #eeeeee; border-left: 2px solid #808080; } .text p.hide { background: inherit; } /* index styles */ #index td, #index th { text-align: right; width: 6em; padding: .25em 0; border-bottom: 1px solid #eee; } #index th { font-style: italic; color: #333; border-bottom: 1px solid #ccc; } #index td.name, #index th.name { text-align: left; width: auto; height: 1.5em; } #index td.name a { text-decoration: none; color: #000; } #index td.name a:hover { text-decoration: underline; color: #000; } #index tr.total { font-weight: bold; } #index tr.total td { padding: .25em 0; border-top: 1px solid #ccc; border-bottom: none; } eric4-4.5.18/eric/DebugClients/Python/coverage/htmlfiles/PaxHeaders.8617/jquery-1.3.2.min.js0000644000175000001440000000007411246351210027222 xustar000000000000000030 atime=1389081085.496724352 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python/coverage/htmlfiles/jquery-1.3.2.min.js0000644000175000001440000015764611246351210026772 0ustar00detlevusers00000000000000/* * jQuery JavaScript Library v1.3.2 * http://jquery.com/ * * Copyright (c) 2009 John Resig * Dual licensed under the MIT and GPL licenses. * http://docs.jquery.com/License * * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009) * Revision: 6246 */ (function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("",""]||!O.indexOf("",""]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"","
    "]||!O.indexOf("",""]||(!O.indexOf("",""]||!O.indexOf("",""]||!o.support.htmlSerialize&&[1,"div
    ","
    "]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}}); /* * Sizzle CSS Selector Engine - v0.9.3 * Copyright 2009, The Dojo Foundation * Released under the MIT, BSD, and GPL Licenses. * More information: http://sizzlejs.com/ */ (function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return UT[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="

    ";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="
    ";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("
    ").append(M.responseText.replace(//g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='
    ';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})();eric4-4.5.18/eric/DebugClients/Python/coverage/htmlfiles/PaxHeaders.8617/index.html0000644000175000001440000000007411246351210026121 xustar000000000000000030 atime=1389081085.496724352 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python/coverage/htmlfiles/index.html0000644000175000001440000000232011246351210025643 0ustar00detlevusers00000000000000 Coverage report
    {% for file in files %} {% endfor %}
    Module statements run excluded coverage
    {{file.cu.name}} {{file.stm}} {{file.run}} {{file.exc}} {{file.pc_cov|format_pct}}%
    Total {{total_stm}} {{total_run}} {{total_exc}} {{total_cov|format_pct}}%
    eric4-4.5.18/eric/DebugClients/Python/coverage/htmlfiles/PaxHeaders.8617/pyfile.html0000644000175000001440000000007411246351210026302 xustar000000000000000030 atime=1389081085.497724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python/coverage/htmlfiles/pyfile.html0000644000175000001440000000304611246351210026032 0ustar00detlevusers00000000000000 Coverage for {{cu.name|escape}}
    {% for line in lines %}

    {{line.number}}

    {% endfor %}
    {% for line in lines %}

    {{line.text.rstrip|escape|not_empty}}

    {% endfor %}
    eric4-4.5.18/eric/DebugClients/Python/coverage/PaxHeaders.8617/annotate.py0000644000175000001440000000013212261012651024314 xustar000000000000000030 mtime=1388582313.992102333 30 atime=1389081085.497724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python/coverage/annotate.py0000644000175000001440000000551712261012651024056 0ustar00detlevusers00000000000000"""Source file annotation for Coverage.""" import os, re from report import Reporter class AnnotateReporter(Reporter): """Generate annotated source files showing line coverage. This reporter creates annotated copies of the measured source files. Each .py file is copied as a .py,cover file, with a left-hand margin annotating each line:: > def h(x): - if 0: #pragma: no cover - pass > if x == 1: ! a = 1 > else: > a = 2 > h(2) Executed lines use '>', lines not executed use '!', lines excluded from consideration use '-'. """ def __init__(self, coverage, ignore_errors=False): super(AnnotateReporter, self).__init__(coverage, ignore_errors) self.directory = None blank_re = re.compile(r"\s*(#|$)") else_re = re.compile(r"\s*else\s*:\s*(#|$)") def report(self, morfs, directory=None, omit_prefixes=None): """Run the report.""" self.report_files(self.annotate_file, morfs, directory, omit_prefixes) def annotate_file(self, cu, statements, excluded, missing): """Annotate a single file. `cu` is the CodeUnit for the file to annotate. """ filename = cu.filename source = cu.source_file() if self.directory: dest_file = os.path.join(self.directory, cu.flat_rootname()) dest_file += ".py,cover" else: dest_file = filename + ",cover" dest = open(dest_file, 'w') lineno = 0 i = 0 j = 0 covered = True while True: line = source.readline() if line == '': break lineno += 1 while i < len(statements) and statements[i] < lineno: i += 1 while j < len(missing) and missing[j] < lineno: j += 1 if i < len(statements) and statements[i] == lineno: covered = j >= len(missing) or missing[j] > lineno if self.blank_re.match(line): dest.write(' ') elif self.else_re.match(line): # Special logic for lines containing only 'else:'. if i >= len(statements) and j >= len(missing): dest.write('! ') elif i >= len(statements) or j >= len(missing): dest.write('> ') elif statements[i] == missing[j]: dest.write('! ') else: dest.write('> ') elif lineno in excluded: dest.write('- ') elif covered: dest.write('> ') else: dest.write('! ') dest.write(line) source.close() dest.close()eric4-4.5.18/eric/DebugClients/Python/coverage/PaxHeaders.8617/summary.py0000644000175000001440000000013212261012651024200 xustar000000000000000030 mtime=1388582313.994102358 30 atime=1389081085.497724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python/coverage/summary.py0000644000175000001440000000504312261012651023734 0ustar00detlevusers00000000000000"""Summary reporting""" import sys from report import Reporter class SummaryReporter(Reporter): """A reporter for writing the summary report.""" def __init__(self, coverage, show_missing=True, ignore_errors=False): super(SummaryReporter, self).__init__(coverage, ignore_errors) self.show_missing = show_missing def report(self, morfs, omit_prefixes=None, outfile=None): """Writes a report summarizing coverage statistics per module.""" self.find_code_units(morfs, omit_prefixes) # Prepare the formatting strings max_name = max([len(cu.name) for cu in self.code_units] + [5]) fmt_name = "%%- %ds " % max_name fmt_err = "%s %s: %s\n" header = fmt_name % "Name" + " Stmts Exec Cover\n" fmt_coverage = fmt_name + "% 6d % 6d % 5d%%\n" if self.show_missing: header = header.replace("\n", " Missing\n") fmt_coverage = fmt_coverage.replace("\n", " %s\n") rule = "-" * (len(header)-1) + "\n" if not outfile: outfile = sys.stdout # Write the header outfile.write(header) outfile.write(rule) total_statements = 0 total_executed = 0 total_units = 0 for cu in self.code_units: try: statements, _, missing, readable = self.coverage._analyze(cu) n = len(statements) m = n - len(missing) if n > 0: pc = 100.0 * m / n else: pc = 100.0 args = (cu.name, n, m, pc) if self.show_missing: args = args + (readable,) outfile.write(fmt_coverage % args) total_units += 1 total_statements = total_statements + n total_executed = total_executed + m except KeyboardInterrupt: #pragma: no cover raise except: if not self.ignore_errors: typ, msg = sys.exc_info()[:2] outfile.write(fmt_err % (cu.name, typ.__name__, msg)) if total_units > 1: outfile.write(rule) if total_statements > 0: pc = 100.0 * total_executed / total_statements else: pc = 100.0 args = ("TOTAL", total_statements, total_executed, pc) if self.show_missing: args = args + ("",) outfile.write(fmt_coverage % args)eric4-4.5.18/eric/DebugClients/Python/coverage/PaxHeaders.8617/data.py0000644000175000001440000000013212261012651023414 xustar000000000000000030 mtime=1388582313.997102396 30 atime=1389081085.497724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python/coverage/data.py0000644000175000001440000001362212261012651023152 0ustar00detlevusers00000000000000"""Coverage data for Coverage.""" import os import cPickle as pickle from backward import sorted # pylint: disable-msg=W0622 class CoverageData: """Manages collected coverage data, including file storage. The data file format is a pickled dict, with these keys: * collector: a string identifying the collecting software * lines: a dict mapping filenames to sorted lists of line numbers executed: { 'file1': [17,23,45], 'file2': [1,2,3], ... } """ # Name of the data file (unless environment variable is set). filename_default = ".coverage" # Environment variable naming the data file. filename_env = "COVERAGE_FILE" def __init__(self, basename=None, suffix=None, collector=None): """Create a CoverageData. `basename` is the name of the file to use for storing data. `suffix` is a suffix to append to the base file name. This can be used for multiple or parallel execution, so that many coverage data files can exist simultaneously. `collector` is a string describing the coverage measurement software. """ self.basename = basename self.collector = collector self.suffix = suffix self.use_file = True self.filename = None # A map from canonical Python source file name to a dictionary in # which there's an entry for each line number that has been # executed: # # { # 'filename1.py': { 12: True, 47: True, ... }, # ... # } # self.lines = {} def usefile(self, use_file=True): """Set whether or not to use a disk file for data.""" self.use_file = use_file def _make_filename(self): """Construct the filename that will be used for data file storage.""" assert self.use_file if not self.filename: self.filename = (self.basename or os.environ.get(self.filename_env, self.filename_default)) if self.suffix: self.filename += self.suffix def read(self): """Read coverage data from the coverage data file (if it exists).""" data = {} if self.use_file: self._make_filename() data = self._read_file(self.filename) self.lines = data def write(self): """Write the collected coverage data to a file.""" if self.use_file: self._make_filename() self.write_file(self.filename) def erase(self): """Erase the data, both in this object, and from its file storage.""" if self.use_file: self._make_filename() if self.filename and os.path.exists(self.filename): os.remove(self.filename) self.lines = {} def line_data(self): """Return the map from filenames to lists of line numbers executed.""" return dict( [(f, sorted(linemap.keys())) for f, linemap in self.lines.items()] ) def write_file(self, filename): """Write the coverage data to `filename`.""" # Create the file data. data = {} data['lines'] = self.line_data() if self.collector: data['collector'] = self.collector # Write the pickle to the file. fdata = open(filename, 'wb') try: pickle.dump(data, fdata, 2) finally: fdata.close() def read_file(self, filename): """Read the coverage data from `filename`.""" self.lines = self._read_file(filename) def _read_file(self, filename): """Return the stored coverage data from the given file.""" try: fdata = open(filename, 'rb') try: data = pickle.load(fdata) finally: fdata.close() if isinstance(data, dict): # Unpack the 'lines' item. lines = dict([ (f, dict([(l, True) for l in linenos])) for f,linenos in data['lines'].items() ]) return lines else: return {} except Exception: return {} def combine_parallel_data(self): """ Treat self.filename as a file prefix, and combine the data from all of the files starting with that prefix. """ self._make_filename() data_dir, local = os.path.split(self.filename) for f in os.listdir(data_dir or '.'): if f.startswith(local): full_path = os.path.join(data_dir, f) new_data = self._read_file(full_path) for filename, file_data in new_data.items(): self.lines.setdefault(filename, {}).update(file_data) def add_line_data(self, data_points): """Add executed line data. `data_points` is (filename, lineno) pairs. """ for filename, lineno in data_points: self.lines.setdefault(filename, {})[lineno] = True def executed_files(self): """A list of all files that had been measured as executed.""" return self.lines.keys() def executed_lines(self, filename): """A map containing all the line numbers executed in `filename`. If `filename` hasn't been collected at all (because it wasn't executed) then return an empty map. """ return self.lines.get(filename) or {} def summary(self): """Return a dict summarizing the coverage data. Keys are the basename of the filenames, and values are the number of executed lines. This is useful in the unit tests. """ summ = {} for filename, lines in self.lines.items(): summ[os.path.basename(filename)] = len(lines) return summ eric4-4.5.18/eric/DebugClients/Python/coverage/PaxHeaders.8617/backward.py0000644000175000001440000000013212261012651024261 xustar000000000000000030 mtime=1388582313.999102421 30 atime=1389081085.497724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python/coverage/backward.py0000644000175000001440000000111612261012651024012 0ustar00detlevusers00000000000000"""Add things to old Pythons so I can pretend they are newer.""" # pylint: disable-msg=W0622 # (Redefining built-in blah) # The whole point of this file is to redefine built-ins, so shut up about it. # Python 2.3 doesn't have `set` try: set = set # new in 2.4 except NameError: # (Redefining built-in 'set') from sets import Set as set # Python 2.3 doesn't have `sorted`. try: sorted = sorted except NameError: def sorted(iterable): """A 2.3-compatible implementation of `sorted`.""" lst = list(iterable) lst.sort() return lst eric4-4.5.18/eric/DebugClients/Python/coverage/PaxHeaders.8617/report.py0000644000175000001440000000013212261012652024017 xustar000000000000000030 mtime=1388582314.001102447 30 atime=1389081085.497724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python/coverage/report.py0000644000175000001440000000377712261012652023567 0ustar00detlevusers00000000000000"""Reporter foundation for Coverage.""" import os from codeunit import code_unit_factory class Reporter(object): """A base class for all reporters.""" def __init__(self, coverage, ignore_errors=False): """Create a reporter. `coverage` is the coverage instance. `ignore_errors` controls how skittish the reporter will be during file processing. """ self.coverage = coverage self.ignore_errors = ignore_errors # The code units to report on. Set by find_code_units. self.code_units = [] # The directory into which to place the report, used by some derived # classes. self.directory = None def find_code_units(self, morfs, omit_prefixes): """Find the code units we'll report on. `morfs` is a list of modules or filenames. `omit_prefixes` is a list of prefixes to leave out of the list. """ morfs = morfs or self.coverage.data.executed_files() self.code_units = code_unit_factory( morfs, self.coverage.file_locator, omit_prefixes) self.code_units.sort() def report_files(self, report_fn, morfs, directory=None, omit_prefixes=None): """Run a reporting function on a number of morfs. `report_fn` is called for each relative morf in `morfs`. """ self.find_code_units(morfs, omit_prefixes) self.directory = directory if self.directory and not os.path.exists(self.directory): os.makedirs(self.directory) for cu in self.code_units: try: if not cu.relative: continue statements, excluded, missing, _ = self.coverage._analyze(cu) report_fn(cu, statements, excluded, missing) except KeyboardInterrupt: raise except: if not self.ignore_errors: raise eric4-4.5.18/eric/DebugClients/Python/coverage/PaxHeaders.8617/files.py0000644000175000001440000000013212261012652023606 xustar000000000000000030 mtime=1388582314.003102472 30 atime=1389081085.497724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python/coverage/files.py0000644000175000001440000000456012261012652023345 0ustar00detlevusers00000000000000"""File wrangling.""" import os, sys class FileLocator: """Understand how filenames work.""" def __init__(self): self.relative_dir = self.abs_file(os.curdir) + os.sep # Cache of results of calling the canonical_filename() method, to # avoid duplicating work. self.canonical_filename_cache = {} def abs_file(self, filename): """Return the absolute normalized form of `filename`.""" return os.path.normcase(os.path.abspath(os.path.realpath(filename))) def relative_filename(self, filename): """Return the relative form of `filename`. The filename will be relative to the current directory when the FileLocator was constructed. """ return filename.replace(self.relative_dir, "") def canonical_filename(self, filename): """Return a canonical filename for `filename`. An absolute path with no redundant components and normalized case. """ if not self.canonical_filename_cache.has_key(filename): f = filename if os.path.isabs(f) and not os.path.exists(f): if not self.get_zip_data(f): f = os.path.basename(f) if not os.path.isabs(f): for path in [os.curdir] + sys.path: g = os.path.join(path, f) if os.path.exists(g): f = g break cf = self.abs_file(f) self.canonical_filename_cache[filename] = cf return self.canonical_filename_cache[filename] def get_zip_data(self, filename): """Get data from `filename` if it is a zip file path. Returns the data read from the zip file, or None if no zip file could be found or `filename` isn't in it. """ import zipimport markers = ['.zip'+os.sep, '.egg'+os.sep] for marker in markers: if marker in filename: parts = filename.split(marker) try: zi = zipimport.zipimporter(parts[0]+marker[:-1]) except zipimport.ZipImportError: continue try: data = zi.get_data(parts[1]) except IOError: continue return data return None eric4-4.5.18/eric/DebugClients/Python/coverage/PaxHeaders.8617/__init__.py0000644000175000001440000000013212261012652024243 xustar000000000000000030 mtime=1388582314.005102497 30 atime=1389081085.498724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python/coverage/__init__.py0000644000175000001440000000604112261012652023776 0ustar00detlevusers00000000000000"""Code coverage measurement for Python. Ned Batchelder http://nedbatchelder.com/code/coverage """ __version__ = "3.0.1" # see detailed history in CHANGES.txt from control import coverage from data import CoverageData from cmdline import main, CoverageScript from misc import CoverageException # Module-level functions. The original API to this module was based on # functions defined directly in the module, with a singleton of the coverage() # class. That design hampered programmability. Here we define the top-level # functions to create the singleton when they are first called. # Singleton object for use with module-level functions. The singleton is # created as needed when one of the module-level functions is called. _the_coverage = None def _singleton_method(name): """Return a function to the `name` method on a singleton `coverage` object. The singleton object is created the first time one of these functions is called. """ def wrapper(*args, **kwargs): """Singleton wrapper around a coverage method.""" global _the_coverage if not _the_coverage: _the_coverage = coverage(auto_data=True) return getattr(_the_coverage, name)(*args, **kwargs) return wrapper # Define the module-level functions. use_cache = _singleton_method('use_cache') start = _singleton_method('start') stop = _singleton_method('stop') erase = _singleton_method('erase') exclude = _singleton_method('exclude') analysis = _singleton_method('analysis') analysis2 = _singleton_method('analysis2') report = _singleton_method('report') annotate = _singleton_method('annotate') # COPYRIGHT AND LICENSE # # Copyright 2001 Gareth Rees. All rights reserved. # Copyright 2004-2009 Ned Batchelder. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are # met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the # distribution. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT # HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS # OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR # TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE # USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH # DAMAGE.eric4-4.5.18/eric/DebugClients/Python/coverage/PaxHeaders.8617/html.py0000644000175000001440000000013212261012652023450 xustar000000000000000030 mtime=1388582314.008102535 30 atime=1389081085.498724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python/coverage/html.py0000644000175000001440000001262512261012652023210 0ustar00detlevusers00000000000000"""HTML reporting for Coverage.""" import os, re, shutil from . import __version__ # pylint: disable-msg=W0611 from report import Reporter from templite import Templite # Disable pylint msg W0612, because a bunch of variables look unused, but # they're accessed in a templite context via locals(). # pylint: disable-msg=W0612 def data_filename(fname): """Return the path to a data file of ours.""" return os.path.join(os.path.split(__file__)[0], fname) def data(fname): """Return the contents of a data file of ours.""" return open(data_filename(fname)).read() class HtmlReporter(Reporter): """HTML reporting.""" def __init__(self, coverage, ignore_errors=False): super(HtmlReporter, self).__init__(coverage, ignore_errors) self.directory = None self.source_tmpl = Templite(data("htmlfiles/pyfile.html"), globals()) self.files = [] def report(self, morfs, directory, omit_prefixes=None): """Generate an HTML report for `morfs`. `morfs` is a list of modules or filenames. `directory` is where to put the HTML files. `omit_prefixes` is a list of strings, prefixes of modules to omit from the report. """ assert directory, "must provide a directory for html reporting" # Process all the files. self.report_files(self.html_file, morfs, directory, omit_prefixes) # Write the index file. self.index_file() # Create the once-per-directory files. shutil.copyfile( data_filename("htmlfiles/style.css"), os.path.join(directory, "style.css") ) shutil.copyfile( data_filename("htmlfiles/jquery-1.3.2.min.js"), os.path.join(directory, "jquery-1.3.2.min.js") ) def html_file(self, cu, statements, excluded, missing): """Generate an HTML file for one source file.""" source = cu.source_file() source_lines = source.readlines() n_lin = len(source_lines) n_stm = len(statements) n_exc = len(excluded) n_mis = len(missing) n_run = n_stm - n_mis if n_stm > 0: pc_cov = 100.0 * n_run / n_stm else: pc_cov = 100.0 # These classes determine which lines are highlighted by default. c_run = " run hide" c_exc = " exc" c_mis = " mis" lines = [] for lineno, line in enumerate(source_lines): lineno += 1 # enum is 0-based, lines are 1-based. css_class = "" if lineno in statements: css_class += " stm" if lineno not in missing and lineno not in excluded: css_class += c_run if lineno in excluded: css_class += c_exc if lineno in missing: css_class += c_mis lineinfo = { 'text': line, 'number': lineno, 'class': css_class.strip() or "pln" } lines.append(lineinfo) # Write the HTML page for this file. html_filename = cu.flat_rootname() + ".html" html_path = os.path.join(self.directory, html_filename) html = spaceless(self.source_tmpl.render(locals())) fhtml = open(html_path, 'w') fhtml.write(html) fhtml.close() # Save this file's information for the index file. self.files.append({ 'stm': n_stm, 'run': n_run, 'exc': n_exc, 'mis': n_mis, 'pc_cov': pc_cov, 'html_filename': html_filename, 'cu': cu, }) def index_file(self): """Write the index.html file for this report.""" index_tmpl = Templite(data("htmlfiles/index.html"), globals()) files = self.files total_stm = sum([f['stm'] for f in files]) total_run = sum([f['run'] for f in files]) total_exc = sum([f['exc'] for f in files]) if total_stm: total_cov = 100.0 * total_run / total_stm else: total_cov = 100.0 fhtml = open(os.path.join(self.directory, "index.html"), "w") fhtml.write(index_tmpl.render(locals())) fhtml.close() # Helpers for templates def escape(t): """HTML-escape the text in t.""" return (t # Change all tabs to 4 spaces. .expandtabs(4) # Convert HTML special chars into HTML entities. .replace("&", "&").replace("<", "<").replace(">", ">") .replace("'", "'").replace('"', """) # Convert runs of spaces: " " -> "      " .replace(" ", "  ") # To deal with odd-length runs, convert the final pair of spaces # so that " " -> "     " .replace(" ", "  ") ) def not_empty(t): """Make sure HTML content is not completely empty.""" return t or " " def format_pct(p): """Format a percentage value for the HTML reports.""" return "%.0f" % p def spaceless(html): """Squeeze out some annoying extra space from an HTML string. Nicely-formatted templates mean lots of extra space in the result. Get rid of some. """ html = re.sub(">\s+

    \n

    ': # There's no point in ever tracing string executions, we can't do # anything with the data later anyway. return False # Compiled Python files have two filenames: frame.f_code.co_filename is # the filename at the time the .pyc was compiled. The second name # is __file__, which is where the .pyc was actually loaded from. Since # .pyc files can be moved after compilation (for example, by being # installed), we look for __file__ in the frame and prefer it to the # co_filename value. dunder_file = frame.f_globals.get('__file__') if dunder_file: if not dunder_file.endswith(".py"): if dunder_file[-4:-1] == ".py": dunder_file = dunder_file[:-1] filename = dunder_file canonical = self.file_locator.canonical_filename(filename) # If we aren't supposed to trace installed code, then check if this is # near the Python standard library and skip it if so. if not self.cover_pylib: if canonical.startswith(self.pylib_prefix): return False # We exclude the coverage code itself, since a little of it will be # measured otherwise. if canonical.startswith(self.cover_prefix): return False return canonical def use_cache(self, usecache): """Control the use of a data file (incorrectly called a cache). `usecache` is true or false, whether to read and write data on disk. """ self.data.usefile(usecache) def load(self): """Load previously-collected coverage data from the data file.""" self.collector.reset() self.data.read() def start(self): """Start measuring code coverage.""" if self.auto_data: self.load() # Save coverage data when Python exits. import atexit atexit.register(self.save) self.collector.start() def stop(self): """Stop measuring code coverage.""" self.collector.stop() self._harvest_data() def erase(self): """Erase previously-collected coverage data. This removes the in-memory data collected in this session as well as discarding the data file. """ self.collector.reset() self.data.erase() def clear_exclude(self): """Clear the exclude list.""" self.exclude_list = [] self.exclude_re = "" def exclude(self, regex): """Exclude source lines from execution consideration. `regex` is a regular expression. Lines matching this expression are not considered executable when reporting code coverage. A list of regexes is maintained; this function adds a new regex to the list. Matching any of the regexes excludes a source line. """ self.exclude_list.append(regex) self.exclude_re = "(" + ")|(".join(self.exclude_list) + ")" def get_exclude_list(self): """Return the list of excluded regex patterns.""" return self.exclude_list def save(self): """Save the collected coverage data to the data file.""" self._harvest_data() self.data.write() def combine(self): """Combine together a number of similarly-named coverage data files. All coverage data files whose name starts with `data_file` (from the coverage() constructor) will be read, and combined together into the current measurements. """ self.data.combine_parallel_data() def _harvest_data(self): """Get the collected data by filename and reset the collector.""" self.data.add_line_data(self.collector.data_points()) self.collector.reset() # Backward compatibility with version 1. def analysis(self, morf): """Like `analysis2` but doesn't return excluded line numbers.""" f, s, _, m, mf = self.analysis2(morf) return f, s, m, mf def analysis2(self, morf): """Analyze a module. `morf` is a module or a filename. It will be analyzed to determine its coverage statistics. The return value is a 5-tuple: * The filename for the module. * A list of line numbers of executable statements. * A list of line numbers of excluded statements. * A list of line numbers of statements not run (missing from execution). * A readable formatted string of the missing line numbers. The analysis uses the source file itself and the current measured coverage data. """ code_unit = code_unit_factory(morf, self.file_locator)[0] st, ex, m, mf = self._analyze(code_unit) return code_unit.filename, st, ex, m, mf def _analyze(self, code_unit): """Analyze a single code unit. Returns a 4-tuple: (statements, excluded, missing, missing formatted). """ from parser import CodeParser filename = code_unit.filename ext = os.path.splitext(filename)[1] source = None if ext == '.py': if not os.path.exists(filename): source = self.file_locator.get_zip_data(filename) if not source: raise CoverageException( "No source for code '%s'." % code_unit.filename ) parser = CodeParser() statements, excluded, line_map = parser.parse_source( text=source, filename=filename, exclude=self.exclude_re ) # Identify missing statements. missing = [] execed = self.data.executed_lines(filename) for line in statements: lines = line_map.get(line) if lines: for l in range(lines[0], lines[1]+1): if l in execed: break else: missing.append(line) else: if line not in execed: missing.append(line) return ( statements, excluded, missing, format_lines(statements, missing) ) def report(self, morfs=None, show_missing=True, ignore_errors=False, file=None, omit_prefixes=None): # pylint: disable-msg=W0622 """Write a summary report to `file`. Each module in `morfs` is listed, with counts of statements, executed statements, missing statements, and a list of lines missed. """ reporter = SummaryReporter(self, show_missing, ignore_errors) reporter.report(morfs, outfile=file, omit_prefixes=omit_prefixes) def annotate(self, morfs=None, directory=None, ignore_errors=False, omit_prefixes=None): """Annotate a list of modules. Each module in `morfs` is annotated. The source is written to a new file, named with a ",cover" suffix, with each line prefixed with a marker to indicate the coverage of the line. Covered lines have ">", excluded lines have "-", and missing lines have "!". """ reporter = AnnotateReporter(self, ignore_errors) reporter.report( morfs, directory=directory, omit_prefixes=omit_prefixes) def html_report(self, morfs=None, directory=None, ignore_errors=False, omit_prefixes=None): """Generate an HTML report. """ reporter = HtmlReporter(self, ignore_errors) reporter.report( morfs, directory=directory, omit_prefixes=omit_prefixes) eric4-4.5.18/eric/DebugClients/Python/coverage/PaxHeaders.8617/cmdline.py0000644000175000001440000000013212261012652024117 xustar000000000000000030 mtime=1388582314.012102586 30 atime=1389081085.498724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python/coverage/cmdline.py0000644000175000001440000001444312261012652023657 0ustar00detlevusers00000000000000"""Command-line support for Coverage.""" import getopt, sys from execfile import run_python_file USAGE = r""" Coverage version %(__version__)s Measure, collect, and report on code coverage in Python programs. Usage: coverage -x [-p] [-L] MODULE.py [ARG1 ARG2 ...] Execute the module, passing the given command-line arguments, collecting coverage data. With the -p option, include the machine name and process ID in the .coverage file name. With -L, measure coverage even inside the Python installed library, which isn't done by default. coverage -e Erase collected coverage data. coverage -c Combine data from multiple coverage files (as created by -p option above) and store it into a single file representing the union of the coverage. coverage -r [-m] [-i] [-o DIR,...] [FILE1 FILE2 ...] Report on the statement coverage for the given files. With the -m option, show line numbers of the statements that weren't executed. coverage -b -d DIR [-i] [-o DIR,...] [FILE1 FILE2 ...] Create an HTML report of the coverage of the given files. Each file gets its own page, with the file listing decorated to show executed, excluded, and missed lines. coverage -a [-d DIR] [-i] [-o DIR,...] [FILE1 FILE2 ...] Make annotated copies of the given files, marking statements that are executed with > and statements that are missed with !. -d DIR Write output files for -b or -a to this directory. -i Ignore errors while reporting or annotating. -o DIR,... Omit reporting or annotating files when their filename path starts with a directory listed in the omit list. e.g. coverage -i -r -o c:\python25,lib\enthought\traits -h Print this help. Coverage data is saved in the file .coverage by default. Set the COVERAGE_FILE environment variable to save it somewhere else. """.strip() class CoverageScript: """The command-line interface to Coverage.""" def __init__(self): import coverage self.covpkg = coverage self.coverage = None def help(self, error=None): """Display an error message, or the usage for Coverage.""" if error: print error print "Use -h for help." else: print USAGE % self.covpkg.__dict__ def command_line(self, argv, help_fn=None): """The bulk of the command line interface to Coverage. `argv` is the argument list to process. `help_fn` is the help function to use when something goes wrong. """ # Collect the command-line options. help_fn = help_fn or self.help OK, ERR = 0, 1 settings = {} optmap = { '-a': 'annotate', '-b': 'html', '-c': 'combine', '-d:': 'directory=', '-e': 'erase', '-h': 'help', '-i': 'ignore-errors', '-L': 'pylib', '-m': 'show-missing', '-p': 'parallel-mode', '-r': 'report', '-x': 'execute', '-o:': 'omit=', } short_opts = ''.join([o[1:] for o in optmap.keys()]) long_opts = optmap.values() options, args = getopt.getopt(argv, short_opts, long_opts) for o, a in options: if optmap.has_key(o): settings[optmap[o]] = True elif optmap.has_key(o + ':'): settings[optmap[o + ':']] = a elif o[2:] in long_opts: settings[o[2:]] = True elif o[2:] + '=' in long_opts: settings[o[2:]+'='] = a if settings.get('help'): help_fn() return OK # Check for conflicts and problems in the options. for i in ['erase', 'execute']: for j in ['annotate', 'html', 'report', 'combine']: if settings.get(i) and settings.get(j): help_fn("You can't specify the '%s' and '%s' " "options at the same time." % (i, j)) return ERR args_needed = (settings.get('execute') or settings.get('annotate') or settings.get('html') or settings.get('report')) action = (settings.get('erase') or settings.get('combine') or args_needed) if not action: help_fn( "You must specify at least one of -e, -x, -c, -r, -a, or -b." ) return ERR if not args_needed and args: help_fn("Unexpected arguments: %s" % " ".join(args)) return ERR # Do something. self.coverage = self.covpkg.coverage( data_suffix = bool(settings.get('parallel-mode')), cover_pylib = settings.get('pylib') ) if settings.get('erase'): self.coverage.erase() else: self.coverage.load() if settings.get('execute'): if not args: help_fn("Nothing to do.") return ERR # Run the script. self.coverage.start() try: run_python_file(args[0], args) finally: self.coverage.stop() self.coverage.save() if settings.get('combine'): self.coverage.combine() self.coverage.save() # Remaining actions are reporting, with some common options. show_missing = settings.get('show-missing') directory = settings.get('directory=') report_args = { 'morfs': args, 'ignore_errors': settings.get('ignore-errors'), } omit = settings.get('omit=') if omit: omit = omit.split(',') report_args['omit_prefixes'] = omit if settings.get('report'): self.coverage.report(show_missing=show_missing, **report_args) if settings.get('annotate'): self.coverage.annotate(directory=directory, **report_args) if settings.get('html'): self.coverage.html_report(directory=directory, **report_args) return OK def main(): """The main entrypoint to Coverage. This is installed as the script entrypoint. """ return CoverageScript().command_line(sys.argv[1:])eric4-4.5.18/eric/DebugClients/Python/coverage/PaxHeaders.8617/templite.py0000644000175000001440000000013212261012652024327 xustar000000000000000030 mtime=1388582314.014102611 30 atime=1389081085.498724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python/coverage/templite.py0000644000175000001440000000707412261012652024071 0ustar00detlevusers00000000000000"""A simple Python template renderer, for a nano-subset of Django syntax.""" # Started from http://blog.ianbicking.org/templating-via-dict-wrappers.html # and http://jtauber.com/2006/05/templates.html # and http://code.activestate.com/recipes/496730/ import re class Templite(object): """A simple template renderer, for a nano-subset of Django syntax. Supported constructs are extended variable access:: {{var.modifer.modifier|filter|filter}} and loops:: {% for var in list %}...{% endfor %} Construct a Templite with the template text, then use `render` against a dictionary context to create a finished string. """ def __init__(self, text, *contexts): """Construct a Templite with the given `text`. `contexts` are dictionaries of values to use for future renderings. These are good for filters and global values. """ self.loops = [] self.text = self._prepare(text) self.context = {} for context in contexts: self.context.update(context) def render(self, context=None): """Render this template by applying it to `context`. `context` is a dictionary of values to use in this rendering. """ # Make the complete context we'll use. ctx = dict(self.context) if context: ctx.update(context) ctxaccess = _ContextAccess(ctx) # Render the loops. for iloop, (loopvar, listvar, loopbody) in enumerate(self.loops): result = "" for listval in ctxaccess[listvar]: ctx[loopvar] = listval result += loopbody % ctxaccess ctx["loop:%d" % iloop] = result # Render the final template. return self.text % ctxaccess def _prepare(self, text): """Convert Django-style data references into Python-native ones.""" # Pull out loops. text = re.sub( r"(?s){% for ([a-z0-9_]+) in ([a-z0-9_.|]+) %}(.*?){% endfor %}", self._loop_prepare, text ) # Protect actual percent signs in the text. text = text.replace("%", "%%") # Convert {{foo}} into %(foo)s text = re.sub(r"{{([^}]+)}}", r"%(\1)s", text) return text def _loop_prepare(self, match): """Prepare a loop body for `_prepare`.""" nloop = len(self.loops) # Append (loopvar, listvar, loopbody) to self.loops loopvar, listvar, loopbody = match.groups() loopbody = self._prepare(loopbody) self.loops.append((loopvar, listvar, loopbody)) return "{{loop:%d}}" % nloop class _ContextAccess(object): """A mediator for a context. Implements __getitem__ on a context for Templite, so that string formatting references can pull data from the context. """ def __init__(self, context): self.context = context def __getitem__(self, key): if "|" in key: pipes = key.split("|") value = self[pipes[0]] for func in pipes[1:]: value = self[func](value) elif "." in key: dots = key.split('.') value = self[dots[0]] for dot in dots[1:]: try: value = getattr(value, dot) except AttributeError: value = value[dot] if callable(value): value = value() else: value = self.context[key] return value eric4-4.5.18/eric/DebugClients/Python/coverage/PaxHeaders.8617/misc.py0000644000175000001440000000013212261012652023437 xustar000000000000000030 mtime=1388582314.017102649 30 atime=1389081085.498724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python/coverage/misc.py0000644000175000001440000000260612261012652023175 0ustar00detlevusers00000000000000"""Miscellaneous stuff for Coverage.""" def nice_pair(pair): """Make a nice string representation of a pair of numbers. If the numbers are equal, just return the number, otherwise return the pair with a dash between them, indicating the range. """ start, end = pair if start == end: return "%d" % start else: return "%d-%d" % (start, end) def format_lines(statements, lines): """Nicely format a list of line numbers. Format a list of line numbers for printing by coalescing groups of lines as long as the lines represent consecutive statements. This will coalesce even if there are gaps between statements. For example, if `statements` is [1,2,3,4,5,10,11,12,13,14] and `lines` is [1,2,5,10,11,13,14] then the result will be "1-2, 5-11, 13-14". """ pairs = [] i = 0 j = 0 start = None pairs = [] while i < len(statements) and j < len(lines): if statements[i] == lines[j]: if start == None: start = lines[j] end = lines[j] j = j + 1 elif start: pairs.append((start, end)) start = None i = i + 1 if start: pairs.append((start, end)) ret = ', '.join(map(nice_pair, pairs)) return ret class CoverageException(Exception): """An exception specific to Coverage.""" pass eric4-4.5.18/eric/DebugClients/Python/coverage/PaxHeaders.8617/doc0000644000175000001440000000007411706605624022641 xustar000000000000000030 atime=1389081086.015724339 30 ctime=1389081086.315724332 eric4-4.5.18/eric/DebugClients/Python/coverage/doc/0000755000175000001440000000000011706605624022443 5ustar00detlevusers00000000000000eric4-4.5.18/eric/DebugClients/Python/coverage/doc/PaxHeaders.8617/PKG-INFO0000644000175000001440000000007411250515720024002 xustar000000000000000030 atime=1389081085.499724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python/coverage/doc/PKG-INFO0000644000175000001440000000207511250515720023533 0ustar00detlevusers00000000000000Metadata-Version: 1.0 Name: coverage Version: 3.0.1 Summary: Code coverage measurement for Python Home-page: http://nedbatchelder.com/code/coverage Author: Ned Batchelder Author-email: ned@nedbatchelder.com License: BSD Description: Coverage measures code coverage, typically during test execution. It uses the code analysis tools and tracing hooks provided in the Python standard library to determine which lines are executable, and which have been executed. Code repository and issue tracker are at `bitbucket.org `_. Keywords: code coverage testing Platform: UNKNOWN Classifier: Environment :: Console Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: BSD License Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python Classifier: Topic :: Software Development :: Quality Assurance Classifier: Topic :: Software Development :: Testing Classifier: Development Status :: 5 - Production/Stable eric4-4.5.18/eric/DebugClients/Python/coverage/doc/PaxHeaders.8617/README.txt0000644000175000001440000000007411250515765024414 xustar000000000000000030 atime=1389081085.499724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python/coverage/doc/README.txt0000644000175000001440000000064411250515765024145 0ustar00detlevusers00000000000000Coverage: code coverage testing for Python Coverage measures code coverage, typically during test execution. It uses the code analysis tools and tracing hooks provided in the Python standard library to determine which lines are executable, and which have been executed. For more information, see http://nedbatchelder.com/code/coverage Code repo and issue tracking are at http://bitbucket.org/ned/coveragepy eric4-4.5.18/eric/DebugClients/Python/coverage/doc/PaxHeaders.8617/CHANGES.txt0000644000175000001440000000007411246351207024521 xustar000000000000000030 atime=1389081085.499724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python/coverage/doc/CHANGES.txt0000644000175000001440000002031511246351207024247 0ustar00detlevusers00000000000000------------------------------ Change history for Coverage.py ------------------------------ Version 3.0.1, 7 July 2009 -------------------------- - Removed the recursion limit in the tracer function. Previously, code that ran more than 500 frames deep would crash. - Fixed a bizarre problem involving pyexpat, whereby lines following XML parser invocations could be overlooked. - On Python 2.3, coverage.py could mis-measure code with exceptions being raised. This is now fixed. - The coverage.py code itself will now not be measured by coverage.py, and no coverage modules will be mentioned in the nose --with-cover plugin. - When running source files, coverage.py now opens them in universal newline mode just like Python does. This lets it run Windows files on Mac, for example. Version 3.0, 13 June 2009 ------------------------- - Fixed the way the Python library was ignored. Too much code was being excluded the old way. - Tabs are now properly converted in HTML reports. Previously indentation was lost. - Nested modules now get a proper flat_rootname. Thanks, Christian Heimes. Version 3.0b3, 16 May 2009 -------------------------- - Added parameters to coverage.__init__ for options that had been set on the coverage object itself. - Added clear_exclude() and get_exclude_list() methods for programmatic manipulation of the exclude regexes. - Added coverage.load() to read previously-saved data from the data file. - Improved the finding of code files. For example, .pyc files that have been installed after compiling are now located correctly. Thanks, Detlev Offenbach. - When using the object api (that is, constructing a coverage() object), data is no longer saved automatically on process exit. You can re-enable it with the auto_data=True parameter on the coverage() constructor. The module-level interface still uses automatic saving. Version 3.0b2, 30 April 2009 ---------------------------- HTML reporting, and continued refactoring. - HTML reports and annotation of source files: use the new -b (browser) switch. Thanks to George Song for code, inspiration and guidance. - Code in the Python standard library is not measured by default. If you need to measure standard library code, use the -L command-line switch during execution, or the cover_pylib=True argument to the coverage() constructor. - Source annotation into a directory (-a -d) behaves differently. The annotated files are named with their hierarchy flattened so that same-named files from different directories no longer collide. Also, only files in the current tree are included. - coverage.annotate_file is no longer available. - Programs executed with -x now behave more as they should, for example, __file__ has the correct value. - .coverage data files have a new pickle-based format designed for better extensibility. - Removed the undocumented cache_file argument to coverage.usecache(). Version 3.0b1, 7 March 2009 --------------------------- Major overhaul. - Coverage is now a package rather than a module. Functionality has been split into classes. - The trace function is implemented in C for speed. Coverage runs are now much faster. Thanks to David Christian for productive micro-sprints and other encouragement. - Executable lines are identified by reading the line number tables in the compiled code, removing a great deal of complicated analysis code. - Precisely which lines are considered executable has changed in some cases. Therefore, your coverage stats may also change slightly. - The singleton coverage object is only created if the module-level functions are used. This maintains the old interface while allowing better programmatic use of Coverage. - The minimum supported Python version is 2.3. Version 2.85, 14 September 2008 ------------------------------- - Add support for finding source files in eggs. Don't check for morf's being instances of ModuleType, instead use duck typing so that pseudo-modules can participate. Thanks, Imri Goldberg. - Use os.realpath as part of the fixing of filenames so that symlinks won't confuse things. Thanks, Patrick Mezard. Version 2.80, 25 May 2008 ------------------------- - Open files in rU mode to avoid line ending craziness. Thanks, Edward Loper. Version 2.78, 30 September 2007 ------------------------------- - Don't try to predict whether a file is Python source based on the extension. Extensionless files are often Pythons scripts. Instead, simply parse the file and catch the syntax errors. Hat tip to Ben Finney. Version 2.77, 29 July 2007 -------------------------- - Better packaging. Version 2.76, 23 July 2007 -------------------------- - Now Python 2.5 is *really* fully supported: the body of the new with statement is counted as executable. Version 2.75, 22 July 2007 -------------------------- - Python 2.5 now fully supported. The method of dealing with multi-line statements is now less sensitive to the exact line that Python reports during execution. Pass statements are handled specially so that their disappearance during execution won't throw off the measurement. Version 2.7, 21 July 2007 ------------------------- - "#pragma: nocover" is excluded by default. - Properly ignore docstrings and other constant expressions that appear in the middle of a function, a problem reported by Tim Leslie. - coverage.erase() shouldn't clobber the exclude regex. Change how parallel mode is invoked, and fix erase() so that it erases the cache when called programmatically. - In reports, ignore code executed from strings, since we can't do anything useful with it anyway. - Better file handling on Linux, thanks Guillaume Chazarain. - Better shell support on Windows, thanks Noel O'Boyle. - Python 2.2 support maintained, thanks Catherine Proulx. - Minor changes to avoid lint warnings. Version 2.6, 23 August 2006 --------------------------- - Applied Joseph Tate's patch for function decorators. - Applied Sigve Tjora and Mark van der Wal's fixes for argument handling. - Applied Geoff Bache's parallel mode patch. - Refactorings to improve testability. Fixes to command-line logic for parallel mode and collect. Version 2.5, 4 December 2005 ---------------------------- - Call threading.settrace so that all threads are measured. Thanks Martin Fuzzey. - Add a file argument to report so that reports can be captured to a different destination. - coverage.py can now measure itself. - Adapted Greg Rogers' patch for using relative filenames, and sorting and omitting files to report on. Version 2.2, 31 December 2004 ----------------------------- - Allow for keyword arguments in the module global functions. Thanks, Allen. Version 2.1, 14 December 2004 ----------------------------- - Return 'analysis' to its original behavior and add 'analysis2'. Add a global for 'annotate', and factor it, adding 'annotate_file'. Version 2.0, 12 December 2004 ----------------------------- Significant code changes. - Finding executable statements has been rewritten so that docstrings and other quirks of Python execution aren't mistakenly identified as missing lines. - Lines can be excluded from consideration, even entire suites of lines. - The filesystem cache of covered lines can be disabled programmatically. - Modernized the code. Earlier History --------------- 2001-12-04 GDR Created. 2001-12-06 GDR Added command-line interface and source code annotation. 2001-12-09 GDR Moved design and interface to separate documents. 2001-12-10 GDR Open cache file as binary on Windows. Allow simultaneous -e and -x, or -a and -r. 2001-12-12 GDR Added command-line help. Cache analysis so that it only needs to be done once when you specify -a and -r. 2001-12-13 GDR Improved speed while recording. Portable between Python 1.5.2 and 2.1.1. 2002-01-03 GDR Module-level functions work correctly. 2002-01-07 GDR Update sys.path when running a file with the -x option, so that it matches the value the program would get if it were run on its own. eric4-4.5.18/eric/DebugClients/Python/coverage/PaxHeaders.8617/execfile.py0000644000175000001440000000013212261012652024270 xustar000000000000000030 mtime=1388582314.019102674 30 atime=1389081085.499724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python/coverage/execfile.py0000644000175000001440000000217612261012652024030 0ustar00detlevusers00000000000000"""Execute files of Python code.""" import imp, os, sys def run_python_file(filename, args): """Run a python file as if it were the main program on the command line. `filename` is the path to the file to execute, it need not be a .py file. `args` is the argument array to present as sys.argv, including the first element representing the file being executed. """ # Create a module to serve as __main__ old_main_mod = sys.modules['__main__'] main_mod = imp.new_module('__main__') sys.modules['__main__'] = main_mod main_mod.__file__ = filename main_mod.__builtins__ = sys.modules['__builtin__'] # Set sys.argv and the first path element properly. old_argv = sys.argv old_path0 = sys.path[0] sys.argv = args sys.path[0] = os.path.dirname(filename) try: source = open(filename, 'rU').read() exec compile(source, filename, "exec") in main_mod.__dict__ finally: # Restore the old __main__ sys.modules['__main__'] = old_main_mod # Restore the old argv and path sys.argv = old_argv sys.path[0] = old_path0 eric4-4.5.18/eric/DebugClients/Python/coverage/PaxHeaders.8617/collector.py0000644000175000001440000000013012261012652024470 xustar000000000000000028 mtime=1388582314.0211027 30 atime=1389081085.499724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python/coverage/collector.py0000644000175000001440000001515212261012652024230 0ustar00detlevusers00000000000000"""Raw data collector for Coverage.""" import sys, threading try: # Use the C extension code when we can, for speed. from tracer import Tracer except ImportError: # Couldn't import the C extension, maybe it isn't built. class Tracer: """Python implementation of the raw data tracer.""" def __init__(self): self.data = None self.should_trace = None self.should_trace_cache = None self.cur_filename = None self.filename_stack = [] self.last_exc_back = None def _global_trace(self, frame, event, arg_unused): """The trace function passed to sys.settrace.""" if event == 'call': # Entering a new function context. Decide if we should trace # in this file. filename = frame.f_code.co_filename tracename = self.should_trace_cache.get(filename) if tracename is None: tracename = self.should_trace(filename, frame) self.should_trace_cache[filename] = tracename if tracename: # We need to trace. Push the current filename on the stack # and record the new current filename. self.filename_stack.append(self.cur_filename) self.cur_filename = tracename # Use _local_trace for tracing within this function. return self._local_trace else: # No tracing in this function. return None return self._global_trace def _local_trace(self, frame, event, arg_unused): """The trace function used within a function.""" if self.last_exc_back: if frame == self.last_exc_back: # Someone forgot a return event. self.cur_filename = self.filename_stack.pop() self.last_exc_back = None if event == 'line': # Record an executed line. self.data[(self.cur_filename, frame.f_lineno)] = True elif event == 'return': # Leaving this function, pop the filename stack. self.cur_filename = self.filename_stack.pop() elif event == 'exception': self.last_exc_back = frame.f_back return self._local_trace def start(self): """Start this Tracer.""" sys.settrace(self._global_trace) def stop(self): """Stop this Tracer.""" sys.settrace(None) class Collector: """Collects trace data. Creates a Tracer object for each thread, since they track stack information. Each Tracer points to the same shared data, contributing traced data points. When the Collector is started, it creates a Tracer for the current thread, and installs a function to create Tracers for each new thread started. When the Collector is stopped, all active Tracers are stopped. Threads started while the Collector is stopped will never have Tracers associated with them. """ # The stack of active Collectors. Collectors are added here when started, # and popped when stopped. Collectors on the stack are paused when not # the top, and resumed when they become the top again. _collectors = [] def __init__(self, should_trace): """Create a collector. `should_trace` is a function, taking a filename, and returning a canonicalized filename, or False depending on whether the file should be traced or not. """ self.should_trace = should_trace self.reset() def reset(self): """Clear collected data, and prepare to collect more.""" # A dictionary with an entry for (Python source file name, line number # in that file) if that line has been executed. self.data = {} # A cache of the results from should_trace, the decision about whether # to trace execution in a file. A dict of filename to (filename or # False). self.should_trace_cache = {} # Our active Tracers. self.tracers = [] def _start_tracer(self): """Start a new Tracer object, and store it in self.tracers.""" tracer = Tracer() tracer.data = self.data tracer.should_trace = self.should_trace tracer.should_trace_cache = self.should_trace_cache tracer.start() self.tracers.append(tracer) # The trace function has to be set individually on each thread before # execution begins. Ironically, the only support the threading module has # for running code before the thread main is the tracing function. So we # install this as a trace function, and the first time it's called, it does # the real trace installation. def _installation_trace(self, frame_unused, event_unused, arg_unused): """Called on new threads, installs the real tracer.""" # Remove ourselves as the trace function sys.settrace(None) # Install the real tracer. self._start_tracer() # Return None to reiterate that we shouldn't be used for tracing. return None def start(self): """Start collecting trace information.""" if self._collectors: self._collectors[-1].pause() self._collectors.append(self) # Install the tracer on this thread. self._start_tracer() # Install our installation tracer in threading, to jump start other # threads. threading.settrace(self._installation_trace) def stop(self): """Stop collecting trace information.""" assert self._collectors assert self._collectors[-1] is self for tracer in self.tracers: tracer.stop() self.tracers = [] threading.settrace(None) # Remove this Collector from the stack, and resume the one underneath # (if any). self._collectors.pop() if self._collectors: self._collectors[-1].resume() def pause(self): """Pause tracing, but be prepared to `resume`.""" for tracer in self.tracers: tracer.stop() threading.settrace(None) def resume(self): """Resume tracing after a `pause`.""" for tracer in self.tracers: tracer.start() threading.settrace(self._installation_trace) def data_points(self): """Return the (filename, lineno) pairs collected.""" return self.data.keys()eric4-4.5.18/eric/DebugClients/Python/coverage/PaxHeaders.8617/parser.py0000644000175000001440000000013212261012652024000 xustar000000000000000030 mtime=1388582314.023102725 30 atime=1389081085.499724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python/coverage/parser.py0000644000175000001440000002037512261012652023541 0ustar00detlevusers00000000000000"""Code parsing for Coverage.""" import re, token, tokenize, types import cStringIO as StringIO from misc import nice_pair, CoverageException from backward import set # pylint: disable-msg=W0622 class CodeParser: """Parse code to find executable lines, excluded lines, etc.""" def __init__(self, show_tokens=False): self.show_tokens = show_tokens # The text lines of the parsed code. self.lines = None # The line numbers of excluded lines of code. self.excluded = set() # The line numbers of docstring lines. self.docstrings = set() # A dict mapping line numbers to (lo,hi) for multi-line statements. self.multiline = {} # The line numbers that start statements. self.statement_starts = set() def find_statement_starts(self, code): """Find the starts of statements in compiled code. Uses co_lnotab described in Python/compile.c to find line numbers that start statements, adding them to `self.statement_starts`. """ # Adapted from dis.py in the standard library. byte_increments = [ord(c) for c in code.co_lnotab[0::2]] line_increments = [ord(c) for c in code.co_lnotab[1::2]] last_line_num = None line_num = code.co_firstlineno for byte_incr, line_incr in zip(byte_increments, line_increments): if byte_incr: if line_num != last_line_num: self.statement_starts.add(line_num) last_line_num = line_num line_num += line_incr if line_num != last_line_num: self.statement_starts.add(line_num) def find_statements(self, code): """Find the statements in `code`. Update `self.statement_starts`, a set of line numbers that start statements. Recurses into all code objects reachable from `code`. """ # Adapted from trace.py in the standard library. # Get all of the lineno information from this code. self.find_statement_starts(code) # Check the constants for references to other code objects. for c in code.co_consts: if isinstance(c, types.CodeType): # Found another code object, so recurse into it. self.find_statements(c) def raw_parse(self, text=None, filename=None, exclude=None): """Parse `text` to find the interesting facts about its lines. A handful of member fields are updated. """ if not text: sourcef = open(filename, 'rU') text = sourcef.read() sourcef.close() text = text.replace('\r\n', '\n') self.lines = text.split('\n') # Find lines which match an exclusion pattern. if exclude: re_exclude = re.compile(exclude) for i, ltext in enumerate(self.lines): if re_exclude.search(ltext): self.excluded.add(i+1) # Tokenize, to find excluded suites, to find docstrings, and to find # multi-line statements. indent = 0 exclude_indent = 0 excluding = False prev_toktype = token.INDENT first_line = None tokgen = tokenize.generate_tokens(StringIO.StringIO(text).readline) for toktype, ttext, (slineno, _), (elineno, _), ltext in tokgen: if self.show_tokens: print "%10s %5s %-20r %r" % ( tokenize.tok_name.get(toktype, toktype), nice_pair((slineno, elineno)), ttext, ltext ) if toktype == token.INDENT: indent += 1 elif toktype == token.DEDENT: indent -= 1 elif toktype == token.OP and ttext == ':': if not excluding and elineno in self.excluded: # Start excluding a suite. We trigger off of the colon # token so that the #pragma comment will be recognized on # the same line as the colon. exclude_indent = indent excluding = True elif toktype == token.STRING and prev_toktype == token.INDENT: # Strings that are first on an indented line are docstrings. # (a trick from trace.py in the stdlib.) for i in xrange(slineno, elineno+1): self.docstrings.add(i) elif toktype == token.NEWLINE: if first_line is not None and elineno != first_line: # We're at the end of a line, and we've ended on a # different line than the first line of the statement, # so record a multi-line range. rng = (first_line, elineno) for l in xrange(first_line, elineno+1): self.multiline[l] = rng first_line = None if ttext.strip() and toktype != tokenize.COMMENT: # A non-whitespace token. if first_line is None: # The token is not whitespace, and is the first in a # statement. first_line = slineno # Check whether to end an excluded suite. if excluding and indent <= exclude_indent: excluding = False if excluding: self.excluded.add(elineno) prev_toktype = toktype # Find the starts of the executable statements. filename = filename or "" try: # Python 2.3 and 2.4 don't like partial last lines, so be sure the # text ends nicely for them. text += '\n' code = compile(text, filename, "exec") except SyntaxError, synerr: raise CoverageException( "Couldn't parse '%s' as Python source: '%s' at line %d" % (filename, synerr.msg, synerr.lineno) ) self.find_statements(code) def map_to_first_line(self, lines, ignore=None): """Map the line numbers in `lines` to the correct first line of the statement. Skip any line mentioned in `ignore`. Returns a sorted list of the first lines. """ ignore = ignore or [] lset = set() for l in lines: if l in ignore: continue rng = self.multiline.get(l) if rng: new_l = rng[0] else: new_l = l if new_l not in ignore: lset.add(new_l) lines = list(lset) lines.sort() return lines def parse_source(self, text=None, filename=None, exclude=None): """Parse source text to find executable lines, excluded lines, etc. Source can be provided as `text`, the text itself, or `filename`, from which text will be read. Excluded lines are those that match `exclude`, a regex. Return values are 1) a sorted list of executable line numbers, 2) a sorted list of excluded line numbers, and 3) a dict mapping line numbers to pairs (lo,hi) for multi-line statements. """ self.raw_parse(text, filename, exclude) excluded_lines = self.map_to_first_line(self.excluded) ignore = excluded_lines + list(self.docstrings) lines = self.map_to_first_line(self.statement_starts, ignore) return lines, excluded_lines, self.multiline def print_parse_results(self): """Print the results of the parsing.""" for i, ltext in enumerate(self.lines): lineno = i+1 m0 = m1 = m2 = ' ' if lineno in self.statement_starts: m0 = '-' if lineno in self.docstrings: m1 = '"' if lineno in self.excluded: m2 = 'x' print "%4d %s%s%s %s" % (lineno, m0, m1, m2, ltext) if __name__ == '__main__': import sys parser = CodeParser(show_tokens=True) parser.raw_parse(filename=sys.argv[1], exclude=r"no\s*cover") parser.print_parse_results()eric4-4.5.18/eric/DebugClients/Python/PaxHeaders.8617/__init__.py0000644000175000001440000000013112261012652022447 xustar000000000000000029 mtime=1388582314.02510275 30 atime=1389081085.499724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python/__init__.py0000644000175000001440000000030712261012652022202 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2005 - 2014 Detlev Offenbach # """ Package implementing the Python debugger It consists of different kinds of debug clients. """ eric4-4.5.18/eric/DebugClients/Python/PaxHeaders.8617/DebugProtocol.py0000644000175000001440000000013212261012652023461 xustar000000000000000030 mtime=1388582314.027102775 30 atime=1389081085.499724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python/DebugProtocol.py0000644000175000001440000000524512261012652023221 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2002 - 2014 Detlev Offenbach # """ Module defining the debug protocol tokens. """ # The address used for debugger/client communications. DebugAddress = '127.0.0.1' # The protocol "words". RequestOK = '>OK?<' RequestEnv = '>Environment<' RequestCapabilities = '>Capabilities<' RequestLoad = '>Load<' RequestRun = '>Run<' RequestCoverage = '>Coverage<' RequestProfile = '>Profile<' RequestContinue = '>Continue<' RequestStep = '>Step<' RequestStepOver = '>StepOver<' RequestStepOut = '>StepOut<' RequestStepQuit = '>StepQuit<' RequestBreak = '>Break<' RequestBreakEnable = '>EnableBreak<' RequestBreakIgnore = '>IgnoreBreak<' RequestWatch = '>Watch<' RequestWatchEnable = '>EnableWatch<' RequestWatchIgnore = '>IgnoreWatch<' RequestVariables = '>Variables<' RequestVariable = '>Variable<' RequestSetFilter = '>SetFilter<' RequestThreadList = '>ThreadList<' RequestThreadSet = '>ThreadSet<' RequestEval = '>Eval<' RequestExec = '>Exec<' RequestShutdown = '>Shutdown<' RequestBanner = '>Banner<' RequestCompletion = '>Completion<' RequestUTPrepare = '>UTPrepare<' RequestUTRun = '>UTRun<' RequestUTStop = '>UTStop<' RequestForkTo = '>ForkTo<' RequestForkMode = '>ForkMode<' ResponseOK = '>OK<' ResponseCapabilities = RequestCapabilities ResponseContinue = '>Continue<' ResponseException = '>Exception<' ResponseSyntax = '>SyntaxError<' ResponseExit = '>Exit<' ResponseLine = '>Line<' ResponseRaw = '>Raw<' ResponseClearBreak = '>ClearBreak<' ResponseBPConditionError = '>BPConditionError<' ResponseClearWatch = '>ClearWatch<' ResponseWPConditionError = '>WPConditionError<' ResponseVariables = RequestVariables ResponseVariable = RequestVariable ResponseThreadList = RequestThreadList ResponseThreadSet = RequestThreadSet ResponseStack = '>CurrentStack<' ResponseBanner = RequestBanner ResponseCompletion = RequestCompletion ResponseUTPrepared = '>UTPrepared<' ResponseUTStartTest = '>UTStartTest<' ResponseUTStopTest = '>UTStopTest<' ResponseUTTestFailed = '>UTTestFailed<' ResponseUTTestErrored = '>UTTestErrored<' ResponseUTFinished = '>UTFinished<' ResponseForkTo = RequestForkTo PassiveStartup = '>PassiveStartup<' EOT = '>EOT<\n' eric4-4.5.18/eric/DebugClients/Python/PaxHeaders.8617/FlexCompleter.py0000644000175000001440000000013212261012652023462 xustar000000000000000030 mtime=1388582314.030102813 30 atime=1389081085.499724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python/FlexCompleter.py0000644000175000001440000002102712261012652023216 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- """ Word completion for the eric4 shell

    NOTE for eric4 variant

    This version is a re-implementation of FlexCompleter as found in the PyQwt package. It is modified to work with the eric4 debug clients.

    NOTE for the PyQwt variant

    This version is a re-implementation of FlexCompleter with readline support for PyQt&sip-3.6 and earlier. Full readline support is present in PyQt&sip-snapshot-20030531 and later.

    NOTE for FlexCompleter

    This version is a re-implementation of rlcompleter with selectable namespace. The problem with rlcompleter is that it's hardwired to work with __main__.__dict__, and in some cases one may have 'sandboxed' namespaces. So this class is a ripoff of rlcompleter, with the namespace to work in as an optional parameter. This class can be used just like rlcompleter, but the Completer class now has a constructor with the optional 'namespace' parameter. A patch has been submitted to Python@sourceforge for these changes to go in the standard Python distribution.

    Original rlcompleter documentation

    This requires the latest extension to the readline module (the completes keywords, built-ins and globals in __main__; when completing NAME.NAME..., it evaluates (!) the expression up to the last dot and completes its attributes. It's very cool to do "import string" type "string.", hit the completion key (twice), and see the list of names defined by the string module! Tip: to use the tab key as the completion key, call 'readline.parse_and_bind("tab: complete")' Notes:
    • Exceptions raised by the completer function are *ignored* (and generally cause the completion to fail). This is a feature -- since readline sets the tty device in raw (or cbreak) mode, printing a traceback wouldn't work well without some complicated hoopla to save, reset and restore the tty state.
    • The evaluation of the NAME.NAME... form may cause arbitrary application defined code to be executed if an object with a __getattr__ hook is found. Since it is the responsibility of the application (or the user) to enable this feature, I consider this an acceptable risk. More complicated expressions (e.g. function calls or indexing operations) are *not* evaluated.
    • GNU readline is also used by the built-in functions input() and raw_input(), and thus these also benefit/suffer from the completer features. Clearly an interactive application can benefit by specifying its own completer function and using raw_input() for all its input.
    • When the original stdin is not a tty device, GNU readline is never used, and this module (and the readline module) are silently inactive.
    """ #***************************************************************************** # # Since this file is essentially a minimally modified copy of the rlcompleter # module which is part of the standard Python distribution, I assume that the # proper procedure is to maintain its copyright as belonging to the Python # Software Foundation: # # Copyright (C) 2001 Python Software Foundation, www.python.org # # Distributed under the terms of the Python Software Foundation license. # # Full text available at: # # http://www.python.org/2.1/license.html # #***************************************************************************** import __builtin__ import __main__ __all__ = ["Completer"] class Completer(object): """ Class implementing the command line completer object. """ def __init__(self, namespace = None): """ Create a new completer for the command line. Completer([namespace]) -> completer instance. If unspecified, the default namespace where completions are performed is __main__ (technically, __main__.__dict__). Namespaces should be given as dictionaries. Completer instances should be used as the completion mechanism of readline via the set_completer() call: readline.set_completer(Completer(my_namespace).complete) @param namespace The namespace for the completer. """ if namespace and type(namespace) != type({}): raise TypeError,'namespace must be a dictionary' # Don't bind to namespace quite yet, but flag whether the user wants a # specific namespace or to use __main__.__dict__. This will allow us # to bind to __main__.__dict__ at completion time, not now. if namespace is None: self.use_main_ns = 1 else: self.use_main_ns = 0 self.namespace = namespace def complete(self, text, state): """ Return the next possible completion for 'text'. This is called successively with state == 0, 1, 2, ... until it returns None. The completion should begin with 'text'. @param text The text to be completed. (string) @param state The state of the completion. (integer) @return The possible completions as a list of strings. """ if self.use_main_ns: self.namespace = __main__.__dict__ if state == 0: if "." in text: self.matches = self.attr_matches(text) else: self.matches = self.global_matches(text) try: return self.matches[state] except IndexError: return None def global_matches(self, text): """ Compute matches when text is a simple name. @param text The text to be completed. (string) @return A list of all keywords, built-in functions and names currently defined in self.namespace that match. """ import keyword matches = [] n = len(text) for list in [keyword.kwlist, __builtin__.__dict__.keys(), self.namespace.keys()]: for word in list: if word[:n] == text and word != "__builtins__" and not word in matches: matches.append(word) return matches def attr_matches(self, text): """ Compute matches when text contains a dot. Assuming the text is of the form NAME.NAME....[NAME], and is evaluatable in self.namespace, it will be evaluated and its attributes (as revealed by dir()) are used as possible completions. (For class instances, class members are are also considered.) WARNING: this can still invoke arbitrary C code, if an object with a __getattr__ hook is evaluated. @param text The text to be completed. (string) @return A list of all matches. """ import re # Testing. This is the original code: #m = re.match(r"(\w+(\.\w+)*)\.(\w*)", text) # Modified to catch [] in expressions: #m = re.match(r"([\w\[\]]+(\.[\w\[\]]+)*)\.(\w*)", text) # Another option, seems to work great. Catches things like ''. m = re.match(r"(\S+(\.\w+)*)\.(\w*)", text) if not m: return expr, attr = m.group(1, 3) object = eval(expr, self.namespace) words = dir(object) if hasattr(object,'__class__'): words.append('__class__') words = words + get_class_members(object.__class__) matches = [] n = len(attr) for word in words: try: if word[:n] == attr and word != "__builtins__": match = "%s.%s" % (expr, word) if not match in matches: matches.append(match) except: # some badly behaved objects pollute dir() with non-strings, # which cause the completion to fail. This way we skip the # bad entries and can still continue processing the others. pass return matches def get_class_members(klass): """ Module function to retrieve the class members. @param klass The class object to be analysed. @return A list of all names defined in the class. """ # PyQwt's hack for PyQt&sip-3.6 and earlier if hasattr(klass, 'getLazyNames'): return klass.getLazyNames() # vanilla Python stuff ret = dir(klass) if hasattr(klass,'__bases__'): for base in klass.__bases__: ret = ret + get_class_members(base) return ret eric4-4.5.18/eric/DebugClients/Python/PaxHeaders.8617/PyProfile.py0000644000175000001440000000013212261012652022622 xustar000000000000000030 mtime=1388582314.032102839 30 atime=1389081085.499724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python/PyProfile.py0000644000175000001440000001321412261012652022355 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2002 - 2014 Detlev Offenbach """ Module defining additions to the standard Python profile.py. """ import os import marshal import types import profile import atexit import pickle class PyProfile(profile.Profile): """ Class extending the standard Python profiler with additional methods. This class extends the standard Python profiler by the functionality to save the collected timing data in a timing cache, to restore these data on subsequent calls, to store a profile dump to a standard filename and to erase these caches. """ def __init__(self, basename, timer=None, bias=None): """ Constructor @param basename name of the script to be profiled (string) @param timer function defining the timing calculation @param bias calibration value (float) """ try: profile.Profile.__init__(self, timer, bias) except TypeError: profile.Profile.__init__(self, timer) self.dispatch = self.__class__.dispatch basename = os.path.splitext(basename)[0] self.profileCache = "%s.profile" % basename self.timingCache = "%s.timings" % basename self.__restore() atexit.register(self.save) def __restore(self): """ Private method to restore the timing data from the timing cache. """ if not os.path.exists(self.timingCache): return try: cache = open(self.timingCache, 'rb') timings = marshal.load(cache) cache.close() if isinstance(timings, type.DictType): self.timings = timings except: pass def save(self): """ Public method to store the collected profile data. """ # dump the raw timing data cache = open(self.timingCache, 'wb') marshal.dump(self.timings, cache) cache.close() # dump the profile data self.dump_stats(self.profileCache) def dump_stats(self, file): """ Public method to dump the statistics data. @param file name of the file to write to (string) """ try: f = open(file, 'wb') self.create_stats() pickle.dump(self.stats, f, 2) except (EnvironmentError, pickle.PickleError): pass finally: f.close() def erase(self): """ Public method to erase the collected timing data. """ self.timings = {} if os.path.exists(self.timingCache): os.remove(self.timingCache) def fix_frame_filename(self, frame): """ Public method used to fixup the filename for a given frame. The logic employed here is that if a module was loaded from a .pyc file, then the correct .py to operate with should be in the same path as the .pyc. The reason this logic is needed is that when a .pyc file is generated, the filename embedded and thus what is readable in the code object of the frame object is the fully qualified filepath when the pyc is generated. If files are moved from machine to machine this can break debugging as the .pyc will refer to the .py on the original machine. Another case might be sharing code over a network... This logic deals with that. @param frame the frame object """ # get module name from __file__ if not isinstance(frame, profile.Profile.fake_frame) and \ frame.f_globals.has_key('__file__'): root, ext = os.path.splitext(frame.f_globals['__file__']) if ext == '.pyc' or ext == '.py': fixedName = root + '.py' if os.path.exists(fixedName): return fixedName return frame.f_code.co_filename def trace_dispatch_call(self, frame, t): """ Private method used to trace functions calls. This is a variant of the one found in the standard Python profile.py calling fix_frame_filename above. """ if self.cur and frame.f_back is not self.cur[-2]: rpt, rit, ret, rfn, rframe, rcur = self.cur if not isinstance(rframe, profile.Profile.fake_frame): assert rframe.f_back is frame.f_back, ("Bad call", rfn, rframe, rframe.f_back, frame, frame.f_back) self.trace_dispatch_return(rframe, 0) assert (self.cur is None or \ frame.f_back is self.cur[-2]), ("Bad call", self.cur[-3]) fcode = frame.f_code fn = (self.fix_frame_filename(frame), fcode.co_firstlineno, fcode.co_name) self.cur = (t, 0, 0, fn, frame, self.cur) timings = self.timings if timings.has_key(fn): cc, ns, tt, ct, callers = timings[fn] timings[fn] = cc, ns + 1, tt, ct, callers else: timings[fn] = 0, 0, 0, 0, {} return 1 dispatch = { "call": trace_dispatch_call, "exception": profile.Profile.trace_dispatch_exception, "return": profile.Profile.trace_dispatch_return, "c_call": profile.Profile.trace_dispatch_c_call, "c_exception": profile.Profile.trace_dispatch_return, # the C function returned "c_return": profile.Profile.trace_dispatch_return, } eric4-4.5.18/eric/DebugClients/Python/PaxHeaders.8617/AsyncFile.py0000644000175000001440000000013112261012652022565 xustar000000000000000029 mtime=1388582314.04410299 30 atime=1389081085.499724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python/AsyncFile.py0000644000175000001440000001762612261012652022334 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2002 - 2014 Detlev Offenbach # """ Module implementing an asynchronous file like socket interface for the debugger. """ import socket import sys from DebugProtocol import EOT, RequestOK def AsyncPendingWrite(file): """ Module function to check for data to be written. @param file The file object to be checked (file) @return Flag indicating if there is data wating (int) """ try: pending = file.pendingWrite() except: pending = 0 return pending class AsyncFile(object): """ Class wrapping a socket object with a file interface. """ maxtries = 10 maxbuffersize = 1024 * 1024 * 4 def __init__(self,sock,mode,name): """ Constructor @param sock the socket object being wrapped @param mode mode of this file (string) @param name name of this file (string) """ # Initialise the attributes. self.closed = 0 self.sock = sock self.mode = mode self.name = name self.nWriteErrors = 0 self.encoding = "utf-8" self.wpending = u'' def __checkMode(self,mode): """ Private method to check the mode. This method checks, if an operation is permitted according to the mode of the file. If it is not, an IOError is raised. @param mode the mode to be checked (string) """ if mode != self.mode: raise IOError, '[Errno 9] Bad file descriptor' def __nWrite(self,n): """ Private method to write a specific number of pending bytes. @param n the number of bytes to be written (int) """ if n: try : buf = "%s%s" % (self.wpending[:n], EOT) try: buf = buf.encode('utf-8') except (UnicodeEncodeError, UnicodeDecodeError): pass self.sock.sendall(buf) self.wpending = self.wpending[n:] self.nWriteErrors = 0 except socket.error: self.nWriteErrors += 1 if self.nWriteErrors > self.maxtries: self.wpending = u'' # delete all output def pendingWrite(self): """ Public method that returns the number of bytes waiting to be written. @return the number of bytes to be written (int) """ return self.wpending.rfind('\n') + 1 def close(self, closeit=0): """ Public method to close the file. @param closeit flag to indicate a close ordered by the debugger code (boolean) """ if closeit and not self.closed: self.flush() self.sock.close() self.closed = 1 def flush(self): """ Public method to write all pending bytes. """ self.__nWrite(len(self.wpending)) def isatty(self): """ Public method to indicate whether a tty interface is supported. @return always false """ return 0 def fileno(self): """ Public method returning the file number. @return file number (int) """ try: return self.sock.fileno() except socket.error: return -1 def read_p(self,size=-1): """ Public method to read bytes from this file. @param size maximum number of bytes to be read (int) @return the bytes read (any) """ self.__checkMode('r') if size < 0: size = 20000 return self.sock.recv(size).decode('utf8') def read(self,size=-1): """ Public method to read bytes from this file. @param size maximum number of bytes to be read (int) @return the bytes read (any) """ self.__checkMode('r') buf = raw_input() if size >= 0: buf = buf[:size] return buf def readline_p(self,size=-1): """ Public method to read a line from this file. Note: This method will not block and may return only a part of a line if that is all that is available. @param size maximum number of bytes to be read (int) @return one line of text up to size bytes (string) """ self.__checkMode('r') if size < 0: size = 20000 # The integration of the debugger client event loop and the connection # to the debugger relies on the two lines of the debugger command being # delivered as two separate events. Therefore we make sure we only # read a line at a time. line = self.sock.recv(size, socket.MSG_PEEK) eol = line.find('\n') if eol >= 0: size = eol + 1 else: size = len(line) # Now we know how big the line is, read it for real. return self.sock.recv(size).decode('utf8') def readlines(self,sizehint=-1): """ Public method to read all lines from this file. @param sizehint hint of the numbers of bytes to be read (int) @return list of lines read (list of strings) """ self.__checkMode('r') lines = [] room = sizehint line = self.readline_p(room) linelen = len(line) while linelen > 0: lines.append(line) if sizehint >= 0: room = room - linelen if room <= 0: break line = self.readline_p(room) linelen = len(line) return lines def readline(self, sizehint=-1): """ Public method to read one line from this file. @param sizehint hint of the numbers of bytes to be read (int) @return one line read (string) """ self.__checkMode('r') line = raw_input() + '\n' if sizehint >= 0: line = line[:sizehint] return line def seek(self,offset,whence=0): """ Public method to move the filepointer. @exception IOError This method is not supported and always raises an IOError. """ raise IOError, '[Errno 29] Illegal seek' def tell(self): """ Public method to get the filepointer position. @exception IOError This method is not supported and always raises an IOError. """ raise IOError, '[Errno 29] Illegal seek' def truncate(self,size=-1): """ Public method to truncate the file. @exception IOError This method is not supported and always raises an IOError. """ raise IOError, '[Errno 29] Illegal seek' def write(self,s): """ Public method to write a string to the file. @param s bytes to be written (string) """ self.__checkMode('w') tries = 0 if not self.wpending: self.wpending = s elif type(self.wpending) != type(s) or \ len(self.wpending) + len(s) > self.maxbuffersize: # flush wpending so that different string types are not concatenated while self.wpending: # if we have a persistent error in sending the data, an exception # will be raised in __nWrite self.flush() tries += 1 if tries > self.maxtries: raise socket.error("Too many attempts to send data") self.wpending = s else: self.wpending += s self.__nWrite(self.pendingWrite()) def writelines(self,list): """ Public method to write a list of strings to the file. @param list the list to be written (list of string) """ map(self.write,list) eric4-4.5.18/eric/DebugClients/Python/PaxHeaders.8617/DebugConfig.py0000644000175000001440000000013212261012652023065 xustar000000000000000030 mtime=1388582314.046103015 30 atime=1389081085.500724352 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python/DebugConfig.py0000644000175000001440000000112312261012652022614 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2005 - 2014 Detlev Offenbach # """ Module defining type strings for the different Python types. """ ConfigVarTypeStrings = ['__', 'NoneType', 'type',\ 'bool', 'int', 'long', 'float', 'complex',\ 'str', 'unicode', 'tuple', 'list',\ 'dict', 'dict-proxy', 'set', 'file', 'xrange',\ 'slice', 'buffer', 'class', 'instance',\ 'instance method', 'property', 'generator',\ 'function', 'builtin_function_or_method', 'code', 'module',\ 'ellipsis', 'traceback', 'frame', 'other'] eric4-4.5.18/eric/DebugClients/Python/PaxHeaders.8617/DebugClientBase.py0000644000175000001440000000013212261012652023671 xustar000000000000000030 mtime=1388582314.050103066 30 atime=1389081085.500724352 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python/DebugClientBase.py0000644000175000001440000023477212261012652023442 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2002 - 2014 Detlev Offenbach # """ Module implementing a debug client base class. """ import sys import socket import select import codeop import traceback import os import time import imp import re import distutils.sysconfig import atexit from DebugProtocol import * import DebugClientCapabilities from DebugBase import setRecursionLimit, printerr from AsyncFile import * from DebugConfig import ConfigVarTypeStrings from FlexCompleter import Completer DebugClientInstance = None ################################################################################ def DebugClientRawInput(prompt="", echo=1): """ Replacement for the standard raw_input builtin. This function works with the split debugger. @param prompt The prompt to be shown. (string) @param echo Flag indicating echoing of the input (boolean) """ if DebugClientInstance is None or DebugClientInstance.redirect == 0: return DebugClientOrigRawInput(prompt) return DebugClientInstance.raw_input(prompt, echo) # Use our own raw_input(). try: DebugClientOrigRawInput = __builtins__.__dict__['raw_input'] __builtins__.__dict__['raw_input'] = DebugClientRawInput except (AttributeError, KeyError): import __main__ DebugClientOrigRawInput = __main__.__builtins__.__dict__['raw_input'] __main__.__builtins__.__dict__['raw_input'] = DebugClientRawInput ################################################################################ def DebugClientInput(prompt=""): """ Replacement for the standard input builtin. This function works with the split debugger. @param prompt The prompt to be shown. (string) """ if DebugClientInstance is None or DebugClientInstance.redirect == 0: return DebugClientOrigInput(prompt) return DebugClientInstance.input(prompt) # Use our own input(). try: DebugClientOrigInput = __builtins__.__dict__['input'] __builtins__.__dict__['input'] = DebugClientInput except (AttributeError, KeyError): import __main__ DebugClientOrigInput = __main__.__builtins__.__dict__['input'] __main__.__builtins__.__dict__['input'] = DebugClientInput ################################################################################ def DebugClientFork(): """ Replacement for the standard os.fork(). """ if DebugClientInstance is None: return DebugClientOrigFork() return DebugClientInstance.fork() # use our own fork(). if 'fork' in dir(os): DebugClientOrigFork = os.fork os.fork = DebugClientFork ################################################################################ def DebugClientClose(fd): """ Replacement for the standard os.close(fd). @param fd open file descriptor to be closed (integer) """ if DebugClientInstance is None: DebugClientOrigClose(fd) DebugClientInstance.close(fd) # use our own close(). if 'close' in dir(os): DebugClientOrigClose = os.close os.close = DebugClientClose ################################################################################ def DebugClientSetRecursionLimit(limit): """ Replacement for the standard sys.setrecursionlimit(limit). @param limit recursion limit (integer) """ rl = max(limit, 64) setRecursionLimit(rl) DebugClientOrigSetRecursionLimit(rl + 64) # use our own setrecursionlimit(). if 'setrecursionlimit' in dir(sys): DebugClientOrigSetRecursionLimit = sys.setrecursionlimit sys.setrecursionlimit = DebugClientSetRecursionLimit DebugClientSetRecursionLimit(sys.getrecursionlimit()) ################################################################################ class DebugClientBase(object): """ Class implementing the client side of the debugger. It provides access to the Python interpeter from a debugger running in another process whether or not the Qt event loop is running. The protocol between the debugger and the client assumes that there will be a single source of debugger commands and a single source of Python statements. Commands and statement are always exactly one line and may be interspersed. The protocol is as follows. First the client opens a connection to the debugger and then sends a series of one line commands. A command is either >Load<, >Step<, >StepInto<, ... or a Python statement. See DebugProtocol.py for a listing of valid protocol tokens. A Python statement consists of the statement to execute, followed (in a separate line) by >OK?<. If the statement was incomplete then the response is >Continue<. If there was an exception then the response is >Exception<. Otherwise the response is >OK<. The reason for the >OK?< part is to provide a sentinal (ie. the responding >OK<) after any possible output as a result of executing the command. The client may send any other lines at any other time which should be interpreted as program output. If the debugger closes the session there is no response from the client. The client may close the session at any time as a result of the script being debugged closing or crashing. Note: This class is meant to be subclassed by individual DebugClient classes. Do not instantiate it directly. """ clientCapabilities = DebugClientCapabilities.HasAll def __init__(self): """ Constructor """ self.breakpoints = {} self.redirect = 1 # The next couple of members are needed for the threaded version. # For this base class they contain static values for the non threaded # debugger # dictionary of all threads running self.threads = {} # the "current" thread, basically the thread we are at a breakpoint for. self.currentThread = self # special objects representing the main scripts thread and frame self.mainThread = self self.mainFrame = None self.framenr = 0 # The context to run the debugged program in. self.debugMod = imp.new_module('__main__') # The list of complete lines to execute. self.buffer = '' # The list of regexp objects to filter variables against self.globalsFilterObjects = [] self.localsFilterObjects = [] self.pendingResponse = ResponseOK self._fncache = {} self.dircache = [] self.inRawMode = 0 self.mainProcStr = None # used for the passive mode self.passive = 0 # used to indicate the passive mode self.running = None self.test = None self.tracePython = 0 self.debugging = 0 self.fork_auto = False self.fork_child = False self.readstream = None self.writestream = None self.errorstream = None self.pollingDisabled = False self.skipdirs = sys.path[:] self.variant = 'You should not see this' # commandline completion stuff self.complete = Completer(self.debugMod.__dict__).complete if sys.hexversion < 0x2020000: self.compile_command = codeop.compile_command else: self.compile_command = codeop.CommandCompiler() self.coding_re = re.compile(r"coding[:=]\s*([-\w_.]+)") self.defaultCoding = 'utf-8' self.__coding = self.defaultCoding self.noencoding = False def getCoding(self): """ Public method to return the current coding. @return codec name (string) """ return self.__coding def __setCoding(self, filename): """ Private method to set the coding used by a python file. @param filename name of the file to inspect (string) """ if self.noencoding: self.__coding = sys.getdefaultencoding() else: default = 'latin-1' try: f = open(filename, 'rb') # read the first and second line text = f.readline() text = "%s%s" % (text, f.readline()) f.close() except IOError: self.__coding = default return for l in text.splitlines(): m = self.coding_re.search(l) if m: self.__coding = m.group(1) return self.__coding = default def attachThread(self, target = None, args = None, kwargs = None, mainThread = 0): """ Public method to setup a thread for DebugClient to debug. If mainThread is non-zero, then we are attaching to the already started mainthread of the app and the rest of the args are ignored. This is just an empty function and is overridden in the threaded debugger. @param target the start function of the target thread (i.e. the user code) @param args arguments to pass to target @param kwargs keyword arguments to pass to target @param mainThread non-zero, if we are attaching to the already started mainthread of the app @return The identifier of the created thread """ if self.debugging: sys.setprofile(self.profile) def __dumpThreadList(self): """ Public method to send the list of threads. """ threadList = [] if self.threads and self.currentThread: # indication for the threaded debugger currentId = self.currentThread.get_ident() for t in self.threads.values(): d = {} d["id"] = t.get_ident() d["name"] = t.get_name() d["broken"] = t.isBroken() threadList.append(d) else: currentId = -1 d = {} d["id"] = -1 d["name"] = "MainThread" d["broken"] = self.isBroken() threadList.append(d) self.write('%s%s\n' % (ResponseThreadList, unicode((currentId, threadList)))) def raw_input(self,prompt,echo): """ Public method to implement raw_input() using the event loop. @param prompt the prompt to be shown (string) @param echo Flag indicating echoing of the input (boolean) @return the entered string """ self.write("%s%s\n" % (ResponseRaw, unicode((prompt, echo)))) self.inRawMode = 1 self.eventLoop(True) return self.rawLine def input(self,prompt): """ Public method to implement input() using the event loop. @param prompt the prompt to be shown (string) @return the entered string evaluated as a Python expresion """ return eval(self.raw_input(prompt, 1)) def __exceptionRaised(self): """ Private method called in the case of an exception It ensures that the debug server is informed of the raised exception. """ self.pendingResponse = ResponseException def sessionClose(self, exit = 1): """ Public method to close the session with the debugger and optionally terminate. @param exit flag indicating to terminate (boolean) """ try: self.set_quit() except: pass # clean up asyncio. self.disconnect() self.debugging = 0 # make sure we close down our end of the socket # might be overkill as normally stdin, stdout and stderr # SHOULD be closed on exit, but it does not hurt to do it here self.readstream.close(1) self.writestream.close(1) self.errorstream.close(1) if exit: # Ok, go away. sys.exit() def handleLine(self,line): """ Public method to handle the receipt of a complete line. It first looks for a valid protocol token at the start of the line. Thereafter it trys to execute the lines accumulated so far. @param line the received line """ # Remove any newline. if line[-1] == '\n': line = line[:-1] ## printerr(line) ##debug eoc = line.find('<') if eoc >= 0 and line[0] == '>': # Get the command part and any argument. cmd = line[:eoc + 1] arg = line[eoc + 1:] if cmd == RequestVariables: frmnr, scope, filter = eval(arg) self.__dumpVariables(int(frmnr), int(scope), filter) return if cmd == RequestVariable: var, frmnr, scope, filter = eval(arg) self.__dumpVariable(var, int(frmnr), int(scope), filter) return if cmd == RequestThreadList: self.__dumpThreadList() return if cmd == RequestThreadSet: tid = eval(arg) if tid in self.threads: self.setCurrentThread(tid) self.write(ResponseThreadSet + '\n') stack = self.currentThread.getStack() self.write('%s%s\n' % (ResponseStack, unicode(stack))) return if cmd == RequestStep: self.currentThread.step(1) self.eventExit = 1 return if cmd == RequestStepOver: self.currentThread.step(0) self.eventExit = 1 return if cmd == RequestStepOut: self.currentThread.stepOut() self.eventExit = 1 return if cmd == RequestStepQuit: if self.passive: self.progTerminated(42) else: self.set_quit() self.eventExit = 1 return if cmd == RequestContinue: special = int(arg) self.currentThread.go(special) self.eventExit = 1 return if cmd == RequestOK: self.write(self.pendingResponse + '\n') self.pendingResponse = ResponseOK return if cmd == RequestEnv: env = eval(arg) for key, value in env.items(): if key.endswith("+"): if os.environ.has_key(key[:-1]): os.environ[key[:-1]] += value else: os.environ[key[:-1]] = value else: os.environ[key] = value return if cmd == RequestLoad: self._fncache = {} self.dircache = [] sys.argv = [] wd, fn, args, tracePython = arg.split('|') self.__setCoding(fn) try: sys.setappdefaultencoding(self.__coding) except AttributeError: pass sys.argv.append(fn) sys.argv.extend(eval(args)) sys.path = self.__getSysPath(os.path.dirname(sys.argv[0])) if wd == '': os.chdir(sys.path[1]) else: os.chdir(wd) tracePython = int(tracePython) self.running = sys.argv[0] self.mainFrame = None self.inRawMode = 0 self.debugging = 1 self.threads.clear() self.attachThread(mainThread = 1) # set the system exception handling function to ensure, that # we report on all unhandled exceptions sys.excepthook = self.__unhandled_exception # clear all old breakpoints, they'll get set after we have started self.mainThread.clear_all_breaks() self.mainThread.tracePython = tracePython # This will eventually enter a local event loop. # Note the use of backquotes to cause a repr of self.running. The # need for this is on Windows os where backslash is the path separator. # They will get inadvertantly stripped away during the eval causing # IOErrors, if self.running is passed as a normal str. self.debugMod.__dict__['__file__'] = self.running sys.modules['__main__'] = self.debugMod res = self.mainThread.run('execfile(' + `self.running` + ')', self.debugMod.__dict__) self.progTerminated(res) return if cmd == RequestRun: sys.argv = [] wd, fn, args = arg.split('|') self.__setCoding(fn) try: sys.setappdefaultencoding(self.__coding) except AttributeError: pass sys.argv.append(fn) sys.argv.extend(eval(args)) sys.path = self.__getSysPath(os.path.dirname(sys.argv[0])) if wd == '': os.chdir(sys.path[1]) else: os.chdir(wd) self.running = sys.argv[0] self.mainFrame = None self.botframe = None self.inRawMode = 0 self.threads.clear() self.attachThread(mainThread = 1) # set the system exception handling function to ensure, that # we report on all unhandled exceptions sys.excepthook = self.__unhandled_exception self.mainThread.tracePython = 0 self.debugMod.__dict__['__file__'] = sys.argv[0] sys.modules['__main__'] = self.debugMod res = 0 try: execfile(sys.argv[0], self.debugMod.__dict__) except SystemExit as exc: res = exc.code atexit._run_exitfuncs() self.writestream.flush() self.progTerminated(res) return if cmd == RequestCoverage: from coverage import coverage sys.argv = [] wd, fn, args, erase = arg.split('@@') self.__setCoding(fn) try: sys.setappdefaultencoding(self.__coding) except AttributeError: pass sys.argv.append(fn) sys.argv.extend(eval(args)) sys.path = self.__getSysPath(os.path.dirname(sys.argv[0])) if wd == '': os.chdir(sys.path[1]) else: os.chdir(wd) # set the system exception handling function to ensure, that # we report on all unhandled exceptions sys.excepthook = self.__unhandled_exception # generate a coverage object self.cover = coverage(auto_data = True, data_file = "%s.coverage" % os.path.splitext(sys.argv[0])[0]) self.cover.use_cache(True) if int(erase): self.cover.erase() sys.modules['__main__'] = self.debugMod self.debugMod.__dict__['__file__'] = sys.argv[0] self.running = sys.argv[0] res = 0 self.cover.start() try: execfile(sys.argv[0], self.debugMod.__dict__) except SystemExit as exc: res = exc.code atexit._run_exitfuncs() self.cover.stop() self.cover.save() self.writestream.flush() self.progTerminated(res) return if cmd == RequestProfile: sys.setprofile(None) import PyProfile sys.argv = [] wd, fn, args, erase = arg.split('|') self.__setCoding(fn) try: sys.setappdefaultencoding(self.__coding) except AttributeError: pass sys.argv.append(fn) sys.argv.extend(eval(args)) sys.path = self.__getSysPath(os.path.dirname(sys.argv[0])) if wd == '': os.chdir(sys.path[1]) else: os.chdir(wd) # set the system exception handling function to ensure, that # we report on all unhandled exceptions sys.excepthook = self.__unhandled_exception # generate a profile object self.prof = PyProfile.PyProfile(sys.argv[0]) if int(erase): self.prof.erase() self.debugMod.__dict__['__file__'] = sys.argv[0] sys.modules['__main__'] = self.debugMod self.running = sys.argv[0] res = 0 try: self.prof.run('execfile(%r)' % sys.argv[0]) except SystemExit as exc: res = exc.code atexit._run_exitfuncs() self.prof.save() self.writestream.flush() self.progTerminated(res) return if cmd == RequestShutdown: self.sessionClose() return if cmd == RequestBreak: fn, line, temporary, set, cond = arg.split('@@') line = int(line) set = int(set) temporary = int(temporary) if set: if cond == 'None' or cond == '': cond = None else: try: compile(cond, '', 'eval') except SyntaxError: self.write('%s%s,%d\n' % \ (ResponseBPConditionError, fn, line)) return self.mainThread.set_break(fn, line, temporary, cond) else: self.mainThread.clear_break(fn, line) return if cmd == RequestBreakEnable: fn, line, enable = arg.split(',') line = int(line) enable = int(enable) bp = self.mainThread.get_break(fn, line) if bp is not None: if enable: bp.enable() else: bp.disable() return if cmd == RequestBreakIgnore: fn, line, count = arg.split(',') line = int(line) count = int(count) bp = self.mainThread.get_break(fn, line) if bp is not None: bp.ignore = count return if cmd == RequestWatch: cond, temporary, set = arg.split('@@') set = int(set) temporary = int(temporary) if set: if not cond.endswith('??created??') and \ not cond.endswith('??changed??'): try: compile(cond, '', 'eval') except SyntaxError: self.write('%s%s\n' % (ResponseWPConditionError, cond)) return self.mainThread.set_watch(cond, temporary) else: self.mainThread.clear_watch(cond) return if cmd == RequestWatchEnable: cond, enable = arg.split(',') enable = int(enable) bp = self.mainThread.get_watch(cond) if bp is not None: if enable: bp.enable() else: bp.disable() return if cmd == RequestWatchIgnore: cond, count = arg.split(',') count = int(count) bp = self.mainThread.get_watch(cond) if bp is not None: bp.ignore = count return if cmd == RequestEval: try: value = eval(arg, self.currentThread.getCurrentFrame().f_globals, self.currentThread.getCurrentFrameLocals()) except: # Report the exception and the traceback try: type, value, tb = sys.exc_info() sys.last_type = type sys.last_value = value sys.last_traceback = tb tblist = traceback.extract_tb(tb) del tblist[:1] list = traceback.format_list(tblist) if list: list.insert(0, "Traceback (innermost last):\n") list[len(list):] = \ traceback.format_exception_only(type, value) finally: tblist = tb = None map(self.write,list) self.write(ResponseException + '\n') else: self.write(unicode(value) + '\n') self.write(ResponseOK + '\n') return if cmd == RequestExec: _globals = self.currentThread.getCurrentFrame().f_globals _locals = self.currentThread.getCurrentFrameLocals() try: code = compile(arg + '\n', '', 'single') exec code in _globals, _locals except: # Report the exception and the traceback try: type, value, tb = sys.exc_info() sys.last_type = type sys.last_value = value sys.last_traceback = tb tblist = traceback.extract_tb(tb) del tblist[:1] list = traceback.format_list(tblist) if list: list.insert(0, "Traceback (innermost last):\n") list[len(list):] = \ traceback.format_exception_only(type, value) finally: tblist = tb = None map(self.write, list) self.write(ResponseException + '\n') return if cmd == RequestBanner: self.write('%s%s\n' % (ResponseBanner, unicode(("Python %s" % sys.version, socket.gethostname(), self.variant)))) return if cmd == RequestCapabilities: self.write('%s%d, "Python"\n' % (ResponseCapabilities, self.__clientCapabilities())) return if cmd == RequestCompletion: self.__completionList(arg) return if cmd == RequestSetFilter: scope, filterString = eval(arg) self.__generateFilterObjects(int(scope), filterString) return if cmd == RequestUTPrepare: fn, tn, tfn, cov, covname, erase = arg.split('|') sys.path.insert(0, os.path.dirname(os.path.abspath(fn))) os.chdir(sys.path[0]) # set the system exception handling function to ensure, that # we report on all unhandled exceptions sys.excepthook = self.__unhandled_exception try: import unittest utModule = __import__(tn) try: self.test = unittest.defaultTestLoader\ .loadTestsFromName(tfn, utModule) except AttributeError: self.test = unittest.defaultTestLoader\ .loadTestsFromModule(utModule) except: exc_type, exc_value, exc_tb = sys.exc_info() self.write('%s%s\n' % (ResponseUTPrepared, unicode((0, str(exc_type), str(exc_value))))) self.__exceptionRaised() return # generate a coverage object if int(cov): from coverage import coverage self.cover = coverage(auto_data = True, data_file = "%s.coverage" % os.path.splitext(covname)[0]) self.cover.use_cache(True) if int(erase): self.cover.erase() else: self.cover = None self.write('%s%s\n' % (ResponseUTPrepared, unicode((self.test.countTestCases(), "", "")))) return if cmd == RequestUTRun: from DCTestResult import DCTestResult self.testResult = DCTestResult(self) if self.cover: self.cover.start() self.test.run(self.testResult) if self.cover: self.cover.stop() self.cover.save() self.write('%s\n' % ResponseUTFinished) return if cmd == RequestUTStop: self.testResult.stop() return if cmd == ResponseForkTo: # this results from a separate event loop self.fork_child = (arg == 'child') self.eventExit = 1 return if cmd == RequestForkMode: self.fork_auto, self.fork_child = eval(arg) return # If we are handling raw mode input then reset the mode and break out # of the current event loop. if self.inRawMode: self.inRawMode = 0 self.rawLine = line self.eventExit = 1 return if self.buffer: self.buffer = self.buffer + '\n' + line else: self.buffer = line try: code = self.compile_command(self.buffer, self.readstream.name) except (OverflowError, SyntaxError, ValueError): # Report the exception sys.last_type, sys.last_value, sys.last_traceback = sys.exc_info() map(self.write,traceback.format_exception_only(sys.last_type,sys.last_value)) self.buffer = '' else: if code is None: self.pendingResponse = ResponseContinue else: self.buffer = '' try: if self.running is None: exec code in self.debugMod.__dict__ else: if self.currentThread is None: # program has terminated self.running = None _globals = self.debugMod.__dict__ _locals = _globals else: cf = self.currentThread.getCurrentFrame() # program has terminated if cf is None: self.running = None _globals = self.debugMod.__dict__ _locals = _globals else: frmnr = self.framenr while cf is not None and frmnr > 0: cf = cf.f_back frmnr -= 1 _globals = cf.f_globals _locals = self.currentThread.getCurrentFrameLocals() # reset sys.stdout to our redirector (unconditionally) if _globals.has_key("sys"): __stdout = _globals["sys"].stdout _globals["sys"].stdout = self.writestream exec code in _globals, _locals _globals["sys"].stdout = __stdout elif _locals.has_key("sys"): __stdout = _locals["sys"].stdout _locals["sys"].stdout = self.writestream exec code in _globals, _locals _locals["sys"].stdout = __stdout else: exec code in _globals, _locals except SystemExit, exc: self.progTerminated(exc.code) except: # Report the exception and the traceback try: type, value, tb = sys.exc_info() sys.last_type = type sys.last_value = value sys.last_traceback = tb tblist = traceback.extract_tb(tb) del tblist[:1] list = traceback.format_list(tblist) if list: list.insert(0, "Traceback (innermost last):\n") list[len(list):] = \ traceback.format_exception_only(type, value) finally: tblist = tb = None map(self.write, list) def __clientCapabilities(self): """ Private method to determine the clients capabilities. @return client capabilities (integer) """ try: import PyProfile try: del sys.modules['PyProfile'] except KeyError: pass return self.clientCapabilities except ImportError: return self.clientCapabilities & ~DebugClientCapabilities.HasProfiler def write(self,s): """ Public method to write data to the output stream. @param s data to be written (string) """ self.writestream.write(s) self.writestream.flush() def __interact(self): """ Private method to Interact with the debugger. """ global DebugClientInstance self.setDescriptors(self.readstream,self.writestream) DebugClientInstance = self if not self.passive: # At this point simulate an event loop. self.eventLoop() def eventLoop(self, disablePolling = False): """ Public method implementing our event loop. @param disablePolling flag indicating to enter an event loop with polling disabled (boolean) """ self.eventExit = None self.pollingDisabled = disablePolling while self.eventExit is None: wrdy = [] if AsyncPendingWrite(self.writestream): wrdy.append(self.writestream) if AsyncPendingWrite(self.errorstream): wrdy.append(self.errorstream) try: rrdy, wrdy, xrdy = select.select([self.readstream],wrdy,[]) except (select.error, KeyboardInterrupt, socket.error): # just carry on continue if self.readstream in rrdy: self.readReady(self.readstream.fileno()) if self.writestream in wrdy: self.writeReady(self.writestream.fileno()) if self.errorstream in wrdy: self.writeReady(self.errorstream.fileno()) self.eventExit = None self.pollingDisabled = False def eventPoll(self): """ Public method to poll for events like 'set break point'. """ if self.pollingDisabled: return # the choice of a ~0.5 second poll interval is arbitrary. lasteventpolltime = getattr(self, 'lasteventpolltime', time.time()) now = time.time() if now - lasteventpolltime < 0.5: self.lasteventpolltime = lasteventpolltime return else: self.lasteventpolltime = now wrdy = [] if AsyncPendingWrite(self.writestream): wrdy.append(self.writestream) if AsyncPendingWrite(self.errorstream): wrdy.append(self.errorstream) # immediate return if nothing is ready. try: rrdy, wrdy, xrdy = select.select([self.readstream],wrdy,[],0) except (select.error, KeyboardInterrupt, socket.error): return if self.readstream in rrdy: self.readReady(self.readstream.fileno()) if self.writestream in wrdy: self.writeReady(self.writestream.fileno()) if self.errorstream in wrdy: self.writeReady(self.errorstream.fileno()) def connectDebugger(self,port,remoteAddress=None,redirect=1): """ Public method to establish a session with the debugger. It opens a network connection to the debugger, connects it to stdin, stdout and stderr and saves these file objects in case the application being debugged redirects them itself. @param port the port number to connect to (int) @param remoteAddress the network address of the debug server host (string) @param redirect flag indicating redirection of stdin, stdout and stderr (boolean) """ if remoteAddress is None: # default: 127.0.0.1 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((DebugAddress, port)) else: if "@@i" in remoteAddress: remoteAddress, index = remoteAddress.split("@@i") else: index = 0 if ":" in remoteAddress: # IPv6 sockaddr = socket.getaddrinfo( remoteAddress, port, 0, 0, socket.SOL_TCP)[0][-1] sock = socket.socket(socket.AF_INET6, socket.SOCK_STREAM) sockaddr = sockaddr[:-1] + (int(index),) sock.connect(sockaddr) else: # IPv4 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((remoteAddress, port)) self.readstream = AsyncFile(sock, sys.stdin.mode, sys.stdin.name) self.writestream = AsyncFile(sock, sys.stdout.mode, sys.stdout.name) self.errorstream = AsyncFile(sock, sys.stderr.mode, sys.stderr.name) if redirect: sys.stdin = self.readstream sys.stdout = self.writestream sys.stderr = self.errorstream self.redirect = redirect # attach to the main thread here self.attachThread(mainThread = 1) def __unhandled_exception(self, exctype, excval, exctb): """ Private method called to report an uncaught exception. @param exctype the type of the exception @param excval data about the exception @param exctb traceback for the exception """ self.mainThread.user_exception(None, (exctype,excval,exctb), 1) def absPath(self,fn): """ Public method to convert a filename to an absolute name. sys.path is used as a set of possible prefixes. The name stays relative if a file could not be found. @param fn filename (string) @return the converted filename (string) """ if os.path.isabs(fn): return fn # Check the cache. if self._fncache.has_key(fn): return self._fncache[fn] # Search sys.path. for p in sys.path: afn = os.path.abspath(os.path.join(p,fn)) nafn = os.path.normcase(afn) if os.path.exists(nafn): self._fncache[fn] = afn d = os.path.dirname(afn) if (d not in sys.path) and (d not in self.dircache): self.dircache.append(d) return afn # Search the additional directory cache for p in self.dircache: afn = os.path.abspath(os.path.join(p,fn)) nafn = os.path.normcase(afn) if os.path.exists(nafn): self._fncache[fn] = afn return afn # Nothing found. return fn def shouldSkip(self, fn): """ Public method to check if a file should be skipped. @param fn filename to be checked @return non-zero if fn represents a file we are 'skipping', zero otherwise. """ if self.mainThread.tracePython: # trace into Python library return 0 # Eliminate anything that is part of the Python installation. afn = self.absPath(fn) for d in self.skipdirs: if afn.startswith(d): return 1 # special treatment for paths containing site-packages or dist-packages for part in ["site-packages", "dist-packages"]: if part in afn: return 1 return 0 def getRunning(self): """ Public method to return the main script we are currently running. """ return self.running def progTerminated(self,status): """ Public method to tell the debugger that the program has terminated. @param status the return status """ if status is None: status = 0 else: try: int(status) except ValueError: status = 1 if self.running: self.set_quit() self.running = None self.write('%s%d\n' % (ResponseExit,status)) # reset coding self.__coding = self.defaultCoding try: sys.setappdefaultencoding(self.defaultCoding) except AttributeError: pass def __dumpVariables(self, frmnr, scope, filter): """ Private method to return the variables of a frame to the debug server. @param frmnr distance of frame reported on. 0 is the current frame (int) @param scope 1 to report global variables, 0 for local variables (int) @param filter the indices of variable types to be filtered (list of int) """ if self.currentThread is None: return if scope == 0: self.framenr = frmnr f = self.currentThread.getCurrentFrame() while f is not None and frmnr > 0: f = f.f_back frmnr -= 1 if f is None: return if scope: dict = f.f_globals else: dict = f.f_locals if f.f_globals is f.f_locals: scope = -1 varlist = [scope] if scope != -1: keylist = dict.keys() vlist = self.__formatVariablesList(keylist, dict, scope, filter) varlist.extend(vlist) self.write('%s%s\n' % (ResponseVariables, unicode(varlist))) def __dumpVariable(self, var, frmnr, scope, filter): """ Private method to return the variables of a frame to the debug server. @param var list encoded name of the requested variable (list of strings) @param frmnr distance of frame reported on. 0 is the current frame (int) @param scope 1 to report global variables, 0 for local variables (int) @param filter the indices of variable types to be filtered (list of int) """ if self.currentThread is None: return f = self.currentThread.getCurrentFrame() while f is not None and frmnr > 0: f = f.f_back frmnr -= 1 if f is None: return if scope: dict = f.f_globals else: dict = f.f_locals if f.f_globals is f.f_locals: scope = -1 varlist = [scope, var] if scope != -1: # search the correct dictionary i = 0 rvar = var[:] dictkeys = None obj = None isDict = 0 formatSequences = 0 access = "" oaccess = "" odict = dict qtVariable = False qvar = None qvtype = "" while i < len(var): if len(dict): udict = dict ndict = {} # this has to be in line with VariablesViewer.indicators if var[i][-2:] in ["[]", "()", "{}"]: if i+1 == len(var): if var[i][:-2] == '...': dictkeys = [var[i-1]] else: dictkeys = [var[i][:-2]] formatSequences = 1 if not access and not oaccess: if var[i][:-2] == '...': access = '["%s"]' % var[i-1] dict = odict else: access = '["%s"]' % var[i][:-2] else: if var[i][:-2] == '...': if oaccess: access = oaccess else: access = '%s[%s]' % (access, var[i-1]) dict = odict else: if oaccess: access = '%s[%s]' % (oaccess, var[i][:-2]) oaccess = '' else: access = '%s[%s]' % (access, var[i][:-2]) if var[i][-2:] == "{}": isDict = 1 break else: if not access: if var[i][:-2] == '...': access = '["%s"]' % var[i-1] dict = odict else: access = '["%s"]' % var[i][:-2] else: if var[i][:-2] == '...': access = '%s[%s]' % (access, var[i-1]) dict = odict else: if oaccess: access = '%s[%s]' % (oaccess, var[i][:-2]) oaccess = '' else: access = '%s[%s]' % (access, var[i][:-2]) else: if access: if oaccess: access = '%s[%s]' % (oaccess, var[i]) else: access = '%s[%s]' % (access, var[i]) if var[i-1][:-2] == '...': oaccess = access else: oaccess = '' try: exec 'mdict = dict%s.__dict__' % access ndict.update(mdict) exec 'obj = dict%s' % access if "PyQt4." in str(type(obj)): qtVariable = True qvar = obj qvtype = ("%s" % type(qvar))[1:-1].split()[1][1:-1] except: pass try: exec 'mcdict = dict%s.__class__.__dict__' % access ndict.update(mcdict) if mdict and not "sipThis" in mdict.keys(): del rvar[0:2] access = "" except: pass try: cdict = {} exec 'slv = dict%s.__slots__' % access for v in slv: try: exec 'cdict[v] = dict%s.%s' % (access, v) except: pass ndict.update(cdict) exec 'obj = dict%s' % access access = "" if "PyQt4." in str(type(obj)): qtVariable = True qvar = obj qvtype = ("%s" % type(qvar))[1:-1].split()[1][1:-1] except: pass else: try: ndict.update(dict[var[i]].__dict__) ndict.update(dict[var[i]].__class__.__dict__) del rvar[0] obj = dict[var[i]] if "PyQt4." in str(type(obj)): qtVariable = True qvar = obj qvtype = ("%s" % type(qvar))[1:-1].split()[1][1:-1] except: pass try: cdict = {} slv = dict[var[i]].__slots__ for v in slv: try: exec 'cdict[v] = dict[var[i]].%s' % v except: pass ndict.update(cdict) obj = dict[var[i]] if "PyQt4." in str(type(obj)): qtVariable = True qvar = obj qvtype = ("%s" % type(qvar))[1:-1].split()[1][1:-1] except: pass odict = dict dict = ndict i += 1 if qtVariable: vlist = self.__formatQt4Variable(qvar, qvtype) elif ("sipThis" in dict.keys() and len(dict) == 1) or \ (len(dict) == 0 and len(udict) > 0): if access: exec 'qvar = udict%s' % access # this has to be in line with VariablesViewer.indicators elif rvar and rvar[0][-2:] in ["[]", "()", "{}"]: exec 'qvar = udict["%s"][%s]' % (rvar[0][:-2], rvar[1]) else: qvar = udict[var[-1]] qvtype = ("%s" % type(qvar))[1:-1].split()[1][1:-1] if qvtype.startswith("PyQt4"): vlist = self.__formatQt4Variable(qvar, qvtype) else: vlist = [] else: qtVariable = False if len(dict) == 0 and len(udict) > 0: if access: exec 'qvar = udict%s' % access # this has to be in line with VariablesViewer.indicators elif rvar and rvar[0][-2:] in ["[]", "()", "{}"]: exec 'qvar = udict["%s"][%s]' % (rvar[0][:-2], rvar[1]) else: qvar = udict[var[-1]] qvtype = ("%s" % type(qvar))[1:-1].split()[1][1:-1] if qvtype.startswith("PyQt4"): qtVariable = True if qtVariable: vlist = self.__formatQt4Variable(qvar, qvtype) else: # format the dictionary found if dictkeys is None: dictkeys = dict.keys() else: # treatment for sequences and dictionaries if access: exec "dict = dict%s" % access else: dict = dict[dictkeys[0]] if isDict: dictkeys = dict.keys() else: dictkeys = range(len(dict)) vlist = self.__formatVariablesList(dictkeys, dict, scope, filter, formatSequences) varlist.extend(vlist) if obj is not None and not formatSequences: try: if unicode(repr(obj)).startswith('{'): varlist.append(('...', 'dict', "%d" % len(obj.keys()))) elif unicode(repr(obj)).startswith('['): varlist.append(('...', 'list', "%d" % len(obj))) elif unicode(repr(obj)).startswith('('): varlist.append(('...', 'tuple', "%d" % len(obj))) except: pass self.write('%s%s\n' % (ResponseVariable, unicode(varlist))) def __formatQt4Variable(self, value, vtype): """ Private method to produce a formated output of a simple Qt4 type. @param value variable to be formated @param vtype type of the variable to be formatted (string) @return A tuple consisting of a list of formatted variables. Each variable entry is a tuple of three elements, the variable name, its type and value. """ qttype = vtype.split('.')[-1] varlist = [] if qttype == 'QString': varlist.append(("", "QString", "%s" % unicode(value))) elif qttype == 'QStringList': for i in range(value.count()): varlist.append(("%d" % i, "QString", "%s" % unicode(value[i]))) elif qttype == 'QByteArray': varlist.append(("hex", "QByteArray", "%s" % value.toHex())) varlist.append(("base64", "QByteArray", "%s" % value.toBase64())) varlist.append(("percent encoding", "QByteArray", "%s" % value.toPercentEncoding())) elif qttype == 'QChar': varlist.append(("", "QChar", "%s" % unichr(value.unicode()))) varlist.append(("", "int", "%d" % value.unicode())) elif qttype == 'QPoint': varlist.append(("x", "int", "%d" % value.x())) varlist.append(("y", "int", "%d" % value.y())) elif qttype == 'QPointF': varlist.append(("x", "float", "%g" % value.x())) varlist.append(("y", "float", "%g" % value.y())) elif qttype == 'QRect': varlist.append(("x", "int", "%d" % value.x())) varlist.append(("y", "int", "%d" % value.y())) varlist.append(("width", "int", "%d" % value.width())) varlist.append(("height", "int", "%d" % value.height())) elif qttype == 'QRectF': varlist.append(("x", "float", "%g" % value.x())) varlist.append(("y", "float", "%g" % value.y())) varlist.append(("width", "float", "%g" % value.width())) varlist.append(("height", "float", "%g" % value.height())) elif qttype == 'QSize': varlist.append(("width", "int", "%d" % value.width())) varlist.append(("height", "int", "%d" % value.height())) elif qttype == 'QSizeF': varlist.append(("width", "float", "%g" % value.width())) varlist.append(("height", "float", "%g" % value.height())) elif qttype == 'QColor': varlist.append(("name", "QString", "%s" % value.name())) r, g, b, a = value.getRgb() varlist.append(("rgb", "int", "%d, %d, %d, %d" % (r, g, b, a))) h, s, v, a = value.getHsv() varlist.append(("hsv", "int", "%d, %d, %d, %d" % (h, s, v, a))) c, m, y, k, a = value.getCmyk() varlist.append(("cmyk", "int", "%d, %d, %d, %d, %d" % (c, m, y, k, a))) elif qttype == 'QDate': varlist.append(("", "QDate", "%s" % unicode(value.toString()))) elif qttype == 'QTime': varlist.append(("", "QTime", "%s" % unicode(value.toString()))) elif qttype == 'QDateTime': varlist.append(("", "QDateTime", "%s" % unicode(value.toString()))) elif qttype == 'QDir': varlist.append(("path", "QString", "%s" % unicode(value.path()))) varlist.append(("absolutePath", "QString", "%s" % \ unicode(value.absolutePath()))) varlist.append(("canonicalPath", "QString", "%s" % \ unicode(value.canonicalPath()))) elif qttype == 'QFile': varlist.append(("fileName", "QString", "%s" % unicode(value.fileName()))) elif qttype == 'QFont': varlist.append(("family", "QString", "%s" % unicode(value.family()))) varlist.append(("pointSize", "int", "%d" % value.pointSize())) varlist.append(("weight", "int", "%d" % value.weight())) varlist.append(("bold", "bool", "%s" % value.bold())) varlist.append(("italic", "bool", "%s" % value.italic())) elif qttype == 'QUrl': varlist.append(("url", "QString", "%s" % unicode(value.toString()))) varlist.append(("scheme", "QString", "%s" % unicode(value.scheme()))) varlist.append(("user", "QString", "%s" % unicode(value.userName()))) varlist.append(("password", "QString", "%s" % unicode(value.password()))) varlist.append(("host", "QString", "%s" % unicode(value.host()))) varlist.append(("port", "int", "%d" % value.port())) varlist.append(("path", "QString", "%s" % unicode(value.path()))) elif qttype == 'QModelIndex': varlist.append(("valid", "bool", "%s" % value.isValid())) if value.isValid(): varlist.append(("row", "int", "%s" % value.row())) varlist.append(("column", "int", "%s" % value.column())) varlist.append(("internalId", "int", "%s" % value.internalId())) varlist.append(("internalPointer", "void *", "%s" % \ value.internalPointer())) elif qttype == 'QRegExp': varlist.append(("pattern", "QString", "%s" % unicode(value.pattern()))) # GUI stuff elif qttype == 'QAction': varlist.append(("name", "QString", "%s" % unicode(value.objectName()))) varlist.append(("text", "QString", "%s" % unicode(value.text()))) varlist.append(("icon text", "QString", "%s" % unicode(value.iconText()))) varlist.append(("tooltip", "QString", "%s" % unicode(value.toolTip()))) varlist.append(("whatsthis", "QString", "%s" % unicode(value.whatsThis()))) varlist.append(("shortcut", "QString", "%s" % \ unicode(value.shortcut().toString()))) elif qttype == 'QKeySequence': varlist.append(("value", "", "%s" % unicode(value.toString()))) # XML stuff elif qttype == 'QDomAttr': varlist.append(("name", "QString", "%s" % unicode(value.name()))) varlist.append(("value", "QString", "%s" % unicode(value.value()))) elif qttype == 'QDomCharacterData': varlist.append(("data", "QString", "%s" % unicode(value.data()))) elif qttype == 'QDomComment': varlist.append(("data", "QString", "%s" % unicode(value.data()))) elif qttype == "QDomDocument": varlist.append(("text", "QString", "%s" % unicode(value.toString()))) elif qttype == 'QDomElement': varlist.append(("tagName", "QString", "%s" % unicode(value.tagName()))) varlist.append(("text", "QString", "%s" % unicode(value.text()))) elif qttype == 'QDomText': varlist.append(("data", "QString", "%s" % unicode(value.data()))) # Networking stuff elif qttype == 'QHostAddress': varlist.append(("address", "QHostAddress", "%s" % unicode(value.toString()))) return varlist def __formatVariablesList(self, keylist, dict, scope, filter = [], formatSequences = 0): """ Private method to produce a formated variables list. The dictionary passed in to it is scanned. Variables are only added to the list, if their type is not contained in the filter list and their name doesn't match any of the filter expressions. The formated variables list (a list of tuples of 3 values) is returned. @param keylist keys of the dictionary @param dict the dictionary to be scanned @param scope 1 to filter using the globals filter, 0 using the locals filter (int). Variables are only added to the list, if their name do not match any of the filter expressions. @param filter the indices of variable types to be filtered. Variables are only added to the list, if their type is not contained in the filter list. @param formatSequences flag indicating, that sequence or dictionary variables should be formatted. If it is 0 (or false), just the number of items contained in these variables is returned. (boolean) @return A tuple consisting of a list of formatted variables. Each variable entry is a tuple of three elements, the variable name, its type and value. """ varlist = [] if scope: patternFilterObjects = self.globalsFilterObjects else: patternFilterObjects = self.localsFilterObjects for key in keylist: # filter based on the filter pattern matched = 0 for pat in patternFilterObjects: if pat.match(unicode(key)): matched = 1 break if matched: continue # filter hidden attributes (filter #0) if 0 in filter and unicode(key)[:2] == '__': continue # special handling for '__builtins__' (it's way too big) if key == '__builtins__': rvalue = '' valtype = 'module' else: value = dict[key] valtypestr = ("%s" % type(value))[1:-1] if valtypestr.split(' ',1)[0] == 'class': # handle new class type of python 2.2+ if ConfigVarTypeStrings.index('instance') in filter: continue valtype = valtypestr else: valtype = valtypestr[6:-1] try: if ConfigVarTypeStrings.index(valtype) in filter: continue except ValueError: if valtype == "classobj": if ConfigVarTypeStrings.index('instance') in filter: continue elif valtype == "sip.methoddescriptor": if ConfigVarTypeStrings.index('instance method') in filter: continue elif valtype == "sip.enumtype": if ConfigVarTypeStrings.index('class') in filter: continue elif not valtype.startswith("PySide") and \ ConfigVarTypeStrings.index('other') in filter: continue try: if valtype not in ['list', 'tuple', 'dict']: rvalue = repr(value) if valtype.startswith('class') and \ rvalue[0] in ['{', '(', '[']: rvalue = "" else: if valtype == 'dict': rvalue = "%d" % len(value.keys()) else: rvalue = "%d" % len(value) except: rvalue = '' if formatSequences: if unicode(key) == key: key = "'%s'" % key else: key = unicode(key) varlist.append((key, valtype, rvalue)) return varlist def __generateFilterObjects(self, scope, filterString): """ Private slot to convert a filter string to a list of filter objects. @param scope 1 to generate filter for global variables, 0 for local variables (int) @param filterString string of filter patterns separated by ';' """ patternFilterObjects = [] for pattern in filterString.split(';'): patternFilterObjects.append(re.compile('^%s$' % pattern)) if scope: self.globalsFilterObjects = patternFilterObjects[:] else: self.localsFilterObjects = patternFilterObjects[:] def __completionList(self, text): """ Private slot to handle the request for a commandline completion list. @param text the text to be completed (string) """ completerDelims = ' \t\n`~!@#$%^&*()-=+[{]}\\|;:\'",<>/?' completions = [] state = 0 # find position of last delim character pos = -1 while pos >= -len(text): if text[pos] in completerDelims: if pos == -1: text = '' else: text = text[pos+1:] break pos -= 1 try: comp = self.complete(text, state) except: comp = None while comp is not None: completions.append(comp) state += 1 try: comp = self.complete(text, state) except: comp = None self.write("%s%s||%s\n" % (ResponseCompletion, unicode(completions), text)) def startDebugger(self, filename = None, host = None, port = None, enableTrace = 1, exceptions = 1, tracePython = 0, redirect = 1): """ Public method used to start the remote debugger. @param filename the program to be debugged (string) @param host hostname of the debug server (string) @param port portnumber of the debug server (int) @param enableTrace flag to enable the tracing function (boolean) @param exceptions flag to enable exception reporting of the IDE (boolean) @param tracePython flag to enable tracing into the Python library (boolean) @param redirect flag indicating redirection of stdin, stdout and stderr (boolean) """ global debugClient if host is None: host = os.getenv('ERICHOST', 'localhost') if port is None: port = os.getenv('ERICPORT', 42424) remoteAddress = self.__resolveHost(host) self.connectDebugger(port, remoteAddress, redirect) if filename is not None: self.running = os.path.abspath(filename) else: try: self.running = os.path.abspath(sys.argv[0]) except IndexError: self.running = None if self.running: self.__setCoding(self.running) try: sys.setappdefaultencoding(self.defaultCoding) except AttributeError: pass self.passive = 1 self.write("%s%s|%d\n" % (PassiveStartup, self.running, exceptions)) self.__interact() # setup the debugger variables self._fncache = {} self.dircache = [] self.mainFrame = None self.inRawMode = 0 self.debugging = 1 self.attachThread(mainThread = 1) self.mainThread.tracePython = tracePython # set the system exception handling function to ensure, that # we report on all unhandled exceptions sys.excepthook = self.__unhandled_exception # now start debugging if enableTrace: self.mainThread.set_trace() def startProgInDebugger(self, progargs, wd = '', host = None, port = None, exceptions = 1, tracePython = 0, redirect = 1): """ Public method used to start the remote debugger. @param progargs commandline for the program to be debugged (list of strings) @param wd working directory for the program execution (string) @param host hostname of the debug server (string) @param port portnumber of the debug server (int) @param exceptions flag to enable exception reporting of the IDE (boolean) @param tracePython flag to enable tracing into the Python library (boolean) @param redirect flag indicating redirection of stdin, stdout and stderr (boolean) """ if host is None: host = os.getenv('ERICHOST', 'localhost') if port is None: port = os.getenv('ERICPORT', 42424) remoteAddress = self.__resolveHost(host) self.connectDebugger(port, remoteAddress, redirect) self._fncache = {} self.dircache = [] sys.argv = progargs[:] sys.argv[0] = os.path.abspath(sys.argv[0]) sys.path = self.__getSysPath(os.path.dirname(sys.argv[0])) if wd == '': os.chdir(sys.path[1]) else: os.chdir(wd) self.running = sys.argv[0] self.__setCoding(self.running) try: sys.setappdefaultencoding(self.__coding) except AttributeError: pass self.mainFrame = None self.inRawMode = 0 self.debugging = 1 self.passive = 1 self.write("%s%s|%d\n" % (PassiveStartup, self.running, exceptions)) self.__interact() self.attachThread(mainThread = 1) self.mainThread.tracePython = tracePython # set the system exception handling function to ensure, that # we report on all unhandled exceptions sys.excepthook = self.__unhandled_exception # This will eventually enter a local event loop. # Note the use of backquotes to cause a repr of self.running. The # need for this is on Windows os where backslash is the path separator. # They will get inadvertantly stripped away during the eval causing IOErrors # if self.running is passed as a normal str. self.debugMod.__dict__['__file__'] = self.running sys.modules['__main__'] = self.debugMod res = self.mainThread.run('execfile(' + `self.running` + ')', self.debugMod.__dict__) self.progTerminated(res) def run_call(self, scriptname, func, *args): """ Public method used to start the remote debugger and call a function. @param scriptname name of the script to be debugged (string) @param func function to be called @param *args arguments being passed to func @return result of the function call """ self.startDebugger(scriptname, enableTrace = 0) res = self.mainThread.runcall(func, *args) self.progTerminated(res) return res def __resolveHost(self, host): """ Private method to resolve a hostname to an IP address. @param host hostname of the debug server (string) @return IP address (string) """ try: host, version = host.split("@@") except ValueError: version = 'v4' if version == 'v4': family = socket.AF_INET else: family = socket.AF_INET6 return socket.getaddrinfo(host, None, family, socket.SOCK_STREAM)[0][4][0] def main(self): """ Public method implementing the main method. """ if '--' in sys.argv: args = sys.argv[1:] host = None port = None wd = '' tracePython = 0 exceptions = 1 redirect = 1 while args[0]: if args[0] == '-h': host = args[1] del args[0] del args[0] elif args[0] == '-p': port = int(args[1]) del args[0] del args[0] elif args[0] == '-w': wd = args[1] del args[0] del args[0] elif args[0] == '-t': tracePython = 1 del args[0] elif args[0] == '-e': exceptions = 0 del args[0] elif args[0] == '-n': redirect = 0 del args[0] elif args[0] == '--no-encoding': self.noencoding = True del args[0] elif args[0] == '--fork-child': self.fork_auto = True self.fork_child = True del args[0] elif args[0] == '--fork-parent': self.fork_auto = True self.fork_child = False del args[0] elif args[0] == '--': del args[0] break else: # unknown option del args[0] if not args: print "No program given. Aborting!" else: if not self.noencoding: self.__coding = self.defaultCoding try: sys.setappdefaultencoding(self.defaultCoding) except AttributeError: pass self.startProgInDebugger(args, wd, host, port, exceptions=exceptions, tracePython=tracePython, redirect=redirect) else: if sys.argv[1] == '--no-encoding': self.noencoding = True del sys.argv[1] if sys.argv[1] == '': del sys.argv[1] try: port = int(sys.argv[1]) except (ValueError, IndexError): port = -1 try: redirect = int(sys.argv[2]) except (ValueError, IndexError): redirect = 1 try: ipOrHost = sys.argv[3] if ':' in ipOrHost: remoteAddress = ipOrHost elif ipOrHost[0] in '0123456789': remoteAddress = ipOrHost else: remoteAddress = self.__resolveHost(ipOrHost) except: remoteAddress = None sys.argv = [''] if not '' in sys.path: sys.path.insert(0, '') if port >= 0: if not self.noencoding: self.__coding = self.defaultCoding try: sys.setappdefaultencoding(self.defaultCoding) except AttributeError: pass self.connectDebugger(port, remoteAddress, redirect) self.__interact() else: print "No network port given. Aborting..." def fork(self): """ Public method implementing a fork routine deciding which branch to follow. """ if not self.fork_auto: self.write(RequestForkTo + '\n') self.eventLoop(True) pid = DebugClientOrigFork() if pid == 0: # child if not self.fork_child: sys.settrace(None) sys.setprofile(None) self.sessionClose(0) else: # parent if self.fork_child: sys.settrace(None) sys.setprofile(None) self.sessionClose(0) return pid def close(self, fd): """ Private method implementing a close method as a replacement for os.close(). It prevents the debugger connections from being closed. @param fd file descriptor to be closed (integer) """ if fd in [self.readstream.fileno(), self.writestream.fileno(), self.errorstream.fileno()]: return DebugClientOrigClose(fd) def __getSysPath(self, firstEntry): """ Private slot to calculate a path list including the PYTHONPATH environment variable. @param firstEntry entry to be put first in sys.path (string) @return path list for use as sys.path (list of strings) """ sysPath = [path for path in os.environ.get("PYTHONPATH", "").split(os.pathsep) if path not in sys.path] + sys.path[:] if "" in sysPath: sysPath.remove("") sysPath.insert(0, firstEntry) sysPath.insert(0, '') return sysPath eric4-4.5.18/eric/DebugClients/Python/PaxHeaders.8617/DebugThread.py0000644000175000001440000000013212261012652023067 xustar000000000000000030 mtime=1388582314.052103091 30 atime=1389081085.500724352 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python/DebugThread.py0000644000175000001440000000740612261012652022630 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2002 - 2014 Detlev Offenbach # """ Module implementing the debug thread. """ import bdb import os import sys from DebugBase import * class DebugThread(DebugBase): """ Class implementing a debug thread. It represents a thread in the python interpreter that we are tracing. Provides simple wrapper methods around bdb for the 'owning' client to call to step etc. """ def __init__(self, dbgClient, targ = None, args = None, kwargs = None, mainThread = 0): """ Constructor @param dbgClient the owning client @param targ the target method in the run thread @param args arguments to be passed to the thread @param kwargs arguments to be passed to the thread @param mainThread 0 if this thread is not the mainscripts thread """ DebugBase.__init__(self, dbgClient) self._target = targ self._args = args self._kwargs = kwargs self._mainThread = mainThread # thread running tracks execution state of client code # it will always be 0 for main thread as that is tracked # by DebugClientThreads and Bdb... self._threadRunning = 0 self.__ident = None # id of this thread. self.__name = "" def set_ident(self, id): """ Public method to set the id for this thread. @param id id for this thread (int) """ self.__ident = id def get_ident(self): """ Public method to return the id of this thread. @return the id of this thread (int) """ return self.__ident def get_name(self): """ Public method to return the name of this thread. @return name of this thread (string) """ return self.__name def traceThread(self): """ Private method to setup tracing for this thread. """ self.set_trace() if not self._mainThread: self.set_continue(0) def bootstrap(self): """ Private method to bootstrap the thread. It wraps the call to the user function to enable tracing before hand. """ try: try: self._threadRunning = 1 self.traceThread() self._target(*self._args, **self._kwargs) except bdb.BdbQuit: pass finally: self._threadRunning = 0 self.quitting = 1 self._dbgClient.threadTerminated(self) sys.settrace(None) sys.setprofile(None) def trace_dispatch(self, frame, event, arg): """ Private method wrapping the trace_dispatch of bdb.py. It wraps the call to dispatch tracing into bdb to make sure we have locked the client to prevent multiple threads from entering the client event loop. @param frame The current stack frame. @param event The trace event (string) @param arg The arguments @return local trace function """ try: self._dbgClient.lockClient() # if this thread came out of a lock, and we are quitting # and we are still running, then get rid of tracing for this thread if self.quitting and self._threadRunning: sys.settrace(None) sys.setprofile(None) import threading self.__name = threading.currentThread().getName() retval = DebugBase.trace_dispatch(self, frame, event, arg) finally: self._dbgClient.unlockClient() return retval eric4-4.5.18/eric/DebugClients/Python/PaxHeaders.8617/DebugClient.py0000644000175000001440000000013212261012652023076 xustar000000000000000030 mtime=1388582314.054103117 30 atime=1389081085.509724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Python/DebugClient.py0000644000175000001440000000161312261012652022631 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Module implementing a Qt free version of the debug client. """ from AsyncIO import * from DebugBase import * import DebugClientBase class DebugClient(DebugClientBase.DebugClientBase, AsyncIO, DebugBase): """ Class implementing the client side of the debugger. This variant of the debugger implements the standard debugger client by subclassing all relevant base classes. """ def __init__(self): """ Constructor """ AsyncIO.__init__(self) DebugClientBase.DebugClientBase.__init__(self) DebugBase.__init__(self, self) self.variant = 'Standard' # We are normally called by the debugger to execute directly. if __name__ == '__main__': debugClient = DebugClient() debugClient.main() eric4-4.5.18/eric/DebugClients/PaxHeaders.8617/Ruby0000644000175000001440000000013212261012661017722 xustar000000000000000030 mtime=1388582321.937202118 30 atime=1389081086.015724339 30 ctime=1389081086.315724332 eric4-4.5.18/eric/DebugClients/Ruby/0000755000175000001440000000000012261012661017531 5ustar00detlevusers00000000000000eric4-4.5.18/eric/DebugClients/Ruby/PaxHeaders.8617/DebugClient.rb0000644000175000001440000000013212261012653022512 xustar000000000000000030 mtime=1388582315.020115329 30 atime=1389081085.509724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Ruby/DebugClient.rb0000644000175000001440000000146412261012653022251 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2005 - 2014 Detlev Offenbach # =begin edoc File implementing a debug client. =end if RUBY_VERSION < "1.9" $KCODE = 'UTF8' require 'jcode' end # insert path to ourself in front of the search path $:.insert(0, File.dirname($0)) require 'Debuggee' require 'AsyncIO' require 'DebugClientBaseModule' class DebugClient =begin edoc Class implementing the client side of the debugger. =end include AsyncIO include DebugClientBase def initialize =begin edoc Constructor =end initializeAsyncIO initializeDebugClient @variant = "No Qt-Version" end end # We are normally called by the debugger to execute directly if __FILE__ == $0 debugClient = DebugClient.new() debugClient.main() end eric4-4.5.18/eric/DebugClients/Ruby/PaxHeaders.8617/__init__.rb0000644000175000001440000000013212261012653022064 xustar000000000000000030 mtime=1388582315.022115355 30 atime=1389081085.509724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Ruby/__init__.rb0000644000175000001440000000023512261012653021616 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2005 - 2014 Detlev Offenbach # =begin edoc Package implementing the Ruby debugger. =end eric4-4.5.18/eric/DebugClients/Ruby/PaxHeaders.8617/AsyncIO.rb0000644000175000001440000000013112261012653021631 xustar000000000000000029 mtime=1388582315.02411538 30 atime=1389081085.509724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Ruby/AsyncIO.rb0000644000175000001440000000364512261012653021374 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2005 - 2014 Detlev Offenbach # =begin edoc File implementing an asynchronous interface for the debugger. =end if RUBY_VERSION < "1.9" $KCODE = 'UTF8' require 'jcode' end module AsyncIO =begin edoc Module implementing asynchronous reading and writing. =end def initializeAsyncIO =begin edoc Function to initialize the module. =end disconnect() end def disconnect =begin edoc Function to disconnect any current connection. =end @readfd = nil @writefd = nil end def setDescriptors(rfd, wfd) =begin edoc Function called to set the descriptors for the connection. @param fd file descriptor of the input file (int) @param wfd file descriptor of the output file (int) =end @rbuf = '' @readfd = rfd @wbuf = '' @writefd = wfd end def readReady(fd) =begin edoc Function called when there is data ready to be read. @param fd file descriptor of the file that has data to be read (int) =end begin got = @readfd.readline() rescue return end if got.length == 0 sessionClose() return end @rbuf << got # Call handleLine for the line if it is complete. eol = @rbuf.index("\n") while eol and eol >= 0 s = @rbuf[0..eol] @rbuf = @rbuf[eol+1..-1] handleLine(s) eol = @rbuf.index("\n") end end def writeReady(fd) =begin edoc Function called when we are ready to write data. @param fd file descriptor of the file that has data to be written (int) =end @writefd.write(@wbuf) @writefd.flush() @wbuf = '' end def write(s) =begin edoc Function to write a string. @param s the data to be written (string) =end @wbuf << s end end eric4-4.5.18/eric/DebugClients/Ruby/PaxHeaders.8617/DebugQuit.rb0000644000175000001440000000013212261012653022216 xustar000000000000000030 mtime=1388582315.026115405 30 atime=1389081085.509724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Ruby/DebugQuit.rb0000644000175000001440000000044112261012653021747 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2005 - 2014 Detlev Offenbach # =begin edoc File implementing a debug quit exception class. =end class DebugQuit < Exception =begin edoc Class implementing an exception to signal the end of a debugging session. =end end eric4-4.5.18/eric/DebugClients/Ruby/PaxHeaders.8617/AsyncFile.rb0000644000175000001440000000013212261012653022202 xustar000000000000000030 mtime=1388582315.053115746 30 atime=1389081085.510724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Ruby/AsyncFile.rb0000644000175000001440000001521412261012653021737 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2005 - 2014 Detlev Offenbach # =begin edoc File implementing an asynchronous file like socket interface for the debugger. =end if RUBY_VERSION < "1.9" $KCODE = 'UTF8' require 'jcode' end require 'socket' require 'DebugProtocol' def AsyncPendingWrite(file) =begin edoc Module function to check for data to be written. @param file The file object to be checked (file) @return Flag indicating if there is data wating (int) =end begin pending = file.pendingWrite rescue pending = 0 end return pending end class AsyncFile =begin edoc # Class wrapping a socket object with a file interface. =end @@maxtries = 10 @@maxbuffersize = 1024 * 1024 * 4 def initialize(sock, mode, name) =begin edoc Constructor @param sock the socket object being wrapped @param mode mode of this file (string) @param name name of this file (string) =end # Initialise the attributes. @closed = false @sock = sock @mode = mode @name = name @nWriteErrors = 0 @wpending = '' end def checkMode(mode) =begin edoc Private method to check the mode. This method checks, if an operation is permitted according to the mode of the file. If it is not, an IOError is raised. @param mode the mode to be checked (string) =end if mode != @mode raise IOError, '[Errno 9] Bad file descriptor' end end def nWrite(n) =begin edoc Private method to write a specific number of pending bytes. @param n the number of bytes to be written (int) =end if n > 0 begin buf = "%s%s" % [@wpending[0...n], EOT] sent = @sock.send(buf, 0) if sent > n sent -= EOT.length end @wpending = @wpending[sent..-1] @nWriteErrors = 0 rescue IOError @nWriteErrors += 1 if @nWriteErrors > self.maxtries raise # assume that an error that occurs 10 times wont go away end end end end def pendingWrite =begin edoc Public method that returns the number of bytes waiting to be written. @return the number of bytes to be written (int) =end ind = @wpending.rindex("\n") if ind return ind + 1 else return 0 end end def close =begin edoc Public method to close the file. =end if not @closed flush() begin @sock.close() rescue IOError end @closed = true end end def flush =begin edoc Public method to write all pending bytes. =end nWrite(@wpending.length) end def isatty =begin edoc Public method to indicate whether a tty interface is supported. @return always false =end return false end def fileno =begin edoc Public method returning the file number. @return file number (int) =end return @sock.fileno() end def getSock =begin edoc Public method to get the socket object. @return the socket object =end return @sock end def read(size = -1) =begin edoc Public method to read bytes from this file. @param size maximum number of bytes to be read (int) @return the bytes read (any) =end checkMode('r') if size < 0 size = 20000 end return @sock.recv(size) end def readline(size = -1) =begin edoc Public method to read a line from this file. Note: This method will not block and may return only a part of a line if that is all that is available. @param size maximum number of bytes to be read (int) @return one line of text up to size bytes (string) =end checkMode('r') if size < 0 size = 20000 end # The integration of the debugger client event loop and the connection # to the debugger relies on the two lines of the debugger command being # delivered as two separate events. Therefore we make sure we only # read a line at a time. line = @sock.recv(size, Socket::MSG_PEEK) eol = line.index("\n") if eol and eol >= 0 size = eol + 1 else size = line.length end # Now we know how big the line is, read it for real. return @sock.recv(size) end def readlines(sizehint = -1) =begin edoc Public method to read all lines from this file. @param sizehint hint of the numbers of bytes to be read (int) @return list of lines read (list of strings) =end lines = [] room = sizehint line = readline(room) linelen = line.length while linelen > 0 lines << line if sizehint >= 0 room = room - linelen if room <= 0 break end end line = readline(room) linelen = line.length end return lines end def seek(offset, whence=IO::SEEK_SET) =begin edoc Public method to move the filepointer. @exception IOError This method is not supported and always raises an IOError. =end raise IOError, '[Errno 29] Illegal seek' end def tell =begin edoc Public method to get the filepointer position. @exception IOError This method is not supported and always raises an IOError. =end raise IOError, '[Errno 29] Illegal seek' end def <<(s) =begin edoc Synonym for write(s). @param s bytes to be written (string) =end write(s) end def write(s) =begin edoc Public method to write a string to the file. @param s bytes to be written (string) =end checkMode("w") tries = 0 s = s.to_s if @wpending.length == 0 @wpending = s.dup elsif @wpending.length + s.length > @@maxbuffersize # flush wpending if too big while @wpending.length > 0 # if we have a persistent error in sending the data, an exception # will be raised in nWrite flush tries += 1 if tries > @@maxtries raise IOError, "Too many attempts to send data" end end @wpending = s.dup else @wpending << s end nWrite(pendingWrite()) end def writelines(list) =begin edoc Public method to write a list of strings to the file. @param list the list to be written (list of string) =end list.each do |s| write(s) end end end eric4-4.5.18/eric/DebugClients/Ruby/PaxHeaders.8617/DebugProtocol.rb0000644000175000001440000000013212261012653023075 xustar000000000000000030 mtime=1388582315.055115771 30 atime=1389081085.510724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Ruby/DebugProtocol.rb0000644000175000001440000000425312261012653022633 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2005 - 2014 Detlev Offenbach # =begin edoc File defining the debug protocol tokens =end if RUBY_VERSION < "1.9" $KCODE = 'UTF8' require 'jcode' end # The address used for debugger/client communications. DebugAddress = '127.0.0.1' # The protocol "words". RequestOK = '>OK?<' RequestEnv = '>Environment<' RequestCapabilities = '>Capabilities<' RequestLoad = '>Load<' RequestRun = '>Run<' RequestCoverage = '>Coverage<' RequestProfile = '>Profile<' RequestContinue = '>Continue<' RequestStep = '>Step<' RequestStepOver = '>StepOver<' RequestStepOut = '>StepOut<' RequestStepQuit = '>StepQuit<' RequestBreak = '>Break<' RequestBreakEnable = '>EnableBreak<' RequestBreakIgnore = '>IgnoreBreak<' RequestWatch = '>Watch<' RequestWatchEnable = '>EnableWatch<' RequestWatchIgnore = '>IgnoreWatch<' RequestVariables = '>Variables<' RequestVariable = '>Variable<' RequestSetFilter = '>SetFilter<' RequestEval = '>Eval<' RequestExec = '>Exec<' RequestShutdown = '>Shutdown<' RequestBanner = '>Banner<' RequestCompletion = '>Completion<' RequestUTPrepare = '>UTPrepare<' RequestUTRun = '>UTRun<' RequestUTStop = '>UTStop<' ResponseOK = '>OK<' ResponseCapabilities = RequestCapabilities ResponseContinue = '>Continue<' ResponseException = '>Exception<' ResponseSyntax = '>SyntaxError<' ResponseExit = '>Exit<' ResponseLine = '>Line<' ResponseRaw = '>Raw<' ResponseClearBreak = '>ClearBreak<' ResponseClearWatch = '>ClearWatch<' ResponseVariables = RequestVariables ResponseVariable = RequestVariable ResponseBanner = RequestBanner ResponseCompletion = RequestCompletion ResponseUTPrepared = '>UTPrepared<' ResponseUTStartTest = '>UTStartTest<' ResponseUTStopTest = '>UTStopTest<' ResponseUTTestFailed = '>UTTestFailed<' ResponseUTTestErrored = '>UTTestErrored<' ResponseUTFinished = '>UTFinished<' PassiveStartup = '>PassiveStartup<' EOT = ">EOT<\n" eric4-4.5.18/eric/DebugClients/Ruby/PaxHeaders.8617/Completer.rb0000644000175000001440000000013212261012653022257 xustar000000000000000030 mtime=1388582315.057115796 30 atime=1389081085.510724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Ruby/Completer.rb0000644000175000001440000001403212261012653022011 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2005 - 2014 Detlev Offenbach # =begin edoc File implementing a command line completer class. =end # # This code is mostly based on the completer found in irb of the Ruby package # Original copyright # by Keiju ISHITSUKA(keiju@ishitsuka.com) # From Original Idea of shugo@ruby-lang.org # if RUBY_VERSION < "1.9" $KCODE = 'UTF8' require 'jcode' end class Completer =begin edoc Class implementing a command completer. =end ReservedWords = [ "BEGIN", "END", "alias", "and", "begin", "break", "case", "class", "def", "defined", "do", "else", "elsif", "end", "ensure", "false", "for", "if", "in", "module", "next", "nil", "not", "or", "redo", "rescue", "retry", "return", "self", "super", "then", "true", "undef", "unless", "until", "when", "while", "yield", ] def initialize(binding) =begin edoc constructor @param binding binding object used to determine the possible completions =end @binding = binding end def complete(input) =begin edoc Public method to select the possible completions @param input text to be completed (String) @return list of possible completions (Array) =end case input when /^(\/[^\/]*\/)\.([^.]*)$/ # Regexp receiver = $1 message = Regexp.quote($2) candidates = Regexp.instance_methods(true) select_message(receiver, message, candidates) when /^([^\]]*\])\.([^.]*)$/ # Array receiver = $1 message = Regexp.quote($2) candidates = Array.instance_methods(true) select_message(receiver, message, candidates) when /^([^\}]*\})\.([^.]*)$/ # Proc or Hash receiver = $1 message = Regexp.quote($2) candidates = Proc.instance_methods(true) | Hash.instance_methods(true) select_message(receiver, message, candidates) when /^(:[^:.]*)$/ # Symbol if Symbol.respond_to?(:all_symbols) sym = $1 candidates = Symbol.all_symbols.collect{|s| ":" + s.id2name} candidates.grep(/^#{sym}/) else [] end when /^::([A-Z][^:\.\(]*)$/ # Absolute Constant or class methods receiver = $1 candidates = Object.constants candidates.grep(/^#{receiver}/).collect{|e| "::" + e} when /^(((::)?[A-Z][^:.\(]*)+)::?([^:.]*)$/ # Constant or class methods receiver = $1 message = Regexp.quote($4) begin candidates = eval("#{receiver}.constants | #{receiver}.methods", @binding) rescue Exception candidates = [] end candidates.grep(/^#{message}/).collect{|e| receiver + "::" + e} when /^(:[^:.]+)\.([^.]*)$/ # Symbol receiver = $1 message = Regexp.quote($2) candidates = Symbol.instance_methods(true) select_message(receiver, message, candidates) when /^([0-9_]+(\.[0-9_]+)?(e[0-9]+)?)\.([^.]*)$/ # Numeric receiver = $1 message = Regexp.quote($4) begin candidates = eval(receiver, @binding).methods rescue Exception candidates end select_message(receiver, message, candidates) when /^(\$[^.]*)$/ # Global variable candidates = global_variables.grep(Regexp.new(Regexp.quote($1))) # when /^(\$?(\.?[^.]+)+)\.([^.]*)$/ when /^((\.?[^.]+)+)\.([^.]*)$/ # variable receiver = $1 message = Regexp.quote($3) gv = eval("global_variables", @binding) lv = eval("local_variables", @binding) cv = eval("self.class.constants", @binding) if (gv | lv | cv).include?(receiver) # foo.func and foo is local var. candidates = eval("#{receiver}.methods", @binding) elsif /^[A-Z]/ =~ receiver and /\./ !~ receiver # Foo::Bar.func begin candidates = eval("#{receiver}.methods", @binding) rescue Exception candidates = [] end else # func1.func2 candidates = [] ObjectSpace.each_object(Module){|m| next if m.name != "IRB::Context" and /^(IRB|SLex|RubyLex|RubyToken)/ =~ m.name candidates.concat m.instance_methods(false) } candidates.sort! candidates.uniq! end select_message(receiver, message, candidates) when /^\.([^.]*)$/ # unknown(maybe String) receiver = "" message = Regexp.quote($1) candidates = String.instance_methods(true) select_message(receiver, message, candidates) else candidates = eval("methods | private_methods | local_variables | self.class.constants", @binding) (candidates|ReservedWords).grep(/^#{Regexp.quote(input)}/) end end Operators = ["%", "&", "*", "**", "+", "-", "/", "<", "<<", "<=", "<=>", "==", "===", "=~", ">", ">=", ">>", "[]", "[]=", "^",] def select_message(receiver, message, candidates) =begin edoc Method used to pick completion candidates. @param receiver object receiving the message @param message message to be sent to object @param candidates possible completion candidates @return filtered list of candidates =end candidates.grep(/^#{message}/).collect do |e| case e when /^[a-zA-Z_]/ receiver + "." + e when /^[0-9]/ when *Operators #receiver + " " + e end end end end eric4-4.5.18/eric/DebugClients/Ruby/PaxHeaders.8617/DebugClientCapabilities.rb0000644000175000001440000000013212261012653025024 xustar000000000000000030 mtime=1388582315.060115834 30 atime=1389081085.510724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Ruby/DebugClientCapabilities.rb0000644000175000001440000000102512261012653024554 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2005 - 2014 Detlev Offenbach # =begin edoc File defining the debug clients capabilities. =end if RUBY_VERSION < "1.9" $KCODE = 'UTF8' require 'jcode' end HasDebugger = 0x0001 HasInterpreter = 0x0002 HasProfiler = 0x0004 HasCoverage = 0x0008 HasCompleter = 0x0010 HasUnittest = 0x0020 HasShell = 0x0040 HasAll = HasDebugger | HasInterpreter | HasProfiler | \ HasCoverage | HasCompleter | HasUnittest | HasShell eric4-4.5.18/eric/DebugClients/Ruby/PaxHeaders.8617/Config.rb0000644000175000001440000000013212261012653021532 xustar000000000000000030 mtime=1388582315.062115859 30 atime=1389081085.510724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Ruby/Config.rb0000644000175000001440000000120512261012653021262 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2005 - 2014 Detlev Offenbach # =begin edoc File defining the different Ruby types =end if RUBY_VERSION < "1.9" $KCODE = 'UTF8' require 'jcode' end ConfigVarTypeStrings = ['__', 'NilClass', '_unused_', 'bool', 'Fixnum', 'Bignum', 'Float', 'Complex', 'String', 'String', '_unused_', 'Array', 'Hash', '_unused_', '_unused_', 'File', '_unused_', '_unused_', '_unused_', 'Class', 'instance', '_unused_', '_unused_', '_unused_', 'Proc', '_unused_', '_unused_', 'Module', '_unused_', '_unused_', '_unused_', 'other'] eric4-4.5.18/eric/DebugClients/Ruby/PaxHeaders.8617/DebugClientBaseModule.rb0000644000175000001440000000013212261012653024453 xustar000000000000000030 mtime=1388582315.064115884 30 atime=1389081085.510724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Ruby/DebugClientBaseModule.rb0000644000175000001440000011243412261012653024212 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2005 - 2014 Detlev Offenbach # =begin edoc File implementing a debug client base module. =end if RUBY_VERSION < "1.9" $KCODE = 'UTF8' require 'jcode' end require 'socket' require 'DebugQuit' require 'DebugProtocol' require 'DebugClientCapabilities' require 'AsyncFile' require 'Config' require 'Completer' $DebugClientInstance = nil $debugging = false module DebugClientBase =begin edoc Module implementing the client side of the debugger. It provides access to the Ruby interpeter from a debugger running in another process. The protocol between the debugger and the client assumes that there will be a single source of debugger commands and a single source of Ruby statements. Commands and statement are always exactly one line and may be interspersed. The protocol is as follows. First the client opens a connection to the debugger and then sends a series of one line commands. A command is either >Load<, >Step<, >StepInto<, ... or a Ruby statement. See DebugProtocol.rb for a listing of valid protocol tokens. A Ruby statement consists of the statement to execute, followed (in a separate line) by >OK?<. If the statement was incomplete then the response is >Continue<. If there was an exception then the response is >Exception<. Otherwise the response is >OK<. The reason for the >OK?< part is to provide a sentinal (ie. the responding >OK<) after any possible output as a result of executing the command. The client may send any other lines at any other time which should be interpreted as program output. If the debugger closes the session there is no response from the client. The client may close the session at any time as a result of the script being debugged closing or crashing. Note: This module is meant to be mixed in by individual DebugClient classes. Do not use it directly. =end @@clientCapabilities = HasDebugger | HasInterpreter | HasShell | HasCompleter attr_accessor :passive, :traceRuby def initializeDebugClient =begin edoc Method to initialize the module =end # The context to run the debugged program in. @debugBinding = eval("def e4dc_DebugBinding; binding; end; e4dc_DebugBinding", TOPLEVEL_BINDING, __FILE__, __LINE__ - 3) # The context to run the shell commands in. @shellBinding = eval("def e4dc_ShellBinding; binding; end; e4dc_ShellBinding", TOPLEVEL_BINDING, __FILE__, __LINE__ - 3) # stack frames @frames = [] @framenr = 0 # The list of complete lines to execute. @buffer = '' @lineno = 0 # The list of regexp objects to filter variables against @globalsFilterObjects = [] @localsFilterObjects = [] @pendingResponse = ResponseOK @mainProcStr = nil # used for the passive mode @passive = false # used to indicate the passive mode @running = nil @readstream = nil @writestream = nil @errorstream = nil @variant = 'You should not see this' @completer = Completer.new(@shellBinding) end def handleException =begin edoc Private method called in the case of an exception It ensures that the debug server is informed of the raised exception. =end @pendingResponse = ResponseException end def sessionClose =begin edoc Privat method to close the session with the debugger and terminate. =end set_trace_func nil if $debugging $debugging = false @running = nil DEBUGGER__.context(DEBUGGER__.last_thread).step_quit() end # clean up asyncio disconnect() # make sure we close down our end of the socket # might be overkill as normally stdin, stdout and stderr # SHOULD be closed on exit, but it does not hurt to do it here @readstream.close() @writestream.close() @errorstream.close() # Ok, go away. exit() end def unhandled_exception(exc) =begin edoc Private method to report an unhandled exception. @param exc the exception object =end if SystemExit === exc if $debugging $debugging = false else progTerminated(exc.status) end return end # split the exception message msgParts = exc.message.split(":", 3) filename = File.expand_path(msgParts[0]) linenr = msgParts[1].to_i if ScriptError === exc msgParts = msgParts[2].split(":", 3) filename = msgParts[0].sub(/in `require'/, "") linenr = msgParts[1].to_i exclist = [""] exclist << [filename, linenr, 0] write("%s%s\n" % [ResponseSyntax, exclist.inspect]) return end exclist = ["unhandled %s" % exc.class, msgParts[2].sub(/in /, "")] exclist << [filename, linenr] # process the traceback frList = exc.backtrace frList.each do |frame| next if frame =~ /DebugClientBaseModule/ break if frame =~ /\(eval\)/ frameParts = frame.split(":", 3) filename = File.expand_path(frameParts[0]) linenr = frameParts[1].to_i next if [filename, linenr] == exclist[-1] exclist << [filename, linenr] end write("%s%s\n" % [ResponseException, exclist.inspect]) end def handleLine(line) =begin edoc Private method to handle the receipt of a complete line. It first looks for a valid protocol token at the start of the line. Thereafter it trys to execute the lines accumulated so far. @param line the received line =end # Remove any newline if line[-1] == "\n" line = line[1...-1] end ## STDOUT << line << "\n" ## debug eoc = line.index("<") if eoc and eoc >= 0 and line[0,1] == ">" # Get the command part and any argument cmd = line[0..eoc] arg = line[eoc+1...-1] case cmd when RequestOK write(@pendingResponse + "\n") @pendingResponse = ResponseOK return when RequestEnv # convert a Python stringified hash to a Ruby stringified hash arg.gsub!(/: u/, "=>") arg.gsub!(/u'/, "'") eval(arg).each do |key, value| if key[-1..-1] == "+" key = key[0..-2] if ENV[key] ENV[key] += value else ENV[key] = value end else ENV[key] = value end end return when RequestVariables frmnr, scope, filter = eval("[%s]" % arg.gsub(/u'/, "'").gsub(/u"/,'"')) dumpVariables(frmnr.to_i, scope.to_i, filter) return when RequestVariable var, frmnr, scope, filter = \ eval("[%s]" % arg.gsub(/u'/, "'").gsub(/u"/,'"')) dumpVariable(var, frmnr.to_i, scope.to_i, filter) return when RequestStep DEBUGGER__.context(DEBUGGER__.last_thread).stop_next() @eventExit = true return when RequestStepOver DEBUGGER__.context(DEBUGGER__.last_thread).step_over() @eventExit = true return when RequestStepOut DEBUGGER__.context(DEBUGGER__.last_thread).step_out() @eventExit = true return when RequestStepQuit set_trace_func nil wasDebugging = $debugging $debugging = false @running = nil if @passive progTerminated(42) else DEBUGGER__.context(DEBUGGER__.last_thread).step_quit() if wasDebugging end return when RequestContinue special = arg.to_i if special == 0 DEBUGGER__.context(DEBUGGER__.last_thread).step_continue() else # special == 1 means a continue while doing a step over # this occurs when an expception is raised doing a step over DEBUGGER__.context(DEBUGGER__.last_thread).step_over() end @eventExit = true return when RequestSetFilter scope, filterString = eval("[%s]" % arg) generateFilterObjects(scope.to_i, filterString) return when RequestLoad $debugging = true ARGV.clear() wd, fn, args, traceRuby = arg.split("|", -4) @traceRuby = traceRuby.to_i == 1 ? true : false ARGV.concat(eval(args.gsub(/u'/, "'").gsub(/u"/,'"'))) $:.insert(0, File.dirname(fn)) if wd == '' Dir.chdir($:[0]) else Dir.chdir(wd) end @running = fn command = "$0 = '%s'; require '%s'" % [fn, fn] set_trace_func proc { |event, file, line, id, binding_, klass, *rest| DEBUGGER__.context.trace_func(event, file, line, id, binding_, klass) } begin eval(command, @debugBinding) rescue DebugQuit # just ignore it rescue Exception => exc unhandled_exception(exc) ensure set_trace_func(nil) @running = nil end return when RequestRun $debugging = false ARGV.clear() wd, fn, args = arg.split("|", -3) ARGV.concat(eval(args.gsub(/u'/, "'").gsub(/u"/,'"'))) $:.insert(0, File.dirname(fn)) if wd == '' Dir.chdir($:[0]) else Dir.chdir(wd) end command = "$0 = '%s'; require '%s'" % [fn, fn] @frames = [] set_trace_func proc { |event, file, line, id, binding_, klass, *rest| trace_func(event, file, line, id, binding_, klass) } begin eval(command, @debugBinding) rescue SystemExit # ignore it rescue Exception => exc unhandled_exception(exc) ensure set_trace_func(nil) end return when RequestShutdown sessionClose() return when RequestBreak fn, line, temporary, set, cond = arg.split("@@") line = line.to_i set = set.to_i temporary = temporary.to_i == 1 ? true : false if set == 1 if cond == 'None' cond = nil end DEBUGGER__.context(DEBUGGER__.last_thread)\ .add_break_point(fn, line, temporary, cond) else DEBUGGER__.context(DEBUGGER__.last_thread)\ .delete_break_point(fn, line) end return when RequestBreakEnable fn, line, enable = arg.split(',') line = line.to_i enable = enable.to_i == 1 ? true : false DEBUGGER__.context(DEBUGGER__.last_thread)\ .enable_break_point(fn, line, enable) return when RequestBreakIgnore fn, line, count = arg.split(',') line = line.to_i count = count.to_i DEBUGGER__.context(DEBUGGER__.last_thread)\ .ignore_break_point(fn, line, count) return when RequestWatch cond, temporary, set = arg.split('@@') set = set.to_i temporary = temporary.to_i == 1 ? true : false if set == 1 DEBUGGER__.context(DEBUGGER__.last_thread)\ .add_watch_point(cond, temporary) else DEBUGGER__.context(DEBUGGER__.last_thread).delete_watch_point(cond) end return when RequestWatchEnable cond, enable = arg.split(',') enable = enable.to_i == 1 ? true : false DEBUGGER__.context(DEBUGGER__.last_thread)\ .enable_watch_point(cond, enable) return when RequestWatchIgnore cond, count = arg.split(',') count = count.to_i DEBUGGER__.context(DEBUGGER__.last_thread).ignore_watch_point(cond, count) return when RequestEval, RequestExec if not @running binding_ = @shellBinding else binding_ = DEBUGGER__.context(DEBUGGER__.last_thread).current_binding end write("\n") begin value = eval(arg, binding_) rescue Exception => exc list = [] list << "%s: %s\n" % \ [exc.class, exc.to_s.sub(/stdin:\d+:(in `.*':?)?/, '')] $@.each do |l| break if l =~ /e4dc_ShellBinding/ or l =~ /e4dc_DebugBinding/ or \ l =~ /:in `require'$/ list << "%s\n" % l.sub(/\(eval\)/, "(e3dc)") end list.each do |entry| write(entry) end else write("=> #{value.inspect}\n") write("#{ResponseOK}\n") end return when RequestBanner version = "ruby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE}) [#{RUBY_PLATFORM}]" write("%s('%s','%s','%s')\n" % \ [ResponseBanner, version, Socket.gethostname(), @variant]) return when RequestCapabilities write("%s%d, 'Ruby'\n" % \ [ResponseCapabilities, @@clientCapabilities]) return when RequestCompletion completionList(arg) return else puts "Got unsupported command %s.\n" % cmd return end end if @buffer @buffer << "\n" << line @lineno += 1 else @buffer = line.dup end # check for completeness if not canEval? @pendingResponse = ResponseContinue else command = @buffer.dup @buffer = "" begin res = "=> " if not @running res << eval(command, @shellBinding, "stdin", @lineno).inspect << "\n" else res << eval(command, DEBUGGER__.context(DEBUGGER__.last_thread).get_binding(@framenr), "stdin", @lineno).inspect << "\n" end write(res) rescue SystemExit => exc progTerminated(exc.status) rescue ScriptError, StandardError => exc list = [] list << "%s: %s\n" % \ [exc.class, exc.to_s.sub(/stdin:\d+:(in `.*':?)?/, '')] $@.each do |l| break if l =~ /e4dc_ShellBinding/ or l =~ /e4dc_DebugBinding/ or \ l =~ /:in `require'$/ list << "%s\n" % l.sub(/\(eval\)/, "(e3dc)") end list.each do |entry| write(entry) end handleException() end end end def canEval? =begin edoc Private method to check if the buffer's contents can be evaluated. @return flag indicating if an eval might succeed (boolean) =end indent = 0 if @buffer =~ /,\s*$/ return false end @buffer.split($/).each do |l| if l =~ /^\s*(class|module|def|if|unless|case|while|until|for|begin)\b[^_]/ indent += 1 end if l =~ /\s*do\s*(\|.*\|)?\s*$/ indent += 1 end if l =~ /^\s*end\s*$|^\s*end\b[^_]/ indent -= 1 end if l =~ /\{\s*(\|.*\|)?\s*$/ indent += 1 end if l =~ /^\s*\}/ indent -= 1 end end if indent > 0 return false end return true end def trace_func(event, file, line, id, binding_, klass) =begin edoc Method executed by the tracing facility. It is used to save the execution context of an exception. @param event the tracing event (String) @param file the name of the file being traced (String) @param line the line number being traced (int) @param id object id @param binding_ a binding object @param klass name of a class =end case event when 'line' if @frames[0] @frames[0] = binding_ else @frames.unshift binding_ end when 'call' @frames.unshift binding_ when 'class' @frames.unshift binding_ when 'return', 'end' @frames.shift when 'end' @frames.shift when 'raise' set_trace_func nil end end def write(s) =begin edoc Private method to write data to the output stream. @param s data to be written (string) =end @writestream.write(s) @writestream.flush() end def interact =begin edoc Private method to Interact with the debugger. =end setDescriptors(@readstream, @writestream) $DebugClientInstance = self if not @passive # At this point simulate an event loop. eventLoop() end end def eventLoop =begin edoc Private method implementing our event loop. =end @eventExit = nil while @eventExit == nil wrdy = [] if AsyncPendingWrite(@writestream) > 0 wrdy << @writestream.getSock() end if AsyncPendingWrite(@errorstream) > 0 wrdy << @errorstream.getSock() end rrdy, wrdy, xrdy = select([@readstream.getSock()], wrdy, []) if rrdy.include?(@readstream.getSock()) readReady(@readstream.fileno()) end if wrdy.include?(@writestream.getSock()) writeReady(@writestream.fileno()) end if wrdy.include?(@errorstream.getSock()) writeReady(@errorstream.fileno()) end end @eventExit = nil end def eventPoll =begin edoc Private method to poll for events like 'set break point'. =end # the choice of a ~0.5 second poll interval is arbitrary. lasteventpolltime = @lasteventpolltime ? @lasteventpolltime : Time.now now = Time.now if now - lasteventpolltime < 0.5 @lasteventpolltime = lasteventpolltime return else @lasteventpolltime = now end wrdy = [] if AsyncPendingWrite(@writestream) > 0 wrdy << @writestream.getSock() end if AsyncPendingWrite(@errorstream) > 0 wrdy << @errorstream.getSock() end rrdy, wrdy, xrdy = select([@readstream.getSock()], wrdy, [], 0) if rrdy == nil return end if rrdy.include?(@readstream.getSock()) readReady(@readstream.fileno()) end if wrdy.include?(@writestream.getSock()) writeReady(@writestream.fileno()) end if wrdy.include?(@errorstream.getSock()) writeReady(@errorstream.fileno()) end end def connectDebugger(port, remoteAddress=nil, redirect=true) =begin edoc Public method to establish a session with the debugger. It opens a network connection to the debugger, connects it to stdin, stdout and stderr and saves these file objects in case the application being debugged redirects them itself. @param port the port number to connect to (int) @param remoteAddress the network address of the debug server host (string) @param redirect flag indicating redirection of stdin, stdout and stderr (boolean) =end if remoteAddress == nil sock = TCPSocket.new(DebugAddress, port) else if remoteAddress =~ /@@i/ remoteAddress, interface = remoteAddress.split("@@i") else interface = 0 end if remoteAddress.downcase =~ /^fe80/ remoteAddress = "%s%%%s" % [remoteAddress, interface] end sock = TCPSocket.new(remoteAddress, port) end @readstream = AsyncFile.new(sock, "r", "stdin") @writestream = AsyncFile.new(sock, "w", "stdout") @errorstream = AsyncFile.new(sock, "w", "stderr") if redirect $stdin = @readstream $stdout = @writestream $stderr = @errorstream end end def progTerminated(status) =begin edoc Private method to tell the debugger that the program has terminated. @param status the return status =end if status == nil status = 0 else begin Integer(status) rescue status = 1 end end set_trace_func(nil) @running = nil write("%s%d\n" % [ResponseExit, status]) end def dumpVariables(frmnr, scope, filter) =begin edoc Private method to return the variables of a frame to the debug server. @param frmnr distance of frame reported on. 0 is the current frame (int) @param scope 1 to report global variables, 0 for local variables (int) @param filter the indices of variable types to be filtered (list of int) =end if $debugging if scope == 0 @framenr = frmnr end binding_, file, line, id = DEBUGGER__.context(DEBUGGER__.last_thread)\ .get_frame(frmnr) else binding_ = @frames[frmnr] end varlist = [scope] if scope >= 1 # dump global variables vlist = formatVariablesList(global_variables, binding_, scope, filter) elsif scope == 0 # dump local variables vlist = formatVariablesList(eval("local_variables", binding_), binding_, scope, filter) end varlist.concat(vlist) write("%s%s\n" % [ResponseVariables, varlist.inspect]) end def dumpVariable(var, frmnr, scope, filter) =begin edoc Private method to return the variables of a frame to the debug server. @param var list encoded name of the requested variable (list of strings) @param frmnr distance of frame reported on. 0 is the current frame (int) @param scope 1 to report global variables, 0 for local variables (int) @param filter the indices of variable types to be filtered (list of int) =end if $debugging binding_, file, line, id = DEBUGGER__.context(DEBUGGER__.last_thread)\ .get_frame(frmnr) else binding_ = @frames[frmnr] end varlist = [scope, var] i = 0 obj = nil keylist = nil formatSequences = false access = "" isDict = false while i < var.length if ["[]", "{}"].include?(var[i][-2..-1]) if i+1 == var.length keylist = [var[i][0..-3]] formatSequences = true if access.length == 0 access = "#{var[i][0..-3]}" else access << "[#{var[i][0..-3]}]" end if var[i][-2..-1] == "{}" isDict = true end break else if access.length == 0 access = "#{var[i][0..-3]}" else access << "[#{var[i][0..-3]}]" end end else if access.length != 0 access << "[#{var[i]}]" obj = eval(access, binding_) binding_ = obj.instance_eval{binding()} access = "" else obj = eval(var[i], binding_) binding_ = obj.instance_eval{binding()} end end i += 1 end if formatSequences bind = binding_ else bind = obj.instance_eval{binding()} end if not keylist keylist = obj.instance_variables access = nil else if access.length != 0 obj = eval(access, bind) end if isDict keylist = obj.keys() else keylist = Array.new(obj.length){|i| i} end end vlist = formatVariablesList(keylist, bind, scope, filter, excludeSelf=true, access=access) varlist.concat(vlist) write("%s%s\n" % [ResponseVariable, varlist.inspect]) end def formatVariablesList(keylist, binding_, scope, filter = [], excludeSelf = false, access = nil) =begin edoc Private method to produce a formated variables list. The binding passed in to it is scanned. Variables are only added to the list, if their type is not contained in the filter list and their name doesn't match any of the filter expressions. The formated variables list (a list of lists of 3 values) is returned. @param keylist keys of the dictionary @param binding_ the binding to be scanned @param scope 1 to filter using the globals filter, 0 using the locals filter (int). Variables are only added to the list, if their name do not match any of the filter expressions. @param filter the indices of variable types to be filtered. Variables are only added to the list, if their type is not contained in the filter list. @param excludeSelf flag indicating if the self object should be excluded from the listing (boolean) @param access String specifying the access path to (String) @return A list consisting of a list of formatted variables. Each variable entry is a list of three elements, the variable name, its type and value. =end varlist = [] if scope >= 1 patternFilterObjects = @globalsFilterObjects else patternFilterObjects = @localsFilterObjects begin obj = eval("self", binding_) rescue StandardError, ScriptError obj = nil end if not excludeSelf and obj.class != Object keylist << "self" end end keylist.each do |key| # filter based on the filter pattern matched = false patternFilterObjects.each do |pat| if pat.match(key) matched = true break end end next if matched begin if access if key.to_s == key key = "'%s'" % key else key = key.to_s end k = "#{access}[%s]" % key obj = eval(k, binding_) else obj = eval(key, binding_) end rescue NameError next end if obj or obj.class == NilClass or obj.class == FalseClass otype = obj.class.to_s if obj.inspect.nil? otype = "" oval = "" else oval = obj.inspect.gsub(/=>/,":") end else otype = "" oval = obj.inspect end next if inFilter?(filter, otype, oval) if oval.index("#<") == 0 addr = extractAddress(oval) oval = "<#{otype} object at #{addr}>" end if obj if obj.class == Array or obj.class == Hash oval = "%d" % obj.length() end end varlist << [key, otype, oval] end return varlist end def extractAddress(var) =begin edoc Private method to extract the address part of an object description. @param var object description (String) @return the address contained in the object description (String) =end m = var.match(/^#<.*?:([^:]*?) /) if m return m[1] else return "" end end def extractTypeAndAddress(var) =begin edoc Private method to extract the address and type parts of an object description. @param var object description (String) @return list containing the type and address contained in the object description (Array of two String) =end m = var.match(/^#<(.*?):(.*?) /) if m return [m[1], m[2]] else return ["", ""] end end def inFilter?(filter, otype, oval) =begin edoc Private method to check, if a variable is to be filtered based on its type. @param filter the indices of variable types to be filtered (Array of int. @param otype type of the variable to be checked (String) @param oval variable value to be checked (String) @return flag indicating, whether the variable should be filtered (boolean) =end cindex = ConfigVarTypeStrings.index(otype) if cindex == nil if oval.index("#<") == 0 if filter.include?(ConfigVarTypeStrings.index("instance")) return true else return false end elsif ['FalseClass', 'TrueClass'].include?(otype) if filter.include?(ConfigVarTypeStrings.index("bool")) return true else return false end else if filter.include?(ConfigVarTypeStrings.index("other")) return true else return false end end end if filter.include?(cindex) return true end return false end def generateFilterObjects(scope, filterString) =begin edoc Private method to convert a filter string to a list of filter objects. @param scope 1 to generate filter for global variables, 0 for local variables (int) @param filterString string of filter patterns separated by ';' =end patternFilterObjects = [] for pattern in filterString.split(';') patternFilterObjects << Regexp.compile('^%s$' % pattern) end if scope == 1 @globalsFilterObjects = patternFilterObjects[0..-1] else @localsFilterObjects = patternFilterObjects[0..-1] end end def completionList(text) =begin edoc Method used to handle the command completion request @param text the text to be completed (string) =end completions = @completer.complete(text).compact.sort.uniq write("%s%s||%s\n" % [ResponseCompletion, completions.inspect, text]) end def startProgInDebugger(progargs, wd = '', host = nil, port = nil, exceptions = true, traceRuby = false, redirect=true) =begin edoc Method used to start the remote debugger. @param progargs commandline for the program to be debugged (list of strings) @param wd working directory for the program execution (string) @param host hostname of the debug server (string) @param port portnumber of the debug server (int) @param exceptions flag to enable exception reporting of the IDE (boolean) @param traceRuby flag to enable tracing into the Ruby library @param redirect flag indicating redirection of stdin, stdout and stderr (boolean) =end $debugging = true if host == nil host = ENV.fetch('ERICHOST', 'localhost') end if port == nil port = ENV.fetch('ERICPORT', 42424) end connectDebugger(port, host, redirect) #TCPSocket.gethostbyname(host)[3]) DEBUGGER__.attach(self) @traceRuby = traceRuby fn = progargs.shift fn = File.expand_path(fn) ARGV.clear() ARGV.concat(progargs) $:.insert(0, File.dirname(fn)) if wd == '' Dir.chdir($:[0]) else Dir.chdir(wd) end @running = fn @passive = true write("%s%s|%d\n" % [PassiveStartup, @running, exceptions ? 1 : 0]) interact() command = "$0 = '%s'; require '%s'" % [fn, fn] set_trace_func proc { |event, file, line, id, binding_, klass, *rest| DEBUGGER__.context.trace_func(event, file, line, id, binding_, klass) } begin eval(command, @debugBinding) rescue DebugQuit # just ignore it rescue Exception => exc unhandled_exception(exc) ensure set_trace_func(nil) @running = nil end # just a short delay because client might shut down too quickly otherwise sleep(1) end def main =begin edoc Public method implementing the main method. =end if ARGV.include?('--') args = ARGV[0..-1] host = nil port = nil wd = '' traceRuby = false exceptions = true redirect = true while args[0] if args[0] == '-h' host = args[1] args.shift args.shift elsif args[0] == '-p' port = args[1] args.shift args.shift elsif args[0] == '-w' wd = args[1] args.shift args.shift elsif args[0] == '-t' traceRuby = true args.shift elsif args[0] == '-e' exceptions = false args.shift elsif args[0] == '-n' redirect = false args.shift elsif args[0] == '--' args.shift break else # unknown option args.shift end end if args.length == 0 STDOUT << "No program given. Aborting!" else startProgInDebugger(args, wd, host, port, exceptions = exceptions, traceRuby = traceRuby, redirect = redirect) end else if ARGV[0] == '--no-encoding' # just ignore it, it's here to be compatible with python debugger ARGV.shift end begin port = ARGV[0].to_i rescue port = -1 end begin redirect = ARGV[1].to_i redirect = redirect == 1 ? true : false rescue redirect = true end begin remoteAddress = ARGV[2] rescue remoteAddress = nil end ARGV.clear() $:.insert(0,"") if port >= 0 connectDebugger(port, remoteAddress, redirect) DEBUGGER__.attach(self) interact() end end end end eric4-4.5.18/eric/DebugClients/Ruby/PaxHeaders.8617/Debuggee.rb0000644000175000001440000000013212261012653022034 xustar000000000000000030 mtime=1388582315.067115922 30 atime=1389081085.510724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/DebugClients/Ruby/Debuggee.rb0000644000175000001440000010037612261012653021575 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2005 - 2014 Detlev Offenbach # # Debuggee.rb is based in parts on debug.rb from Ruby and debuggee.rb. # Original copyrights of these files follow below. # # debug.rb # Copyright (C) 2000 Network Applied Communication Laboratory, Inc. # Copyright (C) 2000 Information-technology Promotion Agency, Japan # # debuggee.rb # Copyright (c) 2000 NAKAMURA, Hiroshi =begin edoc File implementing the real debugger, which is connected to the IDE frontend. =end require 'DebugQuit' require 'rbconfig' class DEBUGGER__ =begin edoc Class implementing the real debugger. =end class Mutex =begin edoc Class implementing a mutex. =end def initialize =begin edoc Constructor =end @locker = nil @waiting = [] @locked = false; end def locked? =begin edoc Method returning the locked state. @return flag indicating the locked state (boolean) =end @locked end def lock =begin edoc Method to lock the mutex. @return the mutex =end return if @locker == Thread.current while (Thread.critical = true; @locked) @waiting.push Thread.current Thread.stop end @locked = true @locker = Thread.current Thread.critical = false self end def unlock =begin edoc Method to unlock the mutex. @return the mutex =end return unless @locked unless @locker == Thread.current raise RuntimeError, "unlocked by other" end Thread.critical = true t = @waiting.shift @locked = false @locker = nil Thread.critical = false t.run if t self end end MUTEX = Mutex.new class Context =begin edoc Class defining the current execution context. =end def initialize =begin edoc Constructor =end if Thread.current == Thread.main @stop_next = 1 else @stop_next = 0 end @last_file = nil @file = nil @line = nil @no_step = nil @frames = [] @frame_pos = 0 #LJ - for FR @finish_pos = 0 @trace = false @catch = ["StandardError"] #LJ - for FR @suspend_next = false end def stop_next(n=1) =begin edoc Method to set the next stop point (i.e. stop at next line). @param counter defining the stop point (int) =end @stop_next = n end def step_over(n=1) =begin edoc Method to set the next stop point skipping function calls. @param counter defining the stop point (int) =end @stop_next = n @no_step = @frames.size - @frame_pos end def step_out =begin edoc Method to set the next stop point after the function call returns. =end if @frame_pos != @frames.size @finish_pos = @frames.size - @frame_pos @frame_pos = 0 @stop_next -= 1 end end def step_continue =begin edoc Method to continue execution until next breakpoint or watch expression. =end @stop_next = 1 @no_step = -1 end def step_quit =begin edoc Method to stop debugging. =end raise DebugQuit.new end def set_suspend =begin edoc Method to suspend all threads. =end @suspend_next = true end def clear_suspend =begin edoc Method to clear the suspend state. =end @suspend_next = false end def suspend_all =begin edoc Method to suspend all threads. =end DEBUGGER__.suspend end def resume_all =begin edoc Method to resume all threads. =end DEBUGGER__.resume end def check_suspend =begin edoc Method to check the suspend state. =end while (Thread.critical = true; @suspend_next) DEBUGGER__.waiting.push Thread.current @suspend_next = false Thread.stop end Thread.critical = false end def stdout =begin edoc Method returning the stdout object. @return reference to the stdout object =end DEBUGGER__.stdout end def break_points =begin edoc Method to return the list of breakpoints @return Array containing all breakpoints. =end DEBUGGER__.break_points end def context(th) =begin edoc Method returning the context of a thread. @param th thread object to get the context for @return the context for the thread =end DEBUGGER__.context(th) end def attached? =begin edoc Method returning the attached state. @return flag indicating, whether the debugger is attached to the IDE. =end DEBUGGER__.attached? end def set_last_thread(th) =begin edoc Method to remember the last thread. @param th thread to be remembered. =end DEBUGGER__.set_last_thread(th) end def debug_silent_eval(str, binding_) =begin edoc Method to eval a string without output. @param str String containing the expression to be evaluated @param binding_ the binding for the evaluation @return the result of the evaluation =end val = eval(str, binding_) val end def thnum =begin edoc Method returning the thread number of the current thread. @return thread number of the current thread. =end num = DEBUGGER__.instance_eval{@thread_list[Thread.current]} unless num DEBUGGER__.make_thread_list num = DEBUGGER__.instance_eval{@thread_list[Thread.current]} end num end def debug_command(file, line, id, binding_) =begin edoc Method to execute the next debug command. =end MUTEX.lock set_last_thread(Thread.current) unless attached? MUTEX.unlock resume_all return end @frame_pos = 0 @frames[0] = [binding_, file, line, id] stdout.printf_line(@frames) MUTEX.unlock resume_all eventLoop end def frame_set_pos(file, line) =begin edoc Method to set the frame position of the current frame. =end if @frames[0] @frames[0][1] = file @frames[0][2] = line end end def check_break_points(file, pos, binding_, id) =begin edoc Method to check, if the given position contains an active breakpoint. @param file filename containing the currently executed line (String) @param pos line number currently executed (int) @param binding_ current binding object @param id (ignored) @return flag indicating an active breakpoint (boolean) =end # bp[0] enabled flag # bp[1] 0 = breakpoint, 1 = watch expression # bp[2] filename # bp[3] linenumber # bp[4] temporary flag # bp[5] condition # bp[6] ignore count # bp[7] special condition # bp[8] hash of special values return false if break_points.empty? for b in break_points if b[0] if b[1] == 0 and b[2] == file and b[3] == pos # breakpoint # Evaluate condition if b[5] begin if debug_silent_eval(b[5], binding_) if b[6] == 0 # ignore count reached # Delete once reached if temporary breakpoint clear_break_point(file, pos) if b[4] return true else b[6] -= 1 end end rescue StandardError, ScriptError nil end else if b[6] == 0 # ignore count reached # Delete once reached if temporary breakpoint clear_break_point(file, pos) if b[4] return true else b[6] -= 1 end end elsif b[1] == 1 # watch expression begin bd = @frame_pos val = debug_silent_eval(b[5], binding_) if b[7].length() > 0 if b[7] == "??created??" if b[8][bd][0] == false b[8][bd][0] = true b[8][bd][1] = val return true else next end end b[8][bd][0] = true if b[7] == "??changed??" if b[8][bd][1] != val b[8][bd][1] = val if b[8][bd][2] > 0 b[8][bd][2] -= 1 next else return true end else next end end next end if val if b[6] == 0 # ignore count reached # Delete once reached if temporary breakpoint clear_watch_point(b[2]) if b[4] return true else b[6] -= 1 end end rescue StandardError, ScriptError if b[7].length() > 0 if b[8][bd] b[8][bd][0] = false else b[8][bd] = [false, nil, b[6]] end else val = nil end end end end end return false end def clear_break_point(file, pos) =begin edoc Method to delete a specific breakpoint. @param file filename containing the breakpoint (String) @param pos line number containing the breakpoint (int) =end delete_break_point(file, pos) stdout.printf_clear_breakpoint(file, pos) end def add_break_point(file, pos, temp = false, cond = nil) =begin edoc Method to add a breakpoint. @param file filename for the breakpoint (String) @param pos line number for the breakpoint (int) @param temp flag indicating a temporary breakpoint (boolean) @param cond condition of a conditional breakpoint (String) =end break_points.push [true, 0, file, pos, temp, cond, 0] end def delete_break_point(file, pos) =begin edoc Method to delete a breakpoint. @param file filename of the breakpoint (String) @param pos line number of the breakpoint (int) =end break_points.delete_if { |bp| bp[1] == 0 and bp[2] == file and bp[3] == pos } end def enable_break_point(file, pos, enable) =begin edoc Method to set the enabled state of a breakpoint. @param file filename of the breakpoint (String) @param pos line number of the breakpoint (int) @param enable flag indicating the new enabled state (boolean) =end for bp in break_points if (bp[1] == 0 and bp[2] == file and bp[3] == pos) bp[0] = enable break end end end def ignore_break_point(file, pos, count) =begin edoc Method to set the ignore count of a breakpoint. @param file filename of the breakpoint (String) @param pos line number of the breakpoint (int) @param count ignore count to be set (int) =end for bp in break_points if (bp[2] == file and bp[3] == pos) bp[6] = count break end end end def clear_watch_point(cond) =begin edoc Method to delete a specific watch expression. @param cond expression specifying the watch expression (String) =end delete_watch_point(cond) stdout.printf_clear_watchexpression(cond) end def add_watch_point(cond, temp = false) =begin edoc Method to add a watch expression. @param cond expression of the watch expression (String) @param temp flag indicating a temporary watch expression (boolean) =end co1, co2 = cond.split() if co2 == "??created??" or co2 == "??changed??" break_points.push [true, 1, cond, 0, temp, co1, 0, co2, {}] else break_points.push [true, 1, cond, 0, temp, cond, 0, "", {}] end end def delete_watch_point(cond) =begin edoc Method to delete a watch expression. @param cond expression of the watch expression (String) =end break_points.delete_if { |bp| bp[1] == 1 and bp[2] == cond } end def enable_watch_point(cond, enable) =begin edoc Method to set the enabled state of a watch expression. @param cond expression of the watch expression (String) @param enable flag indicating the new enabled state (boolean) =end for bp in break_points if (bp[1] == 1 and bp[2] == cond) bp[0] = enable break end end end def ignore_watch_point(cond, count) =begin edoc Method to set the ignore count of a watch expression. @param cond expression of the watch expression (String) @param count ignore count to be set (int) =end for bp in break_points if (bp[1] == 1 and bp[2] == cond) bp[6] = count break end end end def excn_handle(file, line, id, binding_) =begin edoc Method to handle an exception @param file filename containing the currently executed line (String) @param pos line number currently executed (int) @param id (ignored) @param binding_ current binding object =end if $!.class <= SystemExit set_trace_func nil stdout.printf_exit($!.status) return elsif $!.class <= ScriptError msgParts = $!.message.split(":", 3) filename = File.expand_path(msgParts[0]) linenr = msgParts[1].to_i exclist = ["", [filename, linenr, 0]] stdout.printf_scriptExcn(exclist) else exclist = ["%s" % $!.class, "%s" % $!, [file, line]] @frames.each do |_binding, _file, _line, _id| next if [_file, _line] == exclist[-1] exclist << [_file, _line] end stdout.printf_excn(exclist) end debug_command(file, line, id, binding_) end def skip_it?(file) =begin edoc Method to filter out debugger files. Tracing is turned off for files that are part of the debugger that are called from the application being debugged. @param file name of the file to be checked (String) @return flag indicating, whether the file should be skipped (boolean) =end if file =~ /\(eval\)/ return true end if not traceRuby? and (file =~ /#{Config::CONFIG['sitelibdir']}/ or file =~ /#{Config::CONFIG['rubylibdir']}/) return true end if ["AsyncFile.rb", "AsyncIO.rb", "Config.rb", "DebugClient.rb", "DebugClientBaseModule.rb", "DebugClientCapabilities.rb", "DebugProtocol.rb", "DebugQuit.rb", "Debuggee.rb"].include?(\ File.basename(file)) return true end return false end def trace_func(event, file, line, id, binding_, klass) =begin edoc Method executed by the tracing facility. @param event the tracing event (String) @param file the name of the file being traced (String) @param line the line number being traced (int) @param id object id @param binding_ a binding object @param klass name of a class =end context(Thread.current).check_suspend if skip_it?(file) and not ["call","return"].include?(event) case event when 'line' frame_set_pos(file, line) when 'call' @frames.unshift [binding_, file, line, id] when 'c-call' frame_set_pos(file, line) when 'class' @frames.unshift [binding_, file, line, id] when 'return', 'end' @frames.shift when 'end' @frames.shift when 'raise' excn_handle(file, line, id, binding_) end @last_file = file return end @file = file @line = line case event when 'line' frame_set_pos(file, line) eventPoll if !@no_step or @frames.size == @no_step @stop_next -= 1 @stop_next = -1 if @stop_next < 0 elsif @frames.size < @no_step @stop_next = 0 # break here before leaving... else # nothing to do. skipped. end if check_break_points(file, line, binding_, id) or @stop_next == 0 @no_step = nil suspend_all debug_command(file, line, id, binding_) end when 'call' @frames.unshift [binding_, file, line, id] if check_break_points(file, id.id2name, binding_, id) or check_break_points(klass.to_s, id.id2name, binding_, id) suspend_all debug_command(file, line, id, binding_) end when 'c-call' frame_set_pos(file, line) if id == :require and klass == Kernel @frames.unshift [binding_, file, line, id] else frame_set_pos(file, line) end when 'c-return' if id == :require and klass == Kernel if @frames.size == @finish_pos @stop_next = 1 @finish_pos = 0 end @frames.shift end when 'class' @frames.unshift [binding_, file, line, id] when 'return', 'end' if @frames.size == @finish_pos @stop_next = 1 @finish_pos = 0 end @frames.shift when 'end' @frames.shift when 'raise' @no_step = nil @stop_next = 0 # break here before leaving... excn_handle(file, line, id, binding_) end @last_file = file end end trap("INT") { DEBUGGER__.interrupt } @last_thread = Thread::main @max_thread = 1 @thread_list = {Thread::main => 1} @break_points = [] @waiting = [] @stdout = STDOUT @loaded_files = {} class SilentObject =begin edoc Class defining an object that ignores all messages. =end def method_missing( msg_id, *a, &b ) =begin edoc Method invoked for all messages it cannot handle. @param msg_id symbol for the method called @param *a arguments passed to the missing method @param &b unknown =end end end SilentClient = SilentObject.new() @client = SilentClient @attached = false class < # """ Parse a Ruby file and retrieve classes, modules, methods and attributes. Parse enough of a Ruby file to recognize class, module and method definitions and to find out the superclasses of a class as well as its attributes. It is based on the Python class browser found in this package. """ import sys import os import re import Utilities import Utilities.ClassBrowsers as ClassBrowsers import ClbrBaseClasses SUPPORTED_TYPES = [ClassBrowsers.RB_SOURCE] _getnext = re.compile(r""" (?P =begin .*? =end | <<-? (?P [a-zA-Z0-9_]+? ) [ \t]* .*? (?P=HereMarker1) | <<-? ['"] (?P [^'"]+? ) ['"] [ \t]* .*? (?P=HereMarker2) | " [^"\\\n]* (?: \\. [^"\\\n]*)* " | ' [^'\\\n]* (?: \\. [^'\\\n]*)* ' ) | (?P ^ \# \s* [*_-]* \s* coding[:=] \s* (?P [-\w_.]+ ) \s* [*_-]* $ ) | (?P ^ [ \t]* \#+ .*? $ ) | (?P ^ (?P [ \t]* ) def [ \t]+ (?: (?P [a-zA-Z0-9_]+ (?: \. | :: ) [a-zA-Z_] [a-zA-Z0-9_?!=]* ) | (?P [a-zA-Z_] [a-zA-Z0-9_?!=]* ) | (?P [^( \t]{1,3} ) ) [ \t]* (?: \( (?P (?: [^)] | \)[ \t]*,? )*? ) \) )? [ \t]* ) | (?P ^ (?P [ \t]* ) class (?: [ \t]+ (?P [A-Z] [a-zA-Z0-9_]* ) [ \t]* (?P < [ \t]* [A-Z] [a-zA-Z0-9_:]* )? | [ \t]* << [ \t]* (?P [a-zA-Z_] [a-zA-Z0-9_:]* ) ) [ \t]* ) | (?P \( [ \t]* class .*? end [ \t]* \) ) | (?P ^ (?P [ \t]* ) module [ \t]+ (?P [A-Z] [a-zA-Z0-9_:]* ) [ \t]* ) | (?P ^ (?P [ \t]* ) (?: (?P private | public | protected ) [^_] | (?P private_class_method | public_class_method ) ) \(? [ \t]* (?P (?: : [a-zA-Z0-9_]+ , \s* )* (?: : [a-zA-Z0-9_]+ )+ )? [ \t]* \)? ) | (?P ^ (?P [ \t]* ) (?P (?: @ | @@ ) [a-zA-Z0-9_]* ) [ \t]* = ) | (?P ^ (?P [ \t]* ) attr (?P (?: _accessor | _reader | _writer ) )? \(? [ \t]* (?P (?: : [a-zA-Z0-9_]+ , \s* )* (?: : [a-zA-Z0-9_]+ | true | false )+ ) [ \t]* \)? ) | (?P ^ [ \t]* (?: def | if | unless | case | while | until | for | begin ) \b [^_] | [ \t]* do [ \t]* (?: \| .*? \| )? [ \t]* $ ) | (?P \b (?: if ) \b [^_] .*? $ | \b (?: if ) \b [^_] .*? end [ \t]* $ ) | (?P [ \t]* (?: end [ \t]* $ | end \b [^_] ) ) """, re.VERBOSE | re.DOTALL | re.MULTILINE).search _commentsub = re.compile(r"""#[^\n]*\n|#[^\n]*$""").sub _modules = {} # cache of modules we've seen class VisibilityMixin(ClbrBaseClasses.ClbrVisibilityMixinBase): """ Mixin class implementing the notion of visibility. """ def __init__(self): """ Method to initialize the visibility. """ self.setPublic() class Class(ClbrBaseClasses.Class, VisibilityMixin): """ Class to represent a Ruby class. """ def __init__(self, module, name, super, file, lineno): """ Constructor @param module name of the module containing this class @param name name of this class @param super list of class names this class is inherited from @param file filename containing this class @param lineno linenumber of the class definition """ ClbrBaseClasses.Class.__init__(self, module, name, super, file, lineno) VisibilityMixin.__init__(self) class Module(ClbrBaseClasses.Module, VisibilityMixin): """ Class to represent a Ruby module. """ def __init__(self, module, name, file, lineno): """ Constructor @param module name of the module containing this class @param name name of this class @param file filename containing this class @param lineno linenumber of the class definition """ ClbrBaseClasses.Module.__init__(self, module, name, file, lineno) VisibilityMixin.__init__(self) class Function(ClbrBaseClasses.Function, VisibilityMixin): """ Class to represent a Ruby function. """ def __init__(self, module, name, file, lineno, signature = '', separator = ','): """ Constructor @param module name of the module containing this function @param name name of this function @param file filename containing this class @param lineno linenumber of the class definition @param signature parameterlist of the method @param separator string separating the parameters """ ClbrBaseClasses.Function.__init__(self, module, name, file, lineno, signature, separator) VisibilityMixin.__init__(self) class Attribute(ClbrBaseClasses.Attribute, VisibilityMixin): """ Class to represent a class or module attribute. """ def __init__(self, module, name, file, lineno): """ Constructor @param module name of the module containing this class @param name name of this class @param file filename containing this attribute @param lineno linenumber of the class definition """ ClbrBaseClasses.Attribute.__init__(self, module, name, file, lineno) VisibilityMixin.__init__(self) self.setPrivate() def readmodule_ex(module, path=[]): ''' Read a Ruby file and return a dictionary of classes, functions and modules. @param module name of the Ruby file (string) @param path path the file should be searched in (list of strings) @return the resulting dictionary ''' dict = {} dict_counts = {} if _modules.has_key(module): # we've seen this file before... return _modules[module] # search the path for the file f = None fullpath = list(path) f, file, (suff, mode, type) = ClassBrowsers.find_module(module, fullpath) if type not in SUPPORTED_TYPES: # not Ruby source, can't do anything with this module f.close() _modules[module] = dict return dict _modules[module] = dict classstack = [] # stack of (class, indent) pairs acstack = [] # stack of (access control, indent) pairs indent = 0 src = Utilities.decode(f.read())[0] f.close() lineno, last_lineno_pos = 1, 0 i = 0 while 1: m = _getnext(src, i) if not m: break start, i = m.span() if m.start("Method") >= 0: # found a method definition or function thisindent = indent indent += 1 meth_name = m.group("MethodName") or \ m.group("MethodName2") or \ m.group("MethodName3") meth_sig = m.group("MethodSignature") meth_sig = meth_sig and meth_sig.replace('\\\n', '') or '' meth_sig = _commentsub('', meth_sig) lineno = lineno + src.count('\n', last_lineno_pos, start) last_lineno_pos = start if meth_name.startswith('self.'): meth_name = meth_name[5:] elif meth_name.startswith('self::'): meth_name = meth_name[6:] # close all classes/modules indented at least as much while classstack and \ classstack[-1][1] >= thisindent: del classstack[-1] while acstack and \ acstack[-1][1] >= thisindent: del acstack[-1] if classstack: # it's a class/module method cur_class = classstack[-1][0] if isinstance(cur_class, Class) or isinstance(cur_class, Module): # it's a method f = Function(None, meth_name, file, lineno, meth_sig) cur_class._addmethod(meth_name, f) else: f = cur_class # set access control if acstack: accesscontrol = acstack[-1][0] if accesscontrol == "private": f.setPrivate() elif accesscontrol == "protected": f.setProtected() elif accesscontrol == "public": f.setPublic() # else it's a nested def else: # it's a function f = Function(module, meth_name, file, lineno, meth_sig) if dict_counts.has_key(meth_name): dict_counts[meth_name] += 1 meth_name = "%s_%d" % (meth_name, dict_counts[meth_name]) else: dict_counts[meth_name] = 0 dict[meth_name] = f classstack.append((f, thisindent)) # Marker for nested fns elif m.start("String") >= 0: pass elif m.start("Comment") >= 0: pass elif m.start("ClassIgnored") >= 0: pass elif m.start("Class") >= 0: # we found a class definition thisindent = indent indent += 1 # close all classes/modules indented at least as much while classstack and \ classstack[-1][1] >= thisindent: del classstack[-1] lineno = lineno + src.count('\n', last_lineno_pos, start) last_lineno_pos = start class_name = m.group("ClassName") or m.group("ClassName2") inherit = m.group("ClassSupers") if inherit: # the class inherits from other classes inherit = inherit[1:].strip() inherit = [_commentsub('', inherit)] # remember this class cur_class = Class(module, class_name, inherit, file, lineno) if not classstack: if dict.has_key(class_name): cur_class = dict[class_name] else: dict[class_name] = cur_class else: cls = classstack[-1][0] if cls.classes.has_key(class_name): cur_class = cls.classes[class_name] elif cls.name == class_name or class_name == "self": cur_class = cls else: cls._addclass(class_name, cur_class) classstack.append((cur_class, thisindent)) while acstack and \ acstack[-1][1] >= thisindent: del acstack[-1] acstack.append(["public", thisindent]) # default access control is 'public' elif m.start("Module") >= 0: # we found a module definition thisindent = indent indent += 1 # close all classes/modules indented at least as much while classstack and \ classstack[-1][1] >= thisindent: del classstack[-1] lineno = lineno + src.count('\n', last_lineno_pos, start) last_lineno_pos = start module_name = m.group("ModuleName") # remember this class cur_class = Module(module, module_name, file, lineno) if not classstack: if dict.has_key(module_name): cur_class = dict[module_name] else: dict[module_name] = cur_class else: cls = classstack[-1][0] if cls.classes.has_key(module_name): cur_class = cls.classes[module_name] elif cls.name == module_name: cur_class = cls else: cls._addclass(module_name, cur_class) classstack.append((cur_class, thisindent)) while acstack and \ acstack[-1][1] >= thisindent: del acstack[-1] acstack.append(["public", thisindent]) # default access control is 'public' elif m.start("AccessControl") >= 0: aclist = m.group("AccessControlList") if aclist is None: index = -1 while index >= -len(acstack): if acstack[index][1] < indent: actype = m.group("AccessControlType") or \ m.group("AccessControlType2").split('_')[0] acstack[index][0] = actype.lower() break else: index -= 1 else: index = -1 while index >= -len(classstack): if classstack[index][0] is not None and \ not isinstance(classstack[index][0], Function) and \ not classstack[index][1] >= indent: parent = classstack[index][0] actype = m.group("AccessControlType") or \ m.group("AccessControlType2").split('_')[0] actype = actype.lower() for name in aclist.split(","): name = name.strip()[1:] # get rid of leading ':' acmeth = parent._getmethod(name) if acmeth is None: continue if actype == "private": acmeth.setPrivate() elif actype == "protected": acmeth.setProtected() elif actype == "public": acmeth.setPublic() break else: index -= 1 elif m.start("Attribute") >= 0: lineno = lineno + src.count('\n', last_lineno_pos, start) last_lineno_pos = start index = -1 while index >= -len(classstack): if classstack[index][0] is not None and \ not isinstance(classstack[index][0], Function) and \ not classstack[index][1] >= indent: attr = Attribute(module, m.group("AttributeName"), file, lineno) classstack[index][0]._addattribute(attr) break else: index -= 1 elif m.start("Attr") >= 0: lineno = lineno + src.count('\n', last_lineno_pos, start) last_lineno_pos = start index = -1 while index >= -len(classstack): if classstack[index][0] is not None and \ not isinstance(classstack[index][0], Function) and \ not classstack[index][1] >= indent: parent = classstack[index][0] if m.group("AttrType") is None: nv = m.group("AttrList").split(",") if not nv: break name = nv[0].strip()[1:] # get rid of leading ':' attr = parent._getattribute("@"+name) or \ parent._getattribute("@@"+name) or \ Attribute(module, "@"+name, file, lineno) if len(nv) == 1 or nv[1].strip() == "false": attr.setProtected() elif nv[1].strip() == "true": attr.setPublic() parent._addattribute(attr) else: access = m.group("AttrType") for name in m.group("AttrList").split(","): name = name.strip()[1:] # get rid of leading ':' attr = parent._getattribute("@"+name) or \ parent._getattribute("@@"+name) or \ Attribute(module, "@"+name, file, lineno) if access == "_accessor": attr.setPublic() elif access == "_reader" or access == "_writer": if attr.isPrivate(): attr.setProtected() elif attr.isProtected(): attr.setPublic() parent._addattribute(attr) break else: index -= 1 elif m.start("Begin") >= 0: # a begin of a block we are not interested in indent += 1 elif m.start("End") >= 0: # an end of a block indent -= 1 if indent < 0: # no negative indent allowed if classstack: # it's a class/module method indent = classstack[-1][1] else: indent = 0 elif m.start("BeginEnd") >= 0: pass elif m.start("CodingLine") >= 0: # a coding statement coding = m.group("Coding") lineno = lineno + src.count('\n', last_lineno_pos, start) last_lineno_pos = start if not dict.has_key("@@Coding@@"): dict["@@Coding@@"] = ClbrBaseClasses.Coding(module, file, lineno, coding) else: assert 0, "regexp _getnext found something unexpected" return dict eric4-4.5.18/eric/Utilities/ClassBrowsers/PaxHeaders.8617/__init__.py0000644000175000001440000000013212261012652023366 xustar000000000000000030 mtime=1388582314.060103192 30 atime=1389081085.510724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/Utilities/ClassBrowsers/__init__.py0000644000175000001440000000766712261012652023140 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2005 - 2014 Detlev Offenbach # """ Package implementing class browsers for various languages. Currently it offers class browser support for the following programming languages.
    • CORBA IDL
    • Python
    • Ruby
    """ import os import imp import Preferences PY_SOURCE = imp.PY_SOURCE PTL_SOURCE = 128 RB_SOURCE = 129 IDL_SOURCE = 130 SUPPORTED_TYPES = [PY_SOURCE, PTL_SOURCE, RB_SOURCE, IDL_SOURCE] __extensions = { "IDL" : [".idl"], "Python" : [".py", ".pyw", ".ptl"], "Ruby" : [".rb"], } def readmodule(module, path=[], isPyFile = False): ''' Read a source file and return a dictionary of classes, functions, modules, etc. . The real work of parsing the source file is delegated to the individual file parsers. @param module name of the source file (string) @param path path the file should be searched in (list of strings) @return the resulting dictionary ''' ext = os.path.splitext(module)[1].lower() if ext in __extensions["IDL"]: import idlclbr dict = idlclbr.readmodule_ex(module, path) idlclbr._modules.clear() elif ext in __extensions["Ruby"]: import rbclbr dict = rbclbr.readmodule_ex(module, path) rbclbr._modules.clear() elif ext in Preferences.getPython("PythonExtensions") or \ ext in Preferences.getPython("Python3Extensions") or \ isPyFile: import pyclbr dict = pyclbr.readmodule_ex(module, path, isPyFile = isPyFile) pyclbr._modules.clear() else: # try Python if it is without extension import pyclbr dict = pyclbr.readmodule_ex(module, path) pyclbr._modules.clear() return dict def find_module(name, path, isPyFile = False): """ Module function to extend the Python module finding mechanism. This function searches for files in the given path. If the filename doesn't have an extension or an extension of .py, the normal search implemented in the imp module is used. For all other supported files only path is searched. @param name filename or modulename to search for (string) @param path search path (list of strings) @return tuple of the open file, pathname and description. Description is a tuple of file suffix, file mode and file type) @exception ImportError The file or module wasn't found. """ ext = os.path.splitext(name)[1].lower() if ext in __extensions["Ruby"]: for p in path: # only search in path pathname = os.path.join(p, name) if os.path.exists(pathname): return (open(pathname), pathname, (ext, 'r', RB_SOURCE)) raise ImportError elif ext in __extensions["IDL"]: for p in path: # only search in path pathname = os.path.join(p, name) if os.path.exists(pathname): return (open(pathname), pathname, (ext, 'r', IDL_SOURCE)) raise ImportError elif ext == '.ptl': for p in path: # only search in path pathname = os.path.join(p, name) if os.path.exists(pathname): return (open(pathname), pathname, (ext, 'r', PTL_SOURCE)) raise ImportError if name.lower().endswith('.py'): name = name[:-3] if type(name) == type(u""): name = name.encode('utf-8') try: return imp.find_module(name, path) except ImportError: if name.lower().endswith(tuple(Preferences.getPython("PythonExtensions") + \ Preferences.getPython("Python3Extensions"))) or \ isPyFile: for p in path: # search in path pathname = os.path.join(p, name) if os.path.exists(pathname): return (open(pathname), pathname, (ext, 'r', PY_SOURCE)) raise ImportError eric4-4.5.18/eric/Utilities/ClassBrowsers/PaxHeaders.8617/ClbrBaseClasses.py0000644000175000001440000000013212261012652024622 xustar000000000000000030 mtime=1388582314.062103218 30 atime=1389081085.511724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/Utilities/ClassBrowsers/ClbrBaseClasses.py0000644000175000001440000001663512261012652024367 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2005 - 2014 Detlev Offenbach # """ Module implementing base classes used by the various class browsers. """ class _ClbrBase(object): """ Class implementing the base of all class browser objects. """ def __init__(self, module, name, file, lineno): """ Constructor @param module name of the module containing this class @param name name of this class @param file filename containing this object @param lineno linenumber of the class definition """ self.module = module self.name = name self.file = file self.lineno = lineno class ClbrBase(_ClbrBase): """ Class implementing the base of all complex class browser objects. """ def __init__(self, module, name, file, lineno): """ Constructor @param module name of the module containing this class @param name name of this class @param file filename containing this object @param lineno linenumber of the class definition """ _ClbrBase.__init__(self, module, name, file, lineno) self.methods = {} self.attributes = {} self.classes = {} self.globals = {} def _addmethod(self, name, function): """ Protected method to add information about a method. @param name name of method to be added (string) @param function Function object to be added """ self.methods[name] = function def _getmethod(self, name): """ Protected method to retrieve a method by name. @param name name of the method (string) @return the named method or None """ try: return self.methods[name] except KeyError: return None def _addglobal(self, attr): """ Protected method to add information about global variables. @param attr Attribute object to be added (Attribute) """ if not self.globals.has_key(attr.name): self.globals[attr.name] = attr def _getglobal(self, name): """ Protected method to retrieve a global variable by name. @param name name of the global variable (string) @return the named global variable or None """ try: return self.globals[name] except KeyError: return None def _addattribute(self, attr): """ Protected method to add information about attributes. @param attr Attribute object to be added (Attribute) """ if not self.attributes.has_key(attr.name): self.attributes[attr.name] = attr def _getattribute(self, name): """ Protected method to retrieve an attribute by name. @param name name of the attribute (string) @return the named attribute or None """ try: return self.attributes[name] except KeyError: return None def _addclass(self, name, _class): """ Protected method method to add a nested class to this class. @param name name of the class @param _class Class object to be added (Class) """ self.classes[name] = _class class ClbrVisibilityMixinBase(object): """ Class implementing the base class of all visibility mixins. """ def isPrivate(self): """ Public method to check, if the visibility is Private. @return flag indicating Private visibility (boolean) """ return self.visibility == 0 def isProtected(self): """ Public method to check, if the visibility is Protected. @return flag indicating Protected visibility (boolean) """ return self.visibility == 1 def isPublic(self): """ Public method to check, if the visibility is Public. @return flag indicating Public visibility (boolean) """ return self.visibility == 2 def setPrivate(self): """ Public method to set the visibility to Private. """ self.visibility = 0 def setProtected(self): """ Public method to set the visibility to Protected. """ self.visibility = 1 def setPublic(self): """ Public method to set the visibility to Public. """ self.visibility = 2 class Attribute(_ClbrBase): """ Class to represent an attribute. """ def __init__(self, module, name, file, lineno): """ Constructor @param module name of the module containing this class @param name name of this class @param file filename containing this attribute @param lineno linenumber of the class definition """ _ClbrBase.__init__(self, module, name, file, lineno) class Class(ClbrBase): """ Class to represent a class. """ def __init__(self, module, name, super, file, lineno): """ Constructor @param module name of the module containing this class @param name name of this class @param super list of class names this class is inherited from @param file filename containing this class @param lineno linenumber of the class definition """ ClbrBase.__init__(self, module, name, file, lineno) if super is None: super = [] self.super = super class Module(ClbrBase): """ Class to represent a module. """ def __init__(self, module, name, file, lineno): """ Constructor @param module name of the module containing this module @param name name of this module @param file filename containing this module @param lineno linenumber of the module definition """ ClbrBase.__init__(self, module, name, file, lineno) class Function(ClbrBase): """ Class to represent a function or method. """ General = 0 Static = 1 Class = 2 def __init__(self, module, name, file, lineno, signature = '', separator = ',', modifierType=General): """ Constructor @param module name of the module containing this function @param name name of this function @param file filename containing this class @param lineno linenumber of the class definition @param signature parameterlist of the method @param separator string separating the parameters @param modifierType type of the function """ ClbrBase.__init__(self, module, name, file, lineno) self.parameters = [e.strip() for e in signature.split(separator)] self.modifier = modifierType class Coding(ClbrBase): """ Class to represent a source coding. """ def __init__(self, module, file, lineno, coding): """ Constructor @param module name of the module containing this module @param file filename containing this module @param lineno linenumber of the module definition @param coding character coding of the source file """ ClbrBase.__init__(self, module, "Coding", file, lineno) self.coding = coding eric4-4.5.18/eric/Utilities/ClassBrowsers/PaxHeaders.8617/pyclbr.py0000644000175000001440000000013212261012652023122 xustar000000000000000030 mtime=1388582314.065103256 30 atime=1389081085.511724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/Utilities/ClassBrowsers/pyclbr.py0000644000175000001440000004046612261012652022666 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2005 - 2014 Detlev Offenbach # """ Parse a Python file and retrieve classes, functions/methods and attributes. Parse enough of a Python file to recognize class and method definitions and to find out the superclasses of a class as well as its attributes. This is module is based on pyclbr found in the Python 2.2.2 distribution. """ import sys import os import imp import re import Utilities import Utilities.ClassBrowsers as ClassBrowsers import ClbrBaseClasses TABWIDTH = 4 SUPPORTED_TYPES = [ClassBrowsers.PY_SOURCE, ClassBrowsers.PTL_SOURCE] _getnext = re.compile(r""" (?P \""" [^"\\]* (?: (?: \\. | "(?!"") ) [^"\\]* )* \""" | ''' [^'\\]* (?: (?: \\. | '(?!'') ) [^'\\]* )* ''' | " [^"\\\n]* (?: \\. [^"\\\n]*)* " | ' [^'\\\n]* (?: \\. [^'\\\n]*)* ' ) | (?P ^ [ \t]* __all__ [ \t]* = [ \t]* \[ (?P [^\]]*? ) \] ) | (?P ^ (?P [ \t]* ) (?P @classmethod | @staticmethod ) ) | (?P ^ (?P [ \t]* ) def [ \t]+ (?P [a-zA-Z_] \w* ) (?: [ \t]* \[ (?: plain | html ) \] )? [ \t]* \( (?P (?: [^)] | \)[ \t]*,? )*? ) \) [ \t]* : ) | (?P ^ (?P [ \t]* ) class [ \t]+ (?P [a-zA-Z_] \w* ) [ \t]* (?P \( [^)]* \) )? [ \t]* : ) | (?P ^ (?P [ \t]* ) self [ \t]* \. [ \t]* (?P [a-zA-Z_] \w* ) [ \t]* = ) | (?P ^ (?P [ \t]* ) (?P [a-zA-Z_] \w* ) [ \t]* = ) | (?P ^ (?P [ \t]* ) (?: (?: if | elif ) [ \t]+ [^:]* | else [ \t]* ) : (?= \s* def) ) | (?P ^ \# \s* [*_-]* \s* coding[:=] \s* (?P [-\w_.]+ ) \s* [*_-]* $ ) """, re.VERBOSE | re.DOTALL | re.MULTILINE).search _commentsub = re.compile(r"""#[^\n]*\n|#[^\n]*$""").sub _modules = {} # cache of modules we've seen class VisibilityMixin(ClbrBaseClasses.ClbrVisibilityMixinBase): """ Mixin class implementing the notion of visibility. """ def __init__(self): """ Method to initialize the visibility. """ if self.name.startswith('__'): self.setPrivate() elif self.name.startswith('_'): self.setProtected() else: self.setPublic() class Class(ClbrBaseClasses.Class, VisibilityMixin): """ Class to represent a Python class. """ def __init__(self, module, name, super, file, lineno): """ Constructor @param module name of the module containing this class @param name name of this class @param super list of class names this class is inherited from @param file filename containing this class @param lineno linenumber of the class definition """ ClbrBaseClasses.Class.__init__(self, module, name, super, file, lineno) VisibilityMixin.__init__(self) class Function(ClbrBaseClasses.Function, VisibilityMixin): """ Class to represent a Python function. """ def __init__(self, module, name, file, lineno, signature = '', separator = ',', modifierType=ClbrBaseClasses.Function.General): """ Constructor @param module name of the module containing this function @param name name of this function @param file filename containing this class @param lineno linenumber of the class definition @param signature parameterlist of the method @param separator string separating the parameters @param modifierType type of the function """ ClbrBaseClasses.Function.__init__(self, module, name, file, lineno, signature, separator, modifierType) VisibilityMixin.__init__(self) class Attribute(ClbrBaseClasses.Attribute, VisibilityMixin): """ Class to represent a class attribute. """ def __init__(self, module, name, file, lineno): """ Constructor @param module name of the module containing this class @param name name of this class @param file filename containing this attribute @param lineno linenumber of the class definition """ ClbrBaseClasses.Attribute.__init__(self, module, name, file, lineno) VisibilityMixin.__init__(self) class Publics(object): """ Class to represent the list of public identifiers. """ def __init__(self, module, file, lineno, idents): """ Constructor @param module name of the module containing this function @param file filename containing this class @param lineno linenumber of the class definition @param idents list of public identifiers """ self.module = module self.name = '__all__' self.file = file self.lineno = lineno self.identifiers = [e.replace('"','').replace("'","").strip() \ for e in idents.split(',')] def readmodule_ex(module, path=[], inpackage = False, isPyFile = False): ''' Read a module file and return a dictionary of classes. Search for MODULE in PATH and sys.path, read and parse the module and return a dictionary with one entry for each class found in the module. @param module name of the module file (string) @param path path the module should be searched in (list of strings) @param inpackage flag indicating a module inside a package is scanned @return the resulting dictionary ''' dict = {} dict_counts = {} if _modules.has_key(module): # we've seen this module before... return _modules[module] if module in sys.builtin_module_names: # this is a built-in module _modules[module] = dict return dict # search the path for the module f = None if inpackage: try: f, file, (suff, mode, type) = \ ClassBrowsers.find_module(module, path) except ImportError: f = None if f is None: fullpath = list(path) + sys.path f, file, (suff, mode, type) = \ ClassBrowsers.find_module(module, fullpath, isPyFile) if module.endswith(".py") and type == imp.PKG_DIRECTORY: return dict if type == imp.PKG_DIRECTORY: dict['__path__'] = [file] _modules[module] = dict path = [file] + path f, file, (suff, mode, type) = \ ClassBrowsers.find_module('__init__', [file]) if type not in SUPPORTED_TYPES: # not Python source, can't do anything with this module f.close() _modules[module] = dict return dict _modules[module] = dict classstack = [] # stack of (class, indent) pairs conditionalsstack = [] # stack of indents of conditional defines deltastack = [] deltaindent = 0 deltaindentcalculated = 0 src = Utilities.decode(f.read())[0] f.close() lineno, last_lineno_pos = 1, 0 i = 0 modifierType = ClbrBaseClasses.Function.General modifierIndent = -1 while 1: m = _getnext(src, i) if not m: break start, i = m.span() if m.start("MethodModifier") >= 0: modifierIndent = _indent(m.group("MethodModifierIndent")) modifierType = m.group("MethodModifierType") elif m.start("Method") >= 0: # found a method definition or function thisindent = _indent(m.group("MethodIndent")) meth_name = m.group("MethodName") meth_sig = m.group("MethodSignature") meth_sig = meth_sig.replace('\\\n', '') meth_sig = _commentsub('', meth_sig) lineno = lineno + src.count('\n', last_lineno_pos, start) last_lineno_pos = start if modifierType and modifierIndent == thisindent: if modifierType == "@staticmethod": modifier = ClbrBaseClasses.Function.Static elif modifierType == "@classmethod": modifier = ClbrBaseClasses.Function.Class else: modifier = ClbrBaseClasses.Function.General else: modifier = ClbrBaseClasses.Function.General # modify indentation level for conditional defines if conditionalsstack: if thisindent > conditionalsstack[-1]: if not deltaindentcalculated: deltastack.append(thisindent - conditionalsstack[-1]) deltaindent = reduce(lambda x,y: x+y, deltastack) deltaindentcalculated = 1 thisindent -= deltaindent else: while conditionalsstack and \ conditionalsstack[-1] >= thisindent: del conditionalsstack[-1] if deltastack: del deltastack[-1] deltaindentcalculated = 0 # close all classes indented at least as much while classstack and \ classstack[-1][1] >= thisindent: del classstack[-1] if classstack: # it's a class method cur_class = classstack[-1][0] if cur_class: # it's a method/nested def f = Function(None, meth_name, file, lineno, meth_sig, modifierType=modifier) cur_class._addmethod(meth_name, f) else: # it's a function f = Function(module, meth_name, file, lineno, meth_sig, modifierType=modifier) if dict_counts.has_key(meth_name): dict_counts[meth_name] += 1 meth_name = "%s_%d" % (meth_name, dict_counts[meth_name]) else: dict_counts[meth_name] = 0 dict[meth_name] = f classstack.append((f, thisindent)) # Marker for nested fns # reset the modifier settings modifierType = ClbrBaseClasses.Function.General modifierIndent = -1 elif m.start("String") >= 0: pass elif m.start("Class") >= 0: # we found a class definition thisindent = _indent(m.group("ClassIndent")) # close all classes indented at least as much while classstack and \ classstack[-1][1] >= thisindent: del classstack[-1] lineno = lineno + src.count('\n', last_lineno_pos, start) last_lineno_pos = start class_name = m.group("ClassName") inherit = m.group("ClassSupers") if inherit: # the class inherits from other classes inherit = inherit[1:-1].strip() inherit = _commentsub('', inherit) names = [] for n in inherit.split(','): n = n.strip() if dict.has_key(n): # we know this super class n = dict[n] else: c = n.split('.') if len(c) > 1: # super class # is of the # form module.class: # look in # module for class m = c[-2] c = c[-1] if _modules.has_key(m): d = _modules[m] if d.has_key(c): n = d[c] names.append(n) inherit = names # remember this class cur_class = Class(module, class_name, inherit, file, lineno) if not classstack: if dict_counts.has_key(class_name): dict_counts[class_name] += 1 class_name = "%s_%d" % (class_name, dict_counts[class_name]) else: dict_counts[class_name] = 0 dict[class_name] = cur_class else: classstack[-1][0]._addclass(class_name, cur_class) classstack.append((cur_class, thisindent)) elif m.start("Attribute") >= 0: lineno = lineno + src.count('\n', last_lineno_pos, start) last_lineno_pos = start index = -1 while index >= -len(classstack): if classstack[index][0] is not None and \ not isinstance(classstack[index][0], Function): attr = Attribute(module, m.group("AttributeName"), file, lineno) classstack[index][0]._addattribute(attr) break else: index -= 1 elif m.start("Variable") >= 0: thisindent = _indent(m.group("VariableIndent")) variable_name = m.group("VariableName") lineno = lineno + src.count('\n', last_lineno_pos, start) last_lineno_pos = start if thisindent == 0: # global variable if not dict.has_key("@@Globals@@"): dict["@@Globals@@"] = \ ClbrBaseClasses.ClbrBase(module, "Globals", file, lineno) dict["@@Globals@@"]._addglobal( Attribute(module, variable_name, file, lineno)) else: index = -1 while index >= -len(classstack): if classstack[index][1] >= thisindent: index -= 1 else: if isinstance(classstack[index][0], Class): classstack[index][0]._addglobal( Attribute(module, variable_name, file, lineno)) break elif m.start("Publics") >= 0: idents = m.group("Identifiers") lineno = lineno + src.count('\n', last_lineno_pos, start) last_lineno_pos = start pubs = Publics(module, file, lineno, idents) dict['__all__'] = pubs elif m.start("ConditionalDefine") >= 0: # a conditional function/method definition thisindent = _indent(m.group("ConditionalDefineIndent")) while conditionalsstack and \ conditionalsstack[-1] >= thisindent: del conditionalsstack[-1] if deltastack: del deltastack[-1] conditionalsstack.append(thisindent) deltaindentcalculated = 0 elif m.start("CodingLine") >= 0: # a coding statement coding = m.group("Coding") lineno = lineno + src.count('\n', last_lineno_pos, start) last_lineno_pos = start if not dict.has_key("@@Coding@@"): dict["@@Coding@@"] = ClbrBaseClasses.Coding(module, file, lineno, coding) else: assert 0, "regexp _getnext found something unexpected" if dict.has_key('__all__'): # set visibility of all top level elements pubs = dict['__all__'] for key in dict.keys(): if key == '__all__' or key.startswith("@@"): continue if key in pubs.identifiers: dict[key].setPublic() else: dict[key].setPrivate() del dict['__all__'] return dict def _indent(ws): """ Module function to return the indentation depth. @param ws the whitespace to be checked (string) @return length of the whitespace string (integer) """ return len(ws.expandtabs(TABWIDTH)) eric4-4.5.18/eric/Utilities/ClassBrowsers/PaxHeaders.8617/idlclbr.py0000644000175000001440000000013212261012652023242 xustar000000000000000030 mtime=1388582314.067103281 30 atime=1389081085.511724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/Utilities/ClassBrowsers/idlclbr.py0000644000175000001440000002472012261012652023001 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2005 - 2014 Detlev Offenbach # """ Parse a CORBA IDL file and retrieve modules, interfaces, methods and attributes. Parse enough of a CORBA IDL file to recognize module, interface and method definitions and to find out the superclasses of an interface as well as its attributes. It is based on the Python class browser found in this package. """ import sys import os import re import Utilities import Utilities.ClassBrowsers as ClassBrowsers import ClbrBaseClasses SUPPORTED_TYPES = [ClassBrowsers.IDL_SOURCE] _getnext = re.compile(r""" (?P " [^"\\\n]* (?: \\. [^"\\\n]*)* " ) | (?P ^ [ \t]* // .*? $ | ^ [ \t]* /\* .*? \*/ ) | (?P ^ (?P [ \t]* ) (?: oneway [ \t]+ )? (?: [a-zA-Z0-9_:]+ | void ) [ \t]* (?P [a-zA-Z_] [a-zA-Z0-9_]* ) [ \t]* \( (?P [^)]*? ) \); [ \t]* ) | (?P ^ (?P [ \t]* ) (?: abstract [ \t]+ )? interface [ \t]+ (?P [a-zA-Z_] [a-zA-Z0-9_]* ) [ \t]* (?P : [^{]+? )? [ \t]* { ) | (?P ^ (?P [ \t]* ) module [ \t]+ (?P [a-zA-Z_] [a-zA-Z0-9_]* ) [ \t]* { ) | (?P ^ (?P [ \t]* ) (?P readonly [ \t]+ )? attribute [ \t]+ (?P (?: [a-zA-Z0-9_:]+ [ \t]+ )+ ) (?P [^;]* ) ; ) | (?P [ \t]* { ) | (?P [ \t]* } [ \t]* ; ) """, re.VERBOSE | re.DOTALL | re.MULTILINE).search # function to replace comments _commentsub = re.compile(r"""//[^\n]*\n|//[^\n]*$""").sub # function to normalize whitespace _normalize = re.compile(r"""[ \t]{2,}""").sub _modules = {} # cache of modules we've seen class VisibilityMixin(ClbrBaseClasses.ClbrVisibilityMixinBase): """ Mixin class implementing the notion of visibility. """ def __init__(self): """ Method to initialize the visibility. """ self.setPublic() class Module(ClbrBaseClasses.Module, VisibilityMixin): """ Class to represent a CORBA IDL module. """ def __init__(self, module, name, file, lineno): """ Constructor @param module name of the module containing this class @param name name of this class @param file filename containing this class @param lineno linenumber of the class definition """ ClbrBaseClasses.Module.__init__(self, module, name, file, lineno) VisibilityMixin.__init__(self) class Interface(ClbrBaseClasses.Class, VisibilityMixin): """ Class to represent a CORBA IDL interface. """ def __init__(self, module, name, super, file, lineno): """ Constructor @param module name of the module containing this class @param name name of this interface @param super list of interface names this interface is inherited from @param file filename containing this interface @param lineno linenumber of the interface definition """ ClbrBaseClasses.Class.__init__(self, module, name, super, file, lineno) VisibilityMixin.__init__(self) class Function(ClbrBaseClasses.Function, VisibilityMixin): """ Class to represent a CORBA IDL function. """ def __init__(self, module, name, file, lineno, signature = '', separator = ','): """ Constructor @param module name of the module containing this function @param name name of this function @param file filename containing this class @param lineno linenumber of the class definition @param signature parameterlist of the method @param separator string separating the parameters """ ClbrBaseClasses.Function.__init__(self, module, name, file, lineno, signature, separator) VisibilityMixin.__init__(self) class Attribute(ClbrBaseClasses.Attribute, VisibilityMixin): """ Class to represent a CORBA IDL attribute. """ def __init__(self, module, name, file, lineno): """ Constructor @param module name of the module containing this class @param name name of this class @param file filename containing this attribute @param lineno linenumber of the class definition """ ClbrBaseClasses.Attribute.__init__(self, module, name, file, lineno) VisibilityMixin.__init__(self) def readmodule_ex(module, path=[]): ''' Read a CORBA IDL file and return a dictionary of classes, functions and modules. @param module name of the CORBA IDL file (string) @param path path the file should be searched in (list of strings) @return the resulting dictionary ''' dict = {} dict_counts = {} if _modules.has_key(module): # we've seen this file before... return _modules[module] # search the path for the file f = None fullpath = list(path) f, file, (suff, mode, type) = ClassBrowsers.find_module(module, fullpath) if type not in SUPPORTED_TYPES: # not CORBA IDL source, can't do anything with this module f.close() _modules[module] = dict return dict _modules[module] = dict classstack = [] # stack of (class, indent) pairs indent = 0 src = Utilities.decode(f.read())[0] f.close() lineno, last_lineno_pos = 1, 0 i = 0 while 1: m = _getnext(src, i) if not m: break start, i = m.span() if m.start("Method") >= 0: # found a method definition or function thisindent = indent meth_name = m.group("MethodName") meth_sig = m.group("MethodSignature") meth_sig = meth_sig and meth_sig.replace('\\\n', '') or '' meth_sig = _commentsub('', meth_sig) meth_sig = _normalize(' ', meth_sig) lineno = lineno + src.count('\n', last_lineno_pos, start) last_lineno_pos = start # close all interfaces/modules indented at least as much while classstack and \ classstack[-1][1] >= thisindent: del classstack[-1] if classstack: # it's an interface/module method cur_class = classstack[-1][0] if isinstance(cur_class, Interface) or isinstance(cur_class, Module): # it's a method f = Function(None, meth_name, file, lineno, meth_sig) cur_class._addmethod(meth_name, f) # else it's a nested def else: # it's a function f = Function(module, meth_name, file, lineno, meth_sig) if dict_counts.has_key(meth_name): dict_counts[meth_name] += 1 meth_name = "%s_%d" % (meth_name, dict_counts[meth_name]) else: dict_counts[meth_name] = 0 dict[meth_name] = f classstack.append((f, thisindent)) # Marker for nested fns elif m.start("String") >= 0: pass elif m.start("Comment") >= 0: pass elif m.start("Interface") >= 0: # we found an interface definition thisindent = indent indent += 1 # close all interfaces/modules indented at least as much while classstack and \ classstack[-1][1] >= thisindent: del classstack[-1] lineno = lineno + src.count('\n', last_lineno_pos, start) last_lineno_pos = start class_name = m.group("InterfaceName") inherit = m.group("InterfaceSupers") if inherit: # the interface inherits from other interfaces inherit = inherit[1:].strip() inherit = [_commentsub('', inherit)] # remember this interface cur_class = Interface(module, class_name, inherit, file, lineno) if not classstack: dict[class_name] = cur_class else: cls = classstack[-1][0] cls._addclass(class_name, cur_class) classstack.append((cur_class, thisindent)) elif m.start("Module") >= 0: # we found a module definition thisindent = indent indent += 1 # close all interfaces/modules indented at least as much while classstack and \ classstack[-1][1] >= thisindent: del classstack[-1] lineno = lineno + src.count('\n', last_lineno_pos, start) last_lineno_pos = start module_name = m.group("ModuleName") # remember this module cur_class = Module(module, module_name, file, lineno) if not classstack: dict[module_name] = cur_class classstack.append((cur_class, thisindent)) elif m.start("Attribute") >= 0: lineno = lineno + src.count('\n', last_lineno_pos, start) last_lineno_pos = start index = -1 while index >= -len(classstack): if classstack[index][0] is not None and \ not isinstance(classstack[index][0], Function) and \ not classstack[index][1] >= indent: attributes = m.group("AttributeNames").split(',') ro = m.group("AttributeReadonly") for attribute in attributes: attr = Attribute(module, attribute, file, lineno) if ro: attr.setPrivate() classstack[index][0]._addattribute(attr) break else: index -= 1 elif m.start("Begin") >= 0: # a begin of a block we are not interested in indent += 1 elif m.start("End") >= 0: # an end of a block indent -= 1 else: assert 0, "regexp _getnext found something unexpected" return dict eric4-4.5.18/eric/Utilities/PaxHeaders.8617/SingleApplication.py0000644000175000001440000000013212261012652022440 xustar000000000000000030 mtime=1388582314.069103306 30 atime=1389081085.511724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/Utilities/SingleApplication.py0000644000175000001440000001541512261012652022200 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2004 - 2014 Detlev Offenbach # """ Module implementing the single application server and client. """ import os import socket from PyQt4.QtCore import SIGNAL, QString from PyQt4.QtNetwork import QTcpServer, QTcpSocket, QHostAddress import Utilities ########################################################################### # define some module global stuff ########################################################################### SAAddress = "127.0.0.1" # the address to be used # define the lock file tokens SALckSocket = 'Socket' SALckPID = 'PID' class SingleApplicationServer(QTcpServer): """ Class implementing the single application server base class. """ def __init__(self, pidFile): """ Constructor @param pidFile filename of the PID file used to record some interface informations """ addr = QHostAddress() addr.setAddress(SAAddress) QTcpServer.__init__(self) self.saFile = os.path.join(Utilities.getConfigDir(), pidFile) if self.listen(addr, 0): try: f = open(self.saFile, "wb") try: f.write("%s = %d%s" % \ (SALckPID, os.getpid(), os.linesep)) except AttributeError: pass f.write("%s = %d%s" % \ (SALckSocket, self.serverPort(), os.linesep)) f.close() except IOError, msg: print "Error writing Lockfile: %s\n" % msg self.connect(self, SIGNAL("newConnection()"), self.__newConnection) self.qsock = None def __newConnection(self): """ Private slot to handle a new connection. """ sock = self.nextPendingConnection() # If we already have a connection, refuse this one. It will be closed # automatically. if self.qsock is not None: return self.qsock = sock self.connect(self.qsock, SIGNAL('readyRead()'), self.__parseLine) self.connect(self.qsock, SIGNAL('disconnected()'), self.__disconnected) def __parseLine(self): """ Private method to handle data from the client. """ while self.qsock and self.qsock.canReadLine(): line = unicode(self.qsock.readLine()) ## print line ##debug eoc = line.find('<') + 1 boc = line.find('>') if boc >= 0 and eoc > boc: # handle the command sent by the client. cmd = line[boc:eoc] params = line[eoc:-1] self.handleCommand(cmd, params) def __disconnected(self): """ Private method to handle the closure of the socket. """ self.qsock = None def shutdown(self): """ Public method used to shut down the server. """ try: os.remove(self.saFile) except EnvironmentError: pass if self.qsock is not None: self.disconnect(self.qsock, SIGNAL('readyRead()'), self.__parseLine) self.disconnect(self.qsock, SIGNAL('disconnected()'), self.__disconnected) self.qsock = None def handleCommand(self, cmd, params): """ Public slot to handle the command sent by the client. Note: This method must be overridden by subclasses. @param cmd commandstring (string) @param params parameterstring (string) """ raise RuntimeError("'handleCommand' must be overridden") class SingleApplicationClient(object): """ Class implementing the single application client base class. """ def __init__(self, pidFile): """ Constructor @param pidFile filename of the PID file used to get some interface informations """ self.pidFile = pidFile self.connected = False self.errno = 0 def connect(self): """ Public method to connect the single application client to its server. @return value indicating success or an error number. Value is one of:
    0No application is running
    1Application is already running
    -1The lock file could not be read
    -2The lock file is corrupt
    """ saFile = os.path.join(Utilities.getConfigDir(), self.pidFile) if not os.path.exists(saFile): return 0 try: f = open(saFile, 'rb') lines = f.readlines() f.close() except IOError: self.errno = -1 return -1 for line in lines: key, value = line.split(' = ') if key == SALckSocket: port = int(value.strip()) break else: self.errno = -2 return -2 self.sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) try: self.sock.connect((SAAddress,port)) except socket.error: # if we cannot connect, we assume, that the port was # read from a stall lock file and is no longer valid return 0 self.sock.setblocking(0) self.connected = True return 1 def disconnect(self): """ Public method to disconnect from the Single Appliocation server. """ self.sock.close() self.connected = False def processArgs(self, args): """ Public method to process the command line args passed to the UI. Note: This method must be overridden by subclasses. @param args command line args (list of strings) """ raise RuntimeError("'processArgs' must be overridden") def sendCommand(self, cmd): """ Public method to send the command to the application server. @param cmd command to be sent (string) """ if self.connected: self.sock.send(cmd) def errstr(self): """ Public method to return a meaningful error string for the last error. @return error string for the last error (string) """ if self.errno == -1: s = "Error reading lock file." elif self.errno == -2: s = "Lock file does not contain a socket line." return s eric4-4.5.18/eric/Utilities/PaxHeaders.8617/__init__.py0000644000175000001440000000013212261012652020572 xustar000000000000000030 mtime=1388582314.082103471 30 atime=1389081085.511724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/Utilities/__init__.py0000644000175000001440000013106612261012652020333 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Package implementing various functions/classes needed everywhere within eric4. """ import os import sys import re import fnmatch import glob from types import UnicodeType import random import base64 import codecs def __showwarning(message, category, filename, lineno, file = None, line = ""): """ Module function to raise a SyntaxError for a SyntaxWarning. @param message warning object @param category type object of the warning @param filename name of the file causing the warning (string) @param lineno line number causing the warning (integer) @param file file to write the warning message to (ignored) @param line line causing the warning (ignored) @raise SyntaxError """ if category is SyntaxWarning: err = SyntaxError(str(message)) err.filename = filename err.lineno = lineno raise err import warnings warnings.showwarning = __showwarning from codecs import BOM_UTF8, BOM_UTF16, BOM_UTF32 from PyQt4.QtCore import QRegExp, QString, QStringList, QDir, QProcess, Qt, QByteArray, \ qVersion, PYQT_VERSION_STR, QCryptographicHash from PyQt4.QtGui import QApplication from PyQt4.Qsci import QSCINTILLA_VERSION_STR, QsciScintilla from Globals import isWindowsPlatform, isMacPlatform, isLinuxPlatform, \ getPythonModulesDirectory, getPyQt4ModulesDirectory # import these methods into the Utilities namespace from KdeQt.KQApplication import e4App import KdeQt from UI.Info import Program, Version from eric4config import getConfig import Preferences configDir = None coding_regexps = [ (2, re.compile(r'''coding[:=]\s*([-\w_.]+)''')), (1, re.compile(r'''<\?xml.*\bencoding\s*=\s*['"]([-\w_.]+)['"]\?>''')), ] supportedCodecs = ['utf-8', 'iso8859-1', 'iso8859-15', 'iso8859-2', 'iso8859-3', 'iso8859-4', 'iso8859-5', 'iso8859-6', 'iso8859-7', 'iso8859-8', 'iso8859-9', 'iso8859-10', 'iso8859-11', 'iso8859-13', 'iso8859-14', 'iso8859-16', 'latin-1', 'koi8-r', 'koi8-u', 'utf-16', 'cp037', 'cp424', 'cp437', 'cp500', 'cp737', 'cp775', 'cp850', 'cp852', 'cp855', 'cp856', 'cp857', 'cp860', 'cp861', 'cp862', 'cp863', 'cp864', 'cp865', 'cp866', 'cp874', 'cp875', 'cp932', 'cp949', 'cp950', 'cp1006', 'cp1026', 'cp1140', 'cp1250', 'cp1251', 'cp1252', 'cp1253', 'cp1254', 'cp1255', 'cp1256', 'cp1257', 'cp1258', 'ascii'] class CodingError(Exception): """ Class implementing an exception, which is raised, if a given coding is incorrect. """ def __init__(self, coding): """ Constructor """ ERR = QApplication.translate("CodingError", "The coding '%1' is wrong for the given text.") self.errorMessage = ERR.arg(coding) def __repr__(self): """ Private method returning a representation of the exception. @return string representing the error message """ return unicode(self.errorMessage) def __str__(self): """ Private method returning a string representation of the exception. @return string representing the error message """ return str(self.errorMessage) def get_coding(text): """ Function to get the coding of a text. @param text text to inspect (string) @return coding string """ lines = text.splitlines() for coding in coding_regexps: coding_re = coding[1] head = lines[:coding[0]] for l in head: m = coding_re.search(l) if m: return m.group(1).lower() return None def readEncodedFile(filename): """ Function to read a file and decode its contents into proper text. @param filename name of the file to read (string) @return tuple of decoded text and encoding (string, string) """ f = open(filename, "rb") text = f.read() f.close() return decode(text) def decodeWithHash(text): """ Function to decode a text and calculate the MD5 hash. @param text text to decode (string) @return decoded text, encoding and MD5 hash """ hash = str(QCryptographicHash.hash(QByteArray(text), QCryptographicHash.Md5).toHex()) return decode(text) + (hash, ) def decode(text): """ Function to decode a text. @param text text to decode (string) @return decoded text and encoding """ try: if text.startswith(BOM_UTF8): # UTF-8 with BOM return unicode(text[len(BOM_UTF8):], 'utf-8'), 'utf-8-bom' elif text.startswith(BOM_UTF16): # UTF-16 with BOM return unicode(text[len(BOM_UTF16):], 'utf-16'), 'utf-16' elif text.startswith(BOM_UTF32): # UTF-32 with BOM return unicode(text[len(BOM_UTF32):], 'utf-32'), 'utf-32' coding = get_coding(text) if coding: return unicode(text, coding), coding except (UnicodeError, LookupError): pass guess = None if Preferences.getEditor("AdvancedEncodingDetection"): # Try the universal character encoding detector try: import ThirdParty.CharDet.chardet guess = ThirdParty.CharDet.chardet.detect(text) if guess and guess['confidence'] > 0.95 and guess['encoding'] is not None: codec = guess['encoding'].lower() return unicode(text, codec), '%s-guessed' % codec except (UnicodeError, LookupError): pass except ImportError: pass # Try default encoding try: codec = unicode(Preferences.getEditor("DefaultEncoding")) return unicode(text, codec), '%s-default' % codec except (UnicodeError, LookupError): pass # Assume UTF-8 try: return unicode(text, 'utf-8'), 'utf-8-guessed' except (UnicodeError, LookupError): pass if Preferences.getEditor("AdvancedEncodingDetection"): # Use the guessed one even if confifence level is low if guess and guess['encoding'] is not None: try: codec = guess['encoding'].lower() return unicode(text, codec), '%s-guessed' % codec except (UnicodeError, LookupError): pass # Assume Latin-1 (behaviour before 3.7.1) return unicode(text, "latin-1"), 'latin-1-guessed' def decodeBytes(buffer): """ Function to decode some text into a unicode string. @param buffer string buffer to decode (string) @return decoded text (unicode) """ # try UTF with BOM try: if buffer.startswith(BOM_UTF8): # UTF-8 with BOM return unicode(buffer[len(BOM_UTF8):], 'utf-8') elif buffer.startswith(BOM_UTF16): # UTF-16 with BOM return unicode(buffer[len(BOM_UTF16):], 'utf-16') elif buffer.startswith(BOM_UTF32): # UTF-32 with BOM return unicode(buffer[len(BOM_UTF32):], 'utf-32') except (UnicodeError, LookupError): pass # try UTF-8 try: return unicode(buffer, "utf-8") except UnicodeError: pass # try codec detection try: import ThirdParty.CharDet.chardet guess = ThirdParty.CharDet.chardet.detect(buffer) if guess and guess['encoding'] is not None: codec = guess['encoding'].lower() return unicode(buffer, codec) except (UnicodeError, LookupError): pass except ImportError: pass return unicode(buffer, "utf-8", "ignore") def writeEncodedFile(filename, text, orig_coding): """ Function to write a file with properly encoded text. @param filename name of the file to read (string) @param text text to be written (string) @param orig_coding type of the original encoding (string) @return encoding used for writing the file (string) """ etext, encoding = encode(text, orig_coding) f = open(filename, "wb") f.write(etext) f.close() return encoding def encode(text, orig_coding): """ Function to encode a text. @param text text to encode (string) @param orig_coding type of the original coding (string) @return encoded text and encoding """ orig_coding = str(orig_coding) if orig_coding == 'utf-8-bom': return BOM_UTF8 + text.encode("utf-8"), 'utf-8-bom' # Try declared coding spec coding = get_coding(text) if coding: try: return text.encode(coding), coding except (UnicodeError, LookupError): # Error: Declared encoding is incorrect raise CodingError(coding) if orig_coding and orig_coding.endswith('-selected'): coding = orig_coding.replace("-selected", "") try: return text.encode(coding), coding except (UnicodeError, LookupError): pass if orig_coding and orig_coding.endswith('-default'): coding = orig_coding.replace("-default", "") try: return text.encode(coding), coding except (UnicodeError, LookupError): pass if orig_coding and orig_coding.endswith('-guessed'): coding = orig_coding.replace("-guessed", "") try: return text.encode(coding), coding except (UnicodeError, LookupError): pass # Try configured default try: codec = unicode(Preferences.getEditor("DefaultEncoding")) return text.encode(codec), codec except (UnicodeError, LookupError): pass # Try saving as ASCII try: return text.encode('ascii'), 'ascii' except UnicodeError: pass # Save as UTF-8 without BOM return text.encode('utf-8'), 'utf-8' def toUnicode(s): """ Public method to convert a string to unicode. If the passed in string is of type QString, it is simply returned unaltered, assuming, that it is already a unicode string. For all other strings, various codes are tried until one converts the string without an error. If all codecs fail, the string is returned unaltered. @param s string to be converted (string or QString) @return converted string (unicode or QString) """ if isinstance(s, QString): return s if type(s) is type(u""): return s for codec in supportedCodecs: try: u = unicode(s, codec) return u except UnicodeError: pass except TypeError: break # we didn't succeed return s _escape = re.compile(eval(r'u"[&<>\"\u0080-\uffff]"')) _escape_map = { "&": "&", "<": "<", ">": ">", '"': """, } def escape_entities(m, map=_escape_map): """ Function to encode html entities. @param m the match object @param map the map of entities to encode @return the converted text (string) """ char = m.group() text = map.get(char) if text is None: text = "&#%d;" % ord(char) return text def html_encode(text, pattern=_escape): """ Function to correctly encode a text for html. @param text text to be encoded (string) @param pattern search pattern for text to be encoded (string) @return the encoded text (string) """ if not text: return "" text = pattern.sub(escape_entities, text) return text.encode("ascii") _uescape = re.compile(ur'[\u0080-\uffff]') def escape_uentities(m): """ Function to encode html entities. @param m the match object @return the converted text (string) """ char = m.group() text = "&#%d;" % ord(char) return text def html_uencode(text, pattern=_uescape): """ Function to correctly encode a unicode text for html. @param text text to be encoded (string) @param pattern search pattern for text to be encoded (string) @return the encoded text (string) """ if not text: return "" try: if type(text) is not UnicodeType: text = unicode(text, "utf-8") except (ValueError, LookupError): pass text = pattern.sub(escape_uentities, text) return text.encode("ascii") def convertLineEnds(text, eol): """ Function to convert the end of line characters. @param text text to be converted (string) @param eol new eol setting (string) @return text with converted eols (string) """ if eol == '\r\n': regexp = re.compile(r"""(\r(?!\n)|(?You may use %-codes as placeholders in the string.""" """ Supported codes are:""" """""" """""" """""" """""" """""" """""" """""" """""" """""" """""" """
    %Ccolumn of the cursor of the current editor
    %Ddirectory of the current editor
    %Ffilename of the current editor
    %Hhome directory of the current user
    %Lline of the cursor of the current editor
    %Ppath of the current project
    %Sselected text of the current editor
    %Uusername of the current user
    %%the percent sign
    """ """

    """) def getUserName(): """ Function to get the user name. @return user name (string) """ if isWindowsPlatform(): return win32_GetUserName() else: return posix_GetUserName() def getHomeDir(): """ Function to get a users home directory @return home directory (string) """ return unicode(QDir.homePath()) def getPythonLibPath(): """ Function to determine the path to Python's library. @return path to the Python library (string) """ pyFullVers = sys.version.split()[0] vl = re.findall("[0-9.]*", pyFullVers)[0].split(".") major = vl[0] minor = vl[1] pyVers = major + "." + minor pyVersNr = int(major) * 10 + int(minor) if isWindowsPlatform(): libDir = sys.prefix + "\\Lib" else: try: syslib = sys.lib except AttributeError: syslib = "lib" libDir = sys.prefix + "/" + syslib + "/python" + pyVers return libDir def getPythonVersion(): """ Function to get the Python version (major, minor) as an integer value. @return An integer representing major and minor version number (integer) """ return sys.hexversion >> 16 def compile(file, codestring = ""): """ Function to compile one Python source file to Python bytecode. @param file source filename (string) @param codestring string containing the code to compile (string) @return A tuple indicating status (1 = an error was found), the filename, the linenumber, the index number, the code string and the error message (boolean, string, string, string, string, string). The values are only valid, if the status equals 1. """ import __builtin__ if not codestring: try: f = open(file) codestring, encoding = decode(f.read()) f.close() except IOError: return (0, None, None, None, None, None) if type(codestring) == type(u""): codestring = codestring.encode('utf-8') codestring = codestring.replace("\r\n","\n") codestring = codestring.replace("\r","\n") if codestring and codestring[-1] != '\n': codestring = codestring + '\n' try: if type(file) == type(u""): file = file.encode('utf-8') if file.endswith('.ptl'): try: import quixote.ptl_compile except ImportError: return (0, None, None, None, None, None) template = quixote.ptl_compile.Template(codestring, file) template.compile() codeobject = template.code else: codeobject = __builtin__.compile(codestring, file, 'exec') except SyntaxError, detail: import traceback, re index = "0" code = "" error = "" lines = traceback.format_exception_only(SyntaxError, detail) match = re.match('\s*File "(.+)", line (\d+)', lines[0].replace('', '%s' % file)) if match is not None: fn, line = match.group(1, 2) if lines[1].startswith('SyntaxError:'): error = re.match('SyntaxError: (.+)', lines[1]).group(1) else: code = re.match('(.+)', lines[1]).group(1) for seLine in lines[2:]: if seLine.startswith('SyntaxError:'): error = re.match('SyntaxError: (.+)', seLine).group(1) elif seLine.rstrip().endswith('^'): index = len(seLine.rstrip()) - 4 else: fn = detail.filename line = detail.lineno and detail.lineno or 1 index = detail.offset and detail.offset or 1 error = detail.msg return (1, fn, line, index, code, error) except ValueError, detail: index = "0" code = "" try: fn = detail.filename line = detail.lineno error = detail.msg except AttributeError: fn = file line = "1" error = unicode(detail) return (1, fn, line, index, code, error) except StandardError, detail: try: fn = detail.filename line = detail.lineno index = "0" code = "" error = detail.msg return (1, fn, line, index, code, error) except: # this catchall is intentional pass return (0, None, None, None, None, None) def getConfigDir(): """ Module function to get the name of the directory storing the config data. @return directory name of the config dir (string) """ if configDir is not None and os.path.exists(configDir): hp = configDir else: if isWindowsPlatform(): cdn = "_eric4" else: cdn = ".eric4" hp = QDir.homePath() dn = QDir(hp) dn.mkdir(cdn) hp.append("/").append(cdn) return unicode(toNativeSeparators(hp)) def setConfigDir(d): """ Module function to set the name of the directory storing the config data. @param d name of an existing directory (string) """ global configDir configDir = os.path.expanduser(d) ################################################################################ # functions for environment handling ################################################################################ def getEnvironmentEntry(key, default = None): """ Module function to get an environment entry. @param key key of the requested environment entry (string) @param default value to be returned, if the environment doesn't contain the requested entry (string) @return the requested entry or the default value, if the entry wasn't found (string or None) """ filter = QRegExp("^%s[ \t]*=" % key) if isWindowsPlatform(): filter.setCaseSensitivity(Qt.CaseInsensitive) entries = QProcess.systemEnvironment().filter(filter) if entries.count() == 0: return default # if there are multiple entries, just consider the first one ename, val = unicode(entries[0]).split("=", 1) return val.strip() def hasEnvironmentEntry(key): """ Module function to check, if the environment contains an entry. @param key key of the requested environment entry (string) @return flag indicating the presence of the requested entry (boolean) """ filter = QRegExp("^%s[ \t]*=" % key) if isWindowsPlatform(): filter.setCaseSensitivity(Qt.CaseInsensitive) entries = QProcess.systemEnvironment().filter(filter) return entries.count() > 0 ################################################################################ # Qt utility functions below ################################################################################ def generateQtToolName(toolname): """ Module function to generate the executable name for a Qt tool like designer. @param toolname base name of the tool (string or QString) @return the Qt tool name without extension (string) """ return "%s%s%s" % (Preferences.getQt("QtToolsPrefix4"), toolname, Preferences.getQt("QtToolsPostfix4") ) def getQtMacBundle(toolname): """ Module function to determine the correct Mac OS X bundle name for Qt tools. @param toolname plain name of the tool (e.g. "designer") (string or QString) @return bundle name of the Qt tool (string) """ toolname = unicode(toolname) qtDir = Preferences.getQt("Qt4Dir") bundles = [ os.path.join(qtDir, 'bin', generateQtToolName(toolname.capitalize())) + ".app", os.path.join(qtDir, 'bin', generateQtToolName(toolname)) + ".app", os.path.join(qtDir, generateQtToolName(toolname.capitalize())) + ".app", os.path.join(qtDir, generateQtToolName(toolname)) + ".app", ] for bundle in bundles: if os.path.exists(bundle): return bundle return "" def prepareQtMacBundle(toolname, version, args): """ Module function for starting Qt tools that are Mac OS X bundles. @param toolname plain name of the tool (e.g. "designer") (string or QString) @param version indication for the requested version (Qt 4) (integer) @param args name of input file for tool, if any (QStringList) @return command-name and args for QProcess (tuple) """ if version != 4: return ("", QStringList()) fullBundle = getQtMacBundle(toolname) if fullBundle == "": return ("", QStringList()) newArgs = QStringList() newArgs.append("-a") newArgs.append(fullBundle) if not args.isEmpty(): newArgs.append("--args") newArgs += args return ("open", newArgs) ################################################################################ # Qt utility functions below ################################################################################ def generatePySideToolPath(toolname): """ Module function to generate the executable path for a PySide tool. @param toolname base name of the tool (string or QString) @return the PySide tool path with extension (string) """ if isWindowsPlatform(): if toolname == "pyside-uic": return os.path.join(sys.prefix, "Scripts", toolname + '.exe') else: return os.path.join(sys.prefix, "Lib", "site-packages", "PySide", toolname + ".exe") else: return toolname ################################################################################ # Other utility functions below ################################################################################ def generateVersionInfo(linesep = '\n'): """ Module function to generate a string with various version infos. @param linesep string to be used to separate lines (string) @return string with version infos (string) """ try: import sipconfig sip_version_str = sipconfig.Configuration().sip_version_str except ImportError: sip_version_str = "sip version not available" info = "Version Numbers:%s Python %s%s" % \ (linesep, sys.version.split()[0], linesep) if KdeQt.isKDEAvailable(): info += " KDE %s%s PyKDE %s%s" % \ (str(KdeQt.kdeVersionString()), linesep, str(KdeQt.pyKdeVersionString()), linesep) info += " Qt %s%s PyQt4 %s%s" % \ (str(qVersion()), linesep, str(PYQT_VERSION_STR), linesep) info += " sip %s%s QScintilla %s%s" % \ (str(sip_version_str), linesep, str(QSCINTILLA_VERSION_STR), linesep) info += " %s %s%s" % \ (Program, Version, linesep * 2) info += "Platform: %s%s%s%s" % \ (sys.platform, linesep, sys.version, linesep) return info def generatePluginsVersionInfo(linesep = '\n'): """ Module function to generate a string with plugins version infos. @param linesep string to be used to separate lines (string) @return string with plugins version infos (string) """ infoStr = "" app = e4App() if app is not None: try: pm = app.getObject("PluginManager") versions = {} for info in pm.getPluginInfos(): versions[info[0]] = info[2] infoStr = "Plugins Version Numbers:%s" % linesep for pluginName in sorted(versions.keys()): infoStr += " %s %s%s" % (pluginName, versions[pluginName], linesep) except KeyError: pass return infoStr def generateDistroInfo(linesep = '\n'): """ Module function to generate a string with distribution infos. @param linesep string to be used to separate lines (string) @return string with plugins version infos (string) """ infoStr = "" if sys.platform.startswith("linux"): releaseList = glob.glob("/etc/*-release") if releaseList: infoStr = "Distribution Info:%s" % linesep infoParas = [] for rfile in releaseList: try: f = codecs.open(rfile, "r", Preferences.getSystem("StringEncoding"), "replace") lines = f.read().splitlines() f.close except IOError: continue lines.insert(0, rfile) infoParas.append(' ' + (linesep + ' ').join(lines)) infoStr += (linesep + linesep).join(infoParas) return infoStr def checkBlacklistedVersions(): """ Module functions to check for blacklisted versions of the prerequisites. @return flag indicating good versions were found (boolean) """ from install import BlackLists, PlatformsBlackLists # determine the platform dependent black list if isWindowsPlatform(): PlatformBlackLists = PlatformsBlackLists["windows"] elif isLinuxPlatform(): PlatformBlackLists = PlatformsBlackLists["linux"] else: PlatformBlackLists = PlatformsBlackLists["mac"] # check version of sip try: import sipconfig sipVersion = sipconfig.Configuration().sip_version_str # always assume, that snapshots are good if "snapshot" not in sipVersion: # check for blacklisted versions for vers in BlackLists["sip"] + PlatformBlackLists["sip"]: if vers == sipVersion: print 'Sorry, sip version %s is not compatible with eric4.' % vers print 'Please install another version.' return False except ImportError: pass # check version of PyQt from PyQt4.QtCore import PYQT_VERSION_STR pyqtVersion = PYQT_VERSION_STR # always assume, that snapshots are good if "snapshot" not in pyqtVersion: # check for blacklisted versions for vers in BlackLists["PyQt4"] + PlatformBlackLists["PyQt4"]: if vers == pyqtVersion: print 'Sorry, PyQt4 version %s is not compatible with eric4.' % vers print 'Please install another version.' return False # check version of QScintilla from PyQt4.Qsci import QSCINTILLA_VERSION_STR scintillaVersion = QSCINTILLA_VERSION_STR # always assume, that snapshots are new enough if "snapshot" not in scintillaVersion: # check for blacklisted versions for vers in BlackLists["QScintilla2"] + PlatformBlackLists["QScintilla2"]: if vers == scintillaVersion: print 'Sorry, QScintilla2 version %s is not compatible with eric4.' % vers print 'Please install another version.' return False return True ################################################################################ # password handling functions below ################################################################################ def pwEncode(pw): """ Module function to encode a password. @param pw password to encode (string or QString) @return encoded password (string) """ pop = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,;:-_!$?*+#" marker = "CE4" rpw = "".join(random.sample(pop, 32)) + unicode(pw) + "".join(random.sample(pop, 32)) return marker + base64.b64encode(rpw) def pwDecode(epw): """ Module function to decode a password. @param pw encoded password to decode (string or QString) @return decoded password (string) """ epw = str(epw) if not epw.startswith("CE4"): return epw # it was not encoded using pwEncode return base64.b64decode(epw[3:])[32:-32] ################################################################################ # posix compatibility functions below ################################################################################ def posix_GetUserName(): """ Function to get the user name under Posix systems. @return user name (string) """ try: import pwd return pwd.getpwuid(os.getuid())[0] except ImportError: try: u = getEnvironmentEntry('USER') except KeyError: u = getEnvironmentEntry('user', None) return u ################################################################################ # win32 compatibility functions below ################################################################################ def win32_Kill(pid): """ Function to provide an os.kill equivalent for Win32. @param pid process id """ import win32api handle = win32api.OpenProcess(1, 0, pid) return (0 != win32api.TerminateProcess(handle, 0)) def win32_GetUserName(): """ Function to get the user name under Win32. @return user name (string) """ try: import win32api return win32api.GetUserName() except ImportError: try: u = getEnvironmentEntry('USERNAME') except KeyError: u = getEnvironmentEntry('username', None) return u eric4-4.5.18/eric/Utilities/PaxHeaders.8617/ModuleParser.py0000644000175000001440000000013212261012652021435 xustar000000000000000030 mtime=1388582314.092103597 30 atime=1389081085.512724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/Utilities/ModuleParser.py0000644000175000001440000015001112261012652021165 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Parse a Python module file. This module is based on pyclbr.py as of Python 2.2.2 BUGS (from pyclbr.py)
    • Code that doesn't pass tabnanny or python -t will confuse it, unless you set the module TABWIDTH variable (default 8) to the correct tab width for the file.
    """ import sys import os import imp import re import Utilities __all__ = ["Module", "Class", "Function", "RbModule", "readModule"] TABWIDTH = 4 PTL_SOURCE = 128 RB_SOURCE = 129 SUPPORTED_TYPES = [imp.PY_SOURCE, PTL_SOURCE, RB_SOURCE] _py_getnext = re.compile(r""" (?P \""" (?P [^"\\]* (?: (?: \\. | "(?!"") ) [^"\\]* )* ) \""" | ''' (?P [^'\\]* (?: (?: \\. | '(?!'') ) [^'\\]* )* ) ''' | " [^"\\\n]* (?: \\. [^"\\\n]*)* " | ' [^'\\\n]* (?: \\. [^'\\\n]*)* ' | \#\#\# (?P [^#\\]* (?: (?: \\. | \#(?!\#\#) ) [^#\\]* )* ) \#\#\# ) | (?P (?<= :) \s* [ru]? \""" (?P [^"\\]* (?: (?: \\. | "(?!"") ) [^"\\]* )* ) \""" | (?<= :) \s* [ru]? ''' (?P [^'\\]* (?: (?: \\. | '(?!'') ) [^'\\]* )* ) ''' | (?<= :) \s* \#\#\# (?P [^#\\]* (?: (?: \\. | \#(?!\#\#) ) [^#\\]* )* ) \#\#\# ) | (?P ^ (?P [ \t]* ) (?P @classmethod | @staticmethod ) ) | (?P (^ [ \t]* @ (?: PyQt4 \. )? (?: QtCore \. )? (?: pyqtSignature | pyqtSlot ) [ \t]* \( (?P [^)]* ) \) \s* )? ^ (?P [ \t]* ) def [ \t]+ (?P [a-zA-Z_] \w* ) (?: [ \t]* \[ (?: plain | html ) \] )? [ \t]* \( (?P (?: [^)] | \)[ \t]*,? )*? ) \) [ \t]* : ) | (?P ^ (?P [ \t]* ) class [ \t]+ (?P [a-zA-Z_] \w* ) [ \t]* (?P \( [^)]* \) )? [ \t]* : ) | (?P ^ (?P [ \t]* ) self [ \t]* \. [ \t]* (?P [a-zA-Z_] \w* ) [ \t]* = ) | (?P ^ (?P [ \t]* ) (?P [a-zA-Z_] \w* ) [ \t]* = ) | (?P ^ import [ \t]+ (?P (?: [^#;\\\n]+ (?: \\\n )* )* ) ) | (?P ^ from [ \t]+ (?P [a-zA-Z_.] \w* (?: [ \t]* \. [ \t]* [a-zA-Z_] \w* )* ) [ \t]+ import [ \t]+ (?P (?: [^#;\\\n]+ (?: \\\n )* )* ) ) | (?P ^ (?P [ \t]* ) (?: (?: if | elif ) [ \t]+ [^:]* | else [ \t]* ) : (?= \s* def) ) """, re.VERBOSE | re.DOTALL | re.MULTILINE).search _rb_getnext = re.compile(r""" (?P =begin [ \t]+ edoc (?P .*? ) =end ) | (?P =begin .*? =end | <<-? (?P [a-zA-Z0-9_]+? ) [ \t]* .*? (?P=HereMarker1) | <<-? ['"] (?P .*? ) ['"] [ \t]* .*? (?P=HereMarker2) | " [^"\\\n]* (?: \\. [^"\\\n]*)* " | ' [^'\\\n]* (?: \\. [^'\\\n]*)* ' ) | (?P ^ [ \t]* \#+ .*? $ ) | (?P ^ (?P [ \t]* ) def [ \t]+ (?: (?P [a-zA-Z0-9_]+ (?: \. | :: ) [a-zA-Z_] [a-zA-Z0-9_?!=]* ) | (?P [a-zA-Z_] [a-zA-Z0-9_?!=]* ) | (?P [^( \t]{1,3} ) ) [ \t]* (?: \( (?P (?: [^)] | \)[ \t]*,? )*? ) \) )? [ \t]* ) | (?P ^ (?P [ \t]* ) class (?: [ \t]+ (?P [A-Z] [a-zA-Z0-9_]* ) [ \t]* (?P < [ \t]* [A-Z] [a-zA-Z0-9_]* )? | [ \t]* << [ \t]* (?P [a-zA-Z_] [a-zA-Z0-9_]* ) ) [ \t]* ) | (?P \( [ \t]* class .*? end [ \t]* \) ) | (?P ^ (?P [ \t]* ) module [ \t]+ (?P [A-Z] [a-zA-Z0-9_]* ) [ \t]* ) | (?P ^ (?P [ \t]* ) (?: (?P private | public | protected ) [^_] | (?P private_class_method | public_class_method ) ) \(? [ \t]* (?P (?: : [a-zA-Z0-9_]+ , \s* )* (?: : [a-zA-Z0-9_]+ )+ )? [ \t]* \)? ) | (?P ^ (?P [ \t]* ) (?P (?: @ | @@ | [A-Z]) [a-zA-Z0-9_]* ) [ \t]* = ) | (?P ^ (?P [ \t]* ) attr (?P (?: _accessor | _reader | _writer ) )? \(? [ \t]* (?P (?: : [a-zA-Z0-9_]+ , \s* )* (?: : [a-zA-Z0-9_]+ | true | false )+ ) [ \t]* \)? ) | (?P ^ [ \t]* (?: if | unless | case | while | until | for | begin ) \b [^_] | [ \t]* do [ \t]* (?: \| .*? \| )? [ \t]* $ ) | (?P \b (?: if ) \b [^_] .*? $ | \b (?: if ) \b [^_] .*? end [ \t]* $ ) | (?P [ \t]* (?: end [ \t]* $ | end \b [^_] ) ) """, re.VERBOSE | re.DOTALL | re.MULTILINE).search _hashsub = re.compile(r"""^([ \t]*)#[ \t]?""", re.MULTILINE).sub _commentsub = re.compile(r"""#[^\n]*\n|#[^\n]*$""").sub _modules = {} # cache of modules we've seen class VisibilityBase(object): """ Class implementing the visibility aspect of all objects. """ def isPrivate(self): """ Public method to check, if the visibility is Private. @return flag indicating Private visibility (boolean) """ return self.visibility == 0 def isProtected(self): """ Public method to check, if the visibility is Protected. @return flag indicating Protected visibility (boolean) """ return self.visibility == 1 def isPublic(self): """ Public method to check, if the visibility is Public. @return flag indicating Public visibility (boolean) """ return self.visibility == 2 def setPrivate(self): """ Public method to set the visibility to Private. """ self.visibility = 0 def setProtected(self): """ Public method to set the visibility to Protected. """ self.visibility = 1 def setPublic(self): """ Public method to set the visibility to Public. """ self.visibility = 2 class Module(object): ''' Class to represent a Python module. ''' def __init__(self, name, file=None, type=None): """ Constructor @param name name of this module (string) @param file filename of file containing this module (string) @param type type of this module """ self.name = name self.file = file self.modules = {} self.modules_counts = {} self.classes = {} self.classes_counts = {} self.functions = {} self.functions_counts = {} self.description = "" self.globals = {} self.imports = [] self.from_imports = {} self.package = '.'.join(name.split('.')[:-1]) self.type = type if type in [imp.PY_SOURCE, PTL_SOURCE]: self._getnext = _py_getnext elif type == RB_SOURCE: self._getnext = _rb_getnext else: self._getnext = None def addClass(self, name, _class): """ Public method to add information about a class. @param name name of class to be added (string) @param _class Class object to be added """ if self.classes.has_key(name): self.classes_counts[name] += 1 name = "%s_%d" % (name, self.classes_counts[name]) else: self.classes_counts[name] = 0 self.classes[name] = _class def addModule(self, name, module): """ Public method to add information about a Ruby module. @param name name of module to be added (string) @param module Module object to be added """ if self.modules.has_key(name): self.modules_counts[name] += 1 name = "%s_%d" % (name, self.modules_counts[name]) else: self.modules_counts[name] = 0 self.modules[name] = module def addFunction(self, name, function): """ Public method to add information about a function. @param name name of function to be added (string) @param function Function object to be added """ if self.functions.has_key(name): self.functions_counts[name] += 1 name = "%s_%d" % (name, self.functions_counts[name]) else: self.functions_counts[name] = 0 self.functions[name] = function def addGlobal(self, name, attr): """ Public method to add information about global variables. @param name name of the global to add (string) @param attr Attribute object to be added """ if not name in self.globals: self.globals[name] = attr def addDescription(self, description): """ Protected method to store the modules docstring. @param description the docstring to be stored (string) """ self.description = description def scan(self, src): """ Public method to scan the source text and retrieve the relevant information. @param src the source text to be scanned (string) """ if self.type in [imp.PY_SOURCE, PTL_SOURCE]: self.__py_scan(src) elif self.type == RB_SOURCE: self.__rb_scan(src) def __py_setVisibility(self, object): """ Private method to set the visibility of an object. @param object reference to the object (Attribute, Class or Function) """ if object.name.startswith('__'): object.setPrivate() elif object.name.startswith('_'): object.setProtected() else: object.setPublic() def __py_scan(self, src): """ Private method to scan the source text of a Python module and retrieve the relevant information. @param src the source text to be scanned (string) """ lineno, last_lineno_pos = 1, 0 classstack = [] # stack of (class, indent) pairs conditionalsstack = [] # stack of indents of conditional defines deltastack = [] deltaindent = 0 deltaindentcalculated = 0 i = 0 modulelevel = 1 cur_obj = self modifierType = Function.General modifierIndent = -1 while True: m = self._getnext(src, i) if not m: break start, i = m.span() if m.start("MethodModifier") >= 0: modifierIndent = _indent(m.group("MethodModifierIndent")) modifierType = m.group("MethodModifierType") elif m.start("Method") >= 0: # found a method definition or function thisindent = _indent(m.group("MethodIndent")) meth_name = m.group("MethodName") meth_sig = m.group("MethodSignature") meth_sig = meth_sig.replace('\\\n', '') if m.group("MethodPyQtSignature") is not None: meth_pyqtSig = m.group("MethodPyQtSignature")\ .replace('\\\n', '')\ .split('result')[0]\ .strip("\"', \t") else: meth_pyqtSig = None lineno = lineno + src.count('\n', last_lineno_pos, start) last_lineno_pos = start if modifierType and modifierIndent == thisindent: if modifierType == "@staticmethod": modifier = Function.Static elif modifierType == "@classmethod": modifier = Function.Class else: modifier = Function.General else: modifier = Function.General # modify indentation level for conditional defines if conditionalsstack: if thisindent > conditionalsstack[-1]: if not deltaindentcalculated: deltastack.append(thisindent - conditionalsstack[-1]) deltaindent = reduce(lambda x,y: x+y, deltastack) deltaindentcalculated = 1 thisindent -= deltaindent else: while conditionalsstack and \ conditionalsstack[-1] >= thisindent: del conditionalsstack[-1] if deltastack: del deltastack[-1] deltaindentcalculated = 0 # close all classes indented at least as much while classstack and \ classstack[-1][1] >= thisindent: if classstack[-1][1] == thisindent and \ classstack[-1][0] is not None and \ isinstance(classstack[-1][0], Class): # we got a class at the same indentation level; # record the end line of this class classstack[-1][0].setEndLine(lineno - 1) del classstack[-1] if classstack: csi = -1 while csi >= -len(classstack): # nested defs are added to the class cur_class = classstack[csi][0] csi -= 1 if cur_class is None: continue if isinstance(cur_class, Class): # it's a class method f = Function(None, meth_name, None, lineno, meth_sig, meth_pyqtSig, modifierType=modifier) self.__py_setVisibility(f) cur_class.addMethod(meth_name, f) break else: # it's a nested function of a module function f = Function(self.name, meth_name, self.file, lineno, meth_sig, meth_pyqtSig, modifierType=modifier) self.__py_setVisibility(f) self.addFunction(meth_name, f) else: # it's a module function f = Function(self.name, meth_name, self.file, lineno, meth_sig, meth_pyqtSig, modifierType=modifier) self.__py_setVisibility(f) self.addFunction(meth_name, f) cur_obj = f classstack.append((None, thisindent)) # Marker for nested fns # reset the modifier settings modifierType = Function.General modifierIndent = -1 elif m.start("Docstring") >= 0: contents = m.group("DocstringContents3") if contents is not None: contents = _hashsub(r"\1", contents) else: if self.file.lower().endswith('.ptl'): contents = "" else: contents = 1 and m.group("DocstringContents1") \ or m.group("DocstringContents2") if cur_obj: cur_obj.addDescription(contents) elif m.start("String") >= 0: if modulelevel and \ (src[start-len('\r\n'):start] == '\r\n' or \ src[start-len('\n'):start] == '\n' or \ src[start-len('\r'):start] == '\r'): contents = m.group("StringContents3") if contents is not None: contents = _hashsub(r"\1", contents) else: if self.file.lower().endswith('.ptl'): contents = "" else: contents = 1 and m.group("StringContents1") \ or m.group("StringContents2") if cur_obj: cur_obj.addDescription(contents) elif m.start("Class") >= 0: # we found a class definition thisindent = _indent(m.group("ClassIndent")) lineno = lineno + src.count('\n', last_lineno_pos, start) last_lineno_pos = start # close all classes indented at least as much while classstack and \ classstack[-1][1] >= thisindent: if classstack[-1][1] == thisindent and \ classstack[-1][0] is not None and \ isinstance(classstack[-1][0], Class): # we got a class at the same indentation level; # record the end line of this class classstack[-1][0].setEndLine(lineno - 1) del classstack[-1] class_name = m.group("ClassName") inherit = m.group("ClassSupers") if inherit: # the class inherits from other classes inherit = inherit[1:-1].strip() inherit = _commentsub('', inherit) names = [] for n in inherit.split(','): n = n.strip() if n: if self.classes.has_key(n): # we know this super class n = self.classes[n].name else: c = n.split('.') if len(c) > 1: # super class is of the # form module.class: # look in module for class m = c[-2] c = c[-1] if _modules.has_key(m): m = _modules[m] n = m.name names.append(n) inherit = names # remember this class cur_class = Class(self.name, class_name, inherit, self.file, lineno) self.__py_setVisibility(cur_class) cur_obj = cur_class # add nested classes to the module self.addClass(class_name, cur_class) classstack.append((cur_class, thisindent)) elif m.start("Attribute") >= 0: lineno = lineno + src.count('\n', last_lineno_pos, start) last_lineno_pos = start index = -1 while index >= -len(classstack): if classstack[index][0] is not None: attrName = m.group("AttributeName") attr = Attribute(self.name, attrName, self.file, lineno) self.__py_setVisibility(attr) classstack[index][0].addAttribute(attrName, attr) break else: index -= 1 elif m.start("Variable") >= 0: thisindent = _indent(m.group("VariableIndent")) variable_name = m.group("VariableName") lineno = lineno + src.count('\n', last_lineno_pos, start) last_lineno_pos = start if thisindent == 0: # global variable attr = Attribute(self.name, variable_name, self.file, lineno) self.__py_setVisibility(attr) self.addGlobal(variable_name, attr) else: index = -1 while index >= -len(classstack): if classstack[index][1] >= thisindent: index -= 1 else: if classstack[index][0] is not None and \ isinstance(classstack[index][0], Class): attr = Attribute(self.name, variable_name, self.file, lineno) self.__py_setVisibility(attr) classstack[index][0].addGlobal(variable_name, attr) break elif m.start("Import") >= 0: # import module names = [n.strip() for n in "".join( m.group("ImportList").splitlines()).replace("\\", "").split(',')] for name in names: if not name in self.imports: self.imports.append(name) elif m.start("ImportFrom") >= 0: # from module import stuff mod = m.group("ImportFromPath") names = [n.strip() for n in "".join( m.group("ImportFromList").splitlines()).replace("\\", "").split(',')] if not self.from_imports.has_key(mod): self.from_imports[mod] = [] self.from_imports[mod].extend(names) elif m.start("ConditionalDefine") >= 0: # a conditional function/method definition thisindent = _indent(m.group("ConditionalDefineIndent")) while conditionalsstack and \ conditionalsstack[-1] >= thisindent: del conditionalsstack[-1] if deltastack: del deltastack[-1] conditionalsstack.append(thisindent) deltaindentcalculated = 0 else: assert 0, "regexp _getnext found something unexpected" modulelevel = 0 def __rb_scan(self, src): """ Private method to scan the source text of a Python module and retrieve the relevant information. @param src the source text to be scanned (string) """ lineno, last_lineno_pos = 1, 0 classstack = [] # stack of (class, indent) pairs acstack = [] # stack of (access control, indent) pairs indent = 0 i = 0 cur_obj = self while True: m = self._getnext(src, i) if not m: break start, i = m.span() if m.start("Method") >= 0: # found a method definition or function thisindent = indent indent += 1 meth_name = m.group("MethodName") or \ m.group("MethodName2") or \ m.group("MethodName3") meth_sig = m.group("MethodSignature") meth_sig = meth_sig and meth_sig.replace('\\\n', '') or '' lineno = lineno + src.count('\n', last_lineno_pos, start) last_lineno_pos = start if meth_name.startswith('self.'): meth_name = meth_name[5:] elif meth_name.startswith('self::'): meth_name = meth_name[6:] # close all classes/modules indented at least as much while classstack and \ classstack[-1][1] >= thisindent: del classstack[-1] while acstack and \ acstack[-1][1] >= thisindent: del acstack[-1] if classstack: csi = -1 while csi >= -len(classstack): # nested defs are added to the class cur_class = classstack[csi][0] csi -= 1 if cur_class is None: continue if isinstance(cur_class, Class) or \ isinstance(cur_class, RbModule): # it's a class/module method f = Function(None, meth_name, None, lineno, meth_sig) cur_class.addMethod(meth_name, f) break else: # it's a nested function of a module function f = Function(self.name, meth_name, self.file, lineno, meth_sig) self.addFunction(meth_name, f) # set access control if acstack: accesscontrol = acstack[-1][0] if accesscontrol == "private": f.setPrivate() elif accesscontrol == "protected": f.setProtected() elif accesscontrol == "public": f.setPublic() else: # it's a function f = Function(self.name, meth_name, self.file, lineno, meth_sig) self.addFunction(meth_name, f) cur_obj = f classstack.append((None, thisindent)) # Marker for nested fns elif m.start("Docstring") >= 0: contents = m.group("DocstringContents") if contents is not None: contents = _hashsub(r"\1", contents) if cur_obj: cur_obj.addDescription(contents) elif m.start("String") >= 0: pass elif m.start("Comment") >= 0: pass elif m.start("ClassIgnored") >= 0: pass elif m.start("Class") >= 0: # we found a class definition thisindent = indent indent += 1 # close all classes/modules indented at least as much while classstack and \ classstack[-1][1] >= thisindent: del classstack[-1] lineno = lineno + src.count('\n', last_lineno_pos, start) last_lineno_pos = start class_name = m.group("ClassName") or m.group("ClassName2") inherit = m.group("ClassSupers") if inherit: # the class inherits from other classes inherit = inherit[1:].strip() inherit = [_commentsub('', inherit)] # remember this class cur_class = Class(self.name, class_name, inherit, self.file, lineno) # add nested classes to the file if classstack and isinstance(classstack[-1][0], RbModule): parent_obj = classstack[-1][0] else: parent_obj = self if parent_obj.classes.has_key(class_name): cur_class = parent_obj.classes[class_name] elif classstack and \ isinstance(classstack[-1][0], Class) and \ class_name == "self": cur_class = classstack[-1][0] else: parent_obj.addClass(class_name, cur_class) cur_obj = cur_class classstack.append((cur_class, thisindent)) while acstack and \ acstack[-1][1] >= thisindent: del acstack[-1] acstack.append(["public", thisindent]) # default access control is 'public' elif m.start("Module") >= 0: # we found a module definition thisindent = indent indent += 1 # close all classes/modules indented at least as much while classstack and \ classstack[-1][1] >= thisindent: del classstack[-1] lineno = lineno + src.count('\n', last_lineno_pos, start) last_lineno_pos = start module_name = m.group("ModuleName") # remember this class cur_class = RbModule(self.name, module_name, self.file, lineno) # add nested Ruby modules to the file if self.modules.has_key(module_name): cur_class = self.modules[module_name] else: self.addModule(module_name, cur_class) cur_obj = cur_class classstack.append((cur_class, thisindent)) while acstack and \ acstack[-1][1] >= thisindent: del acstack[-1] acstack.append(["public", thisindent]) # default access control is 'public' elif m.start("AccessControl") >= 0: aclist = m.group("AccessControlList") if aclist is None: index = -1 while index >= -len(acstack): if acstack[index][1] < indent: actype = m.group("AccessControlType") or \ m.group("AccessControlType2").split('_')[0] acstack[index][0] = actype.lower() break else: index -= 1 else: index = -1 while index >= -len(classstack): if classstack[index][0] is not None and \ not isinstance(classstack[index][0], Function) and \ not classstack[index][1] >= indent: parent = classstack[index][0] actype = m.group("AccessControlType") or \ m.group("AccessControlType2").split('_')[0] actype = actype.lower() for name in aclist.split(","): name = name.strip()[1:] # get rid of leading ':' acmeth = parent.getMethod(name) if acmeth is None: continue if actype == "private": acmeth.setPrivate() elif actype == "protected": acmeth.setProtected() elif actype == "public": acmeth.setPublic() break else: index -= 1 elif m.start("Attribute") >= 0: lineno = lineno + src.count('\n', last_lineno_pos, start) last_lineno_pos = start index = -1 while index >= -len(classstack): if classstack[index][0] is not None and \ not isinstance(classstack[index][0], Function) and \ not classstack[index][1] >= indent: attrName = m.group("AttributeName") attr = Attribute(self.name, attrName, self.file, lineno) if attrName.startswith("@@") or attrName[0].isupper(): classstack[index][0].addGlobal(attrName, attr) else: classstack[index][0].addAttribute(attrName, attr) break else: index -= 1 else: attrName = m.group("AttributeName") if attrName[0] != "@": attr = Attribute(self.name, attrName, self.file, lineno) self.addGlobal(attrName, attr) elif m.start("Attr") >= 0: lineno = lineno + src.count('\n', last_lineno_pos, start) last_lineno_pos = start index = -1 while index >= -len(classstack): if classstack[index][0] is not None and \ not isinstance(classstack[index][0], Function) and \ not classstack[index][1] >= indent: parent = classstack[index][0] if m.group("AttrType") is None: nv = m.group("AttrList").split(",") if not nv: break name = nv[0].strip()[1:] # get rid of leading ':' attr = parent.getAttribute("@"+name) or \ parent.getAttribute("@@"+name) or \ Attribute(self.name, "@"+name, file, lineno) if len(nv) == 1 or nv[1].strip() == "false": attr.setProtected() elif nv[1].strip() == "true": attr.setPublic() parent.addAttribute(attr.name, attr) else: access = m.group("AttrType") for name in m.group("AttrList").split(","): name = name.strip()[1:] # get rid of leading ':' attr = parent.getAttribute("@"+name) or \ parent.getAttribute("@@"+name) or \ Attribute(self.name, "@"+name, file, lineno) if access == "_accessor": attr.setPublic() elif access == "_reader" or access == "_writer": if attr.isPrivate(): attr.setProtected() elif attr.isProtected(): attr.setPublic() parent.addAttribute(attr.name, attr) break else: index -= 1 elif m.start("Begin") >= 0: # a begin of a block we are not interested in indent += 1 elif m.start("End") >= 0: # an end of a block indent -= 1 if indent < 0: # no negative indent allowed if classstack: # it's a class/module method indent = classstack[-1][1] else: indent = 0 elif m.start("BeginEnd") >= 0: pass else: assert 0, "regexp _getnext found something unexpected" def createHierarchy(self): """ Public method to build the inheritance hierarchy for all classes of this module. @return A dictionary with inheritance hierarchies. """ hierarchy = {} for cls in self.classes.keys(): self.assembleHierarchy(cls, self.classes, [cls], hierarchy) for mod in self.modules.keys(): self.assembleHierarchy(mod, self.modules, [mod], hierarchy) return hierarchy def assembleHierarchy(self, name, classes, path, result): """ Public method to assemble the inheritance hierarchy. This method will traverse the class hierarchy, from a given class and build up a nested dictionary of super-classes. The result is intended to be inverted, i.e. the highest level are the super classes. This code is borrowed from Boa Constructor. @param name name of class to assemble hierarchy (string) @param classes A dictionary of classes to look in. @param path @param result The resultant hierarchy """ rv = {} if classes.has_key(name): for cls in classes[name].super: if not classes.has_key(cls): rv[cls] = {} exhausted = path + [cls] exhausted.reverse() self.addPathToHierarchy(exhausted, result, self.addPathToHierarchy) else: rv[cls] = self.assembleHierarchy(cls, classes, path + [cls], result) if len(rv) == 0: exhausted = path exhausted.reverse() self.addPathToHierarchy(exhausted, result, self.addPathToHierarchy) def addPathToHierarchy(self, path, result, fn): """ Public method to put the exhausted path into the result dictionary. @param path the exhausted path of classes @param result the result dictionary @param fn function to call for classe that are already part of the result dictionary """ if path[0] in result.keys(): if len(path) > 1: fn(path[1:], result[path[0]], fn) else: for part in path: result[part] = {} result = result[part] def getName(self): """ Public method to retrieve the modules name. @return module name (string) """ return self.name def getFileName(self): """ Public method to retrieve the modules filename. @return module filename (string) """ return self.file def getType(self): """ Public method to get the type of the module's source. @return type of the modules's source (string) """ if self.type in [imp.PY_SOURCE, PTL_SOURCE]: type = "Python" elif self.type == RB_SOURCE: type = "Ruby" else: type = "" return type class Class(VisibilityBase): ''' Class to represent a Python class. ''' def __init__(self, module, name, super, file, lineno): """ Constructor @param module name of module containing this class (string) @param name name of the class (string) @param super list of classnames this class is inherited from (list of strings) @param file name of file containing this class (string) @param lineno linenumber of the class definition (integer) """ self.module = module self.name = name if super is None: super = [] self.super = super self.methods = {} self.attributes = {} self.globals = {} self.file = file self.lineno = lineno self.endlineno = -1 # marker for "not set" self.description = "" self.setPublic() def addMethod(self, name, function): """ Public method to add information about a method. @param name name of method to be added (string) @param function Function object to be added """ self.methods[name] = function def getMethod(self, name): """ Public method to retrieve a method by name. @param name name of the method (string) @return the named method or None """ try: return self.methods[name] except KeyError: return None def addAttribute(self, name, attr): """ Public method to add information about attributes. @param name name of the attribute to add (string) @param attr Attribute object to be added """ if not name in self.attributes: self.attributes[name] = attr def getAttribute(self, name): """ Public method to retrieve an attribute by name. @param name name of the attribute (string) @return the named attribute or None """ try: return self.attributes[name] except KeyError: return None def addGlobal(self, name, attr): """ Public method to add information about global (class) variables. @param name name of the global to add (string) @param attr Attribute object to be added """ if not name in self.globals: self.globals[name] = attr def addDescription(self, description): """ Public method to store the class docstring. @param description the docstring to be stored (string) """ self.description = description def setEndLine(self, endLineNo): """ Public method to record the number of the last line of a class. @param endLineNo number of the last line (integer) """ self.endlineno = endLineNo class RbModule(Class): ''' Class to represent a Ruby module. ''' def __init__(self, module, name, file, lineno): """ Constructor @param module name of module containing this class (string) @param name name of the class (string) @param file name of file containing this class (string) @param lineno linenumber of the class definition (integer) """ Class.__init__(self, module, name, None, file, lineno) self.classes = {} def addClass(self, name, _class): """ Public method to add information about a class. @param name name of class to be added (string) @param _class Class object to be added """ self.classes[name] = _class class Function(VisibilityBase): ''' Class to represent a Python function or method. ''' General = 0 Static = 1 Class = 2 def __init__(self, module, name, file, lineno, signature = '', pyqtSignature = None, modifierType=General): """ Constructor @param module name of module containing this function (string) @param name name of the function (string) @param file name of file containing this function (string) @param lineno linenumber of the function definition (integer) @param signature the functions call signature (string) @param pyqtSignature the functions PyQt signature (string) @param modifierType type of the function """ self.module = module self.name = name self.file = file self.lineno = lineno signature = _commentsub('', signature) self.parameters = [e.strip() for e in signature.split(',')] self.description = "" self.pyqtSignature = pyqtSignature self.modifier = modifierType self.setPublic() def addDescription(self, description): """ Public method to store the functions docstring. @param description the docstring to be stored (string) """ self.description = description class Attribute(VisibilityBase): ''' Class to represent a Python function or method. ''' def __init__(self, module, name, file, lineno): """ Constructor @param module name of module containing this function (string) @param name name of the function (string) @param file name of file containing this function (string) @param lineno linenumber of the function definition (integer) """ self.module = module self.name = name self.file = file self.lineno = lineno self.setPublic() def readModule(module, path = [], inpackage = False, basename = "", extensions = None, caching = True): ''' Function to read a module file and parse it. The module is searched in path and sys.path, read and parsed. If the module was parsed before, the information is taken from a cache in order to speed up processing. @param module Name of the module to be parsed (string) @param path Searchpath for the module (list of strings) @param inpackage Flag indicating that module is inside a package (boolean) @param basename a path basename. This basename is deleted from the filename of the module file to be read. (string) @param extensions list of extensions, which should be considered valid source file extensions (list of strings) @param caching flag indicating that the parsed module should be cached (boolean) @return reference to a Module object containing the parsed module information (Module) ''' if extensions is None: _extensions = ['.py', '.pyw', '.ptl', '.rb'] else: _extensions = extensions[:] try: _extensions.remove('.py') except ValueError: pass modname = module if os.path.exists(module): path = [os.path.dirname(module)] if module.lower().endswith(".py"): module = module[:-3] if os.path.exists(os.path.join(path[0], "__init__.py")) or \ os.path.exists(os.path.join(path[0], "__init__.rb")) or \ inpackage: if basename: module = module.replace(basename, "") if os.path.isabs(module): modname = os.path.splitdrive(module)[1][len(os.sep):] else: modname = module modname = modname.replace(os.sep, '.') inpackage = 1 else: modname = os.path.basename(module) for ext in _extensions: if modname.lower().endswith(ext): modname = modname[:-len(ext)] break module = os.path.basename(module) if caching and _modules.has_key(modname): # we've seen this module before... return _modules[modname] if module in sys.builtin_module_names: # this is a built-in module mod = Module(modname, None, None) if caching: _modules[modname] = mod return mod # search the path for the module f = None if inpackage: try: f, file, (suff, mode, type) = find_module(module, path, _extensions) except ImportError: f = None if f is None: fullpath = list(path) + sys.path f, file, (suff, mode, type) = find_module(module, fullpath, _extensions) if type not in SUPPORTED_TYPES: # not supported source, can't do anything with this module if f: f.close() _modules[modname] = Module(modname, None, None) return _modules[modname] mod = Module(modname, file, type) try: src = Utilities.decode(f.read())[0] mod.scan(src) finally: f.close() if caching: _modules[modname] = mod return mod def _indent(ws): """ Protected function to determine the indent width of a whitespace string. @param ws The whitespace string to be cheked. (string) @return Length of the whitespace string after tab expansion. """ return len(ws.expandtabs(TABWIDTH)) def find_module(name, path, extensions): """ Module function to extend the Python module finding mechanism. This function searches for files in the given path. If the filename doesn't have an extension or an extension of .py, the normal search implemented in the imp module is used. For all other supported files only path is searched. @param name filename or modulename to search for (string) @param path search path (list of strings) @param extensions list of extensions, which should be considered valid source file extensions (list of strings) @return tuple of the open file, pathname and description. Description is a tuple of file suffix, file mode and file type) @exception ImportError The file or module wasn't found. """ for ext in extensions: if name.lower().endswith(ext): for p in path: # only search in path if os.path.exists(os.path.join(p, name)): pathname = os.path.join(p, name) if ext == '.ptl': # Quixote page template return (open(pathname), pathname, ('.ptl', 'r', PTL_SOURCE)) elif ext == '.rb': # Ruby source file return (open(pathname), pathname, ('.rb', 'r', RB_SOURCE)) else: return (open(pathname), pathname, (ext, 'r', imp.PY_SOURCE)) raise ImportError # standard Python module file if name.lower().endswith('.py'): name = name[:-3] if type(name) == type(u""): name = name.encode('utf-8') return imp.find_module(name, path) def resetParsedModules(): """ Module function to reset the list of modules already parsed. """ _modules.clear() def resetParsedModule(module, basename = ""): """ Module function to clear one module from the list of parsed modules. @param module Name of the module to be parsed (string) @param basename a path basename. This basename is deleted from the filename of the module file to be cleared. (string) """ modname = module if os.path.exists(module): path = [os.path.dirname(module)] if module.lower().endswith(".py"): module = module[:-3] if os.path.exists(os.path.join(path[0], "__init__.py")): if basename: module = module.replace(basename, "") modname = module.replace(os.sep, '.') else: modname = os.path.basename(module) if modname.lower().endswith(".ptl") or modname.lower().endswith(".pyw"): modname = modname[:-4] elif modname.lower().endswith(".rb"): modname = modname[:-3] module = os.path.basename(module) if _modules.has_key(modname): del _modules[modname] if __name__ == "__main__": # Main program for testing. mod = sys.argv[1] module = readModule(mod) for cls in module.classes.values(): print "--------------" print cls.name for meth in cls.methods.values(): print meth.name, meth.pyqtSignature eric4-4.5.18/eric/Utilities/PaxHeaders.8617/AutoSaver.py0000644000175000001440000000013212261012652020744 xustar000000000000000030 mtime=1388582314.095103635 30 atime=1389081085.512724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/Utilities/AutoSaver.py0000644000175000001440000000335312261012652020502 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing an auto saver class. """ from PyQt4.QtCore import QObject, QBasicTimer, QTime class AutoSaver(QObject): """ Class implementing the auto saver. """ AUTOSAVE_IN = 1000 * 3 MAXWAIT = 1000 * 15 def __init__(self, parent, save): """ Constructor @param parent reference to the parent object (QObject) @param save slot to be called to perform the save operation """ QObject.__init__(self, parent) if parent is None: raise RuntimeError("AutoSaver: parent must not be None.") self.__save = save self.__timer = QBasicTimer() self.__firstChange = QTime() def changeOccurred(self): """ Public slot handling a change. """ if self.__firstChange.isNull(): self.__firstChange.start() if self.__firstChange.elapsed() > self.MAXWAIT: self.saveIfNeccessary() else: self.__timer.start(self.AUTOSAVE_IN, self) def timerEvent(self, evt): """ Protected method handling timer events. @param evt reference to the timer event (QTimerEvent) """ if evt.timerId() == self.__timer.timerId(): self.saveIfNeccessary() else: QObject.timerEvent(self, evt) def saveIfNeccessary(self): """ Public method to activate the save operation. """ if not self.__timer.isActive(): return self.__timer.stop() self.__firstChange = QTime() self.__save() eric4-4.5.18/eric/Utilities/PaxHeaders.8617/Startup.py0000644000175000001440000000013212261012652020475 xustar000000000000000030 mtime=1388582314.110103825 30 atime=1389081085.512724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/Utilities/Startup.py0000644000175000001440000001747212261012652020242 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2002 - 2014 Detlev Offenbach # """ Module implementing some startup helper funcions """ import os import sys from PyQt4.QtCore import QTranslator, QTextCodec, QLocale, QDir, SIGNAL, SLOT, \ QLibraryInfo from PyQt4.QtGui import QApplication from KdeQt.KQApplication import KQApplication import Preferences import Utilities from UI.Info import Version import UI.PixmapCache from eric4config import getConfig def makeAppInfo(argv, name, arg, description, options = []): """ Function to generate a dictionary describing the application. @param argv list of commandline parameters (list of strings) @param name name of the application (string) @param arg commandline arguments (string) @param description text describing the application (string) @param options list of additional commandline options (list of tuples of two strings (commandline option, option description)). The options --version, --help and -h are always present and must not be repeated in this list. @return dictionary describing the application """ return { "bin": argv[0], "arg": arg, "name": name, "description": description, "version": Version, "options" : options } def usage(appinfo, optlen = 12): """ Function to show the usage information. @param appinfo dictionary describing the application @param optlen length of the field for the commandline option (integer) """ options = [\ ("--version", "show the program's version number and exit"), ("-h, --help", "show this help message and exit") ] options.extend(appinfo["options"]) print \ """ Usage: %(bin)s [OPTIONS] %(arg)s %(name)s - %(description)s Options:""" % appinfo for opt in options: print " %s %s" % (opt[0].ljust(optlen), opt[1]) sys.exit(0) def version(appinfo): """ Function to show the version information. @param appinfo dictionary describing the application """ print \ """ %(name)s %(version)s %(description)s Copyright (c) 2002 - 2014 Detlev Offenbach This is free software; see LICENSE.GPL3 for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.""" % appinfo sys.exit(0) def handleArgs(argv, appinfo): """ Function to handle the always present commandline options. @param argv list of commandline parameters (list of strings) @param appinfo dictionary describing the application @return index of the '--' option (integer). This is used to tell the application, that all additional option don't belong to the application. """ ddindex = 30000 # arbitrarily large number args = { "--version": version, "--help": usage, "-h": usage } if '--' in argv: ddindex = argv.index("--") for a in args: if a in argv and argv.index(a) < ddindex: args[a](appinfo) return ddindex def loadTranslatorForLocale(dirs, tn): """ Function to find and load a specific translation. @param dirs Searchpath for the translations. (list of strings) @param tn The translation to be loaded. (string) @return Tuple of a status flag and the loaded translator. (int, QTranslator) """ trans = QTranslator(None) for dir in dirs: loaded = trans.load(tn, dir) if loaded: return (trans, True) print "Warning: translation file '" + tn + "'could not be loaded." print "Using default." return (None, False) def initializeResourceSearchPath(): """ Function to initialize the default mime source factory. """ defaultIconPath = os.path.join(getConfig('ericIconDir'), "default") iconPaths = Preferences.getIcons("Path") for iconPath in iconPaths: if not iconPath.isEmpty(): UI.PixmapCache.addSearchPath(iconPath) if not defaultIconPath in iconPaths: UI.PixmapCache.addSearchPath(defaultIconPath) # the translator must not be deleted, therefore we save them here loaded_translators = {} def loadTranslators(qtTransDir, app, translationFiles = ()): """ Function to load all required translations. @param qtTransDir directory of the Qt translations files (string) @param app reference to the application object (QApplication) @param translationFiles tuple of additional translations to be loaded (tuple of strings) @return the requested locale (string) """ translations = ("qt", "eric4") + translationFiles loc = Preferences.getUILanguage() if loc is None: return if loc == "System": loc = str(QLocale.system().name()) if loc != "C": dirs = [getConfig('ericTranslationsDir'), Utilities.getConfigDir()] if qtTransDir is not None: dirs.append(qtTransDir) loca = loc for tf in ["%s_%s" % (tr, loc) for tr in translations]: translator, ok = loadTranslatorForLocale(dirs, tf) loaded_translators[tf] = translator if ok: app.installTranslator(translator) else: if tf.startswith("eric4"): loca = None loc = loca else: loc = None return loc def setLibraryPaths(): """ Module function to set the Qt library paths correctly for windows systems. """ if Utilities.isWindowsPlatform(): libPath = os.path.join(Utilities.getPyQt4ModulesDirectory(), "plugins") if os.path.exists(libPath): libPath = Utilities.fromNativeSeparators(libPath) libraryPaths = QApplication.libraryPaths() if libPath not in libraryPaths: libraryPaths.prepend(libPath) QApplication.setLibraryPaths(libraryPaths) def simpleAppStartup(argv, appinfo, mwFactory, kqOptions = [], quitOnLastWindowClosed = True, raiseIt = True): """ Function to start up an application that doesn't need a specialized start up. This function is used by all of eric4's helper programs. @param argv list of commandline parameters (list of strings) @param appinfo dictionary describing the application @param mwFactory factory function generating the main widget. This function must accept the following parameter.
    argv
    list of commandline parameters (list of strings)
    @keyparam kqOptions list of acceptable command line options. This is only used, if the application is running under KDE and pyKDE can be loaded successfully. @keyparam quitOnLastWindowClosed flag indicating to quit the application, if the last window was closed (boolean) @keyparam raiseIt flag indicating to raise the generated application window (boolean) """ ddindex = handleArgs(argv, appinfo) app = KQApplication(argv, kqOptions) app.setQuitOnLastWindowClosed(quitOnLastWindowClosed) try: sys.setappdefaultencoding(str(Preferences.getSystem("StringEncoding"))) except AttributeError: pass setLibraryPaths() initializeResourceSearchPath() QApplication.setWindowIcon(UI.PixmapCache.getIcon("eric.png")) qt4TransDir = Preferences.getQt4TranslationsDir() if not qt4TransDir: qt4TransDir = QLibraryInfo.location(QLibraryInfo.TranslationsPath) loadTranslators(qt4TransDir, app) QTextCodec.setCodecForCStrings(\ QTextCodec.codecForName(str(Preferences.getSystem("StringEncoding"))) ) w = mwFactory(argv) if quitOnLastWindowClosed: app.connect(app, SIGNAL("lastWindowClosed()"), app, SLOT("quit()")) w.show() if raiseIt: w.raise_() return app.exec_() eric4-4.5.18/eric/Utilities/PaxHeaders.8617/uic.py0000644000175000001440000000013212261012652017613 xustar000000000000000030 mtime=1388582314.113103863 30 atime=1389081085.513724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/Utilities/uic.py0000644000175000001440000000756312261012652017360 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2009 - 2014 Detlev Offenbach # """ Module implementing a function to compile all user interface files of a directory or directory tree. """ import os def compileUiFiles(dir, recurse = False): """ Module function to compile the .ui files of a directory tree to Python sources. @param dir name of a directory to scan for .ui files (string or QString) @param recurse flag indicating to recurse into subdirectories (boolean) """ try: from PyQt4.uic import compileUiDir except ImportError: from PyQt4.uic import compileUi def compileUiDir(dir, recurse = False, map = None, **compileUi_args): """ Creates Python modules from Qt Designer .ui files in a directory or directory tree. Note: This function is a modified version of the one found in PyQt4. @param dir Name of the directory to scan for files whose name ends with '.ui'. By default the generated Python module is created in the same directory ending with '.py'. @param recurse flag indicating that any sub-directories should be scanned. @param map an optional callable that is passed the name of the directory containing the '.ui' file and the name of the Python module that will be created. The callable should return a tuple of the name of the directory in which the Python module will be created and the (possibly modified) name of the module. @param compileUi_args any additional keyword arguments that are passed to the compileUi() function that is called to create each Python module. """ def compile_ui(ui_dir, ui_file): """ Local function to compile a single .ui file. @param ui_dir directory containing the .ui file (string) @param ui_file file name of the .ui file (string) """ # Ignore if it doesn't seem to be a .ui file. if ui_file.endswith('.ui'): py_dir = ui_dir py_file = ui_file[:-3] + '.py' # Allow the caller to change the name of the .py file or generate # it in a different directory. if map is not None: py_dir, py_file = map(py_dir, py_file) # Make sure the destination directory exists. try: os.makedirs(py_dir) except: pass ui_path = os.path.join(ui_dir, ui_file) py_path = os.path.join(py_dir, py_file) ui_file = open(ui_path, 'r') py_file = open(py_path, 'w') try: compileUi(ui_file, py_file, **compileUi_args) finally: ui_file.close() py_file.close() if recurse: for root, _, files in os.walk(dir): for ui in files: compile_ui(root, ui) else: for ui in os.listdir(dir): if os.path.isfile(os.path.join(dir, ui)): compile_ui(dir, ui) def pyName(py_dir, py_file): """ Local function to create the Python source file name for the compiled .ui file. @param py_dir suggested name of the directory (string) @param py_file suggested name for the compile source file (string) @return tuple of directory name (string) and source file name (string) """ return py_dir, "Ui_%s" % py_file compileUiDir(dir, recurse, pyName) eric4-4.5.18/eric/PaxHeaders.8617/default_Mac.e4k0000644000175000001440000000007411702363160017326 xustar000000000000000030 atime=1389081085.513724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/default_Mac.e4k0000644000175000001440000017305411702363160017065 0ustar00detlevusers00000000000000 project_new project_open project_close project_save project_save_as project_add_file project_add_directory project_add_translation project_search_new_files project_properties project_user_properties project_filetype_associatios project_lexer_associatios project_debugger_properties project_debugger_properties_load project_debugger_properties_save project_debugger_properties_delete project_debugger_properties_resets project_load_session project_save_session project_delete_session project_code_metrics project_code_coverage project_profile_data project_application_diagram project_plugin_pkglist project_plugin_archive project_plugin_sarchive packagers_cxfreeze doc_eric4_api doc_eric4_doc project_check_pylint project_check_pylintshow project_check_syntax project_check_indentations quit Ctrl+Q new_window Ctrl+Shift+N edit_profile debug_profile project_viewer project_viewer_activate Alt+Shift+P multi_project_viewer multi_project_viewer_activate Alt+Shift+M debug_viewer debug_viewer_activate Alt+Shift+D interpreter_shell interprter_shell_activate Alt+Shift+S terminal terminal_activate Alt+Shift+R file_browser file_browser_activate Alt+Shift+F log_viewer log_viewer_activate Alt+Shift+G task_viewer task_viewer_activate Alt+Shift+T template_viewer template_viewer_activate Alt+Shift+A vertical_toolbox horizontal_toolbox left_sidebar bottom_sidebar whatsThis Shift+F1 helpviewer F1 qt4_documentation pyqt4_documentation python_documentation eric_documentation show_versions check_updates show_downloadable_versions report_bug request_feature unittest unittest_restart unittest_script unittest_project qt_designer4 qt_linguist4 ui_previewer tr_previewer diff_files compare_files sql_browser mini_editor web_browser icon_editor preferences export_preferences import_preferences reload_apis show_external_tools view_profiles configure_toolbars keyboard_shortcuts export_keyboard_shortcuts import_keyboard_shortcuts viewmanager_activate Alt+Shift+E view_next_tab Ctrl+Alt+Tab view_previous_tab Ctrl+Alt+Shift+Tab switch_tabs Ctrl+1 plugin_infos plugin_install plugin_deinstall plugin_repository about_eric about_qt wizards_python_re wizards_qcolordialog wizards_qfiledialog wizards_qfontdialog wizards_qinputdialog wizards_qmessagebox wizards_qregexp dbg_run_script F2 dbg_run_project Shift+F2 dbg_coverage_script dbg_coverage_project dbg_profile_script dbg_profile_project dbg_debug_script F5 dbg_debug_project Shift+F5 dbg_restart_script F4 dbg_stop_script Shift+F10 dbg_continue F6 dbg_continue_to_cursor Shift+F6 dbg_single_step F7 dbg_step_over F8 dbg_step_out F9 dbg_stop F10 dbg_evaluate dbg_execute dbg_variables_filter dbg_exceptions_filter dbg_ignored_exceptions dbg_toggle_breakpoint Shift+F11 dbg_edit_breakpoint Shift+F12 dbg_next_breakpoint Ctrl+Shift+PgDown dbg_previous_breakpoint Ctrl+Shift+PgUp dbg_clear_breakpoint Ctrl+Shift+C vm_edit_undo Ctrl+Z Alt+Backspace vm_edit_redo Ctrl+Shift+Z vm_edit_revert Ctrl+Y vm_edit_cut Ctrl+X Shift+Del vm_edit_copy Ctrl+C Ctrl+Ins vm_edit_paste Ctrl+V Shift+Ins vm_edit_clear Alt+Shift+C vm_edit_indent Ctrl+I vm_edit_unindent Ctrl+Shift+I vm_edit_smart_indent Ctrl+Alt+I vm_edit_comment Ctrl+M vm_edit_uncomment Ctrl+Alt+M vm_edit_stream_comment vm_edit_box_comment vm_edit_select_to_brace Ctrl+E vm_edit_select_all Ctrl+A vm_edit_deselect_all Ctrl+Alt+A vm_edit_convert_eol vm_edit_shorten_empty_lines vm_edit_autocomplete Ctrl+Space vm_edit_autocomplete_from_document Ctrl+Shift+Space vm_edit_autocomplete_from_api Ctrl+Alt+Space vm_edit_autocomplete_from_all Alt+Shift+Space vm_edit_calltip Alt+Space vm_edit_move_left_char Left Meta+B vm_edit_move_right_char Right Meta+F vm_edit_move_up_line Up Meta+P vm_edit_move_down_line Down Meta+N vm_edit_move_left_word_part vm_edit_move_right_word_part vm_edit_move_left_word Alt+Left vm_edit_move_right_word vm_edit_move_first_visible_char vm_edit_move_start_line Ctrl+Left vm_edit_move_end_line Meta+E vm_edit_scroll_down_line Ctrl+Down vm_edit_scroll_up_line Ctrl+Up vm_edit_move_up_para Alt+Up vm_edit_move_down_para Alt+Down vm_edit_move_up_page PgUp vm_edit_move_down_page PgDown Meta+V vm_edit_move_start_text Ctrl+Up vm_edit_move_end_text Ctrl+Down vm_edit_indent_one_level Tab vm_edit_unindent_one_level Shift+Tab vm_edit_extend_selection_left_char Shift+Left Meta+Shift+B vm_edit_extend_selection_right_char Shift+Right Meta+Shift+F vm_edit_extend_selection_up_line Shift+Up Meta+Shift+P vm_edit_extend_selection_down_line Shift+Down Meta+Shift+N vm_edit_extend_selection_left_word_part vm_edit_extend_selection_right_word_part vm_edit_extend_selection_left_word Alt+Shift+Left vm_edit_extend_selection_right_word Alt+Shift+Right vm_edit_extend_selection_first_visible_char vm_edit_extend_selection_end_line Meta+Shift+E vm_edit_extend_selection_up_para Alt+Shift+Up vm_edit_extend_selection_down_para Alt+Shift+Down vm_edit_extend_selection_up_page Shift+PgUp vm_edit_extend_selection_down_page Shift+PgDown Meta+Shift+V vm_edit_extend_selection_start_text Ctrl+Shift+Up vm_edit_extend_selection_end_text Ctrl+Shift+Down vm_edit_delete_previous_char Backspace Meta+H vm_edit_delet_previous_char_not_line_start vm_edit_delete_current_char Del Meta+D vm_edit_delete_word_left Ctrl+Backspace vm_edit_delete_word_right Ctrl+Del vm_edit_delete_line_left Ctrl+Shift+Backspace vm_edit_delete_line_right Meta+K vm_edit_insert_line Return Enter vm_edit_insert_line_below Shift+Return Shift+Enter vm_edit_delete_current_line Ctrl+Shift+L Ctrl+Shift+L vm_edit_duplicate_current_line Ctrl+D vm_edit_swap_current_previous_line Ctrl+T vm_edit_cut_current_line Alt+Shift+L vm_edit_copy_current_line Ctrl+Shift+T vm_edit_toggle_insert_overtype Ins vm_edit_convert_selection_lower Alt+Shift+U vm_edit_convert_selection_upper Ctrl+Shift+U vm_edit_move_end_displayed_line Ctrl+Right vm_edit_extend_selection_end_displayed_line Ctrl+Shift+Right vm_edit_formfeed vm_edit_escape Esc vm_edit_extend_rect_selection_down_line Ctrl+Alt+Down Meta+Alt+Shift+N vm_edit_extend_rect_selection_up_line Ctrl+Alt+Up Meta+Alt+Shift+P vm_edit_extend_rect_selection_left_char Ctrl+Alt+Left Meta+Alt+Shift+B vm_edit_extend_rect_selection_right_char Ctrl+Alt+Right Meta+Alt+Shift+F vm_edit_extend_rect_selection_first_visible_char vm_edit_extend_rect_selection_end_line Meta+Alt+Shift+E vm_edit_extend_rect_selection_up_page Ctrl+Alt+PgUp vm_edit_extend_rect_selection_down_page Alt+Shift+PgDown Meta+Alt+Shift+V vm_edit_duplicate_current_selection Ctrl+Shift+D vm_edit_scroll_start_text Home vm_edit_scroll_end_text End vm_edit_scroll_vertically_center Meta+L vm_edit_move_end_next_word Alt+Right vm_edit_select_end_next_word Alt+Shift+Right vm_edit_move_end_previous_word vm_edit_select_end_previous_word vm_edit_move_start_document_line Meta+A vm_edit_extend_selection_start_document_line Meta+Shift+A vm_edit_select_rect_start_line Meta+Alt+Shift+A vm_edit_extend_selection_start_display_line Ctrl+Shift+Left vm_edit_move_start_display_document_line vm_edit_extend_selection_start_display_document_line vm_edit_move_first_visible_char_document_line vm_edit_extend_selection_first_visible_char_document_line vm_edit_end_start_display_document_line vm_edit_extend_selection_end_display_document_line vm_edit_stuttered_move_up_page vm_edit_stuttered_extend_selection_up_page vm_edit_stuttered_move_down_page vm_edit_stuttered_extend_selection_down_page vm_edit_delete_right_end_next_word Alt+Del vm_edit_move_selection_up_one_line vm_edit_move_selection_down_one_line vm_file_new Ctrl+N vm_file_open Ctrl+O vm_file_close Ctrl+W vm_file_close_all vm_file_save Ctrl+S vm_file_save_as Ctrl+Shift+S vm_file_save_all vm_file_print Ctrl+P vm_file_print_preview vm_file_search_file Ctrl+Alt+F vm_search Ctrl+F vm_search_next F3 vm_search_previous Shift+F3 vm_clear_search_markers Ctrl+3 vm_search_replace Ctrl+R vm_quicksearch Ctrl+Shift+K vm_quicksearch_backwards Ctrl+Shift+J vm_quicksearch_extend Ctrl+Shift+H vm_search_goto_line Ctrl+G vm_search_goto_brace Ctrl+L vm_search_in_files Ctrl+Shift+F vm_replace_in_files Ctrl+Shift+R vm_view_zoom_in Ctrl++ Zoom In vm_view_zoom_out Ctrl+- Zoom Out vm_view_zoom_reset Ctrl+0 vm_view_zoom Ctrl+# vm_view_toggle_all_folds vm_view_toggle_all_folds_children vm_view_toggle_current_fold vm_view_unhighlight vm_view_split_view vm_view_arrange_horizontally vm_view_remove_split vm_next_split Ctrl+Alt+N vm_previous_split Ctrl+Alt+P vm_macro_start_recording vm_macro_stop_recording vm_macro_run vm_macro_delete vm_macro_load vm_macro_save vm_bookmark_toggle Ctrl+Alt+T vm_bookmark_next Ctrl+PgDown vm_bookmark_previous Ctrl+PgUp vm_bookmark_clear Ctrl+Alt+C vm_syntaxerror_goto vm_syntaxerror_clear vm_uncovered_next vm_uncovered_previous vm_task_next vm_task_previous vm_spelling_spellcheck Shift+F7 vm_spelling_autospellcheck subversion_new subversion_update Meta+Alt+U subversion_commit Meta+Alt+O subversion_add subversion_remove subversion_log subversion_log_limited subversion_log_browser Meta+Alt+G subversion_diff Meta+Alt+D subversion_extendeddiff subversion_urldiff subversion_status Meta+Alt+S subversion_tag subversion_export subversion_options subversion_revert subversion_merge Meta+Alt+M subversion_switch subversion_resolve subversion_cleanup subversion_command subversion_list_tags subversion_list_branches subversion_contents subversion_property_set subversion_property_list subversion_property_delete subversion_relocate subversion_repo_browser subversion_configure refactoring_rename refactoring_rename_local refactoring_rename_module refactoring_change_occurrences refactoring_extract_method refactoring_extract_variable refactoring_inline refactoring_move_method refactoring_move_module refactoring_use_function refactoring_introduce_factory_method refactoring_introduce_parameter_method refactoring_organize_imports refactoring_expand_star_imports refactoring_relative_to_absolute_imports refactoring_froms_to_imports refactoring_organize_imports refactoring_restructure refactoring_change_method_signature refactoring_inline_argument_default refactoring_transform_module_to_package refactoring_method_to_methodobject refactoring_encapsulate_attribute refactoring_local_variable_to_attribute refactoring_undo refactoring_redo refactoring_show_project_undo_history refactoring_show_project_redo_history refactoring_show_file_undo_history refactoring_show_file_redo_history refactoring_clear_history refactoring_find_occurrences refactoring_find_definition refactoring_find_implementations refactoring_edit_config refactoring_help refactoring_analyze_all refactoring_update_configuration refactoring_find_errors refactoring_find_all_errors subversion_new subversion_update Meta+Alt+U subversion_commit Meta+Alt+O subversion_add subversion_remove subversion_log subversion_log_limited subversion_log_browser Meta+Alt+G subversion_diff Meta+Alt+D subversion_extendeddiff subversion_urldiff subversion_status Meta+Alt+S subversion_repoinfo subversion_tag subversion_export subversion_options subversion_revert subversion_merge Meta+Alt+M subversion_switch subversion_resolve subversion_cleanup subversion_command subversion_list_tags subversion_list_branches subversion_contents subversion_property_set subversion_property_list subversion_property_delete subversion_relocate subversion_repo_browser subversion_configure help_file_new_tab Ctrl+T help_file_new_window Ctrl+N help_file_open Ctrl+O help_file_open_tab Ctrl+Shift+O help_file_save_as Ctrl+Shift+S help_file_import_bookmarks help_file_export_bookmarks help_file_print Ctrl+P help_file_print_preview help_file_close Ctrl+W help_file_close_all help_file_private_browsing help_file_quit Ctrl+Q help_go_backward Alt+Left Backspace help_go_foreward Alt+Right Shift+Backspace help_go_home Ctrl+Home help_go_reload Ctrl+R F5 help_go_stop Ctrl+. Esc help_edit_copy Ctrl+C help_edit_find Ctrl+F help_edit_find_next F3 help_edit_find_previous Shift+F3 help_bookmarks_manage Ctrl+Shift+B help_bookmark_add Ctrl+D help_bookmark_show_all help_bookmark_all_tabs help_help_whats_this Shift+F1 help_help_about help_help_about_qt help_view_zoom_in Ctrl++ Zoom In help_view_zoom_out Ctrl+- Zoom Out help_view_zoom_reset Ctrl+0 help_view_zoom_text_only help_show_page_source Ctrl+U help_view_full_scree F11 help_view_next_tab Ctrl+Alt+Tab help_view_previous_tab Ctrl+Alt+Shift+Tab help_switch_tabs Ctrl+1 help_preferences help_accepted_languages help_cookies help_sync_toc help_show_toc help_show_index help_show_search help_qthelp_documents help_qthelp_filters help_qthelp_reindex help_clear_private_data help_clear_icons_db help_search_engines help_manage_passwords help_adblock help_tools_network_monitor eric4-4.5.18/eric/PaxHeaders.8617/eric4_compare.pyw0000644000175000001440000000013112261012653017763 xustar000000000000000029 mtime=1388582315.00911519 30 atime=1389081085.526724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/eric4_compare.pyw0000644000175000001440000000021312261012653017512 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2010 - 2014 Detlev Offenbach # from eric4_compare import main main() eric4-4.5.18/eric/PaxHeaders.8617/eric4_uipreviewer.py0000644000175000001440000000013212261012652020514 xustar000000000000000030 mtime=1388582314.116103901 30 atime=1389081085.526724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/eric4_uipreviewer.py0000644000175000001440000000420612261012652020250 0ustar00detlevusers00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- # Copyright (c) 2004 - 2014 Detlev Offenbach # """ Eric4 UI Previewer This is the main Python script that performs the necessary initialization of the ui previewer and starts the Qt event loop. This is a standalone version of the integrated ui previewer. """ import sys import os # disable the usage of KDE widgets, if requested sys.e4nokde = False if "--nokde" in sys.argv: del sys.argv[sys.argv.index("--nokde")] sys.e4nokde = True else: sys.e4nokde = os.getenv("e4nokde") is not None and os.getenv("e4nokde") == "1" for arg in sys.argv: if arg.startswith("--config="): import Utilities configDir = arg.replace("--config=", "") Utilities.setConfigDir(configDir) sys.argv.remove(arg) break from Utilities import Startup def createMainWidget(argv): """ Function to create the main widget. @param argv list of commandline parameters (list of strings) @return reference to the main widget (QWidget) """ from Tools.UIPreviewer import UIPreviewer if len(argv) > 1: fn = argv[1] else: fn = None previewer = UIPreviewer(fn, None, 'UIPreviewer') return previewer def main(): """ Main entry point into the application. """ options = [\ ("--config=configDir", "use the given directory as the one containing the config files"), ("--nokde" , "don't use KDE widgets"), ] kqOptions = [\ ("config \\", "use the given directory as the one containing the config files"), ("nokde" , "don't use KDE widgets"), ("!+file","") ] appinfo = Startup.makeAppInfo(sys.argv, "Eric4 UI Previewer", "file", "UI file previewer", options) res = Startup.simpleAppStartup(sys.argv, appinfo, createMainWidget, kqOptions) sys.exit(res) if __name__ == '__main__': main() eric4-4.5.18/eric/PaxHeaders.8617/LICENSE.GPL30000644000175000001440000000007411062710423016223 xustar000000000000000030 atime=1389081085.526724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/LICENSE.GPL30000644000175000001440000010013011062710423015743 0ustar00detlevusers00000000000000Eric is Copyright (c) 2002 - 2008 Detlev Offenbach You may use, distribute and copy Eric under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, which is shown below, or (at your option) any later version. ------------------------------------------------------------------------- GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS eric4-4.5.18/eric/PaxHeaders.8617/ThirdParty0000644000175000001440000000013212261012661016523 xustar000000000000000030 mtime=1388582321.384195219 30 atime=1389081086.015724339 30 ctime=1389081086.315724332 eric4-4.5.18/eric/ThirdParty/0000755000175000001440000000000012261012661016332 5ustar00detlevusers00000000000000eric4-4.5.18/eric/ThirdParty/PaxHeaders.8617/__init__.py0000644000175000001440000000013212261012652020711 xustar000000000000000030 mtime=1388582314.118103926 30 atime=1389081085.526724351 30 ctime=1389081086.311724332 eric4-4.5.18/eric/ThirdParty/__init__.py0000644000175000001440000000024412261012652020443 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2014 Detlev Offenbach # """ Package containing third party packages used by eric4. """ eric4-4.5.18/eric/ThirdParty/PaxHeaders.8617/Pygments0000644000175000001440000000013212261012661020331 xustar000000000000000030 mtime=1388582321.385195232 30 atime=1389081086.015724339 30 ctime=1389081086.315724332 eric4-4.5.18/eric/ThirdParty/Pygments/0000755000175000001440000000000012261012661020140 5ustar00detlevusers00000000000000eric4-4.5.18/eric/ThirdParty/Pygments/PaxHeaders.8617/__init__.py0000644000175000001440000000013112261012652022516 xustar000000000000000030 mtime=1388582314.121103964 29 atime=1389081085.54672435 30 ctime=1389081086.311724332 eric4-4.5.18/eric/ThirdParty/Pygments/__init__.py0000644000175000001440000000022612261012652022251 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2008 - 2014 Detlev Offenbach # """ Package containing the pygments package. """ eric4-4.5.18/eric/ThirdParty/Pygments/PaxHeaders.8617/pygments0000644000175000001440000000013212261012661022177 xustar000000000000000030 mtime=1388582321.475196354 30 atime=1389081086.015724339 30 ctime=1389081086.315724332 eric4-4.5.18/eric/ThirdParty/Pygments/pygments/0000755000175000001440000000000012261012661022006 5ustar00detlevusers00000000000000eric4-4.5.18/eric/ThirdParty/Pygments/pygments/PaxHeaders.8617/PKG-INFO0000644000175000001440000000007311726741611023366 xustar000000000000000029 atime=1389081085.54672435 30 ctime=1389081086.311724332 eric4-4.5.18/eric/ThirdParty/Pygments/pygments/PKG-INFO0000644000175000001440000000363011726741611023116 0ustar00detlevusers00000000000000Metadata-Version: 1.1 Name: Pygments Version: 1.5 Summary: Pygments is a syntax highlighting package written in Python. Home-page: http://pygments.org/ Author: Georg Brandl Author-email: georg@python.org License: BSD License Description: Pygments ~~~~~~~~ Pygments is a syntax highlighting package written in Python. It is a generic syntax highlighter for general use in all kinds of software such as forum systems, wikis or other applications that need to prettify source code. Highlights are: * a wide range of common languages and markup formats is supported * special attention is paid to details, increasing quality by a fair amount * support for new languages and formats are added easily * a number of output formats, presently HTML, LaTeX, RTF, SVG, all image formats that PIL supports and ANSI sequences * it is usable as a command-line tool and as a library * ... and it highlights even Brainfuck! The `Pygments tip`_ is installable with ``easy_install Pygments==dev``. .. _Pygments tip: http://bitbucket.org/birkenfeld/pygments-main/get/tip.zip#egg=Pygments-dev :copyright: Copyright 2006-2012 by the Pygments team, see AUTHORS. :license: BSD, see LICENSE for details. Keywords: syntax highlighting Platform: any Classifier: License :: OSI Approved :: BSD License Classifier: Intended Audience :: Developers Classifier: Intended Audience :: End Users/Desktop Classifier: Intended Audience :: System Administrators Classifier: Development Status :: 5 - Production/Stable Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 2 Classifier: Programming Language :: Python :: 3 Classifier: Operating System :: OS Independent eric4-4.5.18/eric/ThirdParty/Pygments/pygments/PaxHeaders.8617/CHANGES0000644000175000001440000000007311726740655023273 xustar000000000000000029 atime=1389081085.54672435 30 ctime=1389081086.311724332 eric4-4.5.18/eric/ThirdParty/Pygments/pygments/CHANGES0000644000175000001440000004655011726740655023033 0ustar00detlevusers00000000000000Pygments changelog ================== Issue numbers refer to the tracker at http://bitbucket.org/birkenfeld/pygments-main/issues. Version 1.5 ----------- (codename Zeitdilatation, released Mar 10, 2012) - Lexers added: * Awk (#630) * Fancy (#633) * PyPy Log * eC * Nimrod * Nemerle (#667) * F# (#353) * Groovy (#501) * PostgreSQL (#660) * DTD * Gosu (#634) * Octave (PR#22) * Standard ML (PR#14) * CFengine3 (#601) * Opa (PR#37) * HTTP sessions (PR#42) * JSON (PR#31) * SNOBOL (PR#30) * MoonScript (PR#43) * ECL (PR#29) * Urbiscript (PR#17) * OpenEdge ABL (PR#27) * SystemVerilog (PR#35) * Coq (#734) * PowerShell (#654) * Dart (#715) * Fantom (PR#36) * Bro (PR#5) * NewLISP (PR#26) * VHDL (PR#45) * Scilab (#740) * Elixir (PR#57) * Tea (PR#56) * Kotlin (PR#58) - Fix Python 3 terminal highlighting with pygmentize (#691). - In the LaTeX formatter, escape special &, < and > chars (#648). - In the LaTeX formatter, fix display problems for styles with token background colors (#670). - Enhancements to the Squid conf lexer (#664). - Several fixes to the reStructuredText lexer (#636). - Recognize methods in the ObjC lexer (#638). - Fix Lua "class" highlighting: it does not have classes (#665). - Fix degenerate regex in Scala lexer (#671) and highlighting bugs (#713, 708). - Fix number pattern order in Ocaml lexer (#647). - Fix generic type highlighting in ActionScript 3 (#666). - Fixes to the Clojure lexer (PR#9). - Fix degenerate regex in Nemerle lexer (#706). - Fix infinite looping in CoffeeScript lexer (#729). - Fix crashes and analysis with ObjectiveC lexer (#693, #696). - Add some Fortran 2003 keywords. - Fix Boo string regexes (#679). - Add "rrt" style (#727). - Fix infinite looping in Darcs Patch lexer. - Lots of misc fixes to character-eating bugs and ordering problems in many different lexers. Version 1.4 ----------- (codename Unschärfe, released Jan 03, 2011) - Lexers added: * Factor (#520) * PostScript (#486) * Verilog (#491) * BlitzMax Basic (#478) * Ioke (#465) * Java properties, split out of the INI lexer (#445) * Scss (#509) * Duel/JBST * XQuery (#617) * Mason (#615) * GoodData (#609) * SSP (#473) * Autohotkey (#417) * Google Protocol Buffers * Hybris (#506) - Do not fail in analyse_text methods (#618). - Performance improvements in the HTML formatter (#523). - With the ``noclasses`` option in the HTML formatter, some styles present in the stylesheet were not added as inline styles. - Four fixes to the Lua lexer (#480, #481, #482, #497). - More context-sensitive Gherkin lexer with support for more i18n translations. - Support new OO keywords in Matlab lexer (#521). - Small fix in the CoffeeScript lexer (#519). - A bugfix for backslashes in ocaml strings (#499). - Fix unicode/raw docstrings in the Python lexer (#489). - Allow PIL to work without PIL.pth (#502). - Allow seconds as a unit in CSS (#496). - Support ``application/javascript`` as a JavaScript mime type (#504). - Support `Offload `_ C++ Extensions as keywords in the C++ lexer (#484). - Escape more characters in LaTeX output (#505). - Update Haml/Sass lexers to version 3 (#509). - Small PHP lexer string escaping fix (#515). - Support comments before preprocessor directives, and unsigned/ long long literals in C/C++ (#613, #616). - Support line continuations in the INI lexer (#494). - Fix lexing of Dylan string and char literals (#628). - Fix class/procedure name highlighting in VB.NET lexer (#624). Version 1.3.1 ------------- (bugfix release, released Mar 05, 2010) - The ``pygmentize`` script was missing from the distribution. Version 1.3 ----------- (codename Schneeglöckchen, released Mar 01, 2010) - Added the ``ensurenl`` lexer option, which can be used to suppress the automatic addition of a newline to the lexer input. - Lexers added: * Ada * Coldfusion * Modula-2 * haXe * R console * Objective-J * Haml and Sass * CoffeeScript - Enhanced reStructuredText highlighting. - Added support for PHP 5.3 namespaces in the PHP lexer. - Added a bash completion script for `pygmentize`, to the external/ directory (#466). - Fixed a bug in `do_insertions()` used for multi-lexer languages. - Fixed a Ruby regex highlighting bug (#476). - Fixed regex highlighting bugs in Perl lexer (#258). - Add small enhancements to the C lexer (#467) and Bash lexer (#469). - Small fixes for the Tcl, Debian control file, Nginx config, Smalltalk, Objective-C, Clojure, Lua lexers. - Gherkin lexer: Fixed single apostrophe bug and added new i18n keywords. Version 1.2.2 ------------- (bugfix release, released Jan 02, 2010) * Removed a backwards incompatibility in the LaTeX formatter that caused Sphinx to produce invalid commands when writing LaTeX output (#463). * Fixed a forever-backtracking regex in the BashLexer (#462). Version 1.2.1 ------------- (bugfix release, released Jan 02, 2010) * Fixed mishandling of an ellipsis in place of the frames in a Python console traceback, resulting in clobbered output. Version 1.2 ----------- (codename Neujahr, released Jan 01, 2010) - Dropped Python 2.3 compatibility. - Lexers added: * Asymptote * Go * Gherkin (Cucumber) * CMake * Ooc * Coldfusion * haXe * R console - Added options for rendering LaTeX in source code comments in the LaTeX formatter (#461). - Updated the Logtalk lexer. - Added `line_number_start` option to image formatter (#456). - Added `hl_lines` and `hl_color` options to image formatter (#457). - Fixed the HtmlFormatter's handling of noclasses=True to not output any classes (#427). - Added the Monokai style (#453). - Fixed LLVM lexer identifier syntax and added new keywords (#442). - Fixed the PythonTracebackLexer to handle non-traceback data in header or trailer, and support more partial tracebacks that start on line 2 (#437). - Fixed the CLexer to not highlight ternary statements as labels. - Fixed lexing of some Ruby quoting peculiarities (#460). - A few ASM lexer fixes (#450). Version 1.1.1 ------------- (bugfix release, released Sep 15, 2009) - Fixed the BBCode lexer (#435). - Added support for new Jinja2 keywords. - Fixed test suite failures. - Added Gentoo-specific suffixes to Bash lexer. Version 1.1 ----------- (codename Brillouin, released Sep 11, 2009) - Ported Pygments to Python 3. This needed a few changes in the way encodings are handled; they may affect corner cases when used with Python 2 as well. - Lexers added: * Antlr/Ragel, thanks to Ana Nelson * (Ba)sh shell * Erlang shell * GLSL * Prolog * Evoque * Modelica * Rebol * MXML * Cython * ABAP * ASP.net (VB/C#) * Vala * Newspeak - Fixed the LaTeX formatter's output so that output generated for one style can be used with the style definitions of another (#384). - Added "anchorlinenos" and "noclobber_cssfile" (#396) options to HTML formatter. - Support multiline strings in Lua lexer. - Rewrite of the JavaScript lexer by Pumbaa80 to better support regular expression literals (#403). - When pygmentize is asked to highlight a file for which multiple lexers match the filename, use the analyse_text guessing engine to determine the winner (#355). - Fixed minor bugs in the JavaScript lexer (#383), the Matlab lexer (#378), the Scala lexer (#392), the INI lexer (#391), the Clojure lexer (#387) and the AS3 lexer (#389). - Fixed three Perl heredoc lexing bugs (#379, #400, #422). - Fixed a bug in the image formatter which misdetected lines (#380). - Fixed bugs lexing extended Ruby strings and regexes. - Fixed a bug when lexing git diffs. - Fixed a bug lexing the empty commit in the PHP lexer (#405). - Fixed a bug causing Python numbers to be mishighlighted as floats (#397). - Fixed a bug when backslashes are used in odd locations in Python (#395). - Fixed various bugs in Matlab and S-Plus lexers, thanks to Winston Chang (#410, #411, #413, #414) and fmarc (#419). - Fixed a bug in Haskell single-line comment detection (#426). - Added new-style reStructuredText directive for docutils 0.5+ (#428). Version 1.0 ----------- (codename Dreiundzwanzig, released Nov 23, 2008) - Don't use join(splitlines()) when converting newlines to ``\n``, because that doesn't keep all newlines at the end when the ``stripnl`` lexer option is False. - Added ``-N`` option to command-line interface to get a lexer name for a given filename. - Added Tango style, written by Andre Roberge for the Crunchy project. - Added Python3TracebackLexer and ``python3`` option to PythonConsoleLexer. - Fixed a few bugs in the Haskell lexer. - Fixed PythonTracebackLexer to be able to recognize SyntaxError and KeyboardInterrupt (#360). - Provide one formatter class per image format, so that surprises like:: pygmentize -f gif -o foo.gif foo.py creating a PNG file are avoided. - Actually use the `font_size` option of the image formatter. - Fixed numpy lexer that it doesn't listen for `*.py` any longer. - Fixed HTML formatter so that text options can be Unicode strings (#371). - Unified Diff lexer supports the "udiff" alias now. - Fixed a few issues in Scala lexer (#367). - RubyConsoleLexer now supports simple prompt mode (#363). - JavascriptLexer is smarter about what constitutes a regex (#356). - Add Applescript lexer, thanks to Andreas Amann (#330). - Make the codetags more strict about matching words (#368). - NginxConfLexer is a little more accurate on mimetypes and variables (#370). Version 0.11.1 -------------- (released Aug 24, 2008) - Fixed a Jython compatibility issue in pygments.unistring (#358). Version 0.11 ------------ (codename Straußenei, released Aug 23, 2008) Many thanks go to Tim Hatch for writing or integrating most of the bug fixes and new features. - Lexers added: * Nasm-style assembly language, thanks to delroth * YAML, thanks to Kirill Simonov * ActionScript 3, thanks to Pierre Bourdon * Cheetah/Spitfire templates, thanks to Matt Good * Lighttpd config files * Nginx config files * Gnuplot plotting scripts * Clojure * POV-Ray scene files * Sqlite3 interactive console sessions * Scala source files, thanks to Krzysiek Goj - Lexers improved: * C lexer highlights standard library functions now and supports C99 types. * Bash lexer now correctly highlights heredocs without preceding whitespace. * Vim lexer now highlights hex colors properly and knows a couple more keywords. * Irc logs lexer now handles xchat's default time format (#340) and correctly highlights lines ending in ``>``. * Support more delimiters for perl regular expressions (#258). * ObjectiveC lexer now supports 2.0 features. - Added "Visual Studio" style. - Updated markdown processor to Markdown 1.7. - Support roman/sans/mono style defs and use them in the LaTeX formatter. - The RawTokenFormatter is no longer registered to ``*.raw`` and it's documented that tokenization with this lexer may raise exceptions. - New option ``hl_lines`` to HTML formatter, to highlight certain lines. - New option ``prestyles`` to HTML formatter. - New option *-g* to pygmentize, to allow lexer guessing based on filetext (can be slowish, so file extensions are still checked first). - ``guess_lexer()`` now makes its decision much faster due to a cache of whether data is xml-like (a check which is used in several versions of ``analyse_text()``. Several lexers also have more accurate ``analyse_text()`` now. Version 0.10 ------------ (codename Malzeug, released May 06, 2008) - Lexers added: * Io * Smalltalk * Darcs patches * Tcl * Matlab * Matlab sessions * FORTRAN * XSLT * tcsh * NumPy * Python 3 * S, S-plus, R statistics languages * Logtalk - In the LatexFormatter, the *commandprefix* option is now by default 'PY' instead of 'C', since the latter resulted in several collisions with other packages. Also, the special meaning of the *arg* argument to ``get_style_defs()`` was removed. - Added ImageFormatter, to format code as PNG, JPG, GIF or BMP. (Needs the Python Imaging Library.) - Support doc comments in the PHP lexer. - Handle format specifications in the Perl lexer. - Fix comment handling in the Batch lexer. - Add more file name extensions for the C++, INI and XML lexers. - Fixes in the IRC and MuPad lexers. - Fix function and interface name highlighting in the Java lexer. - Fix at-rule handling in the CSS lexer. - Handle KeyboardInterrupts gracefully in pygmentize. - Added BlackWhiteStyle. - Bash lexer now correctly highlights math, does not require whitespace after semicolons, and correctly highlights boolean operators. - Makefile lexer is now capable of handling BSD and GNU make syntax. Version 0.9 ----------- (codename Herbstzeitlose, released Oct 14, 2007) - Lexers added: * Erlang * ActionScript * Literate Haskell * Common Lisp * Various assembly languages * Gettext catalogs * Squid configuration * Debian control files * MySQL-style SQL * MOOCode - Lexers improved: * Greatly improved the Haskell and OCaml lexers. * Improved the Bash lexer's handling of nested constructs. * The C# and Java lexers exhibited abysmal performance with some input code; this should now be fixed. * The IRC logs lexer is now able to colorize weechat logs too. * The Lua lexer now recognizes multi-line comments. * Fixed bugs in the D and MiniD lexer. - The encoding handling of the command line mode (pygmentize) was enhanced. You shouldn't get UnicodeErrors from it anymore if you don't give an encoding option. - Added a ``-P`` option to the command line mode which can be used to give options whose values contain commas or equals signs. - Added 256-color terminal formatter. - Added an experimental SVG formatter. - Added the ``lineanchors`` option to the HTML formatter, thanks to Ian Charnas for the idea. - Gave the line numbers table a CSS class in the HTML formatter. - Added a Vim 7-like style. Version 0.8.1 ------------- (released Jun 27, 2007) - Fixed POD highlighting in the Ruby lexer. - Fixed Unicode class and namespace name highlighting in the C# lexer. - Fixed Unicode string prefix highlighting in the Python lexer. - Fixed a bug in the D and MiniD lexers. - Fixed the included MoinMoin parser. Version 0.8 ----------- (codename Maikäfer, released May 30, 2007) - Lexers added: * Haskell, thanks to Adam Blinkinsop * Redcode, thanks to Adam Blinkinsop * D, thanks to Kirk McDonald * MuPad, thanks to Christopher Creutzig * MiniD, thanks to Jarrett Billingsley * Vim Script, by Tim Hatch - The HTML formatter now has a second line-numbers mode in which it will just integrate the numbers in the same ``
    `` tag as the
      code.
    
    - The `CSharpLexer` now is Unicode-aware, which means that it has an
      option that can be set so that it correctly lexes Unicode
      identifiers allowed by the C# specs.
    
    - Added a `RaiseOnErrorTokenFilter` that raises an exception when the
      lexer generates an error token, and a `VisibleWhitespaceFilter` that
      converts whitespace (spaces, tabs, newlines) into visible
      characters.
    
    - Fixed the `do_insertions()` helper function to yield correct
      indices.
    
    - The ReST lexer now automatically highlights source code blocks in
      ".. sourcecode:: language" and ".. code:: language" directive
      blocks.
    
    - Improved the default style (thanks to Tiberius Teng). The old
      default is still available as the "emacs" style (which was an alias
      before).
    
    - The `get_style_defs` method of HTML formatters now uses the
      `cssclass` option as the default selector if it was given.
    
    - Improved the ReST and Bash lexers a bit.
    
    - Fixed a few bugs in the Makefile and Bash lexers, thanks to Tim
      Hatch.
    
    - Fixed a bug in the command line code that disallowed ``-O`` options
      when using the ``-S`` option.
    
    - Fixed a bug in the `RawTokenFormatter`.
    
    
    Version 0.7.1
    -------------
    (released Feb 15, 2007)
    
    - Fixed little highlighting bugs in the Python, Java, Scheme and
      Apache Config lexers.
    
    - Updated the included manpage.
    
    - Included a built version of the documentation in the source tarball.
    
    
    Version 0.7
    -----------
    (codename Faschingskrapfn, released Feb 14, 2007)
    
    - Added a MoinMoin parser that uses Pygments. With it, you get
      Pygments highlighting in Moin Wiki pages.
    
    - Changed the exception raised if no suitable lexer, formatter etc. is
      found in one of the `get_*_by_*` functions to a custom exception,
      `pygments.util.ClassNotFound`. It is, however, a subclass of
      `ValueError` in order to retain backwards compatibility.
    
    - Added a `-H` command line option which can be used to get the
      docstring of a lexer, formatter or filter.
    
    - Made the handling of lexers and formatters more consistent. The
      aliases and filename patterns of formatters are now attributes on
      them.
    
    - Added an OCaml lexer, thanks to Adam Blinkinsop.
    
    - Made the HTML formatter more flexible, and easily subclassable in
      order to make it easy to implement custom wrappers, e.g. alternate
      line number markup. See the documentation.
    
    - Added an `outencoding` option to all formatters, making it possible
      to override the `encoding` (which is used by lexers and formatters)
      when using the command line interface. Also, if using the terminal
      formatter and the output file is a terminal and has an encoding
      attribute, use it if no encoding is given.
    
    - Made it possible to just drop style modules into the `styles`
      subpackage of the Pygments installation.
    
    - Added a "state" keyword argument to the `using` helper.
    
    - Added a `commandprefix` option to the `LatexFormatter` which allows
      to control how the command names are constructed.
    
    - Added quite a few new lexers, thanks to Tim Hatch:
    
      * Java Server Pages
      * Windows batch files
      * Trac Wiki markup
      * Python tracebacks
      * ReStructuredText
      * Dylan
      * and the Befunge esoteric programming language (yay!)
    
    - Added Mako lexers by Ben Bangert.
    
    - Added "fruity" style, another dark background originally vim-based
      theme.
    
    - Added sources.list lexer by Dennis Kaarsemaker.
    
    - Added token stream filters, and a pygmentize option to use them.
    
    - Changed behavior of `in` Operator for tokens.
    
    - Added mimetypes for all lexers.
    
    - Fixed some problems lexing Python strings.
    
    - Fixed tickets: #167, #178, #179, #180, #185, #201.
    
    
    Version 0.6
    -----------
    (codename Zimtstern, released Dec 20, 2006)
    
    - Added option for the HTML formatter to write the CSS to an external
      file in "full document" mode.
    
    - Added RTF formatter.
    
    - Added Bash and Apache configuration lexers (thanks to Tim Hatch).
    
    - Improved guessing methods for various lexers.
    
    - Added `@media` support to CSS lexer (thanks to Tim Hatch).
    
    - Added a Groff lexer (thanks to Tim Hatch).
    
    - License change to BSD.
    
    - Added lexers for the Myghty template language.
    
    - Added a Scheme lexer (thanks to Marek Kubica).
    
    - Added some functions to iterate over existing lexers, formatters and
      lexers.
    
    - The HtmlFormatter's `get_style_defs()` can now take a list as an
      argument to generate CSS with multiple prefixes.
    
    - Support for guessing input encoding added.
    
    - Encoding support added: all processing is now done with Unicode
      strings, input and output are converted from and optionally to byte
      strings (see the ``encoding`` option of lexers and formatters).
    
    - Some improvements in the C(++) lexers handling comments and line
      continuations.
    
    
    Version 0.5.1
    -------------
    (released Oct 30, 2006)
    
    - Fixed traceback in ``pygmentize -L`` (thanks to Piotr Ozarowski).
    
    
    Version 0.5
    -----------
    (codename PyKleur, released Oct 30, 2006)
    
    - Initial public release.
    eric4-4.5.18/eric/ThirdParty/Pygments/pygments/PaxHeaders.8617/unistring.py0000644000175000001440000000013112261012652024647 xustar000000000000000029 mtime=1388582314.12710404
    30 atime=1389081085.559724351
    30 ctime=1389081086.311724332
    eric4-4.5.18/eric/ThirdParty/Pygments/pygments/unistring.py0000644000175000001440000142543112261012652024414 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*-
    """
        pygments.unistring
        ~~~~~~~~~~~~~~~~~~
    
        Strings of all Unicode characters of a certain category.
        Used for matching in Unicode-aware languages. Run to regenerate.
    
        Inspired by chartypes_create.py from the MoinMoin project.
    
        :copyright: Copyright 2006-2012 by the Pygments team, see AUTHORS.
        :license: BSD, see LICENSE for details.
    """
    from pygments.util import u_prefix
    
    Cc = u'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f'
    
    Cf = u'\xad\u0600\u0601\u0602\u0603\u06dd\u070f\u17b4\u17b5\u200b\u200c\u200d\u200e\u200f\u202a\u202b\u202c\u202d\u202e\u2060\u2061\u2062\u2063\u206a\u206b\u206c\u206d\u206e\u206f\ufeff\ufff9\ufffa\ufffb'
    
    Cn = u'\u0242\u0243\u0244\u0245\u0246\u0247\u0248\u0249\u024a\u024b\u024c\u024d\u024e\u024f\u0370\u0371\u0372\u0373\u0376\u0377\u0378\u0379\u037b\u037c\u037d\u037f\u0380\u0381\u0382\u0383\u038b\u038d\u03a2\u03cf\u0487\u04cf\u04fa\u04fb\u04fc\u04fd\u04fe\u04ff\u0510\u0511\u0512\u0513\u0514\u0515\u0516\u0517\u0518\u0519\u051a\u051b\u051c\u051d\u051e\u051f\u0520\u0521\u0522\u0523\u0524\u0525\u0526\u0527\u0528\u0529\u052a\u052b\u052c\u052d\u052e\u052f\u0530\u0557\u0558\u0560\u0588\u058b\u058c\u058d\u058e\u058f\u0590\u05ba\u05c8\u05c9\u05ca\u05cb\u05cc\u05cd\u05ce\u05cf\u05eb\u05ec\u05ed\u05ee\u05ef\u05f5\u05f6\u05f7\u05f8\u05f9\u05fa\u05fb\u05fc\u05fd\u05fe\u05ff\u0604\u0605\u0606\u0607\u0608\u0609\u060a\u0616\u0617\u0618\u0619\u061a\u061c\u061d\u0620\u063b\u063c\u063d\u063e\u063f\u065f\u070e\u074b\u074c\u076e\u076f\u0770\u0771\u0772\u0773\u0774\u0775\u0776\u0777\u0778\u0779\u077a\u077b\u077c\u077d\u077e\u077f\u07b2\u07b3\u07b4\u07b5\u07b6\u07b7\u07b8\u07b9\u07ba\u07bb\u07bc\u07bd\u07be\u07bf\u07c0\u07c1\u07c2\u07c3\u07c4\u07c5\u07c6\u07c7\u07c8\u07c9\u07ca\u07cb\u07cc\u07cd\u07ce\u07cf\u07d0\u07d1\u07d2\u07d3\u07d4\u07d5\u07d6\u07d7\u07d8\u07d9\u07da\u07db\u07dc\u07dd\u07de\u07df\u07e0\u07e1\u07e2\u07e3\u07e4\u07e5\u07e6\u07e7\u07e8\u07e9\u07ea\u07eb\u07ec\u07ed\u07ee\u07ef\u07f0\u07f1\u07f2\u07f3\u07f4\u07f5\u07f6\u07f7\u07f8\u07f9\u07fa\u07fb\u07fc\u07fd\u07fe\u07ff\u0800\u0801\u0802\u0803\u0804\u0805\u0806\u0807\u0808\u0809\u080a\u080b\u080c\u080d\u080e\u080f\u0810\u0811\u0812\u0813\u0814\u0815\u0816\u0817\u0818\u0819\u081a\u081b\u081c\u081d\u081e\u081f\u0820\u0821\u0822\u0823\u0824\u0825\u0826\u0827\u0828\u0829\u082a\u082b\u082c\u082d\u082e\u082f\u0830\u0831\u0832\u0833\u0834\u0835\u0836\u0837\u0838\u0839\u083a\u083b\u083c\u083d\u083e\u083f\u0840\u0841\u0842\u0843\u0844\u0845\u0846\u0847\u0848\u0849\u084a\u084b\u084c\u084d\u084e\u084f\u0850\u0851\u0852\u0853\u0854\u0855\u0856\u0857\u0858\u0859\u085a\u085b\u085c\u085d\u085e\u085f\u0860\u0861\u0862\u0863\u0864\u0865\u0866\u0867\u0868\u0869\u086a\u086b\u086c\u086d\u086e\u086f\u0870\u0871\u0872\u0873\u0874\u0875\u0876\u0877\u0878\u0879\u087a\u087b\u087c\u087d\u087e\u087f\u0880\u0881\u0882\u0883\u0884\u0885\u0886\u0887\u0888\u0889\u088a\u088b\u088c\u088d\u088e\u088f\u0890\u0891\u0892\u0893\u0894\u0895\u0896\u0897\u0898\u0899\u089a\u089b\u089c\u089d\u089e\u089f\u08a0\u08a1\u08a2\u08a3\u08a4\u08a5\u08a6\u08a7\u08a8\u08a9\u08aa\u08ab\u08ac\u08ad\u08ae\u08af\u08b0\u08b1\u08b2\u08b3\u08b4\u08b5\u08b6\u08b7\u08b8\u08b9\u08ba\u08bb\u08bc\u08bd\u08be\u08bf\u08c0\u08c1\u08c2\u08c3\u08c4\u08c5\u08c6\u08c7\u08c8\u08c9\u08ca\u08cb\u08cc\u08cd\u08ce\u08cf\u08d0\u08d1\u08d2\u08d3\u08d4\u08d5\u08d6\u08d7\u08d8\u08d9\u08da\u08db\u08dc\u08dd\u08de\u08df\u08e0\u08e1\u08e2\u08e3\u08e4\u08e5\u08e6\u08e7\u08e8\u08e9\u08ea\u08eb\u08ec\u08ed\u08ee\u08ef\u08f0\u08f1\u08f2\u08f3\u08f4\u08f5\u08f6\u08f7\u08f8\u08f9\u08fa\u08fb\u08fc\u08fd\u08fe\u08ff\u0900\u093a\u093b\u094e\u094f\u0955\u0956\u0957\u0971\u0972\u0973\u0974\u0975\u0976\u0977\u0978\u0979\u097a\u097b\u097c\u097e\u097f\u0980\u0984\u098d\u098e\u0991\u0992\u09a9\u09b1\u09b3\u09b4\u09b5\u09ba\u09bb\u09c5\u09c6\u09c9\u09ca\u09cf\u09d0\u09d1\u09d2\u09d3\u09d4\u09d5\u09d6\u09d8\u09d9\u09da\u09db\u09de\u09e4\u09e5\u09fb\u09fc\u09fd\u09fe\u09ff\u0a00\u0a04\u0a0b\u0a0c\u0a0d\u0a0e\u0a11\u0a12\u0a29\u0a31\u0a34\u0a37\u0a3a\u0a3b\u0a3d\u0a43\u0a44\u0a45\u0a46\u0a49\u0a4a\u0a4e\u0a4f\u0a50\u0a51\u0a52\u0a53\u0a54\u0a55\u0a56\u0a57\u0a58\u0a5d\u0a5f\u0a60\u0a61\u0a62\u0a63\u0a64\u0a65\u0a75\u0a76\u0a77\u0a78\u0a79\u0a7a\u0a7b\u0a7c\u0a7d\u0a7e\u0a7f\u0a80\u0a84\u0a8e\u0a92\u0aa9\u0ab1\u0ab4\u0aba\u0abb\u0ac6\u0aca\u0ace\u0acf\u0ad1\u0ad2\u0ad3\u0ad4\u0ad5\u0ad6\u0ad7\u0ad8\u0ad9\u0ada\u0adb\u0adc\u0add\u0ade\u0adf\u0ae4\u0ae5\u0af0\u0af2\u0af3\u0af4\u0af5\u0af6\u0af7\u0af8\u0af9\u0afa\u0afb\u0afc\u0afd\u0afe\u0aff\u0b00\u0b04\u0b0d\u0b0e\u0b11\u0b12\u0b29\u0b31\u0b34\u0b3a\u0b3b\u0b44\u0b45\u0b46\u0b49\u0b4a\u0b4e\u0b4f\u0b50\u0b51\u0b52\u0b53\u0b54\u0b55\u0b58\u0b59\u0b5a\u0b5b\u0b5e\u0b62\u0b63\u0b64\u0b65\u0b72\u0b73\u0b74\u0b75\u0b76\u0b77\u0b78\u0b79\u0b7a\u0b7b\u0b7c\u0b7d\u0b7e\u0b7f\u0b80\u0b81\u0b84\u0b8b\u0b8c\u0b8d\u0b91\u0b96\u0b97\u0b98\u0b9b\u0b9d\u0ba0\u0ba1\u0ba2\u0ba5\u0ba6\u0ba7\u0bab\u0bac\u0bad\u0bba\u0bbb\u0bbc\u0bbd\u0bc3\u0bc4\u0bc5\u0bc9\u0bce\u0bcf\u0bd0\u0bd1\u0bd2\u0bd3\u0bd4\u0bd5\u0bd6\u0bd8\u0bd9\u0bda\u0bdb\u0bdc\u0bdd\u0bde\u0bdf\u0be0\u0be1\u0be2\u0be3\u0be4\u0be5\u0bfb\u0bfc\u0bfd\u0bfe\u0bff\u0c00\u0c04\u0c0d\u0c11\u0c29\u0c34\u0c3a\u0c3b\u0c3c\u0c3d\u0c45\u0c49\u0c4e\u0c4f\u0c50\u0c51\u0c52\u0c53\u0c54\u0c57\u0c58\u0c59\u0c5a\u0c5b\u0c5c\u0c5d\u0c5e\u0c5f\u0c62\u0c63\u0c64\u0c65\u0c70\u0c71\u0c72\u0c73\u0c74\u0c75\u0c76\u0c77\u0c78\u0c79\u0c7a\u0c7b\u0c7c\u0c7d\u0c7e\u0c7f\u0c80\u0c81\u0c84\u0c8d\u0c91\u0ca9\u0cb4\u0cba\u0cbb\u0cc5\u0cc9\u0cce\u0ccf\u0cd0\u0cd1\u0cd2\u0cd3\u0cd4\u0cd7\u0cd8\u0cd9\u0cda\u0cdb\u0cdc\u0cdd\u0cdf\u0ce2\u0ce3\u0ce4\u0ce5\u0cf0\u0cf1\u0cf2\u0cf3\u0cf4\u0cf5\u0cf6\u0cf7\u0cf8\u0cf9\u0cfa\u0cfb\u0cfc\u0cfd\u0cfe\u0cff\u0d00\u0d01\u0d04\u0d0d\u0d11\u0d29\u0d3a\u0d3b\u0d3c\u0d3d\u0d44\u0d45\u0d49\u0d4e\u0d4f\u0d50\u0d51\u0d52\u0d53\u0d54\u0d55\u0d56\u0d58\u0d59\u0d5a\u0d5b\u0d5c\u0d5d\u0d5e\u0d5f\u0d62\u0d63\u0d64\u0d65\u0d70\u0d71\u0d72\u0d73\u0d74\u0d75\u0d76\u0d77\u0d78\u0d79\u0d7a\u0d7b\u0d7c\u0d7d\u0d7e\u0d7f\u0d80\u0d81\u0d84\u0d97\u0d98\u0d99\u0db2\u0dbc\u0dbe\u0dbf\u0dc7\u0dc8\u0dc9\u0dcb\u0dcc\u0dcd\u0dce\u0dd5\u0dd7\u0de0\u0de1\u0de2\u0de3\u0de4\u0de5\u0de6\u0de7\u0de8\u0de9\u0dea\u0deb\u0dec\u0ded\u0dee\u0def\u0df0\u0df1\u0df5\u0df6\u0df7\u0df8\u0df9\u0dfa\u0dfb\u0dfc\u0dfd\u0dfe\u0dff\u0e00\u0e3b\u0e3c\u0e3d\u0e3e\u0e5c\u0e5d\u0e5e\u0e5f\u0e60\u0e61\u0e62\u0e63\u0e64\u0e65\u0e66\u0e67\u0e68\u0e69\u0e6a\u0e6b\u0e6c\u0e6d\u0e6e\u0e6f\u0e70\u0e71\u0e72\u0e73\u0e74\u0e75\u0e76\u0e77\u0e78\u0e79\u0e7a\u0e7b\u0e7c\u0e7d\u0e7e\u0e7f\u0e80\u0e83\u0e85\u0e86\u0e89\u0e8b\u0e8c\u0e8e\u0e8f\u0e90\u0e91\u0e92\u0e93\u0e98\u0ea0\u0ea4\u0ea6\u0ea8\u0ea9\u0eac\u0eba\u0ebe\u0ebf\u0ec5\u0ec7\u0ece\u0ecf\u0eda\u0edb\u0ede\u0edf\u0ee0\u0ee1\u0ee2\u0ee3\u0ee4\u0ee5\u0ee6\u0ee7\u0ee8\u0ee9\u0eea\u0eeb\u0eec\u0eed\u0eee\u0eef\u0ef0\u0ef1\u0ef2\u0ef3\u0ef4\u0ef5\u0ef6\u0ef7\u0ef8\u0ef9\u0efa\u0efb\u0efc\u0efd\u0efe\u0eff\u0f48\u0f6b\u0f6c\u0f6d\u0f6e\u0f6f\u0f70\u0f8c\u0f8d\u0f8e\u0f8f\u0f98\u0fbd\u0fcd\u0fce\u0fd2\u0fd3\u0fd4\u0fd5\u0fd6\u0fd7\u0fd8\u0fd9\u0fda\u0fdb\u0fdc\u0fdd\u0fde\u0fdf\u0fe0\u0fe1\u0fe2\u0fe3\u0fe4\u0fe5\u0fe6\u0fe7\u0fe8\u0fe9\u0fea\u0feb\u0fec\u0fed\u0fee\u0fef\u0ff0\u0ff1\u0ff2\u0ff3\u0ff4\u0ff5\u0ff6\u0ff7\u0ff8\u0ff9\u0ffa\u0ffb\u0ffc\u0ffd\u0ffe\u0fff\u1022\u1028\u102b\u1033\u1034\u1035\u103a\u103b\u103c\u103d\u103e\u103f\u105a\u105b\u105c\u105d\u105e\u105f\u1060\u1061\u1062\u1063\u1064\u1065\u1066\u1067\u1068\u1069\u106a\u106b\u106c\u106d\u106e\u106f\u1070\u1071\u1072\u1073\u1074\u1075\u1076\u1077\u1078\u1079\u107a\u107b\u107c\u107d\u107e\u107f\u1080\u1081\u1082\u1083\u1084\u1085\u1086\u1087\u1088\u1089\u108a\u108b\u108c\u108d\u108e\u108f\u1090\u1091\u1092\u1093\u1094\u1095\u1096\u1097\u1098\u1099\u109a\u109b\u109c\u109d\u109e\u109f\u10c6\u10c7\u10c8\u10c9\u10ca\u10cb\u10cc\u10cd\u10ce\u10cf\u10fd\u10fe\u10ff\u115a\u115b\u115c\u115d\u115e\u11a3\u11a4\u11a5\u11a6\u11a7\u11fa\u11fb\u11fc\u11fd\u11fe\u11ff\u1249\u124e\u124f\u1257\u1259\u125e\u125f\u1289\u128e\u128f\u12b1\u12b6\u12b7\u12bf\u12c1\u12c6\u12c7\u12d7\u1311\u1316\u1317\u135b\u135c\u135d\u135e\u137d\u137e\u137f\u139a\u139b\u139c\u139d\u139e\u139f\u13f5\u13f6\u13f7\u13f8\u13f9\u13fa\u13fb\u13fc\u13fd\u13fe\u13ff\u1400\u1677\u1678\u1679\u167a\u167b\u167c\u167d\u167e\u167f\u169d\u169e\u169f\u16f1\u16f2\u16f3\u16f4\u16f5\u16f6\u16f7\u16f8\u16f9\u16fa\u16fb\u16fc\u16fd\u16fe\u16ff\u170d\u1715\u1716\u1717\u1718\u1719\u171a\u171b\u171c\u171d\u171e\u171f\u1737\u1738\u1739\u173a\u173b\u173c\u173d\u173e\u173f\u1754\u1755\u1756\u1757\u1758\u1759\u175a\u175b\u175c\u175d\u175e\u175f\u176d\u1771\u1774\u1775\u1776\u1777\u1778\u1779\u177a\u177b\u177c\u177d\u177e\u177f\u17de\u17df\u17ea\u17eb\u17ec\u17ed\u17ee\u17ef\u17fa\u17fb\u17fc\u17fd\u17fe\u17ff\u180f\u181a\u181b\u181c\u181d\u181e\u181f\u1878\u1879\u187a\u187b\u187c\u187d\u187e\u187f\u18aa\u18ab\u18ac\u18ad\u18ae\u18af\u18b0\u18b1\u18b2\u18b3\u18b4\u18b5\u18b6\u18b7\u18b8\u18b9\u18ba\u18bb\u18bc\u18bd\u18be\u18bf\u18c0\u18c1\u18c2\u18c3\u18c4\u18c5\u18c6\u18c7\u18c8\u18c9\u18ca\u18cb\u18cc\u18cd\u18ce\u18cf\u18d0\u18d1\u18d2\u18d3\u18d4\u18d5\u18d6\u18d7\u18d8\u18d9\u18da\u18db\u18dc\u18dd\u18de\u18df\u18e0\u18e1\u18e2\u18e3\u18e4\u18e5\u18e6\u18e7\u18e8\u18e9\u18ea\u18eb\u18ec\u18ed\u18ee\u18ef\u18f0\u18f1\u18f2\u18f3\u18f4\u18f5\u18f6\u18f7\u18f8\u18f9\u18fa\u18fb\u18fc\u18fd\u18fe\u18ff\u191d\u191e\u191f\u192c\u192d\u192e\u192f\u193c\u193d\u193e\u193f\u1941\u1942\u1943\u196e\u196f\u1975\u1976\u1977\u1978\u1979\u197a\u197b\u197c\u197d\u197e\u197f\u19aa\u19ab\u19ac\u19ad\u19ae\u19af\u19ca\u19cb\u19cc\u19cd\u19ce\u19cf\u19da\u19db\u19dc\u19dd\u1a1c\u1a1d\u1a20\u1a21\u1a22\u1a23\u1a24\u1a25\u1a26\u1a27\u1a28\u1a29\u1a2a\u1a2b\u1a2c\u1a2d\u1a2e\u1a2f\u1a30\u1a31\u1a32\u1a33\u1a34\u1a35\u1a36\u1a37\u1a38\u1a39\u1a3a\u1a3b\u1a3c\u1a3d\u1a3e\u1a3f\u1a40\u1a41\u1a42\u1a43\u1a44\u1a45\u1a46\u1a47\u1a48\u1a49\u1a4a\u1a4b\u1a4c\u1a4d\u1a4e\u1a4f\u1a50\u1a51\u1a52\u1a53\u1a54\u1a55\u1a56\u1a57\u1a58\u1a59\u1a5a\u1a5b\u1a5c\u1a5d\u1a5e\u1a5f\u1a60\u1a61\u1a62\u1a63\u1a64\u1a65\u1a66\u1a67\u1a68\u1a69\u1a6a\u1a6b\u1a6c\u1a6d\u1a6e\u1a6f\u1a70\u1a71\u1a72\u1a73\u1a74\u1a75\u1a76\u1a77\u1a78\u1a79\u1a7a\u1a7b\u1a7c\u1a7d\u1a7e\u1a7f\u1a80\u1a81\u1a82\u1a83\u1a84\u1a85\u1a86\u1a87\u1a88\u1a89\u1a8a\u1a8b\u1a8c\u1a8d\u1a8e\u1a8f\u1a90\u1a91\u1a92\u1a93\u1a94\u1a95\u1a96\u1a97\u1a98\u1a99\u1a9a\u1a9b\u1a9c\u1a9d\u1a9e\u1a9f\u1aa0\u1aa1\u1aa2\u1aa3\u1aa4\u1aa5\u1aa6\u1aa7\u1aa8\u1aa9\u1aaa\u1aab\u1aac\u1aad\u1aae\u1aaf\u1ab0\u1ab1\u1ab2\u1ab3\u1ab4\u1ab5\u1ab6\u1ab7\u1ab8\u1ab9\u1aba\u1abb\u1abc\u1abd\u1abe\u1abf\u1ac0\u1ac1\u1ac2\u1ac3\u1ac4\u1ac5\u1ac6\u1ac7\u1ac8\u1ac9\u1aca\u1acb\u1acc\u1acd\u1ace\u1acf\u1ad0\u1ad1\u1ad2\u1ad3\u1ad4\u1ad5\u1ad6\u1ad7\u1ad8\u1ad9\u1ada\u1adb\u1adc\u1add\u1ade\u1adf\u1ae0\u1ae1\u1ae2\u1ae3\u1ae4\u1ae5\u1ae6\u1ae7\u1ae8\u1ae9\u1aea\u1aeb\u1aec\u1aed\u1aee\u1aef\u1af0\u1af1\u1af2\u1af3\u1af4\u1af5\u1af6\u1af7\u1af8\u1af9\u1afa\u1afb\u1afc\u1afd\u1afe\u1aff\u1b00\u1b01\u1b02\u1b03\u1b04\u1b05\u1b06\u1b07\u1b08\u1b09\u1b0a\u1b0b\u1b0c\u1b0d\u1b0e\u1b0f\u1b10\u1b11\u1b12\u1b13\u1b14\u1b15\u1b16\u1b17\u1b18\u1b19\u1b1a\u1b1b\u1b1c\u1b1d\u1b1e\u1b1f\u1b20\u1b21\u1b22\u1b23\u1b24\u1b25\u1b26\u1b27\u1b28\u1b29\u1b2a\u1b2b\u1b2c\u1b2d\u1b2e\u1b2f\u1b30\u1b31\u1b32\u1b33\u1b34\u1b35\u1b36\u1b37\u1b38\u1b39\u1b3a\u1b3b\u1b3c\u1b3d\u1b3e\u1b3f\u1b40\u1b41\u1b42\u1b43\u1b44\u1b45\u1b46\u1b47\u1b48\u1b49\u1b4a\u1b4b\u1b4c\u1b4d\u1b4e\u1b4f\u1b50\u1b51\u1b52\u1b53\u1b54\u1b55\u1b56\u1b57\u1b58\u1b59\u1b5a\u1b5b\u1b5c\u1b5d\u1b5e\u1b5f\u1b60\u1b61\u1b62\u1b63\u1b64\u1b65\u1b66\u1b67\u1b68\u1b69\u1b6a\u1b6b\u1b6c\u1b6d\u1b6e\u1b6f\u1b70\u1b71\u1b72\u1b73\u1b74\u1b75\u1b76\u1b77\u1b78\u1b79\u1b7a\u1b7b\u1b7c\u1b7d\u1b7e\u1b7f\u1b80\u1b81\u1b82\u1b83\u1b84\u1b85\u1b86\u1b87\u1b88\u1b89\u1b8a\u1b8b\u1b8c\u1b8d\u1b8e\u1b8f\u1b90\u1b91\u1b92\u1b93\u1b94\u1b95\u1b96\u1b97\u1b98\u1b99\u1b9a\u1b9b\u1b9c\u1b9d\u1b9e\u1b9f\u1ba0\u1ba1\u1ba2\u1ba3\u1ba4\u1ba5\u1ba6\u1ba7\u1ba8\u1ba9\u1baa\u1bab\u1bac\u1bad\u1bae\u1baf\u1bb0\u1bb1\u1bb2\u1bb3\u1bb4\u1bb5\u1bb6\u1bb7\u1bb8\u1bb9\u1bba\u1bbb\u1bbc\u1bbd\u1bbe\u1bbf\u1bc0\u1bc1\u1bc2\u1bc3\u1bc4\u1bc5\u1bc6\u1bc7\u1bc8\u1bc9\u1bca\u1bcb\u1bcc\u1bcd\u1bce\u1bcf\u1bd0\u1bd1\u1bd2\u1bd3\u1bd4\u1bd5\u1bd6\u1bd7\u1bd8\u1bd9\u1bda\u1bdb\u1bdc\u1bdd\u1bde\u1bdf\u1be0\u1be1\u1be2\u1be3\u1be4\u1be5\u1be6\u1be7\u1be8\u1be9\u1bea\u1beb\u1bec\u1bed\u1bee\u1bef\u1bf0\u1bf1\u1bf2\u1bf3\u1bf4\u1bf5\u1bf6\u1bf7\u1bf8\u1bf9\u1bfa\u1bfb\u1bfc\u1bfd\u1bfe\u1bff\u1c00\u1c01\u1c02\u1c03\u1c04\u1c05\u1c06\u1c07\u1c08\u1c09\u1c0a\u1c0b\u1c0c\u1c0d\u1c0e\u1c0f\u1c10\u1c11\u1c12\u1c13\u1c14\u1c15\u1c16\u1c17\u1c18\u1c19\u1c1a\u1c1b\u1c1c\u1c1d\u1c1e\u1c1f\u1c20\u1c21\u1c22\u1c23\u1c24\u1c25\u1c26\u1c27\u1c28\u1c29\u1c2a\u1c2b\u1c2c\u1c2d\u1c2e\u1c2f\u1c30\u1c31\u1c32\u1c33\u1c34\u1c35\u1c36\u1c37\u1c38\u1c39\u1c3a\u1c3b\u1c3c\u1c3d\u1c3e\u1c3f\u1c40\u1c41\u1c42\u1c43\u1c44\u1c45\u1c46\u1c47\u1c48\u1c49\u1c4a\u1c4b\u1c4c\u1c4d\u1c4e\u1c4f\u1c50\u1c51\u1c52\u1c53\u1c54\u1c55\u1c56\u1c57\u1c58\u1c59\u1c5a\u1c5b\u1c5c\u1c5d\u1c5e\u1c5f\u1c60\u1c61\u1c62\u1c63\u1c64\u1c65\u1c66\u1c67\u1c68\u1c69\u1c6a\u1c6b\u1c6c\u1c6d\u1c6e\u1c6f\u1c70\u1c71\u1c72\u1c73\u1c74\u1c75\u1c76\u1c77\u1c78\u1c79\u1c7a\u1c7b\u1c7c\u1c7d\u1c7e\u1c7f\u1c80\u1c81\u1c82\u1c83\u1c84\u1c85\u1c86\u1c87\u1c88\u1c89\u1c8a\u1c8b\u1c8c\u1c8d\u1c8e\u1c8f\u1c90\u1c91\u1c92\u1c93\u1c94\u1c95\u1c96\u1c97\u1c98\u1c99\u1c9a\u1c9b\u1c9c\u1c9d\u1c9e\u1c9f\u1ca0\u1ca1\u1ca2\u1ca3\u1ca4\u1ca5\u1ca6\u1ca7\u1ca8\u1ca9\u1caa\u1cab\u1cac\u1cad\u1cae\u1caf\u1cb0\u1cb1\u1cb2\u1cb3\u1cb4\u1cb5\u1cb6\u1cb7\u1cb8\u1cb9\u1cba\u1cbb\u1cbc\u1cbd\u1cbe\u1cbf\u1cc0\u1cc1\u1cc2\u1cc3\u1cc4\u1cc5\u1cc6\u1cc7\u1cc8\u1cc9\u1cca\u1ccb\u1ccc\u1ccd\u1cce\u1ccf\u1cd0\u1cd1\u1cd2\u1cd3\u1cd4\u1cd5\u1cd6\u1cd7\u1cd8\u1cd9\u1cda\u1cdb\u1cdc\u1cdd\u1cde\u1cdf\u1ce0\u1ce1\u1ce2\u1ce3\u1ce4\u1ce5\u1ce6\u1ce7\u1ce8\u1ce9\u1cea\u1ceb\u1cec\u1ced\u1cee\u1cef\u1cf0\u1cf1\u1cf2\u1cf3\u1cf4\u1cf5\u1cf6\u1cf7\u1cf8\u1cf9\u1cfa\u1cfb\u1cfc\u1cfd\u1cfe\u1cff\u1dc4\u1dc5\u1dc6\u1dc7\u1dc8\u1dc9\u1dca\u1dcb\u1dcc\u1dcd\u1dce\u1dcf\u1dd0\u1dd1\u1dd2\u1dd3\u1dd4\u1dd5\u1dd6\u1dd7\u1dd8\u1dd9\u1dda\u1ddb\u1ddc\u1ddd\u1dde\u1ddf\u1de0\u1de1\u1de2\u1de3\u1de4\u1de5\u1de6\u1de7\u1de8\u1de9\u1dea\u1deb\u1dec\u1ded\u1dee\u1def\u1df0\u1df1\u1df2\u1df3\u1df4\u1df5\u1df6\u1df7\u1df8\u1df9\u1dfa\u1dfb\u1dfc\u1dfd\u1dfe\u1dff\u1e9c\u1e9d\u1e9e\u1e9f\u1efa\u1efb\u1efc\u1efd\u1efe\u1eff\u1f16\u1f17\u1f1e\u1f1f\u1f46\u1f47\u1f4e\u1f4f\u1f58\u1f5a\u1f5c\u1f5e\u1f7e\u1f7f\u1fb5\u1fc5\u1fd4\u1fd5\u1fdc\u1ff0\u1ff1\u1ff5\u1fff\u2064\u2065\u2066\u2067\u2068\u2069\u2072\u2073\u208f\u2095\u2096\u2097\u2098\u2099\u209a\u209b\u209c\u209d\u209e\u209f\u20b6\u20b7\u20b8\u20b9\u20ba\u20bb\u20bc\u20bd\u20be\u20bf\u20c0\u20c1\u20c2\u20c3\u20c4\u20c5\u20c6\u20c7\u20c8\u20c9\u20ca\u20cb\u20cc\u20cd\u20ce\u20cf\u20ec\u20ed\u20ee\u20ef\u20f0\u20f1\u20f2\u20f3\u20f4\u20f5\u20f6\u20f7\u20f8\u20f9\u20fa\u20fb\u20fc\u20fd\u20fe\u20ff\u214d\u214e\u214f\u2150\u2151\u2152\u2184\u2185\u2186\u2187\u2188\u2189\u218a\u218b\u218c\u218d\u218e\u218f\u23dc\u23dd\u23de\u23df\u23e0\u23e1\u23e2\u23e3\u23e4\u23e5\u23e6\u23e7\u23e8\u23e9\u23ea\u23eb\u23ec\u23ed\u23ee\u23ef\u23f0\u23f1\u23f2\u23f3\u23f4\u23f5\u23f6\u23f7\u23f8\u23f9\u23fa\u23fb\u23fc\u23fd\u23fe\u23ff\u2427\u2428\u2429\u242a\u242b\u242c\u242d\u242e\u242f\u2430\u2431\u2432\u2433\u2434\u2435\u2436\u2437\u2438\u2439\u243a\u243b\u243c\u243d\u243e\u243f\u244b\u244c\u244d\u244e\u244f\u2450\u2451\u2452\u2453\u2454\u2455\u2456\u2457\u2458\u2459\u245a\u245b\u245c\u245d\u245e\u245f\u269d\u269e\u269f\u26b2\u26b3\u26b4\u26b5\u26b6\u26b7\u26b8\u26b9\u26ba\u26bb\u26bc\u26bd\u26be\u26bf\u26c0\u26c1\u26c2\u26c3\u26c4\u26c5\u26c6\u26c7\u26c8\u26c9\u26ca\u26cb\u26cc\u26cd\u26ce\u26cf\u26d0\u26d1\u26d2\u26d3\u26d4\u26d5\u26d6\u26d7\u26d8\u26d9\u26da\u26db\u26dc\u26dd\u26de\u26df\u26e0\u26e1\u26e2\u26e3\u26e4\u26e5\u26e6\u26e7\u26e8\u26e9\u26ea\u26eb\u26ec\u26ed\u26ee\u26ef\u26f0\u26f1\u26f2\u26f3\u26f4\u26f5\u26f6\u26f7\u26f8\u26f9\u26fa\u26fb\u26fc\u26fd\u26fe\u26ff\u2700\u2705\u270a\u270b\u2728\u274c\u274e\u2753\u2754\u2755\u2757\u275f\u2760\u2795\u2796\u2797\u27b0\u27bf\u27c7\u27c8\u27c9\u27ca\u27cb\u27cc\u27cd\u27ce\u27cf\u27ec\u27ed\u27ee\u27ef\u2b14\u2b15\u2b16\u2b17\u2b18\u2b19\u2b1a\u2b1b\u2b1c\u2b1d\u2b1e\u2b1f\u2b20\u2b21\u2b22\u2b23\u2b24\u2b25\u2b26\u2b27\u2b28\u2b29\u2b2a\u2b2b\u2b2c\u2b2d\u2b2e\u2b2f\u2b30\u2b31\u2b32\u2b33\u2b34\u2b35\u2b36\u2b37\u2b38\u2b39\u2b3a\u2b3b\u2b3c\u2b3d\u2b3e\u2b3f\u2b40\u2b41\u2b42\u2b43\u2b44\u2b45\u2b46\u2b47\u2b48\u2b49\u2b4a\u2b4b\u2b4c\u2b4d\u2b4e\u2b4f\u2b50\u2b51\u2b52\u2b53\u2b54\u2b55\u2b56\u2b57\u2b58\u2b59\u2b5a\u2b5b\u2b5c\u2b5d\u2b5e\u2b5f\u2b60\u2b61\u2b62\u2b63\u2b64\u2b65\u2b66\u2b67\u2b68\u2b69\u2b6a\u2b6b\u2b6c\u2b6d\u2b6e\u2b6f\u2b70\u2b71\u2b72\u2b73\u2b74\u2b75\u2b76\u2b77\u2b78\u2b79\u2b7a\u2b7b\u2b7c\u2b7d\u2b7e\u2b7f\u2b80\u2b81\u2b82\u2b83\u2b84\u2b85\u2b86\u2b87\u2b88\u2b89\u2b8a\u2b8b\u2b8c\u2b8d\u2b8e\u2b8f\u2b90\u2b91\u2b92\u2b93\u2b94\u2b95\u2b96\u2b97\u2b98\u2b99\u2b9a\u2b9b\u2b9c\u2b9d\u2b9e\u2b9f\u2ba0\u2ba1\u2ba2\u2ba3\u2ba4\u2ba5\u2ba6\u2ba7\u2ba8\u2ba9\u2baa\u2bab\u2bac\u2bad\u2bae\u2baf\u2bb0\u2bb1\u2bb2\u2bb3\u2bb4\u2bb5\u2bb6\u2bb7\u2bb8\u2bb9\u2bba\u2bbb\u2bbc\u2bbd\u2bbe\u2bbf\u2bc0\u2bc1\u2bc2\u2bc3\u2bc4\u2bc5\u2bc6\u2bc7\u2bc8\u2bc9\u2bca\u2bcb\u2bcc\u2bcd\u2bce\u2bcf\u2bd0\u2bd1\u2bd2\u2bd3\u2bd4\u2bd5\u2bd6\u2bd7\u2bd8\u2bd9\u2bda\u2bdb\u2bdc\u2bdd\u2bde\u2bdf\u2be0\u2be1\u2be2\u2be3\u2be4\u2be5\u2be6\u2be7\u2be8\u2be9\u2bea\u2beb\u2bec\u2bed\u2bee\u2bef\u2bf0\u2bf1\u2bf2\u2bf3\u2bf4\u2bf5\u2bf6\u2bf7\u2bf8\u2bf9\u2bfa\u2bfb\u2bfc\u2bfd\u2bfe\u2bff\u2c2f\u2c5f\u2c60\u2c61\u2c62\u2c63\u2c64\u2c65\u2c66\u2c67\u2c68\u2c69\u2c6a\u2c6b\u2c6c\u2c6d\u2c6e\u2c6f\u2c70\u2c71\u2c72\u2c73\u2c74\u2c75\u2c76\u2c77\u2c78\u2c79\u2c7a\u2c7b\u2c7c\u2c7d\u2c7e\u2c7f\u2ceb\u2cec\u2ced\u2cee\u2cef\u2cf0\u2cf1\u2cf2\u2cf3\u2cf4\u2cf5\u2cf6\u2cf7\u2cf8\u2d26\u2d27\u2d28\u2d29\u2d2a\u2d2b\u2d2c\u2d2d\u2d2e\u2d2f\u2d66\u2d67\u2d68\u2d69\u2d6a\u2d6b\u2d6c\u2d6d\u2d6e\u2d70\u2d71\u2d72\u2d73\u2d74\u2d75\u2d76\u2d77\u2d78\u2d79\u2d7a\u2d7b\u2d7c\u2d7d\u2d7e\u2d7f\u2d97\u2d98\u2d99\u2d9a\u2d9b\u2d9c\u2d9d\u2d9e\u2d9f\u2da7\u2daf\u2db7\u2dbf\u2dc7\u2dcf\u2dd7\u2ddf\u2de0\u2de1\u2de2\u2de3\u2de4\u2de5\u2de6\u2de7\u2de8\u2de9\u2dea\u2deb\u2dec\u2ded\u2dee\u2def\u2df0\u2df1\u2df2\u2df3\u2df4\u2df5\u2df6\u2df7\u2df8\u2df9\u2dfa\u2dfb\u2dfc\u2dfd\u2dfe\u2dff\u2e18\u2e19\u2e1a\u2e1b\u2e1e\u2e1f\u2e20\u2e21\u2e22\u2e23\u2e24\u2e25\u2e26\u2e27\u2e28\u2e29\u2e2a\u2e2b\u2e2c\u2e2d\u2e2e\u2e2f\u2e30\u2e31\u2e32\u2e33\u2e34\u2e35\u2e36\u2e37\u2e38\u2e39\u2e3a\u2e3b\u2e3c\u2e3d\u2e3e\u2e3f\u2e40\u2e41\u2e42\u2e43\u2e44\u2e45\u2e46\u2e47\u2e48\u2e49\u2e4a\u2e4b\u2e4c\u2e4d\u2e4e\u2e4f\u2e50\u2e51\u2e52\u2e53\u2e54\u2e55\u2e56\u2e57\u2e58\u2e59\u2e5a\u2e5b\u2e5c\u2e5d\u2e5e\u2e5f\u2e60\u2e61\u2e62\u2e63\u2e64\u2e65\u2e66\u2e67\u2e68\u2e69\u2e6a\u2e6b\u2e6c\u2e6d\u2e6e\u2e6f\u2e70\u2e71\u2e72\u2e73\u2e74\u2e75\u2e76\u2e77\u2e78\u2e79\u2e7a\u2e7b\u2e7c\u2e7d\u2e7e\u2e7f\u2e9a\u2ef4\u2ef5\u2ef6\u2ef7\u2ef8\u2ef9\u2efa\u2efb\u2efc\u2efd\u2efe\u2eff\u2fd6\u2fd7\u2fd8\u2fd9\u2fda\u2fdb\u2fdc\u2fdd\u2fde\u2fdf\u2fe0\u2fe1\u2fe2\u2fe3\u2fe4\u2fe5\u2fe6\u2fe7\u2fe8\u2fe9\u2fea\u2feb\u2fec\u2fed\u2fee\u2fef\u2ffc\u2ffd\u2ffe\u2fff\u3040\u3097\u3098\u3100\u3101\u3102\u3103\u3104\u312d\u312e\u312f\u3130\u318f\u31b8\u31b9\u31ba\u31bb\u31bc\u31bd\u31be\u31bf\u31d0\u31d1\u31d2\u31d3\u31d4\u31d5\u31d6\u31d7\u31d8\u31d9\u31da\u31db\u31dc\u31dd\u31de\u31df\u31e0\u31e1\u31e2\u31e3\u31e4\u31e5\u31e6\u31e7\u31e8\u31e9\u31ea\u31eb\u31ec\u31ed\u31ee\u31ef\u321f\u3244\u3245\u3246\u3247\u3248\u3249\u324a\u324b\u324c\u324d\u324e\u324f\u32ff\u4db6\u4db7\u4db8\u4db9\u4dba\u4dbb\u4dbc\u4dbd\u4dbe\u4dbf\u9fbc\u9fbd\u9fbe\u9fbf\u9fc0\u9fc1\u9fc2\u9fc3\u9fc4\u9fc5\u9fc6\u9fc7\u9fc8\u9fc9\u9fca\u9fcb\u9fcc\u9fcd\u9fce\u9fcf\u9fd0\u9fd1\u9fd2\u9fd3\u9fd4\u9fd5\u9fd6\u9fd7\u9fd8\u9fd9\u9fda\u9fdb\u9fdc\u9fdd\u9fde\u9fdf\u9fe0\u9fe1\u9fe2\u9fe3\u9fe4\u9fe5\u9fe6\u9fe7\u9fe8\u9fe9\u9fea\u9feb\u9fec\u9fed\u9fee\u9fef\u9ff0\u9ff1\u9ff2\u9ff3\u9ff4\u9ff5\u9ff6\u9ff7\u9ff8\u9ff9\u9ffa\u9ffb\u9ffc\u9ffd\u9ffe\u9fff\ua48d\ua48e\ua48f\ua4c7\ua4c8\ua4c9\ua4ca\ua4cb\ua4cc\ua4cd\ua4ce\ua4cf\ua4d0\ua4d1\ua4d2\ua4d3\ua4d4\ua4d5\ua4d6\ua4d7\ua4d8\ua4d9\ua4da\ua4db\ua4dc\ua4dd\ua4de\ua4df\ua4e0\ua4e1\ua4e2\ua4e3\ua4e4\ua4e5\ua4e6\ua4e7\ua4e8\ua4e9\ua4ea\ua4eb\ua4ec\ua4ed\ua4ee\ua4ef\ua4f0\ua4f1\ua4f2\ua4f3\ua4f4\ua4f5\ua4f6\ua4f7\ua4f8\ua4f9\ua4fa\ua4fb\ua4fc\ua4fd\ua4fe\ua4ff\ua500\ua501\ua502\ua503\ua504\ua505\ua506\ua507\ua508\ua509\ua50a\ua50b\ua50c\ua50d\ua50e\ua50f\ua510\ua511\ua512\ua513\ua514\ua515\ua516\ua517\ua518\ua519\ua51a\ua51b\ua51c\ua51d\ua51e\ua51f\ua520\ua521\ua522\ua523\ua524\ua525\ua526\ua527\ua528\ua529\ua52a\ua52b\ua52c\ua52d\ua52e\ua52f\ua530\ua531\ua532\ua533\ua534\ua535\ua536\ua537\ua538\ua539\ua53a\ua53b\ua53c\ua53d\ua53e\ua53f\ua540\ua541\ua542\ua543\ua544\ua545\ua546\ua547\ua548\ua549\ua54a\ua54b\ua54c\ua54d\ua54e\ua54f\ua550\ua551\ua552\ua553\ua554\ua555\ua556\ua557\ua558\ua559\ua55a\ua55b\ua55c\ua55d\ua55e\ua55f\ua560\ua561\ua562\ua563\ua564\ua565\ua566\ua567\ua568\ua569\ua56a\ua56b\ua56c\ua56d\ua56e\ua56f\ua570\ua571\ua572\ua573\ua574\ua575\ua576\ua577\ua578\ua579\ua57a\ua57b\ua57c\ua57d\ua57e\ua57f\ua580\ua581\ua582\ua583\ua584\ua585\ua586\ua587\ua588\ua589\ua58a\ua58b\ua58c\ua58d\ua58e\ua58f\ua590\ua591\ua592\ua593\ua594\ua595\ua596\ua597\ua598\ua599\ua59a\ua59b\ua59c\ua59d\ua59e\ua59f\ua5a0\ua5a1\ua5a2\ua5a3\ua5a4\ua5a5\ua5a6\ua5a7\ua5a8\ua5a9\ua5aa\ua5ab\ua5ac\ua5ad\ua5ae\ua5af\ua5b0\ua5b1\ua5b2\ua5b3\ua5b4\ua5b5\ua5b6\ua5b7\ua5b8\ua5b9\ua5ba\ua5bb\ua5bc\ua5bd\ua5be\ua5bf\ua5c0\ua5c1\ua5c2\ua5c3\ua5c4\ua5c5\ua5c6\ua5c7\ua5c8\ua5c9\ua5ca\ua5cb\ua5cc\ua5cd\ua5ce\ua5cf\ua5d0\ua5d1\ua5d2\ua5d3\ua5d4\ua5d5\ua5d6\ua5d7\ua5d8\ua5d9\ua5da\ua5db\ua5dc\ua5dd\ua5de\ua5df\ua5e0\ua5e1\ua5e2\ua5e3\ua5e4\ua5e5\ua5e6\ua5e7\ua5e8\ua5e9\ua5ea\ua5eb\ua5ec\ua5ed\ua5ee\ua5ef\ua5f0\ua5f1\ua5f2\ua5f3\ua5f4\ua5f5\ua5f6\ua5f7\ua5f8\ua5f9\ua5fa\ua5fb\ua5fc\ua5fd\ua5fe\ua5ff\ua600\ua601\ua602\ua603\ua604\ua605\ua606\ua607\ua608\ua609\ua60a\ua60b\ua60c\ua60d\ua60e\ua60f\ua610\ua611\ua612\ua613\ua614\ua615\ua616\ua617\ua618\ua619\ua61a\ua61b\ua61c\ua61d\ua61e\ua61f\ua620\ua621\ua622\ua623\ua624\ua625\ua626\ua627\ua628\ua629\ua62a\ua62b\ua62c\ua62d\ua62e\ua62f\ua630\ua631\ua632\ua633\ua634\ua635\ua636\ua637\ua638\ua639\ua63a\ua63b\ua63c\ua63d\ua63e\ua63f\ua640\ua641\ua642\ua643\ua644\ua645\ua646\ua647\ua648\ua649\ua64a\ua64b\ua64c\ua64d\ua64e\ua64f\ua650\ua651\ua652\ua653\ua654\ua655\ua656\ua657\ua658\ua659\ua65a\ua65b\ua65c\ua65d\ua65e\ua65f\ua660\ua661\ua662\ua663\ua664\ua665\ua666\ua667\ua668\ua669\ua66a\ua66b\ua66c\ua66d\ua66e\ua66f\ua670\ua671\ua672\ua673\ua674\ua675\ua676\ua677\ua678\ua679\ua67a\ua67b\ua67c\ua67d\ua67e\ua67f\ua680\ua681\ua682\ua683\ua684\ua685\ua686\ua687\ua688\ua689\ua68a\ua68b\ua68c\ua68d\ua68e\ua68f\ua690\ua691\ua692\ua693\ua694\ua695\ua696\ua697\ua698\ua699\ua69a\ua69b\ua69c\ua69d\ua69e\ua69f\ua6a0\ua6a1\ua6a2\ua6a3\ua6a4\ua6a5\ua6a6\ua6a7\ua6a8\ua6a9\ua6aa\ua6ab\ua6ac\ua6ad\ua6ae\ua6af\ua6b0\ua6b1\ua6b2\ua6b3\ua6b4\ua6b5\ua6b6\ua6b7\ua6b8\ua6b9\ua6ba\ua6bb\ua6bc\ua6bd\ua6be\ua6bf\ua6c0\ua6c1\ua6c2\ua6c3\ua6c4\ua6c5\ua6c6\ua6c7\ua6c8\ua6c9\ua6ca\ua6cb\ua6cc\ua6cd\ua6ce\ua6cf\ua6d0\ua6d1\ua6d2\ua6d3\ua6d4\ua6d5\ua6d6\ua6d7\ua6d8\ua6d9\ua6da\ua6db\ua6dc\ua6dd\ua6de\ua6df\ua6e0\ua6e1\ua6e2\ua6e3\ua6e4\ua6e5\ua6e6\ua6e7\ua6e8\ua6e9\ua6ea\ua6eb\ua6ec\ua6ed\ua6ee\ua6ef\ua6f0\ua6f1\ua6f2\ua6f3\ua6f4\ua6f5\ua6f6\ua6f7\ua6f8\ua6f9\ua6fa\ua6fb\ua6fc\ua6fd\ua6fe\ua6ff\ua717\ua718\ua719\ua71a\ua71b\ua71c\ua71d\ua71e\ua71f\ua720\ua721\ua722\ua723\ua724\ua725\ua726\ua727\ua728\ua729\ua72a\ua72b\ua72c\ua72d\ua72e\ua72f\ua730\ua731\ua732\ua733\ua734\ua735\ua736\ua737\ua738\ua739\ua73a\ua73b\ua73c\ua73d\ua73e\ua73f\ua740\ua741\ua742\ua743\ua744\ua745\ua746\ua747\ua748\ua749\ua74a\ua74b\ua74c\ua74d\ua74e\ua74f\ua750\ua751\ua752\ua753\ua754\ua755\ua756\ua757\ua758\ua759\ua75a\ua75b\ua75c\ua75d\ua75e\ua75f\ua760\ua761\ua762\ua763\ua764\ua765\ua766\ua767\ua768\ua769\ua76a\ua76b\ua76c\ua76d\ua76e\ua76f\ua770\ua771\ua772\ua773\ua774\ua775\ua776\ua777\ua778\ua779\ua77a\ua77b\ua77c\ua77d\ua77e\ua77f\ua780\ua781\ua782\ua783\ua784\ua785\ua786\ua787\ua788\ua789\ua78a\ua78b\ua78c\ua78d\ua78e\ua78f\ua790\ua791\ua792\ua793\ua794\ua795\ua796\ua797\ua798\ua799\ua79a\ua79b\ua79c\ua79d\ua79e\ua79f\ua7a0\ua7a1\ua7a2\ua7a3\ua7a4\ua7a5\ua7a6\ua7a7\ua7a8\ua7a9\ua7aa\ua7ab\ua7ac\ua7ad\ua7ae\ua7af\ua7b0\ua7b1\ua7b2\ua7b3\ua7b4\ua7b5\ua7b6\ua7b7\ua7b8\ua7b9\ua7ba\ua7bb\ua7bc\ua7bd\ua7be\ua7bf\ua7c0\ua7c1\ua7c2\ua7c3\ua7c4\ua7c5\ua7c6\ua7c7\ua7c8\ua7c9\ua7ca\ua7cb\ua7cc\ua7cd\ua7ce\ua7cf\ua7d0\ua7d1\ua7d2\ua7d3\ua7d4\ua7d5\ua7d6\ua7d7\ua7d8\ua7d9\ua7da\ua7db\ua7dc\ua7dd\ua7de\ua7df\ua7e0\ua7e1\ua7e2\ua7e3\ua7e4\ua7e5\ua7e6\ua7e7\ua7e8\ua7e9\ua7ea\ua7eb\ua7ec\ua7ed\ua7ee\ua7ef\ua7f0\ua7f1\ua7f2\ua7f3\ua7f4\ua7f5\ua7f6\ua7f7\ua7f8\ua7f9\ua7fa\ua7fb\ua7fc\ua7fd\ua7fe\ua7ff\ua82c\ua82d\ua82e\ua82f\ua830\ua831\ua832\ua833\ua834\ua835\ua836\ua837\ua838\ua839\ua83a\ua83b\ua83c\ua83d\ua83e\ua83f\ua840\ua841\ua842\ua843\ua844\ua845\ua846\ua847\ua848\ua849\ua84a\ua84b\ua84c\ua84d\ua84e\ua84f\ua850\ua851\ua852\ua853\ua854\ua855\ua856\ua857\ua858\ua859\ua85a\ua85b\ua85c\ua85d\ua85e\ua85f\ua860\ua861\ua862\ua863\ua864\ua865\ua866\ua867\ua868\ua869\ua86a\ua86b\ua86c\ua86d\ua86e\ua86f\ua870\ua871\ua872\ua873\ua874\ua875\ua876\ua877\ua878\ua879\ua87a\ua87b\ua87c\ua87d\ua87e\ua87f\ua880\ua881\ua882\ua883\ua884\ua885\ua886\ua887\ua888\ua889\ua88a\ua88b\ua88c\ua88d\ua88e\ua88f\ua890\ua891\ua892\ua893\ua894\ua895\ua896\ua897\ua898\ua899\ua89a\ua89b\ua89c\ua89d\ua89e\ua89f\ua8a0\ua8a1\ua8a2\ua8a3\ua8a4\ua8a5\ua8a6\ua8a7\ua8a8\ua8a9\ua8aa\ua8ab\ua8ac\ua8ad\ua8ae\ua8af\ua8b0\ua8b1\ua8b2\ua8b3\ua8b4\ua8b5\ua8b6\ua8b7\ua8b8\ua8b9\ua8ba\ua8bb\ua8bc\ua8bd\ua8be\ua8bf\ua8c0\ua8c1\ua8c2\ua8c3\ua8c4\ua8c5\ua8c6\ua8c7\ua8c8\ua8c9\ua8ca\ua8cb\ua8cc\ua8cd\ua8ce\ua8cf\ua8d0\ua8d1\ua8d2\ua8d3\ua8d4\ua8d5\ua8d6\ua8d7\ua8d8\ua8d9\ua8da\ua8db\ua8dc\ua8dd\ua8de\ua8df\ua8e0\ua8e1\ua8e2\ua8e3\ua8e4\ua8e5\ua8e6\ua8e7\ua8e8\ua8e9\ua8ea\ua8eb\ua8ec\ua8ed\ua8ee\ua8ef\ua8f0\ua8f1\ua8f2\ua8f3\ua8f4\ua8f5\ua8f6\ua8f7\ua8f8\ua8f9\ua8fa\ua8fb\ua8fc\ua8fd\ua8fe\ua8ff\ua900\ua901\ua902\ua903\ua904\ua905\ua906\ua907\ua908\ua909\ua90a\ua90b\ua90c\ua90d\ua90e\ua90f\ua910\ua911\ua912\ua913\ua914\ua915\ua916\ua917\ua918\ua919\ua91a\ua91b\ua91c\ua91d\ua91e\ua91f\ua920\ua921\ua922\ua923\ua924\ua925\ua926\ua927\ua928\ua929\ua92a\ua92b\ua92c\ua92d\ua92e\ua92f\ua930\ua931\ua932\ua933\ua934\ua935\ua936\ua937\ua938\ua939\ua93a\ua93b\ua93c\ua93d\ua93e\ua93f\ua940\ua941\ua942\ua943\ua944\ua945\ua946\ua947\ua948\ua949\ua94a\ua94b\ua94c\ua94d\ua94e\ua94f\ua950\ua951\ua952\ua953\ua954\ua955\ua956\ua957\ua958\ua959\ua95a\ua95b\ua95c\ua95d\ua95e\ua95f\ua960\ua961\ua962\ua963\ua964\ua965\ua966\ua967\ua968\ua969\ua96a\ua96b\ua96c\ua96d\ua96e\ua96f\ua970\ua971\ua972\ua973\ua974\ua975\ua976\ua977\ua978\ua979\ua97a\ua97b\ua97c\ua97d\ua97e\ua97f\ua980\ua981\ua982\ua983\ua984\ua985\ua986\ua987\ua988\ua989\ua98a\ua98b\ua98c\ua98d\ua98e\ua98f\ua990\ua991\ua992\ua993\ua994\ua995\ua996\ua997\ua998\ua999\ua99a\ua99b\ua99c\ua99d\ua99e\ua99f\ua9a0\ua9a1\ua9a2\ua9a3\ua9a4\ua9a5\ua9a6\ua9a7\ua9a8\ua9a9\ua9aa\ua9ab\ua9ac\ua9ad\ua9ae\ua9af\ua9b0\ua9b1\ua9b2\ua9b3\ua9b4\ua9b5\ua9b6\ua9b7\ua9b8\ua9b9\ua9ba\ua9bb\ua9bc\ua9bd\ua9be\ua9bf\ua9c0\ua9c1\ua9c2\ua9c3\ua9c4\ua9c5\ua9c6\ua9c7\ua9c8\ua9c9\ua9ca\ua9cb\ua9cc\ua9cd\ua9ce\ua9cf\ua9d0\ua9d1\ua9d2\ua9d3\ua9d4\ua9d5\ua9d6\ua9d7\ua9d8\ua9d9\ua9da\ua9db\ua9dc\ua9dd\ua9de\ua9df\ua9e0\ua9e1\ua9e2\ua9e3\ua9e4\ua9e5\ua9e6\ua9e7\ua9e8\ua9e9\ua9ea\ua9eb\ua9ec\ua9ed\ua9ee\ua9ef\ua9f0\ua9f1\ua9f2\ua9f3\ua9f4\ua9f5\ua9f6\ua9f7\ua9f8\ua9f9\ua9fa\ua9fb\ua9fc\ua9fd\ua9fe\ua9ff\uaa00\uaa01\uaa02\uaa03\uaa04\uaa05\uaa06\uaa07\uaa08\uaa09\uaa0a\uaa0b\uaa0c\uaa0d\uaa0e\uaa0f\uaa10\uaa11\uaa12\uaa13\uaa14\uaa15\uaa16\uaa17\uaa18\uaa19\uaa1a\uaa1b\uaa1c\uaa1d\uaa1e\uaa1f\uaa20\uaa21\uaa22\uaa23\uaa24\uaa25\uaa26\uaa27\uaa28\uaa29\uaa2a\uaa2b\uaa2c\uaa2d\uaa2e\uaa2f\uaa30\uaa31\uaa32\uaa33\uaa34\uaa35\uaa36\uaa37\uaa38\uaa39\uaa3a\uaa3b\uaa3c\uaa3d\uaa3e\uaa3f\uaa40\uaa41\uaa42\uaa43\uaa44\uaa45\uaa46\uaa47\uaa48\uaa49\uaa4a\uaa4b\uaa4c\uaa4d\uaa4e\uaa4f\uaa50\uaa51\uaa52\uaa53\uaa54\uaa55\uaa56\uaa57\uaa58\uaa59\uaa5a\uaa5b\uaa5c\uaa5d\uaa5e\uaa5f\uaa60\uaa61\uaa62\uaa63\uaa64\uaa65\uaa66\uaa67\uaa68\uaa69\uaa6a\uaa6b\uaa6c\uaa6d\uaa6e\uaa6f\uaa70\uaa71\uaa72\uaa73\uaa74\uaa75\uaa76\uaa77\uaa78\uaa79\uaa7a\uaa7b\uaa7c\uaa7d\uaa7e\uaa7f\uaa80\uaa81\uaa82\uaa83\uaa84\uaa85\uaa86\uaa87\uaa88\uaa89\uaa8a\uaa8b\uaa8c\uaa8d\uaa8e\uaa8f\uaa90\uaa91\uaa92\uaa93\uaa94\uaa95\uaa96\uaa97\uaa98\uaa99\uaa9a\uaa9b\uaa9c\uaa9d\uaa9e\uaa9f\uaaa0\uaaa1\uaaa2\uaaa3\uaaa4\uaaa5\uaaa6\uaaa7\uaaa8\uaaa9\uaaaa\uaaab\uaaac\uaaad\uaaae\uaaaf\uaab0\uaab1\uaab2\uaab3\uaab4\uaab5\uaab6\uaab7\uaab8\uaab9\uaaba\uaabb\uaabc\uaabd\uaabe\uaabf\uaac0\uaac1\uaac2\uaac3\uaac4\uaac5\uaac6\uaac7\uaac8\uaac9\uaaca\uaacb\uaacc\uaacd\uaace\uaacf\uaad0\uaad1\uaad2\uaad3\uaad4\uaad5\uaad6\uaad7\uaad8\uaad9\uaada\uaadb\uaadc\uaadd\uaade\uaadf\uaae0\uaae1\uaae2\uaae3\uaae4\uaae5\uaae6\uaae7\uaae8\uaae9\uaaea\uaaeb\uaaec\uaaed\uaaee\uaaef\uaaf0\uaaf1\uaaf2\uaaf3\uaaf4\uaaf5\uaaf6\uaaf7\uaaf8\uaaf9\uaafa\uaafb\uaafc\uaafd\uaafe\uaaff\uab00\uab01\uab02\uab03\uab04\uab05\uab06\uab07\uab08\uab09\uab0a\uab0b\uab0c\uab0d\uab0e\uab0f\uab10\uab11\uab12\uab13\uab14\uab15\uab16\uab17\uab18\uab19\uab1a\uab1b\uab1c\uab1d\uab1e\uab1f\uab20\uab21\uab22\uab23\uab24\uab25\uab26\uab27\uab28\uab29\uab2a\uab2b\uab2c\uab2d\uab2e\uab2f\uab30\uab31\uab32\uab33\uab34\uab35\uab36\uab37\uab38\uab39\uab3a\uab3b\uab3c\uab3d\uab3e\uab3f\uab40\uab41\uab42\uab43\uab44\uab45\uab46\uab47\uab48\uab49\uab4a\uab4b\uab4c\uab4d\uab4e\uab4f\uab50\uab51\uab52\uab53\uab54\uab55\uab56\uab57\uab58\uab59\uab5a\uab5b\uab5c\uab5d\uab5e\uab5f\uab60\uab61\uab62\uab63\uab64\uab65\uab66\uab67\uab68\uab69\uab6a\uab6b\uab6c\uab6d\uab6e\uab6f\uab70\uab71\uab72\uab73\uab74\uab75\uab76\uab77\uab78\uab79\uab7a\uab7b\uab7c\uab7d\uab7e\uab7f\uab80\uab81\uab82\uab83\uab84\uab85\uab86\uab87\uab88\uab89\uab8a\uab8b\uab8c\uab8d\uab8e\uab8f\uab90\uab91\uab92\uab93\uab94\uab95\uab96\uab97\uab98\uab99\uab9a\uab9b\uab9c\uab9d\uab9e\uab9f\uaba0\uaba1\uaba2\uaba3\uaba4\uaba5\uaba6\uaba7\uaba8\uaba9\uabaa\uabab\uabac\uabad\uabae\uabaf\uabb0\uabb1\uabb2\uabb3\uabb4\uabb5\uabb6\uabb7\uabb8\uabb9\uabba\uabbb\uabbc\uabbd\uabbe\uabbf\uabc0\uabc1\uabc2\uabc3\uabc4\uabc5\uabc6\uabc7\uabc8\uabc9\uabca\uabcb\uabcc\uabcd\uabce\uabcf\uabd0\uabd1\uabd2\uabd3\uabd4\uabd5\uabd6\uabd7\uabd8\uabd9\uabda\uabdb\uabdc\uabdd\uabde\uabdf\uabe0\uabe1\uabe2\uabe3\uabe4\uabe5\uabe6\uabe7\uabe8\uabe9\uabea\uabeb\uabec\uabed\uabee\uabef\uabf0\uabf1\uabf2\uabf3\uabf4\uabf5\uabf6\uabf7\uabf8\uabf9\uabfa\uabfb\uabfc\uabfd\uabfe\uabff\ud7a4\ud7a5\ud7a6\ud7a7\ud7a8\ud7a9\ud7aa\ud7ab\ud7ac\ud7ad\ud7ae\ud7af\ud7b0\ud7b1\ud7b2\ud7b3\ud7b4\ud7b5\ud7b6\ud7b7\ud7b8\ud7b9\ud7ba\ud7bb\ud7bc\ud7bd\ud7be\ud7bf\ud7c0\ud7c1\ud7c2\ud7c3\ud7c4\ud7c5\ud7c6\ud7c7\ud7c8\ud7c9\ud7ca\ud7cb\ud7cc\ud7cd\ud7ce\ud7cf\ud7d0\ud7d1\ud7d2\ud7d3\ud7d4\ud7d5\ud7d6\ud7d7\ud7d8\ud7d9\ud7da\ud7db\ud7dc\ud7dd\ud7de\ud7df\ud7e0\ud7e1\ud7e2\ud7e3\ud7e4\ud7e5\ud7e6\ud7e7\ud7e8\ud7e9\ud7ea\ud7eb\ud7ec\ud7ed\ud7ee\ud7ef\ud7f0\ud7f1\ud7f2\ud7f3\ud7f4\ud7f5\ud7f6\ud7f7\ud7f8\ud7f9\ud7fa\ud7fb\ud7fc\ud7fd\ud7fe\ud7ff\ufa2e\ufa2f\ufa6b\ufa6c\ufa6d\ufa6e\ufa6f\ufada\ufadb\ufadc\ufadd\ufade\ufadf\ufae0\ufae1\ufae2\ufae3\ufae4\ufae5\ufae6\ufae7\ufae8\ufae9\ufaea\ufaeb\ufaec\ufaed\ufaee\ufaef\ufaf0\ufaf1\ufaf2\ufaf3\ufaf4\ufaf5\ufaf6\ufaf7\ufaf8\ufaf9\ufafa\ufafb\ufafc\ufafd\ufafe\ufaff\ufb07\ufb08\ufb09\ufb0a\ufb0b\ufb0c\ufb0d\ufb0e\ufb0f\ufb10\ufb11\ufb12\ufb18\ufb19\ufb1a\ufb1b\ufb1c\ufb37\ufb3d\ufb3f\ufb42\ufb45\ufbb2\ufbb3\ufbb4\ufbb5\ufbb6\ufbb7\ufbb8\ufbb9\ufbba\ufbbb\ufbbc\ufbbd\ufbbe\ufbbf\ufbc0\ufbc1\ufbc2\ufbc3\ufbc4\ufbc5\ufbc6\ufbc7\ufbc8\ufbc9\ufbca\ufbcb\ufbcc\ufbcd\ufbce\ufbcf\ufbd0\ufbd1\ufbd2\ufd40\ufd41\ufd42\ufd43\ufd44\ufd45\ufd46\ufd47\ufd48\ufd49\ufd4a\ufd4b\ufd4c\ufd4d\ufd4e\ufd4f\ufd90\ufd91\ufdc8\ufdc9\ufdca\ufdcb\ufdcc\ufdcd\ufdce\ufdcf\ufdd0\ufdd1\ufdd2\ufdd3\ufdd4\ufdd5\ufdd6\ufdd7\ufdd8\ufdd9\ufdda\ufddb\ufddc\ufddd\ufdde\ufddf\ufde0\ufde1\ufde2\ufde3\ufde4\ufde5\ufde6\ufde7\ufde8\ufde9\ufdea\ufdeb\ufdec\ufded\ufdee\ufdef\ufdfe\ufdff\ufe1a\ufe1b\ufe1c\ufe1d\ufe1e\ufe1f\ufe24\ufe25\ufe26\ufe27\ufe28\ufe29\ufe2a\ufe2b\ufe2c\ufe2d\ufe2e\ufe2f\ufe53\ufe67\ufe6c\ufe6d\ufe6e\ufe6f\ufe75\ufefd\ufefe\uff00\uffbf\uffc0\uffc1\uffc8\uffc9\uffd0\uffd1\uffd8\uffd9\uffdd\uffde\uffdf\uffe7\uffef\ufff0\ufff1\ufff2\ufff3\ufff4\ufff5\ufff6\ufff7\ufff8\ufffe'
    
    Co = u'\ue000\ue001\ue002\ue003\ue004\ue005\ue006\ue007\ue008\ue009\ue00a\ue00b\ue00c\ue00d\ue00e\ue00f\ue010\ue011\ue012\ue013\ue014\ue015\ue016\ue017\ue018\ue019\ue01a\ue01b\ue01c\ue01d\ue01e\ue01f\ue020\ue021\ue022\ue023\ue024\ue025\ue026\ue027\ue028\ue029\ue02a\ue02b\ue02c\ue02d\ue02e\ue02f\ue030\ue031\ue032\ue033\ue034\ue035\ue036\ue037\ue038\ue039\ue03a\ue03b\ue03c\ue03d\ue03e\ue03f\ue040\ue041\ue042\ue043\ue044\ue045\ue046\ue047\ue048\ue049\ue04a\ue04b\ue04c\ue04d\ue04e\ue04f\ue050\ue051\ue052\ue053\ue054\ue055\ue056\ue057\ue058\ue059\ue05a\ue05b\ue05c\ue05d\ue05e\ue05f\ue060\ue061\ue062\ue063\ue064\ue065\ue066\ue067\ue068\ue069\ue06a\ue06b\ue06c\ue06d\ue06e\ue06f\ue070\ue071\ue072\ue073\ue074\ue075\ue076\ue077\ue078\ue079\ue07a\ue07b\ue07c\ue07d\ue07e\ue07f\ue080\ue081\ue082\ue083\ue084\ue085\ue086\ue087\ue088\ue089\ue08a\ue08b\ue08c\ue08d\ue08e\ue08f\ue090\ue091\ue092\ue093\ue094\ue095\ue096\ue097\ue098\ue099\ue09a\ue09b\ue09c\ue09d\ue09e\ue09f\ue0a0\ue0a1\ue0a2\ue0a3\ue0a4\ue0a5\ue0a6\ue0a7\ue0a8\ue0a9\ue0aa\ue0ab\ue0ac\ue0ad\ue0ae\ue0af\ue0b0\ue0b1\ue0b2\ue0b3\ue0b4\ue0b5\ue0b6\ue0b7\ue0b8\ue0b9\ue0ba\ue0bb\ue0bc\ue0bd\ue0be\ue0bf\ue0c0\ue0c1\ue0c2\ue0c3\ue0c4\ue0c5\ue0c6\ue0c7\ue0c8\ue0c9\ue0ca\ue0cb\ue0cc\ue0cd\ue0ce\ue0cf\ue0d0\ue0d1\ue0d2\ue0d3\ue0d4\ue0d5\ue0d6\ue0d7\ue0d8\ue0d9\ue0da\ue0db\ue0dc\ue0dd\ue0de\ue0df\ue0e0\ue0e1\ue0e2\ue0e3\ue0e4\ue0e5\ue0e6\ue0e7\ue0e8\ue0e9\ue0ea\ue0eb\ue0ec\ue0ed\ue0ee\ue0ef\ue0f0\ue0f1\ue0f2\ue0f3\ue0f4\ue0f5\ue0f6\ue0f7\ue0f8\ue0f9\ue0fa\ue0fb\ue0fc\ue0fd\ue0fe\ue0ff\ue100\ue101\ue102\ue103\ue104\ue105\ue106\ue107\ue108\ue109\ue10a\ue10b\ue10c\ue10d\ue10e\ue10f\ue110\ue111\ue112\ue113\ue114\ue115\ue116\ue117\ue118\ue119\ue11a\ue11b\ue11c\ue11d\ue11e\ue11f\ue120\ue121\ue122\ue123\ue124\ue125\ue126\ue127\ue128\ue129\ue12a\ue12b\ue12c\ue12d\ue12e\ue12f\ue130\ue131\ue132\ue133\ue134\ue135\ue136\ue137\ue138\ue139\ue13a\ue13b\ue13c\ue13d\ue13e\ue13f\ue140\ue141\ue142\ue143\ue144\ue145\ue146\ue147\ue148\ue149\ue14a\ue14b\ue14c\ue14d\ue14e\ue14f\ue150\ue151\ue152\ue153\ue154\ue155\ue156\ue157\ue158\ue159\ue15a\ue15b\ue15c\ue15d\ue15e\ue15f\ue160\ue161\ue162\ue163\ue164\ue165\ue166\ue167\ue168\ue169\ue16a\ue16b\ue16c\ue16d\ue16e\ue16f\ue170\ue171\ue172\ue173\ue174\ue175\ue176\ue177\ue178\ue179\ue17a\ue17b\ue17c\ue17d\ue17e\ue17f\ue180\ue181\ue182\ue183\ue184\ue185\ue186\ue187\ue188\ue189\ue18a\ue18b\ue18c\ue18d\ue18e\ue18f\ue190\ue191\ue192\ue193\ue194\ue195\ue196\ue197\ue198\ue199\ue19a\ue19b\ue19c\ue19d\ue19e\ue19f\ue1a0\ue1a1\ue1a2\ue1a3\ue1a4\ue1a5\ue1a6\ue1a7\ue1a8\ue1a9\ue1aa\ue1ab\ue1ac\ue1ad\ue1ae\ue1af\ue1b0\ue1b1\ue1b2\ue1b3\ue1b4\ue1b5\ue1b6\ue1b7\ue1b8\ue1b9\ue1ba\ue1bb\ue1bc\ue1bd\ue1be\ue1bf\ue1c0\ue1c1\ue1c2\ue1c3\ue1c4\ue1c5\ue1c6\ue1c7\ue1c8\ue1c9\ue1ca\ue1cb\ue1cc\ue1cd\ue1ce\ue1cf\ue1d0\ue1d1\ue1d2\ue1d3\ue1d4\ue1d5\ue1d6\ue1d7\ue1d8\ue1d9\ue1da\ue1db\ue1dc\ue1dd\ue1de\ue1df\ue1e0\ue1e1\ue1e2\ue1e3\ue1e4\ue1e5\ue1e6\ue1e7\ue1e8\ue1e9\ue1ea\ue1eb\ue1ec\ue1ed\ue1ee\ue1ef\ue1f0\ue1f1\ue1f2\ue1f3\ue1f4\ue1f5\ue1f6\ue1f7\ue1f8\ue1f9\ue1fa\ue1fb\ue1fc\ue1fd\ue1fe\ue1ff\ue200\ue201\ue202\ue203\ue204\ue205\ue206\ue207\ue208\ue209\ue20a\ue20b\ue20c\ue20d\ue20e\ue20f\ue210\ue211\ue212\ue213\ue214\ue215\ue216\ue217\ue218\ue219\ue21a\ue21b\ue21c\ue21d\ue21e\ue21f\ue220\ue221\ue222\ue223\ue224\ue225\ue226\ue227\ue228\ue229\ue22a\ue22b\ue22c\ue22d\ue22e\ue22f\ue230\ue231\ue232\ue233\ue234\ue235\ue236\ue237\ue238\ue239\ue23a\ue23b\ue23c\ue23d\ue23e\ue23f\ue240\ue241\ue242\ue243\ue244\ue245\ue246\ue247\ue248\ue249\ue24a\ue24b\ue24c\ue24d\ue24e\ue24f\ue250\ue251\ue252\ue253\ue254\ue255\ue256\ue257\ue258\ue259\ue25a\ue25b\ue25c\ue25d\ue25e\ue25f\ue260\ue261\ue262\ue263\ue264\ue265\ue266\ue267\ue268\ue269\ue26a\ue26b\ue26c\ue26d\ue26e\ue26f\ue270\ue271\ue272\ue273\ue274\ue275\ue276\ue277\ue278\ue279\ue27a\ue27b\ue27c\ue27d\ue27e\ue27f\ue280\ue281\ue282\ue283\ue284\ue285\ue286\ue287\ue288\ue289\ue28a\ue28b\ue28c\ue28d\ue28e\ue28f\ue290\ue291\ue292\ue293\ue294\ue295\ue296\ue297\ue298\ue299\ue29a\ue29b\ue29c\ue29d\ue29e\ue29f\ue2a0\ue2a1\ue2a2\ue2a3\ue2a4\ue2a5\ue2a6\ue2a7\ue2a8\ue2a9\ue2aa\ue2ab\ue2ac\ue2ad\ue2ae\ue2af\ue2b0\ue2b1\ue2b2\ue2b3\ue2b4\ue2b5\ue2b6\ue2b7\ue2b8\ue2b9\ue2ba\ue2bb\ue2bc\ue2bd\ue2be\ue2bf\ue2c0\ue2c1\ue2c2\ue2c3\ue2c4\ue2c5\ue2c6\ue2c7\ue2c8\ue2c9\ue2ca\ue2cb\ue2cc\ue2cd\ue2ce\ue2cf\ue2d0\ue2d1\ue2d2\ue2d3\ue2d4\ue2d5\ue2d6\ue2d7\ue2d8\ue2d9\ue2da\ue2db\ue2dc\ue2dd\ue2de\ue2df\ue2e0\ue2e1\ue2e2\ue2e3\ue2e4\ue2e5\ue2e6\ue2e7\ue2e8\ue2e9\ue2ea\ue2eb\ue2ec\ue2ed\ue2ee\ue2ef\ue2f0\ue2f1\ue2f2\ue2f3\ue2f4\ue2f5\ue2f6\ue2f7\ue2f8\ue2f9\ue2fa\ue2fb\ue2fc\ue2fd\ue2fe\ue2ff\ue300\ue301\ue302\ue303\ue304\ue305\ue306\ue307\ue308\ue309\ue30a\ue30b\ue30c\ue30d\ue30e\ue30f\ue310\ue311\ue312\ue313\ue314\ue315\ue316\ue317\ue318\ue319\ue31a\ue31b\ue31c\ue31d\ue31e\ue31f\ue320\ue321\ue322\ue323\ue324\ue325\ue326\ue327\ue328\ue329\ue32a\ue32b\ue32c\ue32d\ue32e\ue32f\ue330\ue331\ue332\ue333\ue334\ue335\ue336\ue337\ue338\ue339\ue33a\ue33b\ue33c\ue33d\ue33e\ue33f\ue340\ue341\ue342\ue343\ue344\ue345\ue346\ue347\ue348\ue349\ue34a\ue34b\ue34c\ue34d\ue34e\ue34f\ue350\ue351\ue352\ue353\ue354\ue355\ue356\ue357\ue358\ue359\ue35a\ue35b\ue35c\ue35d\ue35e\ue35f\ue360\ue361\ue362\ue363\ue364\ue365\ue366\ue367\ue368\ue369\ue36a\ue36b\ue36c\ue36d\ue36e\ue36f\ue370\ue371\ue372\ue373\ue374\ue375\ue376\ue377\ue378\ue379\ue37a\ue37b\ue37c\ue37d\ue37e\ue37f\ue380\ue381\ue382\ue383\ue384\ue385\ue386\ue387\ue388\ue389\ue38a\ue38b\ue38c\ue38d\ue38e\ue38f\ue390\ue391\ue392\ue393\ue394\ue395\ue396\ue397\ue398\ue399\ue39a\ue39b\ue39c\ue39d\ue39e\ue39f\ue3a0\ue3a1\ue3a2\ue3a3\ue3a4\ue3a5\ue3a6\ue3a7\ue3a8\ue3a9\ue3aa\ue3ab\ue3ac\ue3ad\ue3ae\ue3af\ue3b0\ue3b1\ue3b2\ue3b3\ue3b4\ue3b5\ue3b6\ue3b7\ue3b8\ue3b9\ue3ba\ue3bb\ue3bc\ue3bd\ue3be\ue3bf\ue3c0\ue3c1\ue3c2\ue3c3\ue3c4\ue3c5\ue3c6\ue3c7\ue3c8\ue3c9\ue3ca\ue3cb\ue3cc\ue3cd\ue3ce\ue3cf\ue3d0\ue3d1\ue3d2\ue3d3\ue3d4\ue3d5\ue3d6\ue3d7\ue3d8\ue3d9\ue3da\ue3db\ue3dc\ue3dd\ue3de\ue3df\ue3e0\ue3e1\ue3e2\ue3e3\ue3e4\ue3e5\ue3e6\ue3e7\ue3e8\ue3e9\ue3ea\ue3eb\ue3ec\ue3ed\ue3ee\ue3ef\ue3f0\ue3f1\ue3f2\ue3f3\ue3f4\ue3f5\ue3f6\ue3f7\ue3f8\ue3f9\ue3fa\ue3fb\ue3fc\ue3fd\ue3fe\ue3ff\ue400\ue401\ue402\ue403\ue404\ue405\ue406\ue407\ue408\ue409\ue40a\ue40b\ue40c\ue40d\ue40e\ue40f\ue410\ue411\ue412\ue413\ue414\ue415\ue416\ue417\ue418\ue419\ue41a\ue41b\ue41c\ue41d\ue41e\ue41f\ue420\ue421\ue422\ue423\ue424\ue425\ue426\ue427\ue428\ue429\ue42a\ue42b\ue42c\ue42d\ue42e\ue42f\ue430\ue431\ue432\ue433\ue434\ue435\ue436\ue437\ue438\ue439\ue43a\ue43b\ue43c\ue43d\ue43e\ue43f\ue440\ue441\ue442\ue443\ue444\ue445\ue446\ue447\ue448\ue449\ue44a\ue44b\ue44c\ue44d\ue44e\ue44f\ue450\ue451\ue452\ue453\ue454\ue455\ue456\ue457\ue458\ue459\ue45a\ue45b\ue45c\ue45d\ue45e\ue45f\ue460\ue461\ue462\ue463\ue464\ue465\ue466\ue467\ue468\ue469\ue46a\ue46b\ue46c\ue46d\ue46e\ue46f\ue470\ue471\ue472\ue473\ue474\ue475\ue476\ue477\ue478\ue479\ue47a\ue47b\ue47c\ue47d\ue47e\ue47f\ue480\ue481\ue482\ue483\ue484\ue485\ue486\ue487\ue488\ue489\ue48a\ue48b\ue48c\ue48d\ue48e\ue48f\ue490\ue491\ue492\ue493\ue494\ue495\ue496\ue497\ue498\ue499\ue49a\ue49b\ue49c\ue49d\ue49e\ue49f\ue4a0\ue4a1\ue4a2\ue4a3\ue4a4\ue4a5\ue4a6\ue4a7\ue4a8\ue4a9\ue4aa\ue4ab\ue4ac\ue4ad\ue4ae\ue4af\ue4b0\ue4b1\ue4b2\ue4b3\ue4b4\ue4b5\ue4b6\ue4b7\ue4b8\ue4b9\ue4ba\ue4bb\ue4bc\ue4bd\ue4be\ue4bf\ue4c0\ue4c1\ue4c2\ue4c3\ue4c4\ue4c5\ue4c6\ue4c7\ue4c8\ue4c9\ue4ca\ue4cb\ue4cc\ue4cd\ue4ce\ue4cf\ue4d0\ue4d1\ue4d2\ue4d3\ue4d4\ue4d5\ue4d6\ue4d7\ue4d8\ue4d9\ue4da\ue4db\ue4dc\ue4dd\ue4de\ue4df\ue4e0\ue4e1\ue4e2\ue4e3\ue4e4\ue4e5\ue4e6\ue4e7\ue4e8\ue4e9\ue4ea\ue4eb\ue4ec\ue4ed\ue4ee\ue4ef\ue4f0\ue4f1\ue4f2\ue4f3\ue4f4\ue4f5\ue4f6\ue4f7\ue4f8\ue4f9\ue4fa\ue4fb\ue4fc\ue4fd\ue4fe\ue4ff\ue500\ue501\ue502\ue503\ue504\ue505\ue506\ue507\ue508\ue509\ue50a\ue50b\ue50c\ue50d\ue50e\ue50f\ue510\ue511\ue512\ue513\ue514\ue515\ue516\ue517\ue518\ue519\ue51a\ue51b\ue51c\ue51d\ue51e\ue51f\ue520\ue521\ue522\ue523\ue524\ue525\ue526\ue527\ue528\ue529\ue52a\ue52b\ue52c\ue52d\ue52e\ue52f\ue530\ue531\ue532\ue533\ue534\ue535\ue536\ue537\ue538\ue539\ue53a\ue53b\ue53c\ue53d\ue53e\ue53f\ue540\ue541\ue542\ue543\ue544\ue545\ue546\ue547\ue548\ue549\ue54a\ue54b\ue54c\ue54d\ue54e\ue54f\ue550\ue551\ue552\ue553\ue554\ue555\ue556\ue557\ue558\ue559\ue55a\ue55b\ue55c\ue55d\ue55e\ue55f\ue560\ue561\ue562\ue563\ue564\ue565\ue566\ue567\ue568\ue569\ue56a\ue56b\ue56c\ue56d\ue56e\ue56f\ue570\ue571\ue572\ue573\ue574\ue575\ue576\ue577\ue578\ue579\ue57a\ue57b\ue57c\ue57d\ue57e\ue57f\ue580\ue581\ue582\ue583\ue584\ue585\ue586\ue587\ue588\ue589\ue58a\ue58b\ue58c\ue58d\ue58e\ue58f\ue590\ue591\ue592\ue593\ue594\ue595\ue596\ue597\ue598\ue599\ue59a\ue59b\ue59c\ue59d\ue59e\ue59f\ue5a0\ue5a1\ue5a2\ue5a3\ue5a4\ue5a5\ue5a6\ue5a7\ue5a8\ue5a9\ue5aa\ue5ab\ue5ac\ue5ad\ue5ae\ue5af\ue5b0\ue5b1\ue5b2\ue5b3\ue5b4\ue5b5\ue5b6\ue5b7\ue5b8\ue5b9\ue5ba\ue5bb\ue5bc\ue5bd\ue5be\ue5bf\ue5c0\ue5c1\ue5c2\ue5c3\ue5c4\ue5c5\ue5c6\ue5c7\ue5c8\ue5c9\ue5ca\ue5cb\ue5cc\ue5cd\ue5ce\ue5cf\ue5d0\ue5d1\ue5d2\ue5d3\ue5d4\ue5d5\ue5d6\ue5d7\ue5d8\ue5d9\ue5da\ue5db\ue5dc\ue5dd\ue5de\ue5df\ue5e0\ue5e1\ue5e2\ue5e3\ue5e4\ue5e5\ue5e6\ue5e7\ue5e8\ue5e9\ue5ea\ue5eb\ue5ec\ue5ed\ue5ee\ue5ef\ue5f0\ue5f1\ue5f2\ue5f3\ue5f4\ue5f5\ue5f6\ue5f7\ue5f8\ue5f9\ue5fa\ue5fb\ue5fc\ue5fd\ue5fe\ue5ff\ue600\ue601\ue602\ue603\ue604\ue605\ue606\ue607\ue608\ue609\ue60a\ue60b\ue60c\ue60d\ue60e\ue60f\ue610\ue611\ue612\ue613\ue614\ue615\ue616\ue617\ue618\ue619\ue61a\ue61b\ue61c\ue61d\ue61e\ue61f\ue620\ue621\ue622\ue623\ue624\ue625\ue626\ue627\ue628\ue629\ue62a\ue62b\ue62c\ue62d\ue62e\ue62f\ue630\ue631\ue632\ue633\ue634\ue635\ue636\ue637\ue638\ue639\ue63a\ue63b\ue63c\ue63d\ue63e\ue63f\ue640\ue641\ue642\ue643\ue644\ue645\ue646\ue647\ue648\ue649\ue64a\ue64b\ue64c\ue64d\ue64e\ue64f\ue650\ue651\ue652\ue653\ue654\ue655\ue656\ue657\ue658\ue659\ue65a\ue65b\ue65c\ue65d\ue65e\ue65f\ue660\ue661\ue662\ue663\ue664\ue665\ue666\ue667\ue668\ue669\ue66a\ue66b\ue66c\ue66d\ue66e\ue66f\ue670\ue671\ue672\ue673\ue674\ue675\ue676\ue677\ue678\ue679\ue67a\ue67b\ue67c\ue67d\ue67e\ue67f\ue680\ue681\ue682\ue683\ue684\ue685\ue686\ue687\ue688\ue689\ue68a\ue68b\ue68c\ue68d\ue68e\ue68f\ue690\ue691\ue692\ue693\ue694\ue695\ue696\ue697\ue698\ue699\ue69a\ue69b\ue69c\ue69d\ue69e\ue69f\ue6a0\ue6a1\ue6a2\ue6a3\ue6a4\ue6a5\ue6a6\ue6a7\ue6a8\ue6a9\ue6aa\ue6ab\ue6ac\ue6ad\ue6ae\ue6af\ue6b0\ue6b1\ue6b2\ue6b3\ue6b4\ue6b5\ue6b6\ue6b7\ue6b8\ue6b9\ue6ba\ue6bb\ue6bc\ue6bd\ue6be\ue6bf\ue6c0\ue6c1\ue6c2\ue6c3\ue6c4\ue6c5\ue6c6\ue6c7\ue6c8\ue6c9\ue6ca\ue6cb\ue6cc\ue6cd\ue6ce\ue6cf\ue6d0\ue6d1\ue6d2\ue6d3\ue6d4\ue6d5\ue6d6\ue6d7\ue6d8\ue6d9\ue6da\ue6db\ue6dc\ue6dd\ue6de\ue6df\ue6e0\ue6e1\ue6e2\ue6e3\ue6e4\ue6e5\ue6e6\ue6e7\ue6e8\ue6e9\ue6ea\ue6eb\ue6ec\ue6ed\ue6ee\ue6ef\ue6f0\ue6f1\ue6f2\ue6f3\ue6f4\ue6f5\ue6f6\ue6f7\ue6f8\ue6f9\ue6fa\ue6fb\ue6fc\ue6fd\ue6fe\ue6ff\ue700\ue701\ue702\ue703\ue704\ue705\ue706\ue707\ue708\ue709\ue70a\ue70b\ue70c\ue70d\ue70e\ue70f\ue710\ue711\ue712\ue713\ue714\ue715\ue716\ue717\ue718\ue719\ue71a\ue71b\ue71c\ue71d\ue71e\ue71f\ue720\ue721\ue722\ue723\ue724\ue725\ue726\ue727\ue728\ue729\ue72a\ue72b\ue72c\ue72d\ue72e\ue72f\ue730\ue731\ue732\ue733\ue734\ue735\ue736\ue737\ue738\ue739\ue73a\ue73b\ue73c\ue73d\ue73e\ue73f\ue740\ue741\ue742\ue743\ue744\ue745\ue746\ue747\ue748\ue749\ue74a\ue74b\ue74c\ue74d\ue74e\ue74f\ue750\ue751\ue752\ue753\ue754\ue755\ue756\ue757\ue758\ue759\ue75a\ue75b\ue75c\ue75d\ue75e\ue75f\ue760\ue761\ue762\ue763\ue764\ue765\ue766\ue767\ue768\ue769\ue76a\ue76b\ue76c\ue76d\ue76e\ue76f\ue770\ue771\ue772\ue773\ue774\ue775\ue776\ue777\ue778\ue779\ue77a\ue77b\ue77c\ue77d\ue77e\ue77f\ue780\ue781\ue782\ue783\ue784\ue785\ue786\ue787\ue788\ue789\ue78a\ue78b\ue78c\ue78d\ue78e\ue78f\ue790\ue791\ue792\ue793\ue794\ue795\ue796\ue797\ue798\ue799\ue79a\ue79b\ue79c\ue79d\ue79e\ue79f\ue7a0\ue7a1\ue7a2\ue7a3\ue7a4\ue7a5\ue7a6\ue7a7\ue7a8\ue7a9\ue7aa\ue7ab\ue7ac\ue7ad\ue7ae\ue7af\ue7b0\ue7b1\ue7b2\ue7b3\ue7b4\ue7b5\ue7b6\ue7b7\ue7b8\ue7b9\ue7ba\ue7bb\ue7bc\ue7bd\ue7be\ue7bf\ue7c0\ue7c1\ue7c2\ue7c3\ue7c4\ue7c5\ue7c6\ue7c7\ue7c8\ue7c9\ue7ca\ue7cb\ue7cc\ue7cd\ue7ce\ue7cf\ue7d0\ue7d1\ue7d2\ue7d3\ue7d4\ue7d5\ue7d6\ue7d7\ue7d8\ue7d9\ue7da\ue7db\ue7dc\ue7dd\ue7de\ue7df\ue7e0\ue7e1\ue7e2\ue7e3\ue7e4\ue7e5\ue7e6\ue7e7\ue7e8\ue7e9\ue7ea\ue7eb\ue7ec\ue7ed\ue7ee\ue7ef\ue7f0\ue7f1\ue7f2\ue7f3\ue7f4\ue7f5\ue7f6\ue7f7\ue7f8\ue7f9\ue7fa\ue7fb\ue7fc\ue7fd\ue7fe\ue7ff\ue800\ue801\ue802\ue803\ue804\ue805\ue806\ue807\ue808\ue809\ue80a\ue80b\ue80c\ue80d\ue80e\ue80f\ue810\ue811\ue812\ue813\ue814\ue815\ue816\ue817\ue818\ue819\ue81a\ue81b\ue81c\ue81d\ue81e\ue81f\ue820\ue821\ue822\ue823\ue824\ue825\ue826\ue827\ue828\ue829\ue82a\ue82b\ue82c\ue82d\ue82e\ue82f\ue830\ue831\ue832\ue833\ue834\ue835\ue836\ue837\ue838\ue839\ue83a\ue83b\ue83c\ue83d\ue83e\ue83f\ue840\ue841\ue842\ue843\ue844\ue845\ue846\ue847\ue848\ue849\ue84a\ue84b\ue84c\ue84d\ue84e\ue84f\ue850\ue851\ue852\ue853\ue854\ue855\ue856\ue857\ue858\ue859\ue85a\ue85b\ue85c\ue85d\ue85e\ue85f\ue860\ue861\ue862\ue863\ue864\ue865\ue866\ue867\ue868\ue869\ue86a\ue86b\ue86c\ue86d\ue86e\ue86f\ue870\ue871\ue872\ue873\ue874\ue875\ue876\ue877\ue878\ue879\ue87a\ue87b\ue87c\ue87d\ue87e\ue87f\ue880\ue881\ue882\ue883\ue884\ue885\ue886\ue887\ue888\ue889\ue88a\ue88b\ue88c\ue88d\ue88e\ue88f\ue890\ue891\ue892\ue893\ue894\ue895\ue896\ue897\ue898\ue899\ue89a\ue89b\ue89c\ue89d\ue89e\ue89f\ue8a0\ue8a1\ue8a2\ue8a3\ue8a4\ue8a5\ue8a6\ue8a7\ue8a8\ue8a9\ue8aa\ue8ab\ue8ac\ue8ad\ue8ae\ue8af\ue8b0\ue8b1\ue8b2\ue8b3\ue8b4\ue8b5\ue8b6\ue8b7\ue8b8\ue8b9\ue8ba\ue8bb\ue8bc\ue8bd\ue8be\ue8bf\ue8c0\ue8c1\ue8c2\ue8c3\ue8c4\ue8c5\ue8c6\ue8c7\ue8c8\ue8c9\ue8ca\ue8cb\ue8cc\ue8cd\ue8ce\ue8cf\ue8d0\ue8d1\ue8d2\ue8d3\ue8d4\ue8d5\ue8d6\ue8d7\ue8d8\ue8d9\ue8da\ue8db\ue8dc\ue8dd\ue8de\ue8df\ue8e0\ue8e1\ue8e2\ue8e3\ue8e4\ue8e5\ue8e6\ue8e7\ue8e8\ue8e9\ue8ea\ue8eb\ue8ec\ue8ed\ue8ee\ue8ef\ue8f0\ue8f1\ue8f2\ue8f3\ue8f4\ue8f5\ue8f6\ue8f7\ue8f8\ue8f9\ue8fa\ue8fb\ue8fc\ue8fd\ue8fe\ue8ff\ue900\ue901\ue902\ue903\ue904\ue905\ue906\ue907\ue908\ue909\ue90a\ue90b\ue90c\ue90d\ue90e\ue90f\ue910\ue911\ue912\ue913\ue914\ue915\ue916\ue917\ue918\ue919\ue91a\ue91b\ue91c\ue91d\ue91e\ue91f\ue920\ue921\ue922\ue923\ue924\ue925\ue926\ue927\ue928\ue929\ue92a\ue92b\ue92c\ue92d\ue92e\ue92f\ue930\ue931\ue932\ue933\ue934\ue935\ue936\ue937\ue938\ue939\ue93a\ue93b\ue93c\ue93d\ue93e\ue93f\ue940\ue941\ue942\ue943\ue944\ue945\ue946\ue947\ue948\ue949\ue94a\ue94b\ue94c\ue94d\ue94e\ue94f\ue950\ue951\ue952\ue953\ue954\ue955\ue956\ue957\ue958\ue959\ue95a\ue95b\ue95c\ue95d\ue95e\ue95f\ue960\ue961\ue962\ue963\ue964\ue965\ue966\ue967\ue968\ue969\ue96a\ue96b\ue96c\ue96d\ue96e\ue96f\ue970\ue971\ue972\ue973\ue974\ue975\ue976\ue977\ue978\ue979\ue97a\ue97b\ue97c\ue97d\ue97e\ue97f\ue980\ue981\ue982\ue983\ue984\ue985\ue986\ue987\ue988\ue989\ue98a\ue98b\ue98c\ue98d\ue98e\ue98f\ue990\ue991\ue992\ue993\ue994\ue995\ue996\ue997\ue998\ue999\ue99a\ue99b\ue99c\ue99d\ue99e\ue99f\ue9a0\ue9a1\ue9a2\ue9a3\ue9a4\ue9a5\ue9a6\ue9a7\ue9a8\ue9a9\ue9aa\ue9ab\ue9ac\ue9ad\ue9ae\ue9af\ue9b0\ue9b1\ue9b2\ue9b3\ue9b4\ue9b5\ue9b6\ue9b7\ue9b8\ue9b9\ue9ba\ue9bb\ue9bc\ue9bd\ue9be\ue9bf\ue9c0\ue9c1\ue9c2\ue9c3\ue9c4\ue9c5\ue9c6\ue9c7\ue9c8\ue9c9\ue9ca\ue9cb\ue9cc\ue9cd\ue9ce\ue9cf\ue9d0\ue9d1\ue9d2\ue9d3\ue9d4\ue9d5\ue9d6\ue9d7\ue9d8\ue9d9\ue9da\ue9db\ue9dc\ue9dd\ue9de\ue9df\ue9e0\ue9e1\ue9e2\ue9e3\ue9e4\ue9e5\ue9e6\ue9e7\ue9e8\ue9e9\ue9ea\ue9eb\ue9ec\ue9ed\ue9ee\ue9ef\ue9f0\ue9f1\ue9f2\ue9f3\ue9f4\ue9f5\ue9f6\ue9f7\ue9f8\ue9f9\ue9fa\ue9fb\ue9fc\ue9fd\ue9fe\ue9ff\uea00\uea01\uea02\uea03\uea04\uea05\uea06\uea07\uea08\uea09\uea0a\uea0b\uea0c\uea0d\uea0e\uea0f\uea10\uea11\uea12\uea13\uea14\uea15\uea16\uea17\uea18\uea19\uea1a\uea1b\uea1c\uea1d\uea1e\uea1f\uea20\uea21\uea22\uea23\uea24\uea25\uea26\uea27\uea28\uea29\uea2a\uea2b\uea2c\uea2d\uea2e\uea2f\uea30\uea31\uea32\uea33\uea34\uea35\uea36\uea37\uea38\uea39\uea3a\uea3b\uea3c\uea3d\uea3e\uea3f\uea40\uea41\uea42\uea43\uea44\uea45\uea46\uea47\uea48\uea49\uea4a\uea4b\uea4c\uea4d\uea4e\uea4f\uea50\uea51\uea52\uea53\uea54\uea55\uea56\uea57\uea58\uea59\uea5a\uea5b\uea5c\uea5d\uea5e\uea5f\uea60\uea61\uea62\uea63\uea64\uea65\uea66\uea67\uea68\uea69\uea6a\uea6b\uea6c\uea6d\uea6e\uea6f\uea70\uea71\uea72\uea73\uea74\uea75\uea76\uea77\uea78\uea79\uea7a\uea7b\uea7c\uea7d\uea7e\uea7f\uea80\uea81\uea82\uea83\uea84\uea85\uea86\uea87\uea88\uea89\uea8a\uea8b\uea8c\uea8d\uea8e\uea8f\uea90\uea91\uea92\uea93\uea94\uea95\uea96\uea97\uea98\uea99\uea9a\uea9b\uea9c\uea9d\uea9e\uea9f\ueaa0\ueaa1\ueaa2\ueaa3\ueaa4\ueaa5\ueaa6\ueaa7\ueaa8\ueaa9\ueaaa\ueaab\ueaac\ueaad\ueaae\ueaaf\ueab0\ueab1\ueab2\ueab3\ueab4\ueab5\ueab6\ueab7\ueab8\ueab9\ueaba\ueabb\ueabc\ueabd\ueabe\ueabf\ueac0\ueac1\ueac2\ueac3\ueac4\ueac5\ueac6\ueac7\ueac8\ueac9\ueaca\ueacb\ueacc\ueacd\ueace\ueacf\uead0\uead1\uead2\uead3\uead4\uead5\uead6\uead7\uead8\uead9\ueada\ueadb\ueadc\ueadd\ueade\ueadf\ueae0\ueae1\ueae2\ueae3\ueae4\ueae5\ueae6\ueae7\ueae8\ueae9\ueaea\ueaeb\ueaec\ueaed\ueaee\ueaef\ueaf0\ueaf1\ueaf2\ueaf3\ueaf4\ueaf5\ueaf6\ueaf7\ueaf8\ueaf9\ueafa\ueafb\ueafc\ueafd\ueafe\ueaff\ueb00\ueb01\ueb02\ueb03\ueb04\ueb05\ueb06\ueb07\ueb08\ueb09\ueb0a\ueb0b\ueb0c\ueb0d\ueb0e\ueb0f\ueb10\ueb11\ueb12\ueb13\ueb14\ueb15\ueb16\ueb17\ueb18\ueb19\ueb1a\ueb1b\ueb1c\ueb1d\ueb1e\ueb1f\ueb20\ueb21\ueb22\ueb23\ueb24\ueb25\ueb26\ueb27\ueb28\ueb29\ueb2a\ueb2b\ueb2c\ueb2d\ueb2e\ueb2f\ueb30\ueb31\ueb32\ueb33\ueb34\ueb35\ueb36\ueb37\ueb38\ueb39\ueb3a\ueb3b\ueb3c\ueb3d\ueb3e\ueb3f\ueb40\ueb41\ueb42\ueb43\ueb44\ueb45\ueb46\ueb47\ueb48\ueb49\ueb4a\ueb4b\ueb4c\ueb4d\ueb4e\ueb4f\ueb50\ueb51\ueb52\ueb53\ueb54\ueb55\ueb56\ueb57\ueb58\ueb59\ueb5a\ueb5b\ueb5c\ueb5d\ueb5e\ueb5f\ueb60\ueb61\ueb62\ueb63\ueb64\ueb65\ueb66\ueb67\ueb68\ueb69\ueb6a\ueb6b\ueb6c\ueb6d\ueb6e\ueb6f\ueb70\ueb71\ueb72\ueb73\ueb74\ueb75\ueb76\ueb77\ueb78\ueb79\ueb7a\ueb7b\ueb7c\ueb7d\ueb7e\ueb7f\ueb80\ueb81\ueb82\ueb83\ueb84\ueb85\ueb86\ueb87\ueb88\ueb89\ueb8a\ueb8b\ueb8c\ueb8d\ueb8e\ueb8f\ueb90\ueb91\ueb92\ueb93\ueb94\ueb95\ueb96\ueb97\ueb98\ueb99\ueb9a\ueb9b\ueb9c\ueb9d\ueb9e\ueb9f\ueba0\ueba1\ueba2\ueba3\ueba4\ueba5\ueba6\ueba7\ueba8\ueba9\uebaa\uebab\uebac\uebad\uebae\uebaf\uebb0\uebb1\uebb2\uebb3\uebb4\uebb5\uebb6\uebb7\uebb8\uebb9\uebba\uebbb\uebbc\uebbd\uebbe\uebbf\uebc0\uebc1\uebc2\uebc3\uebc4\uebc5\uebc6\uebc7\uebc8\uebc9\uebca\uebcb\uebcc\uebcd\uebce\uebcf\uebd0\uebd1\uebd2\uebd3\uebd4\uebd5\uebd6\uebd7\uebd8\uebd9\uebda\uebdb\uebdc\uebdd\uebde\uebdf\uebe0\uebe1\uebe2\uebe3\uebe4\uebe5\uebe6\uebe7\uebe8\uebe9\uebea\uebeb\uebec\uebed\uebee\uebef\uebf0\uebf1\uebf2\uebf3\uebf4\uebf5\uebf6\uebf7\uebf8\uebf9\uebfa\uebfb\uebfc\uebfd\uebfe\uebff\uec00\uec01\uec02\uec03\uec04\uec05\uec06\uec07\uec08\uec09\uec0a\uec0b\uec0c\uec0d\uec0e\uec0f\uec10\uec11\uec12\uec13\uec14\uec15\uec16\uec17\uec18\uec19\uec1a\uec1b\uec1c\uec1d\uec1e\uec1f\uec20\uec21\uec22\uec23\uec24\uec25\uec26\uec27\uec28\uec29\uec2a\uec2b\uec2c\uec2d\uec2e\uec2f\uec30\uec31\uec32\uec33\uec34\uec35\uec36\uec37\uec38\uec39\uec3a\uec3b\uec3c\uec3d\uec3e\uec3f\uec40\uec41\uec42\uec43\uec44\uec45\uec46\uec47\uec48\uec49\uec4a\uec4b\uec4c\uec4d\uec4e\uec4f\uec50\uec51\uec52\uec53\uec54\uec55\uec56\uec57\uec58\uec59\uec5a\uec5b\uec5c\uec5d\uec5e\uec5f\uec60\uec61\uec62\uec63\uec64\uec65\uec66\uec67\uec68\uec69\uec6a\uec6b\uec6c\uec6d\uec6e\uec6f\uec70\uec71\uec72\uec73\uec74\uec75\uec76\uec77\uec78\uec79\uec7a\uec7b\uec7c\uec7d\uec7e\uec7f\uec80\uec81\uec82\uec83\uec84\uec85\uec86\uec87\uec88\uec89\uec8a\uec8b\uec8c\uec8d\uec8e\uec8f\uec90\uec91\uec92\uec93\uec94\uec95\uec96\uec97\uec98\uec99\uec9a\uec9b\uec9c\uec9d\uec9e\uec9f\ueca0\ueca1\ueca2\ueca3\ueca4\ueca5\ueca6\ueca7\ueca8\ueca9\uecaa\uecab\uecac\uecad\uecae\uecaf\uecb0\uecb1\uecb2\uecb3\uecb4\uecb5\uecb6\uecb7\uecb8\uecb9\uecba\uecbb\uecbc\uecbd\uecbe\uecbf\uecc0\uecc1\uecc2\uecc3\uecc4\uecc5\uecc6\uecc7\uecc8\uecc9\uecca\ueccb\ueccc\ueccd\uecce\ueccf\uecd0\uecd1\uecd2\uecd3\uecd4\uecd5\uecd6\uecd7\uecd8\uecd9\uecda\uecdb\uecdc\uecdd\uecde\uecdf\uece0\uece1\uece2\uece3\uece4\uece5\uece6\uece7\uece8\uece9\uecea\ueceb\uecec\ueced\uecee\uecef\uecf0\uecf1\uecf2\uecf3\uecf4\uecf5\uecf6\uecf7\uecf8\uecf9\uecfa\uecfb\uecfc\uecfd\uecfe\uecff\ued00\ued01\ued02\ued03\ued04\ued05\ued06\ued07\ued08\ued09\ued0a\ued0b\ued0c\ued0d\ued0e\ued0f\ued10\ued11\ued12\ued13\ued14\ued15\ued16\ued17\ued18\ued19\ued1a\ued1b\ued1c\ued1d\ued1e\ued1f\ued20\ued21\ued22\ued23\ued24\ued25\ued26\ued27\ued28\ued29\ued2a\ued2b\ued2c\ued2d\ued2e\ued2f\ued30\ued31\ued32\ued33\ued34\ued35\ued36\ued37\ued38\ued39\ued3a\ued3b\ued3c\ued3d\ued3e\ued3f\ued40\ued41\ued42\ued43\ued44\ued45\ued46\ued47\ued48\ued49\ued4a\ued4b\ued4c\ued4d\ued4e\ued4f\ued50\ued51\ued52\ued53\ued54\ued55\ued56\ued57\ued58\ued59\ued5a\ued5b\ued5c\ued5d\ued5e\ued5f\ued60\ued61\ued62\ued63\ued64\ued65\ued66\ued67\ued68\ued69\ued6a\ued6b\ued6c\ued6d\ued6e\ued6f\ued70\ued71\ued72\ued73\ued74\ued75\ued76\ued77\ued78\ued79\ued7a\ued7b\ued7c\ued7d\ued7e\ued7f\ued80\ued81\ued82\ued83\ued84\ued85\ued86\ued87\ued88\ued89\ued8a\ued8b\ued8c\ued8d\ued8e\ued8f\ued90\ued91\ued92\ued93\ued94\ued95\ued96\ued97\ued98\ued99\ued9a\ued9b\ued9c\ued9d\ued9e\ued9f\ueda0\ueda1\ueda2\ueda3\ueda4\ueda5\ueda6\ueda7\ueda8\ueda9\uedaa\uedab\uedac\uedad\uedae\uedaf\uedb0\uedb1\uedb2\uedb3\uedb4\uedb5\uedb6\uedb7\uedb8\uedb9\uedba\uedbb\uedbc\uedbd\uedbe\uedbf\uedc0\uedc1\uedc2\uedc3\uedc4\uedc5\uedc6\uedc7\uedc8\uedc9\uedca\uedcb\uedcc\uedcd\uedce\uedcf\uedd0\uedd1\uedd2\uedd3\uedd4\uedd5\uedd6\uedd7\uedd8\uedd9\uedda\ueddb\ueddc\ueddd\uedde\ueddf\uede0\uede1\uede2\uede3\uede4\uede5\uede6\uede7\uede8\uede9\uedea\uedeb\uedec\ueded\uedee\uedef\uedf0\uedf1\uedf2\uedf3\uedf4\uedf5\uedf6\uedf7\uedf8\uedf9\uedfa\uedfb\uedfc\uedfd\uedfe\uedff\uee00\uee01\uee02\uee03\uee04\uee05\uee06\uee07\uee08\uee09\uee0a\uee0b\uee0c\uee0d\uee0e\uee0f\uee10\uee11\uee12\uee13\uee14\uee15\uee16\uee17\uee18\uee19\uee1a\uee1b\uee1c\uee1d\uee1e\uee1f\uee20\uee21\uee22\uee23\uee24\uee25\uee26\uee27\uee28\uee29\uee2a\uee2b\uee2c\uee2d\uee2e\uee2f\uee30\uee31\uee32\uee33\uee34\uee35\uee36\uee37\uee38\uee39\uee3a\uee3b\uee3c\uee3d\uee3e\uee3f\uee40\uee41\uee42\uee43\uee44\uee45\uee46\uee47\uee48\uee49\uee4a\uee4b\uee4c\uee4d\uee4e\uee4f\uee50\uee51\uee52\uee53\uee54\uee55\uee56\uee57\uee58\uee59\uee5a\uee5b\uee5c\uee5d\uee5e\uee5f\uee60\uee61\uee62\uee63\uee64\uee65\uee66\uee67\uee68\uee69\uee6a\uee6b\uee6c\uee6d\uee6e\uee6f\uee70\uee71\uee72\uee73\uee74\uee75\uee76\uee77\uee78\uee79\uee7a\uee7b\uee7c\uee7d\uee7e\uee7f\uee80\uee81\uee82\uee83\uee84\uee85\uee86\uee87\uee88\uee89\uee8a\uee8b\uee8c\uee8d\uee8e\uee8f\uee90\uee91\uee92\uee93\uee94\uee95\uee96\uee97\uee98\uee99\uee9a\uee9b\uee9c\uee9d\uee9e\uee9f\ueea0\ueea1\ueea2\ueea3\ueea4\ueea5\ueea6\ueea7\ueea8\ueea9\ueeaa\ueeab\ueeac\ueead\ueeae\ueeaf\ueeb0\ueeb1\ueeb2\ueeb3\ueeb4\ueeb5\ueeb6\ueeb7\ueeb8\ueeb9\ueeba\ueebb\ueebc\ueebd\ueebe\ueebf\ueec0\ueec1\ueec2\ueec3\ueec4\ueec5\ueec6\ueec7\ueec8\ueec9\ueeca\ueecb\ueecc\ueecd\ueece\ueecf\ueed0\ueed1\ueed2\ueed3\ueed4\ueed5\ueed6\ueed7\ueed8\ueed9\ueeda\ueedb\ueedc\ueedd\ueede\ueedf\ueee0\ueee1\ueee2\ueee3\ueee4\ueee5\ueee6\ueee7\ueee8\ueee9\ueeea\ueeeb\ueeec\ueeed\ueeee\ueeef\ueef0\ueef1\ueef2\ueef3\ueef4\ueef5\ueef6\ueef7\ueef8\ueef9\ueefa\ueefb\ueefc\ueefd\ueefe\ueeff\uef00\uef01\uef02\uef03\uef04\uef05\uef06\uef07\uef08\uef09\uef0a\uef0b\uef0c\uef0d\uef0e\uef0f\uef10\uef11\uef12\uef13\uef14\uef15\uef16\uef17\uef18\uef19\uef1a\uef1b\uef1c\uef1d\uef1e\uef1f\uef20\uef21\uef22\uef23\uef24\uef25\uef26\uef27\uef28\uef29\uef2a\uef2b\uef2c\uef2d\uef2e\uef2f\uef30\uef31\uef32\uef33\uef34\uef35\uef36\uef37\uef38\uef39\uef3a\uef3b\uef3c\uef3d\uef3e\uef3f\uef40\uef41\uef42\uef43\uef44\uef45\uef46\uef47\uef48\uef49\uef4a\uef4b\uef4c\uef4d\uef4e\uef4f\uef50\uef51\uef52\uef53\uef54\uef55\uef56\uef57\uef58\uef59\uef5a\uef5b\uef5c\uef5d\uef5e\uef5f\uef60\uef61\uef62\uef63\uef64\uef65\uef66\uef67\uef68\uef69\uef6a\uef6b\uef6c\uef6d\uef6e\uef6f\uef70\uef71\uef72\uef73\uef74\uef75\uef76\uef77\uef78\uef79\uef7a\uef7b\uef7c\uef7d\uef7e\uef7f\uef80\uef81\uef82\uef83\uef84\uef85\uef86\uef87\uef88\uef89\uef8a\uef8b\uef8c\uef8d\uef8e\uef8f\uef90\uef91\uef92\uef93\uef94\uef95\uef96\uef97\uef98\uef99\uef9a\uef9b\uef9c\uef9d\uef9e\uef9f\uefa0\uefa1\uefa2\uefa3\uefa4\uefa5\uefa6\uefa7\uefa8\uefa9\uefaa\uefab\uefac\uefad\uefae\uefaf\uefb0\uefb1\uefb2\uefb3\uefb4\uefb5\uefb6\uefb7\uefb8\uefb9\uefba\uefbb\uefbc\uefbd\uefbe\uefbf\uefc0\uefc1\uefc2\uefc3\uefc4\uefc5\uefc6\uefc7\uefc8\uefc9\uefca\uefcb\uefcc\uefcd\uefce\uefcf\uefd0\uefd1\uefd2\uefd3\uefd4\uefd5\uefd6\uefd7\uefd8\uefd9\uefda\uefdb\uefdc\uefdd\uefde\uefdf\uefe0\uefe1\uefe2\uefe3\uefe4\uefe5\uefe6\uefe7\uefe8\uefe9\uefea\uefeb\uefec\uefed\uefee\uefef\ueff0\ueff1\ueff2\ueff3\ueff4\ueff5\ueff6\ueff7\ueff8\ueff9\ueffa\ueffb\ueffc\ueffd\ueffe\uefff\uf000\uf001\uf002\uf003\uf004\uf005\uf006\uf007\uf008\uf009\uf00a\uf00b\uf00c\uf00d\uf00e\uf00f\uf010\uf011\uf012\uf013\uf014\uf015\uf016\uf017\uf018\uf019\uf01a\uf01b\uf01c\uf01d\uf01e\uf01f\uf020\uf021\uf022\uf023\uf024\uf025\uf026\uf027\uf028\uf029\uf02a\uf02b\uf02c\uf02d\uf02e\uf02f\uf030\uf031\uf032\uf033\uf034\uf035\uf036\uf037\uf038\uf039\uf03a\uf03b\uf03c\uf03d\uf03e\uf03f\uf040\uf041\uf042\uf043\uf044\uf045\uf046\uf047\uf048\uf049\uf04a\uf04b\uf04c\uf04d\uf04e\uf04f\uf050\uf051\uf052\uf053\uf054\uf055\uf056\uf057\uf058\uf059\uf05a\uf05b\uf05c\uf05d\uf05e\uf05f\uf060\uf061\uf062\uf063\uf064\uf065\uf066\uf067\uf068\uf069\uf06a\uf06b\uf06c\uf06d\uf06e\uf06f\uf070\uf071\uf072\uf073\uf074\uf075\uf076\uf077\uf078\uf079\uf07a\uf07b\uf07c\uf07d\uf07e\uf07f\uf080\uf081\uf082\uf083\uf084\uf085\uf086\uf087\uf088\uf089\uf08a\uf08b\uf08c\uf08d\uf08e\uf08f\uf090\uf091\uf092\uf093\uf094\uf095\uf096\uf097\uf098\uf099\uf09a\uf09b\uf09c\uf09d\uf09e\uf09f\uf0a0\uf0a1\uf0a2\uf0a3\uf0a4\uf0a5\uf0a6\uf0a7\uf0a8\uf0a9\uf0aa\uf0ab\uf0ac\uf0ad\uf0ae\uf0af\uf0b0\uf0b1\uf0b2\uf0b3\uf0b4\uf0b5\uf0b6\uf0b7\uf0b8\uf0b9\uf0ba\uf0bb\uf0bc\uf0bd\uf0be\uf0bf\uf0c0\uf0c1\uf0c2\uf0c3\uf0c4\uf0c5\uf0c6\uf0c7\uf0c8\uf0c9\uf0ca\uf0cb\uf0cc\uf0cd\uf0ce\uf0cf\uf0d0\uf0d1\uf0d2\uf0d3\uf0d4\uf0d5\uf0d6\uf0d7\uf0d8\uf0d9\uf0da\uf0db\uf0dc\uf0dd\uf0de\uf0df\uf0e0\uf0e1\uf0e2\uf0e3\uf0e4\uf0e5\uf0e6\uf0e7\uf0e8\uf0e9\uf0ea\uf0eb\uf0ec\uf0ed\uf0ee\uf0ef\uf0f0\uf0f1\uf0f2\uf0f3\uf0f4\uf0f5\uf0f6\uf0f7\uf0f8\uf0f9\uf0fa\uf0fb\uf0fc\uf0fd\uf0fe\uf0ff\uf100\uf101\uf102\uf103\uf104\uf105\uf106\uf107\uf108\uf109\uf10a\uf10b\uf10c\uf10d\uf10e\uf10f\uf110\uf111\uf112\uf113\uf114\uf115\uf116\uf117\uf118\uf119\uf11a\uf11b\uf11c\uf11d\uf11e\uf11f\uf120\uf121\uf122\uf123\uf124\uf125\uf126\uf127\uf128\uf129\uf12a\uf12b\uf12c\uf12d\uf12e\uf12f\uf130\uf131\uf132\uf133\uf134\uf135\uf136\uf137\uf138\uf139\uf13a\uf13b\uf13c\uf13d\uf13e\uf13f\uf140\uf141\uf142\uf143\uf144\uf145\uf146\uf147\uf148\uf149\uf14a\uf14b\uf14c\uf14d\uf14e\uf14f\uf150\uf151\uf152\uf153\uf154\uf155\uf156\uf157\uf158\uf159\uf15a\uf15b\uf15c\uf15d\uf15e\uf15f\uf160\uf161\uf162\uf163\uf164\uf165\uf166\uf167\uf168\uf169\uf16a\uf16b\uf16c\uf16d\uf16e\uf16f\uf170\uf171\uf172\uf173\uf174\uf175\uf176\uf177\uf178\uf179\uf17a\uf17b\uf17c\uf17d\uf17e\uf17f\uf180\uf181\uf182\uf183\uf184\uf185\uf186\uf187\uf188\uf189\uf18a\uf18b\uf18c\uf18d\uf18e\uf18f\uf190\uf191\uf192\uf193\uf194\uf195\uf196\uf197\uf198\uf199\uf19a\uf19b\uf19c\uf19d\uf19e\uf19f\uf1a0\uf1a1\uf1a2\uf1a3\uf1a4\uf1a5\uf1a6\uf1a7\uf1a8\uf1a9\uf1aa\uf1ab\uf1ac\uf1ad\uf1ae\uf1af\uf1b0\uf1b1\uf1b2\uf1b3\uf1b4\uf1b5\uf1b6\uf1b7\uf1b8\uf1b9\uf1ba\uf1bb\uf1bc\uf1bd\uf1be\uf1bf\uf1c0\uf1c1\uf1c2\uf1c3\uf1c4\uf1c5\uf1c6\uf1c7\uf1c8\uf1c9\uf1ca\uf1cb\uf1cc\uf1cd\uf1ce\uf1cf\uf1d0\uf1d1\uf1d2\uf1d3\uf1d4\uf1d5\uf1d6\uf1d7\uf1d8\uf1d9\uf1da\uf1db\uf1dc\uf1dd\uf1de\uf1df\uf1e0\uf1e1\uf1e2\uf1e3\uf1e4\uf1e5\uf1e6\uf1e7\uf1e8\uf1e9\uf1ea\uf1eb\uf1ec\uf1ed\uf1ee\uf1ef\uf1f0\uf1f1\uf1f2\uf1f3\uf1f4\uf1f5\uf1f6\uf1f7\uf1f8\uf1f9\uf1fa\uf1fb\uf1fc\uf1fd\uf1fe\uf1ff\uf200\uf201\uf202\uf203\uf204\uf205\uf206\uf207\uf208\uf209\uf20a\uf20b\uf20c\uf20d\uf20e\uf20f\uf210\uf211\uf212\uf213\uf214\uf215\uf216\uf217\uf218\uf219\uf21a\uf21b\uf21c\uf21d\uf21e\uf21f\uf220\uf221\uf222\uf223\uf224\uf225\uf226\uf227\uf228\uf229\uf22a\uf22b\uf22c\uf22d\uf22e\uf22f\uf230\uf231\uf232\uf233\uf234\uf235\uf236\uf237\uf238\uf239\uf23a\uf23b\uf23c\uf23d\uf23e\uf23f\uf240\uf241\uf242\uf243\uf244\uf245\uf246\uf247\uf248\uf249\uf24a\uf24b\uf24c\uf24d\uf24e\uf24f\uf250\uf251\uf252\uf253\uf254\uf255\uf256\uf257\uf258\uf259\uf25a\uf25b\uf25c\uf25d\uf25e\uf25f\uf260\uf261\uf262\uf263\uf264\uf265\uf266\uf267\uf268\uf269\uf26a\uf26b\uf26c\uf26d\uf26e\uf26f\uf270\uf271\uf272\uf273\uf274\uf275\uf276\uf277\uf278\uf279\uf27a\uf27b\uf27c\uf27d\uf27e\uf27f\uf280\uf281\uf282\uf283\uf284\uf285\uf286\uf287\uf288\uf289\uf28a\uf28b\uf28c\uf28d\uf28e\uf28f\uf290\uf291\uf292\uf293\uf294\uf295\uf296\uf297\uf298\uf299\uf29a\uf29b\uf29c\uf29d\uf29e\uf29f\uf2a0\uf2a1\uf2a2\uf2a3\uf2a4\uf2a5\uf2a6\uf2a7\uf2a8\uf2a9\uf2aa\uf2ab\uf2ac\uf2ad\uf2ae\uf2af\uf2b0\uf2b1\uf2b2\uf2b3\uf2b4\uf2b5\uf2b6\uf2b7\uf2b8\uf2b9\uf2ba\uf2bb\uf2bc\uf2bd\uf2be\uf2bf\uf2c0\uf2c1\uf2c2\uf2c3\uf2c4\uf2c5\uf2c6\uf2c7\uf2c8\uf2c9\uf2ca\uf2cb\uf2cc\uf2cd\uf2ce\uf2cf\uf2d0\uf2d1\uf2d2\uf2d3\uf2d4\uf2d5\uf2d6\uf2d7\uf2d8\uf2d9\uf2da\uf2db\uf2dc\uf2dd\uf2de\uf2df\uf2e0\uf2e1\uf2e2\uf2e3\uf2e4\uf2e5\uf2e6\uf2e7\uf2e8\uf2e9\uf2ea\uf2eb\uf2ec\uf2ed\uf2ee\uf2ef\uf2f0\uf2f1\uf2f2\uf2f3\uf2f4\uf2f5\uf2f6\uf2f7\uf2f8\uf2f9\uf2fa\uf2fb\uf2fc\uf2fd\uf2fe\uf2ff\uf300\uf301\uf302\uf303\uf304\uf305\uf306\uf307\uf308\uf309\uf30a\uf30b\uf30c\uf30d\uf30e\uf30f\uf310\uf311\uf312\uf313\uf314\uf315\uf316\uf317\uf318\uf319\uf31a\uf31b\uf31c\uf31d\uf31e\uf31f\uf320\uf321\uf322\uf323\uf324\uf325\uf326\uf327\uf328\uf329\uf32a\uf32b\uf32c\uf32d\uf32e\uf32f\uf330\uf331\uf332\uf333\uf334\uf335\uf336\uf337\uf338\uf339\uf33a\uf33b\uf33c\uf33d\uf33e\uf33f\uf340\uf341\uf342\uf343\uf344\uf345\uf346\uf347\uf348\uf349\uf34a\uf34b\uf34c\uf34d\uf34e\uf34f\uf350\uf351\uf352\uf353\uf354\uf355\uf356\uf357\uf358\uf359\uf35a\uf35b\uf35c\uf35d\uf35e\uf35f\uf360\uf361\uf362\uf363\uf364\uf365\uf366\uf367\uf368\uf369\uf36a\uf36b\uf36c\uf36d\uf36e\uf36f\uf370\uf371\uf372\uf373\uf374\uf375\uf376\uf377\uf378\uf379\uf37a\uf37b\uf37c\uf37d\uf37e\uf37f\uf380\uf381\uf382\uf383\uf384\uf385\uf386\uf387\uf388\uf389\uf38a\uf38b\uf38c\uf38d\uf38e\uf38f\uf390\uf391\uf392\uf393\uf394\uf395\uf396\uf397\uf398\uf399\uf39a\uf39b\uf39c\uf39d\uf39e\uf39f\uf3a0\uf3a1\uf3a2\uf3a3\uf3a4\uf3a5\uf3a6\uf3a7\uf3a8\uf3a9\uf3aa\uf3ab\uf3ac\uf3ad\uf3ae\uf3af\uf3b0\uf3b1\uf3b2\uf3b3\uf3b4\uf3b5\uf3b6\uf3b7\uf3b8\uf3b9\uf3ba\uf3bb\uf3bc\uf3bd\uf3be\uf3bf\uf3c0\uf3c1\uf3c2\uf3c3\uf3c4\uf3c5\uf3c6\uf3c7\uf3c8\uf3c9\uf3ca\uf3cb\uf3cc\uf3cd\uf3ce\uf3cf\uf3d0\uf3d1\uf3d2\uf3d3\uf3d4\uf3d5\uf3d6\uf3d7\uf3d8\uf3d9\uf3da\uf3db\uf3dc\uf3dd\uf3de\uf3df\uf3e0\uf3e1\uf3e2\uf3e3\uf3e4\uf3e5\uf3e6\uf3e7\uf3e8\uf3e9\uf3ea\uf3eb\uf3ec\uf3ed\uf3ee\uf3ef\uf3f0\uf3f1\uf3f2\uf3f3\uf3f4\uf3f5\uf3f6\uf3f7\uf3f8\uf3f9\uf3fa\uf3fb\uf3fc\uf3fd\uf3fe\uf3ff\uf400\uf401\uf402\uf403\uf404\uf405\uf406\uf407\uf408\uf409\uf40a\uf40b\uf40c\uf40d\uf40e\uf40f\uf410\uf411\uf412\uf413\uf414\uf415\uf416\uf417\uf418\uf419\uf41a\uf41b\uf41c\uf41d\uf41e\uf41f\uf420\uf421\uf422\uf423\uf424\uf425\uf426\uf427\uf428\uf429\uf42a\uf42b\uf42c\uf42d\uf42e\uf42f\uf430\uf431\uf432\uf433\uf434\uf435\uf436\uf437\uf438\uf439\uf43a\uf43b\uf43c\uf43d\uf43e\uf43f\uf440\uf441\uf442\uf443\uf444\uf445\uf446\uf447\uf448\uf449\uf44a\uf44b\uf44c\uf44d\uf44e\uf44f\uf450\uf451\uf452\uf453\uf454\uf455\uf456\uf457\uf458\uf459\uf45a\uf45b\uf45c\uf45d\uf45e\uf45f\uf460\uf461\uf462\uf463\uf464\uf465\uf466\uf467\uf468\uf469\uf46a\uf46b\uf46c\uf46d\uf46e\uf46f\uf470\uf471\uf472\uf473\uf474\uf475\uf476\uf477\uf478\uf479\uf47a\uf47b\uf47c\uf47d\uf47e\uf47f\uf480\uf481\uf482\uf483\uf484\uf485\uf486\uf487\uf488\uf489\uf48a\uf48b\uf48c\uf48d\uf48e\uf48f\uf490\uf491\uf492\uf493\uf494\uf495\uf496\uf497\uf498\uf499\uf49a\uf49b\uf49c\uf49d\uf49e\uf49f\uf4a0\uf4a1\uf4a2\uf4a3\uf4a4\uf4a5\uf4a6\uf4a7\uf4a8\uf4a9\uf4aa\uf4ab\uf4ac\uf4ad\uf4ae\uf4af\uf4b0\uf4b1\uf4b2\uf4b3\uf4b4\uf4b5\uf4b6\uf4b7\uf4b8\uf4b9\uf4ba\uf4bb\uf4bc\uf4bd\uf4be\uf4bf\uf4c0\uf4c1\uf4c2\uf4c3\uf4c4\uf4c5\uf4c6\uf4c7\uf4c8\uf4c9\uf4ca\uf4cb\uf4cc\uf4cd\uf4ce\uf4cf\uf4d0\uf4d1\uf4d2\uf4d3\uf4d4\uf4d5\uf4d6\uf4d7\uf4d8\uf4d9\uf4da\uf4db\uf4dc\uf4dd\uf4de\uf4df\uf4e0\uf4e1\uf4e2\uf4e3\uf4e4\uf4e5\uf4e6\uf4e7\uf4e8\uf4e9\uf4ea\uf4eb\uf4ec\uf4ed\uf4ee\uf4ef\uf4f0\uf4f1\uf4f2\uf4f3\uf4f4\uf4f5\uf4f6\uf4f7\uf4f8\uf4f9\uf4fa\uf4fb\uf4fc\uf4fd\uf4fe\uf4ff\uf500\uf501\uf502\uf503\uf504\uf505\uf506\uf507\uf508\uf509\uf50a\uf50b\uf50c\uf50d\uf50e\uf50f\uf510\uf511\uf512\uf513\uf514\uf515\uf516\uf517\uf518\uf519\uf51a\uf51b\uf51c\uf51d\uf51e\uf51f\uf520\uf521\uf522\uf523\uf524\uf525\uf526\uf527\uf528\uf529\uf52a\uf52b\uf52c\uf52d\uf52e\uf52f\uf530\uf531\uf532\uf533\uf534\uf535\uf536\uf537\uf538\uf539\uf53a\uf53b\uf53c\uf53d\uf53e\uf53f\uf540\uf541\uf542\uf543\uf544\uf545\uf546\uf547\uf548\uf549\uf54a\uf54b\uf54c\uf54d\uf54e\uf54f\uf550\uf551\uf552\uf553\uf554\uf555\uf556\uf557\uf558\uf559\uf55a\uf55b\uf55c\uf55d\uf55e\uf55f\uf560\uf561\uf562\uf563\uf564\uf565\uf566\uf567\uf568\uf569\uf56a\uf56b\uf56c\uf56d\uf56e\uf56f\uf570\uf571\uf572\uf573\uf574\uf575\uf576\uf577\uf578\uf579\uf57a\uf57b\uf57c\uf57d\uf57e\uf57f\uf580\uf581\uf582\uf583\uf584\uf585\uf586\uf587\uf588\uf589\uf58a\uf58b\uf58c\uf58d\uf58e\uf58f\uf590\uf591\uf592\uf593\uf594\uf595\uf596\uf597\uf598\uf599\uf59a\uf59b\uf59c\uf59d\uf59e\uf59f\uf5a0\uf5a1\uf5a2\uf5a3\uf5a4\uf5a5\uf5a6\uf5a7\uf5a8\uf5a9\uf5aa\uf5ab\uf5ac\uf5ad\uf5ae\uf5af\uf5b0\uf5b1\uf5b2\uf5b3\uf5b4\uf5b5\uf5b6\uf5b7\uf5b8\uf5b9\uf5ba\uf5bb\uf5bc\uf5bd\uf5be\uf5bf\uf5c0\uf5c1\uf5c2\uf5c3\uf5c4\uf5c5\uf5c6\uf5c7\uf5c8\uf5c9\uf5ca\uf5cb\uf5cc\uf5cd\uf5ce\uf5cf\uf5d0\uf5d1\uf5d2\uf5d3\uf5d4\uf5d5\uf5d6\uf5d7\uf5d8\uf5d9\uf5da\uf5db\uf5dc\uf5dd\uf5de\uf5df\uf5e0\uf5e1\uf5e2\uf5e3\uf5e4\uf5e5\uf5e6\uf5e7\uf5e8\uf5e9\uf5ea\uf5eb\uf5ec\uf5ed\uf5ee\uf5ef\uf5f0\uf5f1\uf5f2\uf5f3\uf5f4\uf5f5\uf5f6\uf5f7\uf5f8\uf5f9\uf5fa\uf5fb\uf5fc\uf5fd\uf5fe\uf5ff\uf600\uf601\uf602\uf603\uf604\uf605\uf606\uf607\uf608\uf609\uf60a\uf60b\uf60c\uf60d\uf60e\uf60f\uf610\uf611\uf612\uf613\uf614\uf615\uf616\uf617\uf618\uf619\uf61a\uf61b\uf61c\uf61d\uf61e\uf61f\uf620\uf621\uf622\uf623\uf624\uf625\uf626\uf627\uf628\uf629\uf62a\uf62b\uf62c\uf62d\uf62e\uf62f\uf630\uf631\uf632\uf633\uf634\uf635\uf636\uf637\uf638\uf639\uf63a\uf63b\uf63c\uf63d\uf63e\uf63f\uf640\uf641\uf642\uf643\uf644\uf645\uf646\uf647\uf648\uf649\uf64a\uf64b\uf64c\uf64d\uf64e\uf64f\uf650\uf651\uf652\uf653\uf654\uf655\uf656\uf657\uf658\uf659\uf65a\uf65b\uf65c\uf65d\uf65e\uf65f\uf660\uf661\uf662\uf663\uf664\uf665\uf666\uf667\uf668\uf669\uf66a\uf66b\uf66c\uf66d\uf66e\uf66f\uf670\uf671\uf672\uf673\uf674\uf675\uf676\uf677\uf678\uf679\uf67a\uf67b\uf67c\uf67d\uf67e\uf67f\uf680\uf681\uf682\uf683\uf684\uf685\uf686\uf687\uf688\uf689\uf68a\uf68b\uf68c\uf68d\uf68e\uf68f\uf690\uf691\uf692\uf693\uf694\uf695\uf696\uf697\uf698\uf699\uf69a\uf69b\uf69c\uf69d\uf69e\uf69f\uf6a0\uf6a1\uf6a2\uf6a3\uf6a4\uf6a5\uf6a6\uf6a7\uf6a8\uf6a9\uf6aa\uf6ab\uf6ac\uf6ad\uf6ae\uf6af\uf6b0\uf6b1\uf6b2\uf6b3\uf6b4\uf6b5\uf6b6\uf6b7\uf6b8\uf6b9\uf6ba\uf6bb\uf6bc\uf6bd\uf6be\uf6bf\uf6c0\uf6c1\uf6c2\uf6c3\uf6c4\uf6c5\uf6c6\uf6c7\uf6c8\uf6c9\uf6ca\uf6cb\uf6cc\uf6cd\uf6ce\uf6cf\uf6d0\uf6d1\uf6d2\uf6d3\uf6d4\uf6d5\uf6d6\uf6d7\uf6d8\uf6d9\uf6da\uf6db\uf6dc\uf6dd\uf6de\uf6df\uf6e0\uf6e1\uf6e2\uf6e3\uf6e4\uf6e5\uf6e6\uf6e7\uf6e8\uf6e9\uf6ea\uf6eb\uf6ec\uf6ed\uf6ee\uf6ef\uf6f0\uf6f1\uf6f2\uf6f3\uf6f4\uf6f5\uf6f6\uf6f7\uf6f8\uf6f9\uf6fa\uf6fb\uf6fc\uf6fd\uf6fe\uf6ff\uf700\uf701\uf702\uf703\uf704\uf705\uf706\uf707\uf708\uf709\uf70a\uf70b\uf70c\uf70d\uf70e\uf70f\uf710\uf711\uf712\uf713\uf714\uf715\uf716\uf717\uf718\uf719\uf71a\uf71b\uf71c\uf71d\uf71e\uf71f\uf720\uf721\uf722\uf723\uf724\uf725\uf726\uf727\uf728\uf729\uf72a\uf72b\uf72c\uf72d\uf72e\uf72f\uf730\uf731\uf732\uf733\uf734\uf735\uf736\uf737\uf738\uf739\uf73a\uf73b\uf73c\uf73d\uf73e\uf73f\uf740\uf741\uf742\uf743\uf744\uf745\uf746\uf747\uf748\uf749\uf74a\uf74b\uf74c\uf74d\uf74e\uf74f\uf750\uf751\uf752\uf753\uf754\uf755\uf756\uf757\uf758\uf759\uf75a\uf75b\uf75c\uf75d\uf75e\uf75f\uf760\uf761\uf762\uf763\uf764\uf765\uf766\uf767\uf768\uf769\uf76a\uf76b\uf76c\uf76d\uf76e\uf76f\uf770\uf771\uf772\uf773\uf774\uf775\uf776\uf777\uf778\uf779\uf77a\uf77b\uf77c\uf77d\uf77e\uf77f\uf780\uf781\uf782\uf783\uf784\uf785\uf786\uf787\uf788\uf789\uf78a\uf78b\uf78c\uf78d\uf78e\uf78f\uf790\uf791\uf792\uf793\uf794\uf795\uf796\uf797\uf798\uf799\uf79a\uf79b\uf79c\uf79d\uf79e\uf79f\uf7a0\uf7a1\uf7a2\uf7a3\uf7a4\uf7a5\uf7a6\uf7a7\uf7a8\uf7a9\uf7aa\uf7ab\uf7ac\uf7ad\uf7ae\uf7af\uf7b0\uf7b1\uf7b2\uf7b3\uf7b4\uf7b5\uf7b6\uf7b7\uf7b8\uf7b9\uf7ba\uf7bb\uf7bc\uf7bd\uf7be\uf7bf\uf7c0\uf7c1\uf7c2\uf7c3\uf7c4\uf7c5\uf7c6\uf7c7\uf7c8\uf7c9\uf7ca\uf7cb\uf7cc\uf7cd\uf7ce\uf7cf\uf7d0\uf7d1\uf7d2\uf7d3\uf7d4\uf7d5\uf7d6\uf7d7\uf7d8\uf7d9\uf7da\uf7db\uf7dc\uf7dd\uf7de\uf7df\uf7e0\uf7e1\uf7e2\uf7e3\uf7e4\uf7e5\uf7e6\uf7e7\uf7e8\uf7e9\uf7ea\uf7eb\uf7ec\uf7ed\uf7ee\uf7ef\uf7f0\uf7f1\uf7f2\uf7f3\uf7f4\uf7f5\uf7f6\uf7f7\uf7f8\uf7f9\uf7fa\uf7fb\uf7fc\uf7fd\uf7fe\uf7ff\uf800\uf801\uf802\uf803\uf804\uf805\uf806\uf807\uf808\uf809\uf80a\uf80b\uf80c\uf80d\uf80e\uf80f\uf810\uf811\uf812\uf813\uf814\uf815\uf816\uf817\uf818\uf819\uf81a\uf81b\uf81c\uf81d\uf81e\uf81f\uf820\uf821\uf822\uf823\uf824\uf825\uf826\uf827\uf828\uf829\uf82a\uf82b\uf82c\uf82d\uf82e\uf82f\uf830\uf831\uf832\uf833\uf834\uf835\uf836\uf837\uf838\uf839\uf83a\uf83b\uf83c\uf83d\uf83e\uf83f\uf840\uf841\uf842\uf843\uf844\uf845\uf846\uf847\uf848\uf849\uf84a\uf84b\uf84c\uf84d\uf84e\uf84f\uf850\uf851\uf852\uf853\uf854\uf855\uf856\uf857\uf858\uf859\uf85a\uf85b\uf85c\uf85d\uf85e\uf85f\uf860\uf861\uf862\uf863\uf864\uf865\uf866\uf867\uf868\uf869\uf86a\uf86b\uf86c\uf86d\uf86e\uf86f\uf870\uf871\uf872\uf873\uf874\uf875\uf876\uf877\uf878\uf879\uf87a\uf87b\uf87c\uf87d\uf87e\uf87f\uf880\uf881\uf882\uf883\uf884\uf885\uf886\uf887\uf888\uf889\uf88a\uf88b\uf88c\uf88d\uf88e\uf88f\uf890\uf891\uf892\uf893\uf894\uf895\uf896\uf897\uf898\uf899\uf89a\uf89b\uf89c\uf89d\uf89e\uf89f\uf8a0\uf8a1\uf8a2\uf8a3\uf8a4\uf8a5\uf8a6\uf8a7\uf8a8\uf8a9\uf8aa\uf8ab\uf8ac\uf8ad\uf8ae\uf8af\uf8b0\uf8b1\uf8b2\uf8b3\uf8b4\uf8b5\uf8b6\uf8b7\uf8b8\uf8b9\uf8ba\uf8bb\uf8bc\uf8bd\uf8be\uf8bf\uf8c0\uf8c1\uf8c2\uf8c3\uf8c4\uf8c5\uf8c6\uf8c7\uf8c8\uf8c9\uf8ca\uf8cb\uf8cc\uf8cd\uf8ce\uf8cf\uf8d0\uf8d1\uf8d2\uf8d3\uf8d4\uf8d5\uf8d6\uf8d7\uf8d8\uf8d9\uf8da\uf8db\uf8dc\uf8dd\uf8de\uf8df\uf8e0\uf8e1\uf8e2\uf8e3\uf8e4\uf8e5\uf8e6\uf8e7\uf8e8\uf8e9\uf8ea\uf8eb\uf8ec\uf8ed\uf8ee\uf8ef\uf8f0\uf8f1\uf8f2\uf8f3\uf8f4\uf8f5\uf8f6\uf8f7\uf8f8\uf8f9\uf8fa\uf8fb\uf8fc\uf8fd\uf8fe\uf8ff'
    
    try:
        Cs = eval(u_prefix + r"'\ud800\ud801\ud802\ud803\ud804\ud805\ud806\ud807\ud808\ud809\ud80a\ud80b\ud80c\ud80d\ud80e\ud80f\ud810\ud811\ud812\ud813\ud814\ud815\ud816\ud817\ud818\ud819\ud81a\ud81b\ud81c\ud81d\ud81e\ud81f\ud820\ud821\ud822\ud823\ud824\ud825\ud826\ud827\ud828\ud829\ud82a\ud82b\ud82c\ud82d\ud82e\ud82f\ud830\ud831\ud832\ud833\ud834\ud835\ud836\ud837\ud838\ud839\ud83a\ud83b\ud83c\ud83d\ud83e\ud83f\ud840\ud841\ud842\ud843\ud844\ud845\ud846\ud847\ud848\ud849\ud84a\ud84b\ud84c\ud84d\ud84e\ud84f\ud850\ud851\ud852\ud853\ud854\ud855\ud856\ud857\ud858\ud859\ud85a\ud85b\ud85c\ud85d\ud85e\ud85f\ud860\ud861\ud862\ud863\ud864\ud865\ud866\ud867\ud868\ud869\ud86a\ud86b\ud86c\ud86d\ud86e\ud86f\ud870\ud871\ud872\ud873\ud874\ud875\ud876\ud877\ud878\ud879\ud87a\ud87b\ud87c\ud87d\ud87e\ud87f\ud880\ud881\ud882\ud883\ud884\ud885\ud886\ud887\ud888\ud889\ud88a\ud88b\ud88c\ud88d\ud88e\ud88f\ud890\ud891\ud892\ud893\ud894\ud895\ud896\ud897\ud898\ud899\ud89a\ud89b\ud89c\ud89d\ud89e\ud89f\ud8a0\ud8a1\ud8a2\ud8a3\ud8a4\ud8a5\ud8a6\ud8a7\ud8a8\ud8a9\ud8aa\ud8ab\ud8ac\ud8ad\ud8ae\ud8af\ud8b0\ud8b1\ud8b2\ud8b3\ud8b4\ud8b5\ud8b6\ud8b7\ud8b8\ud8b9\ud8ba\ud8bb\ud8bc\ud8bd\ud8be\ud8bf\ud8c0\ud8c1\ud8c2\ud8c3\ud8c4\ud8c5\ud8c6\ud8c7\ud8c8\ud8c9\ud8ca\ud8cb\ud8cc\ud8cd\ud8ce\ud8cf\ud8d0\ud8d1\ud8d2\ud8d3\ud8d4\ud8d5\ud8d6\ud8d7\ud8d8\ud8d9\ud8da\ud8db\ud8dc\ud8dd\ud8de\ud8df\ud8e0\ud8e1\ud8e2\ud8e3\ud8e4\ud8e5\ud8e6\ud8e7\ud8e8\ud8e9\ud8ea\ud8eb\ud8ec\ud8ed\ud8ee\ud8ef\ud8f0\ud8f1\ud8f2\ud8f3\ud8f4\ud8f5\ud8f6\ud8f7\ud8f8\ud8f9\ud8fa\ud8fb\ud8fc\ud8fd\ud8fe\ud8ff\ud900\ud901\ud902\ud903\ud904\ud905\ud906\ud907\ud908\ud909\ud90a\ud90b\ud90c\ud90d\ud90e\ud90f\ud910\ud911\ud912\ud913\ud914\ud915\ud916\ud917\ud918\ud919\ud91a\ud91b\ud91c\ud91d\ud91e\ud91f\ud920\ud921\ud922\ud923\ud924\ud925\ud926\ud927\ud928\ud929\ud92a\ud92b\ud92c\ud92d\ud92e\ud92f\ud930\ud931\ud932\ud933\ud934\ud935\ud936\ud937\ud938\ud939\ud93a\ud93b\ud93c\ud93d\ud93e\ud93f\ud940\ud941\ud942\ud943\ud944\ud945\ud946\ud947\ud948\ud949\ud94a\ud94b\ud94c\ud94d\ud94e\ud94f\ud950\ud951\ud952\ud953\ud954\ud955\ud956\ud957\ud958\ud959\ud95a\ud95b\ud95c\ud95d\ud95e\ud95f\ud960\ud961\ud962\ud963\ud964\ud965\ud966\ud967\ud968\ud969\ud96a\ud96b\ud96c\ud96d\ud96e\ud96f\ud970\ud971\ud972\ud973\ud974\ud975\ud976\ud977\ud978\ud979\ud97a\ud97b\ud97c\ud97d\ud97e\ud97f\ud980\ud981\ud982\ud983\ud984\ud985\ud986\ud987\ud988\ud989\ud98a\ud98b\ud98c\ud98d\ud98e\ud98f\ud990\ud991\ud992\ud993\ud994\ud995\ud996\ud997\ud998\ud999\ud99a\ud99b\ud99c\ud99d\ud99e\ud99f\ud9a0\ud9a1\ud9a2\ud9a3\ud9a4\ud9a5\ud9a6\ud9a7\ud9a8\ud9a9\ud9aa\ud9ab\ud9ac\ud9ad\ud9ae\ud9af\ud9b0\ud9b1\ud9b2\ud9b3\ud9b4\ud9b5\ud9b6\ud9b7\ud9b8\ud9b9\ud9ba\ud9bb\ud9bc\ud9bd\ud9be\ud9bf\ud9c0\ud9c1\ud9c2\ud9c3\ud9c4\ud9c5\ud9c6\ud9c7\ud9c8\ud9c9\ud9ca\ud9cb\ud9cc\ud9cd\ud9ce\ud9cf\ud9d0\ud9d1\ud9d2\ud9d3\ud9d4\ud9d5\ud9d6\ud9d7\ud9d8\ud9d9\ud9da\ud9db\ud9dc\ud9dd\ud9de\ud9df\ud9e0\ud9e1\ud9e2\ud9e3\ud9e4\ud9e5\ud9e6\ud9e7\ud9e8\ud9e9\ud9ea\ud9eb\ud9ec\ud9ed\ud9ee\ud9ef\ud9f0\ud9f1\ud9f2\ud9f3\ud9f4\ud9f5\ud9f6\ud9f7\ud9f8\ud9f9\ud9fa\ud9fb\ud9fc\ud9fd\ud9fe\ud9ff\uda00\uda01\uda02\uda03\uda04\uda05\uda06\uda07\uda08\uda09\uda0a\uda0b\uda0c\uda0d\uda0e\uda0f\uda10\uda11\uda12\uda13\uda14\uda15\uda16\uda17\uda18\uda19\uda1a\uda1b\uda1c\uda1d\uda1e\uda1f\uda20\uda21\uda22\uda23\uda24\uda25\uda26\uda27\uda28\uda29\uda2a\uda2b\uda2c\uda2d\uda2e\uda2f\uda30\uda31\uda32\uda33\uda34\uda35\uda36\uda37\uda38\uda39\uda3a\uda3b\uda3c\uda3d\uda3e\uda3f\uda40\uda41\uda42\uda43\uda44\uda45\uda46\uda47\uda48\uda49\uda4a\uda4b\uda4c\uda4d\uda4e\uda4f\uda50\uda51\uda52\uda53\uda54\uda55\uda56\uda57\uda58\uda59\uda5a\uda5b\uda5c\uda5d\uda5e\uda5f\uda60\uda61\uda62\uda63\uda64\uda65\uda66\uda67\uda68\uda69\uda6a\uda6b\uda6c\uda6d\uda6e\uda6f\uda70\uda71\uda72\uda73\uda74\uda75\uda76\uda77\uda78\uda79\uda7a\uda7b\uda7c\uda7d\uda7e\uda7f\uda80\uda81\uda82\uda83\uda84\uda85\uda86\uda87\uda88\uda89\uda8a\uda8b\uda8c\uda8d\uda8e\uda8f\uda90\uda91\uda92\uda93\uda94\uda95\uda96\uda97\uda98\uda99\uda9a\uda9b\uda9c\uda9d\uda9e\uda9f\udaa0\udaa1\udaa2\udaa3\udaa4\udaa5\udaa6\udaa7\udaa8\udaa9\udaaa\udaab\udaac\udaad\udaae\udaaf\udab0\udab1\udab2\udab3\udab4\udab5\udab6\udab7\udab8\udab9\udaba\udabb\udabc\udabd\udabe\udabf\udac0\udac1\udac2\udac3\udac4\udac5\udac6\udac7\udac8\udac9\udaca\udacb\udacc\udacd\udace\udacf\udad0\udad1\udad2\udad3\udad4\udad5\udad6\udad7\udad8\udad9\udada\udadb\udadc\udadd\udade\udadf\udae0\udae1\udae2\udae3\udae4\udae5\udae6\udae7\udae8\udae9\udaea\udaeb\udaec\udaed\udaee\udaef\udaf0\udaf1\udaf2\udaf3\udaf4\udaf5\udaf6\udaf7\udaf8\udaf9\udafa\udafb\udafc\udafd\udafe\udaff\udb00\udb01\udb02\udb03\udb04\udb05\udb06\udb07\udb08\udb09\udb0a\udb0b\udb0c\udb0d\udb0e\udb0f\udb10\udb11\udb12\udb13\udb14\udb15\udb16\udb17\udb18\udb19\udb1a\udb1b\udb1c\udb1d\udb1e\udb1f\udb20\udb21\udb22\udb23\udb24\udb25\udb26\udb27\udb28\udb29\udb2a\udb2b\udb2c\udb2d\udb2e\udb2f\udb30\udb31\udb32\udb33\udb34\udb35\udb36\udb37\udb38\udb39\udb3a\udb3b\udb3c\udb3d\udb3e\udb3f\udb40\udb41\udb42\udb43\udb44\udb45\udb46\udb47\udb48\udb49\udb4a\udb4b\udb4c\udb4d\udb4e\udb4f\udb50\udb51\udb52\udb53\udb54\udb55\udb56\udb57\udb58\udb59\udb5a\udb5b\udb5c\udb5d\udb5e\udb5f\udb60\udb61\udb62\udb63\udb64\udb65\udb66\udb67\udb68\udb69\udb6a\udb6b\udb6c\udb6d\udb6e\udb6f\udb70\udb71\udb72\udb73\udb74\udb75\udb76\udb77\udb78\udb79\udb7a\udb7b\udb7c\udb7d\udb7e\udb7f\udb80\udb81\udb82\udb83\udb84\udb85\udb86\udb87\udb88\udb89\udb8a\udb8b\udb8c\udb8d\udb8e\udb8f\udb90\udb91\udb92\udb93\udb94\udb95\udb96\udb97\udb98\udb99\udb9a\udb9b\udb9c\udb9d\udb9e\udb9f\udba0\udba1\udba2\udba3\udba4\udba5\udba6\udba7\udba8\udba9\udbaa\udbab\udbac\udbad\udbae\udbaf\udbb0\udbb1\udbb2\udbb3\udbb4\udbb5\udbb6\udbb7\udbb8\udbb9\udbba\udbbb\udbbc\udbbd\udbbe\udbbf\udbc0\udbc1\udbc2\udbc3\udbc4\udbc5\udbc6\udbc7\udbc8\udbc9\udbca\udbcb\udbcc\udbcd\udbce\udbcf\udbd0\udbd1\udbd2\udbd3\udbd4\udbd5\udbd6\udbd7\udbd8\udbd9\udbda\udbdb\udbdc\udbdd\udbde\udbdf\udbe0\udbe1\udbe2\udbe3\udbe4\udbe5\udbe6\udbe7\udbe8\udbe9\udbea\udbeb\udbec\udbed\udbee\udbef\udbf0\udbf1\udbf2\udbf3\udbf4\udbf5\udbf6\udbf7\udbf8\udbf9\udbfa\udbfb\udbfc\udbfd\udbfe\U0010fc00\udc01\udc02\udc03\udc04\udc05\udc06\udc07\udc08\udc09\udc0a\udc0b\udc0c\udc0d\udc0e\udc0f\udc10\udc11\udc12\udc13\udc14\udc15\udc16\udc17\udc18\udc19\udc1a\udc1b\udc1c\udc1d\udc1e\udc1f\udc20\udc21\udc22\udc23\udc24\udc25\udc26\udc27\udc28\udc29\udc2a\udc2b\udc2c\udc2d\udc2e\udc2f\udc30\udc31\udc32\udc33\udc34\udc35\udc36\udc37\udc38\udc39\udc3a\udc3b\udc3c\udc3d\udc3e\udc3f\udc40\udc41\udc42\udc43\udc44\udc45\udc46\udc47\udc48\udc49\udc4a\udc4b\udc4c\udc4d\udc4e\udc4f\udc50\udc51\udc52\udc53\udc54\udc55\udc56\udc57\udc58\udc59\udc5a\udc5b\udc5c\udc5d\udc5e\udc5f\udc60\udc61\udc62\udc63\udc64\udc65\udc66\udc67\udc68\udc69\udc6a\udc6b\udc6c\udc6d\udc6e\udc6f\udc70\udc71\udc72\udc73\udc74\udc75\udc76\udc77\udc78\udc79\udc7a\udc7b\udc7c\udc7d\udc7e\udc7f\udc80\udc81\udc82\udc83\udc84\udc85\udc86\udc87\udc88\udc89\udc8a\udc8b\udc8c\udc8d\udc8e\udc8f\udc90\udc91\udc92\udc93\udc94\udc95\udc96\udc97\udc98\udc99\udc9a\udc9b\udc9c\udc9d\udc9e\udc9f\udca0\udca1\udca2\udca3\udca4\udca5\udca6\udca7\udca8\udca9\udcaa\udcab\udcac\udcad\udcae\udcaf\udcb0\udcb1\udcb2\udcb3\udcb4\udcb5\udcb6\udcb7\udcb8\udcb9\udcba\udcbb\udcbc\udcbd\udcbe\udcbf\udcc0\udcc1\udcc2\udcc3\udcc4\udcc5\udcc6\udcc7\udcc8\udcc9\udcca\udccb\udccc\udccd\udcce\udccf\udcd0\udcd1\udcd2\udcd3\udcd4\udcd5\udcd6\udcd7\udcd8\udcd9\udcda\udcdb\udcdc\udcdd\udcde\udcdf\udce0\udce1\udce2\udce3\udce4\udce5\udce6\udce7\udce8\udce9\udcea\udceb\udcec\udced\udcee\udcef\udcf0\udcf1\udcf2\udcf3\udcf4\udcf5\udcf6\udcf7\udcf8\udcf9\udcfa\udcfb\udcfc\udcfd\udcfe\udcff\udd00\udd01\udd02\udd03\udd04\udd05\udd06\udd07\udd08\udd09\udd0a\udd0b\udd0c\udd0d\udd0e\udd0f\udd10\udd11\udd12\udd13\udd14\udd15\udd16\udd17\udd18\udd19\udd1a\udd1b\udd1c\udd1d\udd1e\udd1f\udd20\udd21\udd22\udd23\udd24\udd25\udd26\udd27\udd28\udd29\udd2a\udd2b\udd2c\udd2d\udd2e\udd2f\udd30\udd31\udd32\udd33\udd34\udd35\udd36\udd37\udd38\udd39\udd3a\udd3b\udd3c\udd3d\udd3e\udd3f\udd40\udd41\udd42\udd43\udd44\udd45\udd46\udd47\udd48\udd49\udd4a\udd4b\udd4c\udd4d\udd4e\udd4f\udd50\udd51\udd52\udd53\udd54\udd55\udd56\udd57\udd58\udd59\udd5a\udd5b\udd5c\udd5d\udd5e\udd5f\udd60\udd61\udd62\udd63\udd64\udd65\udd66\udd67\udd68\udd69\udd6a\udd6b\udd6c\udd6d\udd6e\udd6f\udd70\udd71\udd72\udd73\udd74\udd75\udd76\udd77\udd78\udd79\udd7a\udd7b\udd7c\udd7d\udd7e\udd7f\udd80\udd81\udd82\udd83\udd84\udd85\udd86\udd87\udd88\udd89\udd8a\udd8b\udd8c\udd8d\udd8e\udd8f\udd90\udd91\udd92\udd93\udd94\udd95\udd96\udd97\udd98\udd99\udd9a\udd9b\udd9c\udd9d\udd9e\udd9f\udda0\udda1\udda2\udda3\udda4\udda5\udda6\udda7\udda8\udda9\uddaa\uddab\uddac\uddad\uddae\uddaf\uddb0\uddb1\uddb2\uddb3\uddb4\uddb5\uddb6\uddb7\uddb8\uddb9\uddba\uddbb\uddbc\uddbd\uddbe\uddbf\uddc0\uddc1\uddc2\uddc3\uddc4\uddc5\uddc6\uddc7\uddc8\uddc9\uddca\uddcb\uddcc\uddcd\uddce\uddcf\uddd0\uddd1\uddd2\uddd3\uddd4\uddd5\uddd6\uddd7\uddd8\uddd9\uddda\udddb\udddc\udddd\uddde\udddf\udde0\udde1\udde2\udde3\udde4\udde5\udde6\udde7\udde8\udde9\uddea\uddeb\uddec\udded\uddee\uddef\uddf0\uddf1\uddf2\uddf3\uddf4\uddf5\uddf6\uddf7\uddf8\uddf9\uddfa\uddfb\uddfc\uddfd\uddfe\uddff\ude00\ude01\ude02\ude03\ude04\ude05\ude06\ude07\ude08\ude09\ude0a\ude0b\ude0c\ude0d\ude0e\ude0f\ude10\ude11\ude12\ude13\ude14\ude15\ude16\ude17\ude18\ude19\ude1a\ude1b\ude1c\ude1d\ude1e\ude1f\ude20\ude21\ude22\ude23\ude24\ude25\ude26\ude27\ude28\ude29\ude2a\ude2b\ude2c\ude2d\ude2e\ude2f\ude30\ude31\ude32\ude33\ude34\ude35\ude36\ude37\ude38\ude39\ude3a\ude3b\ude3c\ude3d\ude3e\ude3f\ude40\ude41\ude42\ude43\ude44\ude45\ude46\ude47\ude48\ude49\ude4a\ude4b\ude4c\ude4d\ude4e\ude4f\ude50\ude51\ude52\ude53\ude54\ude55\ude56\ude57\ude58\ude59\ude5a\ude5b\ude5c\ude5d\ude5e\ude5f\ude60\ude61\ude62\ude63\ude64\ude65\ude66\ude67\ude68\ude69\ude6a\ude6b\ude6c\ude6d\ude6e\ude6f\ude70\ude71\ude72\ude73\ude74\ude75\ude76\ude77\ude78\ude79\ude7a\ude7b\ude7c\ude7d\ude7e\ude7f\ude80\ude81\ude82\ude83\ude84\ude85\ude86\ude87\ude88\ude89\ude8a\ude8b\ude8c\ude8d\ude8e\ude8f\ude90\ude91\ude92\ude93\ude94\ude95\ude96\ude97\ude98\ude99\ude9a\ude9b\ude9c\ude9d\ude9e\ude9f\udea0\udea1\udea2\udea3\udea4\udea5\udea6\udea7\udea8\udea9\udeaa\udeab\udeac\udead\udeae\udeaf\udeb0\udeb1\udeb2\udeb3\udeb4\udeb5\udeb6\udeb7\udeb8\udeb9\udeba\udebb\udebc\udebd\udebe\udebf\udec0\udec1\udec2\udec3\udec4\udec5\udec6\udec7\udec8\udec9\udeca\udecb\udecc\udecd\udece\udecf\uded0\uded1\uded2\uded3\uded4\uded5\uded6\uded7\uded8\uded9\udeda\udedb\udedc\udedd\udede\udedf\udee0\udee1\udee2\udee3\udee4\udee5\udee6\udee7\udee8\udee9\udeea\udeeb\udeec\udeed\udeee\udeef\udef0\udef1\udef2\udef3\udef4\udef5\udef6\udef7\udef8\udef9\udefa\udefb\udefc\udefd\udefe\udeff\udf00\udf01\udf02\udf03\udf04\udf05\udf06\udf07\udf08\udf09\udf0a\udf0b\udf0c\udf0d\udf0e\udf0f\udf10\udf11\udf12\udf13\udf14\udf15\udf16\udf17\udf18\udf19\udf1a\udf1b\udf1c\udf1d\udf1e\udf1f\udf20\udf21\udf22\udf23\udf24\udf25\udf26\udf27\udf28\udf29\udf2a\udf2b\udf2c\udf2d\udf2e\udf2f\udf30\udf31\udf32\udf33\udf34\udf35\udf36\udf37\udf38\udf39\udf3a\udf3b\udf3c\udf3d\udf3e\udf3f\udf40\udf41\udf42\udf43\udf44\udf45\udf46\udf47\udf48\udf49\udf4a\udf4b\udf4c\udf4d\udf4e\udf4f\udf50\udf51\udf52\udf53\udf54\udf55\udf56\udf57\udf58\udf59\udf5a\udf5b\udf5c\udf5d\udf5e\udf5f\udf60\udf61\udf62\udf63\udf64\udf65\udf66\udf67\udf68\udf69\udf6a\udf6b\udf6c\udf6d\udf6e\udf6f\udf70\udf71\udf72\udf73\udf74\udf75\udf76\udf77\udf78\udf79\udf7a\udf7b\udf7c\udf7d\udf7e\udf7f\udf80\udf81\udf82\udf83\udf84\udf85\udf86\udf87\udf88\udf89\udf8a\udf8b\udf8c\udf8d\udf8e\udf8f\udf90\udf91\udf92\udf93\udf94\udf95\udf96\udf97\udf98\udf99\udf9a\udf9b\udf9c\udf9d\udf9e\udf9f\udfa0\udfa1\udfa2\udfa3\udfa4\udfa5\udfa6\udfa7\udfa8\udfa9\udfaa\udfab\udfac\udfad\udfae\udfaf\udfb0\udfb1\udfb2\udfb3\udfb4\udfb5\udfb6\udfb7\udfb8\udfb9\udfba\udfbb\udfbc\udfbd\udfbe\udfbf\udfc0\udfc1\udfc2\udfc3\udfc4\udfc5\udfc6\udfc7\udfc8\udfc9\udfca\udfcb\udfcc\udfcd\udfce\udfcf\udfd0\udfd1\udfd2\udfd3\udfd4\udfd5\udfd6\udfd7\udfd8\udfd9\udfda\udfdb\udfdc\udfdd\udfde\udfdf\udfe0\udfe1\udfe2\udfe3\udfe4\udfe5\udfe6\udfe7\udfe8\udfe9\udfea\udfeb\udfec\udfed\udfee\udfef\udff0\udff1\udff2\udff3\udff4\udff5\udff6\udff7\udff8\udff9\udffa\udffb\udffc\udffd\udffe\udfff'")
    except UnicodeDecodeError:
        Cs = '' # Jython can't handle isolated surrogates
    
    Ll = u'abcdefghijklmnopqrstuvwxyz\xaa\xb5\xba\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff\u0101\u0103\u0105\u0107\u0109\u010b\u010d\u010f\u0111\u0113\u0115\u0117\u0119\u011b\u011d\u011f\u0121\u0123\u0125\u0127\u0129\u012b\u012d\u012f\u0131\u0133\u0135\u0137\u0138\u013a\u013c\u013e\u0140\u0142\u0144\u0146\u0148\u0149\u014b\u014d\u014f\u0151\u0153\u0155\u0157\u0159\u015b\u015d\u015f\u0161\u0163\u0165\u0167\u0169\u016b\u016d\u016f\u0171\u0173\u0175\u0177\u017a\u017c\u017e\u017f\u0180\u0183\u0185\u0188\u018c\u018d\u0192\u0195\u0199\u019a\u019b\u019e\u01a1\u01a3\u01a5\u01a8\u01aa\u01ab\u01ad\u01b0\u01b4\u01b6\u01b9\u01ba\u01bd\u01be\u01bf\u01c6\u01c9\u01cc\u01ce\u01d0\u01d2\u01d4\u01d6\u01d8\u01da\u01dc\u01dd\u01df\u01e1\u01e3\u01e5\u01e7\u01e9\u01eb\u01ed\u01ef\u01f0\u01f3\u01f5\u01f9\u01fb\u01fd\u01ff\u0201\u0203\u0205\u0207\u0209\u020b\u020d\u020f\u0211\u0213\u0215\u0217\u0219\u021b\u021d\u021f\u0221\u0223\u0225\u0227\u0229\u022b\u022d\u022f\u0231\u0233\u0234\u0235\u0236\u0237\u0238\u0239\u023c\u023f\u0240\u0250\u0251\u0252\u0253\u0254\u0255\u0256\u0257\u0258\u0259\u025a\u025b\u025c\u025d\u025e\u025f\u0260\u0261\u0262\u0263\u0264\u0265\u0266\u0267\u0268\u0269\u026a\u026b\u026c\u026d\u026e\u026f\u0270\u0271\u0272\u0273\u0274\u0275\u0276\u0277\u0278\u0279\u027a\u027b\u027c\u027d\u027e\u027f\u0280\u0281\u0282\u0283\u0284\u0285\u0286\u0287\u0288\u0289\u028a\u028b\u028c\u028d\u028e\u028f\u0290\u0291\u0292\u0293\u0294\u0295\u0296\u0297\u0298\u0299\u029a\u029b\u029c\u029d\u029e\u029f\u02a0\u02a1\u02a2\u02a3\u02a4\u02a5\u02a6\u02a7\u02a8\u02a9\u02aa\u02ab\u02ac\u02ad\u02ae\u02af\u0390\u03ac\u03ad\u03ae\u03af\u03b0\u03b1\u03b2\u03b3\u03b4\u03b5\u03b6\u03b7\u03b8\u03b9\u03ba\u03bb\u03bc\u03bd\u03be\u03bf\u03c0\u03c1\u03c2\u03c3\u03c4\u03c5\u03c6\u03c7\u03c8\u03c9\u03ca\u03cb\u03cc\u03cd\u03ce\u03d0\u03d1\u03d5\u03d6\u03d7\u03d9\u03db\u03dd\u03df\u03e1\u03e3\u03e5\u03e7\u03e9\u03eb\u03ed\u03ef\u03f0\u03f1\u03f2\u03f3\u03f5\u03f8\u03fb\u03fc\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043a\u043b\u043c\u043d\u043e\u043f\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044a\u044b\u044c\u044d\u044e\u044f\u0450\u0451\u0452\u0453\u0454\u0455\u0456\u0457\u0458\u0459\u045a\u045b\u045c\u045d\u045e\u045f\u0461\u0463\u0465\u0467\u0469\u046b\u046d\u046f\u0471\u0473\u0475\u0477\u0479\u047b\u047d\u047f\u0481\u048b\u048d\u048f\u0491\u0493\u0495\u0497\u0499\u049b\u049d\u049f\u04a1\u04a3\u04a5\u04a7\u04a9\u04ab\u04ad\u04af\u04b1\u04b3\u04b5\u04b7\u04b9\u04bb\u04bd\u04bf\u04c2\u04c4\u04c6\u04c8\u04ca\u04cc\u04ce\u04d1\u04d3\u04d5\u04d7\u04d9\u04db\u04dd\u04df\u04e1\u04e3\u04e5\u04e7\u04e9\u04eb\u04ed\u04ef\u04f1\u04f3\u04f5\u04f7\u04f9\u0501\u0503\u0505\u0507\u0509\u050b\u050d\u050f\u0561\u0562\u0563\u0564\u0565\u0566\u0567\u0568\u0569\u056a\u056b\u056c\u056d\u056e\u056f\u0570\u0571\u0572\u0573\u0574\u0575\u0576\u0577\u0578\u0579\u057a\u057b\u057c\u057d\u057e\u057f\u0580\u0581\u0582\u0583\u0584\u0585\u0586\u0587\u1d00\u1d01\u1d02\u1d03\u1d04\u1d05\u1d06\u1d07\u1d08\u1d09\u1d0a\u1d0b\u1d0c\u1d0d\u1d0e\u1d0f\u1d10\u1d11\u1d12\u1d13\u1d14\u1d15\u1d16\u1d17\u1d18\u1d19\u1d1a\u1d1b\u1d1c\u1d1d\u1d1e\u1d1f\u1d20\u1d21\u1d22\u1d23\u1d24\u1d25\u1d26\u1d27\u1d28\u1d29\u1d2a\u1d2b\u1d62\u1d63\u1d64\u1d65\u1d66\u1d67\u1d68\u1d69\u1d6a\u1d6b\u1d6c\u1d6d\u1d6e\u1d6f\u1d70\u1d71\u1d72\u1d73\u1d74\u1d75\u1d76\u1d77\u1d79\u1d7a\u1d7b\u1d7c\u1d7d\u1d7e\u1d7f\u1d80\u1d81\u1d82\u1d83\u1d84\u1d85\u1d86\u1d87\u1d88\u1d89\u1d8a\u1d8b\u1d8c\u1d8d\u1d8e\u1d8f\u1d90\u1d91\u1d92\u1d93\u1d94\u1d95\u1d96\u1d97\u1d98\u1d99\u1d9a\u1e01\u1e03\u1e05\u1e07\u1e09\u1e0b\u1e0d\u1e0f\u1e11\u1e13\u1e15\u1e17\u1e19\u1e1b\u1e1d\u1e1f\u1e21\u1e23\u1e25\u1e27\u1e29\u1e2b\u1e2d\u1e2f\u1e31\u1e33\u1e35\u1e37\u1e39\u1e3b\u1e3d\u1e3f\u1e41\u1e43\u1e45\u1e47\u1e49\u1e4b\u1e4d\u1e4f\u1e51\u1e53\u1e55\u1e57\u1e59\u1e5b\u1e5d\u1e5f\u1e61\u1e63\u1e65\u1e67\u1e69\u1e6b\u1e6d\u1e6f\u1e71\u1e73\u1e75\u1e77\u1e79\u1e7b\u1e7d\u1e7f\u1e81\u1e83\u1e85\u1e87\u1e89\u1e8b\u1e8d\u1e8f\u1e91\u1e93\u1e95\u1e96\u1e97\u1e98\u1e99\u1e9a\u1e9b\u1ea1\u1ea3\u1ea5\u1ea7\u1ea9\u1eab\u1ead\u1eaf\u1eb1\u1eb3\u1eb5\u1eb7\u1eb9\u1ebb\u1ebd\u1ebf\u1ec1\u1ec3\u1ec5\u1ec7\u1ec9\u1ecb\u1ecd\u1ecf\u1ed1\u1ed3\u1ed5\u1ed7\u1ed9\u1edb\u1edd\u1edf\u1ee1\u1ee3\u1ee5\u1ee7\u1ee9\u1eeb\u1eed\u1eef\u1ef1\u1ef3\u1ef5\u1ef7\u1ef9\u1f00\u1f01\u1f02\u1f03\u1f04\u1f05\u1f06\u1f07\u1f10\u1f11\u1f12\u1f13\u1f14\u1f15\u1f20\u1f21\u1f22\u1f23\u1f24\u1f25\u1f26\u1f27\u1f30\u1f31\u1f32\u1f33\u1f34\u1f35\u1f36\u1f37\u1f40\u1f41\u1f42\u1f43\u1f44\u1f45\u1f50\u1f51\u1f52\u1f53\u1f54\u1f55\u1f56\u1f57\u1f60\u1f61\u1f62\u1f63\u1f64\u1f65\u1f66\u1f67\u1f70\u1f71\u1f72\u1f73\u1f74\u1f75\u1f76\u1f77\u1f78\u1f79\u1f7a\u1f7b\u1f7c\u1f7d\u1f80\u1f81\u1f82\u1f83\u1f84\u1f85\u1f86\u1f87\u1f90\u1f91\u1f92\u1f93\u1f94\u1f95\u1f96\u1f97\u1fa0\u1fa1\u1fa2\u1fa3\u1fa4\u1fa5\u1fa6\u1fa7\u1fb0\u1fb1\u1fb2\u1fb3\u1fb4\u1fb6\u1fb7\u1fbe\u1fc2\u1fc3\u1fc4\u1fc6\u1fc7\u1fd0\u1fd1\u1fd2\u1fd3\u1fd6\u1fd7\u1fe0\u1fe1\u1fe2\u1fe3\u1fe4\u1fe5\u1fe6\u1fe7\u1ff2\u1ff3\u1ff4\u1ff6\u1ff7\u2071\u207f\u210a\u210e\u210f\u2113\u212f\u2134\u2139\u213c\u213d\u2146\u2147\u2148\u2149\u2c30\u2c31\u2c32\u2c33\u2c34\u2c35\u2c36\u2c37\u2c38\u2c39\u2c3a\u2c3b\u2c3c\u2c3d\u2c3e\u2c3f\u2c40\u2c41\u2c42\u2c43\u2c44\u2c45\u2c46\u2c47\u2c48\u2c49\u2c4a\u2c4b\u2c4c\u2c4d\u2c4e\u2c4f\u2c50\u2c51\u2c52\u2c53\u2c54\u2c55\u2c56\u2c57\u2c58\u2c59\u2c5a\u2c5b\u2c5c\u2c5d\u2c5e\u2c81\u2c83\u2c85\u2c87\u2c89\u2c8b\u2c8d\u2c8f\u2c91\u2c93\u2c95\u2c97\u2c99\u2c9b\u2c9d\u2c9f\u2ca1\u2ca3\u2ca5\u2ca7\u2ca9\u2cab\u2cad\u2caf\u2cb1\u2cb3\u2cb5\u2cb7\u2cb9\u2cbb\u2cbd\u2cbf\u2cc1\u2cc3\u2cc5\u2cc7\u2cc9\u2ccb\u2ccd\u2ccf\u2cd1\u2cd3\u2cd5\u2cd7\u2cd9\u2cdb\u2cdd\u2cdf\u2ce1\u2ce3\u2ce4\u2d00\u2d01\u2d02\u2d03\u2d04\u2d05\u2d06\u2d07\u2d08\u2d09\u2d0a\u2d0b\u2d0c\u2d0d\u2d0e\u2d0f\u2d10\u2d11\u2d12\u2d13\u2d14\u2d15\u2d16\u2d17\u2d18\u2d19\u2d1a\u2d1b\u2d1c\u2d1d\u2d1e\u2d1f\u2d20\u2d21\u2d22\u2d23\u2d24\u2d25\ufb00\ufb01\ufb02\ufb03\ufb04\ufb05\ufb06\ufb13\ufb14\ufb15\ufb16\ufb17\uff41\uff42\uff43\uff44\uff45\uff46\uff47\uff48\uff49\uff4a\uff4b\uff4c\uff4d\uff4e\uff4f\uff50\uff51\uff52\uff53\uff54\uff55\uff56\uff57\uff58\uff59\uff5a'
    
    Lm = u'\u02b0\u02b1\u02b2\u02b3\u02b4\u02b5\u02b6\u02b7\u02b8\u02b9\u02ba\u02bb\u02bc\u02bd\u02be\u02bf\u02c0\u02c1\u02c6\u02c7\u02c8\u02c9\u02ca\u02cb\u02cc\u02cd\u02ce\u02cf\u02d0\u02d1\u02e0\u02e1\u02e2\u02e3\u02e4\u02ee\u037a\u0559\u0640\u06e5\u06e6\u0e46\u0ec6\u10fc\u17d7\u1843\u1d2c\u1d2d\u1d2e\u1d2f\u1d30\u1d31\u1d32\u1d33\u1d34\u1d35\u1d36\u1d37\u1d38\u1d39\u1d3a\u1d3b\u1d3c\u1d3d\u1d3e\u1d3f\u1d40\u1d41\u1d42\u1d43\u1d44\u1d45\u1d46\u1d47\u1d48\u1d49\u1d4a\u1d4b\u1d4c\u1d4d\u1d4e\u1d4f\u1d50\u1d51\u1d52\u1d53\u1d54\u1d55\u1d56\u1d57\u1d58\u1d59\u1d5a\u1d5b\u1d5c\u1d5d\u1d5e\u1d5f\u1d60\u1d61\u1d78\u1d9b\u1d9c\u1d9d\u1d9e\u1d9f\u1da0\u1da1\u1da2\u1da3\u1da4\u1da5\u1da6\u1da7\u1da8\u1da9\u1daa\u1dab\u1dac\u1dad\u1dae\u1daf\u1db0\u1db1\u1db2\u1db3\u1db4\u1db5\u1db6\u1db7\u1db8\u1db9\u1dba\u1dbb\u1dbc\u1dbd\u1dbe\u1dbf\u2090\u2091\u2092\u2093\u2094\u2d6f\u3005\u3031\u3032\u3033\u3034\u3035\u303b\u309d\u309e\u30fc\u30fd\u30fe\ua015\uff70\uff9e\uff9f'
    
    Lo = u'\u01bb\u01c0\u01c1\u01c2\u01c3\u05d0\u05d1\u05d2\u05d3\u05d4\u05d5\u05d6\u05d7\u05d8\u05d9\u05da\u05db\u05dc\u05dd\u05de\u05df\u05e0\u05e1\u05e2\u05e3\u05e4\u05e5\u05e6\u05e7\u05e8\u05e9\u05ea\u05f0\u05f1\u05f2\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062a\u062b\u062c\u062d\u062e\u062f\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u0637\u0638\u0639\u063a\u0641\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064a\u066e\u066f\u0671\u0672\u0673\u0674\u0675\u0676\u0677\u0678\u0679\u067a\u067b\u067c\u067d\u067e\u067f\u0680\u0681\u0682\u0683\u0684\u0685\u0686\u0687\u0688\u0689\u068a\u068b\u068c\u068d\u068e\u068f\u0690\u0691\u0692\u0693\u0694\u0695\u0696\u0697\u0698\u0699\u069a\u069b\u069c\u069d\u069e\u069f\u06a0\u06a1\u06a2\u06a3\u06a4\u06a5\u06a6\u06a7\u06a8\u06a9\u06aa\u06ab\u06ac\u06ad\u06ae\u06af\u06b0\u06b1\u06b2\u06b3\u06b4\u06b5\u06b6\u06b7\u06b8\u06b9\u06ba\u06bb\u06bc\u06bd\u06be\u06bf\u06c0\u06c1\u06c2\u06c3\u06c4\u06c5\u06c6\u06c7\u06c8\u06c9\u06ca\u06cb\u06cc\u06cd\u06ce\u06cf\u06d0\u06d1\u06d2\u06d3\u06d5\u06ee\u06ef\u06fa\u06fb\u06fc\u06ff\u0710\u0712\u0713\u0714\u0715\u0716\u0717\u0718\u0719\u071a\u071b\u071c\u071d\u071e\u071f\u0720\u0721\u0722\u0723\u0724\u0725\u0726\u0727\u0728\u0729\u072a\u072b\u072c\u072d\u072e\u072f\u074d\u074e\u074f\u0750\u0751\u0752\u0753\u0754\u0755\u0756\u0757\u0758\u0759\u075a\u075b\u075c\u075d\u075e\u075f\u0760\u0761\u0762\u0763\u0764\u0765\u0766\u0767\u0768\u0769\u076a\u076b\u076c\u076d\u0780\u0781\u0782\u0783\u0784\u0785\u0786\u0787\u0788\u0789\u078a\u078b\u078c\u078d\u078e\u078f\u0790\u0791\u0792\u0793\u0794\u0795\u0796\u0797\u0798\u0799\u079a\u079b\u079c\u079d\u079e\u079f\u07a0\u07a1\u07a2\u07a3\u07a4\u07a5\u07b1\u0904\u0905\u0906\u0907\u0908\u0909\u090a\u090b\u090c\u090d\u090e\u090f\u0910\u0911\u0912\u0913\u0914\u0915\u0916\u0917\u0918\u0919\u091a\u091b\u091c\u091d\u091e\u091f\u0920\u0921\u0922\u0923\u0924\u0925\u0926\u0927\u0928\u0929\u092a\u092b\u092c\u092d\u092e\u092f\u0930\u0931\u0932\u0933\u0934\u0935\u0936\u0937\u0938\u0939\u093d\u0950\u0958\u0959\u095a\u095b\u095c\u095d\u095e\u095f\u0960\u0961\u097d\u0985\u0986\u0987\u0988\u0989\u098a\u098b\u098c\u098f\u0990\u0993\u0994\u0995\u0996\u0997\u0998\u0999\u099a\u099b\u099c\u099d\u099e\u099f\u09a0\u09a1\u09a2\u09a3\u09a4\u09a5\u09a6\u09a7\u09a8\u09aa\u09ab\u09ac\u09ad\u09ae\u09af\u09b0\u09b2\u09b6\u09b7\u09b8\u09b9\u09bd\u09ce\u09dc\u09dd\u09df\u09e0\u09e1\u09f0\u09f1\u0a05\u0a06\u0a07\u0a08\u0a09\u0a0a\u0a0f\u0a10\u0a13\u0a14\u0a15\u0a16\u0a17\u0a18\u0a19\u0a1a\u0a1b\u0a1c\u0a1d\u0a1e\u0a1f\u0a20\u0a21\u0a22\u0a23\u0a24\u0a25\u0a26\u0a27\u0a28\u0a2a\u0a2b\u0a2c\u0a2d\u0a2e\u0a2f\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59\u0a5a\u0a5b\u0a5c\u0a5e\u0a72\u0a73\u0a74\u0a85\u0a86\u0a87\u0a88\u0a89\u0a8a\u0a8b\u0a8c\u0a8d\u0a8f\u0a90\u0a91\u0a93\u0a94\u0a95\u0a96\u0a97\u0a98\u0a99\u0a9a\u0a9b\u0a9c\u0a9d\u0a9e\u0a9f\u0aa0\u0aa1\u0aa2\u0aa3\u0aa4\u0aa5\u0aa6\u0aa7\u0aa8\u0aaa\u0aab\u0aac\u0aad\u0aae\u0aaf\u0ab0\u0ab2\u0ab3\u0ab5\u0ab6\u0ab7\u0ab8\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0b05\u0b06\u0b07\u0b08\u0b09\u0b0a\u0b0b\u0b0c\u0b0f\u0b10\u0b13\u0b14\u0b15\u0b16\u0b17\u0b18\u0b19\u0b1a\u0b1b\u0b1c\u0b1d\u0b1e\u0b1f\u0b20\u0b21\u0b22\u0b23\u0b24\u0b25\u0b26\u0b27\u0b28\u0b2a\u0b2b\u0b2c\u0b2d\u0b2e\u0b2f\u0b30\u0b32\u0b33\u0b35\u0b36\u0b37\u0b38\u0b39\u0b3d\u0b5c\u0b5d\u0b5f\u0b60\u0b61\u0b71\u0b83\u0b85\u0b86\u0b87\u0b88\u0b89\u0b8a\u0b8e\u0b8f\u0b90\u0b92\u0b93\u0b94\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8\u0ba9\u0baa\u0bae\u0baf\u0bb0\u0bb1\u0bb2\u0bb3\u0bb4\u0bb5\u0bb6\u0bb7\u0bb8\u0bb9\u0c05\u0c06\u0c07\u0c08\u0c09\u0c0a\u0c0b\u0c0c\u0c0e\u0c0f\u0c10\u0c12\u0c13\u0c14\u0c15\u0c16\u0c17\u0c18\u0c19\u0c1a\u0c1b\u0c1c\u0c1d\u0c1e\u0c1f\u0c20\u0c21\u0c22\u0c23\u0c24\u0c25\u0c26\u0c27\u0c28\u0c2a\u0c2b\u0c2c\u0c2d\u0c2e\u0c2f\u0c30\u0c31\u0c32\u0c33\u0c35\u0c36\u0c37\u0c38\u0c39\u0c60\u0c61\u0c85\u0c86\u0c87\u0c88\u0c89\u0c8a\u0c8b\u0c8c\u0c8e\u0c8f\u0c90\u0c92\u0c93\u0c94\u0c95\u0c96\u0c97\u0c98\u0c99\u0c9a\u0c9b\u0c9c\u0c9d\u0c9e\u0c9f\u0ca0\u0ca1\u0ca2\u0ca3\u0ca4\u0ca5\u0ca6\u0ca7\u0ca8\u0caa\u0cab\u0cac\u0cad\u0cae\u0caf\u0cb0\u0cb1\u0cb2\u0cb3\u0cb5\u0cb6\u0cb7\u0cb8\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0d05\u0d06\u0d07\u0d08\u0d09\u0d0a\u0d0b\u0d0c\u0d0e\u0d0f\u0d10\u0d12\u0d13\u0d14\u0d15\u0d16\u0d17\u0d18\u0d19\u0d1a\u0d1b\u0d1c\u0d1d\u0d1e\u0d1f\u0d20\u0d21\u0d22\u0d23\u0d24\u0d25\u0d26\u0d27\u0d28\u0d2a\u0d2b\u0d2c\u0d2d\u0d2e\u0d2f\u0d30\u0d31\u0d32\u0d33\u0d34\u0d35\u0d36\u0d37\u0d38\u0d39\u0d60\u0d61\u0d85\u0d86\u0d87\u0d88\u0d89\u0d8a\u0d8b\u0d8c\u0d8d\u0d8e\u0d8f\u0d90\u0d91\u0d92\u0d93\u0d94\u0d95\u0d96\u0d9a\u0d9b\u0d9c\u0d9d\u0d9e\u0d9f\u0da0\u0da1\u0da2\u0da3\u0da4\u0da5\u0da6\u0da7\u0da8\u0da9\u0daa\u0dab\u0dac\u0dad\u0dae\u0daf\u0db0\u0db1\u0db3\u0db4\u0db5\u0db6\u0db7\u0db8\u0db9\u0dba\u0dbb\u0dbd\u0dc0\u0dc1\u0dc2\u0dc3\u0dc4\u0dc5\u0dc6\u0e01\u0e02\u0e03\u0e04\u0e05\u0e06\u0e07\u0e08\u0e09\u0e0a\u0e0b\u0e0c\u0e0d\u0e0e\u0e0f\u0e10\u0e11\u0e12\u0e13\u0e14\u0e15\u0e16\u0e17\u0e18\u0e19\u0e1a\u0e1b\u0e1c\u0e1d\u0e1e\u0e1f\u0e20\u0e21\u0e22\u0e23\u0e24\u0e25\u0e26\u0e27\u0e28\u0e29\u0e2a\u0e2b\u0e2c\u0e2d\u0e2e\u0e2f\u0e30\u0e32\u0e33\u0e40\u0e41\u0e42\u0e43\u0e44\u0e45\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94\u0e95\u0e96\u0e97\u0e99\u0e9a\u0e9b\u0e9c\u0e9d\u0e9e\u0e9f\u0ea1\u0ea2\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead\u0eae\u0eaf\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0\u0ec1\u0ec2\u0ec3\u0ec4\u0edc\u0edd\u0f00\u0f40\u0f41\u0f42\u0f43\u0f44\u0f45\u0f46\u0f47\u0f49\u0f4a\u0f4b\u0f4c\u0f4d\u0f4e\u0f4f\u0f50\u0f51\u0f52\u0f53\u0f54\u0f55\u0f56\u0f57\u0f58\u0f59\u0f5a\u0f5b\u0f5c\u0f5d\u0f5e\u0f5f\u0f60\u0f61\u0f62\u0f63\u0f64\u0f65\u0f66\u0f67\u0f68\u0f69\u0f6a\u0f88\u0f89\u0f8a\u0f8b\u1000\u1001\u1002\u1003\u1004\u1005\u1006\u1007\u1008\u1009\u100a\u100b\u100c\u100d\u100e\u100f\u1010\u1011\u1012\u1013\u1014\u1015\u1016\u1017\u1018\u1019\u101a\u101b\u101c\u101d\u101e\u101f\u1020\u1021\u1023\u1024\u1025\u1026\u1027\u1029\u102a\u1050\u1051\u1052\u1053\u1054\u1055\u10d0\u10d1\u10d2\u10d3\u10d4\u10d5\u10d6\u10d7\u10d8\u10d9\u10da\u10db\u10dc\u10dd\u10de\u10df\u10e0\u10e1\u10e2\u10e3\u10e4\u10e5\u10e6\u10e7\u10e8\u10e9\u10ea\u10eb\u10ec\u10ed\u10ee\u10ef\u10f0\u10f1\u10f2\u10f3\u10f4\u10f5\u10f6\u10f7\u10f8\u10f9\u10fa\u1100\u1101\u1102\u1103\u1104\u1105\u1106\u1107\u1108\u1109\u110a\u110b\u110c\u110d\u110e\u110f\u1110\u1111\u1112\u1113\u1114\u1115\u1116\u1117\u1118\u1119\u111a\u111b\u111c\u111d\u111e\u111f\u1120\u1121\u1122\u1123\u1124\u1125\u1126\u1127\u1128\u1129\u112a\u112b\u112c\u112d\u112e\u112f\u1130\u1131\u1132\u1133\u1134\u1135\u1136\u1137\u1138\u1139\u113a\u113b\u113c\u113d\u113e\u113f\u1140\u1141\u1142\u1143\u1144\u1145\u1146\u1147\u1148\u1149\u114a\u114b\u114c\u114d\u114e\u114f\u1150\u1151\u1152\u1153\u1154\u1155\u1156\u1157\u1158\u1159\u115f\u1160\u1161\u1162\u1163\u1164\u1165\u1166\u1167\u1168\u1169\u116a\u116b\u116c\u116d\u116e\u116f\u1170\u1171\u1172\u1173\u1174\u1175\u1176\u1177\u1178\u1179\u117a\u117b\u117c\u117d\u117e\u117f\u1180\u1181\u1182\u1183\u1184\u1185\u1186\u1187\u1188\u1189\u118a\u118b\u118c\u118d\u118e\u118f\u1190\u1191\u1192\u1193\u1194\u1195\u1196\u1197\u1198\u1199\u119a\u119b\u119c\u119d\u119e\u119f\u11a0\u11a1\u11a2\u11a8\u11a9\u11aa\u11ab\u11ac\u11ad\u11ae\u11af\u11b0\u11b1\u11b2\u11b3\u11b4\u11b5\u11b6\u11b7\u11b8\u11b9\u11ba\u11bb\u11bc\u11bd\u11be\u11bf\u11c0\u11c1\u11c2\u11c3\u11c4\u11c5\u11c6\u11c7\u11c8\u11c9\u11ca\u11cb\u11cc\u11cd\u11ce\u11cf\u11d0\u11d1\u11d2\u11d3\u11d4\u11d5\u11d6\u11d7\u11d8\u11d9\u11da\u11db\u11dc\u11dd\u11de\u11df\u11e0\u11e1\u11e2\u11e3\u11e4\u11e5\u11e6\u11e7\u11e8\u11e9\u11ea\u11eb\u11ec\u11ed\u11ee\u11ef\u11f0\u11f1\u11f2\u11f3\u11f4\u11f5\u11f6\u11f7\u11f8\u11f9\u1200\u1201\u1202\u1203\u1204\u1205\u1206\u1207\u1208\u1209\u120a\u120b\u120c\u120d\u120e\u120f\u1210\u1211\u1212\u1213\u1214\u1215\u1216\u1217\u1218\u1219\u121a\u121b\u121c\u121d\u121e\u121f\u1220\u1221\u1222\u1223\u1224\u1225\u1226\u1227\u1228\u1229\u122a\u122b\u122c\u122d\u122e\u122f\u1230\u1231\u1232\u1233\u1234\u1235\u1236\u1237\u1238\u1239\u123a\u123b\u123c\u123d\u123e\u123f\u1240\u1241\u1242\u1243\u1244\u1245\u1246\u1247\u1248\u124a\u124b\u124c\u124d\u1250\u1251\u1252\u1253\u1254\u1255\u1256\u1258\u125a\u125b\u125c\u125d\u1260\u1261\u1262\u1263\u1264\u1265\u1266\u1267\u1268\u1269\u126a\u126b\u126c\u126d\u126e\u126f\u1270\u1271\u1272\u1273\u1274\u1275\u1276\u1277\u1278\u1279\u127a\u127b\u127c\u127d\u127e\u127f\u1280\u1281\u1282\u1283\u1284\u1285\u1286\u1287\u1288\u128a\u128b\u128c\u128d\u1290\u1291\u1292\u1293\u1294\u1295\u1296\u1297\u1298\u1299\u129a\u129b\u129c\u129d\u129e\u129f\u12a0\u12a1\u12a2\u12a3\u12a4\u12a5\u12a6\u12a7\u12a8\u12a9\u12aa\u12ab\u12ac\u12ad\u12ae\u12af\u12b0\u12b2\u12b3\u12b4\u12b5\u12b8\u12b9\u12ba\u12bb\u12bc\u12bd\u12be\u12c0\u12c2\u12c3\u12c4\u12c5\u12c8\u12c9\u12ca\u12cb\u12cc\u12cd\u12ce\u12cf\u12d0\u12d1\u12d2\u12d3\u12d4\u12d5\u12d6\u12d8\u12d9\u12da\u12db\u12dc\u12dd\u12de\u12df\u12e0\u12e1\u12e2\u12e3\u12e4\u12e5\u12e6\u12e7\u12e8\u12e9\u12ea\u12eb\u12ec\u12ed\u12ee\u12ef\u12f0\u12f1\u12f2\u12f3\u12f4\u12f5\u12f6\u12f7\u12f8\u12f9\u12fa\u12fb\u12fc\u12fd\u12fe\u12ff\u1300\u1301\u1302\u1303\u1304\u1305\u1306\u1307\u1308\u1309\u130a\u130b\u130c\u130d\u130e\u130f\u1310\u1312\u1313\u1314\u1315\u1318\u1319\u131a\u131b\u131c\u131d\u131e\u131f\u1320\u1321\u1322\u1323\u1324\u1325\u1326\u1327\u1328\u1329\u132a\u132b\u132c\u132d\u132e\u132f\u1330\u1331\u1332\u1333\u1334\u1335\u1336\u1337\u1338\u1339\u133a\u133b\u133c\u133d\u133e\u133f\u1340\u1341\u1342\u1343\u1344\u1345\u1346\u1347\u1348\u1349\u134a\u134b\u134c\u134d\u134e\u134f\u1350\u1351\u1352\u1353\u1354\u1355\u1356\u1357\u1358\u1359\u135a\u1380\u1381\u1382\u1383\u1384\u1385\u1386\u1387\u1388\u1389\u138a\u138b\u138c\u138d\u138e\u138f\u13a0\u13a1\u13a2\u13a3\u13a4\u13a5\u13a6\u13a7\u13a8\u13a9\u13aa\u13ab\u13ac\u13ad\u13ae\u13af\u13b0\u13b1\u13b2\u13b3\u13b4\u13b5\u13b6\u13b7\u13b8\u13b9\u13ba\u13bb\u13bc\u13bd\u13be\u13bf\u13c0\u13c1\u13c2\u13c3\u13c4\u13c5\u13c6\u13c7\u13c8\u13c9\u13ca\u13cb\u13cc\u13cd\u13ce\u13cf\u13d0\u13d1\u13d2\u13d3\u13d4\u13d5\u13d6\u13d7\u13d8\u13d9\u13da\u13db\u13dc\u13dd\u13de\u13df\u13e0\u13e1\u13e2\u13e3\u13e4\u13e5\u13e6\u13e7\u13e8\u13e9\u13ea\u13eb\u13ec\u13ed\u13ee\u13ef\u13f0\u13f1\u13f2\u13f3\u13f4\u1401\u1402\u1403\u1404\u1405\u1406\u1407\u1408\u1409\u140a\u140b\u140c\u140d\u140e\u140f\u1410\u1411\u1412\u1413\u1414\u1415\u1416\u1417\u1418\u1419\u141a\u141b\u141c\u141d\u141e\u141f\u1420\u1421\u1422\u1423\u1424\u1425\u1426\u1427\u1428\u1429\u142a\u142b\u142c\u142d\u142e\u142f\u1430\u1431\u1432\u1433\u1434\u1435\u1436\u1437\u1438\u1439\u143a\u143b\u143c\u143d\u143e\u143f\u1440\u1441\u1442\u1443\u1444\u1445\u1446\u1447\u1448\u1449\u144a\u144b\u144c\u144d\u144e\u144f\u1450\u1451\u1452\u1453\u1454\u1455\u1456\u1457\u1458\u1459\u145a\u145b\u145c\u145d\u145e\u145f\u1460\u1461\u1462\u1463\u1464\u1465\u1466\u1467\u1468\u1469\u146a\u146b\u146c\u146d\u146e\u146f\u1470\u1471\u1472\u1473\u1474\u1475\u1476\u1477\u1478\u1479\u147a\u147b\u147c\u147d\u147e\u147f\u1480\u1481\u1482\u1483\u1484\u1485\u1486\u1487\u1488\u1489\u148a\u148b\u148c\u148d\u148e\u148f\u1490\u1491\u1492\u1493\u1494\u1495\u1496\u1497\u1498\u1499\u149a\u149b\u149c\u149d\u149e\u149f\u14a0\u14a1\u14a2\u14a3\u14a4\u14a5\u14a6\u14a7\u14a8\u14a9\u14aa\u14ab\u14ac\u14ad\u14ae\u14af\u14b0\u14b1\u14b2\u14b3\u14b4\u14b5\u14b6\u14b7\u14b8\u14b9\u14ba\u14bb\u14bc\u14bd\u14be\u14bf\u14c0\u14c1\u14c2\u14c3\u14c4\u14c5\u14c6\u14c7\u14c8\u14c9\u14ca\u14cb\u14cc\u14cd\u14ce\u14cf\u14d0\u14d1\u14d2\u14d3\u14d4\u14d5\u14d6\u14d7\u14d8\u14d9\u14da\u14db\u14dc\u14dd\u14de\u14df\u14e0\u14e1\u14e2\u14e3\u14e4\u14e5\u14e6\u14e7\u14e8\u14e9\u14ea\u14eb\u14ec\u14ed\u14ee\u14ef\u14f0\u14f1\u14f2\u14f3\u14f4\u14f5\u14f6\u14f7\u14f8\u14f9\u14fa\u14fb\u14fc\u14fd\u14fe\u14ff\u1500\u1501\u1502\u1503\u1504\u1505\u1506\u1507\u1508\u1509\u150a\u150b\u150c\u150d\u150e\u150f\u1510\u1511\u1512\u1513\u1514\u1515\u1516\u1517\u1518\u1519\u151a\u151b\u151c\u151d\u151e\u151f\u1520\u1521\u1522\u1523\u1524\u1525\u1526\u1527\u1528\u1529\u152a\u152b\u152c\u152d\u152e\u152f\u1530\u1531\u1532\u1533\u1534\u1535\u1536\u1537\u1538\u1539\u153a\u153b\u153c\u153d\u153e\u153f\u1540\u1541\u1542\u1543\u1544\u1545\u1546\u1547\u1548\u1549\u154a\u154b\u154c\u154d\u154e\u154f\u1550\u1551\u1552\u1553\u1554\u1555\u1556\u1557\u1558\u1559\u155a\u155b\u155c\u155d\u155e\u155f\u1560\u1561\u1562\u1563\u1564\u1565\u1566\u1567\u1568\u1569\u156a\u156b\u156c\u156d\u156e\u156f\u1570\u1571\u1572\u1573\u1574\u1575\u1576\u1577\u1578\u1579\u157a\u157b\u157c\u157d\u157e\u157f\u1580\u1581\u1582\u1583\u1584\u1585\u1586\u1587\u1588\u1589\u158a\u158b\u158c\u158d\u158e\u158f\u1590\u1591\u1592\u1593\u1594\u1595\u1596\u1597\u1598\u1599\u159a\u159b\u159c\u159d\u159e\u159f\u15a0\u15a1\u15a2\u15a3\u15a4\u15a5\u15a6\u15a7\u15a8\u15a9\u15aa\u15ab\u15ac\u15ad\u15ae\u15af\u15b0\u15b1\u15b2\u15b3\u15b4\u15b5\u15b6\u15b7\u15b8\u15b9\u15ba\u15bb\u15bc\u15bd\u15be\u15bf\u15c0\u15c1\u15c2\u15c3\u15c4\u15c5\u15c6\u15c7\u15c8\u15c9\u15ca\u15cb\u15cc\u15cd\u15ce\u15cf\u15d0\u15d1\u15d2\u15d3\u15d4\u15d5\u15d6\u15d7\u15d8\u15d9\u15da\u15db\u15dc\u15dd\u15de\u15df\u15e0\u15e1\u15e2\u15e3\u15e4\u15e5\u15e6\u15e7\u15e8\u15e9\u15ea\u15eb\u15ec\u15ed\u15ee\u15ef\u15f0\u15f1\u15f2\u15f3\u15f4\u15f5\u15f6\u15f7\u15f8\u15f9\u15fa\u15fb\u15fc\u15fd\u15fe\u15ff\u1600\u1601\u1602\u1603\u1604\u1605\u1606\u1607\u1608\u1609\u160a\u160b\u160c\u160d\u160e\u160f\u1610\u1611\u1612\u1613\u1614\u1615\u1616\u1617\u1618\u1619\u161a\u161b\u161c\u161d\u161e\u161f\u1620\u1621\u1622\u1623\u1624\u1625\u1626\u1627\u1628\u1629\u162a\u162b\u162c\u162d\u162e\u162f\u1630\u1631\u1632\u1633\u1634\u1635\u1636\u1637\u1638\u1639\u163a\u163b\u163c\u163d\u163e\u163f\u1640\u1641\u1642\u1643\u1644\u1645\u1646\u1647\u1648\u1649\u164a\u164b\u164c\u164d\u164e\u164f\u1650\u1651\u1652\u1653\u1654\u1655\u1656\u1657\u1658\u1659\u165a\u165b\u165c\u165d\u165e\u165f\u1660\u1661\u1662\u1663\u1664\u1665\u1666\u1667\u1668\u1669\u166a\u166b\u166c\u166f\u1670\u1671\u1672\u1673\u1674\u1675\u1676\u1681\u1682\u1683\u1684\u1685\u1686\u1687\u1688\u1689\u168a\u168b\u168c\u168d\u168e\u168f\u1690\u1691\u1692\u1693\u1694\u1695\u1696\u1697\u1698\u1699\u169a\u16a0\u16a1\u16a2\u16a3\u16a4\u16a5\u16a6\u16a7\u16a8\u16a9\u16aa\u16ab\u16ac\u16ad\u16ae\u16af\u16b0\u16b1\u16b2\u16b3\u16b4\u16b5\u16b6\u16b7\u16b8\u16b9\u16ba\u16bb\u16bc\u16bd\u16be\u16bf\u16c0\u16c1\u16c2\u16c3\u16c4\u16c5\u16c6\u16c7\u16c8\u16c9\u16ca\u16cb\u16cc\u16cd\u16ce\u16cf\u16d0\u16d1\u16d2\u16d3\u16d4\u16d5\u16d6\u16d7\u16d8\u16d9\u16da\u16db\u16dc\u16dd\u16de\u16df\u16e0\u16e1\u16e2\u16e3\u16e4\u16e5\u16e6\u16e7\u16e8\u16e9\u16ea\u1700\u1701\u1702\u1703\u1704\u1705\u1706\u1707\u1708\u1709\u170a\u170b\u170c\u170e\u170f\u1710\u1711\u1720\u1721\u1722\u1723\u1724\u1725\u1726\u1727\u1728\u1729\u172a\u172b\u172c\u172d\u172e\u172f\u1730\u1731\u1740\u1741\u1742\u1743\u1744\u1745\u1746\u1747\u1748\u1749\u174a\u174b\u174c\u174d\u174e\u174f\u1750\u1751\u1760\u1761\u1762\u1763\u1764\u1765\u1766\u1767\u1768\u1769\u176a\u176b\u176c\u176e\u176f\u1770\u1780\u1781\u1782\u1783\u1784\u1785\u1786\u1787\u1788\u1789\u178a\u178b\u178c\u178d\u178e\u178f\u1790\u1791\u1792\u1793\u1794\u1795\u1796\u1797\u1798\u1799\u179a\u179b\u179c\u179d\u179e\u179f\u17a0\u17a1\u17a2\u17a3\u17a4\u17a5\u17a6\u17a7\u17a8\u17a9\u17aa\u17ab\u17ac\u17ad\u17ae\u17af\u17b0\u17b1\u17b2\u17b3\u17dc\u1820\u1821\u1822\u1823\u1824\u1825\u1826\u1827\u1828\u1829\u182a\u182b\u182c\u182d\u182e\u182f\u1830\u1831\u1832\u1833\u1834\u1835\u1836\u1837\u1838\u1839\u183a\u183b\u183c\u183d\u183e\u183f\u1840\u1841\u1842\u1844\u1845\u1846\u1847\u1848\u1849\u184a\u184b\u184c\u184d\u184e\u184f\u1850\u1851\u1852\u1853\u1854\u1855\u1856\u1857\u1858\u1859\u185a\u185b\u185c\u185d\u185e\u185f\u1860\u1861\u1862\u1863\u1864\u1865\u1866\u1867\u1868\u1869\u186a\u186b\u186c\u186d\u186e\u186f\u1870\u1871\u1872\u1873\u1874\u1875\u1876\u1877\u1880\u1881\u1882\u1883\u1884\u1885\u1886\u1887\u1888\u1889\u188a\u188b\u188c\u188d\u188e\u188f\u1890\u1891\u1892\u1893\u1894\u1895\u1896\u1897\u1898\u1899\u189a\u189b\u189c\u189d\u189e\u189f\u18a0\u18a1\u18a2\u18a3\u18a4\u18a5\u18a6\u18a7\u18a8\u1900\u1901\u1902\u1903\u1904\u1905\u1906\u1907\u1908\u1909\u190a\u190b\u190c\u190d\u190e\u190f\u1910\u1911\u1912\u1913\u1914\u1915\u1916\u1917\u1918\u1919\u191a\u191b\u191c\u1950\u1951\u1952\u1953\u1954\u1955\u1956\u1957\u1958\u1959\u195a\u195b\u195c\u195d\u195e\u195f\u1960\u1961\u1962\u1963\u1964\u1965\u1966\u1967\u1968\u1969\u196a\u196b\u196c\u196d\u1970\u1971\u1972\u1973\u1974\u1980\u1981\u1982\u1983\u1984\u1985\u1986\u1987\u1988\u1989\u198a\u198b\u198c\u198d\u198e\u198f\u1990\u1991\u1992\u1993\u1994\u1995\u1996\u1997\u1998\u1999\u199a\u199b\u199c\u199d\u199e\u199f\u19a0\u19a1\u19a2\u19a3\u19a4\u19a5\u19a6\u19a7\u19a8\u19a9\u19c1\u19c2\u19c3\u19c4\u19c5\u19c6\u19c7\u1a00\u1a01\u1a02\u1a03\u1a04\u1a05\u1a06\u1a07\u1a08\u1a09\u1a0a\u1a0b\u1a0c\u1a0d\u1a0e\u1a0f\u1a10\u1a11\u1a12\u1a13\u1a14\u1a15\u1a16\u2135\u2136\u2137\u2138\u2d30\u2d31\u2d32\u2d33\u2d34\u2d35\u2d36\u2d37\u2d38\u2d39\u2d3a\u2d3b\u2d3c\u2d3d\u2d3e\u2d3f\u2d40\u2d41\u2d42\u2d43\u2d44\u2d45\u2d46\u2d47\u2d48\u2d49\u2d4a\u2d4b\u2d4c\u2d4d\u2d4e\u2d4f\u2d50\u2d51\u2d52\u2d53\u2d54\u2d55\u2d56\u2d57\u2d58\u2d59\u2d5a\u2d5b\u2d5c\u2d5d\u2d5e\u2d5f\u2d60\u2d61\u2d62\u2d63\u2d64\u2d65\u2d80\u2d81\u2d82\u2d83\u2d84\u2d85\u2d86\u2d87\u2d88\u2d89\u2d8a\u2d8b\u2d8c\u2d8d\u2d8e\u2d8f\u2d90\u2d91\u2d92\u2d93\u2d94\u2d95\u2d96\u2da0\u2da1\u2da2\u2da3\u2da4\u2da5\u2da6\u2da8\u2da9\u2daa\u2dab\u2dac\u2dad\u2dae\u2db0\u2db1\u2db2\u2db3\u2db4\u2db5\u2db6\u2db8\u2db9\u2dba\u2dbb\u2dbc\u2dbd\u2dbe\u2dc0\u2dc1\u2dc2\u2dc3\u2dc4\u2dc5\u2dc6\u2dc8\u2dc9\u2dca\u2dcb\u2dcc\u2dcd\u2dce\u2dd0\u2dd1\u2dd2\u2dd3\u2dd4\u2dd5\u2dd6\u2dd8\u2dd9\u2dda\u2ddb\u2ddc\u2ddd\u2dde\u3006\u303c\u3041\u3042\u3043\u3044\u3045\u3046\u3047\u3048\u3049\u304a\u304b\u304c\u304d\u304e\u304f\u3050\u3051\u3052\u3053\u3054\u3055\u3056\u3057\u3058\u3059\u305a\u305b\u305c\u305d\u305e\u305f\u3060\u3061\u3062\u3063\u3064\u3065\u3066\u3067\u3068\u3069\u306a\u306b\u306c\u306d\u306e\u306f\u3070\u3071\u3072\u3073\u3074\u3075\u3076\u3077\u3078\u3079\u307a\u307b\u307c\u307d\u307e\u307f\u3080\u3081\u3082\u3083\u3084\u3085\u3086\u3087\u3088\u3089\u308a\u308b\u308c\u308d\u308e\u308f\u3090\u3091\u3092\u3093\u3094\u3095\u3096\u309f\u30a1\u30a2\u30a3\u30a4\u30a5\u30a6\u30a7\u30a8\u30a9\u30aa\u30ab\u30ac\u30ad\u30ae\u30af\u30b0\u30b1\u30b2\u30b3\u30b4\u30b5\u30b6\u30b7\u30b8\u30b9\u30ba\u30bb\u30bc\u30bd\u30be\u30bf\u30c0\u30c1\u30c2\u30c3\u30c4\u30c5\u30c6\u30c7\u30c8\u30c9\u30ca\u30cb\u30cc\u30cd\u30ce\u30cf\u30d0\u30d1\u30d2\u30d3\u30d4\u30d5\u30d6\u30d7\u30d8\u30d9\u30da\u30db\u30dc\u30dd\u30de\u30df\u30e0\u30e1\u30e2\u30e3\u30e4\u30e5\u30e6\u30e7\u30e8\u30e9\u30ea\u30eb\u30ec\u30ed\u30ee\u30ef\u30f0\u30f1\u30f2\u30f3\u30f4\u30f5\u30f6\u30f7\u30f8\u30f9\u30fa\u30ff\u3105\u3106\u3107\u3108\u3109\u310a\u310b\u310c\u310d\u310e\u310f\u3110\u3111\u3112\u3113\u3114\u3115\u3116\u3117\u3118\u3119\u311a\u311b\u311c\u311d\u311e\u311f\u3120\u3121\u3122\u3123\u3124\u3125\u3126\u3127\u3128\u3129\u312a\u312b\u312c\u3131\u3132\u3133\u3134\u3135\u3136\u3137\u3138\u3139\u313a\u313b\u313c\u313d\u313e\u313f\u3140\u3141\u3142\u3143\u3144\u3145\u3146\u3147\u3148\u3149\u314a\u314b\u314c\u314d\u314e\u314f\u3150\u3151\u3152\u3153\u3154\u3155\u3156\u3157\u3158\u3159\u315a\u315b\u315c\u315d\u315e\u315f\u3160\u3161\u3162\u3163\u3164\u3165\u3166\u3167\u3168\u3169\u316a\u316b\u316c\u316d\u316e\u316f\u3170\u3171\u3172\u3173\u3174\u3175\u3176\u3177\u3178\u3179\u317a\u317b\u317c\u317d\u317e\u317f\u3180\u3181\u3182\u3183\u3184\u3185\u3186\u3187\u3188\u3189\u318a\u318b\u318c\u318d\u318e\u31a0\u31a1\u31a2\u31a3\u31a4\u31a5\u31a6\u31a7\u31a8\u31a9\u31aa\u31ab\u31ac\u31ad\u31ae\u31af\u31b0\u31b1\u31b2\u31b3\u31b4\u31b5\u31b6\u31b7\u31f0\u31f1\u31f2\u31f3\u31f4\u31f5\u31f6\u31f7\u31f8\u31f9\u31fa\u31fb\u31fc\u31fd\u31fe\u31ff\u3400\u3401\u3402\u3403\u3404\u3405\u3406\u3407\u3408\u3409\u340a\u340b\u340c\u340d\u340e\u340f\u3410\u3411\u3412\u3413\u3414\u3415\u3416\u3417\u3418\u3419\u341a\u341b\u341c\u341d\u341e\u341f\u3420\u3421\u3422\u3423\u3424\u3425\u3426\u3427\u3428\u3429\u342a\u342b\u342c\u342d\u342e\u342f\u3430\u3431\u3432\u3433\u3434\u3435\u3436\u3437\u3438\u3439\u343a\u343b\u343c\u343d\u343e\u343f\u3440\u3441\u3442\u3443\u3444\u3445\u3446\u3447\u3448\u3449\u344a\u344b\u344c\u344d\u344e\u344f\u3450\u3451\u3452\u3453\u3454\u3455\u3456\u3457\u3458\u3459\u345a\u345b\u345c\u345d\u345e\u345f\u3460\u3461\u3462\u3463\u3464\u3465\u3466\u3467\u3468\u3469\u346a\u346b\u346c\u346d\u346e\u346f\u3470\u3471\u3472\u3473\u3474\u3475\u3476\u3477\u3478\u3479\u347a\u347b\u347c\u347d\u347e\u347f\u3480\u3481\u3482\u3483\u3484\u3485\u3486\u3487\u3488\u3489\u348a\u348b\u348c\u348d\u348e\u348f\u3490\u3491\u3492\u3493\u3494\u3495\u3496\u3497\u3498\u3499\u349a\u349b\u349c\u349d\u349e\u349f\u34a0\u34a1\u34a2\u34a3\u34a4\u34a5\u34a6\u34a7\u34a8\u34a9\u34aa\u34ab\u34ac\u34ad\u34ae\u34af\u34b0\u34b1\u34b2\u34b3\u34b4\u34b5\u34b6\u34b7\u34b8\u34b9\u34ba\u34bb\u34bc\u34bd\u34be\u34bf\u34c0\u34c1\u34c2\u34c3\u34c4\u34c5\u34c6\u34c7\u34c8\u34c9\u34ca\u34cb\u34cc\u34cd\u34ce\u34cf\u34d0\u34d1\u34d2\u34d3\u34d4\u34d5\u34d6\u34d7\u34d8\u34d9\u34da\u34db\u34dc\u34dd\u34de\u34df\u34e0\u34e1\u34e2\u34e3\u34e4\u34e5\u34e6\u34e7\u34e8\u34e9\u34ea\u34eb\u34ec\u34ed\u34ee\u34ef\u34f0\u34f1\u34f2\u34f3\u34f4\u34f5\u34f6\u34f7\u34f8\u34f9\u34fa\u34fb\u34fc\u34fd\u34fe\u34ff\u3500\u3501\u3502\u3503\u3504\u3505\u3506\u3507\u3508\u3509\u350a\u350b\u350c\u350d\u350e\u350f\u3510\u3511\u3512\u3513\u3514\u3515\u3516\u3517\u3518\u3519\u351a\u351b\u351c\u351d\u351e\u351f\u3520\u3521\u3522\u3523\u3524\u3525\u3526\u3527\u3528\u3529\u352a\u352b\u352c\u352d\u352e\u352f\u3530\u3531\u3532\u3533\u3534\u3535\u3536\u3537\u3538\u3539\u353a\u353b\u353c\u353d\u353e\u353f\u3540\u3541\u3542\u3543\u3544\u3545\u3546\u3547\u3548\u3549\u354a\u354b\u354c\u354d\u354e\u354f\u3550\u3551\u3552\u3553\u3554\u3555\u3556\u3557\u3558\u3559\u355a\u355b\u355c\u355d\u355e\u355f\u3560\u3561\u3562\u3563\u3564\u3565\u3566\u3567\u3568\u3569\u356a\u356b\u356c\u356d\u356e\u356f\u3570\u3571\u3572\u3573\u3574\u3575\u3576\u3577\u3578\u3579\u357a\u357b\u357c\u357d\u357e\u357f\u3580\u3581\u3582\u3583\u3584\u3585\u3586\u3587\u3588\u3589\u358a\u358b\u358c\u358d\u358e\u358f\u3590\u3591\u3592\u3593\u3594\u3595\u3596\u3597\u3598\u3599\u359a\u359b\u359c\u359d\u359e\u359f\u35a0\u35a1\u35a2\u35a3\u35a4\u35a5\u35a6\u35a7\u35a8\u35a9\u35aa\u35ab\u35ac\u35ad\u35ae\u35af\u35b0\u35b1\u35b2\u35b3\u35b4\u35b5\u35b6\u35b7\u35b8\u35b9\u35ba\u35bb\u35bc\u35bd\u35be\u35bf\u35c0\u35c1\u35c2\u35c3\u35c4\u35c5\u35c6\u35c7\u35c8\u35c9\u35ca\u35cb\u35cc\u35cd\u35ce\u35cf\u35d0\u35d1\u35d2\u35d3\u35d4\u35d5\u35d6\u35d7\u35d8\u35d9\u35da\u35db\u35dc\u35dd\u35de\u35df\u35e0\u35e1\u35e2\u35e3\u35e4\u35e5\u35e6\u35e7\u35e8\u35e9\u35ea\u35eb\u35ec\u35ed\u35ee\u35ef\u35f0\u35f1\u35f2\u35f3\u35f4\u35f5\u35f6\u35f7\u35f8\u35f9\u35fa\u35fb\u35fc\u35fd\u35fe\u35ff\u3600\u3601\u3602\u3603\u3604\u3605\u3606\u3607\u3608\u3609\u360a\u360b\u360c\u360d\u360e\u360f\u3610\u3611\u3612\u3613\u3614\u3615\u3616\u3617\u3618\u3619\u361a\u361b\u361c\u361d\u361e\u361f\u3620\u3621\u3622\u3623\u3624\u3625\u3626\u3627\u3628\u3629\u362a\u362b\u362c\u362d\u362e\u362f\u3630\u3631\u3632\u3633\u3634\u3635\u3636\u3637\u3638\u3639\u363a\u363b\u363c\u363d\u363e\u363f\u3640\u3641\u3642\u3643\u3644\u3645\u3646\u3647\u3648\u3649\u364a\u364b\u364c\u364d\u364e\u364f\u3650\u3651\u3652\u3653\u3654\u3655\u3656\u3657\u3658\u3659\u365a\u365b\u365c\u365d\u365e\u365f\u3660\u3661\u3662\u3663\u3664\u3665\u3666\u3667\u3668\u3669\u366a\u366b\u366c\u366d\u366e\u366f\u3670\u3671\u3672\u3673\u3674\u3675\u3676\u3677\u3678\u3679\u367a\u367b\u367c\u367d\u367e\u367f\u3680\u3681\u3682\u3683\u3684\u3685\u3686\u3687\u3688\u3689\u368a\u368b\u368c\u368d\u368e\u368f\u3690\u3691\u3692\u3693\u3694\u3695\u3696\u3697\u3698\u3699\u369a\u369b\u369c\u369d\u369e\u369f\u36a0\u36a1\u36a2\u36a3\u36a4\u36a5\u36a6\u36a7\u36a8\u36a9\u36aa\u36ab\u36ac\u36ad\u36ae\u36af\u36b0\u36b1\u36b2\u36b3\u36b4\u36b5\u36b6\u36b7\u36b8\u36b9\u36ba\u36bb\u36bc\u36bd\u36be\u36bf\u36c0\u36c1\u36c2\u36c3\u36c4\u36c5\u36c6\u36c7\u36c8\u36c9\u36ca\u36cb\u36cc\u36cd\u36ce\u36cf\u36d0\u36d1\u36d2\u36d3\u36d4\u36d5\u36d6\u36d7\u36d8\u36d9\u36da\u36db\u36dc\u36dd\u36de\u36df\u36e0\u36e1\u36e2\u36e3\u36e4\u36e5\u36e6\u36e7\u36e8\u36e9\u36ea\u36eb\u36ec\u36ed\u36ee\u36ef\u36f0\u36f1\u36f2\u36f3\u36f4\u36f5\u36f6\u36f7\u36f8\u36f9\u36fa\u36fb\u36fc\u36fd\u36fe\u36ff\u3700\u3701\u3702\u3703\u3704\u3705\u3706\u3707\u3708\u3709\u370a\u370b\u370c\u370d\u370e\u370f\u3710\u3711\u3712\u3713\u3714\u3715\u3716\u3717\u3718\u3719\u371a\u371b\u371c\u371d\u371e\u371f\u3720\u3721\u3722\u3723\u3724\u3725\u3726\u3727\u3728\u3729\u372a\u372b\u372c\u372d\u372e\u372f\u3730\u3731\u3732\u3733\u3734\u3735\u3736\u3737\u3738\u3739\u373a\u373b\u373c\u373d\u373e\u373f\u3740\u3741\u3742\u3743\u3744\u3745\u3746\u3747\u3748\u3749\u374a\u374b\u374c\u374d\u374e\u374f\u3750\u3751\u3752\u3753\u3754\u3755\u3756\u3757\u3758\u3759\u375a\u375b\u375c\u375d\u375e\u375f\u3760\u3761\u3762\u3763\u3764\u3765\u3766\u3767\u3768\u3769\u376a\u376b\u376c\u376d\u376e\u376f\u3770\u3771\u3772\u3773\u3774\u3775\u3776\u3777\u3778\u3779\u377a\u377b\u377c\u377d\u377e\u377f\u3780\u3781\u3782\u3783\u3784\u3785\u3786\u3787\u3788\u3789\u378a\u378b\u378c\u378d\u378e\u378f\u3790\u3791\u3792\u3793\u3794\u3795\u3796\u3797\u3798\u3799\u379a\u379b\u379c\u379d\u379e\u379f\u37a0\u37a1\u37a2\u37a3\u37a4\u37a5\u37a6\u37a7\u37a8\u37a9\u37aa\u37ab\u37ac\u37ad\u37ae\u37af\u37b0\u37b1\u37b2\u37b3\u37b4\u37b5\u37b6\u37b7\u37b8\u37b9\u37ba\u37bb\u37bc\u37bd\u37be\u37bf\u37c0\u37c1\u37c2\u37c3\u37c4\u37c5\u37c6\u37c7\u37c8\u37c9\u37ca\u37cb\u37cc\u37cd\u37ce\u37cf\u37d0\u37d1\u37d2\u37d3\u37d4\u37d5\u37d6\u37d7\u37d8\u37d9\u37da\u37db\u37dc\u37dd\u37de\u37df\u37e0\u37e1\u37e2\u37e3\u37e4\u37e5\u37e6\u37e7\u37e8\u37e9\u37ea\u37eb\u37ec\u37ed\u37ee\u37ef\u37f0\u37f1\u37f2\u37f3\u37f4\u37f5\u37f6\u37f7\u37f8\u37f9\u37fa\u37fb\u37fc\u37fd\u37fe\u37ff\u3800\u3801\u3802\u3803\u3804\u3805\u3806\u3807\u3808\u3809\u380a\u380b\u380c\u380d\u380e\u380f\u3810\u3811\u3812\u3813\u3814\u3815\u3816\u3817\u3818\u3819\u381a\u381b\u381c\u381d\u381e\u381f\u3820\u3821\u3822\u3823\u3824\u3825\u3826\u3827\u3828\u3829\u382a\u382b\u382c\u382d\u382e\u382f\u3830\u3831\u3832\u3833\u3834\u3835\u3836\u3837\u3838\u3839\u383a\u383b\u383c\u383d\u383e\u383f\u3840\u3841\u3842\u3843\u3844\u3845\u3846\u3847\u3848\u3849\u384a\u384b\u384c\u384d\u384e\u384f\u3850\u3851\u3852\u3853\u3854\u3855\u3856\u3857\u3858\u3859\u385a\u385b\u385c\u385d\u385e\u385f\u3860\u3861\u3862\u3863\u3864\u3865\u3866\u3867\u3868\u3869\u386a\u386b\u386c\u386d\u386e\u386f\u3870\u3871\u3872\u3873\u3874\u3875\u3876\u3877\u3878\u3879\u387a\u387b\u387c\u387d\u387e\u387f\u3880\u3881\u3882\u3883\u3884\u3885\u3886\u3887\u3888\u3889\u388a\u388b\u388c\u388d\u388e\u388f\u3890\u3891\u3892\u3893\u3894\u3895\u3896\u3897\u3898\u3899\u389a\u389b\u389c\u389d\u389e\u389f\u38a0\u38a1\u38a2\u38a3\u38a4\u38a5\u38a6\u38a7\u38a8\u38a9\u38aa\u38ab\u38ac\u38ad\u38ae\u38af\u38b0\u38b1\u38b2\u38b3\u38b4\u38b5\u38b6\u38b7\u38b8\u38b9\u38ba\u38bb\u38bc\u38bd\u38be\u38bf\u38c0\u38c1\u38c2\u38c3\u38c4\u38c5\u38c6\u38c7\u38c8\u38c9\u38ca\u38cb\u38cc\u38cd\u38ce\u38cf\u38d0\u38d1\u38d2\u38d3\u38d4\u38d5\u38d6\u38d7\u38d8\u38d9\u38da\u38db\u38dc\u38dd\u38de\u38df\u38e0\u38e1\u38e2\u38e3\u38e4\u38e5\u38e6\u38e7\u38e8\u38e9\u38ea\u38eb\u38ec\u38ed\u38ee\u38ef\u38f0\u38f1\u38f2\u38f3\u38f4\u38f5\u38f6\u38f7\u38f8\u38f9\u38fa\u38fb\u38fc\u38fd\u38fe\u38ff\u3900\u3901\u3902\u3903\u3904\u3905\u3906\u3907\u3908\u3909\u390a\u390b\u390c\u390d\u390e\u390f\u3910\u3911\u3912\u3913\u3914\u3915\u3916\u3917\u3918\u3919\u391a\u391b\u391c\u391d\u391e\u391f\u3920\u3921\u3922\u3923\u3924\u3925\u3926\u3927\u3928\u3929\u392a\u392b\u392c\u392d\u392e\u392f\u3930\u3931\u3932\u3933\u3934\u3935\u3936\u3937\u3938\u3939\u393a\u393b\u393c\u393d\u393e\u393f\u3940\u3941\u3942\u3943\u3944\u3945\u3946\u3947\u3948\u3949\u394a\u394b\u394c\u394d\u394e\u394f\u3950\u3951\u3952\u3953\u3954\u3955\u3956\u3957\u3958\u3959\u395a\u395b\u395c\u395d\u395e\u395f\u3960\u3961\u3962\u3963\u3964\u3965\u3966\u3967\u3968\u3969\u396a\u396b\u396c\u396d\u396e\u396f\u3970\u3971\u3972\u3973\u3974\u3975\u3976\u3977\u3978\u3979\u397a\u397b\u397c\u397d\u397e\u397f\u3980\u3981\u3982\u3983\u3984\u3985\u3986\u3987\u3988\u3989\u398a\u398b\u398c\u398d\u398e\u398f\u3990\u3991\u3992\u3993\u3994\u3995\u3996\u3997\u3998\u3999\u399a\u399b\u399c\u399d\u399e\u399f\u39a0\u39a1\u39a2\u39a3\u39a4\u39a5\u39a6\u39a7\u39a8\u39a9\u39aa\u39ab\u39ac\u39ad\u39ae\u39af\u39b0\u39b1\u39b2\u39b3\u39b4\u39b5\u39b6\u39b7\u39b8\u39b9\u39ba\u39bb\u39bc\u39bd\u39be\u39bf\u39c0\u39c1\u39c2\u39c3\u39c4\u39c5\u39c6\u39c7\u39c8\u39c9\u39ca\u39cb\u39cc\u39cd\u39ce\u39cf\u39d0\u39d1\u39d2\u39d3\u39d4\u39d5\u39d6\u39d7\u39d8\u39d9\u39da\u39db\u39dc\u39dd\u39de\u39df\u39e0\u39e1\u39e2\u39e3\u39e4\u39e5\u39e6\u39e7\u39e8\u39e9\u39ea\u39eb\u39ec\u39ed\u39ee\u39ef\u39f0\u39f1\u39f2\u39f3\u39f4\u39f5\u39f6\u39f7\u39f8\u39f9\u39fa\u39fb\u39fc\u39fd\u39fe\u39ff\u3a00\u3a01\u3a02\u3a03\u3a04\u3a05\u3a06\u3a07\u3a08\u3a09\u3a0a\u3a0b\u3a0c\u3a0d\u3a0e\u3a0f\u3a10\u3a11\u3a12\u3a13\u3a14\u3a15\u3a16\u3a17\u3a18\u3a19\u3a1a\u3a1b\u3a1c\u3a1d\u3a1e\u3a1f\u3a20\u3a21\u3a22\u3a23\u3a24\u3a25\u3a26\u3a27\u3a28\u3a29\u3a2a\u3a2b\u3a2c\u3a2d\u3a2e\u3a2f\u3a30\u3a31\u3a32\u3a33\u3a34\u3a35\u3a36\u3a37\u3a38\u3a39\u3a3a\u3a3b\u3a3c\u3a3d\u3a3e\u3a3f\u3a40\u3a41\u3a42\u3a43\u3a44\u3a45\u3a46\u3a47\u3a48\u3a49\u3a4a\u3a4b\u3a4c\u3a4d\u3a4e\u3a4f\u3a50\u3a51\u3a52\u3a53\u3a54\u3a55\u3a56\u3a57\u3a58\u3a59\u3a5a\u3a5b\u3a5c\u3a5d\u3a5e\u3a5f\u3a60\u3a61\u3a62\u3a63\u3a64\u3a65\u3a66\u3a67\u3a68\u3a69\u3a6a\u3a6b\u3a6c\u3a6d\u3a6e\u3a6f\u3a70\u3a71\u3a72\u3a73\u3a74\u3a75\u3a76\u3a77\u3a78\u3a79\u3a7a\u3a7b\u3a7c\u3a7d\u3a7e\u3a7f\u3a80\u3a81\u3a82\u3a83\u3a84\u3a85\u3a86\u3a87\u3a88\u3a89\u3a8a\u3a8b\u3a8c\u3a8d\u3a8e\u3a8f\u3a90\u3a91\u3a92\u3a93\u3a94\u3a95\u3a96\u3a97\u3a98\u3a99\u3a9a\u3a9b\u3a9c\u3a9d\u3a9e\u3a9f\u3aa0\u3aa1\u3aa2\u3aa3\u3aa4\u3aa5\u3aa6\u3aa7\u3aa8\u3aa9\u3aaa\u3aab\u3aac\u3aad\u3aae\u3aaf\u3ab0\u3ab1\u3ab2\u3ab3\u3ab4\u3ab5\u3ab6\u3ab7\u3ab8\u3ab9\u3aba\u3abb\u3abc\u3abd\u3abe\u3abf\u3ac0\u3ac1\u3ac2\u3ac3\u3ac4\u3ac5\u3ac6\u3ac7\u3ac8\u3ac9\u3aca\u3acb\u3acc\u3acd\u3ace\u3acf\u3ad0\u3ad1\u3ad2\u3ad3\u3ad4\u3ad5\u3ad6\u3ad7\u3ad8\u3ad9\u3ada\u3adb\u3adc\u3add\u3ade\u3adf\u3ae0\u3ae1\u3ae2\u3ae3\u3ae4\u3ae5\u3ae6\u3ae7\u3ae8\u3ae9\u3aea\u3aeb\u3aec\u3aed\u3aee\u3aef\u3af0\u3af1\u3af2\u3af3\u3af4\u3af5\u3af6\u3af7\u3af8\u3af9\u3afa\u3afb\u3afc\u3afd\u3afe\u3aff\u3b00\u3b01\u3b02\u3b03\u3b04\u3b05\u3b06\u3b07\u3b08\u3b09\u3b0a\u3b0b\u3b0c\u3b0d\u3b0e\u3b0f\u3b10\u3b11\u3b12\u3b13\u3b14\u3b15\u3b16\u3b17\u3b18\u3b19\u3b1a\u3b1b\u3b1c\u3b1d\u3b1e\u3b1f\u3b20\u3b21\u3b22\u3b23\u3b24\u3b25\u3b26\u3b27\u3b28\u3b29\u3b2a\u3b2b\u3b2c\u3b2d\u3b2e\u3b2f\u3b30\u3b31\u3b32\u3b33\u3b34\u3b35\u3b36\u3b37\u3b38\u3b39\u3b3a\u3b3b\u3b3c\u3b3d\u3b3e\u3b3f\u3b40\u3b41\u3b42\u3b43\u3b44\u3b45\u3b46\u3b47\u3b48\u3b49\u3b4a\u3b4b\u3b4c\u3b4d\u3b4e\u3b4f\u3b50\u3b51\u3b52\u3b53\u3b54\u3b55\u3b56\u3b57\u3b58\u3b59\u3b5a\u3b5b\u3b5c\u3b5d\u3b5e\u3b5f\u3b60\u3b61\u3b62\u3b63\u3b64\u3b65\u3b66\u3b67\u3b68\u3b69\u3b6a\u3b6b\u3b6c\u3b6d\u3b6e\u3b6f\u3b70\u3b71\u3b72\u3b73\u3b74\u3b75\u3b76\u3b77\u3b78\u3b79\u3b7a\u3b7b\u3b7c\u3b7d\u3b7e\u3b7f\u3b80\u3b81\u3b82\u3b83\u3b84\u3b85\u3b86\u3b87\u3b88\u3b89\u3b8a\u3b8b\u3b8c\u3b8d\u3b8e\u3b8f\u3b90\u3b91\u3b92\u3b93\u3b94\u3b95\u3b96\u3b97\u3b98\u3b99\u3b9a\u3b9b\u3b9c\u3b9d\u3b9e\u3b9f\u3ba0\u3ba1\u3ba2\u3ba3\u3ba4\u3ba5\u3ba6\u3ba7\u3ba8\u3ba9\u3baa\u3bab\u3bac\u3bad\u3bae\u3baf\u3bb0\u3bb1\u3bb2\u3bb3\u3bb4\u3bb5\u3bb6\u3bb7\u3bb8\u3bb9\u3bba\u3bbb\u3bbc\u3bbd\u3bbe\u3bbf\u3bc0\u3bc1\u3bc2\u3bc3\u3bc4\u3bc5\u3bc6\u3bc7\u3bc8\u3bc9\u3bca\u3bcb\u3bcc\u3bcd\u3bce\u3bcf\u3bd0\u3bd1\u3bd2\u3bd3\u3bd4\u3bd5\u3bd6\u3bd7\u3bd8\u3bd9\u3bda\u3bdb\u3bdc\u3bdd\u3bde\u3bdf\u3be0\u3be1\u3be2\u3be3\u3be4\u3be5\u3be6\u3be7\u3be8\u3be9\u3bea\u3beb\u3bec\u3bed\u3bee\u3bef\u3bf0\u3bf1\u3bf2\u3bf3\u3bf4\u3bf5\u3bf6\u3bf7\u3bf8\u3bf9\u3bfa\u3bfb\u3bfc\u3bfd\u3bfe\u3bff\u3c00\u3c01\u3c02\u3c03\u3c04\u3c05\u3c06\u3c07\u3c08\u3c09\u3c0a\u3c0b\u3c0c\u3c0d\u3c0e\u3c0f\u3c10\u3c11\u3c12\u3c13\u3c14\u3c15\u3c16\u3c17\u3c18\u3c19\u3c1a\u3c1b\u3c1c\u3c1d\u3c1e\u3c1f\u3c20\u3c21\u3c22\u3c23\u3c24\u3c25\u3c26\u3c27\u3c28\u3c29\u3c2a\u3c2b\u3c2c\u3c2d\u3c2e\u3c2f\u3c30\u3c31\u3c32\u3c33\u3c34\u3c35\u3c36\u3c37\u3c38\u3c39\u3c3a\u3c3b\u3c3c\u3c3d\u3c3e\u3c3f\u3c40\u3c41\u3c42\u3c43\u3c44\u3c45\u3c46\u3c47\u3c48\u3c49\u3c4a\u3c4b\u3c4c\u3c4d\u3c4e\u3c4f\u3c50\u3c51\u3c52\u3c53\u3c54\u3c55\u3c56\u3c57\u3c58\u3c59\u3c5a\u3c5b\u3c5c\u3c5d\u3c5e\u3c5f\u3c60\u3c61\u3c62\u3c63\u3c64\u3c65\u3c66\u3c67\u3c68\u3c69\u3c6a\u3c6b\u3c6c\u3c6d\u3c6e\u3c6f\u3c70\u3c71\u3c72\u3c73\u3c74\u3c75\u3c76\u3c77\u3c78\u3c79\u3c7a\u3c7b\u3c7c\u3c7d\u3c7e\u3c7f\u3c80\u3c81\u3c82\u3c83\u3c84\u3c85\u3c86\u3c87\u3c88\u3c89\u3c8a\u3c8b\u3c8c\u3c8d\u3c8e\u3c8f\u3c90\u3c91\u3c92\u3c93\u3c94\u3c95\u3c96\u3c97\u3c98\u3c99\u3c9a\u3c9b\u3c9c\u3c9d\u3c9e\u3c9f\u3ca0\u3ca1\u3ca2\u3ca3\u3ca4\u3ca5\u3ca6\u3ca7\u3ca8\u3ca9\u3caa\u3cab\u3cac\u3cad\u3cae\u3caf\u3cb0\u3cb1\u3cb2\u3cb3\u3cb4\u3cb5\u3cb6\u3cb7\u3cb8\u3cb9\u3cba\u3cbb\u3cbc\u3cbd\u3cbe\u3cbf\u3cc0\u3cc1\u3cc2\u3cc3\u3cc4\u3cc5\u3cc6\u3cc7\u3cc8\u3cc9\u3cca\u3ccb\u3ccc\u3ccd\u3cce\u3ccf\u3cd0\u3cd1\u3cd2\u3cd3\u3cd4\u3cd5\u3cd6\u3cd7\u3cd8\u3cd9\u3cda\u3cdb\u3cdc\u3cdd\u3cde\u3cdf\u3ce0\u3ce1\u3ce2\u3ce3\u3ce4\u3ce5\u3ce6\u3ce7\u3ce8\u3ce9\u3cea\u3ceb\u3cec\u3ced\u3cee\u3cef\u3cf0\u3cf1\u3cf2\u3cf3\u3cf4\u3cf5\u3cf6\u3cf7\u3cf8\u3cf9\u3cfa\u3cfb\u3cfc\u3cfd\u3cfe\u3cff\u3d00\u3d01\u3d02\u3d03\u3d04\u3d05\u3d06\u3d07\u3d08\u3d09\u3d0a\u3d0b\u3d0c\u3d0d\u3d0e\u3d0f\u3d10\u3d11\u3d12\u3d13\u3d14\u3d15\u3d16\u3d17\u3d18\u3d19\u3d1a\u3d1b\u3d1c\u3d1d\u3d1e\u3d1f\u3d20\u3d21\u3d22\u3d23\u3d24\u3d25\u3d26\u3d27\u3d28\u3d29\u3d2a\u3d2b\u3d2c\u3d2d\u3d2e\u3d2f\u3d30\u3d31\u3d32\u3d33\u3d34\u3d35\u3d36\u3d37\u3d38\u3d39\u3d3a\u3d3b\u3d3c\u3d3d\u3d3e\u3d3f\u3d40\u3d41\u3d42\u3d43\u3d44\u3d45\u3d46\u3d47\u3d48\u3d49\u3d4a\u3d4b\u3d4c\u3d4d\u3d4e\u3d4f\u3d50\u3d51\u3d52\u3d53\u3d54\u3d55\u3d56\u3d57\u3d58\u3d59\u3d5a\u3d5b\u3d5c\u3d5d\u3d5e\u3d5f\u3d60\u3d61\u3d62\u3d63\u3d64\u3d65\u3d66\u3d67\u3d68\u3d69\u3d6a\u3d6b\u3d6c\u3d6d\u3d6e\u3d6f\u3d70\u3d71\u3d72\u3d73\u3d74\u3d75\u3d76\u3d77\u3d78\u3d79\u3d7a\u3d7b\u3d7c\u3d7d\u3d7e\u3d7f\u3d80\u3d81\u3d82\u3d83\u3d84\u3d85\u3d86\u3d87\u3d88\u3d89\u3d8a\u3d8b\u3d8c\u3d8d\u3d8e\u3d8f\u3d90\u3d91\u3d92\u3d93\u3d94\u3d95\u3d96\u3d97\u3d98\u3d99\u3d9a\u3d9b\u3d9c\u3d9d\u3d9e\u3d9f\u3da0\u3da1\u3da2\u3da3\u3da4\u3da5\u3da6\u3da7\u3da8\u3da9\u3daa\u3dab\u3dac\u3dad\u3dae\u3daf\u3db0\u3db1\u3db2\u3db3\u3db4\u3db5\u3db6\u3db7\u3db8\u3db9\u3dba\u3dbb\u3dbc\u3dbd\u3dbe\u3dbf\u3dc0\u3dc1\u3dc2\u3dc3\u3dc4\u3dc5\u3dc6\u3dc7\u3dc8\u3dc9\u3dca\u3dcb\u3dcc\u3dcd\u3dce\u3dcf\u3dd0\u3dd1\u3dd2\u3dd3\u3dd4\u3dd5\u3dd6\u3dd7\u3dd8\u3dd9\u3dda\u3ddb\u3ddc\u3ddd\u3dde\u3ddf\u3de0\u3de1\u3de2\u3de3\u3de4\u3de5\u3de6\u3de7\u3de8\u3de9\u3dea\u3deb\u3dec\u3ded\u3dee\u3def\u3df0\u3df1\u3df2\u3df3\u3df4\u3df5\u3df6\u3df7\u3df8\u3df9\u3dfa\u3dfb\u3dfc\u3dfd\u3dfe\u3dff\u3e00\u3e01\u3e02\u3e03\u3e04\u3e05\u3e06\u3e07\u3e08\u3e09\u3e0a\u3e0b\u3e0c\u3e0d\u3e0e\u3e0f\u3e10\u3e11\u3e12\u3e13\u3e14\u3e15\u3e16\u3e17\u3e18\u3e19\u3e1a\u3e1b\u3e1c\u3e1d\u3e1e\u3e1f\u3e20\u3e21\u3e22\u3e23\u3e24\u3e25\u3e26\u3e27\u3e28\u3e29\u3e2a\u3e2b\u3e2c\u3e2d\u3e2e\u3e2f\u3e30\u3e31\u3e32\u3e33\u3e34\u3e35\u3e36\u3e37\u3e38\u3e39\u3e3a\u3e3b\u3e3c\u3e3d\u3e3e\u3e3f\u3e40\u3e41\u3e42\u3e43\u3e44\u3e45\u3e46\u3e47\u3e48\u3e49\u3e4a\u3e4b\u3e4c\u3e4d\u3e4e\u3e4f\u3e50\u3e51\u3e52\u3e53\u3e54\u3e55\u3e56\u3e57\u3e58\u3e59\u3e5a\u3e5b\u3e5c\u3e5d\u3e5e\u3e5f\u3e60\u3e61\u3e62\u3e63\u3e64\u3e65\u3e66\u3e67\u3e68\u3e69\u3e6a\u3e6b\u3e6c\u3e6d\u3e6e\u3e6f\u3e70\u3e71\u3e72\u3e73\u3e74\u3e75\u3e76\u3e77\u3e78\u3e79\u3e7a\u3e7b\u3e7c\u3e7d\u3e7e\u3e7f\u3e80\u3e81\u3e82\u3e83\u3e84\u3e85\u3e86\u3e87\u3e88\u3e89\u3e8a\u3e8b\u3e8c\u3e8d\u3e8e\u3e8f\u3e90\u3e91\u3e92\u3e93\u3e94\u3e95\u3e96\u3e97\u3e98\u3e99\u3e9a\u3e9b\u3e9c\u3e9d\u3e9e\u3e9f\u3ea0\u3ea1\u3ea2\u3ea3\u3ea4\u3ea5\u3ea6\u3ea7\u3ea8\u3ea9\u3eaa\u3eab\u3eac\u3ead\u3eae\u3eaf\u3eb0\u3eb1\u3eb2\u3eb3\u3eb4\u3eb5\u3eb6\u3eb7\u3eb8\u3eb9\u3eba\u3ebb\u3ebc\u3ebd\u3ebe\u3ebf\u3ec0\u3ec1\u3ec2\u3ec3\u3ec4\u3ec5\u3ec6\u3ec7\u3ec8\u3ec9\u3eca\u3ecb\u3ecc\u3ecd\u3ece\u3ecf\u3ed0\u3ed1\u3ed2\u3ed3\u3ed4\u3ed5\u3ed6\u3ed7\u3ed8\u3ed9\u3eda\u3edb\u3edc\u3edd\u3ede\u3edf\u3ee0\u3ee1\u3ee2\u3ee3\u3ee4\u3ee5\u3ee6\u3ee7\u3ee8\u3ee9\u3eea\u3eeb\u3eec\u3eed\u3eee\u3eef\u3ef0\u3ef1\u3ef2\u3ef3\u3ef4\u3ef5\u3ef6\u3ef7\u3ef8\u3ef9\u3efa\u3efb\u3efc\u3efd\u3efe\u3eff\u3f00\u3f01\u3f02\u3f03\u3f04\u3f05\u3f06\u3f07\u3f08\u3f09\u3f0a\u3f0b\u3f0c\u3f0d\u3f0e\u3f0f\u3f10\u3f11\u3f12\u3f13\u3f14\u3f15\u3f16\u3f17\u3f18\u3f19\u3f1a\u3f1b\u3f1c\u3f1d\u3f1e\u3f1f\u3f20\u3f21\u3f22\u3f23\u3f24\u3f25\u3f26\u3f27\u3f28\u3f29\u3f2a\u3f2b\u3f2c\u3f2d\u3f2e\u3f2f\u3f30\u3f31\u3f32\u3f33\u3f34\u3f35\u3f36\u3f37\u3f38\u3f39\u3f3a\u3f3b\u3f3c\u3f3d\u3f3e\u3f3f\u3f40\u3f41\u3f42\u3f43\u3f44\u3f45\u3f46\u3f47\u3f48\u3f49\u3f4a\u3f4b\u3f4c\u3f4d\u3f4e\u3f4f\u3f50\u3f51\u3f52\u3f53\u3f54\u3f55\u3f56\u3f57\u3f58\u3f59\u3f5a\u3f5b\u3f5c\u3f5d\u3f5e\u3f5f\u3f60\u3f61\u3f62\u3f63\u3f64\u3f65\u3f66\u3f67\u3f68\u3f69\u3f6a\u3f6b\u3f6c\u3f6d\u3f6e\u3f6f\u3f70\u3f71\u3f72\u3f73\u3f74\u3f75\u3f76\u3f77\u3f78\u3f79\u3f7a\u3f7b\u3f7c\u3f7d\u3f7e\u3f7f\u3f80\u3f81\u3f82\u3f83\u3f84\u3f85\u3f86\u3f87\u3f88\u3f89\u3f8a\u3f8b\u3f8c\u3f8d\u3f8e\u3f8f\u3f90\u3f91\u3f92\u3f93\u3f94\u3f95\u3f96\u3f97\u3f98\u3f99\u3f9a\u3f9b\u3f9c\u3f9d\u3f9e\u3f9f\u3fa0\u3fa1\u3fa2\u3fa3\u3fa4\u3fa5\u3fa6\u3fa7\u3fa8\u3fa9\u3faa\u3fab\u3fac\u3fad\u3fae\u3faf\u3fb0\u3fb1\u3fb2\u3fb3\u3fb4\u3fb5\u3fb6\u3fb7\u3fb8\u3fb9\u3fba\u3fbb\u3fbc\u3fbd\u3fbe\u3fbf\u3fc0\u3fc1\u3fc2\u3fc3\u3fc4\u3fc5\u3fc6\u3fc7\u3fc8\u3fc9\u3fca\u3fcb\u3fcc\u3fcd\u3fce\u3fcf\u3fd0\u3fd1\u3fd2\u3fd3\u3fd4\u3fd5\u3fd6\u3fd7\u3fd8\u3fd9\u3fda\u3fdb\u3fdc\u3fdd\u3fde\u3fdf\u3fe0\u3fe1\u3fe2\u3fe3\u3fe4\u3fe5\u3fe6\u3fe7\u3fe8\u3fe9\u3fea\u3feb\u3fec\u3fed\u3fee\u3fef\u3ff0\u3ff1\u3ff2\u3ff3\u3ff4\u3ff5\u3ff6\u3ff7\u3ff8\u3ff9\u3ffa\u3ffb\u3ffc\u3ffd\u3ffe\u3fff\u4000\u4001\u4002\u4003\u4004\u4005\u4006\u4007\u4008\u4009\u400a\u400b\u400c\u400d\u400e\u400f\u4010\u4011\u4012\u4013\u4014\u4015\u4016\u4017\u4018\u4019\u401a\u401b\u401c\u401d\u401e\u401f\u4020\u4021\u4022\u4023\u4024\u4025\u4026\u4027\u4028\u4029\u402a\u402b\u402c\u402d\u402e\u402f\u4030\u4031\u4032\u4033\u4034\u4035\u4036\u4037\u4038\u4039\u403a\u403b\u403c\u403d\u403e\u403f\u4040\u4041\u4042\u4043\u4044\u4045\u4046\u4047\u4048\u4049\u404a\u404b\u404c\u404d\u404e\u404f\u4050\u4051\u4052\u4053\u4054\u4055\u4056\u4057\u4058\u4059\u405a\u405b\u405c\u405d\u405e\u405f\u4060\u4061\u4062\u4063\u4064\u4065\u4066\u4067\u4068\u4069\u406a\u406b\u406c\u406d\u406e\u406f\u4070\u4071\u4072\u4073\u4074\u4075\u4076\u4077\u4078\u4079\u407a\u407b\u407c\u407d\u407e\u407f\u4080\u4081\u4082\u4083\u4084\u4085\u4086\u4087\u4088\u4089\u408a\u408b\u408c\u408d\u408e\u408f\u4090\u4091\u4092\u4093\u4094\u4095\u4096\u4097\u4098\u4099\u409a\u409b\u409c\u409d\u409e\u409f\u40a0\u40a1\u40a2\u40a3\u40a4\u40a5\u40a6\u40a7\u40a8\u40a9\u40aa\u40ab\u40ac\u40ad\u40ae\u40af\u40b0\u40b1\u40b2\u40b3\u40b4\u40b5\u40b6\u40b7\u40b8\u40b9\u40ba\u40bb\u40bc\u40bd\u40be\u40bf\u40c0\u40c1\u40c2\u40c3\u40c4\u40c5\u40c6\u40c7\u40c8\u40c9\u40ca\u40cb\u40cc\u40cd\u40ce\u40cf\u40d0\u40d1\u40d2\u40d3\u40d4\u40d5\u40d6\u40d7\u40d8\u40d9\u40da\u40db\u40dc\u40dd\u40de\u40df\u40e0\u40e1\u40e2\u40e3\u40e4\u40e5\u40e6\u40e7\u40e8\u40e9\u40ea\u40eb\u40ec\u40ed\u40ee\u40ef\u40f0\u40f1\u40f2\u40f3\u40f4\u40f5\u40f6\u40f7\u40f8\u40f9\u40fa\u40fb\u40fc\u40fd\u40fe\u40ff\u4100\u4101\u4102\u4103\u4104\u4105\u4106\u4107\u4108\u4109\u410a\u410b\u410c\u410d\u410e\u410f\u4110\u4111\u4112\u4113\u4114\u4115\u4116\u4117\u4118\u4119\u411a\u411b\u411c\u411d\u411e\u411f\u4120\u4121\u4122\u4123\u4124\u4125\u4126\u4127\u4128\u4129\u412a\u412b\u412c\u412d\u412e\u412f\u4130\u4131\u4132\u4133\u4134\u4135\u4136\u4137\u4138\u4139\u413a\u413b\u413c\u413d\u413e\u413f\u4140\u4141\u4142\u4143\u4144\u4145\u4146\u4147\u4148\u4149\u414a\u414b\u414c\u414d\u414e\u414f\u4150\u4151\u4152\u4153\u4154\u4155\u4156\u4157\u4158\u4159\u415a\u415b\u415c\u415d\u415e\u415f\u4160\u4161\u4162\u4163\u4164\u4165\u4166\u4167\u4168\u4169\u416a\u416b\u416c\u416d\u416e\u416f\u4170\u4171\u4172\u4173\u4174\u4175\u4176\u4177\u4178\u4179\u417a\u417b\u417c\u417d\u417e\u417f\u4180\u4181\u4182\u4183\u4184\u4185\u4186\u4187\u4188\u4189\u418a\u418b\u418c\u418d\u418e\u418f\u4190\u4191\u4192\u4193\u4194\u4195\u4196\u4197\u4198\u4199\u419a\u419b\u419c\u419d\u419e\u419f\u41a0\u41a1\u41a2\u41a3\u41a4\u41a5\u41a6\u41a7\u41a8\u41a9\u41aa\u41ab\u41ac\u41ad\u41ae\u41af\u41b0\u41b1\u41b2\u41b3\u41b4\u41b5\u41b6\u41b7\u41b8\u41b9\u41ba\u41bb\u41bc\u41bd\u41be\u41bf\u41c0\u41c1\u41c2\u41c3\u41c4\u41c5\u41c6\u41c7\u41c8\u41c9\u41ca\u41cb\u41cc\u41cd\u41ce\u41cf\u41d0\u41d1\u41d2\u41d3\u41d4\u41d5\u41d6\u41d7\u41d8\u41d9\u41da\u41db\u41dc\u41dd\u41de\u41df\u41e0\u41e1\u41e2\u41e3\u41e4\u41e5\u41e6\u41e7\u41e8\u41e9\u41ea\u41eb\u41ec\u41ed\u41ee\u41ef\u41f0\u41f1\u41f2\u41f3\u41f4\u41f5\u41f6\u41f7\u41f8\u41f9\u41fa\u41fb\u41fc\u41fd\u41fe\u41ff\u4200\u4201\u4202\u4203\u4204\u4205\u4206\u4207\u4208\u4209\u420a\u420b\u420c\u420d\u420e\u420f\u4210\u4211\u4212\u4213\u4214\u4215\u4216\u4217\u4218\u4219\u421a\u421b\u421c\u421d\u421e\u421f\u4220\u4221\u4222\u4223\u4224\u4225\u4226\u4227\u4228\u4229\u422a\u422b\u422c\u422d\u422e\u422f\u4230\u4231\u4232\u4233\u4234\u4235\u4236\u4237\u4238\u4239\u423a\u423b\u423c\u423d\u423e\u423f\u4240\u4241\u4242\u4243\u4244\u4245\u4246\u4247\u4248\u4249\u424a\u424b\u424c\u424d\u424e\u424f\u4250\u4251\u4252\u4253\u4254\u4255\u4256\u4257\u4258\u4259\u425a\u425b\u425c\u425d\u425e\u425f\u4260\u4261\u4262\u4263\u4264\u4265\u4266\u4267\u4268\u4269\u426a\u426b\u426c\u426d\u426e\u426f\u4270\u4271\u4272\u4273\u4274\u4275\u4276\u4277\u4278\u4279\u427a\u427b\u427c\u427d\u427e\u427f\u4280\u4281\u4282\u4283\u4284\u4285\u4286\u4287\u4288\u4289\u428a\u428b\u428c\u428d\u428e\u428f\u4290\u4291\u4292\u4293\u4294\u4295\u4296\u4297\u4298\u4299\u429a\u429b\u429c\u429d\u429e\u429f\u42a0\u42a1\u42a2\u42a3\u42a4\u42a5\u42a6\u42a7\u42a8\u42a9\u42aa\u42ab\u42ac\u42ad\u42ae\u42af\u42b0\u42b1\u42b2\u42b3\u42b4\u42b5\u42b6\u42b7\u42b8\u42b9\u42ba\u42bb\u42bc\u42bd\u42be\u42bf\u42c0\u42c1\u42c2\u42c3\u42c4\u42c5\u42c6\u42c7\u42c8\u42c9\u42ca\u42cb\u42cc\u42cd\u42ce\u42cf\u42d0\u42d1\u42d2\u42d3\u42d4\u42d5\u42d6\u42d7\u42d8\u42d9\u42da\u42db\u42dc\u42dd\u42de\u42df\u42e0\u42e1\u42e2\u42e3\u42e4\u42e5\u42e6\u42e7\u42e8\u42e9\u42ea\u42eb\u42ec\u42ed\u42ee\u42ef\u42f0\u42f1\u42f2\u42f3\u42f4\u42f5\u42f6\u42f7\u42f8\u42f9\u42fa\u42fb\u42fc\u42fd\u42fe\u42ff\u4300\u4301\u4302\u4303\u4304\u4305\u4306\u4307\u4308\u4309\u430a\u430b\u430c\u430d\u430e\u430f\u4310\u4311\u4312\u4313\u4314\u4315\u4316\u4317\u4318\u4319\u431a\u431b\u431c\u431d\u431e\u431f\u4320\u4321\u4322\u4323\u4324\u4325\u4326\u4327\u4328\u4329\u432a\u432b\u432c\u432d\u432e\u432f\u4330\u4331\u4332\u4333\u4334\u4335\u4336\u4337\u4338\u4339\u433a\u433b\u433c\u433d\u433e\u433f\u4340\u4341\u4342\u4343\u4344\u4345\u4346\u4347\u4348\u4349\u434a\u434b\u434c\u434d\u434e\u434f\u4350\u4351\u4352\u4353\u4354\u4355\u4356\u4357\u4358\u4359\u435a\u435b\u435c\u435d\u435e\u435f\u4360\u4361\u4362\u4363\u4364\u4365\u4366\u4367\u4368\u4369\u436a\u436b\u436c\u436d\u436e\u436f\u4370\u4371\u4372\u4373\u4374\u4375\u4376\u4377\u4378\u4379\u437a\u437b\u437c\u437d\u437e\u437f\u4380\u4381\u4382\u4383\u4384\u4385\u4386\u4387\u4388\u4389\u438a\u438b\u438c\u438d\u438e\u438f\u4390\u4391\u4392\u4393\u4394\u4395\u4396\u4397\u4398\u4399\u439a\u439b\u439c\u439d\u439e\u439f\u43a0\u43a1\u43a2\u43a3\u43a4\u43a5\u43a6\u43a7\u43a8\u43a9\u43aa\u43ab\u43ac\u43ad\u43ae\u43af\u43b0\u43b1\u43b2\u43b3\u43b4\u43b5\u43b6\u43b7\u43b8\u43b9\u43ba\u43bb\u43bc\u43bd\u43be\u43bf\u43c0\u43c1\u43c2\u43c3\u43c4\u43c5\u43c6\u43c7\u43c8\u43c9\u43ca\u43cb\u43cc\u43cd\u43ce\u43cf\u43d0\u43d1\u43d2\u43d3\u43d4\u43d5\u43d6\u43d7\u43d8\u43d9\u43da\u43db\u43dc\u43dd\u43de\u43df\u43e0\u43e1\u43e2\u43e3\u43e4\u43e5\u43e6\u43e7\u43e8\u43e9\u43ea\u43eb\u43ec\u43ed\u43ee\u43ef\u43f0\u43f1\u43f2\u43f3\u43f4\u43f5\u43f6\u43f7\u43f8\u43f9\u43fa\u43fb\u43fc\u43fd\u43fe\u43ff\u4400\u4401\u4402\u4403\u4404\u4405\u4406\u4407\u4408\u4409\u440a\u440b\u440c\u440d\u440e\u440f\u4410\u4411\u4412\u4413\u4414\u4415\u4416\u4417\u4418\u4419\u441a\u441b\u441c\u441d\u441e\u441f\u4420\u4421\u4422\u4423\u4424\u4425\u4426\u4427\u4428\u4429\u442a\u442b\u442c\u442d\u442e\u442f\u4430\u4431\u4432\u4433\u4434\u4435\u4436\u4437\u4438\u4439\u443a\u443b\u443c\u443d\u443e\u443f\u4440\u4441\u4442\u4443\u4444\u4445\u4446\u4447\u4448\u4449\u444a\u444b\u444c\u444d\u444e\u444f\u4450\u4451\u4452\u4453\u4454\u4455\u4456\u4457\u4458\u4459\u445a\u445b\u445c\u445d\u445e\u445f\u4460\u4461\u4462\u4463\u4464\u4465\u4466\u4467\u4468\u4469\u446a\u446b\u446c\u446d\u446e\u446f\u4470\u4471\u4472\u4473\u4474\u4475\u4476\u4477\u4478\u4479\u447a\u447b\u447c\u447d\u447e\u447f\u4480\u4481\u4482\u4483\u4484\u4485\u4486\u4487\u4488\u4489\u448a\u448b\u448c\u448d\u448e\u448f\u4490\u4491\u4492\u4493\u4494\u4495\u4496\u4497\u4498\u4499\u449a\u449b\u449c\u449d\u449e\u449f\u44a0\u44a1\u44a2\u44a3\u44a4\u44a5\u44a6\u44a7\u44a8\u44a9\u44aa\u44ab\u44ac\u44ad\u44ae\u44af\u44b0\u44b1\u44b2\u44b3\u44b4\u44b5\u44b6\u44b7\u44b8\u44b9\u44ba\u44bb\u44bc\u44bd\u44be\u44bf\u44c0\u44c1\u44c2\u44c3\u44c4\u44c5\u44c6\u44c7\u44c8\u44c9\u44ca\u44cb\u44cc\u44cd\u44ce\u44cf\u44d0\u44d1\u44d2\u44d3\u44d4\u44d5\u44d6\u44d7\u44d8\u44d9\u44da\u44db\u44dc\u44dd\u44de\u44df\u44e0\u44e1\u44e2\u44e3\u44e4\u44e5\u44e6\u44e7\u44e8\u44e9\u44ea\u44eb\u44ec\u44ed\u44ee\u44ef\u44f0\u44f1\u44f2\u44f3\u44f4\u44f5\u44f6\u44f7\u44f8\u44f9\u44fa\u44fb\u44fc\u44fd\u44fe\u44ff\u4500\u4501\u4502\u4503\u4504\u4505\u4506\u4507\u4508\u4509\u450a\u450b\u450c\u450d\u450e\u450f\u4510\u4511\u4512\u4513\u4514\u4515\u4516\u4517\u4518\u4519\u451a\u451b\u451c\u451d\u451e\u451f\u4520\u4521\u4522\u4523\u4524\u4525\u4526\u4527\u4528\u4529\u452a\u452b\u452c\u452d\u452e\u452f\u4530\u4531\u4532\u4533\u4534\u4535\u4536\u4537\u4538\u4539\u453a\u453b\u453c\u453d\u453e\u453f\u4540\u4541\u4542\u4543\u4544\u4545\u4546\u4547\u4548\u4549\u454a\u454b\u454c\u454d\u454e\u454f\u4550\u4551\u4552\u4553\u4554\u4555\u4556\u4557\u4558\u4559\u455a\u455b\u455c\u455d\u455e\u455f\u4560\u4561\u4562\u4563\u4564\u4565\u4566\u4567\u4568\u4569\u456a\u456b\u456c\u456d\u456e\u456f\u4570\u4571\u4572\u4573\u4574\u4575\u4576\u4577\u4578\u4579\u457a\u457b\u457c\u457d\u457e\u457f\u4580\u4581\u4582\u4583\u4584\u4585\u4586\u4587\u4588\u4589\u458a\u458b\u458c\u458d\u458e\u458f\u4590\u4591\u4592\u4593\u4594\u4595\u4596\u4597\u4598\u4599\u459a\u459b\u459c\u459d\u459e\u459f\u45a0\u45a1\u45a2\u45a3\u45a4\u45a5\u45a6\u45a7\u45a8\u45a9\u45aa\u45ab\u45ac\u45ad\u45ae\u45af\u45b0\u45b1\u45b2\u45b3\u45b4\u45b5\u45b6\u45b7\u45b8\u45b9\u45ba\u45bb\u45bc\u45bd\u45be\u45bf\u45c0\u45c1\u45c2\u45c3\u45c4\u45c5\u45c6\u45c7\u45c8\u45c9\u45ca\u45cb\u45cc\u45cd\u45ce\u45cf\u45d0\u45d1\u45d2\u45d3\u45d4\u45d5\u45d6\u45d7\u45d8\u45d9\u45da\u45db\u45dc\u45dd\u45de\u45df\u45e0\u45e1\u45e2\u45e3\u45e4\u45e5\u45e6\u45e7\u45e8\u45e9\u45ea\u45eb\u45ec\u45ed\u45ee\u45ef\u45f0\u45f1\u45f2\u45f3\u45f4\u45f5\u45f6\u45f7\u45f8\u45f9\u45fa\u45fb\u45fc\u45fd\u45fe\u45ff\u4600\u4601\u4602\u4603\u4604\u4605\u4606\u4607\u4608\u4609\u460a\u460b\u460c\u460d\u460e\u460f\u4610\u4611\u4612\u4613\u4614\u4615\u4616\u4617\u4618\u4619\u461a\u461b\u461c\u461d\u461e\u461f\u4620\u4621\u4622\u4623\u4624\u4625\u4626\u4627\u4628\u4629\u462a\u462b\u462c\u462d\u462e\u462f\u4630\u4631\u4632\u4633\u4634\u4635\u4636\u4637\u4638\u4639\u463a\u463b\u463c\u463d\u463e\u463f\u4640\u4641\u4642\u4643\u4644\u4645\u4646\u4647\u4648\u4649\u464a\u464b\u464c\u464d\u464e\u464f\u4650\u4651\u4652\u4653\u4654\u4655\u4656\u4657\u4658\u4659\u465a\u465b\u465c\u465d\u465e\u465f\u4660\u4661\u4662\u4663\u4664\u4665\u4666\u4667\u4668\u4669\u466a\u466b\u466c\u466d\u466e\u466f\u4670\u4671\u4672\u4673\u4674\u4675\u4676\u4677\u4678\u4679\u467a\u467b\u467c\u467d\u467e\u467f\u4680\u4681\u4682\u4683\u4684\u4685\u4686\u4687\u4688\u4689\u468a\u468b\u468c\u468d\u468e\u468f\u4690\u4691\u4692\u4693\u4694\u4695\u4696\u4697\u4698\u4699\u469a\u469b\u469c\u469d\u469e\u469f\u46a0\u46a1\u46a2\u46a3\u46a4\u46a5\u46a6\u46a7\u46a8\u46a9\u46aa\u46ab\u46ac\u46ad\u46ae\u46af\u46b0\u46b1\u46b2\u46b3\u46b4\u46b5\u46b6\u46b7\u46b8\u46b9\u46ba\u46bb\u46bc\u46bd\u46be\u46bf\u46c0\u46c1\u46c2\u46c3\u46c4\u46c5\u46c6\u46c7\u46c8\u46c9\u46ca\u46cb\u46cc\u46cd\u46ce\u46cf\u46d0\u46d1\u46d2\u46d3\u46d4\u46d5\u46d6\u46d7\u46d8\u46d9\u46da\u46db\u46dc\u46dd\u46de\u46df\u46e0\u46e1\u46e2\u46e3\u46e4\u46e5\u46e6\u46e7\u46e8\u46e9\u46ea\u46eb\u46ec\u46ed\u46ee\u46ef\u46f0\u46f1\u46f2\u46f3\u46f4\u46f5\u46f6\u46f7\u46f8\u46f9\u46fa\u46fb\u46fc\u46fd\u46fe\u46ff\u4700\u4701\u4702\u4703\u4704\u4705\u4706\u4707\u4708\u4709\u470a\u470b\u470c\u470d\u470e\u470f\u4710\u4711\u4712\u4713\u4714\u4715\u4716\u4717\u4718\u4719\u471a\u471b\u471c\u471d\u471e\u471f\u4720\u4721\u4722\u4723\u4724\u4725\u4726\u4727\u4728\u4729\u472a\u472b\u472c\u472d\u472e\u472f\u4730\u4731\u4732\u4733\u4734\u4735\u4736\u4737\u4738\u4739\u473a\u473b\u473c\u473d\u473e\u473f\u4740\u4741\u4742\u4743\u4744\u4745\u4746\u4747\u4748\u4749\u474a\u474b\u474c\u474d\u474e\u474f\u4750\u4751\u4752\u4753\u4754\u4755\u4756\u4757\u4758\u4759\u475a\u475b\u475c\u475d\u475e\u475f\u4760\u4761\u4762\u4763\u4764\u4765\u4766\u4767\u4768\u4769\u476a\u476b\u476c\u476d\u476e\u476f\u4770\u4771\u4772\u4773\u4774\u4775\u4776\u4777\u4778\u4779\u477a\u477b\u477c\u477d\u477e\u477f\u4780\u4781\u4782\u4783\u4784\u4785\u4786\u4787\u4788\u4789\u478a\u478b\u478c\u478d\u478e\u478f\u4790\u4791\u4792\u4793\u4794\u4795\u4796\u4797\u4798\u4799\u479a\u479b\u479c\u479d\u479e\u479f\u47a0\u47a1\u47a2\u47a3\u47a4\u47a5\u47a6\u47a7\u47a8\u47a9\u47aa\u47ab\u47ac\u47ad\u47ae\u47af\u47b0\u47b1\u47b2\u47b3\u47b4\u47b5\u47b6\u47b7\u47b8\u47b9\u47ba\u47bb\u47bc\u47bd\u47be\u47bf\u47c0\u47c1\u47c2\u47c3\u47c4\u47c5\u47c6\u47c7\u47c8\u47c9\u47ca\u47cb\u47cc\u47cd\u47ce\u47cf\u47d0\u47d1\u47d2\u47d3\u47d4\u47d5\u47d6\u47d7\u47d8\u47d9\u47da\u47db\u47dc\u47dd\u47de\u47df\u47e0\u47e1\u47e2\u47e3\u47e4\u47e5\u47e6\u47e7\u47e8\u47e9\u47ea\u47eb\u47ec\u47ed\u47ee\u47ef\u47f0\u47f1\u47f2\u47f3\u47f4\u47f5\u47f6\u47f7\u47f8\u47f9\u47fa\u47fb\u47fc\u47fd\u47fe\u47ff\u4800\u4801\u4802\u4803\u4804\u4805\u4806\u4807\u4808\u4809\u480a\u480b\u480c\u480d\u480e\u480f\u4810\u4811\u4812\u4813\u4814\u4815\u4816\u4817\u4818\u4819\u481a\u481b\u481c\u481d\u481e\u481f\u4820\u4821\u4822\u4823\u4824\u4825\u4826\u4827\u4828\u4829\u482a\u482b\u482c\u482d\u482e\u482f\u4830\u4831\u4832\u4833\u4834\u4835\u4836\u4837\u4838\u4839\u483a\u483b\u483c\u483d\u483e\u483f\u4840\u4841\u4842\u4843\u4844\u4845\u4846\u4847\u4848\u4849\u484a\u484b\u484c\u484d\u484e\u484f\u4850\u4851\u4852\u4853\u4854\u4855\u4856\u4857\u4858\u4859\u485a\u485b\u485c\u485d\u485e\u485f\u4860\u4861\u4862\u4863\u4864\u4865\u4866\u4867\u4868\u4869\u486a\u486b\u486c\u486d\u486e\u486f\u4870\u4871\u4872\u4873\u4874\u4875\u4876\u4877\u4878\u4879\u487a\u487b\u487c\u487d\u487e\u487f\u4880\u4881\u4882\u4883\u4884\u4885\u4886\u4887\u4888\u4889\u488a\u488b\u488c\u488d\u488e\u488f\u4890\u4891\u4892\u4893\u4894\u4895\u4896\u4897\u4898\u4899\u489a\u489b\u489c\u489d\u489e\u489f\u48a0\u48a1\u48a2\u48a3\u48a4\u48a5\u48a6\u48a7\u48a8\u48a9\u48aa\u48ab\u48ac\u48ad\u48ae\u48af\u48b0\u48b1\u48b2\u48b3\u48b4\u48b5\u48b6\u48b7\u48b8\u48b9\u48ba\u48bb\u48bc\u48bd\u48be\u48bf\u48c0\u48c1\u48c2\u48c3\u48c4\u48c5\u48c6\u48c7\u48c8\u48c9\u48ca\u48cb\u48cc\u48cd\u48ce\u48cf\u48d0\u48d1\u48d2\u48d3\u48d4\u48d5\u48d6\u48d7\u48d8\u48d9\u48da\u48db\u48dc\u48dd\u48de\u48df\u48e0\u48e1\u48e2\u48e3\u48e4\u48e5\u48e6\u48e7\u48e8\u48e9\u48ea\u48eb\u48ec\u48ed\u48ee\u48ef\u48f0\u48f1\u48f2\u48f3\u48f4\u48f5\u48f6\u48f7\u48f8\u48f9\u48fa\u48fb\u48fc\u48fd\u48fe\u48ff\u4900\u4901\u4902\u4903\u4904\u4905\u4906\u4907\u4908\u4909\u490a\u490b\u490c\u490d\u490e\u490f\u4910\u4911\u4912\u4913\u4914\u4915\u4916\u4917\u4918\u4919\u491a\u491b\u491c\u491d\u491e\u491f\u4920\u4921\u4922\u4923\u4924\u4925\u4926\u4927\u4928\u4929\u492a\u492b\u492c\u492d\u492e\u492f\u4930\u4931\u4932\u4933\u4934\u4935\u4936\u4937\u4938\u4939\u493a\u493b\u493c\u493d\u493e\u493f\u4940\u4941\u4942\u4943\u4944\u4945\u4946\u4947\u4948\u4949\u494a\u494b\u494c\u494d\u494e\u494f\u4950\u4951\u4952\u4953\u4954\u4955\u4956\u4957\u4958\u4959\u495a\u495b\u495c\u495d\u495e\u495f\u4960\u4961\u4962\u4963\u4964\u4965\u4966\u4967\u4968\u4969\u496a\u496b\u496c\u496d\u496e\u496f\u4970\u4971\u4972\u4973\u4974\u4975\u4976\u4977\u4978\u4979\u497a\u497b\u497c\u497d\u497e\u497f\u4980\u4981\u4982\u4983\u4984\u4985\u4986\u4987\u4988\u4989\u498a\u498b\u498c\u498d\u498e\u498f\u4990\u4991\u4992\u4993\u4994\u4995\u4996\u4997\u4998\u4999\u499a\u499b\u499c\u499d\u499e\u499f\u49a0\u49a1\u49a2\u49a3\u49a4\u49a5\u49a6\u49a7\u49a8\u49a9\u49aa\u49ab\u49ac\u49ad\u49ae\u49af\u49b0\u49b1\u49b2\u49b3\u49b4\u49b5\u49b6\u49b7\u49b8\u49b9\u49ba\u49bb\u49bc\u49bd\u49be\u49bf\u49c0\u49c1\u49c2\u49c3\u49c4\u49c5\u49c6\u49c7\u49c8\u49c9\u49ca\u49cb\u49cc\u49cd\u49ce\u49cf\u49d0\u49d1\u49d2\u49d3\u49d4\u49d5\u49d6\u49d7\u49d8\u49d9\u49da\u49db\u49dc\u49dd\u49de\u49df\u49e0\u49e1\u49e2\u49e3\u49e4\u49e5\u49e6\u49e7\u49e8\u49e9\u49ea\u49eb\u49ec\u49ed\u49ee\u49ef\u49f0\u49f1\u49f2\u49f3\u49f4\u49f5\u49f6\u49f7\u49f8\u49f9\u49fa\u49fb\u49fc\u49fd\u49fe\u49ff\u4a00\u4a01\u4a02\u4a03\u4a04\u4a05\u4a06\u4a07\u4a08\u4a09\u4a0a\u4a0b\u4a0c\u4a0d\u4a0e\u4a0f\u4a10\u4a11\u4a12\u4a13\u4a14\u4a15\u4a16\u4a17\u4a18\u4a19\u4a1a\u4a1b\u4a1c\u4a1d\u4a1e\u4a1f\u4a20\u4a21\u4a22\u4a23\u4a24\u4a25\u4a26\u4a27\u4a28\u4a29\u4a2a\u4a2b\u4a2c\u4a2d\u4a2e\u4a2f\u4a30\u4a31\u4a32\u4a33\u4a34\u4a35\u4a36\u4a37\u4a38\u4a39\u4a3a\u4a3b\u4a3c\u4a3d\u4a3e\u4a3f\u4a40\u4a41\u4a42\u4a43\u4a44\u4a45\u4a46\u4a47\u4a48\u4a49\u4a4a\u4a4b\u4a4c\u4a4d\u4a4e\u4a4f\u4a50\u4a51\u4a52\u4a53\u4a54\u4a55\u4a56\u4a57\u4a58\u4a59\u4a5a\u4a5b\u4a5c\u4a5d\u4a5e\u4a5f\u4a60\u4a61\u4a62\u4a63\u4a64\u4a65\u4a66\u4a67\u4a68\u4a69\u4a6a\u4a6b\u4a6c\u4a6d\u4a6e\u4a6f\u4a70\u4a71\u4a72\u4a73\u4a74\u4a75\u4a76\u4a77\u4a78\u4a79\u4a7a\u4a7b\u4a7c\u4a7d\u4a7e\u4a7f\u4a80\u4a81\u4a82\u4a83\u4a84\u4a85\u4a86\u4a87\u4a88\u4a89\u4a8a\u4a8b\u4a8c\u4a8d\u4a8e\u4a8f\u4a90\u4a91\u4a92\u4a93\u4a94\u4a95\u4a96\u4a97\u4a98\u4a99\u4a9a\u4a9b\u4a9c\u4a9d\u4a9e\u4a9f\u4aa0\u4aa1\u4aa2\u4aa3\u4aa4\u4aa5\u4aa6\u4aa7\u4aa8\u4aa9\u4aaa\u4aab\u4aac\u4aad\u4aae\u4aaf\u4ab0\u4ab1\u4ab2\u4ab3\u4ab4\u4ab5\u4ab6\u4ab7\u4ab8\u4ab9\u4aba\u4abb\u4abc\u4abd\u4abe\u4abf\u4ac0\u4ac1\u4ac2\u4ac3\u4ac4\u4ac5\u4ac6\u4ac7\u4ac8\u4ac9\u4aca\u4acb\u4acc\u4acd\u4ace\u4acf\u4ad0\u4ad1\u4ad2\u4ad3\u4ad4\u4ad5\u4ad6\u4ad7\u4ad8\u4ad9\u4ada\u4adb\u4adc\u4add\u4ade\u4adf\u4ae0\u4ae1\u4ae2\u4ae3\u4ae4\u4ae5\u4ae6\u4ae7\u4ae8\u4ae9\u4aea\u4aeb\u4aec\u4aed\u4aee\u4aef\u4af0\u4af1\u4af2\u4af3\u4af4\u4af5\u4af6\u4af7\u4af8\u4af9\u4afa\u4afb\u4afc\u4afd\u4afe\u4aff\u4b00\u4b01\u4b02\u4b03\u4b04\u4b05\u4b06\u4b07\u4b08\u4b09\u4b0a\u4b0b\u4b0c\u4b0d\u4b0e\u4b0f\u4b10\u4b11\u4b12\u4b13\u4b14\u4b15\u4b16\u4b17\u4b18\u4b19\u4b1a\u4b1b\u4b1c\u4b1d\u4b1e\u4b1f\u4b20\u4b21\u4b22\u4b23\u4b24\u4b25\u4b26\u4b27\u4b28\u4b29\u4b2a\u4b2b\u4b2c\u4b2d\u4b2e\u4b2f\u4b30\u4b31\u4b32\u4b33\u4b34\u4b35\u4b36\u4b37\u4b38\u4b39\u4b3a\u4b3b\u4b3c\u4b3d\u4b3e\u4b3f\u4b40\u4b41\u4b42\u4b43\u4b44\u4b45\u4b46\u4b47\u4b48\u4b49\u4b4a\u4b4b\u4b4c\u4b4d\u4b4e\u4b4f\u4b50\u4b51\u4b52\u4b53\u4b54\u4b55\u4b56\u4b57\u4b58\u4b59\u4b5a\u4b5b\u4b5c\u4b5d\u4b5e\u4b5f\u4b60\u4b61\u4b62\u4b63\u4b64\u4b65\u4b66\u4b67\u4b68\u4b69\u4b6a\u4b6b\u4b6c\u4b6d\u4b6e\u4b6f\u4b70\u4b71\u4b72\u4b73\u4b74\u4b75\u4b76\u4b77\u4b78\u4b79\u4b7a\u4b7b\u4b7c\u4b7d\u4b7e\u4b7f\u4b80\u4b81\u4b82\u4b83\u4b84\u4b85\u4b86\u4b87\u4b88\u4b89\u4b8a\u4b8b\u4b8c\u4b8d\u4b8e\u4b8f\u4b90\u4b91\u4b92\u4b93\u4b94\u4b95\u4b96\u4b97\u4b98\u4b99\u4b9a\u4b9b\u4b9c\u4b9d\u4b9e\u4b9f\u4ba0\u4ba1\u4ba2\u4ba3\u4ba4\u4ba5\u4ba6\u4ba7\u4ba8\u4ba9\u4baa\u4bab\u4bac\u4bad\u4bae\u4baf\u4bb0\u4bb1\u4bb2\u4bb3\u4bb4\u4bb5\u4bb6\u4bb7\u4bb8\u4bb9\u4bba\u4bbb\u4bbc\u4bbd\u4bbe\u4bbf\u4bc0\u4bc1\u4bc2\u4bc3\u4bc4\u4bc5\u4bc6\u4bc7\u4bc8\u4bc9\u4bca\u4bcb\u4bcc\u4bcd\u4bce\u4bcf\u4bd0\u4bd1\u4bd2\u4bd3\u4bd4\u4bd5\u4bd6\u4bd7\u4bd8\u4bd9\u4bda\u4bdb\u4bdc\u4bdd\u4bde\u4bdf\u4be0\u4be1\u4be2\u4be3\u4be4\u4be5\u4be6\u4be7\u4be8\u4be9\u4bea\u4beb\u4bec\u4bed\u4bee\u4bef\u4bf0\u4bf1\u4bf2\u4bf3\u4bf4\u4bf5\u4bf6\u4bf7\u4bf8\u4bf9\u4bfa\u4bfb\u4bfc\u4bfd\u4bfe\u4bff\u4c00\u4c01\u4c02\u4c03\u4c04\u4c05\u4c06\u4c07\u4c08\u4c09\u4c0a\u4c0b\u4c0c\u4c0d\u4c0e\u4c0f\u4c10\u4c11\u4c12\u4c13\u4c14\u4c15\u4c16\u4c17\u4c18\u4c19\u4c1a\u4c1b\u4c1c\u4c1d\u4c1e\u4c1f\u4c20\u4c21\u4c22\u4c23\u4c24\u4c25\u4c26\u4c27\u4c28\u4c29\u4c2a\u4c2b\u4c2c\u4c2d\u4c2e\u4c2f\u4c30\u4c31\u4c32\u4c33\u4c34\u4c35\u4c36\u4c37\u4c38\u4c39\u4c3a\u4c3b\u4c3c\u4c3d\u4c3e\u4c3f\u4c40\u4c41\u4c42\u4c43\u4c44\u4c45\u4c46\u4c47\u4c48\u4c49\u4c4a\u4c4b\u4c4c\u4c4d\u4c4e\u4c4f\u4c50\u4c51\u4c52\u4c53\u4c54\u4c55\u4c56\u4c57\u4c58\u4c59\u4c5a\u4c5b\u4c5c\u4c5d\u4c5e\u4c5f\u4c60\u4c61\u4c62\u4c63\u4c64\u4c65\u4c66\u4c67\u4c68\u4c69\u4c6a\u4c6b\u4c6c\u4c6d\u4c6e\u4c6f\u4c70\u4c71\u4c72\u4c73\u4c74\u4c75\u4c76\u4c77\u4c78\u4c79\u4c7a\u4c7b\u4c7c\u4c7d\u4c7e\u4c7f\u4c80\u4c81\u4c82\u4c83\u4c84\u4c85\u4c86\u4c87\u4c88\u4c89\u4c8a\u4c8b\u4c8c\u4c8d\u4c8e\u4c8f\u4c90\u4c91\u4c92\u4c93\u4c94\u4c95\u4c96\u4c97\u4c98\u4c99\u4c9a\u4c9b\u4c9c\u4c9d\u4c9e\u4c9f\u4ca0\u4ca1\u4ca2\u4ca3\u4ca4\u4ca5\u4ca6\u4ca7\u4ca8\u4ca9\u4caa\u4cab\u4cac\u4cad\u4cae\u4caf\u4cb0\u4cb1\u4cb2\u4cb3\u4cb4\u4cb5\u4cb6\u4cb7\u4cb8\u4cb9\u4cba\u4cbb\u4cbc\u4cbd\u4cbe\u4cbf\u4cc0\u4cc1\u4cc2\u4cc3\u4cc4\u4cc5\u4cc6\u4cc7\u4cc8\u4cc9\u4cca\u4ccb\u4ccc\u4ccd\u4cce\u4ccf\u4cd0\u4cd1\u4cd2\u4cd3\u4cd4\u4cd5\u4cd6\u4cd7\u4cd8\u4cd9\u4cda\u4cdb\u4cdc\u4cdd\u4cde\u4cdf\u4ce0\u4ce1\u4ce2\u4ce3\u4ce4\u4ce5\u4ce6\u4ce7\u4ce8\u4ce9\u4cea\u4ceb\u4cec\u4ced\u4cee\u4cef\u4cf0\u4cf1\u4cf2\u4cf3\u4cf4\u4cf5\u4cf6\u4cf7\u4cf8\u4cf9\u4cfa\u4cfb\u4cfc\u4cfd\u4cfe\u4cff\u4d00\u4d01\u4d02\u4d03\u4d04\u4d05\u4d06\u4d07\u4d08\u4d09\u4d0a\u4d0b\u4d0c\u4d0d\u4d0e\u4d0f\u4d10\u4d11\u4d12\u4d13\u4d14\u4d15\u4d16\u4d17\u4d18\u4d19\u4d1a\u4d1b\u4d1c\u4d1d\u4d1e\u4d1f\u4d20\u4d21\u4d22\u4d23\u4d24\u4d25\u4d26\u4d27\u4d28\u4d29\u4d2a\u4d2b\u4d2c\u4d2d\u4d2e\u4d2f\u4d30\u4d31\u4d32\u4d33\u4d34\u4d35\u4d36\u4d37\u4d38\u4d39\u4d3a\u4d3b\u4d3c\u4d3d\u4d3e\u4d3f\u4d40\u4d41\u4d42\u4d43\u4d44\u4d45\u4d46\u4d47\u4d48\u4d49\u4d4a\u4d4b\u4d4c\u4d4d\u4d4e\u4d4f\u4d50\u4d51\u4d52\u4d53\u4d54\u4d55\u4d56\u4d57\u4d58\u4d59\u4d5a\u4d5b\u4d5c\u4d5d\u4d5e\u4d5f\u4d60\u4d61\u4d62\u4d63\u4d64\u4d65\u4d66\u4d67\u4d68\u4d69\u4d6a\u4d6b\u4d6c\u4d6d\u4d6e\u4d6f\u4d70\u4d71\u4d72\u4d73\u4d74\u4d75\u4d76\u4d77\u4d78\u4d79\u4d7a\u4d7b\u4d7c\u4d7d\u4d7e\u4d7f\u4d80\u4d81\u4d82\u4d83\u4d84\u4d85\u4d86\u4d87\u4d88\u4d89\u4d8a\u4d8b\u4d8c\u4d8d\u4d8e\u4d8f\u4d90\u4d91\u4d92\u4d93\u4d94\u4d95\u4d96\u4d97\u4d98\u4d99\u4d9a\u4d9b\u4d9c\u4d9d\u4d9e\u4d9f\u4da0\u4da1\u4da2\u4da3\u4da4\u4da5\u4da6\u4da7\u4da8\u4da9\u4daa\u4dab\u4dac\u4dad\u4dae\u4daf\u4db0\u4db1\u4db2\u4db3\u4db4\u4db5\u4e00\u4e01\u4e02\u4e03\u4e04\u4e05\u4e06\u4e07\u4e08\u4e09\u4e0a\u4e0b\u4e0c\u4e0d\u4e0e\u4e0f\u4e10\u4e11\u4e12\u4e13\u4e14\u4e15\u4e16\u4e17\u4e18\u4e19\u4e1a\u4e1b\u4e1c\u4e1d\u4e1e\u4e1f\u4e20\u4e21\u4e22\u4e23\u4e24\u4e25\u4e26\u4e27\u4e28\u4e29\u4e2a\u4e2b\u4e2c\u4e2d\u4e2e\u4e2f\u4e30\u4e31\u4e32\u4e33\u4e34\u4e35\u4e36\u4e37\u4e38\u4e39\u4e3a\u4e3b\u4e3c\u4e3d\u4e3e\u4e3f\u4e40\u4e41\u4e42\u4e43\u4e44\u4e45\u4e46\u4e47\u4e48\u4e49\u4e4a\u4e4b\u4e4c\u4e4d\u4e4e\u4e4f\u4e50\u4e51\u4e52\u4e53\u4e54\u4e55\u4e56\u4e57\u4e58\u4e59\u4e5a\u4e5b\u4e5c\u4e5d\u4e5e\u4e5f\u4e60\u4e61\u4e62\u4e63\u4e64\u4e65\u4e66\u4e67\u4e68\u4e69\u4e6a\u4e6b\u4e6c\u4e6d\u4e6e\u4e6f\u4e70\u4e71\u4e72\u4e73\u4e74\u4e75\u4e76\u4e77\u4e78\u4e79\u4e7a\u4e7b\u4e7c\u4e7d\u4e7e\u4e7f\u4e80\u4e81\u4e82\u4e83\u4e84\u4e85\u4e86\u4e87\u4e88\u4e89\u4e8a\u4e8b\u4e8c\u4e8d\u4e8e\u4e8f\u4e90\u4e91\u4e92\u4e93\u4e94\u4e95\u4e96\u4e97\u4e98\u4e99\u4e9a\u4e9b\u4e9c\u4e9d\u4e9e\u4e9f\u4ea0\u4ea1\u4ea2\u4ea3\u4ea4\u4ea5\u4ea6\u4ea7\u4ea8\u4ea9\u4eaa\u4eab\u4eac\u4ead\u4eae\u4eaf\u4eb0\u4eb1\u4eb2\u4eb3\u4eb4\u4eb5\u4eb6\u4eb7\u4eb8\u4eb9\u4eba\u4ebb\u4ebc\u4ebd\u4ebe\u4ebf\u4ec0\u4ec1\u4ec2\u4ec3\u4ec4\u4ec5\u4ec6\u4ec7\u4ec8\u4ec9\u4eca\u4ecb\u4ecc\u4ecd\u4ece\u4ecf\u4ed0\u4ed1\u4ed2\u4ed3\u4ed4\u4ed5\u4ed6\u4ed7\u4ed8\u4ed9\u4eda\u4edb\u4edc\u4edd\u4ede\u4edf\u4ee0\u4ee1\u4ee2\u4ee3\u4ee4\u4ee5\u4ee6\u4ee7\u4ee8\u4ee9\u4eea\u4eeb\u4eec\u4eed\u4eee\u4eef\u4ef0\u4ef1\u4ef2\u4ef3\u4ef4\u4ef5\u4ef6\u4ef7\u4ef8\u4ef9\u4efa\u4efb\u4efc\u4efd\u4efe\u4eff\u4f00\u4f01\u4f02\u4f03\u4f04\u4f05\u4f06\u4f07\u4f08\u4f09\u4f0a\u4f0b\u4f0c\u4f0d\u4f0e\u4f0f\u4f10\u4f11\u4f12\u4f13\u4f14\u4f15\u4f16\u4f17\u4f18\u4f19\u4f1a\u4f1b\u4f1c\u4f1d\u4f1e\u4f1f\u4f20\u4f21\u4f22\u4f23\u4f24\u4f25\u4f26\u4f27\u4f28\u4f29\u4f2a\u4f2b\u4f2c\u4f2d\u4f2e\u4f2f\u4f30\u4f31\u4f32\u4f33\u4f34\u4f35\u4f36\u4f37\u4f38\u4f39\u4f3a\u4f3b\u4f3c\u4f3d\u4f3e\u4f3f\u4f40\u4f41\u4f42\u4f43\u4f44\u4f45\u4f46\u4f47\u4f48\u4f49\u4f4a\u4f4b\u4f4c\u4f4d\u4f4e\u4f4f\u4f50\u4f51\u4f52\u4f53\u4f54\u4f55\u4f56\u4f57\u4f58\u4f59\u4f5a\u4f5b\u4f5c\u4f5d\u4f5e\u4f5f\u4f60\u4f61\u4f62\u4f63\u4f64\u4f65\u4f66\u4f67\u4f68\u4f69\u4f6a\u4f6b\u4f6c\u4f6d\u4f6e\u4f6f\u4f70\u4f71\u4f72\u4f73\u4f74\u4f75\u4f76\u4f77\u4f78\u4f79\u4f7a\u4f7b\u4f7c\u4f7d\u4f7e\u4f7f\u4f80\u4f81\u4f82\u4f83\u4f84\u4f85\u4f86\u4f87\u4f88\u4f89\u4f8a\u4f8b\u4f8c\u4f8d\u4f8e\u4f8f\u4f90\u4f91\u4f92\u4f93\u4f94\u4f95\u4f96\u4f97\u4f98\u4f99\u4f9a\u4f9b\u4f9c\u4f9d\u4f9e\u4f9f\u4fa0\u4fa1\u4fa2\u4fa3\u4fa4\u4fa5\u4fa6\u4fa7\u4fa8\u4fa9\u4faa\u4fab\u4fac\u4fad\u4fae\u4faf\u4fb0\u4fb1\u4fb2\u4fb3\u4fb4\u4fb5\u4fb6\u4fb7\u4fb8\u4fb9\u4fba\u4fbb\u4fbc\u4fbd\u4fbe\u4fbf\u4fc0\u4fc1\u4fc2\u4fc3\u4fc4\u4fc5\u4fc6\u4fc7\u4fc8\u4fc9\u4fca\u4fcb\u4fcc\u4fcd\u4fce\u4fcf\u4fd0\u4fd1\u4fd2\u4fd3\u4fd4\u4fd5\u4fd6\u4fd7\u4fd8\u4fd9\u4fda\u4fdb\u4fdc\u4fdd\u4fde\u4fdf\u4fe0\u4fe1\u4fe2\u4fe3\u4fe4\u4fe5\u4fe6\u4fe7\u4fe8\u4fe9\u4fea\u4feb\u4fec\u4fed\u4fee\u4fef\u4ff0\u4ff1\u4ff2\u4ff3\u4ff4\u4ff5\u4ff6\u4ff7\u4ff8\u4ff9\u4ffa\u4ffb\u4ffc\u4ffd\u4ffe\u4fff\u5000\u5001\u5002\u5003\u5004\u5005\u5006\u5007\u5008\u5009\u500a\u500b\u500c\u500d\u500e\u500f\u5010\u5011\u5012\u5013\u5014\u5015\u5016\u5017\u5018\u5019\u501a\u501b\u501c\u501d\u501e\u501f\u5020\u5021\u5022\u5023\u5024\u5025\u5026\u5027\u5028\u5029\u502a\u502b\u502c\u502d\u502e\u502f\u5030\u5031\u5032\u5033\u5034\u5035\u5036\u5037\u5038\u5039\u503a\u503b\u503c\u503d\u503e\u503f\u5040\u5041\u5042\u5043\u5044\u5045\u5046\u5047\u5048\u5049\u504a\u504b\u504c\u504d\u504e\u504f\u5050\u5051\u5052\u5053\u5054\u5055\u5056\u5057\u5058\u5059\u505a\u505b\u505c\u505d\u505e\u505f\u5060\u5061\u5062\u5063\u5064\u5065\u5066\u5067\u5068\u5069\u506a\u506b\u506c\u506d\u506e\u506f\u5070\u5071\u5072\u5073\u5074\u5075\u5076\u5077\u5078\u5079\u507a\u507b\u507c\u507d\u507e\u507f\u5080\u5081\u5082\u5083\u5084\u5085\u5086\u5087\u5088\u5089\u508a\u508b\u508c\u508d\u508e\u508f\u5090\u5091\u5092\u5093\u5094\u5095\u5096\u5097\u5098\u5099\u509a\u509b\u509c\u509d\u509e\u509f\u50a0\u50a1\u50a2\u50a3\u50a4\u50a5\u50a6\u50a7\u50a8\u50a9\u50aa\u50ab\u50ac\u50ad\u50ae\u50af\u50b0\u50b1\u50b2\u50b3\u50b4\u50b5\u50b6\u50b7\u50b8\u50b9\u50ba\u50bb\u50bc\u50bd\u50be\u50bf\u50c0\u50c1\u50c2\u50c3\u50c4\u50c5\u50c6\u50c7\u50c8\u50c9\u50ca\u50cb\u50cc\u50cd\u50ce\u50cf\u50d0\u50d1\u50d2\u50d3\u50d4\u50d5\u50d6\u50d7\u50d8\u50d9\u50da\u50db\u50dc\u50dd\u50de\u50df\u50e0\u50e1\u50e2\u50e3\u50e4\u50e5\u50e6\u50e7\u50e8\u50e9\u50ea\u50eb\u50ec\u50ed\u50ee\u50ef\u50f0\u50f1\u50f2\u50f3\u50f4\u50f5\u50f6\u50f7\u50f8\u50f9\u50fa\u50fb\u50fc\u50fd\u50fe\u50ff\u5100\u5101\u5102\u5103\u5104\u5105\u5106\u5107\u5108\u5109\u510a\u510b\u510c\u510d\u510e\u510f\u5110\u5111\u5112\u5113\u5114\u5115\u5116\u5117\u5118\u5119\u511a\u511b\u511c\u511d\u511e\u511f\u5120\u5121\u5122\u5123\u5124\u5125\u5126\u5127\u5128\u5129\u512a\u512b\u512c\u512d\u512e\u512f\u5130\u5131\u5132\u5133\u5134\u5135\u5136\u5137\u5138\u5139\u513a\u513b\u513c\u513d\u513e\u513f\u5140\u5141\u5142\u5143\u5144\u5145\u5146\u5147\u5148\u5149\u514a\u514b\u514c\u514d\u514e\u514f\u5150\u5151\u5152\u5153\u5154\u5155\u5156\u5157\u5158\u5159\u515a\u515b\u515c\u515d\u515e\u515f\u5160\u5161\u5162\u5163\u5164\u5165\u5166\u5167\u5168\u5169\u516a\u516b\u516c\u516d\u516e\u516f\u5170\u5171\u5172\u5173\u5174\u5175\u5176\u5177\u5178\u5179\u517a\u517b\u517c\u517d\u517e\u517f\u5180\u5181\u5182\u5183\u5184\u5185\u5186\u5187\u5188\u5189\u518a\u518b\u518c\u518d\u518e\u518f\u5190\u5191\u5192\u5193\u5194\u5195\u5196\u5197\u5198\u5199\u519a\u519b\u519c\u519d\u519e\u519f\u51a0\u51a1\u51a2\u51a3\u51a4\u51a5\u51a6\u51a7\u51a8\u51a9\u51aa\u51ab\u51ac\u51ad\u51ae\u51af\u51b0\u51b1\u51b2\u51b3\u51b4\u51b5\u51b6\u51b7\u51b8\u51b9\u51ba\u51bb\u51bc\u51bd\u51be\u51bf\u51c0\u51c1\u51c2\u51c3\u51c4\u51c5\u51c6\u51c7\u51c8\u51c9\u51ca\u51cb\u51cc\u51cd\u51ce\u51cf\u51d0\u51d1\u51d2\u51d3\u51d4\u51d5\u51d6\u51d7\u51d8\u51d9\u51da\u51db\u51dc\u51dd\u51de\u51df\u51e0\u51e1\u51e2\u51e3\u51e4\u51e5\u51e6\u51e7\u51e8\u51e9\u51ea\u51eb\u51ec\u51ed\u51ee\u51ef\u51f0\u51f1\u51f2\u51f3\u51f4\u51f5\u51f6\u51f7\u51f8\u51f9\u51fa\u51fb\u51fc\u51fd\u51fe\u51ff\u5200\u5201\u5202\u5203\u5204\u5205\u5206\u5207\u5208\u5209\u520a\u520b\u520c\u520d\u520e\u520f\u5210\u5211\u5212\u5213\u5214\u5215\u5216\u5217\u5218\u5219\u521a\u521b\u521c\u521d\u521e\u521f\u5220\u5221\u5222\u5223\u5224\u5225\u5226\u5227\u5228\u5229\u522a\u522b\u522c\u522d\u522e\u522f\u5230\u5231\u5232\u5233\u5234\u5235\u5236\u5237\u5238\u5239\u523a\u523b\u523c\u523d\u523e\u523f\u5240\u5241\u5242\u5243\u5244\u5245\u5246\u5247\u5248\u5249\u524a\u524b\u524c\u524d\u524e\u524f\u5250\u5251\u5252\u5253\u5254\u5255\u5256\u5257\u5258\u5259\u525a\u525b\u525c\u525d\u525e\u525f\u5260\u5261\u5262\u5263\u5264\u5265\u5266\u5267\u5268\u5269\u526a\u526b\u526c\u526d\u526e\u526f\u5270\u5271\u5272\u5273\u5274\u5275\u5276\u5277\u5278\u5279\u527a\u527b\u527c\u527d\u527e\u527f\u5280\u5281\u5282\u5283\u5284\u5285\u5286\u5287\u5288\u5289\u528a\u528b\u528c\u528d\u528e\u528f\u5290\u5291\u5292\u5293\u5294\u5295\u5296\u5297\u5298\u5299\u529a\u529b\u529c\u529d\u529e\u529f\u52a0\u52a1\u52a2\u52a3\u52a4\u52a5\u52a6\u52a7\u52a8\u52a9\u52aa\u52ab\u52ac\u52ad\u52ae\u52af\u52b0\u52b1\u52b2\u52b3\u52b4\u52b5\u52b6\u52b7\u52b8\u52b9\u52ba\u52bb\u52bc\u52bd\u52be\u52bf\u52c0\u52c1\u52c2\u52c3\u52c4\u52c5\u52c6\u52c7\u52c8\u52c9\u52ca\u52cb\u52cc\u52cd\u52ce\u52cf\u52d0\u52d1\u52d2\u52d3\u52d4\u52d5\u52d6\u52d7\u52d8\u52d9\u52da\u52db\u52dc\u52dd\u52de\u52df\u52e0\u52e1\u52e2\u52e3\u52e4\u52e5\u52e6\u52e7\u52e8\u52e9\u52ea\u52eb\u52ec\u52ed\u52ee\u52ef\u52f0\u52f1\u52f2\u52f3\u52f4\u52f5\u52f6\u52f7\u52f8\u52f9\u52fa\u52fb\u52fc\u52fd\u52fe\u52ff\u5300\u5301\u5302\u5303\u5304\u5305\u5306\u5307\u5308\u5309\u530a\u530b\u530c\u530d\u530e\u530f\u5310\u5311\u5312\u5313\u5314\u5315\u5316\u5317\u5318\u5319\u531a\u531b\u531c\u531d\u531e\u531f\u5320\u5321\u5322\u5323\u5324\u5325\u5326\u5327\u5328\u5329\u532a\u532b\u532c\u532d\u532e\u532f\u5330\u5331\u5332\u5333\u5334\u5335\u5336\u5337\u5338\u5339\u533a\u533b\u533c\u533d\u533e\u533f\u5340\u5341\u5342\u5343\u5344\u5345\u5346\u5347\u5348\u5349\u534a\u534b\u534c\u534d\u534e\u534f\u5350\u5351\u5352\u5353\u5354\u5355\u5356\u5357\u5358\u5359\u535a\u535b\u535c\u535d\u535e\u535f\u5360\u5361\u5362\u5363\u5364\u5365\u5366\u5367\u5368\u5369\u536a\u536b\u536c\u536d\u536e\u536f\u5370\u5371\u5372\u5373\u5374\u5375\u5376\u5377\u5378\u5379\u537a\u537b\u537c\u537d\u537e\u537f\u5380\u5381\u5382\u5383\u5384\u5385\u5386\u5387\u5388\u5389\u538a\u538b\u538c\u538d\u538e\u538f\u5390\u5391\u5392\u5393\u5394\u5395\u5396\u5397\u5398\u5399\u539a\u539b\u539c\u539d\u539e\u539f\u53a0\u53a1\u53a2\u53a3\u53a4\u53a5\u53a6\u53a7\u53a8\u53a9\u53aa\u53ab\u53ac\u53ad\u53ae\u53af\u53b0\u53b1\u53b2\u53b3\u53b4\u53b5\u53b6\u53b7\u53b8\u53b9\u53ba\u53bb\u53bc\u53bd\u53be\u53bf\u53c0\u53c1\u53c2\u53c3\u53c4\u53c5\u53c6\u53c7\u53c8\u53c9\u53ca\u53cb\u53cc\u53cd\u53ce\u53cf\u53d0\u53d1\u53d2\u53d3\u53d4\u53d5\u53d6\u53d7\u53d8\u53d9\u53da\u53db\u53dc\u53dd\u53de\u53df\u53e0\u53e1\u53e2\u53e3\u53e4\u53e5\u53e6\u53e7\u53e8\u53e9\u53ea\u53eb\u53ec\u53ed\u53ee\u53ef\u53f0\u53f1\u53f2\u53f3\u53f4\u53f5\u53f6\u53f7\u53f8\u53f9\u53fa\u53fb\u53fc\u53fd\u53fe\u53ff\u5400\u5401\u5402\u5403\u5404\u5405\u5406\u5407\u5408\u5409\u540a\u540b\u540c\u540d\u540e\u540f\u5410\u5411\u5412\u5413\u5414\u5415\u5416\u5417\u5418\u5419\u541a\u541b\u541c\u541d\u541e\u541f\u5420\u5421\u5422\u5423\u5424\u5425\u5426\u5427\u5428\u5429\u542a\u542b\u542c\u542d\u542e\u542f\u5430\u5431\u5432\u5433\u5434\u5435\u5436\u5437\u5438\u5439\u543a\u543b\u543c\u543d\u543e\u543f\u5440\u5441\u5442\u5443\u5444\u5445\u5446\u5447\u5448\u5449\u544a\u544b\u544c\u544d\u544e\u544f\u5450\u5451\u5452\u5453\u5454\u5455\u5456\u5457\u5458\u5459\u545a\u545b\u545c\u545d\u545e\u545f\u5460\u5461\u5462\u5463\u5464\u5465\u5466\u5467\u5468\u5469\u546a\u546b\u546c\u546d\u546e\u546f\u5470\u5471\u5472\u5473\u5474\u5475\u5476\u5477\u5478\u5479\u547a\u547b\u547c\u547d\u547e\u547f\u5480\u5481\u5482\u5483\u5484\u5485\u5486\u5487\u5488\u5489\u548a\u548b\u548c\u548d\u548e\u548f\u5490\u5491\u5492\u5493\u5494\u5495\u5496\u5497\u5498\u5499\u549a\u549b\u549c\u549d\u549e\u549f\u54a0\u54a1\u54a2\u54a3\u54a4\u54a5\u54a6\u54a7\u54a8\u54a9\u54aa\u54ab\u54ac\u54ad\u54ae\u54af\u54b0\u54b1\u54b2\u54b3\u54b4\u54b5\u54b6\u54b7\u54b8\u54b9\u54ba\u54bb\u54bc\u54bd\u54be\u54bf\u54c0\u54c1\u54c2\u54c3\u54c4\u54c5\u54c6\u54c7\u54c8\u54c9\u54ca\u54cb\u54cc\u54cd\u54ce\u54cf\u54d0\u54d1\u54d2\u54d3\u54d4\u54d5\u54d6\u54d7\u54d8\u54d9\u54da\u54db\u54dc\u54dd\u54de\u54df\u54e0\u54e1\u54e2\u54e3\u54e4\u54e5\u54e6\u54e7\u54e8\u54e9\u54ea\u54eb\u54ec\u54ed\u54ee\u54ef\u54f0\u54f1\u54f2\u54f3\u54f4\u54f5\u54f6\u54f7\u54f8\u54f9\u54fa\u54fb\u54fc\u54fd\u54fe\u54ff\u5500\u5501\u5502\u5503\u5504\u5505\u5506\u5507\u5508\u5509\u550a\u550b\u550c\u550d\u550e\u550f\u5510\u5511\u5512\u5513\u5514\u5515\u5516\u5517\u5518\u5519\u551a\u551b\u551c\u551d\u551e\u551f\u5520\u5521\u5522\u5523\u5524\u5525\u5526\u5527\u5528\u5529\u552a\u552b\u552c\u552d\u552e\u552f\u5530\u5531\u5532\u5533\u5534\u5535\u5536\u5537\u5538\u5539\u553a\u553b\u553c\u553d\u553e\u553f\u5540\u5541\u5542\u5543\u5544\u5545\u5546\u5547\u5548\u5549\u554a\u554b\u554c\u554d\u554e\u554f\u5550\u5551\u5552\u5553\u5554\u5555\u5556\u5557\u5558\u5559\u555a\u555b\u555c\u555d\u555e\u555f\u5560\u5561\u5562\u5563\u5564\u5565\u5566\u5567\u5568\u5569\u556a\u556b\u556c\u556d\u556e\u556f\u5570\u5571\u5572\u5573\u5574\u5575\u5576\u5577\u5578\u5579\u557a\u557b\u557c\u557d\u557e\u557f\u5580\u5581\u5582\u5583\u5584\u5585\u5586\u5587\u5588\u5589\u558a\u558b\u558c\u558d\u558e\u558f\u5590\u5591\u5592\u5593\u5594\u5595\u5596\u5597\u5598\u5599\u559a\u559b\u559c\u559d\u559e\u559f\u55a0\u55a1\u55a2\u55a3\u55a4\u55a5\u55a6\u55a7\u55a8\u55a9\u55aa\u55ab\u55ac\u55ad\u55ae\u55af\u55b0\u55b1\u55b2\u55b3\u55b4\u55b5\u55b6\u55b7\u55b8\u55b9\u55ba\u55bb\u55bc\u55bd\u55be\u55bf\u55c0\u55c1\u55c2\u55c3\u55c4\u55c5\u55c6\u55c7\u55c8\u55c9\u55ca\u55cb\u55cc\u55cd\u55ce\u55cf\u55d0\u55d1\u55d2\u55d3\u55d4\u55d5\u55d6\u55d7\u55d8\u55d9\u55da\u55db\u55dc\u55dd\u55de\u55df\u55e0\u55e1\u55e2\u55e3\u55e4\u55e5\u55e6\u55e7\u55e8\u55e9\u55ea\u55eb\u55ec\u55ed\u55ee\u55ef\u55f0\u55f1\u55f2\u55f3\u55f4\u55f5\u55f6\u55f7\u55f8\u55f9\u55fa\u55fb\u55fc\u55fd\u55fe\u55ff\u5600\u5601\u5602\u5603\u5604\u5605\u5606\u5607\u5608\u5609\u560a\u560b\u560c\u560d\u560e\u560f\u5610\u5611\u5612\u5613\u5614\u5615\u5616\u5617\u5618\u5619\u561a\u561b\u561c\u561d\u561e\u561f\u5620\u5621\u5622\u5623\u5624\u5625\u5626\u5627\u5628\u5629\u562a\u562b\u562c\u562d\u562e\u562f\u5630\u5631\u5632\u5633\u5634\u5635\u5636\u5637\u5638\u5639\u563a\u563b\u563c\u563d\u563e\u563f\u5640\u5641\u5642\u5643\u5644\u5645\u5646\u5647\u5648\u5649\u564a\u564b\u564c\u564d\u564e\u564f\u5650\u5651\u5652\u5653\u5654\u5655\u5656\u5657\u5658\u5659\u565a\u565b\u565c\u565d\u565e\u565f\u5660\u5661\u5662\u5663\u5664\u5665\u5666\u5667\u5668\u5669\u566a\u566b\u566c\u566d\u566e\u566f\u5670\u5671\u5672\u5673\u5674\u5675\u5676\u5677\u5678\u5679\u567a\u567b\u567c\u567d\u567e\u567f\u5680\u5681\u5682\u5683\u5684\u5685\u5686\u5687\u5688\u5689\u568a\u568b\u568c\u568d\u568e\u568f\u5690\u5691\u5692\u5693\u5694\u5695\u5696\u5697\u5698\u5699\u569a\u569b\u569c\u569d\u569e\u569f\u56a0\u56a1\u56a2\u56a3\u56a4\u56a5\u56a6\u56a7\u56a8\u56a9\u56aa\u56ab\u56ac\u56ad\u56ae\u56af\u56b0\u56b1\u56b2\u56b3\u56b4\u56b5\u56b6\u56b7\u56b8\u56b9\u56ba\u56bb\u56bc\u56bd\u56be\u56bf\u56c0\u56c1\u56c2\u56c3\u56c4\u56c5\u56c6\u56c7\u56c8\u56c9\u56ca\u56cb\u56cc\u56cd\u56ce\u56cf\u56d0\u56d1\u56d2\u56d3\u56d4\u56d5\u56d6\u56d7\u56d8\u56d9\u56da\u56db\u56dc\u56dd\u56de\u56df\u56e0\u56e1\u56e2\u56e3\u56e4\u56e5\u56e6\u56e7\u56e8\u56e9\u56ea\u56eb\u56ec\u56ed\u56ee\u56ef\u56f0\u56f1\u56f2\u56f3\u56f4\u56f5\u56f6\u56f7\u56f8\u56f9\u56fa\u56fb\u56fc\u56fd\u56fe\u56ff\u5700\u5701\u5702\u5703\u5704\u5705\u5706\u5707\u5708\u5709\u570a\u570b\u570c\u570d\u570e\u570f\u5710\u5711\u5712\u5713\u5714\u5715\u5716\u5717\u5718\u5719\u571a\u571b\u571c\u571d\u571e\u571f\u5720\u5721\u5722\u5723\u5724\u5725\u5726\u5727\u5728\u5729\u572a\u572b\u572c\u572d\u572e\u572f\u5730\u5731\u5732\u5733\u5734\u5735\u5736\u5737\u5738\u5739\u573a\u573b\u573c\u573d\u573e\u573f\u5740\u5741\u5742\u5743\u5744\u5745\u5746\u5747\u5748\u5749\u574a\u574b\u574c\u574d\u574e\u574f\u5750\u5751\u5752\u5753\u5754\u5755\u5756\u5757\u5758\u5759\u575a\u575b\u575c\u575d\u575e\u575f\u5760\u5761\u5762\u5763\u5764\u5765\u5766\u5767\u5768\u5769\u576a\u576b\u576c\u576d\u576e\u576f\u5770\u5771\u5772\u5773\u5774\u5775\u5776\u5777\u5778\u5779\u577a\u577b\u577c\u577d\u577e\u577f\u5780\u5781\u5782\u5783\u5784\u5785\u5786\u5787\u5788\u5789\u578a\u578b\u578c\u578d\u578e\u578f\u5790\u5791\u5792\u5793\u5794\u5795\u5796\u5797\u5798\u5799\u579a\u579b\u579c\u579d\u579e\u579f\u57a0\u57a1\u57a2\u57a3\u57a4\u57a5\u57a6\u57a7\u57a8\u57a9\u57aa\u57ab\u57ac\u57ad\u57ae\u57af\u57b0\u57b1\u57b2\u57b3\u57b4\u57b5\u57b6\u57b7\u57b8\u57b9\u57ba\u57bb\u57bc\u57bd\u57be\u57bf\u57c0\u57c1\u57c2\u57c3\u57c4\u57c5\u57c6\u57c7\u57c8\u57c9\u57ca\u57cb\u57cc\u57cd\u57ce\u57cf\u57d0\u57d1\u57d2\u57d3\u57d4\u57d5\u57d6\u57d7\u57d8\u57d9\u57da\u57db\u57dc\u57dd\u57de\u57df\u57e0\u57e1\u57e2\u57e3\u57e4\u57e5\u57e6\u57e7\u57e8\u57e9\u57ea\u57eb\u57ec\u57ed\u57ee\u57ef\u57f0\u57f1\u57f2\u57f3\u57f4\u57f5\u57f6\u57f7\u57f8\u57f9\u57fa\u57fb\u57fc\u57fd\u57fe\u57ff\u5800\u5801\u5802\u5803\u5804\u5805\u5806\u5807\u5808\u5809\u580a\u580b\u580c\u580d\u580e\u580f\u5810\u5811\u5812\u5813\u5814\u5815\u5816\u5817\u5818\u5819\u581a\u581b\u581c\u581d\u581e\u581f\u5820\u5821\u5822\u5823\u5824\u5825\u5826\u5827\u5828\u5829\u582a\u582b\u582c\u582d\u582e\u582f\u5830\u5831\u5832\u5833\u5834\u5835\u5836\u5837\u5838\u5839\u583a\u583b\u583c\u583d\u583e\u583f\u5840\u5841\u5842\u5843\u5844\u5845\u5846\u5847\u5848\u5849\u584a\u584b\u584c\u584d\u584e\u584f\u5850\u5851\u5852\u5853\u5854\u5855\u5856\u5857\u5858\u5859\u585a\u585b\u585c\u585d\u585e\u585f\u5860\u5861\u5862\u5863\u5864\u5865\u5866\u5867\u5868\u5869\u586a\u586b\u586c\u586d\u586e\u586f\u5870\u5871\u5872\u5873\u5874\u5875\u5876\u5877\u5878\u5879\u587a\u587b\u587c\u587d\u587e\u587f\u5880\u5881\u5882\u5883\u5884\u5885\u5886\u5887\u5888\u5889\u588a\u588b\u588c\u588d\u588e\u588f\u5890\u5891\u5892\u5893\u5894\u5895\u5896\u5897\u5898\u5899\u589a\u589b\u589c\u589d\u589e\u589f\u58a0\u58a1\u58a2\u58a3\u58a4\u58a5\u58a6\u58a7\u58a8\u58a9\u58aa\u58ab\u58ac\u58ad\u58ae\u58af\u58b0\u58b1\u58b2\u58b3\u58b4\u58b5\u58b6\u58b7\u58b8\u58b9\u58ba\u58bb\u58bc\u58bd\u58be\u58bf\u58c0\u58c1\u58c2\u58c3\u58c4\u58c5\u58c6\u58c7\u58c8\u58c9\u58ca\u58cb\u58cc\u58cd\u58ce\u58cf\u58d0\u58d1\u58d2\u58d3\u58d4\u58d5\u58d6\u58d7\u58d8\u58d9\u58da\u58db\u58dc\u58dd\u58de\u58df\u58e0\u58e1\u58e2\u58e3\u58e4\u58e5\u58e6\u58e7\u58e8\u58e9\u58ea\u58eb\u58ec\u58ed\u58ee\u58ef\u58f0\u58f1\u58f2\u58f3\u58f4\u58f5\u58f6\u58f7\u58f8\u58f9\u58fa\u58fb\u58fc\u58fd\u58fe\u58ff\u5900\u5901\u5902\u5903\u5904\u5905\u5906\u5907\u5908\u5909\u590a\u590b\u590c\u590d\u590e\u590f\u5910\u5911\u5912\u5913\u5914\u5915\u5916\u5917\u5918\u5919\u591a\u591b\u591c\u591d\u591e\u591f\u5920\u5921\u5922\u5923\u5924\u5925\u5926\u5927\u5928\u5929\u592a\u592b\u592c\u592d\u592e\u592f\u5930\u5931\u5932\u5933\u5934\u5935\u5936\u5937\u5938\u5939\u593a\u593b\u593c\u593d\u593e\u593f\u5940\u5941\u5942\u5943\u5944\u5945\u5946\u5947\u5948\u5949\u594a\u594b\u594c\u594d\u594e\u594f\u5950\u5951\u5952\u5953\u5954\u5955\u5956\u5957\u5958\u5959\u595a\u595b\u595c\u595d\u595e\u595f\u5960\u5961\u5962\u5963\u5964\u5965\u5966\u5967\u5968\u5969\u596a\u596b\u596c\u596d\u596e\u596f\u5970\u5971\u5972\u5973\u5974\u5975\u5976\u5977\u5978\u5979\u597a\u597b\u597c\u597d\u597e\u597f\u5980\u5981\u5982\u5983\u5984\u5985\u5986\u5987\u5988\u5989\u598a\u598b\u598c\u598d\u598e\u598f\u5990\u5991\u5992\u5993\u5994\u5995\u5996\u5997\u5998\u5999\u599a\u599b\u599c\u599d\u599e\u599f\u59a0\u59a1\u59a2\u59a3\u59a4\u59a5\u59a6\u59a7\u59a8\u59a9\u59aa\u59ab\u59ac\u59ad\u59ae\u59af\u59b0\u59b1\u59b2\u59b3\u59b4\u59b5\u59b6\u59b7\u59b8\u59b9\u59ba\u59bb\u59bc\u59bd\u59be\u59bf\u59c0\u59c1\u59c2\u59c3\u59c4\u59c5\u59c6\u59c7\u59c8\u59c9\u59ca\u59cb\u59cc\u59cd\u59ce\u59cf\u59d0\u59d1\u59d2\u59d3\u59d4\u59d5\u59d6\u59d7\u59d8\u59d9\u59da\u59db\u59dc\u59dd\u59de\u59df\u59e0\u59e1\u59e2\u59e3\u59e4\u59e5\u59e6\u59e7\u59e8\u59e9\u59ea\u59eb\u59ec\u59ed\u59ee\u59ef\u59f0\u59f1\u59f2\u59f3\u59f4\u59f5\u59f6\u59f7\u59f8\u59f9\u59fa\u59fb\u59fc\u59fd\u59fe\u59ff\u5a00\u5a01\u5a02\u5a03\u5a04\u5a05\u5a06\u5a07\u5a08\u5a09\u5a0a\u5a0b\u5a0c\u5a0d\u5a0e\u5a0f\u5a10\u5a11\u5a12\u5a13\u5a14\u5a15\u5a16\u5a17\u5a18\u5a19\u5a1a\u5a1b\u5a1c\u5a1d\u5a1e\u5a1f\u5a20\u5a21\u5a22\u5a23\u5a24\u5a25\u5a26\u5a27\u5a28\u5a29\u5a2a\u5a2b\u5a2c\u5a2d\u5a2e\u5a2f\u5a30\u5a31\u5a32\u5a33\u5a34\u5a35\u5a36\u5a37\u5a38\u5a39\u5a3a\u5a3b\u5a3c\u5a3d\u5a3e\u5a3f\u5a40\u5a41\u5a42\u5a43\u5a44\u5a45\u5a46\u5a47\u5a48\u5a49\u5a4a\u5a4b\u5a4c\u5a4d\u5a4e\u5a4f\u5a50\u5a51\u5a52\u5a53\u5a54\u5a55\u5a56\u5a57\u5a58\u5a59\u5a5a\u5a5b\u5a5c\u5a5d\u5a5e\u5a5f\u5a60\u5a61\u5a62\u5a63\u5a64\u5a65\u5a66\u5a67\u5a68\u5a69\u5a6a\u5a6b\u5a6c\u5a6d\u5a6e\u5a6f\u5a70\u5a71\u5a72\u5a73\u5a74\u5a75\u5a76\u5a77\u5a78\u5a79\u5a7a\u5a7b\u5a7c\u5a7d\u5a7e\u5a7f\u5a80\u5a81\u5a82\u5a83\u5a84\u5a85\u5a86\u5a87\u5a88\u5a89\u5a8a\u5a8b\u5a8c\u5a8d\u5a8e\u5a8f\u5a90\u5a91\u5a92\u5a93\u5a94\u5a95\u5a96\u5a97\u5a98\u5a99\u5a9a\u5a9b\u5a9c\u5a9d\u5a9e\u5a9f\u5aa0\u5aa1\u5aa2\u5aa3\u5aa4\u5aa5\u5aa6\u5aa7\u5aa8\u5aa9\u5aaa\u5aab\u5aac\u5aad\u5aae\u5aaf\u5ab0\u5ab1\u5ab2\u5ab3\u5ab4\u5ab5\u5ab6\u5ab7\u5ab8\u5ab9\u5aba\u5abb\u5abc\u5abd\u5abe\u5abf\u5ac0\u5ac1\u5ac2\u5ac3\u5ac4\u5ac5\u5ac6\u5ac7\u5ac8\u5ac9\u5aca\u5acb\u5acc\u5acd\u5ace\u5acf\u5ad0\u5ad1\u5ad2\u5ad3\u5ad4\u5ad5\u5ad6\u5ad7\u5ad8\u5ad9\u5ada\u5adb\u5adc\u5add\u5ade\u5adf\u5ae0\u5ae1\u5ae2\u5ae3\u5ae4\u5ae5\u5ae6\u5ae7\u5ae8\u5ae9\u5aea\u5aeb\u5aec\u5aed\u5aee\u5aef\u5af0\u5af1\u5af2\u5af3\u5af4\u5af5\u5af6\u5af7\u5af8\u5af9\u5afa\u5afb\u5afc\u5afd\u5afe\u5aff\u5b00\u5b01\u5b02\u5b03\u5b04\u5b05\u5b06\u5b07\u5b08\u5b09\u5b0a\u5b0b\u5b0c\u5b0d\u5b0e\u5b0f\u5b10\u5b11\u5b12\u5b13\u5b14\u5b15\u5b16\u5b17\u5b18\u5b19\u5b1a\u5b1b\u5b1c\u5b1d\u5b1e\u5b1f\u5b20\u5b21\u5b22\u5b23\u5b24\u5b25\u5b26\u5b27\u5b28\u5b29\u5b2a\u5b2b\u5b2c\u5b2d\u5b2e\u5b2f\u5b30\u5b31\u5b32\u5b33\u5b34\u5b35\u5b36\u5b37\u5b38\u5b39\u5b3a\u5b3b\u5b3c\u5b3d\u5b3e\u5b3f\u5b40\u5b41\u5b42\u5b43\u5b44\u5b45\u5b46\u5b47\u5b48\u5b49\u5b4a\u5b4b\u5b4c\u5b4d\u5b4e\u5b4f\u5b50\u5b51\u5b52\u5b53\u5b54\u5b55\u5b56\u5b57\u5b58\u5b59\u5b5a\u5b5b\u5b5c\u5b5d\u5b5e\u5b5f\u5b60\u5b61\u5b62\u5b63\u5b64\u5b65\u5b66\u5b67\u5b68\u5b69\u5b6a\u5b6b\u5b6c\u5b6d\u5b6e\u5b6f\u5b70\u5b71\u5b72\u5b73\u5b74\u5b75\u5b76\u5b77\u5b78\u5b79\u5b7a\u5b7b\u5b7c\u5b7d\u5b7e\u5b7f\u5b80\u5b81\u5b82\u5b83\u5b84\u5b85\u5b86\u5b87\u5b88\u5b89\u5b8a\u5b8b\u5b8c\u5b8d\u5b8e\u5b8f\u5b90\u5b91\u5b92\u5b93\u5b94\u5b95\u5b96\u5b97\u5b98\u5b99\u5b9a\u5b9b\u5b9c\u5b9d\u5b9e\u5b9f\u5ba0\u5ba1\u5ba2\u5ba3\u5ba4\u5ba5\u5ba6\u5ba7\u5ba8\u5ba9\u5baa\u5bab\u5bac\u5bad\u5bae\u5baf\u5bb0\u5bb1\u5bb2\u5bb3\u5bb4\u5bb5\u5bb6\u5bb7\u5bb8\u5bb9\u5bba\u5bbb\u5bbc\u5bbd\u5bbe\u5bbf\u5bc0\u5bc1\u5bc2\u5bc3\u5bc4\u5bc5\u5bc6\u5bc7\u5bc8\u5bc9\u5bca\u5bcb\u5bcc\u5bcd\u5bce\u5bcf\u5bd0\u5bd1\u5bd2\u5bd3\u5bd4\u5bd5\u5bd6\u5bd7\u5bd8\u5bd9\u5bda\u5bdb\u5bdc\u5bdd\u5bde\u5bdf\u5be0\u5be1\u5be2\u5be3\u5be4\u5be5\u5be6\u5be7\u5be8\u5be9\u5bea\u5beb\u5bec\u5bed\u5bee\u5bef\u5bf0\u5bf1\u5bf2\u5bf3\u5bf4\u5bf5\u5bf6\u5bf7\u5bf8\u5bf9\u5bfa\u5bfb\u5bfc\u5bfd\u5bfe\u5bff\u5c00\u5c01\u5c02\u5c03\u5c04\u5c05\u5c06\u5c07\u5c08\u5c09\u5c0a\u5c0b\u5c0c\u5c0d\u5c0e\u5c0f\u5c10\u5c11\u5c12\u5c13\u5c14\u5c15\u5c16\u5c17\u5c18\u5c19\u5c1a\u5c1b\u5c1c\u5c1d\u5c1e\u5c1f\u5c20\u5c21\u5c22\u5c23\u5c24\u5c25\u5c26\u5c27\u5c28\u5c29\u5c2a\u5c2b\u5c2c\u5c2d\u5c2e\u5c2f\u5c30\u5c31\u5c32\u5c33\u5c34\u5c35\u5c36\u5c37\u5c38\u5c39\u5c3a\u5c3b\u5c3c\u5c3d\u5c3e\u5c3f\u5c40\u5c41\u5c42\u5c43\u5c44\u5c45\u5c46\u5c47\u5c48\u5c49\u5c4a\u5c4b\u5c4c\u5c4d\u5c4e\u5c4f\u5c50\u5c51\u5c52\u5c53\u5c54\u5c55\u5c56\u5c57\u5c58\u5c59\u5c5a\u5c5b\u5c5c\u5c5d\u5c5e\u5c5f\u5c60\u5c61\u5c62\u5c63\u5c64\u5c65\u5c66\u5c67\u5c68\u5c69\u5c6a\u5c6b\u5c6c\u5c6d\u5c6e\u5c6f\u5c70\u5c71\u5c72\u5c73\u5c74\u5c75\u5c76\u5c77\u5c78\u5c79\u5c7a\u5c7b\u5c7c\u5c7d\u5c7e\u5c7f\u5c80\u5c81\u5c82\u5c83\u5c84\u5c85\u5c86\u5c87\u5c88\u5c89\u5c8a\u5c8b\u5c8c\u5c8d\u5c8e\u5c8f\u5c90\u5c91\u5c92\u5c93\u5c94\u5c95\u5c96\u5c97\u5c98\u5c99\u5c9a\u5c9b\u5c9c\u5c9d\u5c9e\u5c9f\u5ca0\u5ca1\u5ca2\u5ca3\u5ca4\u5ca5\u5ca6\u5ca7\u5ca8\u5ca9\u5caa\u5cab\u5cac\u5cad\u5cae\u5caf\u5cb0\u5cb1\u5cb2\u5cb3\u5cb4\u5cb5\u5cb6\u5cb7\u5cb8\u5cb9\u5cba\u5cbb\u5cbc\u5cbd\u5cbe\u5cbf\u5cc0\u5cc1\u5cc2\u5cc3\u5cc4\u5cc5\u5cc6\u5cc7\u5cc8\u5cc9\u5cca\u5ccb\u5ccc\u5ccd\u5cce\u5ccf\u5cd0\u5cd1\u5cd2\u5cd3\u5cd4\u5cd5\u5cd6\u5cd7\u5cd8\u5cd9\u5cda\u5cdb\u5cdc\u5cdd\u5cde\u5cdf\u5ce0\u5ce1\u5ce2\u5ce3\u5ce4\u5ce5\u5ce6\u5ce7\u5ce8\u5ce9\u5cea\u5ceb\u5cec\u5ced\u5cee\u5cef\u5cf0\u5cf1\u5cf2\u5cf3\u5cf4\u5cf5\u5cf6\u5cf7\u5cf8\u5cf9\u5cfa\u5cfb\u5cfc\u5cfd\u5cfe\u5cff\u5d00\u5d01\u5d02\u5d03\u5d04\u5d05\u5d06\u5d07\u5d08\u5d09\u5d0a\u5d0b\u5d0c\u5d0d\u5d0e\u5d0f\u5d10\u5d11\u5d12\u5d13\u5d14\u5d15\u5d16\u5d17\u5d18\u5d19\u5d1a\u5d1b\u5d1c\u5d1d\u5d1e\u5d1f\u5d20\u5d21\u5d22\u5d23\u5d24\u5d25\u5d26\u5d27\u5d28\u5d29\u5d2a\u5d2b\u5d2c\u5d2d\u5d2e\u5d2f\u5d30\u5d31\u5d32\u5d33\u5d34\u5d35\u5d36\u5d37\u5d38\u5d39\u5d3a\u5d3b\u5d3c\u5d3d\u5d3e\u5d3f\u5d40\u5d41\u5d42\u5d43\u5d44\u5d45\u5d46\u5d47\u5d48\u5d49\u5d4a\u5d4b\u5d4c\u5d4d\u5d4e\u5d4f\u5d50\u5d51\u5d52\u5d53\u5d54\u5d55\u5d56\u5d57\u5d58\u5d59\u5d5a\u5d5b\u5d5c\u5d5d\u5d5e\u5d5f\u5d60\u5d61\u5d62\u5d63\u5d64\u5d65\u5d66\u5d67\u5d68\u5d69\u5d6a\u5d6b\u5d6c\u5d6d\u5d6e\u5d6f\u5d70\u5d71\u5d72\u5d73\u5d74\u5d75\u5d76\u5d77\u5d78\u5d79\u5d7a\u5d7b\u5d7c\u5d7d\u5d7e\u5d7f\u5d80\u5d81\u5d82\u5d83\u5d84\u5d85\u5d86\u5d87\u5d88\u5d89\u5d8a\u5d8b\u5d8c\u5d8d\u5d8e\u5d8f\u5d90\u5d91\u5d92\u5d93\u5d94\u5d95\u5d96\u5d97\u5d98\u5d99\u5d9a\u5d9b\u5d9c\u5d9d\u5d9e\u5d9f\u5da0\u5da1\u5da2\u5da3\u5da4\u5da5\u5da6\u5da7\u5da8\u5da9\u5daa\u5dab\u5dac\u5dad\u5dae\u5daf\u5db0\u5db1\u5db2\u5db3\u5db4\u5db5\u5db6\u5db7\u5db8\u5db9\u5dba\u5dbb\u5dbc\u5dbd\u5dbe\u5dbf\u5dc0\u5dc1\u5dc2\u5dc3\u5dc4\u5dc5\u5dc6\u5dc7\u5dc8\u5dc9\u5dca\u5dcb\u5dcc\u5dcd\u5dce\u5dcf\u5dd0\u5dd1\u5dd2\u5dd3\u5dd4\u5dd5\u5dd6\u5dd7\u5dd8\u5dd9\u5dda\u5ddb\u5ddc\u5ddd\u5dde\u5ddf\u5de0\u5de1\u5de2\u5de3\u5de4\u5de5\u5de6\u5de7\u5de8\u5de9\u5dea\u5deb\u5dec\u5ded\u5dee\u5def\u5df0\u5df1\u5df2\u5df3\u5df4\u5df5\u5df6\u5df7\u5df8\u5df9\u5dfa\u5dfb\u5dfc\u5dfd\u5dfe\u5dff\u5e00\u5e01\u5e02\u5e03\u5e04\u5e05\u5e06\u5e07\u5e08\u5e09\u5e0a\u5e0b\u5e0c\u5e0d\u5e0e\u5e0f\u5e10\u5e11\u5e12\u5e13\u5e14\u5e15\u5e16\u5e17\u5e18\u5e19\u5e1a\u5e1b\u5e1c\u5e1d\u5e1e\u5e1f\u5e20\u5e21\u5e22\u5e23\u5e24\u5e25\u5e26\u5e27\u5e28\u5e29\u5e2a\u5e2b\u5e2c\u5e2d\u5e2e\u5e2f\u5e30\u5e31\u5e32\u5e33\u5e34\u5e35\u5e36\u5e37\u5e38\u5e39\u5e3a\u5e3b\u5e3c\u5e3d\u5e3e\u5e3f\u5e40\u5e41\u5e42\u5e43\u5e44\u5e45\u5e46\u5e47\u5e48\u5e49\u5e4a\u5e4b\u5e4c\u5e4d\u5e4e\u5e4f\u5e50\u5e51\u5e52\u5e53\u5e54\u5e55\u5e56\u5e57\u5e58\u5e59\u5e5a\u5e5b\u5e5c\u5e5d\u5e5e\u5e5f\u5e60\u5e61\u5e62\u5e63\u5e64\u5e65\u5e66\u5e67\u5e68\u5e69\u5e6a\u5e6b\u5e6c\u5e6d\u5e6e\u5e6f\u5e70\u5e71\u5e72\u5e73\u5e74\u5e75\u5e76\u5e77\u5e78\u5e79\u5e7a\u5e7b\u5e7c\u5e7d\u5e7e\u5e7f\u5e80\u5e81\u5e82\u5e83\u5e84\u5e85\u5e86\u5e87\u5e88\u5e89\u5e8a\u5e8b\u5e8c\u5e8d\u5e8e\u5e8f\u5e90\u5e91\u5e92\u5e93\u5e94\u5e95\u5e96\u5e97\u5e98\u5e99\u5e9a\u5e9b\u5e9c\u5e9d\u5e9e\u5e9f\u5ea0\u5ea1\u5ea2\u5ea3\u5ea4\u5ea5\u5ea6\u5ea7\u5ea8\u5ea9\u5eaa\u5eab\u5eac\u5ead\u5eae\u5eaf\u5eb0\u5eb1\u5eb2\u5eb3\u5eb4\u5eb5\u5eb6\u5eb7\u5eb8\u5eb9\u5eba\u5ebb\u5ebc\u5ebd\u5ebe\u5ebf\u5ec0\u5ec1\u5ec2\u5ec3\u5ec4\u5ec5\u5ec6\u5ec7\u5ec8\u5ec9\u5eca\u5ecb\u5ecc\u5ecd\u5ece\u5ecf\u5ed0\u5ed1\u5ed2\u5ed3\u5ed4\u5ed5\u5ed6\u5ed7\u5ed8\u5ed9\u5eda\u5edb\u5edc\u5edd\u5ede\u5edf\u5ee0\u5ee1\u5ee2\u5ee3\u5ee4\u5ee5\u5ee6\u5ee7\u5ee8\u5ee9\u5eea\u5eeb\u5eec\u5eed\u5eee\u5eef\u5ef0\u5ef1\u5ef2\u5ef3\u5ef4\u5ef5\u5ef6\u5ef7\u5ef8\u5ef9\u5efa\u5efb\u5efc\u5efd\u5efe\u5eff\u5f00\u5f01\u5f02\u5f03\u5f04\u5f05\u5f06\u5f07\u5f08\u5f09\u5f0a\u5f0b\u5f0c\u5f0d\u5f0e\u5f0f\u5f10\u5f11\u5f12\u5f13\u5f14\u5f15\u5f16\u5f17\u5f18\u5f19\u5f1a\u5f1b\u5f1c\u5f1d\u5f1e\u5f1f\u5f20\u5f21\u5f22\u5f23\u5f24\u5f25\u5f26\u5f27\u5f28\u5f29\u5f2a\u5f2b\u5f2c\u5f2d\u5f2e\u5f2f\u5f30\u5f31\u5f32\u5f33\u5f34\u5f35\u5f36\u5f37\u5f38\u5f39\u5f3a\u5f3b\u5f3c\u5f3d\u5f3e\u5f3f\u5f40\u5f41\u5f42\u5f43\u5f44\u5f45\u5f46\u5f47\u5f48\u5f49\u5f4a\u5f4b\u5f4c\u5f4d\u5f4e\u5f4f\u5f50\u5f51\u5f52\u5f53\u5f54\u5f55\u5f56\u5f57\u5f58\u5f59\u5f5a\u5f5b\u5f5c\u5f5d\u5f5e\u5f5f\u5f60\u5f61\u5f62\u5f63\u5f64\u5f65\u5f66\u5f67\u5f68\u5f69\u5f6a\u5f6b\u5f6c\u5f6d\u5f6e\u5f6f\u5f70\u5f71\u5f72\u5f73\u5f74\u5f75\u5f76\u5f77\u5f78\u5f79\u5f7a\u5f7b\u5f7c\u5f7d\u5f7e\u5f7f\u5f80\u5f81\u5f82\u5f83\u5f84\u5f85\u5f86\u5f87\u5f88\u5f89\u5f8a\u5f8b\u5f8c\u5f8d\u5f8e\u5f8f\u5f90\u5f91\u5f92\u5f93\u5f94\u5f95\u5f96\u5f97\u5f98\u5f99\u5f9a\u5f9b\u5f9c\u5f9d\u5f9e\u5f9f\u5fa0\u5fa1\u5fa2\u5fa3\u5fa4\u5fa5\u5fa6\u5fa7\u5fa8\u5fa9\u5faa\u5fab\u5fac\u5fad\u5fae\u5faf\u5fb0\u5fb1\u5fb2\u5fb3\u5fb4\u5fb5\u5fb6\u5fb7\u5fb8\u5fb9\u5fba\u5fbb\u5fbc\u5fbd\u5fbe\u5fbf\u5fc0\u5fc1\u5fc2\u5fc3\u5fc4\u5fc5\u5fc6\u5fc7\u5fc8\u5fc9\u5fca\u5fcb\u5fcc\u5fcd\u5fce\u5fcf\u5fd0\u5fd1\u5fd2\u5fd3\u5fd4\u5fd5\u5fd6\u5fd7\u5fd8\u5fd9\u5fda\u5fdb\u5fdc\u5fdd\u5fde\u5fdf\u5fe0\u5fe1\u5fe2\u5fe3\u5fe4\u5fe5\u5fe6\u5fe7\u5fe8\u5fe9\u5fea\u5feb\u5fec\u5fed\u5fee\u5fef\u5ff0\u5ff1\u5ff2\u5ff3\u5ff4\u5ff5\u5ff6\u5ff7\u5ff8\u5ff9\u5ffa\u5ffb\u5ffc\u5ffd\u5ffe\u5fff\u6000\u6001\u6002\u6003\u6004\u6005\u6006\u6007\u6008\u6009\u600a\u600b\u600c\u600d\u600e\u600f\u6010\u6011\u6012\u6013\u6014\u6015\u6016\u6017\u6018\u6019\u601a\u601b\u601c\u601d\u601e\u601f\u6020\u6021\u6022\u6023\u6024\u6025\u6026\u6027\u6028\u6029\u602a\u602b\u602c\u602d\u602e\u602f\u6030\u6031\u6032\u6033\u6034\u6035\u6036\u6037\u6038\u6039\u603a\u603b\u603c\u603d\u603e\u603f\u6040\u6041\u6042\u6043\u6044\u6045\u6046\u6047\u6048\u6049\u604a\u604b\u604c\u604d\u604e\u604f\u6050\u6051\u6052\u6053\u6054\u6055\u6056\u6057\u6058\u6059\u605a\u605b\u605c\u605d\u605e\u605f\u6060\u6061\u6062\u6063\u6064\u6065\u6066\u6067\u6068\u6069\u606a\u606b\u606c\u606d\u606e\u606f\u6070\u6071\u6072\u6073\u6074\u6075\u6076\u6077\u6078\u6079\u607a\u607b\u607c\u607d\u607e\u607f\u6080\u6081\u6082\u6083\u6084\u6085\u6086\u6087\u6088\u6089\u608a\u608b\u608c\u608d\u608e\u608f\u6090\u6091\u6092\u6093\u6094\u6095\u6096\u6097\u6098\u6099\u609a\u609b\u609c\u609d\u609e\u609f\u60a0\u60a1\u60a2\u60a3\u60a4\u60a5\u60a6\u60a7\u60a8\u60a9\u60aa\u60ab\u60ac\u60ad\u60ae\u60af\u60b0\u60b1\u60b2\u60b3\u60b4\u60b5\u60b6\u60b7\u60b8\u60b9\u60ba\u60bb\u60bc\u60bd\u60be\u60bf\u60c0\u60c1\u60c2\u60c3\u60c4\u60c5\u60c6\u60c7\u60c8\u60c9\u60ca\u60cb\u60cc\u60cd\u60ce\u60cf\u60d0\u60d1\u60d2\u60d3\u60d4\u60d5\u60d6\u60d7\u60d8\u60d9\u60da\u60db\u60dc\u60dd\u60de\u60df\u60e0\u60e1\u60e2\u60e3\u60e4\u60e5\u60e6\u60e7\u60e8\u60e9\u60ea\u60eb\u60ec\u60ed\u60ee\u60ef\u60f0\u60f1\u60f2\u60f3\u60f4\u60f5\u60f6\u60f7\u60f8\u60f9\u60fa\u60fb\u60fc\u60fd\u60fe\u60ff\u6100\u6101\u6102\u6103\u6104\u6105\u6106\u6107\u6108\u6109\u610a\u610b\u610c\u610d\u610e\u610f\u6110\u6111\u6112\u6113\u6114\u6115\u6116\u6117\u6118\u6119\u611a\u611b\u611c\u611d\u611e\u611f\u6120\u6121\u6122\u6123\u6124\u6125\u6126\u6127\u6128\u6129\u612a\u612b\u612c\u612d\u612e\u612f\u6130\u6131\u6132\u6133\u6134\u6135\u6136\u6137\u6138\u6139\u613a\u613b\u613c\u613d\u613e\u613f\u6140\u6141\u6142\u6143\u6144\u6145\u6146\u6147\u6148\u6149\u614a\u614b\u614c\u614d\u614e\u614f\u6150\u6151\u6152\u6153\u6154\u6155\u6156\u6157\u6158\u6159\u615a\u615b\u615c\u615d\u615e\u615f\u6160\u6161\u6162\u6163\u6164\u6165\u6166\u6167\u6168\u6169\u616a\u616b\u616c\u616d\u616e\u616f\u6170\u6171\u6172\u6173\u6174\u6175\u6176\u6177\u6178\u6179\u617a\u617b\u617c\u617d\u617e\u617f\u6180\u6181\u6182\u6183\u6184\u6185\u6186\u6187\u6188\u6189\u618a\u618b\u618c\u618d\u618e\u618f\u6190\u6191\u6192\u6193\u6194\u6195\u6196\u6197\u6198\u6199\u619a\u619b\u619c\u619d\u619e\u619f\u61a0\u61a1\u61a2\u61a3\u61a4\u61a5\u61a6\u61a7\u61a8\u61a9\u61aa\u61ab\u61ac\u61ad\u61ae\u61af\u61b0\u61b1\u61b2\u61b3\u61b4\u61b5\u61b6\u61b7\u61b8\u61b9\u61ba\u61bb\u61bc\u61bd\u61be\u61bf\u61c0\u61c1\u61c2\u61c3\u61c4\u61c5\u61c6\u61c7\u61c8\u61c9\u61ca\u61cb\u61cc\u61cd\u61ce\u61cf\u61d0\u61d1\u61d2\u61d3\u61d4\u61d5\u61d6\u61d7\u61d8\u61d9\u61da\u61db\u61dc\u61dd\u61de\u61df\u61e0\u61e1\u61e2\u61e3\u61e4\u61e5\u61e6\u61e7\u61e8\u61e9\u61ea\u61eb\u61ec\u61ed\u61ee\u61ef\u61f0\u61f1\u61f2\u61f3\u61f4\u61f5\u61f6\u61f7\u61f8\u61f9\u61fa\u61fb\u61fc\u61fd\u61fe\u61ff\u6200\u6201\u6202\u6203\u6204\u6205\u6206\u6207\u6208\u6209\u620a\u620b\u620c\u620d\u620e\u620f\u6210\u6211\u6212\u6213\u6214\u6215\u6216\u6217\u6218\u6219\u621a\u621b\u621c\u621d\u621e\u621f\u6220\u6221\u6222\u6223\u6224\u6225\u6226\u6227\u6228\u6229\u622a\u622b\u622c\u622d\u622e\u622f\u6230\u6231\u6232\u6233\u6234\u6235\u6236\u6237\u6238\u6239\u623a\u623b\u623c\u623d\u623e\u623f\u6240\u6241\u6242\u6243\u6244\u6245\u6246\u6247\u6248\u6249\u624a\u624b\u624c\u624d\u624e\u624f\u6250\u6251\u6252\u6253\u6254\u6255\u6256\u6257\u6258\u6259\u625a\u625b\u625c\u625d\u625e\u625f\u6260\u6261\u6262\u6263\u6264\u6265\u6266\u6267\u6268\u6269\u626a\u626b\u626c\u626d\u626e\u626f\u6270\u6271\u6272\u6273\u6274\u6275\u6276\u6277\u6278\u6279\u627a\u627b\u627c\u627d\u627e\u627f\u6280\u6281\u6282\u6283\u6284\u6285\u6286\u6287\u6288\u6289\u628a\u628b\u628c\u628d\u628e\u628f\u6290\u6291\u6292\u6293\u6294\u6295\u6296\u6297\u6298\u6299\u629a\u629b\u629c\u629d\u629e\u629f\u62a0\u62a1\u62a2\u62a3\u62a4\u62a5\u62a6\u62a7\u62a8\u62a9\u62aa\u62ab\u62ac\u62ad\u62ae\u62af\u62b0\u62b1\u62b2\u62b3\u62b4\u62b5\u62b6\u62b7\u62b8\u62b9\u62ba\u62bb\u62bc\u62bd\u62be\u62bf\u62c0\u62c1\u62c2\u62c3\u62c4\u62c5\u62c6\u62c7\u62c8\u62c9\u62ca\u62cb\u62cc\u62cd\u62ce\u62cf\u62d0\u62d1\u62d2\u62d3\u62d4\u62d5\u62d6\u62d7\u62d8\u62d9\u62da\u62db\u62dc\u62dd\u62de\u62df\u62e0\u62e1\u62e2\u62e3\u62e4\u62e5\u62e6\u62e7\u62e8\u62e9\u62ea\u62eb\u62ec\u62ed\u62ee\u62ef\u62f0\u62f1\u62f2\u62f3\u62f4\u62f5\u62f6\u62f7\u62f8\u62f9\u62fa\u62fb\u62fc\u62fd\u62fe\u62ff\u6300\u6301\u6302\u6303\u6304\u6305\u6306\u6307\u6308\u6309\u630a\u630b\u630c\u630d\u630e\u630f\u6310\u6311\u6312\u6313\u6314\u6315\u6316\u6317\u6318\u6319\u631a\u631b\u631c\u631d\u631e\u631f\u6320\u6321\u6322\u6323\u6324\u6325\u6326\u6327\u6328\u6329\u632a\u632b\u632c\u632d\u632e\u632f\u6330\u6331\u6332\u6333\u6334\u6335\u6336\u6337\u6338\u6339\u633a\u633b\u633c\u633d\u633e\u633f\u6340\u6341\u6342\u6343\u6344\u6345\u6346\u6347\u6348\u6349\u634a\u634b\u634c\u634d\u634e\u634f\u6350\u6351\u6352\u6353\u6354\u6355\u6356\u6357\u6358\u6359\u635a\u635b\u635c\u635d\u635e\u635f\u6360\u6361\u6362\u6363\u6364\u6365\u6366\u6367\u6368\u6369\u636a\u636b\u636c\u636d\u636e\u636f\u6370\u6371\u6372\u6373\u6374\u6375\u6376\u6377\u6378\u6379\u637a\u637b\u637c\u637d\u637e\u637f\u6380\u6381\u6382\u6383\u6384\u6385\u6386\u6387\u6388\u6389\u638a\u638b\u638c\u638d\u638e\u638f\u6390\u6391\u6392\u6393\u6394\u6395\u6396\u6397\u6398\u6399\u639a\u639b\u639c\u639d\u639e\u639f\u63a0\u63a1\u63a2\u63a3\u63a4\u63a5\u63a6\u63a7\u63a8\u63a9\u63aa\u63ab\u63ac\u63ad\u63ae\u63af\u63b0\u63b1\u63b2\u63b3\u63b4\u63b5\u63b6\u63b7\u63b8\u63b9\u63ba\u63bb\u63bc\u63bd\u63be\u63bf\u63c0\u63c1\u63c2\u63c3\u63c4\u63c5\u63c6\u63c7\u63c8\u63c9\u63ca\u63cb\u63cc\u63cd\u63ce\u63cf\u63d0\u63d1\u63d2\u63d3\u63d4\u63d5\u63d6\u63d7\u63d8\u63d9\u63da\u63db\u63dc\u63dd\u63de\u63df\u63e0\u63e1\u63e2\u63e3\u63e4\u63e5\u63e6\u63e7\u63e8\u63e9\u63ea\u63eb\u63ec\u63ed\u63ee\u63ef\u63f0\u63f1\u63f2\u63f3\u63f4\u63f5\u63f6\u63f7\u63f8\u63f9\u63fa\u63fb\u63fc\u63fd\u63fe\u63ff\u6400\u6401\u6402\u6403\u6404\u6405\u6406\u6407\u6408\u6409\u640a\u640b\u640c\u640d\u640e\u640f\u6410\u6411\u6412\u6413\u6414\u6415\u6416\u6417\u6418\u6419\u641a\u641b\u641c\u641d\u641e\u641f\u6420\u6421\u6422\u6423\u6424\u6425\u6426\u6427\u6428\u6429\u642a\u642b\u642c\u642d\u642e\u642f\u6430\u6431\u6432\u6433\u6434\u6435\u6436\u6437\u6438\u6439\u643a\u643b\u643c\u643d\u643e\u643f\u6440\u6441\u6442\u6443\u6444\u6445\u6446\u6447\u6448\u6449\u644a\u644b\u644c\u644d\u644e\u644f\u6450\u6451\u6452\u6453\u6454\u6455\u6456\u6457\u6458\u6459\u645a\u645b\u645c\u645d\u645e\u645f\u6460\u6461\u6462\u6463\u6464\u6465\u6466\u6467\u6468\u6469\u646a\u646b\u646c\u646d\u646e\u646f\u6470\u6471\u6472\u6473\u6474\u6475\u6476\u6477\u6478\u6479\u647a\u647b\u647c\u647d\u647e\u647f\u6480\u6481\u6482\u6483\u6484\u6485\u6486\u6487\u6488\u6489\u648a\u648b\u648c\u648d\u648e\u648f\u6490\u6491\u6492\u6493\u6494\u6495\u6496\u6497\u6498\u6499\u649a\u649b\u649c\u649d\u649e\u649f\u64a0\u64a1\u64a2\u64a3\u64a4\u64a5\u64a6\u64a7\u64a8\u64a9\u64aa\u64ab\u64ac\u64ad\u64ae\u64af\u64b0\u64b1\u64b2\u64b3\u64b4\u64b5\u64b6\u64b7\u64b8\u64b9\u64ba\u64bb\u64bc\u64bd\u64be\u64bf\u64c0\u64c1\u64c2\u64c3\u64c4\u64c5\u64c6\u64c7\u64c8\u64c9\u64ca\u64cb\u64cc\u64cd\u64ce\u64cf\u64d0\u64d1\u64d2\u64d3\u64d4\u64d5\u64d6\u64d7\u64d8\u64d9\u64da\u64db\u64dc\u64dd\u64de\u64df\u64e0\u64e1\u64e2\u64e3\u64e4\u64e5\u64e6\u64e7\u64e8\u64e9\u64ea\u64eb\u64ec\u64ed\u64ee\u64ef\u64f0\u64f1\u64f2\u64f3\u64f4\u64f5\u64f6\u64f7\u64f8\u64f9\u64fa\u64fb\u64fc\u64fd\u64fe\u64ff\u6500\u6501\u6502\u6503\u6504\u6505\u6506\u6507\u6508\u6509\u650a\u650b\u650c\u650d\u650e\u650f\u6510\u6511\u6512\u6513\u6514\u6515\u6516\u6517\u6518\u6519\u651a\u651b\u651c\u651d\u651e\u651f\u6520\u6521\u6522\u6523\u6524\u6525\u6526\u6527\u6528\u6529\u652a\u652b\u652c\u652d\u652e\u652f\u6530\u6531\u6532\u6533\u6534\u6535\u6536\u6537\u6538\u6539\u653a\u653b\u653c\u653d\u653e\u653f\u6540\u6541\u6542\u6543\u6544\u6545\u6546\u6547\u6548\u6549\u654a\u654b\u654c\u654d\u654e\u654f\u6550\u6551\u6552\u6553\u6554\u6555\u6556\u6557\u6558\u6559\u655a\u655b\u655c\u655d\u655e\u655f\u6560\u6561\u6562\u6563\u6564\u6565\u6566\u6567\u6568\u6569\u656a\u656b\u656c\u656d\u656e\u656f\u6570\u6571\u6572\u6573\u6574\u6575\u6576\u6577\u6578\u6579\u657a\u657b\u657c\u657d\u657e\u657f\u6580\u6581\u6582\u6583\u6584\u6585\u6586\u6587\u6588\u6589\u658a\u658b\u658c\u658d\u658e\u658f\u6590\u6591\u6592\u6593\u6594\u6595\u6596\u6597\u6598\u6599\u659a\u659b\u659c\u659d\u659e\u659f\u65a0\u65a1\u65a2\u65a3\u65a4\u65a5\u65a6\u65a7\u65a8\u65a9\u65aa\u65ab\u65ac\u65ad\u65ae\u65af\u65b0\u65b1\u65b2\u65b3\u65b4\u65b5\u65b6\u65b7\u65b8\u65b9\u65ba\u65bb\u65bc\u65bd\u65be\u65bf\u65c0\u65c1\u65c2\u65c3\u65c4\u65c5\u65c6\u65c7\u65c8\u65c9\u65ca\u65cb\u65cc\u65cd\u65ce\u65cf\u65d0\u65d1\u65d2\u65d3\u65d4\u65d5\u65d6\u65d7\u65d8\u65d9\u65da\u65db\u65dc\u65dd\u65de\u65df\u65e0\u65e1\u65e2\u65e3\u65e4\u65e5\u65e6\u65e7\u65e8\u65e9\u65ea\u65eb\u65ec\u65ed\u65ee\u65ef\u65f0\u65f1\u65f2\u65f3\u65f4\u65f5\u65f6\u65f7\u65f8\u65f9\u65fa\u65fb\u65fc\u65fd\u65fe\u65ff\u6600\u6601\u6602\u6603\u6604\u6605\u6606\u6607\u6608\u6609\u660a\u660b\u660c\u660d\u660e\u660f\u6610\u6611\u6612\u6613\u6614\u6615\u6616\u6617\u6618\u6619\u661a\u661b\u661c\u661d\u661e\u661f\u6620\u6621\u6622\u6623\u6624\u6625\u6626\u6627\u6628\u6629\u662a\u662b\u662c\u662d\u662e\u662f\u6630\u6631\u6632\u6633\u6634\u6635\u6636\u6637\u6638\u6639\u663a\u663b\u663c\u663d\u663e\u663f\u6640\u6641\u6642\u6643\u6644\u6645\u6646\u6647\u6648\u6649\u664a\u664b\u664c\u664d\u664e\u664f\u6650\u6651\u6652\u6653\u6654\u6655\u6656\u6657\u6658\u6659\u665a\u665b\u665c\u665d\u665e\u665f\u6660\u6661\u6662\u6663\u6664\u6665\u6666\u6667\u6668\u6669\u666a\u666b\u666c\u666d\u666e\u666f\u6670\u6671\u6672\u6673\u6674\u6675\u6676\u6677\u6678\u6679\u667a\u667b\u667c\u667d\u667e\u667f\u6680\u6681\u6682\u6683\u6684\u6685\u6686\u6687\u6688\u6689\u668a\u668b\u668c\u668d\u668e\u668f\u6690\u6691\u6692\u6693\u6694\u6695\u6696\u6697\u6698\u6699\u669a\u669b\u669c\u669d\u669e\u669f\u66a0\u66a1\u66a2\u66a3\u66a4\u66a5\u66a6\u66a7\u66a8\u66a9\u66aa\u66ab\u66ac\u66ad\u66ae\u66af\u66b0\u66b1\u66b2\u66b3\u66b4\u66b5\u66b6\u66b7\u66b8\u66b9\u66ba\u66bb\u66bc\u66bd\u66be\u66bf\u66c0\u66c1\u66c2\u66c3\u66c4\u66c5\u66c6\u66c7\u66c8\u66c9\u66ca\u66cb\u66cc\u66cd\u66ce\u66cf\u66d0\u66d1\u66d2\u66d3\u66d4\u66d5\u66d6\u66d7\u66d8\u66d9\u66da\u66db\u66dc\u66dd\u66de\u66df\u66e0\u66e1\u66e2\u66e3\u66e4\u66e5\u66e6\u66e7\u66e8\u66e9\u66ea\u66eb\u66ec\u66ed\u66ee\u66ef\u66f0\u66f1\u66f2\u66f3\u66f4\u66f5\u66f6\u66f7\u66f8\u66f9\u66fa\u66fb\u66fc\u66fd\u66fe\u66ff\u6700\u6701\u6702\u6703\u6704\u6705\u6706\u6707\u6708\u6709\u670a\u670b\u670c\u670d\u670e\u670f\u6710\u6711\u6712\u6713\u6714\u6715\u6716\u6717\u6718\u6719\u671a\u671b\u671c\u671d\u671e\u671f\u6720\u6721\u6722\u6723\u6724\u6725\u6726\u6727\u6728\u6729\u672a\u672b\u672c\u672d\u672e\u672f\u6730\u6731\u6732\u6733\u6734\u6735\u6736\u6737\u6738\u6739\u673a\u673b\u673c\u673d\u673e\u673f\u6740\u6741\u6742\u6743\u6744\u6745\u6746\u6747\u6748\u6749\u674a\u674b\u674c\u674d\u674e\u674f\u6750\u6751\u6752\u6753\u6754\u6755\u6756\u6757\u6758\u6759\u675a\u675b\u675c\u675d\u675e\u675f\u6760\u6761\u6762\u6763\u6764\u6765\u6766\u6767\u6768\u6769\u676a\u676b\u676c\u676d\u676e\u676f\u6770\u6771\u6772\u6773\u6774\u6775\u6776\u6777\u6778\u6779\u677a\u677b\u677c\u677d\u677e\u677f\u6780\u6781\u6782\u6783\u6784\u6785\u6786\u6787\u6788\u6789\u678a\u678b\u678c\u678d\u678e\u678f\u6790\u6791\u6792\u6793\u6794\u6795\u6796\u6797\u6798\u6799\u679a\u679b\u679c\u679d\u679e\u679f\u67a0\u67a1\u67a2\u67a3\u67a4\u67a5\u67a6\u67a7\u67a8\u67a9\u67aa\u67ab\u67ac\u67ad\u67ae\u67af\u67b0\u67b1\u67b2\u67b3\u67b4\u67b5\u67b6\u67b7\u67b8\u67b9\u67ba\u67bb\u67bc\u67bd\u67be\u67bf\u67c0\u67c1\u67c2\u67c3\u67c4\u67c5\u67c6\u67c7\u67c8\u67c9\u67ca\u67cb\u67cc\u67cd\u67ce\u67cf\u67d0\u67d1\u67d2\u67d3\u67d4\u67d5\u67d6\u67d7\u67d8\u67d9\u67da\u67db\u67dc\u67dd\u67de\u67df\u67e0\u67e1\u67e2\u67e3\u67e4\u67e5\u67e6\u67e7\u67e8\u67e9\u67ea\u67eb\u67ec\u67ed\u67ee\u67ef\u67f0\u67f1\u67f2\u67f3\u67f4\u67f5\u67f6\u67f7\u67f8\u67f9\u67fa\u67fb\u67fc\u67fd\u67fe\u67ff\u6800\u6801\u6802\u6803\u6804\u6805\u6806\u6807\u6808\u6809\u680a\u680b\u680c\u680d\u680e\u680f\u6810\u6811\u6812\u6813\u6814\u6815\u6816\u6817\u6818\u6819\u681a\u681b\u681c\u681d\u681e\u681f\u6820\u6821\u6822\u6823\u6824\u6825\u6826\u6827\u6828\u6829\u682a\u682b\u682c\u682d\u682e\u682f\u6830\u6831\u6832\u6833\u6834\u6835\u6836\u6837\u6838\u6839\u683a\u683b\u683c\u683d\u683e\u683f\u6840\u6841\u6842\u6843\u6844\u6845\u6846\u6847\u6848\u6849\u684a\u684b\u684c\u684d\u684e\u684f\u6850\u6851\u6852\u6853\u6854\u6855\u6856\u6857\u6858\u6859\u685a\u685b\u685c\u685d\u685e\u685f\u6860\u6861\u6862\u6863\u6864\u6865\u6866\u6867\u6868\u6869\u686a\u686b\u686c\u686d\u686e\u686f\u6870\u6871\u6872\u6873\u6874\u6875\u6876\u6877\u6878\u6879\u687a\u687b\u687c\u687d\u687e\u687f\u6880\u6881\u6882\u6883\u6884\u6885\u6886\u6887\u6888\u6889\u688a\u688b\u688c\u688d\u688e\u688f\u6890\u6891\u6892\u6893\u6894\u6895\u6896\u6897\u6898\u6899\u689a\u689b\u689c\u689d\u689e\u689f\u68a0\u68a1\u68a2\u68a3\u68a4\u68a5\u68a6\u68a7\u68a8\u68a9\u68aa\u68ab\u68ac\u68ad\u68ae\u68af\u68b0\u68b1\u68b2\u68b3\u68b4\u68b5\u68b6\u68b7\u68b8\u68b9\u68ba\u68bb\u68bc\u68bd\u68be\u68bf\u68c0\u68c1\u68c2\u68c3\u68c4\u68c5\u68c6\u68c7\u68c8\u68c9\u68ca\u68cb\u68cc\u68cd\u68ce\u68cf\u68d0\u68d1\u68d2\u68d3\u68d4\u68d5\u68d6\u68d7\u68d8\u68d9\u68da\u68db\u68dc\u68dd\u68de\u68df\u68e0\u68e1\u68e2\u68e3\u68e4\u68e5\u68e6\u68e7\u68e8\u68e9\u68ea\u68eb\u68ec\u68ed\u68ee\u68ef\u68f0\u68f1\u68f2\u68f3\u68f4\u68f5\u68f6\u68f7\u68f8\u68f9\u68fa\u68fb\u68fc\u68fd\u68fe\u68ff\u6900\u6901\u6902\u6903\u6904\u6905\u6906\u6907\u6908\u6909\u690a\u690b\u690c\u690d\u690e\u690f\u6910\u6911\u6912\u6913\u6914\u6915\u6916\u6917\u6918\u6919\u691a\u691b\u691c\u691d\u691e\u691f\u6920\u6921\u6922\u6923\u6924\u6925\u6926\u6927\u6928\u6929\u692a\u692b\u692c\u692d\u692e\u692f\u6930\u6931\u6932\u6933\u6934\u6935\u6936\u6937\u6938\u6939\u693a\u693b\u693c\u693d\u693e\u693f\u6940\u6941\u6942\u6943\u6944\u6945\u6946\u6947\u6948\u6949\u694a\u694b\u694c\u694d\u694e\u694f\u6950\u6951\u6952\u6953\u6954\u6955\u6956\u6957\u6958\u6959\u695a\u695b\u695c\u695d\u695e\u695f\u6960\u6961\u6962\u6963\u6964\u6965\u6966\u6967\u6968\u6969\u696a\u696b\u696c\u696d\u696e\u696f\u6970\u6971\u6972\u6973\u6974\u6975\u6976\u6977\u6978\u6979\u697a\u697b\u697c\u697d\u697e\u697f\u6980\u6981\u6982\u6983\u6984\u6985\u6986\u6987\u6988\u6989\u698a\u698b\u698c\u698d\u698e\u698f\u6990\u6991\u6992\u6993\u6994\u6995\u6996\u6997\u6998\u6999\u699a\u699b\u699c\u699d\u699e\u699f\u69a0\u69a1\u69a2\u69a3\u69a4\u69a5\u69a6\u69a7\u69a8\u69a9\u69aa\u69ab\u69ac\u69ad\u69ae\u69af\u69b0\u69b1\u69b2\u69b3\u69b4\u69b5\u69b6\u69b7\u69b8\u69b9\u69ba\u69bb\u69bc\u69bd\u69be\u69bf\u69c0\u69c1\u69c2\u69c3\u69c4\u69c5\u69c6\u69c7\u69c8\u69c9\u69ca\u69cb\u69cc\u69cd\u69ce\u69cf\u69d0\u69d1\u69d2\u69d3\u69d4\u69d5\u69d6\u69d7\u69d8\u69d9\u69da\u69db\u69dc\u69dd\u69de\u69df\u69e0\u69e1\u69e2\u69e3\u69e4\u69e5\u69e6\u69e7\u69e8\u69e9\u69ea\u69eb\u69ec\u69ed\u69ee\u69ef\u69f0\u69f1\u69f2\u69f3\u69f4\u69f5\u69f6\u69f7\u69f8\u69f9\u69fa\u69fb\u69fc\u69fd\u69fe\u69ff\u6a00\u6a01\u6a02\u6a03\u6a04\u6a05\u6a06\u6a07\u6a08\u6a09\u6a0a\u6a0b\u6a0c\u6a0d\u6a0e\u6a0f\u6a10\u6a11\u6a12\u6a13\u6a14\u6a15\u6a16\u6a17\u6a18\u6a19\u6a1a\u6a1b\u6a1c\u6a1d\u6a1e\u6a1f\u6a20\u6a21\u6a22\u6a23\u6a24\u6a25\u6a26\u6a27\u6a28\u6a29\u6a2a\u6a2b\u6a2c\u6a2d\u6a2e\u6a2f\u6a30\u6a31\u6a32\u6a33\u6a34\u6a35\u6a36\u6a37\u6a38\u6a39\u6a3a\u6a3b\u6a3c\u6a3d\u6a3e\u6a3f\u6a40\u6a41\u6a42\u6a43\u6a44\u6a45\u6a46\u6a47\u6a48\u6a49\u6a4a\u6a4b\u6a4c\u6a4d\u6a4e\u6a4f\u6a50\u6a51\u6a52\u6a53\u6a54\u6a55\u6a56\u6a57\u6a58\u6a59\u6a5a\u6a5b\u6a5c\u6a5d\u6a5e\u6a5f\u6a60\u6a61\u6a62\u6a63\u6a64\u6a65\u6a66\u6a67\u6a68\u6a69\u6a6a\u6a6b\u6a6c\u6a6d\u6a6e\u6a6f\u6a70\u6a71\u6a72\u6a73\u6a74\u6a75\u6a76\u6a77\u6a78\u6a79\u6a7a\u6a7b\u6a7c\u6a7d\u6a7e\u6a7f\u6a80\u6a81\u6a82\u6a83\u6a84\u6a85\u6a86\u6a87\u6a88\u6a89\u6a8a\u6a8b\u6a8c\u6a8d\u6a8e\u6a8f\u6a90\u6a91\u6a92\u6a93\u6a94\u6a95\u6a96\u6a97\u6a98\u6a99\u6a9a\u6a9b\u6a9c\u6a9d\u6a9e\u6a9f\u6aa0\u6aa1\u6aa2\u6aa3\u6aa4\u6aa5\u6aa6\u6aa7\u6aa8\u6aa9\u6aaa\u6aab\u6aac\u6aad\u6aae\u6aaf\u6ab0\u6ab1\u6ab2\u6ab3\u6ab4\u6ab5\u6ab6\u6ab7\u6ab8\u6ab9\u6aba\u6abb\u6abc\u6abd\u6abe\u6abf\u6ac0\u6ac1\u6ac2\u6ac3\u6ac4\u6ac5\u6ac6\u6ac7\u6ac8\u6ac9\u6aca\u6acb\u6acc\u6acd\u6ace\u6acf\u6ad0\u6ad1\u6ad2\u6ad3\u6ad4\u6ad5\u6ad6\u6ad7\u6ad8\u6ad9\u6ada\u6adb\u6adc\u6add\u6ade\u6adf\u6ae0\u6ae1\u6ae2\u6ae3\u6ae4\u6ae5\u6ae6\u6ae7\u6ae8\u6ae9\u6aea\u6aeb\u6aec\u6aed\u6aee\u6aef\u6af0\u6af1\u6af2\u6af3\u6af4\u6af5\u6af6\u6af7\u6af8\u6af9\u6afa\u6afb\u6afc\u6afd\u6afe\u6aff\u6b00\u6b01\u6b02\u6b03\u6b04\u6b05\u6b06\u6b07\u6b08\u6b09\u6b0a\u6b0b\u6b0c\u6b0d\u6b0e\u6b0f\u6b10\u6b11\u6b12\u6b13\u6b14\u6b15\u6b16\u6b17\u6b18\u6b19\u6b1a\u6b1b\u6b1c\u6b1d\u6b1e\u6b1f\u6b20\u6b21\u6b22\u6b23\u6b24\u6b25\u6b26\u6b27\u6b28\u6b29\u6b2a\u6b2b\u6b2c\u6b2d\u6b2e\u6b2f\u6b30\u6b31\u6b32\u6b33\u6b34\u6b35\u6b36\u6b37\u6b38\u6b39\u6b3a\u6b3b\u6b3c\u6b3d\u6b3e\u6b3f\u6b40\u6b41\u6b42\u6b43\u6b44\u6b45\u6b46\u6b47\u6b48\u6b49\u6b4a\u6b4b\u6b4c\u6b4d\u6b4e\u6b4f\u6b50\u6b51\u6b52\u6b53\u6b54\u6b55\u6b56\u6b57\u6b58\u6b59\u6b5a\u6b5b\u6b5c\u6b5d\u6b5e\u6b5f\u6b60\u6b61\u6b62\u6b63\u6b64\u6b65\u6b66\u6b67\u6b68\u6b69\u6b6a\u6b6b\u6b6c\u6b6d\u6b6e\u6b6f\u6b70\u6b71\u6b72\u6b73\u6b74\u6b75\u6b76\u6b77\u6b78\u6b79\u6b7a\u6b7b\u6b7c\u6b7d\u6b7e\u6b7f\u6b80\u6b81\u6b82\u6b83\u6b84\u6b85\u6b86\u6b87\u6b88\u6b89\u6b8a\u6b8b\u6b8c\u6b8d\u6b8e\u6b8f\u6b90\u6b91\u6b92\u6b93\u6b94\u6b95\u6b96\u6b97\u6b98\u6b99\u6b9a\u6b9b\u6b9c\u6b9d\u6b9e\u6b9f\u6ba0\u6ba1\u6ba2\u6ba3\u6ba4\u6ba5\u6ba6\u6ba7\u6ba8\u6ba9\u6baa\u6bab\u6bac\u6bad\u6bae\u6baf\u6bb0\u6bb1\u6bb2\u6bb3\u6bb4\u6bb5\u6bb6\u6bb7\u6bb8\u6bb9\u6bba\u6bbb\u6bbc\u6bbd\u6bbe\u6bbf\u6bc0\u6bc1\u6bc2\u6bc3\u6bc4\u6bc5\u6bc6\u6bc7\u6bc8\u6bc9\u6bca\u6bcb\u6bcc\u6bcd\u6bce\u6bcf\u6bd0\u6bd1\u6bd2\u6bd3\u6bd4\u6bd5\u6bd6\u6bd7\u6bd8\u6bd9\u6bda\u6bdb\u6bdc\u6bdd\u6bde\u6bdf\u6be0\u6be1\u6be2\u6be3\u6be4\u6be5\u6be6\u6be7\u6be8\u6be9\u6bea\u6beb\u6bec\u6bed\u6bee\u6bef\u6bf0\u6bf1\u6bf2\u6bf3\u6bf4\u6bf5\u6bf6\u6bf7\u6bf8\u6bf9\u6bfa\u6bfb\u6bfc\u6bfd\u6bfe\u6bff\u6c00\u6c01\u6c02\u6c03\u6c04\u6c05\u6c06\u6c07\u6c08\u6c09\u6c0a\u6c0b\u6c0c\u6c0d\u6c0e\u6c0f\u6c10\u6c11\u6c12\u6c13\u6c14\u6c15\u6c16\u6c17\u6c18\u6c19\u6c1a\u6c1b\u6c1c\u6c1d\u6c1e\u6c1f\u6c20\u6c21\u6c22\u6c23\u6c24\u6c25\u6c26\u6c27\u6c28\u6c29\u6c2a\u6c2b\u6c2c\u6c2d\u6c2e\u6c2f\u6c30\u6c31\u6c32\u6c33\u6c34\u6c35\u6c36\u6c37\u6c38\u6c39\u6c3a\u6c3b\u6c3c\u6c3d\u6c3e\u6c3f\u6c40\u6c41\u6c42\u6c43\u6c44\u6c45\u6c46\u6c47\u6c48\u6c49\u6c4a\u6c4b\u6c4c\u6c4d\u6c4e\u6c4f\u6c50\u6c51\u6c52\u6c53\u6c54\u6c55\u6c56\u6c57\u6c58\u6c59\u6c5a\u6c5b\u6c5c\u6c5d\u6c5e\u6c5f\u6c60\u6c61\u6c62\u6c63\u6c64\u6c65\u6c66\u6c67\u6c68\u6c69\u6c6a\u6c6b\u6c6c\u6c6d\u6c6e\u6c6f\u6c70\u6c71\u6c72\u6c73\u6c74\u6c75\u6c76\u6c77\u6c78\u6c79\u6c7a\u6c7b\u6c7c\u6c7d\u6c7e\u6c7f\u6c80\u6c81\u6c82\u6c83\u6c84\u6c85\u6c86\u6c87\u6c88\u6c89\u6c8a\u6c8b\u6c8c\u6c8d\u6c8e\u6c8f\u6c90\u6c91\u6c92\u6c93\u6c94\u6c95\u6c96\u6c97\u6c98\u6c99\u6c9a\u6c9b\u6c9c\u6c9d\u6c9e\u6c9f\u6ca0\u6ca1\u6ca2\u6ca3\u6ca4\u6ca5\u6ca6\u6ca7\u6ca8\u6ca9\u6caa\u6cab\u6cac\u6cad\u6cae\u6caf\u6cb0\u6cb1\u6cb2\u6cb3\u6cb4\u6cb5\u6cb6\u6cb7\u6cb8\u6cb9\u6cba\u6cbb\u6cbc\u6cbd\u6cbe\u6cbf\u6cc0\u6cc1\u6cc2\u6cc3\u6cc4\u6cc5\u6cc6\u6cc7\u6cc8\u6cc9\u6cca\u6ccb\u6ccc\u6ccd\u6cce\u6ccf\u6cd0\u6cd1\u6cd2\u6cd3\u6cd4\u6cd5\u6cd6\u6cd7\u6cd8\u6cd9\u6cda\u6cdb\u6cdc\u6cdd\u6cde\u6cdf\u6ce0\u6ce1\u6ce2\u6ce3\u6ce4\u6ce5\u6ce6\u6ce7\u6ce8\u6ce9\u6cea\u6ceb\u6cec\u6ced\u6cee\u6cef\u6cf0\u6cf1\u6cf2\u6cf3\u6cf4\u6cf5\u6cf6\u6cf7\u6cf8\u6cf9\u6cfa\u6cfb\u6cfc\u6cfd\u6cfe\u6cff\u6d00\u6d01\u6d02\u6d03\u6d04\u6d05\u6d06\u6d07\u6d08\u6d09\u6d0a\u6d0b\u6d0c\u6d0d\u6d0e\u6d0f\u6d10\u6d11\u6d12\u6d13\u6d14\u6d15\u6d16\u6d17\u6d18\u6d19\u6d1a\u6d1b\u6d1c\u6d1d\u6d1e\u6d1f\u6d20\u6d21\u6d22\u6d23\u6d24\u6d25\u6d26\u6d27\u6d28\u6d29\u6d2a\u6d2b\u6d2c\u6d2d\u6d2e\u6d2f\u6d30\u6d31\u6d32\u6d33\u6d34\u6d35\u6d36\u6d37\u6d38\u6d39\u6d3a\u6d3b\u6d3c\u6d3d\u6d3e\u6d3f\u6d40\u6d41\u6d42\u6d43\u6d44\u6d45\u6d46\u6d47\u6d48\u6d49\u6d4a\u6d4b\u6d4c\u6d4d\u6d4e\u6d4f\u6d50\u6d51\u6d52\u6d53\u6d54\u6d55\u6d56\u6d57\u6d58\u6d59\u6d5a\u6d5b\u6d5c\u6d5d\u6d5e\u6d5f\u6d60\u6d61\u6d62\u6d63\u6d64\u6d65\u6d66\u6d67\u6d68\u6d69\u6d6a\u6d6b\u6d6c\u6d6d\u6d6e\u6d6f\u6d70\u6d71\u6d72\u6d73\u6d74\u6d75\u6d76\u6d77\u6d78\u6d79\u6d7a\u6d7b\u6d7c\u6d7d\u6d7e\u6d7f\u6d80\u6d81\u6d82\u6d83\u6d84\u6d85\u6d86\u6d87\u6d88\u6d89\u6d8a\u6d8b\u6d8c\u6d8d\u6d8e\u6d8f\u6d90\u6d91\u6d92\u6d93\u6d94\u6d95\u6d96\u6d97\u6d98\u6d99\u6d9a\u6d9b\u6d9c\u6d9d\u6d9e\u6d9f\u6da0\u6da1\u6da2\u6da3\u6da4\u6da5\u6da6\u6da7\u6da8\u6da9\u6daa\u6dab\u6dac\u6dad\u6dae\u6daf\u6db0\u6db1\u6db2\u6db3\u6db4\u6db5\u6db6\u6db7\u6db8\u6db9\u6dba\u6dbb\u6dbc\u6dbd\u6dbe\u6dbf\u6dc0\u6dc1\u6dc2\u6dc3\u6dc4\u6dc5\u6dc6\u6dc7\u6dc8\u6dc9\u6dca\u6dcb\u6dcc\u6dcd\u6dce\u6dcf\u6dd0\u6dd1\u6dd2\u6dd3\u6dd4\u6dd5\u6dd6\u6dd7\u6dd8\u6dd9\u6dda\u6ddb\u6ddc\u6ddd\u6dde\u6ddf\u6de0\u6de1\u6de2\u6de3\u6de4\u6de5\u6de6\u6de7\u6de8\u6de9\u6dea\u6deb\u6dec\u6ded\u6dee\u6def\u6df0\u6df1\u6df2\u6df3\u6df4\u6df5\u6df6\u6df7\u6df8\u6df9\u6dfa\u6dfb\u6dfc\u6dfd\u6dfe\u6dff\u6e00\u6e01\u6e02\u6e03\u6e04\u6e05\u6e06\u6e07\u6e08\u6e09\u6e0a\u6e0b\u6e0c\u6e0d\u6e0e\u6e0f\u6e10\u6e11\u6e12\u6e13\u6e14\u6e15\u6e16\u6e17\u6e18\u6e19\u6e1a\u6e1b\u6e1c\u6e1d\u6e1e\u6e1f\u6e20\u6e21\u6e22\u6e23\u6e24\u6e25\u6e26\u6e27\u6e28\u6e29\u6e2a\u6e2b\u6e2c\u6e2d\u6e2e\u6e2f\u6e30\u6e31\u6e32\u6e33\u6e34\u6e35\u6e36\u6e37\u6e38\u6e39\u6e3a\u6e3b\u6e3c\u6e3d\u6e3e\u6e3f\u6e40\u6e41\u6e42\u6e43\u6e44\u6e45\u6e46\u6e47\u6e48\u6e49\u6e4a\u6e4b\u6e4c\u6e4d\u6e4e\u6e4f\u6e50\u6e51\u6e52\u6e53\u6e54\u6e55\u6e56\u6e57\u6e58\u6e59\u6e5a\u6e5b\u6e5c\u6e5d\u6e5e\u6e5f\u6e60\u6e61\u6e62\u6e63\u6e64\u6e65\u6e66\u6e67\u6e68\u6e69\u6e6a\u6e6b\u6e6c\u6e6d\u6e6e\u6e6f\u6e70\u6e71\u6e72\u6e73\u6e74\u6e75\u6e76\u6e77\u6e78\u6e79\u6e7a\u6e7b\u6e7c\u6e7d\u6e7e\u6e7f\u6e80\u6e81\u6e82\u6e83\u6e84\u6e85\u6e86\u6e87\u6e88\u6e89\u6e8a\u6e8b\u6e8c\u6e8d\u6e8e\u6e8f\u6e90\u6e91\u6e92\u6e93\u6e94\u6e95\u6e96\u6e97\u6e98\u6e99\u6e9a\u6e9b\u6e9c\u6e9d\u6e9e\u6e9f\u6ea0\u6ea1\u6ea2\u6ea3\u6ea4\u6ea5\u6ea6\u6ea7\u6ea8\u6ea9\u6eaa\u6eab\u6eac\u6ead\u6eae\u6eaf\u6eb0\u6eb1\u6eb2\u6eb3\u6eb4\u6eb5\u6eb6\u6eb7\u6eb8\u6eb9\u6eba\u6ebb\u6ebc\u6ebd\u6ebe\u6ebf\u6ec0\u6ec1\u6ec2\u6ec3\u6ec4\u6ec5\u6ec6\u6ec7\u6ec8\u6ec9\u6eca\u6ecb\u6ecc\u6ecd\u6ece\u6ecf\u6ed0\u6ed1\u6ed2\u6ed3\u6ed4\u6ed5\u6ed6\u6ed7\u6ed8\u6ed9\u6eda\u6edb\u6edc\u6edd\u6ede\u6edf\u6ee0\u6ee1\u6ee2\u6ee3\u6ee4\u6ee5\u6ee6\u6ee7\u6ee8\u6ee9\u6eea\u6eeb\u6eec\u6eed\u6eee\u6eef\u6ef0\u6ef1\u6ef2\u6ef3\u6ef4\u6ef5\u6ef6\u6ef7\u6ef8\u6ef9\u6efa\u6efb\u6efc\u6efd\u6efe\u6eff\u6f00\u6f01\u6f02\u6f03\u6f04\u6f05\u6f06\u6f07\u6f08\u6f09\u6f0a\u6f0b\u6f0c\u6f0d\u6f0e\u6f0f\u6f10\u6f11\u6f12\u6f13\u6f14\u6f15\u6f16\u6f17\u6f18\u6f19\u6f1a\u6f1b\u6f1c\u6f1d\u6f1e\u6f1f\u6f20\u6f21\u6f22\u6f23\u6f24\u6f25\u6f26\u6f27\u6f28\u6f29\u6f2a\u6f2b\u6f2c\u6f2d\u6f2e\u6f2f\u6f30\u6f31\u6f32\u6f33\u6f34\u6f35\u6f36\u6f37\u6f38\u6f39\u6f3a\u6f3b\u6f3c\u6f3d\u6f3e\u6f3f\u6f40\u6f41\u6f42\u6f43\u6f44\u6f45\u6f46\u6f47\u6f48\u6f49\u6f4a\u6f4b\u6f4c\u6f4d\u6f4e\u6f4f\u6f50\u6f51\u6f52\u6f53\u6f54\u6f55\u6f56\u6f57\u6f58\u6f59\u6f5a\u6f5b\u6f5c\u6f5d\u6f5e\u6f5f\u6f60\u6f61\u6f62\u6f63\u6f64\u6f65\u6f66\u6f67\u6f68\u6f69\u6f6a\u6f6b\u6f6c\u6f6d\u6f6e\u6f6f\u6f70\u6f71\u6f72\u6f73\u6f74\u6f75\u6f76\u6f77\u6f78\u6f79\u6f7a\u6f7b\u6f7c\u6f7d\u6f7e\u6f7f\u6f80\u6f81\u6f82\u6f83\u6f84\u6f85\u6f86\u6f87\u6f88\u6f89\u6f8a\u6f8b\u6f8c\u6f8d\u6f8e\u6f8f\u6f90\u6f91\u6f92\u6f93\u6f94\u6f95\u6f96\u6f97\u6f98\u6f99\u6f9a\u6f9b\u6f9c\u6f9d\u6f9e\u6f9f\u6fa0\u6fa1\u6fa2\u6fa3\u6fa4\u6fa5\u6fa6\u6fa7\u6fa8\u6fa9\u6faa\u6fab\u6fac\u6fad\u6fae\u6faf\u6fb0\u6fb1\u6fb2\u6fb3\u6fb4\u6fb5\u6fb6\u6fb7\u6fb8\u6fb9\u6fba\u6fbb\u6fbc\u6fbd\u6fbe\u6fbf\u6fc0\u6fc1\u6fc2\u6fc3\u6fc4\u6fc5\u6fc6\u6fc7\u6fc8\u6fc9\u6fca\u6fcb\u6fcc\u6fcd\u6fce\u6fcf\u6fd0\u6fd1\u6fd2\u6fd3\u6fd4\u6fd5\u6fd6\u6fd7\u6fd8\u6fd9\u6fda\u6fdb\u6fdc\u6fdd\u6fde\u6fdf\u6fe0\u6fe1\u6fe2\u6fe3\u6fe4\u6fe5\u6fe6\u6fe7\u6fe8\u6fe9\u6fea\u6feb\u6fec\u6fed\u6fee\u6fef\u6ff0\u6ff1\u6ff2\u6ff3\u6ff4\u6ff5\u6ff6\u6ff7\u6ff8\u6ff9\u6ffa\u6ffb\u6ffc\u6ffd\u6ffe\u6fff\u7000\u7001\u7002\u7003\u7004\u7005\u7006\u7007\u7008\u7009\u700a\u700b\u700c\u700d\u700e\u700f\u7010\u7011\u7012\u7013\u7014\u7015\u7016\u7017\u7018\u7019\u701a\u701b\u701c\u701d\u701e\u701f\u7020\u7021\u7022\u7023\u7024\u7025\u7026\u7027\u7028\u7029\u702a\u702b\u702c\u702d\u702e\u702f\u7030\u7031\u7032\u7033\u7034\u7035\u7036\u7037\u7038\u7039\u703a\u703b\u703c\u703d\u703e\u703f\u7040\u7041\u7042\u7043\u7044\u7045\u7046\u7047\u7048\u7049\u704a\u704b\u704c\u704d\u704e\u704f\u7050\u7051\u7052\u7053\u7054\u7055\u7056\u7057\u7058\u7059\u705a\u705b\u705c\u705d\u705e\u705f\u7060\u7061\u7062\u7063\u7064\u7065\u7066\u7067\u7068\u7069\u706a\u706b\u706c\u706d\u706e\u706f\u7070\u7071\u7072\u7073\u7074\u7075\u7076\u7077\u7078\u7079\u707a\u707b\u707c\u707d\u707e\u707f\u7080\u7081\u7082\u7083\u7084\u7085\u7086\u7087\u7088\u7089\u708a\u708b\u708c\u708d\u708e\u708f\u7090\u7091\u7092\u7093\u7094\u7095\u7096\u7097\u7098\u7099\u709a\u709b\u709c\u709d\u709e\u709f\u70a0\u70a1\u70a2\u70a3\u70a4\u70a5\u70a6\u70a7\u70a8\u70a9\u70aa\u70ab\u70ac\u70ad\u70ae\u70af\u70b0\u70b1\u70b2\u70b3\u70b4\u70b5\u70b6\u70b7\u70b8\u70b9\u70ba\u70bb\u70bc\u70bd\u70be\u70bf\u70c0\u70c1\u70c2\u70c3\u70c4\u70c5\u70c6\u70c7\u70c8\u70c9\u70ca\u70cb\u70cc\u70cd\u70ce\u70cf\u70d0\u70d1\u70d2\u70d3\u70d4\u70d5\u70d6\u70d7\u70d8\u70d9\u70da\u70db\u70dc\u70dd\u70de\u70df\u70e0\u70e1\u70e2\u70e3\u70e4\u70e5\u70e6\u70e7\u70e8\u70e9\u70ea\u70eb\u70ec\u70ed\u70ee\u70ef\u70f0\u70f1\u70f2\u70f3\u70f4\u70f5\u70f6\u70f7\u70f8\u70f9\u70fa\u70fb\u70fc\u70fd\u70fe\u70ff\u7100\u7101\u7102\u7103\u7104\u7105\u7106\u7107\u7108\u7109\u710a\u710b\u710c\u710d\u710e\u710f\u7110\u7111\u7112\u7113\u7114\u7115\u7116\u7117\u7118\u7119\u711a\u711b\u711c\u711d\u711e\u711f\u7120\u7121\u7122\u7123\u7124\u7125\u7126\u7127\u7128\u7129\u712a\u712b\u712c\u712d\u712e\u712f\u7130\u7131\u7132\u7133\u7134\u7135\u7136\u7137\u7138\u7139\u713a\u713b\u713c\u713d\u713e\u713f\u7140\u7141\u7142\u7143\u7144\u7145\u7146\u7147\u7148\u7149\u714a\u714b\u714c\u714d\u714e\u714f\u7150\u7151\u7152\u7153\u7154\u7155\u7156\u7157\u7158\u7159\u715a\u715b\u715c\u715d\u715e\u715f\u7160\u7161\u7162\u7163\u7164\u7165\u7166\u7167\u7168\u7169\u716a\u716b\u716c\u716d\u716e\u716f\u7170\u7171\u7172\u7173\u7174\u7175\u7176\u7177\u7178\u7179\u717a\u717b\u717c\u717d\u717e\u717f\u7180\u7181\u7182\u7183\u7184\u7185\u7186\u7187\u7188\u7189\u718a\u718b\u718c\u718d\u718e\u718f\u7190\u7191\u7192\u7193\u7194\u7195\u7196\u7197\u7198\u7199\u719a\u719b\u719c\u719d\u719e\u719f\u71a0\u71a1\u71a2\u71a3\u71a4\u71a5\u71a6\u71a7\u71a8\u71a9\u71aa\u71ab\u71ac\u71ad\u71ae\u71af\u71b0\u71b1\u71b2\u71b3\u71b4\u71b5\u71b6\u71b7\u71b8\u71b9\u71ba\u71bb\u71bc\u71bd\u71be\u71bf\u71c0\u71c1\u71c2\u71c3\u71c4\u71c5\u71c6\u71c7\u71c8\u71c9\u71ca\u71cb\u71cc\u71cd\u71ce\u71cf\u71d0\u71d1\u71d2\u71d3\u71d4\u71d5\u71d6\u71d7\u71d8\u71d9\u71da\u71db\u71dc\u71dd\u71de\u71df\u71e0\u71e1\u71e2\u71e3\u71e4\u71e5\u71e6\u71e7\u71e8\u71e9\u71ea\u71eb\u71ec\u71ed\u71ee\u71ef\u71f0\u71f1\u71f2\u71f3\u71f4\u71f5\u71f6\u71f7\u71f8\u71f9\u71fa\u71fb\u71fc\u71fd\u71fe\u71ff\u7200\u7201\u7202\u7203\u7204\u7205\u7206\u7207\u7208\u7209\u720a\u720b\u720c\u720d\u720e\u720f\u7210\u7211\u7212\u7213\u7214\u7215\u7216\u7217\u7218\u7219\u721a\u721b\u721c\u721d\u721e\u721f\u7220\u7221\u7222\u7223\u7224\u7225\u7226\u7227\u7228\u7229\u722a\u722b\u722c\u722d\u722e\u722f\u7230\u7231\u7232\u7233\u7234\u7235\u7236\u7237\u7238\u7239\u723a\u723b\u723c\u723d\u723e\u723f\u7240\u7241\u7242\u7243\u7244\u7245\u7246\u7247\u7248\u7249\u724a\u724b\u724c\u724d\u724e\u724f\u7250\u7251\u7252\u7253\u7254\u7255\u7256\u7257\u7258\u7259\u725a\u725b\u725c\u725d\u725e\u725f\u7260\u7261\u7262\u7263\u7264\u7265\u7266\u7267\u7268\u7269\u726a\u726b\u726c\u726d\u726e\u726f\u7270\u7271\u7272\u7273\u7274\u7275\u7276\u7277\u7278\u7279\u727a\u727b\u727c\u727d\u727e\u727f\u7280\u7281\u7282\u7283\u7284\u7285\u7286\u7287\u7288\u7289\u728a\u728b\u728c\u728d\u728e\u728f\u7290\u7291\u7292\u7293\u7294\u7295\u7296\u7297\u7298\u7299\u729a\u729b\u729c\u729d\u729e\u729f\u72a0\u72a1\u72a2\u72a3\u72a4\u72a5\u72a6\u72a7\u72a8\u72a9\u72aa\u72ab\u72ac\u72ad\u72ae\u72af\u72b0\u72b1\u72b2\u72b3\u72b4\u72b5\u72b6\u72b7\u72b8\u72b9\u72ba\u72bb\u72bc\u72bd\u72be\u72bf\u72c0\u72c1\u72c2\u72c3\u72c4\u72c5\u72c6\u72c7\u72c8\u72c9\u72ca\u72cb\u72cc\u72cd\u72ce\u72cf\u72d0\u72d1\u72d2\u72d3\u72d4\u72d5\u72d6\u72d7\u72d8\u72d9\u72da\u72db\u72dc\u72dd\u72de\u72df\u72e0\u72e1\u72e2\u72e3\u72e4\u72e5\u72e6\u72e7\u72e8\u72e9\u72ea\u72eb\u72ec\u72ed\u72ee\u72ef\u72f0\u72f1\u72f2\u72f3\u72f4\u72f5\u72f6\u72f7\u72f8\u72f9\u72fa\u72fb\u72fc\u72fd\u72fe\u72ff\u7300\u7301\u7302\u7303\u7304\u7305\u7306\u7307\u7308\u7309\u730a\u730b\u730c\u730d\u730e\u730f\u7310\u7311\u7312\u7313\u7314\u7315\u7316\u7317\u7318\u7319\u731a\u731b\u731c\u731d\u731e\u731f\u7320\u7321\u7322\u7323\u7324\u7325\u7326\u7327\u7328\u7329\u732a\u732b\u732c\u732d\u732e\u732f\u7330\u7331\u7332\u7333\u7334\u7335\u7336\u7337\u7338\u7339\u733a\u733b\u733c\u733d\u733e\u733f\u7340\u7341\u7342\u7343\u7344\u7345\u7346\u7347\u7348\u7349\u734a\u734b\u734c\u734d\u734e\u734f\u7350\u7351\u7352\u7353\u7354\u7355\u7356\u7357\u7358\u7359\u735a\u735b\u735c\u735d\u735e\u735f\u7360\u7361\u7362\u7363\u7364\u7365\u7366\u7367\u7368\u7369\u736a\u736b\u736c\u736d\u736e\u736f\u7370\u7371\u7372\u7373\u7374\u7375\u7376\u7377\u7378\u7379\u737a\u737b\u737c\u737d\u737e\u737f\u7380\u7381\u7382\u7383\u7384\u7385\u7386\u7387\u7388\u7389\u738a\u738b\u738c\u738d\u738e\u738f\u7390\u7391\u7392\u7393\u7394\u7395\u7396\u7397\u7398\u7399\u739a\u739b\u739c\u739d\u739e\u739f\u73a0\u73a1\u73a2\u73a3\u73a4\u73a5\u73a6\u73a7\u73a8\u73a9\u73aa\u73ab\u73ac\u73ad\u73ae\u73af\u73b0\u73b1\u73b2\u73b3\u73b4\u73b5\u73b6\u73b7\u73b8\u73b9\u73ba\u73bb\u73bc\u73bd\u73be\u73bf\u73c0\u73c1\u73c2\u73c3\u73c4\u73c5\u73c6\u73c7\u73c8\u73c9\u73ca\u73cb\u73cc\u73cd\u73ce\u73cf\u73d0\u73d1\u73d2\u73d3\u73d4\u73d5\u73d6\u73d7\u73d8\u73d9\u73da\u73db\u73dc\u73dd\u73de\u73df\u73e0\u73e1\u73e2\u73e3\u73e4\u73e5\u73e6\u73e7\u73e8\u73e9\u73ea\u73eb\u73ec\u73ed\u73ee\u73ef\u73f0\u73f1\u73f2\u73f3\u73f4\u73f5\u73f6\u73f7\u73f8\u73f9\u73fa\u73fb\u73fc\u73fd\u73fe\u73ff\u7400\u7401\u7402\u7403\u7404\u7405\u7406\u7407\u7408\u7409\u740a\u740b\u740c\u740d\u740e\u740f\u7410\u7411\u7412\u7413\u7414\u7415\u7416\u7417\u7418\u7419\u741a\u741b\u741c\u741d\u741e\u741f\u7420\u7421\u7422\u7423\u7424\u7425\u7426\u7427\u7428\u7429\u742a\u742b\u742c\u742d\u742e\u742f\u7430\u7431\u7432\u7433\u7434\u7435\u7436\u7437\u7438\u7439\u743a\u743b\u743c\u743d\u743e\u743f\u7440\u7441\u7442\u7443\u7444\u7445\u7446\u7447\u7448\u7449\u744a\u744b\u744c\u744d\u744e\u744f\u7450\u7451\u7452\u7453\u7454\u7455\u7456\u7457\u7458\u7459\u745a\u745b\u745c\u745d\u745e\u745f\u7460\u7461\u7462\u7463\u7464\u7465\u7466\u7467\u7468\u7469\u746a\u746b\u746c\u746d\u746e\u746f\u7470\u7471\u7472\u7473\u7474\u7475\u7476\u7477\u7478\u7479\u747a\u747b\u747c\u747d\u747e\u747f\u7480\u7481\u7482\u7483\u7484\u7485\u7486\u7487\u7488\u7489\u748a\u748b\u748c\u748d\u748e\u748f\u7490\u7491\u7492\u7493\u7494\u7495\u7496\u7497\u7498\u7499\u749a\u749b\u749c\u749d\u749e\u749f\u74a0\u74a1\u74a2\u74a3\u74a4\u74a5\u74a6\u74a7\u74a8\u74a9\u74aa\u74ab\u74ac\u74ad\u74ae\u74af\u74b0\u74b1\u74b2\u74b3\u74b4\u74b5\u74b6\u74b7\u74b8\u74b9\u74ba\u74bb\u74bc\u74bd\u74be\u74bf\u74c0\u74c1\u74c2\u74c3\u74c4\u74c5\u74c6\u74c7\u74c8\u74c9\u74ca\u74cb\u74cc\u74cd\u74ce\u74cf\u74d0\u74d1\u74d2\u74d3\u74d4\u74d5\u74d6\u74d7\u74d8\u74d9\u74da\u74db\u74dc\u74dd\u74de\u74df\u74e0\u74e1\u74e2\u74e3\u74e4\u74e5\u74e6\u74e7\u74e8\u74e9\u74ea\u74eb\u74ec\u74ed\u74ee\u74ef\u74f0\u74f1\u74f2\u74f3\u74f4\u74f5\u74f6\u74f7\u74f8\u74f9\u74fa\u74fb\u74fc\u74fd\u74fe\u74ff\u7500\u7501\u7502\u7503\u7504\u7505\u7506\u7507\u7508\u7509\u750a\u750b\u750c\u750d\u750e\u750f\u7510\u7511\u7512\u7513\u7514\u7515\u7516\u7517\u7518\u7519\u751a\u751b\u751c\u751d\u751e\u751f\u7520\u7521\u7522\u7523\u7524\u7525\u7526\u7527\u7528\u7529\u752a\u752b\u752c\u752d\u752e\u752f\u7530\u7531\u7532\u7533\u7534\u7535\u7536\u7537\u7538\u7539\u753a\u753b\u753c\u753d\u753e\u753f\u7540\u7541\u7542\u7543\u7544\u7545\u7546\u7547\u7548\u7549\u754a\u754b\u754c\u754d\u754e\u754f\u7550\u7551\u7552\u7553\u7554\u7555\u7556\u7557\u7558\u7559\u755a\u755b\u755c\u755d\u755e\u755f\u7560\u7561\u7562\u7563\u7564\u7565\u7566\u7567\u7568\u7569\u756a\u756b\u756c\u756d\u756e\u756f\u7570\u7571\u7572\u7573\u7574\u7575\u7576\u7577\u7578\u7579\u757a\u757b\u757c\u757d\u757e\u757f\u7580\u7581\u7582\u7583\u7584\u7585\u7586\u7587\u7588\u7589\u758a\u758b\u758c\u758d\u758e\u758f\u7590\u7591\u7592\u7593\u7594\u7595\u7596\u7597\u7598\u7599\u759a\u759b\u759c\u759d\u759e\u759f\u75a0\u75a1\u75a2\u75a3\u75a4\u75a5\u75a6\u75a7\u75a8\u75a9\u75aa\u75ab\u75ac\u75ad\u75ae\u75af\u75b0\u75b1\u75b2\u75b3\u75b4\u75b5\u75b6\u75b7\u75b8\u75b9\u75ba\u75bb\u75bc\u75bd\u75be\u75bf\u75c0\u75c1\u75c2\u75c3\u75c4\u75c5\u75c6\u75c7\u75c8\u75c9\u75ca\u75cb\u75cc\u75cd\u75ce\u75cf\u75d0\u75d1\u75d2\u75d3\u75d4\u75d5\u75d6\u75d7\u75d8\u75d9\u75da\u75db\u75dc\u75dd\u75de\u75df\u75e0\u75e1\u75e2\u75e3\u75e4\u75e5\u75e6\u75e7\u75e8\u75e9\u75ea\u75eb\u75ec\u75ed\u75ee\u75ef\u75f0\u75f1\u75f2\u75f3\u75f4\u75f5\u75f6\u75f7\u75f8\u75f9\u75fa\u75fb\u75fc\u75fd\u75fe\u75ff\u7600\u7601\u7602\u7603\u7604\u7605\u7606\u7607\u7608\u7609\u760a\u760b\u760c\u760d\u760e\u760f\u7610\u7611\u7612\u7613\u7614\u7615\u7616\u7617\u7618\u7619\u761a\u761b\u761c\u761d\u761e\u761f\u7620\u7621\u7622\u7623\u7624\u7625\u7626\u7627\u7628\u7629\u762a\u762b\u762c\u762d\u762e\u762f\u7630\u7631\u7632\u7633\u7634\u7635\u7636\u7637\u7638\u7639\u763a\u763b\u763c\u763d\u763e\u763f\u7640\u7641\u7642\u7643\u7644\u7645\u7646\u7647\u7648\u7649\u764a\u764b\u764c\u764d\u764e\u764f\u7650\u7651\u7652\u7653\u7654\u7655\u7656\u7657\u7658\u7659\u765a\u765b\u765c\u765d\u765e\u765f\u7660\u7661\u7662\u7663\u7664\u7665\u7666\u7667\u7668\u7669\u766a\u766b\u766c\u766d\u766e\u766f\u7670\u7671\u7672\u7673\u7674\u7675\u7676\u7677\u7678\u7679\u767a\u767b\u767c\u767d\u767e\u767f\u7680\u7681\u7682\u7683\u7684\u7685\u7686\u7687\u7688\u7689\u768a\u768b\u768c\u768d\u768e\u768f\u7690\u7691\u7692\u7693\u7694\u7695\u7696\u7697\u7698\u7699\u769a\u769b\u769c\u769d\u769e\u769f\u76a0\u76a1\u76a2\u76a3\u76a4\u76a5\u76a6\u76a7\u76a8\u76a9\u76aa\u76ab\u76ac\u76ad\u76ae\u76af\u76b0\u76b1\u76b2\u76b3\u76b4\u76b5\u76b6\u76b7\u76b8\u76b9\u76ba\u76bb\u76bc\u76bd\u76be\u76bf\u76c0\u76c1\u76c2\u76c3\u76c4\u76c5\u76c6\u76c7\u76c8\u76c9\u76ca\u76cb\u76cc\u76cd\u76ce\u76cf\u76d0\u76d1\u76d2\u76d3\u76d4\u76d5\u76d6\u76d7\u76d8\u76d9\u76da\u76db\u76dc\u76dd\u76de\u76df\u76e0\u76e1\u76e2\u76e3\u76e4\u76e5\u76e6\u76e7\u76e8\u76e9\u76ea\u76eb\u76ec\u76ed\u76ee\u76ef\u76f0\u76f1\u76f2\u76f3\u76f4\u76f5\u76f6\u76f7\u76f8\u76f9\u76fa\u76fb\u76fc\u76fd\u76fe\u76ff\u7700\u7701\u7702\u7703\u7704\u7705\u7706\u7707\u7708\u7709\u770a\u770b\u770c\u770d\u770e\u770f\u7710\u7711\u7712\u7713\u7714\u7715\u7716\u7717\u7718\u7719\u771a\u771b\u771c\u771d\u771e\u771f\u7720\u7721\u7722\u7723\u7724\u7725\u7726\u7727\u7728\u7729\u772a\u772b\u772c\u772d\u772e\u772f\u7730\u7731\u7732\u7733\u7734\u7735\u7736\u7737\u7738\u7739\u773a\u773b\u773c\u773d\u773e\u773f\u7740\u7741\u7742\u7743\u7744\u7745\u7746\u7747\u7748\u7749\u774a\u774b\u774c\u774d\u774e\u774f\u7750\u7751\u7752\u7753\u7754\u7755\u7756\u7757\u7758\u7759\u775a\u775b\u775c\u775d\u775e\u775f\u7760\u7761\u7762\u7763\u7764\u7765\u7766\u7767\u7768\u7769\u776a\u776b\u776c\u776d\u776e\u776f\u7770\u7771\u7772\u7773\u7774\u7775\u7776\u7777\u7778\u7779\u777a\u777b\u777c\u777d\u777e\u777f\u7780\u7781\u7782\u7783\u7784\u7785\u7786\u7787\u7788\u7789\u778a\u778b\u778c\u778d\u778e\u778f\u7790\u7791\u7792\u7793\u7794\u7795\u7796\u7797\u7798\u7799\u779a\u779b\u779c\u779d\u779e\u779f\u77a0\u77a1\u77a2\u77a3\u77a4\u77a5\u77a6\u77a7\u77a8\u77a9\u77aa\u77ab\u77ac\u77ad\u77ae\u77af\u77b0\u77b1\u77b2\u77b3\u77b4\u77b5\u77b6\u77b7\u77b8\u77b9\u77ba\u77bb\u77bc\u77bd\u77be\u77bf\u77c0\u77c1\u77c2\u77c3\u77c4\u77c5\u77c6\u77c7\u77c8\u77c9\u77ca\u77cb\u77cc\u77cd\u77ce\u77cf\u77d0\u77d1\u77d2\u77d3\u77d4\u77d5\u77d6\u77d7\u77d8\u77d9\u77da\u77db\u77dc\u77dd\u77de\u77df\u77e0\u77e1\u77e2\u77e3\u77e4\u77e5\u77e6\u77e7\u77e8\u77e9\u77ea\u77eb\u77ec\u77ed\u77ee\u77ef\u77f0\u77f1\u77f2\u77f3\u77f4\u77f5\u77f6\u77f7\u77f8\u77f9\u77fa\u77fb\u77fc\u77fd\u77fe\u77ff\u7800\u7801\u7802\u7803\u7804\u7805\u7806\u7807\u7808\u7809\u780a\u780b\u780c\u780d\u780e\u780f\u7810\u7811\u7812\u7813\u7814\u7815\u7816\u7817\u7818\u7819\u781a\u781b\u781c\u781d\u781e\u781f\u7820\u7821\u7822\u7823\u7824\u7825\u7826\u7827\u7828\u7829\u782a\u782b\u782c\u782d\u782e\u782f\u7830\u7831\u7832\u7833\u7834\u7835\u7836\u7837\u7838\u7839\u783a\u783b\u783c\u783d\u783e\u783f\u7840\u7841\u7842\u7843\u7844\u7845\u7846\u7847\u7848\u7849\u784a\u784b\u784c\u784d\u784e\u784f\u7850\u7851\u7852\u7853\u7854\u7855\u7856\u7857\u7858\u7859\u785a\u785b\u785c\u785d\u785e\u785f\u7860\u7861\u7862\u7863\u7864\u7865\u7866\u7867\u7868\u7869\u786a\u786b\u786c\u786d\u786e\u786f\u7870\u7871\u7872\u7873\u7874\u7875\u7876\u7877\u7878\u7879\u787a\u787b\u787c\u787d\u787e\u787f\u7880\u7881\u7882\u7883\u7884\u7885\u7886\u7887\u7888\u7889\u788a\u788b\u788c\u788d\u788e\u788f\u7890\u7891\u7892\u7893\u7894\u7895\u7896\u7897\u7898\u7899\u789a\u789b\u789c\u789d\u789e\u789f\u78a0\u78a1\u78a2\u78a3\u78a4\u78a5\u78a6\u78a7\u78a8\u78a9\u78aa\u78ab\u78ac\u78ad\u78ae\u78af\u78b0\u78b1\u78b2\u78b3\u78b4\u78b5\u78b6\u78b7\u78b8\u78b9\u78ba\u78bb\u78bc\u78bd\u78be\u78bf\u78c0\u78c1\u78c2\u78c3\u78c4\u78c5\u78c6\u78c7\u78c8\u78c9\u78ca\u78cb\u78cc\u78cd\u78ce\u78cf\u78d0\u78d1\u78d2\u78d3\u78d4\u78d5\u78d6\u78d7\u78d8\u78d9\u78da\u78db\u78dc\u78dd\u78de\u78df\u78e0\u78e1\u78e2\u78e3\u78e4\u78e5\u78e6\u78e7\u78e8\u78e9\u78ea\u78eb\u78ec\u78ed\u78ee\u78ef\u78f0\u78f1\u78f2\u78f3\u78f4\u78f5\u78f6\u78f7\u78f8\u78f9\u78fa\u78fb\u78fc\u78fd\u78fe\u78ff\u7900\u7901\u7902\u7903\u7904\u7905\u7906\u7907\u7908\u7909\u790a\u790b\u790c\u790d\u790e\u790f\u7910\u7911\u7912\u7913\u7914\u7915\u7916\u7917\u7918\u7919\u791a\u791b\u791c\u791d\u791e\u791f\u7920\u7921\u7922\u7923\u7924\u7925\u7926\u7927\u7928\u7929\u792a\u792b\u792c\u792d\u792e\u792f\u7930\u7931\u7932\u7933\u7934\u7935\u7936\u7937\u7938\u7939\u793a\u793b\u793c\u793d\u793e\u793f\u7940\u7941\u7942\u7943\u7944\u7945\u7946\u7947\u7948\u7949\u794a\u794b\u794c\u794d\u794e\u794f\u7950\u7951\u7952\u7953\u7954\u7955\u7956\u7957\u7958\u7959\u795a\u795b\u795c\u795d\u795e\u795f\u7960\u7961\u7962\u7963\u7964\u7965\u7966\u7967\u7968\u7969\u796a\u796b\u796c\u796d\u796e\u796f\u7970\u7971\u7972\u7973\u7974\u7975\u7976\u7977\u7978\u7979\u797a\u797b\u797c\u797d\u797e\u797f\u7980\u7981\u7982\u7983\u7984\u7985\u7986\u7987\u7988\u7989\u798a\u798b\u798c\u798d\u798e\u798f\u7990\u7991\u7992\u7993\u7994\u7995\u7996\u7997\u7998\u7999\u799a\u799b\u799c\u799d\u799e\u799f\u79a0\u79a1\u79a2\u79a3\u79a4\u79a5\u79a6\u79a7\u79a8\u79a9\u79aa\u79ab\u79ac\u79ad\u79ae\u79af\u79b0\u79b1\u79b2\u79b3\u79b4\u79b5\u79b6\u79b7\u79b8\u79b9\u79ba\u79bb\u79bc\u79bd\u79be\u79bf\u79c0\u79c1\u79c2\u79c3\u79c4\u79c5\u79c6\u79c7\u79c8\u79c9\u79ca\u79cb\u79cc\u79cd\u79ce\u79cf\u79d0\u79d1\u79d2\u79d3\u79d4\u79d5\u79d6\u79d7\u79d8\u79d9\u79da\u79db\u79dc\u79dd\u79de\u79df\u79e0\u79e1\u79e2\u79e3\u79e4\u79e5\u79e6\u79e7\u79e8\u79e9\u79ea\u79eb\u79ec\u79ed\u79ee\u79ef\u79f0\u79f1\u79f2\u79f3\u79f4\u79f5\u79f6\u79f7\u79f8\u79f9\u79fa\u79fb\u79fc\u79fd\u79fe\u79ff\u7a00\u7a01\u7a02\u7a03\u7a04\u7a05\u7a06\u7a07\u7a08\u7a09\u7a0a\u7a0b\u7a0c\u7a0d\u7a0e\u7a0f\u7a10\u7a11\u7a12\u7a13\u7a14\u7a15\u7a16\u7a17\u7a18\u7a19\u7a1a\u7a1b\u7a1c\u7a1d\u7a1e\u7a1f\u7a20\u7a21\u7a22\u7a23\u7a24\u7a25\u7a26\u7a27\u7a28\u7a29\u7a2a\u7a2b\u7a2c\u7a2d\u7a2e\u7a2f\u7a30\u7a31\u7a32\u7a33\u7a34\u7a35\u7a36\u7a37\u7a38\u7a39\u7a3a\u7a3b\u7a3c\u7a3d\u7a3e\u7a3f\u7a40\u7a41\u7a42\u7a43\u7a44\u7a45\u7a46\u7a47\u7a48\u7a49\u7a4a\u7a4b\u7a4c\u7a4d\u7a4e\u7a4f\u7a50\u7a51\u7a52\u7a53\u7a54\u7a55\u7a56\u7a57\u7a58\u7a59\u7a5a\u7a5b\u7a5c\u7a5d\u7a5e\u7a5f\u7a60\u7a61\u7a62\u7a63\u7a64\u7a65\u7a66\u7a67\u7a68\u7a69\u7a6a\u7a6b\u7a6c\u7a6d\u7a6e\u7a6f\u7a70\u7a71\u7a72\u7a73\u7a74\u7a75\u7a76\u7a77\u7a78\u7a79\u7a7a\u7a7b\u7a7c\u7a7d\u7a7e\u7a7f\u7a80\u7a81\u7a82\u7a83\u7a84\u7a85\u7a86\u7a87\u7a88\u7a89\u7a8a\u7a8b\u7a8c\u7a8d\u7a8e\u7a8f\u7a90\u7a91\u7a92\u7a93\u7a94\u7a95\u7a96\u7a97\u7a98\u7a99\u7a9a\u7a9b\u7a9c\u7a9d\u7a9e\u7a9f\u7aa0\u7aa1\u7aa2\u7aa3\u7aa4\u7aa5\u7aa6\u7aa7\u7aa8\u7aa9\u7aaa\u7aab\u7aac\u7aad\u7aae\u7aaf\u7ab0\u7ab1\u7ab2\u7ab3\u7ab4\u7ab5\u7ab6\u7ab7\u7ab8\u7ab9\u7aba\u7abb\u7abc\u7abd\u7abe\u7abf\u7ac0\u7ac1\u7ac2\u7ac3\u7ac4\u7ac5\u7ac6\u7ac7\u7ac8\u7ac9\u7aca\u7acb\u7acc\u7acd\u7ace\u7acf\u7ad0\u7ad1\u7ad2\u7ad3\u7ad4\u7ad5\u7ad6\u7ad7\u7ad8\u7ad9\u7ada\u7adb\u7adc\u7add\u7ade\u7adf\u7ae0\u7ae1\u7ae2\u7ae3\u7ae4\u7ae5\u7ae6\u7ae7\u7ae8\u7ae9\u7aea\u7aeb\u7aec\u7aed\u7aee\u7aef\u7af0\u7af1\u7af2\u7af3\u7af4\u7af5\u7af6\u7af7\u7af8\u7af9\u7afa\u7afb\u7afc\u7afd\u7afe\u7aff\u7b00\u7b01\u7b02\u7b03\u7b04\u7b05\u7b06\u7b07\u7b08\u7b09\u7b0a\u7b0b\u7b0c\u7b0d\u7b0e\u7b0f\u7b10\u7b11\u7b12\u7b13\u7b14\u7b15\u7b16\u7b17\u7b18\u7b19\u7b1a\u7b1b\u7b1c\u7b1d\u7b1e\u7b1f\u7b20\u7b21\u7b22\u7b23\u7b24\u7b25\u7b26\u7b27\u7b28\u7b29\u7b2a\u7b2b\u7b2c\u7b2d\u7b2e\u7b2f\u7b30\u7b31\u7b32\u7b33\u7b34\u7b35\u7b36\u7b37\u7b38\u7b39\u7b3a\u7b3b\u7b3c\u7b3d\u7b3e\u7b3f\u7b40\u7b41\u7b42\u7b43\u7b44\u7b45\u7b46\u7b47\u7b48\u7b49\u7b4a\u7b4b\u7b4c\u7b4d\u7b4e\u7b4f\u7b50\u7b51\u7b52\u7b53\u7b54\u7b55\u7b56\u7b57\u7b58\u7b59\u7b5a\u7b5b\u7b5c\u7b5d\u7b5e\u7b5f\u7b60\u7b61\u7b62\u7b63\u7b64\u7b65\u7b66\u7b67\u7b68\u7b69\u7b6a\u7b6b\u7b6c\u7b6d\u7b6e\u7b6f\u7b70\u7b71\u7b72\u7b73\u7b74\u7b75\u7b76\u7b77\u7b78\u7b79\u7b7a\u7b7b\u7b7c\u7b7d\u7b7e\u7b7f\u7b80\u7b81\u7b82\u7b83\u7b84\u7b85\u7b86\u7b87\u7b88\u7b89\u7b8a\u7b8b\u7b8c\u7b8d\u7b8e\u7b8f\u7b90\u7b91\u7b92\u7b93\u7b94\u7b95\u7b96\u7b97\u7b98\u7b99\u7b9a\u7b9b\u7b9c\u7b9d\u7b9e\u7b9f\u7ba0\u7ba1\u7ba2\u7ba3\u7ba4\u7ba5\u7ba6\u7ba7\u7ba8\u7ba9\u7baa\u7bab\u7bac\u7bad\u7bae\u7baf\u7bb0\u7bb1\u7bb2\u7bb3\u7bb4\u7bb5\u7bb6\u7bb7\u7bb8\u7bb9\u7bba\u7bbb\u7bbc\u7bbd\u7bbe\u7bbf\u7bc0\u7bc1\u7bc2\u7bc3\u7bc4\u7bc5\u7bc6\u7bc7\u7bc8\u7bc9\u7bca\u7bcb\u7bcc\u7bcd\u7bce\u7bcf\u7bd0\u7bd1\u7bd2\u7bd3\u7bd4\u7bd5\u7bd6\u7bd7\u7bd8\u7bd9\u7bda\u7bdb\u7bdc\u7bdd\u7bde\u7bdf\u7be0\u7be1\u7be2\u7be3\u7be4\u7be5\u7be6\u7be7\u7be8\u7be9\u7bea\u7beb\u7bec\u7bed\u7bee\u7bef\u7bf0\u7bf1\u7bf2\u7bf3\u7bf4\u7bf5\u7bf6\u7bf7\u7bf8\u7bf9\u7bfa\u7bfb\u7bfc\u7bfd\u7bfe\u7bff\u7c00\u7c01\u7c02\u7c03\u7c04\u7c05\u7c06\u7c07\u7c08\u7c09\u7c0a\u7c0b\u7c0c\u7c0d\u7c0e\u7c0f\u7c10\u7c11\u7c12\u7c13\u7c14\u7c15\u7c16\u7c17\u7c18\u7c19\u7c1a\u7c1b\u7c1c\u7c1d\u7c1e\u7c1f\u7c20\u7c21\u7c22\u7c23\u7c24\u7c25\u7c26\u7c27\u7c28\u7c29\u7c2a\u7c2b\u7c2c\u7c2d\u7c2e\u7c2f\u7c30\u7c31\u7c32\u7c33\u7c34\u7c35\u7c36\u7c37\u7c38\u7c39\u7c3a\u7c3b\u7c3c\u7c3d\u7c3e\u7c3f\u7c40\u7c41\u7c42\u7c43\u7c44\u7c45\u7c46\u7c47\u7c48\u7c49\u7c4a\u7c4b\u7c4c\u7c4d\u7c4e\u7c4f\u7c50\u7c51\u7c52\u7c53\u7c54\u7c55\u7c56\u7c57\u7c58\u7c59\u7c5a\u7c5b\u7c5c\u7c5d\u7c5e\u7c5f\u7c60\u7c61\u7c62\u7c63\u7c64\u7c65\u7c66\u7c67\u7c68\u7c69\u7c6a\u7c6b\u7c6c\u7c6d\u7c6e\u7c6f\u7c70\u7c71\u7c72\u7c73\u7c74\u7c75\u7c76\u7c77\u7c78\u7c79\u7c7a\u7c7b\u7c7c\u7c7d\u7c7e\u7c7f\u7c80\u7c81\u7c82\u7c83\u7c84\u7c85\u7c86\u7c87\u7c88\u7c89\u7c8a\u7c8b\u7c8c\u7c8d\u7c8e\u7c8f\u7c90\u7c91\u7c92\u7c93\u7c94\u7c95\u7c96\u7c97\u7c98\u7c99\u7c9a\u7c9b\u7c9c\u7c9d\u7c9e\u7c9f\u7ca0\u7ca1\u7ca2\u7ca3\u7ca4\u7ca5\u7ca6\u7ca7\u7ca8\u7ca9\u7caa\u7cab\u7cac\u7cad\u7cae\u7caf\u7cb0\u7cb1\u7cb2\u7cb3\u7cb4\u7cb5\u7cb6\u7cb7\u7cb8\u7cb9\u7cba\u7cbb\u7cbc\u7cbd\u7cbe\u7cbf\u7cc0\u7cc1\u7cc2\u7cc3\u7cc4\u7cc5\u7cc6\u7cc7\u7cc8\u7cc9\u7cca\u7ccb\u7ccc\u7ccd\u7cce\u7ccf\u7cd0\u7cd1\u7cd2\u7cd3\u7cd4\u7cd5\u7cd6\u7cd7\u7cd8\u7cd9\u7cda\u7cdb\u7cdc\u7cdd\u7cde\u7cdf\u7ce0\u7ce1\u7ce2\u7ce3\u7ce4\u7ce5\u7ce6\u7ce7\u7ce8\u7ce9\u7cea\u7ceb\u7cec\u7ced\u7cee\u7cef\u7cf0\u7cf1\u7cf2\u7cf3\u7cf4\u7cf5\u7cf6\u7cf7\u7cf8\u7cf9\u7cfa\u7cfb\u7cfc\u7cfd\u7cfe\u7cff\u7d00\u7d01\u7d02\u7d03\u7d04\u7d05\u7d06\u7d07\u7d08\u7d09\u7d0a\u7d0b\u7d0c\u7d0d\u7d0e\u7d0f\u7d10\u7d11\u7d12\u7d13\u7d14\u7d15\u7d16\u7d17\u7d18\u7d19\u7d1a\u7d1b\u7d1c\u7d1d\u7d1e\u7d1f\u7d20\u7d21\u7d22\u7d23\u7d24\u7d25\u7d26\u7d27\u7d28\u7d29\u7d2a\u7d2b\u7d2c\u7d2d\u7d2e\u7d2f\u7d30\u7d31\u7d32\u7d33\u7d34\u7d35\u7d36\u7d37\u7d38\u7d39\u7d3a\u7d3b\u7d3c\u7d3d\u7d3e\u7d3f\u7d40\u7d41\u7d42\u7d43\u7d44\u7d45\u7d46\u7d47\u7d48\u7d49\u7d4a\u7d4b\u7d4c\u7d4d\u7d4e\u7d4f\u7d50\u7d51\u7d52\u7d53\u7d54\u7d55\u7d56\u7d57\u7d58\u7d59\u7d5a\u7d5b\u7d5c\u7d5d\u7d5e\u7d5f\u7d60\u7d61\u7d62\u7d63\u7d64\u7d65\u7d66\u7d67\u7d68\u7d69\u7d6a\u7d6b\u7d6c\u7d6d\u7d6e\u7d6f\u7d70\u7d71\u7d72\u7d73\u7d74\u7d75\u7d76\u7d77\u7d78\u7d79\u7d7a\u7d7b\u7d7c\u7d7d\u7d7e\u7d7f\u7d80\u7d81\u7d82\u7d83\u7d84\u7d85\u7d86\u7d87\u7d88\u7d89\u7d8a\u7d8b\u7d8c\u7d8d\u7d8e\u7d8f\u7d90\u7d91\u7d92\u7d93\u7d94\u7d95\u7d96\u7d97\u7d98\u7d99\u7d9a\u7d9b\u7d9c\u7d9d\u7d9e\u7d9f\u7da0\u7da1\u7da2\u7da3\u7da4\u7da5\u7da6\u7da7\u7da8\u7da9\u7daa\u7dab\u7dac\u7dad\u7dae\u7daf\u7db0\u7db1\u7db2\u7db3\u7db4\u7db5\u7db6\u7db7\u7db8\u7db9\u7dba\u7dbb\u7dbc\u7dbd\u7dbe\u7dbf\u7dc0\u7dc1\u7dc2\u7dc3\u7dc4\u7dc5\u7dc6\u7dc7\u7dc8\u7dc9\u7dca\u7dcb\u7dcc\u7dcd\u7dce\u7dcf\u7dd0\u7dd1\u7dd2\u7dd3\u7dd4\u7dd5\u7dd6\u7dd7\u7dd8\u7dd9\u7dda\u7ddb\u7ddc\u7ddd\u7dde\u7ddf\u7de0\u7de1\u7de2\u7de3\u7de4\u7de5\u7de6\u7de7\u7de8\u7de9\u7dea\u7deb\u7dec\u7ded\u7dee\u7def\u7df0\u7df1\u7df2\u7df3\u7df4\u7df5\u7df6\u7df7\u7df8\u7df9\u7dfa\u7dfb\u7dfc\u7dfd\u7dfe\u7dff\u7e00\u7e01\u7e02\u7e03\u7e04\u7e05\u7e06\u7e07\u7e08\u7e09\u7e0a\u7e0b\u7e0c\u7e0d\u7e0e\u7e0f\u7e10\u7e11\u7e12\u7e13\u7e14\u7e15\u7e16\u7e17\u7e18\u7e19\u7e1a\u7e1b\u7e1c\u7e1d\u7e1e\u7e1f\u7e20\u7e21\u7e22\u7e23\u7e24\u7e25\u7e26\u7e27\u7e28\u7e29\u7e2a\u7e2b\u7e2c\u7e2d\u7e2e\u7e2f\u7e30\u7e31\u7e32\u7e33\u7e34\u7e35\u7e36\u7e37\u7e38\u7e39\u7e3a\u7e3b\u7e3c\u7e3d\u7e3e\u7e3f\u7e40\u7e41\u7e42\u7e43\u7e44\u7e45\u7e46\u7e47\u7e48\u7e49\u7e4a\u7e4b\u7e4c\u7e4d\u7e4e\u7e4f\u7e50\u7e51\u7e52\u7e53\u7e54\u7e55\u7e56\u7e57\u7e58\u7e59\u7e5a\u7e5b\u7e5c\u7e5d\u7e5e\u7e5f\u7e60\u7e61\u7e62\u7e63\u7e64\u7e65\u7e66\u7e67\u7e68\u7e69\u7e6a\u7e6b\u7e6c\u7e6d\u7e6e\u7e6f\u7e70\u7e71\u7e72\u7e73\u7e74\u7e75\u7e76\u7e77\u7e78\u7e79\u7e7a\u7e7b\u7e7c\u7e7d\u7e7e\u7e7f\u7e80\u7e81\u7e82\u7e83\u7e84\u7e85\u7e86\u7e87\u7e88\u7e89\u7e8a\u7e8b\u7e8c\u7e8d\u7e8e\u7e8f\u7e90\u7e91\u7e92\u7e93\u7e94\u7e95\u7e96\u7e97\u7e98\u7e99\u7e9a\u7e9b\u7e9c\u7e9d\u7e9e\u7e9f\u7ea0\u7ea1\u7ea2\u7ea3\u7ea4\u7ea5\u7ea6\u7ea7\u7ea8\u7ea9\u7eaa\u7eab\u7eac\u7ead\u7eae\u7eaf\u7eb0\u7eb1\u7eb2\u7eb3\u7eb4\u7eb5\u7eb6\u7eb7\u7eb8\u7eb9\u7eba\u7ebb\u7ebc\u7ebd\u7ebe\u7ebf\u7ec0\u7ec1\u7ec2\u7ec3\u7ec4\u7ec5\u7ec6\u7ec7\u7ec8\u7ec9\u7eca\u7ecb\u7ecc\u7ecd\u7ece\u7ecf\u7ed0\u7ed1\u7ed2\u7ed3\u7ed4\u7ed5\u7ed6\u7ed7\u7ed8\u7ed9\u7eda\u7edb\u7edc\u7edd\u7ede\u7edf\u7ee0\u7ee1\u7ee2\u7ee3\u7ee4\u7ee5\u7ee6\u7ee7\u7ee8\u7ee9\u7eea\u7eeb\u7eec\u7eed\u7eee\u7eef\u7ef0\u7ef1\u7ef2\u7ef3\u7ef4\u7ef5\u7ef6\u7ef7\u7ef8\u7ef9\u7efa\u7efb\u7efc\u7efd\u7efe\u7eff\u7f00\u7f01\u7f02\u7f03\u7f04\u7f05\u7f06\u7f07\u7f08\u7f09\u7f0a\u7f0b\u7f0c\u7f0d\u7f0e\u7f0f\u7f10\u7f11\u7f12\u7f13\u7f14\u7f15\u7f16\u7f17\u7f18\u7f19\u7f1a\u7f1b\u7f1c\u7f1d\u7f1e\u7f1f\u7f20\u7f21\u7f22\u7f23\u7f24\u7f25\u7f26\u7f27\u7f28\u7f29\u7f2a\u7f2b\u7f2c\u7f2d\u7f2e\u7f2f\u7f30\u7f31\u7f32\u7f33\u7f34\u7f35\u7f36\u7f37\u7f38\u7f39\u7f3a\u7f3b\u7f3c\u7f3d\u7f3e\u7f3f\u7f40\u7f41\u7f42\u7f43\u7f44\u7f45\u7f46\u7f47\u7f48\u7f49\u7f4a\u7f4b\u7f4c\u7f4d\u7f4e\u7f4f\u7f50\u7f51\u7f52\u7f53\u7f54\u7f55\u7f56\u7f57\u7f58\u7f59\u7f5a\u7f5b\u7f5c\u7f5d\u7f5e\u7f5f\u7f60\u7f61\u7f62\u7f63\u7f64\u7f65\u7f66\u7f67\u7f68\u7f69\u7f6a\u7f6b\u7f6c\u7f6d\u7f6e\u7f6f\u7f70\u7f71\u7f72\u7f73\u7f74\u7f75\u7f76\u7f77\u7f78\u7f79\u7f7a\u7f7b\u7f7c\u7f7d\u7f7e\u7f7f\u7f80\u7f81\u7f82\u7f83\u7f84\u7f85\u7f86\u7f87\u7f88\u7f89\u7f8a\u7f8b\u7f8c\u7f8d\u7f8e\u7f8f\u7f90\u7f91\u7f92\u7f93\u7f94\u7f95\u7f96\u7f97\u7f98\u7f99\u7f9a\u7f9b\u7f9c\u7f9d\u7f9e\u7f9f\u7fa0\u7fa1\u7fa2\u7fa3\u7fa4\u7fa5\u7fa6\u7fa7\u7fa8\u7fa9\u7faa\u7fab\u7fac\u7fad\u7fae\u7faf\u7fb0\u7fb1\u7fb2\u7fb3\u7fb4\u7fb5\u7fb6\u7fb7\u7fb8\u7fb9\u7fba\u7fbb\u7fbc\u7fbd\u7fbe\u7fbf\u7fc0\u7fc1\u7fc2\u7fc3\u7fc4\u7fc5\u7fc6\u7fc7\u7fc8\u7fc9\u7fca\u7fcb\u7fcc\u7fcd\u7fce\u7fcf\u7fd0\u7fd1\u7fd2\u7fd3\u7fd4\u7fd5\u7fd6\u7fd7\u7fd8\u7fd9\u7fda\u7fdb\u7fdc\u7fdd\u7fde\u7fdf\u7fe0\u7fe1\u7fe2\u7fe3\u7fe4\u7fe5\u7fe6\u7fe7\u7fe8\u7fe9\u7fea\u7feb\u7fec\u7fed\u7fee\u7fef\u7ff0\u7ff1\u7ff2\u7ff3\u7ff4\u7ff5\u7ff6\u7ff7\u7ff8\u7ff9\u7ffa\u7ffb\u7ffc\u7ffd\u7ffe\u7fff\u8000\u8001\u8002\u8003\u8004\u8005\u8006\u8007\u8008\u8009\u800a\u800b\u800c\u800d\u800e\u800f\u8010\u8011\u8012\u8013\u8014\u8015\u8016\u8017\u8018\u8019\u801a\u801b\u801c\u801d\u801e\u801f\u8020\u8021\u8022\u8023\u8024\u8025\u8026\u8027\u8028\u8029\u802a\u802b\u802c\u802d\u802e\u802f\u8030\u8031\u8032\u8033\u8034\u8035\u8036\u8037\u8038\u8039\u803a\u803b\u803c\u803d\u803e\u803f\u8040\u8041\u8042\u8043\u8044\u8045\u8046\u8047\u8048\u8049\u804a\u804b\u804c\u804d\u804e\u804f\u8050\u8051\u8052\u8053\u8054\u8055\u8056\u8057\u8058\u8059\u805a\u805b\u805c\u805d\u805e\u805f\u8060\u8061\u8062\u8063\u8064\u8065\u8066\u8067\u8068\u8069\u806a\u806b\u806c\u806d\u806e\u806f\u8070\u8071\u8072\u8073\u8074\u8075\u8076\u8077\u8078\u8079\u807a\u807b\u807c\u807d\u807e\u807f\u8080\u8081\u8082\u8083\u8084\u8085\u8086\u8087\u8088\u8089\u808a\u808b\u808c\u808d\u808e\u808f\u8090\u8091\u8092\u8093\u8094\u8095\u8096\u8097\u8098\u8099\u809a\u809b\u809c\u809d\u809e\u809f\u80a0\u80a1\u80a2\u80a3\u80a4\u80a5\u80a6\u80a7\u80a8\u80a9\u80aa\u80ab\u80ac\u80ad\u80ae\u80af\u80b0\u80b1\u80b2\u80b3\u80b4\u80b5\u80b6\u80b7\u80b8\u80b9\u80ba\u80bb\u80bc\u80bd\u80be\u80bf\u80c0\u80c1\u80c2\u80c3\u80c4\u80c5\u80c6\u80c7\u80c8\u80c9\u80ca\u80cb\u80cc\u80cd\u80ce\u80cf\u80d0\u80d1\u80d2\u80d3\u80d4\u80d5\u80d6\u80d7\u80d8\u80d9\u80da\u80db\u80dc\u80dd\u80de\u80df\u80e0\u80e1\u80e2\u80e3\u80e4\u80e5\u80e6\u80e7\u80e8\u80e9\u80ea\u80eb\u80ec\u80ed\u80ee\u80ef\u80f0\u80f1\u80f2\u80f3\u80f4\u80f5\u80f6\u80f7\u80f8\u80f9\u80fa\u80fb\u80fc\u80fd\u80fe\u80ff\u8100\u8101\u8102\u8103\u8104\u8105\u8106\u8107\u8108\u8109\u810a\u810b\u810c\u810d\u810e\u810f\u8110\u8111\u8112\u8113\u8114\u8115\u8116\u8117\u8118\u8119\u811a\u811b\u811c\u811d\u811e\u811f\u8120\u8121\u8122\u8123\u8124\u8125\u8126\u8127\u8128\u8129\u812a\u812b\u812c\u812d\u812e\u812f\u8130\u8131\u8132\u8133\u8134\u8135\u8136\u8137\u8138\u8139\u813a\u813b\u813c\u813d\u813e\u813f\u8140\u8141\u8142\u8143\u8144\u8145\u8146\u8147\u8148\u8149\u814a\u814b\u814c\u814d\u814e\u814f\u8150\u8151\u8152\u8153\u8154\u8155\u8156\u8157\u8158\u8159\u815a\u815b\u815c\u815d\u815e\u815f\u8160\u8161\u8162\u8163\u8164\u8165\u8166\u8167\u8168\u8169\u816a\u816b\u816c\u816d\u816e\u816f\u8170\u8171\u8172\u8173\u8174\u8175\u8176\u8177\u8178\u8179\u817a\u817b\u817c\u817d\u817e\u817f\u8180\u8181\u8182\u8183\u8184\u8185\u8186\u8187\u8188\u8189\u818a\u818b\u818c\u818d\u818e\u818f\u8190\u8191\u8192\u8193\u8194\u8195\u8196\u8197\u8198\u8199\u819a\u819b\u819c\u819d\u819e\u819f\u81a0\u81a1\u81a2\u81a3\u81a4\u81a5\u81a6\u81a7\u81a8\u81a9\u81aa\u81ab\u81ac\u81ad\u81ae\u81af\u81b0\u81b1\u81b2\u81b3\u81b4\u81b5\u81b6\u81b7\u81b8\u81b9\u81ba\u81bb\u81bc\u81bd\u81be\u81bf\u81c0\u81c1\u81c2\u81c3\u81c4\u81c5\u81c6\u81c7\u81c8\u81c9\u81ca\u81cb\u81cc\u81cd\u81ce\u81cf\u81d0\u81d1\u81d2\u81d3\u81d4\u81d5\u81d6\u81d7\u81d8\u81d9\u81da\u81db\u81dc\u81dd\u81de\u81df\u81e0\u81e1\u81e2\u81e3\u81e4\u81e5\u81e6\u81e7\u81e8\u81e9\u81ea\u81eb\u81ec\u81ed\u81ee\u81ef\u81f0\u81f1\u81f2\u81f3\u81f4\u81f5\u81f6\u81f7\u81f8\u81f9\u81fa\u81fb\u81fc\u81fd\u81fe\u81ff\u8200\u8201\u8202\u8203\u8204\u8205\u8206\u8207\u8208\u8209\u820a\u820b\u820c\u820d\u820e\u820f\u8210\u8211\u8212\u8213\u8214\u8215\u8216\u8217\u8218\u8219\u821a\u821b\u821c\u821d\u821e\u821f\u8220\u8221\u8222\u8223\u8224\u8225\u8226\u8227\u8228\u8229\u822a\u822b\u822c\u822d\u822e\u822f\u8230\u8231\u8232\u8233\u8234\u8235\u8236\u8237\u8238\u8239\u823a\u823b\u823c\u823d\u823e\u823f\u8240\u8241\u8242\u8243\u8244\u8245\u8246\u8247\u8248\u8249\u824a\u824b\u824c\u824d\u824e\u824f\u8250\u8251\u8252\u8253\u8254\u8255\u8256\u8257\u8258\u8259\u825a\u825b\u825c\u825d\u825e\u825f\u8260\u8261\u8262\u8263\u8264\u8265\u8266\u8267\u8268\u8269\u826a\u826b\u826c\u826d\u826e\u826f\u8270\u8271\u8272\u8273\u8274\u8275\u8276\u8277\u8278\u8279\u827a\u827b\u827c\u827d\u827e\u827f\u8280\u8281\u8282\u8283\u8284\u8285\u8286\u8287\u8288\u8289\u828a\u828b\u828c\u828d\u828e\u828f\u8290\u8291\u8292\u8293\u8294\u8295\u8296\u8297\u8298\u8299\u829a\u829b\u829c\u829d\u829e\u829f\u82a0\u82a1\u82a2\u82a3\u82a4\u82a5\u82a6\u82a7\u82a8\u82a9\u82aa\u82ab\u82ac\u82ad\u82ae\u82af\u82b0\u82b1\u82b2\u82b3\u82b4\u82b5\u82b6\u82b7\u82b8\u82b9\u82ba\u82bb\u82bc\u82bd\u82be\u82bf\u82c0\u82c1\u82c2\u82c3\u82c4\u82c5\u82c6\u82c7\u82c8\u82c9\u82ca\u82cb\u82cc\u82cd\u82ce\u82cf\u82d0\u82d1\u82d2\u82d3\u82d4\u82d5\u82d6\u82d7\u82d8\u82d9\u82da\u82db\u82dc\u82dd\u82de\u82df\u82e0\u82e1\u82e2\u82e3\u82e4\u82e5\u82e6\u82e7\u82e8\u82e9\u82ea\u82eb\u82ec\u82ed\u82ee\u82ef\u82f0\u82f1\u82f2\u82f3\u82f4\u82f5\u82f6\u82f7\u82f8\u82f9\u82fa\u82fb\u82fc\u82fd\u82fe\u82ff\u8300\u8301\u8302\u8303\u8304\u8305\u8306\u8307\u8308\u8309\u830a\u830b\u830c\u830d\u830e\u830f\u8310\u8311\u8312\u8313\u8314\u8315\u8316\u8317\u8318\u8319\u831a\u831b\u831c\u831d\u831e\u831f\u8320\u8321\u8322\u8323\u8324\u8325\u8326\u8327\u8328\u8329\u832a\u832b\u832c\u832d\u832e\u832f\u8330\u8331\u8332\u8333\u8334\u8335\u8336\u8337\u8338\u8339\u833a\u833b\u833c\u833d\u833e\u833f\u8340\u8341\u8342\u8343\u8344\u8345\u8346\u8347\u8348\u8349\u834a\u834b\u834c\u834d\u834e\u834f\u8350\u8351\u8352\u8353\u8354\u8355\u8356\u8357\u8358\u8359\u835a\u835b\u835c\u835d\u835e\u835f\u8360\u8361\u8362\u8363\u8364\u8365\u8366\u8367\u8368\u8369\u836a\u836b\u836c\u836d\u836e\u836f\u8370\u8371\u8372\u8373\u8374\u8375\u8376\u8377\u8378\u8379\u837a\u837b\u837c\u837d\u837e\u837f\u8380\u8381\u8382\u8383\u8384\u8385\u8386\u8387\u8388\u8389\u838a\u838b\u838c\u838d\u838e\u838f\u8390\u8391\u8392\u8393\u8394\u8395\u8396\u8397\u8398\u8399\u839a\u839b\u839c\u839d\u839e\u839f\u83a0\u83a1\u83a2\u83a3\u83a4\u83a5\u83a6\u83a7\u83a8\u83a9\u83aa\u83ab\u83ac\u83ad\u83ae\u83af\u83b0\u83b1\u83b2\u83b3\u83b4\u83b5\u83b6\u83b7\u83b8\u83b9\u83ba\u83bb\u83bc\u83bd\u83be\u83bf\u83c0\u83c1\u83c2\u83c3\u83c4\u83c5\u83c6\u83c7\u83c8\u83c9\u83ca\u83cb\u83cc\u83cd\u83ce\u83cf\u83d0\u83d1\u83d2\u83d3\u83d4\u83d5\u83d6\u83d7\u83d8\u83d9\u83da\u83db\u83dc\u83dd\u83de\u83df\u83e0\u83e1\u83e2\u83e3\u83e4\u83e5\u83e6\u83e7\u83e8\u83e9\u83ea\u83eb\u83ec\u83ed\u83ee\u83ef\u83f0\u83f1\u83f2\u83f3\u83f4\u83f5\u83f6\u83f7\u83f8\u83f9\u83fa\u83fb\u83fc\u83fd\u83fe\u83ff\u8400\u8401\u8402\u8403\u8404\u8405\u8406\u8407\u8408\u8409\u840a\u840b\u840c\u840d\u840e\u840f\u8410\u8411\u8412\u8413\u8414\u8415\u8416\u8417\u8418\u8419\u841a\u841b\u841c\u841d\u841e\u841f\u8420\u8421\u8422\u8423\u8424\u8425\u8426\u8427\u8428\u8429\u842a\u842b\u842c\u842d\u842e\u842f\u8430\u8431\u8432\u8433\u8434\u8435\u8436\u8437\u8438\u8439\u843a\u843b\u843c\u843d\u843e\u843f\u8440\u8441\u8442\u8443\u8444\u8445\u8446\u8447\u8448\u8449\u844a\u844b\u844c\u844d\u844e\u844f\u8450\u8451\u8452\u8453\u8454\u8455\u8456\u8457\u8458\u8459\u845a\u845b\u845c\u845d\u845e\u845f\u8460\u8461\u8462\u8463\u8464\u8465\u8466\u8467\u8468\u8469\u846a\u846b\u846c\u846d\u846e\u846f\u8470\u8471\u8472\u8473\u8474\u8475\u8476\u8477\u8478\u8479\u847a\u847b\u847c\u847d\u847e\u847f\u8480\u8481\u8482\u8483\u8484\u8485\u8486\u8487\u8488\u8489\u848a\u848b\u848c\u848d\u848e\u848f\u8490\u8491\u8492\u8493\u8494\u8495\u8496\u8497\u8498\u8499\u849a\u849b\u849c\u849d\u849e\u849f\u84a0\u84a1\u84a2\u84a3\u84a4\u84a5\u84a6\u84a7\u84a8\u84a9\u84aa\u84ab\u84ac\u84ad\u84ae\u84af\u84b0\u84b1\u84b2\u84b3\u84b4\u84b5\u84b6\u84b7\u84b8\u84b9\u84ba\u84bb\u84bc\u84bd\u84be\u84bf\u84c0\u84c1\u84c2\u84c3\u84c4\u84c5\u84c6\u84c7\u84c8\u84c9\u84ca\u84cb\u84cc\u84cd\u84ce\u84cf\u84d0\u84d1\u84d2\u84d3\u84d4\u84d5\u84d6\u84d7\u84d8\u84d9\u84da\u84db\u84dc\u84dd\u84de\u84df\u84e0\u84e1\u84e2\u84e3\u84e4\u84e5\u84e6\u84e7\u84e8\u84e9\u84ea\u84eb\u84ec\u84ed\u84ee\u84ef\u84f0\u84f1\u84f2\u84f3\u84f4\u84f5\u84f6\u84f7\u84f8\u84f9\u84fa\u84fb\u84fc\u84fd\u84fe\u84ff\u8500\u8501\u8502\u8503\u8504\u8505\u8506\u8507\u8508\u8509\u850a\u850b\u850c\u850d\u850e\u850f\u8510\u8511\u8512\u8513\u8514\u8515\u8516\u8517\u8518\u8519\u851a\u851b\u851c\u851d\u851e\u851f\u8520\u8521\u8522\u8523\u8524\u8525\u8526\u8527\u8528\u8529\u852a\u852b\u852c\u852d\u852e\u852f\u8530\u8531\u8532\u8533\u8534\u8535\u8536\u8537\u8538\u8539\u853a\u853b\u853c\u853d\u853e\u853f\u8540\u8541\u8542\u8543\u8544\u8545\u8546\u8547\u8548\u8549\u854a\u854b\u854c\u854d\u854e\u854f\u8550\u8551\u8552\u8553\u8554\u8555\u8556\u8557\u8558\u8559\u855a\u855b\u855c\u855d\u855e\u855f\u8560\u8561\u8562\u8563\u8564\u8565\u8566\u8567\u8568\u8569\u856a\u856b\u856c\u856d\u856e\u856f\u8570\u8571\u8572\u8573\u8574\u8575\u8576\u8577\u8578\u8579\u857a\u857b\u857c\u857d\u857e\u857f\u8580\u8581\u8582\u8583\u8584\u8585\u8586\u8587\u8588\u8589\u858a\u858b\u858c\u858d\u858e\u858f\u8590\u8591\u8592\u8593\u8594\u8595\u8596\u8597\u8598\u8599\u859a\u859b\u859c\u859d\u859e\u859f\u85a0\u85a1\u85a2\u85a3\u85a4\u85a5\u85a6\u85a7\u85a8\u85a9\u85aa\u85ab\u85ac\u85ad\u85ae\u85af\u85b0\u85b1\u85b2\u85b3\u85b4\u85b5\u85b6\u85b7\u85b8\u85b9\u85ba\u85bb\u85bc\u85bd\u85be\u85bf\u85c0\u85c1\u85c2\u85c3\u85c4\u85c5\u85c6\u85c7\u85c8\u85c9\u85ca\u85cb\u85cc\u85cd\u85ce\u85cf\u85d0\u85d1\u85d2\u85d3\u85d4\u85d5\u85d6\u85d7\u85d8\u85d9\u85da\u85db\u85dc\u85dd\u85de\u85df\u85e0\u85e1\u85e2\u85e3\u85e4\u85e5\u85e6\u85e7\u85e8\u85e9\u85ea\u85eb\u85ec\u85ed\u85ee\u85ef\u85f0\u85f1\u85f2\u85f3\u85f4\u85f5\u85f6\u85f7\u85f8\u85f9\u85fa\u85fb\u85fc\u85fd\u85fe\u85ff\u8600\u8601\u8602\u8603\u8604\u8605\u8606\u8607\u8608\u8609\u860a\u860b\u860c\u860d\u860e\u860f\u8610\u8611\u8612\u8613\u8614\u8615\u8616\u8617\u8618\u8619\u861a\u861b\u861c\u861d\u861e\u861f\u8620\u8621\u8622\u8623\u8624\u8625\u8626\u8627\u8628\u8629\u862a\u862b\u862c\u862d\u862e\u862f\u8630\u8631\u8632\u8633\u8634\u8635\u8636\u8637\u8638\u8639\u863a\u863b\u863c\u863d\u863e\u863f\u8640\u8641\u8642\u8643\u8644\u8645\u8646\u8647\u8648\u8649\u864a\u864b\u864c\u864d\u864e\u864f\u8650\u8651\u8652\u8653\u8654\u8655\u8656\u8657\u8658\u8659\u865a\u865b\u865c\u865d\u865e\u865f\u8660\u8661\u8662\u8663\u8664\u8665\u8666\u8667\u8668\u8669\u866a\u866b\u866c\u866d\u866e\u866f\u8670\u8671\u8672\u8673\u8674\u8675\u8676\u8677\u8678\u8679\u867a\u867b\u867c\u867d\u867e\u867f\u8680\u8681\u8682\u8683\u8684\u8685\u8686\u8687\u8688\u8689\u868a\u868b\u868c\u868d\u868e\u868f\u8690\u8691\u8692\u8693\u8694\u8695\u8696\u8697\u8698\u8699\u869a\u869b\u869c\u869d\u869e\u869f\u86a0\u86a1\u86a2\u86a3\u86a4\u86a5\u86a6\u86a7\u86a8\u86a9\u86aa\u86ab\u86ac\u86ad\u86ae\u86af\u86b0\u86b1\u86b2\u86b3\u86b4\u86b5\u86b6\u86b7\u86b8\u86b9\u86ba\u86bb\u86bc\u86bd\u86be\u86bf\u86c0\u86c1\u86c2\u86c3\u86c4\u86c5\u86c6\u86c7\u86c8\u86c9\u86ca\u86cb\u86cc\u86cd\u86ce\u86cf\u86d0\u86d1\u86d2\u86d3\u86d4\u86d5\u86d6\u86d7\u86d8\u86d9\u86da\u86db\u86dc\u86dd\u86de\u86df\u86e0\u86e1\u86e2\u86e3\u86e4\u86e5\u86e6\u86e7\u86e8\u86e9\u86ea\u86eb\u86ec\u86ed\u86ee\u86ef\u86f0\u86f1\u86f2\u86f3\u86f4\u86f5\u86f6\u86f7\u86f8\u86f9\u86fa\u86fb\u86fc\u86fd\u86fe\u86ff\u8700\u8701\u8702\u8703\u8704\u8705\u8706\u8707\u8708\u8709\u870a\u870b\u870c\u870d\u870e\u870f\u8710\u8711\u8712\u8713\u8714\u8715\u8716\u8717\u8718\u8719\u871a\u871b\u871c\u871d\u871e\u871f\u8720\u8721\u8722\u8723\u8724\u8725\u8726\u8727\u8728\u8729\u872a\u872b\u872c\u872d\u872e\u872f\u8730\u8731\u8732\u8733\u8734\u8735\u8736\u8737\u8738\u8739\u873a\u873b\u873c\u873d\u873e\u873f\u8740\u8741\u8742\u8743\u8744\u8745\u8746\u8747\u8748\u8749\u874a\u874b\u874c\u874d\u874e\u874f\u8750\u8751\u8752\u8753\u8754\u8755\u8756\u8757\u8758\u8759\u875a\u875b\u875c\u875d\u875e\u875f\u8760\u8761\u8762\u8763\u8764\u8765\u8766\u8767\u8768\u8769\u876a\u876b\u876c\u876d\u876e\u876f\u8770\u8771\u8772\u8773\u8774\u8775\u8776\u8777\u8778\u8779\u877a\u877b\u877c\u877d\u877e\u877f\u8780\u8781\u8782\u8783\u8784\u8785\u8786\u8787\u8788\u8789\u878a\u878b\u878c\u878d\u878e\u878f\u8790\u8791\u8792\u8793\u8794\u8795\u8796\u8797\u8798\u8799\u879a\u879b\u879c\u879d\u879e\u879f\u87a0\u87a1\u87a2\u87a3\u87a4\u87a5\u87a6\u87a7\u87a8\u87a9\u87aa\u87ab\u87ac\u87ad\u87ae\u87af\u87b0\u87b1\u87b2\u87b3\u87b4\u87b5\u87b6\u87b7\u87b8\u87b9\u87ba\u87bb\u87bc\u87bd\u87be\u87bf\u87c0\u87c1\u87c2\u87c3\u87c4\u87c5\u87c6\u87c7\u87c8\u87c9\u87ca\u87cb\u87cc\u87cd\u87ce\u87cf\u87d0\u87d1\u87d2\u87d3\u87d4\u87d5\u87d6\u87d7\u87d8\u87d9\u87da\u87db\u87dc\u87dd\u87de\u87df\u87e0\u87e1\u87e2\u87e3\u87e4\u87e5\u87e6\u87e7\u87e8\u87e9\u87ea\u87eb\u87ec\u87ed\u87ee\u87ef\u87f0\u87f1\u87f2\u87f3\u87f4\u87f5\u87f6\u87f7\u87f8\u87f9\u87fa\u87fb\u87fc\u87fd\u87fe\u87ff\u8800\u8801\u8802\u8803\u8804\u8805\u8806\u8807\u8808\u8809\u880a\u880b\u880c\u880d\u880e\u880f\u8810\u8811\u8812\u8813\u8814\u8815\u8816\u8817\u8818\u8819\u881a\u881b\u881c\u881d\u881e\u881f\u8820\u8821\u8822\u8823\u8824\u8825\u8826\u8827\u8828\u8829\u882a\u882b\u882c\u882d\u882e\u882f\u8830\u8831\u8832\u8833\u8834\u8835\u8836\u8837\u8838\u8839\u883a\u883b\u883c\u883d\u883e\u883f\u8840\u8841\u8842\u8843\u8844\u8845\u8846\u8847\u8848\u8849\u884a\u884b\u884c\u884d\u884e\u884f\u8850\u8851\u8852\u8853\u8854\u8855\u8856\u8857\u8858\u8859\u885a\u885b\u885c\u885d\u885e\u885f\u8860\u8861\u8862\u8863\u8864\u8865\u8866\u8867\u8868\u8869\u886a\u886b\u886c\u886d\u886e\u886f\u8870\u8871\u8872\u8873\u8874\u8875\u8876\u8877\u8878\u8879\u887a\u887b\u887c\u887d\u887e\u887f\u8880\u8881\u8882\u8883\u8884\u8885\u8886\u8887\u8888\u8889\u888a\u888b\u888c\u888d\u888e\u888f\u8890\u8891\u8892\u8893\u8894\u8895\u8896\u8897\u8898\u8899\u889a\u889b\u889c\u889d\u889e\u889f\u88a0\u88a1\u88a2\u88a3\u88a4\u88a5\u88a6\u88a7\u88a8\u88a9\u88aa\u88ab\u88ac\u88ad\u88ae\u88af\u88b0\u88b1\u88b2\u88b3\u88b4\u88b5\u88b6\u88b7\u88b8\u88b9\u88ba\u88bb\u88bc\u88bd\u88be\u88bf\u88c0\u88c1\u88c2\u88c3\u88c4\u88c5\u88c6\u88c7\u88c8\u88c9\u88ca\u88cb\u88cc\u88cd\u88ce\u88cf\u88d0\u88d1\u88d2\u88d3\u88d4\u88d5\u88d6\u88d7\u88d8\u88d9\u88da\u88db\u88dc\u88dd\u88de\u88df\u88e0\u88e1\u88e2\u88e3\u88e4\u88e5\u88e6\u88e7\u88e8\u88e9\u88ea\u88eb\u88ec\u88ed\u88ee\u88ef\u88f0\u88f1\u88f2\u88f3\u88f4\u88f5\u88f6\u88f7\u88f8\u88f9\u88fa\u88fb\u88fc\u88fd\u88fe\u88ff\u8900\u8901\u8902\u8903\u8904\u8905\u8906\u8907\u8908\u8909\u890a\u890b\u890c\u890d\u890e\u890f\u8910\u8911\u8912\u8913\u8914\u8915\u8916\u8917\u8918\u8919\u891a\u891b\u891c\u891d\u891e\u891f\u8920\u8921\u8922\u8923\u8924\u8925\u8926\u8927\u8928\u8929\u892a\u892b\u892c\u892d\u892e\u892f\u8930\u8931\u8932\u8933\u8934\u8935\u8936\u8937\u8938\u8939\u893a\u893b\u893c\u893d\u893e\u893f\u8940\u8941\u8942\u8943\u8944\u8945\u8946\u8947\u8948\u8949\u894a\u894b\u894c\u894d\u894e\u894f\u8950\u8951\u8952\u8953\u8954\u8955\u8956\u8957\u8958\u8959\u895a\u895b\u895c\u895d\u895e\u895f\u8960\u8961\u8962\u8963\u8964\u8965\u8966\u8967\u8968\u8969\u896a\u896b\u896c\u896d\u896e\u896f\u8970\u8971\u8972\u8973\u8974\u8975\u8976\u8977\u8978\u8979\u897a\u897b\u897c\u897d\u897e\u897f\u8980\u8981\u8982\u8983\u8984\u8985\u8986\u8987\u8988\u8989\u898a\u898b\u898c\u898d\u898e\u898f\u8990\u8991\u8992\u8993\u8994\u8995\u8996\u8997\u8998\u8999\u899a\u899b\u899c\u899d\u899e\u899f\u89a0\u89a1\u89a2\u89a3\u89a4\u89a5\u89a6\u89a7\u89a8\u89a9\u89aa\u89ab\u89ac\u89ad\u89ae\u89af\u89b0\u89b1\u89b2\u89b3\u89b4\u89b5\u89b6\u89b7\u89b8\u89b9\u89ba\u89bb\u89bc\u89bd\u89be\u89bf\u89c0\u89c1\u89c2\u89c3\u89c4\u89c5\u89c6\u89c7\u89c8\u89c9\u89ca\u89cb\u89cc\u89cd\u89ce\u89cf\u89d0\u89d1\u89d2\u89d3\u89d4\u89d5\u89d6\u89d7\u89d8\u89d9\u89da\u89db\u89dc\u89dd\u89de\u89df\u89e0\u89e1\u89e2\u89e3\u89e4\u89e5\u89e6\u89e7\u89e8\u89e9\u89ea\u89eb\u89ec\u89ed\u89ee\u89ef\u89f0\u89f1\u89f2\u89f3\u89f4\u89f5\u89f6\u89f7\u89f8\u89f9\u89fa\u89fb\u89fc\u89fd\u89fe\u89ff\u8a00\u8a01\u8a02\u8a03\u8a04\u8a05\u8a06\u8a07\u8a08\u8a09\u8a0a\u8a0b\u8a0c\u8a0d\u8a0e\u8a0f\u8a10\u8a11\u8a12\u8a13\u8a14\u8a15\u8a16\u8a17\u8a18\u8a19\u8a1a\u8a1b\u8a1c\u8a1d\u8a1e\u8a1f\u8a20\u8a21\u8a22\u8a23\u8a24\u8a25\u8a26\u8a27\u8a28\u8a29\u8a2a\u8a2b\u8a2c\u8a2d\u8a2e\u8a2f\u8a30\u8a31\u8a32\u8a33\u8a34\u8a35\u8a36\u8a37\u8a38\u8a39\u8a3a\u8a3b\u8a3c\u8a3d\u8a3e\u8a3f\u8a40\u8a41\u8a42\u8a43\u8a44\u8a45\u8a46\u8a47\u8a48\u8a49\u8a4a\u8a4b\u8a4c\u8a4d\u8a4e\u8a4f\u8a50\u8a51\u8a52\u8a53\u8a54\u8a55\u8a56\u8a57\u8a58\u8a59\u8a5a\u8a5b\u8a5c\u8a5d\u8a5e\u8a5f\u8a60\u8a61\u8a62\u8a63\u8a64\u8a65\u8a66\u8a67\u8a68\u8a69\u8a6a\u8a6b\u8a6c\u8a6d\u8a6e\u8a6f\u8a70\u8a71\u8a72\u8a73\u8a74\u8a75\u8a76\u8a77\u8a78\u8a79\u8a7a\u8a7b\u8a7c\u8a7d\u8a7e\u8a7f\u8a80\u8a81\u8a82\u8a83\u8a84\u8a85\u8a86\u8a87\u8a88\u8a89\u8a8a\u8a8b\u8a8c\u8a8d\u8a8e\u8a8f\u8a90\u8a91\u8a92\u8a93\u8a94\u8a95\u8a96\u8a97\u8a98\u8a99\u8a9a\u8a9b\u8a9c\u8a9d\u8a9e\u8a9f\u8aa0\u8aa1\u8aa2\u8aa3\u8aa4\u8aa5\u8aa6\u8aa7\u8aa8\u8aa9\u8aaa\u8aab\u8aac\u8aad\u8aae\u8aaf\u8ab0\u8ab1\u8ab2\u8ab3\u8ab4\u8ab5\u8ab6\u8ab7\u8ab8\u8ab9\u8aba\u8abb\u8abc\u8abd\u8abe\u8abf\u8ac0\u8ac1\u8ac2\u8ac3\u8ac4\u8ac5\u8ac6\u8ac7\u8ac8\u8ac9\u8aca\u8acb\u8acc\u8acd\u8ace\u8acf\u8ad0\u8ad1\u8ad2\u8ad3\u8ad4\u8ad5\u8ad6\u8ad7\u8ad8\u8ad9\u8ada\u8adb\u8adc\u8add\u8ade\u8adf\u8ae0\u8ae1\u8ae2\u8ae3\u8ae4\u8ae5\u8ae6\u8ae7\u8ae8\u8ae9\u8aea\u8aeb\u8aec\u8aed\u8aee\u8aef\u8af0\u8af1\u8af2\u8af3\u8af4\u8af5\u8af6\u8af7\u8af8\u8af9\u8afa\u8afb\u8afc\u8afd\u8afe\u8aff\u8b00\u8b01\u8b02\u8b03\u8b04\u8b05\u8b06\u8b07\u8b08\u8b09\u8b0a\u8b0b\u8b0c\u8b0d\u8b0e\u8b0f\u8b10\u8b11\u8b12\u8b13\u8b14\u8b15\u8b16\u8b17\u8b18\u8b19\u8b1a\u8b1b\u8b1c\u8b1d\u8b1e\u8b1f\u8b20\u8b21\u8b22\u8b23\u8b24\u8b25\u8b26\u8b27\u8b28\u8b29\u8b2a\u8b2b\u8b2c\u8b2d\u8b2e\u8b2f\u8b30\u8b31\u8b32\u8b33\u8b34\u8b35\u8b36\u8b37\u8b38\u8b39\u8b3a\u8b3b\u8b3c\u8b3d\u8b3e\u8b3f\u8b40\u8b41\u8b42\u8b43\u8b44\u8b45\u8b46\u8b47\u8b48\u8b49\u8b4a\u8b4b\u8b4c\u8b4d\u8b4e\u8b4f\u8b50\u8b51\u8b52\u8b53\u8b54\u8b55\u8b56\u8b57\u8b58\u8b59\u8b5a\u8b5b\u8b5c\u8b5d\u8b5e\u8b5f\u8b60\u8b61\u8b62\u8b63\u8b64\u8b65\u8b66\u8b67\u8b68\u8b69\u8b6a\u8b6b\u8b6c\u8b6d\u8b6e\u8b6f\u8b70\u8b71\u8b72\u8b73\u8b74\u8b75\u8b76\u8b77\u8b78\u8b79\u8b7a\u8b7b\u8b7c\u8b7d\u8b7e\u8b7f\u8b80\u8b81\u8b82\u8b83\u8b84\u8b85\u8b86\u8b87\u8b88\u8b89\u8b8a\u8b8b\u8b8c\u8b8d\u8b8e\u8b8f\u8b90\u8b91\u8b92\u8b93\u8b94\u8b95\u8b96\u8b97\u8b98\u8b99\u8b9a\u8b9b\u8b9c\u8b9d\u8b9e\u8b9f\u8ba0\u8ba1\u8ba2\u8ba3\u8ba4\u8ba5\u8ba6\u8ba7\u8ba8\u8ba9\u8baa\u8bab\u8bac\u8bad\u8bae\u8baf\u8bb0\u8bb1\u8bb2\u8bb3\u8bb4\u8bb5\u8bb6\u8bb7\u8bb8\u8bb9\u8bba\u8bbb\u8bbc\u8bbd\u8bbe\u8bbf\u8bc0\u8bc1\u8bc2\u8bc3\u8bc4\u8bc5\u8bc6\u8bc7\u8bc8\u8bc9\u8bca\u8bcb\u8bcc\u8bcd\u8bce\u8bcf\u8bd0\u8bd1\u8bd2\u8bd3\u8bd4\u8bd5\u8bd6\u8bd7\u8bd8\u8bd9\u8bda\u8bdb\u8bdc\u8bdd\u8bde\u8bdf\u8be0\u8be1\u8be2\u8be3\u8be4\u8be5\u8be6\u8be7\u8be8\u8be9\u8bea\u8beb\u8bec\u8bed\u8bee\u8bef\u8bf0\u8bf1\u8bf2\u8bf3\u8bf4\u8bf5\u8bf6\u8bf7\u8bf8\u8bf9\u8bfa\u8bfb\u8bfc\u8bfd\u8bfe\u8bff\u8c00\u8c01\u8c02\u8c03\u8c04\u8c05\u8c06\u8c07\u8c08\u8c09\u8c0a\u8c0b\u8c0c\u8c0d\u8c0e\u8c0f\u8c10\u8c11\u8c12\u8c13\u8c14\u8c15\u8c16\u8c17\u8c18\u8c19\u8c1a\u8c1b\u8c1c\u8c1d\u8c1e\u8c1f\u8c20\u8c21\u8c22\u8c23\u8c24\u8c25\u8c26\u8c27\u8c28\u8c29\u8c2a\u8c2b\u8c2c\u8c2d\u8c2e\u8c2f\u8c30\u8c31\u8c32\u8c33\u8c34\u8c35\u8c36\u8c37\u8c38\u8c39\u8c3a\u8c3b\u8c3c\u8c3d\u8c3e\u8c3f\u8c40\u8c41\u8c42\u8c43\u8c44\u8c45\u8c46\u8c47\u8c48\u8c49\u8c4a\u8c4b\u8c4c\u8c4d\u8c4e\u8c4f\u8c50\u8c51\u8c52\u8c53\u8c54\u8c55\u8c56\u8c57\u8c58\u8c59\u8c5a\u8c5b\u8c5c\u8c5d\u8c5e\u8c5f\u8c60\u8c61\u8c62\u8c63\u8c64\u8c65\u8c66\u8c67\u8c68\u8c69\u8c6a\u8c6b\u8c6c\u8c6d\u8c6e\u8c6f\u8c70\u8c71\u8c72\u8c73\u8c74\u8c75\u8c76\u8c77\u8c78\u8c79\u8c7a\u8c7b\u8c7c\u8c7d\u8c7e\u8c7f\u8c80\u8c81\u8c82\u8c83\u8c84\u8c85\u8c86\u8c87\u8c88\u8c89\u8c8a\u8c8b\u8c8c\u8c8d\u8c8e\u8c8f\u8c90\u8c91\u8c92\u8c93\u8c94\u8c95\u8c96\u8c97\u8c98\u8c99\u8c9a\u8c9b\u8c9c\u8c9d\u8c9e\u8c9f\u8ca0\u8ca1\u8ca2\u8ca3\u8ca4\u8ca5\u8ca6\u8ca7\u8ca8\u8ca9\u8caa\u8cab\u8cac\u8cad\u8cae\u8caf\u8cb0\u8cb1\u8cb2\u8cb3\u8cb4\u8cb5\u8cb6\u8cb7\u8cb8\u8cb9\u8cba\u8cbb\u8cbc\u8cbd\u8cbe\u8cbf\u8cc0\u8cc1\u8cc2\u8cc3\u8cc4\u8cc5\u8cc6\u8cc7\u8cc8\u8cc9\u8cca\u8ccb\u8ccc\u8ccd\u8cce\u8ccf\u8cd0\u8cd1\u8cd2\u8cd3\u8cd4\u8cd5\u8cd6\u8cd7\u8cd8\u8cd9\u8cda\u8cdb\u8cdc\u8cdd\u8cde\u8cdf\u8ce0\u8ce1\u8ce2\u8ce3\u8ce4\u8ce5\u8ce6\u8ce7\u8ce8\u8ce9\u8cea\u8ceb\u8cec\u8ced\u8cee\u8cef\u8cf0\u8cf1\u8cf2\u8cf3\u8cf4\u8cf5\u8cf6\u8cf7\u8cf8\u8cf9\u8cfa\u8cfb\u8cfc\u8cfd\u8cfe\u8cff\u8d00\u8d01\u8d02\u8d03\u8d04\u8d05\u8d06\u8d07\u8d08\u8d09\u8d0a\u8d0b\u8d0c\u8d0d\u8d0e\u8d0f\u8d10\u8d11\u8d12\u8d13\u8d14\u8d15\u8d16\u8d17\u8d18\u8d19\u8d1a\u8d1b\u8d1c\u8d1d\u8d1e\u8d1f\u8d20\u8d21\u8d22\u8d23\u8d24\u8d25\u8d26\u8d27\u8d28\u8d29\u8d2a\u8d2b\u8d2c\u8d2d\u8d2e\u8d2f\u8d30\u8d31\u8d32\u8d33\u8d34\u8d35\u8d36\u8d37\u8d38\u8d39\u8d3a\u8d3b\u8d3c\u8d3d\u8d3e\u8d3f\u8d40\u8d41\u8d42\u8d43\u8d44\u8d45\u8d46\u8d47\u8d48\u8d49\u8d4a\u8d4b\u8d4c\u8d4d\u8d4e\u8d4f\u8d50\u8d51\u8d52\u8d53\u8d54\u8d55\u8d56\u8d57\u8d58\u8d59\u8d5a\u8d5b\u8d5c\u8d5d\u8d5e\u8d5f\u8d60\u8d61\u8d62\u8d63\u8d64\u8d65\u8d66\u8d67\u8d68\u8d69\u8d6a\u8d6b\u8d6c\u8d6d\u8d6e\u8d6f\u8d70\u8d71\u8d72\u8d73\u8d74\u8d75\u8d76\u8d77\u8d78\u8d79\u8d7a\u8d7b\u8d7c\u8d7d\u8d7e\u8d7f\u8d80\u8d81\u8d82\u8d83\u8d84\u8d85\u8d86\u8d87\u8d88\u8d89\u8d8a\u8d8b\u8d8c\u8d8d\u8d8e\u8d8f\u8d90\u8d91\u8d92\u8d93\u8d94\u8d95\u8d96\u8d97\u8d98\u8d99\u8d9a\u8d9b\u8d9c\u8d9d\u8d9e\u8d9f\u8da0\u8da1\u8da2\u8da3\u8da4\u8da5\u8da6\u8da7\u8da8\u8da9\u8daa\u8dab\u8dac\u8dad\u8dae\u8daf\u8db0\u8db1\u8db2\u8db3\u8db4\u8db5\u8db6\u8db7\u8db8\u8db9\u8dba\u8dbb\u8dbc\u8dbd\u8dbe\u8dbf\u8dc0\u8dc1\u8dc2\u8dc3\u8dc4\u8dc5\u8dc6\u8dc7\u8dc8\u8dc9\u8dca\u8dcb\u8dcc\u8dcd\u8dce\u8dcf\u8dd0\u8dd1\u8dd2\u8dd3\u8dd4\u8dd5\u8dd6\u8dd7\u8dd8\u8dd9\u8dda\u8ddb\u8ddc\u8ddd\u8dde\u8ddf\u8de0\u8de1\u8de2\u8de3\u8de4\u8de5\u8de6\u8de7\u8de8\u8de9\u8dea\u8deb\u8dec\u8ded\u8dee\u8def\u8df0\u8df1\u8df2\u8df3\u8df4\u8df5\u8df6\u8df7\u8df8\u8df9\u8dfa\u8dfb\u8dfc\u8dfd\u8dfe\u8dff\u8e00\u8e01\u8e02\u8e03\u8e04\u8e05\u8e06\u8e07\u8e08\u8e09\u8e0a\u8e0b\u8e0c\u8e0d\u8e0e\u8e0f\u8e10\u8e11\u8e12\u8e13\u8e14\u8e15\u8e16\u8e17\u8e18\u8e19\u8e1a\u8e1b\u8e1c\u8e1d\u8e1e\u8e1f\u8e20\u8e21\u8e22\u8e23\u8e24\u8e25\u8e26\u8e27\u8e28\u8e29\u8e2a\u8e2b\u8e2c\u8e2d\u8e2e\u8e2f\u8e30\u8e31\u8e32\u8e33\u8e34\u8e35\u8e36\u8e37\u8e38\u8e39\u8e3a\u8e3b\u8e3c\u8e3d\u8e3e\u8e3f\u8e40\u8e41\u8e42\u8e43\u8e44\u8e45\u8e46\u8e47\u8e48\u8e49\u8e4a\u8e4b\u8e4c\u8e4d\u8e4e\u8e4f\u8e50\u8e51\u8e52\u8e53\u8e54\u8e55\u8e56\u8e57\u8e58\u8e59\u8e5a\u8e5b\u8e5c\u8e5d\u8e5e\u8e5f\u8e60\u8e61\u8e62\u8e63\u8e64\u8e65\u8e66\u8e67\u8e68\u8e69\u8e6a\u8e6b\u8e6c\u8e6d\u8e6e\u8e6f\u8e70\u8e71\u8e72\u8e73\u8e74\u8e75\u8e76\u8e77\u8e78\u8e79\u8e7a\u8e7b\u8e7c\u8e7d\u8e7e\u8e7f\u8e80\u8e81\u8e82\u8e83\u8e84\u8e85\u8e86\u8e87\u8e88\u8e89\u8e8a\u8e8b\u8e8c\u8e8d\u8e8e\u8e8f\u8e90\u8e91\u8e92\u8e93\u8e94\u8e95\u8e96\u8e97\u8e98\u8e99\u8e9a\u8e9b\u8e9c\u8e9d\u8e9e\u8e9f\u8ea0\u8ea1\u8ea2\u8ea3\u8ea4\u8ea5\u8ea6\u8ea7\u8ea8\u8ea9\u8eaa\u8eab\u8eac\u8ead\u8eae\u8eaf\u8eb0\u8eb1\u8eb2\u8eb3\u8eb4\u8eb5\u8eb6\u8eb7\u8eb8\u8eb9\u8eba\u8ebb\u8ebc\u8ebd\u8ebe\u8ebf\u8ec0\u8ec1\u8ec2\u8ec3\u8ec4\u8ec5\u8ec6\u8ec7\u8ec8\u8ec9\u8eca\u8ecb\u8ecc\u8ecd\u8ece\u8ecf\u8ed0\u8ed1\u8ed2\u8ed3\u8ed4\u8ed5\u8ed6\u8ed7\u8ed8\u8ed9\u8eda\u8edb\u8edc\u8edd\u8ede\u8edf\u8ee0\u8ee1\u8ee2\u8ee3\u8ee4\u8ee5\u8ee6\u8ee7\u8ee8\u8ee9\u8eea\u8eeb\u8eec\u8eed\u8eee\u8eef\u8ef0\u8ef1\u8ef2\u8ef3\u8ef4\u8ef5\u8ef6\u8ef7\u8ef8\u8ef9\u8efa\u8efb\u8efc\u8efd\u8efe\u8eff\u8f00\u8f01\u8f02\u8f03\u8f04\u8f05\u8f06\u8f07\u8f08\u8f09\u8f0a\u8f0b\u8f0c\u8f0d\u8f0e\u8f0f\u8f10\u8f11\u8f12\u8f13\u8f14\u8f15\u8f16\u8f17\u8f18\u8f19\u8f1a\u8f1b\u8f1c\u8f1d\u8f1e\u8f1f\u8f20\u8f21\u8f22\u8f23\u8f24\u8f25\u8f26\u8f27\u8f28\u8f29\u8f2a\u8f2b\u8f2c\u8f2d\u8f2e\u8f2f\u8f30\u8f31\u8f32\u8f33\u8f34\u8f35\u8f36\u8f37\u8f38\u8f39\u8f3a\u8f3b\u8f3c\u8f3d\u8f3e\u8f3f\u8f40\u8f41\u8f42\u8f43\u8f44\u8f45\u8f46\u8f47\u8f48\u8f49\u8f4a\u8f4b\u8f4c\u8f4d\u8f4e\u8f4f\u8f50\u8f51\u8f52\u8f53\u8f54\u8f55\u8f56\u8f57\u8f58\u8f59\u8f5a\u8f5b\u8f5c\u8f5d\u8f5e\u8f5f\u8f60\u8f61\u8f62\u8f63\u8f64\u8f65\u8f66\u8f67\u8f68\u8f69\u8f6a\u8f6b\u8f6c\u8f6d\u8f6e\u8f6f\u8f70\u8f71\u8f72\u8f73\u8f74\u8f75\u8f76\u8f77\u8f78\u8f79\u8f7a\u8f7b\u8f7c\u8f7d\u8f7e\u8f7f\u8f80\u8f81\u8f82\u8f83\u8f84\u8f85\u8f86\u8f87\u8f88\u8f89\u8f8a\u8f8b\u8f8c\u8f8d\u8f8e\u8f8f\u8f90\u8f91\u8f92\u8f93\u8f94\u8f95\u8f96\u8f97\u8f98\u8f99\u8f9a\u8f9b\u8f9c\u8f9d\u8f9e\u8f9f\u8fa0\u8fa1\u8fa2\u8fa3\u8fa4\u8fa5\u8fa6\u8fa7\u8fa8\u8fa9\u8faa\u8fab\u8fac\u8fad\u8fae\u8faf\u8fb0\u8fb1\u8fb2\u8fb3\u8fb4\u8fb5\u8fb6\u8fb7\u8fb8\u8fb9\u8fba\u8fbb\u8fbc\u8fbd\u8fbe\u8fbf\u8fc0\u8fc1\u8fc2\u8fc3\u8fc4\u8fc5\u8fc6\u8fc7\u8fc8\u8fc9\u8fca\u8fcb\u8fcc\u8fcd\u8fce\u8fcf\u8fd0\u8fd1\u8fd2\u8fd3\u8fd4\u8fd5\u8fd6\u8fd7\u8fd8\u8fd9\u8fda\u8fdb\u8fdc\u8fdd\u8fde\u8fdf\u8fe0\u8fe1\u8fe2\u8fe3\u8fe4\u8fe5\u8fe6\u8fe7\u8fe8\u8fe9\u8fea\u8feb\u8fec\u8fed\u8fee\u8fef\u8ff0\u8ff1\u8ff2\u8ff3\u8ff4\u8ff5\u8ff6\u8ff7\u8ff8\u8ff9\u8ffa\u8ffb\u8ffc\u8ffd\u8ffe\u8fff\u9000\u9001\u9002\u9003\u9004\u9005\u9006\u9007\u9008\u9009\u900a\u900b\u900c\u900d\u900e\u900f\u9010\u9011\u9012\u9013\u9014\u9015\u9016\u9017\u9018\u9019\u901a\u901b\u901c\u901d\u901e\u901f\u9020\u9021\u9022\u9023\u9024\u9025\u9026\u9027\u9028\u9029\u902a\u902b\u902c\u902d\u902e\u902f\u9030\u9031\u9032\u9033\u9034\u9035\u9036\u9037\u9038\u9039\u903a\u903b\u903c\u903d\u903e\u903f\u9040\u9041\u9042\u9043\u9044\u9045\u9046\u9047\u9048\u9049\u904a\u904b\u904c\u904d\u904e\u904f\u9050\u9051\u9052\u9053\u9054\u9055\u9056\u9057\u9058\u9059\u905a\u905b\u905c\u905d\u905e\u905f\u9060\u9061\u9062\u9063\u9064\u9065\u9066\u9067\u9068\u9069\u906a\u906b\u906c\u906d\u906e\u906f\u9070\u9071\u9072\u9073\u9074\u9075\u9076\u9077\u9078\u9079\u907a\u907b\u907c\u907d\u907e\u907f\u9080\u9081\u9082\u9083\u9084\u9085\u9086\u9087\u9088\u9089\u908a\u908b\u908c\u908d\u908e\u908f\u9090\u9091\u9092\u9093\u9094\u9095\u9096\u9097\u9098\u9099\u909a\u909b\u909c\u909d\u909e\u909f\u90a0\u90a1\u90a2\u90a3\u90a4\u90a5\u90a6\u90a7\u90a8\u90a9\u90aa\u90ab\u90ac\u90ad\u90ae\u90af\u90b0\u90b1\u90b2\u90b3\u90b4\u90b5\u90b6\u90b7\u90b8\u90b9\u90ba\u90bb\u90bc\u90bd\u90be\u90bf\u90c0\u90c1\u90c2\u90c3\u90c4\u90c5\u90c6\u90c7\u90c8\u90c9\u90ca\u90cb\u90cc\u90cd\u90ce\u90cf\u90d0\u90d1\u90d2\u90d3\u90d4\u90d5\u90d6\u90d7\u90d8\u90d9\u90da\u90db\u90dc\u90dd\u90de\u90df\u90e0\u90e1\u90e2\u90e3\u90e4\u90e5\u90e6\u90e7\u90e8\u90e9\u90ea\u90eb\u90ec\u90ed\u90ee\u90ef\u90f0\u90f1\u90f2\u90f3\u90f4\u90f5\u90f6\u90f7\u90f8\u90f9\u90fa\u90fb\u90fc\u90fd\u90fe\u90ff\u9100\u9101\u9102\u9103\u9104\u9105\u9106\u9107\u9108\u9109\u910a\u910b\u910c\u910d\u910e\u910f\u9110\u9111\u9112\u9113\u9114\u9115\u9116\u9117\u9118\u9119\u911a\u911b\u911c\u911d\u911e\u911f\u9120\u9121\u9122\u9123\u9124\u9125\u9126\u9127\u9128\u9129\u912a\u912b\u912c\u912d\u912e\u912f\u9130\u9131\u9132\u9133\u9134\u9135\u9136\u9137\u9138\u9139\u913a\u913b\u913c\u913d\u913e\u913f\u9140\u9141\u9142\u9143\u9144\u9145\u9146\u9147\u9148\u9149\u914a\u914b\u914c\u914d\u914e\u914f\u9150\u9151\u9152\u9153\u9154\u9155\u9156\u9157\u9158\u9159\u915a\u915b\u915c\u915d\u915e\u915f\u9160\u9161\u9162\u9163\u9164\u9165\u9166\u9167\u9168\u9169\u916a\u916b\u916c\u916d\u916e\u916f\u9170\u9171\u9172\u9173\u9174\u9175\u9176\u9177\u9178\u9179\u917a\u917b\u917c\u917d\u917e\u917f\u9180\u9181\u9182\u9183\u9184\u9185\u9186\u9187\u9188\u9189\u918a\u918b\u918c\u918d\u918e\u918f\u9190\u9191\u9192\u9193\u9194\u9195\u9196\u9197\u9198\u9199\u919a\u919b\u919c\u919d\u919e\u919f\u91a0\u91a1\u91a2\u91a3\u91a4\u91a5\u91a6\u91a7\u91a8\u91a9\u91aa\u91ab\u91ac\u91ad\u91ae\u91af\u91b0\u91b1\u91b2\u91b3\u91b4\u91b5\u91b6\u91b7\u91b8\u91b9\u91ba\u91bb\u91bc\u91bd\u91be\u91bf\u91c0\u91c1\u91c2\u91c3\u91c4\u91c5\u91c6\u91c7\u91c8\u91c9\u91ca\u91cb\u91cc\u91cd\u91ce\u91cf\u91d0\u91d1\u91d2\u91d3\u91d4\u91d5\u91d6\u91d7\u91d8\u91d9\u91da\u91db\u91dc\u91dd\u91de\u91df\u91e0\u91e1\u91e2\u91e3\u91e4\u91e5\u91e6\u91e7\u91e8\u91e9\u91ea\u91eb\u91ec\u91ed\u91ee\u91ef\u91f0\u91f1\u91f2\u91f3\u91f4\u91f5\u91f6\u91f7\u91f8\u91f9\u91fa\u91fb\u91fc\u91fd\u91fe\u91ff\u9200\u9201\u9202\u9203\u9204\u9205\u9206\u9207\u9208\u9209\u920a\u920b\u920c\u920d\u920e\u920f\u9210\u9211\u9212\u9213\u9214\u9215\u9216\u9217\u9218\u9219\u921a\u921b\u921c\u921d\u921e\u921f\u9220\u9221\u9222\u9223\u9224\u9225\u9226\u9227\u9228\u9229\u922a\u922b\u922c\u922d\u922e\u922f\u9230\u9231\u9232\u9233\u9234\u9235\u9236\u9237\u9238\u9239\u923a\u923b\u923c\u923d\u923e\u923f\u9240\u9241\u9242\u9243\u9244\u9245\u9246\u9247\u9248\u9249\u924a\u924b\u924c\u924d\u924e\u924f\u9250\u9251\u9252\u9253\u9254\u9255\u9256\u9257\u9258\u9259\u925a\u925b\u925c\u925d\u925e\u925f\u9260\u9261\u9262\u9263\u9264\u9265\u9266\u9267\u9268\u9269\u926a\u926b\u926c\u926d\u926e\u926f\u9270\u9271\u9272\u9273\u9274\u9275\u9276\u9277\u9278\u9279\u927a\u927b\u927c\u927d\u927e\u927f\u9280\u9281\u9282\u9283\u9284\u9285\u9286\u9287\u9288\u9289\u928a\u928b\u928c\u928d\u928e\u928f\u9290\u9291\u9292\u9293\u9294\u9295\u9296\u9297\u9298\u9299\u929a\u929b\u929c\u929d\u929e\u929f\u92a0\u92a1\u92a2\u92a3\u92a4\u92a5\u92a6\u92a7\u92a8\u92a9\u92aa\u92ab\u92ac\u92ad\u92ae\u92af\u92b0\u92b1\u92b2\u92b3\u92b4\u92b5\u92b6\u92b7\u92b8\u92b9\u92ba\u92bb\u92bc\u92bd\u92be\u92bf\u92c0\u92c1\u92c2\u92c3\u92c4\u92c5\u92c6\u92c7\u92c8\u92c9\u92ca\u92cb\u92cc\u92cd\u92ce\u92cf\u92d0\u92d1\u92d2\u92d3\u92d4\u92d5\u92d6\u92d7\u92d8\u92d9\u92da\u92db\u92dc\u92dd\u92de\u92df\u92e0\u92e1\u92e2\u92e3\u92e4\u92e5\u92e6\u92e7\u92e8\u92e9\u92ea\u92eb\u92ec\u92ed\u92ee\u92ef\u92f0\u92f1\u92f2\u92f3\u92f4\u92f5\u92f6\u92f7\u92f8\u92f9\u92fa\u92fb\u92fc\u92fd\u92fe\u92ff\u9300\u9301\u9302\u9303\u9304\u9305\u9306\u9307\u9308\u9309\u930a\u930b\u930c\u930d\u930e\u930f\u9310\u9311\u9312\u9313\u9314\u9315\u9316\u9317\u9318\u9319\u931a\u931b\u931c\u931d\u931e\u931f\u9320\u9321\u9322\u9323\u9324\u9325\u9326\u9327\u9328\u9329\u932a\u932b\u932c\u932d\u932e\u932f\u9330\u9331\u9332\u9333\u9334\u9335\u9336\u9337\u9338\u9339\u933a\u933b\u933c\u933d\u933e\u933f\u9340\u9341\u9342\u9343\u9344\u9345\u9346\u9347\u9348\u9349\u934a\u934b\u934c\u934d\u934e\u934f\u9350\u9351\u9352\u9353\u9354\u9355\u9356\u9357\u9358\u9359\u935a\u935b\u935c\u935d\u935e\u935f\u9360\u9361\u9362\u9363\u9364\u9365\u9366\u9367\u9368\u9369\u936a\u936b\u936c\u936d\u936e\u936f\u9370\u9371\u9372\u9373\u9374\u9375\u9376\u9377\u9378\u9379\u937a\u937b\u937c\u937d\u937e\u937f\u9380\u9381\u9382\u9383\u9384\u9385\u9386\u9387\u9388\u9389\u938a\u938b\u938c\u938d\u938e\u938f\u9390\u9391\u9392\u9393\u9394\u9395\u9396\u9397\u9398\u9399\u939a\u939b\u939c\u939d\u939e\u939f\u93a0\u93a1\u93a2\u93a3\u93a4\u93a5\u93a6\u93a7\u93a8\u93a9\u93aa\u93ab\u93ac\u93ad\u93ae\u93af\u93b0\u93b1\u93b2\u93b3\u93b4\u93b5\u93b6\u93b7\u93b8\u93b9\u93ba\u93bb\u93bc\u93bd\u93be\u93bf\u93c0\u93c1\u93c2\u93c3\u93c4\u93c5\u93c6\u93c7\u93c8\u93c9\u93ca\u93cb\u93cc\u93cd\u93ce\u93cf\u93d0\u93d1\u93d2\u93d3\u93d4\u93d5\u93d6\u93d7\u93d8\u93d9\u93da\u93db\u93dc\u93dd\u93de\u93df\u93e0\u93e1\u93e2\u93e3\u93e4\u93e5\u93e6\u93e7\u93e8\u93e9\u93ea\u93eb\u93ec\u93ed\u93ee\u93ef\u93f0\u93f1\u93f2\u93f3\u93f4\u93f5\u93f6\u93f7\u93f8\u93f9\u93fa\u93fb\u93fc\u93fd\u93fe\u93ff\u9400\u9401\u9402\u9403\u9404\u9405\u9406\u9407\u9408\u9409\u940a\u940b\u940c\u940d\u940e\u940f\u9410\u9411\u9412\u9413\u9414\u9415\u9416\u9417\u9418\u9419\u941a\u941b\u941c\u941d\u941e\u941f\u9420\u9421\u9422\u9423\u9424\u9425\u9426\u9427\u9428\u9429\u942a\u942b\u942c\u942d\u942e\u942f\u9430\u9431\u9432\u9433\u9434\u9435\u9436\u9437\u9438\u9439\u943a\u943b\u943c\u943d\u943e\u943f\u9440\u9441\u9442\u9443\u9444\u9445\u9446\u9447\u9448\u9449\u944a\u944b\u944c\u944d\u944e\u944f\u9450\u9451\u9452\u9453\u9454\u9455\u9456\u9457\u9458\u9459\u945a\u945b\u945c\u945d\u945e\u945f\u9460\u9461\u9462\u9463\u9464\u9465\u9466\u9467\u9468\u9469\u946a\u946b\u946c\u946d\u946e\u946f\u9470\u9471\u9472\u9473\u9474\u9475\u9476\u9477\u9478\u9479\u947a\u947b\u947c\u947d\u947e\u947f\u9480\u9481\u9482\u9483\u9484\u9485\u9486\u9487\u9488\u9489\u948a\u948b\u948c\u948d\u948e\u948f\u9490\u9491\u9492\u9493\u9494\u9495\u9496\u9497\u9498\u9499\u949a\u949b\u949c\u949d\u949e\u949f\u94a0\u94a1\u94a2\u94a3\u94a4\u94a5\u94a6\u94a7\u94a8\u94a9\u94aa\u94ab\u94ac\u94ad\u94ae\u94af\u94b0\u94b1\u94b2\u94b3\u94b4\u94b5\u94b6\u94b7\u94b8\u94b9\u94ba\u94bb\u94bc\u94bd\u94be\u94bf\u94c0\u94c1\u94c2\u94c3\u94c4\u94c5\u94c6\u94c7\u94c8\u94c9\u94ca\u94cb\u94cc\u94cd\u94ce\u94cf\u94d0\u94d1\u94d2\u94d3\u94d4\u94d5\u94d6\u94d7\u94d8\u94d9\u94da\u94db\u94dc\u94dd\u94de\u94df\u94e0\u94e1\u94e2\u94e3\u94e4\u94e5\u94e6\u94e7\u94e8\u94e9\u94ea\u94eb\u94ec\u94ed\u94ee\u94ef\u94f0\u94f1\u94f2\u94f3\u94f4\u94f5\u94f6\u94f7\u94f8\u94f9\u94fa\u94fb\u94fc\u94fd\u94fe\u94ff\u9500\u9501\u9502\u9503\u9504\u9505\u9506\u9507\u9508\u9509\u950a\u950b\u950c\u950d\u950e\u950f\u9510\u9511\u9512\u9513\u9514\u9515\u9516\u9517\u9518\u9519\u951a\u951b\u951c\u951d\u951e\u951f\u9520\u9521\u9522\u9523\u9524\u9525\u9526\u9527\u9528\u9529\u952a\u952b\u952c\u952d\u952e\u952f\u9530\u9531\u9532\u9533\u9534\u9535\u9536\u9537\u9538\u9539\u953a\u953b\u953c\u953d\u953e\u953f\u9540\u9541\u9542\u9543\u9544\u9545\u9546\u9547\u9548\u9549\u954a\u954b\u954c\u954d\u954e\u954f\u9550\u9551\u9552\u9553\u9554\u9555\u9556\u9557\u9558\u9559\u955a\u955b\u955c\u955d\u955e\u955f\u9560\u9561\u9562\u9563\u9564\u9565\u9566\u9567\u9568\u9569\u956a\u956b\u956c\u956d\u956e\u956f\u9570\u9571\u9572\u9573\u9574\u9575\u9576\u9577\u9578\u9579\u957a\u957b\u957c\u957d\u957e\u957f\u9580\u9581\u9582\u9583\u9584\u9585\u9586\u9587\u9588\u9589\u958a\u958b\u958c\u958d\u958e\u958f\u9590\u9591\u9592\u9593\u9594\u9595\u9596\u9597\u9598\u9599\u959a\u959b\u959c\u959d\u959e\u959f\u95a0\u95a1\u95a2\u95a3\u95a4\u95a5\u95a6\u95a7\u95a8\u95a9\u95aa\u95ab\u95ac\u95ad\u95ae\u95af\u95b0\u95b1\u95b2\u95b3\u95b4\u95b5\u95b6\u95b7\u95b8\u95b9\u95ba\u95bb\u95bc\u95bd\u95be\u95bf\u95c0\u95c1\u95c2\u95c3\u95c4\u95c5\u95c6\u95c7\u95c8\u95c9\u95ca\u95cb\u95cc\u95cd\u95ce\u95cf\u95d0\u95d1\u95d2\u95d3\u95d4\u95d5\u95d6\u95d7\u95d8\u95d9\u95da\u95db\u95dc\u95dd\u95de\u95df\u95e0\u95e1\u95e2\u95e3\u95e4\u95e5\u95e6\u95e7\u95e8\u95e9\u95ea\u95eb\u95ec\u95ed\u95ee\u95ef\u95f0\u95f1\u95f2\u95f3\u95f4\u95f5\u95f6\u95f7\u95f8\u95f9\u95fa\u95fb\u95fc\u95fd\u95fe\u95ff\u9600\u9601\u9602\u9603\u9604\u9605\u9606\u9607\u9608\u9609\u960a\u960b\u960c\u960d\u960e\u960f\u9610\u9611\u9612\u9613\u9614\u9615\u9616\u9617\u9618\u9619\u961a\u961b\u961c\u961d\u961e\u961f\u9620\u9621\u9622\u9623\u9624\u9625\u9626\u9627\u9628\u9629\u962a\u962b\u962c\u962d\u962e\u962f\u9630\u9631\u9632\u9633\u9634\u9635\u9636\u9637\u9638\u9639\u963a\u963b\u963c\u963d\u963e\u963f\u9640\u9641\u9642\u9643\u9644\u9645\u9646\u9647\u9648\u9649\u964a\u964b\u964c\u964d\u964e\u964f\u9650\u9651\u9652\u9653\u9654\u9655\u9656\u9657\u9658\u9659\u965a\u965b\u965c\u965d\u965e\u965f\u9660\u9661\u9662\u9663\u9664\u9665\u9666\u9667\u9668\u9669\u966a\u966b\u966c\u966d\u966e\u966f\u9670\u9671\u9672\u9673\u9674\u9675\u9676\u9677\u9678\u9679\u967a\u967b\u967c\u967d\u967e\u967f\u9680\u9681\u9682\u9683\u9684\u9685\u9686\u9687\u9688\u9689\u968a\u968b\u968c\u968d\u968e\u968f\u9690\u9691\u9692\u9693\u9694\u9695\u9696\u9697\u9698\u9699\u969a\u969b\u969c\u969d\u969e\u969f\u96a0\u96a1\u96a2\u96a3\u96a4\u96a5\u96a6\u96a7\u96a8\u96a9\u96aa\u96ab\u96ac\u96ad\u96ae\u96af\u96b0\u96b1\u96b2\u96b3\u96b4\u96b5\u96b6\u96b7\u96b8\u96b9\u96ba\u96bb\u96bc\u96bd\u96be\u96bf\u96c0\u96c1\u96c2\u96c3\u96c4\u96c5\u96c6\u96c7\u96c8\u96c9\u96ca\u96cb\u96cc\u96cd\u96ce\u96cf\u96d0\u96d1\u96d2\u96d3\u96d4\u96d5\u96d6\u96d7\u96d8\u96d9\u96da\u96db\u96dc\u96dd\u96de\u96df\u96e0\u96e1\u96e2\u96e3\u96e4\u96e5\u96e6\u96e7\u96e8\u96e9\u96ea\u96eb\u96ec\u96ed\u96ee\u96ef\u96f0\u96f1\u96f2\u96f3\u96f4\u96f5\u96f6\u96f7\u96f8\u96f9\u96fa\u96fb\u96fc\u96fd\u96fe\u96ff\u9700\u9701\u9702\u9703\u9704\u9705\u9706\u9707\u9708\u9709\u970a\u970b\u970c\u970d\u970e\u970f\u9710\u9711\u9712\u9713\u9714\u9715\u9716\u9717\u9718\u9719\u971a\u971b\u971c\u971d\u971e\u971f\u9720\u9721\u9722\u9723\u9724\u9725\u9726\u9727\u9728\u9729\u972a\u972b\u972c\u972d\u972e\u972f\u9730\u9731\u9732\u9733\u9734\u9735\u9736\u9737\u9738\u9739\u973a\u973b\u973c\u973d\u973e\u973f\u9740\u9741\u9742\u9743\u9744\u9745\u9746\u9747\u9748\u9749\u974a\u974b\u974c\u974d\u974e\u974f\u9750\u9751\u9752\u9753\u9754\u9755\u9756\u9757\u9758\u9759\u975a\u975b\u975c\u975d\u975e\u975f\u9760\u9761\u9762\u9763\u9764\u9765\u9766\u9767\u9768\u9769\u976a\u976b\u976c\u976d\u976e\u976f\u9770\u9771\u9772\u9773\u9774\u9775\u9776\u9777\u9778\u9779\u977a\u977b\u977c\u977d\u977e\u977f\u9780\u9781\u9782\u9783\u9784\u9785\u9786\u9787\u9788\u9789\u978a\u978b\u978c\u978d\u978e\u978f\u9790\u9791\u9792\u9793\u9794\u9795\u9796\u9797\u9798\u9799\u979a\u979b\u979c\u979d\u979e\u979f\u97a0\u97a1\u97a2\u97a3\u97a4\u97a5\u97a6\u97a7\u97a8\u97a9\u97aa\u97ab\u97ac\u97ad\u97ae\u97af\u97b0\u97b1\u97b2\u97b3\u97b4\u97b5\u97b6\u97b7\u97b8\u97b9\u97ba\u97bb\u97bc\u97bd\u97be\u97bf\u97c0\u97c1\u97c2\u97c3\u97c4\u97c5\u97c6\u97c7\u97c8\u97c9\u97ca\u97cb\u97cc\u97cd\u97ce\u97cf\u97d0\u97d1\u97d2\u97d3\u97d4\u97d5\u97d6\u97d7\u97d8\u97d9\u97da\u97db\u97dc\u97dd\u97de\u97df\u97e0\u97e1\u97e2\u97e3\u97e4\u97e5\u97e6\u97e7\u97e8\u97e9\u97ea\u97eb\u97ec\u97ed\u97ee\u97ef\u97f0\u97f1\u97f2\u97f3\u97f4\u97f5\u97f6\u97f7\u97f8\u97f9\u97fa\u97fb\u97fc\u97fd\u97fe\u97ff\u9800\u9801\u9802\u9803\u9804\u9805\u9806\u9807\u9808\u9809\u980a\u980b\u980c\u980d\u980e\u980f\u9810\u9811\u9812\u9813\u9814\u9815\u9816\u9817\u9818\u9819\u981a\u981b\u981c\u981d\u981e\u981f\u9820\u9821\u9822\u9823\u9824\u9825\u9826\u9827\u9828\u9829\u982a\u982b\u982c\u982d\u982e\u982f\u9830\u9831\u9832\u9833\u9834\u9835\u9836\u9837\u9838\u9839\u983a\u983b\u983c\u983d\u983e\u983f\u9840\u9841\u9842\u9843\u9844\u9845\u9846\u9847\u9848\u9849\u984a\u984b\u984c\u984d\u984e\u984f\u9850\u9851\u9852\u9853\u9854\u9855\u9856\u9857\u9858\u9859\u985a\u985b\u985c\u985d\u985e\u985f\u9860\u9861\u9862\u9863\u9864\u9865\u9866\u9867\u9868\u9869\u986a\u986b\u986c\u986d\u986e\u986f\u9870\u9871\u9872\u9873\u9874\u9875\u9876\u9877\u9878\u9879\u987a\u987b\u987c\u987d\u987e\u987f\u9880\u9881\u9882\u9883\u9884\u9885\u9886\u9887\u9888\u9889\u988a\u988b\u988c\u988d\u988e\u988f\u9890\u9891\u9892\u9893\u9894\u9895\u9896\u9897\u9898\u9899\u989a\u989b\u989c\u989d\u989e\u989f\u98a0\u98a1\u98a2\u98a3\u98a4\u98a5\u98a6\u98a7\u98a8\u98a9\u98aa\u98ab\u98ac\u98ad\u98ae\u98af\u98b0\u98b1\u98b2\u98b3\u98b4\u98b5\u98b6\u98b7\u98b8\u98b9\u98ba\u98bb\u98bc\u98bd\u98be\u98bf\u98c0\u98c1\u98c2\u98c3\u98c4\u98c5\u98c6\u98c7\u98c8\u98c9\u98ca\u98cb\u98cc\u98cd\u98ce\u98cf\u98d0\u98d1\u98d2\u98d3\u98d4\u98d5\u98d6\u98d7\u98d8\u98d9\u98da\u98db\u98dc\u98dd\u98de\u98df\u98e0\u98e1\u98e2\u98e3\u98e4\u98e5\u98e6\u98e7\u98e8\u98e9\u98ea\u98eb\u98ec\u98ed\u98ee\u98ef\u98f0\u98f1\u98f2\u98f3\u98f4\u98f5\u98f6\u98f7\u98f8\u98f9\u98fa\u98fb\u98fc\u98fd\u98fe\u98ff\u9900\u9901\u9902\u9903\u9904\u9905\u9906\u9907\u9908\u9909\u990a\u990b\u990c\u990d\u990e\u990f\u9910\u9911\u9912\u9913\u9914\u9915\u9916\u9917\u9918\u9919\u991a\u991b\u991c\u991d\u991e\u991f\u9920\u9921\u9922\u9923\u9924\u9925\u9926\u9927\u9928\u9929\u992a\u992b\u992c\u992d\u992e\u992f\u9930\u9931\u9932\u9933\u9934\u9935\u9936\u9937\u9938\u9939\u993a\u993b\u993c\u993d\u993e\u993f\u9940\u9941\u9942\u9943\u9944\u9945\u9946\u9947\u9948\u9949\u994a\u994b\u994c\u994d\u994e\u994f\u9950\u9951\u9952\u9953\u9954\u9955\u9956\u9957\u9958\u9959\u995a\u995b\u995c\u995d\u995e\u995f\u9960\u9961\u9962\u9963\u9964\u9965\u9966\u9967\u9968\u9969\u996a\u996b\u996c\u996d\u996e\u996f\u9970\u9971\u9972\u9973\u9974\u9975\u9976\u9977\u9978\u9979\u997a\u997b\u997c\u997d\u997e\u997f\u9980\u9981\u9982\u9983\u9984\u9985\u9986\u9987\u9988\u9989\u998a\u998b\u998c\u998d\u998e\u998f\u9990\u9991\u9992\u9993\u9994\u9995\u9996\u9997\u9998\u9999\u999a\u999b\u999c\u999d\u999e\u999f\u99a0\u99a1\u99a2\u99a3\u99a4\u99a5\u99a6\u99a7\u99a8\u99a9\u99aa\u99ab\u99ac\u99ad\u99ae\u99af\u99b0\u99b1\u99b2\u99b3\u99b4\u99b5\u99b6\u99b7\u99b8\u99b9\u99ba\u99bb\u99bc\u99bd\u99be\u99bf\u99c0\u99c1\u99c2\u99c3\u99c4\u99c5\u99c6\u99c7\u99c8\u99c9\u99ca\u99cb\u99cc\u99cd\u99ce\u99cf\u99d0\u99d1\u99d2\u99d3\u99d4\u99d5\u99d6\u99d7\u99d8\u99d9\u99da\u99db\u99dc\u99dd\u99de\u99df\u99e0\u99e1\u99e2\u99e3\u99e4\u99e5\u99e6\u99e7\u99e8\u99e9\u99ea\u99eb\u99ec\u99ed\u99ee\u99ef\u99f0\u99f1\u99f2\u99f3\u99f4\u99f5\u99f6\u99f7\u99f8\u99f9\u99fa\u99fb\u99fc\u99fd\u99fe\u99ff\u9a00\u9a01\u9a02\u9a03\u9a04\u9a05\u9a06\u9a07\u9a08\u9a09\u9a0a\u9a0b\u9a0c\u9a0d\u9a0e\u9a0f\u9a10\u9a11\u9a12\u9a13\u9a14\u9a15\u9a16\u9a17\u9a18\u9a19\u9a1a\u9a1b\u9a1c\u9a1d\u9a1e\u9a1f\u9a20\u9a21\u9a22\u9a23\u9a24\u9a25\u9a26\u9a27\u9a28\u9a29\u9a2a\u9a2b\u9a2c\u9a2d\u9a2e\u9a2f\u9a30\u9a31\u9a32\u9a33\u9a34\u9a35\u9a36\u9a37\u9a38\u9a39\u9a3a\u9a3b\u9a3c\u9a3d\u9a3e\u9a3f\u9a40\u9a41\u9a42\u9a43\u9a44\u9a45\u9a46\u9a47\u9a48\u9a49\u9a4a\u9a4b\u9a4c\u9a4d\u9a4e\u9a4f\u9a50\u9a51\u9a52\u9a53\u9a54\u9a55\u9a56\u9a57\u9a58\u9a59\u9a5a\u9a5b\u9a5c\u9a5d\u9a5e\u9a5f\u9a60\u9a61\u9a62\u9a63\u9a64\u9a65\u9a66\u9a67\u9a68\u9a69\u9a6a\u9a6b\u9a6c\u9a6d\u9a6e\u9a6f\u9a70\u9a71\u9a72\u9a73\u9a74\u9a75\u9a76\u9a77\u9a78\u9a79\u9a7a\u9a7b\u9a7c\u9a7d\u9a7e\u9a7f\u9a80\u9a81\u9a82\u9a83\u9a84\u9a85\u9a86\u9a87\u9a88\u9a89\u9a8a\u9a8b\u9a8c\u9a8d\u9a8e\u9a8f\u9a90\u9a91\u9a92\u9a93\u9a94\u9a95\u9a96\u9a97\u9a98\u9a99\u9a9a\u9a9b\u9a9c\u9a9d\u9a9e\u9a9f\u9aa0\u9aa1\u9aa2\u9aa3\u9aa4\u9aa5\u9aa6\u9aa7\u9aa8\u9aa9\u9aaa\u9aab\u9aac\u9aad\u9aae\u9aaf\u9ab0\u9ab1\u9ab2\u9ab3\u9ab4\u9ab5\u9ab6\u9ab7\u9ab8\u9ab9\u9aba\u9abb\u9abc\u9abd\u9abe\u9abf\u9ac0\u9ac1\u9ac2\u9ac3\u9ac4\u9ac5\u9ac6\u9ac7\u9ac8\u9ac9\u9aca\u9acb\u9acc\u9acd\u9ace\u9acf\u9ad0\u9ad1\u9ad2\u9ad3\u9ad4\u9ad5\u9ad6\u9ad7\u9ad8\u9ad9\u9ada\u9adb\u9adc\u9add\u9ade\u9adf\u9ae0\u9ae1\u9ae2\u9ae3\u9ae4\u9ae5\u9ae6\u9ae7\u9ae8\u9ae9\u9aea\u9aeb\u9aec\u9aed\u9aee\u9aef\u9af0\u9af1\u9af2\u9af3\u9af4\u9af5\u9af6\u9af7\u9af8\u9af9\u9afa\u9afb\u9afc\u9afd\u9afe\u9aff\u9b00\u9b01\u9b02\u9b03\u9b04\u9b05\u9b06\u9b07\u9b08\u9b09\u9b0a\u9b0b\u9b0c\u9b0d\u9b0e\u9b0f\u9b10\u9b11\u9b12\u9b13\u9b14\u9b15\u9b16\u9b17\u9b18\u9b19\u9b1a\u9b1b\u9b1c\u9b1d\u9b1e\u9b1f\u9b20\u9b21\u9b22\u9b23\u9b24\u9b25\u9b26\u9b27\u9b28\u9b29\u9b2a\u9b2b\u9b2c\u9b2d\u9b2e\u9b2f\u9b30\u9b31\u9b32\u9b33\u9b34\u9b35\u9b36\u9b37\u9b38\u9b39\u9b3a\u9b3b\u9b3c\u9b3d\u9b3e\u9b3f\u9b40\u9b41\u9b42\u9b43\u9b44\u9b45\u9b46\u9b47\u9b48\u9b49\u9b4a\u9b4b\u9b4c\u9b4d\u9b4e\u9b4f\u9b50\u9b51\u9b52\u9b53\u9b54\u9b55\u9b56\u9b57\u9b58\u9b59\u9b5a\u9b5b\u9b5c\u9b5d\u9b5e\u9b5f\u9b60\u9b61\u9b62\u9b63\u9b64\u9b65\u9b66\u9b67\u9b68\u9b69\u9b6a\u9b6b\u9b6c\u9b6d\u9b6e\u9b6f\u9b70\u9b71\u9b72\u9b73\u9b74\u9b75\u9b76\u9b77\u9b78\u9b79\u9b7a\u9b7b\u9b7c\u9b7d\u9b7e\u9b7f\u9b80\u9b81\u9b82\u9b83\u9b84\u9b85\u9b86\u9b87\u9b88\u9b89\u9b8a\u9b8b\u9b8c\u9b8d\u9b8e\u9b8f\u9b90\u9b91\u9b92\u9b93\u9b94\u9b95\u9b96\u9b97\u9b98\u9b99\u9b9a\u9b9b\u9b9c\u9b9d\u9b9e\u9b9f\u9ba0\u9ba1\u9ba2\u9ba3\u9ba4\u9ba5\u9ba6\u9ba7\u9ba8\u9ba9\u9baa\u9bab\u9bac\u9bad\u9bae\u9baf\u9bb0\u9bb1\u9bb2\u9bb3\u9bb4\u9bb5\u9bb6\u9bb7\u9bb8\u9bb9\u9bba\u9bbb\u9bbc\u9bbd\u9bbe\u9bbf\u9bc0\u9bc1\u9bc2\u9bc3\u9bc4\u9bc5\u9bc6\u9bc7\u9bc8\u9bc9\u9bca\u9bcb\u9bcc\u9bcd\u9bce\u9bcf\u9bd0\u9bd1\u9bd2\u9bd3\u9bd4\u9bd5\u9bd6\u9bd7\u9bd8\u9bd9\u9bda\u9bdb\u9bdc\u9bdd\u9bde\u9bdf\u9be0\u9be1\u9be2\u9be3\u9be4\u9be5\u9be6\u9be7\u9be8\u9be9\u9bea\u9beb\u9bec\u9bed\u9bee\u9bef\u9bf0\u9bf1\u9bf2\u9bf3\u9bf4\u9bf5\u9bf6\u9bf7\u9bf8\u9bf9\u9bfa\u9bfb\u9bfc\u9bfd\u9bfe\u9bff\u9c00\u9c01\u9c02\u9c03\u9c04\u9c05\u9c06\u9c07\u9c08\u9c09\u9c0a\u9c0b\u9c0c\u9c0d\u9c0e\u9c0f\u9c10\u9c11\u9c12\u9c13\u9c14\u9c15\u9c16\u9c17\u9c18\u9c19\u9c1a\u9c1b\u9c1c\u9c1d\u9c1e\u9c1f\u9c20\u9c21\u9c22\u9c23\u9c24\u9c25\u9c26\u9c27\u9c28\u9c29\u9c2a\u9c2b\u9c2c\u9c2d\u9c2e\u9c2f\u9c30\u9c31\u9c32\u9c33\u9c34\u9c35\u9c36\u9c37\u9c38\u9c39\u9c3a\u9c3b\u9c3c\u9c3d\u9c3e\u9c3f\u9c40\u9c41\u9c42\u9c43\u9c44\u9c45\u9c46\u9c47\u9c48\u9c49\u9c4a\u9c4b\u9c4c\u9c4d\u9c4e\u9c4f\u9c50\u9c51\u9c52\u9c53\u9c54\u9c55\u9c56\u9c57\u9c58\u9c59\u9c5a\u9c5b\u9c5c\u9c5d\u9c5e\u9c5f\u9c60\u9c61\u9c62\u9c63\u9c64\u9c65\u9c66\u9c67\u9c68\u9c69\u9c6a\u9c6b\u9c6c\u9c6d\u9c6e\u9c6f\u9c70\u9c71\u9c72\u9c73\u9c74\u9c75\u9c76\u9c77\u9c78\u9c79\u9c7a\u9c7b\u9c7c\u9c7d\u9c7e\u9c7f\u9c80\u9c81\u9c82\u9c83\u9c84\u9c85\u9c86\u9c87\u9c88\u9c89\u9c8a\u9c8b\u9c8c\u9c8d\u9c8e\u9c8f\u9c90\u9c91\u9c92\u9c93\u9c94\u9c95\u9c96\u9c97\u9c98\u9c99\u9c9a\u9c9b\u9c9c\u9c9d\u9c9e\u9c9f\u9ca0\u9ca1\u9ca2\u9ca3\u9ca4\u9ca5\u9ca6\u9ca7\u9ca8\u9ca9\u9caa\u9cab\u9cac\u9cad\u9cae\u9caf\u9cb0\u9cb1\u9cb2\u9cb3\u9cb4\u9cb5\u9cb6\u9cb7\u9cb8\u9cb9\u9cba\u9cbb\u9cbc\u9cbd\u9cbe\u9cbf\u9cc0\u9cc1\u9cc2\u9cc3\u9cc4\u9cc5\u9cc6\u9cc7\u9cc8\u9cc9\u9cca\u9ccb\u9ccc\u9ccd\u9cce\u9ccf\u9cd0\u9cd1\u9cd2\u9cd3\u9cd4\u9cd5\u9cd6\u9cd7\u9cd8\u9cd9\u9cda\u9cdb\u9cdc\u9cdd\u9cde\u9cdf\u9ce0\u9ce1\u9ce2\u9ce3\u9ce4\u9ce5\u9ce6\u9ce7\u9ce8\u9ce9\u9cea\u9ceb\u9cec\u9ced\u9cee\u9cef\u9cf0\u9cf1\u9cf2\u9cf3\u9cf4\u9cf5\u9cf6\u9cf7\u9cf8\u9cf9\u9cfa\u9cfb\u9cfc\u9cfd\u9cfe\u9cff\u9d00\u9d01\u9d02\u9d03\u9d04\u9d05\u9d06\u9d07\u9d08\u9d09\u9d0a\u9d0b\u9d0c\u9d0d\u9d0e\u9d0f\u9d10\u9d11\u9d12\u9d13\u9d14\u9d15\u9d16\u9d17\u9d18\u9d19\u9d1a\u9d1b\u9d1c\u9d1d\u9d1e\u9d1f\u9d20\u9d21\u9d22\u9d23\u9d24\u9d25\u9d26\u9d27\u9d28\u9d29\u9d2a\u9d2b\u9d2c\u9d2d\u9d2e\u9d2f\u9d30\u9d31\u9d32\u9d33\u9d34\u9d35\u9d36\u9d37\u9d38\u9d39\u9d3a\u9d3b\u9d3c\u9d3d\u9d3e\u9d3f\u9d40\u9d41\u9d42\u9d43\u9d44\u9d45\u9d46\u9d47\u9d48\u9d49\u9d4a\u9d4b\u9d4c\u9d4d\u9d4e\u9d4f\u9d50\u9d51\u9d52\u9d53\u9d54\u9d55\u9d56\u9d57\u9d58\u9d59\u9d5a\u9d5b\u9d5c\u9d5d\u9d5e\u9d5f\u9d60\u9d61\u9d62\u9d63\u9d64\u9d65\u9d66\u9d67\u9d68\u9d69\u9d6a\u9d6b\u9d6c\u9d6d\u9d6e\u9d6f\u9d70\u9d71\u9d72\u9d73\u9d74\u9d75\u9d76\u9d77\u9d78\u9d79\u9d7a\u9d7b\u9d7c\u9d7d\u9d7e\u9d7f\u9d80\u9d81\u9d82\u9d83\u9d84\u9d85\u9d86\u9d87\u9d88\u9d89\u9d8a\u9d8b\u9d8c\u9d8d\u9d8e\u9d8f\u9d90\u9d91\u9d92\u9d93\u9d94\u9d95\u9d96\u9d97\u9d98\u9d99\u9d9a\u9d9b\u9d9c\u9d9d\u9d9e\u9d9f\u9da0\u9da1\u9da2\u9da3\u9da4\u9da5\u9da6\u9da7\u9da8\u9da9\u9daa\u9dab\u9dac\u9dad\u9dae\u9daf\u9db0\u9db1\u9db2\u9db3\u9db4\u9db5\u9db6\u9db7\u9db8\u9db9\u9dba\u9dbb\u9dbc\u9dbd\u9dbe\u9dbf\u9dc0\u9dc1\u9dc2\u9dc3\u9dc4\u9dc5\u9dc6\u9dc7\u9dc8\u9dc9\u9dca\u9dcb\u9dcc\u9dcd\u9dce\u9dcf\u9dd0\u9dd1\u9dd2\u9dd3\u9dd4\u9dd5\u9dd6\u9dd7\u9dd8\u9dd9\u9dda\u9ddb\u9ddc\u9ddd\u9dde\u9ddf\u9de0\u9de1\u9de2\u9de3\u9de4\u9de5\u9de6\u9de7\u9de8\u9de9\u9dea\u9deb\u9dec\u9ded\u9dee\u9def\u9df0\u9df1\u9df2\u9df3\u9df4\u9df5\u9df6\u9df7\u9df8\u9df9\u9dfa\u9dfb\u9dfc\u9dfd\u9dfe\u9dff\u9e00\u9e01\u9e02\u9e03\u9e04\u9e05\u9e06\u9e07\u9e08\u9e09\u9e0a\u9e0b\u9e0c\u9e0d\u9e0e\u9e0f\u9e10\u9e11\u9e12\u9e13\u9e14\u9e15\u9e16\u9e17\u9e18\u9e19\u9e1a\u9e1b\u9e1c\u9e1d\u9e1e\u9e1f\u9e20\u9e21\u9e22\u9e23\u9e24\u9e25\u9e26\u9e27\u9e28\u9e29\u9e2a\u9e2b\u9e2c\u9e2d\u9e2e\u9e2f\u9e30\u9e31\u9e32\u9e33\u9e34\u9e35\u9e36\u9e37\u9e38\u9e39\u9e3a\u9e3b\u9e3c\u9e3d\u9e3e\u9e3f\u9e40\u9e41\u9e42\u9e43\u9e44\u9e45\u9e46\u9e47\u9e48\u9e49\u9e4a\u9e4b\u9e4c\u9e4d\u9e4e\u9e4f\u9e50\u9e51\u9e52\u9e53\u9e54\u9e55\u9e56\u9e57\u9e58\u9e59\u9e5a\u9e5b\u9e5c\u9e5d\u9e5e\u9e5f\u9e60\u9e61\u9e62\u9e63\u9e64\u9e65\u9e66\u9e67\u9e68\u9e69\u9e6a\u9e6b\u9e6c\u9e6d\u9e6e\u9e6f\u9e70\u9e71\u9e72\u9e73\u9e74\u9e75\u9e76\u9e77\u9e78\u9e79\u9e7a\u9e7b\u9e7c\u9e7d\u9e7e\u9e7f\u9e80\u9e81\u9e82\u9e83\u9e84\u9e85\u9e86\u9e87\u9e88\u9e89\u9e8a\u9e8b\u9e8c\u9e8d\u9e8e\u9e8f\u9e90\u9e91\u9e92\u9e93\u9e94\u9e95\u9e96\u9e97\u9e98\u9e99\u9e9a\u9e9b\u9e9c\u9e9d\u9e9e\u9e9f\u9ea0\u9ea1\u9ea2\u9ea3\u9ea4\u9ea5\u9ea6\u9ea7\u9ea8\u9ea9\u9eaa\u9eab\u9eac\u9ead\u9eae\u9eaf\u9eb0\u9eb1\u9eb2\u9eb3\u9eb4\u9eb5\u9eb6\u9eb7\u9eb8\u9eb9\u9eba\u9ebb\u9ebc\u9ebd\u9ebe\u9ebf\u9ec0\u9ec1\u9ec2\u9ec3\u9ec4\u9ec5\u9ec6\u9ec7\u9ec8\u9ec9\u9eca\u9ecb\u9ecc\u9ecd\u9ece\u9ecf\u9ed0\u9ed1\u9ed2\u9ed3\u9ed4\u9ed5\u9ed6\u9ed7\u9ed8\u9ed9\u9eda\u9edb\u9edc\u9edd\u9ede\u9edf\u9ee0\u9ee1\u9ee2\u9ee3\u9ee4\u9ee5\u9ee6\u9ee7\u9ee8\u9ee9\u9eea\u9eeb\u9eec\u9eed\u9eee\u9eef\u9ef0\u9ef1\u9ef2\u9ef3\u9ef4\u9ef5\u9ef6\u9ef7\u9ef8\u9ef9\u9efa\u9efb\u9efc\u9efd\u9efe\u9eff\u9f00\u9f01\u9f02\u9f03\u9f04\u9f05\u9f06\u9f07\u9f08\u9f09\u9f0a\u9f0b\u9f0c\u9f0d\u9f0e\u9f0f\u9f10\u9f11\u9f12\u9f13\u9f14\u9f15\u9f16\u9f17\u9f18\u9f19\u9f1a\u9f1b\u9f1c\u9f1d\u9f1e\u9f1f\u9f20\u9f21\u9f22\u9f23\u9f24\u9f25\u9f26\u9f27\u9f28\u9f29\u9f2a\u9f2b\u9f2c\u9f2d\u9f2e\u9f2f\u9f30\u9f31\u9f32\u9f33\u9f34\u9f35\u9f36\u9f37\u9f38\u9f39\u9f3a\u9f3b\u9f3c\u9f3d\u9f3e\u9f3f\u9f40\u9f41\u9f42\u9f43\u9f44\u9f45\u9f46\u9f47\u9f48\u9f49\u9f4a\u9f4b\u9f4c\u9f4d\u9f4e\u9f4f\u9f50\u9f51\u9f52\u9f53\u9f54\u9f55\u9f56\u9f57\u9f58\u9f59\u9f5a\u9f5b\u9f5c\u9f5d\u9f5e\u9f5f\u9f60\u9f61\u9f62\u9f63\u9f64\u9f65\u9f66\u9f67\u9f68\u9f69\u9f6a\u9f6b\u9f6c\u9f6d\u9f6e\u9f6f\u9f70\u9f71\u9f72\u9f73\u9f74\u9f75\u9f76\u9f77\u9f78\u9f79\u9f7a\u9f7b\u9f7c\u9f7d\u9f7e\u9f7f\u9f80\u9f81\u9f82\u9f83\u9f84\u9f85\u9f86\u9f87\u9f88\u9f89\u9f8a\u9f8b\u9f8c\u9f8d\u9f8e\u9f8f\u9f90\u9f91\u9f92\u9f93\u9f94\u9f95\u9f96\u9f97\u9f98\u9f99\u9f9a\u9f9b\u9f9c\u9f9d\u9f9e\u9f9f\u9fa0\u9fa1\u9fa2\u9fa3\u9fa4\u9fa5\u9fa6\u9fa7\u9fa8\u9fa9\u9faa\u9fab\u9fac\u9fad\u9fae\u9faf\u9fb0\u9fb1\u9fb2\u9fb3\u9fb4\u9fb5\u9fb6\u9fb7\u9fb8\u9fb9\u9fba\u9fbb\ua000\ua001\ua002\ua003\ua004\ua005\ua006\ua007\ua008\ua009\ua00a\ua00b\ua00c\ua00d\ua00e\ua00f\ua010\ua011\ua012\ua013\ua014\ua016\ua017\ua018\ua019\ua01a\ua01b\ua01c\ua01d\ua01e\ua01f\ua020\ua021\ua022\ua023\ua024\ua025\ua026\ua027\ua028\ua029\ua02a\ua02b\ua02c\ua02d\ua02e\ua02f\ua030\ua031\ua032\ua033\ua034\ua035\ua036\ua037\ua038\ua039\ua03a\ua03b\ua03c\ua03d\ua03e\ua03f\ua040\ua041\ua042\ua043\ua044\ua045\ua046\ua047\ua048\ua049\ua04a\ua04b\ua04c\ua04d\ua04e\ua04f\ua050\ua051\ua052\ua053\ua054\ua055\ua056\ua057\ua058\ua059\ua05a\ua05b\ua05c\ua05d\ua05e\ua05f\ua060\ua061\ua062\ua063\ua064\ua065\ua066\ua067\ua068\ua069\ua06a\ua06b\ua06c\ua06d\ua06e\ua06f\ua070\ua071\ua072\ua073\ua074\ua075\ua076\ua077\ua078\ua079\ua07a\ua07b\ua07c\ua07d\ua07e\ua07f\ua080\ua081\ua082\ua083\ua084\ua085\ua086\ua087\ua088\ua089\ua08a\ua08b\ua08c\ua08d\ua08e\ua08f\ua090\ua091\ua092\ua093\ua094\ua095\ua096\ua097\ua098\ua099\ua09a\ua09b\ua09c\ua09d\ua09e\ua09f\ua0a0\ua0a1\ua0a2\ua0a3\ua0a4\ua0a5\ua0a6\ua0a7\ua0a8\ua0a9\ua0aa\ua0ab\ua0ac\ua0ad\ua0ae\ua0af\ua0b0\ua0b1\ua0b2\ua0b3\ua0b4\ua0b5\ua0b6\ua0b7\ua0b8\ua0b9\ua0ba\ua0bb\ua0bc\ua0bd\ua0be\ua0bf\ua0c0\ua0c1\ua0c2\ua0c3\ua0c4\ua0c5\ua0c6\ua0c7\ua0c8\ua0c9\ua0ca\ua0cb\ua0cc\ua0cd\ua0ce\ua0cf\ua0d0\ua0d1\ua0d2\ua0d3\ua0d4\ua0d5\ua0d6\ua0d7\ua0d8\ua0d9\ua0da\ua0db\ua0dc\ua0dd\ua0de\ua0df\ua0e0\ua0e1\ua0e2\ua0e3\ua0e4\ua0e5\ua0e6\ua0e7\ua0e8\ua0e9\ua0ea\ua0eb\ua0ec\ua0ed\ua0ee\ua0ef\ua0f0\ua0f1\ua0f2\ua0f3\ua0f4\ua0f5\ua0f6\ua0f7\ua0f8\ua0f9\ua0fa\ua0fb\ua0fc\ua0fd\ua0fe\ua0ff\ua100\ua101\ua102\ua103\ua104\ua105\ua106\ua107\ua108\ua109\ua10a\ua10b\ua10c\ua10d\ua10e\ua10f\ua110\ua111\ua112\ua113\ua114\ua115\ua116\ua117\ua118\ua119\ua11a\ua11b\ua11c\ua11d\ua11e\ua11f\ua120\ua121\ua122\ua123\ua124\ua125\ua126\ua127\ua128\ua129\ua12a\ua12b\ua12c\ua12d\ua12e\ua12f\ua130\ua131\ua132\ua133\ua134\ua135\ua136\ua137\ua138\ua139\ua13a\ua13b\ua13c\ua13d\ua13e\ua13f\ua140\ua141\ua142\ua143\ua144\ua145\ua146\ua147\ua148\ua149\ua14a\ua14b\ua14c\ua14d\ua14e\ua14f\ua150\ua151\ua152\ua153\ua154\ua155\ua156\ua157\ua158\ua159\ua15a\ua15b\ua15c\ua15d\ua15e\ua15f\ua160\ua161\ua162\ua163\ua164\ua165\ua166\ua167\ua168\ua169\ua16a\ua16b\ua16c\ua16d\ua16e\ua16f\ua170\ua171\ua172\ua173\ua174\ua175\ua176\ua177\ua178\ua179\ua17a\ua17b\ua17c\ua17d\ua17e\ua17f\ua180\ua181\ua182\ua183\ua184\ua185\ua186\ua187\ua188\ua189\ua18a\ua18b\ua18c\ua18d\ua18e\ua18f\ua190\ua191\ua192\ua193\ua194\ua195\ua196\ua197\ua198\ua199\ua19a\ua19b\ua19c\ua19d\ua19e\ua19f\ua1a0\ua1a1\ua1a2\ua1a3\ua1a4\ua1a5\ua1a6\ua1a7\ua1a8\ua1a9\ua1aa\ua1ab\ua1ac\ua1ad\ua1ae\ua1af\ua1b0\ua1b1\ua1b2\ua1b3\ua1b4\ua1b5\ua1b6\ua1b7\ua1b8\ua1b9\ua1ba\ua1bb\ua1bc\ua1bd\ua1be\ua1bf\ua1c0\ua1c1\ua1c2\ua1c3\ua1c4\ua1c5\ua1c6\ua1c7\ua1c8\ua1c9\ua1ca\ua1cb\ua1cc\ua1cd\ua1ce\ua1cf\ua1d0\ua1d1\ua1d2\ua1d3\ua1d4\ua1d5\ua1d6\ua1d7\ua1d8\ua1d9\ua1da\ua1db\ua1dc\ua1dd\ua1de\ua1df\ua1e0\ua1e1\ua1e2\ua1e3\ua1e4\ua1e5\ua1e6\ua1e7\ua1e8\ua1e9\ua1ea\ua1eb\ua1ec\ua1ed\ua1ee\ua1ef\ua1f0\ua1f1\ua1f2\ua1f3\ua1f4\ua1f5\ua1f6\ua1f7\ua1f8\ua1f9\ua1fa\ua1fb\ua1fc\ua1fd\ua1fe\ua1ff\ua200\ua201\ua202\ua203\ua204\ua205\ua206\ua207\ua208\ua209\ua20a\ua20b\ua20c\ua20d\ua20e\ua20f\ua210\ua211\ua212\ua213\ua214\ua215\ua216\ua217\ua218\ua219\ua21a\ua21b\ua21c\ua21d\ua21e\ua21f\ua220\ua221\ua222\ua223\ua224\ua225\ua226\ua227\ua228\ua229\ua22a\ua22b\ua22c\ua22d\ua22e\ua22f\ua230\ua231\ua232\ua233\ua234\ua235\ua236\ua237\ua238\ua239\ua23a\ua23b\ua23c\ua23d\ua23e\ua23f\ua240\ua241\ua242\ua243\ua244\ua245\ua246\ua247\ua248\ua249\ua24a\ua24b\ua24c\ua24d\ua24e\ua24f\ua250\ua251\ua252\ua253\ua254\ua255\ua256\ua257\ua258\ua259\ua25a\ua25b\ua25c\ua25d\ua25e\ua25f\ua260\ua261\ua262\ua263\ua264\ua265\ua266\ua267\ua268\ua269\ua26a\ua26b\ua26c\ua26d\ua26e\ua26f\ua270\ua271\ua272\ua273\ua274\ua275\ua276\ua277\ua278\ua279\ua27a\ua27b\ua27c\ua27d\ua27e\ua27f\ua280\ua281\ua282\ua283\ua284\ua285\ua286\ua287\ua288\ua289\ua28a\ua28b\ua28c\ua28d\ua28e\ua28f\ua290\ua291\ua292\ua293\ua294\ua295\ua296\ua297\ua298\ua299\ua29a\ua29b\ua29c\ua29d\ua29e\ua29f\ua2a0\ua2a1\ua2a2\ua2a3\ua2a4\ua2a5\ua2a6\ua2a7\ua2a8\ua2a9\ua2aa\ua2ab\ua2ac\ua2ad\ua2ae\ua2af\ua2b0\ua2b1\ua2b2\ua2b3\ua2b4\ua2b5\ua2b6\ua2b7\ua2b8\ua2b9\ua2ba\ua2bb\ua2bc\ua2bd\ua2be\ua2bf\ua2c0\ua2c1\ua2c2\ua2c3\ua2c4\ua2c5\ua2c6\ua2c7\ua2c8\ua2c9\ua2ca\ua2cb\ua2cc\ua2cd\ua2ce\ua2cf\ua2d0\ua2d1\ua2d2\ua2d3\ua2d4\ua2d5\ua2d6\ua2d7\ua2d8\ua2d9\ua2da\ua2db\ua2dc\ua2dd\ua2de\ua2df\ua2e0\ua2e1\ua2e2\ua2e3\ua2e4\ua2e5\ua2e6\ua2e7\ua2e8\ua2e9\ua2ea\ua2eb\ua2ec\ua2ed\ua2ee\ua2ef\ua2f0\ua2f1\ua2f2\ua2f3\ua2f4\ua2f5\ua2f6\ua2f7\ua2f8\ua2f9\ua2fa\ua2fb\ua2fc\ua2fd\ua2fe\ua2ff\ua300\ua301\ua302\ua303\ua304\ua305\ua306\ua307\ua308\ua309\ua30a\ua30b\ua30c\ua30d\ua30e\ua30f\ua310\ua311\ua312\ua313\ua314\ua315\ua316\ua317\ua318\ua319\ua31a\ua31b\ua31c\ua31d\ua31e\ua31f\ua320\ua321\ua322\ua323\ua324\ua325\ua326\ua327\ua328\ua329\ua32a\ua32b\ua32c\ua32d\ua32e\ua32f\ua330\ua331\ua332\ua333\ua334\ua335\ua336\ua337\ua338\ua339\ua33a\ua33b\ua33c\ua33d\ua33e\ua33f\ua340\ua341\ua342\ua343\ua344\ua345\ua346\ua347\ua348\ua349\ua34a\ua34b\ua34c\ua34d\ua34e\ua34f\ua350\ua351\ua352\ua353\ua354\ua355\ua356\ua357\ua358\ua359\ua35a\ua35b\ua35c\ua35d\ua35e\ua35f\ua360\ua361\ua362\ua363\ua364\ua365\ua366\ua367\ua368\ua369\ua36a\ua36b\ua36c\ua36d\ua36e\ua36f\ua370\ua371\ua372\ua373\ua374\ua375\ua376\ua377\ua378\ua379\ua37a\ua37b\ua37c\ua37d\ua37e\ua37f\ua380\ua381\ua382\ua383\ua384\ua385\ua386\ua387\ua388\ua389\ua38a\ua38b\ua38c\ua38d\ua38e\ua38f\ua390\ua391\ua392\ua393\ua394\ua395\ua396\ua397\ua398\ua399\ua39a\ua39b\ua39c\ua39d\ua39e\ua39f\ua3a0\ua3a1\ua3a2\ua3a3\ua3a4\ua3a5\ua3a6\ua3a7\ua3a8\ua3a9\ua3aa\ua3ab\ua3ac\ua3ad\ua3ae\ua3af\ua3b0\ua3b1\ua3b2\ua3b3\ua3b4\ua3b5\ua3b6\ua3b7\ua3b8\ua3b9\ua3ba\ua3bb\ua3bc\ua3bd\ua3be\ua3bf\ua3c0\ua3c1\ua3c2\ua3c3\ua3c4\ua3c5\ua3c6\ua3c7\ua3c8\ua3c9\ua3ca\ua3cb\ua3cc\ua3cd\ua3ce\ua3cf\ua3d0\ua3d1\ua3d2\ua3d3\ua3d4\ua3d5\ua3d6\ua3d7\ua3d8\ua3d9\ua3da\ua3db\ua3dc\ua3dd\ua3de\ua3df\ua3e0\ua3e1\ua3e2\ua3e3\ua3e4\ua3e5\ua3e6\ua3e7\ua3e8\ua3e9\ua3ea\ua3eb\ua3ec\ua3ed\ua3ee\ua3ef\ua3f0\ua3f1\ua3f2\ua3f3\ua3f4\ua3f5\ua3f6\ua3f7\ua3f8\ua3f9\ua3fa\ua3fb\ua3fc\ua3fd\ua3fe\ua3ff\ua400\ua401\ua402\ua403\ua404\ua405\ua406\ua407\ua408\ua409\ua40a\ua40b\ua40c\ua40d\ua40e\ua40f\ua410\ua411\ua412\ua413\ua414\ua415\ua416\ua417\ua418\ua419\ua41a\ua41b\ua41c\ua41d\ua41e\ua41f\ua420\ua421\ua422\ua423\ua424\ua425\ua426\ua427\ua428\ua429\ua42a\ua42b\ua42c\ua42d\ua42e\ua42f\ua430\ua431\ua432\ua433\ua434\ua435\ua436\ua437\ua438\ua439\ua43a\ua43b\ua43c\ua43d\ua43e\ua43f\ua440\ua441\ua442\ua443\ua444\ua445\ua446\ua447\ua448\ua449\ua44a\ua44b\ua44c\ua44d\ua44e\ua44f\ua450\ua451\ua452\ua453\ua454\ua455\ua456\ua457\ua458\ua459\ua45a\ua45b\ua45c\ua45d\ua45e\ua45f\ua460\ua461\ua462\ua463\ua464\ua465\ua466\ua467\ua468\ua469\ua46a\ua46b\ua46c\ua46d\ua46e\ua46f\ua470\ua471\ua472\ua473\ua474\ua475\ua476\ua477\ua478\ua479\ua47a\ua47b\ua47c\ua47d\ua47e\ua47f\ua480\ua481\ua482\ua483\ua484\ua485\ua486\ua487\ua488\ua489\ua48a\ua48b\ua48c\ua800\ua801\ua803\ua804\ua805\ua807\ua808\ua809\ua80a\ua80c\ua80d\ua80e\ua80f\ua810\ua811\ua812\ua813\ua814\ua815\ua816\ua817\ua818\ua819\ua81a\ua81b\ua81c\ua81d\ua81e\ua81f\ua820\ua821\ua822\uac00\uac01\uac02\uac03\uac04\uac05\uac06\uac07\uac08\uac09\uac0a\uac0b\uac0c\uac0d\uac0e\uac0f\uac10\uac11\uac12\uac13\uac14\uac15\uac16\uac17\uac18\uac19\uac1a\uac1b\uac1c\uac1d\uac1e\uac1f\uac20\uac21\uac22\uac23\uac24\uac25\uac26\uac27\uac28\uac29\uac2a\uac2b\uac2c\uac2d\uac2e\uac2f\uac30\uac31\uac32\uac33\uac34\uac35\uac36\uac37\uac38\uac39\uac3a\uac3b\uac3c\uac3d\uac3e\uac3f\uac40\uac41\uac42\uac43\uac44\uac45\uac46\uac47\uac48\uac49\uac4a\uac4b\uac4c\uac4d\uac4e\uac4f\uac50\uac51\uac52\uac53\uac54\uac55\uac56\uac57\uac58\uac59\uac5a\uac5b\uac5c\uac5d\uac5e\uac5f\uac60\uac61\uac62\uac63\uac64\uac65\uac66\uac67\uac68\uac69\uac6a\uac6b\uac6c\uac6d\uac6e\uac6f\uac70\uac71\uac72\uac73\uac74\uac75\uac76\uac77\uac78\uac79\uac7a\uac7b\uac7c\uac7d\uac7e\uac7f\uac80\uac81\uac82\uac83\uac84\uac85\uac86\uac87\uac88\uac89\uac8a\uac8b\uac8c\uac8d\uac8e\uac8f\uac90\uac91\uac92\uac93\uac94\uac95\uac96\uac97\uac98\uac99\uac9a\uac9b\uac9c\uac9d\uac9e\uac9f\uaca0\uaca1\uaca2\uaca3\uaca4\uaca5\uaca6\uaca7\uaca8\uaca9\uacaa\uacab\uacac\uacad\uacae\uacaf\uacb0\uacb1\uacb2\uacb3\uacb4\uacb5\uacb6\uacb7\uacb8\uacb9\uacba\uacbb\uacbc\uacbd\uacbe\uacbf\uacc0\uacc1\uacc2\uacc3\uacc4\uacc5\uacc6\uacc7\uacc8\uacc9\uacca\uaccb\uaccc\uaccd\uacce\uaccf\uacd0\uacd1\uacd2\uacd3\uacd4\uacd5\uacd6\uacd7\uacd8\uacd9\uacda\uacdb\uacdc\uacdd\uacde\uacdf\uace0\uace1\uace2\uace3\uace4\uace5\uace6\uace7\uace8\uace9\uacea\uaceb\uacec\uaced\uacee\uacef\uacf0\uacf1\uacf2\uacf3\uacf4\uacf5\uacf6\uacf7\uacf8\uacf9\uacfa\uacfb\uacfc\uacfd\uacfe\uacff\uad00\uad01\uad02\uad03\uad04\uad05\uad06\uad07\uad08\uad09\uad0a\uad0b\uad0c\uad0d\uad0e\uad0f\uad10\uad11\uad12\uad13\uad14\uad15\uad16\uad17\uad18\uad19\uad1a\uad1b\uad1c\uad1d\uad1e\uad1f\uad20\uad21\uad22\uad23\uad24\uad25\uad26\uad27\uad28\uad29\uad2a\uad2b\uad2c\uad2d\uad2e\uad2f\uad30\uad31\uad32\uad33\uad34\uad35\uad36\uad37\uad38\uad39\uad3a\uad3b\uad3c\uad3d\uad3e\uad3f\uad40\uad41\uad42\uad43\uad44\uad45\uad46\uad47\uad48\uad49\uad4a\uad4b\uad4c\uad4d\uad4e\uad4f\uad50\uad51\uad52\uad53\uad54\uad55\uad56\uad57\uad58\uad59\uad5a\uad5b\uad5c\uad5d\uad5e\uad5f\uad60\uad61\uad62\uad63\uad64\uad65\uad66\uad67\uad68\uad69\uad6a\uad6b\uad6c\uad6d\uad6e\uad6f\uad70\uad71\uad72\uad73\uad74\uad75\uad76\uad77\uad78\uad79\uad7a\uad7b\uad7c\uad7d\uad7e\uad7f\uad80\uad81\uad82\uad83\uad84\uad85\uad86\uad87\uad88\uad89\uad8a\uad8b\uad8c\uad8d\uad8e\uad8f\uad90\uad91\uad92\uad93\uad94\uad95\uad96\uad97\uad98\uad99\uad9a\uad9b\uad9c\uad9d\uad9e\uad9f\uada0\uada1\uada2\uada3\uada4\uada5\uada6\uada7\uada8\uada9\uadaa\uadab\uadac\uadad\uadae\uadaf\uadb0\uadb1\uadb2\uadb3\uadb4\uadb5\uadb6\uadb7\uadb8\uadb9\uadba\uadbb\uadbc\uadbd\uadbe\uadbf\uadc0\uadc1\uadc2\uadc3\uadc4\uadc5\uadc6\uadc7\uadc8\uadc9\uadca\uadcb\uadcc\uadcd\uadce\uadcf\uadd0\uadd1\uadd2\uadd3\uadd4\uadd5\uadd6\uadd7\uadd8\uadd9\uadda\uaddb\uaddc\uaddd\uadde\uaddf\uade0\uade1\uade2\uade3\uade4\uade5\uade6\uade7\uade8\uade9\uadea\uadeb\uadec\uaded\uadee\uadef\uadf0\uadf1\uadf2\uadf3\uadf4\uadf5\uadf6\uadf7\uadf8\uadf9\uadfa\uadfb\uadfc\uadfd\uadfe\uadff\uae00\uae01\uae02\uae03\uae04\uae05\uae06\uae07\uae08\uae09\uae0a\uae0b\uae0c\uae0d\uae0e\uae0f\uae10\uae11\uae12\uae13\uae14\uae15\uae16\uae17\uae18\uae19\uae1a\uae1b\uae1c\uae1d\uae1e\uae1f\uae20\uae21\uae22\uae23\uae24\uae25\uae26\uae27\uae28\uae29\uae2a\uae2b\uae2c\uae2d\uae2e\uae2f\uae30\uae31\uae32\uae33\uae34\uae35\uae36\uae37\uae38\uae39\uae3a\uae3b\uae3c\uae3d\uae3e\uae3f\uae40\uae41\uae42\uae43\uae44\uae45\uae46\uae47\uae48\uae49\uae4a\uae4b\uae4c\uae4d\uae4e\uae4f\uae50\uae51\uae52\uae53\uae54\uae55\uae56\uae57\uae58\uae59\uae5a\uae5b\uae5c\uae5d\uae5e\uae5f\uae60\uae61\uae62\uae63\uae64\uae65\uae66\uae67\uae68\uae69\uae6a\uae6b\uae6c\uae6d\uae6e\uae6f\uae70\uae71\uae72\uae73\uae74\uae75\uae76\uae77\uae78\uae79\uae7a\uae7b\uae7c\uae7d\uae7e\uae7f\uae80\uae81\uae82\uae83\uae84\uae85\uae86\uae87\uae88\uae89\uae8a\uae8b\uae8c\uae8d\uae8e\uae8f\uae90\uae91\uae92\uae93\uae94\uae95\uae96\uae97\uae98\uae99\uae9a\uae9b\uae9c\uae9d\uae9e\uae9f\uaea0\uaea1\uaea2\uaea3\uaea4\uaea5\uaea6\uaea7\uaea8\uaea9\uaeaa\uaeab\uaeac\uaead\uaeae\uaeaf\uaeb0\uaeb1\uaeb2\uaeb3\uaeb4\uaeb5\uaeb6\uaeb7\uaeb8\uaeb9\uaeba\uaebb\uaebc\uaebd\uaebe\uaebf\uaec0\uaec1\uaec2\uaec3\uaec4\uaec5\uaec6\uaec7\uaec8\uaec9\uaeca\uaecb\uaecc\uaecd\uaece\uaecf\uaed0\uaed1\uaed2\uaed3\uaed4\uaed5\uaed6\uaed7\uaed8\uaed9\uaeda\uaedb\uaedc\uaedd\uaede\uaedf\uaee0\uaee1\uaee2\uaee3\uaee4\uaee5\uaee6\uaee7\uaee8\uaee9\uaeea\uaeeb\uaeec\uaeed\uaeee\uaeef\uaef0\uaef1\uaef2\uaef3\uaef4\uaef5\uaef6\uaef7\uaef8\uaef9\uaefa\uaefb\uaefc\uaefd\uaefe\uaeff\uaf00\uaf01\uaf02\uaf03\uaf04\uaf05\uaf06\uaf07\uaf08\uaf09\uaf0a\uaf0b\uaf0c\uaf0d\uaf0e\uaf0f\uaf10\uaf11\uaf12\uaf13\uaf14\uaf15\uaf16\uaf17\uaf18\uaf19\uaf1a\uaf1b\uaf1c\uaf1d\uaf1e\uaf1f\uaf20\uaf21\uaf22\uaf23\uaf24\uaf25\uaf26\uaf27\uaf28\uaf29\uaf2a\uaf2b\uaf2c\uaf2d\uaf2e\uaf2f\uaf30\uaf31\uaf32\uaf33\uaf34\uaf35\uaf36\uaf37\uaf38\uaf39\uaf3a\uaf3b\uaf3c\uaf3d\uaf3e\uaf3f\uaf40\uaf41\uaf42\uaf43\uaf44\uaf45\uaf46\uaf47\uaf48\uaf49\uaf4a\uaf4b\uaf4c\uaf4d\uaf4e\uaf4f\uaf50\uaf51\uaf52\uaf53\uaf54\uaf55\uaf56\uaf57\uaf58\uaf59\uaf5a\uaf5b\uaf5c\uaf5d\uaf5e\uaf5f\uaf60\uaf61\uaf62\uaf63\uaf64\uaf65\uaf66\uaf67\uaf68\uaf69\uaf6a\uaf6b\uaf6c\uaf6d\uaf6e\uaf6f\uaf70\uaf71\uaf72\uaf73\uaf74\uaf75\uaf76\uaf77\uaf78\uaf79\uaf7a\uaf7b\uaf7c\uaf7d\uaf7e\uaf7f\uaf80\uaf81\uaf82\uaf83\uaf84\uaf85\uaf86\uaf87\uaf88\uaf89\uaf8a\uaf8b\uaf8c\uaf8d\uaf8e\uaf8f\uaf90\uaf91\uaf92\uaf93\uaf94\uaf95\uaf96\uaf97\uaf98\uaf99\uaf9a\uaf9b\uaf9c\uaf9d\uaf9e\uaf9f\uafa0\uafa1\uafa2\uafa3\uafa4\uafa5\uafa6\uafa7\uafa8\uafa9\uafaa\uafab\uafac\uafad\uafae\uafaf\uafb0\uafb1\uafb2\uafb3\uafb4\uafb5\uafb6\uafb7\uafb8\uafb9\uafba\uafbb\uafbc\uafbd\uafbe\uafbf\uafc0\uafc1\uafc2\uafc3\uafc4\uafc5\uafc6\uafc7\uafc8\uafc9\uafca\uafcb\uafcc\uafcd\uafce\uafcf\uafd0\uafd1\uafd2\uafd3\uafd4\uafd5\uafd6\uafd7\uafd8\uafd9\uafda\uafdb\uafdc\uafdd\uafde\uafdf\uafe0\uafe1\uafe2\uafe3\uafe4\uafe5\uafe6\uafe7\uafe8\uafe9\uafea\uafeb\uafec\uafed\uafee\uafef\uaff0\uaff1\uaff2\uaff3\uaff4\uaff5\uaff6\uaff7\uaff8\uaff9\uaffa\uaffb\uaffc\uaffd\uaffe\uafff\ub000\ub001\ub002\ub003\ub004\ub005\ub006\ub007\ub008\ub009\ub00a\ub00b\ub00c\ub00d\ub00e\ub00f\ub010\ub011\ub012\ub013\ub014\ub015\ub016\ub017\ub018\ub019\ub01a\ub01b\ub01c\ub01d\ub01e\ub01f\ub020\ub021\ub022\ub023\ub024\ub025\ub026\ub027\ub028\ub029\ub02a\ub02b\ub02c\ub02d\ub02e\ub02f\ub030\ub031\ub032\ub033\ub034\ub035\ub036\ub037\ub038\ub039\ub03a\ub03b\ub03c\ub03d\ub03e\ub03f\ub040\ub041\ub042\ub043\ub044\ub045\ub046\ub047\ub048\ub049\ub04a\ub04b\ub04c\ub04d\ub04e\ub04f\ub050\ub051\ub052\ub053\ub054\ub055\ub056\ub057\ub058\ub059\ub05a\ub05b\ub05c\ub05d\ub05e\ub05f\ub060\ub061\ub062\ub063\ub064\ub065\ub066\ub067\ub068\ub069\ub06a\ub06b\ub06c\ub06d\ub06e\ub06f\ub070\ub071\ub072\ub073\ub074\ub075\ub076\ub077\ub078\ub079\ub07a\ub07b\ub07c\ub07d\ub07e\ub07f\ub080\ub081\ub082\ub083\ub084\ub085\ub086\ub087\ub088\ub089\ub08a\ub08b\ub08c\ub08d\ub08e\ub08f\ub090\ub091\ub092\ub093\ub094\ub095\ub096\ub097\ub098\ub099\ub09a\ub09b\ub09c\ub09d\ub09e\ub09f\ub0a0\ub0a1\ub0a2\ub0a3\ub0a4\ub0a5\ub0a6\ub0a7\ub0a8\ub0a9\ub0aa\ub0ab\ub0ac\ub0ad\ub0ae\ub0af\ub0b0\ub0b1\ub0b2\ub0b3\ub0b4\ub0b5\ub0b6\ub0b7\ub0b8\ub0b9\ub0ba\ub0bb\ub0bc\ub0bd\ub0be\ub0bf\ub0c0\ub0c1\ub0c2\ub0c3\ub0c4\ub0c5\ub0c6\ub0c7\ub0c8\ub0c9\ub0ca\ub0cb\ub0cc\ub0cd\ub0ce\ub0cf\ub0d0\ub0d1\ub0d2\ub0d3\ub0d4\ub0d5\ub0d6\ub0d7\ub0d8\ub0d9\ub0da\ub0db\ub0dc\ub0dd\ub0de\ub0df\ub0e0\ub0e1\ub0e2\ub0e3\ub0e4\ub0e5\ub0e6\ub0e7\ub0e8\ub0e9\ub0ea\ub0eb\ub0ec\ub0ed\ub0ee\ub0ef\ub0f0\ub0f1\ub0f2\ub0f3\ub0f4\ub0f5\ub0f6\ub0f7\ub0f8\ub0f9\ub0fa\ub0fb\ub0fc\ub0fd\ub0fe\ub0ff\ub100\ub101\ub102\ub103\ub104\ub105\ub106\ub107\ub108\ub109\ub10a\ub10b\ub10c\ub10d\ub10e\ub10f\ub110\ub111\ub112\ub113\ub114\ub115\ub116\ub117\ub118\ub119\ub11a\ub11b\ub11c\ub11d\ub11e\ub11f\ub120\ub121\ub122\ub123\ub124\ub125\ub126\ub127\ub128\ub129\ub12a\ub12b\ub12c\ub12d\ub12e\ub12f\ub130\ub131\ub132\ub133\ub134\ub135\ub136\ub137\ub138\ub139\ub13a\ub13b\ub13c\ub13d\ub13e\ub13f\ub140\ub141\ub142\ub143\ub144\ub145\ub146\ub147\ub148\ub149\ub14a\ub14b\ub14c\ub14d\ub14e\ub14f\ub150\ub151\ub152\ub153\ub154\ub155\ub156\ub157\ub158\ub159\ub15a\ub15b\ub15c\ub15d\ub15e\ub15f\ub160\ub161\ub162\ub163\ub164\ub165\ub166\ub167\ub168\ub169\ub16a\ub16b\ub16c\ub16d\ub16e\ub16f\ub170\ub171\ub172\ub173\ub174\ub175\ub176\ub177\ub178\ub179\ub17a\ub17b\ub17c\ub17d\ub17e\ub17f\ub180\ub181\ub182\ub183\ub184\ub185\ub186\ub187\ub188\ub189\ub18a\ub18b\ub18c\ub18d\ub18e\ub18f\ub190\ub191\ub192\ub193\ub194\ub195\ub196\ub197\ub198\ub199\ub19a\ub19b\ub19c\ub19d\ub19e\ub19f\ub1a0\ub1a1\ub1a2\ub1a3\ub1a4\ub1a5\ub1a6\ub1a7\ub1a8\ub1a9\ub1aa\ub1ab\ub1ac\ub1ad\ub1ae\ub1af\ub1b0\ub1b1\ub1b2\ub1b3\ub1b4\ub1b5\ub1b6\ub1b7\ub1b8\ub1b9\ub1ba\ub1bb\ub1bc\ub1bd\ub1be\ub1bf\ub1c0\ub1c1\ub1c2\ub1c3\ub1c4\ub1c5\ub1c6\ub1c7\ub1c8\ub1c9\ub1ca\ub1cb\ub1cc\ub1cd\ub1ce\ub1cf\ub1d0\ub1d1\ub1d2\ub1d3\ub1d4\ub1d5\ub1d6\ub1d7\ub1d8\ub1d9\ub1da\ub1db\ub1dc\ub1dd\ub1de\ub1df\ub1e0\ub1e1\ub1e2\ub1e3\ub1e4\ub1e5\ub1e6\ub1e7\ub1e8\ub1e9\ub1ea\ub1eb\ub1ec\ub1ed\ub1ee\ub1ef\ub1f0\ub1f1\ub1f2\ub1f3\ub1f4\ub1f5\ub1f6\ub1f7\ub1f8\ub1f9\ub1fa\ub1fb\ub1fc\ub1fd\ub1fe\ub1ff\ub200\ub201\ub202\ub203\ub204\ub205\ub206\ub207\ub208\ub209\ub20a\ub20b\ub20c\ub20d\ub20e\ub20f\ub210\ub211\ub212\ub213\ub214\ub215\ub216\ub217\ub218\ub219\ub21a\ub21b\ub21c\ub21d\ub21e\ub21f\ub220\ub221\ub222\ub223\ub224\ub225\ub226\ub227\ub228\ub229\ub22a\ub22b\ub22c\ub22d\ub22e\ub22f\ub230\ub231\ub232\ub233\ub234\ub235\ub236\ub237\ub238\ub239\ub23a\ub23b\ub23c\ub23d\ub23e\ub23f\ub240\ub241\ub242\ub243\ub244\ub245\ub246\ub247\ub248\ub249\ub24a\ub24b\ub24c\ub24d\ub24e\ub24f\ub250\ub251\ub252\ub253\ub254\ub255\ub256\ub257\ub258\ub259\ub25a\ub25b\ub25c\ub25d\ub25e\ub25f\ub260\ub261\ub262\ub263\ub264\ub265\ub266\ub267\ub268\ub269\ub26a\ub26b\ub26c\ub26d\ub26e\ub26f\ub270\ub271\ub272\ub273\ub274\ub275\ub276\ub277\ub278\ub279\ub27a\ub27b\ub27c\ub27d\ub27e\ub27f\ub280\ub281\ub282\ub283\ub284\ub285\ub286\ub287\ub288\ub289\ub28a\ub28b\ub28c\ub28d\ub28e\ub28f\ub290\ub291\ub292\ub293\ub294\ub295\ub296\ub297\ub298\ub299\ub29a\ub29b\ub29c\ub29d\ub29e\ub29f\ub2a0\ub2a1\ub2a2\ub2a3\ub2a4\ub2a5\ub2a6\ub2a7\ub2a8\ub2a9\ub2aa\ub2ab\ub2ac\ub2ad\ub2ae\ub2af\ub2b0\ub2b1\ub2b2\ub2b3\ub2b4\ub2b5\ub2b6\ub2b7\ub2b8\ub2b9\ub2ba\ub2bb\ub2bc\ub2bd\ub2be\ub2bf\ub2c0\ub2c1\ub2c2\ub2c3\ub2c4\ub2c5\ub2c6\ub2c7\ub2c8\ub2c9\ub2ca\ub2cb\ub2cc\ub2cd\ub2ce\ub2cf\ub2d0\ub2d1\ub2d2\ub2d3\ub2d4\ub2d5\ub2d6\ub2d7\ub2d8\ub2d9\ub2da\ub2db\ub2dc\ub2dd\ub2de\ub2df\ub2e0\ub2e1\ub2e2\ub2e3\ub2e4\ub2e5\ub2e6\ub2e7\ub2e8\ub2e9\ub2ea\ub2eb\ub2ec\ub2ed\ub2ee\ub2ef\ub2f0\ub2f1\ub2f2\ub2f3\ub2f4\ub2f5\ub2f6\ub2f7\ub2f8\ub2f9\ub2fa\ub2fb\ub2fc\ub2fd\ub2fe\ub2ff\ub300\ub301\ub302\ub303\ub304\ub305\ub306\ub307\ub308\ub309\ub30a\ub30b\ub30c\ub30d\ub30e\ub30f\ub310\ub311\ub312\ub313\ub314\ub315\ub316\ub317\ub318\ub319\ub31a\ub31b\ub31c\ub31d\ub31e\ub31f\ub320\ub321\ub322\ub323\ub324\ub325\ub326\ub327\ub328\ub329\ub32a\ub32b\ub32c\ub32d\ub32e\ub32f\ub330\ub331\ub332\ub333\ub334\ub335\ub336\ub337\ub338\ub339\ub33a\ub33b\ub33c\ub33d\ub33e\ub33f\ub340\ub341\ub342\ub343\ub344\ub345\ub346\ub347\ub348\ub349\ub34a\ub34b\ub34c\ub34d\ub34e\ub34f\ub350\ub351\ub352\ub353\ub354\ub355\ub356\ub357\ub358\ub359\ub35a\ub35b\ub35c\ub35d\ub35e\ub35f\ub360\ub361\ub362\ub363\ub364\ub365\ub366\ub367\ub368\ub369\ub36a\ub36b\ub36c\ub36d\ub36e\ub36f\ub370\ub371\ub372\ub373\ub374\ub375\ub376\ub377\ub378\ub379\ub37a\ub37b\ub37c\ub37d\ub37e\ub37f\ub380\ub381\ub382\ub383\ub384\ub385\ub386\ub387\ub388\ub389\ub38a\ub38b\ub38c\ub38d\ub38e\ub38f\ub390\ub391\ub392\ub393\ub394\ub395\ub396\ub397\ub398\ub399\ub39a\ub39b\ub39c\ub39d\ub39e\ub39f\ub3a0\ub3a1\ub3a2\ub3a3\ub3a4\ub3a5\ub3a6\ub3a7\ub3a8\ub3a9\ub3aa\ub3ab\ub3ac\ub3ad\ub3ae\ub3af\ub3b0\ub3b1\ub3b2\ub3b3\ub3b4\ub3b5\ub3b6\ub3b7\ub3b8\ub3b9\ub3ba\ub3bb\ub3bc\ub3bd\ub3be\ub3bf\ub3c0\ub3c1\ub3c2\ub3c3\ub3c4\ub3c5\ub3c6\ub3c7\ub3c8\ub3c9\ub3ca\ub3cb\ub3cc\ub3cd\ub3ce\ub3cf\ub3d0\ub3d1\ub3d2\ub3d3\ub3d4\ub3d5\ub3d6\ub3d7\ub3d8\ub3d9\ub3da\ub3db\ub3dc\ub3dd\ub3de\ub3df\ub3e0\ub3e1\ub3e2\ub3e3\ub3e4\ub3e5\ub3e6\ub3e7\ub3e8\ub3e9\ub3ea\ub3eb\ub3ec\ub3ed\ub3ee\ub3ef\ub3f0\ub3f1\ub3f2\ub3f3\ub3f4\ub3f5\ub3f6\ub3f7\ub3f8\ub3f9\ub3fa\ub3fb\ub3fc\ub3fd\ub3fe\ub3ff\ub400\ub401\ub402\ub403\ub404\ub405\ub406\ub407\ub408\ub409\ub40a\ub40b\ub40c\ub40d\ub40e\ub40f\ub410\ub411\ub412\ub413\ub414\ub415\ub416\ub417\ub418\ub419\ub41a\ub41b\ub41c\ub41d\ub41e\ub41f\ub420\ub421\ub422\ub423\ub424\ub425\ub426\ub427\ub428\ub429\ub42a\ub42b\ub42c\ub42d\ub42e\ub42f\ub430\ub431\ub432\ub433\ub434\ub435\ub436\ub437\ub438\ub439\ub43a\ub43b\ub43c\ub43d\ub43e\ub43f\ub440\ub441\ub442\ub443\ub444\ub445\ub446\ub447\ub448\ub449\ub44a\ub44b\ub44c\ub44d\ub44e\ub44f\ub450\ub451\ub452\ub453\ub454\ub455\ub456\ub457\ub458\ub459\ub45a\ub45b\ub45c\ub45d\ub45e\ub45f\ub460\ub461\ub462\ub463\ub464\ub465\ub466\ub467\ub468\ub469\ub46a\ub46b\ub46c\ub46d\ub46e\ub46f\ub470\ub471\ub472\ub473\ub474\ub475\ub476\ub477\ub478\ub479\ub47a\ub47b\ub47c\ub47d\ub47e\ub47f\ub480\ub481\ub482\ub483\ub484\ub485\ub486\ub487\ub488\ub489\ub48a\ub48b\ub48c\ub48d\ub48e\ub48f\ub490\ub491\ub492\ub493\ub494\ub495\ub496\ub497\ub498\ub499\ub49a\ub49b\ub49c\ub49d\ub49e\ub49f\ub4a0\ub4a1\ub4a2\ub4a3\ub4a4\ub4a5\ub4a6\ub4a7\ub4a8\ub4a9\ub4aa\ub4ab\ub4ac\ub4ad\ub4ae\ub4af\ub4b0\ub4b1\ub4b2\ub4b3\ub4b4\ub4b5\ub4b6\ub4b7\ub4b8\ub4b9\ub4ba\ub4bb\ub4bc\ub4bd\ub4be\ub4bf\ub4c0\ub4c1\ub4c2\ub4c3\ub4c4\ub4c5\ub4c6\ub4c7\ub4c8\ub4c9\ub4ca\ub4cb\ub4cc\ub4cd\ub4ce\ub4cf\ub4d0\ub4d1\ub4d2\ub4d3\ub4d4\ub4d5\ub4d6\ub4d7\ub4d8\ub4d9\ub4da\ub4db\ub4dc\ub4dd\ub4de\ub4df\ub4e0\ub4e1\ub4e2\ub4e3\ub4e4\ub4e5\ub4e6\ub4e7\ub4e8\ub4e9\ub4ea\ub4eb\ub4ec\ub4ed\ub4ee\ub4ef\ub4f0\ub4f1\ub4f2\ub4f3\ub4f4\ub4f5\ub4f6\ub4f7\ub4f8\ub4f9\ub4fa\ub4fb\ub4fc\ub4fd\ub4fe\ub4ff\ub500\ub501\ub502\ub503\ub504\ub505\ub506\ub507\ub508\ub509\ub50a\ub50b\ub50c\ub50d\ub50e\ub50f\ub510\ub511\ub512\ub513\ub514\ub515\ub516\ub517\ub518\ub519\ub51a\ub51b\ub51c\ub51d\ub51e\ub51f\ub520\ub521\ub522\ub523\ub524\ub525\ub526\ub527\ub528\ub529\ub52a\ub52b\ub52c\ub52d\ub52e\ub52f\ub530\ub531\ub532\ub533\ub534\ub535\ub536\ub537\ub538\ub539\ub53a\ub53b\ub53c\ub53d\ub53e\ub53f\ub540\ub541\ub542\ub543\ub544\ub545\ub546\ub547\ub548\ub549\ub54a\ub54b\ub54c\ub54d\ub54e\ub54f\ub550\ub551\ub552\ub553\ub554\ub555\ub556\ub557\ub558\ub559\ub55a\ub55b\ub55c\ub55d\ub55e\ub55f\ub560\ub561\ub562\ub563\ub564\ub565\ub566\ub567\ub568\ub569\ub56a\ub56b\ub56c\ub56d\ub56e\ub56f\ub570\ub571\ub572\ub573\ub574\ub575\ub576\ub577\ub578\ub579\ub57a\ub57b\ub57c\ub57d\ub57e\ub57f\ub580\ub581\ub582\ub583\ub584\ub585\ub586\ub587\ub588\ub589\ub58a\ub58b\ub58c\ub58d\ub58e\ub58f\ub590\ub591\ub592\ub593\ub594\ub595\ub596\ub597\ub598\ub599\ub59a\ub59b\ub59c\ub59d\ub59e\ub59f\ub5a0\ub5a1\ub5a2\ub5a3\ub5a4\ub5a5\ub5a6\ub5a7\ub5a8\ub5a9\ub5aa\ub5ab\ub5ac\ub5ad\ub5ae\ub5af\ub5b0\ub5b1\ub5b2\ub5b3\ub5b4\ub5b5\ub5b6\ub5b7\ub5b8\ub5b9\ub5ba\ub5bb\ub5bc\ub5bd\ub5be\ub5bf\ub5c0\ub5c1\ub5c2\ub5c3\ub5c4\ub5c5\ub5c6\ub5c7\ub5c8\ub5c9\ub5ca\ub5cb\ub5cc\ub5cd\ub5ce\ub5cf\ub5d0\ub5d1\ub5d2\ub5d3\ub5d4\ub5d5\ub5d6\ub5d7\ub5d8\ub5d9\ub5da\ub5db\ub5dc\ub5dd\ub5de\ub5df\ub5e0\ub5e1\ub5e2\ub5e3\ub5e4\ub5e5\ub5e6\ub5e7\ub5e8\ub5e9\ub5ea\ub5eb\ub5ec\ub5ed\ub5ee\ub5ef\ub5f0\ub5f1\ub5f2\ub5f3\ub5f4\ub5f5\ub5f6\ub5f7\ub5f8\ub5f9\ub5fa\ub5fb\ub5fc\ub5fd\ub5fe\ub5ff\ub600\ub601\ub602\ub603\ub604\ub605\ub606\ub607\ub608\ub609\ub60a\ub60b\ub60c\ub60d\ub60e\ub60f\ub610\ub611\ub612\ub613\ub614\ub615\ub616\ub617\ub618\ub619\ub61a\ub61b\ub61c\ub61d\ub61e\ub61f\ub620\ub621\ub622\ub623\ub624\ub625\ub626\ub627\ub628\ub629\ub62a\ub62b\ub62c\ub62d\ub62e\ub62f\ub630\ub631\ub632\ub633\ub634\ub635\ub636\ub637\ub638\ub639\ub63a\ub63b\ub63c\ub63d\ub63e\ub63f\ub640\ub641\ub642\ub643\ub644\ub645\ub646\ub647\ub648\ub649\ub64a\ub64b\ub64c\ub64d\ub64e\ub64f\ub650\ub651\ub652\ub653\ub654\ub655\ub656\ub657\ub658\ub659\ub65a\ub65b\ub65c\ub65d\ub65e\ub65f\ub660\ub661\ub662\ub663\ub664\ub665\ub666\ub667\ub668\ub669\ub66a\ub66b\ub66c\ub66d\ub66e\ub66f\ub670\ub671\ub672\ub673\ub674\ub675\ub676\ub677\ub678\ub679\ub67a\ub67b\ub67c\ub67d\ub67e\ub67f\ub680\ub681\ub682\ub683\ub684\ub685\ub686\ub687\ub688\ub689\ub68a\ub68b\ub68c\ub68d\ub68e\ub68f\ub690\ub691\ub692\ub693\ub694\ub695\ub696\ub697\ub698\ub699\ub69a\ub69b\ub69c\ub69d\ub69e\ub69f\ub6a0\ub6a1\ub6a2\ub6a3\ub6a4\ub6a5\ub6a6\ub6a7\ub6a8\ub6a9\ub6aa\ub6ab\ub6ac\ub6ad\ub6ae\ub6af\ub6b0\ub6b1\ub6b2\ub6b3\ub6b4\ub6b5\ub6b6\ub6b7\ub6b8\ub6b9\ub6ba\ub6bb\ub6bc\ub6bd\ub6be\ub6bf\ub6c0\ub6c1\ub6c2\ub6c3\ub6c4\ub6c5\ub6c6\ub6c7\ub6c8\ub6c9\ub6ca\ub6cb\ub6cc\ub6cd\ub6ce\ub6cf\ub6d0\ub6d1\ub6d2\ub6d3\ub6d4\ub6d5\ub6d6\ub6d7\ub6d8\ub6d9\ub6da\ub6db\ub6dc\ub6dd\ub6de\ub6df\ub6e0\ub6e1\ub6e2\ub6e3\ub6e4\ub6e5\ub6e6\ub6e7\ub6e8\ub6e9\ub6ea\ub6eb\ub6ec\ub6ed\ub6ee\ub6ef\ub6f0\ub6f1\ub6f2\ub6f3\ub6f4\ub6f5\ub6f6\ub6f7\ub6f8\ub6f9\ub6fa\ub6fb\ub6fc\ub6fd\ub6fe\ub6ff\ub700\ub701\ub702\ub703\ub704\ub705\ub706\ub707\ub708\ub709\ub70a\ub70b\ub70c\ub70d\ub70e\ub70f\ub710\ub711\ub712\ub713\ub714\ub715\ub716\ub717\ub718\ub719\ub71a\ub71b\ub71c\ub71d\ub71e\ub71f\ub720\ub721\ub722\ub723\ub724\ub725\ub726\ub727\ub728\ub729\ub72a\ub72b\ub72c\ub72d\ub72e\ub72f\ub730\ub731\ub732\ub733\ub734\ub735\ub736\ub737\ub738\ub739\ub73a\ub73b\ub73c\ub73d\ub73e\ub73f\ub740\ub741\ub742\ub743\ub744\ub745\ub746\ub747\ub748\ub749\ub74a\ub74b\ub74c\ub74d\ub74e\ub74f\ub750\ub751\ub752\ub753\ub754\ub755\ub756\ub757\ub758\ub759\ub75a\ub75b\ub75c\ub75d\ub75e\ub75f\ub760\ub761\ub762\ub763\ub764\ub765\ub766\ub767\ub768\ub769\ub76a\ub76b\ub76c\ub76d\ub76e\ub76f\ub770\ub771\ub772\ub773\ub774\ub775\ub776\ub777\ub778\ub779\ub77a\ub77b\ub77c\ub77d\ub77e\ub77f\ub780\ub781\ub782\ub783\ub784\ub785\ub786\ub787\ub788\ub789\ub78a\ub78b\ub78c\ub78d\ub78e\ub78f\ub790\ub791\ub792\ub793\ub794\ub795\ub796\ub797\ub798\ub799\ub79a\ub79b\ub79c\ub79d\ub79e\ub79f\ub7a0\ub7a1\ub7a2\ub7a3\ub7a4\ub7a5\ub7a6\ub7a7\ub7a8\ub7a9\ub7aa\ub7ab\ub7ac\ub7ad\ub7ae\ub7af\ub7b0\ub7b1\ub7b2\ub7b3\ub7b4\ub7b5\ub7b6\ub7b7\ub7b8\ub7b9\ub7ba\ub7bb\ub7bc\ub7bd\ub7be\ub7bf\ub7c0\ub7c1\ub7c2\ub7c3\ub7c4\ub7c5\ub7c6\ub7c7\ub7c8\ub7c9\ub7ca\ub7cb\ub7cc\ub7cd\ub7ce\ub7cf\ub7d0\ub7d1\ub7d2\ub7d3\ub7d4\ub7d5\ub7d6\ub7d7\ub7d8\ub7d9\ub7da\ub7db\ub7dc\ub7dd\ub7de\ub7df\ub7e0\ub7e1\ub7e2\ub7e3\ub7e4\ub7e5\ub7e6\ub7e7\ub7e8\ub7e9\ub7ea\ub7eb\ub7ec\ub7ed\ub7ee\ub7ef\ub7f0\ub7f1\ub7f2\ub7f3\ub7f4\ub7f5\ub7f6\ub7f7\ub7f8\ub7f9\ub7fa\ub7fb\ub7fc\ub7fd\ub7fe\ub7ff\ub800\ub801\ub802\ub803\ub804\ub805\ub806\ub807\ub808\ub809\ub80a\ub80b\ub80c\ub80d\ub80e\ub80f\ub810\ub811\ub812\ub813\ub814\ub815\ub816\ub817\ub818\ub819\ub81a\ub81b\ub81c\ub81d\ub81e\ub81f\ub820\ub821\ub822\ub823\ub824\ub825\ub826\ub827\ub828\ub829\ub82a\ub82b\ub82c\ub82d\ub82e\ub82f\ub830\ub831\ub832\ub833\ub834\ub835\ub836\ub837\ub838\ub839\ub83a\ub83b\ub83c\ub83d\ub83e\ub83f\ub840\ub841\ub842\ub843\ub844\ub845\ub846\ub847\ub848\ub849\ub84a\ub84b\ub84c\ub84d\ub84e\ub84f\ub850\ub851\ub852\ub853\ub854\ub855\ub856\ub857\ub858\ub859\ub85a\ub85b\ub85c\ub85d\ub85e\ub85f\ub860\ub861\ub862\ub863\ub864\ub865\ub866\ub867\ub868\ub869\ub86a\ub86b\ub86c\ub86d\ub86e\ub86f\ub870\ub871\ub872\ub873\ub874\ub875\ub876\ub877\ub878\ub879\ub87a\ub87b\ub87c\ub87d\ub87e\ub87f\ub880\ub881\ub882\ub883\ub884\ub885\ub886\ub887\ub888\ub889\ub88a\ub88b\ub88c\ub88d\ub88e\ub88f\ub890\ub891\ub892\ub893\ub894\ub895\ub896\ub897\ub898\ub899\ub89a\ub89b\ub89c\ub89d\ub89e\ub89f\ub8a0\ub8a1\ub8a2\ub8a3\ub8a4\ub8a5\ub8a6\ub8a7\ub8a8\ub8a9\ub8aa\ub8ab\ub8ac\ub8ad\ub8ae\ub8af\ub8b0\ub8b1\ub8b2\ub8b3\ub8b4\ub8b5\ub8b6\ub8b7\ub8b8\ub8b9\ub8ba\ub8bb\ub8bc\ub8bd\ub8be\ub8bf\ub8c0\ub8c1\ub8c2\ub8c3\ub8c4\ub8c5\ub8c6\ub8c7\ub8c8\ub8c9\ub8ca\ub8cb\ub8cc\ub8cd\ub8ce\ub8cf\ub8d0\ub8d1\ub8d2\ub8d3\ub8d4\ub8d5\ub8d6\ub8d7\ub8d8\ub8d9\ub8da\ub8db\ub8dc\ub8dd\ub8de\ub8df\ub8e0\ub8e1\ub8e2\ub8e3\ub8e4\ub8e5\ub8e6\ub8e7\ub8e8\ub8e9\ub8ea\ub8eb\ub8ec\ub8ed\ub8ee\ub8ef\ub8f0\ub8f1\ub8f2\ub8f3\ub8f4\ub8f5\ub8f6\ub8f7\ub8f8\ub8f9\ub8fa\ub8fb\ub8fc\ub8fd\ub8fe\ub8ff\ub900\ub901\ub902\ub903\ub904\ub905\ub906\ub907\ub908\ub909\ub90a\ub90b\ub90c\ub90d\ub90e\ub90f\ub910\ub911\ub912\ub913\ub914\ub915\ub916\ub917\ub918\ub919\ub91a\ub91b\ub91c\ub91d\ub91e\ub91f\ub920\ub921\ub922\ub923\ub924\ub925\ub926\ub927\ub928\ub929\ub92a\ub92b\ub92c\ub92d\ub92e\ub92f\ub930\ub931\ub932\ub933\ub934\ub935\ub936\ub937\ub938\ub939\ub93a\ub93b\ub93c\ub93d\ub93e\ub93f\ub940\ub941\ub942\ub943\ub944\ub945\ub946\ub947\ub948\ub949\ub94a\ub94b\ub94c\ub94d\ub94e\ub94f\ub950\ub951\ub952\ub953\ub954\ub955\ub956\ub957\ub958\ub959\ub95a\ub95b\ub95c\ub95d\ub95e\ub95f\ub960\ub961\ub962\ub963\ub964\ub965\ub966\ub967\ub968\ub969\ub96a\ub96b\ub96c\ub96d\ub96e\ub96f\ub970\ub971\ub972\ub973\ub974\ub975\ub976\ub977\ub978\ub979\ub97a\ub97b\ub97c\ub97d\ub97e\ub97f\ub980\ub981\ub982\ub983\ub984\ub985\ub986\ub987\ub988\ub989\ub98a\ub98b\ub98c\ub98d\ub98e\ub98f\ub990\ub991\ub992\ub993\ub994\ub995\ub996\ub997\ub998\ub999\ub99a\ub99b\ub99c\ub99d\ub99e\ub99f\ub9a0\ub9a1\ub9a2\ub9a3\ub9a4\ub9a5\ub9a6\ub9a7\ub9a8\ub9a9\ub9aa\ub9ab\ub9ac\ub9ad\ub9ae\ub9af\ub9b0\ub9b1\ub9b2\ub9b3\ub9b4\ub9b5\ub9b6\ub9b7\ub9b8\ub9b9\ub9ba\ub9bb\ub9bc\ub9bd\ub9be\ub9bf\ub9c0\ub9c1\ub9c2\ub9c3\ub9c4\ub9c5\ub9c6\ub9c7\ub9c8\ub9c9\ub9ca\ub9cb\ub9cc\ub9cd\ub9ce\ub9cf\ub9d0\ub9d1\ub9d2\ub9d3\ub9d4\ub9d5\ub9d6\ub9d7\ub9d8\ub9d9\ub9da\ub9db\ub9dc\ub9dd\ub9de\ub9df\ub9e0\ub9e1\ub9e2\ub9e3\ub9e4\ub9e5\ub9e6\ub9e7\ub9e8\ub9e9\ub9ea\ub9eb\ub9ec\ub9ed\ub9ee\ub9ef\ub9f0\ub9f1\ub9f2\ub9f3\ub9f4\ub9f5\ub9f6\ub9f7\ub9f8\ub9f9\ub9fa\ub9fb\ub9fc\ub9fd\ub9fe\ub9ff\uba00\uba01\uba02\uba03\uba04\uba05\uba06\uba07\uba08\uba09\uba0a\uba0b\uba0c\uba0d\uba0e\uba0f\uba10\uba11\uba12\uba13\uba14\uba15\uba16\uba17\uba18\uba19\uba1a\uba1b\uba1c\uba1d\uba1e\uba1f\uba20\uba21\uba22\uba23\uba24\uba25\uba26\uba27\uba28\uba29\uba2a\uba2b\uba2c\uba2d\uba2e\uba2f\uba30\uba31\uba32\uba33\uba34\uba35\uba36\uba37\uba38\uba39\uba3a\uba3b\uba3c\uba3d\uba3e\uba3f\uba40\uba41\uba42\uba43\uba44\uba45\uba46\uba47\uba48\uba49\uba4a\uba4b\uba4c\uba4d\uba4e\uba4f\uba50\uba51\uba52\uba53\uba54\uba55\uba56\uba57\uba58\uba59\uba5a\uba5b\uba5c\uba5d\uba5e\uba5f\uba60\uba61\uba62\uba63\uba64\uba65\uba66\uba67\uba68\uba69\uba6a\uba6b\uba6c\uba6d\uba6e\uba6f\uba70\uba71\uba72\uba73\uba74\uba75\uba76\uba77\uba78\uba79\uba7a\uba7b\uba7c\uba7d\uba7e\uba7f\uba80\uba81\uba82\uba83\uba84\uba85\uba86\uba87\uba88\uba89\uba8a\uba8b\uba8c\uba8d\uba8e\uba8f\uba90\uba91\uba92\uba93\uba94\uba95\uba96\uba97\uba98\uba99\uba9a\uba9b\uba9c\uba9d\uba9e\uba9f\ubaa0\ubaa1\ubaa2\ubaa3\ubaa4\ubaa5\ubaa6\ubaa7\ubaa8\ubaa9\ubaaa\ubaab\ubaac\ubaad\ubaae\ubaaf\ubab0\ubab1\ubab2\ubab3\ubab4\ubab5\ubab6\ubab7\ubab8\ubab9\ubaba\ubabb\ubabc\ubabd\ubabe\ubabf\ubac0\ubac1\ubac2\ubac3\ubac4\ubac5\ubac6\ubac7\ubac8\ubac9\ubaca\ubacb\ubacc\ubacd\ubace\ubacf\ubad0\ubad1\ubad2\ubad3\ubad4\ubad5\ubad6\ubad7\ubad8\ubad9\ubada\ubadb\ubadc\ubadd\ubade\ubadf\ubae0\ubae1\ubae2\ubae3\ubae4\ubae5\ubae6\ubae7\ubae8\ubae9\ubaea\ubaeb\ubaec\ubaed\ubaee\ubaef\ubaf0\ubaf1\ubaf2\ubaf3\ubaf4\ubaf5\ubaf6\ubaf7\ubaf8\ubaf9\ubafa\ubafb\ubafc\ubafd\ubafe\ubaff\ubb00\ubb01\ubb02\ubb03\ubb04\ubb05\ubb06\ubb07\ubb08\ubb09\ubb0a\ubb0b\ubb0c\ubb0d\ubb0e\ubb0f\ubb10\ubb11\ubb12\ubb13\ubb14\ubb15\ubb16\ubb17\ubb18\ubb19\ubb1a\ubb1b\ubb1c\ubb1d\ubb1e\ubb1f\ubb20\ubb21\ubb22\ubb23\ubb24\ubb25\ubb26\ubb27\ubb28\ubb29\ubb2a\ubb2b\ubb2c\ubb2d\ubb2e\ubb2f\ubb30\ubb31\ubb32\ubb33\ubb34\ubb35\ubb36\ubb37\ubb38\ubb39\ubb3a\ubb3b\ubb3c\ubb3d\ubb3e\ubb3f\ubb40\ubb41\ubb42\ubb43\ubb44\ubb45\ubb46\ubb47\ubb48\ubb49\ubb4a\ubb4b\ubb4c\ubb4d\ubb4e\ubb4f\ubb50\ubb51\ubb52\ubb53\ubb54\ubb55\ubb56\ubb57\ubb58\ubb59\ubb5a\ubb5b\ubb5c\ubb5d\ubb5e\ubb5f\ubb60\ubb61\ubb62\ubb63\ubb64\ubb65\ubb66\ubb67\ubb68\ubb69\ubb6a\ubb6b\ubb6c\ubb6d\ubb6e\ubb6f\ubb70\ubb71\ubb72\ubb73\ubb74\ubb75\ubb76\ubb77\ubb78\ubb79\ubb7a\ubb7b\ubb7c\ubb7d\ubb7e\ubb7f\ubb80\ubb81\ubb82\ubb83\ubb84\ubb85\ubb86\ubb87\ubb88\ubb89\ubb8a\ubb8b\ubb8c\ubb8d\ubb8e\ubb8f\ubb90\ubb91\ubb92\ubb93\ubb94\ubb95\ubb96\ubb97\ubb98\ubb99\ubb9a\ubb9b\ubb9c\ubb9d\ubb9e\ubb9f\ubba0\ubba1\ubba2\ubba3\ubba4\ubba5\ubba6\ubba7\ubba8\ubba9\ubbaa\ubbab\ubbac\ubbad\ubbae\ubbaf\ubbb0\ubbb1\ubbb2\ubbb3\ubbb4\ubbb5\ubbb6\ubbb7\ubbb8\ubbb9\ubbba\ubbbb\ubbbc\ubbbd\ubbbe\ubbbf\ubbc0\ubbc1\ubbc2\ubbc3\ubbc4\ubbc5\ubbc6\ubbc7\ubbc8\ubbc9\ubbca\ubbcb\ubbcc\ubbcd\ubbce\ubbcf\ubbd0\ubbd1\ubbd2\ubbd3\ubbd4\ubbd5\ubbd6\ubbd7\ubbd8\ubbd9\ubbda\ubbdb\ubbdc\ubbdd\ubbde\ubbdf\ubbe0\ubbe1\ubbe2\ubbe3\ubbe4\ubbe5\ubbe6\ubbe7\ubbe8\ubbe9\ubbea\ubbeb\ubbec\ubbed\ubbee\ubbef\ubbf0\ubbf1\ubbf2\ubbf3\ubbf4\ubbf5\ubbf6\ubbf7\ubbf8\ubbf9\ubbfa\ubbfb\ubbfc\ubbfd\ubbfe\ubbff\ubc00\ubc01\ubc02\ubc03\ubc04\ubc05\ubc06\ubc07\ubc08\ubc09\ubc0a\ubc0b\ubc0c\ubc0d\ubc0e\ubc0f\ubc10\ubc11\ubc12\ubc13\ubc14\ubc15\ubc16\ubc17\ubc18\ubc19\ubc1a\ubc1b\ubc1c\ubc1d\ubc1e\ubc1f\ubc20\ubc21\ubc22\ubc23\ubc24\ubc25\ubc26\ubc27\ubc28\ubc29\ubc2a\ubc2b\ubc2c\ubc2d\ubc2e\ubc2f\ubc30\ubc31\ubc32\ubc33\ubc34\ubc35\ubc36\ubc37\ubc38\ubc39\ubc3a\ubc3b\ubc3c\ubc3d\ubc3e\ubc3f\ubc40\ubc41\ubc42\ubc43\ubc44\ubc45\ubc46\ubc47\ubc48\ubc49\ubc4a\ubc4b\ubc4c\ubc4d\ubc4e\ubc4f\ubc50\ubc51\ubc52\ubc53\ubc54\ubc55\ubc56\ubc57\ubc58\ubc59\ubc5a\ubc5b\ubc5c\ubc5d\ubc5e\ubc5f\ubc60\ubc61\ubc62\ubc63\ubc64\ubc65\ubc66\ubc67\ubc68\ubc69\ubc6a\ubc6b\ubc6c\ubc6d\ubc6e\ubc6f\ubc70\ubc71\ubc72\ubc73\ubc74\ubc75\ubc76\ubc77\ubc78\ubc79\ubc7a\ubc7b\ubc7c\ubc7d\ubc7e\ubc7f\ubc80\ubc81\ubc82\ubc83\ubc84\ubc85\ubc86\ubc87\ubc88\ubc89\ubc8a\ubc8b\ubc8c\ubc8d\ubc8e\ubc8f\ubc90\ubc91\ubc92\ubc93\ubc94\ubc95\ubc96\ubc97\ubc98\ubc99\ubc9a\ubc9b\ubc9c\ubc9d\ubc9e\ubc9f\ubca0\ubca1\ubca2\ubca3\ubca4\ubca5\ubca6\ubca7\ubca8\ubca9\ubcaa\ubcab\ubcac\ubcad\ubcae\ubcaf\ubcb0\ubcb1\ubcb2\ubcb3\ubcb4\ubcb5\ubcb6\ubcb7\ubcb8\ubcb9\ubcba\ubcbb\ubcbc\ubcbd\ubcbe\ubcbf\ubcc0\ubcc1\ubcc2\ubcc3\ubcc4\ubcc5\ubcc6\ubcc7\ubcc8\ubcc9\ubcca\ubccb\ubccc\ubccd\ubcce\ubccf\ubcd0\ubcd1\ubcd2\ubcd3\ubcd4\ubcd5\ubcd6\ubcd7\ubcd8\ubcd9\ubcda\ubcdb\ubcdc\ubcdd\ubcde\ubcdf\ubce0\ubce1\ubce2\ubce3\ubce4\ubce5\ubce6\ubce7\ubce8\ubce9\ubcea\ubceb\ubcec\ubced\ubcee\ubcef\ubcf0\ubcf1\ubcf2\ubcf3\ubcf4\ubcf5\ubcf6\ubcf7\ubcf8\ubcf9\ubcfa\ubcfb\ubcfc\ubcfd\ubcfe\ubcff\ubd00\ubd01\ubd02\ubd03\ubd04\ubd05\ubd06\ubd07\ubd08\ubd09\ubd0a\ubd0b\ubd0c\ubd0d\ubd0e\ubd0f\ubd10\ubd11\ubd12\ubd13\ubd14\ubd15\ubd16\ubd17\ubd18\ubd19\ubd1a\ubd1b\ubd1c\ubd1d\ubd1e\ubd1f\ubd20\ubd21\ubd22\ubd23\ubd24\ubd25\ubd26\ubd27\ubd28\ubd29\ubd2a\ubd2b\ubd2c\ubd2d\ubd2e\ubd2f\ubd30\ubd31\ubd32\ubd33\ubd34\ubd35\ubd36\ubd37\ubd38\ubd39\ubd3a\ubd3b\ubd3c\ubd3d\ubd3e\ubd3f\ubd40\ubd41\ubd42\ubd43\ubd44\ubd45\ubd46\ubd47\ubd48\ubd49\ubd4a\ubd4b\ubd4c\ubd4d\ubd4e\ubd4f\ubd50\ubd51\ubd52\ubd53\ubd54\ubd55\ubd56\ubd57\ubd58\ubd59\ubd5a\ubd5b\ubd5c\ubd5d\ubd5e\ubd5f\ubd60\ubd61\ubd62\ubd63\ubd64\ubd65\ubd66\ubd67\ubd68\ubd69\ubd6a\ubd6b\ubd6c\ubd6d\ubd6e\ubd6f\ubd70\ubd71\ubd72\ubd73\ubd74\ubd75\ubd76\ubd77\ubd78\ubd79\ubd7a\ubd7b\ubd7c\ubd7d\ubd7e\ubd7f\ubd80\ubd81\ubd82\ubd83\ubd84\ubd85\ubd86\ubd87\ubd88\ubd89\ubd8a\ubd8b\ubd8c\ubd8d\ubd8e\ubd8f\ubd90\ubd91\ubd92\ubd93\ubd94\ubd95\ubd96\ubd97\ubd98\ubd99\ubd9a\ubd9b\ubd9c\ubd9d\ubd9e\ubd9f\ubda0\ubda1\ubda2\ubda3\ubda4\ubda5\ubda6\ubda7\ubda8\ubda9\ubdaa\ubdab\ubdac\ubdad\ubdae\ubdaf\ubdb0\ubdb1\ubdb2\ubdb3\ubdb4\ubdb5\ubdb6\ubdb7\ubdb8\ubdb9\ubdba\ubdbb\ubdbc\ubdbd\ubdbe\ubdbf\ubdc0\ubdc1\ubdc2\ubdc3\ubdc4\ubdc5\ubdc6\ubdc7\ubdc8\ubdc9\ubdca\ubdcb\ubdcc\ubdcd\ubdce\ubdcf\ubdd0\ubdd1\ubdd2\ubdd3\ubdd4\ubdd5\ubdd6\ubdd7\ubdd8\ubdd9\ubdda\ubddb\ubddc\ubddd\ubdde\ubddf\ubde0\ubde1\ubde2\ubde3\ubde4\ubde5\ubde6\ubde7\ubde8\ubde9\ubdea\ubdeb\ubdec\ubded\ubdee\ubdef\ubdf0\ubdf1\ubdf2\ubdf3\ubdf4\ubdf5\ubdf6\ubdf7\ubdf8\ubdf9\ubdfa\ubdfb\ubdfc\ubdfd\ubdfe\ubdff\ube00\ube01\ube02\ube03\ube04\ube05\ube06\ube07\ube08\ube09\ube0a\ube0b\ube0c\ube0d\ube0e\ube0f\ube10\ube11\ube12\ube13\ube14\ube15\ube16\ube17\ube18\ube19\ube1a\ube1b\ube1c\ube1d\ube1e\ube1f\ube20\ube21\ube22\ube23\ube24\ube25\ube26\ube27\ube28\ube29\ube2a\ube2b\ube2c\ube2d\ube2e\ube2f\ube30\ube31\ube32\ube33\ube34\ube35\ube36\ube37\ube38\ube39\ube3a\ube3b\ube3c\ube3d\ube3e\ube3f\ube40\ube41\ube42\ube43\ube44\ube45\ube46\ube47\ube48\ube49\ube4a\ube4b\ube4c\ube4d\ube4e\ube4f\ube50\ube51\ube52\ube53\ube54\ube55\ube56\ube57\ube58\ube59\ube5a\ube5b\ube5c\ube5d\ube5e\ube5f\ube60\ube61\ube62\ube63\ube64\ube65\ube66\ube67\ube68\ube69\ube6a\ube6b\ube6c\ube6d\ube6e\ube6f\ube70\ube71\ube72\ube73\ube74\ube75\ube76\ube77\ube78\ube79\ube7a\ube7b\ube7c\ube7d\ube7e\ube7f\ube80\ube81\ube82\ube83\ube84\ube85\ube86\ube87\ube88\ube89\ube8a\ube8b\ube8c\ube8d\ube8e\ube8f\ube90\ube91\ube92\ube93\ube94\ube95\ube96\ube97\ube98\ube99\ube9a\ube9b\ube9c\ube9d\ube9e\ube9f\ubea0\ubea1\ubea2\ubea3\ubea4\ubea5\ubea6\ubea7\ubea8\ubea9\ubeaa\ubeab\ubeac\ubead\ubeae\ubeaf\ubeb0\ubeb1\ubeb2\ubeb3\ubeb4\ubeb5\ubeb6\ubeb7\ubeb8\ubeb9\ubeba\ubebb\ubebc\ubebd\ubebe\ubebf\ubec0\ubec1\ubec2\ubec3\ubec4\ubec5\ubec6\ubec7\ubec8\ubec9\ubeca\ubecb\ubecc\ubecd\ubece\ubecf\ubed0\ubed1\ubed2\ubed3\ubed4\ubed5\ubed6\ubed7\ubed8\ubed9\ubeda\ubedb\ubedc\ubedd\ubede\ubedf\ubee0\ubee1\ubee2\ubee3\ubee4\ubee5\ubee6\ubee7\ubee8\ubee9\ubeea\ubeeb\ubeec\ubeed\ubeee\ubeef\ubef0\ubef1\ubef2\ubef3\ubef4\ubef5\ubef6\ubef7\ubef8\ubef9\ubefa\ubefb\ubefc\ubefd\ubefe\ubeff\ubf00\ubf01\ubf02\ubf03\ubf04\ubf05\ubf06\ubf07\ubf08\ubf09\ubf0a\ubf0b\ubf0c\ubf0d\ubf0e\ubf0f\ubf10\ubf11\ubf12\ubf13\ubf14\ubf15\ubf16\ubf17\ubf18\ubf19\ubf1a\ubf1b\ubf1c\ubf1d\ubf1e\ubf1f\ubf20\ubf21\ubf22\ubf23\ubf24\ubf25\ubf26\ubf27\ubf28\ubf29\ubf2a\ubf2b\ubf2c\ubf2d\ubf2e\ubf2f\ubf30\ubf31\ubf32\ubf33\ubf34\ubf35\ubf36\ubf37\ubf38\ubf39\ubf3a\ubf3b\ubf3c\ubf3d\ubf3e\ubf3f\ubf40\ubf41\ubf42\ubf43\ubf44\ubf45\ubf46\ubf47\ubf48\ubf49\ubf4a\ubf4b\ubf4c\ubf4d\ubf4e\ubf4f\ubf50\ubf51\ubf52\ubf53\ubf54\ubf55\ubf56\ubf57\ubf58\ubf59\ubf5a\ubf5b\ubf5c\ubf5d\ubf5e\ubf5f\ubf60\ubf61\ubf62\ubf63\ubf64\ubf65\ubf66\ubf67\ubf68\ubf69\ubf6a\ubf6b\ubf6c\ubf6d\ubf6e\ubf6f\ubf70\ubf71\ubf72\ubf73\ubf74\ubf75\ubf76\ubf77\ubf78\ubf79\ubf7a\ubf7b\ubf7c\ubf7d\ubf7e\ubf7f\ubf80\ubf81\ubf82\ubf83\ubf84\ubf85\ubf86\ubf87\ubf88\ubf89\ubf8a\ubf8b\ubf8c\ubf8d\ubf8e\ubf8f\ubf90\ubf91\ubf92\ubf93\ubf94\ubf95\ubf96\ubf97\ubf98\ubf99\ubf9a\ubf9b\ubf9c\ubf9d\ubf9e\ubf9f\ubfa0\ubfa1\ubfa2\ubfa3\ubfa4\ubfa5\ubfa6\ubfa7\ubfa8\ubfa9\ubfaa\ubfab\ubfac\ubfad\ubfae\ubfaf\ubfb0\ubfb1\ubfb2\ubfb3\ubfb4\ubfb5\ubfb6\ubfb7\ubfb8\ubfb9\ubfba\ubfbb\ubfbc\ubfbd\ubfbe\ubfbf\ubfc0\ubfc1\ubfc2\ubfc3\ubfc4\ubfc5\ubfc6\ubfc7\ubfc8\ubfc9\ubfca\ubfcb\ubfcc\ubfcd\ubfce\ubfcf\ubfd0\ubfd1\ubfd2\ubfd3\ubfd4\ubfd5\ubfd6\ubfd7\ubfd8\ubfd9\ubfda\ubfdb\ubfdc\ubfdd\ubfde\ubfdf\ubfe0\ubfe1\ubfe2\ubfe3\ubfe4\ubfe5\ubfe6\ubfe7\ubfe8\ubfe9\ubfea\ubfeb\ubfec\ubfed\ubfee\ubfef\ubff0\ubff1\ubff2\ubff3\ubff4\ubff5\ubff6\ubff7\ubff8\ubff9\ubffa\ubffb\ubffc\ubffd\ubffe\ubfff\uc000\uc001\uc002\uc003\uc004\uc005\uc006\uc007\uc008\uc009\uc00a\uc00b\uc00c\uc00d\uc00e\uc00f\uc010\uc011\uc012\uc013\uc014\uc015\uc016\uc017\uc018\uc019\uc01a\uc01b\uc01c\uc01d\uc01e\uc01f\uc020\uc021\uc022\uc023\uc024\uc025\uc026\uc027\uc028\uc029\uc02a\uc02b\uc02c\uc02d\uc02e\uc02f\uc030\uc031\uc032\uc033\uc034\uc035\uc036\uc037\uc038\uc039\uc03a\uc03b\uc03c\uc03d\uc03e\uc03f\uc040\uc041\uc042\uc043\uc044\uc045\uc046\uc047\uc048\uc049\uc04a\uc04b\uc04c\uc04d\uc04e\uc04f\uc050\uc051\uc052\uc053\uc054\uc055\uc056\uc057\uc058\uc059\uc05a\uc05b\uc05c\uc05d\uc05e\uc05f\uc060\uc061\uc062\uc063\uc064\uc065\uc066\uc067\uc068\uc069\uc06a\uc06b\uc06c\uc06d\uc06e\uc06f\uc070\uc071\uc072\uc073\uc074\uc075\uc076\uc077\uc078\uc079\uc07a\uc07b\uc07c\uc07d\uc07e\uc07f\uc080\uc081\uc082\uc083\uc084\uc085\uc086\uc087\uc088\uc089\uc08a\uc08b\uc08c\uc08d\uc08e\uc08f\uc090\uc091\uc092\uc093\uc094\uc095\uc096\uc097\uc098\uc099\uc09a\uc09b\uc09c\uc09d\uc09e\uc09f\uc0a0\uc0a1\uc0a2\uc0a3\uc0a4\uc0a5\uc0a6\uc0a7\uc0a8\uc0a9\uc0aa\uc0ab\uc0ac\uc0ad\uc0ae\uc0af\uc0b0\uc0b1\uc0b2\uc0b3\uc0b4\uc0b5\uc0b6\uc0b7\uc0b8\uc0b9\uc0ba\uc0bb\uc0bc\uc0bd\uc0be\uc0bf\uc0c0\uc0c1\uc0c2\uc0c3\uc0c4\uc0c5\uc0c6\uc0c7\uc0c8\uc0c9\uc0ca\uc0cb\uc0cc\uc0cd\uc0ce\uc0cf\uc0d0\uc0d1\uc0d2\uc0d3\uc0d4\uc0d5\uc0d6\uc0d7\uc0d8\uc0d9\uc0da\uc0db\uc0dc\uc0dd\uc0de\uc0df\uc0e0\uc0e1\uc0e2\uc0e3\uc0e4\uc0e5\uc0e6\uc0e7\uc0e8\uc0e9\uc0ea\uc0eb\uc0ec\uc0ed\uc0ee\uc0ef\uc0f0\uc0f1\uc0f2\uc0f3\uc0f4\uc0f5\uc0f6\uc0f7\uc0f8\uc0f9\uc0fa\uc0fb\uc0fc\uc0fd\uc0fe\uc0ff\uc100\uc101\uc102\uc103\uc104\uc105\uc106\uc107\uc108\uc109\uc10a\uc10b\uc10c\uc10d\uc10e\uc10f\uc110\uc111\uc112\uc113\uc114\uc115\uc116\uc117\uc118\uc119\uc11a\uc11b\uc11c\uc11d\uc11e\uc11f\uc120\uc121\uc122\uc123\uc124\uc125\uc126\uc127\uc128\uc129\uc12a\uc12b\uc12c\uc12d\uc12e\uc12f\uc130\uc131\uc132\uc133\uc134\uc135\uc136\uc137\uc138\uc139\uc13a\uc13b\uc13c\uc13d\uc13e\uc13f\uc140\uc141\uc142\uc143\uc144\uc145\uc146\uc147\uc148\uc149\uc14a\uc14b\uc14c\uc14d\uc14e\uc14f\uc150\uc151\uc152\uc153\uc154\uc155\uc156\uc157\uc158\uc159\uc15a\uc15b\uc15c\uc15d\uc15e\uc15f\uc160\uc161\uc162\uc163\uc164\uc165\uc166\uc167\uc168\uc169\uc16a\uc16b\uc16c\uc16d\uc16e\uc16f\uc170\uc171\uc172\uc173\uc174\uc175\uc176\uc177\uc178\uc179\uc17a\uc17b\uc17c\uc17d\uc17e\uc17f\uc180\uc181\uc182\uc183\uc184\uc185\uc186\uc187\uc188\uc189\uc18a\uc18b\uc18c\uc18d\uc18e\uc18f\uc190\uc191\uc192\uc193\uc194\uc195\uc196\uc197\uc198\uc199\uc19a\uc19b\uc19c\uc19d\uc19e\uc19f\uc1a0\uc1a1\uc1a2\uc1a3\uc1a4\uc1a5\uc1a6\uc1a7\uc1a8\uc1a9\uc1aa\uc1ab\uc1ac\uc1ad\uc1ae\uc1af\uc1b0\uc1b1\uc1b2\uc1b3\uc1b4\uc1b5\uc1b6\uc1b7\uc1b8\uc1b9\uc1ba\uc1bb\uc1bc\uc1bd\uc1be\uc1bf\uc1c0\uc1c1\uc1c2\uc1c3\uc1c4\uc1c5\uc1c6\uc1c7\uc1c8\uc1c9\uc1ca\uc1cb\uc1cc\uc1cd\uc1ce\uc1cf\uc1d0\uc1d1\uc1d2\uc1d3\uc1d4\uc1d5\uc1d6\uc1d7\uc1d8\uc1d9\uc1da\uc1db\uc1dc\uc1dd\uc1de\uc1df\uc1e0\uc1e1\uc1e2\uc1e3\uc1e4\uc1e5\uc1e6\uc1e7\uc1e8\uc1e9\uc1ea\uc1eb\uc1ec\uc1ed\uc1ee\uc1ef\uc1f0\uc1f1\uc1f2\uc1f3\uc1f4\uc1f5\uc1f6\uc1f7\uc1f8\uc1f9\uc1fa\uc1fb\uc1fc\uc1fd\uc1fe\uc1ff\uc200\uc201\uc202\uc203\uc204\uc205\uc206\uc207\uc208\uc209\uc20a\uc20b\uc20c\uc20d\uc20e\uc20f\uc210\uc211\uc212\uc213\uc214\uc215\uc216\uc217\uc218\uc219\uc21a\uc21b\uc21c\uc21d\uc21e\uc21f\uc220\uc221\uc222\uc223\uc224\uc225\uc226\uc227\uc228\uc229\uc22a\uc22b\uc22c\uc22d\uc22e\uc22f\uc230\uc231\uc232\uc233\uc234\uc235\uc236\uc237\uc238\uc239\uc23a\uc23b\uc23c\uc23d\uc23e\uc23f\uc240\uc241\uc242\uc243\uc244\uc245\uc246\uc247\uc248\uc249\uc24a\uc24b\uc24c\uc24d\uc24e\uc24f\uc250\uc251\uc252\uc253\uc254\uc255\uc256\uc257\uc258\uc259\uc25a\uc25b\uc25c\uc25d\uc25e\uc25f\uc260\uc261\uc262\uc263\uc264\uc265\uc266\uc267\uc268\uc269\uc26a\uc26b\uc26c\uc26d\uc26e\uc26f\uc270\uc271\uc272\uc273\uc274\uc275\uc276\uc277\uc278\uc279\uc27a\uc27b\uc27c\uc27d\uc27e\uc27f\uc280\uc281\uc282\uc283\uc284\uc285\uc286\uc287\uc288\uc289\uc28a\uc28b\uc28c\uc28d\uc28e\uc28f\uc290\uc291\uc292\uc293\uc294\uc295\uc296\uc297\uc298\uc299\uc29a\uc29b\uc29c\uc29d\uc29e\uc29f\uc2a0\uc2a1\uc2a2\uc2a3\uc2a4\uc2a5\uc2a6\uc2a7\uc2a8\uc2a9\uc2aa\uc2ab\uc2ac\uc2ad\uc2ae\uc2af\uc2b0\uc2b1\uc2b2\uc2b3\uc2b4\uc2b5\uc2b6\uc2b7\uc2b8\uc2b9\uc2ba\uc2bb\uc2bc\uc2bd\uc2be\uc2bf\uc2c0\uc2c1\uc2c2\uc2c3\uc2c4\uc2c5\uc2c6\uc2c7\uc2c8\uc2c9\uc2ca\uc2cb\uc2cc\uc2cd\uc2ce\uc2cf\uc2d0\uc2d1\uc2d2\uc2d3\uc2d4\uc2d5\uc2d6\uc2d7\uc2d8\uc2d9\uc2da\uc2db\uc2dc\uc2dd\uc2de\uc2df\uc2e0\uc2e1\uc2e2\uc2e3\uc2e4\uc2e5\uc2e6\uc2e7\uc2e8\uc2e9\uc2ea\uc2eb\uc2ec\uc2ed\uc2ee\uc2ef\uc2f0\uc2f1\uc2f2\uc2f3\uc2f4\uc2f5\uc2f6\uc2f7\uc2f8\uc2f9\uc2fa\uc2fb\uc2fc\uc2fd\uc2fe\uc2ff\uc300\uc301\uc302\uc303\uc304\uc305\uc306\uc307\uc308\uc309\uc30a\uc30b\uc30c\uc30d\uc30e\uc30f\uc310\uc311\uc312\uc313\uc314\uc315\uc316\uc317\uc318\uc319\uc31a\uc31b\uc31c\uc31d\uc31e\uc31f\uc320\uc321\uc322\uc323\uc324\uc325\uc326\uc327\uc328\uc329\uc32a\uc32b\uc32c\uc32d\uc32e\uc32f\uc330\uc331\uc332\uc333\uc334\uc335\uc336\uc337\uc338\uc339\uc33a\uc33b\uc33c\uc33d\uc33e\uc33f\uc340\uc341\uc342\uc343\uc344\uc345\uc346\uc347\uc348\uc349\uc34a\uc34b\uc34c\uc34d\uc34e\uc34f\uc350\uc351\uc352\uc353\uc354\uc355\uc356\uc357\uc358\uc359\uc35a\uc35b\uc35c\uc35d\uc35e\uc35f\uc360\uc361\uc362\uc363\uc364\uc365\uc366\uc367\uc368\uc369\uc36a\uc36b\uc36c\uc36d\uc36e\uc36f\uc370\uc371\uc372\uc373\uc374\uc375\uc376\uc377\uc378\uc379\uc37a\uc37b\uc37c\uc37d\uc37e\uc37f\uc380\uc381\uc382\uc383\uc384\uc385\uc386\uc387\uc388\uc389\uc38a\uc38b\uc38c\uc38d\uc38e\uc38f\uc390\uc391\uc392\uc393\uc394\uc395\uc396\uc397\uc398\uc399\uc39a\uc39b\uc39c\uc39d\uc39e\uc39f\uc3a0\uc3a1\uc3a2\uc3a3\uc3a4\uc3a5\uc3a6\uc3a7\uc3a8\uc3a9\uc3aa\uc3ab\uc3ac\uc3ad\uc3ae\uc3af\uc3b0\uc3b1\uc3b2\uc3b3\uc3b4\uc3b5\uc3b6\uc3b7\uc3b8\uc3b9\uc3ba\uc3bb\uc3bc\uc3bd\uc3be\uc3bf\uc3c0\uc3c1\uc3c2\uc3c3\uc3c4\uc3c5\uc3c6\uc3c7\uc3c8\uc3c9\uc3ca\uc3cb\uc3cc\uc3cd\uc3ce\uc3cf\uc3d0\uc3d1\uc3d2\uc3d3\uc3d4\uc3d5\uc3d6\uc3d7\uc3d8\uc3d9\uc3da\uc3db\uc3dc\uc3dd\uc3de\uc3df\uc3e0\uc3e1\uc3e2\uc3e3\uc3e4\uc3e5\uc3e6\uc3e7\uc3e8\uc3e9\uc3ea\uc3eb\uc3ec\uc3ed\uc3ee\uc3ef\uc3f0\uc3f1\uc3f2\uc3f3\uc3f4\uc3f5\uc3f6\uc3f7\uc3f8\uc3f9\uc3fa\uc3fb\uc3fc\uc3fd\uc3fe\uc3ff\uc400\uc401\uc402\uc403\uc404\uc405\uc406\uc407\uc408\uc409\uc40a\uc40b\uc40c\uc40d\uc40e\uc40f\uc410\uc411\uc412\uc413\uc414\uc415\uc416\uc417\uc418\uc419\uc41a\uc41b\uc41c\uc41d\uc41e\uc41f\uc420\uc421\uc422\uc423\uc424\uc425\uc426\uc427\uc428\uc429\uc42a\uc42b\uc42c\uc42d\uc42e\uc42f\uc430\uc431\uc432\uc433\uc434\uc435\uc436\uc437\uc438\uc439\uc43a\uc43b\uc43c\uc43d\uc43e\uc43f\uc440\uc441\uc442\uc443\uc444\uc445\uc446\uc447\uc448\uc449\uc44a\uc44b\uc44c\uc44d\uc44e\uc44f\uc450\uc451\uc452\uc453\uc454\uc455\uc456\uc457\uc458\uc459\uc45a\uc45b\uc45c\uc45d\uc45e\uc45f\uc460\uc461\uc462\uc463\uc464\uc465\uc466\uc467\uc468\uc469\uc46a\uc46b\uc46c\uc46d\uc46e\uc46f\uc470\uc471\uc472\uc473\uc474\uc475\uc476\uc477\uc478\uc479\uc47a\uc47b\uc47c\uc47d\uc47e\uc47f\uc480\uc481\uc482\uc483\uc484\uc485\uc486\uc487\uc488\uc489\uc48a\uc48b\uc48c\uc48d\uc48e\uc48f\uc490\uc491\uc492\uc493\uc494\uc495\uc496\uc497\uc498\uc499\uc49a\uc49b\uc49c\uc49d\uc49e\uc49f\uc4a0\uc4a1\uc4a2\uc4a3\uc4a4\uc4a5\uc4a6\uc4a7\uc4a8\uc4a9\uc4aa\uc4ab\uc4ac\uc4ad\uc4ae\uc4af\uc4b0\uc4b1\uc4b2\uc4b3\uc4b4\uc4b5\uc4b6\uc4b7\uc4b8\uc4b9\uc4ba\uc4bb\uc4bc\uc4bd\uc4be\uc4bf\uc4c0\uc4c1\uc4c2\uc4c3\uc4c4\uc4c5\uc4c6\uc4c7\uc4c8\uc4c9\uc4ca\uc4cb\uc4cc\uc4cd\uc4ce\uc4cf\uc4d0\uc4d1\uc4d2\uc4d3\uc4d4\uc4d5\uc4d6\uc4d7\uc4d8\uc4d9\uc4da\uc4db\uc4dc\uc4dd\uc4de\uc4df\uc4e0\uc4e1\uc4e2\uc4e3\uc4e4\uc4e5\uc4e6\uc4e7\uc4e8\uc4e9\uc4ea\uc4eb\uc4ec\uc4ed\uc4ee\uc4ef\uc4f0\uc4f1\uc4f2\uc4f3\uc4f4\uc4f5\uc4f6\uc4f7\uc4f8\uc4f9\uc4fa\uc4fb\uc4fc\uc4fd\uc4fe\uc4ff\uc500\uc501\uc502\uc503\uc504\uc505\uc506\uc507\uc508\uc509\uc50a\uc50b\uc50c\uc50d\uc50e\uc50f\uc510\uc511\uc512\uc513\uc514\uc515\uc516\uc517\uc518\uc519\uc51a\uc51b\uc51c\uc51d\uc51e\uc51f\uc520\uc521\uc522\uc523\uc524\uc525\uc526\uc527\uc528\uc529\uc52a\uc52b\uc52c\uc52d\uc52e\uc52f\uc530\uc531\uc532\uc533\uc534\uc535\uc536\uc537\uc538\uc539\uc53a\uc53b\uc53c\uc53d\uc53e\uc53f\uc540\uc541\uc542\uc543\uc544\uc545\uc546\uc547\uc548\uc549\uc54a\uc54b\uc54c\uc54d\uc54e\uc54f\uc550\uc551\uc552\uc553\uc554\uc555\uc556\uc557\uc558\uc559\uc55a\uc55b\uc55c\uc55d\uc55e\uc55f\uc560\uc561\uc562\uc563\uc564\uc565\uc566\uc567\uc568\uc569\uc56a\uc56b\uc56c\uc56d\uc56e\uc56f\uc570\uc571\uc572\uc573\uc574\uc575\uc576\uc577\uc578\uc579\uc57a\uc57b\uc57c\uc57d\uc57e\uc57f\uc580\uc581\uc582\uc583\uc584\uc585\uc586\uc587\uc588\uc589\uc58a\uc58b\uc58c\uc58d\uc58e\uc58f\uc590\uc591\uc592\uc593\uc594\uc595\uc596\uc597\uc598\uc599\uc59a\uc59b\uc59c\uc59d\uc59e\uc59f\uc5a0\uc5a1\uc5a2\uc5a3\uc5a4\uc5a5\uc5a6\uc5a7\uc5a8\uc5a9\uc5aa\uc5ab\uc5ac\uc5ad\uc5ae\uc5af\uc5b0\uc5b1\uc5b2\uc5b3\uc5b4\uc5b5\uc5b6\uc5b7\uc5b8\uc5b9\uc5ba\uc5bb\uc5bc\uc5bd\uc5be\uc5bf\uc5c0\uc5c1\uc5c2\uc5c3\uc5c4\uc5c5\uc5c6\uc5c7\uc5c8\uc5c9\uc5ca\uc5cb\uc5cc\uc5cd\uc5ce\uc5cf\uc5d0\uc5d1\uc5d2\uc5d3\uc5d4\uc5d5\uc5d6\uc5d7\uc5d8\uc5d9\uc5da\uc5db\uc5dc\uc5dd\uc5de\uc5df\uc5e0\uc5e1\uc5e2\uc5e3\uc5e4\uc5e5\uc5e6\uc5e7\uc5e8\uc5e9\uc5ea\uc5eb\uc5ec\uc5ed\uc5ee\uc5ef\uc5f0\uc5f1\uc5f2\uc5f3\uc5f4\uc5f5\uc5f6\uc5f7\uc5f8\uc5f9\uc5fa\uc5fb\uc5fc\uc5fd\uc5fe\uc5ff\uc600\uc601\uc602\uc603\uc604\uc605\uc606\uc607\uc608\uc609\uc60a\uc60b\uc60c\uc60d\uc60e\uc60f\uc610\uc611\uc612\uc613\uc614\uc615\uc616\uc617\uc618\uc619\uc61a\uc61b\uc61c\uc61d\uc61e\uc61f\uc620\uc621\uc622\uc623\uc624\uc625\uc626\uc627\uc628\uc629\uc62a\uc62b\uc62c\uc62d\uc62e\uc62f\uc630\uc631\uc632\uc633\uc634\uc635\uc636\uc637\uc638\uc639\uc63a\uc63b\uc63c\uc63d\uc63e\uc63f\uc640\uc641\uc642\uc643\uc644\uc645\uc646\uc647\uc648\uc649\uc64a\uc64b\uc64c\uc64d\uc64e\uc64f\uc650\uc651\uc652\uc653\uc654\uc655\uc656\uc657\uc658\uc659\uc65a\uc65b\uc65c\uc65d\uc65e\uc65f\uc660\uc661\uc662\uc663\uc664\uc665\uc666\uc667\uc668\uc669\uc66a\uc66b\uc66c\uc66d\uc66e\uc66f\uc670\uc671\uc672\uc673\uc674\uc675\uc676\uc677\uc678\uc679\uc67a\uc67b\uc67c\uc67d\uc67e\uc67f\uc680\uc681\uc682\uc683\uc684\uc685\uc686\uc687\uc688\uc689\uc68a\uc68b\uc68c\uc68d\uc68e\uc68f\uc690\uc691\uc692\uc693\uc694\uc695\uc696\uc697\uc698\uc699\uc69a\uc69b\uc69c\uc69d\uc69e\uc69f\uc6a0\uc6a1\uc6a2\uc6a3\uc6a4\uc6a5\uc6a6\uc6a7\uc6a8\uc6a9\uc6aa\uc6ab\uc6ac\uc6ad\uc6ae\uc6af\uc6b0\uc6b1\uc6b2\uc6b3\uc6b4\uc6b5\uc6b6\uc6b7\uc6b8\uc6b9\uc6ba\uc6bb\uc6bc\uc6bd\uc6be\uc6bf\uc6c0\uc6c1\uc6c2\uc6c3\uc6c4\uc6c5\uc6c6\uc6c7\uc6c8\uc6c9\uc6ca\uc6cb\uc6cc\uc6cd\uc6ce\uc6cf\uc6d0\uc6d1\uc6d2\uc6d3\uc6d4\uc6d5\uc6d6\uc6d7\uc6d8\uc6d9\uc6da\uc6db\uc6dc\uc6dd\uc6de\uc6df\uc6e0\uc6e1\uc6e2\uc6e3\uc6e4\uc6e5\uc6e6\uc6e7\uc6e8\uc6e9\uc6ea\uc6eb\uc6ec\uc6ed\uc6ee\uc6ef\uc6f0\uc6f1\uc6f2\uc6f3\uc6f4\uc6f5\uc6f6\uc6f7\uc6f8\uc6f9\uc6fa\uc6fb\uc6fc\uc6fd\uc6fe\uc6ff\uc700\uc701\uc702\uc703\uc704\uc705\uc706\uc707\uc708\uc709\uc70a\uc70b\uc70c\uc70d\uc70e\uc70f\uc710\uc711\uc712\uc713\uc714\uc715\uc716\uc717\uc718\uc719\uc71a\uc71b\uc71c\uc71d\uc71e\uc71f\uc720\uc721\uc722\uc723\uc724\uc725\uc726\uc727\uc728\uc729\uc72a\uc72b\uc72c\uc72d\uc72e\uc72f\uc730\uc731\uc732\uc733\uc734\uc735\uc736\uc737\uc738\uc739\uc73a\uc73b\uc73c\uc73d\uc73e\uc73f\uc740\uc741\uc742\uc743\uc744\uc745\uc746\uc747\uc748\uc749\uc74a\uc74b\uc74c\uc74d\uc74e\uc74f\uc750\uc751\uc752\uc753\uc754\uc755\uc756\uc757\uc758\uc759\uc75a\uc75b\uc75c\uc75d\uc75e\uc75f\uc760\uc761\uc762\uc763\uc764\uc765\uc766\uc767\uc768\uc769\uc76a\uc76b\uc76c\uc76d\uc76e\uc76f\uc770\uc771\uc772\uc773\uc774\uc775\uc776\uc777\uc778\uc779\uc77a\uc77b\uc77c\uc77d\uc77e\uc77f\uc780\uc781\uc782\uc783\uc784\uc785\uc786\uc787\uc788\uc789\uc78a\uc78b\uc78c\uc78d\uc78e\uc78f\uc790\uc791\uc792\uc793\uc794\uc795\uc796\uc797\uc798\uc799\uc79a\uc79b\uc79c\uc79d\uc79e\uc79f\uc7a0\uc7a1\uc7a2\uc7a3\uc7a4\uc7a5\uc7a6\uc7a7\uc7a8\uc7a9\uc7aa\uc7ab\uc7ac\uc7ad\uc7ae\uc7af\uc7b0\uc7b1\uc7b2\uc7b3\uc7b4\uc7b5\uc7b6\uc7b7\uc7b8\uc7b9\uc7ba\uc7bb\uc7bc\uc7bd\uc7be\uc7bf\uc7c0\uc7c1\uc7c2\uc7c3\uc7c4\uc7c5\uc7c6\uc7c7\uc7c8\uc7c9\uc7ca\uc7cb\uc7cc\uc7cd\uc7ce\uc7cf\uc7d0\uc7d1\uc7d2\uc7d3\uc7d4\uc7d5\uc7d6\uc7d7\uc7d8\uc7d9\uc7da\uc7db\uc7dc\uc7dd\uc7de\uc7df\uc7e0\uc7e1\uc7e2\uc7e3\uc7e4\uc7e5\uc7e6\uc7e7\uc7e8\uc7e9\uc7ea\uc7eb\uc7ec\uc7ed\uc7ee\uc7ef\uc7f0\uc7f1\uc7f2\uc7f3\uc7f4\uc7f5\uc7f6\uc7f7\uc7f8\uc7f9\uc7fa\uc7fb\uc7fc\uc7fd\uc7fe\uc7ff\uc800\uc801\uc802\uc803\uc804\uc805\uc806\uc807\uc808\uc809\uc80a\uc80b\uc80c\uc80d\uc80e\uc80f\uc810\uc811\uc812\uc813\uc814\uc815\uc816\uc817\uc818\uc819\uc81a\uc81b\uc81c\uc81d\uc81e\uc81f\uc820\uc821\uc822\uc823\uc824\uc825\uc826\uc827\uc828\uc829\uc82a\uc82b\uc82c\uc82d\uc82e\uc82f\uc830\uc831\uc832\uc833\uc834\uc835\uc836\uc837\uc838\uc839\uc83a\uc83b\uc83c\uc83d\uc83e\uc83f\uc840\uc841\uc842\uc843\uc844\uc845\uc846\uc847\uc848\uc849\uc84a\uc84b\uc84c\uc84d\uc84e\uc84f\uc850\uc851\uc852\uc853\uc854\uc855\uc856\uc857\uc858\uc859\uc85a\uc85b\uc85c\uc85d\uc85e\uc85f\uc860\uc861\uc862\uc863\uc864\uc865\uc866\uc867\uc868\uc869\uc86a\uc86b\uc86c\uc86d\uc86e\uc86f\uc870\uc871\uc872\uc873\uc874\uc875\uc876\uc877\uc878\uc879\uc87a\uc87b\uc87c\uc87d\uc87e\uc87f\uc880\uc881\uc882\uc883\uc884\uc885\uc886\uc887\uc888\uc889\uc88a\uc88b\uc88c\uc88d\uc88e\uc88f\uc890\uc891\uc892\uc893\uc894\uc895\uc896\uc897\uc898\uc899\uc89a\uc89b\uc89c\uc89d\uc89e\uc89f\uc8a0\uc8a1\uc8a2\uc8a3\uc8a4\uc8a5\uc8a6\uc8a7\uc8a8\uc8a9\uc8aa\uc8ab\uc8ac\uc8ad\uc8ae\uc8af\uc8b0\uc8b1\uc8b2\uc8b3\uc8b4\uc8b5\uc8b6\uc8b7\uc8b8\uc8b9\uc8ba\uc8bb\uc8bc\uc8bd\uc8be\uc8bf\uc8c0\uc8c1\uc8c2\uc8c3\uc8c4\uc8c5\uc8c6\uc8c7\uc8c8\uc8c9\uc8ca\uc8cb\uc8cc\uc8cd\uc8ce\uc8cf\uc8d0\uc8d1\uc8d2\uc8d3\uc8d4\uc8d5\uc8d6\uc8d7\uc8d8\uc8d9\uc8da\uc8db\uc8dc\uc8dd\uc8de\uc8df\uc8e0\uc8e1\uc8e2\uc8e3\uc8e4\uc8e5\uc8e6\uc8e7\uc8e8\uc8e9\uc8ea\uc8eb\uc8ec\uc8ed\uc8ee\uc8ef\uc8f0\uc8f1\uc8f2\uc8f3\uc8f4\uc8f5\uc8f6\uc8f7\uc8f8\uc8f9\uc8fa\uc8fb\uc8fc\uc8fd\uc8fe\uc8ff\uc900\uc901\uc902\uc903\uc904\uc905\uc906\uc907\uc908\uc909\uc90a\uc90b\uc90c\uc90d\uc90e\uc90f\uc910\uc911\uc912\uc913\uc914\uc915\uc916\uc917\uc918\uc919\uc91a\uc91b\uc91c\uc91d\uc91e\uc91f\uc920\uc921\uc922\uc923\uc924\uc925\uc926\uc927\uc928\uc929\uc92a\uc92b\uc92c\uc92d\uc92e\uc92f\uc930\uc931\uc932\uc933\uc934\uc935\uc936\uc937\uc938\uc939\uc93a\uc93b\uc93c\uc93d\uc93e\uc93f\uc940\uc941\uc942\uc943\uc944\uc945\uc946\uc947\uc948\uc949\uc94a\uc94b\uc94c\uc94d\uc94e\uc94f\uc950\uc951\uc952\uc953\uc954\uc955\uc956\uc957\uc958\uc959\uc95a\uc95b\uc95c\uc95d\uc95e\uc95f\uc960\uc961\uc962\uc963\uc964\uc965\uc966\uc967\uc968\uc969\uc96a\uc96b\uc96c\uc96d\uc96e\uc96f\uc970\uc971\uc972\uc973\uc974\uc975\uc976\uc977\uc978\uc979\uc97a\uc97b\uc97c\uc97d\uc97e\uc97f\uc980\uc981\uc982\uc983\uc984\uc985\uc986\uc987\uc988\uc989\uc98a\uc98b\uc98c\uc98d\uc98e\uc98f\uc990\uc991\uc992\uc993\uc994\uc995\uc996\uc997\uc998\uc999\uc99a\uc99b\uc99c\uc99d\uc99e\uc99f\uc9a0\uc9a1\uc9a2\uc9a3\uc9a4\uc9a5\uc9a6\uc9a7\uc9a8\uc9a9\uc9aa\uc9ab\uc9ac\uc9ad\uc9ae\uc9af\uc9b0\uc9b1\uc9b2\uc9b3\uc9b4\uc9b5\uc9b6\uc9b7\uc9b8\uc9b9\uc9ba\uc9bb\uc9bc\uc9bd\uc9be\uc9bf\uc9c0\uc9c1\uc9c2\uc9c3\uc9c4\uc9c5\uc9c6\uc9c7\uc9c8\uc9c9\uc9ca\uc9cb\uc9cc\uc9cd\uc9ce\uc9cf\uc9d0\uc9d1\uc9d2\uc9d3\uc9d4\uc9d5\uc9d6\uc9d7\uc9d8\uc9d9\uc9da\uc9db\uc9dc\uc9dd\uc9de\uc9df\uc9e0\uc9e1\uc9e2\uc9e3\uc9e4\uc9e5\uc9e6\uc9e7\uc9e8\uc9e9\uc9ea\uc9eb\uc9ec\uc9ed\uc9ee\uc9ef\uc9f0\uc9f1\uc9f2\uc9f3\uc9f4\uc9f5\uc9f6\uc9f7\uc9f8\uc9f9\uc9fa\uc9fb\uc9fc\uc9fd\uc9fe\uc9ff\uca00\uca01\uca02\uca03\uca04\uca05\uca06\uca07\uca08\uca09\uca0a\uca0b\uca0c\uca0d\uca0e\uca0f\uca10\uca11\uca12\uca13\uca14\uca15\uca16\uca17\uca18\uca19\uca1a\uca1b\uca1c\uca1d\uca1e\uca1f\uca20\uca21\uca22\uca23\uca24\uca25\uca26\uca27\uca28\uca29\uca2a\uca2b\uca2c\uca2d\uca2e\uca2f\uca30\uca31\uca32\uca33\uca34\uca35\uca36\uca37\uca38\uca39\uca3a\uca3b\uca3c\uca3d\uca3e\uca3f\uca40\uca41\uca42\uca43\uca44\uca45\uca46\uca47\uca48\uca49\uca4a\uca4b\uca4c\uca4d\uca4e\uca4f\uca50\uca51\uca52\uca53\uca54\uca55\uca56\uca57\uca58\uca59\uca5a\uca5b\uca5c\uca5d\uca5e\uca5f\uca60\uca61\uca62\uca63\uca64\uca65\uca66\uca67\uca68\uca69\uca6a\uca6b\uca6c\uca6d\uca6e\uca6f\uca70\uca71\uca72\uca73\uca74\uca75\uca76\uca77\uca78\uca79\uca7a\uca7b\uca7c\uca7d\uca7e\uca7f\uca80\uca81\uca82\uca83\uca84\uca85\uca86\uca87\uca88\uca89\uca8a\uca8b\uca8c\uca8d\uca8e\uca8f\uca90\uca91\uca92\uca93\uca94\uca95\uca96\uca97\uca98\uca99\uca9a\uca9b\uca9c\uca9d\uca9e\uca9f\ucaa0\ucaa1\ucaa2\ucaa3\ucaa4\ucaa5\ucaa6\ucaa7\ucaa8\ucaa9\ucaaa\ucaab\ucaac\ucaad\ucaae\ucaaf\ucab0\ucab1\ucab2\ucab3\ucab4\ucab5\ucab6\ucab7\ucab8\ucab9\ucaba\ucabb\ucabc\ucabd\ucabe\ucabf\ucac0\ucac1\ucac2\ucac3\ucac4\ucac5\ucac6\ucac7\ucac8\ucac9\ucaca\ucacb\ucacc\ucacd\ucace\ucacf\ucad0\ucad1\ucad2\ucad3\ucad4\ucad5\ucad6\ucad7\ucad8\ucad9\ucada\ucadb\ucadc\ucadd\ucade\ucadf\ucae0\ucae1\ucae2\ucae3\ucae4\ucae5\ucae6\ucae7\ucae8\ucae9\ucaea\ucaeb\ucaec\ucaed\ucaee\ucaef\ucaf0\ucaf1\ucaf2\ucaf3\ucaf4\ucaf5\ucaf6\ucaf7\ucaf8\ucaf9\ucafa\ucafb\ucafc\ucafd\ucafe\ucaff\ucb00\ucb01\ucb02\ucb03\ucb04\ucb05\ucb06\ucb07\ucb08\ucb09\ucb0a\ucb0b\ucb0c\ucb0d\ucb0e\ucb0f\ucb10\ucb11\ucb12\ucb13\ucb14\ucb15\ucb16\ucb17\ucb18\ucb19\ucb1a\ucb1b\ucb1c\ucb1d\ucb1e\ucb1f\ucb20\ucb21\ucb22\ucb23\ucb24\ucb25\ucb26\ucb27\ucb28\ucb29\ucb2a\ucb2b\ucb2c\ucb2d\ucb2e\ucb2f\ucb30\ucb31\ucb32\ucb33\ucb34\ucb35\ucb36\ucb37\ucb38\ucb39\ucb3a\ucb3b\ucb3c\ucb3d\ucb3e\ucb3f\ucb40\ucb41\ucb42\ucb43\ucb44\ucb45\ucb46\ucb47\ucb48\ucb49\ucb4a\ucb4b\ucb4c\ucb4d\ucb4e\ucb4f\ucb50\ucb51\ucb52\ucb53\ucb54\ucb55\ucb56\ucb57\ucb58\ucb59\ucb5a\ucb5b\ucb5c\ucb5d\ucb5e\ucb5f\ucb60\ucb61\ucb62\ucb63\ucb64\ucb65\ucb66\ucb67\ucb68\ucb69\ucb6a\ucb6b\ucb6c\ucb6d\ucb6e\ucb6f\ucb70\ucb71\ucb72\ucb73\ucb74\ucb75\ucb76\ucb77\ucb78\ucb79\ucb7a\ucb7b\ucb7c\ucb7d\ucb7e\ucb7f\ucb80\ucb81\ucb82\ucb83\ucb84\ucb85\ucb86\ucb87\ucb88\ucb89\ucb8a\ucb8b\ucb8c\ucb8d\ucb8e\ucb8f\ucb90\ucb91\ucb92\ucb93\ucb94\ucb95\ucb96\ucb97\ucb98\ucb99\ucb9a\ucb9b\ucb9c\ucb9d\ucb9e\ucb9f\ucba0\ucba1\ucba2\ucba3\ucba4\ucba5\ucba6\ucba7\ucba8\ucba9\ucbaa\ucbab\ucbac\ucbad\ucbae\ucbaf\ucbb0\ucbb1\ucbb2\ucbb3\ucbb4\ucbb5\ucbb6\ucbb7\ucbb8\ucbb9\ucbba\ucbbb\ucbbc\ucbbd\ucbbe\ucbbf\ucbc0\ucbc1\ucbc2\ucbc3\ucbc4\ucbc5\ucbc6\ucbc7\ucbc8\ucbc9\ucbca\ucbcb\ucbcc\ucbcd\ucbce\ucbcf\ucbd0\ucbd1\ucbd2\ucbd3\ucbd4\ucbd5\ucbd6\ucbd7\ucbd8\ucbd9\ucbda\ucbdb\ucbdc\ucbdd\ucbde\ucbdf\ucbe0\ucbe1\ucbe2\ucbe3\ucbe4\ucbe5\ucbe6\ucbe7\ucbe8\ucbe9\ucbea\ucbeb\ucbec\ucbed\ucbee\ucbef\ucbf0\ucbf1\ucbf2\ucbf3\ucbf4\ucbf5\ucbf6\ucbf7\ucbf8\ucbf9\ucbfa\ucbfb\ucbfc\ucbfd\ucbfe\ucbff\ucc00\ucc01\ucc02\ucc03\ucc04\ucc05\ucc06\ucc07\ucc08\ucc09\ucc0a\ucc0b\ucc0c\ucc0d\ucc0e\ucc0f\ucc10\ucc11\ucc12\ucc13\ucc14\ucc15\ucc16\ucc17\ucc18\ucc19\ucc1a\ucc1b\ucc1c\ucc1d\ucc1e\ucc1f\ucc20\ucc21\ucc22\ucc23\ucc24\ucc25\ucc26\ucc27\ucc28\ucc29\ucc2a\ucc2b\ucc2c\ucc2d\ucc2e\ucc2f\ucc30\ucc31\ucc32\ucc33\ucc34\ucc35\ucc36\ucc37\ucc38\ucc39\ucc3a\ucc3b\ucc3c\ucc3d\ucc3e\ucc3f\ucc40\ucc41\ucc42\ucc43\ucc44\ucc45\ucc46\ucc47\ucc48\ucc49\ucc4a\ucc4b\ucc4c\ucc4d\ucc4e\ucc4f\ucc50\ucc51\ucc52\ucc53\ucc54\ucc55\ucc56\ucc57\ucc58\ucc59\ucc5a\ucc5b\ucc5c\ucc5d\ucc5e\ucc5f\ucc60\ucc61\ucc62\ucc63\ucc64\ucc65\ucc66\ucc67\ucc68\ucc69\ucc6a\ucc6b\ucc6c\ucc6d\ucc6e\ucc6f\ucc70\ucc71\ucc72\ucc73\ucc74\ucc75\ucc76\ucc77\ucc78\ucc79\ucc7a\ucc7b\ucc7c\ucc7d\ucc7e\ucc7f\ucc80\ucc81\ucc82\ucc83\ucc84\ucc85\ucc86\ucc87\ucc88\ucc89\ucc8a\ucc8b\ucc8c\ucc8d\ucc8e\ucc8f\ucc90\ucc91\ucc92\ucc93\ucc94\ucc95\ucc96\ucc97\ucc98\ucc99\ucc9a\ucc9b\ucc9c\ucc9d\ucc9e\ucc9f\ucca0\ucca1\ucca2\ucca3\ucca4\ucca5\ucca6\ucca7\ucca8\ucca9\uccaa\uccab\uccac\uccad\uccae\uccaf\uccb0\uccb1\uccb2\uccb3\uccb4\uccb5\uccb6\uccb7\uccb8\uccb9\uccba\uccbb\uccbc\uccbd\uccbe\uccbf\uccc0\uccc1\uccc2\uccc3\uccc4\uccc5\uccc6\uccc7\uccc8\uccc9\uccca\ucccb\ucccc\ucccd\uccce\ucccf\uccd0\uccd1\uccd2\uccd3\uccd4\uccd5\uccd6\uccd7\uccd8\uccd9\uccda\uccdb\uccdc\uccdd\uccde\uccdf\ucce0\ucce1\ucce2\ucce3\ucce4\ucce5\ucce6\ucce7\ucce8\ucce9\uccea\ucceb\uccec\ucced\uccee\uccef\uccf0\uccf1\uccf2\uccf3\uccf4\uccf5\uccf6\uccf7\uccf8\uccf9\uccfa\uccfb\uccfc\uccfd\uccfe\uccff\ucd00\ucd01\ucd02\ucd03\ucd04\ucd05\ucd06\ucd07\ucd08\ucd09\ucd0a\ucd0b\ucd0c\ucd0d\ucd0e\ucd0f\ucd10\ucd11\ucd12\ucd13\ucd14\ucd15\ucd16\ucd17\ucd18\ucd19\ucd1a\ucd1b\ucd1c\ucd1d\ucd1e\ucd1f\ucd20\ucd21\ucd22\ucd23\ucd24\ucd25\ucd26\ucd27\ucd28\ucd29\ucd2a\ucd2b\ucd2c\ucd2d\ucd2e\ucd2f\ucd30\ucd31\ucd32\ucd33\ucd34\ucd35\ucd36\ucd37\ucd38\ucd39\ucd3a\ucd3b\ucd3c\ucd3d\ucd3e\ucd3f\ucd40\ucd41\ucd42\ucd43\ucd44\ucd45\ucd46\ucd47\ucd48\ucd49\ucd4a\ucd4b\ucd4c\ucd4d\ucd4e\ucd4f\ucd50\ucd51\ucd52\ucd53\ucd54\ucd55\ucd56\ucd57\ucd58\ucd59\ucd5a\ucd5b\ucd5c\ucd5d\ucd5e\ucd5f\ucd60\ucd61\ucd62\ucd63\ucd64\ucd65\ucd66\ucd67\ucd68\ucd69\ucd6a\ucd6b\ucd6c\ucd6d\ucd6e\ucd6f\ucd70\ucd71\ucd72\ucd73\ucd74\ucd75\ucd76\ucd77\ucd78\ucd79\ucd7a\ucd7b\ucd7c\ucd7d\ucd7e\ucd7f\ucd80\ucd81\ucd82\ucd83\ucd84\ucd85\ucd86\ucd87\ucd88\ucd89\ucd8a\ucd8b\ucd8c\ucd8d\ucd8e\ucd8f\ucd90\ucd91\ucd92\ucd93\ucd94\ucd95\ucd96\ucd97\ucd98\ucd99\ucd9a\ucd9b\ucd9c\ucd9d\ucd9e\ucd9f\ucda0\ucda1\ucda2\ucda3\ucda4\ucda5\ucda6\ucda7\ucda8\ucda9\ucdaa\ucdab\ucdac\ucdad\ucdae\ucdaf\ucdb0\ucdb1\ucdb2\ucdb3\ucdb4\ucdb5\ucdb6\ucdb7\ucdb8\ucdb9\ucdba\ucdbb\ucdbc\ucdbd\ucdbe\ucdbf\ucdc0\ucdc1\ucdc2\ucdc3\ucdc4\ucdc5\ucdc6\ucdc7\ucdc8\ucdc9\ucdca\ucdcb\ucdcc\ucdcd\ucdce\ucdcf\ucdd0\ucdd1\ucdd2\ucdd3\ucdd4\ucdd5\ucdd6\ucdd7\ucdd8\ucdd9\ucdda\ucddb\ucddc\ucddd\ucdde\ucddf\ucde0\ucde1\ucde2\ucde3\ucde4\ucde5\ucde6\ucde7\ucde8\ucde9\ucdea\ucdeb\ucdec\ucded\ucdee\ucdef\ucdf0\ucdf1\ucdf2\ucdf3\ucdf4\ucdf5\ucdf6\ucdf7\ucdf8\ucdf9\ucdfa\ucdfb\ucdfc\ucdfd\ucdfe\ucdff\uce00\uce01\uce02\uce03\uce04\uce05\uce06\uce07\uce08\uce09\uce0a\uce0b\uce0c\uce0d\uce0e\uce0f\uce10\uce11\uce12\uce13\uce14\uce15\uce16\uce17\uce18\uce19\uce1a\uce1b\uce1c\uce1d\uce1e\uce1f\uce20\uce21\uce22\uce23\uce24\uce25\uce26\uce27\uce28\uce29\uce2a\uce2b\uce2c\uce2d\uce2e\uce2f\uce30\uce31\uce32\uce33\uce34\uce35\uce36\uce37\uce38\uce39\uce3a\uce3b\uce3c\uce3d\uce3e\uce3f\uce40\uce41\uce42\uce43\uce44\uce45\uce46\uce47\uce48\uce49\uce4a\uce4b\uce4c\uce4d\uce4e\uce4f\uce50\uce51\uce52\uce53\uce54\uce55\uce56\uce57\uce58\uce59\uce5a\uce5b\uce5c\uce5d\uce5e\uce5f\uce60\uce61\uce62\uce63\uce64\uce65\uce66\uce67\uce68\uce69\uce6a\uce6b\uce6c\uce6d\uce6e\uce6f\uce70\uce71\uce72\uce73\uce74\uce75\uce76\uce77\uce78\uce79\uce7a\uce7b\uce7c\uce7d\uce7e\uce7f\uce80\uce81\uce82\uce83\uce84\uce85\uce86\uce87\uce88\uce89\uce8a\uce8b\uce8c\uce8d\uce8e\uce8f\uce90\uce91\uce92\uce93\uce94\uce95\uce96\uce97\uce98\uce99\uce9a\uce9b\uce9c\uce9d\uce9e\uce9f\ucea0\ucea1\ucea2\ucea3\ucea4\ucea5\ucea6\ucea7\ucea8\ucea9\uceaa\uceab\uceac\ucead\uceae\uceaf\uceb0\uceb1\uceb2\uceb3\uceb4\uceb5\uceb6\uceb7\uceb8\uceb9\uceba\ucebb\ucebc\ucebd\ucebe\ucebf\ucec0\ucec1\ucec2\ucec3\ucec4\ucec5\ucec6\ucec7\ucec8\ucec9\uceca\ucecb\ucecc\ucecd\ucece\ucecf\uced0\uced1\uced2\uced3\uced4\uced5\uced6\uced7\uced8\uced9\uceda\ucedb\ucedc\ucedd\ucede\ucedf\ucee0\ucee1\ucee2\ucee3\ucee4\ucee5\ucee6\ucee7\ucee8\ucee9\uceea\uceeb\uceec\uceed\uceee\uceef\ucef0\ucef1\ucef2\ucef3\ucef4\ucef5\ucef6\ucef7\ucef8\ucef9\ucefa\ucefb\ucefc\ucefd\ucefe\uceff\ucf00\ucf01\ucf02\ucf03\ucf04\ucf05\ucf06\ucf07\ucf08\ucf09\ucf0a\ucf0b\ucf0c\ucf0d\ucf0e\ucf0f\ucf10\ucf11\ucf12\ucf13\ucf14\ucf15\ucf16\ucf17\ucf18\ucf19\ucf1a\ucf1b\ucf1c\ucf1d\ucf1e\ucf1f\ucf20\ucf21\ucf22\ucf23\ucf24\ucf25\ucf26\ucf27\ucf28\ucf29\ucf2a\ucf2b\ucf2c\ucf2d\ucf2e\ucf2f\ucf30\ucf31\ucf32\ucf33\ucf34\ucf35\ucf36\ucf37\ucf38\ucf39\ucf3a\ucf3b\ucf3c\ucf3d\ucf3e\ucf3f\ucf40\ucf41\ucf42\ucf43\ucf44\ucf45\ucf46\ucf47\ucf48\ucf49\ucf4a\ucf4b\ucf4c\ucf4d\ucf4e\ucf4f\ucf50\ucf51\ucf52\ucf53\ucf54\ucf55\ucf56\ucf57\ucf58\ucf59\ucf5a\ucf5b\ucf5c\ucf5d\ucf5e\ucf5f\ucf60\ucf61\ucf62\ucf63\ucf64\ucf65\ucf66\ucf67\ucf68\ucf69\ucf6a\ucf6b\ucf6c\ucf6d\ucf6e\ucf6f\ucf70\ucf71\ucf72\ucf73\ucf74\ucf75\ucf76\ucf77\ucf78\ucf79\ucf7a\ucf7b\ucf7c\ucf7d\ucf7e\ucf7f\ucf80\ucf81\ucf82\ucf83\ucf84\ucf85\ucf86\ucf87\ucf88\ucf89\ucf8a\ucf8b\ucf8c\ucf8d\ucf8e\ucf8f\ucf90\ucf91\ucf92\ucf93\ucf94\ucf95\ucf96\ucf97\ucf98\ucf99\ucf9a\ucf9b\ucf9c\ucf9d\ucf9e\ucf9f\ucfa0\ucfa1\ucfa2\ucfa3\ucfa4\ucfa5\ucfa6\ucfa7\ucfa8\ucfa9\ucfaa\ucfab\ucfac\ucfad\ucfae\ucfaf\ucfb0\ucfb1\ucfb2\ucfb3\ucfb4\ucfb5\ucfb6\ucfb7\ucfb8\ucfb9\ucfba\ucfbb\ucfbc\ucfbd\ucfbe\ucfbf\ucfc0\ucfc1\ucfc2\ucfc3\ucfc4\ucfc5\ucfc6\ucfc7\ucfc8\ucfc9\ucfca\ucfcb\ucfcc\ucfcd\ucfce\ucfcf\ucfd0\ucfd1\ucfd2\ucfd3\ucfd4\ucfd5\ucfd6\ucfd7\ucfd8\ucfd9\ucfda\ucfdb\ucfdc\ucfdd\ucfde\ucfdf\ucfe0\ucfe1\ucfe2\ucfe3\ucfe4\ucfe5\ucfe6\ucfe7\ucfe8\ucfe9\ucfea\ucfeb\ucfec\ucfed\ucfee\ucfef\ucff0\ucff1\ucff2\ucff3\ucff4\ucff5\ucff6\ucff7\ucff8\ucff9\ucffa\ucffb\ucffc\ucffd\ucffe\ucfff\ud000\ud001\ud002\ud003\ud004\ud005\ud006\ud007\ud008\ud009\ud00a\ud00b\ud00c\ud00d\ud00e\ud00f\ud010\ud011\ud012\ud013\ud014\ud015\ud016\ud017\ud018\ud019\ud01a\ud01b\ud01c\ud01d\ud01e\ud01f\ud020\ud021\ud022\ud023\ud024\ud025\ud026\ud027\ud028\ud029\ud02a\ud02b\ud02c\ud02d\ud02e\ud02f\ud030\ud031\ud032\ud033\ud034\ud035\ud036\ud037\ud038\ud039\ud03a\ud03b\ud03c\ud03d\ud03e\ud03f\ud040\ud041\ud042\ud043\ud044\ud045\ud046\ud047\ud048\ud049\ud04a\ud04b\ud04c\ud04d\ud04e\ud04f\ud050\ud051\ud052\ud053\ud054\ud055\ud056\ud057\ud058\ud059\ud05a\ud05b\ud05c\ud05d\ud05e\ud05f\ud060\ud061\ud062\ud063\ud064\ud065\ud066\ud067\ud068\ud069\ud06a\ud06b\ud06c\ud06d\ud06e\ud06f\ud070\ud071\ud072\ud073\ud074\ud075\ud076\ud077\ud078\ud079\ud07a\ud07b\ud07c\ud07d\ud07e\ud07f\ud080\ud081\ud082\ud083\ud084\ud085\ud086\ud087\ud088\ud089\ud08a\ud08b\ud08c\ud08d\ud08e\ud08f\ud090\ud091\ud092\ud093\ud094\ud095\ud096\ud097\ud098\ud099\ud09a\ud09b\ud09c\ud09d\ud09e\ud09f\ud0a0\ud0a1\ud0a2\ud0a3\ud0a4\ud0a5\ud0a6\ud0a7\ud0a8\ud0a9\ud0aa\ud0ab\ud0ac\ud0ad\ud0ae\ud0af\ud0b0\ud0b1\ud0b2\ud0b3\ud0b4\ud0b5\ud0b6\ud0b7\ud0b8\ud0b9\ud0ba\ud0bb\ud0bc\ud0bd\ud0be\ud0bf\ud0c0\ud0c1\ud0c2\ud0c3\ud0c4\ud0c5\ud0c6\ud0c7\ud0c8\ud0c9\ud0ca\ud0cb\ud0cc\ud0cd\ud0ce\ud0cf\ud0d0\ud0d1\ud0d2\ud0d3\ud0d4\ud0d5\ud0d6\ud0d7\ud0d8\ud0d9\ud0da\ud0db\ud0dc\ud0dd\ud0de\ud0df\ud0e0\ud0e1\ud0e2\ud0e3\ud0e4\ud0e5\ud0e6\ud0e7\ud0e8\ud0e9\ud0ea\ud0eb\ud0ec\ud0ed\ud0ee\ud0ef\ud0f0\ud0f1\ud0f2\ud0f3\ud0f4\ud0f5\ud0f6\ud0f7\ud0f8\ud0f9\ud0fa\ud0fb\ud0fc\ud0fd\ud0fe\ud0ff\ud100\ud101\ud102\ud103\ud104\ud105\ud106\ud107\ud108\ud109\ud10a\ud10b\ud10c\ud10d\ud10e\ud10f\ud110\ud111\ud112\ud113\ud114\ud115\ud116\ud117\ud118\ud119\ud11a\ud11b\ud11c\ud11d\ud11e\ud11f\ud120\ud121\ud122\ud123\ud124\ud125\ud126\ud127\ud128\ud129\ud12a\ud12b\ud12c\ud12d\ud12e\ud12f\ud130\ud131\ud132\ud133\ud134\ud135\ud136\ud137\ud138\ud139\ud13a\ud13b\ud13c\ud13d\ud13e\ud13f\ud140\ud141\ud142\ud143\ud144\ud145\ud146\ud147\ud148\ud149\ud14a\ud14b\ud14c\ud14d\ud14e\ud14f\ud150\ud151\ud152\ud153\ud154\ud155\ud156\ud157\ud158\ud159\ud15a\ud15b\ud15c\ud15d\ud15e\ud15f\ud160\ud161\ud162\ud163\ud164\ud165\ud166\ud167\ud168\ud169\ud16a\ud16b\ud16c\ud16d\ud16e\ud16f\ud170\ud171\ud172\ud173\ud174\ud175\ud176\ud177\ud178\ud179\ud17a\ud17b\ud17c\ud17d\ud17e\ud17f\ud180\ud181\ud182\ud183\ud184\ud185\ud186\ud187\ud188\ud189\ud18a\ud18b\ud18c\ud18d\ud18e\ud18f\ud190\ud191\ud192\ud193\ud194\ud195\ud196\ud197\ud198\ud199\ud19a\ud19b\ud19c\ud19d\ud19e\ud19f\ud1a0\ud1a1\ud1a2\ud1a3\ud1a4\ud1a5\ud1a6\ud1a7\ud1a8\ud1a9\ud1aa\ud1ab\ud1ac\ud1ad\ud1ae\ud1af\ud1b0\ud1b1\ud1b2\ud1b3\ud1b4\ud1b5\ud1b6\ud1b7\ud1b8\ud1b9\ud1ba\ud1bb\ud1bc\ud1bd\ud1be\ud1bf\ud1c0\ud1c1\ud1c2\ud1c3\ud1c4\ud1c5\ud1c6\ud1c7\ud1c8\ud1c9\ud1ca\ud1cb\ud1cc\ud1cd\ud1ce\ud1cf\ud1d0\ud1d1\ud1d2\ud1d3\ud1d4\ud1d5\ud1d6\ud1d7\ud1d8\ud1d9\ud1da\ud1db\ud1dc\ud1dd\ud1de\ud1df\ud1e0\ud1e1\ud1e2\ud1e3\ud1e4\ud1e5\ud1e6\ud1e7\ud1e8\ud1e9\ud1ea\ud1eb\ud1ec\ud1ed\ud1ee\ud1ef\ud1f0\ud1f1\ud1f2\ud1f3\ud1f4\ud1f5\ud1f6\ud1f7\ud1f8\ud1f9\ud1fa\ud1fb\ud1fc\ud1fd\ud1fe\ud1ff\ud200\ud201\ud202\ud203\ud204\ud205\ud206\ud207\ud208\ud209\ud20a\ud20b\ud20c\ud20d\ud20e\ud20f\ud210\ud211\ud212\ud213\ud214\ud215\ud216\ud217\ud218\ud219\ud21a\ud21b\ud21c\ud21d\ud21e\ud21f\ud220\ud221\ud222\ud223\ud224\ud225\ud226\ud227\ud228\ud229\ud22a\ud22b\ud22c\ud22d\ud22e\ud22f\ud230\ud231\ud232\ud233\ud234\ud235\ud236\ud237\ud238\ud239\ud23a\ud23b\ud23c\ud23d\ud23e\ud23f\ud240\ud241\ud242\ud243\ud244\ud245\ud246\ud247\ud248\ud249\ud24a\ud24b\ud24c\ud24d\ud24e\ud24f\ud250\ud251\ud252\ud253\ud254\ud255\ud256\ud257\ud258\ud259\ud25a\ud25b\ud25c\ud25d\ud25e\ud25f\ud260\ud261\ud262\ud263\ud264\ud265\ud266\ud267\ud268\ud269\ud26a\ud26b\ud26c\ud26d\ud26e\ud26f\ud270\ud271\ud272\ud273\ud274\ud275\ud276\ud277\ud278\ud279\ud27a\ud27b\ud27c\ud27d\ud27e\ud27f\ud280\ud281\ud282\ud283\ud284\ud285\ud286\ud287\ud288\ud289\ud28a\ud28b\ud28c\ud28d\ud28e\ud28f\ud290\ud291\ud292\ud293\ud294\ud295\ud296\ud297\ud298\ud299\ud29a\ud29b\ud29c\ud29d\ud29e\ud29f\ud2a0\ud2a1\ud2a2\ud2a3\ud2a4\ud2a5\ud2a6\ud2a7\ud2a8\ud2a9\ud2aa\ud2ab\ud2ac\ud2ad\ud2ae\ud2af\ud2b0\ud2b1\ud2b2\ud2b3\ud2b4\ud2b5\ud2b6\ud2b7\ud2b8\ud2b9\ud2ba\ud2bb\ud2bc\ud2bd\ud2be\ud2bf\ud2c0\ud2c1\ud2c2\ud2c3\ud2c4\ud2c5\ud2c6\ud2c7\ud2c8\ud2c9\ud2ca\ud2cb\ud2cc\ud2cd\ud2ce\ud2cf\ud2d0\ud2d1\ud2d2\ud2d3\ud2d4\ud2d5\ud2d6\ud2d7\ud2d8\ud2d9\ud2da\ud2db\ud2dc\ud2dd\ud2de\ud2df\ud2e0\ud2e1\ud2e2\ud2e3\ud2e4\ud2e5\ud2e6\ud2e7\ud2e8\ud2e9\ud2ea\ud2eb\ud2ec\ud2ed\ud2ee\ud2ef\ud2f0\ud2f1\ud2f2\ud2f3\ud2f4\ud2f5\ud2f6\ud2f7\ud2f8\ud2f9\ud2fa\ud2fb\ud2fc\ud2fd\ud2fe\ud2ff\ud300\ud301\ud302\ud303\ud304\ud305\ud306\ud307\ud308\ud309\ud30a\ud30b\ud30c\ud30d\ud30e\ud30f\ud310\ud311\ud312\ud313\ud314\ud315\ud316\ud317\ud318\ud319\ud31a\ud31b\ud31c\ud31d\ud31e\ud31f\ud320\ud321\ud322\ud323\ud324\ud325\ud326\ud327\ud328\ud329\ud32a\ud32b\ud32c\ud32d\ud32e\ud32f\ud330\ud331\ud332\ud333\ud334\ud335\ud336\ud337\ud338\ud339\ud33a\ud33b\ud33c\ud33d\ud33e\ud33f\ud340\ud341\ud342\ud343\ud344\ud345\ud346\ud347\ud348\ud349\ud34a\ud34b\ud34c\ud34d\ud34e\ud34f\ud350\ud351\ud352\ud353\ud354\ud355\ud356\ud357\ud358\ud359\ud35a\ud35b\ud35c\ud35d\ud35e\ud35f\ud360\ud361\ud362\ud363\ud364\ud365\ud366\ud367\ud368\ud369\ud36a\ud36b\ud36c\ud36d\ud36e\ud36f\ud370\ud371\ud372\ud373\ud374\ud375\ud376\ud377\ud378\ud379\ud37a\ud37b\ud37c\ud37d\ud37e\ud37f\ud380\ud381\ud382\ud383\ud384\ud385\ud386\ud387\ud388\ud389\ud38a\ud38b\ud38c\ud38d\ud38e\ud38f\ud390\ud391\ud392\ud393\ud394\ud395\ud396\ud397\ud398\ud399\ud39a\ud39b\ud39c\ud39d\ud39e\ud39f\ud3a0\ud3a1\ud3a2\ud3a3\ud3a4\ud3a5\ud3a6\ud3a7\ud3a8\ud3a9\ud3aa\ud3ab\ud3ac\ud3ad\ud3ae\ud3af\ud3b0\ud3b1\ud3b2\ud3b3\ud3b4\ud3b5\ud3b6\ud3b7\ud3b8\ud3b9\ud3ba\ud3bb\ud3bc\ud3bd\ud3be\ud3bf\ud3c0\ud3c1\ud3c2\ud3c3\ud3c4\ud3c5\ud3c6\ud3c7\ud3c8\ud3c9\ud3ca\ud3cb\ud3cc\ud3cd\ud3ce\ud3cf\ud3d0\ud3d1\ud3d2\ud3d3\ud3d4\ud3d5\ud3d6\ud3d7\ud3d8\ud3d9\ud3da\ud3db\ud3dc\ud3dd\ud3de\ud3df\ud3e0\ud3e1\ud3e2\ud3e3\ud3e4\ud3e5\ud3e6\ud3e7\ud3e8\ud3e9\ud3ea\ud3eb\ud3ec\ud3ed\ud3ee\ud3ef\ud3f0\ud3f1\ud3f2\ud3f3\ud3f4\ud3f5\ud3f6\ud3f7\ud3f8\ud3f9\ud3fa\ud3fb\ud3fc\ud3fd\ud3fe\ud3ff\ud400\ud401\ud402\ud403\ud404\ud405\ud406\ud407\ud408\ud409\ud40a\ud40b\ud40c\ud40d\ud40e\ud40f\ud410\ud411\ud412\ud413\ud414\ud415\ud416\ud417\ud418\ud419\ud41a\ud41b\ud41c\ud41d\ud41e\ud41f\ud420\ud421\ud422\ud423\ud424\ud425\ud426\ud427\ud428\ud429\ud42a\ud42b\ud42c\ud42d\ud42e\ud42f\ud430\ud431\ud432\ud433\ud434\ud435\ud436\ud437\ud438\ud439\ud43a\ud43b\ud43c\ud43d\ud43e\ud43f\ud440\ud441\ud442\ud443\ud444\ud445\ud446\ud447\ud448\ud449\ud44a\ud44b\ud44c\ud44d\ud44e\ud44f\ud450\ud451\ud452\ud453\ud454\ud455\ud456\ud457\ud458\ud459\ud45a\ud45b\ud45c\ud45d\ud45e\ud45f\ud460\ud461\ud462\ud463\ud464\ud465\ud466\ud467\ud468\ud469\ud46a\ud46b\ud46c\ud46d\ud46e\ud46f\ud470\ud471\ud472\ud473\ud474\ud475\ud476\ud477\ud478\ud479\ud47a\ud47b\ud47c\ud47d\ud47e\ud47f\ud480\ud481\ud482\ud483\ud484\ud485\ud486\ud487\ud488\ud489\ud48a\ud48b\ud48c\ud48d\ud48e\ud48f\ud490\ud491\ud492\ud493\ud494\ud495\ud496\ud497\ud498\ud499\ud49a\ud49b\ud49c\ud49d\ud49e\ud49f\ud4a0\ud4a1\ud4a2\ud4a3\ud4a4\ud4a5\ud4a6\ud4a7\ud4a8\ud4a9\ud4aa\ud4ab\ud4ac\ud4ad\ud4ae\ud4af\ud4b0\ud4b1\ud4b2\ud4b3\ud4b4\ud4b5\ud4b6\ud4b7\ud4b8\ud4b9\ud4ba\ud4bb\ud4bc\ud4bd\ud4be\ud4bf\ud4c0\ud4c1\ud4c2\ud4c3\ud4c4\ud4c5\ud4c6\ud4c7\ud4c8\ud4c9\ud4ca\ud4cb\ud4cc\ud4cd\ud4ce\ud4cf\ud4d0\ud4d1\ud4d2\ud4d3\ud4d4\ud4d5\ud4d6\ud4d7\ud4d8\ud4d9\ud4da\ud4db\ud4dc\ud4dd\ud4de\ud4df\ud4e0\ud4e1\ud4e2\ud4e3\ud4e4\ud4e5\ud4e6\ud4e7\ud4e8\ud4e9\ud4ea\ud4eb\ud4ec\ud4ed\ud4ee\ud4ef\ud4f0\ud4f1\ud4f2\ud4f3\ud4f4\ud4f5\ud4f6\ud4f7\ud4f8\ud4f9\ud4fa\ud4fb\ud4fc\ud4fd\ud4fe\ud4ff\ud500\ud501\ud502\ud503\ud504\ud505\ud506\ud507\ud508\ud509\ud50a\ud50b\ud50c\ud50d\ud50e\ud50f\ud510\ud511\ud512\ud513\ud514\ud515\ud516\ud517\ud518\ud519\ud51a\ud51b\ud51c\ud51d\ud51e\ud51f\ud520\ud521\ud522\ud523\ud524\ud525\ud526\ud527\ud528\ud529\ud52a\ud52b\ud52c\ud52d\ud52e\ud52f\ud530\ud531\ud532\ud533\ud534\ud535\ud536\ud537\ud538\ud539\ud53a\ud53b\ud53c\ud53d\ud53e\ud53f\ud540\ud541\ud542\ud543\ud544\ud545\ud546\ud547\ud548\ud549\ud54a\ud54b\ud54c\ud54d\ud54e\ud54f\ud550\ud551\ud552\ud553\ud554\ud555\ud556\ud557\ud558\ud559\ud55a\ud55b\ud55c\ud55d\ud55e\ud55f\ud560\ud561\ud562\ud563\ud564\ud565\ud566\ud567\ud568\ud569\ud56a\ud56b\ud56c\ud56d\ud56e\ud56f\ud570\ud571\ud572\ud573\ud574\ud575\ud576\ud577\ud578\ud579\ud57a\ud57b\ud57c\ud57d\ud57e\ud57f\ud580\ud581\ud582\ud583\ud584\ud585\ud586\ud587\ud588\ud589\ud58a\ud58b\ud58c\ud58d\ud58e\ud58f\ud590\ud591\ud592\ud593\ud594\ud595\ud596\ud597\ud598\ud599\ud59a\ud59b\ud59c\ud59d\ud59e\ud59f\ud5a0\ud5a1\ud5a2\ud5a3\ud5a4\ud5a5\ud5a6\ud5a7\ud5a8\ud5a9\ud5aa\ud5ab\ud5ac\ud5ad\ud5ae\ud5af\ud5b0\ud5b1\ud5b2\ud5b3\ud5b4\ud5b5\ud5b6\ud5b7\ud5b8\ud5b9\ud5ba\ud5bb\ud5bc\ud5bd\ud5be\ud5bf\ud5c0\ud5c1\ud5c2\ud5c3\ud5c4\ud5c5\ud5c6\ud5c7\ud5c8\ud5c9\ud5ca\ud5cb\ud5cc\ud5cd\ud5ce\ud5cf\ud5d0\ud5d1\ud5d2\ud5d3\ud5d4\ud5d5\ud5d6\ud5d7\ud5d8\ud5d9\ud5da\ud5db\ud5dc\ud5dd\ud5de\ud5df\ud5e0\ud5e1\ud5e2\ud5e3\ud5e4\ud5e5\ud5e6\ud5e7\ud5e8\ud5e9\ud5ea\ud5eb\ud5ec\ud5ed\ud5ee\ud5ef\ud5f0\ud5f1\ud5f2\ud5f3\ud5f4\ud5f5\ud5f6\ud5f7\ud5f8\ud5f9\ud5fa\ud5fb\ud5fc\ud5fd\ud5fe\ud5ff\ud600\ud601\ud602\ud603\ud604\ud605\ud606\ud607\ud608\ud609\ud60a\ud60b\ud60c\ud60d\ud60e\ud60f\ud610\ud611\ud612\ud613\ud614\ud615\ud616\ud617\ud618\ud619\ud61a\ud61b\ud61c\ud61d\ud61e\ud61f\ud620\ud621\ud622\ud623\ud624\ud625\ud626\ud627\ud628\ud629\ud62a\ud62b\ud62c\ud62d\ud62e\ud62f\ud630\ud631\ud632\ud633\ud634\ud635\ud636\ud637\ud638\ud639\ud63a\ud63b\ud63c\ud63d\ud63e\ud63f\ud640\ud641\ud642\ud643\ud644\ud645\ud646\ud647\ud648\ud649\ud64a\ud64b\ud64c\ud64d\ud64e\ud64f\ud650\ud651\ud652\ud653\ud654\ud655\ud656\ud657\ud658\ud659\ud65a\ud65b\ud65c\ud65d\ud65e\ud65f\ud660\ud661\ud662\ud663\ud664\ud665\ud666\ud667\ud668\ud669\ud66a\ud66b\ud66c\ud66d\ud66e\ud66f\ud670\ud671\ud672\ud673\ud674\ud675\ud676\ud677\ud678\ud679\ud67a\ud67b\ud67c\ud67d\ud67e\ud67f\ud680\ud681\ud682\ud683\ud684\ud685\ud686\ud687\ud688\ud689\ud68a\ud68b\ud68c\ud68d\ud68e\ud68f\ud690\ud691\ud692\ud693\ud694\ud695\ud696\ud697\ud698\ud699\ud69a\ud69b\ud69c\ud69d\ud69e\ud69f\ud6a0\ud6a1\ud6a2\ud6a3\ud6a4\ud6a5\ud6a6\ud6a7\ud6a8\ud6a9\ud6aa\ud6ab\ud6ac\ud6ad\ud6ae\ud6af\ud6b0\ud6b1\ud6b2\ud6b3\ud6b4\ud6b5\ud6b6\ud6b7\ud6b8\ud6b9\ud6ba\ud6bb\ud6bc\ud6bd\ud6be\ud6bf\ud6c0\ud6c1\ud6c2\ud6c3\ud6c4\ud6c5\ud6c6\ud6c7\ud6c8\ud6c9\ud6ca\ud6cb\ud6cc\ud6cd\ud6ce\ud6cf\ud6d0\ud6d1\ud6d2\ud6d3\ud6d4\ud6d5\ud6d6\ud6d7\ud6d8\ud6d9\ud6da\ud6db\ud6dc\ud6dd\ud6de\ud6df\ud6e0\ud6e1\ud6e2\ud6e3\ud6e4\ud6e5\ud6e6\ud6e7\ud6e8\ud6e9\ud6ea\ud6eb\ud6ec\ud6ed\ud6ee\ud6ef\ud6f0\ud6f1\ud6f2\ud6f3\ud6f4\ud6f5\ud6f6\ud6f7\ud6f8\ud6f9\ud6fa\ud6fb\ud6fc\ud6fd\ud6fe\ud6ff\ud700\ud701\ud702\ud703\ud704\ud705\ud706\ud707\ud708\ud709\ud70a\ud70b\ud70c\ud70d\ud70e\ud70f\ud710\ud711\ud712\ud713\ud714\ud715\ud716\ud717\ud718\ud719\ud71a\ud71b\ud71c\ud71d\ud71e\ud71f\ud720\ud721\ud722\ud723\ud724\ud725\ud726\ud727\ud728\ud729\ud72a\ud72b\ud72c\ud72d\ud72e\ud72f\ud730\ud731\ud732\ud733\ud734\ud735\ud736\ud737\ud738\ud739\ud73a\ud73b\ud73c\ud73d\ud73e\ud73f\ud740\ud741\ud742\ud743\ud744\ud745\ud746\ud747\ud748\ud749\ud74a\ud74b\ud74c\ud74d\ud74e\ud74f\ud750\ud751\ud752\ud753\ud754\ud755\ud756\ud757\ud758\ud759\ud75a\ud75b\ud75c\ud75d\ud75e\ud75f\ud760\ud761\ud762\ud763\ud764\ud765\ud766\ud767\ud768\ud769\ud76a\ud76b\ud76c\ud76d\ud76e\ud76f\ud770\ud771\ud772\ud773\ud774\ud775\ud776\ud777\ud778\ud779\ud77a\ud77b\ud77c\ud77d\ud77e\ud77f\ud780\ud781\ud782\ud783\ud784\ud785\ud786\ud787\ud788\ud789\ud78a\ud78b\ud78c\ud78d\ud78e\ud78f\ud790\ud791\ud792\ud793\ud794\ud795\ud796\ud797\ud798\ud799\ud79a\ud79b\ud79c\ud79d\ud79e\ud79f\ud7a0\ud7a1\ud7a2\ud7a3\uf900\uf901\uf902\uf903\uf904\uf905\uf906\uf907\uf908\uf909\uf90a\uf90b\uf90c\uf90d\uf90e\uf90f\uf910\uf911\uf912\uf913\uf914\uf915\uf916\uf917\uf918\uf919\uf91a\uf91b\uf91c\uf91d\uf91e\uf91f\uf920\uf921\uf922\uf923\uf924\uf925\uf926\uf927\uf928\uf929\uf92a\uf92b\uf92c\uf92d\uf92e\uf92f\uf930\uf931\uf932\uf933\uf934\uf935\uf936\uf937\uf938\uf939\uf93a\uf93b\uf93c\uf93d\uf93e\uf93f\uf940\uf941\uf942\uf943\uf944\uf945\uf946\uf947\uf948\uf949\uf94a\uf94b\uf94c\uf94d\uf94e\uf94f\uf950\uf951\uf952\uf953\uf954\uf955\uf956\uf957\uf958\uf959\uf95a\uf95b\uf95c\uf95d\uf95e\uf95f\uf960\uf961\uf962\uf963\uf964\uf965\uf966\uf967\uf968\uf969\uf96a\uf96b\uf96c\uf96d\uf96e\uf96f\uf970\uf971\uf972\uf973\uf974\uf975\uf976\uf977\uf978\uf979\uf97a\uf97b\uf97c\uf97d\uf97e\uf97f\uf980\uf981\uf982\uf983\uf984\uf985\uf986\uf987\uf988\uf989\uf98a\uf98b\uf98c\uf98d\uf98e\uf98f\uf990\uf991\uf992\uf993\uf994\uf995\uf996\uf997\uf998\uf999\uf99a\uf99b\uf99c\uf99d\uf99e\uf99f\uf9a0\uf9a1\uf9a2\uf9a3\uf9a4\uf9a5\uf9a6\uf9a7\uf9a8\uf9a9\uf9aa\uf9ab\uf9ac\uf9ad\uf9ae\uf9af\uf9b0\uf9b1\uf9b2\uf9b3\uf9b4\uf9b5\uf9b6\uf9b7\uf9b8\uf9b9\uf9ba\uf9bb\uf9bc\uf9bd\uf9be\uf9bf\uf9c0\uf9c1\uf9c2\uf9c3\uf9c4\uf9c5\uf9c6\uf9c7\uf9c8\uf9c9\uf9ca\uf9cb\uf9cc\uf9cd\uf9ce\uf9cf\uf9d0\uf9d1\uf9d2\uf9d3\uf9d4\uf9d5\uf9d6\uf9d7\uf9d8\uf9d9\uf9da\uf9db\uf9dc\uf9dd\uf9de\uf9df\uf9e0\uf9e1\uf9e2\uf9e3\uf9e4\uf9e5\uf9e6\uf9e7\uf9e8\uf9e9\uf9ea\uf9eb\uf9ec\uf9ed\uf9ee\uf9ef\uf9f0\uf9f1\uf9f2\uf9f3\uf9f4\uf9f5\uf9f6\uf9f7\uf9f8\uf9f9\uf9fa\uf9fb\uf9fc\uf9fd\uf9fe\uf9ff\ufa00\ufa01\ufa02\ufa03\ufa04\ufa05\ufa06\ufa07\ufa08\ufa09\ufa0a\ufa0b\ufa0c\ufa0d\ufa0e\ufa0f\ufa10\ufa11\ufa12\ufa13\ufa14\ufa15\ufa16\ufa17\ufa18\ufa19\ufa1a\ufa1b\ufa1c\ufa1d\ufa1e\ufa1f\ufa20\ufa21\ufa22\ufa23\ufa24\ufa25\ufa26\ufa27\ufa28\ufa29\ufa2a\ufa2b\ufa2c\ufa2d\ufa30\ufa31\ufa32\ufa33\ufa34\ufa35\ufa36\ufa37\ufa38\ufa39\ufa3a\ufa3b\ufa3c\ufa3d\ufa3e\ufa3f\ufa40\ufa41\ufa42\ufa43\ufa44\ufa45\ufa46\ufa47\ufa48\ufa49\ufa4a\ufa4b\ufa4c\ufa4d\ufa4e\ufa4f\ufa50\ufa51\ufa52\ufa53\ufa54\ufa55\ufa56\ufa57\ufa58\ufa59\ufa5a\ufa5b\ufa5c\ufa5d\ufa5e\ufa5f\ufa60\ufa61\ufa62\ufa63\ufa64\ufa65\ufa66\ufa67\ufa68\ufa69\ufa6a\ufa70\ufa71\ufa72\ufa73\ufa74\ufa75\ufa76\ufa77\ufa78\ufa79\ufa7a\ufa7b\ufa7c\ufa7d\ufa7e\ufa7f\ufa80\ufa81\ufa82\ufa83\ufa84\ufa85\ufa86\ufa87\ufa88\ufa89\ufa8a\ufa8b\ufa8c\ufa8d\ufa8e\ufa8f\ufa90\ufa91\ufa92\ufa93\ufa94\ufa95\ufa96\ufa97\ufa98\ufa99\ufa9a\ufa9b\ufa9c\ufa9d\ufa9e\ufa9f\ufaa0\ufaa1\ufaa2\ufaa3\ufaa4\ufaa5\ufaa6\ufaa7\ufaa8\ufaa9\ufaaa\ufaab\ufaac\ufaad\ufaae\ufaaf\ufab0\ufab1\ufab2\ufab3\ufab4\ufab5\ufab6\ufab7\ufab8\ufab9\ufaba\ufabb\ufabc\ufabd\ufabe\ufabf\ufac0\ufac1\ufac2\ufac3\ufac4\ufac5\ufac6\ufac7\ufac8\ufac9\ufaca\ufacb\ufacc\ufacd\uface\ufacf\ufad0\ufad1\ufad2\ufad3\ufad4\ufad5\ufad6\ufad7\ufad8\ufad9\ufb1d\ufb1f\ufb20\ufb21\ufb22\ufb23\ufb24\ufb25\ufb26\ufb27\ufb28\ufb2a\ufb2b\ufb2c\ufb2d\ufb2e\ufb2f\ufb30\ufb31\ufb32\ufb33\ufb34\ufb35\ufb36\ufb38\ufb39\ufb3a\ufb3b\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46\ufb47\ufb48\ufb49\ufb4a\ufb4b\ufb4c\ufb4d\ufb4e\ufb4f\ufb50\ufb51\ufb52\ufb53\ufb54\ufb55\ufb56\ufb57\ufb58\ufb59\ufb5a\ufb5b\ufb5c\ufb5d\ufb5e\ufb5f\ufb60\ufb61\ufb62\ufb63\ufb64\ufb65\ufb66\ufb67\ufb68\ufb69\ufb6a\ufb6b\ufb6c\ufb6d\ufb6e\ufb6f\ufb70\ufb71\ufb72\ufb73\ufb74\ufb75\ufb76\ufb77\ufb78\ufb79\ufb7a\ufb7b\ufb7c\ufb7d\ufb7e\ufb7f\ufb80\ufb81\ufb82\ufb83\ufb84\ufb85\ufb86\ufb87\ufb88\ufb89\ufb8a\ufb8b\ufb8c\ufb8d\ufb8e\ufb8f\ufb90\ufb91\ufb92\ufb93\ufb94\ufb95\ufb96\ufb97\ufb98\ufb99\ufb9a\ufb9b\ufb9c\ufb9d\ufb9e\ufb9f\ufba0\ufba1\ufba2\ufba3\ufba4\ufba5\ufba6\ufba7\ufba8\ufba9\ufbaa\ufbab\ufbac\ufbad\ufbae\ufbaf\ufbb0\ufbb1\ufbd3\ufbd4\ufbd5\ufbd6\ufbd7\ufbd8\ufbd9\ufbda\ufbdb\ufbdc\ufbdd\ufbde\ufbdf\ufbe0\ufbe1\ufbe2\ufbe3\ufbe4\ufbe5\ufbe6\ufbe7\ufbe8\ufbe9\ufbea\ufbeb\ufbec\ufbed\ufbee\ufbef\ufbf0\ufbf1\ufbf2\ufbf3\ufbf4\ufbf5\ufbf6\ufbf7\ufbf8\ufbf9\ufbfa\ufbfb\ufbfc\ufbfd\ufbfe\ufbff\ufc00\ufc01\ufc02\ufc03\ufc04\ufc05\ufc06\ufc07\ufc08\ufc09\ufc0a\ufc0b\ufc0c\ufc0d\ufc0e\ufc0f\ufc10\ufc11\ufc12\ufc13\ufc14\ufc15\ufc16\ufc17\ufc18\ufc19\ufc1a\ufc1b\ufc1c\ufc1d\ufc1e\ufc1f\ufc20\ufc21\ufc22\ufc23\ufc24\ufc25\ufc26\ufc27\ufc28\ufc29\ufc2a\ufc2b\ufc2c\ufc2d\ufc2e\ufc2f\ufc30\ufc31\ufc32\ufc33\ufc34\ufc35\ufc36\ufc37\ufc38\ufc39\ufc3a\ufc3b\ufc3c\ufc3d\ufc3e\ufc3f\ufc40\ufc41\ufc42\ufc43\ufc44\ufc45\ufc46\ufc47\ufc48\ufc49\ufc4a\ufc4b\ufc4c\ufc4d\ufc4e\ufc4f\ufc50\ufc51\ufc52\ufc53\ufc54\ufc55\ufc56\ufc57\ufc58\ufc59\ufc5a\ufc5b\ufc5c\ufc5d\ufc5e\ufc5f\ufc60\ufc61\ufc62\ufc63\ufc64\ufc65\ufc66\ufc67\ufc68\ufc69\ufc6a\ufc6b\ufc6c\ufc6d\ufc6e\ufc6f\ufc70\ufc71\ufc72\ufc73\ufc74\ufc75\ufc76\ufc77\ufc78\ufc79\ufc7a\ufc7b\ufc7c\ufc7d\ufc7e\ufc7f\ufc80\ufc81\ufc82\ufc83\ufc84\ufc85\ufc86\ufc87\ufc88\ufc89\ufc8a\ufc8b\ufc8c\ufc8d\ufc8e\ufc8f\ufc90\ufc91\ufc92\ufc93\ufc94\ufc95\ufc96\ufc97\ufc98\ufc99\ufc9a\ufc9b\ufc9c\ufc9d\ufc9e\ufc9f\ufca0\ufca1\ufca2\ufca3\ufca4\ufca5\ufca6\ufca7\ufca8\ufca9\ufcaa\ufcab\ufcac\ufcad\ufcae\ufcaf\ufcb0\ufcb1\ufcb2\ufcb3\ufcb4\ufcb5\ufcb6\ufcb7\ufcb8\ufcb9\ufcba\ufcbb\ufcbc\ufcbd\ufcbe\ufcbf\ufcc0\ufcc1\ufcc2\ufcc3\ufcc4\ufcc5\ufcc6\ufcc7\ufcc8\ufcc9\ufcca\ufccb\ufccc\ufccd\ufcce\ufccf\ufcd0\ufcd1\ufcd2\ufcd3\ufcd4\ufcd5\ufcd6\ufcd7\ufcd8\ufcd9\ufcda\ufcdb\ufcdc\ufcdd\ufcde\ufcdf\ufce0\ufce1\ufce2\ufce3\ufce4\ufce5\ufce6\ufce7\ufce8\ufce9\ufcea\ufceb\ufcec\ufced\ufcee\ufcef\ufcf0\ufcf1\ufcf2\ufcf3\ufcf4\ufcf5\ufcf6\ufcf7\ufcf8\ufcf9\ufcfa\ufcfb\ufcfc\ufcfd\ufcfe\ufcff\ufd00\ufd01\ufd02\ufd03\ufd04\ufd05\ufd06\ufd07\ufd08\ufd09\ufd0a\ufd0b\ufd0c\ufd0d\ufd0e\ufd0f\ufd10\ufd11\ufd12\ufd13\ufd14\ufd15\ufd16\ufd17\ufd18\ufd19\ufd1a\ufd1b\ufd1c\ufd1d\ufd1e\ufd1f\ufd20\ufd21\ufd22\ufd23\ufd24\ufd25\ufd26\ufd27\ufd28\ufd29\ufd2a\ufd2b\ufd2c\ufd2d\ufd2e\ufd2f\ufd30\ufd31\ufd32\ufd33\ufd34\ufd35\ufd36\ufd37\ufd38\ufd39\ufd3a\ufd3b\ufd3c\ufd3d\ufd50\ufd51\ufd52\ufd53\ufd54\ufd55\ufd56\ufd57\ufd58\ufd59\ufd5a\ufd5b\ufd5c\ufd5d\ufd5e\ufd5f\ufd60\ufd61\ufd62\ufd63\ufd64\ufd65\ufd66\ufd67\ufd68\ufd69\ufd6a\ufd6b\ufd6c\ufd6d\ufd6e\ufd6f\ufd70\ufd71\ufd72\ufd73\ufd74\ufd75\ufd76\ufd77\ufd78\ufd79\ufd7a\ufd7b\ufd7c\ufd7d\ufd7e\ufd7f\ufd80\ufd81\ufd82\ufd83\ufd84\ufd85\ufd86\ufd87\ufd88\ufd89\ufd8a\ufd8b\ufd8c\ufd8d\ufd8e\ufd8f\ufd92\ufd93\ufd94\ufd95\ufd96\ufd97\ufd98\ufd99\ufd9a\ufd9b\ufd9c\ufd9d\ufd9e\ufd9f\ufda0\ufda1\ufda2\ufda3\ufda4\ufda5\ufda6\ufda7\ufda8\ufda9\ufdaa\ufdab\ufdac\ufdad\ufdae\ufdaf\ufdb0\ufdb1\ufdb2\ufdb3\ufdb4\ufdb5\ufdb6\ufdb7\ufdb8\ufdb9\ufdba\ufdbb\ufdbc\ufdbd\ufdbe\ufdbf\ufdc0\ufdc1\ufdc2\ufdc3\ufdc4\ufdc5\ufdc6\ufdc7\ufdf0\ufdf1\ufdf2\ufdf3\ufdf4\ufdf5\ufdf6\ufdf7\ufdf8\ufdf9\ufdfa\ufdfb\ufe70\ufe71\ufe72\ufe73\ufe74\ufe76\ufe77\ufe78\ufe79\ufe7a\ufe7b\ufe7c\ufe7d\ufe7e\ufe7f\ufe80\ufe81\ufe82\ufe83\ufe84\ufe85\ufe86\ufe87\ufe88\ufe89\ufe8a\ufe8b\ufe8c\ufe8d\ufe8e\ufe8f\ufe90\ufe91\ufe92\ufe93\ufe94\ufe95\ufe96\ufe97\ufe98\ufe99\ufe9a\ufe9b\ufe9c\ufe9d\ufe9e\ufe9f\ufea0\ufea1\ufea2\ufea3\ufea4\ufea5\ufea6\ufea7\ufea8\ufea9\ufeaa\ufeab\ufeac\ufead\ufeae\ufeaf\ufeb0\ufeb1\ufeb2\ufeb3\ufeb4\ufeb5\ufeb6\ufeb7\ufeb8\ufeb9\ufeba\ufebb\ufebc\ufebd\ufebe\ufebf\ufec0\ufec1\ufec2\ufec3\ufec4\ufec5\ufec6\ufec7\ufec8\ufec9\ufeca\ufecb\ufecc\ufecd\ufece\ufecf\ufed0\ufed1\ufed2\ufed3\ufed4\ufed5\ufed6\ufed7\ufed8\ufed9\ufeda\ufedb\ufedc\ufedd\ufede\ufedf\ufee0\ufee1\ufee2\ufee3\ufee4\ufee5\ufee6\ufee7\ufee8\ufee9\ufeea\ufeeb\ufeec\ufeed\ufeee\ufeef\ufef0\ufef1\ufef2\ufef3\ufef4\ufef5\ufef6\ufef7\ufef8\ufef9\ufefa\ufefb\ufefc\uff66\uff67\uff68\uff69\uff6a\uff6b\uff6c\uff6d\uff6e\uff6f\uff71\uff72\uff73\uff74\uff75\uff76\uff77\uff78\uff79\uff7a\uff7b\uff7c\uff7d\uff7e\uff7f\uff80\uff81\uff82\uff83\uff84\uff85\uff86\uff87\uff88\uff89\uff8a\uff8b\uff8c\uff8d\uff8e\uff8f\uff90\uff91\uff92\uff93\uff94\uff95\uff96\uff97\uff98\uff99\uff9a\uff9b\uff9c\uff9d\uffa0\uffa1\uffa2\uffa3\uffa4\uffa5\uffa6\uffa7\uffa8\uffa9\uffaa\uffab\uffac\uffad\uffae\uffaf\uffb0\uffb1\uffb2\uffb3\uffb4\uffb5\uffb6\uffb7\uffb8\uffb9\uffba\uffbb\uffbc\uffbd\uffbe\uffc2\uffc3\uffc4\uffc5\uffc6\uffc7\uffca\uffcb\uffcc\uffcd\uffce\uffcf\uffd2\uffd3\uffd4\uffd5\uffd6\uffd7\uffda\uffdb\uffdc'
    
    Lt = u'\u01c5\u01c8\u01cb\u01f2\u1f88\u1f89\u1f8a\u1f8b\u1f8c\u1f8d\u1f8e\u1f8f\u1f98\u1f99\u1f9a\u1f9b\u1f9c\u1f9d\u1f9e\u1f9f\u1fa8\u1fa9\u1faa\u1fab\u1fac\u1fad\u1fae\u1faf\u1fbc\u1fcc\u1ffc'
    
    Lu = u'ABCDEFGHIJKLMNOPQRSTUVWXYZ\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd8\xd9\xda\xdb\xdc\xdd\xde\u0100\u0102\u0104\u0106\u0108\u010a\u010c\u010e\u0110\u0112\u0114\u0116\u0118\u011a\u011c\u011e\u0120\u0122\u0124\u0126\u0128\u012a\u012c\u012e\u0130\u0132\u0134\u0136\u0139\u013b\u013d\u013f\u0141\u0143\u0145\u0147\u014a\u014c\u014e\u0150\u0152\u0154\u0156\u0158\u015a\u015c\u015e\u0160\u0162\u0164\u0166\u0168\u016a\u016c\u016e\u0170\u0172\u0174\u0176\u0178\u0179\u017b\u017d\u0181\u0182\u0184\u0186\u0187\u0189\u018a\u018b\u018e\u018f\u0190\u0191\u0193\u0194\u0196\u0197\u0198\u019c\u019d\u019f\u01a0\u01a2\u01a4\u01a6\u01a7\u01a9\u01ac\u01ae\u01af\u01b1\u01b2\u01b3\u01b5\u01b7\u01b8\u01bc\u01c4\u01c7\u01ca\u01cd\u01cf\u01d1\u01d3\u01d5\u01d7\u01d9\u01db\u01de\u01e0\u01e2\u01e4\u01e6\u01e8\u01ea\u01ec\u01ee\u01f1\u01f4\u01f6\u01f7\u01f8\u01fa\u01fc\u01fe\u0200\u0202\u0204\u0206\u0208\u020a\u020c\u020e\u0210\u0212\u0214\u0216\u0218\u021a\u021c\u021e\u0220\u0222\u0224\u0226\u0228\u022a\u022c\u022e\u0230\u0232\u023a\u023b\u023d\u023e\u0241\u0386\u0388\u0389\u038a\u038c\u038e\u038f\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039a\u039b\u039c\u039d\u039e\u039f\u03a0\u03a1\u03a3\u03a4\u03a5\u03a6\u03a7\u03a8\u03a9\u03aa\u03ab\u03d2\u03d3\u03d4\u03d8\u03da\u03dc\u03de\u03e0\u03e2\u03e4\u03e6\u03e8\u03ea\u03ec\u03ee\u03f4\u03f7\u03f9\u03fa\u03fd\u03fe\u03ff\u0400\u0401\u0402\u0403\u0404\u0405\u0406\u0407\u0408\u0409\u040a\u040b\u040c\u040d\u040e\u040f\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041a\u041b\u041c\u041d\u041e\u041f\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042a\u042b\u042c\u042d\u042e\u042f\u0460\u0462\u0464\u0466\u0468\u046a\u046c\u046e\u0470\u0472\u0474\u0476\u0478\u047a\u047c\u047e\u0480\u048a\u048c\u048e\u0490\u0492\u0494\u0496\u0498\u049a\u049c\u049e\u04a0\u04a2\u04a4\u04a6\u04a8\u04aa\u04ac\u04ae\u04b0\u04b2\u04b4\u04b6\u04b8\u04ba\u04bc\u04be\u04c0\u04c1\u04c3\u04c5\u04c7\u04c9\u04cb\u04cd\u04d0\u04d2\u04d4\u04d6\u04d8\u04da\u04dc\u04de\u04e0\u04e2\u04e4\u04e6\u04e8\u04ea\u04ec\u04ee\u04f0\u04f2\u04f4\u04f6\u04f8\u0500\u0502\u0504\u0506\u0508\u050a\u050c\u050e\u0531\u0532\u0533\u0534\u0535\u0536\u0537\u0538\u0539\u053a\u053b\u053c\u053d\u053e\u053f\u0540\u0541\u0542\u0543\u0544\u0545\u0546\u0547\u0548\u0549\u054a\u054b\u054c\u054d\u054e\u054f\u0550\u0551\u0552\u0553\u0554\u0555\u0556\u10a0\u10a1\u10a2\u10a3\u10a4\u10a5\u10a6\u10a7\u10a8\u10a9\u10aa\u10ab\u10ac\u10ad\u10ae\u10af\u10b0\u10b1\u10b2\u10b3\u10b4\u10b5\u10b6\u10b7\u10b8\u10b9\u10ba\u10bb\u10bc\u10bd\u10be\u10bf\u10c0\u10c1\u10c2\u10c3\u10c4\u10c5\u1e00\u1e02\u1e04\u1e06\u1e08\u1e0a\u1e0c\u1e0e\u1e10\u1e12\u1e14\u1e16\u1e18\u1e1a\u1e1c\u1e1e\u1e20\u1e22\u1e24\u1e26\u1e28\u1e2a\u1e2c\u1e2e\u1e30\u1e32\u1e34\u1e36\u1e38\u1e3a\u1e3c\u1e3e\u1e40\u1e42\u1e44\u1e46\u1e48\u1e4a\u1e4c\u1e4e\u1e50\u1e52\u1e54\u1e56\u1e58\u1e5a\u1e5c\u1e5e\u1e60\u1e62\u1e64\u1e66\u1e68\u1e6a\u1e6c\u1e6e\u1e70\u1e72\u1e74\u1e76\u1e78\u1e7a\u1e7c\u1e7e\u1e80\u1e82\u1e84\u1e86\u1e88\u1e8a\u1e8c\u1e8e\u1e90\u1e92\u1e94\u1ea0\u1ea2\u1ea4\u1ea6\u1ea8\u1eaa\u1eac\u1eae\u1eb0\u1eb2\u1eb4\u1eb6\u1eb8\u1eba\u1ebc\u1ebe\u1ec0\u1ec2\u1ec4\u1ec6\u1ec8\u1eca\u1ecc\u1ece\u1ed0\u1ed2\u1ed4\u1ed6\u1ed8\u1eda\u1edc\u1ede\u1ee0\u1ee2\u1ee4\u1ee6\u1ee8\u1eea\u1eec\u1eee\u1ef0\u1ef2\u1ef4\u1ef6\u1ef8\u1f08\u1f09\u1f0a\u1f0b\u1f0c\u1f0d\u1f0e\u1f0f\u1f18\u1f19\u1f1a\u1f1b\u1f1c\u1f1d\u1f28\u1f29\u1f2a\u1f2b\u1f2c\u1f2d\u1f2e\u1f2f\u1f38\u1f39\u1f3a\u1f3b\u1f3c\u1f3d\u1f3e\u1f3f\u1f48\u1f49\u1f4a\u1f4b\u1f4c\u1f4d\u1f59\u1f5b\u1f5d\u1f5f\u1f68\u1f69\u1f6a\u1f6b\u1f6c\u1f6d\u1f6e\u1f6f\u1fb8\u1fb9\u1fba\u1fbb\u1fc8\u1fc9\u1fca\u1fcb\u1fd8\u1fd9\u1fda\u1fdb\u1fe8\u1fe9\u1fea\u1feb\u1fec\u1ff8\u1ff9\u1ffa\u1ffb\u2102\u2107\u210b\u210c\u210d\u2110\u2111\u2112\u2115\u2119\u211a\u211b\u211c\u211d\u2124\u2126\u2128\u212a\u212b\u212c\u212d\u2130\u2131\u2133\u213e\u213f\u2145\u2c00\u2c01\u2c02\u2c03\u2c04\u2c05\u2c06\u2c07\u2c08\u2c09\u2c0a\u2c0b\u2c0c\u2c0d\u2c0e\u2c0f\u2c10\u2c11\u2c12\u2c13\u2c14\u2c15\u2c16\u2c17\u2c18\u2c19\u2c1a\u2c1b\u2c1c\u2c1d\u2c1e\u2c1f\u2c20\u2c21\u2c22\u2c23\u2c24\u2c25\u2c26\u2c27\u2c28\u2c29\u2c2a\u2c2b\u2c2c\u2c2d\u2c2e\u2c80\u2c82\u2c84\u2c86\u2c88\u2c8a\u2c8c\u2c8e\u2c90\u2c92\u2c94\u2c96\u2c98\u2c9a\u2c9c\u2c9e\u2ca0\u2ca2\u2ca4\u2ca6\u2ca8\u2caa\u2cac\u2cae\u2cb0\u2cb2\u2cb4\u2cb6\u2cb8\u2cba\u2cbc\u2cbe\u2cc0\u2cc2\u2cc4\u2cc6\u2cc8\u2cca\u2ccc\u2cce\u2cd0\u2cd2\u2cd4\u2cd6\u2cd8\u2cda\u2cdc\u2cde\u2ce0\u2ce2\uff21\uff22\uff23\uff24\uff25\uff26\uff27\uff28\uff29\uff2a\uff2b\uff2c\uff2d\uff2e\uff2f\uff30\uff31\uff32\uff33\uff34\uff35\uff36\uff37\uff38\uff39\uff3a'
    
    Mc = u'\u0903\u093e\u093f\u0940\u0949\u094a\u094b\u094c\u0982\u0983\u09be\u09bf\u09c0\u09c7\u09c8\u09cb\u09cc\u09d7\u0a03\u0a3e\u0a3f\u0a40\u0a83\u0abe\u0abf\u0ac0\u0ac9\u0acb\u0acc\u0b02\u0b03\u0b3e\u0b40\u0b47\u0b48\u0b4b\u0b4c\u0b57\u0bbe\u0bbf\u0bc1\u0bc2\u0bc6\u0bc7\u0bc8\u0bca\u0bcb\u0bcc\u0bd7\u0c01\u0c02\u0c03\u0c41\u0c42\u0c43\u0c44\u0c82\u0c83\u0cbe\u0cc0\u0cc1\u0cc2\u0cc3\u0cc4\u0cc7\u0cc8\u0cca\u0ccb\u0cd5\u0cd6\u0d02\u0d03\u0d3e\u0d3f\u0d40\u0d46\u0d47\u0d48\u0d4a\u0d4b\u0d4c\u0d57\u0d82\u0d83\u0dcf\u0dd0\u0dd1\u0dd8\u0dd9\u0dda\u0ddb\u0ddc\u0ddd\u0dde\u0ddf\u0df2\u0df3\u0f3e\u0f3f\u0f7f\u102c\u1031\u1038\u1056\u1057\u17b6\u17be\u17bf\u17c0\u17c1\u17c2\u17c3\u17c4\u17c5\u17c7\u17c8\u1923\u1924\u1925\u1926\u1929\u192a\u192b\u1930\u1931\u1933\u1934\u1935\u1936\u1937\u1938\u19b0\u19b1\u19b2\u19b3\u19b4\u19b5\u19b6\u19b7\u19b8\u19b9\u19ba\u19bb\u19bc\u19bd\u19be\u19bf\u19c0\u19c8\u19c9\u1a19\u1a1a\u1a1b\ua802\ua823\ua824\ua827'
    
    Me = u'\u0488\u0489\u06de\u20dd\u20de\u20df\u20e0\u20e2\u20e3\u20e4'
    
    Mn = u'\u0300\u0301\u0302\u0303\u0304\u0305\u0306\u0307\u0308\u0309\u030a\u030b\u030c\u030d\u030e\u030f\u0310\u0311\u0312\u0313\u0314\u0315\u0316\u0317\u0318\u0319\u031a\u031b\u031c\u031d\u031e\u031f\u0320\u0321\u0322\u0323\u0324\u0325\u0326\u0327\u0328\u0329\u032a\u032b\u032c\u032d\u032e\u032f\u0330\u0331\u0332\u0333\u0334\u0335\u0336\u0337\u0338\u0339\u033a\u033b\u033c\u033d\u033e\u033f\u0340\u0341\u0342\u0343\u0344\u0345\u0346\u0347\u0348\u0349\u034a\u034b\u034c\u034d\u034e\u034f\u0350\u0351\u0352\u0353\u0354\u0355\u0356\u0357\u0358\u0359\u035a\u035b\u035c\u035d\u035e\u035f\u0360\u0361\u0362\u0363\u0364\u0365\u0366\u0367\u0368\u0369\u036a\u036b\u036c\u036d\u036e\u036f\u0483\u0484\u0485\u0486\u0591\u0592\u0593\u0594\u0595\u0596\u0597\u0598\u0599\u059a\u059b\u059c\u059d\u059e\u059f\u05a0\u05a1\u05a2\u05a3\u05a4\u05a5\u05a6\u05a7\u05a8\u05a9\u05aa\u05ab\u05ac\u05ad\u05ae\u05af\u05b0\u05b1\u05b2\u05b3\u05b4\u05b5\u05b6\u05b7\u05b8\u05b9\u05bb\u05bc\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610\u0611\u0612\u0613\u0614\u0615\u064b\u064c\u064d\u064e\u064f\u0650\u0651\u0652\u0653\u0654\u0655\u0656\u0657\u0658\u0659\u065a\u065b\u065c\u065d\u065e\u0670\u06d6\u06d7\u06d8\u06d9\u06da\u06db\u06dc\u06df\u06e0\u06e1\u06e2\u06e3\u06e4\u06e7\u06e8\u06ea\u06eb\u06ec\u06ed\u0711\u0730\u0731\u0732\u0733\u0734\u0735\u0736\u0737\u0738\u0739\u073a\u073b\u073c\u073d\u073e\u073f\u0740\u0741\u0742\u0743\u0744\u0745\u0746\u0747\u0748\u0749\u074a\u07a6\u07a7\u07a8\u07a9\u07aa\u07ab\u07ac\u07ad\u07ae\u07af\u07b0\u0901\u0902\u093c\u0941\u0942\u0943\u0944\u0945\u0946\u0947\u0948\u094d\u0951\u0952\u0953\u0954\u0962\u0963\u0981\u09bc\u09c1\u09c2\u09c3\u09c4\u09cd\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b\u0a4c\u0a4d\u0a70\u0a71\u0a81\u0a82\u0abc\u0ac1\u0ac2\u0ac3\u0ac4\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3f\u0b41\u0b42\u0b43\u0b4d\u0b56\u0b82\u0bc0\u0bcd\u0c3e\u0c3f\u0c40\u0c46\u0c47\u0c48\u0c4a\u0c4b\u0c4c\u0c4d\u0c55\u0c56\u0cbc\u0cbf\u0cc6\u0ccc\u0ccd\u0d41\u0d42\u0d43\u0d4d\u0dca\u0dd2\u0dd3\u0dd4\u0dd6\u0e31\u0e34\u0e35\u0e36\u0e37\u0e38\u0e39\u0e3a\u0e47\u0e48\u0e49\u0e4a\u0e4b\u0e4c\u0e4d\u0e4e\u0eb1\u0eb4\u0eb5\u0eb6\u0eb7\u0eb8\u0eb9\u0ebb\u0ebc\u0ec8\u0ec9\u0eca\u0ecb\u0ecc\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71\u0f72\u0f73\u0f74\u0f75\u0f76\u0f77\u0f78\u0f79\u0f7a\u0f7b\u0f7c\u0f7d\u0f7e\u0f80\u0f81\u0f82\u0f83\u0f84\u0f86\u0f87\u0f90\u0f91\u0f92\u0f93\u0f94\u0f95\u0f96\u0f97\u0f99\u0f9a\u0f9b\u0f9c\u0f9d\u0f9e\u0f9f\u0fa0\u0fa1\u0fa2\u0fa3\u0fa4\u0fa5\u0fa6\u0fa7\u0fa8\u0fa9\u0faa\u0fab\u0fac\u0fad\u0fae\u0faf\u0fb0\u0fb1\u0fb2\u0fb3\u0fb4\u0fb5\u0fb6\u0fb7\u0fb8\u0fb9\u0fba\u0fbb\u0fbc\u0fc6\u102d\u102e\u102f\u1030\u1032\u1036\u1037\u1039\u1058\u1059\u135f\u1712\u1713\u1714\u1732\u1733\u1734\u1752\u1753\u1772\u1773\u17b7\u17b8\u17b9\u17ba\u17bb\u17bc\u17bd\u17c6\u17c9\u17ca\u17cb\u17cc\u17cd\u17ce\u17cf\u17d0\u17d1\u17d2\u17d3\u17dd\u180b\u180c\u180d\u18a9\u1920\u1921\u1922\u1927\u1928\u1932\u1939\u193a\u193b\u1a17\u1a18\u1dc0\u1dc1\u1dc2\u1dc3\u20d0\u20d1\u20d2\u20d3\u20d4\u20d5\u20d6\u20d7\u20d8\u20d9\u20da\u20db\u20dc\u20e1\u20e5\u20e6\u20e7\u20e8\u20e9\u20ea\u20eb\u302a\u302b\u302c\u302d\u302e\u302f\u3099\u309a\ua806\ua80b\ua825\ua826\ufb1e\ufe00\ufe01\ufe02\ufe03\ufe04\ufe05\ufe06\ufe07\ufe08\ufe09\ufe0a\ufe0b\ufe0c\ufe0d\ufe0e\ufe0f\ufe20\ufe21\ufe22\ufe23'
    
    Nd = u'0123456789\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\u06f0\u06f1\u06f2\u06f3\u06f4\u06f5\u06f6\u06f7\u06f8\u06f9\u0966\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f\u09e6\u09e7\u09e8\u09e9\u09ea\u09eb\u09ec\u09ed\u09ee\u09ef\u0a66\u0a67\u0a68\u0a69\u0a6a\u0a6b\u0a6c\u0a6d\u0a6e\u0a6f\u0ae6\u0ae7\u0ae8\u0ae9\u0aea\u0aeb\u0aec\u0aed\u0aee\u0aef\u0b66\u0b67\u0b68\u0b69\u0b6a\u0b6b\u0b6c\u0b6d\u0b6e\u0b6f\u0be6\u0be7\u0be8\u0be9\u0bea\u0beb\u0bec\u0bed\u0bee\u0bef\u0c66\u0c67\u0c68\u0c69\u0c6a\u0c6b\u0c6c\u0c6d\u0c6e\u0c6f\u0ce6\u0ce7\u0ce8\u0ce9\u0cea\u0ceb\u0cec\u0ced\u0cee\u0cef\u0d66\u0d67\u0d68\u0d69\u0d6a\u0d6b\u0d6c\u0d6d\u0d6e\u0d6f\u0e50\u0e51\u0e52\u0e53\u0e54\u0e55\u0e56\u0e57\u0e58\u0e59\u0ed0\u0ed1\u0ed2\u0ed3\u0ed4\u0ed5\u0ed6\u0ed7\u0ed8\u0ed9\u0f20\u0f21\u0f22\u0f23\u0f24\u0f25\u0f26\u0f27\u0f28\u0f29\u1040\u1041\u1042\u1043\u1044\u1045\u1046\u1047\u1048\u1049\u17e0\u17e1\u17e2\u17e3\u17e4\u17e5\u17e6\u17e7\u17e8\u17e9\u1810\u1811\u1812\u1813\u1814\u1815\u1816\u1817\u1818\u1819\u1946\u1947\u1948\u1949\u194a\u194b\u194c\u194d\u194e\u194f\u19d0\u19d1\u19d2\u19d3\u19d4\u19d5\u19d6\u19d7\u19d8\u19d9\uff10\uff11\uff12\uff13\uff14\uff15\uff16\uff17\uff18\uff19'
    
    Nl = u'\u16ee\u16ef\u16f0\u2160\u2161\u2162\u2163\u2164\u2165\u2166\u2167\u2168\u2169\u216a\u216b\u216c\u216d\u216e\u216f\u2170\u2171\u2172\u2173\u2174\u2175\u2176\u2177\u2178\u2179\u217a\u217b\u217c\u217d\u217e\u217f\u2180\u2181\u2182\u2183\u3007\u3021\u3022\u3023\u3024\u3025\u3026\u3027\u3028\u3029\u3038\u3039\u303a'
    
    No = u'\xb2\xb3\xb9\xbc\xbd\xbe\u09f4\u09f5\u09f6\u09f7\u09f8\u09f9\u0bf0\u0bf1\u0bf2\u0f2a\u0f2b\u0f2c\u0f2d\u0f2e\u0f2f\u0f30\u0f31\u0f32\u0f33\u1369\u136a\u136b\u136c\u136d\u136e\u136f\u1370\u1371\u1372\u1373\u1374\u1375\u1376\u1377\u1378\u1379\u137a\u137b\u137c\u17f0\u17f1\u17f2\u17f3\u17f4\u17f5\u17f6\u17f7\u17f8\u17f9\u2070\u2074\u2075\u2076\u2077\u2078\u2079\u2080\u2081\u2082\u2083\u2084\u2085\u2086\u2087\u2088\u2089\u2153\u2154\u2155\u2156\u2157\u2158\u2159\u215a\u215b\u215c\u215d\u215e\u215f\u2460\u2461\u2462\u2463\u2464\u2465\u2466\u2467\u2468\u2469\u246a\u246b\u246c\u246d\u246e\u246f\u2470\u2471\u2472\u2473\u2474\u2475\u2476\u2477\u2478\u2479\u247a\u247b\u247c\u247d\u247e\u247f\u2480\u2481\u2482\u2483\u2484\u2485\u2486\u2487\u2488\u2489\u248a\u248b\u248c\u248d\u248e\u248f\u2490\u2491\u2492\u2493\u2494\u2495\u2496\u2497\u2498\u2499\u249a\u249b\u24ea\u24eb\u24ec\u24ed\u24ee\u24ef\u24f0\u24f1\u24f2\u24f3\u24f4\u24f5\u24f6\u24f7\u24f8\u24f9\u24fa\u24fb\u24fc\u24fd\u24fe\u24ff\u2776\u2777\u2778\u2779\u277a\u277b\u277c\u277d\u277e\u277f\u2780\u2781\u2782\u2783\u2784\u2785\u2786\u2787\u2788\u2789\u278a\u278b\u278c\u278d\u278e\u278f\u2790\u2791\u2792\u2793\u2cfd\u3192\u3193\u3194\u3195\u3220\u3221\u3222\u3223\u3224\u3225\u3226\u3227\u3228\u3229\u3251\u3252\u3253\u3254\u3255\u3256\u3257\u3258\u3259\u325a\u325b\u325c\u325d\u325e\u325f\u3280\u3281\u3282\u3283\u3284\u3285\u3286\u3287\u3288\u3289\u32b1\u32b2\u32b3\u32b4\u32b5\u32b6\u32b7\u32b8\u32b9\u32ba\u32bb\u32bc\u32bd\u32be\u32bf'
    
    Pc = u'_\u203f\u2040\u2054\ufe33\ufe34\ufe4d\ufe4e\ufe4f\uff3f'
    
    Pd = u'-\u058a\u1806\u2010\u2011\u2012\u2013\u2014\u2015\u2e17\u301c\u3030\u30a0\ufe31\ufe32\ufe58\ufe63\uff0d'
    
    Pe = u')]}\u0f3b\u0f3d\u169c\u2046\u207e\u208e\u232a\u23b5\u2769\u276b\u276d\u276f\u2771\u2773\u2775\u27c6\u27e7\u27e9\u27eb\u2984\u2986\u2988\u298a\u298c\u298e\u2990\u2992\u2994\u2996\u2998\u29d9\u29db\u29fd\u3009\u300b\u300d\u300f\u3011\u3015\u3017\u3019\u301b\u301e\u301f\ufd3f\ufe18\ufe36\ufe38\ufe3a\ufe3c\ufe3e\ufe40\ufe42\ufe44\ufe48\ufe5a\ufe5c\ufe5e\uff09\uff3d\uff5d\uff60\uff63'
    
    Pf = u'\xbb\u2019\u201d\u203a\u2e03\u2e05\u2e0a\u2e0d\u2e1d'
    
    Pi = u'\xab\u2018\u201b\u201c\u201f\u2039\u2e02\u2e04\u2e09\u2e0c\u2e1c'
    
    Po = u'!"#%&\'*,./:;?@\\\xa1\xb7\xbf\u037e\u0387\u055a\u055b\u055c\u055d\u055e\u055f\u0589\u05be\u05c0\u05c3\u05c6\u05f3\u05f4\u060c\u060d\u061b\u061e\u061f\u066a\u066b\u066c\u066d\u06d4\u0700\u0701\u0702\u0703\u0704\u0705\u0706\u0707\u0708\u0709\u070a\u070b\u070c\u070d\u0964\u0965\u0970\u0df4\u0e4f\u0e5a\u0e5b\u0f04\u0f05\u0f06\u0f07\u0f08\u0f09\u0f0a\u0f0b\u0f0c\u0f0d\u0f0e\u0f0f\u0f10\u0f11\u0f12\u0f85\u0fd0\u0fd1\u104a\u104b\u104c\u104d\u104e\u104f\u10fb\u1361\u1362\u1363\u1364\u1365\u1366\u1367\u1368\u166d\u166e\u16eb\u16ec\u16ed\u1735\u1736\u17d4\u17d5\u17d6\u17d8\u17d9\u17da\u1800\u1801\u1802\u1803\u1804\u1805\u1807\u1808\u1809\u180a\u1944\u1945\u19de\u19df\u1a1e\u1a1f\u2016\u2017\u2020\u2021\u2022\u2023\u2024\u2025\u2026\u2027\u2030\u2031\u2032\u2033\u2034\u2035\u2036\u2037\u2038\u203b\u203c\u203d\u203e\u2041\u2042\u2043\u2047\u2048\u2049\u204a\u204b\u204c\u204d\u204e\u204f\u2050\u2051\u2053\u2055\u2056\u2057\u2058\u2059\u205a\u205b\u205c\u205d\u205e\u23b6\u2cf9\u2cfa\u2cfb\u2cfc\u2cfe\u2cff\u2e00\u2e01\u2e06\u2e07\u2e08\u2e0b\u2e0e\u2e0f\u2e10\u2e11\u2e12\u2e13\u2e14\u2e15\u2e16\u3001\u3002\u3003\u303d\u30fb\ufe10\ufe11\ufe12\ufe13\ufe14\ufe15\ufe16\ufe19\ufe30\ufe45\ufe46\ufe49\ufe4a\ufe4b\ufe4c\ufe50\ufe51\ufe52\ufe54\ufe55\ufe56\ufe57\ufe5f\ufe60\ufe61\ufe68\ufe6a\ufe6b\uff01\uff02\uff03\uff05\uff06\uff07\uff0a\uff0c\uff0e\uff0f\uff1a\uff1b\uff1f\uff20\uff3c\uff61\uff64\uff65'
    
    Ps = u'([{\u0f3a\u0f3c\u169b\u201a\u201e\u2045\u207d\u208d\u2329\u23b4\u2768\u276a\u276c\u276e\u2770\u2772\u2774\u27c5\u27e6\u27e8\u27ea\u2983\u2985\u2987\u2989\u298b\u298d\u298f\u2991\u2993\u2995\u2997\u29d8\u29da\u29fc\u3008\u300a\u300c\u300e\u3010\u3014\u3016\u3018\u301a\u301d\ufd3e\ufe17\ufe35\ufe37\ufe39\ufe3b\ufe3d\ufe3f\ufe41\ufe43\ufe47\ufe59\ufe5b\ufe5d\uff08\uff3b\uff5b\uff5f\uff62'
    
    Sc = u'$\xa2\xa3\xa4\xa5\u060b\u09f2\u09f3\u0af1\u0bf9\u0e3f\u17db\u20a0\u20a1\u20a2\u20a3\u20a4\u20a5\u20a6\u20a7\u20a8\u20a9\u20aa\u20ab\u20ac\u20ad\u20ae\u20af\u20b0\u20b1\u20b2\u20b3\u20b4\u20b5\ufdfc\ufe69\uff04\uffe0\uffe1\uffe5\uffe6'
    
    Sk = u'^`\xa8\xaf\xb4\xb8\u02c2\u02c3\u02c4\u02c5\u02d2\u02d3\u02d4\u02d5\u02d6\u02d7\u02d8\u02d9\u02da\u02db\u02dc\u02dd\u02de\u02df\u02e5\u02e6\u02e7\u02e8\u02e9\u02ea\u02eb\u02ec\u02ed\u02ef\u02f0\u02f1\u02f2\u02f3\u02f4\u02f5\u02f6\u02f7\u02f8\u02f9\u02fa\u02fb\u02fc\u02fd\u02fe\u02ff\u0374\u0375\u0384\u0385\u1fbd\u1fbf\u1fc0\u1fc1\u1fcd\u1fce\u1fcf\u1fdd\u1fde\u1fdf\u1fed\u1fee\u1fef\u1ffd\u1ffe\u309b\u309c\ua700\ua701\ua702\ua703\ua704\ua705\ua706\ua707\ua708\ua709\ua70a\ua70b\ua70c\ua70d\ua70e\ua70f\ua710\ua711\ua712\ua713\ua714\ua715\ua716\uff3e\uff40\uffe3'
    
    Sm = u'+<=>|~\xac\xb1\xd7\xf7\u03f6\u2044\u2052\u207a\u207b\u207c\u208a\u208b\u208c\u2140\u2141\u2142\u2143\u2144\u214b\u2190\u2191\u2192\u2193\u2194\u219a\u219b\u21a0\u21a3\u21a6\u21ae\u21ce\u21cf\u21d2\u21d4\u21f4\u21f5\u21f6\u21f7\u21f8\u21f9\u21fa\u21fb\u21fc\u21fd\u21fe\u21ff\u2200\u2201\u2202\u2203\u2204\u2205\u2206\u2207\u2208\u2209\u220a\u220b\u220c\u220d\u220e\u220f\u2210\u2211\u2212\u2213\u2214\u2215\u2216\u2217\u2218\u2219\u221a\u221b\u221c\u221d\u221e\u221f\u2220\u2221\u2222\u2223\u2224\u2225\u2226\u2227\u2228\u2229\u222a\u222b\u222c\u222d\u222e\u222f\u2230\u2231\u2232\u2233\u2234\u2235\u2236\u2237\u2238\u2239\u223a\u223b\u223c\u223d\u223e\u223f\u2240\u2241\u2242\u2243\u2244\u2245\u2246\u2247\u2248\u2249\u224a\u224b\u224c\u224d\u224e\u224f\u2250\u2251\u2252\u2253\u2254\u2255\u2256\u2257\u2258\u2259\u225a\u225b\u225c\u225d\u225e\u225f\u2260\u2261\u2262\u2263\u2264\u2265\u2266\u2267\u2268\u2269\u226a\u226b\u226c\u226d\u226e\u226f\u2270\u2271\u2272\u2273\u2274\u2275\u2276\u2277\u2278\u2279\u227a\u227b\u227c\u227d\u227e\u227f\u2280\u2281\u2282\u2283\u2284\u2285\u2286\u2287\u2288\u2289\u228a\u228b\u228c\u228d\u228e\u228f\u2290\u2291\u2292\u2293\u2294\u2295\u2296\u2297\u2298\u2299\u229a\u229b\u229c\u229d\u229e\u229f\u22a0\u22a1\u22a2\u22a3\u22a4\u22a5\u22a6\u22a7\u22a8\u22a9\u22aa\u22ab\u22ac\u22ad\u22ae\u22af\u22b0\u22b1\u22b2\u22b3\u22b4\u22b5\u22b6\u22b7\u22b8\u22b9\u22ba\u22bb\u22bc\u22bd\u22be\u22bf\u22c0\u22c1\u22c2\u22c3\u22c4\u22c5\u22c6\u22c7\u22c8\u22c9\u22ca\u22cb\u22cc\u22cd\u22ce\u22cf\u22d0\u22d1\u22d2\u22d3\u22d4\u22d5\u22d6\u22d7\u22d8\u22d9\u22da\u22db\u22dc\u22dd\u22de\u22df\u22e0\u22e1\u22e2\u22e3\u22e4\u22e5\u22e6\u22e7\u22e8\u22e9\u22ea\u22eb\u22ec\u22ed\u22ee\u22ef\u22f0\u22f1\u22f2\u22f3\u22f4\u22f5\u22f6\u22f7\u22f8\u22f9\u22fa\u22fb\u22fc\u22fd\u22fe\u22ff\u2308\u2309\u230a\u230b\u2320\u2321\u237c\u239b\u239c\u239d\u239e\u239f\u23a0\u23a1\u23a2\u23a3\u23a4\u23a5\u23a6\u23a7\u23a8\u23a9\u23aa\u23ab\u23ac\u23ad\u23ae\u23af\u23b0\u23b1\u23b2\u23b3\u25b7\u25c1\u25f8\u25f9\u25fa\u25fb\u25fc\u25fd\u25fe\u25ff\u266f\u27c0\u27c1\u27c2\u27c3\u27c4\u27d0\u27d1\u27d2\u27d3\u27d4\u27d5\u27d6\u27d7\u27d8\u27d9\u27da\u27db\u27dc\u27dd\u27de\u27df\u27e0\u27e1\u27e2\u27e3\u27e4\u27e5\u27f0\u27f1\u27f2\u27f3\u27f4\u27f5\u27f6\u27f7\u27f8\u27f9\u27fa\u27fb\u27fc\u27fd\u27fe\u27ff\u2900\u2901\u2902\u2903\u2904\u2905\u2906\u2907\u2908\u2909\u290a\u290b\u290c\u290d\u290e\u290f\u2910\u2911\u2912\u2913\u2914\u2915\u2916\u2917\u2918\u2919\u291a\u291b\u291c\u291d\u291e\u291f\u2920\u2921\u2922\u2923\u2924\u2925\u2926\u2927\u2928\u2929\u292a\u292b\u292c\u292d\u292e\u292f\u2930\u2931\u2932\u2933\u2934\u2935\u2936\u2937\u2938\u2939\u293a\u293b\u293c\u293d\u293e\u293f\u2940\u2941\u2942\u2943\u2944\u2945\u2946\u2947\u2948\u2949\u294a\u294b\u294c\u294d\u294e\u294f\u2950\u2951\u2952\u2953\u2954\u2955\u2956\u2957\u2958\u2959\u295a\u295b\u295c\u295d\u295e\u295f\u2960\u2961\u2962\u2963\u2964\u2965\u2966\u2967\u2968\u2969\u296a\u296b\u296c\u296d\u296e\u296f\u2970\u2971\u2972\u2973\u2974\u2975\u2976\u2977\u2978\u2979\u297a\u297b\u297c\u297d\u297e\u297f\u2980\u2981\u2982\u2999\u299a\u299b\u299c\u299d\u299e\u299f\u29a0\u29a1\u29a2\u29a3\u29a4\u29a5\u29a6\u29a7\u29a8\u29a9\u29aa\u29ab\u29ac\u29ad\u29ae\u29af\u29b0\u29b1\u29b2\u29b3\u29b4\u29b5\u29b6\u29b7\u29b8\u29b9\u29ba\u29bb\u29bc\u29bd\u29be\u29bf\u29c0\u29c1\u29c2\u29c3\u29c4\u29c5\u29c6\u29c7\u29c8\u29c9\u29ca\u29cb\u29cc\u29cd\u29ce\u29cf\u29d0\u29d1\u29d2\u29d3\u29d4\u29d5\u29d6\u29d7\u29dc\u29dd\u29de\u29df\u29e0\u29e1\u29e2\u29e3\u29e4\u29e5\u29e6\u29e7\u29e8\u29e9\u29ea\u29eb\u29ec\u29ed\u29ee\u29ef\u29f0\u29f1\u29f2\u29f3\u29f4\u29f5\u29f6\u29f7\u29f8\u29f9\u29fa\u29fb\u29fe\u29ff\u2a00\u2a01\u2a02\u2a03\u2a04\u2a05\u2a06\u2a07\u2a08\u2a09\u2a0a\u2a0b\u2a0c\u2a0d\u2a0e\u2a0f\u2a10\u2a11\u2a12\u2a13\u2a14\u2a15\u2a16\u2a17\u2a18\u2a19\u2a1a\u2a1b\u2a1c\u2a1d\u2a1e\u2a1f\u2a20\u2a21\u2a22\u2a23\u2a24\u2a25\u2a26\u2a27\u2a28\u2a29\u2a2a\u2a2b\u2a2c\u2a2d\u2a2e\u2a2f\u2a30\u2a31\u2a32\u2a33\u2a34\u2a35\u2a36\u2a37\u2a38\u2a39\u2a3a\u2a3b\u2a3c\u2a3d\u2a3e\u2a3f\u2a40\u2a41\u2a42\u2a43\u2a44\u2a45\u2a46\u2a47\u2a48\u2a49\u2a4a\u2a4b\u2a4c\u2a4d\u2a4e\u2a4f\u2a50\u2a51\u2a52\u2a53\u2a54\u2a55\u2a56\u2a57\u2a58\u2a59\u2a5a\u2a5b\u2a5c\u2a5d\u2a5e\u2a5f\u2a60\u2a61\u2a62\u2a63\u2a64\u2a65\u2a66\u2a67\u2a68\u2a69\u2a6a\u2a6b\u2a6c\u2a6d\u2a6e\u2a6f\u2a70\u2a71\u2a72\u2a73\u2a74\u2a75\u2a76\u2a77\u2a78\u2a79\u2a7a\u2a7b\u2a7c\u2a7d\u2a7e\u2a7f\u2a80\u2a81\u2a82\u2a83\u2a84\u2a85\u2a86\u2a87\u2a88\u2a89\u2a8a\u2a8b\u2a8c\u2a8d\u2a8e\u2a8f\u2a90\u2a91\u2a92\u2a93\u2a94\u2a95\u2a96\u2a97\u2a98\u2a99\u2a9a\u2a9b\u2a9c\u2a9d\u2a9e\u2a9f\u2aa0\u2aa1\u2aa2\u2aa3\u2aa4\u2aa5\u2aa6\u2aa7\u2aa8\u2aa9\u2aaa\u2aab\u2aac\u2aad\u2aae\u2aaf\u2ab0\u2ab1\u2ab2\u2ab3\u2ab4\u2ab5\u2ab6\u2ab7\u2ab8\u2ab9\u2aba\u2abb\u2abc\u2abd\u2abe\u2abf\u2ac0\u2ac1\u2ac2\u2ac3\u2ac4\u2ac5\u2ac6\u2ac7\u2ac8\u2ac9\u2aca\u2acb\u2acc\u2acd\u2ace\u2acf\u2ad0\u2ad1\u2ad2\u2ad3\u2ad4\u2ad5\u2ad6\u2ad7\u2ad8\u2ad9\u2ada\u2adb\u2adc\u2add\u2ade\u2adf\u2ae0\u2ae1\u2ae2\u2ae3\u2ae4\u2ae5\u2ae6\u2ae7\u2ae8\u2ae9\u2aea\u2aeb\u2aec\u2aed\u2aee\u2aef\u2af0\u2af1\u2af2\u2af3\u2af4\u2af5\u2af6\u2af7\u2af8\u2af9\u2afa\u2afb\u2afc\u2afd\u2afe\u2aff\ufb29\ufe62\ufe64\ufe65\ufe66\uff0b\uff1c\uff1d\uff1e\uff5c\uff5e\uffe2\uffe9\uffea\uffeb\uffec'
    
    So = u'\xa6\xa7\xa9\xae\xb0\xb6\u0482\u060e\u060f\u06e9\u06fd\u06fe\u09fa\u0b70\u0bf3\u0bf4\u0bf5\u0bf6\u0bf7\u0bf8\u0bfa\u0f01\u0f02\u0f03\u0f13\u0f14\u0f15\u0f16\u0f17\u0f1a\u0f1b\u0f1c\u0f1d\u0f1e\u0f1f\u0f34\u0f36\u0f38\u0fbe\u0fbf\u0fc0\u0fc1\u0fc2\u0fc3\u0fc4\u0fc5\u0fc7\u0fc8\u0fc9\u0fca\u0fcb\u0fcc\u0fcf\u1360\u1390\u1391\u1392\u1393\u1394\u1395\u1396\u1397\u1398\u1399\u1940\u19e0\u19e1\u19e2\u19e3\u19e4\u19e5\u19e6\u19e7\u19e8\u19e9\u19ea\u19eb\u19ec\u19ed\u19ee\u19ef\u19f0\u19f1\u19f2\u19f3\u19f4\u19f5\u19f6\u19f7\u19f8\u19f9\u19fa\u19fb\u19fc\u19fd\u19fe\u19ff\u2100\u2101\u2103\u2104\u2105\u2106\u2108\u2109\u2114\u2116\u2117\u2118\u211e\u211f\u2120\u2121\u2122\u2123\u2125\u2127\u2129\u212e\u2132\u213a\u213b\u214a\u214c\u2195\u2196\u2197\u2198\u2199\u219c\u219d\u219e\u219f\u21a1\u21a2\u21a4\u21a5\u21a7\u21a8\u21a9\u21aa\u21ab\u21ac\u21ad\u21af\u21b0\u21b1\u21b2\u21b3\u21b4\u21b5\u21b6\u21b7\u21b8\u21b9\u21ba\u21bb\u21bc\u21bd\u21be\u21bf\u21c0\u21c1\u21c2\u21c3\u21c4\u21c5\u21c6\u21c7\u21c8\u21c9\u21ca\u21cb\u21cc\u21cd\u21d0\u21d1\u21d3\u21d5\u21d6\u21d7\u21d8\u21d9\u21da\u21db\u21dc\u21dd\u21de\u21df\u21e0\u21e1\u21e2\u21e3\u21e4\u21e5\u21e6\u21e7\u21e8\u21e9\u21ea\u21eb\u21ec\u21ed\u21ee\u21ef\u21f0\u21f1\u21f2\u21f3\u2300\u2301\u2302\u2303\u2304\u2305\u2306\u2307\u230c\u230d\u230e\u230f\u2310\u2311\u2312\u2313\u2314\u2315\u2316\u2317\u2318\u2319\u231a\u231b\u231c\u231d\u231e\u231f\u2322\u2323\u2324\u2325\u2326\u2327\u2328\u232b\u232c\u232d\u232e\u232f\u2330\u2331\u2332\u2333\u2334\u2335\u2336\u2337\u2338\u2339\u233a\u233b\u233c\u233d\u233e\u233f\u2340\u2341\u2342\u2343\u2344\u2345\u2346\u2347\u2348\u2349\u234a\u234b\u234c\u234d\u234e\u234f\u2350\u2351\u2352\u2353\u2354\u2355\u2356\u2357\u2358\u2359\u235a\u235b\u235c\u235d\u235e\u235f\u2360\u2361\u2362\u2363\u2364\u2365\u2366\u2367\u2368\u2369\u236a\u236b\u236c\u236d\u236e\u236f\u2370\u2371\u2372\u2373\u2374\u2375\u2376\u2377\u2378\u2379\u237a\u237b\u237d\u237e\u237f\u2380\u2381\u2382\u2383\u2384\u2385\u2386\u2387\u2388\u2389\u238a\u238b\u238c\u238d\u238e\u238f\u2390\u2391\u2392\u2393\u2394\u2395\u2396\u2397\u2398\u2399\u239a\u23b7\u23b8\u23b9\u23ba\u23bb\u23bc\u23bd\u23be\u23bf\u23c0\u23c1\u23c2\u23c3\u23c4\u23c5\u23c6\u23c7\u23c8\u23c9\u23ca\u23cb\u23cc\u23cd\u23ce\u23cf\u23d0\u23d1\u23d2\u23d3\u23d4\u23d5\u23d6\u23d7\u23d8\u23d9\u23da\u23db\u2400\u2401\u2402\u2403\u2404\u2405\u2406\u2407\u2408\u2409\u240a\u240b\u240c\u240d\u240e\u240f\u2410\u2411\u2412\u2413\u2414\u2415\u2416\u2417\u2418\u2419\u241a\u241b\u241c\u241d\u241e\u241f\u2420\u2421\u2422\u2423\u2424\u2425\u2426\u2440\u2441\u2442\u2443\u2444\u2445\u2446\u2447\u2448\u2449\u244a\u249c\u249d\u249e\u249f\u24a0\u24a1\u24a2\u24a3\u24a4\u24a5\u24a6\u24a7\u24a8\u24a9\u24aa\u24ab\u24ac\u24ad\u24ae\u24af\u24b0\u24b1\u24b2\u24b3\u24b4\u24b5\u24b6\u24b7\u24b8\u24b9\u24ba\u24bb\u24bc\u24bd\u24be\u24bf\u24c0\u24c1\u24c2\u24c3\u24c4\u24c5\u24c6\u24c7\u24c8\u24c9\u24ca\u24cb\u24cc\u24cd\u24ce\u24cf\u24d0\u24d1\u24d2\u24d3\u24d4\u24d5\u24d6\u24d7\u24d8\u24d9\u24da\u24db\u24dc\u24dd\u24de\u24df\u24e0\u24e1\u24e2\u24e3\u24e4\u24e5\u24e6\u24e7\u24e8\u24e9\u2500\u2501\u2502\u2503\u2504\u2505\u2506\u2507\u2508\u2509\u250a\u250b\u250c\u250d\u250e\u250f\u2510\u2511\u2512\u2513\u2514\u2515\u2516\u2517\u2518\u2519\u251a\u251b\u251c\u251d\u251e\u251f\u2520\u2521\u2522\u2523\u2524\u2525\u2526\u2527\u2528\u2529\u252a\u252b\u252c\u252d\u252e\u252f\u2530\u2531\u2532\u2533\u2534\u2535\u2536\u2537\u2538\u2539\u253a\u253b\u253c\u253d\u253e\u253f\u2540\u2541\u2542\u2543\u2544\u2545\u2546\u2547\u2548\u2549\u254a\u254b\u254c\u254d\u254e\u254f\u2550\u2551\u2552\u2553\u2554\u2555\u2556\u2557\u2558\u2559\u255a\u255b\u255c\u255d\u255e\u255f\u2560\u2561\u2562\u2563\u2564\u2565\u2566\u2567\u2568\u2569\u256a\u256b\u256c\u256d\u256e\u256f\u2570\u2571\u2572\u2573\u2574\u2575\u2576\u2577\u2578\u2579\u257a\u257b\u257c\u257d\u257e\u257f\u2580\u2581\u2582\u2583\u2584\u2585\u2586\u2587\u2588\u2589\u258a\u258b\u258c\u258d\u258e\u258f\u2590\u2591\u2592\u2593\u2594\u2595\u2596\u2597\u2598\u2599\u259a\u259b\u259c\u259d\u259e\u259f\u25a0\u25a1\u25a2\u25a3\u25a4\u25a5\u25a6\u25a7\u25a8\u25a9\u25aa\u25ab\u25ac\u25ad\u25ae\u25af\u25b0\u25b1\u25b2\u25b3\u25b4\u25b5\u25b6\u25b8\u25b9\u25ba\u25bb\u25bc\u25bd\u25be\u25bf\u25c0\u25c2\u25c3\u25c4\u25c5\u25c6\u25c7\u25c8\u25c9\u25ca\u25cb\u25cc\u25cd\u25ce\u25cf\u25d0\u25d1\u25d2\u25d3\u25d4\u25d5\u25d6\u25d7\u25d8\u25d9\u25da\u25db\u25dc\u25dd\u25de\u25df\u25e0\u25e1\u25e2\u25e3\u25e4\u25e5\u25e6\u25e7\u25e8\u25e9\u25ea\u25eb\u25ec\u25ed\u25ee\u25ef\u25f0\u25f1\u25f2\u25f3\u25f4\u25f5\u25f6\u25f7\u2600\u2601\u2602\u2603\u2604\u2605\u2606\u2607\u2608\u2609\u260a\u260b\u260c\u260d\u260e\u260f\u2610\u2611\u2612\u2613\u2614\u2615\u2616\u2617\u2618\u2619\u261a\u261b\u261c\u261d\u261e\u261f\u2620\u2621\u2622\u2623\u2624\u2625\u2626\u2627\u2628\u2629\u262a\u262b\u262c\u262d\u262e\u262f\u2630\u2631\u2632\u2633\u2634\u2635\u2636\u2637\u2638\u2639\u263a\u263b\u263c\u263d\u263e\u263f\u2640\u2641\u2642\u2643\u2644\u2645\u2646\u2647\u2648\u2649\u264a\u264b\u264c\u264d\u264e\u264f\u2650\u2651\u2652\u2653\u2654\u2655\u2656\u2657\u2658\u2659\u265a\u265b\u265c\u265d\u265e\u265f\u2660\u2661\u2662\u2663\u2664\u2665\u2666\u2667\u2668\u2669\u266a\u266b\u266c\u266d\u266e\u2670\u2671\u2672\u2673\u2674\u2675\u2676\u2677\u2678\u2679\u267a\u267b\u267c\u267d\u267e\u267f\u2680\u2681\u2682\u2683\u2684\u2685\u2686\u2687\u2688\u2689\u268a\u268b\u268c\u268d\u268e\u268f\u2690\u2691\u2692\u2693\u2694\u2695\u2696\u2697\u2698\u2699\u269a\u269b\u269c\u26a0\u26a1\u26a2\u26a3\u26a4\u26a5\u26a6\u26a7\u26a8\u26a9\u26aa\u26ab\u26ac\u26ad\u26ae\u26af\u26b0\u26b1\u2701\u2702\u2703\u2704\u2706\u2707\u2708\u2709\u270c\u270d\u270e\u270f\u2710\u2711\u2712\u2713\u2714\u2715\u2716\u2717\u2718\u2719\u271a\u271b\u271c\u271d\u271e\u271f\u2720\u2721\u2722\u2723\u2724\u2725\u2726\u2727\u2729\u272a\u272b\u272c\u272d\u272e\u272f\u2730\u2731\u2732\u2733\u2734\u2735\u2736\u2737\u2738\u2739\u273a\u273b\u273c\u273d\u273e\u273f\u2740\u2741\u2742\u2743\u2744\u2745\u2746\u2747\u2748\u2749\u274a\u274b\u274d\u274f\u2750\u2751\u2752\u2756\u2758\u2759\u275a\u275b\u275c\u275d\u275e\u2761\u2762\u2763\u2764\u2765\u2766\u2767\u2794\u2798\u2799\u279a\u279b\u279c\u279d\u279e\u279f\u27a0\u27a1\u27a2\u27a3\u27a4\u27a5\u27a6\u27a7\u27a8\u27a9\u27aa\u27ab\u27ac\u27ad\u27ae\u27af\u27b1\u27b2\u27b3\u27b4\u27b5\u27b6\u27b7\u27b8\u27b9\u27ba\u27bb\u27bc\u27bd\u27be\u2800\u2801\u2802\u2803\u2804\u2805\u2806\u2807\u2808\u2809\u280a\u280b\u280c\u280d\u280e\u280f\u2810\u2811\u2812\u2813\u2814\u2815\u2816\u2817\u2818\u2819\u281a\u281b\u281c\u281d\u281e\u281f\u2820\u2821\u2822\u2823\u2824\u2825\u2826\u2827\u2828\u2829\u282a\u282b\u282c\u282d\u282e\u282f\u2830\u2831\u2832\u2833\u2834\u2835\u2836\u2837\u2838\u2839\u283a\u283b\u283c\u283d\u283e\u283f\u2840\u2841\u2842\u2843\u2844\u2845\u2846\u2847\u2848\u2849\u284a\u284b\u284c\u284d\u284e\u284f\u2850\u2851\u2852\u2853\u2854\u2855\u2856\u2857\u2858\u2859\u285a\u285b\u285c\u285d\u285e\u285f\u2860\u2861\u2862\u2863\u2864\u2865\u2866\u2867\u2868\u2869\u286a\u286b\u286c\u286d\u286e\u286f\u2870\u2871\u2872\u2873\u2874\u2875\u2876\u2877\u2878\u2879\u287a\u287b\u287c\u287d\u287e\u287f\u2880\u2881\u2882\u2883\u2884\u2885\u2886\u2887\u2888\u2889\u288a\u288b\u288c\u288d\u288e\u288f\u2890\u2891\u2892\u2893\u2894\u2895\u2896\u2897\u2898\u2899\u289a\u289b\u289c\u289d\u289e\u289f\u28a0\u28a1\u28a2\u28a3\u28a4\u28a5\u28a6\u28a7\u28a8\u28a9\u28aa\u28ab\u28ac\u28ad\u28ae\u28af\u28b0\u28b1\u28b2\u28b3\u28b4\u28b5\u28b6\u28b7\u28b8\u28b9\u28ba\u28bb\u28bc\u28bd\u28be\u28bf\u28c0\u28c1\u28c2\u28c3\u28c4\u28c5\u28c6\u28c7\u28c8\u28c9\u28ca\u28cb\u28cc\u28cd\u28ce\u28cf\u28d0\u28d1\u28d2\u28d3\u28d4\u28d5\u28d6\u28d7\u28d8\u28d9\u28da\u28db\u28dc\u28dd\u28de\u28df\u28e0\u28e1\u28e2\u28e3\u28e4\u28e5\u28e6\u28e7\u28e8\u28e9\u28ea\u28eb\u28ec\u28ed\u28ee\u28ef\u28f0\u28f1\u28f2\u28f3\u28f4\u28f5\u28f6\u28f7\u28f8\u28f9\u28fa\u28fb\u28fc\u28fd\u28fe\u28ff\u2b00\u2b01\u2b02\u2b03\u2b04\u2b05\u2b06\u2b07\u2b08\u2b09\u2b0a\u2b0b\u2b0c\u2b0d\u2b0e\u2b0f\u2b10\u2b11\u2b12\u2b13\u2ce5\u2ce6\u2ce7\u2ce8\u2ce9\u2cea\u2e80\u2e81\u2e82\u2e83\u2e84\u2e85\u2e86\u2e87\u2e88\u2e89\u2e8a\u2e8b\u2e8c\u2e8d\u2e8e\u2e8f\u2e90\u2e91\u2e92\u2e93\u2e94\u2e95\u2e96\u2e97\u2e98\u2e99\u2e9b\u2e9c\u2e9d\u2e9e\u2e9f\u2ea0\u2ea1\u2ea2\u2ea3\u2ea4\u2ea5\u2ea6\u2ea7\u2ea8\u2ea9\u2eaa\u2eab\u2eac\u2ead\u2eae\u2eaf\u2eb0\u2eb1\u2eb2\u2eb3\u2eb4\u2eb5\u2eb6\u2eb7\u2eb8\u2eb9\u2eba\u2ebb\u2ebc\u2ebd\u2ebe\u2ebf\u2ec0\u2ec1\u2ec2\u2ec3\u2ec4\u2ec5\u2ec6\u2ec7\u2ec8\u2ec9\u2eca\u2ecb\u2ecc\u2ecd\u2ece\u2ecf\u2ed0\u2ed1\u2ed2\u2ed3\u2ed4\u2ed5\u2ed6\u2ed7\u2ed8\u2ed9\u2eda\u2edb\u2edc\u2edd\u2ede\u2edf\u2ee0\u2ee1\u2ee2\u2ee3\u2ee4\u2ee5\u2ee6\u2ee7\u2ee8\u2ee9\u2eea\u2eeb\u2eec\u2eed\u2eee\u2eef\u2ef0\u2ef1\u2ef2\u2ef3\u2f00\u2f01\u2f02\u2f03\u2f04\u2f05\u2f06\u2f07\u2f08\u2f09\u2f0a\u2f0b\u2f0c\u2f0d\u2f0e\u2f0f\u2f10\u2f11\u2f12\u2f13\u2f14\u2f15\u2f16\u2f17\u2f18\u2f19\u2f1a\u2f1b\u2f1c\u2f1d\u2f1e\u2f1f\u2f20\u2f21\u2f22\u2f23\u2f24\u2f25\u2f26\u2f27\u2f28\u2f29\u2f2a\u2f2b\u2f2c\u2f2d\u2f2e\u2f2f\u2f30\u2f31\u2f32\u2f33\u2f34\u2f35\u2f36\u2f37\u2f38\u2f39\u2f3a\u2f3b\u2f3c\u2f3d\u2f3e\u2f3f\u2f40\u2f41\u2f42\u2f43\u2f44\u2f45\u2f46\u2f47\u2f48\u2f49\u2f4a\u2f4b\u2f4c\u2f4d\u2f4e\u2f4f\u2f50\u2f51\u2f52\u2f53\u2f54\u2f55\u2f56\u2f57\u2f58\u2f59\u2f5a\u2f5b\u2f5c\u2f5d\u2f5e\u2f5f\u2f60\u2f61\u2f62\u2f63\u2f64\u2f65\u2f66\u2f67\u2f68\u2f69\u2f6a\u2f6b\u2f6c\u2f6d\u2f6e\u2f6f\u2f70\u2f71\u2f72\u2f73\u2f74\u2f75\u2f76\u2f77\u2f78\u2f79\u2f7a\u2f7b\u2f7c\u2f7d\u2f7e\u2f7f\u2f80\u2f81\u2f82\u2f83\u2f84\u2f85\u2f86\u2f87\u2f88\u2f89\u2f8a\u2f8b\u2f8c\u2f8d\u2f8e\u2f8f\u2f90\u2f91\u2f92\u2f93\u2f94\u2f95\u2f96\u2f97\u2f98\u2f99\u2f9a\u2f9b\u2f9c\u2f9d\u2f9e\u2f9f\u2fa0\u2fa1\u2fa2\u2fa3\u2fa4\u2fa5\u2fa6\u2fa7\u2fa8\u2fa9\u2faa\u2fab\u2fac\u2fad\u2fae\u2faf\u2fb0\u2fb1\u2fb2\u2fb3\u2fb4\u2fb5\u2fb6\u2fb7\u2fb8\u2fb9\u2fba\u2fbb\u2fbc\u2fbd\u2fbe\u2fbf\u2fc0\u2fc1\u2fc2\u2fc3\u2fc4\u2fc5\u2fc6\u2fc7\u2fc8\u2fc9\u2fca\u2fcb\u2fcc\u2fcd\u2fce\u2fcf\u2fd0\u2fd1\u2fd2\u2fd3\u2fd4\u2fd5\u2ff0\u2ff1\u2ff2\u2ff3\u2ff4\u2ff5\u2ff6\u2ff7\u2ff8\u2ff9\u2ffa\u2ffb\u3004\u3012\u3013\u3020\u3036\u3037\u303e\u303f\u3190\u3191\u3196\u3197\u3198\u3199\u319a\u319b\u319c\u319d\u319e\u319f\u31c0\u31c1\u31c2\u31c3\u31c4\u31c5\u31c6\u31c7\u31c8\u31c9\u31ca\u31cb\u31cc\u31cd\u31ce\u31cf\u3200\u3201\u3202\u3203\u3204\u3205\u3206\u3207\u3208\u3209\u320a\u320b\u320c\u320d\u320e\u320f\u3210\u3211\u3212\u3213\u3214\u3215\u3216\u3217\u3218\u3219\u321a\u321b\u321c\u321d\u321e\u322a\u322b\u322c\u322d\u322e\u322f\u3230\u3231\u3232\u3233\u3234\u3235\u3236\u3237\u3238\u3239\u323a\u323b\u323c\u323d\u323e\u323f\u3240\u3241\u3242\u3243\u3250\u3260\u3261\u3262\u3263\u3264\u3265\u3266\u3267\u3268\u3269\u326a\u326b\u326c\u326d\u326e\u326f\u3270\u3271\u3272\u3273\u3274\u3275\u3276\u3277\u3278\u3279\u327a\u327b\u327c\u327d\u327e\u327f\u328a\u328b\u328c\u328d\u328e\u328f\u3290\u3291\u3292\u3293\u3294\u3295\u3296\u3297\u3298\u3299\u329a\u329b\u329c\u329d\u329e\u329f\u32a0\u32a1\u32a2\u32a3\u32a4\u32a5\u32a6\u32a7\u32a8\u32a9\u32aa\u32ab\u32ac\u32ad\u32ae\u32af\u32b0\u32c0\u32c1\u32c2\u32c3\u32c4\u32c5\u32c6\u32c7\u32c8\u32c9\u32ca\u32cb\u32cc\u32cd\u32ce\u32cf\u32d0\u32d1\u32d2\u32d3\u32d4\u32d5\u32d6\u32d7\u32d8\u32d9\u32da\u32db\u32dc\u32dd\u32de\u32df\u32e0\u32e1\u32e2\u32e3\u32e4\u32e5\u32e6\u32e7\u32e8\u32e9\u32ea\u32eb\u32ec\u32ed\u32ee\u32ef\u32f0\u32f1\u32f2\u32f3\u32f4\u32f5\u32f6\u32f7\u32f8\u32f9\u32fa\u32fb\u32fc\u32fd\u32fe\u3300\u3301\u3302\u3303\u3304\u3305\u3306\u3307\u3308\u3309\u330a\u330b\u330c\u330d\u330e\u330f\u3310\u3311\u3312\u3313\u3314\u3315\u3316\u3317\u3318\u3319\u331a\u331b\u331c\u331d\u331e\u331f\u3320\u3321\u3322\u3323\u3324\u3325\u3326\u3327\u3328\u3329\u332a\u332b\u332c\u332d\u332e\u332f\u3330\u3331\u3332\u3333\u3334\u3335\u3336\u3337\u3338\u3339\u333a\u333b\u333c\u333d\u333e\u333f\u3340\u3341\u3342\u3343\u3344\u3345\u3346\u3347\u3348\u3349\u334a\u334b\u334c\u334d\u334e\u334f\u3350\u3351\u3352\u3353\u3354\u3355\u3356\u3357\u3358\u3359\u335a\u335b\u335c\u335d\u335e\u335f\u3360\u3361\u3362\u3363\u3364\u3365\u3366\u3367\u3368\u3369\u336a\u336b\u336c\u336d\u336e\u336f\u3370\u3371\u3372\u3373\u3374\u3375\u3376\u3377\u3378\u3379\u337a\u337b\u337c\u337d\u337e\u337f\u3380\u3381\u3382\u3383\u3384\u3385\u3386\u3387\u3388\u3389\u338a\u338b\u338c\u338d\u338e\u338f\u3390\u3391\u3392\u3393\u3394\u3395\u3396\u3397\u3398\u3399\u339a\u339b\u339c\u339d\u339e\u339f\u33a0\u33a1\u33a2\u33a3\u33a4\u33a5\u33a6\u33a7\u33a8\u33a9\u33aa\u33ab\u33ac\u33ad\u33ae\u33af\u33b0\u33b1\u33b2\u33b3\u33b4\u33b5\u33b6\u33b7\u33b8\u33b9\u33ba\u33bb\u33bc\u33bd\u33be\u33bf\u33c0\u33c1\u33c2\u33c3\u33c4\u33c5\u33c6\u33c7\u33c8\u33c9\u33ca\u33cb\u33cc\u33cd\u33ce\u33cf\u33d0\u33d1\u33d2\u33d3\u33d4\u33d5\u33d6\u33d7\u33d8\u33d9\u33da\u33db\u33dc\u33dd\u33de\u33df\u33e0\u33e1\u33e2\u33e3\u33e4\u33e5\u33e6\u33e7\u33e8\u33e9\u33ea\u33eb\u33ec\u33ed\u33ee\u33ef\u33f0\u33f1\u33f2\u33f3\u33f4\u33f5\u33f6\u33f7\u33f8\u33f9\u33fa\u33fb\u33fc\u33fd\u33fe\u33ff\u4dc0\u4dc1\u4dc2\u4dc3\u4dc4\u4dc5\u4dc6\u4dc7\u4dc8\u4dc9\u4dca\u4dcb\u4dcc\u4dcd\u4dce\u4dcf\u4dd0\u4dd1\u4dd2\u4dd3\u4dd4\u4dd5\u4dd6\u4dd7\u4dd8\u4dd9\u4dda\u4ddb\u4ddc\u4ddd\u4dde\u4ddf\u4de0\u4de1\u4de2\u4de3\u4de4\u4de5\u4de6\u4de7\u4de8\u4de9\u4dea\u4deb\u4dec\u4ded\u4dee\u4def\u4df0\u4df1\u4df2\u4df3\u4df4\u4df5\u4df6\u4df7\u4df8\u4df9\u4dfa\u4dfb\u4dfc\u4dfd\u4dfe\u4dff\ua490\ua491\ua492\ua493\ua494\ua495\ua496\ua497\ua498\ua499\ua49a\ua49b\ua49c\ua49d\ua49e\ua49f\ua4a0\ua4a1\ua4a2\ua4a3\ua4a4\ua4a5\ua4a6\ua4a7\ua4a8\ua4a9\ua4aa\ua4ab\ua4ac\ua4ad\ua4ae\ua4af\ua4b0\ua4b1\ua4b2\ua4b3\ua4b4\ua4b5\ua4b6\ua4b7\ua4b8\ua4b9\ua4ba\ua4bb\ua4bc\ua4bd\ua4be\ua4bf\ua4c0\ua4c1\ua4c2\ua4c3\ua4c4\ua4c5\ua4c6\ua828\ua829\ua82a\ua82b\ufdfd\uffe4\uffe8\uffed\uffee\ufffc\ufffd'
    
    Zl = u'\u2028'
    
    Zp = u'\u2029'
    
    Zs = u' \xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000'
    
    cats = ['Cc', 'Cf', 'Cn', 'Co', 'Cs', 'Ll', 'Lm', 'Lo', 'Lt', 'Lu', 'Mc', 'Me', 'Mn', 'Nd', 'Nl', 'No', 'Pc', 'Pd', 'Pe', 'Pf', 'Pi', 'Po', 'Ps', 'Sc', 'Sk', 'Sm', 'So', 'Zl', 'Zp', 'Zs']
    
    def combine(*args):
        return u''.join([globals()[cat] for cat in args])
    
    xid_start = u'\u0041-\u005A\u005F\u0061-\u007A\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u01BA\u01BB\u01BC-\u01BF\u01C0-\u01C3\u01C4-\u0241\u0250-\u02AF\u02B0-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EE\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03CE\u03D0-\u03F5\u03F7-\u0481\u048A-\u04CE\u04D0-\u04F9\u0500-\u050F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0621-\u063A\u0640\u0641-\u064A\u066E-\u066F\u0671-\u06D3\u06D5\u06E5-\u06E6\u06EE-\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u076D\u0780-\u07A5\u07B1\u0904-\u0939\u093D\u0950\u0958-\u0961\u097D\u0985-\u098C\u098F-\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC-\u09DD\u09DF-\u09E1\u09F0-\u09F1\u0A05-\u0A0A\u0A0F-\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32-\u0A33\u0A35-\u0A36\u0A38-\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2-\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0-\u0AE1\u0B05-\u0B0C\u0B0F-\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32-\u0B33\u0B35-\u0B39\u0B3D\u0B5C-\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99-\u0B9A\u0B9C\u0B9E-\u0B9F\u0BA3-\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C60-\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0-\u0CE1\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D28\u0D2A-\u0D39\u0D60-\u0D61\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E40-\u0E45\u0E46\u0E81-\u0E82\u0E84\u0E87-\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA-\u0EAB\u0EAD-\u0EB0\u0EB2\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDD\u0F00\u0F40-\u0F47\u0F49-\u0F6A\u0F88-\u0F8B\u1000-\u1021\u1023-\u1027\u1029-\u102A\u1050-\u1055\u10A0-\u10C5\u10D0-\u10FA\u10FC\u1100-\u1159\u115F-\u11A2\u11A8-\u11F9\u1200-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u1676\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F0\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1842\u1843\u1844-\u1877\u1880-\u18A8\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19A9\u19C1-\u19C7\u1A00-\u1A16\u1D00-\u1D2B\u1D2C-\u1D61\u1D62-\u1D77\u1D78\u1D79-\u1D9A\u1D9B-\u1DBF\u1E00-\u1E9B\u1EA0-\u1EF9\u1F00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u2094\u2102\u2107\u210A-\u2113\u2115\u2118\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212E\u212F-\u2131\u2133-\u2134\u2135-\u2138\u2139\u213C-\u213F\u2145-\u2149\u2160-\u2183\u2C00-\u2C2E\u2C30-\u2C5E\u2C80-\u2CE4\u2D00-\u2D25\u2D30-\u2D65\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005\u3006\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303A\u303B\u303C\u3041-\u3096\u309D-\u309E\u309F\u30A1-\u30FA\u30FC-\u30FE\u30FF\u3105-\u312C\u3131-\u318E\u31A0-\u31B7\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FBB\uA000-\uA014\uA015\uA016-\uA48C\uA800-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uAC00-\uD7A3\uF900-\uFA2D\uFA30-\uFA6A\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40-\uFB41\uFB43-\uFB44\uFB46-\uFBB1\uFBD3-\uFC5D\uFC64-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDF9\uFE71\uFE73\uFE77\uFE79\uFE7B\uFE7D\uFE7F-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFF6F\uFF70\uFF71-\uFF9D\uFFA0-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC'
    
    xid_continue = u'\u0030-\u0039\u0041-\u005A\u005F\u0061-\u007A\u00AA\u00B5\u00B7\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u01BA\u01BB\u01BC-\u01BF\u01C0-\u01C3\u01C4-\u0241\u0250-\u02AF\u02B0-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EE\u0300-\u036F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03CE\u03D0-\u03F5\u03F7-\u0481\u0483-\u0486\u048A-\u04CE\u04D0-\u04F9\u0500-\u050F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05B9\u05BB-\u05BD\u05BF\u05C1-\u05C2\u05C4-\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u0615\u0621-\u063A\u0640\u0641-\u064A\u064B-\u065E\u0660-\u0669\u066E-\u066F\u0670\u0671-\u06D3\u06D5\u06D6-\u06DC\u06DF-\u06E4\u06E5-\u06E6\u06E7-\u06E8\u06EA-\u06ED\u06EE-\u06EF\u06F0-\u06F9\u06FA-\u06FC\u06FF\u0710\u0711\u0712-\u072F\u0730-\u074A\u074D-\u076D\u0780-\u07A5\u07A6-\u07B0\u07B1\u0901-\u0902\u0903\u0904-\u0939\u093C\u093D\u093E-\u0940\u0941-\u0948\u0949-\u094C\u094D\u0950\u0951-\u0954\u0958-\u0961\u0962-\u0963\u0966-\u096F\u097D\u0981\u0982-\u0983\u0985-\u098C\u098F-\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC\u09BD\u09BE-\u09C0\u09C1-\u09C4\u09C7-\u09C8\u09CB-\u09CC\u09CD\u09CE\u09D7\u09DC-\u09DD\u09DF-\u09E1\u09E2-\u09E3\u09E6-\u09EF\u09F0-\u09F1\u0A01-\u0A02\u0A03\u0A05-\u0A0A\u0A0F-\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32-\u0A33\u0A35-\u0A36\u0A38-\u0A39\u0A3C\u0A3E-\u0A40\u0A41-\u0A42\u0A47-\u0A48\u0A4B-\u0A4D\u0A59-\u0A5C\u0A5E\u0A66-\u0A6F\u0A70-\u0A71\u0A72-\u0A74\u0A81-\u0A82\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2-\u0AB3\u0AB5-\u0AB9\u0ABC\u0ABD\u0ABE-\u0AC0\u0AC1-\u0AC5\u0AC7-\u0AC8\u0AC9\u0ACB-\u0ACC\u0ACD\u0AD0\u0AE0-\u0AE1\u0AE2-\u0AE3\u0AE6-\u0AEF\u0B01\u0B02-\u0B03\u0B05-\u0B0C\u0B0F-\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32-\u0B33\u0B35-\u0B39\u0B3C\u0B3D\u0B3E\u0B3F\u0B40\u0B41-\u0B43\u0B47-\u0B48\u0B4B-\u0B4C\u0B4D\u0B56\u0B57\u0B5C-\u0B5D\u0B5F-\u0B61\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99-\u0B9A\u0B9C\u0B9E-\u0B9F\u0BA3-\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BBF\u0BC0\u0BC1-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCC\u0BCD\u0BD7\u0BE6-\u0BEF\u0C01-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3E-\u0C40\u0C41-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55-\u0C56\u0C60-\u0C61\u0C66-\u0C6F\u0C82-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC\u0CBD\u0CBE\u0CBF\u0CC0-\u0CC4\u0CC6\u0CC7-\u0CC8\u0CCA-\u0CCB\u0CCC-\u0CCD\u0CD5-\u0CD6\u0CDE\u0CE0-\u0CE1\u0CE6-\u0CEF\u0D02-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D28\u0D2A-\u0D39\u0D3E-\u0D40\u0D41-\u0D43\u0D46-\u0D48\u0D4A-\u0D4C\u0D4D\u0D57\u0D60-\u0D61\u0D66-\u0D6F\u0D82-\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD1\u0DD2-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2-\u0DF3\u0E01-\u0E30\u0E31\u0E32-\u0E33\u0E34-\u0E3A\u0E40-\u0E45\u0E46\u0E47-\u0E4E\u0E50-\u0E59\u0E81-\u0E82\u0E84\u0E87-\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA-\u0EAB\u0EAD-\u0EB0\u0EB1\u0EB2-\u0EB3\u0EB4-\u0EB9\u0EBB-\u0EBC\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDD\u0F00\u0F18-\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F3F\u0F40-\u0F47\u0F49-\u0F6A\u0F71-\u0F7E\u0F7F\u0F80-\u0F84\u0F86-\u0F87\u0F88-\u0F8B\u0F90-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1021\u1023-\u1027\u1029-\u102A\u102C\u102D-\u1030\u1031\u1032\u1036-\u1037\u1038\u1039\u1040-\u1049\u1050-\u1055\u1056-\u1057\u1058-\u1059\u10A0-\u10C5\u10D0-\u10FA\u10FC\u1100-\u1159\u115F-\u11A2\u11A8-\u11F9\u1200-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135F\u1369-\u1371\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u1676\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F0\u1700-\u170C\u170E-\u1711\u1712-\u1714\u1720-\u1731\u1732-\u1734\u1740-\u1751\u1752-\u1753\u1760-\u176C\u176E-\u1770\u1772-\u1773\u1780-\u17B3\u17B6\u17B7-\u17BD\u17BE-\u17C5\u17C6\u17C7-\u17C8\u17C9-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1842\u1843\u1844-\u1877\u1880-\u18A8\u18A9\u1900-\u191C\u1920-\u1922\u1923-\u1926\u1927-\u1928\u1929-\u192B\u1930-\u1931\u1932\u1933-\u1938\u1939-\u193B\u1946-\u194F\u1950-\u196D\u1970-\u1974\u1980-\u19A9\u19B0-\u19C0\u19C1-\u19C7\u19C8-\u19C9\u19D0-\u19D9\u1A00-\u1A16\u1A17-\u1A18\u1A19-\u1A1B\u1D00-\u1D2B\u1D2C-\u1D61\u1D62-\u1D77\u1D78\u1D79-\u1D9A\u1D9B-\u1DBF\u1DC0-\u1DC3\u1E00-\u1E9B\u1EA0-\u1EF9\u1F00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u203F-\u2040\u2054\u2071\u207F\u2090-\u2094\u20D0-\u20DC\u20E1\u20E5-\u20EB\u2102\u2107\u210A-\u2113\u2115\u2118\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212E\u212F-\u2131\u2133-\u2134\u2135-\u2138\u2139\u213C-\u213F\u2145-\u2149\u2160-\u2183\u2C00-\u2C2E\u2C30-\u2C5E\u2C80-\u2CE4\u2D00-\u2D25\u2D30-\u2D65\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005\u3006\u3007\u3021-\u3029\u302A-\u302F\u3031-\u3035\u3038-\u303A\u303B\u303C\u3041-\u3096\u3099-\u309A\u309D-\u309E\u309F\u30A1-\u30FA\u30FC-\u30FE\u30FF\u3105-\u312C\u3131-\u318E\u31A0-\u31B7\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FBB\uA000-\uA014\uA015\uA016-\uA48C\uA800-\uA801\uA802\uA803-\uA805\uA806\uA807-\uA80A\uA80B\uA80C-\uA822\uA823-\uA824\uA825-\uA826\uA827\uAC00-\uD7A3\uF900-\uFA2D\uFA30-\uFA6A\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1E\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40-\uFB41\uFB43-\uFB44\uFB46-\uFBB1\uFBD3-\uFC5D\uFC64-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDF9\uFE00-\uFE0F\uFE20-\uFE23\uFE33-\uFE34\uFE4D-\uFE4F\uFE71\uFE73\uFE77\uFE79\uFE7B\uFE7D\uFE7F-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFF6F\uFF70\uFF71-\uFF9D\uFF9E-\uFF9F\uFFA0-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC'
    
    def allexcept(*args):
        newcats = cats[:]
        for arg in args:
            newcats.remove(arg)
        return u''.join([globals()[cat] for cat in newcats])
    
    if __name__ == '__main__':
        import unicodedata
    
        categories = {}
    
        f = open(__file__)
        try:
            content = f.read()
        finally:
            f.close()
    
        header = content[:content.find('Cc =')]
        footer = content[content.find("def combine("):]
    
        for code in range(65535):
            c = unichr(code)
            cat = unicodedata.category(c)
            categories.setdefault(cat, []).append(c)
    
        f = open(__file__, 'w')
        f.write(header)
    
        for cat in sorted(categories):
            val = u''.join(categories[cat])
            if cat == 'Cs':
                # Jython can't handle isolated surrogates
                f.write("""\
    try:
        Cs = eval(r"%r")
    except UnicodeDecodeError:
        Cs = '' # Jython can't handle isolated surrogates\n\n""" % val)
            else:
                f.write('%s = %r\n\n' % (cat, val))
        f.write('cats = %r\n\n' % sorted(categories.keys()))
    
        f.write(footer)
        f.close()
    eric4-4.5.18/eric/ThirdParty/Pygments/pygments/PaxHeaders.8617/filter.py0000644000175000001440000000013112261012652024112 xustar000000000000000030 mtime=1388582314.129104065
    29 atime=1389081085.56272435
    30 ctime=1389081086.311724332
    eric4-4.5.18/eric/ThirdParty/Pygments/pygments/filter.py0000644000175000001440000000402712261012652023650 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*-
    """
        pygments.filter
        ~~~~~~~~~~~~~~~
    
        Module that implements the default filter.
    
        :copyright: Copyright 2006-2012 by the Pygments team, see AUTHORS.
        :license: BSD, see LICENSE for details.
    """
    
    
    def apply_filters(stream, filters, lexer=None):
        """
        Use this method to apply an iterable of filters to
        a stream. If lexer is given it's forwarded to the
        filter, otherwise the filter receives `None`.
        """
        def _apply(filter_, stream):
            for token in filter_.filter(lexer, stream):
                yield token
        for filter_ in filters:
            stream = _apply(filter_, stream)
        return stream
    
    
    def simplefilter(f):
        """
        Decorator that converts a function into a filter::
    
            @simplefilter
            def lowercase(lexer, stream, options):
                for ttype, value in stream:
                    yield ttype, value.lower()
        """
        return type(f.__name__, (FunctionFilter,), {
                    'function':     f,
                    '__module__':   getattr(f, '__module__'),
                    '__doc__':      f.__doc__
                })
    
    
    class Filter(object):
        """
        Default filter. Subclass this class or use the `simplefilter`
        decorator to create own filters.
        """
    
        def __init__(self, **options):
            self.options = options
    
        def filter(self, lexer, stream):
            raise NotImplementedError()
    
    
    class FunctionFilter(Filter):
        """
        Abstract class used by `simplefilter` to create simple
        function filters on the fly. The `simplefilter` decorator
        automatically creates subclasses of this class for
        functions passed to it.
        """
        function = None
    
        def __init__(self, **options):
            if not hasattr(self, 'function'):
                raise TypeError('%r used without bound function' %
                                self.__class__.__name__)
            Filter.__init__(self, **options)
    
        def filter(self, lexer, stream):
            # pylint: disable-msg=E1102
            for ttype, value in self.function(lexer, stream, self.options):
                yield ttype, value
    eric4-4.5.18/eric/ThirdParty/Pygments/pygments/PaxHeaders.8617/lexer.py0000644000175000001440000000013112261012652023744 xustar000000000000000030 mtime=1388582314.132104103
    29 atime=1389081085.56272435
    30 ctime=1389081086.311724332
    eric4-4.5.18/eric/ThirdParty/Pygments/pygments/lexer.py0000644000175000001440000005760512261012652023514 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*-
    """
        pygments.lexer
        ~~~~~~~~~~~~~~
    
        Base lexer classes.
    
        :copyright: Copyright 2006-2012 by the Pygments team, see AUTHORS.
        :license: BSD, see LICENSE for details.
    """
    import re
    
    from pygments.filter import apply_filters, Filter
    from pygments.filters import get_filter_by_name
    from pygments.token import Error, Text, Other, _TokenType
    from pygments.util import get_bool_opt, get_int_opt, get_list_opt, \
         make_analysator
    
    
    __all__ = ['Lexer', 'RegexLexer', 'ExtendedRegexLexer', 'DelegatingLexer',
               'LexerContext', 'include', 'bygroups', 'using', 'this']
    
    
    _encoding_map = [('\xef\xbb\xbf', 'utf-8'),
                     ('\xff\xfe\0\0', 'utf-32'),
                     ('\0\0\xfe\xff', 'utf-32be'),
                     ('\xff\xfe', 'utf-16'),
                     ('\xfe\xff', 'utf-16be')]
    
    _default_analyse = staticmethod(lambda x: 0.0)
    
    
    class LexerMeta(type):
        """
        This metaclass automagically converts ``analyse_text`` methods into
        static methods which always return float values.
        """
    
        def __new__(cls, name, bases, d):
            if 'analyse_text' in d:
                d['analyse_text'] = make_analysator(d['analyse_text'])
            return type.__new__(cls, name, bases, d)
    
    
    class Lexer(object):
        """
        Lexer for a specific language.
    
        Basic options recognized:
        ``stripnl``
            Strip leading and trailing newlines from the input (default: True).
        ``stripall``
            Strip all leading and trailing whitespace from the input
            (default: False).
        ``ensurenl``
            Make sure that the input ends with a newline (default: True).  This
            is required for some lexers that consume input linewise.
            *New in Pygments 1.3.*
        ``tabsize``
            If given and greater than 0, expand tabs in the input (default: 0).
        ``encoding``
            If given, must be an encoding name. This encoding will be used to
            convert the input string to Unicode, if it is not already a Unicode
            string (default: ``'latin1'``).
            Can also be ``'guess'`` to use a simple UTF-8 / Latin1 detection, or
            ``'chardet'`` to use the chardet library, if it is installed.
        """
    
        #: Name of the lexer
        name = None
    
        #: Shortcuts for the lexer
        aliases = []
    
        #: fn match rules
        filenames = []
    
        #: fn alias filenames
        alias_filenames = []
    
        #: mime types
        mimetypes = []
    
        __metaclass__ = LexerMeta
    
        def __init__(self, **options):
            self.options = options
            self.stripnl = get_bool_opt(options, 'stripnl', True)
            self.stripall = get_bool_opt(options, 'stripall', False)
            self.ensurenl = get_bool_opt(options, 'ensurenl', True)
            self.tabsize = get_int_opt(options, 'tabsize', 0)
            self.encoding = options.get('encoding', 'latin1')
            # self.encoding = options.get('inencoding', None) or self.encoding
            self.filters = []
            for filter_ in get_list_opt(options, 'filters', ()):
                self.add_filter(filter_)
    
        def __repr__(self):
            if self.options:
                return '' % (self.__class__.__name__,
                                                         self.options)
            else:
                return '' % self.__class__.__name__
    
        def add_filter(self, filter_, **options):
            """
            Add a new stream filter to this lexer.
            """
            if not isinstance(filter_, Filter):
                filter_ = get_filter_by_name(filter_, **options)
            self.filters.append(filter_)
    
        def analyse_text(text):
            """
            Has to return a float between ``0`` and ``1`` that indicates
            if a lexer wants to highlight this text. Used by ``guess_lexer``.
            If this method returns ``0`` it won't highlight it in any case, if
            it returns ``1`` highlighting with this lexer is guaranteed.
    
            The `LexerMeta` metaclass automatically wraps this function so
            that it works like a static method (no ``self`` or ``cls``
            parameter) and the return value is automatically converted to
            `float`. If the return value is an object that is boolean `False`
            it's the same as if the return values was ``0.0``.
            """
    
        def get_tokens(self, text, unfiltered=False):
            """
            Return an iterable of (tokentype, value) pairs generated from
            `text`. If `unfiltered` is set to `True`, the filtering mechanism
            is bypassed even if filters are defined.
    
            Also preprocess the text, i.e. expand tabs and strip it if
            wanted and applies registered filters.
            """
            if not isinstance(text, unicode):
                if self.encoding == 'guess':
                    try:
                        text = text.decode('utf-8')
                        if text.startswith(u'\ufeff'):
                            text = text[len(u'\ufeff'):]
                    except UnicodeDecodeError:
                        text = text.decode('latin1')
                elif self.encoding == 'chardet':
                    try:
                        import chardet
                    except ImportError:
                        raise ImportError('To enable chardet encoding guessing, '
                                          'please install the chardet library '
                                          'from http://chardet.feedparser.org/')
                    # check for BOM first
                    decoded = None
                    for bom, encoding in _encoding_map:
                        if text.startswith(bom):
                            decoded = unicode(text[len(bom):], encoding,
                                              errors='replace')
                            break
                    # no BOM found, so use chardet
                    if decoded is None:
                        enc = chardet.detect(text[:1024]) # Guess using first 1KB
                        decoded = unicode(text, enc.get('encoding') or 'utf-8',
                                          errors='replace')
                    text = decoded
                else:
                    text = text.decode(self.encoding)
            # text now *is* a unicode string
            text = text.replace('\r\n', '\n')
            text = text.replace('\r', '\n')
            if self.stripall:
                text = text.strip()
            elif self.stripnl:
                text = text.strip('\n')
            if self.tabsize > 0:
                text = text.expandtabs(self.tabsize)
            if self.ensurenl and not text.endswith('\n'):
                text += '\n'
    
            def streamer():
                for i, t, v in self.get_tokens_unprocessed(text):
                    yield t, v
            stream = streamer()
            if not unfiltered:
                stream = apply_filters(stream, self.filters, self)
            return stream
    
        def get_tokens_unprocessed(self, text):
            """
            Return an iterable of (tokentype, value) pairs.
            In subclasses, implement this method as a generator to
            maximize effectiveness.
            """
            raise NotImplementedError
    
    
    class DelegatingLexer(Lexer):
        """
        This lexer takes two lexer as arguments. A root lexer and
        a language lexer. First everything is scanned using the language
        lexer, afterwards all ``Other`` tokens are lexed using the root
        lexer.
    
        The lexers from the ``template`` lexer package use this base lexer.
        """
    
        def __init__(self, _root_lexer, _language_lexer, _needle=Other, **options):
            self.root_lexer = _root_lexer(**options)
            self.language_lexer = _language_lexer(**options)
            self.needle = _needle
            Lexer.__init__(self, **options)
    
        def get_tokens_unprocessed(self, text):
            buffered = ''
            insertions = []
            lng_buffer = []
            for i, t, v in self.language_lexer.get_tokens_unprocessed(text):
                if t is self.needle:
                    if lng_buffer:
                        insertions.append((len(buffered), lng_buffer))
                        lng_buffer = []
                    buffered += v
                else:
                    lng_buffer.append((i, t, v))
            if lng_buffer:
                insertions.append((len(buffered), lng_buffer))
            return do_insertions(insertions,
                                 self.root_lexer.get_tokens_unprocessed(buffered))
    
    
    #-------------------------------------------------------------------------------
    # RegexLexer and ExtendedRegexLexer
    #
    
    
    class include(str):
        """
        Indicates that a state should include rules from another state.
        """
        pass
    
    
    class combined(tuple):
        """
        Indicates a state combined from multiple states.
        """
    
        def __new__(cls, *args):
            return tuple.__new__(cls, args)
    
        def __init__(self, *args):
            # tuple.__init__ doesn't do anything
            pass
    
    
    class _PseudoMatch(object):
        """
        A pseudo match object constructed from a string.
        """
    
        def __init__(self, start, text):
            self._text = text
            self._start = start
    
        def start(self, arg=None):
            return self._start
    
        def end(self, arg=None):
            return self._start + len(self._text)
    
        def group(self, arg=None):
            if arg:
                raise IndexError('No such group')
            return self._text
    
        def groups(self):
            return (self._text,)
    
        def groupdict(self):
            return {}
    
    
    def bygroups(*args):
        """
        Callback that yields multiple actions for each group in the match.
        """
        def callback(lexer, match, ctx=None):
            for i, action in enumerate(args):
                if action is None:
                    continue
                elif type(action) is _TokenType:
                    data = match.group(i + 1)
                    if data:
                        yield match.start(i + 1), action, data
                else:
                    data = match.group(i + 1)
                    if data is not None:
                        if ctx:
                            ctx.pos = match.start(i + 1)
                        for item in action(lexer, _PseudoMatch(match.start(i + 1),
                                           data), ctx):
                            if item:
                                yield item
            if ctx:
                ctx.pos = match.end()
        return callback
    
    
    class _This(object):
        """
        Special singleton used for indicating the caller class.
        Used by ``using``.
        """
    this = _This()
    
    
    def using(_other, **kwargs):
        """
        Callback that processes the match with a different lexer.
    
        The keyword arguments are forwarded to the lexer, except `state` which
        is handled separately.
    
        `state` specifies the state that the new lexer will start in, and can
        be an enumerable such as ('root', 'inline', 'string') or a simple
        string which is assumed to be on top of the root state.
    
        Note: For that to work, `_other` must not be an `ExtendedRegexLexer`.
        """
        gt_kwargs = {}
        if 'state' in kwargs:
            s = kwargs.pop('state')
            if isinstance(s, (list, tuple)):
                gt_kwargs['stack'] = s
            else:
                gt_kwargs['stack'] = ('root', s)
    
        if _other is this:
            def callback(lexer, match, ctx=None):
                # if keyword arguments are given the callback
                # function has to create a new lexer instance
                if kwargs:
                    # XXX: cache that somehow
                    kwargs.update(lexer.options)
                    lx = lexer.__class__(**kwargs)
                else:
                    lx = lexer
                s = match.start()
                for i, t, v in lx.get_tokens_unprocessed(match.group(), **gt_kwargs):
                    yield i + s, t, v
                if ctx:
                    ctx.pos = match.end()
        else:
            def callback(lexer, match, ctx=None):
                # XXX: cache that somehow
                kwargs.update(lexer.options)
                lx = _other(**kwargs)
    
                s = match.start()
                for i, t, v in lx.get_tokens_unprocessed(match.group(), **gt_kwargs):
                    yield i + s, t, v
                if ctx:
                    ctx.pos = match.end()
        return callback
    
    
    class RegexLexerMeta(LexerMeta):
        """
        Metaclass for RegexLexer, creates the self._tokens attribute from
        self.tokens on the first instantiation.
        """
    
        def _process_regex(cls, regex, rflags):
            """Preprocess the regular expression component of a token definition."""
            return re.compile(regex, rflags).match
    
        def _process_token(cls, token):
            """Preprocess the token component of a token definition."""
            assert type(token) is _TokenType or callable(token), \
                   'token type must be simple type or callable, not %r' % (token,)
            return token
    
        def _process_new_state(cls, new_state, unprocessed, processed):
            """Preprocess the state transition action of a token definition."""
            if isinstance(new_state, str):
                # an existing state
                if new_state == '#pop':
                    return -1
                elif new_state in unprocessed:
                    return (new_state,)
                elif new_state == '#push':
                    return new_state
                elif new_state[:5] == '#pop:':
                    return -int(new_state[5:])
                else:
                    assert False, 'unknown new state %r' % new_state
            elif isinstance(new_state, combined):
                # combine a new state from existing ones
                tmp_state = '_tmp_%d' % cls._tmpname
                cls._tmpname += 1
                itokens = []
                for istate in new_state:
                    assert istate != new_state, 'circular state ref %r' % istate
                    itokens.extend(cls._process_state(unprocessed,
                                                      processed, istate))
                processed[tmp_state] = itokens
                return (tmp_state,)
            elif isinstance(new_state, tuple):
                # push more than one state
                for istate in new_state:
                    assert (istate in unprocessed or
                            istate in ('#pop', '#push')), \
                           'unknown new state ' + istate
                return new_state
            else:
                assert False, 'unknown new state def %r' % new_state
    
        def _process_state(cls, unprocessed, processed, state):
            """Preprocess a single state definition."""
            assert type(state) is str, "wrong state name %r" % state
            assert state[0] != '#', "invalid state name %r" % state
            if state in processed:
                return processed[state]
            tokens = processed[state] = []
            rflags = cls.flags
            for tdef in unprocessed[state]:
                if isinstance(tdef, include):
                    # it's a state reference
                    assert tdef != state, "circular state reference %r" % state
                    tokens.extend(cls._process_state(unprocessed, processed,
                                                     str(tdef)))
                    continue
    
                assert type(tdef) is tuple, "wrong rule def %r" % tdef
    
                try:
                    rex = cls._process_regex(tdef[0], rflags)
                except Exception, err:
                    raise ValueError("uncompilable regex %r in state %r of %r: %s" %
                                     (tdef[0], state, cls, err))
    
                token = cls._process_token(tdef[1])
    
                if len(tdef) == 2:
                    new_state = None
                else:
                    new_state = cls._process_new_state(tdef[2],
                                                       unprocessed, processed)
    
                tokens.append((rex, token, new_state))
            return tokens
    
        def process_tokendef(cls, name, tokendefs=None):
            """Preprocess a dictionary of token definitions."""
            processed = cls._all_tokens[name] = {}
            tokendefs = tokendefs or cls.tokens[name]
            for state in tokendefs.keys():
                cls._process_state(tokendefs, processed, state)
            return processed
    
        def __call__(cls, *args, **kwds):
            """Instantiate cls after preprocessing its token definitions."""
            if '_tokens' not in cls.__dict__:
                cls._all_tokens = {}
                cls._tmpname = 0
                if hasattr(cls, 'token_variants') and cls.token_variants:
                    # don't process yet
                    pass
                else:
                    cls._tokens = cls.process_tokendef('', cls.tokens)
    
            return type.__call__(cls, *args, **kwds)
    
    
    class RegexLexer(Lexer):
        """
        Base for simple stateful regular expression-based lexers.
        Simplifies the lexing process so that you need only
        provide a list of states and regular expressions.
        """
        __metaclass__ = RegexLexerMeta
    
        #: Flags for compiling the regular expressions.
        #: Defaults to MULTILINE.
        flags = re.MULTILINE
    
        #: Dict of ``{'state': [(regex, tokentype, new_state), ...], ...}``
        #:
        #: The initial state is 'root'.
        #: ``new_state`` can be omitted to signify no state transition.
        #: If it is a string, the state is pushed on the stack and changed.
        #: If it is a tuple of strings, all states are pushed on the stack and
        #: the current state will be the topmost.
        #: It can also be ``combined('state1', 'state2', ...)``
        #: to signify a new, anonymous state combined from the rules of two
        #: or more existing ones.
        #: Furthermore, it can be '#pop' to signify going back one step in
        #: the state stack, or '#push' to push the current state on the stack
        #: again.
        #:
        #: The tuple can also be replaced with ``include('state')``, in which
        #: case the rules from the state named by the string are included in the
        #: current one.
        tokens = {}
    
        def get_tokens_unprocessed(self, text, stack=('root',)):
            """
            Split ``text`` into (tokentype, text) pairs.
    
            ``stack`` is the inital stack (default: ``['root']``)
            """
            pos = 0
            tokendefs = self._tokens
            statestack = list(stack)
            statetokens = tokendefs[statestack[-1]]
            while 1:
                for rexmatch, action, new_state in statetokens:
                    m = rexmatch(text, pos)
                    if m:
                        if type(action) is _TokenType:
                            yield pos, action, m.group()
                        else:
                            for item in action(self, m):
                                yield item
                        pos = m.end()
                        if new_state is not None:
                            # state transition
                            if isinstance(new_state, tuple):
                                for state in new_state:
                                    if state == '#pop':
                                        statestack.pop()
                                    elif state == '#push':
                                        statestack.append(statestack[-1])
                                    else:
                                        statestack.append(state)
                            elif isinstance(new_state, int):
                                # pop
                                del statestack[new_state:]
                            elif new_state == '#push':
                                statestack.append(statestack[-1])
                            else:
                                assert False, "wrong state def: %r" % new_state
                            statetokens = tokendefs[statestack[-1]]
                        break
                else:
                    try:
                        if text[pos] == '\n':
                            # at EOL, reset state to "root"
                            pos += 1
                            statestack = ['root']
                            statetokens = tokendefs['root']
                            yield pos, Text, u'\n'
                            continue
                        yield pos, Error, text[pos]
                        pos += 1
                    except IndexError:
                        break
    
    
    class LexerContext(object):
        """
        A helper object that holds lexer position data.
        """
    
        def __init__(self, text, pos, stack=None, end=None):
            self.text = text
            self.pos = pos
            self.end = end or len(text) # end=0 not supported ;-)
            self.stack = stack or ['root']
    
        def __repr__(self):
            return 'LexerContext(%r, %r, %r)' % (
                self.text, self.pos, self.stack)
    
    
    class ExtendedRegexLexer(RegexLexer):
        """
        A RegexLexer that uses a context object to store its state.
        """
    
        def get_tokens_unprocessed(self, text=None, context=None):
            """
            Split ``text`` into (tokentype, text) pairs.
            If ``context`` is given, use this lexer context instead.
            """
            tokendefs = self._tokens
            if not context:
                ctx = LexerContext(text, 0)
                statetokens = tokendefs['root']
            else:
                ctx = context
                statetokens = tokendefs[ctx.stack[-1]]
                text = ctx.text
            while 1:
                for rexmatch, action, new_state in statetokens:
                    m = rexmatch(text, ctx.pos, ctx.end)
                    if m:
                        if type(action) is _TokenType:
                            yield ctx.pos, action, m.group()
                            ctx.pos = m.end()
                        else:
                            for item in action(self, m, ctx):
                                yield item
                            if not new_state:
                                # altered the state stack?
                                statetokens = tokendefs[ctx.stack[-1]]
                        # CAUTION: callback must set ctx.pos!
                        if new_state is not None:
                            # state transition
                            if isinstance(new_state, tuple):
                                ctx.stack.extend(new_state)
                            elif isinstance(new_state, int):
                                # pop
                                del ctx.stack[new_state:]
                            elif new_state == '#push':
                                ctx.stack.append(ctx.stack[-1])
                            else:
                                assert False, "wrong state def: %r" % new_state
                            statetokens = tokendefs[ctx.stack[-1]]
                        break
                else:
                    try:
                        if ctx.pos >= ctx.end:
                            break
                        if text[ctx.pos] == '\n':
                            # at EOL, reset state to "root"
                            ctx.pos += 1
                            ctx.stack = ['root']
                            statetokens = tokendefs['root']
                            yield ctx.pos, Text, u'\n'
                            continue
                        yield ctx.pos, Error, text[ctx.pos]
                        ctx.pos += 1
                    except IndexError:
                        break
    
    
    def do_insertions(insertions, tokens):
        """
        Helper for lexers which must combine the results of several
        sublexers.
    
        ``insertions`` is a list of ``(index, itokens)`` pairs.
        Each ``itokens`` iterable should be inserted at position
        ``index`` into the token stream given by the ``tokens``
        argument.
    
        The result is a combined token stream.
    
        TODO: clean up the code here.
        """
        insertions = iter(insertions)
        try:
            index, itokens = insertions.next()
        except StopIteration:
            # no insertions
            for item in tokens:
                yield item
            return
    
        realpos = None
        insleft = True
    
        # iterate over the token stream where we want to insert
        # the tokens from the insertion list.
        for i, t, v in tokens:
            # first iteration. store the postition of first item
            if realpos is None:
                realpos = i
            oldi = 0
            while insleft and i + len(v) >= index:
                tmpval = v[oldi:index - i]
                yield realpos, t, tmpval
                realpos += len(tmpval)
                for it_index, it_token, it_value in itokens:
                    yield realpos, it_token, it_value
                    realpos += len(it_value)
                oldi = index - i
                try:
                    index, itokens = insertions.next()
                except StopIteration:
                    insleft = False
                    break  # not strictly necessary
            yield realpos, t, v[oldi:]
            realpos += len(v) - oldi
    
        # leftover tokens
        while insleft:
            # no normal tokens, set realpos to zero
            realpos = realpos or 0
            for p, t, v in itokens:
                yield realpos, t, v
                realpos += len(v)
            try:
                index, itokens = insertions.next()
            except StopIteration:
                insleft = False
                break  # not strictly necessary
    
    eric4-4.5.18/eric/ThirdParty/Pygments/pygments/PaxHeaders.8617/util.py0000644000175000001440000000013112261012652023602 xustar000000000000000030 mtime=1388582314.134104128
    29 atime=1389081085.56272435
    30 ctime=1389081086.311724332
    eric4-4.5.18/eric/ThirdParty/Pygments/pygments/util.py0000644000175000001440000001477012261012652023346 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*-
    """
        pygments.util
        ~~~~~~~~~~~~~
    
        Utility functions.
    
        :copyright: Copyright 2006-2012 by the Pygments team, see AUTHORS.
        :license: BSD, see LICENSE for details.
    """
    
    import re
    import sys
    import codecs
    
    
    split_path_re = re.compile(r'[/\\ ]')
    doctype_lookup_re = re.compile(r'''(?smx)
        (<\?.*?\?>)?\s*
        ]*>
    ''')
    tag_re = re.compile(r'<(.+?)(\s.*?)?>.*?(?uism)')
    
    
    class ClassNotFound(ValueError):
        """
        If one of the get_*_by_* functions didn't find a matching class.
        """
    
    
    class OptionError(Exception):
        pass
    
    
    def get_choice_opt(options, optname, allowed, default=None, normcase=False):
        string = options.get(optname, default)
        if normcase:
            string = string.lower()
        if string not in allowed:
            raise OptionError('Value for option %s must be one of %s' %
                              (optname, ', '.join(map(str, allowed))))
        return string
    
    
    def get_bool_opt(options, optname, default=None):
        string = options.get(optname, default)
        if isinstance(string, bool):
            return string
        elif isinstance(string, int):
            return bool(string)
        elif not isinstance(string, basestring):
            raise OptionError('Invalid type %r for option %s; use '
                              '1/0, yes/no, true/false, on/off' % (
                              string, optname))
        elif string.lower() in ('1', 'yes', 'true', 'on'):
            return True
        elif string.lower() in ('0', 'no', 'false', 'off'):
            return False
        else:
            raise OptionError('Invalid value %r for option %s; use '
                              '1/0, yes/no, true/false, on/off' % (
                              string, optname))
    
    
    def get_int_opt(options, optname, default=None):
        string = options.get(optname, default)
        try:
            return int(string)
        except TypeError:
            raise OptionError('Invalid type %r for option %s; you '
                              'must give an integer value' % (
                              string, optname))
        except ValueError:
            raise OptionError('Invalid value %r for option %s; you '
                              'must give an integer value' % (
                              string, optname))
    
    
    def get_list_opt(options, optname, default=None):
        val = options.get(optname, default)
        if isinstance(val, basestring):
            return val.split()
        elif isinstance(val, (list, tuple)):
            return list(val)
        else:
            raise OptionError('Invalid type %r for option %s; you '
                              'must give a list value' % (
                              val, optname))
    
    
    def docstring_headline(obj):
        if not obj.__doc__:
            return ''
        res = []
        for line in obj.__doc__.strip().splitlines():
            if line.strip():
                res.append(" " + line.strip())
            else:
                break
        return ''.join(res).lstrip()
    
    
    def make_analysator(f):
        """
        Return a static text analysation function that
        returns float values.
        """
        def text_analyse(text):
            try:
                rv = f(text)
            except Exception:
                return 0.0
            if not rv:
                return 0.0
            try:
                return min(1.0, max(0.0, float(rv)))
            except (ValueError, TypeError):
                return 0.0
        text_analyse.__doc__ = f.__doc__
        return staticmethod(text_analyse)
    
    
    def shebang_matches(text, regex):
        """
        Check if the given regular expression matches the last part of the
        shebang if one exists.
    
            >>> from pygments.util import shebang_matches
            >>> shebang_matches('#!/usr/bin/env python', r'python(2\.\d)?')
            True
            >>> shebang_matches('#!/usr/bin/python2.4', r'python(2\.\d)?')
            True
            >>> shebang_matches('#!/usr/bin/python-ruby', r'python(2\.\d)?')
            False
            >>> shebang_matches('#!/usr/bin/python/ruby', r'python(2\.\d)?')
            False
            >>> shebang_matches('#!/usr/bin/startsomethingwith python',
            ...                 r'python(2\.\d)?')
            True
    
        It also checks for common windows executable file extensions::
    
            >>> shebang_matches('#!C:\\Python2.4\\Python.exe', r'python(2\.\d)?')
            True
    
        Parameters (``'-f'`` or ``'--foo'`` are ignored so ``'perl'`` does
        the same as ``'perl -e'``)
    
        Note that this method automatically searches the whole string (eg:
        the regular expression is wrapped in ``'^$'``)
        """
        index = text.find('\n')
        if index >= 0:
            first_line = text[:index].lower()
        else:
            first_line = text.lower()
        if first_line.startswith('#!'):
            try:
                found = [x for x in split_path_re.split(first_line[2:].strip())
                         if x and not x.startswith('-')][-1]
            except IndexError:
                return False
            regex = re.compile('^%s(\.(exe|cmd|bat|bin))?$' % regex, re.IGNORECASE)
            if regex.search(found) is not None:
                return True
        return False
    
    
    def doctype_matches(text, regex):
        """
        Check if the doctype matches a regular expression (if present).
        Note that this method only checks the first part of a DOCTYPE.
        eg: 'html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"'
        """
        m = doctype_lookup_re.match(text)
        if m is None:
            return False
        doctype = m.group(2)
        return re.compile(regex).match(doctype.strip()) is not None
    
    
    def html_doctype_matches(text):
        """
        Check if the file looks like it has a html doctype.
        """
        return doctype_matches(text, r'html\s+PUBLIC\s+"-//W3C//DTD X?HTML.*')
    
    
    _looks_like_xml_cache = {}
    def looks_like_xml(text):
        """
        Check if a doctype exists or if we have some tags.
        """
        key = hash(text)
        try:
            return _looks_like_xml_cache[key]
        except KeyError:
            m = doctype_lookup_re.match(text)
            if m is not None:
                return True
            rv = tag_re.search(text[:1000]) is not None
            _looks_like_xml_cache[key] = rv
            return rv
    
    # Python 2/3 compatibility
    
    if sys.version_info < (3,0):
        b = bytes = str
        u_prefix = 'u'
        import StringIO, cStringIO
        BytesIO = cStringIO.StringIO
        StringIO = StringIO.StringIO
        uni_open = codecs.open
    else:
        import builtins
        bytes = builtins.bytes
        u_prefix = ''
        def b(s):
            if isinstance(s, str):
                return bytes(map(ord, s))
            elif isinstance(s, bytes):
                return s
            else:
                raise TypeError("Invalid argument %r for b()" % (s,))
        import io
        BytesIO = io.BytesIO
        StringIO = io.StringIO
        uni_open = builtins.open
    eric4-4.5.18/eric/ThirdParty/Pygments/pygments/PaxHeaders.8617/style.py0000644000175000001440000000013212261012652023766 xustar000000000000000030 mtime=1388582314.136104153
    30 atime=1389081085.563724349
    30 ctime=1389081086.311724332
    eric4-4.5.18/eric/ThirdParty/Pygments/pygments/style.py0000644000175000001440000000724112261012652023524 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*-
    """
        pygments.style
        ~~~~~~~~~~~~~~
    
        Basic style object.
    
        :copyright: Copyright 2006-2012 by the Pygments team, see AUTHORS.
        :license: BSD, see LICENSE for details.
    """
    
    from pygments.token import Token, STANDARD_TYPES
    
    
    class StyleMeta(type):
    
        def __new__(mcs, name, bases, dct):
            obj = type.__new__(mcs, name, bases, dct)
            for token in STANDARD_TYPES:
                if token not in obj.styles:
                    obj.styles[token] = ''
    
            def colorformat(text):
                if text[0:1] == '#':
                    col = text[1:]
                    if len(col) == 6:
                        return col
                    elif len(col) == 3:
                        return col[0]+'0'+col[1]+'0'+col[2]+'0'
                elif text == '':
                    return ''
                assert False, "wrong color format %r" % text
    
            _styles = obj._styles = {}
    
            for ttype in obj.styles:
                for token in ttype.split():
                    if token in _styles:
                        continue
                    ndef = _styles.get(token.parent, None)
                    styledefs = obj.styles.get(token, '').split()
                    if  not ndef or token is None:
                        ndef = ['', 0, 0, 0, '', '', 0, 0, 0]
                    elif 'noinherit' in styledefs and token is not Token:
                        ndef = _styles[Token][:]
                    else:
                        ndef = ndef[:]
                    _styles[token] = ndef
                    for styledef in obj.styles.get(token, '').split():
                        if styledef == 'noinherit':
                            pass
                        elif styledef == 'bold':
                            ndef[1] = 1
                        elif styledef == 'nobold':
                            ndef[1] = 0
                        elif styledef == 'italic':
                            ndef[2] = 1
                        elif styledef == 'noitalic':
                            ndef[2] = 0
                        elif styledef == 'underline':
                            ndef[3] = 1
                        elif styledef == 'nounderline':
                            ndef[3] = 0
                        elif styledef[:3] == 'bg:':
                            ndef[4] = colorformat(styledef[3:])
                        elif styledef[:7] == 'border:':
                            ndef[5] = colorformat(styledef[7:])
                        elif styledef == 'roman':
                            ndef[6] = 1
                        elif styledef == 'sans':
                            ndef[7] = 1
                        elif styledef == 'mono':
                            ndef[8] = 1
                        else:
                            ndef[0] = colorformat(styledef)
    
            return obj
    
        def style_for_token(cls, token):
            t = cls._styles[token]
            return {
                'color':        t[0] or None,
                'bold':         bool(t[1]),
                'italic':       bool(t[2]),
                'underline':    bool(t[3]),
                'bgcolor':      t[4] or None,
                'border':       t[5] or None,
                'roman':        bool(t[6]) or None,
                'sans':         bool(t[7]) or None,
                'mono':         bool(t[8]) or None,
            }
    
        def list_styles(cls):
            return list(cls)
    
        def styles_token(cls, ttype):
            return ttype in cls._styles
    
        def __iter__(cls):
            for token in cls._styles:
                yield token, cls.style_for_token(token)
    
        def __len__(cls):
            return len(cls._styles)
    
    
    class Style(object):
        __metaclass__ = StyleMeta
    
        #: overall background color (``None`` means transparent)
        background_color = '#ffffff'
    
        #: highlight background color
        highlight_color = '#ffffcc'
    
        #: Style definitions for individual token types.
        styles = {}
    eric4-4.5.18/eric/ThirdParty/Pygments/pygments/PaxHeaders.8617/lexers0000644000175000001440000000013212261012661023501 xustar000000000000000030 mtime=1388582321.432195818
    30 atime=1389081086.015724339
    30 ctime=1389081086.315724332
    eric4-4.5.18/eric/ThirdParty/Pygments/pygments/lexers/0000755000175000001440000000000012261012661023310 5ustar00detlevusers00000000000000eric4-4.5.18/eric/ThirdParty/Pygments/pygments/lexers/PaxHeaders.8617/web.py0000644000175000001440000000013212261012652024705 xustar000000000000000030 mtime=1388582314.153104368
    30 atime=1389081085.563724349
    30 ctime=1389081086.311724332
    eric4-4.5.18/eric/ThirdParty/Pygments/pygments/lexers/web.py0000644000175000001440000033206112261012652024444 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*-
    """
        pygments.lexers.web
        ~~~~~~~~~~~~~~~~~~~
    
        Lexers for web-related languages and markup.
    
        :copyright: Copyright 2006-2012 by the Pygments team, see AUTHORS.
        :license: BSD, see LICENSE for details.
    """
    
    import re
    import copy
    
    from pygments.lexer import RegexLexer, ExtendedRegexLexer, bygroups, using, \
         include, this
    from pygments.token import Text, Comment, Operator, Keyword, Name, String, \
         Number, Other, Punctuation, Literal
    from pygments.util import get_bool_opt, get_list_opt, looks_like_xml, \
                              html_doctype_matches
    from pygments.lexers.agile import RubyLexer
    from pygments.lexers.compiled import ScalaLexer
    
    
    __all__ = ['HtmlLexer', 'XmlLexer', 'JavascriptLexer', 'JSONLexer', 'CssLexer',
               'PhpLexer', 'ActionScriptLexer', 'XsltLexer', 'ActionScript3Lexer',
               'MxmlLexer', 'HaxeLexer', 'HamlLexer', 'SassLexer', 'ScssLexer',
               'ObjectiveJLexer', 'CoffeeScriptLexer', 'DuelLexer', 'ScamlLexer',
               'JadeLexer', 'XQueryLexer', 'DtdLexer', 'DartLexer']
    
    
    class JavascriptLexer(RegexLexer):
        """
        For JavaScript source code.
        """
    
        name = 'JavaScript'
        aliases = ['js', 'javascript']
        filenames = ['*.js', ]
        mimetypes = ['application/javascript', 'application/x-javascript',
                     'text/x-javascript', 'text/javascript', ]
    
        flags = re.DOTALL
        tokens = {
            'commentsandwhitespace': [
                (r'\s+', Text),
                (r'', Comment, '#pop'),
                ('-', Comment),
            ],
            'tag': [
                (r'\s+', Text),
                (r'[a-zA-Z0-9_:-]+\s*=', Name.Attribute, 'attr'),
                (r'[a-zA-Z0-9_:-]+', Name.Attribute),
                (r'/?\s*>', Name.Tag, '#pop'),
            ],
            'script-content': [
                (r'<\s*/\s*script\s*>', Name.Tag, '#pop'),
                (r'.+?(?=<\s*/\s*script\s*>)', using(JavascriptLexer)),
            ],
            'style-content': [
                (r'<\s*/\s*style\s*>', Name.Tag, '#pop'),
                (r'.+?(?=<\s*/\s*style\s*>)', using(CssLexer)),
            ],
            'attr': [
                ('".*?"', String, '#pop'),
                ("'.*?'", String, '#pop'),
                (r'[^\s>]+', String, '#pop'),
            ],
        }
    
        def analyse_text(text):
            if html_doctype_matches(text):
                return 0.5
    
    
    class PhpLexer(RegexLexer):
        """
        For `PHP `_ source code.
        For PHP embedded in HTML, use the `HtmlPhpLexer`.
    
        Additional options accepted:
    
        `startinline`
            If given and ``True`` the lexer starts highlighting with
            php code (i.e.: no starting ``>> from pygments.lexers._phpbuiltins import MODULES
                >>> MODULES.keys()
                ['PHP Options/Info', 'Zip', 'dba', ...]
    
            In fact the names of those modules match the module names from
            the php documentation.
        """
    
        name = 'PHP'
        aliases = ['php', 'php3', 'php4', 'php5']
        filenames = ['*.php', '*.php[345]']
        mimetypes = ['text/x-php']
    
        flags = re.IGNORECASE | re.DOTALL | re.MULTILINE
        tokens = {
            'root': [
                (r'<\?(php)?', Comment.Preproc, 'php'),
                (r'[^<]+', Other),
                (r'<', Other)
            ],
            'php': [
                (r'\?>', Comment.Preproc, '#pop'),
                (r'<<<(\'?)([a-zA-Z_][a-zA-Z0-9_]*)\1\n.*?\n\2\;?\n', String),
                (r'\s+', Text),
                (r'#.*?\n', Comment.Single),
                (r'//.*?\n', Comment.Single),
                # put the empty comment here, it is otherwise seen as
                # the start of a docstring
                (r'/\*\*/', Comment.Multiline),
                (r'/\*\*.*?\*/', String.Doc),
                (r'/\*.*?\*/', Comment.Multiline),
                (r'(->|::)(\s*)([a-zA-Z_][a-zA-Z0-9_]*)',
                 bygroups(Operator, Text, Name.Attribute)),
                (r'[~!%^&*+=|:.<>/?@-]+', Operator),
                (r'[\[\]{}();,]+', Punctuation),
                (r'(class)(\s+)', bygroups(Keyword, Text), 'classname'),
                (r'(function)(\s*)(?=\()', bygroups(Keyword, Text)),
                (r'(function)(\s+)(&?)(\s*)',
                  bygroups(Keyword, Text, Operator, Text), 'functionname'),
                (r'(const)(\s+)([a-zA-Z_][a-zA-Z0-9_]*)',
                  bygroups(Keyword, Text, Name.Constant)),
                (r'(and|E_PARSE|old_function|E_ERROR|or|as|E_WARNING|parent|'
                 r'eval|PHP_OS|break|exit|case|extends|PHP_VERSION|cfunction|'
                 r'FALSE|print|for|require|continue|foreach|require_once|'
                 r'declare|return|default|static|do|switch|die|stdClass|'
                 r'echo|else|TRUE|elseif|var|empty|if|xor|enddeclare|include|'
                 r'virtual|endfor|include_once|while|endforeach|global|__FILE__|'
                 r'endif|list|__LINE__|endswitch|new|__sleep|endwhile|not|'
                 r'array|__wakeup|E_ALL|NULL|final|php_user_filter|interface|'
                 r'implements|public|private|protected|abstract|clone|try|'
                 r'catch|throw|this|use|namespace)\b', Keyword),
                (r'(true|false|null)\b', Keyword.Constant),
                (r'\$\{\$+[a-zA-Z_][a-zA-Z0-9_]*\}', Name.Variable),
                (r'\$+[a-zA-Z_][a-zA-Z0-9_]*', Name.Variable),
                (r'[\\a-zA-Z_][\\a-zA-Z0-9_]*', Name.Other),
                (r'(\d+\.\d*|\d*\.\d+)([eE][+-]?[0-9]+)?', Number.Float),
                (r'\d+[eE][+-]?[0-9]+', Number.Float),
                (r'0[0-7]+', Number.Oct),
                (r'0[xX][a-fA-F0-9]+', Number.Hex),
                (r'\d+', Number.Integer),
                (r"'([^'\\]*(?:\\.[^'\\]*)*)'", String.Single),
                (r'`([^`\\]*(?:\\.[^`\\]*)*)`', String.Backtick),
                (r'"', String.Double, 'string'),
            ],
            'classname': [
                (r'[a-zA-Z_][\\a-zA-Z0-9_]*', Name.Class, '#pop')
            ],
            'functionname': [
                (r'[a-zA-Z_][a-zA-Z0-9_]*', Name.Function, '#pop')
            ],
            'string': [
                (r'"', String.Double, '#pop'),
                (r'[^{$"\\]+', String.Double),
                (r'\\([nrt\"$\\]|[0-7]{1,3}|x[0-9A-Fa-f]{1,2})', String.Escape),
                (r'\$[a-zA-Z_][a-zA-Z0-9_]*(\[\S+\]|->[a-zA-Z_][a-zA-Z0-9_]*)?',
                 String.Interpol),
                (r'(\{\$\{)(.*?)(\}\})',
                 bygroups(String.Interpol, using(this, _startinline=True),
                          String.Interpol)),
                (r'(\{)(\$.*?)(\})',
                 bygroups(String.Interpol, using(this, _startinline=True),
                          String.Interpol)),
                (r'(\$\{)(\S+)(\})',
                 bygroups(String.Interpol, Name.Variable, String.Interpol)),
                (r'[${\\]+', String.Double)
            ],
        }
    
        def __init__(self, **options):
            self.funcnamehighlighting = get_bool_opt(
                options, 'funcnamehighlighting', True)
            self.disabledmodules = get_list_opt(
                options, 'disabledmodules', ['unknown'])
            self.startinline = get_bool_opt(options, 'startinline', False)
    
            # private option argument for the lexer itself
            if '_startinline' in options:
                self.startinline = options.pop('_startinline')
    
            # collect activated functions in a set
            self._functions = set()
            if self.funcnamehighlighting:
                from pygments.lexers._phpbuiltins import MODULES
                for key, value in MODULES.iteritems():
                    if key not in self.disabledmodules:
                        self._functions.update(value)
            RegexLexer.__init__(self, **options)
    
        def get_tokens_unprocessed(self, text):
            stack = ['root']
            if self.startinline:
                stack.append('php')
            for index, token, value in \
                RegexLexer.get_tokens_unprocessed(self, text, stack):
                if token is Name.Other:
                    if value in self._functions:
                        yield index, Name.Builtin, value
                        continue
                yield index, token, value
    
        def analyse_text(text):
            rv = 0.0
            if re.search(r'<\?(?!xml)', text):
                rv += 0.3
            if '?>' in text:
                rv += 0.1
            return rv
    
    
    class DtdLexer(RegexLexer):
        """
        A lexer for DTDs (Document Type Definitions).
    
        *New in Pygments 1.5.*
        """
    
        flags = re.MULTILINE | re.DOTALL
    
        name = 'DTD'
        aliases = ['dtd']
        filenames = ['*.dtd']
        mimetypes = ['application/xml-dtd']
    
        tokens = {
            'root': [
                include('common'),
    
                (r'(\s]+)',
                    bygroups(Keyword, Text, Name.Tag)),
                (r'PUBLIC|SYSTEM', Keyword.Constant),
                (r'[\[\]>]', Keyword),
            ],
    
            'common': [
                (r'\s+', Text),
                (r'(%|&)[^;]*;', Name.Entity),
                ('', Comment, '#pop'),
                ('-', Comment),
            ],
    
            'element': [
                include('common'),
                (r'EMPTY|ANY|#PCDATA', Keyword.Constant),
                (r'[^>\s\|()?+*,]+', Name.Tag),
                (r'>', Keyword, '#pop'),
            ],
    
            'attlist': [
                include('common'),
                (r'CDATA|IDREFS|IDREF|ID|NMTOKENS|NMTOKEN|ENTITIES|ENTITY|NOTATION', Keyword.Constant),
                (r'#REQUIRED|#IMPLIED|#FIXED', Keyword.Constant),
                (r'xml:space|xml:lang', Keyword.Reserved),
                (r'[^>\s\|()?+*,]+', Name.Attribute),
                (r'>', Keyword, '#pop'),
            ],
    
            'entity': [
                include('common'),
                (r'SYSTEM|PUBLIC|NDATA', Keyword.Constant),
                (r'[^>\s\|()?+*,]+', Name.Entity),
                (r'>', Keyword, '#pop'),
            ],
    
            'notation': [
                include('common'),
                (r'SYSTEM|PUBLIC', Keyword.Constant),
                (r'[^>\s\|()?+*,]+', Name.Attribute),
                (r'>', Keyword, '#pop'),
            ],
        }
    
        def analyse_text(text):
            if not looks_like_xml(text) and \
                ('', Comment.Preproc),
                ('', Comment, '#pop'),
                ('-', Comment),
            ],
            'tag': [
                (r'\s+', Text),
                (r'[a-zA-Z0-9_.:-]+\s*=', Name.Attribute, 'attr'),
                (r'/?\s*>', Name.Tag, '#pop'),
            ],
            'attr': [
                ('\s+', Text),
                ('".*?"', String, '#pop'),
                ("'.*?'", String, '#pop'),
                (r'[^\s>]+', String, '#pop'),
            ],
        }
    
        def analyse_text(text):
            if looks_like_xml(text):
                return 0.5
    
    
    class XsltLexer(XmlLexer):
        '''
        A lexer for XSLT.
    
        *New in Pygments 0.10.*
        '''
    
        name = 'XSLT'
        aliases = ['xslt']
        filenames = ['*.xsl', '*.xslt']
        mimetypes = ['application/xsl+xml', 'application/xslt+xml']
    
        EXTRA_KEYWORDS = set([
            'apply-imports', 'apply-templates', 'attribute',
            'attribute-set', 'call-template', 'choose', 'comment',
            'copy', 'copy-of', 'decimal-format', 'element', 'fallback',
            'for-each', 'if', 'import', 'include', 'key', 'message',
            'namespace-alias', 'number', 'otherwise', 'output', 'param',
            'preserve-space', 'processing-instruction', 'sort',
            'strip-space', 'stylesheet', 'template', 'text', 'transform',
            'value-of', 'variable', 'when', 'with-param'
        ])
    
        def get_tokens_unprocessed(self, text):
            for index, token, value in XmlLexer.get_tokens_unprocessed(self, text):
                m = re.match(']*)/?>?', value)
    
                if token is Name.Tag and m and m.group(1) in self.EXTRA_KEYWORDS:
                    yield index, Keyword, value
                else:
                    yield index, token, value
    
        def analyse_text(text):
            if looks_like_xml(text) and ' tags is highlighted by the appropriate lexer.
        """
        flags = re.MULTILINE | re.DOTALL
        name = 'MXML'
        aliases = ['mxml']
        filenames = ['*.mxml']
        mimetimes = ['text/xml', 'application/xml']
    
        tokens = {
                'root': [
                    ('[^<&]+', Text),
                    (r'&\S*?;', Name.Entity),
                    (r'(\<\!\[CDATA\[)(.*?)(\]\]\>)',
                     bygroups(String, using(ActionScript3Lexer), String)),
                    ('', Comment, '#pop'),
                    ('-', Comment),
                ],
                'tag': [
                    (r'\s+', Text),
                    (r'[a-zA-Z0-9_.:-]+\s*=', Name.Attribute, 'attr'),
                    (r'/?\s*>', Name.Tag, '#pop'),
                ],
                'attr': [
                    ('\s+', Text),
                    ('".*?"', String, '#pop'),
                    ("'.*?'", String, '#pop'),
                    (r'[^\s>]+', String, '#pop'),
                ],
            }
    
    
    class HaxeLexer(RegexLexer):
        """
        For haXe source code (http://haxe.org/).
        """
    
        name = 'haXe'
        aliases = ['hx', 'haXe']
        filenames = ['*.hx']
        mimetypes = ['text/haxe']
    
        ident = r'(?:[a-zA-Z_][a-zA-Z0-9_]*)'
        typeid = r'(?:(?:[a-z0-9_\.])*[A-Z_][A-Za-z0-9_]*)'
        key_prop = r'(?:default|null|never)'
        key_decl_mod = r'(?:public|private|override|static|inline|extern|dynamic)'
    
        flags = re.DOTALL | re.MULTILINE
    
        tokens = {
            'root': [
                include('whitespace'),
                include('comments'),
                (key_decl_mod, Keyword.Declaration),
                include('enumdef'),
                include('typedef'),
                include('classdef'),
                include('imports'),
            ],
    
            # General constructs
            'comments': [
                (r'//.*?\n', Comment.Single),
                (r'/\*.*?\*/', Comment.Multiline),
                (r'#[^\n]*', Comment.Preproc),
            ],
            'whitespace': [
                include('comments'),
                (r'\s+', Text),
            ],
            'codekeywords': [
                (r'\b(if|else|while|do|for|in|break|continue|'
                 r'return|switch|case|try|catch|throw|null|trace|'
                 r'new|this|super|untyped|cast|callback|here)\b',
                 Keyword.Reserved),
            ],
            'literals': [
                (r'0[xX][0-9a-fA-F]+', Number.Hex),
                (r'[0-9]+', Number.Integer),
                (r'[0-9][0-9]*\.[0-9]+([eE][0-9]+)?[fd]?', Number.Float),
                (r"'(\\\\|\\'|[^'])*'", String.Single),
                (r'"(\\\\|\\"|[^"])*"', String.Double),
                (r'~/([^\n])*?/[gisx]*', String.Regex),
                (r'\b(true|false|null)\b', Keyword.Constant),
            ],
            'codeblock': [
              include('whitespace'),
              include('new'),
              include('case'),
              include('anonfundef'),
              include('literals'),
              include('vardef'),
              include('codekeywords'),
              (r'[();,\[\]]', Punctuation),
              (r'(?:=|\+=|-=|\*=|/=|%=|&=|\|=|\^=|<<=|>>=|>>>=|\|\||&&|'
               r'\.\.\.|==|!=|>|<|>=|<=|\||&|\^|<<|>>>|>>|\+|\-|\*|/|%|'
               r'!|\+\+|\-\-|~|\.|\?|\:)',
               Operator),
              (ident, Name),
    
              (r'}', Punctuation,'#pop'),
              (r'{', Punctuation,'#push'),
            ],
    
            # Instance/Block level constructs
            'propertydef': [
                (r'(\()(' + key_prop + ')(,)(' + key_prop + ')(\))',
                 bygroups(Punctuation, Keyword.Reserved, Punctuation,
                          Keyword.Reserved, Punctuation)),
            ],
            'new': [
                (r'\bnew\b', Keyword, 'typedecl'),
            ],
            'case': [
                (r'\b(case)(\s+)(' + ident + ')(\s*)(\()',
                 bygroups(Keyword.Reserved, Text, Name, Text, Punctuation),
                 'funargdecl'),
            ],
            'vardef': [
                (r'\b(var)(\s+)(' + ident + ')',
                 bygroups(Keyword.Declaration, Text, Name.Variable), 'vardecl'),
            ],
            'vardecl': [
                include('whitespace'),
                include('typelabel'),
                (r'=', Operator,'#pop'),
                (r';', Punctuation,'#pop'),
            ],
            'instancevardef': [
                (key_decl_mod,Keyword.Declaration),
                (r'\b(var)(\s+)(' + ident + ')',
                 bygroups(Keyword.Declaration, Text, Name.Variable.Instance),
                 'instancevardecl'),
            ],
            'instancevardecl': [
                include('vardecl'),
                include('propertydef'),
            ],
    
            'anonfundef': [
                (r'\bfunction\b', Keyword.Declaration, 'fundecl'),
            ],
            'instancefundef': [
                (key_decl_mod, Keyword.Declaration),
                (r'\b(function)(\s+)(' + ident + ')',
                 bygroups(Keyword.Declaration, Text, Name.Function), 'fundecl'),
            ],
            'fundecl': [
                include('whitespace'),
                include('typelabel'),
                include('generictypedecl'),
                (r'\(',Punctuation,'funargdecl'),
                (r'(?=[a-zA-Z0-9_])',Text,'#pop'),
                (r'{',Punctuation,('#pop','codeblock')),
                (r';',Punctuation,'#pop'),
            ],
            'funargdecl': [
                include('whitespace'),
                (ident, Name.Variable),
                include('typelabel'),
                include('literals'),
                (r'=', Operator),
                (r',', Punctuation),
                (r'\?', Punctuation),
                (r'\)', Punctuation, '#pop'),
            ],
    
            'typelabel': [
                (r':', Punctuation, 'type'),
            ],
            'typedecl': [
                include('whitespace'),
                (typeid, Name.Class),
                (r'<', Punctuation, 'generictypedecl'),
                (r'(?=[{}()=,a-z])', Text,'#pop'),
            ],
            'type': [
                include('whitespace'),
                (typeid, Name.Class),
                (r'<', Punctuation, 'generictypedecl'),
                (r'->', Keyword.Type),
                (r'(?=[{}(),;=])', Text, '#pop'),
            ],
            'generictypedecl': [
                include('whitespace'),
                (typeid, Name.Class),
                (r'<', Punctuation, '#push'),
                (r'>', Punctuation, '#pop'),
                (r',', Punctuation),
            ],
    
            # Top level constructs
            'imports': [
                (r'(package|import|using)(\s+)([^;]+)(;)',
                 bygroups(Keyword.Namespace, Text, Name.Namespace,Punctuation)),
            ],
            'typedef': [
                (r'typedef', Keyword.Declaration, ('typedefprebody', 'typedecl')),
            ],
            'typedefprebody': [
                include('whitespace'),
                (r'(=)(\s*)({)', bygroups(Punctuation, Text, Punctuation),
                 ('#pop', 'typedefbody')),
            ],
            'enumdef': [
                (r'enum', Keyword.Declaration, ('enumdefprebody', 'typedecl')),
            ],
            'enumdefprebody': [
                include('whitespace'),
                (r'{', Punctuation, ('#pop','enumdefbody')),
            ],
            'classdef': [
                (r'class', Keyword.Declaration, ('classdefprebody', 'typedecl')),
            ],
            'classdefprebody': [
                include('whitespace'),
                (r'(extends|implements)', Keyword.Declaration,'typedecl'),
                (r'{', Punctuation, ('#pop', 'classdefbody')),
            ],
            'interfacedef': [
                (r'interface', Keyword.Declaration,
                 ('interfacedefprebody', 'typedecl')),
            ],
            'interfacedefprebody': [
                include('whitespace'),
                (r'(extends)', Keyword.Declaration, 'typedecl'),
                (r'{', Punctuation, ('#pop', 'classdefbody')),
            ],
    
            'typedefbody': [
              include('whitespace'),
              include('instancevardef'),
              include('instancefundef'),
              (r'>', Punctuation, 'typedecl'),
              (r',', Punctuation),
              (r'}', Punctuation, '#pop'),
            ],
            'enumdefbody': [
              include('whitespace'),
              (ident, Name.Variable.Instance),
              (r'\(', Punctuation, 'funargdecl'),
              (r';', Punctuation),
              (r'}', Punctuation, '#pop'),
            ],
            'classdefbody': [
              include('whitespace'),
              include('instancevardef'),
              include('instancefundef'),
              (r'}', Punctuation, '#pop'),
              include('codeblock'),
            ],
        }
    
        def analyse_text(text):
            if re.match(r'\w+\s*:\s*\w', text): return 0.3
    
    
    def _indentation(lexer, match, ctx):
        indentation = match.group(0)
        yield match.start(), Text, indentation
        ctx.last_indentation = indentation
        ctx.pos = match.end()
    
        if hasattr(ctx, 'block_state') and ctx.block_state and \
                indentation.startswith(ctx.block_indentation) and \
                indentation != ctx.block_indentation:
            ctx.stack.append(ctx.block_state)
        else:
            ctx.block_state = None
            ctx.block_indentation = None
            ctx.stack.append('content')
    
    def _starts_block(token, state):
        def callback(lexer, match, ctx):
            yield match.start(), token, match.group(0)
    
            if hasattr(ctx, 'last_indentation'):
                ctx.block_indentation = ctx.last_indentation
            else:
                ctx.block_indentation = ''
    
            ctx.block_state = state
            ctx.pos = match.end()
    
        return callback
    
    
    class HamlLexer(ExtendedRegexLexer):
        """
        For Haml markup.
    
        *New in Pygments 1.3.*
        """
    
        name = 'Haml'
        aliases = ['haml', 'HAML']
        filenames = ['*.haml']
        mimetypes = ['text/x-haml']
    
        flags = re.IGNORECASE
        # Haml can include " |\n" anywhere,
        # which is ignored and used to wrap long lines.
        # To accomodate this, use this custom faux dot instead.
        _dot = r'(?: \|\n(?=.* \|)|.)'
    
        # In certain places, a comma at the end of the line
        # allows line wrapping as well.
        _comma_dot = r'(?:,\s*\n|' + _dot + ')'
        tokens = {
            'root': [
                (r'[ \t]*\n', Text),
                (r'[ \t]*', _indentation),
            ],
    
            'css': [
                (r'\.[a-z0-9_:-]+', Name.Class, 'tag'),
                (r'\#[a-z0-9_:-]+', Name.Function, 'tag'),
            ],
    
            'eval-or-plain': [
                (r'[&!]?==', Punctuation, 'plain'),
                (r'([&!]?[=~])(' + _comma_dot + r'*\n)',
                 bygroups(Punctuation, using(RubyLexer)),
                 'root'),
                (r'', Text, 'plain'),
            ],
    
            'content': [
                include('css'),
                (r'%[a-z0-9_:-]+', Name.Tag, 'tag'),
                (r'!!!' + _dot + r'*\n', Name.Namespace, '#pop'),
                (r'(/)(\[' + _dot + '*?\])(' + _dot + r'*\n)',
                 bygroups(Comment, Comment.Special, Comment),
                 '#pop'),
                (r'/' + _dot + r'*\n', _starts_block(Comment, 'html-comment-block'),
                 '#pop'),
                (r'-#' + _dot + r'*\n', _starts_block(Comment.Preproc,
                                                     'haml-comment-block'), '#pop'),
                (r'(-)(' + _comma_dot + r'*\n)',
                 bygroups(Punctuation, using(RubyLexer)),
                 '#pop'),
                (r':' + _dot + r'*\n', _starts_block(Name.Decorator, 'filter-block'),
                 '#pop'),
                include('eval-or-plain'),
            ],
    
            'tag': [
                include('css'),
                (r'\{(,\n|' + _dot + ')*?\}', using(RubyLexer)),
                (r'\[' + _dot + '*?\]', using(RubyLexer)),
                (r'\(', Text, 'html-attributes'),
                (r'/[ \t]*\n', Punctuation, '#pop:2'),
                (r'[<>]{1,2}(?=[ \t=])', Punctuation),
                include('eval-or-plain'),
            ],
    
            'plain': [
                (r'([^#\n]|#[^{\n]|(\\\\)*\\#\{)+', Text),
                (r'(#\{)(' + _dot + '*?)(\})',
                 bygroups(String.Interpol, using(RubyLexer), String.Interpol)),
                (r'\n', Text, 'root'),
            ],
    
            'html-attributes': [
                (r'\s+', Text),
                (r'[a-z0-9_:-]+[ \t]*=', Name.Attribute, 'html-attribute-value'),
                (r'[a-z0-9_:-]+', Name.Attribute),
                (r'\)', Text, '#pop'),
            ],
    
            'html-attribute-value': [
                (r'[ \t]+', Text),
                (r'[a-z0-9_]+', Name.Variable, '#pop'),
                (r'@[a-z0-9_]+', Name.Variable.Instance, '#pop'),
                (r'\$[a-z0-9_]+', Name.Variable.Global, '#pop'),
                (r"'(\\\\|\\'|[^'\n])*'", String, '#pop'),
                (r'"(\\\\|\\"|[^"\n])*"', String, '#pop'),
            ],
    
            'html-comment-block': [
                (_dot + '+', Comment),
                (r'\n', Text, 'root'),
            ],
    
            'haml-comment-block': [
                (_dot + '+', Comment.Preproc),
                (r'\n', Text, 'root'),
            ],
    
            'filter-block': [
                (r'([^#\n]|#[^{\n]|(\\\\)*\\#\{)+', Name.Decorator),
                (r'(#\{)(' + _dot + '*?)(\})',
                 bygroups(String.Interpol, using(RubyLexer), String.Interpol)),
                (r'\n', Text, 'root'),
            ],
        }
    
    
    common_sass_tokens = {
        'value': [
            (r'[ \t]+', Text),
            (r'[!$][\w-]+', Name.Variable),
            (r'url\(', String.Other, 'string-url'),
            (r'[a-z_-][\w-]*(?=\()', Name.Function),
            (r'(azimuth|background-attachment|background-color|'
             r'background-image|background-position|background-repeat|'
             r'background|border-bottom-color|border-bottom-style|'
             r'border-bottom-width|border-left-color|border-left-style|'
             r'border-left-width|border-right|border-right-color|'
             r'border-right-style|border-right-width|border-top-color|'
             r'border-top-style|border-top-width|border-bottom|'
             r'border-collapse|border-left|border-width|border-color|'
             r'border-spacing|border-style|border-top|border|caption-side|'
             r'clear|clip|color|content|counter-increment|counter-reset|'
             r'cue-after|cue-before|cue|cursor|direction|display|'
             r'elevation|empty-cells|float|font-family|font-size|'
             r'font-size-adjust|font-stretch|font-style|font-variant|'
             r'font-weight|font|height|letter-spacing|line-height|'
             r'list-style-type|list-style-image|list-style-position|'
             r'list-style|margin-bottom|margin-left|margin-right|'
             r'margin-top|margin|marker-offset|marks|max-height|max-width|'
             r'min-height|min-width|opacity|orphans|outline|outline-color|'
             r'outline-style|outline-width|overflow|padding-bottom|'
             r'padding-left|padding-right|padding-top|padding|page|'
             r'page-break-after|page-break-before|page-break-inside|'
             r'pause-after|pause-before|pause|pitch|pitch-range|'
             r'play-during|position|quotes|richness|right|size|'
             r'speak-header|speak-numeral|speak-punctuation|speak|'
             r'speech-rate|stress|table-layout|text-align|text-decoration|'
             r'text-indent|text-shadow|text-transform|top|unicode-bidi|'
             r'vertical-align|visibility|voice-family|volume|white-space|'
             r'widows|width|word-spacing|z-index|bottom|left|'
             r'above|absolute|always|armenian|aural|auto|avoid|baseline|'
             r'behind|below|bidi-override|blink|block|bold|bolder|both|'
             r'capitalize|center-left|center-right|center|circle|'
             r'cjk-ideographic|close-quote|collapse|condensed|continuous|'
             r'crop|crosshair|cross|cursive|dashed|decimal-leading-zero|'
             r'decimal|default|digits|disc|dotted|double|e-resize|embed|'
             r'extra-condensed|extra-expanded|expanded|fantasy|far-left|'
             r'far-right|faster|fast|fixed|georgian|groove|hebrew|help|'
             r'hidden|hide|higher|high|hiragana-iroha|hiragana|icon|'
             r'inherit|inline-table|inline|inset|inside|invert|italic|'
             r'justify|katakana-iroha|katakana|landscape|larger|large|'
             r'left-side|leftwards|level|lighter|line-through|list-item|'
             r'loud|lower-alpha|lower-greek|lower-roman|lowercase|ltr|'
             r'lower|low|medium|message-box|middle|mix|monospace|'
             r'n-resize|narrower|ne-resize|no-close-quote|no-open-quote|'
             r'no-repeat|none|normal|nowrap|nw-resize|oblique|once|'
             r'open-quote|outset|outside|overline|pointer|portrait|px|'
             r'relative|repeat-x|repeat-y|repeat|rgb|ridge|right-side|'
             r'rightwards|s-resize|sans-serif|scroll|se-resize|'
             r'semi-condensed|semi-expanded|separate|serif|show|silent|'
             r'slow|slower|small-caps|small-caption|smaller|soft|solid|'
             r'spell-out|square|static|status-bar|super|sw-resize|'
             r'table-caption|table-cell|table-column|table-column-group|'
             r'table-footer-group|table-header-group|table-row|'
             r'table-row-group|text|text-bottom|text-top|thick|thin|'
             r'transparent|ultra-condensed|ultra-expanded|underline|'
             r'upper-alpha|upper-latin|upper-roman|uppercase|url|'
             r'visible|w-resize|wait|wider|x-fast|x-high|x-large|x-loud|'
             r'x-low|x-small|x-soft|xx-large|xx-small|yes)\b', Name.Constant),
            (r'(indigo|gold|firebrick|indianred|darkolivegreen|'
             r'darkseagreen|mediumvioletred|mediumorchid|chartreuse|'
             r'mediumslateblue|springgreen|crimson|lightsalmon|brown|'
             r'turquoise|olivedrab|cyan|skyblue|darkturquoise|'
             r'goldenrod|darkgreen|darkviolet|darkgray|lightpink|'
             r'darkmagenta|lightgoldenrodyellow|lavender|yellowgreen|thistle|'
             r'violet|orchid|ghostwhite|honeydew|cornflowerblue|'
             r'darkblue|darkkhaki|mediumpurple|cornsilk|bisque|slategray|'
             r'darkcyan|khaki|wheat|deepskyblue|darkred|steelblue|aliceblue|'
             r'gainsboro|mediumturquoise|floralwhite|coral|lightgrey|'
             r'lightcyan|darksalmon|beige|azure|lightsteelblue|oldlace|'
             r'greenyellow|royalblue|lightseagreen|mistyrose|sienna|'
             r'lightcoral|orangered|navajowhite|palegreen|burlywood|'
             r'seashell|mediumspringgreen|papayawhip|blanchedalmond|'
             r'peru|aquamarine|darkslategray|ivory|dodgerblue|'
             r'lemonchiffon|chocolate|orange|forestgreen|slateblue|'
             r'mintcream|antiquewhite|darkorange|cadetblue|moccasin|'
             r'limegreen|saddlebrown|darkslateblue|lightskyblue|deeppink|'
             r'plum|darkgoldenrod|sandybrown|magenta|tan|'
             r'rosybrown|pink|lightblue|palevioletred|mediumseagreen|'
             r'dimgray|powderblue|seagreen|snow|mediumblue|midnightblue|'
             r'paleturquoise|palegoldenrod|whitesmoke|darkorchid|salmon|'
             r'lightslategray|lawngreen|lightgreen|tomato|hotpink|'
             r'lightyellow|lavenderblush|linen|mediumaquamarine|'
             r'blueviolet|peachpuff)\b', Name.Entity),
            (r'(black|silver|gray|white|maroon|red|purple|fuchsia|green|'
             r'lime|olive|yellow|navy|blue|teal|aqua)\b', Name.Builtin),
            (r'\!(important|default)', Name.Exception),
            (r'(true|false)', Name.Pseudo),
            (r'(and|or|not)', Operator.Word),
            (r'/\*', Comment.Multiline, 'inline-comment'),
            (r'//[^\n]*', Comment.Single),
            (r'\#[a-z0-9]{1,6}', Number.Hex),
            (r'(-?\d+)(\%|[a-z]+)?', bygroups(Number.Integer, Keyword.Type)),
            (r'(-?\d*\.\d+)(\%|[a-z]+)?', bygroups(Number.Float, Keyword.Type)),
            (r'#{', String.Interpol, 'interpolation'),
            (r'[~\^\*!&%<>\|+=@:,./?-]+', Operator),
            (r'[\[\]()]+', Punctuation),
            (r'"', String.Double, 'string-double'),
            (r"'", String.Single, 'string-single'),
            (r'[a-z_-][\w-]*', Name),
        ],
    
        'interpolation': [
            (r'\}', String.Interpol, '#pop'),
            include('value'),
        ],
    
        'selector': [
            (r'[ \t]+', Text),
            (r'\:', Name.Decorator, 'pseudo-class'),
            (r'\.', Name.Class, 'class'),
            (r'\#', Name.Namespace, 'id'),
            (r'[a-zA-Z0-9_-]+', Name.Tag),
            (r'#\{', String.Interpol, 'interpolation'),
            (r'&', Keyword),
            (r'[~\^\*!&\[\]\(\)<>\|+=@:;,./?-]', Operator),
            (r'"', String.Double, 'string-double'),
            (r"'", String.Single, 'string-single'),
        ],
    
        'string-double': [
            (r'(\\.|#(?=[^\n{])|[^\n"#])+', String.Double),
            (r'#\{', String.Interpol, 'interpolation'),
            (r'"', String.Double, '#pop'),
        ],
    
        'string-single': [
            (r"(\\.|#(?=[^\n{])|[^\n'#])+", String.Double),
            (r'#\{', String.Interpol, 'interpolation'),
            (r"'", String.Double, '#pop'),
        ],
    
        'string-url': [
            (r'(\\#|#(?=[^\n{])|[^\n#)])+', String.Other),
            (r'#\{', String.Interpol, 'interpolation'),
            (r'\)', String.Other, '#pop'),
        ],
    
        'pseudo-class': [
            (r'[\w-]+', Name.Decorator),
            (r'#\{', String.Interpol, 'interpolation'),
            (r'', Text, '#pop'),
        ],
    
        'class': [
            (r'[\w-]+', Name.Class),
            (r'#\{', String.Interpol, 'interpolation'),
            (r'', Text, '#pop'),
        ],
    
        'id': [
            (r'[\w-]+', Name.Namespace),
            (r'#\{', String.Interpol, 'interpolation'),
            (r'', Text, '#pop'),
        ],
    
        'for': [
            (r'(from|to|through)', Operator.Word),
            include('value'),
        ],
    }
    
    class SassLexer(ExtendedRegexLexer):
        """
        For Sass stylesheets.
    
        *New in Pygments 1.3.*
        """
    
        name = 'Sass'
        aliases = ['sass', 'SASS']
        filenames = ['*.sass']
        mimetypes = ['text/x-sass']
    
        flags = re.IGNORECASE
        tokens = {
            'root': [
                (r'[ \t]*\n', Text),
                (r'[ \t]*', _indentation),
            ],
    
            'content': [
                (r'//[^\n]*', _starts_block(Comment.Single, 'single-comment'),
                 'root'),
                (r'/\*[^\n]*', _starts_block(Comment.Multiline, 'multi-comment'),
                 'root'),
                (r'@import', Keyword, 'import'),
                (r'@for', Keyword, 'for'),
                (r'@(debug|warn|if|while)', Keyword, 'value'),
                (r'(@mixin)( [\w-]+)', bygroups(Keyword, Name.Function), 'value'),
                (r'(@include)( [\w-]+)', bygroups(Keyword, Name.Decorator), 'value'),
                (r'@extend', Keyword, 'selector'),
                (r'@[a-z0-9_-]+', Keyword, 'selector'),
                (r'=[\w-]+', Name.Function, 'value'),
                (r'\+[\w-]+', Name.Decorator, 'value'),
                (r'([!$][\w-]\w*)([ \t]*(?:(?:\|\|)?=|:))',
                 bygroups(Name.Variable, Operator), 'value'),
                (r':', Name.Attribute, 'old-style-attr'),
                (r'(?=.+?[=:]([^a-z]|$))', Name.Attribute, 'new-style-attr'),
                (r'', Text, 'selector'),
            ],
    
            'single-comment': [
                (r'.+', Comment.Single),
                (r'\n', Text, 'root'),
            ],
    
            'multi-comment': [
                (r'.+', Comment.Multiline),
                (r'\n', Text, 'root'),
            ],
    
            'import': [
                (r'[ \t]+', Text),
                (r'\S+', String),
                (r'\n', Text, 'root'),
            ],
    
            'old-style-attr': [
                (r'[^\s:="\[]+', Name.Attribute),
                (r'#{', String.Interpol, 'interpolation'),
                (r'[ \t]*=', Operator, 'value'),
                (r'', Text, 'value'),
            ],
    
            'new-style-attr': [
                (r'[^\s:="\[]+', Name.Attribute),
                (r'#{', String.Interpol, 'interpolation'),
                (r'[ \t]*[=:]', Operator, 'value'),
            ],
    
            'inline-comment': [
                (r"(\\#|#(?=[^\n{])|\*(?=[^\n/])|[^\n#*])+", Comment.Multiline),
                (r'#\{', String.Interpol, 'interpolation'),
                (r"\*/", Comment, '#pop'),
            ],
        }
        for group, common in common_sass_tokens.iteritems():
            tokens[group] = copy.copy(common)
        tokens['value'].append((r'\n', Text, 'root'))
        tokens['selector'].append((r'\n', Text, 'root'))
    
    
    class ScssLexer(RegexLexer):
        """
        For SCSS stylesheets.
        """
    
        name = 'SCSS'
        aliases = ['scss']
        filenames = ['*.scss']
        mimetypes = ['text/x-scss']
    
        flags = re.IGNORECASE | re.DOTALL
        tokens = {
            'root': [
                (r'\s+', Text),
                (r'//.*?\n', Comment.Single),
                (r'/\*.*?\*/', Comment.Multiline),
                (r'@import', Keyword, 'value'),
                (r'@for', Keyword, 'for'),
                (r'@(debug|warn|if|while)', Keyword, 'value'),
                (r'(@mixin)( [\w-]+)', bygroups(Keyword, Name.Function), 'value'),
                (r'(@include)( [\w-]+)', bygroups(Keyword, Name.Decorator), 'value'),
                (r'@extend', Keyword, 'selector'),
                (r'@[a-z0-9_-]+', Keyword, 'selector'),
                (r'(\$[\w-]\w*)([ \t]*:)', bygroups(Name.Variable, Operator), 'value'),
                (r'(?=[^;{}][;}])', Name.Attribute, 'attr'),
                (r'(?=[^;{}:]+:[^a-z])', Name.Attribute, 'attr'),
                (r'', Text, 'selector'),
            ],
    
            'attr': [
                (r'[^\s:="\[]+', Name.Attribute),
                (r'#{', String.Interpol, 'interpolation'),
                (r'[ \t]*:', Operator, 'value'),
            ],
    
            'inline-comment': [
                (r"(\\#|#(?=[^{])|\*(?=[^/])|[^#*])+", Comment.Multiline),
                (r'#\{', String.Interpol, 'interpolation'),
                (r"\*/", Comment, '#pop'),
            ],
        }
        for group, common in common_sass_tokens.iteritems():
            tokens[group] = copy.copy(common)
        tokens['value'].extend([(r'\n', Text), (r'[;{}]', Punctuation, 'root')])
        tokens['selector'].extend([(r'\n', Text), (r'[;{}]', Punctuation, 'root')])
    
    
    class CoffeeScriptLexer(RegexLexer):
        """
        For `CoffeeScript`_ source code.
    
        .. _CoffeeScript: http://coffeescript.org
    
        *New in Pygments 1.3.*
        """
    
        name = 'CoffeeScript'
        aliases = ['coffee-script', 'coffeescript']
        filenames = ['*.coffee']
        mimetypes = ['text/coffeescript']
    
        flags = re.DOTALL
        tokens = {
            'commentsandwhitespace': [
                (r'\s+', Text),
                (r'###.*?###', Comment.Multiline),
                (r'#.*?\n', Comment.Single),
            ],
            'multilineregex': [
                include('commentsandwhitespace'),
                (r'///([gim]+\b|\B)', String.Regex, '#pop'),
                (r'/', String.Regex),
                (r'[^/#]+', String.Regex)
            ],
            'slashstartsregex': [
                include('commentsandwhitespace'),
                (r'///', String.Regex, ('#pop', 'multilineregex')),
                (r'/(?! )(\\.|[^[/\\\n]|\[(\\.|[^\]\\\n])*])+/'
                 r'([gim]+\b|\B)', String.Regex, '#pop'),
                (r'', Text, '#pop'),
            ],
            'root': [
                # this next expr leads to infinite loops root -> slashstartsregex
                #(r'^(?=\s|/|)', popstate_xmlcomment_callback),
                (r'[^-]{1,2}', Literal),
                (ur'\t|\r|\n|[\u0020-\U0000D7FF]|[\U0000E000-\U0000FFFD]|'
                 ur'[\U00010000-\U0010FFFF]', Literal),
            ],
            'processing_instruction': [
                (r'\s+', Text, 'processing_instruction_content'),
                (r'\?>', String.Doc, '#pop'),
                (pitarget, Name),
            ],
            'processing_instruction_content': [
                (r'\?>', String.Doc, '#pop'),
                (ur'\t|\r|\n|[\u0020-\uD7FF]|[\uE000-\uFFFD]|'
                 ur'[\U00010000-\U0010FFFF]', Literal),
            ],
            'cdata_section': [
                (r']]>', String.Doc, '#pop'),
                (ur'\t|\r|\n|[\u0020-\uD7FF]|[\uE000-\uFFFD]|'
                 ur'[\U00010000-\U0010FFFF]', Literal),
            ],
            'start_tag': [
                include('whitespace'),
                (r'(/>)', popstate_tag_callback),
                (r'>', Name.Tag, 'element_content'),
                (r'"', Punctuation, 'quot_attribute_content'),
                (r"'", Punctuation, 'apos_attribute_content'),
                (r'=', Operator),
                (qname, Name.Tag),
            ],
            'quot_attribute_content': [
                (r'"', Punctuation, 'start_tag'),
                (r'(\{)', pushstate_root_callback),
                (r'""', Name.Attribute),
                (quotattrcontentchar, Name.Attribute),
                (entityref, Name.Attribute),
                (charref, Name.Attribute),
                (r'\{\{|\}\}', Name.Attribute),
            ],
            'apos_attribute_content': [
                (r"'", Punctuation, 'start_tag'),
                (r'\{', Punctuation, 'root'),
                (r"''", Name.Attribute),
                (aposattrcontentchar, Name.Attribute),
                (entityref, Name.Attribute),
                (charref, Name.Attribute),
                (r'\{\{|\}\}', Name.Attribute),
            ],
            'element_content': [
                (r')', popstate_tag_callback),
                (qname, Name.Tag),
            ],
            'xmlspace_decl': [
                (r'\(:', Comment, 'comment'),
                (r'preserve|strip', Keyword, '#pop'),
            ],
            'declareordering': [
                (r'\(:', Comment, 'comment'),
                include('whitespace'),
                (r'ordered|unordered', Keyword, '#pop'),
            ],
            'xqueryversion': [
                include('whitespace'),
                (r'\(:', Comment, 'comment'),
                (stringdouble, String.Double),
                (stringsingle, String.Single),
                (r'encoding', Keyword),
                (r';', Punctuation, '#pop'),
            ],
            'pragma': [
                (qname, Name.Variable, 'pragmacontents'),
            ],
            'pragmacontents': [
                (r'#\)', Punctuation, 'operator'),
                (ur'\t|\r|\n|[\u0020-\U0000D7FF]|[\U0000E000-\U0000FFFD]|'
                 ur'[\U00010000-\U0010FFFF]', Literal),
                (r'(\s+)', Text),
            ],
            'occurrenceindicator': [
                include('whitespace'),
                (r'\(:', Comment, 'comment'),
                (r'\*|\?|\+', Operator, 'operator'),
                (r':=', Operator, 'root'),
                (r'', Text, 'operator'),
            ],
            'option': [
                include('whitespace'),
                (qname, Name.Variable, '#pop'),
            ],
            'qname_braren': [
                include('whitespace'),
                (r'(\{)', pushstate_operator_root_callback),
                (r'(\()', Punctuation, 'root'),
            ],
            'element_qname': [
                (qname, Name.Variable, 'root'),
            ],
            'attribute_qname': [
                (qname, Name.Variable, 'root'),
            ],
            'root': [
                include('whitespace'),
                (r'\(:', Comment, 'comment'),
    
                # handle operator state
                # order on numbers matters - handle most complex first
                (r'\d+(\.\d*)?[eE][\+\-]?\d+', Number.Double, 'operator'),
                (r'(\.\d+)[eE][\+\-]?\d+', Number.Double, 'operator'),
                (r'(\.\d+|\d+\.\d*)', Number, 'operator'),
                (r'(\d+)', Number.Integer, 'operator'),
                (r'(\.\.|\.|\)|\*)', Punctuation, 'operator'),
                (r'(declare)(\s+)(construction)',
                 bygroups(Keyword, Text, Keyword), 'operator'),
                (r'(declare)(\s+)(default)(\s+)(order)',
                 bygroups(Keyword, Text, Keyword, Text, Keyword), 'operator'),
                (ncname + ':\*', Name, 'operator'),
                (stringdouble, String.Double, 'operator'),
                (stringsingle, String.Single, 'operator'),
    
                (r'(\})', popstate_callback),
    
                #NAMESPACE DECL
                (r'(declare)(\s+)(default)(\s+)(collation)',
                 bygroups(Keyword, Text, Keyword, Text, Keyword)),
                (r'(module|declare)(\s+)(namespace)',
                 bygroups(Keyword, Text, Keyword), 'namespacedecl'),
                (r'(declare)(\s+)(base-uri)',
                 bygroups(Keyword, Text, Keyword), 'namespacedecl'),
    
                #NAMESPACE KEYWORD
                (r'(declare)(\s+)(default)(\s+)(element|function)',
                 bygroups(Keyword, Text, Keyword, Text, Keyword), 'namespacekeyword'),
                (r'(import)(\s+)(schema|module)',
                 bygroups(Keyword.Pseudo, Text, Keyword.Pseudo), 'namespacekeyword'),
                (r'(declare)(\s+)(copy-namespaces)',
                 bygroups(Keyword, Text, Keyword), 'namespacekeyword'),
    
                #VARNAMEs
                (r'(for|let|some|every)(\s+)(\$)',
                 bygroups(Keyword, Text, Name.Variable), 'varname'),
                (r'\$', Name.Variable, 'varname'),
                (r'(declare)(\s+)(variable)(\s+)(\$)',
                 bygroups(Keyword, Text, Keyword, Text, Name.Variable), 'varname'),
    
                #ITEMTYPE
                (r'(\))(\s+)(as)', bygroups(Operator, Text, Keyword), 'itemtype'),
    
                (r'(element|attribute|schema-element|schema-attribute|comment|'
                 r'text|node|document-node|empty-sequence)(\s+)(\()',
                 pushstate_operator_kindtest_callback),
    
                (r'(processing-instruction)(\s+)(\()',
                 pushstate_operator_kindtestforpi_callback),
    
                (r'(', Comment, '#pop'),
                (r'[^\-]+|-', Comment),
            ],
        }
    
    
    class CoqLexer(RegexLexer):
        """
        For the `Coq `_ theorem prover.
    
        *New in Pygments 1.5.*
        """
    
        name = 'Coq'
        aliases = ['coq']
        filenames = ['*.v']
        mimetypes = ['text/x-coq']
    
        keywords1 = [
            # Vernacular commands
            'Section', 'Module', 'End', 'Require', 'Import', 'Export', 'Variable',
            'Variables', 'Parameter', 'Parameters', 'Axiom', 'Hypothesis',
            'Hypotheses', 'Notation', 'Local', 'Tactic', 'Reserved', 'Scope',
            'Open', 'Close', 'Bind', 'Delimit', 'Definition', 'Let', 'Ltac',
            'Fixpoint', 'CoFixpoint', 'Morphism', 'Relation', 'Implicit',
            'Arguments', 'Set', 'Unset', 'Contextual', 'Strict', 'Prenex',
            'Implicits', 'Inductive', 'CoInductive', 'Record', 'Structure',
            'Canonical', 'Coercion', 'Theorem', 'Lemma', 'Corollary',
            'Proposition', 'Fact', 'Remark', 'Example', 'Proof', 'Goal', 'Save',
            'Qed', 'Defined', 'Hint', 'Resolve', 'Rewrite', 'View', 'Search',
            'Show', 'Print', 'Printing', 'All', 'Graph', 'Projections', 'inside',
            'outside',
        ]
        keywords2 = [
            # Gallina
            'forall', 'exists', 'exists2', 'fun', 'fix', 'cofix', 'struct',
            'match', 'end',  'in', 'return', 'let', 'if', 'is', 'then', 'else',
            'for', 'of', 'nosimpl', 'with', 'as',
        ]
        keywords3 = [
            # Sorts
            'Type', 'Prop',
        ]
        keywords4 = [
            # Tactics
            'pose', 'set', 'move', 'case', 'elim', 'apply', 'clear', 'hnf', 'intro',
            'intros', 'generalize', 'rename', 'pattern', 'after', 'destruct',
            'induction', 'using', 'refine', 'inversion', 'injection', 'rewrite',
            'congr', 'unlock', 'compute', 'ring', 'field', 'replace', 'fold',
            'unfold', 'change', 'cutrewrite', 'simpl', 'have', 'suff', 'wlog',
            'suffices', 'without', 'loss', 'nat_norm', 'assert', 'cut', 'trivial',
            'revert', 'bool_congr', 'nat_congr', 'symmetry', 'transitivity', 'auto',
            'split', 'left', 'right', 'autorewrite',
        ]
        keywords5 = [
            # Terminators
            'by', 'done', 'exact', 'reflexivity', 'tauto', 'romega', 'omega',
            'assumption', 'solve', 'contradiction', 'discriminate',
        ]
        keywords6 = [
            # Control
            'do', 'last', 'first', 'try', 'idtac', 'repeat',
        ]
          # 'as', 'assert', 'begin', 'class', 'constraint', 'do', 'done',
          # 'downto', 'else', 'end', 'exception', 'external', 'false',
          # 'for', 'fun', 'function', 'functor', 'if', 'in', 'include',
          # 'inherit', 'initializer', 'lazy', 'let', 'match', 'method',
          # 'module', 'mutable', 'new', 'object', 'of', 'open', 'private',
          # 'raise', 'rec', 'sig', 'struct', 'then', 'to', 'true', 'try',
          # 'type', 'val', 'virtual', 'when', 'while', 'with'
        keyopts = [
            '!=', '#', '&', '&&', r'\(', r'\)', r'\*', r'\+', ',', '-',
            r'-\.', '->', r'\.', r'\.\.', ':', '::', ':=', ':>', ';', ';;', '<',
            '<-', '=', '>', '>]', '>}', r'\?', r'\?\?', r'\[', r'\[<', r'\[>',
            r'\[\|', ']', '_', '`', '{', '{<', r'\|', r'\|]', '}', '~', '=>',
            r'/\\', r'\\/',
            u'Π', u'λ',
        ]
        operators = r'[!$%&*+\./:<=>?@^|~-]'
        word_operators = ['and', 'asr', 'land', 'lor', 'lsl', 'lxor', 'mod', 'or']
        prefix_syms = r'[!?~]'
        infix_syms = r'[=<>@^|&+\*/$%-]'
        primitives = ['unit', 'int', 'float', 'bool', 'string', 'char', 'list',
                      'array']
    
        tokens = {
            'root': [
                (r'\s+', Text),
                (r'false|true|\(\)|\[\]', Name.Builtin.Pseudo),
                (r'\(\*', Comment, 'comment'),
                (r'\b(%s)\b' % '|'.join(keywords1), Keyword.Namespace),
                (r'\b(%s)\b' % '|'.join(keywords2), Keyword),
                (r'\b(%s)\b' % '|'.join(keywords3), Keyword.Type),
                (r'\b(%s)\b' % '|'.join(keywords4), Keyword),
                (r'\b(%s)\b' % '|'.join(keywords5), Keyword.Pseudo),
                (r'\b(%s)\b' % '|'.join(keywords6), Keyword.Reserved),
                (r'\b([A-Z][A-Za-z0-9_\']*)(?=\s*\.)',
                 Name.Namespace, 'dotted'),
                (r'\b([A-Z][A-Za-z0-9_\']*)', Name.Class),
                (r'(%s)' % '|'.join(keyopts[::-1]), Operator),
                (r'(%s|%s)?%s' % (infix_syms, prefix_syms, operators), Operator),
                (r'\b(%s)\b' % '|'.join(word_operators), Operator.Word),
                (r'\b(%s)\b' % '|'.join(primitives), Keyword.Type),
    
                (r"[^\W\d][\w']*", Name),
    
                (r'\d[\d_]*', Number.Integer),
                (r'0[xX][\da-fA-F][\da-fA-F_]*', Number.Hex),
                (r'0[oO][0-7][0-7_]*', Number.Oct),
                (r'0[bB][01][01_]*', Number.Binary),
                (r'-?\d[\d_]*(.[\d_]*)?([eE][+\-]?\d[\d_]*)', Number.Float),
    
                (r"'(?:(\\[\\\"'ntbr ])|(\\[0-9]{3})|(\\x[0-9a-fA-F]{2}))'",
                 String.Char),
                (r"'.'", String.Char),
                (r"'", Keyword), # a stray quote is another syntax element
    
                (r'"', String.Double, 'string'),
    
                (r'[~?][a-z][\w\']*:', Name.Variable),
            ],
            'comment': [
                (r'[^(*)]+', Comment),
                (r'\(\*', Comment, '#push'),
                (r'\*\)', Comment, '#pop'),
                (r'[(*)]', Comment),
            ],
            'string': [
                (r'[^"]+', String.Double),
                (r'""', String.Double),
                (r'"', String.Double, '#pop'),
            ],
            'dotted': [
                (r'\s+', Text),
                (r'\.', Punctuation),
                (r'[A-Z][A-Za-z0-9_\']*(?=\s*\.)', Name.Namespace),
                (r'[A-Z][A-Za-z0-9_\']*', Name.Class, '#pop'),
                (r'[a-z][a-z0-9_\']*', Name, '#pop'),
                (r'', Text, '#pop')
            ],
        }
    
        def analyse_text(text):
            if text.startswith('(*'):
                return True
    
    
    class NewLispLexer(RegexLexer):
        """
        For `newLISP. `_ source code (version 10.3.0).
    
        *New in Pygments 1.5.*
        """
    
        name = 'NewLisp'
        aliases = ['newlisp']
        filenames = ['*.lsp', '*.nl']
        mimetypes = ['text/x-newlisp', 'application/x-newlisp']
    
        flags = re.IGNORECASE | re.MULTILINE | re.UNICODE
    
        # list of built-in functions for newLISP version 10.3
        builtins = [
            '^', '--', '-', ':', '!', '!=', '?', '@', '*', '/', '&', '%', '+', '++',
            '<', '<<', '<=', '=', '>', '>=', '>>', '|', '~', '$', '$0', '$1', '$10',
            '$11', '$12', '$13', '$14', '$15', '$2', '$3', '$4', '$5', '$6', '$7',
            '$8', '$9', '$args', '$idx', '$it', '$main-args', 'abort', 'abs',
            'acos', 'acosh', 'add', 'address', 'amb', 'and',  'and', 'append-file',
            'append', 'apply', 'args', 'array-list', 'array?', 'array', 'asin',
            'asinh', 'assoc', 'atan', 'atan2', 'atanh', 'atom?', 'base64-dec',
            'base64-enc', 'bayes-query', 'bayes-train', 'begin', 'begin', 'begin',
            'beta', 'betai', 'bind', 'binomial', 'bits', 'callback', 'case', 'case',
            'case', 'catch', 'ceil', 'change-dir', 'char', 'chop', 'Class', 'clean',
            'close', 'command-event', 'cond', 'cond', 'cond', 'cons', 'constant',
            'context?', 'context', 'copy-file', 'copy', 'cos', 'cosh', 'count',
            'cpymem', 'crc32', 'crit-chi2', 'crit-z', 'current-line', 'curry',
            'date-list', 'date-parse', 'date-value', 'date', 'debug', 'dec',
            'def-new', 'default', 'define-macro', 'define-macro', 'define',
            'delete-file', 'delete-url', 'delete', 'destroy', 'det', 'device',
            'difference', 'directory?', 'directory', 'div', 'do-until', 'do-while',
            'doargs',  'dolist',  'dostring', 'dotimes',  'dotree', 'dump', 'dup',
            'empty?', 'encrypt', 'ends-with', 'env', 'erf', 'error-event',
            'eval-string', 'eval', 'exec', 'exists', 'exit', 'exp', 'expand',
            'explode', 'extend', 'factor', 'fft', 'file-info', 'file?', 'filter',
            'find-all', 'find', 'first', 'flat', 'float?', 'float', 'floor', 'flt',
            'fn', 'for-all', 'for', 'fork', 'format', 'fv', 'gammai', 'gammaln',
            'gcd', 'get-char', 'get-float', 'get-int', 'get-long', 'get-string',
            'get-url', 'global?', 'global', 'if-not', 'if', 'ifft', 'import', 'inc',
            'index', 'inf?', 'int', 'integer?', 'integer', 'intersect', 'invert',
            'irr', 'join', 'lambda-macro', 'lambda?', 'lambda', 'last-error',
            'last', 'legal?', 'length', 'let', 'let', 'let', 'letex', 'letn',
            'letn', 'letn', 'list?', 'list', 'load', 'local', 'log', 'lookup',
            'lower-case', 'macro?', 'main-args', 'MAIN', 'make-dir', 'map', 'mat',
            'match', 'max', 'member', 'min', 'mod', 'module', 'mul', 'multiply',
            'NaN?', 'net-accept', 'net-close', 'net-connect', 'net-error',
            'net-eval', 'net-interface', 'net-ipv', 'net-listen', 'net-local',
            'net-lookup', 'net-packet', 'net-peek', 'net-peer', 'net-ping',
            'net-receive-from', 'net-receive-udp', 'net-receive', 'net-select',
            'net-send-to', 'net-send-udp', 'net-send', 'net-service',
            'net-sessions', 'new', 'nil?', 'nil', 'normal', 'not', 'now', 'nper',
            'npv', 'nth', 'null?', 'number?', 'open', 'or', 'ostype', 'pack',
            'parse-date', 'parse', 'peek', 'pipe', 'pmt', 'pop-assoc', 'pop',
            'post-url', 'pow', 'prefix', 'pretty-print', 'primitive?', 'print',
            'println', 'prob-chi2', 'prob-z', 'process', 'prompt-event',
            'protected?', 'push', 'put-url', 'pv', 'quote?', 'quote', 'rand',
            'random', 'randomize', 'read', 'read-char', 'read-expr', 'read-file',
            'read-key', 'read-line', 'read-utf8', 'read', 'reader-event',
            'real-path', 'receive', 'ref-all', 'ref', 'regex-comp', 'regex',
            'remove-dir', 'rename-file', 'replace', 'reset', 'rest', 'reverse',
            'rotate', 'round', 'save', 'search', 'seed', 'seek', 'select', 'self',
            'semaphore', 'send', 'sequence', 'series', 'set-locale', 'set-ref-all',
            'set-ref', 'set', 'setf',  'setq', 'sgn', 'share', 'signal', 'silent',
            'sin', 'sinh', 'sleep', 'slice', 'sort', 'source', 'spawn', 'sqrt',
            'starts-with', 'string?', 'string', 'sub', 'swap', 'sym', 'symbol?',
            'symbols', 'sync', 'sys-error', 'sys-info', 'tan', 'tanh', 'term',
            'throw-error', 'throw', 'time-of-day', 'time', 'timer', 'title-case',
            'trace-highlight', 'trace', 'transpose', 'Tree', 'trim', 'true?',
            'true', 'unicode', 'unify', 'unique', 'unless', 'unpack', 'until',
            'upper-case', 'utf8', 'utf8len', 'uuid', 'wait-pid', 'when', 'while',
            'write', 'write-char', 'write-file', 'write-line', 'write',
            'xfer-event', 'xml-error', 'xml-parse', 'xml-type-tags', 'zero?',
        ]
    
        # valid names
        valid_name = r'([a-zA-Z0-9!$%&*+.,/<=>?@^_~|-])+|(\[.*?\])+'
    
        tokens = {
            'root': [
                # shebang
                (r'#!(.*?)$', Comment.Preproc),
                # comments starting with semicolon
                (r';.*$', Comment.Single),
                # comments starting with #
                (r'#.*$', Comment.Single),
    
                # whitespace
                (r'\s+', Text),
    
                # strings, symbols and characters
                (r'"(\\\\|\\"|[^"])*"', String),
    
                # braces
                (r"{", String, "bracestring"),
    
                # [text] ... [/text] delimited strings
                (r'\[text\]*', String, "tagstring"),
    
                # 'special' operators...
                (r"('|:)", Operator),
    
                # highlight the builtins
                ('(%s)' % '|'.join(re.escape(entry) + '\\b' for entry in builtins),
                 Keyword),
    
                # the remaining functions
                (r'(?<=\()' + valid_name, Name.Variable),
    
                # the remaining variables
                (valid_name, String.Symbol),
    
                # parentheses
                (r'(\(|\))', Punctuation),
            ],
    
            # braced strings...
            'bracestring': [
                 ("{", String, "#push"),
                 ("}", String, "#pop"),
                 ("[^{}]+", String),
            ],
    
            # tagged [text]...[/text] delimited strings...
            'tagstring': [
                (r'(?s)(.*?)(\[/text\])', String, '#pop'),
            ],
        }
    
    
    class ElixirLexer(RegexLexer):
        """
        For the `Elixir language `_.
    
        *New in Pygments 1.5.*
        """
    
        name = 'Elixir'
        aliases = ['elixir', 'ex', 'exs']
        filenames = ['*.ex', '*.exs']
        mimetypes = ['text/x-elixir']
    
        tokens = {
            'root': [
                (r'\s+', Text),
                (r'#.*$', Comment.Single),
                (r'\b(case|end|bc|lc|if|unless|try|loop|receive|fn|defmodule|'
                 r'defp|def|defprotocol|defimpl|defrecord|defmacro|defdelegate|'
                 r'defexception|exit|raise|throw)\b(?![?!])|'
                 r'(?)\b\s*', Keyword),
                (r'\b(import|require|use|recur|quote|unquote|super)\b(?![?!])',
                    Keyword.Namespace),
                (r'(?|<(?!<|=)|>(?!<|=|>)|<=|>=|===|==|=~|!=|!~|(?=[ \t])\?|'
                 r'(?<=[ \t])!+|&&|\|\||\^|\*|\+|\-|/|'
                 r'\||\+\+|\-\-|\*\*|\/\/|\<\-|\<\>|<<|>>|=|\.', Operator),
                (r'(?=]))?|\<\>|===?|>=?|<=?|'
                 r'<=>|&&?|%\(\)|%\[\]|%\{\}|\+\+?|\-\-?|\|\|?|\!|//|[%&`/\|]|'
                 r'\*\*?|=?~|<\-)|([a-zA-Z_]\w*([?!])?)(:)(?!:)', String.Symbol),
                (r':"', String.Symbol, 'interpoling_symbol'),
                (r'\b(nil|true|false)\b(?![?!])', Name.Constant),
                (r'\b[A-Z]\w*\b', Name.Constant),
                (r'\b(__(FILE|LINE|MODULE|STOP_ITERATOR|EXCEPTION|OP|REF|FUNCTION|'
                 r'BLOCK|KVBLOCK)__)\b(?![?!])', Name.Builtin.Pseudo),
                (r'[a-zA-Z_!]\w*[!\?]?', Name),
                (r'[(){};,/\|:\\\[\]]', Punctuation),
                (r'@[a-zA-Z_]\w*|&\d', Name.Variable),
                (r'\b(0[xX][0-9A-Fa-f]+|\d(_?\d)*(\.(?![^\d\s])'
                 r'(_?\d)*)?([eE][-+]?\d(_?\d)*)?|0[bB][01]+)\b', Number),
                include('strings'),
            ],
            'strings': [
                (r'"""(?:.|\n)*?"""', String.Doc),
                (r"'''(?:.|\n)*?'''", String.Doc),
                (r'"', String.Double, 'dqs'),
                (r"'.*'", String.Single),
                (r'(? [head | tail] = [1,2,3]
            [1,2,3]
            iex> head
            1
            iex> tail
            [2,3]
            iex> [head | tail]
            [1,2,3]
            iex> length [head | tail]
            3
    
        *New in Pygments 1.5.*
        """
    
        name = 'Elixir iex session'
        aliases = ['iex']
        mimetypes = ['text/x-elixir-shellsession']
    
        _prompt_re = re.compile('(iex|\.{3})> ')
    
        def get_tokens_unprocessed(self, text):
            exlexer = ElixirLexer(**self.options)
    
            curcode = ''
            insertions = []
            for match in line_re.finditer(text):
                line = match.group()
                if line.startswith(u'** '):
                    insertions.append((len(curcode),
                                       [(0, Generic.Error, line[:-1])]))
                    curcode += line[-1:]
                else:
                    m = self._prompt_re.match(line)
                    if m is not None:
                        end = m.end()
                        insertions.append((len(curcode),
                                           [(0, Generic.Prompt, line[:end])]))
                        curcode += line[end:]
                    else:
                        if curcode:
                            for item in do_insertions(insertions,
                                            exlexer.get_tokens_unprocessed(curcode)):
                                yield item
                            curcode = ''
                            insertions = []
                        yield match.start(), Generic.Output, line
            if curcode:
                for item in do_insertions(insertions,
                                          exlexer.get_tokens_unprocessed(curcode)):
                    yield item
    eric4-4.5.18/eric/ThirdParty/Pygments/pygments/lexers/PaxHeaders.8617/_vimbuiltins.py0000644000175000001440000000013112261012652026633 xustar000000000000000030 mtime=1388582314.175104646
    29 atime=1389081085.56572435
    30 ctime=1389081086.311724332
    eric4-4.5.18/eric/ThirdParty/Pygments/pygments/lexers/_vimbuiltins.py0000644000175000001440000011516412261012652026376 0ustar00detlevusers00000000000000auto=[('BufAdd','BufAdd'),('BufCreate','BufCreate'),('BufDelete','BufDelete'),('BufEnter','BufEnter'),('BufFilePost','BufFilePost'),('BufFilePre','BufFilePre'),('BufHidden','BufHidden'),('BufLeave','BufLeave'),('BufNew','BufNew'),('BufNewFile','BufNewFile'),('BufRead','BufRead'),('BufReadCmd','BufReadCmd'),('BufReadPost','BufReadPost'),('BufReadPre','BufReadPre'),('BufUnload','BufUnload'),('BufWinEnter','BufWinEnter'),('BufWinLeave','BufWinLeave'),('BufWipeout','BufWipeout'),('BufWrite','BufWrite'),('BufWriteCmd','BufWriteCmd'),('BufWritePost','BufWritePost'),('BufWritePre','BufWritePre'),('Cmd','Cmd'),('CmdwinEnter','CmdwinEnter'),('CmdwinLeave','CmdwinLeave'),('ColorScheme','ColorScheme'),('CursorHold','CursorHold'),('CursorHoldI','CursorHoldI'),('CursorMoved','CursorMoved'),('CursorMovedI','CursorMovedI'),('EncodingChanged','EncodingChanged'),('FileAppendCmd','FileAppendCmd'),('FileAppendPost','FileAppendPost'),('FileAppendPre','FileAppendPre'),('FileChangedRO','FileChangedRO'),('FileChangedShell','FileChangedShell'),('FileChangedShellPost','FileChangedShellPost'),('FileEncoding','FileEncoding'),('FileReadCmd','FileReadCmd'),('FileReadPost','FileReadPost'),('FileReadPre','FileReadPre'),('FileType','FileType'),('FileWriteCmd','FileWriteCmd'),('FileWritePost','FileWritePost'),('FileWritePre','FileWritePre'),('FilterReadPost','FilterReadPost'),('FilterReadPre','FilterReadPre'),('FilterWritePost','FilterWritePost'),('FilterWritePre','FilterWritePre'),('FocusGained','FocusGained'),('FocusLost','FocusLost'),('FuncUndefined','FuncUndefined'),('GUIEnter','GUIEnter'),('GUIFailed','GUIFailed'),('InsertChange','InsertChange'),('InsertCharPre','InsertCharPre'),('InsertEnter','InsertEnter'),('InsertLeave','InsertLeave'),('MenuPopup','MenuPopup'),('QuickFixCmdPost','QuickFixCmdPost'),('QuickFixCmdPre','QuickFixCmdPre'),('RemoteReply','RemoteReply'),('SessionLoadPost','SessionLoadPost'),('ShellCmdPost','ShellCmdPost'),('ShellFilterPost','ShellFilterPost'),('SourceCmd','SourceCmd'),('SourcePre','SourcePre'),('SpellFileMissing','SpellFileMissing'),('StdinReadPost','StdinReadPost'),('StdinReadPre','StdinReadPre'),('SwapExists','SwapExists'),('Syntax','Syntax'),('TabEnter','TabEnter'),('TabLeave','TabLeave'),('TermChanged','TermChanged'),('TermResponse','TermResponse'),('User','User'),('UserGettingBored','UserGettingBored'),('VimEnter','VimEnter'),('VimLeave','VimLeave'),('VimLeavePre','VimLeavePre'),('VimResized','VimResized'),('WinEnter','WinEnter'),('WinLeave','WinLeave'),('event','event')]
    command=[('Allargs','Allargs'),('DiffOrig','DiffOrig'),('Error','Error'),('Man','Man'),('MyCommand','MyCommand'),('Mycmd','Mycmd'),('N','N'),('N','Next'),('P','P'),('P','Print'),('Ren','Ren'),('Rena','Rena'),('Renu','Renu'),('TOhtml','TOhtml'),('X','X'),('XMLent','XMLent'),('XMLns','XMLns'),('a','a'),('ab','ab'),('abc','abclear'),('abo','aboveleft'),('al','all'),('ar','ar'),('ar','args'),('arga','argadd'),('argd','argdelete'),('argdo','argdo'),('arge','argedit'),('argg','argglobal'),('argl','arglocal'),('argu','argument'),('as','ascii'),('au','au'),('b','buffer'),('bN','bNext'),('ba','ball'),('bad','badd'),('bar','bar'),('bd','bdelete'),('bel','belowright'),('bf','bfirst'),('bl','blast'),('bm','bmodified'),('bn','bnext'),('bo','botright'),('bp','bprevious'),('br','br'),('br','brewind'),('brea','break'),('breaka','breakadd'),('breakd','breakdel'),('breakl','breaklist'),('bro','browse'),('browseset','browseset'),('bu','bu'),('buf','buf'),('bufdo','bufdo'),('buffers','buffers'),('bun','bunload'),('bw','bwipeout'),('c','c'),('c','change'),('cN','cN'),('cN','cNext'),('cNf','cNf'),('cNf','cNfile'),('cabc','cabclear'),('cad','cad'),('cad','caddexpr'),('caddb','caddbuffer'),('caddf','caddfile'),('cal','call'),('cat','catch'),('cb','cbuffer'),('cc','cc'),('ccl','cclose'),('cd','cd'),('ce','center'),('cex','cexpr'),('cf','cfile'),('cfir','cfirst'),('cg','cgetfile'),('cgetb','cgetbuffer'),('cgete','cgetexpr'),('changes','changes'),('chd','chdir'),('che','checkpath'),('checkt','checktime'),('cl','cl'),('cl','clist'),('cla','clast'),('clo','close'),('cmapc','cmapclear'),('cmdname','cmdname'),('cn','cn'),('cn','cnext'),('cnew','cnewer'),('cnf','cnf'),('cnf','cnfile'),('co','copy'),('col','colder'),('colo','colorscheme'),('com','com'),('comc','comclear'),('comment','comment'),('comp','compiler'),('con','con'),('con','continue'),('conf','confirm'),('cope','copen'),('count','count'),('cp','cprevious'),('cpf','cpfile'),('cq','cquit'),('cr','crewind'),('cs','cs'),('cscope','cscope'),('cstag','cstag'),('cuna','cunabbrev'),('cw','cwindow'),('d','d'),('d','delete'),('de','de'),('debug','debug'),('debugg','debuggreedy'),('del','del'),('delc','delcommand'),('delf','delf'),('delf','delfunction'),('delm','delmarks'),('di','di'),('di','display'),('diffg','diffget'),('diffo','diffo'),('diffoff','diffoff'),('diffp','diffp'),('diffpatch','diffpatch'),('diffpu','diffput'),('diffsplit','diffsplit'),('difft','difft'),('diffthis','diffthis'),('diffu','diffupdate'),('dig','dig'),('dig','digraphs'),('dj','djump'),('dl','dlist'),('do','do'),('doau','doau'),('dr','drop'),('ds','dsearch'),('dsp','dsplit'),('dwim','dwim'),('e','e'),('e','e'),('e','e'),('e','e'),('e','e'),('e','e'),('e','e'),('e','e'),('e','e'),('e','edit'),('ea','ea'),('earlier','earlier'),('ec','ec'),('echoe','echoerr'),('echom','echomsg'),('echon','echon'),('el','else'),('elsei','elseif'),('em','emenu'),('emenu','emenu'),('en','en'),('en','endif'),('endf','endf'),('endf','endfunction'),('endfo','endfor'),('endfun','endfun'),('endt','endtry'),('endw','endwhile'),('ene','enew'),('ex','ex'),('exi','exit'),('exu','exusage'),('f','f'),('f','file'),('filename','filename'),('files','files'),('filet','filet'),('filetype','filetype'),('fin','fin'),('fin','find'),('fina','finally'),('fini','finish'),('fir','first'),('fix','fixdel'),('fo','fold'),('foldc','foldclose'),('foldd','folddoopen'),('folddoc','folddoclosed'),('foldo','foldopen'),('for','for'),('fu','fu'),('fu','function'),('fun','fun'),('g','g'),('get','get'),('go','goto'),('gr','grep'),('grepa','grepadd'),('gs','gs'),('gs','gs'),('gui','gui'),('gvim','gvim'),('h','h'),('h','h'),('h','h'),('h','h'),('h','help'),('ha','hardcopy'),('helpf','helpfind'),('helpg','helpgrep'),('helpt','helptags'),('hi','hi'),('hid','hide'),('his','history'),('i','i'),('ia','ia'),('iabc','iabclear'),('if','if'),('ij','ijump'),('il','ilist'),('imapc','imapclear'),('in','in'),('index','index'),('intro','intro'),('is','isearch'),('isp','isplit'),('iuna','iunabbrev'),('j','join'),('ju','jumps'),('k','k'),('kee','keepmarks'),('keepa','keepa'),('keepalt','keepalt'),('keepj','keepjumps'),('l','l'),('l','list'),('lN','lN'),('lN','lNext'),('lNf','lNf'),('lNf','lNfile'),('la','la'),('la','last'),('lad','lad'),('lad','laddexpr'),('laddb','laddbuffer'),('laddf','laddfile'),('lan','lan'),('lan','language'),('lat','lat'),('later','later'),('lb','lbuffer'),('lc','lcd'),('lch','lchdir'),('lcl','lclose'),('lcs','lcs'),('lcscope','lcscope'),('le','left'),('lefta','leftabove'),('let','let'),('lex','lexpr'),('lf','lfile'),('lfir','lfirst'),('lg','lgetfile'),('lgetb','lgetbuffer'),('lgete','lgetexpr'),('lgr','lgrep'),('lgrepa','lgrepadd'),('lh','lhelpgrep'),('ll','ll'),('lla','llast'),('lli','llist'),('lmak','lmake'),('lmapc','lmapclear'),('lne','lne'),('lne','lnext'),('lnew','lnewer'),('lnf','lnf'),('lnf','lnfile'),('lo','lo'),('lo','loadview'),('loadk','loadk'),('loadkeymap','loadkeymap'),('loc','lockmarks'),('locale','locale'),('lockv','lockvar'),('lol','lolder'),('lop','lopen'),('lp','lprevious'),('lpf','lpfile'),('lr','lrewind'),('ls','ls'),('lt','ltag'),('lua','lua'),('luado','luado'),('luafile','luafile'),('lv','lvimgrep'),('lvimgrepa','lvimgrepadd'),('lw','lwindow'),('m','move'),('ma','ma'),('ma','mark'),('main','main'),('main','main'),('mak','make'),('marks','marks'),('mat','match'),('menut','menut'),('menut','menutranslate'),('mes','mes'),('messages','messages'),('mk','mk'),('mk','mkexrc'),('mkdir','mkdir'),('mks','mksession'),('mksp','mkspell'),('mkv','mkv'),('mkv','mkvimrc'),('mkvie','mkview'),('mo','mo'),('mod','mode'),('mv','mv'),('mz','mz'),('mz','mzscheme'),('mzf','mzfile'),('n','n'),('n','n'),('n','next'),('nb','nbkey'),('nbc','nbclose'),('nbs','nbstart'),('ne','ne'),('new','new'),('nkf','nkf'),('nmapc','nmapclear'),('noa','noa'),('noautocmd','noautocmd'),('noh','nohlsearch'),('nu','number'),('o','o'),('o','open'),('ol','oldfiles'),('omapc','omapclear'),('on','only'),('opt','options'),('ownsyntax','ownsyntax'),('p','p'),('p','p'),('p','p'),('p','p'),('p','p'),('p','p'),('p','p'),('p','p'),('p','p'),('p','print'),('pat','pat'),('pat','pat'),('pc','pclose'),('pe','pe'),('pe','perl'),('ped','pedit'),('perld','perldo'),('po','pop'),('popu','popu'),('popu','popup'),('pp','ppop'),('pr','pr'),('pre','preserve'),('prev','previous'),('pro','pro'),('prof','profile'),('profd','profdel'),('promptf','promptfind'),('promptr','promptrepl'),('ps','psearch'),('ptN','ptN'),('ptN','ptNext'),('pta','ptag'),('ptf','ptfirst'),('ptj','ptjump'),('ptl','ptlast'),('ptn','ptn'),('ptn','ptnext'),('ptp','ptprevious'),('ptr','ptrewind'),('pts','ptselect'),('pu','put'),('pw','pwd'),('py','py'),('py','python'),('py3','py3'),('py3','py3'),('py3file','py3file'),('pyf','pyfile'),('python3','python3'),('q','q'),('q','quit'),('qa','qall'),('quita','quitall'),('quote','quote'),('r','r'),('r','r'),('r','r'),('r','r'),('r','r'),('r','r'),('r','r'),('r','r'),('r','r'),('r','r'),('r','r'),('r','read'),('re','re'),('rec','recover'),('red','red'),('red','redo'),('redi','redir'),('redr','redraw'),('redraws','redrawstatus'),('reg','registers'),('res','resize'),('ret','retab'),('retu','return'),('rew','rewind'),('ri','right'),('rightb','rightbelow'),('ru','ru'),('ru','runtime'),('rub','ruby'),('rubyd','rubydo'),('rubyf','rubyfile'),('rundo','rundo'),('rv','rviminfo'),('s','s'),('s','s'),('s','s'),('s','s'),('sN','sNext'),('sa','sargument'),('sal','sall'),('san','sandbox'),('sav','saveas'),('sb','sbuffer'),('sbN','sbNext'),('sba','sball'),('sbf','sbfirst'),('sbl','sblast'),('sbm','sbmodified'),('sbn','sbnext'),('sbp','sbprevious'),('sbr','sbrewind'),('scrip','scrip'),('scrip','scriptnames'),('scripte','scriptencoding'),('scs','scs'),('scscope','scscope'),('se','set'),('setf','setfiletype'),('setg','setglobal'),('setl','setlocal'),('sf','sfind'),('sfir','sfirst'),('sh','shell'),('si','si'),('sig','sig'),('sign','sign'),('sil','silent'),('sim','simalt'),('sl','sl'),('sl','sleep'),('sla','slast'),('sm','smagic'),('sm','smap'),('sme','sme'),('smenu','smenu'),('sn','snext'),('sni','sniff'),('sno','snomagic'),('snoreme','snoreme'),('snoremenu','snoremenu'),('so','so'),('so','source'),('sor','sort'),('sp','split'),('spe','spe'),('spe','spellgood'),('spelld','spelldump'),('spelli','spellinfo'),('spellr','spellrepall'),('spellu','spellundo'),('spellw','spellwrong'),('spr','sprevious'),('sre','srewind'),('st','st'),('st','stop'),('sta','stag'),('star','star'),('star','startinsert'),('start','start'),('startg','startgreplace'),('startr','startreplace'),('stj','stjump'),('stopi','stopinsert'),('sts','stselect'),('sub','sub'),('sub','sub'),('sun','sunhide'),('sunme','sunme'),('sunmenu','sunmenu'),('sus','suspend'),('sv','sview'),('sw','swapname'),('sy','sy'),('syn','syn'),('sync','sync'),('syncbind','syncbind'),('synlist','synlist'),('t','t'),('t','t'),('t','t'),('tN','tN'),('tN','tNext'),('ta','ta'),('ta','tag'),('tab','tab'),('tabN','tabN'),('tabN','tabNext'),('tabc','tabclose'),('tabd','tabdo'),('tabe','tabedit'),('tabf','tabfind'),('tabfir','tabfirst'),('tabl','tablast'),('tabm','tabmove'),('tabn','tabnext'),('tabnew','tabnew'),('tabo','tabonly'),('tabp','tabprevious'),('tabr','tabrewind'),('tabs','tabs'),('tags','tags'),('tc','tcl'),('tcld','tcldo'),('tclf','tclfile'),('te','tearoff'),('tf','tfirst'),('th','throw'),('tj','tjump'),('tl','tlast'),('tm','tm'),('tm','tmenu'),('tn','tn'),('tn','tnext'),('to','topleft'),('tp','tprevious'),('tr','tr'),('tr','trewind'),('try','try'),('ts','tselect'),('tu','tu'),('tu','tunmenu'),('u','u'),('u','undo'),('un','un'),('una','unabbreviate'),('undoj','undojoin'),('undol','undolist'),('unh','unhide'),('unl','unl'),('unlo','unlockvar'),('uns','unsilent'),('up','update'),('v','v'),('ve','ve'),('ve','version'),('verb','verbose'),('version','version'),('version','version'),('vert','vertical'),('vi','vi'),('vi','visual'),('vie','view'),('vim','vimgrep'),('vimgrepa','vimgrepadd'),('viu','viusage'),('vmapc','vmapclear'),('vne','vnew'),('vs','vsplit'),('w','w'),('w','write'),('wN','wNext'),('wa','wall'),('wh','while'),('win','win'),('win','winsize'),('winc','wincmd'),('windo','windo'),('winp','winpos'),('wn','wnext'),('wp','wprevious'),('wq','wq'),('wqa','wqall'),('ws','wsverb'),('wundo','wundo'),('wv','wviminfo'),('x','x'),('x','xit'),('xa','xall'),('xmapc','xmapclear'),('xme','xme'),('xmenu','xmenu'),('xnoreme','xnoreme'),('xnoremenu','xnoremenu'),('xterm','xterm'),('xunme','xunme'),('xunmenu','xunmenu'),('xwininfo','xwininfo'),('y','yank')]
    option=[('acd','acd'),('ai','ai'),('akm','akm'),('al','al'),('aleph','aleph'),('allowrevins','allowrevins'),('altkeymap','altkeymap'),('ambiwidth','ambiwidth'),('ambw','ambw'),('anti','anti'),('antialias','antialias'),('ar','ar'),('arab','arab'),('arabic','arabic'),('arabicshape','arabicshape'),('ari','ari'),('arshape','arshape'),('autochdir','autochdir'),('autoindent','autoindent'),('autoread','autoread'),('autowrite','autowrite'),('autowriteall','autowriteall'),('aw','aw'),('awa','awa'),('background','background'),('backspace','backspace'),('backup','backup'),('backupcopy','backupcopy'),('backupdir','backupdir'),('backupext','backupext'),('backupskip','backupskip'),('balloondelay','balloondelay'),('ballooneval','ballooneval'),('balloonexpr','balloonexpr'),('bdir','bdir'),('bdlay','bdlay'),('beval','beval'),('bex','bex'),('bexpr','bexpr'),('bg','bg'),('bh','bh'),('bin','bin'),('binary','binary'),('biosk','biosk'),('bioskey','bioskey'),('bk','bk'),('bkc','bkc'),('bl','bl'),('bomb','bomb'),('breakat','breakat'),('brk','brk'),('browsedir','browsedir'),('bs','bs'),('bsdir','bsdir'),('bsk','bsk'),('bt','bt'),('bufhidden','bufhidden'),('buflisted','buflisted'),('buftype','buftype'),('casemap','casemap'),('cb','cb'),('cc','cc'),('ccv','ccv'),('cd','cd'),('cdpath','cdpath'),('cedit','cedit'),('cf','cf'),('cfu','cfu'),('ch','ch'),('charconvert','charconvert'),('ci','ci'),('cin','cin'),('cindent','cindent'),('cink','cink'),('cinkeys','cinkeys'),('cino','cino'),('cinoptions','cinoptions'),('cinw','cinw'),('cinwords','cinwords'),('clipboard','clipboard'),('cmdheight','cmdheight'),('cmdwinheight','cmdwinheight'),('cmp','cmp'),('cms','cms'),('co','co'),('cocu','cocu'),('cole','cole'),('colorcolumn','colorcolumn'),('columns','columns'),('com','com'),('comments','comments'),('commentstring','commentstring'),('compatible','compatible'),('complete','complete'),('completefunc','completefunc'),('completeopt','completeopt'),('concealcursor','concealcursor'),('conceallevel','conceallevel'),('confirm','confirm'),('consk','consk'),('conskey','conskey'),('copyindent','copyindent'),('cot','cot'),('cp','cp'),('cpo','cpo'),('cpoptions','cpoptions'),('cpt','cpt'),('crb','crb'),('cryptmethod','cryptmethod'),('cscopepathcomp','cscopepathcomp'),('cscopeprg','cscopeprg'),('cscopequickfix','cscopequickfix'),('cscoperelative','cscoperelative'),('cscopetag','cscopetag'),('cscopetagorder','cscopetagorder'),('cscopeverbose','cscopeverbose'),('cspc','cspc'),('csprg','csprg'),('csqf','csqf'),('csre','csre'),('cst','cst'),('csto','csto'),('csverb','csverb'),('cuc','cuc'),('cul','cul'),('cursorbind','cursorbind'),('cursorcolumn','cursorcolumn'),('cursorline','cursorline'),('cwh','cwh'),('debug','debug'),('deco','deco'),('def','def'),('define','define'),('delcombine','delcombine'),('dex','dex'),('dg','dg'),('dict','dict'),('dictionary','dictionary'),('diff','diff'),('diffexpr','diffexpr'),('diffopt','diffopt'),('digraph','digraph'),('dip','dip'),('dir','dir'),('directory','directory'),('display','display'),('dy','dy'),('ea','ea'),('ead','ead'),('eadirection','eadirection'),('eb','eb'),('ed','ed'),('edcompatible','edcompatible'),('ef','ef'),('efm','efm'),('ei','ei'),('ek','ek'),('enc','enc'),('encoding','encoding'),('endofline','endofline'),('eol','eol'),('ep','ep'),('equalalways','equalalways'),('equalprg','equalprg'),('errorbells','errorbells'),('errorfile','errorfile'),('errorformat','errorformat'),('esckeys','esckeys'),('et','et'),('eventignore','eventignore'),('ex','ex'),('expandtab','expandtab'),('exrc','exrc'),('fcl','fcl'),('fcs','fcs'),('fdc','fdc'),('fde','fde'),('fdi','fdi'),('fdl','fdl'),('fdls','fdls'),('fdm','fdm'),('fdn','fdn'),('fdo','fdo'),('fdt','fdt'),('fen','fen'),('fenc','fenc'),('fencs','fencs'),('fex','fex'),('ff','ff'),('ffs','ffs'),('fileencoding','fileencoding'),('fileencodings','fileencodings'),('fileformat','fileformat'),('fileformats','fileformats'),('filetype','filetype'),('fillchars','fillchars'),('fk','fk'),('fkmap','fkmap'),('flp','flp'),('fml','fml'),('fmr','fmr'),('fo','fo'),('foldclose','foldclose'),('foldcolumn','foldcolumn'),('foldenable','foldenable'),('foldexpr','foldexpr'),('foldignore','foldignore'),('foldlevel','foldlevel'),('foldlevelstart','foldlevelstart'),('foldmarker','foldmarker'),('foldmethod','foldmethod'),('foldminlines','foldminlines'),('foldnestmax','foldnestmax'),('foldopen','foldopen'),('foldtext','foldtext'),('formatexpr','formatexpr'),('formatlistpat','formatlistpat'),('formatoptions','formatoptions'),('formatprg','formatprg'),('fp','fp'),('fs','fs'),('fsync','fsync'),('ft','ft'),('gcr','gcr'),('gd','gd'),('gdefault','gdefault'),('gfm','gfm'),('gfn','gfn'),('gfs','gfs'),('gfw','gfw'),('ghr','ghr'),('go','go'),('gp','gp'),('grepformat','grepformat'),('grepprg','grepprg'),('gtl','gtl'),('gtt','gtt'),('guicursor','guicursor'),('guifont','guifont'),('guifontset','guifontset'),('guifontwide','guifontwide'),('guiheadroom','guiheadroom'),('guioptions','guioptions'),('guipty','guipty'),('guitablabel','guitablabel'),('guitabtooltip','guitabtooltip'),('helpfile','helpfile'),('helpheight','helpheight'),('helplang','helplang'),('hf','hf'),('hh','hh'),('hi','hi'),('hid','hid'),('hidden','hidden'),('highlight','highlight'),('history','history'),('hk','hk'),('hkmap','hkmap'),('hkmapp','hkmapp'),('hkp','hkp'),('hl','hl'),('hlg','hlg'),('hls','hls'),('hlsearch','hlsearch'),('ic','ic'),('icon','icon'),('iconstring','iconstring'),('ignorecase','ignorecase'),('im','im'),('imactivatekey','imactivatekey'),('imak','imak'),('imc','imc'),('imcmdline','imcmdline'),('imd','imd'),('imdisable','imdisable'),('imi','imi'),('iminsert','iminsert'),('ims','ims'),('imsearch','imsearch'),('inc','inc'),('include','include'),('includeexpr','includeexpr'),('incsearch','incsearch'),('inde','inde'),('indentexpr','indentexpr'),('indentkeys','indentkeys'),('indk','indk'),('inex','inex'),('inf','inf'),('infercase','infercase'),('inoremap','inoremap'),('insertmode','insertmode'),('invacd','invacd'),('invai','invai'),('invakm','invakm'),('invallowrevins','invallowrevins'),('invaltkeymap','invaltkeymap'),('invanti','invanti'),('invantialias','invantialias'),('invar','invar'),('invarab','invarab'),('invarabic','invarabic'),('invarabicshape','invarabicshape'),('invari','invari'),('invarshape','invarshape'),('invautochdir','invautochdir'),('invautoindent','invautoindent'),('invautoread','invautoread'),('invautowrite','invautowrite'),('invautowriteall','invautowriteall'),('invaw','invaw'),('invawa','invawa'),('invbackup','invbackup'),('invballooneval','invballooneval'),('invbeval','invbeval'),('invbin','invbin'),('invbinary','invbinary'),('invbiosk','invbiosk'),('invbioskey','invbioskey'),('invbk','invbk'),('invbl','invbl'),('invbomb','invbomb'),('invbuflisted','invbuflisted'),('invcf','invcf'),('invci','invci'),('invcin','invcin'),('invcindent','invcindent'),('invcompatible','invcompatible'),('invconfirm','invconfirm'),('invconsk','invconsk'),('invconskey','invconskey'),('invcopyindent','invcopyindent'),('invcp','invcp'),('invcrb','invcrb'),('invcscopetag','invcscopetag'),('invcscopeverbose','invcscopeverbose'),('invcst','invcst'),('invcsverb','invcsverb'),('invcuc','invcuc'),('invcul','invcul'),('invcursorbind','invcursorbind'),('invcursorcolumn','invcursorcolumn'),('invcursorline','invcursorline'),('invdeco','invdeco'),('invdelcombine','invdelcombine'),('invdg','invdg'),('invdiff','invdiff'),('invdigraph','invdigraph'),('invea','invea'),('inveb','inveb'),('inved','inved'),('invedcompatible','invedcompatible'),('invek','invek'),('invendofline','invendofline'),('inveol','inveol'),('invequalalways','invequalalways'),('inverrorbells','inverrorbells'),('invesckeys','invesckeys'),('invet','invet'),('invex','invex'),('invexpandtab','invexpandtab'),('invexrc','invexrc'),('invfen','invfen'),('invfk','invfk'),('invfkmap','invfkmap'),('invfoldenable','invfoldenable'),('invgd','invgd'),('invgdefault','invgdefault'),('invguipty','invguipty'),('invhid','invhid'),('invhidden','invhidden'),('invhk','invhk'),('invhkmap','invhkmap'),('invhkmapp','invhkmapp'),('invhkp','invhkp'),('invhls','invhls'),('invhlsearch','invhlsearch'),('invic','invic'),('invicon','invicon'),('invignorecase','invignorecase'),('invim','invim'),('invimc','invimc'),('invimcmdline','invimcmdline'),('invimd','invimd'),('invimdisable','invimdisable'),('invincsearch','invincsearch'),('invinf','invinf'),('invinfercase','invinfercase'),('invinsertmode','invinsertmode'),('invis','invis'),('invjoinspaces','invjoinspaces'),('invjs','invjs'),('invlazyredraw','invlazyredraw'),('invlbr','invlbr'),('invlinebreak','invlinebreak'),('invlisp','invlisp'),('invlist','invlist'),('invloadplugins','invloadplugins'),('invlpl','invlpl'),('invlz','invlz'),('invma','invma'),('invmacatsui','invmacatsui'),('invmagic','invmagic'),('invmh','invmh'),('invml','invml'),('invmod','invmod'),('invmodeline','invmodeline'),('invmodifiable','invmodifiable'),('invmodified','invmodified'),('invmore','invmore'),('invmousef','invmousef'),('invmousefocus','invmousefocus'),('invmousehide','invmousehide'),('invnu','invnu'),('invnumber','invnumber'),('invodev','invodev'),('invopendevice','invopendevice'),('invpaste','invpaste'),('invpi','invpi'),('invpreserveindent','invpreserveindent'),('invpreviewwindow','invpreviewwindow'),('invprompt','invprompt'),('invpvw','invpvw'),('invreadonly','invreadonly'),('invrelativenumber','invrelativenumber'),('invremap','invremap'),('invrestorescreen','invrestorescreen'),('invrevins','invrevins'),('invri','invri'),('invrightleft','invrightleft'),('invrl','invrl'),('invrnu','invrnu'),('invro','invro'),('invrs','invrs'),('invru','invru'),('invruler','invruler'),('invsb','invsb'),('invsc','invsc'),('invscb','invscb'),('invscrollbind','invscrollbind'),('invscs','invscs'),('invsecure','invsecure'),('invsft','invsft'),('invshellslash','invshellslash'),('invshelltemp','invshelltemp'),('invshiftround','invshiftround'),('invshortname','invshortname'),('invshowcmd','invshowcmd'),('invshowfulltag','invshowfulltag'),('invshowmatch','invshowmatch'),('invshowmode','invshowmode'),('invsi','invsi'),('invsm','invsm'),('invsmartcase','invsmartcase'),('invsmartindent','invsmartindent'),('invsmarttab','invsmarttab'),('invsmd','invsmd'),('invsn','invsn'),('invsol','invsol'),('invspell','invspell'),('invsplitbelow','invsplitbelow'),('invsplitright','invsplitright'),('invspr','invspr'),('invsr','invsr'),('invssl','invssl'),('invsta','invsta'),('invstartofline','invstartofline'),('invstmp','invstmp'),('invswapfile','invswapfile'),('invswf','invswf'),('invta','invta'),('invtagbsearch','invtagbsearch'),('invtagrelative','invtagrelative'),('invtagstack','invtagstack'),('invtbi','invtbi'),('invtbidi','invtbidi'),('invtbs','invtbs'),('invtermbidi','invtermbidi'),('invterse','invterse'),('invtextauto','invtextauto'),('invtextmode','invtextmode'),('invtf','invtf'),('invtgst','invtgst'),('invtildeop','invtildeop'),('invtimeout','invtimeout'),('invtitle','invtitle'),('invto','invto'),('invtop','invtop'),('invtr','invtr'),('invttimeout','invttimeout'),('invttybuiltin','invttybuiltin'),('invttyfast','invttyfast'),('invtx','invtx'),('invvb','invvb'),('invvisualbell','invvisualbell'),('invwa','invwa'),('invwarn','invwarn'),('invwb','invwb'),('invweirdinvert','invweirdinvert'),('invwfh','invwfh'),('invwfw','invwfw'),('invwildignorecase','invwildignorecase'),('invwildmenu','invwildmenu'),('invwinfixheight','invwinfixheight'),('invwinfixwidth','invwinfixwidth'),('invwiv','invwiv'),('invwmnu','invwmnu'),('invwrap','invwrap'),('invwrapscan','invwrapscan'),('invwrite','invwrite'),('invwriteany','invwriteany'),('invwritebackup','invwritebackup'),('invws','invws'),('is','is'),('isf','isf'),('isfname','isfname'),('isi','isi'),('isident','isident'),('isk','isk'),('iskeyword','iskeyword'),('isp','isp'),('isprint','isprint'),('joinspaces','joinspaces'),('js','js'),('key','key'),('keymap','keymap'),('keymodel','keymodel'),('keywordprg','keywordprg'),('km','km'),('kmp','kmp'),('kp','kp'),('langmap','langmap'),('langmenu','langmenu'),('laststatus','laststatus'),('lazyredraw','lazyredraw'),('lbr','lbr'),('lcs','lcs'),('linebreak','linebreak'),('lines','lines'),('linespace','linespace'),('lisp','lisp'),('lispwords','lispwords'),('list','list'),('listchars','listchars'),('lm','lm'),('lmap','lmap'),('loadplugins','loadplugins'),('lpl','lpl'),('ls','ls'),('lsp','lsp'),('lw','lw'),('lz','lz'),('ma','ma'),('macatsui','macatsui'),('magic','magic'),('makeef','makeef'),('makeprg','makeprg'),('mat','mat'),('matchpairs','matchpairs'),('matchtime','matchtime'),('maxcombine','maxcombine'),('maxfuncdepth','maxfuncdepth'),('maxmapdepth','maxmapdepth'),('maxmem','maxmem'),('maxmempattern','maxmempattern'),('maxmemtot','maxmemtot'),('mco','mco'),('mef','mef'),('menuitems','menuitems'),('mfd','mfd'),('mh','mh'),('mis','mis'),('mkspellmem','mkspellmem'),('ml','ml'),('mls','mls'),('mm','mm'),('mmd','mmd'),('mmp','mmp'),('mmt','mmt'),('mod','mod'),('modeline','modeline'),('modelines','modelines'),('modifiable','modifiable'),('modified','modified'),('more','more'),('mouse','mouse'),('mousef','mousef'),('mousefocus','mousefocus'),('mousehide','mousehide'),('mousem','mousem'),('mousemodel','mousemodel'),('mouses','mouses'),('mouseshape','mouseshape'),('mouset','mouset'),('mousetime','mousetime'),('mp','mp'),('mps','mps'),('msm','msm'),('mzq','mzq'),('mzquantum','mzquantum'),('nf','nf'),('nnoremap','nnoremap'),('noacd','noacd'),('noai','noai'),('noakm','noakm'),('noallowrevins','noallowrevins'),('noaltkeymap','noaltkeymap'),('noanti','noanti'),('noantialias','noantialias'),('noar','noar'),('noarab','noarab'),('noarabic','noarabic'),('noarabicshape','noarabicshape'),('noari','noari'),('noarshape','noarshape'),('noautochdir','noautochdir'),('noautoindent','noautoindent'),('noautoread','noautoread'),('noautowrite','noautowrite'),('noautowriteall','noautowriteall'),('noaw','noaw'),('noawa','noawa'),('nobackup','nobackup'),('noballooneval','noballooneval'),('nobeval','nobeval'),('nobin','nobin'),('nobinary','nobinary'),('nobiosk','nobiosk'),('nobioskey','nobioskey'),('nobk','nobk'),('nobl','nobl'),('nobomb','nobomb'),('nobuflisted','nobuflisted'),('nocf','nocf'),('noci','noci'),('nocin','nocin'),('nocindent','nocindent'),('nocompatible','nocompatible'),('noconfirm','noconfirm'),('noconsk','noconsk'),('noconskey','noconskey'),('nocopyindent','nocopyindent'),('nocp','nocp'),('nocrb','nocrb'),('nocscopetag','nocscopetag'),('nocscopeverbose','nocscopeverbose'),('nocst','nocst'),('nocsverb','nocsverb'),('nocuc','nocuc'),('nocul','nocul'),('nocursorbind','nocursorbind'),('nocursorcolumn','nocursorcolumn'),('nocursorline','nocursorline'),('nodeco','nodeco'),('nodelcombine','nodelcombine'),('nodg','nodg'),('nodiff','nodiff'),('nodigraph','nodigraph'),('noea','noea'),('noeb','noeb'),('noed','noed'),('noedcompatible','noedcompatible'),('noek','noek'),('noendofline','noendofline'),('noeol','noeol'),('noequalalways','noequalalways'),('noerrorbells','noerrorbells'),('noesckeys','noesckeys'),('noet','noet'),('noex','noex'),('noexpandtab','noexpandtab'),('noexrc','noexrc'),('nofen','nofen'),('nofk','nofk'),('nofkmap','nofkmap'),('nofoldenable','nofoldenable'),('nogd','nogd'),('nogdefault','nogdefault'),('noguipty','noguipty'),('nohid','nohid'),('nohidden','nohidden'),('nohk','nohk'),('nohkmap','nohkmap'),('nohkmapp','nohkmapp'),('nohkp','nohkp'),('nohls','nohls'),('nohlsearch','nohlsearch'),('noic','noic'),('noicon','noicon'),('noignorecase','noignorecase'),('noim','noim'),('noimc','noimc'),('noimcmdline','noimcmdline'),('noimd','noimd'),('noimdisable','noimdisable'),('noincsearch','noincsearch'),('noinf','noinf'),('noinfercase','noinfercase'),('noinsertmode','noinsertmode'),('nois','nois'),('nojoinspaces','nojoinspaces'),('nojs','nojs'),('nolazyredraw','nolazyredraw'),('nolbr','nolbr'),('nolinebreak','nolinebreak'),('nolisp','nolisp'),('nolist','nolist'),('noloadplugins','noloadplugins'),('nolpl','nolpl'),('nolz','nolz'),('noma','noma'),('nomacatsui','nomacatsui'),('nomagic','nomagic'),('nomh','nomh'),('noml','noml'),('nomod','nomod'),('nomodeline','nomodeline'),('nomodifiable','nomodifiable'),('nomodified','nomodified'),('nomore','nomore'),('nomousef','nomousef'),('nomousefocus','nomousefocus'),('nomousehide','nomousehide'),('nonu','nonu'),('nonumber','nonumber'),('noodev','noodev'),('noopendevice','noopendevice'),('nopaste','nopaste'),('nopi','nopi'),('nopreserveindent','nopreserveindent'),('nopreviewwindow','nopreviewwindow'),('noprompt','noprompt'),('nopvw','nopvw'),('noreadonly','noreadonly'),('norelativenumber','norelativenumber'),('noremap','noremap'),('norestorescreen','norestorescreen'),('norevins','norevins'),('nori','nori'),('norightleft','norightleft'),('norl','norl'),('nornu','nornu'),('noro','noro'),('nors','nors'),('noru','noru'),('noruler','noruler'),('nosb','nosb'),('nosc','nosc'),('noscb','noscb'),('noscrollbind','noscrollbind'),('noscs','noscs'),('nosecure','nosecure'),('nosft','nosft'),('noshellslash','noshellslash'),('noshelltemp','noshelltemp'),('noshiftround','noshiftround'),('noshortname','noshortname'),('noshowcmd','noshowcmd'),('noshowfulltag','noshowfulltag'),('noshowmatch','noshowmatch'),('noshowmode','noshowmode'),('nosi','nosi'),('nosm','nosm'),('nosmartcase','nosmartcase'),('nosmartindent','nosmartindent'),('nosmarttab','nosmarttab'),('nosmd','nosmd'),('nosn','nosn'),('nosol','nosol'),('nospell','nospell'),('nosplitbelow','nosplitbelow'),('nosplitright','nosplitright'),('nospr','nospr'),('nosr','nosr'),('nossl','nossl'),('nosta','nosta'),('nostartofline','nostartofline'),('nostmp','nostmp'),('noswapfile','noswapfile'),('noswf','noswf'),('nota','nota'),('notagbsearch','notagbsearch'),('notagrelative','notagrelative'),('notagstack','notagstack'),('notbi','notbi'),('notbidi','notbidi'),('notbs','notbs'),('notermbidi','notermbidi'),('noterse','noterse'),('notextauto','notextauto'),('notextmode','notextmode'),('notf','notf'),('notgst','notgst'),('notildeop','notildeop'),('notimeout','notimeout'),('notitle','notitle'),('noto','noto'),('notop','notop'),('notr','notr'),('nottimeout','nottimeout'),('nottybuiltin','nottybuiltin'),('nottyfast','nottyfast'),('notx','notx'),('novb','novb'),('novisualbell','novisualbell'),('nowa','nowa'),('nowarn','nowarn'),('nowb','nowb'),('noweirdinvert','noweirdinvert'),('nowfh','nowfh'),('nowfw','nowfw'),('nowildignorecase','nowildignorecase'),('nowildmenu','nowildmenu'),('nowinfixheight','nowinfixheight'),('nowinfixwidth','nowinfixwidth'),('nowiv','nowiv'),('nowmnu','nowmnu'),('nowrap','nowrap'),('nowrapscan','nowrapscan'),('nowrite','nowrite'),('nowriteany','nowriteany'),('nowritebackup','nowritebackup'),('nows','nows'),('nrformats','nrformats'),('nu','nu'),('number','number'),('numberwidth','numberwidth'),('nuw','nuw'),('odev','odev'),('oft','oft'),('ofu','ofu'),('omnifunc','omnifunc'),('opendevice','opendevice'),('operatorfunc','operatorfunc'),('opfunc','opfunc'),('osfiletype','osfiletype'),('pa','pa'),('para','para'),('paragraphs','paragraphs'),('paste','paste'),('pastetoggle','pastetoggle'),('patchexpr','patchexpr'),('patchmode','patchmode'),('path','path'),('pdev','pdev'),('penc','penc'),('pex','pex'),('pexpr','pexpr'),('pfn','pfn'),('ph','ph'),('pheader','pheader'),('pi','pi'),('pm','pm'),('pmbcs','pmbcs'),('pmbfn','pmbfn'),('popt','popt'),('preserveindent','preserveindent'),('previewheight','previewheight'),('previewwindow','previewwindow'),('printdevice','printdevice'),('printencoding','printencoding'),('printexpr','printexpr'),('printfont','printfont'),('printheader','printheader'),('printmbcharset','printmbcharset'),('printmbfont','printmbfont'),('printoptions','printoptions'),('prompt','prompt'),('pt','pt'),('pumheight','pumheight'),('pvh','pvh'),('pvw','pvw'),('qe','qe'),('quoteescape','quoteescape'),('rdt','rdt'),('readonly','readonly'),('redrawtime','redrawtime'),('relativenumber','relativenumber'),('remap','remap'),('report','report'),('restorescreen','restorescreen'),('revins','revins'),('ri','ri'),('rightleft','rightleft'),('rightleftcmd','rightleftcmd'),('rl','rl'),('rlc','rlc'),('rnu','rnu'),('ro','ro'),('rs','rs'),('rtp','rtp'),('ru','ru'),('ruf','ruf'),('ruler','ruler'),('rulerformat','rulerformat'),('runtimepath','runtimepath'),('sb','sb'),('sbo','sbo'),('sbr','sbr'),('sc','sc'),('scb','scb'),('scr','scr'),('scroll','scroll'),('scrollbind','scrollbind'),('scrolljump','scrolljump'),('scrolloff','scrolloff'),('scrollopt','scrollopt'),('scs','scs'),('sect','sect'),('sections','sections'),('secure','secure'),('sel','sel'),('selection','selection'),('selectmode','selectmode'),('sessionoptions','sessionoptions'),('sft','sft'),('sh','sh'),('shcf','shcf'),('shell','shell'),('shellcmdflag','shellcmdflag'),('shellpipe','shellpipe'),('shellquote','shellquote'),('shellredir','shellredir'),('shellslash','shellslash'),('shelltemp','shelltemp'),('shelltype','shelltype'),('shellxquote','shellxquote'),('shiftround','shiftround'),('shiftwidth','shiftwidth'),('shm','shm'),('shortmess','shortmess'),('shortname','shortname'),('showbreak','showbreak'),('showcmd','showcmd'),('showfulltag','showfulltag'),('showmatch','showmatch'),('showmode','showmode'),('showtabline','showtabline'),('shq','shq'),('si','si'),('sidescroll','sidescroll'),('sidescrolloff','sidescrolloff'),('siso','siso'),('sj','sj'),('slm','slm'),('sm','sm'),('smartcase','smartcase'),('smartindent','smartindent'),('smarttab','smarttab'),('smc','smc'),('smd','smd'),('sn','sn'),('so','so'),('softtabstop','softtabstop'),('sol','sol'),('sp','sp'),('spc','spc'),('spell','spell'),('spellcapcheck','spellcapcheck'),('spellfile','spellfile'),('spelllang','spelllang'),('spellsuggest','spellsuggest'),('spf','spf'),('spl','spl'),('splitbelow','splitbelow'),('splitright','splitright'),('spr','spr'),('sps','sps'),('sr','sr'),('srr','srr'),('ss','ss'),('ssl','ssl'),('ssop','ssop'),('st','st'),('sta','sta'),('stal','stal'),('startofline','startofline'),('statusline','statusline'),('stl','stl'),('stmp','stmp'),('sts','sts'),('su','su'),('sua','sua'),('suffixes','suffixes'),('suffixesadd','suffixesadd'),('sw','sw'),('swapfile','swapfile'),('swapsync','swapsync'),('swb','swb'),('swf','swf'),('switchbuf','switchbuf'),('sws','sws'),('sxq','sxq'),('syn','syn'),('synmaxcol','synmaxcol'),('syntax','syntax'),('t_AB','t_AB'),('t_AF','t_AF'),('t_AL','t_AL'),('t_CS','t_CS'),('t_CV','t_CV'),('t_Ce','t_Ce'),('t_Co','t_Co'),('t_Cs','t_Cs'),('t_DL','t_DL'),('t_EI','t_EI'),('t_F1','t_F1'),('t_F2','t_F2'),('t_F3','t_F3'),('t_F4','t_F4'),('t_F5','t_F5'),('t_F6','t_F6'),('t_F7','t_F7'),('t_F8','t_F8'),('t_F9','t_F9'),('t_IE','t_IE'),('t_IS','t_IS'),('t_K1','t_K1'),('t_K3','t_K3'),('t_K4','t_K4'),('t_K5','t_K5'),('t_K6','t_K6'),('t_K7','t_K7'),('t_K8','t_K8'),('t_K9','t_K9'),('t_KA','t_KA'),('t_KB','t_KB'),('t_KC','t_KC'),('t_KD','t_KD'),('t_KE','t_KE'),('t_KF','t_KF'),('t_KG','t_KG'),('t_KH','t_KH'),('t_KI','t_KI'),('t_KJ','t_KJ'),('t_KK','t_KK'),('t_KL','t_KL'),('t_RI','t_RI'),('t_RV','t_RV'),('t_SI','t_SI'),('t_Sb','t_Sb'),('t_Sf','t_Sf'),('t_WP','t_WP'),('t_WS','t_WS'),('t_ZH','t_ZH'),('t_ZR','t_ZR'),('t_al','t_al'),('t_bc','t_bc'),('t_cd','t_cd'),('t_ce','t_ce'),('t_cl','t_cl'),('t_cm','t_cm'),('t_cs','t_cs'),('t_da','t_da'),('t_db','t_db'),('t_dl','t_dl'),('t_fs','t_fs'),('t_k1','t_k1'),('t_k2','t_k2'),('t_k3','t_k3'),('t_k4','t_k4'),('t_k5','t_k5'),('t_k6','t_k6'),('t_k7','t_k7'),('t_k8','t_k8'),('t_k9','t_k9'),('t_kB','t_kB'),('t_kD','t_kD'),('t_kI','t_kI'),('t_kN','t_kN'),('t_kP','t_kP'),('t_kb','t_kb'),('t_kd','t_kd'),('t_ke','t_ke'),('t_kh','t_kh'),('t_kl','t_kl'),('t_kr','t_kr'),('t_ks','t_ks'),('t_ku','t_ku'),('t_le','t_le'),('t_mb','t_mb'),('t_md','t_md'),('t_me','t_me'),('t_mr','t_mr'),('t_ms','t_ms'),('t_nd','t_nd'),('t_op','t_op'),('t_se','t_se'),('t_so','t_so'),('t_sr','t_sr'),('t_te','t_te'),('t_ti','t_ti'),('t_ts','t_ts'),('t_ue','t_ue'),('t_us','t_us'),('t_ut','t_ut'),('t_vb','t_vb'),('t_ve','t_ve'),('t_vi','t_vi'),('t_vs','t_vs'),('t_xs','t_xs'),('ta','ta'),('tabline','tabline'),('tabpagemax','tabpagemax'),('tabstop','tabstop'),('tag','tag'),('tagbsearch','tagbsearch'),('taglength','taglength'),('tagrelative','tagrelative'),('tags','tags'),('tagstack','tagstack'),('tal','tal'),('tb','tb'),('tbi','tbi'),('tbidi','tbidi'),('tbis','tbis'),('tbs','tbs'),('tenc','tenc'),('term','term'),('termbidi','termbidi'),('termencoding','termencoding'),('terse','terse'),('textauto','textauto'),('textmode','textmode'),('textwidth','textwidth'),('tf','tf'),('tgst','tgst'),('thesaurus','thesaurus'),('tildeop','tildeop'),('timeout','timeout'),('timeoutlen','timeoutlen'),('title','title'),('titlelen','titlelen'),('titleold','titleold'),('titlestring','titlestring'),('tl','tl'),('tm','tm'),('to','to'),('toolbar','toolbar'),('toolbariconsize','toolbariconsize'),('top','top'),('tpm','tpm'),('tr','tr'),('ts','ts'),('tsl','tsl'),('tsr','tsr'),('ttimeout','ttimeout'),('ttimeoutlen','ttimeoutlen'),('ttm','ttm'),('tty','tty'),('ttybuiltin','ttybuiltin'),('ttyfast','ttyfast'),('ttym','ttym'),('ttymouse','ttymouse'),('ttyscroll','ttyscroll'),('ttytype','ttytype'),('tw','tw'),('tx','tx'),('uc','uc'),('udf','udf'),('udir','udir'),('ul','ul'),('undodir','undodir'),('undofile','undofile'),('undolevels','undolevels'),('undoreload','undoreload'),('updatecount','updatecount'),('updatetime','updatetime'),('ur','ur'),('ut','ut'),('vb','vb'),('vbs','vbs'),('vdir','vdir'),('ve','ve'),('verbose','verbose'),('verbosefile','verbosefile'),('vfile','vfile'),('vi','vi'),('viewdir','viewdir'),('viewoptions','viewoptions'),('viminfo','viminfo'),('virtualedit','virtualedit'),('visualbell','visualbell'),('vnoremap','vnoremap'),('vop','vop'),('wa','wa'),('wak','wak'),('warn','warn'),('wb','wb'),('wc','wc'),('wcm','wcm'),('wd','wd'),('weirdinvert','weirdinvert'),('wfh','wfh'),('wfw','wfw'),('wh','wh'),('whichwrap','whichwrap'),('wi','wi'),('wic','wic'),('wig','wig'),('wildchar','wildchar'),('wildcharm','wildcharm'),('wildignore','wildignore'),('wildignorecase','wildignorecase'),('wildmenu','wildmenu'),('wildmode','wildmode'),('wildoptions','wildoptions'),('wim','wim'),('winaltkeys','winaltkeys'),('window','window'),('winfixheight','winfixheight'),('winfixwidth','winfixwidth'),('winheight','winheight'),('winminheight','winminheight'),('winminwidth','winminwidth'),('winwidth','winwidth'),('wiv','wiv'),('wiw','wiw'),('wm','wm'),('wmh','wmh'),('wmnu','wmnu'),('wmw','wmw'),('wop','wop'),('wrap','wrap'),('wrapmargin','wrapmargin'),('wrapscan','wrapscan'),('write','write'),('writeany','writeany'),('writebackup','writebackup'),('writedelay','writedelay'),('ws','ws'),('ww','ww')]
    eric4-4.5.18/eric/ThirdParty/Pygments/pygments/lexers/PaxHeaders.8617/compiled.py0000644000175000001440000000013112261012652025723 xustar000000000000000030 mtime=1388582314.178104684
    29 atime=1389081085.56672435
    30 ctime=1389081086.311724332
    eric4-4.5.18/eric/ThirdParty/Pygments/pygments/lexers/compiled.py0000644000175000001440000036171312261012652025471 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*-
    """
        pygments.lexers.compiled
        ~~~~~~~~~~~~~~~~~~~~~~~~
    
        Lexers for compiled languages.
    
        :copyright: Copyright 2006-2012 by the Pygments team, see AUTHORS.
        :license: BSD, see LICENSE for details.
    """
    
    import re
    from string import Template
    
    from pygments.lexer import Lexer, RegexLexer, include, bygroups, using, \
         this, combined
    from pygments.util import get_bool_opt, get_list_opt
    from pygments.token import Text, Comment, Operator, Keyword, Name, String, \
         Number, Punctuation, Error, Literal
    from pygments.scanner import Scanner
    
    # backwards compatibility
    from pygments.lexers.functional import OcamlLexer
    from pygments.lexers.jvm import JavaLexer, ScalaLexer
    
    __all__ = ['CLexer', 'CppLexer', 'DLexer', 'DelphiLexer', 'ECLexer',
               'DylanLexer', 'ObjectiveCLexer', 'FortranLexer', 'GLShaderLexer',
               'PrologLexer', 'CythonLexer', 'ValaLexer', 'OocLexer', 'GoLexer',
               'FelixLexer', 'AdaLexer', 'Modula2Lexer', 'BlitzMaxLexer',
               'NimrodLexer', 'FantomLexer']
    
    
    class CLexer(RegexLexer):
        """
        For C source code with preprocessor directives.
        """
        name = 'C'
        aliases = ['c']
        filenames = ['*.c', '*.h', '*.idc']
        mimetypes = ['text/x-chdr', 'text/x-csrc']
    
        #: optional Comment or Whitespace
        _ws = r'(?:\s|//.*?\n|/[*].*?[*]/)+'
    
        tokens = {
            'whitespace': [
                # preprocessor directives: without whitespace
                ('^#if\s+0', Comment.Preproc, 'if0'),
                ('^#', Comment.Preproc, 'macro'),
                # or with whitespace
                ('^(' + _ws + r')(#if\s+0)',
                 bygroups(using(this), Comment.Preproc), 'if0'),
                ('^(' + _ws + ')(#)',
                 bygroups(using(this), Comment.Preproc), 'macro'),
                (r'^(\s*)([a-zA-Z_][a-zA-Z0-9_]*:(?!:))',
                 bygroups(Text, Name.Label)),
                (r'\n', Text),
                (r'\s+', Text),
                (r'\\\n', Text), # line continuation
                (r'//(\n|(.|\n)*?[^\\]\n)', Comment.Single),
                (r'/(\\\n)?[*](.|\n)*?[*](\\\n)?/', Comment.Multiline),
            ],
            'statements': [
                (r'L?"', String, 'string'),
                (r"L?'(\\.|\\[0-7]{1,3}|\\x[a-fA-F0-9]{1,2}|[^\\\'\n])'", String.Char),
                (r'(\d+\.\d*|\.\d+|\d+)[eE][+-]?\d+[LlUu]*', Number.Float),
                (r'(\d+\.\d*|\.\d+|\d+[fF])[fF]?', Number.Float),
                (r'0x[0-9a-fA-F]+[LlUu]*', Number.Hex),
                (r'0[0-7]+[LlUu]*', Number.Oct),
                (r'\d+[LlUu]*', Number.Integer),
                (r'\*/', Error),
                (r'[~!%^&*+=|?:<>/-]', Operator),
                (r'[()\[\],.]', Punctuation),
                (r'\b(case)(.+?)(:)', bygroups(Keyword, using(this), Text)),
                (r'(auto|break|case|const|continue|default|do|else|enum|extern|'
                 r'for|goto|if|register|restricted|return|sizeof|static|struct|'
                 r'switch|typedef|union|volatile|virtual|while)\b', Keyword),
                (r'(int|long|float|short|double|char|unsigned|signed|void)\b',
                 Keyword.Type),
                (r'(_{0,2}inline|naked|restrict|thread|typename)\b', Keyword.Reserved),
                (r'__(asm|int8|based|except|int16|stdcall|cdecl|fastcall|int32|'
                 r'declspec|finally|int64|try|leave)\b', Keyword.Reserved),
                (r'(true|false|NULL)\b', Name.Builtin),
                ('[a-zA-Z_][a-zA-Z0-9_]*', Name),
            ],
            'root': [
                include('whitespace'),
                # functions
                (r'((?:[a-zA-Z0-9_*\s])+?(?:\s|[*]))'    # return arguments
                 r'([a-zA-Z_][a-zA-Z0-9_]*)'             # method name
                 r'(\s*\([^;]*?\))'                      # signature
                 r'(' + _ws + r')({)',
                 bygroups(using(this), Name.Function, using(this), using(this),
                          Punctuation),
                 'function'),
                # function declarations
                (r'((?:[a-zA-Z0-9_*\s])+?(?:\s|[*]))'    # return arguments
                 r'([a-zA-Z_][a-zA-Z0-9_]*)'             # method name
                 r'(\s*\([^;]*?\))'                      # signature
                 r'(' + _ws + r')(;)',
                 bygroups(using(this), Name.Function, using(this), using(this),
                          Punctuation)),
                ('', Text, 'statement'),
            ],
            'statement' : [
                include('whitespace'),
                include('statements'),
                ('[{}]', Punctuation),
                (';', Punctuation, '#pop'),
            ],
            'function': [
                include('whitespace'),
                include('statements'),
                (';', Punctuation),
                ('{', Punctuation, '#push'),
                ('}', Punctuation, '#pop'),
            ],
            'string': [
                (r'"', String, '#pop'),
                (r'\\([\\abfnrtv"\']|x[a-fA-F0-9]{2,4}|[0-7]{1,3})', String.Escape),
                (r'[^\\"\n]+', String), # all other characters
                (r'\\\n', String), # line continuation
                (r'\\', String), # stray backslash
            ],
            'macro': [
                (r'[^/\n]+', Comment.Preproc),
                (r'/[*](.|\n)*?[*]/', Comment.Multiline),
                (r'//.*?\n', Comment.Single, '#pop'),
                (r'/', Comment.Preproc),
                (r'(?<=\\)\n', Comment.Preproc),
                (r'\n', Comment.Preproc, '#pop'),
            ],
            'if0': [
                (r'^\s*#if.*?(?/-]', Operator),
                (r'[()\[\],.;]', Punctuation),
                (r'(asm|auto|break|case|catch|const|const_cast|continue|'
                 r'default|delete|do|dynamic_cast|else|enum|explicit|export|'
                 r'extern|for|friend|goto|if|mutable|namespace|new|operator|'
                 r'private|protected|public|register|reinterpret_cast|return|'
                 r'restrict|sizeof|static|static_cast|struct|switch|template|'
                 r'this|throw|throws|try|typedef|typeid|typename|union|using|'
                 r'volatile|virtual|while)\b', Keyword),
                (r'(class)(\s+)', bygroups(Keyword, Text), 'classname'),
                (r'(bool|int|long|float|short|double|char|unsigned|signed|'
                 r'void|wchar_t)\b', Keyword.Type),
                (r'(_{0,2}inline|naked|thread)\b', Keyword.Reserved),
                (r'__(asm|int8|based|except|int16|stdcall|cdecl|fastcall|int32|'
                 r'declspec|finally|int64|try|leave|wchar_t|w64|virtual_inheritance|'
                 r'uuidof|unaligned|super|single_inheritance|raise|noop|'
                 r'multiple_inheritance|m128i|m128d|m128|m64|interface|'
                 r'identifier|forceinline|event|assume)\b', Keyword.Reserved),
                # Offload C++ extensions, http://offload.codeplay.com/
                (r'(__offload|__blockingoffload|__outer)\b', Keyword.Pseudo),
                (r'(true|false)\b', Keyword.Constant),
                (r'NULL\b', Name.Builtin),
                ('[a-zA-Z_][a-zA-Z0-9_]*:(?!:)', Name.Label),
                ('[a-zA-Z_][a-zA-Z0-9_]*', Name),
            ],
            'classname': [
                (r'[a-zA-Z_][a-zA-Z0-9_]*', Name.Class, '#pop'),
                # template specification
                (r'\s*(?=>)', Text, '#pop'),
            ],
            'string': [
                (r'"', String, '#pop'),
                (r'\\([\\abfnrtv"\']|x[a-fA-F0-9]{2,4}|[0-7]{1,3})', String.Escape),
                (r'[^\\"\n]+', String), # all other characters
                (r'\\\n', String), # line continuation
                (r'\\', String), # stray backslash
            ],
            'macro': [
                (r'[^/\n]+', Comment.Preproc),
                (r'/[*](.|\n)*?[*]/', Comment.Multiline),
                (r'//.*?\n', Comment.Single, '#pop'),
                (r'/', Comment.Preproc),
                (r'(?<=\\)\n', Comment.Preproc),
                (r'\n', Comment.Preproc, '#pop'),
            ],
            'if0': [
                (r'^\s*#if.*?(?/-]', Operator),
                (r'[()\[\],.]', Punctuation),
                (r'\b(case)(.+?)(:)', bygroups(Keyword, using(this), Text)),
                (r'(auto|break|case|const|continue|default|do|else|enum|extern|'
                 r'for|goto|if|register|restricted|return|sizeof|static|struct|'
                 r'switch|typedef|union|volatile|virtual|while|class|private|public|'
                 r'property|import|delete|new|new0|renew|renew0|define|get|set|remote|dllexport|dllimport|stdcall|'
                 r'subclass|__on_register_module|namespace|using|typed_object|any_object|incref|register|watch|'
                 r'stopwatching|firewatchers|watchable|class_designer|class_fixed|class_no_expansion|isset|'
                 r'class_default_property|property_category|class_data|class_property|virtual|thisclass|'
                 r'dbtable|dbindex|database_open|dbfield)\b', Keyword),
                (r'(int|long|float|short|double|char|unsigned|signed|void)\b',
                 Keyword.Type),
                (r'(uint|uint16|uint32|uint64|bool|byte|unichar|int64)\b',
                 Keyword.Type),
                (r'(class)(\s+)', bygroups(Keyword, Text), 'classname'),
                (r'(_{0,2}inline|naked|restrict|thread|typename)\b', Keyword.Reserved),
                (r'__(asm|int8|based|except|int16|stdcall|cdecl|fastcall|int32|'
                 r'declspec|finally|int64|try|leave)\b', Keyword.Reserved),
                (r'(true|false|null|value|this|NULL)\b', Name.Builtin),
                ('[a-zA-Z_][a-zA-Z0-9_]*', Name),
            ],
            'root': [
                include('whitespace'),
                # functions
                (r'((?:[a-zA-Z0-9_*\s])+?(?:\s|[*]))'    # return arguments
                 r'([a-zA-Z_][a-zA-Z0-9_]*)'             # method name
                 r'(\s*\([^;]*?\))'                      # signature
                 r'(' + _ws + r')({)',
                 bygroups(using(this), Name.Function, using(this), using(this),
                          Punctuation),
                 'function'),
                # function declarations
                (r'((?:[a-zA-Z0-9_*\s])+?(?:\s|[*]))'    # return arguments
                 r'([a-zA-Z_][a-zA-Z0-9_]*)'             # method name
                 r'(\s*\([^;]*?\))'                      # signature
                 r'(' + _ws + r')(;)',
                 bygroups(using(this), Name.Function, using(this), using(this),
                          Punctuation)),
                ('', Text, 'statement'),
            ],
            'classname': [
                (r'[a-zA-Z_][a-zA-Z0-9_]*', Name.Class, '#pop'),
                # template specification
                (r'\s*(?=>)', Text, '#pop'),
            ],
            'statement' : [
                include('whitespace'),
                include('statements'),
                ('[{}]', Punctuation),
                (';', Punctuation, '#pop'),
            ],
            'function': [
                include('whitespace'),
                include('statements'),
                (';', Punctuation),
                ('{', Punctuation, '#push'),
                ('}', Punctuation, '#pop'),
            ],
            'string': [
                (r'"', String, '#pop'),
                (r'\\([\\abfnrtv"\']|x[a-fA-F0-9]{2,4}|[0-7]{1,3})', String.Escape),
                (r'[^\\"\n]+', String), # all other characters
                (r'\\\n', String), # line continuation
                (r'\\', String), # stray backslash
            ],
            'macro': [
                (r'[^/\n]+', Comment.Preproc),
                (r'/[*](.|\n)*?[*]/', Comment.Multiline),
                (r'//.*?\n', Comment.Single, '#pop'),
                (r'/', Comment.Preproc),
                (r'(?<=\\)\n', Comment.Preproc),
                (r'\n', Comment.Preproc, '#pop'),
            ],
            'if0': [
                (r'^\s*#if.*?(?=|!<=|!<>=|!<>|!<|!>|!=|>>>=|>>>|>>=|>>|>='
                 r'|<>=|<>|<<=|<<|<=|\+\+|\+=|--|-=|\|\||\|=|&&|&=|\.\.\.|\.\.|/=)'
                 r'|[/.&|\-+<>!()\[\]{}?,;:$=*%^~]', Punctuation
                ),
                # Identifier
                (r'[a-zA-Z_]\w*', Name),
            ],
            'nested_comment': [
                (r'[^+/]+', Comment.Multiline),
                (r'/\+', Comment.Multiline, '#push'),
                (r'\+/', Comment.Multiline, '#pop'),
                (r'[+/]', Comment.Multiline),
            ],
            'token_string': [
                (r'{', Punctuation, 'token_string_nest'),
                (r'}', String, '#pop'),
                include('root'),
            ],
            'token_string_nest': [
                (r'{', Punctuation, '#push'),
                (r'}', Punctuation, '#pop'),
                include('root'),
            ],
            'delimited_bracket': [
                (r'[^\[\]]+', String),
                (r'\[', String, 'delimited_inside_bracket'),
                (r'\]"', String, '#pop'),
            ],
            'delimited_inside_bracket': [
                (r'[^\[\]]+', String),
                (r'\[', String, '#push'),
                (r'\]', String, '#pop'),
            ],
            'delimited_parenthesis': [
                (r'[^\(\)]+', String),
                (r'\(', String, 'delimited_inside_parenthesis'),
                (r'\)"', String, '#pop'),
            ],
            'delimited_inside_parenthesis': [
                (r'[^\(\)]+', String),
                (r'\(', String, '#push'),
                (r'\)', String, '#pop'),
            ],
            'delimited_angle': [
                (r'[^<>]+', String),
                (r'<', String, 'delimited_inside_angle'),
                (r'>"', String, '#pop'),
            ],
            'delimited_inside_angle': [
                (r'[^<>]+', String),
                (r'<', String, '#push'),
                (r'>', String, '#pop'),
            ],
            'delimited_curly': [
                (r'[^{}]+', String),
                (r'{', String, 'delimited_inside_curly'),
                (r'}"', String, '#pop'),
            ],
            'delimited_inside_curly': [
                (r'[^{}]+', String),
                (r'{', String, '#push'),
                (r'}', String, '#pop'),
            ],
        }
    
    
    class DelphiLexer(Lexer):
        """
        For `Delphi `_ (Borland Object Pascal),
        Turbo Pascal and Free Pascal source code.
    
        Additional options accepted:
    
        `turbopascal`
            Highlight Turbo Pascal specific keywords (default: ``True``).
        `delphi`
            Highlight Borland Delphi specific keywords (default: ``True``).
        `freepascal`
            Highlight Free Pascal specific keywords (default: ``True``).
        `units`
            A list of units that should be considered builtin, supported are
            ``System``, ``SysUtils``, ``Classes`` and ``Math``.
            Default is to consider all of them builtin.
        """
        name = 'Delphi'
        aliases = ['delphi', 'pas', 'pascal', 'objectpascal']
        filenames = ['*.pas']
        mimetypes = ['text/x-pascal']
    
        TURBO_PASCAL_KEYWORDS = [
            'absolute', 'and', 'array', 'asm', 'begin', 'break', 'case',
            'const', 'constructor', 'continue', 'destructor', 'div', 'do',
            'downto', 'else', 'end', 'file', 'for', 'function', 'goto',
            'if', 'implementation', 'in', 'inherited', 'inline', 'interface',
            'label', 'mod', 'nil', 'not', 'object', 'of', 'on', 'operator',
            'or', 'packed', 'procedure', 'program', 'record', 'reintroduce',
            'repeat', 'self', 'set', 'shl', 'shr', 'string', 'then', 'to',
            'type', 'unit', 'until', 'uses', 'var', 'while', 'with', 'xor'
        ]
    
        DELPHI_KEYWORDS = [
            'as', 'class', 'except', 'exports', 'finalization', 'finally',
            'initialization', 'is', 'library', 'on', 'property', 'raise',
            'threadvar', 'try'
        ]
    
        FREE_PASCAL_KEYWORDS = [
            'dispose', 'exit', 'false', 'new', 'true'
        ]
    
        BLOCK_KEYWORDS = set([
            'begin', 'class', 'const', 'constructor', 'destructor', 'end',
            'finalization', 'function', 'implementation', 'initialization',
            'label', 'library', 'operator', 'procedure', 'program', 'property',
            'record', 'threadvar', 'type', 'unit', 'uses', 'var'
        ])
    
        FUNCTION_MODIFIERS = set([
            'alias', 'cdecl', 'export', 'inline', 'interrupt', 'nostackframe',
            'pascal', 'register', 'safecall', 'softfloat', 'stdcall',
            'varargs', 'name', 'dynamic', 'near', 'virtual', 'external',
            'override', 'assembler'
        ])
    
        # XXX: those aren't global. but currently we know no way for defining
        #      them just for the type context.
        DIRECTIVES = set([
            'absolute', 'abstract', 'assembler', 'cppdecl', 'default', 'far',
            'far16', 'forward', 'index', 'oldfpccall', 'private', 'protected',
            'published', 'public'
        ])
    
        BUILTIN_TYPES = set([
            'ansichar', 'ansistring', 'bool', 'boolean', 'byte', 'bytebool',
            'cardinal', 'char', 'comp', 'currency', 'double', 'dword',
            'extended', 'int64', 'integer', 'iunknown', 'longbool', 'longint',
            'longword', 'pansichar', 'pansistring', 'pbool', 'pboolean',
            'pbyte', 'pbytearray', 'pcardinal', 'pchar', 'pcomp', 'pcurrency',
            'pdate', 'pdatetime', 'pdouble', 'pdword', 'pextended', 'phandle',
            'pint64', 'pinteger', 'plongint', 'plongword', 'pointer',
            'ppointer', 'pshortint', 'pshortstring', 'psingle', 'psmallint',
            'pstring', 'pvariant', 'pwidechar', 'pwidestring', 'pword',
            'pwordarray', 'pwordbool', 'real', 'real48', 'shortint',
            'shortstring', 'single', 'smallint', 'string', 'tclass', 'tdate',
            'tdatetime', 'textfile', 'thandle', 'tobject', 'ttime', 'variant',
            'widechar', 'widestring', 'word', 'wordbool'
        ])
    
        BUILTIN_UNITS = {
            'System': [
                'abs', 'acquireexceptionobject', 'addr', 'ansitoutf8',
                'append', 'arctan', 'assert', 'assigned', 'assignfile',
                'beginthread', 'blockread', 'blockwrite', 'break', 'chdir',
                'chr', 'close', 'closefile', 'comptocurrency', 'comptodouble',
                'concat', 'continue', 'copy', 'cos', 'dec', 'delete',
                'dispose', 'doubletocomp', 'endthread', 'enummodules',
                'enumresourcemodules', 'eof', 'eoln', 'erase', 'exceptaddr',
                'exceptobject', 'exclude', 'exit', 'exp', 'filepos', 'filesize',
                'fillchar', 'finalize', 'findclasshinstance', 'findhinstance',
                'findresourcehinstance', 'flush', 'frac', 'freemem',
                'get8087cw', 'getdir', 'getlasterror', 'getmem',
                'getmemorymanager', 'getmodulefilename', 'getvariantmanager',
                'halt', 'hi', 'high', 'inc', 'include', 'initialize', 'insert',
                'int', 'ioresult', 'ismemorymanagerset', 'isvariantmanagerset',
                'length', 'ln', 'lo', 'low', 'mkdir', 'move', 'new', 'odd',
                'olestrtostring', 'olestrtostrvar', 'ord', 'paramcount',
                'paramstr', 'pi', 'pos', 'pred', 'ptr', 'pucs4chars', 'random',
                'randomize', 'read', 'readln', 'reallocmem',
                'releaseexceptionobject', 'rename', 'reset', 'rewrite', 'rmdir',
                'round', 'runerror', 'seek', 'seekeof', 'seekeoln',
                'set8087cw', 'setlength', 'setlinebreakstyle',
                'setmemorymanager', 'setstring', 'settextbuf',
                'setvariantmanager', 'sin', 'sizeof', 'slice', 'sqr', 'sqrt',
                'str', 'stringofchar', 'stringtoolestr', 'stringtowidechar',
                'succ', 'swap', 'trunc', 'truncate', 'typeinfo',
                'ucs4stringtowidestring', 'unicodetoutf8', 'uniquestring',
                'upcase', 'utf8decode', 'utf8encode', 'utf8toansi',
                'utf8tounicode', 'val', 'vararrayredim', 'varclear',
                'widecharlentostring', 'widecharlentostrvar',
                'widechartostring', 'widechartostrvar',
                'widestringtoucs4string', 'write', 'writeln'
            ],
            'SysUtils': [
                'abort', 'addexitproc', 'addterminateproc', 'adjustlinebreaks',
                'allocmem', 'ansicomparefilename', 'ansicomparestr',
                'ansicomparetext', 'ansidequotedstr', 'ansiextractquotedstr',
                'ansilastchar', 'ansilowercase', 'ansilowercasefilename',
                'ansipos', 'ansiquotedstr', 'ansisamestr', 'ansisametext',
                'ansistrcomp', 'ansistricomp', 'ansistrlastchar', 'ansistrlcomp',
                'ansistrlicomp', 'ansistrlower', 'ansistrpos', 'ansistrrscan',
                'ansistrscan', 'ansistrupper', 'ansiuppercase',
                'ansiuppercasefilename', 'appendstr', 'assignstr', 'beep',
                'booltostr', 'bytetocharindex', 'bytetocharlen', 'bytetype',
                'callterminateprocs', 'changefileext', 'charlength',
                'chartobyteindex', 'chartobytelen', 'comparemem', 'comparestr',
                'comparetext', 'createdir', 'createguid', 'currentyear',
                'currtostr', 'currtostrf', 'date', 'datetimetofiledate',
                'datetimetostr', 'datetimetostring', 'datetimetosystemtime',
                'datetimetotimestamp', 'datetostr', 'dayofweek', 'decodedate',
                'decodedatefully', 'decodetime', 'deletefile', 'directoryexists',
                'diskfree', 'disksize', 'disposestr', 'encodedate', 'encodetime',
                'exceptionerrormessage', 'excludetrailingbackslash',
                'excludetrailingpathdelimiter', 'expandfilename',
                'expandfilenamecase', 'expanduncfilename', 'extractfiledir',
                'extractfiledrive', 'extractfileext', 'extractfilename',
                'extractfilepath', 'extractrelativepath', 'extractshortpathname',
                'fileage', 'fileclose', 'filecreate', 'filedatetodatetime',
                'fileexists', 'filegetattr', 'filegetdate', 'fileisreadonly',
                'fileopen', 'fileread', 'filesearch', 'fileseek', 'filesetattr',
                'filesetdate', 'filesetreadonly', 'filewrite', 'finalizepackage',
                'findclose', 'findcmdlineswitch', 'findfirst', 'findnext',
                'floattocurr', 'floattodatetime', 'floattodecimal', 'floattostr',
                'floattostrf', 'floattotext', 'floattotextfmt', 'fmtloadstr',
                'fmtstr', 'forcedirectories', 'format', 'formatbuf', 'formatcurr',
                'formatdatetime', 'formatfloat', 'freeandnil', 'getcurrentdir',
                'getenvironmentvariable', 'getfileversion', 'getformatsettings',
                'getlocaleformatsettings', 'getmodulename', 'getpackagedescription',
                'getpackageinfo', 'gettime', 'guidtostring', 'incamonth',
                'includetrailingbackslash', 'includetrailingpathdelimiter',
                'incmonth', 'initializepackage', 'interlockeddecrement',
                'interlockedexchange', 'interlockedexchangeadd',
                'interlockedincrement', 'inttohex', 'inttostr', 'isdelimiter',
                'isequalguid', 'isleapyear', 'ispathdelimiter', 'isvalidident',
                'languages', 'lastdelimiter', 'loadpackage', 'loadstr',
                'lowercase', 'msecstotimestamp', 'newstr', 'nextcharindex', 'now',
                'outofmemoryerror', 'quotedstr', 'raiselastoserror',
                'raiselastwin32error', 'removedir', 'renamefile', 'replacedate',
                'replacetime', 'safeloadlibrary', 'samefilename', 'sametext',
                'setcurrentdir', 'showexception', 'sleep', 'stralloc', 'strbufsize',
                'strbytetype', 'strcat', 'strcharlength', 'strcomp', 'strcopy',
                'strdispose', 'strecopy', 'strend', 'strfmt', 'stricomp',
                'stringreplace', 'stringtoguid', 'strlcat', 'strlcomp', 'strlcopy',
                'strlen', 'strlfmt', 'strlicomp', 'strlower', 'strmove', 'strnew',
                'strnextchar', 'strpas', 'strpcopy', 'strplcopy', 'strpos',
                'strrscan', 'strscan', 'strtobool', 'strtobooldef', 'strtocurr',
                'strtocurrdef', 'strtodate', 'strtodatedef', 'strtodatetime',
                'strtodatetimedef', 'strtofloat', 'strtofloatdef', 'strtoint',
                'strtoint64', 'strtoint64def', 'strtointdef', 'strtotime',
                'strtotimedef', 'strupper', 'supports', 'syserrormessage',
                'systemtimetodatetime', 'texttofloat', 'time', 'timestamptodatetime',
                'timestamptomsecs', 'timetostr', 'trim', 'trimleft', 'trimright',
                'tryencodedate', 'tryencodetime', 'tryfloattocurr', 'tryfloattodatetime',
                'trystrtobool', 'trystrtocurr', 'trystrtodate', 'trystrtodatetime',
                'trystrtofloat', 'trystrtoint', 'trystrtoint64', 'trystrtotime',
                'unloadpackage', 'uppercase', 'widecomparestr', 'widecomparetext',
                'widefmtstr', 'wideformat', 'wideformatbuf', 'widelowercase',
                'widesamestr', 'widesametext', 'wideuppercase', 'win32check',
                'wraptext'
            ],
            'Classes': [
                'activateclassgroup', 'allocatehwnd', 'bintohex', 'checksynchronize',
                'collectionsequal', 'countgenerations', 'deallocatehwnd', 'equalrect',
                'extractstrings', 'findclass', 'findglobalcomponent', 'getclass',
                'groupdescendantswith', 'hextobin', 'identtoint',
                'initinheritedcomponent', 'inttoident', 'invalidpoint',
                'isuniqueglobalcomponentname', 'linestart', 'objectbinarytotext',
                'objectresourcetotext', 'objecttexttobinary', 'objecttexttoresource',
                'pointsequal', 'readcomponentres', 'readcomponentresex',
                'readcomponentresfile', 'rect', 'registerclass', 'registerclassalias',
                'registerclasses', 'registercomponents', 'registerintegerconsts',
                'registernoicon', 'registernonactivex', 'smallpoint', 'startclassgroup',
                'teststreamformat', 'unregisterclass', 'unregisterclasses',
                'unregisterintegerconsts', 'unregistermoduleclasses',
                'writecomponentresfile'
            ],
            'Math': [
                'arccos', 'arccosh', 'arccot', 'arccoth', 'arccsc', 'arccsch', 'arcsec',
                'arcsech', 'arcsin', 'arcsinh', 'arctan2', 'arctanh', 'ceil',
                'comparevalue', 'cosecant', 'cosh', 'cot', 'cotan', 'coth', 'csc',
                'csch', 'cycletodeg', 'cycletograd', 'cycletorad', 'degtocycle',
                'degtograd', 'degtorad', 'divmod', 'doubledecliningbalance',
                'ensurerange', 'floor', 'frexp', 'futurevalue', 'getexceptionmask',
                'getprecisionmode', 'getroundmode', 'gradtocycle', 'gradtodeg',
                'gradtorad', 'hypot', 'inrange', 'interestpayment', 'interestrate',
                'internalrateofreturn', 'intpower', 'isinfinite', 'isnan', 'iszero',
                'ldexp', 'lnxp1', 'log10', 'log2', 'logn', 'max', 'maxintvalue',
                'maxvalue', 'mean', 'meanandstddev', 'min', 'minintvalue', 'minvalue',
                'momentskewkurtosis', 'netpresentvalue', 'norm', 'numberofperiods',
                'payment', 'periodpayment', 'poly', 'popnstddev', 'popnvariance',
                'power', 'presentvalue', 'radtocycle', 'radtodeg', 'radtograd',
                'randg', 'randomrange', 'roundto', 'samevalue', 'sec', 'secant',
                'sech', 'setexceptionmask', 'setprecisionmode', 'setroundmode',
                'sign', 'simpleroundto', 'sincos', 'sinh', 'slndepreciation', 'stddev',
                'sum', 'sumint', 'sumofsquares', 'sumsandsquares', 'syddepreciation',
                'tan', 'tanh', 'totalvariance', 'variance'
            ]
        }
    
        ASM_REGISTERS = set([
            'ah', 'al', 'ax', 'bh', 'bl', 'bp', 'bx', 'ch', 'cl', 'cr0',
            'cr1', 'cr2', 'cr3', 'cr4', 'cs', 'cx', 'dh', 'di', 'dl', 'dr0',
            'dr1', 'dr2', 'dr3', 'dr4', 'dr5', 'dr6', 'dr7', 'ds', 'dx',
            'eax', 'ebp', 'ebx', 'ecx', 'edi', 'edx', 'es', 'esi', 'esp',
            'fs', 'gs', 'mm0', 'mm1', 'mm2', 'mm3', 'mm4', 'mm5', 'mm6',
            'mm7', 'si', 'sp', 'ss', 'st0', 'st1', 'st2', 'st3', 'st4', 'st5',
            'st6', 'st7', 'xmm0', 'xmm1', 'xmm2', 'xmm3', 'xmm4', 'xmm5',
            'xmm6', 'xmm7'
        ])
    
        ASM_INSTRUCTIONS = set([
            'aaa', 'aad', 'aam', 'aas', 'adc', 'add', 'and', 'arpl', 'bound',
            'bsf', 'bsr', 'bswap', 'bt', 'btc', 'btr', 'bts', 'call', 'cbw',
            'cdq', 'clc', 'cld', 'cli', 'clts', 'cmc', 'cmova', 'cmovae',
            'cmovb', 'cmovbe', 'cmovc', 'cmovcxz', 'cmove', 'cmovg',
            'cmovge', 'cmovl', 'cmovle', 'cmovna', 'cmovnae', 'cmovnb',
            'cmovnbe', 'cmovnc', 'cmovne', 'cmovng', 'cmovnge', 'cmovnl',
            'cmovnle', 'cmovno', 'cmovnp', 'cmovns', 'cmovnz', 'cmovo',
            'cmovp', 'cmovpe', 'cmovpo', 'cmovs', 'cmovz', 'cmp', 'cmpsb',
            'cmpsd', 'cmpsw', 'cmpxchg', 'cmpxchg486', 'cmpxchg8b', 'cpuid',
            'cwd', 'cwde', 'daa', 'das', 'dec', 'div', 'emms', 'enter', 'hlt',
            'ibts', 'icebp', 'idiv', 'imul', 'in', 'inc', 'insb', 'insd',
            'insw', 'int', 'int01', 'int03', 'int1', 'int3', 'into', 'invd',
            'invlpg', 'iret', 'iretd', 'iretw', 'ja', 'jae', 'jb', 'jbe',
            'jc', 'jcxz', 'jcxz', 'je', 'jecxz', 'jg', 'jge', 'jl', 'jle',
            'jmp', 'jna', 'jnae', 'jnb', 'jnbe', 'jnc', 'jne', 'jng', 'jnge',
            'jnl', 'jnle', 'jno', 'jnp', 'jns', 'jnz', 'jo', 'jp', 'jpe',
            'jpo', 'js', 'jz', 'lahf', 'lar', 'lcall', 'lds', 'lea', 'leave',
            'les', 'lfs', 'lgdt', 'lgs', 'lidt', 'ljmp', 'lldt', 'lmsw',
            'loadall', 'loadall286', 'lock', 'lodsb', 'lodsd', 'lodsw',
            'loop', 'loope', 'loopne', 'loopnz', 'loopz', 'lsl', 'lss', 'ltr',
            'mov', 'movd', 'movq', 'movsb', 'movsd', 'movsw', 'movsx',
            'movzx', 'mul', 'neg', 'nop', 'not', 'or', 'out', 'outsb', 'outsd',
            'outsw', 'pop', 'popa', 'popad', 'popaw', 'popf', 'popfd', 'popfw',
            'push', 'pusha', 'pushad', 'pushaw', 'pushf', 'pushfd', 'pushfw',
            'rcl', 'rcr', 'rdmsr', 'rdpmc', 'rdshr', 'rdtsc', 'rep', 'repe',
            'repne', 'repnz', 'repz', 'ret', 'retf', 'retn', 'rol', 'ror',
            'rsdc', 'rsldt', 'rsm', 'sahf', 'sal', 'salc', 'sar', 'sbb',
            'scasb', 'scasd', 'scasw', 'seta', 'setae', 'setb', 'setbe',
            'setc', 'setcxz', 'sete', 'setg', 'setge', 'setl', 'setle',
            'setna', 'setnae', 'setnb', 'setnbe', 'setnc', 'setne', 'setng',
            'setnge', 'setnl', 'setnle', 'setno', 'setnp', 'setns', 'setnz',
            'seto', 'setp', 'setpe', 'setpo', 'sets', 'setz', 'sgdt', 'shl',
            'shld', 'shr', 'shrd', 'sidt', 'sldt', 'smi', 'smint', 'smintold',
            'smsw', 'stc', 'std', 'sti', 'stosb', 'stosd', 'stosw', 'str',
            'sub', 'svdc', 'svldt', 'svts', 'syscall', 'sysenter', 'sysexit',
            'sysret', 'test', 'ud1', 'ud2', 'umov', 'verr', 'verw', 'wait',
            'wbinvd', 'wrmsr', 'wrshr', 'xadd', 'xbts', 'xchg', 'xlat',
            'xlatb', 'xor'
        ])
    
        def __init__(self, **options):
            Lexer.__init__(self, **options)
            self.keywords = set()
            if get_bool_opt(options, 'turbopascal', True):
                self.keywords.update(self.TURBO_PASCAL_KEYWORDS)
            if get_bool_opt(options, 'delphi', True):
                self.keywords.update(self.DELPHI_KEYWORDS)
            if get_bool_opt(options, 'freepascal', True):
                self.keywords.update(self.FREE_PASCAL_KEYWORDS)
            self.builtins = set()
            for unit in get_list_opt(options, 'units', self.BUILTIN_UNITS.keys()):
                self.builtins.update(self.BUILTIN_UNITS[unit])
    
        def get_tokens_unprocessed(self, text):
            scanner = Scanner(text, re.DOTALL | re.MULTILINE | re.IGNORECASE)
            stack = ['initial']
            in_function_block = False
            in_property_block = False
            was_dot = False
            next_token_is_function = False
            next_token_is_property = False
            collect_labels = False
            block_labels = set()
            brace_balance = [0, 0]
    
            while not scanner.eos:
                token = Error
    
                if stack[-1] == 'initial':
                    if scanner.scan(r'\s+'):
                        token = Text
                    elif scanner.scan(r'\{.*?\}|\(\*.*?\*\)'):
                        if scanner.match.startswith('$'):
                            token = Comment.Preproc
                        else:
                            token = Comment.Multiline
                    elif scanner.scan(r'//.*?$'):
                        token = Comment.Single
                    elif scanner.scan(r'[-+*\/=<>:;,.@\^]'):
                        token = Operator
                        # stop label highlighting on next ";"
                        if collect_labels and scanner.match == ';':
                            collect_labels = False
                    elif scanner.scan(r'[\(\)\[\]]+'):
                        token = Punctuation
                        # abort function naming ``foo = Function(...)``
                        next_token_is_function = False
                        # if we are in a function block we count the open
                        # braces because ootherwise it's impossible to
                        # determine the end of the modifier context
                        if in_function_block or in_property_block:
                            if scanner.match == '(':
                                brace_balance[0] += 1
                            elif scanner.match == ')':
                                brace_balance[0] -= 1
                            elif scanner.match == '[':
                                brace_balance[1] += 1
                            elif scanner.match == ']':
                                brace_balance[1] -= 1
                    elif scanner.scan(r'[A-Za-z_][A-Za-z_0-9]*'):
                        lowercase_name = scanner.match.lower()
                        if lowercase_name == 'result':
                            token = Name.Builtin.Pseudo
                        elif lowercase_name in self.keywords:
                            token = Keyword
                            # if we are in a special block and a
                            # block ending keyword occours (and the parenthesis
                            # is balanced) we end the current block context
                            if (in_function_block or in_property_block) and \
                               lowercase_name in self.BLOCK_KEYWORDS and \
                               brace_balance[0] <= 0 and \
                               brace_balance[1] <= 0:
                                in_function_block = False
                                in_property_block = False
                                brace_balance = [0, 0]
                                block_labels = set()
                            if lowercase_name in ('label', 'goto'):
                                collect_labels = True
                            elif lowercase_name == 'asm':
                                stack.append('asm')
                            elif lowercase_name == 'property':
                                in_property_block = True
                                next_token_is_property = True
                            elif lowercase_name in ('procedure', 'operator',
                                                    'function', 'constructor',
                                                    'destructor'):
                                in_function_block = True
                                next_token_is_function = True
                        # we are in a function block and the current name
                        # is in the set of registered modifiers. highlight
                        # it as pseudo keyword
                        elif in_function_block and \
                             lowercase_name in self.FUNCTION_MODIFIERS:
                            token = Keyword.Pseudo
                        # if we are in a property highlight some more
                        # modifiers
                        elif in_property_block and \
                             lowercase_name in ('read', 'write'):
                            token = Keyword.Pseudo
                            next_token_is_function = True
                        # if the last iteration set next_token_is_function
                        # to true we now want this name highlighted as
                        # function. so do that and reset the state
                        elif next_token_is_function:
                            # Look if the next token is a dot. If yes it's
                            # not a function, but a class name and the
                            # part after the dot a function name
                            if scanner.test(r'\s*\.\s*'):
                                token = Name.Class
                            # it's not a dot, our job is done
                            else:
                                token = Name.Function
                                next_token_is_function = False
                        # same for properties
                        elif next_token_is_property:
                            token = Name.Property
                            next_token_is_property = False
                        # Highlight this token as label and add it
                        # to the list of known labels
                        elif collect_labels:
                            token = Name.Label
                            block_labels.add(scanner.match.lower())
                        # name is in list of known labels
                        elif lowercase_name in block_labels:
                            token = Name.Label
                        elif lowercase_name in self.BUILTIN_TYPES:
                            token = Keyword.Type
                        elif lowercase_name in self.DIRECTIVES:
                            token = Keyword.Pseudo
                        # builtins are just builtins if the token
                        # before isn't a dot
                        elif not was_dot and lowercase_name in self.builtins:
                            token = Name.Builtin
                        else:
                            token = Name
                    elif scanner.scan(r"'"):
                        token = String
                        stack.append('string')
                    elif scanner.scan(r'\#(\d+|\$[0-9A-Fa-f]+)'):
                        token = String.Char
                    elif scanner.scan(r'\$[0-9A-Fa-f]+'):
                        token = Number.Hex
                    elif scanner.scan(r'\d+(?![eE]|\.[^.])'):
                        token = Number.Integer
                    elif scanner.scan(r'\d+(\.\d+([eE][+-]?\d+)?|[eE][+-]?\d+)'):
                        token = Number.Float
                    else:
                        # if the stack depth is deeper than once, pop
                        if len(stack) > 1:
                            stack.pop()
                        scanner.get_char()
    
                elif stack[-1] == 'string':
                    if scanner.scan(r"''"):
                        token = String.Escape
                    elif scanner.scan(r"'"):
                        token = String
                        stack.pop()
                    elif scanner.scan(r"[^']*"):
                        token = String
                    else:
                        scanner.get_char()
                        stack.pop()
    
                elif stack[-1] == 'asm':
                    if scanner.scan(r'\s+'):
                        token = Text
                    elif scanner.scan(r'end'):
                        token = Keyword
                        stack.pop()
                    elif scanner.scan(r'\{.*?\}|\(\*.*?\*\)'):
                        if scanner.match.startswith('$'):
                            token = Comment.Preproc
                        else:
                            token = Comment.Multiline
                    elif scanner.scan(r'//.*?$'):
                        token = Comment.Single
                    elif scanner.scan(r"'"):
                        token = String
                        stack.append('string')
                    elif scanner.scan(r'@@[A-Za-z_][A-Za-z_0-9]*'):
                        token = Name.Label
                    elif scanner.scan(r'[A-Za-z_][A-Za-z_0-9]*'):
                        lowercase_name = scanner.match.lower()
                        if lowercase_name in self.ASM_INSTRUCTIONS:
                            token = Keyword
                        elif lowercase_name in self.ASM_REGISTERS:
                            token = Name.Builtin
                        else:
                            token = Name
                    elif scanner.scan(r'[-+*\/=<>:;,.@\^]+'):
                        token = Operator
                    elif scanner.scan(r'[\(\)\[\]]+'):
                        token = Punctuation
                    elif scanner.scan(r'\$[0-9A-Fa-f]+'):
                        token = Number.Hex
                    elif scanner.scan(r'\d+(?![eE]|\.[^.])'):
                        token = Number.Integer
                    elif scanner.scan(r'\d+(\.\d+([eE][+-]?\d+)?|[eE][+-]?\d+)'):
                        token = Number.Float
                    else:
                        scanner.get_char()
                        stack.pop()
    
                # save the dot!!!11
                if scanner.match.strip():
                    was_dot = scanner.match == '.'
                yield scanner.start_pos, token, scanner.match or ''
    
    
    class DylanLexer(RegexLexer):
        """
        For the `Dylan `_ language.
    
        *New in Pygments 0.7.*
        """
    
        name = 'Dylan'
        aliases = ['dylan']
        filenames = ['*.dylan', '*.dyl']
        mimetypes = ['text/x-dylan']
    
        flags = re.DOTALL
    
        tokens = {
            'root': [
                (r'\b(subclass|abstract|block|c(on(crete|stant)|lass)|domain'
                 r'|ex(c(eption|lude)|port)|f(unction(al)?)|generic|handler'
                 r'|i(n(herited|line|stance|terface)|mport)|library|m(acro|ethod)'
                 r'|open|primary|sealed|si(deways|ngleton)|slot'
                 r'|v(ariable|irtual))\b', Name.Builtin),
                (r'<\w+>', Keyword.Type),
                (r'//.*?\n', Comment.Single),
                (r'/\*[\w\W]*?\*/', Comment.Multiline),
                (r'"', String, 'string'),
                (r"'(\\.|\\[0-7]{1,3}|\\x[a-fA-F0-9]{1,2}|[^\\\'\n])'", String.Char),
                (r'=>|\b(a(bove|fterwards)|b(e(gin|low)|y)|c(ase|leanup|reate)'
                 r'|define|else(if)?|end|f(inally|or|rom)|i[fn]|l(et|ocal)|otherwise'
                 r'|rename|s(elect|ignal)|t(hen|o)|u(n(less|til)|se)|wh(en|ile))\b',
                 Keyword),
                (r'([ \t])([!\$%&\*\/:<=>\?~_^a-zA-Z0-9.+\-]*:)',
                 bygroups(Text, Name.Variable)),
                (r'([ \t]*)(\S+[^:])([ \t]*)(\()([ \t]*)',
                 bygroups(Text, Name.Function, Text, Punctuation, Text)),
                (r'-?[0-9.]+', Number),
                (r'[(),;]', Punctuation),
                (r'\$[a-zA-Z0-9-]+', Name.Constant),
                (r'[!$%&*/:<>=?~^.+\[\]{}-]+', Operator),
                (r'\s+', Text),
                (r'#"[a-zA-Z0-9-]+"', Keyword),
                (r'#[a-zA-Z0-9-]+', Keyword),
                (r'#(\(|\[)', Punctuation),
                (r'[a-zA-Z0-9-_]+', Name.Variable),
            ],
            'string': [
                (r'"', String, '#pop'),
                (r'\\([\\abfnrtv"\']|x[a-fA-F0-9]{2,4}|[0-7]{1,3})', String.Escape),
                (r'[^\\"\n]+', String), # all other characters
                (r'\\\n', String), # line continuation
                (r'\\', String), # stray backslash
            ],
        }
    
    
    class ObjectiveCLexer(RegexLexer):
        """
        For Objective-C source code with preprocessor directives.
        """
    
        name = 'Objective-C'
        aliases = ['objective-c', 'objectivec', 'obj-c', 'objc']
        #XXX: objc has .h files too :-/
        filenames = ['*.m']
        mimetypes = ['text/x-objective-c']
    
        #: optional Comment or Whitespace
        _ws = r'(?:\s|//.*?\n|/[*].*?[*]/)+'
    
        tokens = {
            'whitespace': [
                # preprocessor directives: without whitespace
                ('^#if\s+0', Comment.Preproc, 'if0'),
                ('^#', Comment.Preproc, 'macro'),
                # or with whitespace
                ('^' + _ws + r'#if\s+0', Comment.Preproc, 'if0'),
                ('^' + _ws + '#', Comment.Preproc, 'macro'),
                (r'\n', Text),
                (r'\s+', Text),
                (r'\\\n', Text), # line continuation
                (r'//(\n|(.|\n)*?[^\\]\n)', Comment.Single),
                (r'/(\\\n)?[*](.|\n)*?[*](\\\n)?/', Comment.Multiline),
            ],
            'statements': [
                (r'(L|@)?"', String, 'string'),
                (r"(L|@)?'(\\.|\\[0-7]{1,3}|\\x[a-fA-F0-9]{1,2}|[^\\\'\n])'",
                 String.Char),
                (r'(\d+\.\d*|\.\d+|\d+)[eE][+-]?\d+[lL]?', Number.Float),
                (r'(\d+\.\d*|\.\d+|\d+[fF])[fF]?', Number.Float),
                (r'0x[0-9a-fA-F]+[Ll]?', Number.Hex),
                (r'0[0-7]+[Ll]?', Number.Oct),
                (r'\d+[Ll]?', Number.Integer),
                (r'[~!%^&*+=|?:<>/-]', Operator),
                (r'[()\[\],.]', Punctuation),
                (r'(auto|break|case|const|continue|default|do|else|enum|extern|'
                 r'for|goto|if|register|restricted|return|sizeof|static|struct|'
                 r'switch|typedef|union|volatile|virtual|while|in|@selector|'
                 r'@private|@protected|@public|@encode|'
                 r'@synchronized|@try|@throw|@catch|@finally|@end|@property|'
                 r'@synthesize|@dynamic)\b', Keyword),
                (r'(int|long|float|short|double|char|unsigned|signed|void|'
                 r'id|BOOL|IBOutlet|IBAction|SEL)\b', Keyword.Type),
                (r'(_{0,2}inline|naked|restrict|thread|typename)\b',
                 Keyword.Reserved),
                (r'__(asm|int8|based|except|int16|stdcall|cdecl|fastcall|int32|'
                 r'declspec|finally|int64|try|leave)\b', Keyword.Reserved),
                (r'(TRUE|FALSE|nil|NULL)\b', Name.Builtin),
                ('[a-zA-Z$_][a-zA-Z0-9$_]*:(?!:)', Name.Label),
                ('[a-zA-Z$_][a-zA-Z0-9$_]*', Name),
            ],
            'root': [
                include('whitespace'),
                # functions
                (r'((?:[a-zA-Z0-9_*\s])+?(?:\s|[*]))'    # return arguments
                 r'([a-zA-Z$_][a-zA-Z0-9$_]*)'           # method name
                 r'(\s*\([^;]*?\))'                      # signature
                 r'(' + _ws + r')({)',
                 bygroups(using(this), Name.Function,
                          using(this), Text, Punctuation),
                 'function'),
                # methods
                (r'^([-+])(\s*)'                         # method marker
                 r'(\(.*?\))?(\s*)'                      # return type
                 r'([a-zA-Z$_][a-zA-Z0-9$_]*:?)',        # begin of method name
                 bygroups(Keyword, Text, using(this),
                          Text, Name.Function),
                 'method'),
                # function declarations
                (r'((?:[a-zA-Z0-9_*\s])+?(?:\s|[*]))'    # return arguments
                 r'([a-zA-Z$_][a-zA-Z0-9$_]*)'           # method name
                 r'(\s*\([^;]*?\))'                      # signature
                 r'(' + _ws + r')(;)',
                 bygroups(using(this), Name.Function,
                          using(this), Text, Punctuation)),
                (r'(@interface|@implementation)(\s+)', bygroups(Keyword, Text),
                 'classname'),
                (r'(@class|@protocol)(\s+)', bygroups(Keyword, Text),
                 'forward_classname'),
                (r'(\s*)(@end)(\s*)', bygroups(Text, Keyword, Text)),
                ('', Text, 'statement'),
            ],
            'classname' : [
                # interface definition that inherits
                ('([a-zA-Z$_][a-zA-Z0-9$_]*)(\s*:\s*)([a-zA-Z$_][a-zA-Z0-9$_]*)?',
                 bygroups(Name.Class, Text, Name.Class), '#pop'),
                # interface definition for a category
                ('([a-zA-Z$_][a-zA-Z0-9$_]*)(\s*)(\([a-zA-Z$_][a-zA-Z0-9$_]*\))',
                 bygroups(Name.Class, Text, Name.Label), '#pop'),
                # simple interface / implementation
                ('([a-zA-Z$_][a-zA-Z0-9$_]*)', Name.Class, '#pop')
            ],
            'forward_classname' : [
              ('([a-zA-Z$_][a-zA-Z0-9$_]*)(\s*,\s*)',
               bygroups(Name.Class, Text), 'forward_classname'),
              ('([a-zA-Z$_][a-zA-Z0-9$_]*)(\s*;?)',
               bygroups(Name.Class, Text), '#pop')
            ],
            'statement' : [
                include('whitespace'),
                include('statements'),
                ('[{}]', Punctuation),
                (';', Punctuation, '#pop'),
            ],
            'function': [
                include('whitespace'),
                include('statements'),
                (';', Punctuation),
                ('{', Punctuation, '#push'),
                ('}', Punctuation, '#pop'),
            ],
            'method': [
                include('whitespace'),
                (r'(\(.*?\))([a-zA-Z$_][a-zA-Z0-9$_]*)', bygroups(using(this),
                                                                  Name.Variable)),
                (r'[a-zA-Z$_][a-zA-Z0-9$_]*:', Name.Function),
                (';', Punctuation, '#pop'),
                ('{', Punctuation, 'function'),
                ('', Text, '#pop'),
            ],
            'string': [
                (r'"', String, '#pop'),
                (r'\\([\\abfnrtv"\']|x[a-fA-F0-9]{2,4}|[0-7]{1,3})', String.Escape),
                (r'[^\\"\n]+', String), # all other characters
                (r'\\\n', String), # line continuation
                (r'\\', String), # stray backslash
            ],
            'macro': [
                (r'[^/\n]+', Comment.Preproc),
                (r'/[*](.|\n)*?[*]/', Comment.Multiline),
                (r'//.*?\n', Comment.Single, '#pop'),
                (r'/', Comment.Preproc),
                (r'(?<=\\)\n', Comment.Preproc),
                (r'\n', Comment.Preproc, '#pop'),
            ],
            'if0': [
                (r'^\s*#if.*?(?, <=, >=, ==, /=
        # Logical (?): NOT, AND, OR, EQV, NEQV
    
        # Builtins:
        # http://gcc.gnu.org/onlinedocs/gcc-3.4.6/g77/Table-of-Intrinsic-Functions.html
    
        tokens = {
            'root': [
                (r'!.*\n', Comment),
                include('strings'),
                include('core'),
                (r'[a-z][a-z0-9_]*', Name.Variable),
                include('nums'),
                (r'[\s]+', Text),
            ],
            'core': [
                # Statements
                (r'\b(ACCEPT|ALLOCATABLE|ALLOCATE|ARRAY|ASSIGN|ASYNCHRONOUS|'
                 r'BACKSPACE|BIND|BLOCK DATA|BYTE|CALL|CASE|CLOSE|COMMON|CONTAINS|'
                 r'CONTINUE|CYCLE|DATA|DEALLOCATE|DECODE|DEFERRED|DIMENSION|DO|'
                 r'ELSE|ENCODE|END FILE|ENDIF|END|ENTRY|ENUMERATOR|EQUIVALENCE|'
                 r'EXIT|EXTERNAL|EXTRINSIC|FINAL|FORALL|FORMAT|FUNCTION|GENERIC|'
                 r'GOTO|IF|IMPLICIT|IMPORT|INCLUDE|INQUIRE|INTENT|INTERFACE|'
                 r'INTRINSIC|MODULE|NAMELIST|NULLIFY|NONE|NON_INTRINSIC|'
                 r'NON_OVERRIDABLE|NOPASS|OPEN|OPTIONAL|OPTIONS|PARAMETER|PASS|'
                 r'PAUSE|POINTER|PRINT|PRIVATE|PROGRAM|PROTECTED|PUBLIC|PURE|READ|'
                 r'RECURSIVE|RETURN|REWIND|SAVE|SELECT|SEQUENCE|STOP|SUBROUTINE|'
                 r'TARGET|THEN|TYPE|USE|VALUE|VOLATILE|WHERE|WRITE|WHILE)\s*\b',
                 Keyword),
    
                # Data Types
                (r'\b(CHARACTER|COMPLEX|DOUBLE PRECISION|DOUBLE COMPLEX|INTEGER|'
                 r'LOGICAL|REAL|C_INT|C_SHORT|C_LONG|C_LONG_LONG|C_SIGNED_CHAR|'
                 r'C_SIZE_T|C_INT8_T|C_INT16_T|C_INT32_T|C_INT64_T|C_INT_LEAST8_T|'
                 r'C_INT_LEAST16_T|C_INT_LEAST32_T|C_INT_LEAST64_T|C_INT_FAST8_T|'
                 r'C_INT_FAST16_T|C_INT_FAST32_T|C_INT_FAST64_T|C_INTMAX_T|'
                 r'C_INTPTR_T|C_FLOAT|C_DOUBLE|C_LONG_DOUBLE|C_FLOAT_COMPLEX|'
                 r'C_DOUBLE_COMPLEX|C_LONG_DOUBLE_COMPLEX|C_BOOL|C_CHAR|C_PTR|'
                 r'C_FUNPTR)\s*\b',
                 Keyword.Type),
    
                # Operators
                (r'(\*\*|\*|\+|-|\/|<|>|<=|>=|==|\/=|=)', Operator),
    
                (r'(::)', Keyword.Declaration),
    
                (r'[(),:&%;]', Punctuation),
    
                # Intrinsics
                (r'\b(Abort|Abs|Access|AChar|ACos|AdjustL|AdjustR|AImag|AInt|Alarm|'
                 r'All|Allocated|ALog|AMax|AMin|AMod|And|ANInt|Any|ASin|Associated|'
                 r'ATan|BesJ|BesJN|BesY|BesYN|Bit_Size|BTest|CAbs|CCos|Ceiling|'
                 r'CExp|Char|ChDir|ChMod|CLog|Cmplx|Command_Argument_Count|Complex|'
                 r'Conjg|Cos|CosH|Count|CPU_Time|CShift|CSin|CSqRt|CTime|C_Funloc|'
                 r'C_Loc|C_Associated|C_Null_Ptr|C_Null_Funptr|C_F_Pointer|'
                 r'C_Null_Char|C_Alert|C_Backspace|C_Form_Feed|C_New_Line|'
                 r'C_Carriage_Return|C_Horizontal_Tab|C_Vertical_Tab|'
                 r'DAbs|DACos|DASin|DATan|Date_and_Time|DbesJ|'
                 r'DbesJ|DbesJN|DbesY|DbesY|DbesYN|Dble|DCos|DCosH|DDiM|DErF|DErFC|'
                 r'DExp|Digits|DiM|DInt|DLog|DLog|DMax|DMin|DMod|DNInt|Dot_Product|'
                 r'DProd|DSign|DSinH|DSin|DSqRt|DTanH|DTan|DTime|EOShift|Epsilon|'
                 r'ErF|ErFC|ETime|Exit|Exp|Exponent|Extends_Type_Of|FDate|FGet|'
                 r'FGetC|Float|Floor|Flush|FNum|FPutC|FPut|Fraction|FSeek|FStat|'
                 r'FTell|GError|GetArg|Get_Command|Get_Command_Argument|'
                 r'Get_Environment_Variable|GetCWD|GetEnv|GetGId|GetLog|GetPId|'
                 r'GetUId|GMTime|HostNm|Huge|IAbs|IAChar|IAnd|IArgC|IBClr|IBits|'
                 r'IBSet|IChar|IDate|IDiM|IDInt|IDNInt|IEOr|IErrNo|IFix|Imag|'
                 r'ImagPart|Index|Int|IOr|IRand|IsaTty|IShft|IShftC|ISign|'
                 r'Iso_C_Binding|Is_Iostat_End|Is_Iostat_Eor|ITime|Kill|Kind|'
                 r'LBound|Len|Len_Trim|LGe|LGt|Link|LLe|LLt|LnBlnk|Loc|Log|'
                 r'Logical|Long|LShift|LStat|LTime|MatMul|Max|MaxExponent|MaxLoc|'
                 r'MaxVal|MClock|Merge|Move_Alloc|Min|MinExponent|MinLoc|MinVal|'
                 r'Mod|Modulo|MvBits|Nearest|New_Line|NInt|Not|Or|Pack|PError|'
                 r'Precision|Present|Product|Radix|Rand|Random_Number|Random_Seed|'
                 r'Range|Real|RealPart|Rename|Repeat|Reshape|RRSpacing|RShift|'
                 r'Same_Type_As|Scale|Scan|Second|Selected_Int_Kind|'
                 r'Selected_Real_Kind|Set_Exponent|Shape|Short|Sign|Signal|SinH|'
                 r'Sin|Sleep|Sngl|Spacing|Spread|SqRt|SRand|Stat|Sum|SymLnk|'
                 r'System|System_Clock|Tan|TanH|Time|Tiny|Transfer|Transpose|Trim|'
                 r'TtyNam|UBound|UMask|Unlink|Unpack|Verify|XOr|ZAbs|ZCos|ZExp|'
                 r'ZLog|ZSin|ZSqRt)\s*\b',
                 Name.Builtin),
    
                # Booleans
                (r'\.(true|false)\.', Name.Builtin),
                # Comparing Operators
                (r'\.(eq|ne|lt|le|gt|ge|not|and|or|eqv|neqv)\.', Operator.Word),
            ],
    
            'strings': [
                (r'(?s)"(\\\\|\\[0-7]+|\\.|[^"\\])*"', String.Double),
                (r"(?s)'(\\\\|\\[0-7]+|\\.|[^'\\])*'", String.Single),
            ],
    
            'nums': [
                (r'\d+(?![.Ee])', Number.Integer),
                (r'[+-]?\d*\.\d+([eE][-+]?\d+)?', Number.Float),
                (r'[+-]?\d+\.\d*([eE][-+]?\d+)?', Number.Float),
            ],
        }
    
    
    class GLShaderLexer(RegexLexer):
        """
        GLSL (OpenGL Shader) lexer.
    
        *New in Pygments 1.1.*
        """
        name = 'GLSL'
        aliases = ['glsl']
        filenames = ['*.vert', '*.frag', '*.geo']
        mimetypes = ['text/x-glslsrc']
    
        tokens = {
            'root': [
                (r'^#.*', Comment.Preproc),
                (r'//.*', Comment.Single),
                (r'/(\\\n)?[*](.|\n)*?[*](\\\n)?/', Comment.Multiline),
                (r'\+|-|~|!=?|\*|/|%|<<|>>|<=?|>=?|==?|&&?|\^|\|\|?',
                 Operator),
                (r'[?:]', Operator), # quick hack for ternary
                (r'\bdefined\b', Operator),
                (r'[;{}(),\[\]]', Punctuation),
                #FIXME when e is present, no decimal point needed
                (r'[+-]?\d*\.\d+([eE][-+]?\d+)?', Number.Float),
                (r'[+-]?\d+\.\d*([eE][-+]?\d+)?', Number.Float),
                (r'0[xX][0-9a-fA-F]*', Number.Hex),
                (r'0[0-7]*', Number.Oct),
                (r'[1-9][0-9]*', Number.Integer),
                (r'\b(attribute|const|uniform|varying|centroid|break|continue|'
                 r'do|for|while|if|else|in|out|inout|float|int|void|bool|true|'
                 r'false|invariant|discard|return|mat[234]|mat[234]x[234]|'
                 r'vec[234]|[ib]vec[234]|sampler[123]D|samplerCube|'
                 r'sampler[12]DShadow|struct)\b', Keyword),
                (r'\b(asm|class|union|enum|typedef|template|this|packed|goto|'
                 r'switch|default|inline|noinline|volatile|public|static|extern|'
                 r'external|interface|long|short|double|half|fixed|unsigned|'
                 r'lowp|mediump|highp|precision|input|output|hvec[234]|'
                 r'[df]vec[234]|sampler[23]DRect|sampler2DRectShadow|sizeof|'
                 r'cast|namespace|using)\b', Keyword), #future use
                (r'[a-zA-Z_][a-zA-Z_0-9]*', Name),
                (r'\.', Punctuation),
                (r'\s+', Text),
            ],
        }
    
    
    class PrologLexer(RegexLexer):
        """
        Lexer for Prolog files.
        """
        name = 'Prolog'
        aliases = ['prolog']
        filenames = ['*.prolog', '*.pro', '*.pl']
        mimetypes = ['text/x-prolog']
    
        flags = re.UNICODE
    
        tokens = {
            'root': [
                (r'^#.*', Comment.Single),
                (r'/\*', Comment.Multiline, 'nested-comment'),
                (r'%.*', Comment.Single),
                (r'[0-9]+', Number),
                (r'[\[\](){}|.,;!]', Punctuation),
                (r':-|-->', Punctuation),
                (r'"(?:\\x[0-9a-fA-F]+\\|\\u[0-9a-fA-F]{4}|\\U[0-9a-fA-F]{8}|'
                 r'\\[0-7]+\\|\\[\w\W]|[^"])*"', String.Double),
                (r"'(?:''|[^'])*'", String.Atom), # quoted atom
                # Needs to not be followed by an atom.
                #(r'=(?=\s|[a-zA-Z\[])', Operator),
                (r'(is|<|>|=<|>=|==|=:=|=|/|//|\*|\+|-)(?=\s|[a-zA-Z0-9\[])',
                 Operator),
                (r'(mod|div|not)\b', Operator),
                (r'_', Keyword), # The don't-care variable
                (r'([a-z]+)(:)', bygroups(Name.Namespace, Punctuation)),
                (u'([a-z\u00c0-\u1fff\u3040-\ud7ff\ue000-\uffef]'
                 u'[a-zA-Z0-9_$\u00c0-\u1fff\u3040-\ud7ff\ue000-\uffef]*)'
                 u'(\\s*)(:-|-->)',
                 bygroups(Name.Function, Text, Operator)), # function defn
                (u'([a-z\u00c0-\u1fff\u3040-\ud7ff\ue000-\uffef]'
                 u'[a-zA-Z0-9_$\u00c0-\u1fff\u3040-\ud7ff\ue000-\uffef]*)'
                 u'(\\s*)(\\()',
                 bygroups(Name.Function, Text, Punctuation)),
                (u'[a-z\u00c0-\u1fff\u3040-\ud7ff\ue000-\uffef]'
                 u'[a-zA-Z0-9_$\u00c0-\u1fff\u3040-\ud7ff\ue000-\uffef]*',
                 String.Atom), # atom, characters
                # This one includes !
                (u'[#&*+\\-./:<=>?@\\\\^~\u00a1-\u00bf\u2010-\u303f]+',
                 String.Atom), # atom, graphics
                (r'[A-Z_][A-Za-z0-9_]*', Name.Variable),
                (u'\\s+|[\u2000-\u200f\ufff0-\ufffe\uffef]', Text),
            ],
            'nested-comment': [
                (r'\*/', Comment.Multiline, '#pop'),
                (r'/\*', Comment.Multiline, '#push'),
                (r'[^*/]+', Comment.Multiline),
                (r'[*/]', Comment.Multiline),
            ],
        }
    
        def analyse_text(text):
            return ':-' in text
    
    
    class CythonLexer(RegexLexer):
        """
        For Pyrex and `Cython `_ source code.
    
        *New in Pygments 1.1.*
        """
    
        name = 'Cython'
        aliases = ['cython', 'pyx']
        filenames = ['*.pyx', '*.pxd', '*.pxi']
        mimetypes = ['text/x-cython', 'application/x-cython']
    
        tokens = {
            'root': [
                (r'\n', Text),
                (r'^(\s*)("""(?:.|\n)*?""")', bygroups(Text, String.Doc)),
                (r"^(\s*)('''(?:.|\n)*?''')", bygroups(Text, String.Doc)),
                (r'[^\S\n]+', Text),
                (r'#.*$', Comment),
                (r'[]{}:(),;[]', Punctuation),
                (r'\\\n', Text),
                (r'\\', Text),
                (r'(in|is|and|or|not)\b', Operator.Word),
                (r'(<)([a-zA-Z0-9.?]+)(>)',
                 bygroups(Punctuation, Keyword.Type, Punctuation)),
                (r'!=|==|<<|>>|[-~+/*%=<>&^|.?]', Operator),
                (r'(from)(\d+)(<=)(\s+)(<)(\d+)(:)',
                 bygroups(Keyword, Number.Integer, Operator, Name, Operator,
                          Name, Punctuation)),
                include('keywords'),
                (r'(def|property)(\s+)', bygroups(Keyword, Text), 'funcname'),
                (r'(cp?def)(\s+)', bygroups(Keyword, Text), 'cdef'),
                (r'(class|struct)(\s+)', bygroups(Keyword, Text), 'classname'),
                (r'(from)(\s+)', bygroups(Keyword, Text), 'fromimport'),
                (r'(c?import)(\s+)', bygroups(Keyword, Text), 'import'),
                include('builtins'),
                include('backtick'),
                ('(?:[rR]|[uU][rR]|[rR][uU])"""', String, 'tdqs'),
                ("(?:[rR]|[uU][rR]|[rR][uU])'''", String, 'tsqs'),
                ('(?:[rR]|[uU][rR]|[rR][uU])"', String, 'dqs'),
                ("(?:[rR]|[uU][rR]|[rR][uU])'", String, 'sqs'),
                ('[uU]?"""', String, combined('stringescape', 'tdqs')),
                ("[uU]?'''", String, combined('stringescape', 'tsqs')),
                ('[uU]?"', String, combined('stringescape', 'dqs')),
                ("[uU]?'", String, combined('stringescape', 'sqs')),
                include('name'),
                include('numbers'),
            ],
            'keywords': [
                (r'(assert|break|by|continue|ctypedef|del|elif|else|except\??|exec|'
                 r'finally|for|gil|global|if|include|lambda|nogil|pass|print|raise|'
                 r'return|try|while|yield|as|with)\b', Keyword),
                (r'(DEF|IF|ELIF|ELSE)\b', Comment.Preproc),
            ],
            'builtins': [
                (r'(?/-]', Operator),
                (r'(\[)(Compact|Immutable|(?:Boolean|Simple)Type)(\])',
                 bygroups(Punctuation, Name.Decorator, Punctuation)),
                # TODO: "correctly" parse complex code attributes
                (r'(\[)(CCode|(?:Integer|Floating)Type)',
                 bygroups(Punctuation, Name.Decorator)),
                (r'[()\[\],.]', Punctuation),
                (r'(as|base|break|case|catch|construct|continue|default|delete|do|'
                 r'else|enum|finally|for|foreach|get|if|in|is|lock|new|out|params|'
                 r'return|set|sizeof|switch|this|throw|try|typeof|while|yield)\b',
                 Keyword),
                (r'(abstract|const|delegate|dynamic|ensures|extern|inline|internal|'
                 r'override|owned|private|protected|public|ref|requires|signal|'
                 r'static|throws|unowned|var|virtual|volatile|weak|yields)\b',
                 Keyword.Declaration),
                (r'(namespace|using)(\s+)', bygroups(Keyword.Namespace, Text),
                 'namespace'),
                (r'(class|errordomain|interface|struct)(\s+)',
                 bygroups(Keyword.Declaration, Text), 'class'),
                (r'(\.)([a-zA-Z_][a-zA-Z0-9_]*)',
                 bygroups(Operator, Name.Attribute)),
                # void is an actual keyword, others are in glib-2.0.vapi
                (r'(void|bool|char|double|float|int|int8|int16|int32|int64|long|'
                 r'short|size_t|ssize_t|string|time_t|uchar|uint|uint8|uint16|'
                 r'uint32|uint64|ulong|unichar|ushort)\b', Keyword.Type),
                (r'(true|false|null)\b', Name.Builtin),
                ('[a-zA-Z_][a-zA-Z0-9_]*', Name),
            ],
            'root': [
                include('whitespace'),
                ('', Text, 'statement'),
            ],
            'statement' : [
                include('whitespace'),
                include('statements'),
                ('[{}]', Punctuation),
                (';', Punctuation, '#pop'),
            ],
            'string': [
                (r'"', String, '#pop'),
                (r'\\([\\abfnrtv"\']|x[a-fA-F0-9]{2,4}|[0-7]{1,3})', String.Escape),
                (r'[^\\"\n]+', String), # all other characters
                (r'\\\n', String), # line continuation
                (r'\\', String), # stray backslash
            ],
            'if0': [
                (r'^\s*#if.*?(?`_ source code
    
        *New in Pygments 1.2.*
        """
        name = 'Ooc'
        aliases = ['ooc']
        filenames = ['*.ooc']
        mimetypes = ['text/x-ooc']
    
        tokens = {
            'root': [
                (r'\b(class|interface|implement|abstract|extends|from|'
                 r'this|super|new|const|final|static|import|use|extern|'
                 r'inline|proto|break|continue|fallthrough|operator|if|else|for|'
                 r'while|do|switch|case|as|in|version|return|true|false|null)\b',
                 Keyword),
                (r'include\b', Keyword, 'include'),
                (r'(cover)([ \t]+)(from)([ \t]+)([a-zA-Z0-9_]+[*@]?)',
                 bygroups(Keyword, Text, Keyword, Text, Name.Class)),
                (r'(func)((?:[ \t]|\\\n)+)(~[a-z_][a-zA-Z0-9_]*)',
                 bygroups(Keyword, Text, Name.Function)),
                (r'\bfunc\b', Keyword),
                # Note: %= and ^= not listed on http://ooc-lang.org/syntax
                (r'//.*', Comment),
                (r'(?s)/\*.*?\*/', Comment.Multiline),
                (r'(==?|\+=?|-[=>]?|\*=?|/=?|:=|!=?|%=?|\?|>{1,3}=?|<{1,3}=?|\.\.|'
                 r'&&?|\|\|?|\^=?)', Operator),
                (r'(\.)([ \t]*)([a-z]\w*)', bygroups(Operator, Text,
                                                     Name.Function)),
                (r'[A-Z][A-Z0-9_]+', Name.Constant),
                (r'[A-Z][a-zA-Z0-9_]*([@*]|\[[ \t]*\])?', Name.Class),
    
                (r'([a-z][a-zA-Z0-9_]*(?:~[a-z][a-zA-Z0-9_]*)?)((?:[ \t]|\\\n)*)(?=\()',
                 bygroups(Name.Function, Text)),
                (r'[a-z][a-zA-Z0-9_]*', Name.Variable),
    
                # : introduces types
                (r'[:(){}\[\];,]', Punctuation),
    
                (r'0x[0-9a-fA-F]+', Number.Hex),
                (r'0c[0-9]+', Number.Oct),
                (r'0b[01]+', Number.Binary),
                (r'[0-9_]\.[0-9_]*(?!\.)', Number.Float),
                (r'[0-9_]+', Number.Decimal),
    
                (r'"(?:\\.|\\[0-7]{1,3}|\\x[a-fA-F0-9]{1,2}|[^\\\"])*"',
                 String.Double),
                (r"'(?:\\.|\\[0-9]{1,3}|\\x[a-fA-F0-9]{1,2}|[^\\\'\n])'",
                 String.Char),
                (r'@', Punctuation), # pointer dereference
                (r'\.', Punctuation), # imports or chain operator
    
                (r'\\[ \t\n]', Text),
                (r'[ \t]+', Text),
            ],
            'include': [
                (r'[\w/]+', Name),
                (r',', Punctuation),
                (r'[ \t]', Text),
                (r'[;\n]', Text, '#pop'),
            ],
        }
    
    
    class GoLexer(RegexLexer):
        """
        For `Go `_ source.
        """
        name = 'Go'
        filenames = ['*.go']
        aliases = ['go']
        mimetypes = ['text/x-gosrc']
    
        tokens = {
            'root': [
                (r'\n', Text),
                (r'\s+', Text),
                (r'\\\n', Text), # line continuations
                (r'//(.*?)\n', Comment.Single),
                (r'/(\\\n)?[*](.|\n)*?[*](\\\n)?/', Comment.Multiline),
                (r'(break|default|func|interface|select'
                 r'|case|defer|go|map|struct'
                 r'|chan|else|goto|package|switch'
                 r'|const|fallthrough|if|range|type'
                 r'|continue|for|import|return|var)\b', Keyword
                ),
                # It seems the builtin types aren't actually keywords.
                (r'(uint8|uint16|uint32|uint64'
                 r'|int8|int16|int32|int64'
                 r'|float32|float64|byte'
                 r'|uint|int|float|uintptr'
                 r'|string|close|closed|len|cap|new|make)\b', Name.Builtin
                ),
                # float_lit
                (r'\d+(\.\d+[eE][+\-]?\d+|'
                 r'\.\d*|[eE][+\-]?\d+)', Number.Float),
                (r'\.\d+([eE][+\-]?\d+)?', Number.Float),
                # int_lit
                # -- octal_lit
                (r'0[0-7]+', Number.Oct),
                # -- hex_lit
                (r'0[xX][0-9a-fA-F]+', Number.Hex),
                # -- decimal_lit
                (r'(0|[1-9][0-9]*)', Number.Integer),
                # char_lit
                (r"""'(\\['"\\abfnrtv]|\\x[0-9a-fA-F]{2}|\\[0-7]{1,3}"""
                 r"""|\\u[0-9a-fA-F]{4}|\\U[0-9a-fA-F]{8}|[^\\])'""",
                 String.Char
                ),
                # StringLiteral
                # -- raw_string_lit
                (r'`[^`]*`', String),
                # -- interpreted_string_lit
                (r'"(\\\\|\\"|[^"])*"', String),
                # Tokens
                (r'(<<=|>>=|<<|>>|<=|>=|&\^=|&\^|\+=|-=|\*=|/=|%=|&=|\|=|&&|\|\|'
                 r'|<-|\+\+|--|==|!=|:=|\.\.\.)|[+\-*/%&|^<>=!()\[\]{}.,;:]',
                 Punctuation
                ),
                # identifier
                (r'[a-zA-Z_]\w*', Name),
            ]
        }
    
    
    class FelixLexer(RegexLexer):
        """
        For `Felix `_ source code.
    
        *New in Pygments 1.2.*
        """
    
        name = 'Felix'
        aliases = ['felix', 'flx']
        filenames = ['*.flx', '*.flxh']
        mimetypes = ['text/x-felix']
    
        preproc = [
            'elif', 'else', 'endif', 'if', 'ifdef', 'ifndef',
        ]
    
        keywords = [
            '_', '_deref', 'all', 'as',
            'assert', 'attempt', 'call', 'callback', 'case', 'caseno', 'cclass',
            'code', 'compound', 'ctypes', 'do', 'done', 'downto', 'elif', 'else',
            'endattempt', 'endcase', 'endif', 'endmatch', 'enum', 'except',
            'exceptions', 'expect', 'finally', 'for', 'forall', 'forget', 'fork',
            'functor', 'goto', 'ident', 'if', 'incomplete', 'inherit', 'instance',
            'interface', 'jump', 'lambda', 'loop', 'match', 'module', 'namespace',
            'new', 'noexpand', 'nonterm', 'obj', 'of', 'open', 'parse', 'raise',
            'regexp', 'reglex', 'regmatch', 'rename', 'return', 'the', 'then',
            'to', 'type', 'typecase', 'typedef', 'typematch', 'typeof', 'upto',
            'when', 'whilst', 'with', 'yield',
        ]
    
        keyword_directives = [
            '_gc_pointer', '_gc_type', 'body', 'comment', 'const', 'export',
            'header', 'inline', 'lval', 'macro', 'noinline', 'noreturn',
            'package', 'private', 'pod', 'property', 'public', 'publish',
            'requires', 'todo', 'virtual', 'use',
        ]
    
        keyword_declarations = [
            'def', 'let', 'ref', 'val', 'var',
        ]
    
        keyword_types = [
            'unit', 'void', 'any', 'bool',
            'byte',  'offset',
            'address', 'caddress', 'cvaddress', 'vaddress',
            'tiny', 'short', 'int', 'long', 'vlong',
            'utiny', 'ushort', 'vshort', 'uint', 'ulong', 'uvlong',
            'int8', 'int16', 'int32', 'int64',
            'uint8', 'uint16', 'uint32', 'uint64',
            'float', 'double', 'ldouble',
            'complex', 'dcomplex', 'lcomplex',
            'imaginary', 'dimaginary', 'limaginary',
            'char', 'wchar', 'uchar',
            'charp', 'charcp', 'ucharp', 'ucharcp',
            'string', 'wstring', 'ustring',
            'cont',
            'array', 'varray', 'list',
            'lvalue', 'opt', 'slice',
        ]
    
        keyword_constants = [
            'false', 'true',
        ]
    
        operator_words = [
            'and', 'not', 'in', 'is', 'isin', 'or', 'xor',
        ]
    
        name_builtins = [
            '_svc', 'while',
        ]
    
        name_pseudo = [
            'root', 'self', 'this',
        ]
    
        decimal_suffixes = '([tTsSiIlLvV]|ll|LL|([iIuU])(8|16|32|64))?'
    
        tokens = {
            'root': [
                include('whitespace'),
    
                # Keywords
                (r'(axiom|ctor|fun|gen|proc|reduce|union)\b', Keyword,
                 'funcname'),
                (r'(class|cclass|cstruct|obj|struct)\b', Keyword, 'classname'),
                (r'(instance|module|typeclass)\b', Keyword, 'modulename'),
    
                (r'(%s)\b' % '|'.join(keywords), Keyword),
                (r'(%s)\b' % '|'.join(keyword_directives), Name.Decorator),
                (r'(%s)\b' % '|'.join(keyword_declarations), Keyword.Declaration),
                (r'(%s)\b' % '|'.join(keyword_types), Keyword.Type),
                (r'(%s)\b' % '|'.join(keyword_constants), Keyword.Constant),
    
                # Operators
                include('operators'),
    
                # Float Literal
                # -- Hex Float
                (r'0[xX]([0-9a-fA-F_]*\.[0-9a-fA-F_]+|[0-9a-fA-F_]+)'
                 r'[pP][+\-]?[0-9_]+[lLfFdD]?', Number.Float),
                # -- DecimalFloat
                (r'[0-9_]+(\.[0-9_]+[eE][+\-]?[0-9_]+|'
                 r'\.[0-9_]*|[eE][+\-]?[0-9_]+)[lLfFdD]?', Number.Float),
                (r'\.(0|[1-9][0-9_]*)([eE][+\-]?[0-9_]+)?[lLfFdD]?',
                 Number.Float),
    
                # IntegerLiteral
                # -- Binary
                (r'0[Bb][01_]+%s' % decimal_suffixes, Number),
                # -- Octal
                (r'0[0-7_]+%s' % decimal_suffixes, Number.Oct),
                # -- Hexadecimal
                (r'0[xX][0-9a-fA-F_]+%s' % decimal_suffixes, Number.Hex),
                # -- Decimal
                (r'(0|[1-9][0-9_]*)%s' % decimal_suffixes, Number.Integer),
    
                # Strings
                ('([rR][cC]?|[cC][rR])"""', String, 'tdqs'),
                ("([rR][cC]?|[cC][rR])'''", String, 'tsqs'),
                ('([rR][cC]?|[cC][rR])"', String, 'dqs'),
                ("([rR][cC]?|[cC][rR])'", String, 'sqs'),
                ('[cCfFqQwWuU]?"""', String, combined('stringescape', 'tdqs')),
                ("[cCfFqQwWuU]?'''", String, combined('stringescape', 'tsqs')),
                ('[cCfFqQwWuU]?"', String, combined('stringescape', 'dqs')),
                ("[cCfFqQwWuU]?'", String, combined('stringescape', 'sqs')),
    
                # Punctuation
                (r'[\[\]{}:(),;?]', Punctuation),
    
                # Labels
                (r'[a-zA-Z_]\w*:>', Name.Label),
    
                # Identifiers
                (r'(%s)\b' % '|'.join(name_builtins), Name.Builtin),
                (r'(%s)\b' % '|'.join(name_pseudo), Name.Builtin.Pseudo),
                (r'[a-zA-Z_]\w*', Name),
            ],
            'whitespace': [
                (r'\n', Text),
                (r'\s+', Text),
    
                include('comment'),
    
                # Preprocessor
                (r'#\s*if\s+0', Comment.Preproc, 'if0'),
                (r'#', Comment.Preproc, 'macro'),
            ],
            'operators': [
                (r'(%s)\b' % '|'.join(operator_words), Operator.Word),
                (r'!=|==|<<|>>|\|\||&&|[-~+/*%=<>&^|.$]', Operator),
            ],
            'comment': [
                (r'//(.*?)\n', Comment.Single),
                (r'/[*]', Comment.Multiline, 'comment2'),
            ],
            'comment2': [
                (r'[^\/*]', Comment.Multiline),
                (r'/[*]', Comment.Multiline, '#push'),
                (r'[*]/', Comment.Multiline, '#pop'),
                (r'[\/*]', Comment.Multiline),
            ],
            'if0': [
                (r'^\s*#if.*?(?]*?>)',
                 bygroups(Comment.Preproc, Text, String), '#pop'),
                (r'(import|include)(\s+)("[^"]*?")',
                 bygroups(Comment.Preproc, Text, String), '#pop'),
                (r"(import|include)(\s+)('[^']*?')",
                 bygroups(Comment.Preproc, Text, String), '#pop'),
                (r'[^/\n]+', Comment.Preproc),
                ##(r'/[*](.|\n)*?[*]/', Comment),
                ##(r'//.*?\n', Comment, '#pop'),
                (r'/', Comment.Preproc),
                (r'(?<=\\)\n', Comment.Preproc),
                (r'\n', Comment.Preproc, '#pop'),
            ],
            'funcname': [
                include('whitespace'),
                (r'[a-zA-Z_]\w*', Name.Function, '#pop'),
                # anonymous functions
                (r'(?=\()', Text, '#pop'),
            ],
            'classname': [
                include('whitespace'),
                (r'[a-zA-Z_]\w*', Name.Class, '#pop'),
                # anonymous classes
                (r'(?=\{)', Text, '#pop'),
            ],
            'modulename': [
                include('whitespace'),
                (r'\[', Punctuation, ('modulename2', 'tvarlist')),
                (r'', Error, 'modulename2'),
            ],
            'modulename2': [
                include('whitespace'),
                (r'([a-zA-Z_]\w*)', Name.Namespace, '#pop:2'),
            ],
            'tvarlist': [
                include('whitespace'),
                include('operators'),
                (r'\[', Punctuation, '#push'),
                (r'\]', Punctuation, '#pop'),
                (r',', Punctuation),
                (r'(with|where)\b', Keyword),
                (r'[a-zA-Z_]\w*', Name),
            ],
            'stringescape': [
                (r'\\([\\abfnrtv"\']|\n|N{.*?}|u[a-fA-F0-9]{4}|'
                 r'U[a-fA-F0-9]{8}|x[a-fA-F0-9]{2}|[0-7]{1,3})', String.Escape)
            ],
            'strings': [
                (r'%(\([a-zA-Z0-9]+\))?[-#0 +]*([0-9]+|[*])?(\.([0-9]+|[*]))?'
                 '[hlL]?[diouxXeEfFgGcrs%]', String.Interpol),
                (r'[^\\\'"%\n]+', String),
                # quotes, percents and backslashes must be parsed one at a time
                (r'[\'"\\]', String),
                # unhandled string formatting sign
                (r'%', String)
                # newlines are an error (use "nl" state)
            ],
            'nl': [
                (r'\n', String)
            ],
            'dqs': [
                (r'"', String, '#pop'),
                # included here again for raw strings
                (r'\\\\|\\"|\\\n', String.Escape),
                include('strings')
            ],
            'sqs': [
                (r"'", String, '#pop'),
                # included here again for raw strings
                (r"\\\\|\\'|\\\n", String.Escape),
                include('strings')
            ],
            'tdqs': [
                (r'"""', String, '#pop'),
                include('strings'),
                include('nl')
            ],
            'tsqs': [
                (r"'''", String, '#pop'),
                include('strings'),
                include('nl')
            ],
         }
    
    
    class AdaLexer(RegexLexer):
        """
        For Ada source code.
    
        *New in Pygments 1.3.*
        """
    
        name = 'Ada'
        aliases = ['ada', 'ada95' 'ada2005']
        filenames = ['*.adb', '*.ads', '*.ada']
        mimetypes = ['text/x-ada']
    
        flags = re.MULTILINE | re.I  # Ignore case
    
        _ws = r'(?:\s|//.*?\n|/[*].*?[*]/)+'
    
        tokens = {
            'root': [
                (r'[^\S\n]+', Text),
                (r'--.*?\n', Comment.Single),
                (r'[^\S\n]+', Text),
                (r'function|procedure|entry', Keyword.Declaration, 'subprogram'),
                (r'(subtype|type)(\s+)([a-z0-9_]+)',
                 bygroups(Keyword.Declaration, Text, Keyword.Type), 'type_def'),
                (r'task|protected', Keyword.Declaration),
                (r'(subtype)(\s+)', bygroups(Keyword.Declaration, Text)),
                (r'(end)(\s+)', bygroups(Keyword.Reserved, Text), 'end'),
                (r'(pragma)(\s+)([a-zA-Z0-9_]+)', bygroups(Keyword.Reserved, Text,
                                                           Comment.Preproc)),
                (r'(true|false|null)\b', Keyword.Constant),
                (r'(Byte|Character|Float|Integer|Long_Float|Long_Integer|'
                 r'Long_Long_Float|Long_Long_Integer|Natural|Positive|Short_Float|'
                 r'Short_Integer|Short_Short_Float|Short_Short_Integer|String|'
                 r'Wide_String|Duration)\b', Keyword.Type),
                (r'(and(\s+then)?|in|mod|not|or(\s+else)|rem)\b', Operator.Word),
                (r'generic|private', Keyword.Declaration),
                (r'package', Keyword.Declaration, 'package'),
                (r'array\b', Keyword.Reserved, 'array_def'),
                (r'(with|use)(\s+)', bygroups(Keyword.Namespace, Text), 'import'),
                (r'([a-z0-9_]+)(\s*)(:)(\s*)(constant)',
                 bygroups(Name.Constant, Text, Punctuation, Text,
                          Keyword.Reserved)),
                (r'<<[a-z0-9_]+>>', Name.Label),
                (r'([a-z0-9_]+)(\s*)(:)(\s*)(declare|begin|loop|for|while)',
                 bygroups(Name.Label, Text, Punctuation, Text, Keyword.Reserved)),
                (r'\b(abort|abs|abstract|accept|access|aliased|all|array|at|begin|'
                 r'body|case|constant|declare|delay|delta|digits|do|else|elsif|end|'
                 r'entry|exception|exit|interface|for|goto|if|is|limited|loop|new|'
                 r'null|of|or|others|out|overriding|pragma|protected|raise|range|'
                 r'record|renames|requeue|return|reverse|select|separate|subtype|'
                 r'synchronized|task|tagged|terminate|then|type|until|when|while|'
                 r'xor)\b',
                 Keyword.Reserved),
                (r'"[^"]*"', String),
                include('attribute'),
                include('numbers'),
                (r"'[^']'", String.Character),
                (r'([a-z0-9_]+)(\s*|[(,])', bygroups(Name, using(this))),
                (r"(<>|=>|:=|[()|:;,.'])", Punctuation),
                (r'[*<>+=/&-]', Operator),
                (r'\n+', Text),
            ],
            'numbers' : [
                (r'[0-9_]+#[0-9a-f]+#', Number.Hex),
                (r'[0-9_]+\.[0-9_]*', Number.Float),
                (r'[0-9_]+', Number.Integer),
            ],
            'attribute' : [
                (r"(')([a-zA-Z0-9_]+)", bygroups(Punctuation, Name.Attribute)),
            ],
            'subprogram' : [
                (r'\(', Punctuation, ('#pop', 'formal_part')),
                (r';', Punctuation, '#pop'),
                (r'is\b', Keyword.Reserved, '#pop'),
                (r'"[^"]+"|[a-z0-9_]+', Name.Function),
                include('root'),
            ],
            'end' : [
                ('(if|case|record|loop|select)', Keyword.Reserved),
                ('"[^"]+"|[a-zA-Z0-9_.]+', Name.Function),
                ('\s+', Text),
                (';', Punctuation, '#pop'),
            ],
            'type_def': [
                (r';', Punctuation, '#pop'),
                (r'\(', Punctuation, 'formal_part'),
                (r'with|and|use', Keyword.Reserved),
                (r'array\b', Keyword.Reserved, ('#pop', 'array_def')),
                (r'record\b', Keyword.Reserved, ('formal_part')),
                include('root'),
            ],
            'array_def' : [
                (r';', Punctuation, '#pop'),
                (r'([a-z0-9_]+)(\s+)(range)', bygroups(Keyword.Type, Text,
                                                       Keyword.Reserved)),
                include('root'),
            ],
            'import': [
                (r'[a-z0-9_.]+', Name.Namespace, '#pop'),
                (r'', Text, '#pop'),
            ],
            'formal_part' : [
                (r'\)', Punctuation, '#pop'),
                (r'[a-z0-9_]+', Name.Variable),
                (r',|:[^=]', Punctuation),
                (r'(in|not|null|out|access)\b', Keyword.Reserved),
                include('root'),
            ],
            'package': [
                ('body', Keyword.Declaration),
                ('is\s+new|renames', Keyword.Reserved),
                ('is', Keyword.Reserved, '#pop'),
                (';', Punctuation, '#pop'),
                ('\(', Punctuation, 'package_instantiation'),
                ('([a-zA-Z0-9_.]+)', Name.Class),
                include('root'),
            ],
            'package_instantiation': [
                (r'("[^"]+"|[a-z0-9_]+)(\s+)(=>)', bygroups(Name.Variable,
                                                            Text, Punctuation)),
                (r'[a-z0-9._\'"]', Text),
                (r'\)', Punctuation, '#pop'),
                include('root'),
            ],
        }
    
    
    class Modula2Lexer(RegexLexer):
        """
        For `Modula-2 `_ source code.
    
        Additional options that determine which keywords are highlighted:
    
        `pim`
            Select PIM Modula-2 dialect (default: True).
        `iso`
            Select ISO Modula-2 dialect (default: False).
        `objm2`
            Select Objective Modula-2 dialect (default: False).
        `gm2ext`
            Also highlight GNU extensions (default: False).
    
        *New in Pygments 1.3.*
        """
        name = 'Modula-2'
        aliases = ['modula2', 'm2']
        filenames = ['*.def', '*.mod']
        mimetypes = ['text/x-modula2']
    
        flags = re.MULTILINE | re.DOTALL
    
        tokens = {
            'whitespace': [
                (r'\n+', Text), # blank lines
                (r'\s+', Text), # whitespace
            ],
            'identifiers': [
                (r'([a-zA-Z_\$][a-zA-Z0-9_\$]*)', Name),
            ],
            'numliterals': [
                (r'[01]+B', Number.Binary),        # binary number (ObjM2)
                (r'[0-7]+B', Number.Oct),          # octal number (PIM + ISO)
                (r'[0-7]+C', Number.Oct),          # char code (PIM + ISO)
                (r'[0-9A-F]+C', Number.Hex),       # char code (ObjM2)
                (r'[0-9A-F]+H', Number.Hex),       # hexadecimal number
                (r'[0-9]+\.[0-9]+E[+-][0-9]+', Number.Float), # real number
                (r'[0-9]+\.[0-9]+', Number.Float), # real number
                (r'[0-9]+', Number.Integer),       # decimal whole number
            ],
            'strings': [
                (r"'(\\\\|\\'|[^'])*'", String), # single quoted string
                (r'"(\\\\|\\"|[^"])*"', String), # double quoted string
            ],
            'operators': [
                (r'[*/+=#~&<>\^-]', Operator),
                (r':=', Operator),   # assignment
                (r'@', Operator),    # pointer deref (ISO)
                (r'\.\.', Operator), # ellipsis or range
                (r'`', Operator),    # Smalltalk message (ObjM2)
                (r'::', Operator),   # type conversion (ObjM2)
            ],
            'punctuation': [
                (r'[\(\)\[\]{},.:;|]', Punctuation),
            ],
            'comments': [
                (r'//.*?\n', Comment.Single),       # ObjM2
                (r'/\*(.*?)\*/', Comment.Multiline), # ObjM2
                (r'\(\*([^\$].*?)\*\)', Comment.Multiline),
                # TO DO: nesting of (* ... *) comments
            ],
            'pragmas': [
                (r'\(\*\$(.*?)\*\)', Comment.Preproc), # PIM
                (r'<\*(.*?)\*>', Comment.Preproc),     # ISO + ObjM2
            ],
            'root': [
                include('whitespace'),
                include('comments'),
                include('pragmas'),
                include('identifiers'),
                include('numliterals'),
                include('strings'),
                include('operators'),
                include('punctuation'),
            ]
        }
    
        pim_reserved_words = [
            # 40 reserved words
            'AND', 'ARRAY', 'BEGIN', 'BY', 'CASE', 'CONST', 'DEFINITION',
            'DIV', 'DO', 'ELSE', 'ELSIF', 'END', 'EXIT', 'EXPORT', 'FOR',
            'FROM', 'IF', 'IMPLEMENTATION', 'IMPORT', 'IN', 'LOOP', 'MOD',
            'MODULE', 'NOT', 'OF', 'OR', 'POINTER', 'PROCEDURE', 'QUALIFIED',
            'RECORD', 'REPEAT', 'RETURN', 'SET', 'THEN', 'TO', 'TYPE',
            'UNTIL', 'VAR', 'WHILE', 'WITH',
        ]
    
        pim_pervasives = [
            # 31 pervasives
            'ABS', 'BITSET', 'BOOLEAN', 'CAP', 'CARDINAL', 'CHAR', 'CHR', 'DEC',
            'DISPOSE', 'EXCL', 'FALSE', 'FLOAT', 'HALT', 'HIGH', 'INC', 'INCL',
            'INTEGER', 'LONGINT', 'LONGREAL', 'MAX', 'MIN', 'NEW', 'NIL', 'ODD',
            'ORD', 'PROC', 'REAL', 'SIZE', 'TRUE', 'TRUNC', 'VAL',
        ]
    
        iso_reserved_words = [
            # 46 reserved words
            'AND', 'ARRAY', 'BEGIN', 'BY', 'CASE', 'CONST', 'DEFINITION', 'DIV',
            'DO', 'ELSE', 'ELSIF', 'END', 'EXCEPT', 'EXIT', 'EXPORT', 'FINALLY',
            'FOR', 'FORWARD', 'FROM', 'IF', 'IMPLEMENTATION', 'IMPORT', 'IN',
            'LOOP', 'MOD', 'MODULE', 'NOT', 'OF', 'OR', 'PACKEDSET', 'POINTER',
            'PROCEDURE', 'QUALIFIED', 'RECORD', 'REPEAT', 'REM', 'RETRY',
            'RETURN', 'SET', 'THEN', 'TO', 'TYPE', 'UNTIL', 'VAR', 'WHILE',
            'WITH',
        ]
    
        iso_pervasives = [
            # 42 pervasives
            'ABS', 'BITSET', 'BOOLEAN', 'CAP', 'CARDINAL', 'CHAR', 'CHR', 'CMPLX',
            'COMPLEX', 'DEC', 'DISPOSE', 'EXCL', 'FALSE', 'FLOAT', 'HALT', 'HIGH',
            'IM', 'INC', 'INCL', 'INT', 'INTEGER', 'INTERRUPTIBLE', 'LENGTH',
            'LFLOAT', 'LONGCOMPLEX', 'LONGINT', 'LONGREAL', 'MAX', 'MIN', 'NEW',
            'NIL', 'ODD', 'ORD', 'PROC', 'PROTECTION', 'RE', 'REAL', 'SIZE',
            'TRUE', 'TRUNC', 'UNINTERRUBTIBLE', 'VAL',
        ]
    
        objm2_reserved_words = [
            # base language, 42 reserved words
            'AND', 'ARRAY', 'BEGIN', 'BY', 'CASE', 'CONST', 'DEFINITION', 'DIV',
            'DO', 'ELSE', 'ELSIF', 'END', 'ENUM', 'EXIT', 'FOR', 'FROM', 'IF',
            'IMMUTABLE', 'IMPLEMENTATION', 'IMPORT', 'IN', 'IS', 'LOOP', 'MOD',
            'MODULE', 'NOT', 'OF', 'OPAQUE', 'OR', 'POINTER', 'PROCEDURE',
            'RECORD', 'REPEAT', 'RETURN', 'SET', 'THEN', 'TO', 'TYPE',
            'UNTIL', 'VAR', 'VARIADIC', 'WHILE',
            # OO extensions, 16 reserved words
            'BYCOPY', 'BYREF', 'CLASS', 'CONTINUE', 'CRITICAL', 'INOUT', 'METHOD',
            'ON', 'OPTIONAL', 'OUT', 'PRIVATE', 'PROTECTED', 'PROTOCOL', 'PUBLIC',
            'SUPER', 'TRY',
        ]
    
        objm2_pervasives = [
            # base language, 38 pervasives
            'ABS', 'BITSET', 'BOOLEAN', 'CARDINAL', 'CHAR', 'CHR', 'DISPOSE',
            'FALSE', 'HALT', 'HIGH', 'INTEGER', 'INRANGE', 'LENGTH', 'LONGCARD',
            'LONGINT', 'LONGREAL', 'MAX', 'MIN', 'NEG', 'NEW', 'NEXTV', 'NIL',
            'OCTET', 'ODD', 'ORD', 'PRED', 'PROC', 'READ', 'REAL', 'SUCC', 'TMAX',
            'TMIN', 'TRUE', 'TSIZE', 'UNICHAR', 'VAL', 'WRITE', 'WRITEF',
            # OO extensions, 3 pervasives
            'OBJECT', 'NO', 'YES',
        ]
    
        gnu_reserved_words = [
            # 10 additional reserved words
            'ASM', '__ATTRIBUTE__', '__BUILTIN__', '__COLUMN__', '__DATE__',
            '__FILE__', '__FUNCTION__', '__LINE__', '__MODULE__', 'VOLATILE',
        ]
    
        gnu_pervasives = [
            # 21 identifiers, actually from pseudo-module SYSTEM
            # but we will highlight them as if they were pervasives
            'BITSET8', 'BITSET16', 'BITSET32', 'CARDINAL8', 'CARDINAL16',
            'CARDINAL32', 'CARDINAL64', 'COMPLEX32', 'COMPLEX64', 'COMPLEX96',
            'COMPLEX128', 'INTEGER8', 'INTEGER16', 'INTEGER32', 'INTEGER64',
            'REAL8', 'REAL16', 'REAL32', 'REAL96', 'REAL128', 'THROW',
        ]
    
        def __init__(self, **options):
            self.reserved_words = set()
            self.pervasives = set()
            # ISO Modula-2
            if get_bool_opt(options, 'iso', False):
                self.reserved_words.update(self.iso_reserved_words)
                self.pervasives.update(self.iso_pervasives)
            # Objective Modula-2
            elif get_bool_opt(options, 'objm2', False):
                self.reserved_words.update(self.objm2_reserved_words)
                self.pervasives.update(self.objm2_pervasives)
            # PIM Modula-2 (DEFAULT)
            else:
                self.reserved_words.update(self.pim_reserved_words)
                self.pervasives.update(self.pim_pervasives)
            # GNU extensions
            if get_bool_opt(options, 'gm2ext', False):
                self.reserved_words.update(self.gnu_reserved_words)
                self.pervasives.update(self.gnu_pervasives)
            # initialise
            RegexLexer.__init__(self, **options)
    
        def get_tokens_unprocessed(self, text):
            for index, token, value in \
                RegexLexer.get_tokens_unprocessed(self, text):
                # check for reserved words and pervasives
                if token is Name:
                    if value in self.reserved_words:
                        token = Keyword.Reserved
                    elif value in self.pervasives:
                        token = Keyword.Pervasive
                # return result
                yield index, token, value
    
    
    class BlitzMaxLexer(RegexLexer):
        """
        For `BlitzMax `_ source code.
    
        *New in Pygments 1.4.*
        """
    
        name = 'BlitzMax'
        aliases = ['blitzmax', 'bmax']
        filenames = ['*.bmx']
        mimetypes = ['text/x-bmx']
    
        bmax_vopwords = r'\b(Shl|Shr|Sar|Mod)\b'
        bmax_sktypes = r'@{1,2}|[!#$%]'
        bmax_lktypes = r'\b(Int|Byte|Short|Float|Double|Long)\b'
        bmax_name = r'[a-z_][a-z0-9_]*'
        bmax_var = r'(%s)(?:(?:([ \t]*)(%s)|([ \t]*:[ \t]*\b(?:Shl|Shr|Sar|Mod)\b)|([ \t]*)([:])([ \t]*)(?:%s|(%s)))(?:([ \t]*)(Ptr))?)' % (bmax_name, bmax_sktypes, bmax_lktypes, bmax_name)
        bmax_func = bmax_var + r'?((?:[ \t]|\.\.\n)*)([(])'
    
        flags = re.MULTILINE | re.IGNORECASE
        tokens = {
            'root': [
                # Text
                (r'[ \t]+', Text),
                (r'\.\.\n', Text), # Line continuation
                # Comments
                (r"'.*?\n", Comment.Single),
                (r'([ \t]*)\bRem\n(\n|.)*?\s*\bEnd([ \t]*)Rem', Comment.Multiline),
                # Data types
                ('"', String.Double, 'string'),
                # Numbers
                (r'[0-9]+\.[0-9]*(?!\.)', Number.Float),
                (r'\.[0-9]*(?!\.)', Number.Float),
                (r'[0-9]+', Number.Integer),
                (r'\$[0-9a-f]+', Number.Hex),
                (r'\%[10]+', Number), # Binary
                # Other
                (r'(?:(?:(:)?([ \t]*)(:?%s|([+\-*/&|~]))|Or|And|Not|[=<>^]))' %
                 (bmax_vopwords), Operator),
                (r'[(),.:\[\]]', Punctuation),
                (r'(?:#[\w \t]*)', Name.Label),
                (r'(?:\?[\w \t]*)', Comment.Preproc),
                # Identifiers
                (r'\b(New)\b([ \t]?)([(]?)(%s)' % (bmax_name),
                 bygroups(Keyword.Reserved, Text, Punctuation, Name.Class)),
                (r'\b(Import|Framework|Module)([ \t]+)(%s\.%s)' %
                 (bmax_name, bmax_name),
                 bygroups(Keyword.Reserved, Text, Keyword.Namespace)),
                (bmax_func, bygroups(Name.Function, Text, Keyword.Type,
                                     Operator, Text, Punctuation, Text,
                                     Keyword.Type, Name.Class, Text,
                                     Keyword.Type, Text, Punctuation)),
                (bmax_var, bygroups(Name.Variable, Text, Keyword.Type, Operator,
                                    Text, Punctuation, Text, Keyword.Type,
                                    Name.Class, Text, Keyword.Type)),
                (r'\b(Type|Extends)([ \t]+)(%s)' % (bmax_name),
                 bygroups(Keyword.Reserved, Text, Name.Class)),
                # Keywords
                (r'\b(Ptr)\b', Keyword.Type),
                (r'\b(Pi|True|False|Null|Self|Super)\b', Keyword.Constant),
                (r'\b(Local|Global|Const|Field)\b', Keyword.Declaration),
                (r'\b(TNullMethodException|TNullFunctionException|'
                 r'TNullObjectException|TArrayBoundsException|'
                 r'TRuntimeException)\b', Name.Exception),
                (r'\b(Strict|SuperStrict|Module|ModuleInfo|'
                 r'End|Return|Continue|Exit|Public|Private|'
                 r'Var|VarPtr|Chr|Len|Asc|SizeOf|Sgn|Abs|Min|Max|'
                 r'New|Release|Delete|'
                 r'Incbin|IncbinPtr|IncbinLen|'
                 r'Framework|Include|Import|Extern|EndExtern|'
                 r'Function|EndFunction|'
                 r'Type|EndType|Extends|'
                 r'Method|EndMethod|'
                 r'Abstract|Final|'
                 r'If|Then|Else|ElseIf|EndIf|'
                 r'For|To|Next|Step|EachIn|'
                 r'While|Wend|EndWhile|'
                 r'Repeat|Until|Forever|'
                 r'Select|Case|Default|EndSelect|'
                 r'Try|Catch|EndTry|Throw|Assert|'
                 r'Goto|DefData|ReadData|RestoreData)\b', Keyword.Reserved),
                # Final resolve (for variable names and such)
                (r'(%s)' % (bmax_name), Name.Variable),
            ],
            'string': [
                (r'""', String.Double),
                (r'"C?', String.Double, '#pop'),
                (r'[^"]+', String.Double),
            ],
        }
    
    
    class NimrodLexer(RegexLexer):
        """
        For `Nimrod `_ source code.
    
        *New in Pygments 1.5.*
        """
    
        name = 'Nimrod'
        aliases = ['nimrod', 'nim']
        filenames = ['*.nim', '*.nimrod']
        mimetypes = ['text/x-nimrod']
    
        flags = re.MULTILINE | re.IGNORECASE | re.UNICODE
    
        def underscorize(words):
            newWords = []
            new = ""
            for word in words:
                for ch in word:
                    new += (ch + "_?")
                newWords.append(new)
                new = ""
            return "|".join(newWords)
    
        keywords = [
            'addr', 'and', 'as', 'asm', 'atomic', 'bind', 'block', 'break',
            'case', 'cast', 'const', 'continue', 'converter', 'discard',
            'distinct', 'div', 'elif', 'else', 'end', 'enum', 'except', 'finally',
            'for', 'generic', 'if', 'implies', 'in', 'yield',
            'is', 'isnot', 'iterator', 'lambda', 'let', 'macro', 'method',
            'mod', 'not', 'notin', 'object', 'of', 'or', 'out', 'proc',
            'ptr', 'raise', 'ref', 'return', 'shl', 'shr', 'template', 'try',
            'tuple', 'type' , 'when', 'while', 'with', 'without', 'xor'
        ]
    
        keywordsPseudo = [
            'nil', 'true', 'false'
        ]
    
        opWords = [
            'and', 'or', 'not', 'xor', 'shl', 'shr', 'div', 'mod', 'in',
            'notin', 'is', 'isnot'
        ]
    
        types = [
            'int', 'int8', 'int16', 'int32', 'int64', 'float', 'float32', 'float64',
            'bool', 'char', 'range', 'array', 'seq', 'set', 'string'
        ]
    
        tokens = {
            'root': [
                (r'##.*$', String.Doc),
                (r'#.*$', Comment),
                (r'\*|=|>|<|\+|-|/|@|\$|~|&|%|\!|\?|\||\\|\[|\]', Operator),
                (r'\.\.|\.|,|\[\.|\.\]|{\.|\.}|\(\.|\.\)|{|}|\(|\)|:|\^|`|;',
                 Punctuation),
    
                # Strings
                (r'(?:[\w]+)"', String, 'rdqs'),
                (r'"""', String, 'tdqs'),
                ('"', String, 'dqs'),
    
                # Char
                ("'", String.Char, 'chars'),
    
                # Keywords
                (r'(%s)\b' % underscorize(opWords), Operator.Word),
                (r'(p_?r_?o_?c_?\s)(?![\(\[\]])', Keyword, 'funcname'),
                (r'(%s)\b' % underscorize(keywords), Keyword),
                (r'(%s)\b' % underscorize(['from', 'import', 'include']),
                 Keyword.Namespace),
                (r'(v_?a_?r)\b', Keyword.Declaration),
                (r'(%s)\b' % underscorize(types), Keyword.Type),
                (r'(%s)\b' % underscorize(keywordsPseudo), Keyword.Pseudo),
                # Identifiers
                (r'\b((?![_\d])\w)(((?!_)\w)|(_(?!_)\w))*', Name),
                # Numbers
                (r'[0-9][0-9_]*(?=([eE.]|\'[fF](32|64)))',
                  Number.Float, ('float-suffix', 'float-number')),
                (r'0[xX][a-fA-F0-9][a-fA-F0-9_]*', Number.Hex, 'int-suffix'),
                (r'0[bB][01][01_]*', Number, 'int-suffix'),
                (r'0o[0-7][0-7_]*', Number.Oct, 'int-suffix'),
                (r'[0-9][0-9_]*', Number.Integer, 'int-suffix'),
                # Whitespace
                (r'\s+', Text),
                (r'.+$', Error),
            ],
            'chars': [
              (r'\\([\\abcefnrtvl"\']|x[a-fA-F0-9]{2}|[0-9]{1,3})', String.Escape),
              (r"'", String.Char, '#pop'),
              (r".", String.Char)
            ],
            'strings': [
                (r'(?\?]*?',
                    )
                )
    
    
        tokens = {
            'comments': [
                (r'(?s)/\*.*?\*/', Comment.Multiline),           #Multiline
                (r'//.*?\n', Comment.Single),                    #Single line
                #todo: highlight references in fandocs
                (r'\*\*.*?\n', Comment.Special),                 #Fandoc
                (r'#.*\n', Comment.Single)                       #Shell-style
            ],
            'literals': [
                (r'\b-?[\d_]+(ns|ms|sec|min|hr|day)', Number),   #Duration
                (r'\b-?[\d_]*\.[\d_]+(ns|ms|sec|min|hr|day)', Number),
                                                                 #Duration with dot
                (r'\b-?(\d+)?\.\d+(f|F|d|D)?', Number.Float),    #Float/Decimal
                (r'\b-?0x[0-9a-fA-F_]+', Number.Hex),            #Hex
                (r'\b-?[\d_]+', Number.Integer),                 #Int
                (r"'\\.'|'[^\\]'|'\\u[0-9a-f]{4}'", String.Char), #Char
                (r'"', Punctuation, 'insideStr'),                #Opening quote
                (r'`', Punctuation, 'insideUri'),                #Opening accent
                (r'\b(true|false|null)\b', Keyword.Constant),    #Bool & null
                (r'(?:(\w+)(::))?(\w+)(<\|)(.*?)(\|>)',          #DSL
                 bygroups(Name.Namespace, Punctuation, Name.Class,
                          Punctuation, String, Punctuation)),
                (r'(?:(\w+)(::))?(\w+)?(#)(\w+)?',               #Type/slot literal
                 bygroups(Name.Namespace, Punctuation, Name.Class,
                          Punctuation, Name.Function)),
                (r'\[,\]', Literal),                             # Empty list
                (s(r'($type)(\[,\])'),                           # Typed empty list
                 bygroups(using(this, state = 'inType'), Literal)),
                (r'\[:\]', Literal),                             # Empty Map
                (s(r'($type)(\[:\])'),
                 bygroups(using(this, state = 'inType'), Literal)),
            ],
            'insideStr': [
                (r'\\\\', String.Escape),                        #Escaped backslash
                (r'\\"', String.Escape),                         #Escaped "
                (r'\\`', String.Escape),                         #Escaped `
                (r'\$\w+', String.Interpol),                     #Subst var
                (r'\${.*?}', String.Interpol),                   #Subst expr
                (r'"', Punctuation, '#pop'),                     #Closing quot
                (r'.', String)                                   #String content
            ],
            'insideUri': [  #TODO: remove copy/paste str/uri
                (r'\\\\', String.Escape),                        #Escaped backslash
                (r'\\"', String.Escape),                         #Escaped "
                (r'\\`', String.Escape),                         #Escaped `
                (r'\$\w+', String.Interpol),                     #Subst var
                (r'\${.*?}', String.Interpol),                   #Subst expr
                (r'`', Punctuation, '#pop'),                     #Closing tick
                (r'.', String.Backtick)                          #URI content
            ],
            'protectionKeywords': [
                (r'\b(public|protected|private|internal)\b', Keyword),
            ],
            'typeKeywords': [
                (r'\b(abstract|final|const|native|facet|enum)\b', Keyword),
            ],
            'methodKeywords': [
                (r'\b(abstract|native|once|override|static|virtual|final)\b',
                 Keyword),
            ],
            'fieldKeywords': [
                (r'\b(abstract|const|final|native|override|static|virtual|'
                 r'readonly)\b', Keyword)
            ],
            'otherKeywords': [
                (r'\b(try|catch|throw|finally|for|if|else|while|as|is|isnot|'
                 r'switch|case|default|continue|break|do|return|get|set)\b',
                 Keyword),
                (r'\b(it|this|super)\b', Name.Builtin.Pseudo),
            ],
            'operators': [
                (r'\+\+|\-\-|\+|\-|\*|/|\|\||&&|<=>|<=|<|>=|>|=|!|\[|\]', Operator)
            ],
            'inType': [
                (r'[\[\]\|\->:\?]', Punctuation),
                (s(r'$id'), Name.Class),
                (r'', Text, '#pop'),
    
            ],
            'root': [
                include('comments'),
                include('protectionKeywords'),
                include('typeKeywords'),
                include('methodKeywords'),
                include('fieldKeywords'),
                include('literals'),
                include('otherKeywords'),
                include('operators'),
                (r'using\b', Keyword.Namespace, 'using'),         # Using stmt
                (r'@\w+', Name.Decorator, 'facet'),               # Symbol
                (r'(class|mixin)(\s+)(\w+)', bygroups(Keyword, Text, Name.Class),
                 'inheritance'),                                  # Inheritance list
    
    
                ### Type var := val
                (s(r'($type)([ \t]+)($id)(\s*)(:=)'),
                 bygroups(using(this, state = 'inType'), Text,
                          Name.Variable, Text, Operator)),
    
                ### var := val
                (s(r'($id)(\s*)(:=)'),
                 bygroups(Name.Variable, Text, Operator)),
    
                ### .someId( or ->someId( ###
                (s(r'(\.|(?:\->))($id)(\s*)(\()'),
                 bygroups(Operator, Name.Function, Text, Punctuation),
                 'insideParen'),
    
                ### .someId  or ->someId
                (s(r'(\.|(?:\->))($id)'),
                 bygroups(Operator, Name.Function)),
    
                ### new makeXXX ( ####
                (r'(new)(\s+)(make\w*)(\s*)(\()',
                 bygroups(Keyword, Text, Name.Function, Text, Punctuation),
                 'insideMethodDeclArgs'),
    
                ### Type name (  ####
                (s(r'($type)([ \t]+)' #Return type and whitespace
                   r'($id)(\s*)(\()'), #method name + open brace
                 bygroups(using(this, state = 'inType'), Text,
                          Name.Function, Text, Punctuation),
                 'insideMethodDeclArgs'),
    
                ### ArgType argName, #####
                (s(r'($type)(\s+)($id)(\s*)(,)'),
                 bygroups(using(this, state='inType'), Text, Name.Variable,
                          Text, Punctuation)),
    
                #### ArgType argName) ####
                ## Covered in 'insideParen' state
    
                ### ArgType argName -> ArgType| ###
                (s(r'($type)(\s+)($id)(\s*)(\->)(\s*)($type)(\|)'),
                 bygroups(using(this, state='inType'), Text, Name.Variable,
                          Text, Punctuation, Text, using(this, state = 'inType'),
                          Punctuation)),
    
                ### ArgType argName|  ###
                (s(r'($type)(\s+)($id)(\s*)(\|)'),
                 bygroups(using(this, state='inType'), Text, Name.Variable,
                          Text, Punctuation)),
    
                ### Type var
                (s(r'($type)([ \t]+)($id)'),
                 bygroups(using(this, state='inType'), Text,
                          Name.Variable)),
    
                (r'\(', Punctuation, 'insideParen'),
                (r'\{', Punctuation, 'insideBrace'),
                (r'.', Text)
            ],
            'insideParen': [
                (r'\)', Punctuation, '#pop'),
                include('root'),
            ],
            'insideMethodDeclArgs': [
                (r'\)', Punctuation, '#pop'),
                (s(r'($type)(\s+)($id)(\s*)(\))'),
                 bygroups(using(this, state='inType'), Text, Name.Variable,
                          Text, Punctuation), '#pop'),
                include('root'),
            ],
            'insideBrace': [
                (r'\}', Punctuation, '#pop'),
                include('root'),
            ],
            'inheritance': [
                (r'\s+', Text),                                      #Whitespace
                (r':|,', Punctuation),
                (r'(?:(\w+)(::))?(\w+)',
                 bygroups(Name.Namespace, Punctuation, Name.Class)),
                (r'{', Punctuation, '#pop')
            ],
            'using': [
                (r'[ \t]+', Text), # consume whitespaces
                (r'(\[)(\w+)(\])',
                 bygroups(Punctuation, Comment.Special, Punctuation)), #ffi
                (r'(\")?([\w\.]+)(\")?',
                 bygroups(Punctuation, Name.Namespace, Punctuation)), #podname
                (r'::', Punctuation, 'usingClass'),
                (r'', Text, '#pop')
            ],
            'usingClass': [
                (r'[ \t]+', Text), # consume whitespaces
                (r'(as)(\s+)(\w+)',
                 bygroups(Keyword.Declaration, Text, Name.Class), '#pop:2'),
                (r'[\w\$]+', Name.Class),
                (r'', Text, '#pop:2') # jump out to root state
            ],
            'facet': [
                (r'\s+', Text),
                (r'{', Punctuation, 'facetFields'),
                (r'', Text, '#pop')
            ],
            'facetFields': [
                include('comments'),
                include('literals'),
                include('operators'),
                (r'\s+', Text),
                (r'(\s*)(\w+)(\s*)(=)', bygroups(Text, Name, Text, Operator)),
                (r'}', Punctuation, '#pop'),
                (r'.', Text)
            ],
        }
    eric4-4.5.18/eric/ThirdParty/Pygments/pygments/lexers/PaxHeaders.8617/__init__.py0000644000175000001440000000013112261012652025666 xustar000000000000000030 mtime=1388582314.194104887
    29 atime=1389081085.56672435
    30 ctime=1389081086.311724332
    eric4-4.5.18/eric/ThirdParty/Pygments/pygments/lexers/__init__.py0000644000175000001440000001640512261012652025427 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*-
    """
        pygments.lexers
        ~~~~~~~~~~~~~~~
    
        Pygments lexers.
    
        :copyright: Copyright 2006-2012 by the Pygments team, see AUTHORS.
        :license: BSD, see LICENSE for details.
    """
    
    import sys
    import types
    import fnmatch
    from os.path import basename
    
    from pygments.lexers._mapping import LEXERS
    from pygments.plugin import find_plugin_lexers
    from pygments.util import ClassNotFound, bytes
    
    
    __all__ = ['get_lexer_by_name', 'get_lexer_for_filename', 'find_lexer_class',
               'guess_lexer'] + LEXERS.keys()
    
    _lexer_cache = {}
    
    
    def _load_lexers(module_name):
        """
        Load a lexer (and all others in the module too).
        """
        mod = __import__(module_name, None, None, ['__all__'])
        for lexer_name in mod.__all__:
            cls = getattr(mod, lexer_name)
            _lexer_cache[cls.name] = cls
    
    
    def get_all_lexers():
        """
        Return a generator of tuples in the form ``(name, aliases,
        filenames, mimetypes)`` of all know lexers.
        """
        for item in LEXERS.itervalues():
            yield item[1:]
        for lexer in find_plugin_lexers():
            yield lexer.name, lexer.aliases, lexer.filenames, lexer.mimetypes
    
    
    def find_lexer_class(name):
        """
        Lookup a lexer class by name. Return None if not found.
        """
        if name in _lexer_cache:
            return _lexer_cache[name]
        # lookup builtin lexers
        for module_name, lname, aliases, _, _ in LEXERS.itervalues():
            if name == lname:
                _load_lexers(module_name)
                return _lexer_cache[name]
        # continue with lexers from setuptools entrypoints
        for cls in find_plugin_lexers():
            if cls.name == name:
                return cls
    
    
    def get_lexer_by_name(_alias, **options):
        """
        Get a lexer by an alias.
        """
        # lookup builtin lexers
        for module_name, name, aliases, _, _ in LEXERS.itervalues():
            if _alias in aliases:
                if name not in _lexer_cache:
                    _load_lexers(module_name)
                return _lexer_cache[name](**options)
        # continue with lexers from setuptools entrypoints
        for cls in find_plugin_lexers():
            if _alias in cls.aliases:
                return cls(**options)
        raise ClassNotFound('no lexer for alias %r found' % _alias)
    
    
    def get_lexer_for_filename(_fn, code=None, **options):
        """
        Get a lexer for a filename.  If multiple lexers match the filename
        pattern, use ``analyze_text()`` to figure out which one is more
        appropriate.
        """
        matches = []
        fn = basename(_fn)
        for modname, name, _, filenames, _ in LEXERS.itervalues():
            for filename in filenames:
                if fnmatch.fnmatch(fn, filename):
                    if name not in _lexer_cache:
                        _load_lexers(modname)
                    matches.append((_lexer_cache[name], filename))
        for cls in find_plugin_lexers():
            for filename in cls.filenames:
                if fnmatch.fnmatch(fn, filename):
                    matches.append((cls, filename))
    
        if sys.version_info > (3,) and isinstance(code, bytes):
            # decode it, since all analyse_text functions expect unicode
            code = code.decode('latin1')
    
        def get_rating(info):
            cls, filename = info
            # explicit patterns get a bonus
            bonus = '*' not in filename and 0.5 or 0
            # The class _always_ defines analyse_text because it's included in
            # the Lexer class.  The default implementation returns None which
            # gets turned into 0.0.  Run scripts/detect_missing_analyse_text.py
            # to find lexers which need it overridden.
            if code:
                return cls.analyse_text(code) + bonus
            return bonus
    
        if matches:
            matches.sort(key=get_rating)
            #print "Possible lexers, after sort:", matches
            return matches[-1][0](**options)
        raise ClassNotFound('no lexer for filename %r found' % _fn)
    
    
    def get_lexer_for_mimetype(_mime, **options):
        """
        Get a lexer for a mimetype.
        """
        for modname, name, _, _, mimetypes in LEXERS.itervalues():
            if _mime in mimetypes:
                if name not in _lexer_cache:
                    _load_lexers(modname)
                return _lexer_cache[name](**options)
        for cls in find_plugin_lexers():
            if _mime in cls.mimetypes:
                return cls(**options)
        raise ClassNotFound('no lexer for mimetype %r found' % _mime)
    
    
    def _iter_lexerclasses():
        """
        Return an iterator over all lexer classes.
        """
        for key in sorted(LEXERS):
            module_name, name = LEXERS[key][:2]
            if name not in _lexer_cache:
                _load_lexers(module_name)
            yield _lexer_cache[name]
        for lexer in find_plugin_lexers():
            yield lexer
    
    
    def guess_lexer_for_filename(_fn, _text, **options):
        """
        Lookup all lexers that handle those filenames primary (``filenames``)
        or secondary (``alias_filenames``). Then run a text analysis for those
        lexers and choose the best result.
    
        usage::
    
            >>> from pygments.lexers import guess_lexer_for_filename
            >>> guess_lexer_for_filename('hello.html', '<%= @foo %>')
            
            >>> guess_lexer_for_filename('hello.html', '

    {{ title|e }}

    ') >>> guess_lexer_for_filename('style.css', 'a { color: }') """ fn = basename(_fn) primary = None matching_lexers = set() for lexer in _iter_lexerclasses(): for filename in lexer.filenames: if fnmatch.fnmatch(fn, filename): matching_lexers.add(lexer) primary = lexer for filename in lexer.alias_filenames: if fnmatch.fnmatch(fn, filename): matching_lexers.add(lexer) if not matching_lexers: raise ClassNotFound('no lexer for filename %r found' % fn) if len(matching_lexers) == 1: return matching_lexers.pop()(**options) result = [] for lexer in matching_lexers: rv = lexer.analyse_text(_text) if rv == 1.0: return lexer(**options) result.append((rv, lexer)) result.sort(key=lambda k: k[0]) if not result[-1][0] and primary is not None: return primary(**options) return result[-1][1](**options) def guess_lexer(_text, **options): """ Guess a lexer by strong distinctions in the text (eg, shebang). """ best_lexer = [0.0, None] for lexer in _iter_lexerclasses(): rv = lexer.analyse_text(_text) if rv == 1.0: return lexer(**options) if rv > best_lexer[0]: best_lexer[:] = (rv, lexer) if not best_lexer[0] or best_lexer[1] is None: raise ClassNotFound('no lexer matching the text found') return best_lexer[1](**options) class _automodule(types.ModuleType): """Automatically import lexers.""" def __getattr__(self, name): info = LEXERS.get(name) if info: _load_lexers(info[0]) cls = _lexer_cache[info[1]] setattr(self, name, cls) return cls raise AttributeError(name) oldmod = sys.modules['pygments.lexers'] newmod = _automodule('pygments.lexers') newmod.__dict__.update(oldmod.__dict__) sys.modules['pygments.lexers'] = newmod del newmod.newmod, newmod.oldmod, newmod.sys, newmod.types eric4-4.5.18/eric/ThirdParty/Pygments/pygments/lexers/PaxHeaders.8617/_mapping.py0000644000175000001440000000013112261012652025721 xustar000000000000000030 mtime=1388582314.197104925 29 atime=1389081085.56672435 30 ctime=1389081086.311724332 eric4-4.5.18/eric/ThirdParty/Pygments/pygments/lexers/_mapping.py0000644000175000001440000007506312261012652025467 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- """ pygments.lexers._mapping ~~~~~~~~~~~~~~~~~~~~~~~~ Lexer mapping defintions. This file is generated by itself. Everytime you change something on a builtin lexer defintion, run this script from the lexers folder to update it. Do not alter the LEXERS dictionary by hand. :copyright: Copyright 2006-2012 by the Pygments team, see AUTHORS. :license: BSD, see LICENSE for details. """ LEXERS = { 'ABAPLexer': ('pygments.lexers.other', 'ABAP', ('abap',), ('*.abap',), ('text/x-abap',)), 'ActionScript3Lexer': ('pygments.lexers.web', 'ActionScript 3', ('as3', 'actionscript3'), ('*.as',), ('application/x-actionscript', 'text/x-actionscript', 'text/actionscript')), 'ActionScriptLexer': ('pygments.lexers.web', 'ActionScript', ('as', 'actionscript'), ('*.as',), ('application/x-actionscript3', 'text/x-actionscript3', 'text/actionscript3')), 'AdaLexer': ('pygments.lexers.compiled', 'Ada', ('ada', 'ada95ada2005'), ('*.adb', '*.ads', '*.ada'), ('text/x-ada',)), 'AntlrActionScriptLexer': ('pygments.lexers.parsers', 'ANTLR With ActionScript Target', ('antlr-as', 'antlr-actionscript'), ('*.G', '*.g'), ()), 'AntlrCSharpLexer': ('pygments.lexers.parsers', 'ANTLR With C# Target', ('antlr-csharp', 'antlr-c#'), ('*.G', '*.g'), ()), 'AntlrCppLexer': ('pygments.lexers.parsers', 'ANTLR With CPP Target', ('antlr-cpp',), ('*.G', '*.g'), ()), 'AntlrJavaLexer': ('pygments.lexers.parsers', 'ANTLR With Java Target', ('antlr-java',), ('*.G', '*.g'), ()), 'AntlrLexer': ('pygments.lexers.parsers', 'ANTLR', ('antlr',), (), ()), 'AntlrObjectiveCLexer': ('pygments.lexers.parsers', 'ANTLR With ObjectiveC Target', ('antlr-objc',), ('*.G', '*.g'), ()), 'AntlrPerlLexer': ('pygments.lexers.parsers', 'ANTLR With Perl Target', ('antlr-perl',), ('*.G', '*.g'), ()), 'AntlrPythonLexer': ('pygments.lexers.parsers', 'ANTLR With Python Target', ('antlr-python',), ('*.G', '*.g'), ()), 'AntlrRubyLexer': ('pygments.lexers.parsers', 'ANTLR With Ruby Target', ('antlr-ruby', 'antlr-rb'), ('*.G', '*.g'), ()), 'ApacheConfLexer': ('pygments.lexers.text', 'ApacheConf', ('apacheconf', 'aconf', 'apache'), ('.htaccess', 'apache.conf', 'apache2.conf'), ('text/x-apacheconf',)), 'AppleScriptLexer': ('pygments.lexers.other', 'AppleScript', ('applescript',), ('*.applescript',), ()), 'AsymptoteLexer': ('pygments.lexers.other', 'Asymptote', ('asy', 'asymptote'), ('*.asy',), ('text/x-asymptote',)), 'AutohotkeyLexer': ('pygments.lexers.other', 'autohotkey', ('ahk',), ('*.ahk', '*.ahkl'), ('text/x-autohotkey',)), 'AwkLexer': ('pygments.lexers.other', 'Awk', ('awk', 'gawk', 'mawk', 'nawk'), ('*.awk',), ('application/x-awk',)), 'BBCodeLexer': ('pygments.lexers.text', 'BBCode', ('bbcode',), (), ('text/x-bbcode',)), 'BaseMakefileLexer': ('pygments.lexers.text', 'Base Makefile', ('basemake',), (), ()), 'BashLexer': ('pygments.lexers.shell', 'Bash', ('bash', 'sh', 'ksh'), ('*.sh', '*.ksh', '*.bash', '*.ebuild', '*.eclass', '.bashrc', 'bashrc', '.bash_*', 'bash_*'), ('application/x-sh', 'application/x-shellscript')), 'BashSessionLexer': ('pygments.lexers.shell', 'Bash Session', ('console',), ('*.sh-session',), ('application/x-shell-session',)), 'BatchLexer': ('pygments.lexers.shell', 'Batchfile', ('bat',), ('*.bat', '*.cmd'), ('application/x-dos-batch',)), 'BefungeLexer': ('pygments.lexers.other', 'Befunge', ('befunge',), ('*.befunge',), ('application/x-befunge',)), 'BlitzMaxLexer': ('pygments.lexers.compiled', 'BlitzMax', ('blitzmax', 'bmax'), ('*.bmx',), ('text/x-bmx',)), 'BooLexer': ('pygments.lexers.dotnet', 'Boo', ('boo',), ('*.boo',), ('text/x-boo',)), 'BrainfuckLexer': ('pygments.lexers.other', 'Brainfuck', ('brainfuck', 'bf'), ('*.bf', '*.b'), ('application/x-brainfuck',)), 'BroLexer': ('pygments.lexers.other', 'Bro', ('bro',), ('*.bro',), ()), 'CLexer': ('pygments.lexers.compiled', 'C', ('c',), ('*.c', '*.h', '*.idc'), ('text/x-chdr', 'text/x-csrc')), 'CMakeLexer': ('pygments.lexers.text', 'CMake', ('cmake',), ('*.cmake', 'CMakeLists.txt'), ('text/x-cmake',)), 'CObjdumpLexer': ('pygments.lexers.asm', 'c-objdump', ('c-objdump',), ('*.c-objdump',), ('text/x-c-objdump',)), 'CSharpAspxLexer': ('pygments.lexers.dotnet', 'aspx-cs', ('aspx-cs',), ('*.aspx', '*.asax', '*.ascx', '*.ashx', '*.asmx', '*.axd'), ()), 'CSharpLexer': ('pygments.lexers.dotnet', 'C#', ('csharp', 'c#'), ('*.cs',), ('text/x-csharp',)), 'Cfengine3Lexer': ('pygments.lexers.other', 'CFEngine3', ('cfengine3', 'cf3'), ('*.cf',), ()), 'CheetahHtmlLexer': ('pygments.lexers.templates', 'HTML+Cheetah', ('html+cheetah', 'html+spitfire'), (), ('text/html+cheetah', 'text/html+spitfire')), 'CheetahJavascriptLexer': ('pygments.lexers.templates', 'JavaScript+Cheetah', ('js+cheetah', 'javascript+cheetah', 'js+spitfire', 'javascript+spitfire'), (), ('application/x-javascript+cheetah', 'text/x-javascript+cheetah', 'text/javascript+cheetah', 'application/x-javascript+spitfire', 'text/x-javascript+spitfire', 'text/javascript+spitfire')), 'CheetahLexer': ('pygments.lexers.templates', 'Cheetah', ('cheetah', 'spitfire'), ('*.tmpl', '*.spt'), ('application/x-cheetah', 'application/x-spitfire')), 'CheetahXmlLexer': ('pygments.lexers.templates', 'XML+Cheetah', ('xml+cheetah', 'xml+spitfire'), (), ('application/xml+cheetah', 'application/xml+spitfire')), 'ClojureLexer': ('pygments.lexers.jvm', 'Clojure', ('clojure', 'clj'), ('*.clj',), ('text/x-clojure', 'application/x-clojure')), 'CoffeeScriptLexer': ('pygments.lexers.web', 'CoffeeScript', ('coffee-script', 'coffeescript'), ('*.coffee',), ('text/coffeescript',)), 'ColdfusionHtmlLexer': ('pygments.lexers.templates', 'Coldfusion HTML', ('cfm',), ('*.cfm', '*.cfml', '*.cfc'), ('application/x-coldfusion',)), 'ColdfusionLexer': ('pygments.lexers.templates', 'cfstatement', ('cfs',), (), ()), 'CommonLispLexer': ('pygments.lexers.functional', 'Common Lisp', ('common-lisp', 'cl'), ('*.cl', '*.lisp', '*.el'), ('text/x-common-lisp',)), 'CoqLexer': ('pygments.lexers.functional', 'Coq', ('coq',), ('*.v',), ('text/x-coq',)), 'CppLexer': ('pygments.lexers.compiled', 'C++', ('cpp', 'c++'), ('*.cpp', '*.hpp', '*.c++', '*.h++', '*.cc', '*.hh', '*.cxx', '*.hxx'), ('text/x-c++hdr', 'text/x-c++src')), 'CppObjdumpLexer': ('pygments.lexers.asm', 'cpp-objdump', ('cpp-objdump', 'c++-objdumb', 'cxx-objdump'), ('*.cpp-objdump', '*.c++-objdump', '*.cxx-objdump'), ('text/x-cpp-objdump',)), 'CssDjangoLexer': ('pygments.lexers.templates', 'CSS+Django/Jinja', ('css+django', 'css+jinja'), (), ('text/css+django', 'text/css+jinja')), 'CssErbLexer': ('pygments.lexers.templates', 'CSS+Ruby', ('css+erb', 'css+ruby'), (), ('text/css+ruby',)), 'CssGenshiLexer': ('pygments.lexers.templates', 'CSS+Genshi Text', ('css+genshitext', 'css+genshi'), (), ('text/css+genshi',)), 'CssLexer': ('pygments.lexers.web', 'CSS', ('css',), ('*.css',), ('text/css',)), 'CssPhpLexer': ('pygments.lexers.templates', 'CSS+PHP', ('css+php',), (), ('text/css+php',)), 'CssSmartyLexer': ('pygments.lexers.templates', 'CSS+Smarty', ('css+smarty',), (), ('text/css+smarty',)), 'CythonLexer': ('pygments.lexers.compiled', 'Cython', ('cython', 'pyx'), ('*.pyx', '*.pxd', '*.pxi'), ('text/x-cython', 'application/x-cython')), 'DLexer': ('pygments.lexers.compiled', 'D', ('d',), ('*.d', '*.di'), ('text/x-dsrc',)), 'DObjdumpLexer': ('pygments.lexers.asm', 'd-objdump', ('d-objdump',), ('*.d-objdump',), ('text/x-d-objdump',)), 'DarcsPatchLexer': ('pygments.lexers.text', 'Darcs Patch', ('dpatch',), ('*.dpatch', '*.darcspatch'), ()), 'DartLexer': ('pygments.lexers.web', 'Dart', ('dart',), ('*.dart',), ('text/x-dart',)), 'DebianControlLexer': ('pygments.lexers.text', 'Debian Control file', ('control',), ('control',), ()), 'DelphiLexer': ('pygments.lexers.compiled', 'Delphi', ('delphi', 'pas', 'pascal', 'objectpascal'), ('*.pas',), ('text/x-pascal',)), 'DiffLexer': ('pygments.lexers.text', 'Diff', ('diff', 'udiff'), ('*.diff', '*.patch'), ('text/x-diff', 'text/x-patch')), 'DjangoLexer': ('pygments.lexers.templates', 'Django/Jinja', ('django', 'jinja'), (), ('application/x-django-templating', 'application/x-jinja')), 'DtdLexer': ('pygments.lexers.web', 'DTD', ('dtd',), ('*.dtd',), ('application/xml-dtd',)), 'DuelLexer': ('pygments.lexers.web', 'Duel', ('duel', 'Duel Engine', 'Duel View', 'JBST', 'jbst', 'JsonML+BST'), ('*.duel', '*.jbst'), ('text/x-duel', 'text/x-jbst')), 'DylanLexer': ('pygments.lexers.compiled', 'Dylan', ('dylan',), ('*.dylan', '*.dyl'), ('text/x-dylan',)), 'ECLLexer': ('pygments.lexers.other', 'ECL', ('ecl',), ('*.ecl',), ('application/x-ecl',)), 'ECLexer': ('pygments.lexers.compiled', 'eC', ('ec',), ('*.ec', '*.eh'), ('text/x-echdr', 'text/x-ecsrc')), 'ElixirConsoleLexer': ('pygments.lexers.functional', 'Elixir iex session', ('iex',), (), ('text/x-elixir-shellsession',)), 'ElixirLexer': ('pygments.lexers.functional', 'Elixir', ('elixir', 'ex', 'exs'), ('*.ex', '*.exs'), ('text/x-elixir',)), 'ErbLexer': ('pygments.lexers.templates', 'ERB', ('erb',), (), ('application/x-ruby-templating',)), 'ErlangLexer': ('pygments.lexers.functional', 'Erlang', ('erlang',), ('*.erl', '*.hrl', '*.es', '*.escript'), ('text/x-erlang',)), 'ErlangShellLexer': ('pygments.lexers.functional', 'Erlang erl session', ('erl',), ('*.erl-sh',), ('text/x-erl-shellsession',)), 'EvoqueHtmlLexer': ('pygments.lexers.templates', 'HTML+Evoque', ('html+evoque',), ('*.html',), ('text/html+evoque',)), 'EvoqueLexer': ('pygments.lexers.templates', 'Evoque', ('evoque',), ('*.evoque',), ('application/x-evoque',)), 'EvoqueXmlLexer': ('pygments.lexers.templates', 'XML+Evoque', ('xml+evoque',), ('*.xml',), ('application/xml+evoque',)), 'FSharpLexer': ('pygments.lexers.dotnet', 'FSharp', ('fsharp',), ('*.fs', '*.fsi'), ('text/x-fsharp',)), 'FactorLexer': ('pygments.lexers.agile', 'Factor', ('factor',), ('*.factor',), ('text/x-factor',)), 'FancyLexer': ('pygments.lexers.agile', 'Fancy', ('fancy', 'fy'), ('*.fy', '*.fancypack'), ('text/x-fancysrc',)), 'FantomLexer': ('pygments.lexers.compiled', 'Fantom', ('fan',), ('*.fan',), ('application/x-fantom',)), 'FelixLexer': ('pygments.lexers.compiled', 'Felix', ('felix', 'flx'), ('*.flx', '*.flxh'), ('text/x-felix',)), 'FortranLexer': ('pygments.lexers.compiled', 'Fortran', ('fortran',), ('*.f', '*.f90', '*.F', '*.F90'), ('text/x-fortran',)), 'GLShaderLexer': ('pygments.lexers.compiled', 'GLSL', ('glsl',), ('*.vert', '*.frag', '*.geo'), ('text/x-glslsrc',)), 'GasLexer': ('pygments.lexers.asm', 'GAS', ('gas',), ('*.s', '*.S'), ('text/x-gas',)), 'GenshiLexer': ('pygments.lexers.templates', 'Genshi', ('genshi', 'kid', 'xml+genshi', 'xml+kid'), ('*.kid',), ('application/x-genshi', 'application/x-kid')), 'GenshiTextLexer': ('pygments.lexers.templates', 'Genshi Text', ('genshitext',), (), ('application/x-genshi-text', 'text/x-genshi')), 'GettextLexer': ('pygments.lexers.text', 'Gettext Catalog', ('pot', 'po'), ('*.pot', '*.po'), ('application/x-gettext', 'text/x-gettext', 'text/gettext')), 'GherkinLexer': ('pygments.lexers.other', 'Gherkin', ('Cucumber', 'cucumber', 'Gherkin', 'gherkin'), ('*.feature',), ('text/x-gherkin',)), 'GnuplotLexer': ('pygments.lexers.other', 'Gnuplot', ('gnuplot',), ('*.plot', '*.plt'), ('text/x-gnuplot',)), 'GoLexer': ('pygments.lexers.compiled', 'Go', ('go',), ('*.go',), ('text/x-gosrc',)), 'GoodDataCLLexer': ('pygments.lexers.other', 'GoodData-CL', ('gooddata-cl',), ('*.gdc',), ('text/x-gooddata-cl',)), 'GosuLexer': ('pygments.lexers.jvm', 'Gosu', ('gosu',), ('*.gs', '*.gsx', '*.gsp', '*.vark'), ('text/x-gosu',)), 'GosuTemplateLexer': ('pygments.lexers.jvm', 'Gosu Template', ('gst',), ('*.gst',), ('text/x-gosu-template',)), 'GroffLexer': ('pygments.lexers.text', 'Groff', ('groff', 'nroff', 'man'), ('*.[1234567]', '*.man'), ('application/x-troff', 'text/troff')), 'GroovyLexer': ('pygments.lexers.jvm', 'Groovy', ('groovy',), ('*.groovy',), ('text/x-groovy',)), 'HamlLexer': ('pygments.lexers.web', 'Haml', ('haml', 'HAML'), ('*.haml',), ('text/x-haml',)), 'HaskellLexer': ('pygments.lexers.functional', 'Haskell', ('haskell', 'hs'), ('*.hs',), ('text/x-haskell',)), 'HaxeLexer': ('pygments.lexers.web', 'haXe', ('hx', 'haXe'), ('*.hx',), ('text/haxe',)), 'HtmlDjangoLexer': ('pygments.lexers.templates', 'HTML+Django/Jinja', ('html+django', 'html+jinja'), (), ('text/html+django', 'text/html+jinja')), 'HtmlGenshiLexer': ('pygments.lexers.templates', 'HTML+Genshi', ('html+genshi', 'html+kid'), (), ('text/html+genshi',)), 'HtmlLexer': ('pygments.lexers.web', 'HTML', ('html',), ('*.html', '*.htm', '*.xhtml', '*.xslt'), ('text/html', 'application/xhtml+xml')), 'HtmlPhpLexer': ('pygments.lexers.templates', 'HTML+PHP', ('html+php',), ('*.phtml',), ('application/x-php', 'application/x-httpd-php', 'application/x-httpd-php3', 'application/x-httpd-php4', 'application/x-httpd-php5')), 'HtmlSmartyLexer': ('pygments.lexers.templates', 'HTML+Smarty', ('html+smarty',), (), ('text/html+smarty',)), 'HttpLexer': ('pygments.lexers.text', 'HTTP', ('http',), (), ()), 'HybrisLexer': ('pygments.lexers.other', 'Hybris', ('hybris', 'hy'), ('*.hy', '*.hyb'), ('text/x-hybris', 'application/x-hybris')), 'IniLexer': ('pygments.lexers.text', 'INI', ('ini', 'cfg'), ('*.ini', '*.cfg'), ('text/x-ini',)), 'IoLexer': ('pygments.lexers.agile', 'Io', ('io',), ('*.io',), ('text/x-iosrc',)), 'IokeLexer': ('pygments.lexers.jvm', 'Ioke', ('ioke', 'ik'), ('*.ik',), ('text/x-iokesrc',)), 'IrcLogsLexer': ('pygments.lexers.text', 'IRC logs', ('irc',), ('*.weechatlog',), ('text/x-irclog',)), 'JSONLexer': ('pygments.lexers.web', 'JSON', ('json',), ('*.json',), ('application/json',)), 'JadeLexer': ('pygments.lexers.web', 'Jade', ('jade', 'JADE'), ('*.jade',), ('text/x-jade',)), 'JavaLexer': ('pygments.lexers.jvm', 'Java', ('java',), ('*.java',), ('text/x-java',)), 'JavascriptDjangoLexer': ('pygments.lexers.templates', 'JavaScript+Django/Jinja', ('js+django', 'javascript+django', 'js+jinja', 'javascript+jinja'), (), ('application/x-javascript+django', 'application/x-javascript+jinja', 'text/x-javascript+django', 'text/x-javascript+jinja', 'text/javascript+django', 'text/javascript+jinja')), 'JavascriptErbLexer': ('pygments.lexers.templates', 'JavaScript+Ruby', ('js+erb', 'javascript+erb', 'js+ruby', 'javascript+ruby'), (), ('application/x-javascript+ruby', 'text/x-javascript+ruby', 'text/javascript+ruby')), 'JavascriptGenshiLexer': ('pygments.lexers.templates', 'JavaScript+Genshi Text', ('js+genshitext', 'js+genshi', 'javascript+genshitext', 'javascript+genshi'), (), ('application/x-javascript+genshi', 'text/x-javascript+genshi', 'text/javascript+genshi')), 'JavascriptLexer': ('pygments.lexers.web', 'JavaScript', ('js', 'javascript'), ('*.js',), ('application/javascript', 'application/x-javascript', 'text/x-javascript', 'text/javascript')), 'JavascriptPhpLexer': ('pygments.lexers.templates', 'JavaScript+PHP', ('js+php', 'javascript+php'), (), ('application/x-javascript+php', 'text/x-javascript+php', 'text/javascript+php')), 'JavascriptSmartyLexer': ('pygments.lexers.templates', 'JavaScript+Smarty', ('js+smarty', 'javascript+smarty'), (), ('application/x-javascript+smarty', 'text/x-javascript+smarty', 'text/javascript+smarty')), 'JspLexer': ('pygments.lexers.templates', 'Java Server Page', ('jsp',), ('*.jsp',), ('application/x-jsp',)), 'KotlinLexer': ('pygments.lexers.jvm', 'Kotlin', ('kotlin',), ('*.kt',), ('text/x-kotlin',)), 'LighttpdConfLexer': ('pygments.lexers.text', 'Lighttpd configuration file', ('lighty', 'lighttpd'), (), ('text/x-lighttpd-conf',)), 'LiterateHaskellLexer': ('pygments.lexers.functional', 'Literate Haskell', ('lhs', 'literate-haskell'), ('*.lhs',), ('text/x-literate-haskell',)), 'LlvmLexer': ('pygments.lexers.asm', 'LLVM', ('llvm',), ('*.ll',), ('text/x-llvm',)), 'LogtalkLexer': ('pygments.lexers.other', 'Logtalk', ('logtalk',), ('*.lgt',), ('text/x-logtalk',)), 'LuaLexer': ('pygments.lexers.agile', 'Lua', ('lua',), ('*.lua', '*.wlua'), ('text/x-lua', 'application/x-lua')), 'MOOCodeLexer': ('pygments.lexers.other', 'MOOCode', ('moocode',), ('*.moo',), ('text/x-moocode',)), 'MakefileLexer': ('pygments.lexers.text', 'Makefile', ('make', 'makefile', 'mf', 'bsdmake'), ('*.mak', 'Makefile', 'makefile', 'Makefile.*', 'GNUmakefile'), ('text/x-makefile',)), 'MakoCssLexer': ('pygments.lexers.templates', 'CSS+Mako', ('css+mako',), (), ('text/css+mako',)), 'MakoHtmlLexer': ('pygments.lexers.templates', 'HTML+Mako', ('html+mako',), (), ('text/html+mako',)), 'MakoJavascriptLexer': ('pygments.lexers.templates', 'JavaScript+Mako', ('js+mako', 'javascript+mako'), (), ('application/x-javascript+mako', 'text/x-javascript+mako', 'text/javascript+mako')), 'MakoLexer': ('pygments.lexers.templates', 'Mako', ('mako',), ('*.mao',), ('application/x-mako',)), 'MakoXmlLexer': ('pygments.lexers.templates', 'XML+Mako', ('xml+mako',), (), ('application/xml+mako',)), 'MaqlLexer': ('pygments.lexers.other', 'MAQL', ('maql',), ('*.maql',), ('text/x-gooddata-maql', 'application/x-gooddata-maql')), 'MasonLexer': ('pygments.lexers.templates', 'Mason', ('mason',), ('*.m', '*.mhtml', '*.mc', '*.mi', 'autohandler', 'dhandler'), ('application/x-mason',)), 'MatlabLexer': ('pygments.lexers.math', 'Matlab', ('matlab',), ('*.m',), ('text/matlab',)), 'MatlabSessionLexer': ('pygments.lexers.math', 'Matlab session', ('matlabsession',), (), ()), 'MiniDLexer': ('pygments.lexers.agile', 'MiniD', ('minid',), ('*.md',), ('text/x-minidsrc',)), 'ModelicaLexer': ('pygments.lexers.other', 'Modelica', ('modelica',), ('*.mo',), ('text/x-modelica',)), 'Modula2Lexer': ('pygments.lexers.compiled', 'Modula-2', ('modula2', 'm2'), ('*.def', '*.mod'), ('text/x-modula2',)), 'MoinWikiLexer': ('pygments.lexers.text', 'MoinMoin/Trac Wiki markup', ('trac-wiki', 'moin'), (), ('text/x-trac-wiki',)), 'MoonScriptLexer': ('pygments.lexers.agile', 'MoonScript', ('moon', 'moonscript'), ('*.moon',), ('text/x-moonscript', 'application/x-moonscript')), 'MuPADLexer': ('pygments.lexers.math', 'MuPAD', ('mupad',), ('*.mu',), ()), 'MxmlLexer': ('pygments.lexers.web', 'MXML', ('mxml',), ('*.mxml',), ()), 'MySqlLexer': ('pygments.lexers.sql', 'MySQL', ('mysql',), (), ('text/x-mysql',)), 'MyghtyCssLexer': ('pygments.lexers.templates', 'CSS+Myghty', ('css+myghty',), (), ('text/css+myghty',)), 'MyghtyHtmlLexer': ('pygments.lexers.templates', 'HTML+Myghty', ('html+myghty',), (), ('text/html+myghty',)), 'MyghtyJavascriptLexer': ('pygments.lexers.templates', 'JavaScript+Myghty', ('js+myghty', 'javascript+myghty'), (), ('application/x-javascript+myghty', 'text/x-javascript+myghty', 'text/javascript+mygthy')), 'MyghtyLexer': ('pygments.lexers.templates', 'Myghty', ('myghty',), ('*.myt', 'autodelegate'), ('application/x-myghty',)), 'MyghtyXmlLexer': ('pygments.lexers.templates', 'XML+Myghty', ('xml+myghty',), (), ('application/xml+myghty',)), 'NasmLexer': ('pygments.lexers.asm', 'NASM', ('nasm',), ('*.asm', '*.ASM'), ('text/x-nasm',)), 'NemerleLexer': ('pygments.lexers.dotnet', 'Nemerle', ('nemerle',), ('*.n',), ('text/x-nemerle',)), 'NewLispLexer': ('pygments.lexers.functional', 'NewLisp', ('newlisp',), ('*.lsp', '*.nl'), ('text/x-newlisp', 'application/x-newlisp')), 'NewspeakLexer': ('pygments.lexers.other', 'Newspeak', ('newspeak',), ('*.ns2',), ('text/x-newspeak',)), 'NginxConfLexer': ('pygments.lexers.text', 'Nginx configuration file', ('nginx',), (), ('text/x-nginx-conf',)), 'NimrodLexer': ('pygments.lexers.compiled', 'Nimrod', ('nimrod', 'nim'), ('*.nim', '*.nimrod'), ('text/x-nimrod',)), 'NumPyLexer': ('pygments.lexers.math', 'NumPy', ('numpy',), (), ()), 'ObjdumpLexer': ('pygments.lexers.asm', 'objdump', ('objdump',), ('*.objdump',), ('text/x-objdump',)), 'ObjectiveCLexer': ('pygments.lexers.compiled', 'Objective-C', ('objective-c', 'objectivec', 'obj-c', 'objc'), ('*.m',), ('text/x-objective-c',)), 'ObjectiveJLexer': ('pygments.lexers.web', 'Objective-J', ('objective-j', 'objectivej', 'obj-j', 'objj'), ('*.j',), ('text/x-objective-j',)), 'OcamlLexer': ('pygments.lexers.functional', 'OCaml', ('ocaml',), ('*.ml', '*.mli', '*.mll', '*.mly'), ('text/x-ocaml',)), 'OctaveLexer': ('pygments.lexers.math', 'Octave', ('octave',), ('*.m',), ('text/octave',)), 'OocLexer': ('pygments.lexers.compiled', 'Ooc', ('ooc',), ('*.ooc',), ('text/x-ooc',)), 'OpaLexer': ('pygments.lexers.functional', 'Opa', ('opa',), ('*.opa',), ('text/x-opa',)), 'OpenEdgeLexer': ('pygments.lexers.other', 'OpenEdge ABL', ('openedge', 'abl', 'progress'), ('*.p', '*.cls'), ('text/x-openedge', 'application/x-openedge')), 'PerlLexer': ('pygments.lexers.agile', 'Perl', ('perl', 'pl'), ('*.pl', '*.pm'), ('text/x-perl', 'application/x-perl')), 'PhpLexer': ('pygments.lexers.web', 'PHP', ('php', 'php3', 'php4', 'php5'), ('*.php', '*.php[345]'), ('text/x-php',)), 'PlPgsqlLexer': ('pygments.lexers.sql', 'PL/pgSQL', ('plpgsql',), (), ('text/x-plpgsql',)), 'PostScriptLexer': ('pygments.lexers.other', 'PostScript', ('postscript',), ('*.ps', '*.eps'), ('application/postscript',)), 'PostgresConsoleLexer': ('pygments.lexers.sql', 'PostgreSQL console (psql)', ('psql', 'postgresql-console', 'postgres-console'), (), ('text/x-postgresql-psql',)), 'PostgresLexer': ('pygments.lexers.sql', 'PostgreSQL SQL dialect', ('postgresql', 'postgres'), (), ('text/x-postgresql',)), 'PovrayLexer': ('pygments.lexers.other', 'POVRay', ('pov',), ('*.pov', '*.inc'), ('text/x-povray',)), 'PowerShellLexer': ('pygments.lexers.shell', 'PowerShell', ('powershell', 'posh', 'ps1'), ('*.ps1',), ('text/x-powershell',)), 'PrologLexer': ('pygments.lexers.compiled', 'Prolog', ('prolog',), ('*.prolog', '*.pro', '*.pl'), ('text/x-prolog',)), 'PropertiesLexer': ('pygments.lexers.text', 'Properties', ('properties',), ('*.properties',), ('text/x-java-properties',)), 'ProtoBufLexer': ('pygments.lexers.other', 'Protocol Buffer', ('protobuf',), ('*.proto',), ()), 'PyPyLogLexer': ('pygments.lexers.text', 'PyPy Log', ('pypylog', 'pypy'), ('*.pypylog',), ('application/x-pypylog',)), 'Python3Lexer': ('pygments.lexers.agile', 'Python 3', ('python3', 'py3'), (), ('text/x-python3', 'application/x-python3')), 'Python3TracebackLexer': ('pygments.lexers.agile', 'Python 3.0 Traceback', ('py3tb',), ('*.py3tb',), ('text/x-python3-traceback',)), 'PythonConsoleLexer': ('pygments.lexers.agile', 'Python console session', ('pycon',), (), ('text/x-python-doctest',)), 'PythonLexer': ('pygments.lexers.agile', 'Python', ('python', 'py'), ('*.py', '*.pyw', '*.sc', 'SConstruct', 'SConscript', '*.tac'), ('text/x-python', 'application/x-python')), 'PythonTracebackLexer': ('pygments.lexers.agile', 'Python Traceback', ('pytb',), ('*.pytb',), ('text/x-python-traceback',)), 'RConsoleLexer': ('pygments.lexers.math', 'RConsole', ('rconsole', 'rout'), ('*.Rout',), ()), 'RagelCLexer': ('pygments.lexers.parsers', 'Ragel in C Host', ('ragel-c',), ('*.rl',), ()), 'RagelCppLexer': ('pygments.lexers.parsers', 'Ragel in CPP Host', ('ragel-cpp',), ('*.rl',), ()), 'RagelDLexer': ('pygments.lexers.parsers', 'Ragel in D Host', ('ragel-d',), ('*.rl',), ()), 'RagelEmbeddedLexer': ('pygments.lexers.parsers', 'Embedded Ragel', ('ragel-em',), ('*.rl',), ()), 'RagelJavaLexer': ('pygments.lexers.parsers', 'Ragel in Java Host', ('ragel-java',), ('*.rl',), ()), 'RagelLexer': ('pygments.lexers.parsers', 'Ragel', ('ragel',), (), ()), 'RagelObjectiveCLexer': ('pygments.lexers.parsers', 'Ragel in Objective C Host', ('ragel-objc',), ('*.rl',), ()), 'RagelRubyLexer': ('pygments.lexers.parsers', 'Ragel in Ruby Host', ('ragel-ruby', 'ragel-rb'), ('*.rl',), ()), 'RawTokenLexer': ('pygments.lexers.special', 'Raw token data', ('raw',), (), ('application/x-pygments-tokens',)), 'RebolLexer': ('pygments.lexers.other', 'REBOL', ('rebol',), ('*.r', '*.r3'), ('text/x-rebol',)), 'RedcodeLexer': ('pygments.lexers.other', 'Redcode', ('redcode',), ('*.cw',), ()), 'RhtmlLexer': ('pygments.lexers.templates', 'RHTML', ('rhtml', 'html+erb', 'html+ruby'), ('*.rhtml',), ('text/html+ruby',)), 'RstLexer': ('pygments.lexers.text', 'reStructuredText', ('rst', 'rest', 'restructuredtext'), ('*.rst', '*.rest'), ('text/x-rst', 'text/prs.fallenstein.rst')), 'RubyConsoleLexer': ('pygments.lexers.agile', 'Ruby irb session', ('rbcon', 'irb'), (), ('text/x-ruby-shellsession',)), 'RubyLexer': ('pygments.lexers.agile', 'Ruby', ('rb', 'ruby', 'duby'), ('*.rb', '*.rbw', 'Rakefile', '*.rake', '*.gemspec', '*.rbx', '*.duby'), ('text/x-ruby', 'application/x-ruby')), 'SLexer': ('pygments.lexers.math', 'S', ('splus', 's', 'r'), ('*.S', '*.R'), ('text/S-plus', 'text/S', 'text/R')), 'SMLLexer': ('pygments.lexers.functional', 'Standard ML', ('sml',), ('*.sml', '*.sig', '*.fun'), ('text/x-standardml', 'application/x-standardml')), 'SassLexer': ('pygments.lexers.web', 'Sass', ('sass', 'SASS'), ('*.sass',), ('text/x-sass',)), 'ScalaLexer': ('pygments.lexers.jvm', 'Scala', ('scala',), ('*.scala',), ('text/x-scala',)), 'ScamlLexer': ('pygments.lexers.web', 'Scaml', ('scaml', 'SCAML'), ('*.scaml',), ('text/x-scaml',)), 'SchemeLexer': ('pygments.lexers.functional', 'Scheme', ('scheme', 'scm'), ('*.scm', '*.ss', '*.rkt'), ('text/x-scheme', 'application/x-scheme')), 'ScilabLexer': ('pygments.lexers.math', 'Scilab', ('scilab',), ('*.sci', '*.sce', '*.tst'), ('text/scilab',)), 'ScssLexer': ('pygments.lexers.web', 'SCSS', ('scss',), ('*.scss',), ('text/x-scss',)), 'SmalltalkLexer': ('pygments.lexers.other', 'Smalltalk', ('smalltalk', 'squeak'), ('*.st',), ('text/x-smalltalk',)), 'SmartyLexer': ('pygments.lexers.templates', 'Smarty', ('smarty',), ('*.tpl',), ('application/x-smarty',)), 'SnobolLexer': ('pygments.lexers.other', 'Snobol', ('snobol',), ('*.snobol',), ('text/x-snobol',)), 'SourcesListLexer': ('pygments.lexers.text', 'Debian Sourcelist', ('sourceslist', 'sources.list'), ('sources.list',), ()), 'SqlLexer': ('pygments.lexers.sql', 'SQL', ('sql',), ('*.sql',), ('text/x-sql',)), 'SqliteConsoleLexer': ('pygments.lexers.sql', 'sqlite3con', ('sqlite3',), ('*.sqlite3-console',), ('text/x-sqlite3-console',)), 'SquidConfLexer': ('pygments.lexers.text', 'SquidConf', ('squidconf', 'squid.conf', 'squid'), ('squid.conf',), ('text/x-squidconf',)), 'SspLexer': ('pygments.lexers.templates', 'Scalate Server Page', ('ssp',), ('*.ssp',), ('application/x-ssp',)), 'SystemVerilogLexer': ('pygments.lexers.hdl', 'systemverilog', ('sv',), ('*.sv', '*.svh'), ('text/x-systemverilog',)), 'TclLexer': ('pygments.lexers.agile', 'Tcl', ('tcl',), ('*.tcl',), ('text/x-tcl', 'text/x-script.tcl', 'application/x-tcl')), 'TcshLexer': ('pygments.lexers.shell', 'Tcsh', ('tcsh', 'csh'), ('*.tcsh', '*.csh'), ('application/x-csh',)), 'TeaTemplateLexer': ('pygments.lexers.templates', 'Tea', ('tea',), ('*.tea',), ('text/x-tea',)), 'TexLexer': ('pygments.lexers.text', 'TeX', ('tex', 'latex'), ('*.tex', '*.aux', '*.toc'), ('text/x-tex', 'text/x-latex')), 'TextLexer': ('pygments.lexers.special', 'Text only', ('text',), ('*.txt',), ('text/plain',)), 'UrbiscriptLexer': ('pygments.lexers.other', 'UrbiScript', ('urbiscript',), ('*.u',), ('application/x-urbiscript',)), 'ValaLexer': ('pygments.lexers.compiled', 'Vala', ('vala', 'vapi'), ('*.vala', '*.vapi'), ('text/x-vala',)), 'VbNetAspxLexer': ('pygments.lexers.dotnet', 'aspx-vb', ('aspx-vb',), ('*.aspx', '*.asax', '*.ascx', '*.ashx', '*.asmx', '*.axd'), ()), 'VbNetLexer': ('pygments.lexers.dotnet', 'VB.net', ('vb.net', 'vbnet'), ('*.vb', '*.bas'), ('text/x-vbnet', 'text/x-vba')), 'VelocityHtmlLexer': ('pygments.lexers.templates', 'HTML+Velocity', ('html+velocity',), (), ('text/html+velocity',)), 'VelocityLexer': ('pygments.lexers.templates', 'Velocity', ('velocity',), ('*.vm', '*.fhtml'), ()), 'VelocityXmlLexer': ('pygments.lexers.templates', 'XML+Velocity', ('xml+velocity',), (), ('application/xml+velocity',)), 'VerilogLexer': ('pygments.lexers.hdl', 'verilog', ('v',), ('*.v',), ('text/x-verilog',)), 'VhdlLexer': ('pygments.lexers.hdl', 'vhdl', ('vhdl',), ('*.vhdl', '*.vhd'), ('text/x-vhdl',)), 'VimLexer': ('pygments.lexers.text', 'VimL', ('vim',), ('*.vim', '.vimrc', '.exrc', '.gvimrc', '_vimrc', '_exrc', '_gvimrc', 'vimrc', 'gvimrc'), ('text/x-vim',)), 'XQueryLexer': ('pygments.lexers.web', 'XQuery', ('xquery', 'xqy'), ('*.xqy', '*.xquery'), ('text/xquery', 'application/xquery')), 'XmlDjangoLexer': ('pygments.lexers.templates', 'XML+Django/Jinja', ('xml+django', 'xml+jinja'), (), ('application/xml+django', 'application/xml+jinja')), 'XmlErbLexer': ('pygments.lexers.templates', 'XML+Ruby', ('xml+erb', 'xml+ruby'), (), ('application/xml+ruby',)), 'XmlLexer': ('pygments.lexers.web', 'XML', ('xml',), ('*.xml', '*.xsl', '*.rss', '*.xslt', '*.xsd', '*.wsdl'), ('text/xml', 'application/xml', 'image/svg+xml', 'application/rss+xml', 'application/atom+xml')), 'XmlPhpLexer': ('pygments.lexers.templates', 'XML+PHP', ('xml+php',), (), ('application/xml+php',)), 'XmlSmartyLexer': ('pygments.lexers.templates', 'XML+Smarty', ('xml+smarty',), (), ('application/xml+smarty',)), 'XsltLexer': ('pygments.lexers.web', 'XSLT', ('xslt',), ('*.xsl', '*.xslt'), ('application/xsl+xml', 'application/xslt+xml')), 'YamlLexer': ('pygments.lexers.text', 'YAML', ('yaml',), ('*.yaml', '*.yml'), ('text/x-yaml',)), } if __name__ == '__main__': import sys import os # lookup lexers found_lexers = [] sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', '..')) for filename in os.listdir('.'): if filename.endswith('.py') and not filename.startswith('_'): module_name = 'pygments.lexers.%s' % filename[:-3] print module_name module = __import__(module_name, None, None, ['']) for lexer_name in module.__all__: lexer = getattr(module, lexer_name) found_lexers.append( '%r: %r' % (lexer_name, (module_name, lexer.name, tuple(lexer.aliases), tuple(lexer.filenames), tuple(lexer.mimetypes)))) # sort them, that should make the diff files for svn smaller found_lexers.sort() # extract useful sourcecode from this file f = open(__file__) try: content = f.read() finally: f.close() header = content[:content.find('LEXERS = {')] footer = content[content.find("if __name__ == '__main__':"):] # write new file f = open(__file__, 'w') f.write(header) f.write('LEXERS = {\n %s,\n}\n\n' % ',\n '.join(found_lexers)) f.write(footer) f.close() eric4-4.5.18/eric/ThirdParty/Pygments/pygments/lexers/PaxHeaders.8617/_clbuiltins.py0000644000175000001440000000013112261012652026436 xustar000000000000000030 mtime=1388582314.200104962 29 atime=1389081085.56672435 30 ctime=1389081086.311724332 eric4-4.5.18/eric/ThirdParty/Pygments/pygments/lexers/_clbuiltins.py0000644000175000001440000003327712261012652026205 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- """ pygments.lexers._clbuiltins ~~~~~~~~~~~~~~~~~~~~~~~~~~~ ANSI Common Lisp builtins. :copyright: Copyright 2006-2012 by the Pygments team, see AUTHORS. :license: BSD, see LICENSE for details. """ BUILTIN_FUNCTIONS = [ # 638 functions '<', '<=', '=', '>', '>=', '-', '/', '/=', '*', '+', '1-', '1+', 'abort', 'abs', 'acons', 'acos', 'acosh', 'add-method', 'adjoin', 'adjustable-array-p', 'adjust-array', 'allocate-instance', 'alpha-char-p', 'alphanumericp', 'append', 'apply', 'apropos', 'apropos-list', 'aref', 'arithmetic-error-operands', 'arithmetic-error-operation', 'array-dimension', 'array-dimensions', 'array-displacement', 'array-element-type', 'array-has-fill-pointer-p', 'array-in-bounds-p', 'arrayp', 'array-rank', 'array-row-major-index', 'array-total-size', 'ash', 'asin', 'asinh', 'assoc', 'assoc-if', 'assoc-if-not', 'atan', 'atanh', 'atom', 'bit', 'bit-and', 'bit-andc1', 'bit-andc2', 'bit-eqv', 'bit-ior', 'bit-nand', 'bit-nor', 'bit-not', 'bit-orc1', 'bit-orc2', 'bit-vector-p', 'bit-xor', 'boole', 'both-case-p', 'boundp', 'break', 'broadcast-stream-streams', 'butlast', 'byte', 'byte-position', 'byte-size', 'caaaar', 'caaadr', 'caaar', 'caadar', 'caaddr', 'caadr', 'caar', 'cadaar', 'cadadr', 'cadar', 'caddar', 'cadddr', 'caddr', 'cadr', 'call-next-method', 'car', 'cdaaar', 'cdaadr', 'cdaar', 'cdadar', 'cdaddr', 'cdadr', 'cdar', 'cddaar', 'cddadr', 'cddar', 'cdddar', 'cddddr', 'cdddr', 'cddr', 'cdr', 'ceiling', 'cell-error-name', 'cerror', 'change-class', 'char', 'char<', 'char<=', 'char=', 'char>', 'char>=', 'char/=', 'character', 'characterp', 'char-code', 'char-downcase', 'char-equal', 'char-greaterp', 'char-int', 'char-lessp', 'char-name', 'char-not-equal', 'char-not-greaterp', 'char-not-lessp', 'char-upcase', 'cis', 'class-name', 'class-of', 'clear-input', 'clear-output', 'close', 'clrhash', 'code-char', 'coerce', 'compile', 'compiled-function-p', 'compile-file', 'compile-file-pathname', 'compiler-macro-function', 'complement', 'complex', 'complexp', 'compute-applicable-methods', 'compute-restarts', 'concatenate', 'concatenated-stream-streams', 'conjugate', 'cons', 'consp', 'constantly', 'constantp', 'continue', 'copy-alist', 'copy-list', 'copy-pprint-dispatch', 'copy-readtable', 'copy-seq', 'copy-structure', 'copy-symbol', 'copy-tree', 'cos', 'cosh', 'count', 'count-if', 'count-if-not', 'decode-float', 'decode-universal-time', 'delete', 'delete-duplicates', 'delete-file', 'delete-if', 'delete-if-not', 'delete-package', 'denominator', 'deposit-field', 'describe', 'describe-object', 'digit-char', 'digit-char-p', 'directory', 'directory-namestring', 'disassemble', 'documentation', 'dpb', 'dribble', 'echo-stream-input-stream', 'echo-stream-output-stream', 'ed', 'eighth', 'elt', 'encode-universal-time', 'endp', 'enough-namestring', 'ensure-directories-exist', 'ensure-generic-function', 'eq', 'eql', 'equal', 'equalp', 'error', 'eval', 'evenp', 'every', 'exp', 'export', 'expt', 'fboundp', 'fceiling', 'fdefinition', 'ffloor', 'fifth', 'file-author', 'file-error-pathname', 'file-length', 'file-namestring', 'file-position', 'file-string-length', 'file-write-date', 'fill', 'fill-pointer', 'find', 'find-all-symbols', 'find-class', 'find-if', 'find-if-not', 'find-method', 'find-package', 'find-restart', 'find-symbol', 'finish-output', 'first', 'float', 'float-digits', 'floatp', 'float-precision', 'float-radix', 'float-sign', 'floor', 'fmakunbound', 'force-output', 'format', 'fourth', 'fresh-line', 'fround', 'ftruncate', 'funcall', 'function-keywords', 'function-lambda-expression', 'functionp', 'gcd', 'gensym', 'gentemp', 'get', 'get-decoded-time', 'get-dispatch-macro-character', 'getf', 'gethash', 'get-internal-real-time', 'get-internal-run-time', 'get-macro-character', 'get-output-stream-string', 'get-properties', 'get-setf-expansion', 'get-universal-time', 'graphic-char-p', 'hash-table-count', 'hash-table-p', 'hash-table-rehash-size', 'hash-table-rehash-threshold', 'hash-table-size', 'hash-table-test', 'host-namestring', 'identity', 'imagpart', 'import', 'initialize-instance', 'input-stream-p', 'inspect', 'integer-decode-float', 'integer-length', 'integerp', 'interactive-stream-p', 'intern', 'intersection', 'invalid-method-error', 'invoke-debugger', 'invoke-restart', 'invoke-restart-interactively', 'isqrt', 'keywordp', 'last', 'lcm', 'ldb', 'ldb-test', 'ldiff', 'length', 'lisp-implementation-type', 'lisp-implementation-version', 'list', 'list*', 'list-all-packages', 'listen', 'list-length', 'listp', 'load', 'load-logical-pathname-translations', 'log', 'logand', 'logandc1', 'logandc2', 'logbitp', 'logcount', 'logeqv', 'logical-pathname', 'logical-pathname-translations', 'logior', 'lognand', 'lognor', 'lognot', 'logorc1', 'logorc2', 'logtest', 'logxor', 'long-site-name', 'lower-case-p', 'machine-instance', 'machine-type', 'machine-version', 'macroexpand', 'macroexpand-1', 'macro-function', 'make-array', 'make-broadcast-stream', 'make-concatenated-stream', 'make-condition', 'make-dispatch-macro-character', 'make-echo-stream', 'make-hash-table', 'make-instance', 'make-instances-obsolete', 'make-list', 'make-load-form', 'make-load-form-saving-slots', 'make-package', 'make-pathname', 'make-random-state', 'make-sequence', 'make-string', 'make-string-input-stream', 'make-string-output-stream', 'make-symbol', 'make-synonym-stream', 'make-two-way-stream', 'makunbound', 'map', 'mapc', 'mapcan', 'mapcar', 'mapcon', 'maphash', 'map-into', 'mapl', 'maplist', 'mask-field', 'max', 'member', 'member-if', 'member-if-not', 'merge', 'merge-pathnames', 'method-combination-error', 'method-qualifiers', 'min', 'minusp', 'mismatch', 'mod', 'muffle-warning', 'name-char', 'namestring', 'nbutlast', 'nconc', 'next-method-p', 'nintersection', 'ninth', 'no-applicable-method', 'no-next-method', 'not', 'notany', 'notevery', 'nreconc', 'nreverse', 'nset-difference', 'nset-exclusive-or', 'nstring-capitalize', 'nstring-downcase', 'nstring-upcase', 'nsublis', 'nsubst', 'nsubst-if', 'nsubst-if-not', 'nsubstitute', 'nsubstitute-if', 'nsubstitute-if-not', 'nth', 'nthcdr', 'null', 'numberp', 'numerator', 'nunion', 'oddp', 'open', 'open-stream-p', 'output-stream-p', 'package-error-package', 'package-name', 'package-nicknames', 'packagep', 'package-shadowing-symbols', 'package-used-by-list', 'package-use-list', 'pairlis', 'parse-integer', 'parse-namestring', 'pathname', 'pathname-device', 'pathname-directory', 'pathname-host', 'pathname-match-p', 'pathname-name', 'pathnamep', 'pathname-type', 'pathname-version', 'peek-char', 'phase', 'plusp', 'position', 'position-if', 'position-if-not', 'pprint', 'pprint-dispatch', 'pprint-fill', 'pprint-indent', 'pprint-linear', 'pprint-newline', 'pprint-tab', 'pprint-tabular', 'prin1', 'prin1-to-string', 'princ', 'princ-to-string', 'print', 'print-object', 'probe-file', 'proclaim', 'provide', 'random', 'random-state-p', 'rassoc', 'rassoc-if', 'rassoc-if-not', 'rational', 'rationalize', 'rationalp', 'read', 'read-byte', 'read-char', 'read-char-no-hang', 'read-delimited-list', 'read-from-string', 'read-line', 'read-preserving-whitespace', 'read-sequence', 'readtable-case', 'readtablep', 'realp', 'realpart', 'reduce', 'reinitialize-instance', 'rem', 'remhash', 'remove', 'remove-duplicates', 'remove-if', 'remove-if-not', 'remove-method', 'remprop', 'rename-file', 'rename-package', 'replace', 'require', 'rest', 'restart-name', 'revappend', 'reverse', 'room', 'round', 'row-major-aref', 'rplaca', 'rplacd', 'sbit', 'scale-float', 'schar', 'search', 'second', 'set', 'set-difference', 'set-dispatch-macro-character', 'set-exclusive-or', 'set-macro-character', 'set-pprint-dispatch', 'set-syntax-from-char', 'seventh', 'shadow', 'shadowing-import', 'shared-initialize', 'short-site-name', 'signal', 'signum', 'simple-bit-vector-p', 'simple-condition-format-arguments', 'simple-condition-format-control', 'simple-string-p', 'simple-vector-p', 'sin', 'sinh', 'sixth', 'sleep', 'slot-boundp', 'slot-exists-p', 'slot-makunbound', 'slot-missing', 'slot-unbound', 'slot-value', 'software-type', 'software-version', 'some', 'sort', 'special-operator-p', 'sqrt', 'stable-sort', 'standard-char-p', 'store-value', 'stream-element-type', 'stream-error-stream', 'stream-external-format', 'streamp', 'string', 'string<', 'string<=', 'string=', 'string>', 'string>=', 'string/=', 'string-capitalize', 'string-downcase', 'string-equal', 'string-greaterp', 'string-left-trim', 'string-lessp', 'string-not-equal', 'string-not-greaterp', 'string-not-lessp', 'stringp', 'string-right-trim', 'string-trim', 'string-upcase', 'sublis', 'subseq', 'subsetp', 'subst', 'subst-if', 'subst-if-not', 'substitute', 'substitute-if', 'substitute-if-not', 'subtypep','svref', 'sxhash', 'symbol-function', 'symbol-name', 'symbolp', 'symbol-package', 'symbol-plist', 'symbol-value', 'synonym-stream-symbol', 'syntax:', 'tailp', 'tan', 'tanh', 'tenth', 'terpri', 'third', 'translate-logical-pathname', 'translate-pathname', 'tree-equal', 'truename', 'truncate', 'two-way-stream-input-stream', 'two-way-stream-output-stream', 'type-error-datum', 'type-error-expected-type', 'type-of', 'typep', 'unbound-slot-instance', 'unexport', 'unintern', 'union', 'unread-char', 'unuse-package', 'update-instance-for-different-class', 'update-instance-for-redefined-class', 'upgraded-array-element-type', 'upgraded-complex-part-type', 'upper-case-p', 'use-package', 'user-homedir-pathname', 'use-value', 'values', 'values-list', 'vector', 'vectorp', 'vector-pop', 'vector-push', 'vector-push-extend', 'warn', 'wild-pathname-p', 'write', 'write-byte', 'write-char', 'write-line', 'write-sequence', 'write-string', 'write-to-string', 'yes-or-no-p', 'y-or-n-p', 'zerop', ] SPECIAL_FORMS = [ 'block', 'catch', 'declare', 'eval-when', 'flet', 'function', 'go', 'if', 'labels', 'lambda', 'let', 'let*', 'load-time-value', 'locally', 'macrolet', 'multiple-value-call', 'multiple-value-prog1', 'progn', 'progv', 'quote', 'return-from', 'setq', 'symbol-macrolet', 'tagbody', 'the', 'throw', 'unwind-protect', ] MACROS = [ 'and', 'assert', 'call-method', 'case', 'ccase', 'check-type', 'cond', 'ctypecase', 'decf', 'declaim', 'defclass', 'defconstant', 'defgeneric', 'define-compiler-macro', 'define-condition', 'define-method-combination', 'define-modify-macro', 'define-setf-expander', 'define-symbol-macro', 'defmacro', 'defmethod', 'defpackage', 'defparameter', 'defsetf', 'defstruct', 'deftype', 'defun', 'defvar', 'destructuring-bind', 'do', 'do*', 'do-all-symbols', 'do-external-symbols', 'dolist', 'do-symbols', 'dotimes', 'ecase', 'etypecase', 'formatter', 'handler-bind', 'handler-case', 'ignore-errors', 'incf', 'in-package', 'lambda', 'loop', 'loop-finish', 'make-method', 'multiple-value-bind', 'multiple-value-list', 'multiple-value-setq', 'nth-value', 'or', 'pop', 'pprint-exit-if-list-exhausted', 'pprint-logical-block', 'pprint-pop', 'print-unreadable-object', 'prog', 'prog*', 'prog1', 'prog2', 'psetf', 'psetq', 'push', 'pushnew', 'remf', 'restart-bind', 'restart-case', 'return', 'rotatef', 'setf', 'shiftf', 'step', 'time', 'trace', 'typecase', 'unless', 'untrace', 'when', 'with-accessors', 'with-compilation-unit', 'with-condition-restarts', 'with-hash-table-iterator', 'with-input-from-string', 'with-open-file', 'with-open-stream', 'with-output-to-string', 'with-package-iterator', 'with-simple-restart', 'with-slots', 'with-standard-io-syntax', ] LAMBDA_LIST_KEYWORDS = [ '&allow-other-keys', '&aux', '&body', '&environment', '&key', '&optional', '&rest', '&whole', ] DECLARATIONS = [ 'dynamic-extent', 'ignore', 'optimize', 'ftype', 'inline', 'special', 'ignorable', 'notinline', 'type', ] BUILTIN_TYPES = [ 'atom', 'boolean', 'base-char', 'base-string', 'bignum', 'bit', 'compiled-function', 'extended-char', 'fixnum', 'keyword', 'nil', 'signed-byte', 'short-float', 'single-float', 'double-float', 'long-float', 'simple-array', 'simple-base-string', 'simple-bit-vector', 'simple-string', 'simple-vector', 'standard-char', 'unsigned-byte', # Condition Types 'arithmetic-error', 'cell-error', 'condition', 'control-error', 'division-by-zero', 'end-of-file', 'error', 'file-error', 'floating-point-inexact', 'floating-point-overflow', 'floating-point-underflow', 'floating-point-invalid-operation', 'parse-error', 'package-error', 'print-not-readable', 'program-error', 'reader-error', 'serious-condition', 'simple-condition', 'simple-error', 'simple-type-error', 'simple-warning', 'stream-error', 'storage-condition', 'style-warning', 'type-error', 'unbound-variable', 'unbound-slot', 'undefined-function', 'warning', ] BUILTIN_CLASSES = [ 'array', 'broadcast-stream', 'bit-vector', 'built-in-class', 'character', 'class', 'complex', 'concatenated-stream', 'cons', 'echo-stream', 'file-stream', 'float', 'function', 'generic-function', 'hash-table', 'integer', 'list', 'logical-pathname', 'method-combination', 'method', 'null', 'number', 'package', 'pathname', 'ratio', 'rational', 'readtable', 'real', 'random-state', 'restart', 'sequence', 'standard-class', 'standard-generic-function', 'standard-method', 'standard-object', 'string-stream', 'stream', 'string', 'structure-class', 'structure-object', 'symbol', 'synonym-stream', 't', 'two-way-stream', 'vector', ] eric4-4.5.18/eric/ThirdParty/Pygments/pygments/lexers/PaxHeaders.8617/hdl.py0000644000175000001440000000013112261012652024676 xustar000000000000000030 mtime=1388582314.202104988 29 atime=1389081085.57772435 30 ctime=1389081086.311724332 eric4-4.5.18/eric/ThirdParty/Pygments/pygments/lexers/hdl.py0000644000175000001440000003746512261012652024450 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- """ pygments.lexers.hdl ~~~~~~~~~~~~~~~~~~~ Lexers for hardware descriptor languages. :copyright: Copyright 2006-2012 by the Pygments team, see AUTHORS. :license: BSD, see LICENSE for details. """ import re from pygments.lexer import RegexLexer, bygroups, include, using, this from pygments.token import \ Text, Comment, Operator, Keyword, Name, String, Number, Punctuation, \ Error __all__ = ['VerilogLexer', 'SystemVerilogLexer', 'VhdlLexer'] class VerilogLexer(RegexLexer): """ For verilog source code with preprocessor directives. *New in Pygments 1.4.* """ name = 'verilog' aliases = ['v'] filenames = ['*.v'] mimetypes = ['text/x-verilog'] #: optional Comment or Whitespace _ws = r'(?:\s|//.*?\n|/[*].*?[*]/)+' tokens = { 'root': [ (r'^\s*`define', Comment.Preproc, 'macro'), (r'\n', Text), (r'\s+', Text), (r'\\\n', Text), # line continuation (r'/(\\\n)?/(\n|(.|\n)*?[^\\]\n)', Comment.Single), (r'/(\\\n)?[*](.|\n)*?[*](\\\n)?/', Comment.Multiline), (r'[{}#@]', Punctuation), (r'L?"', String, 'string'), (r"L?'(\\.|\\[0-7]{1,3}|\\x[a-fA-F0-9]{1,2}|[^\\\'\n])'", String.Char), (r'(\d+\.\d*|\.\d+|\d+)[eE][+-]?\d+[lL]?', Number.Float), (r'(\d+\.\d*|\.\d+|\d+[fF])[fF]?', Number.Float), (r'([0-9]+)|(\'h)[0-9a-fA-F]+', Number.Hex), (r'([0-9]+)|(\'b)[0-1]+', Number.Hex), # should be binary (r'([0-9]+)|(\'d)[0-9]+', Number.Integer), (r'([0-9]+)|(\'o)[0-7]+', Number.Oct), (r'\'[01xz]', Number), (r'\d+[Ll]?', Number.Integer), (r'\*/', Error), (r'[~!%^&*+=|?:<>/-]', Operator), (r'[()\[\],.;\']', Punctuation), (r'`[a-zA-Z_][a-zA-Z0-9_]*', Name.Constant), (r'^(\s*)(package)(\s+)', bygroups(Text, Keyword.Namespace, Text)), (r'^(\s*)(import)(\s+)', bygroups(Text, Keyword.Namespace, Text), 'import'), (r'(always|always_comb|always_ff|always_latch|and|assign|automatic|' r'begin|break|buf|bufif0|bufif1|case|casex|casez|cmos|const|' r'continue|deassign|default|defparam|disable|do|edge|else|end|endcase|' r'endfunction|endgenerate|endmodule|endpackage|endprimitive|endspecify|' r'endtable|endtask|enum|event|final|for|force|forever|fork|function|' r'generate|genvar|highz0|highz1|if|initial|inout|input|' r'integer|join|large|localparam|macromodule|medium|module|' r'nand|negedge|nmos|nor|not|notif0|notif1|or|output|packed|' r'parameter|pmos|posedge|primitive|pull0|pull1|pulldown|pullup|rcmos|' r'ref|release|repeat|return|rnmos|rpmos|rtran|rtranif0|' r'rtranif1|scalared|signed|small|specify|specparam|strength|' r'string|strong0|strong1|struct|table|task|' r'tran|tranif0|tranif1|type|typedef|' r'unsigned|var|vectored|void|wait|weak0|weak1|while|' r'xnor|xor)\b', Keyword), (r'`(accelerate|autoexpand_vectornets|celldefine|default_nettype|' r'else|elsif|endcelldefine|endif|endprotect|endprotected|' r'expand_vectornets|ifdef|ifndef|include|noaccelerate|noexpand_vectornets|' r'noremove_gatenames|noremove_netnames|nounconnected_drive|' r'protect|protected|remove_gatenames|remove_netnames|resetall|' r'timescale|unconnected_drive|undef)\b', Comment.Preproc), (r'\$(bits|bitstoreal|bitstoshortreal|countdrivers|display|fclose|' r'fdisplay|finish|floor|fmonitor|fopen|fstrobe|fwrite|' r'getpattern|history|incsave|input|itor|key|list|log|' r'monitor|monitoroff|monitoron|nokey|nolog|printtimescale|' r'random|readmemb|readmemh|realtime|realtobits|reset|reset_count|' r'reset_value|restart|rtoi|save|scale|scope|shortrealtobits|' r'showscopes|showvariables|showvars|sreadmemb|sreadmemh|' r'stime|stop|strobe|time|timeformat|write)\b', Name.Builtin), (r'(byte|shortint|int|longint|integer|time|' r'bit|logic|reg|' r'supply0|supply1|tri|triand|trior|tri0|tri1|trireg|uwire|wire|wand|wor' r'shortreal|real|realtime)\b', Keyword.Type), ('[a-zA-Z_][a-zA-Z0-9_]*:(?!:)', Name.Label), ('[a-zA-Z_][a-zA-Z0-9_]*', Name), ], 'string': [ (r'"', String, '#pop'), (r'\\([\\abfnrtv"\']|x[a-fA-F0-9]{2,4}|[0-7]{1,3})', String.Escape), (r'[^\\"\n]+', String), # all other characters (r'\\\n', String), # line continuation (r'\\', String), # stray backslash ], 'macro': [ (r'[^/\n]+', Comment.Preproc), (r'/[*](.|\n)*?[*]/', Comment.Multiline), (r'//.*?\n', Comment.Single, '#pop'), (r'/', Comment.Preproc), (r'(?<=\\)\n', Comment.Preproc), (r'\n', Comment.Preproc, '#pop'), ], 'import': [ (r'[a-zA-Z0-9_:]+\*?', Name.Namespace, '#pop') ] } def get_tokens_unprocessed(self, text): for index, token, value in \ RegexLexer.get_tokens_unprocessed(self, text): # Convention: mark all upper case names as constants if token is Name: if value.isupper(): token = Name.Constant yield index, token, value class SystemVerilogLexer(RegexLexer): """ Extends verilog lexer to recognise all SystemVerilog keywords from IEEE 1800-2009 standard. *New in Pygments 1.5.* """ name = 'systemverilog' aliases = ['sv'] filenames = ['*.sv', '*.svh'] mimetypes = ['text/x-systemverilog'] #: optional Comment or Whitespace _ws = r'(?:\s|//.*?\n|/[*].*?[*]/)+' tokens = { 'root': [ (r'^\s*`define', Comment.Preproc, 'macro'), (r'^(\s*)(package)(\s+)', bygroups(Text, Keyword.Namespace, Text)), (r'^(\s*)(import)(\s+)', bygroups(Text, Keyword.Namespace, Text), 'import'), (r'\n', Text), (r'\s+', Text), (r'\\\n', Text), # line continuation (r'/(\\\n)?/(\n|(.|\n)*?[^\\]\n)', Comment.Single), (r'/(\\\n)?[*](.|\n)*?[*](\\\n)?/', Comment.Multiline), (r'[{}#@]', Punctuation), (r'L?"', String, 'string'), (r"L?'(\\.|\\[0-7]{1,3}|\\x[a-fA-F0-9]{1,2}|[^\\\'\n])'", String.Char), (r'(\d+\.\d*|\.\d+|\d+)[eE][+-]?\d+[lL]?', Number.Float), (r'(\d+\.\d*|\.\d+|\d+[fF])[fF]?', Number.Float), (r'([0-9]+)|(\'h)[0-9a-fA-F]+', Number.Hex), (r'([0-9]+)|(\'b)[0-1]+', Number.Hex), # should be binary (r'([0-9]+)|(\'d)[0-9]+', Number.Integer), (r'([0-9]+)|(\'o)[0-7]+', Number.Oct), (r'\'[01xz]', Number), (r'\d+[Ll]?', Number.Integer), (r'\*/', Error), (r'[~!%^&*+=|?:<>/-]', Operator), (r'[()\[\],.;\']', Punctuation), (r'`[a-zA-Z_][a-zA-Z0-9_]*', Name.Constant), (r'(accept_on|alias|always|always_comb|always_ff|always_latch|' r'and|assert|assign|assume|automatic|before|begin|bind|bins|' r'binsof|bit|break|buf|bufif0|bufif1|byte|case|casex|casez|' r'cell|chandle|checker|class|clocking|cmos|config|const|constraint|' r'context|continue|cover|covergroup|coverpoint|cross|deassign|' r'default|defparam|design|disable|dist|do|edge|else|end|endcase|' r'endchecker|endclass|endclocking|endconfig|endfunction|endgenerate|' r'endgroup|endinterface|endmodule|endpackage|endprimitive|' r'endprogram|endproperty|endsequence|endspecify|endtable|' r'endtask|enum|event|eventually|expect|export|extends|extern|' r'final|first_match|for|force|foreach|forever|fork|forkjoin|' r'function|generate|genvar|global|highz0|highz1|if|iff|ifnone|' r'ignore_bins|illegal_bins|implies|import|incdir|include|' r'initial|inout|input|inside|instance|int|integer|interface|' r'intersect|join|join_any|join_none|large|let|liblist|library|' r'local|localparam|logic|longint|macromodule|matches|medium|' r'modport|module|nand|negedge|new|nexttime|nmos|nor|noshowcancelled|' r'not|notif0|notif1|null|or|output|package|packed|parameter|' r'pmos|posedge|primitive|priority|program|property|protected|' r'pull0|pull1|pulldown|pullup|pulsestyle_ondetect|pulsestyle_onevent|' r'pure|rand|randc|randcase|randsequence|rcmos|real|realtime|' r'ref|reg|reject_on|release|repeat|restrict|return|rnmos|' r'rpmos|rtran|rtranif0|rtranif1|s_always|s_eventually|s_nexttime|' r's_until|s_until_with|scalared|sequence|shortint|shortreal|' r'showcancelled|signed|small|solve|specify|specparam|static|' r'string|strong|strong0|strong1|struct|super|supply0|supply1|' r'sync_accept_on|sync_reject_on|table|tagged|task|this|throughout|' r'time|timeprecision|timeunit|tran|tranif0|tranif1|tri|tri0|' r'tri1|triand|trior|trireg|type|typedef|union|unique|unique0|' r'unsigned|until|until_with|untyped|use|uwire|var|vectored|' r'virtual|void|wait|wait_order|wand|weak|weak0|weak1|while|' r'wildcard|wire|with|within|wor|xnor|xor)\b', Keyword ), (r'(`__FILE__|`__LINE__|`begin_keywords|`celldefine|`default_nettype|' r'`define|`else|`elsif|`end_keywords|`endcelldefine|`endif|' r'`ifdef|`ifndef|`include|`line|`nounconnected_drive|`pragma|' r'`resetall|`timescale|`unconnected_drive|`undef|`undefineall)\b', Comment.Preproc ), (r'(\$display|\$displayb|\$displayh|\$displayo|\$dumpall|\$dumpfile|' r'\$dumpflush|\$dumplimit|\$dumpoff|\$dumpon|\$dumpports|' r'\$dumpportsall|\$dumpportsflush|\$dumpportslimit|\$dumpportsoff|' r'\$dumpportson|\$dumpvars|\$fclose|\$fdisplay|\$fdisplayb|' r'\$fdisplayh|\$fdisplayo|\$feof|\$ferror|\$fflush|\$fgetc|' r'\$fgets|\$fmonitor|\$fmonitorb|\$fmonitorh|\$fmonitoro|' r'\$fopen|\$fread|\$fscanf|\$fseek|\$fstrobe|\$fstrobeb|\$fstrobeh|' r'\$fstrobeo|\$ftell|\$fwrite|\$fwriteb|\$fwriteh|\$fwriteo|' r'\$monitor|\$monitorb|\$monitorh|\$monitoro|\$monitoroff|' r'\$monitoron|\$plusargs|\$readmemb|\$readmemh|\$rewind|\$sformat|' r'\$sformatf|\$sscanf|\$strobe|\$strobeb|\$strobeh|\$strobeo|' r'\$swrite|\$swriteb|\$swriteh|\$swriteo|\$test|\$ungetc|' r'\$value\$plusargs|\$write|\$writeb|\$writeh|\$writememb|' r'\$writememh|\$writeo)\b' , Name.Builtin ), (r'(class)(\s+)', bygroups(Keyword, Text), 'classname'), (r'(byte|shortint|int|longint|integer|time|' r'bit|logic|reg|' r'supply0|supply1|tri|triand|trior|tri0|tri1|trireg|uwire|wire|wand|wor' r'shortreal|real|realtime)\b', Keyword.Type), ('[a-zA-Z_][a-zA-Z0-9_]*:(?!:)', Name.Label), ('[a-zA-Z_][a-zA-Z0-9_]*', Name), ], 'classname': [ (r'[a-zA-Z_][a-zA-Z0-9_]*', Name.Class, '#pop'), ], 'string': [ (r'"', String, '#pop'), (r'\\([\\abfnrtv"\']|x[a-fA-F0-9]{2,4}|[0-7]{1,3})', String.Escape), (r'[^\\"\n]+', String), # all other characters (r'\\\n', String), # line continuation (r'\\', String), # stray backslash ], 'macro': [ (r'[^/\n]+', Comment.Preproc), (r'/[*](.|\n)*?[*]/', Comment.Multiline), (r'//.*?\n', Comment.Single, '#pop'), (r'/', Comment.Preproc), (r'(?<=\\)\n', Comment.Preproc), (r'\n', Comment.Preproc, '#pop'), ], 'import': [ (r'[a-zA-Z0-9_:]+\*?', Name.Namespace, '#pop') ] } def get_tokens_unprocessed(self, text): for index, token, value in \ RegexLexer.get_tokens_unprocessed(self, text): # Convention: mark all upper case names as constants if token is Name: if value.isupper(): token = Name.Constant yield index, token, value def analyse_text(text): if text.startswith('//') or text.startswith('/*'): return 0.5 class VhdlLexer(RegexLexer): """ For VHDL source code. *New in Pygments 1.5.* """ name = 'vhdl' aliases = ['vhdl'] filenames = ['*.vhdl', '*.vhd'] mimetypes = ['text/x-vhdl'] flags = re.MULTILINE | re.IGNORECASE tokens = { 'root': [ (r'\n', Text), (r'\s+', Text), (r'\\\n', Text), # line continuation (r'--(?![!#$%&*+./<=>?@\^|_~]).*?$', Comment.Single), (r"'(U|X|0|1|Z|W|L|H|-)'", String.Char), (r'[~!%^&*+=|?:<>/-]', Operator), (r"'[a-zA-Z_][a-zA-Z0-9_]*", Name.Attribute), (r'[()\[\],.;\']', Punctuation), (r'"[^\n\\]*"', String), (r'(library)(\s+)([a-zA-Z_][a-zA-Z0-9_]*)', bygroups(Keyword, Text, Name.Namespace)), (r'(use)(\s+)(entity)', bygroups(Keyword, Text, Keyword)), (r'(use)(\s+)([a-zA-Z_][\.a-zA-Z0-9_]*)', bygroups(Keyword, Text, Name.Namespace)), (r'(entity|component)(\s+)([a-zA-Z_][a-zA-Z0-9_]*)', bygroups(Keyword, Text, Name.Class)), (r'(architecture|configuration)(\s+)([a-zA-Z_][a-zA-Z0-9_]*)(\s+)' r'(of)(\s+)([a-zA-Z_][a-zA-Z0-9_]*)(\s+)(is)', bygroups(Keyword, Text, Name.Class, Text, Keyword, Text, Name.Class, Text, Keyword)), (r'(end)(\s+)', bygroups(using(this), Text), 'endblock'), include('types'), include('keywords'), include('numbers'), (r'[a-zA-Z_][a-zA-Z0-9_]*', Name), ], 'endblock': [ include('keywords'), (r'[a-zA-Z_][a-zA-Z0-9_]*', Name.Class), (r'(\s+)', Text), (r';', Punctuation, '#pop'), ], 'types': [ (r'(boolean|bit|character|severity_level|integer|time|delay_length|' r'natural|positive|string|bit_vector|file_open_kind|' r'file_open_status|std_ulogic|std_ulogic_vector|std_logic|' r'std_logic_vector)\b', Keyword.Type), ], 'keywords': [ (r'(abs|access|after|alias|all|and|' r'architecture|array|assert|attribute|begin|block|' r'body|buffer|bus|case|component|configuration|' r'constant|disconnect|downto|else|elsif|end|' r'entity|exit|file|for|function|generate|' r'generic|group|guarded|if|impure|in|' r'inertial|inout|is|label|library|linkage|' r'literal|loop|map|mod|nand|new|' r'next|nor|not|null|of|on|' r'open|or|others|out|package|port|' r'postponed|procedure|process|pure|range|record|' r'register|reject|return|rol|ror|select|' r'severity|signal|shared|sla|sli|sra|' r'srl|subtype|then|to|transport|type|' r'units|until|use|variable|wait|when|' r'while|with|xnor|xor)\b', Keyword), ], 'numbers': [ (r'\d{1,2}#[0-9a-fA-F_]+#?', Number.Integer), (r'[0-1_]+(\.[0-1_])', Number.Integer), (r'\d+', Number.Integer), (r'(\d+\.\d*|\.\d+|\d+)[eE][+-]?\d+', Number.Float), (r'H"[0-9a-fA-F_]+"', Number.Oct), (r'O"[0-7_]+"', Number.Oct), (r'B"[0-1_]+"', Number.Oct), ], } eric4-4.5.18/eric/ThirdParty/Pygments/pygments/lexers/PaxHeaders.8617/sql.py0000644000175000001440000000013112261012652024726 xustar000000000000000030 mtime=1388582314.205105026 29 atime=1389081085.57772435 30 ctime=1389081086.311724332 eric4-4.5.18/eric/ThirdParty/Pygments/pygments/lexers/sql.py0000644000175000001440000005610112261012652024464 0ustar00detlevusers00000000000000# -*- coding: utf-8 -*- """ pygments.lexers.sql ~~~~~~~~~~~~~~~~~~~ Lexers for various SQL dialects and related interactive sessions. Postgres specific lexers: `PostgresLexer` A SQL lexer for the PostgreSQL dialect. Differences w.r.t. the SQL lexer are: - keywords and data types list parsed from the PG docs (run the `_postgres_builtins` module to update them); - Content of $-strings parsed using a specific lexer, e.g. the content of a PL/Python function is parsed using the Python lexer; - parse PG specific constructs: E-strings, $-strings, U&-strings, different operators and punctuation. `PlPgsqlLexer` A lexer for the PL/pgSQL language. Adds a few specific construct on top of the PG SQL lexer (such as <